@intentic/sandbox-contract 1.248.0 → 1.249.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 (877) 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.map +1 -1
  93. package/dist/contracts/skills.contract.js.map +1 -1
  94. package/dist/contracts/system.contract.d.ts +49 -73
  95. package/dist/contracts/system.contract.d.ts.map +1 -1
  96. package/dist/contracts/system.contract.js +12 -2
  97. package/dist/contracts/system.contract.js.map +1 -1
  98. package/dist/contracts/usage.contract.d.ts.map +1 -1
  99. package/dist/contracts/usage.contract.js.map +1 -1
  100. package/dist/contracts/vpn.contract.d.ts.map +1 -1
  101. package/dist/contracts/vpn.contract.js +1 -1
  102. package/dist/contracts/vpn.contract.js.map +1 -1
  103. package/dist/contracts/webext.contract.d.ts.map +1 -1
  104. package/dist/contracts/webext.contract.js.map +1 -1
  105. package/dist/contracts/workflows.contract.d.ts +7 -6
  106. package/dist/contracts/workflows.contract.d.ts.map +1 -1
  107. package/dist/contracts/workflows.contract.js +12 -3
  108. package/dist/contracts/workflows.contract.js.map +1 -1
  109. package/dist/contracts/workspace.contract.d.ts.map +1 -1
  110. package/dist/contracts/workspace.contract.js.map +1 -1
  111. package/dist/events/agent-events.d.ts +1237 -0
  112. package/dist/events/agent-events.d.ts.map +1 -0
  113. package/dist/events/agent-events.js +226 -0
  114. package/dist/events/agent-events.js.map +1 -0
  115. package/dist/events/cards.d.ts +404 -0
  116. package/dist/events/cards.d.ts.map +1 -0
  117. package/dist/events/cards.js +179 -0
  118. package/dist/events/cards.js.map +1 -0
  119. package/dist/events/resume.d.ts +23 -0
  120. package/dist/events/resume.d.ts.map +1 -0
  121. package/dist/events/resume.js +31 -0
  122. package/dist/events/resume.js.map +1 -0
  123. package/dist/events/system-events.d.ts +615 -0
  124. package/dist/events/system-events.d.ts.map +1 -0
  125. package/dist/events/system-events.js +64 -0
  126. package/dist/events/system-events.js.map +1 -0
  127. package/dist/events/transcript.d.ts +1755 -0
  128. package/dist/events/transcript.d.ts.map +1 -0
  129. package/dist/events/transcript.js +205 -0
  130. package/dist/events/transcript.js.map +1 -0
  131. package/dist/ids/conversation-ids.d.ts +8 -0
  132. package/dist/ids/conversation-ids.d.ts.map +1 -0
  133. package/dist/{conversation-ids.js → ids/conversation-ids.js} +13 -0
  134. package/dist/ids/conversation-ids.js.map +1 -0
  135. package/dist/ids/hostnames.d.ts.map +1 -0
  136. package/dist/ids/hostnames.js.map +1 -0
  137. package/dist/ids/session-names.d.ts.map +1 -0
  138. package/dist/ids/session-names.js.map +1 -0
  139. package/dist/ids/share-paths.d.ts.map +1 -0
  140. package/dist/ids/share-paths.js.map +1 -0
  141. package/dist/{tunnel-ids.d.ts → ids/tunnel-ids.d.ts} +1 -0
  142. package/dist/ids/tunnel-ids.d.ts.map +1 -0
  143. package/dist/{tunnel-ids.js → ids/tunnel-ids.js} +1 -0
  144. package/dist/ids/tunnel-ids.js.map +1 -0
  145. package/dist/index.d.ts +423 -450
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +54 -46
  148. package/dist/index.js.map +1 -1
  149. package/dist/{agent-catalog.d.ts → models/agent-catalog.d.ts} +2 -2
  150. package/dist/models/agent-catalog.d.ts.map +1 -0
  151. package/dist/models/agent-catalog.js.map +1 -0
  152. package/dist/models/agent-runtimes.d.ts.map +1 -0
  153. package/dist/models/agent-runtimes.js.map +1 -0
  154. package/dist/{fast-tier.d.ts → models/fast-tier.d.ts} +1 -1
  155. package/dist/models/fast-tier.d.ts.map +1 -0
  156. package/dist/models/fast-tier.js.map +1 -0
  157. package/dist/models/model-order.d.ts.map +1 -0
  158. package/dist/models/model-order.js.map +1 -0
  159. package/dist/{model-pins.d.ts → models/model-pins.d.ts} +1 -1
  160. package/dist/models/model-pins.d.ts.map +1 -0
  161. package/dist/models/model-pins.js.map +1 -0
  162. package/dist/{model-roles.d.ts → models/model-roles.d.ts} +0 -33
  163. package/dist/models/model-roles.d.ts.map +1 -0
  164. package/dist/{model-roles.js → models/model-roles.js} +0 -35
  165. package/dist/models/model-roles.js.map +1 -0
  166. package/dist/{plan-pools.d.ts → models/plan-pools.d.ts} +1 -1
  167. package/dist/models/plan-pools.d.ts.map +1 -0
  168. package/dist/models/plan-pools.js.map +1 -0
  169. package/dist/models/prompt-complexity.d.ts.map +1 -0
  170. package/dist/models/prompt-complexity.js.map +1 -0
  171. package/dist/models/provider-specs.d.ts.map +1 -0
  172. package/dist/models/provider-specs.js.map +1 -0
  173. package/dist/policy/approvals-execution.d.ts.map +1 -0
  174. package/dist/policy/approvals-execution.js.map +1 -0
  175. package/dist/{batch-runs.d.ts → policy/batch-runs.d.ts} +5 -1
  176. package/dist/policy/batch-runs.d.ts.map +1 -0
  177. package/dist/{batch-runs.js → policy/batch-runs.js} +10 -7
  178. package/dist/policy/batch-runs.js.map +1 -0
  179. package/dist/policy/capability-env.d.ts.map +1 -0
  180. package/dist/policy/capability-env.js.map +1 -0
  181. package/dist/policy/capability-secrets.d.ts.map +1 -0
  182. package/dist/policy/capability-secrets.js.map +1 -0
  183. package/dist/{card-status.d.ts → policy/card-status.d.ts} +2 -2
  184. package/dist/policy/card-status.d.ts.map +1 -0
  185. package/dist/{card-status.js → policy/card-status.js} +1 -5
  186. package/dist/policy/card-status.js.map +1 -0
  187. package/dist/{command-classes.d.ts → policy/command-classes.d.ts} +6 -2
  188. package/dist/policy/command-classes.d.ts.map +1 -0
  189. package/dist/{command-classes.js → policy/command-classes.js} +48 -11
  190. package/dist/policy/command-classes.js.map +1 -0
  191. package/dist/{command-run.d.ts → policy/command-run.d.ts} +1 -1
  192. package/dist/policy/command-run.d.ts.map +1 -0
  193. package/dist/policy/command-run.js.map +1 -0
  194. package/dist/policy/control-scopes.d.ts +16 -0
  195. package/dist/policy/control-scopes.d.ts.map +1 -0
  196. package/dist/policy/control-scopes.js +26 -0
  197. package/dist/policy/control-scopes.js.map +1 -0
  198. package/dist/policy/credential-material.d.ts.map +1 -0
  199. package/dist/policy/credential-material.js.map +1 -0
  200. package/dist/policy/needs-action.d.ts.map +1 -0
  201. package/dist/policy/needs-action.js.map +1 -0
  202. package/dist/policy/output-fields.d.ts.map +1 -0
  203. package/dist/policy/output-fields.js.map +1 -0
  204. package/dist/policy/overlay-lint.d.ts.map +1 -0
  205. package/dist/policy/overlay-lint.js.map +1 -0
  206. package/dist/policy/owner-ticket.d.ts.map +1 -0
  207. package/dist/{owner-ticket.js → policy/owner-ticket.js} +1 -1
  208. package/dist/policy/owner-ticket.js.map +1 -0
  209. package/dist/{safety-policy.d.ts → policy/safety-policy.d.ts} +6 -5
  210. package/dist/policy/safety-policy.d.ts.map +1 -0
  211. package/dist/{safety-policy.js → policy/safety-policy.js} +12 -12
  212. package/dist/policy/safety-policy.js.map +1 -0
  213. package/dist/policy/search-globs.d.ts.map +1 -0
  214. package/dist/policy/search-globs.js.map +1 -0
  215. package/dist/protocol/container-requirements.d.ts +20 -0
  216. package/dist/protocol/container-requirements.d.ts.map +1 -0
  217. package/dist/protocol/container-requirements.js +23 -0
  218. package/dist/protocol/container-requirements.js.map +1 -0
  219. package/dist/{host-protocol.d.ts → protocol/host-protocol.d.ts} +1 -0
  220. package/dist/protocol/host-protocol.d.ts.map +1 -0
  221. package/dist/{host-protocol.js → protocol/host-protocol.js} +1 -0
  222. package/dist/protocol/host-protocol.js.map +1 -0
  223. package/dist/protocol/ingress-contract.d.ts.map +1 -0
  224. package/dist/{ingress-contract.js → protocol/ingress-contract.js} +1 -1
  225. package/dist/protocol/ingress-contract.js.map +1 -0
  226. package/dist/protocol/ingress-protocol.d.ts.map +1 -0
  227. package/dist/protocol/ingress-protocol.js.map +1 -0
  228. package/dist/protocol/listener-protocol.d.ts.map +1 -0
  229. package/dist/{listener-protocol.js → protocol/listener-protocol.js} +1 -1
  230. package/dist/protocol/listener-protocol.js.map +1 -0
  231. package/dist/{peer-dial.d.ts → protocol/peer-dial.d.ts} +4 -1
  232. package/dist/protocol/peer-dial.d.ts.map +1 -0
  233. package/dist/{peer-dial.js → protocol/peer-dial.js} +51 -10
  234. package/dist/protocol/peer-dial.js.map +1 -0
  235. package/dist/protocol/peer-mcp-server.d.ts.map +1 -0
  236. package/dist/protocol/peer-mcp-server.js.map +1 -0
  237. package/dist/protocol/request-id.d.ts.map +1 -0
  238. package/dist/protocol/request-id.js.map +1 -0
  239. package/dist/protocol/routes.d.ts.map +1 -0
  240. package/dist/protocol/routes.js.map +1 -0
  241. package/dist/{runner-protocol.d.ts → protocol/runner-protocol.d.ts} +1 -0
  242. package/dist/protocol/runner-protocol.d.ts.map +1 -0
  243. package/dist/{runner-protocol.js → protocol/runner-protocol.js} +2 -1
  244. package/dist/protocol/runner-protocol.js.map +1 -0
  245. package/dist/protocol/sse.d.ts.map +1 -0
  246. package/dist/protocol/sse.js.map +1 -0
  247. package/dist/{terminal-protocol.d.ts → protocol/terminal-protocol.d.ts} +1 -3
  248. package/dist/protocol/terminal-protocol.d.ts.map +1 -0
  249. package/dist/protocol/terminal-protocol.js.map +1 -0
  250. package/dist/protocol/webext-links.d.ts.map +1 -0
  251. package/dist/protocol/webext-links.js.map +1 -0
  252. package/dist/{webext-protocol.d.ts → protocol/webext-protocol.d.ts} +1 -0
  253. package/dist/protocol/webext-protocol.d.ts.map +1 -0
  254. package/dist/{webext-protocol.js → protocol/webext-protocol.js} +1 -0
  255. package/dist/protocol/webext-protocol.js.map +1 -0
  256. package/dist/schemas/activity.d.ts +2 -0
  257. package/dist/schemas/activity.d.ts.map +1 -1
  258. package/dist/schemas/activity.js +4 -0
  259. package/dist/schemas/activity.js.map +1 -1
  260. package/dist/schemas/agent.d.ts +16 -4
  261. package/dist/schemas/agent.d.ts.map +1 -1
  262. package/dist/schemas/agent.js +21 -4
  263. package/dist/schemas/agent.js.map +1 -1
  264. package/dist/schemas/agents.d.ts +17 -4
  265. package/dist/schemas/agents.d.ts.map +1 -1
  266. package/dist/schemas/agents.js +15 -4
  267. package/dist/schemas/agents.js.map +1 -1
  268. package/dist/schemas/approvals.d.ts.map +1 -1
  269. package/dist/schemas/approvals.js.map +1 -1
  270. package/dist/schemas/automations.d.ts +54 -28
  271. package/dist/schemas/automations.d.ts.map +1 -1
  272. package/dist/schemas/automations.js +26 -8
  273. package/dist/schemas/automations.js.map +1 -1
  274. package/dist/schemas/capabilities.d.ts +0 -8
  275. package/dist/schemas/capabilities.d.ts.map +1 -1
  276. package/dist/schemas/capabilities.js +0 -4
  277. package/dist/schemas/capabilities.js.map +1 -1
  278. package/dist/schemas/ci.d.ts +10 -0
  279. package/dist/schemas/ci.d.ts.map +1 -1
  280. package/dist/schemas/ci.js +9 -1
  281. package/dist/schemas/ci.js.map +1 -1
  282. package/dist/schemas/codebase-health.d.ts.map +1 -1
  283. package/dist/schemas/codebase-health.js.map +1 -1
  284. package/dist/schemas/devices.d.ts +90 -0
  285. package/dist/schemas/devices.d.ts.map +1 -1
  286. package/dist/schemas/devices.js +10 -1
  287. package/dist/schemas/devices.js.map +1 -1
  288. package/dist/schemas/engines.d.ts.map +1 -1
  289. package/dist/schemas/engines.js.map +1 -1
  290. package/dist/schemas/environment.d.ts.map +1 -1
  291. package/dist/schemas/environment.js.map +1 -1
  292. package/dist/schemas/exit.d.ts.map +1 -1
  293. package/dist/schemas/exit.js.map +1 -1
  294. package/dist/schemas/extension-updates.d.ts.map +1 -1
  295. package/dist/schemas/extension-updates.js.map +1 -1
  296. package/dist/schemas/git-history.d.ts.map +1 -1
  297. package/dist/schemas/git-history.js.map +1 -1
  298. package/dist/schemas/git.d.ts +80 -16
  299. package/dist/schemas/git.d.ts.map +1 -1
  300. package/dist/schemas/git.js +37 -25
  301. package/dist/schemas/git.js.map +1 -1
  302. package/dist/schemas/history.d.ts.map +1 -1
  303. package/dist/schemas/history.js.map +1 -1
  304. package/dist/schemas/hosts.d.ts.map +1 -1
  305. package/dist/schemas/hosts.js.map +1 -1
  306. package/dist/schemas/inventory.d.ts.map +1 -1
  307. package/dist/schemas/inventory.js.map +1 -1
  308. package/dist/schemas/issues.d.ts +0 -1
  309. package/dist/schemas/issues.d.ts.map +1 -1
  310. package/dist/schemas/issues.js +0 -1
  311. package/dist/schemas/issues.js.map +1 -1
  312. package/dist/schemas/logs.d.ts.map +1 -1
  313. package/dist/schemas/logs.js.map +1 -1
  314. package/dist/schemas/loops.d.ts.map +1 -1
  315. package/dist/schemas/loops.js +1 -1
  316. package/dist/schemas/loops.js.map +1 -1
  317. package/dist/schemas/maintenance.d.ts.map +1 -1
  318. package/dist/schemas/maintenance.js.map +1 -1
  319. package/dist/schemas/marketplace.d.ts +0 -4
  320. package/dist/schemas/marketplace.d.ts.map +1 -1
  321. package/dist/schemas/panels.d.ts.map +1 -1
  322. package/dist/schemas/panels.js.map +1 -1
  323. package/dist/schemas/personas.d.ts +2 -1
  324. package/dist/schemas/personas.d.ts.map +1 -1
  325. package/dist/schemas/personas.js +6 -2
  326. package/dist/schemas/personas.js.map +1 -1
  327. package/dist/schemas/plan-limits.d.ts +2 -4
  328. package/dist/schemas/plan-limits.d.ts.map +1 -1
  329. package/dist/schemas/plan-limits.js +5 -8
  330. package/dist/schemas/plan-limits.js.map +1 -1
  331. package/dist/schemas/ports.d.ts.map +1 -1
  332. package/dist/schemas/ports.js.map +1 -1
  333. package/dist/schemas/provider-oauth.d.ts.map +1 -1
  334. package/dist/schemas/provider-oauth.js.map +1 -1
  335. package/dist/schemas/provider-subscriptions.d.ts +1 -1
  336. package/dist/schemas/provider-subscriptions.d.ts.map +1 -1
  337. package/dist/schemas/provider-subscriptions.js +1 -1
  338. package/dist/schemas/provider-subscriptions.js.map +1 -1
  339. package/dist/schemas/public.d.ts.map +1 -1
  340. package/dist/schemas/public.js.map +1 -1
  341. package/dist/schemas/push.d.ts.map +1 -1
  342. package/dist/schemas/push.js.map +1 -1
  343. package/dist/schemas/secrets.d.ts.map +1 -1
  344. package/dist/schemas/secrets.js.map +1 -1
  345. package/dist/schemas/settings.d.ts +6 -9
  346. package/dist/schemas/settings.d.ts.map +1 -1
  347. package/dist/schemas/settings.js +16 -5
  348. package/dist/schemas/settings.js.map +1 -1
  349. package/dist/schemas/share.d.ts.map +1 -1
  350. package/dist/schemas/share.js.map +1 -1
  351. package/dist/schemas/shared.d.ts +4 -0
  352. package/dist/schemas/shared.d.ts.map +1 -1
  353. package/dist/schemas/shared.js +3 -0
  354. package/dist/schemas/shared.js.map +1 -1
  355. package/dist/schemas/system.d.ts +6 -0
  356. package/dist/schemas/system.d.ts.map +1 -1
  357. package/dist/schemas/system.js +10 -0
  358. package/dist/schemas/system.js.map +1 -1
  359. package/dist/schemas/terminal.d.ts.map +1 -1
  360. package/dist/schemas/terminal.js.map +1 -1
  361. package/dist/schemas/usage.d.ts.map +1 -1
  362. package/dist/schemas/usage.js.map +1 -1
  363. package/dist/schemas/vpn.d.ts.map +1 -1
  364. package/dist/schemas/vpn.js.map +1 -1
  365. package/dist/schemas/webext.d.ts.map +1 -1
  366. package/dist/schemas/webext.js.map +1 -1
  367. package/dist/schemas/workflows.d.ts +66 -9
  368. package/dist/schemas/workflows.d.ts.map +1 -1
  369. package/dist/schemas/workflows.js +6 -5
  370. package/dist/schemas/workflows.js.map +1 -1
  371. package/dist/schemas/workspace-repos.d.ts.map +1 -1
  372. package/dist/schemas/workspace-repos.js.map +1 -1
  373. package/dist/schemas/workspace-search.d.ts.map +1 -1
  374. package/dist/schemas/workspace-search.js.map +1 -1
  375. package/dist/schemas/workspace-setup.d.ts.map +1 -1
  376. package/dist/schemas/workspace-setup.js.map +1 -1
  377. package/dist/schemas/workspace-tree.d.ts.map +1 -1
  378. package/dist/schemas/workspace-tree.js.map +1 -1
  379. package/dist/state/arrival.d.ts.map +1 -0
  380. package/dist/{arrival.js → state/arrival.js} +1 -1
  381. package/dist/state/arrival.js.map +1 -0
  382. package/dist/state/contract-lock.d.ts.map +1 -0
  383. package/dist/{contract-lock.js → state/contract-lock.js} +1 -1
  384. package/dist/state/contract-lock.js.map +1 -0
  385. package/dist/{definition.d.ts → state/definition.d.ts} +21 -17
  386. package/dist/state/definition.d.ts.map +1 -0
  387. package/dist/{definition.js → state/definition.js} +4 -4
  388. package/dist/state/definition.js.map +1 -0
  389. package/dist/state/history-state.d.ts.map +1 -0
  390. package/dist/{history-state.js → state/history-state.js} +1 -0
  391. package/dist/state/history-state.js.map +1 -0
  392. package/dist/state/runtime-state.d.ts.map +1 -0
  393. package/dist/state/runtime-state.js.map +1 -0
  394. package/dist/state/starter.d.ts.map +1 -0
  395. package/dist/state/starter.js.map +1 -0
  396. package/dist/state/state-portability.d.ts.map +1 -0
  397. package/dist/state/state-portability.js.map +1 -0
  398. package/dist/state/versions.d.ts.map +1 -0
  399. package/dist/state/versions.js.map +1 -0
  400. package/dist/{workspace-state.d.ts → state/workspace-state.d.ts} +8 -0
  401. package/dist/state/workspace-state.d.ts.map +1 -0
  402. package/dist/{workspace-state.js → state/workspace-state.js} +25 -0
  403. package/dist/state/workspace-state.js.map +1 -0
  404. package/dist/{documents.d.ts → text/documents.d.ts} +1 -1
  405. package/dist/text/documents.d.ts.map +1 -0
  406. package/dist/{documents.js → text/documents.js} +1 -1
  407. package/dist/text/documents.js.map +1 -0
  408. package/dist/text/embed.d.ts.map +1 -0
  409. package/dist/text/embed.js.map +1 -0
  410. package/dist/text/mentions.d.ts.map +1 -0
  411. package/dist/text/mentions.js.map +1 -0
  412. package/dist/text/model-answer.d.ts +3 -0
  413. package/dist/text/model-answer.d.ts.map +1 -0
  414. package/dist/text/model-answer.js +3 -0
  415. package/dist/text/model-answer.js.map +1 -0
  416. package/dist/text/path-refs.d.ts.map +1 -0
  417. package/dist/text/path-refs.js.map +1 -0
  418. package/dist/{shell-regions.d.ts → text/shell-regions.d.ts} +1 -1
  419. package/dist/text/shell-regions.d.ts.map +1 -0
  420. package/dist/text/shell-regions.js.map +1 -0
  421. package/dist/text/title.d.ts.map +1 -0
  422. package/dist/text/title.js.map +1 -0
  423. package/dist/{transcript-fold.d.ts → text/transcript-fold.d.ts} +2 -1
  424. package/dist/text/transcript-fold.d.ts.map +1 -0
  425. package/dist/{transcript-fold.js → text/transcript-fold.js} +2 -16
  426. package/dist/text/transcript-fold.js.map +1 -0
  427. package/dist/text/whisper.d.ts +3 -0
  428. package/dist/text/whisper.d.ts.map +1 -0
  429. package/dist/text/whisper.js +11 -0
  430. package/dist/text/whisper.js.map +1 -0
  431. package/dist/{workflow-faults.d.ts → text/workflow-faults.d.ts} +1 -1
  432. package/dist/text/workflow-faults.d.ts.map +1 -0
  433. package/dist/{workflow-faults.js → text/workflow-faults.js} +1 -1
  434. package/dist/text/workflow-faults.js.map +1 -0
  435. package/package.json +70 -70
  436. package/src/chores/chores.test.ts +4 -10
  437. package/src/chores/chores.ts +148 -392
  438. package/src/chores/digest.ts +8 -28
  439. package/src/chores/extension-update.ts +3 -8
  440. package/src/chores/fix-deps.ts +4 -18
  441. package/src/chores/index.ts +2 -2
  442. package/src/chores/probes.test.ts +7 -43
  443. package/src/chores/probes.ts +62 -167
  444. package/src/chores/prompt.ts +10 -34
  445. package/src/chores/stack.test.ts +6 -45
  446. package/src/chores/stack.ts +27 -118
  447. package/src/chores/verdict.test.ts +101 -80
  448. package/src/chores/verdict.ts +54 -99
  449. package/src/contracts/accounts.contract.ts +4 -19
  450. package/src/contracts/agent.contract.ts +7 -22
  451. package/src/contracts/agents.contract.ts +25 -71
  452. package/src/contracts/automations.contract.ts +14 -30
  453. package/src/contracts/capabilities.contract.ts +8 -35
  454. package/src/contracts/chores.contract.ts +4 -15
  455. package/src/contracts/endpoints.contract.ts +5 -22
  456. package/src/contracts/exit.contract.ts +7 -30
  457. package/src/contracts/extensions.contract.ts +8 -30
  458. package/src/contracts/git.contract.ts +25 -49
  459. package/src/contracts/host.contract.ts +9 -44
  460. package/src/contracts/intentic.contract.ts +1 -1
  461. package/src/contracts/logs.contract.ts +3 -13
  462. package/src/contracts/loops.contract.ts +9 -40
  463. package/src/contracts/personas.contract.ts +10 -35
  464. package/src/contracts/providers.contract.ts +4 -17
  465. package/src/contracts/runner.contract.ts +12 -39
  466. package/src/contracts/safety.contract.ts +5 -14
  467. package/src/contracts/secrets.contract.ts +4 -22
  468. package/src/contracts/sessions.contract.ts +1 -1
  469. package/src/contracts/settings.contract.ts +4 -10
  470. package/src/contracts/share.contract.ts +3 -9
  471. package/src/contracts/skills.contract.ts +4 -15
  472. package/src/contracts/system.contract.ts +26 -52
  473. package/src/contracts/usage.contract.ts +7 -21
  474. package/src/contracts/vpn.contract.ts +9 -16
  475. package/src/contracts/webext.contract.ts +9 -25
  476. package/src/contracts/workflows.contract.ts +34 -58
  477. package/src/contracts/workspace.contract.ts +19 -50
  478. package/src/events/agent-events.ts +345 -0
  479. package/src/events/cards.ts +286 -0
  480. package/src/{events.test.ts → events/resume.test.ts} +4 -19
  481. package/src/events/resume.ts +60 -0
  482. package/src/events/system-events.ts +139 -0
  483. package/src/events/transcript.ts +320 -0
  484. package/src/{conversation-ids.test.ts → ids/conversation-ids.test.ts} +25 -13
  485. package/src/ids/conversation-ids.ts +178 -0
  486. package/src/ids/hostnames.ts +129 -0
  487. package/src/ids/session-names.ts +29 -0
  488. package/src/ids/share-paths.ts +43 -0
  489. package/src/{tunnel-ids.test.ts → ids/tunnel-ids.test.ts} +1 -14
  490. package/src/ids/tunnel-ids.ts +29 -0
  491. package/src/index.ts +71 -87
  492. package/src/{agent-catalog.test.ts → models/agent-catalog.test.ts} +19 -93
  493. package/src/models/agent-catalog.ts +174 -0
  494. package/src/models/agent-runtimes.ts +201 -0
  495. package/src/models/capability-ledger.test.ts +84 -0
  496. package/src/{fast-tier.test.ts → models/fast-tier.test.ts} +7 -18
  497. package/src/models/fast-tier.ts +36 -0
  498. package/src/{model-order.test.ts → models/model-order.test.ts} +19 -40
  499. package/src/models/model-order.ts +163 -0
  500. package/src/{model-pins.test.ts → models/model-pins.test.ts} +12 -46
  501. package/src/models/model-pins.ts +57 -0
  502. package/src/models/model-roles.test.ts +38 -0
  503. package/src/models/model-roles.ts +180 -0
  504. package/src/{plan-pools.test.ts → models/plan-pools.test.ts} +6 -11
  505. package/src/models/plan-pools.ts +65 -0
  506. package/src/{prompt-complexity.test.ts → models/prompt-complexity.test.ts} +8 -60
  507. package/src/models/prompt-complexity.ts +215 -0
  508. package/src/{provider-specs.test.ts → models/provider-specs.test.ts} +18 -47
  509. package/src/models/provider-specs.ts +272 -0
  510. package/src/policy/approvals-execution.ts +58 -0
  511. package/src/{batch-runs.test.ts → policy/batch-runs.test.ts} +4 -20
  512. package/src/policy/batch-runs.ts +137 -0
  513. package/src/policy/capability-secrets.ts +5 -0
  514. package/src/{card-status.ts → policy/card-status.ts} +11 -26
  515. package/src/{command-classes.test.ts → policy/command-classes.test.ts} +11 -118
  516. package/src/policy/command-classes.ts +395 -0
  517. package/src/policy/command-run.ts +65 -0
  518. package/src/policy/control-scopes.ts +38 -0
  519. package/src/{credential-material.test.ts → policy/credential-material.test.ts} +4 -26
  520. package/src/policy/credential-material.ts +91 -0
  521. package/src/policy/needs-action.ts +5 -0
  522. package/src/policy/output-fields.ts +86 -0
  523. package/src/policy/overlay-lint.ts +100 -0
  524. package/src/{owner-ticket.test.ts → policy/owner-ticket.test.ts} +1 -1
  525. package/src/{owner-ticket.ts → policy/owner-ticket.ts} +9 -31
  526. package/src/policy/safety-policy.test.ts +84 -0
  527. package/src/policy/safety-policy.ts +142 -0
  528. package/src/policy/search-globs.ts +60 -0
  529. package/src/protocol/container-requirements.test.ts +72 -0
  530. package/src/protocol/container-requirements.ts +58 -0
  531. package/src/protocol/host-protocol.ts +29 -0
  532. package/src/protocol/ingress-contract.ts +103 -0
  533. package/src/{ingress-protocol.test.ts → protocol/ingress-protocol.test.ts} +25 -90
  534. package/src/protocol/ingress-protocol.ts +441 -0
  535. package/src/protocol/listener-protocol.ts +75 -0
  536. package/src/{peer-dial.test.ts → protocol/peer-dial.test.ts} +52 -1
  537. package/src/protocol/peer-dial.ts +207 -0
  538. package/src/{peer-mcp-server.ts → protocol/peer-mcp-server.ts} +16 -41
  539. package/src/protocol/request-id.ts +5 -0
  540. package/src/{routes.test.ts → protocol/routes.test.ts} +14 -22
  541. package/src/protocol/routes.ts +159 -0
  542. package/src/protocol/runner-protocol.ts +197 -0
  543. package/src/protocol/terminal-protocol.ts +13 -0
  544. package/src/protocol/webext-links.ts +50 -0
  545. package/src/protocol/webext-protocol.ts +24 -0
  546. package/src/schemas/activity.ts +22 -30
  547. package/src/schemas/agent.ts +130 -238
  548. package/src/schemas/agents.ts +165 -483
  549. package/src/schemas/approvals.ts +23 -71
  550. package/src/schemas/automations.ts +142 -250
  551. package/src/schemas/capabilities.ts +127 -414
  552. package/src/schemas/ci.ts +56 -108
  553. package/src/schemas/codebase-health.ts +7 -11
  554. package/src/schemas/devices.ts +98 -321
  555. package/src/schemas/engines.ts +16 -44
  556. package/src/schemas/environment.ts +41 -91
  557. package/src/schemas/exit.ts +24 -81
  558. package/src/schemas/extension-updates.ts +42 -87
  559. package/src/schemas/git-history.ts +30 -84
  560. package/src/schemas/git.ts +141 -256
  561. package/src/schemas/history.ts +14 -40
  562. package/src/schemas/hosts.ts +9 -15
  563. package/src/schemas/inventory.ts +8 -10
  564. package/src/schemas/issues.ts +66 -134
  565. package/src/schemas/logs.ts +15 -34
  566. package/src/schemas/loops.ts +46 -163
  567. package/src/schemas/maintenance.ts +47 -172
  568. package/src/schemas/panels.ts +20 -45
  569. package/src/schemas/personas.ts +50 -200
  570. package/src/schemas/plan-limits.ts +58 -197
  571. package/src/schemas/ports.ts +14 -32
  572. package/src/schemas/provider-oauth.ts +23 -76
  573. package/src/schemas/provider-subscriptions.ts +4 -13
  574. package/src/schemas/public.ts +4 -15
  575. package/src/schemas/push.ts +8 -36
  576. package/src/schemas/secrets.ts +20 -64
  577. package/src/schemas/settings.ts +175 -600
  578. package/src/schemas/share.ts +14 -32
  579. package/src/schemas/shared.ts +14 -13
  580. package/src/schemas/system.ts +46 -78
  581. package/src/schemas/terminal.ts +41 -120
  582. package/src/schemas/usage.ts +44 -233
  583. package/src/schemas/version-seam.test.ts +9 -26
  584. package/src/schemas/vpn.ts +27 -64
  585. package/src/schemas/webext.ts +22 -53
  586. package/src/schemas/workflows.ts +57 -183
  587. package/src/schemas/workspace-repos.ts +12 -24
  588. package/src/schemas/workspace-search.ts +17 -35
  589. package/src/schemas/workspace-setup.ts +4 -11
  590. package/src/schemas/workspace-tree.ts +32 -91
  591. package/src/state/arrival.ts +109 -0
  592. package/src/state/contract-lock.test.ts +17 -0
  593. package/src/state/contract-lock.ts +49 -0
  594. package/src/state/definition.ts +143 -0
  595. package/src/state/history-state.ts +103 -0
  596. package/src/{runtime-state.test.ts → state/runtime-state.test.ts} +3 -10
  597. package/src/state/runtime-state.ts +62 -0
  598. package/src/state/starter.ts +5 -0
  599. package/src/state/state-portability.ts +27 -0
  600. package/src/state/versions.ts +26 -0
  601. package/src/{workspace-state.test.ts → state/workspace-state.test.ts} +65 -172
  602. package/src/state/workspace-state.ts +669 -0
  603. package/src/{documents.test.ts → text/documents.test.ts} +1 -1
  604. package/src/text/documents.ts +42 -0
  605. package/src/text/embed.ts +132 -0
  606. package/src/text/mentions.ts +21 -0
  607. package/src/text/model-answer.ts +9 -0
  608. package/src/text/path-refs.ts +39 -0
  609. package/src/text/shell-regions.ts +224 -0
  610. package/src/{title.test.ts → text/title.test.ts} +13 -32
  611. package/src/text/title.ts +202 -0
  612. package/src/{transcript-fold.test.ts → text/transcript-fold.test.ts} +5 -83
  613. package/src/{transcript-fold.ts → text/transcript-fold.ts} +65 -170
  614. package/src/text/whisper.test.ts +19 -0
  615. package/src/text/whisper.ts +17 -0
  616. package/src/{workflow-faults.test.ts → text/workflow-faults.test.ts} +6 -24
  617. package/src/{workflow-faults.ts → text/workflow-faults.ts} +20 -60
  618. package/dist/agent-catalog.d.ts.map +0 -1
  619. package/dist/agent-catalog.js.map +0 -1
  620. package/dist/agent-runtimes.d.ts.map +0 -1
  621. package/dist/agent-runtimes.js.map +0 -1
  622. package/dist/approvals-execution.d.ts.map +0 -1
  623. package/dist/approvals-execution.js.map +0 -1
  624. package/dist/arrival.d.ts.map +0 -1
  625. package/dist/arrival.js.map +0 -1
  626. package/dist/batch-runs.d.ts.map +0 -1
  627. package/dist/batch-runs.js.map +0 -1
  628. package/dist/capability-env.d.ts.map +0 -1
  629. package/dist/capability-env.js.map +0 -1
  630. package/dist/capability-secrets.d.ts.map +0 -1
  631. package/dist/capability-secrets.js.map +0 -1
  632. package/dist/card-status.d.ts.map +0 -1
  633. package/dist/card-status.js.map +0 -1
  634. package/dist/command-classes.d.ts.map +0 -1
  635. package/dist/command-classes.js.map +0 -1
  636. package/dist/command-run.d.ts.map +0 -1
  637. package/dist/command-run.js.map +0 -1
  638. package/dist/contract-lock.d.ts.map +0 -1
  639. package/dist/contract-lock.js.map +0 -1
  640. package/dist/conversation-ids.d.ts +0 -4
  641. package/dist/conversation-ids.d.ts.map +0 -1
  642. package/dist/conversation-ids.js.map +0 -1
  643. package/dist/credential-material.d.ts.map +0 -1
  644. package/dist/credential-material.js.map +0 -1
  645. package/dist/definition.d.ts.map +0 -1
  646. package/dist/definition.js.map +0 -1
  647. package/dist/documents.d.ts.map +0 -1
  648. package/dist/documents.js.map +0 -1
  649. package/dist/embed.d.ts.map +0 -1
  650. package/dist/embed.js.map +0 -1
  651. package/dist/events.d.ts +0 -4336
  652. package/dist/events.d.ts.map +0 -1
  653. package/dist/events.js +0 -725
  654. package/dist/events.js.map +0 -1
  655. package/dist/fast-tier.d.ts.map +0 -1
  656. package/dist/fast-tier.js.map +0 -1
  657. package/dist/history-state.d.ts.map +0 -1
  658. package/dist/history-state.js.map +0 -1
  659. package/dist/host-protocol.d.ts.map +0 -1
  660. package/dist/host-protocol.js.map +0 -1
  661. package/dist/hostnames.d.ts.map +0 -1
  662. package/dist/hostnames.js.map +0 -1
  663. package/dist/ingress-contract.d.ts.map +0 -1
  664. package/dist/ingress-contract.js.map +0 -1
  665. package/dist/ingress-protocol.d.ts.map +0 -1
  666. package/dist/ingress-protocol.js.map +0 -1
  667. package/dist/listener-protocol.d.ts.map +0 -1
  668. package/dist/listener-protocol.js.map +0 -1
  669. package/dist/mentions.d.ts.map +0 -1
  670. package/dist/mentions.js.map +0 -1
  671. package/dist/model-order.d.ts.map +0 -1
  672. package/dist/model-order.js.map +0 -1
  673. package/dist/model-pins.d.ts.map +0 -1
  674. package/dist/model-pins.js.map +0 -1
  675. package/dist/model-roles.d.ts.map +0 -1
  676. package/dist/model-roles.js.map +0 -1
  677. package/dist/needs-action.d.ts.map +0 -1
  678. package/dist/needs-action.js.map +0 -1
  679. package/dist/output-fields.d.ts.map +0 -1
  680. package/dist/output-fields.js.map +0 -1
  681. package/dist/overlay-lint.d.ts.map +0 -1
  682. package/dist/overlay-lint.js.map +0 -1
  683. package/dist/owner-ticket.d.ts.map +0 -1
  684. package/dist/owner-ticket.js.map +0 -1
  685. package/dist/path-refs.d.ts.map +0 -1
  686. package/dist/path-refs.js.map +0 -1
  687. package/dist/peer-dial.d.ts.map +0 -1
  688. package/dist/peer-dial.js.map +0 -1
  689. package/dist/peer-mcp-server.d.ts.map +0 -1
  690. package/dist/peer-mcp-server.js.map +0 -1
  691. package/dist/plan-pools.d.ts.map +0 -1
  692. package/dist/plan-pools.js.map +0 -1
  693. package/dist/prompt-complexity.d.ts.map +0 -1
  694. package/dist/prompt-complexity.js.map +0 -1
  695. package/dist/provider-specs.d.ts.map +0 -1
  696. package/dist/provider-specs.js.map +0 -1
  697. package/dist/request-id.d.ts.map +0 -1
  698. package/dist/request-id.js.map +0 -1
  699. package/dist/routes.d.ts.map +0 -1
  700. package/dist/routes.js.map +0 -1
  701. package/dist/runner-protocol.d.ts.map +0 -1
  702. package/dist/runner-protocol.js.map +0 -1
  703. package/dist/runtime-state.d.ts.map +0 -1
  704. package/dist/runtime-state.js.map +0 -1
  705. package/dist/safety-policy.d.ts.map +0 -1
  706. package/dist/safety-policy.js.map +0 -1
  707. package/dist/search-globs.d.ts.map +0 -1
  708. package/dist/search-globs.js.map +0 -1
  709. package/dist/session-names.d.ts.map +0 -1
  710. package/dist/session-names.js.map +0 -1
  711. package/dist/share-paths.d.ts.map +0 -1
  712. package/dist/share-paths.js.map +0 -1
  713. package/dist/shell-regions.d.ts.map +0 -1
  714. package/dist/shell-regions.js.map +0 -1
  715. package/dist/sse.d.ts.map +0 -1
  716. package/dist/sse.js.map +0 -1
  717. package/dist/starter.d.ts.map +0 -1
  718. package/dist/starter.js.map +0 -1
  719. package/dist/state-portability.d.ts.map +0 -1
  720. package/dist/state-portability.js.map +0 -1
  721. package/dist/terminal-protocol.d.ts.map +0 -1
  722. package/dist/terminal-protocol.js.map +0 -1
  723. package/dist/title.d.ts.map +0 -1
  724. package/dist/title.js.map +0 -1
  725. package/dist/transcript-fold.d.ts.map +0 -1
  726. package/dist/transcript-fold.js.map +0 -1
  727. package/dist/tunnel-ids.d.ts.map +0 -1
  728. package/dist/tunnel-ids.js.map +0 -1
  729. package/dist/versions.d.ts.map +0 -1
  730. package/dist/versions.js.map +0 -1
  731. package/dist/webext-links.d.ts.map +0 -1
  732. package/dist/webext-links.js.map +0 -1
  733. package/dist/webext-protocol.d.ts.map +0 -1
  734. package/dist/webext-protocol.js.map +0 -1
  735. package/dist/workflow-faults.d.ts.map +0 -1
  736. package/dist/workflow-faults.js.map +0 -1
  737. package/dist/workspace-state.d.ts.map +0 -1
  738. package/dist/workspace-state.js.map +0 -1
  739. package/src/agent-catalog.ts +0 -316
  740. package/src/agent-runtimes.ts +0 -419
  741. package/src/approvals-execution.ts +0 -96
  742. package/src/arrival.ts +0 -160
  743. package/src/batch-runs.ts +0 -188
  744. package/src/capability-ledger.test.ts +0 -140
  745. package/src/capability-secrets.ts +0 -20
  746. package/src/command-classes.ts +0 -617
  747. package/src/command-run.ts +0 -78
  748. package/src/contract-lock.test.ts +0 -23
  749. package/src/contract-lock.ts +0 -66
  750. package/src/conversation-ids.ts +0 -207
  751. package/src/credential-material.ts +0 -181
  752. package/src/definition.ts +0 -207
  753. package/src/documents.ts +0 -67
  754. package/src/embed.ts +0 -164
  755. package/src/events.ts +0 -1870
  756. package/src/fast-tier.ts +0 -72
  757. package/src/history-state.ts +0 -174
  758. package/src/host-protocol.ts +0 -36
  759. package/src/hostnames.ts +0 -180
  760. package/src/ingress-contract.ts +0 -157
  761. package/src/ingress-protocol.ts +0 -625
  762. package/src/listener-protocol.ts +0 -96
  763. package/src/mentions.ts +0 -25
  764. package/src/model-order.ts +0 -262
  765. package/src/model-pins.ts +0 -132
  766. package/src/model-roles.test.ts +0 -52
  767. package/src/model-roles.ts +0 -320
  768. package/src/needs-action.ts +0 -14
  769. package/src/output-fields.ts +0 -111
  770. package/src/overlay-lint.ts +0 -116
  771. package/src/path-refs.ts +0 -59
  772. package/src/peer-dial.ts +0 -163
  773. package/src/plan-pools.ts +0 -92
  774. package/src/prompt-complexity.ts +0 -334
  775. package/src/provider-specs.ts +0 -432
  776. package/src/request-id.ts +0 -41
  777. package/src/routes.ts +0 -219
  778. package/src/runner-protocol.ts +0 -239
  779. package/src/runtime-state.ts +0 -140
  780. package/src/safety-policy.test.ts +0 -88
  781. package/src/safety-policy.ts +0 -258
  782. package/src/search-globs.ts +0 -76
  783. package/src/session-names.ts +0 -44
  784. package/src/share-paths.ts +0 -68
  785. package/src/shell-regions.ts +0 -289
  786. package/src/starter.ts +0 -13
  787. package/src/state-portability.ts +0 -56
  788. package/src/terminal-protocol.ts +0 -16
  789. package/src/title.ts +0 -267
  790. package/src/tunnel-ids.ts +0 -57
  791. package/src/versions.ts +0 -48
  792. package/src/webext-links.ts +0 -90
  793. package/src/webext-protocol.ts +0 -27
  794. package/src/workspace-state.ts +0 -1090
  795. /package/dist/{hostnames.d.ts → ids/hostnames.d.ts} +0 -0
  796. /package/dist/{hostnames.js → ids/hostnames.js} +0 -0
  797. /package/dist/{session-names.d.ts → ids/session-names.d.ts} +0 -0
  798. /package/dist/{session-names.js → ids/session-names.js} +0 -0
  799. /package/dist/{share-paths.d.ts → ids/share-paths.d.ts} +0 -0
  800. /package/dist/{share-paths.js → ids/share-paths.js} +0 -0
  801. /package/dist/{agent-catalog.js → models/agent-catalog.js} +0 -0
  802. /package/dist/{agent-runtimes.d.ts → models/agent-runtimes.d.ts} +0 -0
  803. /package/dist/{agent-runtimes.js → models/agent-runtimes.js} +0 -0
  804. /package/dist/{fast-tier.js → models/fast-tier.js} +0 -0
  805. /package/dist/{model-order.d.ts → models/model-order.d.ts} +0 -0
  806. /package/dist/{model-order.js → models/model-order.js} +0 -0
  807. /package/dist/{model-pins.js → models/model-pins.js} +0 -0
  808. /package/dist/{plan-pools.js → models/plan-pools.js} +0 -0
  809. /package/dist/{prompt-complexity.d.ts → models/prompt-complexity.d.ts} +0 -0
  810. /package/dist/{prompt-complexity.js → models/prompt-complexity.js} +0 -0
  811. /package/dist/{provider-specs.d.ts → models/provider-specs.d.ts} +0 -0
  812. /package/dist/{provider-specs.js → models/provider-specs.js} +0 -0
  813. /package/dist/{approvals-execution.d.ts → policy/approvals-execution.d.ts} +0 -0
  814. /package/dist/{approvals-execution.js → policy/approvals-execution.js} +0 -0
  815. /package/dist/{capability-env.d.ts → policy/capability-env.d.ts} +0 -0
  816. /package/dist/{capability-env.js → policy/capability-env.js} +0 -0
  817. /package/dist/{capability-secrets.d.ts → policy/capability-secrets.d.ts} +0 -0
  818. /package/dist/{capability-secrets.js → policy/capability-secrets.js} +0 -0
  819. /package/dist/{command-run.js → policy/command-run.js} +0 -0
  820. /package/dist/{credential-material.d.ts → policy/credential-material.d.ts} +0 -0
  821. /package/dist/{credential-material.js → policy/credential-material.js} +0 -0
  822. /package/dist/{needs-action.d.ts → policy/needs-action.d.ts} +0 -0
  823. /package/dist/{needs-action.js → policy/needs-action.js} +0 -0
  824. /package/dist/{output-fields.d.ts → policy/output-fields.d.ts} +0 -0
  825. /package/dist/{output-fields.js → policy/output-fields.js} +0 -0
  826. /package/dist/{overlay-lint.d.ts → policy/overlay-lint.d.ts} +0 -0
  827. /package/dist/{overlay-lint.js → policy/overlay-lint.js} +0 -0
  828. /package/dist/{owner-ticket.d.ts → policy/owner-ticket.d.ts} +0 -0
  829. /package/dist/{search-globs.d.ts → policy/search-globs.d.ts} +0 -0
  830. /package/dist/{search-globs.js → policy/search-globs.js} +0 -0
  831. /package/dist/{ingress-contract.d.ts → protocol/ingress-contract.d.ts} +0 -0
  832. /package/dist/{ingress-protocol.d.ts → protocol/ingress-protocol.d.ts} +0 -0
  833. /package/dist/{ingress-protocol.js → protocol/ingress-protocol.js} +0 -0
  834. /package/dist/{listener-protocol.d.ts → protocol/listener-protocol.d.ts} +0 -0
  835. /package/dist/{peer-mcp-server.d.ts → protocol/peer-mcp-server.d.ts} +0 -0
  836. /package/dist/{peer-mcp-server.js → protocol/peer-mcp-server.js} +0 -0
  837. /package/dist/{request-id.d.ts → protocol/request-id.d.ts} +0 -0
  838. /package/dist/{request-id.js → protocol/request-id.js} +0 -0
  839. /package/dist/{routes.d.ts → protocol/routes.d.ts} +0 -0
  840. /package/dist/{routes.js → protocol/routes.js} +0 -0
  841. /package/dist/{sse.d.ts → protocol/sse.d.ts} +0 -0
  842. /package/dist/{sse.js → protocol/sse.js} +0 -0
  843. /package/dist/{terminal-protocol.js → protocol/terminal-protocol.js} +0 -0
  844. /package/dist/{webext-links.d.ts → protocol/webext-links.d.ts} +0 -0
  845. /package/dist/{webext-links.js → protocol/webext-links.js} +0 -0
  846. /package/dist/{arrival.d.ts → state/arrival.d.ts} +0 -0
  847. /package/dist/{contract-lock.d.ts → state/contract-lock.d.ts} +0 -0
  848. /package/dist/{history-state.d.ts → state/history-state.d.ts} +0 -0
  849. /package/dist/{runtime-state.d.ts → state/runtime-state.d.ts} +0 -0
  850. /package/dist/{runtime-state.js → state/runtime-state.js} +0 -0
  851. /package/dist/{starter.d.ts → state/starter.d.ts} +0 -0
  852. /package/dist/{starter.js → state/starter.js} +0 -0
  853. /package/dist/{state-portability.d.ts → state/state-portability.d.ts} +0 -0
  854. /package/dist/{state-portability.js → state/state-portability.js} +0 -0
  855. /package/dist/{versions.d.ts → state/versions.d.ts} +0 -0
  856. /package/dist/{versions.js → state/versions.js} +0 -0
  857. /package/dist/{embed.d.ts → text/embed.d.ts} +0 -0
  858. /package/dist/{embed.js → text/embed.js} +0 -0
  859. /package/dist/{mentions.d.ts → text/mentions.d.ts} +0 -0
  860. /package/dist/{mentions.js → text/mentions.js} +0 -0
  861. /package/dist/{path-refs.d.ts → text/path-refs.d.ts} +0 -0
  862. /package/dist/{path-refs.js → text/path-refs.js} +0 -0
  863. /package/dist/{shell-regions.js → text/shell-regions.js} +0 -0
  864. /package/dist/{title.d.ts → text/title.d.ts} +0 -0
  865. /package/dist/{title.js → text/title.js} +0 -0
  866. /package/src/{hostnames.test.ts → ids/hostnames.test.ts} +0 -0
  867. /package/src/{share-paths.test.ts → ids/share-paths.test.ts} +0 -0
  868. /package/src/{capability-env.ts → policy/capability-env.ts} +0 -0
  869. /package/src/{overlay-lint.test.ts → policy/overlay-lint.test.ts} +0 -0
  870. /package/src/{search-globs.test.ts → policy/search-globs.test.ts} +0 -0
  871. /package/src/{ingress-contract.test.ts → protocol/ingress-contract.test.ts} +0 -0
  872. /package/src/{peer-mcp-server.test.ts → protocol/peer-mcp-server.test.ts} +0 -0
  873. /package/src/{sse.ts → protocol/sse.ts} +0 -0
  874. /package/src/{versions.test.ts → state/versions.test.ts} +0 -0
  875. /package/src/{embed.test.ts → text/embed.test.ts} +0 -0
  876. /package/src/{mentions.test.ts → text/mentions.test.ts} +0 -0
  877. /package/src/{path-refs.test.ts → text/path-refs.test.ts} +0 -0
@@ -1,13 +1,9 @@
1
1
  import { z } from "zod";
2
- // The workspace-search wire shape, shared by the daemon's /workspace/search route and the web client.
3
- // (Implementation detail, not part of the contract: the daemon backs this route with a resident in-process iq
4
- // engine; the engine is interchangeable behind this shape.) Groups are relevance-ranked (best first, never path
5
- // order); each hit carries the match-reason tags the fused engines contributed, and the char spans within `text`
6
- // that matched, so clients highlight without re-finding the needle.
2
+ // Shared by /workspace/search and the web client. Groups rank by relevance, best first; each hit carries match tags and
3
+ // the char spans in `text`, for highlighting without a re-find.
7
4
  export const WorkspaceSearchQuerySchema = z.object({
8
5
  query: z.string().min(2).max(512).describe("What to look for. Plain words, a pattern, a symbol name, or a question."),
9
- // Search verbs only, anchor/git verbs (outline, context, log, who, …) are CLI-only surface. Natural language
10
- // has no verb of its own: `q` classifies the query and answers it semantically when the words call for it.
6
+ // Search verbs only; anchor/git verbs are CLI-only. Natural language needs none, `q` classifies it.
11
7
  mode: z
12
8
  .enum(["q", "find", "files", "def", "refs", "sym", "ast"])
13
9
  .optional()
@@ -15,16 +11,11 @@ export const WorkspaceSearchQuerySchema = z.object({
15
11
  "Narrow the search to one kind: plain text, filenames, definitions, references, symbols, or code structure. Leave it out to blend them, which also answers a question asked in words.",
16
12
  ),
17
13
  includeIgnored: z.stringbool().optional().describe("Search inside installed packages and other ignored folders too."),
18
- // How `find` reads the query, the three switches every editor's search box has (VSCode: Aa, ab, .*).
19
- // `literal` treats it as fixed text instead of a regex; `caseSensitive` off means case-INSENSITIVE, not
20
- // ripgrep's smart case.
14
+ // The three switches every search box has; caseSensitive off means case-insensitive, not ripgrep's smart case.
21
15
  literal: z.stringbool().optional().describe("Treat the query as fixed text rather than a pattern."),
22
16
  word: z.stringbool().optional().describe("Match whole words only."),
23
17
  caseSensitive: z.stringbool().optional().describe("Whether capitals matter. Off means they do not, rather than being guessed at from the query."),
24
- // Which FILES the query is asked of, in VSCode's files-to-include grammar, as TYPED, because the reading
25
- // of it is shared (search-globs.ts) rather than each end guessing: comma-separated patterns, each matched
26
- // at any depth unless `./` anchors it, a leading `!` excluding instead. Distinct from `includeIgnored`,
27
- // which decides whether the ignored layers are searched at all, this narrows within what that admitted.
18
+ // Files-to-include grammar: comma-separated patterns, any depth unless `./`-anchored, leading ! excludes.
28
19
  include: z
29
20
  .string()
30
21
  .max(512)
@@ -52,15 +43,14 @@ export type WorkspaceSearchSpan = z.infer<typeof WorkspaceSearchSpanSchema>;
52
43
  export const WorkspaceSearchHitSchema = z.object({
53
44
  line: z.number().describe("Which line, counting from one."),
54
45
  text: z.string().describe("The line itself."),
55
- // Every matched span in `text`, in order, a text search marks all of them, the way an editor does. Empty
56
- // where the LINE is the match and no span of it is (a semantic or definition hit reports none).
46
+ // Every matched span in text, in order; empty when the whole line is the match, not part of it.
57
47
  spans: z
58
48
  .array(WorkspaceSearchSpanSchema)
59
49
  .describe(
60
50
  "Where in the line the matches are, so you can highlight without searching again. Empty when the whole line is the match rather than part of it.",
61
51
  ),
62
52
  tags: z.array(WorkspaceSearchTagSchema).describe("Why it matched."),
63
- // Enclosing symbol ("createWidget (fn)"), parent-document context so the reader often needs no follow-up.
53
+ // Enclosing symbol or heading; often enough on its own, no need to open the file.
64
54
  context: z
65
55
  .string()
66
56
  .optional()
@@ -71,22 +61,20 @@ export const WorkspaceSearchGroupSchema = z.object({
71
61
  path: z.string().describe("The file."),
72
62
  score: z.number().describe("How well it matched. Groups arrive best first, never in path order."),
73
63
  hits: z.array(WorkspaceSearchHitSchema).describe("The matching lines in it."),
74
- // This file had more matching lines than the engine keeps per file, so `hits` is a floor, a panel showing a
75
- // per-file count has to say "50+" rather than "50".
64
+ // This file had more matches than kept per file; the count is a floor (say "50+", not "50").
76
65
  capped: z
77
66
  .boolean()
78
67
  .optional()
79
68
  .describe("This file had more matches than are kept per file, so the count is a floor. Say fifty-plus rather than fifty."),
80
69
  });
81
70
  export type WorkspaceSearchGroup = z.infer<typeof WorkspaceSearchGroupSchema>;
82
- // `building` = index still filling (progress 0..1, e.g. embeddings pending); `stale` = revalidation was skipped
83
- // (cursor replay). ageMs = time since the index last matched the disk state.
71
+ // building means the index is still filling (progress 0..1); stale means revalidation was skipped. ageMs is time since
72
+ // the index last matched disk.
84
73
  export const WorkspaceSearchFreshnessSchema = z.object({
85
74
  state: z.enum(["fresh", "building", "stale"]).describe("Whether the index matches what is on disk, is still filling, or has fallen behind."),
86
75
  ageMs: z.number().optional().describe("How long since it last matched the disk, in milliseconds."),
87
76
  progress: z.number().optional().describe("How far through building it is, from zero to one."),
88
- // How many files the index has not caught up with, when it is stale. A count is reportable; "stale" alone
89
- // reads as a warning about the answer, which it almost never is.
77
+ // How many files it hasn't caught up with; worth showing since "stale" alone reads as a warning.
90
78
  behind: z
91
79
  .number()
92
80
  .optional()
@@ -98,15 +86,13 @@ export type WorkspaceSearchFreshness = z.infer<typeof WorkspaceSearchFreshnessSc
98
86
  export const WorkspaceSearchResultSchema = z.object({
99
87
  mode: z.string().describe("Which kind of search actually ran, which matters when you let it choose."),
100
88
  total: z.number().describe("Matching lines across the whole workspace, not just this page."),
101
- // Files the query matched in total, which `groups` reports only for the page it carries, the count a
102
- // results panel puts beside the hit total ("218 results in 61 files").
89
+ // Files matched in total; `groups` only reports the ones on this page.
103
90
  files: z.number().describe("Files the query matched in total."),
104
91
  shown: z.number().describe("How many of those lines are on this page."),
105
92
  groups: z.array(WorkspaceSearchGroupSchema).describe("The results, grouped by file, best first."),
106
93
  freshness: WorkspaceSearchFreshnessSchema.describe("Whether the index behind the answer is up to date."),
107
94
  truncated: z.boolean().describe("This page is not all of it. Use the cursor."),
108
- // `total` is a FLOOR: at least one file had more matches than the engine keeps per file. Distinct from
109
- // `truncated`, which is about this PAGE, a result can be complete on the page and still count partially.
95
+ // A floor: some file had more matches than kept per file. Distinct from truncated, which is about the page.
110
96
  partial: z
111
97
  .boolean()
112
98
  .optional()
@@ -115,27 +101,23 @@ export const WorkspaceSearchResultSchema = z.object({
115
101
  ),
116
102
  cursor: z.string().optional().describe("Pass this back as `after` to get the next page."),
117
103
  hint: z.string().optional().describe("A suggestion for getting a better answer out of this query."),
118
- // What the engine did with the query that the query did not ask for, a pattern rerun as literal text
119
- // because it is not valid regex, grep-style escapes rewritten, a language filter that matched no files. The
120
- // text surface has always printed this above the results; a JSON caller could not see it at all.
104
+ // What the engine did unasked: a pattern rerun as literal, escapes rewritten, or a filter matching nothing.
121
105
  note: z
122
106
  .string()
123
107
  .optional()
124
108
  .describe(
125
109
  "What the engine did that you did not ask for: a pattern rerun as plain text because it was not valid, escapes rewritten, a language filter that matched nothing.",
126
110
  ),
127
- // Code-graph neighbors of the top hits (definition anchors + the strongest caller of each).
111
+ // Code-graph neighbors of the top hits: definition anchors and each one's strongest caller.
128
112
  related: z.array(z.string()).optional().describe("Places next door to the best results: where each is defined, and whatever calls it most."),
129
- // Ranked `path:line` anchors that placed but were NOT shown, best first, the answer often sits at rank 5–13,
130
- // behind groups the budget spent itself on. The text surface has always printed this map; a JSON caller could
131
- // not see it, so it had to page through `cursor` to learn what the terminal was told up front.
113
+ // Ranked path:line anchors that placed but weren't shown, best first; the answer often sits at rank 5-13.
132
114
  candidates: z
133
115
  .array(z.string())
134
116
  .optional()
135
117
  .describe(
136
118
  "Ranked places that scored but did not make the page, best first. The answer often sits at rank five to thirteen, so this saves paging through to find out.",
137
119
  ),
138
- // Run provenance for benchmarking: retrieval stages DISABLED this invocation (absent = full pipeline).
120
+ // Retrieval stages disabled for this run, for benchmarking; absent means the full pipeline ran.
139
121
  features: z.array(z.string()).optional().describe("Which stages of the search were switched off for this run. Absent means all of them ran."),
140
122
  });
141
123
  export type WorkspaceSearchResult = z.infer<typeof WorkspaceSearchResultSchema>;
@@ -1,14 +1,7 @@
1
1
  // workspace setup (dependency readiness)
2
2
  import { z } from "zod";
3
- // One project under /work and whether its dependencies are actually installed. A drop omits node_modules/.venv
4
- // on purpose, so a freshly imported project is present-but-unusable until this says "ready", the import UI,
5
- // the agent's post-edit type-check, and the agent's turn context all gate on it.
6
- // `dir` is root-relative ("" = the workspace root itself); `manager` is the real binary (pnpm/npm/uv/…);
7
- // `evidence` is the file that decided it ("pnpm-lock.yaml"), so the UI can show WHY, not just what.
8
- // state: ready | installing | needs-setup | unsupported (manager absent from this sandbox, `manager` names it)
9
- // | stale, installed ONCE and since outgrown: the manifests declare dependencies that are not on disk,
10
- // which is what an agent leaves behind when it adds one and does not install it. Same command fixes it,
11
- // so `missing` (how many names cannot resolve) is what separates the two in the UI's wording.
3
+ // Whether a project's dependencies are actually installed; a checkout omits node_modules/.venv, so an import is
4
+ // unusable until this reads ready. Gates the import UI, the post-edit type-check, and turn context.
12
5
  export const ProjectSetupSchema = z.object({
13
6
  dir: z.string().describe("Where the project is, relative to the workspace root. Empty means the root itself."),
14
7
  ecosystem: z.enum(["node", "python"]).describe("Which language's tooling it uses."),
@@ -27,8 +20,8 @@ export const WorkspaceSetupSchema = z.object({
27
20
  projects: z.array(ProjectSetupSchema).describe("Every project the sandbox found, and whether each is usable."),
28
21
  });
29
22
  export type WorkspaceSetup = z.infer<typeof WorkspaceSetupSchema>;
30
- // Install these projects' dependencies. Dirs already ready, already installing, or whose manager is missing are
31
- // skipped server-side, so a stale client list can't spawn redundant installs, `started` is what actually ran.
23
+ // Dirs already ready, installing, or with no manager are skipped server-side, so a stale client list can't spawn
24
+ // redundant installs; queued is what actually ran.
32
25
  export const WorkspaceInstallSchema = z.object({
33
26
  dirs: z
34
27
  .array(z.string().max(500))
@@ -1,51 +1,20 @@
1
1
  // workspace tree + files
2
2
  import { z } from "zod";
3
3
  import { ConversationIdSchema } from "./agent.js";
4
- /* WHOSE COPY OF THE WORKSPACE A READ MEANS, the half of a file address that used to be implicit, and wrong.
5
- *
6
- * There is not one workspace. There is the shared /work tree, and there is one private checkout per isolated
7
- * conversation, each holding files that conversation created and versions of files it edited. Every workspace
8
- * read route named a PATH and nothing else, so it could only ever answer from the shared tree, and an agent
9
- * that had just written `docs/plan.md` in its own checkout described a file the viewer could not open, while
10
- * an agent that had EDITED a file got something worse: the shared version, same path, different text, with
11
- * nothing to say so.
12
- *
13
- * So the conversation rides the request. Absent ⇒ the shared tree, which is what every existing caller means
14
- * and why the field is optional rather than a second set of routes. Present ⇒ that conversation's own
15
- * checkout, resolved daemon-side in ONE place (workspaceRootFor) so the escape guard, the control-plane
16
- * denylist and the ignore rules apply to it exactly as they do to /work.
17
- *
18
- * A conversation that is not isolated resolves BACK to the shared tree rather than failing: the shared tree
19
- * genuinely is its tree, and a caller should not have to know which mode a conversation runs in to link to a
20
- * file in it. */
4
+ // Which copy of the workspace a read means: the shared /work tree, or (if `agent` is set) that conversation's own
5
+ // checkout, resolved in one place so the escape guard, denylist and ignore rules apply the same either way.
21
6
  export const WorkspaceScopeSchema = z.object({
22
7
  agent: ConversationIdSchema.optional().describe(
23
8
  "Read a conversation's own private copy of the workspace rather than the shared tree. Leave it out for the shared tree. A conversation that is not working privately resolves back to the shared tree rather than failing, so a link need not know which mode it runs in.",
24
9
  ),
25
10
  });
26
11
  export type WorkspaceScope = z.infer<typeof WorkspaceScopeSchema>;
27
- /* One node of the full /work filesystem tree the agent sees (untracked + generated files included), distinct
28
- * from the git-tracked listing. `path` is root-relative with forward slashes so it feeds straight back to the
29
- * file route.
30
- *
31
- * Recursive, and the type is declared rather than inferred. Zod's getter form does infer one, but it collapses
32
- * to `{}` below the first level of nesting, so `entry.children[0].name` type-checked as an index-signature
33
- * read on both sides of the wire, and the tree walker's own suite was reading a `hidden` field off entries
34
- * that has never existed there without the compiler minding. The interface is the contract; the schema
35
- * validates against it, and z.ZodType makes a divergence between the two an error here. */
36
- /* A SYMLINK, as the tree reports one. Present only on entries that are links; `type` beside it is the type of
37
- * whatever the link POINTS AT, so a link to a directory expands and a link to a file opens, exactly like the
38
- * real thing (the model VSCode uses, its FileType carries SymbolicLink as a bit alongside File/Directory,
39
- * precisely so every consumer can keep asking "file or folder?").
40
- *
41
- * `to` is the link's own text, verbatim, `../../.agents/skills/discord`, not the resolved path. That is what
42
- * the row shows on hover, because it is what the person who made the link wrote and what they would edit.
43
- *
44
- * `state` is absent for the ordinary case: it resolves, and it resolves to somewhere inside the workspace.
45
- * - "broken", nothing at the other end. Listed anyway, because a dangling link is a fact about the
46
- * workspace worth seeing rather than an entry to hide.
47
- * - "outside", it resolves to bytes outside the workspace. The daemon will not read, list or descend
48
- * through it (workspace-files.ts realWithin), so the row is shown and refused, like a locked one. */
12
+ // path is root-relative with forward slashes, feeding straight into the file routes. The interface is declared by hand:
13
+ // zod's inferred type for this recursive getter collapses to `{}` past the first level.
14
+ // `type` alongside a link is its target's type, so a directory link opens like a directory. `to` is the link's literal
15
+ // text, verbatim, what hovering shows and what the author would edit.
16
+ // broken: nothing at the other end; listed anyway.
17
+ // outside: resolves outside the workspace; shown but refused, like a locked entry.
49
18
  export interface WorkspaceLink {
50
19
  readonly to: string;
51
20
  readonly state?: "broken" | "outside" | undefined;
@@ -66,13 +35,11 @@ export interface WorkspaceTreeEntry {
66
35
  readonly path: string;
67
36
  readonly type: "file" | "dir";
68
37
  readonly size?: number | undefined;
69
- // Ignored-by-tooling (node_modules, .git, .gitignore'd paths, browser profiles): the client grays the row.
38
+ // Ignored by tooling (node_modules, .git, gitignored paths, browser profiles); client greys the row.
70
39
  readonly ignored?: boolean | undefined;
71
- // Set when this entry is a symlink, `type` above is then its TARGET's type. See WorkspaceLink.
40
+ // Set when this entry is a symlink; `type` above is then its target's type.
72
41
  readonly link?: WorkspaceLink | undefined;
73
- // A DIR without `children` was listed but not descended into, because it's ignored, or because the walk's
74
- // breadth-first budget stopped above it. Either way the client lazy-loads it via /workspace/children on
75
- // expand, so "not loaded yet" and "empty directory" (`children: []`) stay distinguishable.
42
+ // Absent means not descended (ignored or budget-stopped); lazy-load via /workspace/children, distinct from [].
76
43
  readonly children?: readonly WorkspaceTreeEntry[] | undefined;
77
44
  }
78
45
  export const WorkspaceTreeEntrySchema: z.ZodType<WorkspaceTreeEntry> = z.object({
@@ -97,14 +64,9 @@ export const WorkspaceTreeEntrySchema: z.ZodType<WorkspaceTreeEntry> = z.object(
97
64
  export const WorkspaceTreeSchema = z.object({
98
65
  root: z.string().describe("The path everything below is relative to."),
99
66
  tree: z.array(WorkspaceTreeEntrySchema).describe("The workspace, one entry per file and folder."),
100
- // How many of the ROOT's own entries the budget cut (0 = complete); per-dir cuts are counted on each dir entry.
67
+ // How many of the root's own entries the budget cut (0 = complete); per-dir cuts count on each dir entry.
101
68
  hidden: z.number().describe("How many entries at the top level were cut for size. Zero means the listing is complete."),
102
- /* Every folder holding nothing but empty folders, root-relative, in tree order. Answered by its own walk
103
- * (workspace/empty-dirs.ts) precisely because it must NOT be read off `tree` above: that listing stops at
104
- * the entry budget, so a directory below the cut arrives without `children`, which means "not looked at",
105
- * and the emptiness question would silently shrink to whatever the budget happened to reach, the workspace
106
- * root and little else. This list is complete, and it says nothing about whether the folders in it were
107
- * listed. */
69
+ // From its own walk (empty-dirs.ts), not derived from `tree`, which stops at budget and would undercount.
108
70
  barren: z
109
71
  .array(z.string())
110
72
  .describe(
@@ -112,9 +74,8 @@ export const WorkspaceTreeSchema = z.object({
112
74
  ),
113
75
  });
114
76
  export type WorkspaceTree = z.infer<typeof WorkspaceTreeSchema>;
115
- // Lazy-load one directory's children, for a dir the tree walk listed but didn't descend into. The ordinary
116
- // request is one level; a bounded `depth` lets a caller that genuinely needs a small subtree receive its
117
- // descendants in the same flat `entries` list instead of issuing one request per directory.
77
+ // Lazy-loads one directory's children past the tree walk's budget; depth reads several levels into one flat `entries`
78
+ // list instead of one request per directory.
118
79
  export const WorkspaceChildrenQuerySchema = WorkspaceScopeSchema.extend({
119
80
  path: z.string().min(1).describe("The folder to open, as a workspace path."),
120
81
  depth: z.coerce
@@ -134,25 +95,20 @@ export const WorkspaceChildrenSchema = z.object({
134
95
  hidden: z.number().describe("How many entries were cut for size. Zero means the listing is complete."),
135
96
  });
136
97
  export type WorkspaceChildren = z.infer<typeof WorkspaceChildrenSchema>;
137
- // Write routes (delete) and the read they mirror. No scope: a conversation's own checkout is READ-ONLY through
138
- // the file API, see workspaceRootFor for why the refusal lives daemon-side rather than in each screen.
98
+ // Write routes (delete) and the read they mirror. No scope: a conversation's own checkout is read-only through the file
99
+ // API, refused daemon-side.
139
100
  export const WorkspaceFileQuerySchema = z.object({ path: z.string().min(1).describe("The file or folder, as a workspace path.") });
140
101
  export const WorkspaceMediaTicketQuerySchema = WorkspaceScopeSchema.extend({
141
102
  path: z.string().min(1).describe("The media file the ticket should cover."),
142
103
  });
143
- /* The credential a <video>/<audio> element carries to GET /workspace/media, which is the one workspace route a
144
- * browser cannot put a header on. Minted here, over the ordinary bearer-authenticated contract, and scoped to
145
- * the single FILE it was asked for, the resolved one, so a ticket minted against a conversation's checkout
146
- * buys that file and not its shared-tree namesake (see auth/media-tickets.ts for why scope rather than
147
- * single-use is what bounds it). `expiresAt` is epoch ms so a player can tell a dead ticket from a dead file. */
104
+ // Credential for <video>/<audio>'s GET /workspace/media, the one route a browser can't header-authenticate. Scoped to
105
+ // the resolved file, so a ticket minted against a checkout can't buy its shared-tree namesake.
148
106
  export const WorkspaceMediaTicketSchema = z.object({
149
107
  ticket: z.string().describe("Hand this to the streaming route in the query string. It buys exactly the one file it was minted for."),
150
108
  expiresAt: z.number().describe("When it stops working, in milliseconds, so a player can tell a dead ticket from a dead file."),
151
109
  });
152
- /* A text read is a read of a WINDOW: `offset` is the byte to start at (negative reads that many bytes from the
153
- * END, which is what following a growing log means, the tail's offset isn't knowable until the size is), and
154
- * `limit` how many bytes to serve. The daemon clamps `limit` to its own cap, so an omitted or oversized one is
155
- * the cap rather than the file. Coerced: these arrive as query strings. */
110
+ // A read of a window: offset negative reads that many bytes from the end (for following a growing log); limit is
111
+ // clamped to the daemon's own cap. Coerced from query strings.
156
112
  export const WorkspaceFileReadQuerySchema = WorkspaceScopeSchema.extend({
157
113
  path: z.string().min(1).describe("The file to read, as a workspace path."),
158
114
  offset: z.coerce
@@ -171,8 +127,8 @@ export const WorkspaceFileReadQuerySchema = WorkspaceScopeSchema.extend({
171
127
  "How many bytes to read. Capped by the sandbox, so leaving it out or asking for too much gives you the cap rather than the whole file.",
172
128
  ),
173
129
  });
174
- // `size` is the whole file; `offset`/`bytes` the byte range `content` decodes from, so the reader can tell a
175
- // window from a whole file (offset > 0 || offset + bytes < size ⇒ there is more) and ask for the next one.
130
+ // size is the whole file; offset/bytes is the window content decodes from. offset > 0 || offset + bytes < size means
131
+ // there is more to read.
176
132
  export const WorkspaceFilePresentSchema = z.object({
177
133
  present: z.literal(true).describe("There is something at that path."),
178
134
  path: z.string().describe("The path, as asked for."),
@@ -180,26 +136,15 @@ export const WorkspaceFilePresentSchema = z.object({
180
136
  size: z.number().describe("How large the whole file is. Compare it with the window below to know whether there is more."),
181
137
  offset: z.number().describe("Which byte the window starts at."),
182
138
  bytes: z.number().describe("How many bytes the window holds."),
183
- // Which tree answered. Always true when no `agent` was asked for; true DESPITE one when that conversation's
184
- // checkout doesn't carry the path (see scopedTarget, its checkout is not a superset of /work), which is
185
- // the one case the reader has to be told about rather than left to assume.
139
+ // True when no conversation was named, or one was but its checkout lacks the file, worth flagging.
186
140
  shared: z
187
141
  .boolean()
188
142
  .describe(
189
143
  "Which tree answered. True when no conversation was named, and also when one was but its own copy has no such file, which is the case a reader has to be told about rather than left to assume.",
190
144
  ),
191
145
  });
192
- /* NOTHING TO READ AT THAT PATH, an ANSWER, not a failure, which is the whole reason this branch exists.
193
- *
194
- * Most reads in this product are "read it if it is there": the file each extension keeps of what its badge has
195
- * already shown, a repo's documentation index, a run's result, a directory's own UI document. Absent is their
196
- * ordinary FIRST state, and every one of them already treats it as a value. Answering those with a 404 made the
197
- * browser log a failed request per read, around a dozen red lines on every page load, none of which meant
198
- * anything was wrong, and none of which a `catch` can suppress: the log happens in the network stack before any
199
- * JavaScript sees the response.
200
- *
201
- * A read that is REFUSED (an escape, the control plane, a denylisted path) is still an error, because that is a
202
- * real answer about the caller rather than about the file. */
146
+ // Nothing there is an answer, not a failure: most reads here are read-it-if-there, and a 404 would spam the browser's
147
+ // network log per miss. A refused read (an escape, a denylisted path) is still an error.
203
148
  export const WorkspaceFileAbsentSchema = z.object({
204
149
  present: z
205
150
  .literal(false)
@@ -209,10 +154,8 @@ export const WorkspaceFileAbsentSchema = z.object({
209
154
  path: z.string().describe("The path, as asked for."),
210
155
  });
211
156
  export const WorkspaceFileSchema = z.discriminatedUnion("present", [WorkspaceFilePresentSchema, WorkspaceFileAbsentSchema]);
212
- // Resolve a file reference an agent (or a compiler, or a terminal) NAMED to the workspace path it means. Prose
213
- // paths are routinely partial, a model that has been discussing `_editor/web/src` writes
214
- // `pages/workspace/Foo.vue`, so a clickable mention has to be matched as a path SUFFIX against the real tree,
215
- // not read as root-relative. `path` is absent when nothing in the workspace ends in that reference.
157
+ // Resolves a possibly-partial path reference (a model's mention, a compiler's path) to the real workspace path it
158
+ // means, matched as a suffix.
216
159
  export const WorkspaceResolveQuerySchema = WorkspaceScopeSchema.extend({
217
160
  path: z
218
161
  .string()
@@ -225,17 +168,15 @@ export const WorkspaceResolveQuerySchema = WorkspaceScopeSchema.extend({
225
168
  export const WorkspaceResolveSchema = z.object({
226
169
  path: z.string().optional().describe("The real path it means. Absent when nothing in the workspace ends that way."),
227
170
  });
228
- // Direct file management over the /work tree (delete / new folder / rename+move / copy). Byte writes + the
229
- // editor's text save go through the plain POST /workspace/upload route (a body doesn't fit oRPC), not here.
171
+ // Direct file management (delete, new folder, rename/move, copy). Byte writes and editor saves go through POST
172
+ // /workspace/upload instead, since oRPC can't carry a body.
230
173
  export const WorkspaceDirSchema = z.object({ path: z.string().min(1).describe("The folder to create. Missing folders above it are created too.") });
231
174
  export const WorkspaceMoveSchema = z.object({
232
175
  from: z.string().min(1).describe("What to move or copy, as a workspace path."),
233
176
  to: z.string().min(1).describe("Where it should end up. Changing only the last part is how you rename something."),
234
177
  });
235
- // Deterministic (no-LLM) classification of the dropped workspace: each repo dir and loose file sorted into one
236
- // coarse bucket. Read-only, the browser turns it into a proposed layout and applies the accepted moves via the
237
- // existing /workspace/move route. `reason` records the winning signal (magic:<mime>, ext:<ext>,
238
- // repository:<marker>, text-content, unknown) so the proposal is explainable.
178
+ // Deterministic, no-LLM classification into coarse buckets, read-only, applied via /workspace/move. reason is the
179
+ // winning signal: magic:<mime>, ext:<ext>, repository:<marker>, text-content, or unknown.
239
180
  export const WorkspaceBucketSchema = z.enum(["repositories", "documents", "media", "archives", "other"]);
240
181
  export type WorkspaceBucket = z.infer<typeof WorkspaceBucketSchema>;
241
182
  export const WorkspaceClassificationSchema = z.object({
@@ -0,0 +1,109 @@
1
+ import { z } from "zod";
2
+ import { NeedsActionSchema } from "../policy/needs-action.js";
3
+
4
+ // Anything entering the sandbox, any source or format, goes through one pipeline: source to plan (ticked by the owner),
5
+ // apply (re-derived from the held bytes), report (what landed). The outbound half lives in definition.ts and
6
+ // schemas/environment.ts.
7
+
8
+ // Two assistant members rather than one "foreign", so the checklist can badge the source by name.
9
+ export const ArrivalSourceSchema = z.enum(["definition", "bundle", "hermes", "openclaw"]);
10
+ export type ArrivalSource = z.infer<typeof ArrivalSourceSchema>;
11
+
12
+ // Narrower than ArrivalSource: a connected device is scanned for these two only, never for a bundle.
13
+ export const AssistantSourceSchema = z.enum(["hermes", "openclaw"]);
14
+ export type AssistantSource = z.infer<typeof AssistantSourceSchema>;
15
+
16
+ // What an item becomes here, not what it was there: the apply dispatches on this and the checklist groups by it. One
17
+ // enum across every source, so a repo means the same thing whichever way it arrived.
18
+ export const ArrivalGroupSchema = z.enum([
19
+ // The /work tree as a whole, cloned from the remote a definition's `[workspace]` names.
20
+ "workspace",
21
+ // One repository: cloned from its remote, or unpacked with its real git dir from a bundle.
22
+ "repo",
23
+ // Loose files landing in /work: a bundle's workspace bytes, an assistant's notes folder.
24
+ "files",
25
+ // Transcripts, checkpoint timelines, ledgers. Bundle-only — nothing else can reference them.
26
+ "history",
27
+ // The overlay Dockerfile.
28
+ "environment",
29
+ // One connection, landing unauthenticated unless its secret travelled.
30
+ "capability",
31
+ // The agent settings that differ from their defaults.
32
+ "settings",
33
+ // A merge into CLAUDE.md / AGENTS.md.
34
+ "memory",
35
+ "skill",
36
+ "automation",
37
+ // One credential VALUE, and the only group gated behind the apply's second consent.
38
+ "secret",
39
+ ]);
40
+ export type ArrivalGroup = z.infer<typeof ArrivalGroupSchema>;
41
+
42
+ // Two flags, not one: the four sources fail an item for two different reasons.
43
+ // applicable: false when the target already holds this; it cannot be ticked.
44
+ // recommended: false when it can be ticked but the reader should look first.
45
+ export const ArrivalItemSchema = z.object({
46
+ // Deterministic, derived from the artifact ("repo:intentic"), so a re-derived plan names the same items.
47
+ id: z.string(),
48
+ group: ArrivalGroupSchema,
49
+ // The checklist line in plain words ("Repository intentic", "Skill, weather").
50
+ label: z.string(),
51
+ detail: z.string().optional(),
52
+ applicable: z.boolean(),
53
+ // Why it cannot be ticked; present exactly when applicable is false.
54
+ reason: z.string().optional(),
55
+ recommended: z.boolean(),
56
+ // Names of secrets this row would store, never values; moves only when apply sets includeSecrets.
57
+ secrets: z.array(z.string()),
58
+ });
59
+ export type ArrivalItem = z.infer<typeof ArrivalItemSchema>;
60
+
61
+ export const ArrivalPlanSchema = z.object({
62
+ source: ArrivalSourceSchema,
63
+ // Names the held artifact for apply; minted per plan, a new plan replaces the held one.
64
+ token: z.string(),
65
+ // What the artifact calls itself (a definition's name, a bundle's source sandbox); for display only.
66
+ name: z.string().optional(),
67
+ items: z.array(ArrivalItemSchema),
68
+ // Whether the artifact holds credential values at all; the card only asks the second consent when true.
69
+ carriesSecrets: z.boolean(),
70
+ // What the reader saw but won't offer (sessions, logs, pairing state, a refused entry); listed, not silent.
71
+ refused: z.array(z.string()),
72
+ // Known not to move mechanically, shown at preview so the owner ticks knowingly, and again in the report.
73
+ needsAction: z.array(NeedsActionSchema),
74
+ });
75
+ export type ArrivalPlan = z.infer<typeof ArrivalPlanSchema>;
76
+
77
+ export const ArrivalApplySchema = z.object({
78
+ token: z.string(),
79
+ // The ticked ids; ones missing from the re-derived plan are ignored rather than erroring.
80
+ items: z.array(z.string()),
81
+ // The owner's explicit consent to move credential values, asked once on the inbound side, for every source.
82
+ includeSecrets: z.boolean(),
83
+ });
84
+ export type ArrivalApply = z.infer<typeof ArrivalApplySchema>;
85
+
86
+ export const ArrivalReportSchema = z.object({
87
+ applied: z.array(z.object({ id: z.string(), group: ArrivalGroupSchema, label: z.string() })),
88
+ // Ticked but didn't land, each with its reason; distinct from refused rows, which were never attempted.
89
+ failed: z.array(z.object({ id: z.string(), label: z.string(), error: z.string() })),
90
+ refused: z.array(z.string()),
91
+ needsAction: z.array(NeedsActionSchema),
92
+ });
93
+ export type ArrivalReport = z.infer<typeof ArrivalReportSchema>;
94
+
95
+ // One of the owner's own devices: the daemon walks its home folder over the socket it already holds, no packing needed.
96
+ // found absent means connected with nothing to bring in, not an error.
97
+ export const ArrivalHostSchema = z.object({
98
+ id: z.string(),
99
+ online: z.boolean(),
100
+ found: AssistantSourceSchema.optional(),
101
+ // Why this machine can't be read right now (asleep, or its own refusal), in its own words.
102
+ detail: z.string().optional(),
103
+ });
104
+ export type ArrivalHost = z.infer<typeof ArrivalHostSchema>;
105
+ export const ArrivalHostsSchema = z.object({ hosts: z.array(ArrivalHostSchema) });
106
+
107
+ // Reads a setup off a connected device instead of an upload; answers with a plan exactly like the upload door does.
108
+ export const ArrivalScanSchema = z.object({ host: z.string().min(1) });
109
+ export type ArrivalScan = z.infer<typeof ArrivalScanSchema>;
@@ -0,0 +1,17 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { packageRoot } from "@intentic/constants/node";
4
+ import { expect, test } from "vitest";
5
+ import { currentLock } from "./contract-lock.js";
6
+
7
+ // contract.lock.json must match the exported schemas; the git-aware half of this check lives in contract-shrink.mjs.
8
+ // Needs 30s: serializing ~500 schemas can run past vitest's 5s hang-detector default under load.
9
+ test("contract.lock.json matches the schemas this package exports", { timeout: 30_000 }, () => {
10
+ const committed: unknown = JSON.parse(readFileSync(join(packageRoot(import.meta.url), "contract.lock.json"), "utf8"));
11
+ expect(
12
+ currentLock(),
13
+ "the wire contract moved — run `pnpm --filter @intentic/sandbox-contract lock` and commit contract.lock.json with this change. " +
14
+ "If a schema or field was removed or changed (not added), land it as a `type!:` commit with a `Breaking-Note:` trailer " +
15
+ "saying, in the user's words, what stops working and what to do instead.",
16
+ ).toEqual(committed);
17
+ });
@@ -0,0 +1,49 @@
1
+ // contract.lock.json is every exported schema serialized to canonical JSON Schema, so git can flag a wire-contract
2
+ // change. contract-shrink demands a `!` commit with a Breaking-Note when a schema, field or type shrinks; additions
3
+ // pass freely. Derived from the package's exports, not a hand-kept list.
4
+
5
+ import { z } from "zod";
6
+ import * as contract from "../index.js";
7
+
8
+ // Canonical key order so two runs are byte-identical and a diff is a real contract change, not key-order noise. Arrays
9
+ // keep zod's own (stable) order.
10
+ const sorted = (value: unknown): unknown => {
11
+ if (Array.isArray(value)) {
12
+ return value.map(sorted);
13
+ }
14
+ if (typeof value === "object" && value !== null) {
15
+ return Object.fromEntries(
16
+ Object.keys(value)
17
+ .sort()
18
+ .map((key) => [key, sorted((value as Record<string, unknown>)[key])]),
19
+ );
20
+ }
21
+ return value;
22
+ };
23
+
24
+ export const currentLock = (): Record<string, unknown> => {
25
+ const lock: Record<string, unknown> = {};
26
+ for (const name of Object.keys(contract).sort()) {
27
+ const value = (contract as Record<string, unknown>)[name];
28
+ if (!(value instanceof z.ZodType)) {
29
+ continue;
30
+ }
31
+ try {
32
+ const schema = sorted(z.toJSONSchema(value, { unrepresentable: "any" })) as Record<string, unknown>;
33
+ // The dialect banner is identical on every entry; pure weight, no signal.
34
+ delete schema["$schema"];
35
+ lock[name] = schema;
36
+ } catch {
37
+ // Holds a place even when unserializable: appearing, disappearing or becoming serializable is still a diff.
38
+ lock[name] = "<unserializable>";
39
+ }
40
+ }
41
+ return lock;
42
+ };
43
+
44
+ // One line per schema, not pretty-printed: keeps the lock short enough that a diff shows which surfaces moved.
45
+ // Path-level detail lives in the lock test and contract-shrink instead.
46
+ export const serializeLock = (lock: Record<string, unknown>): string =>
47
+ `{\n${Object.entries(lock)
48
+ .map(([name, schema]) => `${JSON.stringify(name)}: ${JSON.stringify(schema)}`)
49
+ .join(",\n")}\n}\n`;