Skip to content

Commit b35a9c6

Browse files
Merge branch 'main' into fix/windows-exec-gbk-textdecoder
2 parents 491189d + 008e4ca commit b35a9c6

3,520 files changed

Lines changed: 233213 additions & 41436 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/skills/openclaw-pr-maintainer/SKILL.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,21 @@ Use this skill for maintainer-facing GitHub workflow, not for ordinary code chan
3535
- If the claim is unsubstantiated or likely wrong, request evidence or changes instead of merging.
3636
- If the linked issue appears outdated or incorrect, correct triage first. Do not merge a speculative fix.
3737

38+
## Close low-signal manual PRs carefully
39+
40+
- Do not close for red CI alone. Require a clear low-signal category plus stale or failed validation.
41+
- Good manual-close categories:
42+
- blank or mostly untouched PR template with no concrete OpenClaw problem/fix
43+
- random docs-only churn such as root README translations, generic wording tweaks, or community-plugin discoverability docs that should go through ClawHub
44+
- test-only coverage without a linked bug, owner request, or behavior change
45+
- refactor-only cleanup, variable renames, formatting, or generated/baseline churn without maintainer request
46+
- third-party channel/provider/tool/skill/plugin work that belongs on ClawHub instead of core
47+
- risky ops/infra drive-bys such as new external CI services, release workflows, host upgrade scripts, Docker base migrations, or apt retry/fix-missing tweaks without owner request and green validation
48+
- dirty branches where a narrow stated change includes unrelated docs/generated/runtime/extension files
49+
- repeated bot-review spam or copied bot output without author-owned fixes
50+
- Keep or escalate plausible focused bug fixes, green PRs, active maintainer discussions, assigned work, recent author follow-up, and unique reproduction details.
51+
- For third-party capabilities, prefer the `r: third-party-extension` auto-response label when it applies; it points contributors to publish on ClawHub.
52+
3853
## Handle GitHub text safely
3954

4055
- For issue comments and PR comments, use literal multiline strings or `-F - <<'EOF'` for real newlines. Never embed `\n`.
@@ -68,6 +83,7 @@ gh search issues --repo openclaw/openclaw --match title,body --limit 50 \
6883
- Keep commit messages concise and action-oriented.
6984
- Group related changes; avoid bundling unrelated refactors.
7085
- Use `.github/pull_request_template.md` for PR submissions and `.github/ISSUE_TEMPLATE/` for issues.
86+
- Do not commit PR-only artifacts such as screenshots under `.github/pr-assets`; attach them to the PR/comment or use an external artifact store instead.
7187

7288
## Extra safety
7389

.agents/skills/openclaw-qa-testing/SKILL.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,79 @@ pnpm openclaw qa suite \
4949
5. If the user wants to watch the live UI, find the current `openclaw-qa` listen port and report `http://127.0.0.1:<port>`.
5050
6. If a scenario fails, fix the product or harness root cause, then rerun the full lane.
5151

52+
## OTEL smoke
53+
54+
For local QA-lab OpenTelemetry validation, use:
55+
56+
```bash
57+
pnpm qa:otel:smoke
58+
```
59+
60+
This starts a local OTLP/HTTP trace receiver, runs the `otel-trace-smoke`
61+
scenario through qa-channel, decodes the emitted protobuf spans, and verifies
62+
the exported trace names and privacy contract. It does not require Opik,
63+
Langfuse, or external collector credentials.
64+
65+
## QA credentials and 1Password
66+
67+
- Use `op` only inside `tmux` for QA secret lookup in this repo.
68+
- Quick auth check inside tmux:
69+
70+
```bash
71+
op account list
72+
```
73+
74+
- Direct Telegram npm live test secrets currently live in 1Password item:
75+
- vault: `OpenClaw`
76+
- item: `Telegram E2E`
77+
- That item is the first place to look for:
78+
- `OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN`
79+
- `OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`
80+
- `OPENCLAW_QA_PROVIDER_MODE`
81+
- `OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC`
82+
- Convex QA secrets currently live in 1Password items:
83+
- vault: `OpenClaw`
84+
- item: `OPENCLAW_QA_CONVEX_SITE_URL`
85+
- item: `OPENCLAW_QA_CONVEX_SECRET_MAINTAINER`
86+
- item: `OPENCLAW_QA_CONVEX_SECRET_CI`
87+
- Additional related notes/login items seen during QA credential work:
88+
- vault: `Private`
89+
- items: `OPENCLAW QA`, `Convex`, `Telegram`
90+
- If a required value is missing from those notes:
91+
- do not guess
92+
- ask the maintainer/operator for the current value or the current 1Password item name
93+
- for Telegram direct runs, `OPENCLAW_QA_TELEGRAM_GROUP_ID` may be stored separately from `Telegram E2E`
94+
- for Convex runs, the leased Telegram credential should provide the Telegram group id and bot tokens together; do not require a separate `OPENCLAW_QA_TELEGRAM_GROUP_ID`
95+
- for Convex runs, prefer `OpenClaw/OPENCLAW_QA_CONVEX_SITE_URL`; if that is stale or unclear, ask for the active pool URL before running
96+
- Prefer direct Telegram envs for the npm Telegram Docker lane when available:
97+
98+
```bash
99+
OPENCLAW_QA_TELEGRAM_GROUP_ID="..." \
100+
OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN="..." \
101+
OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN="..." \
102+
OPENCLAW_QA_PROVIDER_MODE="mock-openai" \
103+
OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC="openclaw@beta" \
104+
pnpm test:docker:npm-telegram-live
105+
```
106+
107+
- Prefer Convex mode when the goal is stable shared QA infra:
108+
- round-robin credential leasing
109+
- thinner wrapper for channel-specific setup
110+
- CLI/admin flows around the pooled credentials
111+
- Live npm Telegram Docker lane note:
112+
- `scripts/e2e/npm-telegram-live-runner.ts` reads `OPENCLAW_NPM_TELEGRAM_PROVIDER_MODE`
113+
- do not assume `OPENCLAW_QA_PROVIDER_MODE` is consumed by that wrapper
114+
- if a 1Password note only gives `OPENCLAW_QA_PROVIDER_MODE`, map it explicitly to `OPENCLAW_NPM_TELEGRAM_PROVIDER_MODE` before running the Docker lane
115+
- Verified live shape:
116+
- Convex mode can pass the real Docker lane without direct Telegram env vars
117+
- leased Telegram payload includes the group id coupled to the driver/SUT tokens
118+
- a real run of `pnpm test:docker:npm-telegram-live` passed with:
119+
- `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`
120+
- `OPENCLAW_QA_CREDENTIAL_ROLE=maintainer`
121+
- `OPENCLAW_QA_CONVEX_SITE_URL`
122+
- `OPENCLAW_QA_CONVEX_SECRET_MAINTAINER`
123+
- `OPENCLAW_NPM_TELEGRAM_PROVIDER_MODE=mock-openai`
124+
52125
## Character evals
53126

54127
Use `qa character-eval` for style/persona/vibe checks across multiple live models.

.agents/skills/openclaw-release-maintainer/SKILL.md

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ Use this skill for release and publish-time workflow. Keep ordinary development
9797

9898
## Build changelog-backed release notes
9999

100+
- Before release branching or tagging, rewrite the target `CHANGELOG.md`
101+
section from commit history, not just from existing notes: scan commits since
102+
the last reachable release tag, add missed user-facing changes, dedupe
103+
overlapping entries, and sort each section from most to least interesting for
104+
users.
100105
- Changelog entries should be user-facing, not internal release-process notes.
101106
- GitHub release and prerelease bodies must use the full matching
102107
`CHANGELOG.md` version section, not highlights or an excerpt. When creating
@@ -197,10 +202,16 @@ Before tagging or publishing, run:
197202
pnpm check:architecture
198203
pnpm build
199204
pnpm ui:build
205+
pnpm qa:otel:smoke
200206
pnpm release:check
201207
pnpm test:install:smoke
202208
```
203209

210+
- Use `pnpm qa:otel:smoke` when release validation needs telemetry coverage.
211+
It starts a local OTLP/HTTP trace receiver, runs QA-lab's
212+
`otel-trace-smoke`, and checks span names plus content/identifier redaction
213+
without external Opik or Langfuse credentials.
214+
204215
For a non-root smoke path:
205216

206217
```bash
@@ -279,8 +290,20 @@ node --import tsx scripts/openclaw-npm-postpublish-verify.ts <published-version>
279290
- `node --import tsx scripts/openclaw-npm-postpublish-verify.ts <beta-version>`
280291
- install/update smoke against the published beta channel
281292
- Docker install/update coverage that exercises the published beta package
293+
- published npm Telegram proof: dispatch Actions > `NPM Telegram Beta E2E`
294+
from `main` with `package_spec=openclaw@<beta-version>` and
295+
`provider_mode=mock-openai`, approve `npm-release`, and require success.
296+
This is the default button path for installed-package onboarding,
297+
Telegram setup, and real Telegram E2E against the published npm package.
298+
Use the local `pnpm test:docker:npm-telegram-live` lane with the matching
299+
`OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC` and Convex CI env only as a fallback
300+
or debugging path.
282301
- Parallels published beta install/update coverage with both OpenAI and
283302
Anthropic provider keys available
303+
- Parallels install/update proof must keep plugin installs enabled unless the
304+
operator explicitly scopes a harness-only isolation check; a lane that
305+
disables bundled plugin installs is not valid plugin/dependency release
306+
evidence.
284307
- targeted QA reruns only for areas touched by fixes after the full pre-npm
285308
roster, unless the operator requests the full QA roster again. If the fix
286309
touches live channel QA, credential plumbing, Matrix, Telegram, or the QA
@@ -329,10 +352,17 @@ node --import tsx scripts/openclaw-npm-postpublish-verify.ts <published-version>
329352
`openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.yml`
330353
workflow because `npm dist-tag` management needs `NPM_TOKEN`, while the
331354
public npm release workflow stays OIDC-only.
355+
- Prefer fixing the private workflow token path over any local 1Password
356+
fallback. The desired setup is a granular npm token stored as the private
357+
repo's `NPM_TOKEN` secret, scoped to the `openclaw` package with read/write
358+
and 2FA bypass for automation.
332359
- If the private dist-tag workflow cannot promote because `NPM_TOKEN` is absent
333360
or stale, use the local tmux + 1Password fallback:
334361
- Start or reuse a tmux session so interactive `npm login` and OTP prompts
335362
are observable and recoverable.
363+
- Hard rule: never run `op` directly in the main agent shell during release
364+
work. Any 1Password CLI use must happen inside that tmux session so prompts
365+
and alerts are contained and observable.
336366
- Use the 1Password item `op://Private/Npmjs` for npm credentials and OTP.
337367
Do not print passwords, tokens, or OTPs to the transcript; send them through
338368
tmux buffers, env vars scoped to the tmux command, or `expect` with
@@ -502,9 +532,11 @@ node --import tsx scripts/openclaw-npm-postpublish-verify.ts <published-version>
502532
23. Run the post-published beta verification roster. If any lane fails after
503533
the beta tag/package is pushed or published, fix, commit/push/pull,
504534
increment to the next beta tag, and restart at the full pre-npm beta test
505-
roster for the new beta. If a pre-npm lane fails before any tag/package
506-
leaves the machine, fix and rerun the same intended beta attempt. Repeat up
507-
to the operator's authorized beta-attempt limit, normally 4.
535+
roster for the new beta. The roster includes the manual Actions >
536+
`NPM Telegram Beta E2E` workflow against the exact published beta package.
537+
If a pre-npm lane fails before any tag/package leaves the machine, fix and
538+
rerun the same intended beta attempt. Repeat up to the operator's
539+
authorized beta-attempt limit, normally 4.
508540
24. Announce the beta/stable release on Discord best-effort using Peter's bot
509541
token from `.profile`.
510542
25. If the operator requested beta only, stop after beta verification and the

.dockerignore

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@
88

99
.bun-cache
1010
.bun
11+
.artifacts
12+
**/.artifacts
13+
.local
14+
**/.local
15+
.pi
16+
**/.pi
17+
__openclaw_vitest__
18+
**/__openclaw_vitest__
1119
.tmp
1220
**/.tmp
1321
.DS_Store
@@ -38,6 +46,9 @@ docs/.generated
3846
*.log
3947
tmp
4048
**/tmp
49+
dist-runtime
50+
**/dist-runtime
51+
openclaw-path-alias-*
4152

4253
# build artifacts
4354
dist

.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,5 @@ OPENCLAW_GATEWAY_TOKEN=
8282

8383
# ELEVENLABS_API_KEY=...
8484
# XI_API_KEY=... # alias for ElevenLabs
85+
# INWORLD_API_KEY=...
8586
# DEEPGRAM_API_KEY=...

.github/codeql/codeql-javascript-typescript.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ paths-ignore:
1212
- docs
1313
- "**/node_modules"
1414
- "**/coverage"
15+
- "**/*.generated.ts"
16+
- "**/*.bundle.js"
17+
- "**/*-runtime.js"
1518
- "**/*.test.ts"
1619
- "**/*.test.tsx"
1720
- "**/*.e2e.test.ts"

.github/labeler.yml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
- any-glob-to-any-file:
44
- "extensions/bluebubbles/**"
55
- "docs/channels/bluebubbles.md"
6+
"plugin: azure-speech":
7+
- changed-files:
8+
- any-glob-to-any-file:
9+
- "extensions/azure-speech/**"
10+
- "docs/providers/azure-speech.md"
11+
- "docs/tools/tts.md"
612
"channel: discord":
713
- changed-files:
814
- any-glob-to-any-file:
@@ -29,6 +35,11 @@
2935
- any-glob-to-any-file:
3036
- "extensions/google-meet/**"
3137
- "docs/plugins/google-meet.md"
38+
"plugin: bonjour":
39+
- changed-files:
40+
- any-glob-to-any-file:
41+
- "extensions/bonjour/**"
42+
- "docs/gateway/bonjour.md"
3243
"channel: imessage":
3344
- changed-files:
3445
- any-glob-to-any-file:
@@ -302,6 +313,11 @@
302313
- changed-files:
303314
- any-glob-to-any-file:
304315
- "extensions/huggingface/**"
316+
"extensions: inworld":
317+
- changed-files:
318+
- any-glob-to-any-file:
319+
- "extensions/inworld/**"
320+
- "docs/providers/inworld.md"
305321
"extensions: kilocode":
306322
- changed-files:
307323
- any-glob-to-any-file:
@@ -310,6 +326,11 @@
310326
- changed-files:
311327
- any-glob-to-any-file:
312328
- "extensions/lmstudio/**"
329+
"extensions: litellm":
330+
- changed-files:
331+
- any-glob-to-any-file:
332+
- "extensions/litellm/**"
333+
- "docs/providers/litellm.md"
313334
"extensions: openai":
314335
- changed-files:
315336
- any-glob-to-any-file:
@@ -346,6 +367,11 @@
346367
- changed-files:
347368
- any-glob-to-any-file:
348369
- "extensions/qianfan/**"
370+
"extensions: senseaudio":
371+
- changed-files:
372+
- any-glob-to-any-file:
373+
- "extensions/senseaudio/**"
374+
- "docs/providers/senseaudio.md"
349375
"extensions: synthetic":
350376
- changed-files:
351377
- any-glob-to-any-file:
@@ -362,6 +388,11 @@
362388
- changed-files:
363389
- any-glob-to-any-file:
364390
- "extensions/together/**"
391+
"extensions: tts-local-cli":
392+
- changed-files:
393+
- any-glob-to-any-file:
394+
- "extensions/tts-local-cli/**"
395+
- "docs/tools/tts.md"
365396
"extensions: venice":
366397
- changed-files:
367398
- any-glob-to-any-file:
@@ -382,3 +413,7 @@
382413
- changed-files:
383414
- any-glob-to-any-file:
384415
- "extensions/fal/**"
416+
"extensions: gradium":
417+
- changed-files:
418+
- any-glob-to-any-file:
419+
- "extensions/gradium/**"
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)