elanous 0.2.37 → 0.2.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/{8kITumG9GAZ1LwT9POrAR → HjeK7zONHfR7op1hKXp4k}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{1746.3563617ea64023a3.js → 1060.014f1f01a17aec26.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9151.a2c51e93f9156dae.js → 1281.d81877e35b9068f4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1350.59f40e39e02d91b1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1415.79821ec7ae99acdb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1452.162bb2d9d699e82a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/147.f92f63bbc5e85fa5.js +286 -0
- package/apps/pwa/out/_next/static/chunks/1537-6bb97b5214928ea9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1661.fb425a1d8a065b72.js +149 -0
- package/apps/pwa/out/_next/static/chunks/1671-1c22b40b50b208f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1758.0204d3f48783c49d.js +90 -0
- package/apps/pwa/out/_next/static/chunks/1806.027bf78b6a94d340.js +104 -0
- package/apps/pwa/out/_next/static/chunks/{3578.4e9f9948a9a6f2f4.js → 2047.8f23e210995d4548.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/2061-7f2bbc53ae96c88b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7424.c0fe2a595d4232b5.js → 2066.a77257c8c350770a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2096-a938496bc996dcbd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4931.95cc6dbd230774ca.js → 2177.df8547f9d7215c4e.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/2200-9a453b8f99687d49.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6680.6a693c28aae4cd19.js → 2226.2cf61ec781827219.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/2281-b8cede695c6c650e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2499.02fbfd18126c10c0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6252.240578f10952e091.js → 2522.f2766b76d22c8bdf.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{1262.a89bb27a5b2f844e.js → 2566.beaffc3a5e1fcd2e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/261.0d471e8aded799f3.js +226 -0
- package/apps/pwa/out/_next/static/chunks/2615.3c9738153de3ef3f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2727.e703d99ac414916d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2752.7904b8df0254d0ae.js +27 -0
- package/apps/pwa/out/_next/static/chunks/2762-5051a862dfa40e99.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2767-31784bfedf8e245d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2318-450e75d07605b8fe.js → 2774-719820e3f5b2a3eb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2812-f016aa0dda149287.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4725-34bed25720cc326b.js → 2829-734fe8bf2eee7347.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/311-32dcac79970985e8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3175-f93f7495cd28253c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3184.8da993f5502d2140.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3231-d7c981db0ff8bdcc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3250.151309c5176d6b4b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3330.7443183b7e6fdbdf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3517.a5aa1797a9dbf2ee.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3567-45f676877ed9e8a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3746-f80a78f220bf37b5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3819.8a1de79b2e8c7298.js +24 -0
- package/apps/pwa/out/_next/static/chunks/39.9b37b0be4c128a83.js +77 -0
- package/apps/pwa/out/_next/static/chunks/{4337e36d.f42c3b391b3d8f20.js → 3b355b3d.6f73c98bf6f9c749.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4023.a19045970a9ce16a.js +36 -0
- package/apps/pwa/out/_next/static/chunks/{58edce7d.f1b0c72acf13b123.js → 409c787b.e48c5bec8ec10456.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/413-24c8284bda08241d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4135.e45d6ebc29e20647.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4283.65502f5d0e6ff6c0.js +287 -0
- package/apps/pwa/out/_next/static/chunks/4305-4e28fa92a7b34a5b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4335-50efa61fd7613142.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4351.0f37a6db2b34d50b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5046.7fd5cbd859299448.js → 470.51a72a2348306455.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/4720.ecbd1693fa151068.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2375.bf364c85dbb6f085.js → 4769.9fd582071301f382.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/483.725e4a61be922788.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{de8446d3.31b73eb239fecd7b.js → 4864a2ca.1c1c280a7772c5e5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4969-4b209d7307410c00.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5068-c7f53862f83c0917.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5315.bc96711c24dfefe2.js +74 -0
- package/apps/pwa/out/_next/static/chunks/{4383.18e5c54db3a22c88.js → 5383.bdfa5d886e39a826.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5436.fdf6fa8ae3e9588d.js +64 -0
- package/apps/pwa/out/_next/static/chunks/5542.efbf14f16baed4dd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5622.94893f5aea7185d0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5644.8f401a25601d05fc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5658.35f70eb9871a54bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5721.7bdc0e904c76ab51.js +8 -0
- package/apps/pwa/out/_next/static/chunks/5790-eef0ca20884a6bdf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5802.ef0d8598ca68fe84.js +62 -0
- package/apps/pwa/out/_next/static/chunks/5890.fb974729788dcb71.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5924.5ef25cddd36d5dbf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5979-e59c099ebf8d1f35.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6020.714cfeada2315e2e.js +94 -0
- package/apps/pwa/out/_next/static/chunks/6027-dfe0349d8c50f698.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6745-5a63492933959dd9.js → 6051-0ae955eedb10adb9.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/6178.bc4730c86cf74536.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2283.edd9627b7bdfb546.js → 6257.c0037b8949239f5e.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/6273.d808b0dcb3c2b155.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6292.6ef1df64fa6a4c8a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/647-af8dd920ba46533c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6541-170dc5c59e135c0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6624.981ef7caeb680560.js +32 -0
- package/apps/pwa/out/_next/static/chunks/6742-a1ad4a94ba7bc37a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6819.be5c9c4d67f22922.js → 6749.0744ce6eb08d40e9.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/6836-493dc55c39187949.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6856-53ac421c06039a18.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6908.06008c67f6380ea9.js +148 -0
- package/apps/pwa/out/_next/static/chunks/6915.096931864206f522.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6925.5e181fb7dcf90193.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6cc1d1d6.9a98dd4622f1afc6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7203-800e11037adc41eb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7219-15bdd9a80661af8e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7279.6170f591105936bb.js +93 -0
- package/apps/pwa/out/_next/static/chunks/7349-373165c7fbdcc3df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7514-a533ba0ca1cae4f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7515.1ad6efe157fa4448.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7521.d919cc1fab80c1d9.js +24 -0
- package/apps/pwa/out/_next/static/chunks/7538.90e97bbdf9178cff.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7611.85f045bf232053ac.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7825-39203196a12579b2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7869.5e1a9a12fd70d6c7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8086.1ab9103c41be884f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8099.1cccf31c1baa7e1c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8179-e61fffbdb70f1152.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8265.bdeb991b34db6a06.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2002-a43a3f380df873ec.js → 8272-025653884f9645d2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{7867.e8725745ddd1d940.js → 8357.1aaa713b052a78b1.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/8638-e42615f2166165b5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8639-92c11d069792429e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8691.54e22831d5e8ccf8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8d173e38.18a2f7b4e1848bdb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9069.657590a84afb8fac.js +41 -0
- package/apps/pwa/out/_next/static/chunks/9125-ae588d88a0293b93.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4313.76f232c304a15bde.js → 9175.2de5209a5ce6f68a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9184.45afbf44fec87574.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8c58d09b.e8724a299658d86f.js → 9189505a.980427ac048c8c60.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9311.f9f641a46a508611.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9371-a6fee8378ebfa3ee.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9421-3aa9ff4fa7f63d8a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9992.07ce73c10bd5e6a1.js +79 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-76394dc618d322c8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-1b948637c37b3abd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-c63400f1bcf3e47c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-95d0957267819586.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-ba957ff875a026a0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-bb6fd0714879cb87.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-8f9038520d2acbef.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-d4b48397e05fce2c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-72d5744245dc0c27.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-37625dc8300fa43a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-fbef9d160272dbc1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-58424168df84928e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-72c12ba430ac57c0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-d53f3e9ed806d7e0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-4d2fbd45feee0829.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-76394dc618d322c8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-8783dc0ed7590a2c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-3706cb390606e930.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-9b0a86598e0111fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/{page-3337c6a1328c2674.js → page-4edb8df90f4537ce.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-83d27757e2b8060a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-47398b9ba1cc5e1b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-fb86f55cfe2e681d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-e22345fc8fd47b1b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-1e5da297557d2354.js → page-fca2e59a81744d9e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-6e96bda63100b31e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-4d17ad8e0db8cea4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-121f92766c33beaa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-43f14212c545f92d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ccec2023e7a974ec.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-b04f33f548b89a94.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-c8792823c0917021.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-8c0e32782ceef4cb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-94bd3922eb230ce8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-bca565887bafa03c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-ac1dffafe649fc6c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-52374edb5e23e455.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ad4ebca120d43ca7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-76394dc618d322c8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-718b89ce4b4ae4e4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-204eca33eeeaddec.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-e58ba9bcdb9ac0f9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-98f6dd50bafd7734.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/{page-ac2c1e6169cfce57.js → page-139d722de1dcd6c1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-5a4bdd72bff27057.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-6f6ab17d44f984ce.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-aabb7bd15fb72da9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-e4322319164a4436.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-e9efc0c8f32e2371.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/{page-c1c80e345fa9d6f5.js → page-ccde99f07aaf71f7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-80464aced9614390.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{d9815f84.4918f682a45a8502.js → b84cad00.594027ebe0531fe2.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/c696986b.5dc8bb1143af16d1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{709a918c.4fd3b4e2a32cb4e3.js → ca3702f8.2913182e73889fa2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/d5d3cefc-373c4eb722ed848b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5f6af561-f90b7a67f4f75d13.js → d8de0de2-dd0f4ac8e5ab1832.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/framework-002b472a66935d31.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-49b88d47292c0476.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-fff2549cb10a133f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-32abbbba3f3b76b7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-9d9cfef60c60dd7a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-cc7f483fa294034a.js +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +22 -22
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +22 -22
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +22 -22
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +21 -21
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +21 -21
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +22 -22
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +21 -21
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +22 -22
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +22 -22
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +21 -21
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +22 -22
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +22 -22
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +22 -22
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +22 -22
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +21 -21
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +21 -21
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +22 -22
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +22 -22
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +22 -22
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +21 -21
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +21 -21
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +21 -21
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +22 -22
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +22 -22
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +21 -21
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +21 -21
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +21 -21
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +21 -21
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +22 -22
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +22 -22
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +21 -21
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +22 -22
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +22 -22
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +22 -22
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +22 -22
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +22 -22
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +21 -21
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +22 -22
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +22 -22
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +22 -22
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +22 -22
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +22 -22
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +22 -22
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +22 -22
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +22 -22
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +22 -22
- package/graphs/demo/persona-marketer/fixtures/marketer-scenario.yaml +10 -0
- package/graphs/demo/persona-marketer/persona-marketer.yaml +25 -0
- package/graphs/demo/persona-marketer/recipes.yaml +19 -0
- package/graphs/release/recipes.yaml +9 -0
- package/graphs/release/release-loop.yaml +26 -18
- package/graphs/video/explainer-line.yaml +4 -1
- package/package.json +1 -1
- package/scripts/ask-op-inbox-once.ts +17 -0
- package/scripts/brand/check.ts +13 -4
- package/scripts/dead-code/report.ts +169 -0
- package/scripts/gate-0226-accepted-remaining-90.txt +91 -0
- package/scripts/gate-0226-failure-census.ts +39 -0
- package/scripts/intake-collect-telegram-saved-stage.ts +48 -0
- package/scripts/lib/morning-report-options.ts +3 -4
- package/scripts/lib/tui-regress-evidence.ts +56 -0
- package/scripts/morning-report.ts +5 -1
- package/scripts/provision-export-redactions.ts +15 -0
- package/scripts/public-copy-lint.ts +122 -0
- package/scripts/public-export.ts +77 -2
- package/scripts/ratchets/next-tui-entry-budget.ts +124 -0
- package/scripts/ratchets/train-side-invariants.sh +7 -1
- package/scripts/release-loop/cut-branch.ts +61 -12
- package/scripts/release-loop/export-check-node.ts +21 -3
- package/scripts/release-loop/gate-node.ts +527 -60
- package/scripts/release-loop/gate-partial.ts +82 -3
- package/scripts/release-loop/gate-prewarm-plan.ts +35 -0
- package/scripts/release-loop/gate-radius-live.ts +4 -2
- package/scripts/release-loop/gate-shard-dispatch.ts +128 -0
- package/scripts/release-loop/gate-shard-receipts.ts +89 -0
- package/scripts/release-loop/gate-wall.ts +5 -5
- package/scripts/release-loop/preflight.ts +6 -2
- package/scripts/release-loop/resume-cap.ts +2 -1
- package/scripts/release-loop/resume-release.ts +317 -13
- package/scripts/release-loop/resume.ts +61 -5
- package/scripts/release-loop/traffic-node.ts +12 -4
- package/scripts/release-loop/traffic-transition.ts +53 -13
- package/scripts/release-loop/version-node.ts +35 -5
- package/scripts/release-story/draft.ts +1 -1
- package/scripts/research-bench/README.md +53 -0
- package/scripts/research-bench/questions.json +66 -0
- package/scripts/research-bench/rubric.md +33 -0
- package/scripts/research-bench/run.ts +523 -0
- package/scripts/tui-regress.ts +85 -10
- package/scripts/ux-sim.ts +1 -1
- package/scripts/video-pipeline.ts +2 -2
- package/src/acp/core-turn-bridge.ts +14 -1
- package/src/agent/autonomous-tools.ts +10 -3
- package/src/agent/monad-agent-turn.ts +4 -1
- package/src/agent/registry.ts +26 -2
- package/src/agent/run-context.ts +1 -1
- package/src/agent/shared-app-tools.ts +1 -1
- package/src/agent/surface-ux/build.ts +12 -3
- package/src/agent/surface-ux/types.ts +1 -1
- package/src/agent/task-notification.ts +78 -7
- package/src/agent/types.ts +3 -0
- package/src/agent-mission/driver.ts +29 -3
- package/src/agent-mission/mission-cli.ts +2 -1
- package/src/agent-substrate/review-context-pack.ts +365 -0
- package/src/agent-substrate/review-observation.ts +10 -0
- package/src/agent-substrate/self-review-cli.ts +419 -42
- package/src/ask-user-question/index.ts +6 -0
- package/src/ask-user-question/inline-resolver.ts +49 -0
- package/src/auto-research/question-ladder-contract.ts +156 -0
- package/src/auto-research/research-turn.ts +467 -0
- package/src/autopilot/agent-loop.ts +1 -1
- package/src/autopilot/discovery/doc-lint.ts +1 -1
- package/src/autopilot/pty-control-loop.ts +8 -1
- package/src/boot/daemon-tools/index.ts +4 -3
- package/src/boot/daemon-tools/self-implement.ts +270 -2
- package/src/boot/daemon-tools/types.ts +2 -0
- package/src/bots/screen-probe.ts +1 -1
- package/src/budget/llm-cost.ts +44 -5
- package/src/budget/unified-usage.ts +17 -1
- package/src/capture/tui-self-report.ts +24 -2
- package/src/chat/index.ts +34 -7
- package/src/chat/tool-render/dispatch.ts +8 -1
- package/src/cli/agent-cli.ts +43 -8
- package/src/cli/guardian-cli.ts +3 -1
- package/src/cli/intake-cli.ts +70 -13
- package/src/cli/lesson-cli.ts +86 -10
- package/src/cli/log-event-names.ts +1 -0
- package/src/cli/pod-cli.ts +17 -2
- package/src/cli/pr-land-overlap-evidence.ts +38 -5
- package/src/cli/pr-land-refusal.ts +1 -1
- package/src/cli/pty-takeover-cli.ts +125 -12
- package/src/cli/release-checklist-read-cli.ts +5 -2
- package/src/cli/release-cli.ts +99 -15
- package/src/cli/repo-cli.ts +2 -1
- package/src/cli/review-carry.ts +77 -0
- package/src/cli/self-update.ts +1 -1
- package/src/cli/tasks-card-show.ts +31 -1
- package/src/cli/tasks-cli.ts +98 -32
- package/src/cli/tasks-read-cli.ts +13 -5
- package/src/context-bus/context-now.ts +86 -2
- package/src/control-plane/ledger.ts +21 -4
- package/src/core-turn/run-core-turn.ts +51 -3
- package/src/core-turn/run-goal-loop.ts +152 -8
- package/src/core-turn/types.ts +12 -0
- package/src/dashboard/chat/acp-chat.ts +2 -2
- package/src/dashboard/classic-sigquit.ts +16 -0
- package/src/dashboard/index.ts +339 -44
- package/src/dashboard/input/chat-main-interaction-opts.ts +3 -0
- package/src/dashboard/input/chat-main-plain-turn-runtime.ts +7 -2
- package/src/dashboard/input/chat-main-slash-command.ts +7 -0
- package/src/dashboard/input/dashboard-plain-turn-stream.ts +4 -0
- package/src/dashboard/input/dashboard-priority-key-route.ts +21 -5
- package/src/dashboard/input/external-input-host.ts +2 -0
- package/src/dashboard/input/terminal-modal-router.ts +8 -159
- package/src/dashboard/side-basic-runtime.ts +61 -0
- package/src/dashboard/sidetab-runtime.ts +228 -0
- package/src/dashboard/slash-runtime/ask-clarification.ts +7 -1
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +22 -8
- package/src/dashboard/slash-runtime/help-from-registry.ts +2 -2
- package/src/dashboard/term-slash-runtime.ts +18 -18
- package/src/dashboard/turn-preamble.ts +30 -4
- package/src/domains/guardian-tick.ts +9 -0
- package/src/domains/knowledge.ts +1 -1
- package/src/esc-abort-gate.ts +33 -1
- package/src/execution-loop/launch-gate.ts +206 -1
- package/src/git-fs/watcher.ts +27 -22
- package/src/git-fs/worktree.ts +19 -3
- package/src/graph-runner/graph-cli.ts +6 -4
- package/src/graph-runner/graph-grow.ts +37 -9
- package/src/graph-runner/runner.ts +48 -11
- package/src/graph-wizard/generate.ts +16 -7
- package/src/graph-wizard/mission-compose.ts +201 -0
- package/src/grok/agent-search.ts +8 -2
- package/src/grok/credential.ts +112 -36
- package/src/grounding/ref-index.ts +11 -0
- package/src/grounding/ref-vector.ts +61 -0
- package/src/grounding/sources-cli.ts +2 -2
- package/src/grounding/sources.ts +15 -1
- package/src/harness/harness-cli-command.ts +38 -9
- package/src/harness/harness-pod-dispatch.ts +7 -1
- package/src/hq/fence-wrapper.ts +1 -1
- package/src/hq/transfer.ts +1 -1
- package/src/index.ts +60 -16
- package/src/input/external-input-queue.ts +10 -0
- package/src/intake-plane/collect-telegram-saved.ts +90 -6
- package/src/intake-plane/intake-to-tasks.ts +246 -3
- package/src/interactive-terminal-modal.ts +3 -0
- package/src/keybindings.ts +17 -22
- package/src/lessons/friction-ledger.ts +154 -0
- package/src/live-supply/collector.ts +149 -0
- package/src/live-supply/probes.ts +52 -0
- package/src/live-supply/snapshot.ts +40 -0
- package/src/llm/provider-credentials.ts +1 -1
- package/src/llm-tool-schema.ts +20 -0
- package/src/llm.ts +486 -61
- package/src/loops/orchestrator/inbox-once.ts +28 -0
- package/src/loops/orchestrator/inbox.ts +130 -1
- package/src/loops/orchestrator/tick.ts +14 -3
- package/src/maturity/feature-maturity.ts +1 -0
- package/src/nexus/api/channel-ask-op.ts +96 -0
- package/src/nexus/api/discord-trigger-bot.ts +28 -1
- package/src/nexus/api/harness-api.ts +2 -1
- package/src/nexus/api/telegram-trigger-bot.ts +24 -0
- package/src/nexus/api/terminals.ts +28 -6
- package/src/patents/ledger.ts +18 -1
- package/src/preview/terminal.ts +4 -2
- package/src/prompt-cache/anthropic.ts +2 -0
- package/src/prompt-enhance/enhance.ts +5 -0
- package/src/pty/snapshot.py +132 -0
- package/src/pty-shell/pty-control-ipc.ts +29 -2
- package/src/pty-shell/pty-manifest.ts +75 -5
- package/src/pty-shell/registry.ts +2 -0
- package/src/pty-shell/tui-run-state.ts +80 -3
- package/src/release-loop/gate-host-reservation.ts +13 -4
- package/src/release-loop/gate-shard-ledger.ts +68 -0
- package/src/release-loop/gate-shards.ts +61 -0
- package/src/release-loop/light-rc.ts +7 -4
- package/src/release-loop/merged-pr-checklist.ts +25 -2
- package/src/release-loop/rehearsal-shard-plan.ts +6 -1
- package/src/release-loop/rehearsal.ts +28 -1
- package/src/repl/index.ts +10 -0
- package/src/research/axis-fanout.ts +133 -0
- package/src/research/edge-decision.ts +197 -0
- package/src/research/gap-followup.ts +249 -0
- package/src/research/lenses/counter-evidence.ts +100 -0
- package/src/research/lenses/working-backwards.ts +89 -0
- package/src/research/output-router.ts +127 -0
- package/src/research/plugin-discovery.ts +242 -0
- package/src/research-bridge/format.ts +16 -1
- package/src/research-bridge/index.ts +1 -0
- package/src/research-bridge/invoke.ts +45 -7
- package/src/research-bridge/types.ts +2 -0
- package/src/self-dev/ask-launch-flow.ts +34 -106
- package/src/self-dev/decompose.ts +45 -9
- package/src/self-dev/dev-cli.ts +2 -0
- package/src/self-dev/dev-pipeline.ts +8 -4
- package/src/self-dev/draft-residue.ts +221 -2
- package/src/self-dev/draft-sweep.ts +29 -16
- package/src/self-dev/graph-journey-route.ts +10 -2
- package/src/self-dev/launch-preflight-text.ts +2 -2
- package/src/self-dev/launch-preflight.ts +38 -7
- package/src/self-dev/orchestrate-cli.ts +1 -0
- package/src/self-dev/orchestrate.ts +1 -0
- package/src/self-dev/run-supervisor.ts +41 -7
- package/src/self-dev/shard-run.ts +260 -3
- package/src/self-implement/comment-only-source.ts +54 -0
- package/src/self-implement/device-first.ts +8 -2
- package/src/self-implement/doctor-visit.ts +100 -57
- package/src/self-implement/gate-artifacts.ts +5 -2
- package/src/self-implement/gate-baseline.ts +119 -13
- package/src/self-implement/gate-cli.ts +466 -93
- package/src/self-implement/gate-failure-signature.ts +44 -0
- package/src/self-implement/gate-receipt-registry.ts +180 -0
- package/src/self-implement/gate-remote.ts +147 -22
- package/src/self-implement/goal-author-clarification.ts +178 -24
- package/src/self-implement/goal-author-decompose.ts +24 -15
- package/src/self-implement/goal-author.ts +82 -7
- package/src/self-implement/goal-doc/section.ts +22 -0
- package/src/self-implement/goal-supervisor-fill.ts +38 -4
- package/src/self-implement/host-regate.ts +120 -45
- package/src/self-implement/impl-findings-feedback.ts +188 -0
- package/src/self-implement/knowhow-pack.ts +301 -9
- package/src/self-implement/l8-merge-queue.ts +198 -32
- package/src/self-implement/off-diff-evidence.ts +147 -0
- package/src/self-implement/orchestrator.ts +137 -16
- package/src/self-implement/pod-inplace-worktree.ts +82 -0
- package/src/self-implement/pod-warm-pool-profile.ts +2 -2
- package/src/self-implement/premise-review.ts +7 -5
- package/src/self-implement/run-ledger.ts +304 -8
- package/src/self-implement/run-stop.ts +12 -0
- package/src/self-implement/seams.ts +39 -13
- package/src/self-implement/self-implement-cli.ts +30 -4
- package/src/session/channel-ask-op-envelope.ts +36 -0
- package/src/session/channel-op-reply-route.ts +200 -0
- package/src/session/chat.ts +92 -15
- package/src/session/index.ts +2 -0
- package/src/session-runtime/index.ts +9 -22
- package/src/session-runtime/provider-circuit.ts +140 -0
- package/src/shell-runner/file-engine.ts +1 -0
- package/src/shell-runner/types.ts +4 -0
- package/src/sidetab-core/model.ts +176 -0
- package/src/skills/runner.ts +7 -3
- package/src/skills/tools/dev-harness.ts +2 -2
- package/src/skills/tools/schedule-wakeup.ts +24 -7
- package/src/skills/tools/shell.ts +51 -5
- package/src/status/bar.ts +3 -3
- package/src/steward/directive-audit.ts +354 -0
- package/src/storage/file-lock.ts +17 -4
- package/src/surface/child-process.ts +31 -0
- package/src/surface/tui-stderr-owner.ts +48 -0
- package/src/task-agent/adopt-pr.ts +63 -2
- package/src/task-agent/cover.ts +30 -12
- package/src/task-agent/evidence-command-normalize.ts +42 -0
- package/src/task-agent/export-redactions-provision.ts +43 -0
- package/src/task-agent/judge.ts +56 -0
- package/src/task-agent/parent-host.ts +59 -12
- package/src/task-agent/postland-card.ts +35 -2
- package/src/task-agent/rejudge-on-head.ts +46 -2
- package/src/task-agent/repair-cycle.ts +68 -9
- package/src/task-agent/repair-worker.ts +37 -1
- package/src/task-agent/task-hand.ts +226 -33
- package/src/task-agent/tier-split.ts +142 -24
- package/src/task-orchestrator/surfaces/pod-command-job.ts +330 -2
- package/src/task-orchestrator/surfaces/pod-config-snapshot.ts +123 -0
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +57 -5
- package/src/task-orchestrator/surfaces/pod-mirror-seed.ts +11 -8
- package/src/task-orchestrator/surfaces/pod-pool.ts +27 -4
- package/src/task-orchestrator/surfaces/pod-si-warm-protocol.ts +1 -1
- package/src/task-orchestrator/surfaces/pod-source-receive.ts +74 -6
- package/src/task-orchestrator/surfaces/pod-warm-worker-pod.ts +2 -1
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +56 -15
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +310 -79
- package/src/task-orchestrator/surfaces/self-implement.ts +33 -2
- package/src/terminal/session-registry.ts +1 -0
- package/src/terminal/terminal-modal-router.ts +156 -0
- package/src/tool-hints/gate.ts +6 -4
- package/src/tool-hints/signals.ts +33 -1
- package/src/tool-runtime/skill-exec-runtime.ts +95 -5
- package/src/tui/chat/background-job-status.ts +8 -2
- package/src/tui/entry.ts +483 -32
- package/src/tui/inline-choice.ts +188 -0
- package/src/tui/sidetab/attach.ts +304 -0
- package/src/tui/sidetab/list.ts +2 -0
- package/src/tui/sidetab/nl-tool.ts +136 -0
- package/src/tui/slash/resume-command.ts +23 -0
- package/src/tui/slash/resume.ts +3 -23
- package/src/tui/slash/term-next.ts +2 -1
- package/src/tui/slash/term.ts +12 -1
- package/src/tui-client/dashboard-session.ts +7 -1
- package/src/tui-client/local-chat-turn.ts +29 -8
- package/src/user-config.ts +42 -3
- package/src/ux-sim/classic-tui-seat-scenarios.ts +1 -7
- package/src/ux-sim/fake-land-queue.ts +88 -0
- package/src/ux-sim/fake-llm.ts +11 -5
- package/src/ux-sim/gate-shard-host-reroute.ts +82 -0
- package/src/ux-sim/goal-interim-trace.ts +24 -0
- package/src/ux-sim/next-tui-seat-scenarios.ts +61 -14
- package/src/ux-sim/task-orchestrator-surfaces-self-implement-pod-device.ts +4 -1
- package/src/version/packed-revision.json +1 -1
- package/src/video-pipeline/recipes/explainer.ts +54 -2
- package/src/web-search/grok.ts +32 -6
- package/src/web-search/index.ts +8 -7
- package/src/workflow-runtime/node-catalog.ts +53 -4
- package/apps/pwa/out/_next/static/chunks/1041-5841aae848fb6403.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1087.3177e54f672dc526.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1105.efe1e13503ac7a33.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1224.2ceca6c180d5130b.js +0 -62
- package/apps/pwa/out/_next/static/chunks/1417-1768233ac92f8a5d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1612.81bbc19af06af16c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1766.728d42053070bb2d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1773.d38e945481e04125.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1974-c12f9600da3d3c26.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1ed5e8af.cf424815c7c0efad.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2061.7232dc9dc058417f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/210.90b2cbd64926cf34.js +0 -32
- package/apps/pwa/out/_next/static/chunks/244-a810d282a20f1783.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2479-fe7e188bd9402d14.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2514.03b60f266531a015.js +0 -148
- package/apps/pwa/out/_next/static/chunks/2526-a657538869888604.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2533-6f0341ff075809e9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2676.e7994c695ef0f30d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2734.3ffdf54254fb6f99.js +0 -27
- package/apps/pwa/out/_next/static/chunks/2770-23252bf3a37880b9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2969.66b8b545139d1544.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3128.a9210d08800ea6a8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3199.6a1a9b0e6cd01dc6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3212.12179fd3eee8cef1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3760-2909ddb9279281cd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3825.1921b5901bf33dce.js +0 -36
- package/apps/pwa/out/_next/static/chunks/3994-63eb884ed0547011.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4036.d54e55e1ebf5acdc.js +0 -90
- package/apps/pwa/out/_next/static/chunks/4115.5b438b99f0ae729f.js +0 -226
- package/apps/pwa/out/_next/static/chunks/4269.d8f9f34bb0fc6c43.js +0 -287
- package/apps/pwa/out/_next/static/chunks/431-4eed5bd2c5fe1719.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4324.c99ba3e83eb1b691.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4599-96eff3f2a9c242c1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4825-a9d9d4e9f5892309.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4833-7934c592c5569f00.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4879-68518f547a207aff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4896.f9b70285363b27b2.js +0 -24
- package/apps/pwa/out/_next/static/chunks/4937-28d437999b77c9dd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/49aa54ab.80f39398e0ed0f30.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5056.482687319b82638e.js +0 -104
- package/apps/pwa/out/_next/static/chunks/506.16b83d56a437a9ee.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5260-20593b0a25d0afbc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5404.cc4e9fec26fd5925.js +0 -1
- package/apps/pwa/out/_next/static/chunks/576.485e83e3f3dec19a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5832-a6be14e663f65726.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5854-56648a9fe646b9a0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5925.3b1f8b135710249b.js +0 -93
- package/apps/pwa/out/_next/static/chunks/5952.294fc574a8625184.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6168.17749aa3905fa073.js +0 -74
- package/apps/pwa/out/_next/static/chunks/6416.5d50b8ec9986ca98.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6758.e7fbf532953c0783.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6795.0cb8a59730d99703.js +0 -149
- package/apps/pwa/out/_next/static/chunks/6877-84d47b7e85d0c41e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6971-fb5f9dc0a2cb5d2d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/717.522b08685979b814.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7191.e41eb8f455c7f089.js +0 -41
- package/apps/pwa/out/_next/static/chunks/7233.8e744b7513119409.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7238-97c2226f80504bd8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7285.307963afcf7e7660.js +0 -24
- package/apps/pwa/out/_next/static/chunks/7299-fbe4b8c47a87614a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7314.df0d95930b0c3f50.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7406.c0589fdf2ee66629.js +0 -1
- package/apps/pwa/out/_next/static/chunks/752-90e3e7daad3d8e39.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7524-bcd3d9928c6842d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7549.9a4de3bf231cfc52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/757-4fbaf50942b8c424.js +0 -1
- package/apps/pwa/out/_next/static/chunks/765.76ae970ceb597b5b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7893-e444a1b0809cd1e4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7956-33748cabb3a05562.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7c5ed21f-f286708e57cf88f7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8030-aa66b478b53dbfca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8051.c88c07dacbbc5f21.js +0 -8
- package/apps/pwa/out/_next/static/chunks/8080-40d781e7704d3671.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8149.80e402d4345e8dae.js +0 -77
- package/apps/pwa/out/_next/static/chunks/8205.50a5268f4e12ba0b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8231.a128feaa6f8b6079.js +0 -1
- package/apps/pwa/out/_next/static/chunks/85.4ddb1dda2ea3ffa2.js +0 -286
- package/apps/pwa/out/_next/static/chunks/8537.26517a09e8247beb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8595-e9b7081ab773a61f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8821-30cc65a61a60951f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8905.b3385aadb7b133e6.js +0 -79
- package/apps/pwa/out/_next/static/chunks/8983.246bb3a1ac38f50f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9072.18342f5941a1f3ec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9123.9df04866b2d6e00f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9175-7d383df15a82e2be.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9181-bf89c07ce5b8f599.js +0 -1
- package/apps/pwa/out/_next/static/chunks/920-429bbc4504b45f71.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9207.625edf45d656151c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9378.d2575c6ffd6dd756.js +0 -94
- package/apps/pwa/out/_next/static/chunks/957.db5b5c4d32a35240.js +0 -1
- package/apps/pwa/out/_next/static/chunks/958.53a8dcf4729e6997.js +0 -64
- package/apps/pwa/out/_next/static/chunks/9647.8f0cd0898c592a29.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9665-26abb02665704c2c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9703.e7d81b6faef1050a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9882-7a9164b3c2dacbe5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9998.b74e033efadecd10.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-c604fb980a634d88.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-ec2d8a4979ca9075.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-cb6add08ad3c7660.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-e2eaa321ec223fe6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-5b8a09c475b5f844.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-91a77daedfbac191.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-f37fc5e974bda39b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-91429a0b78415a94.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-b95798b58263b910.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-763d53e175e17aa1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-d55023204055b12f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-89d2140d78abc810.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-82dc069abfe27f55.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-25d9eee7beb552c0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-770b4594c713ee97.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-c604fb980a634d88.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-ba8e0dcae4f83985.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-5c112c6d7c33656e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-09788e1aa9a87db6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-89acd5d68c0bc560.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-5c13e2c76371d797.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-653a9f18642825c6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-fe986fe79b107546.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-91ea9f5869a40943.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-7824e21b999962e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-53d00a60cc75a922.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-88a1edbff62eaf1d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-4e931248b3f9574b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-443364c9e4a23b31.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-b9af2ac1c4737ce8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-25ab9c614c14129b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-dbcdcfac0a395a8a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-bf1de6645089ec58.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-c4201761a5e839c9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-c304f469ea5d70e4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-8e5a238cf5e50c9c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-c604fb980a634d88.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-32b526069ee50b3c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-fb9e639c107f5f72.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-84220c776608cedc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-e475618cbfd5ca2b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-fccd3020af2f8806.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-9c0d7198ff7b5a91.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-d54b1ec9b9c6430d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-8c4bef1791d732ca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-46fcc0b0bbc6fbfe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-7dfda00afd172f5b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/f21fd540.63ac75328926ed30.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-77fdcc873519a6cd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-d0d620d2ce235713.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-e0ef79c79337ba90.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-84b1bc71e3f9ce6a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-2acb61f1363128cb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-462ff5727ceb7824.js +0 -1
- package/scripts/migrate-monad-to-elanous.ts +0 -195
- package/scripts/rebrand-elanous.ts +0 -242
- /package/apps/pwa/out/_next/static/{8kITumG9GAZ1LwT9POrAR → HjeK7zONHfR7op1hKXp4k}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ⚡ SURVIVAL-PROVIDER-CIRCUIT — 공급자별 회로 차단기 (S2)
|
|
3
|
+
* 정본: 내부 문서 `RFC-tui-never-stop-survival-ladder-2026-10-27` §3 S2 · §6 B
|
|
4
|
+
*
|
|
5
|
+
* 턴 «안»의 공급자 전환(src/llm.ts decideProviderFallback → provider-fallback)은
|
|
6
|
+
* 이미 있지만, 턴이 끝나면 «방금 누가 고장 났나»를 잊는다. 다음 턴은 다시
|
|
7
|
+
* 1순위부터 열어 매번 무응답 대기를 먼저 치른다. 이 모듈은 프로세스 안에
|
|
8
|
+
* 공급자별 회로 상태를 남겨 턴을 넘어 건강을 기억한다.
|
|
9
|
+
*
|
|
10
|
+
* ⭐ 사람 의도가 이긴다(src/oauth/fallback-chain.ts 규율 ②) — 회로는 어디까지나
|
|
11
|
+
* 폴백 판정 보조다. opts.provider 로 명시·고정된 턴은 회로를 보지 않는다.
|
|
12
|
+
*
|
|
13
|
+
* 상태기계:
|
|
14
|
+
* closed —(10분 창 안 «전환 사유» 연속 2회 실패)→ open (냉각 5분)
|
|
15
|
+
* open —(냉각 경과)→ half-open
|
|
16
|
+
* half-open —(다음 시도 1회)→ 성공: closed / 실패: open (냉각 2배, 상한 30분)
|
|
17
|
+
*
|
|
18
|
+
* 전환 사유 범주는 `isProviderFallbackEligible` 이 참인 범주
|
|
19
|
+
* (network-transient · rate-limit · overloaded · malformed) ⊕
|
|
20
|
+
* `StreamIdleTimeoutError`(stream-idle-timeout) · `OverloadFailoverError`
|
|
21
|
+
* (overload-failover) 로 한정한다. 그 외 범주(context-window · safety-blocked
|
|
22
|
+
* 등 사용자 탓)는 회로에 기록하지 않는다 — 사용자가 문면을 고치기 전까지
|
|
23
|
+
* 다른 공급자로 도망갈 이유가 없다.
|
|
24
|
+
*/
|
|
25
|
+
import { debug } from '../debug/log.js';
|
|
26
|
+
import { isProviderFallbackEligible, type RetryCategory } from './retry-policy.js';
|
|
27
|
+
|
|
28
|
+
export type ProviderCircuitState = 'closed' | 'open' | 'half-open';
|
|
29
|
+
|
|
30
|
+
/** 회로 실패로 세는 «전환 사유» 범주에 추가로 들어가는 두 에러의 범주명. */
|
|
31
|
+
export const CIRCUIT_EXTRA_CATEGORIES = ['stream-idle-timeout', 'overload-failover'] as const;
|
|
32
|
+
|
|
33
|
+
/** 10분 창 — 같은 공급자의 «전환 사유» 실패 2회가 이 창 안에 있어야 열린다. */
|
|
34
|
+
export const CIRCUIT_FAILURE_WINDOW_MS = 10 * 60_000;
|
|
35
|
+
/** 첫 냉각 5분 — 다시 열릴 때마다 2배. */
|
|
36
|
+
export const CIRCUIT_COOLDOWN_BASE_MS = 5 * 60_000;
|
|
37
|
+
export const CIRCUIT_COOLDOWN_MAX_MS = 30 * 60_000;
|
|
38
|
+
export const CIRCUIT_FAILURE_THRESHOLD = 2;
|
|
39
|
+
|
|
40
|
+
interface CircuitEntry {
|
|
41
|
+
/** «전환 사유» 실패 시각(에포크 ms) — 10분 창 밖은 다듬는다. */
|
|
42
|
+
eligibleFailures: number[];
|
|
43
|
+
state: 'closed' | 'open';
|
|
44
|
+
cooldownMs: number;
|
|
45
|
+
openedAt: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** 프로세스 안 상태 — 턴을 넘어 살아 있어야 하니 모듈 스코프에 둔다. */
|
|
49
|
+
const circuits = new Map<string, CircuitEntry>();
|
|
50
|
+
|
|
51
|
+
/** 실패 범주가 회로 실패(«전환 사유»)로 세는가 — 순수 판정. */
|
|
52
|
+
export function isCircuitFailureCategory(category: string): boolean {
|
|
53
|
+
if ((CIRCUIT_EXTRA_CATEGORIES as readonly string[]).includes(category)) return true;
|
|
54
|
+
return isProviderFallbackEligible(
|
|
55
|
+
new Error(`circuit:${category}`),
|
|
56
|
+
category as RetryCategory,
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function entry(name: string): CircuitEntry {
|
|
61
|
+
let entry = circuits.get(name);
|
|
62
|
+
if (!entry) {
|
|
63
|
+
entry = { eligibleFailures: [], state: 'closed', cooldownMs: CIRCUIT_COOLDOWN_BASE_MS, openedAt: 0 };
|
|
64
|
+
circuits.set(name, entry);
|
|
65
|
+
}
|
|
66
|
+
return entry;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function logState(
|
|
70
|
+
event: 'circuit-open' | 'circuit-half-open' | 'circuit-closed',
|
|
71
|
+
provider: string,
|
|
72
|
+
failures: number,
|
|
73
|
+
cooldownMs: number,
|
|
74
|
+
): void {
|
|
75
|
+
debug.log('tui.survival', event, { provider, failures, cooldownMs });
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** 회로 차단기에 실패를 기록한다. «전환 사유» 범주만 세며, half-open 시험
|
|
79
|
+
* 실패는 냉각을 2배(상한 30분)로 갈아 open 을 다시 연다. */
|
|
80
|
+
export function recordProviderFailure(name: string, category: string, now: number): void {
|
|
81
|
+
if (!isCircuitFailureCategory(category)) return;
|
|
82
|
+
const e = entry(name);
|
|
83
|
+
if (e.state === 'open' && now >= e.openedAt + e.cooldownMs) {
|
|
84
|
+
// half-open 시험 실패 — 다시 열리고 냉각은 2배(상한 30분).
|
|
85
|
+
e.cooldownMs = Math.min(e.cooldownMs * 2, CIRCUIT_COOLDOWN_MAX_MS);
|
|
86
|
+
e.openedAt = now;
|
|
87
|
+
e.eligibleFailures.push(now);
|
|
88
|
+
logState('circuit-open', name, e.eligibleFailures.length, e.cooldownMs);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
e.eligibleFailures = e.eligibleFailures.filter((t) => now - t <= CIRCUIT_FAILURE_WINDOW_MS);
|
|
92
|
+
e.eligibleFailures.push(now);
|
|
93
|
+
if (e.state === 'closed' && e.eligibleFailures.length >= CIRCUIT_FAILURE_THRESHOLD) {
|
|
94
|
+
e.state = 'open';
|
|
95
|
+
e.openedAt = now;
|
|
96
|
+
e.cooldownMs = CIRCUIT_COOLDOWN_BASE_MS;
|
|
97
|
+
logState('circuit-open', name, e.eligibleFailures.length, e.cooldownMs);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** 성공 — half-open 이면 closed 로 회복하고, closed 의 실패 이력 창을 정리한다. */
|
|
102
|
+
export function recordProviderSuccess(name: string, now: number): void {
|
|
103
|
+
const e = circuits.get(name);
|
|
104
|
+
if (!e) return;
|
|
105
|
+
if (e.state === 'open' && now >= e.openedAt + e.cooldownMs) {
|
|
106
|
+
e.state = 'closed';
|
|
107
|
+
e.cooldownMs = CIRCUIT_COOLDOWN_BASE_MS;
|
|
108
|
+
e.eligibleFailures = [];
|
|
109
|
+
logState('circuit-closed', name, 0, e.cooldownMs);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (e.eligibleFailures.length > 0) e.eligibleFailures = [];
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** 현재 회로 상태 — 주입 시계로만 판정한다. */
|
|
116
|
+
export function circuitState(name: string, now: number): ProviderCircuitState {
|
|
117
|
+
const e = circuits.get(name);
|
|
118
|
+
if (!e || e.state === 'closed') return 'closed';
|
|
119
|
+
return now < e.openedAt + e.cooldownMs ? 'open' : 'half-open';
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** 턴의 첫 공급자 후보 — 체인 순서 그대로 첫 `closed`, 없으면 첫 `half-open`,
|
|
123
|
+
* 모두 `open` 이면 `undefined`(호출부가 원래 1순위로 열며 `circuit-all-open` 을 남긴다). */
|
|
124
|
+
export function pickInitialProvider(
|
|
125
|
+
chainNames: readonly string[],
|
|
126
|
+
now: number,
|
|
127
|
+
): string | undefined {
|
|
128
|
+
let firstHalfOpen: string | undefined;
|
|
129
|
+
for (const name of chainNames) {
|
|
130
|
+
const state = circuitState(name, now);
|
|
131
|
+
if (state === 'closed') return name;
|
|
132
|
+
if (state === 'half-open' && firstHalfOpen === undefined) firstHalfOpen = name;
|
|
133
|
+
}
|
|
134
|
+
return firstHalfOpen;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/** 테스트 전용 — 프로세스 안 회로 상태를 리셋한다. */
|
|
138
|
+
export function resetProviderCircuitForTest(): void {
|
|
139
|
+
circuits.clear();
|
|
140
|
+
}
|
|
@@ -368,6 +368,7 @@ function buildResult(
|
|
|
368
368
|
const aggCapped = capString(agg, meta.maxOutputBytes);
|
|
369
369
|
const r: ShellResult = {
|
|
370
370
|
...(meta.exitCode !== undefined ? { exitCode: meta.exitCode } : {}),
|
|
371
|
+
...(meta.spawnError !== undefined ? { failureReason: meta.spawnError } : {}),
|
|
371
372
|
stdout: stdout.toStream(meta.maxOutputBytes),
|
|
372
373
|
stderr: stderr.toStream(meta.maxOutputBytes),
|
|
373
374
|
aggregated: aggCapped,
|
|
@@ -213,6 +213,10 @@ export interface StreamOutput {
|
|
|
213
213
|
|
|
214
214
|
export interface ShellResult {
|
|
215
215
|
exitCode?: number;
|
|
216
|
+
/** Failure detail captured at the execution boundary (for example,
|
|
217
|
+
* the original spawn error). Kept separate from outcome so callers
|
|
218
|
+
* can explain why no process exit status exists. */
|
|
219
|
+
failureReason?: string;
|
|
216
220
|
stdout: StreamOutput;
|
|
217
221
|
stderr: StreamOutput;
|
|
218
222
|
/** Merged (interleaved) stream in spawn order. For File engine
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { resolveInstanceName } from '../instance-identity.js';
|
|
2
|
+
import { listPtyManifestRows, type PtyManifestRow } from '../pty-shell/pty-manifest.js';
|
|
3
|
+
import { describePtyRunState } from '../pty-shell/tui-run-state.js';
|
|
4
|
+
|
|
5
|
+
const graphemes = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
|
|
6
|
+
|
|
7
|
+
export type SidetabBadge = 'busy' | 'idle' | 'stale' | 'unknown' | 'exited';
|
|
8
|
+
|
|
9
|
+
export interface SidetabRow {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly label: string;
|
|
12
|
+
readonly kind: string;
|
|
13
|
+
readonly badge: SidetabBadge;
|
|
14
|
+
readonly sessionId?: string;
|
|
15
|
+
readonly ptyId?: string;
|
|
16
|
+
readonly nestDepth?: number;
|
|
17
|
+
readonly ownerPid?: number;
|
|
18
|
+
readonly currentProcess?: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface SidetabState {
|
|
22
|
+
readonly open: boolean;
|
|
23
|
+
readonly selected: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface SidetabScope {
|
|
27
|
+
readonly all?: boolean;
|
|
28
|
+
readonly currentPtyId?: string;
|
|
29
|
+
readonly currentPid?: number;
|
|
30
|
+
/** Current classic chat session; classic shell rows carry it in their purpose tag. */
|
|
31
|
+
readonly currentSessionId?: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export type SidetabKey = 'toggle' | 'up' | 'down' | 'other';
|
|
35
|
+
|
|
36
|
+
export function createSidetabState(): SidetabState {
|
|
37
|
+
return { open: false, selected: 0 };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function sidetabWidthForTerminal(columns: number): number {
|
|
41
|
+
return columns < 34 ? 0 : Math.min(28, Math.max(12, Math.floor(columns / 3)));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function sidetabRowIndexAtTerminalRow(rowCount: number, selected: number, panelHeight: number, terminalRow: number): number | null {
|
|
45
|
+
const rowCapacity = Math.max(0, Math.floor(panelHeight) - 3);
|
|
46
|
+
const visibleCount = Math.min(rowCount, rowCapacity);
|
|
47
|
+
const offset = terminalRow - 3;
|
|
48
|
+
if (visibleCount === 0 || offset < 0 || offset >= visibleCount) return null;
|
|
49
|
+
const start = rowCount <= visibleCount
|
|
50
|
+
? 0
|
|
51
|
+
: Math.max(0, Math.min(selected - visibleCount + 1, rowCount - visibleCount));
|
|
52
|
+
return start + offset;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function applySidetabKey(state: SidetabState, key: SidetabKey, rowCount: number): SidetabState {
|
|
56
|
+
if (key === 'toggle') return { ...state, open: !state.open, selected: Math.min(state.selected, Math.max(0, rowCount - 1)) };
|
|
57
|
+
if (!state.open || rowCount === 0 || (key !== 'up' && key !== 'down')) return state;
|
|
58
|
+
const delta = key === 'up' ? -1 : 1;
|
|
59
|
+
return { ...state, selected: (state.selected + delta + rowCount) % rowCount };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function sidetabRowsFromManifest(
|
|
63
|
+
rows: readonly PtyManifestRow[],
|
|
64
|
+
instance: string,
|
|
65
|
+
runState: (row: PtyManifestRow) => { turn: string; stale: boolean | null } = describePtyRunState,
|
|
66
|
+
scope?: SidetabScope,
|
|
67
|
+
): SidetabRow[] {
|
|
68
|
+
const currentPid = scope?.currentPid ?? process.pid;
|
|
69
|
+
const currentSessionId = scope?.currentSessionId;
|
|
70
|
+
const eligible = rows.filter((row) => row.instance === instance && (
|
|
71
|
+
(row.kind === 'tui' && Boolean(row.sessionId))
|
|
72
|
+
|| Boolean(row.parentPtyId)
|
|
73
|
+
|| row.purpose?.startsWith('next-tui-sidetab:')
|
|
74
|
+
|| (row.kind === 'shell'
|
|
75
|
+
&& currentSessionId !== undefined
|
|
76
|
+
&& row.parentPid === currentPid
|
|
77
|
+
&& row.purpose?.includes(`:session:${currentSessionId}:terminal:`))
|
|
78
|
+
));
|
|
79
|
+
let scoped = eligible;
|
|
80
|
+
if (scope) {
|
|
81
|
+
const parent = eligible.find((row) => row.kind === 'tui'
|
|
82
|
+
&& (row.id === (scope.currentPtyId ?? `tui:${currentPid}`) || row.ownerPid === currentPid));
|
|
83
|
+
if (!scope.all) {
|
|
84
|
+
const includedIds = new Set<string>(parent ? [parent.id] : []);
|
|
85
|
+
const includedPids = new Set<number>(parent ? [parent.ownerPid, parent.ptyPid, currentPid] : [currentPid]);
|
|
86
|
+
let changed = true;
|
|
87
|
+
while (changed) {
|
|
88
|
+
changed = false;
|
|
89
|
+
for (const row of eligible) {
|
|
90
|
+
if (row.kind === 'tui' || includedIds.has(row.id)) continue;
|
|
91
|
+
if ((row.parentPtyId && includedIds.has(row.parentPtyId)) || (row.parentPid > 0 && includedPids.has(row.parentPid))) {
|
|
92
|
+
includedIds.add(row.id);
|
|
93
|
+
if (row.ownerPid > 0) includedPids.add(row.ownerPid);
|
|
94
|
+
if (row.ptyPid > 0) includedPids.add(row.ptyPid);
|
|
95
|
+
changed = true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
scoped = eligible.filter((row) => includedIds.has(row.id));
|
|
100
|
+
}
|
|
101
|
+
if (!scope.all) scoped = scoped.filter((row) => row.alive);
|
|
102
|
+
}
|
|
103
|
+
return scoped
|
|
104
|
+
.map((row) => {
|
|
105
|
+
const badge: SidetabBadge = !row.alive
|
|
106
|
+
? 'exited'
|
|
107
|
+
: (() => {
|
|
108
|
+
const state = runState(row);
|
|
109
|
+
return state.stale === true ? 'stale' : state.turn === 'busy' ? 'busy' : state.turn === 'idle' ? 'idle' : 'unknown';
|
|
110
|
+
})();
|
|
111
|
+
const sessionId = row.purpose?.startsWith('next-tui-sidetab:') ? row.purpose.slice('next-tui-sidetab:'.length) : undefined;
|
|
112
|
+
const classicTerminalSessionId = currentSessionId !== undefined && row.kind === 'shell'
|
|
113
|
+
? row.purpose?.split(`:session:${currentSessionId}:terminal:`)[1]
|
|
114
|
+
: undefined;
|
|
115
|
+
return {
|
|
116
|
+
id: row.id,
|
|
117
|
+
label: `${' '.repeat(Math.min(2, row.nestDepth ?? 0))}${row.nickname || row.purpose || row.cmd || row.kind}`,
|
|
118
|
+
...(row.sessionId ? { sessionId: row.sessionId } : {}),
|
|
119
|
+
kind: row.kind,
|
|
120
|
+
badge,
|
|
121
|
+
ptyId: row.id,
|
|
122
|
+
nestDepth: row.nestDepth,
|
|
123
|
+
ownerPid: row.ownerPid,
|
|
124
|
+
currentProcess: row.kind === 'tui' && row.ownerPid === process.pid,
|
|
125
|
+
...(sessionId ? { sessionId } : classicTerminalSessionId ? { sessionId: classicTerminalSessionId } : {}),
|
|
126
|
+
};
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export function loadSidetabRows(all = false, currentSessionId?: string): SidetabRow[] {
|
|
131
|
+
return sidetabRowsFromManifest(listPtyManifestRows(), resolveInstanceName(), describePtyRunState, {
|
|
132
|
+
all,
|
|
133
|
+
...(currentSessionId ? { currentSessionId } : {}),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export function formatSidetabLines(
|
|
138
|
+
rows: readonly SidetabRow[],
|
|
139
|
+
selected: number,
|
|
140
|
+
width: number,
|
|
141
|
+
height = Number.POSITIVE_INFINITY,
|
|
142
|
+
mode: 'list' | 'new' = 'list',
|
|
143
|
+
): string[] {
|
|
144
|
+
const fit = (value: string): string => {
|
|
145
|
+
const segments = [...graphemes.segment(value)].map(({ segment }) => segment);
|
|
146
|
+
const truncated = Bun.stringWidth(value) > width;
|
|
147
|
+
const limit = truncated ? Math.max(0, width - 1) : width;
|
|
148
|
+
let result = '';
|
|
149
|
+
let used = 0;
|
|
150
|
+
for (const segment of segments) {
|
|
151
|
+
const cells = Bun.stringWidth(segment);
|
|
152
|
+
if (used + cells > limit) break;
|
|
153
|
+
result += segment;
|
|
154
|
+
used += cells;
|
|
155
|
+
}
|
|
156
|
+
if (truncated && width > 0) { result += '…'; used++; }
|
|
157
|
+
return result + ' '.repeat(Math.max(0, width - used));
|
|
158
|
+
};
|
|
159
|
+
const lines = mode === 'new'
|
|
160
|
+
? [fit(' 새 PTY'), fit(' s shell · e elanous'), fit(' c codex · l claude · Esc')]
|
|
161
|
+
: [fit(' 세션 · PTY'), fit(' ↑↓ 전환 · 클릭 선택')];
|
|
162
|
+
const rowCapacity = Math.max(0, Math.floor(height) - lines.length - (mode === 'list' ? 1 : 0));
|
|
163
|
+
const visibleCount = Math.min(rows.length || 1, rowCapacity);
|
|
164
|
+
const start = rows.length <= visibleCount
|
|
165
|
+
? 0
|
|
166
|
+
: Math.max(0, Math.min(selected - visibleCount + 1, rows.length - visibleCount));
|
|
167
|
+
if (mode === 'list' && rows.length === 0 && visibleCount > 0) lines.push(fit(' 항목 없음'));
|
|
168
|
+
for (let offset = 0; offset < visibleCount && rows.length > 0; offset++) {
|
|
169
|
+
const index = start + offset;
|
|
170
|
+
const row = rows[index]!;
|
|
171
|
+
const marker = index === selected ? '›' : ' ';
|
|
172
|
+
lines.push(fit(` ${marker} ${row.badge} ${row.label}`));
|
|
173
|
+
}
|
|
174
|
+
if (mode === 'list' && lines.length < Math.floor(height)) lines.push(fit(' + new · /side new'));
|
|
175
|
+
return lines;
|
|
176
|
+
}
|
package/src/skills/runner.ts
CHANGED
|
@@ -700,6 +700,9 @@ export interface ExecuteSkillOpts {
|
|
|
700
700
|
export interface ExecuteSkillResult {
|
|
701
701
|
provider: string;
|
|
702
702
|
model: string;
|
|
703
|
+
/** Final assistant answer, without the rendered tool-call transcript. */
|
|
704
|
+
finalResponse: string;
|
|
705
|
+
/** Rendered skill transcript used by interactive surfaces. */
|
|
703
706
|
fullResponse: string;
|
|
704
707
|
}
|
|
705
708
|
|
|
@@ -1199,6 +1202,7 @@ async function executeSkillUnrecorded(
|
|
|
1199
1202
|
return {
|
|
1200
1203
|
provider: provider.name,
|
|
1201
1204
|
model: modelHint || provider.defaultModel,
|
|
1205
|
+
finalResponse: '',
|
|
1202
1206
|
fullResponse: display,
|
|
1203
1207
|
};
|
|
1204
1208
|
}
|
|
@@ -2036,9 +2040,9 @@ async function executeSkillUnrecorded(
|
|
|
2036
2040
|
return {
|
|
2037
2041
|
provider: provider.name,
|
|
2038
2042
|
model: modelHint || provider.defaultModel,
|
|
2039
|
-
//
|
|
2040
|
-
//
|
|
2041
|
-
|
|
2043
|
+
// Keep both products: interactive surfaces need the rendered transcript,
|
|
2044
|
+
// while programmatic callers (e.g. skill_exec) need only the final answer.
|
|
2045
|
+
finalResponse: typeof fullResponse === 'string' ? fullResponse : '',
|
|
2042
2046
|
fullResponse: display || fullResponse,
|
|
2043
2047
|
};
|
|
2044
2048
|
}
|
|
@@ -383,7 +383,7 @@ export async function dispatchRunDevHarness(
|
|
|
383
383
|
const { runStagedHarnessOnSurface } = await import('../../harness/harness-membrane.js');
|
|
384
384
|
const { groundMissionInCodebase } = await import('../../autopilot/mission-codebase-gate.js'); // ★ 이식 §3.1 — 하니스 Planner grounding
|
|
385
385
|
const { analyzeGoalAmbiguity } = await import('../../autopilot/mission-intake-clarify.js'); // ⓪ clarify(인터뷰·경량)
|
|
386
|
-
const {
|
|
386
|
+
const { runResearchQuestionLadder, researchTurnForGrounding } = await import('../../auto-research/research-turn.js'); // ★ Bloom 질문을 실제 조사 호출에 연결
|
|
387
387
|
const { buildSkillHint } = await import('../../harness/skill-hint.js'); // ★ H3 skill 힌트(결정론·상황부)
|
|
388
388
|
const { selectHarnessSkill } = await import('../../harness/skill-select.js'); // ★ S1 실행형(luna 주경로·substring fallback)
|
|
389
389
|
const { buildAttractivenessSignal } = await import('../../harness/signal-gate.js'); // ★ R3 신호 게이트(판단층·부작용0)
|
|
@@ -532,7 +532,7 @@ export async function dispatchRunDevHarness(
|
|
|
532
532
|
// ⓪ clarify(인터뷰·경량) — phase='scope'·heavy=false 로 과도한 조사 방지(대표 원칙: 명확하면 0질문·최상위 1개만).
|
|
533
533
|
analyzeGoal: (obj) => analyzeGoalAmbiguity(obj, { phase: 'scope', heavy: false }),
|
|
534
534
|
// ★ H3 외부 research(상황부) — objective 가 외부지식 요할 때만(intent-gate) web 조사 → grounding 에 얹음.
|
|
535
|
-
research: (topic) =>
|
|
535
|
+
research: (topic) => runResearchQuestionLadder(topic).then(researchTurnForGrounding),
|
|
536
536
|
// ★ H3 skill 힌트(상황부) — objective 의 explicit 트리거가 특정 skill 을 강하게 가리키면 grounding 힌트
|
|
537
537
|
// (결정론·실행 안 함·luna 보완축). getSkillIndex 는 프로세스 캐시. fail-soft(index 로드 실패=null).
|
|
538
538
|
skillHint: (objective) => { try { return buildSkillHint(objective, getSkillIndex()); } catch { return null; } },
|
|
@@ -402,7 +402,7 @@ export function buildScheduleWakeupHostTool(scheduler: WakeupScheduler): LLMTool
|
|
|
402
402
|
name: SCHEDULE_WAKEUP_TOOL_NAME,
|
|
403
403
|
description:
|
|
404
404
|
'Wake THIS TUI later with an internal turn: when you would write «다음 점검 HH:MM» and end the turn, call this instead so the check actually happens. '
|
|
405
|
-
+ 'action=schedule (default) needs reason plus one of at ("HH:MM" local, past → tomorrow) / delaySeconds (≥60) / repeatMinutes (≥1; repeats expire after 7 days). Never provide both at and delaySeconds; the
|
|
405
|
+
+ 'action=schedule (default) needs reason plus one of at ("HH:MM" local, past → tomorrow) / delaySeconds (≥60) / repeatMinutes (≥1; repeats expire after 7 days). Never provide both at and delaySeconds; the scheduler validates the timing choice. '
|
|
406
406
|
+ 'ONE-SHOT (wake once): give only delaySeconds or at and OMIT repeatMinutes (0 also means one-shot). Set repeatMinutes only when you really want it to repeat. '
|
|
407
407
|
+ `action=list shows pending wakeups; action=cancel needs id. Limits: ≥60s ahead, ≤7 days, at most 5 pending, at most ${WAKEUP_MAX_CALLS_PER_TURN} schedule/cancel calls per turn. `
|
|
408
408
|
+ 'If the TUI is busy or the human is typing at that time it retries once a minute later, then gives up (repeats move to the next tick). '
|
|
@@ -418,11 +418,6 @@ export function buildScheduleWakeupHostTool(scheduler: WakeupScheduler): LLMTool
|
|
|
418
418
|
id: { type: 'string', description: 'Wakeup id for action=cancel (from schedule/list).' },
|
|
419
419
|
},
|
|
420
420
|
required: [],
|
|
421
|
-
oneOf: [
|
|
422
|
-
{ not: { anyOf: [{ required: ['at'] }, { required: ['delaySeconds'] }] } },
|
|
423
|
-
{ required: ['at'], not: { required: ['delaySeconds'] } },
|
|
424
|
-
{ required: ['delaySeconds'], not: { required: ['at'] } },
|
|
425
|
-
],
|
|
426
421
|
},
|
|
427
422
|
handler: async (args) => {
|
|
428
423
|
const action = typeof args.action === 'string' ? args.action : 'schedule';
|
|
@@ -454,8 +449,30 @@ export function createDashboardWakeupScheduler(
|
|
|
454
449
|
gate: Pick<InternalTurnGate, 'startTurnIfIdle' | 'isInternalTurnActive' | 'lastTurnId'>,
|
|
455
450
|
deps: Omit<WakeupSchedulerDeps, 'startTurnIfIdle' | 'isTurnActive'> = {},
|
|
456
451
|
): WakeupScheduler {
|
|
452
|
+
// The N03 real-TUI scenario must cover a scheduled wake while a turn is busy,
|
|
453
|
+
// then the one-minute retry after it settles. Keep the logical clock exact,
|
|
454
|
+
// but let that isolated fake-LLM fixture advance timer deadlines quickly.
|
|
455
|
+
// Both opt-ins are required; ordinary TUI sessions always use wall-clock time.
|
|
456
|
+
const acceleratedTestClock = process.env.ELANOUS_TEST_FAKE_LLM === '1'
|
|
457
|
+
&& process.env.ELANOUS_TEST_FAST_WAKEUP_CLOCK === '1';
|
|
458
|
+
let testNow = Date.now();
|
|
459
|
+
let testTimerCount = 0;
|
|
460
|
+
const schedulerDeps: Omit<WakeupSchedulerDeps, 'startTurnIfIdle' | 'isTurnActive'> = acceleratedTestClock
|
|
461
|
+
? {
|
|
462
|
+
...deps,
|
|
463
|
+
now: () => testNow,
|
|
464
|
+
setTimer: (callback, logicalDelayMs) => {
|
|
465
|
+
const realDelayMs = testTimerCount++ === 0 ? 3_000 : 8_000;
|
|
466
|
+
return setTimeout(() => {
|
|
467
|
+
testNow += logicalDelayMs;
|
|
468
|
+
callback();
|
|
469
|
+
}, realDelayMs);
|
|
470
|
+
},
|
|
471
|
+
clearTimer: (timer) => clearTimeout(timer as ReturnType<typeof setTimeout>),
|
|
472
|
+
}
|
|
473
|
+
: deps;
|
|
457
474
|
return createWakeupScheduler({
|
|
458
|
-
...
|
|
475
|
+
...schedulerDeps,
|
|
459
476
|
startTurnIfIdle: (text, opts) => gate.startTurnIfIdle(text, opts),
|
|
460
477
|
isTurnActive: (turnId) => gate.isInternalTurnActive() && gate.lastTurnId() === turnId,
|
|
461
478
|
// 한 턴 호출 상한의 턴 경계 = H2 가 아는 마지막 턴 id(사람 제출마다 human-N · 내부 턴마다 auto-N).
|
|
@@ -586,6 +586,8 @@ export interface ShellCompletionNoticeInput {
|
|
|
586
586
|
ok: boolean;
|
|
587
587
|
exitCode: number | null;
|
|
588
588
|
durationMs: number;
|
|
589
|
+
/** Full bounded runner result, when the runner resolved normally. */
|
|
590
|
+
result?: RunnerResult;
|
|
589
591
|
/** Set when ok === false — the runner's failure reason. */
|
|
590
592
|
errorMessage?: string;
|
|
591
593
|
/** Caller-supplied free-form label (RunShell's `description` arg). */
|
|
@@ -598,6 +600,29 @@ export interface ShellCompletionNoticeInput {
|
|
|
598
600
|
* settle (an id-keyed record here would). */
|
|
599
601
|
const notifiedHandles = new WeakSet<ShellHandle>();
|
|
600
602
|
let nextShellCompletionNoticeId = 0;
|
|
603
|
+
const SHELL_NOTICE_STREAM_TAIL_CHARS = 64;
|
|
604
|
+
|
|
605
|
+
function shellNoticeTail(output: RunnerResult['stdout'] | undefined): { text: string; truncated: boolean } {
|
|
606
|
+
if (!output) return { text: '', truncated: false };
|
|
607
|
+
const source = output.tail ?? output.text;
|
|
608
|
+
const safe = redactSecretText(source);
|
|
609
|
+
const chars = Array.from(safe);
|
|
610
|
+
return {
|
|
611
|
+
text: shellNoticeJsonField(chars.slice(-SHELL_NOTICE_STREAM_TAIL_CHARS).join('')),
|
|
612
|
+
truncated: chars.length > SHELL_NOTICE_STREAM_TAIL_CHARS,
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
function shellNoticeReason(value: string): string {
|
|
617
|
+
return redactSecretText(value);
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
function shellNoticeJsonField(value: string): string {
|
|
621
|
+
return JSON.stringify(redactSecretText(value)).replace(/\p{White_Space}/gu, (char) => {
|
|
622
|
+
const hex = char.codePointAt(0)!.toString(16).padStart(4, '0');
|
|
623
|
+
return `\\u${hex}`;
|
|
624
|
+
});
|
|
625
|
+
}
|
|
601
626
|
|
|
602
627
|
/** Enqueue one bg shell-handle completion notice. Returns true when this
|
|
603
628
|
* handle had not notified before (the notice was handed to `queue`),
|
|
@@ -614,15 +639,35 @@ export function enqueueShellCompletionNotice(
|
|
|
614
639
|
if (notifiedHandles.has(input.handle)) return false;
|
|
615
640
|
notifiedHandles.add(input.handle);
|
|
616
641
|
const header = `RunShell bg handle=${input.handle.id} ${input.ok ? 'completed' : 'failed'}`;
|
|
617
|
-
const
|
|
642
|
+
const taskId = `shell:${input.handle.id}:${++nextShellCompletionNoticeId}`;
|
|
643
|
+
const result = input.result;
|
|
644
|
+
const reason = input.errorMessage ?? result?.failureReason;
|
|
645
|
+
const reportedExitCode = result?.exitCode ?? input.exitCode;
|
|
646
|
+
const stdoutTail = shellNoticeTail(result?.stdout);
|
|
647
|
+
const stderrTail = shellNoticeTail(result?.stderr);
|
|
648
|
+
const truncated = (result?.truncated ?? false) || stdoutTail.truncated || stderrTail.truncated;
|
|
649
|
+
const output = [
|
|
650
|
+
header,
|
|
651
|
+
`taskId=${taskId}`,
|
|
652
|
+
`outcome=${result?.outcome ?? 'unknown'}`,
|
|
653
|
+
...(result ? [`exitCode=${reportedExitCode ?? 'null'}`]
|
|
654
|
+
: reportedExitCode !== null ? [`exitCode=${reportedExitCode}`] : []),
|
|
655
|
+
`elapsed=${input.durationMs}ms`,
|
|
656
|
+
...(result ? [`stdoutTail=${stdoutTail.text}`, `stderrTail=${stderrTail.text}`] : []),
|
|
657
|
+
...(stdoutTail.truncated ? ['stdoutTailTruncated=true'] : []),
|
|
658
|
+
...(stderrTail.truncated ? ['stderrTailTruncated=true'] : []),
|
|
659
|
+
...(truncated ? ['truncated=true'] : []),
|
|
660
|
+
...(result?.outputFilePath ? [`outputFile=${shellNoticeJsonField(result.outputFilePath)}`] : []),
|
|
661
|
+
...(reason ? [`failureReason=${shellNoticeJsonField(reason)}`] : []),
|
|
662
|
+
].join(' ');
|
|
618
663
|
queue.enqueue({
|
|
619
|
-
taskId
|
|
664
|
+
taskId,
|
|
620
665
|
agentName: 'RunShell',
|
|
621
666
|
...(input.label ? { label: input.label } : {}),
|
|
622
667
|
state: input.ok ? 'done' : 'error',
|
|
623
668
|
output,
|
|
624
|
-
truncated
|
|
625
|
-
...(
|
|
669
|
+
truncated,
|
|
670
|
+
...(reason ? { errorMessage: shellNoticeReason(reason) } : {}),
|
|
626
671
|
durationMs: input.durationMs,
|
|
627
672
|
finishedAt: Date.now(),
|
|
628
673
|
});
|
|
@@ -748,8 +793,9 @@ async function dispatchViaRunner(args: {
|
|
|
748
793
|
ok,
|
|
749
794
|
exitCode: result.exitCode ?? null,
|
|
750
795
|
durationMs: result.durationMs,
|
|
796
|
+
result,
|
|
751
797
|
...(!ok ? { errorMessage: result.exitCode !== undefined
|
|
752
|
-
? `exitCode=${result.exitCode}` : `outcome=${result.outcome}` } : {}),
|
|
798
|
+
? `exitCode=${result.exitCode}` : result.failureReason ?? `outcome=${result.outcome}` } : {}),
|
|
753
799
|
...(args.description !== undefined ? { label: args.description } : {}),
|
|
754
800
|
});
|
|
755
801
|
},
|
package/src/status/bar.ts
CHANGED
|
@@ -322,7 +322,7 @@ function truncateAtParamSize(model: string): string {
|
|
|
322
322
|
/** Current active LLM model pill. Pink matches Claude Code's palette.
|
|
323
323
|
*
|
|
324
324
|
* 2026-05-05 — provider name omitted (cloud) / `<node>:<model>` for
|
|
325
|
-
* local. Node name (e.g. `local`, `node-
|
|
325
|
+
* local. Node name (e.g. `local`, `node-a`) doubles as the local-LLM
|
|
326
326
|
* indicator (cloud entries have no `<node>:` prefix). When
|
|
327
327
|
* `opts.compact` is true (caller decides via terminal width), the
|
|
328
328
|
* model id portion truncates at the first parameter-size marker.
|
|
@@ -330,13 +330,13 @@ function truncateAtParamSize(model: string): string {
|
|
|
330
330
|
* Render shape examples:
|
|
331
331
|
* - Cloud: `claude-opus-4-6`, `grok-4.3`
|
|
332
332
|
* - Local (multi-node spec): `local:qwen3.6-35b-a3b-ud-mlx`
|
|
333
|
-
* `node-
|
|
333
|
+
* `node-a:qwen2.5-72b-instruct`
|
|
334
334
|
* - Local (legacy `local:<m>`): `local:llama-3-8b` (unchanged)
|
|
335
335
|
* - Local (bare model): `local:tinyllama-1b`
|
|
336
336
|
* - No model: bare provider name fallback.
|
|
337
337
|
* With `compact: true`:
|
|
338
338
|
* - `local:qwen3.6-35b-a3b-ud-mlx` → `local:qwen3.6-35b`
|
|
339
|
-
* - `node-
|
|
339
|
+
* - `node-a:qwen2.5-72b-instruct` → `node-a:qwen2.5-72b`
|
|
340
340
|
* - `claude-opus-4-6` → unchanged (no `\d+b` marker) */
|
|
341
341
|
export function modelSegment(info: StatusModelInfo, opts: StatusBarRenderOptions = {}): string {
|
|
342
342
|
// 이번 턴 실제 실행이 있으면 그 값이 «지금» 이다 — 설정/런타임 값은 실행 전 기본값일 뿐.
|