elanous 0.2.43 → 0.2.44
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/{Om5xS9jpjSXJCeTNGYEi4 → HMXsxdy5MIIcHPMHv1wD4}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{3557ac4a.c8931684475018ad.js → 08334415.f0e80896acbef722.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1032-78ba4f6391258cab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1082-53f86a26e03d309d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1109-7d0e264f6f2edbc7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1124-7c26330402481143.js +1 -0
- package/apps/pwa/out/_next/static/chunks/118.2a89982fe4276880.js +23 -0
- package/apps/pwa/out/_next/static/chunks/1244.6c435dbf1bf21d8a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1252.9e665904d3aa3b1a.js +32 -0
- package/apps/pwa/out/_next/static/chunks/1266.a46cc33cb6a72d75.js +104 -0
- package/apps/pwa/out/_next/static/chunks/{3955.6922286237f2ac2b.js → 1306.967240ede9a0f757.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/1344.3b95f3bd1b77a3fe.js +94 -0
- package/apps/pwa/out/_next/static/chunks/{5628.6ddb2d5ffba4ff4c.js → 1401.22dfe92640a2b1ac.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/1431-f7c78bd5be21e011.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1451-cdd35a8a0b31834b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2573.387a707f6f9d720c.js → 1694.18debfd77562e56d.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/1708-f03d587b7a7545c8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1775-fa7152bdeff6c95f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/178-4da509cd7266672a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7910-6f139bcafd238b9f.js → 1850-522de4ee34957210.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1876-c6f6e0ddcc76c6a1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1976.097066b072432242.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1406.a1dc2ab6f8449374.js → 1978.eeb60a606dc5deac.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{3402.44b565b314f2263c.js → 2043.e233e3b5a3e790f5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2150.71b94e3348107c83.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2158.ebc6fc5a10280ab7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3694.e0099884345f0198.js → 2216.802962c04f40a26e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2294.7890edcfa046c97d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/235.c89aaae4bcd6233a.js +74 -0
- package/apps/pwa/out/_next/static/chunks/239.de075467b5523469.js +287 -0
- package/apps/pwa/out/_next/static/chunks/{1200.6a37c202f9f17e9a.js → 249.ba7051590d603c8f.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/2571.a6ac4e26c8618403.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2610.e149cd564a08913e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2705.9816f3c244f8b85f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2801.afeb8a4dae22f85f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3935.16701e33f8982dc9.js → 2954.bbefc95d6b20e0d8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{aa57532f.510551854ff239b1.js → 2e0f720a.a0697c08e3806a60.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3042.96ec235fe41c8d4e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3097-8e358f158acef46b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3205-93b1abe28b4fb16a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3273.b4434f0dcae7eb29.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3311.9cbc43ea0c90d60c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5930.8b4df3b46c32b05a.js → 3349.b5f09ee474d9533e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{5866.366966af47fdde5d.js → 3503.a47a9755fb4d97b0.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3506-5f429b3b7e1392b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7900.096f455c7c1efc53.js → 3843.bad404d008893291.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/3877-4b40e530b47e3bf9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/435-ce2958253cf7de61.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8588.d1c6a2903727ce87.js → 4393.28fa5228d0eec217.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/4404.7281c847c6e10dfc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8062-7cd0bcc7f01455ba.js → 4415-b9d6a90960920a4a.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{8313-dfa1021bb58a46d6.js → 447-5b304de1fe098f43.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4484-8ebea83d431e6fae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6944.309f4e3ea54d1537.js → 4502.bdcc877abd437a05.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4599-f95790fc5c65b8df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3072.01338851ca21a6f7.js → 46.57c783fa4884714f.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/463-b9114e411f33728e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4659.a57d1f0c5d754cd2.js +36 -0
- package/apps/pwa/out/_next/static/chunks/4722-a847e7a28115035f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8986.8e2e4efbfa655c59.js → 4757.67c6d7473a038e78.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4874-c86f878ec4502ad3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4891.3f80ba517a3b2373.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8205.282ca4bb62d54a0a.js → 4998.810ca8833084caa9.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/4f98febc.ea5841d4d616bfb2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5789.2da35c258292e1e5.js → 5052.7dbb12a55d4f18f5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5166-ca73b3e361085a6d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5180-039f4a18b07ad387.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5232.5a2ce4daf7a9e11d.js +115 -0
- package/apps/pwa/out/_next/static/chunks/{9770.5f75bc6088b16109.js → 5439.3fec6dbce29ecb36.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{1313-19f737e0222c4444.js → 5612-074d9a5e00dfac6a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5675-01989d524a84c505.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5751.af641a1adf5ec697.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5758-c6cb98714d18ab0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/578eded8.b582637306e16964.js +122 -0
- package/apps/pwa/out/_next/static/chunks/{3969.272ee7f9fd6c62e5.js → 5790.5eb06a653ebd8571.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5853-4033e5bd5afbe06b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5904.97d70bb7f46b2db7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6540.c7bef57ad8f90a87.js → 5989.7ecd362c5c44b747.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{0ad6802e.ae7afb63fdcb4491.js → 5a34fb2f.52f1b4e1baebb48a.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{0966f8a1.745fcd44f64a87ea.js → 5a5078f8.2099200e5ea95e16.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6036-c302c34ff0b3d410.js +1 -0
- package/apps/pwa/out/_next/static/chunks/606.ef81c313381f4264.js +1 -0
- package/apps/pwa/out/_next/static/chunks/616.1af54a928b1ba704.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6201.bc936f71f613a8e9.js +41 -0
- package/apps/pwa/out/_next/static/chunks/6204-fdc86e0e64c4f92d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2144.25b292396712196d.js → 6245.1182e007e9d230d9.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{363bfab3.9623b9f89363541f.js → 63699a35.17262e162bc514b2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6420.494801a80030160c.js +27 -0
- package/apps/pwa/out/_next/static/chunks/{d96660fb.cbc21a2a88539dbb.js → 6549dad0.2740b25e51bf8f05.js} +7 -7
- package/apps/pwa/out/_next/static/chunks/{5564.9e72532188f57586.js → 6881.9e7955847640c7fe.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/6931.fcdfb94141e67b3d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6991-8e081c6ce38c0ba1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3903.3ef4656c67572764.js → 7010.1bbd17a7f2b3e376.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7029.d1466acf55fae2ed.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7152-a123aa8e129c131f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7455.196168fffac3b9c4.js +24 -0
- package/apps/pwa/out/_next/static/chunks/7638.6ca4770dd1129138.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7649-f37d76260e5e2a5a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2312.0c8b61e22d3136d7.js → 7679.32c40cdd14f20b4a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7751.04bfbd16b4c6cd0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7864.b1ff31d4030b8994.js +148 -0
- package/apps/pwa/out/_next/static/chunks/7869-c47bd2c075c1fefa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4199.ce86b281fd0a60b7.js → 8442.2f09ca969d631615.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8445.2738dbd59a78c78c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8447.5510c439f9938c6d.js +286 -0
- package/apps/pwa/out/_next/static/chunks/8551.f762945c2cda2e95.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8635-57a9d8d9db70f4f1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{fb7d20d5-6892502b6ee39ca6.js → 86961958-4b0689a5048f756b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8709.3c6019bb18f8554f.js +8 -0
- package/apps/pwa/out/_next/static/chunks/8759.c999528a0a907bf6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/87f498e5-0881de09f2e44707.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8843.c3197f904c952b81.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{cb0f8df8.09a4a6be97e3fc5f.js → 892fd990.456232f326cc39c2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{837-81336ebaca8198a8.js → 8965-135a2c9eaa2464cb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8971-8d3b9c96f8a6c958.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9059.c8598d96f8e5e9cd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9115.90447ae198b84eae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9147.d9b0a02e0babc9b4.js +93 -0
- package/apps/pwa/out/_next/static/chunks/9204-83075f4b70c61cdc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9244-c32ef14b5dc72bdf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/930.2a9a30f964350c66.js +90 -0
- package/apps/pwa/out/_next/static/chunks/{8637.90f92d5c8db4732c.js → 9398.1f56e3f17795f43f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9527.3e5ad31c891c5fcb.js +79 -0
- package/apps/pwa/out/_next/static/chunks/9571-4ac933e774d1225c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-9fc644de2d8edae3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-0c9dace2db62bee8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-f5e65c3dc9d89f2a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-2a9c19b9a140b7b1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-61533ad92141adfb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-112004ced6fd0329.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-f733318c237a49d8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-51ea677d2d33bbc0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-428b41f2f9566e3c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-1b29396ea90a61e5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-cf83ec613ac904bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-3f4c0ecbc284bb5f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-b63c322f54f70cc6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-fe328c4ee9aac6b4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-bfb855c584f0fb98.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-9fc644de2d8edae3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-47b1710c110eabd7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-42895214458bc6d2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-d03de0ebd8366e23.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-3ed6c47e4b1c61c2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-ae653e9bf261c738.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-23f3f0a0209c0ac4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-88c691273aae66f9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-e187ac52a95538b3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-6e45828daed1295e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-edb5d7287bb46186.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-4a7eaacd93c3f6a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-3ca073d43d74cc84.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-1e9fee67b1199436.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-df1283ea963c6816.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-19fcf8d8301ccd18.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-5ab699e0303bbb40.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-7cde0d29756984c5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-9d4c598e8ee22f7a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-cc1609a71f44ec62.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-7659a9a1345bfaa9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-0afef60ecc0c4af5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-a3553949f8f34f5f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-9fc644de2d8edae3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-057a69702f3c67c7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-c0f0e570f3f74c73.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-1825071ae34e3b89.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-6244e3e135d8ccfc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/{page-0a815f34367b6db6.js → page-da787e8a10b8a82e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-1316d32498e2be42.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-4df94572e343de2e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-708969f7475e88c1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-c58add08c919a1dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-a24847f45e5d5bf9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-acfec65a3a60e22e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-3dfc598e6fbde245.js +1 -0
- package/apps/pwa/out/_next/static/chunks/framework-c658a626118411b7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-4c73685fd891445b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-6310f7e5de7dd01d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-51c326bf48610be1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-d0beadf754da59b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-acd243bfbf3f6732.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/overlays/README.md +6 -0
- package/graphs/release/release-loop.yaml +33 -17
- package/graphs/units/verbs/make-doc.yaml +1 -0
- package/package.json +1 -1
- package/scripts/bench-metering-plan.ts +229 -0
- package/scripts/demo/demo1104-parallel-host.ts +56 -0
- package/scripts/demo/demo1104-parallel.ts +72 -0
- package/scripts/public-leak-baseline.txt +0 -1
- package/scripts/release-loop/docs-node.ts +4 -2
- package/scripts/release-loop/gate-image-pin.ts +116 -2
- package/scripts/release-loop/gate-node.ts +217 -25
- package/scripts/release-loop/gate-progress-sim.ts +73 -0
- package/scripts/release-loop/notes-repair.ts +18 -1
- package/scripts/release-loop/preflight.ts +188 -8
- package/scripts/release-loop/render-warm-control-manifest.ts +22 -0
- package/scripts/release-loop/resume-release.ts +9 -7
- package/scripts/release-loop/resume.ts +13 -4
- package/scripts/release-loop/warm-control-forward.ts +178 -0
- package/scripts/retro-cycle.ts +30 -8
- package/scripts/rhythm/daily.ts +4 -1
- package/scripts/rhythm/linear-progress-sync.ts +28 -15
- package/scripts/ux-sim.ts +7 -1
- package/scripts/warm-pool-provider-config.ts +6 -1
- package/src/agent-mission/grok-auth-status.ts +78 -18
- package/src/agent-mission/mission-out.ts +2 -2
- package/src/agent-substrate/pr-reviewer.ts +147 -11
- package/src/agent-substrate/self-review-cli.ts +10 -2
- package/src/auto-research/research-fanout.ts +221 -0
- package/src/auto-research/research-turn.ts +282 -36
- package/src/autopilot/mission-codebase-gate.ts +7 -3
- package/src/cli/control-cli.ts +15 -6
- package/src/cli/log-event-names.ts +8 -0
- package/src/cli/setup-keys.ts +20 -8
- package/src/cli/tui-test-cli.ts +9 -5
- package/src/control-plane/ledger.ts +42 -4
- package/src/control-plane/member-tokens.ts +25 -2
- package/src/control-plane/ports.ts +8 -3
- package/src/control-plane/server.ts +26 -5
- package/src/core-turn/research-policy.ts +7 -1
- package/src/core-turn/run-core-turn.ts +186 -39
- package/src/core-turn/types.ts +2 -0
- package/src/dashboard/classic-sidetab-mission-job.ts +113 -24
- package/src/dashboard/classic-sidetab-mission-pair.ts +3 -2
- package/src/dashboard/classic-sidetab-mission-trio.ts +35 -12
- package/src/dashboard/classic-sidetab-mission.ts +2 -0
- package/src/dashboard/index.ts +9 -1
- package/src/dashboard/sidetab-runtime.ts +2 -0
- package/src/dashboard/visible-mission-diagnostics.ts +16 -0
- package/src/domains/retro-cycle-observation.ts +43 -0
- package/src/domains/retro-cycle.ts +13 -2
- package/src/domains/retro-proposals.ts +92 -0
- package/src/domains/retro-report.ts +6 -1
- package/src/graph-runner/graph-cli.ts +24 -1
- package/src/graph-runner/graph-grow-llm.ts +3 -1
- package/src/graph-runner/runner.ts +226 -30
- package/src/harness/harness-cli-command.ts +4 -2
- package/src/harness/harness-pod-dispatch.ts +3 -0
- package/src/index.ts +2 -2
- package/src/llm/child-first-llm-observation.ts +112 -0
- package/src/llm/provider-credentials.ts +60 -4
- package/src/llm/provider-failure-evidence.ts +44 -0
- package/src/llm.ts +170 -11
- package/src/mcp/client.ts +7 -0
- package/src/mcp/proxy-runtime.ts +6 -1
- package/src/mcp/server.ts +54 -0
- package/src/native-tool-catalog.ts +2 -2
- package/src/nexus/api/consult-requests.ts +18 -6
- package/src/nexus/api/discord-trigger-bot.ts +6 -6
- package/src/nexus/api/graphs-api.ts +4 -2
- package/src/nexus/api/grokbot-trigger-bot.ts +206 -0
- package/src/nexus/api/telegram-trigger-bot.ts +6 -6
- package/src/nexus/boot/register-mcp-clients.ts +114 -8
- package/src/nexus/index.ts +15 -0
- package/src/nexus/outbound/grokbot-adapter.ts +71 -0
- package/src/nexus/outbound/router.ts +33 -13
- package/src/oauth/codex-owner-mirror.ts +47 -10
- package/src/onboarding/first-run.ts +44 -6
- package/src/preview/terminal.ts +22 -7
- package/src/prompt-enhance/enhance.ts +10 -0
- package/src/pty-shell/pty-write-provenance.ts +21 -3
- package/src/pty-shell/registry.ts +9 -2
- package/src/release-loop/proposal-auto-place.ts +83 -0
- package/src/research/axis-fanout.ts +40 -5
- package/src/research/lenses/second-order.ts +312 -0
- package/src/self-dev/dev-cli.ts +3 -1
- package/src/self-dev/draft-sweep.ts +31 -10
- package/src/self-dev/draft-triage-rules.ts +60 -3
- package/src/self-dev/run-supervisor.ts +152 -2
- package/src/self-implement/goal-author.ts +208 -23
- package/src/self-implement/graph-overlay-yaml.ts +151 -0
- package/src/self-implement/graph-yaml.ts +68 -2
- package/src/self-implement/orchestrator.ts +62 -15
- package/src/self-implement/test-scenario-request.ts +37 -6
- package/src/session/chat.ts +2 -2
- package/src/session-runtime/index.ts +37 -5
- package/src/sidetab-core/model.ts +205 -10
- package/src/sidetab-core/visible-agent-mission-pair.ts +51 -0
- package/src/sidetab-core/visible-agent-mission.ts +105 -47
- package/src/skills/tools/omni-search.ts +4 -2
- package/src/task-agent/parent-host.ts +19 -1
- package/src/task-agent/recall-inject.ts +98 -0
- package/src/task-agent/task-hand.ts +26 -7
- package/src/task-orchestrator/surfaces/pod-artifact-return.ts +19 -1
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +15 -0
- package/src/task-orchestrator/surfaces/pod-si-warm-host.ts +21 -9
- package/src/task-orchestrator/surfaces/pod-warm-worker-pod.ts +1 -1
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +460 -96
- package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +45 -3
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +38 -8
- package/src/tool-hints/gate.ts +45 -14
- package/src/tool-hints/signals.ts +1 -1
- package/src/tool-hints/types.ts +2 -0
- package/src/tool-runtime/browser-hand-runtime.ts +11 -1
- package/src/tool-runtime/browser-runtime.ts +31 -18
- package/src/tool-runtime/elanous-linear-secretary-runtime.ts +152 -36
- package/src/tool-runtime/types.ts +2 -0
- package/src/tui/entry.ts +27 -7
- package/src/tui/sidetab/attach.ts +112 -0
- package/src/tui/sidetab/list.ts +3 -2
- package/src/tui-client/next-dashboard-runtime.ts +52 -0
- package/src/ux-sim/draft-inventory-builder.ts +2 -1
- package/src/ux-sim/linear-secretary.ts +4 -12
- package/src/ux-sim/mock-scenario-catalog.json +32 -29
- package/src/ux-sim/mock-scenario-catalog.ts +55 -3
- package/src/ux-sim/release-sim-rig.ts +62 -18
- package/src/ux-sim/service-key-setup.ts +63 -0
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/114.2b90424d1a3ce84c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1151-5c2bb8f002ca2dd6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1261-a616d5728e02e624.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1357.3bbef3976c37f94a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1362-20adddfaf662b0fa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1737-9491fc6ab29b9ec6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1803-4f91a8e7dcaf042c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1961.a81b12872c3e93a9.js +0 -23
- package/apps/pwa/out/_next/static/chunks/1970cf59.2d4d8ce5d6c81853.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1971-8890f3962ba7ee0a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2073-ba274e00e4f9efb4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2268-53861f339e0b65a2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/273.f156eee28f11af77.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2873.d2140e5a82546401.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3091.a5a4143dea33d197.js +0 -90
- package/apps/pwa/out/_next/static/chunks/3095.dc44586a5f83b86d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3113.d7472bbc27d580c7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3228-9650b6447b6fa288.js +0 -1
- package/apps/pwa/out/_next/static/chunks/360.ae9f9f4c33c395e8.js +0 -79
- package/apps/pwa/out/_next/static/chunks/3638.80412ea63aae8f3f.js +0 -286
- package/apps/pwa/out/_next/static/chunks/3744.54f87db52acfd1ab.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4311-6dd3144002cc0c2d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4426-2b230fad00c88930.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4445.7990c76b3751a918.js +0 -115
- package/apps/pwa/out/_next/static/chunks/4447-14c5161fa59166c7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4856-b0b8075bba8c53f4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4870-de370d65e73c0bb5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4885-2c989165c4b29fad.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4894.fec2ca9e99caefa2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5093.8f04b7f8cb899a95.js +0 -94
- package/apps/pwa/out/_next/static/chunks/5122-2bb177cebf89e19a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5154.5f56dc3902e3d275.js +0 -36
- package/apps/pwa/out/_next/static/chunks/529.64ff7257180b2ac9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5394.5dabeb0c62293a28.js +0 -93
- package/apps/pwa/out/_next/static/chunks/5461.08bf2404ff38ec85.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5474-22e08a85583209b2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5567-265df39ed8fe9dcb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5570-a94ae19811cb2046.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5574-b47c9ef2dceff1fd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5730.43d7ccc09988e646.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5824.da9527b15a3221e5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5963-c4d8469c52a0828b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6001.ec4049ceb3c43418.js +0 -27
- package/apps/pwa/out/_next/static/chunks/6120-471f03db1e299c0c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6175-41479e643aca1878.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6291.a2de4f9787637075.js +0 -104
- package/apps/pwa/out/_next/static/chunks/6400-6699907c3537436a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6428.1f4327d6ae5fdf9a.js +0 -287
- package/apps/pwa/out/_next/static/chunks/644.02cb026fa44bcd0a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6466-6c87d60d3dd174fb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6773.d4264665ab31bec0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6822.3c789f1a8443e774.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7261-8ff69d3b2ee671fd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7266.084c6bbc70035140.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7271.5c0100e7320aa856.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7429-bf5731358c8f2f68.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7464.01f7a0ae1215fbe7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7479.0fcad5f37eb64f0c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7483.427a2fe2049e388d.js +0 -148
- package/apps/pwa/out/_next/static/chunks/7502-be74718178e13e56.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7530.0889722b19572065.js +0 -24
- package/apps/pwa/out/_next/static/chunks/7645.5b2ee3ad45c55ea3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7788.7d1c79f1a8e18946.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7966.f71c8958d1637548.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8073.f6cf2f2c71aafbd0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8201.190b94088980f430.js +0 -74
- package/apps/pwa/out/_next/static/chunks/8447.7963352ef5f71b76.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8574-868e8129525ef6d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/868.6e953be05bcf6dca.js +0 -41
- package/apps/pwa/out/_next/static/chunks/8706-e1fe0309343a2273.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8749-06384cdfc4520add.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8861-cc1fa1c7b920fa8e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8967-7dfebf710c9dec9d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8997-3c564dbb3b58b055.js +0 -1
- package/apps/pwa/out/_next/static/chunks/923.2034d10ae91e9c20.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9312.bc1b89c5d4368033.js +0 -1
- package/apps/pwa/out/_next/static/chunks/943.39ae5e82f4f1893f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9469.0500480de55fb205.js +0 -32
- package/apps/pwa/out/_next/static/chunks/9810-2543267050e58b82.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9870.8419702475254745.js +0 -8
- package/apps/pwa/out/_next/static/chunks/9941-376d1b74d51b01a4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9958.385434ab04241758.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-deea1450b17cb8dc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-70985b904f8650ef.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-a2e15e33e56a4353.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-fc72ce2db12d6ca9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-be03e41f9436ebd9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-35a35999382da3f2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-3ff5b1e6ca88b848.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-a65101300a0ee5c1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-3aca5b6d67dba511.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-45b8ab0a71e61314.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-53046e282d4cda8e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-17809e60e8354c17.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-fd2442d347bf5898.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-e9d720d6fc082e21.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-6b8b4267bab0a677.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-deea1450b17cb8dc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-8bcf6233ac7c17af.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-7cc25591cfc2126f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-053e871f35c9beba.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-eff819f0c2d5e084.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-4d7e9d8db5274a87.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-2b2d8f5aa5f69ad4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-0b8f92c5062e68b1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-1bd9d0fdac2ced3d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-9ee28f7df07428ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-44b7a1ff468c6648.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-cbc6523711dc1b65.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-fdad47899c2695be.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-79a8b5fee4c20871.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-03e8ac9606aeaffb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-4cd55c55ec287e2f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-db17b4305404161e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-30041d848350fd02.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-c540da022dbf86b0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-9399efc538da057f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-ca2d09128c585ca4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-0e2635aecd343038.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ef7f4399b6b7726e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-deea1450b17cb8dc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-caf530535b875468.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-eaa20c1543a5fd8e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c541eb1b75120f61.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-ab5e213eda9479f4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-e858ba0ed9393b68.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-1638ee9dd6e0582f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-4cf5a399109391f2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-b4396321238798ec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-cb72bfd21006781a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-6135d0242afbc434.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-a1dccf907eddb856.js +0 -1
- package/apps/pwa/out/_next/static/chunks/c7945435-b44d4dbe90ba0dcb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/ea514caa.05a24f78d9dffe5f.js +0 -122
- package/apps/pwa/out/_next/static/chunks/framework-e8a911e19b1be41f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-7022f418fabba021.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-e5f15df755756a1e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-4525f91e36940c9b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-140f0e519c085b0f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-8f22ef63dcb865b1.js +0 -1
- /package/apps/pwa/out/_next/static/{Om5xS9jpjSXJCeTNGYEi4 → HMXsxdy5MIIcHPMHv1wD4}/_ssgManifest.js +0 -0
|
@@ -8,7 +8,7 @@ export type { SupervisorStopReason } from './run-types.js';
|
|
|
8
8
|
export { SUPERVISOR_STOP_REASONS } from './run-types.js';
|
|
9
9
|
import { recordSelfDevRunSupervisorStop, selfDevRunsDir } from './run-store.js';
|
|
10
10
|
import { readRunChart, recordRunChartDecision } from '../self-implement/run-chart.js';
|
|
11
|
-
import { runLedgerDir } from '../self-implement/run-ledger.js';
|
|
11
|
+
import { loadRunLedger, runLedgerDir } from '../self-implement/run-ledger.js';
|
|
12
12
|
import { debug } from '../debug/log.js';
|
|
13
13
|
import { sweepFrozenMerges } from '../self-implement/frozen-merges.js';
|
|
14
14
|
import { selectKnowhowPack } from '../self-implement/knowhow-pack.js';
|
|
@@ -105,6 +105,25 @@ interface DecomposePromotionObservation {
|
|
|
105
105
|
hotPathEdges?: number;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
+
export interface SupervisorReauthorObservation {
|
|
109
|
+
round: number;
|
|
110
|
+
classifications: Array<{ taskId: string; text: string; kind: 'code-defect' | 'authorship-defect'; action: 'must-fix' | 'scope-reduction-fu' }>;
|
|
111
|
+
prescription: {
|
|
112
|
+
outcome: '부분 착지 + FU';
|
|
113
|
+
narrowedProposal: string;
|
|
114
|
+
partialLanding: string;
|
|
115
|
+
followUp: {
|
|
116
|
+
lane: 'REVIEW-ROUND-REAUTHOR-FU';
|
|
117
|
+
goalId: string;
|
|
118
|
+
feature: string;
|
|
119
|
+
targetPaths: string[];
|
|
120
|
+
completionBoundary: string;
|
|
121
|
+
mockScenarioId: string;
|
|
122
|
+
mockScenario: { id: string; injection: string; observation: string };
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
108
127
|
export interface SupervisorDecision {
|
|
109
128
|
action: 'relaunch' | 'add-repair-task' | 'stop';
|
|
110
129
|
stopReason?: SupervisorStopReason;
|
|
@@ -130,6 +149,8 @@ export interface SupervisorDecision {
|
|
|
130
149
|
reviewMustFixTrend: ReviewRework['trend'];
|
|
131
150
|
/** REVIEW-MUSTFIX-CLASSIFY — this round's leading must-fix class (② › ③ observed › ①); omitted when unmeasured (지금 동작 그대로). */
|
|
132
151
|
mustFix?: MustFixRoundClassification;
|
|
152
|
+
/** REVIEW-ROUND-REAUTHOR — supervisory reauthoring decision, omitted for ordinary/legacy rounds. */
|
|
153
|
+
reauthor?: SupervisorReauthorObservation;
|
|
133
154
|
/** REVIEW-MUSTFIX-CLASSIFY — every oscillating task's measured class, so a mixed round keeps each task's decision. */
|
|
134
155
|
mustFixByTask?: Record<string, MustFixRoundClassification>;
|
|
135
156
|
/**
|
|
@@ -367,6 +388,70 @@ function mustFixFromResults(results: readonly SupervisorJobResult[]): MustFixRou
|
|
|
367
388
|
return items.length > 0 ? { items } : {};
|
|
368
389
|
}
|
|
369
390
|
|
|
391
|
+
function authoringDefect(text: string): boolean {
|
|
392
|
+
return /(?:불필요한\s*(?:경계|목표)|아직\s*없는\s*(?:부품|운영|배선)|미구현\s*(?:부품|운영|배선)|실물\s*전제|미래\s*가정|out[- ]of[- ]scope|not yet existing|future assumption)/iu.test(text);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
function repeatedMustFix(text: string, taskId: string, history: readonly SupervisorRound[]): boolean {
|
|
396
|
+
const normalized = text.trim().replace(/\s+/gu, ' ').toLowerCase();
|
|
397
|
+
return history.filter((round) => round.mustFix?.items?.some((item) => item.taskId === taskId
|
|
398
|
+
&& item.text.trim().replace(/\s+/gu, ' ').toLowerCase() === normalized)).length >= 1;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
function reauthorObservation(results: readonly SupervisorJobResult[], history: readonly SupervisorRound[]): SupervisorReauthorObservation | undefined {
|
|
402
|
+
const reviewed = results.flatMap((result) => (result.reviewMustFix ?? []).map((text) => ({ result, text })));
|
|
403
|
+
if (!reviewed.length) return undefined;
|
|
404
|
+
const rounds = Math.max(...reviewed.map(({ result }) => result.rework?.rounds ?? 0));
|
|
405
|
+
const classified = reviewed.map(({ result, text }) => ({ result, text, authored: authoringDefect(text) }));
|
|
406
|
+
const triggered = classified.some(({ result, text }) => (result.rework?.rounds ?? 0) > 3
|
|
407
|
+
|| repeatedMustFix(text, result.taskId, history));
|
|
408
|
+
if (!triggered) return undefined;
|
|
409
|
+
const round = Math.max(rounds, history.length + 1);
|
|
410
|
+
const classifications = classified.map(({ result, text, authored }) => ({
|
|
411
|
+
taskId: result.taskId, text, kind: authored ? 'authorship-defect' as const : 'code-defect' as const,
|
|
412
|
+
action: authored ? 'scope-reduction-fu' as const : 'must-fix' as const,
|
|
413
|
+
}));
|
|
414
|
+
const authored = classified.filter((item) => item.authored);
|
|
415
|
+
const targetPaths = [...new Set(authored.flatMap(({ result }) => result.targetPaths ?? []))];
|
|
416
|
+
const narrowedProposal = authored.length
|
|
417
|
+
? `골·칸·시험에서 제거: ${authored.map(({ text }) => text).join(' · ')}`
|
|
418
|
+
: '현재 목표와 완료 경계에 한정하고 리뷰에서 확인된 코드 결함만 수정한다';
|
|
419
|
+
return {
|
|
420
|
+
round, classifications,
|
|
421
|
+
prescription: {
|
|
422
|
+
outcome: '부분 착지 + FU', narrowedProposal,
|
|
423
|
+
partialLanding: `현재 완결 가능한 범위만 착지한다${targetPaths.length ? ` — ${targetPaths.join(', ')}` : ''}`,
|
|
424
|
+
followUp: {
|
|
425
|
+
lane: 'REVIEW-ROUND-REAUTHOR-FU',
|
|
426
|
+
goalId: `reauthor-fu-${authored[0]?.result.prNumber ?? authored[0]?.result.taskId ?? 'unbound'}`,
|
|
427
|
+
feature: `저작 결함을 제외한 완결 범위를 구현하고 검증한다 — ${narrowedProposal}`,
|
|
428
|
+
targetPaths,
|
|
429
|
+
completionBoundary: targetPaths.length ? `대상 경로: ${targetPaths.join(', ')}; 완료 경계: 해당 경로 내 범위` : '대상 경로 및 완료 경계는 다음 저작에서 재접지한다',
|
|
430
|
+
mockScenarioId: 'MS-03',
|
|
431
|
+
mockScenario: {
|
|
432
|
+
id: 'MS-03',
|
|
433
|
+
injection: `기존 리뷰 결과 주입: ${authored.map(({ text }) => text).join(' · ') || '반복 must-fix 재검토'}`,
|
|
434
|
+
observation: '제외된 저작 결함이 must-fix 목록에 없고, 부분 착지 및 FU 완료 경계가 관측된다',
|
|
435
|
+
},
|
|
436
|
+
},
|
|
437
|
+
},
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
function reauthorMustFixes(results: readonly SupervisorJobResult[], observation: SupervisorReauthorObservation | undefined): SupervisorJobResult[] {
|
|
442
|
+
if (!observation) return [...results];
|
|
443
|
+
const excluded = new Map<string, Set<string>>();
|
|
444
|
+
for (const item of observation.classifications) {
|
|
445
|
+
if (item.kind !== 'authorship-defect') continue;
|
|
446
|
+
const texts = excluded.get(item.taskId) ?? new Set<string>();
|
|
447
|
+
texts.add(item.text);
|
|
448
|
+
excluded.set(item.taskId, texts);
|
|
449
|
+
}
|
|
450
|
+
return results.map((result) => ({ ...result,
|
|
451
|
+
reviewMustFix: (result.reviewMustFix ?? []).filter((text) => !excluded.get(result.taskId)?.has(text)),
|
|
452
|
+
}));
|
|
453
|
+
}
|
|
454
|
+
|
|
370
455
|
/**
|
|
371
456
|
* REVIEW-MUSTFIX-CLASSIFY — per-task class. `prev` is the preceding round's items of the same task or its repair
|
|
372
457
|
* lineage (`oscillationRepairOf`), and only when that preceding round authored a repair for it — «수리 뒤 같은 지적»
|
|
@@ -470,8 +555,9 @@ type DecideNextRunInput = {
|
|
|
470
555
|
};
|
|
471
556
|
|
|
472
557
|
function decideNextRunCore(input: DecideNextRunInput): SupervisorDecision {
|
|
473
|
-
const results = [...input.results];
|
|
474
558
|
const history = [...(input.history ?? [])];
|
|
559
|
+
const reauthor = reauthorObservation(input.results, history);
|
|
560
|
+
const results = reauthorMustFixes(input.results, reauthor);
|
|
475
561
|
const maxRounds = input.limits?.maxRounds ?? DEFAULT_MAX_ROUNDS;
|
|
476
562
|
const stallRounds = input.limits?.stallRounds ?? DEFAULT_STALL_ROUNDS;
|
|
477
563
|
const observation = input.deliverableObservation
|
|
@@ -537,6 +623,7 @@ function decideNextRunCore(input: DecideNextRunInput): SupervisorDecision {
|
|
|
537
623
|
deliverableUnmeasured: t.deliverableUnmeasured,
|
|
538
624
|
deliverableMergeCompleteness,
|
|
539
625
|
reviewMustFixTrend,
|
|
626
|
+
...(reauthor ? { reauthor } : {}),
|
|
540
627
|
rerunnable: t.rerunnable,
|
|
541
628
|
reworkable: t.reworkable,
|
|
542
629
|
decomposable: t.decomposable,
|
|
@@ -983,6 +1070,7 @@ export function appendRound(
|
|
|
983
1070
|
...(baseCompleted > 0 || base !== undefined ? { baseCompleted, ...(base === undefined ? {} : { base }) } : {}),
|
|
984
1071
|
actionable: countActionable(t),
|
|
985
1072
|
...(reviewMustFixTrend === undefined ? {} : { reviewMustFixTrend }),
|
|
1073
|
+
...(decision?.reauthor ? { reauthor: decision.reauthor } : {}),
|
|
986
1074
|
...((mustFix.items ?? []).length > 0 ? { mustFix } : {}),
|
|
987
1075
|
...(Object.keys(lostTimeMsByTask).length > 0 ? { lostTimeMsByTask } : {}),
|
|
988
1076
|
...(unknownTimeTaskIds.size > 0 ? { unknownTimeTaskIds: [...unknownTimeTaskIds] } : {}),
|
|
@@ -1250,6 +1338,55 @@ export interface SuperviseRunOptions {
|
|
|
1250
1338
|
}>;
|
|
1251
1339
|
}
|
|
1252
1340
|
|
|
1341
|
+
/** Adapt REVIEW-ROUND-REAUTHOR's decision into an observation without duplicating its classification logic. */
|
|
1342
|
+
export function supervisorReauthorRequestObservations(
|
|
1343
|
+
decision: SupervisorDecision,
|
|
1344
|
+
parentRunId: string | null,
|
|
1345
|
+
results: readonly SupervisorJobResult[],
|
|
1346
|
+
resolveAuthorRunId: (ledgerRunId: string) => string | null = (ledgerRunId) => {
|
|
1347
|
+
try {
|
|
1348
|
+
const entries = loadRunLedger(ledgerRunId);
|
|
1349
|
+
for (const entry of [...(entries ?? [])].reverse()) {
|
|
1350
|
+
const authorRunId = entry.event === 'goal-authored' ? entry.data.authorRunId : undefined;
|
|
1351
|
+
if (typeof authorRunId === 'string' && authorRunId.trim()) return authorRunId;
|
|
1352
|
+
}
|
|
1353
|
+
} catch { /* an absent or unreadable lineage ledger leaves this event unjoined */ }
|
|
1354
|
+
return null;
|
|
1355
|
+
},
|
|
1356
|
+
): Array<{ event: 'supervisor.reauthor-request' | 'supervisor.reauthor-unjoined'; data: Record<string, unknown> }> {
|
|
1357
|
+
const reauthor = decision.reauthor;
|
|
1358
|
+
if (!reauthor) return [];
|
|
1359
|
+
return reauthor.classifications.flatMap((classification): Array<{ event: 'supervisor.reauthor-request' | 'supervisor.reauthor-unjoined'; data: Record<string, unknown> }> => {
|
|
1360
|
+
if (classification.kind !== 'authorship-defect') return [];
|
|
1361
|
+
const result = results.find((candidate) => candidate.taskId === classification.taskId);
|
|
1362
|
+
const sourceReviewRunId = result?.runId;
|
|
1363
|
+
const authorRunId = (parentRunId ? resolveAuthorRunId(parentRunId) : null)
|
|
1364
|
+
?? (sourceReviewRunId ? resolveAuthorRunId(sourceReviewRunId) : null);
|
|
1365
|
+
if (!authorRunId) return [{
|
|
1366
|
+
event: 'supervisor.reauthor-unjoined',
|
|
1367
|
+
data: {
|
|
1368
|
+
...(parentRunId ? { parentRunId } : {}),
|
|
1369
|
+
...(sourceReviewRunId ? { sourceReviewRunId } : {}),
|
|
1370
|
+
taskId: classification.taskId,
|
|
1371
|
+
attempt: reauthor.round,
|
|
1372
|
+
classification: 'authorship-defect',
|
|
1373
|
+
reason: 'author-run-id-unresolved',
|
|
1374
|
+
},
|
|
1375
|
+
}];
|
|
1376
|
+
return [{
|
|
1377
|
+
event: 'supervisor.reauthor-request' as const,
|
|
1378
|
+
data: {
|
|
1379
|
+
conversationId: authorRunId,
|
|
1380
|
+
runId: authorRunId,
|
|
1381
|
+
...(parentRunId ? { parentRunId } : {}),
|
|
1382
|
+
...(sourceReviewRunId ? { sourceReviewRunId } : {}),
|
|
1383
|
+
attempt: reauthor.round,
|
|
1384
|
+
classification: 'authorship-defect',
|
|
1385
|
+
},
|
|
1386
|
+
}];
|
|
1387
|
+
});
|
|
1388
|
+
}
|
|
1389
|
+
|
|
1253
1390
|
type SupervisorStopStorageSource = 'operator-dir' | 'run-store-dir' | 'process-default';
|
|
1254
1391
|
|
|
1255
1392
|
function resolveSupervisorStopStorage(runStore: SuperviseRunOptions['runStore']): {
|
|
@@ -1345,6 +1482,15 @@ export async function superviseRun(opts: SuperviseRunOptions): Promise<Superviso
|
|
|
1345
1482
|
...(allUnreviewedAreNoDiff ? { reviewReason: 'no-diff' } : {}),
|
|
1346
1483
|
} : {}),
|
|
1347
1484
|
});
|
|
1485
|
+
if (decision.reauthor) {
|
|
1486
|
+
try {
|
|
1487
|
+
opts.observe?.('review.reauthor', {
|
|
1488
|
+
round: decision.reauthor.round,
|
|
1489
|
+
classifications: decision.reauthor.classifications,
|
|
1490
|
+
prescription: decision.reauthor.prescription,
|
|
1491
|
+
});
|
|
1492
|
+
} catch { /* fail-open */ }
|
|
1493
|
+
}
|
|
1348
1494
|
if (chartRunId) {
|
|
1349
1495
|
recordRunChartDecision({ runId: chartRunId, device: 'outer-supervisor',
|
|
1350
1496
|
stopKey: `${chartRunId}:outer-supervisor:${history.length + 1}`, observed: `results=${results.length}`,
|
|
@@ -1382,6 +1528,10 @@ export async function superviseRun(opts: SuperviseRunOptions): Promise<Superviso
|
|
|
1382
1528
|
|
|
1383
1529
|
const runId = chartRunId;
|
|
1384
1530
|
|
|
1531
|
+
for (const request of supervisorReauthorRequestObservations(decision, runId, results)) {
|
|
1532
|
+
try { opts.observe?.(request.event, request.data); } catch { /* observation is fail-soft */ }
|
|
1533
|
+
}
|
|
1534
|
+
|
|
1385
1535
|
let decomposePromotion: DecomposePromotionObservation = decision.decomposable.length === 0
|
|
1386
1536
|
? { attempted: false, reason: 'no-decomposable-decision' }
|
|
1387
1537
|
: decision.action === 'stop'
|
|
@@ -10,7 +10,7 @@ import type { LLMUsage } from '../prompt-cache/types.js';
|
|
|
10
10
|
import { debug } from '../debug/log.js';
|
|
11
11
|
import { ensureDeviceFirstSteps, inspectDeviceFirstGoal } from './device-first.js';
|
|
12
12
|
import { COMPLETION_BOUNDARY_STEP_PREFIX, FOLDED_DEVICE_FIRST_ACTION_MARKER } from './goal-author-decompose.js';
|
|
13
|
-
import { loadMockScenarioCatalog, type MockScenarioDevice, type MockScenarioEntry } from '../ux-sim/mock-scenario-catalog.js';
|
|
13
|
+
import { loadMockScenarioCatalog, type MockScenarioCatalog, type MockScenarioDevice, type MockScenarioEntry } from '../ux-sim/mock-scenario-catalog.js';
|
|
14
14
|
|
|
15
15
|
function observeGoalAuthor(
|
|
16
16
|
category: 'goal-author' | 'goal-author.clarify',
|
|
@@ -81,10 +81,12 @@ export interface GoalAuthorDeps {
|
|
|
81
81
|
ground: (ask: string, groundingDeps?: GoalAuthorGroundingDeps) => Promise<CodebaseGrounding>;
|
|
82
82
|
persistentGrounding?: GoalAuthorGroundingDeps;
|
|
83
83
|
authorGrade?: GoalAuthorGradeSelection;
|
|
84
|
+
/** Read-only, compact inventory of reusable mocks and event-injection scenarios. */
|
|
85
|
+
mockScenarioCatalog?: string;
|
|
84
86
|
/** Production Terra reviewer precheck; omitted is disabled unless the shared config switch is on. */
|
|
85
87
|
reviewerPrecheckEnabled?: boolean;
|
|
86
88
|
/** Optional seam for focused tests; production uses the pinned Terra medium reviewer. */
|
|
87
|
-
reviewerPrecheck?: (document: string, authorRunId: string) => Promise<GoalAuthorReviewerPrecheckResult>;
|
|
89
|
+
reviewerPrecheck?: (document: string, authorRunId: string, context?: GoalAuthorReviewerPrecheckContext) => Promise<GoalAuthorReviewerPrecheckResult>;
|
|
88
90
|
enhance: (ask: string, opts?: EnhanceOpts) => Promise<GoalEnhancement>;
|
|
89
91
|
/** Additive enhancer options supplied by the file-writing entrypoint. */
|
|
90
92
|
enhanceOpts?: EnhanceOpts;
|
|
@@ -154,6 +156,23 @@ export interface GoalAuthorReviewerPrecheckResult {
|
|
|
154
156
|
readonly unappliedItems: readonly string[];
|
|
155
157
|
}
|
|
156
158
|
|
|
159
|
+
export interface GoalAuthorReviewerPrecheckContext {
|
|
160
|
+
readonly conversationId: string;
|
|
161
|
+
readonly round: number;
|
|
162
|
+
readonly priorRejectionReasonCodes: readonly string[];
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export type GoalAuthorReviewerDialogOutcome = 'skipped' | 'converged' | 'cap-hit' | 'provider-error';
|
|
166
|
+
|
|
167
|
+
export interface GoalAuthorReviewerDialogResult {
|
|
168
|
+
readonly document: string;
|
|
169
|
+
readonly status: 'skipped' | 'completed' | 'rejected-soft' | 'failed-soft';
|
|
170
|
+
readonly outcome: GoalAuthorReviewerDialogOutcome;
|
|
171
|
+
readonly rounds: number;
|
|
172
|
+
readonly hitl: boolean;
|
|
173
|
+
readonly result?: GoalAuthorReviewerPrecheckResult;
|
|
174
|
+
}
|
|
175
|
+
|
|
157
176
|
const GOAL_AUTHOR_REVIEWER_PRECHECK_MODEL = 'gpt-6.1-terra';
|
|
158
177
|
|
|
159
178
|
export function parseGoalAuthorReviewerPrecheck(raw: string): GoalAuthorReviewerPrecheckResult {
|
|
@@ -240,7 +259,7 @@ export function resolveGoalAuthorReviewerPrecheckEnabled(config = getUserConfig(
|
|
|
240
259
|
|
|
241
260
|
export async function runGoalAuthorReviewerPrecheck(
|
|
242
261
|
document: string,
|
|
243
|
-
deps: { config?: ReturnType<typeof getUserConfig>; stream?: typeof streamLLM } = {},
|
|
262
|
+
deps: { config?: ReturnType<typeof getUserConfig>; stream?: typeof streamLLM; reviewContext?: GoalAuthorReviewerPrecheckContext; mockScenarioCatalog?: string } = {},
|
|
244
263
|
): Promise<GoalAuthorReviewerPrecheckResult> {
|
|
245
264
|
const config = deps.config ?? getUserConfig();
|
|
246
265
|
const pinnedConfig = {
|
|
@@ -250,7 +269,12 @@ export async function runGoalAuthorReviewerPrecheck(
|
|
|
250
269
|
const provider = getProviderForConfig(pinnedConfig, GOAL_AUTHOR_REVIEWER_PRECHECK_MODEL);
|
|
251
270
|
const prompt = [
|
|
252
271
|
'Review this completed goal document before it is written. Return only JSON with string-array fields suggestions, fixes, remainingNeedsHuman, a fixEvidence array of { fix, originalText, revisedText }, and a revisedDocument string.',
|
|
272
|
+
'Challenge each completion-boundary constraint instead of treating it as inherently necessary. 제약을 의심하라: 저작 문면의 세계와 구현의 세계에서 같은 제약인가? 카탈로그에 있는 목장치나 사건 주입으로 같은 동작을 관찰할 수 있는가? 실물 점검만 요구하는 경계라면 의도를 보존하는 목장치·주입 사건을 제안하라. Do not require a real-world inspection by default. Preserve a live check when the ask explicitly requires an external-system outcome.',
|
|
273
|
+
...(deps.mockScenarioCatalog?.trim() ? ['Reusable mock-device and event-injection catalog (reference only, not a completion gate):', deps.mockScenarioCatalog.trim()] : []),
|
|
253
274
|
'Apply each necessary fix to revisedDocument exactly once while preserving the original ask, GoalId, RootIntent, GoalType, every existing criterion and scope boundary, and canonical section structure. Be strictly conservative: only append one complete sentence copied verbatim from the original ask to an existing acceptance-criteria or required-evidence line; never append a partial substring or clause, especially one inside a negation or condition, and do not delete or reword existing text, add new scope, or edit other sections. For every fixes item, include one fixEvidence object in the same order: fixes item and fix must both equal the exact complete sentence appended from the original ask; originalText and revisedText must be exact spans where revisedText starts with originalText and appends that sentence, and replaying every single replacement reproduces the complete revisedDocument with no other edits. If you cannot explain and ground every change this way, return no fixes and leave revisedDocument byte-for-byte unchanged. Keep optional suggestions separate; list unresolved decisions or evidence as remainingNeedsHuman.',
|
|
275
|
+
...(deps.reviewContext ? [
|
|
276
|
+
`Author feedback for round ${deps.reviewContext.round}: prior proposal rejection codes = ${deps.reviewContext.priorRejectionReasonCodes.join(', ') || '(none)'}. Reconsider only those rejected proposals; do not repeat an unsupported edit.`,
|
|
277
|
+
] : []),
|
|
254
278
|
document,
|
|
255
279
|
].join('\n\n');
|
|
256
280
|
const messages: LLMMessage[] = [{ role: 'user', content: prompt }];
|
|
@@ -274,15 +298,16 @@ export async function executeGoalAuthorReviewerPrecheck(
|
|
|
274
298
|
enabled: boolean,
|
|
275
299
|
document: string,
|
|
276
300
|
authorRunId: string,
|
|
277
|
-
run: (document: string) => Promise<GoalAuthorReviewerPrecheckResult> = (value) => runGoalAuthorReviewerPrecheck(value),
|
|
301
|
+
run: (document: string, context?: GoalAuthorReviewerPrecheckContext) => Promise<GoalAuthorReviewerPrecheckResult> = (value) => runGoalAuthorReviewerPrecheck(value),
|
|
278
302
|
observe: (event: string, data: Record<string, unknown>) => void = (event, data) => debug.log('author.reviewer-precheck', event, data),
|
|
303
|
+
context?: GoalAuthorReviewerPrecheckContext,
|
|
279
304
|
): Promise<{ status: 'skipped' | 'completed' | 'rejected-soft' | 'failed-soft'; result?: GoalAuthorReviewerPrecheckResult }> {
|
|
280
305
|
if (!enabled) {
|
|
281
306
|
observe('precheck-skipped', { authorRunId, reason: 'disabled', providerCalls: 0 });
|
|
282
307
|
return { status: 'skipped' };
|
|
283
308
|
}
|
|
284
309
|
try {
|
|
285
|
-
const proposed = await run(document);
|
|
310
|
+
const proposed = await run(document, context);
|
|
286
311
|
const evidence = proposed.fixEvidence ?? [];
|
|
287
312
|
let replayed = document;
|
|
288
313
|
let fixesSupported = proposed.fixes.length === 0
|
|
@@ -346,12 +371,131 @@ export async function executeGoalAuthorReviewerPrecheck(
|
|
|
346
371
|
}
|
|
347
372
|
}
|
|
348
373
|
|
|
374
|
+
/** Run a bounded reviewer→author dialogue; every proposal remains grounded by the existing exact-edit validator. */
|
|
375
|
+
export async function executeGoalAuthorReviewerDialog(
|
|
376
|
+
enabled: boolean,
|
|
377
|
+
document: string,
|
|
378
|
+
conversationId: string,
|
|
379
|
+
run: (document: string, context: GoalAuthorReviewerPrecheckContext) => Promise<GoalAuthorReviewerPrecheckResult> = (value, context) => runGoalAuthorReviewerPrecheck(value, { reviewContext: context }),
|
|
380
|
+
observe: (event: string, data: Record<string, unknown>) => void = (event, data) => debug.log('author.dialog', event, data),
|
|
381
|
+
): Promise<GoalAuthorReviewerDialogResult> {
|
|
382
|
+
const emit = (event: string, data: Record<string, unknown>): void => {
|
|
383
|
+
try { observe(event, data); } catch { /* observability never changes author output */ }
|
|
384
|
+
};
|
|
385
|
+
let currentDocument = document;
|
|
386
|
+
let lastResult: GoalAuthorReviewerPrecheckResult | undefined;
|
|
387
|
+
let status: GoalAuthorReviewerDialogResult['status'] = 'completed';
|
|
388
|
+
let outcome: GoalAuthorReviewerDialogOutcome = 'converged';
|
|
389
|
+
let rolledBack = false;
|
|
390
|
+
let rounds = 0;
|
|
391
|
+
let hitl = false;
|
|
392
|
+
let priorRejectionReasonCodes: string[] = [];
|
|
393
|
+
const allSuggestions: string[] = [];
|
|
394
|
+
const allFixes: string[] = [];
|
|
395
|
+
const allFixEvidence: NonNullable<GoalAuthorReviewerPrecheckResult['fixEvidence']>[number][] = [];
|
|
396
|
+
const allAppliedFixes: string[] = [];
|
|
397
|
+
const allUnappliedItems: string[] = [];
|
|
398
|
+
const allRemainingNeedsHuman: string[] = [];
|
|
399
|
+
|
|
400
|
+
if (!enabled) {
|
|
401
|
+
emit('author.reviewer-precheck.skipped', { authorRunId: conversationId, conversationId, runId: conversationId, reason: 'disabled', providerCalls: 0 });
|
|
402
|
+
return { document, status: 'skipped', outcome: 'skipped', rounds: 0, hitl: false };
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
for (let round = 1; round <= 2; round += 1) {
|
|
406
|
+
rounds = round;
|
|
407
|
+
const context: GoalAuthorReviewerPrecheckContext = { conversationId, round, priorRejectionReasonCodes };
|
|
408
|
+
const response = await executeGoalAuthorReviewerPrecheck(
|
|
409
|
+
true,
|
|
410
|
+
currentDocument,
|
|
411
|
+
conversationId,
|
|
412
|
+
(candidate, receivedContext) => run(candidate, receivedContext ?? context),
|
|
413
|
+
(event, data) => emit(`author.reviewer-precheck.${event}`, data),
|
|
414
|
+
context,
|
|
415
|
+
);
|
|
416
|
+
status = response.status;
|
|
417
|
+
lastResult = response.result ?? lastResult;
|
|
418
|
+
if (response.status === 'failed-soft') {
|
|
419
|
+
outcome = 'provider-error';
|
|
420
|
+
currentDocument = document;
|
|
421
|
+
rolledBack = allAppliedFixes.length > 0;
|
|
422
|
+
break;
|
|
423
|
+
}
|
|
424
|
+
if (!response.result) break;
|
|
425
|
+
|
|
426
|
+
const result = response.result;
|
|
427
|
+
allSuggestions.push(...result.suggestions);
|
|
428
|
+
allFixes.push(...result.fixes);
|
|
429
|
+
allFixEvidence.push(...(result.fixEvidence ?? []));
|
|
430
|
+
allAppliedFixes.push(...result.appliedFixes);
|
|
431
|
+
allUnappliedItems.push(...result.unappliedItems);
|
|
432
|
+
allRemainingNeedsHuman.push(...result.remainingNeedsHuman);
|
|
433
|
+
const proposalCount = result.fixes.length;
|
|
434
|
+
const appliedCount = result.appliedFixes.length;
|
|
435
|
+
const rejectedCount = result.unappliedItems.length;
|
|
436
|
+
const reasonCodes = rejectedCount > 0 ? ['fix-not-grounded'] : [];
|
|
437
|
+
emit('author.reviewer.round', {
|
|
438
|
+
conversationId,
|
|
439
|
+
runId: conversationId,
|
|
440
|
+
round,
|
|
441
|
+
proposalCount,
|
|
442
|
+
appliedCount,
|
|
443
|
+
rejectedCount,
|
|
444
|
+
rejectionReasonCodes: reasonCodes,
|
|
445
|
+
});
|
|
446
|
+
if (response.status === 'completed') currentDocument = result.revisedDocument;
|
|
447
|
+
|
|
448
|
+
const unresolved = rejectedCount > 0 || result.remainingNeedsHuman.length > 0;
|
|
449
|
+
if (!unresolved && appliedCount === 0) {
|
|
450
|
+
outcome = 'converged';
|
|
451
|
+
break;
|
|
452
|
+
}
|
|
453
|
+
priorRejectionReasonCodes = reasonCodes;
|
|
454
|
+
if (round === 2) {
|
|
455
|
+
outcome = 'cap-hit';
|
|
456
|
+
hitl = true;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
emit('author.dialog.closed', { conversationId, runId: conversationId, outcome, rounds, hitl });
|
|
461
|
+
const aggregatedResult = lastResult ? {
|
|
462
|
+
...lastResult,
|
|
463
|
+
suggestions: [...new Set(allSuggestions)],
|
|
464
|
+
fixes: [...new Set(allFixes)],
|
|
465
|
+
fixEvidence: allFixEvidence,
|
|
466
|
+
appliedFixes: rolledBack ? [] : [...new Set(allAppliedFixes)],
|
|
467
|
+
unappliedItems: [...new Set([...allUnappliedItems, ...(rolledBack ? allAppliedFixes : [])])],
|
|
468
|
+
remainingNeedsHuman: [...new Set([...allRemainingNeedsHuman, ...(rolledBack ? allAppliedFixes : [])])],
|
|
469
|
+
revisedDocument: currentDocument,
|
|
470
|
+
} : undefined;
|
|
471
|
+
return {
|
|
472
|
+
document: currentDocument,
|
|
473
|
+
status,
|
|
474
|
+
outcome,
|
|
475
|
+
rounds,
|
|
476
|
+
hitl,
|
|
477
|
+
...(aggregatedResult ? { result: aggregatedResult } : {}),
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
|
|
349
481
|
export type GoalAuthorGroundingPath = 'groundMissionInCodebase';
|
|
350
482
|
|
|
351
483
|
export interface GoalAuthorGroundingDeps {
|
|
352
484
|
/** Omit to preserve persistent grounding; false makes the authoring experiment opt out. */
|
|
353
485
|
persistent?: false;
|
|
354
|
-
groundMission?: (ask: string, deps: { cwd: string; seedPaths?: readonly string[]; persistent?: false }) => Promise<CodebaseGrounding>;
|
|
486
|
+
groundMission?: (ask: string, deps: { cwd: string; seedPaths?: readonly string[]; persistent?: false; mockScenarioCatalog?: string }) => Promise<CodebaseGrounding>;
|
|
487
|
+
/** Reference inventory for selecting existing mock devices during goal grounding. */
|
|
488
|
+
mockScenarioCatalog?: string;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
/** Compact prompt view of the canonical catalog; detailed run evidence stays in the catalog itself. */
|
|
492
|
+
export function renderGoalAuthorMockScenarioCatalog(catalog: MockScenarioCatalog = loadMockScenarioCatalog()): string {
|
|
493
|
+
return [
|
|
494
|
+
'Reusable mock devices (src/ux-sim/mock-scenario-catalog.json):',
|
|
495
|
+
...catalog.devices.map((device) => `- ${device.id} (${device.name}): target=${device.target}; inputs=${device.inputs.join(', ')}; observes=${device.observations.join(', ')}; entry=${device.entryCommands.join(' | ')}`),
|
|
496
|
+
'Reusable event-injection scenarios:',
|
|
497
|
+
...catalog.scenarios.map((scenario) => `- ${scenario.id} (${scenario.kind}, device=${scenario.device}): trigger=${scenario.trigger}; observe=${scenario.observe.join(', ')}; expected=${scenario.expected}`),
|
|
498
|
+
].join('\n');
|
|
355
499
|
}
|
|
356
500
|
|
|
357
501
|
export interface GoalAuthorGroundingResult {
|
|
@@ -912,7 +1056,9 @@ function behaviorTokens(value: string): Set<string> {
|
|
|
912
1056
|
|
|
913
1057
|
function matchingScenarioBehaviorCount(scenario: MockScenarioEntry, ask: string): number {
|
|
914
1058
|
const { values } = inspectGoalDoneBoundary(ask);
|
|
915
|
-
const requestedText = `${values['완료 경계 코드'] ?? ''} ${values['완료 경계 실물'] ?? ''}
|
|
1059
|
+
const requestedText = `${values['완료 경계 코드'] ?? ''} ${values['완료 경계 실물'] ?? ''}`
|
|
1060
|
+
.replace(/(?:실물|실제)\s*(?:점검|검증|확인|테스트)\s*(?:으로|로)?/giu, '')
|
|
1061
|
+
.replace(/real[- ]world\s+(?:check|inspection|verification|test)/giu, '');
|
|
916
1062
|
const describedText = `${scenario.name} ${scenario.kind} ${scenario.trigger} ${scenario.observe.join(' ')} ${scenario.expected}`;
|
|
917
1063
|
const requested = behaviorTokens(requestedText);
|
|
918
1064
|
const described = behaviorTokens(describedText);
|
|
@@ -925,7 +1071,11 @@ function matchingScenarioBehaviorCount(scenario: MockScenarioEntry, ask: string)
|
|
|
925
1071
|
['harvestable', 'unharvestable'], ['independent', 'dependent'], ['succeeds', 'fails'], ['accepted', 'rejected'],
|
|
926
1072
|
];
|
|
927
1073
|
const shared = [...described].filter((token) => requested.has(token));
|
|
1074
|
+
const covered = new Set(described);
|
|
1075
|
+
if (described.has('independent')) covered.add('distinct');
|
|
1076
|
+
if (described.has('distinct')) covered.add('independent');
|
|
928
1077
|
if (shared.some((token) => polarity(requestedText, token) !== polarity(describedText, token))
|
|
1078
|
+
|| [...requested].some((token) => !covered.has(token))
|
|
929
1079
|
|| oppositePairs.some(([left, right]) => (requested.has(left) && described.has(right)) || (requested.has(right) && described.has(left)))) return 0;
|
|
930
1080
|
return shared.length;
|
|
931
1081
|
}
|
|
@@ -944,12 +1094,13 @@ function nextGoalScenarioId(catalogIds: readonly string[], targets: readonly str
|
|
|
944
1094
|
return `${prefix}-${Date.now().toString(36).toUpperCase()}`;
|
|
945
1095
|
}
|
|
946
1096
|
|
|
947
|
-
function selectGoalMockStage(ask: string, targets: readonly string[]): { device: MockScenarioDevice; scenario?: MockScenarioEntry } | undefined {
|
|
1097
|
+
function selectGoalMockStage(ask: string, targets: readonly string[]): { device: MockScenarioDevice; scenario?: MockScenarioEntry; pathMatched: boolean } | undefined {
|
|
948
1098
|
const catalog = loadMockScenarioCatalog();
|
|
949
|
-
const
|
|
1099
|
+
const matched = catalog.devices
|
|
950
1100
|
.map((candidate) => ({ candidate, score: matchingPathCount([...candidate.implementation, ...candidate.tests], targets) }))
|
|
951
1101
|
.filter((entry) => entry.score >= 2)
|
|
952
|
-
.sort((left, right) => right.score - left.score)[0]
|
|
1102
|
+
.sort((left, right) => right.score - left.score)[0];
|
|
1103
|
+
const device = matched?.candidate
|
|
953
1104
|
?? (/(?:author|goal|mission|저작|골|미션)/iu.test(`${targets.join(' ')}\n${ask}`)
|
|
954
1105
|
? catalog.devices.find((candidate) => candidate.id === 'product-devices')
|
|
955
1106
|
: catalog.devices.find((candidate) => candidate.id === 'scenario-runner'));
|
|
@@ -959,7 +1110,14 @@ function selectGoalMockStage(ask: string, targets: readonly string[]): { device:
|
|
|
959
1110
|
.map((candidate) => ({ candidate, pathScore: matchingPathCount([...candidate.implementation, ...candidate.tests], targets), behaviorScore: matchingScenarioBehaviorCount(candidate, ask) }))
|
|
960
1111
|
.filter((entry) => entry.pathScore >= 2 && entry.behaviorScore >= 2)
|
|
961
1112
|
.sort((left, right) => right.behaviorScore - left.behaviorScore || right.pathScore - left.pathScore)[0]?.candidate;
|
|
962
|
-
return { device, ...(scenario ? { scenario } : {}) };
|
|
1113
|
+
return { device, ...(scenario ? { scenario } : {}), pathMatched: Boolean(matched) };
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
function isGenericRealWorldInspectionBoundary(boundary: string, ask: string): boolean {
|
|
1117
|
+
const combined = `${boundary}\n${ask}`;
|
|
1118
|
+
const asksForRealInspection = /(?:실물\s*(?:점검|검증|확인|테스트)|실제\s*(?:점검|검증|확인|테스트)|real[- ]world\s+(?:check|inspection|verification|test)|live\s+(?:check|inspection|verification|test))/iu.test(boundary);
|
|
1119
|
+
const namesExternalOutcome = /(?:외부\s*(?:시스템|서비스|서버|클러스터|API|데이터베이스|DB)|실서비스|운영\s*(?:시스템|서비스|서버|클러스터|API|데이터베이스|DB)|실제\s*(?:계정|결제|API|서버|클러스터|고객|사용자)|(?:고객|사용자|customer|client|recipient).{0,20}(?:메일|이메일|email|발송|전송|receive|send)|(?:메일|이메일|email).{0,20}(?:고객|사용자|customer|client|recipient|발송|전송|receive|send)|\b(?:external\s+(?:system|service|server|cluster|api|database|db)|(?:actual|real|live|production|staging|stage|external)\s+(?:[\w-]+\s+){0,2}(?:system|service|server|cluster|api|database|db)|(?:staging|stage|production|prod|test|dev)\s+(?:system|service|server|cluster|api|database|db)|database|db|email|mail|slack|discord|teams|telegram|webhook|channel|gcp\d+|github|stripe|aws|production\s+\w+|live\s+(?:api|service|server|cluster)|(?:posts?|sends?|publishes?|writes?|pushes?|creates?|deletes?|charges?|updates?|submits?|delivers?|notifies?)\b.{0,80}\b(?:to|on|into|against|via))\b)/iu.test(combined);
|
|
1120
|
+
return asksForRealInspection && !namesExternalOutcome;
|
|
963
1121
|
}
|
|
964
1122
|
|
|
965
1123
|
export function explicitGoalDoneBoundaryLines(ask: string, repositoryRoot?: string): string[] {
|
|
@@ -1002,6 +1160,17 @@ export function explicitGoalDoneBoundaryLines(ask: string, repositoryRoot?: stri
|
|
|
1002
1160
|
lines.push(`- 시나리오: 신설 초안 (MS-id 후보: ${id})`);
|
|
1003
1161
|
lines.push(`- 시나리오 초안: 사건은 ${targets.join(' · ') || '요청 대상'}에 «${requestedCode}» 경계를 적용한 입력; 기대는 생산 경로에서 «${requestedObservation}»을 관측하고 bun test ${plannedTestPath ?? '<대상 시험 파일>'}로 GREEN을 확인하는 것이다. 자식은 기존 카탈로그 API·ScenarioV0 형식에 맞춰 요청 대상의 사건·기대를 구체화해 등록한다.`);
|
|
1004
1162
|
}
|
|
1163
|
+
const realWorldBoundary = values['완료 경계 실물'];
|
|
1164
|
+
if (realWorldBoundary && isGenericRealWorldInspectionBoundary(realWorldBoundary, ask) && mockStage?.pathMatched) {
|
|
1165
|
+
const { device, scenario } = mockStage;
|
|
1166
|
+
if (scenario) {
|
|
1167
|
+
lines.push(`- 목장치 치환안: 완료 경계 실물의 일반 실물 점검을 ${device.id} (${device.name})로 대체 제안; 기존 사건 주입 ${scenario.id}: ${scenario.trigger}; 관측=${scenario.observe.join(' · ')}; 기대=${scenario.expected}`);
|
|
1168
|
+
} else {
|
|
1169
|
+
const requestedCode = values['완료 경계 코드'] ?? '요청 코드 경계';
|
|
1170
|
+
const requestedObservation = values['완료 경계 실물'] ?? '요청된 생산 동작과 결과';
|
|
1171
|
+
lines.push(`- 목장치 치환안: ${device.id} (${device.name}) 신규 ScenarioV0 초안·미등록; trigger=«${requestedCode}»가 참이 되도록 사건을 입력한다(카탈로그 입력 후보: ${device.inputs.join(' · ')}); observe=«${requestedObservation}»(관측 후보: ${device.observations.join(' · ')}); expected=«${requestedObservation}». 입력·관측 selector를 해당 요청과 맞춰 등록하고 회귀 시험으로 확인할 제안이다.`);
|
|
1172
|
+
}
|
|
1173
|
+
}
|
|
1005
1174
|
}
|
|
1006
1175
|
if (plannedTestPath) lines.push(`- 검증 계획(TDD): 장치 ${mockStage?.device.id ?? '미선정'} · 시나리오 ${mockStage?.scenario?.id ?? '신설 초안'} · ${needsNewTest ? '신설 시험' : '기존 시험에 요청 동작 회귀 사례 추가'} ${plannedTestPath} · 피처 시험 bun test ${plannedTestPath}를 구현 전에 RED로 확인한다.`);
|
|
1007
1176
|
return lines;
|
|
@@ -6454,6 +6623,16 @@ async function authorGoalWithSupersededRootIntent(
|
|
|
6454
6623
|
}
|
|
6455
6624
|
// ⭐ 이 저작 «한 번»의 id. goalId 보다 «먼저» 있어야 ground·enhance 의 소요를 그 골에 붙일 수 있다.
|
|
6456
6625
|
const authorRunId = generateGoalId();
|
|
6626
|
+
if (deps.mockScenarioCatalog) {
|
|
6627
|
+
try {
|
|
6628
|
+
observeGoalAuthor('goal-author', 'mock-scenario-catalog-injected', {
|
|
6629
|
+
authorRunId,
|
|
6630
|
+
source: 'src/ux-sim/mock-scenario-catalog.json',
|
|
6631
|
+
availableConsumers: ['ground', 'enhance', 'reviewer-precheck'],
|
|
6632
|
+
contextChars: deps.mockScenarioCatalog.length,
|
|
6633
|
+
});
|
|
6634
|
+
} catch { /* observation must not change authoring */ }
|
|
6635
|
+
}
|
|
6457
6636
|
const authorGrade = deps.authorGrade ?? resolveGoalAuthorGrade(undefined, getUserConfig().harness?.authorGrade);
|
|
6458
6637
|
const lite = authorGrade.grade === 'lite';
|
|
6459
6638
|
// lite 는 판정선을 남기는 대신 단계를 덜 한다 — 요청에 반증 줄이 하나도 없으면 판정선 없는 골이 나가므로 시작 전에 멈춘다.
|
|
@@ -6480,7 +6659,10 @@ async function authorGoalWithSupersededRootIntent(
|
|
|
6480
6659
|
const groundStartedAt = startGoalAuthorPhase('ground', authorRunId, deps.onProgress);
|
|
6481
6660
|
const timeboxBudgetMs = deps.groundTimeboxMs ?? GOAL_AUTHOR_GROUND_TIMEBOX_MS;
|
|
6482
6661
|
try {
|
|
6483
|
-
const groundOutcome = await groundWithinTimebox(() => deps.ground(ask,
|
|
6662
|
+
const groundOutcome = await groundWithinTimebox(() => deps.ground(ask, {
|
|
6663
|
+
...persistentGrounding.deps,
|
|
6664
|
+
...(deps.mockScenarioCatalog ? { mockScenarioCatalog: deps.mockScenarioCatalog } : {}),
|
|
6665
|
+
}), timeboxBudgetMs, groundStartedAt);
|
|
6484
6666
|
if ('timebox' in groundOutcome) {
|
|
6485
6667
|
// ⛔ `groundingError` 를 «안» 쓴다 — 접지가 던진 것과 예산 초과로 끊긴 것은 다른 사건이고,
|
|
6486
6668
|
// 처방도 다르다(앞은 채널 복구, 뒤는 더 좁은 ask/재시도). 두 값을 한 칸에 접으면 못 가른다.
|
|
@@ -6519,8 +6701,8 @@ async function authorGoalWithSupersededRootIntent(
|
|
|
6519
6701
|
? await deps.enhance(
|
|
6520
6702
|
enhanceAsk,
|
|
6521
6703
|
persistentFacts.length > 0
|
|
6522
|
-
? { ...deps.enhanceOpts, groundedFacts: persistentFacts, onUsage: onEnhanceUsage }
|
|
6523
|
-
: { ...deps.enhanceOpts, onUsage: onEnhanceUsage },
|
|
6704
|
+
? { ...deps.enhanceOpts, groundedFacts: persistentFacts, onUsage: onEnhanceUsage, ...(deps.mockScenarioCatalog ? { mockScenarioCatalog: deps.mockScenarioCatalog } : {}) }
|
|
6705
|
+
: { ...deps.enhanceOpts, onUsage: onEnhanceUsage, ...(deps.mockScenarioCatalog ? { mockScenarioCatalog: deps.mockScenarioCatalog } : {}) },
|
|
6524
6706
|
)
|
|
6525
6707
|
: { original: ask, checklist: [], verbatimPreserved: true };
|
|
6526
6708
|
// ⭐ goal-context 규범이 «어디에도 안 실린다»는 것을 관측으로 남긴다.
|
|
@@ -7185,6 +7367,7 @@ export async function groundForGoalAuthor(
|
|
|
7185
7367
|
cwd,
|
|
7186
7368
|
seedPaths: askPathTokens(ask),
|
|
7187
7369
|
...(deps.persistent !== undefined ? { persistent: deps.persistent } : {}),
|
|
7370
|
+
...(deps.mockScenarioCatalog ? { mockScenarioCatalog: deps.mockScenarioCatalog } : {}),
|
|
7188
7371
|
}),
|
|
7189
7372
|
};
|
|
7190
7373
|
}
|
|
@@ -7271,9 +7454,10 @@ async function runDefaultHelpProbe(cwd: string, argv: readonly string[]): Promis
|
|
|
7271
7454
|
* ⇒ 배선만 무는 테스트가 이것을 직접 부른다.
|
|
7272
7455
|
*/
|
|
7273
7456
|
export function defaultGoalAuthorDeps(cwd: string): GoalAuthorDeps {
|
|
7457
|
+
const mockScenarioCatalog = renderGoalAuthorMockScenarioCatalog();
|
|
7274
7458
|
return {
|
|
7275
7459
|
async ground(ask, groundingDeps) {
|
|
7276
|
-
return (await groundForGoalAuthor(ask, cwd, groundingDeps)).facts;
|
|
7460
|
+
return (await groundForGoalAuthor(ask, cwd, { ...groundingDeps, mockScenarioCatalog })).facts;
|
|
7277
7461
|
},
|
|
7278
7462
|
/**
|
|
7279
7463
|
* ⭐⭐ 저작 경로는 체크리스트를 «완주 판정»이 아니라 «골 문서 재료»로 쓴다 — 그래서 용도를 밝힌다.
|
|
@@ -7287,8 +7471,9 @@ export function defaultGoalAuthorDeps(cwd: string): GoalAuthorDeps {
|
|
|
7287
7471
|
* 이 칸을 «안 주므로» 기본값 `coverage-gate` 로 종전 문면을 그대로 받는다.
|
|
7288
7472
|
*/
|
|
7289
7473
|
enhance(ask, opts) {
|
|
7290
|
-
return enhancePrompt(ask, { ...opts, checklistUse: 'authoring', config: opts?.config ?? getUserConfig() });
|
|
7474
|
+
return enhancePrompt(ask, { ...opts, mockScenarioCatalog, checklistUse: 'authoring', config: opts?.config ?? getUserConfig() });
|
|
7291
7475
|
},
|
|
7476
|
+
mockScenarioCatalog,
|
|
7292
7477
|
readSourceFile: createRepositoryReferencedFileReader(cwd),
|
|
7293
7478
|
runHelpProbe: (argv) => runDefaultHelpProbe(cwd, argv),
|
|
7294
7479
|
selfResolveClarification: defaultGoalAuthorSelfResolve,
|
|
@@ -7409,17 +7594,17 @@ export async function writeAuthoredGoal(
|
|
|
7409
7594
|
...(supersededRootIntent !== null && { supersessionRootIntent: supersededRootIntent }),
|
|
7410
7595
|
});
|
|
7411
7596
|
const reviewerPrecheckEnabled = resolvedDeps.reviewerPrecheckEnabled ?? resolveGoalAuthorReviewerPrecheckEnabled();
|
|
7412
|
-
const
|
|
7597
|
+
const dialog = await executeGoalAuthorReviewerDialog(
|
|
7413
7598
|
reviewerPrecheckEnabled,
|
|
7414
7599
|
authored.document,
|
|
7415
7600
|
authored.authorRunId,
|
|
7416
|
-
(document) => (resolvedDeps.reviewerPrecheck
|
|
7417
|
-
? resolvedDeps.reviewerPrecheck(document, authored.authorRunId)
|
|
7418
|
-
: runGoalAuthorReviewerPrecheck(document)),
|
|
7601
|
+
(document, context) => (resolvedDeps.reviewerPrecheck
|
|
7602
|
+
? resolvedDeps.reviewerPrecheck(document, authored.authorRunId, context)
|
|
7603
|
+
: runGoalAuthorReviewerPrecheck(document, { reviewContext: context, mockScenarioCatalog: resolvedDeps.mockScenarioCatalog })),
|
|
7419
7604
|
);
|
|
7420
|
-
|
|
7421
|
-
|
|
7422
|
-
|
|
7605
|
+
authored.document = dialog.document;
|
|
7606
|
+
if (dialog.result) {
|
|
7607
|
+
authored.reviewerPrecheck = dialog.result;
|
|
7423
7608
|
}
|
|
7424
7609
|
const stampedAt = fileDeps.now?.() ?? new Date();
|
|
7425
7610
|
const identity = identityLines(ask, cwd, fileDeps.env ?? process.env, stampedAt);
|