Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
3431 commits
Select commit Hold shift + click to select a range
e999631
CLI: expand config set with SecretRef/provider builders and dry-run (…
joshavant Mar 17, 2026
0e4c072
Models: add native GPT-5.4 mini and nano support (#49289)
vincentkoc Mar 17, 2026
f118191
Plugin SDK: break line and nostr export cycles
gumadeiras Mar 17, 2026
ffe2495
Plugins: fix pnpm check regressions
gumadeiras Mar 17, 2026
ab5aec1
CLI: fix config set dry-run coverage gaps
joshavant Mar 17, 2026
79f7dbf
Changelog: add config set expansion entry
joshavant Mar 17, 2026
4e912bf
Agents: improve prompt cache hit rate and add prompt composition regr…
scoootscooob Mar 17, 2026
a14ad01
Plugin SDK: centralize message tool discovery and context
gumadeiras Mar 17, 2026
1172051
Slack: own message tool blocks schema
gumadeiras Mar 17, 2026
4b5e801
BlueBubbles: scope group actions in message discovery
gumadeiras Mar 17, 2026
05634ee
Discord: own message tool components schema
gumadeiras Mar 17, 2026
dbc367e
Telegram: own message tool schema and runtime seam
gumadeiras Mar 17, 2026
d95dc50
Mattermost: own message tool button schema
gumadeiras Mar 17, 2026
60d4c5a
Feishu: own message tool card schema
gumadeiras Mar 17, 2026
df284fe
Teams: own message tool card schema
gumadeiras Mar 17, 2026
a32c7e1
Plugin SDK: normalize and harden message action discovery
gumadeiras Mar 17, 2026
5ce3eb3
Telegram: dedupe message action discovery state
gumadeiras Mar 17, 2026
1c08455
Discord: dedupe message action discovery state
gumadeiras Mar 17, 2026
b1c0371
Agents: remove unused bootstrap imports
gumadeiras Mar 17, 2026
144b95f
Agents: scope cross-channel message discovery
gumadeiras Mar 17, 2026
bb365db
Plugin SDK: unify message tool discovery
gumadeiras Mar 18, 2026
c9ba985
Slack: consolidate message tool discovery
gumadeiras Mar 18, 2026
0a0ca80
Discord: consolidate message tool discovery
gumadeiras Mar 18, 2026
60104de
Telegram: consolidate message tool discovery
gumadeiras Mar 18, 2026
28ab506
Mattermost: consolidate message tool discovery
gumadeiras Mar 18, 2026
cac1c62
Feishu: consolidate message tool discovery
gumadeiras Mar 18, 2026
da948a8
Teams: consolidate message tool discovery
gumadeiras Mar 18, 2026
951f3f9
Plugins: split message discovery and dispatch
gumadeiras Mar 18, 2026
7dabcf2
Agents: align compact message discovery scope
gumadeiras Mar 18, 2026
ab1da26
fix(macos): show sessions after controls in tray menu (#38079)
bernesto Mar 18, 2026
ab62f3b
Agents: route embedded discovery and compaction ids
gumadeiras Mar 18, 2026
f2de673
Docs: clarify plugin-owned message discovery
gumadeiras Mar 18, 2026
53df7ff
Agents: stabilize overflow runner test harness
gumadeiras Mar 18, 2026
50cac39
Agents: stabilize compaction hook test harness
gumadeiras Mar 18, 2026
9a455a8
Tests: remove compaction hook polling
gumadeiras Mar 18, 2026
2d3bcbf
CLI: skip exec SecretRef dry-run resolution unless explicitly allowed…
joshavant Mar 18, 2026
d073ec4
Tests: reuse embedded runner harness imports
gumadeiras Mar 18, 2026
d3fc6c0
Plugins: internalize mattermost and tlon SDK imports
vincentkoc Mar 18, 2026
4c36436
Plugin SDK: add legacy message discovery helper
gumadeiras Mar 18, 2026
9df3e9b
Discord: move action runtime into extension
gumadeiras Mar 18, 2026
c3386d3
Telegram: move action runtime into extension
gumadeiras Mar 18, 2026
b3ae50c
Slack: move action runtime into extension
gumadeiras Mar 18, 2026
8165db7
WhatsApp: move action runtime into extension
gumadeiras Mar 18, 2026
b5c38b1
Docs: point message runtime docs and tests at plugin-owned code
gumadeiras Mar 18, 2026
ed72695
Tlon: fix plugin-sdk import boundaries
gumadeiras Mar 18, 2026
1c6676c
Plugins: remove first-party legacy message discovery shims
gumadeiras Mar 18, 2026
fb0d04c
Tests: migrate channel action discovery to describeMessageTool
gumadeiras Mar 18, 2026
8e98019
Nostr: remove plugin API import cycle
gumadeiras Mar 18, 2026
09de192
Tlon: import channel account snapshot type
gumadeiras Mar 18, 2026
bb803a4
Mattermost: normalize plugin imports
gumadeiras Mar 18, 2026
9e8b9ab
WhatsApp: isolate lazy action runtime boundary
gumadeiras Mar 18, 2026
fa73f5a
Polls: defer shared parsing until plugin fallback
gumadeiras Mar 18, 2026
d8b95d2
Polls: scope Telegram poll extras to plugin schema
gumadeiras Mar 18, 2026
01ae160
chore: checkpoint ci triage
steipete Mar 18, 2026
841b1a5
docs: unify unreleased changelog sections
steipete Mar 18, 2026
6f060d7
Deps: bump fast-xml-parser audit override (#49367)
vincentkoc Mar 18, 2026
44521d6
test: stabilize plugin contract mocks
steipete Mar 18, 2026
b942dac
Sessions: move session target shaping to plugins
gumadeiras Mar 18, 2026
1313767
refactor: enforce plugin boundary seams
steipete Mar 18, 2026
889bb8a
Plugins: internalize matrix and feishu SDK imports
vincentkoc Mar 18, 2026
0556324
docs: reorder changelog sections by interest
steipete Mar 18, 2026
5b2c5ee
refactor: remove remaining extension src imports
steipete Mar 18, 2026
fa34cb8
fix: resolve rebase export collisions
steipete Mar 18, 2026
25e6cd3
UI: mute sidebar and chat input accent colors (#49390)
BunsDev Mar 18, 2026
870f260
Gateway: cover trusted-proxy scope regression (#49372)
vincentkoc Mar 18, 2026
682f4d1
Plugin SDK: require unified message discovery
gumadeiras Mar 18, 2026
6b9b32a
Docs: require unified message discovery
gumadeiras Mar 18, 2026
27d4fdf
Plugins: surface compatibility notices
vincentkoc Mar 18, 2026
206d1be
Changelog: note plugin message discovery break
gumadeiras Mar 18, 2026
53dcafb
Config UI: click-to-reveal redacted env vars and use lightweight re-r…
BunsDev Mar 18, 2026
a41840f
Matrix: split internal runtime barrel from public SDK
vincentkoc Mar 18, 2026
3cc83cb
Plugins: internalize msteams SDK imports
vincentkoc Mar 18, 2026
cd5c2f4
refactor: dedupe channel plugin shared assembly
steipete Mar 18, 2026
28b888c
Slack: move message actions behind plugin boundary
gumadeiras Mar 18, 2026
0a90b07
Agents: honor workspace Anthropic provider capabilities
vincentkoc Mar 18, 2026
56066dc
docs(ui): harden legacy query token guidance (#49053)
BunsDev Mar 18, 2026
1777b99
Signal: move message actions behind plugin boundary
gumadeiras Mar 18, 2026
2f21eeb
Plugins: internalize bluebubbles SDK imports
vincentkoc Mar 18, 2026
abaa910
Build: remove legacy channel action shim entries
gumadeiras Mar 18, 2026
889011c
Build: remove legacy WhatsApp login shim
gumadeiras Mar 18, 2026
9e556f7
Slack: move group policy behind plugin boundary
gumadeiras Mar 18, 2026
9350cb1
refactor: deduplicate plugin setup and channel config helpers
steipete Mar 18, 2026
0bfaa36
Discord: move group policy behind plugin boundary
gumadeiras Mar 18, 2026
f8f9e06
Guardrails: pin runtime-api export seams (#49371)
vincentkoc Mar 18, 2026
a34944c
Tests: pin Telegram fallback host (#49364)
vincentkoc Mar 18, 2026
7ba8dd1
Telegram: move group policy behind plugin boundary
gumadeiras Mar 18, 2026
5c4903d
Plugins: centralize compatibility formatting
vincentkoc Mar 18, 2026
6556a40
Tests: drop unstable plugins cli coverage
vincentkoc Mar 18, 2026
005b25e
refactor: split remaining monitor runtime helpers
steipete Mar 18, 2026
9c12b41
fix: restore plugin sdk exports after rebase
steipete Mar 18, 2026
a4b98f9
Changelog: attribute message discovery break
gumadeiras Mar 18, 2026
c29458d
WhatsApp: move group policy behind plugin boundary
gumadeiras Mar 18, 2026
1f5f3fc
iMessage: move group policy behind plugin boundary
gumadeiras Mar 18, 2026
4e706da
iMessage: fix group policy config import
gumadeiras Mar 18, 2026
bf87029
Google Chat: move group policy behind plugin boundary
gumadeiras Mar 18, 2026
a8f433d
BlueBubbles: move group policy behind plugin boundary
gumadeiras Mar 18, 2026
f253f14
Plugins: internalize discord SDK imports
vincentkoc Mar 18, 2026
1aae93b
LINE: remove shared group mentions helper
gumadeiras Mar 18, 2026
d2ef865
docs(plugins): deduplicate and cross-reference plugin capability docs
vincentkoc Mar 18, 2026
2c35faf
docs: fix "a OpenClaw" → "an OpenClaw" grammar across docs
vincentkoc Mar 18, 2026
4c90284
Tests: make seam guardrails path-safe
vincentkoc Mar 18, 2026
a89cb3e
refactor(telegram): unify action normalization
obviyus Mar 18, 2026
fb5ab95
build: update deps except carbon
steipete Mar 18, 2026
a2518a1
refactor: split monitor runtime helpers
steipete Mar 18, 2026
326c660
fix: restore discord runtime api exports after rebase
steipete Mar 18, 2026
e691345
fix preserve plugin-sdk web search compatibility
Takhoffman Mar 18, 2026
24dc91c
ci add time-gated boundary inventory jobs
Takhoffman Mar 18, 2026
1c81b82
Config: warn on plugin compatibility debt
vincentkoc Mar 18, 2026
1a9114a
refactor: deduplicate setup wizard helpers
steipete Mar 18, 2026
df72ca1
UI: add corner radius slider and appearance polish (#49436)
BunsDev Mar 18, 2026
3de973f
refactor web search provider execution out of core
Takhoffman Mar 18, 2026
92a40d3
test refresh boundary inventories for web search migration
Takhoffman Mar 18, 2026
826c592
Plugin SDK: add outbound session route helpers
gumadeiras Mar 18, 2026
4079de2
Outbound: route sessions through channel plugins
gumadeiras Mar 18, 2026
6ba15aa
Discord: export runtime config helpers
gumadeiras Mar 18, 2026
fa89670
WhatsApp: move outbound session routing behind plugin boundary
gumadeiras Mar 18, 2026
d1d36da
Matrix: move outbound session routing behind plugin boundary
gumadeiras Mar 18, 2026
028f3c4
MSTeams: move outbound session routing behind plugin boundary
gumadeiras Mar 18, 2026
d6c13d9
Mattermost: move outbound session routing behind plugin boundary
gumadeiras Mar 18, 2026
0f7cd59
BlueBubbles: move outbound session routing behind plugin boundary
gumadeiras Mar 18, 2026
6816c76
Nextcloud Talk: move outbound session routing behind plugin boundary
gumadeiras Mar 18, 2026
33bcf11
Zalo: move outbound session routing behind plugin boundary
gumadeiras Mar 18, 2026
b8dd654
Zalo User: move outbound session routing behind plugin boundary
gumadeiras Mar 18, 2026
de0285d
Nostr: move outbound session routing behind plugin boundary
gumadeiras Mar 18, 2026
c03b087
Tlon: move outbound session routing behind plugin boundary
gumadeiras Mar 18, 2026
2a02337
Feishu: move outbound session routing behind plugin boundary
gumadeiras Mar 18, 2026
0636c6e
Plugins: internalize irc SDK imports
vincentkoc Mar 18, 2026
4285eb3
Plugins: internalize signal SDK imports
vincentkoc Mar 18, 2026
2b67a3f
Plugins: internalize googlechat SDK imports
vincentkoc Mar 18, 2026
2d87bc7
Plugins: align googlechat runtime imports
vincentkoc Mar 18, 2026
1e1bc24
Enhance settings persistence: add error handling for storage operatio…
BunsDev Mar 18, 2026
e5eda19
UI: fix redundant applyBorderRadius call and restore session-scope ca…
BunsDev Mar 18, 2026
f842de0
doctor: clarify orphan transcript archive prompt
gumadeiras Mar 18, 2026
bf470b7
docs(plugins): dedup in-process trust refs and add manifest cross-ref…
vincentkoc Mar 18, 2026
0ffcc30
Secrets: gate exec dry-run and preflight resolution behind --allow-ex…
joshavant Mar 18, 2026
e93412b
Outbound: move target resolution heuristics behind plugins
gumadeiras Mar 18, 2026
4e94f3a
UI: mute colored focus ring on agent chat textarea
BunsDev Mar 18, 2026
b86bc9d
refactor: split remaining monitor runtime helpers
steipete Mar 18, 2026
2b5fa09
Plugins: move config-backed directories behind channel plugins
gumadeiras Mar 18, 2026
a8907d8
feat: finish xai provider integration
steipete Mar 18, 2026
e5363b0
Changelog: update secrets exec refs attribution
joshavant Mar 18, 2026
04eb17b
Tests: clean up trusted proxy pairing seed
vincentkoc Mar 18, 2026
6710a2b
Image generation: add fal provider (#49454)
vincentkoc Mar 18, 2026
aa37391
Plugins: internalize imessage SDK imports
vincentkoc Mar 18, 2026
873ac8b
Plugins: internalize slack SDK imports
vincentkoc Mar 18, 2026
9932d29
Docs: clarify plugin target resolution and directories
gumadeiras Mar 18, 2026
2fbf2c0
fix: repair plugin runtime api imports
steipete Mar 18, 2026
112d1d3
refactor web search config ownership into extensions
Takhoffman Mar 18, 2026
77fb258
test add extension plugin sdk boundary guards
Takhoffman Mar 18, 2026
6aaf0d0
test(telegram): add bot runtime seam
obviyus Mar 18, 2026
edcf3e9
test(telegram): add dispatch and handler seams
obviyus Mar 18, 2026
23f618d
test(telegram): rewire bot harnesses to runtime seams
obviyus Mar 18, 2026
243dabc
test(telegram): align media harness with runtime seam
obviyus Mar 18, 2026
b85d97f
refactor(telegram): inject shared bot deps
obviyus Mar 18, 2026
b9dfb6c
test(telegram): inject bot deps in harnesses
obviyus Mar 18, 2026
1ef7e54
test(telegram): pass explicit deps in command tests
obviyus Mar 18, 2026
e1cae60
test: harden prompt composition coverage
steipete Mar 18, 2026
2c5fd8e
chore finalize web search provider boundaries
Takhoffman Mar 18, 2026
05603e4
refactor: deduplicate channel config adapters
steipete Mar 18, 2026
67ce726
fix(slack): repair gateway watch runtime export
steipete Mar 18, 2026
0354d49
docs update web search config guidance
Takhoffman Mar 18, 2026
5464ad1
UI: expand-to-canvas, session navigation, plugin SDK fixes (#49483)
BunsDev Mar 18, 2026
bfecc58
xAI: add web search credential metadata (#49472)
scoootscooob Mar 18, 2026
4c160d2
Signal: fix account config type import (#49470)
scoootscooob Mar 18, 2026
4ca87fa
fix: restore main build (#49478)
jalehman Mar 18, 2026
2c579b6
fix(models): preserve @YYYYMMDD version suffixes (#48896) thanks @Ali…
Mar 18, 2026
5f89897
plugins: dist node_modules symlink + config raw-toggle UI fix (#49490)
BunsDev Mar 18, 2026
cd27523
refactor move web search sdk helpers into plugin-sdk
Takhoffman Mar 18, 2026
dc20a7c
Build: fix bundled plugin runtime symlinks
mukhtharcm Mar 18, 2026
ff84961
Extensions: route Signal and xai through plugin-sdk
mukhtharcm Mar 18, 2026
937f118
Gateway: add docs hint for plugin override trust error (#49513)
jalehman Mar 18, 2026
7f0f8dd
feat: expose context-engine compaction delegate helper (#49061)
jalehman Mar 18, 2026
7b27f8a
docs(refactor): replace seam terminology with capability/surface
vincentkoc Mar 18, 2026
2ef28a7
Plugins: internalize zalouser SDK imports
vincentkoc Mar 18, 2026
645c5bd
Plugins: internalize zalo SDK imports
vincentkoc Mar 18, 2026
5642fb2
Plugins: internalize twitch SDK imports
vincentkoc Mar 18, 2026
0a065bc
Plugins: guard channel api barrels
vincentkoc Mar 18, 2026
ed479f9
Plugins: internalize qwen portal auth SDK imports
vincentkoc Mar 18, 2026
02826ea
Plugins: internalize lobster SDK imports
vincentkoc Mar 18, 2026
4d551e6
Plugins: internalize acpx SDK imports
vincentkoc Mar 18, 2026
1aab71c
Plugins: guard local extension barrels
vincentkoc Mar 18, 2026
8c436a4
perf(test): decouple plugin runtime bootstrap
obviyus Mar 18, 2026
c245c8b
refactor(plugin-sdk): split interactive runtime helpers
obviyus Mar 18, 2026
d949a51
Plugins: internalize small extension SDK imports
vincentkoc Mar 18, 2026
75f98fe
Plugins: guard small extension barrels
vincentkoc Mar 18, 2026
08a0219
Google Chat: thin runtime api seam (#49504)
scoootscooob Mar 18, 2026
9282d5d
Plugins: soften hook-only compatibility copy
vincentkoc Mar 18, 2026
0bdd17a
Plugins: finish signal SDK internalization
vincentkoc Mar 18, 2026
df79113
Plugins: internalize telegram SDK imports
vincentkoc Mar 18, 2026
6e723df
Plugins: internalize medium extension SDK imports
vincentkoc Mar 18, 2026
c81b4a5
Plugins: guard remaining local barrels
vincentkoc Mar 18, 2026
8af4628
Plugins: guard signal and telegram barrels
vincentkoc Mar 18, 2026
77dfa73
Plugins: internalize whatsapp SDK imports
vincentkoc Mar 18, 2026
d1d1000
Plugins: guard whatsapp local barrel
vincentkoc Mar 18, 2026
b9b891b
Plugins: wire Claude bundle hook resolution (parity with Codex)
vincentkoc Mar 18, 2026
b48413e
Plugins: surface MCP servers and bundle capabilities in inspect reports
vincentkoc Mar 18, 2026
100d7b0
Doctor: add bundle plugin capability summary to workspace status
vincentkoc Mar 18, 2026
b333eb1
Tests: align plugin test imports with local barrels
vincentkoc Mar 18, 2026
732e075
ACP: reproduce binding restart session reset (#49435)
dutifulbob Mar 18, 2026
ad185dd
CLI: make config compatibility advice opt-in
vincentkoc Mar 18, 2026
c36a493
Docs: clarify plugin compatibility signals
vincentkoc Mar 18, 2026
fe84354
fix(plugins): add missing secret-input-schema build entry and Matrix …
vincentkoc Mar 18, 2026
d1fe30b
Plugins: add Twitch runtime barrel
BunsDev Mar 18, 2026
d341d68
Plugin SDK: trim legacy helper exports
vincentkoc Mar 18, 2026
a5fa75c
Plugins: accept Claude bundle hooks as wired capability in loader
vincentkoc Mar 18, 2026
98fbbeb
Tests: add Claude bundle plugin inspect integration test
vincentkoc Mar 18, 2026
0385553
Plugin SDK: trim lobster and qwen helper exports
vincentkoc Mar 18, 2026
5eea523
UI: remove dead control UI modules
vincentkoc Mar 18, 2026
bd44443
Plugin SDK: clarify ACPX public seam
vincentkoc Mar 18, 2026
8ac4b09
docs: fix em-dash headings and broken links across docs
vincentkoc Mar 18, 2026
3d31ba7
Plugin SDK: guard package subpaths and fix Twitch setup export
vincentkoc Mar 18, 2026
0dda3e6
Plugin SDK: align docs and fix runtime imports
vincentkoc Mar 18, 2026
1cbfd53
docs: remove apostrophes from headings (breaks Mintlify anchors)
vincentkoc Mar 18, 2026
79f2173
docs: add missing frontmatter and title fields
vincentkoc Mar 18, 2026
21c2ba4
Image generation: native provider migration and explicit capabilities…
vincentkoc Mar 18, 2026
e17d10f
Plugin SDK: restore lobster and voice-call exports
vincentkoc Mar 18, 2026
c99c4b1
Plugin SDK: restore read-only directory inspection seam
vincentkoc Mar 18, 2026
50a81c8
Plugins: merge agent and output-style dirs into Claude bundle skills
vincentkoc Mar 18, 2026
4ebd3d1
Plugins: add LSP server loader and surface in inspect reports
vincentkoc Mar 18, 2026
6538c87
Tests: update Claude bundle integration test for agents, output style…
vincentkoc Mar 18, 2026
198ed08
docs: fix redirect chains and disambiguate duplicate titles
vincentkoc Mar 18, 2026
3a28bc7
docs(plugins): rewrite compatibility signals for clarity
vincentkoc Mar 18, 2026
4e265fe
test(telegram): fix native command runtime mocks
obviyus Mar 18, 2026
6802a76
fix(zalo): break account helper cycles
obviyus Mar 18, 2026
466510b
refactor: replace "seam" terminology across codebase
vincentkoc Mar 18, 2026
57e97a6
fix(webchat): prevent slash menu from being clipped by overflow conta…
RickyTong1 Mar 18, 2026
9886193
Plugins: add LSP server runtime with stdio JSON-RPC client and agent …
vincentkoc Mar 18, 2026
e7a4f01
Plugins: integrate LSP tool runtime into Pi embedded runner
vincentkoc Mar 18, 2026
393ef40
Perf: skip MCP/LSP runtime spawning when no servers are configured
vincentkoc Mar 18, 2026
f0d7125
Main recovery: restore formatter and contract checks (#49570)
vincentkoc Mar 18, 2026
e0fbfa2
docs: remove docs/refactor/ directory
vincentkoc Mar 18, 2026
c114484
Plugin SDK: fix contract seam regressions
vincentkoc Mar 18, 2026
49ffa49
docs: remove experiments/ and design/ directories
vincentkoc Mar 18, 2026
9ad88df
Format: sync seam fixes with oxfmt
vincentkoc Mar 18, 2026
9ab4bcd
Feishu: break plugin-sdk setup cycle
vincentkoc Mar 18, 2026
791289e
test(telegram): align create-bot assertions
obviyus Mar 18, 2026
42f0a0f
test(telegram): stabilize inbound media harness
obviyus Mar 18, 2026
f7a32e9
Plugins: prefer source bundles in git checkouts
vincentkoc Mar 18, 2026
33e10db
Contracts: harden provider registry loading
vincentkoc Mar 18, 2026
fb52025
docs: fix curly quotes, non-breaking hyphens, and remaining apostroph…
vincentkoc Mar 18, 2026
d5c3318
fix(agents): correct broken docs/testing.md path in AGENTS.md
vincentkoc Mar 18, 2026
2164dd2
Plugins: fix bundled web search compat registry
vincentkoc Mar 18, 2026
1c79392
Contracts: harden plugin registry loading
vincentkoc Mar 18, 2026
e9ac371
Tlon: install api from tarball artifact
vincentkoc Mar 18, 2026
4f241b6
Config: align model compat thinking format schema
vincentkoc Mar 18, 2026
4a81707
Telegram: fix reply-runtime test typings
vincentkoc Mar 18, 2026
cceffc2
fix: serialize duplicate channel starts (#49583) (thanks @sudie-codes)
vignesh07 Mar 18, 2026
d861382
Plugin SDK: split provider auth login seam
vincentkoc Mar 18, 2026
ca145e2
Plugin SDK: register provider auth login entrypoint
vincentkoc Mar 18, 2026
04678ef
fix(webchat): auto-scroll slash menu to follow keyboard navigation
RickyTong1 Mar 19, 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.
14 changes: 7 additions & 7 deletions .agent/workflows/update_clawdbot.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
description: Update Clawdbot from upstream when branch has diverged (ahead/behind)
description: Update OpenClaw from upstream when branch has diverged (ahead/behind)
---

# Clawdbot Upstream Sync Workflow
# OpenClaw Upstream Sync Workflow

Use this workflow when your fork has diverged from upstream (e.g., "18 commits ahead, 29 commits behind").

Expand Down Expand Up @@ -132,16 +132,16 @@ pnpm mac:package

```bash
# Kill running app
pkill -x "Clawdbot" || true
pkill -x "OpenClaw" || true

# Move old version
mv /Applications/Clawdbot.app /tmp/Clawdbot-backup.app
mv /Applications/OpenClaw.app /tmp/OpenClaw-backup.app

# Install new build
cp -R dist/Clawdbot.app /Applications/
cp -R dist/OpenClaw.app /Applications/

# Launch
open /Applications/Clawdbot.app
open /Applications/OpenClaw.app
```

---
Expand Down Expand Up @@ -235,7 +235,7 @@ If upstream introduced new model configurations:
# Check for OpenRouter API key requirements
grep -r "openrouter\|OPENROUTER" src/ --include="*.ts" --include="*.js"

# Update clawdbot.json with fallback chains
# Update openclaw.json with fallback chains
# Add model fallback configurations as needed
```

Expand Down
62 changes: 62 additions & 0 deletions .agents/skills/parallels-discord-roundtrip/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
name: parallels-discord-roundtrip
description: Run the macOS Parallels smoke harness with Discord end-to-end roundtrip verification, including guest send, host verification, host reply, and guest readback.
---

# Parallels Discord Roundtrip

Use when macOS Parallels smoke must prove Discord two-way delivery end to end.

## Goal

Cover:

- install on fresh macOS snapshot
- onboard + gateway health
- guest `message send` to Discord
- host sees that message on Discord
- host posts a new Discord message
- guest `message read` sees that new message

## Inputs

- host env var with Discord bot token
- Discord guild ID
- Discord channel ID
- `OPENAI_API_KEY`

## Preferred run

```bash
export OPENCLAW_PARALLELS_DISCORD_TOKEN="$(
ssh peters-mac-studio-1 'jq -r ".channels.discord.token" ~/.openclaw/openclaw.json' | tr -d '\n'
)"

pnpm test:parallels:macos \
--discord-token-env OPENCLAW_PARALLELS_DISCORD_TOKEN \
--discord-guild-id 1456350064065904867 \
--discord-channel-id 1456744319972282449 \
--json
```

## Notes

- Snapshot target: closest to `macOS 26.3.1 fresh`.
- Snapshot resolver now prefers matching `*-poweroff*` clones when the base hint also matches. That lets the harness reuse disk-only recovery snapshots without passing a longer hint.
- If Windows/Linux snapshot restore logs show `PET_QUESTION_SNAPSHOT_STATE_INCOMPATIBLE_CPU`, drop the suspended state once, create a `*-poweroff*` replacement snapshot, and rerun. The smoke scripts now auto-start restored power-off snapshots.
- Harness configures Discord inside the guest; no checked-in token/config.
- Use the `openclaw` wrapper for guest `message send/read`; `node openclaw.mjs message ...` does not expose the lazy message subcommands the same way.
- Write `channels.discord.guilds` in one JSON object (`--strict-json`), not dotted `config set channels.discord.guilds.<snowflake>...` paths; numeric snowflakes get treated like array indexes.
- Avoid `prlctl enter` / expect for long Discord setup scripts; it line-wraps/corrupts long commands. Use `prlctl exec --current-user /bin/sh -lc ...` for the Discord config phase.
- Full 3-OS sweeps: the shared build lock is safe in parallel, but snapshot restore is still a Parallels bottleneck. Prefer serialized Windows/Linux restore-heavy reruns if the host is already under load.
- Harness cleanup deletes the temporary Discord smoke messages at exit.
- Per-phase logs: `/tmp/openclaw-parallels-smoke.*`
- Machine summary: pass `--json`
- If roundtrip flakes, inspect `fresh.discord-roundtrip.log` and `discord-last-readback.json` in the run dir first.

## Pass criteria

- fresh lane or upgrade lane requested passes
- summary reports `discord=pass` for that lane
- guest outbound nonce appears in channel history
- host inbound nonce appears in `openclaw message read` output
23 changes: 19 additions & 4 deletions .detect-secrets.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,6 @@
[exclude-files]
# pnpm lockfiles contain lots of high-entropy package integrity blobs.
pattern = (^|/)pnpm-lock\.yaml$
# Generated output and vendored assets.
pattern = (^|/)(dist|vendor)/
# Local config file with allowlist patterns.
pattern = (^|/)\.detect-secrets\.cfg$

[exclude-lines]
# Fastlane checks for private key marker; not a real key.
Expand All @@ -28,3 +24,22 @@ pattern = "talk\.apiKey"
pattern = === "string"
# specific optional-chaining password check that didn't match the line above.
pattern = typeof remote\?\.password === "string"
# Docker apt signing key fingerprint constant; not a secret.
pattern = OPENCLAW_DOCKER_GPG_FINGERPRINT=
# Credential matrix metadata field in docs JSON; not a secret value.
pattern = "secretShape": "(secret_input|sibling_ref)"
# Docs line describing API key rotation knobs; not a credential.
pattern = API key rotation \(provider-specific\): set `\*_API_KEYS`
# Docs line describing remote password precedence; not a credential.
pattern = passw[o]rd: `OPENCLAW_GATEWAY_PASSW[O]RD` -> `gateway\.auth\.passw[o]rd` -> `gateway\.remote\.passw[o]rd`
pattern = passw[o]rd: `OPENCLAW_GATEWAY_PASSW[O]RD` -> `gateway\.remote\.passw[o]rd` -> `gateway\.auth\.passw[o]rd`
# Test fixture starts a multiline fake private key; detector should ignore the header line.
pattern = const key = `-----BEGIN PRIVATE KEY-----
# Docs examples: literal placeholder API key snippets and shell heredoc helper.
pattern = export CUSTOM_API_K[E]Y="your-key"
pattern = grep -q 'N[O]DE_COMPILE_CACHE=/var/tmp/openclaw-compile-cache' ~/.bashrc \|\| cat >> ~/.bashrc <<'EOF'
pattern = env: \{ MISTRAL_API_K[E]Y: "sk-\.\.\." \},
pattern = "ap[i]Key": "xxxxx",
pattern = ap[i]Key: "A[I]za\.\.\.",
# Sparkle appcast signatures are release metadata, not credentials.
pattern = sparkle:edSignature="[A-Za-z0-9+/=]+"
6 changes: 6 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
.git
.worktrees

# Sensitive files – docker-setup.sh writes .env with OPENCLAW_GATEWAY_TOKEN
# into the project root; keep it out of the build context.
.env
.env.*

.bun-cache
.bun
.tmp
Expand Down
54 changes: 54 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Protect the ownership rules themselves.
/.github/CODEOWNERS @steipete

# WARNING: GitHub CODEOWNERS uses last-match-wins semantics.
# If you add overlapping rules below the secops block, include @openclaw/secops
# on those entries too or you can silently remove required secops review.
# Security-sensitive code, config, and docs require secops review.
/SECURITY.md @openclaw/secops
/.github/dependabot.yml @openclaw/secops
/.github/codeql/ @openclaw/secops
/.github/workflows/codeql.yml @openclaw/secops
/src/security/ @openclaw/secops
/src/secrets/ @openclaw/secops
/src/config/*secret*.ts @openclaw/secops
/src/config/**/*secret*.ts @openclaw/secops
/src/gateway/*auth*.ts @openclaw/secops
/src/gateway/**/*auth*.ts @openclaw/secops
/src/gateway/*secret*.ts @openclaw/secops
/src/gateway/**/*secret*.ts @openclaw/secops
/src/gateway/security-path*.ts @openclaw/secops
/src/gateway/resolve-configured-secret-input-string*.ts @openclaw/secops
/src/gateway/protocol/**/*secret*.ts @openclaw/secops
/src/gateway/server-methods/secrets*.ts @openclaw/secops
/src/agents/*auth*.ts @openclaw/secops
/src/agents/**/*auth*.ts @openclaw/secops
/src/agents/auth-profiles*.ts @openclaw/secops
/src/agents/auth-health*.ts @openclaw/secops
/src/agents/auth-profiles/ @openclaw/secops
/src/agents/sandbox.ts @openclaw/secops
/src/agents/sandbox-*.ts @openclaw/secops
/src/agents/sandbox/ @openclaw/secops
/src/infra/secret-file*.ts @openclaw/secops
/src/cron/stagger.ts @openclaw/secops
/src/cron/service/jobs.ts @openclaw/secops
/docs/security/ @openclaw/secops
/docs/gateway/authentication.md @openclaw/secops
/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md @openclaw/secops
/docs/gateway/sandboxing.md @openclaw/secops
/docs/gateway/secrets-plan-contract.md @openclaw/secops
/docs/gateway/secrets.md @openclaw/secops
/docs/gateway/security/ @openclaw/secops
/docs/cli/approvals.md @openclaw/secops
/docs/cli/sandbox.md @openclaw/secops
/docs/cli/security.md @openclaw/secops
/docs/cli/secrets.md @openclaw/secops
/docs/reference/secretref-credential-surface.md @openclaw/secops
/docs/reference/secretref-user-supplied-credentials-matrix.json @openclaw/secops

# Release workflow and its supporting release-path checks.
/.github/workflows/openclaw-npm-release.yml @openclaw/openclaw-release-managers
/docs/reference/RELEASING.md @openclaw/openclaw-release-managers
/scripts/openclaw-npm-publish.sh @openclaw/openclaw-release-managers
/scripts/openclaw-npm-release-check.ts @openclaw/openclaw-release-managers
/scripts/release-check.ts @openclaw/openclaw-release-managers
1 change: 0 additions & 1 deletion .github/FUNDING.yml

This file was deleted.

31 changes: 31 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,37 @@ body:
label: Install method
description: How OpenClaw was installed or launched.
placeholder: npm global / pnpm dev / docker / mac app
- type: input
id: model
attributes:
label: Model
description: Effective model under test.
placeholder: minimax/text-01 / openrouter/anthropic/claude-opus-4.1 / anthropic/claude-sonnet-4.5
validations:
required: true
- type: input
id: provider_chain
attributes:
label: Provider / routing chain
description: Effective request path through gateways, proxies, providers, or model routers.
placeholder: openclaw -> cloudflare-ai-gateway -> minimax
validations:
required: true
- type: input
id: config_location
attributes:
label: Config file / key location
description: Optional. Relevant config source or key path if this bug depends on overrides or custom provider setup. Redact secrets.
placeholder: ~/.openclaw/openclaw.json ; models.providers.cloudflare-ai-gateway.baseUrl ; ~/.openclaw/agents/<agentId>/agent/models.json
- type: textarea
id: provider_setup_details
attributes:
label: Additional provider/model setup details
description: Optional. Include redacted routing details, per-agent overrides, auth-profile interactions, env/config context, or anything else needed to explain the effective provider/model setup. Do not include API keys, tokens, or passwords.
placeholder: |
Default route is openclaw -> cloudflare-ai-gateway -> minimax.
Previous setup was openclaw -> cloudflare-ai-gateway -> openrouter -> minimax.
Relevant config lives in ~/.openclaw/openclaw.json under models.providers.minimax and models.providers.cloudflare-ai-gateway.
- type: textarea
id: logs
attributes:
Expand Down
47 changes: 47 additions & 0 deletions .github/actions/ensure-base-commit/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Ensure base commit
description: Ensure a shallow checkout has enough history to diff against a base SHA.
inputs:
base-sha:
description: Base commit SHA to diff against.
required: true
fetch-ref:
description: Branch or ref to deepen/fetch from origin when base-sha is missing.
required: true
runs:
using: composite
steps:
- name: Ensure base commit is available
shell: bash
env:
BASE_SHA: ${{ inputs.base-sha }}
FETCH_REF: ${{ inputs.fetch-ref }}
run: |
set -euo pipefail

if [ -z "$BASE_SHA" ] || [[ "$BASE_SHA" =~ ^0+$ ]]; then
echo "No concrete base SHA available; skipping targeted fetch."
exit 0
fi

if git rev-parse --verify "$BASE_SHA^{commit}" >/dev/null 2>&1; then
echo "Base commit already present: $BASE_SHA"
exit 0
fi

for deepen_by in 25 100 300; do
echo "Base commit missing; deepening $FETCH_REF by $deepen_by."
git fetch --no-tags --deepen="$deepen_by" origin "$FETCH_REF" || true
if git rev-parse --verify "$BASE_SHA^{commit}" >/dev/null 2>&1; then
echo "Resolved base commit after deepening: $BASE_SHA"
exit 0
fi
done

echo "Base commit still missing; fetching full history for $FETCH_REF."
git fetch --no-tags origin "$FETCH_REF" || true
if git rev-parse --verify "$BASE_SHA^{commit}" >/dev/null 2>&1; then
echo "Resolved base commit after full ref fetch: $BASE_SHA"
exit 0
fi

echo "Base commit still unavailable after fetch attempts: $BASE_SHA"
18 changes: 11 additions & 7 deletions .github/actions/setup-node-env/action.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
name: Setup Node environment
description: >
Initialize submodules with retry, install Node 22, pnpm, optionally Bun,
Initialize submodules with retry, install Node 24 by default, pnpm, optionally Bun,
and optionally run pnpm install. Requires actions/checkout to run first.
inputs:
node-version:
description: Node.js version to install.
required: false
default: "22.x"
default: "24.x"
cache-key-suffix:
description: Suffix appended to the pnpm store cache key.
required: false
default: "node24"
pnpm-version:
description: pnpm version for corepack.
required: false
Expand All @@ -16,7 +20,7 @@ inputs:
required: false
default: "true"
use-sticky-disk:
description: Use Blacksmith sticky disks for pnpm store caching.
description: Request Blacksmith sticky-disk pnpm caching on trusted runs; pull_request runs fall back to actions/cache.
required: false
default: "false"
install-deps:
Expand Down Expand Up @@ -45,7 +49,7 @@ runs:
exit 1

- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
uses: actions/setup-node@v6
with:
node-version: ${{ inputs.node-version }}
check-latest: false
Expand All @@ -54,14 +58,14 @@ runs:
uses: ./.github/actions/setup-pnpm-store-cache
with:
pnpm-version: ${{ inputs.pnpm-version }}
cache-key-suffix: "node22"
cache-key-suffix: ${{ inputs.cache-key-suffix }}
use-sticky-disk: ${{ inputs.use-sticky-disk }}

- name: Setup Bun
if: inputs.install-bun == 'true'
uses: oven-sh/setup-bun@v2
uses: oven-sh/setup-bun@v2.1.3
with:
bun-version: "1.3.9+cf6cdbbba"
bun-version: "1.3.9"

- name: Runtime versions
shell: bash
Expand Down
20 changes: 11 additions & 9 deletions .github/actions/setup-pnpm-store-cache/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@ inputs:
cache-key-suffix:
description: Suffix appended to the cache key.
required: false
default: "node22"
default: "node24"
use-sticky-disk:
description: Use Blacksmith sticky disks instead of actions/cache for pnpm store.
description: Use Blacksmith sticky disks instead of actions/cache for pnpm store on trusted runs; pull_request runs fall back to actions/cache.
required: false
default: "false"
use-restore-keys:
description: Whether to use restore-keys fallback for actions/cache.
required: false
default: "true"
use-actions-cache:
description: Whether to restore/save pnpm store with actions/cache.
description: Whether to restore/save pnpm store with actions/cache, including pull_request fallback when sticky disks are disabled.
required: false
default: "true"
runs:
Expand Down Expand Up @@ -51,22 +51,24 @@ runs:
run: echo "path=$(pnpm store path --silent)" >> "$GITHUB_OUTPUT"

- name: Mount pnpm store sticky disk
if: inputs.use-sticky-disk == 'true'
# Keep persistent sticky-disk state off untrusted PR runs.
if: inputs.use-sticky-disk == 'true' && github.event_name != 'pull_request'
uses: useblacksmith/stickydisk@v1
with:
key: ${{ github.repository }}-pnpm-store-${{ runner.os }}-${{ inputs.cache-key-suffix }}
key: ${{ github.repository }}-pnpm-store-${{ runner.os }}-${{ github.ref_name }}-${{ inputs.cache-key-suffix }}-${{ hashFiles('pnpm-lock.yaml') }}
path: ${{ steps.pnpm-store.outputs.path }}

- name: Restore pnpm store cache (exact key only)
if: inputs.use-actions-cache == 'true' && inputs.use-sticky-disk != 'true' && inputs.use-restore-keys != 'true'
uses: actions/cache@v4
# PRs that request sticky disks still need a safe cache restore path.
if: inputs.use-actions-cache == 'true' && (inputs.use-sticky-disk != 'true' || github.event_name == 'pull_request') && inputs.use-restore-keys != 'true'
uses: actions/cache@v5
with:
path: ${{ steps.pnpm-store.outputs.path }}
key: ${{ runner.os }}-pnpm-store-${{ inputs.cache-key-suffix }}-${{ hashFiles('pnpm-lock.yaml') }}

- name: Restore pnpm store cache (with fallback keys)
if: inputs.use-actions-cache == 'true' && inputs.use-sticky-disk != 'true' && inputs.use-restore-keys == 'true'
uses: actions/cache@v4
if: inputs.use-actions-cache == 'true' && (inputs.use-sticky-disk != 'true' || github.event_name == 'pull_request') && inputs.use-restore-keys == 'true'
uses: actions/cache@v5
with:
path: ${{ steps.pnpm-store.outputs.path }}
key: ${{ runner.os }}-pnpm-store-${{ inputs.cache-key-suffix }}-${{ hashFiles('pnpm-lock.yaml') }}
Expand Down
Loading
Loading