Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
266 commits
Select commit Hold shift + click to select a range
c90e6e7
feat(channels): Add channel agent bridge abstraction (#5978)
doudouOUC Jun 29, 2026
8babaa4
fix(web-shell): improve follow-up suggestion handling (#5996)
ytahdn Jun 29, 2026
1af1bb8
fix(ci): cover release integration regressions (#5994)
yiliang114 Jun 29, 2026
35a8851
feat(core): add --insecure flag to skip TLS verification for self-sig…
TianYuan1024 Jun 29, 2026
0af3cd8
fix(core): filter thought parts from Stop hook last_assistant_message…
DennisYu07 Jun 29, 2026
e2b8555
feat(cli): add --safe-mode flag to disable all customizations for tro…
DennisYu07 Jun 29, 2026
f11bb31
fix(cli): fix thought viewer truncation, layout gaps, and choppy scro…
chiga0 Jun 29, 2026
565e4bc
fix(cli): Guard serve fast-path bundle closure (#5995)
doudouOUC Jun 29, 2026
d442a15
feat(daemon): support @extension mentions (#6008)
callmeYe Jun 29, 2026
e00fe6a
test(ci): stabilize cron interactive release check (#6016)
yiliang114 Jun 29, 2026
fce79dd
feat(web-shell): friendlier Esc interruption + queued-prompt UX (#6025)
carffuca Jun 30, 2026
8b4871b
fix(cli): make the non-VP transcript scrollable during multi-agent ru…
chiga0 Jun 30, 2026
c302e3e
feat(daemon,sdk): resumable /acp session stream (Last-Event-ID) + opt…
chiga0 Jun 30, 2026
05be7b1
fix(core): Allow subagents to exit plan mode (#6026)
doudouOUC Jun 30, 2026
7a04512
feat(core): support glob patterns in mcp.allowed and mcp.excluded (#6…
DennisYu07 Jun 30, 2026
f3694dd
feat(ui): add ui.history.collapsePreviewCount to show last N turns wh…
mvanhorn Jun 30, 2026
7f34cda
fix(ci): stabilize merge queue checks (#6056)
yiliang114 Jun 30, 2026
e1ddcdc
feat(loop): add autonomous mode for a bare /loop (#5991)
qqqys Jun 30, 2026
f37c64c
fix(cli): Keep serve health responsive before runtime load (#6013)
doudouOUC Jun 30, 2026
ea536d3
fix(cli): Handle ACP read_file for managed local paths (#6021)
doudouOUC Jun 30, 2026
cc0a639
Sanitize subagent result tags (#6027)
yiliang114 Jun 30, 2026
d545536
Avoid full-history clones in OOM-prone paths (#6018)
yiliang114 Jun 30, 2026
c5fb9fd
fix(ci): create isolated home before tests (#6071)
yiliang114 Jun 30, 2026
ceb1d30
fix(channels): structure DingTalk stream logs (#5998)
qqqys Jun 30, 2026
f23357d
fix(cli): Support Windows-style tilde paths (#6029)
VectorPeak Jun 30, 2026
91f3e8a
fix(acp): stop repeated invalid tool parameter loops (#6076)
yiliang114 Jun 30, 2026
1609bda
feat(web-shell): queue prompts while turns are running (#6005)
ytahdn Jun 30, 2026
52f875a
ci(workflows): remind authors not to force-push active PRs (#6035)
wenshao Jun 30, 2026
a756676
fix(cli): replace all emoji with Unicode text symbols in TUI renderin…
pomelo-nwu Jun 30, 2026
7b9e318
feat(web-shell): add mobile sidebar drawer with session list (#6003)
pomelo-nwu Jun 30, 2026
c48dc32
fix(daemon): resolve ACP permission votes across connections (#5912)
chiga0 Jun 30, 2026
e92fcba
fix(cli): switch TUI prefix ✦→◆ to fix glyph overflow on some termina…
pomelo-nwu Jun 30, 2026
52fdc10
feat(cli): support inline one-shot model override in /model (#5967) (…
TianYuan1024 Jun 30, 2026
a974594
fix(core): Parse tagged thinking for GLM responses (#6033)
VectorPeak Jun 30, 2026
cf6323b
feat(cli): Add daemon-managed channel worker for serve --channel (#6031)
doudouOUC Jul 1, 2026
6c36ac2
Fix ACP daemon loop review follow-ups (#6085)
yiliang114 Jul 1, 2026
e5cf48e
feat(serve): add sessionless workspace remember (#5884)
callmeYe Jul 1, 2026
4746bc1
feat(ui): add mouse click & hover in alternate-screen mode (#6011)
DragonnZhang Jul 1, 2026
c9e1546
feat(web-shell): add browser tab favicon (#6091)
wenshao Jul 1, 2026
afb4b07
feat(cli): add /config key=value slash command to set any setting fro…
DennisYu07 Jul 1, 2026
71fa676
fix(core): subtract reserved output tokens from context window for co…
kagura-agent Jul 1, 2026
60f8937
feat(core): Disallow plan lifecycle tools in subagents (#6087)
doudouOUC Jul 1, 2026
ff70f79
fix(core): keep plan mode and require approval when plan gate is unav…
mvanhorn Jul 1, 2026
4d6c7cc
fix(cli): validate ask_user_question TUI option input (#6042)
russeell Jul 1, 2026
c958e6f
feat(channel): add channel loop support (#6073)
qqqys Jul 1, 2026
fc184f2
fix(deps): clear critical runtime audit findings (#6065)
gauravyad86 Jul 1, 2026
e324104
docs: refresh settings, MCP glob, auth alias, and autonomous loop doc…
DragonnZhang Jul 1, 2026
4fd72b3
feat(web-shell): polish chat UI and table rendering (#6099)
ytahdn Jul 1, 2026
fe866b7
fix: remove accidentally committed OpenClaw-Query-Submit submodule (#…
DennisYu07 Jul 1, 2026
0cbd687
fix(scripts): avoid shell injection in sandbox command detection (#6108)
tanzhenxin Jul 1, 2026
66521d8
ci(autofix): fix scheduled and labeled issue triggers (#6080)
yiliang114 Jul 1, 2026
855a2b3
feat(auto-mode): add classifyAllShell setting to route all shell comm…
DennisYu07 Jul 1, 2026
17fbaa2
refactor(review): drop deterministic-analysis and autofix steps (#6092)
wenshao Jul 1, 2026
891c59f
feat(channels): add group history backfill (#6074)
qqqys Jul 1, 2026
b4fe437
feat(daemon): Add session archive support (#6058)
doudouOUC Jul 1, 2026
df3e753
feat(cli): add tabbed Settings dialog with Status and Stats tabs (#6044)
DragonnZhang Jul 1, 2026
def96c8
feat(core): add configurable idle timeout for MCP tool calls (#6061)
DennisYu07 Jul 1, 2026
15d30dd
fix(web-shell): fix InsightProgress layout and clean up UI elements (…
yuanyuanAli Jul 1, 2026
1287ac1
ci: stabilize actionlint on self-hosted runners (#6113)
yiliang114 Jul 1, 2026
b9b3bce
fix(daemon): Route ACP images through the vision bridge (#6111)
yiliang114 Jul 1, 2026
95c49fc
fix(ci): stabilize Windows loop tests (#6082)
yiliang114 Jul 1, 2026
1a46df5
fix(cli): load browser MCP tools by default (#6006)
yiliang114 Jul 1, 2026
1abc958
fix(model): disambiguate vision model endpoints (#6070)
yiliang114 Jul 1, 2026
6a5ad45
[codex] Add explicit channel memory for messaging channels (#6051)
qqqys Jul 1, 2026
dab218f
test(core): fix MCP idle timeout config stubs (#6120)
yiliang114 Jul 1, 2026
f3ea17b
chore(release): v0.19.4 (#6132)
qwen-code-ci-bot Jul 1, 2026
487fb45
feat(cli): Harden daemon-managed channel worker (#6098)
doudouOUC Jul 1, 2026
1467ed3
fix(web-shell): defer session creation until first prompt (#6066)
ytahdn Jul 1, 2026
427b5ad
docs: document model/auth settings, /model --vision, and --safe-mode …
DragonnZhang Jul 1, 2026
8d5e47a
fix(cli): clip live markdown to the viewport to stop non-VP scrollbac…
chiga0 Jul 1, 2026
32d2f46
ci: add fork PR safety precheck (#5926)
yiliang114 Jul 1, 2026
bb7b4d8
feat(serve): support HTTPS/TLS via --tls-cert and --tls-key flags (#6…
pomelo-nwu Jul 1, 2026
e0e90cc
fix(cli): yield to React after addItem to reduce input lag (#6059)
Alex-ai-future Jul 1, 2026
9031d09
ci: persist npm cache on self-hosted runners (#6130)
yiliang114 Jul 1, 2026
1f028da
feat(cli): show description and level in /skills ACP output (#6117)
doudouOUC Jul 1, 2026
4ce6a08
fix(diff): show whitespace-only edits instead of 'No changes detected…
doudouOUC Jul 1, 2026
ea50153
Add compact session timeline rail (#6078)
callmeYe Jul 1, 2026
2c95d93
feat(core,cli): unified reasoning effort with /effort command (#6072)
DragonnZhang Jul 1, 2026
46814e4
feat(core): Add leader approval for plan-required teammates (#6138)
doudouOUC Jul 1, 2026
fd76550
fix(ci): grant PR review precheck permissions (#6147)
wenshao Jul 2, 2026
b1c5950
fix(ci): list workflow comments with GET (#6148)
wenshao Jul 2, 2026
4537cc3
fix(ci): use CI_BOT_PAT for precheck comment on fork PRs (#6151)
yiliang114 Jul 2, 2026
6d26e1e
fix(cli): avoid blocking ACP sessions on MCP readiness (#6161)
BZ-D Jul 2, 2026
3026db3
fix(ci): allow prechecked fork PR automation (#6160)
yiliang114 Jul 2, 2026
5054303
fix(ci): fall back to latest autofix sandbox image (#6159)
yiliang114 Jul 2, 2026
60c2a63
fix(ci): create precheck comments via REST (#6156)
wenshao Jul 2, 2026
f3b3b99
fix(web-shell): show skill slash commands (e.g. /review) before first…
wenshao Jul 2, 2026
55e425c
docs: document the /config slash command (#6145)
DragonnZhang Jul 2, 2026
bf8bdd9
fix(web-shell): only show scroll-to-bottom button when content overfl…
ytahdn Jul 2, 2026
813bd74
fix(web-shell): improve disconnected composer handling (#6166)
ytahdn Jul 2, 2026
262186c
fix(ci): diagnose autofix publish credentials (#6162)
yiliang114 Jul 2, 2026
489bea9
fix(release): reduce npm package scan triggers (#6164)
yiliang114 Jul 2, 2026
227a60c
fix(channels): replace setTimeout(0) drain with turn_complete SSE bar…
doudouOUC Jul 2, 2026
727bd47
feat(channels): add DingTalk proactive send for channel loops (#6174)
qqqys Jul 2, 2026
230f4af
fix: lazy-load memory prompt when indexes are empty (#6097) (#6104)
kagura-agent Jul 2, 2026
ca61d78
feat(channels): add identity and task lifecycle metadata (#6105)
qqqys Jul 2, 2026
897fdc8
feat(core): add retry with backoff for MCP capability discovery (#6158)
DennisYu07 Jul 2, 2026
1fd47b3
fix(cli): skip MCP approval dialogs in YOLO mode (#6177)
qwen-code-dev-bot Jul 2, 2026
4b372d3
feat(channels): add listSessions to ChannelAgentBridge (#6182)
doudouOUC Jul 2, 2026
e1e99f7
ci: add autofix PR preparation skill (#6184)
yiliang114 Jul 2, 2026
6509e8d
feat(channels): show lifecycle status in adapters (#6114)
qqqys Jul 2, 2026
76addf4
fix(serve): keep skill slash commands available when the ACP child is…
wenshao Jul 2, 2026
250ead3
fix(web-shell): polish session timeline rail (#6171)
callmeYe Jul 2, 2026
75645ca
test(e2e): stabilize plan mode tool-control assertion (#6176)
yiliang114 Jul 2, 2026
848386a
fix(web-shell): mobile UX — safe areas, overscroll, native-app feel (…
pomelo-nwu Jul 2, 2026
5c9e73f
feat(web-shell): overhaul list-dialog interaction, keyboard nav & a11…
carffuca Jul 2, 2026
39f3108
feat(cli): add credential redaction for worker stderr forwarding (#6146)
doudouOUC Jul 2, 2026
2e669c0
fix(cli): drop /effort tier autocompletion for an argument-hint place…
DragonnZhang Jul 2, 2026
89ddc70
fix(ci): limit fork PR precheck to safety signals (#6178)
yiliang114 Jul 2, 2026
2126474
chore(release): v0.19.5 (#6194)
qwen-code-ci-bot Jul 2, 2026
686a137
fix(web-shell): cut mobile session-switch jank (memoized timeline sig…
qqqys Jul 2, 2026
e6e939e
fix: resolve macOS seatbelt profile path from bundle dir, not chunks/…
mvanhorn Jul 2, 2026
2cb0031
fix(cli): add bootstrap fast paths (#6188)
gauravyad86 Jul 2, 2026
badf851
fix(core): Reduce multimodal history payload size (#6045)
LaZzyMan Jul 2, 2026
9019251
fix(core): always set hook_context in SubagentStart hook path (#6180)
DennisYu07 Jul 2, 2026
b16baf1
ci(release): optimize validation steps (#6133)
yiliang114 Jul 2, 2026
62e11a5
feat(core): add dataviz bundled skill (#6198)
qqqys Jul 3, 2026
dc8e155
docs: correct stale CLI flags/keybinding and document model.reasoning…
DragonnZhang Jul 3, 2026
1931425
fix(scheduler): add opt-in per-tool-call execution timeout (#6136)
Copilot Jul 3, 2026
8de93b8
feat(core): allow sub-agents to spawn nested sub-agents up to a confi…
tanzhenxin Jul 3, 2026
e2e94bc
fix(web-shell): keep the user-selectable wrapper out of flex layout (…
carffuca Jul 3, 2026
ea0749e
feat(web-shell): add daemon UI support for vision model selection (#6…
AmariahAK Jul 3, 2026
31883d5
fix(core): raise stream idle timeout default to 5m and hint the env k…
mvanhorn Jul 3, 2026
9605bcc
feat(cua-driver): sync vendored cua-driver 0.6.8 → 0.7.0 (#6212)
LaZzyMan Jul 3, 2026
0633b8a
feat(scheduler): make recurring cron/loop job expiration configurable…
TianYuan1024 Jul 3, 2026
8dfa761
fix(serve): respect disabled skill settings (#6223)
ytahdn Jul 3, 2026
006ac59
fix: align vscode-ide-companion curly rule with root config (#6221)
yiliang114 Jul 3, 2026
c1235d8
fix(qqbot): security hardening — gateway validation, atomic state, sa…
Eric-GoodBoy-Tech Jul 3, 2026
e5ec601
fix(cua-driver): bump BAKED_VERSION to 0.7.0 (#6241)
LaZzyMan Jul 3, 2026
e743f0e
ci(autofix): run agents on dedicated ECS runners (#6207)
yiliang114 Jul 3, 2026
183ad54
ci: add lightweight PR profiles (#6186)
yiliang114 Jul 3, 2026
e3076e2
revert(core): revert GLM tagged thinking parsing (#6248)
tanzhenxin Jul 3, 2026
b1ec04f
fix(web-shell): improve session restore and loading feedback (#6220)
ytahdn Jul 3, 2026
23c6c70
feat(mobile-mcp): vendor mobile-mcp with opt-in 0-1000 relative coord…
LaZzyMan Jul 3, 2026
da22360
feat(web-shell): show the qwen-code version in the sidebar footer (#6…
wenshao Jul 3, 2026
9658dcc
feat(daemon): add session artifact APIs (#5895)
chiga0 Jul 3, 2026
972cb04
fix(mobile-mcp): remove lint step from CD workflow (monorepo prettier…
LaZzyMan Jul 3, 2026
9ea3099
fix(mobile-mcp): align CD workflow with release.yml npm auth (add sco…
LaZzyMan Jul 3, 2026
2a21963
feat(web-shell): display nested sub-agents as a tree in the tasks pan…
tanzhenxin Jul 3, 2026
5cd459e
fix(mobile-mcp): add production-release environment + scope to CD wor…
LaZzyMan Jul 3, 2026
fe3dd93
Add sessionless workspace memory forget and dream (#6227)
callmeYe Jul 3, 2026
081c46c
fix(ci): add always() to delay-automatic-review and ack-review-reques…
wenshao Jul 3, 2026
6accb8e
fix: avoid vsce secret scanner false positive on regex patterns (#6247)
yiliang114 Jul 3, 2026
8123c6b
fix(web-shell): encode vision model picker selection & polish dispatc…
AmariahAK Jul 3, 2026
68ff698
feat(web-shell): improve slash command discovery (taller menu, group …
wenshao Jul 3, 2026
3911b1d
fix(serve): optimize daemon NDJSON stream handling (#6263)
doudouOUC Jul 3, 2026
e1fc45d
ci(autofix): restore sandbox image flow (#6261)
yiliang114 Jul 3, 2026
67da781
fix(qqbot): markdown-first send, replyMsgId TTL, and dead code remova…
Eric-GoodBoy-Tech Jul 3, 2026
cc64d7c
feat(daemon): expose visionModelId in workspace provider status and w…
qwen-code-dev-bot Jul 3, 2026
4e3fd29
chore(release): v0.19.6 (#6280)
qwen-code-ci-bot Jul 3, 2026
a6a1258
fix(triage): strengthen PR gate with batch detection, problem existen…
pomelo-nwu Jul 3, 2026
7417805
feat(review): route suggestion-level findings to an updatable PR comm…
pomelo-nwu Jul 3, 2026
9f87c90
fix(autofix): unconditionally restore tracked files before branch che…
qwen-code-dev-bot Jul 3, 2026
5dc2e15
feat(serve): Add runtime.activity fields to daemon status API (#6270)
doudouOUC Jul 3, 2026
9b2fb30
feat(web-shell): add a daemon status page backed by GET /daemon/statu…
wenshao Jul 4, 2026
3282c17
Keep auth quick inputs open across focus changes (#6274)
barry166 Jul 4, 2026
18e2eed
Clarify macOS audio prebuild artifact naming (#6275)
barry166 Jul 4, 2026
1a227f0
fix(cache): preserve tools prefix in side-query for Anthropic prompt-…
kagura-agent Jul 4, 2026
ad7e23f
feat(web-shell): add MCP mentions and iconized @ references (#6279)
BZ-D Jul 4, 2026
cdf83d8
fix(core): give Stop-hook continuations a fresh per-turn tool-call bu…
tanzhenxin Jul 4, 2026
d3bd265
perf(glob): prune ignored directories during traversal, not just post…
minmax Jul 4, 2026
2d12c29
fix(web-shell): use theme color for @ group titles (#6294)
BZ-D Jul 4, 2026
2a6a951
fix(acp): pass per-session settings explicitly instead of racing on t…
doudouOUC Jul 4, 2026
c37cb23
feat(web-shell): manage sessions from the sidebar (archive, unarchive…
wenshao Jul 4, 2026
9c96249
fix(core): improve debug txt diagnostics (#6277)
yiliang114 Jul 4, 2026
e48999d
fix(ci): require maintainer-applied `autofix/approved` label for tier…
yiliang114 Jul 4, 2026
0e684a3
fix(auth): prevent persistent 401 after API key change (#6284)
yiliang114 Jul 4, 2026
59e771c
feat(daemon): Add session export endpoint (#6297)
doudouOUC Jul 4, 2026
548ca3d
test(e2e): make fake OpenAI reachable from Docker sandbox (#6302)
yiliang114 Jul 4, 2026
9b3aa52
fix(cli): stream long responses into scrollback to stop scroll-to-top…
MikeWang0316tw Jul 4, 2026
abec702
fix(qqbot): streaming idle-flush with tool-call and stale-callback pr…
Eric-GoodBoy-Tech Jul 4, 2026
bd9bf50
fix(openai): preserve descriptionless tools (#6243)
VectorPeak Jul 4, 2026
aa4bccf
feat(acp): advertise vision-bridge image capability in initialize res…
yiliang114 Jul 4, 2026
4400fe6
fix(core): enforce agent concurrency cap on foreground sub-agents (#6…
kagura-agent Jul 4, 2026
ba7561a
fix(ci): Stop review bots for closed PRs (#6304)
yiliang114 Jul 4, 2026
62c0a0a
fix(core): skip abbreviations in multiple_sentences filter (#6077) (#…
qwen-code-dev-bot Jul 4, 2026
90e1e3d
perf(cli): cache LoadedSettings per workspace with stat-based invalid…
doudouOUC Jul 4, 2026
e9a7917
feat(web-shell): support compact echarts full data blocks (#6232)
zhangxy-zju Jul 4, 2026
905c5c9
fix(ci): skip stale PR review runs (#6313)
yiliang114 Jul 4, 2026
e23c8e8
feat(acp): Batch session load replay (#6309)
doudouOUC Jul 4, 2026
e1f5d21
fix(core): treat request timeout of 0 as disabled instead of aborting…
Nas01010101 Jul 4, 2026
2b732f5
fix(serve): resolve false auth warning in preflight when API key is s…
doudouOUC Jul 4, 2026
1c2a643
fix(core): treat @-attached files as read for prior-read enforcement …
Nas01010101 Jul 4, 2026
4675274
fix(cli): preserve partial remote input JSONL records (#6317)
VectorPeak Jul 4, 2026
015ee42
fix(core): disable qwen thinking via chat_template_kwargs on non-Dash…
beantownbytes Jul 4, 2026
acfb00e
feat(web-shell): add custom at mention panel (#6242)
ytahdn Jul 5, 2026
bfce93a
feat(acp-bridge): Add EventBus subscriber byte cap (#6314)
doudouOUC Jul 5, 2026
e390639
perf(ci): optimize autofix pipeline — fast-track, skip duplicate buil…
yiliang114 Jul 5, 2026
54ba259
fix(web-shell): keep skill slash commands after starting a new sessio…
wenshao Jul 5, 2026
50d027f
test(core): cover full:false branch of recordAttachedFileRead for tru…
Nas01010101 Jul 5, 2026
52a190b
feat(web-shell): time-series metrics charts on Daemon Status (#6307)
wenshao Jul 5, 2026
adda526
fix(web-shell): localize built-in command and skill descriptions in t…
wenshao Jul 5, 2026
06fc052
fix(desktop): enforce transform_data isolation (#6285)
gauravyad86 Jul 5, 2026
9042ede
Notify model when extension capabilities change (#6245)
ZijianZhang989 Jul 5, 2026
03c5447
fix(core): skip no-op max_tokens escalation (#6234)
han-dreamer Jul 5, 2026
1ead34c
fix(core): avoid null OpenAPI schema types (#6323)
VectorPeak Jul 5, 2026
6a726f6
refactor(core): centralize extension runtime refresh (#6152)
ZijianZhang989 Jul 5, 2026
7a528d0
feat(daemon): Add session organization (#6305)
doudouOUC Jul 5, 2026
fe816f6
feat(cli): Surface daemon prompt queue status (#6325)
doudouOUC Jul 5, 2026
60b9c92
Restart stalled ACP bridge for channels (#6330)
qqqys Jul 5, 2026
b13032d
docs(design): daemon side-channel coordination (A1/A2/A4/A5) (#4511)
chiga0 Jul 5, 2026
fa81e0a
docs: fix skill invocation syntax and include Feishu in channel lists…
DragonnZhang Jul 5, 2026
feaeeb2
feat(scheduler): opt-in per-tool-call execution timeout (#6124)
minmax Jul 5, 2026
7605c8b
feat(web-shell): add onSessionChange and onSubmitBefore callbacks (#6…
ytahdn Jul 5, 2026
5d0733f
feat(core): stabilize tool schema declaration order (#6339)
water-in-stone Jul 5, 2026
b8e3550
Qwen-Code has calculated the incorrect context window (#6266)
heyparth1 Jul 5, 2026
0d1d240
feat(core): model fallback chain — auto-switch to backup models on ov…
yiliang114 Jul 5, 2026
49b000d
fix(core): preserve OpenAI reasoning as raw thoughts (#6192)
han-dreamer Jul 5, 2026
8146b7f
fix(core): add UTF-8 prefix for cmd.exe on Windows (#6216)
Aleks-0 Jul 5, 2026
c7170b5
feat(cli): support multi-folder workspaces in file system boundary ch…
yiliang114 Jul 5, 2026
802c382
feat(web-shell): support icon chips for mention tags (#6337)
BZ-D Jul 5, 2026
3bf0fa0
Feat: LSP Server support hot reload (#5953)
water-in-stone Jul 5, 2026
82fb6a4
fix(cli): allow queued input during compression (#6336)
han-dreamer Jul 5, 2026
a8a99f0
fix(web-shell): finalize deferred gated submissions (#6342)
ytahdn Jul 5, 2026
11c874d
feat(cli): Add large pipe frame measurement (#6335)
doudouOUC Jul 5, 2026
b23f888
[codex] add proactive channel loop tools (#6287)
qqqys Jul 5, 2026
1b58ede
fix(cli): smoother live streaming preview — drop "generating more" cu…
MikeWang0316tw Jul 5, 2026
fc701f8
perf: memoize skill scans, debounce sleep-inhibitor log, guard IDE re…
kagura-agent Jul 5, 2026
be0b074
docs: fix settings.json reference drift against schema (#6351)
DragonnZhang Jul 5, 2026
47f62a4
fix(desktop): preserve glued automation history records (#6344)
VectorPeak Jul 5, 2026
edc0555
feat(web-shell): named session groups and color tags in the sidebar (…
wenshao Jul 6, 2026
fa6e0f9
fix(web-shell): suppress stale pending prompt refresh errors (#6352)
ytahdn Jul 6, 2026
9a63c03
feat(web-shell): add a Scheduled Tasks management page (#6348)
wenshao Jul 6, 2026
1783ae8
docs(web-shell): document chart renderer integration (#6353)
zhangxy-zju Jul 6, 2026
170ce79
feat(web-shell): show Settings and Daemon Status as an in-place panel…
wenshao Jul 6, 2026
0c28ddc
ci(autofix): move agent prompts into a project skill (#6306)
yiliang114 Jul 6, 2026
6f2f21f
docs: standardize GitHub Actions capitalization (#6367)
guiyang882 Jul 6, 2026
b726b7c
fix(web-shell): constrain virtual scroll rows (#6362)
ytahdn Jul 6, 2026
5c8af1a
fix(cli): allow ACP local fallback reads from /tmp (#6370)
doudouOUC Jul 6, 2026
cb49633
test(core): make context warning threshold test dynamic (#6391)
yiliang114 Jul 6, 2026
c7fa13d
fix(core): default context windows to 200k (#6387)
tanzhenxin Jul 6, 2026
350191e
feat(web-shell): add token-usage analytics dashboard to Daemon Status…
wenshao Jul 6, 2026
3744cd0
feat(cli): Add Phase 1 workspace runtime registry (#6394)
doudouOUC Jul 6, 2026
f20925e
fix(triage): exclude test files from core module size gate and distin…
Copilot Jul 6, 2026
879b854
fix(cli): Keep model picker entries contiguous in short terminals (#6…
tanzhenxin Jul 6, 2026
063535f
fix(core): log OpenAI error request IDs (#6379)
tanzhenxin Jul 6, 2026
57b3dcd
fix(cli): ignore current review run in presubmit CI (#6397)
yiliang114 Jul 6, 2026
5f7b57f
fix(autofix): improve review addressing and verification (#6382)
yiliang114 Jul 6, 2026
4292102
fix(core): require integer ReadFile pagination params (#6381)
VectorPeak Jul 6, 2026
7281eb5
feat(core): surface PreToolUse hook 'ask' as a TUI confirmation (#5629)
LaZzyMan Jul 6, 2026
2fc6b08
fix(core): resolve symlinks when matching conditional rules and skill…
DennisYu07 Jul 6, 2026
0f98842
fix(web-shell): refine tool detail cards (#6399)
ytahdn Jul 6, 2026
ac123bb
fix(core): preserve no-argument tool calls that stream an empty argum…
tomsen02 Jul 6, 2026
57326e5
feat(review): add issue-fidelity and root-cause ownership gate to /re…
DragonnZhang Jul 6, 2026
881d682
fix(cli): use EnvHttpProxyAgent in channel proxy to respect NO_PROXY …
qwen-code-dev-bot Jul 6, 2026
d56bd1d
fix(daemon): handle settings reload events outside transcript (#6407)
doudouOUC Jul 6, 2026
be7e874
Handle missing web-shell sessions without redirecting (#6357)
ytahdn Jul 6, 2026
bcdb44c
docs(hooks): document PreToolUse permissionDecision 'ask' behavior (#…
DragonnZhang Jul 6, 2026
2a9ff7c
merge: sync 264 upstream QwenLM/qwen-code commits into HopCode
Jul 7, 2026
339278e
fix: resolve merge artifacts and apply HopCode rebrand to upstream files
Jul 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
102 changes: 102 additions & 0 deletions .github/scripts/ci/classify-profile.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
#!/usr/bin/env node
import { readFileSync } from 'node:fs';

export const CI_PROFILES = {
DOCS_ONLY: 'docs_only',
GITHUB_CI_ONLY: 'github_ci_only',
FULL: 'full',
};

export const GITHUB_CI_ONLY_FILES = new Set([
'.github/scripts/pr-safety-precheck.mjs',
'.github/scripts/pr-safety-precheck.test.mjs',
'.github/workflows/qwen-pr-safety-precheck.yml',
]);

function isDocsOnlyFile(file) {
const normalized = file.replace(/\\/g, '/');
return (
/^docs\/.+\.(?:md|mdx)$/i.test(normalized) ||
/^(?:README|CHANGELOG|CONTRIBUTING|CODE_OF_CONDUCT|SECURITY|SUPPORT|LICENSE|NOTICE)(?:\.[^/]*)?$/i.test(
normalized,
)
);
}

function classifyPath(file) {
if (isDocsOnlyFile(file)) return CI_PROFILES.DOCS_ONLY;
if (GITHUB_CI_ONLY_FILES.has(file)) return CI_PROFILES.GITHUB_CI_ONLY;
return CI_PROFILES.FULL;
}

function classifyFileEntry(entry) {
if (typeof entry === 'string') return classifyPath(entry);

const filename = entry?.filename;
if (!filename) return CI_PROFILES.FULL;

const profile = classifyPath(filename);
if (entry.status !== 'renamed') return profile;

const previousProfile = entry.previous_filename
? classifyPath(entry.previous_filename)
: CI_PROFILES.FULL;
return previousProfile === profile ? profile : CI_PROFILES.FULL;
}

export function classifyChangedFiles(files) {
const changedFiles = files.filter(Boolean);
if (changedFiles.length === 0) return CI_PROFILES.FULL;

if (
changedFiles.every(
(entry) => classifyFileEntry(entry) === CI_PROFILES.DOCS_ONLY,
)
) {
return CI_PROFILES.DOCS_ONLY;
}

if (
changedFiles.every(
(entry) => classifyFileEntry(entry) === CI_PROFILES.GITHUB_CI_ONLY,
)
) {
return CI_PROFILES.GITHUB_CI_ONLY;
}

return CI_PROFILES.FULL;
}

function parseChangedFiles(text) {
return text
.split(/\r?\n/)
.filter(Boolean)
.map((line) => {
try {
return JSON.parse(line);
} catch {
return line;
}
});
}

function main() {
const filePath = process.argv[2];

Check failure on line 84 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (windows-latest, 22.x, false)

'process' is not defined

Check failure on line 84 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (ubuntu-latest, 22.x, true)

'process' is not defined

Check failure on line 84 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (macos-latest, 22.x, false)

'process' is not defined
if (!filePath) {
console.log(CI_PROFILES.FULL);

Check failure on line 86 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (windows-latest, 22.x, false)

'console' is not defined

Check failure on line 86 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (ubuntu-latest, 22.x, true)

'console' is not defined

Check failure on line 86 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (macos-latest, 22.x, false)

'console' is not defined
return;
}

try {
const files = parseChangedFiles(readFileSync(filePath, 'utf8'));
console.log(classifyChangedFiles(files));

Check failure on line 92 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (windows-latest, 22.x, false)

'console' is not defined

Check failure on line 92 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (ubuntu-latest, 22.x, true)

'console' is not defined

Check failure on line 92 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (macos-latest, 22.x, false)

'console' is not defined
} catch (err) {
const message = err instanceof Error ? err.message : String(err);
console.error(`::warning::Failed to read changed files: ${message}`);

Check failure on line 95 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (windows-latest, 22.x, false)

'console' is not defined

Check failure on line 95 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (ubuntu-latest, 22.x, true)

'console' is not defined

Check failure on line 95 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (macos-latest, 22.x, false)

'console' is not defined
console.log(CI_PROFILES.FULL);

Check failure on line 96 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (windows-latest, 22.x, false)

'console' is not defined

Check failure on line 96 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (ubuntu-latest, 22.x, true)

'console' is not defined

Check failure on line 96 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (macos-latest, 22.x, false)

'console' is not defined
}
}

if (import.meta.url === `file://${process.argv[1]}`) {

Check failure on line 100 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (windows-latest, 22.x, false)

'process' is not defined

Check failure on line 100 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (ubuntu-latest, 22.x, true)

'process' is not defined

Check failure on line 100 in .github/scripts/ci/classify-profile.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (macos-latest, 22.x, false)

'process' is not defined
main();
}
116 changes: 116 additions & 0 deletions .github/scripts/ci/classify-profile.test.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
import assert from 'node:assert/strict';
import test from 'node:test';

import {
GITHUB_CI_ONLY_FILES,
classifyChangedFiles,
} from './classify-profile.mjs';

test('uses docs_only for markdown-only changes', () => {
assert.equal(
classifyChangedFiles(['README.md', 'docs/usage.md', '.qwen/design/foo.md']),
'full',
);
assert.equal(
classifyChangedFiles(['README.md', 'docs/usage.md']),
'docs_only',
);
});

test('uses docs_only for uppercase and extensionless docs', () => {
assert.equal(
classifyChangedFiles(['README.MD', 'docs/guide.MDX', 'LICENSE', 'README']),
'docs_only',
);
});

test('falls back to full for root docs names used as directories', () => {
assert.equal(classifyChangedFiles(['README.md/evil.ts']), 'full');
assert.equal(classifyChangedFiles(['LICENSE.txt/src/index.ts']), 'full');
});

test('uses github_ci_only for the allowed GitHub CI helper files', () => {
assert.equal(
classifyChangedFiles([...GITHUB_CI_ONLY_FILES]),
'github_ci_only',
);
});

test('uses github_ci_only for each allowed GitHub CI helper file', () => {
for (const file of GITHUB_CI_ONLY_FILES) {
assert.equal(classifyChangedFiles([file]), 'github_ci_only');
}
});

test('falls back to full for case-mismatched GitHub CI helper paths', () => {
assert.equal(
classifyChangedFiles(['.GITHUB/SCRIPTS/PR-SAFETY-PRECHECK.MJS']),
'full',
);
});

test('classifies renamed files using both old and new paths', () => {
assert.equal(
classifyChangedFiles([
{
filename: 'docs/new.md',
previous_filename: 'packages/core/src/runtime.ts',
status: 'renamed',
},
]),
'full',
);
assert.equal(
classifyChangedFiles([
{
filename: 'docs/new.md',
previous_filename: 'docs/old.md',
status: 'renamed',
},
]),
'docs_only',
);
});

test('falls back to full when changed files are unavailable', () => {
assert.equal(classifyChangedFiles([]), 'full');
assert.equal(classifyChangedFiles(['', null, undefined]), 'full');
});

test('falls back to full for source or mixed changes', () => {
assert.equal(
classifyChangedFiles(['README.md', 'packages/cli/src/index.ts']),
'full',
);
assert.equal(
classifyChangedFiles([
'README.md',
'.github/scripts/pr-safety-precheck.mjs',
]),
'full',
);
});

test('falls back to full for main CI workflow changes', () => {
assert.equal(classifyChangedFiles(['.github/workflows/ci.yml']), 'full');
assert.equal(classifyChangedFiles(['.github/workflows/codeql.yml']), 'full');
});

test('falls back to full for classifier changes', () => {
assert.equal(
classifyChangedFiles(['.github/scripts/ci/classify-profile.mjs']),
'full',
);
assert.equal(
classifyChangedFiles(['.github/scripts/ci/classify-profile.test.mjs']),
'full',
);
});

test('falls back to full for runtime markdown assets and instruction files', () => {
assert.equal(
classifyChangedFiles(['packages/core/src/skills/bundled/foo/SKILL.md']),
'full',
);
assert.equal(classifyChangedFiles(['AGENTS.md']), 'full');
});
175 changes: 175 additions & 0 deletions .github/scripts/pr-safety-precheck.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
#!/usr/bin/env node
import { readFileSync, writeFileSync, appendFileSync } from 'node:fs';

const SECRET_NAME_PATTERN = String.raw`secrets\.[A-Z0-9_]+|process\.env\.[A-Z0-9_]*(?:API_KEY|TOKEN|SECRET|PASSWORD|_PAT)|\b(?:GITHUB_TOKEN|GH_TOKEN|OPENAI_API_KEY)\b`;
const LOGGING_SINK_PATTERN = String.raw`\b(?:console\.\w+|process\.(?:stdout|stderr)\.write)\s*\(`;
const NETWORK_SINK_PATTERN = String.raw`\b(?:fetch|axios|curl|wget)\b`;

function secretSinkPattern(sinkPattern) {
return new RegExp(
String.raw`(?:${sinkPattern}[\s\S]{0,500}(?:${SECRET_NAME_PATTERN})|(?:${SECRET_NAME_PATTERN})[\s\S]{0,500}${sinkPattern})`,
'i',
);
}

const SENSITIVE_DIFF_PATTERNS = [
['sensitive_diff:secret_logging', secretSinkPattern(LOGGING_SINK_PATTERN)],
['sensitive_diff:secret_network', secretSinkPattern(NETWORK_SINK_PATTERN)],
];

const SECRET_VALUE_PATTERNS = [
['secret_value:private_key', /-----BEGIN [A-Z ]*PRIVATE KEY-----/],
[
'secret_value:github_token',
/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{36,}\b|\bgithub_pat_[A-Za-z0-9_]{20,}\b/,
],
['secret_value:openai_key', /\bsk-(?:proj-)?[A-Za-z0-9_-]{20,}\b/],
['secret_value:aws_access_key', /\b(?:AKIA|ASIA)[A-Z0-9]{16}\b/],
['secret_value:slack_token', /\bxox[baprs]-[A-Za-z0-9-]{20,}\b/],
[
'secret_value:bearer_token',
/\bAuthorization\s*:\s*Bearer\s+[A-Za-z0-9._~+/=-]{20,}\b/i,
],
[
'secret_value:access_token_param',
/\baccess_token=[A-Za-z0-9._~+/=-]{20,}\b/i,
],
[
'secret_value:url_credentials',
/\b[a-z][a-z0-9+.-]*:\/\/[^/\s:@]+:[^@\s]{20,}@/i,
],
[
'secret_value:assignment',
/(?:^|[^A-Za-z0-9])(?:[A-Z0-9_-]*(?:api[_-]?key|token|secret|password|pat))\b[^=\n:]{0,32}(?::?=|:)\s*['"`][A-Za-z0-9._~+/=-]{20,}['"`]/i,
],
];

const PROMPT_INJECTION_PATTERNS = [
[
'prompt_injection:ignore_previous',
/ignore (?:all )?(?:previous|above) instructions/i,
],
['prompt_injection:system_prompt', /\bsystem prompt\b/i],
['prompt_injection:developer_message', /\bdeveloper message\b/i],
[
'prompt_injection:print_secrets',
/\b(?:print|dump|exfiltrate|reveal)\b[^\n]*(?:secret|token|key)s?\b/i,
],
['prompt_injection:run_gh', /\brun\b[^\n]*\bgh\b/i],
['prompt_injection:approve_pr', /\bapprove (?:this )?pr\b/i],
[
'prompt_injection:qwen_command',
/@qwen-code\s+\/(?:triage|review|resolve|tmux)\b/i,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Match HopCode commands in the safety precheck

This precheck runs in the HopCode repository, where the automation command prefix is @hopcode, but the prompt-injection pattern only recognizes @qwen-code. A fork PR body or diff containing the HopCode command form such as @hopcode /review or @hopcode /triage will be classified as allow_triage instead of manual_required, bypassing the command-specific safety signal this check is meant to enforce.

Useful? React with 👍 / 👎.

],
];

function addReason(reasons, code) {
if (!reasons.includes(code)) reasons.push(code);
}

function checkPatterns(text, patterns, reasons) {
for (const [code, pattern] of patterns) {
if (pattern.test(text)) addReason(reasons, code);
}
}

export function assessPullRequestSafety({ pr, diff, trustedAuthor = false }) {
const reasons = [];
const headSha = typeof pr?.headRefOid === 'string' ? pr.headRefOid : '';
const diffText = typeof diff === 'string' ? diff : '';
let addedText = '';

if (!headSha) addReason(reasons, 'input:missing_head_sha');

if (trustedAuthor && reasons.length === 0) {
return {
decision: 'allow_triage',
head_sha: headSha,
reason_codes: [],
};
}

if (!diffText) {
addReason(reasons, 'input:diff_unavailable');
} else {
addedText = diffText
.split('\n')
.filter((line) => line.startsWith('+') && !line.startsWith('+++'))
.map((line) => line.slice(1))
.join('\n');
checkPatterns(addedText, SENSITIVE_DIFF_PATTERNS, reasons);
}

const prText = `${pr?.title ?? ''}\n${pr?.body ?? ''}\n${addedText}`;
checkPatterns(prText, SECRET_VALUE_PATTERNS, reasons);
checkPatterns(prText, PROMPT_INJECTION_PATTERNS, reasons);

return {
decision: reasons.length === 0 ? 'allow_triage' : 'manual_required',
head_sha: headSha,
reason_codes: reasons,
};
}

export function renderManualRequiredComment(result) {
const reasons = result.reason_codes.length
? result.reason_codes.map((reason) => `- \`${reason}\``).join('\n')
: '- `unknown`';

return `<!-- qwen-pr-precheck:manual-required -->
Qwen precheck requires maintainer approval before automated triage/review.

Head SHA: \`${result.head_sha || 'unknown'}\`

Reason:
${reasons}

A maintainer with write access can inspect the PR and manually request a run with \`@qwen-code /triage\` or \`@qwen-code /review\`. A new push requires a fresh precheck.`;
}

function parseArgs(argv) {
const args = {};
for (let i = 0; i < argv.length; i += 1) {
const arg = argv[i];
if (!arg.startsWith('--')) throw new Error(`Unexpected argument: ${arg}`);
const key = arg.slice(2);
const value = argv[i + 1];
if (!value || value.startsWith('--')) {
throw new Error(`Missing value for --${key}`);
}
args[key] = value;
i += 1;
}
return args;
}

function writeGithubOutput(path, result) {
if (!path) return;
appendFileSync(path, [`decision=${result.decision}`, ''].join('\n'));
}

function main() {
const args = parseArgs(process.argv.slice(2));

Check failure on line 152 in .github/scripts/pr-safety-precheck.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (windows-latest, 22.x, false)

'process' is not defined

Check failure on line 152 in .github/scripts/pr-safety-precheck.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (ubuntu-latest, 22.x, true)

'process' is not defined

Check failure on line 152 in .github/scripts/pr-safety-precheck.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (macos-latest, 22.x, false)

'process' is not defined
if (!args.pr) throw new Error('Missing --pr');
if (!args.diff) throw new Error('Missing --diff');

const pr = JSON.parse(readFileSync(args.pr, 'utf8'));
const diff = readFileSync(args.diff, 'utf8');
const trustedAuthor = args['trusted-author'] === 'true';
const result = assessPullRequestSafety({ pr, diff, trustedAuthor });

if (args.comment) {
writeFileSync(
args.comment,
result.decision === 'manual_required'
? renderManualRequiredComment(result)
: '',
);
}
writeGithubOutput(args.output ?? process.env.GITHUB_OUTPUT, result);

Check failure on line 169 in .github/scripts/pr-safety-precheck.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (windows-latest, 22.x, false)

'process' is not defined

Check failure on line 169 in .github/scripts/pr-safety-precheck.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (ubuntu-latest, 22.x, true)

'process' is not defined

Check failure on line 169 in .github/scripts/pr-safety-precheck.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (macos-latest, 22.x, false)

'process' is not defined
console.log(JSON.stringify(result, null, 2));

Check failure on line 170 in .github/scripts/pr-safety-precheck.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (windows-latest, 22.x, false)

'console' is not defined

Check failure on line 170 in .github/scripts/pr-safety-precheck.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (ubuntu-latest, 22.x, true)

'console' is not defined

Check failure on line 170 in .github/scripts/pr-safety-precheck.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (macos-latest, 22.x, false)

'console' is not defined
}

if (import.meta.url === `file://${process.argv[1]}`) {

Check failure on line 173 in .github/scripts/pr-safety-precheck.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (windows-latest, 22.x, false)

'process' is not defined

Check failure on line 173 in .github/scripts/pr-safety-precheck.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (ubuntu-latest, 22.x, true)

'process' is not defined

Check failure on line 173 in .github/scripts/pr-safety-precheck.mjs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest, Node 22.x) (macos-latest, 22.x, false)

'process' is not defined
main();
}
Loading
Loading