hivehq 2.0.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 (883) hide show
  1. package/CHANGELOG.md +592 -0
  2. package/LICENSE +208 -0
  3. package/LICENSE.BSL +101 -0
  4. package/NOTICE +15 -0
  5. package/README.en.md +451 -0
  6. package/README.md +329 -0
  7. package/SECURITY.md +59 -0
  8. package/TRADEMARK.md +41 -0
  9. package/assets/hive-hero.png +0 -0
  10. package/assets/hive-team-view.png +0 -0
  11. package/assets/logo.png +0 -0
  12. package/assets/qq-group.jpg +0 -0
  13. package/dist/bin/team +7 -0
  14. package/dist/bin/team.cmd +3 -0
  15. package/dist/src/cli/hive-remote.d.ts +46 -0
  16. package/dist/src/cli/hive-remote.js +257 -0
  17. package/dist/src/cli/hive-update.d.ts +75 -0
  18. package/dist/src/cli/hive-update.js +215 -0
  19. package/dist/src/cli/hive.d.ts +78 -0
  20. package/dist/src/cli/hive.js +336 -0
  21. package/dist/src/cli/team.d.ts +38 -0
  22. package/dist/src/cli/team.js +762 -0
  23. package/dist/src/server/agent-command-resolver.d.ts +17 -0
  24. package/dist/src/server/agent-command-resolver.js +106 -0
  25. package/dist/src/server/agent-exit-classification.d.ts +6 -0
  26. package/dist/src/server/agent-exit-classification.js +6 -0
  27. package/dist/src/server/agent-launch-cache.d.ts +20 -0
  28. package/dist/src/server/agent-launch-cache.js +75 -0
  29. package/dist/src/server/agent-launch-resolver.d.ts +4 -0
  30. package/dist/src/server/agent-launch-resolver.js +38 -0
  31. package/dist/src/server/agent-manager-support.d.ts +36 -0
  32. package/dist/src/server/agent-manager-support.js +318 -0
  33. package/dist/src/server/agent-manager.d.ts +54 -0
  34. package/dist/src/server/agent-manager.js +104 -0
  35. package/dist/src/server/agent-run-bootstrap.d.ts +83 -0
  36. package/dist/src/server/agent-run-bootstrap.js +101 -0
  37. package/dist/src/server/agent-run-exit-handler.d.ts +8 -0
  38. package/dist/src/server/agent-run-exit-handler.js +32 -0
  39. package/dist/src/server/agent-run-start-context.d.ts +24 -0
  40. package/dist/src/server/agent-run-start-context.js +1 -0
  41. package/dist/src/server/agent-run-starter.d.ts +30 -0
  42. package/dist/src/server/agent-run-starter.js +155 -0
  43. package/dist/src/server/agent-run-store.d.ts +51 -0
  44. package/dist/src/server/agent-run-store.js +137 -0
  45. package/dist/src/server/agent-run-sync.d.ts +10 -0
  46. package/dist/src/server/agent-run-sync.js +32 -0
  47. package/dist/src/server/agent-runtime-active-run.d.ts +3 -0
  48. package/dist/src/server/agent-runtime-active-run.js +10 -0
  49. package/dist/src/server/agent-runtime-close.d.ts +5 -0
  50. package/dist/src/server/agent-runtime-close.js +36 -0
  51. package/dist/src/server/agent-runtime-contract.d.ts +48 -0
  52. package/dist/src/server/agent-runtime-contract.js +1 -0
  53. package/dist/src/server/agent-runtime-flow-adapter.d.ts +10 -0
  54. package/dist/src/server/agent-runtime-flow-adapter.js +14 -0
  55. package/dist/src/server/agent-runtime-list-runs.d.ts +3 -0
  56. package/dist/src/server/agent-runtime-list-runs.js +18 -0
  57. package/dist/src/server/agent-runtime-ports.d.ts +22 -0
  58. package/dist/src/server/agent-runtime-ports.js +1 -0
  59. package/dist/src/server/agent-runtime-stop-run.d.ts +4 -0
  60. package/dist/src/server/agent-runtime-stop-run.js +19 -0
  61. package/dist/src/server/agent-runtime-types.d.ts +5 -0
  62. package/dist/src/server/agent-runtime-types.js +1 -0
  63. package/dist/src/server/agent-runtime.d.ts +10 -0
  64. package/dist/src/server/agent-runtime.js +143 -0
  65. package/dist/src/server/agent-session-store.d.ts +7 -0
  66. package/dist/src/server/agent-session-store.js +45 -0
  67. package/dist/src/server/agent-startup-instructions.d.ts +20 -0
  68. package/dist/src/server/agent-startup-instructions.js +36 -0
  69. package/dist/src/server/agent-stdin-dispatcher.d.ts +52 -0
  70. package/dist/src/server/agent-stdin-dispatcher.js +224 -0
  71. package/dist/src/server/agent-tokens.d.ts +15 -0
  72. package/dist/src/server/agent-tokens.js +25 -0
  73. package/dist/src/server/app-state-store.d.ts +10 -0
  74. package/dist/src/server/app-state-store.js +12 -0
  75. package/dist/src/server/app.d.ts +20 -0
  76. package/dist/src/server/app.js +211 -0
  77. package/dist/src/server/claude-command-defaults.d.ts +1 -0
  78. package/dist/src/server/claude-command-defaults.js +5 -0
  79. package/dist/src/server/claude-session-coordinator.d.ts +10 -0
  80. package/dist/src/server/claude-session-coordinator.js +68 -0
  81. package/dist/src/server/claude-session-support.d.ts +1 -0
  82. package/dist/src/server/claude-session-support.js +1 -0
  83. package/dist/src/server/command-preset-defaults.d.ts +11 -0
  84. package/dist/src/server/command-preset-defaults.js +63 -0
  85. package/dist/src/server/command-preset-store.d.ts +49 -0
  86. package/dist/src/server/command-preset-store.js +83 -0
  87. package/dist/src/server/cron-util.d.ts +7 -0
  88. package/dist/src/server/cron-util.js +19 -0
  89. package/dist/src/server/dispatch-ledger-serializer.d.ts +15 -0
  90. package/dist/src/server/dispatch-ledger-serializer.js +14 -0
  91. package/dist/src/server/dispatch-ledger-store.d.ts +108 -0
  92. package/dist/src/server/dispatch-ledger-store.js +241 -0
  93. package/dist/src/server/env-sync-message.d.ts +9 -0
  94. package/dist/src/server/env-sync-message.js +29 -0
  95. package/dist/src/server/feature-flags.d.ts +42 -0
  96. package/dist/src/server/feature-flags.js +24 -0
  97. package/dist/src/server/fs-browse.d.ts +40 -0
  98. package/dist/src/server/fs-browse.js +306 -0
  99. package/dist/src/server/fs-pick-folder.d.ts +25 -0
  100. package/dist/src/server/fs-pick-folder.js +115 -0
  101. package/dist/src/server/fs-sandbox.d.ts +15 -0
  102. package/dist/src/server/fs-sandbox.js +56 -0
  103. package/dist/src/server/hive-team-guidance.d.ts +39 -0
  104. package/dist/src/server/hive-team-guidance.js +295 -0
  105. package/dist/src/server/http-errors.d.ts +22 -0
  106. package/dist/src/server/http-errors.js +44 -0
  107. package/dist/src/server/live-run-registry.d.ts +22 -0
  108. package/dist/src/server/live-run-registry.js +52 -0
  109. package/dist/src/server/local-request-guard.d.ts +3 -0
  110. package/dist/src/server/local-request-guard.js +41 -0
  111. package/dist/src/server/machine-name.d.ts +2 -0
  112. package/dist/src/server/machine-name.js +13 -0
  113. package/dist/src/server/marketplace-store.d.ts +38 -0
  114. package/dist/src/server/marketplace-store.js +85 -0
  115. package/dist/src/server/message-log-store.d.ts +51 -0
  116. package/dist/src/server/message-log-store.js +90 -0
  117. package/dist/src/server/open-target-commands.d.ts +54 -0
  118. package/dist/src/server/open-target-commands.js +204 -0
  119. package/dist/src/server/orchestrator-autostart.d.ts +42 -0
  120. package/dist/src/server/orchestrator-autostart.js +114 -0
  121. package/dist/src/server/orchestrator-launch.d.ts +24 -0
  122. package/dist/src/server/orchestrator-launch.js +71 -0
  123. package/dist/src/server/package-version.d.ts +17 -0
  124. package/dist/src/server/package-version.js +32 -0
  125. package/dist/src/server/path-canonicalization.d.ts +3 -0
  126. package/dist/src/server/path-canonicalization.js +29 -0
  127. package/dist/src/server/platform-path.d.ts +4 -0
  128. package/dist/src/server/platform-path.js +26 -0
  129. package/dist/src/server/post-start-input-writer.d.ts +6 -0
  130. package/dist/src/server/post-start-input-writer.js +242 -0
  131. package/dist/src/server/preset-launch-support.d.ts +6 -0
  132. package/dist/src/server/preset-launch-support.js +98 -0
  133. package/dist/src/server/pty-output-bus.d.ts +8 -0
  134. package/dist/src/server/pty-output-bus.js +32 -0
  135. package/dist/src/server/recovery-summary.d.ts +15 -0
  136. package/dist/src/server/recovery-summary.js +92 -0
  137. package/dist/src/server/remote-audit-store.d.ts +51 -0
  138. package/dist/src/server/remote-audit-store.js +108 -0
  139. package/dist/src/server/remote-config-keys.d.ts +17 -0
  140. package/dist/src/server/remote-config-keys.js +27 -0
  141. package/dist/src/server/remote-control-constants.d.ts +30 -0
  142. package/dist/src/server/remote-control-constants.js +29 -0
  143. package/dist/src/server/remote-device-session.d.ts +40 -0
  144. package/dist/src/server/remote-device-session.js +22 -0
  145. package/dist/src/server/remote-device-store.d.ts +36 -0
  146. package/dist/src/server/remote-device-store.js +67 -0
  147. package/dist/src/server/remote-frame-bridge.d.ts +102 -0
  148. package/dist/src/server/remote-frame-bridge.js +791 -0
  149. package/dist/src/server/remote-gateway-client.d.ts +14 -0
  150. package/dist/src/server/remote-gateway-client.js +36 -0
  151. package/dist/src/server/remote-loopback-auth.d.ts +6 -0
  152. package/dist/src/server/remote-loopback-auth.js +112 -0
  153. package/dist/src/server/remote-pairing-tunnel.d.ts +59 -0
  154. package/dist/src/server/remote-pairing-tunnel.js +146 -0
  155. package/dist/src/server/remote-pairing.d.ts +58 -0
  156. package/dist/src/server/remote-pairing.js +237 -0
  157. package/dist/src/server/remote-tunnel.d.ts +113 -0
  158. package/dist/src/server/remote-tunnel.js +514 -0
  159. package/dist/src/server/report-outbox-store.d.ts +36 -0
  160. package/dist/src/server/report-outbox-store.js +33 -0
  161. package/dist/src/server/restart-policy-support.d.ts +30 -0
  162. package/dist/src/server/restart-policy-support.js +21 -0
  163. package/dist/src/server/restart-policy.d.ts +18 -0
  164. package/dist/src/server/restart-policy.js +77 -0
  165. package/dist/src/server/role-template-store.d.ts +45 -0
  166. package/dist/src/server/role-template-store.js +76 -0
  167. package/dist/src/server/role-templates.d.ts +7 -0
  168. package/dist/src/server/role-templates.js +54 -0
  169. package/dist/src/server/route-helpers.d.ts +9 -0
  170. package/dist/src/server/route-helpers.js +61 -0
  171. package/dist/src/server/route-types.d.ts +121 -0
  172. package/dist/src/server/route-types.js +1 -0
  173. package/dist/src/server/routes-dispatches.d.ts +2 -0
  174. package/dist/src/server/routes-dispatches.js +54 -0
  175. package/dist/src/server/routes-fs.d.ts +2 -0
  176. package/dist/src/server/routes-fs.js +24 -0
  177. package/dist/src/server/routes-marketplace.d.ts +2 -0
  178. package/dist/src/server/routes-marketplace.js +54 -0
  179. package/dist/src/server/routes-open-workspace.d.ts +2 -0
  180. package/dist/src/server/routes-open-workspace.js +47 -0
  181. package/dist/src/server/routes-remote.d.ts +2 -0
  182. package/dist/src/server/routes-remote.js +166 -0
  183. package/dist/src/server/routes-runtime.d.ts +2 -0
  184. package/dist/src/server/routes-runtime.js +79 -0
  185. package/dist/src/server/routes-settings.d.ts +2 -0
  186. package/dist/src/server/routes-settings.js +213 -0
  187. package/dist/src/server/routes-tasks.d.ts +2 -0
  188. package/dist/src/server/routes-tasks.js +47 -0
  189. package/dist/src/server/routes-team-memory.d.ts +2 -0
  190. package/dist/src/server/routes-team-memory.js +154 -0
  191. package/dist/src/server/routes-team-recall.d.ts +2 -0
  192. package/dist/src/server/routes-team-recall.js +119 -0
  193. package/dist/src/server/routes-team.d.ts +2 -0
  194. package/dist/src/server/routes-team.js +351 -0
  195. package/dist/src/server/routes-ui.d.ts +2 -0
  196. package/dist/src/server/routes-ui.js +17 -0
  197. package/dist/src/server/routes-version.d.ts +2 -0
  198. package/dist/src/server/routes-version.js +6 -0
  199. package/dist/src/server/routes-workflow-schedules.d.ts +2 -0
  200. package/dist/src/server/routes-workflow-schedules.js +58 -0
  201. package/dist/src/server/routes-workflows.d.ts +2 -0
  202. package/dist/src/server/routes-workflows.js +83 -0
  203. package/dist/src/server/routes-workspace-memory-dreams.d.ts +2 -0
  204. package/dist/src/server/routes-workspace-memory-dreams.js +105 -0
  205. package/dist/src/server/routes-workspace-memory.d.ts +2 -0
  206. package/dist/src/server/routes-workspace-memory.js +215 -0
  207. package/dist/src/server/routes-workspaces.d.ts +2 -0
  208. package/dist/src/server/routes-workspaces.js +177 -0
  209. package/dist/src/server/routes.d.ts +6 -0
  210. package/dist/src/server/routes.js +55 -0
  211. package/dist/src/server/runtime-database.d.ts +3 -0
  212. package/dist/src/server/runtime-database.js +41 -0
  213. package/dist/src/server/runtime-message-builders.d.ts +7 -0
  214. package/dist/src/server/runtime-message-builders.js +60 -0
  215. package/dist/src/server/runtime-restart-policy.d.ts +18 -0
  216. package/dist/src/server/runtime-restart-policy.js +12 -0
  217. package/dist/src/server/runtime-store-contract.d.ts +162 -0
  218. package/dist/src/server/runtime-store-contract.js +1 -0
  219. package/dist/src/server/runtime-store-dream.d.ts +23 -0
  220. package/dist/src/server/runtime-store-dream.js +16 -0
  221. package/dist/src/server/runtime-store-helpers.d.ts +115 -0
  222. package/dist/src/server/runtime-store-helpers.js +411 -0
  223. package/dist/src/server/runtime-store-memory.d.ts +33 -0
  224. package/dist/src/server/runtime-store-memory.js +37 -0
  225. package/dist/src/server/runtime-store-remote.d.ts +5 -0
  226. package/dist/src/server/runtime-store-remote.js +45 -0
  227. package/dist/src/server/runtime-store-workflows.d.ts +6 -0
  228. package/dist/src/server/runtime-store-workflows.js +108 -0
  229. package/dist/src/server/runtime-store.d.ts +4 -0
  230. package/dist/src/server/runtime-store.js +165 -0
  231. package/dist/src/server/session-capture-claude.d.ts +34 -0
  232. package/dist/src/server/session-capture-claude.js +103 -0
  233. package/dist/src/server/session-capture-codex.d.ts +6 -0
  234. package/dist/src/server/session-capture-codex.js +108 -0
  235. package/dist/src/server/session-capture-gemini.d.ts +5 -0
  236. package/dist/src/server/session-capture-gemini.js +81 -0
  237. package/dist/src/server/session-capture-opencode.d.ts +22 -0
  238. package/dist/src/server/session-capture-opencode.js +75 -0
  239. package/dist/src/server/session-capture.d.ts +77 -0
  240. package/dist/src/server/session-capture.js +123 -0
  241. package/dist/src/server/settings-store.d.ts +22 -0
  242. package/dist/src/server/settings-store.js +22 -0
  243. package/dist/src/server/sqlite-schema-v10.d.ts +2 -0
  244. package/dist/src/server/sqlite-schema-v10.js +13 -0
  245. package/dist/src/server/sqlite-schema-v11.d.ts +2 -0
  246. package/dist/src/server/sqlite-schema-v11.js +10 -0
  247. package/dist/src/server/sqlite-schema-v12.d.ts +2 -0
  248. package/dist/src/server/sqlite-schema-v12.js +21 -0
  249. package/dist/src/server/sqlite-schema-v13.d.ts +2 -0
  250. package/dist/src/server/sqlite-schema-v13.js +4 -0
  251. package/dist/src/server/sqlite-schema-v14.d.ts +2 -0
  252. package/dist/src/server/sqlite-schema-v14.js +84 -0
  253. package/dist/src/server/sqlite-schema-v15.d.ts +2 -0
  254. package/dist/src/server/sqlite-schema-v15.js +73 -0
  255. package/dist/src/server/sqlite-schema-v16.d.ts +2 -0
  256. package/dist/src/server/sqlite-schema-v16.js +6 -0
  257. package/dist/src/server/sqlite-schema-v17.d.ts +2 -0
  258. package/dist/src/server/sqlite-schema-v17.js +15 -0
  259. package/dist/src/server/sqlite-schema-v18.d.ts +2 -0
  260. package/dist/src/server/sqlite-schema-v18.js +6 -0
  261. package/dist/src/server/sqlite-schema-v19.d.ts +2 -0
  262. package/dist/src/server/sqlite-schema-v19.js +17 -0
  263. package/dist/src/server/sqlite-schema-v20.d.ts +2 -0
  264. package/dist/src/server/sqlite-schema-v20.js +20 -0
  265. package/dist/src/server/sqlite-schema-v21.d.ts +2 -0
  266. package/dist/src/server/sqlite-schema-v21.js +20 -0
  267. package/dist/src/server/sqlite-schema-v22.d.ts +2 -0
  268. package/dist/src/server/sqlite-schema-v22.js +27 -0
  269. package/dist/src/server/sqlite-schema-v23.d.ts +2 -0
  270. package/dist/src/server/sqlite-schema-v23.js +43 -0
  271. package/dist/src/server/sqlite-schema-v24.d.ts +2 -0
  272. package/dist/src/server/sqlite-schema-v24.js +34 -0
  273. package/dist/src/server/sqlite-schema-v25.d.ts +2 -0
  274. package/dist/src/server/sqlite-schema-v25.js +127 -0
  275. package/dist/src/server/sqlite-schema-v26.d.ts +2 -0
  276. package/dist/src/server/sqlite-schema-v26.js +56 -0
  277. package/dist/src/server/sqlite-schema-v27.d.ts +6 -0
  278. package/dist/src/server/sqlite-schema-v27.js +92 -0
  279. package/dist/src/server/sqlite-schema-v28.d.ts +2 -0
  280. package/dist/src/server/sqlite-schema-v28.js +19 -0
  281. package/dist/src/server/sqlite-schema-v5.d.ts +2 -0
  282. package/dist/src/server/sqlite-schema-v5.js +61 -0
  283. package/dist/src/server/sqlite-schema-v7.d.ts +2 -0
  284. package/dist/src/server/sqlite-schema-v7.js +70 -0
  285. package/dist/src/server/sqlite-schema-v8.d.ts +2 -0
  286. package/dist/src/server/sqlite-schema-v8.js +6 -0
  287. package/dist/src/server/sqlite-schema-v9.d.ts +2 -0
  288. package/dist/src/server/sqlite-schema-v9.js +6 -0
  289. package/dist/src/server/sqlite-schema.d.ts +3 -0
  290. package/dist/src/server/sqlite-schema.js +353 -0
  291. package/dist/src/server/startup-command-parser.d.ts +20 -0
  292. package/dist/src/server/startup-command-parser.js +72 -0
  293. package/dist/src/server/system-message.d.ts +8 -0
  294. package/dist/src/server/system-message.js +8 -0
  295. package/dist/src/server/task-deps.d.ts +32 -0
  296. package/dist/src/server/task-deps.js +40 -0
  297. package/dist/src/server/tasks-file-watcher.d.ts +47 -0
  298. package/dist/src/server/tasks-file-watcher.js +200 -0
  299. package/dist/src/server/tasks-file.d.ts +23 -0
  300. package/dist/src/server/tasks-file.js +101 -0
  301. package/dist/src/server/tasks-websocket-server.d.ts +8 -0
  302. package/dist/src/server/tasks-websocket-server.js +95 -0
  303. package/dist/src/server/team-authz.d.ts +13 -0
  304. package/dist/src/server/team-authz.js +53 -0
  305. package/dist/src/server/team-autostaff.d.ts +16 -0
  306. package/dist/src/server/team-autostaff.js +16 -0
  307. package/dist/src/server/team-list-enrichment.d.ts +22 -0
  308. package/dist/src/server/team-list-enrichment.js +40 -0
  309. package/dist/src/server/team-list-serializer.d.ts +2 -0
  310. package/dist/src/server/team-list-serializer.js +11 -0
  311. package/dist/src/server/team-memory-digest.d.ts +52 -0
  312. package/dist/src/server/team-memory-digest.js +200 -0
  313. package/dist/src/server/team-memory-dream-applier.d.ts +5 -0
  314. package/dist/src/server/team-memory-dream-applier.js +234 -0
  315. package/dist/src/server/team-memory-dream-http-serializers.d.ts +13 -0
  316. package/dist/src/server/team-memory-dream-http-serializers.js +12 -0
  317. package/dist/src/server/team-memory-dream-ops.d.ts +40 -0
  318. package/dist/src/server/team-memory-dream-ops.js +153 -0
  319. package/dist/src/server/team-memory-dream-reverter.d.ts +22 -0
  320. package/dist/src/server/team-memory-dream-reverter.js +221 -0
  321. package/dist/src/server/team-memory-dream-run-store.d.ts +23 -0
  322. package/dist/src/server/team-memory-dream-run-store.js +211 -0
  323. package/dist/src/server/team-memory-dream-runner.d.ts +37 -0
  324. package/dist/src/server/team-memory-dream-runner.js +178 -0
  325. package/dist/src/server/team-memory-dream-scheduler.d.ts +32 -0
  326. package/dist/src/server/team-memory-dream-scheduler.js +115 -0
  327. package/dist/src/server/team-memory-dream-store.d.ts +19 -0
  328. package/dist/src/server/team-memory-dream-store.js +16 -0
  329. package/dist/src/server/team-memory-dream-types.d.ts +104 -0
  330. package/dist/src/server/team-memory-dream-types.js +23 -0
  331. package/dist/src/server/team-memory-export.d.ts +22 -0
  332. package/dist/src/server/team-memory-export.js +220 -0
  333. package/dist/src/server/team-memory-feature.d.ts +12 -0
  334. package/dist/src/server/team-memory-feature.js +12 -0
  335. package/dist/src/server/team-memory-http-serializers.d.ts +102 -0
  336. package/dist/src/server/team-memory-http-serializers.js +46 -0
  337. package/dist/src/server/team-memory-injection.d.ts +31 -0
  338. package/dist/src/server/team-memory-injection.js +49 -0
  339. package/dist/src/server/team-memory-store.d.ts +116 -0
  340. package/dist/src/server/team-memory-store.js +513 -0
  341. package/dist/src/server/team-operations.d.ts +102 -0
  342. package/dist/src/server/team-operations.js +387 -0
  343. package/dist/src/server/team-recall-store.d.ts +38 -0
  344. package/dist/src/server/team-recall-store.js +205 -0
  345. package/dist/src/server/terminal-flow-control.d.ts +19 -0
  346. package/dist/src/server/terminal-flow-control.js +116 -0
  347. package/dist/src/server/terminal-input-profile.d.ts +10 -0
  348. package/dist/src/server/terminal-input-profile.js +9 -0
  349. package/dist/src/server/terminal-protocol.d.ts +29 -0
  350. package/dist/src/server/terminal-protocol.js +47 -0
  351. package/dist/src/server/terminal-state-mirror.d.ts +21 -0
  352. package/dist/src/server/terminal-state-mirror.js +67 -0
  353. package/dist/src/server/terminal-stream-hub.d.ts +9 -0
  354. package/dist/src/server/terminal-stream-hub.js +192 -0
  355. package/dist/src/server/terminal-ws-server.d.ts +6 -0
  356. package/dist/src/server/terminal-ws-server.js +115 -0
  357. package/dist/src/server/ui-auth-helpers.d.ts +4 -0
  358. package/dist/src/server/ui-auth-helpers.js +28 -0
  359. package/dist/src/server/ui-auth.d.ts +8 -0
  360. package/dist/src/server/ui-auth.js +32 -0
  361. package/dist/src/server/version-service.d.ts +16 -0
  362. package/dist/src/server/version-service.js +72 -0
  363. package/dist/src/server/webhook-notifier.d.ts +34 -0
  364. package/dist/src/server/webhook-notifier.js +47 -0
  365. package/dist/src/server/websocket-upgrade-safety.d.ts +10 -0
  366. package/dist/src/server/websocket-upgrade-safety.js +35 -0
  367. package/dist/src/server/windows-command-line.d.ts +3 -0
  368. package/dist/src/server/windows-command-line.js +9 -0
  369. package/dist/src/server/windows-filename.d.ts +2 -0
  370. package/dist/src/server/windows-filename.js +33 -0
  371. package/dist/src/server/worker-output-tracker.d.ts +14 -0
  372. package/dist/src/server/worker-output-tracker.js +50 -0
  373. package/dist/src/server/workflow-cli-policy.d.ts +60 -0
  374. package/dist/src/server/workflow-cli-policy.js +110 -0
  375. package/dist/src/server/workflow-dispatch-awaiter.d.ts +12 -0
  376. package/dist/src/server/workflow-dispatch-awaiter.js +80 -0
  377. package/dist/src/server/workflow-feature.d.ts +15 -0
  378. package/dist/src/server/workflow-feature.js +15 -0
  379. package/dist/src/server/workflow-http-serializers.d.ts +64 -0
  380. package/dist/src/server/workflow-http-serializers.js +58 -0
  381. package/dist/src/server/workflow-output-schema.d.ts +18 -0
  382. package/dist/src/server/workflow-output-schema.js +41 -0
  383. package/dist/src/server/workflow-run-log-store.d.ts +19 -0
  384. package/dist/src/server/workflow-run-log-store.js +45 -0
  385. package/dist/src/server/workflow-run-store.d.ts +50 -0
  386. package/dist/src/server/workflow-run-store.js +103 -0
  387. package/dist/src/server/workflow-runner.d.ts +147 -0
  388. package/dist/src/server/workflow-runner.js +411 -0
  389. package/dist/src/server/workflow-schedule-create.d.ts +14 -0
  390. package/dist/src/server/workflow-schedule-create.js +41 -0
  391. package/dist/src/server/workflow-schedule-store.d.ts +43 -0
  392. package/dist/src/server/workflow-schedule-store.js +112 -0
  393. package/dist/src/server/workflow-scheduler.d.ts +36 -0
  394. package/dist/src/server/workflow-scheduler.js +97 -0
  395. package/dist/src/server/workflow-script-loader.d.ts +34 -0
  396. package/dist/src/server/workflow-script-loader.js +106 -0
  397. package/dist/src/server/workspace-path-validation.d.ts +1 -0
  398. package/dist/src/server/workspace-path-validation.js +42 -0
  399. package/dist/src/server/workspace-shell-runtime.d.ts +35 -0
  400. package/dist/src/server/workspace-shell-runtime.js +228 -0
  401. package/dist/src/server/workspace-store-contract.d.ts +32 -0
  402. package/dist/src/server/workspace-store-contract.js +1 -0
  403. package/dist/src/server/workspace-store-hydration.d.ts +5 -0
  404. package/dist/src/server/workspace-store-hydration.js +76 -0
  405. package/dist/src/server/workspace-store-mutations.d.ts +14 -0
  406. package/dist/src/server/workspace-store-mutations.js +48 -0
  407. package/dist/src/server/workspace-store-support.d.ts +33 -0
  408. package/dist/src/server/workspace-store-support.js +36 -0
  409. package/dist/src/server/workspace-store.d.ts +5 -0
  410. package/dist/src/server/workspace-store.js +153 -0
  411. package/dist/src/shared/fs-browse.d.ts +1 -0
  412. package/dist/src/shared/fs-browse.js +1 -0
  413. package/dist/src/shared/open-targets.d.ts +20 -0
  414. package/dist/src/shared/open-targets.js +36 -0
  415. package/dist/src/shared/path-input.d.ts +12 -0
  416. package/dist/src/shared/path-input.js +22 -0
  417. package/dist/src/shared/remote-bridge-routing.d.ts +19 -0
  418. package/dist/src/shared/remote-bridge-routing.js +141 -0
  419. package/dist/src/shared/remote-crypto.d.ts +138 -0
  420. package/dist/src/shared/remote-crypto.js +427 -0
  421. package/dist/src/shared/remote-pairing-code.d.ts +7 -0
  422. package/dist/src/shared/remote-pairing-code.js +47 -0
  423. package/dist/src/shared/remote-protocol.d.ts +160 -0
  424. package/dist/src/shared/remote-protocol.js +526 -0
  425. package/dist/src/shared/team-memory.d.ts +11 -0
  426. package/dist/src/shared/team-memory.js +10 -0
  427. package/dist/src/shared/team-recall.d.ts +1 -0
  428. package/dist/src/shared/team-recall.js +1 -0
  429. package/dist/src/shared/types.d.ts +66 -0
  430. package/dist/src/shared/types.js +1 -0
  431. package/dist/vendor/marketplace/en/LICENSE +21 -0
  432. package/dist/vendor/marketplace/en/SOURCES.md +12 -0
  433. package/dist/vendor/marketplace/en/academic/academic-anthropologist.md +125 -0
  434. package/dist/vendor/marketplace/en/academic/academic-geographer.md +127 -0
  435. package/dist/vendor/marketplace/en/academic/academic-historian.md +123 -0
  436. package/dist/vendor/marketplace/en/academic/academic-narratologist.md +118 -0
  437. package/dist/vendor/marketplace/en/academic/academic-psychologist.md +118 -0
  438. package/dist/vendor/marketplace/en/design/design-brand-guardian.md +322 -0
  439. package/dist/vendor/marketplace/en/design/design-image-prompt-engineer.md +236 -0
  440. package/dist/vendor/marketplace/en/design/design-inclusive-visuals-specialist.md +71 -0
  441. package/dist/vendor/marketplace/en/design/design-ui-designer.md +383 -0
  442. package/dist/vendor/marketplace/en/design/design-ux-architect.md +469 -0
  443. package/dist/vendor/marketplace/en/design/design-ux-researcher.md +329 -0
  444. package/dist/vendor/marketplace/en/design/design-visual-storyteller.md +149 -0
  445. package/dist/vendor/marketplace/en/design/design-whimsy-injector.md +438 -0
  446. package/dist/vendor/marketplace/en/engineering/engineering-ai-data-remediation-engineer.md +211 -0
  447. package/dist/vendor/marketplace/en/engineering/engineering-ai-engineer.md +146 -0
  448. package/dist/vendor/marketplace/en/engineering/engineering-autonomous-optimization-architect.md +107 -0
  449. package/dist/vendor/marketplace/en/engineering/engineering-backend-architect.md +235 -0
  450. package/dist/vendor/marketplace/en/engineering/engineering-cms-developer.md +536 -0
  451. package/dist/vendor/marketplace/en/engineering/engineering-code-reviewer.md +76 -0
  452. package/dist/vendor/marketplace/en/engineering/engineering-codebase-onboarding-engineer.md +173 -0
  453. package/dist/vendor/marketplace/en/engineering/engineering-data-engineer.md +306 -0
  454. package/dist/vendor/marketplace/en/engineering/engineering-database-optimizer.md +176 -0
  455. package/dist/vendor/marketplace/en/engineering/engineering-devops-automator.md +376 -0
  456. package/dist/vendor/marketplace/en/engineering/engineering-email-intelligence-engineer.md +353 -0
  457. package/dist/vendor/marketplace/en/engineering/engineering-embedded-firmware-engineer.md +173 -0
  458. package/dist/vendor/marketplace/en/engineering/engineering-feishu-integration-developer.md +598 -0
  459. package/dist/vendor/marketplace/en/engineering/engineering-filament-optimization-specialist.md +283 -0
  460. package/dist/vendor/marketplace/en/engineering/engineering-frontend-developer.md +225 -0
  461. package/dist/vendor/marketplace/en/engineering/engineering-git-workflow-master.md +84 -0
  462. package/dist/vendor/marketplace/en/engineering/engineering-incident-response-commander.md +444 -0
  463. package/dist/vendor/marketplace/en/engineering/engineering-minimal-change-engineer.md +207 -0
  464. package/dist/vendor/marketplace/en/engineering/engineering-mobile-app-builder.md +493 -0
  465. package/dist/vendor/marketplace/en/engineering/engineering-rapid-prototyper.md +462 -0
  466. package/dist/vendor/marketplace/en/engineering/engineering-security-engineer.md +304 -0
  467. package/dist/vendor/marketplace/en/engineering/engineering-senior-developer.md +176 -0
  468. package/dist/vendor/marketplace/en/engineering/engineering-software-architect.md +81 -0
  469. package/dist/vendor/marketplace/en/engineering/engineering-solidity-smart-contract-engineer.md +522 -0
  470. package/dist/vendor/marketplace/en/engineering/engineering-sre.md +90 -0
  471. package/dist/vendor/marketplace/en/engineering/engineering-technical-writer.md +393 -0
  472. package/dist/vendor/marketplace/en/engineering/engineering-threat-detection-engineer.md +534 -0
  473. package/dist/vendor/marketplace/en/engineering/engineering-voice-ai-integration-engineer.md +561 -0
  474. package/dist/vendor/marketplace/en/engineering/engineering-wechat-mini-program-developer.md +350 -0
  475. package/dist/vendor/marketplace/en/finance/finance-bookkeeper-controller.md +260 -0
  476. package/dist/vendor/marketplace/en/finance/finance-financial-analyst.md +234 -0
  477. package/dist/vendor/marketplace/en/finance/finance-fpa-analyst.md +263 -0
  478. package/dist/vendor/marketplace/en/finance/finance-investment-researcher.md +272 -0
  479. package/dist/vendor/marketplace/en/finance/finance-tax-strategist.md +239 -0
  480. package/dist/vendor/marketplace/en/game-development/blender/blender-addon-engineer.md +234 -0
  481. package/dist/vendor/marketplace/en/game-development/game-audio-engineer.md +264 -0
  482. package/dist/vendor/marketplace/en/game-development/game-designer.md +167 -0
  483. package/dist/vendor/marketplace/en/game-development/godot/godot-gameplay-scripter.md +334 -0
  484. package/dist/vendor/marketplace/en/game-development/godot/godot-multiplayer-engineer.md +297 -0
  485. package/dist/vendor/marketplace/en/game-development/godot/godot-shader-developer.md +266 -0
  486. package/dist/vendor/marketplace/en/game-development/level-designer.md +208 -0
  487. package/dist/vendor/marketplace/en/game-development/narrative-designer.md +243 -0
  488. package/dist/vendor/marketplace/en/game-development/roblox-studio/roblox-avatar-creator.md +297 -0
  489. package/dist/vendor/marketplace/en/game-development/roblox-studio/roblox-experience-designer.md +305 -0
  490. package/dist/vendor/marketplace/en/game-development/roblox-studio/roblox-systems-scripter.md +325 -0
  491. package/dist/vendor/marketplace/en/game-development/technical-artist.md +229 -0
  492. package/dist/vendor/marketplace/en/game-development/unity/unity-architect.md +271 -0
  493. package/dist/vendor/marketplace/en/game-development/unity/unity-editor-tool-developer.md +310 -0
  494. package/dist/vendor/marketplace/en/game-development/unity/unity-multiplayer-engineer.md +321 -0
  495. package/dist/vendor/marketplace/en/game-development/unity/unity-shader-graph-artist.md +269 -0
  496. package/dist/vendor/marketplace/en/game-development/unreal-engine/unreal-multiplayer-architect.md +313 -0
  497. package/dist/vendor/marketplace/en/game-development/unreal-engine/unreal-systems-engineer.md +310 -0
  498. package/dist/vendor/marketplace/en/game-development/unreal-engine/unreal-technical-artist.md +256 -0
  499. package/dist/vendor/marketplace/en/game-development/unreal-engine/unreal-world-builder.md +273 -0
  500. package/dist/vendor/marketplace/en/integrations/mcp-memory/backend-architect-with-memory.md +247 -0
  501. package/dist/vendor/marketplace/en/manifest.json +1869 -0
  502. package/dist/vendor/marketplace/en/marketing/marketing-agentic-search-optimizer.md +311 -0
  503. package/dist/vendor/marketplace/en/marketing/marketing-ai-citation-strategist.md +170 -0
  504. package/dist/vendor/marketplace/en/marketing/marketing-app-store-optimizer.md +321 -0
  505. package/dist/vendor/marketplace/en/marketing/marketing-baidu-seo-specialist.md +226 -0
  506. package/dist/vendor/marketplace/en/marketing/marketing-bilibili-content-strategist.md +199 -0
  507. package/dist/vendor/marketplace/en/marketing/marketing-book-co-author.md +110 -0
  508. package/dist/vendor/marketplace/en/marketing/marketing-carousel-growth-engine.md +199 -0
  509. package/dist/vendor/marketplace/en/marketing/marketing-china-ecommerce-operator.md +283 -0
  510. package/dist/vendor/marketplace/en/marketing/marketing-china-market-localization-strategist.md +283 -0
  511. package/dist/vendor/marketplace/en/marketing/marketing-content-creator.md +54 -0
  512. package/dist/vendor/marketplace/en/marketing/marketing-cross-border-ecommerce.md +259 -0
  513. package/dist/vendor/marketplace/en/marketing/marketing-douyin-strategist.md +149 -0
  514. package/dist/vendor/marketplace/en/marketing/marketing-growth-hacker.md +54 -0
  515. package/dist/vendor/marketplace/en/marketing/marketing-instagram-curator.md +113 -0
  516. package/dist/vendor/marketplace/en/marketing/marketing-kuaishou-strategist.md +223 -0
  517. package/dist/vendor/marketplace/en/marketing/marketing-linkedin-content-creator.md +214 -0
  518. package/dist/vendor/marketplace/en/marketing/marketing-livestream-commerce-coach.md +305 -0
  519. package/dist/vendor/marketplace/en/marketing/marketing-podcast-strategist.md +277 -0
  520. package/dist/vendor/marketplace/en/marketing/marketing-private-domain-operator.md +308 -0
  521. package/dist/vendor/marketplace/en/marketing/marketing-reddit-community-builder.md +123 -0
  522. package/dist/vendor/marketplace/en/marketing/marketing-seo-specialist.md +321 -0
  523. package/dist/vendor/marketplace/en/marketing/marketing-short-video-editing-coach.md +412 -0
  524. package/dist/vendor/marketplace/en/marketing/marketing-social-media-strategist.md +125 -0
  525. package/dist/vendor/marketplace/en/marketing/marketing-tiktok-strategist.md +125 -0
  526. package/dist/vendor/marketplace/en/marketing/marketing-twitter-engager.md +126 -0
  527. package/dist/vendor/marketplace/en/marketing/marketing-video-optimization-specialist.md +119 -0
  528. package/dist/vendor/marketplace/en/marketing/marketing-wechat-official-account.md +145 -0
  529. package/dist/vendor/marketplace/en/marketing/marketing-weibo-strategist.md +240 -0
  530. package/dist/vendor/marketplace/en/marketing/marketing-xiaohongshu-specialist.md +138 -0
  531. package/dist/vendor/marketplace/en/marketing/marketing-zhihu-strategist.md +162 -0
  532. package/dist/vendor/marketplace/en/paid-media/paid-media-auditor.md +71 -0
  533. package/dist/vendor/marketplace/en/paid-media/paid-media-creative-strategist.md +71 -0
  534. package/dist/vendor/marketplace/en/paid-media/paid-media-paid-social-strategist.md +71 -0
  535. package/dist/vendor/marketplace/en/paid-media/paid-media-ppc-strategist.md +71 -0
  536. package/dist/vendor/marketplace/en/paid-media/paid-media-programmatic-buyer.md +71 -0
  537. package/dist/vendor/marketplace/en/paid-media/paid-media-search-query-analyst.md +71 -0
  538. package/dist/vendor/marketplace/en/paid-media/paid-media-tracking-specialist.md +71 -0
  539. package/dist/vendor/marketplace/en/product/product-behavioral-nudge-engine.md +80 -0
  540. package/dist/vendor/marketplace/en/product/product-feedback-synthesizer.md +119 -0
  541. package/dist/vendor/marketplace/en/product/product-manager.md +469 -0
  542. package/dist/vendor/marketplace/en/product/product-sprint-prioritizer.md +154 -0
  543. package/dist/vendor/marketplace/en/product/product-trend-researcher.md +159 -0
  544. package/dist/vendor/marketplace/en/project-management/project-management-experiment-tracker.md +198 -0
  545. package/dist/vendor/marketplace/en/project-management/project-management-jira-workflow-steward.md +230 -0
  546. package/dist/vendor/marketplace/en/project-management/project-management-project-shepherd.md +194 -0
  547. package/dist/vendor/marketplace/en/project-management/project-management-studio-operations.md +200 -0
  548. package/dist/vendor/marketplace/en/project-management/project-management-studio-producer.md +203 -0
  549. package/dist/vendor/marketplace/en/project-management/project-manager-senior.md +135 -0
  550. package/dist/vendor/marketplace/en/sales/sales-account-strategist.md +227 -0
  551. package/dist/vendor/marketplace/en/sales/sales-coach.md +271 -0
  552. package/dist/vendor/marketplace/en/sales/sales-deal-strategist.md +180 -0
  553. package/dist/vendor/marketplace/en/sales/sales-discovery-coach.md +225 -0
  554. package/dist/vendor/marketplace/en/sales/sales-engineer.md +182 -0
  555. package/dist/vendor/marketplace/en/sales/sales-outbound-strategist.md +201 -0
  556. package/dist/vendor/marketplace/en/sales/sales-pipeline-analyst.md +267 -0
  557. package/dist/vendor/marketplace/en/sales/sales-proposal-strategist.md +217 -0
  558. package/dist/vendor/marketplace/en/spatial-computing/macos-spatial-metal-engineer.md +337 -0
  559. package/dist/vendor/marketplace/en/spatial-computing/terminal-integration-specialist.md +70 -0
  560. package/dist/vendor/marketplace/en/spatial-computing/visionos-spatial-engineer.md +54 -0
  561. package/dist/vendor/marketplace/en/spatial-computing/xr-cockpit-interaction-specialist.md +32 -0
  562. package/dist/vendor/marketplace/en/spatial-computing/xr-immersive-developer.md +32 -0
  563. package/dist/vendor/marketplace/en/spatial-computing/xr-interface-architect.md +32 -0
  564. package/dist/vendor/marketplace/en/specialized/accounts-payable-agent.md +185 -0
  565. package/dist/vendor/marketplace/en/specialized/agentic-identity-trust.md +387 -0
  566. package/dist/vendor/marketplace/en/specialized/agents-orchestrator.md +367 -0
  567. package/dist/vendor/marketplace/en/specialized/automation-governance-architect.md +216 -0
  568. package/dist/vendor/marketplace/en/specialized/blockchain-security-auditor.md +463 -0
  569. package/dist/vendor/marketplace/en/specialized/compliance-auditor.md +158 -0
  570. package/dist/vendor/marketplace/en/specialized/corporate-training-designer.md +192 -0
  571. package/dist/vendor/marketplace/en/specialized/customer-service.md +398 -0
  572. package/dist/vendor/marketplace/en/specialized/data-consolidation-agent.md +60 -0
  573. package/dist/vendor/marketplace/en/specialized/government-digital-presales-consultant.md +363 -0
  574. package/dist/vendor/marketplace/en/specialized/healthcare-customer-service.md +389 -0
  575. package/dist/vendor/marketplace/en/specialized/healthcare-marketing-compliance.md +395 -0
  576. package/dist/vendor/marketplace/en/specialized/hospitality-guest-services.md +603 -0
  577. package/dist/vendor/marketplace/en/specialized/hr-onboarding.md +451 -0
  578. package/dist/vendor/marketplace/en/specialized/identity-graph-operator.md +260 -0
  579. package/dist/vendor/marketplace/en/specialized/language-translator.md +264 -0
  580. package/dist/vendor/marketplace/en/specialized/legal-billing-time-tracking.md +569 -0
  581. package/dist/vendor/marketplace/en/specialized/legal-client-intake.md +492 -0
  582. package/dist/vendor/marketplace/en/specialized/legal-document-review.md +454 -0
  583. package/dist/vendor/marketplace/en/specialized/loan-officer-assistant.md +555 -0
  584. package/dist/vendor/marketplace/en/specialized/lsp-index-engineer.md +314 -0
  585. package/dist/vendor/marketplace/en/specialized/real-estate-buyer-seller.md +596 -0
  586. package/dist/vendor/marketplace/en/specialized/recruitment-specialist.md +509 -0
  587. package/dist/vendor/marketplace/en/specialized/report-distribution-agent.md +65 -0
  588. package/dist/vendor/marketplace/en/specialized/retail-customer-returns.md +566 -0
  589. package/dist/vendor/marketplace/en/specialized/sales-data-extraction-agent.md +67 -0
  590. package/dist/vendor/marketplace/en/specialized/sales-outreach.md +425 -0
  591. package/dist/vendor/marketplace/en/specialized/specialized-chief-of-staff.md +279 -0
  592. package/dist/vendor/marketplace/en/specialized/specialized-civil-engineer.md +356 -0
  593. package/dist/vendor/marketplace/en/specialized/specialized-cultural-intelligence-strategist.md +88 -0
  594. package/dist/vendor/marketplace/en/specialized/specialized-developer-advocate.md +317 -0
  595. package/dist/vendor/marketplace/en/specialized/specialized-document-generator.md +55 -0
  596. package/dist/vendor/marketplace/en/specialized/specialized-french-consulting-market.md +192 -0
  597. package/dist/vendor/marketplace/en/specialized/specialized-korean-business-navigator.md +216 -0
  598. package/dist/vendor/marketplace/en/specialized/specialized-mcp-builder.md +248 -0
  599. package/dist/vendor/marketplace/en/specialized/specialized-model-qa.md +488 -0
  600. package/dist/vendor/marketplace/en/specialized/specialized-salesforce-architect.md +180 -0
  601. package/dist/vendor/marketplace/en/specialized/specialized-workflow-architect.md +597 -0
  602. package/dist/vendor/marketplace/en/specialized/study-abroad-advisor.md +282 -0
  603. package/dist/vendor/marketplace/en/specialized/supply-chain-strategist.md +582 -0
  604. package/dist/vendor/marketplace/en/support/support-analytics-reporter.md +365 -0
  605. package/dist/vendor/marketplace/en/support/support-executive-summary-generator.md +212 -0
  606. package/dist/vendor/marketplace/en/support/support-finance-tracker.md +442 -0
  607. package/dist/vendor/marketplace/en/support/support-infrastructure-maintainer.md +618 -0
  608. package/dist/vendor/marketplace/en/support/support-legal-compliance-checker.md +588 -0
  609. package/dist/vendor/marketplace/en/support/support-support-responder.md +585 -0
  610. package/dist/vendor/marketplace/en/testing/testing-accessibility-auditor.md +316 -0
  611. package/dist/vendor/marketplace/en/testing/testing-api-tester.md +306 -0
  612. package/dist/vendor/marketplace/en/testing/testing-evidence-collector.md +210 -0
  613. package/dist/vendor/marketplace/en/testing/testing-performance-benchmarker.md +268 -0
  614. package/dist/vendor/marketplace/en/testing/testing-reality-checker.md +236 -0
  615. package/dist/vendor/marketplace/en/testing/testing-test-results-analyzer.md +305 -0
  616. package/dist/vendor/marketplace/en/testing/testing-tool-evaluator.md +394 -0
  617. package/dist/vendor/marketplace/en/testing/testing-workflow-optimizer.md +450 -0
  618. package/dist/vendor/marketplace/zh/LICENSE +22 -0
  619. package/dist/vendor/marketplace/zh/SOURCES.md +12 -0
  620. package/dist/vendor/marketplace/zh/academic/academic-anthropologist.md +124 -0
  621. package/dist/vendor/marketplace/zh/academic/academic-geographer.md +126 -0
  622. package/dist/vendor/marketplace/zh/academic/academic-historian.md +122 -0
  623. package/dist/vendor/marketplace/zh/academic/academic-narratologist.md +117 -0
  624. package/dist/vendor/marketplace/zh/academic/academic-psychologist.md +117 -0
  625. package/dist/vendor/marketplace/zh/academic/academic-study-planner.md +214 -0
  626. package/dist/vendor/marketplace/zh/design/design-brand-guardian.md +321 -0
  627. package/dist/vendor/marketplace/zh/design/design-image-prompt-engineer.md +255 -0
  628. package/dist/vendor/marketplace/zh/design/design-inclusive-visuals-specialist.md +177 -0
  629. package/dist/vendor/marketplace/zh/design/design-ui-designer.md +382 -0
  630. package/dist/vendor/marketplace/zh/design/design-ux-architect.md +482 -0
  631. package/dist/vendor/marketplace/zh/design/design-ux-researcher.md +328 -0
  632. package/dist/vendor/marketplace/zh/design/design-visual-storyteller.md +159 -0
  633. package/dist/vendor/marketplace/zh/design/design-whimsy-injector.md +453 -0
  634. package/dist/vendor/marketplace/zh/engineering/engineering-ai-data-remediation-engineer.md +209 -0
  635. package/dist/vendor/marketplace/zh/engineering/engineering-ai-engineer.md +161 -0
  636. package/dist/vendor/marketplace/zh/engineering/engineering-autonomous-optimization-architect.md +115 -0
  637. package/dist/vendor/marketplace/zh/engineering/engineering-backend-architect.md +234 -0
  638. package/dist/vendor/marketplace/zh/engineering/engineering-cms-developer.md +534 -0
  639. package/dist/vendor/marketplace/zh/engineering/engineering-code-reviewer.md +172 -0
  640. package/dist/vendor/marketplace/zh/engineering/engineering-codebase-onboarding-engineer.md +172 -0
  641. package/dist/vendor/marketplace/zh/engineering/engineering-data-engineer.md +324 -0
  642. package/dist/vendor/marketplace/zh/engineering/engineering-database-optimizer.md +175 -0
  643. package/dist/vendor/marketplace/zh/engineering/engineering-devops-automator.md +375 -0
  644. package/dist/vendor/marketplace/zh/engineering/engineering-dingtalk-integration-developer.md +574 -0
  645. package/dist/vendor/marketplace/zh/engineering/engineering-email-intelligence-engineer.md +349 -0
  646. package/dist/vendor/marketplace/zh/engineering/engineering-embedded-firmware-engineer.md +168 -0
  647. package/dist/vendor/marketplace/zh/engineering/engineering-embedded-linux-driver-engineer.md +255 -0
  648. package/dist/vendor/marketplace/zh/engineering/engineering-feishu-integration-developer.md +597 -0
  649. package/dist/vendor/marketplace/zh/engineering/engineering-filament-optimization-specialist.md +283 -0
  650. package/dist/vendor/marketplace/zh/engineering/engineering-fpga-digital-design-engineer.md +227 -0
  651. package/dist/vendor/marketplace/zh/engineering/engineering-frontend-developer.md +224 -0
  652. package/dist/vendor/marketplace/zh/engineering/engineering-git-workflow-master.md +220 -0
  653. package/dist/vendor/marketplace/zh/engineering/engineering-incident-response-commander.md +465 -0
  654. package/dist/vendor/marketplace/zh/engineering/engineering-iot-solution-architect.md +220 -0
  655. package/dist/vendor/marketplace/zh/engineering/engineering-mechanical-design-engineer.md +311 -0
  656. package/dist/vendor/marketplace/zh/engineering/engineering-minimal-change-engineer.md +206 -0
  657. package/dist/vendor/marketplace/zh/engineering/engineering-mobile-app-builder.md +434 -0
  658. package/dist/vendor/marketplace/zh/engineering/engineering-pc-host-engineer.md +231 -0
  659. package/dist/vendor/marketplace/zh/engineering/engineering-rapid-prototyper.md +461 -0
  660. package/dist/vendor/marketplace/zh/engineering/engineering-security-engineer.md +303 -0
  661. package/dist/vendor/marketplace/zh/engineering/engineering-senior-developer.md +177 -0
  662. package/dist/vendor/marketplace/zh/engineering/engineering-software-architect.md +200 -0
  663. package/dist/vendor/marketplace/zh/engineering/engineering-solidity-smart-contract-engineer.md +541 -0
  664. package/dist/vendor/marketplace/zh/engineering/engineering-sre.md +233 -0
  665. package/dist/vendor/marketplace/zh/engineering/engineering-technical-writer.md +409 -0
  666. package/dist/vendor/marketplace/zh/engineering/engineering-threat-detection-engineer.md +553 -0
  667. package/dist/vendor/marketplace/zh/engineering/engineering-voice-ai-integration-engineer.md +560 -0
  668. package/dist/vendor/marketplace/zh/engineering/engineering-wechat-mini-program-developer.md +288 -0
  669. package/dist/vendor/marketplace/zh/finance/finance-bookkeeper-controller.md +271 -0
  670. package/dist/vendor/marketplace/zh/finance/finance-financial-analyst.md +244 -0
  671. package/dist/vendor/marketplace/zh/finance/finance-financial-forecaster.md +213 -0
  672. package/dist/vendor/marketplace/zh/finance/finance-fpa-analyst.md +272 -0
  673. package/dist/vendor/marketplace/zh/finance/finance-fraud-detector.md +241 -0
  674. package/dist/vendor/marketplace/zh/finance/finance-investment-researcher.md +283 -0
  675. package/dist/vendor/marketplace/zh/finance/finance-invoice-manager.md +242 -0
  676. package/dist/vendor/marketplace/zh/finance/finance-tax-strategist.md +250 -0
  677. package/dist/vendor/marketplace/zh/game-development/blender/blender-addon-engineer.md +233 -0
  678. package/dist/vendor/marketplace/zh/game-development/game-audio-engineer.md +265 -0
  679. package/dist/vendor/marketplace/zh/game-development/game-designer.md +168 -0
  680. package/dist/vendor/marketplace/zh/game-development/godot/godot-gameplay-scripter.md +335 -0
  681. package/dist/vendor/marketplace/zh/game-development/godot/godot-multiplayer-engineer.md +296 -0
  682. package/dist/vendor/marketplace/zh/game-development/godot/godot-shader-developer.md +267 -0
  683. package/dist/vendor/marketplace/zh/game-development/level-designer.md +209 -0
  684. package/dist/vendor/marketplace/zh/game-development/narrative-designer.md +244 -0
  685. package/dist/vendor/marketplace/zh/game-development/roblox-studio/roblox-avatar-creator.md +298 -0
  686. package/dist/vendor/marketplace/zh/game-development/roblox-studio/roblox-experience-designer.md +306 -0
  687. package/dist/vendor/marketplace/zh/game-development/roblox-studio/roblox-systems-scripter.md +325 -0
  688. package/dist/vendor/marketplace/zh/game-development/technical-artist.md +230 -0
  689. package/dist/vendor/marketplace/zh/game-development/unity/unity-architect.md +272 -0
  690. package/dist/vendor/marketplace/zh/game-development/unity/unity-editor-tool-developer.md +300 -0
  691. package/dist/vendor/marketplace/zh/game-development/unity/unity-multiplayer-engineer.md +238 -0
  692. package/dist/vendor/marketplace/zh/game-development/unity/unity-shader-graph-artist.md +270 -0
  693. package/dist/vendor/marketplace/zh/game-development/unreal-engine/unreal-multiplayer-architect.md +314 -0
  694. package/dist/vendor/marketplace/zh/game-development/unreal-engine/unreal-systems-engineer.md +311 -0
  695. package/dist/vendor/marketplace/zh/game-development/unreal-engine/unreal-technical-artist.md +256 -0
  696. package/dist/vendor/marketplace/zh/game-development/unreal-engine/unreal-world-builder.md +274 -0
  697. package/dist/vendor/marketplace/zh/hr/hr-performance-reviewer.md +248 -0
  698. package/dist/vendor/marketplace/zh/hr/hr-recruiter.md +232 -0
  699. package/dist/vendor/marketplace/zh/legal/legal-contract-reviewer.md +240 -0
  700. package/dist/vendor/marketplace/zh/legal/legal-policy-writer.md +308 -0
  701. package/dist/vendor/marketplace/zh/manifest.json +2181 -0
  702. package/dist/vendor/marketplace/zh/marketing/marketing-agentic-search-optimizer.md +312 -0
  703. package/dist/vendor/marketplace/zh/marketing/marketing-ai-citation-strategist.md +169 -0
  704. package/dist/vendor/marketplace/zh/marketing/marketing-app-store-optimizer.md +319 -0
  705. package/dist/vendor/marketplace/zh/marketing/marketing-baidu-seo-specialist.md +220 -0
  706. package/dist/vendor/marketplace/zh/marketing/marketing-bilibili-strategist.md +194 -0
  707. package/dist/vendor/marketplace/zh/marketing/marketing-book-co-author.md +109 -0
  708. package/dist/vendor/marketplace/zh/marketing/marketing-carousel-growth-engine.md +215 -0
  709. package/dist/vendor/marketplace/zh/marketing/marketing-china-ecommerce-operator.md +277 -0
  710. package/dist/vendor/marketplace/zh/marketing/marketing-china-market-localization-strategist.md +282 -0
  711. package/dist/vendor/marketplace/zh/marketing/marketing-content-creator.md +145 -0
  712. package/dist/vendor/marketplace/zh/marketing/marketing-cross-border-ecommerce.md +260 -0
  713. package/dist/vendor/marketplace/zh/marketing/marketing-daily-news-briefing.md +303 -0
  714. package/dist/vendor/marketplace/zh/marketing/marketing-douyin-strategist.md +150 -0
  715. package/dist/vendor/marketplace/zh/marketing/marketing-ecommerce-operator.md +216 -0
  716. package/dist/vendor/marketplace/zh/marketing/marketing-growth-hacker.md +121 -0
  717. package/dist/vendor/marketplace/zh/marketing/marketing-instagram-curator.md +179 -0
  718. package/dist/vendor/marketplace/zh/marketing/marketing-knowledge-commerce-strategist.md +384 -0
  719. package/dist/vendor/marketplace/zh/marketing/marketing-kuaishou-strategist.md +182 -0
  720. package/dist/vendor/marketplace/zh/marketing/marketing-linkedin-content-creator.md +232 -0
  721. package/dist/vendor/marketplace/zh/marketing/marketing-livestream-commerce-coach.md +303 -0
  722. package/dist/vendor/marketplace/zh/marketing/marketing-podcast-strategist.md +278 -0
  723. package/dist/vendor/marketplace/zh/marketing/marketing-private-domain-operator.md +309 -0
  724. package/dist/vendor/marketplace/zh/marketing/marketing-reddit-community-builder.md +127 -0
  725. package/dist/vendor/marketplace/zh/marketing/marketing-seo-specialist.md +298 -0
  726. package/dist/vendor/marketplace/zh/marketing/marketing-short-video-editing-coach.md +413 -0
  727. package/dist/vendor/marketplace/zh/marketing/marketing-social-media-strategist.md +118 -0
  728. package/dist/vendor/marketplace/zh/marketing/marketing-tiktok-strategist.md +124 -0
  729. package/dist/vendor/marketplace/zh/marketing/marketing-twitter-engager.md +132 -0
  730. package/dist/vendor/marketplace/zh/marketing/marketing-video-optimization-specialist.md +128 -0
  731. package/dist/vendor/marketplace/zh/marketing/marketing-wechat-official-account.md +158 -0
  732. package/dist/vendor/marketplace/zh/marketing/marketing-wechat-operator.md +156 -0
  733. package/dist/vendor/marketplace/zh/marketing/marketing-weibo-strategist.md +241 -0
  734. package/dist/vendor/marketplace/zh/marketing/marketing-weixin-channels-strategist.md +297 -0
  735. package/dist/vendor/marketplace/zh/marketing/marketing-xiaohongshu-operator.md +139 -0
  736. package/dist/vendor/marketplace/zh/marketing/marketing-xiaohongshu-specialist.md +151 -0
  737. package/dist/vendor/marketplace/zh/marketing/marketing-zhihu-strategist.md +175 -0
  738. package/dist/vendor/marketplace/zh/paid-media/paid-media-auditor.md +170 -0
  739. package/dist/vendor/marketplace/zh/paid-media/paid-media-creative-strategist.md +173 -0
  740. package/dist/vendor/marketplace/zh/paid-media/paid-media-paid-social-strategist.md +180 -0
  741. package/dist/vendor/marketplace/zh/paid-media/paid-media-ppc-strategist.md +180 -0
  742. package/dist/vendor/marketplace/zh/paid-media/paid-media-programmatic-buyer.md +177 -0
  743. package/dist/vendor/marketplace/zh/paid-media/paid-media-search-query-analyst.md +182 -0
  744. package/dist/vendor/marketplace/zh/paid-media/paid-media-tracking-specialist.md +199 -0
  745. package/dist/vendor/marketplace/zh/product/product-behavioral-nudge-engine.md +246 -0
  746. package/dist/vendor/marketplace/zh/product/product-feedback-synthesizer.md +175 -0
  747. package/dist/vendor/marketplace/zh/product/product-manager.md +474 -0
  748. package/dist/vendor/marketplace/zh/product/product-sprint-prioritizer.md +133 -0
  749. package/dist/vendor/marketplace/zh/product/product-trend-researcher.md +143 -0
  750. package/dist/vendor/marketplace/zh/project-management/project-management-experiment-tracker.md +206 -0
  751. package/dist/vendor/marketplace/zh/project-management/project-management-jira-workflow-steward.md +249 -0
  752. package/dist/vendor/marketplace/zh/project-management/project-management-project-shepherd.md +202 -0
  753. package/dist/vendor/marketplace/zh/project-management/project-management-studio-operations.md +208 -0
  754. package/dist/vendor/marketplace/zh/project-management/project-management-studio-producer.md +211 -0
  755. package/dist/vendor/marketplace/zh/project-management/project-manager-senior.md +135 -0
  756. package/dist/vendor/marketplace/zh/sales/sales-account-strategist.md +243 -0
  757. package/dist/vendor/marketplace/zh/sales/sales-coach.md +291 -0
  758. package/dist/vendor/marketplace/zh/sales/sales-deal-strategist.md +204 -0
  759. package/dist/vendor/marketplace/zh/sales/sales-discovery-coach.md +230 -0
  760. package/dist/vendor/marketplace/zh/sales/sales-engineer.md +200 -0
  761. package/dist/vendor/marketplace/zh/sales/sales-outbound-strategist.md +208 -0
  762. package/dist/vendor/marketplace/zh/sales/sales-pipeline-analyst.md +284 -0
  763. package/dist/vendor/marketplace/zh/sales/sales-proposal-strategist.md +233 -0
  764. package/dist/vendor/marketplace/zh/spatial-computing/macos-spatial-metal-engineer.md +337 -0
  765. package/dist/vendor/marketplace/zh/spatial-computing/terminal-integration-specialist.md +236 -0
  766. package/dist/vendor/marketplace/zh/spatial-computing/visionos-spatial-engineer.md +282 -0
  767. package/dist/vendor/marketplace/zh/spatial-computing/xr-cockpit-interaction-specialist.md +220 -0
  768. package/dist/vendor/marketplace/zh/spatial-computing/xr-immersive-developer.md +229 -0
  769. package/dist/vendor/marketplace/zh/spatial-computing/xr-interface-architect.md +253 -0
  770. package/dist/vendor/marketplace/zh/specialized/accounts-payable-agent.md +212 -0
  771. package/dist/vendor/marketplace/zh/specialized/agentic-identity-trust.md +388 -0
  772. package/dist/vendor/marketplace/zh/specialized/agents-orchestrator.md +366 -0
  773. package/dist/vendor/marketplace/zh/specialized/automation-governance-architect.md +215 -0
  774. package/dist/vendor/marketplace/zh/specialized/blockchain-security-auditor.md +484 -0
  775. package/dist/vendor/marketplace/zh/specialized/compliance-auditor.md +172 -0
  776. package/dist/vendor/marketplace/zh/specialized/corporate-training-designer.md +191 -0
  777. package/dist/vendor/marketplace/zh/specialized/data-consolidation-agent.md +327 -0
  778. package/dist/vendor/marketplace/zh/specialized/gaokao-college-advisor.md +333 -0
  779. package/dist/vendor/marketplace/zh/specialized/government-digital-presales-consultant.md +362 -0
  780. package/dist/vendor/marketplace/zh/specialized/healthcare-customer-service.md +388 -0
  781. package/dist/vendor/marketplace/zh/specialized/healthcare-marketing-compliance.md +394 -0
  782. package/dist/vendor/marketplace/zh/specialized/hospitality-guest-services.md +597 -0
  783. package/dist/vendor/marketplace/zh/specialized/hr-onboarding.md +450 -0
  784. package/dist/vendor/marketplace/zh/specialized/identity-graph-operator.md +270 -0
  785. package/dist/vendor/marketplace/zh/specialized/language-translator.md +275 -0
  786. package/dist/vendor/marketplace/zh/specialized/legal-billing-time-tracking.md +566 -0
  787. package/dist/vendor/marketplace/zh/specialized/legal-client-intake.md +487 -0
  788. package/dist/vendor/marketplace/zh/specialized/legal-document-review.md +452 -0
  789. package/dist/vendor/marketplace/zh/specialized/livestock-archive-auditor.md +135 -0
  790. package/dist/vendor/marketplace/zh/specialized/loan-officer-assistant.md +549 -0
  791. package/dist/vendor/marketplace/zh/specialized/lsp-index-engineer.md +334 -0
  792. package/dist/vendor/marketplace/zh/specialized/prompt-engineer.md +176 -0
  793. package/dist/vendor/marketplace/zh/specialized/real-estate-buyer-seller.md +594 -0
  794. package/dist/vendor/marketplace/zh/specialized/recruitment-specialist.md +508 -0
  795. package/dist/vendor/marketplace/zh/specialized/report-distribution-agent.md +354 -0
  796. package/dist/vendor/marketplace/zh/specialized/retail-customer-returns.md +564 -0
  797. package/dist/vendor/marketplace/zh/specialized/sales-data-extraction-agent.md +159 -0
  798. package/dist/vendor/marketplace/zh/specialized/specialized-ai-policy-writer.md +217 -0
  799. package/dist/vendor/marketplace/zh/specialized/specialized-chief-of-staff.md +278 -0
  800. package/dist/vendor/marketplace/zh/specialized/specialized-civil-engineer.md +355 -0
  801. package/dist/vendor/marketplace/zh/specialized/specialized-cultural-intelligence-strategist.md +168 -0
  802. package/dist/vendor/marketplace/zh/specialized/specialized-developer-advocate.md +334 -0
  803. package/dist/vendor/marketplace/zh/specialized/specialized-document-generator.md +346 -0
  804. package/dist/vendor/marketplace/zh/specialized/specialized-french-consulting-market.md +191 -0
  805. package/dist/vendor/marketplace/zh/specialized/specialized-korean-business-navigator.md +215 -0
  806. package/dist/vendor/marketplace/zh/specialized/specialized-mcp-builder.md +351 -0
  807. package/dist/vendor/marketplace/zh/specialized/specialized-meeting-assistant.md +236 -0
  808. package/dist/vendor/marketplace/zh/specialized/specialized-model-qa.md +507 -0
  809. package/dist/vendor/marketplace/zh/specialized/specialized-pricing-optimizer.md +254 -0
  810. package/dist/vendor/marketplace/zh/specialized/specialized-risk-assessor.md +240 -0
  811. package/dist/vendor/marketplace/zh/specialized/specialized-salesforce-architect.md +179 -0
  812. package/dist/vendor/marketplace/zh/specialized/specialized-workflow-architect.md +596 -0
  813. package/dist/vendor/marketplace/zh/specialized/study-abroad-advisor.md +281 -0
  814. package/dist/vendor/marketplace/zh/specialized/technical-translator-agent.md +167 -0
  815. package/dist/vendor/marketplace/zh/specialized/zk-steward.md +228 -0
  816. package/dist/vendor/marketplace/zh/supply-chain/supply-chain-inventory-forecaster.md +212 -0
  817. package/dist/vendor/marketplace/zh/supply-chain/supply-chain-route-optimizer.md +224 -0
  818. package/dist/vendor/marketplace/zh/supply-chain/supply-chain-strategist.md +581 -0
  819. package/dist/vendor/marketplace/zh/supply-chain/supply-chain-vendor-evaluator.md +232 -0
  820. package/dist/vendor/marketplace/zh/support/support-analytics-reporter.md +364 -0
  821. package/dist/vendor/marketplace/zh/support/support-executive-summary-generator.md +217 -0
  822. package/dist/vendor/marketplace/zh/support/support-finance-tracker.md +447 -0
  823. package/dist/vendor/marketplace/zh/support/support-infrastructure-maintainer.md +623 -0
  824. package/dist/vendor/marketplace/zh/support/support-legal-compliance-checker.md +587 -0
  825. package/dist/vendor/marketplace/zh/support/support-recruitment-specialist.md +508 -0
  826. package/dist/vendor/marketplace/zh/support/support-support-responder.md +584 -0
  827. package/dist/vendor/marketplace/zh/testing/testing-accessibility-auditor.md +329 -0
  828. package/dist/vendor/marketplace/zh/testing/testing-api-tester.md +305 -0
  829. package/dist/vendor/marketplace/zh/testing/testing-embedded-qa-engineer.md +258 -0
  830. package/dist/vendor/marketplace/zh/testing/testing-evidence-collector.md +153 -0
  831. package/dist/vendor/marketplace/zh/testing/testing-performance-benchmarker.md +196 -0
  832. package/dist/vendor/marketplace/zh/testing/testing-reality-checker.md +235 -0
  833. package/dist/vendor/marketplace/zh/testing/testing-test-results-analyzer.md +313 -0
  834. package/dist/vendor/marketplace/zh/testing/testing-tool-evaluator.md +402 -0
  835. package/dist/vendor/marketplace/zh/testing/testing-workflow-optimizer.md +458 -0
  836. package/package.json +131 -0
  837. package/scripts/postinstall-native-artifacts.mjs +113 -0
  838. package/web/dist/assets/AddWorkerDialog-BU2Fn-Mx.js +2 -0
  839. package/web/dist/assets/AddWorkspaceFlow-BV04MkRt.js +1 -0
  840. package/web/dist/assets/FirstRunWizard-DS4IYOrd.js +1 -0
  841. package/web/dist/assets/MarketplaceDrawer-CIQ2B6Fx.js +76 -0
  842. package/web/dist/assets/TaskGraphDrawer-BPMcRocd.js +1 -0
  843. package/web/dist/assets/WhatsNewDialog-DEgVY_LD.js +1 -0
  844. package/web/dist/assets/WorkerModal-DiCcTPpc.js +1 -0
  845. package/web/dist/assets/WorkflowsDrawer-M2CgAJWK.js +1 -0
  846. package/web/dist/assets/WorkspaceMemoryDrawer-ClJIqWck.js +1 -0
  847. package/web/dist/assets/WorkspaceTaskDrawer-gjvXuZ2K.js +1 -0
  848. package/web/dist/assets/addon-clipboard-wHJhZAA4.js +1 -0
  849. package/web/dist/assets/addon-fit-DX4qG4td.js +1 -0
  850. package/web/dist/assets/addon-unicode11-Bt8F3D7-.js +7 -0
  851. package/web/dist/assets/addon-web-links-DIbG5aQx.js +1 -0
  852. package/web/dist/assets/addon-webgl-DCtw1yLn.js +64 -0
  853. package/web/dist/assets/finder-C4Jmsb0B.png +0 -0
  854. package/web/dist/assets/ghostty-D-Js4rdm.png +0 -0
  855. package/web/dist/assets/index-bOMtwrkA.js +73 -0
  856. package/web/dist/assets/index-i9YgsMdD.css +1 -0
  857. package/web/dist/assets/path-join-7MR1s7b1.js +1 -0
  858. package/web/dist/assets/search-CmzeVhy0.js +1 -0
  859. package/web/dist/assets/xterm-B-qIQCd3.js +16 -0
  860. package/web/dist/assets/zed-C5BQT8X3.png +0 -0
  861. package/web/dist/bilibili.ico +0 -0
  862. package/web/dist/cli-icons/claude.png +0 -0
  863. package/web/dist/cli-icons/codex.png +0 -0
  864. package/web/dist/cli-icons/gemini.png +0 -0
  865. package/web/dist/cli-icons/hermes.png +0 -0
  866. package/web/dist/cli-icons/opencode.svg +18 -0
  867. package/web/dist/icons/apple-touch-icon-180.png +0 -0
  868. package/web/dist/icons/icon-192.png +0 -0
  869. package/web/dist/icons/icon-32.png +0 -0
  870. package/web/dist/icons/icon-512-maskable.png +0 -0
  871. package/web/dist/icons/icon-512.png +0 -0
  872. package/web/dist/index.html +39 -0
  873. package/web/dist/logo.png +0 -0
  874. package/web/dist/manifest.webmanifest +60 -0
  875. package/web/dist/screenshots/wide-overview.png +0 -0
  876. package/web/dist/sounds/LICENSE-KENNEY.txt +22 -0
  877. package/web/dist/sounds/hive-beacon.ogg +0 -0
  878. package/web/dist/sounds/hive-cascade.ogg +0 -0
  879. package/web/dist/sounds/hive-chime.ogg +0 -0
  880. package/web/dist/sounds/hive-ping.ogg +0 -0
  881. package/web/dist/sounds/hive-resolve.ogg +0 -0
  882. package/web/dist/sounds/hive-soft.ogg +0 -0
  883. package/web/dist/sw.js +99 -0
@@ -0,0 +1,138 @@
1
+ export declare const REMOTE_CRYPTO_VERSION = 2;
2
+ export declare const X25519_KEY_LEN = 32;
3
+ export declare const SHARED_SECRET_LEN = 32;
4
+ export declare const SESSION_KEY_LEN = 32;
5
+ export declare const NONCE_LEN = 24;
6
+ export declare const AEAD_TAG_LEN = 16;
7
+ export declare const PAIRING_SECRET_LEN = 32;
8
+ export declare const SESSION_SALT_LEN = 32;
9
+ export declare const SAS_DIGITS = 6;
10
+ export declare const CONN_SALT_LEN = 32;
11
+ export type Direction = 'd2p' | 'p2d';
12
+ export interface DeviceKeyPair {
13
+ secretKey: Uint8Array;
14
+ publicKey: Uint8Array;
15
+ }
16
+ export interface PairingPayload {
17
+ v: number;
18
+ gatewayUrl: string;
19
+ daemonId: string;
20
+ pairingSecret: string;
21
+ }
22
+ export interface HandshakeIds {
23
+ daemonId: string;
24
+ deviceId: string;
25
+ protocolVersion: number;
26
+ }
27
+ export interface SessionKeys {
28
+ d2p: Uint8Array;
29
+ p2d: Uint8Array;
30
+ sas: string;
31
+ transcriptHash: Uint8Array;
32
+ }
33
+ export interface FrameSealer {
34
+ direction: Direction;
35
+ nextSeq: number;
36
+ }
37
+ export interface FrameOpener {
38
+ direction: Direction;
39
+ lastSeq: number;
40
+ }
41
+ export declare function toBase64Url(bytes: Uint8Array): string;
42
+ export declare function fromBase64Url(s: string): Uint8Array;
43
+ export declare function encodePairingPayload(p: PairingPayload): string;
44
+ export declare function decodePairingPayload(s: string): PairingPayload;
45
+ export declare function generateDeviceKeyPair(): DeviceKeyPair;
46
+ export declare function serializeDeviceKeyPair(kp: DeviceKeyPair): {
47
+ secretKey: string;
48
+ publicKey: string;
49
+ };
50
+ export declare function deserializeDeviceKeyPair(s: {
51
+ secretKey: string;
52
+ publicKey: string;
53
+ }): DeviceKeyPair;
54
+ /** A fresh per-session salt. MUST be drawn anew on every (re)connect — see header comment. */
55
+ export declare function generateSessionSalt(): Uint8Array;
56
+ export declare function deriveDaemonSession(args: {
57
+ daemonSecretKey: Uint8Array;
58
+ devicePublicKey: Uint8Array;
59
+ daemonPublicKey: Uint8Array;
60
+ pairingSecret: Uint8Array;
61
+ sessionSalt: Uint8Array;
62
+ ids: HandshakeIds;
63
+ }): SessionKeys;
64
+ export declare function deriveDeviceSession(args: {
65
+ deviceSecretKey: Uint8Array;
66
+ daemonPublicKey: Uint8Array;
67
+ devicePublicKey: Uint8Array;
68
+ pairingSecret: Uint8Array;
69
+ sessionSalt: Uint8Array;
70
+ ids: HandshakeIds;
71
+ }): SessionKeys;
72
+ export interface ConnectionKeys {
73
+ d2p: Uint8Array;
74
+ p2d: Uint8Array;
75
+ }
76
+ /**
77
+ * A fresh 32-byte connection salt. Drawn anew on EVERY (re)connect (page reload, daemon reconnect,
78
+ * peer-online). Both sides contribute one (bilateral) so neither can force the result to repeat.
79
+ */
80
+ export declare function generateConnSalt(): Uint8Array;
81
+ /**
82
+ * Derive the two per-connection AEAD keys from the persisted ROOT keys + the bilateral connection
83
+ * salts. Called identically on both sides — same inputs, same byte order ⇒ same ConnectionKeys, so
84
+ * d2p/p2d still match across the wire.
85
+ *
86
+ * The persisted keys (DeviceSession.keys / StoredDeviceSession.rootKeys) are ROOTS: they are never
87
+ * passed to sealFrame/openFrame. This is the ONLY consumer of the root for AEAD purposes.
88
+ *
89
+ * ikm = the PER-DIRECTION root (rootD2p→d2p, rootP2d→p2d) — no cross-direction mixing.
90
+ * salt = CONN_SALT_PREFIX || phoneConnSalt(32) || daemonConnSalt(32) (bilateral, fixed order).
91
+ * info = per-direction label || 0x00 || ctx, where ctx binds protocolVersion + ids + both salts.
92
+ *
93
+ * NOTE: the salts appear in BOTH the HKDF salt arg and the info ctx. This is deliberate
94
+ * defense-in-depth, not a leftover — the salt slot makes them the extract entropy, the info slot
95
+ * binds them into the per-direction expand context so the two directions can never coincide and a
96
+ * future label edit can't silently drop the salt binding. Redundant but harmless (HKDF salt and
97
+ * info are independent inputs). A root reused across (deviceId, daemonId, version) yields different
98
+ * connKeys, and the two directions stay distinct (invariant 2).
99
+ */
100
+ export declare function deriveConnectionKeys(args: {
101
+ rootD2p: Uint8Array;
102
+ rootP2d: Uint8Array;
103
+ phoneConnSalt: Uint8Array;
104
+ daemonConnSalt: Uint8Array;
105
+ ids: HandshakeIds;
106
+ }): ConnectionKeys;
107
+ export declare function deriveSas(transcriptHash: Uint8Array, ids: HandshakeIds): string;
108
+ export declare function buildNonce(direction: Direction, streamId: number, seq: number): Uint8Array;
109
+ export declare function sealFrame(args: {
110
+ key: Uint8Array;
111
+ direction: Direction;
112
+ headerBytes: Uint8Array;
113
+ payload: Uint8Array;
114
+ }): Uint8Array;
115
+ export declare function openFrame(args: {
116
+ key: Uint8Array;
117
+ direction: Direction;
118
+ headerBytes: Uint8Array;
119
+ ciphertext: Uint8Array;
120
+ }): Uint8Array;
121
+ export declare function createSealer(direction: Direction): FrameSealer;
122
+ export declare function createOpener(direction: Direction): FrameOpener;
123
+ export declare function sealNext(sealer: FrameSealer, args: {
124
+ key: Uint8Array;
125
+ streamId: number;
126
+ headerBytes: Uint8Array;
127
+ payload: Uint8Array;
128
+ }): {
129
+ seq: number;
130
+ ciphertext: Uint8Array;
131
+ };
132
+ export declare function openNext(opener: FrameOpener, args: {
133
+ key: Uint8Array;
134
+ streamId: number;
135
+ headerBytes: Uint8Array;
136
+ ciphertext: Uint8Array;
137
+ seq: number;
138
+ }): Uint8Array;
@@ -0,0 +1,427 @@
1
+ // E2E pairing handshake + directional session key schedule + AEAD frame seal/open + SAS.
2
+ //
3
+ // Runs in BOTH node and browser: no Buffer, no node-only APIs. Bytes are Uint8Array.
4
+ //
5
+ // Crypto invariants enforced here (each is exercised by tests/unit/remote-crypto.test.ts):
6
+ // 1. The 12-byte frame header travels in the clear but is authenticated as AEAD AAD.
7
+ // 2. HKDF derives DIRECTIONAL keys (daemon->device vs device->daemon are distinct, never shared).
8
+ // 3. The nonce binds (direction, streamId, seq): seq is per-direction monotonic (replay/reorder
9
+ // guard) and streamId is folded in separately so the same key never reuses a nonce across
10
+ // concurrent streams.
11
+ // 4. The handshake transcript binds daemonId + deviceId + protocolVersion (+ a fresh per-session
12
+ // salt) so a downgrade / misbind / reroute / reconnect produces different keys.
13
+ //
14
+ // HARDEN: a fresh 32-byte `sessionSalt` is mandatory at PAIRING time. It is mixed into both the
15
+ // HKDF salt and the transcript, so the persisted directional keys (d2p/p2d) are fresh per pairing.
16
+ //
17
+ // M6.1 — those persisted directional keys are ROOTS, never used as an AEAD key directly. On EVERY
18
+ // (re)connect (page reload, daemon reconnect, peer-online) both sides exchange a fresh bilateral
19
+ // connection salt and call `deriveConnectionKeys` to derive the per-connection AEAD keys. That is
20
+ // what now makes resetting `seq` to 0 per FrameSealer safe: the AEAD key is guaranteed fresh per
21
+ // connection (a reload draws a fresh phone salt, a reconnect a fresh daemon salt, and neither side
22
+ // can force the other's contribution to repeat), so (key, nonce) reuse is structurally impossible.
23
+ // The root is never an AEAD key, so resetting seq under a reused root no longer collides.
24
+ import { xchacha20poly1305 } from '@noble/ciphers/chacha.js';
25
+ import { randomBytes } from '@noble/ciphers/utils.js';
26
+ import { x25519 } from '@noble/curves/ed25519.js';
27
+ import { hkdf } from '@noble/hashes/hkdf.js';
28
+ import { sha256 } from '@noble/hashes/sha2.js';
29
+ export const REMOTE_CRYPTO_VERSION = 2; // was 1 — wire handshake changed (mandatory bilateral salt exchange before any sealed frame)
30
+ export const X25519_KEY_LEN = 32;
31
+ export const SHARED_SECRET_LEN = 32;
32
+ export const SESSION_KEY_LEN = 32;
33
+ export const NONCE_LEN = 24;
34
+ export const AEAD_TAG_LEN = 16;
35
+ export const PAIRING_SECRET_LEN = 32;
36
+ export const SESSION_SALT_LEN = 32;
37
+ export const SAS_DIGITS = 6;
38
+ // M6.1 — per-connection rekey. A fresh bilateral salt every (re)connect derives the AEAD keys from
39
+ // the persisted ROOT keys, so seq can reset to 0 per connection without ever reusing (key, nonce).
40
+ export const CONN_SALT_LEN = 32;
41
+ // HKDF labels — ASCII. These ARE the wire contract; changing any string requires bumping the version.
42
+ const HKDF_SALT = 'hive/remote/v1/pair';
43
+ const INFO_KEY_D2P = 'hive/remote/v1/key/daemon->device';
44
+ const INFO_KEY_P2D = 'hive/remote/v1/key/device->daemon';
45
+ const INFO_SAS = 'hive/remote/v1/sas';
46
+ const TRANSCRIPT_TAG = 'hive/remote/v1/transcript';
47
+ // Per-connection key labels. The `conn/*` namespace + ikm=root keeps these disjoint from the
48
+ // pairing `v1/*` labels (ikm=pairingSecret||ss), so no label can collide across the two schedules.
49
+ const INFO_CONN_D2P = 'hive/remote/v2/conn/daemon->device';
50
+ const INFO_CONN_P2D = 'hive/remote/v2/conn/device->daemon';
51
+ const CONN_SALT_PREFIX = 'hive/remote/v2/conn-salt';
52
+ // Nonce direction tag (nonce[0]); also documents the key->direction mapping.
53
+ const DIR_BYTE_D2P = 0x01;
54
+ const DIR_BYTE_P2D = 0x02;
55
+ // Header field offsets — crypto reads streamId/seq out of the header bytes (R5 single source of
56
+ // truth). MUST match remote-protocol.ts encodeHeader: streamId@4 (u32be), seq@8 (u32be).
57
+ const HEADER_OFF_STREAM_ID = 4;
58
+ const HEADER_OFF_SEQ = 8;
59
+ const HEADER_MIN_LEN = 12;
60
+ // ── private helpers ──────────────────────────────────────────────────────────
61
+ const te = new TextEncoder();
62
+ function utf8(s) {
63
+ return te.encode(s);
64
+ }
65
+ function concat(...parts) {
66
+ let total = 0;
67
+ for (const p of parts)
68
+ total += p.length;
69
+ const out = new Uint8Array(total);
70
+ let off = 0;
71
+ for (const p of parts) {
72
+ out.set(p, off);
73
+ off += p.length;
74
+ }
75
+ return out;
76
+ }
77
+ function u32be(n) {
78
+ if (!Number.isInteger(n) || n < 0 || n > 0xffffffff) {
79
+ throw new RangeError(`u32be out of range: ${n}`);
80
+ }
81
+ const out = new Uint8Array(4);
82
+ new DataView(out.buffer).setUint32(0, n);
83
+ return out;
84
+ }
85
+ function u32beRead(b, off = 0) {
86
+ if (b.length < off + 4)
87
+ throw new RangeError('u32beRead: buffer too short');
88
+ return new DataView(b.buffer, b.byteOffset, b.byteLength).getUint32(off);
89
+ }
90
+ function u64be(n) {
91
+ if (!Number.isSafeInteger(n) || n < 0) {
92
+ throw new RangeError(`u64be out of range: ${n}`);
93
+ }
94
+ const out = new Uint8Array(8);
95
+ // JS bitwise ops are 32-bit; split into hi/lo 32-bit words.
96
+ const hi = Math.floor(n / 0x1_0000_0000);
97
+ const lo = n >>> 0;
98
+ const dv = new DataView(out.buffer);
99
+ dv.setUint32(0, hi);
100
+ dv.setUint32(4, lo);
101
+ return out;
102
+ }
103
+ function lp(b) {
104
+ if (b.length > 0xffff)
105
+ throw new RangeError('lp: value too long for u16 length prefix');
106
+ const out = new Uint8Array(2 + b.length);
107
+ new DataView(out.buffer).setUint16(0, b.length);
108
+ out.set(b, 2);
109
+ return out;
110
+ }
111
+ function assertLen(b, len, name) {
112
+ if (b.length !== len) {
113
+ throw new RangeError(`${name} must be ${len} bytes, got ${b.length}`);
114
+ }
115
+ }
116
+ // ── base64url (no btoa/atob/Buffer) ──────────────────────────────────────────
117
+ const B64_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
118
+ const B64_REVERSE = (() => {
119
+ const r = new Int16Array(128).fill(-1);
120
+ for (let i = 0; i < B64_ALPHABET.length; i++) {
121
+ r[B64_ALPHABET.charCodeAt(i)] = i;
122
+ }
123
+ return r;
124
+ })();
125
+ export function toBase64Url(bytes) {
126
+ let out = '';
127
+ let i = 0;
128
+ for (; i + 3 <= bytes.length; i += 3) {
129
+ const b0 = bytes[i];
130
+ const b1 = bytes[i + 1];
131
+ const b2 = bytes[i + 2];
132
+ out += B64_ALPHABET[b0 >> 2];
133
+ out += B64_ALPHABET[((b0 & 0x03) << 4) | (b1 >> 4)];
134
+ out += B64_ALPHABET[((b1 & 0x0f) << 2) | (b2 >> 6)];
135
+ out += B64_ALPHABET[b2 & 0x3f];
136
+ }
137
+ const rem = bytes.length - i;
138
+ if (rem === 1) {
139
+ const b0 = bytes[i];
140
+ out += B64_ALPHABET[b0 >> 2];
141
+ out += B64_ALPHABET[(b0 & 0x03) << 4];
142
+ }
143
+ else if (rem === 2) {
144
+ const b0 = bytes[i];
145
+ const b1 = bytes[i + 1];
146
+ out += B64_ALPHABET[b0 >> 2];
147
+ out += B64_ALPHABET[((b0 & 0x03) << 4) | (b1 >> 4)];
148
+ out += B64_ALPHABET[(b1 & 0x0f) << 2];
149
+ }
150
+ return out;
151
+ }
152
+ export function fromBase64Url(s) {
153
+ if (s.length % 4 === 1)
154
+ throw new RangeError('invalid base64url');
155
+ const fullGroups = s.length >> 2;
156
+ const rem = s.length & 3;
157
+ const outLen = fullGroups * 3 + (rem === 0 ? 0 : rem - 1);
158
+ const out = new Uint8Array(outLen);
159
+ const val = (ch) => {
160
+ if (ch >= 128)
161
+ throw new RangeError('invalid base64url');
162
+ const v = B64_REVERSE[ch];
163
+ if (v < 0)
164
+ throw new RangeError('invalid base64url');
165
+ return v;
166
+ };
167
+ let o = 0;
168
+ let i = 0;
169
+ for (; i + 4 <= s.length; i += 4) {
170
+ const c0 = val(s.charCodeAt(i));
171
+ const c1 = val(s.charCodeAt(i + 1));
172
+ const c2 = val(s.charCodeAt(i + 2));
173
+ const c3 = val(s.charCodeAt(i + 3));
174
+ out[o++] = (c0 << 2) | (c1 >> 4);
175
+ out[o++] = ((c1 & 0x0f) << 4) | (c2 >> 2);
176
+ out[o++] = ((c2 & 0x03) << 6) | c3;
177
+ }
178
+ if (rem === 2) {
179
+ const c0 = val(s.charCodeAt(i));
180
+ const c1 = val(s.charCodeAt(i + 1));
181
+ out[o++] = (c0 << 2) | (c1 >> 4);
182
+ }
183
+ else if (rem === 3) {
184
+ const c0 = val(s.charCodeAt(i));
185
+ const c1 = val(s.charCodeAt(i + 1));
186
+ const c2 = val(s.charCodeAt(i + 2));
187
+ out[o++] = (c0 << 2) | (c1 >> 4);
188
+ out[o++] = ((c1 & 0x0f) << 4) | (c2 >> 2);
189
+ }
190
+ return out;
191
+ }
192
+ // ── pairing payload (QR) ──────────────────────────────────────────────────────
193
+ export function encodePairingPayload(p) {
194
+ return JSON.stringify(p);
195
+ }
196
+ export function decodePairingPayload(s) {
197
+ let raw;
198
+ try {
199
+ raw = JSON.parse(s);
200
+ }
201
+ catch {
202
+ throw new RangeError('invalid pairing payload: not JSON');
203
+ }
204
+ if (typeof raw !== 'object' || raw === null) {
205
+ throw new RangeError('invalid pairing payload: not an object');
206
+ }
207
+ const o = raw;
208
+ if (o.v !== REMOTE_CRYPTO_VERSION) {
209
+ throw new RangeError(`unsupported pairing version: ${String(o.v)}`);
210
+ }
211
+ if (typeof o.gatewayUrl !== 'string' || o.gatewayUrl.length === 0) {
212
+ throw new RangeError('invalid pairing payload: gatewayUrl');
213
+ }
214
+ if (typeof o.daemonId !== 'string' || o.daemonId.length === 0) {
215
+ throw new RangeError('invalid pairing payload: daemonId');
216
+ }
217
+ if (typeof o.pairingSecret !== 'string') {
218
+ throw new RangeError('invalid pairing payload: pairingSecret');
219
+ }
220
+ const secret = fromBase64Url(o.pairingSecret);
221
+ if (secret.length !== PAIRING_SECRET_LEN) {
222
+ throw new RangeError(`pairingSecret must be ${PAIRING_SECRET_LEN} bytes`);
223
+ }
224
+ return {
225
+ v: o.v,
226
+ gatewayUrl: o.gatewayUrl,
227
+ daemonId: o.daemonId,
228
+ pairingSecret: o.pairingSecret,
229
+ };
230
+ }
231
+ // ── device keypair ─────────────────────────────────────────────────────────────
232
+ export function generateDeviceKeyPair() {
233
+ const secretKey = x25519.utils.randomSecretKey();
234
+ const publicKey = x25519.getPublicKey(secretKey);
235
+ return { secretKey, publicKey };
236
+ }
237
+ export function serializeDeviceKeyPair(kp) {
238
+ return {
239
+ secretKey: toBase64Url(kp.secretKey),
240
+ publicKey: toBase64Url(kp.publicKey),
241
+ };
242
+ }
243
+ export function deserializeDeviceKeyPair(s) {
244
+ const secretKey = fromBase64Url(s.secretKey);
245
+ const publicKey = fromBase64Url(s.publicKey);
246
+ if (secretKey.length !== X25519_KEY_LEN) {
247
+ throw new RangeError(`secretKey must be ${X25519_KEY_LEN} bytes`);
248
+ }
249
+ if (publicKey.length !== X25519_KEY_LEN) {
250
+ throw new RangeError(`publicKey must be ${X25519_KEY_LEN} bytes`);
251
+ }
252
+ return { secretKey, publicKey };
253
+ }
254
+ /** A fresh per-session salt. MUST be drawn anew on every (re)connect — see header comment. */
255
+ export function generateSessionSalt() {
256
+ return randomBytes(SESSION_SALT_LEN);
257
+ }
258
+ // ── key schedule ───────────────────────────────────────────────────────────────
259
+ function deriveSession(args) {
260
+ // Length validation up front so IKM/transcript byte boundaries are unambiguous (harden minor).
261
+ assertLen(args.pairingSecret, PAIRING_SECRET_LEN, 'pairingSecret');
262
+ assertLen(args.sessionSalt, SESSION_SALT_LEN, 'sessionSalt');
263
+ assertLen(args.daemonPublicKey, X25519_KEY_LEN, 'daemonPublicKey');
264
+ assertLen(args.devicePublicKey, X25519_KEY_LEN, 'devicePublicKey');
265
+ const ss = x25519.getSharedSecret(args.localSecretKey, args.peerPublicKey);
266
+ assertLen(ss, SHARED_SECRET_LEN, 'sharedSecret');
267
+ // pairingSecret is load-bearing: a passive relay with both pubkeys still can't derive keys.
268
+ const ikm = concat(args.pairingSecret, ss);
269
+ // Fixed daemon/device slots (not self/peer) so both sides hash identical bytes.
270
+ const transcript = concat(utf8(TRANSCRIPT_TAG), Uint8Array.of(0x00), u32be(args.ids.protocolVersion), lp(utf8(args.ids.daemonId)), lp(utf8(args.ids.deviceId)), args.daemonPublicKey, args.devicePublicKey, args.sessionSalt // fresh per-session randomness → distinct keys every (re)connect
271
+ );
272
+ const transcriptHash = sha256(transcript);
273
+ // HKDF salt also mixes the session salt so a reused (pairing, ss) still gives fresh keys.
274
+ const salt = concat(utf8(HKDF_SALT), args.sessionSalt);
275
+ const d2p = hkdf(sha256, ikm, salt, concat(utf8(INFO_KEY_D2P), Uint8Array.of(0x00), transcriptHash), SESSION_KEY_LEN);
276
+ const p2d = hkdf(sha256, ikm, salt, concat(utf8(INFO_KEY_P2D), Uint8Array.of(0x00), transcriptHash), SESSION_KEY_LEN);
277
+ const sas = deriveSas(transcriptHash, args.ids);
278
+ return { d2p, p2d, sas, transcriptHash };
279
+ }
280
+ export function deriveDaemonSession(args) {
281
+ return deriveSession({
282
+ localSecretKey: args.daemonSecretKey,
283
+ peerPublicKey: args.devicePublicKey,
284
+ daemonPublicKey: args.daemonPublicKey,
285
+ devicePublicKey: args.devicePublicKey,
286
+ pairingSecret: args.pairingSecret,
287
+ sessionSalt: args.sessionSalt,
288
+ ids: args.ids,
289
+ });
290
+ }
291
+ export function deriveDeviceSession(args) {
292
+ return deriveSession({
293
+ localSecretKey: args.deviceSecretKey,
294
+ peerPublicKey: args.daemonPublicKey,
295
+ daemonPublicKey: args.daemonPublicKey,
296
+ devicePublicKey: args.devicePublicKey,
297
+ pairingSecret: args.pairingSecret,
298
+ sessionSalt: args.sessionSalt,
299
+ ids: args.ids,
300
+ });
301
+ }
302
+ /**
303
+ * A fresh 32-byte connection salt. Drawn anew on EVERY (re)connect (page reload, daemon reconnect,
304
+ * peer-online). Both sides contribute one (bilateral) so neither can force the result to repeat.
305
+ */
306
+ export function generateConnSalt() {
307
+ return randomBytes(CONN_SALT_LEN);
308
+ }
309
+ /**
310
+ * Derive the two per-connection AEAD keys from the persisted ROOT keys + the bilateral connection
311
+ * salts. Called identically on both sides — same inputs, same byte order ⇒ same ConnectionKeys, so
312
+ * d2p/p2d still match across the wire.
313
+ *
314
+ * The persisted keys (DeviceSession.keys / StoredDeviceSession.rootKeys) are ROOTS: they are never
315
+ * passed to sealFrame/openFrame. This is the ONLY consumer of the root for AEAD purposes.
316
+ *
317
+ * ikm = the PER-DIRECTION root (rootD2p→d2p, rootP2d→p2d) — no cross-direction mixing.
318
+ * salt = CONN_SALT_PREFIX || phoneConnSalt(32) || daemonConnSalt(32) (bilateral, fixed order).
319
+ * info = per-direction label || 0x00 || ctx, where ctx binds protocolVersion + ids + both salts.
320
+ *
321
+ * NOTE: the salts appear in BOTH the HKDF salt arg and the info ctx. This is deliberate
322
+ * defense-in-depth, not a leftover — the salt slot makes them the extract entropy, the info slot
323
+ * binds them into the per-direction expand context so the two directions can never coincide and a
324
+ * future label edit can't silently drop the salt binding. Redundant but harmless (HKDF salt and
325
+ * info are independent inputs). A root reused across (deviceId, daemonId, version) yields different
326
+ * connKeys, and the two directions stay distinct (invariant 2).
327
+ */
328
+ export function deriveConnectionKeys(args) {
329
+ assertLen(args.rootD2p, SESSION_KEY_LEN, 'rootD2p');
330
+ assertLen(args.rootP2d, SESSION_KEY_LEN, 'rootP2d');
331
+ assertLen(args.phoneConnSalt, CONN_SALT_LEN, 'phoneConnSalt');
332
+ assertLen(args.daemonConnSalt, CONN_SALT_LEN, 'daemonConnSalt');
333
+ const salt = concat(utf8(CONN_SALT_PREFIX), args.phoneConnSalt, args.daemonConnSalt);
334
+ const ctx = concat(Uint8Array.of(0x00), u32be(args.ids.protocolVersion), lp(utf8(args.ids.daemonId)), lp(utf8(args.ids.deviceId)), args.phoneConnSalt, args.daemonConnSalt);
335
+ const d2p = hkdf(sha256, args.rootD2p, salt, concat(utf8(INFO_CONN_D2P), ctx), SESSION_KEY_LEN);
336
+ const p2d = hkdf(sha256, args.rootP2d, salt, concat(utf8(INFO_CONN_P2D), ctx), SESSION_KEY_LEN);
337
+ return { d2p, p2d };
338
+ }
339
+ export function deriveSas(transcriptHash, ids) {
340
+ assertLen(transcriptHash, 32, 'transcriptHash');
341
+ const sasBytes = hkdf(sha256, transcriptHash, utf8(HKDF_SALT), concat(utf8(INFO_SAS), Uint8Array.of(0x00), u32be(ids.protocolVersion)), 4);
342
+ const n = u32beRead(sasBytes) % 1_000_000;
343
+ return n.toString().padStart(SAS_DIGITS, '0');
344
+ }
345
+ // ── nonce (invariant 3 — structural uniqueness) ────────────────────────────────
346
+ export function buildNonce(direction, streamId, seq) {
347
+ if (!Number.isInteger(streamId) || streamId < 0 || streamId > 0xffffffff) {
348
+ throw new RangeError(`streamId out of range: ${streamId}`);
349
+ }
350
+ const nonce = new Uint8Array(NONCE_LEN);
351
+ nonce[0] = direction === 'd2p' ? DIR_BYTE_D2P : DIR_BYTE_P2D;
352
+ nonce.set(u32be(streamId), 1); // bytes 1..4
353
+ // bytes 5..7 stay zero
354
+ nonce.set(u64be(seq), 8); // bytes 8..15 (high 4 zero in M1; seq is u32 on the wire)
355
+ // bytes 16..23 stay zero
356
+ return nonce;
357
+ }
358
+ // ── header field reads (single source of truth — R5) ───────────────────────────
359
+ function readStreamId(headerBytes) {
360
+ if (headerBytes.length < HEADER_MIN_LEN) {
361
+ throw new RangeError('headerBytes too short');
362
+ }
363
+ return u32beRead(headerBytes, HEADER_OFF_STREAM_ID);
364
+ }
365
+ function readSeq(headerBytes) {
366
+ if (headerBytes.length < HEADER_MIN_LEN) {
367
+ throw new RangeError('headerBytes too short');
368
+ }
369
+ return u32beRead(headerBytes, HEADER_OFF_SEQ);
370
+ }
371
+ // ── frame seal/open (invariant 1 — header as AAD) ───────────────────────────────
372
+ export function sealFrame(args) {
373
+ assertLen(args.key, SESSION_KEY_LEN, 'key');
374
+ const streamId = readStreamId(args.headerBytes);
375
+ const seq = readSeq(args.headerBytes);
376
+ const nonce = buildNonce(args.direction, streamId, seq);
377
+ const cipher = xchacha20poly1305(args.key, nonce, args.headerBytes);
378
+ return cipher.encrypt(args.payload);
379
+ }
380
+ export function openFrame(args) {
381
+ assertLen(args.key, SESSION_KEY_LEN, 'key');
382
+ const streamId = readStreamId(args.headerBytes);
383
+ const seq = readSeq(args.headerBytes);
384
+ const nonce = buildNonce(args.direction, streamId, seq);
385
+ const cipher = xchacha20poly1305(args.key, nonce, args.headerBytes);
386
+ return cipher.decrypt(args.ciphertext);
387
+ }
388
+ // ── stateful replay/reorder guard (invariant 3, sequencing half) — per-direction ─
389
+ export function createSealer(direction) {
390
+ return { direction, nextSeq: 0 };
391
+ }
392
+ export function createOpener(direction) {
393
+ return { direction, lastSeq: -1 };
394
+ }
395
+ export function sealNext(sealer, args) {
396
+ // The header is the source of truth for streamId/seq; verify the caller's seq matches.
397
+ const headerSeq = readSeq(args.headerBytes);
398
+ if (headerSeq !== sealer.nextSeq) {
399
+ throw new RangeError(`header seq ${headerSeq} does not match sealer.nextSeq ${sealer.nextSeq}`);
400
+ }
401
+ const ciphertext = sealFrame({
402
+ key: args.key,
403
+ direction: sealer.direction,
404
+ headerBytes: args.headerBytes,
405
+ payload: args.payload,
406
+ });
407
+ const seq = sealer.nextSeq;
408
+ sealer.nextSeq += 1;
409
+ return { seq, ciphertext };
410
+ }
411
+ export function openNext(opener, args) {
412
+ if (args.seq !== opener.lastSeq + 1) {
413
+ throw new RangeError('out-of-order or replayed frame');
414
+ }
415
+ const headerSeq = readSeq(args.headerBytes);
416
+ if (headerSeq !== args.seq) {
417
+ throw new RangeError('out-of-order or replayed frame');
418
+ }
419
+ const plaintext = openFrame({
420
+ key: args.key,
421
+ direction: opener.direction,
422
+ headerBytes: args.headerBytes,
423
+ ciphertext: args.ciphertext,
424
+ });
425
+ opener.lastSeq = args.seq;
426
+ return plaintext;
427
+ }
@@ -0,0 +1,7 @@
1
+ export declare const PAIRING_CODE_ALPHABET = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
2
+ export declare const PAIRING_CODE_CHARS = 12;
3
+ export declare const PAIRING_CODE_RANDOM_BYTES = 8;
4
+ export declare const PAIRING_CODE_SECRET_CONTEXT = "hive-remote-pairing-code-v1:";
5
+ export declare const normalizePairingCode: (input: string) => string | null;
6
+ export declare const formatPairingCode: (input: string) => string;
7
+ export declare const generatePairingCode: (randomBytes: (length: number) => Uint8Array) => string;
@@ -0,0 +1,47 @@
1
+ export const PAIRING_CODE_ALPHABET = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
2
+ export const PAIRING_CODE_CHARS = 12;
3
+ export const PAIRING_CODE_RANDOM_BYTES = 8;
4
+ export const PAIRING_CODE_SECRET_CONTEXT = 'hive-remote-pairing-code-v1:';
5
+ export const normalizePairingCode = (input) => {
6
+ const normalized = input
7
+ .trim()
8
+ .toUpperCase()
9
+ .replace(/[\s-]+/g, '')
10
+ .replace(/O/g, '0')
11
+ .replace(/[IL]/g, '1');
12
+ if (normalized.length !== PAIRING_CODE_CHARS)
13
+ return null;
14
+ for (const ch of normalized) {
15
+ if (!PAIRING_CODE_ALPHABET.includes(ch))
16
+ return null;
17
+ }
18
+ return normalized;
19
+ };
20
+ export const formatPairingCode = (input) => {
21
+ const normalized = normalizePairingCode(input) ?? input.replace(/[\s-]+/g, '').toUpperCase();
22
+ const groups = [];
23
+ for (let i = 0; i < normalized.length; i += 4) {
24
+ groups.push(normalized.slice(i, i + 4));
25
+ }
26
+ return groups.join('-');
27
+ };
28
+ export const generatePairingCode = (randomBytes) => {
29
+ const bytes = randomBytes(PAIRING_CODE_RANDOM_BYTES);
30
+ if (bytes.length < PAIRING_CODE_RANDOM_BYTES) {
31
+ throw new RangeError(`pairing code requires ${PAIRING_CODE_RANDOM_BYTES} random bytes`);
32
+ }
33
+ let acc = 0;
34
+ let bits = 0;
35
+ let out = '';
36
+ for (const byte of bytes) {
37
+ acc = (acc << 8) | byte;
38
+ bits += 8;
39
+ while (bits >= 5 && out.length < PAIRING_CODE_CHARS) {
40
+ bits -= 5;
41
+ out += PAIRING_CODE_ALPHABET[(acc >> bits) & 31];
42
+ }
43
+ if (out.length === PAIRING_CODE_CHARS)
44
+ break;
45
+ }
46
+ return out;
47
+ };