elanous 0.2.40 → 0.2.42
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 → X1ucLw10Cds_h614NoEnh}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/0244e5b5.6fc7670f8223d82d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4769.9fd582071301f382.js → 1063.2fb8a9dc55c731f2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1121.13ba7a8aff19df81.js +36 -0
- package/apps/pwa/out/_next/static/chunks/1147-5196d19c222051b3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{470.51a72a2348306455.js → 1262.e804feb8fd1acb8c.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/1319.b9b815ae0f181e06.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1345-31427b833438f521.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7219-15bdd9a80661af8e.js → 1455-530ca16c7e71baff.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{1281.d81877e35b9068f4.js → 1487.2f67b79444062da6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1574.878c18ecc97b1bd4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1586.fafc33a9a5835cb7.js +32 -0
- package/apps/pwa/out/_next/static/chunks/1744.855fd60ae4c4a8c8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/193.21a47a3e07ef6860.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1945.7b54990d578c119b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2004.e839fda7ea5a738a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2044-dd681a5c08779ff8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2101.2248decb38829b03.js +286 -0
- package/apps/pwa/out/_next/static/chunks/2160.a097e7b138ae1c55.js +23 -0
- package/apps/pwa/out/_next/static/chunks/2300.41ea70ac1bef1446.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2357-07b5eeb5fb12628d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2364.28652020695a6db3.js +34 -0
- package/apps/pwa/out/_next/static/chunks/{1350.59f40e39e02d91b1.js → 2456.b6de0e1c05f28843.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2526.c3e50ac1fec064bd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2549-cda50b716ff4250c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2550-5f1e88f615568045.js +1 -0
- package/apps/pwa/out/_next/static/chunks/261-319078c954e40d66.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2690.0521c738b7749931.js +115 -0
- package/apps/pwa/out/_next/static/chunks/{5436.fdf6fa8ae3e9588d.js → 2974.595d1e29d040cb6a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{5383.bdfa5d886e39a826.js → 3207.a756c95e9ec8c3c8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3285.89ee2f298682f5e5.js +93 -0
- package/apps/pwa/out/_next/static/chunks/{2177.df8547f9d7215c4e.js → 3347.f846266b5e5f3ede.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/3447.06edc7b092021417.js +41 -0
- package/apps/pwa/out/_next/static/chunks/{9184.45afbf44fec87574.js → 3482.a9ae9d2ad6a5bd97.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3507.97e1977bc4d5fb0a.js +2 -0
- package/apps/pwa/out/_next/static/chunks/3510-9ca392698bfe4391.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3541.772e5ce425aaa611.js +24 -0
- package/apps/pwa/out/_next/static/chunks/{8099.1cccf31c1baa7e1c.js → 3741.9cf76acaa2ee5298.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3837.a210d7d0db8d8abd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3898-955c896f394217a6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3947-ef57acea76eaa8d2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4864a2ca.1c1c280a7772c5e5.js → 3d0154af.5331fec737ffe8c3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4037-3b82ebc7d78afdc7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4043.6b91203436c9c86b.js +309 -0
- package/apps/pwa/out/_next/static/chunks/405.9022d4a478202b67.js +77 -0
- package/apps/pwa/out/_next/static/chunks/417-fb2cc9a9910e5968.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3330.7443183b7e6fdbdf.js → 4276.336d76d858fcdf1b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4302.6ced9aa4535de947.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4320.583cbab64db6be02.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4768-8eac183fd291ca53.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4770.769c9cd9c7034eba.js +148 -0
- package/apps/pwa/out/_next/static/chunks/4895.65605ec3e6504e89.js +74 -0
- package/apps/pwa/out/_next/static/chunks/{3b355b3d.6f73c98bf6f9c749.js → 50061469.0326382241ef3b2d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5112.4b9f300124fab7b3.js +149 -0
- package/apps/pwa/out/_next/static/chunks/5335.375ee922bcd5bc83.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5342.023a2e729689b320.js +27 -0
- package/apps/pwa/out/_next/static/chunks/{8d173e38.18a2f7b4e1848bdb.js → 53c73f84.373b6160adfa89a4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{1537-6bb97b5214928ea9.js → 5431-72a1dbde59400691.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5440-4236de26c5ea5856.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5486-b318c165f645d8ba.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5506-c7d2ec25c62a7c94.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5570-c66ecbea26b4e3b1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5696.ffca5aa259d8451e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5793-8c584aea2aa87560.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5848-6de6b8c173351a90.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5885.0a3e52c8faccec98.js +287 -0
- package/apps/pwa/out/_next/static/chunks/5999.94e3c83040200f31.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5a7901d6-2d8d9b5587cf9042.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{261.0d471e8aded799f3.js → 6131.348b7d6bdcd267ce.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/6164.86133a0172611184.js +90 -0
- package/apps/pwa/out/_next/static/chunks/{9175.2de5209a5ce6f68a.js → 6377.bc7df239edbff244.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6515.e07e8b2b8a707a87.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6522-c005514f87d18982.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2226.2cf61ec781827219.js → 6632.0eac1c554f8f2ef3.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/6642.648adb1767f39ecf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6848.138805a09d001d09.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7049-c09e2b7a253a24f3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7072.1e00447d9fa39972.js +104 -0
- package/apps/pwa/out/_next/static/chunks/7106.64201c539c5e220c.js +94 -0
- package/apps/pwa/out/_next/static/chunks/7151-1f742b455986530e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7199.18d6b25e001154ce.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7279-c199ea83f34338fa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/728b938d.ffaa7ad583d60e58.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7309.171c3de54e0322f1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/733.7a1ab3342e03306f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{b84cad00.594027ebe0531fe2.js → 73d2eb0e.4966ad55293c801a.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{6257.c0037b8949239f5e.js → 7411.9b4b8b747dc7b802.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/7504.d5cf1e7cd89b1b08.js +24 -0
- package/apps/pwa/out/_next/static/chunks/7573-0fd4af62d65d4598.js +1 -0
- package/apps/pwa/out/_next/static/chunks/759.6f8267df4689c401.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7825-668b046f72f14483.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7852-1538768b6eb19388.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7868.cff810430bb63c91.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9189505a.980427ac048c8c60.js → 7a98bc80.fa935989e829f9c2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8084-dfcc796874ab4e07.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8138.6c10b2a356d52fca.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2566.beaffc3a5e1fcd2e.js → 8262.ddc03e06b733f184.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8266.6bf9b131b2584678.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8403.7b81d5e64074a725.js +8 -0
- package/apps/pwa/out/_next/static/chunks/8470.1998cbd0866a7eac.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8505.fd803c6c33b54cc3.js +79 -0
- package/apps/pwa/out/_next/static/chunks/{8272-025653884f9645d2.js → 8546-6f03f8ea34dd61d9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{6051-0ae955eedb10adb9.js → 8673-bab689a55f7e13b9.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/8687-246fda8433d3477c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/898-280022fb082936bc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9098-50eefc1844212e3d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9211-330b6736a63d4cb3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4351.0f37a6db2b34d50b.js → 9249.976f1e69a9d80754.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9255-cf88fceda5666645.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9306-e523ba58bb8adc42.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9324.a9866d717ba62cb6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9325.a8510e8aa87c8143.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9353-12bfff0c130104cf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9415.69e4a21c60c7d2db.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6749.0744ce6eb08d40e9.js → 9427.96aa912ddb5801e0.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/9479-154a697d4b6e4e98.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9540-65aa6ccc31b3fd78.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7611.85f045bf232053ac.js → 9633.ce5bddc56784da72.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3746-f80a78f220bf37b5.js → 9656-374232558fd528d0.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9832.f4a98c878ecf2c0a.js +62 -0
- package/apps/pwa/out/_next/static/chunks/9865.f094440645f02d98.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9a852a62-6192a6ea9346ced3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-e772b4710df5d936.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-4361368e6a76b967.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-802f349fdd65248d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-7f35513988a2a495.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-798121656540e33e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-20a089490affe98c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-e5e4ec786d70e604.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-d12fe5d0801430e4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-d8cf21022fecc026.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-21ce565c9c57ee97.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-b56563025f619c9b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-52f14dd133da8348.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-c0ed7fdcdba76633.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-af8c3020cb520f15.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-72eda67af9f5e35c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-e772b4710df5d936.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-67a6620d31f0a46f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-f059363aa0880ec2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-f9f917d6a57f69fb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-d3ae55eee2f0826c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/{page-83d27757e2b8060a.js → page-0e3d7b9421b79dac.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-ba738f7e233eb211.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-33438b98c74fd599.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-0b34d5fd990d793a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-0f291d3c8fd55a3a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-3fced192be5279c1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-04cb3cf182a7c1ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-6ccbd2ab23a21542.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-aa0518c48a5f4e56.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-4b32226d341ad7d7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-3224fd8f6383b61f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-efbc97459f2914e2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-2fe487d88cd5d97c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-48861dd1a858bab7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-197d5d4d21d228ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-a763ba89fbdd9c27.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-7edb253510b1c136.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-0c875702c61965ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-e772b4710df5d936.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-e425c951151095f7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-9c90e0aec4e27f77.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-733e09a02e727d42.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-4f899e14c34d77a1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/{page-139d722de1dcd6c1.js → page-bf067887b3307423.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-7af10868ff87d04e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-efe5304057aa11c7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-76bcd29aaa8a26c3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-4cfd88e2273ce50f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-0a1ddb47efba0a32.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-2a176c707152c892.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-efe03031b8797fbf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{409c787b.e48c5bec8ec10456.js → b450776b.3db34d8d965f82d3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{ca3702f8.2913182e73889fa2.js → e8543907.5b040a5f22a0b0e5.js} +7 -7
- package/apps/pwa/out/_next/static/chunks/framework-d0d2d673bfd8a8a9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-4c9fceb2baa09cb7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-b0ab8d8fc9a97556.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-7e2cc62a2e5cec96.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-22324935f753ec5e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-9dc1bfa25334998a.js +1 -0
- package/apps/pwa/out/_next/static/css/{b9d8151e48998417.css → 62c858ad53854f47.css} +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 +23 -24
- 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 +22 -22
- 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 +23 -24
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +23 -24
- 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/docs/goal-context/04-mock-scenarios.md +13 -0
- package/graphs/catalog/catalog.yaml +1 -1
- 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/heal/heal-loop.yaml +1 -0
- package/graphs/overlays/stop-heal-ladder.yaml +136 -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 +13 -10
- package/graphs/units/verbs/research.yaml +20 -0
- package/graphs/work/research-report.yaml +21 -3
- 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/heal/run-role.ts +99 -5
- package/scripts/land-global-checks.ts +6 -1
- package/scripts/lib/decompose-ab.ts +1 -0
- package/scripts/lib/fixtures/tui-regress/help-insufficient-commands.txt +15 -0
- package/scripts/lib/fixtures/tui-regress/help-live.txt +42 -0
- package/scripts/lib/fixtures/tui-regress/help-missing-keys.txt +21 -0
- package/scripts/lib/fixtures/tui-regress/help-original.txt +51 -0
- package/scripts/lib/fixtures/tui-regress/help-shifted-input.txt +26 -0
- package/scripts/lib/tui-regress-checks.ts +33 -13
- 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 +55 -10
- package/scripts/release-loop/gate-diff.ts +22 -3
- package/scripts/release-loop/gate-image-pin.ts +81 -0
- package/scripts/release-loop/gate-node-sim.ts +207 -0
- package/scripts/release-loop/gate-node.ts +489 -62
- package/scripts/release-loop/gate-pod-image-sticky-plan.ts +99 -0
- package/scripts/release-loop/gate-radius-live.ts +97 -13
- package/scripts/release-loop/gate-shard-dispatch.ts +43 -0
- package/scripts/release-loop/gate-shard-load-flaky.ts +256 -0
- package/scripts/release-loop/gate-train-receipts.ts +122 -0
- package/scripts/release-loop/gate-triage-node.ts +70 -10
- package/scripts/release-loop/resume-release.ts +330 -23
- 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 +37 -3
- package/scripts/warm-pool-provider-config.ts +263 -0
- package/skills/omni-crawl/SKILL.md +5 -2
- package/skills/omni-crawl/scripts/main.ts +84 -23
- package/src/acp/core-turn-bridge.ts +99 -4
- package/src/agent/registry.ts +2 -0
- package/src/agent/task-notification.ts +25 -5
- package/src/agent/types.ts +6 -0
- package/src/agent-mission/mission-cli.ts +24 -0
- package/src/agent-mission/mission-out.ts +595 -0
- package/src/agent-mission/tool-install.ts +88 -2
- package/src/agent-substrate/context-strategy.ts +4 -4
- package/src/agent-substrate/self-review-cli.ts +267 -40
- package/src/auto-research/research-turn.ts +133 -51
- package/src/autopilot/discovery/wiki-claim-proposer.ts +22 -1
- package/src/autopilot/pr-manager.ts +38 -7
- package/src/autopilot/pty-control-loop.ts +2 -0
- package/src/boot/daemon-tools/self-implement.ts +46 -9
- package/src/budget/shadow-arms.ts +52 -0
- package/src/capture/tui-self-report.ts +22 -6
- package/src/chat/index.ts +1 -1
- package/src/chat/pickers/state.ts +7 -1
- package/src/cli/fixtures/review-loop-breaker/opwaiver-32646-1694ccc7a170.json +1 -0
- package/src/cli/fixtures/review-loop-breaker/opwaiver-32853-bd8f73595c83.json +1 -0
- package/src/cli/fixtures/review-loop-breaker/opwaiver-33097-1cc85900413c.json +1 -0
- package/src/cli/fixtures/review-loop-breaker/opwaiver-33106-972f31e4a3ca.json +1 -0
- package/src/cli/fixtures/review-loop-breaker/opwaiver-33113-3ab51f05968f.json +1 -0
- package/src/cli/fixtures/review-loop-breaker/pr-33097-1cc85900413c.json +1 -0
- 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 +47 -9
- package/src/cli/pr-land-overlap-evidence.ts +100 -1
- package/src/cli/pr-land-pod-shadow-job.ts +60 -0
- package/src/cli/release-checklist-read-cli.ts +20 -10
- package/src/cli/release-cli.ts +27 -1
- package/src/cli/research-cli.ts +4 -5
- package/src/cli/sim-cli.ts +7 -1
- package/src/cli/tasks-cli.ts +12 -4
- package/src/codex/models.ts +30 -15
- package/src/compact/auto.ts +8 -1
- package/src/control-plane/ledger.ts +52 -2
- package/src/control-plane/server.ts +16 -2
- package/src/core-turn/run-core-turn.ts +313 -89
- package/src/core-turn/run-goal-loop.ts +106 -2
- package/src/core-turn/types.ts +2 -0
- package/src/dashboard/acp-boot.ts +72 -3
- package/src/dashboard/classic-sidetab-mission-job.ts +58 -0
- package/src/dashboard/classic-sidetab-mission.ts +185 -0
- package/src/dashboard/index.ts +155 -15
- package/src/dashboard/input/agent-wake.ts +23 -1
- package/src/dashboard/input/chat-main-plain-turn-runtime.ts +9 -0
- package/src/dashboard/mission-cli-consumer.ts +153 -0
- package/src/dashboard/seat-boot-preamble.ts +171 -1
- package/src/dashboard/side-basic-runtime.ts +54 -1
- package/src/dashboard/sidetab-runtime.ts +90 -1
- package/src/dashboard/skill-catalog-preamble.ts +101 -0
- package/src/dashboard/skill-detection-runtime.ts +55 -15
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +15 -0
- package/src/dashboard/turn-preamble.ts +65 -16
- package/src/dashboard/turn-prompt-runtime.ts +4 -2
- 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 +44 -7
- package/src/graph-runner/graph-tick.ts +10 -2
- package/src/graph-runner/in-process-registry.ts +37 -0
- package/src/graph-runner/runner.ts +34 -4
- package/src/grok/agent-search.ts +14 -4
- package/src/grok/credential.ts +28 -11
- 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-pod-dispatch.ts +81 -15
- package/src/harness/harness-space.ts +15 -1
- package/src/harness/harness-stop.ts +155 -11
- package/src/harness/progress-worker-entry.ts +59 -0
- package/src/harness/progress-worker-runtime.ts +11 -0
- package/src/index.ts +52 -7
- package/src/instance/dev-project.ts +25 -0
- package/src/instance/spawn-elanous.ts +6 -4
- 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 +208 -19
- package/src/loops/orchestrator/coordinator-shadow.ts +226 -0
- package/src/loops/orchestrator/tick.ts +61 -0
- package/src/maturity/feature-maturity.ts +1 -1
- 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/native-tool-catalog.ts +2 -2
- package/src/nexus/api/harness-traversal.ts +11 -0
- package/src/output-truncation.ts +41 -12
- package/src/pr-tool/census.ts +3 -2
- package/src/project/project-store.ts +48 -1
- package/src/pty-shell/tui-run-state.ts +188 -2
- package/src/release-loop/checklist-target-path-hint.ts +13 -0
- package/src/release-loop/checklist.ts +9 -1
- package/src/release-loop/gate-host-reservation.ts +144 -0
- package/src/release-loop/release-schedule.ts +90 -1
- package/src/repl/index.ts +43 -2
- package/src/research/axis-fanout.ts +121 -16
- package/src/research/bloom-exemplars.ts +137 -0
- package/src/research/gap-followup.ts +13 -1
- package/src/research/plugin-discovery.ts +36 -14
- package/src/research-bridge/invoke.ts +22 -5
- package/src/research-bridge/types.ts +2 -0
- package/src/self-dev/ask-launch-flow.ts +39 -25
- package/src/self-dev/decompose.ts +119 -5
- 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-text.ts +5 -6
- package/src/self-dev/launch-preflight.ts +9 -4
- package/src/self-dev/orchestrate.ts +27 -2
- package/src/self-dev/review-provider-fallback.ts +9 -2
- package/src/self-dev/run-supervisor.ts +226 -6
- package/src/self-dev/run-types.ts +7 -0
- package/src/self-implement/doctor-visit.ts +88 -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 +403 -8
- package/src/self-implement/graph-overlay-yaml.ts +7 -0
- 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/headless-elanous-driver.ts +31 -2
- package/src/self-implement/heal-intake.ts +112 -4
- package/src/self-implement/heal-triage.ts +20 -0
- package/src/self-implement/host-regate.ts +31 -8
- package/src/self-implement/knowhow-pack.ts +38 -0
- package/src/self-implement/merge-train.ts +5 -0
- package/src/self-implement/orchestrator.ts +359 -30
- package/src/self-implement/regate-detail.ts +38 -1
- package/src/self-implement/rework-child-provider.ts +25 -0
- package/src/self-implement/run-chart.ts +119 -0
- package/src/self-implement/run-ledger.ts +176 -17
- package/src/self-implement/run-stop.ts +208 -5
- 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 +28 -6
- package/src/session/chat.ts +69 -58
- package/src/session/request-size-guard.ts +123 -0
- package/src/session-runtime/index.ts +98 -4
- package/src/session-runtime/tier-flip.ts +3 -3
- package/src/sidetab-core/model.ts +150 -0
- package/src/sidetab-core/visible-agent-mission.ts +186 -0
- package/src/skills/name-match.ts +20 -0
- package/src/skills/tools/agent.ts +30 -2
- package/src/skills/tools/omni-search.ts +67 -5
- package/src/task-agent/parent-host.ts +14 -1
- package/src/task-agent/pod-distributor-entry.ts +3 -0
- package/src/task-agent/task-hand.ts +31 -1
- package/src/task-orchestrator/surfaces/pod-distributor.ts +48 -0
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +43 -0
- package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +38 -1
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +29 -4
- package/src/task-orchestrator/surfaces/pod-si-warm-entry.ts +33 -6
- package/src/task-orchestrator/surfaces/pod-source-bundle.ts +45 -9
- package/src/task-orchestrator/surfaces/pod-source-receive.ts +163 -13
- package/src/task-orchestrator/surfaces/pod-source-spec.ts +3 -3
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +209 -39
- package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +80 -3
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +280 -60
- package/src/task-orchestrator/surfaces/self-implement.ts +18 -0
- package/src/tokens.ts +35 -2
- package/src/tool-runtime/agent-runtime.ts +1 -0
- package/src/tool-runtime/elanous-skills-list-runtime.ts +5 -1
- package/src/tool-runtime/skill-exec-runtime.ts +33 -13
- package/src/tool-runtime/types.ts +1 -0
- package/src/tui/entry.ts +24 -7
- package/src/tui/sidetab/attach.ts +47 -0
- 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/tui-client/local-chat-turn.ts +26 -13
- package/src/tui.ts +22 -0
- package/src/user-config.ts +11 -5
- package/src/ux-sim/fake-kubectl.ts +37 -3
- 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/fault-pool-cap.ts +11 -6
- package/src/ux-sim/mock-scenario-catalog.json +41 -0
- package/src/ux-sim/mock-scenario-catalog.ts +156 -0
- package/src/ux-sim/release-sim-rig.ts +262 -0
- package/src/ux-sim/scenario.ts +116 -23
- 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/src/voice/voice-tts-singleton.ts +18 -3
- package/src/web-search/grok.ts +5 -9
- package/apps/pwa/out/_next/static/chunks/1060.014f1f01a17aec26.js +0 -115
- package/apps/pwa/out/_next/static/chunks/1415.79821ec7ae99acdb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1452.162bb2d9d699e82a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/147.f92f63bbc5e85fa5.js +0 -286
- 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/2047.8f23e210995d4548.js +0 -2
- package/apps/pwa/out/_next/static/chunks/2061-7f2bbc53ae96c88b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2066.a77257c8c350770a.js +0 -23
- 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/2281-b8cede695c6c650e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2499.02fbfd18126c10c0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2522.f2766b76d22c8bdf.js +0 -34
- 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/2829-734fe8bf2eee7347.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/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/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/5622.94893f5aea7185d0.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/6624.981ef7caeb680560.js +0 -32
- 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/6cc1d1d6.9a98dd4622f1afc6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7203-800e11037adc41eb.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/7515.1ad6efe157fa4448.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/7825-39203196a12579b2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7869.5e1a9a12fd70d6c7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8086.1ab9103c41be884f.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/8357.1aaa713b052a78b1.js +0 -309
- 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/9069.657590a84afb8fac.js +0 -41
- 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/9992.07ce73c10bd5e6a1.js +0 -79
- 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/botlab/page-ba957ff875a026a0.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/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/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/c696986b.5dc8bb1143af16d1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/d5d3cefc-373c4eb722ed848b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/d8de0de2-dd0f4ac8e5ab1832.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/apps/pwa/out/_next/static/css/d0a48dc099ed86cf.css +0 -1
- package/scripts/ratchets/next-tui-entry-budget.ts +0 -124
- /package/apps/pwa/out/_next/static/{HjeK7zONHfR7op1hKXp4k → X1ucLw10Cds_h614NoEnh}/_ssgManifest.js +0 -0
package/src/session/chat.ts
CHANGED
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
type SessionMeta, type SerializedMessage, type CreateSessionOpts,
|
|
18
18
|
} from './index.js';
|
|
19
19
|
import { debug } from '../debug/log.js';
|
|
20
|
+
import { createRequestSizeGuard, formatRequestSizeStatus, type RequestSizeGuard } from './request-size-guard.js';
|
|
20
21
|
import type { InputSourceKind } from '../input/input-source-kind.js';
|
|
21
22
|
import {
|
|
22
23
|
getProviderForConfig, streamLLMWithTools, type LLMMessage, type LLMOpts, type LLMProvider,
|
|
@@ -41,9 +42,15 @@ import {
|
|
|
41
42
|
// ⭐ substrate 통합(PLAN-unified-autonomous-agent-substrate-2026-07-20) — goal-loop 아밍 시
|
|
42
43
|
// chat 툴루프를 canonical 엔진(runGoalLoop→runCoreTurn→streamLLMWithTools)으로 라우팅.
|
|
43
44
|
// ACP bridge(core-turn-bridge.ts)·dashboard(runGoalLoopHook)와 동일 엔진 재사용(재발명 제거).
|
|
44
|
-
import { runGoalLoop, type CoreTurnContext, type CoreTurnDispatchTool } from '../core-turn/index.js';
|
|
45
|
+
import { runCoreTurn, runGoalLoop, type CoreTurnContext, type CoreTurnDispatchTool } from '../core-turn/index.js';
|
|
45
46
|
import { composeChildContext, type ChildContextProfile } from '../self-implement/child-context-composition.js';
|
|
46
47
|
import { getHarnessSpace } from '../harness/harness-space.js';
|
|
48
|
+
import { isResearchAgentIntent } from '../tool-hints/signals.js';
|
|
49
|
+
import {
|
|
50
|
+
buildSessionRuntimeTurnSystemMessages,
|
|
51
|
+
createSessionPostureState,
|
|
52
|
+
resolveSessionTurnProfileWithHistory,
|
|
53
|
+
} from '../session-runtime/index.js';
|
|
47
54
|
|
|
48
55
|
export interface RunTurnOpts {
|
|
49
56
|
userConfig: UserConfig;
|
|
@@ -58,6 +65,8 @@ export interface RunTurnOpts {
|
|
|
58
65
|
/** Optional callback for each streamed text delta — telegram uses this to
|
|
59
66
|
* accumulate; CLI uses it to render live. */
|
|
60
67
|
onDelta?: (delta: string) => void;
|
|
68
|
+
/** Replace a provisional streamed answer after a grounded TUI synthesis completes. */
|
|
69
|
+
onReplaceText?: (fullText: string) => void;
|
|
61
70
|
/** Optional transient stream recovery status for the originating UI. */
|
|
62
71
|
onStatusLine?: (line: string) => void;
|
|
63
72
|
/** Optional provider override — for tests. */
|
|
@@ -293,6 +302,24 @@ export async function runTurn(opts: RunTurnOpts): Promise<RunTurnResult> {
|
|
|
293
302
|
// just skip and continue.
|
|
294
303
|
let memoryIds: string[] = [];
|
|
295
304
|
let effectiveSystemPrompt = opts.systemPrompt;
|
|
305
|
+
// The Next TUI runs through this shared session adapter rather than the classic dashboard
|
|
306
|
+
// preamble. Give research turns the same verified-reconciliation instruction on this path.
|
|
307
|
+
if (meta.source === 'tui' && !effectiveSystemPrompt?.includes('## Proactive Reconciliation')) {
|
|
308
|
+
const priorUserTexts = messages
|
|
309
|
+
.filter(message => message.role === 'user' && typeof message.content === 'string')
|
|
310
|
+
.map(message => String(message.content));
|
|
311
|
+
const turnProfile = resolveSessionTurnProfileWithHistory({
|
|
312
|
+
userText: opts.userText,
|
|
313
|
+
priorUserTexts,
|
|
314
|
+
chatModeState: createSessionPostureState(),
|
|
315
|
+
});
|
|
316
|
+
const reconciliation = buildSessionRuntimeTurnSystemMessages(turnProfile, opts.userText)
|
|
317
|
+
.filter(message => String(message.content).includes('## Proactive Reconciliation'));
|
|
318
|
+
if (reconciliation.length > 0) {
|
|
319
|
+
const block = reconciliation.map(message => String(message.content)).join('\n\n');
|
|
320
|
+
effectiveSystemPrompt = effectiveSystemPrompt ? `${effectiveSystemPrompt}\n\n${block}` : block;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
296
323
|
if (!opts.skipMemoryInjection) {
|
|
297
324
|
try {
|
|
298
325
|
// LLM-judge recall(2026-07-19 · 기본 ON·대표 지시) — 키워드 대신 luna 의미판정으로 관련
|
|
@@ -400,65 +427,41 @@ export async function runTurn(opts: RunTurnOpts): Promise<RunTurnResult> {
|
|
|
400
427
|
return trimToBudget(wire, opts.maxTokens ?? DEFAULT_TOKEN_BUDGET);
|
|
401
428
|
};
|
|
402
429
|
|
|
403
|
-
|
|
404
|
-
const requestSizeGuard: NonNullable<LLMOpts['requestSizeGuard']> | undefined =
|
|
430
|
+
const requestSizeGuard: RequestSizeGuard | undefined =
|
|
405
431
|
meta.source === 'tui' && provider.name === 'openai-codex'
|
|
406
|
-
? {
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
// The persisted compacted session includes this turn's
|
|
424
|
-
// user message. Drop that final persisted row here, then
|
|
425
|
-
// assembleTurnMessages re-adds the canonical userMsg and
|
|
426
|
-
// any image blocks from opts.userImages exactly once.
|
|
427
|
-
messages = refreshed.messages.slice(0, -1);
|
|
428
|
-
const rebuilt = assembleTurnMessages(effectiveSystemPrompt).kept;
|
|
429
|
-
return { messages: rebuilt, reason: `session-${result.reason}` };
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
const { runCompactPipeline } = await import('../compact/pipeline.js');
|
|
435
|
-
const { getDefaultCompactProvider } = await import('../compact/provider.js');
|
|
436
|
-
const compacted = await runCompactPipeline(currentMessages, {
|
|
437
|
-
sessionId: opts.sessionId,
|
|
438
|
-
provider: getDefaultCompactProvider(),
|
|
439
|
-
activeModelId: llmOpts?.model ?? provider.defaultModel,
|
|
440
|
-
policy: {
|
|
441
|
-
preserveLastN: opts.userConfig.chat.autoCompact.preserveLastN,
|
|
442
|
-
archiveEnabled: opts.userConfig.chat.compact.archiveEnabled,
|
|
443
|
-
},
|
|
432
|
+
? createRequestSizeGuard({
|
|
433
|
+
compactOptions: () => ({
|
|
434
|
+
sessionId: opts.sessionId,
|
|
435
|
+
activeModelId: llmOpts?.model ?? provider.defaultModel,
|
|
436
|
+
preserveLastN: opts.userConfig.chat.autoCompact.preserveLastN,
|
|
437
|
+
archiveEnabled: opts.userConfig.chat.compact.archiveEnabled,
|
|
438
|
+
}),
|
|
439
|
+
// The first request has only the persisted transcript plus this
|
|
440
|
+
// user turn, so use the shared session compactor and rebuild from
|
|
441
|
+
// the rewritten history. Later tool rounds compact their live
|
|
442
|
+
// message list (shared guard) so no just-produced tool context is lost.
|
|
443
|
+
compactFirstRequest: async () => {
|
|
444
|
+
const { compactSessionHistory } = await import('./compact-session.js');
|
|
445
|
+
const result = await compactSessionHistory(opts.sessionId, {
|
|
446
|
+
config: opts.userConfig.chat.autoCompact,
|
|
447
|
+
force: true,
|
|
448
|
+
modelId: llmOpts?.model ?? provider.defaultModel,
|
|
444
449
|
});
|
|
445
|
-
|
|
446
|
-
const
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
450
|
+
if (!result.fired) return null;
|
|
451
|
+
const refreshed = loadSession(opts.sessionId);
|
|
452
|
+
if (!refreshed) return null;
|
|
453
|
+
// The persisted compacted session includes this turn's
|
|
454
|
+
// user message. Drop that final persisted row here, then
|
|
455
|
+
// assembleTurnMessages re-adds the canonical userMsg and
|
|
456
|
+
// any image blocks from opts.userImages exactly once.
|
|
457
|
+
messages = refreshed.messages.slice(0, -1);
|
|
458
|
+
const rebuilt = assembleTurnMessages(effectiveSystemPrompt).kept;
|
|
459
|
+
return { messages: rebuilt, reason: `session-${result.reason}` };
|
|
453
460
|
},
|
|
454
461
|
onMeasured: (measurement) => {
|
|
455
|
-
|
|
456
|
-
opts.onStatusLine?.(
|
|
457
|
-
`ctx ${measurement.requestChars.toLocaleString()} chars / ${measurement.maxChars.toLocaleString()}`
|
|
458
|
-
+ (measurement.compacted ? ` · compact ${measurement.reason}` : ''),
|
|
459
|
-
);
|
|
462
|
+
opts.onStatusLine?.(formatRequestSizeStatus(measurement));
|
|
460
463
|
},
|
|
461
|
-
}
|
|
464
|
+
})
|
|
462
465
|
: undefined;
|
|
463
466
|
|
|
464
467
|
let kept: LLMMessage[] = [];
|
|
@@ -508,7 +511,8 @@ export async function runTurn(opts: RunTurnOpts): Promise<RunTurnResult> {
|
|
|
508
511
|
// streamLLMWithTools)으로 라우팅. 미아밍이면 아래 기존 single-turn 경로 그대로(회귀 0).
|
|
509
512
|
const goalLoopCfg = opts.userConfig.llm.goalLoop;
|
|
510
513
|
const armGoalLoop = opts.goalLoop === true || goalLoopCfg?.enabled === true;
|
|
511
|
-
|
|
514
|
+
const armTuiResearchTurn = opts.utteranceSurface === 'tui' && turnTools.length > 0 && isResearchAgentIntent(opts.userText);
|
|
515
|
+
if (armGoalLoop || armTuiResearchTurn) {
|
|
512
516
|
// ⭐ CHILD-CONTEXT-BUDGET(0.2.35 칸) — 구현 자식(self-implement 공간)의 첫 goal-loop
|
|
513
517
|
// 턴에서 실제 effectiveSystemPrompt·turnTools 스키마·userText(골)의 구성 바이트를
|
|
514
518
|
// composeChildContext 로 계측해 child.context-composition 사건 1회로 남긴다.
|
|
@@ -543,6 +547,7 @@ export async function runTurn(opts: RunTurnOpts): Promise<RunTurnResult> {
|
|
|
543
547
|
signal: opts.signal ?? new AbortController().signal,
|
|
544
548
|
callbacks: {
|
|
545
549
|
onText: (delta) => { opts.onDelta?.(delta); },
|
|
550
|
+
onReplaceText: (fullText) => { opts.onReplaceText?.(fullText); },
|
|
546
551
|
onGoalInterim: (interimText) => {
|
|
547
552
|
appendMessage(opts.sessionId, {
|
|
548
553
|
role: 'assistant', content: interimText, ts: new Date().toISOString(),
|
|
@@ -563,8 +568,14 @@ export async function runTurn(opts: RunTurnOpts): Promise<RunTurnResult> {
|
|
|
563
568
|
? { requestSizeGuard: guardedTurnLlmOpts.requestSizeGuard } : {}),
|
|
564
569
|
};
|
|
565
570
|
const maxIterations = opts.goalLoopMaxIterations ?? goalLoopCfg?.maxIterations;
|
|
566
|
-
|
|
567
|
-
|
|
571
|
+
if (armGoalLoop) {
|
|
572
|
+
const gl = await runGoalLoop(coreCtx, maxIterations !== undefined ? { maxIterations } : {});
|
|
573
|
+
text = gl.finalText;
|
|
574
|
+
} else {
|
|
575
|
+
const coreResult = await runCoreTurn(coreCtx);
|
|
576
|
+
text = coreResult.finalText;
|
|
577
|
+
if (coreResult.stopReason === 'auth_rejected') throw new Error(coreResult.errorMessage ?? 'Authentication was rejected');
|
|
578
|
+
}
|
|
568
579
|
} else {
|
|
569
580
|
text = await streamLLMWithTools(
|
|
570
581
|
kept,
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// TUI-TOKEN-GUARD-WIRE — shared request-size guard (#32254 cap).
|
|
2
|
+
//
|
|
3
|
+
// The 400k-char cap used to be built only inside `session/chat.ts runTurn`.
|
|
4
|
+
// The production TUI does not run that function: it goes
|
|
5
|
+
// DashboardSession → bridgeCoreTurnToAcp → runCoreTurn/runGoalLoop, so the
|
|
6
|
+
// guard never reached `llm.ts` and no `request-size-compact` event fired
|
|
7
|
+
// (root cause: seat-state/OP/tmp/TUI-TOKEN-BURN-ROOT-CAUSE-1028.md).
|
|
8
|
+
//
|
|
9
|
+
// This module owns the guard construction so both paths share one policy:
|
|
10
|
+
// - `createRequestSizeGuard` — the `LLMOpts.requestSizeGuard` object.
|
|
11
|
+
// The first measured request may use a caller hook (`compactFirstRequest`)
|
|
12
|
+
// that compacts the caller's *persisted* history; every other request
|
|
13
|
+
// (and a first request whose hook declines) compacts the live message list.
|
|
14
|
+
// - `compactLiveMessages` — the live compaction (Layer 1/2 + optional
|
|
15
|
+
// Layer 3 summarize) shared by the guard and by hosts that compact their
|
|
16
|
+
// own history store.
|
|
17
|
+
// - `estimateRequestChars` — cheap pre-send estimate (JSON chars of the
|
|
18
|
+
// messages plus tool specs) used by the ACP bridge preflight.
|
|
19
|
+
//
|
|
20
|
+
// ⚠️ `llm.ts` applies the compacted list with `messages.splice(...)`, but the
|
|
21
|
+
// array it receives is a per-request copy (`mapProviderToolNamesInMessages`),
|
|
22
|
+
// not `streamLLMWithTools`'s `history`. Compaction therefore does not survive
|
|
23
|
+
// into the next tool round by itself — the guard re-measures each request —
|
|
24
|
+
// and only a host write-back (chat.ts session rewrite / dashboard history
|
|
25
|
+
// replace) makes it survive into the next prompt.
|
|
26
|
+
|
|
27
|
+
import type { LLMMessage, LLMOpts, LLMToolSpec } from '../llm.js';
|
|
28
|
+
import type { CompactProvider } from '../compact/provider.js';
|
|
29
|
+
|
|
30
|
+
/** #32254 — the wire cap for Codex TUI requests (serialized body chars). */
|
|
31
|
+
export const REQUEST_SIZE_MAX_CHARS = 400_000;
|
|
32
|
+
|
|
33
|
+
export type RequestSizeGuard = NonNullable<LLMOpts['requestSizeGuard']>;
|
|
34
|
+
export type RequestSizeMeasurement = Parameters<NonNullable<RequestSizeGuard['onMeasured']>>[0];
|
|
35
|
+
export type RequestSizeCompactInfo = Parameters<RequestSizeGuard['compactMessages']>[1];
|
|
36
|
+
export type RequestSizeCompactResult = Awaited<ReturnType<RequestSizeGuard['compactMessages']>>;
|
|
37
|
+
|
|
38
|
+
type RunCompactPipeline = typeof import('../compact/pipeline.js').runCompactPipeline;
|
|
39
|
+
|
|
40
|
+
export interface CompactLiveMessagesOptions {
|
|
41
|
+
sessionId?: string;
|
|
42
|
+
activeModelId?: string;
|
|
43
|
+
preserveLastN?: number;
|
|
44
|
+
archiveEnabled?: boolean;
|
|
45
|
+
/** Test seam — defaults to the real `runCompactPipeline` with the default compact provider. */
|
|
46
|
+
runCompactPipeline?: RunCompactPipeline;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** Compact a live message list. Returns `null` when no layer changed anything. */
|
|
50
|
+
export async function compactLiveMessages(
|
|
51
|
+
messages: LLMMessage[],
|
|
52
|
+
opts: CompactLiveMessagesOptions,
|
|
53
|
+
): Promise<{ messages: LLMMessage[]; reason: string } | null> {
|
|
54
|
+
let run = opts.runCompactPipeline;
|
|
55
|
+
let provider: CompactProvider | undefined;
|
|
56
|
+
if (!run) {
|
|
57
|
+
run = (await import('../compact/pipeline.js')).runCompactPipeline;
|
|
58
|
+
provider = (await import('../compact/provider.js')).getDefaultCompactProvider();
|
|
59
|
+
}
|
|
60
|
+
const compacted = await run(messages, {
|
|
61
|
+
...(opts.sessionId !== undefined ? { sessionId: opts.sessionId } : {}),
|
|
62
|
+
...(provider !== undefined ? { provider } : {}),
|
|
63
|
+
...(opts.activeModelId !== undefined ? { activeModelId: opts.activeModelId } : {}),
|
|
64
|
+
policy: {
|
|
65
|
+
...(opts.preserveLastN !== undefined ? { preserveLastN: opts.preserveLastN } : {}),
|
|
66
|
+
...(opts.archiveEnabled !== undefined ? { archiveEnabled: opts.archiveEnabled } : {}),
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
const diagnostics = compacted.diagnostics;
|
|
70
|
+
const changed = diagnostics.layer1ResponsesTrimmed > 0
|
|
71
|
+
|| diagnostics.layer2MicrocompactCleared > 0
|
|
72
|
+
|| diagnostics.layer3SummaryApplied === 1
|
|
73
|
+
|| diagnostics.layer5FallbackTruncated === 1;
|
|
74
|
+
return changed ? { messages: compacted.messages, reason: 'live-request-compact' } : null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface CreateRequestSizeGuardOptions {
|
|
78
|
+
maxChars?: number;
|
|
79
|
+
/** Live-compaction options, resolved lazily at compaction time (config is
|
|
80
|
+
* read only when a request is actually over the cap). */
|
|
81
|
+
compactOptions: () => CompactLiveMessagesOptions;
|
|
82
|
+
/** First measured request only: compact the caller's persisted history and
|
|
83
|
+
* return the rebuilt request. `null` falls through to live compaction. */
|
|
84
|
+
compactFirstRequest?: (
|
|
85
|
+
currentMessages: LLMMessage[],
|
|
86
|
+
info: RequestSizeCompactInfo,
|
|
87
|
+
) => Promise<RequestSizeCompactResult>;
|
|
88
|
+
onMeasured?: (measurement: RequestSizeMeasurement) => void;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function createRequestSizeGuard(opts: CreateRequestSizeGuardOptions): RequestSizeGuard {
|
|
92
|
+
let measuredProviderRequests = 0;
|
|
93
|
+
return {
|
|
94
|
+
maxChars: opts.maxChars ?? REQUEST_SIZE_MAX_CHARS,
|
|
95
|
+
compactMessages: async (currentMessages, info) => {
|
|
96
|
+
if (measuredProviderRequests === 0 && opts.compactFirstRequest) {
|
|
97
|
+
const first = await opts.compactFirstRequest(currentMessages, info);
|
|
98
|
+
if (first) return first;
|
|
99
|
+
}
|
|
100
|
+
return compactLiveMessages(currentMessages, opts.compactOptions());
|
|
101
|
+
},
|
|
102
|
+
onMeasured: (measurement) => {
|
|
103
|
+
measuredProviderRequests += 1;
|
|
104
|
+
opts.onMeasured?.(measurement);
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** Cheap pre-send size estimate: JSON chars of the messages plus tool specs.
|
|
110
|
+
* It tracks the Codex wire body closely (the wire also serializes both). */
|
|
111
|
+
export function estimateRequestChars(messages: readonly LLMMessage[], tools: readonly LLMToolSpec[] = []): number {
|
|
112
|
+
try {
|
|
113
|
+
return JSON.stringify(messages).length + (tools.length > 0 ? JSON.stringify(tools).length : 0);
|
|
114
|
+
} catch {
|
|
115
|
+
return 0;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** One-line status text shared by chat.ts and the ACP bridge. */
|
|
120
|
+
export function formatRequestSizeStatus(measurement: RequestSizeMeasurement): string {
|
|
121
|
+
return `ctx ${measurement.requestChars.toLocaleString()} chars / ${measurement.maxChars.toLocaleString()}`
|
|
122
|
+
+ (measurement.compacted ? ` · compact ${measurement.reason}` : '');
|
|
123
|
+
}
|
|
@@ -26,7 +26,7 @@ import type { ToolRunResult, ToolRuntime } from '../tool-runtime/types.js';
|
|
|
26
26
|
import { blockWriteToolSearchHydration, type ToolSearchRunResult } from '../tool-runtime/tool-search-runtime.js';
|
|
27
27
|
import { findNativeTool, isNativeToolModelExposed } from '../native-tool-catalog.js';
|
|
28
28
|
import { hasAstGrep } from '../skills/tools/ast-grep.js';
|
|
29
|
-
import { buildOmniSearchTool,
|
|
29
|
+
import { buildOmniSearchTool, researchOmniSearchAvailable } from '../skills/tools/omni-search.js';
|
|
30
30
|
import { buildWebSearchTool } from '../skills/tools/web-search.js';
|
|
31
31
|
import { buildWebFetchTool } from '../skills/tools/webfetch.js';
|
|
32
32
|
import { buildSelfImplementDaemonSpec } from '../boot/daemon-tools/self-implement.js';
|
|
@@ -170,6 +170,8 @@ export interface SessionPostureSnapshot {
|
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
export interface SessionRuntimeDispatchDeps {
|
|
173
|
+
/** Current conversation session; used to scope background Agent receipts. */
|
|
174
|
+
sessionId?: string;
|
|
173
175
|
signal?: AbortSignal;
|
|
174
176
|
/** Current LLM tool call, for correlating a foreground harness stop target with the TUI call. */
|
|
175
177
|
toolCallId?: string;
|
|
@@ -429,6 +431,7 @@ interface SessionNativeToolRule {
|
|
|
429
431
|
signal?: AbortSignal,
|
|
430
432
|
opts?: {
|
|
431
433
|
pathPolicy?: PathPolicy;
|
|
434
|
+
sessionId?: string;
|
|
432
435
|
agentHostTools?: LLMToolSpec[];
|
|
433
436
|
agentDispatchTool?: (name: string, args: Record<string, unknown>) => Promise<unknown>;
|
|
434
437
|
buildChildToolCatalog?: (cwd: string) => {
|
|
@@ -512,6 +515,7 @@ const SESSION_NATIVE_TOOL_RULES: SessionNativeToolRule[] = [
|
|
|
512
515
|
build: () => buildAgentTool(),
|
|
513
516
|
match: () => false,
|
|
514
517
|
dispatch: async (args, signal, opts) => await dispatchAgent(args, {
|
|
518
|
+
parentSessionId: opts?.sessionId,
|
|
515
519
|
signal,
|
|
516
520
|
hostTools: opts?.agentHostTools,
|
|
517
521
|
dispatchTool: opts?.agentDispatchTool,
|
|
@@ -587,10 +591,10 @@ const SESSION_NATIVE_TOOL_RULES: SessionNativeToolRule[] = [
|
|
|
587
591
|
description: 'Multi-source research and triangulation across external signals.',
|
|
588
592
|
build: () => buildOmniSearchTool(),
|
|
589
593
|
match: (text) => hasResearchSearchIntent(text),
|
|
590
|
-
isAvailable: () =>
|
|
594
|
+
isAvailable: () => researchOmniSearchAvailable(),
|
|
591
595
|
dispatch: async (args) => {
|
|
592
|
-
const {
|
|
593
|
-
return await
|
|
596
|
+
const { dispatchResearchOmniSearch } = await import('../skills/tools/omni-search.js');
|
|
597
|
+
return await dispatchResearchOmniSearch(args);
|
|
594
598
|
},
|
|
595
599
|
},
|
|
596
600
|
{
|
|
@@ -969,9 +973,47 @@ export function buildSessionRuntimeTurnSystemMessages(
|
|
|
969
973
|
if (scopedGuidance) {
|
|
970
974
|
messages.push({ role: 'system', content: scopedGuidance });
|
|
971
975
|
}
|
|
976
|
+
const reconcileGuidance = buildProactiveReconcileGuidance(userText);
|
|
977
|
+
if (turnProfile.surface.domain === 'research') {
|
|
978
|
+
if (reconcileGuidance) {
|
|
979
|
+
messages.push({ role: 'system', content: PROACTIVE_RECONCILIATION_GUIDANCE.join('\n') });
|
|
980
|
+
}
|
|
981
|
+
} else if (reconcileGuidance) {
|
|
982
|
+
messages.push({ role: 'system', content: reconcileGuidance });
|
|
983
|
+
}
|
|
972
984
|
return messages;
|
|
973
985
|
}
|
|
974
986
|
|
|
987
|
+
/** A challenged tool/source claim is a request to repair the answer, not just
|
|
988
|
+
* to narrate whether the earlier answer was grounded. Keep this guidance
|
|
989
|
+
* scoped to explicit evidence challenges so ordinary turns stay unchanged. */
|
|
990
|
+
function buildProactiveReconcileGuidance(userText?: string): string | null {
|
|
991
|
+
const text = String(userText ?? '').toLowerCase();
|
|
992
|
+
if (!text.trim()) return null;
|
|
993
|
+
|
|
994
|
+
const explicitChallenge = [
|
|
995
|
+
/\b(?:did you|have you|were you)\b.{0,80}\b(?:actually|really|use|used|run|check|verify|consult|cite)\b/,
|
|
996
|
+
/\b(?:you (?:did not|didn't|never)\s+(?:use|run|check|verify|consult))\b/,
|
|
997
|
+
/\b(?:verify|check|recheck|re-check|confirm)\b.{0,80}\b(?:previous|prior|original|earlier)\b/,
|
|
998
|
+
/\b(?:earlier|previous|prior|last)\b.{0,40}\b(?:skill|tool|source|evidence)\b.{0,40}\b(?:used|ran|checked|verified|cited)\b.{0,30}\b(?:actually|really|right|correct)\b/,
|
|
999
|
+
/(?:앞서|이전|직전|기존|그때).{0,40}(?:스킬|도구|툴).{0,40}(?:쓴|사용한|실행한).{0,30}(?:맞|했나|했는지)/,
|
|
1000
|
+
/(?:스킬|도구|툴).{0,40}(?:제대로|실제로).{0,40}(?:찾았는지|찾았나|사용했는지|사용했나|썼는지|썼나)/,
|
|
1001
|
+
/(?:라고\s*(?:했는데|했음에도|말했는데)|이야기했음에도).{0,80}(?:확인|결말|결론|답).{0,40}(?:조정|수정|바꾸|고치)/,
|
|
1002
|
+
/(?:스킬|도구|근거|출처).{0,60}(?:실제로\s*사용|제대로\s*사용|확인했나|썼나|쓴\s*게\s*맞|안\s*썼|못\s*찾|재확인)/,
|
|
1003
|
+
];
|
|
1004
|
+
if (!explicitChallenge.some(pattern => pattern.test(text))) return null;
|
|
1005
|
+
|
|
1006
|
+
return [
|
|
1007
|
+
'## Proactive Reconciliation — Tool-use Correction — Reconcile the Original Request This Turn',
|
|
1008
|
+
'',
|
|
1009
|
+
'The user is challenging whether the prior answer used the requested tool, skill, source, or evidence.',
|
|
1010
|
+
'Treat the original task as still open. Recover it and the prior conclusion from the conversation, then verify the challenged claim with an available capability.',
|
|
1011
|
+
'If verification changes or invalidates the prior conclusion, shows the original task was not completed, or finds that evidence is missing, incomplete, or insufficient, continue the original task in this same user turn with verified available tools and give a corrected, evidence-grounded result.',
|
|
1012
|
+
'If the requested capability is unavailable, say so plainly and continue the original task with another suitable available source when possible. Never claim a tool or skill ran when it did not.',
|
|
1013
|
+
'Do not stop at an apology or verification-only report, do not ask the user to repeat the task, and do not emit a raw JSON dump unless explicitly requested. Answer in concise prose.',
|
|
1014
|
+
].join('\n');
|
|
1015
|
+
}
|
|
1016
|
+
|
|
975
1017
|
function buildTurnScopedExplorationGuidance(userText?: string): string | null {
|
|
976
1018
|
if (isScopedAnalysisRequest(userText)) {
|
|
977
1019
|
return [
|
|
@@ -1239,6 +1281,7 @@ function buildSurfaceOperationalGuidance(surface: SessionSurfaceProfile): string
|
|
|
1239
1281
|
'Bias toward multi-source external investigation: use WebSearch, WebFetch, and OmniSearch before concluding.',
|
|
1240
1282
|
'WebSearch is provider-backed and may route through Grok live-search or Firecrawl; OmniSearch is the wider parallel path when you want triangulation across providers.',
|
|
1241
1283
|
'Prefer cited, current, cross-checked findings over repo-local assumptions when the question reaches beyond the workspace.',
|
|
1284
|
+
'',
|
|
1242
1285
|
].join('\n');
|
|
1243
1286
|
case 'research/turn':
|
|
1244
1287
|
return [
|
|
@@ -1247,6 +1290,7 @@ function buildSurfaceOperationalGuidance(surface: SessionSurfaceProfile): string
|
|
|
1247
1290
|
'You are in `research/turn`.',
|
|
1248
1291
|
'Handle the current turn as a lightweight external lookup. Prefer quick verification and concise sourced answers over deep autonomous exploration.',
|
|
1249
1292
|
'Keep WebSearch ready by default. It is provider-backed and may use Grok live-search or Firecrawl; use WebFetch for full page bodies and OmniSearch when the user asks for deeper cross-provider research.',
|
|
1293
|
+
'',
|
|
1250
1294
|
].join('\n');
|
|
1251
1295
|
case 'control/agent':
|
|
1252
1296
|
return [
|
|
@@ -1275,6 +1319,13 @@ function buildSurfaceOperationalGuidance(surface: SessionSurfaceProfile): string
|
|
|
1275
1319
|
}
|
|
1276
1320
|
}
|
|
1277
1321
|
|
|
1322
|
+
const PROACTIVE_RECONCILIATION_GUIDANCE = [
|
|
1323
|
+
'## Proactive Reconciliation — Tool-use Correction — Reconcile the Original Request This Turn',
|
|
1324
|
+
'When the user asks you to verify how an earlier answer was produced (tools, skills, or sources), check the actual results and compare them with the earlier conclusion.',
|
|
1325
|
+
'Treat the original task as still open. If verification changes or invalidates that conclusion, shows the original task was not completed, or finds that the evidence is missing, incomplete, or insufficient to support the conclusion, treat it as unreliable and continue in this same user turn: redo the original task with verified available tools and answer the original task with the corrected, evidence-grounded result in ordinary prose.',
|
|
1326
|
+
'Do not stop at an apology or verification-only report, do not ask the user to repeat the task, and do not emit a raw JSON dump unless explicitly requested. Answer in concise prose.',
|
|
1327
|
+
];
|
|
1328
|
+
|
|
1278
1329
|
export function createSessionPostureState(): SessionPostureState {
|
|
1279
1330
|
return createChatModeState();
|
|
1280
1331
|
}
|
|
@@ -1560,6 +1611,40 @@ export function resolveSessionTurnProfile(opts: {
|
|
|
1560
1611
|
};
|
|
1561
1612
|
}
|
|
1562
1613
|
|
|
1614
|
+
function isProactiveReconciliationFollowUp(userText: string): boolean {
|
|
1615
|
+
const referencesPrior = /(?:earlier|previous|prior|last|앞선|앞서|이전|직전|기존|그때|라고\s*(?:했|말)|이야기했|요청했)/i.test(userText);
|
|
1616
|
+
const referencesEvidence = /(?:answer|response|analysis|conclusion|tool|skill|source|evidence|답|응답|분석|결론|도구|툴|스킬|출처|근거)/i.test(userText);
|
|
1617
|
+
const asksToVerify = /(?:verify|recheck|check|confirm|validate|challenge|correct|used|맞|확인|검증|재확인|사용|사실|실제)/i.test(userText);
|
|
1618
|
+
return referencesPrior && referencesEvidence && asksToVerify;
|
|
1619
|
+
}
|
|
1620
|
+
|
|
1621
|
+
/** Preserve an active research turn's surface when the user challenges its prior evidence. */
|
|
1622
|
+
export function resolveSessionTurnProfileWithHistory(opts: {
|
|
1623
|
+
userText: string;
|
|
1624
|
+
priorUserTexts?: readonly string[];
|
|
1625
|
+
chatModeState: ChatModeState;
|
|
1626
|
+
inputSource?: InputSourceRef | null;
|
|
1627
|
+
}): SessionTurnProfile {
|
|
1628
|
+
const current = resolveSessionTurnProfile(opts);
|
|
1629
|
+
if (current.surface.domain === 'research' || !isProactiveReconciliationFollowUp(opts.userText)) return current;
|
|
1630
|
+
for (const priorUserText of [...(opts.priorUserTexts ?? [])].reverse()) {
|
|
1631
|
+
const prior = resolveSessionTurnProfile({
|
|
1632
|
+
userText: priorUserText,
|
|
1633
|
+
chatModeState: opts.chatModeState,
|
|
1634
|
+
inputSource: opts.inputSource,
|
|
1635
|
+
});
|
|
1636
|
+
if (prior.surface.domain === 'research') {
|
|
1637
|
+
return resolveSessionTurnProfile({
|
|
1638
|
+
userText: opts.userText,
|
|
1639
|
+
chatModeState: opts.chatModeState,
|
|
1640
|
+
preferredSurfaceId: prior.surface.id,
|
|
1641
|
+
inputSource: opts.inputSource,
|
|
1642
|
+
});
|
|
1643
|
+
}
|
|
1644
|
+
}
|
|
1645
|
+
return current;
|
|
1646
|
+
}
|
|
1647
|
+
|
|
1563
1648
|
export function resolveSessionSurfaceStatus(opts: {
|
|
1564
1649
|
userText?: string;
|
|
1565
1650
|
chatModeState: ChatModeState;
|
|
@@ -1736,6 +1821,7 @@ export function buildSessionRuntimeToolSpecs(opts: {
|
|
|
1736
1821
|
preferredSurfaceId?: SessionSurfaceId;
|
|
1737
1822
|
controlMode?: boolean;
|
|
1738
1823
|
}): LLMToolSpec[] {
|
|
1824
|
+
const catalogStartedAt = performance.now();
|
|
1739
1825
|
// TUI-DIET-D1-TAIL — the legacy userText-driven catalog (`rich !== false`) is gone;
|
|
1740
1826
|
// every caller already passed rich=false, so the essential catalog is the only path.
|
|
1741
1827
|
// The surface profile is still resolved for the always-on observation below.
|
|
@@ -1799,6 +1885,13 @@ export function buildSessionRuntimeToolSpecs(opts: {
|
|
|
1799
1885
|
userTextChars: opts.userText.length,
|
|
1800
1886
|
});
|
|
1801
1887
|
}
|
|
1888
|
+
try {
|
|
1889
|
+
debug.log('session-runtime.latency', 'tool-catalog-ready', {
|
|
1890
|
+
elapsedMs: Math.round((performance.now() - catalogStartedAt) * 10) / 10,
|
|
1891
|
+
toolCount: finalSpecs.length,
|
|
1892
|
+
surfaceId: surface.id,
|
|
1893
|
+
});
|
|
1894
|
+
} catch { /* observation must never delay a turn */ }
|
|
1802
1895
|
return finalSpecs;
|
|
1803
1896
|
}
|
|
1804
1897
|
|
|
@@ -2025,6 +2118,7 @@ export async function dispatchSessionRuntimeTool(
|
|
|
2025
2118
|
}
|
|
2026
2119
|
result = await nativeRule.dispatch(normalizedArgs, deps.signal, {
|
|
2027
2120
|
pathPolicy: deps.pathPolicy,
|
|
2121
|
+
sessionId: deps.sessionId,
|
|
2028
2122
|
agentHostTools: deps.agentHostTools,
|
|
2029
2123
|
agentDispatchTool: deps.agentDispatchTool,
|
|
2030
2124
|
buildChildToolCatalog: deps.buildChildToolCatalog,
|
|
@@ -325,7 +325,7 @@ function joinWithBlankLine(prefix: string, block: string): string {
|
|
|
325
325
|
|
|
326
326
|
function appendTextToMessage(msg: LLMMessage, block: string): LLMMessage {
|
|
327
327
|
if (typeof msg.content === 'string') {
|
|
328
|
-
return {
|
|
328
|
+
return { ...msg, content: joinWithBlankLine(msg.content, block) };
|
|
329
329
|
}
|
|
330
330
|
// ContentBlock[] — append to the LAST text block; if none exists,
|
|
331
331
|
// push a fresh one. Other block kinds (image / tool_use / tool_result)
|
|
@@ -336,11 +336,11 @@ function appendTextToMessage(msg: LLMMessage, block: string): LLMMessage {
|
|
|
336
336
|
if (b.type === 'text') {
|
|
337
337
|
const text = (b as { text?: string }).text ?? '';
|
|
338
338
|
blocks[i] = { ...b, text: joinWithBlankLine(text, block) };
|
|
339
|
-
return {
|
|
339
|
+
return { ...msg, content: blocks };
|
|
340
340
|
}
|
|
341
341
|
}
|
|
342
342
|
blocks.push({ type: 'text', text: block } as ContentBlock);
|
|
343
|
-
return {
|
|
343
|
+
return { ...msg, content: blocks };
|
|
344
344
|
}
|
|
345
345
|
|
|
346
346
|
/** Wave 2 W2.4 + W2.5 convenience — split specs AND inject the
|