@harness-mix/cli 0.1.11 → 0.1.12
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 +16 -0
- package/NOTICE +16 -2
- package/README.md +265 -3
- package/docs/cross-platform.md +3 -3
- package/docs/multi-agent-collaboration.md +37 -23
- package/docs/native-acp.md +2 -2
- package/docs/native-codex.md +5 -5
- package/docs/{superpowers/specs → specs}/2026-09-13-native-hardening-design.md +2 -2
- package/docs/storage-verification-design.md +5 -5
- package/licenses/lobe-icons-MIT.txt +21 -0
- package/output/native-build/desktop-controller.mjs +24 -24
- 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 +1325 -658
- package/package.json +2 -2
- package/scripts/adapters-test.cjs +9 -1
- package/scripts/antigravity-adapter-test.cjs +381 -284
- package/scripts/build-native.cjs +64 -46
- package/scripts/codex-accounts-test.cjs +1 -1
- package/scripts/codex-accounts-ui-smoke.cjs +1 -1
- package/scripts/collaboration-recovery-test.cjs +11 -2
- package/scripts/collaboration-test.cjs +114 -27
- package/scripts/collaboration-ui-smoke.cjs +45 -8
- package/scripts/concurrency-layers-test.cjs +5 -0
- package/scripts/diagnostics.cjs +1 -1
- package/scripts/e2e-native-host.cjs +13 -13
- package/scripts/error-kind-test.cjs +3 -3
- package/scripts/integrations-test.cjs +2 -2
- package/scripts/integrations-ui-smoke.cjs +6 -6
- package/scripts/native-config-test.cjs +6 -6
- package/scripts/native-job-object-test.cjs +1 -1
- package/scripts/native-protocol-test.cjs +44 -38
- package/scripts/native-rollback-test.cjs +1 -1
- package/scripts/native-secret-test.cjs +1 -1
- package/scripts/native-shim-test.cjs +1 -1
- package/scripts/native-sidebar-test.cjs +4 -4
- package/scripts/native-ui-smoke.cjs +12 -12
- package/scripts/pets-test.cjs +223 -3
- package/scripts/platform-test.cjs +6 -6
- package/scripts/publish-native-package.cjs +1 -1
- package/scripts/test-live-mentions.cjs +2 -2
- package/scripts/workspace-test.cjs +4 -2
- package/src/assets/icons/PROVENANCE.md +92 -0
- package/src/main/adapters/antigravity.js +1415 -1368
- package/src/main/adapters/claude.js +1 -1
- package/src/main/adapters/codex-app-server.js +1 -1
- package/src/main/adapters/dsh.js +1 -1
- package/src/main/adapters/index.js +1 -1
- package/src/main/adapters/pi-usage.js +2 -2
- package/src/main/harness-adapter/error-kind.js +1 -1
- package/src/main/harness-adapter/manifest.js +7 -1
- package/src/main/host/collaboration-tools.js +8 -1
- package/src/main/host/collaboration-worktree.js +27 -1
- package/src/main/host/collaboration.js +348 -15
- package/src/main/host/runtime.js +23 -15
- package/src/main/native/codex-accounts.js +1 -1
- package/src/main/native/config.js +9 -9
- package/src/main/native/host.js +1 -1
- package/src/main/native/launcher.js +10 -8
- package/src/main/native/pets.js +188 -49
- package/src/main/native/platform.js +19 -9
- package/src/main/native/protocol.js +83 -80
- package/src/main/native/rs/crates/appx/Cargo.toml +1 -1
- package/src/main/native/rs/crates/secret/Cargo.toml +1 -1
- package/src/main/native/rs/crates/secret/src/main.rs +3 -3
- package/src/main/native/rs/crates/shim/Cargo.toml +1 -1
- package/src/main/native/rs/crates/shim/src/main.rs +2 -2
- package/src/main/native/thread-list.js +1 -1
- package/src/main/shared-contracts/capability.js +3 -1
- package/src/main/workspace/core-review.js +4 -3
- package/src/native-ui/README.md +2 -2
- package/src/native-ui/desktop-control/dist/contract-audit.js +4 -4
- package/src/native-ui/desktop-control/dist/index.d.ts +1 -1
- package/src/native-ui/desktop-control/dist/index.js +2 -2
- package/src/native-ui/desktop-control/dist/index.js.map +1 -1
- package/src/native-ui/desktop-control/dist/main-process-title-policy.js +5 -5
- package/src/native-ui/desktop-control/dist/main-process-title-policy.js.map +1 -1
- package/src/native-ui/desktop-control/dist/production-controller.js +3 -3
- package/src/native-ui/desktop-control/dist/production-controller.js.map +1 -1
- package/src/native-ui/desktop-control/dist/release-main.js +1 -1
- package/src/native-ui/desktop-control/dist/release-main.js.map +1 -1
- package/src/native-ui/desktop-control/dist/renderer-cdp-control-session.js +1 -1
- package/src/native-ui/desktop-control/dist/renderer-cdp-control-session.js.map +1 -1
- package/src/native-ui/desktop-control/dist/renderer-control-session.js +3 -3
- package/src/native-ui/desktop-control/dist/renderer-control-session.js.map +1 -1
- package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-runtime.js +25 -25
- package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-runtime.js.map +1 -1
- package/src/native-ui/desktop-control/dist/tsconfig.tsbuildinfo +1 -1
- package/src/native-ui/desktop-control/package.json +2 -2
- package/src/native-ui/desktop-control/scripts/build-release.mjs +2 -2
- package/src/native-ui/desktop-control/src/contract-audit.ts +4 -4
- package/src/native-ui/desktop-control/src/index.ts +2 -2
- package/src/native-ui/desktop-control/src/main-process-title-policy.ts +5 -5
- package/src/native-ui/desktop-control/src/production-controller.ts +3 -3
- package/src/native-ui/desktop-control/src/release-main.ts +1 -1
- package/src/native-ui/desktop-control/src/renderer-cdp-control-session.ts +1 -1
- package/src/native-ui/desktop-control/src/renderer-control-session.ts +3 -3
- package/src/native-ui/desktop-control/src/renderer-draft-prewarm-runtime.ts +25 -25
- package/src/native-ui/desktop-control/test/index.test.ts +1 -1
- package/src/native-ui/desktop-control/test/production-controller.test.ts +1 -1
- package/src/native-ui/desktop-control/test/renderer-cdp-control-session.test.ts +1 -1
- package/src/native-ui/desktop-control/test/renderer-draft-prewarm-policy.test.ts +43 -43
- package/src/native-ui/renderer-extension/dist/types/agent-group-preference.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/agent-group-preference.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/agent-selection-state.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/agent-selection-state.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/contract-audit.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/contract-audit.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/index.d.ts +3 -1
- package/src/native-ui/renderer-extension/dist/types/index.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/production-entry.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/production-entry.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-agent-picker.d.ts +2 -2
- package/src/native-ui/renderer-extension/dist/types/renderer-agent-picker.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-binding-probe.d.ts +3 -3
- package/src/native-ui/renderer-extension/dist/types/renderer-binding-probe.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-options.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-options.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-state.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-state.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-collab-cards.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-collab-cards.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-composer-dom.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-composer-dom.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-credits-control.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-credits-control.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-fork-control.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-fork-control.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-claim.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-claim.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-control.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-control.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-handoff.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-handoff.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-localization.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-localization.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-mentions.d.ts +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-mentions.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts +36 -31
- package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-model-picker.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-model-picker.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-new-thread-preference.d.ts +2 -2
- package/src/native-ui/renderer-extension/dist/types/renderer-new-thread-preference.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-picker.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-picker.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-preference.d.ts +2 -2
- package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-preference.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-request-sender.d.ts +18 -2
- package/src/native-ui/renderer-extension/dist/types/renderer-request-sender.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-session-import-client.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-session-import-client.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-sidebar-agent-icons.d.ts +2 -2
- package/src/native-ui/renderer-extension/dist/types/renderer-sidebar-agent-icons.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-team-cards.d.ts +58 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-team-cards.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-transcript-dom.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-trigger-chip-style.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-trigger-chip-style.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-usage-control.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-usage-control.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-list.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-list.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-page.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-page.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-usage.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-usage.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/connections-page.d.ts +3 -3
- package/src/native-ui/renderer-extension/dist/types/settings/connections-page.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/harness-accounts.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/harness-accounts.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts +4 -4
- package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/pet-market.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/session-import-list-controls.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/session-import-list-controls.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/session-import-page.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/session-import-page.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/shell.d.ts +2 -2
- package/src/native-ui/renderer-extension/dist/types/settings/shell.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/trigger.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/trigger.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/tsconfig.tsbuildinfo +1 -1
- package/src/native-ui/renderer-extension/dist/types/versioned-renderer-adapter.d.ts +18 -18
- package/src/native-ui/renderer-extension/dist/types/versioned-renderer-adapter.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/package.json +2 -2
- package/src/native-ui/renderer-extension/src/agent-group-preference.ts +1 -1
- package/src/native-ui/renderer-extension/src/agent-selection-state.ts +31 -16
- package/src/native-ui/renderer-extension/src/audit-entry.ts +1 -1
- package/src/native-ui/renderer-extension/src/contract-audit.ts +4 -4
- package/src/native-ui/renderer-extension/src/index.ts +4 -2
- package/src/native-ui/renderer-extension/src/install-renderer-binding.ts +2 -2
- package/src/native-ui/renderer-extension/src/production-entry.ts +3 -3
- package/src/native-ui/renderer-extension/src/renderer-agent-picker.ts +7 -7
- package/src/native-ui/renderer-extension/src/renderer-binding-probe.ts +112 -89
- package/src/native-ui/renderer-extension/src/renderer-codex-account-options.ts +1 -1
- package/src/native-ui/renderer-extension/src/renderer-codex-account-state.ts +1 -1
- package/src/native-ui/renderer-extension/src/renderer-collab-cards.ts +1 -1
- package/src/native-ui/renderer-extension/src/renderer-composer-dom.ts +12 -12
- package/src/native-ui/renderer-extension/src/renderer-credits-control.ts +7 -7
- package/src/native-ui/renderer-extension/src/renderer-external-steering.ts +3 -3
- package/src/native-ui/renderer-extension/src/renderer-fork-control.ts +1 -1
- package/src/native-ui/renderer-extension/src/renderer-harness-command-claim.ts +1 -1
- package/src/native-ui/renderer-extension/src/renderer-harness-command-control.ts +3 -3
- package/src/native-ui/renderer-extension/src/renderer-harness-handoff.ts +1 -1
- package/src/native-ui/renderer-extension/src/renderer-harness-localization.ts +1 -1
- package/src/native-ui/renderer-extension/src/renderer-harness-mentions.ts +4 -0
- package/src/native-ui/renderer-extension/src/renderer-integrations-client.ts +5 -5
- package/src/native-ui/renderer-extension/src/renderer-model-client.ts +63 -42
- package/src/native-ui/renderer-extension/src/renderer-model-picker.ts +16 -16
- package/src/native-ui/renderer-extension/src/renderer-new-thread-preference.ts +2 -2
- package/src/native-ui/renderer-extension/src/renderer-permission-mode-picker.ts +3 -3
- package/src/native-ui/renderer-extension/src/renderer-permission-mode-preference.ts +2 -2
- package/src/native-ui/renderer-extension/src/renderer-request-sender.ts +46 -3
- package/src/native-ui/renderer-extension/src/renderer-session-import-client.ts +4 -4
- package/src/native-ui/renderer-extension/src/renderer-sidebar-agent-icons.ts +24 -20
- package/src/native-ui/renderer-extension/src/renderer-team-cards.ts +312 -0
- package/src/native-ui/renderer-extension/src/renderer-transcript-dom.ts +1 -1
- package/src/native-ui/renderer-extension/src/renderer-trigger-chip-style.ts +2 -2
- package/src/native-ui/renderer-extension/src/renderer-usage-control.ts +4 -4
- package/src/native-ui/renderer-extension/src/settings/accounts-list.ts +1 -1
- package/src/native-ui/renderer-extension/src/settings/accounts-page.ts +1 -1
- package/src/native-ui/renderer-extension/src/settings/accounts-usage.ts +1 -1
- package/src/native-ui/renderer-extension/src/settings/connections-page.ts +7 -7
- package/src/native-ui/renderer-extension/src/settings/harness-accounts.ts +1 -1
- package/src/native-ui/renderer-extension/src/settings/icons.ts +2 -2
- package/src/native-ui/renderer-extension/src/settings/pages.ts +11 -11
- package/src/native-ui/renderer-extension/src/settings/pet-market.css +33 -0
- package/src/native-ui/renderer-extension/src/settings/pet-market.ts +173 -91
- package/src/native-ui/renderer-extension/src/settings/pets-client.ts +5 -5
- package/src/native-ui/renderer-extension/src/settings/release-notes.ts +1 -1
- package/src/native-ui/renderer-extension/src/settings/session-import-list-controls.ts +1 -1
- package/src/native-ui/renderer-extension/src/settings/session-import-page.ts +1 -1
- package/src/native-ui/renderer-extension/src/settings/shell.css +15 -15
- package/src/native-ui/renderer-extension/src/settings/shell.ts +11 -11
- package/src/native-ui/renderer-extension/src/settings/skin-runtime.ts +17 -17
- package/src/native-ui/renderer-extension/src/settings/trigger.ts +1 -1
- package/src/native-ui/renderer-extension/src/versioned-renderer-adapter.ts +20 -20
- package/src/native-ui/renderer-extension/test/agent-selection-state.test.ts +60 -1
- package/src/native-ui/renderer-extension/test/codebuddy-migration.test.ts +1 -1
- package/src/native-ui/renderer-extension/test/renderer-agent-picker.test.ts +1 -1
- package/src/native-ui/renderer-extension/test/renderer-binding-probe-host-catalog.test.ts +15 -9
- package/src/native-ui/renderer-extension/test/renderer-binding-probe.test.ts +15 -15
- package/src/native-ui/renderer-extension/test/renderer-codex-account-state.test.ts +1 -1
- package/src/native-ui/renderer-extension/test/renderer-composer-permissions.test.ts +4 -4
- package/src/native-ui/renderer-extension/test/renderer-external-steering-rpc.test.ts +2 -2
- package/src/native-ui/renderer-extension/test/renderer-external-steering.test.ts +3 -3
- package/src/native-ui/renderer-extension/test/renderer-fork-control.test.ts +4 -4
- package/src/native-ui/renderer-extension/test/renderer-harness-command-claim.test.ts +1 -1
- package/src/native-ui/renderer-extension/test/renderer-harness-command-control.test.ts +1 -1
- package/src/native-ui/renderer-extension/test/renderer-model-client.test.ts +12 -11
- package/src/native-ui/renderer-extension/test/renderer-model-picker.test.ts +1 -1
- package/src/native-ui/renderer-extension/test/renderer-native-thread-ownership.test.ts +6 -6
- package/src/native-ui/renderer-extension/test/renderer-new-thread-preference.test.ts +1 -1
- package/src/native-ui/renderer-extension/test/renderer-permission-mode-picker.test.ts +1 -1
- package/src/native-ui/renderer-extension/test/renderer-permission-mode-preference.test.ts +1 -1
- package/src/native-ui/renderer-extension/test/renderer-request-timeout.test.ts +80 -0
- package/src/native-ui/renderer-extension/test/renderer-settings-lifecycle.test.ts +2 -2
- package/src/native-ui/renderer-extension/test/renderer-sidebar-agent-icons.test.ts +10 -3
- package/src/native-ui/renderer-extension/test/renderer-unsupported-methods.test.ts +1 -1
- package/src/native-ui/renderer-extension/test/settings/pages.test.ts +5 -5
- package/src/native-ui/renderer-extension/test/settings/release-notes.test.ts +9 -9
- package/src/native-ui/renderer-extension/test/versioned-renderer-adapter.test.ts +3 -3
- package/src/native-ui/shared-contracts/dist/errors.d.ts +2 -2
- package/src/native-ui/shared-contracts/dist/errors.d.ts.map +1 -1
- package/src/native-ui/shared-contracts/dist/errors.js +1 -1
- package/src/native-ui/shared-contracts/dist/errors.js.map +1 -1
- package/src/native-ui/shared-contracts/dist/harness-models.d.ts +40 -0
- package/src/native-ui/shared-contracts/dist/harness-models.d.ts.map +1 -1
- package/src/native-ui/shared-contracts/dist/harness-models.js +23 -2
- package/src/native-ui/shared-contracts/dist/harness-models.js.map +1 -1
- package/src/native-ui/shared-contracts/dist/harness-route.d.ts +1 -1
- package/src/native-ui/shared-contracts/dist/harness-route.d.ts.map +1 -1
- package/src/native-ui/shared-contracts/dist/harness-route.js +1 -1
- package/src/native-ui/shared-contracts/dist/harness-route.js.map +1 -1
- package/src/native-ui/shared-contracts/dist/harness-session-import.d.ts +1 -1
- package/src/native-ui/shared-contracts/dist/harness-session-import.d.ts.map +1 -1
- package/src/native-ui/shared-contracts/dist/harness-session-import.js +1 -1
- package/src/native-ui/shared-contracts/dist/harness-session-import.js.map +1 -1
- package/src/native-ui/shared-contracts/dist/index.d.ts +3 -3
- package/src/native-ui/shared-contracts/dist/index.d.ts.map +1 -1
- package/src/native-ui/shared-contracts/dist/index.js +2 -2
- package/src/native-ui/shared-contracts/dist/index.js.map +1 -1
- package/src/native-ui/shared-contracts/dist/tsconfig.tsbuildinfo +1 -1
- package/src/native-ui/shared-contracts/dist/updates.js +1 -1
- package/src/native-ui/shared-contracts/dist/updates.js.map +1 -1
- package/src/native-ui/shared-contracts/package.json +1 -1
- package/src/native-ui/shared-contracts/src/errors.ts +3 -3
- package/src/native-ui/shared-contracts/src/harness-models.ts +23 -2
- package/src/native-ui/shared-contracts/src/harness-route.ts +1 -1
- package/src/native-ui/shared-contracts/src/harness-session-import.ts +1 -1
- package/src/native-ui/shared-contracts/src/index.ts +3 -3
- package/src/native-ui/shared-contracts/src/updates.ts +1 -1
- package/src/native-ui/shared-contracts/test/browser-bundle.test.ts +3 -3
- package/src/native-ui/shared-contracts/test/deepseek-modern-sessions.test.ts +1 -1
- package/src/native-ui/shared-contracts/test/errors.test.ts +9 -9
- package/src/native-ui/shared-contracts/test/harness-commands.test.ts +1 -1
- package/src/native-ui/shared-contracts/test/harness-models.test.ts +3 -3
- package/src/native-ui/shared-contracts/test/harness-permission-modes.test.ts +1 -1
- package/src/native-ui/shared-contracts/test/harness-plugins.test.ts +1 -1
- package/src/native-ui/shared-contracts/test/harness-session-import.test.ts +1 -1
- package/src/native-ui/shared-contracts/test/index.test.ts +3 -3
- package/src/native-ui/shared-contracts/test/json-rpc.test.ts +1 -1
- package/src/native-ui/shared-contracts/test/thread-usage.test.ts +1 -1
- package/src/native-ui/shared-contracts/test/updates.test.ts +4 -4
- /package/licenses/{codex-host-MIT.txt → bytepioneer-MIT.txt} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.12 — 2026-09-17
|
|
4
|
+
|
|
5
|
+
- Antigravity: agy 1.2.x intermittently settles a turn with `SUCCESS` but no assistant text at all (tools ran, final answer lost). The adapter now automatically issues one nudge prompt in the same native conversation instead of failing the turn, and only reports the empty result when the retry also comes back empty (`HARNESSMIX_ANTIGRAVITY_EMPTY_RESULT_RETRIES`, default 1).
|
|
6
|
+
- Collaboration: inspecting a thread's team without an explicit `teamId` (the renderer's per-thread poll) now answers `{ team: null, snapshots: [] }` instead of throwing an internal error for every ordinary thread; an explicit `teamId` remains an ownership check.
|
|
7
|
+
- The README is now fully bilingual (中文 + English), and Harness Mix is dual-licensed under Apache-2.0 OR MIT: `LICENSE-MIT` was added, and `package.json`, the Rust crates and the native-package publisher now declare `(Apache-2.0 OR MIT)`.
|
|
8
|
+
|
|
9
|
+
- Renamed the kernel's internal legacy identifiers to `harnessmix`: data directory, environment variables, protocol method namespaces, DOM hooks, and the `@harnessmix/*` package scope. Deployed Shim and protocol binaries must be rebuilt (`npm run build:native`) so the Rust and JavaScript layers agree on the environment contract.
|
|
10
|
+
- Relocated the data directory to `<base>/harnessmix`; the one-time relocation of pre-rename installs has served its purpose and is now removed together with every remaining mention of the old naming.
|
|
11
|
+
- `npm run build:native` now fails instead of silently keeping a stale `harness-mix-shim.exe` when a running Codex Desktop locks it **and** its contents changed; a byte-identical locked binary is still kept for UI-only rebuilds.
|
|
12
|
+
- Removed the remaining third-party reference comments from adapter and error-classification sources, and narrowed the release-notes URL check in `@harnessmix/shared-contracts` so only this project's GitHub Release (`emo-xiaoyu/harness-mix`) is accepted. Attribution required by upstream licenses (`NOTICE`, `licenses/`, `src/native-ui/LICENSE` and the per-subtree provenance notes) is unchanged.
|
|
13
|
+
- Dropped the last third-party reference comments in the multi-Agent collaboration runtime and renamed `docs/superpowers/specs/` to `docs/specs/`, so no source path or comment names another project. Stopped tracking `.workbuddy/memory/` (already covered by `.gitignore`); the local notes are unchanged.
|
|
14
|
+
- Added the missing attribution for the bundled harness and model icons: twenty-four of the thirty-three are redistributed from `lobehub/lobe-icons` (MIT) — fifteen byte-identical, nine with identical path data — so `licenses/lobe-icons-MIT.txt` was added, `src/assets/icons/PROVENANCE.md` now maps every file to its origin (and lists the three files no code path references), and `NOTICE` records the redistribution plus the trademark status of all bundled brand marks.
|
|
15
|
+
- Added a bilingual acknowledgements section to the README crediting the projects this kernel drew on: BytePioneer-AI's Codex Desktop integration project for the native integration basis, `NanmiCoder/cc-haha` for the collaboration orchestration approach, `xintaofei/codeg` for the tool protocol and multi-Harness wiring, and `HeiGeAi/heige-codex-skin-studio` for the bundled skin artwork.
|
|
16
|
+
|
|
3
17
|
## 0.1.11 — 2026-09-16
|
|
4
18
|
|
|
5
19
|
- Aligned all six `@harness-mix/native-*` runtime packages at 0.1.11 with the CLI; native binaries are unchanged from 0.1.9.
|
|
6
20
|
- Supersedes 0.1.10, whose manifest kept native pins at 0.1.9 (functionally identical binaries).
|
|
21
|
+
- Added durable multi-Harness Agent Teams with one Lead, up to six concurrent specialist members, a dependency-aware shared task graph, teammate mailboxes/direct session delivery, and a live in-conversation Team Workbench with explicit responsibilities, per-member task lanes, Harness icons, member-session navigation, and replayable state history.
|
|
22
|
+
- Unified Host-owned Git inspection, strict Worktree isolation, and final snapshot Diff across all registered Harness adapters without changing native models, sessions, tools, approvals, or credentials.
|
|
7
23
|
|
|
8
24
|
## 0.1.10 — 2026-09-16
|
|
9
25
|
|
package/NOTICE
CHANGED
|
@@ -6,9 +6,9 @@ This product includes software developed by third-party open source projects.
|
|
|
6
6
|
Third-party components remain subject to their respective licenses.
|
|
7
7
|
|
|
8
8
|
Native Codex Desktop components (renderer-extension, desktop-control, shared-contracts)
|
|
9
|
-
are derived from BytePioneer-AI
|
|
9
|
+
are derived from an upstream MIT-licensed project by BytePioneer-AI (v0.6.1).
|
|
10
10
|
Copyright (c) 2026 BytePioneer-AI.
|
|
11
|
-
|
|
11
|
+
The upstream license text is preserved in licenses/bytepioneer-MIT.txt.
|
|
12
12
|
All execution runtimes, protocols, adapters and local launchers are developed and maintained in this repository.
|
|
13
13
|
|
|
14
14
|
Native DeepSeek integration uses @deepseek-ai/dsh 0.1.2-rc.1 (MIT).
|
|
@@ -24,3 +24,17 @@ Source: https://github.com/xuhuanstudio/codex-styler
|
|
|
24
24
|
The original artwork is licensed under Creative Commons Attribution 4.0.
|
|
25
25
|
Upstream attribution and asset license records are preserved under
|
|
26
26
|
src/assets/skins/codex-styler/. The upstream software is Apache-2.0 licensed.
|
|
27
|
+
|
|
28
|
+
Twenty-four icons under src/assets/icons/ are redistributed from lobehub/lobe-icons
|
|
29
|
+
under the MIT License. Copyright (c) 2023 LobeHub.
|
|
30
|
+
Source: https://github.com/lobehub/lobe-icons
|
|
31
|
+
The upstream license text is preserved in licenses/lobe-icons-MIT.txt.
|
|
32
|
+
The per-file mapping and the origin of every other bundled icon are recorded in
|
|
33
|
+
src/assets/icons/PROVENANCE.md.
|
|
34
|
+
|
|
35
|
+
All harness and model icons under src/assets/icons/ — including the ones covered by
|
|
36
|
+
the license above — are the trademarks of their respective owners. They are bundled
|
|
37
|
+
solely to identify the harnesses and models this project integrates with, and no
|
|
38
|
+
trademark right, endorsement or affiliation is claimed. Icons not covered by the
|
|
39
|
+
lobe-icons license remain the property of their respective owners; this repository
|
|
40
|
+
grants no license to them beyond viewing them as part of this product.
|
package/README.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Harness Mix
|
|
2
2
|
|
|
3
|
+
<p align="center"><a href="#zh">中文</a> | <a href="#en">English</a></p>
|
|
4
|
+
|
|
5
|
+
<a id="zh"></a>
|
|
6
|
+
|
|
3
7
|
macOS/Linux 已加入源码构建与启动适配;目标系统的完整桌面验收仍需在对应机器执行。安装方式、Linux 桌面前提和支持边界见 [跨平台指南](docs/cross-platform.md)。
|
|
4
8
|
|
|
5
9
|
<p align="center">
|
|
@@ -17,7 +21,7 @@ macOS/Linux 已加入源码构建与启动适配;目标系统的完整桌面
|
|
|
17
21
|
<p align="center"><strong>Codex 原生 UI,连接多个原生 Coding Harness,并让任务在它们之间无缝接力。</strong></p>
|
|
18
22
|
|
|
19
23
|
<p align="center">
|
|
20
|
-
<a href="LICENSE"><img alt="License: Apache-2.0" src="https://img.shields.io/badge/license-Apache--2.0-blue.svg"></a>
|
|
24
|
+
<a href="LICENSE"><img alt="License: Apache-2.0 OR MIT" src="https://img.shields.io/badge/license-Apache--2.0%20OR%20MIT-blue.svg"></a>
|
|
21
25
|
<img alt="UI" src="https://img.shields.io/badge/UI-Codex%20Desktop-412991.svg">
|
|
22
26
|
<img alt="Windows" src="https://img.shields.io/badge/platform-Windows-0078D4.svg">
|
|
23
27
|
<img alt="macOS" src="https://img.shields.io/badge/platform-macOS-555555.svg">
|
|
@@ -81,7 +85,7 @@ Harness Mix 是接入官方 Codex Desktop 原生界面的本地内核。它通
|
|
|
81
85
|
| **📋 原生消息队列** | 完整接入 Codex 会话排队机制(增删改查、排序、插队抢占与自动排空) | 原生 Composer 队列;当前回合完成后自动顺序调度执行排队消息 |
|
|
82
86
|
| **✅ 可配置验证门禁** | 任务级 off / advisory / required 策略,内置一致性检查与自定义验证命令 | 命令面板 `/gate`、`/verify`;强制模式保护隔离分支合并与推送 |
|
|
83
87
|
| **💾 会话存储治理** | schema v3 分片惰性加载、无损紧凑存储、迁移备份与体积诊断 | 冷启动只读任务索引;打开任务时才恢复对应 Core checkpoint |
|
|
84
|
-
| **🩹 失败分类与恢复** | 失败回合归类为连接 / 登录 / 额度 / 被拒 / 服务异常五类,分类来自原生结构化错误(Codex `codexErrorInfo` 透传)、状态码或消息特征,无法归类时诚实标注 unknown | 错误状态随任务投影;Renderer 可查 `
|
|
88
|
+
| **🩹 失败分类与恢复** | 失败回合归类为连接 / 登录 / 额度 / 被拒 / 服务异常五类,分类来自原生结构化错误(Codex `codexErrorInfo` 透传)、状态码或消息特征,无法归类时诚实标注 unknown | 错误状态随任务投影;Renderer 可查 `harnessmix/harness/turn-error` 获取分类与动作(重试 / 去登录 / 新建会话),login 按钮按 Harness 真实登录能力出现 |
|
|
85
89
|
| **🌐 ChatGPT 侧边栏桥接** | 安全脱敏提取当前会话上下文并一键生成结构化草稿 | Web 快捷聊天面板;直通注入 ChatGPT,实现跨工具无缝协作 |
|
|
86
90
|
| **👤 账户与用量隔离** | Codex 多账户隔离与即时切换;实时追踪 Token / Credits 用量 | 原生侧边栏与设置面板;各 Harness 凭据、模型与审批原生自理 |
|
|
87
91
|
|
|
@@ -139,6 +143,9 @@ Harness Mix 是接入官方 Codex Desktop 原生界面的本地内核。它通
|
|
|
139
143
|
- **触发符解耦**:在原生输入框输入 `#` 调出协同菜单(`#pi`、`#claude`、`#codex`、`#dsh`),完全保留官方 `@` 菜单给 Codex 原生功能。
|
|
140
144
|
- **标签可视化**:已选协同 Agent 在输入框顶部呈现为胶囊标签,支持点击快速删除或 Backspace 撤销。
|
|
141
145
|
- **严谨编排约束**:自动为主控 Coordinator 注入硬约束,严禁越界派发给未指定的 Harness;完善级联取消与子任务超时熔断机制。
|
|
146
|
+
- **真正的 Agent Team**:一个 Lead 可组织最多六个并发的具名 Harness 成员;Team、职责、共享任务依赖图和成员邮箱均由 Host 持久化,teammate 可直接定向通信、交接和反馈,而不是只把并行结果返回 Lead。
|
|
147
|
+
- **原生 Team Workbench**:对话顶部团队驾驶舱点击「展开详情」后在 Codex 内容流内显示唯一主导者、各成员职责、独立任务列、进度、通信流和事件回放,不覆盖原生侧栏、消息或输入框;成员卡片可跳转其原生子任务。状态直接向 Host 实时刷新,各成员仍使用自己的原生 Harness Session、模型、工具、权限和账户。
|
|
148
|
+
- **统一 Workspace 能力**:全部 Harness 由 Host 统一获得 Git 探测、Worktree 隔离和最终快照 Diff;原生实时 Diff 继续按各 Harness 实际协议叠加。显式隔离失败不会降级到共享目录。
|
|
142
149
|
|
|
143
150
|
### 🧩 原生 Skills 与 MCP 管理
|
|
144
151
|
- **17 平台免配置预建**:打开会话时自动预建全部 17 个 Harness 声明的原生 Skills 根目录,新安装 Harness 也能即开即用。
|
|
@@ -222,4 +229,259 @@ npm run e2e:codex
|
|
|
222
229
|
|
|
223
230
|
## License
|
|
224
231
|
|
|
225
|
-
Harness Mix 基于 [Apache License 2.0](LICENSE)
|
|
232
|
+
Harness Mix 基于 [Apache License 2.0](LICENSE) 或 [MIT](LICENSE-MIT) 双许可证发布,可任选其一。第三方组件仍适用各自的许可证;归属信息见 [NOTICE](NOTICE)。
|
|
233
|
+
|
|
234
|
+
## 鸣谢
|
|
235
|
+
|
|
236
|
+
Harness Mix 一路走来,受了下面这些开源项目不少启发。它们都把成果公开在自己的仓库里,本项目的架构分层、协议接线和界面细节都从中获益:
|
|
237
|
+
|
|
238
|
+
- BytePioneer-AI 的 Codex Desktop 集成项目(MIT)—— 官方 Codex Desktop 原生界面集成(renderer extension / desktop control / shared contracts)的衍生基础,也是整体分层与协议接线的思路来源。
|
|
239
|
+
- [NanmiCoder/cc-haha](https://github.com/NanmiCoder/cc-haha) —— 多 Agent 协作运行时的编排思路来源。
|
|
240
|
+
- [xintaofei/codeg](https://github.com/xintaofei/codeg) —— 工具协议与多 Harness 接线方式的参考。
|
|
241
|
+
- [HeiGeAi/heige-codex-skin-studio](https://github.com/HeiGeAi/heige-codex-skin-studio) —— 皮肤市场内置皮肤素材的来源。
|
|
242
|
+
|
|
243
|
+
以上项目各自适用原有许可证,归属声明与许可正文见 [NOTICE](NOTICE) 与 [licenses/](licenses/)。相关商标仍归各自所有者,本项目仅用于标识所集成的产品,不主张任何商标权、背书或关联关系。
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
<a id="en"></a>
|
|
248
|
+
|
|
249
|
+
# Harness Mix
|
|
250
|
+
|
|
251
|
+
macOS/Linux source builds and launch adaptation are in place; full desktop acceptance on those systems still has to run on the respective machines. See the [Cross-Platform Guide](docs/cross-platform.md) for install options, Linux desktop prerequisites and support boundaries.
|
|
252
|
+
|
|
253
|
+
<p align="center">
|
|
254
|
+
<img src="src/assets/brand-harness-mix.png" width="92" alt="Harness Mix logo">
|
|
255
|
+
</p>
|
|
256
|
+
|
|
257
|
+
<p align="center">
|
|
258
|
+
⭐ If this project helps you, please give us a <a href="https://github.com/emo-xiaoyu/harness-mix">Star</a>! ⭐
|
|
259
|
+
</p>
|
|
260
|
+
|
|
261
|
+
<p align="center">
|
|
262
|
+
<a href="https://linux.do/"><img alt="Linux DO" src="https://img.shields.io/badge/Linux%20DO-%E7%A4%BE%E5%8C%BA-0A66C2.svg"></a>
|
|
263
|
+
</p>
|
|
264
|
+
|
|
265
|
+
<p align="center"><strong>The Codex native UI, connecting multiple native coding Harnesses with seamless task handoff between them.</strong></p>
|
|
266
|
+
|
|
267
|
+
<p align="center">
|
|
268
|
+
<a href="LICENSE"><img alt="License: Apache-2.0 OR MIT" src="https://img.shields.io/badge/license-Apache--2.0%20OR%20MIT-blue.svg"></a>
|
|
269
|
+
<img alt="UI" src="https://img.shields.io/badge/UI-Codex%20Desktop-412991.svg">
|
|
270
|
+
<img alt="Windows" src="https://img.shields.io/badge/platform-Windows-0078D4.svg">
|
|
271
|
+
<img alt="macOS" src="https://img.shields.io/badge/platform-macOS-555555.svg">
|
|
272
|
+
<img alt="Linux" src="https://img.shields.io/badge/platform-Linux-FCC624.svg">
|
|
273
|
+
</p>
|
|
274
|
+
|
|
275
|
+
<p align="center"><strong>Currently registered Harnesses (17)</strong></p>
|
|
276
|
+
|
|
277
|
+
<table align="center">
|
|
278
|
+
<tbody>
|
|
279
|
+
<tr>
|
|
280
|
+
<td align="center"><img src="src/assets/icons/antigravity-color.svg" width="28" height="28" alt="Antigravity"><br><sub>Antigravity</sub></td>
|
|
281
|
+
<td align="center"><img src="src/assets/icons/codex-harness.svg" width="28" height="28" alt="Codex"><br><sub>Codex</sub></td>
|
|
282
|
+
<td align="center"><img src="src/assets/icons/claude-color.svg" width="28" height="28" alt="Claude Code"><br><sub>Claude Code</sub></td>
|
|
283
|
+
<td align="center"><img src="src/assets/icons/pi.svg" width="28" height="28" alt="Pi"><br><sub>Pi</sub></td>
|
|
284
|
+
</tr>
|
|
285
|
+
<tr>
|
|
286
|
+
<td align="center"><img src="src/assets/icons/omp-color.svg" width="28" height="28" alt="Oh My Pi"><br><sub>Oh My Pi</sub></td>
|
|
287
|
+
<td align="center"><img src="src/assets/icons/deepseek-color.svg" width="28" height="28" alt="DeepSeek Harness"><br><sub>DeepSeek</sub></td>
|
|
288
|
+
<td align="center"><img src="src/assets/icons/opencode-color.svg" width="28" height="28" alt="OpenCode"><br><sub>OpenCode</sub></td>
|
|
289
|
+
<td align="center"><img src="src/assets/icons/grok-color.svg" width="28" height="28" alt="Grok"><br><sub>Grok</sub></td>
|
|
290
|
+
</tr>
|
|
291
|
+
<tr>
|
|
292
|
+
<td align="center"><img src="src/assets/icons/openclaw-color.svg" width="28" height="28" alt="OpenClaw"><br><sub>OpenClaw</sub></td>
|
|
293
|
+
<td align="center"><img src="src/assets/icons/hermes-color.svg" width="28" height="28" alt="Hermes"><br><sub>Hermes</sub></td>
|
|
294
|
+
<td align="center"><img src="src/assets/icons/qoder-color.svg" width="28" height="28" alt="Qoder"><br><sub>Qoder</sub></td>
|
|
295
|
+
<td align="center"><img src="src/assets/icons/codebuddy-color.svg" width="28" height="28" alt="CodeBuddy"><br><sub>CodeBuddy</sub></td>
|
|
296
|
+
</tr>
|
|
297
|
+
<tr>
|
|
298
|
+
<td align="center"><img src="src/assets/icons/kiro-cli-color.svg" width="28" height="28" alt="Kiro"><br><sub>Kiro</sub></td>
|
|
299
|
+
<td align="center"><img src="src/assets/icons/cursor.svg" width="28" height="28" alt="Cursor"><br><sub>Cursor</sub></td>
|
|
300
|
+
<td align="center"><img src="src/assets/icons/zcode-color.svg" width="28" height="28" alt="ZCode"><br><sub>ZCode</sub></td>
|
|
301
|
+
<td align="center"><img src="src/assets/icons/trae-color.svg" width="28" height="28" alt="Trae"><br><sub>Trae</sub></td>
|
|
302
|
+
</tr>
|
|
303
|
+
<tr>
|
|
304
|
+
<td align="center"><img src="src/assets/icons/cline-color.svg" width="28" height="28" alt="Cline"><br><sub>Cline</sub></td>
|
|
305
|
+
</tr>
|
|
306
|
+
</tbody>
|
|
307
|
+
</table>
|
|
308
|
+
|
|
309
|
+
<p align="center"><sub>Icons and Harness capabilities come from the project's own registry; only Harnesses installed locally with a successful handshake enter real runs.</sub></p>
|
|
310
|
+
|
|
311
|
+
Harness Mix is a local kernel that plugs into the official Codex Desktop native UI. Through a locally compiled CLI Shim it speaks the desktop's app-server protocol and connects native coding Harnesses — including Antigravity, Codex, Pi, Oh My Pi, Claude Code, DeepSeek Harness, OpenCode, Grok, OpenClaw, Hermes, Qoder, CodeBuddy, Kiro CLI, Cursor CLI, ZCode, Trae and Cline — into one UI. The Host Runtime and Protocol Core manage task mapping, collaboration and event projection; model calls, tool execution, native sessions and credentials stay owned by each Harness itself.
|
|
312
|
+
|
|
313
|
+
## UI Preview
|
|
314
|
+
|
|
315
|
+
<p align="center">
|
|
316
|
+
<img src="docs/images/codex-desktop-home.png" width="960" alt="Harness Mix in the Codex Desktop native home">
|
|
317
|
+
</p>
|
|
318
|
+
|
|
319
|
+
The preview comes from the current Codex Desktop native window: Harness Mix appears as a native extension entry in the desktop toolbar and the Composer, while sessions, models, tools and permissions remain managed by Codex Desktop and each Harness.
|
|
320
|
+
|
|
321
|
+
| Module | Core capabilities | Entry points & notes |
|
|
322
|
+
| :--- | :--- | :--- |
|
|
323
|
+
| **🔄 Cross-Harness Task Handoff** | 4 handoff modes (continue / run plan / independent review / re-analyze) with smooth transitions | Composer handoff badge / `/switch`; persisted redacted checkpoints with evidence traceability |
|
|
324
|
+
| **🎨 Skin Marketplace** | Built-in HeiGe and Codex Styler themes with light / dark modes, background decorations and readability protection | Settings → Skins; one-click preview, apply and restore the stock look |
|
|
325
|
+
| **📚 History Import & Reference** | One-click import of Pi / Claude / Codex / CodeBuddy native history with interruptible resume; `#` references any past session with redacted context injected | References prefetch only the latest page; read-only MCP tools `get_session_info` / `list_session_messages` let Harnesses page through and read branch / model / usage metadata on demand |
|
|
326
|
+
| **🤝 Multi-Agent Orchestration** | Type `#` to summon target Harnesses, manage them as capsule tags, dispatch under strong coordinator constraints | Composer `#` menu; loop review and verification, cascading subtask cancellation and timeout circuit breaking |
|
|
327
|
+
| **🧩 Native Skills Management** | Covers the native skill directories of all 17 Harnesses, with root directories pre-created at session start | Settings → Skills; drag-and-drop install of a single `SKILL.md` or a complete folder |
|
|
328
|
+
| **🛠️ Native MCP Extensions** | Local stdio and remote Streamable HTTP / SSE transports | Settings → MCP; custom headers supported, applied per Harness |
|
|
329
|
+
| **📋 Native Message Queue** | Full integration of the Codex session queue (add / remove / edit, reorder, preempt and auto-drain) | Native Composer queue; queued messages are scheduled sequentially once the current turn completes |
|
|
330
|
+
| **✅ Configurable Verification Gates** | Per-task off / advisory / required policies, built-in consistency checks and custom verification commands | Command palette `/gate`, `/verify`; required mode protects isolated branch merges and pushes |
|
|
331
|
+
| **💾 Session Storage Governance** | schema v3 sharded lazy loading, lossless compact storage, migration backups and size diagnostics | Cold start reads only the task index; a task's Core checkpoint is restored only when it is opened |
|
|
332
|
+
| **🩹 Failure Classification & Recovery** | Failed turns are classified as connection / login / quota / rejected / service fault, derived from native structured errors (Codex `codexErrorInfo` passthrough), status codes or message patterns, and honestly marked unknown when nothing matches | Error state follows the task projection; the Renderer can query `harnessmix/harness/turn-error` for the classification and actions (retry / go sign in / new session), and the login button only appears when the Harness truly supports it |
|
|
333
|
+
| **🌐 ChatGPT Sidebar Bridge** | Safely redacts and extracts the current session context and generates a structured draft in one click | Web quick-chat panel; injected straight into ChatGPT for seamless cross-tool collaboration |
|
|
334
|
+
| **👤 Account & Usage Isolation** | Codex multi-account isolation with instant switching; real-time Token / Credits tracking | Native sidebar and settings panel; each Harness manages its own credentials, models and approvals |
|
|
335
|
+
|
|
336
|
+
### 🎨 Skin Marketplace Preview
|
|
337
|
+
|
|
338
|
+
Theme assets ship with the project and the images use licensed material from this repository; applying a skin only changes the visual layer, never Codex's native interactions or Harness execution behavior.
|
|
339
|
+
|
|
340
|
+
<table align="center">
|
|
341
|
+
<tr>
|
|
342
|
+
<td align="center"><img src="src/assets/skins/heige/themes/miku-488137/hero.webp" width="360" alt="Miku theme"><br><sub>🎀 Miku</sub></td>
|
|
343
|
+
<td align="center"><img src="src/assets/skins/heige/themes/genshin-night/hero.webp" width="360" alt="Genshin Night theme"><br><sub>🌌 Genshin Night</sub></td>
|
|
344
|
+
</tr>
|
|
345
|
+
<tr>
|
|
346
|
+
<td align="center"><img src="src/assets/skins/heige/themes/deepspace-star/hero.webp" width="360" alt="Deepspace Star theme"><br><sub>🌠 Deepspace Star</sub></td>
|
|
347
|
+
<td align="center"><img src="src/assets/skins/heige/themes/wuthering-tide/hero.webp" width="360" alt="Wuthering Tide theme"><br><sub>🌊 Wuthering Tide</sub></td>
|
|
348
|
+
</tr>
|
|
349
|
+
</table>
|
|
350
|
+
|
|
351
|
+
## Native Harness Support Matrix
|
|
352
|
+
|
|
353
|
+
> 💡 **Design principle**: every capability is honestly declared in the Adapter `manifest`, and the UI renders from real capabilities instead of guessing from names. Credentials, models, tools and permission approvals always remain under each native Harness's own control.
|
|
354
|
+
|
|
355
|
+
| Harness | Native protocol | Streaming | Reasoning | Tool approval | User questions | Resume / Fork | Image attachments | Native Skills | MCP |
|
|
356
|
+
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
|
357
|
+
| **Antigravity** | `agy` CLI (`stream-json` / Hook) | ✅ | ✅ | ✅ | ✅ | ✅ / ✅ | ✅ | ✅ | ✅ |
|
|
358
|
+
| **Codex** | `codex app-server --stdio` | ✅ | ✅ | ✅ | ✅ | ✅ / ✅ | ✅ | ✅ | ✅ |
|
|
359
|
+
| **Claude Code** | `@anthropic-ai/claude-agent-sdk` | ✅ | ✅ | ✅ | ✅ | ✅ / ✅ | ✅ | ✅ | ✅ |
|
|
360
|
+
| **Pi** | `pi --mode rpc` | ✅ | ✅ | ✅ | ✅ | ✅ / ✅ | ✅ | ✅ | ➖ |
|
|
361
|
+
| **Oh My Pi** | `omp --mode rpc` (`pi-family.js`) | ✅ | ✅ | ✅ | ✅ | ✅ / ✅ | ✅ | ✅ | ➖ |
|
|
362
|
+
| **DeepSeek** | Plain Web Remote / collaboration ACP | ✅ | ✅ | ✅ | ✅ | ✅ / ✅ | ✅ | ✅ | ✅ |
|
|
363
|
+
| **OpenCode** | `opencode serve` (HTTP / SSE) | ✅ | ✅ | ✅ | ✅ | ✅ / ✅ | ✅ | ✅ | ✅ |
|
|
364
|
+
| **Grok** | `grok agent stdio` (`_x.ai/*`) | ✅ | ✅ | ✅ | ✅ | ✅ / ✅ | ✅ | ✅ | ✅ |
|
|
365
|
+
| **OpenClaw** | Gateway WebSocket Loopback | ✅ | ➖ | ✅ | ➖ | ✅ / ➖ | ✅ | ✅ | ➖ |
|
|
366
|
+
| **Hermes** | `hermes acp` | ✅ | ✅ | ✅ | ✅ | ✅ / ✅ | ➖ | ✅ | ✅ |
|
|
367
|
+
| **CodeBuddy** | `codebuddy --acp` (`_codebuddy.ai/*`) | ✅ | ✅ | ✅ | ✅ | ✅ / ➖ | ✅ | ✅ | ✅ |
|
|
368
|
+
| **Kiro CLI** | `kiro-cli acp` (`_kiro/*`) | ✅ | ✅ | ✅ | ✅ | ✅ / ✅ | ➖ | ✅ | ✅ |
|
|
369
|
+
| **Cursor CLI** | `cursor-agent acp` (`cursor/*`) | ✅ | ✅ | ✅ | ✅ | ✅ / ➖ | ➖ | ✅ | ✅ |
|
|
370
|
+
| **Qoder** | `qoder --acp` | ✅ | ➖ | ✅ | ➖ | ✅ / ➖ | ✅ | ✅ | ✅ |
|
|
371
|
+
| **ZCode** | Compatible ACP bridge | ✅ | ➖ | ✅ | ➖ | ✅ / ➖ | ➖ | ✅ | ✅ |
|
|
372
|
+
| **Trae** | Compatible ACP bridge | ✅ | ➖ | ✅ | ➖ | ✅ / ➖ | ➖ | ✅ | ✅ |
|
|
373
|
+
| **Cline** | `cline --acp` | ✅ | ✅ | ✅ | ➖ | ✅ / ➖ | ✅ | ✅ | ✅ |
|
|
374
|
+
|
|
375
|
+
<sub>Note: ✅ means natively supported and wired end-to-end; ➖ means the upstream protocol currently does not expose or declare it; only Harnesses installed locally with a successful handshake enter real runs. See [Native ACP Deep Integration](docs/native-acp.md) and [Harness Management](docs/harness-management.md) for details.</sub>
|
|
376
|
+
|
|
377
|
+
## Core Features
|
|
378
|
+
|
|
379
|
+
### 🔄 Cross-Harness Task Handoff
|
|
380
|
+
One Harness analyzes in depth, another writes the implementation, then you switch back to the original Harness for cross-review — all seamlessly within the same Codex Desktop native window:
|
|
381
|
+
- **Context fully preserved**: conversation history, uncommitted code changes, Git status and review records all carry over.
|
|
382
|
+
- **Persisted checkpoints**: hashed handoff snapshots with automatic redaction of test evidence and sensitive keys, pausable and resumable at any time.
|
|
383
|
+
- **Independent session resume**: each Harness's native session and parameters are stored separately, and switching back invokes its native resume mechanism (e.g. Pi `--session` or Claude `resume`).
|
|
384
|
+
- **Four handoff modes**: "Continue", "Run the previous plan", "Independent review" and "Re-analyze".
|
|
385
|
+
|
|
386
|
+
### 🤝 Multi-Agent Collaboration
|
|
387
|
+
- **Decoupled trigger**: type `#` in the native composer to open the collaboration menu (`#pi`, `#claude`, `#codex`, `#dsh`); the official `@` menu stays fully reserved for Codex native features.
|
|
388
|
+
- **Tag visualization**: selected collaborating Agents appear as capsule tags above the composer, with click-to-remove and Backspace-to-undo.
|
|
389
|
+
- **Strict orchestration constraints**: the coordinator is automatically injected with hard constraints that forbid dispatching to unspecified Harnesses; cascading cancellation and subtask timeout circuit breaking are built in.
|
|
390
|
+
- **Real Agent Teams**: one Lead can organize up to six concurrent named Harness members; the Team, roles, shared task dependency graph and member mailboxes are all persisted by the Host, so teammates communicate, hand off and report directly instead of only returning parallel results to the Lead.
|
|
391
|
+
- **Native Team Workbench**: expanding the details of the team cockpit at the top of a conversation shows the single lead, member roles, per-member task lanes, progress, message flow and event replay inside the Codex content stream — without covering the native sidebar, messages or composer. Member cards jump to their native subtasks. State refreshes live from the Host, and members keep using their own native Harness sessions, models, tools, permissions and accounts.
|
|
392
|
+
- **Unified workspace capabilities**: every Harness uniformly gets Host-owned Git detection, worktree isolation and a final snapshot diff; native live diffs continue to layer on top according to each Harness's real protocol. An explicit isolation failure never degrades to a shared directory.
|
|
393
|
+
|
|
394
|
+
### 🧩 Native Skills & MCP Management
|
|
395
|
+
- **Zero-config pre-creation across 17 platforms**: opening a session pre-creates the native Skills root directories declared by all 17 Harnesses, so even newly installed Harnesses work out of the box.
|
|
396
|
+
- **Drag-and-drop install**: in Settings → Skills, drop a single `SKILL.md` or a complete skill folder to install it, with safe path validation built in.
|
|
397
|
+
- **Scoped and safe disabling**: switch seamlessly between Global and Project scopes; disabling moves skills into a retention directory and never damages user source files.
|
|
398
|
+
- **Remote MCP support**: configure Streamable HTTP / SSE remote servers with custom headers.
|
|
399
|
+
|
|
400
|
+
### 🎨 Skin Marketplace & Readability Protection
|
|
401
|
+
- **Theme preview and switching**: preview and apply built-in themes in Settings → Skins, or restore the stock Codex look at any time.
|
|
402
|
+
- **Full-UI coverage**: background, sidebar, message cards, composer, buttons and text colors all follow theme tokens.
|
|
403
|
+
- **Dark-mode readability**: automatic overlays and contrast keep the sidebar, task lists and message content visible on dark backgrounds.
|
|
404
|
+
- **Zero interaction intrusion**: no Codex controls are replaced, and models, tools, permissions, queues and native sessions are never modified.
|
|
405
|
+
|
|
406
|
+
## Running Locally
|
|
407
|
+
|
|
408
|
+
Development requires Windows, macOS or Linux, a recent Node.js LTS and npm. The app never reads or stores Harness account credentials — install and sign in with each native CLI first; see the [Cross-Platform Guide](docs/cross-platform.md) for platform prerequisites and on-device acceptance scope.
|
|
409
|
+
```powershell
|
|
410
|
+
git clone https://github.com/emo-xiaoyu/harness-mix.git
|
|
411
|
+
cd harness-mix
|
|
412
|
+
npm install
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
### Install from npm
|
|
416
|
+
|
|
417
|
+
Harness Mix is published as the `@harness-mix/cli` npm package, and the command is still `harness-mix`. The current release bundles the native Shim for the platform that built it; on macOS/Linux, build from source on the target system — full details are in the [Cross-Platform Guide](docs/cross-platform.md).
|
|
418
|
+
|
|
419
|
+
```powershell
|
|
420
|
+
npm install --global @harness-mix/cli
|
|
421
|
+
harness-mix
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
Upgrade to the latest version:
|
|
425
|
+
|
|
426
|
+
```powershell
|
|
427
|
+
npm update --global @harness-mix/cli
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
The first run restarts an already-open Codex Desktop. The npm package distributes Harness Mix itself only; each Harness's CLI, login state, model quota and permissions still need to be installed and configured locally as listed below.
|
|
431
|
+
|
|
432
|
+
### How to Run
|
|
433
|
+
|
|
434
|
+
Native mode (default): the locally compiled Shim and Renderer extension plug into the official Codex Desktop, and model selection routes to the corresponding Harness. The first launch restarts an already-open Codex Desktop:
|
|
435
|
+
```powershell
|
|
436
|
+
npm start
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
Common native dependencies:
|
|
440
|
+
|
|
441
|
+
- Codex: install `@openai/codex` and make sure the `codex` command is available.
|
|
442
|
+
- Pi: make sure `pi.cmd` is available.
|
|
443
|
+
- Claude Code: the SDK ships as an npm dependency; authentication stays managed by the Claude Code environment.
|
|
444
|
+
- DeepSeek Harness: uses the `@deepseek-ai/dsh@0.1.2-rc.1` version locked by this project. `HARNESS_MIX_DSH_ROOT` may explicitly point at a source checkout, but the version must be supported by the kernel.
|
|
445
|
+
- CodeBuddy: install the official `codebuddy` CLI and sign in; old WorkBuddy installs keep working through a compatibility alias.
|
|
446
|
+
- Kiro CLI: install `kiro-cli`, enable the `acp` subcommand and sign in.
|
|
447
|
+
- Cursor CLI: install `cursor-agent` and sign in.
|
|
448
|
+
- Cline: install `cline` (`npm i -g cline`) and sign in via `cline auth`; Harness Mix connects through the official `cline --acp`.
|
|
449
|
+
- Qoder: install `qodercli` (or `qoder`) and sign in; the ACP entry depends on the installed version.
|
|
450
|
+
- ZCode / Trae: only set `HARNESS_MIX_ZCODE_ACP_EXECUTABLE` / `HARNESS_MIX_TRAE_EXECUTABLE` when you have a verified ACP-compatible bridge; the project never guesses official entry points.
|
|
451
|
+
|
|
452
|
+
See [Native Codex Integration](docs/native-codex.md) for wiring, data directories and verification notes.
|
|
453
|
+
|
|
454
|
+
## Verification
|
|
455
|
+
|
|
456
|
+
```powershell
|
|
457
|
+
npm run check
|
|
458
|
+
npm run test:core-all
|
|
459
|
+
npm run e2e:native
|
|
460
|
+
npm run smoke:native-ui
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
When native Adapters are involved, also run the corresponding real chains:
|
|
464
|
+
|
|
465
|
+
```powershell
|
|
466
|
+
npm run e2e:pi
|
|
467
|
+
npm run e2e:dsh
|
|
468
|
+
npm run e2e:claude
|
|
469
|
+
npm run e2e:codex
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
Some E2E suites launch real Harnesses and may require local installs, sign-in or model quota. Test artifacts are written to `output/` and should not be committed.
|
|
473
|
+
|
|
474
|
+
## License
|
|
475
|
+
|
|
476
|
+
Harness Mix is dual-licensed under [Apache License 2.0](LICENSE) or [MIT](LICENSE-MIT), at your option. Third-party components remain subject to their own licenses; see [NOTICE](NOTICE) for attribution.
|
|
477
|
+
|
|
478
|
+
## Acknowledgements
|
|
479
|
+
|
|
480
|
+
Harness Mix owes a lot to the open-source projects below. All of them publish their work in their own repositories, and this project's architecture, protocol wiring and interface details have benefited from them:
|
|
481
|
+
|
|
482
|
+
- BytePioneer-AI's Codex Desktop integration project (MIT) — the upstream basis for the native Codex Desktop integration (renderer extension, desktop control, shared contracts), and the source of its overall layering and protocol wiring.
|
|
483
|
+
- [NanmiCoder/cc-haha](https://github.com/NanmiCoder/cc-haha) — the orchestration approach behind the multi-Agent collaboration runtime.
|
|
484
|
+
- [xintaofei/codeg](https://github.com/xintaofei/codeg) — a reference for the tool protocol and multi-Harness wiring.
|
|
485
|
+
- [HeiGeAi/heige-codex-skin-studio](https://github.com/HeiGeAi/heige-codex-skin-studio) — the artwork bundled in the skin marketplace.
|
|
486
|
+
|
|
487
|
+
Each project remains subject to its own license; see [NOTICE](NOTICE) and [licenses/](licenses/) for the attribution records and upstream license texts. All trademarks remain the property of their respective owners. They are bundled solely to identify the products this project integrates with, and no trademark right, endorsement or affiliation is claimed.
|
package/docs/cross-platform.md
CHANGED
|
@@ -39,7 +39,7 @@ npm start -- --no-update
|
|
|
39
39
|
export HARNESS_MIX_DESKTOP_APP="/absolute/path/Codex.app"
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
启动器读取 Info.plist 的可执行文件名和版本,默认使用 `Contents/Resources/codex`。CLI 布局不同时设置 `
|
|
42
|
+
启动器读取 Info.plist 的可执行文件名和版本,默认使用 `Contents/Resources/codex`。CLI 布局不同时设置 `HARNESSMIX_STOCK_CODEX_PATH`,必须指向桌面自带的原版 CLI,不能指向 Harness Mix Shim。不改写签名包,不关闭 Gatekeeper。CLI 工具需在启动终端的 PATH 中可用。
|
|
43
43
|
|
|
44
44
|
## Linux 安装
|
|
45
45
|
|
|
@@ -49,7 +49,7 @@ export HARNESS_MIX_DESKTOP_APP="/absolute/path/Codex.app"
|
|
|
49
49
|
npm ci
|
|
50
50
|
npm run build:native
|
|
51
51
|
export HARNESS_MIX_DESKTOP_EXECUTABLE="/absolute/path/to/desktop-binary"
|
|
52
|
-
export
|
|
52
|
+
export HARNESSMIX_STOCK_CODEX_PATH="/absolute/path/to/resources/codex"
|
|
53
53
|
# 填写真实桌面版本,不是 CLI 版本;未知时省略,兼容性显示 unverified
|
|
54
54
|
export HARNESS_MIX_DESKTOP_VERSION="1.2.3"
|
|
55
55
|
npm run check:native
|
|
@@ -58,7 +58,7 @@ npm start -- --no-update
|
|
|
58
58
|
|
|
59
59
|
## 平台行为
|
|
60
60
|
|
|
61
|
-
- 数据目录:Windows 延续 `%APPDATA%/
|
|
61
|
+
- 数据目录:Windows 延续 `%APPDATA%/harnessmix`;macOS 使用 `~/Library/Application Support/harnessmix`;Linux 使用 `$XDG_DATA_HOME/harnessmix`,默认 `~/.local/share/harnessmix`。`HARNESSMIX_DATA_DIR` 始终优先。历史 Unix 试用数据如在其他目录,需显式设置该变量;不会自动搬迁。
|
|
62
62
|
- macOS/Linux 要求先退出已运行的同一个桌面程序,避免 Electron 单实例复用丢失 Shim 环境。不会按程序名批量清理用户进程。
|
|
63
63
|
- Unix Shim 使用 `exec` 替换自己,保留 PID、stdio 和信号;正常关闭依赖 Host 的 EOF/SIGTERM 清理。停止 Harness 时按父子关系清理子进程。Unix 不宣称具备 Windows Job Object 在 `SIGKILL` 下的强制整树退出保证;已经脱离父进程的 daemon 不属于该保证。
|
|
64
64
|
- Grok、Hermes 的 Unix 默认命令去掉 `.exe`;DSH Web 模式在 Unix 使用 `npm`,必须配置 `HARNESS_MIX_DSH_ROOT`。其他 Harness 仍需其厂商提供相应系统的原生 CLI,不将协议适配等同于厂商跨平台支持。
|
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
收齐结果后由你运行验证并总结。
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
也可直接输入 `#pi`、`#claude`、`#dsh`、`#codex` 等已注册 ID/别名。显式 `[名称](harness-mix://agent/pi)` 引用可随草稿复制;代码块和行内代码中的 `#`
|
|
14
|
+
也可直接输入 `#pi`、`#claude`、`#dsh`、`#codex` 等已注册 ID/别名。显式 `[名称](harness-mix://agent/pi)` 引用可随草稿复制;代码块和行内代码中的 `#` 不作为路由元数据。纯文本请求也可在“团队、组队、协作、委派、调度、分工、成员”等明确协作语境中,通过完整 Harness 名称授权,例如“用 Pi 开发、Claude 审查组成 Agent Team”。普通提及“Codex UI”不会启动协作。选择本身由主模型结合用户任务理解,Host 不按文字片段盲目拆任务。
|
|
15
15
|
|
|
16
16
|
## 执行方式
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
协作面由委派工具与 Agent 引用路由两部分组成,按以下方式接入:
|
|
19
19
|
|
|
20
20
|
1. Host 为主任务提供会话绑定的协作工具。Claude 通过 SDK 的 MCP 配置,Codex Adapter 通过 app-server 的线程 MCP 配置,Pi/OMP 通过原生扩展加载,Grok 通过原生 `session/new` 的 `mcpServers` 槽注入(L1),OpenCode 通过 `OPENCODE_CONFIG_CONTENT` 内联配置注入 `mcp["harness-mix"]`(V2 schema,运行时最高优先级、不写任何用户配置文件),DSH 协作主任务通过官方 `dsh --profile acp` 的 session-scoped MCP 注入,Antigravity 协作主任务通过 bridge 目录自动生成的 `.agents/plugins/harness-mix` plugin 及 loopback MCP 配置注入与引导词;DSH 普通任务仍走 Web Remote。
|
|
21
21
|
2. 主模型调用 `delegate_to_agent(agent_type, task)`,立即取得 `task_id`,可以继续发起其他任务。
|
|
@@ -25,17 +25,31 @@
|
|
|
25
25
|
|
|
26
26
|
`list_agents` 提供真实可用性。旧 `/delegate` 仍是独立的手动委派入口,其完成结果只回投父任务工具卡片,不自动调用父模型。
|
|
27
27
|
|
|
28
|
+
## Agent Team(不是并行 SubAgent)
|
|
29
|
+
|
|
30
|
+
Agent Team 复用同一套原生 Harness Session,但把 `Team`、`Member`、`Task`、`Message` 提升为 Host Runtime 的持久化一级对象:
|
|
31
|
+
|
|
32
|
+
1. Lead 调用 `create_agent_team` 创建团队、共同目标、具名成员与角色;成员必须来自用户本轮显式选择的 Harness。
|
|
33
|
+
2. `assign_team_task` 建立共享任务图,任务有固定 assignee 和 `depends_on` 依赖。依赖未完成时任务为 blocked,依赖完成后自动转为 pending。
|
|
34
|
+
3. Lead 使用带 `team_id` / `member_id` / `team_task_id` 的 `delegate_to_agent` 启动或复用该成员的原生 Session。Team member 是持续身份,不是完成即销毁的一次性 SubAgent。
|
|
35
|
+
4. Team member 可调用 `get_team_state`、`update_team_task` 和 `send_team_message`。成员只能更新分配给自己的任务;消息可定向或广播,先写入持久邮箱,目标成员空闲时会直接投递到其原生 Session。
|
|
36
|
+
5. Codex 对话顶部显示紧凑团队驾驶舱;点击「展开详情」后仍在原生内容流内展开 Team Workbench,不覆盖侧栏、对话或输入框。工作台用唯一 Lead 和最多六名成员的真实 Harness 图标呈现职责编队,每名成员拥有自己的职责、状态、任务列和进度,并显示团队通信与可回放事件时间轴。点击有原生 Session 的成员可直接进入其 Codex 子任务,点击「收起详情」或按 `Esc` 收起。
|
|
37
|
+
6. Workbench 通过 `harnessmix/thread/team/inspect` 直接查询 Host 持久化状态并实时刷新,不依赖工具卡片初次输出的旧快照;只有 Team Lead 和该团队成员线程可以读取。每次团队状态变化保留最近 200 个回放快照。
|
|
38
|
+
|
|
39
|
+
这与普通委派的区别是:普通委派仍是 Lead → worker → Lead;Agent Team 允许 teammate 围绕同一任务图直接交接、反馈和解锁依赖,同时每个 Harness 继续独立持有自己的模型、工具、权限、账户和原生历史。
|
|
40
|
+
|
|
28
41
|
## 执行边界
|
|
29
42
|
|
|
30
|
-
-
|
|
43
|
+
- Git、Worktree 与最终 Diff 是 Host Workspace 统一能力,不依赖 Adapter 是否提供原生 Git/Diff。所有已注册 Harness 都声明 `workspace.git/worktree/finalDiff=true`;`nativeDiff/nativePatch` 仍按各原生协议诚实声明。显式 Worktree 创建失败时任务直接失败,绝不静默落回共享目录。每轮最终 Diff 由 Host 文件快照补齐原生事件遗漏;只有同目录并发时,才以原生 Patch 限定本轮文件归属。
|
|
44
|
+
- 一个 Agent Team 由一个 Lead 和最多六个具名成员组成;同一主任务最多六个同时运行的子任务,每轮最多创建十六个。普通子任务不注入协作工具。Agent Team member 只获得团队状态、任务更新和邮箱能力,仍不能创建团队、分配任务或递归委派。
|
|
31
45
|
- 模型工具委派默认共享主任务目录,子 Agent 使用独立原生会话。开发完成后再委派审查,审查意见通过 `message_agent` 发回原开发者,修复后复用原审查会话复审。主任务应等待依赖步骤完成并避免同时修改相同文件。主任务负责共享目录整体文件快照。显式 `isolation=worktree`(或 Git 项目中的 `auto`)仍创建隔离分支与工作区,保存主目录当前非忽略文件作为起点,保留用户暂存区;隔离改动不会自动出现在主目录。
|
|
32
|
-
-
|
|
33
|
-
- 主任务可调用 `review_delegation_changes` 在原生工具卡片中审查 worktree patch。只有用户明确要求应用时才可调用 `apply_delegation_changes`,并必须提交刚审查得到的 digest。应用前检查 Git patch 冲突;冲突时结构化输出冲突文件清单及处置指引(工作区手动解决、推送到远程分支开 PR、或一键丢弃)。系统提供 `
|
|
46
|
+
- 协作不创建第二个应用或复制原生侧栏。Team Workbench 内嵌在当前 Codex Renderer 的会话内容区;父子关系仍通过原生 `parentThreadId` 投影,子任务仍进入 Codex 原生任务体系,审批与文件变化仍由对应 Harness 和原生 Changes 界面处理。
|
|
47
|
+
- 主任务可调用 `review_delegation_changes` 在原生工具卡片中审查 worktree patch。只有用户明确要求应用时才可调用 `apply_delegation_changes`,并必须提交刚审查得到的 digest。应用前检查 Git patch 冲突;冲突时结构化输出冲突文件清单及处置指引(工作区手动解决、推送到远程分支开 PR、或一键丢弃)。系统提供 `harnessmix/thread/workspace/discard` 一键安全清除 worktree 与删除临时分支,以及 `harnessmix/thread/workspace/push` 提交快照并直接推送到 Git 远程分支。worktree 默认保留供检查,不自动删除。隔离子任务有独立审查快照;共享子任务仍由主任务记录整体快照。旧 `/delegate` 手动入口仍为共享目录。
|
|
34
48
|
- 同目录的无关任务仍受原有执行互斥约束。父任务结束/取消、Host 关闭会取消尚未完成的子任务;30 分钟未完成的子任务会超时。
|
|
35
49
|
- 协作 HTTP 桥仅绑定 loopback,以每个主任务的随机本地能力标识鉴权;工具参数校验,子任务归属检查,外部 Origin 拒绝。该标识不是模型账户令牌。Host 不读取或代理原生账户密钥。
|
|
36
50
|
- Claude 的 `canUseTool` 和 Codex MCP elicitation 继续走原生审批。需要确认时,用户在相应任务的审批界面处理;自动验证不会代答。
|
|
37
51
|
- 主任务 Fork 会重新绑定自己的协作身份,不复用源任务的子任务访问权。
|
|
38
|
-
- task_id
|
|
52
|
+
- task_id、父子会话、任务文本、结果、worktree 起点以及 Team/Member/Task/Message 在独立串行存储中持久化;重启后在途 Job、Team Task 和 Member 一起变为 interrupted,不会继续显示为“工作中”,也不自动重复执行有副作用的操作。点击「继续协作」向原主任务发送续跑请求,主模型用 `list_delegations` / `resume_delegation` 恢复原子会话,并把同一 Team Task/Member 原子地切回进行中。原生会话丢失或无法恢复会明确报错。会话鉴权标识不持久化,重启重新签发。
|
|
39
53
|
|
|
40
54
|
## 支持与验证范围
|
|
41
55
|
|
|
@@ -65,25 +79,25 @@ npm run e2e:native
|
|
|
65
79
|
npm run build:native
|
|
66
80
|
```
|
|
67
81
|
|
|
68
|
-
`test:collaboration` 使用真实 MCP stdio 子进程、本地鉴权桥和受控原生会话 Adapter
|
|
82
|
+
`test:collaboration` 使用真实 MCP stdio 子进程、本地鉴权桥和受控原生会话 Adapter 验证并发、结果、跟进、取消、跨任务访问限制、Agent Team 身份/任务依赖/成员邮箱、时间轴持久化和共享快照策略。UI smoke 检查摘要入口、内嵌工作台、Lead/成员职责、真实 Harness 图标、成员会话跳转、成员任务列、通信流和时间轴,截图位于 `output/collaboration-ui/team-inline-expanded.png`。这不是完整 Codex Desktop 的真实模型交互验收;构建过程不会重启当前桌面。
|
|
69
83
|
|
|
70
84
|
2026-09-12 验证:Pi→Claude 两个真实子任务分别在不同 worktree 运行,DSH→CodeBuddy 两个真实子任务也在独立 worktree 完成并由 DSH 主会话汇总 `COLLAB_VERIFIED`。恢复测试覆盖持久化身份、原子会话续跑、不重复建任务;Git 测试覆盖脏目录起点、暂存区保留、过期预览拒绝、冲突时不部分应用。Native Protocol 覆盖父子任务归属与原生 MCP 工具卡片,Electron 仅覆盖原生输入框中的协作引用增强。Runtime 保持 Adapter `open()` 返回对象的同一身份,避免原生回调更新到浅拷贝而被活动回合闸门丢弃。
|
|
71
|
-
## 统一历史
|
|
72
|
-
|
|
73
|
-
设置 → 会话导入 → 全部历史,支持按标题、目录和会话 ID 搜索、分页、导入并打开。Pi、Claude、Codex 从本机原生历史发现会话;其余 Harness 当前聚合 Host 已管理的历史,并在来源名称上标为「Host 历史」,尚未接入各自 CLI 的外部会话扫描。
|
|
74
|
-
|
|
85
|
+
## 统一历史
|
|
86
|
+
|
|
87
|
+
设置 → 会话导入 → 全部历史,支持按标题、目录和会话 ID 搜索、分页、导入并打开。Pi、Claude、Codex 从本机原生历史发现会话;其余 Harness 当前聚合 Host 已管理的历史,并在来源名称上标为「Host 历史」,尚未接入各自 CLI 的外部会话扫描。
|
|
88
|
+
|
|
75
89
|
导入只创建投影和原生会话引用,不启动模型;再次发送时原生恢复。重复导入返回同一任务。输入 `#` 可从「会话」页选择一条记录;Host 最多读取三条引用,每条只附加最近十二条用户/助手文本,并明确标记为不可执行的历史数据。引用不会创建、恢复或占用原生会话。原始完整工具、隐藏状态和分支数据仍留在原生存储,因此这不是原生历史的无损迁移。原生运行状态未知时,应先关闭其他客户端的同一会话。
|
|
76
|
-
|
|
77
|
-
## 2026-09-11
|
|
78
|
-
|
|
90
|
+
|
|
91
|
+
## 2026-09-11 协作流程修复
|
|
92
|
+
|
|
79
93
|
- Agents 与历史会话分栏,使用 `#` 调出协作菜单,`@` 保留给原生功能;提示不可用主 Agent 的能力边界。
|
|
80
|
-
- 默认共享目录,使开发与审查读取同一份实际文件;保留显式隔离工作区。多任务等待在任一结果可收取时返回。
|
|
81
|
-
- 新增可更新的原生计划,子任务卡片投影真实会话 ID 与 Harness 名称,跟进复用原会话。
|
|
82
|
-
- 实测 Pi 主任务 + 两个独立 Pi 原生子会话:开发者写入错误样本 41 → 审查者 REVIEW_FAIL → message_agent 交回原开发者修为 42 → 原审查者 REVIEW_PASS → 主模型完成计划并汇总。测试验证文件实际导出值以及两个会话均收到跟进。日志:`output/collaboration-cycle.log`。
|
|
83
|
-
- Pi → Claude 写文件测试到达原生审批,未代答,跨 Harness 写文件闭环尚未通过;不能据此声称全部 Harness 组合已验收。
|
|
84
|
-
|
|
85
|
-
```powershell
|
|
86
|
-
npm run e2e:collaboration -- --lead=pi --worker=pi --cycle
|
|
87
|
-
```
|
|
88
|
-
|
|
94
|
+
- 默认共享目录,使开发与审查读取同一份实际文件;保留显式隔离工作区。多任务等待在任一结果可收取时返回。
|
|
95
|
+
- 新增可更新的原生计划,子任务卡片投影真实会话 ID 与 Harness 名称,跟进复用原会话。
|
|
96
|
+
- 实测 Pi 主任务 + 两个独立 Pi 原生子会话:开发者写入错误样本 41 → 审查者 REVIEW_FAIL → message_agent 交回原开发者修为 42 → 原审查者 REVIEW_PASS → 主模型完成计划并汇总。测试验证文件实际导出值以及两个会话均收到跟进。日志:`output/collaboration-cycle.log`。
|
|
97
|
+
- Pi → Claude 写文件测试到达原生审批,未代答,跨 Harness 写文件闭环尚未通过;不能据此声称全部 Harness 组合已验收。
|
|
98
|
+
|
|
99
|
+
```powershell
|
|
100
|
+
npm run e2e:collaboration -- --lead=pi --worker=pi --cycle
|
|
101
|
+
```
|
|
102
|
+
|
|
89
103
|
桌面实测与隔离增强:Pi 主 Agent 切换、Agents/会话切页、Claude 选择精确插入、图标标识和草稿清理通过。原生协作卡片已实装「↗ 查看 Agent 会话」跳转子任务 Thread、「🔍 查看产物 Diff」语法高亮展开与「✓ 合并改动到主项目」操作;Worktree 隔离环境已实装补丁冲突结构化指引、`discardWorkspace` 一键丢弃临时分支与 `pushWorkspace` 远程分支推送协议支持。截图与报告在 `output/collaboration-ui/desktop-*.png` 和 `desktop-report.json`。
|
package/docs/native-acp.md
CHANGED
|
@@ -57,7 +57,7 @@ Cursor 在 Windows 上识别官方版本目录并直接运行其 Node bundle。
|
|
|
57
57
|
|
|
58
58
|
## 能力边界
|
|
59
59
|
|
|
60
|
-
-
|
|
60
|
+
- 这是针对本项目接口实现的适配,不是完整移植上游项目的插件系统。
|
|
61
61
|
- 原生子 Agent 的独立卡片、后台生命周期与子会话历史浏览尚未实现。
|
|
62
62
|
CodeBuddy 带 parentToolCallId 的子 Agent 内容不会混入父回答。
|
|
63
63
|
- Kiro fork 只读取并校验原生 session.json/messages.jsonl 的最新完整 turn_end,
|
|
@@ -121,7 +121,7 @@ Antigravity、Pi、Claude Code、Codex、Grok、CodeBuddy;DSH/OpenClaw 的当
|
|
|
121
121
|
|
|
122
122
|
## 参考与图标
|
|
123
123
|
|
|
124
|
-
|
|
124
|
+
协议字段对照了上游 adapters 提交(7cc4db87)
|
|
125
125
|
的 codebuddy、kiro-cli、cursor-cli 实现及接口说明;其测试结果不视为本项目证据。
|
|
126
126
|
CodeBuddy 和 Cursor 图标取自该提交的官方品牌资源副本,Kiro 沿用仓库已有
|
|
127
127
|
官方 SVG。品牌标志归原所有者所有,不表示厂商背书。
|
package/docs/native-codex.md
CHANGED
|
@@ -18,7 +18,7 @@ Codex Desktop → Harness Mix Shim/Host → HostRuntime/ProtocolCore → 原生
|
|
|
18
18
|
|
|
19
19
|
## Codex 多账号
|
|
20
20
|
|
|
21
|
-
「设置 → 账号」保留官方 Codex Desktop 账号,并允许添加最多 127 个附加账号。每个附加账号使用 `%APPDATA%\
|
|
21
|
+
「设置 → 账号」保留官方 Codex Desktop 账号,并允许添加最多 127 个附加账号。每个附加账号使用 `%APPDATA%\harnessmix\codex-accounts\profiles\<account-id>` 作为独立 `CODEX_HOME`;设备码登录、`auth.json`、令牌刷新、额度与原生会话均由该目录对应的 Codex app-server 所有。Harness Mix 的 `accounts.json` 只记录账号档案 ID、显示名、创建时间和默认选择,不读取或复制认证内容。
|
|
22
22
|
|
|
23
23
|
账号页会从每个账号的原生 `account/read` 与 `account/rateLimits/read` 读取套餐、5 小时/7 天已用或剩余额度及刷新时间。编辑器 Agent 菜单可直接选择账号;官方账号仍走官方直通路径,附加账号的新任务进入同一套 Desktop Thread/Turn/工具/审批/Diff 界面并固定到所选账号。更改默认账号不会迁移或中断已运行任务。
|
|
24
24
|
|
|
@@ -52,7 +52,7 @@ npm start
|
|
|
52
52
|
- **git 检出(开发形态)**:可快进且工作区干净时自动拉取、按需重装依赖并重建原生组件;`install` / `build` 失败自动回退到更新前的提交。分叉、本地领先或工作区有未提交改动时跳过并打印原因。
|
|
53
53
|
- **npm 全局安装**:从 registry 发现新版本后,先停止桌面,再用 `npm install -g harness-mix@<版本>` 应用(校验由 npm integrity 承担),失败自动重试并挂起至下次启动;连续两次启动未成功会自动回滚到上一版本。
|
|
54
54
|
|
|
55
|
-
所有变更操作持有更新锁(`%APPDATA%\
|
|
55
|
+
所有变更操作持有更新锁(`%APPDATA%\harnessmix\update.lock`),状态记录在 `update-state.json`;应用成功后启动器自行重启加载新代码。任何更新失败(如离线、占用、权限)都不阻塞启动。
|
|
56
56
|
|
|
57
57
|
- `npm run update`:只检查并应用更新,不启动桌面(应用时会先停一次桌面)。
|
|
58
58
|
- `npm start -- --no-update` 或 `HARNESS_MIX_AUTO_UPDATE=0`:跳过本次更新检查。
|
|
@@ -67,7 +67,7 @@ Shim 只接管作为 Desktop 协议端点的普通 `app-server`。`app-server pr
|
|
|
67
67
|
## 进程监管
|
|
68
68
|
|
|
69
69
|
- Shim 启动即把自身加入 Job Object(`KILL_ON_JOB_CLOSE`):node 宿主、官方 app-server、各家 CLI 与 pwsh 终端全部随 shim 级联清理,强杀或崩溃也不例外。
|
|
70
|
-
- 宿主每 5s 写心跳(`%APPDATA%\
|
|
70
|
+
- 宿主每 5s 写心跳(`%APPDATA%\harnessmix\runtime\instance.json`);`uncaughtException` / `unhandledRejection` / `SIGBREAK` 会写入同目录 `crash-<ts>.json` 并尝试优雅收尾。
|
|
71
71
|
- 启动器在重启桌面前清扫本项目残留进程(仅匹配 shim 二进制路径与 `native-host.cjs` / `desktop-controller.mjs` 入口),并把上次异常退出时运行中的任务标记为 interrupted,重新发送即可继续。
|
|
72
72
|
- 适配器与终端统一经 `src/main/native/process-utils.js` 的 `terminateTree()`(Windows `taskkill /T /F`)终止进程树。
|
|
73
73
|
|
|
@@ -77,13 +77,13 @@ Shim 只接管作为 Desktop 协议端点的普通 `app-server`。`app-server pr
|
|
|
77
77
|
- `host-traffic.jsonl` 与 `shim-invocations.log` 均为 5MB × 3 轮转;写盘前对 Bearer/API key 形态与敏感字段键做脱敏(`src/main/native/redact.js`)。
|
|
78
78
|
- `npm run diagnostics`:把版本、桌面兼容状态、更新/实例状态、脱敏日志尾与最近崩溃报告打包为 zip 输出到 `output/`,供问题反馈。
|
|
79
79
|
|
|
80
|
-
默认 Host 数据目录为 `%APPDATA%\
|
|
80
|
+
默认 Host 数据目录为 `%APPDATA%\harnessmix`,可用 `HARNESSMIX_DATA_DIR` 覆盖。
|
|
81
81
|
|
|
82
82
|
本项目仅保存以下非凭据配置到该目录的 `harness-mix-settings.json`,以适配 Windows AppX 环境传递:
|
|
83
83
|
|
|
84
84
|
- `HARNESS_MIX_DSH_ROOT`:可选 DSH 源码目录。
|
|
85
85
|
- `HARNESS_MIX_CODEBUDDY_EXECUTABLE`、`HARNESS_MIX_KIRO_EXECUTABLE`、`HARNESS_MIX_CURSOR_EXECUTABLE`:可选原生 CLI 路径。CodeBuddy 兼容旧的 `HARNESS_MIX_WORKBUDDY_EXECUTABLE`,新变量优先。接口与验收见 [原生 ACP 深度适配](native-acp.md)。
|
|
86
|
-
- `
|
|
86
|
+
- `HARNESSMIX_PI_COMMAND`、`HARNESSMIX_CLAUDE_COMMAND`、`HARNESSMIX_DEEPSEEK_HARNESS_COMMAND`、`HARNESSMIX_ANTIGRAVITY_COMMAND`:可选原生命令路径。
|
|
87
87
|
|
|
88
88
|
环境变量优先于该文件;删除文件中的对应字段即可恢复默认。账号认证使用各原生程序和上游配置机制,本项目不保存凭据。
|
|
89
89
|
|
|
@@ -104,7 +104,7 @@ Antigravity question token 均为内存生成、按需注入子进程环境)
|
|
|
104
104
|
}
|
|
105
105
|
```
|
|
106
106
|
|
|
107
|
-
`<data>` = `
|
|
107
|
+
`<data>` = `HARNESSMIX_DATA_DIR`(默认 `%APPDATA%\harnessmix`)。
|
|
108
108
|
|
|
109
109
|
### 4.3 git 通道
|
|
110
110
|
|
|
@@ -308,7 +308,7 @@ launcher 入口(持锁):
|
|
|
308
308
|
|
|
309
309
|
新增:
|
|
310
310
|
|
|
311
|
-
- `docs/
|
|
311
|
+
- `docs/specs/2026-09-13-native-hardening-design.md`(本文)
|
|
312
312
|
- `src/main/native/process-utils.js`、`src/main/native/redact.js`、
|
|
313
313
|
`src/main/native/secure-store.js`
|
|
314
314
|
- `src/main/native/rs/crates/secret/`(新 crate)
|