@coreplane/switchboard 1.204.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.
- package/dist/assets/config/config.example.yaml +32 -3
- package/dist/assets/deploy/cloudflare-memory/worker.ts +129 -3
- package/dist/assets/deploy/cloudflare-memory/wrangler.template.jsonc +7 -2
- package/dist/assets/deploy/cloudflare-sandbox/worker.ts +4 -1
- package/dist/assets/package-lock.json +291 -97
- package/dist/assets/package.json +1 -1
- package/dist/assets/source.json +3 -3
- package/dist/assets/src/agents/registry.ts +466 -0
- package/dist/assets/src/config/profile.ts +200 -0
- package/dist/assets/src/core/delivery.ts +775 -0
- package/dist/assets/src/core/deliverySnapshotStore.ts +200 -0
- package/dist/assets/src/core/runLedger/types.ts +6 -0
- package/dist/assets/src/core/runRecord.ts +44 -0
- package/dist/assets/src/core/ship/contract.ts +502 -0
- package/dist/assets/src/core/workerError.ts +12 -0
- package/dist/assets/web/dist/.vite/manifest.json +2770 -70
- package/dist/assets/web/dist/assets/AppShell-lYVcj-k7.js +1 -0
- package/dist/assets/web/dist/assets/{CostsPage-XQ-fQzdz.js → CostsPage-DGSE48l1.js} +1 -1
- package/dist/assets/web/dist/assets/DeliveryPage-Cx7kQC_e.js +1 -0
- package/dist/assets/web/dist/assets/NotFoundPage-BzWS4Ca1.js +1 -0
- package/dist/assets/web/dist/assets/ResidentDetailPage-Bcasasjb.js +1 -0
- package/dist/assets/web/dist/assets/ResidentsIndexPage-BJwyrphn.js +1 -0
- package/dist/assets/web/dist/assets/RunRoutePage-6eStApqP.js +12 -0
- package/dist/assets/web/dist/assets/RunRoutePage-f6TSNPeW.css +1 -0
- package/dist/assets/web/dist/assets/RunsIndexPage-CWrkv7v8.js +1 -0
- package/dist/assets/web/dist/assets/RunsTabs-DEICQ4FY.js +1 -0
- package/dist/assets/web/dist/assets/ScheduledPage-BX2py1X3.js +1 -0
- package/dist/assets/web/dist/assets/StatusDot-CwCK84JN.js +1 -0
- package/dist/assets/web/dist/assets/Tooltip-CFC88_-Z.js +1 -0
- package/dist/assets/web/dist/assets/abap-CLvhMVsD.js +1 -0
- package/dist/assets/web/dist/assets/actionscript-3-Cs6JJXT5.js +1 -0
- package/dist/assets/web/dist/assets/ada-C5qYipkI.js +1 -0
- package/dist/assets/web/dist/assets/ahk-CA9gdOdF.js +1 -0
- package/dist/assets/web/dist/assets/ahk2-_6rzW9BS.js +1 -0
- package/dist/assets/web/dist/assets/andromeeda-vGVdxbeo.js +1 -0
- package/dist/assets/web/dist/assets/angular-html-Cw130Zyi.js +1 -0
- package/dist/assets/web/dist/assets/angular-ts-DY1m4C2s.js +1 -0
- package/dist/assets/web/dist/assets/apache-U0d_L8uA.js +1 -0
- package/dist/assets/web/dist/assets/apex-KFGFyKwG.js +1 -0
- package/dist/assets/web/dist/assets/apl-W6Ty7v05.js +1 -0
- package/dist/assets/web/dist/assets/applescript-CCn79oCD.js +1 -0
- package/dist/assets/web/dist/assets/ara-4CJ0cIlV.js +1 -0
- package/dist/assets/web/dist/assets/asciidoc-SCjQUq34.js +1 -0
- package/dist/assets/web/dist/assets/asm-Cmm7eHzH.js +1 -0
- package/dist/assets/web/dist/assets/astro-DlLVHwVk.js +1 -0
- package/dist/assets/web/dist/assets/aurora-x-CDeNXAV0.js +1 -0
- package/dist/assets/web/dist/assets/awk-BWXHIvNe.js +1 -0
- package/dist/assets/web/dist/assets/ayu-dark-DluEY0Gj.js +1 -0
- package/dist/assets/web/dist/assets/ayu-light-C3h-C4tm.js +1 -0
- package/dist/assets/web/dist/assets/ayu-mirage-Bqwy1Gya.js +1 -0
- package/dist/assets/web/dist/assets/ballerina-B7ZEbQpA.js +1 -0
- package/dist/assets/web/dist/assets/bat-qdxAdBWQ.js +1 -0
- package/dist/assets/web/dist/assets/beancount-D-usSTwE.js +1 -0
- package/dist/assets/web/dist/assets/berry-DKpUyyne.js +1 -0
- package/dist/assets/web/dist/assets/bibtex-Ci_nEsc7.js +1 -0
- package/dist/assets/web/dist/assets/bicep-CUHmPFLl.js +1 -0
- package/dist/assets/web/dist/assets/bird2-CYIUgYqB.js +1 -0
- package/dist/assets/web/dist/assets/blade-Bco3tDh4.js +1 -0
- package/dist/assets/web/dist/assets/bsl-_VjlB9mv.js +1 -0
- package/dist/assets/web/dist/assets/c-1LaFY_cj.js +1 -0
- package/dist/assets/web/dist/assets/c3-D0apG41V.js +1 -0
- package/dist/assets/web/dist/assets/cadence-CQ2zXKGN.js +1 -0
- package/dist/assets/web/dist/assets/cairo-DLTphjLi.js +1 -0
- package/dist/assets/web/dist/assets/catppuccin-frappe-C9Q5zVZY.js +1 -0
- package/dist/assets/web/dist/assets/catppuccin-latte-CtsyrtPq.js +1 -0
- package/dist/assets/web/dist/assets/catppuccin-macchiato-R8nAf1vR.js +1 -0
- package/dist/assets/web/dist/assets/catppuccin-mocha-DjuaAJKi.js +1 -0
- package/dist/assets/web/dist/assets/chapel-B-OvrOL5.js +1 -0
- package/dist/assets/web/dist/assets/clarity-CtfBBspg.js +1 -0
- package/dist/assets/web/dist/assets/clojure-DqKBuwfJ.js +1 -0
- package/dist/assets/web/dist/assets/cmake-Bj61d0ZC.js +1 -0
- package/dist/assets/web/dist/assets/cobol-Ch3EPlHu.js +1 -0
- package/dist/assets/web/dist/assets/codeowners-C8r90Shi.js +1 -0
- package/dist/assets/web/dist/assets/codeql-oeQT6MSM.js +1 -0
- package/dist/assets/web/dist/assets/coffee-hZuITnto.js +1 -0
- package/dist/assets/web/dist/assets/common-lisp-Cv5bFMCO.js +1 -0
- package/dist/assets/web/dist/assets/coq-DuBRPxYg.js +1 -0
- package/dist/assets/web/dist/assets/cpp-B8iRVo8m.js +1 -0
- package/dist/assets/web/dist/assets/crystal-DKveI7lr.js +1 -0
- package/dist/assets/web/dist/assets/csharp-oqKa8noW.js +1 -0
- package/dist/assets/web/dist/assets/css-_2_CD-rr.js +1 -0
- package/dist/assets/web/dist/assets/csv-Dx-8-gkx.js +1 -0
- package/dist/assets/web/dist/assets/cue-CE9AQfxI.js +1 -0
- package/dist/assets/web/dist/assets/cypher-ClKdZ_lG.js +1 -0
- package/dist/assets/web/dist/assets/d-qD-0Kul2.js +1 -0
- package/dist/assets/web/dist/assets/dark-plus-Cs2F2srj.js +1 -0
- package/dist/assets/web/dist/assets/dart-CnvKMtbv.js +1 -0
- package/dist/assets/web/dist/assets/dax-BkyTk9wS.js +1 -0
- package/dist/assets/web/dist/assets/desktop-Dlh5hvp9.js +1 -0
- package/dist/assets/web/dist/assets/diff-woXpYk--.js +1 -0
- package/dist/assets/web/dist/assets/dist-BoLiHpua.js +1547 -0
- package/dist/assets/web/dist/assets/docker-IyjqRm3v.js +1 -0
- package/dist/assets/web/dist/assets/dotenv-_5a1GRtc.js +1 -0
- package/dist/assets/web/dist/assets/dracula-BHWKrbxM.js +1 -0
- package/dist/assets/web/dist/assets/dracula-soft-5eyTD99u.js +1 -0
- package/dist/assets/web/dist/assets/dream-maker-DW3nJb8Q.js +1 -0
- package/dist/assets/web/dist/assets/edge-BenMDPct.js +1 -0
- package/dist/assets/web/dist/assets/elixir-CBbdEqG6.js +1 -0
- package/dist/assets/web/dist/assets/elm-DMub_2lY.js +1 -0
- package/dist/assets/web/dist/assets/emacs-lisp-c_oH4hRZ.js +1 -0
- package/dist/assets/web/dist/assets/erb-CI9He_Up.js +1 -0
- package/dist/assets/web/dist/assets/erlang-Cphh6RMH.js +1 -0
- package/dist/assets/web/dist/assets/everforest-dark-sB-x3p7T.js +1 -0
- package/dist/assets/web/dist/assets/everforest-light-Df2xbC6M.js +1 -0
- package/dist/assets/web/dist/assets/{favicon-CFfbl2AI.js → favicon-CWPcvWvp.js} +1 -1
- package/dist/assets/web/dist/assets/fennel-DQxkIbk2.js +1 -0
- package/dist/assets/web/dist/assets/fish-BJitypiv.js +1 -0
- package/dist/assets/web/dist/assets/fluent-C03EYrpw.js +1 -0
- package/dist/assets/web/dist/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
- package/dist/assets/web/dist/assets/fortran-free-form-CYNrtFtB.js +1 -0
- package/dist/assets/web/dist/assets/fsharp-D13ZGOAj.js +1 -0
- package/dist/assets/web/dist/assets/gdresource-xMC7jr7x.js +1 -0
- package/dist/assets/web/dist/assets/gdscript-DYvRD3hg.js +1 -0
- package/dist/assets/web/dist/assets/gdshader-CBce3t8t.js +1 -0
- package/dist/assets/web/dist/assets/genie-CV2tkWYe.js +1 -0
- package/dist/assets/web/dist/assets/gherkin-DExj1W_8.js +1 -0
- package/dist/assets/web/dist/assets/git-commit-BSykSTBG.js +1 -0
- package/dist/assets/web/dist/assets/git-rebase-BBfhnyF8.js +1 -0
- package/dist/assets/web/dist/assets/github-dark-C-LZuMrd.js +1 -0
- package/dist/assets/web/dist/assets/github-dark-default-DXG-b-1a.js +1 -0
- package/dist/assets/web/dist/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
- package/dist/assets/web/dist/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
- package/dist/assets/web/dist/assets/github-light-EUqPIrTm.js +1 -0
- package/dist/assets/web/dist/assets/github-light-default-BXViO-2h.js +1 -0
- package/dist/assets/web/dist/assets/github-light-high-contrast-B68TUdTA.js +1 -0
- package/dist/assets/web/dist/assets/gleam-CSRkHgEL.js +1 -0
- package/dist/assets/web/dist/assets/glimmer-js-CR9Fxrau.js +1 -0
- package/dist/assets/web/dist/assets/glimmer-ts-CwFwX_XS.js +1 -0
- package/dist/assets/web/dist/assets/glsl-Daiodp1r.js +1 -0
- package/dist/assets/web/dist/assets/gn-ilITqXS6.js +1 -0
- package/dist/assets/web/dist/assets/gnuplot-7GGW24-e.js +1 -0
- package/dist/assets/web/dist/assets/go-rLFTqkRN.js +1 -0
- package/dist/assets/web/dist/assets/graphql-DZvrsEkB.js +1 -0
- package/dist/assets/web/dist/assets/groovy-CacY0gHj.js +1 -0
- package/dist/assets/web/dist/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
- package/dist/assets/web/dist/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
- package/dist/assets/web/dist/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
- package/dist/assets/web/dist/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
- package/dist/assets/web/dist/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
- package/dist/assets/web/dist/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
- package/dist/assets/web/dist/assets/hack-BaXOzdg7.js +1 -0
- package/dist/assets/web/dist/assets/haml-CMskq_VA.js +1 -0
- package/dist/assets/web/dist/assets/handlebars-Dhw_f7jD.js +1 -0
- package/dist/assets/web/dist/assets/haskell-D8IpX4py.js +1 -0
- package/dist/assets/web/dist/assets/haxe-C8oCnwJJ.js +1 -0
- package/dist/assets/web/dist/assets/hcl-Dh228itO.js +1 -0
- package/dist/assets/web/dist/assets/hjson-CxZEssPk.js +1 -0
- package/dist/assets/web/dist/assets/hlsl-Cvrh5tZx.js +1 -0
- package/dist/assets/web/dist/assets/horizon-CE9ld1lL.js +1 -0
- package/dist/assets/web/dist/assets/horizon-bright-DSNQnXHK.js +1 -0
- package/dist/assets/web/dist/assets/houston-CsvMBhTu.js +1 -0
- package/dist/assets/web/dist/assets/html-C9k99z0z.js +1 -0
- package/dist/assets/web/dist/assets/html-derivative-VckPItXN.js +1 -0
- package/dist/assets/web/dist/assets/http-DXU_3h9v.js +1 -0
- package/dist/assets/web/dist/assets/hurl-KU24JNdp.js +1 -0
- package/dist/assets/web/dist/assets/hxml-Dcm88srW.js +1 -0
- package/dist/assets/web/dist/assets/hy-CZbG8q4J.js +1 -0
- package/dist/assets/web/dist/assets/imba-DsUTQ-LC.js +1 -0
- package/dist/assets/web/dist/assets/indexFormat-B-pd4r7Y.js +1 -0
- package/dist/assets/web/dist/assets/ini-B5eOa1yu.js +1 -0
- package/dist/assets/web/dist/assets/java-BbZjTNgf.js +1 -0
- package/dist/assets/web/dist/assets/javascript-DXCdqcZZ.js +1 -0
- package/dist/assets/web/dist/assets/jinja-pDlsjTVp.js +1 -0
- package/dist/assets/web/dist/assets/jison-DsXDk66e.js +1 -0
- package/dist/assets/web/dist/assets/json-tCxXfRgG.js +1 -0
- package/dist/assets/web/dist/assets/json5-BR5RXkoi.js +1 -0
- package/dist/assets/web/dist/assets/jsonc-CYpm1nAK.js +1 -0
- package/dist/assets/web/dist/assets/jsonl-CmCQp5Yx.js +1 -0
- package/dist/assets/web/dist/assets/jsonnet-CJTPZ8u_.js +1 -0
- package/dist/assets/web/dist/assets/jssm-DXw9l8Rf.js +1 -0
- package/dist/assets/web/dist/assets/jsx-B0ZYkCmi.js +1 -0
- package/dist/assets/web/dist/assets/julia-BLzzeI6x.js +1 -0
- package/dist/assets/web/dist/assets/just-DvD2_60c.js +1 -0
- package/dist/assets/web/dist/assets/kanagawa-dragon-Bozd7klA.js +1 -0
- package/dist/assets/web/dist/assets/kanagawa-lotus-BmuOG9ZW.js +1 -0
- package/dist/assets/web/dist/assets/kanagawa-wave-BML5mF2J.js +1 -0
- package/dist/assets/web/dist/assets/kdl-CsD5j6eV.js +1 -0
- package/dist/assets/web/dist/assets/kotlin-DhhofPvG.js +1 -0
- package/dist/assets/web/dist/assets/kusto-C7mF5XQf.js +1 -0
- package/dist/assets/web/dist/assets/laserwave-C_8bwKvT.js +1 -0
- package/dist/assets/web/dist/assets/latex-511zn3h7.js +1 -0
- package/dist/assets/web/dist/assets/lean-CewbzKMR.js +1 -0
- package/dist/assets/web/dist/assets/less-DVTAwKKz.js +1 -0
- package/dist/assets/web/dist/assets/light-plus-DVQuIRkW.js +1 -0
- package/dist/assets/web/dist/assets/liquid-BD0BkMox.js +1 -0
- package/dist/assets/web/dist/assets/llvm-DqHOMS-s.js +1 -0
- package/dist/assets/web/dist/assets/log-BNLmms1o.js +1 -0
- package/dist/assets/web/dist/assets/logo-Cluzi2Zq.js +1 -0
- package/dist/assets/web/dist/assets/lua-NFicKm6N.js +1 -0
- package/dist/assets/web/dist/assets/luau-C2pBCSgt.js +1 -0
- package/dist/assets/web/dist/assets/main-i3ZNDRLK.css +1 -0
- package/dist/assets/web/dist/assets/main-tYcFk9Dc.js +28 -0
- package/dist/assets/web/dist/assets/make-Dixweg8N.js +1 -0
- package/dist/assets/web/dist/assets/markdown-BYOwaDjH.js +1 -0
- package/dist/assets/web/dist/assets/marko-1-G_nEXK.js +1 -0
- package/dist/assets/web/dist/assets/material-theme-Bm3Qr25_.js +1 -0
- package/dist/assets/web/dist/assets/material-theme-darker-2IIEA8gg.js +1 -0
- package/dist/assets/web/dist/assets/material-theme-lighter-uhdI0v04.js +1 -0
- package/dist/assets/web/dist/assets/material-theme-ocean-CHQ94UKr.js +1 -0
- package/dist/assets/web/dist/assets/material-theme-palenight-B5W6OYN7.js +1 -0
- package/dist/assets/web/dist/assets/matlab-D7qyCx1q.js +1 -0
- package/dist/assets/web/dist/assets/mdc-DUe3AQLp.js +1 -0
- package/dist/assets/web/dist/assets/mdx-DQZ5AkYe.js +1 -0
- package/dist/assets/web/dist/assets/mermaid-BxpfTIzt.js +1 -0
- package/dist/assets/web/dist/assets/min-dark-BSWPekZh.js +1 -0
- package/dist/assets/web/dist/assets/min-light-DDpmG2fV.js +1 -0
- package/dist/assets/web/dist/assets/mipsasm-BMqwQI7S.js +1 -0
- package/dist/assets/web/dist/assets/mojo-fg40_ntQ.js +1 -0
- package/dist/assets/web/dist/assets/monokai-B_bV9PQ9.js +1 -0
- package/dist/assets/web/dist/assets/moonbit-DgjMoLWr.js +1 -0
- package/dist/assets/web/dist/assets/move-BYnGhZoM.js +1 -0
- package/dist/assets/web/dist/assets/narrat-_X_XdTYD.js +1 -0
- package/dist/assets/web/dist/assets/nextflow-BJtWHP5T.js +1 -0
- package/dist/assets/web/dist/assets/nextflow-groovy-DJMQeKeT.js +1 -0
- package/dist/assets/web/dist/assets/nginx-Dg379_bA.js +1 -0
- package/dist/assets/web/dist/assets/night-owl-DhmEMT88.js +1 -0
- package/dist/assets/web/dist/assets/night-owl-light-eJ-hLW7d.js +1 -0
- package/dist/assets/web/dist/assets/nim-BnFq97ZO.js +1 -0
- package/dist/assets/web/dist/assets/nix-IvuFDN5E.js +1 -0
- package/dist/assets/web/dist/assets/nord-Cb4Vim4T.js +1 -0
- package/dist/assets/web/dist/assets/nsis-CjNLYCLg.js +1 -0
- package/dist/assets/web/dist/assets/nushell-DHYfO66s.js +1 -0
- package/dist/assets/web/dist/assets/objective-c-D1A_Heim.js +1 -0
- package/dist/assets/web/dist/assets/objective-cpp-BsSzOQcm.js +1 -0
- package/dist/assets/web/dist/assets/ocaml-O90oeIOV.js +1 -0
- package/dist/assets/web/dist/assets/odin-B1RWQWA5.js +1 -0
- package/dist/assets/web/dist/assets/one-dark-pro-CLwyXe_n.js +1 -0
- package/dist/assets/web/dist/assets/one-light-D7Lr4KcI.js +1 -0
- package/dist/assets/web/dist/assets/openscad-BUDT5pXO.js +1 -0
- package/dist/assets/web/dist/assets/org-F0uiwGvq.js +1 -0
- package/dist/assets/web/dist/assets/pascal-4ZHwLPI5.js +1 -0
- package/dist/assets/web/dist/assets/perl-B0euczkl.js +1 -0
- package/dist/assets/web/dist/assets/php-DkL3k_n7.js +1 -0
- package/dist/assets/web/dist/assets/pierre-dark-CpLgRqie.js +1 -0
- package/dist/assets/web/dist/assets/pierre-dark-protanopia-deuteranopia-B35FxJx-.js +1 -0
- package/dist/assets/web/dist/assets/pierre-dark-soft-kZQmAZld.js +1 -0
- package/dist/assets/web/dist/assets/pierre-dark-tritanopia-CpjhbsIL.js +1 -0
- package/dist/assets/web/dist/assets/pierre-dark-vibrant-CpQYzh95.js +1 -0
- package/dist/assets/web/dist/assets/pierre-light-CoaEpmwp.js +1 -0
- package/dist/assets/web/dist/assets/pierre-light-protanopia-deuteranopia-0fSaH845.js +1 -0
- package/dist/assets/web/dist/assets/pierre-light-soft-lWLdNTOI.js +1 -0
- package/dist/assets/web/dist/assets/pierre-light-tritanopia-CEbqgOJL.js +1 -0
- package/dist/assets/web/dist/assets/pierre-light-vibrant-D80Fkn33.js +1 -0
- package/dist/assets/web/dist/assets/pkl-ot-7Btpt.js +1 -0
- package/dist/assets/web/dist/assets/plastic-DQwYfKfQ.js +1 -0
- package/dist/assets/web/dist/assets/plsql-DGHpHOYJ.js +1 -0
- package/dist/assets/web/dist/assets/po-BiJDBrnU.js +1 -0
- package/dist/assets/web/dist/assets/poimandres-DRFjx7u4.js +1 -0
- package/dist/assets/web/dist/assets/polar-C7UOKdEL.js +1 -0
- package/dist/assets/web/dist/assets/postcss-BXeXVLqQ.js +1 -0
- package/dist/assets/web/dist/assets/powerquery-DNMTfnFr.js +1 -0
- package/dist/assets/web/dist/assets/powershell-CCSX75yM.js +1 -0
- package/dist/assets/web/dist/assets/prisma-DMgNhnYS.js +1 -0
- package/dist/assets/web/dist/assets/prolog-iXnhIJG7.js +1 -0
- package/dist/assets/web/dist/assets/proto-DB4EqR-F.js +1 -0
- package/dist/assets/web/dist/assets/pug-L_OjjZP4.js +1 -0
- package/dist/assets/web/dist/assets/puppet-CDv2pdJW.js +1 -0
- package/dist/assets/web/dist/assets/purescript-9MfHhQsQ.js +1 -0
- package/dist/assets/web/dist/assets/python-gzcpVVnB.js +1 -0
- package/dist/assets/web/dist/assets/qml-BMjB00Zz.js +1 -0
- package/dist/assets/web/dist/assets/qmldir-DCQb3MpD.js +1 -0
- package/dist/assets/web/dist/assets/qss-Fe1Jh2GI.js +1 -0
- package/dist/assets/web/dist/assets/r-DoeLdnqR.js +1 -0
- package/dist/assets/web/dist/assets/racket-DcIDlBhZ.js +1 -0
- package/dist/assets/web/dist/assets/raku-B3gFvitq.js +1 -0
- package/dist/assets/web/dist/assets/razor-BzYNkAWy.js +1 -0
- package/dist/assets/web/dist/assets/rbs-C0MpOrj4.js +1 -0
- package/dist/assets/web/dist/assets/red-DX1BQOs8.js +1 -0
- package/dist/assets/web/dist/assets/reg-CRGYupPL.js +1 -0
- package/dist/assets/web/dist/assets/regexp-CPmElMk3.js +1 -0
- package/dist/assets/web/dist/assets/rel-BtDbiS_P.js +1 -0
- package/dist/assets/web/dist/assets/riscv-Ckw8ddFX.js +1 -0
- package/dist/assets/web/dist/assets/ron-VUp2lXgN.js +1 -0
- package/dist/assets/web/dist/assets/rose-pine-aMsaMD1D.js +1 -0
- package/dist/assets/web/dist/assets/rose-pine-dawn-8PwUyIlP.js +1 -0
- package/dist/assets/web/dist/assets/rose-pine-moon-DO-qXg-I.js +1 -0
- package/dist/assets/web/dist/assets/rosmsg-CAekHB0j.js +1 -0
- package/dist/assets/web/dist/assets/rst-DrsjgfI7.js +1 -0
- package/dist/assets/web/dist/assets/ruby-cB42ppvx.js +1 -0
- package/dist/assets/web/dist/assets/rust-Cfkwpbl8.js +1 -0
- package/dist/assets/web/dist/assets/sas-R5Y3NM_I.js +1 -0
- package/dist/assets/web/dist/assets/sass-DXrisJhu.js +1 -0
- package/dist/assets/web/dist/assets/scala-BiFt_7mu.js +1 -0
- package/dist/assets/web/dist/assets/scheme-DQCgrYNe.js +1 -0
- package/dist/assets/web/dist/assets/scss-C-zWxV9s.js +1 -0
- package/dist/assets/web/dist/assets/sdbl-bTVj8UrX.js +1 -0
- package/dist/assets/web/dist/assets/seed-DeKSHrt2.js +6 -0
- package/dist/assets/web/dist/assets/shaderlab-TOUzSsQk.js +1 -0
- package/dist/assets/web/dist/assets/shellscript-oJF96aAU.js +1 -0
- package/dist/assets/web/dist/assets/shellsession-CznECKyi.js +1 -0
- package/dist/assets/web/dist/assets/slack-dark-DnToyrRv.js +1 -0
- package/dist/assets/web/dist/assets/slack-ochin-B2OO5cIa.js +1 -0
- package/dist/assets/web/dist/assets/smalltalk-BHpQb5nM.js +1 -0
- package/dist/assets/web/dist/assets/smithy-Dgaz7aur.js +1 -0
- package/dist/assets/web/dist/assets/snazzy-light-4G7pJPwS.js +1 -0
- package/dist/assets/web/dist/assets/solarized-dark-UdsmMDCL.js +1 -0
- package/dist/assets/web/dist/assets/solarized-light-C1IUL_tW.js +1 -0
- package/dist/assets/web/dist/assets/solidity-Bj7E1mRn.js +1 -0
- package/dist/assets/web/dist/assets/soy-wjHLSRag.js +1 -0
- package/dist/assets/web/dist/assets/sparql-D_iOobhT.js +1 -0
- package/dist/assets/web/dist/assets/splunk-BC2Px7Mm.js +1 -0
- package/dist/assets/web/dist/assets/sql-C_BM8IOW.js +1 -0
- package/dist/assets/web/dist/assets/ssh-config-BgfXC-Er.js +1 -0
- package/dist/assets/web/dist/assets/stata-D31HO8aQ.js +1 -0
- package/dist/assets/web/dist/assets/stylus-B6D30XZt.js +1 -0
- package/dist/assets/web/dist/assets/surrealql-CKCLyplA.js +1 -0
- package/dist/assets/web/dist/assets/svelte-3geWk2iu.js +1 -0
- package/dist/assets/web/dist/assets/swift-CyEgAFGc.js +1 -0
- package/dist/assets/web/dist/assets/synthwave-84-nFMaYfgc.js +1 -0
- package/dist/assets/web/dist/assets/system-verilog-Dh5ihWbf.js +1 -0
- package/dist/assets/web/dist/assets/systemd-BxMlprV5.js +1 -0
- package/dist/assets/web/dist/assets/talonscript-CohzipZa.js +1 -0
- package/dist/assets/web/dist/assets/tasl-DMoTqEGO.js +1 -0
- package/dist/assets/web/dist/assets/tcl-CZd0xW_V.js +1 -0
- package/dist/assets/web/dist/assets/templ-DiJr_hTD.js +1 -0
- package/dist/assets/web/dist/assets/terraform-DswuEJGm.js +1 -0
- package/dist/assets/web/dist/assets/tex-BEJGWyeF.js +1 -0
- package/dist/assets/web/dist/assets/tokyo-night-oM2G3aXe.js +1 -0
- package/dist/assets/web/dist/assets/toml-CcmNWLt0.js +1 -0
- package/dist/assets/web/dist/assets/ts-tags-C8Mzdpxx.js +1 -0
- package/dist/assets/web/dist/assets/tsv-sltzmVWM.js +1 -0
- package/dist/assets/web/dist/assets/tsx-UQiSm_p3.js +1 -0
- package/dist/assets/web/dist/assets/turtle-ByJddavk.js +1 -0
- package/dist/assets/web/dist/assets/twig-_Pvzkeo9.js +1 -0
- package/dist/assets/web/dist/assets/typescript-BWMkINKK.js +1 -0
- package/dist/assets/web/dist/assets/typespec-BRdr0IET.js +1 -0
- package/dist/assets/web/dist/assets/typst-Bdg9m-e7.js +1 -0
- package/dist/assets/web/dist/assets/v-DBj4K9d_.js +1 -0
- package/dist/assets/web/dist/assets/vala-zf12oZj6.js +1 -0
- package/dist/assets/web/dist/assets/vb-DOwzaHZ0.js +1 -0
- package/dist/assets/web/dist/assets/verilog-B2gwz-sJ.js +1 -0
- package/dist/assets/web/dist/assets/vesper-DdrHHSXu.js +1 -0
- package/dist/assets/web/dist/assets/vhdl-BroJfC0k.js +1 -0
- package/dist/assets/web/dist/assets/viml-DvXPmvsu.js +1 -0
- package/dist/assets/web/dist/assets/vitesse-black-fwtXNY1n.js +1 -0
- package/dist/assets/web/dist/assets/vitesse-dark-BZCL-v6S.js +1 -0
- package/dist/assets/web/dist/assets/vitesse-light-VbXTXTou.js +1 -0
- package/dist/assets/web/dist/assets/vue-CDZrrAZ8.js +1 -0
- package/dist/assets/web/dist/assets/vue-html-tAlpNhfN.js +1 -0
- package/dist/assets/web/dist/assets/vue-vine-C27UF_rh.js +1 -0
- package/dist/assets/web/dist/assets/vyper-CgoNMtux.js +1 -0
- package/dist/assets/web/dist/assets/wallClock-61NpVkY6.js +1 -0
- package/dist/assets/web/dist/assets/wasm-BnjxR4X6.js +1 -0
- package/dist/assets/web/dist/assets/wasm-ByWQv1Qj.js +1 -0
- package/dist/assets/web/dist/assets/wenyan-C8pVoKbM.js +1 -0
- package/dist/assets/web/dist/assets/wgsl-BsKzXJz4.js +1 -0
- package/dist/assets/web/dist/assets/wikitext-ClFFjSW2.js +1 -0
- package/dist/assets/web/dist/assets/wit-DdvCle-K.js +1 -0
- package/dist/assets/web/dist/assets/wolfram-DLL8P-h_.js +1 -0
- package/dist/assets/web/dist/assets/xml-CxeDr9Zh.js +1 -0
- package/dist/assets/web/dist/assets/xsl-Bpi0uUnM.js +1 -0
- package/dist/assets/web/dist/assets/yaml-BtUgZ1GN.js +1 -0
- package/dist/assets/web/dist/assets/zenscript-BnlCZFoB.js +1 -0
- package/dist/assets/web/dist/assets/zig-CMLA9XwU.js +1 -0
- package/dist/cli.js +1005 -233
- package/package.json +1 -1
- package/dist/assets/web/dist/assets/AppShell-Bw3-_TTE.js +0 -1
- package/dist/assets/web/dist/assets/DeliveryPage-BRwcQyr7.js +0 -1
- package/dist/assets/web/dist/assets/NotFoundPage-RjH-9dPy.js +0 -1
- package/dist/assets/web/dist/assets/ResidentDetailPage-BRy5wkv9.js +0 -1
- package/dist/assets/web/dist/assets/ResidentsIndexPage-DAEVLN8j.js +0 -1
- package/dist/assets/web/dist/assets/RunRoutePage-B1KHmkZ9.js +0 -126
- package/dist/assets/web/dist/assets/RunRoutePage-CdbrbqU2.css +0 -1
- package/dist/assets/web/dist/assets/RunsIndexPage-3hUWFpFV.js +0 -1
- package/dist/assets/web/dist/assets/RunsTabs-Qn_5TVJU.js +0 -1
- package/dist/assets/web/dist/assets/ScheduledPage-DysVvVm1.js +0 -1
- package/dist/assets/web/dist/assets/StatusDot-Bug2a6T6.js +0 -1
- package/dist/assets/web/dist/assets/Tooltip-C2eEUbwn.js +0 -1
- package/dist/assets/web/dist/assets/main-0uhp-taL.js +0 -28
- package/dist/assets/web/dist/assets/main-Xickfv8V.css +0 -1
- package/dist/assets/web/dist/assets/seed-B8mQEhhw.js +0 -6
- package/dist/assets/web/dist/assets/wallClock-DI4HIEN5.js +0 -1
|
@@ -41,6 +41,7 @@ defaults:
|
|
|
41
41
|
general: anthropic/claude-haiku-4-5
|
|
42
42
|
coding: anthropic/claude-opus-5
|
|
43
43
|
review: anthropic/claude-opus-5
|
|
44
|
+
explore: anthropic/claude-opus-5 # the two-hour read-only investigation (docs/reference/specs/agent-explore.md)
|
|
44
45
|
# Default model effort per agent: low | medium | high (how hard the model
|
|
45
46
|
# thinks per turn; lower = much faster turns). Same layering as models —
|
|
46
47
|
# per-channel/user `effort` / `efforts.<agent>` and a per-request `effort:`
|
|
@@ -48,6 +49,21 @@ defaults:
|
|
|
48
49
|
# provider default. Skipped for models without effort support.
|
|
49
50
|
# efforts:
|
|
50
51
|
# coding: medium
|
|
52
|
+
# A boundary caps what ANY run in a scope may have — never grants — on the
|
|
53
|
+
# three axes of a run's profile (docs/reference/specs/routing-and-config.md item 2):
|
|
54
|
+
# maxMinutes (the wall-clock budget; at least 2), maxIdentity (the credential
|
|
55
|
+
# a run acts as: none < read < write) and machines (the classes its tools may
|
|
56
|
+
# execute on: none, blank, repo-cold, repo-resident). Unlike every other
|
|
57
|
+
# setting, boundaries INTERSECT across defaults, channel and user — the
|
|
58
|
+
# smallest budget, the lowest identity, the classes every layer allows — so a
|
|
59
|
+
# channel or a user can only tighten what is set here. A budget above a cap is
|
|
60
|
+
# clipped (the card and the run record say so); a preset whose identity or
|
|
61
|
+
# class is above a cap is refused by name before any executor exists. Absent →
|
|
62
|
+
# nothing is capped and every preset runs exactly its declared profile.
|
|
63
|
+
# boundary:
|
|
64
|
+
# maxMinutes: 120
|
|
65
|
+
# maxIdentity: write
|
|
66
|
+
# machines: [none, blank, repo-cold, repo-resident]
|
|
51
67
|
|
|
52
68
|
# PR reviews and the reading diff (docs/reference/specs/reading-diff.md). Every
|
|
53
69
|
# review records its full `git diff`; the ABRIDGED version (meat.dev, run on
|
|
@@ -72,6 +88,12 @@ defaults:
|
|
|
72
88
|
# review: anthropic/claude-opus-5
|
|
73
89
|
# efforts:
|
|
74
90
|
# coding: medium
|
|
91
|
+
# # Cap this channel's runs (see defaults.boundary): here every run acts
|
|
92
|
+
# # with at most a read credential — `agent:coding` is refused by name,
|
|
93
|
+
# # `agent:review` runs — and no run gets more than 45 minutes.
|
|
94
|
+
# boundary:
|
|
95
|
+
# maxMinutes: 45
|
|
96
|
+
# maxIdentity: read
|
|
75
97
|
|
|
76
98
|
# Static per-user defaults (user ID -> scope).
|
|
77
99
|
# users:
|
|
@@ -249,10 +271,13 @@ workspaceDir: ./workspaces
|
|
|
249
271
|
# <task>` runs the coding → review → fix loop to LGTM as one pipeline: at most
|
|
250
272
|
# `maxRounds` review rounds and `maxMinutes` minutes of wall clock — whichever
|
|
251
273
|
# hits first ends the loop, and each child round's own budget is clipped to the
|
|
252
|
-
# remaining pipeline time.
|
|
274
|
+
# remaining pipeline time. `maxMinutes` is the ship preset's declared budget:
|
|
275
|
+
# a channel or user `boundary.maxMinutes` and a per-message `budget:` directive
|
|
276
|
+
# clip it like any preset's, and the card says so. Defaults shown; both must be
|
|
277
|
+
# integers >= 1.
|
|
253
278
|
# ship:
|
|
254
279
|
# maxRounds: 3 # review rounds per pipeline
|
|
255
|
-
# maxMinutes: 120 #
|
|
280
|
+
# maxMinutes: 120 # the ship preset's wall-clock budget in minutes (the registry's default)
|
|
256
281
|
|
|
257
282
|
# Spend reporting: GET /costs (Access-gated). Optional. See docs/reference/specs/costs.md.
|
|
258
283
|
# costs:
|
|
@@ -273,7 +298,7 @@ workspaceDir: ./workspaces
|
|
|
273
298
|
# anthropicWorkspaceId: wrkspc_... # this app's Anthropic workspace
|
|
274
299
|
|
|
275
300
|
# Delivery indicators: GET /delivery and `delivery report` (docs/reference/specs/delivery.md).
|
|
276
|
-
# Optional. Needs a GitHub credential (the App triple or GH_TOKEN); read-only.
|
|
301
|
+
# Optional. Needs a GitHub credential (the App triple or GH_TOKEN); read-only on GitHub.
|
|
277
302
|
# delivery:
|
|
278
303
|
# repos: [acme/api, acme/web] # the repositories the page serves; the first is its default
|
|
279
304
|
# # (`delivery report --repo owner/name` needs no entry here)
|
|
@@ -281,6 +306,10 @@ workspaceDir: ./workspaces
|
|
|
281
306
|
# # beside this installation's own App identity
|
|
282
307
|
# agentLogins: [] # logins that are agents beyond the `[bot]` suffix
|
|
283
308
|
# agentCoauthors: [Claude] # `Co-Authored-By:` names that mark a commit as an agent's
|
|
309
|
+
# snapshot: # each repository's facts are read from GitHub on an interval and
|
|
310
|
+
# everyMinutes: 60 # served from that snapshot (its age on the page; `?fresh=1` /
|
|
311
|
+
# # `--fresh` read now); 5–1440 minutes, default 60. Kept on the
|
|
312
|
+
# # state Worker any `*.worker` block below names; in memory without one
|
|
284
313
|
|
|
285
314
|
# Dashboard authentication (docs/reference/specs/access-gate.md). Everything the dashboard
|
|
286
315
|
# serves — /runs*, /residents*, /costs*, /mcp/connect/*, and every /api/* command
|
|
@@ -10,6 +10,8 @@ import {
|
|
|
10
10
|
} from "../../src/core/memory/engine.ts";
|
|
11
11
|
import { tokenize } from "../../src/core/memory/scorer.ts";
|
|
12
12
|
import { FIRING_DETAIL_MAX, isScheduleFiring, type ScheduleFiring } from "../../src/core/schedules.ts";
|
|
13
|
+
import { REPO_SLUG } from "../../src/core/delivery.ts";
|
|
14
|
+
import { isDeliverySnapshot, type DeliverySnapshot } from "../../src/core/deliverySnapshotStore.ts";
|
|
13
15
|
import {
|
|
14
16
|
applyRetention,
|
|
15
17
|
clampRetentionPolicy,
|
|
@@ -127,9 +129,14 @@ export interface Env {
|
|
|
127
129
|
CONFIG: DurableObjectNamespace<ConfigDO>;
|
|
128
130
|
/** Live-run transcripts (run-history item 32): one RunTranscriptDO per live run, named by run id. */
|
|
129
131
|
RUN_TRANSCRIPTS: DurableObjectNamespace<RunTranscriptDO>;
|
|
132
|
+
/** Delivery snapshots (delivery item 10): ONE DeliveryDO (named "delivery"), one snapshot per repository. */
|
|
133
|
+
DELIVERY: DurableObjectNamespace<DeliveryDO>;
|
|
130
134
|
MEMORY_TOKEN?: string;
|
|
131
135
|
}
|
|
132
136
|
|
|
137
|
+
/** The single DeliveryDO's name — every repository's snapshot lives in one object. */
|
|
138
|
+
const DELIVERY_OBJECT = "delivery";
|
|
139
|
+
|
|
133
140
|
/** The single ConfigDO's name. */
|
|
134
141
|
const CONFIG_OBJECT = "config";
|
|
135
142
|
/** A config document key: short, lowercase, like `overrides`. */
|
|
@@ -700,6 +707,112 @@ function parseStored<T>(text: string, guard: (v: unknown) => v is T): T | null {
|
|
|
700
707
|
}
|
|
701
708
|
}
|
|
702
709
|
|
|
710
|
+
// ---------------------------------------------------------------------------
|
|
711
|
+
// Durable Object: delivery snapshots, one per repository
|
|
712
|
+
// ---------------------------------------------------------------------------
|
|
713
|
+
|
|
714
|
+
// The delivery page's snapshot (docs/reference/specs/delivery.md item 10): the
|
|
715
|
+
// merged pull requests' facts over the snapshot window, as GitHub gave them,
|
|
716
|
+
// and when they were read. A busy repository's window is a few MB — the review
|
|
717
|
+
// bodies and every workflow run of every branch — so a snapshot is stored as
|
|
718
|
+
// one row per pull request under a meta row, never as one JSON value (the
|
|
719
|
+
// per-row limit is 2 MB). A put replaces the repository's snapshot whole, in
|
|
720
|
+
// one transaction; a get reassembles it in pull request number order.
|
|
721
|
+
|
|
722
|
+
/** One pull request's facts may not exceed a fraction of the row limit; the fence names the pull request. */
|
|
723
|
+
const MAX_PULL_REQUEST_FACTS_BYTES = 1024 * 1024;
|
|
724
|
+
|
|
725
|
+
export class DeliveryDO extends DurableObject<Env> {
|
|
726
|
+
private readonly sql: SqlStorage;
|
|
727
|
+
|
|
728
|
+
constructor(ctx: DurableObjectState, env: Env) {
|
|
729
|
+
super(ctx, env);
|
|
730
|
+
this.sql = ctx.storage.sql;
|
|
731
|
+
this.sql.exec(`
|
|
732
|
+
CREATE TABLE IF NOT EXISTS snapshots (
|
|
733
|
+
repo TEXT PRIMARY KEY,
|
|
734
|
+
snapshot_at TEXT NOT NULL,
|
|
735
|
+
meta TEXT NOT NULL
|
|
736
|
+
);
|
|
737
|
+
CREATE TABLE IF NOT EXISTS pull_requests (
|
|
738
|
+
repo TEXT NOT NULL,
|
|
739
|
+
number INTEGER NOT NULL,
|
|
740
|
+
facts TEXT NOT NULL,
|
|
741
|
+
PRIMARY KEY (repo, number)
|
|
742
|
+
);
|
|
743
|
+
`);
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
/** Replace the repository's snapshot: the meta row and one row per pull request, in one transaction. */
|
|
747
|
+
async put(snapshot: DeliverySnapshot): Promise<number> {
|
|
748
|
+
const { prs, ...meta } = snapshot;
|
|
749
|
+
this.ctx.storage.transactionSync(() => {
|
|
750
|
+
this.sql.exec(`DELETE FROM pull_requests WHERE repo = ?`, snapshot.repo);
|
|
751
|
+
for (const pr of prs) {
|
|
752
|
+
this.sql.exec(
|
|
753
|
+
`INSERT OR REPLACE INTO pull_requests (repo, number, facts) VALUES (?, ?, ?)`,
|
|
754
|
+
snapshot.repo,
|
|
755
|
+
pr.number,
|
|
756
|
+
JSON.stringify(pr),
|
|
757
|
+
);
|
|
758
|
+
}
|
|
759
|
+
this.sql.exec(
|
|
760
|
+
`INSERT OR REPLACE INTO snapshots (repo, snapshot_at, meta) VALUES (?, ?, ?)`,
|
|
761
|
+
snapshot.repo,
|
|
762
|
+
snapshot.snapshotAt,
|
|
763
|
+
JSON.stringify(meta),
|
|
764
|
+
);
|
|
765
|
+
});
|
|
766
|
+
return prs.length;
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
/** The repository's snapshot, pull requests in number order; null when none was stored. */
|
|
770
|
+
async get(repo: string): Promise<DeliverySnapshot | null> {
|
|
771
|
+
const row = this.sql.exec<{ meta: string }>(`SELECT meta FROM snapshots WHERE repo = ?`, repo).toArray()[0];
|
|
772
|
+
if (!row) return null;
|
|
773
|
+
const prs = this.sql
|
|
774
|
+
.exec<{ facts: string }>(`SELECT facts FROM pull_requests WHERE repo = ? ORDER BY number`, repo)
|
|
775
|
+
.toArray()
|
|
776
|
+
.map((r) => JSON.parse(r.facts) as DeliverySnapshot["prs"][number]);
|
|
777
|
+
return { ...(JSON.parse(row.meta) as Omit<DeliverySnapshot, "prs">), prs };
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
const DELIVERY_ROUTES = new Set(["/delivery/get", "/delivery/put"]);
|
|
782
|
+
|
|
783
|
+
async function handleDelivery(pathname: string, body: unknown, env: Env): Promise<Response> {
|
|
784
|
+
const b = (typeof body === "object" && body !== null ? body : {}) as Record<string, unknown>;
|
|
785
|
+
const dO = env.DELIVERY.get(env.DELIVERY.idFromName(DELIVERY_OBJECT));
|
|
786
|
+
if (pathname === "/delivery/get") {
|
|
787
|
+
if (typeof b.repo !== "string" || !REPO_SLUG.test(b.repo)) return json({ error: "repo must be owner/name" }, 400);
|
|
788
|
+
const snapshot = await dO.get(b.repo);
|
|
789
|
+
console.log(
|
|
790
|
+
`[delivery/get] ${b.repo} -> ${snapshot ? `${snapshot.prs.length} pull requests as of ${snapshot.snapshotAt}` : "none"}`,
|
|
791
|
+
);
|
|
792
|
+
return json({ snapshot });
|
|
793
|
+
}
|
|
794
|
+
if (pathname === "/delivery/put") {
|
|
795
|
+
if (!isDeliverySnapshot(b.snapshot))
|
|
796
|
+
return json(
|
|
797
|
+
{ error: "snapshot must be a DeliverySnapshot (repo, snapshotAt, range, prs[], truncated, completeFrom)" },
|
|
798
|
+
400,
|
|
799
|
+
);
|
|
800
|
+
const encoder = new TextEncoder();
|
|
801
|
+
const oversized = b.snapshot.prs.find(
|
|
802
|
+
(pr) => encoder.encode(JSON.stringify(pr)).byteLength > MAX_PULL_REQUEST_FACTS_BYTES,
|
|
803
|
+
);
|
|
804
|
+
if (oversized)
|
|
805
|
+
return json(
|
|
806
|
+
{ error: `pull request ${oversized.number}'s facts must be at most ${MAX_PULL_REQUEST_FACTS_BYTES} bytes` },
|
|
807
|
+
413,
|
|
808
|
+
);
|
|
809
|
+
const prs = await dO.put(b.snapshot);
|
|
810
|
+
console.log(`[delivery/put] ${b.snapshot.repo} <- ${prs} pull requests as of ${b.snapshot.snapshotAt}`);
|
|
811
|
+
return json({ ok: true, prs });
|
|
812
|
+
}
|
|
813
|
+
return json({ error: "not found" }, 404);
|
|
814
|
+
}
|
|
815
|
+
|
|
703
816
|
/** Documents are small; a body over this is refused before storage. */
|
|
704
817
|
const MAX_CONFIG_DOCUMENT_BYTES = 256 * 1024;
|
|
705
818
|
|
|
@@ -2180,6 +2293,16 @@ const LEDGER_ROUTES = new Set([
|
|
|
2180
2293
|
|
|
2181
2294
|
/** Routes whose bodies may carry a record, a transcript chunk, or an event batch. */
|
|
2182
2295
|
const WIDE_BODY_ROUTES = new Set(["/runs/put", "/runs/finish", "/runs/append", "/runs/transcript/write"]);
|
|
2296
|
+
/** A delivery snapshot: every merged pull request's reviews and its branch's workflow runs over
|
|
2297
|
+
* the window — a busy repository's runs to a few MB (measured: 291 pull requests, 2.1 MB). */
|
|
2298
|
+
const MAX_SNAPSHOT_BODY_BYTES = 8 * 1024 * 1024;
|
|
2299
|
+
|
|
2300
|
+
/** The request body ceiling per route, decided after routing and before the parse. */
|
|
2301
|
+
function bodyFenceFor(pathname: string): number {
|
|
2302
|
+
if (WIDE_BODY_ROUTES.has(pathname)) return MAX_RUN_PUT_BODY_BYTES;
|
|
2303
|
+
if (pathname === "/delivery/put") return MAX_SNAPSHOT_BODY_BYTES;
|
|
2304
|
+
return MAX_BODY_BYTES;
|
|
2305
|
+
}
|
|
2183
2306
|
|
|
2184
2307
|
const gen = (v: unknown): Validated<string> =>
|
|
2185
2308
|
typeof v === "string" && GEN_PATTERN.test(v)
|
|
@@ -2486,6 +2609,7 @@ async function handleRuns(pathname: string, body: unknown, env: Env): Promise<Re
|
|
|
2486
2609
|
|
|
2487
2610
|
const ROUTES = new Set([
|
|
2488
2611
|
...CONFIG_ROUTES,
|
|
2612
|
+
...DELIVERY_ROUTES,
|
|
2489
2613
|
"/retrieve",
|
|
2490
2614
|
"/write",
|
|
2491
2615
|
"/list",
|
|
@@ -2513,7 +2637,7 @@ interface Admission {
|
|
|
2513
2637
|
async function handleRequest(request: Request, env: Env, admission: Admission): Promise<Response> {
|
|
2514
2638
|
const url = new URL(request.url);
|
|
2515
2639
|
if (url.pathname === "/healthz" && request.method === "GET")
|
|
2516
|
-
return json({ ok: true, build: BUILD, features: ["memory", "schedules", "runs", "config"] });
|
|
2640
|
+
return json({ ok: true, build: BUILD, features: ["memory", "schedules", "runs", "config", "delivery"] });
|
|
2517
2641
|
if (!admission.known) return json({ error: "not found" }, 404);
|
|
2518
2642
|
if (request.method !== "POST") return json({ error: "method not allowed" }, 405);
|
|
2519
2643
|
if (!admission.authorized) return json({ error: "unauthorized" }, 401);
|
|
@@ -2533,8 +2657,9 @@ async function handleRequest(request: Request, env: Env, admission: Admission):
|
|
|
2533
2657
|
return json({ error: "body must declare a numeric Content-Length" }, 411);
|
|
2534
2658
|
}
|
|
2535
2659
|
// The ledger's bulk routes carry a finished record, a transcript chunk, or
|
|
2536
|
-
// an event batch (32 × 64 KiB) and share /runs/put's fence
|
|
2537
|
-
|
|
2660
|
+
// an event batch (32 × 64 KiB) and share /runs/put's fence; a delivery
|
|
2661
|
+
// snapshot carries a whole window of pull request facts and has its own.
|
|
2662
|
+
const maxBodyBytes = bodyFenceFor(url.pathname);
|
|
2538
2663
|
if (Number(header) > maxBodyBytes) {
|
|
2539
2664
|
return json({ error: `body must be at most ${maxBodyBytes} bytes` }, 413);
|
|
2540
2665
|
}
|
|
@@ -2563,6 +2688,7 @@ async function handleRequest(request: Request, env: Env, admission: Admission):
|
|
|
2563
2688
|
}
|
|
2564
2689
|
if (url.pathname.startsWith("/runs/")) return handleRuns(url.pathname, body, env);
|
|
2565
2690
|
if (url.pathname.startsWith("/config/")) return handleConfig(url.pathname, body, env);
|
|
2691
|
+
if (url.pathname.startsWith("/delivery/")) return handleDelivery(url.pathname, body, env);
|
|
2566
2692
|
|
|
2567
2693
|
if (url.pathname === "/retrieve") {
|
|
2568
2694
|
const parsed = parseRetrieve(body);
|
|
@@ -31,7 +31,11 @@
|
|
|
31
31
|
// transcript a resumed run continues from (docs/reference/specs/run-history.md item
|
|
32
32
|
// 32). Kept apart from the history object so transcript bytes never queue
|
|
33
33
|
// behind an admission decision; cleared at finish.
|
|
34
|
-
{ "name": "RUN_TRANSCRIPTS", "class_name": "RunTranscriptDO" }
|
|
34
|
+
{ "name": "RUN_TRANSCRIPTS", "class_name": "RunTranscriptDO" },
|
|
35
|
+
// ONE DeliveryDO (named "delivery"): the delivery page's snapshot per
|
|
36
|
+
// repository — the merged pull requests' facts over the window, one row
|
|
37
|
+
// each, and when they were read (docs/reference/specs/delivery.md item 10).
|
|
38
|
+
{ "name": "DELIVERY", "class_name": "DeliveryDO" }
|
|
35
39
|
]
|
|
36
40
|
},
|
|
37
41
|
// SQLite-backed DOs (durable across restarts — AGENTS.md invariant 6).
|
|
@@ -45,6 +49,7 @@
|
|
|
45
49
|
// The friction ledger is read from run history (RunHistoryDO carries every
|
|
46
50
|
// run's diagnosis); the FrictionDO that once mirrored those diagnoses is
|
|
47
51
|
// retired with its rows — docs/reference/specs/self-improvement.md item 1.
|
|
48
|
-
{ "tag": "v7", "deleted_classes": ["FrictionDO"] }
|
|
52
|
+
{ "tag": "v7", "deleted_classes": ["FrictionDO"] },
|
|
53
|
+
{ "tag": "v8", "new_sqlite_classes": ["DeliveryDO"] }
|
|
49
54
|
]
|
|
50
55
|
}
|
|
@@ -340,9 +340,12 @@ function streamExec(
|
|
|
340
340
|
// command (137 when the follow-up SIGKILL had to) — annotate so the
|
|
341
341
|
// agent knows what happened and how to adapt.
|
|
342
342
|
const timedOut = exitCode === 124 || exitCode === 137;
|
|
343
|
+
// A job past the ceiling is detached with `setsid -f`: every /exec
|
|
344
|
+
// runs under `timeout … bash -c`, whose process group is reaped when
|
|
345
|
+
// the command returns, so a plain background job dies with it.
|
|
343
346
|
const note = timedOut
|
|
344
347
|
? `command timed out in the sandbox after ${execTimeoutSecs}s (pass the bash tool's timeoutMs for longer commands, max ${BASH_TIMEOUT_MAX_MS} ms); ` +
|
|
345
|
-
"re-run as smaller/faster steps or
|
|
348
|
+
"re-run as smaller/faster steps, or start it detached with `setsid -f sh -c '<command> > /tmp/job.log 2>&1'` and poll the log on later calls"
|
|
346
349
|
: "";
|
|
347
350
|
// The command as the Worker's own root (docs/reference/specs/tracing.md item 22).
|
|
348
351
|
execRoot(attemptStartedAt, traceparent).end(exitCode === 0 ? "ok" : "error", {
|