elanous 0.2.40 → 0.2.41
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/README.md +7 -7
- package/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/{HjeK7zONHfR7op1hKXp4k → GiOLWmt4MqDZePubBjA4Q}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/1115.434ae2ecb0ad986d.js +149 -0
- package/apps/pwa/out/_next/static/chunks/1121.667cec0bcdbb3fdb.js +36 -0
- package/apps/pwa/out/_next/static/chunks/{9184.45afbf44fec87574.js → 1178.1aa9cad0e7695427.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{2829-734fe8bf2eee7347.js → 1197-54da59d250a6e476.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{6749.0744ce6eb08d40e9.js → 1219.7e17964e0e7cd8e5.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/1245.1cfd13b26dbd71d6.js +287 -0
- package/apps/pwa/out/_next/static/chunks/1494-f93046ff5c5a124d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1609.2b312797599b8e45.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1661.0dd330f3d89f73f3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/167-0c121e4b47e0f9da.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1700.cdc2bf8cc685e221.js +90 -0
- package/apps/pwa/out/_next/static/chunks/1703-78e46acad29f3cfc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1765.679b29625c8e88d4.js +77 -0
- package/apps/pwa/out/_next/static/chunks/{2226.2cf61ec781827219.js → 1800.f7ff51dc4978a958.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/1971-7efb628c471dc5a0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1999-8de7b7bb36801913.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9175.2de5209a5ce6f68a.js → 2073.689dcb2680113d76.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2198-557d49184104d165.js +1 -0
- package/apps/pwa/out/_next/static/chunks/221-440ce67fa9f5c839.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5383.bdfa5d886e39a826.js → 2263.e09b6edea33bad2d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2427-8ed8e98624cbd664.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2457-725c5827bc003795.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2491-2718b15a5ccb75a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2527-5c636a43c7cc5dde.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2692-1027cb16fe4ccf49.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9069.657590a84afb8fac.js → 2743.5d3f76948be32b34.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{6624.981ef7caeb680560.js → 2773.0e80b9d325fb5635.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/2873-0f3cb56c8e3528ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4864a2ca.1c1c280a7772c5e5.js → 2fdf2931.b431eee4fb468bc3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9189505a.980427ac048c8c60.js → 2fe2c302.41b517f88d6fe502.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9992.07ce73c10bd5e6a1.js → 3097.864e92bdaa2f4d15.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/3136-d6870ba63300a93e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3173-0289113d434e83b7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3230-49298c3b73ef2268.js +1 -0
- package/apps/pwa/out/_next/static/chunks/325-dd9208a1a0ab7ce4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3283.528f430dd043fb4e.js +74 -0
- package/apps/pwa/out/_next/static/chunks/3295.cc8cb13b8f0dae1a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3688-86e3b88abf18cb3b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3804-7220467a5473a8df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3808.3e1e247ce7bdf889.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{b84cad00.594027ebe0531fe2.js → 385e4574.e9886ab32759eda3.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/3927.b5473ad109da44c5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3934-98ea94832e194796.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4133.2056bb4d78f621af.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8086.1ab9103c41be884f.js → 4156.ba4de4a3664f04b4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4297-239ca82f293faab0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4320-dcc5a7734126f4c9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4434.94b4c552a2d91e69.js +148 -0
- package/apps/pwa/out/_next/static/chunks/{1281.d81877e35b9068f4.js → 4527.a69f2894d1bc9f4a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4579.03e4092f73950965.js +226 -0
- package/apps/pwa/out/_next/static/chunks/{8357.1aaa713b052a78b1.js → 4667.97e31aa38c95c475.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/{5436.fdf6fa8ae3e9588d.js → 4702.4a4adc1f16d7c93b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4815.481501c57b3568d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/487-d16e698ef14662d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4888-7a38bf522c9cc6fe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5034-30e429d6bb086881.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5040-35c494e60dadd97d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/50c6ab1e.81a96e419350909d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5154.4b6a836179356f30.js +94 -0
- package/apps/pwa/out/_next/static/chunks/{4769.9fd582071301f382.js → 5159.115f1c2ca471386c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5228-a8200df486278f2d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/530.d26346e18089640a.js +115 -0
- package/apps/pwa/out/_next/static/chunks/5379.97af106d09566f69.js +8 -0
- package/apps/pwa/out/_next/static/chunks/{d8de0de2-dd0f4ac8e5ab1832.js → 53aeb4ee-51c92f8d683f5220.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{6257.c0037b8949239f5e.js → 5471.1e611302ed3a7c53.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/5479-b6372e762719f92f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5534-699c5cbcbc96c5d7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2566.beaffc3a5e1fcd2e.js → 5574.f35accf4f132b29d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5701.9c4e8f250312eeee.js +24 -0
- package/apps/pwa/out/_next/static/chunks/{2066.a77257c8c350770a.js → 5744.b9415e18ad623100.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5892.2526d962339662d8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4351.0f37a6db2b34d50b.js → 5937.c2df9e3447e1f667.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5941.8210cc93c9202c0a.js +286 -0
- package/apps/pwa/out/_next/static/chunks/{6051-0ae955eedb10adb9.js → 5947-135e26537d80a6b9.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{3746-f80a78f220bf37b5.js → 5964-7e21164a8f2cf0ce.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5975.4004f820ae3cecd5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6142-7ccd48795d7abd55.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6160.bf9177b8c1bfb243.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6398.71ba0690c8027555.js +27 -0
- package/apps/pwa/out/_next/static/chunks/6492.2bd5c10edc1a064e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6552.a3840aa7da35ad68.js +62 -0
- package/apps/pwa/out/_next/static/chunks/6736.1e36d3ac5fa5e41d.js +24 -0
- package/apps/pwa/out/_next/static/chunks/{2047.8f23e210995d4548.js → 6874.d5cf7eb8edb2cabe.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/6900.3ccbe069bdd4556a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/71327eb4.add50b365f94bf3a.js +122 -0
- package/apps/pwa/out/_next/static/chunks/7136.deca3e3a2ddaa374.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7139-ee9f8ed2677a40b3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7191.fdc955f7d96064a4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7423-e0aa5d9e2962120e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7453.afc1ea7e05d56a8c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7503-5e6a3d7fe67e4a0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7761-476fd7bf768abd34.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7975.eafb12097a0a9e62.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8272-025653884f9645d2.js → 8050-9b364bdef8f71927.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8152.64e253c35cccfaae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8190.620f0231b3924bcb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/83184dcd-0ee6247ff41eb3f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8448.45b6b1f1a99eeb35.js +104 -0
- package/apps/pwa/out/_next/static/chunks/{2281-b8cede695c6c650e.js → 8464-e24f10451b658aac.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8477.e4c944bb3aa5d2f3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8710.ca385257d5ca422e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8830.627ccf294ec2465c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5622.94893f5aea7185d0.js → 8880.64c445592f04acaf.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{1452.162bb2d9d699e82a.js → 8981.c706964c8ba27aff.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{470.51a72a2348306455.js → 9048.212083de42d25be3.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/9053.bd0fffaff8d3f836.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9161-c66e723d7ec9d682.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9185.1ecdf9b65c0bb684.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9356.fccd5f58086b4ff5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9446.dc0406109371d329.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9506.dcf25d467a42627e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2177.df8547f9d7215c4e.js → 9507.7026657a2f47eb64.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/9541.eb8e2f8480c7feca.js +93 -0
- package/apps/pwa/out/_next/static/chunks/9577.ed7582186efa5482.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7515.1ad6efe157fa4448.js → 9579.4a8169600fff2058.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9642-ff2e039eb62e3b92.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9659-8f2323348113ad80.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9724.4c5623af2db43153.js +34 -0
- package/apps/pwa/out/_next/static/chunks/{2499.02fbfd18126c10c0.js → 9834.63ab2bbc3153172e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9869.81a1e24ca682d5a0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{409c787b.e48c5bec8ec10456.js → a0a01613.6d1cca322238d7fe.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{6cc1d1d6.9a98dd4622f1afc6.js → addc2b32.8c4ff8f0aefe987d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-8d9d76ea322d855c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-ed2c4e59f9f1fe21.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-2dc99e03c5d76ca0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-b5a3a788330e920f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/{page-ba957ff875a026a0.js → page-14949db884bfa672.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-ea76c85b36388a97.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-01716d20af62d325.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-62baf6881a64b1e9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-f89ba590c2af8afa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-22f8b0f78d9637e5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-817f9d7e6820be80.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-ffb9bc0d2650249a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-f6d0e64873c0f629.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-8bfa0d4ba23a209d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-f5060462249e32c7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-8d9d76ea322d855c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-b2049f8b1ef79117.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-1446c5fa93907f11.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-b48a7a07c5204156.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-e974b8c4ca47614c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-8a919b869bd28594.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-d31b8de6bfcd72ed.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-64765f817909db29.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-d128c8569a36ee9b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-b2679d357e9b9270.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-6fabec98a9e7b269.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-048f30149dcf1349.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-9113181d6b5a2725.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-40f9e19149024298.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-1e7a755a13227611.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-3c8f8b67a203cf07.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-18032f5437215062.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-da3b739192fd0ee3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-d332545571bd6fd1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-5237aa5b3f3b8ec5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-a142dfb0331a05f5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-d16e56c3989c147e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-6b6593600869e2cd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-8d9d76ea322d855c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-29e8b8a8396b55cb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-b3414d856a1a7e2f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c3affa52b7ce961b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f21dddf9f95b6fab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-f5a30a24745bf088.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-8c8569a09b4d4e34.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-2ce32722c0243483.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-4767b0d9c0a98c6c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-116ee1339c387a75.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-35e8c50ca4ef7ffc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-52e17113356bb891.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-7458ae05ed2ac1a0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{c696986b.5dc8bb1143af16d1.js → b2271e54.c1de3347976e90b0.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{ca3702f8.2913182e73889fa2.js → c0c1a699.0ba79f97005965d4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/framework-ad6c9dd524ad6ef8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-2ddd1f2b44d6aa59.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-e3d82bdc358d20c5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-71d5aa3896e1655f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-03ffc54e00438546.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-56bb89af5a611d0b.js +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +22 -22
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +22 -22
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +22 -22
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +21 -21
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +21 -21
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +22 -22
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +21 -21
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +22 -22
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +22 -22
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +21 -21
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +22 -22
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +22 -22
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +22 -22
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +22 -22
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +21 -21
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +21 -21
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +22 -22
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +22 -22
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +22 -22
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +21 -21
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +21 -21
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +21 -21
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +22 -22
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +22 -22
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +21 -21
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +21 -21
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +21 -21
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +21 -21
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +22 -22
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +22 -22
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +21 -21
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +22 -22
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +22 -22
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +22 -22
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +22 -22
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +22 -22
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +21 -21
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +22 -22
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +22 -22
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +22 -22
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +22 -22
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +22 -22
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +22 -22
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +22 -22
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +22 -22
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +22 -22
- package/bin/elanous.mjs +6 -1
- package/catalog/models/openai/gpt-6.1-sol.yaml +16 -0
- package/catalog/models/openai/gpt-6.1-terra.yaml +16 -0
- package/graphs/demo/persona-teacher/lesson-pack.yaml +16 -0
- package/graphs/demo/persona-teacher/recipes.yaml +17 -0
- package/graphs/demo/persona-teacher/weekly-lesson.yaml +36 -0
- package/graphs/overlays/stop-heal-ladder.yaml +23 -2
- package/graphs/release/release-loop.yaml +3 -1
- package/graphs/units/gate/gate.yaml +20 -0
- package/graphs/units/git/git.yaml +26 -0
- package/graphs/units/implement/implement.yaml +19 -0
- package/graphs/units/landing/landing.yaml +18 -0
- package/graphs/units/review/review.yaml +20 -0
- package/graphs/units/verbs/recipes.yaml +3 -0
- package/graphs/units/verbs/research.yaml +20 -0
- package/graphs/work/research-report.yaml +11 -1
- package/package.json +1 -1
- package/scripts/disk-steward.ts +46 -0
- package/scripts/fleet/node-setup.sh +50 -0
- package/scripts/graph-units/verbs/research.ts +55 -0
- package/scripts/llm-cost-ledger.ts +179 -8
- package/scripts/measure-nl-routing-corpus.ts +10 -2
- package/scripts/persona-teacher/weekly-lesson-node.ts +172 -0
- package/scripts/public-copy-lint.ts +163 -19
- package/scripts/ratchets/train-side-invariants.sh +0 -1
- package/scripts/release-loop/gate-autoheal.ts +117 -0
- package/scripts/release-loop/gate-baseline-receipt.ts +8 -1
- package/scripts/release-loop/gate-diff.ts +22 -3
- package/scripts/release-loop/gate-node.ts +205 -17
- package/scripts/release-loop/gate-shard-load-flaky.ts +256 -0
- package/scripts/release-loop/gate-triage-node.ts +70 -10
- package/scripts/release-loop/resume-release.ts +247 -15
- package/scripts/release-loop/traffic-node.ts +6 -3
- package/scripts/release-loop/unattended-release.ts +4 -2
- package/scripts/shadow-authoring-probe.ts +20 -0
- package/scripts/ux-sim.ts +19 -2
- package/src/acp/core-turn-bridge.ts +86 -4
- package/src/agent-substrate/self-review-cli.ts +91 -29
- package/src/auto-research/research-turn.ts +10 -1
- package/src/autopilot/discovery/wiki-claim-proposer.ts +22 -1
- package/src/boot/daemon-tools/self-implement.ts +46 -9
- package/src/budget/shadow-arms.ts +52 -0
- package/src/chat/pickers/state.ts +7 -1
- package/src/cli/log-event-names.ts +5 -0
- package/src/cli/mcp-login.ts +8 -18
- package/src/cli/msg-cli.ts +57 -1
- package/src/cli/pr-land-heavy-remote.ts +15 -9
- package/src/cli/release-cli.ts +27 -1
- package/src/cli/sim-cli.ts +7 -1
- package/src/cli/tasks-cli.ts +5 -4
- package/src/codex/models.ts +30 -15
- package/src/core-turn/run-core-turn.ts +3 -0
- package/src/core-turn/run-goal-loop.ts +88 -2
- package/src/dashboard/acp-boot.ts +72 -3
- package/src/dashboard/index.ts +6 -0
- package/src/dashboard/turn-preamble.ts +12 -1
- package/src/disk-steward/judge.ts +73 -0
- package/src/disk-steward/ledger.ts +122 -0
- package/src/disk-steward/steward.ts +373 -0
- package/src/domains/guardian-tick.ts +191 -2
- package/src/graph-runner/graph-cli.ts +21 -0
- package/src/graph-runner/in-process-registry.ts +37 -0
- package/src/graph-runner/runner.ts +33 -3
- package/src/grounding/ref-index.ts +19 -0
- package/src/grounding/sources-cli.ts +9 -1
- package/src/harness/harness-cli-command.ts +267 -14
- package/src/harness/harness-incidents.ts +312 -7
- package/src/harness/harness-space.ts +15 -1
- package/src/harness/progress-worker-entry.ts +59 -0
- package/src/harness/progress-worker-runtime.ts +11 -0
- package/src/index.ts +18 -2
- package/src/instance/dev-project.ts +25 -0
- package/src/intelligence-map/model-alias.ts +6 -5
- package/src/intelligence-map/model-catalog.ts +59 -2
- package/src/llm/model-defaults.ts +4 -4
- package/src/llm.ts +42 -11
- package/src/loops/orchestrator/tick.ts +48 -0
- package/src/mcp/mcp-oauth.ts +3 -1
- package/src/model-tier/llm-tier-map.ts +9 -9
- package/src/model-tier/turn-tier.ts +1 -1
- package/src/msg/msg-mirror-github.ts +80 -0
- package/src/msg/msg-mirror-policy.ts +61 -0
- package/src/msg/msg-mirror-runner.ts +219 -0
- package/src/msg/msg-mirror-state.ts +33 -0
- package/src/msg/msg-store.ts +11 -0
- package/src/output-truncation.ts +41 -12
- package/src/project/project-store.ts +48 -1
- package/src/release-loop/gate-host-reservation.ts +144 -0
- package/src/release-loop/release-schedule.ts +90 -1
- package/src/research/bloom-exemplars.ts +135 -0
- package/src/self-dev/ask-launch-flow.ts +39 -25
- package/src/self-dev/dev-cli.ts +17 -17
- package/src/self-dev/graph-front-nodes.ts +23 -0
- package/src/self-dev/launch-preflight.ts +9 -4
- package/src/self-dev/orchestrate.ts +15 -0
- package/src/self-dev/run-supervisor.ts +185 -3
- package/src/self-dev/run-types.ts +3 -0
- package/src/self-implement/gate-artifacts.ts +13 -0
- package/src/self-implement/gate-cli.ts +54 -24
- package/src/self-implement/gate-remote.ts +23 -5
- package/src/self-implement/goal-author-clarification.ts +31 -12
- package/src/self-implement/goal-author.ts +77 -5
- package/src/self-implement/graph-stage-units.ts +172 -0
- package/src/self-implement/graph-templates.ts +162 -1
- package/src/self-implement/graph-variant.ts +37 -4
- package/src/self-implement/host-regate.ts +4 -4
- package/src/self-implement/knowhow-pack.ts +38 -0
- package/src/self-implement/orchestrator.ts +235 -21
- package/src/self-implement/run-ledger.ts +64 -6
- package/src/self-implement/run-stop.ts +21 -2
- package/src/self-implement/running-runs.ts +35 -12
- package/src/self-implement/self-implement-cli.ts +36 -4
- package/src/self-implement/stop-autoheal-operational.ts +43 -0
- package/src/self-implement/stop-autoheal.ts +15 -6
- package/src/session/chat.ts +31 -54
- package/src/session/request-size-guard.ts +123 -0
- package/src/sidetab-core/model.ts +136 -0
- package/src/task-agent/parent-host.ts +14 -1
- package/src/task-agent/task-hand.ts +4 -1
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +43 -0
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +29 -4
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +116 -16
- package/src/task-orchestrator/surfaces/self-implement.ts +18 -0
- package/src/tui/entry.ts +10 -3
- package/src/tui/sidetab/list.ts +45 -0
- package/src/tui/sidetab/nl-tool.ts +2 -136
- package/src/tui/sidetab/peek.ts +52 -0
- package/src/tui-client/dashboard-session.ts +3 -0
- package/src/user-config.ts +11 -5
- package/src/ux-sim/fault-needs-human-reason-repair.ts +107 -0
- package/src/ux-sim/fault-pod-child-result.ts +42 -0
- package/src/ux-sim/release-sim-rig.ts +262 -0
- package/src/ux-sim/seminar-rehearsal.ts +109 -0
- package/src/ux-sim/subagent-tools-device.ts +2 -2
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/1060.014f1f01a17aec26.js +0 -115
- package/apps/pwa/out/_next/static/chunks/1350.59f40e39e02d91b1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1415.79821ec7ae99acdb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/147.f92f63bbc5e85fa5.js +0 -286
- package/apps/pwa/out/_next/static/chunks/1537-6bb97b5214928ea9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1661.fb425a1d8a065b72.js +0 -149
- package/apps/pwa/out/_next/static/chunks/1671-1c22b40b50b208f2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1758.0204d3f48783c49d.js +0 -90
- package/apps/pwa/out/_next/static/chunks/1806.027bf78b6a94d340.js +0 -104
- package/apps/pwa/out/_next/static/chunks/2061-7f2bbc53ae96c88b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2096-a938496bc996dcbd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2200-9a453b8f99687d49.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2522.f2766b76d22c8bdf.js +0 -34
- package/apps/pwa/out/_next/static/chunks/261.0d471e8aded799f3.js +0 -226
- package/apps/pwa/out/_next/static/chunks/2615.3c9738153de3ef3f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2727.e703d99ac414916d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2752.7904b8df0254d0ae.js +0 -27
- package/apps/pwa/out/_next/static/chunks/2762-5051a862dfa40e99.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2767-31784bfedf8e245d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2774-719820e3f5b2a3eb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2812-f016aa0dda149287.js +0 -1
- package/apps/pwa/out/_next/static/chunks/311-32dcac79970985e8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3175-f93f7495cd28253c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3184.8da993f5502d2140.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3231-d7c981db0ff8bdcc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3250.151309c5176d6b4b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3330.7443183b7e6fdbdf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3517.a5aa1797a9dbf2ee.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3567-45f676877ed9e8a5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3819.8a1de79b2e8c7298.js +0 -24
- package/apps/pwa/out/_next/static/chunks/39.9b37b0be4c128a83.js +0 -77
- package/apps/pwa/out/_next/static/chunks/3b355b3d.6f73c98bf6f9c749.js +0 -122
- package/apps/pwa/out/_next/static/chunks/4023.a19045970a9ce16a.js +0 -36
- package/apps/pwa/out/_next/static/chunks/413-24c8284bda08241d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4135.e45d6ebc29e20647.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4283.65502f5d0e6ff6c0.js +0 -287
- package/apps/pwa/out/_next/static/chunks/4305-4e28fa92a7b34a5b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4335-50efa61fd7613142.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4720.ecbd1693fa151068.js +0 -1
- package/apps/pwa/out/_next/static/chunks/483.725e4a61be922788.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4969-4b209d7307410c00.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5068-c7f53862f83c0917.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5315.bc96711c24dfefe2.js +0 -74
- package/apps/pwa/out/_next/static/chunks/5542.efbf14f16baed4dd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5644.8f401a25601d05fc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5658.35f70eb9871a54bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5721.7bdc0e904c76ab51.js +0 -8
- package/apps/pwa/out/_next/static/chunks/5790-eef0ca20884a6bdf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5802.ef0d8598ca68fe84.js +0 -62
- package/apps/pwa/out/_next/static/chunks/5890.fb974729788dcb71.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5924.5ef25cddd36d5dbf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5979-e59c099ebf8d1f35.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6020.714cfeada2315e2e.js +0 -94
- package/apps/pwa/out/_next/static/chunks/6027-dfe0349d8c50f698.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6178.bc4730c86cf74536.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6273.d808b0dcb3c2b155.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6292.6ef1df64fa6a4c8a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/647-af8dd920ba46533c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6541-170dc5c59e135c0c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6742-a1ad4a94ba7bc37a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6836-493dc55c39187949.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6856-53ac421c06039a18.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6908.06008c67f6380ea9.js +0 -148
- package/apps/pwa/out/_next/static/chunks/6915.096931864206f522.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6925.5e181fb7dcf90193.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7203-800e11037adc41eb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7219-15bdd9a80661af8e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7279.6170f591105936bb.js +0 -93
- package/apps/pwa/out/_next/static/chunks/7349-373165c7fbdcc3df.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7514-a533ba0ca1cae4f4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7521.d919cc1fab80c1d9.js +0 -24
- package/apps/pwa/out/_next/static/chunks/7538.90e97bbdf9178cff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7611.85f045bf232053ac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7825-39203196a12579b2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7869.5e1a9a12fd70d6c7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8099.1cccf31c1baa7e1c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8179-e61fffbdb70f1152.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8265.bdeb991b34db6a06.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8638-e42615f2166165b5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8639-92c11d069792429e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8691.54e22831d5e8ccf8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8d173e38.18a2f7b4e1848bdb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9125-ae588d88a0293b93.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9311.f9f641a46a508611.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9371-a6fee8378ebfa3ee.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9421-3aa9ff4fa7f63d8a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-76394dc618d322c8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-1b948637c37b3abd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-c63400f1bcf3e47c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-95d0957267819586.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-bb6fd0714879cb87.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-8f9038520d2acbef.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-d4b48397e05fce2c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-72d5744245dc0c27.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-37625dc8300fa43a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-fbef9d160272dbc1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-58424168df84928e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-72c12ba430ac57c0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-d53f3e9ed806d7e0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-4d2fbd45feee0829.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-76394dc618d322c8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-8783dc0ed7590a2c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-3706cb390606e930.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-9b0a86598e0111fd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-4edb8df90f4537ce.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-83d27757e2b8060a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-47398b9ba1cc5e1b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-fb86f55cfe2e681d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-e22345fc8fd47b1b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-fca2e59a81744d9e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-6e96bda63100b31e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-4d17ad8e0db8cea4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-121f92766c33beaa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-43f14212c545f92d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ccec2023e7a974ec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-b04f33f548b89a94.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-c8792823c0917021.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-8c0e32782ceef4cb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-94bd3922eb230ce8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-bca565887bafa03c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-ac1dffafe649fc6c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-52374edb5e23e455.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ad4ebca120d43ca7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-76394dc618d322c8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-718b89ce4b4ae4e4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-204eca33eeeaddec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-e58ba9bcdb9ac0f9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-98f6dd50bafd7734.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-139d722de1dcd6c1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-5a4bdd72bff27057.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-6f6ab17d44f984ce.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-aabb7bd15fb72da9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-e4322319164a4436.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-e9efc0c8f32e2371.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-ccde99f07aaf71f7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-80464aced9614390.js +0 -1
- package/apps/pwa/out/_next/static/chunks/d5d3cefc-373c4eb722ed848b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-002b472a66935d31.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-49b88d47292c0476.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-fff2549cb10a133f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-32abbbba3f3b76b7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-9d9cfef60c60dd7a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-cc7f483fa294034a.js +0 -1
- package/scripts/ratchets/next-tui-entry-budget.ts +0 -124
- /package/apps/pwa/out/_next/static/{HjeK7zONHfR7op1hKXp4k → GiOLWmt4MqDZePubBjA4Q}/_ssgManifest.js +0 -0
|
@@ -13,6 +13,7 @@ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from '
|
|
|
13
13
|
import { dirname, join } from 'node:path';
|
|
14
14
|
import { homedir } from 'node:os';
|
|
15
15
|
import type { ModelCatalog, ModelEntry } from './types.js';
|
|
16
|
+
import { resolveModelAlias } from './model-alias.js';
|
|
16
17
|
|
|
17
18
|
// 2026-05-03 snapshot — added Kimi (Moonshot) / Qwen 3.6 (Alibaba) /
|
|
18
19
|
// GLM 5.x (Zhipu) families. Open-weight vs cloud-only is captured by
|
|
@@ -172,16 +173,55 @@ export const BUILTIN_CATALOG: ModelCatalog = {
|
|
|
172
173
|
inputPerMtok: 2,
|
|
173
174
|
outputPerMtok: 10,
|
|
174
175
|
local: false,
|
|
175
|
-
tags: ['coding', 'reasoning', 'agentic', 'balanced', 'long-context'],
|
|
176
|
+
tags: ['coding', 'reasoning', 'agentic', 'balanced', 'legacy', 'long-context'],
|
|
176
177
|
bestFor: ['daily-coding', 'multi-file-edit', 'autonomous-implementation', 'complex-architecture'],
|
|
177
178
|
reservedOutputTokens: 12_000,
|
|
179
|
+
// Coarse capability tier (legacy state is recorded in tags; this schema has no `legacy` tier).
|
|
178
180
|
tier: 'better',
|
|
179
181
|
variantOf: 'gpt-6',
|
|
180
182
|
effortAxis: 'sol',
|
|
181
183
|
reasoningEffortCeiling: 'max',
|
|
182
184
|
releasedAt: '2026-09-22',
|
|
183
185
|
classification: { source: 'builtin', at: '2026-09-23' },
|
|
184
|
-
notes: '
|
|
186
|
+
notes: 'Legacy GPT-6 Sol retained for explicit compatibility; GPT-6.1 Terra is the current Codex default. 1.05M context. Per OP 2026-10-28 price direction, its cached-input estimate matches GPT-6.1 Sol ($0.10/M).',
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
id: 'gpt-6.1-terra',
|
|
190
|
+
provider: 'openai-codex',
|
|
191
|
+
family: 'gpt-6',
|
|
192
|
+
contextWindow: 500_000,
|
|
193
|
+
inputPerMtok: 1,
|
|
194
|
+
outputPerMtok: 5,
|
|
195
|
+
local: false,
|
|
196
|
+
tags: ['coding', 'reasoning', 'agentic', 'balanced'],
|
|
197
|
+
bestFor: ['daily-coding', 'multi-file-edit', 'autonomous-implementation'],
|
|
198
|
+
reservedOutputTokens: 12_000,
|
|
199
|
+
tier: 'better',
|
|
200
|
+
variantOf: 'gpt-6',
|
|
201
|
+
effortAxis: 'terra',
|
|
202
|
+
reasoningEffortCeiling: 'max',
|
|
203
|
+
releasedAt: '2026-10-26',
|
|
204
|
+
classification: { source: 'builtin', at: '2026-10-28' },
|
|
205
|
+
notes: 'GPT-6.1 Terra · Codex CLI 0.164.0 카탈로그 실측 · 500K context · $1/$5, cached input $0.05/M. CLI 기본 effort=low; elanous 경로 기본 medium 유지.',
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
id: 'gpt-6.1-sol',
|
|
209
|
+
provider: 'openai-codex',
|
|
210
|
+
family: 'gpt-6',
|
|
211
|
+
contextWindow: 500_000,
|
|
212
|
+
inputPerMtok: 2,
|
|
213
|
+
outputPerMtok: 10,
|
|
214
|
+
local: false,
|
|
215
|
+
tags: ['coding', 'reasoning', 'agentic', 'frontier'],
|
|
216
|
+
bestFor: ['complex-architecture', 'long-horizon-agentic', 'deep-analysis'],
|
|
217
|
+
reservedOutputTokens: 16_000,
|
|
218
|
+
tier: 'best',
|
|
219
|
+
variantOf: 'gpt-6',
|
|
220
|
+
effortAxis: 'sol',
|
|
221
|
+
reasoningEffortCeiling: 'max',
|
|
222
|
+
releasedAt: '2026-10-26',
|
|
223
|
+
classification: { source: 'builtin', at: '2026-10-28' },
|
|
224
|
+
notes: 'GPT-6.1 Sol · Codex CLI 0.164.0 카탈로그 실측 · 500K context · $2/$10, cached input $0.10/M. CLI 기본 effort=low; elanous 경로 기본 medium 유지.',
|
|
185
225
|
},
|
|
186
226
|
{
|
|
187
227
|
id: 'gpt-6-luna',
|
|
@@ -944,6 +984,23 @@ export function reasoningEffortCeiling(modelId: string | undefined): ReasoningEf
|
|
|
944
984
|
return 'medium'; // local 등 미상 — 보수적
|
|
945
985
|
}
|
|
946
986
|
|
|
987
|
+
export const CHILD_LLM_EFFORT_LADDER = ['minimal', 'low', 'medium', 'high', 'xhigh', 'max'] as const;
|
|
988
|
+
|
|
989
|
+
/** Shared explicit effort check for task hand and the dev entrypoint. */
|
|
990
|
+
export function childLlmEffortProblem(model: string, entered: string): string | undefined {
|
|
991
|
+
const effort = entered.trim().toLowerCase();
|
|
992
|
+
const ladder: readonly string[] = CHILD_LLM_EFFORT_LADDER;
|
|
993
|
+
if (!ladder.includes(effort)) {
|
|
994
|
+
return `--child-llm-effort 알 수 없음: ${entered} · 후보: ${CHILD_LLM_EFFORT_LADDER.join(', ')}`;
|
|
995
|
+
}
|
|
996
|
+
const ceiling = reasoningEffortCeiling(resolveModelAlias(model.trim()) ?? model.trim());
|
|
997
|
+
if (ceiling === 'none') return `--child-llm-effort 거부: ${model} 은 추론 노력을 «안 받는다»(ceiling=none)`;
|
|
998
|
+
if (ladder.indexOf(effort) > ladder.indexOf(ceiling)) {
|
|
999
|
+
return `--child-llm-effort 거부: ${effort} 가 ${model} 의 상한(${ceiling})을 넘는다`;
|
|
1000
|
+
}
|
|
1001
|
+
return undefined;
|
|
1002
|
+
}
|
|
1003
|
+
|
|
947
1004
|
// ── Paths ──────────────────────────────────────────────────────────────
|
|
948
1005
|
|
|
949
1006
|
export function getCatalogPath(home: string = homedir()): string {
|
|
@@ -49,12 +49,12 @@ export function setAutoProviderDecisionForTest(fn: (() => LLMProviderName | unde
|
|
|
49
49
|
/** config/tier 해석이 «실패»했을 때만 타는 최후 폴백. 티어 사다리가 안 읽히는
|
|
50
50
|
* 상황(부팅 초기·손상된 config)에서도 지점이 «성능 등급에 맞는» 모델을 얻게 한다. */
|
|
51
51
|
const LEGACY_TIER_FALLBACK: Readonly<Record<ModelTier, string>> = {
|
|
52
|
-
//
|
|
52
|
+
// Keep the fallback aligned with the GPT-6.1 Codex ladder if config/tier lookup fails.
|
|
53
53
|
// 사다리가 안 읽힐 때만 쓰이므로 codex 사다리의 «현재 값»과 같게 둔다(시험이 사다리와 대조한다).
|
|
54
54
|
budget: 'gpt-6-luna',
|
|
55
|
-
balanced: 'gpt-6-
|
|
56
|
-
better: 'gpt-6-
|
|
57
|
-
best: 'gpt-6-sol',
|
|
55
|
+
balanced: 'gpt-6.1-terra',
|
|
56
|
+
better: 'gpt-6.1-terra',
|
|
57
|
+
best: 'gpt-6.1-sol',
|
|
58
58
|
loaded: 'gpt-6-astra',
|
|
59
59
|
};
|
|
60
60
|
|
package/src/llm.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// Auto-routes based on model name prefix, or picks the first available provider.
|
|
4
4
|
|
|
5
5
|
import { wellFormedLLMMessages } from './llm-wellformed.js';
|
|
6
|
+
import { truncateOutput } from './output-truncation.js';
|
|
6
7
|
import { createHash, randomUUID } from 'node:crypto';
|
|
7
8
|
import { testFakeLlmEnabled, testFakeLlmProvider } from './ux-sim/fake-llm.js';
|
|
8
9
|
import { realpathSync } from 'node:fs';
|
|
@@ -455,6 +456,9 @@ export interface LLMOpts {
|
|
|
455
456
|
previousChars?: number;
|
|
456
457
|
}) => void;
|
|
457
458
|
};
|
|
459
|
+
/** Optional cap for text tool results accumulated into the conversation history.
|
|
460
|
+
* Oversized results are spilled to a local file and represented by head/tail. */
|
|
461
|
+
toolResultInlineLimitBytes?: number;
|
|
458
462
|
/** Optional model role attached to this request's usage observation. */
|
|
459
463
|
usageRole?: ModelRole;
|
|
460
464
|
/** Optional per-call metering phase; absent calls keep the existing ledger shape. */
|
|
@@ -7506,13 +7510,33 @@ function resultText(result: unknown): string {
|
|
|
7506
7510
|
}
|
|
7507
7511
|
|
|
7508
7512
|
/** skill_exec returns structured host metadata, but its model-facing tool result is the answer body. */
|
|
7509
|
-
function toolResultContentForCall(toolName: string, result: unknown): string {
|
|
7513
|
+
function toolResultContentForCall(toolName: string, result: unknown, inlineLimitBytes?: number): string {
|
|
7514
|
+
let content: string;
|
|
7510
7515
|
if (toolName === 'skill_exec' && result && typeof result === 'object'
|
|
7511
7516
|
&& typeof (result as { output?: unknown }).output === 'string') {
|
|
7512
|
-
|
|
7513
|
-
|
|
7517
|
+
content = (result as { ok?: unknown }).ok === false
|
|
7518
|
+
? JSON.stringify(result)
|
|
7519
|
+
: (result as { output: string }).output;
|
|
7520
|
+
} else {
|
|
7521
|
+
content = typeof result === 'string' ? result : JSON.stringify(result);
|
|
7522
|
+
}
|
|
7523
|
+
if (!Number.isFinite(inlineLimitBytes) || inlineLimitBytes === undefined || inlineLimitBytes <= 0) return content;
|
|
7524
|
+
const safeToolName = toolName.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 48) || 'tool';
|
|
7525
|
+
const capped = truncateOutput(content, {
|
|
7526
|
+
toolName: `tool-result-${safeToolName}`,
|
|
7527
|
+
inlineLimit: inlineLimitBytes,
|
|
7528
|
+
headBytes: Math.floor(inlineLimitBytes * 0.6),
|
|
7529
|
+
tailBytes: Math.floor(inlineLimitBytes * 0.2),
|
|
7530
|
+
});
|
|
7531
|
+
if (capped.spilled) {
|
|
7532
|
+
debug.log('llm.router', 'tool-result.output-spilled', {
|
|
7533
|
+
tool: safeToolName,
|
|
7534
|
+
originalBytes: capped.originalBytes,
|
|
7535
|
+
inlineLimitBytes,
|
|
7536
|
+
savedPath: capped.savedPath,
|
|
7537
|
+
});
|
|
7514
7538
|
}
|
|
7515
|
-
return
|
|
7539
|
+
return capped.output;
|
|
7516
7540
|
}
|
|
7517
7541
|
|
|
7518
7542
|
function detectExecutionFailure(result: unknown): boolean {
|
|
@@ -8921,7 +8945,7 @@ export async function streamLLMWithTools(
|
|
|
8921
8945
|
turn, historyLen: history.length,
|
|
8922
8946
|
}, { level: 'info' });
|
|
8923
8947
|
|
|
8924
|
-
//
|
|
8948
|
+
// Turn context backstop — with the codex/unlimited tool-loop cap
|
|
8925
8949
|
// removed, a long tool-heavy turn (esp. mission build) grows `history`
|
|
8926
8950
|
// unbounded until it overflows the model context window and the provider
|
|
8927
8951
|
// throws. ref codex / opencode bound exploration by COMPACTION, not a
|
|
@@ -9371,6 +9395,8 @@ export async function streamLLMWithTools(
|
|
|
9371
9395
|
...(ev.revisedPrompt !== undefined ? { revisedPrompt: ev.revisedPrompt } : {}),
|
|
9372
9396
|
});
|
|
9373
9397
|
} else if (ev.type === 'usage') {
|
|
9398
|
+
// Provider parsers normalize inputTokens to uncached input; cache
|
|
9399
|
+
// reads/writes are separate fields (prompt-cache/types.ts contract).
|
|
9374
9400
|
// ⭐ 주 에이전트 턴의 토큰·비용을 «게이트 없이» 남긴다(2026-09-24 실측: 이 줄이 없어 3시간 `llm.usage`
|
|
9375
9401
|
// 18행이 전부 곁가지 두 자리였고, 하니스 런 비용의 거의 전부가 관측 밖이었다). 곁가지와 같은 모양 ·
|
|
9376
9402
|
// 모르는 모델은 금액 대신 `cost.kind='unknown'`. runId 는 debug.log 가 붙인다. 실패해도 턴은 계속.
|
|
@@ -11358,6 +11384,11 @@ export async function streamLLMWithTools(
|
|
|
11358
11384
|
}
|
|
11359
11385
|
const dispatchIndex = callsToDispatch.findIndex((candidate) => candidate.id === call.id);
|
|
11360
11386
|
const { result, isError } = dispatchedResults[dispatchIndex]!;
|
|
11387
|
+
const toolResultInlineLimitBytes = opts.toolResultInlineLimitBytes === undefined
|
|
11388
|
+
? undefined
|
|
11389
|
+
: activeProvider.name === 'openai-codex'
|
|
11390
|
+
? Math.min(opts.toolResultInlineLimitBytes, 10 * 1024)
|
|
11391
|
+
: opts.toolResultInlineLimitBytes;
|
|
11361
11392
|
const imageBearing = maybeImageBearingResult(result);
|
|
11362
11393
|
if (imageBearing) {
|
|
11363
11394
|
// Image-bearing tool result (Phase 1, 2026-05-05) — see
|
|
@@ -11370,7 +11401,7 @@ export async function streamLLMWithTools(
|
|
|
11370
11401
|
tool_use_id: call.id,
|
|
11371
11402
|
content: [
|
|
11372
11403
|
{ type: 'image', mediaType: imageBearing.mediaType, base64: imageBearing.dataB64 },
|
|
11373
|
-
{ type: 'text', text: JSON.stringify(imageBearing.rest) },
|
|
11404
|
+
{ type: 'text', text: toolResultContentForCall(call.name, JSON.stringify(imageBearing.rest), toolResultInlineLimitBytes) },
|
|
11374
11405
|
],
|
|
11375
11406
|
...(isError ? { isError: true } : {}),
|
|
11376
11407
|
});
|
|
@@ -11378,7 +11409,7 @@ export async function streamLLMWithTools(
|
|
|
11378
11409
|
resultBlocks.push({
|
|
11379
11410
|
type: 'tool_result',
|
|
11380
11411
|
tool_use_id: call.id,
|
|
11381
|
-
content: toolResultContentForCall(call.name, result),
|
|
11412
|
+
content: toolResultContentForCall(call.name, result, toolResultInlineLimitBytes),
|
|
11382
11413
|
...(isError ? { isError: true } : {}),
|
|
11383
11414
|
});
|
|
11384
11415
|
}
|
|
@@ -11764,11 +11795,11 @@ import {
|
|
|
11764
11795
|
} from './oauth/codex.js';
|
|
11765
11796
|
import { extractChatGPTClaims } from './oauth/jwt.js';
|
|
11766
11797
|
|
|
11767
|
-
// ⭐ 2026-
|
|
11798
|
+
// ⭐ 2026-10-28 — current Codex default is GPT-6.1 Terra.
|
|
11768
11799
|
// ⛔ 이 상수는 «최후 폴백»이다 — 정상 경로는 `llm-tier-map` 의 사다리를 탄다.
|
|
11769
|
-
//
|
|
11770
|
-
//
|
|
11771
|
-
export const CODEX_DEFAULT_MODEL = 'gpt-6-
|
|
11800
|
+
// Codex CLI 0.164.0: `codex exec -m gpt-6.1-terra` returned successfully on 2026-10-28.
|
|
11801
|
+
// Elanous ACP Codex app-server also returned on this model; Elanous's better-tier effort remains medium.
|
|
11802
|
+
export const CODEX_DEFAULT_MODEL = 'gpt-6.1-terra';
|
|
11772
11803
|
export const CODEX_DEFAULT_URL = 'https://api.openai.com/v1/chat/completions';
|
|
11773
11804
|
|
|
11774
11805
|
/** Build an OpenAI-compatible provider (grok / openai) using the
|
|
@@ -56,6 +56,8 @@ export interface TickState {
|
|
|
56
56
|
/** ORCH-TA-HAND — cells handed to TASK-AGENT this run (card id · mode · launched). */
|
|
57
57
|
handed?: Array<{ key: string; cell: string; cardId: string; mode: 'shadow' | 'live'; launched: boolean }>;
|
|
58
58
|
queueOutcomes?: Array<{ queueId: string; key?: string; outcome: string }>;
|
|
59
|
+
/** COORD-ABSORB-OP-BRIDGES-FU — coordinator 수신 소비(버스 배수)의 이번 run 누적. 노드마다 배수한 replied·acknowledged 를 더해 durable 상태 파일에 남긴다. */
|
|
60
|
+
inbox?: { replied: number; acknowledged: number };
|
|
59
61
|
steps: Array<{ node: Node; reason: string; count: number; targetLoopId?: string }>;
|
|
60
62
|
nodes: Partial<Record<Node, 'ok' | 'skipped'>>;
|
|
61
63
|
missing: string[];
|
|
@@ -133,6 +135,47 @@ function handedKeys(path: string): Set<string> {
|
|
|
133
135
|
return keys;
|
|
134
136
|
}
|
|
135
137
|
|
|
138
|
+
/** COORD-ONE 조각 1 — coordinator shadow 의 TASK-AGENT 판정 소비 원장 행: `handKey`(넘김 원장 행 키, shadow: 접두 포함)가 중복 소비를 막는 식별자다. */
|
|
139
|
+
type ConsumedVerdictRow = { at: string; runId: string; key: string; cell: string; cardId: string; mode: 'shadow' | 'live'; launched: boolean; handKey: string; handRunId?: string; consumed: true };
|
|
140
|
+
function coordVerdictLedger(root: string): string { return join(root, 'loop', 'orchestrator', 'coord-verdicts.jsonl'); }
|
|
141
|
+
/** 소비 원장이 완료로 표시한 판정들의 넘김 행 키 — 같은 판정은 두 번 소비되지 않는다. */
|
|
142
|
+
function consumedVerdictHandKeys(path: string): Set<string> {
|
|
143
|
+
const keys = new Set<string>();
|
|
144
|
+
if (!existsSync(path)) return keys;
|
|
145
|
+
for (const line of readFileSync(path, 'utf8').split('\n')) {
|
|
146
|
+
if (!line.trim()) continue;
|
|
147
|
+
let row: Partial<ConsumedVerdictRow>;
|
|
148
|
+
try { row = JSON.parse(line) as typeof row; } catch { throw new Error('invalid coordinator verdict ledger'); }
|
|
149
|
+
if (row.consumed === true && typeof row.handKey === 'string') keys.add(row.handKey);
|
|
150
|
+
}
|
|
151
|
+
return keys;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* COORD-ONE 조각 1 — tick 진입에서 coordinator shadow 가 TASK-AGENT 판정 1건(완료 넘김 행)을 소비한다.
|
|
155
|
+
* 소비는 기록 전용이다: 소비 원장에 완료 표시 한 줄을 남길 뿐 넘김 원장·자리 저널·발사 어느 live 부수효과도 내지 않고
|
|
156
|
+
* seat-loop 기본 발사 경로도 그대로 둔다(스튜어드 흡수·좌석 이관은 후속 조각). 원장을 못 읽는 진입은 소비 0건으로 끝난다.
|
|
157
|
+
*/
|
|
158
|
+
function consumeTaskAgentVerdict(root: string, runId: string, now: Date): void {
|
|
159
|
+
try {
|
|
160
|
+
const handLedger = handedLedger(root);
|
|
161
|
+
if (!existsSync(handLedger)) return;
|
|
162
|
+
const path = coordVerdictLedger(root);
|
|
163
|
+
const consumed = consumedVerdictHandKeys(path);
|
|
164
|
+
const verdict = [...handedRows(handLedger)].find(([handKey]) => !consumed.has(handKey));
|
|
165
|
+
if (!verdict) return;
|
|
166
|
+
const [handKey, row] = verdict;
|
|
167
|
+
const key = handKey.replace(/^shadow:/, '');
|
|
168
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
169
|
+
appendFileSync(path, `${JSON.stringify({ at: now.toISOString(), runId, key, cell: row.cell, cardId: row.cardId,
|
|
170
|
+
mode: row.mode, launched: row.launched, handKey, ...(row.runId ? { handRunId: row.runId } : {}), consumed: true } as ConsumedVerdictRow)}\n`);
|
|
171
|
+
try { debug.log('loop.orchestrator', 'coord-verdict', { runId, key, mode: row.mode, launched: row.launched }); }
|
|
172
|
+
catch { /* 관측이 소비를 바꾸지 않는다 */ }
|
|
173
|
+
} catch (error) {
|
|
174
|
+
try { debug.log('loop.orchestrator', 'coord-verdict-unreadable', { error: String(error).slice(0, 200) }, { level: 'warn' }); }
|
|
175
|
+
catch { /* a failed observation cannot change the tick */ }
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
136
179
|
export function kstWindow(now: Date): Window {
|
|
137
180
|
const hour = Number(new Intl.DateTimeFormat('en-US', { timeZone: 'Asia/Seoul', hour: '2-digit', hourCycle: 'h23' }).format(now));
|
|
138
181
|
return hour < 12 ? '08' : hour < 18 ? '12' : '18';
|
|
@@ -529,11 +572,16 @@ export async function runOrchestratorNode(node: Node, deps: TickDeps = {}): Prom
|
|
|
529
572
|
...(deps.coordinatorKnowhow === undefined ? {} : { knowhow: deps.coordinatorKnowhow }),
|
|
530
573
|
...(deps.coordinatorContext ? { context: deps.coordinatorContext } : {}) });
|
|
531
574
|
}))();
|
|
575
|
+
// 생산 tick 경로의 실행 원문: 배수 결과를 이벤트로만 남기지 않고 run 상태에 누적해 다른 프로세스(보호자·리뷰)가 파일로 관측하게 한다.
|
|
576
|
+
state.inbox = { replied: (state.inbox?.replied ?? 0) + inbox.replied, acknowledged: (state.inbox?.acknowledged ?? 0) + inbox.acknowledged };
|
|
532
577
|
if (inbox.replied || inbox.acknowledged) {
|
|
533
578
|
observe('exchange', 'coordinator-inbox-replied', inbox.replied);
|
|
534
579
|
observe('exchange', 'coordinator-inbox-acknowledged', inbox.acknowledged);
|
|
535
580
|
}
|
|
536
581
|
}
|
|
582
|
+
// COORD-ONE 조각 1 — tick 진입에서 coordinator shadow 가 TASK-AGENT 판정 1건을 소비한다: 소비 원장 기록이 전부고
|
|
583
|
+
// live 부수효과(운영 발사·자리 루프 은퇴)는 0, seat-loop 기본 발사 경로는 그대로다(흡수·이관은 후속 조각).
|
|
584
|
+
if (mode !== 'off') consumeTaskAgentVerdict(root, runId, now);
|
|
537
585
|
if (mode !== 'off' && activeNode(node, window) && state.nodes[node] !== 'ok') {
|
|
538
586
|
if (node === 'intake') {
|
|
539
587
|
if (mode === 'live' && deps.cards) { state.cards = wishCards(deps.cards()); state.skippedCards = []; }
|
package/src/mcp/mcp-oauth.ts
CHANGED
|
@@ -144,6 +144,8 @@ export interface PrepareMcpOAuthAuthorizationOpts extends McpOAuthRuntimeOpts {
|
|
|
144
144
|
scope?: string;
|
|
145
145
|
/** 저장된 등록의 포트를 못 열었을 때 새 client_id 로 다시 등록한다. */
|
|
146
146
|
forceReregister?: boolean;
|
|
147
|
+
/** Discovery already verified against resourceUrl by this caller. */
|
|
148
|
+
discovered?: { resource: ProtectedResourceMetadata; metadata: AuthorizationServerMetadata };
|
|
147
149
|
}
|
|
148
150
|
|
|
149
151
|
/** ⛔⭐⭐ MCP 자격은 «우주를 따라가지 않는다» — 격리 매뉴얼 §6 의 전역 사용자 자산이다.
|
|
@@ -968,7 +970,7 @@ export async function getValidAccessToken(
|
|
|
968
970
|
export async function prepareMcpOAuthAuthorization(
|
|
969
971
|
opts: PrepareMcpOAuthAuthorizationOpts,
|
|
970
972
|
): Promise<McpOAuthAuthorization> {
|
|
971
|
-
const { resource, metadata } = await discoverMcpOAuth(opts.resourceMetadataUrl, opts);
|
|
973
|
+
const { resource, metadata } = opts.discovered ?? await discoverMcpOAuth(opts.resourceMetadataUrl, opts);
|
|
972
974
|
const registration = await ensureClientRegistration(metadata, {
|
|
973
975
|
...opts,
|
|
974
976
|
...(opts.forceReregister ? { forceReregister: true } : {}),
|
|
@@ -222,23 +222,23 @@ const CODEX: TierMap = {
|
|
|
222
222
|
status: 'shipping',
|
|
223
223
|
},
|
|
224
224
|
balanced: {
|
|
225
|
-
model: 'gpt-6-
|
|
225
|
+
model: 'gpt-6.1-terra',
|
|
226
226
|
reasoningLevel: 'low',
|
|
227
|
-
label: 'GPT-6
|
|
228
|
-
rationale: 'Default ·
|
|
227
|
+
label: 'GPT-6.1 Terra · low',
|
|
228
|
+
rationale: 'Default · Codex CLI low effort · elanous 경로 기본 effort medium은 유지',
|
|
229
229
|
status: 'shipping',
|
|
230
230
|
},
|
|
231
231
|
better: {
|
|
232
|
-
model: 'gpt-6-
|
|
232
|
+
model: 'gpt-6.1-terra',
|
|
233
233
|
reasoningLevel: 'medium',
|
|
234
|
-
label: 'GPT-6
|
|
235
|
-
rationale: '
|
|
234
|
+
label: 'GPT-6.1 Terra · medium',
|
|
235
|
+
rationale: '일상 코딩·구현 역할 · Codex CLI 기본 effort=low에서 한 단계 높임',
|
|
236
236
|
status: 'shipping',
|
|
237
237
|
},
|
|
238
238
|
best: {
|
|
239
|
-
model: 'gpt-6-sol',
|
|
239
|
+
model: 'gpt-6.1-sol',
|
|
240
240
|
reasoningLevel: 'high',
|
|
241
|
-
label: 'GPT-6 Sol · high',
|
|
241
|
+
label: 'GPT-6.1 Sol · high',
|
|
242
242
|
rationale: 'Hard reasoning · architecture (⚠️ 여기부터 과잉설계·scope creep 신고가 급증한다)',
|
|
243
243
|
status: 'shipping',
|
|
244
244
|
},
|
|
@@ -247,7 +247,7 @@ const CODEX: TierMap = {
|
|
|
247
247
|
// (2026-09-23 정정: 종전 문면 「terra 대비 4배/3.3배」는 terra 가격을 2.5/15 로 잘못 안 값이었다)
|
|
248
248
|
// 기본을 올리면 사다리 맨 위 칸의 비용이 조용히 곱해진다. 더 깊게 필요하면 그때 올린다
|
|
249
249
|
// (`llm.codexReasoning.effort` = high/xhigh/max · 상한 판정은 reasoningEffortCeiling).
|
|
250
|
-
//
|
|
250
|
+
// Daily coding uses 6.1 Terra; this loaded tier remains GPT-6 Astra.
|
|
251
251
|
loaded: {
|
|
252
252
|
model: 'gpt-6-astra',
|
|
253
253
|
reasoningLevel: 'medium',
|
|
@@ -14,7 +14,7 @@ export function explicitTurnTier(
|
|
|
14
14
|
try {
|
|
15
15
|
const resolved = resolveLlmTier(cfg.modelTier, cfg.llm.provider, { sessionId });
|
|
16
16
|
if (resolved.source !== 'session-override' && resolved.source !== 'user-config-surface') return undefined;
|
|
17
|
-
//
|
|
17
|
+
// Codex tiers can share a model while differing by reasoning level (low·medium·high),
|
|
18
18
|
// so carrying the model alone left the slider a no-op there (10-01 live).
|
|
19
19
|
const reasoningEffort = resolved.reasoningLevel ? REASONING_EFFORT[resolved.reasoningLevel] : undefined;
|
|
20
20
|
return { model: resolved.model, tier: resolved.tier, source: resolved.source, ...(reasoningEffort ? { reasoningEffort } : {}) };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import type { MsgMirrorTransport, MirrorTarget } from './msg-mirror-runner.js';
|
|
3
|
+
|
|
4
|
+
type GhExec = (args: string[]) => string;
|
|
5
|
+
type Comment = { body?: unknown };
|
|
6
|
+
type Issue = { number?: unknown; title?: unknown; body?: unknown; pull_request?: unknown };
|
|
7
|
+
const keyOf = (target: MirrorTarget) => `${target.repo}#${target.issueNumber}`;
|
|
8
|
+
|
|
9
|
+
function defaultGhExec(args: string[]): string {
|
|
10
|
+
return execFileSync('gh', ['api', ...args], { encoding: 'utf8', timeout: 30_000, maxBuffer: 16 * 1024 * 1024 });
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function flatPages(output: string): unknown[] {
|
|
14
|
+
const parsed: unknown = JSON.parse(output);
|
|
15
|
+
if (!Array.isArray(parsed) || !parsed.every(Array.isArray)) throw new Error('GitHub paginated response is malformed');
|
|
16
|
+
return parsed.flat();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function firstLine(body: string): string { return body.split(/\r?\n/, 1)[0] ?? ''; }
|
|
20
|
+
|
|
21
|
+
/** GitHub issue/comment API adapter. Constructed only when the mirror command runs. */
|
|
22
|
+
export class GitHubMsgMirrorTransport implements MsgMirrorTransport {
|
|
23
|
+
private readonly comments = new Map<string, { rows: Comment[]; markers: Set<string> }>();
|
|
24
|
+
|
|
25
|
+
constructor(private readonly gh: GhExec = defaultGhExec) {}
|
|
26
|
+
|
|
27
|
+
beginTick(): void { this.comments.clear(); }
|
|
28
|
+
|
|
29
|
+
private loadComments(target: MirrorTarget): { rows: Comment[]; markers: Set<string> } {
|
|
30
|
+
const key = keyOf(target);
|
|
31
|
+
const cached = this.comments.get(key);
|
|
32
|
+
if (cached) return cached;
|
|
33
|
+
const rows = flatPages(this.gh(['--paginate', '--slurp', `repos/${target.repo}/issues/${target.issueNumber}/comments?per_page=100`]))
|
|
34
|
+
.map(row => {
|
|
35
|
+
if (!row || typeof row !== 'object' || typeof (row as Comment).body !== 'string') throw new Error('GitHub comment response is malformed');
|
|
36
|
+
return row as Comment;
|
|
37
|
+
});
|
|
38
|
+
const result = { rows, markers: new Set(rows.map(row => firstLine(row.body as string))) };
|
|
39
|
+
this.comments.set(key, result);
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
countComments(target: MirrorTarget): number { return this.loadComments(target).rows.length; }
|
|
44
|
+
|
|
45
|
+
hasMarker(target: MirrorTarget, marker: string): boolean {
|
|
46
|
+
return this.loadComments(target).markers.has(marker);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
postComment(target: MirrorTarget, body: string): void {
|
|
50
|
+
const comments = this.loadComments(target);
|
|
51
|
+
this.gh(['-X', 'POST', `repos/${target.repo}/issues/${target.issueNumber}/comments`, '-f', `body=${body}`]);
|
|
52
|
+
comments.rows.push({ body });
|
|
53
|
+
comments.markers.add(firstLine(body));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
createNextChannel(target: MirrorTarget, idempotencyKey: string): MirrorTarget {
|
|
57
|
+
const title = `Elanous seat-message mirror · ${idempotencyKey}`;
|
|
58
|
+
const existing = flatPages(this.gh(['--paginate', '--slurp', `repos/${target.repo}/issues?state=all&per_page=100&sort=created&direction=desc`]))
|
|
59
|
+
.find((row): row is Issue => !!row && typeof row === 'object' && typeof (row as Issue).title === 'string'
|
|
60
|
+
&& (row as Issue).title === title && (row as Issue).pull_request === undefined);
|
|
61
|
+
if (existing) {
|
|
62
|
+
if (!Number.isSafeInteger(existing.number) || (existing.number as number) < 1) throw new Error('existing mirror issue has invalid number');
|
|
63
|
+
return { repo: target.repo, issueNumber: existing.number as number };
|
|
64
|
+
}
|
|
65
|
+
const body = `Automated seat-message mirror channel.\n\nRotation key: ${idempotencyKey}\n`;
|
|
66
|
+
const output = this.gh(['-X', 'POST', `repos/${target.repo}/issues`, '-f', `title=${title}`, '-f', `body=${body}`]);
|
|
67
|
+
const issue: unknown = JSON.parse(output);
|
|
68
|
+
if (!issue || typeof issue !== 'object' || !Number.isSafeInteger((issue as Issue).number)
|
|
69
|
+
|| ((issue as Issue).number as number) < 1) throw new Error('GitHub did not return the new mirror issue number');
|
|
70
|
+
return { repo: target.repo, issueNumber: (issue as Issue).number as number };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
linkAndCloseChannel(from: MirrorTarget, to: MirrorTarget): void {
|
|
74
|
+
const marker = `<!-- elanous-msg-mirror:rotated-to:${to.repo}#${to.issueNumber} -->`;
|
|
75
|
+
if (!this.hasMarker(from, marker)) {
|
|
76
|
+
this.postComment(from, `${marker}\nMirror channel moved to [#${to.issueNumber}](https://github.com/${to.repo}/issues/${to.issueNumber}).`);
|
|
77
|
+
}
|
|
78
|
+
this.gh(['-X', 'PATCH', `repos/${from.repo}/issues/${from.issueNumber}`, '-f', 'state=closed']);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { Message } from './msg-store.js';
|
|
2
|
+
|
|
3
|
+
/** Public GitHub mirror policy for the seat-message ledger. */
|
|
4
|
+
export const MIRROR_EVENT_KINDS = ['incident', 'decision', 'correction'] as const;
|
|
5
|
+
export const MIRROR_SUMMARY_INTERVAL_MS = 2 * 60 * 60 * 1000;
|
|
6
|
+
export const MIRROR_ROTATE_AT = 2_300;
|
|
7
|
+
|
|
8
|
+
const mirrorKinds: ReadonlySet<string> = new Set(MIRROR_EVENT_KINDS);
|
|
9
|
+
|
|
10
|
+
export type MirrorEvent = Pick<Message, 'id' | 'from' | 'to' | 'body' | 'kind' | 'createdAt'>;
|
|
11
|
+
|
|
12
|
+
/** Routine reports and loop traffic never become public mirror comments. */
|
|
13
|
+
export function isMirrorEvent(message: Pick<Message, 'kind'>): boolean {
|
|
14
|
+
return typeof message.kind === 'string' && mirrorKinds.has(message.kind);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Returns only new eligible messages, in ledger order, without changing the input. */
|
|
18
|
+
export function selectMirrorEvents(messages: readonly MirrorEvent[], afterId: number): MirrorEvent[] {
|
|
19
|
+
if (!Number.isSafeInteger(afterId) || afterId < 0) throw new Error('afterId must be a nonnegative safe integer');
|
|
20
|
+
return messages
|
|
21
|
+
.filter(message => Number.isSafeInteger(message.id) && message.id > afterId && isMirrorEvent(message))
|
|
22
|
+
.slice()
|
|
23
|
+
.sort((a, b) => a.id - b.id);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Build a deterministic, non-LLM summary for one closed two-hour interval. */
|
|
27
|
+
export function buildMirrorSummary(
|
|
28
|
+
messages: readonly MirrorEvent[],
|
|
29
|
+
windowStart: string,
|
|
30
|
+
windowEnd: string,
|
|
31
|
+
): string | null {
|
|
32
|
+
const start = Date.parse(windowStart);
|
|
33
|
+
const end = Date.parse(windowEnd);
|
|
34
|
+
if (!Number.isFinite(start) || !Number.isFinite(end) || end <= start) throw new Error('invalid summary window');
|
|
35
|
+
const events = messages
|
|
36
|
+
.filter(message => isMirrorEvent(message) && Number.isFinite(Date.parse(message.createdAt)))
|
|
37
|
+
.filter(message => {
|
|
38
|
+
const at = Date.parse(message.createdAt);
|
|
39
|
+
return at >= start && at < end;
|
|
40
|
+
})
|
|
41
|
+
.sort((a, b) => a.id - b.id);
|
|
42
|
+
if (events.length === 0) return null;
|
|
43
|
+
|
|
44
|
+
const counts = new Map<string, number>();
|
|
45
|
+
for (const event of events) counts.set(event.kind!, (counts.get(event.kind!) ?? 0) + 1);
|
|
46
|
+
const breakdown = MIRROR_EVENT_KINDS
|
|
47
|
+
.filter(kind => counts.has(kind))
|
|
48
|
+
.map(kind => `${kind} ${counts.get(kind)}`)
|
|
49
|
+
.join(' · ');
|
|
50
|
+
const from = new Date(start).toISOString();
|
|
51
|
+
const to = new Date(end).toISOString();
|
|
52
|
+
return `## Seat message summary (${from} – ${to})\n\n${events.length} mirrored events · ${breakdown}\n\n` +
|
|
53
|
+
events.map(event => `- #${event.id} **${event.kind}** · ${event.from} → ${event.to}: ${event.body.trim()}`).join('\n');
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Rotate before GitHub's hard comment wall; callers must persist the new channel pointer. */
|
|
57
|
+
export function shouldRotateMirrorChannel(commentCount: number, threshold: number = MIRROR_ROTATE_AT): boolean {
|
|
58
|
+
if (!Number.isSafeInteger(commentCount) || commentCount < 0) throw new Error('commentCount must be a nonnegative safe integer');
|
|
59
|
+
if (!Number.isSafeInteger(threshold) || threshold < 1 || threshold >= 2_500) throw new Error('threshold must be between 1 and 2499');
|
|
60
|
+
return commentCount >= threshold;
|
|
61
|
+
}
|