7 Commits
Author SHA1 Message Date
77905af66a fix(team): bind native team lifecycle to an immutable instance id (#4059)
* fix(team): bind native team lifecycle to an immutable instance id

Reserve a UUID before startup effects so shutdown, MCP cleanup, and
SessionEnd cannot adopt a newer same-name team. Keep cleanup receipts
outside the disposable state root so interrupted disposal can retry
without touching a successor.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(team): persist Claude session ownership for SessionEnd cleanup

SessionEnd was matching the ending Claude session against a tmux target, so owned teams were preserved. Record leader_session_id on config and treat a positively absent dedicated window as retryable cleanup evidence.

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(team): align lifecycle fixtures with owned tmux identity

Keep production fail-closed. Tests now supply valid server identity and
launch evidence, and interruption tests build runtime-cli so CI can run
the kill-pane guard without committing bridge/.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(test): restore typecheck and CI baselines for team instance lifecycle

- widen getWorkerLiveness mock return types so tsc (and the dist build the
  e2e/npm-pack suites depend on) stops failing with 10 TS errors
- accept esbuild's hoisted import.meta shim spelling in the runtime-cli
  package-dir regression assertion
- give the interrupted-shutdown fixture a platform-shaped process identity so
  isProcessIdentityDead() can prove the owner dead and adoption runs
- regenerate inventory-graph baseline for the new source content

* chore(inventory): regenerate graph baseline after dev merge

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: clawdbot <clawdbot@users.noreply.github.com>
2026-09-21 12:05:33 +09:00
Bellman 09817cbb3b fix: ship complete plugin runtime closure (#3479)
* fix: ship complete plugin runtime closure

* fix: refresh plugin runtime closure after dev merge

* test: combine package closure regressions after dev merge

* test: extract full package for runtime closure parity

* fix(ci): fail closed on generated PR artifacts

* test(workflow): accept fail-closed transcript race

* fix(session-end): bound deferred recovery

* fix(session-end): close recovery edge cases

* fix(session-end): terminalize exhausted recovery

* fix(session-end): release detached action handles

* fix(plugin): verify complete package closure

* fix(session-end): recover sealed wiki interleaving

* fix(plugin): ship complete declaration closure

* test(session-end): tolerate detached teardown lag

* test(session-end): wait for detached shutdown

* fix(session-end): preserve OpenClaw routing context

* fix(shipping): bind generated trust and recovery routing

* chore(shipping): remove unreachable generated extras

* fix(shipping): support exact generated deletions
2026-07-19 01:01:02 +09:00
Bellman 850e138f6e fix(installer): remove legacy pre-marker OMC guides (#3450)
Closes #3442
2026-07-10 17:21:42 +00:00
Peter GagarinovandClaude Opus 4.6 d7252572dc docs: document --plugin-dir, add CONTRIBUTING.md and omc doctor --plugin-dir
Adds the missing developer/contributor documentation for running OMC from a
local checkout, and teaches `omc doctor` to accept `--plugin-dir` in parity
with `omc` and `omc setup`.

Docs
- New CONTRIBUTING.md at repo root covering fork & upstream setup, three
  linking flows (plugin-dir, marketplace, no-plugin) with a comparison
  table, suggested shell aliases, rebuilding, tests/lint, and rebasing
  onto upstream/dev or upstream/main.
- New docs/REFERENCE.md "Plugin directory flags" section documenting
  omc --plugin-dir, claude --plugin-dir (direct), omc setup --plugin-dir-mode,
  omc doctor --plugin-dir (NEW), OMC_PLUGIN_ROOT env var, and a decision
  matrix. Also calls out --plugin-dir as the recommended local-dev flow
  (no plugin cache = hot iteration).
- docs/LOCAL_PLUGIN_INSTALL.md: adds a hot-reload caveat for the marketplace
  flow and a no-marketplace alternative subsection.
- docs/GETTING-STARTED.md: one-paragraph "running from a local checkout"
  callout.
- docs/DEVELOPERS.md: 3-line pointer to CONTRIBUTING.md.
- README.md and 11 translated READMEs: cross-links to the new REFERENCE
  section and a Contributing pointer. Translated files carry
  <!-- TODO(i18n) --> markers for maintainer-driven translation sync.

Code
- New src/lib/plugin-dir.ts exposing resolvePluginDirArg(), reused by
  src/cli/launch.ts (refactor, no behavior change) and src/cli/index.ts.
- omc doctor and omc doctor conflicts now accept --plugin-dir <path>.
  A preAction hook on the parent doctor command resolves the path,
  warns if it overrides a pre-existing OMC_PLUGIN_ROOT, and exits
  with a red error on empty/whitespace input instead of a raw stack.
- New npm run dev:full script running tsc --watch plus all six esbuild
  bundle steps in watch mode concurrently. scripts/build-*.mjs gained
  a --watch flag via esbuild.context().watch(). concurrently added as
  a devDependency.

Tests
- src/lib/__tests__/plugin-dir.test.ts: 6 unit tests covering absolute,
  relative, empty, whitespace-only, and ~-non-expansion edge cases.
- src/cli/__tests__/doctor-plugin-dir.test.ts: 10 tests including a real
  Commander parseAsync on `doctor conflicts --plugin-dir /tmp/foo` that
  would catch silent unwiring of the flag.

Constraint: Existing --plugin-dir launcher semantics in launch.ts must
not change (plugin-dir-capture tests still pass).
Constraint: REFERENCE.md must only gain additions; no existing sections
touched.
Rejected: Expanding ~ in resolvePluginDirArg | path.resolve() does not
and the behavior is now pinned by test + documented instead.
Rejected: Translating the 11 localized READMEs in-place | maintainer
handles i18n sync post-merge per upstream convention.
Confidence: high
Scope-risk: moderate
Directive: Any new --plugin-dir consumer must import resolvePluginDirArg
from src/lib/plugin-dir.ts rather than re-implementing path resolution.
Not-tested: dev:full watcher behavior on Windows (concurrently SIGINT
forwarding).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:48:51 +01:00
Yeachan-HeoandClaude Opus 4.6 588132d206 Hotfix: Remove jsonc-parser dependency, use internal parser (v4.6.5) (#1316)
Replaced external jsonc-parser dependency with a lightweight internal
implementation to fix runtime-cli.cjs failing in plugin marketplace installs.

- Created src/utils/jsonc.ts with parseJsonc() and stripJsoncComments()
- Updated src/config/loader.ts to use internal parser
- Removed jsonc-parser from external deps in build-runtime-cli.mjs

Resolves #1316

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 05:45:18 +00:00
Yeachan-HeoandClaude Opus 4.6 21be63409f release(v4.6.0): bump metadata and fix omc-teams runtime startup
Align release artifacts to 4.6.0 and add changenote coverage for dev→main shipping, while fixing runtime-cli bundling so codex workers no longer fail with missing jsonc-parser impl modules.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 03:27:39 +00:00
Yeachan-Heo 3ef7f5a42a feat(team): add dedicated team MCP server with omc_run_team_wait
- Extract team runtime tools into separate bridge/team-mcp.cjs MCP server
- Add omc_run_team_start, omc_run_team_status, omc_run_team_wait tools
- omc_run_team_wait uses internal exponential backoff (500ms->2000ms),
  replacing N-poll pattern with single blocking call (event-driven)
- Fix claude worker delivery: use natural-language inbox trigger instead
  of check-inbox sentinel (aligns with codex/gemini delivery pattern)
- Add /oh-my-claudecode:omc-teams skill for tmux CLI worker orchestration
- Remove dead build-codex-server/build-gemini-server test references
- Use __dirname in CJS bundle for install-path-agnostic routing
2026-02-23 05:13:25 +00:00