@harness-mix/cli 0.1.10 → 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.
Files changed (306) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/NOTICE +16 -2
  3. package/README.md +265 -3
  4. package/docs/cross-platform.md +3 -3
  5. package/docs/multi-agent-collaboration.md +37 -23
  6. package/docs/native-acp.md +2 -2
  7. package/docs/native-codex.md +5 -5
  8. package/docs/{superpowers/specs → specs}/2026-09-13-native-hardening-design.md +2 -2
  9. package/docs/storage-verification-design.md +5 -5
  10. package/licenses/lobe-icons-MIT.txt +21 -0
  11. package/output/native-build/desktop-controller.mjs +24 -24
  12. package/output/native-build/harness-mix-secret.exe +0 -0
  13. package/output/native-build/harness-mix-shim.exe +0 -0
  14. package/output/native-build/renderer-extension.js +1325 -658
  15. package/package.json +8 -8
  16. package/scripts/adapters-test.cjs +9 -1
  17. package/scripts/antigravity-adapter-test.cjs +381 -284
  18. package/scripts/build-native.cjs +64 -46
  19. package/scripts/codex-accounts-test.cjs +1 -1
  20. package/scripts/codex-accounts-ui-smoke.cjs +1 -1
  21. package/scripts/collaboration-recovery-test.cjs +11 -2
  22. package/scripts/collaboration-test.cjs +114 -27
  23. package/scripts/collaboration-ui-smoke.cjs +45 -8
  24. package/scripts/concurrency-layers-test.cjs +5 -0
  25. package/scripts/diagnostics.cjs +1 -1
  26. package/scripts/e2e-native-host.cjs +13 -13
  27. package/scripts/error-kind-test.cjs +3 -3
  28. package/scripts/integrations-test.cjs +2 -2
  29. package/scripts/integrations-ui-smoke.cjs +6 -6
  30. package/scripts/native-config-test.cjs +6 -6
  31. package/scripts/native-job-object-test.cjs +1 -1
  32. package/scripts/native-protocol-test.cjs +44 -38
  33. package/scripts/native-rollback-test.cjs +1 -1
  34. package/scripts/native-secret-test.cjs +1 -1
  35. package/scripts/native-shim-test.cjs +1 -1
  36. package/scripts/native-sidebar-test.cjs +4 -4
  37. package/scripts/native-ui-smoke.cjs +12 -12
  38. package/scripts/pets-test.cjs +223 -3
  39. package/scripts/platform-test.cjs +6 -6
  40. package/scripts/publish-native-package.cjs +1 -1
  41. package/scripts/test-live-mentions.cjs +2 -2
  42. package/scripts/workspace-test.cjs +4 -2
  43. package/src/assets/icons/PROVENANCE.md +92 -0
  44. package/src/main/adapters/antigravity.js +1415 -1368
  45. package/src/main/adapters/claude.js +1 -1
  46. package/src/main/adapters/codex-app-server.js +1 -1
  47. package/src/main/adapters/dsh.js +1 -1
  48. package/src/main/adapters/index.js +1 -1
  49. package/src/main/adapters/pi-usage.js +2 -2
  50. package/src/main/harness-adapter/error-kind.js +1 -1
  51. package/src/main/harness-adapter/manifest.js +7 -1
  52. package/src/main/host/collaboration-tools.js +8 -1
  53. package/src/main/host/collaboration-worktree.js +27 -1
  54. package/src/main/host/collaboration.js +348 -15
  55. package/src/main/host/runtime.js +23 -15
  56. package/src/main/native/codex-accounts.js +1 -1
  57. package/src/main/native/config.js +9 -9
  58. package/src/main/native/host.js +1 -1
  59. package/src/main/native/launcher.js +10 -8
  60. package/src/main/native/pets.js +188 -49
  61. package/src/main/native/platform.js +19 -9
  62. package/src/main/native/protocol.js +83 -80
  63. package/src/main/native/rs/crates/appx/Cargo.toml +1 -1
  64. package/src/main/native/rs/crates/secret/Cargo.toml +1 -1
  65. package/src/main/native/rs/crates/secret/src/main.rs +3 -3
  66. package/src/main/native/rs/crates/shim/Cargo.toml +1 -1
  67. package/src/main/native/rs/crates/shim/src/main.rs +2 -2
  68. package/src/main/native/thread-list.js +1 -1
  69. package/src/main/shared-contracts/capability.js +3 -1
  70. package/src/main/workspace/core-review.js +4 -3
  71. package/src/native-ui/README.md +2 -2
  72. package/src/native-ui/desktop-control/dist/contract-audit.js +4 -4
  73. package/src/native-ui/desktop-control/dist/index.d.ts +1 -1
  74. package/src/native-ui/desktop-control/dist/index.js +2 -2
  75. package/src/native-ui/desktop-control/dist/index.js.map +1 -1
  76. package/src/native-ui/desktop-control/dist/main-process-title-policy.js +5 -5
  77. package/src/native-ui/desktop-control/dist/main-process-title-policy.js.map +1 -1
  78. package/src/native-ui/desktop-control/dist/production-controller.js +3 -3
  79. package/src/native-ui/desktop-control/dist/production-controller.js.map +1 -1
  80. package/src/native-ui/desktop-control/dist/release-main.js +1 -1
  81. package/src/native-ui/desktop-control/dist/release-main.js.map +1 -1
  82. package/src/native-ui/desktop-control/dist/renderer-cdp-control-session.js +1 -1
  83. package/src/native-ui/desktop-control/dist/renderer-cdp-control-session.js.map +1 -1
  84. package/src/native-ui/desktop-control/dist/renderer-control-session.js +3 -3
  85. package/src/native-ui/desktop-control/dist/renderer-control-session.js.map +1 -1
  86. package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-runtime.js +25 -25
  87. package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-runtime.js.map +1 -1
  88. package/src/native-ui/desktop-control/dist/tsconfig.tsbuildinfo +1 -1
  89. package/src/native-ui/desktop-control/package.json +2 -2
  90. package/src/native-ui/desktop-control/scripts/build-release.mjs +2 -2
  91. package/src/native-ui/desktop-control/src/contract-audit.ts +4 -4
  92. package/src/native-ui/desktop-control/src/index.ts +2 -2
  93. package/src/native-ui/desktop-control/src/main-process-title-policy.ts +5 -5
  94. package/src/native-ui/desktop-control/src/production-controller.ts +3 -3
  95. package/src/native-ui/desktop-control/src/release-main.ts +1 -1
  96. package/src/native-ui/desktop-control/src/renderer-cdp-control-session.ts +1 -1
  97. package/src/native-ui/desktop-control/src/renderer-control-session.ts +3 -3
  98. package/src/native-ui/desktop-control/src/renderer-draft-prewarm-runtime.ts +25 -25
  99. package/src/native-ui/desktop-control/test/index.test.ts +1 -1
  100. package/src/native-ui/desktop-control/test/production-controller.test.ts +1 -1
  101. package/src/native-ui/desktop-control/test/renderer-cdp-control-session.test.ts +1 -1
  102. package/src/native-ui/desktop-control/test/renderer-draft-prewarm-policy.test.ts +43 -43
  103. package/src/native-ui/renderer-extension/dist/types/agent-group-preference.d.ts +1 -1
  104. package/src/native-ui/renderer-extension/dist/types/agent-group-preference.d.ts.map +1 -1
  105. package/src/native-ui/renderer-extension/dist/types/agent-selection-state.d.ts +1 -1
  106. package/src/native-ui/renderer-extension/dist/types/agent-selection-state.d.ts.map +1 -1
  107. package/src/native-ui/renderer-extension/dist/types/contract-audit.d.ts +1 -1
  108. package/src/native-ui/renderer-extension/dist/types/contract-audit.d.ts.map +1 -1
  109. package/src/native-ui/renderer-extension/dist/types/index.d.ts +3 -1
  110. package/src/native-ui/renderer-extension/dist/types/index.d.ts.map +1 -1
  111. package/src/native-ui/renderer-extension/dist/types/production-entry.d.ts +1 -1
  112. package/src/native-ui/renderer-extension/dist/types/production-entry.d.ts.map +1 -1
  113. package/src/native-ui/renderer-extension/dist/types/renderer-agent-picker.d.ts +2 -2
  114. package/src/native-ui/renderer-extension/dist/types/renderer-agent-picker.d.ts.map +1 -1
  115. package/src/native-ui/renderer-extension/dist/types/renderer-binding-probe.d.ts +3 -3
  116. package/src/native-ui/renderer-extension/dist/types/renderer-binding-probe.d.ts.map +1 -1
  117. package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-options.d.ts +1 -1
  118. package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-options.d.ts.map +1 -1
  119. package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-state.d.ts +1 -1
  120. package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-state.d.ts.map +1 -1
  121. package/src/native-ui/renderer-extension/dist/types/renderer-collab-cards.d.ts +1 -1
  122. package/src/native-ui/renderer-extension/dist/types/renderer-collab-cards.d.ts.map +1 -1
  123. package/src/native-ui/renderer-extension/dist/types/renderer-composer-dom.d.ts +1 -1
  124. package/src/native-ui/renderer-extension/dist/types/renderer-composer-dom.d.ts.map +1 -1
  125. package/src/native-ui/renderer-extension/dist/types/renderer-credits-control.d.ts +1 -1
  126. package/src/native-ui/renderer-extension/dist/types/renderer-credits-control.d.ts.map +1 -1
  127. package/src/native-ui/renderer-extension/dist/types/renderer-fork-control.d.ts +1 -1
  128. package/src/native-ui/renderer-extension/dist/types/renderer-fork-control.d.ts.map +1 -1
  129. package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-claim.d.ts +1 -1
  130. package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-claim.d.ts.map +1 -1
  131. package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-control.d.ts +1 -1
  132. package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-control.d.ts.map +1 -1
  133. package/src/native-ui/renderer-extension/dist/types/renderer-harness-handoff.d.ts +1 -1
  134. package/src/native-ui/renderer-extension/dist/types/renderer-harness-handoff.d.ts.map +1 -1
  135. package/src/native-ui/renderer-extension/dist/types/renderer-harness-localization.d.ts +1 -1
  136. package/src/native-ui/renderer-extension/dist/types/renderer-harness-localization.d.ts.map +1 -1
  137. package/src/native-ui/renderer-extension/dist/types/renderer-harness-mentions.d.ts +1 -0
  138. package/src/native-ui/renderer-extension/dist/types/renderer-harness-mentions.d.ts.map +1 -1
  139. package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts +36 -31
  140. package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts.map +1 -1
  141. package/src/native-ui/renderer-extension/dist/types/renderer-model-picker.d.ts +1 -1
  142. package/src/native-ui/renderer-extension/dist/types/renderer-model-picker.d.ts.map +1 -1
  143. package/src/native-ui/renderer-extension/dist/types/renderer-new-thread-preference.d.ts +2 -2
  144. package/src/native-ui/renderer-extension/dist/types/renderer-new-thread-preference.d.ts.map +1 -1
  145. package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-picker.d.ts +1 -1
  146. package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-picker.d.ts.map +1 -1
  147. package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-preference.d.ts +2 -2
  148. package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-preference.d.ts.map +1 -1
  149. package/src/native-ui/renderer-extension/dist/types/renderer-request-sender.d.ts +18 -2
  150. package/src/native-ui/renderer-extension/dist/types/renderer-request-sender.d.ts.map +1 -1
  151. package/src/native-ui/renderer-extension/dist/types/renderer-session-import-client.d.ts +1 -1
  152. package/src/native-ui/renderer-extension/dist/types/renderer-session-import-client.d.ts.map +1 -1
  153. package/src/native-ui/renderer-extension/dist/types/renderer-sidebar-agent-icons.d.ts +2 -2
  154. package/src/native-ui/renderer-extension/dist/types/renderer-sidebar-agent-icons.d.ts.map +1 -1
  155. package/src/native-ui/renderer-extension/dist/types/renderer-team-cards.d.ts +58 -0
  156. package/src/native-ui/renderer-extension/dist/types/renderer-team-cards.d.ts.map +1 -0
  157. package/src/native-ui/renderer-extension/dist/types/renderer-transcript-dom.d.ts +1 -1
  158. package/src/native-ui/renderer-extension/dist/types/renderer-trigger-chip-style.d.ts +1 -1
  159. package/src/native-ui/renderer-extension/dist/types/renderer-trigger-chip-style.d.ts.map +1 -1
  160. package/src/native-ui/renderer-extension/dist/types/renderer-usage-control.d.ts +1 -1
  161. package/src/native-ui/renderer-extension/dist/types/renderer-usage-control.d.ts.map +1 -1
  162. package/src/native-ui/renderer-extension/dist/types/settings/accounts-list.d.ts +1 -1
  163. package/src/native-ui/renderer-extension/dist/types/settings/accounts-list.d.ts.map +1 -1
  164. package/src/native-ui/renderer-extension/dist/types/settings/accounts-page.d.ts +1 -1
  165. package/src/native-ui/renderer-extension/dist/types/settings/accounts-page.d.ts.map +1 -1
  166. package/src/native-ui/renderer-extension/dist/types/settings/accounts-usage.d.ts +1 -1
  167. package/src/native-ui/renderer-extension/dist/types/settings/accounts-usage.d.ts.map +1 -1
  168. package/src/native-ui/renderer-extension/dist/types/settings/connections-page.d.ts +3 -3
  169. package/src/native-ui/renderer-extension/dist/types/settings/connections-page.d.ts.map +1 -1
  170. package/src/native-ui/renderer-extension/dist/types/settings/harness-accounts.d.ts +1 -1
  171. package/src/native-ui/renderer-extension/dist/types/settings/harness-accounts.d.ts.map +1 -1
  172. package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts +4 -4
  173. package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts.map +1 -1
  174. package/src/native-ui/renderer-extension/dist/types/settings/pet-market.d.ts.map +1 -1
  175. package/src/native-ui/renderer-extension/dist/types/settings/session-import-list-controls.d.ts +1 -1
  176. package/src/native-ui/renderer-extension/dist/types/settings/session-import-list-controls.d.ts.map +1 -1
  177. package/src/native-ui/renderer-extension/dist/types/settings/session-import-page.d.ts +1 -1
  178. package/src/native-ui/renderer-extension/dist/types/settings/session-import-page.d.ts.map +1 -1
  179. package/src/native-ui/renderer-extension/dist/types/settings/shell.d.ts +2 -2
  180. package/src/native-ui/renderer-extension/dist/types/settings/shell.d.ts.map +1 -1
  181. package/src/native-ui/renderer-extension/dist/types/settings/trigger.d.ts +1 -1
  182. package/src/native-ui/renderer-extension/dist/types/settings/trigger.d.ts.map +1 -1
  183. package/src/native-ui/renderer-extension/dist/types/tsconfig.tsbuildinfo +1 -1
  184. package/src/native-ui/renderer-extension/dist/types/versioned-renderer-adapter.d.ts +18 -18
  185. package/src/native-ui/renderer-extension/dist/types/versioned-renderer-adapter.d.ts.map +1 -1
  186. package/src/native-ui/renderer-extension/package.json +2 -2
  187. package/src/native-ui/renderer-extension/src/agent-group-preference.ts +1 -1
  188. package/src/native-ui/renderer-extension/src/agent-selection-state.ts +31 -16
  189. package/src/native-ui/renderer-extension/src/audit-entry.ts +1 -1
  190. package/src/native-ui/renderer-extension/src/contract-audit.ts +4 -4
  191. package/src/native-ui/renderer-extension/src/index.ts +4 -2
  192. package/src/native-ui/renderer-extension/src/install-renderer-binding.ts +2 -2
  193. package/src/native-ui/renderer-extension/src/production-entry.ts +3 -3
  194. package/src/native-ui/renderer-extension/src/renderer-agent-picker.ts +7 -7
  195. package/src/native-ui/renderer-extension/src/renderer-binding-probe.ts +112 -89
  196. package/src/native-ui/renderer-extension/src/renderer-codex-account-options.ts +1 -1
  197. package/src/native-ui/renderer-extension/src/renderer-codex-account-state.ts +1 -1
  198. package/src/native-ui/renderer-extension/src/renderer-collab-cards.ts +1 -1
  199. package/src/native-ui/renderer-extension/src/renderer-composer-dom.ts +12 -12
  200. package/src/native-ui/renderer-extension/src/renderer-credits-control.ts +7 -7
  201. package/src/native-ui/renderer-extension/src/renderer-external-steering.ts +3 -3
  202. package/src/native-ui/renderer-extension/src/renderer-fork-control.ts +1 -1
  203. package/src/native-ui/renderer-extension/src/renderer-harness-command-claim.ts +1 -1
  204. package/src/native-ui/renderer-extension/src/renderer-harness-command-control.ts +3 -3
  205. package/src/native-ui/renderer-extension/src/renderer-harness-handoff.ts +1 -1
  206. package/src/native-ui/renderer-extension/src/renderer-harness-localization.ts +1 -1
  207. package/src/native-ui/renderer-extension/src/renderer-harness-mentions.ts +4 -0
  208. package/src/native-ui/renderer-extension/src/renderer-integrations-client.ts +5 -5
  209. package/src/native-ui/renderer-extension/src/renderer-model-client.ts +63 -42
  210. package/src/native-ui/renderer-extension/src/renderer-model-picker.ts +16 -16
  211. package/src/native-ui/renderer-extension/src/renderer-new-thread-preference.ts +2 -2
  212. package/src/native-ui/renderer-extension/src/renderer-permission-mode-picker.ts +3 -3
  213. package/src/native-ui/renderer-extension/src/renderer-permission-mode-preference.ts +2 -2
  214. package/src/native-ui/renderer-extension/src/renderer-request-sender.ts +46 -3
  215. package/src/native-ui/renderer-extension/src/renderer-session-import-client.ts +4 -4
  216. package/src/native-ui/renderer-extension/src/renderer-sidebar-agent-icons.ts +24 -20
  217. package/src/native-ui/renderer-extension/src/renderer-team-cards.ts +312 -0
  218. package/src/native-ui/renderer-extension/src/renderer-transcript-dom.ts +1 -1
  219. package/src/native-ui/renderer-extension/src/renderer-trigger-chip-style.ts +2 -2
  220. package/src/native-ui/renderer-extension/src/renderer-usage-control.ts +4 -4
  221. package/src/native-ui/renderer-extension/src/settings/accounts-list.ts +1 -1
  222. package/src/native-ui/renderer-extension/src/settings/accounts-page.ts +1 -1
  223. package/src/native-ui/renderer-extension/src/settings/accounts-usage.ts +1 -1
  224. package/src/native-ui/renderer-extension/src/settings/connections-page.ts +7 -7
  225. package/src/native-ui/renderer-extension/src/settings/harness-accounts.ts +1 -1
  226. package/src/native-ui/renderer-extension/src/settings/icons.ts +2 -2
  227. package/src/native-ui/renderer-extension/src/settings/pages.ts +11 -11
  228. package/src/native-ui/renderer-extension/src/settings/pet-market.css +33 -0
  229. package/src/native-ui/renderer-extension/src/settings/pet-market.ts +173 -91
  230. package/src/native-ui/renderer-extension/src/settings/pets-client.ts +5 -5
  231. package/src/native-ui/renderer-extension/src/settings/release-notes.ts +1 -1
  232. package/src/native-ui/renderer-extension/src/settings/session-import-list-controls.ts +1 -1
  233. package/src/native-ui/renderer-extension/src/settings/session-import-page.ts +1 -1
  234. package/src/native-ui/renderer-extension/src/settings/shell.css +15 -15
  235. package/src/native-ui/renderer-extension/src/settings/shell.ts +11 -11
  236. package/src/native-ui/renderer-extension/src/settings/skin-runtime.ts +17 -17
  237. package/src/native-ui/renderer-extension/src/settings/trigger.ts +1 -1
  238. package/src/native-ui/renderer-extension/src/versioned-renderer-adapter.ts +20 -20
  239. package/src/native-ui/renderer-extension/test/agent-selection-state.test.ts +60 -1
  240. package/src/native-ui/renderer-extension/test/codebuddy-migration.test.ts +1 -1
  241. package/src/native-ui/renderer-extension/test/renderer-agent-picker.test.ts +1 -1
  242. package/src/native-ui/renderer-extension/test/renderer-binding-probe-host-catalog.test.ts +15 -9
  243. package/src/native-ui/renderer-extension/test/renderer-binding-probe.test.ts +15 -15
  244. package/src/native-ui/renderer-extension/test/renderer-codex-account-state.test.ts +1 -1
  245. package/src/native-ui/renderer-extension/test/renderer-composer-permissions.test.ts +4 -4
  246. package/src/native-ui/renderer-extension/test/renderer-external-steering-rpc.test.ts +2 -2
  247. package/src/native-ui/renderer-extension/test/renderer-external-steering.test.ts +3 -3
  248. package/src/native-ui/renderer-extension/test/renderer-fork-control.test.ts +4 -4
  249. package/src/native-ui/renderer-extension/test/renderer-harness-command-claim.test.ts +1 -1
  250. package/src/native-ui/renderer-extension/test/renderer-harness-command-control.test.ts +1 -1
  251. package/src/native-ui/renderer-extension/test/renderer-model-client.test.ts +12 -11
  252. package/src/native-ui/renderer-extension/test/renderer-model-picker.test.ts +1 -1
  253. package/src/native-ui/renderer-extension/test/renderer-native-thread-ownership.test.ts +6 -6
  254. package/src/native-ui/renderer-extension/test/renderer-new-thread-preference.test.ts +1 -1
  255. package/src/native-ui/renderer-extension/test/renderer-permission-mode-picker.test.ts +1 -1
  256. package/src/native-ui/renderer-extension/test/renderer-permission-mode-preference.test.ts +1 -1
  257. package/src/native-ui/renderer-extension/test/renderer-request-timeout.test.ts +80 -0
  258. package/src/native-ui/renderer-extension/test/renderer-settings-lifecycle.test.ts +2 -2
  259. package/src/native-ui/renderer-extension/test/renderer-sidebar-agent-icons.test.ts +10 -3
  260. package/src/native-ui/renderer-extension/test/renderer-unsupported-methods.test.ts +1 -1
  261. package/src/native-ui/renderer-extension/test/settings/pages.test.ts +5 -5
  262. package/src/native-ui/renderer-extension/test/settings/release-notes.test.ts +9 -9
  263. package/src/native-ui/renderer-extension/test/versioned-renderer-adapter.test.ts +3 -3
  264. package/src/native-ui/shared-contracts/dist/errors.d.ts +2 -2
  265. package/src/native-ui/shared-contracts/dist/errors.d.ts.map +1 -1
  266. package/src/native-ui/shared-contracts/dist/errors.js +1 -1
  267. package/src/native-ui/shared-contracts/dist/errors.js.map +1 -1
  268. package/src/native-ui/shared-contracts/dist/harness-models.d.ts +40 -0
  269. package/src/native-ui/shared-contracts/dist/harness-models.d.ts.map +1 -1
  270. package/src/native-ui/shared-contracts/dist/harness-models.js +23 -2
  271. package/src/native-ui/shared-contracts/dist/harness-models.js.map +1 -1
  272. package/src/native-ui/shared-contracts/dist/harness-route.d.ts +1 -1
  273. package/src/native-ui/shared-contracts/dist/harness-route.d.ts.map +1 -1
  274. package/src/native-ui/shared-contracts/dist/harness-route.js +1 -1
  275. package/src/native-ui/shared-contracts/dist/harness-route.js.map +1 -1
  276. package/src/native-ui/shared-contracts/dist/harness-session-import.d.ts +1 -1
  277. package/src/native-ui/shared-contracts/dist/harness-session-import.d.ts.map +1 -1
  278. package/src/native-ui/shared-contracts/dist/harness-session-import.js +1 -1
  279. package/src/native-ui/shared-contracts/dist/harness-session-import.js.map +1 -1
  280. package/src/native-ui/shared-contracts/dist/index.d.ts +3 -3
  281. package/src/native-ui/shared-contracts/dist/index.d.ts.map +1 -1
  282. package/src/native-ui/shared-contracts/dist/index.js +2 -2
  283. package/src/native-ui/shared-contracts/dist/index.js.map +1 -1
  284. package/src/native-ui/shared-contracts/dist/tsconfig.tsbuildinfo +1 -1
  285. package/src/native-ui/shared-contracts/dist/updates.js +1 -1
  286. package/src/native-ui/shared-contracts/dist/updates.js.map +1 -1
  287. package/src/native-ui/shared-contracts/package.json +1 -1
  288. package/src/native-ui/shared-contracts/src/errors.ts +3 -3
  289. package/src/native-ui/shared-contracts/src/harness-models.ts +23 -2
  290. package/src/native-ui/shared-contracts/src/harness-route.ts +1 -1
  291. package/src/native-ui/shared-contracts/src/harness-session-import.ts +1 -1
  292. package/src/native-ui/shared-contracts/src/index.ts +3 -3
  293. package/src/native-ui/shared-contracts/src/updates.ts +1 -1
  294. package/src/native-ui/shared-contracts/test/browser-bundle.test.ts +3 -3
  295. package/src/native-ui/shared-contracts/test/deepseek-modern-sessions.test.ts +1 -1
  296. package/src/native-ui/shared-contracts/test/errors.test.ts +9 -9
  297. package/src/native-ui/shared-contracts/test/harness-commands.test.ts +1 -1
  298. package/src/native-ui/shared-contracts/test/harness-models.test.ts +3 -3
  299. package/src/native-ui/shared-contracts/test/harness-permission-modes.test.ts +1 -1
  300. package/src/native-ui/shared-contracts/test/harness-plugins.test.ts +1 -1
  301. package/src/native-ui/shared-contracts/test/harness-session-import.test.ts +1 -1
  302. package/src/native-ui/shared-contracts/test/index.test.ts +3 -3
  303. package/src/native-ui/shared-contracts/test/json-rpc.test.ts +1 -1
  304. package/src/native-ui/shared-contracts/test/thread-usage.test.ts +1 -1
  305. package/src/native-ui/shared-contracts/test/updates.test.ts +4 -4
  306. /package/licenses/{codex-host-MIT.txt → bytepioneer-MIT.txt} +0 -0
@@ -8,7 +8,7 @@ import type {
8
8
  RendererAgent,
9
9
  RendererAgentAvailability,
10
10
  } from "./agent-selection-state.js";
11
- import type { CodexAccountSummary } from "@codexhost/shared-contracts";
11
+ import type { CodexAccountSummary } from "@harnessmix/shared-contracts";
12
12
  import {
13
13
  createRendererCodexAccountGroup,
14
14
  type RendererCodexAccountGroupControl,
@@ -52,7 +52,7 @@ function pickerGroupMessages(): Pick<
52
52
 
53
53
  // Opens the Connections settings page from the picker's "More Agents" group.
54
54
  // The shell installs this handle globally (see settings/shell.ts) as
55
- // `window.__codexhostSettingsShellV1`; it is a no-op before the settings
55
+ // `window.__harnessmixSettingsShellV1`; it is a no-op before the settings
56
56
  // surface has mounted. Read through a local structural type instead of
57
57
  // augmenting the global `Window` interface, so this stays a no-op import
58
58
  // away from the settings module.
@@ -61,8 +61,8 @@ interface MinimalSettingsShellHandle {
61
61
  }
62
62
 
63
63
  function openSettingsPage(pageId: "accounts" | "connections", opener?: HTMLElement): void {
64
- const shell = (window as unknown as { __codexhostSettingsShellV1?: MinimalSettingsShellHandle })
65
- .__codexhostSettingsShellV1;
64
+ const shell = (window as unknown as { __harnessmixSettingsShellV1?: MinimalSettingsShellHandle })
65
+ .__harnessmixSettingsShellV1;
66
66
  shell?.openSettings(opener, pageId);
67
67
  }
68
68
 
@@ -92,7 +92,7 @@ export const RENDERER_AGENT_INSTALL_URLS: Readonly<Record<ExternalRendererAgent,
92
92
 
93
93
  type AgentAvailability = Partial<Record<ExternalRendererAgent, RendererAgentAvailability>>;
94
94
 
95
- export const CONTROL_ATTRIBUTE = "data-codexhost-agent-control";
95
+ export const CONTROL_ATTRIBUTE = "data-harnessmix-agent-control";
96
96
  const AGENT_MENU_WIDTH = 224;
97
97
  // Below this many enabled Agents, the picker stays a flat list — grouping
98
98
  // only earns its keep once there are enough Harnesses to make scanning slow.
@@ -107,7 +107,7 @@ interface AgentOptionControl {
107
107
  // are mutually exclusive since `RendererAgentAvailability` is a single
108
108
  // enum value. The error mode has no error *details* to show inline (the
109
109
  // picker only ever receives the coarse availability enum, not the full
110
- // `CodexhostError`), so it links out to Settings → Connections instead.
110
+ // `HarnessMixError`), so it links out to Settings → Connections instead.
111
111
  action: HTMLButtonElement | null;
112
112
  }
113
113
 
@@ -476,7 +476,7 @@ export function mountRendererAgentPicker(
476
476
  event.stopPropagation();
477
477
  // "error" mode has nothing more to show inline — the picker
478
478
  // only knows the coarse availability enum, not the full
479
- // `CodexhostError` — so it hands off to Settings, which does.
479
+ // `HarnessMixError` — so it hands off to Settings, which does.
480
480
  // `requestConnectionsPageFocus` makes sure Settings opens
481
481
  // straight to *this* Agent's row, not just the page.
482
482
  if (control.dataset.mode === "error") {
@@ -15,8 +15,8 @@ import {
15
15
  type ThreadInspection,
16
16
  type ThreadUsageInspection,
17
17
  type ThreadUsageSnapshot,
18
- type CodexhostError,
19
- } from "@codexhost/shared-contracts";
18
+ type HarnessMixError,
19
+ } from "@harnessmix/shared-contracts";
20
20
 
21
21
  import {
22
22
  DEFAULT_RENDERER_AGENTS,
@@ -81,6 +81,7 @@ import {
81
81
  import { installRendererSidebarAgentIcons } from "./renderer-sidebar-agent-icons.js";
82
82
  import { installHarnessMentions } from './renderer-harness-mentions.js';
83
83
  import { installCollabCards } from './renderer-collab-cards.js';
84
+ import { installTeamCards } from './renderer-team-cards.js';
84
85
  import {
85
86
  rendererHarnessCommandExecutesDirectly,
86
87
  routeRendererHarnessCommandSelection,
@@ -133,12 +134,12 @@ const externalAgents: readonly ExternalRendererAgent[] = [
133
134
  'codex-harness',
134
135
  ];
135
136
  type HarnessAvailability = Partial<Record<ExternalRendererAgent, RendererAgentAvailability>>;
136
- type HarnessAvailabilityErrors = Record<ExternalRendererAgent, CodexhostError | undefined>;
137
+ type HarnessAvailabilityErrors = Record<ExternalRendererAgent, HarnessMixError | undefined>;
137
138
  type HarnessWebUiAvailability = Record<ExternalRendererAgent, boolean>;
138
139
 
139
140
  function isRetryableHarnessAvailability(
140
141
  availability: RendererAgentAvailability | undefined,
141
- error: CodexhostError | undefined,
142
+ error: HarnessMixError | undefined,
142
143
  ): boolean {
143
144
  return (
144
145
  availability !== undefined &&
@@ -301,7 +302,7 @@ export interface RendererBindingProbeApi {
301
302
 
302
303
  declare global {
303
304
  interface Window {
304
- __codexhostRendererBindingProbeV1?: RendererBindingProbeApi;
305
+ __harnessmixRendererBindingProbeV1?: RendererBindingProbeApi;
305
306
  }
306
307
  }
307
308
 
@@ -570,7 +571,7 @@ export function shouldTransferComposerState(
570
571
  );
571
572
  }
572
573
 
573
- export function isLateConversationTarget(
574
+ export function isLateConversationTarget(
574
575
  mountedTarget: readonly unknown[] | null,
575
576
  currentTarget: readonly unknown[] | null,
576
577
  ): boolean {
@@ -582,43 +583,43 @@ export function isLateConversationTarget(
582
583
  mountedTarget.length !== currentTarget.length ||
583
584
  mountedTarget.some((value, index) => value !== currentTarget[index])
584
585
  );
585
- }
586
-
587
- export function composerTargetResolution(
588
- mountedTarget: readonly unknown[] | null,
589
- currentTarget: readonly unknown[] | null,
590
- sourcePhase: ComposerAgentPhase,
591
- submissionPending = false,
592
- ): "none" | "transfer" | "inspect" | "restore-draft" {
593
- if (!currentTarget) return "none";
594
- if (
595
- mountedTarget &&
596
- mountedTarget.length === currentTarget.length &&
597
- mountedTarget.every((value, index) => value === currentTarget[index])
598
- ) {
599
- return "none";
600
- }
601
- if (currentTarget[0] === "default") return "restore-draft";
602
- if (currentTarget[0] !== "conversation") return "none";
603
- return mountedTarget?.[0] === "default" && (sourcePhase === "locked" || submissionPending)
604
- ? "transfer"
605
- : "inspect";
606
- }
607
-
608
- export function lateConversationTargetResolution(
586
+ }
587
+
588
+ export function composerTargetResolution(
589
+ mountedTarget: readonly unknown[] | null,
590
+ currentTarget: readonly unknown[] | null,
591
+ sourcePhase: ComposerAgentPhase,
592
+ submissionPending = false,
593
+ ): "none" | "transfer" | "inspect" | "restore-draft" {
594
+ if (!currentTarget) return "none";
595
+ if (
596
+ mountedTarget &&
597
+ mountedTarget.length === currentTarget.length &&
598
+ mountedTarget.every((value, index) => value === currentTarget[index])
599
+ ) {
600
+ return "none";
601
+ }
602
+ if (currentTarget[0] === "default") return "restore-draft";
603
+ if (currentTarget[0] !== "conversation") return "none";
604
+ return mountedTarget?.[0] === "default" && (sourcePhase === "locked" || submissionPending)
605
+ ? "transfer"
606
+ : "inspect";
607
+ }
608
+
609
+ export function lateConversationTargetResolution(
609
610
  mountedTarget: readonly unknown[] | null,
610
611
  currentTarget: readonly unknown[] | null,
611
612
  sourcePhase: ComposerAgentPhase,
612
613
  submissionPending = false,
613
- ): "none" | "transfer" | "inspect" {
614
- const resolution = composerTargetResolution(
615
- mountedTarget,
616
- currentTarget,
617
- sourcePhase,
618
- submissionPending,
619
- );
620
- return resolution === "restore-draft" ? "none" : resolution;
621
- }
614
+ ): "none" | "transfer" | "inspect" {
615
+ const resolution = composerTargetResolution(
616
+ mountedTarget,
617
+ currentTarget,
618
+ sourcePhase,
619
+ submissionPending,
620
+ );
621
+ return resolution === "restore-draft" ? "none" : resolution;
622
+ }
622
623
 
623
624
  export function scopedComposerTarget(
624
625
  target: readonly unknown[] | null,
@@ -685,7 +686,7 @@ function catalogWithConfigurationState(
685
686
  export function installRendererBindingProbe(
686
687
  options: RendererBindingProbeOptions = {},
687
688
  ): RendererBindingProbeApi {
688
- const existing = window.__codexhostRendererBindingProbeV1;
689
+ const existing = window.__harnessmixRendererBindingProbeV1;
689
690
  if (existing) return existing;
690
691
 
691
692
  const enabledAgents = [...new Set(options.enabledAgents ?? DEFAULT_RENDERER_AGENTS)];
@@ -770,6 +771,25 @@ export function installRendererBindingProbe(
770
771
  return (client as any)?.applyThreadWorkspace?.({ threadId, digest }) ?? { patch: '', digest: '' };
771
772
  },
772
773
  });
774
+ const teamCards = installTeamCards({
775
+ inspectTeam: async (threadId, teamId) => {
776
+ const client = modelClientForHost('local');
777
+ return client?.inspectThreadTeam?.({ threadId, ...(teamId ? { teamId } : {}) }) ?? null;
778
+ },
779
+ openThread: (threadId) => openRendererThread(hostThreadIdSchema.parse(threadId), { hostId: 'local' }),
780
+ activeThread: () => {
781
+ const mounted = [...mountedByComposer.values()].find(candidate => {
782
+ if (!candidate.composer.isConnected || !candidate.control.root.isConnected) return false;
783
+ if (!threadIdFromComposerModelTarget(candidate.modelTarget)) return false;
784
+ const style = window.getComputedStyle(candidate.composer);
785
+ return style.display !== 'none' && style.visibility !== 'hidden' && candidate.composer.getClientRects().length > 0;
786
+ });
787
+ const threadId = mounted ? threadIdFromComposerModelTarget(mounted.modelTarget) : null;
788
+ const scroll = mounted?.composer.closest('.thread-scroll-container');
789
+ const content = scroll?.parentElement?.parentElement;
790
+ return mounted && threadId ? { threadId, anchor: content ?? mounted.composer } : null;
791
+ },
792
+ });
773
793
  let connectionDiagnostics: RendererConnectionDiagnostics | null = null;
774
794
  const settingsLifecycle = installRendererSettingsLifecycle(window, {
775
795
  getUpdateClient: () => modelControl,
@@ -911,7 +931,7 @@ export function installRendererBindingProbe(
911
931
  }
912
932
  }
913
933
  window.dispatchEvent(
914
- new CustomEvent("codexhost:renderer-submission", {
934
+ new CustomEvent("harnessmix:renderer-submission", {
915
935
  detail: {
916
936
  composerId: state.composerId,
917
937
  agent: state.agent,
@@ -1002,7 +1022,7 @@ export function installRendererBindingProbe(
1002
1022
  await modelControl.executeThreadCommand({ threadId, commandId: command.id });
1003
1023
  } catch (error) {
1004
1024
  console.error(
1005
- "codexhost Harness command failed",
1025
+ "harnessmix Harness command failed",
1006
1026
  error instanceof Error ? error.message : String(error),
1007
1027
  );
1008
1028
  } finally {
@@ -1022,7 +1042,7 @@ export function installRendererBindingProbe(
1022
1042
  ) {
1023
1043
  return;
1024
1044
  }
1025
- console.error("codexhost Harness command could not claim the current Composer editor");
1045
+ console.error("harnessmix Harness command could not claim the current Composer editor");
1026
1046
  };
1027
1047
 
1028
1048
  const applyThreadUsageUpdate = (update: ThreadUsageInspection): void => {
@@ -1377,30 +1397,30 @@ export function installRendererBindingProbe(
1377
1397
  }
1378
1398
  };
1379
1399
 
1380
- const refreshMountedComposerTarget = (mounted: MountedComposer): boolean => {
1381
- const currentTarget = findComposerModelTarget(mounted.composer);
1382
- const resolution = composerTargetResolution(
1383
- mounted.modelTarget,
1384
- currentTarget,
1400
+ const refreshMountedComposerTarget = (mounted: MountedComposer): boolean => {
1401
+ const currentTarget = findComposerModelTarget(mounted.composer);
1402
+ const resolution = composerTargetResolution(
1403
+ mounted.modelTarget,
1404
+ currentTarget,
1385
1405
  controller.get(mounted.composer).phase,
1386
1406
  controller.isSubmissionPending(mounted.composer),
1387
1407
  );
1388
1408
  if (resolution === "none") return false;
1389
1409
 
1390
- const nextHostId = activeModelHostId() ?? mounted.hostId;
1410
+ const nextHostId = activeModelHostId() ?? mounted.hostId;
1391
1411
  const nextControllerTarget = controllerTarget(currentTarget, nextHostId);
1392
1412
  mounted.modelTarget = currentTarget;
1393
1413
  mounted.hostId = nextHostId;
1394
- const rebound =
1395
- resolution === "transfer"
1396
- ? controller.transfer(mounted.composer, mounted.composer, nextControllerTarget)
1397
- : controller.rebindTarget(
1398
- mounted.composer,
1399
- nextControllerTarget,
1400
- currentTarget?.[0] === "default"
1401
- ? readNewThreadAgentPreference(enabledAgentSet)
1402
- : undefined,
1403
- ) !== null;
1414
+ const rebound =
1415
+ resolution === "transfer"
1416
+ ? controller.transfer(mounted.composer, mounted.composer, nextControllerTarget)
1417
+ : controller.rebindTarget(
1418
+ mounted.composer,
1419
+ nextControllerTarget,
1420
+ currentTarget?.[0] === "default"
1421
+ ? readNewThreadAgentPreference(enabledAgentSet)
1422
+ : undefined,
1423
+ ) !== null;
1404
1424
  if (!rebound) {
1405
1425
  mounted.ownershipStatus = "error";
1406
1426
  renderMounted(mounted);
@@ -1412,27 +1432,27 @@ export function installRendererBindingProbe(
1412
1432
  if (shouldRetryExternalThreadUsage(controller.get(mounted.composer).agent, null, null)) {
1413
1433
  scheduleThreadUsageRefresh(mounted);
1414
1434
  }
1415
- } else {
1416
- mounted.composerId = controller.get(mounted.composer).composerId;
1435
+ } else {
1436
+ mounted.composerId = controller.get(mounted.composer).composerId;
1417
1437
  mounted.modelView = { status: "idle" };
1418
1438
  mounted.permissionModeView = { status: "idle" };
1419
1439
  mounted.threadConfiguration = undefined;
1420
- mounted.ownershipStatus =
1421
- currentTarget?.[0] === "conversation" ? "loading" : "not-required";
1440
+ mounted.ownershipStatus =
1441
+ currentTarget?.[0] === "conversation" ? "loading" : "not-required";
1422
1442
  mounted.usage = null;
1423
1443
  mounted.accountCredits = null;
1424
1444
  mounted.usageRequestGeneration += 1;
1425
1445
  usageRefreshAttempts.delete(mounted.composer);
1426
- renderMounted(mounted);
1427
- if (currentTarget?.[0] === "conversation") {
1428
- void loadThreadOwnership(mounted);
1429
- } else {
1430
- applyComposerAgent(mounted.composer);
1431
- const state = controller.get(mounted.composer);
1432
- if (state.agent !== "codex") void loadExternalCatalog(mounted);
1433
- void refreshDraftCodexUsage(mounted);
1434
- void refreshCommands(mounted);
1435
- }
1446
+ renderMounted(mounted);
1447
+ if (currentTarget?.[0] === "conversation") {
1448
+ void loadThreadOwnership(mounted);
1449
+ } else {
1450
+ applyComposerAgent(mounted.composer);
1451
+ const state = controller.get(mounted.composer);
1452
+ if (state.agent !== "codex") void loadExternalCatalog(mounted);
1453
+ void refreshDraftCodexUsage(mounted);
1454
+ void refreshCommands(mounted);
1455
+ }
1436
1456
  }
1437
1457
  sidebarAgentIcons.refresh();
1438
1458
  return true;
@@ -2164,12 +2184,11 @@ export function installRendererBindingProbe(
2164
2184
  sidebarAgentIcons.refresh();
2165
2185
  return switched;
2166
2186
  } catch {
2167
- adapterStatus = {
2168
- ...adapterStatus,
2169
- state: "unsupported",
2170
- reason: "draft-prewarm-clear-failed",
2171
- hook: null,
2172
- };
2187
+ // A failed draft-prewarm clear is transient (timers may be throttled in a
2188
+ // hidden window). The Adapter owns its status lifecycle and recovers via
2189
+ // its own recapture path; replacing the live status object here detached
2190
+ // every picker from future status updates and latched "unsupported".
2191
+ renderMounted(mounted);
2173
2192
  return false;
2174
2193
  } finally {
2175
2194
  for (const candidate of mountedByComposer.values()) {
@@ -2225,7 +2244,7 @@ export function installRendererBindingProbe(
2225
2244
  const policy = await waitForRendererDraftPrewarmPolicy(window);
2226
2245
  if (!isCurrent() || policy.hostId !== hostId) return;
2227
2246
  await policy.clear();
2228
- if (!isCurrent() || window.__codexhostDraftPrewarmPolicyV1 !== policy) return;
2247
+ if (!isCurrent() || window.__harnessmixDraftPrewarmPolicyV1 !== policy) return;
2229
2248
  if (!policy.selectAccount) throw new Error("Codex Account selection is unavailable");
2230
2249
  policy.selectAccount(codexAccountRouteOverride(accounts.accounts, accountId));
2231
2250
  accounts.overrideAccountId =
@@ -2322,7 +2341,7 @@ export function installRendererBindingProbe(
2322
2341
  await Promise.all(
2323
2342
  agentsToInspect.map(async (agent) => {
2324
2343
  let status: RendererAgentAvailability = "error";
2325
- let nextError: CodexhostError | undefined;
2344
+ let nextError: HarnessMixError | undefined;
2326
2345
  let webUiAvailable = false;
2327
2346
  try {
2328
2347
  const inspection = await client.inspectHarness({
@@ -2714,7 +2733,7 @@ export function installRendererBindingProbe(
2714
2733
  const state = controller.get(composer);
2715
2734
  const hideCodexControls = controller.isSwitching(composer) || state.agent !== "codex";
2716
2735
  reconcileComposerNativeControls(mounted.control, hideCodexControls, hideCodexControls);
2717
- if (refreshTargets) refreshMountedComposerTarget(mounted);
2736
+ if (refreshTargets) refreshMountedComposerTarget(mounted);
2718
2737
  }
2719
2738
  for (const editor of document.querySelectorAll(EDITOR_SELECTOR)) {
2720
2739
  const composer = composerForEditor(editor);
@@ -2843,7 +2862,7 @@ export function installRendererBindingProbe(
2843
2862
  composerCodexAccounts(composer)?.accounts ?? [],
2844
2863
  accountId,
2845
2864
  );
2846
- const policy = window.__codexhostDraftPrewarmPolicyV1;
2865
+ const policy = window.__harnessmixDraftPrewarmPolicyV1;
2847
2866
  if (override !== null && (policy?.hostId !== mounted.hostId || !policy.selectAccount)) {
2848
2867
  return false;
2849
2868
  }
@@ -2884,6 +2903,7 @@ export function installRendererBindingProbe(
2884
2903
  blockEvent(event);
2885
2904
  return;
2886
2905
  }
2906
+ harnessMentions.prepareSubmission(composer);
2887
2907
  notifySubmission(composer, "submit");
2888
2908
  };
2889
2909
  const onKeyDown = (event: KeyboardEvent): void => {
@@ -2911,6 +2931,7 @@ export function installRendererBindingProbe(
2911
2931
  blockEvent(event);
2912
2932
  return;
2913
2933
  }
2934
+ harnessMentions.prepareSubmission(composer);
2914
2935
  notifySubmission(composer, "enter");
2915
2936
  };
2916
2937
  const onClick = (event: MouseEvent): void => {
@@ -2925,6 +2946,7 @@ export function installRendererBindingProbe(
2925
2946
  blockEvent(event);
2926
2947
  return;
2927
2948
  }
2949
+ harnessMentions.prepareSubmission(composer);
2928
2950
  notifySubmission(composer, "click");
2929
2951
  };
2930
2952
 
@@ -2992,8 +3014,8 @@ export function installRendererBindingProbe(
2992
3014
  void refreshHarnessAvailability(true);
2993
3015
  }
2994
3016
  };
2995
- window.addEventListener("codexhost:draft-prewarm-policy-changed", onHostRouteChange);
2996
- window.addEventListener("codexhost:renderer-adapter-status", onAdapterStatus);
3017
+ window.addEventListener("harnessmix:draft-prewarm-policy-changed", onHostRouteChange);
3018
+ window.addEventListener("harnessmix:renderer-adapter-status", onAdapterStatus);
2997
3019
  window.addEventListener("focus", onWindowFocus);
2998
3020
 
2999
3021
  const connectedComposers = (): MountedComposer[] =>
@@ -3115,13 +3137,14 @@ export function installRendererBindingProbe(
3115
3137
  sidebarAgentIcons.dispose();
3116
3138
  harnessMentions.dispose();
3117
3139
  collabCards.dispose();
3140
+ teamCards.dispose();
3118
3141
  settingsLifecycle.dispose();
3119
3142
  document.removeEventListener("beforeinput", onBeforeInput, true);
3120
3143
  document.removeEventListener("submit", onSubmit, true);
3121
3144
  document.removeEventListener("keydown", onKeyDown, true);
3122
3145
  document.removeEventListener("click", onClick, true);
3123
- window.removeEventListener("codexhost:draft-prewarm-policy-changed", onHostRouteChange);
3124
- window.removeEventListener("codexhost:renderer-adapter-status", onAdapterStatus);
3146
+ window.removeEventListener("harnessmix:draft-prewarm-policy-changed", onHostRouteChange);
3147
+ window.removeEventListener("harnessmix:renderer-adapter-status", onAdapterStatus);
3125
3148
  window.removeEventListener("focus", onWindowFocus);
3126
3149
  for (const state of harnessAvailabilityByHost.values()) {
3127
3150
  state.requestGeneration += 1;
@@ -3139,10 +3162,10 @@ export function installRendererBindingProbe(
3139
3162
  pendingReplacements.clear();
3140
3163
  connectionListeners.clear();
3141
3164
  connectionDiagnostics = null;
3142
- delete window.__codexhostRendererBindingProbeV1;
3165
+ delete window.__harnessmixRendererBindingProbeV1;
3143
3166
  },
3144
3167
  };
3145
- window.__codexhostRendererBindingProbeV1 = api;
3168
+ window.__harnessmixRendererBindingProbeV1 = api;
3146
3169
  scan();
3147
3170
  return api;
3148
3171
  }
@@ -1,4 +1,4 @@
1
- import type { CodexAccountSummary } from "@codexhost/shared-contracts";
1
+ import type { CodexAccountSummary } from "@harnessmix/shared-contracts";
2
2
 
3
3
  import { createRendererAgentIcon } from "./renderer-agent-icon.js";
4
4
 
@@ -1,4 +1,4 @@
1
- import type { CodexAccountSummary } from "@codexhost/shared-contracts";
1
+ import type { CodexAccountSummary } from "@harnessmix/shared-contracts";
2
2
  import type { RendererModelClient } from "./renderer-model-client.js";
3
3
 
4
4
  export function resolveCodexAccountSelection(
@@ -1,4 +1,4 @@
1
- import { type HostThreadId, hostThreadIdSchema } from '@codexhost/shared-contracts';
1
+ import { type HostThreadId, hostThreadIdSchema } from '@harnessmix/shared-contracts';
2
2
  import { openRendererThread } from './renderer-fork-control.js';
3
3
  import { collaborationIcon } from './collaboration-icon.js';
4
4
 
@@ -9,7 +9,7 @@ import type {
9
9
  CodexAccountSummary,
10
10
  HarnessCommandDescriptor,
11
11
  ThreadUsageSnapshot,
12
- } from "@codexhost/shared-contracts";
12
+ } from "@harnessmix/shared-contracts";
13
13
  import {
14
14
  CONTROL_ATTRIBUTE,
15
15
  mountRendererAgentPicker,
@@ -125,11 +125,11 @@ function buttonText(button: HTMLButtonElement): string {
125
125
  function isOwnedRendererControl(element: Element): boolean {
126
126
  return (
127
127
  element.hasAttribute(CONTROL_ATTRIBUTE) ||
128
- element.hasAttribute("data-codexhost-model-control") ||
129
- element.hasAttribute("data-codexhost-permission-mode-control") ||
130
- element.hasAttribute("data-codexhost-usage-control") ||
131
- element.hasAttribute("data-codexhost-credits-control") ||
132
- element.hasAttribute("data-codexhost-harness-command-control")
128
+ element.hasAttribute("data-harnessmix-model-control") ||
129
+ element.hasAttribute("data-harnessmix-permission-mode-control") ||
130
+ element.hasAttribute("data-harnessmix-usage-control") ||
131
+ element.hasAttribute("data-harnessmix-credits-control") ||
132
+ element.hasAttribute("data-harnessmix-harness-command-control")
133
133
  );
134
134
  }
135
135
 
@@ -231,7 +231,7 @@ function isRecord(value: unknown): value is Record<string, unknown> {
231
231
  export function isNativeModelControlCandidate(element: Element): boolean {
232
232
  if (
233
233
  element.hasAttribute(CONTROL_ATTRIBUTE) ||
234
- element.hasAttribute("data-codexhost-model-control") ||
234
+ element.hasAttribute("data-harnessmix-model-control") ||
235
235
  !element.matches('button[aria-haspopup="menu"]')
236
236
  ) {
237
237
  return false;
@@ -274,7 +274,7 @@ export function isNativeModelControlCandidate(element: Element): boolean {
274
274
  export function isNativePermissionModeControlCandidate(element: Element): boolean {
275
275
  if (
276
276
  element.hasAttribute(CONTROL_ATTRIBUTE) ||
277
- element.hasAttribute("data-codexhost-permission-mode-control") ||
277
+ element.hasAttribute("data-harnessmix-permission-mode-control") ||
278
278
  !element.matches('button[aria-haspopup="menu"][data-composer-navigation-target="permissions"]')
279
279
  ) {
280
280
  return false;
@@ -321,7 +321,7 @@ function semanticNativePermissionModeControlForComposer(composer: Element): HTML
321
321
  ...composer.querySelectorAll<HTMLElement>(
322
322
  'button[aria-haspopup="menu"][data-composer-navigation-target="permissions"]',
323
323
  ),
324
- ].filter((element) => !element.hasAttribute("data-codexhost-permission-mode-control"));
324
+ ].filter((element) => !element.hasAttribute("data-harnessmix-permission-mode-control"));
325
325
  return candidates.length === 1 ? (candidates[0] ?? null) : null;
326
326
  }
327
327
 
@@ -339,8 +339,8 @@ function nativeModelControlForComposer(composer: Element): HTMLElement | null {
339
339
 
340
340
  export function isNativeContextUsageControlCandidate(element: Element): boolean {
341
341
  if (
342
- element.hasAttribute("data-codexhost-usage-control") ||
343
- element.hasAttribute("data-codexhost-credits-control")
342
+ element.hasAttribute("data-harnessmix-usage-control") ||
343
+ element.hasAttribute("data-harnessmix-credits-control")
344
344
  ) {
345
345
  return false;
346
346
  }
@@ -412,7 +412,7 @@ export function inspectRendererComposerContract(
412
412
  ...composer.querySelectorAll<HTMLElement>(
413
413
  'button[aria-haspopup="menu"][data-composer-navigation-target="permissions"]',
414
414
  ),
415
- ].filter((element) => !element.hasAttribute("data-codexhost-permission-mode-control"));
415
+ ].filter((element) => !element.hasAttribute("data-harnessmix-permission-mode-control"));
416
416
  result.permissionCandidateCount += permissionCandidates.length;
417
417
  result.verifiedPermissionCandidateCount += permissionCandidates.filter(
418
418
  isNativePermissionModeControlCandidate,
@@ -1,4 +1,4 @@
1
- import type { AccountCreditsSnapshot } from "@codexhost/shared-contracts";
1
+ import type { AccountCreditsSnapshot } from "@harnessmix/shared-contracts";
2
2
 
3
3
  import type { RendererSettingsLocale } from "./settings/localization.js";
4
4
 
@@ -144,7 +144,7 @@ function remainingPercent(usedPercent: number): number {
144
144
 
145
145
  function renderCreditsBar(usagePercent: number, color: string): HTMLDivElement {
146
146
  const track = document.createElement("div");
147
- track.dataset.codexhostCreditsBar = "";
147
+ track.dataset.harnessmixCreditsBar = "";
148
148
  track.style.height = "6px";
149
149
  track.style.borderRadius = "9999px";
150
150
  track.style.background = "color-mix(in srgb, currentColor 12%, transparent)";
@@ -352,7 +352,7 @@ export function mountRendererCreditsControl(composerId: string): RendererCredits
352
352
  ensureRendererTriggerChipStyle(document);
353
353
 
354
354
  const root = document.createElement("div");
355
- root.dataset.codexhostCreditsControl = composerId;
355
+ root.dataset.harnessmixCreditsControl = composerId;
356
356
  root.className = "relative min-w-0";
357
357
  root.style.display = "none";
358
358
  root.style.alignItems = "center";
@@ -384,12 +384,12 @@ export function mountRendererCreditsControl(composerId: string): RendererCredits
384
384
  trigger.style.letterSpacing = "0";
385
385
 
386
386
  const ringSlot = document.createElement("span");
387
- ringSlot.dataset.codexhostCreditsRing = "";
387
+ ringSlot.dataset.harnessmixCreditsRing = "";
388
388
  ringSlot.style.display = "inline-flex";
389
389
  ringSlot.style.flex = "0 0 auto";
390
390
 
391
391
  const label = document.createElement("span");
392
- label.dataset.codexhostCreditsLabel = "";
392
+ label.dataset.harnessmixCreditsLabel = "";
393
393
  label.style.display = "inline-block";
394
394
  label.style.maxWidth = "100%";
395
395
  label.style.overflow = "hidden";
@@ -500,8 +500,8 @@ export function renderRendererCreditsControl(
500
500
  const percent = formatRendererCreditsPercent(remaining);
501
501
  const title = `${creditsPeriodLabel(accountCredits.periodType)} ${percent}`;
502
502
  const tone = rendererCreditsTone(accountCredits.usedPercent);
503
- const ringSlot = control.trigger.querySelector<HTMLElement>("[data-codexhost-credits-ring]");
504
- const label = control.trigger.querySelector<HTMLElement>("[data-codexhost-credits-label]");
503
+ const ringSlot = control.trigger.querySelector<HTMLElement>("[data-harnessmix-credits-ring]");
504
+ const label = control.trigger.querySelector<HTMLElement>("[data-harnessmix-credits-label]");
505
505
  if (ringSlot) {
506
506
  ringSlot.replaceChildren(
507
507
  createRendererUsageRing(remaining, {
@@ -1,4 +1,4 @@
1
- import { threadOwnershipListResultSchema } from "@codexhost/shared-contracts";
1
+ import { threadOwnershipListResultSchema } from "@harnessmix/shared-contracts";
2
2
 
3
3
  function isRecord(value: unknown): value is Record<string, unknown> {
4
4
  return value !== null && typeof value === "object" && !Array.isArray(value);
@@ -219,7 +219,7 @@ export function installRendererExternalSteering(target: unknown): (() => void) |
219
219
  // Official steering must not depend on our additional presentation binding.
220
220
  }
221
221
  const ownership = threadOwnershipListResultSchema.parse(
222
- await originalSend.call(manager, "codexhost/thread/ownership/list", {
222
+ await originalSend.call(manager, "harnessmix/thread/ownership/list", {
223
223
  threadIds: [threadId],
224
224
  }),
225
225
  );
@@ -311,7 +311,7 @@ export function installRendererExternalSteering(target: unknown): (() => void) |
311
311
  resumeQueue();
312
312
  } catch {
313
313
  // Never turn an accepted input into a failed delivery (and invite a retry).
314
- console.error("codexhost could not restore follow-up queue state after steering");
314
+ console.error("harnessmix could not restore follow-up queue state after steering");
315
315
  }
316
316
  return { turnId: response.turn.id };
317
317
  })
@@ -3,7 +3,7 @@ import {
3
3
  hostTurnIdSchema,
4
4
  type HostThreadId,
5
5
  type HostTurnId,
6
- } from "@codexhost/shared-contracts";
6
+ } from "@harnessmix/shared-contracts";
7
7
 
8
8
  import type { RendererModelClient } from "./renderer-model-client.js";
9
9
  import {
@@ -1,4 +1,4 @@
1
- import type { HarnessCommandDescriptor } from "@codexhost/shared-contracts";
1
+ import type { HarnessCommandDescriptor } from "@harnessmix/shared-contracts";
2
2
 
3
3
  function inputEvent(editor: HTMLElement, text: string): Event {
4
4
  const view = editor.ownerDocument.defaultView;
@@ -1,4 +1,4 @@
1
- import type { HarnessCommandDescriptor } from "@codexhost/shared-contracts";
1
+ import type { HarnessCommandDescriptor } from "@harnessmix/shared-contracts";
2
2
 
3
3
  import { rendererHarnessCommandExecutesDirectly } from "./renderer-harness-command-claim.js";
4
4
  import {
@@ -8,8 +8,8 @@ import {
8
8
  } from "./renderer-harness-localization.js";
9
9
  import type { RendererSettingsLocale } from "./settings/localization.js";
10
10
 
11
- const CONTROL_ATTRIBUTE = "data-codexhost-harness-command-control";
12
- const MENU_ATTRIBUTE = "data-codexhost-harness-command-menu";
11
+ const CONTROL_ATTRIBUTE = "data-harnessmix-harness-command-control";
12
+ const MENU_ATTRIBUTE = "data-harnessmix-harness-command-menu";
13
13
  const MENU_WIDTH = 320;
14
14
  const VIEWPORT_MARGIN = 8;
15
15
  const MENU_GAP = 8;
@@ -1,5 +1,5 @@
1
1
  import type { ExternalRendererAgent } from "./agent-selection-state.js";
2
- import type { HarnessHandoffIncludes, HarnessHandoffIntent } from "@codexhost/shared-contracts";
2
+ import type { HarnessHandoffIncludes, HarnessHandoffIntent } from "@harnessmix/shared-contracts";
3
3
  import { createRendererAgentIcon, RENDERER_AGENT_LABELS } from "./renderer-agent-icon.js";
4
4
  import type { RendererSettingsLocale } from "./settings/localization.js";
5
5