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
|
@@ -50,6 +50,8 @@ export type GoalAuthorClarificationAnswerSource = 'injected' | 'recommended' | '
|
|
|
50
50
|
export interface GoalAuthorClarificationProvenance {
|
|
51
51
|
source: GoalAuthorClarificationAnswerSource;
|
|
52
52
|
evidence?: string[];
|
|
53
|
+
assumption?: string;
|
|
54
|
+
assumptionSource?: 'resolver' | 'policy-default' | 'recommended';
|
|
53
55
|
}
|
|
54
56
|
|
|
55
57
|
export interface GoalAuthorClarificationResponse {
|
|
@@ -81,7 +83,7 @@ export interface GoalAuthorSelfResolutionContext {
|
|
|
81
83
|
}
|
|
82
84
|
|
|
83
85
|
export type GoalAuthorSelfResolution =
|
|
84
|
-
| { answer: string; evidence: readonly string[]; declined?: undefined }
|
|
86
|
+
| { answer: string; evidence: readonly string[]; assumption?: string; declined?: undefined }
|
|
85
87
|
| { answer?: undefined; evidence?: undefined; declined?: boolean };
|
|
86
88
|
|
|
87
89
|
export interface GoalAuthorClarificationResolutionDeps {
|
|
@@ -125,8 +127,8 @@ function truncateAsk(ask: string): string {
|
|
|
125
127
|
function selfResolutionPrompt(context: GoalAuthorSelfResolutionContext): string {
|
|
126
128
|
return [
|
|
127
129
|
'Answer this goal-author clarification using only the supplied repository evidence.',
|
|
128
|
-
'Do not delegate to an implementation agent. If the evidence cannot justify one
|
|
129
|
-
'Return JSON only: {"answer":"..."} or {"answer":null}.',
|
|
130
|
+
'Do not delegate to an implementation agent. Choose the best supported candidate and state the assumption that makes it the best fit. If the evidence cannot justify one answer, return {"answer":null}.',
|
|
131
|
+
'Return JSON only: {"answer":"...","assumption":"..."} or {"answer":null}.',
|
|
130
132
|
...(context.ask?.trim() ? [`Request being authored:\n${truncateAsk(context.ask.trim())}`] : []),
|
|
131
133
|
`Question: ${context.question}`,
|
|
132
134
|
`Options: ${context.options.join(' | ') || '(free input)'}`,
|
|
@@ -195,22 +197,31 @@ export async function defaultGoalAuthorSelfResolve(
|
|
|
195
197
|
return context.questionId === 'preservation_contract' ? { declined: true } : {};
|
|
196
198
|
}
|
|
197
199
|
const controller = new AbortController();
|
|
200
|
+
const prompt = selfResolutionPrompt(context);
|
|
201
|
+
let rejectTimeout!: (reason: Error) => void;
|
|
202
|
+
const timeoutPromise = new Promise<never>((_, reject) => { rejectTimeout = reject; });
|
|
198
203
|
const timeout = setTimeout(
|
|
199
|
-
() =>
|
|
204
|
+
() => {
|
|
205
|
+
const error = new Error(SELF_RESOLUTION_TIMEOUT_MESSAGE);
|
|
206
|
+
controller.abort(error);
|
|
207
|
+
rejectTimeout(error);
|
|
208
|
+
},
|
|
200
209
|
selfResolutionTimeoutMs(deps.timeoutMs),
|
|
201
210
|
);
|
|
202
|
-
const prompt = selfResolutionPrompt(context);
|
|
203
211
|
const onUsage = (usage: LLMUsage) => { usages.push(usage); };
|
|
204
212
|
try {
|
|
205
|
-
const result = await
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
213
|
+
const result = await Promise.race([
|
|
214
|
+
(deps.stream ?? (async (input, signal, reportUsage) => {
|
|
215
|
+
const { streamLLM } = await import('../llm.js');
|
|
216
|
+
return streamLLM([{ role: 'user', content: input }], () => {}, {
|
|
217
|
+
model: process.env.ELANOUS_GOAL_AUTHOR_MODEL || tierModel('better'),
|
|
218
|
+
reasoningEffort: 'high',
|
|
219
|
+
signal,
|
|
220
|
+
onUsage: reportUsage,
|
|
221
|
+
});
|
|
222
|
+
}))(prompt, controller.signal, onUsage),
|
|
223
|
+
timeoutPromise,
|
|
224
|
+
]);
|
|
214
225
|
let parsed: unknown;
|
|
215
226
|
try {
|
|
216
227
|
parsed = JSON.parse(result);
|
|
@@ -222,11 +233,15 @@ export async function defaultGoalAuthorSelfResolve(
|
|
|
222
233
|
? (parsed as { answer?: unknown }).answer
|
|
223
234
|
: undefined;
|
|
224
235
|
if (typeof answer === 'string') {
|
|
236
|
+
const assumptionValue = (parsed as { assumption?: unknown }).assumption;
|
|
237
|
+
const assumption = typeof assumptionValue === 'string' && assumptionValue.trim()
|
|
238
|
+
? assumptionValue.trim()
|
|
239
|
+
: undefined;
|
|
225
240
|
observeSelfResolve('self-resolve-answered', context, startedAt, {
|
|
226
241
|
answerLength: answer.length,
|
|
227
242
|
usage: deriveUsage(usages),
|
|
228
243
|
});
|
|
229
|
-
return { answer, evidence: context.evidence };
|
|
244
|
+
return { answer, evidence: context.evidence, ...(assumption ? { assumption } : {}) };
|
|
230
245
|
}
|
|
231
246
|
observeSelfResolve('self-resolve-unanswered', context, startedAt, {
|
|
232
247
|
reason: answer === null ? 'declined' : 'shape-mismatch',
|
|
@@ -281,7 +296,11 @@ function responseFor(clarification: IntakeClarification, observe = false, selfRe
|
|
|
281
296
|
...deferredResponse(clarification),
|
|
282
297
|
answer: automaticAnswer,
|
|
283
298
|
status: 'ANSWERED',
|
|
284
|
-
provenance: {
|
|
299
|
+
provenance: {
|
|
300
|
+
source: 'recommended',
|
|
301
|
+
assumption: '저작기가 표시한 단일 recommended 후보를 우선 선택하는 정책을 적용한다',
|
|
302
|
+
assumptionSource: 'recommended',
|
|
303
|
+
},
|
|
285
304
|
};
|
|
286
305
|
}
|
|
287
306
|
|
|
@@ -331,11 +350,17 @@ export async function resolveGoalAuthorClarification(
|
|
|
331
350
|
if (!answer || /[\r\n]/.test(answer) || evidence.length === 0) {
|
|
332
351
|
return deterministic;
|
|
333
352
|
}
|
|
353
|
+
const resolverAssumption = 'assumption' in resolution ? resolution.assumption?.trim() : undefined;
|
|
354
|
+
const assumption = resolverAssumption
|
|
355
|
+
|| `정책 가정(resolver가 별도 가정을 생략함): 제공 근거와 요청에 가장 맞는 후보를 선택한다 (${answer})`;
|
|
334
356
|
const response: GoalAuthorClarificationResponse = {
|
|
335
357
|
...deferredResponse(clarification),
|
|
336
358
|
answer,
|
|
337
359
|
status: 'ANSWERED',
|
|
338
|
-
provenance: {
|
|
360
|
+
provenance: {
|
|
361
|
+
source: 'self-authored', evidence, assumption,
|
|
362
|
+
assumptionSource: resolverAssumption ? 'resolver' : 'policy-default',
|
|
363
|
+
},
|
|
339
364
|
};
|
|
340
365
|
observeGoalAuthor('goal-author.clarify', 'self-answered', {
|
|
341
366
|
questionId: clarification.questionId,
|
|
@@ -407,31 +432,58 @@ function parseRecord(raw: string): SerializedGoalAuthorClarification | null {
|
|
|
407
432
|
&& Array.isArray(provenance.evidence)
|
|
408
433
|
&& provenance.evidence.length > 0
|
|
409
434
|
&& provenance.evidence.every((item) => typeof item === 'string' && item.length > 0);
|
|
435
|
+
const selfAuthoredAssumption = typeof provenance?.assumption === 'string' && provenance.assumption.trim()
|
|
436
|
+
? provenance.assumption.trim()
|
|
437
|
+
: undefined;
|
|
410
438
|
const response = isSelfAuthored
|
|
411
439
|
? {
|
|
412
440
|
...deferredResponse(value.clarification),
|
|
413
441
|
answer: value.response.answer!,
|
|
414
442
|
status: 'ANSWERED' as const,
|
|
415
|
-
provenance: {
|
|
443
|
+
provenance: {
|
|
444
|
+
source: 'self-authored' as const,
|
|
445
|
+
evidence: provenance.evidence,
|
|
446
|
+
...(selfAuthoredAssumption ? { assumption: selfAuthoredAssumption } : {}),
|
|
447
|
+
...(provenance.assumptionSource === 'resolver' || provenance.assumptionSource === 'policy-default'
|
|
448
|
+
? { assumptionSource: provenance.assumptionSource }
|
|
449
|
+
: {}),
|
|
450
|
+
},
|
|
416
451
|
}
|
|
417
452
|
: expected;
|
|
418
453
|
const responseProvenance = response.provenance;
|
|
419
454
|
const serializedProvenance = value.response.provenance;
|
|
420
455
|
const expectedProvenanceKeys = responseProvenance === undefined
|
|
421
456
|
? []
|
|
422
|
-
:
|
|
457
|
+
: [
|
|
458
|
+
...(responseProvenance.assumption === undefined ? [] : ['assumption']),
|
|
459
|
+
...(responseProvenance.assumptionSource === undefined ? [] : ['assumptionSource']),
|
|
460
|
+
...(responseProvenance.evidence === undefined ? [] : ['evidence']),
|
|
461
|
+
'source',
|
|
462
|
+
];
|
|
423
463
|
const serializedProvenanceKeys = serializedProvenance === undefined
|
|
424
464
|
? []
|
|
425
465
|
: Object.keys(serializedProvenance).sort();
|
|
466
|
+
// Older serialized goal rows predate assumption provenance. Keep accepting those rows while
|
|
467
|
+
// still validating every field they actually contain; parsing upgrades them to the current
|
|
468
|
+
// deterministic response shape above.
|
|
469
|
+
const legacyAssumptionKeys = responseProvenance?.source === 'recommended'
|
|
470
|
+
? ['assumption', 'assumptionSource']
|
|
471
|
+
: [];
|
|
472
|
+
const provenanceKeysMatch = (serializedProvenanceKeys.length === expectedProvenanceKeys.length
|
|
473
|
+
&& expectedProvenanceKeys.every((key) => serializedProvenanceKeys.includes(key)))
|
|
474
|
+
|| (legacyAssumptionKeys.length > 0
|
|
475
|
+
&& expectedProvenanceKeys.filter((key) => !legacyAssumptionKeys.includes(key)).every((key) => serializedProvenanceKeys.includes(key))
|
|
476
|
+
&& serializedProvenanceKeys.every((key) => expectedProvenanceKeys.includes(key)));
|
|
426
477
|
const provenanceMatches = (serializedProvenance === undefined) === (responseProvenance === undefined)
|
|
427
|
-
&&
|
|
428
|
-
&& serializedProvenanceKeys.every((key, index) => key === expectedProvenanceKeys[index])
|
|
478
|
+
&& provenanceKeysMatch
|
|
429
479
|
&& serializedProvenance?.source === responseProvenance?.source
|
|
430
480
|
&& (responseProvenance?.evidence === undefined
|
|
431
481
|
? serializedProvenance?.evidence === undefined
|
|
432
482
|
: Array.isArray(serializedProvenance?.evidence)
|
|
433
483
|
&& serializedProvenance.evidence.length === responseProvenance.evidence.length
|
|
434
|
-
&& serializedProvenance.evidence.every((item, index) => item === responseProvenance.evidence?.[index]))
|
|
484
|
+
&& serializedProvenance.evidence.every((item, index) => item === responseProvenance.evidence?.[index]))
|
|
485
|
+
&& (serializedProvenance?.assumption === undefined || serializedProvenance.assumption === responseProvenance?.assumption)
|
|
486
|
+
&& (serializedProvenance?.assumptionSource === undefined || serializedProvenance.assumptionSource === responseProvenance?.assumptionSource);
|
|
435
487
|
if (value.response.questionId !== response.questionId
|
|
436
488
|
|| value.response.answer !== response.answer
|
|
437
489
|
|| value.response.status !== response.status
|
|
@@ -469,6 +521,21 @@ export interface GoalDocumentClarification {
|
|
|
469
521
|
provenanceLines?: number[];
|
|
470
522
|
}
|
|
471
523
|
|
|
524
|
+
export type GoalClarificationDecisionCategory = 'money' | 'security' | 'irreversible';
|
|
525
|
+
|
|
526
|
+
/** Only questions that could authorize money, security, or irreversible external effects need a decision card. */
|
|
527
|
+
export function goalClarificationDecisionCategory(
|
|
528
|
+
clarification: Pick<GoalDocumentClarification, 'header' | 'question' | 'options'>,
|
|
529
|
+
): GoalClarificationDecisionCategory | undefined {
|
|
530
|
+
const text = [clarification.header, clarification.question, ...clarification.options.flatMap((option) => [option.label, option.description])]
|
|
531
|
+
.join(' ')
|
|
532
|
+
.toLocaleLowerCase();
|
|
533
|
+
if (/\b(payment|purchase|spend|budget|credit|charge|price|cost|paid)\b|결제|구매|지출|예산|크레딧|과금|가격|비용/.test(text)) return 'money';
|
|
534
|
+
if (/\b(security|credential|token|secret|password|authorization|authentication|permission|access control)\b|보안|자격 증명|토큰|비밀키|비밀번호|인가|인증|권한/.test(text)) return 'security';
|
|
535
|
+
if (/\b(publish|publication|deploy|send|delete|release|irreversible|external side effect|production)\b|발행|게시|배포|전송|삭제|릴리스|되돌릴 수 없|외부 효과|운영 환경/.test(text)) return 'irreversible';
|
|
536
|
+
return undefined;
|
|
537
|
+
}
|
|
538
|
+
|
|
472
539
|
interface GoalAuthorClarificationSeed {
|
|
473
540
|
ask: string;
|
|
474
541
|
parent: GoalAuthorParent;
|
|
@@ -576,6 +643,17 @@ export function parseGoalDocumentClarifications(document: string): GoalDocumentC
|
|
|
576
643
|
readingOptions = false;
|
|
577
644
|
continue;
|
|
578
645
|
}
|
|
646
|
+
const provenanceAssumption = /^ - provenance\.assumption: (.*)$/.exec(line);
|
|
647
|
+
if (provenanceAssumption) {
|
|
648
|
+
provenanceLines.push(index);
|
|
649
|
+
readingOptions = false;
|
|
650
|
+
continue;
|
|
651
|
+
}
|
|
652
|
+
if (/^ - provenance\.assumption-source: (resolver|policy-default|recommended)$/.test(line)) {
|
|
653
|
+
provenanceLines.push(index);
|
|
654
|
+
readingOptions = false;
|
|
655
|
+
continue;
|
|
656
|
+
}
|
|
579
657
|
if (/^ - evidence: /.test(line)) {
|
|
580
658
|
provenanceLines.push(index);
|
|
581
659
|
readingOptions = false;
|
|
@@ -747,6 +825,7 @@ export async function selfAnswerGoalDocumentClarifications(
|
|
|
747
825
|
evidence?: readonly string[];
|
|
748
826
|
resolver?: GoalClarificationSelfResolver;
|
|
749
827
|
runId?: string;
|
|
828
|
+
skipQuestionIds?: ReadonlySet<string>;
|
|
750
829
|
},
|
|
751
830
|
): Promise<{ document: string; asked: number; answered: number; unanswered: number; newlyAnswered: number }> {
|
|
752
831
|
const clarifications = parseGoalDocumentClarifications(document);
|
|
@@ -761,7 +840,7 @@ export async function selfAnswerGoalDocumentClarifications(
|
|
|
761
840
|
const evidence = options.evidence ?? document.split(/\r?\n/)
|
|
762
841
|
.filter((line) => /^(?:\s*- (?:\[code:|\[document:|TRACED PATHS|evidence:|Evidence:)|\s*-?\s*`?(?:src|test|scripts)\/[^\s`]+:\d+)/i.test(line))
|
|
763
842
|
.slice(0, 40);
|
|
764
|
-
for (const item of pending) {
|
|
843
|
+
for (const item of pending.filter((entry) => !options.skipQuestionIds?.has(entry.questionId))) {
|
|
765
844
|
if (parseGoalDocumentClarifications(updated).filter((entry) => entry.questionId === item.questionId).length !== 1) continue;
|
|
766
845
|
let response: Awaited<ReturnType<typeof resolveGoalAuthorClarification>>;
|
|
767
846
|
let declined = false;
|
|
@@ -789,7 +868,9 @@ export async function selfAnswerGoalDocumentClarifications(
|
|
|
789
868
|
if (response.answer === null && item.questionId === 'preservation_contract'
|
|
790
869
|
&& declined) {
|
|
791
870
|
const fallback = preservationDefault(options.ask ?? document);
|
|
792
|
-
response = { ...response, answer: fallback.answer, status: 'ANSWERED', provenance: {
|
|
871
|
+
response = { ...response, answer: fallback.answer, status: 'ANSWERED', provenance: {
|
|
872
|
+
source: 'default', assumption: '기존 공개 동작 보존을 기본 가정으로 적용한다', assumptionSource: 'policy-default',
|
|
873
|
+
} };
|
|
793
874
|
defaultExportCount = fallback.exportCount;
|
|
794
875
|
}
|
|
795
876
|
if (response.answer === null || (response.provenance?.source !== 'self-authored' && response.provenance?.source !== 'default')
|
|
@@ -806,6 +887,8 @@ export async function selfAnswerGoalDocumentClarifications(
|
|
|
806
887
|
lines[answerLine] = ` - answer: ${response.answer}`;
|
|
807
888
|
lines.splice(answerLine + 1, 0,
|
|
808
889
|
` - provenance.source: ${answerSource}`,
|
|
890
|
+
...(response.provenance.assumption ? [` - provenance.assumption: ${response.provenance.assumption.replace(/[\r\n]/g, ' ')}`] : []),
|
|
891
|
+
...(response.provenance.assumptionSource ? [` - provenance.assumption-source: ${response.provenance.assumptionSource}`] : []),
|
|
809
892
|
...(response.provenance.evidence ?? []).map((entry) => ` - evidence: ${entry.replace(/[\r\n]/g, ' ')}`));
|
|
810
893
|
updateWhatToBuildRenderAnswers(lines, item.questionId, response.answer);
|
|
811
894
|
if (hasWhatToBuildUnansweredRenderAnswer(lines, item.questionId)) continue;
|
|
@@ -836,6 +919,77 @@ export async function selfAnswerGoalDocumentClarifications(
|
|
|
836
919
|
return { document: updated, asked, answered, unanswered, newlyAnswered };
|
|
837
920
|
}
|
|
838
921
|
|
|
922
|
+
/** SelfImplement boundary: resolve pending questions itself and record a bounded policy assumption if that fails.
|
|
923
|
+
* Interactive callers must not turn an authoring clarification into a human popup. */
|
|
924
|
+
export async function selfAnswerOrAssumeGoalDocumentClarifications(
|
|
925
|
+
document: string,
|
|
926
|
+
options: Parameters<typeof selfAnswerGoalDocumentClarifications>[1],
|
|
927
|
+
): Promise<Awaited<ReturnType<typeof selfAnswerGoalDocumentClarifications>> & {
|
|
928
|
+
assumed: number;
|
|
929
|
+
decisionRequired: Array<{ questionId: string; header: string; question: string; category: GoalClarificationDecisionCategory }>;
|
|
930
|
+
}> {
|
|
931
|
+
const safetyQuestions = parseGoalDocumentClarifications(document).filter((entry) => !entry.answered)
|
|
932
|
+
.map((entry) => ({ entry, category: goalClarificationDecisionCategory(entry) }))
|
|
933
|
+
.filter((item): item is { entry: GoalDocumentClarification; category: GoalClarificationDecisionCategory } => item.category !== undefined);
|
|
934
|
+
const attempted = await selfAnswerGoalDocumentClarifications(document, {
|
|
935
|
+
...options,
|
|
936
|
+
skipQuestionIds: new Set(safetyQuestions.map((item) => item.entry.questionId)),
|
|
937
|
+
});
|
|
938
|
+
let updated = attempted.document;
|
|
939
|
+
let assumed = 0;
|
|
940
|
+
const decisionRequired: Array<{ questionId: string; header: string; question: string; category: GoalClarificationDecisionCategory }> =
|
|
941
|
+
safetyQuestions.map(({ entry, category }) => ({ questionId: entry.questionId, header: entry.header, question: entry.question, category }));
|
|
942
|
+
for (const item of parseGoalDocumentClarifications(updated).filter((entry) => !entry.answered)) {
|
|
943
|
+
const category = goalClarificationDecisionCategory(item);
|
|
944
|
+
if (category) continue;
|
|
945
|
+
const offered = item.options.filter((option) => option.label.trim() && !/[\r\n]/.test(option.label));
|
|
946
|
+
const useOfferedOption = !item.includeOther && offered.length > 0;
|
|
947
|
+
const answer = useOfferedOption
|
|
948
|
+
? offered[0]!.label.trim()
|
|
949
|
+
: '근거가 부족하므로 요청에 명시된 범위만 진행한다고 가정한다';
|
|
950
|
+
const assumption = useOfferedOption
|
|
951
|
+
? '자가 해소가 답을 내지 못해 자유 답변 없이 제시된 첫 후보를 정책 가정으로 선택했다'
|
|
952
|
+
: '자가 해소가 답을 내지 못해 추가 범위를 만들지 않고 요청에 명시된 범위만 진행한다고 가정했다';
|
|
953
|
+
try {
|
|
954
|
+
const current = findUnansweredGoalDocumentClarification(updated, item.questionId);
|
|
955
|
+
const lines = updated.split(/\r?\n/);
|
|
956
|
+
const provenanceLines = current.provenanceLines ?? [];
|
|
957
|
+
for (const line of [...provenanceLines].sort((left, right) => right - left)) lines.splice(line, 1);
|
|
958
|
+
const answerLine = current.answerLine - provenanceLines.filter((line) => line < current.answerLine).length;
|
|
959
|
+
lines[answerLine] = ` - answer: ${answer}`;
|
|
960
|
+
lines.splice(answerLine + 1, 0,
|
|
961
|
+
' - provenance.source: default',
|
|
962
|
+
` - provenance.assumption: ${assumption}`,
|
|
963
|
+
' - provenance.assumption-source: policy-default',
|
|
964
|
+
);
|
|
965
|
+
updateWhatToBuildRenderAnswers(lines, item.questionId, answer);
|
|
966
|
+
if (hasWhatToBuildUnansweredRenderAnswer(lines, item.questionId)) continue;
|
|
967
|
+
const candidate = lines.join(updated.includes('\r\n') ? '\r\n' : '\n');
|
|
968
|
+
if (!parseGoalDocumentClarifications(candidate).some((entry) => entry.questionId === item.questionId
|
|
969
|
+
&& entry.answered && entry.answer === answer && entry.provenanceSource === 'default')) continue;
|
|
970
|
+
updated = candidate;
|
|
971
|
+
assumed += 1;
|
|
972
|
+
observeGoalAuthor('goal-author.clarify', 'self-answer-assumed', {
|
|
973
|
+
runId: options.runId ?? process.env.ELANOUS_RUN_ID,
|
|
974
|
+
questionId: item.questionId,
|
|
975
|
+
assumptionSource: 'policy-default',
|
|
976
|
+
selectedOfferedOption: useOfferedOption,
|
|
977
|
+
});
|
|
978
|
+
} catch {
|
|
979
|
+
// Keep the pending question visible to the caller as a no-launch reason; never dispatch it to a popup.
|
|
980
|
+
}
|
|
981
|
+
}
|
|
982
|
+
return {
|
|
983
|
+
...attempted,
|
|
984
|
+
document: updated,
|
|
985
|
+
answered: attempted.answered + assumed,
|
|
986
|
+
unanswered: Math.max(0, attempted.unanswered - assumed),
|
|
987
|
+
newlyAnswered: attempted.newlyAnswered + assumed,
|
|
988
|
+
assumed,
|
|
989
|
+
decisionRequired,
|
|
990
|
+
};
|
|
991
|
+
}
|
|
992
|
+
|
|
839
993
|
|
|
840
994
|
export type ClarificationIntakeMode = 'none' | 'deferred-noninteractive' | 'ask';
|
|
841
995
|
|
|
@@ -471,6 +471,7 @@ export function createGoalAuthorDecomposeSteps(
|
|
|
471
471
|
config: {
|
|
472
472
|
adversarialReview?: boolean;
|
|
473
473
|
adversarialReviewSource?: 'cli' | 'default' | 'unknown';
|
|
474
|
+
goalId?: string;
|
|
474
475
|
recentStepCounts?: readonly number[];
|
|
475
476
|
onSizedSlices?: (slices: SizedSlice[], redecomposed: number) => void;
|
|
476
477
|
repositoryRoot?: string;
|
|
@@ -589,38 +590,46 @@ export function createGoalAuthorDecomposeSteps(
|
|
|
589
590
|
return parsed ? { sizes: parsed, sizeSource: 'planner-estimate' as const }
|
|
590
591
|
: { sizes: deriveGoalSliceSizes(slices), sizeSource: 'derived' as const };
|
|
591
592
|
};
|
|
592
|
-
const observe = (event: 'slice-sized' | 'slice-oversize', sizeSource: 'planner-estimate' | 'derived', data: Record<string, unknown>) => {
|
|
593
|
+
const observe = (event: 'slice-sized' | 'slice-oversize' | 'resplit' | 'slice-oversize-unavoidable', sizeSource: 'planner-estimate' | 'derived', data: Record<string, unknown>) => {
|
|
593
594
|
try { debug.log('goal-author.decompose', event, { surface: 'goal-author', sizeSource, ...data,
|
|
594
595
|
...(options?.runId === undefined ? {} : { runId: options.runId }) }); } catch { /* observation is fail-soft */ }
|
|
595
596
|
};
|
|
596
597
|
let redecomposed = 0;
|
|
597
598
|
let measured = await measure(candidate);
|
|
598
599
|
let sizes = measured.sizes;
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
600
|
+
for (let retry = 0; ; retry++) {
|
|
601
|
+
if (sizes) observe('slice-sized', measured.sizeSource, { retry, slices: sizes });
|
|
602
|
+
const oversized = sizes?.flatMap((size, index) => size.tier === 'high' ? [index] : []) ?? [];
|
|
603
|
+
if (sizes && oversized.length === 0) break;
|
|
604
|
+
observe('slice-oversize', measured.sizeSource, { retry, indexes: oversized,
|
|
603
605
|
reasons: sizes ? oversized.map((index) => sizes![index]!.unavoidableReason) : [],
|
|
604
606
|
...(sizes ? {} : { error: 'size metadata missing or inconsistent' }) });
|
|
607
|
+
if (retry === 2) {
|
|
608
|
+
if (!sizes) throw new Error('goal-author slice sizing: size metadata missing after 2 resplits');
|
|
609
|
+
const unavoidableReason = 'auto';
|
|
610
|
+
for (const index of oversized) sizes[index] = { ...sizes[index]!,
|
|
611
|
+
unavoidableReason: sizes[index]!.unavoidableReason ?? unavoidableReason };
|
|
612
|
+
observe('slice-oversize-unavoidable', measured.sizeSource, {
|
|
613
|
+
goalId: options?.goalId ?? config.goalId ?? null,
|
|
614
|
+
resplitCount: redecomposed,
|
|
615
|
+
slices: oversized.map((index) => ({ index, ...sizes![index]! })),
|
|
616
|
+
});
|
|
617
|
+
break;
|
|
618
|
+
}
|
|
619
|
+
observe('resplit', measured.sizeSource, { retry: retry + 1, indexes: oversized,
|
|
620
|
+
...(sizes ? {} : { reason: 'size metadata missing or inconsistent' }) });
|
|
605
621
|
const retryAsk = [objective, '', 'The previous goal-author proposal had missing size metadata or oversized slices.',
|
|
606
622
|
`PREVIOUS_STEPS_JSON: ${JSON.stringify(candidate)}`,
|
|
607
623
|
`OVERSIZED_INDEXES_JSON: ${JSON.stringify(oversized)}`,
|
|
608
|
-
|
|
609
|
-
'If an oversized slice truly cannot split, leave it high and state a concrete unavoidable reason.'].join('\n');
|
|
624
|
+
`RESPLIT_ATTEMPT: ${retry + 1} of 2. Regenerate the full plan; preserve fitting slices and split every oversized slice into dependent low/medium slices. If any oversized slice remains after the second resplit, keep it as high tier; a concrete unavoidable reason is optional because the system marks it unavoidable=auto.`].join('\n');
|
|
610
625
|
const regenerated = await decompose(retryAsk);
|
|
611
626
|
if (!regenerated.length) throw new Error('goal-author slice sizing: regeneration produced no slices');
|
|
612
|
-
redecomposed
|
|
627
|
+
redecomposed++;
|
|
613
628
|
candidate = ensureDeviceFirstSteps(objective, regenerated, config.repositoryRoot).steps;
|
|
614
629
|
rationale = decompositionRationale;
|
|
615
630
|
measured = await measure(candidate);
|
|
616
631
|
sizes = measured.sizes;
|
|
617
|
-
if (!sizes) throw new Error('goal-author slice sizing: size metadata missing after
|
|
618
|
-
observe('slice-sized', measured.sizeSource, { retry: 1, slices: sizes });
|
|
619
|
-
const remaining = sizes.flatMap((size, index) => size.tier === 'high' ? [index] : []);
|
|
620
|
-
if (remaining.length) observe('slice-oversize', measured.sizeSource, { retry: 1, indexes: remaining,
|
|
621
|
-
reasons: remaining.map((index) => sizes![index]!.unavoidableReason) });
|
|
622
|
-
if (remaining.some((index) => !sizes![index]!.unavoidableReason))
|
|
623
|
-
throw new Error('goal-author slice sizing: high slice lacks unavoidable reason after one retry');
|
|
632
|
+
if (!sizes && retry === 1) throw new Error('goal-author slice sizing: size metadata missing after 2 resplits');
|
|
624
633
|
}
|
|
625
634
|
config.onSizedSlices?.(restoreSlicePaths(publicSizedSlices(candidate, sizes), objective), redecomposed);
|
|
626
635
|
return finalize(candidate, rationale);
|
|
@@ -39,7 +39,7 @@ export function resolveGoalAuthorGrade(flag?: GoalAuthorGrade, configured?: unkn
|
|
|
39
39
|
import type { ObserveOnlySource } from './observe-only.js';
|
|
40
40
|
import type { Question } from '../ask-user-question/types.js';
|
|
41
41
|
import { requestTestScenario as defaultRequestTestScenario, type TestScenarioRequestInput, type TestScenarioRequestResult } from './test-scenario-request.js';
|
|
42
|
-
import { resolveGoalAuthorClarification, parseGoalDocumentClarifications, serializeGoalAuthorParent, type GoalAuthorClarificationResponse, type GoalAuthorParent, type GoalAuthorSelfResolution } from './goal-author-clarification.js';
|
|
42
|
+
import { defaultGoalAuthorSelfResolve, resolveGoalAuthorClarification, parseGoalDocumentClarifications, serializeGoalAuthorParent, type GoalAuthorClarificationResponse, type GoalAuthorParent, type GoalAuthorSelfResolution } from './goal-author-clarification.js';
|
|
43
43
|
import { acquireLockSync } from '../storage/file-lock.js';
|
|
44
44
|
import { createRepositoryReferencedFileReader, type ReferencedFileReadResult } from './goal-file-reader.js';
|
|
45
45
|
import { extractGoalDocSections, type GoalDocSourceLine } from './goal-doc/section.js';
|
|
@@ -58,6 +58,9 @@ import { parseReleaseNoteSection } from '../release-loop/release-note.js';
|
|
|
58
58
|
import { declaredNewFilePaths } from './goal-new-paths.js';
|
|
59
59
|
import { classifyGoalCommandExecution, type GoalCommandExecutionResult } from './goal-command-execution.js';
|
|
60
60
|
import { identityLines, repositoryIdentifiers } from './goal-author-identity.js';
|
|
61
|
+
import { selectRelevantAuthoringLessons } from './knowhow-pack.js';
|
|
62
|
+
import { elanousStateRoot } from '../autopilot/state-paths.js';
|
|
63
|
+
export { selectRelevantAuthoringLessons } from './knowhow-pack.js';
|
|
61
64
|
export { formatSubmittedAt } from './goal-author-identity.js';
|
|
62
65
|
import { hasUnmetRequirementOutsidePreservationClause } from './goal-author-preservation-obligation.js';
|
|
63
66
|
export { hasUnmetRequirementOutsidePreservationClause } from './goal-author-preservation-obligation.js';
|
|
@@ -114,13 +117,17 @@ export interface GoalAuthorDeps {
|
|
|
114
117
|
/** Optional externally decomposed plan steps rendered verbatim into the authored goal; the author never generates them. */
|
|
115
118
|
steps?: readonly string[];
|
|
116
119
|
/** Optional injected decomposition seam; omitted means authoring never invokes an LLM or decomposition. */
|
|
117
|
-
decomposeSteps?: (objective: string, opts?: { context?: string; runId?: string }) => Promise<readonly string[]>;
|
|
120
|
+
decomposeSteps?: (objective: string, opts?: { context?: string; runId?: string; goalId?: string }) => Promise<readonly string[]>;
|
|
118
121
|
/** Optional launch preflight result supplied by the caller; authoring never reads the ledger or logs itself. */
|
|
119
122
|
launchPreflight?: LaunchPreflightResult;
|
|
120
123
|
/** Optional in-process notification for each authored-goal phase transition. */
|
|
121
124
|
onProgress?: (phase: GoalAuthorPhase, event: 'start' | 'end') => void;
|
|
122
125
|
/** AUTHOR-TIMEBOX: budget for the `ground` phase. Omitted means `GOAL_AUTHOR_GROUND_TIMEBOX_MS`. */
|
|
123
126
|
groundTimeboxMs?: number;
|
|
127
|
+
/** Stable IDs of bounded lessons carried as goal-head provenance. */
|
|
128
|
+
authoringLessonIds?: readonly string[];
|
|
129
|
+
/** Bounded prior lessons rendered as explicitly non-normative authoring context. */
|
|
130
|
+
authoringLessons?: string;
|
|
124
131
|
}
|
|
125
132
|
|
|
126
133
|
export type GoalAuthorGroundingPath = 'groundMissionInCodebase';
|
|
@@ -501,7 +508,7 @@ export function linesOutsideFencedCode(document: string): GoalDocSourceLine[] {
|
|
|
501
508
|
return outside;
|
|
502
509
|
}
|
|
503
510
|
|
|
504
|
-
/** TA 완료 경계는
|
|
511
|
+
/** TA 완료 경계는 정식 절 안의 세 독립 행이다. 명시 행은 보존하고 누락 행은 태스크 넘김이 범위 기반 초안으로 보충한다. */
|
|
505
512
|
export const GOAL_DONE_BOUNDARY_LABELS = ['완료 경계 코드', '완료 경계 실물', '완료 경계 증거 명령'] as const;
|
|
506
513
|
export type GoalDoneBoundaryLabel = typeof GOAL_DONE_BOUNDARY_LABELS[number];
|
|
507
514
|
// This is a declaration check, not a judgement of whether the proposed work
|
|
@@ -603,6 +610,39 @@ export function explicitGoalDoneBoundaryLines(ask: string): string[] {
|
|
|
603
610
|
return GOAL_DONE_BOUNDARY_LABELS.flatMap((label) => values[label] ? [`- ${label}: ${values[label]}`] : []);
|
|
604
611
|
}
|
|
605
612
|
|
|
613
|
+
/**
|
|
614
|
+
* A live hand must not silently drop a cell just because its prose omitted the three
|
|
615
|
+
* completion lines. Preserve explicit values and draft only the missing lines from
|
|
616
|
+
* declared target paths; the child can refine this visible draft against the ask.
|
|
617
|
+
*/
|
|
618
|
+
export function draftMissingGoalDoneBoundary(document: string, targetPaths: readonly string[]): {
|
|
619
|
+
document: string;
|
|
620
|
+
added: GoalDoneBoundaryLabel[];
|
|
621
|
+
} {
|
|
622
|
+
const { values, missing } = inspectGoalDoneBoundary(document);
|
|
623
|
+
if (missing.length === 0) return { document, added: [] };
|
|
624
|
+
|
|
625
|
+
const scope = targetPaths.length > 0 ? targetPaths.join(' · ') : '요청 문면에 적힌 범위';
|
|
626
|
+
const explicitTests = targetPaths.filter((path) => /\.(?:test|spec)\.[cm]?[jt]sx?$/i.test(path));
|
|
627
|
+
const inferredTests = targetPaths.flatMap((path) => {
|
|
628
|
+
const match = /^(.*)\.([cm]?[jt]sx?)$/i.exec(path);
|
|
629
|
+
return match && !/\.(?:test|spec)$/i.test(match[1]!) ? [`${match[1]}.test.${match[2]}`] : [];
|
|
630
|
+
});
|
|
631
|
+
const evidencePaths = explicitTests.length > 0 ? explicitTests : inferredTests;
|
|
632
|
+
const quotePath = (path: string): string => /^[A-Za-z0-9_./:=@%+-]+$/.test(path) ? path : `'${path.replaceAll("'", `'\\''`)}'`;
|
|
633
|
+
const evidenceCommand = evidencePaths.length > 0
|
|
634
|
+
? `bun test ${evidencePaths.map(quotePath).join(' ')}`
|
|
635
|
+
: 'bun test';
|
|
636
|
+
const drafts: Record<GoalDoneBoundaryLabel, string> = {
|
|
637
|
+
'완료 경계 코드': `자동 초안: ${scope}에 문면의 요청 동작을 구현하고 대상 밖의 기본 동작은 보존한다.`,
|
|
638
|
+
'완료 경계 실물': `자동 초안: 격리 시험에서 ${scope}의 생산 경로를 지나 요청 동작과 기존 동작을 함께 관측한다.`,
|
|
639
|
+
'완료 경계 증거 명령': evidenceCommand,
|
|
640
|
+
};
|
|
641
|
+
const lines = missing.map((label) => `- ${label}: ${drafts[label]}`);
|
|
642
|
+
const separator = document.length === 0 || document.endsWith('\n') ? '' : '\n';
|
|
643
|
+
return { document: `${document}${separator}${lines.join('\n')}`, added: missing };
|
|
644
|
+
}
|
|
645
|
+
|
|
606
646
|
// CommonMark 펜스는 **한 종류의 문자**가 3개 이상 이어진 런이다 — `[`~]{3,}` 는 혼합(백틱+틸드)까지
|
|
607
647
|
// 펜스로 인정해 진짜 진양성을 펜스 안으로 숨긴다(리뷰 must-fix). 열기/닫기 모두 이 하나를 쓴다.
|
|
608
648
|
const FENCE_RUN = /^ {0,3}(`{3,}|~{3,})(.*)$/;
|
|
@@ -2908,6 +2948,21 @@ const INJECTION_LADDER: Record<InjectionLadderLevel, string> = {
|
|
|
2908
2948
|
const VERIFICATION_MENU_DOC = join('docs', 'goal-context', '03-verification-menu.md');
|
|
2909
2949
|
const MOCK_CATALOG_DOC = join('docs', 'goal-context', '04-mock-scenarios.md');
|
|
2910
2950
|
|
|
2951
|
+
/**
|
|
2952
|
+
* 새 무대의 식별자 — 카탈로그 `MS-xx` 가 없는 골도 «어느 무대인지»를 원장에 남긴다.
|
|
2953
|
+
*
|
|
2954
|
+
* ⛔ 0.2.38 실측(`GOAL-TDD-PLAN-REACHES-CHILD`): 카탈로그가 맞지 않는 골(표본 대부분)에서
|
|
2955
|
+
* `stage.id` 가 `null` 이었고, 그래서 `verification-plan` 이벤트의 `stageId` 칸이 비어
|
|
2956
|
+
* 원장만 보고는 ***「무대가 없었다」와 「무대를 안 적었다」를 가를 수 없었다.***
|
|
2957
|
+
* ⭐ 값은 «실제로 고른 갈래»에서 나온다 — 화면 무대(L2) · 기록된 실제 입력 fixture(L1) · 문서 문구 대조(L1).
|
|
2958
|
+
* ⇒ 같은 골을 두 번 저작하면 같은 id 가 나오고, 다른 갈래는 다른 id 를 갖는다.
|
|
2959
|
+
*/
|
|
2960
|
+
const NEW_STAGE_IDS = {
|
|
2961
|
+
'ux-sim': 'new-stage:ux-sim',
|
|
2962
|
+
fixture: 'new-stage:fixture',
|
|
2963
|
+
'doc-phrase': 'new-stage:doc-phrase',
|
|
2964
|
+
} as const;
|
|
2965
|
+
|
|
2911
2966
|
/** 저장소 안의 검증 메뉴·무대 카탈로그를 읽는다. 없으면 null(저작은 «새 무대»로 내려간다). */
|
|
2912
2967
|
export function readVerificationMenuDocs(root: string | undefined): { menu: string | null; catalog: string | null } {
|
|
2913
2968
|
const read = (relativePath: string): string | null => {
|
|
@@ -3064,7 +3119,7 @@ export function authorVerificationPlan(input: VerificationPlanInput): Verificati
|
|
|
3064
3119
|
: `bun test ${testFile}`;
|
|
3065
3120
|
const base = (input.targetPaths.find((path) => !/\.test\./u.test(path)) ?? testFile).split('/').pop()!.replace(/\.[^.]+$/u, '');
|
|
3066
3121
|
const name = screen ? `${base} ux-sim 고정 입력` : `${base} 기록된 실제 입력 fixture`;
|
|
3067
|
-
stage = { source: 'new-stage', id:
|
|
3122
|
+
stage = { source: 'new-stage', id: screen ? NEW_STAGE_IDS['ux-sim'] : NEW_STAGE_IDS.fixture, level };
|
|
3068
3123
|
stageLine = `- ② 무대: 새 무대: ${name} — \`${command}\` · ${level} (${INJECTION_LADDER[level]})${input.catalog ? ' · 카탈로그(04-mock-scenarios.md)에 맞는 MS 없음' : ' · 카탈로그 문서 없음'}${operationalNote}`;
|
|
3069
3124
|
}
|
|
3070
3125
|
const docOnly = input.targetPaths.length > 0 && input.targetPaths.every((path) => /\.md$/iu.test(path));
|
|
@@ -3073,7 +3128,7 @@ export function authorVerificationPlan(input: VerificationPlanInput): Verificati
|
|
|
3073
3128
|
const docs = input.targetPaths.join(' ');
|
|
3074
3129
|
const phrase = (/`([^`]+)`/u.exec(behaviour)?.[1] ?? behaviour.replace(/[`'"]/gu, '').slice(0, 30)).trim();
|
|
3075
3130
|
const check = `rg -n -F '${phrase.replace(/'/gu, '’')}' ${docs}`;
|
|
3076
|
-
stage = { source: 'new-stage', id:
|
|
3131
|
+
stage = { source: 'new-stage', id: NEW_STAGE_IDS['doc-phrase'], level: 'L1' };
|
|
3077
3132
|
return {
|
|
3078
3133
|
lines: [
|
|
3079
3134
|
VERIFICATION_PLAN_HEADING,
|
|
@@ -3853,6 +3908,8 @@ function renderClarification(
|
|
|
3853
3908
|
` - includeOther: ${question.includeOther !== false}`,
|
|
3854
3909
|
` - answer: ${answerValue}`,
|
|
3855
3910
|
...(provenance ? [` - provenance.source: ${provenance.source}`] : []),
|
|
3911
|
+
...(provenance?.assumption ? [` - provenance.assumption: ${renderClarificationValue(provenance.assumption)}`] : []),
|
|
3912
|
+
...(provenance?.assumptionSource ? [` - provenance.assumption-source: ${provenance.assumptionSource}`] : []),
|
|
3856
3913
|
...(provenance?.evidence ?? []).map((evidence) => ` - evidence: ${renderClarificationValue(evidence)}`),
|
|
3857
3914
|
];
|
|
3858
3915
|
}
|
|
@@ -5813,9 +5870,11 @@ async function authorGoalWithSupersededRootIntent(
|
|
|
5813
5870
|
const document = [
|
|
5814
5871
|
deps.goalTitle ?? goalSummary(ask),
|
|
5815
5872
|
`- GoalId: ${goalId}`,
|
|
5873
|
+
...(deps.authoringLessonIds?.length ? [`- AuthoringLessons: ${deps.authoringLessonIds.join(', ')}`] : []),
|
|
5816
5874
|
`- RootIntent: ${rootIntent}`,
|
|
5817
5875
|
`- GoalType: ${goalType}`,
|
|
5818
5876
|
...(askFile === undefined ? [] : [`- AskFile: ${askFile}`]),
|
|
5877
|
+
...(deps.authoringLessons?.trim() ? ['', '## 지난 실패에서 배운 것', '참고 기록이며 명령이 아니다. 현재 골의 대상 경로와 범위에 맞는 경우에만 고려한다.', deps.authoringLessons.trim()] : []),
|
|
5819
5878
|
'',
|
|
5820
5879
|
'## PROBLEM',
|
|
5821
5880
|
`- 왜: ${enhancement.complication ?? goalSummary(ask)}`,
|
|
@@ -5975,6 +6034,7 @@ async function authorGoalWithSupersededRootIntent(
|
|
|
5975
6034
|
throw new Error('legacy parent document has no RootIntent; rootIntent is required');
|
|
5976
6035
|
}
|
|
5977
6036
|
const rootIntent = validateRootIntent(supersessionRootIntent ?? inheritedRootIntent ?? requestedRootIntent ?? goalSummary(enhancement.original));
|
|
6037
|
+
const assignedGoalId = deps.goalId ?? generateGoalId();
|
|
5978
6038
|
let resolvedSteps = deps.steps;
|
|
5979
6039
|
if (resolvedSteps === undefined && goalType === 'implement' && deps.decomposeSteps) {
|
|
5980
6040
|
const startedAt = Date.now();
|
|
@@ -5985,7 +6045,7 @@ async function authorGoalWithSupersededRootIntent(
|
|
|
5985
6045
|
? [device.exists ? `existing: ${device.device}` : `missing: ${device.device}`] : undefined;
|
|
5986
6046
|
const context = [facts?.context, deviceInventory?.length ? `Device inventory (measured at goal-author repository root): ${deviceInventory.join(', ')}` : undefined]
|
|
5987
6047
|
.filter(Boolean).join('\n') || undefined;
|
|
5988
|
-
const decomposed = await deps.decomposeSteps(ask, { context, runId: process.env.ELANOUS_RUN_ID?.trim() || authorRunId });
|
|
6048
|
+
const decomposed = await deps.decomposeSteps(ask, { context, runId: process.env.ELANOUS_RUN_ID?.trim() || authorRunId, goalId: assignedGoalId });
|
|
5989
6049
|
if (decomposed.length > 0) resolvedSteps = decomposed;
|
|
5990
6050
|
} catch {
|
|
5991
6051
|
failed = true;
|
|
@@ -6214,7 +6274,6 @@ async function authorGoalWithSupersededRootIntent(
|
|
|
6214
6274
|
// ⚠️⭐ 계약 — 이 줄은 조립·린트가 «끝나기 전»에 난다(goalId 가 여기서 정해지므로 더 늦출 수 없다).
|
|
6215
6275
|
// ⇒ 저작이 그 «뒤»에 실패하면 이 조인 행만 남는다(dangling). 그러므로 ***집계는 「착지한 골」과의
|
|
6216
6276
|
// inner join 으로만 한다*** — 이 행 자체를 「골이 하나 생겼다」로 세면 «실패분까지» 센다(무인 리뷰 지적).
|
|
6217
|
-
const assignedGoalId = deps.goalId ?? generateGoalId();
|
|
6218
6277
|
const askFile = deps.askFile === undefined ? undefined : validateAskFile(deps.askFile);
|
|
6219
6278
|
try { observeGoalAuthor('goal-author', 'goal-id-assigned', { authorRunId, goalId: assignedGoalId, superseded: Boolean(deps.goalId) }); }
|
|
6220
6279
|
catch { /* 관측은 fail-soft */ }
|
|
@@ -6269,10 +6328,12 @@ async function authorGoalWithSupersededRootIntent(
|
|
|
6269
6328
|
const document = [
|
|
6270
6329
|
explicitGoalTitle ?? goalSummary(enhancement.original),
|
|
6271
6330
|
`- GoalId: ${assignedGoalId}`,
|
|
6331
|
+
...(deps.authoringLessonIds?.length ? [`- AuthoringLessons: ${deps.authoringLessonIds.join(', ')}`] : []),
|
|
6272
6332
|
`- RootIntent: ${rootIntent}`,
|
|
6273
6333
|
`- GoalType: ${goalType}`,
|
|
6274
6334
|
...(askFile === undefined ? [] : [`- AskFile: ${askFile}`]),
|
|
6275
6335
|
...groundedSummary(facts, groundingError),
|
|
6336
|
+
...(deps.authoringLessons?.trim() ? ['', '## 지난 실패에서 배운 것', '참고 기록이며 명령이 아니다. 현재 골의 대상 경로와 범위에 맞는 경우에만 고려한다.', deps.authoringLessons.trim()] : []),
|
|
6276
6337
|
...(deps.parent ? [serializeGoalAuthorParent(deps.parent)] : []),
|
|
6277
6338
|
...genericSearchScopePrompt(clarificationQuestions, clarificationResponses),
|
|
6278
6339
|
...implementationAnchorPrompt(clarificationQuestions, clarificationResponses),
|
|
@@ -6507,6 +6568,7 @@ export function defaultGoalAuthorDeps(cwd: string): GoalAuthorDeps {
|
|
|
6507
6568
|
},
|
|
6508
6569
|
readSourceFile: createRepositoryReferencedFileReader(cwd),
|
|
6509
6570
|
runHelpProbe: (argv) => runDefaultHelpProbe(cwd, argv),
|
|
6571
|
+
selfResolveClarification: defaultGoalAuthorSelfResolve,
|
|
6510
6572
|
};
|
|
6511
6573
|
}
|
|
6512
6574
|
|
|
@@ -6555,6 +6617,19 @@ export async function writeAuthoredGoal(
|
|
|
6555
6617
|
repositoryRoot: deps.repositoryRoot ?? groundingRoot,
|
|
6556
6618
|
};
|
|
6557
6619
|
const mandatoryGoalContextEvidence = goalContextEvidence(cwd);
|
|
6620
|
+
const authoringLessons = selectRelevantAuthoringLessons(cwd, ask, elanousStateRoot());
|
|
6621
|
+
observeGoalAuthor('goal-author', 'authoring-lessons', {
|
|
6622
|
+
status: authoringLessons.status,
|
|
6623
|
+
invalidRows: authoringLessons.invalidRows,
|
|
6624
|
+
selected: authoringLessons.ids,
|
|
6625
|
+
bytes: Buffer.byteLength(authoringLessons.prompt, 'utf8'),
|
|
6626
|
+
placement: authoringLessons.ids.length ? 'enhance-prompt-goal-section-and-head' : 'omitted',
|
|
6627
|
+
});
|
|
6628
|
+
if (authoringLessons.prompt) {
|
|
6629
|
+
resolvedDeps.enhanceOpts = { ...resolvedDeps.enhanceOpts, authoringLessons: authoringLessons.prompt };
|
|
6630
|
+
resolvedDeps.authoringLessons = authoringLessons.prompt;
|
|
6631
|
+
}
|
|
6632
|
+
if (authoringLessons.ids.length) resolvedDeps.authoringLessonIds = authoringLessons.ids;
|
|
6558
6633
|
const directoryMeasurement = askDirectoryMeasurementLine(observeAskDirectoryCounts(ask, groundingRoot));
|
|
6559
6634
|
resolvedDeps.enhanceOpts = directoryMeasurement ? { ...resolvedDeps.enhanceOpts, directoryMeasurement } : resolvedDeps.enhanceOpts;
|
|
6560
6635
|
observeGoalAuthor('goal-author', 'ask-directory-measurement-forwarded', { count: directoryMeasurement ? 1 : 0 });
|
|
@@ -10,6 +10,28 @@ export interface GoalDocSourceLine {
|
|
|
10
10
|
readonly start: number;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
/** Parse the command on a goal's authored decision-signal Condition line. */
|
|
14
|
+
function authoredSignalCommandFromCondition(condition: string | undefined): string | undefined {
|
|
15
|
+
if (!condition?.trim()) return undefined;
|
|
16
|
+
return condition.trim()
|
|
17
|
+
.replace(/^`([^`]+)`(?=\s|를|$)/, '$1')
|
|
18
|
+
.replace(/\s*를\s*실행한다[.。]?$/, '')
|
|
19
|
+
.replace(/[.。]$/, '')
|
|
20
|
+
.trim();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function authoredSignalCommandFromBody(value: string): string | undefined {
|
|
24
|
+
return authoredSignalCommandFromCondition(value.match(/^\s*- Condition:\s*(.+?)\s*$/m)?.[1]);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function authoredSignalCommandFromGoal(goal: string): string | undefined {
|
|
28
|
+
const lines = goal.split(/\r?\n/);
|
|
29
|
+
const start = lines.findIndex((line) => line.trim() === '## 판정 신호');
|
|
30
|
+
if (start < 0) return undefined;
|
|
31
|
+
const next = lines.findIndex((line, index) => index > start && /^##\s/.test(line));
|
|
32
|
+
return authoredSignalCommandFromBody(lines.slice(start + 1, next < 0 ? lines.length : next).join('\n'));
|
|
33
|
+
}
|
|
34
|
+
|
|
13
35
|
type GoalDocSectionOptions =
|
|
14
36
|
| {
|
|
15
37
|
readonly search: 'exact-trimmed-line';
|