@intentic/sandbox-contract 1.248.0 → 1.250.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 (879) hide show
  1. package/README.md +18 -15
  2. package/dist/chores/chores.d.ts.map +1 -1
  3. package/dist/chores/chores.js.map +1 -1
  4. package/dist/chores/digest.d.ts.map +1 -1
  5. package/dist/chores/digest.js.map +1 -1
  6. package/dist/chores/extension-update.d.ts.map +1 -1
  7. package/dist/chores/extension-update.js.map +1 -1
  8. package/dist/chores/fix-deps.d.ts.map +1 -1
  9. package/dist/chores/fix-deps.js.map +1 -1
  10. package/dist/chores/index.d.ts +2 -2
  11. package/dist/chores/index.d.ts.map +1 -1
  12. package/dist/chores/index.js +1 -1
  13. package/dist/chores/index.js.map +1 -1
  14. package/dist/chores/probes.d.ts.map +1 -1
  15. package/dist/chores/probes.js.map +1 -1
  16. package/dist/chores/prompt.d.ts.map +1 -1
  17. package/dist/chores/prompt.js.map +1 -1
  18. package/dist/chores/stack.d.ts.map +1 -1
  19. package/dist/chores/stack.js.map +1 -1
  20. package/dist/chores/verdict.d.ts +7 -1
  21. package/dist/chores/verdict.d.ts.map +1 -1
  22. package/dist/chores/verdict.js +8 -0
  23. package/dist/chores/verdict.js.map +1 -1
  24. package/dist/contracts/accounts.contract.d.ts.map +1 -1
  25. package/dist/contracts/accounts.contract.js.map +1 -1
  26. package/dist/contracts/activity.contract.d.ts +1 -0
  27. package/dist/contracts/activity.contract.d.ts.map +1 -1
  28. package/dist/contracts/agent.contract.d.ts +12 -205
  29. package/dist/contracts/agent.contract.d.ts.map +1 -1
  30. package/dist/contracts/agent.contract.js +2 -1
  31. package/dist/contracts/agent.contract.js.map +1 -1
  32. package/dist/contracts/agents.contract.d.ts +228 -54
  33. package/dist/contracts/agents.contract.d.ts.map +1 -1
  34. package/dist/contracts/agents.contract.js +11 -2
  35. package/dist/contracts/agents.contract.js.map +1 -1
  36. package/dist/contracts/automations.contract.d.ts +35 -17
  37. package/dist/contracts/automations.contract.d.ts.map +1 -1
  38. package/dist/contracts/automations.contract.js +10 -1
  39. package/dist/contracts/automations.contract.js.map +1 -1
  40. package/dist/contracts/capabilities.contract.d.ts +0 -12
  41. package/dist/contracts/capabilities.contract.d.ts.map +1 -1
  42. package/dist/contracts/capabilities.contract.js +1 -1
  43. package/dist/contracts/capabilities.contract.js.map +1 -1
  44. package/dist/contracts/chores.contract.d.ts.map +1 -1
  45. package/dist/contracts/chores.contract.js.map +1 -1
  46. package/dist/contracts/ci.contract.d.ts +9 -0
  47. package/dist/contracts/ci.contract.d.ts.map +1 -1
  48. package/dist/contracts/endpoints.contract.d.ts.map +1 -1
  49. package/dist/contracts/endpoints.contract.js.map +1 -1
  50. package/dist/contracts/exit.contract.d.ts.map +1 -1
  51. package/dist/contracts/exit.contract.js +1 -1
  52. package/dist/contracts/exit.contract.js.map +1 -1
  53. package/dist/contracts/extensions.contract.d.ts.map +1 -1
  54. package/dist/contracts/extensions.contract.js.map +1 -1
  55. package/dist/contracts/git.contract.d.ts +45 -6
  56. package/dist/contracts/git.contract.d.ts.map +1 -1
  57. package/dist/contracts/git.contract.js +9 -9
  58. package/dist/contracts/git.contract.js.map +1 -1
  59. package/dist/contracts/host.contract.d.ts +2 -0
  60. package/dist/contracts/host.contract.d.ts.map +1 -1
  61. package/dist/contracts/host.contract.js.map +1 -1
  62. package/dist/contracts/intentic.contract.js +1 -1
  63. package/dist/contracts/intentic.contract.js.map +1 -1
  64. package/dist/contracts/logs.contract.d.ts.map +1 -1
  65. package/dist/contracts/logs.contract.js.map +1 -1
  66. package/dist/contracts/loops.contract.d.ts.map +1 -1
  67. package/dist/contracts/loops.contract.js.map +1 -1
  68. package/dist/contracts/personas.contract.d.ts +1 -0
  69. package/dist/contracts/personas.contract.d.ts.map +1 -1
  70. package/dist/contracts/personas.contract.js +1 -1
  71. package/dist/contracts/personas.contract.js.map +1 -1
  72. package/dist/contracts/providers.contract.d.ts.map +1 -1
  73. package/dist/contracts/providers.contract.js.map +1 -1
  74. package/dist/contracts/runner.contract.d.ts +97 -171
  75. package/dist/contracts/runner.contract.d.ts.map +1 -1
  76. package/dist/contracts/runner.contract.js +2 -2
  77. package/dist/contracts/runner.contract.js.map +1 -1
  78. package/dist/contracts/safety.contract.d.ts.map +1 -1
  79. package/dist/contracts/safety.contract.js +1 -1
  80. package/dist/contracts/safety.contract.js.map +1 -1
  81. package/dist/contracts/secrets.contract.d.ts.map +1 -1
  82. package/dist/contracts/secrets.contract.js.map +1 -1
  83. package/dist/contracts/sessions.contract.d.ts +2 -41
  84. package/dist/contracts/sessions.contract.d.ts.map +1 -1
  85. package/dist/contracts/sessions.contract.js +1 -1
  86. package/dist/contracts/sessions.contract.js.map +1 -1
  87. package/dist/contracts/settings.contract.d.ts +8 -18
  88. package/dist/contracts/settings.contract.d.ts.map +1 -1
  89. package/dist/contracts/settings.contract.js.map +1 -1
  90. package/dist/contracts/share.contract.d.ts.map +1 -1
  91. package/dist/contracts/share.contract.js.map +1 -1
  92. package/dist/contracts/skills.contract.d.ts +6 -0
  93. package/dist/contracts/skills.contract.d.ts.map +1 -1
  94. package/dist/contracts/skills.contract.js +13 -4
  95. package/dist/contracts/skills.contract.js.map +1 -1
  96. package/dist/contracts/system.contract.d.ts +49 -73
  97. package/dist/contracts/system.contract.d.ts.map +1 -1
  98. package/dist/contracts/system.contract.js +12 -2
  99. package/dist/contracts/system.contract.js.map +1 -1
  100. package/dist/contracts/usage.contract.d.ts.map +1 -1
  101. package/dist/contracts/usage.contract.js.map +1 -1
  102. package/dist/contracts/vpn.contract.d.ts.map +1 -1
  103. package/dist/contracts/vpn.contract.js +1 -1
  104. package/dist/contracts/vpn.contract.js.map +1 -1
  105. package/dist/contracts/webext.contract.d.ts.map +1 -1
  106. package/dist/contracts/webext.contract.js.map +1 -1
  107. package/dist/contracts/workflows.contract.d.ts +7 -6
  108. package/dist/contracts/workflows.contract.d.ts.map +1 -1
  109. package/dist/contracts/workflows.contract.js +12 -3
  110. package/dist/contracts/workflows.contract.js.map +1 -1
  111. package/dist/contracts/workspace.contract.d.ts.map +1 -1
  112. package/dist/contracts/workspace.contract.js.map +1 -1
  113. package/dist/events/agent-events.d.ts +1237 -0
  114. package/dist/events/agent-events.d.ts.map +1 -0
  115. package/dist/events/agent-events.js +226 -0
  116. package/dist/events/agent-events.js.map +1 -0
  117. package/dist/events/cards.d.ts +404 -0
  118. package/dist/events/cards.d.ts.map +1 -0
  119. package/dist/events/cards.js +179 -0
  120. package/dist/events/cards.js.map +1 -0
  121. package/dist/events/resume.d.ts +23 -0
  122. package/dist/events/resume.d.ts.map +1 -0
  123. package/dist/events/resume.js +31 -0
  124. package/dist/events/resume.js.map +1 -0
  125. package/dist/events/system-events.d.ts +615 -0
  126. package/dist/events/system-events.d.ts.map +1 -0
  127. package/dist/events/system-events.js +64 -0
  128. package/dist/events/system-events.js.map +1 -0
  129. package/dist/events/transcript.d.ts +1755 -0
  130. package/dist/events/transcript.d.ts.map +1 -0
  131. package/dist/events/transcript.js +205 -0
  132. package/dist/events/transcript.js.map +1 -0
  133. package/dist/ids/conversation-ids.d.ts +8 -0
  134. package/dist/ids/conversation-ids.d.ts.map +1 -0
  135. package/dist/{conversation-ids.js → ids/conversation-ids.js} +13 -0
  136. package/dist/ids/conversation-ids.js.map +1 -0
  137. package/dist/ids/hostnames.d.ts.map +1 -0
  138. package/dist/ids/hostnames.js.map +1 -0
  139. package/dist/ids/session-names.d.ts.map +1 -0
  140. package/dist/ids/session-names.js.map +1 -0
  141. package/dist/ids/share-paths.d.ts.map +1 -0
  142. package/dist/ids/share-paths.js.map +1 -0
  143. package/dist/{tunnel-ids.d.ts → ids/tunnel-ids.d.ts} +1 -0
  144. package/dist/ids/tunnel-ids.d.ts.map +1 -0
  145. package/dist/{tunnel-ids.js → ids/tunnel-ids.js} +1 -0
  146. package/dist/ids/tunnel-ids.js.map +1 -0
  147. package/dist/index.d.ts +429 -450
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/index.js +54 -46
  150. package/dist/index.js.map +1 -1
  151. package/dist/{agent-catalog.d.ts → models/agent-catalog.d.ts} +2 -2
  152. package/dist/models/agent-catalog.d.ts.map +1 -0
  153. package/dist/models/agent-catalog.js.map +1 -0
  154. package/dist/models/agent-runtimes.d.ts.map +1 -0
  155. package/dist/models/agent-runtimes.js.map +1 -0
  156. package/dist/{fast-tier.d.ts → models/fast-tier.d.ts} +1 -1
  157. package/dist/models/fast-tier.d.ts.map +1 -0
  158. package/dist/models/fast-tier.js.map +1 -0
  159. package/dist/models/model-order.d.ts.map +1 -0
  160. package/dist/{model-order.js → models/model-order.js} +2 -0
  161. package/dist/models/model-order.js.map +1 -0
  162. package/dist/{model-pins.d.ts → models/model-pins.d.ts} +1 -1
  163. package/dist/models/model-pins.d.ts.map +1 -0
  164. package/dist/models/model-pins.js.map +1 -0
  165. package/dist/{model-roles.d.ts → models/model-roles.d.ts} +0 -33
  166. package/dist/models/model-roles.d.ts.map +1 -0
  167. package/dist/{model-roles.js → models/model-roles.js} +0 -35
  168. package/dist/models/model-roles.js.map +1 -0
  169. package/dist/{plan-pools.d.ts → models/plan-pools.d.ts} +1 -1
  170. package/dist/models/plan-pools.d.ts.map +1 -0
  171. package/dist/models/plan-pools.js.map +1 -0
  172. package/dist/models/prompt-complexity.d.ts.map +1 -0
  173. package/dist/models/prompt-complexity.js.map +1 -0
  174. package/dist/models/provider-specs.d.ts.map +1 -0
  175. package/dist/models/provider-specs.js.map +1 -0
  176. package/dist/policy/approvals-execution.d.ts.map +1 -0
  177. package/dist/policy/approvals-execution.js.map +1 -0
  178. package/dist/{batch-runs.d.ts → policy/batch-runs.d.ts} +5 -1
  179. package/dist/policy/batch-runs.d.ts.map +1 -0
  180. package/dist/{batch-runs.js → policy/batch-runs.js} +10 -7
  181. package/dist/policy/batch-runs.js.map +1 -0
  182. package/dist/policy/capability-env.d.ts.map +1 -0
  183. package/dist/policy/capability-env.js.map +1 -0
  184. package/dist/policy/capability-secrets.d.ts.map +1 -0
  185. package/dist/policy/capability-secrets.js.map +1 -0
  186. package/dist/{card-status.d.ts → policy/card-status.d.ts} +2 -2
  187. package/dist/policy/card-status.d.ts.map +1 -0
  188. package/dist/{card-status.js → policy/card-status.js} +1 -5
  189. package/dist/policy/card-status.js.map +1 -0
  190. package/dist/{command-classes.d.ts → policy/command-classes.d.ts} +6 -2
  191. package/dist/policy/command-classes.d.ts.map +1 -0
  192. package/dist/{command-classes.js → policy/command-classes.js} +48 -11
  193. package/dist/policy/command-classes.js.map +1 -0
  194. package/dist/{command-run.d.ts → policy/command-run.d.ts} +1 -1
  195. package/dist/policy/command-run.d.ts.map +1 -0
  196. package/dist/policy/command-run.js.map +1 -0
  197. package/dist/policy/control-scopes.d.ts +16 -0
  198. package/dist/policy/control-scopes.d.ts.map +1 -0
  199. package/dist/policy/control-scopes.js +26 -0
  200. package/dist/policy/control-scopes.js.map +1 -0
  201. package/dist/policy/credential-material.d.ts.map +1 -0
  202. package/dist/policy/credential-material.js.map +1 -0
  203. package/dist/policy/needs-action.d.ts.map +1 -0
  204. package/dist/policy/needs-action.js.map +1 -0
  205. package/dist/policy/output-fields.d.ts.map +1 -0
  206. package/dist/policy/output-fields.js.map +1 -0
  207. package/dist/policy/overlay-lint.d.ts.map +1 -0
  208. package/dist/policy/overlay-lint.js.map +1 -0
  209. package/dist/policy/owner-ticket.d.ts.map +1 -0
  210. package/dist/{owner-ticket.js → policy/owner-ticket.js} +1 -1
  211. package/dist/policy/owner-ticket.js.map +1 -0
  212. package/dist/{safety-policy.d.ts → policy/safety-policy.d.ts} +6 -5
  213. package/dist/policy/safety-policy.d.ts.map +1 -0
  214. package/dist/{safety-policy.js → policy/safety-policy.js} +12 -12
  215. package/dist/policy/safety-policy.js.map +1 -0
  216. package/dist/policy/search-globs.d.ts.map +1 -0
  217. package/dist/policy/search-globs.js.map +1 -0
  218. package/dist/protocol/container-requirements.d.ts +20 -0
  219. package/dist/protocol/container-requirements.d.ts.map +1 -0
  220. package/dist/protocol/container-requirements.js +23 -0
  221. package/dist/protocol/container-requirements.js.map +1 -0
  222. package/dist/{host-protocol.d.ts → protocol/host-protocol.d.ts} +1 -0
  223. package/dist/protocol/host-protocol.d.ts.map +1 -0
  224. package/dist/{host-protocol.js → protocol/host-protocol.js} +1 -0
  225. package/dist/protocol/host-protocol.js.map +1 -0
  226. package/dist/protocol/ingress-contract.d.ts.map +1 -0
  227. package/dist/{ingress-contract.js → protocol/ingress-contract.js} +1 -1
  228. package/dist/protocol/ingress-contract.js.map +1 -0
  229. package/dist/protocol/ingress-protocol.d.ts.map +1 -0
  230. package/dist/protocol/ingress-protocol.js.map +1 -0
  231. package/dist/protocol/listener-protocol.d.ts.map +1 -0
  232. package/dist/{listener-protocol.js → protocol/listener-protocol.js} +1 -1
  233. package/dist/protocol/listener-protocol.js.map +1 -0
  234. package/dist/{peer-dial.d.ts → protocol/peer-dial.d.ts} +4 -1
  235. package/dist/protocol/peer-dial.d.ts.map +1 -0
  236. package/dist/{peer-dial.js → protocol/peer-dial.js} +51 -10
  237. package/dist/protocol/peer-dial.js.map +1 -0
  238. package/dist/protocol/peer-mcp-server.d.ts.map +1 -0
  239. package/dist/protocol/peer-mcp-server.js.map +1 -0
  240. package/dist/protocol/request-id.d.ts.map +1 -0
  241. package/dist/protocol/request-id.js.map +1 -0
  242. package/dist/protocol/routes.d.ts.map +1 -0
  243. package/dist/protocol/routes.js.map +1 -0
  244. package/dist/{runner-protocol.d.ts → protocol/runner-protocol.d.ts} +1 -0
  245. package/dist/protocol/runner-protocol.d.ts.map +1 -0
  246. package/dist/{runner-protocol.js → protocol/runner-protocol.js} +2 -1
  247. package/dist/protocol/runner-protocol.js.map +1 -0
  248. package/dist/protocol/sse.d.ts.map +1 -0
  249. package/dist/protocol/sse.js.map +1 -0
  250. package/dist/{terminal-protocol.d.ts → protocol/terminal-protocol.d.ts} +1 -3
  251. package/dist/protocol/terminal-protocol.d.ts.map +1 -0
  252. package/dist/protocol/terminal-protocol.js.map +1 -0
  253. package/dist/protocol/webext-links.d.ts.map +1 -0
  254. package/dist/protocol/webext-links.js.map +1 -0
  255. package/dist/{webext-protocol.d.ts → protocol/webext-protocol.d.ts} +1 -0
  256. package/dist/protocol/webext-protocol.d.ts.map +1 -0
  257. package/dist/{webext-protocol.js → protocol/webext-protocol.js} +1 -0
  258. package/dist/protocol/webext-protocol.js.map +1 -0
  259. package/dist/schemas/activity.d.ts +2 -0
  260. package/dist/schemas/activity.d.ts.map +1 -1
  261. package/dist/schemas/activity.js +4 -0
  262. package/dist/schemas/activity.js.map +1 -1
  263. package/dist/schemas/agent.d.ts +16 -4
  264. package/dist/schemas/agent.d.ts.map +1 -1
  265. package/dist/schemas/agent.js +21 -4
  266. package/dist/schemas/agent.js.map +1 -1
  267. package/dist/schemas/agents.d.ts +17 -4
  268. package/dist/schemas/agents.d.ts.map +1 -1
  269. package/dist/schemas/agents.js +15 -4
  270. package/dist/schemas/agents.js.map +1 -1
  271. package/dist/schemas/approvals.d.ts.map +1 -1
  272. package/dist/schemas/approvals.js.map +1 -1
  273. package/dist/schemas/automations.d.ts +54 -28
  274. package/dist/schemas/automations.d.ts.map +1 -1
  275. package/dist/schemas/automations.js +26 -8
  276. package/dist/schemas/automations.js.map +1 -1
  277. package/dist/schemas/capabilities.d.ts +0 -8
  278. package/dist/schemas/capabilities.d.ts.map +1 -1
  279. package/dist/schemas/capabilities.js +0 -4
  280. package/dist/schemas/capabilities.js.map +1 -1
  281. package/dist/schemas/ci.d.ts +10 -0
  282. package/dist/schemas/ci.d.ts.map +1 -1
  283. package/dist/schemas/ci.js +9 -1
  284. package/dist/schemas/ci.js.map +1 -1
  285. package/dist/schemas/codebase-health.d.ts.map +1 -1
  286. package/dist/schemas/codebase-health.js.map +1 -1
  287. package/dist/schemas/devices.d.ts +92 -0
  288. package/dist/schemas/devices.d.ts.map +1 -1
  289. package/dist/schemas/devices.js +12 -1
  290. package/dist/schemas/devices.js.map +1 -1
  291. package/dist/schemas/engines.d.ts.map +1 -1
  292. package/dist/schemas/engines.js.map +1 -1
  293. package/dist/schemas/environment.d.ts.map +1 -1
  294. package/dist/schemas/environment.js.map +1 -1
  295. package/dist/schemas/exit.d.ts.map +1 -1
  296. package/dist/schemas/exit.js.map +1 -1
  297. package/dist/schemas/extension-updates.d.ts.map +1 -1
  298. package/dist/schemas/extension-updates.js.map +1 -1
  299. package/dist/schemas/git-history.d.ts.map +1 -1
  300. package/dist/schemas/git-history.js.map +1 -1
  301. package/dist/schemas/git.d.ts +80 -16
  302. package/dist/schemas/git.d.ts.map +1 -1
  303. package/dist/schemas/git.js +37 -25
  304. package/dist/schemas/git.js.map +1 -1
  305. package/dist/schemas/history.d.ts.map +1 -1
  306. package/dist/schemas/history.js.map +1 -1
  307. package/dist/schemas/hosts.d.ts.map +1 -1
  308. package/dist/schemas/hosts.js.map +1 -1
  309. package/dist/schemas/inventory.d.ts.map +1 -1
  310. package/dist/schemas/inventory.js.map +1 -1
  311. package/dist/schemas/issues.d.ts +0 -1
  312. package/dist/schemas/issues.d.ts.map +1 -1
  313. package/dist/schemas/issues.js +0 -1
  314. package/dist/schemas/issues.js.map +1 -1
  315. package/dist/schemas/logs.d.ts.map +1 -1
  316. package/dist/schemas/logs.js.map +1 -1
  317. package/dist/schemas/loops.d.ts.map +1 -1
  318. package/dist/schemas/loops.js +1 -1
  319. package/dist/schemas/loops.js.map +1 -1
  320. package/dist/schemas/maintenance.d.ts.map +1 -1
  321. package/dist/schemas/maintenance.js.map +1 -1
  322. package/dist/schemas/marketplace.d.ts +0 -4
  323. package/dist/schemas/marketplace.d.ts.map +1 -1
  324. package/dist/schemas/panels.d.ts.map +1 -1
  325. package/dist/schemas/panels.js.map +1 -1
  326. package/dist/schemas/personas.d.ts +2 -1
  327. package/dist/schemas/personas.d.ts.map +1 -1
  328. package/dist/schemas/personas.js +6 -2
  329. package/dist/schemas/personas.js.map +1 -1
  330. package/dist/schemas/plan-limits.d.ts +2 -4
  331. package/dist/schemas/plan-limits.d.ts.map +1 -1
  332. package/dist/schemas/plan-limits.js +5 -8
  333. package/dist/schemas/plan-limits.js.map +1 -1
  334. package/dist/schemas/ports.d.ts.map +1 -1
  335. package/dist/schemas/ports.js.map +1 -1
  336. package/dist/schemas/provider-oauth.d.ts.map +1 -1
  337. package/dist/schemas/provider-oauth.js.map +1 -1
  338. package/dist/schemas/provider-subscriptions.d.ts +1 -1
  339. package/dist/schemas/provider-subscriptions.d.ts.map +1 -1
  340. package/dist/schemas/provider-subscriptions.js +1 -1
  341. package/dist/schemas/provider-subscriptions.js.map +1 -1
  342. package/dist/schemas/public.d.ts.map +1 -1
  343. package/dist/schemas/public.js.map +1 -1
  344. package/dist/schemas/push.d.ts.map +1 -1
  345. package/dist/schemas/push.js.map +1 -1
  346. package/dist/schemas/secrets.d.ts.map +1 -1
  347. package/dist/schemas/secrets.js.map +1 -1
  348. package/dist/schemas/settings.d.ts +11 -9
  349. package/dist/schemas/settings.d.ts.map +1 -1
  350. package/dist/schemas/settings.js +22 -7
  351. package/dist/schemas/settings.js.map +1 -1
  352. package/dist/schemas/share.d.ts.map +1 -1
  353. package/dist/schemas/share.js.map +1 -1
  354. package/dist/schemas/shared.d.ts +4 -0
  355. package/dist/schemas/shared.d.ts.map +1 -1
  356. package/dist/schemas/shared.js +3 -0
  357. package/dist/schemas/shared.js.map +1 -1
  358. package/dist/schemas/system.d.ts +6 -0
  359. package/dist/schemas/system.d.ts.map +1 -1
  360. package/dist/schemas/system.js +10 -0
  361. package/dist/schemas/system.js.map +1 -1
  362. package/dist/schemas/terminal.d.ts.map +1 -1
  363. package/dist/schemas/terminal.js.map +1 -1
  364. package/dist/schemas/usage.d.ts.map +1 -1
  365. package/dist/schemas/usage.js.map +1 -1
  366. package/dist/schemas/vpn.d.ts.map +1 -1
  367. package/dist/schemas/vpn.js.map +1 -1
  368. package/dist/schemas/webext.d.ts.map +1 -1
  369. package/dist/schemas/webext.js.map +1 -1
  370. package/dist/schemas/workflows.d.ts +66 -9
  371. package/dist/schemas/workflows.d.ts.map +1 -1
  372. package/dist/schemas/workflows.js +6 -5
  373. package/dist/schemas/workflows.js.map +1 -1
  374. package/dist/schemas/workspace-repos.d.ts.map +1 -1
  375. package/dist/schemas/workspace-repos.js.map +1 -1
  376. package/dist/schemas/workspace-search.d.ts.map +1 -1
  377. package/dist/schemas/workspace-search.js.map +1 -1
  378. package/dist/schemas/workspace-setup.d.ts.map +1 -1
  379. package/dist/schemas/workspace-setup.js.map +1 -1
  380. package/dist/schemas/workspace-tree.d.ts.map +1 -1
  381. package/dist/schemas/workspace-tree.js.map +1 -1
  382. package/dist/state/arrival.d.ts.map +1 -0
  383. package/dist/{arrival.js → state/arrival.js} +1 -1
  384. package/dist/state/arrival.js.map +1 -0
  385. package/dist/state/contract-lock.d.ts.map +1 -0
  386. package/dist/{contract-lock.js → state/contract-lock.js} +1 -1
  387. package/dist/state/contract-lock.js.map +1 -0
  388. package/dist/{definition.d.ts → state/definition.d.ts} +21 -17
  389. package/dist/state/definition.d.ts.map +1 -0
  390. package/dist/{definition.js → state/definition.js} +4 -4
  391. package/dist/state/definition.js.map +1 -0
  392. package/dist/state/history-state.d.ts.map +1 -0
  393. package/dist/{history-state.js → state/history-state.js} +1 -0
  394. package/dist/state/history-state.js.map +1 -0
  395. package/dist/state/runtime-state.d.ts.map +1 -0
  396. package/dist/state/runtime-state.js.map +1 -0
  397. package/dist/state/starter.d.ts.map +1 -0
  398. package/dist/state/starter.js.map +1 -0
  399. package/dist/state/state-portability.d.ts.map +1 -0
  400. package/dist/state/state-portability.js.map +1 -0
  401. package/dist/state/versions.d.ts.map +1 -0
  402. package/dist/state/versions.js.map +1 -0
  403. package/dist/{workspace-state.d.ts → state/workspace-state.d.ts} +8 -0
  404. package/dist/state/workspace-state.d.ts.map +1 -0
  405. package/dist/{workspace-state.js → state/workspace-state.js} +25 -0
  406. package/dist/state/workspace-state.js.map +1 -0
  407. package/dist/{documents.d.ts → text/documents.d.ts} +1 -1
  408. package/dist/text/documents.d.ts.map +1 -0
  409. package/dist/{documents.js → text/documents.js} +1 -1
  410. package/dist/text/documents.js.map +1 -0
  411. package/dist/text/embed.d.ts.map +1 -0
  412. package/dist/text/embed.js.map +1 -0
  413. package/dist/text/mentions.d.ts.map +1 -0
  414. package/dist/text/mentions.js.map +1 -0
  415. package/dist/text/model-answer.d.ts +3 -0
  416. package/dist/text/model-answer.d.ts.map +1 -0
  417. package/dist/text/model-answer.js +3 -0
  418. package/dist/text/model-answer.js.map +1 -0
  419. package/dist/text/path-refs.d.ts.map +1 -0
  420. package/dist/text/path-refs.js.map +1 -0
  421. package/dist/{shell-regions.d.ts → text/shell-regions.d.ts} +1 -1
  422. package/dist/text/shell-regions.d.ts.map +1 -0
  423. package/dist/text/shell-regions.js.map +1 -0
  424. package/dist/text/title.d.ts.map +1 -0
  425. package/dist/text/title.js.map +1 -0
  426. package/dist/{transcript-fold.d.ts → text/transcript-fold.d.ts} +2 -1
  427. package/dist/text/transcript-fold.d.ts.map +1 -0
  428. package/dist/{transcript-fold.js → text/transcript-fold.js} +2 -16
  429. package/dist/text/transcript-fold.js.map +1 -0
  430. package/dist/text/whisper.d.ts +3 -0
  431. package/dist/text/whisper.d.ts.map +1 -0
  432. package/dist/text/whisper.js +11 -0
  433. package/dist/text/whisper.js.map +1 -0
  434. package/dist/{workflow-faults.d.ts → text/workflow-faults.d.ts} +1 -1
  435. package/dist/text/workflow-faults.d.ts.map +1 -0
  436. package/dist/{workflow-faults.js → text/workflow-faults.js} +1 -1
  437. package/dist/text/workflow-faults.js.map +1 -0
  438. package/package.json +70 -70
  439. package/src/chores/chores.test.ts +4 -10
  440. package/src/chores/chores.ts +148 -392
  441. package/src/chores/digest.ts +8 -28
  442. package/src/chores/extension-update.ts +3 -8
  443. package/src/chores/fix-deps.ts +4 -18
  444. package/src/chores/index.ts +2 -2
  445. package/src/chores/probes.test.ts +7 -43
  446. package/src/chores/probes.ts +62 -167
  447. package/src/chores/prompt.ts +10 -34
  448. package/src/chores/stack.test.ts +6 -45
  449. package/src/chores/stack.ts +27 -118
  450. package/src/chores/verdict.test.ts +101 -80
  451. package/src/chores/verdict.ts +54 -99
  452. package/src/contracts/accounts.contract.ts +4 -19
  453. package/src/contracts/agent.contract.ts +7 -22
  454. package/src/contracts/agents.contract.ts +25 -71
  455. package/src/contracts/automations.contract.ts +14 -30
  456. package/src/contracts/capabilities.contract.ts +8 -35
  457. package/src/contracts/chores.contract.ts +4 -15
  458. package/src/contracts/endpoints.contract.ts +5 -22
  459. package/src/contracts/exit.contract.ts +7 -30
  460. package/src/contracts/extensions.contract.ts +8 -30
  461. package/src/contracts/git.contract.ts +25 -49
  462. package/src/contracts/host.contract.ts +9 -44
  463. package/src/contracts/intentic.contract.ts +1 -1
  464. package/src/contracts/logs.contract.ts +3 -13
  465. package/src/contracts/loops.contract.ts +9 -40
  466. package/src/contracts/personas.contract.ts +10 -35
  467. package/src/contracts/providers.contract.ts +4 -17
  468. package/src/contracts/runner.contract.ts +12 -39
  469. package/src/contracts/safety.contract.ts +5 -14
  470. package/src/contracts/secrets.contract.ts +4 -22
  471. package/src/contracts/sessions.contract.ts +1 -1
  472. package/src/contracts/settings.contract.ts +4 -10
  473. package/src/contracts/share.contract.ts +3 -9
  474. package/src/contracts/skills.contract.ts +21 -19
  475. package/src/contracts/system.contract.ts +26 -52
  476. package/src/contracts/usage.contract.ts +7 -21
  477. package/src/contracts/vpn.contract.ts +9 -16
  478. package/src/contracts/webext.contract.ts +9 -25
  479. package/src/contracts/workflows.contract.ts +34 -58
  480. package/src/contracts/workspace.contract.ts +19 -50
  481. package/src/events/agent-events.ts +345 -0
  482. package/src/events/cards.ts +286 -0
  483. package/src/{events.test.ts → events/resume.test.ts} +4 -19
  484. package/src/events/resume.ts +60 -0
  485. package/src/events/system-events.ts +139 -0
  486. package/src/events/transcript.ts +320 -0
  487. package/src/{conversation-ids.test.ts → ids/conversation-ids.test.ts} +25 -13
  488. package/src/ids/conversation-ids.ts +178 -0
  489. package/src/ids/hostnames.ts +129 -0
  490. package/src/ids/session-names.ts +29 -0
  491. package/src/ids/share-paths.ts +43 -0
  492. package/src/{tunnel-ids.test.ts → ids/tunnel-ids.test.ts} +1 -14
  493. package/src/ids/tunnel-ids.ts +29 -0
  494. package/src/index.ts +71 -87
  495. package/src/{agent-catalog.test.ts → models/agent-catalog.test.ts} +19 -93
  496. package/src/models/agent-catalog.ts +174 -0
  497. package/src/models/agent-runtimes.ts +201 -0
  498. package/src/models/capability-ledger.test.ts +84 -0
  499. package/src/{fast-tier.test.ts → models/fast-tier.test.ts} +7 -18
  500. package/src/models/fast-tier.ts +36 -0
  501. package/src/{model-order.test.ts → models/model-order.test.ts} +54 -40
  502. package/src/models/model-order.ts +171 -0
  503. package/src/{model-pins.test.ts → models/model-pins.test.ts} +12 -46
  504. package/src/models/model-pins.ts +57 -0
  505. package/src/models/model-roles.test.ts +38 -0
  506. package/src/models/model-roles.ts +180 -0
  507. package/src/{plan-pools.test.ts → models/plan-pools.test.ts} +6 -11
  508. package/src/models/plan-pools.ts +65 -0
  509. package/src/{prompt-complexity.test.ts → models/prompt-complexity.test.ts} +8 -60
  510. package/src/models/prompt-complexity.ts +215 -0
  511. package/src/{provider-specs.test.ts → models/provider-specs.test.ts} +18 -47
  512. package/src/models/provider-specs.ts +272 -0
  513. package/src/policy/approvals-execution.ts +58 -0
  514. package/src/{batch-runs.test.ts → policy/batch-runs.test.ts} +4 -20
  515. package/src/policy/batch-runs.ts +137 -0
  516. package/src/policy/capability-secrets.ts +5 -0
  517. package/src/{card-status.ts → policy/card-status.ts} +11 -26
  518. package/src/{command-classes.test.ts → policy/command-classes.test.ts} +11 -118
  519. package/src/policy/command-classes.ts +395 -0
  520. package/src/policy/command-run.ts +65 -0
  521. package/src/policy/control-scopes.ts +38 -0
  522. package/src/{credential-material.test.ts → policy/credential-material.test.ts} +4 -26
  523. package/src/policy/credential-material.ts +91 -0
  524. package/src/policy/needs-action.ts +5 -0
  525. package/src/policy/output-fields.ts +86 -0
  526. package/src/policy/overlay-lint.ts +100 -0
  527. package/src/{owner-ticket.test.ts → policy/owner-ticket.test.ts} +1 -1
  528. package/src/{owner-ticket.ts → policy/owner-ticket.ts} +9 -31
  529. package/src/policy/safety-policy.test.ts +84 -0
  530. package/src/policy/safety-policy.ts +142 -0
  531. package/src/policy/search-globs.ts +60 -0
  532. package/src/protocol/container-requirements.test.ts +72 -0
  533. package/src/protocol/container-requirements.ts +58 -0
  534. package/src/protocol/host-protocol.ts +29 -0
  535. package/src/protocol/ingress-contract.ts +103 -0
  536. package/src/{ingress-protocol.test.ts → protocol/ingress-protocol.test.ts} +25 -90
  537. package/src/protocol/ingress-protocol.ts +441 -0
  538. package/src/protocol/listener-protocol.ts +75 -0
  539. package/src/{peer-dial.test.ts → protocol/peer-dial.test.ts} +52 -1
  540. package/src/protocol/peer-dial.ts +207 -0
  541. package/src/{peer-mcp-server.ts → protocol/peer-mcp-server.ts} +16 -41
  542. package/src/protocol/request-id.ts +5 -0
  543. package/src/{routes.test.ts → protocol/routes.test.ts} +14 -22
  544. package/src/protocol/routes.ts +159 -0
  545. package/src/protocol/runner-protocol.ts +197 -0
  546. package/src/protocol/terminal-protocol.ts +13 -0
  547. package/src/protocol/webext-links.ts +50 -0
  548. package/src/protocol/webext-protocol.ts +24 -0
  549. package/src/schemas/activity.ts +22 -30
  550. package/src/schemas/agent.ts +130 -238
  551. package/src/schemas/agents.ts +165 -483
  552. package/src/schemas/approvals.ts +23 -71
  553. package/src/schemas/automations.ts +142 -250
  554. package/src/schemas/capabilities.ts +127 -414
  555. package/src/schemas/ci.ts +56 -108
  556. package/src/schemas/codebase-health.ts +7 -11
  557. package/src/schemas/devices.ts +103 -321
  558. package/src/schemas/engines.ts +16 -44
  559. package/src/schemas/environment.ts +41 -91
  560. package/src/schemas/exit.ts +24 -81
  561. package/src/schemas/extension-updates.ts +42 -87
  562. package/src/schemas/git-history.ts +30 -84
  563. package/src/schemas/git.ts +141 -256
  564. package/src/schemas/history.ts +14 -40
  565. package/src/schemas/hosts.ts +9 -15
  566. package/src/schemas/inventory.ts +8 -10
  567. package/src/schemas/issues.ts +66 -134
  568. package/src/schemas/logs.ts +15 -34
  569. package/src/schemas/loops.ts +46 -163
  570. package/src/schemas/maintenance.ts +47 -172
  571. package/src/schemas/panels.ts +20 -45
  572. package/src/schemas/personas.ts +50 -200
  573. package/src/schemas/plan-limits.ts +58 -197
  574. package/src/schemas/ports.ts +14 -32
  575. package/src/schemas/provider-oauth.ts +23 -76
  576. package/src/schemas/provider-subscriptions.ts +4 -13
  577. package/src/schemas/public.ts +4 -15
  578. package/src/schemas/push.ts +8 -36
  579. package/src/schemas/secrets.ts +20 -64
  580. package/src/schemas/settings.ts +182 -602
  581. package/src/schemas/share.ts +14 -32
  582. package/src/schemas/shared.ts +14 -13
  583. package/src/schemas/system.ts +46 -78
  584. package/src/schemas/terminal.ts +41 -120
  585. package/src/schemas/usage.ts +44 -233
  586. package/src/schemas/version-seam.test.ts +9 -26
  587. package/src/schemas/vpn.ts +27 -64
  588. package/src/schemas/webext.ts +22 -53
  589. package/src/schemas/workflows.ts +57 -183
  590. package/src/schemas/workspace-repos.ts +12 -24
  591. package/src/schemas/workspace-search.ts +17 -35
  592. package/src/schemas/workspace-setup.ts +4 -11
  593. package/src/schemas/workspace-tree.ts +32 -91
  594. package/src/state/arrival.ts +109 -0
  595. package/src/state/contract-lock.test.ts +17 -0
  596. package/src/state/contract-lock.ts +49 -0
  597. package/src/state/definition.ts +143 -0
  598. package/src/state/history-state.ts +103 -0
  599. package/src/{runtime-state.test.ts → state/runtime-state.test.ts} +3 -10
  600. package/src/state/runtime-state.ts +63 -0
  601. package/src/state/starter.ts +5 -0
  602. package/src/state/state-portability.ts +27 -0
  603. package/src/state/versions.ts +26 -0
  604. package/src/{workspace-state.test.ts → state/workspace-state.test.ts} +65 -172
  605. package/src/state/workspace-state.ts +669 -0
  606. package/src/{documents.test.ts → text/documents.test.ts} +1 -1
  607. package/src/text/documents.ts +42 -0
  608. package/src/text/embed.ts +132 -0
  609. package/src/text/mentions.ts +21 -0
  610. package/src/text/model-answer.ts +9 -0
  611. package/src/text/path-refs.ts +39 -0
  612. package/src/text/shell-regions.ts +224 -0
  613. package/src/{title.test.ts → text/title.test.ts} +13 -32
  614. package/src/text/title.ts +202 -0
  615. package/src/{transcript-fold.test.ts → text/transcript-fold.test.ts} +5 -83
  616. package/src/{transcript-fold.ts → text/transcript-fold.ts} +65 -170
  617. package/src/text/whisper.test.ts +19 -0
  618. package/src/text/whisper.ts +17 -0
  619. package/src/{workflow-faults.test.ts → text/workflow-faults.test.ts} +6 -24
  620. package/src/{workflow-faults.ts → text/workflow-faults.ts} +20 -60
  621. package/dist/agent-catalog.d.ts.map +0 -1
  622. package/dist/agent-catalog.js.map +0 -1
  623. package/dist/agent-runtimes.d.ts.map +0 -1
  624. package/dist/agent-runtimes.js.map +0 -1
  625. package/dist/approvals-execution.d.ts.map +0 -1
  626. package/dist/approvals-execution.js.map +0 -1
  627. package/dist/arrival.d.ts.map +0 -1
  628. package/dist/arrival.js.map +0 -1
  629. package/dist/batch-runs.d.ts.map +0 -1
  630. package/dist/batch-runs.js.map +0 -1
  631. package/dist/capability-env.d.ts.map +0 -1
  632. package/dist/capability-env.js.map +0 -1
  633. package/dist/capability-secrets.d.ts.map +0 -1
  634. package/dist/capability-secrets.js.map +0 -1
  635. package/dist/card-status.d.ts.map +0 -1
  636. package/dist/card-status.js.map +0 -1
  637. package/dist/command-classes.d.ts.map +0 -1
  638. package/dist/command-classes.js.map +0 -1
  639. package/dist/command-run.d.ts.map +0 -1
  640. package/dist/command-run.js.map +0 -1
  641. package/dist/contract-lock.d.ts.map +0 -1
  642. package/dist/contract-lock.js.map +0 -1
  643. package/dist/conversation-ids.d.ts +0 -4
  644. package/dist/conversation-ids.d.ts.map +0 -1
  645. package/dist/conversation-ids.js.map +0 -1
  646. package/dist/credential-material.d.ts.map +0 -1
  647. package/dist/credential-material.js.map +0 -1
  648. package/dist/definition.d.ts.map +0 -1
  649. package/dist/definition.js.map +0 -1
  650. package/dist/documents.d.ts.map +0 -1
  651. package/dist/documents.js.map +0 -1
  652. package/dist/embed.d.ts.map +0 -1
  653. package/dist/embed.js.map +0 -1
  654. package/dist/events.d.ts +0 -4336
  655. package/dist/events.d.ts.map +0 -1
  656. package/dist/events.js +0 -725
  657. package/dist/events.js.map +0 -1
  658. package/dist/fast-tier.d.ts.map +0 -1
  659. package/dist/fast-tier.js.map +0 -1
  660. package/dist/history-state.d.ts.map +0 -1
  661. package/dist/history-state.js.map +0 -1
  662. package/dist/host-protocol.d.ts.map +0 -1
  663. package/dist/host-protocol.js.map +0 -1
  664. package/dist/hostnames.d.ts.map +0 -1
  665. package/dist/hostnames.js.map +0 -1
  666. package/dist/ingress-contract.d.ts.map +0 -1
  667. package/dist/ingress-contract.js.map +0 -1
  668. package/dist/ingress-protocol.d.ts.map +0 -1
  669. package/dist/ingress-protocol.js.map +0 -1
  670. package/dist/listener-protocol.d.ts.map +0 -1
  671. package/dist/listener-protocol.js.map +0 -1
  672. package/dist/mentions.d.ts.map +0 -1
  673. package/dist/mentions.js.map +0 -1
  674. package/dist/model-order.d.ts.map +0 -1
  675. package/dist/model-order.js.map +0 -1
  676. package/dist/model-pins.d.ts.map +0 -1
  677. package/dist/model-pins.js.map +0 -1
  678. package/dist/model-roles.d.ts.map +0 -1
  679. package/dist/model-roles.js.map +0 -1
  680. package/dist/needs-action.d.ts.map +0 -1
  681. package/dist/needs-action.js.map +0 -1
  682. package/dist/output-fields.d.ts.map +0 -1
  683. package/dist/output-fields.js.map +0 -1
  684. package/dist/overlay-lint.d.ts.map +0 -1
  685. package/dist/overlay-lint.js.map +0 -1
  686. package/dist/owner-ticket.d.ts.map +0 -1
  687. package/dist/owner-ticket.js.map +0 -1
  688. package/dist/path-refs.d.ts.map +0 -1
  689. package/dist/path-refs.js.map +0 -1
  690. package/dist/peer-dial.d.ts.map +0 -1
  691. package/dist/peer-dial.js.map +0 -1
  692. package/dist/peer-mcp-server.d.ts.map +0 -1
  693. package/dist/peer-mcp-server.js.map +0 -1
  694. package/dist/plan-pools.d.ts.map +0 -1
  695. package/dist/plan-pools.js.map +0 -1
  696. package/dist/prompt-complexity.d.ts.map +0 -1
  697. package/dist/prompt-complexity.js.map +0 -1
  698. package/dist/provider-specs.d.ts.map +0 -1
  699. package/dist/provider-specs.js.map +0 -1
  700. package/dist/request-id.d.ts.map +0 -1
  701. package/dist/request-id.js.map +0 -1
  702. package/dist/routes.d.ts.map +0 -1
  703. package/dist/routes.js.map +0 -1
  704. package/dist/runner-protocol.d.ts.map +0 -1
  705. package/dist/runner-protocol.js.map +0 -1
  706. package/dist/runtime-state.d.ts.map +0 -1
  707. package/dist/runtime-state.js.map +0 -1
  708. package/dist/safety-policy.d.ts.map +0 -1
  709. package/dist/safety-policy.js.map +0 -1
  710. package/dist/search-globs.d.ts.map +0 -1
  711. package/dist/search-globs.js.map +0 -1
  712. package/dist/session-names.d.ts.map +0 -1
  713. package/dist/session-names.js.map +0 -1
  714. package/dist/share-paths.d.ts.map +0 -1
  715. package/dist/share-paths.js.map +0 -1
  716. package/dist/shell-regions.d.ts.map +0 -1
  717. package/dist/shell-regions.js.map +0 -1
  718. package/dist/sse.d.ts.map +0 -1
  719. package/dist/sse.js.map +0 -1
  720. package/dist/starter.d.ts.map +0 -1
  721. package/dist/starter.js.map +0 -1
  722. package/dist/state-portability.d.ts.map +0 -1
  723. package/dist/state-portability.js.map +0 -1
  724. package/dist/terminal-protocol.d.ts.map +0 -1
  725. package/dist/terminal-protocol.js.map +0 -1
  726. package/dist/title.d.ts.map +0 -1
  727. package/dist/title.js.map +0 -1
  728. package/dist/transcript-fold.d.ts.map +0 -1
  729. package/dist/transcript-fold.js.map +0 -1
  730. package/dist/tunnel-ids.d.ts.map +0 -1
  731. package/dist/tunnel-ids.js.map +0 -1
  732. package/dist/versions.d.ts.map +0 -1
  733. package/dist/versions.js.map +0 -1
  734. package/dist/webext-links.d.ts.map +0 -1
  735. package/dist/webext-links.js.map +0 -1
  736. package/dist/webext-protocol.d.ts.map +0 -1
  737. package/dist/webext-protocol.js.map +0 -1
  738. package/dist/workflow-faults.d.ts.map +0 -1
  739. package/dist/workflow-faults.js.map +0 -1
  740. package/dist/workspace-state.d.ts.map +0 -1
  741. package/dist/workspace-state.js.map +0 -1
  742. package/src/agent-catalog.ts +0 -316
  743. package/src/agent-runtimes.ts +0 -419
  744. package/src/approvals-execution.ts +0 -96
  745. package/src/arrival.ts +0 -160
  746. package/src/batch-runs.ts +0 -188
  747. package/src/capability-ledger.test.ts +0 -140
  748. package/src/capability-secrets.ts +0 -20
  749. package/src/command-classes.ts +0 -617
  750. package/src/command-run.ts +0 -78
  751. package/src/contract-lock.test.ts +0 -23
  752. package/src/contract-lock.ts +0 -66
  753. package/src/conversation-ids.ts +0 -207
  754. package/src/credential-material.ts +0 -181
  755. package/src/definition.ts +0 -207
  756. package/src/documents.ts +0 -67
  757. package/src/embed.ts +0 -164
  758. package/src/events.ts +0 -1870
  759. package/src/fast-tier.ts +0 -72
  760. package/src/history-state.ts +0 -174
  761. package/src/host-protocol.ts +0 -36
  762. package/src/hostnames.ts +0 -180
  763. package/src/ingress-contract.ts +0 -157
  764. package/src/ingress-protocol.ts +0 -625
  765. package/src/listener-protocol.ts +0 -96
  766. package/src/mentions.ts +0 -25
  767. package/src/model-order.ts +0 -262
  768. package/src/model-pins.ts +0 -132
  769. package/src/model-roles.test.ts +0 -52
  770. package/src/model-roles.ts +0 -320
  771. package/src/needs-action.ts +0 -14
  772. package/src/output-fields.ts +0 -111
  773. package/src/overlay-lint.ts +0 -116
  774. package/src/path-refs.ts +0 -59
  775. package/src/peer-dial.ts +0 -163
  776. package/src/plan-pools.ts +0 -92
  777. package/src/prompt-complexity.ts +0 -334
  778. package/src/provider-specs.ts +0 -432
  779. package/src/request-id.ts +0 -41
  780. package/src/routes.ts +0 -219
  781. package/src/runner-protocol.ts +0 -239
  782. package/src/runtime-state.ts +0 -140
  783. package/src/safety-policy.test.ts +0 -88
  784. package/src/safety-policy.ts +0 -258
  785. package/src/search-globs.ts +0 -76
  786. package/src/session-names.ts +0 -44
  787. package/src/share-paths.ts +0 -68
  788. package/src/shell-regions.ts +0 -289
  789. package/src/starter.ts +0 -13
  790. package/src/state-portability.ts +0 -56
  791. package/src/terminal-protocol.ts +0 -16
  792. package/src/title.ts +0 -267
  793. package/src/tunnel-ids.ts +0 -57
  794. package/src/versions.ts +0 -48
  795. package/src/webext-links.ts +0 -90
  796. package/src/webext-protocol.ts +0 -27
  797. package/src/workspace-state.ts +0 -1090
  798. /package/dist/{hostnames.d.ts → ids/hostnames.d.ts} +0 -0
  799. /package/dist/{hostnames.js → ids/hostnames.js} +0 -0
  800. /package/dist/{session-names.d.ts → ids/session-names.d.ts} +0 -0
  801. /package/dist/{session-names.js → ids/session-names.js} +0 -0
  802. /package/dist/{share-paths.d.ts → ids/share-paths.d.ts} +0 -0
  803. /package/dist/{share-paths.js → ids/share-paths.js} +0 -0
  804. /package/dist/{agent-catalog.js → models/agent-catalog.js} +0 -0
  805. /package/dist/{agent-runtimes.d.ts → models/agent-runtimes.d.ts} +0 -0
  806. /package/dist/{agent-runtimes.js → models/agent-runtimes.js} +0 -0
  807. /package/dist/{fast-tier.js → models/fast-tier.js} +0 -0
  808. /package/dist/{model-order.d.ts → models/model-order.d.ts} +0 -0
  809. /package/dist/{model-pins.js → models/model-pins.js} +0 -0
  810. /package/dist/{plan-pools.js → models/plan-pools.js} +0 -0
  811. /package/dist/{prompt-complexity.d.ts → models/prompt-complexity.d.ts} +0 -0
  812. /package/dist/{prompt-complexity.js → models/prompt-complexity.js} +0 -0
  813. /package/dist/{provider-specs.d.ts → models/provider-specs.d.ts} +0 -0
  814. /package/dist/{provider-specs.js → models/provider-specs.js} +0 -0
  815. /package/dist/{approvals-execution.d.ts → policy/approvals-execution.d.ts} +0 -0
  816. /package/dist/{approvals-execution.js → policy/approvals-execution.js} +0 -0
  817. /package/dist/{capability-env.d.ts → policy/capability-env.d.ts} +0 -0
  818. /package/dist/{capability-env.js → policy/capability-env.js} +0 -0
  819. /package/dist/{capability-secrets.d.ts → policy/capability-secrets.d.ts} +0 -0
  820. /package/dist/{capability-secrets.js → policy/capability-secrets.js} +0 -0
  821. /package/dist/{command-run.js → policy/command-run.js} +0 -0
  822. /package/dist/{credential-material.d.ts → policy/credential-material.d.ts} +0 -0
  823. /package/dist/{credential-material.js → policy/credential-material.js} +0 -0
  824. /package/dist/{needs-action.d.ts → policy/needs-action.d.ts} +0 -0
  825. /package/dist/{needs-action.js → policy/needs-action.js} +0 -0
  826. /package/dist/{output-fields.d.ts → policy/output-fields.d.ts} +0 -0
  827. /package/dist/{output-fields.js → policy/output-fields.js} +0 -0
  828. /package/dist/{overlay-lint.d.ts → policy/overlay-lint.d.ts} +0 -0
  829. /package/dist/{overlay-lint.js → policy/overlay-lint.js} +0 -0
  830. /package/dist/{owner-ticket.d.ts → policy/owner-ticket.d.ts} +0 -0
  831. /package/dist/{search-globs.d.ts → policy/search-globs.d.ts} +0 -0
  832. /package/dist/{search-globs.js → policy/search-globs.js} +0 -0
  833. /package/dist/{ingress-contract.d.ts → protocol/ingress-contract.d.ts} +0 -0
  834. /package/dist/{ingress-protocol.d.ts → protocol/ingress-protocol.d.ts} +0 -0
  835. /package/dist/{ingress-protocol.js → protocol/ingress-protocol.js} +0 -0
  836. /package/dist/{listener-protocol.d.ts → protocol/listener-protocol.d.ts} +0 -0
  837. /package/dist/{peer-mcp-server.d.ts → protocol/peer-mcp-server.d.ts} +0 -0
  838. /package/dist/{peer-mcp-server.js → protocol/peer-mcp-server.js} +0 -0
  839. /package/dist/{request-id.d.ts → protocol/request-id.d.ts} +0 -0
  840. /package/dist/{request-id.js → protocol/request-id.js} +0 -0
  841. /package/dist/{routes.d.ts → protocol/routes.d.ts} +0 -0
  842. /package/dist/{routes.js → protocol/routes.js} +0 -0
  843. /package/dist/{sse.d.ts → protocol/sse.d.ts} +0 -0
  844. /package/dist/{sse.js → protocol/sse.js} +0 -0
  845. /package/dist/{terminal-protocol.js → protocol/terminal-protocol.js} +0 -0
  846. /package/dist/{webext-links.d.ts → protocol/webext-links.d.ts} +0 -0
  847. /package/dist/{webext-links.js → protocol/webext-links.js} +0 -0
  848. /package/dist/{arrival.d.ts → state/arrival.d.ts} +0 -0
  849. /package/dist/{contract-lock.d.ts → state/contract-lock.d.ts} +0 -0
  850. /package/dist/{history-state.d.ts → state/history-state.d.ts} +0 -0
  851. /package/dist/{runtime-state.d.ts → state/runtime-state.d.ts} +0 -0
  852. /package/dist/{runtime-state.js → state/runtime-state.js} +0 -0
  853. /package/dist/{starter.d.ts → state/starter.d.ts} +0 -0
  854. /package/dist/{starter.js → state/starter.js} +0 -0
  855. /package/dist/{state-portability.d.ts → state/state-portability.d.ts} +0 -0
  856. /package/dist/{state-portability.js → state/state-portability.js} +0 -0
  857. /package/dist/{versions.d.ts → state/versions.d.ts} +0 -0
  858. /package/dist/{versions.js → state/versions.js} +0 -0
  859. /package/dist/{embed.d.ts → text/embed.d.ts} +0 -0
  860. /package/dist/{embed.js → text/embed.js} +0 -0
  861. /package/dist/{mentions.d.ts → text/mentions.d.ts} +0 -0
  862. /package/dist/{mentions.js → text/mentions.js} +0 -0
  863. /package/dist/{path-refs.d.ts → text/path-refs.d.ts} +0 -0
  864. /package/dist/{path-refs.js → text/path-refs.js} +0 -0
  865. /package/dist/{shell-regions.js → text/shell-regions.js} +0 -0
  866. /package/dist/{title.d.ts → text/title.d.ts} +0 -0
  867. /package/dist/{title.js → text/title.js} +0 -0
  868. /package/src/{hostnames.test.ts → ids/hostnames.test.ts} +0 -0
  869. /package/src/{share-paths.test.ts → ids/share-paths.test.ts} +0 -0
  870. /package/src/{capability-env.ts → policy/capability-env.ts} +0 -0
  871. /package/src/{overlay-lint.test.ts → policy/overlay-lint.test.ts} +0 -0
  872. /package/src/{search-globs.test.ts → policy/search-globs.test.ts} +0 -0
  873. /package/src/{ingress-contract.test.ts → protocol/ingress-contract.test.ts} +0 -0
  874. /package/src/{peer-mcp-server.test.ts → protocol/peer-mcp-server.test.ts} +0 -0
  875. /package/src/{sse.ts → protocol/sse.ts} +0 -0
  876. /package/src/{versions.test.ts → state/versions.test.ts} +0 -0
  877. /package/src/{embed.test.ts → text/embed.test.ts} +0 -0
  878. /package/src/{mentions.test.ts → text/mentions.test.ts} +0 -0
  879. /package/src/{path-refs.test.ts → text/path-refs.test.ts} +0 -0
@@ -1,96 +0,0 @@
1
- import { z } from "zod";
2
- import { ActivityStatusSchema } from "./schemas/activity.js";
3
-
4
- /* The wire between the daemon and an extension's realtime-listener GATEWAY process (ext-discord, ext-slack,
5
- * ext-telegram, ext-whatsapp, ext-imap): the four provider-scoped routes app.ts mounts under
6
- * /listeners/:provider, state, dispatch, failure, status. These shapes used to live daemon-side only, with
7
- * every gateway hand-writing its own copy of the payloads as untyped literals; a field rename broke five
8
- * producers silently. They live in the contract now so BOTH ends compile against one declaration, the daemon
9
- * parses with the schemas, the gateways (via @intentic/connector-runtime) type against the inferred types. */
10
-
11
- // One normalized inbound event, serialized as a JSON line in the automation's payload, and the JSON body a
12
- // realtime source POSTs to /listeners/<provider>/dispatch. A zod schema (not a bare interface) because it's
13
- // parsed from an extension gateway's request; `provider` and `type` are open strings, the source is
14
- // extension-declared (contributes.listener), not a core enum.
15
- export const ListenerMessageSchema = z.object({
16
- provider: z.string().min(1),
17
- type: z.string().min(1),
18
- id: z.string(),
19
- channelId: z.string(),
20
- author: z.object({ id: z.string(), name: z.string() }),
21
- content: z.string(),
22
- // Discord message: it @mentions one of our bots or replies to a bot's message. Voice events never set it.
23
- mentioned: z.boolean().optional(),
24
- // CI pipeline event: the ref it ran on. Top-level rather than inside `extra` for the same reason
25
- // `mentioned` is, the dispatcher MATCHES on it, and a narrowing axis the trigger can name has to be
26
- // a field of the message rather than a key in a provider's opaque bag.
27
- branch: z.string().optional(),
28
- // Prior channel messages (chronological) fetched when a bot is tagged, so the agent can reason about why.
29
- // Kept a top-level field (not in `extra`) so it reaches the model's payload but stays out of the activity
30
- // feed, which logs only content/extra.
31
- history: z
32
- .array(
33
- z.object({
34
- author: z.object({ id: z.string(), name: z.string() }),
35
- content: z.string(),
36
- timestamp: z.string(),
37
- self: z.boolean().optional(),
38
- }),
39
- )
40
- .optional(),
41
- timestamp: z.string(),
42
- // Provider-specific fields (discord message: guildId, attachments; voice_utterance: path;
43
- // voice_transcript: path, participants, durationSeconds).
44
- extra: z.record(z.string(), z.unknown()).optional(),
45
- });
46
- export type ListenerMessage = z.infer<typeof ListenerMessageSchema>;
47
-
48
- // One ndjson frame of a /listeners/<provider>/dispatch?stream=1 response, a text delta for one automation's
49
- // reply, the provider's own failure sentence, or that automation's terminal marker. A type, not a schema: the
50
- // DAEMON produces these (listener.routes.ts), so nothing parses them from untrusted input.
51
- export interface ListenerDispatchFrame {
52
- readonly automationId: string;
53
- readonly delta?: string;
54
- // The turn refused or broke, in the provider's own words, forwarded verbatim because a gateway delivers
55
- // into the owner's own channel, where the actual sentence is the useful thing.
56
- readonly failed?: string;
57
- readonly end?: boolean;
58
- }
59
-
60
- /* WHERE ONE CAPABILITY'S LINK-A-DEVICE CEREMONY STANDS (whatsapp), reported every status tick.
61
- *
62
- * A CODE IS NOT THE ONLY THING WORTH SAYING, and publishing only codes is what made a phone that had never
63
- * linked read as connected: the seconds before the first code, a gateway that just restarted, and a number
64
- * WhatsApp refused all looked identical from the daemon's side, an absent code, so the card fell through to
65
- * "ready" and the owner was sent away from the one screen that could have shown them the step. Each of those is
66
- * its own state here, and every one of them means NOT PAIRED YET.
67
- *
68
- * `since` stamps the CURRENT code. WhatsApp closes an unpaired socket after a minute or so and each reopen mints
69
- * a fresh code, so a code is a thing with an age, the card says how old the one on screen is rather than
70
- * leaving the owner to type a dead one twice. */
71
- export const ListenerPairingSchema = z.object({
72
- // waiting: a socket is up and the code hasn't arrived (or the last one died with its socket).
73
- // code: `code` is live, type it on the phone. failed: `detail` says what WhatsApp refused.
74
- state: z.enum(["waiting", "code", "failed"]),
75
- code: z.string().optional(),
76
- detail: z.string().optional(),
77
- since: z.number().optional(),
78
- });
79
- export type ListenerPairing = z.infer<typeof ListenerPairingSchema>;
80
-
81
- // Push-based listener status: a gateway process POSTs its live connection/voice snapshot to
82
- // /listeners/<provider>/status, and the activity route reads it from there, the daemon holds no provider
83
- // connection of its own to probe. The body IS the ActivityStatus the /activity/status probe used to build from
84
- // in-process discord singletons, plus the per-gateway extras that ride the same channel: whether whisper is
85
- // present (discord's voice-pending signal) and each unpaired capability's ceremony by id (whatsapp's
86
- // link-a-device flow, the capability card renders it as the step the owner is standing in front of).
87
- export const ListenerStatusSchema = ActivityStatusSchema.extend({
88
- whisperReady: z.boolean().optional(),
89
- pairing: z.record(z.string(), ListenerPairingSchema).optional(),
90
- });
91
- export type ListenerStatus = z.infer<typeof ListenerStatusSchema>;
92
-
93
- // A connection's place in the reconcile lifecycle, as the status snapshot reports it: `idle` = up but holding
94
- // nothing on purpose (no enabled listener automation to connect for), `pairing` = the socket is up but the
95
- // credential is a ceremony nobody has completed yet (whatsapp), the rest are the connect loop.
96
- export type ListenerGatewayPhase = "idle" | "ready" | "pairing" | "connecting" | "disconnected";
package/src/mentions.ts DELETED
@@ -1,25 +0,0 @@
1
- /* @-FILE MENTIONS, the two readers of the same text: the composer, which sends every path a message names as
2
- * an attachment (the daemon resolves workspace-relative paths and folds them into the prompt as a Read-tool
3
- * note, no upload involved), and the fold, which draws a message's UPLOADED files as chips and its inline
4
- * mentions as nothing at all, because they are already visible in the words. One tokenizer, so what the
5
- * composer counts as a mention is what the transcript declines to redraw. */
6
-
7
- // Every path-looking @ token in text, including tokens that are not valid composer mentions. Broad on purpose:
8
- // old turns persisted these candidates in the shared attachment field, and the fold needs the broad set to
9
- // recognise and hide those inline paths rather than redraw them as file chips.
10
- export const mentionedPathTokens = (text: string): string[] => {
11
- const paths = new Set<string>();
12
- for (const match of text.matchAll(/(?:^|\s)@([^\s@]+)/g)) {
13
- const token = (match[1] as string).replace(/[.,;:!?)]+$/, ``);
14
- if (token.includes(`/`) || token.includes(`.`)) {
15
- paths.add(token);
16
- }
17
- }
18
- return [...paths];
19
- };
20
-
21
- // Workspace paths referenced as @-mentions in a prompt, deduped. A scoped package script prefix from copied
22
- // pnpm output has the same opening shape (`@scope/package:test:`) but is not a file; accepting it hands the
23
- // daemon a phantom attachment which only becomes visible when a transcript redraws the wire fields.
24
- const PACKAGE_SCRIPT = /^[^/]+\/[^/]+:[^/]+$/u;
25
- export const mentionPaths = (text: string): string[] => mentionedPathTokens(text).filter((token) => !PACKAGE_SCRIPT.test(token));
@@ -1,262 +0,0 @@
1
- /* HOW A MODEL CATALOG IS ORDERED, one rule for every provider, because only one provider publishes an order
2
- * worth keeping.
3
- *
4
- * Anthropic's REST /v1/models answers newest-first: that IS a provider opinion, and Claude's catalog rides it
5
- * (claude-models.ts). Every other provider here is read through an OpenAI-compatible /v1/models. Codex and
6
- * Gemini and Kimi via the bundled translator, or out of xAI's "Did you mean" rejection, and those
7
- * endpoints publish a SET, not a ranking: they hand the ids back in whatever order their registry iterates,
8
- * which in practice is alphabetical. Reading that as a preference is what put "GPT 5.4 Mini" at the head of the
9
- * Codex group with GPT 5.6 below it, and what made a fresh Codex conversation start on whichever id happened to
10
- * sort first, models[0] is the provider default.
11
- *
12
- * So for those providers the order is DERIVED from the id, out of the only two facts an id reliably carries:
13
- * which TIER the model is (the adjective) and which RELEASE it is (the numbers). Both are provider-agnostic,
14
- * every vendor names its models the same way, which is what lets the daemon's four catalog services and the
15
- * web's picker share one rule instead of each inventing a local one. */
16
-
17
- // A version-ish segment: digits and dots, optionally prefixed by the vendor's version marker (`4`, `5.1`, `v2`,
18
- // `k3`, `k2.7`, `20251001`). Kimi is the one provider that fuses the marker with the generation; treating `k3`
19
- // as a name made the current flagship look unversioned, so K2.x sorted above it. Everything else is a NAME
20
- // segment and belongs to the family, which is what makes the split below exhaustive.
21
- const VERSION_SEGMENT = /^(?:v|k)?[\d.]+$/i;
22
-
23
- // A date stamp rather than a version component: six digits or more (20251001, 250514). The distinction is not
24
- // cosmetic, claude-opus-4-1-20250805 (Opus 4.1) and claude-opus-4-20250514 (Opus 4.0) compare as (4,1) vs (4)
25
- // with the stamps held apart, and as (4,1,20250805) vs (4,20250514), the OLDER model winning, without.
26
- const DATE_SEGMENT = /^\d{6,}$/;
27
-
28
- const segmentsOf = (id: string): string[] => id.split(/[-_]/);
29
-
30
- // A model's FAMILY, its id with every version-ish segment dropped, so claude-opus-5 and claude-opus-4-8 land
31
- // together (as do gpt-5.1/gpt-5, and claude-haiku-4-5-20251001 with its date suffix). Derived, never listed: a
32
- // family that ships tomorrow groups itself. The id is the stable key here, labels get renamed, ids don't.
33
- export const familyOf = (id: string): string => {
34
- const stem = segmentsOf(id)
35
- .filter((segment) => !VERSION_SEGMENT.test(segment))
36
- .join("-");
37
- // An all-numeric id (and an ACP row's empty one) has no stem to speak of; it stands as its own family.
38
- return stem === "" ? id : stem;
39
- };
40
-
41
- export interface ModelRelease {
42
- // The version components in id order: gpt-5.1 → [5, 1], claude-opus-4-8 → [4, 8]. EMPTY for an unversioned
43
- // id (kimi-latest, gemini-pro-agent), which therefore reads as the oldest of its tier: a rolling alias names
44
- // no release, and inventing one for it would outrank the models that do name theirs.
45
- readonly version: readonly number[];
46
- // The id's date stamp, 0 for none, the tiebreak between two builds of the SAME version.
47
- readonly date: number;
48
- }
49
-
50
- export const releaseOf = (id: string): ModelRelease => {
51
- const numeric = segmentsOf(id)
52
- .filter((segment) => VERSION_SEGMENT.test(segment))
53
- .map((segment) => segment.replace(/^[vk]/i, ""));
54
- const stamps = numeric.filter((segment) => DATE_SEGMENT.test(segment)).map(Number);
55
- return {
56
- version: numeric
57
- .filter((segment) => !DATE_SEGMENT.test(segment))
58
- .flatMap((segment) => segment.split(".").map(Number))
59
- .filter((component) => Number.isFinite(component)),
60
- date: Math.max(0, ...stamps),
61
- };
62
- };
63
-
64
- // Newest first. A missing component reads as -1, so gpt-5 sorts under gpt-5.1 and an unversioned id sorts under
65
- // every versioned one; the date stamp breaks what is left.
66
- const compareRelease = (left: ModelRelease, right: ModelRelease): number => {
67
- for (let index = 0; index < Math.max(left.version.length, right.version.length); index += 1) {
68
- const diff = (right.version[index] ?? -1) - (left.version[index] ?? -1);
69
- if (diff !== 0) {
70
- return diff;
71
- }
72
- }
73
- return right.date - left.date;
74
- };
75
-
76
- /* THE ONE CURATED FACT in this file, and the only one the providers publish nowhere the app can read: which tier
77
- * is the frontier and which is the cheap one. It ranks FAMILIES, never models, and it is a vocabulary of tier
78
- * ADJECTIVES rather than a table of ids, that scoping is the whole point, because a per-model ranking table
79
- * failed here once already. The words are the ones every vendor reaches for, so a release that ships tomorrow
80
- * ranks itself as long as it is named like its predecessors, and a release named some other way ranks as unknown.
81
- *
82
- * An UNKNOWN family LEADS rather than sinks, and that direction is the point: the ranking this replaced sank
83
- * unrecognized ids to a floor below the everyday tier, so a brand-new flagship sorted beneath the model it
84
- * replaced. An id carrying no tier word at all is the provider's BASE line (gpt-5.6, grok-4, kimi-k2), which is
85
- * exactly the line a user reaches for, and a family nobody here has heard of is far likelier to be the next
86
- * flagship than the next budget tier. Being wrong costs one row's position; being wrong the other way hides a
87
- * launch. */
88
- const TIER_RANK: Readonly<Record<string, number>> = {
89
- // Frontier: the tier a vendor ships last and charges most for.
90
- opus: 0,
91
- fable: 0,
92
- pro: 0,
93
- max: 0,
94
- ultra: 0,
95
- heavy: 0,
96
- // Everyday: the workhorse a step below the frontier.
97
- sonnet: 1,
98
- flash: 1,
99
- mini: 1,
100
- // Efficient: the cheap/fast end, the rung whose whole purpose is to cost less than the one above it.
101
- haiku: 2,
102
- // An open-weights model a vendor re-serves beside its own (gpt-oss-120b on Google's channel) is that rung by
103
- // construction: it is there to be the free/cheap option next to the frontier line, never the flagship. Without
104
- // it the id carries no tier word at all and would LEAD the section it sits in.
105
- oss: 2,
106
- lite: 2,
107
- nano: 2,
108
- fast: 2,
109
- small: 2,
110
- };
111
-
112
- const UNRANKED = -1;
113
-
114
- /* Some providers name a capability ladder INSIDE one release instead of using the cross-release adjectives
115
- * above. Codex 5.6's Sol/Terra/Luna rows are that shape: they must remain together ahead of the older 5.5 line,
116
- * but their order is not an arbitrary id tiebreak. Sol is the strongest, followed by Terra, then Luna. Keeping
117
- * this as a separate rank lets release recency still win across generations (a future GPT 5.7 base model must
118
- * not be buried under a recognized 5.6 suffix), while the three siblings sort by their real tier. */
119
- const RELEASE_TIER_RANK: Readonly<Record<string, number>> = {
120
- sol: 0,
121
- terra: 1,
122
- luna: 2,
123
- };
124
-
125
- const lastRankOf = (family: string, ranks: Readonly<Record<string, number>>): number => {
126
- let rank = UNRANKED;
127
- for (const segment of family.split("-")) {
128
- const found = ranks[segment];
129
- if (found !== undefined) {
130
- rank = found;
131
- }
132
- }
133
- return rank;
134
- };
135
-
136
- const releaseTierRankOf = (family: string): number => lastRankOf(family, RELEASE_TIER_RANK);
137
-
138
- /* HOW HARD AN ID SAYS IT WILL THINK. A routed catalog does not publish one row per model, it publishes one row
139
- * per model PER THINKING LEVEL, spelling the level into the id: `gemini-3.6-flash-high` and
140
- * `gemini-3.5-flash-extra-low` are the same Flash at opposite ends of its reasoning budget.
141
- *
142
- * Which the ranking above cannot see at all, and that blind spot has a direction: `high` and `low` are both
143
- * unrecognized words, so two variants of one model tie on tier and the RELEASE tiebreak settles them, and the
144
- * newest variant a channel publishes is routinely the high one. The quick model, whose entire job is to be the
145
- * cheap rung, would therefore reach for the most expensive reading of the cheapest model it can find.
146
- *
147
- * That is not a small mis-sort. Thinking is the difference between a commit message that is in the box before
148
- * the user has finished reading the file list and one that arrives half a minute later, measured at ~2s versus
149
- * ~27s on the same model and the same diff (claude/claude-one-shot.ts, which disables thinking for the rungs where a
150
- * request parameter can). For a routed rung there is no such parameter: the id IS the setting, so this ranking
151
- * is the only place the choice can be made.
152
- *
153
- * Read ONLY by the cheap-end order. A picker orders a catalog by what a person reaches for, and a person
154
- * pinning `-high` on purpose means it, see compareCheapestFirst for the seam this belongs to. */
155
- const THINKING_RANK: Readonly<Record<string, number>> = {
156
- minimal: 0,
157
- none: 0,
158
- low: 1,
159
- medium: 3,
160
- high: 4,
161
- max: 4,
162
- // Not a level but a switch, and the loudest statement an id can make about this: a channel that vends
163
- // `kimi-k2` beside `kimi-k2-thinking` is naming the same model with its reasoning turned on.
164
- thinking: 4,
165
- };
166
-
167
- /* An id naming NO level sits between the two ends rather than at either, the provider's own default, which for
168
- * a model that can think is usually some thinking. Ranking it cheapest would seat a silent default ahead of an
169
- * id that explicitly says `minimal`, and ranking it dearest would bury every model whose channel publishes no
170
- * variants at all (Anthropic's, Kimi's) beneath one that does. Neither is what the id claims. */
171
- const UNSTATED_THINKING = 2;
172
-
173
- const thinkingRankOf = (family: string): number => {
174
- const rank = lastRankOf(family, THINKING_RANK);
175
- return rank === UNRANKED ? UNSTATED_THINKING : rank;
176
- };
177
-
178
- // The LAST recognized word wins, because tier words compose and the rightmost is the most specific one:
179
- // gemini-flash-lite is the cheap end of Flash, gpt-codex-max the frontier end of Codex.
180
- export const tierRankOf = (family: string): number => lastRankOf(family, TIER_RANK);
181
-
182
- // The canonical order of two model ids: broad tier first, then release, then a tier declared within that release.
183
- // Hand it straight to Array#toSorted, that sort is stable, so two ids this rule cannot separate keep the order
184
- // they arrived in (for Claude, the provider's own).
185
- export const compareModelIds = (left: string, right: string): number => {
186
- const leftFamily = familyOf(left);
187
- const rightFamily = familyOf(right);
188
- return (
189
- tierRankOf(leftFamily) - tierRankOf(rightFamily) ||
190
- compareRelease(releaseOf(left), releaseOf(right)) ||
191
- releaseTierRankOf(leftFamily) - releaseTierRankOf(rightFamily)
192
- );
193
- };
194
-
195
- /* The order for a catalog its endpoint published as a SET. Codex, Gemini, Kimi and Grok, i.e. everything but
196
- * Anthropic's ranked list. Falling back on arrival order is what the rule above does with a tie, and for a RANKED
197
- * catalog that is exactly right: the tie is the provider's own opinion, so claude-opus-5 stays ahead of
198
- * claude-fable-5. For a set there is no opinion to keep, and the header of this file assumed the leftover order
199
- * was at least alphabetical, it is not. A subscription can hand tied rows back in whatever order its registry
200
- * iterated THIS request, so the tie decides which model a fresh conversation opens on and can flip between
201
- * catalog refreshes.
202
- *
203
- * So a set breaks its own ties on the id. Which sibling that seats first is arbitrary, but it is the same
204
- * arbitrary answer every refresh, which is the property `default` actually needs. */
205
- export const compareUnrankedModelIds = (left: string, right: string): number => compareModelIds(left, right) || left.localeCompare(right);
206
-
207
- /* THE SAME TIER SCALE READ FROM THE OTHER END, for the one caller that wants the WEAKEST model rather than the
208
- * strongest: the quick model behind an automatic helper (the commit message written at land time). A picker
209
- * orders a catalog by what a user reaches for; this orders it by what a helper should spend, and the two are
210
- * exact opposites, so they share TIER_RANK rather than each naming its own list of cheap ids.
211
- *
212
- * The direction of UNRANKED is the reason this can't just be compareModelIds reversed. There, an unrecognized
213
- * family LEADS, because an id carrying no tier word is the provider's base line and a family nobody here has
214
- * heard of is likelier the next flagship than the next budget tier. Reversing would therefore seat exactly that
215
- * unknown-probably-flagship id as the cheap pick. So unknown sinks to LAST here too, both orders agree it is
216
- * not the efficient rung, and the cheap end is only ever a family whose tier word is actually recognized.
217
- * Falling off the end of a catalog with no efficient tier at all (Kimi publishes none) is then honest: the
218
- * newest of what it does publish, chosen by the release tiebreak below. */
219
- export const compareCheapestFirst = (left: string, right: string): number => {
220
- const leftFamily = familyOf(left);
221
- const rightFamily = familyOf(right);
222
- return (
223
- tierRankOf(rightFamily) - tierRankOf(leftFamily) ||
224
- // BEFORE release, and that placement is the point: two rows of one model differing only in thinking
225
- // level are the same model, so recency has nothing to say between them, and letting it speak is what
226
- // seated the high variant. Tier still wins over both, a thinking Haiku is cheaper than a silent Opus.
227
- thinkingRankOf(leftFamily) - thinkingRankOf(rightFamily) ||
228
- compareRelease(releaseOf(left), releaseOf(right)) ||
229
- releaseTierRankOf(rightFamily) - releaseTierRankOf(leftFamily)
230
- );
231
- };
232
-
233
- /* IS `candidate` A STRICTLY CHEAPER RUNG THAN `pick`, on the tier ladder alone. The predicate automatic tier
234
- * selection runs on (prompt-complexity.ts judges the turn, fast-tier.ts spends this to find something cheaper
235
- * to run it on), and it lives here because it is a question about the tier vocabulary, which is this file's
236
- * one curated fact.
237
- *
238
- * TIER ONLY, deliberately: not release, not thinking level. A downgrade has to be legible as a downgrade, and
239
- * "the same model one release older" or "the same model with less thinking" are not the saving this mechanism
240
- * promises, they are a different turn wearing the user's model name. Haiku under Sonnet is; Sonnet 4 under
241
- * Sonnet 5 is not.
242
- *
243
- * AN UNRANKED FAMILY IS FALSE ON EITHER SIDE, and both directions matter. A candidate carrying no tier word is
244
- * a provider's base line or a family nobody here has heard of, so calling it the budget option is a guess, and
245
- * the scale already says the likelier reading is "next flagship". The PICK being unranked is the subtler half:
246
- * the safety argument for automatic tier selection is that it can only ever route DOWN, and against an id whose
247
- * tier is unknown nothing can be shown to be down. So an unrecognised pick is left alone rather than swapped
248
- * for something merely known to be cheap, which is how a saving turns into a bill. */
249
- export const isCheaperRung = (candidate: string, pick: string): boolean => {
250
- const candidateRank = tierRankOf(familyOf(candidate));
251
- const pickRank = tierRankOf(familyOf(pick));
252
- return candidateRank !== UNRANKED && pickRank !== UNRANKED && candidateRank > pickRank;
253
- };
254
-
255
- /* WOULD RUNNING THIS ID MAKE THE MODEL THINK, as far as its name admits, which for a routed catalog is as far
256
- * as anyone can tell without running it. True only for an id that spells out a level ABOVE the quiet end, so an
257
- * ordinary id nobody has annotated (claude-haiku-4-5, kimi-k2) is never accused of it.
258
- *
259
- * Exported for one job: a settings row that lets someone pin the quick model has to be able to say that the row
260
- * they picked is the thinking one. The ordering above keeps Auto off these by construction; a PIN is a
261
- * deliberate choice and is honoured as written, which only works if the choice is legible when it is made. */
262
- export const namesThinking = (id: string): boolean => thinkingRankOf(familyOf(id)) > UNSTATED_THINKING;
package/src/model-pins.ts DELETED
@@ -1,132 +0,0 @@
1
- import { modelsFor } from "./agent-catalog.js";
2
- import type { AgentProvider, ModelPin } from "./schemas/agent.js";
3
-
4
- /* WHICH MODELS A ROLE MAY RUN, IN THE ORDER TO TRY THEM. One resolver over every list in
5
- * settings.modelRoles, and the browser and the daemon both read it.
6
- *
7
- * IT IS AN ORDER, NOT A MODEL, and that is the shape of every list this file answers for. A single pick is a
8
- * single point of failure: the account it names spends its allowance on the chat all morning, and the role
9
- * fails on a limit for the rest of the day while three other connected providers sit idle. So a setting is a
10
- * LIST read top to bottom, this hands back the whole ladder, and the caller walks it until one answers. Nothing
11
- * here decides WHICH failures are worth stepping over — only the runner has made the call and seen it fail —
12
- * this side says what the running order is.
13
- *
14
- * THE RULE LIVES IN THE CONTRACT because both sides need the same answer for different jobs: the daemon runs
15
- * the model, and the browser has to NAME it, in that job's settings row, before anything has run. Two
16
- * implementations would drift precisely where it matters most, since a row promising Haiku while the daemon
17
- * bills Opus is worse than no row at all.
18
- *
19
- * AN EMPTY LIST RESOLVES TO NOTHING, FOR EVERY ROLE, and this file no longer derives a floor for any of them.
20
- * It used to: a `helper` role with no list got an "Auto ladder" worked out from whatever was connected —
21
- * every provider's cheapest row, best-first — so an owner who had never opened the settings page still got
22
- * commit messages, session titles and safety verdicts from a model this file picked. That was the wrong
23
- * default, and the settings row saying "Auto: Gemini 3 Flash Lite, then Claude Haiku 4.5, then …" was the
24
- * tell: a recommendation nobody asked for, over accounts they had connected for something else, changing
25
- * under them whenever an account was added. NOT SET NOW MEANS NOT SET. Nothing is auto-selected and nothing
26
- * is recommended: the owner names the models for a job or the job does not run, which is a state they can
27
- * read off the row and a bill they cannot be surprised by.
28
- *
29
- * The two kinds of role (model-roles.ts) still differ in what the CALLER does with an empty answer — a
30
- * `helper` is simply off, a `run` falls to the model the owner picked for their own chat — but that is the
31
- * caller's business, and nothing here has to know which kind it is holding. */
32
-
33
- /* One provider's standing in the decision: whether a turn on it can be sent at all, and what its catalog holds.
34
- *
35
- * ACP agents are deliberately not expressible here — an ACP row's model id is empty because the agent owns its
36
- * own model, so there is no rung to point it at. `endpoint/<id>` providers ARE, and have to be: their models
37
- * appear in the same picker the settings rows build their options from, so a pin naming one has to hold rather
38
- * than drop out and leave the job running on an account the user was deliberately steering away from. */
39
- export interface ModelSource {
40
- // AgentProvider, not NativeProvider: an endpoint's id is user-created and cannot be in a fixed union, and
41
- // what a turn on somebody's own model server costs is not a fact this repo can know — which is fine here,
42
- // because nothing on this side ranks anything. A pin either names a provider that can run it or it does not.
43
- readonly provider: AgentProvider;
44
- // The same connection predicate every other surface gates on (access.ts web-side, the daemon's own account
45
- // stores daemon-side). A catalog is never empty by construction, so "has rows" says nothing about "can send".
46
- readonly ready: boolean;
47
- // What the provider publishes. NOTHING IN THIS FILE READS IT any more: it was the input to the derived Auto
48
- // ladder, and a pin is taken verbatim. Kept because it is what a source IS, and the daemon's helper walk
49
- // still gathers it (role-model.ts); a caller with no catalog to hand passes an empty list and loses nothing.
50
- readonly models: readonly string[];
51
- }
52
-
53
- export interface ModelChoice {
54
- readonly provider: AgentProvider;
55
- readonly model: string;
56
- }
57
-
58
- // A (provider, model) pair on the wire: `${provider}:${modelId}`, the same key shape the model picker mints for
59
- // its entries (PickerEntry.key). Every role list stores PINS rather than these keys — an entry says how it runs
60
- // as well as which model it is — but the key is still how two entries are compared, how a role list dedupes,
61
- // and how `autoFastModels` (which pins no knobs, see its own note in settings.ts) is stored.
62
- export const modelPinKey = (choice: ModelChoice): string => `${choice.provider}:${choice.model}`;
63
-
64
- /* Split on the FIRST colon only: a provider id never contains one and a model id might. Exported because
65
- * `autoFastModels` stores these keys, and because a session composed from a pin travels as one
66
- * (composeSession). */
67
- export const parsePinned = (pinned: string): ModelChoice | undefined => {
68
- const separator = pinned.indexOf(`:`);
69
- if (separator <= 0 || separator === pinned.length - 1) {
70
- return undefined;
71
- }
72
- return { provider: pinned.slice(0, separator), model: pinned.slice(separator + 1) };
73
- };
74
-
75
- /* A pin as a person reads it: the catalog's own label for the id, or the id itself for one the static catalog
76
- * has not caught up with (the picker offers a custom-id escape hatch, so this is a real case rather than a
77
- * defensive branch). Beside parsePinned because the two are always wanted together, by any surface that has to
78
- * name what a click is about to spend BEFORE it spends it, and the two loudest of those are extensions that
79
- * share no other code with each other. */
80
- export const pinnedModelLabel = (choice: ModelChoice): string =>
81
- modelsFor(choice.provider).find((option) => option.value === choice.model)?.label ?? choice.model;
82
-
83
- /* WHICH MODELS THIS ROLE MAY RUN, IN THE ORDER TO TRY THEM, given what this sandbox has connected.
84
- * `pinned` is the stored setting: settings.modelRoles[role], an ordered list of pins.
85
- *
86
- * A pin only holds while its provider is READY: an account the user disconnected would otherwise sit at the
87
- * head of the chain failing on a credential error while the sandbox can plainly still answer from the rung
88
- * below. It stays on SCREEN, greyed — the settings row renders the stored list, not this one — because a
89
- * setting that vanished from view would look like the app had eaten it.
90
- *
91
- * THE PINNED LIST IS THE WHOLE ANSWER, and there is nothing underneath it. A user who writes down three models
92
- * has said which accounts this job may spend, and reaching for a fourth when all three are out is exactly the
93
- * "spend an account they were steering away from" failure a pin exists to prevent. A user who writes down none
94
- * has said the job picks no model at all.
95
- *
96
- * THE WHOLE PIN SURVIVES, not the pair inside it: an entry's effort, thinking, speed and harness are what the
97
- * work is composed from, so a resolver handing back a bare (provider, model) would silently run the head of the
98
- * list at the provider's defaults. Nothing here reads or judges those fields, which is the point of carrying
99
- * them whole.
100
- *
101
- * EMPTY OUT MEANS THE LIST HAS NOTHING IT MAY REACH, from two different causes the caller can tell apart by
102
- * looking at `pinned`: an empty list is an owner who set no model, and a full list that survives none of the
103
- * readiness filter is an owner whose accounts have gone. The first is the job being switched off, the second
104
- * is worth a sentence about the accounts.
105
- *
106
- * ONE FUNCTION FOR BOTH KINDS OF LADDER, and it is `resolveRoleModels` that stopped existing rather than this
107
- * one arriving to replace it. A role's list used to add the role's own floor beneath the ready chain, which is
108
- * the only thing it did that a persona card's list (schemas/personas.ts `personaModels`) did not — so the walk
109
- * was split out to be shared. With the floor gone there is no difference left to share around: a role's list
110
- * and a card's list are the same question over the same sources, and two names for it would be two places to
111
- * read before believing they agree. */
112
- export const readyChain = (sources: readonly ModelSource[], pinned: readonly ModelPin[]): readonly ModelPin[] => {
113
- const ready = new Set(sources.filter((source) => source.ready).map((source) => source.provider));
114
- // Taken verbatim, unvalidated against the catalog on purpose: the picker offers a custom-id escape hatch for
115
- // a model a catalog hasn't caught up with, and second-guessing the user's own id here would silently run a
116
- // different model than the settings row names.
117
- const requested = pinned.filter((pin) => ready.has(pin.provider));
118
- /* The same model twice would spend two attempts proving one account is out — a real state, since the list is
119
- * hand-edited and the bulk editor writes one pin across many jobs.
120
- *
121
- * THE FIRST OF A PAIR WINS, WHOLE. Two entries can name one model and differ in their knobs (the same Sonnet
122
- * at Max and again at Low, written while reordering the list), and the one the user reads first is the one
123
- * they meant; keeping the earlier position with the later entry's effort would run a tier that appears
124
- * nowhere the pin does. */
125
- const chain: ModelPin[] = [];
126
- for (const pin of requested) {
127
- if (!chain.some((held) => modelPinKey(held) === modelPinKey(pin))) {
128
- chain.push(pin);
129
- }
130
- }
131
- return chain;
132
- };
@@ -1,52 +0,0 @@
1
- import { expect, test } from "vitest";
2
- import { MODEL_ROLE_BLOCKS, MODEL_ROLES, type ModelRoleSpec } from "./model-roles.js";
3
-
4
- /* THE CATALOG DRAWS THE SETTINGS PAGE, so the properties the page relies on have to be true of the TABLE rather
5
- * than remembered by whoever last added a row. Eighteen jobs in one unbroken list is what the blocks exist to
6
- * break up, and the failure they replace is a silent one: a role that belongs to no block is simply missing
7
- * from Sandbox ▸ Agent ▸ Models, with no error anywhere and a page that looks completely normal. */
8
-
9
- // The table at its declared width rather than as the literal tuple: `trigger` is absent from a helper's literal
10
- // type, and what is under test is exactly whether it is absent where it should be.
11
- const roles: readonly ModelRoleSpec[] = MODEL_ROLES;
12
-
13
- /* WHAT STARTS A RUN IS THE BLOCK IT IS READ IN, and asserting the two against each other is what stops them
14
- * drifting: a run whose trigger says one thing while the page draws it under the other heading is a row telling
15
- * an owner that a session nobody is watching is one they start. A helper answers with its own kind, because it
16
- * has no trigger and its block is the kind itself. */
17
- test("every whole session says what starts it, and it is the block it is drawn in", () => {
18
- const blockOf = new Map(MODEL_ROLE_BLOCKS.flatMap((block) => block.roles.map((role) => [role.id, block.id] as const)));
19
-
20
- for (const role of roles) {
21
- expect(role.kind === `run` ? role.trigger : role.kind, role.id).toBe(blockOf.get(role.id));
22
- }
23
- });
24
-
25
- test("a one-shot declares no trigger at all: nothing presses a commit subject into being", () => {
26
- for (const helper of roles.filter((role) => role.kind === `helper`)) {
27
- expect(Object.keys(helper), helper.id).not.toContain(`trigger`);
28
- }
29
- });
30
-
31
- /* THE BLOCKS PARTITION THE TABLE: every role in exactly one, nothing invented. Asserted as a partition rather
32
- * than block by block, because the two ways to get this wrong are opposites and only one of them is visible —
33
- * a role in no block vanishes from the page, a role in two is drawn twice and would be caught by eye. */
34
- test("the blocks hold every role once, in the table's own order", () => {
35
- const blocked = MODEL_ROLE_BLOCKS.flatMap((block) => block.roles.map((role) => role.id));
36
-
37
- expect(blocked.toSorted()).toEqual(MODEL_ROLES.map((role) => role.id).toSorted());
38
- /* AND THE ORDER SURVIVES THE SPLIT. Reading the blocks in order is reading the table in order: the table
39
- * argues its sequence is REACH (jobs nobody picked a model for, then sessions a click starts, then sessions
40
- * that start without one), and a block re-sorted here would leave that argument describing a page it no
41
- * longer matches. */
42
- expect(blocked).toEqual(MODEL_ROLES.map((role) => role.id));
43
- });
44
-
45
- test("each block says what it is, so the page keeps no headings of its own", () => {
46
- for (const block of MODEL_ROLE_BLOCKS) {
47
- expect(block.label, block.id).toMatch(/\S/);
48
- expect(block.caption, block.id).toMatch(/\S/);
49
- // A block with nothing in it would draw a heading over an empty surface.
50
- expect(block.roles.length, block.id).toBeGreaterThan(0);
51
- }
52
- });