@coreplane/switchboard 1.203.0 → 1.205.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 (373) hide show
  1. package/dist/assets/config/config.example.yaml +32 -3
  2. package/dist/assets/deploy/cloudflare-memory/worker.ts +129 -3
  3. package/dist/assets/deploy/cloudflare-memory/wrangler.template.jsonc +7 -2
  4. package/dist/assets/deploy/cloudflare-sandbox/worker.ts +4 -1
  5. package/dist/assets/package-lock.json +291 -97
  6. package/dist/assets/package.json +1 -1
  7. package/dist/assets/project.json +1 -1
  8. package/dist/assets/source.json +3 -3
  9. package/dist/assets/src/agents/registry.ts +466 -0
  10. package/dist/assets/src/config/profile.ts +200 -0
  11. package/dist/assets/src/core/delivery.ts +775 -0
  12. package/dist/assets/src/core/deliverySnapshotStore.ts +200 -0
  13. package/dist/assets/src/core/runLedger/types.ts +6 -0
  14. package/dist/assets/src/core/runRecord.ts +44 -0
  15. package/dist/assets/src/core/ship/contract.ts +502 -0
  16. package/dist/assets/src/core/workerError.ts +12 -0
  17. package/dist/assets/web/dist/.vite/manifest.json +2770 -70
  18. package/dist/assets/web/dist/assets/AppShell-lYVcj-k7.js +1 -0
  19. package/dist/assets/web/dist/assets/{CostsPage-XQ-fQzdz.js → CostsPage-DGSE48l1.js} +1 -1
  20. package/dist/assets/web/dist/assets/DeliveryPage-Cx7kQC_e.js +1 -0
  21. package/dist/assets/web/dist/assets/NotFoundPage-BzWS4Ca1.js +1 -0
  22. package/dist/assets/web/dist/assets/ResidentDetailPage-Bcasasjb.js +1 -0
  23. package/dist/assets/web/dist/assets/ResidentsIndexPage-BJwyrphn.js +1 -0
  24. package/dist/assets/web/dist/assets/RunRoutePage-6eStApqP.js +12 -0
  25. package/dist/assets/web/dist/assets/RunRoutePage-f6TSNPeW.css +1 -0
  26. package/dist/assets/web/dist/assets/RunsIndexPage-CWrkv7v8.js +1 -0
  27. package/dist/assets/web/dist/assets/RunsTabs-DEICQ4FY.js +1 -0
  28. package/dist/assets/web/dist/assets/ScheduledPage-BX2py1X3.js +1 -0
  29. package/dist/assets/web/dist/assets/StatusDot-CwCK84JN.js +1 -0
  30. package/dist/assets/web/dist/assets/Tooltip-CFC88_-Z.js +1 -0
  31. package/dist/assets/web/dist/assets/abap-CLvhMVsD.js +1 -0
  32. package/dist/assets/web/dist/assets/actionscript-3-Cs6JJXT5.js +1 -0
  33. package/dist/assets/web/dist/assets/ada-C5qYipkI.js +1 -0
  34. package/dist/assets/web/dist/assets/ahk-CA9gdOdF.js +1 -0
  35. package/dist/assets/web/dist/assets/ahk2-_6rzW9BS.js +1 -0
  36. package/dist/assets/web/dist/assets/andromeeda-vGVdxbeo.js +1 -0
  37. package/dist/assets/web/dist/assets/angular-html-Cw130Zyi.js +1 -0
  38. package/dist/assets/web/dist/assets/angular-ts-DY1m4C2s.js +1 -0
  39. package/dist/assets/web/dist/assets/apache-U0d_L8uA.js +1 -0
  40. package/dist/assets/web/dist/assets/apex-KFGFyKwG.js +1 -0
  41. package/dist/assets/web/dist/assets/apl-W6Ty7v05.js +1 -0
  42. package/dist/assets/web/dist/assets/applescript-CCn79oCD.js +1 -0
  43. package/dist/assets/web/dist/assets/ara-4CJ0cIlV.js +1 -0
  44. package/dist/assets/web/dist/assets/asciidoc-SCjQUq34.js +1 -0
  45. package/dist/assets/web/dist/assets/asm-Cmm7eHzH.js +1 -0
  46. package/dist/assets/web/dist/assets/astro-DlLVHwVk.js +1 -0
  47. package/dist/assets/web/dist/assets/aurora-x-CDeNXAV0.js +1 -0
  48. package/dist/assets/web/dist/assets/awk-BWXHIvNe.js +1 -0
  49. package/dist/assets/web/dist/assets/ayu-dark-DluEY0Gj.js +1 -0
  50. package/dist/assets/web/dist/assets/ayu-light-C3h-C4tm.js +1 -0
  51. package/dist/assets/web/dist/assets/ayu-mirage-Bqwy1Gya.js +1 -0
  52. package/dist/assets/web/dist/assets/ballerina-B7ZEbQpA.js +1 -0
  53. package/dist/assets/web/dist/assets/bat-qdxAdBWQ.js +1 -0
  54. package/dist/assets/web/dist/assets/beancount-D-usSTwE.js +1 -0
  55. package/dist/assets/web/dist/assets/berry-DKpUyyne.js +1 -0
  56. package/dist/assets/web/dist/assets/bibtex-Ci_nEsc7.js +1 -0
  57. package/dist/assets/web/dist/assets/bicep-CUHmPFLl.js +1 -0
  58. package/dist/assets/web/dist/assets/bird2-CYIUgYqB.js +1 -0
  59. package/dist/assets/web/dist/assets/blade-Bco3tDh4.js +1 -0
  60. package/dist/assets/web/dist/assets/bsl-_VjlB9mv.js +1 -0
  61. package/dist/assets/web/dist/assets/c-1LaFY_cj.js +1 -0
  62. package/dist/assets/web/dist/assets/c3-D0apG41V.js +1 -0
  63. package/dist/assets/web/dist/assets/cadence-CQ2zXKGN.js +1 -0
  64. package/dist/assets/web/dist/assets/cairo-DLTphjLi.js +1 -0
  65. package/dist/assets/web/dist/assets/catppuccin-frappe-C9Q5zVZY.js +1 -0
  66. package/dist/assets/web/dist/assets/catppuccin-latte-CtsyrtPq.js +1 -0
  67. package/dist/assets/web/dist/assets/catppuccin-macchiato-R8nAf1vR.js +1 -0
  68. package/dist/assets/web/dist/assets/catppuccin-mocha-DjuaAJKi.js +1 -0
  69. package/dist/assets/web/dist/assets/chapel-B-OvrOL5.js +1 -0
  70. package/dist/assets/web/dist/assets/clarity-CtfBBspg.js +1 -0
  71. package/dist/assets/web/dist/assets/clojure-DqKBuwfJ.js +1 -0
  72. package/dist/assets/web/dist/assets/cmake-Bj61d0ZC.js +1 -0
  73. package/dist/assets/web/dist/assets/cobol-Ch3EPlHu.js +1 -0
  74. package/dist/assets/web/dist/assets/codeowners-C8r90Shi.js +1 -0
  75. package/dist/assets/web/dist/assets/codeql-oeQT6MSM.js +1 -0
  76. package/dist/assets/web/dist/assets/coffee-hZuITnto.js +1 -0
  77. package/dist/assets/web/dist/assets/common-lisp-Cv5bFMCO.js +1 -0
  78. package/dist/assets/web/dist/assets/coq-DuBRPxYg.js +1 -0
  79. package/dist/assets/web/dist/assets/cpp-B8iRVo8m.js +1 -0
  80. package/dist/assets/web/dist/assets/crystal-DKveI7lr.js +1 -0
  81. package/dist/assets/web/dist/assets/csharp-oqKa8noW.js +1 -0
  82. package/dist/assets/web/dist/assets/css-_2_CD-rr.js +1 -0
  83. package/dist/assets/web/dist/assets/csv-Dx-8-gkx.js +1 -0
  84. package/dist/assets/web/dist/assets/cue-CE9AQfxI.js +1 -0
  85. package/dist/assets/web/dist/assets/cypher-ClKdZ_lG.js +1 -0
  86. package/dist/assets/web/dist/assets/d-qD-0Kul2.js +1 -0
  87. package/dist/assets/web/dist/assets/dark-plus-Cs2F2srj.js +1 -0
  88. package/dist/assets/web/dist/assets/dart-CnvKMtbv.js +1 -0
  89. package/dist/assets/web/dist/assets/dax-BkyTk9wS.js +1 -0
  90. package/dist/assets/web/dist/assets/desktop-Dlh5hvp9.js +1 -0
  91. package/dist/assets/web/dist/assets/diff-woXpYk--.js +1 -0
  92. package/dist/assets/web/dist/assets/dist-BoLiHpua.js +1547 -0
  93. package/dist/assets/web/dist/assets/docker-IyjqRm3v.js +1 -0
  94. package/dist/assets/web/dist/assets/dotenv-_5a1GRtc.js +1 -0
  95. package/dist/assets/web/dist/assets/dracula-BHWKrbxM.js +1 -0
  96. package/dist/assets/web/dist/assets/dracula-soft-5eyTD99u.js +1 -0
  97. package/dist/assets/web/dist/assets/dream-maker-DW3nJb8Q.js +1 -0
  98. package/dist/assets/web/dist/assets/edge-BenMDPct.js +1 -0
  99. package/dist/assets/web/dist/assets/elixir-CBbdEqG6.js +1 -0
  100. package/dist/assets/web/dist/assets/elm-DMub_2lY.js +1 -0
  101. package/dist/assets/web/dist/assets/emacs-lisp-c_oH4hRZ.js +1 -0
  102. package/dist/assets/web/dist/assets/erb-CI9He_Up.js +1 -0
  103. package/dist/assets/web/dist/assets/erlang-Cphh6RMH.js +1 -0
  104. package/dist/assets/web/dist/assets/everforest-dark-sB-x3p7T.js +1 -0
  105. package/dist/assets/web/dist/assets/everforest-light-Df2xbC6M.js +1 -0
  106. package/dist/assets/web/dist/assets/{favicon-CFfbl2AI.js → favicon-CWPcvWvp.js} +1 -1
  107. package/dist/assets/web/dist/assets/fennel-DQxkIbk2.js +1 -0
  108. package/dist/assets/web/dist/assets/fish-BJitypiv.js +1 -0
  109. package/dist/assets/web/dist/assets/fluent-C03EYrpw.js +1 -0
  110. package/dist/assets/web/dist/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
  111. package/dist/assets/web/dist/assets/fortran-free-form-CYNrtFtB.js +1 -0
  112. package/dist/assets/web/dist/assets/fsharp-D13ZGOAj.js +1 -0
  113. package/dist/assets/web/dist/assets/gdresource-xMC7jr7x.js +1 -0
  114. package/dist/assets/web/dist/assets/gdscript-DYvRD3hg.js +1 -0
  115. package/dist/assets/web/dist/assets/gdshader-CBce3t8t.js +1 -0
  116. package/dist/assets/web/dist/assets/genie-CV2tkWYe.js +1 -0
  117. package/dist/assets/web/dist/assets/gherkin-DExj1W_8.js +1 -0
  118. package/dist/assets/web/dist/assets/git-commit-BSykSTBG.js +1 -0
  119. package/dist/assets/web/dist/assets/git-rebase-BBfhnyF8.js +1 -0
  120. package/dist/assets/web/dist/assets/github-dark-C-LZuMrd.js +1 -0
  121. package/dist/assets/web/dist/assets/github-dark-default-DXG-b-1a.js +1 -0
  122. package/dist/assets/web/dist/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
  123. package/dist/assets/web/dist/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
  124. package/dist/assets/web/dist/assets/github-light-EUqPIrTm.js +1 -0
  125. package/dist/assets/web/dist/assets/github-light-default-BXViO-2h.js +1 -0
  126. package/dist/assets/web/dist/assets/github-light-high-contrast-B68TUdTA.js +1 -0
  127. package/dist/assets/web/dist/assets/gleam-CSRkHgEL.js +1 -0
  128. package/dist/assets/web/dist/assets/glimmer-js-CR9Fxrau.js +1 -0
  129. package/dist/assets/web/dist/assets/glimmer-ts-CwFwX_XS.js +1 -0
  130. package/dist/assets/web/dist/assets/glsl-Daiodp1r.js +1 -0
  131. package/dist/assets/web/dist/assets/gn-ilITqXS6.js +1 -0
  132. package/dist/assets/web/dist/assets/gnuplot-7GGW24-e.js +1 -0
  133. package/dist/assets/web/dist/assets/go-rLFTqkRN.js +1 -0
  134. package/dist/assets/web/dist/assets/graphql-DZvrsEkB.js +1 -0
  135. package/dist/assets/web/dist/assets/groovy-CacY0gHj.js +1 -0
  136. package/dist/assets/web/dist/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
  137. package/dist/assets/web/dist/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
  138. package/dist/assets/web/dist/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
  139. package/dist/assets/web/dist/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
  140. package/dist/assets/web/dist/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
  141. package/dist/assets/web/dist/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
  142. package/dist/assets/web/dist/assets/hack-BaXOzdg7.js +1 -0
  143. package/dist/assets/web/dist/assets/haml-CMskq_VA.js +1 -0
  144. package/dist/assets/web/dist/assets/handlebars-Dhw_f7jD.js +1 -0
  145. package/dist/assets/web/dist/assets/haskell-D8IpX4py.js +1 -0
  146. package/dist/assets/web/dist/assets/haxe-C8oCnwJJ.js +1 -0
  147. package/dist/assets/web/dist/assets/hcl-Dh228itO.js +1 -0
  148. package/dist/assets/web/dist/assets/hjson-CxZEssPk.js +1 -0
  149. package/dist/assets/web/dist/assets/hlsl-Cvrh5tZx.js +1 -0
  150. package/dist/assets/web/dist/assets/horizon-CE9ld1lL.js +1 -0
  151. package/dist/assets/web/dist/assets/horizon-bright-DSNQnXHK.js +1 -0
  152. package/dist/assets/web/dist/assets/houston-CsvMBhTu.js +1 -0
  153. package/dist/assets/web/dist/assets/html-C9k99z0z.js +1 -0
  154. package/dist/assets/web/dist/assets/html-derivative-VckPItXN.js +1 -0
  155. package/dist/assets/web/dist/assets/http-DXU_3h9v.js +1 -0
  156. package/dist/assets/web/dist/assets/hurl-KU24JNdp.js +1 -0
  157. package/dist/assets/web/dist/assets/hxml-Dcm88srW.js +1 -0
  158. package/dist/assets/web/dist/assets/hy-CZbG8q4J.js +1 -0
  159. package/dist/assets/web/dist/assets/imba-DsUTQ-LC.js +1 -0
  160. package/dist/assets/web/dist/assets/indexFormat-B-pd4r7Y.js +1 -0
  161. package/dist/assets/web/dist/assets/ini-B5eOa1yu.js +1 -0
  162. package/dist/assets/web/dist/assets/java-BbZjTNgf.js +1 -0
  163. package/dist/assets/web/dist/assets/javascript-DXCdqcZZ.js +1 -0
  164. package/dist/assets/web/dist/assets/jinja-pDlsjTVp.js +1 -0
  165. package/dist/assets/web/dist/assets/jison-DsXDk66e.js +1 -0
  166. package/dist/assets/web/dist/assets/json-tCxXfRgG.js +1 -0
  167. package/dist/assets/web/dist/assets/json5-BR5RXkoi.js +1 -0
  168. package/dist/assets/web/dist/assets/jsonc-CYpm1nAK.js +1 -0
  169. package/dist/assets/web/dist/assets/jsonl-CmCQp5Yx.js +1 -0
  170. package/dist/assets/web/dist/assets/jsonnet-CJTPZ8u_.js +1 -0
  171. package/dist/assets/web/dist/assets/jssm-DXw9l8Rf.js +1 -0
  172. package/dist/assets/web/dist/assets/jsx-B0ZYkCmi.js +1 -0
  173. package/dist/assets/web/dist/assets/julia-BLzzeI6x.js +1 -0
  174. package/dist/assets/web/dist/assets/just-DvD2_60c.js +1 -0
  175. package/dist/assets/web/dist/assets/kanagawa-dragon-Bozd7klA.js +1 -0
  176. package/dist/assets/web/dist/assets/kanagawa-lotus-BmuOG9ZW.js +1 -0
  177. package/dist/assets/web/dist/assets/kanagawa-wave-BML5mF2J.js +1 -0
  178. package/dist/assets/web/dist/assets/kdl-CsD5j6eV.js +1 -0
  179. package/dist/assets/web/dist/assets/kotlin-DhhofPvG.js +1 -0
  180. package/dist/assets/web/dist/assets/kusto-C7mF5XQf.js +1 -0
  181. package/dist/assets/web/dist/assets/laserwave-C_8bwKvT.js +1 -0
  182. package/dist/assets/web/dist/assets/latex-511zn3h7.js +1 -0
  183. package/dist/assets/web/dist/assets/lean-CewbzKMR.js +1 -0
  184. package/dist/assets/web/dist/assets/less-DVTAwKKz.js +1 -0
  185. package/dist/assets/web/dist/assets/light-plus-DVQuIRkW.js +1 -0
  186. package/dist/assets/web/dist/assets/liquid-BD0BkMox.js +1 -0
  187. package/dist/assets/web/dist/assets/llvm-DqHOMS-s.js +1 -0
  188. package/dist/assets/web/dist/assets/log-BNLmms1o.js +1 -0
  189. package/dist/assets/web/dist/assets/logo-Cluzi2Zq.js +1 -0
  190. package/dist/assets/web/dist/assets/lua-NFicKm6N.js +1 -0
  191. package/dist/assets/web/dist/assets/luau-C2pBCSgt.js +1 -0
  192. package/dist/assets/web/dist/assets/main-i3ZNDRLK.css +1 -0
  193. package/dist/assets/web/dist/assets/main-tYcFk9Dc.js +28 -0
  194. package/dist/assets/web/dist/assets/make-Dixweg8N.js +1 -0
  195. package/dist/assets/web/dist/assets/markdown-BYOwaDjH.js +1 -0
  196. package/dist/assets/web/dist/assets/marko-1-G_nEXK.js +1 -0
  197. package/dist/assets/web/dist/assets/material-theme-Bm3Qr25_.js +1 -0
  198. package/dist/assets/web/dist/assets/material-theme-darker-2IIEA8gg.js +1 -0
  199. package/dist/assets/web/dist/assets/material-theme-lighter-uhdI0v04.js +1 -0
  200. package/dist/assets/web/dist/assets/material-theme-ocean-CHQ94UKr.js +1 -0
  201. package/dist/assets/web/dist/assets/material-theme-palenight-B5W6OYN7.js +1 -0
  202. package/dist/assets/web/dist/assets/matlab-D7qyCx1q.js +1 -0
  203. package/dist/assets/web/dist/assets/mdc-DUe3AQLp.js +1 -0
  204. package/dist/assets/web/dist/assets/mdx-DQZ5AkYe.js +1 -0
  205. package/dist/assets/web/dist/assets/mermaid-BxpfTIzt.js +1 -0
  206. package/dist/assets/web/dist/assets/min-dark-BSWPekZh.js +1 -0
  207. package/dist/assets/web/dist/assets/min-light-DDpmG2fV.js +1 -0
  208. package/dist/assets/web/dist/assets/mipsasm-BMqwQI7S.js +1 -0
  209. package/dist/assets/web/dist/assets/mojo-fg40_ntQ.js +1 -0
  210. package/dist/assets/web/dist/assets/monokai-B_bV9PQ9.js +1 -0
  211. package/dist/assets/web/dist/assets/moonbit-DgjMoLWr.js +1 -0
  212. package/dist/assets/web/dist/assets/move-BYnGhZoM.js +1 -0
  213. package/dist/assets/web/dist/assets/narrat-_X_XdTYD.js +1 -0
  214. package/dist/assets/web/dist/assets/nextflow-BJtWHP5T.js +1 -0
  215. package/dist/assets/web/dist/assets/nextflow-groovy-DJMQeKeT.js +1 -0
  216. package/dist/assets/web/dist/assets/nginx-Dg379_bA.js +1 -0
  217. package/dist/assets/web/dist/assets/night-owl-DhmEMT88.js +1 -0
  218. package/dist/assets/web/dist/assets/night-owl-light-eJ-hLW7d.js +1 -0
  219. package/dist/assets/web/dist/assets/nim-BnFq97ZO.js +1 -0
  220. package/dist/assets/web/dist/assets/nix-IvuFDN5E.js +1 -0
  221. package/dist/assets/web/dist/assets/nord-Cb4Vim4T.js +1 -0
  222. package/dist/assets/web/dist/assets/nsis-CjNLYCLg.js +1 -0
  223. package/dist/assets/web/dist/assets/nushell-DHYfO66s.js +1 -0
  224. package/dist/assets/web/dist/assets/objective-c-D1A_Heim.js +1 -0
  225. package/dist/assets/web/dist/assets/objective-cpp-BsSzOQcm.js +1 -0
  226. package/dist/assets/web/dist/assets/ocaml-O90oeIOV.js +1 -0
  227. package/dist/assets/web/dist/assets/odin-B1RWQWA5.js +1 -0
  228. package/dist/assets/web/dist/assets/one-dark-pro-CLwyXe_n.js +1 -0
  229. package/dist/assets/web/dist/assets/one-light-D7Lr4KcI.js +1 -0
  230. package/dist/assets/web/dist/assets/openscad-BUDT5pXO.js +1 -0
  231. package/dist/assets/web/dist/assets/org-F0uiwGvq.js +1 -0
  232. package/dist/assets/web/dist/assets/pascal-4ZHwLPI5.js +1 -0
  233. package/dist/assets/web/dist/assets/perl-B0euczkl.js +1 -0
  234. package/dist/assets/web/dist/assets/php-DkL3k_n7.js +1 -0
  235. package/dist/assets/web/dist/assets/pierre-dark-CpLgRqie.js +1 -0
  236. package/dist/assets/web/dist/assets/pierre-dark-protanopia-deuteranopia-B35FxJx-.js +1 -0
  237. package/dist/assets/web/dist/assets/pierre-dark-soft-kZQmAZld.js +1 -0
  238. package/dist/assets/web/dist/assets/pierre-dark-tritanopia-CpjhbsIL.js +1 -0
  239. package/dist/assets/web/dist/assets/pierre-dark-vibrant-CpQYzh95.js +1 -0
  240. package/dist/assets/web/dist/assets/pierre-light-CoaEpmwp.js +1 -0
  241. package/dist/assets/web/dist/assets/pierre-light-protanopia-deuteranopia-0fSaH845.js +1 -0
  242. package/dist/assets/web/dist/assets/pierre-light-soft-lWLdNTOI.js +1 -0
  243. package/dist/assets/web/dist/assets/pierre-light-tritanopia-CEbqgOJL.js +1 -0
  244. package/dist/assets/web/dist/assets/pierre-light-vibrant-D80Fkn33.js +1 -0
  245. package/dist/assets/web/dist/assets/pkl-ot-7Btpt.js +1 -0
  246. package/dist/assets/web/dist/assets/plastic-DQwYfKfQ.js +1 -0
  247. package/dist/assets/web/dist/assets/plsql-DGHpHOYJ.js +1 -0
  248. package/dist/assets/web/dist/assets/po-BiJDBrnU.js +1 -0
  249. package/dist/assets/web/dist/assets/poimandres-DRFjx7u4.js +1 -0
  250. package/dist/assets/web/dist/assets/polar-C7UOKdEL.js +1 -0
  251. package/dist/assets/web/dist/assets/postcss-BXeXVLqQ.js +1 -0
  252. package/dist/assets/web/dist/assets/powerquery-DNMTfnFr.js +1 -0
  253. package/dist/assets/web/dist/assets/powershell-CCSX75yM.js +1 -0
  254. package/dist/assets/web/dist/assets/prisma-DMgNhnYS.js +1 -0
  255. package/dist/assets/web/dist/assets/prolog-iXnhIJG7.js +1 -0
  256. package/dist/assets/web/dist/assets/proto-DB4EqR-F.js +1 -0
  257. package/dist/assets/web/dist/assets/pug-L_OjjZP4.js +1 -0
  258. package/dist/assets/web/dist/assets/puppet-CDv2pdJW.js +1 -0
  259. package/dist/assets/web/dist/assets/purescript-9MfHhQsQ.js +1 -0
  260. package/dist/assets/web/dist/assets/python-gzcpVVnB.js +1 -0
  261. package/dist/assets/web/dist/assets/qml-BMjB00Zz.js +1 -0
  262. package/dist/assets/web/dist/assets/qmldir-DCQb3MpD.js +1 -0
  263. package/dist/assets/web/dist/assets/qss-Fe1Jh2GI.js +1 -0
  264. package/dist/assets/web/dist/assets/r-DoeLdnqR.js +1 -0
  265. package/dist/assets/web/dist/assets/racket-DcIDlBhZ.js +1 -0
  266. package/dist/assets/web/dist/assets/raku-B3gFvitq.js +1 -0
  267. package/dist/assets/web/dist/assets/razor-BzYNkAWy.js +1 -0
  268. package/dist/assets/web/dist/assets/rbs-C0MpOrj4.js +1 -0
  269. package/dist/assets/web/dist/assets/red-DX1BQOs8.js +1 -0
  270. package/dist/assets/web/dist/assets/reg-CRGYupPL.js +1 -0
  271. package/dist/assets/web/dist/assets/regexp-CPmElMk3.js +1 -0
  272. package/dist/assets/web/dist/assets/rel-BtDbiS_P.js +1 -0
  273. package/dist/assets/web/dist/assets/riscv-Ckw8ddFX.js +1 -0
  274. package/dist/assets/web/dist/assets/ron-VUp2lXgN.js +1 -0
  275. package/dist/assets/web/dist/assets/rose-pine-aMsaMD1D.js +1 -0
  276. package/dist/assets/web/dist/assets/rose-pine-dawn-8PwUyIlP.js +1 -0
  277. package/dist/assets/web/dist/assets/rose-pine-moon-DO-qXg-I.js +1 -0
  278. package/dist/assets/web/dist/assets/rosmsg-CAekHB0j.js +1 -0
  279. package/dist/assets/web/dist/assets/rst-DrsjgfI7.js +1 -0
  280. package/dist/assets/web/dist/assets/ruby-cB42ppvx.js +1 -0
  281. package/dist/assets/web/dist/assets/rust-Cfkwpbl8.js +1 -0
  282. package/dist/assets/web/dist/assets/sas-R5Y3NM_I.js +1 -0
  283. package/dist/assets/web/dist/assets/sass-DXrisJhu.js +1 -0
  284. package/dist/assets/web/dist/assets/scala-BiFt_7mu.js +1 -0
  285. package/dist/assets/web/dist/assets/scheme-DQCgrYNe.js +1 -0
  286. package/dist/assets/web/dist/assets/scss-C-zWxV9s.js +1 -0
  287. package/dist/assets/web/dist/assets/sdbl-bTVj8UrX.js +1 -0
  288. package/dist/assets/web/dist/assets/seed-DeKSHrt2.js +6 -0
  289. package/dist/assets/web/dist/assets/shaderlab-TOUzSsQk.js +1 -0
  290. package/dist/assets/web/dist/assets/shellscript-oJF96aAU.js +1 -0
  291. package/dist/assets/web/dist/assets/shellsession-CznECKyi.js +1 -0
  292. package/dist/assets/web/dist/assets/slack-dark-DnToyrRv.js +1 -0
  293. package/dist/assets/web/dist/assets/slack-ochin-B2OO5cIa.js +1 -0
  294. package/dist/assets/web/dist/assets/smalltalk-BHpQb5nM.js +1 -0
  295. package/dist/assets/web/dist/assets/smithy-Dgaz7aur.js +1 -0
  296. package/dist/assets/web/dist/assets/snazzy-light-4G7pJPwS.js +1 -0
  297. package/dist/assets/web/dist/assets/solarized-dark-UdsmMDCL.js +1 -0
  298. package/dist/assets/web/dist/assets/solarized-light-C1IUL_tW.js +1 -0
  299. package/dist/assets/web/dist/assets/solidity-Bj7E1mRn.js +1 -0
  300. package/dist/assets/web/dist/assets/soy-wjHLSRag.js +1 -0
  301. package/dist/assets/web/dist/assets/sparql-D_iOobhT.js +1 -0
  302. package/dist/assets/web/dist/assets/splunk-BC2Px7Mm.js +1 -0
  303. package/dist/assets/web/dist/assets/sql-C_BM8IOW.js +1 -0
  304. package/dist/assets/web/dist/assets/ssh-config-BgfXC-Er.js +1 -0
  305. package/dist/assets/web/dist/assets/stata-D31HO8aQ.js +1 -0
  306. package/dist/assets/web/dist/assets/stylus-B6D30XZt.js +1 -0
  307. package/dist/assets/web/dist/assets/surrealql-CKCLyplA.js +1 -0
  308. package/dist/assets/web/dist/assets/svelte-3geWk2iu.js +1 -0
  309. package/dist/assets/web/dist/assets/swift-CyEgAFGc.js +1 -0
  310. package/dist/assets/web/dist/assets/synthwave-84-nFMaYfgc.js +1 -0
  311. package/dist/assets/web/dist/assets/system-verilog-Dh5ihWbf.js +1 -0
  312. package/dist/assets/web/dist/assets/systemd-BxMlprV5.js +1 -0
  313. package/dist/assets/web/dist/assets/talonscript-CohzipZa.js +1 -0
  314. package/dist/assets/web/dist/assets/tasl-DMoTqEGO.js +1 -0
  315. package/dist/assets/web/dist/assets/tcl-CZd0xW_V.js +1 -0
  316. package/dist/assets/web/dist/assets/templ-DiJr_hTD.js +1 -0
  317. package/dist/assets/web/dist/assets/terraform-DswuEJGm.js +1 -0
  318. package/dist/assets/web/dist/assets/tex-BEJGWyeF.js +1 -0
  319. package/dist/assets/web/dist/assets/tokyo-night-oM2G3aXe.js +1 -0
  320. package/dist/assets/web/dist/assets/toml-CcmNWLt0.js +1 -0
  321. package/dist/assets/web/dist/assets/ts-tags-C8Mzdpxx.js +1 -0
  322. package/dist/assets/web/dist/assets/tsv-sltzmVWM.js +1 -0
  323. package/dist/assets/web/dist/assets/tsx-UQiSm_p3.js +1 -0
  324. package/dist/assets/web/dist/assets/turtle-ByJddavk.js +1 -0
  325. package/dist/assets/web/dist/assets/twig-_Pvzkeo9.js +1 -0
  326. package/dist/assets/web/dist/assets/typescript-BWMkINKK.js +1 -0
  327. package/dist/assets/web/dist/assets/typespec-BRdr0IET.js +1 -0
  328. package/dist/assets/web/dist/assets/typst-Bdg9m-e7.js +1 -0
  329. package/dist/assets/web/dist/assets/v-DBj4K9d_.js +1 -0
  330. package/dist/assets/web/dist/assets/vala-zf12oZj6.js +1 -0
  331. package/dist/assets/web/dist/assets/vb-DOwzaHZ0.js +1 -0
  332. package/dist/assets/web/dist/assets/verilog-B2gwz-sJ.js +1 -0
  333. package/dist/assets/web/dist/assets/vesper-DdrHHSXu.js +1 -0
  334. package/dist/assets/web/dist/assets/vhdl-BroJfC0k.js +1 -0
  335. package/dist/assets/web/dist/assets/viml-DvXPmvsu.js +1 -0
  336. package/dist/assets/web/dist/assets/vitesse-black-fwtXNY1n.js +1 -0
  337. package/dist/assets/web/dist/assets/vitesse-dark-BZCL-v6S.js +1 -0
  338. package/dist/assets/web/dist/assets/vitesse-light-VbXTXTou.js +1 -0
  339. package/dist/assets/web/dist/assets/vue-CDZrrAZ8.js +1 -0
  340. package/dist/assets/web/dist/assets/vue-html-tAlpNhfN.js +1 -0
  341. package/dist/assets/web/dist/assets/vue-vine-C27UF_rh.js +1 -0
  342. package/dist/assets/web/dist/assets/vyper-CgoNMtux.js +1 -0
  343. package/dist/assets/web/dist/assets/wallClock-61NpVkY6.js +1 -0
  344. package/dist/assets/web/dist/assets/wasm-BnjxR4X6.js +1 -0
  345. package/dist/assets/web/dist/assets/wasm-ByWQv1Qj.js +1 -0
  346. package/dist/assets/web/dist/assets/wenyan-C8pVoKbM.js +1 -0
  347. package/dist/assets/web/dist/assets/wgsl-BsKzXJz4.js +1 -0
  348. package/dist/assets/web/dist/assets/wikitext-ClFFjSW2.js +1 -0
  349. package/dist/assets/web/dist/assets/wit-DdvCle-K.js +1 -0
  350. package/dist/assets/web/dist/assets/wolfram-DLL8P-h_.js +1 -0
  351. package/dist/assets/web/dist/assets/xml-CxeDr9Zh.js +1 -0
  352. package/dist/assets/web/dist/assets/xsl-Bpi0uUnM.js +1 -0
  353. package/dist/assets/web/dist/assets/yaml-BtUgZ1GN.js +1 -0
  354. package/dist/assets/web/dist/assets/zenscript-BnlCZFoB.js +1 -0
  355. package/dist/assets/web/dist/assets/zig-CMLA9XwU.js +1 -0
  356. package/dist/cli.js +1120 -252
  357. package/package.json +1 -1
  358. package/dist/assets/web/dist/assets/AppShell-Bw3-_TTE.js +0 -1
  359. package/dist/assets/web/dist/assets/DeliveryPage-BRwcQyr7.js +0 -1
  360. package/dist/assets/web/dist/assets/NotFoundPage-RjH-9dPy.js +0 -1
  361. package/dist/assets/web/dist/assets/ResidentDetailPage-BRy5wkv9.js +0 -1
  362. package/dist/assets/web/dist/assets/ResidentsIndexPage-DAEVLN8j.js +0 -1
  363. package/dist/assets/web/dist/assets/RunRoutePage-B1KHmkZ9.js +0 -126
  364. package/dist/assets/web/dist/assets/RunRoutePage-CdbrbqU2.css +0 -1
  365. package/dist/assets/web/dist/assets/RunsIndexPage-3hUWFpFV.js +0 -1
  366. package/dist/assets/web/dist/assets/RunsTabs-Qn_5TVJU.js +0 -1
  367. package/dist/assets/web/dist/assets/ScheduledPage-DysVvVm1.js +0 -1
  368. package/dist/assets/web/dist/assets/StatusDot-Bug2a6T6.js +0 -1
  369. package/dist/assets/web/dist/assets/Tooltip-C2eEUbwn.js +0 -1
  370. package/dist/assets/web/dist/assets/main-0uhp-taL.js +0 -28
  371. package/dist/assets/web/dist/assets/main-Xickfv8V.css +0 -1
  372. package/dist/assets/web/dist/assets/seed-B8mQEhhw.js +0 -6
  373. package/dist/assets/web/dist/assets/wallClock-DI4HIEN5.js +0 -1
@@ -0,0 +1,200 @@
1
+ // The capability profile a run carries (docs/decisions/0026-capability-profiles-and-request-routing.md):
2
+ // the machine class its tools execute on, the identity it acts as, and the
3
+ // minutes it may run. A preset declares one; the run's EFFECTIVE profile is
4
+ // what the pipeline hands the factory, the ledger and the runner — never the
5
+ // preset's fields read again downstream. Pure and leaf: type-only imports, so
6
+ // the node-free record contract and the state Worker can name the shape.
7
+ import type { AgentDef, Identity, MachineClass } from "../agents/registry.js";
8
+
9
+ export type { Identity, MachineClass };
10
+
11
+ /** Where a cap on the profile came from — named on a clip and on a refusal. */
12
+ export type BoundaryScope = "defaults" | "channel" | "user" | "directive";
13
+ export const BOUNDARY_SCOPES: readonly BoundaryScope[] = ["defaults", "channel", "user", "directive"];
14
+
15
+ /** The clip's source as the card and the config block name it: a scope's cap
16
+ * is `<scope> boundary`, the caller's own `budget:` directive is `budget
17
+ * directive` — one wording for every surface that says what clipped a run. */
18
+ export function clipSourceLabel(scope: BoundaryScope): string {
19
+ return scope === "directive" ? "budget directive" : `${scope} boundary`;
20
+ }
21
+
22
+ /** What one run may have: the three axes, and — when a boundary clipped the
23
+ * budget — the scope that did. Identity and class are never clipped: a
24
+ * profile above a cap on those axes is refused before any executor exists. */
25
+ export interface RunProfile {
26
+ machine: MachineClass;
27
+ identity: Identity;
28
+ /** The wall-clock budget in minutes: the preset's, or the tightest cap. */
29
+ minutes: number;
30
+ /** The scope whose boundary clipped `minutes` below the preset's own; absent
31
+ * when the preset's declared budget stands. */
32
+ boundedBy?: BoundaryScope;
33
+ }
34
+
35
+ /** The identity order `none < read < write`: a boundary's `maxIdentity` admits
36
+ * every identity at or below it. Typed against the union, so a new identity
37
+ * fails to compile until it has a rung. */
38
+ export const IDENTITY_ORDER: Record<Identity, number> = { none: 0, read: 1, write: 2 };
39
+
40
+ /** Whether `identity` is at or under `cap` on the order. */
41
+ export function identityWithin(identity: Identity, cap: Identity): boolean {
42
+ return IDENTITY_ORDER[identity] <= IDENTITY_ORDER[cap];
43
+ }
44
+
45
+ /** The profile a preset declares — what an effective profile is when no
46
+ * boundary on the path caps anything (record 0026's invariant: a
47
+ * configuration with no boundaries runs exactly the preset's declared profile). */
48
+ export function declaredProfile(preset: Pick<AgentDef, "machine" | "identity" | "maxMinutes">): RunProfile {
49
+ return { machine: preset.machine, identity: preset.identity, minutes: preset.maxMinutes };
50
+ }
51
+
52
+ /** The preset with its budget replaced by the effective profile's — the def
53
+ * the runner is handed, since its deadline, wrap-up warning and budget label
54
+ * read `maxMinutes` (the same clipped copy the ship pipeline hands its child
55
+ * rounds). Always a copy: the shared `AgentDef` is never mutated. */
56
+ export function budgetedAgent(agent: AgentDef, profile: RunProfile): AgentDef {
57
+ return { ...agent, maxMinutes: profile.minutes };
58
+ }
59
+
60
+ // ---- boundaries: a scope caps, never grants -----------------------------------
61
+
62
+ /** A cap on the three axes that any scope may set (`defaults`, `channels.<id>`,
63
+ * `users.<id>`; docs/reference/specs/routing-and-config.md item 2). An absent
64
+ * axis caps nothing. A boundary never grants: it is not a fourth grants axis,
65
+ * and the policy table's one question (who may run a preset) is unchanged. */
66
+ export interface Boundary {
67
+ /** The most a run may have, in minutes; at least 2 (the bash tool keeps a 60 s reserve). */
68
+ maxMinutes?: number;
69
+ /** The highest identity a run may act as, on `none < read < write`. */
70
+ maxIdentity?: Identity;
71
+ /** The machine classes a run may execute on; a preset's class must be in every layer's set. */
72
+ machines?: MachineClass[];
73
+ }
74
+
75
+ /** One layer's boundary with the scope it came from, in resolution order:
76
+ * `defaults`, then `channel`, then `user`. */
77
+ export interface ScopedBoundary {
78
+ scope: BoundaryScope;
79
+ boundary: Boundary;
80
+ }
81
+
82
+ /** The intersection of every boundary on a request's path, each axis with
83
+ * the scope that set the value that won — so a clip or a refusal can name
84
+ * it. Unlike every other scope setting, which the most specific layer
85
+ * replaces whole, boundaries intersect: the smallest budget, the lowest
86
+ * identity, the classes every layer allows. */
87
+ export interface EffectiveBoundary {
88
+ maxMinutes?: { value: number; scope: BoundaryScope };
89
+ maxIdentity?: { value: Identity; scope: BoundaryScope };
90
+ machines?: {
91
+ /** The classes every layer allows, in canonical class order. */
92
+ value: MachineClass[];
93
+ /** Each layer's own list, so a refusal can name the scopes that exclude a class. */
94
+ by: Array<{ scope: BoundaryScope; machines: MachineClass[] }>;
95
+ };
96
+ }
97
+
98
+ /** Canonical class order for the intersected list (typed against the union
99
+ * like the identity order, so a new class fails to compile until placed). */
100
+ const MACHINE_ORDER: Record<MachineClass, number> = { none: 0, blank: 1, "repo-cold": 2, "repo-resident": 3 };
101
+
102
+ /**
103
+ * Intersect the boundaries on a request's path. On a tie the first layer
104
+ * named keeps the attribution (the least specific scope, in the order the
105
+ * caller passes). Undefined when no layer caps any axis: the absence of a
106
+ * boundary is today's behaviour, and the caller can tell it apart from an
107
+ * empty cap.
108
+ */
109
+ export function intersectBoundaries(layers: readonly ScopedBoundary[]): EffectiveBoundary | undefined {
110
+ const out: EffectiveBoundary = {};
111
+ for (const { scope, boundary } of layers) {
112
+ if (boundary.maxMinutes !== undefined && (!out.maxMinutes || boundary.maxMinutes < out.maxMinutes.value)) {
113
+ out.maxMinutes = { value: boundary.maxMinutes, scope };
114
+ }
115
+ if (
116
+ boundary.maxIdentity !== undefined &&
117
+ (!out.maxIdentity || !identityWithin(out.maxIdentity.value, boundary.maxIdentity))
118
+ ) {
119
+ out.maxIdentity = { value: boundary.maxIdentity, scope };
120
+ }
121
+ if (boundary.machines !== undefined) {
122
+ const allowed = boundary.machines;
123
+ const value = (out.machines ? out.machines.value : allowed)
124
+ .filter((m) => allowed.includes(m))
125
+ .sort((a, b) => MACHINE_ORDER[a] - MACHINE_ORDER[b]);
126
+ out.machines = { value, by: [...(out.machines?.by ?? []), { scope, machines: [...allowed] }] };
127
+ }
128
+ }
129
+ return out.maxMinutes || out.maxIdentity || out.machines ? out : undefined;
130
+ }
131
+
132
+ /** Why a profile was refused: the axis, what the preset needs, what the
133
+ * boundary allows, and the scope(s) that set it — everything the refusal
134
+ * reply names. */
135
+ export type ProfileRefusal =
136
+ | { axis: "identity"; needs: Identity; cap: Identity; scope: BoundaryScope }
137
+ | { axis: "machine"; needs: MachineClass; allowed: MachineClass[]; scopes: BoundaryScope[] };
138
+
139
+ /** The effective profile, or the refusal the authorize stage turns into a
140
+ * named reply. Resolution is pure; the gate judges. */
141
+ export type ProfileResolution = { kind: "profile"; profile: RunProfile } | { kind: "refused"; refusal: ProfileRefusal };
142
+
143
+ /**
144
+ * The effective profile: preset ∩ directives ∩ boundary, with the rule per
145
+ * axis (docs/decisions/0026-capability-profiles-and-request-routing.md). The
146
+ * budget CLIPS — the smallest of the preset's minutes, the caller's own
147
+ * `budget` directive and the boundary's cap, `boundedBy` naming whichever
148
+ * narrowed it (a directive at or above the preset changes nothing) — because a
149
+ * shorter run still ends in the runner's forced write-up. Identity and machine
150
+ * class REFUSE when the preset's is above the cap or outside the set, because
151
+ * a preset that needs to push cannot do its job with a read token. Identity is
152
+ * judged before the class. A directive never widens anything.
153
+ */
154
+ export function effectiveProfile(
155
+ preset: Pick<AgentDef, "machine" | "identity" | "maxMinutes">,
156
+ directives: { budget?: number },
157
+ boundary: EffectiveBoundary | undefined,
158
+ ): ProfileResolution {
159
+ if (boundary?.maxIdentity && !identityWithin(preset.identity, boundary.maxIdentity.value)) {
160
+ return {
161
+ kind: "refused",
162
+ refusal: {
163
+ axis: "identity",
164
+ needs: preset.identity,
165
+ cap: boundary.maxIdentity.value,
166
+ scope: boundary.maxIdentity.scope,
167
+ },
168
+ };
169
+ }
170
+ if (boundary?.machines && !boundary.machines.value.includes(preset.machine)) {
171
+ return {
172
+ kind: "refused",
173
+ refusal: {
174
+ axis: "machine",
175
+ needs: preset.machine,
176
+ allowed: boundary.machines.value,
177
+ scopes: boundary.machines.by.filter((b) => !b.machines.includes(preset.machine)).map((b) => b.scope),
178
+ },
179
+ };
180
+ }
181
+ let minutes = preset.maxMinutes;
182
+ let boundedBy: BoundaryScope | undefined;
183
+ if (directives.budget !== undefined && directives.budget < minutes) {
184
+ minutes = directives.budget;
185
+ boundedBy = "directive";
186
+ }
187
+ if (boundary?.maxMinutes && boundary.maxMinutes.value < minutes) {
188
+ minutes = boundary.maxMinutes.value;
189
+ boundedBy = boundary.maxMinutes.scope;
190
+ }
191
+ return {
192
+ kind: "profile",
193
+ profile: {
194
+ machine: preset.machine,
195
+ identity: preset.identity,
196
+ minutes,
197
+ ...(boundedBy !== undefined ? { boundedBy } : {}),
198
+ },
199
+ };
200
+ }