elanous 0.2.20 → 0.2.22
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/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/aBi6EyMtLsrl7J8eH4kF7/_buildManifest.js +1 -0
- package/apps/pwa/out/_next/static/chunks/088d8e8a.8069543d082bec12.js +160 -0
- package/apps/pwa/out/_next/static/chunks/1109.78a7a3288c0259d9.js +148 -0
- package/apps/pwa/out/_next/static/chunks/115.1c6690b8604f81c4.js +32 -0
- package/apps/pwa/out/_next/static/chunks/119fc678.6f591cdb84ca5791.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1262.76a3f08e67c5f816.js +309 -0
- package/apps/pwa/out/_next/static/chunks/1307-08b716476f1d50af.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1358d292.5c87f12cad6eaa91.js +122 -0
- package/apps/pwa/out/_next/static/chunks/1438.27a1a7b8f2308004.js +149 -0
- package/apps/pwa/out/_next/static/chunks/1442.02d85cd88f4c1eac.js +79 -0
- package/apps/pwa/out/_next/static/chunks/1501-1aad662d82ba43f7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1584.9e2dd53da6e6d4b1.js +24 -0
- package/apps/pwa/out/_next/static/chunks/1586.b989b0614afb77e6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1609.2ad355062870151f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1612-f6df0fc0eed7157b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1923.37f1d5fe7ebe3860.js +27 -0
- package/apps/pwa/out/_next/static/chunks/1948.5f35b39eef222a94.js +5 -0
- package/apps/pwa/out/_next/static/chunks/1993.3fd074a2a246234e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2140.d2daf9ee96e295d1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2212.0359851457473efc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/224.583e562365a52f74.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2328.0f37465646bafa7d.js +36 -0
- package/apps/pwa/out/_next/static/chunks/2372.bf71372184991937.js +286 -0
- package/apps/pwa/out/_next/static/chunks/{2489-ff55a35b202c0f94.js → 2489-d238d3e2eb5b2bf5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2549-a8515c86f9e8cb96.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2655.72cc6a97276c5acc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2743-ef6e8c3ced74cce5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2840-5458ad50c49cac6a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2856.f75d5baef7f49b74.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3344.0de4b0ec5a454b7a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/335.a13f339e97893437.js +94 -0
- package/apps/pwa/out/_next/static/chunks/3394.646348f34b2500be.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3443.6276909b53d72d53.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3495.abd4254d808bf2dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3522-1de1319d028ac89c.js +25 -0
- package/apps/pwa/out/_next/static/chunks/3721.ba5b82db0d9a5572.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3857-5985236d9307f676.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3919.9ff7dc25afefee33.js +74 -0
- package/apps/pwa/out/_next/static/chunks/3998.bd9a69d9b50e9bd2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4003.ab6db1dc266576c9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4216.e8ac94b9fe6b96ab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4327.c44dc2b55cb43ee5.js +34 -0
- package/apps/pwa/out/_next/static/chunks/4401.94257d497b6d26bc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4559.17ca2cdbaa8d414f.js +115 -0
- package/apps/pwa/out/_next/static/chunks/4588.ad3364cb7fb97ada.js +86 -0
- package/apps/pwa/out/_next/static/chunks/4706.97e734bd4c9816ca.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4982.6e44352f751b9a1b.js +77 -0
- package/apps/pwa/out/_next/static/chunks/5342.49c5c5a530e62b50.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5360-08a80abdf3a4da99.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5431.66c58ab1327ee0b7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5633-d6852385000738ef.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5717.bcfcb96e701b82e0.js +90 -0
- package/apps/pwa/out/_next/static/chunks/5755-30d102586789bf7f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5957.3f1a4012388dd962.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5977-5b9e8a45a5b0c823.js +1 -0
- package/apps/pwa/out/_next/static/chunks/602.9bf02ac8e9502598.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6020.3a1b347e2d2dfacc.js +8 -0
- package/apps/pwa/out/_next/static/chunks/{6158.af2e93b7adff709b.js → 6158.566c890adc06a459.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6375.fce1d174ba6d0324.js +64 -0
- package/apps/pwa/out/_next/static/chunks/6546.92a828aef441271f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/658.957fdb0a8c6c6c8e.js +287 -0
- package/apps/pwa/out/_next/static/chunks/6706.323590aabb8b1293.js +226 -0
- package/apps/pwa/out/_next/static/chunks/6747.b67947f293a4c02d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6767.8e6c5f6e744fcd9f.js +38 -0
- package/apps/pwa/out/_next/static/chunks/6868.000b24a3045c5574.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6946.bba74e9c96050f30.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7033.a558f1b2f6912a53.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7065.46029c26c53eac50.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7087.6fae577d09249bc1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7175-350f4ce2873bc038.js +1 -0
- package/apps/pwa/out/_next/static/chunks/722.de8d9801e0f6d414.js +41 -0
- package/apps/pwa/out/_next/static/chunks/7497.57981e9d7a75a52a.js +24 -0
- package/apps/pwa/out/_next/static/chunks/7630.2b9a68659053ff4e.js +193 -0
- package/apps/pwa/out/_next/static/chunks/7672.4af122ad892117c7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/771.6ab889a233e7dae7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7899.597af4a9996c907f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/79b78388.663188133449d707.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8096.f7da0776cfde6300.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8194.484f51e273d9abd2.js +217 -0
- package/apps/pwa/out/_next/static/chunks/8769.815ca69879f608b4.js +104 -0
- package/apps/pwa/out/_next/static/chunks/8857-aa1cc4ac90af4d40.js +1 -0
- package/apps/pwa/out/_next/static/chunks/88729267.9c6c000157c83f2f.js +62 -0
- package/apps/pwa/out/_next/static/chunks/8f835b4f.048eeb02299e3e12.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9068.5f2764fccf86c1b2.js +93 -0
- package/apps/pwa/out/_next/static/chunks/9247-55bcfbb0e8057f59.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9451.ebfb0dcc9c02250f.js +23 -0
- package/apps/pwa/out/_next/static/chunks/9559.e648369b1d57cf9a.js +62 -0
- package/apps/pwa/out/_next/static/chunks/9832.2ab2e818013574c7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/a9f2b54d-40c16bd0efdb04b8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/{page-c855c24de7db74fe.js → page-88459e0903da2803.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/{page-85b316bb4235980b.js → page-d85c43f46f58716b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/board/{page-9b2b26a33cb2cd42.js → page-4e645600579ae952.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/{page-c9955fde67b1bcb5.js → page-87edbfd19117823b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-7f0c2b7801ac6a54.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-bf1f030a9d1adffd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/{page-4ba4abe096b6c2a8.js → page-cbaf66b1e1804adf.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/{page-575d4a8b4f7becb2.js → page-80ed511e02c81412.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/control/{page-f5d56ff5f45ad164.js → page-9f5610caaa06178c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/{page-2260e9eef0357421.js → page-ec8f3575e339de74.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-86d753e460f1a989.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-4166a7d51cf0a57d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/{page-466bf0ee16ad1432.js → page-2a19c5cd3b562580.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/field/{page-a23bc71713bcc08f.js → page-b6a09cde2e07521a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-f7eae1518ca0c353.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-456a8573ad811381.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-8462d6a543cbb2d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-2974cdfb87c0f9c9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-f927ffa25f3c86d1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/{page-35bfec2e631d3eae.js → page-abd86cd832aaa011.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-79daf68f6256adaa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/{page-f9ccb1b1adbea14d.js → page-8c3f168fc3f91939.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-ec102c9b8b691e37.js → page-786fb4504d0f2fa9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-75209f14597dcb8f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-bf30affe3a85af7e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-1187a44b7515434b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-3d0910185a66ed54.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-f401ee1dd5a26e25.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-5dfe7604fd842784.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-76cf838050a8d681.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/{page-db03ae3589a81c9e.js → page-7ec8e289b4c14df6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/{page-4a6463b97f0ad94f.js → page-8c8ac17d52be2a79.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/{page-75bffecc9aa1004e.js → page-d359ab048d63a9d9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-b8b345c880bf78d1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/{page-31d5b875760bb62d.js → page-f151cc10ad026940.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-9875f103057da433.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-9789328af9a9aa62.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/{page-46d5201d2207a511.js → page-bf495a1e284f4e00.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-a263d94bca4be22a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-3962eab8ec58d16e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/{page-cf0a4b4abead71ea.js → page-9abcfac07e02a542.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-bee49f927c333abb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-bac2d56dcb02d955.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-937cbcc13176295c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-d09495594f7f480d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/{page-0acc8e198f7b0dfb.js → page-69cb93d1a2e57e0e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/{page-34882c84f84021c5.js → page-72ec543928d67c3e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-82906eeda0186a7b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/d70879db.c66c56a95a91efc6.js +66 -0
- package/apps/pwa/out/_next/static/chunks/f8626309.a4e5d362b1d55e59.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-f2b4016b9b981bc8.js +1 -0
- package/apps/pwa/out/_next/static/css/{d3427996da11e480.css → b9d8151e48998417.css} +1 -1
- package/apps/pwa/out/_next/static/css/f2bd5257e6af88d8.css +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +14 -14
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +14 -14
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +14 -14
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +14 -14
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +14 -14
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +14 -14
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +14 -14
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +14 -14
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +14 -14
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +14 -14
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +14 -14
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +15 -15
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +14 -14
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +14 -14
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +14 -14
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +15 -15
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +14 -14
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +14 -14
- package/apps/pwa/out/live-run/index.html +1 -0
- package/apps/pwa/out/live-run/index.txt +35 -0
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +14 -14
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +14 -14
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +14 -14
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +14 -14
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +14 -14
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +14 -14
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +14 -14
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +14 -14
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +14 -14
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +15 -15
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +14 -14
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +14 -14
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +14 -14
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +14 -14
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +14 -14
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +14 -14
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +14 -14
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +14 -14
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +14 -14
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +14 -14
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +14 -14
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +14 -14
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +14 -14
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +14 -14
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +14 -14
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +14 -14
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +14 -14
- package/graphs/catalog/catalog.yaml +1 -1
- package/graphs/drafts/recipes.yaml +6 -6
- package/graphs/implement-loop.yaml +277 -5
- package/graphs/test-diet/recipes.yaml +3 -0
- package/graphs/test-diet/test-diet.yaml +3 -1
- package/package.json +1 -1
- package/scripts/coord-channel-watch.sh +31 -4
- package/scripts/docs-lint.ts +4 -1
- package/scripts/f-session-monitor.ts +69 -0
- package/scripts/hq/standby-snapshot.ts +7 -3
- package/scripts/knowledge-compress.ts +11 -0
- package/scripts/marketing/generate-ax-brief.ts +18 -1
- package/scripts/measure-nl-routing-corpus.ts +11 -3
- package/scripts/nightly-docops.ts +90 -3
- package/scripts/release-loop/gate-node.ts +5 -5
- package/scripts/release-loop/shard-plan.ts +50 -5
- package/scripts/research-coo-admin-dates.ts +39 -0
- package/scripts/rhythm/daily.ts +2 -1
- package/scripts/skills/public-check.ts +7 -2
- package/scripts/smart-merge/resync-shadow.ts +5 -3
- package/scripts/test-diet/lib.ts +81 -1
- package/scripts/test-diet/node.ts +48 -2
- package/scripts/verify-coo-admin-evidence.ts +83 -0
- package/src/acp/client.ts +4 -2
- package/src/agent/run-context.ts +4 -0
- package/src/agent-env/profile.ts +25 -5
- package/src/agent-mission/driver.ts +26 -12
- package/src/agent-mission/supervisor-metrics.ts +17 -2
- package/src/agent-substrate/acp-reviewer.ts +12 -5
- package/src/agent-substrate/pr-reviewer.ts +11 -4
- package/src/agent-substrate/review-intent.ts +102 -3
- package/src/autopilot/build/llm-conflict-merge.ts +22 -8
- package/src/autopilot/pr-manager.ts +18 -8
- package/src/away/release-watch.ts +47 -8
- package/src/briefing/brief-items.ts +104 -11
- package/src/browser-cdp/client.ts +10 -5
- package/src/chat/index.ts +1 -0
- package/src/cli/brief-cli.ts +20 -2
- package/src/cli/config-classify.ts +83 -0
- package/src/cli/control-cli.ts +14 -0
- package/src/cli/decisions-cli.ts +26 -16
- package/src/cli/logs-model-input.ts +1 -1
- package/src/cli/ops-cli.ts +11 -0
- package/src/cli/ops-overview-cli.ts +50 -0
- package/src/cli/pod-cli.ts +1 -0
- package/src/cli/pr-cli.ts +65 -8
- package/src/cli/release-cli.ts +21 -4
- package/src/cli/tasks-cli.ts +214 -1
- package/src/connectors/types.ts +6 -6
- package/src/context-bus/context-now-surfaces.ts +18 -0
- package/src/context-bus/coord-events.ts +32 -4
- package/src/context-bus/long-term-memory.ts +23 -6
- package/src/context-bus/nightly-condense.ts +169 -21
- package/src/control/control-status.ts +87 -0
- package/src/control-plane/light-member.ts +5 -3
- package/src/control-plane/member.ts +172 -7
- package/src/core-turn/run-goal-loop.ts +22 -1
- package/src/dashboard/index.ts +40 -4
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +9 -0
- package/src/decisions/decision-cards.ts +20 -1
- package/src/decisions/decision-ledger.ts +11 -8
- package/src/decisions/web-push-decision-cards.ts +19 -3
- package/src/discord-self-message.ts +2 -2
- package/src/domains/coo-admin-dates.evidence.json +876 -0
- package/src/domains/coo-admin-tool.ts +48 -14
- package/src/domains/ops-status.ts +53 -0
- package/src/domains/outbound-alert.ts +24 -1
- package/src/esc-abort-gate.ts +3 -1
- package/src/exec-requests/planner.ts +6 -0
- package/src/graph-kinds/registry.ts +6 -6
- package/src/graph-runner/graph-cli.ts +91 -2
- package/src/graph-runner/graph-run-api.ts +20 -0
- package/src/graph-runner/graph-tick.ts +73 -12
- package/src/graph-runner/runner.ts +43 -11
- package/src/graph-unify/wf-to-graph.ts +79 -0
- package/src/graph-wizard/archetypes.ts +88 -0
- package/src/graph-wizard/generate.ts +577 -0
- package/src/graph-wizard/saved-steps.ts +120 -0
- package/src/graph-wizard/steps.ts +206 -0
- package/src/harness/harness-cli-command.ts +186 -32
- package/src/harness/harness-queue.ts +58 -14
- package/src/harness/launch-advice.ts +23 -0
- package/src/index.ts +43 -11
- package/src/intake-plane/digest.ts +18 -11
- package/src/knowledge/conclusion-compress.ts +93 -0
- package/src/knowledge/know-find.ts +9 -2
- package/src/knowledge/query.ts +20 -0
- package/src/llm.ts +26 -16
- package/src/loops/neighbor-runtime.ts +88 -0
- package/src/loops/orchestrator/author-depth.ts +29 -11
- package/src/loops/orchestrator/overlap.ts +7 -1
- package/src/loops/orchestrator/resync-shadow.ts +1 -1
- package/src/loops/orchestrator/tick.ts +35 -2
- package/src/loops/orchestrator/traffic.ts +2 -0
- package/src/loops/registry.ts +5 -0
- package/src/market/publish.ts +17 -1
- package/src/maturity/feature-maturity.ts +4 -2
- package/src/mss/logging/redaction.ts +17 -0
- package/src/nexus/api/draft-metrics.ts +128 -0
- package/src/nexus/api/graph-peer-edit.ts +77 -0
- package/src/nexus/api/graph-wizard-api.ts +61 -0
- package/src/nexus/api/graphs-api.ts +193 -17
- package/src/nexus/api/harness-traversal.ts +205 -0
- package/src/nexus/api/http-server.ts +122 -6
- package/src/nexus/api/plugins-market.ts +24 -0
- package/src/nexus/index.ts +3 -2
- package/src/nexus/outbound/router.ts +28 -8
- package/src/oauth/claude-pty-maturity.ts +24 -0
- package/src/oauth/fallback-chain.ts +27 -14
- package/src/onboarding/first-run.ts +3 -0
- package/src/ops/overview-collect.ts +345 -0
- package/src/ops/overview-seat-era.ts +90 -0
- package/src/ops/overview.ts +223 -0
- package/src/plugins/maker/market-bundle.ts +9 -0
- package/src/plugins/maker/plugin-maker.ts +9 -3
- package/src/plugins/maker/wizard-generate.ts +73 -9
- package/src/policy/llm-policy.ts +11 -6
- package/src/release-loop/checklist-board.ts +27 -0
- package/src/release-loop/checklist.ts +38 -0
- package/src/release-loop/gate-shards.ts +7 -2
- package/src/seat-address/seat-address.ts +1 -0
- package/src/seat-loop/seat-loop.ts +174 -20
- package/src/seat-loop/seat-report.ts +29 -1
- package/src/self-dev/ask-launch-flow.ts +4 -2
- package/src/self-dev/ask-launch-io.ts +3 -1
- package/src/self-dev/dev-cli.ts +90 -8
- package/src/self-dev/dev-pipeline.ts +20 -1
- package/src/self-dev/draft-sweep.ts +45 -8
- package/src/self-dev/graph-journey-nodes.ts +157 -0
- package/src/self-dev/graph-journey-route.ts +105 -0
- package/src/self-dev/launch-preflight.ts +43 -3
- package/src/self-dev/orchestrate.ts +3 -0
- package/src/self-dev/release-path-guard.ts +7 -4
- package/src/self-dev/review-provider-fallback.ts +83 -0
- package/src/self-dev/run-supervisor.ts +5 -1
- package/src/self-implement/frozen-merges.ts +23 -0
- package/src/self-implement/goal-author.ts +14 -0
- package/src/self-implement/harness-policy-gates.ts +7 -5
- package/src/self-implement/heal-intake.ts +3 -0
- package/src/self-implement/host-regate.ts +28 -14
- package/src/self-implement/l8-merge-queue.ts +80 -8
- package/src/self-implement/orchestrator.ts +84 -28
- package/src/self-implement/seams.ts +8 -3
- package/src/self-implement/self-implement-cli.ts +4 -0
- package/src/self-implement/self-implement-runtime.ts +12 -0
- package/src/session-runtime/index.ts +5 -3
- package/src/shell-env-bootstrap.ts +35 -6
- package/src/steward/triage.ts +25 -8
- package/src/storage/file-lock.ts +33 -4
- package/src/task-agent/card-evidence.ts +6 -0
- package/src/task-agent/completion-evidence.ts +31 -3
- package/src/task-agent/cover.ts +61 -0
- package/src/task-agent/live-moves.ts +126 -3
- package/src/task-agent/parent-host.ts +315 -0
- package/src/task-agent/shadow.ts +19 -4
- package/src/task-agent/task-hand.ts +11 -2
- package/src/task-orchestrator/surfaces/pod-command-job.ts +41 -6
- package/src/task-orchestrator/surfaces/pod-gate-deps.ts +123 -0
- package/src/task-orchestrator/surfaces/pod-pool.ts +138 -15
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +39 -6
- package/src/task-orchestrator/surfaces/self-implement.ts +7 -0
- package/src/telegram-commands.ts +8 -0
- package/src/telegram-project-command.ts +6 -0
- package/src/telegram.ts +2 -2
- package/src/tool-runtime/browser-runtime.ts +87 -3
- package/src/tool-runtime/index.ts +1 -0
- package/src/typecheck-ratchet.ts +2 -1
- package/src/user-config.ts +55 -8
- package/src/version/packed-revision.json +1 -1
- package/src/workflow-runtime/executor.ts +24 -2
- package/src/workflow-runtime/triggers/registry.ts +27 -0
- package/src/workflow-runtime/triggers/schedule-source.ts +30 -3
- package/apps/pwa/out/_next/static/Bam1YziK2iH9bN4K0utGk/_buildManifest.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1307-77fad80cf54477c6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1612-f60c0c93ec773f81.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1844-9ec4b1d12f6e80eb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1866-e7a6999f25548b30.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1948.15f356b15a625597.js +0 -5
- package/apps/pwa/out/_next/static/chunks/2116-6429c188eb846ab8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/224-e7be8f762fe74986.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2549-89c518a4c8ed4d00.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2957-96ffab3d521fb08f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3857-995ea9f5ef33d71e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5360-be1f1d8f9fcc9755.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5755-ea7ed88eb956f47b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5977-94ed6f78e9814b2b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7748-6e51bfe927019f5c.js +0 -25
- package/apps/pwa/out/_next/static/chunks/9247-c1753a059e7bac08.js +0 -1
- package/apps/pwa/out/_next/static/chunks/a9f2b54d-33c0689b70ed8cf3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-7a852956c74015a3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-c5a5c621be0e04ae.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-7c058069c5e7fa63.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-dc5da0b8a2edb8a4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-ed4a6f799f005d09.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-9cd565005b93aca6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-55f0f40c6db95f15.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-474cb5888ea0e8f3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-9ca21f9ad3208a61.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-a9c2cfa8dda922a5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-6da35144878feb6d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-f6055495e9ed7ea8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-25204694fa9984a5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-a60e035f151d84d3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-189c587f36874538.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-c56634bde705a65d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-a8d2fe0c669e0de4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-c26fa10aac6c21c4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-68793c6e10331d66.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-d81c07a7b4f618ae.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-be1c4e8697f22360.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-a4717e2c4bf7a28f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-0fd895fab9b62c1b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-8b6c1454a8e8f306.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-c6e4364d9de8f717.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-0506a1e0e4bdb2f5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-c260571513bf43c2.js +0 -1
- package/apps/pwa/out/_next/static/css/c23d959d3ee15e57.css +0 -1
- /package/apps/pwa/out/_next/static/{Bam1YziK2iH9bN4K0utGk → aBi6EyMtLsrl7J8eH4kF7}/_ssgManifest.js +0 -0
- /package/skills/project-onboarding/{skill.md → SKILL.md} +0 -0
package/src/typecheck-ratchet.ts
CHANGED
|
@@ -8,9 +8,10 @@ export const TYPECHECK_GATE_CONFIG = 'tsconfig.gate.json';
|
|
|
8
8
|
* 🩸 2026-09-23: 🅢·🅕·🅣 세 창이 같은 날 `heap out of memory` 로 착지가 막혔다. 📏 통과한 판의 최대 RSS **5.0GB**
|
|
9
9
|
* (128GB 기계 · 부하와 무관하게 재현 — 🅕 「로드 ~7 로 내려간 뒤에도 났다」). 우회 12288 로 🅢 착지 19건 PASS.
|
|
10
10
|
* ⇒ 부하 탓이 아니라 «자란 프로젝트»다. 값을 사람이 기억해 붙이는 우회를 도구가 스스로 갖는다.
|
|
11
|
+
* 🩸 2026-10-08: 12288 로도 호스트 재게이트·`pr land` 가 OOM 으로 «못 잼»(#25177 · #25248 · TC 수확 4건 — 전부 20480 에서 PASS) → 20480.
|
|
11
12
|
* ⚠️ 호출자가 이미 `--max-old-space-size` 를 줬으면 «그것을» 존중한다(덮지 않는다).
|
|
12
13
|
*/
|
|
13
|
-
export const TSC_HEAP_MB =
|
|
14
|
+
export const TSC_HEAP_MB = 20480;
|
|
14
15
|
export function tscEnv(base: NodeJS.ProcessEnv = process.env): NodeJS.ProcessEnv {
|
|
15
16
|
const cur = base.NODE_OPTIONS ?? '';
|
|
16
17
|
if (/--max-old-space-size[= ]/.test(cur)) return base;
|
package/src/user-config.ts
CHANGED
|
@@ -214,6 +214,8 @@ export interface LLMConfig {
|
|
|
214
214
|
* `within-quota`(한도 안에서만 · 전부 차면 멈춤) · `fallback`(한도 안 ⊕ 폴백 체인 · 기본) · `credits`(크레딧까지).
|
|
215
215
|
* 회전·Pod 배분·폴백·매시 한도 알림이 «이 한 값»을 같이 읽는다. 없으면 옛 `codexCreditsAllowed` 를 읽는다. */
|
|
216
216
|
codexQuotaPolicy?: 'within-quota' | 'fallback' | 'credits';
|
|
217
|
+
/** Grok weekly launch usage ceiling (percent); defaults to 80. */
|
|
218
|
+
grokWeeklyCapPct?: number;
|
|
217
219
|
/** ⭐⭐ codex 가 «소진된 뒤» 갈 곳을 «순서»로 정한다 (대표 2026-08-13).
|
|
218
220
|
*
|
|
219
221
|
* 값: `['codex-rotate', 'grok']` — 아는 칸은 그 둘뿐이고, 모르는 이름은 버린다(관측에 남는다).
|
|
@@ -431,7 +433,7 @@ export interface RotationEntry {
|
|
|
431
433
|
label?: string;
|
|
432
434
|
}
|
|
433
435
|
|
|
434
|
-
const LLM_DEFAULTS: LLMConfig = { provider: 'auto' };
|
|
436
|
+
const LLM_DEFAULTS: LLMConfig = { provider: 'auto', grokWeeklyCapPct: 80 };
|
|
435
437
|
|
|
436
438
|
// ── Skills ───────────────────────────────────────────────────────────
|
|
437
439
|
|
|
@@ -1149,6 +1151,8 @@ export interface SelfImplementToolConfig {
|
|
|
1149
1151
|
clarificationEscalation: SelfImplementClarificationEscalationConfig;
|
|
1150
1152
|
/** RUN-TTL: hours an open self-impl PR may go without a commit before the draft sweep asks for a rebase. Absent or invalid = 24. */
|
|
1151
1153
|
runTtlHours?: number;
|
|
1154
|
+
/** DRAFT-CLEANUP-FIX: per-tick close cap of `harness drafts sweep`. Raw value — `resolveDraftSweepCloseCap` validates (1–100, default 10, warns). */
|
|
1155
|
+
draftSweepCloseCap?: unknown;
|
|
1152
1156
|
/** RUN-TTL sweep step: `shadow` (default) only logs; `live` sends the resync memo / adds `elanous:needs-rebase`. Cap absent or invalid = 30. */
|
|
1153
1157
|
runTtl?: { mode: 'shadow' | 'live'; cap?: number };
|
|
1154
1158
|
/** STOP-AUTOHEAL: `shadow` (default) only records what the stop dispatcher would do (`event='autoheal'`); `live` runs the injected heal seams once per run per stop class. */
|
|
@@ -2684,6 +2688,8 @@ function parseToolsConfig(raw: unknown): ToolsConfig {
|
|
|
2684
2688
|
const childLlm = parseChildLlmPreference(selfImplRaw.childLlm);
|
|
2685
2689
|
const runTtlHoursRaw = selfImplRaw.runTtlHours;
|
|
2686
2690
|
const runTtlHours = typeof runTtlHoursRaw === 'number' && Number.isFinite(runTtlHoursRaw) && runTtlHoursRaw > 0 ? runTtlHoursRaw : undefined;
|
|
2691
|
+
// Kept raw: the sweep validates and warns, so an out-of-range value is visible rather than silently dropped.
|
|
2692
|
+
const draftSweepCloseCap = selfImplRaw.draftSweepCloseCap;
|
|
2687
2693
|
const runTtlRaw = selfImplRaw.runTtl && typeof selfImplRaw.runTtl === 'object' && !Array.isArray(selfImplRaw.runTtl)
|
|
2688
2694
|
? selfImplRaw.runTtl as Record<string, unknown> : undefined;
|
|
2689
2695
|
const runTtl = runTtlRaw ? {
|
|
@@ -2729,7 +2735,7 @@ function parseToolsConfig(raw: unknown): ToolsConfig {
|
|
|
2729
2735
|
runDevHarness,
|
|
2730
2736
|
selfOrchestrate,
|
|
2731
2737
|
nativeStructure,
|
|
2732
|
-
selfImplement: { worktreeRoot, childInstanceMode, prApprovalDelivery, observeOnly, goalRecordInDoc, goalAuthorPersistentGrounding, fabricDecompose, fabricDecomposeAutoPathThreshold, autoOpenPr, draftOnStop, salvageRetention, autoStop, autoAssist, screenStallTermination, reworkBudget, decompositionShadow, clarificationEscalation, ...(childLlm ? { childLlm } : {}), ...(runTtlHours !== undefined ? { runTtlHours } : {}), ...(runTtl ? { runTtl } : {}), ...(autoheal ? { autoheal } : {}) },
|
|
2738
|
+
selfImplement: { worktreeRoot, childInstanceMode, prApprovalDelivery, observeOnly, goalRecordInDoc, goalAuthorPersistentGrounding, fabricDecompose, fabricDecomposeAutoPathThreshold, autoOpenPr, draftOnStop, salvageRetention, autoStop, autoAssist, screenStallTermination, reworkBudget, decompositionShadow, clarificationEscalation, ...(childLlm ? { childLlm } : {}), ...(runTtlHours !== undefined ? { runTtlHours } : {}), ...(draftSweepCloseCap !== undefined ? { draftSweepCloseCap } : {}), ...(runTtl ? { runTtl } : {}), ...(autoheal ? { autoheal } : {}) },
|
|
2733
2739
|
};
|
|
2734
2740
|
}
|
|
2735
2741
|
|
|
@@ -3311,8 +3317,22 @@ export interface RoleLlmSpec {
|
|
|
3311
3317
|
model?: string;
|
|
3312
3318
|
}
|
|
3313
3319
|
|
|
3314
|
-
/**
|
|
3315
|
-
export
|
|
3320
|
+
/** Reviewer-only ACP subscription selection; it is not a streaming LLM provider. */
|
|
3321
|
+
export interface SubscriptionReviewerSpec {
|
|
3322
|
+
provider: 'claude-acp';
|
|
3323
|
+
executor?: 'cct' | 'cc';
|
|
3324
|
+
}
|
|
3325
|
+
|
|
3326
|
+
export function parseSubscriptionReviewerSpec(raw: unknown): SubscriptionReviewerSpec | undefined {
|
|
3327
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return undefined;
|
|
3328
|
+
const v = raw as Record<string, unknown>;
|
|
3329
|
+
if (v.provider !== 'claude-acp' || (v.executor !== undefined && v.executor !== 'cct' && v.executor !== 'cc')
|
|
3330
|
+
|| Object.keys(v).some(k => k !== 'provider' && k !== 'executor')) return undefined;
|
|
3331
|
+
return { provider: 'claude-acp', ...(v.executor ? { executor: v.executor as 'cct' | 'cc' } : {}) };
|
|
3332
|
+
}
|
|
3333
|
+
|
|
3334
|
+
/** 역할별 LLM 선택(sparse). `reviewer` is the opt-in harness ACP lane. */
|
|
3335
|
+
export type RoleLlmConfig = Partial<Record<ModelRole, RoleLlmSpec>> & { reviewer?: SubscriptionReviewerSpec };
|
|
3316
3336
|
|
|
3317
3337
|
export type ModelResolutionSource = 'config' | 'tier' | 'environment' | 'default';
|
|
3318
3338
|
|
|
@@ -3603,6 +3623,8 @@ export interface SeatLoopConfig {
|
|
|
3603
3623
|
repeatStop?: number;
|
|
3604
3624
|
/** OP-LOOP-DECIDE: OP seat filters open decision cards (repeat-stop → b · harness scope → b unless money/security/secret/public paths). shadow records only; live decides/routes. Absent = shadow. */
|
|
3605
3625
|
opDecide?: { mode: 'shadow' | 'live' };
|
|
3626
|
+
/** IDLE-LADDER: when a seat's own queue is empty the loop picks idle work (landed-yellow rebuttal → next-release authoring → standing work → borrow an unlaunched neighbor cell). Absent = off (only the empty-queue minutes metric is recorded); 'shadow' records the pick only; 'live' lets live-safe/on launch it. */
|
|
3627
|
+
idleLadder?: 'shadow' | 'live';
|
|
3606
3628
|
}
|
|
3607
3629
|
|
|
3608
3630
|
export type EventSeat = 'OP' | 'TC' | 'MK' | 'UX';
|
|
@@ -3743,7 +3765,7 @@ export interface UserConfig {
|
|
|
3743
3765
|
guardian?: { mode?: 'shadow' | 'live' };
|
|
3744
3766
|
/** TA-JUDGE-LIVE-SAFE: task-agent judge moves executed for real. Only `review` · `propose-green` are honoured
|
|
3745
3767
|
* (`src/task-agent/live-moves.ts` drops anything else with a warning). Absent = env ELANOUS_TASK_AGENT_LIVE_MOVES, else none (pure shadow). */
|
|
3746
|
-
taskAgent?: { liveMoves?: string[] };
|
|
3768
|
+
taskAgent?: { liveMoves?: string[]; parentHost?: { host?: string; cwd?: string; elanous?: string; configDir?: string; podPool?: string } };
|
|
3747
3769
|
events?: EventsConfig;
|
|
3748
3770
|
/** GATE-REMOTE — see GateRemoteConfig. Absent = defaults (auto on · node-b · load 20 · cap 2). */
|
|
3749
3771
|
gateRemote?: GateRemoteConfig;
|
|
@@ -4022,21 +4044,37 @@ function parseAutoReviewConfig(raw: unknown): AutoReviewConfig | undefined {
|
|
|
4022
4044
|
}
|
|
4023
4045
|
|
|
4024
4046
|
/** Keeps `taskAgent.liveMoves` as raw strings — the allow-list (and the unknown-entry warning) lives in the task agent. */
|
|
4047
|
+
/** HARNESS-PARENT-ON-MSB1 — `taskAgent.parentHost` (기본 없음 = 끔). 문자열 칸만 받는다. */
|
|
4048
|
+
function parseTaskAgentParentHost(raw: unknown): NonNullable<UserConfig['taskAgent']>['parentHost'] {
|
|
4049
|
+
if (raw === undefined) return undefined;
|
|
4050
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
4051
|
+
warnUserConfigDrop('taskAgent.parentHost', '객체가 아니다 — 버림(로컬 발사)');
|
|
4052
|
+
return undefined;
|
|
4053
|
+
}
|
|
4054
|
+
const out: Record<string, string> = {};
|
|
4055
|
+
for (const key of ['host', 'cwd', 'elanous', 'configDir', 'podPool'] as const) {
|
|
4056
|
+
const value = (raw as Record<string, unknown>)[key];
|
|
4057
|
+
if (typeof value === 'string' && value.trim()) out[key] = value.trim();
|
|
4058
|
+
}
|
|
4059
|
+
return out;
|
|
4060
|
+
}
|
|
4061
|
+
|
|
4025
4062
|
function parseTaskAgentConfig(raw: unknown): UserConfig['taskAgent'] {
|
|
4026
4063
|
if (raw === undefined) return undefined;
|
|
4027
4064
|
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
4028
4065
|
warnUserConfigDrop('taskAgent', '섹션이 객체가 아니다 — 버림');
|
|
4029
4066
|
return undefined;
|
|
4030
4067
|
}
|
|
4068
|
+
const parentHost = parseTaskAgentParentHost((raw as Record<string, unknown>).parentHost);
|
|
4031
4069
|
const liveMoves = (raw as Record<string, unknown>).liveMoves;
|
|
4032
|
-
if (liveMoves === undefined) return undefined;
|
|
4070
|
+
if (liveMoves === undefined) return parentHost ? { parentHost } : undefined;
|
|
4033
4071
|
// 설정이 «있으면» 환경 변수로 내려가지 않는다 — 배열이 아니면 빈 목록(fail-closed), 문자열 밖 항목은 글자로 바꿔 넘겨
|
|
4034
4072
|
// 실행부가 «모르는 항목»으로 경고하고 버리게 한다(유효한 항목은 산다).
|
|
4035
4073
|
if (!Array.isArray(liveMoves)) {
|
|
4036
4074
|
warnUserConfigDrop('taskAgent.liveMoves', '배열이 아니다 — 빈 목록(실행 0)');
|
|
4037
|
-
return { liveMoves: [] };
|
|
4075
|
+
return { liveMoves: [], ...(parentHost ? { parentHost } : {}) };
|
|
4038
4076
|
}
|
|
4039
|
-
return { liveMoves: liveMoves.map((entry) => typeof entry === 'string' ? entry : JSON.stringify(entry) ?? String(entry)) };
|
|
4077
|
+
return { liveMoves: liveMoves.map((entry) => typeof entry === 'string' ? entry : JSON.stringify(entry) ?? String(entry)), ...(parentHost ? { parentHost } : {}) };
|
|
4040
4078
|
}
|
|
4041
4079
|
|
|
4042
4080
|
function parseGuardianConfig(raw: unknown): UserConfig['guardian'] {
|
|
@@ -4118,6 +4156,10 @@ function parseRoleLlmConfig(raw: unknown): RoleLlmConfig | undefined {
|
|
|
4118
4156
|
if (entry.ok) parsed[role] = entry.spec;
|
|
4119
4157
|
else dropped.push({ role, reason: entry.reason });
|
|
4120
4158
|
}
|
|
4159
|
+
if (values.reviewer !== undefined) {
|
|
4160
|
+
parsed.reviewer = parseSubscriptionReviewerSpec(values.reviewer);
|
|
4161
|
+
if (!parsed.reviewer) warnUserConfigDrop('roleLlm.reviewer', 'claude-acp reviewer 설정이 유효하지 않아 무시');
|
|
4162
|
+
}
|
|
4121
4163
|
// ⛔ config 로딩은 «나머지를 살리려고» 잘못된 칸을 버리는데, 그 사실이 어디에도 안 남으면
|
|
4122
4164
|
// 사용자는 「왜 내 설정이 안 먹지」를 영영 못 푼다(CLI 는 이름을 대며 거부하는데 여기만 조용했다).
|
|
4123
4165
|
// ⇒ 버린 것을 «이름과 이유»로 남긴다. 로딩 자체는 계속한다.
|
|
@@ -4731,6 +4773,7 @@ function parseSeatLoopsConfig(input: unknown): SeatLoopConfig {
|
|
|
4731
4773
|
const mode = (raw as Record<string, unknown>).mode;
|
|
4732
4774
|
return mode === 'shadow' || mode === 'live' ? { opDecide: { mode } } : {};
|
|
4733
4775
|
})(),
|
|
4776
|
+
...(values.idleLadder === 'shadow' || values.idleLadder === 'live' ? { idleLadder: values.idleLadder } : {}),
|
|
4734
4777
|
};
|
|
4735
4778
|
}
|
|
4736
4779
|
|
|
@@ -5098,6 +5141,8 @@ export function buildUserConfig(path: string = defaultPath()): UserConfig {
|
|
|
5098
5141
|
// ⛔ 같은 모양(문자열 배열)이라 아래 fallbackChain 과 «같은 자»를 쓴다.
|
|
5099
5142
|
codexCreditsAllowed: llm.codexCreditsAllowed === true ? true : undefined,
|
|
5100
5143
|
codexQuotaPolicy: isCodexQuotaPolicy(llm.codexQuotaPolicy) ? llm.codexQuotaPolicy : undefined,
|
|
5144
|
+
grokWeeklyCapPct: typeof llm.grokWeeklyCapPct === 'number' && Number.isFinite(llm.grokWeeklyCapPct)
|
|
5145
|
+
&& llm.grokWeeklyCapPct >= 0 && llm.grokWeeklyCapPct <= 100 ? llm.grokWeeklyCapPct : LLM_DEFAULTS.grokWeeklyCapPct,
|
|
5101
5146
|
codexAccountOrder: Array.isArray(llm.codexAccountOrder)
|
|
5102
5147
|
? llm.codexAccountOrder.filter((v: unknown): v is string => typeof v === 'string' && v.length > 0)
|
|
5103
5148
|
: undefined,
|
|
@@ -6312,6 +6357,7 @@ export function saveUserConfig(
|
|
|
6312
6357
|
...(cfg.loops.seat.stall ? { stall: cfg.loops.seat.stall } : {}),
|
|
6313
6358
|
...(cfg.loops.seat.repeatStop === undefined ? {} : { repeatStop: cfg.loops.seat.repeatStop }),
|
|
6314
6359
|
...(cfg.loops.seat.opDecide ? { opDecide: cfg.loops.seat.opDecide } : {}),
|
|
6360
|
+
...(cfg.loops.seat.idleLadder ? { idleLadder: cfg.loops.seat.idleLadder } : {}),
|
|
6315
6361
|
} } : {}),
|
|
6316
6362
|
} } : {}),
|
|
6317
6363
|
...(cfg.autopilot ? { autopilot: {
|
|
@@ -6367,6 +6413,7 @@ export function saveUserConfig(
|
|
|
6367
6413
|
// ★ 2026-09-28: 타입·파서에만 넣고 이 whitelist 를 빠뜨려 `config set llm.codexCreditsAllowed true` 가 «직렬화 드롭» 됐다(#21375 직후 운영 실측).
|
|
6368
6414
|
codexCreditsAllowed: cfg.llm.codexCreditsAllowed,
|
|
6369
6415
|
codexQuotaPolicy: cfg.llm.codexQuotaPolicy,
|
|
6416
|
+
grokWeeklyCapPct: cfg.llm.grokWeeklyCapPct,
|
|
6370
6417
|
fallbackChain: cfg.llm.fallbackChain,
|
|
6371
6418
|
reviewFallbackModels: cfg.llm.reviewFallbackModels,
|
|
6372
6419
|
codexStore: cfg.llm.codexStore,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"commit":"
|
|
1
|
+
{"commit":"7f281a6aa9a90d9da2b5f3e9a22e2347b0c19bff"}
|
|
@@ -41,6 +41,9 @@ import {
|
|
|
41
41
|
import { evaluateWhen } from './variables.js';
|
|
42
42
|
import { readWorkflowPin } from './pin-data.js';
|
|
43
43
|
import { WORKFLOW_CORE_KINDS } from '../graph-kinds/registry.js';
|
|
44
|
+
import { workflowToGraph, walkWorkflowGraph } from '../graph-unify/wf-to-graph.js';
|
|
45
|
+
import { debug } from '../debug/log.js';
|
|
46
|
+
import { getUserConfig } from '../user-config.js';
|
|
44
47
|
import { checkModelRequires } from '../registry/resolver.js';
|
|
45
48
|
import { validateJudgmentContract, validateJudgmentVerdict } from './judgment-contract.js';
|
|
46
49
|
import { signalBus } from '../signal-bus/index.js';
|
|
@@ -107,8 +110,25 @@ export async function* runWorkflow(
|
|
|
107
110
|
yield { type: 'workflow_start', workflow: opts.workflow.name, runId, mode };
|
|
108
111
|
|
|
109
112
|
let order: string[];
|
|
113
|
+
let graphRecipes: Readonly<Record<string, DagNode>> | undefined;
|
|
110
114
|
try {
|
|
111
|
-
|
|
115
|
+
// WF2G supplies the graph cursor. The compatibility adapter owns workflow
|
|
116
|
+
// events, substitution, pins and persistence; graph-runner's file/command
|
|
117
|
+
// recipes do not execute workflow nodes yet.
|
|
118
|
+
const graphEnabled = getUserConfig().raw.workflowGraphEnabled !== false;
|
|
119
|
+
const conversion = graphEnabled ? workflowToGraph(opts.workflow) : null;
|
|
120
|
+
if (conversion?.ok) {
|
|
121
|
+
try {
|
|
122
|
+
order = walkWorkflowGraph(conversion.graph);
|
|
123
|
+
graphRecipes = conversion.graph.recipes;
|
|
124
|
+
} catch (error) {
|
|
125
|
+
debug.log('graph.unify', 'wf-fallback', { file: opts.workflow.name, reason: String(error) });
|
|
126
|
+
order = topoSort(opts.workflow.nodes);
|
|
127
|
+
}
|
|
128
|
+
} else {
|
|
129
|
+
if (conversion) debug.log('graph.unify', 'wf-fallback', { file: opts.workflow.name, reason: conversion.reason });
|
|
130
|
+
order = topoSort(opts.workflow.nodes);
|
|
131
|
+
}
|
|
112
132
|
} catch (err) {
|
|
113
133
|
yield {
|
|
114
134
|
type: 'workflow_failed',
|
|
@@ -119,7 +139,9 @@ export async function* runWorkflow(
|
|
|
119
139
|
return {};
|
|
120
140
|
}
|
|
121
141
|
|
|
122
|
-
const nodeById =
|
|
142
|
+
const nodeById = graphRecipes
|
|
143
|
+
? new Map(Object.entries(graphRecipes))
|
|
144
|
+
: new Map(opts.workflow.nodes.map(n => [n.id, n] as const));
|
|
123
145
|
const startIndex = opts.fromNode ? order.indexOf(opts.fromNode) : 0;
|
|
124
146
|
const outputs: Record<string, NodeOutput> = {};
|
|
125
147
|
if (startIndex < 0 || (opts.onlyNode && !nodeById.has(opts.onlyNode))) {
|
|
@@ -20,6 +20,33 @@ export interface ScheduleEntry {
|
|
|
20
20
|
trigger: ScheduleTriggerNode['scheduleTrigger'];
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
// Graph schedules use the same ScheduleEntry shape as workflow nodes; the
|
|
24
|
+
// graph identity is namespaced so a workflow of the same name cannot collide.
|
|
25
|
+
export function graphScheduleEntries(document: unknown): ScheduleEntry[] {
|
|
26
|
+
if (!document || typeof document !== 'object' || Array.isArray(document)) throw new Error('invalid graph YAML');
|
|
27
|
+
const graph = document as Record<string, unknown>;
|
|
28
|
+
const triggers = graph.triggers;
|
|
29
|
+
if (triggers === undefined) return [];
|
|
30
|
+
if (!triggers || typeof triggers !== 'object' || Array.isArray(triggers)) throw new Error('graph triggers must be an object');
|
|
31
|
+
const schedule = (triggers as Record<string, unknown>).schedule;
|
|
32
|
+
if (schedule === undefined) return [];
|
|
33
|
+
if (typeof graph.graph_id !== 'string' || !/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(graph.graph_id) || graph.graph_id === '.' || graph.graph_id === '..') {
|
|
34
|
+
throw new Error('graph schedule requires a valid graph_id');
|
|
35
|
+
}
|
|
36
|
+
const schedules = Array.isArray(schedule) ? schedule : [schedule];
|
|
37
|
+
return schedules.map((raw, index) => {
|
|
38
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) throw new Error('graph triggers.schedule must contain schedule objects');
|
|
39
|
+
const value = raw as Record<string, unknown>;
|
|
40
|
+
if (value.type === 'cron' && typeof value.cron === 'string' && value.cron.trim()) {
|
|
41
|
+
return { workflowName: `graph:${graph.graph_id}`, nodeId: `schedule:${index}`, trigger: { type: 'cron', cron: value.cron } };
|
|
42
|
+
}
|
|
43
|
+
if (value.type === 'interval' && typeof value.interval === 'number' && Number.isFinite(value.interval) && value.interval > 0) {
|
|
44
|
+
return { workflowName: `graph:${graph.graph_id}`, nodeId: `schedule:${index}`, trigger: { type: 'interval', interval: value.interval } };
|
|
45
|
+
}
|
|
46
|
+
throw new Error(`invalid graph triggers.schedule[${index}]: expected cron or interval`);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
23
50
|
export interface WebhookEntry {
|
|
24
51
|
workflowName: string;
|
|
25
52
|
nodeId: string;
|
|
@@ -5,9 +5,12 @@
|
|
|
5
5
|
// daemon can drive schedule + webhook + (future) discord/telegram
|
|
6
6
|
// uniformly.
|
|
7
7
|
|
|
8
|
+
import { readFileSync } from 'node:fs';
|
|
9
|
+
import { resolve } from 'node:path';
|
|
10
|
+
import { parse as parseYaml } from 'yaml';
|
|
8
11
|
import { isScheduleTriggerNode } from '../schema.js';
|
|
9
12
|
import type { ScheduleTriggerNode, WorkflowEntry } from '../types.js';
|
|
10
|
-
import type
|
|
13
|
+
import { graphScheduleEntries, type ScheduleEntry } from './registry.js';
|
|
11
14
|
import { startScheduler, type SchedulerHandle, type SchedulerOpts } from './scheduler.js';
|
|
12
15
|
import type { TriggerEmit, TriggerSource, TriggerSubscription } from './source.js';
|
|
13
16
|
|
|
@@ -25,6 +28,8 @@ export interface ScheduleSource extends TriggerSource {
|
|
|
25
28
|
handle(): SchedulerHandle | null;
|
|
26
29
|
/** Subscription snapshot for `daemon.status()`. */
|
|
27
30
|
subscriptions(): TriggerSubscription[];
|
|
31
|
+
/** Subscribe a graph YAML's schedule declarations to the same scheduler. */
|
|
32
|
+
subscribeGraph(file: string, onFire: () => void | Promise<void>): void;
|
|
28
33
|
}
|
|
29
34
|
|
|
30
35
|
interface Binding {
|
|
@@ -34,14 +39,30 @@ interface Binding {
|
|
|
34
39
|
onEmit: TriggerEmit;
|
|
35
40
|
}
|
|
36
41
|
|
|
42
|
+
interface GraphBinding {
|
|
43
|
+
file: string;
|
|
44
|
+
scheduleEntry: ScheduleEntry;
|
|
45
|
+
onFire: () => void | Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
|
|
37
48
|
export function createScheduleSource(opts: ScheduleSourceOpts = {}): ScheduleSource {
|
|
38
49
|
const bindings: Binding[] = [];
|
|
50
|
+
const graphBindings: GraphBinding[] = [];
|
|
39
51
|
let handle: SchedulerHandle | null = null;
|
|
40
52
|
let started = false;
|
|
41
53
|
|
|
42
54
|
return {
|
|
43
55
|
kind: 'schedule',
|
|
44
56
|
handle: () => handle,
|
|
57
|
+
subscribeGraph(file, onFire) {
|
|
58
|
+
file = resolve(file);
|
|
59
|
+
const schedules = graphScheduleEntries(parseYaml(readFileSync(file, 'utf8')) as unknown);
|
|
60
|
+
for (const scheduleEntry of schedules) {
|
|
61
|
+
if (graphBindings.some(b => b.file === file && b.scheduleEntry.nodeId === scheduleEntry.nodeId)) continue;
|
|
62
|
+
graphBindings.push({ file, scheduleEntry, onFire });
|
|
63
|
+
if (started && handle) handle.add(scheduleEntry);
|
|
64
|
+
}
|
|
65
|
+
},
|
|
45
66
|
subscribe(entry, onEmit) {
|
|
46
67
|
for (const node of entry.definition.nodes ?? []) {
|
|
47
68
|
if (!isScheduleTriggerNode(node)) continue;
|
|
@@ -68,8 +89,13 @@ export function createScheduleSource(opts: ScheduleSourceOpts = {}): ScheduleSou
|
|
|
68
89
|
if (started) return;
|
|
69
90
|
started = true;
|
|
70
91
|
handle = startScheduler({
|
|
71
|
-
registry: bindings.map(b => b.scheduleEntry),
|
|
92
|
+
registry: [...bindings.map(b => b.scheduleEntry), ...graphBindings.map(b => b.scheduleEntry)],
|
|
72
93
|
runWorkflow: async (scheduleEntry) => {
|
|
94
|
+
const graphBinding = graphBindings.find(b => b.scheduleEntry === scheduleEntry);
|
|
95
|
+
if (graphBinding) {
|
|
96
|
+
await graphBinding.onFire();
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
73
99
|
const binding = bindings.find(b =>
|
|
74
100
|
b.scheduleEntry.workflowName === scheduleEntry.workflowName
|
|
75
101
|
&& b.scheduleEntry.nodeId === scheduleEntry.nodeId);
|
|
@@ -89,9 +115,10 @@ export function createScheduleSource(opts: ScheduleSourceOpts = {}): ScheduleSou
|
|
|
89
115
|
handle?.stop();
|
|
90
116
|
handle = null;
|
|
91
117
|
bindings.length = 0;
|
|
118
|
+
graphBindings.length = 0;
|
|
92
119
|
started = false;
|
|
93
120
|
},
|
|
94
|
-
subscriptions: () => bindings.map(b => ({
|
|
121
|
+
subscriptions: () => [...bindings, ...graphBindings].map(b => ({
|
|
95
122
|
kind: 'schedule' as const,
|
|
96
123
|
workflowName: b.scheduleEntry.workflowName,
|
|
97
124
|
nodeId: b.scheduleEntry.nodeId,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
self.__BUILD_MANIFEST=function(e,r,t,_){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:46,errorRate:1e-4,numBits:882,numHashes:14,bitArray:[1,1,0,e,0,r,e,r,r,e,r,e,r,r,r,e,e,e,r,e,r,e,e,r,e,e,r,e,r,r,e,r,e,e,r,r,e,e,e,r,r,e,r,r,e,r,e,r,r,r,e,r,e,r,r,e,r,e,e,r,e,e,r,r,e,r,r,e,e,e,r,e,e,e,e,r,e,e,e,r,e,e,r,r,r,e,r,r,r,e,e,e,r,r,e,e,r,r,e,r,r,e,r,r,r,e,r,r,r,e,r,e,e,e,r,e,r,e,e,r,e,e,r,e,r,r,e,e,e,e,e,r,e,e,r,e,r,r,r,r,r,r,e,r,e,e,e,e,e,r,r,e,r,e,r,e,e,e,r,r,e,e,r,e,r,e,r,e,r,r,r,r,r,r,r,e,r,e,r,r,e,r,r,r,e,r,r,r,r,e,e,e,e,e,r,e,r,e,e,e,r,r,r,r,e,e,e,e,r,r,e,e,r,e,e,e,e,e,r,e,e,e,e,e,r,e,r,r,e,r,r,r,e,r,e,r,r,e,r,r,e,e,e,e,r,r,r,e,e,r,e,r,r,r,r,r,e,r,e,r,e,r,r,r,e,e,e,r,e,e,r,r,e,e,e,e,r,e,e,r,r,e,e,r,r,r,r,r,e,r,r,r,e,e,r,r,e,r,e,r,e,r,r,e,e,e,e,e,r,r,e,r,e,e,r,e,e,e,e,e,e,r,e,e,r,e,e,r,r,e,r,r,e,r,r,e,e,e,e,e,r,r,r,r,e,e,e,e,e,e,e,e,r,e,r,r,r,r,e,e,r,e,r,r,e,r,r,e,r,r,r,e,e,r,e,e,e,e,e,e,r,r,e,r,r,r,r,r,e,e,e,e,r,e,r,e,e,e,r,r,e,e,r,r,e,r,e,e,e,e,r,e,r,e,r,e,e,e,r,e,e,e,e,e,r,r,r,r,e,r,e,r,r,r,r,r,e,r,r,r,e,e,e,e,r,e,r,r,e,r,e,r,r,e,e,r,e,r,e,e,r,r,e,e,e,e,e,r,e,r,e,r,e,r,r,r,e,r,r,e,r,r,r,e,e,e,r,e,e,e,e,r,r,e,r,r,e,e,e,r,r,r,r,r,e,e,r,e,r,e,r,r,r,e,r,e,e,e,r,r,r,e,e,e,e,e,r,e,r,r,r,e,r,e,e,r,r,r,r,r,e,e,e,r,e,e,e,r,e,r,r,r,r,e,e,e,r,r,e,r,r,e,e,r,e,r,r,r,e,r,e,r,e,e,e,e,e,e,e,e,e,r,e,e,r,r,r,e,e,r,e,e,e,e,e,e,r,r,e,e,r,e,e,r,e,e,e,r,e,e,r,r,e,e,e,r,r,r,e,e,r,r,e,r,e,r,r,r,r,e,r,r,r,e,e,e,e,e,r,e,r,r,e,e,r,e,r,e,r,r,r,e,r,r,r,r,r,e,e,r,r,r,e,r,r,r,e,r,e,r,r,e,r,e,e,e,e,e,e,e,e,r,e,r,r,r,e,r,e,e,e,e,e,r,e,r,e,r,e,r,r,e,r,e,e,r,e,r,e,r,e,e,r,e,e,e,r,e,e,e,r,e,e,r,r,e,r,r,r,r,r,e,e,r,e,r,r,r,e,r,r,r,r,e,r,e,e,e,e,e,e,e,e,r,e,r,r,r,e,r,r,r,e,r,r,r,e,e,e,r,r,r,r,r,r,e,e,e,e,r,e,r,r,e,r,r,r,r,e,r,e,r,r,r,e,r,r,e,r,e,e,r,e,r,e,e,r,e,e,e,r,r,r,r,r,e,r,r,r,e,e,e,e,r,e,r,r,r,r,r,e,e,e,r,e,r,e,e,e,r,e,r,r,e,e,r,e,r,e,e,r,r,r,e,e,r,r,r,e,e,r,e,e,e,e,e,e,e,r,e,e,r,e,r,e,e,e,r,e,r,e,r]},__routerFilterDynamic:{numItems:e,errorRate:1e-4,numBits:20,numHashes:14,bitArray:[e,r,r,r,e,e,e,r,r,e,e,r,r,e,e,r,e,r,r,r]},"/_error":["static/chunks/pages/_error-6af8591cd3a3f038.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4,14),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|