harness-mix 0.1.0

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 (632) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +14 -0
  3. package/README.md +184 -0
  4. package/Start-Codex.cmd +5 -0
  5. package/config/codex-desktop-compatibility.json +23 -0
  6. package/docs/chatgpt-web-sidebar.md +27 -0
  7. package/docs/harness-management.md +41 -0
  8. package/docs/images/harness-mix-home.png +0 -0
  9. package/docs/images/harness-mix-session.png +0 -0
  10. package/docs/multi-agent-collaboration.md +89 -0
  11. package/docs/native-codex.md +72 -0
  12. package/licenses/codex-host-MIT.txt +21 -0
  13. package/output/native-build/desktop-controller.mjs +1460 -0
  14. package/output/native-build/harness-mix-appx.exe +0 -0
  15. package/output/native-build/harness-mix-shim.exe +0 -0
  16. package/output/native-build/renderer-extension.js +28884 -0
  17. package/package.json +142 -0
  18. package/scripts/acp-capabilities-probe.cjs +100 -0
  19. package/scripts/adapters-test.cjs +17 -0
  20. package/scripts/antigravity-adapter-test.cjs +174 -0
  21. package/scripts/architecture-test.cjs +62 -0
  22. package/scripts/build-native.cjs +46 -0
  23. package/scripts/catalog-test.cjs +25 -0
  24. package/scripts/cdp-eval.cjs +40 -0
  25. package/scripts/cdp-watch.cjs +36 -0
  26. package/scripts/check.cjs +23 -0
  27. package/scripts/codex-adapter-test.cjs +83 -0
  28. package/scripts/collaboration-recovery-test.cjs +91 -0
  29. package/scripts/collaboration-test.cjs +102 -0
  30. package/scripts/collaboration-ui-smoke.cjs +52 -0
  31. package/scripts/concurrency-layers-test.cjs +179 -0
  32. package/scripts/contracts-test.cjs +105 -0
  33. package/scripts/core-concurrency-test.cjs +103 -0
  34. package/scripts/core-replay-test.cjs +179 -0
  35. package/scripts/core-runtime-test.cjs +104 -0
  36. package/scripts/core-services-test.cjs +50 -0
  37. package/scripts/determinism-test.cjs +36 -0
  38. package/scripts/docs-command-test.cjs +49 -0
  39. package/scripts/dsh-adapter-test.cjs +87 -0
  40. package/scripts/dsh-native.cjs +9 -0
  41. package/scripts/dsh-native.cmd +2 -0
  42. package/scripts/e2e-codex.cjs +82 -0
  43. package/scripts/e2e-collaboration.cjs +58 -0
  44. package/scripts/e2e-core-files.cjs +58 -0
  45. package/scripts/e2e-core-fork.cjs +49 -0
  46. package/scripts/e2e-core-resume.cjs +49 -0
  47. package/scripts/e2e-delegate.cjs +38 -0
  48. package/scripts/e2e-dsh.cjs +23 -0
  49. package/scripts/e2e-native-commands.cjs +54 -0
  50. package/scripts/e2e-native-host.cjs +144 -0
  51. package/scripts/e2e-openclaw-image.cjs +59 -0
  52. package/scripts/e2e-openclaw.cjs +21 -0
  53. package/scripts/e2e-pi.cjs +23 -0
  54. package/scripts/e2e-shadow.cjs +52 -0
  55. package/scripts/fixture-capture.cjs +103 -0
  56. package/scripts/git-test.cjs +33 -0
  57. package/scripts/launch-codex.cjs +5 -0
  58. package/scripts/native-compatibility-test.cjs +42 -0
  59. package/scripts/native-config-test.cjs +25 -0
  60. package/scripts/native-file-change-test.cjs +94 -0
  61. package/scripts/native-host.cjs +8 -0
  62. package/scripts/native-images-test.cjs +56 -0
  63. package/scripts/native-protocol-test.cjs +233 -0
  64. package/scripts/native-rollback-test.cjs +46 -0
  65. package/scripts/native-sidebar-test.cjs +88 -0
  66. package/scripts/native-ui-smoke.cjs +94 -0
  67. package/scripts/native-updater-test.cjs +100 -0
  68. package/scripts/native-vendor-adapters-test.cjs +40 -0
  69. package/scripts/openclaw-acp-probe.cjs +39 -0
  70. package/scripts/openclaw-adapter-test.cjs +180 -0
  71. package/scripts/openclaw-models-probe.cjs +13 -0
  72. package/scripts/projector-test.cjs +144 -0
  73. package/scripts/sequence-test.cjs +57 -0
  74. package/scripts/shadow-test.cjs +154 -0
  75. package/scripts/support/legacy-projection.cjs +95 -0
  76. package/scripts/support/legacy-transcript.cjs +48 -0
  77. package/scripts/support/parity-observer.cjs +27 -0
  78. package/scripts/support/shadow-comparator.cjs +62 -0
  79. package/scripts/support/shadow.cjs +114 -0
  80. package/scripts/switch-harness-test.cjs +145 -0
  81. package/scripts/tool-concurrency-regression-test.cjs +118 -0
  82. package/scripts/transcript-test.cjs +24 -0
  83. package/scripts/turn-manager-test.cjs +91 -0
  84. package/scripts/workspace-test.cjs +98 -0
  85. package/src/assets/brand-harness-mix.png +0 -0
  86. package/src/assets/icons/activity-compact.svg +1 -0
  87. package/src/assets/icons/activity-edit.svg +1 -0
  88. package/src/assets/icons/activity-terminal.svg +1 -0
  89. package/src/assets/icons/antigravity-color.svg +1 -0
  90. package/src/assets/icons/claude-color.svg +1 -0
  91. package/src/assets/icons/codex-color.svg +1 -0
  92. package/src/assets/icons/codex-harness.svg +1 -0
  93. package/src/assets/icons/commands.svg +1 -0
  94. package/src/assets/icons/deepseek-color.svg +1 -0
  95. package/src/assets/icons/grok-color.svg +1 -0
  96. package/src/assets/icons/hermes-color.svg +1 -0
  97. package/src/assets/icons/home-chat.svg +1 -0
  98. package/src/assets/icons/home-folder.svg +1 -0
  99. package/src/assets/icons/model-astra.svg +1 -0
  100. package/src/assets/icons/model-claude.svg +1 -0
  101. package/src/assets/icons/model-deepseek.svg +1 -0
  102. package/src/assets/icons/model-gemini.svg +1 -0
  103. package/src/assets/icons/model-hunyuan.svg +1 -0
  104. package/src/assets/icons/model-kimi.svg +1 -0
  105. package/src/assets/icons/model-minimax.svg +1 -0
  106. package/src/assets/icons/model-openai.svg +1 -0
  107. package/src/assets/icons/model-qwen-color.svg +1 -0
  108. package/src/assets/icons/model-xiaomimimo.svg +1 -0
  109. package/src/assets/icons/model-zai.svg +1 -0
  110. package/src/assets/icons/omp-color.svg +1 -0
  111. package/src/assets/icons/openclaw-color.svg +1 -0
  112. package/src/assets/icons/opencode-color.svg +1 -0
  113. package/src/assets/icons/pi.svg +1 -0
  114. package/src/assets/icons/pinumber1_80899.svg +48 -0
  115. package/src/assets/icons/qoder-color.svg +1 -0
  116. package/src/assets/icons/thread-fork.svg +1 -0
  117. package/src/assets/icons/trae-color.svg +1 -0
  118. package/src/assets/icons/workbuddy-color.svg +1 -0
  119. package/src/assets/icons/zcode-color.svg +1 -0
  120. package/src/main/adapters/acp.js +171 -0
  121. package/src/main/adapters/antigravity.js +895 -0
  122. package/src/main/adapters/claude.js +399 -0
  123. package/src/main/adapters/codex-app-server.js +119 -0
  124. package/src/main/adapters/codex.js +547 -0
  125. package/src/main/adapters/dsh-web-host.js +207 -0
  126. package/src/main/adapters/dsh.js +415 -0
  127. package/src/main/adapters/grok.js +161 -0
  128. package/src/main/adapters/hermes.js +24 -0
  129. package/src/main/adapters/index.js +30 -0
  130. package/src/main/adapters/omp.js +12 -0
  131. package/src/main/adapters/openclaw-gateway.js +215 -0
  132. package/src/main/adapters/openclaw.js +337 -0
  133. package/src/main/adapters/opencode-server.js +72 -0
  134. package/src/main/adapters/opencode.js +166 -0
  135. package/src/main/adapters/pi-family.js +315 -0
  136. package/src/main/adapters/pi-usage.js +24 -0
  137. package/src/main/adapters/pi.js +10 -0
  138. package/src/main/adapters/qoder.js +35 -0
  139. package/src/main/adapters/trae.js +19 -0
  140. package/src/main/adapters/workbuddy.js +67 -0
  141. package/src/main/adapters/zcode.js +38 -0
  142. package/src/main/harness-adapter/contract-test.js +53 -0
  143. package/src/main/harness-adapter/contract.js +34 -0
  144. package/src/main/harness-adapter/event-normalizer.js +233 -0
  145. package/src/main/harness-adapter/fixture-recorder.js +56 -0
  146. package/src/main/harness-adapter/index.js +6 -0
  147. package/src/main/harness-adapter/manifest.js +44 -0
  148. package/src/main/host/collaboration-mcp.cjs +35 -0
  149. package/src/main/host/collaboration-pi.mjs +17 -0
  150. package/src/main/host/collaboration-tools.js +16 -0
  151. package/src/main/host/collaboration-worktree.js +82 -0
  152. package/src/main/host/collaboration.js +238 -0
  153. package/src/main/host/core-session.js +81 -0
  154. package/src/main/host/handoff.js +46 -0
  155. package/src/main/host/history-import.js +55 -0
  156. package/src/main/host/jsonl.js +115 -0
  157. package/src/main/host/native-history.js +74 -0
  158. package/src/main/host/runtime.js +927 -0
  159. package/src/main/host/session-history.js +63 -0
  160. package/src/main/host/store.js +42 -0
  161. package/src/main/native/compatibility.js +55 -0
  162. package/src/main/native/config.js +49 -0
  163. package/src/main/native/host.js +108 -0
  164. package/src/main/native/icons.js +101 -0
  165. package/src/main/native/input.js +43 -0
  166. package/src/main/native/launcher.js +100 -0
  167. package/src/main/native/protocol.js +552 -0
  168. package/src/main/native/rs/Cargo.lock +11 -0
  169. package/src/main/native/rs/Cargo.toml +9 -0
  170. package/src/main/native/rs/crates/appx/Cargo.toml +13 -0
  171. package/src/main/native/rs/crates/appx/src/main.rs +309 -0
  172. package/src/main/native/rs/crates/shim/Cargo.toml +10 -0
  173. package/src/main/native/rs/crates/shim/src/main.rs +207 -0
  174. package/src/main/native/thread-list.js +38 -0
  175. package/src/main/native/updater.js +102 -0
  176. package/src/main/native/usage.js +29 -0
  177. package/src/main/protocol-core/capability-manager.js +16 -0
  178. package/src/main/protocol-core/event-router.js +32 -0
  179. package/src/main/protocol-core/file-change-projector.js +45 -0
  180. package/src/main/protocol-core/index.js +8 -0
  181. package/src/main/protocol-core/interaction-router.js +30 -0
  182. package/src/main/protocol-core/projector.js +238 -0
  183. package/src/main/protocol-core/protocol-core.js +132 -0
  184. package/src/main/protocol-core/sequence-validator.js +44 -0
  185. package/src/main/protocol-core/thread-manager.js +50 -0
  186. package/src/main/protocol-core/turn-manager.js +63 -0
  187. package/src/main/shared-contracts/capability.js +35 -0
  188. package/src/main/shared-contracts/event.js +55 -0
  189. package/src/main/shared-contracts/ids.js +12 -0
  190. package/src/main/shared-contracts/index.js +11 -0
  191. package/src/main/shared-contracts/interaction.js +37 -0
  192. package/src/main/shared-contracts/item.js +50 -0
  193. package/src/main/shared-contracts/native-ref.js +24 -0
  194. package/src/main/shared-contracts/thread.js +36 -0
  195. package/src/main/shared-contracts/turn.js +54 -0
  196. package/src/main/workspace/core-review.js +53 -0
  197. package/src/main/workspace/diff.js +27 -0
  198. package/src/main/workspace/file-changes.js +21 -0
  199. package/src/main/workspace/files.js +65 -0
  200. package/src/main/workspace/git.js +73 -0
  201. package/src/main/workspace/ipc.js +50 -0
  202. package/src/main/workspace/review-controller.js +102 -0
  203. package/src/main/workspace/review.js +83 -0
  204. package/src/main/workspace/terminal.js +36 -0
  205. package/src/native-ui/LICENSE +21 -0
  206. package/src/native-ui/README.md +12 -0
  207. package/src/native-ui/desktop-control/dist/cdp-client.d.ts +53 -0
  208. package/src/native-ui/desktop-control/dist/cdp-client.d.ts.map +1 -0
  209. package/src/native-ui/desktop-control/dist/cdp-client.js +258 -0
  210. package/src/native-ui/desktop-control/dist/cdp-client.js.map +1 -0
  211. package/src/native-ui/desktop-control/dist/contract-audit.d.ts +73 -0
  212. package/src/native-ui/desktop-control/dist/contract-audit.d.ts.map +1 -0
  213. package/src/native-ui/desktop-control/dist/contract-audit.js +152 -0
  214. package/src/native-ui/desktop-control/dist/contract-audit.js.map +1 -0
  215. package/src/native-ui/desktop-control/dist/controller-attachment-server.d.ts +10 -0
  216. package/src/native-ui/desktop-control/dist/controller-attachment-server.d.ts.map +1 -0
  217. package/src/native-ui/desktop-control/dist/controller-attachment-server.js +77 -0
  218. package/src/native-ui/desktop-control/dist/controller-attachment-server.js.map +1 -0
  219. package/src/native-ui/desktop-control/dist/index.d.ts +21 -0
  220. package/src/native-ui/desktop-control/dist/index.d.ts.map +1 -0
  221. package/src/native-ui/desktop-control/dist/index.js +14 -0
  222. package/src/native-ui/desktop-control/dist/index.js.map +1 -0
  223. package/src/native-ui/desktop-control/dist/main-process-title-policy.d.ts +24 -0
  224. package/src/native-ui/desktop-control/dist/main-process-title-policy.d.ts.map +1 -0
  225. package/src/native-ui/desktop-control/dist/main-process-title-policy.js +246 -0
  226. package/src/native-ui/desktop-control/dist/main-process-title-policy.js.map +1 -0
  227. package/src/native-ui/desktop-control/dist/production-controller.d.ts +32 -0
  228. package/src/native-ui/desktop-control/dist/production-controller.d.ts.map +1 -0
  229. package/src/native-ui/desktop-control/dist/production-controller.js +291 -0
  230. package/src/native-ui/desktop-control/dist/production-controller.js.map +1 -0
  231. package/src/native-ui/desktop-control/dist/release-main.d.ts +2 -0
  232. package/src/native-ui/desktop-control/dist/release-main.d.ts.map +1 -0
  233. package/src/native-ui/desktop-control/dist/release-main.js +17 -0
  234. package/src/native-ui/desktop-control/dist/release-main.js.map +1 -0
  235. package/src/native-ui/desktop-control/dist/renderer-cdp-control-session.d.ts +49 -0
  236. package/src/native-ui/desktop-control/dist/renderer-cdp-control-session.d.ts.map +1 -0
  237. package/src/native-ui/desktop-control/dist/renderer-cdp-control-session.js +214 -0
  238. package/src/native-ui/desktop-control/dist/renderer-cdp-control-session.js.map +1 -0
  239. package/src/native-ui/desktop-control/dist/renderer-control-session.d.ts +79 -0
  240. package/src/native-ui/desktop-control/dist/renderer-control-session.d.ts.map +1 -0
  241. package/src/native-ui/desktop-control/dist/renderer-control-session.js +366 -0
  242. package/src/native-ui/desktop-control/dist/renderer-control-session.js.map +1 -0
  243. package/src/native-ui/desktop-control/dist/renderer-dom.d.ts +24 -0
  244. package/src/native-ui/desktop-control/dist/renderer-dom.d.ts.map +1 -0
  245. package/src/native-ui/desktop-control/dist/renderer-dom.js +110 -0
  246. package/src/native-ui/desktop-control/dist/renderer-dom.js.map +1 -0
  247. package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-policy.d.ts +19 -0
  248. package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-policy.d.ts.map +1 -0
  249. package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-policy.js +162 -0
  250. package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-policy.js.map +1 -0
  251. package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-runtime.d.ts +38 -0
  252. package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-runtime.d.ts.map +1 -0
  253. package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-runtime.js +633 -0
  254. package/src/native-ui/desktop-control/dist/renderer-draft-prewarm-runtime.js.map +1 -0
  255. package/src/native-ui/desktop-control/dist/tsconfig.tsbuildinfo +1 -0
  256. package/src/native-ui/desktop-control/package.json +22 -0
  257. package/src/native-ui/desktop-control/scripts/build-release.mjs +94 -0
  258. package/src/native-ui/desktop-control/src/cdp-client.ts +347 -0
  259. package/src/native-ui/desktop-control/src/contract-audit.ts +291 -0
  260. package/src/native-ui/desktop-control/src/controller-attachment-server.ts +93 -0
  261. package/src/native-ui/desktop-control/src/index.ts +91 -0
  262. package/src/native-ui/desktop-control/src/main-process-title-policy.ts +334 -0
  263. package/src/native-ui/desktop-control/src/production-controller.ts +344 -0
  264. package/src/native-ui/desktop-control/src/release-main.ts +18 -0
  265. package/src/native-ui/desktop-control/src/renderer-cdp-control-session.ts +358 -0
  266. package/src/native-ui/desktop-control/src/renderer-control-session.ts +595 -0
  267. package/src/native-ui/desktop-control/src/renderer-dom.ts +144 -0
  268. package/src/native-ui/desktop-control/src/renderer-draft-prewarm-policy.ts +209 -0
  269. package/src/native-ui/desktop-control/src/renderer-draft-prewarm-runtime.ts +746 -0
  270. package/src/native-ui/desktop-control/test/cdp-client.test.ts +157 -0
  271. package/src/native-ui/desktop-control/test/contract-audit.test.ts +56 -0
  272. package/src/native-ui/desktop-control/test/controller-attachment-server.test.ts +98 -0
  273. package/src/native-ui/desktop-control/test/index.test.ts +11 -0
  274. package/src/native-ui/desktop-control/test/main-process-title-policy.test.ts +166 -0
  275. package/src/native-ui/desktop-control/test/production-controller.test.ts +389 -0
  276. package/src/native-ui/desktop-control/test/renderer-cdp-control-session.test.ts +205 -0
  277. package/src/native-ui/desktop-control/test/renderer-control-session.test.ts +451 -0
  278. package/src/native-ui/desktop-control/test/renderer-dom.test.ts +62 -0
  279. package/src/native-ui/desktop-control/test/renderer-draft-prewarm-policy.test.ts +998 -0
  280. package/src/native-ui/desktop-control/tsconfig.json +12 -0
  281. package/src/native-ui/renderer-extension/dist/types/agent-group-preference.d.ts +39 -0
  282. package/src/native-ui/renderer-extension/dist/types/agent-group-preference.d.ts.map +1 -0
  283. package/src/native-ui/renderer-extension/dist/types/agent-selection-state.d.ts +83 -0
  284. package/src/native-ui/renderer-extension/dist/types/agent-selection-state.d.ts.map +1 -0
  285. package/src/native-ui/renderer-extension/dist/types/audit-entry.d.ts +2 -0
  286. package/src/native-ui/renderer-extension/dist/types/audit-entry.d.ts.map +1 -0
  287. package/src/native-ui/renderer-extension/dist/types/codex-locale-adapter.d.ts +23 -0
  288. package/src/native-ui/renderer-extension/dist/types/codex-locale-adapter.d.ts.map +1 -0
  289. package/src/native-ui/renderer-extension/dist/types/collaboration-icon.d.ts +2 -0
  290. package/src/native-ui/renderer-extension/dist/types/collaboration-icon.d.ts.map +1 -0
  291. package/src/native-ui/renderer-extension/dist/types/contract-audit.d.ts +37 -0
  292. package/src/native-ui/renderer-extension/dist/types/contract-audit.d.ts.map +1 -0
  293. package/src/native-ui/renderer-extension/dist/types/harness-mix-icons.d.ts +3 -0
  294. package/src/native-ui/renderer-extension/dist/types/harness-mix-icons.d.ts.map +1 -0
  295. package/src/native-ui/renderer-extension/dist/types/harness-mix-settings.d.ts +3 -0
  296. package/src/native-ui/renderer-extension/dist/types/harness-mix-settings.d.ts.map +1 -0
  297. package/src/native-ui/renderer-extension/dist/types/index.d.ts +49 -0
  298. package/src/native-ui/renderer-extension/dist/types/index.d.ts.map +1 -0
  299. package/src/native-ui/renderer-extension/dist/types/install-renderer-binding.d.ts +4 -0
  300. package/src/native-ui/renderer-extension/dist/types/install-renderer-binding.d.ts.map +1 -0
  301. package/src/native-ui/renderer-extension/dist/types/probe-entry.d.ts +2 -0
  302. package/src/native-ui/renderer-extension/dist/types/probe-entry.d.ts.map +1 -0
  303. package/src/native-ui/renderer-extension/dist/types/production-entry.d.ts +9 -0
  304. package/src/native-ui/renderer-extension/dist/types/production-entry.d.ts.map +1 -0
  305. package/src/native-ui/renderer-extension/dist/types/renderer-agent-icon.d.ts +4 -0
  306. package/src/native-ui/renderer-extension/dist/types/renderer-agent-icon.d.ts.map +1 -0
  307. package/src/native-ui/renderer-extension/dist/types/renderer-agent-picker.d.ts +62 -0
  308. package/src/native-ui/renderer-extension/dist/types/renderer-agent-picker.d.ts.map +1 -0
  309. package/src/native-ui/renderer-extension/dist/types/renderer-binding-probe.d.ts +70 -0
  310. package/src/native-ui/renderer-extension/dist/types/renderer-binding-probe.d.ts.map +1 -0
  311. package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-options.d.ts +34 -0
  312. package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-options.d.ts.map +1 -0
  313. package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-state.d.ts +19 -0
  314. package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-state.d.ts.map +1 -0
  315. package/src/native-ui/renderer-extension/dist/types/renderer-composer-dom.d.ts +82 -0
  316. package/src/native-ui/renderer-extension/dist/types/renderer-composer-dom.d.ts.map +1 -0
  317. package/src/native-ui/renderer-extension/dist/types/renderer-credits-control.d.ts +21 -0
  318. package/src/native-ui/renderer-extension/dist/types/renderer-credits-control.d.ts.map +1 -0
  319. package/src/native-ui/renderer-extension/dist/types/renderer-external-steering.d.ts +7 -0
  320. package/src/native-ui/renderer-extension/dist/types/renderer-external-steering.d.ts.map +1 -0
  321. package/src/native-ui/renderer-extension/dist/types/renderer-fork-control.d.ts +34 -0
  322. package/src/native-ui/renderer-extension/dist/types/renderer-fork-control.d.ts.map +1 -0
  323. package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-claim.d.ts +4 -0
  324. package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-claim.d.ts.map +1 -0
  325. package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-control.d.ts +15 -0
  326. package/src/native-ui/renderer-extension/dist/types/renderer-harness-command-control.d.ts.map +1 -0
  327. package/src/native-ui/renderer-extension/dist/types/renderer-harness-localization.d.ts +25 -0
  328. package/src/native-ui/renderer-extension/dist/types/renderer-harness-localization.d.ts.map +1 -0
  329. package/src/native-ui/renderer-extension/dist/types/renderer-harness-mentions.d.ts +23 -0
  330. package/src/native-ui/renderer-extension/dist/types/renderer-harness-mentions.d.ts.map +1 -0
  331. package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts +94 -0
  332. package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts.map +1 -0
  333. package/src/native-ui/renderer-extension/dist/types/renderer-model-picker-positioning.d.ts +22 -0
  334. package/src/native-ui/renderer-extension/dist/types/renderer-model-picker-positioning.d.ts.map +1 -0
  335. package/src/native-ui/renderer-extension/dist/types/renderer-model-picker.d.ts +54 -0
  336. package/src/native-ui/renderer-extension/dist/types/renderer-model-picker.d.ts.map +1 -0
  337. package/src/native-ui/renderer-extension/dist/types/renderer-new-thread-preference.d.ts +18 -0
  338. package/src/native-ui/renderer-extension/dist/types/renderer-new-thread-preference.d.ts.map +1 -0
  339. package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-picker.d.ts +42 -0
  340. package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-picker.d.ts.map +1 -0
  341. package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-preference.d.ts +9 -0
  342. package/src/native-ui/renderer-extension/dist/types/renderer-permission-mode-preference.d.ts.map +1 -0
  343. package/src/native-ui/renderer-extension/dist/types/renderer-request-sender.d.ts +9 -0
  344. package/src/native-ui/renderer-extension/dist/types/renderer-request-sender.d.ts.map +1 -0
  345. package/src/native-ui/renderer-extension/dist/types/renderer-session-import-client.d.ts +12 -0
  346. package/src/native-ui/renderer-extension/dist/types/renderer-session-import-client.d.ts.map +1 -0
  347. package/src/native-ui/renderer-extension/dist/types/renderer-settings-lifecycle.d.ts +18 -0
  348. package/src/native-ui/renderer-extension/dist/types/renderer-settings-lifecycle.d.ts.map +1 -0
  349. package/src/native-ui/renderer-extension/dist/types/renderer-sidebar-agent-icons.d.ts +45 -0
  350. package/src/native-ui/renderer-extension/dist/types/renderer-sidebar-agent-icons.d.ts.map +1 -0
  351. package/src/native-ui/renderer-extension/dist/types/renderer-transcript-dom.d.ts +23 -0
  352. package/src/native-ui/renderer-extension/dist/types/renderer-transcript-dom.d.ts.map +1 -0
  353. package/src/native-ui/renderer-extension/dist/types/renderer-trigger-chip-style.d.ts +3 -0
  354. package/src/native-ui/renderer-extension/dist/types/renderer-trigger-chip-style.d.ts.map +1 -0
  355. package/src/native-ui/renderer-extension/dist/types/renderer-usage-control.d.ts +72 -0
  356. package/src/native-ui/renderer-extension/dist/types/renderer-usage-control.d.ts.map +1 -0
  357. package/src/native-ui/renderer-extension/dist/types/settings/accounts-list.d.ts +24 -0
  358. package/src/native-ui/renderer-extension/dist/types/settings/accounts-list.d.ts.map +1 -0
  359. package/src/native-ui/renderer-extension/dist/types/settings/accounts-page.d.ts +18 -0
  360. package/src/native-ui/renderer-extension/dist/types/settings/accounts-page.d.ts.map +1 -0
  361. package/src/native-ui/renderer-extension/dist/types/settings/accounts-usage.d.ts +27 -0
  362. package/src/native-ui/renderer-extension/dist/types/settings/accounts-usage.d.ts.map +1 -0
  363. package/src/native-ui/renderer-extension/dist/types/settings/connections-page.d.ts +42 -0
  364. package/src/native-ui/renderer-extension/dist/types/settings/connections-page.d.ts.map +1 -0
  365. package/src/native-ui/renderer-extension/dist/types/settings/core.d.ts +38 -0
  366. package/src/native-ui/renderer-extension/dist/types/settings/core.d.ts.map +1 -0
  367. package/src/native-ui/renderer-extension/dist/types/settings/harness-accounts.d.ts +14 -0
  368. package/src/native-ui/renderer-extension/dist/types/settings/harness-accounts.d.ts.map +1 -0
  369. package/src/native-ui/renderer-extension/dist/types/settings/icons.d.ts +6 -0
  370. package/src/native-ui/renderer-extension/dist/types/settings/icons.d.ts.map +1 -0
  371. package/src/native-ui/renderer-extension/dist/types/settings/localization.d.ts +231 -0
  372. package/src/native-ui/renderer-extension/dist/types/settings/localization.d.ts.map +1 -0
  373. package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts +22 -0
  374. package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts.map +1 -0
  375. package/src/native-ui/renderer-extension/dist/types/settings/release-notes.d.ts +4 -0
  376. package/src/native-ui/renderer-extension/dist/types/settings/release-notes.d.ts.map +1 -0
  377. package/src/native-ui/renderer-extension/dist/types/settings/session-import-list-controls.d.ts +12 -0
  378. package/src/native-ui/renderer-extension/dist/types/settings/session-import-list-controls.d.ts.map +1 -0
  379. package/src/native-ui/renderer-extension/dist/types/settings/session-import-page.d.ts +8 -0
  380. package/src/native-ui/renderer-extension/dist/types/settings/session-import-page.d.ts.map +1 -0
  381. package/src/native-ui/renderer-extension/dist/types/settings/shell.d.ts +24 -0
  382. package/src/native-ui/renderer-extension/dist/types/settings/shell.d.ts.map +1 -0
  383. package/src/native-ui/renderer-extension/dist/types/settings/trigger.d.ts +45 -0
  384. package/src/native-ui/renderer-extension/dist/types/settings/trigger.d.ts.map +1 -0
  385. package/src/native-ui/renderer-extension/dist/types/settings/update-request.d.ts +6 -0
  386. package/src/native-ui/renderer-extension/dist/types/settings/update-request.d.ts.map +1 -0
  387. package/src/native-ui/renderer-extension/dist/types/tsconfig.tsbuildinfo +1 -0
  388. package/src/native-ui/renderer-extension/dist/types/versioned-renderer-adapter.d.ts +143 -0
  389. package/src/native-ui/renderer-extension/dist/types/versioned-renderer-adapter.d.ts.map +1 -0
  390. package/src/native-ui/renderer-extension/package.json +22 -0
  391. package/src/native-ui/renderer-extension/src/agent-group-preference.ts +174 -0
  392. package/src/native-ui/renderer-extension/src/agent-selection-state.ts +610 -0
  393. package/src/native-ui/renderer-extension/src/assets/README.md +43 -0
  394. package/src/native-ui/renderer-extension/src/assets/antigravity-agent.svg +1 -0
  395. package/src/native-ui/renderer-extension/src/assets/claude-agent.svg +3 -0
  396. package/src/native-ui/renderer-extension/src/assets/codex-agent.png +0 -0
  397. package/src/native-ui/renderer-extension/src/assets/codex-logo-bright.png +0 -0
  398. package/src/native-ui/renderer-extension/src/assets/codex-logo-transparent.png +0 -0
  399. package/src/native-ui/renderer-extension/src/assets/codex-logo.png +0 -0
  400. package/src/native-ui/renderer-extension/src/assets/codexhost-icon.png +0 -0
  401. package/src/native-ui/renderer-extension/src/assets/codexhost-logo-transparent.png +0 -0
  402. package/src/native-ui/renderer-extension/src/assets/codexhost-logo.png +0 -0
  403. package/src/native-ui/renderer-extension/src/assets/codexhost-readme.svg +8 -0
  404. package/src/native-ui/renderer-extension/src/assets/grok-agent.png +0 -0
  405. package/src/native-ui/renderer-extension/src/assets/kiro-agent.svg +11 -0
  406. package/src/native-ui/renderer-extension/src/assets/omp-agent.svg +14 -0
  407. package/src/native-ui/renderer-extension/src/assets/opencode-agent.png +0 -0
  408. package/src/native-ui/renderer-extension/src/assets/pi-agent.svg +4 -0
  409. package/src/native-ui/renderer-extension/src/assets.d.ts +26 -0
  410. package/src/native-ui/renderer-extension/src/audit-entry.ts +5 -0
  411. package/src/native-ui/renderer-extension/src/codex-locale-adapter.ts +321 -0
  412. package/src/native-ui/renderer-extension/src/collaboration-icon.ts +13 -0
  413. package/src/native-ui/renderer-extension/src/contract-audit.ts +102 -0
  414. package/src/native-ui/renderer-extension/src/harness-mix-icons.ts +24 -0
  415. package/src/native-ui/renderer-extension/src/harness-mix-settings.ts +80 -0
  416. package/src/native-ui/renderer-extension/src/index.ts +266 -0
  417. package/src/native-ui/renderer-extension/src/install-renderer-binding.ts +30 -0
  418. package/src/native-ui/renderer-extension/src/probe-entry.ts +4 -0
  419. package/src/native-ui/renderer-extension/src/production-entry.ts +23 -0
  420. package/src/native-ui/renderer-extension/src/renderer-agent-icon.ts +145 -0
  421. package/src/native-ui/renderer-extension/src/renderer-agent-picker.ts +813 -0
  422. package/src/native-ui/renderer-extension/src/renderer-binding-probe.ts +2936 -0
  423. package/src/native-ui/renderer-extension/src/renderer-codex-account-options.ts +281 -0
  424. package/src/native-ui/renderer-extension/src/renderer-codex-account-state.ts +53 -0
  425. package/src/native-ui/renderer-extension/src/renderer-composer-dom.ts +782 -0
  426. package/src/native-ui/renderer-extension/src/renderer-credits-control.ts +500 -0
  427. package/src/native-ui/renderer-extension/src/renderer-external-steering.ts +339 -0
  428. package/src/native-ui/renderer-extension/src/renderer-fork-control.ts +273 -0
  429. package/src/native-ui/renderer-extension/src/renderer-harness-command-claim.ts +64 -0
  430. package/src/native-ui/renderer-extension/src/renderer-harness-command-control.ts +417 -0
  431. package/src/native-ui/renderer-extension/src/renderer-harness-localization.ts +144 -0
  432. package/src/native-ui/renderer-extension/src/renderer-harness-mentions.ts +213 -0
  433. package/src/native-ui/renderer-extension/src/renderer-model-client.ts +567 -0
  434. package/src/native-ui/renderer-extension/src/renderer-model-picker-positioning.ts +65 -0
  435. package/src/native-ui/renderer-extension/src/renderer-model-picker.ts +640 -0
  436. package/src/native-ui/renderer-extension/src/renderer-new-thread-preference.ts +175 -0
  437. package/src/native-ui/renderer-extension/src/renderer-permission-mode-picker.ts +413 -0
  438. package/src/native-ui/renderer-extension/src/renderer-permission-mode-preference.ts +49 -0
  439. package/src/native-ui/renderer-extension/src/renderer-request-sender.ts +43 -0
  440. package/src/native-ui/renderer-extension/src/renderer-session-import-client.ts +68 -0
  441. package/src/native-ui/renderer-extension/src/renderer-settings-lifecycle.ts +239 -0
  442. package/src/native-ui/renderer-extension/src/renderer-sidebar-agent-icons.ts +456 -0
  443. package/src/native-ui/renderer-extension/src/renderer-transcript-dom.ts +47 -0
  444. package/src/native-ui/renderer-extension/src/renderer-trigger-chip-style.ts +52 -0
  445. package/src/native-ui/renderer-extension/src/renderer-usage-control.ts +602 -0
  446. package/src/native-ui/renderer-extension/src/settings/accounts-list.ts +236 -0
  447. package/src/native-ui/renderer-extension/src/settings/accounts-page.ts +585 -0
  448. package/src/native-ui/renderer-extension/src/settings/accounts-quota-interactive.prototype.html +1418 -0
  449. package/src/native-ui/renderer-extension/src/settings/accounts-usage.ts +221 -0
  450. package/src/native-ui/renderer-extension/src/settings/accounts.css +607 -0
  451. package/src/native-ui/renderer-extension/src/settings/connections-page.ts +1354 -0
  452. package/src/native-ui/renderer-extension/src/settings/core.ts +158 -0
  453. package/src/native-ui/renderer-extension/src/settings/harness-accounts.ts +134 -0
  454. package/src/native-ui/renderer-extension/src/settings/icons.ts +141 -0
  455. package/src/native-ui/renderer-extension/src/settings/localization.ts +752 -0
  456. package/src/native-ui/renderer-extension/src/settings/pages.ts +615 -0
  457. package/src/native-ui/renderer-extension/src/settings/release-notes.ts +222 -0
  458. package/src/native-ui/renderer-extension/src/settings/session-import-list-controls.ts +128 -0
  459. package/src/native-ui/renderer-extension/src/settings/session-import-page.ts +461 -0
  460. package/src/native-ui/renderer-extension/src/settings/shell.css +2149 -0
  461. package/src/native-ui/renderer-extension/src/settings/shell.ts +329 -0
  462. package/src/native-ui/renderer-extension/src/settings/trigger.ts +323 -0
  463. package/src/native-ui/renderer-extension/src/settings/update-notes.preview.html +491 -0
  464. package/src/native-ui/renderer-extension/src/settings/update-request.ts +49 -0
  465. package/src/native-ui/renderer-extension/src/settings/windows-update.preview.html +2135 -0
  466. package/src/native-ui/renderer-extension/src/versioned-renderer-adapter.ts +1278 -0
  467. package/src/native-ui/renderer-extension/test/agent-selection-state.test.ts +611 -0
  468. package/src/native-ui/renderer-extension/test/codex-locale-adapter.test.ts +152 -0
  469. package/src/native-ui/renderer-extension/test/contract-audit.test.ts +71 -0
  470. package/src/native-ui/renderer-extension/test/index.test.ts +9 -0
  471. package/src/native-ui/renderer-extension/test/renderer-agent-icon.test.ts +98 -0
  472. package/src/native-ui/renderer-extension/test/renderer-agent-picker.test.ts +226 -0
  473. package/src/native-ui/renderer-extension/test/renderer-binding-probe-host-catalog.test.ts +728 -0
  474. package/src/native-ui/renderer-extension/test/renderer-binding-probe.test.ts +1290 -0
  475. package/src/native-ui/renderer-extension/test/renderer-codex-account-state.test.ts +65 -0
  476. package/src/native-ui/renderer-extension/test/renderer-composer-permissions.test.ts +75 -0
  477. package/src/native-ui/renderer-extension/test/renderer-credits-control.test.ts +70 -0
  478. package/src/native-ui/renderer-extension/test/renderer-external-steering-rpc.test.ts +184 -0
  479. package/src/native-ui/renderer-extension/test/renderer-external-steering.test.ts +279 -0
  480. package/src/native-ui/renderer-extension/test/renderer-fork-control.test.ts +363 -0
  481. package/src/native-ui/renderer-extension/test/renderer-harness-command-claim.test.ts +167 -0
  482. package/src/native-ui/renderer-extension/test/renderer-harness-command-control.test.ts +54 -0
  483. package/src/native-ui/renderer-extension/test/renderer-model-client.test.ts +708 -0
  484. package/src/native-ui/renderer-extension/test/renderer-model-picker.test.ts +302 -0
  485. package/src/native-ui/renderer-extension/test/renderer-native-thread-ownership.test.ts +84 -0
  486. package/src/native-ui/renderer-extension/test/renderer-new-thread-preference.test.ts +81 -0
  487. package/src/native-ui/renderer-extension/test/renderer-permission-mode-picker.test.ts +269 -0
  488. package/src/native-ui/renderer-extension/test/renderer-permission-mode-preference.test.ts +48 -0
  489. package/src/native-ui/renderer-extension/test/renderer-settings-lifecycle.test.ts +156 -0
  490. package/src/native-ui/renderer-extension/test/renderer-sidebar-agent-icons.test.ts +575 -0
  491. package/src/native-ui/renderer-extension/test/renderer-unsupported-methods.test.ts +167 -0
  492. package/src/native-ui/renderer-extension/test/renderer-usage-control.test.ts +96 -0
  493. package/src/native-ui/renderer-extension/test/settings/accounts-usage.test.ts +208 -0
  494. package/src/native-ui/renderer-extension/test/settings/core.test.ts +145 -0
  495. package/src/native-ui/renderer-extension/test/settings/harness-settings.test.ts +88 -0
  496. package/src/native-ui/renderer-extension/test/settings/localization.test.ts +80 -0
  497. package/src/native-ui/renderer-extension/test/settings/pages.test.ts +2000 -0
  498. package/src/native-ui/renderer-extension/test/settings/release-notes.test.ts +163 -0
  499. package/src/native-ui/renderer-extension/test/settings/shell.test.ts +74 -0
  500. package/src/native-ui/renderer-extension/test/settings/trigger.test.ts +270 -0
  501. package/src/native-ui/renderer-extension/test/settings/update-request.test.ts +48 -0
  502. package/src/native-ui/renderer-extension/test/versioned-renderer-adapter.test.ts +682 -0
  503. package/src/native-ui/renderer-extension/tsconfig.json +15 -0
  504. package/src/native-ui/shared-contracts/dist/codex-accounts.d.ts +246 -0
  505. package/src/native-ui/shared-contracts/dist/codex-accounts.d.ts.map +1 -0
  506. package/src/native-ui/shared-contracts/dist/codex-accounts.js +99 -0
  507. package/src/native-ui/shared-contracts/dist/codex-accounts.js.map +1 -0
  508. package/src/native-ui/shared-contracts/dist/deepseek-modern-sessions.d.ts +37 -0
  509. package/src/native-ui/shared-contracts/dist/deepseek-modern-sessions.d.ts.map +1 -0
  510. package/src/native-ui/shared-contracts/dist/deepseek-modern-sessions.js +36 -0
  511. package/src/native-ui/shared-contracts/dist/deepseek-modern-sessions.js.map +1 -0
  512. package/src/native-ui/shared-contracts/dist/errors.d.ts +17 -0
  513. package/src/native-ui/shared-contracts/dist/errors.d.ts.map +1 -0
  514. package/src/native-ui/shared-contracts/dist/errors.js +14 -0
  515. package/src/native-ui/shared-contracts/dist/errors.js.map +1 -0
  516. package/src/native-ui/shared-contracts/dist/external-thread-fork.d.ts +11 -0
  517. package/src/native-ui/shared-contracts/dist/external-thread-fork.d.ts.map +1 -0
  518. package/src/native-ui/shared-contracts/dist/external-thread-fork.js +14 -0
  519. package/src/native-ui/shared-contracts/dist/external-thread-fork.js.map +1 -0
  520. package/src/native-ui/shared-contracts/dist/harness-accounts.d.ts +64 -0
  521. package/src/native-ui/shared-contracts/dist/harness-accounts.d.ts.map +1 -0
  522. package/src/native-ui/shared-contracts/dist/harness-accounts.js +24 -0
  523. package/src/native-ui/shared-contracts/dist/harness-accounts.js.map +1 -0
  524. package/src/native-ui/shared-contracts/dist/harness-commands.d.ts +46 -0
  525. package/src/native-ui/shared-contracts/dist/harness-commands.d.ts.map +1 -0
  526. package/src/native-ui/shared-contracts/dist/harness-commands.js +61 -0
  527. package/src/native-ui/shared-contracts/dist/harness-commands.js.map +1 -0
  528. package/src/native-ui/shared-contracts/dist/harness-models.d.ts +278 -0
  529. package/src/native-ui/shared-contracts/dist/harness-models.d.ts.map +1 -0
  530. package/src/native-ui/shared-contracts/dist/harness-models.js +317 -0
  531. package/src/native-ui/shared-contracts/dist/harness-models.js.map +1 -0
  532. package/src/native-ui/shared-contracts/dist/harness-permission-modes.d.ts +30 -0
  533. package/src/native-ui/shared-contracts/dist/harness-permission-modes.d.ts.map +1 -0
  534. package/src/native-ui/shared-contracts/dist/harness-permission-modes.js +57 -0
  535. package/src/native-ui/shared-contracts/dist/harness-permission-modes.js.map +1 -0
  536. package/src/native-ui/shared-contracts/dist/harness-plugins.d.ts +56 -0
  537. package/src/native-ui/shared-contracts/dist/harness-plugins.d.ts.map +1 -0
  538. package/src/native-ui/shared-contracts/dist/harness-plugins.js +75 -0
  539. package/src/native-ui/shared-contracts/dist/harness-plugins.js.map +1 -0
  540. package/src/native-ui/shared-contracts/dist/harness-route.d.ts +16 -0
  541. package/src/native-ui/shared-contracts/dist/harness-route.d.ts.map +1 -0
  542. package/src/native-ui/shared-contracts/dist/harness-route.js +42 -0
  543. package/src/native-ui/shared-contracts/dist/harness-route.js.map +1 -0
  544. package/src/native-ui/shared-contracts/dist/harness-session-import.d.ts +54 -0
  545. package/src/native-ui/shared-contracts/dist/harness-session-import.d.ts.map +1 -0
  546. package/src/native-ui/shared-contracts/dist/harness-session-import.js +72 -0
  547. package/src/native-ui/shared-contracts/dist/harness-session-import.js.map +1 -0
  548. package/src/native-ui/shared-contracts/dist/ids.d.ts +12 -0
  549. package/src/native-ui/shared-contracts/dist/ids.d.ts.map +1 -0
  550. package/src/native-ui/shared-contracts/dist/ids.js +10 -0
  551. package/src/native-ui/shared-contracts/dist/ids.js.map +1 -0
  552. package/src/native-ui/shared-contracts/dist/index.d.ts +47 -0
  553. package/src/native-ui/shared-contracts/dist/index.d.ts.map +1 -0
  554. package/src/native-ui/shared-contracts/dist/index.js +29 -0
  555. package/src/native-ui/shared-contracts/dist/index.js.map +1 -0
  556. package/src/native-ui/shared-contracts/dist/json-rpc.d.ts +84 -0
  557. package/src/native-ui/shared-contracts/dist/json-rpc.d.ts.map +1 -0
  558. package/src/native-ui/shared-contracts/dist/json-rpc.js +65 -0
  559. package/src/native-ui/shared-contracts/dist/json-rpc.js.map +1 -0
  560. package/src/native-ui/shared-contracts/dist/json-value.d.ts +13 -0
  561. package/src/native-ui/shared-contracts/dist/json-value.d.ts.map +1 -0
  562. package/src/native-ui/shared-contracts/dist/json-value.js +60 -0
  563. package/src/native-ui/shared-contracts/dist/json-value.js.map +1 -0
  564. package/src/native-ui/shared-contracts/dist/native-refs.d.ts +43 -0
  565. package/src/native-ui/shared-contracts/dist/native-refs.d.ts.map +1 -0
  566. package/src/native-ui/shared-contracts/dist/native-refs.js +35 -0
  567. package/src/native-ui/shared-contracts/dist/native-refs.js.map +1 -0
  568. package/src/native-ui/shared-contracts/dist/reasoning-transcript.d.ts +7 -0
  569. package/src/native-ui/shared-contracts/dist/reasoning-transcript.d.ts.map +1 -0
  570. package/src/native-ui/shared-contracts/dist/reasoning-transcript.js +7 -0
  571. package/src/native-ui/shared-contracts/dist/reasoning-transcript.js.map +1 -0
  572. package/src/native-ui/shared-contracts/dist/thread-delegate.d.ts +22 -0
  573. package/src/native-ui/shared-contracts/dist/thread-delegate.d.ts.map +1 -0
  574. package/src/native-ui/shared-contracts/dist/thread-delegate.js +30 -0
  575. package/src/native-ui/shared-contracts/dist/thread-delegate.js.map +1 -0
  576. package/src/native-ui/shared-contracts/dist/thread-harness-switch.d.ts +16 -0
  577. package/src/native-ui/shared-contracts/dist/thread-harness-switch.d.ts.map +1 -0
  578. package/src/native-ui/shared-contracts/dist/thread-harness-switch.js +19 -0
  579. package/src/native-ui/shared-contracts/dist/thread-harness-switch.js.map +1 -0
  580. package/src/native-ui/shared-contracts/dist/thread-usage.d.ts +106 -0
  581. package/src/native-ui/shared-contracts/dist/thread-usage.d.ts.map +1 -0
  582. package/src/native-ui/shared-contracts/dist/thread-usage.js +103 -0
  583. package/src/native-ui/shared-contracts/dist/thread-usage.js.map +1 -0
  584. package/src/native-ui/shared-contracts/dist/tsconfig.tsbuildinfo +1 -0
  585. package/src/native-ui/shared-contracts/dist/updates.d.ts +128 -0
  586. package/src/native-ui/shared-contracts/dist/updates.d.ts.map +1 -0
  587. package/src/native-ui/shared-contracts/dist/updates.js +58 -0
  588. package/src/native-ui/shared-contracts/dist/updates.js.map +1 -0
  589. package/src/native-ui/shared-contracts/dist/version.d.ts +2 -0
  590. package/src/native-ui/shared-contracts/dist/version.d.ts.map +1 -0
  591. package/src/native-ui/shared-contracts/dist/version.js +2 -0
  592. package/src/native-ui/shared-contracts/dist/version.js.map +1 -0
  593. package/src/native-ui/shared-contracts/package.json +25 -0
  594. package/src/native-ui/shared-contracts/src/codex-accounts.ts +140 -0
  595. package/src/native-ui/shared-contracts/src/deepseek-modern-sessions.ts +67 -0
  596. package/src/native-ui/shared-contracts/src/errors.ts +25 -0
  597. package/src/native-ui/shared-contracts/src/external-thread-fork.ts +20 -0
  598. package/src/native-ui/shared-contracts/src/harness-accounts.ts +29 -0
  599. package/src/native-ui/shared-contracts/src/harness-commands.ts +81 -0
  600. package/src/native-ui/shared-contracts/src/harness-models.ts +401 -0
  601. package/src/native-ui/shared-contracts/src/harness-permission-modes.ts +73 -0
  602. package/src/native-ui/shared-contracts/src/harness-plugins.ts +96 -0
  603. package/src/native-ui/shared-contracts/src/harness-route.ts +47 -0
  604. package/src/native-ui/shared-contracts/src/harness-session-import.ts +90 -0
  605. package/src/native-ui/shared-contracts/src/ids.ts +20 -0
  606. package/src/native-ui/shared-contracts/src/index.ts +320 -0
  607. package/src/native-ui/shared-contracts/src/json-rpc.ts +80 -0
  608. package/src/native-ui/shared-contracts/src/json-value.ts +78 -0
  609. package/src/native-ui/shared-contracts/src/native-refs.ts +58 -0
  610. package/src/native-ui/shared-contracts/src/reasoning-transcript.ts +6 -0
  611. package/src/native-ui/shared-contracts/src/thread-delegate.ts +40 -0
  612. package/src/native-ui/shared-contracts/src/thread-harness-switch.ts +25 -0
  613. package/src/native-ui/shared-contracts/src/thread-usage.ts +126 -0
  614. package/src/native-ui/shared-contracts/src/updates.ts +78 -0
  615. package/src/native-ui/shared-contracts/src/version.ts +1 -0
  616. package/src/native-ui/shared-contracts/test/browser-bundle.test.ts +36 -0
  617. package/src/native-ui/shared-contracts/test/deepseek-modern-sessions.test.ts +120 -0
  618. package/src/native-ui/shared-contracts/test/errors.test.ts +72 -0
  619. package/src/native-ui/shared-contracts/test/harness-commands.test.ts +64 -0
  620. package/src/native-ui/shared-contracts/test/harness-models.test.ts +390 -0
  621. package/src/native-ui/shared-contracts/test/harness-permission-modes.test.ts +134 -0
  622. package/src/native-ui/shared-contracts/test/harness-plugins.test.ts +113 -0
  623. package/src/native-ui/shared-contracts/test/harness-session-import.test.ts +117 -0
  624. package/src/native-ui/shared-contracts/test/ids.test.ts +69 -0
  625. package/src/native-ui/shared-contracts/test/index.test.ts +80 -0
  626. package/src/native-ui/shared-contracts/test/json-rpc.test.ts +177 -0
  627. package/src/native-ui/shared-contracts/test/json-value.test.ts +62 -0
  628. package/src/native-ui/shared-contracts/test/native-refs.test.ts +95 -0
  629. package/src/native-ui/shared-contracts/test/thread-usage.test.ts +115 -0
  630. package/src/native-ui/shared-contracts/test/updates.test.ts +120 -0
  631. package/src/native-ui/shared-contracts/tsconfig.json +10 -0
  632. package/src/tsconfig.base.json +19 -0
@@ -0,0 +1,401 @@
1
+ import { z } from "zod";
2
+
3
+ import { codexhostErrorSchema } from "./errors.js";
4
+ import {
5
+ harnessPermissionModeCatalogSchema,
6
+ harnessPermissionModeIdSchema,
7
+ } from "./harness-permission-modes.js";
8
+ import { harnessIdSchema, hostThreadIdSchema } from "./ids.js";
9
+ import { threadUsageSnapshotSchema } from "./thread-usage.js";
10
+
11
+ export const HARNESS_MODEL_REF_MAX_LENGTH = 512;
12
+ export const HARNESS_MODEL_LABEL_MAX_LENGTH = 256;
13
+ export const HARNESS_THINKING_OPTION_ID_MAX_LENGTH = 128;
14
+ export const THREAD_OWNERSHIP_LIST_MAX_LENGTH = 100;
15
+
16
+ const nonBlankTextSchema = z.string().refine((value) => value.trim().length > 0, {
17
+ message: "Value must not be empty or whitespace",
18
+ });
19
+
20
+ export const harnessModelRefIdSchema = nonBlankTextSchema
21
+ .max(HARNESS_MODEL_REF_MAX_LENGTH)
22
+ .regex(/^[A-Za-z0-9._~-]+$/u, "Model Ref must use transport-safe opaque characters")
23
+ .brand<"HarnessModelRefId">();
24
+
25
+ export const harnessModelRefSchema = z
26
+ .object({
27
+ id: harnessModelRefIdSchema,
28
+ })
29
+ .strict();
30
+
31
+ export type HarnessModelRef = z.infer<typeof harnessModelRefSchema>;
32
+
33
+ export const harnessThinkingOptionIdSchema = nonBlankTextSchema
34
+ .max(HARNESS_THINKING_OPTION_ID_MAX_LENGTH)
35
+ .regex(/^[A-Za-z0-9._~-]+$/u, "Thinking option ID must use transport-safe characters")
36
+ .brand<"HarnessThinkingOptionId">();
37
+
38
+ export type HarnessThinkingOptionId = z.infer<typeof harnessThinkingOptionIdSchema>;
39
+
40
+ export const harnessResolvedModelLabelSchema = nonBlankTextSchema.max(
41
+ HARNESS_MODEL_LABEL_MAX_LENGTH,
42
+ );
43
+
44
+ export const harnessThinkingOptionSchema = z
45
+ .object({
46
+ id: harnessThinkingOptionIdSchema,
47
+ label: nonBlankTextSchema.max(HARNESS_MODEL_LABEL_MAX_LENGTH),
48
+ })
49
+ .strict();
50
+
51
+ export type HarnessThinkingOption = z.infer<typeof harnessThinkingOptionSchema>;
52
+
53
+ export const harnessModelSchema = z
54
+ .object({
55
+ ref: harnessModelRefSchema,
56
+ label: nonBlankTextSchema.max(HARNESS_MODEL_LABEL_MAX_LENGTH),
57
+ resolvedModelLabel: harnessResolvedModelLabelSchema.optional(),
58
+ supportedThinkingOptionIds: z.array(harnessThinkingOptionIdSchema).optional(),
59
+ })
60
+ .strict();
61
+
62
+ export type HarnessModel = z.infer<typeof harnessModelSchema>;
63
+
64
+ const harnessThinkingOptionsSchema = z
65
+ .array(harnessThinkingOptionSchema)
66
+ .superRefine((options, context) => {
67
+ const ids = new Set<string>();
68
+ for (const [index, option] of options.entries()) {
69
+ if (ids.has(option.id)) {
70
+ context.addIssue({
71
+ code: "custom",
72
+ message: "Thinking option IDs must be unique",
73
+ path: [index, "id"],
74
+ });
75
+ }
76
+ ids.add(option.id);
77
+ }
78
+ });
79
+
80
+ export const harnessModelCatalogSchema = z
81
+ .object({
82
+ models: z.array(harnessModelSchema),
83
+ defaultModel: harnessModelRefSchema.optional(),
84
+ thinkingOptions: harnessThinkingOptionsSchema,
85
+ defaultThinkingOptionId: harnessThinkingOptionIdSchema.optional(),
86
+ })
87
+ .strict()
88
+ .superRefine((catalog, context) => {
89
+ const refs = new Set<string>();
90
+ const thinkingIds = new Set(catalog.thinkingOptions.map(({ id }) => id));
91
+ for (const [index, model] of catalog.models.entries()) {
92
+ if (refs.has(model.ref.id)) {
93
+ context.addIssue({
94
+ code: "custom",
95
+ message: "Model Catalog refs must be unique",
96
+ path: ["models", index, "ref", "id"],
97
+ });
98
+ }
99
+ refs.add(model.ref.id);
100
+ const supportedThinkingIds = new Set<string>();
101
+ for (const [optionIndex, optionId] of (model.supportedThinkingOptionIds ?? []).entries()) {
102
+ if (supportedThinkingIds.has(optionId)) {
103
+ context.addIssue({
104
+ code: "custom",
105
+ message: "Supported Thinking option IDs must be unique per Model",
106
+ path: ["models", index, "supportedThinkingOptionIds", optionIndex],
107
+ });
108
+ }
109
+ supportedThinkingIds.add(optionId);
110
+ if (!thinkingIds.has(optionId)) {
111
+ context.addIssue({
112
+ code: "custom",
113
+ message: "Supported Thinking option must exist in the catalog",
114
+ path: ["models", index, "supportedThinkingOptionIds", optionIndex],
115
+ });
116
+ }
117
+ }
118
+ }
119
+ if (catalog.defaultModel && !refs.has(catalog.defaultModel.id)) {
120
+ context.addIssue({
121
+ code: "custom",
122
+ message: "Default Model must exist in the Model Catalog",
123
+ path: ["defaultModel", "id"],
124
+ });
125
+ }
126
+ if (catalog.defaultThinkingOptionId && !thinkingIds.has(catalog.defaultThinkingOptionId)) {
127
+ context.addIssue({
128
+ code: "custom",
129
+ message: "Default Thinking option must exist in the catalog",
130
+ path: ["defaultThinkingOptionId"],
131
+ });
132
+ }
133
+ });
134
+
135
+ export type HarnessModelCatalog = z.infer<typeof harnessModelCatalogSchema>;
136
+
137
+ const harnessHistoryCapabilitiesSchema = z
138
+ .object({
139
+ fork: z.boolean(),
140
+ forkAcrossCwd: z.boolean(),
141
+ rollbackLastTurn: z.boolean(),
142
+ })
143
+ .strict()
144
+ .refine((history) => history.fork || !history.forkAcrossCwd, {
145
+ path: ["forkAcrossCwd"],
146
+ message: "Cross-cwd Fork requires exact history Fork support",
147
+ });
148
+
149
+ export const harnessPermissionModeScopeSchema = z.enum(["live", "atCreate"]);
150
+
151
+ export type HarnessPermissionModeScope = z.infer<typeof harnessPermissionModeScopeSchema>;
152
+
153
+ export function permissionModeFixedAtCreate(configuration: {
154
+ permissionModeScope?: HarnessPermissionModeScope;
155
+ }): boolean {
156
+ return configuration.permissionModeScope === "atCreate";
157
+ }
158
+
159
+ export const harnessSessionCapabilitiesSchema = z
160
+ .object({
161
+ configuration: z
162
+ .object({
163
+ selectModel: z.boolean(),
164
+ selectThinkingOption: z.boolean(),
165
+ selectPermissionMode: z.boolean(),
166
+ permissionModeScope: harnessPermissionModeScopeSchema.default("live"),
167
+ })
168
+ .strict(),
169
+ history: harnessHistoryCapabilitiesSchema,
170
+ subagents: z
171
+ .object({
172
+ observe: z.boolean(),
173
+ readTranscript: z.boolean(),
174
+ })
175
+ .strict()
176
+ .optional(),
177
+ autonomousTurns: z
178
+ .object({
179
+ observe: z.boolean(),
180
+ })
181
+ .strict()
182
+ .optional(),
183
+ })
184
+ .strict();
185
+
186
+ export type HarnessSessionCapabilities = z.infer<typeof harnessSessionCapabilitiesSchema>;
187
+
188
+ export const harnessConfigurationStateSchema = z
189
+ .object({
190
+ effectiveModel: harnessModelRefSchema.optional(),
191
+ resolvedModelLabel: harnessResolvedModelLabelSchema.optional(),
192
+ effectiveThinkingOptionId: harnessThinkingOptionIdSchema.optional(),
193
+ availableThinkingOptions: harnessThinkingOptionsSchema.optional(),
194
+ effectivePermissionModeId: harnessPermissionModeIdSchema.optional(),
195
+ })
196
+ .strict()
197
+ .superRefine((state, context) => {
198
+ if (
199
+ state.effectiveThinkingOptionId &&
200
+ state.availableThinkingOptions &&
201
+ !state.availableThinkingOptions.some(({ id }) => id === state.effectiveThinkingOptionId)
202
+ ) {
203
+ context.addIssue({
204
+ code: "custom",
205
+ message: "Effective Thinking option must be currently available",
206
+ path: ["effectiveThinkingOptionId"],
207
+ });
208
+ }
209
+ });
210
+
211
+ export type HarnessConfigurationState = z.infer<typeof harnessConfigurationStateSchema>;
212
+
213
+ export const harnessModelSelectionStateSchema = harnessConfigurationStateSchema;
214
+ export type HarnessModelSelectionState = HarnessConfigurationState;
215
+
216
+ export const harnessWebUiCapabilitySchema = z
217
+ .object({
218
+ open: z.literal(true),
219
+ })
220
+ .strict();
221
+
222
+ export type HarnessWebUiCapability = z.infer<typeof harnessWebUiCapabilitySchema>;
223
+
224
+ const readyHarnessInspectionSchema = z
225
+ .object({
226
+ status: z.literal("ready"),
227
+ catalog: harnessModelCatalogSchema,
228
+ permissionModes: harnessPermissionModeCatalogSchema.optional(),
229
+ capabilities: harnessSessionCapabilitiesSchema,
230
+ webUi: harnessWebUiCapabilitySchema.optional(),
231
+ })
232
+ .strict()
233
+ .superRefine((inspection, context) => {
234
+ const selectable = inspection.capabilities.configuration.selectPermissionMode;
235
+ if (selectable !== Boolean(inspection.permissionModes)) {
236
+ context.addIssue({
237
+ code: "custom",
238
+ message: "Permission Mode catalog and capability must agree",
239
+ path: selectable
240
+ ? ["permissionModes"]
241
+ : ["capabilities", "configuration", "selectPermissionMode"],
242
+ });
243
+ }
244
+ });
245
+
246
+ const failedHarnessInspectionSchema = z
247
+ .object({
248
+ status: z.enum(["notInstalled", "unavailable", "error"]),
249
+ error: codexhostErrorSchema,
250
+ })
251
+ .strict();
252
+
253
+ export const harnessInspectionSchema = z.union([
254
+ readyHarnessInspectionSchema,
255
+ failedHarnessInspectionSchema,
256
+ ]);
257
+
258
+ export type HarnessInspection = z.infer<typeof harnessInspectionSchema>;
259
+
260
+ export const harnessInspectParamsSchema = z
261
+ .object({
262
+ harnessId: harnessIdSchema,
263
+ cwd: nonBlankTextSchema.max(16_384).optional(),
264
+ refresh: z.boolean().optional(),
265
+ })
266
+ .strict();
267
+
268
+ export type HarnessInspectParams = z.infer<typeof harnessInspectParamsSchema>;
269
+
270
+ export const harnessWebUiOpenParamsSchema = z
271
+ .object({
272
+ harnessId: harnessIdSchema,
273
+ })
274
+ .strict();
275
+
276
+ export type HarnessWebUiOpenParams = z.infer<typeof harnessWebUiOpenParamsSchema>;
277
+
278
+ export const harnessWebUiOpenResultSchema = z.object({}).strict();
279
+
280
+ export type HarnessWebUiOpenResult = z.infer<typeof harnessWebUiOpenResultSchema>;
281
+
282
+ export const threadModelSelectParamsSchema = z
283
+ .object({
284
+ threadId: hostThreadIdSchema,
285
+ model: harnessModelRefSchema,
286
+ })
287
+ .strict();
288
+
289
+ export type ThreadModelSelectParams = z.infer<typeof threadModelSelectParamsSchema>;
290
+
291
+ export const threadThinkingSelectParamsSchema = z
292
+ .object({
293
+ threadId: hostThreadIdSchema,
294
+ thinkingOptionId: harnessThinkingOptionIdSchema,
295
+ })
296
+ .strict();
297
+
298
+ export type ThreadThinkingSelectParams = z.infer<typeof threadThinkingSelectParamsSchema>;
299
+
300
+ export const threadInspectionParamsSchema = z
301
+ .object({
302
+ threadId: hostThreadIdSchema,
303
+ })
304
+ .strict();
305
+
306
+ export type ThreadInspectionParams = z.infer<typeof threadInspectionParamsSchema>;
307
+
308
+ const codexThreadInspectionSchema = z
309
+ .object({
310
+ owner: z.literal("codex"),
311
+ accountId: nonBlankTextSchema.optional(),
312
+ locked: z.literal(true),
313
+ })
314
+ .strict();
315
+
316
+ const externalThreadInspectionSchema = z
317
+ .object({
318
+ owner: z.literal("external"),
319
+ harnessId: nonBlankTextSchema.max(256),
320
+ transportModelId: nonBlankTextSchema.max(1_024),
321
+ effectiveModel: harnessModelRefSchema.optional(),
322
+ resolvedModelLabel: harnessResolvedModelLabelSchema.optional(),
323
+ effectiveThinkingOptionId: harnessThinkingOptionIdSchema.optional(),
324
+ availableThinkingOptions: harnessThinkingOptionsSchema.optional(),
325
+ effectivePermissionModeId: harnessPermissionModeIdSchema.optional(),
326
+ history: harnessHistoryCapabilitiesSchema,
327
+ usage: threadUsageSnapshotSchema.optional(),
328
+ locked: z.literal(true),
329
+ })
330
+ .strict();
331
+
332
+ export const threadInspectionSchema = z.discriminatedUnion("owner", [
333
+ codexThreadInspectionSchema,
334
+ externalThreadInspectionSchema,
335
+ ]);
336
+
337
+ export type ThreadInspection = z.infer<typeof threadInspectionSchema>;
338
+
339
+ export const threadOwnershipListParamsSchema = z
340
+ .object({
341
+ threadIds: z.array(hostThreadIdSchema).min(1).max(THREAD_OWNERSHIP_LIST_MAX_LENGTH),
342
+ })
343
+ .strict()
344
+ .superRefine(({ threadIds }, context) => {
345
+ const seen = new Set<string>();
346
+ for (const [index, threadId] of threadIds.entries()) {
347
+ if (seen.has(threadId)) {
348
+ context.addIssue({
349
+ code: "custom",
350
+ message: "Thread ownership-list IDs must be unique",
351
+ path: ["threadIds", index],
352
+ });
353
+ }
354
+ seen.add(threadId);
355
+ }
356
+ });
357
+
358
+ export type ThreadOwnershipListParams = z.infer<typeof threadOwnershipListParamsSchema>;
359
+
360
+ const codexThreadOwnershipSchema = z
361
+ .object({
362
+ threadId: hostThreadIdSchema,
363
+ owner: z.literal("codex"),
364
+ })
365
+ .strict();
366
+
367
+ const externalThreadOwnershipSchema = z
368
+ .object({
369
+ threadId: hostThreadIdSchema,
370
+ owner: z.literal("external"),
371
+ harnessId: z.string().max(256).pipe(harnessIdSchema),
372
+ })
373
+ .strict();
374
+
375
+ export const threadOwnershipSchema = z.discriminatedUnion("owner", [
376
+ codexThreadOwnershipSchema,
377
+ externalThreadOwnershipSchema,
378
+ ]);
379
+
380
+ export type ThreadOwnership = z.infer<typeof threadOwnershipSchema>;
381
+
382
+ export const threadOwnershipListResultSchema = z
383
+ .object({
384
+ threads: z.array(threadOwnershipSchema).min(1).max(THREAD_OWNERSHIP_LIST_MAX_LENGTH),
385
+ })
386
+ .strict()
387
+ .superRefine(({ threads }, context) => {
388
+ const seen = new Set<string>();
389
+ for (const [index, thread] of threads.entries()) {
390
+ if (seen.has(thread.threadId)) {
391
+ context.addIssue({
392
+ code: "custom",
393
+ message: "Thread ownership-list results must be unique",
394
+ path: ["threads", index, "threadId"],
395
+ });
396
+ }
397
+ seen.add(thread.threadId);
398
+ }
399
+ });
400
+
401
+ export type ThreadOwnershipListResult = z.infer<typeof threadOwnershipListResultSchema>;
@@ -0,0 +1,73 @@
1
+ import { z } from "zod";
2
+
3
+ import { hostThreadIdSchema } from "./ids.js";
4
+
5
+ export const HARNESS_PERMISSION_MODE_ID_MAX_LENGTH = 128;
6
+ export const HARNESS_PERMISSION_MODE_LABEL_MAX_LENGTH = 256;
7
+ export const HARNESS_PERMISSION_MODE_DESCRIPTION_MAX_LENGTH = 1_024;
8
+ export const HARNESS_PERMISSION_MODE_CATALOG_MAX_LENGTH = 32;
9
+
10
+ const nonBlankTextSchema = z.string().refine((value) => value.trim().length > 0, {
11
+ message: "Value must not be empty or whitespace",
12
+ });
13
+
14
+ export const harnessPermissionModeIdSchema = nonBlankTextSchema
15
+ .max(HARNESS_PERMISSION_MODE_ID_MAX_LENGTH)
16
+ .regex(/^[A-Za-z0-9._~-]+$/u, "Permission Mode ID must use transport-safe characters")
17
+ .brand<"HarnessPermissionModeId">();
18
+
19
+ export type HarnessPermissionModeId = z.infer<typeof harnessPermissionModeIdSchema>;
20
+
21
+ export const harnessPermissionModeSchema = z
22
+ .object({
23
+ id: harnessPermissionModeIdSchema,
24
+ label: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_LABEL_MAX_LENGTH),
25
+ description: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_DESCRIPTION_MAX_LENGTH).optional(),
26
+ dangerous: z.boolean().optional(),
27
+ })
28
+ .strict();
29
+
30
+ export type HarnessPermissionMode = z.infer<typeof harnessPermissionModeSchema>;
31
+
32
+ export const harnessPermissionModeCatalogSchema = z
33
+ .object({
34
+ modes: z
35
+ .array(harnessPermissionModeSchema)
36
+ .min(1)
37
+ .max(HARNESS_PERMISSION_MODE_CATALOG_MAX_LENGTH),
38
+ defaultModeId: harnessPermissionModeIdSchema,
39
+ })
40
+ .strict()
41
+ .superRefine((catalog, context) => {
42
+ const ids = new Set<string>();
43
+ for (const [index, mode] of catalog.modes.entries()) {
44
+ if (ids.has(mode.id)) {
45
+ context.addIssue({
46
+ code: "custom",
47
+ message: "Permission Mode IDs must be unique",
48
+ path: ["modes", index, "id"],
49
+ });
50
+ }
51
+ ids.add(mode.id);
52
+ }
53
+ if (!ids.has(catalog.defaultModeId)) {
54
+ context.addIssue({
55
+ code: "custom",
56
+ message: "Default Permission Mode must exist in the catalog",
57
+ path: ["defaultModeId"],
58
+ });
59
+ }
60
+ });
61
+
62
+ export type HarnessPermissionModeCatalog = z.infer<typeof harnessPermissionModeCatalogSchema>;
63
+
64
+ export const threadPermissionModeSelectParamsSchema = z
65
+ .object({
66
+ threadId: hostThreadIdSchema,
67
+ permissionModeId: harnessPermissionModeIdSchema,
68
+ })
69
+ .strict();
70
+
71
+ export type ThreadPermissionModeSelectParams = z.infer<
72
+ typeof threadPermissionModeSelectParamsSchema
73
+ >;
@@ -0,0 +1,96 @@
1
+ import { z } from "zod";
2
+
3
+ import { harnessIdSchema } from "./ids.js";
4
+
5
+ export const HARNESS_PLUGIN_API_VERSION = 1;
6
+ export const HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
7
+ export const HARNESS_PLUGIN_ICON_MAX_BYTES = 128 * 1024;
8
+ export const HARNESS_PLUGIN_LIMIT = 128;
9
+
10
+ /** Plugin identities are portable directory/route keys, not arbitrary Native Session IDs. */
11
+ export const harnessPluginIdSchema = z
12
+ .string()
13
+ .min(1)
14
+ .max(128)
15
+ .regex(/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/u)
16
+ .refine((id) => id !== "codex", "The official Codex identity is reserved")
17
+ .pipe(harnessIdSchema);
18
+
19
+ const relativeResourceSchema = z
20
+ .string()
21
+ .min(1)
22
+ .max(512)
23
+ .refine(
24
+ (value) =>
25
+ !/[\\\u0000:#?]/u.test(value) &&
26
+ !value.startsWith("/") &&
27
+ !value.split("/").some((part) => part === ".." || part === ""),
28
+ "Plugin resources must be relative paths inside the plugin",
29
+ );
30
+
31
+ const documentationUrlSchema = z
32
+ .url()
33
+ .refine(
34
+ (value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value),
35
+ "Plugin documentation links must be credential-free HTTPS URLs",
36
+ );
37
+
38
+ const pluginPresentationShape = {
39
+ id: harnessPluginIdSchema,
40
+ name: z.string().trim().min(1).max(128),
41
+ version: z.string().min(1).max(128),
42
+ links: z
43
+ .object({
44
+ documentation: documentationUrlSchema.optional(),
45
+ installation: documentationUrlSchema.optional(),
46
+ })
47
+ .strict()
48
+ .optional(),
49
+ };
50
+
51
+ /** A manifest is data only. It must be validated before importing any plugin code. */
52
+ export const harnessPluginManifestSchema = z
53
+ .object({
54
+ manifestVersion: z.literal(1),
55
+ ...pluginPresentationShape,
56
+ adapterApiVersion: z.number().int().positive(),
57
+ entry: relativeResourceSchema,
58
+ icon: relativeResourceSchema.optional(),
59
+ })
60
+ .strict();
61
+ export type HarnessPluginManifest = z.infer<typeof harnessPluginManifestSchema>;
62
+
63
+ /** Images are presentation data; consumers must use an img, never inline markup. */
64
+ export const harnessPluginIconSchema = z
65
+ .string()
66
+ .max(Math.ceil(HARNESS_PLUGIN_ICON_MAX_BYTES / 3) * 4 + 64)
67
+ .regex(/^data:image\/(?:png|jpeg|webp|svg\+xml);base64,[A-Za-z0-9+/]+={0,2}$/u);
68
+
69
+ export const harnessPluginDescriptorSchema = z
70
+ .object({
71
+ ...pluginPresentationShape,
72
+ icon: harnessPluginIconSchema.optional(),
73
+ })
74
+ .strict();
75
+ export type HarnessPluginDescriptor = z.infer<typeof harnessPluginDescriptorSchema>;
76
+
77
+ export const harnessPluginListParamsSchema = z.object({}).strict();
78
+ export const harnessPluginListResultSchema = z
79
+ .object({
80
+ plugins: z.array(harnessPluginDescriptorSchema).max(HARNESS_PLUGIN_LIMIT),
81
+ })
82
+ .strict();
83
+ export type HarnessPluginListResult = z.infer<typeof harnessPluginListResultSchema>;
84
+
85
+ /** Entries are explicit trust grants. Discovery alone never enables a plugin. */
86
+ export const harnessPluginConfigurationSchema = z
87
+ .object({
88
+ version: z.literal(1),
89
+ enabled: z.array(harnessPluginIdSchema).max(HARNESS_PLUGIN_LIMIT),
90
+ })
91
+ .strict()
92
+ .refine((value) => new Set(value.enabled).size === value.enabled.length, {
93
+ message: "Enabled plugin IDs must be unique",
94
+ path: ["enabled"],
95
+ });
96
+ export type HarnessPluginConfiguration = z.infer<typeof harnessPluginConfigurationSchema>;
@@ -0,0 +1,47 @@
1
+ import { z } from "zod";
2
+
3
+ import { harnessModelRefSchema, harnessThinkingOptionIdSchema } from "./harness-models.js";
4
+ import { harnessPermissionModeIdSchema } from "./harness-permission-modes.js";
5
+ import { harnessPluginIdSchema } from "./harness-plugins.js";
6
+
7
+ export const HARNESS_PLUGIN_ROUTE_PREFIX = "codexhost/plugin-v1@";
8
+ const MAX_ROUTE_LENGTH = 4096;
9
+
10
+ export const harnessPluginRouteSchema = z
11
+ .object({
12
+ harnessId: harnessPluginIdSchema,
13
+ model: harnessModelRefSchema.optional(),
14
+ thinkingOptionId: harnessThinkingOptionIdSchema.optional(),
15
+ permissionModeId: harnessPermissionModeIdSchema.optional(),
16
+ })
17
+ .strict();
18
+ export type HarnessPluginRoute = z.infer<typeof harnessPluginRouteSchema>;
19
+
20
+ /** All identity fields are transport-safe ASCII; no Node.js Buffer dependency. */
21
+ export function encodeHarnessPluginRoute(route: HarnessPluginRoute): string {
22
+ const parsed = harnessPluginRouteSchema.parse(route);
23
+ const payload = [...JSON.stringify(parsed)]
24
+ .map((character) => character.charCodeAt(0).toString(16).padStart(2, "0"))
25
+ .join("");
26
+ return `${HARNESS_PLUGIN_ROUTE_PREFIX}${payload}`;
27
+ }
28
+
29
+ /** null means another protocol, not an invalid or unavailable external Harness. */
30
+ export function decodeHarnessPluginRoute(value: unknown): HarnessPluginRoute | null {
31
+ if (typeof value !== "string" || !value.startsWith(HARNESS_PLUGIN_ROUTE_PREFIX)) return null;
32
+ const payload = value.slice(HARNESS_PLUGIN_ROUTE_PREFIX.length);
33
+ if (value.length > MAX_ROUTE_LENGTH || !/^(?:[a-f0-9]{2})+$/u.test(payload)) {
34
+ throw new Error("Invalid Harness plugin route");
35
+ }
36
+ try {
37
+ const json = payload.replace(/[a-f0-9]{2}/gu, (byte) =>
38
+ String.fromCharCode(Number.parseInt(byte, 16)),
39
+ );
40
+ const decoded = harnessPluginRouteSchema.parse(JSON.parse(json));
41
+ if (encodeHarnessPluginRoute(decoded) !== value)
42
+ throw new Error("Noncanonical Harness plugin route");
43
+ return decoded;
44
+ } catch {
45
+ throw new Error("Invalid Harness plugin route");
46
+ }
47
+ }