elanous 0.2.38 → 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/{RrjXTwz-urRAbChP1bX02 → HjeK7zONHfR7op1hKXp4k}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{7954.4f7a8832663ee979.js → 1060.014f1f01a17aec26.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{8911.bf5e712acb25fb6c.js → 1281.d81877e35b9068f4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{2104.70e086d5174a4736.js → 1350.59f40e39e02d91b1.js} +1 -1
- 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/2047.8f23e210995d4548.js +2 -0
- package/apps/pwa/out/_next/static/chunks/2061-7f2bbc53ae96c88b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1632.7d87f998e714bede.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/{8019.21ca554a821dad01.js → 2177.df8547f9d7215c4e.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/2200-9a453b8f99687d49.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3528.e4b8ab70d339f965.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/{6493.27ad77de7aac7966.js → 2499.02fbfd18126c10c0.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{7628.6b16863ac3972333.js → 2522.f2766b76d22c8bdf.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3086.fb14b60ce98b53d3.js → 2566.beaffc3a5e1fcd2e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9299.24e2a7d9b6d1f91b.js → 261.0d471e8aded799f3.js} +3 -3
- 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/2774-719820e3f5b2a3eb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2812-f016aa0dda149287.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2829-734fe8bf2eee7347.js +1 -0
- 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/{7524.ce973525d30b3d52.js → 3330.7443183b7e6fdbdf.js} +1 -1
- 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/{3124-561f7f037943cde2.js → 3746-f80a78f220bf37b5.js} +1 -1
- 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/{bb6987f9.3647e1a23b0e3217.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/{8994d93e.33ba491f95345fc2.js → 409c787b.e48c5bec8ec10456.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{5041-5aada92ca215ffdd.js → 413-24c8284bda08241d.js} +1 -1
- 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/{5638.107314dc479e2f37.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/{8487.291666583bebe640.js → 4769.9fd582071301f382.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{8509.3a54d4e61893d7cb.js → 483.725e4a61be922788.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9fe1b809.738da85c8b17e3fb.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/{8879.ac06755bcf3e44a1.js → 5383.bdfa5d886e39a826.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{6142.913b44e260a3f925.js → 5436.fdf6fa8ae3e9588d.js} +1 -1
- 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/{7161-8f22db3ec5ed005e.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/{3291.f6c1005387d514bd.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/{5203.51e5d8b5f1dcfe53.js → 6749.0744ce6eb08d40e9.js} +3 -3
- 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/{1938.0e6c60ee91c4d7f5.js → 6908.06008c67f6380ea9.js} +2 -2
- 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/{de8b930d.d94c0f42acf807fc.js → 6cc1d1d6.9a98dd4622f1afc6.js} +1 -1
- 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/{1026-44010f405704050c.js → 8272-025653884f9645d2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{5307.d7328020227880c2.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/{4199-f7c6eb40cd0322f8.js → 8639-92c11d069792429e.js} +1 -1
- 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/9175.2de5209a5ce6f68a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9184.45afbf44fec87574.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{eaad0cba.771200940c529df7.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-866aac5ff226a7f3.js → page-ba957ff875a026a0.js} +1 -1
- 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-4edb8df90f4537ce.js +1 -0
- 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-fca2e59a81744d9e.js +1 -0
- 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-139d722de1dcd6c1.js +1 -0
- 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-ccde99f07aaf71f7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-80464aced9614390.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{b7478fef.5917716286213fcc.js → b84cad00.594027ebe0531fe2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/c696986b.5dc8bb1143af16d1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{b7459770.6539b11860eb8a9c.js → ca3702f8.2913182e73889fa2.js} +7 -7
- package/apps/pwa/out/_next/static/chunks/{3f0de3de-2340c532c00395db.js → d5d3cefc-373c4eb722ed848b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{89d6c04f-6b8ab341748e468a.js → d8de0de2-dd0f4ac8e5ab1832.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{framework-4b12a946f352cee2.js → framework-002b472a66935d31.js} +1 -1
- 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/video/explainer-line.yaml +4 -1
- package/package.json +1 -1
- package/scripts/dead-code/report.ts +169 -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/public-export.ts +15 -7
- package/scripts/release-loop/export-check-node.ts +21 -3
- package/scripts/release-loop/gate-node.ts +379 -48
- 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-release.ts +20 -5
- package/scripts/release-loop/resume.ts +48 -0
- package/scripts/release-loop/version-node.ts +7 -2
- 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/src/acp/core-turn-bridge.ts +8 -0
- 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/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 +75 -6
- 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/self-review-cli.ts +226 -17
- 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 +22 -3
- package/src/auto-research/research-turn.ts +350 -17
- package/src/autopilot/agent-loop.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/budget/llm-cost.ts +44 -5
- package/src/budget/unified-usage.ts +17 -1
- package/src/capture/tui-self-report.ts +14 -0
- package/src/chat/index.ts +33 -7
- package/src/cli/agent-cli.ts +43 -8
- package/src/cli/intake-cli.ts +22 -1
- package/src/cli/lesson-cli.ts +19 -3
- package/src/cli/log-event-names.ts +1 -0
- package/src/cli/pod-cli.ts +17 -2
- package/src/cli/pty-takeover-cli.ts +67 -7
- package/src/cli/release-cli.ts +52 -6
- package/src/cli/repo-cli.ts +2 -1
- package/src/cli/tasks-cli.ts +36 -9
- package/src/control-plane/ledger.ts +21 -4
- package/src/core-turn/run-core-turn.ts +44 -3
- package/src/core-turn/run-goal-loop.ts +152 -8
- package/src/core-turn/types.ts +9 -0
- package/src/dashboard/chat/acp-chat.ts +2 -2
- package/src/dashboard/classic-sigquit.ts +16 -0
- package/src/dashboard/index.ts +321 -27
- 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/sidetab-runtime.ts +228 -0
- package/src/dashboard/slash-runtime/ask-clarification.ts +7 -1
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +20 -8
- package/src/dashboard/slash-runtime/help-from-registry.ts +2 -2
- package/src/dashboard/term-slash-runtime.ts +16 -18
- package/src/dashboard/turn-preamble.ts +2 -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/graph-runner/graph-cli.ts +6 -4
- package/src/graph-runner/runner.ts +31 -9
- 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 +5 -0
- 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/index.ts +18 -4
- package/src/input/external-input-queue.ts +10 -0
- package/src/intake-plane/collect-telegram-saved.ts +36 -1
- package/src/intake-plane/intake-to-tasks.ts +246 -3
- 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.ts +431 -76
- package/src/loops/orchestrator/tick.ts +8 -0
- package/src/nexus/api/harness-api.ts +2 -1
- package/src/pty/snapshot.py +132 -0
- package/src/pty-shell/pty-control-ipc.ts +29 -2
- package/src/pty-shell/pty-manifest.ts +59 -3
- 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/merged-pr-checklist.ts +25 -2
- package/src/release-loop/rehearsal-shard-plan.ts +6 -1
- package/src/release-loop/rehearsal.ts +27 -0
- package/src/research/edge-decision.ts +124 -15
- 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/plugin-discovery.ts +242 -0
- package/src/research-bridge/invoke.ts +4 -2
- package/src/research-bridge/types.ts +2 -0
- package/src/self-dev/ask-launch-flow.ts +34 -106
- package/src/self-dev/dev-cli.ts +2 -0
- package/src/self-dev/dev-pipeline.ts +8 -4
- 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/run-supervisor.ts +19 -0
- package/src/self-implement/device-first.ts +8 -2
- package/src/self-implement/doctor-visit.ts +76 -58
- package/src/self-implement/gate-artifacts.ts +3 -0
- package/src/self-implement/gate-baseline.ts +75 -4
- package/src/self-implement/gate-cli.ts +317 -9
- package/src/self-implement/gate-receipt-registry.ts +180 -0
- package/src/self-implement/gate-remote.ts +145 -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 +9 -5
- 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 +189 -10
- package/src/self-implement/off-diff-evidence.ts +124 -0
- package/src/self-implement/orchestrator.ts +85 -7
- package/src/self-implement/run-ledger.ts +46 -8
- package/src/self-implement/run-stop.ts +12 -0
- package/src/self-implement/seams.ts +6 -3
- package/src/self-implement/self-implement-cli.ts +4 -2
- package/src/session/chat.ts +89 -15
- 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/tools/schedule-wakeup.ts +23 -1
- package/src/skills/tools/shell.ts +51 -5
- package/src/steward/directive-audit.ts +354 -0
- package/src/surface/child-process.ts +31 -0
- package/src/surface/tui-stderr-owner.ts +48 -0
- package/src/task-agent/cover.ts +30 -12
- package/src/task-agent/judge.ts +56 -0
- 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 +1 -1
- package/src/task-agent/task-hand.ts +129 -24
- package/src/task-agent/tier-split.ts +105 -21
- 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 +27 -2
- package/src/task-orchestrator/surfaces/pod-mirror-seed.ts +11 -8
- 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 +186 -33
- package/src/tool-runtime/skill-exec-runtime.ts +95 -5
- package/src/tui/entry.ts +15 -2
- package/src/tui/inline-choice.ts +188 -0
- package/src/tui/sidetab/list.ts +2 -176
- package/src/tui/slash/term.ts +12 -1
- package/src/tui-client/dashboard-session.ts +7 -1
- package/src/user-config.ts +34 -4
- 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/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 +8 -13
- 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/1118.a8a74ea29aac3e46.js +0 -27
- package/apps/pwa/out/_next/static/chunks/1204-2aa830479adf80f4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1341-43b7d2dc77d45c9d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1440-c3ea8882badfd9bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1698-9c11cbf97f13717e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1770-3b1fc92253ef9f2f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1923-5c1695332240246a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/213-20675f20673ba22a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/214.186a430da28338f1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2277.3bd4c0ac7f1b5996.js +0 -93
- package/apps/pwa/out/_next/static/chunks/240.e09f433f71c78ff4.js +0 -104
- package/apps/pwa/out/_next/static/chunks/2415.738b777642a02233.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2417.02151393605a7cd0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2463.cd2641a76daaa9ff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2576.b9e9c629c4b84c52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/265-c021de53f0865bd9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2998-b1cc13956cd6a6e7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2e4782d3.ba2f0ab2b63a53e7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3130.626b54382b4dc379.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3221-1bb3f99a55088613.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3280.24edb1ffd03a7f3f.js +0 -24
- package/apps/pwa/out/_next/static/chunks/3288-eb3c22a1cbf2ae68.js +0 -1
- package/apps/pwa/out/_next/static/chunks/33.ef99e8374f96c6c4.js +0 -36
- package/apps/pwa/out/_next/static/chunks/3341-f09b9efbd7a82f70.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3389.012c70767a872f9b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3410-d7c0f14b329d6fda.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3421.c87d6313a7d670f7.js +0 -287
- package/apps/pwa/out/_next/static/chunks/3422-83a3953f9bd67e26.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3587-002e24e368c515a9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3644.f12a7d821ab940af.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3660.d7516588e2d875c3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3695.b82e2610f4cd4ea9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3858.ca1f5bc0f577eac9.js +0 -94
- package/apps/pwa/out/_next/static/chunks/3959-e6ac4a139d9d4bcc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4032.53f62176514ec0ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4204-ef8484cbecd5d62f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4259-163129ca79913c4b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/428-eaa77df3d0c85969.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4432-97e400ffa1e161f5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/449-aa427cf2cbb75f50.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4491-39a0fd32bbaf3840.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4588.b7cf06d382953979.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4690.70ec8060825366ab.js +0 -32
- package/apps/pwa/out/_next/static/chunks/4804.6012b5cd33c22792.js +0 -90
- package/apps/pwa/out/_next/static/chunks/4881.e4d22d730e3b9df5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4937.ce2e340dc29cad3e.js +0 -79
- package/apps/pwa/out/_next/static/chunks/5-bb1c08d84bd71df3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5005.de98df23b37cdf3c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5035.dc64a89cad5573cc.js +0 -74
- package/apps/pwa/out/_next/static/chunks/5207.1a224035455790fd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5255-1b60d50eabe9f057.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5269.d0436ee6d773382a.js +0 -286
- package/apps/pwa/out/_next/static/chunks/5300.677c97e0393742e6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5309.3367c4d50f52b489.js +0 -1
- package/apps/pwa/out/_next/static/chunks/552-689827d49780fa00.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5539.34cc9d60622cb69b.js +0 -8
- package/apps/pwa/out/_next/static/chunks/5568.218dea0c00ca2ec7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5645.b7e3b055455a04ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5662.18cc0f30353cbd96.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5671.da24fc9dc5e98325.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5b141171.324c40fd49cb6821.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6175-d4621f6a10b0cfab.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6290.3eb53a20746b72ce.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6415-9307f3eafa90837f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6579-3de35d00aacd71b5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/680-2f324c4e039a5b67.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6845-331b3c7481da3ba3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7000.28157393caaf5343.js +0 -62
- package/apps/pwa/out/_next/static/chunks/7311-60a7ea80d23c7521.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7401.525d0a12f7d02c06.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7438.c2cf72b66dca6aa4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7488.966b116789f3d41a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7573.2376e13c9c21f1f8.js +0 -77
- package/apps/pwa/out/_next/static/chunks/7577.ea6e9ac72e035520.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7657.8d1fb3d2f7ebe273.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7903-1435d5d2f0dd7807.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7978-30a91192c5dbe3c2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8025-8795821525cf1a07.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8191.3674a00f0b565c23.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8217-604955d8885c5ef2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8298-eed6f5f2585a63f4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8758.ac421f726a189125.js +0 -1
- package/apps/pwa/out/_next/static/chunks/891.d6c723a51a067b36.js +0 -149
- package/apps/pwa/out/_next/static/chunks/9223.cbcc88e0e9950426.js +0 -41
- package/apps/pwa/out/_next/static/chunks/9317.6a9869039c231bb3.js +0 -24
- package/apps/pwa/out/_next/static/chunks/9383.e4755f275b3c11ff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9581.da63ddf41acfad46.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9715.8c5529a0a5c41a36.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9817.3009d65f0889ef1f.js +0 -2
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-76873dd80da4f715.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-ed32b6ec5dea8f23.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-fdd40e15babf3d25.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-384efc78e85e400b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-d91809c5aeed319a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-128f3522f89a81ab.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-595961abf3b43ad1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-f41dccb76d8c0263.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-a3205c2e28b7d0d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-c39a80277814a3f4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-1ab3f98194513195.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-a5246f7e254d77d0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-0f92287bdb81217d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-5a37131ff63793ef.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-76873dd80da4f715.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-ac4bd14bb2348bfd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-c348a3959c5b5fc6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-2addd81c0d3e2906.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-da6b765f58a3eefb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-0661e40f8780c32c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-b89af1b1c8e4875b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-da8aeb82ba751cdb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-cc71317b239439db.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-bde7fc1d64ffe369.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-e2797214f713fa58.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-2a35bcda70defaf6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-3af03deedde45032.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-d1d1210f99f620ae.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-46d1b5500885861d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-291ab19fe2acb173.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-7f569e533ddeecba.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-990129c9fee46d8f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-7737f785ebb1cdaf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-9f3c73a4f7ffd2f8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-03be7fb347f01058.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-96b0280625e4df2b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-56855545049eb56d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-76873dd80da4f715.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-79a909c9981f0338.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-a9d9a3e66459c1e0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c383cbf2013f7069.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f57c6a2e54dbdca4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-6b140f77593576eb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-6b767ae2d9d0adfc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-116d6198d5da0e3d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-b9c9b778c7501370.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-a6c78392ab8f6335.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-455183deb4ed0cfe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-6a63e99526bd63d0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-31c22caafe788c08.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-941155250ed2644b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-f8b6765abed6d149.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-78432194c85388f9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-cdf7390829512b1b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-d5f0964a9c2e92d2.js +0 -1
- /package/apps/pwa/out/_next/static/{RrjXTwz-urRAbChP1bX02 → HjeK7zONHfR7op1hKXp4k}/_ssgManifest.js +0 -0
|
@@ -134,6 +134,7 @@ export interface DashboardChatMainPlainTurnRuntimeDeps {
|
|
|
134
134
|
onToolResult: (call: unknown) => void;
|
|
135
135
|
onUsage: (usage: unknown) => void;
|
|
136
136
|
onThought?: (text: string) => void;
|
|
137
|
+
onStatus?: (line: string) => void;
|
|
137
138
|
/** ACP `_meta` — 자동 회복 ② 가 «다음 공급자로» 표지를 싣는다. */
|
|
138
139
|
meta?: Record<string, unknown>;
|
|
139
140
|
}): Promise<unknown>;
|
|
@@ -174,7 +175,7 @@ export interface DashboardChatMainPlainTurnRuntimeDeps {
|
|
|
174
175
|
autoheal?: DashboardTurnAutoheal;
|
|
175
176
|
/** 실패 지문이 맞은 오류: 화면엔 한국어 처방 한 줄, 원문은 여기(`/detail`)로. 없으면 원문을 그대로 낸다. */
|
|
176
177
|
pushFailureNotice?: (notice: string, raw: string) => void;
|
|
177
|
-
finalizeTurn: (status: 'completed' | 'interrupted' | 'failed', error?: string) => void
|
|
178
|
+
finalizeTurn: (status: 'completed' | 'interrupted' | 'failed', error?: string) => void | Promise<void>;
|
|
178
179
|
}
|
|
179
180
|
|
|
180
181
|
/** Select a safe, actionable message for a failed dashboard chat turn. */
|
|
@@ -618,6 +619,10 @@ ${summary}` }] : []),
|
|
|
618
619
|
deps.runTurnUsageRuntime(usage);
|
|
619
620
|
},
|
|
620
621
|
onThought: (text) => { turnStreamRuntime.onThought?.(text); },
|
|
622
|
+
onStatus: (line) => {
|
|
623
|
+
deps.pushChatLine(` · ${line}`);
|
|
624
|
+
deps.draw();
|
|
625
|
+
},
|
|
621
626
|
autoTts: deps.autoTts,
|
|
622
627
|
voiceChat: deps.voiceChat,
|
|
623
628
|
drainCooldownMs: userConfig.voice.tts.drainCooldownMs,
|
|
@@ -725,7 +730,7 @@ ${summary}` }] : []),
|
|
|
725
730
|
try {
|
|
726
731
|
cleanupEsc();
|
|
727
732
|
} finally {
|
|
728
|
-
deps.finalizeTurn(finalStatus, finalError);
|
|
733
|
+
await deps.finalizeTurn(finalStatus, finalError);
|
|
729
734
|
}
|
|
730
735
|
}
|
|
731
736
|
}
|
|
@@ -17,6 +17,13 @@ export function resolveDashboardChatMainSlashCommand(
|
|
|
17
17
|
args = command === undefined ? ['new'] : ['new', command];
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
// `/harness ask` is prose, not a whitespace-delimited command. Keep its raw
|
|
21
|
+
// tail intact so pasted path labels stay on the first line for ask preflight.
|
|
22
|
+
if (cmdLower === 'harness' && args[0]?.toLowerCase() === 'ask') {
|
|
23
|
+
const rawAsk = /^\S+\s+ask(?:\s+([\s\S]*))?$/i.exec(commandText.slice(1))?.[1];
|
|
24
|
+
args = rawAsk === undefined ? ['ask'] : ['ask', rawAsk];
|
|
25
|
+
}
|
|
26
|
+
|
|
20
27
|
// Top-level alias: `/resume <id>` → `/session load <id>`.
|
|
21
28
|
// Reuses the existing /session subcommand handler so the resume
|
|
22
29
|
// flow stays in one place. A bare `/resume` is NOT rewritten: it must reach
|
|
@@ -40,6 +40,7 @@ export interface DashboardPlainTurnAcpSend {
|
|
|
40
40
|
onToolResult: (call: unknown) => void;
|
|
41
41
|
onUsage: (usage: unknown) => void;
|
|
42
42
|
onThought?: (text: string) => void;
|
|
43
|
+
onStatus?: (line: string) => void;
|
|
43
44
|
}): Promise<unknown>;
|
|
44
45
|
}
|
|
45
46
|
|
|
@@ -58,6 +59,8 @@ export interface DashboardPlainTurnStreamDeps {
|
|
|
58
59
|
onUsage: (usage: unknown) => void;
|
|
59
60
|
/** TUI-TURN-NARRATION — 추론 요약 문단(선택). */
|
|
60
61
|
onThought?: (text: string) => void;
|
|
62
|
+
/** Transient runtime status (for example, a stream retry notice). */
|
|
63
|
+
onStatus?: (line: string) => void;
|
|
61
64
|
|
|
62
65
|
/** Auto-TTS hooks. `pushChunk` is fired on every text delta;
|
|
63
66
|
* `commit` / `cancel` are called by the settle sink in the
|
|
@@ -177,6 +180,7 @@ export async function runDashboardPlainTurnStream(
|
|
|
177
180
|
},
|
|
178
181
|
onUsage: (usage) => deps.onUsage(usage),
|
|
179
182
|
...(deps.onThought ? { onThought: (text: string) => deps.onThought!(text) } : {}),
|
|
183
|
+
...(deps.onStatus ? { onStatus: (line: string) => deps.onStatus!(line) } : {}),
|
|
180
184
|
});
|
|
181
185
|
settled = deps.abortCtrl.signal.aborted ? 'cancelled' : 'end_turn';
|
|
182
186
|
// Return the cumulative full response so commit / metrics / autocopy
|
|
@@ -28,12 +28,15 @@ function trace(step: string, key: Key, claimed: boolean | string): void {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
export interface DashboardPriorityKeyRouteDeps<Action> {
|
|
31
|
+
/** Classic-dashboard Ctrl+\\ is a recoverable guidance action, not
|
|
32
|
+
* a process quit. Claim it before the global force-quit matcher. */
|
|
33
|
+
routeClassicSigquitChord?: (key: Key) => boolean;
|
|
31
34
|
/** Step 0 — global force-quit chord that fires from ANYWHERE,
|
|
32
35
|
* including inside popup terminals + bell modal + dashboard
|
|
33
36
|
* scenes. Plain Ctrl+Q has too many child-app bindings (e.g.
|
|
34
|
-
* emacs quoted-insert), so the
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
+
* emacs quoted-insert), so Ctrl+Shift+Q is the force-quit escape
|
|
38
|
+
* hatch. Ctrl+\\ is reserved by the classic dashboard for guidance.
|
|
39
|
+
* Returns true when the matcher
|
|
37
40
|
* fires; the route then short-circuits to `{type:'quit'}`
|
|
38
41
|
* regardless of any other state. */
|
|
39
42
|
isForceQuitChord: (key: Key) => boolean;
|
|
@@ -70,6 +73,8 @@ export interface DashboardPriorityKeyRouteDeps<Action> {
|
|
|
70
73
|
* the controller is idle so legacy dispatch paths stay reachable. */
|
|
71
74
|
routeVoiceChatActiveKey: (key: Key) => boolean | Promise<boolean>;
|
|
72
75
|
routeBellKey: (key: Key) => boolean | Promise<boolean>;
|
|
76
|
+
/** Classic sidetab prefix keys must be seen before an exclusive shell modal. */
|
|
77
|
+
routeSidetabKey?: (key: Key) => boolean;
|
|
73
78
|
inputOwner?: InputOwner;
|
|
74
79
|
dispatchPreKey: (key: Key, targetHandlerName?: string) => boolean | Promise<boolean>;
|
|
75
80
|
routeExclusiveTerminalModalKey: (key: Key) => boolean | Promise<boolean>;
|
|
@@ -86,8 +91,9 @@ export async function routeDashboardPriorityKey<Action>(
|
|
|
86
91
|
deps: DashboardPriorityKeyRouteDeps<Action>,
|
|
87
92
|
): Promise<DashboardPriorityKeyRouteResult> {
|
|
88
93
|
// Step 0: global force-quit. Wins over EVERYTHING — bell modal,
|
|
89
|
-
// popup terminal, drag interceptors. Bound to Ctrl+Shift+Q
|
|
90
|
-
// Ctrl
|
|
94
|
+
// popup terminal, drag interceptors. Bound to Ctrl+Shift+Q;
|
|
95
|
+
// Ctrl+\\ has already been claimed by the classic guidance route.
|
|
96
|
+
// This preserves the
|
|
91
97
|
// "elanous escape hatch" concept the user explicitly wanted to keep:
|
|
92
98
|
// "ctrl+q 전체 강제 종료 컨셉은 남았으면 좋겠습니다.
|
|
93
99
|
// 터미널모드에서는 잘 사용하지 않을 복잡 패턴으로 리 어사인 해도 됩니다."
|
|
@@ -101,6 +107,11 @@ export async function routeDashboardPriorityKey<Action>(
|
|
|
101
107
|
const tracing = debug.isKeyTraceEnabled();
|
|
102
108
|
if (tracing) trace('begin', key, 'pending');
|
|
103
109
|
|
|
110
|
+
if (deps.routeClassicSigquitChord?.(key)) {
|
|
111
|
+
if (tracing) trace('routeClassicSigquitChord', key, true);
|
|
112
|
+
return { type: 'handled' };
|
|
113
|
+
}
|
|
114
|
+
|
|
104
115
|
if (deps.isForceQuitChord(key)) {
|
|
105
116
|
if (tracing) trace('isForceQuitChord', key, 'quit');
|
|
106
117
|
return { type: 'quit' };
|
|
@@ -137,6 +148,11 @@ export async function routeDashboardPriorityKey<Action>(
|
|
|
137
148
|
return { type: 'handled' };
|
|
138
149
|
}
|
|
139
150
|
|
|
151
|
+
if (deps.routeSidetabKey?.(key)) {
|
|
152
|
+
if (tracing) trace('routeSidetabKey', key, true);
|
|
153
|
+
return { type: 'handled' };
|
|
154
|
+
}
|
|
155
|
+
|
|
140
156
|
// Step 2: popup terminal modal — when active, the user is interacting
|
|
141
157
|
// with a child PTY (plain shell, /claude, /codex). The router forwards
|
|
142
158
|
// every key except Ctrl+G + typed `exit\n`, which are intentional
|
|
@@ -20,6 +20,7 @@ export interface DashboardExternalInputHostDeps {
|
|
|
20
20
|
setQueueNotice: (line: string | null) => void;
|
|
21
21
|
/** 지금 턴의 ESC 중단 경로(escGate) — 턴 밖이면 null. 외부 `/stop` 이 이것을 부른다. */
|
|
22
22
|
getTurnStop?: () => (() => void) | null;
|
|
23
|
+
handleInlineChoice?: (text: string) => boolean;
|
|
23
24
|
/** 미소비 키 수 — 기본 tui.ts 키 큐. */
|
|
24
25
|
pendingKeyCount?: () => number;
|
|
25
26
|
}
|
|
@@ -61,6 +62,7 @@ export function createDashboardExternalInputHost(deps: DashboardExternalInputHos
|
|
|
61
62
|
stop();
|
|
62
63
|
return true;
|
|
63
64
|
},
|
|
65
|
+
handleInlineChoice: (text) => deps.handleInlineChoice?.(text) ?? false,
|
|
64
66
|
onExternalStop: (result) => {
|
|
65
67
|
deps.pushNotice(result === 'stopped' ? '⏹ 외부 /stop — 대기열을 건너뛰고 이 턴에 중단을 요청했습니다'
|
|
66
68
|
: result === 'no-turn' ? '⏹ 외부 /stop — 도는 턴이 없어 무시했습니다'
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { createVwFilterPickerModal } from '../ui/vw-filter-picker-modal.js';
|
|
2
|
+
import type { ModalSurface } from '../display/modal-stack.js';
|
|
3
|
+
import type { Key } from '../tui.js';
|
|
4
|
+
import { loadSidetabRows, type SidetabRow } from '../sidetab-core/model.js';
|
|
5
|
+
|
|
6
|
+
export interface DashboardSidetabRuntimeDeps {
|
|
7
|
+
currentSessionId: () => string | undefined;
|
|
8
|
+
termSize: () => { cols: number; rows: number };
|
|
9
|
+
loadRows?: (sessionId?: string) => SidetabRow[];
|
|
10
|
+
pushModal: (surface: ModalSurface) => { dispose: () => void };
|
|
11
|
+
attach: (row: SidetabRow) => void;
|
|
12
|
+
spawnShell: () => void;
|
|
13
|
+
detach: (row: SidetabRow | null) => void;
|
|
14
|
+
kill: (row: SidetabRow) => void;
|
|
15
|
+
returnToParent: () => void;
|
|
16
|
+
status: (message: string) => void;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface DashboardSidetabRuntime {
|
|
20
|
+
routeKey: (key: Key) => boolean;
|
|
21
|
+
beginPrefix: () => void;
|
|
22
|
+
close: () => void;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Classic dashboard controls for the shared sidetab model. */
|
|
26
|
+
export function createDashboardSidetabRuntime(
|
|
27
|
+
deps: DashboardSidetabRuntimeDeps,
|
|
28
|
+
): DashboardSidetabRuntime {
|
|
29
|
+
const getRows = deps.loadRows ?? ((sessionId) => loadSidetabRows(false, sessionId));
|
|
30
|
+
let prefixPending = false;
|
|
31
|
+
let modalDispose: (() => void) | null = null;
|
|
32
|
+
let panel: ReturnType<typeof createVwFilterPickerModal> | null = null;
|
|
33
|
+
let panelRows: SidetabRow[] = [];
|
|
34
|
+
|
|
35
|
+
const closePanel = (): void => {
|
|
36
|
+
const dispose = modalDispose;
|
|
37
|
+
modalDispose = null;
|
|
38
|
+
panel = null;
|
|
39
|
+
panelRows = [];
|
|
40
|
+
dispose?.();
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const attach = (row: SidetabRow): void => {
|
|
44
|
+
closePanel();
|
|
45
|
+
if (row.currentProcess) {
|
|
46
|
+
deps.returnToParent();
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
deps.attach(row);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const selectedRow = (): SidetabRow | null => {
|
|
53
|
+
const item = panel?.state().items[panel.state().selectedIdx];
|
|
54
|
+
return item?.payload && typeof item.payload === 'object'
|
|
55
|
+
? item.payload as SidetabRow
|
|
56
|
+
: null;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const confirmKill = (row: SidetabRow | null): void => {
|
|
60
|
+
if (!row || row.currentProcess) {
|
|
61
|
+
deps.status('현재 classic TUI 세션은 종료할 수 없습니다');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
closePanel();
|
|
65
|
+
let dispose: (() => void) | null = null;
|
|
66
|
+
const confirm = createVwFilterPickerModal({
|
|
67
|
+
id: `classic-sidetab-kill-${Date.now().toString(36)}`,
|
|
68
|
+
bounds: { row: 3, col: 2, width: Math.min(52, Math.max(24, deps.termSize().cols - 4)), height: 7 },
|
|
69
|
+
title: `종료 확인 · ${row.label}`,
|
|
70
|
+
width: Math.min(52, Math.max(24, deps.termSize().cols - 4)),
|
|
71
|
+
maxVisible: 2,
|
|
72
|
+
primaryActionLabel: '선택',
|
|
73
|
+
cancelActionLabel: '취소',
|
|
74
|
+
footerHint: '기본 취소 · 종료를 선택해야 PTY를 끝냅니다',
|
|
75
|
+
onQuery: () => [
|
|
76
|
+
{ label: '취소', payload: 'cancel' },
|
|
77
|
+
{ label: '종료', payload: 'kill' },
|
|
78
|
+
],
|
|
79
|
+
onAccept: (item) => {
|
|
80
|
+
dispose?.();
|
|
81
|
+
dispose = null;
|
|
82
|
+
if (item.payload === 'kill') deps.kill(row);
|
|
83
|
+
},
|
|
84
|
+
onCancel: () => {
|
|
85
|
+
dispose?.();
|
|
86
|
+
dispose = null;
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
dispose = deps.pushModal(confirm.surface).dispose;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const openPanel = (): void => {
|
|
93
|
+
if (modalDispose) {
|
|
94
|
+
closePanel();
|
|
95
|
+
deps.returnToParent();
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const { cols, rows } = deps.termSize();
|
|
99
|
+
if (cols < 34 || rows < 12) {
|
|
100
|
+
deps.status('사이드탭은 최소 34칸 × 12줄이 필요합니다');
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const sessionId = deps.currentSessionId();
|
|
104
|
+
panelRows = getRows(sessionId).filter((row) => row.badge !== 'exited');
|
|
105
|
+
const width = Math.min(64, cols - 4);
|
|
106
|
+
const maxVisible = Math.max(1, Math.min(8, rows - 10));
|
|
107
|
+
const panelHeight = Math.min(rows - 2, 8 + Math.min(maxVisible, panelRows.length));
|
|
108
|
+
panel = createVwFilterPickerModal({
|
|
109
|
+
id: `classic-sidetab-${Date.now().toString(36)}`,
|
|
110
|
+
bounds: { row: Math.max(1, Math.floor((rows - panelHeight) / 2)), col: Math.max(1, Math.floor((cols - width) / 2)), width, height: panelHeight },
|
|
111
|
+
title: 'Classic sidetab · this session and children',
|
|
112
|
+
width,
|
|
113
|
+
maxVisible,
|
|
114
|
+
primaryActionLabel: '연결',
|
|
115
|
+
cancelActionLabel: '닫기',
|
|
116
|
+
footerHint: 'Enter 연결 · n 새 셸 · d 분리 · k 종료 · Esc 닫기',
|
|
117
|
+
onQuery: (query) => {
|
|
118
|
+
const normalized = query.trim().toLocaleLowerCase();
|
|
119
|
+
return panelRows
|
|
120
|
+
.filter((row) => !normalized || `${row.label} ${row.kind} ${row.badge}`.toLocaleLowerCase().includes(normalized))
|
|
121
|
+
.map((row) => ({ label: `${row.currentProcess ? '● 현재' : '○'} ${row.badge} ${row.label}`, payload: row }));
|
|
122
|
+
},
|
|
123
|
+
onAccept: (item) => {
|
|
124
|
+
const row = item.payload as SidetabRow;
|
|
125
|
+
attach(row);
|
|
126
|
+
},
|
|
127
|
+
onCancel: closePanel,
|
|
128
|
+
});
|
|
129
|
+
const defaultOnKey = panel.surface.onKey;
|
|
130
|
+
panel.surface.onKey = (event) => {
|
|
131
|
+
if (!event.ctrl && !event.alt && event.name.toLowerCase() === 'n') {
|
|
132
|
+
closePanel();
|
|
133
|
+
deps.spawnShell();
|
|
134
|
+
return 'consumed';
|
|
135
|
+
}
|
|
136
|
+
if (!event.ctrl && !event.alt && event.name.toLowerCase() === 'd') {
|
|
137
|
+
const row = selectedRow();
|
|
138
|
+
closePanel();
|
|
139
|
+
deps.detach(row);
|
|
140
|
+
return 'consumed';
|
|
141
|
+
}
|
|
142
|
+
if (!event.ctrl && !event.alt && event.name.toLowerCase() === 'k') {
|
|
143
|
+
confirmKill(selectedRow());
|
|
144
|
+
return 'consumed';
|
|
145
|
+
}
|
|
146
|
+
return defaultOnKey?.(event) ?? 'passthrough';
|
|
147
|
+
};
|
|
148
|
+
modalDispose = deps.pushModal(panel.surface).dispose;
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
const chooseIndex = (index: number): void => {
|
|
152
|
+
const rows = getRows(deps.currentSessionId()).filter((row) => row.badge !== 'exited');
|
|
153
|
+
const row = rows[index];
|
|
154
|
+
if (!row) {
|
|
155
|
+
deps.status(`사이드탭 ${index + 1}번 항목 없음`);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
attach(row);
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
const beginPrefix = (): void => {
|
|
162
|
+
if (prefixPending) return;
|
|
163
|
+
closePanel();
|
|
164
|
+
prefixPending = true;
|
|
165
|
+
deps.status('사이드탭 키 대기 · s/p/1–9/n/d/k/Esc');
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
const routeKey = (key: Key): boolean => {
|
|
169
|
+
if (panel) {
|
|
170
|
+
const panelResult = panel.surface.onKey?.(key as never);
|
|
171
|
+
if (panelResult && panelResult !== 'passthrough') return true;
|
|
172
|
+
}
|
|
173
|
+
if (prefixPending) {
|
|
174
|
+
prefixPending = false;
|
|
175
|
+
const name = key.name.toLowerCase();
|
|
176
|
+
if (key.name === 'escape' || key.name === 'esc') {
|
|
177
|
+
closePanel();
|
|
178
|
+
deps.returnToParent();
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
if (!key.ctrl && !key.alt && name === 's') {
|
|
182
|
+
openPanel();
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
if (!key.ctrl && !key.alt && name === 'p') {
|
|
186
|
+
closePanel();
|
|
187
|
+
deps.returnToParent();
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
if (!key.ctrl && !key.alt && /^[1-9]$/.test(key.name)) {
|
|
191
|
+
chooseIndex(Number(key.name) - 1);
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
if (!key.ctrl && !key.alt && name === 'n') {
|
|
195
|
+
closePanel();
|
|
196
|
+
deps.spawnShell();
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
if (!key.ctrl && !key.alt && name === 'd') {
|
|
200
|
+
closePanel();
|
|
201
|
+
deps.detach(null);
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
if (!key.ctrl && !key.alt && name === 'k') {
|
|
205
|
+
const row = getRows(deps.currentSessionId()).filter((item) => item.badge !== 'exited')
|
|
206
|
+
.find((item) => !item.currentProcess) ?? null;
|
|
207
|
+
confirmKill(row);
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
deps.status('사이드탭 키: s 목록 · p 부모 · 1–9 연결 · n 새 셸 · d 분리 · k 종료');
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
if (key.ctrl && !key.alt && (key.name === '\\' || key.name === 'backslash')) {
|
|
214
|
+
beginPrefix();
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
return false;
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
return {
|
|
221
|
+
routeKey,
|
|
222
|
+
beginPrefix,
|
|
223
|
+
close() {
|
|
224
|
+
prefixPending = false;
|
|
225
|
+
closePanel();
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
}
|
|
@@ -2,6 +2,9 @@ import type { SurfaceUx } from '../../agent/surface-ux/types.js';
|
|
|
2
2
|
import type { AskUserQuestionRequest } from '../../ask-user-question/types.js';
|
|
3
3
|
import { DASHBOARD_CLARIFICATION_REQUEST } from '../../esc-abort-gate.js';
|
|
4
4
|
import type { GoalDocumentClarification } from '../../self-implement/goal-author-clarification.js';
|
|
5
|
+
import { getUserConfig, resolveTuiUnattended } from '../../user-config.js';
|
|
6
|
+
|
|
7
|
+
export const DASHBOARD_CLARIFICATION_TIMEOUT_MS = 60_000;
|
|
5
8
|
|
|
6
9
|
/**
|
|
7
10
|
* Converts the line-oriented self-dev clarification seam into the existing
|
|
@@ -14,6 +17,7 @@ export async function readDashboardAskClarification(
|
|
|
14
17
|
clarification: GoalDocumentClarification,
|
|
15
18
|
surfaceUx: Pick<SurfaceUx, 'question'> | undefined,
|
|
16
19
|
notify?: (line: string) => void,
|
|
20
|
+
unattended = resolveTuiUnattended(getUserConfig()),
|
|
17
21
|
): Promise<string> {
|
|
18
22
|
if (!surfaceUx) return '';
|
|
19
23
|
const request: AskUserQuestionRequest = {
|
|
@@ -30,7 +34,9 @@ export async function readDashboardAskClarification(
|
|
|
30
34
|
};
|
|
31
35
|
Object.defineProperty(request, DASHBOARD_CLARIFICATION_REQUEST, { value: true });
|
|
32
36
|
try {
|
|
33
|
-
const pending = surfaceUx.question(request
|
|
37
|
+
const pending = surfaceUx.question(request, unattended
|
|
38
|
+
? { timeoutMs: DASHBOARD_CLARIFICATION_TIMEOUT_MS }
|
|
39
|
+
: undefined);
|
|
34
40
|
const id = clarification.questionId;
|
|
35
41
|
notify?.('하니스가 묻는다 — 창에서 고르거나 Esc 로 답 없이 진행');
|
|
36
42
|
const result = await pending;
|
|
@@ -308,6 +308,7 @@ import {
|
|
|
308
308
|
} from '../../user-config.js';
|
|
309
309
|
import { listProviders } from '../../llm.js';
|
|
310
310
|
import { enabledModels, loadCatalog } from '../../intelligence-map/model-catalog.js';
|
|
311
|
+
import { readTuiSlashAudience, slashMaturity } from '../../maturity/tui-slash-maturity.js';
|
|
311
312
|
import { selfOrchestrateRuntime } from '../../self-dev/self-orchestrate-runtime.js';
|
|
312
313
|
import type { ToolRuntime } from '../../tool-runtime/types.js';
|
|
313
314
|
import { getSessionCwd } from '../../session/working-dir.js';
|
|
@@ -383,8 +384,7 @@ import { resolveLocalEndpoints, runLocalLLMCompat } from '../../local-llm-test.j
|
|
|
383
384
|
import { registerTermSlash, type TermSlashHost } from '../../tui/slash/term.js';
|
|
384
385
|
// 옛 입구 re-export shim 은 slash-runtime/index.ts 한 곳뿐(RFC A5 · /mission 과 같은 꼴).
|
|
385
386
|
import { SlashCommandRegistry } from './registry.js';
|
|
386
|
-
|
|
387
|
-
export { readDashboardAskClarification };
|
|
387
|
+
export { readDashboardAskClarification } from './ask-clarification.js';
|
|
388
388
|
import { createLoopScheduler, type LoopScheduler } from '../loop-scheduler.js';
|
|
389
389
|
import { registerShellSlash } from './shell-slash.js';
|
|
390
390
|
import { registerClassicSideSlash } from '../side-basic-runtime.js';
|
|
@@ -1199,6 +1199,15 @@ export const DASHBOARD_SLASH_CATALOG_BASELINE = {
|
|
|
1199
1199
|
'skills-reload', 'spend', 'squeeze',
|
|
1200
1200
|
'tk', 'tokens',
|
|
1201
1201
|
'undo', 'w', 'wd',
|
|
1202
|
+
'ad', 'agent-room', 'api', 'api-allow', 'auto-tts', 'autotts',
|
|
1203
|
+
'board', 'capture', 'chat', 'claude', 'codex', 'control', 'conv',
|
|
1204
|
+
'dash', 'dashboard', 'debug', 'default', 'delta', 'design', 'design-check', 'diffs',
|
|
1205
|
+
'directive', 'export', 'fork', 'gemini', 'handoff', 'hist', 'history', 'inject', 'inputs',
|
|
1206
|
+
'lane', 'll', 'local', 'log', 'loops', 'mission', 'p', 'paste', 'persona', 'plan', 'plugin',
|
|
1207
|
+
'plugins', 'prompt', 'prompts', 'provider', 'qc', 'r', 'reasoning', 'rebind', 'relay',
|
|
1208
|
+
'reply', 'research', 'resume-turn', 'rewind', 'rs', 'run', 'run-skill', 's', 'showroom',
|
|
1209
|
+
'surface', 'sync', 'tablet', 'telegram', 'term', 'terminal', 'tg', 'theme', 'think', 'tts',
|
|
1210
|
+
'vc', 'voice-chat', 'widget', 'widgets', 'wish',
|
|
1202
1211
|
],
|
|
1203
1212
|
listedOnly: [
|
|
1204
1213
|
'acp', 'rsh', 'sr',
|
|
@@ -1496,6 +1505,12 @@ export function buildDashboardSlashRegistry(nowDeps?: ContextNowDeps, decideLedg
|
|
|
1496
1505
|
});
|
|
1497
1506
|
|
|
1498
1507
|
registry.register('directive', async (args, ctx) => {
|
|
1508
|
+
const { role } = readTuiSlashAudience();
|
|
1509
|
+
if (slashMaturity('directive') === 'ops' && role === 'general') {
|
|
1510
|
+
ctx.pushChatLine(ctx.warning(' /directive는 ops 등급 기능이라 general 역할에서는 실행할 수 없습니다.'));
|
|
1511
|
+
ctx.setChatScrollOffset(-1);
|
|
1512
|
+
return;
|
|
1513
|
+
}
|
|
1499
1514
|
try {
|
|
1500
1515
|
const { addDirective } = await import('../../steward/directive.js');
|
|
1501
1516
|
const result = await addDirective(args.join(' '), { source: 'tui' });
|
|
@@ -2300,7 +2315,9 @@ export function buildDashboardSlashRegistry(nowDeps?: ContextNowDeps, decideLedg
|
|
|
2300
2315
|
return;
|
|
2301
2316
|
}
|
|
2302
2317
|
if (sub === 'ask') {
|
|
2303
|
-
|
|
2318
|
+
// `/harness ask` arrives as one raw tail so a pasted path header keeps its line boundary.
|
|
2319
|
+
const askTail = args.length === 2 ? args[1]! : args.slice(1).join(' ');
|
|
2320
|
+
const say = askTail.replace(/^["'“]|["'”]$/g, '').trim();
|
|
2304
2321
|
ctx.chatLines.push('');
|
|
2305
2322
|
ctx.chatLines.push(ctx.accent('❯ /harness ask'));
|
|
2306
2323
|
if (!say) {
|
|
@@ -2346,11 +2363,6 @@ export function buildDashboardSlashRegistry(nowDeps?: ContextNowDeps, decideLedg
|
|
|
2346
2363
|
print: (line) => { for (const part of line.split('\n')) ctx.chatLines.push(` ${part}`); },
|
|
2347
2364
|
log: (event, data, level) => debug.log('dev-pipeline', event, { ...data, surface: 'tui-slash' }, { level }),
|
|
2348
2365
|
readLine: async () => '',
|
|
2349
|
-
readClarification: (clarification) => readDashboardAskClarification(clarification, ctx.surfaceUx, (line) => {
|
|
2350
|
-
ctx.pushChatLine(line);
|
|
2351
|
-
ctx.setChatScrollOffset(-1);
|
|
2352
|
-
ctx.draw();
|
|
2353
|
-
}),
|
|
2354
2366
|
readFile: (file) => readFileSync(file, 'utf8'),
|
|
2355
2367
|
writeFile: (file, data) => writeFileSync(file, data, 'utf8'),
|
|
2356
2368
|
cwd: () => process.cwd(),
|
|
@@ -47,7 +47,7 @@ export function buildEssentialHelpLines({
|
|
|
47
47
|
maxRows,
|
|
48
48
|
}: {
|
|
49
49
|
names: readonly string[];
|
|
50
|
-
descriptions: readonly Pick<SlashCommand, 'name' | 'aliases' | 'description'>[];
|
|
50
|
+
descriptions: readonly Pick<SlashCommand, 'name' | 'aliases' | 'description' | 'hidden'>[];
|
|
51
51
|
width: number;
|
|
52
52
|
audience?: { role: Role; showBeta: boolean };
|
|
53
53
|
/** The modal's row budget. When the readable layout overflows it, add columns (shorter descriptions)
|
|
@@ -56,7 +56,7 @@ export function buildEssentialHelpLines({
|
|
|
56
56
|
}): string[] {
|
|
57
57
|
const registered = new Set(names);
|
|
58
58
|
const entries = descriptions
|
|
59
|
-
.filter((command) => registered.has(command.name) &&
|
|
59
|
+
.filter((command) => !command.hidden && registered.has(command.name) &&
|
|
60
60
|
((audience.role === 'owner' && slashMaturity(command.name) === undefined) || slashVisibleFor(command.name, audience.role, { showBeta: audience.showBeta })))
|
|
61
61
|
.map((command) => {
|
|
62
62
|
const aliases = [...new Set(command.aliases ?? [])].filter((alias) => registered.has(alias) && alias !== command.name);
|
|
@@ -45,6 +45,7 @@ export interface DashboardTermSlashRuntimeDeps {
|
|
|
45
45
|
|
|
46
46
|
export interface DashboardTermSlashRuntime {
|
|
47
47
|
helpLines(): string[];
|
|
48
|
+
experimentalHelpLines(): string[];
|
|
48
49
|
terminalSessionsEmptyLine(): string;
|
|
49
50
|
terminalSessionLine(entry: DashboardTerminalListEntry): string;
|
|
50
51
|
shellRunnerSectionDividerLine(): string;
|
|
@@ -122,7 +123,7 @@ export function createDashboardTermSlashRuntime(
|
|
|
122
123
|
helpLines: () => [
|
|
123
124
|
'',
|
|
124
125
|
deps.accent('\u276f /term'),
|
|
125
|
-
deps.muted('
|
|
126
|
+
deps.muted('Formal commands:'),
|
|
126
127
|
deps.muted(' /term new [command] Open a shell PTY (Ctrl+Shift+T or Alt+T).'),
|
|
127
128
|
deps.muted(' /term list List all alive sessions (fg / bg / exited).'),
|
|
128
129
|
deps.muted(' /term attach <id> Bring a backgrounded session to foreground.'),
|
|
@@ -132,27 +133,24 @@ export function createDashboardTermSlashRuntime(
|
|
|
132
133
|
deps.muted(' /term switch Open the session picker modal.'),
|
|
133
134
|
deps.muted(' /term kill <id> Stop the PTY and remove the session.'),
|
|
134
135
|
deps.muted(' /term snapshot <id> [tail [bytes]] Capture current grid (snapshot) or last N bytes (tail).'),
|
|
135
|
-
deps.muted(' /term
|
|
136
|
-
deps.muted(' /term
|
|
137
|
-
deps.muted(' /term group list Show groups + members.'),
|
|
138
|
-
deps.muted(' /term group join <id> <group> Add terminal to a broadcast group.'),
|
|
139
|
-
deps.muted(' /term group leave <id> <group> Remove terminal from a broadcast group.'),
|
|
140
|
-
deps.muted(' /term group send <group> <text> Broadcast raw bytes to the group.'),
|
|
141
|
-
deps.muted(' /term channel list Show IPC channels + stats.'),
|
|
142
|
-
deps.muted(' /term channel pub <channel> <text> Publish on a channel.'),
|
|
143
|
-
deps.muted(' /term channel tail <id> <channel> [--replay] Subscribe <id> — msgs stream into PTY stdin.'),
|
|
144
|
-
deps.muted(' /term channel snapshot <channel> [N=10] Show last N buffered messages (read-only).'),
|
|
145
|
-
deps.muted(' /term pipe <id> <channel> [--line] Publish <id> stdout onto <channel> (raw|line).'),
|
|
146
|
-
deps.muted(' /term unpipe <pipeId> Detach a pipe started with /term pipe.'),
|
|
147
|
-
deps.muted(' /term pipes List every active stdout → channel pipe.'),
|
|
148
|
-
deps.muted(' /term readonly <id> [on|off] Toggle read-only (matrix writeTo drops writes).'),
|
|
149
|
-
deps.muted(' /term recharacter <id> <shell|claude|codex|custom:<name>> Swap character + reexec.'),
|
|
150
|
-
deps.muted(' /term vw-sync <windowId> <text> Broadcast to every terminal-slot in a VW.'),
|
|
151
|
-
deps.muted(' /term vw-bar [windowId] [on|off] Toggle per-VW sync input bar (default: current).'),
|
|
136
|
+
deps.muted(' /term resume <id> Re-spawn a saved terminal session.'),
|
|
137
|
+
deps.muted(' /term help experimental Show experimental commands.'),
|
|
152
138
|
deps.muted(''),
|
|
153
139
|
deps.muted('Shell-runner handles (RunShell) — separate registry:'),
|
|
154
140
|
deps.muted(' /shell list|kill|attach See /shell help.'),
|
|
155
141
|
],
|
|
142
|
+
experimentalHelpLines: () => [
|
|
143
|
+
'',
|
|
144
|
+
deps.accent('\u276f /term help experimental'),
|
|
145
|
+
deps.muted('Experimental commands — behavior may change:'),
|
|
146
|
+
deps.muted(' /term matrix Show matrix-wide view.'),
|
|
147
|
+
deps.muted(' /term move <id> bg|modal|preview Move terminal between placements.'),
|
|
148
|
+
deps.muted(' /term group list|join|leave|send Coordinate terminal groups.'),
|
|
149
|
+
deps.muted(' /term channel list|pub|tail|snapshot Manage terminal channels.'),
|
|
150
|
+
deps.muted(' /term pipe|unpipe|pipes Pipe terminal output to channels.'),
|
|
151
|
+
deps.muted(' /term readonly <id> [on|off] Toggle read-only.'),
|
|
152
|
+
deps.muted(' /term recharacter <id> <character> Change terminal character.'),
|
|
153
|
+
],
|
|
156
154
|
terminalSessionsEmptyLine: () => deps.muted(' No terminal sessions.'),
|
|
157
155
|
terminalSessionLine: (entry) => {
|
|
158
156
|
const brand = entry.agentBrand ? ` [${entry.agentBrand}]` : '';
|
|
@@ -209,6 +209,8 @@ function buildDashboardTurnPreambleUnmeasured(
|
|
|
209
209
|
gitSnapshotStaleMs: DASHBOARD_GIT_SNAPSHOT_STALE_MS,
|
|
210
210
|
}));
|
|
211
211
|
const turnProfile = ctx.turnProfile;
|
|
212
|
+
// Keep the synchronous preamble on the already-resolved surface. Shared
|
|
213
|
+
// research-intent routing and Bloom evidence guidance are added by core-turn.
|
|
212
214
|
const researchTurn = turnProfile?.surface.id === 'research/agent';
|
|
213
215
|
const surfaceSystemMsgs = turnProfile
|
|
214
216
|
? timed(builderMs, 'surface', () => buildSessionRuntimeTurnSystemMessages(turnProfile, ctx.userText))
|
package/src/domains/knowledge.ts
CHANGED
|
@@ -52,7 +52,7 @@ export interface KnowledgeDoc {
|
|
|
52
52
|
// 의미검색으로 회상(domain='elanous'). [[self-awareness]].
|
|
53
53
|
// memory = M3 consolidation(2026-07-08): 흐린 에피소드 다수를 의미 umbrella 1건으로
|
|
54
54
|
// 압축·영속(에피소드→의미·수면 공고화). 원본은 consolidated 마킹.
|
|
55
|
-
kind: 'signal' | 'dig' | 'alpha' | 'xreport' | 'morning' | 'outbound' | 'docs' | 'memory' | 'taste';
|
|
55
|
+
kind: 'signal' | 'dig' | 'alpha' | 'xreport' | 'morning' | 'outbound' | 'docs' | 'memory' | 'taste' | 'reference';
|
|
56
56
|
sector_tags: string | null;
|
|
57
57
|
text: string;
|
|
58
58
|
source_ref: string | null;
|
package/src/esc-abort-gate.ts
CHANGED
|
@@ -33,7 +33,7 @@ import type { ModalBounds, ModalSurface } from './display/modal-stack.js';
|
|
|
33
33
|
import type { KeyEvent } from './display/types.js';
|
|
34
34
|
import type { ThemeTokens } from './theme/tokens.js';
|
|
35
35
|
import { debug } from './debug/log.js';
|
|
36
|
-
import { abortTurnOnly } from './turn-abort-scope.js';
|
|
36
|
+
import { abortAndKillChildren, abortTurnOnly } from './turn-abort-scope.js';
|
|
37
37
|
import { SELF_IMPLEMENT_TOOL_NAMES } from './boot/daemon-tools/self-implement-names.js';
|
|
38
38
|
|
|
39
39
|
export const DASHBOARD_CLARIFICATION_REQUEST = Symbol.for('elanous.dashboard.clarification-request');
|
|
@@ -57,6 +57,10 @@ export interface EscAbortGateDeps {
|
|
|
57
57
|
getWaitingTargetNames?: () => readonly string[];
|
|
58
58
|
/** Only an identified foreground harness run may bypass the sub-agent confirmation. */
|
|
59
59
|
shouldAbortImmediately?: () => boolean;
|
|
60
|
+
/** Seat mode can have no operator to answer a confirmation: Esc stops this turn and its children without opening a modal. */
|
|
61
|
+
forceStopWithoutModal?: () => boolean;
|
|
62
|
+
/** Non-modal replacement for the approval surface in unattended TUI mode. Timeout/cancel resolves false. */
|
|
63
|
+
confirmStopInline?: () => Promise<boolean>;
|
|
60
64
|
/** Called before abortTurnOnly so the UI can paint a visible pending state immediately. */
|
|
61
65
|
onAbortPending?: (event: { running: number; repeat: number; targets: readonly string[] }) => void;
|
|
62
66
|
/** Called when another Escape arrives after the first abort request. */
|
|
@@ -218,7 +222,9 @@ export function createEscAbortGate(deps: EscAbortGateDeps): EscAbortGate {
|
|
|
218
222
|
let current: ApprovalModalHandle | null = null;
|
|
219
223
|
let currentDispose: (() => void) | null = null;
|
|
220
224
|
let abortPending = false;
|
|
225
|
+
let inlineConfirmationPending = false;
|
|
221
226
|
let escapePresses = 0;
|
|
227
|
+
let disposed = false;
|
|
222
228
|
|
|
223
229
|
const redraw = (): void => {
|
|
224
230
|
try { deps.requestRedraw?.(); } catch { /* ignore */ }
|
|
@@ -282,6 +288,31 @@ export function createEscAbortGate(deps: EscAbortGateDeps): EscAbortGate {
|
|
|
282
288
|
return;
|
|
283
289
|
}
|
|
284
290
|
const running = deps.getRunningCount();
|
|
291
|
+
if (running > 0 && deps.forceStopWithoutModal?.()) {
|
|
292
|
+
if (inlineConfirmationPending) return;
|
|
293
|
+
if (!deps.confirmStopInline) {
|
|
294
|
+
debug.log('esc.abort', 'unattended-force-stop', { running, repeat: Math.max(0, escapePresses - 1) });
|
|
295
|
+
abortAndKillChildren(deps.abortCtrl);
|
|
296
|
+
redraw();
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
inlineConfirmationPending = true;
|
|
300
|
+
debug.log('esc.abort', 'unattended-inline-confirmation', { running, repeat: Math.max(0, escapePresses - 1) });
|
|
301
|
+
void deps.confirmStopInline().then((confirmed) => {
|
|
302
|
+
if (confirmed && !disposed && !deps.abortCtrl.signal.aborted) {
|
|
303
|
+
debug.log('esc.abort', 'unattended-inline-confirmed', { running });
|
|
304
|
+
abortAndKillChildren(deps.abortCtrl);
|
|
305
|
+
} else {
|
|
306
|
+
debug.log('esc.abort', 'unattended-inline-cancelled', { running, reason: 'declined-or-timeout' });
|
|
307
|
+
resetAbortRequestState();
|
|
308
|
+
}
|
|
309
|
+
}).catch((error) => {
|
|
310
|
+
debug.log('esc.abort', 'unattended-inline-failed', { reason: error instanceof Error ? error.message : String(error) }, { level: 'warn' });
|
|
311
|
+
resetAbortRequestState();
|
|
312
|
+
}).finally(() => { inlineConfirmationPending = false; redraw(); });
|
|
313
|
+
redraw();
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
285
316
|
if (running <= 0 || deps.shouldAbortImmediately?.()) {
|
|
286
317
|
debug.log('esc.abort', 'abort-immediately', { running, repeat: Math.max(0, escapePresses - 1) });
|
|
287
318
|
abortPendingTurn(running);
|
|
@@ -347,6 +378,7 @@ export function createEscAbortGate(deps: EscAbortGateDeps): EscAbortGate {
|
|
|
347
378
|
resetAbortRequestState();
|
|
348
379
|
},
|
|
349
380
|
dispose(): void {
|
|
381
|
+
disposed = true;
|
|
350
382
|
if (current) current.dispose(false);
|
|
351
383
|
resetAbortRequestState();
|
|
352
384
|
close();
|