Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
979 commits
Select commit Hold shift + click to select a range
07232b9
fix: prefer target session data for context report
Takhoffman Apr 11, 2026
831386b
fix: use target session entry for usage cost
Takhoffman Apr 11, 2026
7e7a269
fix: prefer target entry for send policy
Takhoffman Apr 11, 2026
6c574d7
fix(ci): align model list session metadata
steipete Apr 11, 2026
0f19271
msteams: add message actions — pin, unpin, read, react, reactions (#5…
sudie-codes Apr 11, 2026
541f768
fix(ci): align context and plugin loader tests
steipete Apr 11, 2026
48a66a6
test(auto-reply): reduce directive behavior imports
steipete Apr 11, 2026
54cb10e
test(auto-reply): move directive event coverage lower
steipete Apr 11, 2026
bb70a59
test(auto-reply): keep model list coverage focused
steipete Apr 11, 2026
0e56140
test(auto-reply): align rebase type fixes
steipete Apr 11, 2026
32a25b8
fix: summarize provider tool schema diagnostics
steipete Apr 11, 2026
25f56eb
fix(ci): mock default fs export in session export test
steipete Apr 11, 2026
69244f8
test: speed provider retry imports
steipete Apr 11, 2026
5697518
fix: route gateway plugin logs through plugins
steipete Apr 11, 2026
42a4dee
fix: prefer target entry for plugin commands
Takhoffman Apr 11, 2026
c2f6ad9
fix: prefer target entry for command system prompt
Takhoffman Apr 11, 2026
efbab8f
docs: reshuffle unreleased changelog
steipete Apr 11, 2026
58020ab
fix: prefer target entry for models command
Takhoffman Apr 11, 2026
707cc31
test: avoid context discovery in fast unit tests
steipete Apr 11, 2026
95bc417
fix(cycles): split residual shared type seams
vincentkoc Apr 10, 2026
81235fd
fix(cycles): split shared contract seams
vincentkoc Apr 11, 2026
3502994
fix(cycles): continue shared seam extraction
vincentkoc Apr 11, 2026
7198a9f
fix(cycles): reduce remaining static import seams
vincentkoc Apr 11, 2026
1e4036a
fix: prefer target entry for compact command
Takhoffman Apr 11, 2026
8ae6d42
fix(agents): respect overridden home for personal skills
vincentkoc Apr 11, 2026
f5d0b54
fix: prefer target entry for btw command
Takhoffman Apr 11, 2026
9403008
fix: prefer target entry for reset hooks
Takhoffman Apr 11, 2026
9d63e54
test: mock mcp config command storage
steipete Apr 11, 2026
daccfa2
fix: prefer target entry for subagent spawn
Takhoffman Apr 11, 2026
f2065a7
test: skip unneeded thinking resolution
steipete Apr 11, 2026
192ee08
fix: Implicit latest-device approval can pair the wrong requester (#6…
coygeek Apr 11, 2026
ecb10c1
fix: prefer requester key for subagent info
Takhoffman Apr 11, 2026
94a90fc
test(ci): retry canvas auth reset fetches
steipete Apr 11, 2026
c88a3d5
fix(ci): restore split seam type exports
steipete Apr 11, 2026
c40d2a4
fix(ci): complete compact session fixture
steipete Apr 11, 2026
c3aeb71
feat(fal): add HeyGen video-agent model
steipete Apr 11, 2026
8a5b4b0
fix(openai): suppress expected tool schema diagnostics
steipete Apr 11, 2026
07edaff
fix: finalize OpenAI replay liveness landing
steipete Apr 11, 2026
78a4b0e
fix: keep stop hook aligned with target session
Takhoffman Apr 11, 2026
fb5611b
fix(ci): omit default config write type args
steipete Apr 11, 2026
e5e95f3
fix: prefer target entry for compact counters
Takhoffman Apr 11, 2026
2fe860b
fix: prefer target entry for status wrapper
Takhoffman Apr 11, 2026
ef5b257
fix: prefer target entry for tools wrapper
Takhoffman Apr 11, 2026
da1e60a
fix(ci): guard venice model discovery fetch
steipete Apr 11, 2026
84fb20a
fix: prefer target entry for inline status
Takhoffman Apr 11, 2026
1c7444d
perf: optimize test import surfaces
steipete Apr 11, 2026
f6f8196
fix: prefer target entry for fast status
Takhoffman Apr 11, 2026
db546f8
test(auto-reply): update compaction result fixture
vincentkoc Apr 11, 2026
4360a59
fix: prefer target entry for usage footer
Takhoffman Apr 11, 2026
efab976
Fix vLLM reasoning model response parsing (empty tool_calls array) …
balajisiva Apr 11, 2026
f1b6934
fix: prefer target entry for reply directives
Takhoffman Apr 11, 2026
8f94032
fix: prefer target entry for inline abort cutoff
Takhoffman Apr 11, 2026
3b6fac8
chore: prepare 2026.4.10 release
steipete Apr 11, 2026
1fb8a8c
fix: prefer target entry for inline command dispatch
Takhoffman Apr 11, 2026
0552124
fix(ci): stabilize agentic compact tests
steipete Apr 11, 2026
896eb88
fix(ci): align target session alias fixture
steipete Apr 11, 2026
05659cf
test: harden macOS Parallels permission check
steipete Apr 11, 2026
421338f
test(install): quiet smoke npm output
steipete Apr 11, 2026
5b2888e
test(install): pin smoke docker platform
steipete Apr 11, 2026
df7e61b
fix(ci): align compact count assertion
steipete Apr 11, 2026
e11d902
fix(ci): stop telegram debounce media leak
steipete Apr 11, 2026
9a4a9a5
Heartbeat: spread interval runs across stable phases (#64560)
odysseus0 Apr 11, 2026
44e5b62
fix(macos): harden shell executor timeouts
steipete Apr 11, 2026
d515009
fix(ci): stabilize auto-reply CI tests
steipete Apr 11, 2026
355690a
feat(qa-lab): add telegram mention-gating scenario
obviyus Apr 11, 2026
f9a03f0
test(qa-lab): cover telegram mention-gating
obviyus Apr 11, 2026
7c14d8b
feat(qa-lab): add telegram command demo scenarios
obviyus Apr 11, 2026
a0b5c7b
test(qa-lab): cover telegram command demo scenarios
obviyus Apr 11, 2026
b0b0fb3
feat(qa-lab): add telegram mentioned-message scenario
obviyus Apr 11, 2026
959b147
test(qa-lab): include telegram mentioned-message scenario
obviyus Apr 11, 2026
38cd7f7
fix(whatsapp): resolve configured default account in single-arg setAc…
yhyatt Apr 11, 2026
dfd4e9f
fix(release): write npm auth for latest promotion
steipete Apr 11, 2026
af41acc
chore(release): update macOS appcast for v2026.4.10
steipete Apr 11, 2026
1ab6e5d
chore(release): bump version to 2026.4.11
steipete Apr 11, 2026
c38d443
test: use provider schemas for config policy checks
steipete Apr 11, 2026
ad7ad62
test: narrow allowed-values validation coverage
steipete Apr 11, 2026
40975ec
test: use channel schemas in config regressions
steipete Apr 11, 2026
bf544bc
docs: fix active memory gateway command
Takhoffman Apr 11, 2026
fcf31ee
test: narrow whatsapp auto-enable validation
steipete Apr 11, 2026
feef387
test: narrow config defaults regressions
steipete Apr 11, 2026
97c9a36
test: use channel schemas for webhook validation
steipete Apr 11, 2026
12e1134
test: use discord schema in config tests
steipete Apr 11, 2026
3d9792b
test: make imessage legacy config checks pure
steipete Apr 11, 2026
f25fd32
test: reduce config validation imports
steipete Apr 11, 2026
9f5e476
test: avoid channel contract imports in config policy tests
steipete Apr 11, 2026
70c0a64
test: mock channel configured state seams
steipete Apr 11, 2026
2d6519d
perf: defer bundled channel presence lookups
steipete Apr 11, 2026
7591d01
perf: defer bundled channel metadata lookups
steipete Apr 11, 2026
d72cb14
test: make compaction config checks pure
steipete Apr 11, 2026
8ab84bc
test: make talk and compaction config checks pure
steipete Apr 11, 2026
c836fd2
test: narrow plugin auto-enable manifest coverage
steipete Apr 11, 2026
cb01b00
test: narrow doctor shared channel mocks
steipete Apr 11, 2026
6492cc7
test: isolate doctor repair sequencing
steipete Apr 11, 2026
64693d2
[codex] Dreaming: surface memory wiki imports and palace (#64505)
mbelinky Apr 11, 2026
2e0ec23
test: complete directive hook-runner mock
steipete Apr 11, 2026
850cdc3
test: mock open-policy channel modes
steipete Apr 11, 2026
788f0c6
test: shrink oversized image fixture
steipete Apr 11, 2026
478a2e1
fix: narrow qa cli facade startup path
obviyus Apr 11, 2026
d8ab47d
refactor: remove qa cli pass-through wrapper
obviyus Apr 11, 2026
6aafca5
fix: avoid qa scenario pack reads during packaged CLI startup (#64648)
obviyus Apr 11, 2026
279cbfc
fix: restore memory wiki and dreaming checks
steipete Apr 11, 2026
d86377a
test: narrow doctor legacy config aliases
steipete Apr 11, 2026
f9afdf0
perf: avoid signal approval plugin lookup
steipete Apr 11, 2026
e4e6f42
test: narrow directive status checks
steipete Apr 11, 2026
d35bd8d
test: narrow standalone directive checks
steipete Apr 11, 2026
e34e714
test: narrow think status directive checks
steipete Apr 11, 2026
2721245
perf: avoid reply payload barrel in followups
steipete Apr 11, 2026
7a1cc53
test: mock message action channel aliases
steipete Apr 11, 2026
28291eb
perf: avoid plugin registry in reply threading
steipete Apr 11, 2026
3edc8d3
test: mock message action aliases in normalization
steipete Apr 11, 2026
ddefce3
Config: align LLM idle timeout defaults
ImLukeF Apr 11, 2026
455535a
perf: avoid plugin index for target normalization
steipete Apr 11, 2026
7b29cb6
test: narrow queue directive validation checks
steipete Apr 11, 2026
9e3f4ed
test: narrow elevated and queue directive checks
steipete Apr 11, 2026
e2d93fb
perf: short-circuit static doctor channel capabilities
steipete Apr 11, 2026
b25c735
test: make fuzzy model directive checks pure
steipete Apr 11, 2026
61ee69e
test: isolate task flow owner registry
steipete Apr 11, 2026
01060d2
test: install task flow owner memory store after reset
steipete Apr 11, 2026
5605c89
test: mock channel plugin lookup in media read policy
steipete Apr 11, 2026
7f2814f
agents: honor explicit run timeout for LLM idle watchdog
ImLukeF Apr 11, 2026
9d45866
test: mock telegram reply suppression fallback
steipete Apr 11, 2026
be9b70c
perf: short-circuit exact reply suppression targets
steipete Apr 11, 2026
c50d718
fix: Fix webchat TTS tool audio delivery (#63514)
bittoby Apr 11, 2026
8fb4822
perf: import queue settings directly
steipete Apr 11, 2026
36c412d
test: move reserved help alias coverage
steipete Apr 11, 2026
2b1d154
test: narrow model override directive check
steipete Apr 11, 2026
32b252c
test: move inline directive stripping coverage
steipete Apr 11, 2026
7273cae
test: move spawn and doctor coverage to owners
steipete Apr 11, 2026
66a0814
test: consolidate directive coverage
steipete Apr 11, 2026
2cfd145
perf: split command body normalization
steipete Apr 11, 2026
10dcd57
perf: keep queue and group parsing pure
steipete Apr 11, 2026
5ca92b0
test: move plugin update selection to pure tests
steipete Apr 11, 2026
7e66a8f
test: move plugin uninstall selection to pure tests
steipete Apr 11, 2026
367043d
test: fold sessions timeout checks into pure coverage
steipete Apr 11, 2026
e2477ff
test: move node pairing authz to pure coverage
steipete Apr 11, 2026
2681bbd
test: move plugin list formatting to pure tests
steipete Apr 11, 2026
bb543f7
fix(talk): fix ensure permissions on first execution of Talk Mode in …
ggarber Apr 11, 2026
58708e6
fix: preserve Codex OAuth scopes (#64713) (thanks @fuller-stack-dev)
fuller-stack-dev Apr 11, 2026
f2a4a5a
fix(google): omit unsupported numberOfVideos in Veo requests (#64723)
velvet-shark Apr 11, 2026
2c57ec7
video_generate: add providerOptions, inputAudios, and imageRoles (#61…
xieyongliang Apr 11, 2026
ebb72ba
feat(feishu): improve document comment session, rich parsing, and typ…
wittam-01 Apr 11, 2026
6883273
test(gateway): harden tools invoke cron regression harness
vincentkoc Apr 11, 2026
7308e72
fix(cycles): continue seam extraction
vincentkoc Apr 11, 2026
08ba5a7
fix(cycles): add remaining seam files
vincentkoc Apr 11, 2026
5280013
fix(video): restore generation runtime params
vincentkoc Apr 11, 2026
e0a2c56
video_generate: support url-only delivery (#61988) (thanks @xieyongli…
xieyongliang Apr 11, 2026
e339038
Fix: Sync asyncCompletion config in zod-schema.ts to resolve "Unrecog…
qiziAI Apr 11, 2026
25c4723
ci(checks): shorten node shard names
vincentkoc Apr 11, 2026
571483a
fix(test): narrow live video asset buffers
vincentkoc Apr 11, 2026
7899f5c
fix(dev): throttle local tsgo by default
vincentkoc Apr 11, 2026
2d4209c
test(ci): align node shard check names
vincentkoc Apr 11, 2026
8b29736
fix(tasks): shard test state by vitest worker
vincentkoc Apr 11, 2026
75d7325
test(tasks): add control runtime override seam
vincentkoc Apr 11, 2026
d6fa677
test(config): refresh generated base schema
vincentkoc Apr 11, 2026
a866c51
test(video): narrow buffered live asset helper
vincentkoc Apr 11, 2026
68fcd85
fix(tasks): narrow control runtime override type
vincentkoc Apr 11, 2026
d7479dc
Agents: log proxy route summary (#64754)
ImLukeF Apr 11, 2026
79c3dbe
feat(plugins): add manifest activation and setup descriptors (#64780)
vincentkoc Apr 11, 2026
1851aa7
test: stage live external plugins
steipete Apr 11, 2026
f770206
test: combine task boundary scans
steipete Apr 11, 2026
5f16297
test: move send-keys validation to helper
steipete Apr 11, 2026
893a0f4
test: combine web provider boundary checks
steipete Apr 11, 2026
8a8fdc9
perf: share web boundary source scans
steipete Apr 11, 2026
636fe1c
fix(qa): ship scenario pack and isolate completion cache
vincentkoc Apr 11, 2026
53dea1d
test: narrow web provider artifact invariants
steipete Apr 11, 2026
4c55736
docs(changelog): note qa packaging release fix
vincentkoc Apr 11, 2026
d5f199a
perf: cache parsed guard sources
steipete Apr 11, 2026
850182b
test: combine extension import boundary checks
steipete Apr 11, 2026
48ac72f
perf: prefilter extension boundary parsing
steipete Apr 11, 2026
a733e92
test: exercise real updater in Parallels npm flow
steipete Apr 11, 2026
cd89892
fix(release): keep private QA bundles out of npm pack
steipete Apr 11, 2026
f9331fb
test(install): add docker tgz update smoke flow
steipete Apr 11, 2026
d72fb7e
fix: harden QA scenario matcher validation
steipete Apr 11, 2026
d21573d
fix(qa): catch leaked harness meta replies
vincentkoc Apr 11, 2026
afbc4a2
docs(changelog): note codex qa leak fix
vincentkoc Apr 11, 2026
1167093
test(qa): drop rebase conflict marker
vincentkoc Apr 11, 2026
74e7b8d
fix(cycles): bulk extract leaf type surfaces
vincentkoc Apr 11, 2026
41ab0f7
fix(gateway): add shared request handler types
vincentkoc Apr 11, 2026
543c14a
fix(cycles): split runtime delivery and registry seams
vincentkoc Apr 11, 2026
af428d9
fix(cycles): split runtime taskflow type surface
vincentkoc Apr 11, 2026
3da5822
Ollama: cache model show metadata (#64753)
ImLukeF Apr 11, 2026
d83a85c
fix(ci): harden plugin registry test seams
steipete Apr 11, 2026
cc5c691
feat(ui): render assistant directives and add embed tag (#64104)
Takhoffman Apr 11, 2026
d9812b8
fix(ui): preserve interleaved tool card pairing
Takhoffman Apr 11, 2026
ed356d7
fix(media): disable pinned DNS dispatcher for FormData transcription …
GodsBoy Apr 11, 2026
c159d22
fix(ssrf): validate hostname even when pinDns is disabled
GodsBoy Apr 11, 2026
43bd554
fix: scope pinDns override to multipart audio (#64766) (thanks @GodsBoy)
obviyus Apr 11, 2026
7315914
fix(acp): suppress commentary relay leakage
vincentkoc Apr 11, 2026
7c5b42e
docs(changelog): note acp relay leak fix
vincentkoc Apr 11, 2026
355794c
msteams: add reaction support with delegated auth and pagination help…
sudie-codes Apr 11, 2026
81535d3
fix(cycles): repair broken type surfaces
vincentkoc Apr 11, 2026
3e01334
fix(build): repair rebase export surfaces
steipete Apr 11, 2026
aa09204
fix(ui): remove stale preview assertion
steipete Apr 11, 2026
370efaa
build(canvas): refresh a2ui bundle
steipete Apr 11, 2026
3b4de1a
fix(cycles): split reply and gateway leaf seams
vincentkoc Apr 11, 2026
684ce92
fix(ci): restore channel public type exports
steipete Apr 11, 2026
baeec2f
fix(ci): clean up rebased registry types
steipete Apr 11, 2026
c7f18d9
test: dedupe media provider tests
steipete Apr 11, 2026
5915d7c
perf: optimize messaging plugin tests
steipete Apr 11, 2026
bb0bfab
perf: trim agent test runtime imports
steipete Apr 11, 2026
8ddd9b8
perf: narrow plugin config test surfaces
steipete Apr 11, 2026
ff7a842
perf: reduce command and gateway test imports
steipete Apr 11, 2026
30e646f
test: finish import performance cleanup
steipete Apr 11, 2026
627ab39
perf: stabilize agent lane hotspots
steipete Apr 11, 2026
4ca458b
fix: preserve googlechat doctor semantics
steipete Apr 11, 2026
bf82a7c
fix: keep browser cdp range wide for high ports
steipete Apr 11, 2026
a82d8f0
fix: clear rebase lint issues
steipete Apr 11, 2026
9a8647c
fix: remove duplicate channel runtime export
steipete Apr 11, 2026
88be9b5
docs: update 2026.4.11 changelog
steipete Apr 11, 2026
759b5aa
fix(cycles): narrow config type imports
vincentkoc Apr 11, 2026
564f646
docs: remove plugin version-only changelog entries
steipete Apr 11, 2026
b646655
fix(ci): preserve channel auto-enable metadata
steipete Apr 11, 2026
eb7bdbf
docs: remove extension changelogs
steipete Apr 11, 2026
419ab38
test(msteams): stabilize oauth expiry assertion
steipete Apr 11, 2026
40beb68
chore: remove legacy shim packages
steipete Apr 11, 2026
2ffc197
fix: restore channel auto-enable metadata
steipete Apr 11, 2026
85fa33d
style: apply formatter drift
steipete Apr 11, 2026
935bd6d
fix(gateway): split credential secret input runtime
vincentkoc Apr 11, 2026
0ed512b
build: refresh a2ui bundle
steipete Apr 11, 2026
9bde608
build: keep a2ui bundle generated
steipete Apr 11, 2026
a8284e3
build(canvas): stabilize a2ui bundle inputs
steipete Apr 11, 2026
0d733a2
build(canvas): refresh a2ui input hash
steipete Apr 11, 2026
d9c7ddb
test: add agentic parity scenario pack
Apr 10, 2026
79f539d
docs: clarify GPT-5.4 parity harness and review flow
Apr 10, 2026
67fdd3b
benchmarks: add agentic parity report gate
Apr 10, 2026
db09eda
qa-lab: gate parity on shared scenario coverage
Apr 10, 2026
c73d005
docs: clarify parity verdict interpretation
Apr 10, 2026
55df6f1
fix: harden parity gate review findings
Apr 10, 2026
3211aa2
fix(qa): surface missing required scenarios in parity report
Apr 10, 2026
fd45ea2
test(qa): add compaction retry parity scenario
Apr 10, 2026
17252df
Tighten parity proof heuristics
Apr 11, 2026
95f8ad2
Treat skipped parity scenarios as uncovered
Apr 11, 2026
108e5c8
qa-lab: scope parity metrics and harden fake-success detector
Apr 11, 2026
1f69790
docs: note GPT-5.4 parity harness landing
steipete Apr 11, 2026
b7cc064
fix(update): exclude private QA sidecars from package verify
steipete Apr 11, 2026
0dd4958
test(install): harden docker tgz smoke flow
steipete Apr 11, 2026
e1b674c
build: stabilize a2ui bundle hash
steipete Apr 11, 2026
ccfc97c
test(channel-setup): mock channel metadata source
steipete Apr 11, 2026
24a5ba7
fix: harden docker smoke packaging
steipete Apr 11, 2026
b9a0052
fix(cycles): split embedded runner and setup leaf types
vincentkoc Apr 11, 2026
8a7ad8f
fix(msteams): remove reaction handler type cycle
vincentkoc Apr 11, 2026
b489c8f
test: resolve Parallels npm update Python
steipete Apr 11, 2026
545490c
fix: handle codex app-server interrupt shutdown
steipete Apr 11, 2026
aaae1ae
fix(whatsapp): route react through gateway (#64638)
mcaxtr Apr 11, 2026
97d1b88
fix(cycles): split plugin runtime contract leaf types
vincentkoc Apr 11, 2026
463190e
fix(tasks): lazy-load control runtime without static back-edge
vincentkoc Apr 11, 2026
5637f15
Merge upstream/main into sync/upstream-2026-04-11
zhyongrui Apr 11, 2026
3ca31f7
OpenClawCode: add spec-draft command
zhyongrui Apr 12, 2026
182b3c0
OpenClawCode: enrich chat intake with spec drafts
zhyongrui Apr 12, 2026
ff78a10
OpenClawCode: carry spec guidance into intake issues
zhyongrui Apr 12, 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
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
8 changes: 7 additions & 1 deletion .agents/skills/openclaw-parallels-smoke/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,13 @@ Use this skill for Parallels guest workflows and smoke interpretation. Do not lo
## npm install then update

- Preferred entrypoint: `pnpm test:parallels:npm-update`
- Flow: fresh snapshot -> install npm package baseline -> smoke -> install current main tgz on the same guest -> smoke again.
- Required coverage: every release/update regression run must include both lanes:
- fresh snapshot -> install requested package/baseline -> smoke
- same guest baseline -> run the guest's installed `openclaw update ...` command -> smoke again
- The update lane must exercise OpenClaw's internal updater. Do not count a direct `npm install -g <tgz-or-spec>` or harness-side package swap as update-flow coverage; those are install smokes only.
- For published targets, install the old baseline package first (for example `openclaw@2026.4.9`), then run the installed guest CLI with the intended channel/tag (for example `openclaw update --channel beta --yes --json`) and verify `openclaw --version`, `openclaw update status --json`, gateway RPC, and an agent turn after the command.
- For unpublished targets, pack the candidate on the host, serve the `.tgz` over the harness HTTP server, and point the guest updater at that served package. Prefer `openclaw update --tag http://<host-ip>:<port>/openclaw-<version>.tgz --yes --json`; when channel persistence also matters, pass `--channel <stable|beta>` and set `OPENCLAW_UPDATE_PACKAGE_SPEC` to the same served URL in the guest update environment. The command under test must still be `openclaw update`, not direct npm.
- For unpublished local-fix validation, remember the old baseline updater code still controls the first hop. A fix that lives only in the new updater code cannot change that already-running old process; the served candidate must either keep package/plugin metadata compatible with the baseline host or the baseline itself must include the updater fix.
- For beta/stable verification, resolve the tag immediately before the run (`npm view openclaw@beta version dist.tarball` or `npm view openclaw@latest ...`). Tags can move while a long VM matrix is already running; restart the matrix when the intended prerelease appears after an earlier registry 404/tag-lag check.
- Source Peter's profile in the host shell (`set -a; source "$HOME/.profile"; set +a`) before OpenAI/Anthropic lanes. Do not print profile contents or env dumps; pass provider secrets through the guest exec environment.
- Same-guest update verification should set the default model explicitly to `openai/gpt-5.4` before the agent turn and use a fresh explicit `--session-id` so old session model state does not leak into the check.
Expand Down
4 changes: 4 additions & 0 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,10 @@
- changed-files:
- any-glob-to-any-file:
- "extensions/openai/**"
"extensions: codex":
- changed-files:
- any-glob-to-any-file:
- "extensions/codex/**"
"extensions: kimi-coding":
- changed-files:
- any-glob-to-any-file:
Expand Down
128 changes: 119 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,10 @@ jobs:
run_build_artifacts: ${{ steps.manifest.outputs.run_build_artifacts }}
run_checks_fast: ${{ steps.manifest.outputs.run_checks_fast }}
checks_fast_core_matrix: ${{ steps.manifest.outputs.checks_fast_core_matrix }}
checks_fast_extensions_matrix: ${{ steps.manifest.outputs.checks_fast_extensions_matrix }}
checks_node_extensions_matrix: ${{ steps.manifest.outputs.checks_node_extensions_matrix }}
run_checks: ${{ steps.manifest.outputs.run_checks }}
checks_matrix: ${{ steps.manifest.outputs.checks_matrix }}
checks_node_core_test_matrix: ${{ steps.manifest.outputs.checks_node_core_test_matrix }}
run_extension_fast: ${{ steps.manifest.outputs.run_extension_fast }}
extension_fast_matrix: ${{ steps.manifest.outputs.extension_fast_matrix }}
run_check: ${{ steps.manifest.outputs.run_check }}
Expand Down Expand Up @@ -135,6 +136,9 @@ jobs:
run: |
node --input-type=module <<'EOF'
import { appendFileSync } from "node:fs";
import {
createNodeTestShards,
} from "./scripts/lib/ci-node-test-plan.mjs";
import {
createExtensionTestShards,
DEFAULT_EXTENSION_TEST_SHARD_COUNT,
Expand Down Expand Up @@ -211,12 +215,11 @@ jobs:
]
: [],
),
checks_fast_extensions_matrix: extensionShardMatrix,
checks_node_extensions_matrix: extensionShardMatrix,
run_checks: runNode,
checks_matrix: createMatrix(
runNode
? [
{ check_name: "checks-node-test", runtime: "node", task: "test" },
{ check_name: "checks-node-channels", runtime: "node", task: "channels" },
...(isPush
? [
Expand All @@ -232,6 +235,17 @@ jobs:
]
: [],
),
checks_node_core_test_matrix: createMatrix(
runNode
? createNodeTestShards().map((shard) => ({
check_name: shard.checkName,
runtime: "node",
task: "test-shard",
shard_name: shard.shardName,
configs: shard.configs,
}))
: [],
),
run_extension_fast: hasChangedExtensions,
extension_fast_matrix: createMatrix(
hasChangedExtensions
Expand Down Expand Up @@ -470,15 +484,15 @@ jobs:
;;
esac

checks-fast-extensions-shard:
checks-node-extensions-shard:
name: ${{ matrix.check_name }}
needs: [preflight]
if: needs.preflight.outputs.run_checks_fast == 'true'
runs-on: blacksmith-16vcpu-ubuntu-2404
timeout-minutes: 60
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.preflight.outputs.checks_fast_extensions_matrix) }}
matrix: ${{ fromJson(needs.preflight.outputs.checks_node_extensions_matrix) }}
steps:
- name: Checkout
uses: actions/checkout@v6
Expand All @@ -497,16 +511,16 @@ jobs:
OPENCLAW_EXTENSION_BATCH: ${{ matrix.extensions_csv }}
run: pnpm test:extensions:batch -- "$OPENCLAW_EXTENSION_BATCH"

checks-fast-extensions:
name: checks-fast-extensions
needs: [preflight, checks-fast-extensions-shard]
checks-node-extensions:
name: checks-node-extensions
needs: [preflight, checks-node-extensions-shard]
if: always() && needs.preflight.outputs.run_checks_fast == 'true'
runs-on: blacksmith-16vcpu-ubuntu-2404
timeout-minutes: 5
steps:
- name: Verify extension shards
env:
SHARD_RESULT: ${{ needs.checks-fast-extensions-shard.result }}
SHARD_RESULT: ${{ needs.checks-node-extensions-shard.result }}
run: |
if [ "$SHARD_RESULT" != "success" ]; then
echo "Extension shard checks failed: $SHARD_RESULT" >&2
Expand Down Expand Up @@ -599,6 +613,102 @@ jobs:
;;
esac

checks-node-core-test-shard:
name: ${{ matrix.check_name }}
needs: [preflight, build-artifacts]
if: always() && needs.preflight.outputs.run_checks == 'true' && needs.build-artifacts.result == 'success'
runs-on: blacksmith-16vcpu-ubuntu-2404
timeout-minutes: 60
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.preflight.outputs.checks_node_core_test_matrix) }}
steps:
- name: Checkout
uses: actions/checkout@v6
with:
persist-credentials: false
submodules: false

- name: Setup Node environment
uses: ./.github/actions/setup-node-env
with:
node-version: "${{ matrix.node_version || '24.x' }}"
cache-key-suffix: "${{ matrix.cache_key_suffix || 'node24' }}"
install-bun: "false"
use-sticky-disk: "false"

- name: Configure Node test resources
run: echo "OPENCLAW_VITEST_MAX_WORKERS=2" >> "$GITHUB_ENV"

- name: Download dist artifact
uses: actions/download-artifact@v8
with:
name: dist-build
path: dist/

- name: Download A2UI bundle artifact
uses: actions/download-artifact@v8
with:
name: canvas-a2ui-bundle
path: src/canvas-host/a2ui/

- name: Run Node test shard
env:
NODE_OPTIONS: --max-old-space-size=6144
OPENCLAW_NODE_TEST_CONFIGS_JSON: ${{ toJson(matrix.configs) }}
shell: bash
run: |
set -euo pipefail
node --input-type=module <<'EOF'
import { spawnSync } from "node:child_process";
import { resolveVitestCliEntry, resolveVitestNodeArgs } from "./scripts/run-vitest.mjs";

const configs = JSON.parse(process.env.OPENCLAW_NODE_TEST_CONFIGS_JSON ?? "[]");
if (!Array.isArray(configs) || configs.length === 0) {
console.error("Missing node test shard configs");
process.exit(1);
}

for (const config of configs) {
console.error(`[test] starting ${config}`);
const result = spawnSync(
"pnpm",
[
"exec",
"node",
...resolveVitestNodeArgs(process.env),
resolveVitestCliEntry(),
"run",
"--config",
config,
],
{
env: process.env,
stdio: "inherit",
},
);
if ((result.status ?? 1) !== 0) {
process.exit(result.status ?? 1);
}
}
EOF

checks-node-core-test:
name: checks-node-core
needs: [preflight, checks-node-core-test-shard]
if: always() && needs.preflight.outputs.run_checks == 'true'
runs-on: blacksmith-16vcpu-ubuntu-2404
timeout-minutes: 5
steps:
- name: Verify node test shards
env:
SHARD_RESULT: ${{ needs.checks-node-core-test-shard.result }}
run: |
if [ "$SHARD_RESULT" != "success" ]; then
echo "Node test shards failed: $SHARD_RESULT" >&2
exit 1
fi

extension-fast:
name: "extension-fast"
needs: [preflight]
Expand Down
7 changes: 7 additions & 0 deletions .github/workflows/install-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,13 @@ jobs:
push: false
provenance: false

- name: Setup Node environment for local pack smoke
uses: ./.github/actions/setup-node-env
with:
install-bun: "false"
install-deps: "true"
use-sticky-disk: "false"

- name: Run installer docker tests
env:
OPENCLAW_INSTALL_URL: https://openclaw.ai/install.sh
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/openclaw-npm-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -493,6 +493,7 @@ jobs:
RELEASE_VERSION: ${{ env.RELEASE_VERSION }}
run: |
set -euo pipefail
printf '//registry.npmjs.org/:_authToken=%s\n' "${NODE_AUTH_TOKEN}" > "${HOME}/.npmrc"
npm whoami >/dev/null
npm dist-tag add "openclaw@${RELEASE_VERSION}" latest
promoted_latest="$(npm view openclaw dist-tags.latest)"
Expand Down
5 changes: 3 additions & 2 deletions .oxfmtrc.jsonc
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"experimentalSortImports": {
"sortImports": {
"newlinesBetween": false,
},
"experimentalSortPackageJson": {
"sortPackageJson": {
"sortScripts": true,
},
"tabWidth": 2,
Expand All @@ -20,6 +20,7 @@
"pnpm-lock.yaml/",
"src/gateway/server-methods/CLAUDE.md",
"src/auto-reply/reply/export-html/",
"src/canvas-host/a2ui/a2ui.bundle.js",
"Swabble/",
"vendor/",
],
Expand Down
22 changes: 10 additions & 12 deletions .oxlintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,23 @@
},
"rules": {
"curly": "error",
"eslint-plugin-unicorn/prefer-array-find": "off",
"eslint-plugin-unicorn/prefer-array-find": "error",
"eslint/no-await-in-loop": "off",
"eslint/no-new": "off",
"eslint/no-new": "error",
"eslint/no-shadow": "off",
"eslint/no-unmodified-loop-condition": "off",
"oxc/no-accumulating-spread": "off",
"eslint/no-unmodified-loop-condition": "error",
"eslint-plugin-unicorn/prefer-set-size": "error",
"oxc/no-accumulating-spread": "error",
"oxc/no-async-endpoint-handlers": "off",
"oxc/no-map-spread": "off",
"typescript/consistent-return": "error",
"typescript/no-explicit-any": "error",
"typescript/no-extraneous-class": "off",
"typescript/no-extraneous-class": "error",
"typescript/no-unnecessary-type-conversion": "error",
"typescript/no-unsafe-type-assertion": "off",
"unicorn/consistent-function-scoping": "off",
"unicorn/require-post-message-target-origin": "off"
"unicorn/prefer-set-size": "error",
"unicorn/require-post-message-target-origin": "error"
},
"ignorePatterns": [
"assets/",
Expand Down Expand Up @@ -54,13 +58,7 @@
"**/*test-support.ts"
],
"rules": {
"typescript/await-thenable": "off",
"typescript/no-base-to-string": "off",
"typescript/no-explicit-any": "off",
"typescript/no-floating-promises": "off",
"typescript/no-misused-spread": "off",
"typescript/no-redundant-type-constituents": "off",
"typescript/no-unnecessary-template-expression": "off",
"typescript/unbound-method": "off",
"eslint/no-unsafe-optional-chaining": "off"
}
Expand Down
3 changes: 1 addition & 2 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,5 @@
"typescript.preferences.importModuleSpecifierEnding": "js",
"typescript.reportStyleChecksAsWarnings": false,
"typescript.updateImportsOnFileMove.enabled": "always",
"typescript.tsdk": "node_modules/typescript/lib",
"typescript.experimental.useTsgo": true
"typescript.tsdk": "node_modules/typescript/lib"
}
5 changes: 4 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@
- Extension test boundary:
- Keep extension-owned onboarding/config/provider coverage under the owning bundled plugin package when feasible.
- If core tests need bundled plugin behavior, consume it through public `src/plugin-sdk/<id>.ts` facades or the plugin's `api.ts`, not private extension modules.
- Shared helpers under `test/helpers/**` are part of that same boundary. Do not hardcode repo-relative `extensions/**` imports there, and do not keep plugin-local deep mocks in shared helpers just because multiple tests use them.
- When core tests or shared helpers need bundled plugin public surfaces, use `src/test-utils/bundled-plugin-public-surface.ts` for `api.ts`, `runtime-api.ts`, `contract-api.ts`, `test-api.ts`, plugin entrypoint `index.js`, and resolved module ids for dynamic import or mocking.
- If a core test is asserting extension-specific behavior instead of a generic contract, move it to the owning extension package.

## Docs Linking (Mintlify)
Expand Down Expand Up @@ -149,6 +151,7 @@
- Config schema drift uses `pnpm config:docs:gen` / `pnpm config:docs:check`.
- Plugin SDK API drift uses `pnpm plugin-sdk:api:gen` / `pnpm plugin-sdk:api:check`.
- If you change config schema/help or the public Plugin SDK surface, run the matching gen command and commit the updated `.sha256` hash file. Keep the two drift-check flows adjacent in scripts/workflows/docs guidance rather than inventing a third pattern.
- When `pnpm tsgo` fails, triage by coherent surface instead of by raw error count: rerun the gate, group failures by package/module/type contract, open the source-of-truth type or export file first, fix the root mismatch, then rerun `pnpm tsgo` before widening into downstream consumers. Check `origin/main` before doing broad cleanup because some apparent type debt is already fixed upstream.
- For narrowly scoped changes, prefer narrowly scoped tests that directly validate the touched behavior. If no meaningful scoped test exists, say so explicitly and use the next most direct validation available.
- Verification modes for work on `main`:
- Default mode: `main` is relatively stable. Count pre-commit hook coverage when it already verified the current tree, avoid rerunning the exact same checks just for ceremony, and prefer keeping CI/main green before landing.
Expand Down Expand Up @@ -296,7 +299,7 @@

- When working on a GitHub Issue or PR, print the full URL at the end of the task.
- When answering questions, respond with high-confidence answers only: verify in code; do not guess.
- Carbon: prefer latest published beta over stable when possible; do not switch to stable casually.
- Carbon version edits are owner-only: do not change `@buape/carbon` version pins unless you are Shadow (@thewilloftheshadow) as verified by gh.
- Any dependency with `pnpm.patchedDependencies` must use an exact version (no `^`/`~`).
- Patching dependencies (pnpm patches, overrides, or vendored changes) requires explicit approval; do not do this by default.
- **Multi-agent safety:** do **not** create/apply/drop `git stash` entries unless explicitly requested (this includes `git pull --rebase --autostash`). Assume other agents may be working; keep unrelated WIP untouched and avoid cross-cutting state changes.
Expand Down
Loading
Loading