elanous 0.2.41 → 0.2.43
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/{GiOLWmt4MqDZePubBjA4Q → Om5xS9jpjSXJCeTNGYEi4}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{2fe2c302.41b517f88d6fe502.js → 0966f8a1.745fcd44f64a87ea.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{385e4574.e9886ab32759eda3.js → 0ad6802e.ae7afb63fdcb4491.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/114.2b90424d1a3ce84c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1151-5c2bb8f002ca2dd6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1200.6a37c202f9f17e9a.js +226 -0
- package/apps/pwa/out/_next/static/chunks/1261-a616d5728e02e624.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1313-19f737e0222c4444.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1357.3bbef3976c37f94a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1362-20adddfaf662b0fa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6874.d5cf7eb8edb2cabe.js → 1406.a1dc2ab6f8449374.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/1737-9491fc6ab29b9ec6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1803-4f91a8e7dcaf042c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5744.b9415e18ad623100.js → 1961.a81b12872c3e93a9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1970cf59.2d4d8ce5d6c81853.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1971-8890f3962ba7ee0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2073-ba274e00e4f9efb4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5471.1e611302ed3a7c53.js → 2144.25b292396712196d.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{3230-49298c3b73ef2268.js → 2268-53861f339e0b65a2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9834.63ab2bbc3153172e.js → 2312.0c8b61e22d3136d7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{1800.f7ff51dc4978a958.js → 2573.387a707f6f9d720c.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/273.f156eee28f11af77.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2873.d2140e5a82546401.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9048.212083de42d25be3.js → 3072.01338851ca21a6f7.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/3091.a5a4143dea33d197.js +90 -0
- package/apps/pwa/out/_next/static/chunks/3095.dc44586a5f83b86d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2263.e09b6edea33bad2d.js → 3113.d7472bbc27d580c7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3228-9650b6447b6fa288.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3402.44b565b314f2263c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{addc2b32.8c4ff8f0aefe987d.js → 3557ac4a.c8931684475018ad.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/360.ae9f9f4c33c395e8.js +79 -0
- package/apps/pwa/out/_next/static/chunks/3638.80412ea63aae8f3f.js +286 -0
- package/apps/pwa/out/_next/static/chunks/{a0a01613.6d1cca322238d7fe.js → 363bfab3.9623b9f89363541f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3694.e0099884345f0198.js +64 -0
- package/apps/pwa/out/_next/static/chunks/3744.54f87db52acfd1ab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3903.3ef4656c67572764.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3935.16701e33f8982dc9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3955.6922286237f2ac2b.js +24 -0
- package/apps/pwa/out/_next/static/chunks/3969.272ee7f9fd6c62e5.js +34 -0
- package/apps/pwa/out/_next/static/chunks/4199.ce86b281fd0a60b7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4311-6dd3144002cc0c2d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4426-2b230fad00c88930.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{530.d26346e18089640a.js → 4445.7990c76b3751a918.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4447-14c5161fa59166c7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4856-b0b8075bba8c53f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4870-de370d65e73c0bb5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4885-2c989165c4b29fad.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4894.fec2ca9e99caefa2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5093.8f04b7f8cb899a95.js +94 -0
- package/apps/pwa/out/_next/static/chunks/5122-2bb177cebf89e19a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5154.5f56dc3902e3d275.js +36 -0
- package/apps/pwa/out/_next/static/chunks/529.64ff7257180b2ac9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5394.5dabeb0c62293a28.js +93 -0
- package/apps/pwa/out/_next/static/chunks/5461.08bf2404ff38ec85.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5474-22e08a85583209b2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1219.7e17964e0e7cd8e5.js → 5564.9e72532188f57586.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/5567-265df39ed8fe9dcb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5570-a94ae19811cb2046.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5574-b47c9ef2dceff1fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5628.6ddb2d5ffba4ff4c.js +309 -0
- package/apps/pwa/out/_next/static/chunks/5730.43d7ccc09988e646.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1178.1aa9cad0e7695427.js → 5789.2da35c258292e1e5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{4133.2056bb4d78f621af.js → 5824.da9527b15a3221e5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5866.366966af47fdde5d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4527.a69f2894d1bc9f4a.js → 5930.8b4df3b46c32b05a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5963-c4d8469c52a0828b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6001.ec4049ceb3c43418.js +27 -0
- package/apps/pwa/out/_next/static/chunks/6120-471f03db1e299c0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6175-41479e643aca1878.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6291.a2de4f9787637075.js +104 -0
- package/apps/pwa/out/_next/static/chunks/6400-6699907c3537436a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6428.1f4327d6ae5fdf9a.js +287 -0
- package/apps/pwa/out/_next/static/chunks/644.02cb026fa44bcd0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6466-6c87d60d3dd174fb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9507.7026657a2f47eb64.js → 6540.c7bef57ad8f90a87.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/6773.d4264665ab31bec0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6822.3c789f1a8443e774.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5574.f35accf4f132b29d.js → 6944.309f4e3ea54d1537.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7261-8ff69d3b2ee671fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7266.084c6bbc70035140.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7271.5c0100e7320aa856.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7429-bf5731358c8f2f68.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7464.01f7a0ae1215fbe7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7479.0fcad5f37eb64f0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7483.427a2fe2049e388d.js +148 -0
- package/apps/pwa/out/_next/static/chunks/7502-be74718178e13e56.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7530.0889722b19572065.js +24 -0
- package/apps/pwa/out/_next/static/chunks/7645.5b2ee3ad45c55ea3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7788.7d1c79f1a8e18946.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7900.096f455c7c1efc53.js +77 -0
- package/apps/pwa/out/_next/static/chunks/7910-6f139bcafd238b9f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7966.f71c8958d1637548.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5947-135e26537d80a6b9.js → 8062-7cd0bcc7f01455ba.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/8073.f6cf2f2c71aafbd0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8201.190b94088980f430.js +74 -0
- package/apps/pwa/out/_next/static/chunks/8205.282ca4bb62d54a0a.js +62 -0
- package/apps/pwa/out/_next/static/chunks/8313-dfa1021bb58a46d6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/837-81336ebaca8198a8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8447.7963352ef5f71b76.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8574-868e8129525ef6d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8588.d1c6a2903727ce87.js +149 -0
- package/apps/pwa/out/_next/static/chunks/8637.90f92d5c8db4732c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2743.5d3f76948be32b34.js → 868.6e953be05bcf6dca.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/8706-e1fe0309343a2273.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8749-06384cdfc4520add.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5964-7e21164a8f2cf0ce.js → 8861-cc1fa1c7b920fa8e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8967-7dfebf710c9dec9d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5159.115f1c2ca471386c.js → 8986.8e2e4efbfa655c59.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8997-3c564dbb3b58b055.js +1 -0
- package/apps/pwa/out/_next/static/chunks/923.2034d10ae91e9c20.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9312.bc1b89c5d4368033.js +1 -0
- package/apps/pwa/out/_next/static/chunks/943.39ae5e82f4f1893f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9469.0500480de55fb205.js +32 -0
- package/apps/pwa/out/_next/static/chunks/9770.5f75bc6088b16109.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9810-2543267050e58b82.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9870.8419702475254745.js +8 -0
- package/apps/pwa/out/_next/static/chunks/9941-376d1b74d51b01a4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9958.385434ab04241758.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{b2271e54.c1de3347976e90b0.js → aa57532f.510551854ff239b1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-deea1450b17cb8dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-70985b904f8650ef.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-a2e15e33e56a4353.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-fc72ce2db12d6ca9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-be03e41f9436ebd9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-35a35999382da3f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-3ff5b1e6ca88b848.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-a65101300a0ee5c1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-3aca5b6d67dba511.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-45b8ab0a71e61314.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-53046e282d4cda8e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-17809e60e8354c17.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-fd2442d347bf5898.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-e9d720d6fc082e21.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-6b8b4267bab0a677.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-deea1450b17cb8dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-8bcf6233ac7c17af.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-7cc25591cfc2126f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-053e871f35c9beba.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-eff819f0c2d5e084.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-4d7e9d8db5274a87.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-2b2d8f5aa5f69ad4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-0b8f92c5062e68b1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-1bd9d0fdac2ced3d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-9ee28f7df07428ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-44b7a1ff468c6648.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-cbc6523711dc1b65.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-fdad47899c2695be.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/{page-40f9e19149024298.js → page-79a8b5fee4c20871.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-03e8ac9606aeaffb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-4cd55c55ec287e2f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-db17b4305404161e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-30041d848350fd02.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-c540da022dbf86b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-9399efc538da057f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/{page-a142dfb0331a05f5.js → page-ca2d09128c585ca4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-0e2635aecd343038.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ef7f4399b6b7726e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-deea1450b17cb8dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-caf530535b875468.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-eaa20c1543a5fd8e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c541eb1b75120f61.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-ab5e213eda9479f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-0a815f34367b6db6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-e858ba0ed9393b68.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-1638ee9dd6e0582f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-4cf5a399109391f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-b4396321238798ec.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-cb72bfd21006781a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-6135d0242afbc434.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-a1dccf907eddb856.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{53aeb4ee-51c92f8d683f5220.js → c7945435-b44d4dbe90ba0dcb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{2fdf2931.b431eee4fb468bc3.js → cb0f8df8.09a4a6be97e3fc5f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{c0c1a699.0ba79f97005965d4.js → d96660fb.cbc21a2a88539dbb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/ea514caa.05a24f78d9dffe5f.js +122 -0
- package/apps/pwa/out/_next/static/chunks/{83184dcd-0ee6247ff41eb3f2.js → fb7d20d5-6892502b6ee39ca6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/framework-e8a911e19b1be41f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-7022f418fabba021.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-e5f15df755756a1e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-4525f91e36940c9b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-140f0e519c085b0f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-8f22ef63dcb865b1.js +1 -0
- package/apps/pwa/out/_next/static/css/{b9d8151e48998417.css → 62c858ad53854f47.css} +1 -1
- package/apps/pwa/out/_next/static/css/d1f8bb401740a549.css +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +23 -23
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +23 -23
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +23 -23
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +22 -22
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +22 -22
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +23 -23
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +22 -22
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +23 -23
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +23 -23
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +22 -22
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +23 -23
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +24 -25
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +23 -23
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +23 -23
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +22 -22
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +23 -23
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +23 -23
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +24 -25
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +24 -25
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +22 -22
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +22 -22
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +22 -22
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +23 -23
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +23 -23
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +22 -22
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +22 -22
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +22 -22
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +22 -22
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +23 -23
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +23 -23
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +22 -22
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +23 -23
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +23 -23
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +23 -23
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +23 -23
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +23 -23
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +22 -22
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +23 -23
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +23 -23
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +23 -23
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +23 -23
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +23 -23
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +23 -23
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +23 -23
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +23 -23
- package/catalog/external-commands.yaml +5 -3
- package/catalog/meta/catalogVersion.yaml +2 -1
- package/catalog/signing/catalog-signing-public.pem +3 -0
- package/docs/goal-context/04-mock-scenarios.md +13 -0
- package/graphs/catalog/catalog.yaml +1 -1
- package/graphs/heal/heal-loop.yaml +1 -0
- package/graphs/intake/intake-daily.yaml +16 -0
- package/graphs/intake/news-sources.yaml +1 -0
- package/graphs/intake/recipes.yaml +7 -0
- package/graphs/overlays/examples/research-runtime-empty-terminal.yaml +28 -0
- package/graphs/overlays/stop-heal-ladder.yaml +113 -0
- package/graphs/profiles/local.yaml +5 -0
- package/graphs/profiles/pod.yaml +4 -0
- package/graphs/units/verbs/recipes.yaml +11 -11
- package/graphs/work/research-report.yaml +10 -2
- package/package.json +6 -2
- package/plugins/demo-absorption-briefing/plugin.json +18 -0
- package/plugins/demo-absorption-briefing/skills/demo-absorption-briefing/SKILL.md +8 -0
- package/plugins/demo-browser-hand/plugin.json +13 -0
- package/plugins/demo-browser-hand/skills/demo-browser-hand/SKILL.md +8 -0
- package/plugins/demo-linear-secretary/plugin.json +15 -0
- package/plugins/demo-linear-secretary/skills/demo-linear-secretary/SKILL.md +8 -0
- package/plugins/demo-plugin-wizard/plugin.json +11 -0
- package/plugins/demo-plugin-wizard/skills/demo-plugin-wizard/SKILL.md +8 -0
- package/plugins/demo-research/plugin.json +16 -0
- package/plugins/demo-research/skills/demo-research/SKILL.md +8 -0
- package/plugins/demo-video-briefing/plugin.json +15 -0
- package/plugins/demo-video-briefing/skills/demo-video-briefing/SKILL.md +8 -0
- package/scripts/build-signed-catalog.ts +48 -0
- package/scripts/ci-typecheck-main-delta.sh +88 -0
- package/scripts/codex-fallback-live-probe.ts +1 -1
- package/scripts/demo/demo1104-parallel-scenes.ts +301 -0
- package/scripts/demo/demo1104-stage.config.ts +21 -0
- package/scripts/demo/demo1104-stage.ts +316 -0
- package/scripts/goal-method-audit.ts +17 -1
- package/scripts/graph-units/land-enqueue.ts +90 -0
- package/scripts/heal/run-role.ts +99 -5
- package/scripts/hooks/codex-notify.sh +32 -0
- package/scripts/install.sh +10 -38
- package/scripts/land-global-checks.ts +6 -1
- package/scripts/landing-heal/land-plan.ts +57 -0
- package/scripts/lib/decompose-ab.ts +1 -0
- package/scripts/lib/fixtures/tui-regress/help-insufficient-commands.txt +15 -0
- package/scripts/lib/fixtures/tui-regress/help-live.txt +42 -0
- package/scripts/lib/fixtures/tui-regress/help-missing-keys.txt +21 -0
- package/scripts/lib/fixtures/tui-regress/help-original.txt +51 -0
- package/scripts/lib/fixtures/tui-regress/help-shifted-input.txt +26 -0
- package/scripts/lib/tui-regress-checks.ts +33 -13
- package/scripts/release-loop/auto-approve-node.ts +1 -1
- package/scripts/release-loop/gate-autoheal-sim-evidence.ts +60 -0
- package/scripts/release-loop/gate-baseline-receipt.ts +47 -9
- package/scripts/release-loop/gate-image-pin.ts +81 -0
- package/scripts/release-loop/gate-method.ts +139 -0
- package/scripts/release-loop/gate-node-sim.ts +207 -0
- package/scripts/release-loop/gate-node.ts +463 -64
- package/scripts/release-loop/gate-pod-image-sticky-plan.ts +99 -0
- package/scripts/release-loop/gate-radius-live.ts +97 -13
- package/scripts/release-loop/gate-shard-dispatch.ts +43 -0
- package/scripts/release-loop/gate-traffic-mode.ts +151 -3
- package/scripts/release-loop/gate-train-receipts.ts +122 -0
- package/scripts/release-loop/node-verdict.ts +38 -25
- package/scripts/release-loop/preflight.ts +362 -8
- package/scripts/release-loop/resume-release.ts +83 -8
- package/scripts/release-loop/unattended-release.ts +20 -9
- package/scripts/rhythm/daily.ts +36 -4
- package/scripts/rhythm/linear-progress-sync.ts +298 -0
- package/scripts/ux-sim.ts +18 -1
- package/scripts/video-pipeline.ts +9 -1
- package/scripts/warm-pool-provider-config.ts +286 -0
- package/skills/omni-crawl/SKILL.md +5 -2
- package/skills/omni-crawl/scripts/main.ts +84 -23
- package/src/acp/agent-manager.ts +1 -0
- package/src/acp/codex-app-server-agent.ts +33 -0
- package/src/acp/codex-app-server-client.ts +153 -16
- package/src/acp/core-turn-bridge.ts +27 -9
- package/src/acp/event-router.ts +20 -1
- package/src/acp/server.ts +6 -0
- package/src/agent/registry.ts +2 -0
- package/src/agent/task-notification.ts +25 -5
- package/src/agent/types.ts +6 -0
- package/src/agent-mission/browser-roundtrip-coordinator.ts +85 -0
- package/src/agent-mission/claude-headless.ts +4 -1
- package/src/agent-mission/codex-exec.ts +105 -0
- package/src/agent-mission/driver.ts +192 -11
- package/src/agent-mission/grok-auth-status.ts +47 -0
- package/src/agent-mission/hand-hooks.ts +101 -0
- package/src/agent-mission/mission-cli.ts +63 -4
- package/src/agent-mission/mission-hand-reply.ts +118 -0
- package/src/agent-mission/mission-line.ts +180 -0
- package/src/agent-mission/mission-out.ts +833 -0
- package/src/agent-mission/tool-install.ts +200 -3
- package/src/agent-substrate/context-strategy.ts +4 -4
- package/src/agent-substrate/self-review-cli.ts +178 -13
- package/src/agents/general-purpose.md +1 -1
- package/src/auto-research/research-turn.ts +211 -53
- package/src/autopilot/pr-manager.ts +69 -10
- package/src/autopilot/pty-control-loop.ts +2 -0
- package/src/boot/daemon-tools/self-implement.ts +3 -1
- package/src/boot/daemon-tools/web-search.ts +1 -2
- package/src/briefing/brief-items.ts +55 -11
- package/src/capture/tui-self-report.ts +22 -6
- package/src/chat/index.ts +1 -1
- package/src/cli/agent-cli.ts +2 -1
- package/src/cli/catalog-cli.ts +31 -0
- package/src/cli/connector-cli.ts +16 -0
- package/src/cli/doctor-fix.ts +2 -2
- package/src/cli/fixtures/review-loop-breaker/opwaiver-32646-1694ccc7a170.json +1 -0
- package/src/cli/fixtures/review-loop-breaker/opwaiver-32853-bd8f73595c83.json +1 -0
- package/src/cli/fixtures/review-loop-breaker/opwaiver-33097-1cc85900413c.json +1 -0
- package/src/cli/fixtures/review-loop-breaker/opwaiver-33106-972f31e4a3ca.json +1 -0
- package/src/cli/fixtures/review-loop-breaker/opwaiver-33113-3ab51f05968f.json +1 -0
- package/src/cli/fixtures/review-loop-breaker/pr-33097-1cc85900413c.json +1 -0
- package/src/cli/intake-source-cli.ts +44 -8
- package/src/cli/msg-cli.ts +32 -3
- package/src/cli/pr-cli.ts +21 -1
- package/src/cli/pr-land-heavy-remote.ts +75 -5
- package/src/cli/pr-land-overlap-evidence.ts +113 -2
- package/src/cli/pr-land-pod-shadow-job.ts +202 -4
- package/src/cli/pr-land-pod-shadow.ts +9 -2
- package/src/cli/release-checklist-read-cli.ts +57 -19
- package/src/cli/release-cli.ts +23 -3
- package/src/cli/research-cli.ts +13 -5
- package/src/cli/setup-cli.ts +166 -6
- package/src/cli/setup-keys.ts +187 -0
- package/src/cli/task-plugin-wizard-host.ts +114 -0
- package/src/cli/tasks-cli.ts +61 -9
- package/src/cli/tui-test-cli.ts +186 -0
- package/src/compact/auto.ts +8 -1
- package/src/config.ts +4 -2
- package/src/connectors/linear-daily-progress.ts +228 -0
- package/src/connectors/linear-projector.ts +34 -12
- package/src/connectors/linear.ts +151 -7
- package/src/control-plane/ledger.ts +52 -2
- package/src/control-plane/server.ts +16 -2
- package/src/core-turn/deep-turn-bloom.ts +67 -0
- package/src/core-turn/research-policy.ts +37 -0
- package/src/core-turn/run-core-turn.ts +606 -95
- package/src/core-turn/run-goal-loop.ts +18 -0
- package/src/core-turn/types.ts +4 -0
- package/src/dashboard/chat/acp-chat.ts +10 -0
- package/src/dashboard/classic-sidetab-mission-job.ts +161 -0
- package/src/dashboard/classic-sidetab-mission-pair.ts +81 -0
- package/src/dashboard/classic-sidetab-mission-trio.ts +219 -0
- package/src/dashboard/classic-sidetab-mission.ts +347 -0
- package/src/dashboard/index.ts +517 -18
- package/src/dashboard/input/agent-wake.ts +23 -1
- package/src/dashboard/input/chat-main-acp-dispatch.ts +23 -0
- package/src/dashboard/input/chat-main-plain-turn-runtime.ts +17 -0
- package/src/dashboard/mission-cli-consumer.ts +165 -0
- package/src/dashboard/plugin-wizard-runtime.ts +50 -0
- package/src/dashboard/plugin-wizard-tool.ts +55 -0
- package/src/dashboard/seat-boot-preamble.ts +171 -1
- package/src/dashboard/side-basic-runtime.ts +54 -1
- package/src/dashboard/sidetab-runtime.ts +90 -1
- package/src/dashboard/skill-catalog-preamble.ts +101 -0
- package/src/dashboard/skill-detection-runtime.ts +55 -15
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +15 -0
- package/src/dashboard/terminal-popup-runtime.ts +6 -3
- package/src/dashboard/turn-preamble.ts +53 -15
- package/src/dashboard/turn-prompt-runtime.ts +4 -2
- package/src/decisions/linear-progress-summary.ts +78 -0
- package/src/decisions/linear-progress-sync.ts +152 -0
- package/src/domains/outbound-alert.ts +49 -11
- package/src/domains/telegram-kind-route.ts +16 -9
- package/src/graph-runner/arg-allowance.ts +13 -0
- package/src/graph-runner/graph-cli.ts +23 -7
- package/src/graph-runner/graph-run-api.ts +3 -1
- package/src/graph-runner/graph-tick.ts +10 -2
- package/src/graph-runner/runner.ts +86 -18
- package/src/graph-wizard/mission-compose.ts +407 -12
- package/src/grok/agent-search.ts +14 -4
- package/src/grok/credential.ts +28 -11
- package/src/harness/dispatch-backpressure.ts +54 -1
- package/src/harness/dispatch-shadow-compare.ts +74 -0
- package/src/harness/harness-cli-command.ts +11 -1
- package/src/harness/harness-pod-dispatch.ts +81 -15
- package/src/harness/harness-stop.ts +155 -11
- package/src/harness/skill-exec.ts +21 -9
- package/src/harness/skill-select.ts +1 -1
- package/src/hooks/error-report-cloud.ts +101 -0
- package/src/hooks/receiver.ts +29 -2
- package/src/index.ts +159 -13
- package/src/instance/spawn-elanous.ts +6 -4
- package/src/intake-plane/actions.ts +354 -0
- package/src/intake-plane/adapters/telegram-ambient.ts +34 -18
- package/src/intake-plane/intake-sources.ts +78 -8
- package/src/intake-plane/items.ts +14 -4
- package/src/intake-plane/linear-mission-sync.ts +80 -0
- package/src/intake-plane/linear-secretary-runtime.ts +178 -0
- package/src/intake-plane/linear-wish.ts +227 -1
- package/src/life/life-cli.ts +168 -0
- package/src/life/life-kinds.ts +160 -0
- package/src/live-supply/budget-consumer.ts +78 -0
- package/src/live-supply/read.ts +3 -0
- package/src/live-supply/snapshot.ts +45 -0
- package/src/llm/provider-credentials.ts +8 -2
- package/src/llm.ts +168 -9
- package/src/loops/orchestrator/coordinator-shadow.ts +226 -0
- package/src/loops/orchestrator/tick.ts +13 -0
- package/src/maturity/feature-maturity.ts +4 -4
- package/src/msg/msg-sse-server.ts +3 -3
- package/src/msg/msg-store.ts +177 -19
- package/src/native-tool-catalog.ts +38 -4
- package/src/nexus/api/harness-traversal.ts +11 -0
- package/src/nexus/api/http-server.ts +37 -1
- package/src/nexus/api/mcp-public-allowlist.ts +2 -0
- package/src/nexus/index.ts +7 -2
- package/src/nexus/outbound/format.ts +9 -0
- package/src/nexus/outbound/router.ts +98 -13
- package/src/nexus/setup-status.ts +9 -0
- package/src/nexus/state/state.ts +3 -0
- package/src/oauth/codex-account-store.ts +20 -7
- package/src/oauth/codex-owner-mirror.ts +44 -0
- package/src/oauth/codex.ts +17 -2
- package/src/oauth/fallback-chain.ts +47 -17
- package/src/onboarding/first-run-doctor.ts +8 -1
- package/src/onboarding/first-run.ts +85 -26
- package/src/onboarding/key-setup.ts +103 -0
- package/src/onboarding/menu-answer.ts +13 -0
- package/src/onboarding/secret-prompt.ts +37 -0
- package/src/plugins/install/plugin-install.ts +59 -0
- package/src/pr-tool/census.ts +133 -2
- package/src/pty-shell/pty-control-ipc.ts +4 -1
- package/src/pty-shell/tui-run-state.ts +188 -2
- package/src/registry/catalog-server.ts +232 -0
- package/src/registry/loader.ts +45 -1
- package/src/registry/types.ts +1 -2
- package/src/release-loop/checklist-target-path-hint.ts +13 -0
- package/src/release-loop/checklist.ts +9 -1
- package/src/repl/index.ts +43 -2
- package/src/research/axis-fanout.ts +136 -16
- package/src/research/bloom-exemplars.ts +3 -1
- package/src/research/gap-followup.ts +13 -1
- package/src/research/plugin-discovery.ts +36 -14
- package/src/research-bridge/invoke.ts +22 -5
- package/src/research-bridge/types.ts +2 -0
- package/src/self-dev/ask-launch-flow.ts +72 -1
- package/src/self-dev/decompose.ts +119 -5
- package/src/self-dev/dev-cli.ts +4 -1
- package/src/self-dev/dev-pipeline.ts +5 -0
- package/src/self-dev/draft-residue.ts +64 -5
- package/src/self-dev/graph-front-nodes.ts +2 -1
- package/src/self-dev/graph-journey-route.ts +76 -21
- package/src/self-dev/launch-preflight-text.ts +5 -6
- package/src/self-dev/launch-preflight.ts +58 -0
- package/src/self-dev/orchestrate.ts +13 -3
- package/src/self-dev/review-provider-fallback.ts +9 -2
- package/src/self-dev/run-supervisor.ts +42 -4
- package/src/self-dev/run-types.ts +4 -0
- package/src/self-dev/shard-aggregate.ts +4 -0
- package/src/self-dev/shard-run.ts +36 -15
- package/src/self-implement/abandoned-classification.ts +12 -3
- package/src/self-implement/budget-gate.ts +7 -0
- package/src/self-implement/child-llm-preference.ts +10 -1
- package/src/self-implement/doctor-visit.ts +118 -8
- package/src/self-implement/elanous-tui-spawn.ts +3 -0
- package/src/self-implement/fixtures/tdd-green-missing-passing-child-transcript.txt +2 -0
- package/src/self-implement/gate-artifacts.ts +2 -1
- package/src/self-implement/goal-author-cli.ts +4 -2
- package/src/self-implement/goal-author.ts +684 -7
- package/src/self-implement/graph-overlay-yaml.ts +37 -4
- package/src/self-implement/graph-overlay.ts +3 -1
- package/src/self-implement/graph-profile-yaml.ts +107 -0
- package/src/self-implement/graph-yaml.ts +26 -3
- package/src/self-implement/headless-elanous-driver.ts +31 -2
- package/src/self-implement/heal-intake.ts +112 -4
- package/src/self-implement/heal-triage.ts +20 -0
- package/src/self-implement/host-regate.ts +27 -4
- package/src/self-implement/merge-train.ts +5 -0
- package/src/self-implement/off-diff-evidence.ts +249 -5
- package/src/self-implement/orchestrator.ts +365 -25
- package/src/self-implement/regate-detail.ts +38 -1
- package/src/self-implement/rework-child-provider.ts +25 -0
- package/src/self-implement/run-chart.ts +122 -0
- package/src/self-implement/run-ledger.ts +162 -11
- package/src/self-implement/run-stop.ts +188 -4
- package/src/self-implement/runtime-overlay-run-steps.ts +95 -0
- package/src/self-implement/stop-autoheal.ts +13 -0
- package/src/self-implement/tdd-evidence-tags.ts +9 -0
- package/src/self-implement/train-gate-receipt.ts +166 -0
- package/src/self-implement/train-gate-remote.ts +62 -18
- package/src/session/chat.ts +40 -4
- package/src/session/session-fanout.ts +2 -0
- package/src/session/streaming/acp-stream-sink.ts +2 -1
- package/src/session/streaming/chunk-producer.ts +6 -0
- package/src/session/streaming/stream-compositor.ts +3 -2
- package/src/session-runtime/index.ts +135 -5
- package/src/session-runtime/retry-policy.ts +1 -1
- package/src/session-runtime/tier-flip.ts +3 -3
- package/src/setup/llm-env-detect.ts +3 -0
- package/src/setup/service-key-catalog.ts +46 -0
- package/src/setup/service-keys.ts +241 -0
- package/src/sidetab-core/model.ts +19 -5
- package/src/sidetab-core/visible-agent-mission.ts +262 -0
- package/src/skills/name-match.ts +20 -0
- package/src/skills/tools/agent.ts +53 -6
- package/src/skills/tools/omni-search.ts +173 -13
- package/src/task-agent/parent-host.ts +10 -0
- package/src/task-agent/pod-distributor-entry.ts +3 -0
- package/src/task-agent/repair-outcomes.ts +65 -0
- package/src/task-agent/task-hand.ts +47 -7
- package/src/task-orchestrator/dispatcher.ts +14 -1
- package/src/task-orchestrator/linear-capture-events.ts +55 -0
- package/src/task-orchestrator/store.ts +16 -5
- package/src/task-orchestrator/surfaces/pod-artifact-return.ts +4 -0
- package/src/task-orchestrator/surfaces/pod-distributor.ts +48 -0
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +92 -1
- package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +38 -1
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +113 -14
- package/src/task-orchestrator/surfaces/pod-si-warm-entry.ts +33 -6
- package/src/task-orchestrator/surfaces/pod-source-bundle.ts +45 -9
- package/src/task-orchestrator/surfaces/pod-source-receive.ts +178 -16
- package/src/task-orchestrator/surfaces/pod-source-spec.ts +3 -3
- package/src/task-orchestrator/surfaces/pod-warm-switch.ts +2 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +237 -41
- package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +80 -3
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +337 -51
- package/src/task-orchestrator/surfaces/self-implement.ts +27 -3
- package/src/task-orchestrator/surfaces/warm-reuse-evidence.ts +169 -0
- package/src/task-orchestrator/types.ts +14 -0
- package/src/telegram.ts +14 -16
- package/src/terminal/coding-agent.ts +14 -5
- package/src/terminal/session-registry.ts +1 -1
- package/src/tokens.ts +35 -2
- package/src/tool-hints/gate.ts +1 -0
- package/src/tool-runtime/agent-runtime.ts +2 -0
- package/src/tool-runtime/browser-hand-runtime.ts +381 -0
- package/src/tool-runtime/browser-runtime.ts +2 -1
- package/src/tool-runtime/elanous-linear-issue-runtime.ts +76 -0
- package/src/tool-runtime/elanous-linear-secretary-runtime.ts +57 -0
- package/src/tool-runtime/elanous-skills-list-runtime.ts +5 -1
- package/src/tool-runtime/graph-mcp-runtimes.ts +240 -0
- package/src/tool-runtime/index.ts +6 -0
- package/src/tool-runtime/skill-exec-runtime.ts +33 -13
- package/src/tool-runtime/types.ts +4 -0
- package/src/tui/entry.ts +38 -5
- package/src/tui/sidetab/attach.ts +177 -1
- package/src/tui/sidetab/herdr-portal.ts +225 -0
- package/src/tui-client/local-chat-turn.ts +26 -13
- package/src/tui.ts +22 -0
- package/src/user-config.ts +34 -9
- package/src/user-intent/types.ts +4 -3
- package/src/ux-sim/browser-hand.ts +165 -0
- package/src/ux-sim/draft-inventory-builder.ts +198 -0
- package/src/ux-sim/fake-browser-page.ts +81 -0
- package/src/ux-sim/fake-kubectl.ts +37 -3
- package/src/ux-sim/fake-linear-device.ts +31 -0
- package/src/ux-sim/fault-pool-cap.ts +11 -6
- package/src/ux-sim/graph-engine-sim.ts +47 -0
- package/src/ux-sim/linear-secretary.ts +216 -0
- package/src/ux-sim/mock-scenario-catalog.json +93 -0
- package/src/ux-sim/mock-scenario-catalog.ts +274 -0
- package/src/ux-sim/onboarding-first-run-device.ts +31 -21
- package/src/ux-sim/scenario.ts +185 -48
- package/src/ux-sim/service-key-setup.ts +50 -0
- package/src/ux-sim/term-slash-device.ts +74 -0
- package/src/ux-sim/turn-throw-sim.ts +31 -0
- package/src/version/packed-revision.json +1 -1
- package/src/voice/voice-tts-singleton.ts +18 -3
- package/src/web-search/exa.ts +77 -0
- package/src/web-search/grok.ts +5 -9
- package/src/web-search/index.ts +30 -9
- package/src/web-search/provider.ts +4 -1
- package/src/web-search/x-intent.ts +5 -0
- package/apps/pwa/out/_next/static/chunks/1115.434ae2ecb0ad986d.js +0 -149
- package/apps/pwa/out/_next/static/chunks/1121.667cec0bcdbb3fdb.js +0 -36
- package/apps/pwa/out/_next/static/chunks/1197-54da59d250a6e476.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1245.1cfd13b26dbd71d6.js +0 -287
- package/apps/pwa/out/_next/static/chunks/1494-f93046ff5c5a124d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1609.2b312797599b8e45.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1661.0dd330f3d89f73f3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/167-0c121e4b47e0f9da.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1700.cdc2bf8cc685e221.js +0 -90
- package/apps/pwa/out/_next/static/chunks/1703-78e46acad29f3cfc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1765.679b29625c8e88d4.js +0 -77
- package/apps/pwa/out/_next/static/chunks/1971-7efb628c471dc5a0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1999-8de7b7bb36801913.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2073.689dcb2680113d76.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2198-557d49184104d165.js +0 -1
- package/apps/pwa/out/_next/static/chunks/221-440ce67fa9f5c839.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2427-8ed8e98624cbd664.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2457-725c5827bc003795.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2491-2718b15a5ccb75a5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2527-5c636a43c7cc5dde.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2692-1027cb16fe4ccf49.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2773.0e80b9d325fb5635.js +0 -32
- package/apps/pwa/out/_next/static/chunks/2873-0f3cb56c8e3528ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3097.864e92bdaa2f4d15.js +0 -79
- package/apps/pwa/out/_next/static/chunks/3136-d6870ba63300a93e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3173-0289113d434e83b7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/325-dd9208a1a0ab7ce4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3283.528f430dd043fb4e.js +0 -74
- package/apps/pwa/out/_next/static/chunks/3295.cc8cb13b8f0dae1a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3688-86e3b88abf18cb3b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3804-7220467a5473a8df.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3808.3e1e247ce7bdf889.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3927.b5473ad109da44c5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3934-98ea94832e194796.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4156.ba4de4a3664f04b4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4297-239ca82f293faab0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4320-dcc5a7734126f4c9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4434.94b4c552a2d91e69.js +0 -148
- package/apps/pwa/out/_next/static/chunks/4579.03e4092f73950965.js +0 -226
- package/apps/pwa/out/_next/static/chunks/4667.97e31aa38c95c475.js +0 -309
- package/apps/pwa/out/_next/static/chunks/4702.4a4adc1f16d7c93b.js +0 -64
- package/apps/pwa/out/_next/static/chunks/4815.481501c57b3568d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/487-d16e698ef14662d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4888-7a38bf522c9cc6fe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5034-30e429d6bb086881.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5040-35c494e60dadd97d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/50c6ab1e.81a96e419350909d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5154.4b6a836179356f30.js +0 -94
- package/apps/pwa/out/_next/static/chunks/5228-a8200df486278f2d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5379.97af106d09566f69.js +0 -8
- package/apps/pwa/out/_next/static/chunks/5479-b6372e762719f92f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5534-699c5cbcbc96c5d7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5701.9c4e8f250312eeee.js +0 -24
- package/apps/pwa/out/_next/static/chunks/5892.2526d962339662d8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5937.c2df9e3447e1f667.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5941.8210cc93c9202c0a.js +0 -286
- package/apps/pwa/out/_next/static/chunks/5975.4004f820ae3cecd5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6142-7ccd48795d7abd55.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6160.bf9177b8c1bfb243.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6398.71ba0690c8027555.js +0 -27
- package/apps/pwa/out/_next/static/chunks/6492.2bd5c10edc1a064e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6552.a3840aa7da35ad68.js +0 -62
- package/apps/pwa/out/_next/static/chunks/6736.1e36d3ac5fa5e41d.js +0 -24
- package/apps/pwa/out/_next/static/chunks/6900.3ccbe069bdd4556a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/71327eb4.add50b365f94bf3a.js +0 -122
- package/apps/pwa/out/_next/static/chunks/7136.deca3e3a2ddaa374.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7139-ee9f8ed2677a40b3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7191.fdc955f7d96064a4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7423-e0aa5d9e2962120e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7453.afc1ea7e05d56a8c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7503-5e6a3d7fe67e4a0c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7761-476fd7bf768abd34.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7975.eafb12097a0a9e62.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8050-9b364bdef8f71927.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8152.64e253c35cccfaae.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8190.620f0231b3924bcb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8448.45b6b1f1a99eeb35.js +0 -104
- package/apps/pwa/out/_next/static/chunks/8464-e24f10451b658aac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8477.e4c944bb3aa5d2f3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8710.ca385257d5ca422e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8830.627ccf294ec2465c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8880.64c445592f04acaf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8981.c706964c8ba27aff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9053.bd0fffaff8d3f836.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9161-c66e723d7ec9d682.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9185.1ecdf9b65c0bb684.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9356.fccd5f58086b4ff5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9446.dc0406109371d329.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9506.dcf25d467a42627e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9541.eb8e2f8480c7feca.js +0 -93
- package/apps/pwa/out/_next/static/chunks/9577.ed7582186efa5482.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9579.4a8169600fff2058.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9642-ff2e039eb62e3b92.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9659-8f2323348113ad80.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9724.4c5623af2db43153.js +0 -34
- package/apps/pwa/out/_next/static/chunks/9869.81a1e24ca682d5a0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-8d9d76ea322d855c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-ed2c4e59f9f1fe21.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-2dc99e03c5d76ca0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-b5a3a788330e920f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-14949db884bfa672.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-ea76c85b36388a97.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-01716d20af62d325.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-62baf6881a64b1e9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-f89ba590c2af8afa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-22f8b0f78d9637e5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-817f9d7e6820be80.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-ffb9bc0d2650249a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-f6d0e64873c0f629.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-8bfa0d4ba23a209d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-f5060462249e32c7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-8d9d76ea322d855c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-b2049f8b1ef79117.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-1446c5fa93907f11.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-b48a7a07c5204156.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-e974b8c4ca47614c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-8a919b869bd28594.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-d31b8de6bfcd72ed.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-64765f817909db29.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-d128c8569a36ee9b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-b2679d357e9b9270.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-6fabec98a9e7b269.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-048f30149dcf1349.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-9113181d6b5a2725.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-1e7a755a13227611.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-3c8f8b67a203cf07.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-18032f5437215062.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-da3b739192fd0ee3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-d332545571bd6fd1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-5237aa5b3f3b8ec5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-d16e56c3989c147e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-6b6593600869e2cd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-8d9d76ea322d855c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-29e8b8a8396b55cb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-b3414d856a1a7e2f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c3affa52b7ce961b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f21dddf9f95b6fab.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-f5a30a24745bf088.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-8c8569a09b4d4e34.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-2ce32722c0243483.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-4767b0d9c0a98c6c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-116ee1339c387a75.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-35e8c50ca4ef7ffc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-52e17113356bb891.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-7458ae05ed2ac1a0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-ad6c9dd524ad6ef8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-2ddd1f2b44d6aa59.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-e3d82bdc358d20c5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-71d5aa3896e1655f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-03ffc54e00438546.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-56bb89af5a611d0b.js +0 -1
- package/apps/pwa/out/_next/static/css/be9019f696217521.css +0 -1
- package/apps/pwa/out/_next/static/css/d0a48dc099ed86cf.css +0 -1
- /package/apps/pwa/out/_next/static/{GiOLWmt4MqDZePubBjA4Q → Om5xS9jpjSXJCeTNGYEi4}/_ssgManifest.js +0 -0
|
@@ -63,7 +63,7 @@ export async function selectHarnessSkill(
|
|
|
63
63
|
try { index = (deps.index ?? getSkillIndex()) as SkillIndexEntry[]; } catch { return null; }
|
|
64
64
|
if (!index.length) return null;
|
|
65
65
|
const invoke: InvokeFn = deps.invoke ?? ((obj, skill) => invokeResearch(obj, { skill }).then((r) => ({ ok: r.ok, output: r.output })));
|
|
66
|
-
const allowlist = deps.allowlist ?? HARNESS_EXEC_ALLOWLIST; // S2 — config 확장 주입(기본
|
|
66
|
+
const allowlist = deps.allowlist ?? HARNESS_EXEC_ALLOWLIST; // S2 — config 확장 주입(기본 승인 목록·무회귀)
|
|
67
67
|
|
|
68
68
|
// 1) luna 의미매칭(주경로) — allowlist ∩ luna픽 을 격리 실행. null=luna 실패(→fallback)·[]=관련없음(fallback 도 시도).
|
|
69
69
|
let picked: string[] = [];
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Compute } from 'google-auth-library';
|
|
2
|
+
import type { ReceivedReport } from './error-report.js';
|
|
3
|
+
|
|
4
|
+
const GCS_SCOPE = 'https://www.googleapis.com/auth/devstorage.read_write';
|
|
5
|
+
const PUBSUB_SCOPE = 'https://www.googleapis.com/auth/pubsub';
|
|
6
|
+
const DEFAULT_PROJECT_ID = 'pearlplaygroud';
|
|
7
|
+
const DEFAULT_BUCKET = 'elanous-error-reports-pearl';
|
|
8
|
+
const DEFAULT_TOPIC = 'error-reports';
|
|
9
|
+
|
|
10
|
+
export type ErrorReportCloudStage = 'store' | 'publish';
|
|
11
|
+
|
|
12
|
+
export class ErrorReportCloudError extends Error {
|
|
13
|
+
constructor(readonly stage: ErrorReportCloudStage, cause?: unknown) {
|
|
14
|
+
super(`error report cloud ${stage} failed`, { cause });
|
|
15
|
+
this.name = 'ErrorReportCloudError';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface GoogleRequestOptions {
|
|
20
|
+
url: string;
|
|
21
|
+
method: 'POST';
|
|
22
|
+
params?: Record<string, string | number>;
|
|
23
|
+
data: string | Record<string, unknown>;
|
|
24
|
+
headers?: Record<string, string>;
|
|
25
|
+
timeout?: number;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface CloudErrorReportPublisherOptions {
|
|
29
|
+
projectId?: string;
|
|
30
|
+
bucket?: string;
|
|
31
|
+
topic?: string;
|
|
32
|
+
request?: (options: GoogleRequestOptions) => Promise<unknown>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function reportObjectName(item: ReceivedReport): string {
|
|
36
|
+
const date = new Date(item.receivedAt);
|
|
37
|
+
if (!Number.isFinite(date.getTime())) throw new Error('receivedAt must be a valid date');
|
|
38
|
+
const year = String(date.getUTCFullYear());
|
|
39
|
+
const month = String(date.getUTCMonth() + 1).padStart(2, '0');
|
|
40
|
+
const day = String(date.getUTCDate()).padStart(2, '0');
|
|
41
|
+
return `${year}/${month}/${day}/${item.reportId}.json`;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function statusCode(error: unknown): number | undefined {
|
|
45
|
+
if (!error || typeof error !== 'object') return undefined;
|
|
46
|
+
const response = 'response' in error ? error.response : undefined;
|
|
47
|
+
return response && typeof response === 'object' && 'status' in response && typeof response.status === 'number'
|
|
48
|
+
? response.status : undefined;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Writes the validated original to private GCS, then publishes the same receipt for independent consumers. */
|
|
52
|
+
export function createCloudErrorReportPublisher(options: CloudErrorReportPublisherOptions = {}): (item: ReceivedReport) => Promise<void> {
|
|
53
|
+
const projectId = options.projectId ?? process.env.ELANOUS_ERROR_REPORT_GCP_PROJECT ?? DEFAULT_PROJECT_ID;
|
|
54
|
+
const bucket = options.bucket ?? process.env.ELANOUS_ERROR_REPORT_GCS_BUCKET ?? DEFAULT_BUCKET;
|
|
55
|
+
const topic = options.topic ?? process.env.ELANOUS_ERROR_REPORT_PUBSUB_TOPIC ?? DEFAULT_TOPIC;
|
|
56
|
+
let authRequest: ((request: GoogleRequestOptions) => Promise<unknown>) | undefined;
|
|
57
|
+
const request = options.request ?? (async (requestOptions: GoogleRequestOptions) => {
|
|
58
|
+
if (!authRequest) {
|
|
59
|
+
// Compute obtains short-lived credentials from the VM metadata server;
|
|
60
|
+
// it never falls back to a GOOGLE_APPLICATION_CREDENTIALS key file.
|
|
61
|
+
const client = new Compute({ scopes: [GCS_SCOPE, PUBSUB_SCOPE] });
|
|
62
|
+
authRequest = (value) => client.request(value);
|
|
63
|
+
}
|
|
64
|
+
return authRequest(requestOptions);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
return async (item) => {
|
|
68
|
+
const name = reportObjectName(item);
|
|
69
|
+
const body = JSON.stringify(item);
|
|
70
|
+
try {
|
|
71
|
+
await request({
|
|
72
|
+
url: `https://storage.googleapis.com/upload/storage/v1/b/${encodeURIComponent(bucket)}/o`,
|
|
73
|
+
method: 'POST',
|
|
74
|
+
params: { uploadType: 'media', name, ifGenerationMatch: 0 },
|
|
75
|
+
data: body,
|
|
76
|
+
headers: { 'content-type': 'application/json' },
|
|
77
|
+
timeout: 10_000,
|
|
78
|
+
});
|
|
79
|
+
} catch (error) {
|
|
80
|
+
// A retry after a successful upload but lost response sees 412; keep the
|
|
81
|
+
// immutable original and proceed to publish the receipt.
|
|
82
|
+
if (statusCode(error) !== 412) throw new ErrorReportCloudError('store', error);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
try {
|
|
86
|
+
await request({
|
|
87
|
+
url: `https://pubsub.googleapis.com/v1/projects/${encodeURIComponent(projectId)}/topics/${encodeURIComponent(topic)}:publish`,
|
|
88
|
+
method: 'POST',
|
|
89
|
+
data: {
|
|
90
|
+
messages: [{
|
|
91
|
+
data: Buffer.from(body, 'utf8').toString('base64'),
|
|
92
|
+
attributes: { reportId: item.reportId, dedupe: item.dedupe, schemaVersion: '1' },
|
|
93
|
+
}],
|
|
94
|
+
},
|
|
95
|
+
timeout: 10_000,
|
|
96
|
+
});
|
|
97
|
+
} catch (error) {
|
|
98
|
+
throw new ErrorReportCloudError('publish', error);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}
|
package/src/hooks/receiver.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { HookQueue, type QueuedHook } from './queue.js';
|
|
|
7
7
|
import { recordGithubShadow, type ShadowReviewResult } from './github-shadow.js';
|
|
8
8
|
import { toExternalTask, verifyWebhook, type HookProvider } from './providers.js';
|
|
9
9
|
import { drainReports, handleReportPost, ReportLimiter, ReportQueue, type ReceivedReport } from './error-report.js';
|
|
10
|
+
import { createCloudErrorReportPublisher } from './error-report-cloud.js';
|
|
10
11
|
import { ConsultLimiter, ConsultQueue, drainConsults, handleConsultPost, type QueuedConsult } from './consult-intake.js';
|
|
11
12
|
import { effectiveInstanceRoot } from '../instance/resolve.js';
|
|
12
13
|
|
|
@@ -28,6 +29,9 @@ export interface HookReceiverOptions {
|
|
|
28
29
|
wakeSeat?: HookWake;
|
|
29
30
|
/** ER2 — forward one queued error report to the Primary; default = POST /v1/reports/ingest over the tailnet. */
|
|
30
31
|
forwardReport?: (item: ReceivedReport) => Promise<boolean>;
|
|
32
|
+
/** ER3 — persist and fan out through GCS + Pub/Sub before using the legacy Primary path. */
|
|
33
|
+
publishCloudReport?: (item: ReceivedReport) => Promise<void>;
|
|
34
|
+
cloudReportsEnabled?: boolean;
|
|
31
35
|
/** CS1 — forward a queued consultation to the Primary's consult ledger. */
|
|
32
36
|
forwardConsult?: (item: QueuedConsult) => Promise<boolean>;
|
|
33
37
|
/** CS1 — the public consult route is a write path from the open internet, so it stays closed (404) until
|
|
@@ -99,6 +103,9 @@ export function startHookReceiver(options: HookReceiverOptions): { url: string;
|
|
|
99
103
|
const reportQueue = new ReportQueue(options.root ?? effectiveInstanceRoot(), (event, data) => debug.log('hooks.reports', event, data));
|
|
100
104
|
const reportLimiter = new ReportLimiter(options.now ?? Date.now);
|
|
101
105
|
const forwardReport = options.forwardReport ?? forwardReportToPrimary;
|
|
106
|
+
const publishCloudReport = options.publishCloudReport ?? createCloudErrorReportPublisher();
|
|
107
|
+
const cloudReportsEnabled = options.cloudReportsEnabled ?? process.env.ELANOUS_ERROR_REPORT_CLOUD_ENABLED === 'true';
|
|
108
|
+
debug.log('error-collect', cloudReportsEnabled ? 'cloud-enabled' : 'cloud-disabled', {});
|
|
102
109
|
const consultEnabled = options.consultEnabled ?? consultRouteEnabled();
|
|
103
110
|
debug.log('hooks.consult', consultEnabled ? 'route-open' : 'route-closed', {});
|
|
104
111
|
const consultQueue = new ConsultQueue(options.root ?? effectiveInstanceRoot(), (_event, data) =>
|
|
@@ -128,8 +135,28 @@ export function startHookReceiver(options: HookReceiverOptions): { url: string;
|
|
|
128
135
|
if (stopped || reportsDraining || Date.now() < reportNextAt) return;
|
|
129
136
|
reportsDraining = true;
|
|
130
137
|
try {
|
|
131
|
-
|
|
132
|
-
|
|
138
|
+
let cloudDelivered = 0;
|
|
139
|
+
let primaryFallbackDelivered = 0;
|
|
140
|
+
const deliver = async (item: ReceivedReport): Promise<boolean> => {
|
|
141
|
+
if (cloudReportsEnabled) {
|
|
142
|
+
try {
|
|
143
|
+
await publishCloudReport(item);
|
|
144
|
+
cloudDelivered++;
|
|
145
|
+
debug.log('error-collect', 'published', { reportId: item.reportId });
|
|
146
|
+
return true;
|
|
147
|
+
} catch (error) {
|
|
148
|
+
const stage = error && typeof error === 'object' && 'stage' in error
|
|
149
|
+
&& (error.stage === 'store' || error.stage === 'publish') ? error.stage : 'unknown';
|
|
150
|
+
debug.log('error-collect', 'publish-failed', { reportId: item.reportId, stage });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
const delivered = await forwardReport(item);
|
|
154
|
+
if (delivered) primaryFallbackDelivered++;
|
|
155
|
+
return delivered;
|
|
156
|
+
};
|
|
157
|
+
const result = await drainReports(reportQueue, deliver, (options.now ?? Date.now)());
|
|
158
|
+
if (primaryFallbackDelivered) debug.log('hooks.reports', 'forwarded', { delivered: primaryFallbackDelivered });
|
|
159
|
+
if (cloudDelivered) debug.log('error-collect', 'drained', { delivered: cloudDelivered });
|
|
133
160
|
if (result.failed) {
|
|
134
161
|
reportFailures++;
|
|
135
162
|
reportNextAt = Date.now() + Math.min(300_000, Math.max(1, options.retryBaseMs ?? 1000) * 2 ** Math.min(reportFailures - 1, 20));
|
package/src/index.ts
CHANGED
|
@@ -27,6 +27,7 @@ import { isOldDoorInternalCall, refuseOldDoor } from './self-dev/old-door.js';
|
|
|
27
27
|
import { collectCommandEntrances, renderCommandEntrances } from './self-dev/entrance-inventory.js';
|
|
28
28
|
import { isGoalAuthorFileName } from './self-implement/goal-document.js';
|
|
29
29
|
import { DEV_PIPELINE_SINK_SURFACE } from './self-implement/self-cli-sink-surface.js';
|
|
30
|
+
import { DEFAULT_TUI_TEST_READY_TIMEOUT_MS } from './self-implement/elanous-tui-spawn.js';
|
|
30
31
|
|
|
31
32
|
import { applyTestStateDirFlagFromArgv } from './cli/test-state-dir-flag.js';
|
|
32
33
|
import { applyTestFlagFromArgv, observeTestFlagOwnership, uncoveredTestFlagPaths, staleTestFlagPaths } from './cli/test-flag.js';
|
|
@@ -97,6 +98,7 @@ function selectedIndexNextTuiRoot(args: readonly string[]): '__tui_next__' | und
|
|
|
97
98
|
const isCliEntry = import.meta.main || /[\\/]bin[\\/]elanous\.mjs$/.test(process.argv[1] ?? '');
|
|
98
99
|
const INDEX_FAST_ROOT = selectedIndexFastRoot(process.argv.slice(2))
|
|
99
100
|
?? (isCliEntry ? selectedIndexNextTuiRoot(process.argv.slice(2)) : undefined);
|
|
101
|
+
const shouldRegisterSetupCommand = !INDEX_FAST_ROOT || INDEX_FAST_ROOT === 'setup';
|
|
100
102
|
// Keep the historical index exports without forcing the agent engine into
|
|
101
103
|
// unrelated CLI commands at module load time.
|
|
102
104
|
export const runChatTurnCli: typeof import('./cli/agent-cli.js').runChatTurnCli =
|
|
@@ -153,6 +155,10 @@ const registerPrivateLedgerCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '_
|
|
|
153
155
|
const registerKnowCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'know'
|
|
154
156
|
? (() => undefined)
|
|
155
157
|
: (require('./cli/know-cli.js') as typeof import('./cli/know-cli.js')).registerKnowCommand) as typeof import('./cli/know-cli.js').registerKnowCommand;
|
|
158
|
+
// LIFE-KINDS(0.2.43) — 생애 종류·끝의 증거·반복 실행 시리즈의 생산 진입점(`eln life …`).
|
|
159
|
+
const registerLifeCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '__full__'
|
|
160
|
+
? (() => undefined)
|
|
161
|
+
: (require('./life/life-cli.js') as typeof import('./life/life-cli.js')).registerLifeCommands) as typeof import('./life/life-cli.js').registerLifeCommands;
|
|
156
162
|
const registerSeatRequestsCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'seat'
|
|
157
163
|
? (() => undefined)
|
|
158
164
|
: (require('./cli/seat-requests-cli.js') as typeof import('./cli/seat-requests-cli.js')).registerSeatRequestsCommands) as typeof import('./cli/seat-requests-cli.js').registerSeatRequestsCommands;
|
|
@@ -278,6 +284,9 @@ const registerDoctorCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'doctor'
|
|
|
278
284
|
const registerProviderCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'provider'
|
|
279
285
|
? (() => undefined)
|
|
280
286
|
: (require('./cli/provider-cli.js') as typeof import('./cli/provider-cli.js')).registerProviderCommands) as typeof import('./cli/provider-cli.js').registerProviderCommands;
|
|
287
|
+
const registerCatalogCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'catalog'
|
|
288
|
+
? (() => undefined)
|
|
289
|
+
: (require('./cli/catalog-cli.js') as typeof import('./cli/catalog-cli.js')).registerCatalogCommands) as typeof import('./cli/catalog-cli.js').registerCatalogCommands;
|
|
281
290
|
const registerAgentCommands = (INDEX_FAST_ROOT
|
|
282
291
|
? (() => undefined)
|
|
283
292
|
: (require('./cli/agent-cli.js') as typeof import('./cli/agent-cli.js')).registerAgentCommands) as typeof import('./cli/agent-cli.js').registerAgentCommands;
|
|
@@ -287,9 +296,9 @@ const registerControlCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'control
|
|
|
287
296
|
const registerHooksCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '__full__'
|
|
288
297
|
? (() => undefined)
|
|
289
298
|
: (require('./cli/hooks-cli.js') as typeof import('./cli/hooks-cli.js')).registerHooksCommands) as typeof import('./cli/hooks-cli.js').registerHooksCommands;
|
|
290
|
-
const registerSetupCommand = (
|
|
291
|
-
? (()
|
|
292
|
-
: (
|
|
299
|
+
const registerSetupCommand = (shouldRegisterSetupCommand
|
|
300
|
+
? (require('./cli/setup-cli.js') as typeof import('./cli/setup-cli.js')).registerSetupCommand
|
|
301
|
+
: (() => undefined)) as typeof import('./cli/setup-cli.js').registerSetupCommand;
|
|
293
302
|
const registerStartCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'start'
|
|
294
303
|
? (() => undefined)
|
|
295
304
|
: (require('./cli/start-cli.js') as typeof import('./cli/start-cli.js')).registerStartCommand) as typeof import('./cli/start-cli.js').registerStartCommand;
|
|
@@ -330,6 +339,7 @@ import { filterCliRootHelp } from './maturity/cli-maturity.js';
|
|
|
330
339
|
import type { AdPipelinePlan, AdPipelineResult } from './ad-pipeline/run.js';
|
|
331
340
|
import type { AcpPermissionApprover } from './acp/client.js';
|
|
332
341
|
import { runGitCommand } from './git-fs/runner.js';
|
|
342
|
+
import { loadWarmReuseEvidenceByConsumer } from './task-orchestrator/surfaces/warm-reuse-evidence.js';
|
|
333
343
|
import { debug, redactSecretText, redactSecrets } from './debug/log.js';
|
|
334
344
|
import type { HarnessAskSayChildLlmOptions, HarnessAskSayOptions, HarnessPlanOptions } from './harness/harness-cli-command.js';
|
|
335
345
|
import { CliUserError, formatCliUserError, isCliUserError } from './cli/cli-user-error.js';
|
|
@@ -1121,6 +1131,22 @@ async function runDevSayFromWords(
|
|
|
1121
1131
|
|
|
1122
1132
|
registerPtyTakeoverCommands(program);
|
|
1123
1133
|
registerPtyRecordCommand(program.commands.find((command) => command.name() === 'pty')!);
|
|
1134
|
+
program.command('tui')
|
|
1135
|
+
.description('test-universe TUI helpers')
|
|
1136
|
+
.command('test')
|
|
1137
|
+
.description('Prepare latest-main isolated test universe and return a held TUI PTY, runId, and snapshot')
|
|
1138
|
+
.option('--ready-timeout-ms <ms>', 'single held-PTY readiness deadline', String(DEFAULT_TUI_TEST_READY_TIMEOUT_MS))
|
|
1139
|
+
.option('--with-pwa-build', 'install/build PWA when its static export is missing')
|
|
1140
|
+
.action(async (opts: { readyTimeoutMs?: string; withPwaBuild?: boolean }) => {
|
|
1141
|
+
try {
|
|
1142
|
+
const { runTuiTestUniverse } = await import('./cli/tui-test-cli.js');
|
|
1143
|
+
const result = await runTuiTestUniverse({ readyTimeoutMs: Number(opts.readyTimeoutMs), withPwaBuild: opts.withPwaBuild });
|
|
1144
|
+
process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
1145
|
+
} catch (error) {
|
|
1146
|
+
process.stderr.write(`tui test: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
1147
|
+
process.exitCode = 1;
|
|
1148
|
+
}
|
|
1149
|
+
});
|
|
1124
1150
|
// Keep the public PR help slot but defer its large CI/landing import graph
|
|
1125
1151
|
// until the PR command is actually selected (including direct Commander use).
|
|
1126
1152
|
const prCommandOrder = program.commands.length;
|
|
@@ -1130,6 +1156,9 @@ const prShell = program.command('pr').description('PR landing commands');
|
|
|
1130
1156
|
prShell.command('supersede-drafts').description('확인된 병합 PR의 명시 Supersedes 같은 칸 draft만 정리')
|
|
1131
1157
|
.requiredOption('--pr <number>', '병합 PR 번호')
|
|
1132
1158
|
.option('--cwd <path>', '저장소 경로');
|
|
1159
|
+
prShell.command('lineage <pr>').description('PR 계보의 관측 사실만 JSON으로 읽기 (첫 조각 · 닫기 판정 없음)')
|
|
1160
|
+
.requiredOption('--json', 'JSON 관측 결과 출력')
|
|
1161
|
+
.option('--cwd <path>', '저장소 경로');
|
|
1133
1162
|
prShell.command('census').description('열린 PR 전체·골 문서만·2일 무커밋 draft·미닫힌 superseded 집계').option('--cwd <path>', '저장소 경로');
|
|
1134
1163
|
prShell.command('open-guard').description('새 PR 전에 같은 파일 OPEN PR·골 문서만·자리별 상한 검사')
|
|
1135
1164
|
.option('--cwd <path>', '작업 트리 경로').option('--base <ref>', '비교 base ref', 'origin/main')
|
|
@@ -1252,6 +1281,7 @@ registerLiveCommands(program);
|
|
|
1252
1281
|
registerResearchCommand(program);
|
|
1253
1282
|
registerReleaseCommands(program);
|
|
1254
1283
|
registerKnowCommand(program);
|
|
1284
|
+
registerLifeCommands(program);
|
|
1255
1285
|
registerNotifyCommand(program);
|
|
1256
1286
|
registerAwayCommand(program);
|
|
1257
1287
|
registerFreezeCommands(program);
|
|
@@ -1590,7 +1620,7 @@ registerDoctorCommand(program);
|
|
|
1590
1620
|
registerControlCommands(program);
|
|
1591
1621
|
registerHooksCommands(program);
|
|
1592
1622
|
registerSetupCommand(program);
|
|
1593
|
-
if (
|
|
1623
|
+
if (shouldRegisterSetupCommand) {
|
|
1594
1624
|
program.commands.find(command => command.name() === 'setup')!
|
|
1595
1625
|
.option('--terminal', 'Run the terminal onboarding wizard')
|
|
1596
1626
|
.hook('preAction', async (_command, action) => {
|
|
@@ -1701,6 +1731,27 @@ linearCmd.command('sync').requiredOption('--team <key>', 'Linear team key')
|
|
|
1701
1731
|
try { process.exitCode = await runLinearSync(opts); }
|
|
1702
1732
|
catch (error) { console.error(`connector linear sync: ${(error as Error).message}`); process.exitCode = 1; }
|
|
1703
1733
|
});
|
|
1734
|
+
linearCmd.command('daily-summary').description('Post one public-safe daily progress summary per referenced Linear issue')
|
|
1735
|
+
.option('--version <version>', 'Release checklist version (defaults to the current development version)')
|
|
1736
|
+
.option('--send', 'Post comments; without this flag only print the planned summaries')
|
|
1737
|
+
.option('--json', 'JSON output')
|
|
1738
|
+
.action(async (opts: { send?: boolean; json?: boolean; version?: string }) => {
|
|
1739
|
+
const { runLinearDailyProgress } = await import('./cli/connector-cli.js');
|
|
1740
|
+
try { process.exitCode = await runLinearDailyProgress(opts); }
|
|
1741
|
+
catch (error) { console.error(`connector linear daily-summary: ${(error as Error).message}`); process.exitCode = 1; }
|
|
1742
|
+
});
|
|
1743
|
+
linearCmd.command('secretary').description('Ground a request and create a Linear parent with 3–5 assigned subtasks')
|
|
1744
|
+
.argument('<request>', 'Request to break down; quote multi-word text, e.g. "11-04 demo preparation"')
|
|
1745
|
+
.action(async (request: string) => {
|
|
1746
|
+
const { runLinearSecretaryRequest } = await import('./intake-plane/linear-secretary-runtime.js');
|
|
1747
|
+
try {
|
|
1748
|
+
const result = await runLinearSecretaryRequest(request);
|
|
1749
|
+
console.log(result.replyCard);
|
|
1750
|
+
} catch (error) {
|
|
1751
|
+
console.error(`connector linear secretary: ${(error as Error).message}`);
|
|
1752
|
+
process.exitCode = 1;
|
|
1753
|
+
}
|
|
1754
|
+
});
|
|
1704
1755
|
linearCmd.command('receive').description('Internal signed webhook receiver; read raw payload from stdin')
|
|
1705
1756
|
.requiredOption('--signature <hex>', 'Linear-Signature header')
|
|
1706
1757
|
.requiredOption('--delivery <id>', 'Linear-Delivery header')
|
|
@@ -5630,7 +5681,7 @@ const selfOrchestrateCmd = selfCmd
|
|
|
5630
5681
|
catch (e) { ui.error(`--pod-source: ${e instanceof Error ? e.message : String(e)}`); process.exit(2); }
|
|
5631
5682
|
const outDir = join(elanousStateRoot(), 'pod-sources', runId);
|
|
5632
5683
|
const baseRef = opts.base ?? 'origin/HEAD';
|
|
5633
|
-
try { podSource = resolvePodSource(parsed, { base: baseRef, outDir }); }
|
|
5684
|
+
try { podSource = resolvePodSource(parsed, { base: baseRef, outDir, mirrorHead: image.imageCommit }); }
|
|
5634
5685
|
catch (e) { ui.error(`--pod-source: ${e instanceof Error ? e.message : String(e)}`); process.exit(2); }
|
|
5635
5686
|
debug.log('self-implement.pod', 'source', {
|
|
5636
5687
|
kind: podSource.kind,
|
|
@@ -5642,7 +5693,17 @@ const selfOrchestrateCmd = selfCmd
|
|
|
5642
5693
|
if (childFlags.childLlmProvider?.trim()) debug.log('self-implement.pod', 'child-provider-named', { provider: childFlags.childLlmProvider.trim(), model: childFlags.childLlmModel ?? null, podProvider });
|
|
5643
5694
|
// BEDROCK-POD-PROVIDER-DROP — provider·account 는 한 곳(podLaunchProviderOptions)에서 — 손 나열이 bedrock 을 떨궈 codex(team)로 돌았다(10-11).
|
|
5644
5695
|
const podProviderOptions = (await import('./task-orchestrator/surfaces/pod-child-providers.js')).podLaunchProviderOptions(podProvider, { explicitPodAccount, grokApiKeyOptIn });
|
|
5645
|
-
const
|
|
5696
|
+
const warmReuseEvidence = () => {
|
|
5697
|
+
const sourceRef = opts.base ?? 'origin/HEAD';
|
|
5698
|
+
const source = runGitCommand(process.cwd(), ['rev-parse', '--verify', '--quiet', '--end-of-options', `${sourceRef}^{commit}`], { encoding: 'utf8', timeout: 5_000 });
|
|
5699
|
+
const main = runGitCommand(process.cwd(), ['rev-parse', '--verify', '--quiet', '--end-of-options', 'refs/remotes/origin/main^{commit}'], { encoding: 'utf8', timeout: 5_000 });
|
|
5700
|
+
const headSha = source.status === 0 ? source.stdout.trim() : '';
|
|
5701
|
+
const mainSha = main.status === 0 ? main.stdout.trim() : '';
|
|
5702
|
+
const identity = /^[a-f0-9]{40}$/i.test(headSha) && /^[a-f0-9]{40}$/i.test(mainSha)
|
|
5703
|
+
? { head: headSha, main: mainSha } : undefined;
|
|
5704
|
+
return loadWarmReuseEvidenceByConsumer(identity);
|
|
5705
|
+
};
|
|
5706
|
+
const podBase = { hostSupervised: opts.supervise === true, ...podChildLlm, ...(remoteOnlyPool ? { imageCommit: image.imageCommit } : {}), ...podProviderOptions, ...(accountBroker ? { accountBroker, rotationAccounts } : {}), passEnv, warmReuseConfig: () => getUserConfig().pod?.warmReuse, warmReuseEvidence, ...(pool ? { pool } : {}), ...((opts as { podSkillEnv?: boolean }).podSkillEnv ? { skillEnv: true } : {}), ...(podSource ? { source: podSource } : {}), ...(repairBaseHead && podSource?.kind === 'pr' ? { repairCommitOnly: { pr: podSource.number, baseHead: repairBaseHead } } : {}) };
|
|
5646
5707
|
if (benchArms) {
|
|
5647
5708
|
const { benchPodSpawn } = await import('./task-orchestrator/surfaces/self-implement-pod.js');
|
|
5648
5709
|
podSpawn = benchPodSpawn(benchArms, podBase);
|
|
@@ -6904,6 +6965,7 @@ registerFleetCommands(program);
|
|
|
6904
6965
|
|
|
6905
6966
|
// ── ops (운영 관측 — 지금 뭐 도나·이상 없나·상태 전이) ──
|
|
6906
6967
|
registerOpsCommands(program);
|
|
6968
|
+
registerCatalogCommands(program);
|
|
6907
6969
|
registerOutputsCommands(program);
|
|
6908
6970
|
|
|
6909
6971
|
registerPublishCommands(program);
|
|
@@ -6938,6 +7000,21 @@ const agentCmd = program
|
|
|
6938
7000
|
.alias('codex')
|
|
6939
7001
|
.description(`Agent-mission CLI — 외부 에이전트 backend(${agentBackendHelpList}) 미션·리뷰 워치·셋업. \`codex\` 는 deprecated alias(하위호환).`);
|
|
6940
7002
|
|
|
7003
|
+
let agentMissionCliDepsForTesting: Partial<import('./agent-mission/mission-cli.js').MissionCliDeps> | undefined;
|
|
7004
|
+
let agentMissionLogSinkForTesting: ((surface: string) => Promise<boolean>) | undefined;
|
|
7005
|
+
/** 실제 agent-mission mission 진입점의 탐지·실행 순서를 검증한다. */
|
|
7006
|
+
export function setAgentMissionCliDepsForTesting(
|
|
7007
|
+
deps: Partial<import('./agent-mission/mission-cli.js').MissionCliDeps> | undefined,
|
|
7008
|
+
): void {
|
|
7009
|
+
agentMissionCliDepsForTesting = deps;
|
|
7010
|
+
}
|
|
7011
|
+
/** 진입점 회귀 테스트에서 logs.db 쓰기를 차단한다. */
|
|
7012
|
+
export function setAgentMissionLogSinkForTesting(
|
|
7013
|
+
register: ((surface: string) => Promise<boolean>) | undefined,
|
|
7014
|
+
): void {
|
|
7015
|
+
agentMissionLogSinkForTesting = register;
|
|
7016
|
+
}
|
|
7017
|
+
|
|
6941
7018
|
// ★ 제1원칙 관측 — agent-mission 전 서브커맨드에 logs.db 싱크를 중앙 배선(preAction 훅)하고, 레거시
|
|
6942
7019
|
// `codex` alias 진입이면 브레드크럼(명명 중립화 이행률 추적 → alias 제거 안전시점 판정 근거).
|
|
6943
7020
|
// • 균일 커버리지: 훅은 mission/review-*/setup/models/config-migrate 모든 액션 앞에 1회 실행 →
|
|
@@ -6955,8 +7032,11 @@ const AGENT_MISSION_SURFACE_BY_SUB: Record<string, string> = {
|
|
|
6955
7032
|
agentCmd.hook('preAction', async (_thisCommand, actionCommand) => {
|
|
6956
7033
|
const surface = AGENT_MISSION_SURFACE_BY_SUB[actionCommand.name()] ?? 'agent-mission';
|
|
6957
7034
|
try {
|
|
6958
|
-
|
|
6959
|
-
|
|
7035
|
+
if (agentMissionLogSinkForTesting) await agentMissionLogSinkForTesting(surface);
|
|
7036
|
+
else {
|
|
7037
|
+
const { registerStandaloneLogSink } = await import('./domains/standalone-log-sink.js');
|
|
7038
|
+
await registerStandaloneLogSink(surface);
|
|
7039
|
+
}
|
|
6960
7040
|
} catch { /* fail-open */ }
|
|
6961
7041
|
try {
|
|
6962
7042
|
const { isLegacyCodexInvocation, AGENT_ALIAS_LOG_CATEGORY } = await import('./agent-mission/legacy-alias.js');
|
|
@@ -6972,6 +7052,37 @@ agentCmd.hook('preAction', async (_thisCommand, actionCommand) => {
|
|
|
6972
7052
|
} catch { /* fail-soft — 관측 실패가 명령 실행을 막지 않음 */ }
|
|
6973
7053
|
});
|
|
6974
7054
|
|
|
7055
|
+
agentCmd.command('mirror')
|
|
7056
|
+
.description('Codex 주인 호스트의 refresh 없는 접근 미러')
|
|
7057
|
+
.command('push <host>')
|
|
7058
|
+
.description('현재 주인 호스트의 사용 가능한 Codex 계정들을 원격 CLI 미러로 보낸다')
|
|
7059
|
+
.action(async (host: string) => {
|
|
7060
|
+
try {
|
|
7061
|
+
const [{ getUserConfig }, { hqFenceDecision }, parentHost, pod, auth, accountsStore] = await Promise.all([
|
|
7062
|
+
import('./user-config.js'), import('./hq/hq.js'), import('./task-agent/parent-host.js'),
|
|
7063
|
+
import('./task-orchestrator/surfaces/self-implement-pod.js'), import('./oauth/store.js'), import('./oauth/codex-account-store.js'),
|
|
7064
|
+
]);
|
|
7065
|
+
const { isCodexTokenOwnerHost } = await import('./oauth/codex-owner-mirror.js');
|
|
7066
|
+
if (!isCodexTokenOwnerHost(getUserConfig())) throw new Error('Codex 토큰 주인 호스트에서만 mirror push 를 실행할 수 있다');
|
|
7067
|
+
if (!hqFenceDecision('ledger-cli').run) throw new Error('HQ 주인 임대가 없어 Codex mirror push 를 거부한다');
|
|
7068
|
+
const target = parentHost.resolveParentHost({ host, cwd: process.cwd() }, { ...process.env, ELANOUS_TA_PARENT_HOST: undefined });
|
|
7069
|
+
if (!target) throw new Error('잘못된 원격 호스트 이름');
|
|
7070
|
+
const accounts = accountsStore.listCodexAccountsInStore();
|
|
7071
|
+
if (!accounts.length) throw new Error('주인 Codex 계정이 없다');
|
|
7072
|
+
if (accounts.length > 16) throw new Error('Codex 계정이 16개를 넘어 미러를 안전하게 교체할 수 없다');
|
|
7073
|
+
const mirrors: Array<{ account: string; elanousAuth: string; codexAuth: string }> = [];
|
|
7074
|
+
for (const account of accounts) {
|
|
7075
|
+
const credential = pod.hostCredentials(account.name, auth.authStorePath(), () => '', { requireExplicitChatgptAuthMode: true });
|
|
7076
|
+
mirrors.push({ account: account.name, elanousAuth: credential.elanousAuth, codexAuth: credential.codexAuth });
|
|
7077
|
+
}
|
|
7078
|
+
parentHost.installRemoteCodexCliMirror(target, mirrors);
|
|
7079
|
+
console.log(`Codex 접근 미러 설치 완료 · host=${target.host} · accounts=${mirrors.length} · refresh=미포함`);
|
|
7080
|
+
} catch (error) {
|
|
7081
|
+
console.error(`codex mirror push 실패: ${error instanceof Error ? error.message : String(error)}`);
|
|
7082
|
+
process.exitCode = 1;
|
|
7083
|
+
}
|
|
7084
|
+
});
|
|
7085
|
+
|
|
6975
7086
|
registerCapabilitiesCommand(agentCmd);
|
|
6976
7087
|
registerSupervisorMetricsCommand(agentCmd);
|
|
6977
7088
|
|
|
@@ -7068,9 +7179,11 @@ agentCmd
|
|
|
7068
7179
|
.option('--screens <dir>', '스크린 캡처 디렉토리')
|
|
7069
7180
|
.option('--backend <id>', `외부 에이전트 backend (${agentBackendHelpList}). 각 CLI auto-approve 모드로 PTY 구동. 미등록 지정 시 명시 에러(조용한 codex 폴백 없음·애그노스틱)`)
|
|
7070
7181
|
.option('--chain <backends>', '한 미션의 backend 사슬 (예: codex,claude,elanous)')
|
|
7182
|
+
.option('--duo', 'Codex와 Claude Code를 같은 과제로 병렬 실행하고 에이전트별 결과와 요약을 출력')
|
|
7071
7183
|
.option('--plugin <name@market>', '에이전트 화면 안에서 플러그인을 설치하고 그 스킬로 미션 실행 (codex/claude)')
|
|
7072
7184
|
.addOption(new Option('--resources <mode>', '미션 전 자원 판단 사다리 (on|off, 기본 on)').choices(['on', 'off']).default('on'))
|
|
7073
7185
|
.option('--headless', 'Claude 구독 CLI를 비대화형 stream-json 모드로 실행 (claude backend 전용)')
|
|
7186
|
+
.option('--follow-up <prompt>', '같은 Claude/Codex CLI 세션을 재개해 두 번째 사용자 턴을 보냄 (비대화형 선택 경로)')
|
|
7074
7187
|
.action(async (textParts: string[], opts: Record<string, any>) => {
|
|
7075
7188
|
// 구독 모드 보장 — 브레인(streamLLM)·codex 둘 다 ChatGPT 구독으로 (API 과금 회피).
|
|
7076
7189
|
delete process.env.OPENAI_API_KEY;
|
|
@@ -7078,6 +7191,7 @@ agentCmd
|
|
|
7078
7191
|
// ★ U4b — 액션 글루(backend 검증·mission-file/text·evidence·spec 빌드·통일 진입점 실행)는
|
|
7079
7192
|
// runAgentMissionCliCommand(테스트 가능 seam)로 추출. 액션은 I/O(print/exit)만 담당.
|
|
7080
7193
|
const { resolveBackend } = await import('./agent-mission/driver.js');
|
|
7194
|
+
const { detectAgentCli, prepareAgentCli } = await import('./agent-mission/tool-install.js');
|
|
7081
7195
|
const { runAgentMissionCliCommand } = await import('./agent-mission/mission-cli.js');
|
|
7082
7196
|
const controller = new AbortController();
|
|
7083
7197
|
const onSigint = (): void => { controller.abort(); };
|
|
@@ -7085,12 +7199,26 @@ agentCmd
|
|
|
7085
7199
|
let outcome: Awaited<ReturnType<typeof runAgentMissionCliCommand>>;
|
|
7086
7200
|
try {
|
|
7087
7201
|
outcome = await runAgentMissionCliCommand(textParts, opts as import('./agent-mission/mission-cli.js').MissionCliOpts,
|
|
7088
|
-
{ resolveBackend, signal: controller.signal
|
|
7202
|
+
{ resolveBackend, detectAgentCli, onStatus: (line) => console.error(`[agent-mission] ${line}`), signal: controller.signal,
|
|
7203
|
+
prepareAgentCli: (agent) => prepareAgentCli(agent, {
|
|
7204
|
+
onStatus: (line) => console.error(`[agent-mission] ${line}`),
|
|
7205
|
+
confirmInstall: async (prompt) => {
|
|
7206
|
+
if (!process.stdin.isTTY || !process.stderr.isTTY) {
|
|
7207
|
+
console.error('[agent-mission] 설치 확인은 대화형 터미널에서만 받을 수 있습니다.');
|
|
7208
|
+
return false;
|
|
7209
|
+
}
|
|
7210
|
+
const { createInterface } = await import('node:readline/promises');
|
|
7211
|
+
const readline = createInterface({ input: process.stdin, output: process.stderr });
|
|
7212
|
+
try { return /^(?:y|yes|예)$/i.test((await readline.question(`${prompt} [y/N] `)).trim()); }
|
|
7213
|
+
finally { readline.close(); }
|
|
7214
|
+
},
|
|
7215
|
+
}),
|
|
7216
|
+
...agentMissionCliDepsForTesting });
|
|
7089
7217
|
} finally {
|
|
7090
7218
|
process.removeListener('SIGINT', onSigint);
|
|
7091
7219
|
}
|
|
7092
7220
|
if (!outcome.ok) { console.error(`❌ ${outcome.message}`); process.exit(outcome.exitCode); }
|
|
7093
|
-
await writeStdoutJson(JSON.stringify(outcome.result, null, 2) + '\n');
|
|
7221
|
+
await writeStdoutJson(JSON.stringify(outcome.duo ?? outcome.result, null, 2) + '\n');
|
|
7094
7222
|
process.exit(outcome.exitCode);
|
|
7095
7223
|
});
|
|
7096
7224
|
|
|
@@ -7707,7 +7835,7 @@ const selfDevCmd = program
|
|
|
7707
7835
|
.option('--implement', 'self: headless implementation chat turn(--new·--tools·--goal-loop·interactive dispatch)')
|
|
7708
7836
|
.option('--elanous', 'self: 격리 bare elanous TUI child를 LLM 제어 루프로 목표까지 구동')
|
|
7709
7837
|
.option('--hold', 'elanous: brain 없이 띄우고 elanous pty 로 밖에서 몬다(--elanous 전용·--goal과 동시 사용 불가)')
|
|
7710
|
-
.option('--ready-timeout-ms <ms>',
|
|
7838
|
+
.option('--ready-timeout-ms <ms>', `elanous hold: PTY readiness 대기 상한(ms·양의 정수·기본 ${DEFAULT_TUI_TEST_READY_TIMEOUT_MS})`)
|
|
7711
7839
|
.option('-g, --goal <goal>', 'elanous 또는 셸 drive: child가 달성할 목표(--elanous 또는 <command> 또는 --attach와 함께)')
|
|
7712
7840
|
.option('-n, --max-steps <n>', 'elanous 또는 셸 drive: 최대 제어 스텝(기본 30)')
|
|
7713
7841
|
.option('-p, --poll-ms <ms>', 'elanous 또는 셸 drive: 제어 스텝 간 폴 간격(ms·0 허용·기본 800)')
|
|
@@ -8780,6 +8908,15 @@ missionCmd
|
|
|
8780
8908
|
persistMissionOutcome(setMissionMode(cfg.llm.missionRouting, mode));
|
|
8781
8909
|
});
|
|
8782
8910
|
|
|
8911
|
+
// Stateless shell bridge for Codex/Claude agent missions. State is scoped to
|
|
8912
|
+
// the active Elanous instance; replies are persisted and mirrored to logs.db.
|
|
8913
|
+
if (!INDEX_FAST_ROOT) {
|
|
8914
|
+
const { registerMissionOutCommand } = require('./agent-mission/mission-out.js') as typeof import('./agent-mission/mission-out.js');
|
|
8915
|
+
registerMissionOutCommand(program, {
|
|
8916
|
+
emit: (event) => debug.log('mission.reply', 'reply', event),
|
|
8917
|
+
});
|
|
8918
|
+
}
|
|
8919
|
+
|
|
8783
8920
|
registerTasksCommands(program);
|
|
8784
8921
|
registerBriefCommands(program);
|
|
8785
8922
|
registerLabelsCommands(program);
|
|
@@ -8815,7 +8952,7 @@ program
|
|
|
8815
8952
|
return;
|
|
8816
8953
|
}
|
|
8817
8954
|
const cfg = reloadUserConfig();
|
|
8818
|
-
await
|
|
8955
|
+
await runChatTurnCli({
|
|
8819
8956
|
cfg,
|
|
8820
8957
|
userText: parts.join(' '),
|
|
8821
8958
|
explicitSessionId: opts.session,
|
|
@@ -12678,7 +12815,16 @@ async function main(): Promise<void> {
|
|
|
12678
12815
|
if (await runWebFirstSetup({ config: cfg, startedAt: firstRunStartedAt, startIfMissing: false }) === 'link-shown') return;
|
|
12679
12816
|
}
|
|
12680
12817
|
const { runFirstRun } = await import('./onboarding/first-run.js');
|
|
12681
|
-
if (
|
|
12818
|
+
if (process.stdin.isTTY === true) {
|
|
12819
|
+
const setupIO = (await import('./onboarding.js')).realIO();
|
|
12820
|
+
try {
|
|
12821
|
+
const result = await runFirstRun({ config: cfg, setupWhenNoProvider: async (config) => {
|
|
12822
|
+
const { runFirstRunProviderSetup } = await import('./cli/setup-keys.js');
|
|
12823
|
+
return runFirstRunProviderSetup(setupIO, { config });
|
|
12824
|
+
} });
|
|
12825
|
+
if (result.outcome !== 'ready') return;
|
|
12826
|
+
} finally { setupIO.close(); }
|
|
12827
|
+
} else if ((await runFirstRun({ config: cfg })).outcome !== 'ready') return;
|
|
12682
12828
|
}
|
|
12683
12829
|
|
|
12684
12830
|
// Active-provider banner so users know WHICH model/auth is about to
|
|
@@ -11,6 +11,8 @@ export interface SpawnElanousOptions {
|
|
|
11
11
|
stateDir?: string;
|
|
12
12
|
/** 실행할 elanous 진입 스크립트. 생략하면 이 트리의 bin/elanous.mjs. */
|
|
13
13
|
bin?: string;
|
|
14
|
+
/** Installed command entry (for callers that must honor the user's installed CLI). */
|
|
15
|
+
executable?: string;
|
|
14
16
|
cwd?: string;
|
|
15
17
|
env?: NodeJS.ProcessEnv;
|
|
16
18
|
}
|
|
@@ -26,20 +28,20 @@ export function elanousInvocation(args: readonly string[], opts: SpawnElanousOpt
|
|
|
26
28
|
const root = opts.stateDir?.trim() || effectiveInstanceRoot();
|
|
27
29
|
const base = opts.env ?? process.env;
|
|
28
30
|
return {
|
|
29
|
-
command: process.execPath,
|
|
30
|
-
args: [opts.bin ?? DEFAULT_BIN, ...args],
|
|
31
|
+
command: opts.executable?.trim() || process.execPath,
|
|
32
|
+
args: opts.executable?.trim() ? [...args] : [opts.bin ?? DEFAULT_BIN, ...args],
|
|
31
33
|
env: { ...base, ELANOUS_STATE_DIR: root, ELANOUS_STATE_DIR_SOURCE: stateDirSourceForChild(root, base) },
|
|
32
34
|
};
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
export function spawnElanous(args: readonly string[], opts: SpawnElanousOptions & Omit<SpawnOptions, 'env' | 'cwd'> = {}): ChildProcess {
|
|
36
|
-
const { stateDir: _s, bin: _b, env: _e, ...rest } = opts;
|
|
38
|
+
const { stateDir: _s, bin: _b, executable: _x, env: _e, ...rest } = opts;
|
|
37
39
|
const inv = elanousInvocation(args, opts);
|
|
38
40
|
return spawn(inv.command, inv.args, { ...rest, cwd: opts.cwd, env: inv.env });
|
|
39
41
|
}
|
|
40
42
|
|
|
41
43
|
export function spawnElanousSync(args: readonly string[], opts: SpawnElanousOptions & Omit<SpawnSyncOptions, 'env' | 'cwd'> = {}): SpawnSyncReturns<string | Buffer> {
|
|
42
|
-
const { stateDir: _s, bin: _b, env: _e, ...rest } = opts;
|
|
44
|
+
const { stateDir: _s, bin: _b, executable: _x, env: _e, ...rest } = opts;
|
|
43
45
|
const inv = elanousInvocation(args, opts);
|
|
44
46
|
return spawnSync(inv.command, inv.args, { ...rest, cwd: opts.cwd, env: inv.env });
|
|
45
47
|
}
|