elanous 0.2.36 → 0.2.38
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/{uC-N0emedeNOFuaBQFv-I → RrjXTwz-urRAbChP1bX02}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{9250-072df22eaadaa6b5.js → 1026-44010f405704050c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1118.a8a74ea29aac3e46.js +27 -0
- package/apps/pwa/out/_next/static/chunks/1204-2aa830479adf80f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1341-43b7d2dc77d45c9d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1440-c3ea8882badfd9bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4304.e9b2512834a9e23e.js → 1632.7d87f998e714bede.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1698-9c11cbf97f13717e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1770-3b1fc92253ef9f2f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1923-5c1695332240246a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1938.0e6c60ee91c4d7f5.js +148 -0
- package/apps/pwa/out/_next/static/chunks/{7784.1f0ac4a16d190cf4.js → 2104.70e086d5174a4736.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/213-20675f20673ba22a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6566.926a1d1b7c911442.js → 214.186a430da28338f1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2277.3bd4c0ac7f1b5996.js +93 -0
- package/apps/pwa/out/_next/static/chunks/240.e09f433f71c78ff4.js +104 -0
- package/apps/pwa/out/_next/static/chunks/{5711.957b095705c12560.js → 2415.738b777642a02233.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2417.02151393605a7cd0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2463.cd2641a76daaa9ff.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2576.b9e9c629c4b84c52.js +1 -0
- package/apps/pwa/out/_next/static/chunks/265-c021de53f0865bd9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2998-b1cc13956cd6a6e7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2e4782d3.ba2f0ab2b63a53e7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4286.b70c4520306817e8.js → 3086.fb14b60ce98b53d3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3148-98efd4869d660a87.js → 3124-561f7f037943cde2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3130.626b54382b4dc379.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3221-1bb3f99a55088613.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3280.24edb1ffd03a7f3f.js +24 -0
- package/apps/pwa/out/_next/static/chunks/3288-eb3c22a1cbf2ae68.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3727.7949ccaacaa71242.js → 3291.f6c1005387d514bd.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/33.ef99e8374f96c6c4.js +36 -0
- package/apps/pwa/out/_next/static/chunks/3341-f09b9efbd7a82f70.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3389.012c70767a872f9b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3410-d7c0f14b329d6fda.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3421.c87d6313a7d670f7.js +287 -0
- package/apps/pwa/out/_next/static/chunks/3422-83a3953f9bd67e26.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8904.7d51af2dc033965c.js → 3528.e4b8ab70d339f965.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/3587-002e24e368c515a9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3644.f12a7d821ab940af.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3660.d7516588e2d875c3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3695.b82e2610f4cd4ea9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3858.ca1f5bc0f577eac9.js +94 -0
- package/apps/pwa/out/_next/static/chunks/3959-e6ac4a139d9d4bcc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3f0de3de-2340c532c00395db.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4032.53f62176514ec0ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3031-85328a92fcce4da6.js → 4199-f7c6eb40cd0322f8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4204-ef8484cbecd5d62f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4259-163129ca79913c4b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/428-eaa77df3d0c85969.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4432-97e400ffa1e161f5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/449-aa427cf2cbb75f50.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4491-39a0fd32bbaf3840.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4588.b7cf06d382953979.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4690.70ec8060825366ab.js +32 -0
- package/apps/pwa/out/_next/static/chunks/4804.6012b5cd33c22792.js +90 -0
- package/apps/pwa/out/_next/static/chunks/4881.e4d22d730e3b9df5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4937.ce2e340dc29cad3e.js +79 -0
- package/apps/pwa/out/_next/static/chunks/5-bb1c08d84bd71df3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5005.de98df23b37cdf3c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5035.dc64a89cad5573cc.js +74 -0
- package/apps/pwa/out/_next/static/chunks/5041-5aada92ca215ffdd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{528.38ce20ef8aa251ff.js → 5203.51e5d8b5f1dcfe53.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/5207.1a224035455790fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5255-1b60d50eabe9f057.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5269.d0436ee6d773382a.js +286 -0
- package/apps/pwa/out/_next/static/chunks/5300.677c97e0393742e6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2683.c9773a0c589b031b.js → 5307.d7328020227880c2.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/5309.3367c4d50f52b489.js +1 -0
- package/apps/pwa/out/_next/static/chunks/552-689827d49780fa00.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5539.34cc9d60622cb69b.js +8 -0
- package/apps/pwa/out/_next/static/chunks/5568.218dea0c00ca2ec7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{552.b7d061ad91eeac51.js → 5638.107314dc479e2f37.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/5645.b7e3b055455a04ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5662.18cc0f30353cbd96.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5671.da24fc9dc5e98325.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5b141171.324c40fd49cb6821.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6142.913b44e260a3f925.js +64 -0
- package/apps/pwa/out/_next/static/chunks/6175-d4621f6a10b0cfab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6290.3eb53a20746b72ce.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6415-9307f3eafa90837f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6925.562d532110879886.js → 6493.27ad77de7aac7966.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6579-3de35d00aacd71b5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/680-2f324c4e039a5b67.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6845-331b3c7481da3ba3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7000.28157393caaf5343.js +62 -0
- package/apps/pwa/out/_next/static/chunks/{275-02ea4c2a33980422.js → 7161-8f22db3ec5ed005e.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/7311-60a7ea80d23c7521.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7401.525d0a12f7d02c06.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7438.c2cf72b66dca6aa4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3136.30aaaa5fa03662a3.js → 7488.966b116789f3d41a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{4116.a84a92a2492c080e.js → 7524.ce973525d30b3d52.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7573.2376e13c9c21f1f8.js +77 -0
- package/apps/pwa/out/_next/static/chunks/7577.ea6e9ac72e035520.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3324.a09703033abcbd2f.js → 7628.6b16863ac3972333.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7657.8d1fb3d2f7ebe273.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7903-1435d5d2f0dd7807.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3410.7f9af5ab77cbe65f.js → 7954.4f7a8832663ee979.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7978-30a91192c5dbe3c2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{771.c3cdb6c1f7f47c02.js → 8019.21ca554a821dad01.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/8025-8795821525cf1a07.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8191.3674a00f0b565c23.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8217-604955d8885c5ef2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8298-eed6f5f2585a63f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4615.8525eb0add35eba6.js → 8487.291666583bebe640.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8509.3a54d4e61893d7cb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8758.ac421f726a189125.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6943.c6b24124853a47b2.js → 8879.ac06755bcf3e44a1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/891.d6c723a51a067b36.js +149 -0
- package/apps/pwa/out/_next/static/chunks/{575.d929793a53f27c4b.js → 8911.bf5e712acb25fb6c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9f31e478.fefcbcd3c388ebc5.js → 8994d93e.33ba491f95345fc2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{da5ecc5c-b005ad8cac737d57.js → 89d6c04f-6b8ab341748e468a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{599.c39c571b6733f2a2.js → 9223.cbcc88e0e9950426.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/9299.24e2a7d9b6d1f91b.js +226 -0
- package/apps/pwa/out/_next/static/chunks/9317.6a9869039c231bb3.js +24 -0
- package/apps/pwa/out/_next/static/chunks/9383.e4755f275b3c11ff.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8037.e254fd797aa224d1.js → 9581.da63ddf41acfad46.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9715.8c5529a0a5c41a36.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9817.3009d65f0889ef1f.js +2 -0
- package/apps/pwa/out/_next/static/chunks/{ceba0382.650712b56b85b582.js → 9fe1b809.738da85c8b17e3fb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-76873dd80da4f715.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-ed32b6ec5dea8f23.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-fdd40e15babf3d25.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-384efc78e85e400b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-866aac5ff226a7f3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-d91809c5aeed319a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-128f3522f89a81ab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-595961abf3b43ad1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-f41dccb76d8c0263.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-a3205c2e28b7d0d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-c39a80277814a3f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-1ab3f98194513195.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-a5246f7e254d77d0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-0f92287bdb81217d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-5a37131ff63793ef.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-76873dd80da4f715.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-ac4bd14bb2348bfd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-c348a3959c5b5fc6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-2addd81c0d3e2906.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-da6b765f58a3eefb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-0661e40f8780c32c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-b89af1b1c8e4875b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-da8aeb82ba751cdb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-cc71317b239439db.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-bde7fc1d64ffe369.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-e2797214f713fa58.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-2a35bcda70defaf6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-3af03deedde45032.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-d1d1210f99f620ae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-46d1b5500885861d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/{page-e7abc34a48a6f71e.js → page-291ab19fe2acb173.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/page-7f569e533ddeecba.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-990129c9fee46d8f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-7737f785ebb1cdaf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-9f3c73a4f7ffd2f8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-03be7fb347f01058.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-96b0280625e4df2b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-56855545049eb56d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-76873dd80da4f715.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-79a909c9981f0338.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-a9d9a3e66459c1e0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c383cbf2013f7069.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f57c6a2e54dbdca4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/{page-c15958835534404b.js → page-6b140f77593576eb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-6b767ae2d9d0adfc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-116d6198d5da0e3d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-b9c9b778c7501370.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-a6c78392ab8f6335.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-455183deb4ed0cfe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-6a63e99526bd63d0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-31c22caafe788c08.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3a3d9966.cc4d4585a2708e7c.js → b7459770.6539b11860eb8a9c.js} +7 -7
- package/apps/pwa/out/_next/static/chunks/{053a429e.9a63436527cc751c.js → b7478fef.5917716286213fcc.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/bb6987f9.3647e1a23b0e3217.js +122 -0
- package/apps/pwa/out/_next/static/chunks/{2812ca6a.3b9f4a7a08885744.js → de8b930d.d94c0f42acf807fc.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{873d6c12.09bd499f57171543.js → eaad0cba.771200940c529df7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/framework-4b12a946f352cee2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-941155250ed2644b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-f8b6765abed6d149.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-78432194c85388f9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-cdf7390829512b1b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-d5f0964a9c2e92d2.js +1 -0
- package/apps/pwa/out/_next/static/css/{b5d88eba78a3d7bf.css → be9019f696217521.css} +1 -1
- 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 +23 -23
- 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 +22 -22
- 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 +23 -23
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +23 -23
- 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/graphs/drafts/recipes.yaml +27 -7
- package/graphs/release/recipes.yaml +9 -0
- package/graphs/release/release-loop.yaml +26 -18
- package/graphs/work/draft-close.yaml +54 -0
- package/graphs/work/green-close.yaml +37 -0
- package/graphs/work/recipes.yaml +46 -1
- package/graphs/work/run-research.yaml +35 -0
- package/package.json +1 -1
- package/scripts/__fixtures__/authoring-paths-10x3.json +32 -0
- package/scripts/ask-op-inbox-once.ts +17 -0
- package/scripts/boundary-proof-mapping-audit.ts +88 -0
- package/scripts/brand/check.ts +13 -4
- package/scripts/codex-fallback-live-probe.ts +17 -15
- package/scripts/fleet/node-setup.sh +32 -2
- package/scripts/fleet/run-light-worker.sh +9 -0
- package/scripts/gate-0226-accepted-remaining-90.txt +91 -0
- package/scripts/gate-0226-failure-census.ts +546 -0
- package/scripts/goals/authoring-metrics.ts +258 -0
- package/scripts/graph-units/draft-close-node.ts +222 -0
- package/scripts/hook-order-sweep.ts +7 -4
- package/scripts/intake-collect-telegram-saved-stage.ts +48 -0
- package/scripts/land-global-checks.ts +69 -1
- package/scripts/measure-nl-routing-corpus.ts +207 -2
- package/scripts/provision-export-redactions.ts +15 -0
- package/scripts/public-copy-lint.ts +122 -0
- package/scripts/public-export.ts +69 -2
- package/scripts/ratchets/next-tui-entry-budget.ts +124 -0
- package/scripts/ratchets/train-side-invariants.sh +7 -1
- package/scripts/release-loop/cut-branch.ts +61 -12
- package/scripts/release-loop/docs-node.ts +140 -0
- package/scripts/release-loop/gate-closure.ts +48 -0
- package/scripts/release-loop/gate-diff.ts +2 -1
- package/scripts/release-loop/gate-node.ts +161 -25
- package/scripts/release-loop/gate-partial.ts +82 -3
- package/scripts/release-loop/gate-prewarm-plan.ts +35 -0
- package/scripts/release-loop/gate-radius-live.ts +4 -2
- package/scripts/release-loop/known-issues-node.ts +6 -4
- package/scripts/release-loop/notes-repair.ts +216 -0
- package/scripts/release-loop/prepare-node.ts +61 -5
- package/scripts/release-loop/resume-cap.ts +2 -1
- package/scripts/release-loop/resume-release.ts +406 -7
- package/scripts/release-loop/resume-test-traffic.ts +10 -0
- package/scripts/release-loop/resume.ts +13 -5
- package/scripts/release-loop/traffic-node.ts +12 -4
- package/scripts/release-loop/traffic-transition.ts +53 -13
- package/scripts/release-loop/version-node.ts +109 -15
- package/scripts/train/green-leg.ts +176 -0
- package/scripts/tui-continue-real-evidence.ts +47 -0
- package/scripts/ux-sim.ts +1 -1
- package/scripts/video-pipeline.ts +2 -2
- package/src/acp/client.ts +31 -5
- package/src/acp/core-turn-bridge.ts +12 -1
- package/src/acp/stderr-summary.ts +49 -0
- package/src/agent/monad-agent-turn.ts +1 -0
- package/src/agent/run-context.ts +1 -1
- package/src/agent/task-notification.ts +3 -1
- package/src/agent/terminal-surface.ts +217 -0
- package/src/agent-substrate/pr-reviewer.ts +11 -3
- package/src/agent-substrate/review-observation.ts +10 -0
- package/src/agent-substrate/self-review-cli.ts +537 -57
- package/src/auto-research/question-ladder-contract.ts +137 -0
- package/src/auto-research/research-turn.ts +134 -0
- package/src/autopilot/discovery/doc-lint.ts +1 -1
- package/src/autopilot/lineage/sources.ts +1 -1
- package/src/autopilot/pr-manager.ts +64 -13
- package/src/boot/daemon-runtime.ts +35 -3
- package/src/boot/daemon-tools/pty-shell.ts +2 -1
- package/src/bots/screen-probe.ts +1 -1
- package/src/budget/run-usage-rollup.ts +12 -7
- package/src/budget/unified-usage.ts +20 -0
- package/src/capture/tui-self-report.ts +42 -5
- package/src/chat/index.ts +1 -0
- package/src/chat/tool-render/dispatch.ts +8 -1
- package/src/cli/autopilot-cli.ts +24 -9
- package/src/cli/decisions-cli.ts +7 -4
- package/src/cli/doctor-cli.ts +116 -7
- package/src/cli/guardian-cli.ts +3 -1
- package/src/cli/intake-cli.ts +48 -12
- package/src/cli/lesson-cli.ts +69 -9
- package/src/cli/logs-cli.ts +357 -2
- package/src/cli/memory-cli.ts +30 -1
- package/src/cli/msg-cli.ts +15 -11
- package/src/cli/pr-granularity.ts +5 -3
- package/src/cli/pr-land-overlap-evidence.ts +38 -5
- package/src/cli/pr-land-refusal.ts +1 -1
- package/src/cli/pty-takeover-cli.ts +58 -5
- package/src/cli/release-checklist-read-cli.ts +112 -4
- package/src/cli/release-cli.ts +89 -18
- package/src/cli/review-carry.ts +77 -0
- package/src/cli/self-update.ts +24 -6
- package/src/cli/self-utterances-cli.ts +13 -16
- package/src/cli/tasks-card-show.ts +31 -1
- package/src/cli/tasks-cli.ts +370 -33
- package/src/cli/tasks-read-cli.ts +13 -5
- package/src/cli/usage-cli.ts +12 -10
- package/src/context-bus/claude-memory-import.ts +99 -0
- package/src/context-bus/context-now.ts +86 -2
- package/src/context-bus/long-term-memory.ts +125 -0
- package/src/core-turn/run-core-turn.ts +9 -2
- package/src/core-turn/run-goal-loop.ts +5 -2
- package/src/core-turn/types.ts +5 -0
- package/src/dashboard/chat/acp-chat.ts +9 -0
- package/src/dashboard/index.ts +115 -30
- package/src/dashboard/input/agent-wake.ts +43 -0
- package/src/dashboard/input/chat-main-acp-dispatch.ts +21 -1
- package/src/dashboard/input/terminal-modal-router.ts +8 -159
- package/src/dashboard/replay-preview.ts +25 -0
- package/src/dashboard/side-basic-runtime.ts +61 -0
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +19 -8
- package/src/dashboard/synchronized-frame-output.ts +74 -0
- package/src/dashboard/term-slash-runtime.ts +2 -0
- package/src/dashboard/turn-preamble.ts +28 -4
- package/src/display/coordinator.ts +45 -12
- package/src/display/resize-listener.ts +41 -20
- package/src/display/synchronized-output-region.ts +60 -0
- package/src/domains/guardian-tick.ts +9 -0
- package/src/domains/surface-events.ts +80 -1
- package/src/exec-requests/planner.ts +37 -2
- package/src/execution-loop/launch-gate.ts +4 -3
- package/src/git-fs/cli-stderr.ts +45 -0
- package/src/git-fs/gh-cli.ts +6 -3
- package/src/git-fs/git-cli.ts +11 -5
- package/src/git-fs/watcher.ts +27 -22
- package/src/git-fs/worktree.ts +19 -3
- package/src/graph-runner/graph-cli.ts +26 -2
- package/src/graph-runner/graph-grow.ts +37 -9
- package/src/graph-runner/graph-run-api.ts +3 -2
- package/src/graph-runner/runner.ts +34 -7
- package/src/graph-wizard/generate.ts +29 -6
- package/src/grok/credential.ts +107 -36
- package/src/harness/harness-cli-command.ts +179 -33
- package/src/harness/review-adapter.ts +26 -6
- package/src/hq/fence-wrapper.ts +1 -1
- package/src/hq/transfer.ts +1 -1
- package/src/index.ts +151 -18
- package/src/instance/test-write-guard-real-transport.fixture.ts +52 -0
- package/src/intake-plane/collect-telegram-saved.ts +54 -5
- package/src/interactive-terminal-modal.ts +3 -0
- package/src/keybindings.ts +17 -22
- package/src/llm/provider-credentials.ts +1 -1
- package/src/llm/route-decision.ts +13 -0
- package/src/llm-tool-name.ts +37 -0
- package/src/llm-tool-schema.ts +55 -0
- package/src/llm.ts +203 -21
- package/src/loops/checker.ts +100 -0
- package/src/loops/consensus.ts +26 -2
- package/src/loops/loop-cli.ts +9 -4
- package/src/loops/orchestrator/anomaly-cluster.ts +243 -0
- package/src/loops/orchestrator/inbox-once.ts +28 -0
- package/src/loops/orchestrator/inbox.ts +130 -1
- package/src/loops/orchestrator/tick.ts +55 -7
- package/src/maturity/feature-maturity.ts +1 -0
- package/src/model-tier/llm-tier-map.ts +12 -17
- package/src/msg/msg-store.ts +17 -0
- package/src/native-tool-catalog.ts +1 -1
- package/src/nexus/api/channel-ask-op.ts +96 -0
- package/src/nexus/api/discord-trigger-bot.ts +28 -1
- package/src/nexus/api/graph-wizard-api.ts +27 -2
- package/src/nexus/api/grid.ts +24 -4
- package/src/nexus/api/http-server.ts +1 -1
- package/src/nexus/api/ops-api.ts +14 -6
- package/src/nexus/api/telegram-trigger-bot.ts +24 -0
- package/src/nexus/api/terminals.ts +28 -6
- package/src/nexus/state/state.ts +7 -1
- package/src/oauth/codex-account-store.ts +34 -1
- package/src/ops/loops-map.ts +46 -0
- package/src/ops/overview-cache.ts +22 -4
- package/src/ops/overview.ts +41 -5
- package/src/patents/ledger.ts +18 -1
- package/src/policy/llm-policy.ts +3 -1
- package/src/preview/terminal.ts +4 -2
- package/src/prompt-cache/anthropic.ts +2 -0
- package/src/prompt-enhance/enhance.ts +9 -4
- package/src/pty-shell/availability.ts +7 -0
- package/src/pty-shell/herdr-agent-report.ts +40 -31
- package/src/pty-shell/herdr-prune-stale.ts +17 -0
- package/src/pty-shell/herdr-sequence-lease.ts +60 -0
- package/src/pty-shell/pty-control-ipc.ts +187 -18
- package/src/pty-shell/pty-manifest.ts +16 -2
- package/src/pty-shell/registry.ts +25 -15
- package/src/pty-shell/tui-run-state.ts +235 -1
- package/src/release-loop/checklist.ts +50 -5
- package/src/release-loop/feature-store.ts +9 -9
- package/src/release-loop/gate-shards.ts +61 -0
- package/src/release-loop/landed-but-yellow.ts +93 -12
- package/src/release-loop/light-rc.ts +7 -4
- package/src/release-loop/rehearsal.ts +1 -1
- package/src/repl/index.ts +18 -0
- package/src/research/axis-fanout.ts +133 -0
- package/src/research/edge-decision.ts +88 -0
- package/src/research/output-router.ts +127 -0
- package/src/research-bridge/format.ts +16 -1
- package/src/research-bridge/index.ts +1 -0
- package/src/research-bridge/invoke.ts +41 -5
- package/src/seat-loop/seat-report.ts +1 -0
- package/src/self-dev/ask-launch-flow.ts +86 -10
- package/src/self-dev/decompose-proposal.ts +29 -18
- package/src/self-dev/decompose.ts +45 -9
- package/src/self-dev/dev-pipeline.ts +29 -7
- package/src/self-dev/draft-residue.ts +221 -2
- package/src/self-dev/draft-sweep.ts +254 -16
- package/src/self-dev/draft-triage-rules.ts +19 -5
- package/src/self-dev/orchestrate.ts +1 -0
- package/src/self-dev/review-provider-fallback.ts +45 -7
- package/src/self-dev/run-supervisor.ts +22 -7
- package/src/self-dev/shard-plan.ts +48 -0
- package/src/self-dev/shard-run.ts +310 -6
- package/src/self-implement/comment-only-source.ts +54 -0
- package/src/self-implement/doctor-visit.ts +108 -0
- package/src/self-implement/gate-artifacts.ts +6 -2
- package/src/self-implement/gate-baseline.ts +99 -1
- package/src/self-implement/gate-cli.ts +231 -82
- package/src/self-implement/gate-failure-signature.ts +44 -0
- package/src/self-implement/gate-remote.ts +30 -4
- package/src/self-implement/gate-scope.ts +13 -1
- package/src/self-implement/goal-author.ts +407 -21
- package/src/self-implement/goal-doc/section.ts +22 -0
- package/src/self-implement/goal-supervisor-fill.ts +110 -27
- package/src/self-implement/importer-test-index.ts +215 -2
- package/src/self-implement/knowhow-pack.ts +125 -12
- package/src/self-implement/l8-merge-queue.ts +198 -32
- package/src/self-implement/off-diff-evidence.ts +23 -0
- package/src/self-implement/orchestrator.ts +369 -33
- package/src/self-implement/pod-inplace-worktree.ts +82 -0
- package/src/self-implement/pod-warm-pool-profile.ts +2 -2
- package/src/self-implement/premise-review.ts +7 -5
- package/src/self-implement/review-round-brief.ts +300 -0
- package/src/self-implement/rework-policy.ts +14 -0
- package/src/self-implement/run-ledger.ts +428 -6
- package/src/self-implement/run-stop.ts +1 -1
- package/src/self-implement/running-runs.ts +17 -3
- package/src/self-implement/seams.ts +45 -16
- package/src/self-implement/self-implement-cli.ts +26 -2
- package/src/self-implement/stop-autoheal.ts +1 -0
- package/src/self-implement/test-seams.ts +13 -1
- package/src/self-implement/train-reach-grouping.ts +8 -2
- package/src/session/channel-ask-op-envelope.ts +36 -0
- package/src/session/channel-op-reply-route.ts +200 -0
- package/src/session/chat.ts +10 -1
- package/src/session/id-prefix.ts +60 -0
- package/src/session/index.ts +6 -0
- package/src/session-runtime/index.ts +18 -23
- package/src/skills/runner.ts +7 -3
- package/src/skills/tools/dev-harness.ts +2 -2
- package/src/skills/tools/pty.ts +5 -0
- package/src/skills/tools/schedule-wakeup.ts +1 -6
- package/src/status/bar.ts +3 -3
- package/src/status/metrics.ts +12 -1
- package/src/steward/rejudge-tick.ts +12 -5
- package/src/steward/resync-tick.ts +31 -4
- package/src/storage/file-lock.ts +17 -4
- package/src/task-agent/actions.ts +199 -4
- package/src/task-agent/adopt-pr.ts +63 -2
- package/src/task-agent/boundary-proof-mapping.ts +12 -0
- package/src/task-agent/boundary-proof-producer.ts +147 -0
- package/src/task-agent/completion-evidence.ts +2 -1
- package/src/task-agent/evidence-command-normalize.ts +42 -0
- package/src/task-agent/export-redactions-provision.ts +43 -0
- package/src/task-agent/green-close-recipe.ts +239 -0
- package/src/task-agent/green-sweep.ts +64 -10
- package/src/task-agent/live-moves.ts +48 -3
- package/src/task-agent/map-host-adapter.ts +134 -0
- package/src/task-agent/map-reduce.ts +158 -0
- package/src/task-agent/map-run-ledger.ts +226 -0
- package/src/task-agent/parent-host.ts +74 -17
- package/src/task-agent/rejudge-on-head.ts +72 -5
- package/src/task-agent/repair-cycle.ts +108 -8
- package/src/task-agent/repair-next-move.ts +12 -2
- package/src/task-agent/repair-worker.ts +37 -1
- package/src/task-agent/review-prior-fix.ts +12 -2
- package/src/task-agent/shadow.ts +188 -5
- package/src/task-agent/task-hand.ts +253 -20
- package/src/task-agent/task-parent-role-llm.ts +9 -0
- package/src/task-agent/tier-split.ts +40 -5
- package/src/task-agent/work-order.ts +53 -2
- package/src/task-orchestrator/dispatcher.ts +46 -1
- package/src/task-orchestrator/generator-prompt.ts +6 -0
- package/src/task-orchestrator/surfaces/pod-artifact-return.ts +16 -6
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +31 -4
- package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +8 -6
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +97 -0
- package/src/task-orchestrator/surfaces/pod-pool.ts +77 -8
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +15 -9
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +338 -79
- package/src/task-orchestrator/surfaces/self-implement.ts +37 -2
- package/src/terminal/session-registry.ts +1 -0
- package/src/terminal/terminal-modal-router.ts +156 -0
- package/src/testing/linux-env.ts +177 -0
- package/src/tool-hints/gate.ts +6 -4
- package/src/tool-hints/signals.ts +33 -1
- package/src/tui/chat/background-job-status.ts +8 -2
- package/src/tui/chat/goal-interim.ts +5 -1
- package/src/tui/entry.ts +722 -30
- package/src/tui/input/at-picker.ts +55 -0
- package/src/tui/sidetab/attach.ts +304 -0
- package/src/tui/sidetab/list.ts +176 -0
- package/src/tui/sidetab/nl-tool.ts +136 -0
- package/src/tui/slash/resume-command.ts +23 -0
- package/src/tui/slash/resume.ts +38 -35
- package/src/tui/slash/signals.ts +114 -0
- package/src/tui/slash/term-next.ts +72 -0
- package/src/tui-client/local-chat-turn.ts +31 -9
- package/src/user-config.ts +30 -3
- package/src/ux-sim/boot-daemon-tools-pty-shell-device.ts +136 -0
- package/src/ux-sim/classic-tui-seat-scenarios.ts +158 -4
- package/src/ux-sim/fake-gh.ts +174 -0
- package/src/ux-sim/fake-kubectl.ts +142 -0
- package/src/ux-sim/fake-llm.ts +17 -6
- package/src/ux-sim/next-tui-seat-scenarios.ts +176 -6
- package/src/ux-sim/resume-picker-device.ts +173 -0
- package/src/ux-sim/session-id-seed.ts +60 -0
- package/src/ux-sim/skills-tools-shell-device.ts +156 -0
- package/src/ux-sim/task-agent-parent-host-device.ts +264 -0
- package/src/ux-sim/task-agent-rejudge-on-head-device.ts +114 -0
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/109.f196abf3484bb97f.js +0 -287
- package/apps/pwa/out/_next/static/chunks/1201.afbfc5b1c5e5cbe4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1517.9275b89572098ff3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1574.ad11f8db8396ab45.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1614.7a8c5c40aee0261f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1871-f1eb29d8dbb4065b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/190.285c832bd9626f8c.js +0 -64
- package/apps/pwa/out/_next/static/chunks/2193.0ea24c4a7aa1d004.js +0 -36
- package/apps/pwa/out/_next/static/chunks/223-ad865c1e80491d78.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2265-f0d90b6dbec05f81.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2267.eb4a62a209f09ec4.js +0 -149
- package/apps/pwa/out/_next/static/chunks/2341-86cd06c0cf01aa33.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2352.9abc42422bade876.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2397-c1653a816061842d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2500.cbc1257b774aae52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2709.8e1889034255fc5f.js +0 -24
- package/apps/pwa/out/_next/static/chunks/284.ac77c0db55bfd3a8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2941.3c3546f96bc6efa7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2976.b000698a3c6512dc.js +0 -24
- package/apps/pwa/out/_next/static/chunks/2986.45d7652e4f13557e.js +0 -2
- package/apps/pwa/out/_next/static/chunks/3155.2587a55196ecb394.js +0 -226
- package/apps/pwa/out/_next/static/chunks/3277.785db1cf09f98601.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3320-f9c77381f85a2c0a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3386-91049feabff9a94e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/339.80afb7e8839372af.js +0 -8
- package/apps/pwa/out/_next/static/chunks/3538.a445e50bb359d068.js +0 -32
- package/apps/pwa/out/_next/static/chunks/3540c645.2595a6af01a97672.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3621.581b2054cc14bee4.js +0 -286
- package/apps/pwa/out/_next/static/chunks/3676.8c28d16fd84ca843.js +0 -1
- package/apps/pwa/out/_next/static/chunks/375-b84540853523fe52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3757-180308bc61021b05.js +0 -1
- package/apps/pwa/out/_next/static/chunks/379.ee262e37586fe1ae.js +0 -74
- package/apps/pwa/out/_next/static/chunks/3840-5825d56d46976a92.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3969-81054381eaec4c4c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4067-bf9aa60547972937.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4176.e5729c93c29151eb.js +0 -104
- package/apps/pwa/out/_next/static/chunks/4227-e6c84686bc8946ca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4327.b9e08a71c0009348.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4946.bd106eafd668f248.js +0 -148
- package/apps/pwa/out/_next/static/chunks/5085-bce4904931767ca6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5125.2eb9968b83767193.js +0 -93
- package/apps/pwa/out/_next/static/chunks/5128-75b733fd74a9a1eb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5489f3fe.4bb1458b09f6dead.js +0 -122
- package/apps/pwa/out/_next/static/chunks/5560-2a4648f6a30f16e7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5772-e29e14f8ff127122.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5887.5b2f5b44ce0f7e9a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5899-4c112a2d908cf97f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6041.1b65efb796ebc2a5.js +0 -79
- package/apps/pwa/out/_next/static/chunks/6057-765c0a26028c86b2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6142.f289e0d039f453a6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6199-6bcd61d2a3910e04.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6236.cdf7293e710a9b2d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6387-237e079dac9a3ae6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6448-b6d272d074276e14.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6466-92e65a48490b68a9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6580-cdc0e4a634ce4708.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6659-b242dc31b20b3f29.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6690.c5d9b321b1f79384.js +0 -1
- package/apps/pwa/out/_next/static/chunks/671-e9b6ad0c771c5514.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6862.bcbf89dd0f4496b3.js +0 -27
- package/apps/pwa/out/_next/static/chunks/6912-7b375ee48732c767.js +0 -1
- package/apps/pwa/out/_next/static/chunks/727.7deb87749b0a343a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7481.39f7a4654907bf6e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7545.b1aa42cd15503319.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7551-416d298c2dc4a9ab.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7870-309de463786ac1fc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7888-e29b151bb6a3bb8b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7891.03f910124a737985.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7905-6ba78d9234608f79.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8207.f527886b7c464529.js +0 -1
- package/apps/pwa/out/_next/static/chunks/856.50bda61439d465e6.js +0 -62
- package/apps/pwa/out/_next/static/chunks/9031-92e9b487edb681ee.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9060.5410d9f6a95f6287.js +0 -90
- package/apps/pwa/out/_next/static/chunks/914.8abefd48d579547b.js +0 -94
- package/apps/pwa/out/_next/static/chunks/9187-c87a2207d4ac5d46.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9289.3e92f278821e18e0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9319.7816d3cc741cd34f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9327-e016bb9f1674d24f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9365.3de48bf75193ff9a.js +0 -77
- package/apps/pwa/out/_next/static/chunks/9383.5b5e9aa56b5fea97.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9387-cb929573ef436f39.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9489.c27becacc3283dec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9514.131c52cc75fe6439.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9536.28962663c7734376.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9686-12286f5bbf15a5a0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9776.289d40cc5a4c342a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9789.60f723d18097ec30.js +0 -1
- package/apps/pwa/out/_next/static/chunks/989.f0c17523c5e61f65.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9972-1df393aa8d4f7d52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-96750aba7430959f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-4105e5bbbb043024.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-5d4fa75c2acb113e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-a79a9bdb3b2142bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-f1c2047484992a35.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-15ffc49b2d8c70e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-67d53a3fc8734135.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-e30c8dc696491336.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-2136e04fa77696e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-fecd2814790c2e12.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-280aa4a98fc5bb44.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-c14e96b65fb4b883.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-187dac74825ed6bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-6bc7246ea8c92448.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-083747f1d4518f61.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-96750aba7430959f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-15ca95a16ec96e1f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-a8ac031b3810eb64.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-8835f93110494cda.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-e2de2e59111c9aad.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-f2b2e4bf6e981450.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-5b92b7f75df20948.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-468eddf2b1a84ecb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-2af16e62c12f22df.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-18b40867a77a5793.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-fe934f2979f5a4a2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-3eec435537357170.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-ff88cbfd2aa99fc8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-a5b39fb780c70ab5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ae465dde1d1b3933.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-cab9674fde9ead26.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-1da49bc8712284d0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-5e8aa657551ac912.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-fcc36f36c6dc1fe2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-d22db22f2a7296ca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-d12dc7b1773878f0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-99debec9ea7fbec0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-96750aba7430959f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-2a088a78bad7e924.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-2e8ed57db7e69993.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-4b3a16213c2ae8fe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f098747ddf38c98b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-68279e3c843c1fd7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-a34a74453367a39d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-8767a7db2155a5bd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-bd5976683460d7f2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-b7364835e7f2ef54.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-311af16b3ee0ffca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-fb670757274ae990.js +0 -1
- package/apps/pwa/out/_next/static/chunks/ccae1c4b-0cf414f5eff1b10d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/f9a61e4d.1fc2c1dbdd49fe46.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-6d497cbf1eef04c6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-012f5edec932f337.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-da5aeb809edc94a2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-5ee319af6f749dfe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-4bc84653a718d6c6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-8a96cf6775c73d6e.js +0 -1
- package/scripts/migrate-monad-to-elanous.ts +0 -195
- package/scripts/rebrand-elanous.ts +0 -242
- /package/apps/pwa/out/_next/static/{uC-N0emedeNOFuaBQFv-I → RrjXTwz-urRAbChP1bX02}/_ssgManifest.js +0 -0
package/src/index.ts
CHANGED
|
@@ -3919,8 +3919,11 @@ selfCmd
|
|
|
3919
3919
|
.option('--json', '한 줄에 한 항목으로 재직렬화해 출력한다(원문 공백·빈 줄은 보존되지 않는다)')
|
|
3920
3920
|
.option('--all', 'logs와 같은 전 인스턴스 연합 원장 조회를 한다')
|
|
3921
3921
|
.option('--include-test', '--all 연합에 격리 test 인스턴스도 포함한다')
|
|
3922
|
-
|
|
3923
|
-
|
|
3922
|
+
// ⛔⭐ 합성 exit 를 «쓰지» 않고 enter/exit/orphan 만 대조한다 — 원장을 읽기만 하는 분류다.
|
|
3923
|
+
// 중단된 런이 exit 없이 남긴 graph.unit 방문을 «완료»로 오해하지 않게 CLI 에서 직접 잰다.
|
|
3924
|
+
.option('--unit-visits', 'graph.unit enter/exit/orphan 대조만 출력한다(원장은 읽기만 한다)')
|
|
3925
|
+
.action(async (runId: string, opts: { json?: boolean; all?: boolean; includeTest?: boolean; unitVisits?: boolean }) => {
|
|
3926
|
+
const { classifyGraphUnitVisits, describeFederatedMissingRunLedger, describeMissingRunLedger, lookupRunLedger, renderRunLedger } = await import('./self-implement/run-ledger.js');
|
|
3924
3927
|
try {
|
|
3925
3928
|
const lookup = lookupRunLedger(runId, { all: opts.all, ...(opts.includeTest === undefined ? {} : { includeTest: opts.includeTest }) });
|
|
3926
3929
|
if (lookup.matches.length === 0) {
|
|
@@ -3947,6 +3950,18 @@ selfCmd
|
|
|
3947
3950
|
const match = lookup.matches[0]!;
|
|
3948
3951
|
if (opts.json && match.skippedTrailingBytes !== undefined) console.error(`skipped incomplete trailing run ledger line: ${match.skippedTrailingBytes} bytes`);
|
|
3949
3952
|
if (opts.all && !opts.json) console.log(`run ledger found in universe: ${match.targetName ?? 'current'} (${match.ledgerDirectory})`);
|
|
3953
|
+
if (opts.unitVisits) {
|
|
3954
|
+
const classification = classifyGraphUnitVisits(match.entries);
|
|
3955
|
+
if (opts.json) {
|
|
3956
|
+
await writeStdoutJson(JSON.stringify(classification) + '\n');
|
|
3957
|
+
return;
|
|
3958
|
+
}
|
|
3959
|
+
console.log(`graph.unit enter=${classification.enterCount} exit=${classification.exitCount} orphan=${classification.orphanCount}`);
|
|
3960
|
+
for (const visit of classification.orphanUnitVisits) {
|
|
3961
|
+
console.log(`orphan unit=${visit.unit ?? '-'} node=${visit.nodeId ?? '-'} childRunId=${visit.childRunId ?? '-'} enteredAt=${visit.enteredAt ?? '-'}`);
|
|
3962
|
+
}
|
|
3963
|
+
return;
|
|
3964
|
+
}
|
|
3950
3965
|
if (opts.json) await writeStdoutJson(match.entries.map((entry) => JSON.stringify(entry)).join('\n') + '\n');
|
|
3951
3966
|
else console.log(renderRunLedger(match.entries));
|
|
3952
3967
|
} catch (error) {
|
|
@@ -4201,12 +4216,17 @@ selfCmd
|
|
|
4201
4216
|
selfCmd
|
|
4202
4217
|
.command('running-runs')
|
|
4203
4218
|
.description('원장과 살아 있는 PTY를 함께 읽어 현재 자율 런 판정을 출력한다')
|
|
4219
|
+
.argument('[runId]', '같은 ID로 단일 런의 원본 완료 결과(kind·reason·next)를 재조회한다 (생략 시 전체)')
|
|
4204
4220
|
.option('--json', '구조화된 JSON으로 출력한다')
|
|
4205
4221
|
.option('--include-test', '연합 관측에 격리 test 인스턴스도 포함한다')
|
|
4206
|
-
.action(async (opts: { json?: boolean; includeTest?: boolean }) => {
|
|
4222
|
+
.action(async (runId: string | undefined, opts: { json?: boolean; includeTest?: boolean }) => {
|
|
4207
4223
|
try {
|
|
4208
4224
|
const { queryRunningRuns, renderRunningRuns } = await import('./self-implement/running-runs.js');
|
|
4209
|
-
const result = queryRunningRuns({
|
|
4225
|
+
const result = queryRunningRuns({
|
|
4226
|
+
includeTest: opts.includeTest,
|
|
4227
|
+
caller: 'cli',
|
|
4228
|
+
...(runId === undefined ? {} : { runIds: [runId] }),
|
|
4229
|
+
});
|
|
4210
4230
|
const output = `${opts.json ? JSON.stringify(result) : renderRunningRuns(result)}\n`;
|
|
4211
4231
|
await writeStdoutJson(output);
|
|
4212
4232
|
} catch (error) {
|
|
@@ -4461,6 +4481,9 @@ selfCmd
|
|
|
4461
4481
|
try {
|
|
4462
4482
|
const { runGoalAuthorCli, formatGoalAuthorSelfInspection, formatGoalInterviewRound } = await import('./self-implement/goal-author-cli.js');
|
|
4463
4483
|
// 설정 졸업 1-c(2026-09-26): 되묻기 자동 답변은 늘 켠다 — `harness ask/say` 와 같은 동작(옵션 없음).
|
|
4484
|
+
// Production self author → runGoalAuthorCli → writeAuthoredGoal → tracedPathsSection:
|
|
4485
|
+
// missing traced paths are corrected or skipped; a required correction ledger write
|
|
4486
|
+
// failure propagates through this call to the error handler instead of reporting success.
|
|
4464
4487
|
const result = await runGoalAuthorCli(parts, { ...opts, selfResolveClarifications: true });
|
|
4465
4488
|
console.log(result.path);
|
|
4466
4489
|
// ⭐ grounding 상태를 함께 알린다 — 이 장치의 알려진 약점이 여기서 드러나야 한다.
|
|
@@ -4713,15 +4736,24 @@ selfCmd
|
|
|
4713
4736
|
.option('--base <ref>', '커밋됐지만 PR 없는 변경의 비교 기준(ref...HEAD)')
|
|
4714
4737
|
.option('--pr <number>', '열린 PR 번호에서 gh pr view files로 변경 파일을 읽는다')
|
|
4715
4738
|
.option('--shards [number]', '메모리 예산에 맞춰 시험을 별도 프로세스로 분할한다 (기본 2)')
|
|
4739
|
+
.option('--shard-concurrency <number>', '동시에 실행할 조각 묶음 수 (1–4, 기본 3)')
|
|
4716
4740
|
.option('--fixed-shard-distribution', '--shards N 과 함께만: RSS 사전 측정 없이 정렬된 파일을 N 조각에 라운드로빈 고정 배정한다(opt-in · 메모리 보증 아님 · 조각 타임아웃/OOM = unmeasured)')
|
|
4717
4741
|
.option('--include-importers', '변경 모듈을 가져오는 importer 시험도 실행한다 (기본 caller 한도 밖까지)')
|
|
4718
4742
|
.option('--remote [host]', 'GATE-REMOTE — 같은 커밋을 원격 호스트(기본 config gateRemote.host=node-b)에서 돌리고 결과만 가져온다(깨끗한 트리 · --pr 은 로컬)')
|
|
4719
4743
|
.option('--local', '원격 실행을 끄고 명시적으로 로컬에서 돌린다')
|
|
4720
4744
|
.option('--artifact-dir <dir>', '조각별 지금/기준 JUnit ⊕ summary.json 을 이 디렉토리에 남긴다(판정 불변 · JUnit 은 --shards 경로만 · 원격 실행이면 그 호스트에서 가져온다)')
|
|
4721
|
-
.
|
|
4745
|
+
.option('--orchestration-id <id>', 'GATE-REMOTE-SHARD-PLAN — 조각 오케스트레이션 id. --shard-id · --shard-position 와 세벌 세트로만 쓰고 원격 명령줄에 그대로 실린다')
|
|
4746
|
+
.option('--shard-id <id>', 'GATE-REMOTE-SHARD-PLAN — 조각 id(예: <orchestration-id>/shard-2). 원격 명령줄에 그대로 실린다')
|
|
4747
|
+
.option('--shard-position <n>', 'GATE-REMOTE-SHARD-PLAN — 조각 위치(1부터 정수). 원격 명령줄에 그대로 실린다')
|
|
4748
|
+
.option('--shard-plan <path>', 'GATE-REMOTE-SHARD-PLAN — 조각 계획 파일 경로. 주면 원격 명령줄에 --shard-plan 으로 실린다')
|
|
4749
|
+
.action(async (opts: { changed?: boolean; base?: string; pr?: string; shards?: string | boolean; shardConcurrency?: string; fixedShardDistribution?: boolean; includeImporters?: boolean; remote?: string | boolean; local?: boolean; artifactDir?: string; orchestrationId?: string; shardId?: string; shardPosition?: string; shardPlan?: string }) => {
|
|
4722
4750
|
if (!opts.changed && opts.shards === undefined) { ui.error('self gate requires --changed or --shards'); process.exitCode = 2; return; }
|
|
4723
4751
|
if (opts.fixedShardDistribution && opts.shards === undefined) { ui.error('self gate: --fixed-shard-distribution requires --shards <n>'); process.exitCode = 2; return; }
|
|
4752
|
+
if (opts.shardConcurrency !== undefined && (!/^[1-4]$/.test(opts.shardConcurrency))) { ui.error('self gate: --shard-concurrency must be 1–4'); process.exitCode = 2; return; }
|
|
4724
4753
|
if (opts.artifactDir !== undefined && !opts.artifactDir.trim()) { ui.error('self gate: --artifact-dir needs a non-empty directory'); process.exitCode = 2; return; }
|
|
4754
|
+
const shardIdentityFlags = [opts.orchestrationId, opts.shardId, opts.shardPosition].filter((value) => value !== undefined).length;
|
|
4755
|
+
if (shardIdentityFlags !== 0 && shardIdentityFlags !== 3) { ui.error('self gate: --orchestration-id, --shard-id and --shard-position are used as a set'); process.exitCode = 2; return; }
|
|
4756
|
+
if (opts.shardPosition !== undefined && !/^[1-9]\d*$/.test(opts.shardPosition)) { ui.error('self gate: --shard-position needs a positive integer'); process.exitCode = 2; return; }
|
|
4725
4757
|
// The root strips `--local` from argv anywhere (remote-bookmark attach · src/cli/remote-resolve.ts) before Commander
|
|
4726
4758
|
// sees it, so this subcommand reads it from the untouched process.argv.
|
|
4727
4759
|
opts.local = !!opts.local || process.argv.slice(2).includes('--local');
|
|
@@ -4733,11 +4765,11 @@ selfCmd
|
|
|
4733
4765
|
const shards = opts.shards === undefined ? undefined : opts.shards === true ? 2 : Number(opts.shards);
|
|
4734
4766
|
let ranLocal = false;
|
|
4735
4767
|
let remoteArtifacts: { dir: string; fetch?: { ok: true; summaryPath: string; junitFiles: string[]; remoteDirKept: boolean } | { ok: false; reason: string } } | { unsupported: true } | undefined;
|
|
4736
|
-
const runLocal = () => {
|
|
4768
|
+
const runLocal = async () => {
|
|
4737
4769
|
ranLocal = true;
|
|
4738
4770
|
try {
|
|
4739
|
-
const {
|
|
4740
|
-
const result =
|
|
4771
|
+
const { runSelfGateCliAsync } = require('./self-implement/gate-cli.js') as typeof import('./self-implement/gate-cli.js');
|
|
4772
|
+
const result = await runSelfGateCliAsync(process.cwd(), { base: opts.base, pr: opts.pr, shards, ...(opts.shardConcurrency !== undefined ? { shardConcurrency: Number(opts.shardConcurrency) } : {}), ...(opts.fixedShardDistribution ? { fixedShardDistribution: true } : {}), includeImporterTests: !!opts.includeImporters, ...(opts.artifactDir !== undefined ? { artifactDir: opts.artifactDir } : {}) });
|
|
4741
4773
|
console.log(result.lines.join('\n'));
|
|
4742
4774
|
return result.exitCode;
|
|
4743
4775
|
} catch (error) {
|
|
@@ -4766,12 +4798,23 @@ selfCmd
|
|
|
4766
4798
|
remoteArtifacts = remoteCommitSupportsArtifactDir(repo) ? { dir: newRemoteArtifactDir() } : { unsupported: true };
|
|
4767
4799
|
}
|
|
4768
4800
|
// origin/main is pinned to this machine's origin/main on the host; any other base is passed as its resolved sha.
|
|
4769
|
-
const remoteArgv = (sha: (ref: string) => string) =>
|
|
4770
|
-
|
|
4771
|
-
|
|
4772
|
-
|
|
4773
|
-
|
|
4774
|
-
|
|
4801
|
+
const remoteArgv = (sha: (ref: string) => string) => {
|
|
4802
|
+
const argv = remoteSelfGateArgv({
|
|
4803
|
+
changed: opts.changed, base: opts.base, shards, shardConcurrency: opts.shardConcurrency === undefined ? undefined : Number(opts.shardConcurrency), fixedShardDistribution: opts.fixedShardDistribution,
|
|
4804
|
+
includeImporters: opts.includeImporters,
|
|
4805
|
+
// A measured commit without this option rejects it (exit ≠ 0) — read as not passed, never as a silent measured run.
|
|
4806
|
+
artifactDir: remoteArtifacts && 'dir' in remoteArtifacts ? remoteArtifacts.dir : undefined,
|
|
4807
|
+
}, sha);
|
|
4808
|
+
// GATE-REMOTE-SHARD-PLAN — the shard identity rides the remote command line so each host run is attributable to its
|
|
4809
|
+
// shard. A measured commit without these options rejects them (exit ≠ 0): unmeasured, never a silent pass.
|
|
4810
|
+
if (opts.orchestrationId === undefined) return argv;
|
|
4811
|
+
const { remoteShardArgArgs } = require('./self-dev/shard-run.js') as typeof import('./self-dev/shard-run.js');
|
|
4812
|
+
return [...argv, ...remoteShardArgArgs({
|
|
4813
|
+
orchestrationId: opts.orchestrationId, shardId: opts.shardId!,
|
|
4814
|
+
totalShards: typeof shards === 'number' && Number.isSafeInteger(shards) && shards >= 1 ? shards : 1,
|
|
4815
|
+
position: Number(opts.shardPosition),
|
|
4816
|
+
}, { planFile: opts.shardPlan })];
|
|
4817
|
+
};
|
|
4775
4818
|
const { gateHostReservationRoot } = await import('./release-loop/gate-host-reservation.js');
|
|
4776
4819
|
process.exitCode = await dispatchHeavyCheck({
|
|
4777
4820
|
tool: 'self-gate', repo, installPwa: true, remoteArgv, refs: opts.base ? [opts.base] : [], reservationRoot: gateHostReservationRoot(),
|
|
@@ -4796,7 +4839,7 @@ selfCmd
|
|
|
4796
4839
|
const reason = error instanceof Error ? error.message : String(error);
|
|
4797
4840
|
if (opts.local) {
|
|
4798
4841
|
ui.error(`self gate dispatch failed: ${reason}`);
|
|
4799
|
-
process.exitCode = runLocal();
|
|
4842
|
+
process.exitCode = await runLocal();
|
|
4800
4843
|
} else {
|
|
4801
4844
|
ui.error(opts.remote !== undefined
|
|
4802
4845
|
? `self gate remote unmeasured — ${reason.replace(/\s+/g, ' ').trim()}`
|
|
@@ -6283,6 +6326,7 @@ selfCmd
|
|
|
6283
6326
|
return { status: r.status, stdout: r.stdout ?? '', stderr: r.stderr ?? '' };
|
|
6284
6327
|
},
|
|
6285
6328
|
reviewPullRequest,
|
|
6329
|
+
reviewRepositoryPath: process.cwd(),
|
|
6286
6330
|
readReferencedFile: createRepositoryReferencedFileReader(process.cwd()),
|
|
6287
6331
|
renderReview,
|
|
6288
6332
|
// ⛔⭐ 하드코딩 금지(🩸 2026-09-23 실측: 여기 'medium' 이 박혀 있었다) — 무인 리뷰와 «같은» 규칙.
|
|
@@ -7898,6 +7942,16 @@ const selfDevCmd = program
|
|
|
7898
7942
|
// ⭐ 저작 «전»에 끊는다 — 100초를 쓰지 않는다. 우회는 --force-preflight 로 그대로 열려 있다.
|
|
7899
7943
|
throw new DevPipelineError('저작 전 예비 검사에서 막혔다 — 위 이름을 확인하라 (우회: --force-preflight)');
|
|
7900
7944
|
}
|
|
7945
|
+
if (flowResult.kind === 'stopped-by-timebox') {
|
|
7946
|
+
// ⭐⭐ AUTHOR-TIMEBOX NOT-GROUNDED — 저작 결과 줄은 흐름이 이미 썼다. 발사하지 않고 여기서 끝낸다.
|
|
7947
|
+
releaseAuthoringLease();
|
|
7948
|
+
if (opts.json) {
|
|
7949
|
+
const terminalResult = { kind: 'self', ok: false, stage: 'author-timebox-not-grounded', goalFile: flowResult.goalFile };
|
|
7950
|
+
await writeStdoutJson(`${JSON.stringify(terminalResult)}\n`);
|
|
7951
|
+
}
|
|
7952
|
+
completionGuard.conclude();
|
|
7953
|
+
process.exit(1);
|
|
7954
|
+
}
|
|
7901
7955
|
askAuthoredFile = flowResult.goalFile;
|
|
7902
7956
|
if (flowResult.kind === 'stopped-by-preflight') {
|
|
7903
7957
|
releaseAuthoringLease();
|
|
@@ -12159,6 +12213,83 @@ export function rootResumeIdAt(rawArgs: readonly string[], resumeFlagIdx: number
|
|
|
12159
12213
|
return next !== undefined && !next.startsWith('-') ? next : undefined;
|
|
12160
12214
|
}
|
|
12161
12215
|
|
|
12216
|
+
/** TUI-CONTINUE-SESSION (0.2.35) — `--continue` 가 «어느 세션» 을 이어받나를 정하는 조회 창구. */
|
|
12217
|
+
export interface ContinueSessionLookup {
|
|
12218
|
+
/** cwd 가 속한 프로젝트 id — 매칭 없으면 null. */
|
|
12219
|
+
projectIdForCwd: (cwd: string) => string | null;
|
|
12220
|
+
/** 그 프로젝트의 최신 세션 id — 없으면 null. */
|
|
12221
|
+
latestForProject: (projectId: string) => string | null;
|
|
12222
|
+
/** 전역 최신 세션 id — 없으면 null. */
|
|
12223
|
+
latestGlobal: () => string | null;
|
|
12224
|
+
/** 지금 활성 표지가 가리키는 세션 id — 없으면 null. */
|
|
12225
|
+
activeSessionId: () => string | null;
|
|
12226
|
+
}
|
|
12227
|
+
|
|
12228
|
+
const realContinueSessionLookup: ContinueSessionLookup = {
|
|
12229
|
+
projectIdForCwd: (cwd) => suggestProjectForFolder(cwd)?.id ?? null,
|
|
12230
|
+
latestForProject: (projectId) => listSessions({ limit: 1, projectId })[0]?.id ?? null,
|
|
12231
|
+
latestGlobal: () => listSessions({ limit: 1 })[0]?.id ?? null,
|
|
12232
|
+
activeSessionId: () => getActiveSessionId(),
|
|
12233
|
+
};
|
|
12234
|
+
|
|
12235
|
+
const realNextTuiContinueSessionLookup: ContinueSessionLookup = {
|
|
12236
|
+
projectIdForCwd: (cwd) => suggestProjectForFolder(cwd)?.id ?? null,
|
|
12237
|
+
latestForProject: (projectId) => listSessions({ limit: 1, projectId, source: 'tui' })[0]?.id ?? null,
|
|
12238
|
+
latestGlobal: () => listSessions({ limit: 1, source: 'tui' })[0]?.id ?? null,
|
|
12239
|
+
activeSessionId: () => {
|
|
12240
|
+
const id = getActiveSessionId();
|
|
12241
|
+
return id && (loadSession(id) as unknown as { source?: string } | null)?.source === 'tui' ? id : null;
|
|
12242
|
+
},
|
|
12243
|
+
};
|
|
12244
|
+
|
|
12245
|
+
/**
|
|
12246
|
+
* TUI-CONTINUE-SESSION (0.2.35) — `--continue`(id 없는 `--resume`)의 «최근 세션» 을 cwd 기준으로
|
|
12247
|
+
* 먼저 좁힌다: cwd 가 속한 프로젝트(`primaryFolder` 또는 그 하위 디렉토리)의 최신 세션 id.
|
|
12248
|
+
* 프로젝트가 없거나 그 프로젝트에 세션이 없으면 전역 최신으로 폴백한다.
|
|
12249
|
+
*/
|
|
12250
|
+
export function latestSessionIdForContinue(
|
|
12251
|
+
cwd: string = process.cwd(),
|
|
12252
|
+
lookup: ContinueSessionLookup = realContinueSessionLookup,
|
|
12253
|
+
): string | null {
|
|
12254
|
+
const projectId = lookup.projectIdForCwd(cwd);
|
|
12255
|
+
const localId = projectId ? lookup.latestForProject(projectId) : null;
|
|
12256
|
+
return localId ?? lookup.latestGlobal();
|
|
12257
|
+
}
|
|
12258
|
+
|
|
12259
|
+
/** Next TUI only: resume a project TUI session, never an automation or cross-project session. */
|
|
12260
|
+
export function latestNextTuiSessionIdForContinue(
|
|
12261
|
+
cwd: string = process.cwd(),
|
|
12262
|
+
lookup: ContinueSessionLookup = realNextTuiContinueSessionLookup,
|
|
12263
|
+
): string | null {
|
|
12264
|
+
const projectId = lookup.projectIdForCwd(cwd);
|
|
12265
|
+
return projectId ? lookup.latestForProject(projectId) : lookup.latestGlobal();
|
|
12266
|
+
}
|
|
12267
|
+
|
|
12268
|
+
/** Keep the source-filtered session selection scoped to the Next TUI entry. */
|
|
12269
|
+
export function latestRootSessionIdForContinue(
|
|
12270
|
+
tuiEntry: 'classic' | 'next',
|
|
12271
|
+
cwd: string = process.cwd(),
|
|
12272
|
+
lookup?: ContinueSessionLookup,
|
|
12273
|
+
): string | null {
|
|
12274
|
+
return tuiEntry === 'next'
|
|
12275
|
+
? latestNextTuiSessionIdForContinue(cwd, lookup ?? realNextTuiContinueSessionLookup)
|
|
12276
|
+
: latestSessionIdForContinue(cwd, lookup ?? realContinueSessionLookup);
|
|
12277
|
+
}
|
|
12278
|
+
|
|
12279
|
+
/**
|
|
12280
|
+
* cwd 가 프로젝트 안이면 활성 표지보다 cwd 프로젝트의 최신 세션 선택을 우선한다.
|
|
12281
|
+
* 프로젝트 밖에서는 종전처럼 활성 표지가 전역 최신보다 우선한다.
|
|
12282
|
+
*/
|
|
12283
|
+
export function activeSessionIdForContinue(
|
|
12284
|
+
cwd: string = process.cwd(),
|
|
12285
|
+
lookup: ContinueSessionLookup = realContinueSessionLookup,
|
|
12286
|
+
): string | null {
|
|
12287
|
+
const active = lookup.activeSessionId();
|
|
12288
|
+
if (!active) return null;
|
|
12289
|
+
const cwdProjectId = lookup.projectIdForCwd(cwd);
|
|
12290
|
+
return cwdProjectId ? null : active;
|
|
12291
|
+
}
|
|
12292
|
+
|
|
12162
12293
|
export function filterDashboardArgs(rawArgs: readonly string[], resumeFlagIdx?: number): string[] {
|
|
12163
12294
|
const rootResumeFlagIdx = resumeFlagIdx ?? rawArgs.findIndex((arg, index) =>
|
|
12164
12295
|
// ⛔ `-r` 은 «더 이상» resume 의 별칭이 아니다 — 원격 북마크(`--remote`)의 단축형이다.
|
|
@@ -12401,14 +12532,16 @@ async function main(): Promise<void> {
|
|
|
12401
12532
|
// 우선순위: `--resume <id>` > `--continue`·id 없는 `--resume`(최신) > (폐기 예정) ELANOUS_RESUME_SESSION.
|
|
12402
12533
|
// ⛔ 명시 인자가 있으면 환경변수가 이기지 않는다(TUI-H8 r1 must-fix).
|
|
12403
12534
|
const { resolveLatestSessionId, resolveRootResumeSessionId } = await import('./session/session-start.js');
|
|
12535
|
+
const continueLookup = tuiEntry === 'next' ? realNextTuiContinueSessionLookup : realContinueSessionLookup;
|
|
12404
12536
|
const rootResume = resolveRootResumeSessionId({
|
|
12405
12537
|
...(resumeFromFlag !== undefined ? { flagId: resumeFromFlag } : {}),
|
|
12406
12538
|
continueLatest,
|
|
12407
12539
|
// 명시 인자가 있으면 env 를 «읽지도» 않는다(폐기 경고가 명시 이어하기에 섞이지 않게).
|
|
12408
12540
|
readEnvId: () => readDeprecatedEnvForResume('ELANOUS_RESUME_SESSION').value ?? null,
|
|
12409
12541
|
latest: () => resolveLatestSessionId({
|
|
12410
|
-
|
|
12411
|
-
|
|
12542
|
+
// Next TUI는 사람 TUI 세션만 이어가고, classic dashboard의 기존 선택은 보존한다.
|
|
12543
|
+
activeSessionId: () => activeSessionIdForContinue(process.cwd(), continueLookup),
|
|
12544
|
+
latestSessionId: () => latestRootSessionIdForContinue(tuiEntry),
|
|
12412
12545
|
// TUI-H8-FOLLOW ① — 활성 표지가 사라진 세션이면 최신 세션으로(#28509 리뷰 should-fix).
|
|
12413
12546
|
sessionExists: (id) => loadSession(id) !== null,
|
|
12414
12547
|
}),
|
|
@@ -12611,7 +12744,7 @@ async function main(): Promise<void> {
|
|
|
12611
12744
|
return;
|
|
12612
12745
|
}
|
|
12613
12746
|
const { showNextTui } = await import('./tui/entry.js');
|
|
12614
|
-
await showNextTui({ resumeSessionId });
|
|
12747
|
+
await showNextTui({ resumeSessionId, sidetabMode: getUserConfig().tui?.sidetab ?? 'collapsed' });
|
|
12615
12748
|
bootTimer.phase('show-next');
|
|
12616
12749
|
bootTimer.done();
|
|
12617
12750
|
} else {
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Child fixture for test-write-guard.test.ts (TEST-PROD-LEAK-2 ledger): call-through wrappers installed over
|
|
2
|
+
// the ORIGINAL spill and send functions must not soften the outbound-alert guard. spillLongContent gets a
|
|
3
|
+
// mock.module call-through wrapper (not a fake — it delegates to the original) that counts operational S3
|
|
4
|
+
// upload attempts, and the original curl send primitive gets a bare pass-through spy that counts external
|
|
5
|
+
// sends. The refusal must fire BEFORE spillLongContent runs, so the ledger prints 0 s3Uploads and 0
|
|
6
|
+
// curlCalls alongside the refusal reason. Prints {refused, refusalReason, curlCalls, s3Uploads}.
|
|
7
|
+
import { mock, spyOn } from 'bun:test';
|
|
8
|
+
import * as childProcess from 'node:child_process';
|
|
9
|
+
|
|
10
|
+
// Pass-through wrapper over the original external-send primitive (curl via execFileSync), installed before
|
|
11
|
+
// outbound-alert is imported so even the module-load capture of the «real» sender sees a wrapper, not a fake.
|
|
12
|
+
const sendWrapper = spyOn(childProcess, 'execFileSync');
|
|
13
|
+
|
|
14
|
+
const spill = await import('../storage/content-spill.js');
|
|
15
|
+
const originalSpill = spill.spillLongContent;
|
|
16
|
+
let s3Uploads = 0;
|
|
17
|
+
await mock.module('../storage/content-spill.js', () => ({
|
|
18
|
+
...spill,
|
|
19
|
+
spillLongContent: (...args: Parameters<typeof originalSpill>) => {
|
|
20
|
+
s3Uploads += 1; // every spill that reaches the original is an operational S3 upload attempt
|
|
21
|
+
return originalSpill(...args);
|
|
22
|
+
},
|
|
23
|
+
}));
|
|
24
|
+
|
|
25
|
+
const { sendTelegramDirect } = await import('../domains/outbound-alert.js');
|
|
26
|
+
const { getUserConfig } = await import('../user-config.js');
|
|
27
|
+
const base = getUserConfig();
|
|
28
|
+
const config = { ...base, telegram: { ...base.telegram, channels: undefined, botToken: '2:fake', homeChannel: 2 } } as typeof base;
|
|
29
|
+
type DirectDeps = NonNullable<Parameters<typeof sendTelegramDirect>[2]>;
|
|
30
|
+
const deps = { config } as DirectDeps;
|
|
31
|
+
// LEAK2_INJECT_SENDRAW=1 also injects a real (non-test-double) send transport into the delivery deps — a
|
|
32
|
+
// plain curl-invoking function, no mock scaffolding — so the companion ledger proves the guard refuses an
|
|
33
|
+
// injected external transport, not merely an empty one.
|
|
34
|
+
if (process.env.LEAK2_INJECT_SENDRAW === '1') {
|
|
35
|
+
(deps as { sendRaw?: (url: string) => string }).sendRaw = (url) =>
|
|
36
|
+
childProcess.execFileSync('curl', ['-sS', url], { encoding: 'utf8' }) as string;
|
|
37
|
+
// An injected transport turns the external branch off (:710 — a test double cannot target the ops
|
|
38
|
+
// universe), so the companion ledger proves the ops-routed branch: the routing roots resolve inside the
|
|
39
|
+
// ops universe, exactly as production does, and the guard refuses it faked or not.
|
|
40
|
+
const { EXTRA_OPS_ROOTS_ENV } = await import('../instance/test-write-guard.js');
|
|
41
|
+
const { getElanousConfigDir } = await import('../elanous-config-dir.js');
|
|
42
|
+
process.env[EXTRA_OPS_ROOTS_ENV] = getElanousConfigDir();
|
|
43
|
+
}
|
|
44
|
+
let refused = false;
|
|
45
|
+
let refusalReason = '';
|
|
46
|
+
try {
|
|
47
|
+
sendTelegramDirect('private-alert-body', 'ops-alert', deps);
|
|
48
|
+
} catch (e) {
|
|
49
|
+
refused = true;
|
|
50
|
+
refusalReason = e instanceof Error ? `${e.name}: ${e.message}` : String(e);
|
|
51
|
+
}
|
|
52
|
+
console.log(JSON.stringify({ refused, refusalReason, curlCalls: sendWrapper.mock.calls.length, s3Uploads }));
|
|
@@ -37,7 +37,50 @@ function writeSavedCursor(root: string, lastId: number): void {
|
|
|
37
37
|
writeFileSync(cursorFile(root), JSON.stringify({ lastId, at: new Date().toISOString() }) + '\n');
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
export interface CollectSavedResult {
|
|
40
|
+
export interface CollectSavedResult {
|
|
41
|
+
cursorBefore: number;
|
|
42
|
+
cursorAfter: number;
|
|
43
|
+
/** fetch 가 돌려준 «저장된 메시지» 수 — 커서 이후 읽은 것. */
|
|
44
|
+
messages: number;
|
|
45
|
+
/** 그중 savedMessageToRaws 가 0줄로 버린 메시지 수(빈 몸통) — «필터» 축. */
|
|
46
|
+
droppedByFilter: number;
|
|
47
|
+
/** 원장에 넣으려고 만든 입력 줄 수 — «원장 입력» 축. messages 와 다른 값이다. */
|
|
48
|
+
raws: number;
|
|
49
|
+
dryRun: boolean;
|
|
50
|
+
ingest?: IngestResult;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** «메시지 0»·«원장 입력 0» 의 까닭 — 필터로 비었는지 다른 주체가 이미 가져갔는지 갈라 읽는다. */
|
|
54
|
+
export type SavedCollectDiagnosis = 'new-items' | 'no-new-messages' | 'filtered-out' | 'already-consumed';
|
|
55
|
+
|
|
56
|
+
export function diagnoseSavedCollect(res: CollectSavedResult): SavedCollectDiagnosis {
|
|
57
|
+
// 원장 입력이 있고 새로/합쳐 들어간 것이 있으면 정상 흡수다(dry-run 은 넣을 예정).
|
|
58
|
+
if (res.raws > 0 && (!res.ingest || res.ingest.added + res.ingest.merged > 0)) return 'new-items';
|
|
59
|
+
if (res.messages === 0) return 'no-new-messages';
|
|
60
|
+
if (res.droppedByFilter === res.messages) return 'filtered-out';
|
|
61
|
+
return 'already-consumed';
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** 사람이 읽는 한 덩이 — «메시지 0» 과 «원장 입력 0» 을 다른 줄로 갈라 보여준다. */
|
|
65
|
+
export function renderCollectTelegramSavedResult(res: CollectSavedResult): string {
|
|
66
|
+
const lines = [
|
|
67
|
+
`텔레그램 저장된 메시지: 읽음 ${res.messages} · 필터로 버림 ${res.droppedByFilter} · 원장 입력 ${res.raws} · 커서 ${res.cursorBefore} → ${res.cursorAfter}${res.dryRun ? ' (dry-run · 안 씀)' : ''}`,
|
|
68
|
+
];
|
|
69
|
+
if (res.ingest) lines.push(`원장: 새 ${res.ingest.added} · 합침 ${res.ingest.merged} · 이미 끝난 것 ${res.ingest.seen} · 버림 ${res.ingest.skipped}`);
|
|
70
|
+
const diagnosis = diagnoseSavedCollect(res);
|
|
71
|
+
if (diagnosis === 'no-new-messages') {
|
|
72
|
+
lines.push(`메시지 0 — 커서 ${res.cursorBefore} 이후 새 저장 메시지가 없다${res.cursorBefore > 0 ? ' (커서는 이미 다른 주체가 넘겼을 수 있다)' : ''}`);
|
|
73
|
+
} else if (diagnosis === 'filtered-out') {
|
|
74
|
+
lines.push(`원장 입력 0 은 필터 때문이다 — 링크·메모 문장이 없는 빈 메시지 ${res.droppedByFilter}건`);
|
|
75
|
+
} else if (diagnosis === 'already-consumed') {
|
|
76
|
+
lines.push(`원장 입력 ${res.raws} · 새 0 — 같은 항목을 다른 주체(queue)가 이미 가져갔다 (이미 끝난 것 ${res.ingest?.seen ?? 0})`);
|
|
77
|
+
} else if (res.dryRun) {
|
|
78
|
+
lines.push(`원장에 들어갈 것 ${res.raws}건 (dry-run — 쓰지 않았다)`);
|
|
79
|
+
} else {
|
|
80
|
+
lines.push(`원장에 새 것 ${res.ingest?.added ?? 0}건이 들어갔다`);
|
|
81
|
+
}
|
|
82
|
+
return lines.join('\n');
|
|
83
|
+
}
|
|
41
84
|
|
|
42
85
|
/**
|
|
43
86
|
* 커서 이후 메시지를 한 번에 최대 max 개 읽어 원장에 넣고 커서를 옮긴다.
|
|
@@ -47,15 +90,21 @@ export interface CollectSavedResult { cursorBefore: number; cursorAfter: number;
|
|
|
47
90
|
export async function collectTelegramSaved(root: string, fetch: FetchSavedMessages, opts: { max: number; dryRun?: boolean }): Promise<CollectSavedResult> {
|
|
48
91
|
const cursorBefore = readSavedCursor(root);
|
|
49
92
|
const messages = await fetch(cursorBefore, opts.max);
|
|
50
|
-
const
|
|
93
|
+
const rowsPerMessage = messages.map(savedMessageToRaws);
|
|
94
|
+
const raws = rowsPerMessage.flat();
|
|
95
|
+
const droppedByFilter = rowsPerMessage.filter((rows) => rows.length === 0).length;
|
|
51
96
|
const cursorAfter = messages.reduce((mx, m) => Math.max(mx, m.id), cursorBefore);
|
|
52
|
-
const result: CollectSavedResult = { cursorBefore, cursorAfter, messages: messages.length, raws: raws.length, dryRun: !!opts.dryRun };
|
|
97
|
+
const result: CollectSavedResult = { cursorBefore, cursorAfter, messages: messages.length, droppedByFilter, raws: raws.length, dryRun: !!opts.dryRun };
|
|
53
98
|
if (!opts.dryRun) {
|
|
54
99
|
result.ingest = ingestIntakeItems(root, 'telegram-saved', raws);
|
|
55
100
|
if (cursorAfter > cursorBefore) writeSavedCursor(root, cursorAfter);
|
|
56
101
|
}
|
|
57
|
-
// ⛔ 본문·링크는 싣지 않는다 — 커서와 건수만.
|
|
58
|
-
debug.log('intake.collect', 'telegram-saved', {
|
|
102
|
+
// ⛔ 본문·링크는 싣지 않는다 — 커서와 건수만. 두 축(메시지·원장 입력)을 따로 남겨 사흘 0 을 갈라 읽게.
|
|
103
|
+
debug.log('intake.collect', 'telegram-saved', {
|
|
104
|
+
cursorBefore, cursorAfter, messages: messages.length, droppedByFilter, raws: raws.length,
|
|
105
|
+
...(result.ingest ? { added: result.ingest.added, merged: result.ingest.merged, seen: result.ingest.seen, skipped: result.ingest.skipped } : {}),
|
|
106
|
+
diagnosis: diagnoseSavedCollect(result), dryRun: !!opts.dryRun,
|
|
107
|
+
});
|
|
59
108
|
return result;
|
|
60
109
|
}
|
|
61
110
|
|
|
@@ -55,6 +55,8 @@ export interface InteractiveTerminalModalSpec {
|
|
|
55
55
|
* of a plain local shell. Empty default keeps the legacy behaviour. */
|
|
56
56
|
shellArgs?: readonly string[];
|
|
57
57
|
env?: Record<string, string>;
|
|
58
|
+
/** Remove captured login-shell environment keys after composition. */
|
|
59
|
+
unsetEnv?: readonly string[];
|
|
58
60
|
/** Ghostty-compatible terminfo name. Defaults via PreviewTerminal
|
|
59
61
|
* to xterm-256color. */
|
|
60
62
|
termName?: string;
|
|
@@ -212,6 +214,7 @@ export function createInteractiveTerminalModal(
|
|
|
212
214
|
shell: spec.shell,
|
|
213
215
|
shellArgs: spec.shellArgs,
|
|
214
216
|
env: spec.env,
|
|
217
|
+
unsetEnv: spec.unsetEnv,
|
|
215
218
|
termName: spec.termName,
|
|
216
219
|
useRegistry: spec.useRegistry,
|
|
217
220
|
registryKind: spec.registryKind,
|
package/src/keybindings.ts
CHANGED
|
@@ -54,32 +54,27 @@ export const KEYBINDINGS: KeyBinding[] = [
|
|
|
54
54
|
{ keys: ['Ctrl+K', 'Ctrl+ㅏ'], action: 'Open SSH remote picker', context: 'global', note: 'FU-1 — registerKeyBinding({handler})' },
|
|
55
55
|
{ keys: ['Ctrl+P', 'Ctrl+ㅔ'], action: 'Open finder (file picker)', context: 'global', note: 'FU-1 — registerKeyBinding({handler})' },
|
|
56
56
|
{ keys: ['Ctrl+M', 'Ctrl+ㅡ'], action: 'Arm pane-modal chord (1 s window; next letter opens deferred pane)', context: 'global', note: 'FU-1 — coordinator chord, SHORTCUT_TABLE' },
|
|
57
|
-
{ keys: ['Ctrl+B'
|
|
58
|
-
{ keys: ['Ctrl+
|
|
59
|
-
{ keys: ['Ctrl+
|
|
60
|
-
{ keys: ['Ctrl+
|
|
61
|
-
{ keys: ['Ctrl+
|
|
62
|
-
{ keys: ['Ctrl+
|
|
63
|
-
{ keys: ['Ctrl+
|
|
64
|
-
{ keys: ['Ctrl+
|
|
65
|
-
{ keys: ['Ctrl+
|
|
66
|
-
{ keys: ['Ctrl+
|
|
67
|
-
{ keys: ['Ctrl+
|
|
68
|
-
{ keys: ['Ctrl+
|
|
69
|
-
{ keys: ['Ctrl+
|
|
70
|
-
{ keys: ['Ctrl+
|
|
71
|
-
{ keys: ['Ctrl+
|
|
72
|
-
{ keys: ['Ctrl+
|
|
73
|
-
{ keys: ['Ctrl+B ?'], action: 'Open VW chord help popup (transient modal, 8 s)', context: 'global', note: 'FU-2 — upgraded from chatLines' },
|
|
74
|
-
{ keys: ['Ctrl+B z'], action: 'Toggle zoom on focused pane (fullscreen within VW)', context: 'global', note: 'VW-U5' },
|
|
75
|
-
{ keys: ['Ctrl+B Tab'], action: 'Focus last pane (alt-tab within VW)', context: 'global', note: 'VW-U5' },
|
|
76
|
-
{ keys: ['Ctrl+B R'], action: 'Rename foreground window (input modal)', context: 'global', note: 'VW-B1 — tmux `,` 는 prev 이라 R 사용' },
|
|
77
|
-
{ keys: ['Ctrl+B A'], action: 'Rename focused pane (VW-local override, empty clears)', context: 'global', note: 'VW-B2' },
|
|
57
|
+
{ keys: ['Ctrl+B'], action: 'Background running child tasks (while streaming; turn continues)', context: 'global' },
|
|
58
|
+
{ keys: ['Ctrl+X', 'Ctrl+ㅌ'], action: 'Arm dashboard pane chord (1 s window)', context: 'pane' },
|
|
59
|
+
{ keys: ['Ctrl+X Ctrl+W'], action: 'Focus working-dir browser', context: 'global', note: 'pane-browse chord' },
|
|
60
|
+
{ keys: ['Ctrl+X Ctrl+O'], action: 'Focus Obsidian browser', context: 'global', note: 'pane-browse chord' },
|
|
61
|
+
{ keys: ['Ctrl+X Ctrl+S'], action: 'Reopen scratchpad (pane-browse)', context: 'global' },
|
|
62
|
+
{ keys: ['Ctrl+X s'], action: 'Enter sync mode (chat input)', context: 'input' },
|
|
63
|
+
{ keys: ['Ctrl+X g'], action: 'Exit sync/control mode → general (chat input)', context: 'input' },
|
|
64
|
+
{ keys: ['Ctrl+X S'], action: 'Focus sessions sidebar', context: 'pane' },
|
|
65
|
+
{ keys: ['Ctrl+X n'], action: 'Advance to next session + focus sidebar', context: 'pane' },
|
|
66
|
+
{ keys: ['Ctrl+X p'], action: 'Retreat to previous session + focus sidebar', context: 'pane' },
|
|
67
|
+
{ keys: ['Ctrl+X c'], action: 'Enter control mode (chat input)', context: 'input' },
|
|
68
|
+
{ keys: ['Ctrl+X x'], action: 'Close focused pane', context: 'pane' },
|
|
69
|
+
{ keys: ['Ctrl+X z'], action: 'Toggle log zoom', context: 'pane' },
|
|
70
|
+
{ keys: ['Ctrl+X t'], action: 'Open preview terminal', context: 'pane' },
|
|
71
|
+
{ keys: ['Ctrl+X e'], action: 'Toggle preview terminal expansion', context: 'pane' },
|
|
72
|
+
{ keys: ['Ctrl+X f'], action: 'Toggle all log folds', context: 'pane' },
|
|
78
73
|
{ keys: ['Alt+N', 'Alt+ㅜ'], action: 'Next virtual window (fast-switch, no chord)', context: 'global', note: 'VW-U2 — guarded by list().length>1' },
|
|
79
74
|
{ keys: ['Alt+P', 'Alt+ㅔ'], action: 'Prev virtual window (fast-switch, no chord)', context: 'global', note: 'VW-U2' },
|
|
80
75
|
{ keys: ['Alt+1..9'], action: 'Switch directly to Nth virtual window', context: 'global', note: 'VW-U2 — guarded by list().length>1' },
|
|
81
76
|
{ keys: ['Alt+0'], action: 'Open window picker (fast, no chord)', context: 'global', note: 'VW-U2' },
|
|
82
|
-
{ keys: ['Ctrl+
|
|
77
|
+
{ keys: ['Ctrl+X b'], action: 'Toggle notification bell modal', context: 'pane', note: 'NT5 — open/close bell modal with unread + error filter' },
|
|
83
78
|
{ keys: ['Ctrl+Shift+V', 'Ctrl+Shift+ㅍ'], action: 'Enter Voice mode (Space hold push-to-talk · Esc to exit)', context: 'global', note: 'PR-S1V.4 — voice-input-host · kitty >3u on entry · brand prefix routing' },
|
|
84
79
|
{ keys: ['Alt+S', 'Alt+ㄴ'], action: 'Toggle continuous voice-chat mode (real-time STT + auto-TTS · ESC or chord again to exit)', context: 'global', note: '2026-05-03 — moved from Alt+R to free R for reasoning cycle (V/D/R mnemonic)' },
|
|
85
80
|
{ keys: ['Alt+R', 'Alt+ㄱ'], action: 'Cycle reasoning level (off → low → medium → high → xhigh). Codex / Claude reasoning models only — no-op on grok/gemini', context: 'global', note: '2026-05-03 — provider-agnostic ReasoningLevel cycle, same effect as `/reasoning` slash. V/D/R mnemonic: V=voice control (Ctrl+Shift+V), D=batch dictation (Space-longpress), R=reasoning' },
|
|
@@ -209,7 +209,7 @@ export function resolveProviderCredential(input: ResolveCredentialInput): Resolv
|
|
|
209
209
|
// 목표 provider 의 엔드포인트 — 키와 **같은 규율**로 rotation 에서만 가져온다(10R).
|
|
210
210
|
// 전환이면 옛 baseUrl 은 틀린 주소이므로, rotation 에 명시가 없으면 undefined(provider 기본).
|
|
211
211
|
// ⛔⭐ local 은 «런 단위 env»(`LOCAL_LLM_URL`)가 config rotation 을 이긴다 — `ELANOUS_LLM_PROVIDER` 가 config 를 이기는 것과 같은 규칙(BACKLOG B13).
|
|
212
|
-
// 🩸 2026-09-25: 부모에 `LOCAL_LLM_URL
|
|
212
|
+
// 🩸 2026-09-25: 부모에 `LOCAL_LLM_URL=<원격 프록시>` 를 줬는데 rotation 의 `local → localhost:1234` 가 이겨 자식이 «호스트»
|
|
213
213
|
// LM Studio 로 갔다. Pod(config 없음)에선 안 드러났다.
|
|
214
214
|
const envEndpoint = provider === 'local' ? env.LOCAL_LLM_URL?.trim() : undefined;
|
|
215
215
|
const endpoint = envEndpoint || rotation?.find((r) => r.provider === provider && typeof r.baseUrl === 'string' && r.baseUrl.trim().length > 0)?.baseUrl?.trim();
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
import type { LLMProviderName, ReasoningLevel, LlmRoutePolicyConfig } from '../user-config.js';
|
|
10
10
|
import { classifyMissionTier1, type MissionKind } from './mission-router.js';
|
|
11
|
+
import type { SessionSource } from '../session/index.js';
|
|
11
12
|
import { lookupLlmTierSpec } from '../model-tier/llm-tier-map.js';
|
|
12
13
|
|
|
13
14
|
export type RouteDecisionSource = 'explicit-pin' | 'codex-tier-policy' | 'legacy-default' | 'active-provider-default' | 'execution-backend';
|
|
@@ -111,6 +112,8 @@ export interface ResolveRouteDecisionInput {
|
|
|
111
112
|
provider: LLMProviderName;
|
|
112
113
|
configuredModel?: string;
|
|
113
114
|
text: string;
|
|
115
|
+
/** Telegram keeps its non-deep coding tier; other surfaces retain the configured quick model. */
|
|
116
|
+
surface?: SessionSource;
|
|
114
117
|
/** A per-turn/slash/user model choice. It always wins. */
|
|
115
118
|
explicitModel?: string;
|
|
116
119
|
routePolicy?: LlmRoutePolicyConfig;
|
|
@@ -145,6 +148,16 @@ export function resolveRouteDecision(input: ResolveRouteDecisionInput): RouteDec
|
|
|
145
148
|
};
|
|
146
149
|
}
|
|
147
150
|
const policyMode = input.routePolicy?.mode;
|
|
151
|
+
// Unspecified callers keep the configured quick model for compatibility; Telegram alone owns the coding-tier exception.
|
|
152
|
+
if (input.provider === 'openai-codex' && input.surface !== 'telegram' && policyMode === undefined && mission === 'quick' && input.configuredModel) {
|
|
153
|
+
return {
|
|
154
|
+
provider: input.provider,
|
|
155
|
+
model: input.configuredModel,
|
|
156
|
+
source: 'active-provider-default',
|
|
157
|
+
rationale: 'configured model preserved for quick mission',
|
|
158
|
+
mission,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
148
161
|
if (input.provider === 'openai-codex' && policyMode !== 'active-provider') {
|
|
149
162
|
const deep = mission === 'plan' || mission === 'review';
|
|
150
163
|
const tier = deep ? 'best' : 'better';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/** Provider wire names have a deliberately smaller alphabet than MCP names.
|
|
2
|
+
* Keep the source name in the TUI/tool catalog and use this reversible map
|
|
3
|
+
* only for one provider request and its returned tool calls. */
|
|
4
|
+
export interface ProviderToolNameMap {
|
|
5
|
+
toProviderName(name: string): string;
|
|
6
|
+
toOriginalName(name: string): string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function sanitizeProviderToolName(name: string): string {
|
|
10
|
+
const sanitized = name.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
11
|
+
return sanitized.length > 0 ? sanitized : 'tool';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** Build a deterministic, collision-free mapping for the complete request
|
|
15
|
+
* namespace. Repeated source names intentionally share one wire name. */
|
|
16
|
+
export function createProviderToolNameMap(names: readonly string[]): ProviderToolNameMap {
|
|
17
|
+
const originalToProvider = new Map<string, string>();
|
|
18
|
+
const providerToOriginal = new Map<string, string>();
|
|
19
|
+
|
|
20
|
+
for (const original of names) {
|
|
21
|
+
if (originalToProvider.has(original)) continue;
|
|
22
|
+
|
|
23
|
+
const base = sanitizeProviderToolName(original);
|
|
24
|
+
let candidate = base;
|
|
25
|
+
let suffix = 2;
|
|
26
|
+
while (providerToOriginal.has(candidate)) {
|
|
27
|
+
candidate = `${base}__${suffix++}`;
|
|
28
|
+
}
|
|
29
|
+
originalToProvider.set(original, candidate);
|
|
30
|
+
providerToOriginal.set(candidate, original);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return {
|
|
34
|
+
toProviderName: (name) => originalToProvider.get(name) ?? sanitizeProviderToolName(name),
|
|
35
|
+
toOriginalName: (name) => providerToOriginal.get(name) ?? name,
|
|
36
|
+
};
|
|
37
|
+
}
|