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
|
@@ -12,6 +12,7 @@ dry_run_await_approval: true
|
|
|
12
12
|
terminal_nodes: [done, failed]
|
|
13
13
|
nodes:
|
|
14
14
|
- { node_id: version-release, kind: git, recipe: 'cmd:version-release', max_visits: 1 }
|
|
15
|
+
- { node_id: traffic-cut-start, kind: gate, recipe: 'cmd:traffic-cut-start', max_visits: 1 }
|
|
15
16
|
- { node_id: cutoff, kind: judge, recipe: 'cmd:cutoff', max_visits: 1 }
|
|
16
17
|
- { node_id: checklist-gate, kind: gate, recipe: 'cmd:checklist-gate', max_visits: 1 }
|
|
17
18
|
# cmd:docs dispatches by graph node ID: bounded prefetch before gate, TUI join after upgrade, docs write after both.
|
|
@@ -39,6 +40,7 @@ nodes:
|
|
|
39
40
|
- { node_id: approve-publish, kind: hitl, recipe: 'approval:publish', max_visits: 1 }
|
|
40
41
|
- { node_id: publish, kind: git, recipe: 'cmd:publish-command', max_visits: 1, notify: { on: [ok, fail] } }
|
|
41
42
|
- { node_id: npm-publish, kind: git, recipe: 'cmd:npm-publish', max_visits: 1 }
|
|
43
|
+
- { node_id: traffic-npm-published, kind: gate, recipe: 'cmd:traffic-npm-published', max_visits: 1 }
|
|
42
44
|
- { node_id: docs-land, kind: git, recipe: 'cmd:docs-land', max_visits: 1 }
|
|
43
45
|
- { node_id: verify, kind: gate, recipe: 'cmd:verify', max_visits: 1, notify: { on: [ok, fail] } }
|
|
44
46
|
- { node_id: traffic-verify-complete, kind: gate, recipe: 'cmd:traffic-verify-complete', max_visits: 1 }
|
|
@@ -47,35 +49,40 @@ nodes:
|
|
|
47
49
|
- { node_id: ops-upgrade, kind: agent, recipe: 'cmd:ops-upgrade', max_visits: 1 }
|
|
48
50
|
- { node_id: version-dev-bump, kind: git, recipe: 'cmd:version-dev-bump', max_visits: 1 }
|
|
49
51
|
- { node_id: version-dev-bump-after-failure, kind: git, recipe: 'cmd:version-dev-bump', max_visits: 1 }
|
|
52
|
+
- { node_id: traffic-failed-restore, kind: gate, recipe: 'cmd:traffic-failed-restore', max_visits: 1 }
|
|
50
53
|
- { node_id: done, kind: gate, max_visits: 1 }
|
|
51
54
|
- { node_id: failed, kind: gate, max_visits: 1 }
|
|
52
55
|
edges:
|
|
53
|
-
- { from: version-release, on: outcome, map: { ok:
|
|
54
|
-
|
|
55
|
-
- { from:
|
|
56
|
-
- { from:
|
|
56
|
+
- { from: version-release, on: outcome, map: { ok: traffic-cut-start, fail: failed, error: failed } }
|
|
57
|
+
# Advisory traffic writes report failure to OP; release steps still proceed on fail/error.
|
|
58
|
+
- { from: traffic-cut-start, on: outcome, map: { ok: cutoff, fail: cutoff, error: cutoff } }
|
|
59
|
+
- { from: cutoff, on: outcome, map: { ok: checklist-gate, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
60
|
+
- { from: checklist-gate, on: outcome, map: { ok: export-check, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
61
|
+
- { from: export-check, on: outcome, map: { ok: prefetch, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
57
62
|
# Prefetch never gates: even a crashed prefetch node is a cache miss — the late nodes take their original paths.
|
|
58
63
|
- { from: prefetch, on: outcome, map: { ok: gate, fail: gate, error: gate } }
|
|
59
64
|
- { from: gate, on: outcome, map: { ok: traffic-gate-passed, fail: gate-triage, error: gate-triage } }
|
|
60
65
|
# Warning-only: the transition result stays truthful; every outcome continues to the next release node.
|
|
61
66
|
- { from: traffic-gate-passed, on: outcome, map: { ok: mac-smoke, fail: mac-smoke, error: mac-smoke } }
|
|
62
|
-
- { from: gate-triage, on: outcome, map: { ok: failed, fail: failed, error: failed } }
|
|
67
|
+
- { from: gate-triage, on: outcome, map: { ok: traffic-failed-restore, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
63
68
|
# Warning-only: a macOS failure or unmeasured run never blocks publishing — auto-approve shows it as a warning row.
|
|
64
69
|
- { from: mac-smoke, on: outcome, map: { ok: pwa, fail: pwa, error: pwa } }
|
|
65
|
-
- { from: pwa, on: outcome, map: { ok: prepare, fail: failed, error: failed } }
|
|
66
|
-
- { from: prepare, on: outcome, map: { ok: upgrade, fail: failed, error: failed } }
|
|
67
|
-
- { from: upgrade, on: outcome, map: { ok: tui, fail: failed, error: failed } }
|
|
68
|
-
- { from: tui, on: outcome, map: { ok: docs, fail: failed, error: failed } }
|
|
69
|
-
- { from: docs, on: outcome, map: { ok: known-issues, fail: failed, error: failed } }
|
|
70
|
-
- { from: known-issues, on: outcome, map: { ok: notes-check, fail: failed, error: failed } }
|
|
70
|
+
- { from: pwa, on: outcome, map: { ok: prepare, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
71
|
+
- { from: prepare, on: outcome, map: { ok: upgrade, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
72
|
+
- { from: upgrade, on: outcome, map: { ok: tui, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
73
|
+
- { from: tui, on: outcome, map: { ok: docs, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
74
|
+
- { from: docs, on: outcome, map: { ok: known-issues, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
75
|
+
- { from: known-issues, on: outcome, map: { ok: notes-check, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
71
76
|
# RELEASE-GRAPH-SELFHEAL: fail/error re-enter notes-check through one repair; publish still requires a passing recheck.
|
|
72
77
|
- { from: notes-check, on: outcome, map: { ok: auto-approve, fail: notes-repair, error: notes-repair } }
|
|
73
|
-
- { from: notes-repair, on: outcome, map: { ok: notes-recheck, fail: failed, error: failed } }
|
|
74
|
-
- { from: notes-recheck, on: outcome, map: { ok: auto-approve, fail: failed, error: failed } }
|
|
78
|
+
- { from: notes-repair, on: outcome, map: { ok: notes-recheck, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
79
|
+
- { from: notes-recheck, on: outcome, map: { ok: auto-approve, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
75
80
|
- { from: auto-approve, on: outcome, map: { ok: publish, fail: approve-publish, error: approve-publish } }
|
|
76
|
-
- { from: approve-publish, on: outcome, map: { ok: publish, fail: failed } }
|
|
77
|
-
- { from: publish, on: outcome, map: { ok: npm-publish, fail: failed, error: failed } }
|
|
78
|
-
- { from: npm-publish, on: outcome, map: { ok:
|
|
81
|
+
- { from: approve-publish, on: outcome, map: { ok: publish, fail: traffic-failed-restore } }
|
|
82
|
+
- { from: publish, on: outcome, map: { ok: npm-publish, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
83
|
+
- { from: npm-publish, on: outcome, map: { ok: traffic-npm-published, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
84
|
+
# Publication already happened; a traffic write failure must not skip docs-land.
|
|
85
|
+
- { from: traffic-npm-published, on: outcome, map: { ok: docs-land, fail: docs-land, error: docs-land } }
|
|
79
86
|
# RELEASE-DEVBUMP-ALWAYS: after a successful publish every fail/error routes through version-dev-bump —
|
|
80
87
|
# a published release always hands main to its own next -dev, then still finishes failed.
|
|
81
88
|
- { from: docs-land, on: outcome, map: { ok: verify, fail: version-dev-bump-after-failure, error: version-dev-bump-after-failure } }
|
|
@@ -85,5 +92,6 @@ edges:
|
|
|
85
92
|
- { from: vault-note, on: outcome, map: { ok: release-story, fail: release-story, error: release-story } }
|
|
86
93
|
- { from: release-story, on: outcome, map: { ok: ops-upgrade, fail: ops-upgrade, error: ops-upgrade } }
|
|
87
94
|
- { from: ops-upgrade, on: outcome, map: { ok: version-dev-bump, fail: version-dev-bump, error: version-dev-bump } }
|
|
88
|
-
- { from: version-dev-bump, on: outcome, map: { ok: done, fail: failed, error: failed } }
|
|
89
|
-
- { from: version-dev-bump-after-failure, on: outcome, map: { ok: failed, fail: failed, error: failed } }
|
|
95
|
+
- { from: version-dev-bump, on: outcome, map: { ok: done, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
96
|
+
- { from: version-dev-bump-after-failure, on: outcome, map: { ok: traffic-failed-restore, fail: traffic-failed-restore, error: traffic-failed-restore } }
|
|
97
|
+
- { from: traffic-failed-restore, on: outcome, map: { ok: failed, fail: failed, error: failed } }
|
|
@@ -6,6 +6,8 @@ graph_id: explainer-line
|
|
|
6
6
|
version: 1
|
|
7
7
|
entry_node: script
|
|
8
8
|
terminal_nodes: [delivered, needs-human, blocked, unobserved]
|
|
9
|
+
# ⭐ 요청 동작 — 3분 영상: 이 라인이 만드는 영상 계획의 목표 총 길이는 180초다(지속 필드 target_seconds · 단위 초).
|
|
10
|
+
target_seconds: 180
|
|
9
11
|
nodes:
|
|
10
12
|
- node_id: script
|
|
11
13
|
kind: agent
|
|
@@ -55,4 +57,5 @@ edges:
|
|
|
55
57
|
# check/snapshot failures are layout faults → rebuild; a wrong-length render is a timing fault → rebuild too.
|
|
56
58
|
- { from: render, on: outcome, map: { ok: qc, check-fail: build, render-mismatch: build, unmeasurable: unobserved } }
|
|
57
59
|
# speech ≠ script → re-voice that line; loudness off → rebuild (mix lives in the composition); public release is a human call.
|
|
58
|
-
|
|
60
|
+
# narration past the target_seconds(180) plan is a timing fault → rebuild too.
|
|
61
|
+
- { from: qc, on: outcome, map: { pass: delivered, vo-mismatch: vo, loudness: build, too-long: build, public: needs-human, unmeasurable: unobserved } }
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "elanous",
|
|
3
3
|
"mcpName": "io.github.ElanvitalAI/elanous",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.40",
|
|
5
5
|
"description": "Self-healing coding harness where eyes, hands, and memory all turn on one sentence — it authors its own goals, implements them in isolated worktrees, and reviews its own work.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"author": "Elanvital AI",
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/** Drain the coordinator inbox once without running the orchestrator graph. */
|
|
3
|
+
import { runCoordinatorInboxOnce, type InboxOnceOptions } from '../src/loops/orchestrator/inbox-once.js';
|
|
4
|
+
|
|
5
|
+
export function runAskOpInboxCli(options: InboxOnceOptions = {}) {
|
|
6
|
+
return runCoordinatorInboxOnce(options);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
if (import.meta.main) {
|
|
10
|
+
try {
|
|
11
|
+
const result = await runAskOpInboxCli();
|
|
12
|
+
console.log(JSON.stringify(result));
|
|
13
|
+
} catch (error) {
|
|
14
|
+
console.error(`coordinator inbox: ${error instanceof Error ? error.message : String(error)}`);
|
|
15
|
+
process.exitCode = 1;
|
|
16
|
+
}
|
|
17
|
+
}
|
package/scripts/brand/check.ts
CHANGED
|
@@ -104,9 +104,8 @@ function isEnglishDocument(content: string, file: string, scope: Scope): boolean
|
|
|
104
104
|
return /\b[A-Za-z]{2,}(?:\s+[A-Za-z]{2,}){2,}\b/.test(body);
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
function
|
|
107
|
+
function findInContent(file: string, content: string, rules: Rule[], scope: Scope): Finding[] {
|
|
108
108
|
const findings: Finding[] = [];
|
|
109
|
-
const content = readFileSync(file, 'utf8');
|
|
110
109
|
const html = ['.html', '.htm'].includes(extname(file).toLowerCase());
|
|
111
110
|
const englishDocument = isEnglishDocument(content, file, scope);
|
|
112
111
|
const markdown = ['.md', '.mdx'].includes(extname(file).toLowerCase());
|
|
@@ -144,14 +143,24 @@ function findInFile(file: string, rules: Rule[], scope: Scope): Finding[] {
|
|
|
144
143
|
return findings;
|
|
145
144
|
}
|
|
146
145
|
|
|
146
|
+
function applicableRules(scope: Scope, rulesPath: string): Rule[] {
|
|
147
|
+
return loadRules(rulesPath).filter((rule) => scope === 'any' || rule.scope.includes('any') || rule.scope.includes(scope));
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** Scan in-memory text (for example a PR body) with the same rules as file scans. */
|
|
151
|
+
export function checkBrandText(text: string, label: string, scope: Scope = 'public-docs', rulesPath = defaultRules): Finding[] {
|
|
152
|
+
if (!existsSync(rulesPath)) throw new Error(BRAND_RULES_UNMEASURED);
|
|
153
|
+
return findInContent(label, text, applicableRules(scope, rulesPath), scope);
|
|
154
|
+
}
|
|
155
|
+
|
|
147
156
|
export function checkBrand(scope: Scope, paths: string[], rulesPath = defaultRules): { files: number; findings: Finding[]; rules: number; missing: boolean; message?: string } {
|
|
148
157
|
if (!existsSync(rulesPath)) {
|
|
149
158
|
debug.log('brand.check', 'run', { scope, files: 0, findings: 0, rules: 0, missing: true, message: BRAND_RULES_UNMEASURED });
|
|
150
159
|
return { files: 0, findings: [], rules: 0, missing: true, message: BRAND_RULES_UNMEASURED };
|
|
151
160
|
}
|
|
152
|
-
const applicable =
|
|
161
|
+
const applicable = applicableRules(scope, rulesPath);
|
|
153
162
|
const files = filesAt(paths);
|
|
154
|
-
const findings = files.flatMap((file) =>
|
|
163
|
+
const findings = files.flatMap((file) => findInContent(file, readFileSync(file, 'utf8'), applicable, scope));
|
|
155
164
|
debug.log('brand.check', 'run', { scope, files: files.length, findings: findings.length, rules: applicable.length });
|
|
156
165
|
return { files: files.length, findings, rules: applicable.length, missing: false };
|
|
157
166
|
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/** Conservative multi-entrypoint reachability inventory. This command NEVER deletes files. */
|
|
3
|
+
import { execFileSync } from 'node:child_process';
|
|
4
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
5
|
+
import { dirname, join, relative, resolve } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import ts from 'typescript';
|
|
8
|
+
|
|
9
|
+
export interface RootGroup { name: string; roots: string[]; configuration?: string }
|
|
10
|
+
export interface ModuleGap { importer: string; specifier: string; kind: 'unresolved' | 'dynamic' }
|
|
11
|
+
export interface GroupResult { name: string; roots: string[]; reachable: string[]; gaps: ModuleGap[] }
|
|
12
|
+
export interface ReachabilityReport {
|
|
13
|
+
schemaVersion: 1;
|
|
14
|
+
trackedFiles: number;
|
|
15
|
+
groups: GroupResult[];
|
|
16
|
+
unionReachable: string[];
|
|
17
|
+
unknownKeep: string[];
|
|
18
|
+
unresolved: ModuleGap[];
|
|
19
|
+
dynamic: ModuleGap[];
|
|
20
|
+
/** Never interpreted as safe-to-delete: configuration/runtime loaders cannot be exhaustively statically enumerated. */
|
|
21
|
+
unclassifiedKeep: string[];
|
|
22
|
+
overlaps: Record<string, string[]>;
|
|
23
|
+
deletions: 0;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const moduleFile = (p: string) => /\.[cm]?[jt]sx?$/.test(p);
|
|
27
|
+
const testFile = (p: string) => /(?:^|\/)(?:__tests__|__fixtures__|test|tests|fixtures)\//.test(p) || /\.(?:test|spec)\.[cm]?[jt]sx?$/.test(p);
|
|
28
|
+
const normalized = (p: string) => p.replaceAll('\\', '/');
|
|
29
|
+
const sorted = (items: Iterable<string>) => [...new Set(items)].sort();
|
|
30
|
+
|
|
31
|
+
export function trackedModules(root: string): string[] {
|
|
32
|
+
return execFileSync('git', ['ls-files', '-z', '--cached'], { cwd: root, maxBuffer: 16 * 1024 * 1024 })
|
|
33
|
+
.toString().split('\0').filter(moduleFile).filter(Boolean).map(normalized).sort();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function loadOptions(config: string | undefined, root: string): ts.CompilerOptions {
|
|
37
|
+
if (!config || !existsSync(join(root, config))) return { moduleResolution: ts.ModuleResolutionKind.Bundler, module: ts.ModuleKind.ESNext, allowJs: true };
|
|
38
|
+
const filename = join(root, config);
|
|
39
|
+
const source = ts.readConfigFile(filename, ts.sys.readFile);
|
|
40
|
+
if (source.error) throw new Error(ts.flattenDiagnosticMessageText(source.error.messageText, '\n'));
|
|
41
|
+
const parsed = ts.parseJsonConfigFileContent(source.config, ts.sys, dirname(filename), undefined, filename);
|
|
42
|
+
if (parsed.errors.length) throw new Error(parsed.errors.map(e => ts.flattenDiagnosticMessageText(e.messageText, '\n')).join('\n'));
|
|
43
|
+
return parsed.options;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function inventoryRoots(root: string, files: readonly string[]): RootGroup[] {
|
|
47
|
+
const groups: RootGroup[] = [
|
|
48
|
+
{ name: 'cli', roots: ['bin/elanous.mjs', 'src/index.ts', 'src/light-cli.ts'], configuration: 'tsconfig.json' },
|
|
49
|
+
{ name: 'scripts', roots: files.filter(p => p.startsWith('scripts/') && !testFile(p)), configuration: 'tsconfig.json' },
|
|
50
|
+
{ name: 'pwa', roots: files.filter(p => /^apps\/pwa\/src\/(app\/(?:.*\/)?(?:page|layout|route|loading|error|not-found|template|default)|middleware|instrumentation)\.[jt]sx?$/.test(p)), configuration: 'apps/pwa/tsconfig.json' },
|
|
51
|
+
{ name: 'desktop', roots: ['apps/desktop/src/main.ts'], configuration: 'apps/desktop/tsconfig.json' },
|
|
52
|
+
];
|
|
53
|
+
for (const app of sorted(files.filter(p => /^apps\/[^/]+\/src\/(?:main|index)\.[jt]sx?$/.test(p)))) {
|
|
54
|
+
if (app.startsWith('apps/desktop/') || app.startsWith('apps/pwa/')) continue;
|
|
55
|
+
groups.push({ name: `app:${app.split('/')[1]}`, roots: [app], configuration: `apps/${app.split('/')[1]}/tsconfig.json` });
|
|
56
|
+
}
|
|
57
|
+
// Manifest-declared paths are roots even when no TS import refers to them.
|
|
58
|
+
const manifests = execFileSync('git', ['ls-files', '-z', '--', 'plugins/*/plugin.json', 'plugins/*/manifest.json'], { cwd: root }).toString().split('\0').filter(Boolean);
|
|
59
|
+
const plugins: string[] = [];
|
|
60
|
+
for (const path of manifests) {
|
|
61
|
+
const manifest = JSON.parse(readFileSync(join(root, path), 'utf8')) as { entry?: string; main?: string };
|
|
62
|
+
const declared = manifest.entry ?? manifest.main;
|
|
63
|
+
if (!declared) continue;
|
|
64
|
+
const entry = normalized(join(dirname(path), declared));
|
|
65
|
+
// Missing manifest entries remain roots and become explicit unresolved/unknown gaps.
|
|
66
|
+
plugins.push(entry);
|
|
67
|
+
}
|
|
68
|
+
groups.push({ name: 'plugins', roots: sorted(plugins), configuration: 'tsconfig.json' });
|
|
69
|
+
// Runtime loaders and independently launched ACP boot are not necessarily in the CLI's import graph.
|
|
70
|
+
groups.push({ name: 'runtime', roots: ['src/boot/acp-server.ts', 'src/plugin-declarative/discovery.ts', 'src/self-implement/graph-catalog.ts', 'src/graph-runner/runner.ts'], configuration: 'tsconfig.json' });
|
|
71
|
+
return groups;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function analyzeReachability(root: string, files: readonly string[], groups: readonly RootGroup[]): ReachabilityReport {
|
|
75
|
+
const tracked = new Set(files.map(normalized));
|
|
76
|
+
const cache = new Map<string, ts.SourceFile>();
|
|
77
|
+
const results: GroupResult[] = [];
|
|
78
|
+
const unknown = new Set<string>();
|
|
79
|
+
for (const group of groups) {
|
|
80
|
+
const options = loadOptions(group.configuration, root);
|
|
81
|
+
const reachable = new Set<string>();
|
|
82
|
+
const gaps: ModuleGap[] = [];
|
|
83
|
+
const queue = [...group.roots];
|
|
84
|
+
const host = ts.createCompilerHost(options, true);
|
|
85
|
+
const moduleCache = ts.createModuleResolutionCache(root, s => s, options);
|
|
86
|
+
while (queue.length) {
|
|
87
|
+
const path = queue.pop()!;
|
|
88
|
+
if (reachable.has(path)) continue;
|
|
89
|
+
if (!tracked.has(path)) {
|
|
90
|
+
gaps.push({ importer: `(root:${group.name})`, specifier: path, kind: 'unresolved' });
|
|
91
|
+
unknown.add(path);
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
reachable.add(path);
|
|
95
|
+
const absolute = join(root, path);
|
|
96
|
+
let source = cache.get(path);
|
|
97
|
+
if (!source) {
|
|
98
|
+
source = ts.createSourceFile(absolute, readFileSync(absolute, 'utf8'), ts.ScriptTarget.Latest, true, path.endsWith('x') ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
|
|
99
|
+
cache.set(path, source);
|
|
100
|
+
}
|
|
101
|
+
const inspect = (specifier: ts.Expression) => {
|
|
102
|
+
if (!ts.isStringLiteralLike(specifier)) {
|
|
103
|
+
gaps.push({ importer: path, specifier: specifier.getText(source), kind: 'dynamic' }); unknown.add(path); return;
|
|
104
|
+
}
|
|
105
|
+
const text = specifier.text;
|
|
106
|
+
const resolved = ts.resolveModuleName(text, absolute, options, host, moduleCache).resolvedModule?.resolvedFileName;
|
|
107
|
+
const name = resolved ? normalized(relative(root, resolved)) : '';
|
|
108
|
+
if (name && tracked.has(name)) queue.push(name);
|
|
109
|
+
else if (text.startsWith('.') || text.startsWith('/') || text.startsWith('@/')) {
|
|
110
|
+
gaps.push({ importer: path, specifier: text, kind: 'unresolved' }); unknown.add(path);
|
|
111
|
+
}
|
|
112
|
+
// External packages are outside the tracked-source deletion domain.
|
|
113
|
+
};
|
|
114
|
+
const walk = (node: ts.Node) => {
|
|
115
|
+
if ((ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) && node.moduleSpecifier) inspect(node.moduleSpecifier);
|
|
116
|
+
else if (ts.isImportEqualsDeclaration(node) && ts.isExternalModuleReference(node.moduleReference) && node.moduleReference.expression) inspect(node.moduleReference.expression);
|
|
117
|
+
else if (ts.isCallExpression(node) && (node.expression.kind === ts.SyntaxKind.ImportKeyword || (ts.isIdentifier(node.expression) && node.expression.text === 'require'))) {
|
|
118
|
+
if (node.arguments[0]) inspect(node.arguments[0]);
|
|
119
|
+
else { gaps.push({ importer: path, specifier: '(missing argument)', kind: 'dynamic' }); unknown.add(path); }
|
|
120
|
+
}
|
|
121
|
+
ts.forEachChild(node, walk);
|
|
122
|
+
};
|
|
123
|
+
walk(source);
|
|
124
|
+
}
|
|
125
|
+
results.push({ name: group.name, roots: sorted(group.roots), reachable: sorted(reachable), gaps });
|
|
126
|
+
}
|
|
127
|
+
const uses = new Map<string, string[]>();
|
|
128
|
+
for (const group of results) for (const p of group.reachable) uses.set(p, [...(uses.get(p) ?? []), group.name]);
|
|
129
|
+
const gaps = results.flatMap(r => r.gaps);
|
|
130
|
+
const uniqueGaps = (kind: ModuleGap['kind']) => [...new Map(gaps.filter(g => g.kind === kind).map(g => [`${g.importer}\0${g.specifier}`, g])).values()]
|
|
131
|
+
.sort((a, b) => a.importer.localeCompare(b.importer) || a.specifier.localeCompare(b.specifier));
|
|
132
|
+
// The rest are *not* dead code: lazy/config/graph/plugin discovery and non-TS launchers are open-world inputs.
|
|
133
|
+
const unclassified = files.filter(p => !uses.has(p));
|
|
134
|
+
return {
|
|
135
|
+
schemaVersion: 1, trackedFiles: files.length, groups: results,
|
|
136
|
+
unionReachable: sorted(uses.keys()), unknownKeep: sorted([...unknown, ...unclassified]),
|
|
137
|
+
unresolved: uniqueGaps('unresolved'), dynamic: uniqueGaps('dynamic'),
|
|
138
|
+
unclassifiedKeep: sorted(unclassified),
|
|
139
|
+
overlaps: Object.fromEntries([...uses].filter(([, v]) => v.length > 1).sort(([a], [b]) => a.localeCompare(b))),
|
|
140
|
+
deletions: 0,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export function renderMarkdown(report: ReachabilityReport): string {
|
|
145
|
+
const lines = ['# Multi-entrypoint reachability inventory', '', 'This is an observation, not a safe-to-delete list. Deletions: 0.', '',
|
|
146
|
+
`Tracked source: ${report.trackedFiles}; union reachable: ${report.unionReachable.length}; unknown/keep: ${report.unknownKeep.length}; unresolved: ${report.unresolved.length}; dynamic: ${report.dynamic.length}.`, '',
|
|
147
|
+
'| Root family | roots | reachable | unknown edges |', '|---|---:|---:|---:|'];
|
|
148
|
+
for (const g of report.groups) lines.push(`| ${g.name} | ${g.roots.length} | ${g.reachable.length} | ${g.gaps.length} |`);
|
|
149
|
+
lines.push('', 'Unclassified source, dynamic imports, configuration/graph loaders and resolution gaps remain unknown/keep; no deletion candidate is asserted.', '');
|
|
150
|
+
return lines.join('\n');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
154
|
+
const root = resolve(process.argv[2] ?? '.');
|
|
155
|
+
const files = trackedModules(root);
|
|
156
|
+
const report = analyzeReachability(root, files, inventoryRoots(root, files));
|
|
157
|
+
const json = JSON.stringify(report, null, 2);
|
|
158
|
+
if (process.argv.includes('--json')) process.stdout.write(json + '\n');
|
|
159
|
+
else if (process.argv.includes('--md')) process.stdout.write(renderMarkdown(report));
|
|
160
|
+
else if (process.argv.includes('--output')) {
|
|
161
|
+
const index = process.argv.indexOf('--output');
|
|
162
|
+
const target = process.argv[index + 1];
|
|
163
|
+
if (!target || target.startsWith('--')) throw new Error('--output requires a path');
|
|
164
|
+
const output = resolve(target);
|
|
165
|
+
writeFileSync(output + '.json', json + '\n');
|
|
166
|
+
writeFileSync(output + '.md', renderMarkdown(report));
|
|
167
|
+
console.log(`report: ${output}.json / ${output}.md`);
|
|
168
|
+
} else process.stdout.write(renderMarkdown(report));
|
|
169
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Source: 44fe14face:docs/reports/gate-0226-failure-census.tsv (pre-change accepted census)
|
|
2
|
+
apps/android/app/src/test/kotlin/com/elanvitalai/elanous/android/data/FeedbackEnvelopeVectors.test.ts > Android FeedbackEnvelope shared vectors > runs FeedbackEnvelopeVectorsTest and verifies every shared vector was accounted for
|
|
3
|
+
apps/android/app/src/test/kotlin/com/elanvitalai/elanous/android/ui/chat/ChatHarnessBubble.test.ts > ChatScreen assistant bubble for harness-style turns > injects turn-end through NexusClient→ViewModel and observes the bubble badge
|
|
4
|
+
apps/android/app/src/test/kotlin/com/elanvitalai/elanous/android/ui/chat/ChatLastItemScrollOffset.test.ts > chatLastItemScrollOffset aligns the list to the last item end > ChatScreenLayoutTest drives ChatScreenLayout and observes last-item end alignment
|
|
5
|
+
scripts/hooks/claude-code-utterance.test.ts > UserPromptSubmit reaches the human Claude Code utterance query
|
|
6
|
+
scripts/lib/nl-routing-measurement.test.ts > NL routing corpus runner safety gate > the runner entrypoint stops after final surface resolution with non-zero exit and safety guidance
|
|
7
|
+
scripts/nl-routing-measurement.test.ts > NL routing corpus runner safety gate > the runner entrypoint stops after final surface resolution with non-zero exit and safety guidance
|
|
8
|
+
scripts/release-loop/freeze-off-parity.test.ts > freeze switch off: gate, publish and unattended release are byte-identical to pre-freeze behavior
|
|
9
|
+
scripts/test-deterministic.test.ts > terminateDirectChild > SIGKILLs the group when the direct child is already dead and a grandchild ignores SIGTERM
|
|
10
|
+
scripts/test-diet/effectiveness.test.ts > TD3 effectiveness > measure --effectiveness counts unreachable imports and leaves unreadable results absent
|
|
11
|
+
scripts/webclone/loop/mirror-age.test.ts > edition-check는 조용함을 재료 미러보다 앞에 두고, 미러는 기존 original-mirror 인자로 부른다
|
|
12
|
+
scripts/webclone/loop/mirror-age.test.ts > mirror-age > 12시간 경계 양쪽과 여러 미러를 fetchedAt만으로 한 줄씩 판정한다
|
|
13
|
+
scripts/webclone/loop/mirror-age.test.ts > mirror-age > 파일 mtime이 아니라 MIRROR.json fetchedAt으로 판정한다
|
|
14
|
+
scripts/webclone/loop/ruler-version.test.ts > ruler-version rc 계약 > 12시간을 넘긴 기준선은 rc 1 이고 ***origin-drift 로 재라***를 같이 낸다
|
|
15
|
+
scripts/webclone/loop/ruler-version.test.ts > ruler-version rc 계약 > 최근 기준선은 rc 0 이고 「묵었다」고 말하지 않는다
|
|
16
|
+
scripts/webclone/measure-fidelity.test.ts > main RenderProbe wiring > 로컬 링크가 우세한 미러 진입 문서는 링크 수와 self-contained 상태를 보존한다
|
|
17
|
+
scripts/webclone/measure-fidelity.test.ts > main RenderProbe wiring > 원격 링크가 60% 이상인 미러 진입 문서를 non-self-contained로 기록한다
|
|
18
|
+
scripts/webclone/measure-fidelity.test.ts > main RenderProbe wiring > 통제한 로컬 원문과 성공 프로브가 최종 렌더 위치까지 JSON 산출로 연결된다
|
|
19
|
+
scripts/webclone/measure-fidelity.test.ts > main mirror-entry locality wiring > 네트워크 지배 미러는 참조 수를 내고 픽셀 차이를 품질로 읽을 수 없다고 말한다
|
|
20
|
+
scripts/webclone/measure-fidelity.test.ts > main mirror-entry locality wiring > 로컬 지배 미러는 참조 수를 내고 네트워크 지배 경고를 내지 않는다
|
|
21
|
+
scripts/webclone/measure-fidelity.test.ts > main mirror-entry locality wiring > 미러 진입 문서가 없으면 참조 수와 지배 판정을 못 쟀다로 보존한다
|
|
22
|
+
scripts/webclone/measure-fidelity.test.ts > main overlay observability wiring > 원본과 사본 처리 수를 더해 내고 잔여 덮개면 픽셀 차이를 미신뢰로 표시한다
|
|
23
|
+
scripts/webclone/measure-fidelity.test.ts > main screenshot reliability wiring > 실제 정상·빈 PNG를 기본 통계 추출 경로로 읽어 RMSE를 보존하고 미러 공백 사유를 JSON에 낸다
|
|
24
|
+
src/acp/grok-leader-manager.test.ts > GrokLeaderManager · ensureLeader idempotency contract > ensureLeader returns state object (does not throw)
|
|
25
|
+
src/agent-mission/driver-workdir.test.ts > ignored files outside workdir are detected when created or modified
|
|
26
|
+
src/agent-mission/driver-workdir.test.ts > workdir skips git, runs PTY in the folder by default, and accepts a new mp4
|
|
27
|
+
src/autopilot/build/isolated-instance.test.ts > createIsolatedInstance — 주입 worktree > ★ defaultMergeMainIntoWorktree — fetch 실패 → error / up-to-date / merged (실 git)
|
|
28
|
+
src/dashboard/first-screen-band-wiring.test.ts > showDashboard renders the startup band before and after the real first chat input
|
|
29
|
+
src/directives/directive-index.test.ts > FTS5, incremental byte offsets, version search, redaction, track votes and labels; originals stay unchanged
|
|
30
|
+
src/git-fs/spawn-discipline.test.ts > 실제 저장소 — 이 게이트가 지키는 것 > 실물 git 프론트도어는 --help를 git argv로 전달하고 상태 줄과 git 종료 코드를 보존한다
|
|
31
|
+
src/git-fs/spawn-discipline.test.ts > 실제 저장소 — 이 게이트가 지키는 것 > 실물 진입점에서 scripts 유예와 요약을 산출한다
|
|
32
|
+
src/graph-runner/graph-cli.test.ts > graph YAML triggers.schedule fires through the workflow scheduler into graph tick and persists a run
|
|
33
|
+
src/graph-runner/graph-cli.test.ts > graph tick defaults to idle and --start passes JSON input, prints results, and does not restart a finished run
|
|
34
|
+
src/graph-runner/graph-variant-cli.test.ts > a paused variant resumes from its saved graph after the original template changes
|
|
35
|
+
src/graph-runner/graph-variant-cli.test.ts > a route plan without a budget also executes the changed route
|
|
36
|
+
src/graph-runner/graph-variant-cli.test.ts > ambiguous outcome plan is rejected before ledger or node execution
|
|
37
|
+
src/graph-runner/graph-variant-cli.test.ts > two plans on the same template execute distinct persisted variant graphs through fake nodes
|
|
38
|
+
src/graph-runner/graph-variant-cli.test.ts > variant preserves unrelated node and edge metadata in its runnable snapshot
|
|
39
|
+
src/harness/dogfood.test.ts > assertThrowawayTarget — C 안전 가드(auto-approve 우회 방지) > runHarnessDogfood 도 실경로 target 을 current CLI guidance와 함께 refuse
|
|
40
|
+
src/harness/dogfood.test.ts > assertThrowawayTarget — C 안전 가드(auto-approve 우회 방지) > ★ 실경로(홈·repo·시스템) → refuse with current CLI guidance
|
|
41
|
+
src/mss/logging/log-store.test.ts > LogStore writer contention > carries a failed open observation to the next writable connection
|
|
42
|
+
src/plugins/adapters/claude-package.test.ts > readClaudePackageLedger > reads this machine live ledger without a pluginsRoot override
|
|
43
|
+
src/self-implement/orchestrator-blocked-draft.test.ts > environment branch is committed and pushed to an existing origin without opening a PR
|
|
44
|
+
src/self-implement/orchestrator-blocked-draft.test.ts > environment stop without origin commits changes on the local branch for checkout recovery
|
|
45
|
+
src/self-implement/orchestrator-blocked-draft.test.ts > failed environment push is reported to the caller and never presented as preserved
|
|
46
|
+
src/self-implement/orchestrator-blocked-draft.test.ts > missing worktree keeps provider attribution and reports failed preservation without a draft
|
|
47
|
+
src/self-implement/orchestrator-blocked-draft.test.ts > no changes takes precedence over environment branch preservation
|
|
48
|
+
src/self-implement/orchestrator-blocked-draft.test.ts > quota-exhausted blocked run preserves its branch without opening a draft; implementation deficit still opens one
|
|
49
|
+
src/self-implement/orchestrator-blocked-draft.test.ts > worktree-only environment stop never pushes, even when an origin exists
|
|
50
|
+
src/self-implement/run-chain-query.test.ts > queryRunChain > pages past a full matching dispatch result page to find an old matching session
|
|
51
|
+
src/self-implement/seams-usage-role.test.ts > goal summary passes classify usage role alongside the unchanged resolved model
|
|
52
|
+
src/session-runtime/coding-surface-shell.test.ts > coding surface — shell 실행 tool 노출 > runtime 없는 Agent 폴백은 부모 도구·dispatcher·중단 신호를 자식에 보존한다
|
|
53
|
+
src/skills/tools/dev-harness.test.ts > dispatchRunDevHarness — P3 외부 repo 타깃 > target 실 git repo → repoRoot+elanousBinRoot 를 seam 으로
|
|
54
|
+
src/task-agent/mission.test.ts > shadow --mission → 미션 카드 1 ⊕ 조각 카드 4 · 같은 상태 파일 · 선행 없는 조각만 launch 수 · 나머지 wait after
|
|
55
|
+
src/task-orchestrator/surfaces/pod-pool-cli.test.ts > independent harness ask/say and self CLI dispatch run real kubectl apply only when lease permits
|
|
56
|
+
src/video-pipeline/recipes/reframe.test.ts > reframe — Affinity 가 없어도 «끝까지» 간다 > ⛔ 러너가 «없어도» 멈추지 않는다 (앱이 없는 고객 기계의 모습)
|
|
57
|
+
src/video-pipeline/recipes/vlog.test.ts > vlog 레시피 — 실제 ffmpeg > ⭐ build-layers — 덮는 층(스크림·자막)이 «투명»하다 (🩸 불투명 자막이 영상 전체를 덮었다)
|
|
58
|
+
src/webclone/archive-run.test.ts > 브라우저 재현 가능한 미러 계약 > 실제 wget은 POSIX ERE를 컴파일해 www 형제 자산만 받고 외부 호스트는 받지 않는다
|
|
59
|
+
test/acp-subagent-wire-meta.test.ts > AcpAgent.prompt · _meta forwarding > undefined meta → request omits _meta field
|
|
60
|
+
test/ad-production.test.ts > renders planned captions after assembly while preserving the uncaptained master and named failures
|
|
61
|
+
test/ad-qc-measure.test.ts > QC measurement adapter > uses distinct OCR artifacts for repeated and parallel video measurement plans
|
|
62
|
+
test/dashboard-acp-boot.test.ts > bootDashboardAcpSession — boot observability > records the selected branch and every successful boot outcome
|
|
63
|
+
test/dashboard-turn-typeahead-echo.test.ts > dashboard real user echo wiring > PTY screen preserves submitted Q2 → answer Q2 → submitted Q3 → answer Q3
|
|
64
|
+
test/finance-tools.test.ts > finance tool surface > SQL-injection guard on attractiveness args
|
|
65
|
+
test/finance-tools.test.ts > finance tool surface > finance_trend (A2.1/A4): rotation + country + guards + injection-safe
|
|
66
|
+
test/harness-worktree-add.test.ts > harness worktree add > 판정 신호: goal context records a leading H1 goal title instead of structural H2 headings
|
|
67
|
+
test/harness-worktree-add.test.ts > harness worktree add > 판정 신호: goal synthesis truncates generated output at 250 characters and falls back to title on empty or thrown model output
|
|
68
|
+
test/intake-plane-check-repo-axis.test.ts > frequent matches do not overflow the search buffer and disclose sampling
|
|
69
|
+
test/llm-openrouter-provider.test.ts > OpenRouter provider wire > ⛔ 교차 경로 — config 가 grok 이면 그 키·baseUrl 을 OpenRouter 로 «안» 보낸다
|
|
70
|
+
test/nexus-api-terminals.test.ts > handleTerminalsList > merges web preview PTYs into local and federated lists with their first registration time
|
|
71
|
+
test/oauth/codex-mirror-real-home-guard.test.ts > ① 가드 — 실홈이 대상이면 «던진다» (쓰기는 일어나지 않는다) > ⛔ «심볼릭 링크»로 우회해도 던진다 — 문자열 비교로는 통과했다(리뷰 must-fix)
|
|
72
|
+
test/ocr-tesseract.test.ts > OcrRegistry · Tesseract picker behaviour > strengths:["context-aware"] still picks LLM Vision (Tesseract loses)
|
|
73
|
+
test/persistent-grounding-runtime.test.ts > PersistentGrounding ToolRuntime > default registration alias dispatch runs the guarded search loop and records session observations
|
|
74
|
+
test/persistent-grounding-runtime.test.ts > PersistentGrounding ToolRuntime > generates one session ID for ambient observations and grounding when no session ID is supplied
|
|
75
|
+
test/plugin-hooks-shell.test.ts > shell-hook > array JSON → warn + {}
|
|
76
|
+
test/plugin-hooks-shell.test.ts > shell-hook > env propagated to shell
|
|
77
|
+
test/plugin-hooks-shell.test.ts > shell-hook > stdout JSON object → output
|
|
78
|
+
test/plugin-manifest-hooks.test.ts > plugin-host hook registration > end-to-end dispatch through registered manifest hook
|
|
79
|
+
test/plugin-missions-runtime.test.ts > PX-4 P3 — MissionRegistry > never policy: history grows + iteration advances each tick
|
|
80
|
+
test/plugin-missions-runtime.test.ts > PX-4 P3 — MissionRegistry > score_improvement: only strictly-better score advances
|
|
81
|
+
test/plugin-missions-runtime.test.ts > PX-4 P3 — runMissionEvaluator > parses JSON stdout into MissionResult
|
|
82
|
+
test/preview-terminal.test.ts > PreviewTerminal > resize reaches the kernel PTY — the shell sees the new size (stty size)
|
|
83
|
+
test/rules-contract.test.ts > 변경 ↔ 규칙 갱신 — sources 가 바뀌면 그 «규칙 파일»이 같은 diff 에 있다 > 이 검사가 무엇을 봤는지 «말한다»
|
|
84
|
+
test/self-dev-manual-goal-evidence.test.ts > hand-authored --file goal evidence contract > passes the attached requirement to the self-implement boundary for --file input
|
|
85
|
+
test/shell-audit-log.test.ts > shell-primitive audit-log: programmatic sink > run event includes truncated when output exceeds budget
|
|
86
|
+
test/shell-primitive.test.ts > shell-primitive: runShell (no approval) > maxOutputChars truncates and sets truncated=true
|
|
87
|
+
test/skill-tool-mermaid.test.ts > dispatchMermaidRender — happy path > renders a simple flowchart to Unicode boxes
|
|
88
|
+
test/voice-tts-providers.test.ts > TTS provider availability and unpaid default > falls back to edge-tts, not openai-tts, when nobody chose and no credential resolves
|
|
89
|
+
test/voice-tts-providers.test.ts > TTS provider availability and unpaid default > reports edge-tts and macos-say usable without credentials
|
|
90
|
+
test/workflow-templates-packaged.test.ts > the npm package carries every workflow template the repository has
|
|
91
|
+
test/plugin-missions-runtime.test.ts > [error]
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* 판정: `docs/reports/gate-0226-failure-census.tsv`가 accepted 실패 ID 96건을 중복 없이 보존하고,
|
|
6
6
|
* 그중 `provider-intake` 6건(첫 감소 칸 GATE-0226-PROVIDER-INTAKE6)을 제외한 90건이 정확히 남으며,
|
|
7
7
|
* `Error: no ACP` 로그 사건(34회)은 실패 ID로 더해지지 않았음. 보고서 md의 96행 색인과 선언 카운트도 실측과 일치.
|
|
8
|
+
* intake 제외 90개 ID는 변경 전 `44fe14face` TSV에서 고정한 accepted 목록과 집합 비교한다.
|
|
8
9
|
*
|
|
9
10
|
* 사용: bun run scripts/gate-0226-failure-census.ts [--tsv <path>] [--report <path>] [--accepted <path|none>] [--json] [--write-repair-card]
|
|
10
11
|
*
|
|
@@ -17,6 +18,7 @@ import { join, resolve } from 'node:path';
|
|
|
17
18
|
export const CENSUS_TSV = 'docs/reports/gate-0226-failure-census.tsv';
|
|
18
19
|
export const CENSUS_REPORT = 'docs/reports/REPORT-gate-0226-failure-census.md';
|
|
19
20
|
export const DEFAULT_ACCEPTED = 'elanous-hq/seat-state/OP/tools/accepted-0226.json';
|
|
21
|
+
export const DEFAULT_REMAINING_BASELINE = 'scripts/gate-0226-accepted-remaining-90.txt';
|
|
20
22
|
|
|
21
23
|
export const EXPECTED_HEADER = [
|
|
22
24
|
'no',
|
|
@@ -108,6 +110,7 @@ export type CensusAudit = {
|
|
|
108
110
|
remainingIds: string[];
|
|
109
111
|
acpLogEvents: number;
|
|
110
112
|
ledger: { path: string; status: 'compared' | 'skipped' | 'failed'; ids: number };
|
|
113
|
+
remainingBaseline: { path: string; status: 'compared' | 'failed'; ids: number };
|
|
111
114
|
};
|
|
112
115
|
|
|
113
116
|
/** RFC4180 형식의 탭 구분 표를 읽는다. 실패 ID 안의 따옴표·탭·개행을 보존한다. */
|
|
@@ -259,6 +262,9 @@ export type AuditInput = {
|
|
|
259
262
|
reportText: string;
|
|
260
263
|
/** accepted 원장 ID. null 이면 비교 불가(원장 부재)를 산출로 남긴다. */
|
|
261
264
|
acceptedIds: string[] | null;
|
|
265
|
+
/** 변경 전 독립 기준으로 고정한 remaining accepted ID 집합. */
|
|
266
|
+
remainingBaselineIds: string[] | null;
|
|
267
|
+
remainingBaselinePath: string;
|
|
262
268
|
ledgerPath: string;
|
|
263
269
|
ledgerRequired: boolean;
|
|
264
270
|
};
|
|
@@ -355,6 +361,10 @@ export function auditCensus(input: AuditInput): CensusAudit {
|
|
|
355
361
|
problems.push(`no-test-deletion-proposed: 근거 없이 시험 삭제를 제안한 행 ${deletionProposals.length}건 (${deletionProposals.slice(0, 6).join(',')})`);
|
|
356
362
|
}
|
|
357
363
|
|
|
364
|
+
if (!input.reportText.includes('## 90건 후속 조사와 남은 수리 칸')) {
|
|
365
|
+
problems.push('report-follow-up: 90건 후속 조사·상태·주인 근거 절이 없다');
|
|
366
|
+
}
|
|
367
|
+
|
|
358
368
|
const index = parseReportIndex(input.reportText);
|
|
359
369
|
if (index.length !== rows.length) {
|
|
360
370
|
problems.push(`report-index-parity: 보고서 색인 ${index.length}행 / TSV ${rows.length}행`);
|
|
@@ -386,6 +396,27 @@ export function auditCensus(input: AuditInput): CensusAudit {
|
|
|
386
396
|
problems.push(`report-counts: 보고서가 \`${NO_ACP_MARKER}\` ${ACP_LOG_EVENTS}회 · 겹침 0건 배제를 명시하지 않는다`);
|
|
387
397
|
}
|
|
388
398
|
|
|
399
|
+
let remainingBaseline: CensusAudit['remainingBaseline'];
|
|
400
|
+
if (input.remainingBaselineIds === null) {
|
|
401
|
+
problems.push(`remaining-baseline: 고정 기준 파일이 없다 (${input.remainingBaselinePath})`);
|
|
402
|
+
remainingBaseline = { path: input.remainingBaselinePath, status: 'failed', ids: 0 };
|
|
403
|
+
} else {
|
|
404
|
+
const baselineIds = input.remainingBaselineIds;
|
|
405
|
+
const baseline = new Set(baselineIds);
|
|
406
|
+
const actual = new Set(remainingIds);
|
|
407
|
+
const missing = [...baseline].filter((id) => !actual.has(id));
|
|
408
|
+
const extra = [...actual].filter((id) => !baseline.has(id));
|
|
409
|
+
if (baseline.size !== REMAINING_IDS || baseline.size !== baselineIds.length) {
|
|
410
|
+
problems.push(`remaining-baseline: 고정 기준은 중복 없이 ${REMAINING_IDS} ID여야 한다 (행 ${baselineIds.length} / 고유 ${baseline.size})`);
|
|
411
|
+
}
|
|
412
|
+
if (missing.length > 0 || extra.length > 0 || baseline.size !== actual.size) {
|
|
413
|
+
problems.push(`remaining-baseline: 기준 ${baseline.size}건 / TSV ${actual.size}건 · 누락 ${missing.length}${missing.length ? ` (${missing.slice(0, 3).join(' | ')})` : ''} · 추가 ${extra.length}${extra.length ? ` (${extra.slice(0, 3).join(' | ')})` : ''}`);
|
|
414
|
+
remainingBaseline = { path: input.remainingBaselinePath, status: 'failed', ids: baseline.size };
|
|
415
|
+
} else {
|
|
416
|
+
remainingBaseline = { path: input.remainingBaselinePath, status: 'compared', ids: baseline.size };
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
389
420
|
let ledger: CensusAudit['ledger'];
|
|
390
421
|
if (input.acceptedIds === null) {
|
|
391
422
|
if (input.ledgerRequired) {
|
|
@@ -414,6 +445,7 @@ export function auditCensus(input: AuditInput): CensusAudit {
|
|
|
414
445
|
remainingIds,
|
|
415
446
|
acpLogEvents: acpAttributed.length,
|
|
416
447
|
ledger,
|
|
448
|
+
remainingBaseline,
|
|
417
449
|
};
|
|
418
450
|
}
|
|
419
451
|
|
|
@@ -425,6 +457,7 @@ export function renderText(audit: CensusAudit): string {
|
|
|
425
457
|
lines.push(`repair-cards: ${Object.entries(audit.counts.repair).map(([key, value]) => `${key}=${value}`).join(' ')}`);
|
|
426
458
|
lines.push(`no-acp: ${audit.acpLogEvents} (로그 ${ACP_LOG_EVENTS}회 사건은 실패 ID가 아니다)`);
|
|
427
459
|
lines.push(`accepted-ledger: ${audit.ledger.status} ${audit.ledger.path}${audit.ledger.status === 'skipped' ? ' (원장 부재 — 원장 대조 미실시)' : ''}`);
|
|
460
|
+
lines.push(`remaining-baseline: ${audit.remainingBaseline.status} ${audit.remainingBaseline.path} (${audit.remainingBaseline.ids})`);
|
|
428
461
|
for (const problem of audit.problems) lines.push(`FAIL ${problem}`);
|
|
429
462
|
lines.push(audit.ok ? 'census: PASS' : `census: FAIL (${audit.problems.length})`);
|
|
430
463
|
return lines.join('\n');
|
|
@@ -491,10 +524,16 @@ export function main(argv: string[] = process.argv.slice(2), cwd: string = proce
|
|
|
491
524
|
process.stdout.write(`repair-card: ${rewritten}행 재계산 → ${options.tsv}\n`);
|
|
492
525
|
}
|
|
493
526
|
const acceptedIds = options.accepted ? readAcceptedIds(options.accepted) : null;
|
|
527
|
+
const remainingBaselinePath = resolve(cwd, DEFAULT_REMAINING_BASELINE);
|
|
528
|
+
const remainingBaselineIds = existsSync(remainingBaselinePath)
|
|
529
|
+
? readFileSync(remainingBaselinePath, 'utf8').split(/\r?\n/).filter((line) => line.length > 0 && !line.startsWith('#'))
|
|
530
|
+
: null;
|
|
494
531
|
const audit = auditCensus({
|
|
495
532
|
tsvText: readFileSync(options.tsv, 'utf8'),
|
|
496
533
|
reportText: readFileSync(options.report, 'utf8'),
|
|
497
534
|
acceptedIds,
|
|
535
|
+
remainingBaselineIds,
|
|
536
|
+
remainingBaselinePath: DEFAULT_REMAINING_BASELINE,
|
|
498
537
|
ledgerPath: options.accepted ?? 'none',
|
|
499
538
|
ledgerRequired: options.acceptedExplicit && options.accepted !== null,
|
|
500
539
|
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// TG-SAVED-ZERO 무대 — save(me) 대화의 가짜 저장 메시지로 흡수 경로를 세 번 지난다.
|
|
2
|
+
// ① 다른 주체가 이미 흡수한 판 · ② 사흘 0 관측 그대로(필터로 비어 커서만 전진) · ③ 판정선(저장 1건이 다음 흡수에 원장으로).
|
|
3
|
+
import { mkdtempSync } from 'node:fs';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { collectTelegramSaved, readSavedCursor, renderCollectTelegramSavedResult, savedMessageToRaws, type SavedMessage } from '../src/intake-plane/collect-telegram-saved.js';
|
|
7
|
+
import { ingestIntakeItems, listIntakeItems, markIntakeItem, pickAbsorbQueue } from '../src/intake-plane/items.js';
|
|
8
|
+
|
|
9
|
+
const root = mkdtempSync(join(tmpdir(), 'tg-saved-zero-'));
|
|
10
|
+
const saved: SavedMessage[] = [
|
|
11
|
+
{ id: 8959, date: '2026-10-22T00:05:00.000Z', text: 'https://example.com/first 메모', urls: [] },
|
|
12
|
+
{ id: 8975, date: '2026-10-23T00:05:00.000Z', text: '', urls: [] },
|
|
13
|
+
{ id: 9092, date: '2026-10-24T00:05:00.000Z', text: ' ', urls: [] },
|
|
14
|
+
{ id: 9200, date: '2026-10-25T00:05:00.000Z', text: 'https://example.com/next 다음 것', urls: [] },
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
// 대표가 텔레그램에서 «저장한» 목록의 창 — 지금 창 안의 메시지만 fetch 가 돌려준다.
|
|
18
|
+
let visibleUpTo = 8959;
|
|
19
|
+
const fetchSaved = async (minId: number) => saved.filter((m) => m.id > minId && m.id <= visibleUpTo);
|
|
20
|
+
const run = (max = 300) => collectTelegramSaved(root, fetchSaved, { max });
|
|
21
|
+
|
|
22
|
+
// ① 다른 주체(queue)가 8959 를 먼저 가져가 흡수까지 끝낸 판 — collect 는 «이미 끝난 것» 만 본다.
|
|
23
|
+
ingestIntakeItems(root, 'telegram-saved', savedMessageToRaws(saved[0]!));
|
|
24
|
+
for (const item of pickAbsorbQueue(root, { max: 10, laneMax: 30 })) markIntakeItem(root, item.id, { status: 'absorbed' });
|
|
25
|
+
const consumed = await run();
|
|
26
|
+
console.log('=== ① 같은 항목을 다른 주체(queue)가 먼저 흡수한 판 — «원장 입력 있음 · 새 0»');
|
|
27
|
+
console.log(renderCollectTelegramSavedResult(consumed));
|
|
28
|
+
|
|
29
|
+
// ② 사흘 0 의 관측 그대로 — 커서는 8959→9092 로 전진했는데 원장 입력 0(빈 메시지가 필터에 걸림)
|
|
30
|
+
visibleUpTo = 9092;
|
|
31
|
+
const filtered = await run();
|
|
32
|
+
console.log('=== ② 사흘 0 관측 그대로 — 커서만 8959 → 9092 로 전진 · 원장 입력 0');
|
|
33
|
+
console.log(renderCollectTelegramSavedResult(filtered));
|
|
34
|
+
console.log(` (원장 줄 수 ${listIntakeItems(root).length} — 그대로)`);
|
|
35
|
+
|
|
36
|
+
// ③ 판정 — 대표가 저장한 다음 메시지 1건(id 9200)이 다음 흡수에 원장으로 들어간다
|
|
37
|
+
visibleUpTo = 9200;
|
|
38
|
+
const next = await run();
|
|
39
|
+
console.log('=== ③ 판정 — 대표가 저장한 메시지 1건(id 9200)이 다음 흡수에 원장으로 들어감');
|
|
40
|
+
console.log(renderCollectTelegramSavedResult(next));
|
|
41
|
+
|
|
42
|
+
const links = listIntakeItems(root).map((i) => i.url);
|
|
43
|
+
console.log(`\n[ledger] 원장 링크 ${JSON.stringify(links)} · 커서 ${readSavedCursor(root)}`);
|
|
44
|
+
const ok = filtered.raws === 0 && filtered.cursorAfter === 9092 && filtered.messages === 2
|
|
45
|
+
&& (next.ingest?.added ?? 0) === 1 && links.filter((u) => u === 'https://example.com/next').length === 1
|
|
46
|
+
&& consumed.ingest?.seen === 1;
|
|
47
|
+
console.log(ok ? '[verdict] 판정선 통과 — 저장 메시지 1건이 다음 흡수에 원장으로 들어갔다' : '[verdict] 판정선 실패');
|
|
48
|
+
process.exitCode = ok ? 0 : 1;
|
|
@@ -12,10 +12,9 @@
|
|
|
12
12
|
// 경로(model 미지정 ⇒ providerFor(cfg))를 그대로 보존한다. 값이 없거나 빈 값이면
|
|
13
13
|
// parseArgv 오류를 던져 기본 모델로 조용히 실행되지 않도록 한다.
|
|
14
14
|
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
// scripts/lib/morning-report-options.test.ts(bun test, in-process) 다.
|
|
15
|
+
// ✅ 배선 완료(SWAP-BENCH-CRON): scripts/morning-report.ts 탑레벨(CLI 진입)이 이 파서를
|
|
16
|
+
// 호출해 --narrative-model 값을 composeMorningReport(..., { model }) 로 넘긴다.
|
|
17
|
+
// 배선 계약 시험은 test/morning-report.test.ts(mock 무대)가 누른다.
|
|
19
18
|
|
|
20
19
|
import { parseArgv, type ArgvContract } from './argv.js';
|
|
21
20
|
|