* feat(sessions): enforce visibility and membership * feat(ui): add session sharing controls * docs: add session sharing implementation report * refactor(sessions): use canonical creator identity * fix(sessions): adopt creator ownership contract * docs: refresh session sharing rebase report * docs: record final creator integration proof * docs: record final main rebase * chore: drop worktree report artifact * fix(sessions): keep drafts owner-only * fix(ui): preserve redacted session restrictions * fix(sessions): preserve scoped sharing authorization * fix(sessions): re-verify session instance inside sharing mutation queue * test(sessions): cover stale sharing mutation * fix(sessions): bind membership to session instance, gate absence blocking on sharing * fix(sessions): preserve entry normalization on rebase * fix(sessions): atomic visibility instance guard, reset visibility on recreate * docs(ui): name the absence-heuristic tradeoff and link follow-up * feat(protocol): expose session sharing row state * docs: note generated creator identity type * fix(sessions): bind member writes and visibility rollback to session instance * fix(ui): discard stale-connection sharing loads; drop worktree scratch files * fix(ui): block composer only on observed sharing state, never on list absence * fix(gateway): authorize agent runs against the resolved session (close keyless bypass) * chore(protocol): allowlist Control UI-only session.sharing event for mobile * test(config): record session.sharing keys in common-tier snapshot * refactor(sessions): unexport internal sharing helpers * test(gateway): update sessions changed routing assertions * fix(sessions): align sharing identity with created actor * fix(sessions): align membership identities and storage keys * fix(gateway): re-filter drafts against fresh sharing state in sessions.list * fix(gateway): drafts stay owner+admin only in the sessions.list fresh filter * fix(ui): re-export sharing protocol types for the Control UI * fix(ui): keep SessionSharingRole internal to satisfy deadcode gate * fix(gateway): read runtime config lazily in session-mutation authorization authorizeSessionMutation ran on every gateway request but eagerly called context.getRuntimeConfig() — a non-trivial config resolve — for methods that are never session mutations. Read config only once a real session-mutation target is resolved. Also register the four session sharing methods in the 2026.7 release-train inventory test. * fix(gateway): share one config snapshot across session-mutation authorization Group rename/delete discovery and the authorization loop were each resolving runtime config separately after the lazy-read change. Memoize the resolve so non-session requests still pay nothing, while any session mutation resolves config at most once and both discovery and authorization use that single snapshot (no double reload, no mid-request config-change split). * fix(gateway): resolve session-sharing CI gates - isGatewayAdmin: null-safe connect access so internal/plugin-runtime runs (which reach authorization with a connect-less client) do not crash. - emitSessionsChanged: scope only to a concrete session key; a [undefined] sessionKeys scope filters nothing correctly and would strip draft gating. - session stores: mark the sync TOCTOU re-read and the sqlite_master existence probe as narrowly-justified raw SQLite primitives. - tests: provide getRuntimeConfig to the session-action contract context, drop a shadowed 'call' binding, use structuredClone, and assert the agent-scoped sessions.changed broadcast shape. * docs(gateway): note best-effort participation gate + refresh native i18n baseline Session ownership/visibility are usability features, not a security boundary (docs/concepts/multi-user.md, SECURITY.md); document that the pre-dispatch authorization is intentionally not commit-bound to the resolved instance. Also refresh apps/.i18n/native-source.json after the session-sharing protocol codegen shifted line numbers of existing native strings (position-only). * test(gateway): reset session sharing snapshots * style(gateway): format sharing reset import
summary, read_when, title
| summary | read_when | title | |||
|---|---|---|---|---|---|
| Repository script entry points and compatibility notes |
|
Scripts Directory |
Scripts Directory
The scripts/ directory contains repository tooling used by local development,
CI, docs publishing, releases, Docker proof, and maintainer operations. Prefer
the package-script entry points in package.json when one exists, then read the
underlying script before running it directly.
Compatibility
Many scripts are stable paths referenced by package.json, GitHub Actions,
docs, and maintainer runbooks. Do not move, rename, or regroup scripts only to
improve taxonomy. A directory migration needs an explicit maintainer-approved
compatibility plan for package scripts, workflows, docs snippets, and any raw
script paths users may have copied.
This index is a discovery aid for the current flat layout. It does not define a new directory taxonomy.
Common Entry Points
| Area | Prefer | Notes |
|---|---|---|
| Build | pnpm build |
Runs scripts/build-all.mjs; use specific build scripts only when debugging a build stage. |
| Changed checks | pnpm changed:lanes --json, pnpm check:changed |
Lane classification lives in scripts/changed-lanes.mjs; changed-file checks live in scripts/check-changed.mjs. |
| Docs | pnpm docs:list, pnpm docs:check-mdx, pnpm docs:check-links |
Backed by scripts/docs-list.js, scripts/check-docs-mdx.mjs, and scripts/docs-link-audit.mjs. |
| Formatting docs | pnpm format:docs:check |
Uses scripts/format-docs.mjs; use write mode only when intentionally formatting docs. |
| Lint | pnpm lint, pnpm lint:core, pnpm lint:all |
Wrapper scripts keep oxlint behavior aligned with repo config. |
| Targeted tests | pnpm test <path-or-filter> or node scripts/run-vitest.mjs <path-or-filter> |
Avoid bare vitest; it can start watch mode. |
| Changed tests | pnpm test:changed |
Uses the repo's changed-test resolver instead of a broad Vitest run. |
| Docker proof | pnpm test:docker:all, pnpm test:docker:rerun, pnpm test:docker:timings |
Use the planner/rerun helpers before launching broad Docker work. |
| Live proof | pnpm test:live |
Live checks require the matching environment and credentials. |
| Release checks | pnpm release:check, pnpm release:beta, pnpm release:candidate |
Release scripts are maintainer workflows; read release docs before use. |
| GitHub reads | scripts/gh-read |
Uses a GitHub App read token when configured, leaving normal gh login for writes. |
| Commits | scripts/committer "<message>" <files...> |
Preferred scoped commit helper for OpenClaw changes. |
| Remote proof | node scripts/crabbox-wrapper.mjs ... |
Agent default for tests and heavy work; pre-warm by source trust, sync each run, reuse the lease. |
Script Families
check-*.mjs/check-*.ts: guardrails for architecture, docs, package contents, boundaries, workflows, and generated artifacts.run-*.mjs: wrappers around repo runtimes or tools, such as Node, Vitest, oxlint, tsgo, and environment setup.test-*.mjs/test-*.sh/test-*.ts: test planners, Docker lanes, live checks, and focused validation helpers.docs-*andcheck-docs-*: docs listing, link auditing, MDX checks, spellcheck, sync, and i18n glossary checks.release-*,openclaw-npm-*, andplugin-*-release-*: release preparation, package verification, and publishing helpers.docker-*,test-docker-*, andtest-live-*-docker.sh: Docker E2E planning, rerun, timing, and live/package lane helpers.gh-read*,label-*,sync-labels.ts, and PR helpers: GitHub read, labeling, and maintainer workflow support.generate-*,write-*,copy-*, andsync-*: generated docs, metadata, package surfaces, and build artifact support.lib/: shared helpers imported by script entry points.
Maintenance Rules
- Read
scripts/AGENTS.mdbefore changing scripts. - Keep package scripts, generators, generated-artifact checks, docs references, and workflow references aligned when touching a script path.
- Prefer existing wrappers instead of introducing a raw tool invocation.
- Add or update focused tests under
test/scripts/when changing script behavior.
See also Scripts for public-facing script guidance.