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
|
@@ -19,9 +19,12 @@ import type { DocumentReferenceStatus } from './self-implement-runtime.js';
|
|
|
19
19
|
import { resolveObserveOnlyDecision } from './observe-only.js';
|
|
20
20
|
import { getUserConfig } from '../user-config.js';
|
|
21
21
|
import { resolveAutoReview } from './context-capsule.js';
|
|
22
|
+
import { readDecomposeProposals } from '../self-dev/decompose-proposal.js';
|
|
22
23
|
|
|
23
24
|
/** self implement CLI 옵션(commander) — `--no-draft` 는 draft:false 로, `--max-wait` 는 문자열로 도착. */
|
|
24
25
|
export interface SelfImplementCliOpts {
|
|
26
|
+
/** Managed tool dispatch cancellation signal, forwarded through the pipeline to the active implementation child. */
|
|
27
|
+
signal?: AbortSignal;
|
|
25
28
|
base?: string;
|
|
26
29
|
draft?: boolean;
|
|
27
30
|
openPr?: boolean;
|
|
@@ -71,6 +74,28 @@ export interface SelfImplementCliDeps {
|
|
|
71
74
|
}>;
|
|
72
75
|
/** runDevPipeline 내부 배선 주입(runSelfImplement/seams 등·테스트). */
|
|
73
76
|
pipelineDeps?: DevPipelineDeps;
|
|
77
|
+
/** Parent-side run-ledger observation, injected to verify terminal JSON evidence. */
|
|
78
|
+
readGoalPlanRevision?: typeof readDecomposeProposals;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function attachGoalPlanRevisionObservation(
|
|
82
|
+
result: SelfImplementResult,
|
|
83
|
+
deps: SelfImplementCliDeps,
|
|
84
|
+
): SelfImplementResult {
|
|
85
|
+
if (result.goalPlanRevision !== undefined || typeof result.runId !== 'string' || !result.runId.trim()) return result;
|
|
86
|
+
try {
|
|
87
|
+
// The ledger reader joins by shardId when present and otherwise by runId; a single-run
|
|
88
|
+
// child uses its runId as either key depending on the writer, so query both explicitly.
|
|
89
|
+
const scan = (deps.readGoalPlanRevision ?? readDecomposeProposals)({
|
|
90
|
+
shardIds: [result.runId],
|
|
91
|
+
runIds: [result.runId],
|
|
92
|
+
});
|
|
93
|
+
const observation = scan.goalPlanRevisions.get(result.runId) ?? scan.readFailure;
|
|
94
|
+
return observation ? { ...result, goalPlanRevision: observation } : result;
|
|
95
|
+
} catch {
|
|
96
|
+
// An unavailable observation stays absent; the supervisor treats that as a hold.
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
74
99
|
}
|
|
75
100
|
|
|
76
101
|
/**
|
|
@@ -205,11 +230,12 @@ export async function runSelfImplementCliCommand(
|
|
|
205
230
|
entry: opts.entry ?? 'external-verbatim', // CLI = 외부 창구(외부가 프롬프트 엔지니어 → verbatim 존중)
|
|
206
231
|
});
|
|
207
232
|
spec.entrance = opts.naturalLanguageDispatch ? 'nl-self-implement' : 'cli-self-implement';
|
|
208
|
-
const pipelineDeps = opts.approver || opts.progress
|
|
209
|
-
? { ...deps.pipelineDeps, ...(opts.approver ? { approver: opts.approver } : {}), ...(opts.progress ? { progress: opts.progress } : {}) }
|
|
233
|
+
const pipelineDeps = opts.approver || opts.progress || opts.signal
|
|
234
|
+
? { ...deps.pipelineDeps, ...(opts.approver ? { approver: opts.approver } : {}), ...(opts.progress ? { progress: opts.progress } : {}), ...(opts.signal ? { signal: opts.signal } : {}) }
|
|
210
235
|
: deps.pipelineDeps;
|
|
211
236
|
const exec = deps.executeReroute ?? executeSelfImplementReroute;
|
|
212
237
|
let { result, exitCode } = await exec(spec, pipelineDeps ? { pipelineDeps } : undefined);
|
|
238
|
+
result = attachGoalPlanRevisionObservation(result, deps);
|
|
213
239
|
|
|
214
240
|
// ⭐⭐⭐ 단일 실행도 «루프»를 지난다 (E2) — 판정자는 연합과 «같은 자»다.
|
|
215
241
|
// ⛔ 종전엔 단일이 실패하면 그냥 끝났다. 아무도 「다시 걸까」를 묻지 않았다.
|
|
@@ -257,9 +283,9 @@ export async function runSelfImplementCliCommand(
|
|
|
257
283
|
rerun: async (_, invocation) => {
|
|
258
284
|
const repairGoal = invocation.repairGoals?.[initialJob.taskId];
|
|
259
285
|
const next = await exec(repairGoal ? { ...spec, input: { ...spec.input, text: repairGoal } } : spec, pipelineDeps ? { pipelineDeps } : undefined);
|
|
260
|
-
result = next.result;
|
|
286
|
+
result = attachGoalPlanRevisionObservation(next.result, deps);
|
|
261
287
|
exitCode = next.exitCode;
|
|
262
|
-
return [{ ...singleRunAsJobResult(feature,
|
|
288
|
+
return [{ ...singleRunAsJobResult(feature, result), taskId: initialJob.taskId }];
|
|
263
289
|
},
|
|
264
290
|
});
|
|
265
291
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface AskOpQuestionEnvelope {
|
|
2
|
+
surface: 'telegram';
|
|
3
|
+
botId: string;
|
|
4
|
+
chatId: number | string;
|
|
5
|
+
threadId?: number | string;
|
|
6
|
+
messageId: number | string;
|
|
7
|
+
updateId: number | string;
|
|
8
|
+
question: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const ASK_OP_COMMAND = 'askop';
|
|
12
|
+
|
|
13
|
+
export function formatAskOpQuestionEnvelope(input: AskOpQuestionEnvelope): string {
|
|
14
|
+
return [
|
|
15
|
+
`Telegram /${ASK_OP_COMMAND}`,
|
|
16
|
+
`botId=${input.botId}`,
|
|
17
|
+
`chatId=${input.chatId}`,
|
|
18
|
+
`threadId=${input.threadId ?? 'none'}`,
|
|
19
|
+
`messageId=${input.messageId}`,
|
|
20
|
+
`updateId=${input.updateId}`,
|
|
21
|
+
`question: ${input.question.trim()}`,
|
|
22
|
+
].join('\n');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function parseAskOpQuestionEnvelope(body: string): AskOpQuestionEnvelope | null {
|
|
26
|
+
const telegram = /^Telegram \/(?:askop|ask-op)\nbotId=([A-Za-z0-9_-]+)\nchatId=(-?\d+)\nthreadId=(none|\d+)\nmessageId=(\d+)\nupdateId=(\d+)\nquestion: ([\s\S]+)$/.exec(body);
|
|
27
|
+
if (telegram) {
|
|
28
|
+
const [, botId, chatId, threadId, messageId, updateId, question] = telegram;
|
|
29
|
+
return {
|
|
30
|
+
surface: 'telegram', botId: botId!, chatId: chatId!,
|
|
31
|
+
...(threadId === 'none' ? {} : { threadId: threadId! }),
|
|
32
|
+
messageId: messageId!, updateId: updateId!, question: question!,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { openMsgStore, openMsgStoreReadOnly, type Message, type MsgStore } from '../msg/msg-store.js';
|
|
2
|
+
import { subscribeMsgStream, type MsgStreamHandle } from '../msg/msg-sse-client.js';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { elanousStateRoot } from '../autopilot/state-paths.js';
|
|
5
|
+
import { debug } from '../debug/log.js';
|
|
6
|
+
import { isOwnInstanceEndpoint, parseTelegramEndpoint, telegramEndpointKey } from './session-endpoint-key.js';
|
|
7
|
+
import type { TelegramBot } from '../telegram.js';
|
|
8
|
+
import { parseAskOpQuestionEnvelope } from './channel-ask-op-envelope.js';
|
|
9
|
+
|
|
10
|
+
export type ChannelOpEndpoint = { surface: 'telegram'; key: string } & NonNullable<ReturnType<typeof parseTelegramEndpoint>>;
|
|
11
|
+
|
|
12
|
+
export interface ChannelOpReplyTransport {
|
|
13
|
+
/** Must reject endpoint keys whose instance or bot is not served by this transport. */
|
|
14
|
+
canSend(endpoint: ChannelOpEndpoint): boolean;
|
|
15
|
+
/** The stable idempotency key lets a transport suppress retries if it supports them. */
|
|
16
|
+
send(endpoint: ChannelOpEndpoint, body: string, idempotencyKey: string): Promise<{ receiptId: string }>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function createTelegramChannelOpReplyTransport(input: {
|
|
20
|
+
bot: Pick<TelegramBot, 'sendMessage'>;
|
|
21
|
+
botId: string;
|
|
22
|
+
instance: string;
|
|
23
|
+
}): ChannelOpReplyTransport {
|
|
24
|
+
return {
|
|
25
|
+
canSend(endpoint) {
|
|
26
|
+
return endpoint.surface === 'telegram'
|
|
27
|
+
&& isOwnInstanceEndpoint(endpoint.instance, input.instance)
|
|
28
|
+
&& endpoint.botId === input.botId;
|
|
29
|
+
},
|
|
30
|
+
async send(endpoint, body, idempotencyKey) {
|
|
31
|
+
if (endpoint.surface !== 'telegram') throw new Error('Telegram transport cannot send to Discord');
|
|
32
|
+
const sent = await input.bot.sendMessage(Number(endpoint.chatId), body, {
|
|
33
|
+
...(endpoint.threadId !== '0' ? { threadId: Number(endpoint.threadId) } : {}),
|
|
34
|
+
});
|
|
35
|
+
return { receiptId: sent && 'messageId' in sent ? `telegram:${sent.messageId}` : `telegram:${idempotencyKey}` };
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export type ChannelOpReplyResult =
|
|
41
|
+
| { status: 'delivered'; receiptId: string }
|
|
42
|
+
| { status: 'already-delivered'; receiptId: string }
|
|
43
|
+
| { status: 'held' }
|
|
44
|
+
| { status: 'unknown' }
|
|
45
|
+
| { status: 'failed-permanent'; errorCode: number }
|
|
46
|
+
| { status: 'rejected'; reason: 'not-op-reply' | 'missing-question' | 'invalid-question' | 'invalid-endpoint' | 'unknown-endpoint' | 'already-answered' };
|
|
47
|
+
|
|
48
|
+
const CREATE_RECEIPTS = `CREATE TABLE IF NOT EXISTS channel_op_reply_receipts (
|
|
49
|
+
question_id INTEGER PRIMARY KEY REFERENCES msg_messages(id),
|
|
50
|
+
answer_id INTEGER NOT NULL UNIQUE REFERENCES msg_messages(id),
|
|
51
|
+
endpoint_key TEXT NOT NULL,
|
|
52
|
+
status TEXT NOT NULL CHECK(status IN ('sending', 'delivered', 'unknown', 'retry', 'failed-permanent')),
|
|
53
|
+
transport_receipt TEXT,
|
|
54
|
+
transport_error_code INTEGER,
|
|
55
|
+
updated_at TEXT NOT NULL
|
|
56
|
+
)`;
|
|
57
|
+
|
|
58
|
+
function telegramEndpoint(questionBody: string, instance: string): ChannelOpEndpoint | null {
|
|
59
|
+
const source = parseAskOpQuestionEnvelope(questionBody);
|
|
60
|
+
if (!source) return null;
|
|
61
|
+
const threadId = source.threadId ?? '0';
|
|
62
|
+
if (!Number.isSafeInteger(Number(source.chatId)) || !Number.isSafeInteger(Number(threadId))) return null;
|
|
63
|
+
const key = telegramEndpointKey({ instance, botId: source.botId, chatId: source.chatId, threadId });
|
|
64
|
+
const parsed = parseTelegramEndpoint(key);
|
|
65
|
+
return parsed ? { surface: 'telegram', key, ...parsed } : null;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function parseQuestionEndpoint(questionBody: string, instance: string): ChannelOpEndpoint | null {
|
|
69
|
+
return telegramEndpoint(questionBody, instance);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Resolve an OP reply through its durable replyTo link, claim one channel receipt,
|
|
74
|
+
* and send only to the endpoint captured in that question's stored envelope.
|
|
75
|
+
* An interrupted/ambiguous attempt is held rather than resent. Telegram 4xx
|
|
76
|
+
* responses other than rate limiting are terminal because the request cannot succeed unchanged.
|
|
77
|
+
*/
|
|
78
|
+
export async function deliverChannelOpReply(
|
|
79
|
+
store: MsgStore,
|
|
80
|
+
answerId: number,
|
|
81
|
+
transport: ChannelOpReplyTransport,
|
|
82
|
+
options: { instance: string },
|
|
83
|
+
): Promise<ChannelOpReplyResult> {
|
|
84
|
+
store.db.exec(CREATE_RECEIPTS);
|
|
85
|
+
const answer = store.getMessage(answerId);
|
|
86
|
+
if (!answer || answer.from !== 'OP' || answer.replyTo === undefined) return { status: 'rejected', reason: 'not-op-reply' };
|
|
87
|
+
const question = store.getMessage(answer.replyTo);
|
|
88
|
+
if (!question) return { status: 'rejected', reason: 'missing-question' };
|
|
89
|
+
if (question.to !== 'COORDINATOR' || question.kind !== 'question' || question.from !== 'TELEGRAM') {
|
|
90
|
+
return { status: 'rejected', reason: 'invalid-question' };
|
|
91
|
+
}
|
|
92
|
+
const source = parseAskOpQuestionEnvelope(question.body);
|
|
93
|
+
if (!source) return { status: 'rejected', reason: 'invalid-endpoint' };
|
|
94
|
+
const provenanceKey = `coord:tg-${source.botId}-${source.updateId}:COORDINATOR`;
|
|
95
|
+
const provenance = store.db.query(`SELECT 1 FROM msg_provenance WHERE provenance_key = ? AND message_id = ?`)
|
|
96
|
+
.get(provenanceKey, question.id);
|
|
97
|
+
if (!provenance) return { status: 'rejected', reason: 'invalid-question' };
|
|
98
|
+
const endpoint = parseQuestionEndpoint(question.body, options.instance);
|
|
99
|
+
if (!endpoint) return { status: 'rejected', reason: 'invalid-endpoint' };
|
|
100
|
+
if (!transport.canSend(endpoint)) return { status: 'rejected', reason: 'unknown-endpoint' };
|
|
101
|
+
|
|
102
|
+
const claim = store.db.transaction(() => {
|
|
103
|
+
const existing = store.db.query(`SELECT answer_id, endpoint_key, status, transport_receipt, transport_error_code
|
|
104
|
+
FROM channel_op_reply_receipts WHERE question_id = ?`).get(question.id) as {
|
|
105
|
+
answer_id: number; endpoint_key: string; status: 'sending' | 'delivered' | 'unknown' | 'retry' | 'failed-permanent'; transport_receipt: string | null; transport_error_code: number | null;
|
|
106
|
+
} | null;
|
|
107
|
+
if (existing) {
|
|
108
|
+
if (existing.answer_id !== answer.id || existing.endpoint_key !== endpoint.key) return { kind: 'already-answered' as const };
|
|
109
|
+
if (existing.status === 'delivered') return { kind: 'delivered' as const, receiptId: existing.transport_receipt ?? '' };
|
|
110
|
+
if (existing.status === 'failed-permanent') return { kind: 'failed-permanent' as const, errorCode: existing.transport_error_code ?? 400 };
|
|
111
|
+
if (existing.status !== 'retry') return { kind: 'held' as const };
|
|
112
|
+
store.db.query(`UPDATE channel_op_reply_receipts SET status = 'sending', updated_at = ?
|
|
113
|
+
WHERE question_id = ? AND answer_id = ? AND status = 'retry'`)
|
|
114
|
+
.run(new Date().toISOString(), question.id, answer.id);
|
|
115
|
+
return { kind: 'claimed' as const };
|
|
116
|
+
}
|
|
117
|
+
store.db.query(`INSERT INTO channel_op_reply_receipts(question_id, answer_id, endpoint_key, status, updated_at)
|
|
118
|
+
VALUES (?, ?, ?, 'sending', ?)`).run(question.id, answer.id, endpoint.key, new Date().toISOString());
|
|
119
|
+
return { kind: 'claimed' as const };
|
|
120
|
+
}).immediate();
|
|
121
|
+
if (claim.kind === 'already-answered') return { status: 'rejected', reason: 'already-answered' };
|
|
122
|
+
if (claim.kind === 'delivered') return { status: 'already-delivered', receiptId: claim.receiptId };
|
|
123
|
+
if (claim.kind === 'failed-permanent') return { status: 'failed-permanent', errorCode: claim.errorCode };
|
|
124
|
+
if (claim.kind === 'held') return { status: 'held' };
|
|
125
|
+
|
|
126
|
+
try {
|
|
127
|
+
const receipt = await transport.send(endpoint, answer.body, `ask-op-reply:${question.id}`);
|
|
128
|
+
store.db.transaction(() => {
|
|
129
|
+
store.db.query(`UPDATE channel_op_reply_receipts SET status = 'delivered', transport_receipt = ?, updated_at = ?
|
|
130
|
+
WHERE question_id = ? AND answer_id = ? AND status = 'sending'`)
|
|
131
|
+
.run(receipt.receiptId, new Date().toISOString(), question.id, answer.id);
|
|
132
|
+
}).immediate();
|
|
133
|
+
return { status: 'delivered', receiptId: receipt.receiptId };
|
|
134
|
+
} catch (error) {
|
|
135
|
+
const errorCode = error && typeof error === 'object' && 'errorCode' in error
|
|
136
|
+
? (error as { errorCode?: unknown }).errorCode
|
|
137
|
+
: undefined;
|
|
138
|
+
const permanent4xx = typeof errorCode === 'number' && Number.isInteger(errorCode)
|
|
139
|
+
&& errorCode >= 400 && errorCode < 500 && errorCode !== 429;
|
|
140
|
+
const permanentErrorCode = permanent4xx ? errorCode as number : null;
|
|
141
|
+
store.db.transaction(() => {
|
|
142
|
+
store.db.query(`UPDATE channel_op_reply_receipts SET status = ?, transport_error_code = ?, updated_at = ?
|
|
143
|
+
WHERE question_id = ? AND answer_id = ? AND status = 'sending'`)
|
|
144
|
+
.run(permanent4xx ? 'failed-permanent' : 'unknown', permanentErrorCode, new Date().toISOString(), question.id, answer.id);
|
|
145
|
+
}).immediate();
|
|
146
|
+
if (permanentErrorCode !== null) return { status: 'failed-permanent', errorCode: permanentErrorCode };
|
|
147
|
+
return { status: 'unknown' };
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/** Explicit operator reconciliation for an ambiguous Telegram send. */
|
|
152
|
+
export function reconcileChannelOpReply(
|
|
153
|
+
store: MsgStore,
|
|
154
|
+
questionId: number,
|
|
155
|
+
decision: { status: 'delivered'; receiptId: string } | { status: 'not-delivered' },
|
|
156
|
+
): boolean {
|
|
157
|
+
store.db.exec(CREATE_RECEIPTS);
|
|
158
|
+
if (decision.status === 'delivered' && !decision.receiptId.trim()) throw new Error('receiptId is required for delivered reconciliation');
|
|
159
|
+
const status = decision.status === 'delivered' ? 'delivered' : 'retry';
|
|
160
|
+
const receiptId = decision.status === 'delivered' ? decision.receiptId : null;
|
|
161
|
+
return store.db.transaction(() => store.db.query(`UPDATE channel_op_reply_receipts
|
|
162
|
+
SET status = ?, transport_receipt = ?, updated_at = ? WHERE question_id = ? AND status IN ('sending', 'unknown')`)
|
|
163
|
+
.run(status, receiptId, new Date().toISOString(), questionId).changes === 1).immediate();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export interface StartChannelOpReplyRouteOptions {
|
|
167
|
+
transport: ChannelOpReplyTransport;
|
|
168
|
+
instance: string;
|
|
169
|
+
botId: string;
|
|
170
|
+
cursorPath?: string;
|
|
171
|
+
openReadStore?: () => MsgStore;
|
|
172
|
+
openWriteStore?: () => MsgStore;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/** Listen to the Telegram seat mailbox and route only linked OP replies. */
|
|
176
|
+
export function startChannelOpReplyRoute(options: StartChannelOpReplyRouteOptions): MsgStreamHandle {
|
|
177
|
+
const cursorPath = options.cursorPath ?? join(
|
|
178
|
+
elanousStateRoot(), 'msg', 'sse-cursor', `TELEGRAM-channel-op-replies-${options.botId}.json`,
|
|
179
|
+
);
|
|
180
|
+
return subscribeMsgStream({
|
|
181
|
+
address: 'TELEGRAM',
|
|
182
|
+
cursorPath,
|
|
183
|
+
pollMs: 500,
|
|
184
|
+
openStore: options.openReadStore ?? (() => openMsgStoreReadOnly()),
|
|
185
|
+
onMessage: async (message: Message) => {
|
|
186
|
+
if (message.to !== 'TELEGRAM' || message.from !== 'OP' || message.replyTo === undefined) return;
|
|
187
|
+
const store = (options.openWriteStore ?? (() => openMsgStore()))();
|
|
188
|
+
try {
|
|
189
|
+
const result = await deliverChannelOpReply(store, message.id, options.transport, { instance: options.instance });
|
|
190
|
+
if (result.status === 'unknown' || result.status === 'rejected' || result.status === 'held' || result.status === 'failed-permanent') {
|
|
191
|
+
debug.log('channel-op-reply-route', result.status, {
|
|
192
|
+
answerId: message.id,
|
|
193
|
+
reason: result.status === 'rejected' ? result.reason : undefined,
|
|
194
|
+
errorCode: result.status === 'failed-permanent' ? result.errorCode : undefined,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
} finally { store.close(); }
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
}
|
package/src/session/chat.ts
CHANGED
|
@@ -58,6 +58,8 @@ export interface RunTurnOpts {
|
|
|
58
58
|
/** Optional callback for each streamed text delta — telegram uses this to
|
|
59
59
|
* accumulate; CLI uses it to render live. */
|
|
60
60
|
onDelta?: (delta: string) => void;
|
|
61
|
+
/** Optional transient stream recovery status for the originating UI. */
|
|
62
|
+
onStatusLine?: (line: string) => void;
|
|
61
63
|
/** Optional provider override — for tests. */
|
|
62
64
|
provider?: LLMProvider;
|
|
63
65
|
/** Originating utterance surface. Omit only when the caller cannot
|
|
@@ -283,7 +285,8 @@ const childContextComposedSessions = new Set<string>();
|
|
|
283
285
|
export async function runTurn(opts: RunTurnOpts): Promise<RunTurnResult> {
|
|
284
286
|
const loaded = loadSession(opts.sessionId);
|
|
285
287
|
if (!loaded) throw new Error(`session not found: ${opts.sessionId}`);
|
|
286
|
-
const { meta
|
|
288
|
+
const { meta } = loaded;
|
|
289
|
+
let messages = loaded.messages;
|
|
287
290
|
|
|
288
291
|
// Memory injection: build the block once per turn, folded into the
|
|
289
292
|
// system prompt. Never fails loud — if the store isn't set up, we
|
|
@@ -366,6 +369,19 @@ export async function runTurn(opts: RunTurnOpts): Promise<RunTurnResult> {
|
|
|
366
369
|
};
|
|
367
370
|
appendMessage(opts.sessionId, userMsg);
|
|
368
371
|
|
|
372
|
+
const explicitTier = opts.llmOpts?.model ? undefined : explicitTurnTier(opts.userConfig, opts.sessionId);
|
|
373
|
+
const llmOpts = explicitTier ? {
|
|
374
|
+
...(opts.llmOpts ?? {}), model: explicitTier.model,
|
|
375
|
+
...(explicitTier.reasoningEffort && !opts.llmOpts?.reasoningEffort ? { reasoningEffort: explicitTier.reasoningEffort } : {}),
|
|
376
|
+
} : opts.llmOpts;
|
|
377
|
+
if (explicitTier) {
|
|
378
|
+
debug.log('llm.tier', 'turn-tier-applied', {
|
|
379
|
+
sessionId: opts.sessionId, tier: explicitTier.tier, source: explicitTier.source, model: explicitTier.model,
|
|
380
|
+
reasoningEffort: llmOpts?.reasoningEffort ?? null,
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
const provider = opts.provider ?? getProviderForConfig(opts.userConfig, llmOpts?.model);
|
|
384
|
+
|
|
369
385
|
// 2) Assemble, trim, call. When images are attached for THIS turn,
|
|
370
386
|
// swap the string content of the latest user message for
|
|
371
387
|
// ContentBlock[] so the provider adapter sends them multimodally.
|
|
@@ -384,18 +400,67 @@ export async function runTurn(opts: RunTurnOpts): Promise<RunTurnResult> {
|
|
|
384
400
|
return trimToBudget(wire, opts.maxTokens ?? DEFAULT_TOKEN_BUDGET);
|
|
385
401
|
};
|
|
386
402
|
|
|
387
|
-
|
|
388
|
-
const
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
403
|
+
let measuredProviderRequests = 0;
|
|
404
|
+
const requestSizeGuard: NonNullable<LLMOpts['requestSizeGuard']> | undefined =
|
|
405
|
+
meta.source === 'tui' && provider.name === 'openai-codex'
|
|
406
|
+
? {
|
|
407
|
+
maxChars: 400_000,
|
|
408
|
+
compactMessages: async (currentMessages) => {
|
|
409
|
+
// The first request has only the persisted transcript plus this
|
|
410
|
+
// user turn, so use the shared session compactor and rebuild from
|
|
411
|
+
// the rewritten history. Later tool rounds compact their live
|
|
412
|
+
// message list so no just-produced tool context is lost.
|
|
413
|
+
if (measuredProviderRequests === 0) {
|
|
414
|
+
const { compactSessionHistory } = await import('./compact-session.js');
|
|
415
|
+
const result = await compactSessionHistory(opts.sessionId, {
|
|
416
|
+
config: opts.userConfig.chat.autoCompact,
|
|
417
|
+
force: true,
|
|
418
|
+
modelId: llmOpts?.model ?? provider.defaultModel,
|
|
419
|
+
});
|
|
420
|
+
if (result.fired) {
|
|
421
|
+
const refreshed = loadSession(opts.sessionId);
|
|
422
|
+
if (refreshed) {
|
|
423
|
+
// The persisted compacted session includes this turn's
|
|
424
|
+
// user message. Drop that final persisted row here, then
|
|
425
|
+
// assembleTurnMessages re-adds the canonical userMsg and
|
|
426
|
+
// any image blocks from opts.userImages exactly once.
|
|
427
|
+
messages = refreshed.messages.slice(0, -1);
|
|
428
|
+
const rebuilt = assembleTurnMessages(effectiveSystemPrompt).kept;
|
|
429
|
+
return { messages: rebuilt, reason: `session-${result.reason}` };
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
const { runCompactPipeline } = await import('../compact/pipeline.js');
|
|
435
|
+
const { getDefaultCompactProvider } = await import('../compact/provider.js');
|
|
436
|
+
const compacted = await runCompactPipeline(currentMessages, {
|
|
437
|
+
sessionId: opts.sessionId,
|
|
438
|
+
provider: getDefaultCompactProvider(),
|
|
439
|
+
activeModelId: llmOpts?.model ?? provider.defaultModel,
|
|
440
|
+
policy: {
|
|
441
|
+
preserveLastN: opts.userConfig.chat.autoCompact.preserveLastN,
|
|
442
|
+
archiveEnabled: opts.userConfig.chat.compact.archiveEnabled,
|
|
443
|
+
},
|
|
444
|
+
});
|
|
445
|
+
const diagnostics = compacted.diagnostics;
|
|
446
|
+
const changed = diagnostics.layer1ResponsesTrimmed > 0
|
|
447
|
+
|| diagnostics.layer2MicrocompactCleared > 0
|
|
448
|
+
|| diagnostics.layer3SummaryApplied === 1
|
|
449
|
+
|| diagnostics.layer5FallbackTruncated === 1;
|
|
450
|
+
return changed
|
|
451
|
+
? { messages: compacted.messages, reason: 'live-request-compact' }
|
|
452
|
+
: null;
|
|
453
|
+
},
|
|
454
|
+
onMeasured: (measurement) => {
|
|
455
|
+
measuredProviderRequests += 1;
|
|
456
|
+
opts.onStatusLine?.(
|
|
457
|
+
`ctx ${measurement.requestChars.toLocaleString()} chars / ${measurement.maxChars.toLocaleString()}`
|
|
458
|
+
+ (measurement.compacted ? ` · compact ${measurement.reason}` : ''),
|
|
459
|
+
);
|
|
460
|
+
},
|
|
461
|
+
}
|
|
462
|
+
: undefined;
|
|
463
|
+
|
|
399
464
|
let kept: LLMMessage[] = [];
|
|
400
465
|
let dropped = 0;
|
|
401
466
|
let used = 0;
|
|
@@ -430,6 +495,9 @@ export async function runTurn(opts: RunTurnOpts): Promise<RunTurnResult> {
|
|
|
430
495
|
effectiveSystemPrompt = terminal.systemPromptParts.join('\n\n');
|
|
431
496
|
}
|
|
432
497
|
const turnLlmOpts = terminal ? terminal.llmOpts : llmOpts;
|
|
498
|
+
const guardedTurnLlmOpts = requestSizeGuard
|
|
499
|
+
? { ...(turnLlmOpts ?? {}), requestSizeGuard: turnLlmOpts?.requestSizeGuard ?? requestSizeGuard }
|
|
500
|
+
: turnLlmOpts;
|
|
433
501
|
({ kept, dropped, used } = assembleTurnMessages(effectiveSystemPrompt));
|
|
434
502
|
// Durable tool telemetry (추적성) — pair each call's args (onToolCall) with its
|
|
435
503
|
// result (onToolResult) and persist a role:'tool' message so later "어떤 도구
|
|
@@ -469,6 +537,8 @@ export async function runTurn(opts: RunTurnOpts): Promise<RunTurnResult> {
|
|
|
469
537
|
userText: opts.userText,
|
|
470
538
|
messages: kept,
|
|
471
539
|
tools: turnTools,
|
|
540
|
+
...(guardedTurnLlmOpts?.requestSizeGuard
|
|
541
|
+
? { requestSizeGuard: guardedTurnLlmOpts.requestSizeGuard } : {}),
|
|
472
542
|
dispatchTool: async (name, args, ctx) => dispatchTool(name, args, ctx),
|
|
473
543
|
signal: opts.signal ?? new AbortController().signal,
|
|
474
544
|
callbacks: {
|
|
@@ -489,6 +559,8 @@ export async function runTurn(opts: RunTurnOpts): Promise<RunTurnResult> {
|
|
|
489
559
|
},
|
|
490
560
|
...(turnLlmOpts?.model ? { modelOverride: turnLlmOpts.model } : {}),
|
|
491
561
|
...(turnLlmOpts?.budgetGrant ? { budgetGrant: turnLlmOpts.budgetGrant } : {}),
|
|
562
|
+
...(guardedTurnLlmOpts?.requestSizeGuard
|
|
563
|
+
? { requestSizeGuard: guardedTurnLlmOpts.requestSizeGuard } : {}),
|
|
492
564
|
};
|
|
493
565
|
const maxIterations = opts.goalLoopMaxIterations ?? goalLoopCfg?.maxIterations;
|
|
494
566
|
const gl = await runGoalLoop(coreCtx, maxIterations !== undefined ? { maxIterations } : {});
|
|
@@ -500,6 +572,7 @@ export async function runTurn(opts: RunTurnOpts): Promise<RunTurnResult> {
|
|
|
500
572
|
onText: (delta /*, full */) => {
|
|
501
573
|
opts.onDelta?.(delta);
|
|
502
574
|
},
|
|
575
|
+
onStatus: (line) => { opts.onStatusLine?.(line); },
|
|
503
576
|
dispatchTool: async (name, args, ctx) => dispatchTool(name, args, ctx),
|
|
504
577
|
onToolCall: (call) => { toolCallArgs.set(call.id, call.args); opts.onToolCall?.(call); },
|
|
505
578
|
onToolResult: (call) => {
|
|
@@ -510,7 +583,7 @@ export async function runTurn(opts: RunTurnOpts): Promise<RunTurnResult> {
|
|
|
510
583
|
},
|
|
511
584
|
},
|
|
512
585
|
{
|
|
513
|
-
...(
|
|
586
|
+
...(guardedTurnLlmOpts ?? {}),
|
|
514
587
|
tools: turnTools,
|
|
515
588
|
provider,
|
|
516
589
|
// ★ /cancel 범용화(대표 2026-07-12) — per-turn abort signal 을 tool 루프·llm 호출에 전파.
|
|
@@ -524,7 +597,11 @@ export async function runTurn(opts: RunTurnOpts): Promise<RunTurnResult> {
|
|
|
524
597
|
}
|
|
525
598
|
} else {
|
|
526
599
|
({ kept, dropped, used } = assembleTurnMessages(effectiveSystemPrompt));
|
|
527
|
-
const plainOpts =
|
|
600
|
+
const plainOpts = {
|
|
601
|
+
...(llmOpts ?? {}),
|
|
602
|
+
...(requestSizeGuard ? { requestSizeGuard: llmOpts?.requestSizeGuard ?? requestSizeGuard } : {}),
|
|
603
|
+
...(opts.signal ? { signal: opts.signal } : {}),
|
|
604
|
+
};
|
|
528
605
|
const stream = provider.streamChat
|
|
529
606
|
? provider.streamChat(kept, plainOpts)
|
|
530
607
|
: wrapTextOnly(provider.chat(kept, plainOpts));
|
package/src/session/index.ts
CHANGED
|
@@ -243,6 +243,8 @@ export interface SessionMeta {
|
|
|
243
243
|
* **no runtime effect today** — placeholder for schema stability so
|
|
244
244
|
* future coordinator does not require a migration pass. */
|
|
245
245
|
retiredAt?: string | null;
|
|
246
|
+
/** Per-session Next TUI presentation preferences. */
|
|
247
|
+
uiState?: { sidetabOpen?: boolean };
|
|
246
248
|
}
|
|
247
249
|
|
|
248
250
|
/** Runtime channel attachments. Each key is optional; presence means
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { buildGitSnapshot } from '../git-fs/index.js';
|
|
2
2
|
import { debug } from '../debug/log.js';
|
|
3
|
+
import { isResearchAgentIntent } from '../tool-hints/signals.js';
|
|
3
4
|
import { resolve } from 'node:path';
|
|
4
5
|
import type { ModelFamily } from '../models/prompts.js';
|
|
5
6
|
import type { InputSourceKind, InputSourceRef } from '../input/input-source-kind.js';
|
|
@@ -127,6 +128,13 @@ export interface SessionTurnProfile {
|
|
|
127
128
|
inputSourceKind: InputSourceKind | null;
|
|
128
129
|
}
|
|
129
130
|
|
|
131
|
+
/** A date anchor for research answers. Keep this local to the turn so a
|
|
132
|
+
* long-lived session never presents yesterday as today's date. */
|
|
133
|
+
export function buildResearchDateSystemMessage(now = new Date()): LLMMessage {
|
|
134
|
+
const localDate = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}`;
|
|
135
|
+
return { role: 'system', content: `Current local date: ${localDate}. Verify dates in sources; do not infer freshness from an undated result.` };
|
|
136
|
+
}
|
|
137
|
+
|
|
130
138
|
export interface SessionModeSnapshot {
|
|
131
139
|
rawMode: ChatModeState['mode'];
|
|
132
140
|
activeIntent: string | null;
|
|
@@ -2412,27 +2420,6 @@ const WEB_SEARCH_PROVIDER_TERMS = [
|
|
|
2412
2420
|
'claude',
|
|
2413
2421
|
] as const;
|
|
2414
2422
|
|
|
2415
|
-
const DEEP_RESEARCH_INTENT_TERMS = [
|
|
2416
|
-
'research',
|
|
2417
|
-
'deep research',
|
|
2418
|
-
'triangulate',
|
|
2419
|
-
'compare sources',
|
|
2420
|
-
'multiple sources',
|
|
2421
|
-
'community reaction',
|
|
2422
|
-
'reddit reaction',
|
|
2423
|
-
'x reaction',
|
|
2424
|
-
'trend',
|
|
2425
|
-
'sentiment',
|
|
2426
|
-
'여러 소스',
|
|
2427
|
-
'깊게 조사',
|
|
2428
|
-
'리서치',
|
|
2429
|
-
'반응',
|
|
2430
|
-
'트렌드',
|
|
2431
|
-
'여론',
|
|
2432
|
-
'비교 조사',
|
|
2433
|
-
'교차검증',
|
|
2434
|
-
] as const;
|
|
2435
|
-
|
|
2436
2423
|
const WEB_FETCH_INTENT_TERMS = [
|
|
2437
2424
|
'http://',
|
|
2438
2425
|
'https://',
|
|
@@ -2647,7 +2634,7 @@ function hasWebSearchExposureIntent(text: string): boolean {
|
|
|
2647
2634
|
}
|
|
2648
2635
|
|
|
2649
2636
|
function hasResearchSearchIntent(text: string): boolean {
|
|
2650
|
-
return
|
|
2637
|
+
return isResearchAgentIntent(text);
|
|
2651
2638
|
}
|
|
2652
2639
|
|
|
2653
2640
|
function hasWebFetchIntent(text: string): boolean {
|