@intentic/sandbox-contract 1.331.0 → 1.333.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 (416) hide show
  1. package/README.md +23 -1
  2. package/dist/chores/probes.d.ts.map +1 -1
  3. package/dist/chores/probes.js.map +1 -1
  4. package/dist/contracts/accounts.contract.d.ts +11 -0
  5. package/dist/contracts/accounts.contract.d.ts.map +1 -1
  6. package/dist/contracts/agent.contract.d.ts +38 -0
  7. package/dist/contracts/agent.contract.d.ts.map +1 -1
  8. package/dist/contracts/agent.contract.js +14 -3
  9. package/dist/contracts/agent.contract.js.map +1 -1
  10. package/dist/contracts/agents.contract.d.ts +29 -0
  11. package/dist/contracts/agents.contract.d.ts.map +1 -1
  12. package/dist/contracts/automations.contract.d.ts +3 -0
  13. package/dist/contracts/automations.contract.d.ts.map +1 -1
  14. package/dist/contracts/device.contract.d.ts +7 -0
  15. package/dist/contracts/device.contract.d.ts.map +1 -1
  16. package/dist/contracts/git.contract.d.ts +2 -0
  17. package/dist/contracts/git.contract.d.ts.map +1 -1
  18. package/dist/contracts/logs.contract.d.ts +10 -0
  19. package/dist/contracts/logs.contract.d.ts.map +1 -1
  20. package/dist/contracts/needs.contract.d.ts +36 -1
  21. package/dist/contracts/needs.contract.d.ts.map +1 -1
  22. package/dist/contracts/needs.contract.js +2 -2
  23. package/dist/contracts/needs.contract.js.map +1 -1
  24. package/dist/contracts/offload.contract.d.ts +70 -0
  25. package/dist/contracts/offload.contract.d.ts.map +1 -1
  26. package/dist/contracts/offload.contract.js +10 -1
  27. package/dist/contracts/offload.contract.js.map +1 -1
  28. package/dist/contracts/privacy.contract.d.ts +14 -0
  29. package/dist/contracts/privacy.contract.d.ts.map +1 -1
  30. package/dist/contracts/privacy.contract.js +11 -1
  31. package/dist/contracts/privacy.contract.js.map +1 -1
  32. package/dist/contracts/providers.contract.d.ts +3 -0
  33. package/dist/contracts/providers.contract.d.ts.map +1 -1
  34. package/dist/contracts/runner.contract.d.ts +103 -2
  35. package/dist/contracts/runner.contract.d.ts.map +1 -1
  36. package/dist/contracts/runner.contract.js +2 -2
  37. package/dist/contracts/runner.contract.js.map +1 -1
  38. package/dist/contracts/sessions.contract.d.ts +1 -0
  39. package/dist/contracts/sessions.contract.d.ts.map +1 -1
  40. package/dist/contracts/settings.contract.d.ts +106 -94
  41. package/dist/contracts/settings.contract.d.ts.map +1 -1
  42. package/dist/contracts/settings.contract.js +19 -1
  43. package/dist/contracts/settings.contract.js.map +1 -1
  44. package/dist/contracts/system.contract.d.ts +17 -0
  45. package/dist/contracts/system.contract.d.ts.map +1 -1
  46. package/dist/contracts/translator.contract.d.ts +4 -0
  47. package/dist/contracts/translator.contract.d.ts.map +1 -1
  48. package/dist/events/agent-events.d.ts +46 -0
  49. package/dist/events/agent-events.d.ts.map +1 -1
  50. package/dist/events/agent-events.js +6 -0
  51. package/dist/events/agent-events.js.map +1 -1
  52. package/dist/events/agent-words.d.ts.map +1 -1
  53. package/dist/events/agent-words.js +1 -1
  54. package/dist/events/agent-words.js.map +1 -1
  55. package/dist/events/resume.d.ts +3 -0
  56. package/dist/events/resume.d.ts.map +1 -1
  57. package/dist/events/resume.js +17 -2
  58. package/dist/events/resume.js.map +1 -1
  59. package/dist/events/sandbox-notice.d.ts +18 -0
  60. package/dist/events/sandbox-notice.d.ts.map +1 -1
  61. package/dist/events/sandbox-notice.js +27 -1
  62. package/dist/events/sandbox-notice.js.map +1 -1
  63. package/dist/events/system-events.d.ts +2 -0
  64. package/dist/events/system-events.d.ts.map +1 -1
  65. package/dist/events/transcript.d.ts +64 -0
  66. package/dist/events/transcript.d.ts.map +1 -1
  67. package/dist/events/transcript.js +17 -1
  68. package/dist/events/transcript.js.map +1 -1
  69. package/dist/index.d.ts +427 -167
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +12 -0
  72. package/dist/index.js.map +1 -1
  73. package/dist/models/agent-catalog.d.ts.map +1 -1
  74. package/dist/models/agent-catalog.js +8 -7
  75. package/dist/models/agent-catalog.js.map +1 -1
  76. package/dist/models/agent-runtimes.d.ts +3 -1
  77. package/dist/models/agent-runtimes.d.ts.map +1 -1
  78. package/dist/models/agent-runtimes.js +10 -0
  79. package/dist/models/agent-runtimes.js.map +1 -1
  80. package/dist/models/model-order.d.ts +1 -0
  81. package/dist/models/model-order.d.ts.map +1 -1
  82. package/dist/models/model-order.js +9 -0
  83. package/dist/models/model-order.js.map +1 -1
  84. package/dist/models/model-pins.d.ts.map +1 -1
  85. package/dist/models/model-pins.js.map +1 -1
  86. package/dist/models/model-roles.d.ts +33 -18
  87. package/dist/models/model-roles.d.ts.map +1 -1
  88. package/dist/models/model-roles.js +31 -27
  89. package/dist/models/model-roles.js.map +1 -1
  90. package/dist/models/model-setups.d.ts +46 -0
  91. package/dist/models/model-setups.d.ts.map +1 -0
  92. package/dist/models/model-setups.js +86 -0
  93. package/dist/models/model-setups.js.map +1 -0
  94. package/dist/models/plan-pools.d.ts +3 -1
  95. package/dist/models/plan-pools.d.ts.map +1 -1
  96. package/dist/models/plan-pools.js +18 -6
  97. package/dist/models/plan-pools.js.map +1 -1
  98. package/dist/models/provider-specs.d.ts +20 -0
  99. package/dist/models/provider-specs.d.ts.map +1 -1
  100. package/dist/models/provider-specs.js +13 -1
  101. package/dist/models/provider-specs.js.map +1 -1
  102. package/dist/policy/command-classes.d.ts.map +1 -1
  103. package/dist/policy/command-classes.js +26 -3
  104. package/dist/policy/command-classes.js.map +1 -1
  105. package/dist/policy/control-scopes.d.ts +47 -0
  106. package/dist/policy/control-scopes.d.ts.map +1 -1
  107. package/dist/policy/control-scopes.js +16 -0
  108. package/dist/policy/control-scopes.js.map +1 -1
  109. package/dist/policy/credential-material.d.ts +6 -0
  110. package/dist/policy/credential-material.d.ts.map +1 -1
  111. package/dist/policy/credential-material.js +37 -15
  112. package/dist/policy/credential-material.js.map +1 -1
  113. package/dist/policy/device-programs.d.ts +28 -0
  114. package/dist/policy/device-programs.d.ts.map +1 -0
  115. package/dist/policy/device-programs.js +79 -0
  116. package/dist/policy/device-programs.js.map +1 -0
  117. package/dist/policy/identity-assertion.d.ts +27 -0
  118. package/dist/policy/identity-assertion.d.ts.map +1 -0
  119. package/dist/policy/identity-assertion.js +77 -0
  120. package/dist/policy/identity-assertion.js.map +1 -0
  121. package/dist/policy/sandbox-power.d.ts +34 -0
  122. package/dist/policy/sandbox-power.d.ts.map +1 -0
  123. package/dist/policy/sandbox-power.js +146 -0
  124. package/dist/policy/sandbox-power.js.map +1 -0
  125. package/dist/policy/search-globs.d.ts +3 -0
  126. package/dist/policy/search-globs.d.ts.map +1 -1
  127. package/dist/policy/search-globs.js +118 -0
  128. package/dist/policy/search-globs.js.map +1 -1
  129. package/dist/policy/secret-hosts.d.ts +1 -0
  130. package/dist/policy/secret-hosts.d.ts.map +1 -1
  131. package/dist/policy/secret-hosts.js +1 -0
  132. package/dist/policy/secret-hosts.js.map +1 -1
  133. package/dist/policy/turned-away.d.ts.map +1 -1
  134. package/dist/policy/turned-away.js +1 -0
  135. package/dist/policy/turned-away.js.map +1 -1
  136. package/dist/protocol/doors/runner-protocol.d.ts +45 -0
  137. package/dist/protocol/doors/runner-protocol.d.ts.map +1 -1
  138. package/dist/protocol/doors/runner-protocol.js +7 -0
  139. package/dist/protocol/doors/runner-protocol.js.map +1 -1
  140. package/dist/protocol/pairing-redeem.d.ts +23 -0
  141. package/dist/protocol/pairing-redeem.d.ts.map +1 -0
  142. package/dist/protocol/pairing-redeem.js +44 -0
  143. package/dist/protocol/pairing-redeem.js.map +1 -0
  144. package/dist/protocol/peer-mcp-server.d.ts.map +1 -1
  145. package/dist/protocol/peer-mcp-server.js +1 -1
  146. package/dist/protocol/peer-mcp-server.js.map +1 -1
  147. package/dist/protocol/raw/raw-json-routes.d.ts +855 -1
  148. package/dist/protocol/raw/raw-json-routes.d.ts.map +1 -1
  149. package/dist/protocol/raw/raw-json-routes.js +61 -1
  150. package/dist/protocol/raw/raw-json-routes.js.map +1 -1
  151. package/dist/protocol/raw/raw-routes.d.ts +17 -0
  152. package/dist/protocol/raw/raw-routes.d.ts.map +1 -1
  153. package/dist/protocol/raw/raw-routes.js +5 -0
  154. package/dist/protocol/raw/raw-routes.js.map +1 -1
  155. package/dist/protocol/sse.d.ts +20 -1
  156. package/dist/protocol/sse.d.ts.map +1 -1
  157. package/dist/protocol/sse.js +112 -17
  158. package/dist/protocol/sse.js.map +1 -1
  159. package/dist/schemas/agent.d.ts +35 -0
  160. package/dist/schemas/agent.d.ts.map +1 -1
  161. package/dist/schemas/agent.js +12 -1
  162. package/dist/schemas/agent.js.map +1 -1
  163. package/dist/schemas/automations.d.ts +7 -0
  164. package/dist/schemas/automations.d.ts.map +1 -1
  165. package/dist/schemas/automations.js +11 -3
  166. package/dist/schemas/automations.js.map +1 -1
  167. package/dist/schemas/device-swaps.d.ts +19 -0
  168. package/dist/schemas/device-swaps.d.ts.map +1 -0
  169. package/dist/schemas/device-swaps.js +11 -0
  170. package/dist/schemas/device-swaps.js.map +1 -0
  171. package/dist/schemas/devices.d.ts +17 -0
  172. package/dist/schemas/devices.d.ts.map +1 -1
  173. package/dist/schemas/devices.js +2 -1
  174. package/dist/schemas/devices.js.map +1 -1
  175. package/dist/schemas/engines.d.ts +8 -1
  176. package/dist/schemas/engines.d.ts.map +1 -1
  177. package/dist/schemas/engines.js +1 -1
  178. package/dist/schemas/engines.js.map +1 -1
  179. package/dist/schemas/environment.d.ts +7 -0
  180. package/dist/schemas/environment.d.ts.map +1 -1
  181. package/dist/schemas/environment.js +2 -0
  182. package/dist/schemas/environment.js.map +1 -1
  183. package/dist/schemas/git/git-scope.d.ts +20 -0
  184. package/dist/schemas/git/git-scope.d.ts.map +1 -0
  185. package/dist/schemas/git/git-scope.js +37 -0
  186. package/dist/schemas/git/git-scope.js.map +1 -0
  187. package/dist/schemas/git/git.d.ts +1 -0
  188. package/dist/schemas/git/git.d.ts.map +1 -1
  189. package/dist/schemas/git/git.js +9 -1
  190. package/dist/schemas/git/git.js.map +1 -1
  191. package/dist/schemas/hosts.d.ts +42 -0
  192. package/dist/schemas/hosts.d.ts.map +1 -1
  193. package/dist/schemas/hosts.js +3 -0
  194. package/dist/schemas/hosts.js.map +1 -1
  195. package/dist/schemas/keep-warm.d.ts +1 -0
  196. package/dist/schemas/keep-warm.d.ts.map +1 -1
  197. package/dist/schemas/keep-warm.js +1 -1
  198. package/dist/schemas/keep-warm.js.map +1 -1
  199. package/dist/schemas/logs.d.ts +21 -0
  200. package/dist/schemas/logs.d.ts.map +1 -1
  201. package/dist/schemas/logs.js +19 -0
  202. package/dist/schemas/logs.js.map +1 -1
  203. package/dist/schemas/members.d.ts +4 -0
  204. package/dist/schemas/members.d.ts.map +1 -1
  205. package/dist/schemas/members.js +5 -0
  206. package/dist/schemas/members.js.map +1 -1
  207. package/dist/schemas/metrics.d.ts +12 -0
  208. package/dist/schemas/metrics.d.ts.map +1 -1
  209. package/dist/schemas/metrics.js +26 -8
  210. package/dist/schemas/metrics.js.map +1 -1
  211. package/dist/schemas/needs.d.ts +97 -1
  212. package/dist/schemas/needs.d.ts.map +1 -1
  213. package/dist/schemas/needs.js +53 -4
  214. package/dist/schemas/needs.js.map +1 -1
  215. package/dist/schemas/offload.d.ts +154 -0
  216. package/dist/schemas/offload.d.ts.map +1 -1
  217. package/dist/schemas/offload.js +34 -0
  218. package/dist/schemas/offload.js.map +1 -1
  219. package/dist/schemas/privacy.d.ts +19 -0
  220. package/dist/schemas/privacy.d.ts.map +1 -1
  221. package/dist/schemas/privacy.js +17 -2
  222. package/dist/schemas/privacy.js.map +1 -1
  223. package/dist/schemas/project-bring-back.d.ts +172 -0
  224. package/dist/schemas/project-bring-back.d.ts.map +1 -0
  225. package/dist/schemas/project-bring-back.js +39 -0
  226. package/dist/schemas/project-bring-back.js.map +1 -0
  227. package/dist/schemas/providers/handoff.d.ts +77 -0
  228. package/dist/schemas/providers/handoff.d.ts.map +1 -0
  229. package/dist/schemas/providers/handoff.js +85 -0
  230. package/dist/schemas/providers/handoff.js.map +1 -0
  231. package/dist/schemas/providers/plan-limits.d.ts +27 -0
  232. package/dist/schemas/providers/plan-limits.d.ts.map +1 -1
  233. package/dist/schemas/providers/plan-limits.js +8 -1
  234. package/dist/schemas/providers/plan-limits.js.map +1 -1
  235. package/dist/schemas/providers/provider-oauth.d.ts +4 -0
  236. package/dist/schemas/providers/provider-oauth.d.ts.map +1 -1
  237. package/dist/schemas/providers/usage.d.ts +3 -1
  238. package/dist/schemas/providers/usage.d.ts.map +1 -1
  239. package/dist/schemas/providers/usage.js +7 -2
  240. package/dist/schemas/providers/usage.js.map +1 -1
  241. package/dist/schemas/restart-intent.d.ts +47 -0
  242. package/dist/schemas/restart-intent.d.ts.map +1 -0
  243. package/dist/schemas/restart-intent.js +19 -0
  244. package/dist/schemas/restart-intent.js.map +1 -0
  245. package/dist/schemas/run-targets.d.ts.map +1 -1
  246. package/dist/schemas/run-targets.js +5 -2
  247. package/dist/schemas/run-targets.js.map +1 -1
  248. package/dist/schemas/settings-history.d.ts +1 -1
  249. package/dist/schemas/settings-history.d.ts.map +1 -1
  250. package/dist/schemas/settings-history.js +21 -0
  251. package/dist/schemas/settings-history.js.map +1 -1
  252. package/dist/schemas/settings.d.ts +101 -100
  253. package/dist/schemas/settings.d.ts.map +1 -1
  254. package/dist/schemas/settings.js +43 -24
  255. package/dist/schemas/settings.js.map +1 -1
  256. package/dist/schemas/short-codes.d.ts +47 -0
  257. package/dist/schemas/short-codes.d.ts.map +1 -0
  258. package/dist/schemas/short-codes.js +30 -0
  259. package/dist/schemas/short-codes.js.map +1 -0
  260. package/dist/schemas/speech.d.ts +4 -0
  261. package/dist/schemas/speech.d.ts.map +1 -1
  262. package/dist/schemas/speech.js +1 -0
  263. package/dist/schemas/speech.js.map +1 -1
  264. package/dist/schemas/system.d.ts +176 -0
  265. package/dist/schemas/system.d.ts.map +1 -1
  266. package/dist/schemas/system.js +55 -2
  267. package/dist/schemas/system.js.map +1 -1
  268. package/dist/schemas/voice.d.ts +171 -0
  269. package/dist/schemas/voice.d.ts.map +1 -0
  270. package/dist/schemas/voice.js +99 -0
  271. package/dist/schemas/voice.js.map +1 -0
  272. package/dist/schemas/workspace/workspace-upload.d.ts +14 -0
  273. package/dist/schemas/workspace/workspace-upload.d.ts.map +1 -0
  274. package/dist/schemas/workspace/workspace-upload.js +6 -0
  275. package/dist/schemas/workspace/workspace-upload.js.map +1 -0
  276. package/dist/state/arrival.d.ts +3 -0
  277. package/dist/state/arrival.d.ts.map +1 -1
  278. package/dist/state/arrival.js +1 -0
  279. package/dist/state/arrival.js.map +1 -1
  280. package/dist/state/definition.d.ts +112 -40
  281. package/dist/state/definition.d.ts.map +1 -1
  282. package/dist/state/history-state.d.ts.map +1 -1
  283. package/dist/state/history-state.js +3 -0
  284. package/dist/state/history-state.js.map +1 -1
  285. package/dist/state/runtime-state.d.ts +5 -2
  286. package/dist/state/runtime-state.d.ts.map +1 -1
  287. package/dist/state/runtime-state.js +3 -2
  288. package/dist/state/runtime-state.js.map +1 -1
  289. package/dist/state/update-probation.d.ts +50 -0
  290. package/dist/state/update-probation.d.ts.map +1 -0
  291. package/dist/state/update-probation.js +81 -0
  292. package/dist/state/update-probation.js.map +1 -0
  293. package/dist/state/versions.d.ts +6 -0
  294. package/dist/state/versions.d.ts.map +1 -1
  295. package/dist/state/versions.js +47 -0
  296. package/dist/state/versions.js.map +1 -1
  297. package/dist/state/workspace-state.d.ts +1 -1
  298. package/dist/state/workspace-state.d.ts.map +1 -1
  299. package/dist/state/workspace-state.js +1 -1
  300. package/dist/state/workspace-state.js.map +1 -1
  301. package/dist/text/embed.d.ts +2 -1
  302. package/dist/text/embed.d.ts.map +1 -1
  303. package/dist/text/embed.js +10 -5
  304. package/dist/text/embed.js.map +1 -1
  305. package/dist/text/title.d.ts.map +1 -1
  306. package/dist/text/title.js +4 -7
  307. package/dist/text/title.js.map +1 -1
  308. package/dist/text/transcript-fold.d.ts +2 -1
  309. package/dist/text/transcript-fold.d.ts.map +1 -1
  310. package/dist/text/transcript-fold.js +21 -6
  311. package/dist/text/transcript-fold.js.map +1 -1
  312. package/package.json +39 -6
  313. package/src/chores/probes.ts +3 -1
  314. package/src/contracts/agent.contract.ts +24 -3
  315. package/src/contracts/needs.contract.ts +2 -2
  316. package/src/contracts/offload.contract.ts +21 -1
  317. package/src/contracts/privacy.contract.ts +13 -0
  318. package/src/contracts/runner.contract.ts +10 -2
  319. package/src/contracts/settings.contract.ts +23 -0
  320. package/src/events/agent-events.ts +13 -0
  321. package/src/events/agent-words.ts +2 -3
  322. package/src/events/resume.test.ts +14 -2
  323. package/src/events/resume.ts +32 -3
  324. package/src/events/sandbox-notice.ts +31 -1
  325. package/src/events/transcript.ts +27 -2
  326. package/src/ids/tunnel-ids.test.ts +30 -0
  327. package/src/index.ts +12 -0
  328. package/src/models/agent-catalog.test.ts +4 -3
  329. package/src/models/agent-catalog.ts +10 -7
  330. package/src/models/agent-runtimes.ts +30 -1
  331. package/src/models/capability-ledger.test.ts +4 -0
  332. package/src/models/model-order.ts +13 -0
  333. package/src/models/model-pins.ts +5 -4
  334. package/src/models/model-roles.test.ts +9 -31
  335. package/src/models/model-roles.ts +45 -50
  336. package/src/models/model-setups.test.ts +100 -0
  337. package/src/models/model-setups.ts +151 -0
  338. package/src/models/plan-pools.test.ts +58 -0
  339. package/src/models/plan-pools.ts +38 -7
  340. package/src/models/provider-specs.ts +20 -2
  341. package/src/policy/command-classes.ts +34 -3
  342. package/src/policy/control-scopes.ts +27 -0
  343. package/src/policy/credential-material.ts +58 -16
  344. package/src/policy/device-programs.ts +137 -0
  345. package/src/policy/identity-assertion.ts +130 -0
  346. package/src/policy/sandbox-power.ts +247 -0
  347. package/src/policy/search-globs.ts +135 -0
  348. package/src/policy/secret-hosts.ts +7 -0
  349. package/src/policy/tests/command-classes.test.ts +35 -0
  350. package/src/policy/tests/credential-material.test.ts +20 -0
  351. package/src/policy/tests/device-programs.test.ts +107 -0
  352. package/src/policy/tests/identity-assertion.test.ts +79 -0
  353. package/src/policy/tests/sandbox-power.test.ts +181 -0
  354. package/src/policy/tests/search-globs.test.ts +46 -1
  355. package/src/policy/tests/secret-hosts.test.ts +17 -1
  356. package/src/policy/turned-away.ts +2 -0
  357. package/src/protocol/doors/runner-protocol.ts +21 -1
  358. package/src/protocol/pairing-redeem.test.ts +86 -0
  359. package/src/protocol/pairing-redeem.ts +79 -0
  360. package/src/protocol/peer-mcp-server.ts +1 -2
  361. package/src/protocol/raw/raw-json-routes.test.ts +87 -0
  362. package/src/protocol/raw/raw-json-routes.ts +127 -5
  363. package/src/protocol/raw/raw-routes.ts +11 -0
  364. package/src/protocol/sse.test.ts +50 -1
  365. package/src/protocol/sse.ts +172 -26
  366. package/src/schemas/agent.ts +23 -2
  367. package/src/schemas/automations.ts +16 -5
  368. package/src/schemas/daemon-health.test.ts +28 -0
  369. package/src/schemas/device-swaps.test.ts +39 -0
  370. package/src/schemas/device-swaps.ts +26 -0
  371. package/src/schemas/devices.ts +11 -2
  372. package/src/schemas/engines.ts +1 -1
  373. package/src/schemas/environment.ts +4 -0
  374. package/src/schemas/git/git-scope.test.ts +91 -0
  375. package/src/schemas/git/git-scope.ts +71 -0
  376. package/src/schemas/git/git.ts +15 -1
  377. package/src/schemas/hosts.ts +7 -0
  378. package/src/schemas/keep-warm.ts +2 -1
  379. package/src/schemas/logs.ts +25 -0
  380. package/src/schemas/members.ts +8 -0
  381. package/src/schemas/metrics.test.ts +80 -0
  382. package/src/schemas/metrics.ts +31 -9
  383. package/src/schemas/needs.ts +80 -4
  384. package/src/schemas/offload.ts +76 -0
  385. package/src/schemas/privacy.ts +27 -3
  386. package/src/schemas/project-bring-back.test.ts +15 -0
  387. package/src/schemas/project-bring-back.ts +78 -0
  388. package/src/schemas/providers/handoff.test.ts +42 -0
  389. package/src/schemas/providers/handoff.ts +128 -0
  390. package/src/schemas/providers/plan-limits.ts +14 -1
  391. package/src/schemas/providers/usage.ts +13 -7
  392. package/src/schemas/restart-intent.test.ts +45 -0
  393. package/src/schemas/restart-intent.ts +47 -0
  394. package/src/schemas/run-targets.ts +5 -2
  395. package/src/schemas/settings-history.ts +28 -0
  396. package/src/schemas/settings.test.ts +74 -21
  397. package/src/schemas/settings.ts +80 -44
  398. package/src/schemas/short-codes.ts +59 -0
  399. package/src/schemas/speech.ts +4 -0
  400. package/src/schemas/system.ts +106 -5
  401. package/src/schemas/voice.ts +161 -0
  402. package/src/schemas/workspace/workspace-upload.ts +11 -0
  403. package/src/state/arrival.ts +3 -0
  404. package/src/state/history-state.ts +9 -0
  405. package/src/state/runtime-state.test.ts +13 -0
  406. package/src/state/runtime-state.ts +11 -5
  407. package/src/state/update-probation.test.ts +45 -0
  408. package/src/state/update-probation.ts +169 -0
  409. package/src/state/versions.test.ts +30 -1
  410. package/src/state/versions.ts +68 -0
  411. package/src/state/workspace-state.ts +4 -1
  412. package/src/text/embed.test.ts +14 -0
  413. package/src/text/embed.ts +19 -10
  414. package/src/text/title.ts +5 -9
  415. package/src/text/transcript-fold.test.ts +61 -0
  416. package/src/text/transcript-fold.ts +31 -6
@@ -4,14 +4,15 @@ export declare const ModelRoleKindSchema: z.ZodEnum<{
4
4
  run: "run";
5
5
  }>;
6
6
  export type ModelRoleKind = z.infer<typeof ModelRoleKindSchema>;
7
- export type ModelRoleTrigger = "pressed" | "unprompted";
7
+ export declare const PRESET_SETUPS: readonly ["low", "medium", "high"];
8
+ export type PresetSetup = (typeof PRESET_SETUPS)[number];
8
9
  interface ModelRoleRow {
9
10
  readonly id: string;
10
11
  readonly label: string;
11
12
  readonly blurb: string;
12
13
  readonly kind: ModelRoleKind;
13
- readonly trigger?: ModelRoleTrigger;
14
14
  readonly icon: string;
15
+ readonly setup: PresetSetup;
15
16
  }
16
17
  export declare const MODEL_ROLES: readonly [{
17
18
  readonly id: "commit-message";
@@ -19,93 +20,112 @@ export declare const MODEL_ROLES: readonly [{
19
20
  readonly blurb: "The subject written when an agent's work lands, and the release note under it.";
20
21
  readonly kind: "helper";
21
22
  readonly icon: "file-edit";
23
+ readonly setup: "low";
22
24
  }, {
23
25
  readonly id: "session-title";
24
26
  readonly label: "Session titles";
25
27
  readonly blurb: "The name a conversation wears on the board, written a second into its first turn.";
26
28
  readonly kind: "helper";
27
29
  readonly icon: "pencil";
30
+ readonly setup: "low";
28
31
  }, {
29
32
  readonly id: "safety-judge";
30
33
  readonly label: "Safety judge";
31
34
  readonly blurb: "Which model reads your safety policy before a flagged command runs.";
32
35
  readonly kind: "helper";
33
36
  readonly icon: "shield";
37
+ readonly setup: "medium";
34
38
  }, {
35
39
  readonly id: "loop-verdict";
36
40
  readonly label: "Loop verdicts";
37
41
  readonly blurb: "Whether a loop's iteration met the goal, or the loop goes round again.";
38
42
  readonly kind: "helper";
39
43
  readonly icon: "check-square";
44
+ readonly setup: "medium";
45
+ }, {
46
+ readonly id: "handoff-summary";
47
+ readonly label: "Hand-off summaries";
48
+ readonly blurb: "The summary a fresh session opens with when you choose to summarise a long conversation that hit a usage limit, instead of re-reading it all.";
49
+ readonly kind: "helper";
50
+ readonly icon: "align-left";
51
+ readonly setup: "low";
52
+ }, {
53
+ readonly id: "spoken-reply";
54
+ readonly label: "Spoken replies";
55
+ readonly blurb: "The few sentences you hear when you talk to the agent hands-free: what it did and what it needs from you, while the full reply stays on screen.";
56
+ readonly kind: "helper";
57
+ readonly icon: "volume-up";
58
+ readonly setup: "low";
40
59
  }, {
41
60
  readonly id: "model-router";
42
61
  readonly label: "New chat routing";
43
62
  readonly blurb: "Which model reads a new chat's first message and picks what it opens on: the model, effort and account, and the persona.";
44
63
  readonly kind: "helper";
45
64
  readonly icon: "sparkles";
65
+ readonly setup: "low";
46
66
  }, {
47
67
  readonly id: "pipeline-fix";
48
68
  readonly label: "Pipeline fixes";
49
69
  readonly blurb: "The agent started by Fix on a failed pipeline.";
50
70
  readonly kind: "run";
51
- readonly trigger: "pressed";
52
71
  readonly icon: "wave-pulse";
72
+ readonly setup: "high";
53
73
  }, {
54
74
  readonly id: "deployment-fix";
55
75
  readonly label: "Deployment fixes";
56
76
  readonly blurb: "The agent started by Fix on a deployment that is down.";
57
77
  readonly kind: "run";
58
- readonly trigger: "pressed";
59
78
  readonly icon: "server";
79
+ readonly setup: "high";
60
80
  }, {
61
81
  readonly id: "maintenance-chore";
62
82
  readonly label: "Maintenance chores";
63
83
  readonly blurb: "A chore run started from the Maintenance board.";
64
84
  readonly kind: "run";
65
- readonly trigger: "pressed";
66
85
  readonly icon: "wrench";
86
+ readonly setup: "medium";
67
87
  }, {
68
88
  readonly id: "refactor-run";
69
89
  readonly label: "Refactors";
70
90
  readonly blurb: "The agent started from a hotspot or key module on a repository's Health tab.";
71
91
  readonly kind: "run";
72
- readonly trigger: "pressed";
73
92
  readonly icon: "hammer";
93
+ readonly setup: "high";
74
94
  }, {
75
95
  readonly id: "documentation-run";
76
96
  readonly label: "Documentation runs";
77
97
  readonly blurb: "A pass over a repo's own documentation.";
78
98
  readonly kind: "run";
79
- readonly trigger: "pressed";
80
99
  readonly icon: "book";
100
+ readonly setup: "medium";
81
101
  }, {
82
102
  readonly id: "acceptance-run";
83
103
  readonly label: "Acceptance runs";
84
104
  readonly blurb: "One session per story in an acceptance fan-out.";
85
105
  readonly kind: "run";
86
- readonly trigger: "pressed";
87
106
  readonly icon: "list-check";
107
+ readonly setup: "high";
88
108
  }, {
89
109
  readonly id: "approval-queue";
90
110
  readonly label: "Approvals queue";
91
111
  readonly blurb: "The turn that publishes or acts on what you approved.";
92
112
  readonly kind: "run";
93
- readonly trigger: "pressed";
94
113
  readonly icon: "check-circle";
114
+ readonly setup: "medium";
95
115
  }, {
96
116
  readonly id: "extension-review";
97
117
  readonly label: "Extension update reviews";
98
118
  readonly blurb: "The agent that reads an extension update before it is applied.";
99
119
  readonly kind: "run";
100
- readonly trigger: "unprompted";
101
120
  readonly icon: "box";
121
+ readonly setup: "medium";
102
122
  }, {
103
123
  readonly id: "loop-iteration";
104
124
  readonly label: "Loop iterations";
105
125
  readonly blurb: "Each round of a loop working towards its goal.";
106
126
  readonly kind: "run";
107
- readonly trigger: "unprompted";
108
127
  readonly icon: "repeat";
128
+ readonly setup: "high";
109
129
  }];
110
130
  export type ModelRole = (typeof MODEL_ROLES)[number]["id"];
111
131
  export type ModelRoleSpec = ModelRoleRow & {
@@ -119,6 +139,7 @@ export declare const ModelRoleSchema: z.ZodEnum<{
119
139
  "deployment-fix": "deployment-fix";
120
140
  "documentation-run": "documentation-run";
121
141
  "extension-review": "extension-review";
142
+ "handoff-summary": "handoff-summary";
122
143
  "loop-iteration": "loop-iteration";
123
144
  "loop-verdict": "loop-verdict";
124
145
  "maintenance-chore": "maintenance-chore";
@@ -127,13 +148,7 @@ export declare const ModelRoleSchema: z.ZodEnum<{
127
148
  "refactor-run": "refactor-run";
128
149
  "safety-judge": "safety-judge";
129
150
  "session-title": "session-title";
151
+ "spoken-reply": "spoken-reply";
130
152
  }>;
131
- export type ModelRoleBlockId = "helper" | "pressed" | "unprompted";
132
- export interface ModelRoleBlock {
133
- readonly id: ModelRoleBlockId;
134
- readonly label: string;
135
- readonly roles: readonly ModelRoleSpec[];
136
- }
137
- export declare const MODEL_ROLE_BLOCKS: readonly ModelRoleBlock[];
138
153
  export {};
139
154
  //# sourceMappingURL=model-roles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-roles.d.ts","sourceRoot":"","sources":["../../src/models/model-roles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,mBAAmB;;;EAA4B,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAIhE,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,YAAY,CAAC;AAIxD,UAAU,YAAY;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAE7B,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAEpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAGD,eAAO,MAAM,WAAW;iBAEZ,gBAAgB;oBACb,iBAAiB;oBACjB,gFAAgF;mBACjF,QAAQ;mBACR,WAAW;;iBAGb,eAAe;oBACZ,gBAAgB;oBAChB,mFAAmF;mBACpF,QAAQ;mBACR,QAAQ;;iBAIV,cAAc;oBACX,cAAc;oBACd,qEAAqE;mBACtE,QAAQ;mBACR,QAAQ;;iBAGV,cAAc;oBACX,eAAe;oBACf,wEAAwE;mBACzE,QAAQ;mBACR,cAAc;;iBAOhB,cAAc;oBACX,kBAAkB;oBAClB,0HAA0H;mBAC3H,QAAQ;mBACR,UAAU;;iBAGZ,cAAc;oBACX,gBAAgB;oBAChB,gDAAgD;mBACjD,KAAK;sBACF,SAAS;mBACZ,YAAY;;iBAGd,gBAAgB;oBACb,kBAAkB;oBAClB,wDAAwD;mBACzD,KAAK;sBACF,SAAS;mBACZ,QAAQ;;iBAGV,mBAAmB;oBAChB,oBAAoB;oBACpB,iDAAiD;mBAClD,KAAK;sBACF,SAAS;mBACZ,QAAQ;;iBAGV,cAAc;oBACX,WAAW;oBACX,8EAA8E;mBAC/E,KAAK;sBACF,SAAS;mBACZ,QAAQ;;iBAGV,mBAAmB;oBAChB,oBAAoB;oBACpB,yCAAyC;mBAC1C,KAAK;sBACF,SAAS;mBACZ,MAAM;;iBAGR,gBAAgB;oBACb,iBAAiB;oBACjB,iDAAiD;mBAClD,KAAK;sBACF,SAAS;mBACZ,YAAY;;iBAId,gBAAgB;oBACb,iBAAiB;oBACjB,uDAAuD;mBACxD,KAAK;sBACF,SAAS;mBACZ,cAAc;;iBAGhB,kBAAkB;oBACf,0BAA0B;oBAC1B,gEAAgE;mBACjE,KAAK;sBACF,YAAY;mBACf,KAAK;;iBAGP,gBAAgB;oBACb,iBAAiB;oBACjB,gDAAgD;mBACjD,KAAK;sBACF,YAAY;mBACf,QAAQ;EAEsB,CAAC;AAE7C,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAA;CAAE,CAAC;AAEtE,eAAO,MAAM,cAAc,EAAyC,SAAS,SAAS,EAAE,CAAC;AAGzF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAAwD,CAAC;AAGrF,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAC;IAE9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;CAC5C;AAID,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAgBtD,CAAC"}
1
+ {"version":3,"file":"model-roles.d.ts","sourceRoot":"","sources":["../../src/models/model-roles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,mBAAmB;;;EAA4B,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAIhE,eAAO,MAAM,aAAa,YAAI,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAIzD,UAAU,YAAY;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAE7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAGtB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC/B;AAGD,eAAO,MAAM,WAAW;iBAEZ,gBAAgB;oBACb,iBAAiB;oBACjB,gFAAgF;mBACjF,QAAQ;mBACR,WAAW;oBACV,KAAK;;iBAGR,eAAe;oBACZ,gBAAgB;oBAChB,mFAAmF;mBACpF,QAAQ;mBACR,QAAQ;oBACP,KAAK;;iBAIR,cAAc;oBACX,cAAc;oBACd,qEAAqE;mBACtE,QAAQ;mBACR,QAAQ;oBACP,QAAQ;;iBAGX,cAAc;oBACX,eAAe;oBACf,wEAAwE;mBACzE,QAAQ;mBACR,cAAc;oBACb,QAAQ;;iBAIX,iBAAiB;oBACd,oBAAoB;oBACpB,+IAA+I;mBAChJ,QAAQ;mBACR,YAAY;oBACX,KAAK;;iBAKR,cAAc;oBACX,gBAAgB;oBAChB,iJAAiJ;mBAClJ,QAAQ;mBACR,WAAW;oBACV,KAAK;;iBAOR,cAAc;oBACX,kBAAkB;oBAClB,0HAA0H;mBAC3H,QAAQ;mBACR,UAAU;oBACT,KAAK;;iBAGR,cAAc;oBACX,gBAAgB;oBAChB,gDAAgD;mBACjD,KAAK;mBACL,YAAY;oBACX,MAAM;;iBAGT,gBAAgB;oBACb,kBAAkB;oBAClB,wDAAwD;mBACzD,KAAK;mBACL,QAAQ;oBACP,MAAM;;iBAGT,mBAAmB;oBAChB,oBAAoB;oBACpB,iDAAiD;mBAClD,KAAK;mBACL,QAAQ;oBACP,QAAQ;;iBAGX,cAAc;oBACX,WAAW;oBACX,8EAA8E;mBAC/E,KAAK;mBACL,QAAQ;oBACP,MAAM;;iBAGT,mBAAmB;oBAChB,oBAAoB;oBACpB,yCAAyC;mBAC1C,KAAK;mBACL,MAAM;oBACL,QAAQ;;iBAGX,gBAAgB;oBACb,iBAAiB;oBACjB,iDAAiD;mBAClD,KAAK;mBACL,YAAY;oBACX,MAAM;;iBAGT,gBAAgB;oBACb,iBAAiB;oBACjB,uDAAuD;mBACxD,KAAK;mBACL,cAAc;oBACb,QAAQ;;iBAGX,kBAAkB;oBACf,0BAA0B;oBAC1B,gEAAgE;mBACjE,KAAK;mBACL,KAAK;oBACJ,QAAQ;;iBAGX,gBAAgB;oBACb,iBAAiB;oBACjB,gDAAgD;mBACjD,KAAK;mBACL,QAAQ;oBACP,MAAM;EAEuB,CAAC;AAE7C,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAA;CAAE,CAAC;AAEtE,eAAO,MAAM,cAAc,EAAyC,SAAS,SAAS,EAAE,CAAC;AAGzF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;EAAwD,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
2
  export const ModelRoleKindSchema = z.enum(["helper", "run"]);
3
+ export const PRESET_SETUPS = ["low", "medium", "high"];
3
4
  export const MODEL_ROLES = [
4
5
  {
5
6
  id: "commit-message",
@@ -7,6 +8,7 @@ export const MODEL_ROLES = [
7
8
  blurb: "The subject written when an agent's work lands, and the release note under it.",
8
9
  kind: "helper",
9
10
  icon: "file-edit",
11
+ setup: "low",
10
12
  },
11
13
  {
12
14
  id: "session-title",
@@ -14,6 +16,7 @@ export const MODEL_ROLES = [
14
16
  blurb: "The name a conversation wears on the board, written a second into its first turn.",
15
17
  kind: "helper",
16
18
  icon: "pencil",
19
+ setup: "low",
17
20
  },
18
21
  {
19
22
  id: "safety-judge",
@@ -21,6 +24,7 @@ export const MODEL_ROLES = [
21
24
  blurb: "Which model reads your safety policy before a flagged command runs.",
22
25
  kind: "helper",
23
26
  icon: "shield",
27
+ setup: "medium",
24
28
  },
25
29
  {
26
30
  id: "loop-verdict",
@@ -28,6 +32,23 @@ export const MODEL_ROLES = [
28
32
  blurb: "Whether a loop's iteration met the goal, or the loop goes round again.",
29
33
  kind: "helper",
30
34
  icon: "check-square",
35
+ setup: "medium",
36
+ },
37
+ {
38
+ id: "handoff-summary",
39
+ label: "Hand-off summaries",
40
+ blurb: "The summary a fresh session opens with when you choose to summarise a long conversation that hit a usage limit, instead of re-reading it all.",
41
+ kind: "helper",
42
+ icon: "align-left",
43
+ setup: "low",
44
+ },
45
+ {
46
+ id: "spoken-reply",
47
+ label: "Spoken replies",
48
+ blurb: "The few sentences you hear when you talk to the agent hands-free: what it did and what it needs from you, while the full reply stays on screen.",
49
+ kind: "helper",
50
+ icon: "volume-up",
51
+ setup: "low",
31
52
  },
32
53
  {
33
54
  id: "model-router",
@@ -35,98 +56,81 @@ export const MODEL_ROLES = [
35
56
  blurb: "Which model reads a new chat's first message and picks what it opens on: the model, effort and account, and the persona.",
36
57
  kind: "helper",
37
58
  icon: "sparkles",
59
+ setup: "low",
38
60
  },
39
61
  {
40
62
  id: "pipeline-fix",
41
63
  label: "Pipeline fixes",
42
64
  blurb: "The agent started by Fix on a failed pipeline.",
43
65
  kind: "run",
44
- trigger: "pressed",
45
66
  icon: "wave-pulse",
67
+ setup: "high",
46
68
  },
47
69
  {
48
70
  id: "deployment-fix",
49
71
  label: "Deployment fixes",
50
72
  blurb: "The agent started by Fix on a deployment that is down.",
51
73
  kind: "run",
52
- trigger: "pressed",
53
74
  icon: "server",
75
+ setup: "high",
54
76
  },
55
77
  {
56
78
  id: "maintenance-chore",
57
79
  label: "Maintenance chores",
58
80
  blurb: "A chore run started from the Maintenance board.",
59
81
  kind: "run",
60
- trigger: "pressed",
61
82
  icon: "wrench",
83
+ setup: "medium",
62
84
  },
63
85
  {
64
86
  id: "refactor-run",
65
87
  label: "Refactors",
66
88
  blurb: "The agent started from a hotspot or key module on a repository's Health tab.",
67
89
  kind: "run",
68
- trigger: "pressed",
69
90
  icon: "hammer",
91
+ setup: "high",
70
92
  },
71
93
  {
72
94
  id: "documentation-run",
73
95
  label: "Documentation runs",
74
96
  blurb: "A pass over a repo's own documentation.",
75
97
  kind: "run",
76
- trigger: "pressed",
77
98
  icon: "book",
99
+ setup: "medium",
78
100
  },
79
101
  {
80
102
  id: "acceptance-run",
81
103
  label: "Acceptance runs",
82
104
  blurb: "One session per story in an acceptance fan-out.",
83
105
  kind: "run",
84
- trigger: "pressed",
85
106
  icon: "list-check",
107
+ setup: "high",
86
108
  },
87
109
  {
88
110
  id: "approval-queue",
89
111
  label: "Approvals queue",
90
112
  blurb: "The turn that publishes or acts on what you approved.",
91
113
  kind: "run",
92
- trigger: "pressed",
93
114
  icon: "check-circle",
115
+ setup: "medium",
94
116
  },
95
117
  {
96
118
  id: "extension-review",
97
119
  label: "Extension update reviews",
98
120
  blurb: "The agent that reads an extension update before it is applied.",
99
121
  kind: "run",
100
- trigger: "unprompted",
101
122
  icon: "box",
123
+ setup: "medium",
102
124
  },
103
125
  {
104
126
  id: "loop-iteration",
105
127
  label: "Loop iterations",
106
128
  blurb: "Each round of a loop working towards its goal.",
107
129
  kind: "run",
108
- trigger: "unprompted",
109
130
  icon: "repeat",
131
+ setup: "high",
110
132
  },
111
133
  ];
112
134
  export const MODEL_ROLE_IDS = MODEL_ROLES.map((role) => role.id);
113
135
  export const ModelRoleSchema = z.enum(MODEL_ROLE_IDS);
114
- const rolesWhere = (match) => MODEL_ROLES.filter((role) => match(role));
115
- export const MODEL_ROLE_BLOCKS = [
116
- {
117
- id: "helper",
118
- label: "Automatic helpers",
119
- roles: rolesWhere((role) => role.kind === "helper"),
120
- },
121
- {
122
- id: "pressed",
123
- label: "Runs you start",
124
- roles: rolesWhere((role) => role.kind === "run" && role.trigger === "pressed"),
125
- },
126
- {
127
- id: "unprompted",
128
- label: "Runs that start themselves",
129
- roles: rolesWhere((role) => role.kind === "run" && role.trigger === "unprompted"),
130
- },
131
- ];
132
136
  //# sourceMappingURL=model-roles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-roles.js","sourceRoot":"","sources":["../../src/models/model-roles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-roles.js","sourceRoot":"","sources":["../../src/models/model-roles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { z } from "zod";
2
+ import { type ModelPin } from "../schemas/agent.js";
3
+ import type { ModelSource } from "./model-pins.js";
4
+ import { type ModelRole, type PresetSetup } from "./model-roles.js";
5
+ export declare const MODEL_SETUP_ID: RegExp;
6
+ export declare const ModelSetupSchema: z.ZodObject<{
7
+ id: z.ZodString;
8
+ name: z.ZodOptional<z.ZodString>;
9
+ pins: z.ZodOptional<z.ZodArray<z.ZodObject<{
10
+ provider: z.ZodString;
11
+ model: z.ZodString;
12
+ effort: z.ZodOptional<z.ZodString>;
13
+ thinking: z.ZodOptional<z.ZodBoolean>;
14
+ fast: z.ZodOptional<z.ZodBoolean>;
15
+ harness: z.ZodOptional<z.ZodEnum<{
16
+ "claude-code": "claude-code";
17
+ native: "native";
18
+ }>>;
19
+ }, z.core.$strip>>>;
20
+ }, z.core.$strip>;
21
+ export type ModelSetup = z.infer<typeof ModelSetupSchema>;
22
+ export declare const isPresetSetup: (id: string) => id is PresetSetup;
23
+ export interface SetupSettings {
24
+ readonly modelSetups: readonly ModelSetup[];
25
+ readonly roleSetups: Partial<Record<ModelRole, string>>;
26
+ }
27
+ export declare const suggestedSetup: (role: ModelRole) => PresetSetup;
28
+ export declare const storedSetup: (settings: Pick<SetupSettings, "modelSetups">, id: string) => ModelSetup | undefined;
29
+ export declare const roleSetupId: (settings: SetupSettings, role: ModelRole) => string | undefined;
30
+ export type SetupLadder = {
31
+ readonly kind: `pins`;
32
+ readonly pins: readonly ModelPin[];
33
+ } | {
34
+ readonly kind: `preset`;
35
+ readonly preset: PresetSetup;
36
+ };
37
+ export declare const setupLadder: (settings: Pick<SetupSettings, "modelSetups">, id: string | undefined) => SetupLadder;
38
+ export declare const roleLadder: (settings: SetupSettings, role: ModelRole) => SetupLadder;
39
+ export declare const ladderIsEmpty: (ladder: SetupLadder) => boolean;
40
+ export declare const presetPins: (preset: PresetSetup, sources: readonly ModelSource[]) => readonly ModelPin[];
41
+ export declare const ladderPins: (ladder: SetupLadder, sources: readonly ModelSource[]) => readonly ModelPin[];
42
+ export declare const rolePins: (settings: SetupSettings, role: ModelRole, sources: readonly ModelSource[]) => readonly ModelPin[];
43
+ export declare const setupsFromRoleLists: (lists: Partial<Record<ModelRole, readonly ModelPin[]>>) => SetupSettings & {
44
+ modelSetups: ModelSetup[];
45
+ };
46
+ //# sourceMappingURL=model-setups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-setups.d.ts","sourceRoot":"","sources":["../../src/models/model-setups.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,QAAQ,EAAkB,MAAM,qBAAqB,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAA+B,KAAK,SAAS,EAAiB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAShH,eAAO,MAAM,cAAc,QAA8B,CAAC;AAE1D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;iBAU3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,aAAa,OAAQ,MAAM,KAAG,EAAE,IAAI,WAA4D,CAAC;AAG9G,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;CAC3D;AAKD,eAAO,MAAM,cAAc,SAAU,SAAS,KAAG,WAA8C,CAAC;AAGhG,eAAO,MAAM,WAAW,aAAc,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,MAAM,MAAM,KAAG,UAAU,GAAG,SAC3C,CAAC;AAG1D,eAAO,MAAM,WAAW,aAAc,aAAa,QAAQ,SAAS,KAAG,MAAM,GAAG,SAG/E,CAAC;AAIF,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC;AAIpJ,eAAO,MAAM,WAAW,aAAc,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,MAAM,MAAM,GAAG,SAAS,KAAG,WASlG,CAAC;AAEF,eAAO,MAAM,UAAU,aAAc,aAAa,QAAQ,SAAS,KAAG,WAAiE,CAAC;AAGxI,eAAO,MAAM,aAAa,WAAY,WAAW,KAAG,OAA6D,CAAC;AA+BlH,eAAO,MAAM,UAAU,WAAY,WAAW,WAAW,SAAS,WAAW,EAAE,KAAG,SAAS,QAAQ,EAOnE,CAAC;AAEjC,eAAO,MAAM,UAAU,WAAY,WAAW,WAAW,SAAS,WAAW,EAAE,KAAG,SAAS,QAAQ,EACtB,CAAC;AAG9E,eAAO,MAAM,QAAQ,aAAc,aAAa,QAAQ,SAAS,WAAW,SAAS,WAAW,EAAE,KAAG,SAAS,QAAQ,EACnE,CAAC;AAQpD,eAAO,MAAM,mBAAmB,UAAW,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC,CAAC,KAAG,aAAa,GAAG;IAAE,WAAW,EAAE,UAAU,EAAE,CAAA;CAyBvI,CAAC"}
@@ -0,0 +1,86 @@
1
+ import { z } from "zod";
2
+ import { ModelPinSchema } from "../schemas/agent.js";
3
+ import { isEndpointProvider } from "./agent-catalog.js";
4
+ import { compareModelIds, modelRungOf } from "./model-order.js";
5
+ import { MODEL_ROLE_IDS, MODEL_ROLES, PRESET_SETUPS } from "./model-roles.js";
6
+ export const MODEL_SETUP_ID = /^[a-z0-9][a-z0-9-]{0,39}$/;
7
+ export const ModelSetupSchema = z.object({
8
+ id: z.string().regex(MODEL_SETUP_ID).describe("Which setup this is. `low`, `medium` and `high` are the three every sandbox has; any other is one you made."),
9
+ name: z.string().trim().min(1).max(40).optional().describe("What it is called on the settings page. Left out, a preset keeps its own name."),
10
+ pins: z
11
+ .array(ModelPinSchema)
12
+ .max(10)
13
+ .optional()
14
+ .describe("The models it runs on, tried in order, so one spent account does not take its jobs down. Left out on a preset, it is worked out from the accounts this sandbox has connected and follows them as they change; left out on one you made, it has none."),
15
+ });
16
+ export const isPresetSetup = (id) => PRESET_SETUPS.some((preset) => preset === id);
17
+ const SUGGESTED = new Map(MODEL_ROLES.map((role) => [role.id, role.setup]));
18
+ export const suggestedSetup = (role) => SUGGESTED.get(role) ?? `medium`;
19
+ export const storedSetup = (settings, id) => settings.modelSetups.find((setup) => setup.id === id);
20
+ export const roleSetupId = (settings, role) => {
21
+ const assigned = settings.roleSetups[role];
22
+ return assigned !== undefined && (isPresetSetup(assigned) || storedSetup(settings, assigned) !== undefined) ? assigned : undefined;
23
+ };
24
+ const NO_MODELS = { kind: `pins`, pins: [] };
25
+ export const setupLadder = (settings, id) => {
26
+ if (id === undefined) {
27
+ return NO_MODELS;
28
+ }
29
+ const pins = storedSetup(settings, id)?.pins;
30
+ if (pins !== undefined) {
31
+ return { kind: `pins`, pins };
32
+ }
33
+ return isPresetSetup(id) ? { kind: `preset`, preset: id } : NO_MODELS;
34
+ };
35
+ export const roleLadder = (settings, role) => setupLadder(settings, roleSetupId(settings, role));
36
+ export const ladderIsEmpty = (ladder) => ladder.kind === `pins` && ladder.pins.length === 0;
37
+ const PRESET_RUNG = { high: 0, medium: 1, low: 2 };
38
+ const PRESET_LENGTH = 3;
39
+ const ownPrefix = (models) => {
40
+ const counts = new Map();
41
+ for (const model of models) {
42
+ const prefix = model.split(/[-_]/)[0] ?? model;
43
+ counts.set(prefix, (counts.get(prefix) ?? 0) + 1);
44
+ }
45
+ return [...counts].toSorted(([, a], [, b]) => b - a)[0]?.[0];
46
+ };
47
+ const newestOnRung = (models, rung) => {
48
+ const own = ownPrefix(models);
49
+ const onRung = models.filter((model) => modelRungOf(model) === rung).toSorted(compareModelIds);
50
+ return onRung.find((model) => model.split(/[-_]/)[0] === own) ?? onRung[0];
51
+ };
52
+ export const presetPins = (preset, sources) => sources
53
+ .filter((source) => source.ready && !isEndpointProvider(source.provider))
54
+ .flatMap((source) => {
55
+ const newest = newestOnRung(source.models, PRESET_RUNG[preset]);
56
+ return newest === undefined ? [] : [{ provider: source.provider, model: newest }];
57
+ })
58
+ .slice(0, PRESET_LENGTH);
59
+ export const ladderPins = (ladder, sources) => ladder.kind === `pins` ? ladder.pins : presetPins(ladder.preset, sources);
60
+ export const rolePins = (settings, role, sources) => ladderPins(roleLadder(settings, role), sources);
61
+ export const setupsFromRoleLists = (lists) => {
62
+ const modelSetups = [];
63
+ const roleSetups = {};
64
+ const groups = new Map();
65
+ for (const role of MODEL_ROLE_IDS) {
66
+ const list = lists[role];
67
+ if (list !== undefined && list.length > 0) {
68
+ const key = JSON.stringify(list);
69
+ groups.set(key, [...(groups.get(key) ?? []), role]);
70
+ }
71
+ }
72
+ let made = 0;
73
+ for (const roles of groups.values()) {
74
+ const pins = lists[roles[0]] ?? [];
75
+ const votes = roles.map(suggestedSetup);
76
+ const preset = votes.toSorted((a, b) => votes.filter((vote) => vote === b).length - votes.filter((vote) => vote === a).length)[0];
77
+ const free = storedSetup({ modelSetups }, preset) === undefined;
78
+ const id = free ? preset : `setup-${++made}`;
79
+ modelSetups.push(free ? { id, pins: [...pins] } : { id, name: `Setup ${made}`, pins: [...pins] });
80
+ for (const role of roles) {
81
+ roleSetups[role] = id;
82
+ }
83
+ }
84
+ return { modelSetups, roleSetups };
85
+ };
86
+ //# sourceMappingURL=model-setups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-setups.js","sourceRoot":"","sources":["../../src/models/model-setups.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@ export declare const windowPeriod: (pool: {
25
25
  readonly label?: string | undefined;
26
26
  }) => WindowPeriod | undefined;
27
27
  export declare const windowLive: (window: UsageWindow, measuredAt: number, now: number) => boolean;
28
+ export declare const currentWindows: (usage: AccountUsage, now: number) => UsageWindow[];
28
29
  export interface ServiceFacts {
29
30
  readonly account: string;
30
31
  readonly needsReauth?: boolean | undefined;
@@ -41,7 +42,8 @@ export interface ServiceFacts {
41
42
  export declare const refusalVerdict: (refusal: ProviderRefusal, accounts: readonly ServiceFacts[], now?: number) => "standing" | "answered" | "gone";
42
43
  export declare const headroomState: (usage: AccountUsage | undefined, model?: ModelRef) => AccountState;
43
44
  export declare const serviceState: (facts: ServiceFacts, refusal?: ProviderRefusal, model?: ModelRef, now?: number) => AccountState;
44
- export declare const serviceStates: (accounts: readonly ServiceFacts[], refusal: ProviderRefusal | undefined, model?: ModelRef, now?: number) => ReadonlyMap<string, AccountState>;
45
+ export type RefusalsOnFile = ProviderRefusal | readonly ProviderRefusal[] | undefined;
46
+ export declare const serviceStates: (accounts: readonly ServiceFacts[], refusals: RefusalsOnFile, model?: ModelRef, now?: number) => ReadonlyMap<string, AccountState>;
45
47
  export declare const preferredAccount: <T extends {
46
48
  readonly state: AccountState;
47
49
  }>(entries: readonly T[]) => T | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"plan-pools.d.ts","sourceRoot":"","sources":["../../src/models/plan-pools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan-pools.d.ts","sourceRoot":"","sources":["../../src/models/plan-pools.ts"],"names":[],"mappings":"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"}
@@ -76,6 +76,18 @@ export const windowLive = (window, measuredAt, now) => {
76
76
  const period = windowPeriod(window);
77
77
  return period === undefined || measuredAt + period.seconds * 1000 > now;
78
78
  };
79
+ const lapsedWindow = (window, measuredAt) => {
80
+ const { resetsAt, rounded: _rounded, utilization: _utilization, ...pool } = window;
81
+ const closedAt = resetsAt ?? Math.floor((measuredAt + (windowPeriod(window)?.seconds ?? 0) * 1000) / 1000);
82
+ return { ...pool, utilization: 0, lapsedAt: closedAt };
83
+ };
84
+ export const currentWindows = (usage, now) => {
85
+ const live = (window) => window.lapsedAt === undefined && windowLive(window, usage.measuredAt, now);
86
+ if (!usage.windows.some(live)) {
87
+ return [];
88
+ }
89
+ return usage.windows.map((window) => (window.lapsedAt !== undefined || live(window) ? window : lapsedWindow(window, usage.measuredAt)));
90
+ };
79
91
  const answers = (refusal, facts) => {
80
92
  const measuredAt = facts.usage?.measuredAt;
81
93
  if (refusal.kind === "entitlement" || measuredAt === undefined || measuredAt <= refusal.at) {
@@ -153,12 +165,12 @@ export const serviceState = (facts, refusal, model, now = Date.now()) => {
153
165
  }
154
166
  return refusal?.kind === "limit" ? refusedPool(facts.usage, refusal, model) : headroomState(facts.usage, model);
155
167
  };
156
- export const serviceStates = (accounts, refusal, model, now = Date.now()) => {
157
- const standing = refusal !== undefined && refusalVerdict(refusal, accounts, now) === "standing" ? refusal : undefined;
158
- return new Map(accounts.map((facts) => [
159
- facts.account,
160
- serviceState(facts, standing !== undefined && (standing.account ?? facts.account) === facts.account ? standing : undefined, model, now),
161
- ]));
168
+ const refusalList = (refusals) => refusals === undefined ? [] : "kind" in refusals ? [refusals] : refusals;
169
+ export const serviceStates = (accounts, refusals, model, now = Date.now()) => {
170
+ const standing = refusalList(refusals)
171
+ .filter((refusal) => refusalVerdict(refusal, accounts, now) === "standing")
172
+ .toSorted((left, right) => right.at - left.at);
173
+ return new Map(accounts.map((facts) => [facts.account, serviceState(facts, standing.find((refusal) => (refusal.account ?? facts.account) === facts.account), model, now)]));
162
174
  };
163
175
  const preference = (state) => {
164
176
  switch (state.kind) {