Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
375 commits
Select commit Hold shift + click to select a range
889480c
ci(formal): include latest reliability/conformance model targets
vignesh07 Feb 1, 2026
f37b79c
ci(formal): add routing-trirule + proxy-header-spoof targets
vignesh07 Feb 2, 2026
e74235f
ci(formal): compute drift for generated/ before model checking
vignesh07 Feb 2, 2026
521b121
fix: treat '*' tool allowlist as valid
steipete Feb 2, 2026
4e4ed2e
fix(security): cap Slack media downloads and validate Slack file URLs…
davidiach Feb 2, 2026
85cd55e
chore: bump to 2026.2.1
steipete Feb 2, 2026
9ef24fd
fix: flush block streaming on paragraph boundaries for chunkMode=newl…
tyler6204 Feb 2, 2026
34dd732
fix: restore lint/build gates
steipete Feb 2, 2026
4682c2e
docs: add ClawHub registry overview
steipete Feb 2, 2026
d5f6cab
docs: merge 2026.2.2 changelog into 2026.2.1
steipete Feb 2, 2026
8d2f98f
Fix subagent announce failover race (always emit lifecycle end + trea…
tyler6204 Feb 2, 2026
be9a2fb
docs: clarify docker power-user setup
steipete Feb 2, 2026
d03eca8
fix: harden plugin and hook install paths
steipete Feb 2, 2026
f6d98a9
docs: add changelog entry for plugin install hardening
steipete Feb 2, 2026
41cc5bc
fix: gate Teams media auth retries
steipete Feb 2, 2026
b8174de
fix: resolve system prompt overrides
steipete Feb 2, 2026
284d242
fix: align tool execute signature
steipete Feb 2, 2026
2d317ce
fix: align tool execute parameter order
steipete Feb 2, 2026
385e66c
Docs: expand ClawHub overview
steipete Feb 2, 2026
9ae1b73
fix: align tool definition adapter
steipete Feb 2, 2026
bcb0ed0
fix: normalize tool execute args
steipete Feb 2, 2026
8b64705
docs: fold 2026.2.2 into 2026.2.1
steipete Feb 2, 2026
845d97b
fix: handle legacy tool execute signatures
steipete Feb 2, 2026
bf08b48
fix: satisfy tool adapter lint
steipete Feb 2, 2026
ed4529e
docs: update 2026.2.1 changelog
steipete Feb 2, 2026
d842b28
docs: update appcast for 2026.2.1
steipete Feb 2, 2026
81c68f5
fix: guard remote media fetches with SSRF checks
steipete Feb 2, 2026
1b3f987
style: format fetch guard signatures
steipete Feb 2, 2026
1a05ee9
fix(docker): add gateway subcommand and cloud-compatible flags
kaizen403 Feb 1, 2026
bb3d734
fix(docker): remove --bind lan from default CMD to work out of the box
kaizen403 Feb 1, 2026
d134a8c
docs: note docker allow-unconfigured behavior
obviyus Feb 2, 2026
6630769
fix: start gateway in docker CMD (#6635) (thanks @kaizen403)
obviyus Feb 2, 2026
39c6822
test: cover SSRF blocking for attachment URLs
steipete Feb 2, 2026
dfef943
fix: polish docker setup flow
steipete Feb 2, 2026
6b0d6e2
chore: We have a sleep at home. The sleep at home:
cpojer Feb 2, 2026
57d008a
fix(update): harden global updates
steipete Feb 2, 2026
c429ccb
chore: fix broken test.
cpojer Feb 2, 2026
9bd64c8
fix: expand SSRF guard coverage
steipete Feb 2, 2026
f9fae2c
fix: stabilize docker e2e flows
steipete Feb 2, 2026
99b4f2a
fix(telegram): handle Grammy HttpError network failures (#3815) (#7195)
christianklotz Feb 2, 2026
da9f28d
CI: label maintainer issues
thewilloftheshadow Feb 2, 2026
e709847
Docs i18n: harden doc-mode pipeline
joshp123 Feb 1, 2026
149dc7c
Docs: add zh-CN translations
joshp123 Feb 1, 2026
e9d117d
Docs: fix zh-CN template time wording
joshp123 Feb 2, 2026
4023b76
docs: add changelog for zh-CN translations (#6619) (thanks @joshp123)
clawdinator[bot] Feb 2, 2026
b4cce3a
Docs: fix zh-CN ClawHub link
joshp123 Feb 2, 2026
673583a
Docs: use explicit ClawHub markdown link
joshp123 Feb 2, 2026
2b1f68c
Docs i18n: tune zh-CN prompt + glossary
joshp123 Feb 2, 2026
5676a6b
Docs: normalize zh-CN terminology + tone
joshp123 Feb 2, 2026
991ed3a
Tests: stub SSRF DNS pinning (#6619) (thanks @joshp123)
joshp123 Feb 2, 2026
e18f43d
fix(webchat): respect user scroll position during streaming and refresh
Feb 2, 2026
822388f
fix: address review feedback — retryDelay uses effectiveForce, defaul…
Feb 2, 2026
e0aa845
Docs: expand zh-Hans nav and fix assets
joshp123 Feb 2, 2026
7cee8c2
Docs: expand zh-Hans nav (#7242) (thanks @joshp123)
joshp123 Feb 2, 2026
2af977f
fix(ui): add core state and logic for scroll control
shakkernerd Feb 2, 2026
13db048
feat(ui): add new messages indicator button
shakkernerd Feb 2, 2026
1b34446
docs: update changelog for PR #7226
shakkernerd Feb 2, 2026
777756e
fix(webchat): respect user scroll position during streaming and refre…
shakkernerd Feb 2, 2026
3711143
chore: fix formatting and CI
shakkernerd Feb 2, 2026
7b0a0f3
iOS: wire node services and tests
Jan 31, 2026
78f7e51
iOS: stabilize talk mode tests
Jan 31, 2026
84e1158
Gateway: fix node invoke receive loop
Jan 31, 2026
a438260
Gateway: wait for snapshot before connect
Jan 31, 2026
d9cadf9
Agents: add nodes invoke action
Jan 31, 2026
761188c
iOS: fix node notify and identity
Jan 31, 2026
f72ac60
iOS: streamline notify timeouts
Jan 31, 2026
a884955
iOS: add write commands for contacts/calendar/reminders
Jan 31, 2026
9f101d3
iOS: add push-to-talk node commands
Jan 31, 2026
17b1897
iOS: pause voice wake during PTT
Jan 31, 2026
1a48bce
iOS: add PTT once/cancel
Feb 1, 2026
b7aac92
Gateway: add PTT chat + nodes CLI
Feb 1, 2026
532b965
iOS: wire node commands and incremental TTS
Feb 1, 2026
ff61145
iOS: update onboarding and gateway UI
mbelinky Feb 2, 2026
37eaca7
Core: update shared gateway models
mbelinky Feb 2, 2026
6cd3bc3
iOS: improve gateway auto-connect and voice permissions
mbelinky Feb 2, 2026
91e445c
Docs: add zh-CN landing notice + AI image
joshp123 Feb 2, 2026
ea9eed1
Docs: add zh-CN landing note (#7303) (thanks @joshp123)
joshp123 Feb 2, 2026
c83bdb7
Docs: expand zh-CN landing note
joshp123 Feb 2, 2026
4ab814f
Revert "iOS: wire node services and tests"
mbelinky Feb 2, 2026
7113dc2
Revert "Core: update shared gateway models"
mbelinky Feb 2, 2026
d3bb322
fix: resolve check errors in nodes-tool and commands-ptt
shakkernerd Feb 2, 2026
64849e8
feat(config): default thinking for sessions_spawn subagents (#7372)
tyler6204 Feb 2, 2026
a63ec41
fix: validate AbortSignal instances before calling AbortSignal.any()
Elarwei001 Feb 2, 2026
88e29c7
refactor: use structural typing instead of instanceof for AbortSignal…
Elarwei001 Feb 2, 2026
5fb8f77
fix: validate AbortSignal instances before calling AbortSignal.any() …
shakkernerd Feb 2, 2026
966228a
fix(tools): ensure file_path alias passes validation in read/write to…
bqcfjwhz85-arch Feb 2, 2026
f49297e
fix: skip audio files from text extraction to prevent binary processi…
AlexZhangji Feb 2, 2026
c6b4de5
fix(telegram): recover from grammY "timed out" long-poll errors (#7239)
Feb 2, 2026
561a10c
fix(telegram): recover from grammY long-poll timeouts (#7466) (thanks…
shakkernerd Feb 2, 2026
0eae9f4
Docs: fix compatibility shim note
Takhoffman Feb 2, 2026
0da6de6
Agent: repair malformed tool calls and session files
justinhuangcode Feb 2, 2026
31face5
Changelog: note tool call repair
justinhuangcode Feb 2, 2026
67f90da
Agents: fix lint in tool-call sanitizers
justinhuangcode Feb 2, 2026
e6fdac7
Agents: harden session file repair
shakkernerd Feb 2, 2026
befa421
Agents: flush pending tool results on drop
shakkernerd Feb 2, 2026
1185079
Docs: simplify transcript hygiene scope
shakkernerd Feb 2, 2026
cfd6b21
fix: repair malformed tool calls and session transcripts (#7473) (tha…
shakkernerd Feb 2, 2026
9e3ea26
chore: Update deps.
cpojer Feb 3, 2026
fff59da
fix(slack): fail closed on slash command channel type lookup
steipete Feb 3, 2026
d1ecb46
fix: harden exec allowlist parsing
steipete Feb 3, 2026
fe81b1d
fix(gateway): require shared auth before device bypass
steipete Feb 3, 2026
96ad19a
style(ui): format resizable divider
steipete Feb 3, 2026
e77988f
chore: Fix CI.
cpojer Feb 3, 2026
c8af8e9
Docs: clarify whats new FAQ heading (#7394)
aldoeliacim Feb 3, 2026
2a68bcb
feat(ui): add Agents dashboard
gumadeiras Feb 3, 2026
a6afcb4
Security: new openclaw-system-admin skill + bootstrap audit
Takhoffman Feb 3, 2026
cdec53b
Security: rename openclaw-system-admin skill to healthcheck
Takhoffman Feb 3, 2026
1523ef2
Security: remove openclaw-system-admin skill path
Takhoffman Feb 3, 2026
e2c0384
Security: refine healthcheck workflow
Takhoffman Feb 3, 2026
578bde1
Security: healthcheck skill (#7641) (thanks @Takhoffman)
Takhoffman Feb 3, 2026
ac2b71f
chore: fix CI
gumadeiras Feb 3, 2026
7dfa99a
chore: fix formatting
gumadeiras Feb 3, 2026
83715ec
Security: tune bootstrap healthcheck prompt + healthcheck wording
Takhoffman Feb 3, 2026
d5593d6
chore: fix formatting
Takhoffman Feb 3, 2026
157d6d2
CLI: restore terminal state on exit
shakkernerd Feb 3, 2026
58d5b39
Onboarding: keep TUI flow exclusive
shakkernerd Feb 3, 2026
1b31e2f
Onboarding/TUI: prevent prompt overlap and auto-open
shakkernerd Feb 3, 2026
e9f182d
fix: error handling in restore failure reporting
shakkernerd Feb 3, 2026
5d3af3b
feat (memory): Implement new (opt-in) QMD memory backend
vignesh07 Jan 28, 2026
2c30ba4
Make memory more resilient to failure
vignesh07 Jan 28, 2026
3a57106
Add more tests; make fall back more resilient and visible
vignesh07 Jan 28, 2026
e121846
Fix build errors
vignesh07 Jan 28, 2026
9be3c27
fix(qmd): use XDG dirs for qmd home; drop ollama docs
vignesh07 Jan 28, 2026
dd8373a
fix(memory-qmd): write XDG index.yml + legacy compat
vignesh07 Jan 28, 2026
564fe6f
fix(memory-qmd): create collections via qmd CLI (no YAML)
vignesh07 Jan 28, 2026
20578da
Add how to trigger model downloads for qmd in documentation
vignesh07 Jan 28, 2026
9df78b3
fix(memory/qmd): throttle embed + citations auto + restore --force
vignesh07 Jan 28, 2026
5d8c665
Tests: use OPENCLAW_STATE_DIR in qmd manager
bjesuiter Feb 2, 2026
11a968f
Docs: align QMD state dir with OpenClaw
bjesuiter Feb 2, 2026
3e82cbd
Memory: parse quoted qmd command
bjesuiter Feb 2, 2026
b7f4755
Memory: fix QMD scope channel parsing
bjesuiter Feb 2, 2026
c248da0
Memory: harden QMD memory_get path checks
bjesuiter Feb 2, 2026
1861e76
Memory: clamp QMD citations to injected budget
bjesuiter Feb 2, 2026
3d1c3b7
Tests: cover QMD scope, reads, and citation clamp
bjesuiter Feb 2, 2026
465536e
QMD: use OpenClaw config types
bjesuiter Feb 2, 2026
23cfcd6
Fix build regressions after merge
bjesuiter Feb 2, 2026
e332a71
Lint: add braces for single-line ifs
bjesuiter Feb 2, 2026
d0b98c7
fix: make QMD cache key deterministic
vignesh07 Feb 3, 2026
edd6289
fix: derive citations chat type via session parser
vignesh07 Feb 3, 2026
9bef525
chore: apply formatter
vignesh07 Feb 3, 2026
f722147
chore: restore OpenClaw branding
vignesh07 Feb 3, 2026
30098b0
chore: fix lint warnings
vignesh07 Feb 3, 2026
5915d47
chore: oxfmt
vignesh07 Feb 3, 2026
7d5ca11
fix: restore session_status and CLI examples
vignesh07 Feb 3, 2026
600c46b
chore: oxfmt
vignesh07 Feb 3, 2026
afbb1af
fix: restore safety + session_status hints
vignesh07 Feb 3, 2026
4322ca6
chore: oxfmt
vignesh07 Feb 3, 2026
1ee57cf
fix: changelog entry for QMD memory (#3160) (thanks @vignesh07)
vignesh07 Feb 3, 2026
b37626c
docs: finish renaming memory state dir references
vignesh07 Feb 3, 2026
80d8fe7
CLI: cache shell completion scripts
shakkernerd Feb 3, 2026
9950440
Install: cache completion scripts on install/update
shakkernerd Feb 3, 2026
981de05
Onboarding: drop completion prompt
shakkernerd Feb 3, 2026
3014a91
chore: update changelog for completion caching
shakkernerd Feb 3, 2026
e3b85b9
fix: shell completion and drop onboarding prompt
shakkernerd Feb 3, 2026
a03d852
chore: Migrate to tsdown, speed up JS bundling by ~10x (thanks @hyf0).
cpojer Feb 2, 2026
a889309
fix: CI: We no longer need to test the tsc build with Bun, we are alw…
cpojer Feb 3, 2026
4250034
fix: Remove `tsconfig.oxlint.json` AGAIN.
cpojer Feb 3, 2026
6fb2d3d
feat: remove slop.
cpojer Feb 3, 2026
6b83d82
chore: clean up git hooks and actually install them again.
cpojer Feb 3, 2026
be4f7ef
fix: Fix Mac app build step.
cpojer Feb 3, 2026
27677dd
chore: Fix all TypeScript errors in `ui`.
cpojer Feb 3, 2026
6e09c11
chore: Switch to `NodeNext` for `module`/`moduleResolution` in `ui`.
cpojer Feb 3, 2026
1f2f79a
chore: Merge tsconfigs, typecheck `ui` as part of `pnpm tsgo` locally…
cpojer Feb 3, 2026
fc40ba8
Skills: refine healthcheck guidance
Takhoffman Feb 3, 2026
f8dfd03
fix(voice-call): harden inbound policy
steipete Feb 3, 2026
8f3bfbd
fix(matrix): harden allowlists
steipete Feb 3, 2026
a7f4a53
fix: harden Windows exec allowlist
steipete Feb 3, 2026
f57e709
docs: Update information architecture for OpenClaw docs (#7622)
ethanpalm Feb 3, 2026
9d2066b
fix: restore OpenClaw docs/source links in system prompt
steipete Feb 3, 2026
1c4db91
chore: prepare 2026.2.2 release
steipete Feb 3, 2026
5935c4d
fix(ui): fix web UI after tsdown migration and typing changes
gumadeiras Feb 3, 2026
f60eae8
fix(skills): warn when bundled dir missing
gumadeiras Feb 3, 2026
ddccfd3
fix(ui): refresh agent files after external edits
gumadeiras Feb 3, 2026
f52ca0a
fix(ui): note agent file refresh in changelog
gumadeiras Feb 3, 2026
9f03791
Docs: refresh zh-CN translations + i18n guidance
joshp123 Feb 3, 2026
a3ec2d0
Docs: update zh-CN translations and pipeline
joshp123 Feb 3, 2026
4027b35
Docs(zh-CN): add AGENTS translation workflow
joshp123 Feb 3, 2026
2483f26
Channels: add Feishu/Lark support
joshp123 Feb 3, 2026
0223416
Channels: finish Feishu/Lark integration
joshp123 Feb 3, 2026
66d8117
fix: harden control ui framing + ws origin
steipete Feb 4, 2026
efe2a46
fix(approvals): gate /approve by gateway scopes
mitsuhiko Feb 2, 2026
d41acf9
test: add /approve gateway scope coverage (#1) (thanks @mitsuhiko)
steipete Feb 3, 2026
4df4435
test: reset /approve mock per test (#1) (thanks @mitsuhiko)
steipete Feb 4, 2026
539a15e
chore: prep 2026.2.2 docs/release checks
steipete Feb 4, 2026
95cd221
chore: update appcast for 2026.2.2
steipete Feb 4, 2026
f1cbe7d
chore: add mac dSYM zip to release artifacts
steipete Feb 4, 2026
a9bb96a
fix: use build-info for version fallback
gumadeiras Feb 4, 2026
fd8f884
Docs: guard zh-CN i18n workflow
joshp123 Feb 4, 2026
df55eea
Merge branch 'main' of https://github.com/openclaw/openclaw
gumadeiras Feb 4, 2026
e59eb81
chore: bump version to 2026.2.2-1
steipete Feb 4, 2026
e895e85
fix: improve build-info resolution for commit/version
steipete Feb 4, 2026
61a7fc5
Docs: drop healthcheck from bootstrap
Takhoffman Feb 4, 2026
bbe9cb3
fix(update): honor update.channel for update.run
steipete Feb 4, 2026
6b4b604
fix: enforce Nextcloud Talk allowlist by user id
steipete Feb 4, 2026
d3ba57b
feat: add configurable web_fetch maxChars cap
steipete Feb 4, 2026
41d2993
fix(matrix): require unique allowlist matches in wizard
steipete Feb 4, 2026
9c5941b
fix: add legacy daemon-cli shim for updates
steipete Feb 4, 2026
9c4eab6
iMessage: promote BlueBubbles and refresh docs/skills (#8415)
tyler6204 Feb 4, 2026
3e6c623
refactor: remove unnecessary blank line in policy test file
tyler6204 Feb 4, 2026
e4b084c
chore: bump version to 2026.2.3
steipete Feb 4, 2026
efb4a34
feat: add new messages indicator style for chat interface
tyler6204 Feb 4, 2026
16349b6
Telegram: add inline button model selection for /models and /model co…
gildo Feb 3, 2026
202c554
Telegram: fix model button review issues
gildo Feb 3, 2026
41a4f12
fix: honor telegram model overrides in buttons (#8193) (thanks @gildo)
obviyus Feb 4, 2026
b64c1a5
chore: update changelog for #8193 (thanks @gildo)
obviyus Feb 4, 2026
5af322f
feat(discord): add set-presence action for bot activity and status
BinaryMuse Feb 3, 2026
f04e84f
Address PR feedback
BinaryMuse Feb 3, 2026
d2ff28d
Make openclaw consistent in this file (#8533)
stephenchen2025 Feb 4, 2026
9f16de2
style: update chat new-messages button
steipete Feb 4, 2026
1c6b25d
feat: add support for Moonshot API key for China endpoint
wytheme Feb 2, 2026
4a5d368
fix: keep Moonshot CN base URL in onboarding (#7180) (thanks @waynelwz)
steipete Feb 4, 2026
089d034
docs(skills): split tmux send-keys for TUI (#7737)
Wangnov Feb 4, 2026
efc9d0a
docs: note tmux send-keys TUI guidance (#7737) (thanks @Wangnov)
steipete Feb 4, 2026
7b3d23b
fix(control-ui): resolve header logo when gateway.controlUi.basePath …
Yeom-JinHo Feb 4, 2026
44d1aa3
docs: add changelog for #7178 (thanks @Yeom-JinHo)
steipete Feb 4, 2026
6fdb136
docs: document secure DM mode preset (#7872)
ichbinlucaskim Feb 4, 2026
35eb40a
fix(security): separate untrusted channel metadata from system prompt…
steipete Feb 4, 2026
5292367
docs: update Feishu plugin docs
steipete Feb 4, 2026
fa4b28d
feat: Add Docs Chat Widget with RAG-powered Q&A (#7908)
BunsDev Feb 4, 2026
a749db9
fix: harden voice-call webhook verification
steipete Feb 4, 2026
3a03e38
fix(cron): fix timeout, add timestamp validation, enable file sync
tyler6204 Feb 3, 2026
511c656
feat(cron): introduce delivery modes for isolated jobs
tyler6204 Feb 3, 2026
0bb0dfc
feat(cron): default isolated jobs to announce delivery and enhance sc…
tyler6204 Feb 3, 2026
ab9f06f
feat(cron): enhance one-shot job behavior and CLI options
tyler6204 Feb 3, 2026
3f82dae
feat(cron): enhance delivery modes and job configuration
tyler6204 Feb 4, 2026
1409943
feat(cron): set default enabled state for cron jobs
tyler6204 Feb 4, 2026
ef4949b
refactor(cron): update delivery instructions for isolated agent
tyler6204 Feb 4, 2026
64df61f
feat(cron): enhance delivery handling and testing for isolated jobs
tyler6204 Feb 4, 2026
246896d
refactor(cron): improve delivery configuration handling in CronJobEdi…
tyler6204 Feb 4, 2026
6fb8d88
feat(cron): enhance legacy delivery handling in job patches
tyler6204 Feb 4, 2026
f8d2534
fix(cron): fix test failures and regenerate protocol files
tyler6204 Feb 4, 2026
79d00e2
UI: handle future timestamps in formatAgo
tyler6204 Feb 4, 2026
c396877
Changelog: move cron entries to 2026.2.3
tyler6204 Feb 4, 2026
6341819
fix: cron announce delivery path (#8540) (thanks @tyler6204)
steipete Feb 4, 2026
da6de49
Telegram: use Grammy types directly, add typed Probe/Audit to plugin …
christianklotz Feb 4, 2026
57566c5
fix(telegram): include forward_from_chat metadata in forwarded messag…
Glucksberg Feb 3, 2026
b236129
fix: trim legacy signature fallback, type fromChatType as union
Glucksberg Feb 4, 2026
78fd194
fix: telegram forward metadata + cron delivery guard (#8392) (thanks …
obviyus Feb 4, 2026
78f8a29
fix(imessage): unify timeout configuration with configurable probeTim…
yudshj Feb 4, 2026
f633a8c
fix: address review comments
yudshj Feb 4, 2026
18652d1
fix(imessage): detect self-chat echoes to prevent infinite loops (#8680)
Iranb Feb 4, 2026
19ecdce
fix: align proxy fetch typing
steipete Feb 4, 2026
5b0851e
feat: add cloudflare ai gateway provider
steipete Feb 4, 2026
6f200ea
fix: force reload cron store
steipete Feb 4, 2026
2196456
Revert "feat: Add Docs Chat Widget with RAG-powered Q&A (#7908)" (#8834)
sebslight Feb 4, 2026
9822985
fix(web ui): agent model selection
Takhoffman Feb 4, 2026
718dba8
Docs: landing page revamp (#8885)
sebslight Feb 4, 2026
01ce144
fix(app-render): handle optional model in renderApp function
shakkernerd Feb 4, 2026
eab0a07
chore: replace landpr prompt with end-to-end landing workflow (#8916)
christianklotz Feb 4, 2026
f2fafd7
Merge branch 'main' into n0valis-patch-1
n0valis Feb 4, 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
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@
- "src/discord/**"
- "extensions/discord/**"
- "docs/channels/discord.md"
"channel: feishu":
- changed-files:
- any-glob-to-any-file:
- "src/feishu/**"
- "extensions/feishu/**"
- "docs/channels/feishu.md"
"channel: googlechat":
- changed-files:
- any-glob-to-any-file:
Expand Down
44 changes: 40 additions & 4 deletions .github/workflows/auto-response.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Auto response

on:
issues:
types: [labeled]
types: [opened, edited, labeled]
pull_request_target:
types: [labeled]

Expand Down Expand Up @@ -31,22 +31,49 @@ jobs:
label: "r: skill",
close: true,
message:
"Thanks for the contribution! New skills should be published to Clawdhub for everyone to use. We’re keeping the core lean on skills, so I’m closing this out.",
"Thanks for the contribution! New skills should be published to [Clawhub](https://clawhub.ai) for everyone to use. We’re keeping the core lean on skills, so I’m closing this out.",
},
{
label: "r: support",
close: true,
message:
"Please use our support server https://molt.bot/discord and ask in #help or #users-helping-users to resolve this, or follow the stuck FAQ at https://docs.molt.bot/help/faq#im-stuck-whats-the-fastest-way-to-get-unstuck.",
"Please use [our support server](https://discord.gg/clawd) and ask in #help or #users-helping-users to resolve this, or follow the stuck FAQ at https://docs.openclaw.ai/help/faq#im-stuck-whats-the-fastest-way-to-get-unstuck.",
},
{
label: "r: third-party-extension",
close: true,
message:
"This would be better made as a third-party extension with our SDK that you maintain yourself. Docs: https://docs.molt.bot/plugin.",
"This would be better made as a third-party extension with our SDK that you maintain yourself. Docs: https://docs.openclaw.ai/plugin.",
},
{
label: "r: moltbook",
close: true,
lock: true,
lockReason: "off-topic",
message:
"OpenClaw is not affiliated with Moltbook, and issues related to Moltbook should not be submitted here.",
},
];

const issue = context.payload.issue;
if (issue) {
const title = issue.title ?? "";
const body = issue.body ?? "";
const haystack = `${title}\n${body}`.toLowerCase();
const hasLabel = (issue.labels ?? []).some((label) =>
typeof label === "string" ? label === "r: moltbook" : label?.name === "r: moltbook",
);
if (haystack.includes("moltbook") && !hasLabel) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
labels: ["r: moltbook"],
});
return;
}
}

const labelName = context.payload.label?.name;
if (!labelName) {
return;
Expand Down Expand Up @@ -77,3 +104,12 @@ jobs:
state: "closed",
});
}

if (rule.lock) {
await github.rest.issues.lock({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
lock_reason: rule.lockReason ?? "resolved",
});
}
3 changes: 0 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,6 @@ jobs:
- runtime: bun
task: test
command: pnpm canvas:a2ui:bundle && bunx vitest run
- runtime: bun
task: build
command: bunx tsc -p tsconfig.json --noEmit false
steps:
- name: Checkout
uses: actions/checkout@v4
Expand Down
134 changes: 134 additions & 0 deletions .github/workflows/formal-conformance.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
name: Formal models (informational conformance)

on:
pull_request:

jobs:
formal_conformance:
runs-on: ubuntu-latest
timeout-minutes: 20
permissions:
contents: read
pull-requests: write

steps:
- name: Checkout openclaw (PR)
uses: actions/checkout@v4
with:
path: openclaw

- name: Checkout formal models
uses: actions/checkout@v4
with:
repository: vignesh07/clawdbot-formal-models
ref: main
path: clawdbot-formal-models

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: "22"

- name: Regenerate extracted constants from openclaw
run: |
set -euo pipefail
cd clawdbot-formal-models
export OPENCLAW_REPO_DIR="${GITHUB_WORKSPACE}/openclaw"
node scripts/extract-tool-groups.mjs
node scripts/check-tool-group-alias.mjs

# Drift is about extracted artifacts only; compute it before model checking
# to avoid any incidental file touches affecting the result.
- name: Compute drift (generated/*)
id: drift
run: |
set -euo pipefail
cd clawdbot-formal-models

if git diff --quiet -- generated; then
echo "drift=false" >> "$GITHUB_OUTPUT"
exit 0
fi

echo "drift=true" >> "$GITHUB_OUTPUT"
git diff -- generated > "${GITHUB_WORKSPACE}/formal-models-drift.diff"

- name: Model check (green suite)
run: |
set -euo pipefail
cd clawdbot-formal-models
make \
precedence groups elevated nodes-policy \
attacker approvals approvals-token nodes-pipeline \
gateway-exposure gateway-exposure-v2 gateway-exposure-v2-protected \
gateway-auth-conformance gateway-auth-tailscale gateway-auth-proxy \
pairing pairing-cap pairing-idempotency pairing-refresh pairing-refresh-race \
ingress-gating ingress-idempotency ingress-dedupe-fallback ingress-trace ingress-trace2 \
routing-isolation routing-precedence routing-identitylinks routing-identity-transitive routing-identity-symmetry routing-identity-channel-override \
routing-thread-parent discord-pluralkit \
ingress-retry session-key-stability session-explosion-bound config-normalization \
queue-drain delivery-route-stability delivery-pipeline retry-termination retry-eventual-success \
no-cross-stream multi-event-eventual-emission \
dedupe-collision-fallback crash-restart-dedupe two-worker-dedupe openclaw-session-key-conformance \
routing-thread-parent-channel-override routing-trirule gateway-auth-proxy-header-spoof \
group-alias-check

- name: Model check (negative suite, expected violations)
continue-on-error: true
run: |
set -euo pipefail
cd clawdbot-formal-models
make -k \
precedence-negative groups-negative elevated-negative nodes-policy-negative \
attacker-negative attacker-nodes-negative attacker-nodes-allowlist-negative attacker-nodes-allowlist-negative \
approvals-negative approvals-token-negative nodes-pipeline-negative \
gateway-exposure-negative gateway-exposure-v2-negative gateway-exposure-v2-protected-negative \
gateway-exposure-v2-unsafe-custom gateway-exposure-v2-unsafe-tailnet gateway-exposure-v2-unsafe-auto \
gateway-auth-conformance-negative gateway-auth-tailscale-negative gateway-auth-proxy-negative \
pairing-negative pairing-cap-negative pairing-idempotency-negative pairing-refresh-negative pairing-refresh-race-negative \
ingress-gating-negative ingress-idempotency-negative ingress-dedupe-fallback-negative ingress-trace-negative ingress-trace2-negative \
routing-isolation-negative routing-precedence-negative routing-identitylinks-negative routing-identity-transitive-negative routing-identity-symmetry-negative routing-identity-channel-override-negative \
routing-thread-parent-negative discord-pluralkit-negative \
ingress-retry-negative session-key-stability-negative config-normalization-negative \
queue-drain delivery-route-stability-negative delivery-pipeline-negative retry-termination-negative retry-eventual-success-negative \
no-cross-stream-negative multi-event-eventual-emission-negative \
dedupe-collision-fallback-negative crash-restart-dedupe-negative two-worker-dedupe-negative openclaw-session-key-conformance-negative \
routing-thread-parent-channel-override-negative routing-trirule-negative gateway-auth-proxy-header-spoof-negative

- name: Upload drift diff artifact
if: steps.drift.outputs.drift == 'true'
uses: actions/upload-artifact@v4
with:
name: formal-models-conformance-drift
path: formal-models-drift.diff

- name: Comment on PR (informational)
if: steps.drift.outputs.drift == 'true'
uses: actions/github-script@v7
with:
script: |
const body = [
'⚠️ **Formal models conformance drift detected**',
'',
'The formal models extracted constants (`generated/*`) do not match this openclaw PR.',
'',
'This check is **informational** (not blocking merges yet).',
'See the `formal-models-conformance-drift` artifact for the diff.',
'',
'If this change is intentional, follow up by updating the formal models repo or regenerating the extracted artifacts there.',
].join('\n');

await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
body,
});

- name: Summary
run: |
if [ "${{ steps.drift.outputs.drift }}" = "true" ]; then
echo "Formal conformance drift detected (informational)."
else
echo "Formal conformance: no drift."
fi
55 changes: 55 additions & 0 deletions .github/workflows/labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ name: Labeler
on:
pull_request_target:
types: [opened, synchronize, reopened]
issues:
types: [opened]

permissions: {}

Expand All @@ -23,3 +25,56 @@ jobs:
configuration-path: .github/labeler.yml
repo-token: ${{ steps.app-token.outputs.token }}
sync-labels: true
- name: Apply maintainer label for org members
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
with:
github-token: ${{ steps.app-token.outputs.token }}
script: |
const association = context.payload.pull_request?.author_association;
if (!association) {
return;
}
if (![
"MEMBER",
"OWNER",
].includes(association)) {
return;
}

await github.rest.issues.addLabels({
...context.repo,
issue_number: context.payload.pull_request.number,
labels: ["maintainer"],
});

label-issues:
permissions:
issues: write
runs-on: ubuntu-latest
steps:
- uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1
id: app-token
with:
app-id: "2729701"
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
- name: Apply maintainer label for org members
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
with:
github-token: ${{ steps.app-token.outputs.token }}
script: |
const association = context.payload.issue?.author_association;
if (!association) {
return;
}
if (![
"MEMBER",
"OWNER",
].includes(association)) {
return;
}

await github.rest.issues.addLabels({
...context.repo,
issue_number: context.payload.issue.number,
labels: ["maintainer"],
});
3 changes: 3 additions & 0 deletions .oxfmtrc.jsonc
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"experimentalSortImports": {
"newlinesBetween": false,
},
"experimentalSortPackageJson": {
"sortScripts": true,
},
Expand Down
5 changes: 2 additions & 3 deletions .oxlintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
"oxc/no-accumulating-spread": "off",
"oxc/no-async-endpoint-handlers": "off",
"oxc/no-map-spread": "off",
"typescript/no-explicit-any": "error",
"typescript/no-extraneous-class": "off",
"typescript/no-unnecessary-template-expression": "off",
"typescript/no-unsafe-type-assertion": "off",
"unicorn/consistent-function-scoping": "off",
"unicorn/require-post-message-target-origin": "off"
Expand All @@ -30,7 +30,6 @@
"skills/",
"src/canvas-host/a2ui/a2ui.bundle.js",
"Swabble/",
"vendor/",
"ui/"
"vendor/"
]
}
70 changes: 70 additions & 0 deletions .pi/prompts/landpr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
---
description: Land a PR (merge with proper workflow)
---

Input

- PR: $1 <number|url>
- If missing: use the most recent PR mentioned in the conversation.
- If ambiguous: ask.

Do (end-to-end)
Goal: PR must end in GitHub state = MERGED (never CLOSED). Use `gh pr merge` with `--rebase` or `--squash`.

1. Repo clean: `git status`.
2. Identify PR meta (author + head branch):

```sh
gh pr view <PR> --json number,title,author,headRefName,baseRefName,headRepository --jq '{number,title,author:.author.login,head:.headRefName,base:.baseRefName,headRepo:.headRepository.nameWithOwner}'
contrib=$(gh pr view <PR> --json author --jq .author.login)
head=$(gh pr view <PR> --json headRefName --jq .headRefName)
head_repo_url=$(gh pr view <PR> --json headRepository --jq .headRepository.url)
```

3. Fast-forward base:
- `git checkout main`
- `git pull --ff-only`
4. Create temp base branch from main:
- `git checkout -b temp/landpr-<ts-or-pr>`
5. Check out PR branch locally:
- `gh pr checkout <PR>`
6. Rebase PR branch onto temp base:
- `git rebase temp/landpr-<ts-or-pr>`
- Fix conflicts; keep history tidy.
7. Fix + tests + changelog:
- Implement fixes + add/adjust tests
- Update `CHANGELOG.md` and mention `#<PR>` + `@$contrib`
8. Decide merge strategy:
- Rebase if we want to preserve commit history
- Squash if we want a single clean commit
- If unclear, ask
9. Full gate (BEFORE commit):
- `pnpm lint && pnpm build && pnpm test`
10. Commit via committer (include # + contributor in commit message):
- `committer "fix: <summary> (#<PR>) (thanks @$contrib)" CHANGELOG.md <changed files>`
- `land_sha=$(git rev-parse HEAD)`
11. Push updated PR branch (rebase => usually needs force):

```sh
git remote add prhead "$head_repo_url.git" 2>/dev/null || git remote set-url prhead "$head_repo_url.git"
git push --force-with-lease prhead HEAD:$head
```

12. Merge PR (must show MERGED on GitHub):
- Rebase: `gh pr merge <PR> --rebase`
- Squash: `gh pr merge <PR> --squash`
- Never `gh pr close` (closing is wrong)
13. Sync main:
- `git checkout main`
- `git pull --ff-only`
14. Comment on PR with what we did + SHAs + thanks:

```sh
merge_sha=$(gh pr view <PR> --json mergeCommit --jq '.mergeCommit.oid')
gh pr comment <PR> --body "Landed via temp rebase onto main.\n\n- Gate: pnpm lint && pnpm build && pnpm test\n- Land commit: $land_sha\n- Merge commit: $merge_sha\n\nThanks @$contrib!"
```

15. Verify PR state == MERGED:
- `gh pr view <PR> --json state --jq .state`
16. Delete temp branch:
- `git branch -D temp/landpr-<ts-or-pr>`
Loading
Loading