@harness-mix/cli 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/LICENSE +202 -0
- package/NOTICE +14 -0
- package/README.md +262 -0
- package/Start-Codex.cmd +5 -0
- package/config/codex-desktop-compatibility.json +29 -0
- package/docs/chatgpt-web-sidebar.md +27 -0
- package/docs/cross-platform.md +73 -0
- package/docs/harness-management.md +44 -0
- package/docs/images/codex-desktop-home.png +0 -0
- package/docs/images/codex-desktop-session.png +0 -0
- package/docs/kiro-cursor-integration.md +3 -0
- package/docs/multi-agent-collaboration.md +89 -0
- package/docs/native-acp.md +122 -0
- package/docs/native-codex.md +95 -0
- package/docs/superpowers/specs/2026-09-13-native-hardening-design.md +326 -0
- package/licenses/codex-host-MIT.txt +21 -0
- package/output/native-build/desktop-controller.mjs +1466 -0
- package/output/native-build/harness-mix-appx.exe +0 -0
- package/output/native-build/harness-mix-secret.exe +0 -0
- package/output/native-build/harness-mix-shim.exe +0 -0
- package/output/native-build/renderer-extension.js +29380 -0
- package/package.json +168 -0
- package/scripts/acp-capabilities-probe.cjs +100 -0
- package/scripts/adapters-test.cjs +17 -0
- package/scripts/antigravity-adapter-test.cjs +529 -0
- package/scripts/architecture-test.cjs +62 -0
- package/scripts/build-native.cjs +56 -0
- package/scripts/catalog-test.cjs +25 -0
- package/scripts/cdp-eval.cjs +40 -0
- package/scripts/cdp-watch.cjs +36 -0
- package/scripts/check.cjs +23 -0
- package/scripts/codebuddy-migration-test.cjs +47 -0
- package/scripts/codex-adapter-test.cjs +83 -0
- package/scripts/collaboration-recovery-test.cjs +111 -0
- package/scripts/collaboration-test.cjs +108 -0
- package/scripts/collaboration-ui-smoke.cjs +57 -0
- package/scripts/concurrency-layers-test.cjs +181 -0
- package/scripts/contracts-test.cjs +105 -0
- package/scripts/core-concurrency-test.cjs +103 -0
- package/scripts/core-replay-test.cjs +179 -0
- package/scripts/core-runtime-test.cjs +104 -0
- package/scripts/core-services-test.cjs +50 -0
- package/scripts/determinism-test.cjs +36 -0
- package/scripts/diagnostics.cjs +63 -0
- package/scripts/docs-command-test.cjs +49 -0
- package/scripts/dsh-adapter-test.cjs +90 -0
- package/scripts/dsh-collaboration-acp-test.cjs +19 -0
- package/scripts/dsh-native.cjs +9 -0
- package/scripts/dsh-native.cmd +2 -0
- package/scripts/e2e-codex.cjs +82 -0
- package/scripts/e2e-collaboration.cjs +60 -0
- package/scripts/e2e-core-files.cjs +58 -0
- package/scripts/e2e-core-fork.cjs +49 -0
- package/scripts/e2e-core-resume.cjs +49 -0
- package/scripts/e2e-delegate.cjs +38 -0
- package/scripts/e2e-dsh.cjs +23 -0
- package/scripts/e2e-native-acp.cjs +42 -0
- package/scripts/e2e-native-commands.cjs +54 -0
- package/scripts/e2e-native-host.cjs +144 -0
- package/scripts/e2e-openclaw-image.cjs +59 -0
- package/scripts/e2e-openclaw.cjs +21 -0
- package/scripts/e2e-pi.cjs +23 -0
- package/scripts/e2e-shadow.cjs +52 -0
- package/scripts/fixture-capture.cjs +103 -0
- package/scripts/harness-health-check.cjs +72 -0
- package/scripts/kiro-cursor-adapters-test.cjs +82 -0
- package/scripts/launch-codex.cjs +5 -0
- package/scripts/native-acp-depth-test.cjs +189 -0
- package/scripts/native-compatibility-test.cjs +42 -0
- package/scripts/native-config-test.cjs +25 -0
- package/scripts/native-file-change-test.cjs +94 -0
- package/scripts/native-host.cjs +8 -0
- package/scripts/native-images-test.cjs +56 -0
- package/scripts/native-job-object-test.cjs +83 -0
- package/scripts/native-protocol-test.cjs +258 -0
- package/scripts/native-rollback-test.cjs +46 -0
- package/scripts/native-secret-test.cjs +57 -0
- package/scripts/native-shim-test.cjs +41 -0
- package/scripts/native-sidebar-test.cjs +88 -0
- package/scripts/native-ui-smoke.cjs +94 -0
- package/scripts/native-update-apply-test.cjs +215 -0
- package/scripts/native-updater-test.cjs +109 -0
- package/scripts/native-vendor-adapters-test.cjs +88 -0
- package/scripts/openclaw-acp-probe.cjs +39 -0
- package/scripts/openclaw-adapter-test.cjs +180 -0
- package/scripts/openclaw-models-probe.cjs +13 -0
- package/scripts/platform-test.cjs +62 -0
- package/scripts/projector-test.cjs +144 -0
- package/scripts/sequence-test.cjs +57 -0
- package/scripts/shadow-test.cjs +154 -0
- package/scripts/support/legacy-projection.cjs +95 -0
- package/scripts/support/legacy-transcript.cjs +48 -0
- package/scripts/support/parity-observer.cjs +27 -0
- package/scripts/support/shadow-comparator.cjs +62 -0
- package/scripts/support/shadow.cjs +114 -0
- package/scripts/switch-harness-test.cjs +145 -0
- package/scripts/thread-title-test.cjs +98 -0
- package/scripts/tool-concurrency-regression-test.cjs +119 -0
- package/scripts/transcript-test.cjs +24 -0
- package/scripts/turn-manager-test.cjs +91 -0
- package/scripts/workspace-test.cjs +86 -0
- package/src/assets/brand-harness-mix.png +0 -0
- package/src/assets/icons/antigravity-color.svg +1 -0
- package/src/assets/icons/claude-color.svg +1 -0
- package/src/assets/icons/codebuddy-color.svg +1 -0
- package/src/assets/icons/codex-color.svg +1 -0
- package/src/assets/icons/codex-harness.svg +1 -0
- package/src/assets/icons/cursor-cli-color.svg +1 -0
- package/src/assets/icons/cursor.svg +1 -0
- package/src/assets/icons/deepseek-color.svg +1 -0
- package/src/assets/icons/grok-color.svg +1 -0
- package/src/assets/icons/hermes-color.svg +1 -0
- package/src/assets/icons/kiro-cli-color.svg +11 -0
- package/src/assets/icons/model-astra.svg +1 -0
- package/src/assets/icons/model-claude.svg +1 -0
- package/src/assets/icons/model-deepseek.svg +1 -0
- package/src/assets/icons/model-gemini.svg +1 -0
- package/src/assets/icons/model-grok.svg +1 -0
- package/src/assets/icons/model-hunyuan.svg +1 -0
- package/src/assets/icons/model-kimi.svg +1 -0
- package/src/assets/icons/model-minimax.svg +1 -0
- package/src/assets/icons/model-openai.svg +1 -0
- package/src/assets/icons/model-qwen-color.svg +1 -0
- package/src/assets/icons/model-xiaomimimo.svg +1 -0
- package/src/assets/icons/model-zai.svg +1 -0
- package/src/assets/icons/omp-color.svg +1 -0
- package/src/assets/icons/openclaw-color.svg +1 -0
- package/src/assets/icons/opencode-color.svg +1 -0
- package/src/assets/icons/pi.svg +1 -0
- package/src/assets/icons/pinumber1_80899.svg +48 -0
- package/src/assets/icons/qoder-color.svg +1 -0
- package/src/assets/icons/trae-color.svg +1 -0
- package/src/assets/icons/workbuddy-color.svg +1 -0
- package/src/assets/icons/zcode-color.svg +1 -0
- package/src/main/adapters/acp-interactions.js +132 -0
- package/src/main/adapters/acp.js +191 -0
- package/src/main/adapters/antigravity.js +1368 -0
- package/src/main/adapters/claude.js +520 -0
- package/src/main/adapters/codebuddy-history.js +90 -0
- package/src/main/adapters/codebuddy.js +2 -0
- package/src/main/adapters/codex-app-server.js +119 -0
- package/src/main/adapters/codex.js +559 -0
- package/src/main/adapters/cursor.js +2 -0
- package/src/main/adapters/dsh-web-host.js +202 -0
- package/src/main/adapters/dsh.js +446 -0
- package/src/main/adapters/grok.js +277 -0
- package/src/main/adapters/hermes.js +24 -0
- package/src/main/adapters/index.js +32 -0
- package/src/main/adapters/kiro-history.js +43 -0
- package/src/main/adapters/kiro.js +2 -0
- package/src/main/adapters/native-acp-command.js +47 -0
- package/src/main/adapters/native-acp.js +435 -0
- package/src/main/adapters/omp.js +12 -0
- package/src/main/adapters/openclaw-gateway.js +211 -0
- package/src/main/adapters/openclaw.js +337 -0
- package/src/main/adapters/opencode-server.js +73 -0
- package/src/main/adapters/opencode.js +178 -0
- package/src/main/adapters/pi-family.js +342 -0
- package/src/main/adapters/pi-usage.js +24 -0
- package/src/main/adapters/pi.js +10 -0
- package/src/main/adapters/qoder.js +7 -0
- package/src/main/adapters/trae.js +7 -0
- package/src/main/adapters/workbuddy.js +2 -0
- package/src/main/adapters/zcode.js +7 -0
- package/src/main/harness-adapter/contract-test.js +53 -0
- package/src/main/harness-adapter/contract.js +34 -0
- package/src/main/harness-adapter/event-normalizer.js +252 -0
- package/src/main/harness-adapter/fixture-recorder.js +56 -0
- package/src/main/harness-adapter/index.js +6 -0
- package/src/main/harness-adapter/manifest.js +44 -0
- package/src/main/host/collaboration-mcp.cjs +35 -0
- package/src/main/host/collaboration-pi.mjs +17 -0
- package/src/main/host/collaboration-tools.js +16 -0
- package/src/main/host/collaboration-worktree.js +151 -0
- package/src/main/host/collaboration.js +264 -0
- package/src/main/host/core-session.js +81 -0
- package/src/main/host/handoff.js +46 -0
- package/src/main/host/history-import.js +55 -0
- package/src/main/host/jsonl.js +116 -0
- package/src/main/host/native-history.js +79 -0
- package/src/main/host/runtime.js +1050 -0
- package/src/main/host/session-history.js +63 -0
- package/src/main/host/store.js +75 -0
- package/src/main/native/compatibility.js +56 -0
- package/src/main/native/config.js +55 -0
- package/src/main/native/host.js +153 -0
- package/src/main/native/icons.js +105 -0
- package/src/main/native/input.js +43 -0
- package/src/main/native/launcher.js +188 -0
- package/src/main/native/platform.js +64 -0
- package/src/main/native/process-utils.js +57 -0
- package/src/main/native/protocol.js +836 -0
- package/src/main/native/redact.js +35 -0
- package/src/main/native/rs/Cargo.lock +15 -0
- package/src/main/native/rs/Cargo.toml +9 -0
- package/src/main/native/rs/crates/appx/Cargo.toml +13 -0
- package/src/main/native/rs/crates/appx/src/main.rs +309 -0
- package/src/main/native/rs/crates/secret/Cargo.toml +10 -0
- package/src/main/native/rs/crates/secret/src/main.rs +262 -0
- package/src/main/native/rs/crates/shim/Cargo.toml +10 -0
- package/src/main/native/rs/crates/shim/src/job.rs +83 -0
- package/src/main/native/rs/crates/shim/src/main.rs +257 -0
- package/src/main/native/secure-store.js +59 -0
- package/src/main/native/thread-list.js +38 -0
- package/src/main/native/update-state.js +110 -0
- package/src/main/native/updater.js +394 -0
- package/src/main/native/usage.js +105 -0
- package/src/main/protocol-core/capability-manager.js +16 -0
- package/src/main/protocol-core/event-router.js +32 -0
- package/src/main/protocol-core/file-change-projector.js +45 -0
- package/src/main/protocol-core/index.js +8 -0
- package/src/main/protocol-core/interaction-router.js +30 -0
- package/src/main/protocol-core/projector.js +238 -0
- package/src/main/protocol-core/protocol-core.js +132 -0
- package/src/main/protocol-core/sequence-validator.js +44 -0
- package/src/main/protocol-core/thread-manager.js +50 -0
- package/src/main/protocol-core/turn-manager.js +63 -0
- package/src/main/shared-contracts/capability.js +35 -0
- package/src/main/shared-contracts/event.js +55 -0
- package/src/main/shared-contracts/ids.js +12 -0
- package/src/main/shared-contracts/index.js +11 -0
- package/src/main/shared-contracts/interaction.js +37 -0
- package/src/main/shared-contracts/item.js +51 -0
- package/src/main/shared-contracts/native-ref.js +24 -0
- package/src/main/shared-contracts/thread.js +36 -0
- package/src/main/shared-contracts/turn.js +54 -0
- package/src/main/workspace/core-review.js +53 -0
- package/src/main/workspace/diff.js +27 -0
- package/src/main/workspace/file-changes.js +21 -0
- package/src/main/workspace/files.js +76 -0
- package/src/main/workspace/review-controller.js +102 -0
- package/src/main/workspace/review.js +88 -0
- package/src/native-ui/LICENSE +21 -0
- package/src/native-ui/README.md +16 -0
- package/src/native-ui/desktop-control/dist/cdp-client.d.ts +53 -0
- package/src/native-ui/desktop-control/dist/cdp-client.d.ts.map +1 -0
- package/src/native-ui/desktop-control/dist/cdp-client.js +258 -0
- package/src/native-ui/desktop-control/dist/cdp-client.js.map +1 -0
- package/src/native-ui/desktop-control/dist/contract-audit.d.ts +73 -0
- package/src/native-ui/desktop-control/dist/contract-audit.d.ts.map +1 -0
- package/src/native-ui/desktop-control/dist/contract-audit.js +152 -0
- package/src/native-ui/desktop-control/dist/contract-audit.js.map +1 -0
- package/src/native-ui/desktop-control/dist/controller-attachment-server.d.ts +10 -0
- package/src/native-ui/desktop-control/dist/controller-attachment-server.d.ts.map +1 -0
- package/src/native-ui/desktop-control/dist/controller-attachment-server.js +77 -0
- package/src/native-ui/desktop-control/dist/controller-attachment-server.js.map +1 -0
- package/src/native-ui/desktop-control/dist/index.d.ts +21 -0
- package/src/native-ui/desktop-control/dist/index.d.ts.map +1 -0
- package/src/native-ui/desktop-control/dist/index.js +14 -0
- package/src/native-ui/desktop-control/dist/index.js.map +1 -0
- package/src/native-ui/desktop-control/dist/main-process-title-policy.d.ts +24 -0
- package/src/native-ui/desktop-control/dist/main-process-title-policy.d.ts.map +1 -0
- package/src/native-ui/desktop-control/dist/main-process-title-policy.js +284 -0
- package/src/native-ui/desktop-control/dist/main-process-title-policy.js.map +1 -0
- package/src/native-ui/desktop-control/dist/production-controller.d.ts +32 -0
- package/src/native-ui/desktop-control/dist/production-controller.d.ts.map +1 -0
- package/src/native-ui/desktop-control/dist/production-controller.js +294 -0
- package/src/native-ui/desktop-control/dist/production-controller.js.map +1 -0
- package/src/native-ui/desktop-control/dist/release-main.d.ts +2 -0
- package/src/native-ui/desktop-control/dist/release-main.d.ts.map +1 -0
- package/src/native-ui/desktop-control/dist/release-main.js +17 -0
- package/src/native-ui/desktop-control/dist/release-main.js.map +1 -0
- package/src/native-ui/desktop-control/dist/renderer-cdp-control-session.d.ts +49 -0
- package/src/native-ui/desktop-control/dist/renderer-cdp-control-session.d.ts.map +1 -0
- package/src/native-ui/desktop-control/dist/renderer-cdp-control-session.js +214 -0
- package/src/native-ui/desktop-control/dist/renderer-cdp-control-session.js.map +1 -0
- package/src/native-ui/desktop-control/dist/renderer-control-session.d.ts +79 -0
- package/src/native-ui/desktop-control/dist/renderer-control-session.d.ts.map +1 -0
- package/src/native-ui/desktop-control/dist/renderer-control-session.js +366 -0
- package/src/native-ui/desktop-control/dist/renderer-control-session.js.map +1 -0
- package/src/native-ui/desktop-control/dist/renderer-dom.d.ts +24 -0
- package/src/native-ui/desktop-control/dist/renderer-dom.d.ts.map +1 -0
- package/src/native-ui/desktop-control/dist/renderer-dom.js +110 -0
- package/src/native-ui/desktop-control/dist/renderer-dom.js.map +1 -0
- package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-policy.d.ts +20 -0
- package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-policy.d.ts.map +1 -0
- package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-policy.js +173 -0
- package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-policy.js.map +1 -0
- package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-runtime.d.ts +38 -0
- package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-runtime.d.ts.map +1 -0
- package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-runtime.js +637 -0
- package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-runtime.js.map +1 -0
- package/src/native-ui/desktop-control/dist/tsconfig.tsbuildinfo +1 -0
- package/src/native-ui/desktop-control/package.json +22 -0
- package/src/native-ui/desktop-control/scripts/build-release.mjs +94 -0
- package/src/native-ui/desktop-control/src/cdp-client.ts +347 -0
- package/src/native-ui/desktop-control/src/contract-audit.ts +291 -0
- package/src/native-ui/desktop-control/src/controller-attachment-server.ts +93 -0
- package/src/native-ui/desktop-control/src/index.ts +91 -0
- package/src/native-ui/desktop-control/src/main-process-title-policy.ts +372 -0
- package/src/native-ui/desktop-control/src/production-controller.ts +347 -0
- package/src/native-ui/desktop-control/src/release-main.ts +18 -0
- package/src/native-ui/desktop-control/src/renderer-cdp-control-session.ts +358 -0
- package/src/native-ui/desktop-control/src/renderer-control-session.ts +595 -0
- package/src/native-ui/desktop-control/src/renderer-dom.ts +144 -0
- package/src/native-ui/desktop-control/src/renderer-draft-prewarm-policy.ts +217 -0
- package/src/native-ui/desktop-control/src/renderer-draft-prewarm-runtime.ts +749 -0
- package/src/native-ui/desktop-control/test/cdp-client.test.ts +157 -0
- package/src/native-ui/desktop-control/test/contract-audit.test.ts +56 -0
- package/src/native-ui/desktop-control/test/controller-attachment-server.test.ts +98 -0
- package/src/native-ui/desktop-control/test/index.test.ts +11 -0
- package/src/native-ui/desktop-control/test/main-process-title-policy.test.ts +168 -0
- package/src/native-ui/desktop-control/test/production-controller.test.ts +392 -0
- package/src/native-ui/desktop-control/test/renderer-cdp-control-session.test.ts +205 -0
- package/src/native-ui/desktop-control/test/renderer-control-session.test.ts +451 -0
- package/src/native-ui/desktop-control/test/renderer-dom.test.ts +62 -0
- package/src/native-ui/desktop-control/test/renderer-draft-prewarm-policy.test.ts +1029 -0
- package/src/native-ui/desktop-control/tsconfig.json +12 -0
- package/src/native-ui/renderer-extension/dist/types/agent-group-preference.d.ts +39 -0
- package/src/native-ui/renderer-extension/dist/types/agent-group-preference.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/agent-selection-state.d.ts +85 -0
- package/src/native-ui/renderer-extension/dist/types/agent-selection-state.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/audit-entry.d.ts +2 -0
- package/src/native-ui/renderer-extension/dist/types/audit-entry.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/codex-locale-adapter.d.ts +23 -0
- package/src/native-ui/renderer-extension/dist/types/codex-locale-adapter.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/collaboration-icon.d.ts +2 -0
- package/src/native-ui/renderer-extension/dist/types/collaboration-icon.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/contract-audit.d.ts +37 -0
- package/src/native-ui/renderer-extension/dist/types/contract-audit.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/harness-mix-icons.d.ts +3 -0
- package/src/native-ui/renderer-extension/dist/types/harness-mix-icons.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/harness-mix-settings.d.ts +3 -0
- package/src/native-ui/renderer-extension/dist/types/harness-mix-settings.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/index.d.ts +51 -0
- package/src/native-ui/renderer-extension/dist/types/index.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/install-renderer-binding.d.ts +4 -0
- package/src/native-ui/renderer-extension/dist/types/install-renderer-binding.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/probe-entry.d.ts +2 -0
- package/src/native-ui/renderer-extension/dist/types/probe-entry.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/production-entry.d.ts +9 -0
- package/src/native-ui/renderer-extension/dist/types/production-entry.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-agent-icon.d.ts +4 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-agent-icon.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-agent-picker.d.ts +62 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-agent-picker.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-binding-probe.d.ts +70 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-binding-probe.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-options.d.ts +34 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-options.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-state.d.ts +19 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-state.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-collab-cards.d.ts +40 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-collab-cards.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-composer-dom.d.ts +82 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-composer-dom.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-credits-control.d.ts +21 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-credits-control.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-external-steering.d.ts +7 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-external-steering.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-fork-control.d.ts +34 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-fork-control.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-claim.d.ts +4 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-claim.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-control.d.ts +15 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-control.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-localization.d.ts +25 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-localization.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-mentions.d.ts +23 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-mentions.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts +102 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-model-picker-positioning.d.ts +22 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-model-picker-positioning.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-model-picker.d.ts +54 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-model-picker.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-new-thread-preference.d.ts +18 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-new-thread-preference.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-picker.d.ts +42 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-picker.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-preference.d.ts +9 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-preference.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-request-sender.d.ts +9 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-request-sender.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-session-import-client.d.ts +12 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-session-import-client.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-settings-lifecycle.d.ts +18 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-settings-lifecycle.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-sidebar-agent-icons.d.ts +45 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-sidebar-agent-icons.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-transcript-dom.d.ts +23 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-transcript-dom.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-trigger-chip-style.d.ts +3 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-trigger-chip-style.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-usage-control.d.ts +72 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-usage-control.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-list.d.ts +24 -0
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-list.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-page.d.ts +18 -0
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-page.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-usage.d.ts +27 -0
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-usage.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/connections-page.d.ts +44 -0
- package/src/native-ui/renderer-extension/dist/types/settings/connections-page.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/core.d.ts +38 -0
- package/src/native-ui/renderer-extension/dist/types/settings/core.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/harness-accounts.d.ts +21 -0
- package/src/native-ui/renderer-extension/dist/types/settings/harness-accounts.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/icons.d.ts +6 -0
- package/src/native-ui/renderer-extension/dist/types/settings/icons.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/localization.d.ts +247 -0
- package/src/native-ui/renderer-extension/dist/types/settings/localization.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts +23 -0
- package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/release-notes.d.ts +4 -0
- package/src/native-ui/renderer-extension/dist/types/settings/release-notes.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/session-import-list-controls.d.ts +12 -0
- package/src/native-ui/renderer-extension/dist/types/settings/session-import-list-controls.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/session-import-page.d.ts +8 -0
- package/src/native-ui/renderer-extension/dist/types/settings/session-import-page.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/shell.d.ts +24 -0
- package/src/native-ui/renderer-extension/dist/types/settings/shell.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/trigger.d.ts +45 -0
- package/src/native-ui/renderer-extension/dist/types/settings/trigger.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/update-request.d.ts +6 -0
- package/src/native-ui/renderer-extension/dist/types/settings/update-request.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/tsconfig.tsbuildinfo +1 -0
- package/src/native-ui/renderer-extension/dist/types/versioned-renderer-adapter.d.ts +143 -0
- package/src/native-ui/renderer-extension/dist/types/versioned-renderer-adapter.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/package.json +22 -0
- package/src/native-ui/renderer-extension/src/agent-group-preference.ts +174 -0
- package/src/native-ui/renderer-extension/src/agent-selection-state.ts +627 -0
- package/src/native-ui/renderer-extension/src/assets/README.md +13 -0
- package/src/native-ui/renderer-extension/src/assets/antigravity-agent.svg +1 -0
- package/src/native-ui/renderer-extension/src/assets/codex-agent.png +0 -0
- package/src/native-ui/renderer-extension/src/assets/grok-agent.png +0 -0
- package/src/native-ui/renderer-extension/src/assets/kiro-agent.svg +11 -0
- package/src/native-ui/renderer-extension/src/assets/omp-agent.svg +14 -0
- package/src/native-ui/renderer-extension/src/assets/opencode-agent.png +0 -0
- package/src/native-ui/renderer-extension/src/assets.d.ts +26 -0
- package/src/native-ui/renderer-extension/src/audit-entry.ts +5 -0
- package/src/native-ui/renderer-extension/src/codex-locale-adapter.ts +321 -0
- package/src/native-ui/renderer-extension/src/collaboration-icon.ts +13 -0
- package/src/native-ui/renderer-extension/src/contract-audit.ts +102 -0
- package/src/native-ui/renderer-extension/src/harness-mix-icons.ts +31 -0
- package/src/native-ui/renderer-extension/src/harness-mix-settings.ts +88 -0
- package/src/native-ui/renderer-extension/src/index.ts +275 -0
- package/src/native-ui/renderer-extension/src/install-renderer-binding.ts +30 -0
- package/src/native-ui/renderer-extension/src/probe-entry.ts +4 -0
- package/src/native-ui/renderer-extension/src/production-entry.ts +23 -0
- package/src/native-ui/renderer-extension/src/renderer-agent-icon.ts +146 -0
- package/src/native-ui/renderer-extension/src/renderer-agent-picker.ts +814 -0
- package/src/native-ui/renderer-extension/src/renderer-binding-probe.ts +3002 -0
- package/src/native-ui/renderer-extension/src/renderer-codex-account-options.ts +281 -0
- package/src/native-ui/renderer-extension/src/renderer-codex-account-state.ts +53 -0
- package/src/native-ui/renderer-extension/src/renderer-collab-cards.ts +198 -0
- package/src/native-ui/renderer-extension/src/renderer-composer-dom.ts +782 -0
- package/src/native-ui/renderer-extension/src/renderer-credits-control.ts +520 -0
- package/src/native-ui/renderer-extension/src/renderer-external-steering.ts +339 -0
- package/src/native-ui/renderer-extension/src/renderer-fork-control.ts +273 -0
- package/src/native-ui/renderer-extension/src/renderer-harness-command-claim.ts +64 -0
- package/src/native-ui/renderer-extension/src/renderer-harness-command-control.ts +417 -0
- package/src/native-ui/renderer-extension/src/renderer-harness-localization.ts +144 -0
- package/src/native-ui/renderer-extension/src/renderer-harness-mentions.ts +306 -0
- package/src/native-ui/renderer-extension/src/renderer-model-client.ts +572 -0
- package/src/native-ui/renderer-extension/src/renderer-model-picker-positioning.ts +65 -0
- package/src/native-ui/renderer-extension/src/renderer-model-picker.ts +640 -0
- package/src/native-ui/renderer-extension/src/renderer-new-thread-preference.ts +177 -0
- package/src/native-ui/renderer-extension/src/renderer-permission-mode-picker.ts +413 -0
- package/src/native-ui/renderer-extension/src/renderer-permission-mode-preference.ts +49 -0
- package/src/native-ui/renderer-extension/src/renderer-request-sender.ts +43 -0
- package/src/native-ui/renderer-extension/src/renderer-session-import-client.ts +68 -0
- package/src/native-ui/renderer-extension/src/renderer-settings-lifecycle.ts +239 -0
- package/src/native-ui/renderer-extension/src/renderer-sidebar-agent-icons.ts +457 -0
- package/src/native-ui/renderer-extension/src/renderer-transcript-dom.ts +47 -0
- package/src/native-ui/renderer-extension/src/renderer-trigger-chip-style.ts +52 -0
- package/src/native-ui/renderer-extension/src/renderer-usage-control.ts +633 -0
- package/src/native-ui/renderer-extension/src/settings/accounts-list.ts +236 -0
- package/src/native-ui/renderer-extension/src/settings/accounts-page.ts +585 -0
- package/src/native-ui/renderer-extension/src/settings/accounts-usage.ts +221 -0
- package/src/native-ui/renderer-extension/src/settings/accounts.css +683 -0
- package/src/native-ui/renderer-extension/src/settings/connections-page.ts +1394 -0
- package/src/native-ui/renderer-extension/src/settings/core.ts +158 -0
- package/src/native-ui/renderer-extension/src/settings/harness-accounts.ts +195 -0
- package/src/native-ui/renderer-extension/src/settings/icons.ts +141 -0
- package/src/native-ui/renderer-extension/src/settings/localization.ts +800 -0
- package/src/native-ui/renderer-extension/src/settings/pages.ts +632 -0
- package/src/native-ui/renderer-extension/src/settings/release-notes.ts +222 -0
- package/src/native-ui/renderer-extension/src/settings/session-import-list-controls.ts +128 -0
- package/src/native-ui/renderer-extension/src/settings/session-import-page.ts +461 -0
- package/src/native-ui/renderer-extension/src/settings/shell.css +2238 -0
- package/src/native-ui/renderer-extension/src/settings/shell.ts +329 -0
- package/src/native-ui/renderer-extension/src/settings/trigger.ts +323 -0
- package/src/native-ui/renderer-extension/src/settings/update-request.ts +49 -0
- package/src/native-ui/renderer-extension/src/versioned-renderer-adapter.ts +1289 -0
- package/src/native-ui/renderer-extension/test/agent-selection-state.test.ts +611 -0
- package/src/native-ui/renderer-extension/test/codebuddy-migration.test.ts +22 -0
- package/src/native-ui/renderer-extension/test/codex-locale-adapter.test.ts +152 -0
- package/src/native-ui/renderer-extension/test/contract-audit.test.ts +71 -0
- package/src/native-ui/renderer-extension/test/harness-mix-icons.test.ts +58 -0
- package/src/native-ui/renderer-extension/test/index.test.ts +9 -0
- package/src/native-ui/renderer-extension/test/renderer-agent-icon.test.ts +98 -0
- package/src/native-ui/renderer-extension/test/renderer-agent-picker.test.ts +226 -0
- package/src/native-ui/renderer-extension/test/renderer-binding-probe-host-catalog.test.ts +728 -0
- package/src/native-ui/renderer-extension/test/renderer-binding-probe.test.ts +1290 -0
- package/src/native-ui/renderer-extension/test/renderer-codex-account-state.test.ts +65 -0
- package/src/native-ui/renderer-extension/test/renderer-collab-cards.test.ts +45 -0
- package/src/native-ui/renderer-extension/test/renderer-composer-permissions.test.ts +75 -0
- package/src/native-ui/renderer-extension/test/renderer-credits-control.test.ts +70 -0
- package/src/native-ui/renderer-extension/test/renderer-external-steering-rpc.test.ts +184 -0
- package/src/native-ui/renderer-extension/test/renderer-external-steering.test.ts +279 -0
- package/src/native-ui/renderer-extension/test/renderer-fork-control.test.ts +363 -0
- package/src/native-ui/renderer-extension/test/renderer-harness-command-claim.test.ts +167 -0
- package/src/native-ui/renderer-extension/test/renderer-harness-command-control.test.ts +54 -0
- package/src/native-ui/renderer-extension/test/renderer-model-client.test.ts +709 -0
- package/src/native-ui/renderer-extension/test/renderer-model-picker.test.ts +302 -0
- package/src/native-ui/renderer-extension/test/renderer-native-thread-ownership.test.ts +84 -0
- package/src/native-ui/renderer-extension/test/renderer-new-thread-preference.test.ts +81 -0
- package/src/native-ui/renderer-extension/test/renderer-permission-mode-picker.test.ts +269 -0
- package/src/native-ui/renderer-extension/test/renderer-permission-mode-preference.test.ts +48 -0
- package/src/native-ui/renderer-extension/test/renderer-settings-lifecycle.test.ts +156 -0
- package/src/native-ui/renderer-extension/test/renderer-sidebar-agent-icons.test.ts +575 -0
- package/src/native-ui/renderer-extension/test/renderer-unsupported-methods.test.ts +167 -0
- package/src/native-ui/renderer-extension/test/renderer-usage-control.test.ts +96 -0
- package/src/native-ui/renderer-extension/test/settings/accounts-usage.test.ts +208 -0
- package/src/native-ui/renderer-extension/test/settings/core.test.ts +145 -0
- package/src/native-ui/renderer-extension/test/settings/harness-settings.test.ts +92 -0
- package/src/native-ui/renderer-extension/test/settings/localization.test.ts +80 -0
- package/src/native-ui/renderer-extension/test/settings/pages.test.ts +2000 -0
- package/src/native-ui/renderer-extension/test/settings/release-notes.test.ts +163 -0
- package/src/native-ui/renderer-extension/test/settings/shell.test.ts +74 -0
- package/src/native-ui/renderer-extension/test/settings/trigger.test.ts +270 -0
- package/src/native-ui/renderer-extension/test/settings/update-request.test.ts +48 -0
- package/src/native-ui/renderer-extension/test/versioned-renderer-adapter.test.ts +695 -0
- package/src/native-ui/renderer-extension/tsconfig.json +15 -0
- package/src/native-ui/shared-contracts/dist/codex-accounts.d.ts +246 -0
- package/src/native-ui/shared-contracts/dist/codex-accounts.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/codex-accounts.js +99 -0
- package/src/native-ui/shared-contracts/dist/codex-accounts.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/deepseek-modern-sessions.d.ts +37 -0
- package/src/native-ui/shared-contracts/dist/deepseek-modern-sessions.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/deepseek-modern-sessions.js +36 -0
- package/src/native-ui/shared-contracts/dist/deepseek-modern-sessions.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/errors.d.ts +17 -0
- package/src/native-ui/shared-contracts/dist/errors.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/errors.js +14 -0
- package/src/native-ui/shared-contracts/dist/errors.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/external-thread-fork.d.ts +11 -0
- package/src/native-ui/shared-contracts/dist/external-thread-fork.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/external-thread-fork.js +14 -0
- package/src/native-ui/shared-contracts/dist/external-thread-fork.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/harness-accounts.d.ts +78 -0
- package/src/native-ui/shared-contracts/dist/harness-accounts.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/harness-accounts.js +27 -0
- package/src/native-ui/shared-contracts/dist/harness-accounts.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/harness-commands.d.ts +46 -0
- package/src/native-ui/shared-contracts/dist/harness-commands.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/harness-commands.js +61 -0
- package/src/native-ui/shared-contracts/dist/harness-commands.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/harness-models.d.ts +300 -0
- package/src/native-ui/shared-contracts/dist/harness-models.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/harness-models.js +318 -0
- package/src/native-ui/shared-contracts/dist/harness-models.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/harness-permission-modes.d.ts +30 -0
- package/src/native-ui/shared-contracts/dist/harness-permission-modes.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/harness-permission-modes.js +57 -0
- package/src/native-ui/shared-contracts/dist/harness-permission-modes.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/harness-plugins.d.ts +56 -0
- package/src/native-ui/shared-contracts/dist/harness-plugins.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/harness-plugins.js +75 -0
- package/src/native-ui/shared-contracts/dist/harness-plugins.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/harness-route.d.ts +16 -0
- package/src/native-ui/shared-contracts/dist/harness-route.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/harness-route.js +42 -0
- package/src/native-ui/shared-contracts/dist/harness-route.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/harness-session-import.d.ts +54 -0
- package/src/native-ui/shared-contracts/dist/harness-session-import.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/harness-session-import.js +72 -0
- package/src/native-ui/shared-contracts/dist/harness-session-import.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/ids.d.ts +12 -0
- package/src/native-ui/shared-contracts/dist/ids.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/ids.js +10 -0
- package/src/native-ui/shared-contracts/dist/ids.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/index.d.ts +47 -0
- package/src/native-ui/shared-contracts/dist/index.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/index.js +29 -0
- package/src/native-ui/shared-contracts/dist/index.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/json-rpc.d.ts +84 -0
- package/src/native-ui/shared-contracts/dist/json-rpc.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/json-rpc.js +65 -0
- package/src/native-ui/shared-contracts/dist/json-rpc.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/json-value.d.ts +13 -0
- package/src/native-ui/shared-contracts/dist/json-value.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/json-value.js +60 -0
- package/src/native-ui/shared-contracts/dist/json-value.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/native-refs.d.ts +43 -0
- package/src/native-ui/shared-contracts/dist/native-refs.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/native-refs.js +35 -0
- package/src/native-ui/shared-contracts/dist/native-refs.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/reasoning-transcript.d.ts +7 -0
- package/src/native-ui/shared-contracts/dist/reasoning-transcript.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/reasoning-transcript.js +7 -0
- package/src/native-ui/shared-contracts/dist/reasoning-transcript.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/thread-delegate.d.ts +22 -0
- package/src/native-ui/shared-contracts/dist/thread-delegate.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/thread-delegate.js +30 -0
- package/src/native-ui/shared-contracts/dist/thread-delegate.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/thread-harness-switch.d.ts +16 -0
- package/src/native-ui/shared-contracts/dist/thread-harness-switch.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/thread-harness-switch.js +19 -0
- package/src/native-ui/shared-contracts/dist/thread-harness-switch.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/thread-usage.d.ts +106 -0
- package/src/native-ui/shared-contracts/dist/thread-usage.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/thread-usage.js +103 -0
- package/src/native-ui/shared-contracts/dist/thread-usage.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/tsconfig.tsbuildinfo +1 -0
- package/src/native-ui/shared-contracts/dist/updates.d.ts +128 -0
- package/src/native-ui/shared-contracts/dist/updates.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/updates.js +58 -0
- package/src/native-ui/shared-contracts/dist/updates.js.map +1 -0
- package/src/native-ui/shared-contracts/dist/version.d.ts +2 -0
- package/src/native-ui/shared-contracts/dist/version.d.ts.map +1 -0
- package/src/native-ui/shared-contracts/dist/version.js +2 -0
- package/src/native-ui/shared-contracts/dist/version.js.map +1 -0
- package/src/native-ui/shared-contracts/package.json +25 -0
- package/src/native-ui/shared-contracts/src/codex-accounts.ts +140 -0
- package/src/native-ui/shared-contracts/src/deepseek-modern-sessions.ts +67 -0
- package/src/native-ui/shared-contracts/src/errors.ts +25 -0
- package/src/native-ui/shared-contracts/src/external-thread-fork.ts +20 -0
- package/src/native-ui/shared-contracts/src/harness-accounts.ts +32 -0
- package/src/native-ui/shared-contracts/src/harness-commands.ts +81 -0
- package/src/native-ui/shared-contracts/src/harness-models.ts +406 -0
- package/src/native-ui/shared-contracts/src/harness-permission-modes.ts +73 -0
- package/src/native-ui/shared-contracts/src/harness-plugins.ts +96 -0
- package/src/native-ui/shared-contracts/src/harness-route.ts +47 -0
- package/src/native-ui/shared-contracts/src/harness-session-import.ts +90 -0
- package/src/native-ui/shared-contracts/src/ids.ts +20 -0
- package/src/native-ui/shared-contracts/src/index.ts +320 -0
- package/src/native-ui/shared-contracts/src/json-rpc.ts +80 -0
- package/src/native-ui/shared-contracts/src/json-value.ts +78 -0
- package/src/native-ui/shared-contracts/src/native-refs.ts +58 -0
- package/src/native-ui/shared-contracts/src/reasoning-transcript.ts +6 -0
- package/src/native-ui/shared-contracts/src/thread-delegate.ts +40 -0
- package/src/native-ui/shared-contracts/src/thread-harness-switch.ts +25 -0
- package/src/native-ui/shared-contracts/src/thread-usage.ts +126 -0
- package/src/native-ui/shared-contracts/src/updates.ts +78 -0
- package/src/native-ui/shared-contracts/src/version.ts +1 -0
- package/src/native-ui/shared-contracts/test/browser-bundle.test.ts +36 -0
- package/src/native-ui/shared-contracts/test/deepseek-modern-sessions.test.ts +120 -0
- package/src/native-ui/shared-contracts/test/errors.test.ts +72 -0
- package/src/native-ui/shared-contracts/test/harness-commands.test.ts +64 -0
- package/src/native-ui/shared-contracts/test/harness-models.test.ts +390 -0
- package/src/native-ui/shared-contracts/test/harness-permission-modes.test.ts +134 -0
- package/src/native-ui/shared-contracts/test/harness-plugins.test.ts +113 -0
- package/src/native-ui/shared-contracts/test/harness-session-import.test.ts +117 -0
- package/src/native-ui/shared-contracts/test/ids.test.ts +69 -0
- package/src/native-ui/shared-contracts/test/index.test.ts +80 -0
- package/src/native-ui/shared-contracts/test/json-rpc.test.ts +177 -0
- package/src/native-ui/shared-contracts/test/json-value.test.ts +62 -0
- package/src/native-ui/shared-contracts/test/native-refs.test.ts +95 -0
- package/src/native-ui/shared-contracts/test/thread-usage.test.ts +115 -0
- package/src/native-ui/shared-contracts/test/updates.test.ts +120 -0
- package/src/native-ui/shared-contracts/tsconfig.json +10 -0
- package/src/tsconfig.base.json +19 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
//! Windows Job Object helper: put this process (and every descendant it later
|
|
2
|
+
//! spawns) into a job carrying JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE, so the whole
|
|
3
|
+
//! process tree dies with the shim no matter how the shim itself exits.
|
|
4
|
+
//!
|
|
5
|
+
//! Zero external crates on purpose: raw kernel32 FFI only, mirroring the
|
|
6
|
+
//! hand-written COM declarations in the appx crate.
|
|
7
|
+
#![cfg(windows)]
|
|
8
|
+
|
|
9
|
+
use std::ffi::c_void;
|
|
10
|
+
|
|
11
|
+
type Handle = *mut c_void;
|
|
12
|
+
type Bool = i32;
|
|
13
|
+
|
|
14
|
+
const JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE: u32 = 0x0000_2000;
|
|
15
|
+
const JOB_OBJECT_EXTENDED_LIMIT_INFORMATION_CLASS: i32 = 9;
|
|
16
|
+
|
|
17
|
+
#[repr(C)]
|
|
18
|
+
#[derive(Clone, Copy)]
|
|
19
|
+
struct IoCounters {
|
|
20
|
+
read_operation_count: u64,
|
|
21
|
+
write_operation_count: u64,
|
|
22
|
+
other_operation_count: u64,
|
|
23
|
+
read_transfer_count: u64,
|
|
24
|
+
write_transfer_count: u64,
|
|
25
|
+
other_transfer_count: u64,
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
#[repr(C)]
|
|
29
|
+
struct JobObjectBasicLimitInformation {
|
|
30
|
+
per_process_user_time_limit: i64,
|
|
31
|
+
per_job_user_time_limit: i64,
|
|
32
|
+
limit_flags: u32,
|
|
33
|
+
minimum_working_set_size: usize,
|
|
34
|
+
maximum_working_set_size: usize,
|
|
35
|
+
active_process_limit: u32,
|
|
36
|
+
affinity: usize,
|
|
37
|
+
priority_class: u32,
|
|
38
|
+
scheduling_class: u32,
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
#[repr(C)]
|
|
42
|
+
struct JobObjectExtendedLimitInformation {
|
|
43
|
+
basic_limit_information: JobObjectBasicLimitInformation,
|
|
44
|
+
io_info: IoCounters,
|
|
45
|
+
process_memory_limit: usize,
|
|
46
|
+
job_memory_limit: usize,
|
|
47
|
+
peak_process_memory_used: usize,
|
|
48
|
+
peak_job_memory_used: usize,
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
#[link(name = "kernel32")]
|
|
52
|
+
extern "system" {
|
|
53
|
+
fn CreateJobObjectW(attributes: *mut c_void, name: *const u16) -> Handle;
|
|
54
|
+
fn SetInformationJobObject(job: Handle, info_class: i32, info: *mut c_void, length: u32) -> Bool;
|
|
55
|
+
fn AssignProcessToJobObject(job: Handle, process: Handle) -> Bool;
|
|
56
|
+
fn GetCurrentProcess() -> Handle;
|
|
57
|
+
fn GetLastError() -> u32;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/// Puts the current process into a fresh kill-on-close job. `Ok(())` means the
|
|
61
|
+
/// OS will now terminate every descendant of this process when it dies, for any
|
|
62
|
+
/// reason, including force-kill. Failure is advisory: callers keep running.
|
|
63
|
+
pub fn assign_kill_on_close() -> Result<(), String> {
|
|
64
|
+
unsafe {
|
|
65
|
+
let job = CreateJobObjectW(std::ptr::null_mut(), std::ptr::null());
|
|
66
|
+
if job.is_null() {
|
|
67
|
+
return Err(format!("CreateJobObject failed ({})", GetLastError()));
|
|
68
|
+
}
|
|
69
|
+
let mut info: JobObjectExtendedLimitInformation = std::mem::zeroed();
|
|
70
|
+
info.basic_limit_information.limit_flags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
|
|
71
|
+
let sized = std::mem::size_of::<JobObjectExtendedLimitInformation>() as u32;
|
|
72
|
+
if SetInformationJobObject(job, JOB_OBJECT_EXTENDED_LIMIT_INFORMATION_CLASS, &mut info as *mut _ as *mut c_void, sized) == 0 {
|
|
73
|
+
return Err(format!("SetInformationJobObject failed ({})", GetLastError()));
|
|
74
|
+
}
|
|
75
|
+
if AssignProcessToJobObject(job, GetCurrentProcess()) == 0 {
|
|
76
|
+
return Err(format!("AssignProcessToJobObject failed ({})", GetLastError()));
|
|
77
|
+
}
|
|
78
|
+
// The handle is intentionally leaked: the job must live exactly as long
|
|
79
|
+
// as this process. The OS closes the handle on exit, which is what
|
|
80
|
+
// triggers the kill of every remaining member.
|
|
81
|
+
Ok(())
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
// Harness Mix executable bridge, built from this source by build-native.cjs.
|
|
2
|
+
// Rust port of the original shim.cs: identical routing and stdio contract.
|
|
3
|
+
//
|
|
4
|
+
// - `... app-server ...` -> node scripts/native-host.cjs (Harness Mix kernel)
|
|
5
|
+
// - anything else -> stock codex.exe passthrough
|
|
6
|
+
use std::env;
|
|
7
|
+
use std::fs;
|
|
8
|
+
use std::io::{self, Write};
|
|
9
|
+
#[cfg(not(unix))]
|
|
10
|
+
use std::io::Read;
|
|
11
|
+
use std::path::Path;
|
|
12
|
+
use std::process::{Command, Stdio};
|
|
13
|
+
#[cfg(not(unix))]
|
|
14
|
+
use std::sync::{Arc, Mutex};
|
|
15
|
+
#[cfg(not(unix))]
|
|
16
|
+
use std::thread;
|
|
17
|
+
|
|
18
|
+
mod job;
|
|
19
|
+
|
|
20
|
+
#[cfg(windows)]
|
|
21
|
+
use std::os::windows::process::CommandExt;
|
|
22
|
+
|
|
23
|
+
#[cfg(windows)]
|
|
24
|
+
const CREATE_NO_WINDOW: u32 = 0x0800_0000;
|
|
25
|
+
|
|
26
|
+
fn read_trimmed(path: &Path) -> io::Result<String> {
|
|
27
|
+
Ok(fs::read_to_string(path)?.trim().to_string())
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
fn json_escape(value: &str) -> String {
|
|
31
|
+
let mut out = String::with_capacity(value.len());
|
|
32
|
+
for c in value.chars() {
|
|
33
|
+
match c {
|
|
34
|
+
'"' => out.push_str("\\\""),
|
|
35
|
+
'\\' => out.push_str("\\\\"),
|
|
36
|
+
'\n' => out.push_str("\\n"),
|
|
37
|
+
'\r' => out.push_str("\\r"),
|
|
38
|
+
c if (c as u32) < 0x20 => out.push_str(&format!("\\u{:04x}", c as u32)),
|
|
39
|
+
c => out.push(c),
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
out
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Invocation journal next to the exe: one JSON line on spawn, one on exit.
|
|
46
|
+
// The desktop spawns this shim for every CLI call, so this is the ground
|
|
47
|
+
// truth for which invocation fails and with what stderr.
|
|
48
|
+
fn log_line(exe_dir: &Path, line: &str) {
|
|
49
|
+
let Ok(mut file) = fs::OpenOptions::new()
|
|
50
|
+
.create(true)
|
|
51
|
+
.append(true)
|
|
52
|
+
.open(exe_dir.join("shim-invocations.log"))
|
|
53
|
+
else {
|
|
54
|
+
return;
|
|
55
|
+
};
|
|
56
|
+
let ts = std::time::SystemTime::now()
|
|
57
|
+
.duration_since(std::time::UNIX_EPOCH)
|
|
58
|
+
.map(|d| d.as_millis())
|
|
59
|
+
.unwrap_or(0);
|
|
60
|
+
let _ = writeln!(file, "{{\"ts\":{ts},{line}}}");
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
fn log_spawn(exe_dir: &Path, mode: &str, args: &[String]) {
|
|
64
|
+
let args = args
|
|
65
|
+
.iter()
|
|
66
|
+
.map(|a| format!("\"{}\"", json_escape(a)))
|
|
67
|
+
.collect::<Vec<_>>()
|
|
68
|
+
.join(",");
|
|
69
|
+
log_line(
|
|
70
|
+
exe_dir,
|
|
71
|
+
&format!(
|
|
72
|
+
"\"pid\":{},\"mode\":\"{}\",\"args\":[{}]",
|
|
73
|
+
std::process::id(),
|
|
74
|
+
mode,
|
|
75
|
+
args
|
|
76
|
+
),
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
#[cfg(not(unix))]
|
|
81
|
+
fn log_exit(exe_dir: &Path, code: i32, stderr_tail: &[u8]) {
|
|
82
|
+
let tail = json_escape(&String::from_utf8_lossy(stderr_tail));
|
|
83
|
+
log_line(
|
|
84
|
+
exe_dir,
|
|
85
|
+
&format!(
|
|
86
|
+
"\"pid\":{},\"exit\":{},\"stderr_tail\":\"{}\"",
|
|
87
|
+
std::process::id(),
|
|
88
|
+
code,
|
|
89
|
+
tail
|
|
90
|
+
),
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Keep the invocation journal bounded: one live file plus two rotations.
|
|
95
|
+
const LOG_MAX_BYTES: u64 = 5 * 1024 * 1024;
|
|
96
|
+
|
|
97
|
+
fn rotate_log(dir: &Path) {
|
|
98
|
+
let base = dir.join("shim-invocations.log");
|
|
99
|
+
let Ok(metadata) = fs::metadata(&base) else { return };
|
|
100
|
+
if metadata.len() < LOG_MAX_BYTES { return; }
|
|
101
|
+
let _ = fs::remove_file(dir.join("shim-invocations.log.2"));
|
|
102
|
+
let _ = fs::rename(dir.join("shim-invocations.log.1"), dir.join("shim-invocations.log.2"));
|
|
103
|
+
let _ = fs::rename(&base, dir.join("shim-invocations.log.1"));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
fn setting(env_name: &str, file: &Path) -> io::Result<String> {
|
|
107
|
+
match env::var(env_name) {
|
|
108
|
+
Ok(value) if !value.is_empty() => Ok(value),
|
|
109
|
+
_ => read_trimmed(file),
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
#[cfg(not(unix))]
|
|
114
|
+
fn pump<R: Read + Send + 'static, W: Write + Send + 'static>(
|
|
115
|
+
mut source: R,
|
|
116
|
+
mut destination: W,
|
|
117
|
+
) -> thread::JoinHandle<()> {
|
|
118
|
+
thread::spawn(move || {
|
|
119
|
+
let _ = io::copy(&mut source, &mut destination);
|
|
120
|
+
let _ = destination.flush();
|
|
121
|
+
})
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
fn run() -> io::Result<i32> {
|
|
125
|
+
let exe = env::current_exe()?;
|
|
126
|
+
let exe_dir = exe
|
|
127
|
+
.parent()
|
|
128
|
+
.ok_or_else(|| io::Error::new(io::ErrorKind::NotFound, "Shim has no base directory"))?;
|
|
129
|
+
// Path.GetFullPath equivalent: normalize without resolving symlinks or adding \\?\.
|
|
130
|
+
let root = std::path::absolute(exe_dir.join("../.."))?;
|
|
131
|
+
let args: Vec<String> = env::args().skip(1).collect();
|
|
132
|
+
let server = args.iter().any(|arg| arg == "app-server");
|
|
133
|
+
|
|
134
|
+
rotate_log(exe_dir);
|
|
135
|
+
// Kill-on-close job: the node host, every harness CLI it spawns and any
|
|
136
|
+
// shell children all die with this shim, including on force-kill.
|
|
137
|
+
#[cfg(windows)]
|
|
138
|
+
if let Err(error) = job::assign_kill_on_close() {
|
|
139
|
+
eprintln!("Harness Mix Shim: process supervision unavailable: {error}");
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
let build_dir = root.join("output").join("native-build");
|
|
143
|
+
let stock = setting(
|
|
144
|
+
"CODEXHOST_STOCK_CODEX_PATH",
|
|
145
|
+
&build_dir.join("stock-path.txt"),
|
|
146
|
+
)?;
|
|
147
|
+
let node = setting("HARNESS_MIX_NODE_PATH", &build_dir.join("node-path.txt"))?;
|
|
148
|
+
log_spawn(exe_dir, if server { "server" } else { "passthrough" }, &args);
|
|
149
|
+
|
|
150
|
+
let mut command = if server {
|
|
151
|
+
// Tests point this at a fixture host; production uses the in-repo entry.
|
|
152
|
+
let host_script = env::var("HARNESS_MIX_HOST_SCRIPT")
|
|
153
|
+
.ok()
|
|
154
|
+
.filter(|value| !value.trim().is_empty())
|
|
155
|
+
.map(std::path::PathBuf::from)
|
|
156
|
+
.unwrap_or_else(|| root.join("scripts").join("native-host.cjs"));
|
|
157
|
+
let mut command = Command::new(&node);
|
|
158
|
+
command.arg("--max-old-space-size=8192");
|
|
159
|
+
command.arg(host_script);
|
|
160
|
+
command
|
|
161
|
+
} else {
|
|
162
|
+
Command::new(&stock)
|
|
163
|
+
};
|
|
164
|
+
command
|
|
165
|
+
.args(&args)
|
|
166
|
+
.stdin(Stdio::piped())
|
|
167
|
+
.stdout(Stdio::piped())
|
|
168
|
+
.stderr(Stdio::piped())
|
|
169
|
+
.env_remove("CODEX_CLI_PATH")
|
|
170
|
+
.env("CODEXHOST_STOCK_CODEX_PATH", &stock);
|
|
171
|
+
#[cfg(windows)]
|
|
172
|
+
command.creation_flags(CREATE_NO_WINDOW);
|
|
173
|
+
|
|
174
|
+
// Unix exec keeps the Desktop-owned PID and stdio: signals and EOF reach
|
|
175
|
+
// the native host directly, without an extra unsupervised pump process.
|
|
176
|
+
#[cfg(unix)]
|
|
177
|
+
{
|
|
178
|
+
use std::os::unix::process::CommandExt;
|
|
179
|
+
command.stdin(Stdio::inherit()).stdout(Stdio::inherit()).stderr(Stdio::inherit());
|
|
180
|
+
return Err(command.exec());
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
#[cfg(not(unix))]
|
|
184
|
+
supervise(command, exe_dir)
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
#[cfg(not(unix))]
|
|
188
|
+
fn supervise(mut command: Command, exe_dir: &Path) -> io::Result<i32> {
|
|
189
|
+
let mut child = command.spawn()?;
|
|
190
|
+
let child_stdin = child
|
|
191
|
+
.stdin
|
|
192
|
+
.take()
|
|
193
|
+
.ok_or_else(|| io::Error::new(io::ErrorKind::BrokenPipe, "child stdin unavailable"))?;
|
|
194
|
+
let child_stdout = child
|
|
195
|
+
.stdout
|
|
196
|
+
.take()
|
|
197
|
+
.ok_or_else(|| io::Error::new(io::ErrorKind::BrokenPipe, "child stdout unavailable"))?;
|
|
198
|
+
let child_stderr = child
|
|
199
|
+
.stderr
|
|
200
|
+
.take()
|
|
201
|
+
.ok_or_else(|| io::Error::new(io::ErrorKind::BrokenPipe, "child stderr unavailable"))?;
|
|
202
|
+
|
|
203
|
+
// Stdin EOF must close the child's stdin, mirroring the C# pump's finally.
|
|
204
|
+
let input = thread::spawn(move || {
|
|
205
|
+
let stdin = io::stdin();
|
|
206
|
+
let mut locked = stdin.lock();
|
|
207
|
+
let mut writer = child_stdin;
|
|
208
|
+
let _ = io::copy(&mut locked, &mut writer);
|
|
209
|
+
let _ = writer.flush();
|
|
210
|
+
drop(writer);
|
|
211
|
+
});
|
|
212
|
+
let output = pump(child_stdout, io::stdout());
|
|
213
|
+
// Tee stderr: forward live and keep the tail for the invocation journal.
|
|
214
|
+
let tail = Arc::new(Mutex::new(Vec::<u8>::new()));
|
|
215
|
+
let tail_writer = Arc::clone(&tail);
|
|
216
|
+
let error = thread::spawn(move || {
|
|
217
|
+
let mut reader = child_stderr;
|
|
218
|
+
let mut stderr = io::stderr();
|
|
219
|
+
let mut buffer = [0u8; 4096];
|
|
220
|
+
loop {
|
|
221
|
+
match reader.read(&mut buffer) {
|
|
222
|
+
Ok(0) | Err(_) => break,
|
|
223
|
+
Ok(count) => {
|
|
224
|
+
let chunk = &buffer[..count];
|
|
225
|
+
let _ = stderr.write_all(chunk);
|
|
226
|
+
let _ = stderr.flush();
|
|
227
|
+
if let Ok(mut tail) = tail_writer.lock() {
|
|
228
|
+
tail.extend_from_slice(chunk);
|
|
229
|
+
if tail.len() > 4096 {
|
|
230
|
+
let excess = tail.len() - 4096;
|
|
231
|
+
tail.drain(..excess);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
let status = child.wait()?;
|
|
240
|
+
let _ = output.join();
|
|
241
|
+
let _ = error.join();
|
|
242
|
+
let code = status.code().unwrap_or(1);
|
|
243
|
+
let tail = tail.lock().map(|t| t.clone()).unwrap_or_default();
|
|
244
|
+
log_exit(&exe_dir, code, &tail);
|
|
245
|
+
drop(input); // stdin may outlive the child; do not block exit on it.
|
|
246
|
+
Ok(code)
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
fn main() {
|
|
250
|
+
match run() {
|
|
251
|
+
Ok(code) => std::process::exit(code),
|
|
252
|
+
Err(error) => {
|
|
253
|
+
eprintln!("Harness Mix Shim: {error}");
|
|
254
|
+
std::process::exit(1);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Platform secret store backed by harness-mix-secret.exe (DPAPI, current user).
|
|
2
|
+
// No plaintext fallback by design: when the helper is missing, callers get an
|
|
3
|
+
// actionable error instead of a silent downgrade.
|
|
4
|
+
const { execFile } = require('node:child_process');
|
|
5
|
+
const { nativePaths } = require('./config');
|
|
6
|
+
|
|
7
|
+
class SecureStoreUnavailableError extends Error {
|
|
8
|
+
constructor(message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = 'SecureStoreUnavailableError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function helperPath() {
|
|
15
|
+
if (process.platform !== 'win32') throw new SecureStoreUnavailableError('Harness Mix secret storage is unavailable on this platform; credentials remain managed by each native harness. No plaintext fallback is used.');
|
|
16
|
+
return process.env.HARNESS_MIX_SECRET_EXE || nativePaths().secret;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function run(args, input) {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
const child = execFile(helperPath(), args, { windowsHide: true, encoding: 'buffer', maxBuffer: 8 * 1024 * 1024 }, (error, stdout, stderr) => {
|
|
22
|
+
if (error && error.code === 'ENOENT') {
|
|
23
|
+
reject(new SecureStoreUnavailableError('缺少 harness-mix-secret.exe:请运行 npm run build:native'));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (error && error.code === 2) {
|
|
27
|
+
resolve({ missing: true, stdout: Buffer.from(stdout || ''), stderr: String(stderr || '') });
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (error) {
|
|
31
|
+
reject(new Error(`secret store: ${String(stderr || error.message).trim()}`));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
resolve({ missing: false, stdout: Buffer.from(stdout || '') });
|
|
35
|
+
});
|
|
36
|
+
if (input !== undefined && child.stdin) child.stdin.end(Buffer.from(input));
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async function setSecret(name, value) {
|
|
41
|
+
await run(['set', name], value);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async function getSecret(name) {
|
|
45
|
+
const result = await run(['get', name]);
|
|
46
|
+
return result.missing ? null : result.stdout;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async function deleteSecret(name) {
|
|
50
|
+
const result = await run(['delete', name]);
|
|
51
|
+
return !result.missing;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async function listSecrets() {
|
|
55
|
+
const result = await run(['list']);
|
|
56
|
+
return result.stdout.toString('utf8').split(/\r?\n/).map(line => line.trim()).filter(Boolean);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
module.exports = { setSecret, getSecret, deleteSecret, listSecrets, SecureStoreUnavailableError };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Match Desktop queries before merging local threads into an official page.
|
|
2
|
+
function includesThread(thread, query = {}, threads = []) {
|
|
3
|
+
if (thread.ephemeral || Boolean(thread.archived) !== Boolean(query.archived)) return false;
|
|
4
|
+
// 父子归属查询(协作子任务/子代理列表):按 parentThreadId 链匹配
|
|
5
|
+
if (query.parentThreadId != null) return thread.parentThreadId === query.parentThreadId;
|
|
6
|
+
if (query.ancestorThreadId != null) {
|
|
7
|
+
const byId = new Map(threads.map(entry => [entry.id, entry]));
|
|
8
|
+
for (let current = thread; current?.parentThreadId; current = byId.get(current.parentThreadId)) {
|
|
9
|
+
if (current.parentThreadId === query.ancestorThreadId) return true;
|
|
10
|
+
}
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
if (Object.hasOwn(query, 'sectionId') && (thread.section?.id ?? null) !== query.sectionId) return false;
|
|
14
|
+
if (Object.hasOwn(query, 'projectId') && (thread.projectId ?? null) !== query.projectId) return false;
|
|
15
|
+
if (query.isPinned === true && !thread.isPinned) return false;
|
|
16
|
+
if (query.isPinned === false && thread.isPinned) return false;
|
|
17
|
+
if (query.cwd != null && !(Array.isArray(query.cwd) ? query.cwd : [query.cwd]).includes(thread.cwd)) return false;
|
|
18
|
+
if (query.modelProviders?.length && !query.modelProviders.includes('codexhost')) return false;
|
|
19
|
+
if (query.sourceKinds?.length && !query.sourceKinds.includes('vscode')) return false;
|
|
20
|
+
if (query.searchTerm && !(thread.title || '').toLowerCase().includes(query.searchTerm.toLowerCase())) return false;
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function mergeThreadPage(page, threads, query, project) {
|
|
25
|
+
if (query.cursor) return page;
|
|
26
|
+
const local = threads.filter(thread => includesThread(thread, query, threads));
|
|
27
|
+
if (query.sortKey === 'section_position') local.sort((a, b) => (a.sectionPosition || 0) - (b.sectionPosition || 0));
|
|
28
|
+
const byId = new Map(page.data.map(thread => [thread.id, thread]));
|
|
29
|
+
for (const thread of local) byId.set(thread.id, project(thread));
|
|
30
|
+
const data = [...byId.values()];
|
|
31
|
+
if (query.sortKey !== 'section_position') {
|
|
32
|
+
const key = { updated_at: 'updatedAt', recency_at: 'recencyAt' }[query.sortKey] || 'createdAt';
|
|
33
|
+
data.sort((a, b) => (query.sortDirection === 'asc' ? 1 : -1) * ((a[key] || 0) - (b[key] || 0)));
|
|
34
|
+
}
|
|
35
|
+
return { ...page, data };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
module.exports = { includesThread, mergeThreadPage };
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// Update bookkeeping for updater.js: channel detection, version compare,
|
|
2
|
+
// the update state file and its lock. Pure Node built-ins; `dataDir` is
|
|
3
|
+
// injected so tests can use temp directories.
|
|
4
|
+
const fs = require('node:fs');
|
|
5
|
+
const path = require('node:path');
|
|
6
|
+
|
|
7
|
+
const STATE_FILE = 'update-state.json';
|
|
8
|
+
const LOCK_FILE = 'update.lock';
|
|
9
|
+
const LOCK_STALE_MS = 30 * 60 * 1000;
|
|
10
|
+
|
|
11
|
+
function defaultState() {
|
|
12
|
+
return {
|
|
13
|
+
schema: 1,
|
|
14
|
+
channel: null,
|
|
15
|
+
phase: 'idle',
|
|
16
|
+
appliedVersion: null,
|
|
17
|
+
prevVersion: null,
|
|
18
|
+
appliedAt: 0,
|
|
19
|
+
attempts: 0,
|
|
20
|
+
lastBootOkAt: 0,
|
|
21
|
+
pendingVersion: null,
|
|
22
|
+
lastCheckAt: 0,
|
|
23
|
+
preUpdateHead: null,
|
|
24
|
+
rolledBackAt: 0,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function readState(dataDir) {
|
|
29
|
+
try {
|
|
30
|
+
const parsed = JSON.parse(fs.readFileSync(path.join(dataDir, STATE_FILE), 'utf8'));
|
|
31
|
+
return { ...defaultState(), ...(parsed && typeof parsed === 'object' ? parsed : {}) };
|
|
32
|
+
} catch {
|
|
33
|
+
return defaultState(); // missing or corrupt: rebuild, never block launch
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function writeState(dataDir, state) {
|
|
38
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
39
|
+
const file = path.join(dataDir, STATE_FILE);
|
|
40
|
+
fs.writeFileSync(`${file}.tmp`, JSON.stringify(state, null, 2));
|
|
41
|
+
fs.renameSync(`${file}.tmp`, file);
|
|
42
|
+
return state;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function updateState(dataDir, patch) {
|
|
46
|
+
return writeState(dataDir, { ...readState(dataDir), ...patch });
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Called by the launcher once the desktop is up and the controller survived long
|
|
50
|
+
// enough to count as a healthy boot of the freshly applied version.
|
|
51
|
+
function markBootOk(dataDir) {
|
|
52
|
+
const state = readState(dataDir);
|
|
53
|
+
return writeState(dataDir, { ...state, lastBootOkAt: Date.now(), attempts: 0 });
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function pidAlive(pid) {
|
|
57
|
+
if (!pid || typeof pid !== 'number') return false;
|
|
58
|
+
try { process.kill(pid, 0); return true; }
|
|
59
|
+
catch (error) { return error.code === 'EPERM'; }
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Mutating update operations (apply / rollback / repair) take this lock so two
|
|
63
|
+
// launchers cannot fight over the same install. Stale locks are reaped.
|
|
64
|
+
function acquireLock(dataDir, op) {
|
|
65
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
66
|
+
const file = path.join(dataDir, LOCK_FILE);
|
|
67
|
+
let existing = null;
|
|
68
|
+
try { existing = JSON.parse(fs.readFileSync(file, 'utf8')); } catch { /* no lock yet */ }
|
|
69
|
+
if (existing && pidAlive(existing.pid) && Date.now() - Number(existing.ts || 0) < LOCK_STALE_MS) {
|
|
70
|
+
throw new Error(`更新锁被进程 ${existing.pid} 持有(${existing.op || 'update'})`);
|
|
71
|
+
}
|
|
72
|
+
fs.writeFileSync(file, JSON.stringify({ pid: process.pid, ts: Date.now(), op }));
|
|
73
|
+
let released = false;
|
|
74
|
+
return function release() {
|
|
75
|
+
if (released) return;
|
|
76
|
+
released = true;
|
|
77
|
+
try {
|
|
78
|
+
const current = JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
79
|
+
if (current.pid === process.pid) fs.unlinkSync(file);
|
|
80
|
+
} catch { /* already gone */ }
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function compareVersions(a, b) {
|
|
85
|
+
const parse = value => String(value || '0').split('-')[0].split('.').map(part => parseInt(part, 10) || 0);
|
|
86
|
+
const left = parse(a);
|
|
87
|
+
const right = parse(b);
|
|
88
|
+
for (let i = 0; i < 3; i += 1) {
|
|
89
|
+
const x = left[i] || 0;
|
|
90
|
+
const y = right[i] || 0;
|
|
91
|
+
if (x !== y) return x > y ? 1 : -1;
|
|
92
|
+
}
|
|
93
|
+
const preA = String(a || '').includes('-');
|
|
94
|
+
const preB = String(b || '').includes('-');
|
|
95
|
+
if (preA !== preB) return preA ? -1 : 1; // release beats prerelease
|
|
96
|
+
if (String(a) === String(b)) return 0;
|
|
97
|
+
return String(a) > String(b) ? 1 : -1; // prerelease ordering is lexical (good enough)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function detectChannel(root) {
|
|
101
|
+
if (fs.existsSync(path.join(root, '.git'))) return 'git';
|
|
102
|
+
if (path.basename(path.dirname(path.resolve(root))) === 'node_modules') return 'npm';
|
|
103
|
+
return 'portable';
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
module.exports = {
|
|
107
|
+
STATE_FILE, LOCK_FILE, LOCK_STALE_MS,
|
|
108
|
+
defaultState, readState, writeState, updateState, markBootOk,
|
|
109
|
+
acquireLock, pidAlive, compareVersions, detectChannel,
|
|
110
|
+
};
|