diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000000..aeb5efd7e4f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "packages/senpi"] + path = packages/senpi + url = https://github.com/code-yeongyu/senpi diff --git a/.omo/evidence/20260620-omo-native-wave-0/build-native-after-registration-fix.txt b/.omo/evidence/20260620-omo-native-wave-0/build-native-after-registration-fix.txt new file mode 100644 index 00000000000..f05c7e248e1 --- /dev/null +++ b/.omo/evidence/20260620-omo-native-wave-0/build-native-after-registration-fix.txt @@ -0,0 +1,6 @@ +Command: bun run build:native +Started: 2026-06-20T10:43:16Z +$ bun run --cwd packages/omo-native build +$ node build.mjs +Completed: 2026-06-20T10:43:16Z +Exit: 0 diff --git a/.omo/evidence/20260620-omo-native-wave-0/ci-install-fix-verification-v2.txt b/.omo/evidence/20260620-omo-native-wave-0/ci-install-fix-verification-v2.txt new file mode 100644 index 00000000000..890595992b8 --- /dev/null +++ b/.omo/evidence/20260620-omo-native-wave-0/ci-install-fix-verification-v2.txt @@ -0,0 +1,83 @@ +omo-native CI install fix verification v2 +UTC 2026-06-20T10:32:05Z + +## stale link scan +no install-time senpi package links remain + +## frozen install +bun install v1.3.14 (0d9b296a) + ++ @types/js-yaml@4.0.9 ++ @types/picomatch@4.0.3 ++ @typescript/native-preview@7.0.0-dev.20260518.1 ++ bun-types@1.3.14 ++ typescript@6.0.3 ++ @clack/prompts@1.5.0 ++ @code-yeongyu/comment-checker@0.8.0 ++ @modelcontextprotocol/sdk@1.29.0 ++ @opencode-ai/plugin@1.15.13 ++ @opencode-ai/sdk@1.15.13 ++ @opentui/core@0.2.16 ++ @opentui/keymap@0.2.16 ++ @opentui/solid@0.2.16 ++ commander@14.0.3 ++ detect-libc@2.1.2 ++ diff@9.0.0 ++ js-yaml@4.2.0 ++ jsonc-parser@3.3.1 ++ picocolors@1.1.1 ++ picomatch@4.0.4 ++ posthog-node@5.35.12 ++ vscode-jsonrpc@8.2.1 ++ zod@4.4.3 + +576 packages installed [319.00ms] + +## root direct build + +## build:native +$ bun run --cwd packages/omo-native build +$ node build.mjs + +## dynamic import +function + +## typecheck +$ tsgo --noEmit -p tsconfig.json + +## intentional seam audit red +$ vitest run + + RUN v4.1.8 /Users/yeongyu/local-workspaces/omo-wt/code-yeongyu/omo-native-wave0/packages/omo-native + + ❯ src/__tests__/seam-boundary-audit.test.ts (2 tests | 1 failed) 4ms + × requires the senpi seam to own at least one real senpi type-layer import 2ms + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL src/__tests__/seam-boundary-audit.test.ts > omo-native seam boundary audit > requires the senpi seam to own at least one real senpi type-layer import +AssertionError: Expected src/senpi/** to contain at least one `import type` or `export type` from the real senpi/pi type layer. This Wave 0 RED proves the seam is still a stub.: expected 0 to be greater than 0 + ❯ src/__tests__/seam-boundary-audit.test.ts:142:7 + 140| typeLayerImports.length, + 141| "Expected src/senpi/** to contain at least one `import type` or … + 142| ).toBeGreaterThan(0) + | ^ + 143| }) + 144| }) + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + + Test Files 1 failed (1) + Tests 1 failed | 1 passed (2) + Start at 19:32:07 + Duration 111ms (transform 11ms, setup 0ms, import 15ms, tests 4ms, environment 0ms) + +error: script "test" exited with code 1 +seam audit exit: 1 (expected non-zero until Wave 1 real senpi type import) + +## cleanup/status +dist cleaned + M bun.lock + M package.json + M packages/omo-native/package.json diff --git a/.omo/evidence/20260620-omo-native-wave-0/ci-nosubmodule-install-repro-pushed.txt b/.omo/evidence/20260620-omo-native-wave-0/ci-nosubmodule-install-repro-pushed.txt new file mode 100644 index 00000000000..1989ed6b083 --- /dev/null +++ b/.omo/evidence/20260620-omo-native-wave-0/ci-nosubmodule-install-repro-pushed.txt @@ -0,0 +1,33 @@ +CI-like no-submodule install repro from pushed fix +UTC 2026-06-20T10:32:35Z +e59250899 +-4ce93bcfbc7c681a709f2579f664b1bbf92fbc1b packages/senpi +no install-time senpi package links remain +bun install v1.3.14 (0d9b296a) + ++ @types/js-yaml@4.0.9 ++ @types/picomatch@4.0.3 ++ @typescript/native-preview@7.0.0-dev.20260518.1 ++ bun-types@1.3.14 ++ typescript@6.0.3 ++ @clack/prompts@1.5.0 ++ @code-yeongyu/comment-checker@0.8.0 ++ @modelcontextprotocol/sdk@1.29.0 ++ @opencode-ai/plugin@1.15.13 ++ @opencode-ai/sdk@1.15.13 ++ @opentui/core@0.2.16 ++ @opentui/keymap@0.2.16 ++ @opentui/solid@0.2.16 ++ commander@14.0.3 ++ detect-libc@2.1.2 ++ diff@9.0.0 ++ js-yaml@4.2.0 ++ jsonc-parser@3.3.1 ++ picocolors@1.1.1 ++ picomatch@4.0.4 ++ posthog-node@5.35.12 ++ vscode-jsonrpc@8.2.1 ++ zod@4.4.3 + +576 packages installed [354.00ms] +$ tsgo --noEmit -p tsconfig.json diff --git a/.omo/evidence/20260620-omo-native-wave-0/final-convention-fix-verification.txt b/.omo/evidence/20260620-omo-native-wave-0/final-convention-fix-verification.txt new file mode 100644 index 00000000000..5180a20ecc4 --- /dev/null +++ b/.omo/evidence/20260620-omo-native-wave-0/final-convention-fix-verification.txt @@ -0,0 +1,68 @@ +omo-native Wave 0 final convention-fix verification +UTC 2026-06-20T10:26:06Z + +## package convention +packages/omo-native/package.json:21: "bun-types": "1.3.14", +packages/omo-native/tsconfig.json:19: "types": [ +packages/omo-native/tsconfig.json:20: "bun-types" + +## no package-local @types/node declaration +no package-local @types/node declaration + +## frozen install +bun install v1.3.14 (0d9b296a) + +4 packages installed [92.00ms] + +## root direct build + +## root build:native +$ bun run --cwd packages/omo-native build +$ node build.mjs + +## dynamic import +function + +## typecheck +$ tsgo --noEmit -p tsconfig.json + +## intentional seam audit red +$ vitest run + + RUN v4.1.8 /Users/yeongyu/local-workspaces/omo-wt/code-yeongyu/omo-native-wave0/packages/omo-native + + ❯ src/__tests__/seam-boundary-audit.test.ts (2 tests | 1 failed) 4ms + × requires the senpi seam to own at least one real senpi type-layer import 1ms + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL src/__tests__/seam-boundary-audit.test.ts > omo-native seam boundary audit > requires the senpi seam to own at least one real senpi type-layer import +AssertionError: Expected src/senpi/** to contain at least one `import type` or `export type` from the real senpi/pi type layer. This Wave 0 RED proves the seam is still a stub.: expected 0 to be greater than 0 + ❯ src/__tests__/seam-boundary-audit.test.ts:142:7 + 140| typeLayerImports.length, + 141| "Expected src/senpi/** to contain at least one `import type` or … + 142| ).toBeGreaterThan(0) + | ^ + 143| }) + 144| }) + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + + Test Files 1 failed (1) + Tests 1 failed | 1 passed (2) + Start at 19:26:07 + Duration 102ms (transform 11ms, setup 0ms, import 15ms, tests 4ms, environment 0ms) + +error: script "test" exited with code 1 +seam audit exit: 1 (expected non-zero until Wave 1 real senpi type import) + +## cleanup/status +dist cleaned +tmux cleanup confirmed: no ulw-qa-omo-native-wave0-terminal +A .gitmodules + M bun.lock + M bunfig.toml + M package.json +A packages/senpi +?? packages/omo-native/ diff --git a/.omo/evidence/20260620-omo-native-wave-0/final-gate-review.md b/.omo/evidence/20260620-omo-native-wave-0/final-gate-review.md new file mode 100644 index 00000000000..2b79bf17825 --- /dev/null +++ b/.omo/evidence/20260620-omo-native-wave-0/final-gate-review.md @@ -0,0 +1,102 @@ +# omo-native Wave 0 Final Gate Review + +reviewedAt: 2026-06-20T10:25:00Z +worktree: `/Users/yeongyu/local-workspaces/omo-wt/code-yeongyu/omo-native-wave0` +scope: Wave 0 todos 1-3 only +recommendation: APPROVE +AdversarialVerify verdict: confirmed + +## originalIntent + +Implement and verify only Wave 0 todos 1-3 from `.omo/plans/omo-native.md`: add the Senpi submodule and `packages/omo-native` workspace wiring, add the native package build/typecheck/test scaffold plus pi manifest, and add a RED seam-boundary audit that proves the future Senpi seam is still a stub while preventing raw Senpi/pi imports outside `src/senpi/**`. + +## desiredOutcome + +The user should be able to treat Wave 0 as a confirmed foundation: frozen install works with the updated lockfile, root and package build commands work, the built extension default-imports as a function, package typecheck works, the seam audit fails only for the intentional positive seam import assertion, terminal screenshot/cleanup evidence exists, and no later-wave implementation has slipped into the diff. + +## blockers + +None. + +## userOutcomeReview + +Confirmed. The current worktree satisfies the user-listed verification checks after the lockfile, root-build, and screenshot fixes. + +The old `code-review.md`, `qa-matrix.md`, and `remove-ai-slops-review.md` record earlier blockers. They are superseded where later named PASS artifacts and my direct reruns prove the fixes: `final-local-verification.txt`, `qa-matrix-final.md`, `bun-install-fixed.txt`, `review-blocker-fix-stop-hook-verify-3.txt`, and `terminal-tui-screenshot-receipt.txt`. + +The changed file set remains scoped to the expected Wave 0 files: `.gitmodules`, `bun.lock`, `bunfig.toml`, `package.json`, `packages/senpi` gitlink, and new `packages/omo-native/**`. I found no team mode, MCP bridge, hashline, background subagent, OpenClaw, boulder, prompt, ultrawork, config bridge, or real Senpi runtime implementation in `packages/omo-native`. + +## directVerification + +- `bun install --frozen-lockfile --ignore-scripts`: PASS, exit 0, `4 packages installed`. +- `node packages/omo-native/build.mjs`: PASS, exit 0. +- `bun run build:native`: PASS, runs `bun run --cwd packages/omo-native build` then `node build.mjs`. +- `node -e "import('./packages/omo-native/dist/index.js').then((m) => console.log(typeof m.default))"`: PASS, prints `function`. +- `bun run --cwd packages/omo-native typecheck`: PASS, `tsgo --noEmit -p tsconfig.json`. +- `bun run --cwd packages/omo-native test`: INTENTIONAL RED, exit 1 with exactly 1 failed / 1 passed. Failed test is `requires the senpi seam to own at least one real senpi type-layer import`; assertion is `expected 0 to be greater than 0`. +- Core-only `Bun.` audit across the 18 Core packages: PASS, no production hits. +- Lockfile grep: PASS, `bun.lock` contains `packages/omo-native`, `@oh-my-opencode/omo-native`, local `@earendil-works/pi-agent-core`, local `@earendil-works/pi-ai`, and local `file:packages/senpi/packages/ai` / `file:packages/senpi/packages/agent` entries. +- Screenshot artifact check: PASS, `terminal-tui.png` is PNG image data, 1600 x 1118, non-empty; transcript and cleanup receipts exist. +- TypeScript no-excuse check: PASS, `No violations in 5 file(s).` +- `git diff --check` and `git diff --cached --check`: PASS. + +## slopAndProgrammingReview + +Loaded and applied `remove-ai-slops` and `programming`, including the TypeScript reference. Codegraph was attempted first for source review, but the worktree has no `.codegraph/` index, so direct file inspection was used. + +Direct slop pass: PASS. The seam test is not deletion-only, not tautological, and not merely checking that a requested removal happened. It enforces an architectural boundary plus an intentional future-positive condition. I did not find needless production extraction, speculative parser/normalizer code, hollow wrappers beyond the explicit Wave 0 stub, or maintenance-burden scope creep. + +Direct programming pass: PASS. New TypeScript files avoid `any`, `as any`, `as unknown`, `@ts-ignore`, `@ts-expect-error`, non-null assertions, empty catches, and broad catch swallowing. Pure LOC is below the 250 ceiling; largest reviewed file is the seam audit test at 112 pure LOC. `tsconfig.json` includes strict flags beyond `strict`. + +Report coverage check: PASS with caveat. `code-review.md` and `remove-ai-slops-review.md` explicitly include the required skill-perspective and overfit/slop coverage, but their verdicts are stale because they predate the lockfile/root-build/screenshot fixes. Current PASS artifacts plus direct reruns supersede those specific blockers. + +## checkedArtifactPaths + +- `.omo/plans/omo-native.md` +- `.omo/ulw-loop/omo-native-wave0/brief.md` +- `.omo/ulw-loop/omo-native-wave0/goals.json` +- `.gitmodules` +- `bun.lock` +- `bunfig.toml` +- `package.json` +- `packages/senpi` +- `packages/omo-native/package.json` +- `packages/omo-native/build.mjs` +- `packages/omo-native/tsconfig.json` +- `packages/omo-native/vitest.config.ts` +- `packages/omo-native/src/index.ts` +- `packages/omo-native/src/create-extension.ts` +- `packages/omo-native/src/senpi/types.ts` +- `packages/omo-native/src/__tests__/seam-boundary-audit.test.ts` +- `.omo/evidence/20260620-omo-native-wave-0/final-local-verification.txt` +- `.omo/evidence/20260620-omo-native-wave-0/qa-matrix-final.md` +- `.omo/evidence/20260620-omo-native-wave-0/bun-install-fixed.txt` +- `.omo/evidence/20260620-omo-native-wave-0/review-blocker-fix.txt` +- `.omo/evidence/20260620-omo-native-wave-0/review-blocker-fix-stop-hook-verify-3.txt` +- `.omo/evidence/20260620-omo-native-wave-0/build-pipeline.txt` +- `.omo/evidence/20260620-omo-native-wave-0/seam-audit-red.txt` +- `.omo/evidence/20260620-omo-native-wave-0/seam-audit-red-repeat.txt` +- `.omo/evidence/20260620-omo-native-wave-0/seam-audit-static.txt` +- `.omo/evidence/20260620-omo-native-wave-0/workspace-wiring.txt` +- `.omo/evidence/20260620-omo-native-wave-0/todo1-gate-fix.txt` +- `.omo/evidence/20260620-omo-native-wave-0/terminal-tui-screenshot-receipt.txt` +- `.omo/evidence/20260620-omo-native-wave-0/terminal-tui-transcript.txt` +- `.omo/evidence/20260620-omo-native-wave-0/terminal-tui.png` +- `.omo/evidence/20260620-omo-native-wave-0/cleanup-receipt.txt` +- `.omo/evidence/20260620-omo-native-wave-0/cleanup-receipt-build-skeleton.txt` +- `.omo/evidence/20260620-omo-native-wave-0/code-review.md` +- `.omo/evidence/20260620-omo-native-wave-0/qa-matrix.md` +- `.omo/evidence/20260620-omo-native-wave-0/remove-ai-slops-review.md` + +## exactEvidenceGaps + +No blocking evidence gaps against the user-listed final gate checks. + +Notepad path: no Wave 0-specific notepad file was found under `.omo/notepads/` or `.omo/evidence/20260620-omo-native-wave-0/`. Intent and success criteria were instead reconstructed from `.omo/ulw-loop/omo-native-wave0/brief.md`, `.omo/ulw-loop/omo-native-wave0/goals.json`, and `.omo/plans/omo-native.md`. + +## residualRisks + +- `packages/omo-native/src/senpi/types.ts` is intentionally still a local stub. Wave 1 must replace it with real Senpi/pi type-layer imports and turn the positive seam audit green. +- No real Senpi runtime load QA is expected or proven in Wave 0; this is scheduled for Wave 1. +- `packages/omo-native/build.mjs` includes a few future-facing externals (`@code-yeongyu/senpi`, `@earendil-works/pi-ai`, `typebox`) that are not exercised by the current stub. They do not implement later-wave behavior, but should be revisited when the real seam lands. +- The worktree is intentionally dirty/uncommitted for the Wave 0 draft state; generated `packages/omo-native/dist/index.js` is ignored by root `.gitignore`. diff --git a/.omo/evidence/20260620-omo-native-wave-0/native-typecheck-after-registration-fix.txt b/.omo/evidence/20260620-omo-native-wave-0/native-typecheck-after-registration-fix.txt new file mode 100644 index 00000000000..2802d0eaace --- /dev/null +++ b/.omo/evidence/20260620-omo-native-wave-0/native-typecheck-after-registration-fix.txt @@ -0,0 +1,5 @@ +Command: bun run --cwd packages/omo-native typecheck +Started: 2026-06-20T10:43:16Z +$ tsgo --noEmit -p tsconfig.json +Completed: 2026-06-20T10:43:16Z +Exit: 0 diff --git a/.omo/evidence/20260620-omo-native-wave-0/package-registration-audit-fix-verification.txt b/.omo/evidence/20260620-omo-native-wave-0/package-registration-audit-fix-verification.txt new file mode 100644 index 00000000000..a5e950c6109 --- /dev/null +++ b/.omo/evidence/20260620-omo-native-wave-0/package-registration-audit-fix-verification.txt @@ -0,0 +1,17 @@ +Command: bun test script/package-registration-audit.test.ts +Started: 2026-06-20T10:43:16Z +bun test v1.3.14 (0d9b296a) + +script/package-registration-audit.test.ts: +(pass) package registration audit > #given managed packages #when root registration is audited #then workspaces typecheck and dev deps stay aligned [1.75ms] +(pass) package registration audit > #given shared extraction guard #when audited #then every core package is covered [0.30ms] +(pass) package registration audit > #given package test scripts #when nested tests exist #then recursive globs are registered [4.39ms] +(pass) package registration audit > #given package dependencies #when ROADMAP layers are checked #then reverse edges stay at zero [1.23ms] +(pass) package registration audit > #given exact re-export shim scan #when inventory docs are checked #then total targets and every path are present [90.64ms] + + 5 pass + 0 fail + 10 expect() calls +Ran 5 tests across 1 file. [158.00ms] +Completed: 2026-06-20T10:43:16Z +Exit: 0 diff --git a/.omo/evidence/20260620-omo-native-wave-0/package-registration-ci-fix-summary.md b/.omo/evidence/20260620-omo-native-wave-0/package-registration-ci-fix-summary.md new file mode 100644 index 00000000000..3c343c0fcb1 --- /dev/null +++ b/.omo/evidence/20260620-omo-native-wave-0/package-registration-ci-fix-summary.md @@ -0,0 +1,56 @@ +# Package Registration CI Fix Evidence + +Date: 2026-06-20 +Branch: code-yeongyu/omo-native-wave0 +PR: #5454 + +## Root Cause + +GitHub Actions `test` failed on ubuntu, macOS, and Windows because `packages/omo-native` was added to the root workspace and `typecheck:packages` script, but `script/package-registration-audit.test.ts` still did not classify it as a managed package. + +The CI failure was reproduced locally by `bun test` before the fix: + +- `1 tests failed` +- failing test: `package registration audit > #given managed packages #when root registration is audited #then workspaces typecheck and dev deps stay aligned` +- diff showed `packages/omo-native` present in actual typecheck paths but absent from expected managed paths + +## Fix + +Updated the registration audit so `packages/omo-native` is treated as a managed native package. The audit still excludes native packages from the root `workspace:*` devDependency expectation, preserving the Wave 0 constraint that the native package is registered for workspace/typecheck coverage without introducing install-time Senpi coupling. + +## Verification + +Focused audit: + +```text +Command: bun test script/package-registration-audit.test.ts +Result: 5 pass, 0 fail +Exit: 0 +Artifact: .omo/evidence/20260620-omo-native-wave-0/package-registration-audit-fix-verification.txt +``` + +Root suite: + +```text +Command: bun test +Result: 10072 pass, 2 skip, 0 fail +Exit: 0 +Artifact: .omo/evidence/20260620-omo-native-wave-0/root-bun-test-after-package-registration-fix.txt +``` + +Native adapter smoke checks: + +```text +Command: bun run build:native +Exit: 0 +Artifact: .omo/evidence/20260620-omo-native-wave-0/build-native-after-registration-fix.txt + +Command: bun run --cwd packages/omo-native typecheck +Exit: 0 +Artifact: .omo/evidence/20260620-omo-native-wave-0/native-typecheck-after-registration-fix.txt +``` + +Manual QA / cleanup: + +- Terminal TUI screenshot remains attached in the PR from the earlier Wave 0 manual QA: `.omo/evidence/20260620-omo-native-wave-0/terminal-tui.png`. +- No `ulw-qa-omo-native-wave0-terminal` or `omo-native` tmux QA session remained after cleanup check. diff --git a/.omo/evidence/20260620-omo-native-wave-0/post-patch-gate-addendum.md b/.omo/evidence/20260620-omo-native-wave-0/post-patch-gate-addendum.md new file mode 100644 index 00000000000..f7f66b2f491 --- /dev/null +++ b/.omo/evidence/20260620-omo-native-wave-0/post-patch-gate-addendum.md @@ -0,0 +1,33 @@ +# omo-native Wave 0 Post-Patch Gate Addendum + +reviewedAt: 2026-06-20T10:26:30Z + +## Verdict + +PASS. + +After the final gate reviewer returned PASS, the native package was adjusted to follow the repo's Bun package convention: + +- `packages/omo-native/package.json` uses `bun-types`. +- `packages/omo-native/tsconfig.json` uses `"types": ["bun-types"]`. +- The package no longer declares package-local `@types/node`. + +## Fresh Verification + +Artifact: `.omo/evidence/20260620-omo-native-wave-0/final-convention-fix-verification.txt` + +Fresh commands observed: + +- `bun install --frozen-lockfile --ignore-scripts`: PASS. +- `node packages/omo-native/build.mjs`: PASS. +- `bun run build:native`: PASS. +- `node -e "import('./packages/omo-native/dist/index.js').then(m => console.log(typeof m.default))"`: PASS, printed `function`. +- `bun run --cwd packages/omo-native typecheck`: PASS. +- `bun run --cwd packages/omo-native test`: expected RED, exit 1 only because the planned Wave 1 assertion requires a real Senpi/pi type-layer import. +- `git diff --check`: PASS. +- `git diff --cached --check`: PASS. +- tmux cleanup: PASS, no `ulw-qa-omo-native-wave0-terminal` session remains. + +## Superseded Note + +The previous gate review remains valid for scope and architecture review, but its package-type details predate this final convention fix. This addendum is the fresh post-patch gate evidence for the final committed state. diff --git a/.omo/evidence/20260620-omo-native-wave-0/qa-matrix-final.md b/.omo/evidence/20260620-omo-native-wave-0/qa-matrix-final.md new file mode 100644 index 00000000000..b0043229f76 --- /dev/null +++ b/.omo/evidence/20260620-omo-native-wave-0/qa-matrix-final.md @@ -0,0 +1,100 @@ +# omo-native Wave 0 Manual QA Matrix Final + +Worktree: `/Users/yeongyu/local-workspaces/omo-wt/code-yeongyu/omo-native-wave0` +Evidence directory: `.omo/evidence/20260620-omo-native-wave-0/` +Matrix refreshed: 2026-06-20 +Scope: read current diff and evidence only; no product files edited by this refresh. + +## Verdict + +PASS. + +Current evidence includes both required unblockers: +- Terminal/tmux screenshot proof is present and non-empty: `terminal-tui.png` is a 1600 x 1118 PNG, paired with `terminal-tui-transcript.txt` and `terminal-tui-screenshot-receipt.txt`. +- Installability is now passing: `bun-install-fixed.txt`, `review-blocker-fix-stop-hook-verify-3.txt`, and `final-local-verification.txt` show successful install/frozen install, lockfile grep, build, dynamic import, and typecheck evidence. + +The C002 seam audit remains intentionally RED. That is a planned Wave 1 positive seam proof, not a Wave 0 product failure: the audit confirms the boundary test runs and the positive real senpi/pi type-layer import check fails as designed while the seam is still a stub. + +## Current Diff Observed + +Refresh surface: terminal CLI. +Refresh invocation used to read current state: + +```sh +git status --short +git diff --stat +rg --files .omo/evidence/20260620-omo-native-wave-0 +``` + +Observed product diff/status at refresh time: +- `.gitmodules` added. +- `bun.lock` modified. +- `bunfig.toml` modified. +- `package.json` modified. +- `packages/senpi` added as gitlink. +- `packages/omo-native/` untracked. + +## manualQa.surfaceEvidence + +| scenario id | criterion reference | surface | exact invocation | verdict | artifactRefs | +|---|---|---|---|---|---| +| S-C001-01 | C001 terminal/tmux build proof | terminal CLI | `bun install --frozen-lockfile --ignore-scripts` | PASS | A001, A009 | +| S-C001-02 | C001 terminal/tmux build proof | terminal CLI | `bun run build:native` | PASS | A001, A004, A009 | +| S-C001-03 | C001 terminal/tmux build proof | terminal CLI | `node packages/omo-native/build.mjs` | PASS | A004, A009 | +| S-C001-04 | C001 terminal/tmux build proof | terminal CLI | `node -e "import('./packages/omo-native/dist/index.js').then(m => console.log(typeof m.default))"` | PASS | A001, A004, A009 | +| S-C001-05 | C001 terminal/tmux build proof | terminal CLI | `bun run --cwd packages/omo-native typecheck` | PASS | A001, A004, A009 | +| S-C001-06 | C001 terminal/tmux screenshot proof | tmux terminal screenshot | `tmux new-session -d -s ulw-qa-omo-native-wave0-terminal -x 120 -y 34 ...` followed by PNG capture | PASS | A002, A003 | +| S-C001-07 | C001 build reverify artifacts | terminal CLI | repeated Todo 2 stop-hook reverifies: `bun run build:native`, dynamic import, package typecheck, manifest checks | PASS | A005 | +| S-C002-01 | C002 seam audit RED | terminal CLI | `cd packages/omo-native && npx vitest run src/__tests__/seam-boundary-audit.test.ts` | PASS, intended RED observed | A006 | +| S-C002-02 | C002 seam audit RED repeated reverify | terminal CLI | `npx --yes vitest@4.1.9 run --root /Users/yeongyu/local-workspaces/omo-wt/code-yeongyu/omo-native-wave0 packages/omo-native/src/__tests__/seam-boundary-audit.test.ts` | PASS, intended RED reproduced | A007, A008 | +| S-C002-03 | C002 seam audit static guard | terminal CLI | `rg -n "as any|: any|@ts-ignore|@ts-expect-error|!\\s*(?:[.;,)]|$)" packages/omo-native/src/__tests__/seam-boundary-audit.test.ts` | PASS | A011 | +| S-C003-01 | C003 workspace wiring | terminal CLI | `node -e "const p=require('./package.json'); console.log(p.workspaces.includes('packages/omo-native')); console.log(p.workspaces.includes('packages/senpi'))"` | PASS | A012 | +| S-C003-02 | C003 installability | terminal CLI | `bun install` | PASS | A013 | +| S-C003-03 | C003 frozen install | terminal CLI | `bun install --frozen-lockfile --ignore-scripts` | PASS | A009, A001 | +| S-C003-04 | C003 typecheck | terminal CLI | `bun run --cwd packages/omo-native typecheck` | PASS | A013, A004, A009 | +| S-C003-05 | C003 lockfile grep | terminal CLI | `rg -n omo-native\\|@earendil-works/pi-agent-core\\|@earendil-works/pi-ai bun.lock` | PASS | A009, A001 | +| S-C003-06 | C003 gate/blocker fix reverify | terminal CLI | `node` manifest probes for `@earendil-works/pi-agent-core`, root `@earendil-works/pi-ai` override, typecheck wiring, and final stop-hook verify | PASS | A014, A009 | + +## manualQa.adversarialCases + +| scenario id | criterion reference | adversarial class | expected behavior | verdict | artifactRefs | +|---|---|---|---|---|---| +| ADV-01 | C001/C003 | dirty_worktree | Evidence must acknowledge the dirty worktree and verify scoped behavior without treating concurrent changes as clean baseline. | PASS | A001, A009, A012, A014 | +| ADV-02 | C002/C003 | stale_state | Reverification must use current files/lockfile, not stale pre-fix claims; frozen install must pass after lockfile refresh. | PASS | A006, A007, A009, A013 | +| ADV-03 | C001/C003 | misleading_success_output | Success claims must be backed by process exits and concrete observables: non-empty dist, `function` dynamic import, lockfile entries, local package links. | PASS | A001, A004, A009, A013 | +| ADV-04 | C002 | misleading_success_output | Vitest exit 1 must be interpreted only as the planned positive seam assertion failure, not as product failure or runner setup failure. | PASS | A006, A007, A008 | +| ADV-05 | C002 | flaky tests | The intended RED seam result must reproduce across repeated focused runs with the same assertion. | PASS | A006, A007, A008 | +| ADV-06 | C001/C003 | hung command | Build, import, install, frozen install, and typecheck commands must terminate and record exits/durations. | PASS | A001, A004, A009, A013 | +| ADV-07 | C001/C003 | cleanup | tmux session and generated dist artifacts must be cleaned up or shown ignored; no commit/push performed. | PASS | A002, A009, A013 | + +## Scoped Not-Applicable Rationale + +These are not counted as adversarial PASS cases because Wave 0 evidence does not expose a relevant executable surface: + +| class | reason | +|---|---| +| prompt_injection | No prompt/model-facing text path or agent message parser is introduced by the covered omo-native Wave 0 build/install/seam evidence. | +| malformed_input | No untrusted input parser or user-supplied data parser is exercised by the covered build, typecheck, workspace, install, screenshot, or seam-audit surfaces. | +| cancel/resume | No resumable workflow, session state, or cancellation surface is started by the covered commands. | +| repeated_interruptions | Evidence records bounded terminal/tmux command scenarios, not an interruptible harness/session flow. | + +## manualQa.artifactRefs + +| id | kind | description | path | +|---|---|---|---| +| A001 | terminal transcript | Fresh final local verification after install/build fixes; includes frozen install, build, dynamic import, typecheck, lockfile metadata, and scoped status. | `.omo/evidence/20260620-omo-native-wave-0/final-local-verification.txt` | +| A002 | screenshot receipt | tmux terminal screenshot capture receipt; records tmux invocation, transcript path, PNG path, file metadata, and tmux cleanup. | `.omo/evidence/20260620-omo-native-wave-0/terminal-tui-screenshot-receipt.txt` | +| A003 | png screenshot | Rendered terminal/tmux screenshot, non-empty PNG image data. | `.omo/evidence/20260620-omo-native-wave-0/terminal-tui.png` | +| A004 | terminal transcript | Build pipeline after Todo 2 fixes: root `build:native`, dynamic import, package typecheck, root script assertions. | `.omo/evidence/20260620-omo-native-wave-0/build-pipeline.txt` | +| A005 | terminal transcript set | Build/typecheck reverify artifacts; repeated `build:native`, dynamic import, typecheck, manifest, and cleanup checks. | `.omo/evidence/20260620-omo-native-wave-0/stop-hook-reverify-todo2-1.txt`, `.omo/evidence/20260620-omo-native-wave-0/stop-hook-reverify-todo2-2.txt`, `.omo/evidence/20260620-omo-native-wave-0/stop-hook-reverify-todo2-3.txt` | +| A006 | terminal transcript | Focused seam audit RED run twice; Vitest exits 1 with the expected positive seam import assertion. | `.omo/evidence/20260620-omo-native-wave-0/seam-audit-red.txt` | +| A007 | terminal transcript | Repeated focused seam audit RED proof. | `.omo/evidence/20260620-omo-native-wave-0/seam-audit-red-repeat.txt` | +| A008 | terminal transcript set | Stop-hook reverifies for seam audit RED; confirms one boundary test passed and one positive seam test failed intentionally. | `.omo/evidence/20260620-omo-native-wave-0/stop-hook-reverify-4.txt`, `.omo/evidence/20260620-omo-native-wave-0/stop-hook-reverify-5.txt`, `.omo/evidence/20260620-omo-native-wave-0/stop-hook-reverify-6.txt` | +| A009 | terminal transcript | Third review-blocker stop-hook verify; includes lockfile freshness, frozen install, root build, build:native, dynamic import, typecheck, lockfile grep, dirty status, and cleanup judgment. | `.omo/evidence/20260620-omo-native-wave-0/review-blocker-fix-stop-hook-verify-3.txt` | +| A010 | terminal transcript | Terminal TUI transcript paired with screenshot receipt. | `.omo/evidence/20260620-omo-native-wave-0/terminal-tui-transcript.txt` | +| A011 | static transcript | Seam audit static checks: forbidden TypeScript escape-hatch scan and pure LOC. | `.omo/evidence/20260620-omo-native-wave-0/seam-audit-static.txt` | +| A012 | terminal transcript | Workspace wiring proof including submodule, workspace membership, manifest checks, dirty-worktree and stale-state probes. | `.omo/evidence/20260620-omo-native-wave-0/workspace-wiring.txt` | +| A013 | terminal transcript | Installability fix evidence: `bun install` exits 0, build exits 0, typecheck exits 0, package resolution/link proof, no registry pi-ai lock entry. | `.omo/evidence/20260620-omo-native-wave-0/bun-install-fixed.txt` | +| A014 | terminal transcript | Todo 1 gate fix evidence with corrected `@earendil-works/pi-agent-core` devDependency and typecheck wiring evolution. | `.omo/evidence/20260620-omo-native-wave-0/todo1-gate-fix.txt` | +| A015 | terminal transcript | Historical negative install proof superseded by A013/A009; retained as before-fix context only, not used for final PASS. | `.omo/evidence/20260620-omo-native-wave-0/bun-install.txt` | +| A016 | terminal transcript | Failing-first build pipeline before Todo 2: `build:native` missing, superseded by A004/A005. | `.omo/evidence/20260620-omo-native-wave-0/build-pipeline-before.txt` | diff --git a/.omo/evidence/20260620-omo-native-wave-0/root-bun-test-after-package-registration-fix-summary.txt b/.omo/evidence/20260620-omo-native-wave-0/root-bun-test-after-package-registration-fix-summary.txt new file mode 100644 index 00000000000..379a8d15e46 --- /dev/null +++ b/.omo/evidence/20260620-omo-native-wave-0/root-bun-test-after-package-registration-fix-summary.txt @@ -0,0 +1,54 @@ +Command: bun test +Artifact source: .omo/evidence/20260620-omo-native-wave-0/root-bun-test-after-package-registration-fix.txt +Sanitized tail for PR visibility: + +(pass) findPluginEntry > finds legacy plugin entry [24.99ms] +(pass) findPluginEntry > finds preferred plugin entry with pinned version [25.65ms] +(pass) findPluginEntry > returns null for unrelated plugin entry [25.19ms] +(pass) findPluginEntry > reads user config from profile dir even when OPENCODE_CONFIG_DIR changes after import [26.19ms] + +packages/omo-opencode/src/hooks/auto-update-checker/checker/catch-fallbacks.test.ts: +(pass) auto-update checker catch fallbacks > returns null when latest version fetch throws an Error [0.30ms] +(pass) auto-update checker catch fallbacks > returns null when latest version fetch throws a non-Error [0.11ms] +(pass) auto-update checker catch fallbacks > returns null when local dev package JSON is malformed [0.94ms] +(pass) auto-update checker catch fallbacks > returns null when local dev version read throws a non-Error [0.59ms] + +packages/omo-opencode/src/hooks/auto-update-checker/hook/background-update-check.test.ts: +(pass) createBackgroundUpdateCheckRunner — OpenCode-managed sandbox (#4318) > #given import.meta.url resolves outside the flat cache workspace and config-dir #when auto-update fires with autoUpdate=true #then bun install is skipped and only the update-available toast is shown (not 'Updated!') [0.33ms] +(pass) createBackgroundUpdateCheckRunner — OpenCode-managed sandbox (#4318) > #given import.meta.url resolves inside the flat cache workspace #when auto-update fires with autoUpdate=true #then existing install flow runs unchanged [0.20ms] +(pass) createBackgroundUpdateCheckRunner — OpenCode-managed sandbox (#4318) > #given bun install throws a non-Error #when auto-update fires #then it falls back to update-available notification [0.15ms] + +packages/omo-opencode/src/hooks/keyword-detector/ultrawork/ultrawork-source-routing.test.ts: +(pass) Ultrawork source routing > #given agent and model #then getUltraworkSource routes to the expected variant [0.11ms] + +packages/omo-opencode/src/hooks/claude-code-hooks/handlers/session-event-handler-retry.test.ts: +(pass) createSessionEventHandler retry behavior > #given transient parent lookup failure #when the next idle succeeds #then stop hooks receive the later parent session id [0.47ms] +(pass) createSessionEventHandler retry behavior > #given parent lookup throws a non-Error value #when the next idle succeeds #then stop hooks receive the later parent session id [0.09ms] +(pass) createSessionEventHandler retry behavior > #given a parentless idle session #when stop hooks execute #then the context carries the session transcript path [0.09ms] + +packages/omo-opencode/src/hooks/claude-code-hooks/handlers/session-event-handler.test.ts: +(pass) createSessionEventHandler > #given deleted session with retained caches #when session deleted arrives #then per-session resources are cleared [1.42ms] +(pass) createSessionEventHandler > #given active singleton state #when dispose runs #then all shared caches are cleared [0.34ms] +(pass) createSessionEventHandler > #given repeated idle events for one session #when stop hook preparation runs #then parent session lookup is reused [0.09ms] +(pass) createSessionEventHandler > #given deleted session #when it idles again #then parent session lookup is fetched again [0.08ms] + +packages/omo-opencode/src/hooks/claude-code-hooks/handlers/tool-execute-before-handler.test.ts: +(pass) createToolExecuteBeforeHandler > #given todowrite JSON parsing throws a non-Error value #when handler runs #then it reports the same parse error [0.29ms] +(pass) createToolExecuteBeforeHandler > #given denial toast rejects with a non-Error value #when hook denies #then the hook denial still wins [0.18ms] + +packages/omo-opencode/src/hooks/claude-code-hooks/handlers/tool-execute-after-handler.test.ts: +(pass) createToolExecuteAfterHandler > #given diff-heavy metadata #when transcript entry is appended #then it keeps concise output with compact metadata [0.42ms] +(pass) createToolExecuteAfterHandler > #given multiline PostToolUse context on empty tool output #when output is appended #then it renders clean normalized sections [0.14ms] +(pass) createToolExecuteAfterHandler > #given warning toast rejects with a non-Error value #when PostToolUse blocks #then output still receives hook sections [0.09ms] + +2 tests skipped: +(skip) team-mode live tmux smoke > #given a real caller tmux session and two mock members #when createTeamLayout runs #then teammate panes appear in the caller window and cleanup leaves the session intact +(skip) team-mode live tmux smoke > #given a real caller tmux session and two mock members #when createTeamLayout runs #then teammate panes appear in the caller window and cleanup leaves the session intact + + 10072 pass + 2 skip + 0 fail + 23720 expect() calls +Ran 10074 tests across 1220 files. [123.67s] +Completed: 2026-06-20T10:46:00Z +Exit: 0 diff --git a/.omo/evidence/20260620-omo-native-wave-0/terminal-tui-screenshot-receipt.txt b/.omo/evidence/20260620-omo-native-wave-0/terminal-tui-screenshot-receipt.txt new file mode 100644 index 00000000000..40817ceab75 --- /dev/null +++ b/.omo/evidence/20260620-omo-native-wave-0/terminal-tui-screenshot-receipt.txt @@ -0,0 +1,11 @@ +# Terminal TUI screenshot capture receipt +Sat Jun 20 10:19:02 UTC 2026 +channel: tmux terminal pane rendered to PNG with Pillow/Menlo +tmux invocation: tmux new-session -d -s ulw-qa-omo-native-wave0-terminal -x 120 -y 34 ... +transcript: .omo/evidence/20260620-omo-native-wave-0/terminal-tui-transcript.txt +screenshot: .omo/evidence/20260620-omo-native-wave-0/terminal-tui.png +.omo/evidence/20260620-omo-native-wave-0/terminal-tui.png: PNG image data, 1600 x 1118, 8-bit/color RGB, non-interlaced +-rw-r--r-- 1 yeongyu staff 1245 Jun 20 19:18 .omo/evidence/20260620-omo-native-wave-0/terminal-tui-transcript.txt +-rw-r--r-- 1 yeongyu staff 85306 Jun 20 19:19 .omo/evidence/20260620-omo-native-wave-0/terminal-tui.png +cleanup: tmux kill-session -t ulw-qa-omo-native-wave0-terminal +cleanup-confirmed: no tmux session remains diff --git a/.omo/evidence/20260620-omo-native-wave-0/terminal-tui-transcript.txt b/.omo/evidence/20260620-omo-native-wave-0/terminal-tui-transcript.txt new file mode 100644 index 00000000000..0734c6c3849 --- /dev/null +++ b/.omo/evidence/20260620-omo-native-wave-0/terminal-tui-transcript.txt @@ -0,0 +1,22 @@ ++--------------------------------------------------------------------------------+ +| omo-native Wave 0 terminal QA | ++--------------------------------------------------------------------------------+ +| worktree: omo-wt/code-yeongyu/omo-native-wave0 | +| branch: code-yeongyu/omo-native-wave0 | ++--------------------------------------------------------------------------------+ +| PASS bun install --frozen-lockfile --ignore-scripts | +| PASS node packages/omo-native/build.mjs | +| PASS bun run build:native | +| PASS dynamic import -> function | +| PASS bun run --cwd packages/omo-native typecheck | +| RED seam-boundary audit positive check (planned Wave 1 seam import proof) | ++--------------------------------------------------------------------------------+ + +$ bun install --frozen-lockfile --ignore-scripts +4 packages installed [fresh check] + +$ node -e import dist -> function +function + +$ git submodule status packages/senpi + 4ce93bcfbc7c681a709f2579f664b1bbf92fbc1b packages/senpi diff --git a/.omo/evidence/20260620-omo-native-wave-0/terminal-tui.png b/.omo/evidence/20260620-omo-native-wave-0/terminal-tui.png new file mode 100644 index 00000000000..cf63b38135d Binary files /dev/null and b/.omo/evidence/20260620-omo-native-wave-0/terminal-tui.png differ diff --git a/bun.lock b/bun.lock index 9584f813dbd..73ef13b7e26 100644 --- a/bun.lock +++ b/bun.lock @@ -162,6 +162,18 @@ "bun-types": "1.3.14", }, }, + "packages/omo-native": { + "name": "@oh-my-opencode/omo-native", + "dependencies": { + "@oh-my-opencode/utils": "workspace:*", + }, + "devDependencies": { + "@typescript/native-preview": "7.0.0-dev.20260518.1", + "bun-types": "1.3.14", + "esbuild": "0.28.1", + "vitest": "4.1.8", + }, + }, "packages/omo-opencode": { "name": "@oh-my-opencode/omo-opencode", "version": "0.1.0", @@ -339,12 +351,72 @@ "@babel/types": ["@babel/types@7.29.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA=="], + "@bcoe/v8-coverage": ["@bcoe/v8-coverage@1.0.2", "", {}, "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA=="], + "@clack/core": ["@clack/core@1.4.0", "", { "dependencies": { "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" } }, "sha512-7Wctjq6f7c1CPz8sPpkwUnz8yRgVANkpNupb81q432FjcJg4l+Sw7XANdNSdWfAKq0IHI0JTcUeK5dxs/HrGPw=="], "@clack/prompts": ["@clack/prompts@1.5.0", "", { "dependencies": { "@clack/core": "1.4.0", "fast-string-width": "^3.0.2", "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" } }, "sha512-wKh+wTjmrUoUdkZg8KpJO5X+p9PWV+KE9mePseq9UYWkukgTKsGS47RRL2HstwVcvDQH+PenrPJWII8+MfiiyA=="], "@code-yeongyu/comment-checker": ["@code-yeongyu/comment-checker@0.8.0", "", { "bin": { "comment-checker": "cli.js" } }, "sha512-Ret0qHtgDhEemQYNduqSyaihFWJSOKae4YW3sUHS680G8K57CsRUkK6Gs4kbzDuWqiNUYs254+qu5hZZZSEKUA=="], + "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], + + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.1", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.28.1", "", { "os": "android", "cpu": "arm" }, "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.1", "", { "os": "android", "cpu": "arm64" }, "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.28.1", "", { "os": "android", "cpu": "x64" }, "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.1", "", { "os": "linux", "cpu": "arm" }, "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.1", "", { "os": "linux", "cpu": "ia32" }, "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.1", "", { "os": "linux", "cpu": "x64" }, "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.1", "", { "os": "none", "cpu": "arm64" }, "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.1", "", { "os": "none", "cpu": "x64" }, "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.1", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.1", "", { "os": "none", "cpu": "arm64" }, "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.1", "", { "os": "sunos", "cpu": "x64" }, "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.1", "", { "os": "win32", "cpu": "x64" }, "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A=="], + "@hono/node-server": ["@hono/node-server@1.19.14", "", { "peerDependencies": { "hono": "^4" } }, "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw=="], "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], @@ -369,6 +441,8 @@ "@msgpackr-extract/msgpackr-extract-win32-x64": ["@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4", "", { "os": "win32", "cpu": "x64" }, "sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.5", "", { "dependencies": { "@tybys/wasm-util": "^0.10.2" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q=="], + "@oh-my-opencode/agents-md-core": ["@oh-my-opencode/agents-md-core@workspace:packages/agents-md-core"], "@oh-my-opencode/boulder-state": ["@oh-my-opencode/boulder-state@workspace:packages/boulder-state"], @@ -393,6 +467,8 @@ "@oh-my-opencode/omo-codex": ["@oh-my-opencode/omo-codex@workspace:packages/omo-codex"], + "@oh-my-opencode/omo-native": ["@oh-my-opencode/omo-native@workspace:packages/omo-native"], + "@oh-my-opencode/omo-opencode": ["@oh-my-opencode/omo-opencode@workspace:packages/omo-opencode"], "@oh-my-opencode/openclaw-core": ["@oh-my-opencode/openclaw-core@workspace:packages/openclaw-core"], @@ -435,12 +511,54 @@ "@opentui/solid": ["@opentui/solid@0.2.16", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.2.16", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.12", "entities": "7.0.1", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.12" } }, "sha512-2Q+v1PPpXXr+sALi9Aj6I5Jvo7xDfbmstYjRLL7lW3Hghh9i7ONQKpt/gyDDRbhSsYrhxKYTNenF9OxgoXkTHg=="], + "@oxc-project/types": ["@oxc-project/types@0.133.0", "", {}, "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA=="], + "@posthog/core": ["@posthog/core@1.30.3", "", { "dependencies": { "@posthog/types": "1.379.0" } }, "sha512-mGIN4Du1a8fKxV5WfnEtogq3VOQLa4PfWMUg5uMIMDD+fp5bhTA4QG4oYAea4vBTZ1ZOanQbjXcX4b5k2X93Qw=="], "@posthog/types": ["@posthog/types@1.379.0", "", {}, "sha512-QJLzyV22iZKy5eEXKn9IB1swSVo2JigIawebBha+BmsePsY3XA0HAcq2B+D8Km5BHnbE+SGm5aHxFG3DlVE1yg=="], + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.3", "", { "os": "android", "cpu": "arm64" }, "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw=="], + + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA=="], + + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg=="], + + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g=="], + + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.3", "", { "os": "linux", "cpu": "arm" }, "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw=="], + + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw=="], + + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q=="], + + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg=="], + + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg=="], + + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.3", "", { "os": "linux", "cpu": "x64" }, "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg=="], + + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.3", "", { "os": "linux", "cpu": "x64" }, "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow=="], + + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.3", "", { "os": "none", "cpu": "arm64" }, "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg=="], + + "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.3", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg=="], + + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g=="], + + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.3", "", { "os": "win32", "cpu": "x64" }, "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="], + + "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], + + "@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="], + + "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], + "@types/js-yaml": ["@types/js-yaml@4.0.9", "", {}, "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg=="], "@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], @@ -463,6 +581,22 @@ "@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20260518.1", "", { "os": "win32", "cpu": "x64" }, "sha512-bFtq+ynOjZ3zqJSSm0wMFxlstXHoxGhT+dXnj5HihmuGGjrRM5PoNbPZVnpJ4xqAwvx8KHWZchZnpAr+yPgekA=="], + "@vitest/coverage-v8": ["@vitest/coverage-v8@4.1.8", "", { "dependencies": { "@bcoe/v8-coverage": "^1.0.2", "@vitest/utils": "4.1.8", "ast-v8-to-istanbul": "^1.0.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.2.0", "magicast": "^0.5.2", "obug": "^2.1.1", "std-env": "^4.0.0-rc.1", "tinyrainbow": "^3.1.0" }, "peerDependencies": { "@vitest/browser": "4.1.8", "vitest": "4.1.8" }, "optionalPeers": ["@vitest/browser"] }, "sha512-lt3kovsyHwYe00wq4D1ti0Z974fWj4NLp6siqiyEufUpyFwK9Yhi7rBhac9JL5aA0zoMrJqc4vYPZRUnI7l7nw=="], + + "@vitest/expect": ["@vitest/expect@4.1.8", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.1.8", "@vitest/utils": "4.1.8", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" } }, "sha512-h3nDO677RDLEGlBxyQ5CW8RlMThSKSRLUePLOx09gNIWRL40edgA1GCZSZgf1W55MFAG6/Sw14KeaAnqv0NKdQ=="], + + "@vitest/mocker": ["@vitest/mocker@4.1.8", "", { "dependencies": { "@vitest/spy": "4.1.8", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw=="], + + "@vitest/pretty-format": ["@vitest/pretty-format@4.1.8", "", { "dependencies": { "tinyrainbow": "^3.1.0" } }, "sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA=="], + + "@vitest/runner": ["@vitest/runner@4.1.8", "", { "dependencies": { "@vitest/utils": "4.1.8", "pathe": "^2.0.3" } }, "sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg=="], + + "@vitest/snapshot": ["@vitest/snapshot@4.1.8", "", { "dependencies": { "@vitest/pretty-format": "4.1.8", "@vitest/utils": "4.1.8", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ=="], + + "@vitest/spy": ["@vitest/spy@4.1.8", "", {}, "sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA=="], + + "@vitest/utils": ["@vitest/utils@4.1.8", "", { "dependencies": { "@vitest/pretty-format": "4.1.8", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg=="], + "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], "ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], @@ -473,6 +607,10 @@ "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], + + "ast-v8-to-istanbul": ["ast-v8-to-istanbul@1.0.4", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.31", "estree-walker": "^3.0.3", "js-tokens": "^10.0.0" } }, "sha512-0bC0/4bTSrnwdhU3IsZDwEdojvuPrSg59OYZfKsLRtJZ0u8VBx9DebfqqG8bRdCC0I7vjgxmPi41P0lpkhJHtA=="], + "babel-plugin-jsx-dom-expressions": ["babel-plugin-jsx-dom-expressions@0.40.7", "", { "dependencies": { "@babel/helper-module-imports": "7.18.6", "@babel/plugin-syntax-jsx": "^7.18.6", "@babel/types": "^7.20.7", "html-entities": "2.3.3", "parse5": "^7.1.2" }, "peerDependencies": { "@babel/core": "^7.20.12" } }, "sha512-/O6JWUmjv03OI9lL2ry9bUjpD5S3PclM55RRJEyCdcFZ5W2SEA/59d+l2hNsk3gI6kiWRdRPdOtqZmsQzFN1pQ=="], "babel-plugin-module-resolver": ["babel-plugin-module-resolver@5.0.2", "", { "dependencies": { "find-babel-config": "^2.1.1", "glob": "^9.3.3", "pkg-up": "^3.1.0", "reselect": "^4.1.7", "resolve": "^1.22.8" } }, "sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg=="], @@ -501,6 +639,8 @@ "caniuse-lite": ["caniuse-lite@1.0.30001799", "", {}, "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw=="], + "chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], + "commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], "content-disposition": ["content-disposition@1.1.0", "", {}, "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g=="], @@ -545,18 +685,26 @@ "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + "es-module-lexer": ["es-module-lexer@2.1.0", "", {}, "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ=="], + "es-object-atoms": ["es-object-atoms@1.1.2", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw=="], + "esbuild": ["esbuild@0.28.1", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.1", "@esbuild/android-arm": "0.28.1", "@esbuild/android-arm64": "0.28.1", "@esbuild/android-x64": "0.28.1", "@esbuild/darwin-arm64": "0.28.1", "@esbuild/darwin-x64": "0.28.1", "@esbuild/freebsd-arm64": "0.28.1", "@esbuild/freebsd-x64": "0.28.1", "@esbuild/linux-arm": "0.28.1", "@esbuild/linux-arm64": "0.28.1", "@esbuild/linux-ia32": "0.28.1", "@esbuild/linux-loong64": "0.28.1", "@esbuild/linux-mips64el": "0.28.1", "@esbuild/linux-ppc64": "0.28.1", "@esbuild/linux-riscv64": "0.28.1", "@esbuild/linux-s390x": "0.28.1", "@esbuild/linux-x64": "0.28.1", "@esbuild/netbsd-arm64": "0.28.1", "@esbuild/netbsd-x64": "0.28.1", "@esbuild/openbsd-arm64": "0.28.1", "@esbuild/openbsd-x64": "0.28.1", "@esbuild/openharmony-arm64": "0.28.1", "@esbuild/sunos-x64": "0.28.1", "@esbuild/win32-arm64": "0.28.1", "@esbuild/win32-ia32": "0.28.1", "@esbuild/win32-x64": "0.28.1" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw=="], + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], + "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], "eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="], "eventsource-parser": ["eventsource-parser@3.1.0", "", {}, "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg=="], + "expect-type": ["expect-type@1.3.0", "", {}, "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="], + "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], "express-rate-limit": ["express-rate-limit@8.5.2", "", { "dependencies": { "ip-address": "^10.2.0" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A=="], @@ -573,6 +721,8 @@ "fast-wrap-ansi": ["fast-wrap-ansi@0.2.2", "", { "dependencies": { "fast-string-width": "^3.0.2" } }, "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q=="], + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="], "find-babel-config": ["find-babel-config@2.1.2", "", { "dependencies": { "json5": "^2.2.3" } }, "sha512-ZfZp1rQyp4gyuxqt1ZqjFGVeVBvmpURMqdIWXbPRfB97Bf6BzdK/xSIbylEINzQ0kB5tlDQfn9HkNXXWsqTqLg=="], @@ -587,6 +737,8 @@ "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], @@ -601,6 +753,8 @@ "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], @@ -609,6 +763,8 @@ "html-entities": ["html-entities@2.3.3", "", {}, "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="], + "html-escaper": ["html-escaper@2.0.2", "", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="], + "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], @@ -627,6 +783,12 @@ "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + "istanbul-lib-coverage": ["istanbul-lib-coverage@3.2.2", "", {}, "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg=="], + + "istanbul-lib-report": ["istanbul-lib-report@3.0.1", "", { "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" } }, "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw=="], + + "istanbul-reports": ["istanbul-reports@3.2.0", "", { "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA=="], + "jose": ["jose@6.2.3", "", {}, "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw=="], "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], @@ -645,10 +807,40 @@ "kubernetes-types": ["kubernetes-types@1.30.0", "", {}, "sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q=="], + "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], + + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], + "locate-path": ["locate-path@3.0.0", "", { "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A=="], "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "magicast": ["magicast@0.5.3", "", { "dependencies": { "@babel/parser": "^7.29.3", "@babel/types": "^7.29.0", "source-map-js": "^1.2.1" } }, "sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw=="], + + "make-dir": ["make-dir@4.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw=="], + "marked": ["marked@17.0.1", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg=="], "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], @@ -673,6 +865,8 @@ "multipasta": ["multipasta@0.2.7", "", {}, "sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA=="], + "nanoid": ["nanoid@3.3.13", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-sPdqC6ByMVVGvF1ynvvMo0/o+oD1VX7DaHhijt1bFgjvBkHBib4t49GoNDhf2NDta4oeUNlaGbSt5K7qjZ955Q=="], + "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="], @@ -683,6 +877,8 @@ "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + "obug": ["obug@2.1.3", "", {}, "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg=="], + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], @@ -707,6 +903,8 @@ "path-to-regexp": ["path-to-regexp@8.4.2", "", {}, "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA=="], + "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], @@ -715,6 +913,8 @@ "pkg-up": ["pkg-up@3.1.0", "", { "dependencies": { "find-up": "^3.0.0" } }, "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA=="], + "postcss": ["postcss@8.5.15", "", { "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A=="], + "posthog-node": ["posthog-node@5.35.12", "", { "dependencies": { "@posthog/core": "1.30.3" }, "peerDependencies": { "rxjs": "^7.0.0" }, "optionalPeers": ["rxjs"] }, "sha512-WLbeUdSDpERDENBgaDahMo9sqwjo8Gc1f1dnM01HciwdP8OnGlbcVs8zrqjz6Z9GvBnTnRTa0Q2bBQeXrBIeHg=="], "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], @@ -733,6 +933,8 @@ "resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], + "rolldown": ["rolldown@1.0.3", "", { "dependencies": { "@oxc-project/types": "=0.133.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.3", "@rolldown/binding-darwin-arm64": "1.0.3", "@rolldown/binding-darwin-x64": "1.0.3", "@rolldown/binding-freebsd-x64": "1.0.3", "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", "@rolldown/binding-linux-arm64-gnu": "1.0.3", "@rolldown/binding-linux-arm64-musl": "1.0.3", "@rolldown/binding-linux-ppc64-gnu": "1.0.3", "@rolldown/binding-linux-s390x-gnu": "1.0.3", "@rolldown/binding-linux-x64-gnu": "1.0.3", "@rolldown/binding-linux-x64-musl": "1.0.3", "@rolldown/binding-openharmony-arm64": "1.0.3", "@rolldown/binding-wasm32-wasi": "1.0.3", "@rolldown/binding-win32-arm64-msvc": "1.0.3", "@rolldown/binding-win32-x64-msvc": "1.0.3" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g=="], + "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], "s-js": ["s-js@0.4.9", "", {}, "sha512-RtpOm+cM6O0sHg6IA70wH+UC3FZcND+rccBZpBAHzlUgNO2Bm5BN+FnM8+OBxzXdwpKWFwX11JGF0MFRkhSoIQ=="], @@ -763,22 +965,42 @@ "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], + "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], "solid-js": ["solid-js@1.9.12", "", { "dependencies": { "csstype": "^3.1.0", "seroval": "~1.5.0", "seroval-plugins": "~1.5.0" } }, "sha512-QzKaSJq2/iDrWR1As6MHZQ8fQkdOBf8GReYb7L5iKwMGceg7HxDcaOHk0at66tNgn9U2U7dXo8ZZpLIAmGMzgw=="], + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], + "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], + "std-env": ["std-env@4.1.0", "", {}, "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ=="], + "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], "strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], + + "tinyexec": ["tinyexec@1.2.4", "", {}, "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg=="], + + "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], + + "tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], + "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], "toml": ["toml@4.1.1", "", {}, "sha512-EBJnVBr3dTXdA89WVFoAIPUqkBjxPMwRqsfuo1r240tKFHXv3zgca4+NJib/h6TyvGF7vOawz0jGuryJCdNHrw=="], + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "type-is": ["type-is@2.1.0", "", { "dependencies": { "content-type": "^2.0.0", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA=="], "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], @@ -793,12 +1015,18 @@ "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], + "vite": ["vite@8.0.16", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.15", "rolldown": "1.0.3", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.18", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw=="], + + "vitest": ["vitest@4.1.8", "", { "dependencies": { "@vitest/expect": "4.1.8", "@vitest/mocker": "4.1.8", "@vitest/pretty-format": "4.1.8", "@vitest/runner": "4.1.8", "@vitest/snapshot": "4.1.8", "@vitest/spy": "4.1.8", "@vitest/utils": "4.1.8", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.1.8", "@vitest/browser-preview": "4.1.8", "@vitest/browser-webdriverio": "4.1.8", "@vitest/coverage-istanbul": "4.1.8", "@vitest/coverage-v8": "4.1.8", "@vitest/ui": "4.1.8", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/coverage-istanbul", "@vitest/coverage-v8", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig=="], + "vscode-jsonrpc": ["vscode-jsonrpc@8.2.1", "", {}, "sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ=="], "web-tree-sitter": ["web-tree-sitter@0.25.10", "", { "peerDependencies": { "@types/emscripten": "^1.40.0" }, "optionalPeers": ["@types/emscripten"] }, "sha512-Y09sF44/13XvgVKgO2cNDw5rGk6s26MgoZPXLESvMXeefBf7i6/73eFurre0IsTW6E14Y0ArIzhUMmjoc7xyzA=="], "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], @@ -817,8 +1045,12 @@ "@opencode-ai/plugin/zod": ["zod@4.1.8", "", {}, "sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ=="], + "ast-v8-to-istanbul/js-tokens": ["js-tokens@10.0.0", "", {}, "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q=="], + "babel-plugin-jsx-dom-expressions/@babel/helper-module-imports": ["@babel/helper-module-imports@7.18.6", "", { "dependencies": { "@babel/types": "^7.18.6" } }, "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA=="], + "make-dir/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], + "parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], diff --git a/bunfig.toml b/bunfig.toml index 58e617f3591..f2555a34a0c 100644 --- a/bunfig.toml +++ b/bunfig.toml @@ -1,6 +1,6 @@ [test] preload = ["./test-setup.ts"] -pathIgnorePatterns = ["packages/web/**", "packages/lsp-tools-mcp/**", "packages/lsp-daemon/**", "packages/omo-codex/plugin/**", "packages/omo-codex/scripts/**"] +pathIgnorePatterns = ["packages/web/**", "packages/lsp-tools-mcp/**", "packages/lsp-daemon/**", "packages/omo-codex/plugin/**", "packages/omo-codex/scripts/**", "packages/omo-native/**", "packages/senpi/**"] [loader] ".md" = "text" diff --git a/package.json b/package.json index 0be0b11c8a3..941961a6b1a 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "packages/skills-loader-core", "packages/agents-md-core", "packages/shared-skills", + "packages/omo-native", "packages/omo-codex", "packages/omo-opencode" ], @@ -78,6 +79,7 @@ }, "scripts": { "build": "bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && bun run build:codex-plugin && bun build packages/omo-opencode/src/index.ts --outdir dist --target bun --format esm --external zod && bun build packages/omo-opencode/src/tui.ts --outdir dist --target bun --format esm --external @opentui/core --external @opentui/keymap --external @opentui/solid && bun run build:shared-skills-assets && bun run build:node-require-shim && tsc --emitDeclarationOnly && bun build packages/omo-opencode/src/cli/index.ts --outdir dist/cli --target bun --format esm && bun run build:cli-node && bun run build:codex-install && bun run build:schema", + "build:native": "bun run --cwd packages/omo-native build", "build:cli-node": "bun run script/build-cli-node.ts", "build:codex-install": "bun run script/build-codex-install.ts", "build:codex-plugin": "npm --prefix packages/omo-codex/plugin ci && bun run --cwd packages/omo-codex/plugin build", @@ -95,7 +97,7 @@ "prepublishOnly": "bun run clean && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && bun run build", "test:model-capabilities": "bun test packages/model-core/src/model-capability-aliases.test.ts packages/model-core/src/model-capability-guardrails.test.ts packages/model-core/src/model-capabilities.test.ts packages/omo-opencode/src/cli/doctor/checks/model-resolution.test.ts --bail", "typecheck": "tsgo --noEmit && bun run typecheck:script && bun run typecheck:packages", - "typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json", + "typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-native/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json", "typecheck:script": "tsgo --noEmit -p script/tsconfig.json", "test": "bun test", "test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && bun run --cwd packages/omo-codex/plugin build && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs", diff --git a/packages/omo-native/build.mjs b/packages/omo-native/build.mjs new file mode 100644 index 00000000000..2e8b2f74d8e --- /dev/null +++ b/packages/omo-native/build.mjs @@ -0,0 +1,23 @@ +import { build } from "esbuild" +import { resolve } from "node:path" +import { fileURLToPath } from "node:url" + +const packageRoot = fileURLToPath(new URL(".", import.meta.url)) + +await build({ + entryPoints: [ + resolve(packageRoot, "src/index.ts") + ], + bundle: true, + format: "esm", + platform: "node", + target: "node24", + outfile: resolve(packageRoot, "dist/index.js"), + external: [ + "@code-yeongyu/senpi", + "@earendil-works/pi-agent-core", + "@earendil-works/pi-ai", + "@earendil-works/pi-*", + "typebox" + ] +}) diff --git a/packages/omo-native/package.json b/packages/omo-native/package.json new file mode 100644 index 00000000000..5f41c1d7e9e --- /dev/null +++ b/packages/omo-native/package.json @@ -0,0 +1,24 @@ +{ + "name": "@oh-my-opencode/omo-native", + "type": "module", + "private": true, + "pi": { + "extensions": [ + "./dist/index.js" + ] + }, + "scripts": { + "build": "node build.mjs", + "test": "vitest run", + "typecheck": "tsgo --noEmit -p tsconfig.json" + }, + "dependencies": { + "@oh-my-opencode/utils": "workspace:*" + }, + "devDependencies": { + "@typescript/native-preview": "7.0.0-dev.20260518.1", + "bun-types": "1.3.14", + "esbuild": "0.28.1", + "vitest": "4.1.8" + } +} diff --git a/packages/omo-native/src/__tests__/seam-boundary-audit.test.ts b/packages/omo-native/src/__tests__/seam-boundary-audit.test.ts new file mode 100644 index 00000000000..af09c1adab7 --- /dev/null +++ b/packages/omo-native/src/__tests__/seam-boundary-audit.test.ts @@ -0,0 +1,144 @@ +import { existsSync } from "node:fs" +import { readdir, readFile } from "node:fs/promises" +import path from "node:path" +import { fileURLToPath } from "node:url" +import { describe, expect, it } from "vitest" + +type ImportHit = { + readonly filePath: string + readonly lineNumber: number + readonly statement: string + readonly specifier: string +} + +const TEST_DIR = path.dirname(fileURLToPath(import.meta.url)) +const SRC_ROOT = path.resolve(TEST_DIR, "..") +const SENPI_SEAM_ROOT = path.join(SRC_ROOT, "senpi") +const TEST_ROOT = path.join(SRC_ROOT, "__tests__") + +function isInsideDirectory(filePath: string, directory: string): boolean { + const relativePath = path.relative(directory, filePath) + return relativePath === "" || (!relativePath.startsWith("..") && !path.isAbsolute(relativePath)) +} + +function formatAuditHits(hits: readonly ImportHit[]): string { + if (hits.length === 0) { + return "No raw senpi/pi imports found." + } + + return hits + .map((hit) => `${path.relative(SRC_ROOT, hit.filePath)}:${hit.lineNumber} imports ${hit.specifier} via ${hit.statement}`) + .join("\n") +} + +function lineNumberForIndex(contents: string, index: number): number { + return contents.slice(0, index).split("\n").length +} + +function isRawSenpiOrPiSpecifier(specifier: string): boolean { + return ( + specifier.startsWith("@earendil-works/pi") + || specifier.startsWith("@earendil-works/senpi") + || specifier === "senpi" + || specifier.startsWith("senpi/") + || specifier.startsWith("@senpi/") + || specifier === "packages/senpi" + || specifier.startsWith("packages/senpi/") + || specifier.includes("packages/senpi/") + || /(?:^|\/)\.\.\/senpi(?:\/|$)/.test(specifier) + ) +} + +async function listTypeScriptFiles(directory: string): Promise { + if (!existsSync(directory)) { + return [] + } + + const entries = await readdir(directory, { withFileTypes: true }) + const nestedFiles = await Promise.all(entries.map(async (entry) => { + const entryPath = path.join(directory, entry.name) + if (entry.isDirectory()) { + return listTypeScriptFiles(entryPath) + } + + if (entry.isFile() && entry.name.endsWith(".ts")) { + return [entryPath] + } + + return [] + })) + + return nestedFiles.flat().sort() +} + +function collectImportHits(filePath: string, contents: string): readonly ImportHit[] { + const importLikePattern = /\b(?:import|export)\s+(?:type\s+)?(?:[\s\S]*?\s+from\s+)?["']([^"']+)["']/g + const dynamicImportPattern = /\bimport\s*\(\s*["']([^"']+)["']\s*\)/g + const hits: ImportHit[] = [] + + for (const pattern of [importLikePattern, dynamicImportPattern]) { + for (const match of contents.matchAll(pattern)) { + if (typeof match.index !== "number") { + continue + } + + const specifier = match[1] + if (typeof specifier !== "string") { + continue + } + + hits.push({ + filePath, + lineNumber: lineNumberForIndex(contents, match.index), + statement: match[0].replace(/\s+/g, " ").trim(), + specifier, + }) + } + } + + return hits +} + +async function collectRawSenpiOrPiImports(files: readonly string[]): Promise { + const nestedHits = await Promise.all(files.map(async (filePath) => { + const contents = await readFile(filePath, "utf8") + return collectImportHits(filePath, contents).filter((hit) => isRawSenpiOrPiSpecifier(hit.specifier)) + })) + + return nestedHits.flat() +} + +function isTypeLayerImport(hit: ImportHit): boolean { + return /\b(?:import|export)\s+type\b/.test(hit.statement) +} + +describe("omo-native seam boundary audit", () => { + it("rejects direct senpi/pi imports outside src/senpi", async () => { + // given + const sourceFiles = await listTypeScriptFiles(SRC_ROOT) + const filesOutsideSeam = sourceFiles.filter((filePath) => ( + !isInsideDirectory(filePath, SENPI_SEAM_ROOT) + && !isInsideDirectory(filePath, TEST_ROOT) + )) + + // when + const rawImports = await collectRawSenpiOrPiImports(filesOutsideSeam) + + // then + expect(rawImports, formatAuditHits(rawImports)).toEqual([]) + }) + + it("requires the senpi seam to own at least one real senpi type-layer import", async () => { + // given + const seamFiles = await listTypeScriptFiles(SENPI_SEAM_ROOT) + + // when + const typeLayerImports = (await collectRawSenpiOrPiImports(seamFiles)).filter(isTypeLayerImport) + + // then + expect( + typeLayerImports.length, + "Expected src/senpi/** to contain at least one `import type` or `export type` from the real senpi/pi type layer. This Wave 0 RED proves the seam is still a stub.", + ).toBeGreaterThan(0) + }) +}) diff --git a/packages/omo-native/src/create-extension.ts b/packages/omo-native/src/create-extension.ts new file mode 100644 index 00000000000..11c0f95fdd6 --- /dev/null +++ b/packages/omo-native/src/create-extension.ts @@ -0,0 +1,5 @@ +import type { ExtensionAPI } from "./senpi/types.js" + +export function createOmoNativeExtension(pi: ExtensionAPI): void { + void pi +} diff --git a/packages/omo-native/src/index.ts b/packages/omo-native/src/index.ts new file mode 100644 index 00000000000..bc717272dfc --- /dev/null +++ b/packages/omo-native/src/index.ts @@ -0,0 +1 @@ +export { createOmoNativeExtension as default } from "./create-extension.js" diff --git a/packages/omo-native/src/senpi/types.ts b/packages/omo-native/src/senpi/types.ts new file mode 100644 index 00000000000..15866f5a849 --- /dev/null +++ b/packages/omo-native/src/senpi/types.ts @@ -0,0 +1,15 @@ +// Wave 0 keeps this seam local because Senpi's full ExtensionAPI currently lives +// under coding-agent internals. Wave 1 should replace this with the public Senpi type. +export type ExtensionFactory = (pi: ExtensionAPI) => void + +export interface ExtensionAPI { + readonly on?: (event: string, handler: ExtensionHandler) => void + readonly registerTool?: (tool: ToolDefinition) => void +} + +export type ExtensionHandler = (event: unknown) => void | Promise + +export interface ToolDefinition { + readonly name: string + readonly description?: string +} diff --git a/packages/omo-native/tsconfig.json b/packages/omo-native/tsconfig.json new file mode 100644 index 00000000000..91308a374af --- /dev/null +++ b/packages/omo-native/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "target": "ES2024", + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true, + "noFallthroughCasesInSwitch": true, + "noPropertyAccessFromIndexSignature": true, + "forceConsistentCasingInFileNames": true, + "verbatimModuleSyntax": true, + "isolatedModules": true, + "esModuleInterop": true, + "skipLibCheck": true, + "lib": [ + "ES2024" + ], + "types": [ + "bun-types" + ] + }, + "include": [ + "src/**/*.ts" + ], + "exclude": [ + "dist", + "node_modules" + ] +} diff --git a/packages/omo-native/vitest.config.ts b/packages/omo-native/vitest.config.ts new file mode 100644 index 00000000000..5b78c7816cc --- /dev/null +++ b/packages/omo-native/vitest.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from "vitest/config" + +export default defineConfig({ + test: { + environment: "node", + include: [ + "src/**/*.test.ts" + ] + } +}) diff --git a/packages/senpi b/packages/senpi new file mode 160000 index 00000000000..4ce93bcfbc7 --- /dev/null +++ b/packages/senpi @@ -0,0 +1 @@ +Subproject commit 4ce93bcfbc7c681a709f2579f664b1bbf92fbc1b diff --git a/script/package-registration-audit.test.ts b/script/package-registration-audit.test.ts index 4e70a095b8f..31da49d105b 100644 --- a/script/package-registration-audit.test.ts +++ b/script/package-registration-audit.test.ts @@ -29,6 +29,7 @@ const mcpPackagePaths: readonly string[] = [ "packages/lsp-daemon", "packages/lsp-tools-mcp", ] as const +const nativePackagePaths: readonly string[] = ["packages/omo-native"] as const const adapterPackagePaths: readonly string[] = ["packages/omo-codex", "packages/omo-opencode"] as const const skillPackagePaths: readonly string[] = ["packages/shared-skills"] as const const shimSourceRoots: readonly string[] = ["packages/omo-opencode/src", "packages/omo-codex/src"] as const @@ -162,6 +163,7 @@ function isManagedWorkspacePackage(path: string): boolean { return ( corePackagePaths.includes(path) || mcpPackagePaths.includes(path) || + nativePackagePaths.includes(path) || adapterPackagePaths.includes(path) || skillPackagePaths.includes(path) ) @@ -212,7 +214,7 @@ describe("package registration audit", () => { const expectedDevDependencyNames = ( await Promise.all( managedWorkspacePaths - .filter((path) => path !== "packages/omo-opencode") + .filter((path) => path !== "packages/omo-opencode" && !nativePackagePaths.includes(path)) .map((path) => readManifest(join(path, "package.json")).then((manifest) => manifest.name)), ) ).toSorted()