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
|
@@ -13,6 +13,7 @@ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from '
|
|
|
13
13
|
import { dirname, join } from 'node:path';
|
|
14
14
|
import { homedir } from 'node:os';
|
|
15
15
|
import type { ModelCatalog, ModelEntry } from './types.js';
|
|
16
|
+
import { resolveModelAlias } from './model-alias.js';
|
|
16
17
|
|
|
17
18
|
// 2026-05-03 snapshot — added Kimi (Moonshot) / Qwen 3.6 (Alibaba) /
|
|
18
19
|
// GLM 5.x (Zhipu) families. Open-weight vs cloud-only is captured by
|
|
@@ -172,16 +173,55 @@ export const BUILTIN_CATALOG: ModelCatalog = {
|
|
|
172
173
|
inputPerMtok: 2,
|
|
173
174
|
outputPerMtok: 10,
|
|
174
175
|
local: false,
|
|
175
|
-
tags: ['coding', 'reasoning', 'agentic', 'balanced', 'long-context'],
|
|
176
|
+
tags: ['coding', 'reasoning', 'agentic', 'balanced', 'legacy', 'long-context'],
|
|
176
177
|
bestFor: ['daily-coding', 'multi-file-edit', 'autonomous-implementation', 'complex-architecture'],
|
|
177
178
|
reservedOutputTokens: 12_000,
|
|
179
|
+
// Coarse capability tier (legacy state is recorded in tags; this schema has no `legacy` tier).
|
|
178
180
|
tier: 'better',
|
|
179
181
|
variantOf: 'gpt-6',
|
|
180
182
|
effortAxis: 'sol',
|
|
181
183
|
reasoningEffortCeiling: 'max',
|
|
182
184
|
releasedAt: '2026-09-22',
|
|
183
185
|
classification: { source: 'builtin', at: '2026-09-23' },
|
|
184
|
-
notes: '
|
|
186
|
+
notes: 'Legacy GPT-6 Sol retained for explicit compatibility; GPT-6.1 Terra is the current Codex default. 1.05M context. Per OP 2026-10-28 price direction, its cached-input estimate matches GPT-6.1 Sol ($0.10/M).',
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
id: 'gpt-6.1-terra',
|
|
190
|
+
provider: 'openai-codex',
|
|
191
|
+
family: 'gpt-6',
|
|
192
|
+
contextWindow: 500_000,
|
|
193
|
+
inputPerMtok: 1,
|
|
194
|
+
outputPerMtok: 5,
|
|
195
|
+
local: false,
|
|
196
|
+
tags: ['coding', 'reasoning', 'agentic', 'balanced'],
|
|
197
|
+
bestFor: ['daily-coding', 'multi-file-edit', 'autonomous-implementation'],
|
|
198
|
+
reservedOutputTokens: 12_000,
|
|
199
|
+
tier: 'better',
|
|
200
|
+
variantOf: 'gpt-6',
|
|
201
|
+
effortAxis: 'terra',
|
|
202
|
+
reasoningEffortCeiling: 'max',
|
|
203
|
+
releasedAt: '2026-10-26',
|
|
204
|
+
classification: { source: 'builtin', at: '2026-10-28' },
|
|
205
|
+
notes: 'GPT-6.1 Terra · Codex CLI 0.164.0 카탈로그 실측 · 500K context · $1/$5, cached input $0.05/M. CLI 기본 effort=low; elanous 경로 기본 medium 유지.',
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
id: 'gpt-6.1-sol',
|
|
209
|
+
provider: 'openai-codex',
|
|
210
|
+
family: 'gpt-6',
|
|
211
|
+
contextWindow: 500_000,
|
|
212
|
+
inputPerMtok: 2,
|
|
213
|
+
outputPerMtok: 10,
|
|
214
|
+
local: false,
|
|
215
|
+
tags: ['coding', 'reasoning', 'agentic', 'frontier'],
|
|
216
|
+
bestFor: ['complex-architecture', 'long-horizon-agentic', 'deep-analysis'],
|
|
217
|
+
reservedOutputTokens: 16_000,
|
|
218
|
+
tier: 'best',
|
|
219
|
+
variantOf: 'gpt-6',
|
|
220
|
+
effortAxis: 'sol',
|
|
221
|
+
reasoningEffortCeiling: 'max',
|
|
222
|
+
releasedAt: '2026-10-26',
|
|
223
|
+
classification: { source: 'builtin', at: '2026-10-28' },
|
|
224
|
+
notes: 'GPT-6.1 Sol · Codex CLI 0.164.0 카탈로그 실측 · 500K context · $2/$10, cached input $0.10/M. CLI 기본 effort=low; elanous 경로 기본 medium 유지.',
|
|
185
225
|
},
|
|
186
226
|
{
|
|
187
227
|
id: 'gpt-6-luna',
|
|
@@ -944,6 +984,23 @@ export function reasoningEffortCeiling(modelId: string | undefined): ReasoningEf
|
|
|
944
984
|
return 'medium'; // local 등 미상 — 보수적
|
|
945
985
|
}
|
|
946
986
|
|
|
987
|
+
export const CHILD_LLM_EFFORT_LADDER = ['minimal', 'low', 'medium', 'high', 'xhigh', 'max'] as const;
|
|
988
|
+
|
|
989
|
+
/** Shared explicit effort check for task hand and the dev entrypoint. */
|
|
990
|
+
export function childLlmEffortProblem(model: string, entered: string): string | undefined {
|
|
991
|
+
const effort = entered.trim().toLowerCase();
|
|
992
|
+
const ladder: readonly string[] = CHILD_LLM_EFFORT_LADDER;
|
|
993
|
+
if (!ladder.includes(effort)) {
|
|
994
|
+
return `--child-llm-effort 알 수 없음: ${entered} · 후보: ${CHILD_LLM_EFFORT_LADDER.join(', ')}`;
|
|
995
|
+
}
|
|
996
|
+
const ceiling = reasoningEffortCeiling(resolveModelAlias(model.trim()) ?? model.trim());
|
|
997
|
+
if (ceiling === 'none') return `--child-llm-effort 거부: ${model} 은 추론 노력을 «안 받는다»(ceiling=none)`;
|
|
998
|
+
if (ladder.indexOf(effort) > ladder.indexOf(ceiling)) {
|
|
999
|
+
return `--child-llm-effort 거부: ${effort} 가 ${model} 의 상한(${ceiling})을 넘는다`;
|
|
1000
|
+
}
|
|
1001
|
+
return undefined;
|
|
1002
|
+
}
|
|
1003
|
+
|
|
947
1004
|
// ── Paths ──────────────────────────────────────────────────────────────
|
|
948
1005
|
|
|
949
1006
|
export function getCatalogPath(home: string = homedir()): string {
|
|
@@ -49,12 +49,12 @@ export function setAutoProviderDecisionForTest(fn: (() => LLMProviderName | unde
|
|
|
49
49
|
/** config/tier 해석이 «실패»했을 때만 타는 최후 폴백. 티어 사다리가 안 읽히는
|
|
50
50
|
* 상황(부팅 초기·손상된 config)에서도 지점이 «성능 등급에 맞는» 모델을 얻게 한다. */
|
|
51
51
|
const LEGACY_TIER_FALLBACK: Readonly<Record<ModelTier, string>> = {
|
|
52
|
-
//
|
|
52
|
+
// Keep the fallback aligned with the GPT-6.1 Codex ladder if config/tier lookup fails.
|
|
53
53
|
// 사다리가 안 읽힐 때만 쓰이므로 codex 사다리의 «현재 값»과 같게 둔다(시험이 사다리와 대조한다).
|
|
54
54
|
budget: 'gpt-6-luna',
|
|
55
|
-
balanced: 'gpt-6-
|
|
56
|
-
better: 'gpt-6-
|
|
57
|
-
best: 'gpt-6-sol',
|
|
55
|
+
balanced: 'gpt-6.1-terra',
|
|
56
|
+
better: 'gpt-6.1-terra',
|
|
57
|
+
best: 'gpt-6.1-sol',
|
|
58
58
|
loaded: 'gpt-6-astra',
|
|
59
59
|
};
|
|
60
60
|
|
package/src/llm.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// Auto-routes based on model name prefix, or picks the first available provider.
|
|
4
4
|
|
|
5
5
|
import { wellFormedLLMMessages } from './llm-wellformed.js';
|
|
6
|
+
import { truncateOutput } from './output-truncation.js';
|
|
6
7
|
import { createHash, randomUUID } from 'node:crypto';
|
|
7
8
|
import { testFakeLlmEnabled, testFakeLlmProvider } from './ux-sim/fake-llm.js';
|
|
8
9
|
import { realpathSync } from 'node:fs';
|
|
@@ -26,6 +27,7 @@ import {
|
|
|
26
27
|
DEFAULT_PROVIDER,
|
|
27
28
|
} from './config.js';
|
|
28
29
|
import { debug, redactSecrets, redactSecretText } from './debug/log.js';
|
|
30
|
+
import { estimateMessagesTokens } from './tokens.js';
|
|
29
31
|
import { isVerifiedOpenGatewayModel } from './llm/opengateway-models.js';
|
|
30
32
|
import { llmUsageCostFields } from './budget/llm-cost.js';
|
|
31
33
|
import { accumulateByokUsage } from './llm/openrouter-byok-cost.js';
|
|
@@ -273,6 +275,13 @@ export interface LLMMessage {
|
|
|
273
275
|
phase?: 'commentary' | 'partial_answer' | 'final_answer';
|
|
274
276
|
/** Opaque Codex stateless reasoning items, before this assistant message. */
|
|
275
277
|
codexReasoningItems?: Array<{ type: 'reasoning'; encrypted_content: string; summary: unknown[]; id?: string }>;
|
|
278
|
+
/** TUI-PROMPT-CACHE-PREFIX — a `system` message whose text changes between
|
|
279
|
+
* requests of one session (seat boot card · git snapshot · memory · self
|
|
280
|
+
* health · per-turn guidance). The Codex Responses serializer keeps these
|
|
281
|
+
* OUT of `instructions` (which must stay byte-stable for prompt-cache
|
|
282
|
+
* prefix reuse) and sends them as a `developer` item placed just before
|
|
283
|
+
* the latest user message. Other providers ignore the flag. */
|
|
284
|
+
cacheVolatile?: boolean;
|
|
276
285
|
}
|
|
277
286
|
|
|
278
287
|
/** JSONSchema-shaped tool definition sent to the provider (no handler). */
|
|
@@ -455,6 +464,9 @@ export interface LLMOpts {
|
|
|
455
464
|
previousChars?: number;
|
|
456
465
|
}) => void;
|
|
457
466
|
};
|
|
467
|
+
/** Optional cap for text tool results accumulated into the conversation history.
|
|
468
|
+
* Oversized results are spilled to a local file and represented by head/tail. */
|
|
469
|
+
toolResultInlineLimitBytes?: number;
|
|
458
470
|
/** Optional model role attached to this request's usage observation. */
|
|
459
471
|
usageRole?: ModelRole;
|
|
460
472
|
/** Optional per-call metering phase; absent calls keep the existing ledger shape. */
|
|
@@ -1703,6 +1715,15 @@ export interface MessagesToResponsesInputOpts {
|
|
|
1703
1715
|
replayCodexReasoning?: boolean;
|
|
1704
1716
|
acceptUserMessageImages?: boolean;
|
|
1705
1717
|
onOrphanToolResult?: (callId: string) => void;
|
|
1718
|
+
/** TUI-PROMPT-CACHE-PREFIX — keep `instructions` stable for the prompt
|
|
1719
|
+
* cache prefix. When true: (a) leading `system` messages flagged
|
|
1720
|
+
* `cacheVolatile` are merged into ONE `developer` item inserted right
|
|
1721
|
+
* before the latest user text message (after the cached history), and
|
|
1722
|
+
* (b) `system` messages that appear after the conversation started
|
|
1723
|
+
* (loop self-notes, mid-turn hints) are emitted IN PLACE as `developer`
|
|
1724
|
+
* items instead of being folded into `instructions`. Default false keeps
|
|
1725
|
+
* the legacy "every system → instructions" fold. */
|
|
1726
|
+
stablePrefix?: boolean;
|
|
1706
1727
|
}
|
|
1707
1728
|
|
|
1708
1729
|
/** Exported for tests. Converts the unified LLMMessage shape into the
|
|
@@ -1743,6 +1764,11 @@ export function messagesToResponsesInput(
|
|
|
1743
1764
|
|
|
1744
1765
|
const sys: string[] = [];
|
|
1745
1766
|
const input: ResponsesInputItem[] = [];
|
|
1767
|
+
const stablePrefix = opts.stablePrefix === true;
|
|
1768
|
+
// Leading volatile system text (stablePrefix only) — spliced in before the
|
|
1769
|
+
// latest user text message once the whole input is assembled.
|
|
1770
|
+
const volatileSys: string[] = [];
|
|
1771
|
+
let conversationStarted = false;
|
|
1746
1772
|
for (const m of messages) {
|
|
1747
1773
|
// Build typed content blocks: text accumulated into one block,
|
|
1748
1774
|
// images appended as separate input_image entries. The old
|
|
@@ -1869,9 +1895,20 @@ export function messagesToResponsesInput(
|
|
|
1869
1895
|
}
|
|
1870
1896
|
|
|
1871
1897
|
if (m.role === 'system') {
|
|
1898
|
+
if (stablePrefix && conversationStarted) {
|
|
1899
|
+
// Mid-conversation system note → in-place developer item. Folding it
|
|
1900
|
+
// into `instructions` would rewrite the cache prefix every round.
|
|
1901
|
+
if (textBuf) input.push({ role: 'developer', content: [{ type: 'input_text', text: textBuf }] });
|
|
1902
|
+
continue;
|
|
1903
|
+
}
|
|
1904
|
+
if (stablePrefix && m.cacheVolatile) {
|
|
1905
|
+
if (textBuf) volatileSys.push(textBuf);
|
|
1906
|
+
continue;
|
|
1907
|
+
}
|
|
1872
1908
|
sys.push(textBuf);
|
|
1873
1909
|
continue;
|
|
1874
1910
|
}
|
|
1911
|
+
conversationStarted = true;
|
|
1875
1912
|
|
|
1876
1913
|
// Stateless Codex requires the opaque reasoning item in its original
|
|
1877
1914
|
// position before the corresponding assistant message/tool calls.
|
|
@@ -1897,6 +1934,13 @@ export function messagesToResponsesInput(
|
|
|
1897
1934
|
}
|
|
1898
1935
|
input.push(...trailingItems);
|
|
1899
1936
|
}
|
|
1937
|
+
if (volatileSys.length > 0) {
|
|
1938
|
+
const developerItem: ResponsesInputItem = {
|
|
1939
|
+
role: 'developer',
|
|
1940
|
+
content: [{ type: 'input_text', text: volatileSys.join('\n\n') }],
|
|
1941
|
+
};
|
|
1942
|
+
input.splice(latestUserTextIndex(input), 0, developerItem);
|
|
1943
|
+
}
|
|
1900
1944
|
if (input.length === 0) input.push({ role: 'user', content: [{ type: 'input_text', text: '' }] });
|
|
1901
1945
|
return {
|
|
1902
1946
|
instructions: sys.length ? sys.join('\n\n') : 'You are a helpful assistant.',
|
|
@@ -1904,6 +1948,17 @@ export function messagesToResponsesInput(
|
|
|
1904
1948
|
};
|
|
1905
1949
|
}
|
|
1906
1950
|
|
|
1951
|
+
/** Index of the latest user message carrying text/image content (not a bare
|
|
1952
|
+
* tool output). Volatile per-turn context goes right before it, so the
|
|
1953
|
+
* history before it stays a stable cached prefix. No such message → end. */
|
|
1954
|
+
function latestUserTextIndex(input: readonly ResponsesInputItem[]): number {
|
|
1955
|
+
for (let i = input.length - 1; i >= 0; i--) {
|
|
1956
|
+
const item = input[i]!;
|
|
1957
|
+
if ('role' in item && item.role === 'user') return i;
|
|
1958
|
+
}
|
|
1959
|
+
return input.length;
|
|
1960
|
+
}
|
|
1961
|
+
|
|
1907
1962
|
/** store=true wave: compute the incremental tail when `current` is a
|
|
1908
1963
|
* strict extension of `prev`. Returns null when the previous input
|
|
1909
1964
|
* isn't usable as a baseline — caller falls back to full input + no
|
|
@@ -1956,6 +2011,35 @@ export function computePromptCacheKey(model: string, instructions: string): stri
|
|
|
1956
2011
|
return createHash('sha256').update(`${model}::${prefix}`).digest('hex').slice(0, 32);
|
|
1957
2012
|
}
|
|
1958
2013
|
|
|
2014
|
+
/** TUI-PROMPT-CACHE-PREFIX — per-conversation cache affinity for the Codex
|
|
2015
|
+
* Responses backend. Mirrors ref/codex `core/src/client.rs`
|
|
2016
|
+
* (`PromptCacheKey::SessionDerived` → the session id itself is the
|
|
2017
|
+
* `prompt_cache_key`, and the same id rides the `session-id` header —
|
|
2018
|
+
* `codex-api/src/requests/headers.rs`; the underscored `session_id` alias
|
|
2019
|
+
* was dropped upstream in #22193 because proxies reject `_` headers).
|
|
2020
|
+
*
|
|
2021
|
+
* Precedence: chat `sessionId` → harness run `ELANOUS_RUN_ID`. Neither →
|
|
2022
|
+
* null and the caller falls back to the legacy instructions-prefix key.
|
|
2023
|
+
* Ids that are long (> 64 chars — the prompt_cache_key limit) or carry
|
|
2024
|
+
* characters outside `[A-Za-z0-9._:-]` fold to `elanous-<sha256/32>`. */
|
|
2025
|
+
export function codexSessionCacheKey(
|
|
2026
|
+
sessionId: string | undefined,
|
|
2027
|
+
runId: string | undefined,
|
|
2028
|
+
): { key: string; source: 'session' | 'run'; hashed: boolean } | null {
|
|
2029
|
+
const s = sessionId && sessionId.trim() ? sessionId : undefined;
|
|
2030
|
+
const r = runId && runId.trim() ? runId : undefined;
|
|
2031
|
+
const raw = s ?? r;
|
|
2032
|
+
if (!raw) return null;
|
|
2033
|
+
const source = s ? 'session' : 'run';
|
|
2034
|
+
if (raw.length <= 64 && /^[A-Za-z0-9._:-]+$/.test(raw)) return { key: raw, source, hashed: false };
|
|
2035
|
+
return { key: `elanous-${createHash('sha256').update(raw).digest('hex').slice(0, 32)}`, source, hashed: true };
|
|
2036
|
+
}
|
|
2037
|
+
|
|
2038
|
+
/** Short content hash for request-stability observation (logs only). */
|
|
2039
|
+
function stabilityHash(value: string): string {
|
|
2040
|
+
return createHash('sha256').update(value).digest('hex').slice(0, 16);
|
|
2041
|
+
}
|
|
2042
|
+
|
|
1959
2043
|
/** Cycle order for the HUD pill click + `/reasoning` no-arg form. */
|
|
1960
2044
|
export const REASONING_CYCLE: readonly import('./user-config.js').ReasoningLevel[] =
|
|
1961
2045
|
['off', 'low', 'medium', 'high', 'xhigh'] as const;
|
|
@@ -2236,8 +2320,12 @@ function buildCodexResponsesWireBody(
|
|
|
2236
2320
|
previousResponseId?: string;
|
|
2237
2321
|
},
|
|
2238
2322
|
promptCache: boolean,
|
|
2323
|
+
/** Session-derived key (codexSessionCacheKey). Absent → legacy key. */
|
|
2324
|
+
sessionCacheKey?: string,
|
|
2239
2325
|
): Record<string, unknown> {
|
|
2240
|
-
const cacheKey = promptCache
|
|
2326
|
+
const cacheKey = promptCache
|
|
2327
|
+
? (sessionCacheKey ?? computePromptCacheKey(body.model, body.instructions))
|
|
2328
|
+
: undefined;
|
|
2241
2329
|
return {
|
|
2242
2330
|
...body,
|
|
2243
2331
|
stream: true,
|
|
@@ -2255,8 +2343,9 @@ function buildCodexResponsesWireBody(
|
|
|
2255
2343
|
function serializeCodexResponsesWireBody(
|
|
2256
2344
|
body: Parameters<typeof buildCodexResponsesWireBody>[0],
|
|
2257
2345
|
promptCache: boolean,
|
|
2346
|
+
sessionCacheKey?: string,
|
|
2258
2347
|
): string {
|
|
2259
|
-
return JSON.stringify(buildCodexResponsesWireBody(body, promptCache));
|
|
2348
|
+
return JSON.stringify(buildCodexResponsesWireBody(body, promptCache, sessionCacheKey));
|
|
2260
2349
|
}
|
|
2261
2350
|
|
|
2262
2351
|
export async function* streamCodexResponsesEvents(
|
|
@@ -2316,9 +2405,14 @@ export async function* streamCodexResponsesEvents(
|
|
|
2316
2405
|
onResponseCreated?: (id: string) => void;
|
|
2317
2406
|
/** Unused configured fallbacks. Overload k times switches before retries. */
|
|
2318
2407
|
remainingFallbacks?: number;
|
|
2408
|
+
/** TUI-PROMPT-CACHE-PREFIX — conversation id for cache affinity. When
|
|
2409
|
+
* set (or `ELANOUS_RUN_ID` is), `prompt_cache_key` is session-derived
|
|
2410
|
+
* and the `session-id` header is sent (ref/codex parity). */
|
|
2411
|
+
sessionId?: string;
|
|
2319
2412
|
} = {},
|
|
2320
2413
|
): AsyncGenerator<LLMStreamEvent, void, unknown> {
|
|
2321
2414
|
const startedAt = Date.now();
|
|
2415
|
+
const sessionAffinity = codexSessionCacheKey(extra.sessionId, process.env.ELANOUS_RUN_ID);
|
|
2322
2416
|
// See comment in streamOpenAIEvents — we drop the raw body by
|
|
2323
2417
|
// default. `/debug verbose on` restores the full body for deep
|
|
2324
2418
|
// reproduction.
|
|
@@ -2336,6 +2430,16 @@ export async function* streamCodexResponsesEvents(
|
|
|
2336
2430
|
inputChars: (() => { try { return JSON.stringify(body.input).length; } catch { return -1; } })(),
|
|
2337
2431
|
toolChars: (() => { try { return JSON.stringify(body.tools ?? []).length; } catch { return -1; } })(),
|
|
2338
2432
|
instructionChars: body.instructions.length,
|
|
2433
|
+
// TUI-PROMPT-CACHE-PREFIX — prefix stability: two requests of one
|
|
2434
|
+
// session must log the same instructionsHash ⊕ toolsHash ⊕ cacheKey.
|
|
2435
|
+
instructionsHash: stabilityHash(body.instructions),
|
|
2436
|
+
toolsHash: (() => { try { return stabilityHash(JSON.stringify(body.tools ?? [])); } catch { return 'unhashable'; } })(),
|
|
2437
|
+
toolChoice: body.tool_choice ?? null,
|
|
2438
|
+
promptCacheKey: extra.promptCache === false
|
|
2439
|
+
? null
|
|
2440
|
+
: (sessionAffinity?.key ?? computePromptCacheKey(body.model, body.instructions)).slice(0, 24),
|
|
2441
|
+
cacheKeySource: extra.promptCache === false ? 'off' : (sessionAffinity?.source ?? 'instructions-prefix'),
|
|
2442
|
+
sessionHeader: sessionAffinity !== null,
|
|
2339
2443
|
tools: observeRequestTools(body.tools),
|
|
2340
2444
|
instructions: body.instructions.slice(0, 200),
|
|
2341
2445
|
accountId: extra.accountId ? `${extra.accountId.slice(0, 8)}…` : '(none)',
|
|
@@ -2363,7 +2467,7 @@ export async function* streamCodexResponsesEvents(
|
|
|
2363
2467
|
const promptCache = extra.promptCache !== false;
|
|
2364
2468
|
// TUI-REQUEST-SIZE-COMPACT — the exact serializer is shared with the
|
|
2365
2469
|
// preflight guard, so the size decision and fetch body cannot drift.
|
|
2366
|
-
const wireBody = buildCodexResponsesWireBody(body, promptCache);
|
|
2470
|
+
const wireBody = buildCodexResponsesWireBody(body, promptCache, sessionAffinity?.key);
|
|
2367
2471
|
const wireJson = extra.serializedWireBody ?? JSON.stringify(wireBody);
|
|
2368
2472
|
debug.log('llm.request', 'request-size', {
|
|
2369
2473
|
provider: 'openai-codex',
|
|
@@ -2387,6 +2491,9 @@ export async function* streamCodexResponsesEvents(
|
|
|
2387
2491
|
// is treated as an old client → 400 "requires a newer version of
|
|
2388
2492
|
// Codex". See getCodexUserAgent (oauth/codex.ts).
|
|
2389
2493
|
'User-Agent': getCodexUserAgent(),
|
|
2494
|
+
// ChatGPT derives cache affinity from this header (ref/codex
|
|
2495
|
+
// client.rs `responses_session_id` → `build_session_headers`).
|
|
2496
|
+
...(sessionAffinity ? { 'session-id': sessionAffinity.key } : {}),
|
|
2390
2497
|
},
|
|
2391
2498
|
body: wireJson,
|
|
2392
2499
|
signal,
|
|
@@ -5824,8 +5931,19 @@ async function tryForceSynthesisPass(args: {
|
|
|
5824
5931
|
* / error), this function emits a clear signal to wipe any
|
|
5825
5932
|
* partial text it streamed. */
|
|
5826
5933
|
streamingHandlers?: { onText: (delta: string, accumulated: string) => void };
|
|
5934
|
+
/** TUI-PROMPT-CACHE-PREFIX — the turn's session + tools. On Codex the pass
|
|
5935
|
+
* keeps the same tools array (tool_choice:'none') and session cache key so
|
|
5936
|
+
* it reuses the cached prefix instead of rewriting it with tools dropped. */
|
|
5937
|
+
sessionId?: string;
|
|
5938
|
+
tools?: LLMToolSpec[];
|
|
5827
5939
|
}): Promise<string | null> {
|
|
5828
5940
|
const { provider, model, history, turn, modelFamily, streamingHandlers } = args;
|
|
5941
|
+
const keepToolsNoCall = provider.name === 'openai-codex' && (args.tools?.length ?? 0) > 0;
|
|
5942
|
+
const synthesisOpts: LLMOpts = {
|
|
5943
|
+
model,
|
|
5944
|
+
...(args.sessionId ? { sessionId: args.sessionId } : {}),
|
|
5945
|
+
...(keepToolsNoCall ? { tools: args.tools, toolChoice: 'none' as const } : {}),
|
|
5946
|
+
};
|
|
5829
5947
|
const synthesisPromptMsg: LLMMessage = {
|
|
5830
5948
|
role: 'user',
|
|
5831
5949
|
content:
|
|
@@ -5858,7 +5976,7 @@ async function tryForceSynthesisPass(args: {
|
|
|
5858
5976
|
try {
|
|
5859
5977
|
let collected = '';
|
|
5860
5978
|
const MAX_OUTPUT_CHARS = 8000;
|
|
5861
|
-
for await (const delta of provider.chat(synthesisHistory, {
|
|
5979
|
+
for await (const delta of provider.chat(synthesisHistory, { ...synthesisOpts, signal: f2Controller.signal })) {
|
|
5862
5980
|
collected += delta;
|
|
5863
5981
|
// Live progressive emit — TUI shows synthesis text as it
|
|
5864
5982
|
// generates instead of all-at-once at the end (user-reported
|
|
@@ -7506,13 +7624,33 @@ function resultText(result: unknown): string {
|
|
|
7506
7624
|
}
|
|
7507
7625
|
|
|
7508
7626
|
/** skill_exec returns structured host metadata, but its model-facing tool result is the answer body. */
|
|
7509
|
-
function toolResultContentForCall(toolName: string, result: unknown): string {
|
|
7627
|
+
function toolResultContentForCall(toolName: string, result: unknown, inlineLimitBytes?: number): string {
|
|
7628
|
+
let content: string;
|
|
7510
7629
|
if (toolName === 'skill_exec' && result && typeof result === 'object'
|
|
7511
7630
|
&& typeof (result as { output?: unknown }).output === 'string') {
|
|
7512
|
-
|
|
7513
|
-
|
|
7631
|
+
content = (result as { ok?: unknown }).ok === false
|
|
7632
|
+
? JSON.stringify(result)
|
|
7633
|
+
: (result as { output: string }).output;
|
|
7634
|
+
} else {
|
|
7635
|
+
content = typeof result === 'string' ? result : JSON.stringify(result);
|
|
7636
|
+
}
|
|
7637
|
+
if (!Number.isFinite(inlineLimitBytes) || inlineLimitBytes === undefined || inlineLimitBytes <= 0) return content;
|
|
7638
|
+
const safeToolName = toolName.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 48) || 'tool';
|
|
7639
|
+
const capped = truncateOutput(content, {
|
|
7640
|
+
toolName: `tool-result-${safeToolName}`,
|
|
7641
|
+
inlineLimit: inlineLimitBytes,
|
|
7642
|
+
headBytes: Math.floor(inlineLimitBytes * 0.6),
|
|
7643
|
+
tailBytes: Math.floor(inlineLimitBytes * 0.2),
|
|
7644
|
+
});
|
|
7645
|
+
if (capped.spilled) {
|
|
7646
|
+
debug.log('llm.router', 'tool-result.output-spilled', {
|
|
7647
|
+
tool: safeToolName,
|
|
7648
|
+
originalBytes: capped.originalBytes,
|
|
7649
|
+
inlineLimitBytes,
|
|
7650
|
+
savedPath: capped.savedPath,
|
|
7651
|
+
});
|
|
7514
7652
|
}
|
|
7515
|
-
return
|
|
7653
|
+
return capped.output;
|
|
7516
7654
|
}
|
|
7517
7655
|
|
|
7518
7656
|
function detectExecutionFailure(result: unknown): boolean {
|
|
@@ -8865,6 +9003,10 @@ export async function streamLLMWithTools(
|
|
|
8865
9003
|
// read-time projection 등 교체. 문맥관리를 substrate 프리미티브로 통일(streamLLMWithTools 인라인 산재 해소).
|
|
8866
9004
|
const { createDefaultContextStrategy: _makeContextStrategy } = require('./agent-substrate/context-strategy.js') as typeof import('./agent-substrate/context-strategy.js');
|
|
8867
9005
|
const _contextStrategy = opts.contextStrategy ?? _makeContextStrategy();
|
|
9006
|
+
// Latest provider prompt usage is the trigger baseline. Add estimated growth
|
|
9007
|
+
// appended to history after that request (usually tool output) at the next loop.
|
|
9008
|
+
let previousInputTokens: number | undefined;
|
|
9009
|
+
let previousRequestEstimatedTokens: number | undefined;
|
|
8868
9010
|
let loopTermination: 'budget-exhausted' | 'aborted' = 'budget-exhausted';
|
|
8869
9011
|
let terminalTurn = maxTurns;
|
|
8870
9012
|
|
|
@@ -8921,7 +9063,7 @@ export async function streamLLMWithTools(
|
|
|
8921
9063
|
turn, historyLen: history.length,
|
|
8922
9064
|
}, { level: 'info' });
|
|
8923
9065
|
|
|
8924
|
-
//
|
|
9066
|
+
// Turn context backstop — with the codex/unlimited tool-loop cap
|
|
8925
9067
|
// removed, a long tool-heavy turn (esp. mission build) grows `history`
|
|
8926
9068
|
// unbounded until it overflows the model context window and the provider
|
|
8927
9069
|
// throws. ref codex / opencode bound exploration by COMPACTION, not a
|
|
@@ -8952,7 +9094,21 @@ export async function streamLLMWithTools(
|
|
|
8952
9094
|
// ★ 조각2 — pluggable context 전략(기본=2-tier compaction·무회귀 이관). 판정+압축을 substrate 프리미티브가
|
|
8953
9095
|
// 수행 → caller 는 splice/관측/breaker 만. 주입(opts.contextStrategy)으로 read-time projection 등 교체 가능.
|
|
8954
9096
|
const beforeLen = history.length;
|
|
8955
|
-
const outcome = await _contextStrategy.compact(history, {
|
|
9097
|
+
const outcome = await _contextStrategy.compact(history, {
|
|
9098
|
+
model: effectiveModel,
|
|
9099
|
+
...(opts.sessionId ? { sessionId: opts.sessionId } : {}),
|
|
9100
|
+
config: acCfg,
|
|
9101
|
+
...(previousInputTokens !== undefined ? {
|
|
9102
|
+
observedInputTokens: previousInputTokens + Math.max(
|
|
9103
|
+
0,
|
|
9104
|
+
estimateMessagesTokens(history) - (previousRequestEstimatedTokens ?? estimateMessagesTokens(history)),
|
|
9105
|
+
),
|
|
9106
|
+
} : {}),
|
|
9107
|
+
});
|
|
9108
|
+
// This usage event belongs to the request before this compaction
|
|
9109
|
+
// decision; do not carry it into another loop iteration.
|
|
9110
|
+
previousInputTokens = undefined;
|
|
9111
|
+
previousRequestEstimatedTokens = undefined;
|
|
8956
9112
|
if (outcome.fired && outcome.reduced) {
|
|
8957
9113
|
history.splice(0, history.length, ...outcome.messages);
|
|
8958
9114
|
// ★ 관측(2026-07-21) — beforeTokens/afterTokens 포함(reduced 는 개수 아닌 **토큰** 감소로 판정).
|
|
@@ -9005,7 +9161,19 @@ export async function streamLLMWithTools(
|
|
|
9005
9161
|
// revert to auto (see above).
|
|
9006
9162
|
const buildTurnOpts = () => {
|
|
9007
9163
|
const remainingFallbacks = opts.provider ? 0 : remainingFallbackProviderNames(attemptedProviders, opts).length;
|
|
9008
|
-
|
|
9164
|
+
// TUI-PROMPT-CACHE-PREFIX — on Codex the final-answer turn shares the
|
|
9165
|
+
// session cache key, so dropping tools would rewrite the cached prefix
|
|
9166
|
+
// (measured toolChars 67k → 2). Keep the same tools and forbid calls
|
|
9167
|
+
// with tool_choice:'none' instead. Other providers keep the legacy
|
|
9168
|
+
// empty tools (some ignore toolChoice).
|
|
9169
|
+
const keepToolsNoCall = completionNeedsFinalTurn && activeProvider.name === 'openai-codex';
|
|
9170
|
+
const base = {
|
|
9171
|
+
...opts,
|
|
9172
|
+
model: activeModel,
|
|
9173
|
+
tools: completionNeedsFinalTurn && !keepToolsNoCall ? [] : activeTools,
|
|
9174
|
+
remainingFallbacks,
|
|
9175
|
+
};
|
|
9176
|
+
if (keepToolsNoCall) return { ...base, toolChoice: 'none' as const };
|
|
9009
9177
|
return turn === 0 ? base : { ...base, toolChoice: undefined };
|
|
9010
9178
|
};
|
|
9011
9179
|
let turnOpts = buildTurnOpts();
|
|
@@ -9124,6 +9292,7 @@ export async function streamLLMWithTools(
|
|
|
9124
9292
|
: turnOpts.toolChoice,
|
|
9125
9293
|
};
|
|
9126
9294
|
const providerMessages = mapProviderToolNamesInMessages(history, nameMap.toProviderName);
|
|
9295
|
+
previousRequestEstimatedTokens = estimateMessagesTokens(providerMessages);
|
|
9127
9296
|
streamIter = restoreProviderToolCallNames(
|
|
9128
9297
|
activeProvider.streamChat!(providerMessages, providerOpts),
|
|
9129
9298
|
nameMap.toOriginalName,
|
|
@@ -9371,6 +9540,12 @@ export async function streamLLMWithTools(
|
|
|
9371
9540
|
...(ev.revisedPrompt !== undefined ? { revisedPrompt: ev.revisedPrompt } : {}),
|
|
9372
9541
|
});
|
|
9373
9542
|
} else if (ev.type === 'usage') {
|
|
9543
|
+
// Provider parsers normalize inputTokens to uncached input; cache
|
|
9544
|
+
// reads/writes are separate fields (prompt-cache/types.ts contract).
|
|
9545
|
+
const observedPromptTokens = (ev.usage.inputTokens ?? 0)
|
|
9546
|
+
+ (ev.usage.cacheReadInputTokens ?? 0)
|
|
9547
|
+
+ (ev.usage.cacheCreationInputTokens ?? 0);
|
|
9548
|
+
if (observedPromptTokens > 0) previousInputTokens = observedPromptTokens;
|
|
9374
9549
|
// ⭐ 주 에이전트 턴의 토큰·비용을 «게이트 없이» 남긴다(2026-09-24 실측: 이 줄이 없어 3시간 `llm.usage`
|
|
9375
9550
|
// 18행이 전부 곁가지 두 자리였고, 하니스 런 비용의 거의 전부가 관측 밖이었다). 곁가지와 같은 모양 ·
|
|
9376
9551
|
// 모르는 모델은 금액 대신 `cost.kind='unknown'`. runId 는 debug.log 가 붙인다. 실패해도 턴은 계속.
|
|
@@ -11358,6 +11533,11 @@ export async function streamLLMWithTools(
|
|
|
11358
11533
|
}
|
|
11359
11534
|
const dispatchIndex = callsToDispatch.findIndex((candidate) => candidate.id === call.id);
|
|
11360
11535
|
const { result, isError } = dispatchedResults[dispatchIndex]!;
|
|
11536
|
+
const toolResultInlineLimitBytes = opts.toolResultInlineLimitBytes === undefined
|
|
11537
|
+
? undefined
|
|
11538
|
+
: activeProvider.name === 'openai-codex'
|
|
11539
|
+
? Math.min(opts.toolResultInlineLimitBytes, 10 * 1024)
|
|
11540
|
+
: opts.toolResultInlineLimitBytes;
|
|
11361
11541
|
const imageBearing = maybeImageBearingResult(result);
|
|
11362
11542
|
if (imageBearing) {
|
|
11363
11543
|
// Image-bearing tool result (Phase 1, 2026-05-05) — see
|
|
@@ -11370,7 +11550,7 @@ export async function streamLLMWithTools(
|
|
|
11370
11550
|
tool_use_id: call.id,
|
|
11371
11551
|
content: [
|
|
11372
11552
|
{ type: 'image', mediaType: imageBearing.mediaType, base64: imageBearing.dataB64 },
|
|
11373
|
-
{ type: 'text', text: JSON.stringify(imageBearing.rest) },
|
|
11553
|
+
{ type: 'text', text: toolResultContentForCall(call.name, JSON.stringify(imageBearing.rest), toolResultInlineLimitBytes) },
|
|
11374
11554
|
],
|
|
11375
11555
|
...(isError ? { isError: true } : {}),
|
|
11376
11556
|
});
|
|
@@ -11378,7 +11558,7 @@ export async function streamLLMWithTools(
|
|
|
11378
11558
|
resultBlocks.push({
|
|
11379
11559
|
type: 'tool_result',
|
|
11380
11560
|
tool_use_id: call.id,
|
|
11381
|
-
content: toolResultContentForCall(call.name, result),
|
|
11561
|
+
content: toolResultContentForCall(call.name, result, toolResultInlineLimitBytes),
|
|
11382
11562
|
...(isError ? { isError: true } : {}),
|
|
11383
11563
|
});
|
|
11384
11564
|
}
|
|
@@ -11521,6 +11701,8 @@ export async function streamLLMWithTools(
|
|
|
11521
11701
|
history,
|
|
11522
11702
|
turn,
|
|
11523
11703
|
modelFamily,
|
|
11704
|
+
...(opts.sessionId ? { sessionId: opts.sessionId } : {}),
|
|
11705
|
+
tools: activeTools,
|
|
11524
11706
|
// Live progressive streaming — deltas emit through handlers
|
|
11525
11707
|
// during collection so TUI shows synthesis text as it
|
|
11526
11708
|
// generates instead of one big chunk at the end.
|
|
@@ -11764,11 +11946,11 @@ import {
|
|
|
11764
11946
|
} from './oauth/codex.js';
|
|
11765
11947
|
import { extractChatGPTClaims } from './oauth/jwt.js';
|
|
11766
11948
|
|
|
11767
|
-
// ⭐ 2026-
|
|
11949
|
+
// ⭐ 2026-10-28 — current Codex default is GPT-6.1 Terra.
|
|
11768
11950
|
// ⛔ 이 상수는 «최후 폴백»이다 — 정상 경로는 `llm-tier-map` 의 사다리를 탄다.
|
|
11769
|
-
//
|
|
11770
|
-
//
|
|
11771
|
-
export const CODEX_DEFAULT_MODEL = 'gpt-6-
|
|
11951
|
+
// Codex CLI 0.164.0: `codex exec -m gpt-6.1-terra` returned successfully on 2026-10-28.
|
|
11952
|
+
// Elanous ACP Codex app-server also returned on this model; Elanous's better-tier effort remains medium.
|
|
11953
|
+
export const CODEX_DEFAULT_MODEL = 'gpt-6.1-terra';
|
|
11772
11954
|
export const CODEX_DEFAULT_URL = 'https://api.openai.com/v1/chat/completions';
|
|
11773
11955
|
|
|
11774
11956
|
/** Build an OpenAI-compatible provider (grok / openai) using the
|
|
@@ -12167,6 +12349,7 @@ function makeCodexProvider(cfg: UCLLMConfig): LLMProvider {
|
|
|
12167
12349
|
acceptToolImages: codexAcceptToolImages,
|
|
12168
12350
|
acceptUserMessageImages: codexAcceptUserImages,
|
|
12169
12351
|
replayCodexReasoning: !useStore,
|
|
12352
|
+
stablePrefix: true,
|
|
12170
12353
|
onOrphanToolResult: (callId) => {
|
|
12171
12354
|
try { debug.log('llm.codex', 'orphan-tool-output-dropped', { callId }); }
|
|
12172
12355
|
catch { /* observation must not block the request */ }
|
|
@@ -12223,6 +12406,7 @@ function makeCodexProvider(cfg: UCLLMConfig): LLMProvider {
|
|
|
12223
12406
|
? messagesToResponsesInput(messages, {
|
|
12224
12407
|
acceptToolImages: codexAcceptToolImages,
|
|
12225
12408
|
acceptUserMessageImages: codexAcceptUserImages,
|
|
12409
|
+
stablePrefix: true,
|
|
12226
12410
|
}).input
|
|
12227
12411
|
: input);
|
|
12228
12412
|
const wirePrevId = (delta && lastResponseId) ? lastResponseId : undefined;
|
|
@@ -12243,9 +12427,12 @@ function makeCodexProvider(cfg: UCLLMConfig): LLMProvider {
|
|
|
12243
12427
|
};
|
|
12244
12428
|
const requestGuard = opts.requestSizeGuard;
|
|
12245
12429
|
const promptCache = opts.promptCache !== false;
|
|
12430
|
+
// TUI-PROMPT-CACHE-PREFIX — the preflight must measure the same body
|
|
12431
|
+
// streamCodexResponsesEvents would build (session-derived key).
|
|
12432
|
+
const sessionCacheKey = codexSessionCacheKey(opts.sessionId, process.env.ELANOUS_RUN_ID)?.key;
|
|
12246
12433
|
let serializedWireBody: string | undefined;
|
|
12247
12434
|
if (requestGuard) {
|
|
12248
|
-
serializedWireBody = serializeCodexResponsesWireBody(requestBody, promptCache);
|
|
12435
|
+
serializedWireBody = serializeCodexResponsesWireBody(requestBody, promptCache, sessionCacheKey);
|
|
12249
12436
|
let requestChars = serializedWireBody.length;
|
|
12250
12437
|
const initialRequestChars = requestChars;
|
|
12251
12438
|
let requestCompacted = false;
|
|
@@ -12264,9 +12451,10 @@ function makeCodexProvider(cfg: UCLLMConfig): LLMProvider {
|
|
|
12264
12451
|
// Compaction runs only when store threading is off, matching
|
|
12265
12452
|
// the original non-threaded wire input policy.
|
|
12266
12453
|
replayCodexReasoning: !useStore,
|
|
12454
|
+
stablePrefix: true,
|
|
12267
12455
|
});
|
|
12268
12456
|
const compactBody = { ...requestBody, instructions: compactInput.instructions, input: compactInput.input };
|
|
12269
|
-
const compactWireBody = serializeCodexResponsesWireBody(compactBody, promptCache);
|
|
12457
|
+
const compactWireBody = serializeCodexResponsesWireBody(compactBody, promptCache, sessionCacheKey);
|
|
12270
12458
|
const compactChars = compactWireBody.length;
|
|
12271
12459
|
if (compactChars < requestChars) {
|
|
12272
12460
|
messages.splice(0, messages.length, ...compacted.messages);
|
|
@@ -12310,6 +12498,7 @@ function makeCodexProvider(cfg: UCLLMConfig): LLMProvider {
|
|
|
12310
12498
|
yield* streamCodexResponsesEvents(responsesUrl, tokens.accessToken, requestBody, opts.signal, {
|
|
12311
12499
|
accountId,
|
|
12312
12500
|
promptCache,
|
|
12501
|
+
...(opts.sessionId ? { sessionId: opts.sessionId } : {}),
|
|
12313
12502
|
...(serializedWireBody ? { serializedWireBody } : {}),
|
|
12314
12503
|
// Capture the new response id from the SSE stream so the
|
|
12315
12504
|
// next call can thread it. If the backend skips the event
|