@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,79 +1,44 @@
1
- // usage: the durable spend ledger
2
- // usage: per-account token/cost totals
1
+ // Durable spend ledger: per-account token and cost totals.
3
2
  import { z } from "zod";
4
- // One row per attributed turn, appended at turn end and NEVER pruned. This exists because the activity log
5
- // can't answer a money question: it prunes to its most recent entries, so a month's spend is unanswerable and
6
- //, worse for a cost readout, the totals SHRINK as newer turns evict older ones. The ledger keeps the raw
7
- // per-turn facts and the rollup projects them on read, so a new grouping (by day, by model, by conversation)
8
- // needs no new storage and no migration.
3
+ // One row per attributed turn, appended at turn end and never pruned, unlike the activity log which shrinks as it
4
+ // prunes. Rollups project this on read, so a new grouping needs no new storage.
9
5
  export const UsageTurnSchema = z.object({
10
- // Epoch ms at turn end. Kept alongside `day` so a future timezone-aware rollup is a pure change over data
11
- // already on disk.
6
+ // Epoch ms when the turn ended; kept alongside `day` so a timezone-aware rollup needs no data migration.
12
7
  at: z.number().describe("When the turn ended, in milliseconds."),
13
- // The UTC calendar day (YYYY-MM-DD) `at` fell in, precomputed so a rollup never re-derives a timezone.
8
+ // UTC calendar day (YYYY-MM-DD) `at` fell in, precomputed so rollups skip timezone arithmetic.
14
9
  day: z.string().describe("The day it fell in, as YYYY-MM-DD in UTC, worked out once so nothing downstream has to do timezone arithmetic."),
15
10
  provider: z.string().describe("Which model provider served it."),
16
- // Absent on an env-token turn, which has no account to attribute to (same rule as the activity log).
11
+ // Absent on an env-token turn, which has no account to attribute to.
17
12
  account: z.string().optional().describe("Which account paid. Absent for a turn run on a plain key, which belongs to no account."),
18
- // The model the turn ACTUALLY ran, resolved past the client's pick and every provider default. Absent only
19
- // when the provider's own subscription default served it without the daemon naming one.
13
+ // The model that actually ran, past the pick and every default; absent only when an unnamed default served it.
20
14
  model: z
21
15
  .string()
22
16
  .optional()
23
17
  .describe(
24
18
  "The model that actually ran, past whatever was asked for and every default. Absent only when the provider's own default served it without being named.",
25
19
  ),
26
- /* WHAT THE CLIENT ASKED FOR, beside `model` above, which is what ran. The pair is the point: a routing
27
- * surprise is then a diff on one row rather than an investigation through the routing code.
28
- *
29
- * The gap between the two is real and was unreadable. A pick is resolved past the tier judge's downgrade,
30
- * a provider's own subscription default, a catalog validity check that silently substitutes (Grok rejects
31
- * a retired models.dev id, so an invalid pin becomes the catalog default), and CLIProxyAPI's own choice on
32
- * a routed turn. Every one of those is a legitimate substitution and none of them was recorded, so "I
33
- * chose one model and got another's error" could only be answered by reading four resolution paths and
34
- * guessing which had fired.
35
- *
36
- * Absent ⇒ the client named nothing and asked for the default, which is not the same as asking for what it
37
- * got. Equal to `model` on the overwhelming majority of turns; the rows where they differ are the whole
38
- * reason this is here. */
20
+ // What was asked for, distinct from `model` (what ran); differs when something resolved or substituted it.
39
21
  modelRequested: z
40
22
  .string()
41
23
  .optional()
42
24
  .describe("The model that was asked for, when one was named. Differs from `model` when something resolved it."),
43
25
  harness: z.string().describe("Which agentic loop it ran on."),
44
- /* HOW THE TURN ENDED. The field that turns the ledger from an accounting record into a diagnostic one.
45
- *
46
- * Without it a turn that died is byte-for-byte indistinguishable from one that succeeded, except that it
47
- * cost less, so "four sessions all broke a minute ago" had no record to read and had to be answered by
48
- * re-running the destructive act in a live sandbox. The failure was never nowhere: it was in the activity
49
- * log, which prunes to its most recent entries, so an incident survives only until the feed rolls past it.
50
- * This log is never pruned, which is the entire difference.
51
- *
52
- * "cancelled" is a user pressing Stop, which is not a failure and must never be read as one, the registry
53
- * learned that lesson already (see the abort branch in streamAgent). "error" is a turn the provider or the
54
- * request killed. Both still carry whatever they spent before they ended.
55
- *
56
- * Absent ⇒ the row predates this being recorded, NOT a turn that succeeded. Readers that count failures
57
- * must treat absent as unknown, and the experiment readers do exactly that. */
26
+ // cancelled: the user pressed Stop, not a failure.
27
+ // error: the provider or request killed the turn.
28
+ // Absent means the row predates recording, not that the turn succeeded.
58
29
  outcome: z.enum(["ok", "error", "cancelled"]).optional().describe("How it ended: finished, failed, or was stopped by the user."),
59
- // The failing frame's code, when it carried one, e.g. `rate_limit`, `provider-outage`, `claude-not-entitled`.
60
- // Present only alongside outcome "error", and absent even then for a failure that named no code, which is
61
- // itself the interesting case: an unclassified failure is one nothing downstream knows how to handle.
30
+ // The failing frame's code (e.g. rate_limit, provider-outage); absent even on error means unclassified.
62
31
  errorCode: z.string().optional().describe("The failure's code, when it had one."),
63
- // The failing frame's own sentence, capped at ERROR_MESSAGE_CHARS. Capped rather than omitted because the
64
- // provider's wording is routinely the only thing that distinguishes two failures sharing one code, and
65
- // uncapped it would let one bad provider message dominate a file that must stay cheap to read whole.
32
+ // The failing frame's own sentence, capped at ERROR_MESSAGE_CHARS.
66
33
  errorMessage: z.string().optional().describe("What the failure said, trimmed."),
67
- // The conversation this turn belonged to, so spend can join to a fleet agent. Absent only for an internal
68
- // one-shot turn that has no conversation identity.
34
+ // Which conversation this turn belonged to; absent only for an internal one-shot with no conversation.
69
35
  conversationId: z
70
36
  .string()
71
37
  .optional()
72
38
  .describe(
73
39
  "Which conversation it belonged to, so spending can be traced to a card. Absent only for an internal one-off with no conversation at all.",
74
40
  ),
75
- // The provider's own turn count for the request (a Claude "turn" can be several under the hood), so turns
76
- // and cost stay comparable across providers. 1 when the provider reported none.
41
+ // The provider's own count for the request, since one exchange can be several; 1 when unreported.
77
42
  turns: z
78
43
  .number()
79
44
  .describe("The provider's own count for the request, since one exchange can be several under the hood. One when it reported none."),
@@ -83,208 +48,56 @@ export const UsageTurnSchema = z.object({
83
48
  cacheCreationTokens: z.number().describe("Tokens written to cache, which cost more up front and less afterwards."),
84
49
  costUsd: z.number().describe("What it cost, in dollars."),
85
50
  durationMs: z.number().describe("How long it took, in milliseconds."),
86
- /* Which arm of the iq SEARCH-TEACHING experiment this conversation runs on
87
- * (settings.iqSearchHoldout). Stable for every turn in one conversation: the treatment is instruction
88
- * loaded into a provider session, so flipping it per turn would call a remembered treatment a control.
89
- * Absent ⇒ measurement is off; true/false ⇒ taught/cold. */
51
+ // Arm of the search-teaching experiment; stable per conversation. Absent means unmeasured.
90
52
  iqSearchArm: z.boolean().optional(),
91
- // Hash of the plugin nudge + skill body used for this arm. Control turns carry it too, so a report can keep
92
- // both sides of one treatment revision together and exclude older wording after an upgrade.
53
+ // Hash of the plugin nudge and skill body for this arm; recorded on control turns too, for report pairing.
93
54
  iqSearchCohort: z.string().optional(),
94
- /* SEARCHES THIS TURN RAN, every tool call that went looking for code, the dedicated search tools and the
95
- * CLI searches alike (isSearchCall owns the rule; `iq q` is Bash and would otherwise not be counted at all).
96
- * What the search teaching is judged on.
97
- *
98
- * COST PER TURN CANNOT SERVE: cost is a whole turn's worth of work, a search mechanism touches one part of
99
- * it, and the part lives inside the noise of the rest, exactly the shape that made output tokens unable to
100
- * see the steer. Nine days of a since-removed retrieval experiment proved it with an interval from −2.9% to
101
- * +56.9%, driven entirely by which arm had drawn the bigger jobs.
102
- *
103
- * Searches are what the mechanism acts on directly. Turns that never search stay in the population at zero
104
- * rather than being filtered out, they dilute both arms equally, while selecting on "did it search" would
105
- * select on the treatment itself.
106
- *
107
- * Absent ⇒ the turn predates this being measured; the arm's mean drops it (turn-experiments.ts, the filter
108
- * inside `conversationExperimentOf`) rather than reading it as a turn that searched nothing. */
55
+ // Every tool call that searched, including CLI searches like `iq q`; absent means unmeasured, not zero.
109
56
  searchCalls: z.number().optional(),
110
- /* …and how many of them came BEFORE the turn first opened or changed a file, the orientation burst. A turn
111
- * that already knows where to look starts working; one that doesn't goes hunting first.
112
- *
113
- * The narrower of the two readings and the less confounded: `searchCalls` still grows with the size of the
114
- * job, while the walk up to the first file is roughly the same act whatever the job turns out to be.
115
- *
116
- * A turn that never reads or edits counts all of its searches here, it never arrived, so all of it was
117
- * orientation. Dropping those instead would select the population by an OUTCOME the treatment moves, which
118
- * is the one bias an arm-based reading cannot absorb.
119
- *
120
- * Absent ⇒ as for `searchCalls`. */
57
+ // Search calls before the first file touch; absent as searchCalls; a turn touching nothing counts them all.
121
58
  openingSearches: z.number().optional(),
122
- /* THE LISTINGS THIS TURN RAN TO WORK OUT WHERE IT WAS, `ls`, `ls /work`, `tree intentic`, the LS tool
123
- * aimed at the same places (isRootListing owns the rule). What the project map is judged on, and the
124
- * reason it could not be judged before.
125
- *
126
- * `searchCalls` counts a directory listing and a ripgrep as one event, deliberately, so that a taxonomy
127
- * cannot report whichever spelling of a search the model happened to reach for. That is right for the
128
- * search teaching and blind to the map: measured over 468 mapped sessions of this workspace against 497
129
- * unmapped ones, searches before the first file moved +7.6% with a margin of ±17.6pp, while the share of
130
- * sessions opening with a directory listing fell from 46.3% to 32.1%. The map does not shorten the
131
- * orientation burst, it changes what the burst is made of, and only this counts the difference.
132
- *
133
- * UP TO THE FIRST FILE, exactly like `openingSearches`, which took the corpus to settle. Counted over the
134
- * whole turn instead, the same sessions give 66.4% against 73.3%, a gap of 6.9pp where the orientation
135
- * window gives 14.2pp. The dilution is not noise: a turn already at work lists the directory it has
136
- * narrowed to, and no map could have answered that. The shape of the listing cannot tell the two apart,
137
- * because it is the same shape; only when it happened can.
138
- *
139
- * Absent ⇒ the turn predates this being measured, never a turn that listed nothing. */
59
+ // Directory listings (ls, tree, LS tool) before the turn's first file touch, same window as openingSearches.
140
60
  openingListings: z.number().optional(),
141
- /* TOOL CALLS BEFORE THE TURN FIRST TOUCHED A FILE IT WENT ON TO EDIT: how far it walked before reaching
142
- * the thing it turned out to be looking for. The corpus study this map was designed from measured the
143
- * same quantity by hand (the workspace's docs/agent-exploration-patterns.md §4: median 4, mean 8.2) and called it the one
144
- * honest reading of whether orientation got better.
145
- *
146
- * IT CAN ONLY BE KNOWN AT THE END, which is why it is recorded here and computed nowhere else: whether a
147
- * file was the target is a fact about the turn's edits, and the turn has to finish before that is
148
- * decided. The route keeps the first call index per path and intersects it with the edit ledger.
149
- *
150
- * Absent on a turn that edited nothing, which is most short turns, and NOT zero: a turn with no target
151
- * never reached one, and averaging that in as "reached it immediately" would report the turns that did
152
- * no work as the best targeted. That absence costs the reading three quarters of the population, so it
153
- * is a metric to accumulate for months rather than a gate to wait on. */
61
+ // Tool calls before the turn first touched a file it later edited; absent (not zero) if it edited nothing.
154
62
  callsBeforeTarget: z.number().optional(),
155
- /* WHICH ARM OF THE PROJECT MAP EXPERIMENT this conversation ran (settings.workspaceMapHoldout), and how
156
- * many characters the note actually cost when it was sent.
157
- *
158
- * CONVERSATION-STABLE, and for a plainer reason than the search teaching's: the map is sent once, on the
159
- * opening message, so every later turn of a mapped conversation is a turn whose transcript holds a map.
160
- * A per-turn flip would label eleven treated turns as controls.
161
- *
162
- * `mapChars` rather than a token estimate, because characters are what the renderer's budget is in
163
- * (workspace-map.ts caps the note at 2,800) and a tokenizer's answer would vary by model. Present only on
164
- * the turn that actually sent one, so the ledger says what the feature costs instead of assuming it: the
165
- * median note over this workspace's own corpus is 795 characters against a ceiling of 2,800.
166
- *
167
- * Absent ⇒ no measurement (the holdout is zero, or the row predates it); true/false ⇒ mapped/unmapped. */
63
+ // Arm of the project-map experiment, stable per conversation; mapChars is the note's length when sent.
168
64
  mapArm: z.boolean().optional(),
169
65
  mapChars: z.number().optional(),
170
- /* WHICH TURN OF ITS CONVERSATION THIS WAS, counting from zero, so an opening turn can be recognised from
171
- * one row instead of inferred from the rows around it.
172
- *
173
- * The inference it replaces is wrong at exactly one place and it is the place that matters: a reader
174
- * windowed to the last seven days would take each conversation's earliest row IN THE WINDOW as its
175
- * opening turn, so every conversation that started the week before would contribute a mid-conversation
176
- * turn to a reading about first turns. The project map is sent on turn zero and nowhere else, so that
177
- * misreading is not an edge case for it, it is the measurement.
178
- *
179
- * Absent ⇒ the row predates this, or the turn belonged to no conversation at all. */
66
+ // Zero-based turn count in its conversation; 0 marks the opening turn. Absent means unmeasured.
180
67
  turnIndex: z.number().optional(),
181
- /* DID THIS TURN FINISH, OR DID IT STOP TALKING. The fields that tell the two apart, and the reason
182
- * `outcome` alone could never.
183
- *
184
- * A turn ends at least five different ways: its stop condition was met, the model ran out of things to say,
185
- * the loop hit a cap, the budget ran out, or the model asserted it was done and nothing checked the claim.
186
- * `outcome` collapses four of those into "ok", so a ledger that already recorded every failure perfectly
187
- * still wrote the same word over a turn that proved its work and a turn that went quiet halfway through its
188
- * own checklist. The daemon was computing the difference and discarding it at turn end.
189
- *
190
- * NO SINGLE STOP-REASON WORD IS STORED, deliberately: these are the facts, and which of the five modes they
191
- * add up to is a rule that will get better. A word written down now would freeze today's rule into rows
192
- * that outlive it and cannot be re-read under the next one, the same reason `tierRouted` is recorded beside
193
- * `tierScore` instead of being derived from it once and forgotten.
194
- *
195
- * `verification` is the four-state VerificationState the child roster already speaks (agent-verification.ts):
196
- * "verified" = a check passed AFTER the last code edit, "failing" = the last one after it did not,
197
- * "unproven" = nothing ran, "no-code" = nothing a check could speak to was edited. Folded from this turn's
198
- * own tool-call frames, subagents' included, so a Codex turn is judged exactly as a Claude one is. Absent ⇒
199
- * the row predates this, NOT a turn nothing was known about.
200
- *
201
- * `check` is the command that SPOKE, the one that cleared the work or the one that broke, capped. It is
202
- * what keeps "verified" auditable: a passing `vitest run one.test.ts` is evidence about one file and must
203
- * never read as the repo being green, and only the command itself shows which was which.
204
- *
205
- * `filesEdited` counts every file written, prose included, where `verification` speaks only about code. The
206
- * pair is the point: `{ verification: "no-code", filesEdited: 3 }` is a documentation turn, and
207
- * `{ verification: "unproven", filesEdited: 0 }` cannot happen. */
68
+ // outcome alone can't tell a turn that finished from one that stopped talking; these fields carry the difference
69
+ // instead of a single stop-reason word.
70
+ // verification: verified/failing (check passed/failed after the last edit), unproven (nothing ran), no-code
71
+ // (nothing editable changed). Folded from tool-call frames, subagents included.
72
+ // check: the command that spoke, so a targeted test is never read as the whole suite.
73
+ // filesEdited: every file written, prose included; verification speaks only about code.
208
74
  verification: z.enum(["verified", "unproven", "failing", "no-code"]).optional(),
209
75
  check: z.string().optional(),
210
76
  filesEdited: z.number().optional(),
211
- /* THE AGENT'S OWN CHECKLIST WHEN THE TURN ENDED, reconstructed from the Task tool family and reported by
212
- * every runtime that keeps one (`todos` frames). `checklistOpen` is pending plus in-progress.
213
- *
214
- * This is the honest reading of "the model stopped emitting": a turn that ended `ok` with items still open
215
- * abandoned a plan it wrote itself, which is a different event from a turn that finished one, and the two
216
- * were indistinguishable in every record this daemon kept. Absent ⇒ the turn kept no checklist at all,
217
- * which is most short turns and is not the same as an empty one. */
77
+ // The agent's own checklist at turn end (Task tool frames); checklistOpen is pending plus in-progress. Absent means
78
+ // the turn kept no checklist at all.
218
79
  checklistTotal: z.number().optional(),
219
80
  checklistOpen: z.number().optional(),
220
- /* HOW MANY TIMES THE CONTEXT WAS COMPACTED under this turn, and how full the window was when it ended.
221
- *
222
- * Compaction is the least observable thing a harness does to a turn: a poorly timed one discards the
223
- * partial result the turn still needed, and the only trace was a frame streamed to whoever was watching.
224
- * Recorded here, "did compaction hurt" becomes a question this ledger can answer, by joining these against
225
- * `verification` and `outcome` over months of real turns, which is a number nobody currently has.
226
- *
227
- * `contextTokens`/`contextWindow` are the last `context_usage` frame, absent for a runtime that reports
228
- * none. Both, rather than a percentage: the window is a per-model constant that moves between model
229
- * versions, and a fraction computed today cannot be recomputed tomorrow from what it threw away.
230
- *
231
- * Together they carry ~90 bytes onto a ~250-byte row. A heavy day is ~100 turns, so a year of hard use goes
232
- * from ~9 MB to ~12 MB, which is the price of a log that can answer why a turn ended rather than only what
233
- * it cost. */
81
+ // compactions counts context compactions this turn. contextTokens/contextWindow are the last context_usage frame,
82
+ // absent if unreported; raw numbers, not a percentage, since window size varies by model.
234
83
  compactions: z.number().optional(),
235
84
  contextTokens: z.number().optional(),
236
85
  contextWindow: z.number().optional(),
237
- /* WHAT THE COMPLEXITY JUDGE SAID ABOUT THIS TURN, and whether anything was done about it. The three fields
238
- * automatic tier selection is calibrated from, and the reason it can ship in shadow at all.
239
- *
240
- * They live on the SPEND ledger rather than in a log of their own because the question they exist to answer
241
- * is a question about money: what did the turns we would have downgraded actually cost, and what did the
242
- * ones we did downgrade cost instead. A separate log would have to be joined back to this one on every
243
- * read, and the join key (a turn) is already the row.
244
- *
245
- * `tierScore` is 0..1 from judgeComplexity, comparable against FAST_CEILING, which is the cutoff it was
246
- * judged against at the time. Absent ⇒ the judge did not run (settings.autoTier "off", or a row written
247
- * before this existed), which is NOT the same as a turn that scored zero.
248
- *
249
- * `tierRules` is which named features fired, and it is the half that makes the ledger analysable rather
250
- * than merely tallyable: a score says a threshold was crossed, the rules say which feature is doing the
251
- * work, and re-fitting the weights needs the second. Bounded by construction, there are ~19 of them.
252
- *
253
- * `tierRouted` is whether the turn ACTUALLY ran on the cheap rung. It is not implied by the score: a turn
254
- * judged fast still runs standard in shadow mode, and still runs standard in `on` mode when the provider
255
- * publishes nothing cheaper than the user's pick. Reading the score as the decision would report savings
256
- * that were never made. */
86
+ // tierScore (0..1 from judgeComplexity, vs FAST_CEILING) absent means the judge did not run. tierRules is which
87
+ // named features fired. tierRouted is whether it actually ran on the cheap rung, not implied by the score.
257
88
  tierScore: z.number().optional(),
258
89
  tierRules: z.array(z.string()).optional(),
259
90
  tierRouted: z.boolean().optional(),
260
- /* THE VERDICT ITSELF, and the cutoff it was reached against.
261
- *
262
- * `tierScore` stopped being able to answer "was this called simple" the moment the cutoff became the owner's
263
- * to choose (settings.autoTierEagerness): 0.35 is standard on the middle stop and fast on the eager one, and
264
- * a fast verdict also requires a positively-easy signal that no score can express. So the answer is written
265
- * down rather than re-derived, and the ceiling goes with it because a refit reading a column of bare scores
266
- * could not otherwise tell two rows apart.
267
- *
268
- * Absent on rows written before the knob existed, which were all judged at the `balanced` cutoff — which is
269
- * exactly what a reader falls back to (FAST_CEILING), so old and new rows stay one population. */
91
+ // The verdict and the cutoff it was judged against (settings.autoTierEagerness); absent rows predate the knob and
92
+ // fall back to FAST_CEILING.
270
93
  tierFast: z.boolean().optional(),
271
94
  tierCeiling: z.number().optional(),
272
- /* THE USER SAID NO: the turn carried AgentTurn.tierHold, so a fast verdict moved nothing. Recorded rather
273
- * than folded into `tierRouted: false` because it is the strongest calibration label this ledger ever gets,
274
- * a person looking at this very conversation deciding the cheap rung was not to be trusted with it, and the
275
- * refit (docs/model-routing-design.md §4) needs it kept apart from "nothing cheaper was published". Absent ⇒
276
- * no veto, which is every row written before the control existed and most rows after. */
95
+ // The turn carried AgentTurn.tierHold: the user vetoed a fast verdict. Absent means no veto.
277
96
  tierDenied: z.boolean().optional(),
278
97
  });
279
98
  export type UsageTurn = z.infer<typeof UsageTurnSchema>;
280
- // The ledger grouped by day × provider × account × model × harness × conversation, the finest grouping any
281
- // dashboard panel needs, and a handful of rows per active day instead of one per turn, so a year of history is
282
- // well under a MB over the tunnel. Every panel (spend per day, cost by model, cost by agent, cache hit rate) is
283
- // a projection of these.
284
- // The conversation is in the KEY, not merely along for the ride, because cost-by-agent has to answer within the
285
- // same window as every other panel on the screen. The fleet registry also carries a per-agent total, but only a
286
- // cumulative, all-time one, reading it beside a "last 7 days" filter would print an all-time number under a
287
- // windowed heading, which is the shrinking-totals bug wearing a different hat.
99
+ // Ledger grouped by day, provider, account, model, harness and conversation, one panel's worth of rows per active day.
100
+ // Conversation is part of the key so cost-by-agent can be windowed like every other panel.
288
101
  export const UsageRollupRowSchema = z.object({
289
102
  day: z.string().describe("The day, as YYYY-MM-DD in UTC."),
290
103
  provider: z.string().describe("Which model provider."),
@@ -301,9 +114,8 @@ export const UsageRollupRowSchema = z.object({
301
114
  durationMs: z.number().describe("Time spent, in milliseconds."),
302
115
  });
303
116
  export type UsageRollupRow = z.infer<typeof UsageRollupRowSchema>;
304
- // Inclusive UTC day bounds (YYYY-MM-DD). Both absent ⇒ the whole ledger. Shared by every windowed read of a
305
- // daemon ledger (spend, savings): one window shape, so a screen that filters two ledgers at once filters them
306
- // with the same calendar.
117
+ // Inclusive UTC day bounds (YYYY-MM-DD); both absent means the whole ledger. Shared by every windowed ledger read, so
118
+ // filters stay in step.
307
119
  export const DayWindowQuerySchema = z.object({
308
120
  from: z.string().optional().describe("First day to include, as YYYY-MM-DD in UTC. Leave it out for everything up to the end day."),
309
121
  to: z
@@ -321,9 +133,8 @@ export const UsageRollupSchema = z.object({
321
133
  "Spending grouped by day, provider, account, model and conversation. Everything a cost screen shows is a rearrangement of these rows, which is why there is no second call for any of it.",
322
134
  ),
323
135
  });
324
- // The account picker's headroom readout, folded from the ledger above (all-time, not a log window), grouped by
325
- // provider+account. `account` is the attribution key, so env-token turns are excluded rather than pooled under
326
- // a blank id, an unattributed turn belongs to no account's total.
136
+ // Account picker's headroom readout, folded from the ledger all-time (not a windowed log), grouped by provider and
137
+ // account. Env-token turns are excluded, not pooled under a blank id.
327
138
  export const UsageAccountSchema = z.object({
328
139
  provider: z.string(),
329
140
  account: z.string(),
@@ -3,14 +3,11 @@ import { CapabilitiesListSchema } from "./capabilities.js";
3
3
  import { SandboxSettingsSchema } from "./settings.js";
4
4
  import { IpsecVpnConfigSchema } from "./vpn.js";
5
5
 
6
- /* The settings shape spans a version seam that really moves: the browser ships with the platform, the daemon
7
- * ships inside the user's sandbox image, so a web build routinely parses a payload from an OLDER daemon. These
8
- * tests pin the property that makes that survivable: an absent key is that flag's default, not a parse
9
- * failure, because failing instead reaches the user as a settings page whose switches silently do nothing. */
6
+ // Settings cross a version seam: the browser can be newer than the daemon. An absent key must parse as that field's
7
+ // default, never a failure.
10
8
 
11
9
  test("a payload from a build that predates a toggle parses, with the new toggle at its default", () => {
12
- // What a daemon built before the output-cleaner backend switch answers with: every key it knew, and
13
- // nothing for the one added after it shipped.
10
+ // What a pre-output-cleaner-switch daemon sent: every key it knew, nothing for the one added after.
14
11
  const older = {
15
12
  stableSystemPrompt: false,
16
13
  skills: [],
@@ -19,20 +16,10 @@ test("a payload from a build that predates a toggle parses, with the new toggle
19
16
  outputCleaners: "-cap",
20
17
  outputHoldout: 0.1,
21
18
  };
22
- // The defaults come from the schema, not from a copy of it written here. Transcribing them made every
23
- // setting the product gained land as a failure in this file: a diff that only ever said "the list moved",
24
- // never "tolerance broke", and whose fix was always to paste the new default in. What this test is about
25
- // is the seam: what the old build sent survives verbatim, and what it never heard of arrives at default.
19
+ // Defaults come from the schema itself, not copied here, so a new setting doesn't fail this test.
26
20
  expect(SandboxSettingsSchema.parse(older)).toEqual({ ...SandboxSettingsSchema.parse({}), ...older });
27
21
  });
28
22
 
29
- /* The invariant a fresh sandbox depends on: NO field is required. A settings object is written for the first
30
- * time only when the user changes something, so until then the daemon parses `{}`: one field without a
31
- * `.default()` turns that into a throw at boot, and the version tolerance above is built on the same property.
32
- *
33
- * Asserted by shape rather than by value: what each default IS belongs next to the field in settings.ts, where
34
- * the reason it holds is written down. A second copy here proved nothing the schema didn't already say and
35
- * failed on every field the product added. */
36
23
  test("no field is required: a workspace that has never written settings parses", () => {
37
24
  const defaults = SandboxSettingsSchema.parse({});
38
25
  expect(Object.keys(defaults).toSorted()).toEqual(Object.keys(SandboxSettingsSchema.shape).toSorted());
@@ -41,23 +28,19 @@ test("no field is required: a workspace that has never written settings parses",
41
28
  test("a key of the wrong type is still a parse failure: tolerance is for absence, not for garbage", () => {
42
29
  expect(SandboxSettingsSchema.safeParse({ iqSearch: "yes" }).success).toBe(false);
43
30
  expect(SandboxSettingsSchema.safeParse({ outputHoldout: 4 }).success).toBe(false);
44
- // The prompt cap is a real bound, not advice: the text IS the system prompt, and every turn pays for it.
45
31
  expect(SandboxSettingsSchema.safeParse({ systemPrompt: "x".repeat(20001) }).success).toBe(false);
46
32
  });
47
33
 
48
- /* The capability list crosses the same seam, and its failure mode is worse than a dead switch: the browser
49
- * parses ONE object for the whole page, so a required key the older daemon never sends takes the Capabilities
50
- * page down entirely: to hide an advisory badge. */
34
+ // The capability list crosses the same seam; a required key an older daemon omits can take down the whole Capabilities
35
+ // page, not just one switch.
51
36
 
52
37
  test("a capability list from a daemon that predates recommendations parses, with none recommended", () => {
53
38
  const older = { capabilities: [{ id: "github", kind: "cli", status: { state: "active" }, config: { provider: "github" } }] };
54
39
  expect(CapabilitiesListSchema.parse(older).recommendations).toEqual([]);
55
40
  });
56
41
 
57
- /* An ipsec tunnel's routed networks decide whether it is split or full, and both ends of that are load-bearing:
58
- * a value the daemon splices into rightsubnet unchecked reaches charon as a config it refuses WHOLESALE (every
59
- * tunnel on the sandbox stops loading, and the error names the file rather than the field), while a default that
60
- * stopped being 0.0.0.0/0 would silently narrow tunnels that reach those networks today. */
42
+ // routedNetworks decides split vs full tunnel; an unchecked bad value makes charon reject the whole config, not just
43
+ // this field. Default must stay 0.0.0.0/0.
61
44
  const ipsec = { provider: "ipsec", server: "gw.example.com", presharedKey: "group-secret" };
62
45
 
63
46
  test("an ipsec tunnel is a full tunnel unless it says otherwise", () => {
@@ -67,7 +50,7 @@ test("an ipsec tunnel is a full tunnel unless it says otherwise", () => {
67
50
  test("routed networks take a CIDR list and reject what charon could not load", () => {
68
51
  expect(IpsecVpnConfigSchema.parse({ ...ipsec, routedNetworks: "10.0.0.0/8, 192.168.0.0/16" }).routedNetworks).toBe("10.0.0.0/8, 192.168.0.0/16");
69
52
  expect(IpsecVpnConfigSchema.parse({ ...ipsec, routedNetworks: "fd00::/8" }).routedNetworks).toBe("fd00::/8");
70
- // A bare host address is the easy mistake: strongSwan wants the prefix, and the message says so.
53
+ // A bare host address (no prefix) is the common mistake strongSwan rejects.
71
54
  expect(IpsecVpnConfigSchema.safeParse({ ...ipsec, routedNetworks: "192.168.0.168" }).success).toBe(false);
72
55
  expect(IpsecVpnConfigSchema.safeParse({ ...ipsec, routedNetworks: "10.0.0.0/8,nonsense" }).success).toBe(false);
73
56
  expect(IpsecVpnConfigSchema.safeParse({ ...ipsec, routedNetworks: "" }).success).toBe(false);