elanous 0.2.24 → 0.2.25
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/chunks/1027.a0f04663d24c2779.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1038.676007ae505822e7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1113.a37eadf7f740d955.js +1 -0
- package/apps/pwa/out/_next/static/chunks/112-fa7c526c20ce1405.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1144.5fa1fa1d48dbcd12.js +36 -0
- package/apps/pwa/out/_next/static/chunks/1146.80d15ea7c6e6ee95.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1157.f08bf2b70915e176.js +148 -0
- package/apps/pwa/out/_next/static/chunks/119b405e.8fdd0e44d1ff37aa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1296.04560d98e73fbf51.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1314-f604ba013ec535b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1454-37fd16f479f5554a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1464.f3209af0d8ae4ff2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8532.a86e99acf9b761cb.js → 1516.83dd2c1b86b4e507.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{89849432.9eaa2f4c9c010965.js → 16e57f67.3ea19e893461e611.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/1729-d73dd25e564679d4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1505.5826671109111e75.js → 1743.563d3168e95825ef.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/1843.5924c24295243261.js +27 -0
- package/apps/pwa/out/_next/static/chunks/1987.e28149724b92918b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2066-5ca18ffa5a4be68b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2240.d10a66695155fd93.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2391.e2cbc98d4abbb41a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2528.3868070ef1be69f9.js +24 -0
- package/apps/pwa/out/_next/static/chunks/2566-734cb83bbd405886.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2697.76ca2ac3efef6f3b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/275.0e6bad414729bfa0.js +32 -0
- package/apps/pwa/out/_next/static/chunks/2803-33bdae771855a8d1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2846.d6a433b8663819a5.js +309 -0
- package/apps/pwa/out/_next/static/chunks/3143.257997a5f1ed79df.js +34 -0
- package/apps/pwa/out/_next/static/chunks/{5967-c0a80f8ffe5d4050.js → 3259-86f3be56e43eaf6a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3280-e177c33bfbdcfb0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3294-2b6a6d45a46a6c1c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3309.364573ceedbdfd5f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3522.758840fc5e7fe630.js +287 -0
- package/apps/pwa/out/_next/static/chunks/3525-a7c989c1a661e880.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3694.b1a66387756458c0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/370.124f9e678a76fc01.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3797-9643105335e660fe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5578.ac963634373b28c6.js → 4084.15ecaf4240bd9e77.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/4089-b3382b8843114eee.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8438.ee7f0df3b3f6fcb4.js → 4204.a409ab6250c0f6a8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4293.928a8d573c16aab7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4402.f9238a3b18a7bd43.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4490-9b090b0f9427f902.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4548.13502d0ca3b4f862.js +8 -0
- package/apps/pwa/out/_next/static/chunks/4565-67e4c620597965c8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7905.b230b9d06cb4ad5d.js → 4593.10f5b9bd702d4a6c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4599-548bc96cda44a5a7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4625.206574e33a9e7ae8.js +104 -0
- package/apps/pwa/out/_next/static/chunks/4862-392c9a71f0d8dfb4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5054.2906d1b02542edc5.js +149 -0
- package/apps/pwa/out/_next/static/chunks/{8569.b853a8daa8f31d12.js → 5081.a240b63fad28663a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5102-c822bbbee5a022a4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5194-8c93f2e7e4b6f717.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5305-bacd7eca0b9a5848.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5311.9071ee3f44fd7ff5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5369.9f34353442daa421.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2528.0af5c0e1fad88df6.js → 5408.377c8c543635b81f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9502-32c5dc22e8f120f5.js → 5492-e05e26a033ba80d2.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/5785-ea8d2c633b6688e3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/589-49d730cb8138b397.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5904-264a6412ae3c9028.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5980.728531d5c566535c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/599-a914cc0468f56143.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6011.f525002e21bef0ac.js +23 -0
- package/apps/pwa/out/_next/static/chunks/6132.4381ab93683f1acf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6149.2e698635e454d8f6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5974.360f8441eb0ac1ec.js → 6196.34d6b229079e9e28.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6356-0afafc4230cf9767.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6406.64756073f7df35b8.js +77 -0
- package/apps/pwa/out/_next/static/chunks/6479-16e62aedafa0e310.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6599.b5246b46a2453329.js +64 -0
- package/apps/pwa/out/_next/static/chunks/{ce383d63.d2ede338788ed18e.js → 65ebff95.081daeff622d238e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6610.5c26eec011565acb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/666.37d18474edc1c552.js +2 -0
- package/apps/pwa/out/_next/static/chunks/6904.a0b5b1ed4f2d2c20.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{83cfc5c8.349535543c1548b6.js → 6def8a8e.c81f9ca41028eccf.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7247-1f4aba94aba50d9f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7274-e71a7c5b7760cd02.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7290.1fcaeef3adb5d0d4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7477-2c64e42760f82f33.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2721.bc9a8f36bd85c07a.js → 7483.ba01c6c209b81bba.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7505-47002b76ff1aef6c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7600-11884ca4da68e5d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7607.40d8bb3689697ccb.js +62 -0
- package/apps/pwa/out/_next/static/chunks/{6702.ebbd165d5e4a4a14.js → 7752.5cbdd0b433c54af9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7763.f51fcc19ca1414ec.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7785.846140c859b1adf6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7807-a0fdac6393e0bf36.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7837-20a63b4b7e9342b1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/800.7815414cf280545d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8925-2abfb48af477fb7f.js → 8085-1e5fce59500a2cc2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8100.415f2105faa63e97.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8290.701aa42ed13aa767.js +226 -0
- package/apps/pwa/out/_next/static/chunks/{b4e12462-5fab4a813a63dadd.js → 83a80514-b897b64df43ce108.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8444.d9c74214a3145a43.js +93 -0
- package/apps/pwa/out/_next/static/chunks/8569.98c915534928c7f9.js +24 -0
- package/apps/pwa/out/_next/static/chunks/{8264.00e434fbd02e9311.js → 8578.dff22d988cc2b106.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/8591.b1c7f876e5ec7cfb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8715-f63756021d3ab989.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8879.776c2ec7732aa114.js +115 -0
- package/apps/pwa/out/_next/static/chunks/8881.ddca15b3c82c490c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8946.5da5c87f32a2e1a8.js +41 -0
- package/apps/pwa/out/_next/static/chunks/9117.080b9b75be90e14d.js +74 -0
- package/apps/pwa/out/_next/static/chunks/9167.f3ecb28f367d6e69.js +94 -0
- package/apps/pwa/out/_next/static/chunks/9224.66095370ee28c93b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9238-0682b013c83d6449.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7518.49161e8f5814abdb.js → 9311.24c8f5ea793253dd.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9976.8f28864317639fe6.js → 94.4cfed21c0b781a06.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/9449.d3ed795da4befb1c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/949.1e7d45ccb71580aa.js +90 -0
- package/apps/pwa/out/_next/static/chunks/9638-d268329f2c6f4f8d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{0e3acd34.d42b2ef87fdf4234.js → 973cbf1b.3bbcf2b41548eca7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9842-d6644eb53d3dc6bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9863.94ca3263e760696e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6571-926ddf024a6ad5df.js → 9917-9e26abc5f7772735.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9938.b23e4d4dfa0114cd.js +79 -0
- package/apps/pwa/out/_next/static/chunks/{740.90b31555290236a9.js → 9974.e77b4ff4884557b3.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{4c5e95ce.83e9b16add6fcd8c.js → ab4d57c2.e90bc2cb31949045.js} +7 -7
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-d9babd8795f396a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-9360b1285b2a346e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-f08f6529d09ffae1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-f000d54d258f9ef6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/{page-24282bf9f90031a5.js → page-b12149c51f7d04b1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-22f674e7e4c2c9d5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-8888733e40cea6d1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-9717ec6964b92276.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-44eaad486bc98a45.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-97fa6cf3d34c7eb9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-305cd294e754906e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-dea4b795741126fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-35e05d7450461a67.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-45889e7070d11126.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-16a2e893f83ae4d0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-d9babd8795f396a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-b2638013c0bf7dfd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-56888bc744e08dac.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-c44f93a41167536f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-952c6ceec6d9de38.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-6d0202af568f4c63.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-1b810474507f3702.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-74366ae2693a7d95.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-4fb6fc34e20c07b7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-e9502921f4f01b1f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-b6169ea2f09cf287.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-6a14333d1b1b3967.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-8c91a9a66c9ec90a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/{page-1d809a87139dd024.js → page-4e634c5b98fd4e93.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ed3070d637850548.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/{page-b92caddb5c715f30.js → page-b9cc8a10bc6078b4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/page-3d3fc73dd187ed52.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-128458c8d86fbb5f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-9c04dac0831c2bbb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-cf0c2b0183991d09.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-04de9ca6d52a3893.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-62527677bbc2fdc4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-9a2e09c4a311764c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-d9babd8795f396a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-bfeb35d69e8b24bb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-89cb33bced824e4a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-b008aff96be56654.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-814394dcbae789b1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-6a87325c87f09dd2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-6445ac4cbb8dd869.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-852170303c6cd755.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-087ceeb975ef272b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-97c7361cc2a19319.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-20162174b77f96cf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-8c6901833f897496.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-05a4b2c9b91034aa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/dcf24383-2f82e35f2d827393.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{53746282.1be36038d1abd949.js → e117f801.e92bf10242653497.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/e87d89b9.2e71c0ae475d28a1.js +122 -0
- package/apps/pwa/out/_next/static/chunks/{0673cc54.8e2ef1c23e49e190.js → f4dfbfc0.a69fb12f854882aa.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/framework-bf135b997155e90e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-5571537543bea91c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-25c51c7df7f3a442.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-e3b2c1f5d82abd65.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-083f2e23e9bc3641.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-e94d22b7a028217b.js +1 -0
- package/apps/pwa/out/_next/static/{Q-7iofoxOEv1WX18S35of → dRS6lEhSRRBr1abbzp7fJ}/_buildManifest.js +1 -1
- 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/graphs/release/release-loop.yaml +5 -5
- package/graphs/steward/recipes.yaml +4 -0
- package/graphs/steward/steward.yaml +10 -1
- package/package.json +1 -1
- package/scripts/bench-report.ts +46 -1
- package/scripts/ci-typecheck-changed.ts +7 -5
- package/scripts/release-loop/auto-approve-node.ts +6 -0
- package/scripts/release-loop/gate-closure.ts +286 -0
- package/scripts/release-loop/gate-node.ts +73 -13
- package/scripts/release-loop/gate-partial.ts +34 -6
- package/scripts/release-loop/ops-upgrade-node.ts +63 -42
- package/scripts/release-loop/publish-node.ts +6 -0
- package/scripts/release-loop/resume-release.ts +37 -10
- package/scripts/release-loop/resume.ts +69 -4
- package/scripts/tsc-baseline-cache.ts +28 -3
- package/scripts/usage-rollup.ts +27 -13
- package/scripts/ux-sim.ts +30 -1
- package/skills/youtube-master/scripts/main.ts +4 -1
- package/skills/youtube-master/src/obsidian.ts +9 -0
- package/src/agent-substrate/acp-implementer.ts +14 -7
- package/src/agent-substrate/pr-reviewer.ts +30 -10
- package/src/agent-substrate/self-review-cli.ts +126 -10
- package/src/budget/cost-tier-advisor.ts +91 -0
- package/src/budget/shadow-arms.ts +77 -0
- package/src/budget/types.ts +5 -3
- package/src/budget/unified-usage.ts +172 -8
- package/src/cli/doctor-cli.ts +21 -0
- package/src/cli/friendly-errors.ts +113 -0
- package/src/cli/intake-cli.ts +3 -1
- package/src/cli/memory-cli.ts +182 -0
- package/src/cli/model-watch-cli.ts +4 -1
- package/src/cli/pr-land-pod-shadow.ts +54 -0
- package/src/cli/release-cli.ts +9 -7
- package/src/cli/release-run-if-ready.ts +11 -0
- package/src/cli/resource-cli.ts +48 -0
- package/src/cli/retro-cli.ts +12 -3
- package/src/cli/seat-requests-cli.ts +25 -0
- package/src/cli/tasks-cli.ts +31 -7
- package/src/cli/usage-cli.ts +3 -1
- package/src/compact/verify-probe.ts +23 -3
- package/src/context-card/index.ts +50 -0
- package/src/control/control-status.ts +30 -1
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +4 -138
- package/src/dashboard/slash-runtime/shell-slash.ts +145 -0
- package/src/debug/log-diet.ts +16 -4
- package/src/domains/morning-essential.ts +18 -3
- package/src/domains/release-tool.ts +4 -0
- package/src/execution-loop/launch-gate.ts +158 -2
- package/src/fleet/host-doctor.ts +375 -0
- package/src/goals/judge.ts +20 -6
- package/src/graph-runner/runner.ts +9 -5
- package/src/graph-wizard/archetypes.ts +14 -8
- package/src/graph-wizard/generate.ts +77 -1
- package/src/grok.ts +13 -7
- package/src/harness/harness-cli-command.ts +56 -47
- package/src/harness/harness-stop.ts +82 -12
- package/src/index.ts +17 -175
- package/src/intake-plane/collect-github.ts +7 -2
- package/src/intake-plane/lens.ts +46 -4
- package/src/intake-plane/requirement-funnel.ts +53 -1
- package/src/intelligence-map/catalog-feed.ts +119 -0
- package/src/intelligence-map/model-watch-intake.ts +40 -0
- package/src/intelligence-map/model-watch-mission.ts +14 -1
- package/src/llm/open-weight-discipline.ts +21 -0
- package/src/llm.ts +4 -8
- package/src/maturity/feature-maturity.ts +1 -1
- package/src/nexus/api/http-server.ts +22 -0
- package/src/oauth/codex-account-rotation.ts +4 -1
- package/src/oauth/codex-account-store.ts +20 -7
- package/src/oauth/codex-quota-policy.ts +33 -4
- package/src/preview/terminal.ts +15 -5
- package/src/project/project-store.ts +20 -0
- package/src/release-loop/auto-start.ts +7 -5
- package/src/release-loop/checklist.ts +11 -1
- package/src/release-loop/gate-shards.ts +4 -0
- package/src/release-loop/light-rc.ts +84 -13
- package/src/release-loop/merged-pr-checklist.ts +35 -5
- package/src/release-loop/rehearsal.ts +1 -1
- package/src/seat-loop/duty-ledger.ts +64 -0
- package/src/self-dev/decompose.ts +37 -3
- package/src/self-dev/dev-pipeline.ts +32 -7
- package/src/self-dev/draft-residue.ts +16 -6
- package/src/self-dev/draft-sweep.ts +52 -4
- package/src/self-dev/fabric-decompose-adapter.ts +9 -2
- package/src/self-dev/run-supervisor.ts +37 -7
- package/src/self-implement/gate-cli.ts +29 -10
- package/src/self-implement/gate-remote.ts +4 -1
- package/src/self-implement/goal-author.ts +12 -2
- package/src/self-implement/goal-new-paths.ts +42 -0
- package/src/self-implement/host-regate.ts +124 -30
- package/src/self-implement/importer-test-index.ts +3 -1
- package/src/self-implement/l8-merge-queue.ts +80 -2
- package/src/self-implement/merge-train.ts +19 -0
- package/src/self-implement/off-diff-evidence.ts +40 -1
- package/src/self-implement/orchestrator.ts +88 -19
- package/src/self-implement/premise-review.ts +159 -0
- package/src/self-implement/regate-detail.ts +79 -0
- package/src/self-implement/review-deferred-to-host.ts +21 -0
- package/src/self-implement/rework-budget-judgment.ts +23 -3
- package/src/self-implement/running-runs.ts +2 -2
- package/src/self-implement/scope-adjacency.ts +23 -0
- package/src/self-implement/seams.ts +42 -7
- package/src/skills/tools/agent.ts +16 -1
- package/src/skills/tools/persistent-grounding.ts +11 -1
- package/src/skills/tools/shell.ts +33 -1
- package/src/steward/rejudge-tick.ts +142 -0
- package/src/task-agent/board.ts +92 -3
- package/src/task-agent/card-evidence.ts +88 -1
- package/src/task-agent/cover.ts +65 -0
- package/src/task-agent/parent-host.ts +27 -3
- package/src/task-agent/rejudge-on-head.ts +151 -7
- package/src/task-agent/review-result-capture.ts +3 -1
- package/src/task-agent/shadow.ts +12 -0
- package/src/task-agent/task-hand.ts +4 -1
- package/src/task-orchestrator/surfaces/pod-command-job.ts +14 -0
- package/src/task-orchestrator/surfaces/pod-host-acp-review.ts +122 -0
- package/src/task-orchestrator/surfaces/pod-manifest-test-normalize.ts +23 -0
- package/src/task-orchestrator/surfaces/pod-pool.ts +53 -0
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +235 -28
- package/src/user-config.ts +18 -4
- package/src/ux-sim/fault-cred-expiry.ts +100 -0
- package/src/ux-sim/fault-pod-death.ts +74 -0
- package/src/ux-sim/fault-pool-cap.ts +81 -0
- package/src/version/packed-revision.json +1 -1
- package/src/webclone/qa-table.ts +22 -0
- package/apps/pwa/out/_next/static/chunks/0a09e062-34f747a17d8d8c2e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1168.a0fb3d9db76c00bd.js +0 -77
- package/apps/pwa/out/_next/static/chunks/1325-dc3f3c21eb181cb4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1357.a843c41d2cd7ec31.js +0 -34
- package/apps/pwa/out/_next/static/chunks/1430.53f49882b17607c2.js +0 -24
- package/apps/pwa/out/_next/static/chunks/1459-be6509b3419d8a9f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/153.0a4e3cd516930491.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1572.7bc291352e241a45.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1593-d07ad068c120dfb0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1608.b7c900baa56cab32.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1615-4d8156febaac4b35.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1646.e03f0fbc26bc72f6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1669-da843ed73aa301f5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/176.13ba0659e3e96fd4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1990.9c60f495ef33c070.js +0 -36
- package/apps/pwa/out/_next/static/chunks/2042e469.f86158dd5c1e51a1.js +0 -122
- package/apps/pwa/out/_next/static/chunks/2543-28ec6aeb80a5e1e1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2561.43c99d6ee914ee6a.js +0 -62
- package/apps/pwa/out/_next/static/chunks/2638.b39ab2f674caa1a5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/272-0eed0fb0aab716b6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2778.67e0c1d484189ccf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2841.10ff309f6a3168af.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2886-9639f97d523d752a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2978.57fb87ce21cc5a85.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3664.15f968c39d15bd28.js +0 -149
- package/apps/pwa/out/_next/static/chunks/3786-935eb3fcde90e496.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3813.df4a01ae89c6f63f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3961-aaae04ed1d32622f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3992.f79c70480e8c4077.js +0 -309
- package/apps/pwa/out/_next/static/chunks/40-413e8641de9ed1e5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4054-521f11a503daed64.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4315.e7356f34c7d8ec79.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4489-bf629de6f04f7681.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4540.557733cc88c6a82b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/462.0275b4338c5b6337.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4658-7ed9266098a787e4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4945-0f4046cfc3228ea3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5105-18b4165c5d3a86b0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5205-6992210fe31f45f4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5287-72898b126d722457.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5313.1697309c532b9856.js +0 -2
- package/apps/pwa/out/_next/static/chunks/5474.991b90688c3cb321.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5544-871146192d095594.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5935.d5e8ca3e096772e8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6006.84e8b418a7a0db97.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6013-1267ba7454d6764b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6038-1e0f7ee1086da4cf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/617.709dd0019fe99796.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6261.fb9bf94947094636.js +0 -74
- package/apps/pwa/out/_next/static/chunks/6411.1966866fae31ffa9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6481-b829d99aa8d158f5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6541.2b7daa043100d0fa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6597.2d7a6d77ab485b27.js +0 -64
- package/apps/pwa/out/_next/static/chunks/67.5dd2dc543c2fa3de.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6777-312496b0d774719b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/681.0116f7036cfb4e8d.js +0 -32
- package/apps/pwa/out/_next/static/chunks/6871.30b2bf23b3126e36.js +0 -24
- package/apps/pwa/out/_next/static/chunks/6882.737d366d54e29d83.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7035.54c2c535164b1c9b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7086-8bfa7e8f796a03d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7126.5e5599f251726b67.js +0 -93
- package/apps/pwa/out/_next/static/chunks/7203-47ff0740a293e284.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7268.017f49dafb5f0ff3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7355.5d65a87e9567ae08.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7392.4018c2a62177f296.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7471.3a3d1be50559cfb8.js +0 -148
- package/apps/pwa/out/_next/static/chunks/7500.73489a345cef2201.js +0 -226
- package/apps/pwa/out/_next/static/chunks/7565.c2f72a15c1ed0396.js +0 -27
- package/apps/pwa/out/_next/static/chunks/7651.6d1c984d3d8587a4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7713.7ab863ed59b2d661.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7793.d7cd2026767ddd54.js +0 -115
- package/apps/pwa/out/_next/static/chunks/7837.c7c267e5dceadb11.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7891.09266382daf70d1c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7990-cbf6a01bcbdcb7e6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8119-819c549e0c197786.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8186-74ea19a3700d04a8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8267-e7b3262b735ae106.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8386.86518e55b75f7cf5.js +0 -8
- package/apps/pwa/out/_next/static/chunks/8437.ba6eeeb29590042f.js +0 -23
- package/apps/pwa/out/_next/static/chunks/8469-1500be57e582296f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8483-7164cecdaf178ca6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8722-4c940f02c496ad36.js +0 -1
- package/apps/pwa/out/_next/static/chunks/887-41d0dcf5af48c628.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9039.da86361496797522.js +0 -90
- package/apps/pwa/out/_next/static/chunks/905.d5745a25884754d4.js +0 -94
- package/apps/pwa/out/_next/static/chunks/9089-d909f3d4478b0628.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9096.dc5c7a267f83790c.js +0 -41
- package/apps/pwa/out/_next/static/chunks/93.a567257b6bdb7fe4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9320.419acb9665b46597.js +0 -287
- package/apps/pwa/out/_next/static/chunks/9356.b8ceda6634612ff8.js +0 -79
- package/apps/pwa/out/_next/static/chunks/94.e9e1043b35cd3eed.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9400-7498ea90b2e6ee8f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9930-58644af9c813d6e1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9932.367cf4725fedd6e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9935.1628b904cdc8ce0e.js +0 -104
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-a2aa8709d193ee0d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-3b9fc39362473ae7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-f2b62c19ca68fef8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-d7602d489edf5f37.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-8b7c5ab6b5bc8d64.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-4eb84d454f8c3415.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-b2e494bdad57fcb5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-c0ab229673a8b0eb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-3e2b45f3c36dbac4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-c22aa511b28743ad.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-26345242e4049f55.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-bf88c0f558d8ef54.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-52fec523e5b5d3ad.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-67723dfdcde92b31.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-a2aa8709d193ee0d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-22725e2570f1126b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-1891335950d68b70.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-3267af1ebdc73cf5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-c314b75c11234998.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-9f9c85415f61782b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-c1d4276059085587.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-833aab587f26ad4c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-8526c17ae38e6a50.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-f998637a8402115c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-b7bb53828b17b335.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-1b1850de0257e46d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-6f23159fedb41f67.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-da9e570234d481fd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-8ce3a38e210b810a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-57ffeeb6019440fd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-abbb417bf514630b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-2c2b3f29cec1efa4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-9369279f72fc7b51.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-64861f14039499c3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ddc4c93efd8ab94b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-a2aa8709d193ee0d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-901a1391b81053bc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-68d9bbaac9841a58.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-b5c0c996f329371e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-89881ccbcf728978.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-0e87a803b3d7165e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-58d4e5cb30ef4871.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-02ce4c3b5f39e4d2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-e620d1bb8eadcec2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-acf868c64d77f950.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-54fa605fa6dba457.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-bc79f0833533fa84.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-d5c4398eea03d8f3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/cd39fa05.fac4545f42a3ef70.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-b2763b10dc6b3836.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-27893e93b0ec193d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-f280047194e1daf8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-e90eff2d0b70564c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-70f2d654b3435d34.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-4794f053bd5e4230.js +0 -1
- /package/apps/pwa/out/_next/static/{Q-7iofoxOEv1WX18S35of → dRS6lEhSRRBr1abbzp7fJ}/_ssgManifest.js +0 -0
|
@@ -387,12 +387,13 @@ import {
|
|
|
387
387
|
import { resolveLocalEndpoints, runLocalLLMCompat } from '../../local-llm-test.js';
|
|
388
388
|
import { getShellRegistry } from '../../shell-runner/registry.js';
|
|
389
389
|
import { renderHandleStatusChip, type HandleStatus } from '../../status/chip.js';
|
|
390
|
-
import { decideAttach } from '../../shell-runner/attach-routing.js';
|
|
391
390
|
import type { DashboardTermSlashRuntime } from '../term-slash-runtime.js';
|
|
392
391
|
import { resolveTerminalMoveDestination } from '../../terminal-matrix/mobility.js';
|
|
393
392
|
import { loadPersistedSessions } from '../../terminal/session-persistence.js';
|
|
394
393
|
import { dispatchTerminalModalObserve } from '../../skills/tools/terminal-modal.js';
|
|
395
394
|
import { SlashCommandRegistry } from './registry.js';
|
|
395
|
+
import { registerShellSlash } from './shell-slash.js';
|
|
396
|
+
export { registerShellSlash } from './shell-slash.js';
|
|
396
397
|
import { cronSecondDueAt, filterLoopRows, formatLoopsTable, localLoopRows, type LoopsTableRow } from './loops-table.js';
|
|
397
398
|
import { loopCronVerdict } from '../../loops/verdict.js';
|
|
398
399
|
import { checklistBoardSlash } from '../../release-loop/checklist-board.js';
|
|
@@ -3715,143 +3716,8 @@ export function buildDashboardSlashRegistry(nowDeps?: ContextNowDeps, decideLedg
|
|
|
3715
3716
|
ctx.setChatScrollOffset(-1);
|
|
3716
3717
|
});
|
|
3717
3718
|
|
|
3718
|
-
|
|
3719
|
-
|
|
3720
|
-
// ShellRegistry singleton (set up in the boot block in
|
|
3721
|
-
// dashboard/index.ts). Kill uses prefix matching on id so users
|
|
3722
|
-
// don't have to type the full slug; attach routes a vw-mode handle
|
|
3723
|
-
// into the foreground via VW switch.
|
|
3724
|
-
//
|
|
3725
|
-
// getShellRegistry + renderHandleStatusChip + decideAttach hoisted
|
|
3726
|
-
// from dynamic to static imports here. Host-local helpers
|
|
3727
|
-
// (shellSlashRuntime + openShellRollupPopup + virtualWindows ops)
|
|
3728
|
-
// come via ctx.shellSlash.
|
|
3729
|
-
const sub = (args[0] ?? '').toLowerCase();
|
|
3730
|
-
const reg = getShellRegistry();
|
|
3731
|
-
if (!sub || sub === 'help') {
|
|
3732
|
-
for (const line of ctx.shellSlash.slashRuntime.helpLines()) ctx.chatLines.push(line);
|
|
3733
|
-
ctx.setChatScrollOffset(-1);
|
|
3734
|
-
return;
|
|
3735
|
-
}
|
|
3736
|
-
const resolveHandle = (needle: string) => {
|
|
3737
|
-
const want = needle.toLowerCase();
|
|
3738
|
-
if (!want) return null;
|
|
3739
|
-
const exact = reg.get(needle);
|
|
3740
|
-
if (exact) return exact;
|
|
3741
|
-
const all = reg.list();
|
|
3742
|
-
const matches = all.filter(h => h.id.toLowerCase().startsWith(want));
|
|
3743
|
-
if (matches.length === 1) return matches[0]!;
|
|
3744
|
-
return matches.length > 1 ? { ambiguous: matches } as const : null;
|
|
3745
|
-
};
|
|
3746
|
-
if (sub === 'rollup') {
|
|
3747
|
-
// N2 — same popup as the 🐚 pill click, openable from
|
|
3748
|
-
// keyboard-only sessions (SSH / nested tmux).
|
|
3749
|
-
await ctx.shellSlash.openRollupPopup();
|
|
3750
|
-
return;
|
|
3751
|
-
}
|
|
3752
|
-
if (sub === 'list') {
|
|
3753
|
-
// N3 — `/shell list all` bypasses the 30s settled TTL so users
|
|
3754
|
-
// can audit everything. Default stays live-only.
|
|
3755
|
-
const showSettled = (args[1] ?? '').toLowerCase() === 'all';
|
|
3756
|
-
const all = reg.list(showSettled ? { includeSettled: true } : undefined);
|
|
3757
|
-
ctx.chatLines.push('');
|
|
3758
|
-
if (all.length === 0) {
|
|
3759
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.emptyListLine(showSettled));
|
|
3760
|
-
ctx.setChatScrollOffset(-1);
|
|
3761
|
-
return;
|
|
3762
|
-
}
|
|
3763
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.listHeaderLine(all.length, showSettled));
|
|
3764
|
-
for (const h of all) {
|
|
3765
|
-
const chip = renderHandleStatusChip(h.status);
|
|
3766
|
-
const label = reg.getVwLabel(h.id);
|
|
3767
|
-
const idTail = h.id.length > 10 ? `…${h.id.slice(-8)}` : h.id;
|
|
3768
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.listEntryLine({
|
|
3769
|
-
idTail,
|
|
3770
|
-
chip,
|
|
3771
|
-
mode: h.mode,
|
|
3772
|
-
label,
|
|
3773
|
-
}));
|
|
3774
|
-
}
|
|
3775
|
-
ctx.setChatScrollOffset(-1);
|
|
3776
|
-
return;
|
|
3777
|
-
}
|
|
3778
|
-
if (sub === 'kill') {
|
|
3779
|
-
const needle = args[1] ?? '';
|
|
3780
|
-
if (!needle) {
|
|
3781
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.killUsageLine());
|
|
3782
|
-
ctx.setChatScrollOffset(-1);
|
|
3783
|
-
return;
|
|
3784
|
-
}
|
|
3785
|
-
const res = resolveHandle(needle);
|
|
3786
|
-
if (!res) {
|
|
3787
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.noHandleMatchesLine(needle));
|
|
3788
|
-
} else if ('ambiguous' in res) {
|
|
3789
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.ambiguousHeaderLine(needle));
|
|
3790
|
-
for (const h of res.ambiguous) {
|
|
3791
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.ambiguousEntryLine({ id: h.id }));
|
|
3792
|
-
}
|
|
3793
|
-
} else {
|
|
3794
|
-
try {
|
|
3795
|
-
res.kill();
|
|
3796
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.killedLine(res.id));
|
|
3797
|
-
} catch (err) {
|
|
3798
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.killFailedLine(
|
|
3799
|
-
err instanceof Error ? err.message : String(err),
|
|
3800
|
-
));
|
|
3801
|
-
}
|
|
3802
|
-
}
|
|
3803
|
-
ctx.setChatScrollOffset(-1);
|
|
3804
|
-
return;
|
|
3805
|
-
}
|
|
3806
|
-
if (sub === 'attach') {
|
|
3807
|
-
const needle = args[1] ?? '';
|
|
3808
|
-
if (!needle) {
|
|
3809
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.attachUsageLine());
|
|
3810
|
-
ctx.setChatScrollOffset(-1);
|
|
3811
|
-
return;
|
|
3812
|
-
}
|
|
3813
|
-
const res = resolveHandle(needle);
|
|
3814
|
-
if (!res) {
|
|
3815
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.noHandleMatchesLine(needle));
|
|
3816
|
-
ctx.setChatScrollOffset(-1);
|
|
3817
|
-
return;
|
|
3818
|
-
}
|
|
3819
|
-
if ('ambiguous' in res) {
|
|
3820
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.ambiguousHeaderLine(needle));
|
|
3821
|
-
for (const h of res.ambiguous) {
|
|
3822
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.ambiguousEntryLine({ id: h.id }));
|
|
3823
|
-
}
|
|
3824
|
-
ctx.setChatScrollOffset(-1);
|
|
3825
|
-
return;
|
|
3826
|
-
}
|
|
3827
|
-
// SRF-2 — attach routing by mode, delegated to the pure
|
|
3828
|
-
// decision fn in shell-runner/attach-routing.ts.
|
|
3829
|
-
const outcome = decideAttach(res, {
|
|
3830
|
-
getVwLabel: (id) => reg.getVwLabel(id),
|
|
3831
|
-
resolveVwIdByLabel: (label) => ctx.shellSlash.resolveVwIdByLabel(label),
|
|
3832
|
-
});
|
|
3833
|
-
if (outcome.kind === 'switch-vw') {
|
|
3834
|
-
ctx.shellSlash.virtualWindowsSwitchTo(outcome.windowId);
|
|
3835
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.attachedLine(
|
|
3836
|
-
outcome.windowId,
|
|
3837
|
-
outcome.label,
|
|
3838
|
-
outcome.mode,
|
|
3839
|
-
));
|
|
3840
|
-
} else if (outcome.kind === 'bg') {
|
|
3841
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.bgAttachWarningLine(outcome.status));
|
|
3842
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.bgAttachHintLine());
|
|
3843
|
-
} else if (outcome.kind === 'no-window') {
|
|
3844
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.noWindowAttachWarningLine(outcome.reason));
|
|
3845
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.noWindowAttachHintLine());
|
|
3846
|
-
} else {
|
|
3847
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.genericAttachWarningLine(outcome.reason));
|
|
3848
|
-
}
|
|
3849
|
-
ctx.setChatScrollOffset(-1);
|
|
3850
|
-
return;
|
|
3851
|
-
}
|
|
3852
|
-
ctx.chatLines.push(ctx.shellSlash.slashRuntime.unknownSubcommandLine(sub));
|
|
3853
|
-
ctx.setChatScrollOffset(-1);
|
|
3854
|
-
});
|
|
3719
|
+
|
|
3720
|
+
registerShellSlash(registry);
|
|
3855
3721
|
|
|
3856
3722
|
// ── B-3.b ─────────────────────────────────────────────────────────
|
|
3857
3723
|
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import type { DashboardSlashContext, DashboardSlashReturn } from './dashboard-handlers.js';
|
|
2
|
+
import { getShellRegistry } from '../../shell-runner/registry.js';
|
|
3
|
+
import { renderHandleStatusChip } from '../../status/chip.js';
|
|
4
|
+
import { decideAttach } from '../../shell-runner/attach-routing.js';
|
|
5
|
+
import type { SlashCommandRegistry } from './registry.js';
|
|
6
|
+
|
|
7
|
+
export function registerShellSlash(registry: SlashCommandRegistry<DashboardSlashContext, DashboardSlashReturn>): void {
|
|
8
|
+
registry.register(['shell', 'sh'], async (args, ctx) => {
|
|
9
|
+
// SP-C — /shell list|kill|attach family. Talks to the
|
|
10
|
+
// ShellRegistry singleton (set up in the boot block in
|
|
11
|
+
// dashboard/index.ts). Kill uses prefix matching on id so users
|
|
12
|
+
// don't have to type the full slug; attach routes a vw-mode handle
|
|
13
|
+
// into the foreground via VW switch.
|
|
14
|
+
//
|
|
15
|
+
// getShellRegistry + renderHandleStatusChip + decideAttach hoisted
|
|
16
|
+
// from dynamic to static imports here. Host-local helpers
|
|
17
|
+
// (shellSlashRuntime + openShellRollupPopup + virtualWindows ops)
|
|
18
|
+
// come via ctx.shellSlash.
|
|
19
|
+
const sub = (args[0] ?? '').toLowerCase();
|
|
20
|
+
const reg = getShellRegistry();
|
|
21
|
+
if (!sub || sub === 'help') {
|
|
22
|
+
for (const line of ctx.shellSlash.slashRuntime.helpLines()) ctx.chatLines.push(line);
|
|
23
|
+
ctx.setChatScrollOffset(-1);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const resolveHandle = (needle: string) => {
|
|
27
|
+
const want = needle.toLowerCase();
|
|
28
|
+
if (!want) return null;
|
|
29
|
+
const exact = reg.get(needle);
|
|
30
|
+
if (exact) return exact;
|
|
31
|
+
const all = reg.list();
|
|
32
|
+
const matches = all.filter(h => h.id.toLowerCase().startsWith(want));
|
|
33
|
+
if (matches.length === 1) return matches[0]!;
|
|
34
|
+
return matches.length > 1 ? { ambiguous: matches } as const : null;
|
|
35
|
+
};
|
|
36
|
+
if (sub === 'rollup') {
|
|
37
|
+
// N2 — same popup as the 🐚 pill click, openable from
|
|
38
|
+
// keyboard-only sessions (SSH / nested tmux).
|
|
39
|
+
await ctx.shellSlash.openRollupPopup();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (sub === 'list') {
|
|
43
|
+
// N3 — `/shell list all` bypasses the 30s settled TTL so users
|
|
44
|
+
// can audit everything. Default stays live-only.
|
|
45
|
+
const showSettled = (args[1] ?? '').toLowerCase() === 'all';
|
|
46
|
+
const all = reg.list(showSettled ? { includeSettled: true } : undefined);
|
|
47
|
+
ctx.chatLines.push('');
|
|
48
|
+
if (all.length === 0) {
|
|
49
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.emptyListLine(showSettled));
|
|
50
|
+
ctx.setChatScrollOffset(-1);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.listHeaderLine(all.length, showSettled));
|
|
54
|
+
for (const h of all) {
|
|
55
|
+
const chip = renderHandleStatusChip(h.status);
|
|
56
|
+
const label = reg.getVwLabel(h.id);
|
|
57
|
+
const idTail = h.id.length > 10 ? `…${h.id.slice(-8)}` : h.id;
|
|
58
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.listEntryLine({
|
|
59
|
+
idTail,
|
|
60
|
+
chip,
|
|
61
|
+
mode: h.mode,
|
|
62
|
+
label,
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
ctx.setChatScrollOffset(-1);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (sub === 'kill') {
|
|
69
|
+
const needle = args[1] ?? '';
|
|
70
|
+
if (!needle) {
|
|
71
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.killUsageLine());
|
|
72
|
+
ctx.setChatScrollOffset(-1);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const res = resolveHandle(needle);
|
|
76
|
+
if (!res) {
|
|
77
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.noHandleMatchesLine(needle));
|
|
78
|
+
} else if ('ambiguous' in res) {
|
|
79
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.ambiguousHeaderLine(needle));
|
|
80
|
+
for (const h of res.ambiguous) {
|
|
81
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.ambiguousEntryLine({ id: h.id }));
|
|
82
|
+
}
|
|
83
|
+
} else {
|
|
84
|
+
try {
|
|
85
|
+
res.kill();
|
|
86
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.killedLine(res.id));
|
|
87
|
+
} catch (err) {
|
|
88
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.killFailedLine(
|
|
89
|
+
err instanceof Error ? err.message : String(err),
|
|
90
|
+
));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
ctx.setChatScrollOffset(-1);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (sub === 'attach') {
|
|
97
|
+
const needle = args[1] ?? '';
|
|
98
|
+
if (!needle) {
|
|
99
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.attachUsageLine());
|
|
100
|
+
ctx.setChatScrollOffset(-1);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const res = resolveHandle(needle);
|
|
104
|
+
if (!res) {
|
|
105
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.noHandleMatchesLine(needle));
|
|
106
|
+
ctx.setChatScrollOffset(-1);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if ('ambiguous' in res) {
|
|
110
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.ambiguousHeaderLine(needle));
|
|
111
|
+
for (const h of res.ambiguous) {
|
|
112
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.ambiguousEntryLine({ id: h.id }));
|
|
113
|
+
}
|
|
114
|
+
ctx.setChatScrollOffset(-1);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// SRF-2 — attach routing by mode, delegated to the pure
|
|
118
|
+
// decision fn in shell-runner/attach-routing.ts.
|
|
119
|
+
const outcome = decideAttach(res, {
|
|
120
|
+
getVwLabel: (id) => reg.getVwLabel(id),
|
|
121
|
+
resolveVwIdByLabel: (label) => ctx.shellSlash.resolveVwIdByLabel(label),
|
|
122
|
+
});
|
|
123
|
+
if (outcome.kind === 'switch-vw') {
|
|
124
|
+
ctx.shellSlash.virtualWindowsSwitchTo(outcome.windowId);
|
|
125
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.attachedLine(
|
|
126
|
+
outcome.windowId,
|
|
127
|
+
outcome.label,
|
|
128
|
+
outcome.mode,
|
|
129
|
+
));
|
|
130
|
+
} else if (outcome.kind === 'bg') {
|
|
131
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.bgAttachWarningLine(outcome.status));
|
|
132
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.bgAttachHintLine());
|
|
133
|
+
} else if (outcome.kind === 'no-window') {
|
|
134
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.noWindowAttachWarningLine(outcome.reason));
|
|
135
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.noWindowAttachHintLine());
|
|
136
|
+
} else {
|
|
137
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.genericAttachWarningLine(outcome.reason));
|
|
138
|
+
}
|
|
139
|
+
ctx.setChatScrollOffset(-1);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
ctx.chatLines.push(ctx.shellSlash.slashRuntime.unknownSubcommandLine(sub));
|
|
143
|
+
ctx.setChatScrollOffset(-1);
|
|
144
|
+
});
|
|
145
|
+
}
|
package/src/debug/log-diet.ts
CHANGED
|
@@ -23,6 +23,13 @@ export const LOG_DIET_KEYS: Readonly<Record<string, 'repeat' | 'consecutive'>> =
|
|
|
23
23
|
// read it back from logs and count rows (`admissionCounts`) — it is a judgment-path event.
|
|
24
24
|
};
|
|
25
25
|
|
|
26
|
+
/** LOG-DIET-2 — per-key fold windows (ms). "State echo" keys whose value rarely changes fold on a
|
|
27
|
+
* longer window than the default 60s, so a slow-rotation emitter (one row per question per tick)
|
|
28
|
+
* stays folded instead of re-admitting every window. Keys not listed here keep the guard default. */
|
|
29
|
+
export const LOG_DIET_KEY_WINDOW_MS: Readonly<Record<string, number>> = {
|
|
30
|
+
'hitl.card-bridge/skipped': 30 * 60_000,
|
|
31
|
+
};
|
|
32
|
+
|
|
26
33
|
export interface LogDietSummary {
|
|
27
34
|
category: string;
|
|
28
35
|
event: string;
|
|
@@ -44,6 +51,8 @@ interface Stream {
|
|
|
44
51
|
sessionId?: string;
|
|
45
52
|
value: string;
|
|
46
53
|
lastEmittedAt: number;
|
|
54
|
+
/** Fold window pinned at stream creation: `keyWindowMs[key] ?? windowMs`. */
|
|
55
|
+
windowMs: number;
|
|
47
56
|
count: number;
|
|
48
57
|
firstSuppressedAt?: string;
|
|
49
58
|
lastSuppressedAt?: string;
|
|
@@ -66,6 +75,7 @@ function stableValue(value: unknown): string {
|
|
|
66
75
|
|
|
67
76
|
export class LogDietGuard {
|
|
68
77
|
private readonly windowMs: number;
|
|
78
|
+
private readonly keyWindowMs: Readonly<Record<string, number>>;
|
|
69
79
|
private readonly now: () => number;
|
|
70
80
|
private readonly keys: Readonly<Record<string, Policy>>;
|
|
71
81
|
private readonly maxStreams: number;
|
|
@@ -76,8 +86,9 @@ export class LogDietGuard {
|
|
|
76
86
|
private lastSummaryReleaseAt = Number.NEGATIVE_INFINITY;
|
|
77
87
|
private pendingStreams = 0;
|
|
78
88
|
|
|
79
|
-
constructor(opts: { windowMs?: number; now?: () => number; keys?: Readonly<Record<string, Policy>>; maxStreams?: number; summaryMinIntervalMs?: number; summaryMaxPending?: number } = {}) {
|
|
89
|
+
constructor(opts: { windowMs?: number; keyWindowMs?: Readonly<Record<string, number>>; now?: () => number; keys?: Readonly<Record<string, Policy>>; maxStreams?: number; summaryMinIntervalMs?: number; summaryMaxPending?: number } = {}) {
|
|
80
90
|
this.windowMs = opts.windowMs ?? LOG_DIET_WINDOW_MS;
|
|
91
|
+
this.keyWindowMs = opts.keyWindowMs ?? LOG_DIET_KEY_WINDOW_MS;
|
|
81
92
|
this.now = opts.now ?? Date.now;
|
|
82
93
|
this.keys = opts.keys ?? LOG_DIET_KEYS;
|
|
83
94
|
this.maxStreams = Math.max(1, opts.maxStreams ?? 2000);
|
|
@@ -92,7 +103,7 @@ export class LogDietGuard {
|
|
|
92
103
|
category: stream.category,
|
|
93
104
|
event: stream.event,
|
|
94
105
|
count: stream.count,
|
|
95
|
-
windowMs:
|
|
106
|
+
windowMs: stream.windowMs,
|
|
96
107
|
firstSuppressedAt: stream.firstSuppressedAt!,
|
|
97
108
|
lastSuppressedAt: stream.lastSuppressedAt!,
|
|
98
109
|
...(stream.runId !== undefined ? { runId: stream.runId } : {}),
|
|
@@ -121,12 +132,13 @@ export class LogDietGuard {
|
|
|
121
132
|
? [rec.category, rec.event, value]
|
|
122
133
|
: [rec.category, rec.event, sessionId, runId]);
|
|
123
134
|
const time = this.now();
|
|
135
|
+
const windowMs = this.keyWindowMs[`${rec.category}/${rec.event}`] ?? this.windowMs;
|
|
124
136
|
const summaries: LogDietSummary[] = [];
|
|
125
137
|
const stream = this.streams.get(key);
|
|
126
138
|
if (stream) {
|
|
127
139
|
this.streams.delete(key); // Evict the least recently observed flow.
|
|
128
140
|
this.streams.set(key, stream);
|
|
129
|
-
if ((policy === 'repeat' || stream.value === value) && time - stream.lastEmittedAt <
|
|
141
|
+
if ((policy === 'repeat' || stream.value === value) && time - stream.lastEmittedAt < stream.windowMs) {
|
|
130
142
|
if (stream.count === 0) this.pendingStreams++;
|
|
131
143
|
stream.count++;
|
|
132
144
|
const at = new Date(time).toISOString();
|
|
@@ -154,7 +166,7 @@ export class LogDietGuard {
|
|
|
154
166
|
this.streams.set(key, { category: rec.category, event: rec.event,
|
|
155
167
|
...(typeof runId === 'string' ? { runId } : {}),
|
|
156
168
|
...(sessionId !== undefined ? { sessionId } : {}),
|
|
157
|
-
value, lastEmittedAt: time, count: 0 });
|
|
169
|
+
value, lastEmittedAt: time, windowMs, count: 0 });
|
|
158
170
|
return { pass: true, summaries };
|
|
159
171
|
}
|
|
160
172
|
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import { getUserConfig } from '../user-config.js';
|
|
9
9
|
import { getProviderForConfig, anyProviderAvailable, textOnly, type LLMMessage } from '../llm.js';
|
|
10
|
+
import { debug } from '../debug/log.js';
|
|
10
11
|
import { marketClock } from './finance.js';
|
|
11
12
|
import { renderSemisEssential } from './kg-semis.js';
|
|
12
13
|
import { feedBySource } from './morning-synthesis.js';
|
|
@@ -116,11 +117,25 @@ const ESSENTIAL_SYSTEM = `너는 Conatus 투자 아침 브리핑의 편집자다
|
|
|
116
117
|
- 매매 지시(사라/팔라/비중 조절) 금지. 관찰과 유의점만. 최종 판단은 verify+HITL.
|
|
117
118
|
- 담백하고 신중한 톤. 이모지 최소.`;
|
|
118
119
|
|
|
120
|
+
/** synthesizeEssentialBrief 모델 자리(A/B 첫 조각) — 미지정이면 지금과 같은 기본 경로. */
|
|
121
|
+
export interface EssentialSynthOpts {
|
|
122
|
+
/** 지정하면 getProviderForConfig(cfg, model) 로 부른다. */
|
|
123
|
+
model?: string;
|
|
124
|
+
/** provider 주입(시험용). 미지정이면 getProviderForConfig. */
|
|
125
|
+
providerFor?: (cfg: ReturnType<typeof getUserConfig>, model?: string) => ReturnType<typeof getProviderForConfig>;
|
|
126
|
+
/** 가용성 주입(시험용). 미지정이면 anyProviderAvailable. */
|
|
127
|
+
available?: () => boolean;
|
|
128
|
+
}
|
|
129
|
+
|
|
119
130
|
/** 상세 markdown 을 입력으로 LLM 시장서사 종합. provider 없거나 실패 시 ''(에센셜은 결정론만). */
|
|
120
|
-
export async function synthesizeEssentialBrief(detailMarkdown: string): Promise<string> {
|
|
121
|
-
|
|
131
|
+
export async function synthesizeEssentialBrief(detailMarkdown: string, opts: EssentialSynthOpts = {}): Promise<string> {
|
|
132
|
+
const { model, providerFor, available } = opts;
|
|
133
|
+
if (!(available ?? anyProviderAvailable)()) return '';
|
|
122
134
|
try {
|
|
123
|
-
const
|
|
135
|
+
const cfg = getUserConfig();
|
|
136
|
+
if (model) debug.log('domains.llm', 'cron-model', { domain: 'morning-essential', model: model ?? null });
|
|
137
|
+
const resolve = providerFor ?? getProviderForConfig;
|
|
138
|
+
const provider = model ? resolve(cfg, model) : resolve(cfg);
|
|
124
139
|
if (!provider.streamChat) return '';
|
|
125
140
|
// 토큰 절약: 상세를 앞부분 위주로 트림(핵심 섹션이 상단).
|
|
126
141
|
const digest = detailMarkdown.slice(0, 6000);
|
|
@@ -21,6 +21,7 @@ export const RELEASE_STATUS_SPEC: LLMToolSpec = {
|
|
|
21
21
|
+ 'topic=cell: id 칸 하나의 상태·근거와 살핀 판.\n'
|
|
22
22
|
+ 'topic=schedule: 발행 이후 판의 컷·착지·발행·동결 일정.\n'
|
|
23
23
|
+ 'topic=ops: 도는 런·발행·늦은 스케줄·자리·열린 결정의 출처 있는 개관.\n'
|
|
24
|
+
+ 'topic 과 action 을 동시에 쓰지 않는다 — 둘 중 하나만: topic 은 읽을 대상, action 은 짧은 요약.\n'
|
|
24
25
|
+ '발행·버전·피처·체크리스트·칸·컷·일정·운영 상태 질문은 Grep·ListDir·파일 검색보다 이 도구를 먼저 부른다 — 그 답은 파일이 아니라 원장에 있다.',
|
|
25
26
|
parameters: { type: 'object', properties: {
|
|
26
27
|
version: { type: 'string', description: '조회할 판. 생략하면 개발 판과 다음 판.' },
|
|
@@ -121,6 +122,9 @@ function cellView(item: ChecklistItem) {
|
|
|
121
122
|
export function dispatchReleaseStatus(args: Record<string, unknown>, deps: ReleaseToolDeps = {}): { text: string; structured: Record<string, unknown> } {
|
|
122
123
|
const topic = args.topic === undefined ? 'status' : args.topic;
|
|
123
124
|
if (typeof topic !== 'string' || !['status', 'features', 'cell', 'schedule', 'ops'].includes(topic)) throw new Error('topic 은 status, features, cell, schedule, ops 중 하나');
|
|
125
|
+
if (args.topic !== undefined && args.action !== undefined) {
|
|
126
|
+
throw new Error(`topic 과 action 을 동시에 보낼 수 없습니다 — 둘 중 하나만: topic=${topic} 는 읽을 대상, action 은 짧은 요약(schedule·blocked·landed)`);
|
|
127
|
+
}
|
|
124
128
|
const requested = args.version;
|
|
125
129
|
if (requested !== undefined && (typeof requested !== 'string' || !requested.trim())) throw new Error('판 이름이 필요합니다');
|
|
126
130
|
const checklist = deps.checklist ?? listChecklist;
|
|
@@ -4,7 +4,8 @@ import { debug } from '../debug/log.js';
|
|
|
4
4
|
import { extractVerbatimOriginalAsk } from '../self-implement/goal-author.js';
|
|
5
5
|
import { loadRunLedger } from '../self-implement/run-ledger.js';
|
|
6
6
|
import { queryRunningRuns, type QueriedRunningRunsResult } from '../self-implement/running-runs.js';
|
|
7
|
-
import type
|
|
7
|
+
import { CODEX_PROVIDER, GROK_PROVIDER, decideLaunchBudget, type BudgetAction, type BudgetDecision, type BudgetInputs } from '../self-implement/budget-gate.js';
|
|
8
|
+
import { DEFAULT_FALLBACK_CHAIN } from '../oauth/fallback-chain.js';
|
|
8
9
|
|
|
9
10
|
export type ActiveRunsForGoal = readonly string[] | 'unknown';
|
|
10
11
|
|
|
@@ -87,9 +88,164 @@ export function activeRunsForGoal(goalId: string, deps: ActiveRunsForGoalDeps =
|
|
|
87
88
|
}
|
|
88
89
|
}
|
|
89
90
|
|
|
91
|
+
const LAUNCH_BUDGET_PROVIDER: Readonly<Record<string, string>> = { 'codex-rotate': CODEX_PROVIDER, grok: GROK_PROVIDER };
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* L6 발사 관문의 예산 입력 보정 — 발사 우주의 config 에 체인이 없으면(작업 트리 = 시험 우주) 막지 않고
|
|
95
|
+
* 코드 기본 체인으로 판단한다. `--child-llm-provider` 를 명시했으면 그것이 체인이다(예산 판정 밖 provider 는 통과).
|
|
96
|
+
*/
|
|
97
|
+
export function harnessLaunchBudgetDecision(
|
|
98
|
+
inputs: BudgetInputs,
|
|
99
|
+
opts: { readonly childLlmProvider?: string; readonly childLlmModel?: string } = {},
|
|
100
|
+
): { readonly decision: BudgetDecision; readonly warning?: string; readonly unmeasuredProvider?: string } {
|
|
101
|
+
const explicit = opts.childLlmProvider?.trim();
|
|
102
|
+
const judged = (selected: BudgetInputs) => {
|
|
103
|
+
const { decision, unmeasuredProvider } = decideLaunchBudget(selected);
|
|
104
|
+
return { decision, ...(unmeasuredProvider ? { unmeasuredProvider, warning: `budget: ${unmeasuredProvider} usage unmeasured — launching` } : {}) };
|
|
105
|
+
};
|
|
106
|
+
if (explicit) {
|
|
107
|
+
if (explicit !== CODEX_PROVIDER && explicit !== GROK_PROVIDER) {
|
|
108
|
+
return {
|
|
109
|
+
decision: { action: 'proceed', provider: explicit, ...(opts.childLlmModel ? { model: opts.childLlmModel } : {}), reasons: [`${explicit}: 명시 provider — 예산 판정 밖`] },
|
|
110
|
+
warning: `budget: ${explicit} is outside the budget gate — launched as requested`,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const chain = [{ provider: explicit, ...(opts.childLlmModel ? { model: opts.childLlmModel } : {}) }];
|
|
114
|
+
return judged({ ...inputs, preference: { ...inputs.preference, chain } });
|
|
115
|
+
}
|
|
116
|
+
if (inputs.preference.chain.length > 0) return judged(inputs);
|
|
117
|
+
const chain = DEFAULT_FALLBACK_CHAIN.map((step) => ({ provider: LAUNCH_BUDGET_PROVIDER[step] ?? step }));
|
|
118
|
+
const result = judged({ ...inputs, preference: { ...inputs.preference, chain } });
|
|
119
|
+
return {
|
|
120
|
+
...result,
|
|
121
|
+
warning: `budget: no chain in this universe's config — judged with the code default ${DEFAULT_FALLBACK_CHAIN.join(',')}${result.warning ? ` · ${result.warning}` : ''}`,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** Parent → Pod budget snapshot env. Numbers and names only — never a credential, never free-text reasons. */
|
|
126
|
+
export const BUDGET_SNAPSHOT_ENV = 'ELANOUS_BUDGET_SNAPSHOT';
|
|
127
|
+
export const BUDGET_SNAPSHOT_MAX_AGE_SEC = 15 * 60;
|
|
128
|
+
// Host and Pod clocks may differ slightly even when the Job carries a freshly measured verdict.
|
|
129
|
+
const BUDGET_SNAPSHOT_CLOCK_SKEW_SEC = 30;
|
|
130
|
+
|
|
131
|
+
/** The verdict the host's launch gate reached (chain ⊕ the user's caps) — the Pod follows it instead of judging again. */
|
|
132
|
+
export interface HostBudgetVerdict {
|
|
133
|
+
action: BudgetAction;
|
|
134
|
+
provider?: string;
|
|
135
|
+
model?: string;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export interface BudgetSnapshot {
|
|
139
|
+
/** The provider the host verdict picked, or the one asked for when nothing was picked. */
|
|
140
|
+
provider: string;
|
|
141
|
+
/** Percent of that provider's window still unspent (0–100) — observation only; absent when the host could not measure it. */
|
|
142
|
+
remaining?: number;
|
|
143
|
+
window: string;
|
|
144
|
+
/** Epoch milliseconds on the measuring host. */
|
|
145
|
+
measuredAt: number;
|
|
146
|
+
host: string;
|
|
147
|
+
/** The explicit child provider the host judged for (`--child-llm-provider`). Absent = the host's configured chain. */
|
|
148
|
+
requested?: string;
|
|
149
|
+
/** The host launch-gate verdict. Absent = the host reached none, and the Pod treats the budget as unmeasured. */
|
|
150
|
+
decision?: HostBudgetVerdict;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export type BudgetSource = 'snapshot' | 'local' | 'unmeasured';
|
|
154
|
+
|
|
155
|
+
export interface ResolvedLaunchBudget {
|
|
156
|
+
budget: BudgetDecision | 'unknown';
|
|
157
|
+
budgetSource: BudgetSource;
|
|
158
|
+
snapshotAgeSec?: number;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const BUDGET_ACTIONS: readonly BudgetAction[] = ['proceed', 'next-provider', 'wait-reset', 'stop'];
|
|
162
|
+
|
|
163
|
+
function canonicalBudgetProvider(name: string): string {
|
|
164
|
+
const id = name.trim();
|
|
165
|
+
return id === 'codex' || id === 'codex-rotate' ? 'openai-codex' : id;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
function pickVerdict(value: unknown): HostBudgetVerdict | undefined {
|
|
169
|
+
if (!value || typeof value !== 'object') return undefined;
|
|
170
|
+
const { action, provider, model } = value as Record<string, unknown>;
|
|
171
|
+
if (typeof action !== 'string' || !(BUDGET_ACTIONS as readonly string[]).includes(action)) return undefined;
|
|
172
|
+
if (provider !== undefined && (typeof provider !== 'string' || !provider.trim())) return undefined;
|
|
173
|
+
if (model !== undefined && typeof model !== 'string') return undefined;
|
|
174
|
+
return { action: action as BudgetAction, ...(provider ? { provider: canonicalBudgetProvider(provider) } : {}), ...(model ? { model } : {}) };
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export function encodeBudgetSnapshot(snapshot: BudgetSnapshot): string {
|
|
178
|
+
const { provider, remaining, window, measuredAt, host, requested, decision } = snapshot;
|
|
179
|
+
const verdict = pickVerdict(decision);
|
|
180
|
+
return JSON.stringify({
|
|
181
|
+
provider: canonicalBudgetProvider(provider),
|
|
182
|
+
...(typeof remaining === 'number' && Number.isFinite(remaining) ? { remaining } : {}),
|
|
183
|
+
window, measuredAt, host,
|
|
184
|
+
...(requested?.trim() ? { requested: canonicalBudgetProvider(requested) } : {}),
|
|
185
|
+
...(verdict ? { decision: verdict } : {}),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function parseBudgetSnapshot(raw: string | undefined): BudgetSnapshot | undefined {
|
|
190
|
+
if (!raw?.trim()) return undefined;
|
|
191
|
+
try {
|
|
192
|
+
const value = JSON.parse(raw) as Record<string, unknown> | null;
|
|
193
|
+
if (!value || typeof value !== 'object') return undefined;
|
|
194
|
+
const { provider, remaining, window, measuredAt, host, requested, decision } = value;
|
|
195
|
+
if (typeof provider !== 'string' || !provider.trim() || typeof window !== 'string' || typeof host !== 'string') return undefined;
|
|
196
|
+
if (remaining !== undefined && (typeof remaining !== 'number' || !Number.isFinite(remaining) || remaining < 0 || remaining > 100)) return undefined;
|
|
197
|
+
if (typeof measuredAt !== 'number' || !Number.isFinite(measuredAt)) return undefined;
|
|
198
|
+
if (requested !== undefined && (typeof requested !== 'string' || !requested.trim())) return undefined;
|
|
199
|
+
const verdict = decision === undefined ? undefined : pickVerdict(decision);
|
|
200
|
+
if (decision !== undefined && !verdict) return undefined;
|
|
201
|
+
return {
|
|
202
|
+
provider: canonicalBudgetProvider(provider), ...(remaining !== undefined ? { remaining } : {}), window, measuredAt, host,
|
|
203
|
+
...(requested ? { requested: canonicalBudgetProvider(requested) } : {}), ...(verdict ? { decision: verdict } : {}),
|
|
204
|
+
};
|
|
205
|
+
} catch { return undefined; }
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** The host's verdict as the Pod's decision — never re-judged with one provider or code-constant caps. */
|
|
209
|
+
function decisionFromSnapshot(snapshot: BudgetSnapshot, verdict: HostBudgetVerdict, ageSec: number): BudgetDecision {
|
|
210
|
+
const target = verdict.provider ? ` → ${verdict.provider}` : '';
|
|
211
|
+
const used = snapshot.remaining === undefined ? '' : ` · ${snapshot.provider} ${Math.round((100 - snapshot.remaining) * 100) / 100}% used (${snapshot.window})`;
|
|
212
|
+
return {
|
|
213
|
+
action: verdict.action,
|
|
214
|
+
...(verdict.provider ? { provider: verdict.provider } : {}),
|
|
215
|
+
...(verdict.model ? { model: verdict.model } : {}),
|
|
216
|
+
reasons: [`host ${snapshot.host} verdict ${verdict.action}${target}${used} · ${ageSec}s ago`],
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export interface ResolveLaunchBudgetDeps {
|
|
221
|
+
env?: Readonly<Record<string, string | undefined>> | undefined;
|
|
222
|
+
now?: () => number;
|
|
223
|
+
/** The provider this launch will use, when named explicitly. */
|
|
224
|
+
provider?: string | undefined;
|
|
225
|
+
/** Host-side measurement. Never called inside a Pod. */
|
|
226
|
+
measureLocal: () => Promise<BudgetDecision | 'unknown'>;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/** A Pod has no subscription credential or usage cache, so it follows the parent's verdict ⊕ its age and never measures. */
|
|
230
|
+
export async function resolveLaunchBudget(deps: ResolveLaunchBudgetDeps): Promise<ResolvedLaunchBudget> {
|
|
231
|
+
const env = deps.env ?? process.env;
|
|
232
|
+
if (env.ELANOUS_SUBSTRATE !== 'pod') return { budget: await deps.measureLocal(), budgetSource: 'local' };
|
|
233
|
+
const snapshot = parseBudgetSnapshot(env[BUDGET_SNAPSHOT_ENV]);
|
|
234
|
+
if (!snapshot) return { budget: 'unknown', budgetSource: 'unmeasured' };
|
|
235
|
+
const ageSec = Math.round(((deps.now ?? Date.now)() - snapshot.measuredAt) / 1000);
|
|
236
|
+
const requested = deps.provider?.trim() ? canonicalBudgetProvider(deps.provider) : undefined;
|
|
237
|
+
// The verdict holds only for the question the host answered: the same explicit provider, or both on the configured chain.
|
|
238
|
+
if (!snapshot.decision || ageSec < -BUDGET_SNAPSHOT_CLOCK_SKEW_SEC || ageSec > BUDGET_SNAPSHOT_MAX_AGE_SEC || requested !== snapshot.requested) {
|
|
239
|
+
return { budget: 'unknown', budgetSource: 'unmeasured', snapshotAgeSec: ageSec };
|
|
240
|
+
}
|
|
241
|
+
return { budget: decisionFromSnapshot(snapshot, snapshot.decision, Math.max(0, ageSec)), budgetSource: 'snapshot', snapshotAgeSec: ageSec };
|
|
242
|
+
}
|
|
243
|
+
|
|
90
244
|
export interface PreLaunchGateInput {
|
|
91
245
|
goalId: string;
|
|
92
246
|
budget?: BudgetDecision | 'unknown';
|
|
247
|
+
budgetSource?: BudgetSource;
|
|
248
|
+
snapshotAgeSec?: number;
|
|
93
249
|
forceLaunch?: boolean;
|
|
94
250
|
}
|
|
95
251
|
|
|
@@ -107,7 +263,7 @@ export interface PreLaunchGateDecision {
|
|
|
107
263
|
/** Force bypasses only a duplicate observation, never an exhausted budget. */
|
|
108
264
|
export function preLaunchGate(input: PreLaunchGateInput, deps: PreLaunchGateDeps = {}): PreLaunchGateDecision {
|
|
109
265
|
const decision = decidePreLaunch(input, deps);
|
|
110
|
-
debug.log('execution-loop.launch-gate', 'decision', { goalId: input.goalId, action: decision.action, sameGoalActiveRuns: decision.sameGoalActiveRuns, budget: decision.budget === 'unknown' ? 'unknown' : decision.budget.action, forceLaunch: input.forceLaunch === true, reason: decision.reason });
|
|
266
|
+
debug.log('execution-loop.launch-gate', 'decision', { goalId: input.goalId, action: decision.action, sameGoalActiveRuns: decision.sameGoalActiveRuns, budget: decision.budget === 'unknown' ? 'unknown' : decision.budget.action, forceLaunch: input.forceLaunch === true, reason: decision.reason, ...(input.budgetSource ? { budgetSource: input.budgetSource } : {}), ...(input.snapshotAgeSec !== undefined ? { snapshotAgeSec: input.snapshotAgeSec } : {}) });
|
|
111
267
|
return decision;
|
|
112
268
|
}
|
|
113
269
|
|