@askexenow/exe-os 0.9.365 → 0.9.368
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/deploy/compose/.env.askexe-control-plane.example +3 -1
- package/deploy/compose/.env.customer.example +6 -2
- package/deploy/compose/.env.example +8 -2
- package/deploy/compose/docker-compose.yml +21 -2
- package/deploy/compose/generate-env.ts +21 -1
- package/dist/.dist-verified.json +3 -3
- package/dist/{active-agent-MGF7J3HB.js → active-agent-6WNC756A.js} +3 -3
- package/dist/{active-agent-C6DPH43L.js → active-agent-RDTJGZHP.js} +3 -3
- package/dist/{agent-defs-generator-X7TVMPVB.js → agent-defs-generator-M5AUL3WM.js} +2 -2
- package/dist/agent-heartbeat-CQPGJIFF.js +13 -0
- package/dist/{agent-loop-E7RZCFDB.js → agent-loop-FOK2IRZQ.js} +1 -1
- package/dist/{agentic-ontology-CARDCG37.js → agentic-ontology-ZJBRYETW.js} +1 -1
- package/dist/{backfill-metadata-ANCJA6LA.js → backfill-metadata-Q4X23XLR.js} +5 -5
- package/dist/{backup-verify-F7BHVEF7.js → backup-verify-UKLX6IEK.js} +1 -1
- package/dist/behavior-injection-C3HEKSJY.js +60 -0
- package/dist/{behaviors-R2IE3PEN.js → behaviors-UCMAREU3.js} +8 -6
- package/dist/bin/agentic-ontology-backfill.js +6 -6
- package/dist/bin/agentic-reflection-backfill.js +7 -7
- package/dist/bin/agentic-semantic-label.js +6 -6
- package/dist/bin/backfill-conversations.js +5 -5
- package/dist/bin/backfill-responses.js +5 -5
- package/dist/bin/backfill-vectors.js +6 -6
- package/dist/bin/bulk-sync-postgres.js +10 -10
- package/dist/bin/cc-doctor.js +5 -5
- package/dist/bin/cleanup-stale-review-tasks.js +15 -14
- package/dist/bin/cli.js +20 -20
- package/dist/bin/deferred-daemon-restart.js +88 -83
- package/dist/bin/exe-agent-config.js +2 -2
- package/dist/bin/exe-agent.js +252 -14
- package/dist/bin/exe-assign.js +6 -6
- package/dist/bin/exe-boot.js +33 -31
- package/dist/bin/exe-call.js +4 -4
- package/dist/bin/exe-cloud.js +11 -11
- package/dist/bin/exe-config-dump.js +2 -2
- package/dist/bin/exe-dispatch.js +16 -15
- package/dist/bin/exe-doctor.js +6 -6
- package/dist/bin/exe-export-behaviors.js +10 -8
- package/dist/bin/exe-forget.js +7 -7
- package/dist/bin/exe-gateway.js +7 -7
- package/dist/bin/exe-healthcheck.js +5 -5
- package/dist/bin/exe-heartbeat.js +18 -17
- package/dist/bin/exe-kill.js +19 -18
- package/dist/bin/exe-launch-agent.js +25 -23
- package/dist/bin/exe-mcp.js +3 -3
- package/dist/bin/exe-memory-reads.js +5 -5
- package/dist/bin/exe-new-employee.js +8 -8
- package/dist/bin/exe-os-mcp-proxy.js +3 -3
- package/dist/bin/exe-pending-messages.js +16 -15
- package/dist/bin/exe-pending-notifications.js +15 -14
- package/dist/bin/exe-pending-reviews.js +15 -14
- package/dist/bin/exe-rename.js +4 -4
- package/dist/bin/exe-review.js +18 -17
- package/dist/bin/exe-search.js +6 -6
- package/dist/bin/exe-session-cleanup.js +20 -18
- package/dist/bin/exe-settings.js +10 -10
- package/dist/bin/exe-start-codex.js +81 -19
- package/dist/bin/exe-start-opencode.js +11 -9
- package/dist/bin/exe-status.js +17 -16
- package/dist/bin/exe-support.js +3 -3
- package/dist/bin/exe-team.js +4 -4
- package/dist/bin/exe-verify-running-images.js +123 -4
- package/dist/bin/exe-watchdog.js +44 -3
- package/dist/bin/git-sweep.js +25 -15
- package/dist/bin/graph-backfill.js +7 -7
- package/dist/bin/graph-export.js +6 -6
- package/dist/bin/import-history.js +10 -10
- package/dist/bin/install.js +90 -85
- package/dist/bin/intercom-check.js +4 -4
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +4 -4
- package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
- package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
- package/dist/bin/reconcile-backlog.js +47 -6
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/scan-tasks.js +15 -14
- package/dist/bin/setup.js +1 -1
- package/dist/bin/shard-migrate.js +5 -5
- package/dist/bin/stack-update.js +35 -6
- package/dist/bin/verify-stack.js +11 -1
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{boot-generation-X45BSVZY.js → boot-generation-7H7Y4KC2.js} +3 -3
- package/dist/{boot-review-sections-OBVRXXSF.js → boot-review-sections-4AGCECCP.js} +14 -13
- package/dist/build-manifest.json +910 -845
- package/dist/{capability-cards-57FURUMR.js → capability-cards-6KAC5D2Z.js} +2 -2
- package/dist/{capacity-monitor-QEL62JDO.js → capacity-monitor-J2Y4SFLA.js} +16 -15
- package/dist/{catchup-brief-PMXTCASA.js → catchup-brief-F2HKF2CU.js} +19 -18
- package/dist/{chunk-5CBGH6RA.js → chunk-2AS6FG6C.js} +3 -3
- package/dist/{chunk-TO6TB75E.js → chunk-2UBMXN4D.js} +2 -2
- package/dist/{chunk-J6I7X272.js → chunk-2UGU3V63.js} +1 -1
- package/dist/{chunk-45EQTS7B.js → chunk-34BMZTWV.js} +1 -1
- package/dist/{chunk-JYFYIGYK.js → chunk-4DGIOK6T.js} +1 -1
- package/dist/{chunk-T6S45OLV.js → chunk-4GVJIMMK.js} +12 -6
- package/dist/{chunk-IXEFO6HD.js → chunk-4L732DE5.js} +3 -3
- package/dist/{chunk-MXEIZUXG.js → chunk-4RRMZJLG.js} +1 -1
- package/dist/{chunk-3JNVB5LG.js → chunk-5IVLOOJR.js} +1 -1
- package/dist/chunk-5YKNEL3W.js +356 -0
- package/dist/{chunk-EMZHB767.js → chunk-6EXOW5ZA.js} +9 -9
- package/dist/{chunk-6Q263OZE.js → chunk-6P7DVFKA.js} +1 -1
- package/dist/{chunk-ZDUO6QBH.js → chunk-6UZ3DEQI.js} +1 -1
- package/dist/{chunk-DJK45U7B.js → chunk-72JZQ7EV.js} +1 -1
- package/dist/{chunk-22YQBVMO.js → chunk-72QUZX6J.js} +4 -4
- package/dist/{chunk-DYWGIPVP.js → chunk-AAL6CDMQ.js} +7 -7
- package/dist/{chunk-E6ORBQHP.js → chunk-AAMGHW5W.js} +1 -0
- package/dist/{chunk-EJ4522YM.js → chunk-AJGX4Z34.js} +1 -1
- package/dist/{chunk-M7EES2KM.js → chunk-BEPO36MW.js} +3 -3
- package/dist/{chunk-WR75WUEP.js → chunk-BFL3UB77.js} +1 -1
- package/dist/{chunk-NV6A5HDN.js → chunk-BFPQXPN3.js} +1 -1
- package/dist/{chunk-VGE6IHZB.js → chunk-BJKC6ZJU.js} +110 -86
- package/dist/{chunk-R7RM766N.js → chunk-BLNSUBP3.js} +3 -3
- package/dist/{chunk-52TIQJEQ.js → chunk-BNDHQGOY.js} +1 -1
- package/dist/{chunk-QYJANQWC.js → chunk-BPQWRR4H.js} +2 -2
- package/dist/{chunk-ANPE3TT3.js → chunk-BTGR55GX.js} +3 -3
- package/dist/chunk-BTSWFMEH.js +14 -0
- package/dist/{chunk-OPNROU5B.js → chunk-C4IJ5IS5.js} +1 -1
- package/dist/{chunk-BEHLIRRJ.js → chunk-C5FOA5GO.js} +14 -3
- package/dist/{chunk-EHHMNKOA.js → chunk-CSBD7QLZ.js} +1 -1
- package/dist/{chunk-EKVTRI3N.js → chunk-CU2OUUSV.js} +27 -6
- package/dist/{chunk-P47MPWNU.js → chunk-CXHRNESJ.js} +1 -1
- package/dist/{chunk-F2S3M5MB.js → chunk-DRMGPZSC.js} +2 -2
- package/dist/{chunk-KRUYQFSH.js → chunk-DYPKSVB7.js} +5 -5
- package/dist/{chunk-KSVLBATT.js → chunk-E5QQZDQN.js} +53 -0
- package/dist/{chunk-ODBRU6BF.js → chunk-EDB3LXBQ.js} +1542 -984
- package/dist/{chunk-IIZITKBV.js → chunk-EDRXCUEP.js} +4 -4
- package/dist/{chunk-4QKKLK3C.js → chunk-ELY5WBZX.js} +10 -10
- package/dist/{chunk-MPQXQ5IE.js → chunk-EZUSIF66.js} +1 -1
- package/dist/{chunk-DEFSN2FQ.js → chunk-FHYX64H3.js} +3 -3
- package/dist/{chunk-YMJOLEPE.js → chunk-FSALI4B7.js} +4 -4
- package/dist/{chunk-6GQYPJPG.js → chunk-FWKTZURC.js} +8 -8
- package/dist/{chunk-EWZYFG5Q.js → chunk-FWVPGXHD.js} +5 -5
- package/dist/{chunk-DWAQOEXL.js → chunk-GILYOIMP.js} +2 -2
- package/dist/{chunk-RZIKSE6N.js → chunk-GP3J3AOT.js} +4 -4
- package/dist/{chunk-LHOKWZKL.js → chunk-H6J7N3BZ.js} +1 -1
- package/dist/{chunk-EVPBYX2Z.js → chunk-HQSUXAB4.js} +1 -1
- package/dist/{chunk-IM2I7OOS.js → chunk-HTLJHSN4.js} +1 -1
- package/dist/{chunk-JUOZLXLH.js → chunk-HXV3DGL7.js} +1 -1
- package/dist/{chunk-OFGFRT5J.js → chunk-IEE6X6R2.js} +1 -1
- package/dist/{chunk-SP37DONS.js → chunk-IKRIUEIF.js} +1 -1
- package/dist/{chunk-RHX6MNWY.js → chunk-J44774XC.js} +1 -1
- package/dist/{chunk-7C4FUNVO.js → chunk-J77ZIMH5.js} +5 -5
- package/dist/{chunk-NO3M2AFM.js → chunk-JDPV7W2L.js} +1 -1
- package/dist/{chunk-FXPAUDCZ.js → chunk-KGPWS4KE.js} +1 -1
- package/dist/{chunk-L3TB7CC3.js → chunk-KM6XSFHP.js} +12 -2
- package/dist/{chunk-ZEKCHV43.js → chunk-KWQ7RHYD.js} +4 -4
- package/dist/{chunk-QFIVK3G5.js → chunk-KYVIV54Y.js} +1 -1
- package/dist/chunk-KZXMP6JG.js +319 -0
- package/dist/{chunk-AGQAGOQN.js → chunk-LJWCK2DR.js} +9 -9
- package/dist/{chunk-O2MEBF23.js → chunk-MCXYNYZI.js} +30 -2
- package/dist/{chunk-L2VZBPJJ.js → chunk-MWEIBVBS.js} +13 -1
- package/dist/{chunk-RVWALVDT.js → chunk-MXP27XTP.js} +2 -2
- package/dist/{chunk-DQ5KHWFD.js → chunk-N3CGSO3S.js} +1 -1
- package/dist/{chunk-ZNEBZCZR.js → chunk-NNXPIJRB.js} +1 -1
- package/dist/{chunk-MZJBUAC3.js → chunk-NWE3CFX7.js} +4 -4
- package/dist/{chunk-BRLS5OLZ.js → chunk-OBESOWFJ.js} +35 -4
- package/dist/{chunk-5KLQCGI5.js → chunk-OL3QP3AU.js} +171 -1
- package/dist/{chunk-ESTR7QUP.js → chunk-P3PAD6AA.js} +1 -1
- package/dist/{chunk-2FYIMTQE.js → chunk-PGF5I7EV.js} +2 -2
- package/dist/{agent-heartbeat-I5UPGXAU.js → chunk-PHUHIVD5.js} +4 -5
- package/dist/{chunk-C3UAQ3JG.js → chunk-PVWM2WMM.js} +1 -1
- package/dist/{chunk-EWCEUO65.js → chunk-QCSAYYL6.js} +1 -1
- package/dist/{chunk-SBAU735L.js → chunk-QE5KWKVU.js} +27 -6
- package/dist/{chunk-LZKYVMBY.js → chunk-QKZEUCTS.js} +2 -2
- package/dist/{chunk-POPRJKAY.js → chunk-QS6HI4B6.js} +6 -0
- package/dist/{chunk-JNVQGLPX.js → chunk-QT6CNCXO.js} +3 -3
- package/dist/{chunk-J4U5Z7VX.js → chunk-QZYYCPNL.js} +4 -4
- package/dist/{chunk-RD4E5G3B.js → chunk-RDIZSXXD.js} +1 -1
- package/dist/{chunk-2RQT7TED.js → chunk-RFWOXKVL.js} +55 -3
- package/dist/chunk-S2YTU74T.js +76 -0
- package/dist/{chunk-X6A2VWVJ.js → chunk-TP7BFVQP.js} +2 -2
- package/dist/{chunk-CKG6CVKI.js → chunk-TTJWPV4G.js} +1 -1
- package/dist/chunk-TX3Q2GIL.js +97 -0
- package/dist/{chunk-Q7BU5Q6I.js → chunk-UATT6BNO.js} +3 -3
- package/dist/{chunk-PPGPCWRC.js → chunk-UVM5ZXO2.js} +4 -4
- package/dist/{chunk-BATQKSLI.js → chunk-V7E37GE3.js} +2 -2
- package/dist/{chunk-U373MEF5.js → chunk-VD3CVNGB.js} +3 -3
- package/dist/{chunk-ZSZPMUNX.js → chunk-VIW62NN5.js} +126 -7
- package/dist/{chunk-EPNWEOOE.js → chunk-VTOO5UB3.js} +10 -10
- package/dist/chunk-W5MCOZTW.js +304 -0
- package/dist/{chunk-2ESB5SDP.js → chunk-WJOJWRN5.js} +139 -33
- package/dist/{chunk-CPILYY2K.js → chunk-X4MRVNR3.js} +1 -1
- package/dist/{chunk-EPDNWY5P.js → chunk-XBTQPQN7.js} +1 -1
- package/dist/{behavior-injection-XQ4B7DCF.js → chunk-XOTDAKJL.js} +24 -38
- package/dist/{chunk-ORNCMRIX.js → chunk-Y4AYNLXU.js} +31 -37
- package/dist/{chunk-WYLFDSIE.js → chunk-YGPJ7VSJ.js} +48 -10
- package/dist/{chunk-ZRKEUCUZ.js → chunk-ZR3VMM3X.js} +12 -10
- package/dist/{chunk-JITNFE4W.js → chunk-ZWONQU5S.js} +1 -1
- package/dist/{cleanup-graph-garbage-CAA625RJ.js → cleanup-graph-garbage-FBSQI33K.js} +8 -8
- package/dist/{cloud-sync-command-DBB7WRHL.js → cloud-sync-command-NHGVDTLM.js} +11 -3
- package/dist/{cloud-sync-db-init-V7IB23W5.js → cloud-sync-db-init-I75VOTXC.js} +1 -1
- package/dist/{cloud-sync-shutdown-2D3B73CJ.js → cloud-sync-shutdown-JGOFGGET.js} +2 -2
- package/dist/{cloud-sync-state-5DFKLWNB.js → cloud-sync-state-QF3TMMJ4.js} +3 -1
- package/dist/{co-activation-JVN7EBS6.js → co-activation-AE5L2SJV.js} +2 -2
- package/dist/{co-occurrence-526PTFGT.js → co-occurrence-O65D4SCN.js} +6 -6
- package/dist/codex-consolidation-PPXNBXCV.js +96 -0
- package/dist/{conversation-entity-extractor-JO56DB2E.js → conversation-entity-extractor-LFIDTD2O.js} +4 -4
- package/dist/{crdt-sync-LIJLZKFE.js → crdt-sync-NRWDBRSE.js} +1 -1
- package/dist/{crm-webhook-55F7Y6D2.js → crm-webhook-XOQGX6DV.js} +2 -2
- package/dist/{cto-delegation-gate-QIYV4KFO.js → cto-delegation-gate-ZGOAXQI2.js} +14 -13
- package/dist/{daemon-orchestration-Q3GJA2JJ.js → daemon-orchestration-ZMQWYYDT.js} +19 -18
- package/dist/dispatch-intent-journal-VV6HMZC4.js +17 -0
- package/dist/{doc-graph-extractor-P46R4QME.js → doc-graph-extractor-6C5JBKPP.js} +6 -6
- package/dist/{documents-7KFEREWO.js → documents-FKSQGSO4.js} +6 -6
- package/dist/{dreaming-JMUXBAPU.js → dreaming-IB3H6NDZ.js} +18 -17
- package/dist/{employee-boot-brief-HN63D2BY.js → employee-boot-brief-5YRTUEJH.js} +25 -21
- package/dist/{exe-drift-7J7GX7DP.js → exe-drift-CUWUYX3O.js} +3 -3
- package/dist/{exe-export-KJ7B2OBU.js → exe-export-XWENYJNM.js} +7 -7
- package/dist/{exe-import-HPZDWKGE.js → exe-import-OWOMRF2S.js} +7 -7
- package/dist/{exe-key-2PREP464.js → exe-key-P356FGK5.js} +88 -83
- package/dist/{exe-org-VEIISATF.js → exe-org-UKIVF3KE.js} +8 -8
- package/dist/{exe-snapshot-JXQFLUKA.js → exe-snapshot-AZI2WW5Y.js} +19 -18
- package/dist/{fast-db-init-SCXJXOYX.js → fast-db-init-FPAPF3GB.js} +1 -1
- package/dist/{founder-context-U2SZPLYV.js → founder-context-QTQ6V3B5.js} +2 -2
- package/dist/gateway/index.js +11 -11
- package/dist/{git-staleness-S4NDR7NX.js → git-staleness-6ACWLV5Q.js} +2 -2
- package/dist/{global-procedures-ZOFTOXIR.js → global-procedures-RXIKBVLZ.js} +3 -3
- package/dist/{graph-auto-extract-CLVTSUSB.js → graph-auto-extract-Q4A4QMOF.js} +6 -6
- package/dist/{graph-rag-LSJLWGXV.js → graph-rag-RLRQMY54.js} +4 -4
- package/dist/{hook-integrity-SGTKBL6W.js → hook-integrity-3X2JRLBM.js} +1 -1
- package/dist/{hook-prefetch-BDSLB6F4.js → hook-prefetch-DU44UZQP.js} +15 -14
- package/dist/hooks/bug-report-worker.js +19 -18
- package/dist/hooks/codex-stop-task-finalizer.js +20 -19
- package/dist/hooks/commit-complete.js +35 -19
- package/dist/hooks/error-recall.js +8 -8
- package/dist/hooks/exe-heartbeat-hook.js +4 -4
- package/dist/hooks/ingest-worker.js +2 -2
- package/dist/hooks/ingest.js +11 -11
- package/dist/hooks/instructions-loaded.js +5 -5
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +5 -5
- package/dist/hooks/post-compact.js +4 -4
- package/dist/hooks/post-tool-combined.js +12 -12
- package/dist/hooks/pre-compact.js +18 -17
- package/dist/hooks/pre-tool-use.js +86 -34
- package/dist/hooks/prompt-submit.js +36 -31
- package/dist/hooks/session-end.js +114 -100
- package/dist/hooks/session-start.js +16 -16
- package/dist/hooks/stop.js +83 -20
- package/dist/hooks/subagent-stop.js +19 -18
- package/dist/hooks/summary-worker.js +23 -22
- package/dist/index.js +27 -26
- package/dist/{installer-RC2JCKSE.js → installer-B7QYQE56.js} +8 -6
- package/dist/{installer-EA7T3PBD.js → installer-EXR25DDG.js} +6 -6
- package/dist/{installer-KCEM4RCG.js → installer-TOPA7673.js} +152 -8
- package/dist/{intercom-queue-6DZPHHQ2.js → intercom-queue-BZ4M3L4S.js} +14 -13
- package/dist/lib/cloud-sync.js +10 -10
- package/dist/lib/consolidation.js +8 -8
- package/dist/lib/database.js +2 -2
- package/dist/lib/db-backup.js +1 -1
- package/dist/lib/db-write-worker.js +3 -3
- package/dist/lib/db.js +2 -2
- package/dist/lib/delivery-truth.js +25 -0
- package/dist/lib/device-registry.js +1 -1
- package/dist/lib/employee-templates.js +4 -4
- package/dist/lib/employees.js +2 -2
- package/dist/lib/exe-daemon.js +185 -79
- package/dist/lib/hybrid-search.js +6 -6
- package/dist/lib/identity.js +2 -2
- package/dist/lib/license.js +2 -2
- package/dist/lib/messaging.js +15 -14
- package/dist/lib/registry-proxy.js +1 -1
- package/dist/lib/reminders.js +3 -3
- package/dist/lib/schedules.js +6 -6
- package/dist/lib/session-registry.js +4 -4
- package/dist/lib/skill-learning.js +7 -7
- package/dist/lib/status-brief.js +2 -1
- package/dist/lib/store.js +5 -5
- package/dist/lib/task-router.js +3 -3
- package/dist/lib/tasks.js +16 -15
- package/dist/lib/tmux-routing.js +14 -13
- package/dist/lib/token-spend.js +3 -3
- package/dist/{license-gate-HMSMUIAU.js → license-gate-YTIOLKVV.js} +3 -3
- package/dist/{license-sync-FBCMPC4J.js → license-sync-5VE5OSTV.js} +2 -2
- package/dist/mcp/register-tools.js +87 -82
- package/dist/mcp/server.js +90 -85
- package/dist/mcp/tools/complete-reminder.js +4 -4
- package/dist/mcp/tools/create-reminder.js +4 -4
- package/dist/mcp/tools/create-task.js +26 -23
- package/dist/mcp/tools/deactivate-behavior.js +8 -8
- package/dist/mcp/tools/list-reminders.js +4 -4
- package/dist/mcp/tools/list-tasks.js +18 -17
- package/dist/mcp/tools/send-message.js +17 -16
- package/dist/mcp/tools/update-task.js +17 -16
- package/dist/{mcp-http-config-YKJN52HG.js → mcp-http-config-XUNRIGQH.js} +3 -3
- package/dist/{mcp-session-identity-QLUVYWPR.js → mcp-session-identity-4UIG7KLK.js} +14 -13
- package/dist/{memory-cards-K2OSX4AW.js → memory-cards-R74YU4CO.js} +5 -5
- package/dist/{memory-graph-extractor-YLTSKLSY.js → memory-graph-extractor-3B4QJUXI.js} +7 -7
- package/dist/{memory-poisoning-defense-IPO4ADRL.js → memory-poisoning-defense-OAKFL5O2.js} +2 -2
- package/dist/{memory-pressure-watchdog-ZI3TH2OF.js → memory-pressure-watchdog-FFC2CHFJ.js} +15 -14
- package/dist/{memory-reflection-ZKVRU3NT.js → memory-reflection-5IJ6RE2J.js} +2 -2
- package/dist/{notification-ledger-4REL6M3T.js → notification-ledger-P5XBUYKO.js} +17 -15
- package/dist/{notifications-UXJUAP3C.js → notifications-LLCCHRYV.js} +14 -13
- package/dist/{orchestration-events-GMRGGBMN.js → orchestration-events-VBGCIQSS.js} +3 -3
- package/dist/{orchestrator-5TV75HDJ.js → orchestrator-EB3SCTAJ.js} +16 -15
- package/dist/{org-brief-session-7AZZEO3F.js → org-brief-session-GDCDKBFF.js} +6 -6
- package/dist/{org-consent-policy-XT6UZENB.js → org-consent-policy-HCD42NBN.js} +2 -2
- package/dist/{org-partner-runtime-WLZAZJIY.js → org-partner-runtime-TPVKFR6E.js} +6 -6
- package/dist/{org-row-visibility-A5XM4MVO.js → org-row-visibility-ZZLOPZLH.js} +1 -1
- package/dist/{pipeline-router-UEVXDUHR.js → pipeline-router-3JTL2KF6.js} +3 -3
- package/dist/{plan-limits-QEP32X4W.js → plan-limits-MTHRP4WY.js} +5 -5
- package/dist/{projection-worker-GMRC6SBH.js → projection-worker-FLASNERC.js} +2 -2
- package/dist/{prospective-memory-QLHSAPSG.js → prospective-memory-HI3WUY4U.js} +2 -2
- package/dist/{push-notifications-GKRPXOGI.js → push-notifications-DFSR6P7V.js} +15 -14
- package/dist/{reranker-GB4VEMUV.js → reranker-XHBKUDGG.js} +1 -1
- package/dist/{retrieval-health-QIBPBGN6.js → retrieval-health-NYKSDS6M.js} +1 -1
- package/dist/{review-polling-MU47NQ2N.js → review-polling-UAV6DZIZ.js} +15 -14
- package/dist/runtime/index.js +23 -22
- package/dist/{session-events-YMQ3VGBJ.js → session-events-YCYPLWPG.js} +15 -14
- package/dist/{session-kill-telemetry-VGPKE57M.js → session-kill-telemetry-UEJTHL65.js} +15 -14
- package/dist/{session-scope-P46KAHXQ.js → session-scope-LXDW7LJJ.js} +14 -13
- package/dist/{setup-wizard-BRNHSJ4U.js → setup-wizard-OVJQYUUL.js} +1 -1
- package/dist/{skill-refinement-NLYDSFEH.js → skill-refinement-EWRJID73.js} +3 -3
- package/dist/{stack-promote-NHFTNIM2.js → stack-promote-4IJM36OG.js} +5 -4
- package/dist/{stack-release-AQVKZUS7.js → stack-release-BAIRY65H.js} +5 -4
- package/dist/{stack-update-LLX5KT7G.js → stack-update-VDM5WXRS.js} +10 -3
- package/dist/stalled-dispatch-escalation-MHLYH2PT.js +80 -0
- package/dist/{steward-gate-JKHYFAHA.js → steward-gate-Y4N2XY3R.js} +3 -3
- package/dist/{subagent-brief-injection-VDVOHDOU.js → subagent-brief-injection-7A6JEVTP.js} +22 -20
- package/dist/{support-inbox-S6YO5YZU.js → support-inbox-LT4WJECQ.js} +4 -3
- package/dist/{task-enforcement-LXW45H5Z.js → task-enforcement-WOIZ5TLK.js} +15 -14
- package/dist/{task-request-inbox-UCSKDC3R.js → task-request-inbox-D65BPUKZ.js} +2 -2
- package/dist/{task-scope-GDLFE26E.js → task-scope-PQ67YRWP.js} +18 -16
- package/dist/{tasks-crud-W7VGWRUV.js → tasks-crud-TJNMUKKH.js} +14 -13
- package/dist/{tasks-notify-CT7NWCS4.js → tasks-notify-7UVC3VGI.js} +15 -14
- package/dist/{tasks-review-WCSKOUFW.js → tasks-review-WDWYISZ2.js} +14 -13
- package/dist/{telemetry-upload-FK5WKXVB.js → telemetry-upload-6LBGRJUE.js} +7 -7
- package/dist/{token-budget-GBNGSIU3.js → token-budget-XO5XW6DL.js} +3 -3
- package/dist/{tool-gates-3IC7DK4R.js → tool-gates-2OZY3GZM.js} +1 -1
- package/dist/{tool-gates-GXSYBVK4.js → tool-gates-7PLIOLAL.js} +1 -1
- package/dist/{tool-telemetry-VKMRS6MP.js → tool-telemetry-ZL6TTZWG.js} +1 -1
- package/dist/tui/App.js +23 -22
- package/dist/{tui-data-FTPV2XBQ.js → tui-data-UK7ZPKN4.js} +14 -13
- package/dist/{update-support-J6UWPUOC.js → update-support-BGL5KAZO.js} +12 -12
- package/dist/work-claims-XZL2DKQ3.js +53 -0
- package/dist/{work-state-heartbeat-4LDF6DSM.js → work-state-heartbeat-267YQ75U.js} +1 -1
- package/dist/{worker-gate-35VZINZG.js → worker-gate-RUM6MLIR.js} +1 -1
- package/dist/{workflow-engine-4DA6RSHI.js → workflow-engine-YQHGHKSJ.js} +2 -2
- package/dist/{worktree-H3YFJ3NU.js → worktree-3FO6EQ4G.js} +4 -4
- package/dist/{worktree-sweep-4EDLLQ2E.js → worktree-sweep-X7MUEEQS.js} +5 -5
- package/package.json +7 -2
- package/release-notes.json +93 -81
- /package/dist/{chunk-7Y6AQWVT.js → chunk-4AN2PWUK.js} +0 -0
- /package/dist/{chunk-7DMCAGSC.js → chunk-5U4UJGTW.js} +0 -0
- /package/dist/{chunk-3THNS2T7.js → chunk-EYIX6JU7.js} +0 -0
- /package/dist/{chunk-QYECRPGD.js → chunk-FDA45THL.js} +0 -0
- /package/dist/{chunk-MBBFL2SP.js → chunk-GIO4VU4J.js} +0 -0
- /package/dist/{chunk-LKYGSJ2E.js → chunk-I76LRCNA.js} +0 -0
- /package/dist/{chunk-UY6HRDB2.js → chunk-LBWEAQ6Z.js} +0 -0
- /package/dist/{chunk-VS4LPG66.js → chunk-MQ5RUHNZ.js} +0 -0
- /package/dist/{chunk-G2EAYH4U.js → chunk-PFCE4AXQ.js} +0 -0
- /package/dist/{chunk-3NBWARKC.js → chunk-SXAERZL2.js} +0 -0
- /package/dist/{chunk-BY7WWPRM.js → chunk-TKTQRSSD.js} +0 -0
- /package/dist/{chunk-JRPYLUXH.js → chunk-U2AZUMBZ.js} +0 -0
- /package/dist/{chunk-CMBF5WCL.js → chunk-W6FVADZS.js} +0 -0
- /package/dist/{core-memory-CMPPHJN5.js → core-memory-W5ZHHBRR.js} +0 -0
- /package/dist/{memory-isolation-ZB5S5HCO.js → memory-isolation-ZE7EDBO4.js} +0 -0
- /package/dist/{oauth-server-NP7KGF7N.js → oauth-server-3HG62YYJ.js} +0 -0
- /package/dist/{project-boot-LEZSK3W7.js → project-boot-3OAWKYLO.js} +0 -0
- /package/dist/{wiki-acl-5DKOWOIH.js → wiki-acl-FQV4E6M4.js} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getIdentity,
|
|
3
3
|
loadEmployeesSync
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-OBESOWFJ.js";
|
|
5
5
|
import "./chunk-TKDITWDN.js";
|
|
6
6
|
import "./chunk-BBMTVAE3.js";
|
|
7
7
|
import "./chunk-5YEUPUV4.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-JDPV7W2L.js";
|
|
9
9
|
import "./chunk-YYB5PMTK.js";
|
|
10
10
|
import {
|
|
11
11
|
getRoleCapabilities
|
|
@@ -8,27 +8,28 @@ import {
|
|
|
8
8
|
isAtCapacity,
|
|
9
9
|
isWithinRelaunchCooldown,
|
|
10
10
|
pollCapacityDead
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-DYPKSVB7.js";
|
|
12
|
+
import "./chunk-BTGR55GX.js";
|
|
13
|
+
import "./chunk-Y4AYNLXU.js";
|
|
14
|
+
import "./chunk-BTSWFMEH.js";
|
|
15
|
+
import "./chunk-P3PAD6AA.js";
|
|
16
|
+
import "./chunk-KGPWS4KE.js";
|
|
17
|
+
import "./chunk-KYVIV54Y.js";
|
|
17
18
|
import "./chunk-WT4RI36X.js";
|
|
18
|
-
import "./chunk-C3UAQ3JG.js";
|
|
19
19
|
import "./chunk-KI5PFRG6.js";
|
|
20
|
+
import "./chunk-QAEWWYHL.js";
|
|
20
21
|
import "./chunk-EIKATSE4.js";
|
|
21
22
|
import "./chunk-E23LNUWJ.js";
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-EHHMNKOA.js";
|
|
23
|
+
import "./chunk-CSBD7QLZ.js";
|
|
24
24
|
import "./chunk-GBNB4EWD.js";
|
|
25
25
|
import "./chunk-UXLO7VHX.js";
|
|
26
26
|
import "./chunk-DSOQUQTV.js";
|
|
27
|
-
import "./chunk-
|
|
27
|
+
import "./chunk-BFL3UB77.js";
|
|
28
28
|
import "./chunk-AJIXH5JF.js";
|
|
29
|
+
import "./chunk-PVWM2WMM.js";
|
|
29
30
|
import "./chunk-XTWHNLGD.js";
|
|
30
31
|
import "./chunk-AM7S2TY6.js";
|
|
31
|
-
import "./chunk-
|
|
32
|
+
import "./chunk-PGF5I7EV.js";
|
|
32
33
|
import "./chunk-CVYC6DUW.js";
|
|
33
34
|
import "./chunk-ZVTKWWLV.js";
|
|
34
35
|
import "./chunk-CDUB5Q6J.js";
|
|
@@ -40,20 +41,20 @@ import "./chunk-W2IRQJ6R.js";
|
|
|
40
41
|
import "./chunk-HYZV25LY.js";
|
|
41
42
|
import "./chunk-GJV3WDWM.js";
|
|
42
43
|
import "./chunk-MP2AFCGL.js";
|
|
43
|
-
import "./chunk-
|
|
44
|
+
import "./chunk-OBESOWFJ.js";
|
|
44
45
|
import "./chunk-TKDITWDN.js";
|
|
45
46
|
import "./chunk-BBMTVAE3.js";
|
|
46
47
|
import "./chunk-5YEUPUV4.js";
|
|
47
|
-
import "./chunk-
|
|
48
|
+
import "./chunk-JDPV7W2L.js";
|
|
48
49
|
import "./chunk-YYB5PMTK.js";
|
|
49
50
|
import "./chunk-NJFJWQNN.js";
|
|
50
51
|
import "./chunk-V3W3SATA.js";
|
|
51
52
|
import "./chunk-JY5GAZYC.js";
|
|
52
53
|
import "./chunk-FXU7JOXK.js";
|
|
53
54
|
import "./chunk-WNBZJSQT.js";
|
|
54
|
-
import "./chunk-
|
|
55
|
+
import "./chunk-6UZ3DEQI.js";
|
|
55
56
|
import "./chunk-A7XLR3K7.js";
|
|
56
|
-
import "./chunk-
|
|
57
|
+
import "./chunk-MQ5RUHNZ.js";
|
|
57
58
|
import "./chunk-QILQ5FCG.js";
|
|
58
59
|
import "./chunk-ARX6TAGN.js";
|
|
59
60
|
import "./chunk-QMSEL5YS.js";
|
|
@@ -1,37 +1,38 @@
|
|
|
1
1
|
import {
|
|
2
2
|
lightweightSearch
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6EXOW5ZA.js";
|
|
4
4
|
import "./chunk-VMHZSZQJ.js";
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
import "./chunk-ELY5WBZX.js";
|
|
6
|
+
import "./chunk-FDA45THL.js";
|
|
7
7
|
import "./chunk-CHCA3ZM2.js";
|
|
8
8
|
import "./chunk-OTVEIJUQ.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-5U4UJGTW.js";
|
|
10
10
|
import "./chunk-5MOYSU5A.js";
|
|
11
11
|
import "./chunk-4QCFFW2H.js";
|
|
12
12
|
import "./chunk-76CJBM36.js";
|
|
13
13
|
import {
|
|
14
14
|
sessionScopeFilter,
|
|
15
15
|
strictSessionScopeFilter
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
16
|
+
} from "./chunk-Y4AYNLXU.js";
|
|
17
|
+
import "./chunk-BTSWFMEH.js";
|
|
18
|
+
import "./chunk-P3PAD6AA.js";
|
|
19
|
+
import "./chunk-KGPWS4KE.js";
|
|
20
|
+
import "./chunk-KYVIV54Y.js";
|
|
20
21
|
import "./chunk-WT4RI36X.js";
|
|
21
|
-
import "./chunk-C3UAQ3JG.js";
|
|
22
22
|
import "./chunk-KI5PFRG6.js";
|
|
23
|
+
import "./chunk-QAEWWYHL.js";
|
|
23
24
|
import "./chunk-EIKATSE4.js";
|
|
24
25
|
import "./chunk-E23LNUWJ.js";
|
|
25
|
-
import "./chunk-
|
|
26
|
-
import "./chunk-EHHMNKOA.js";
|
|
26
|
+
import "./chunk-CSBD7QLZ.js";
|
|
27
27
|
import "./chunk-GBNB4EWD.js";
|
|
28
28
|
import "./chunk-UXLO7VHX.js";
|
|
29
29
|
import "./chunk-DSOQUQTV.js";
|
|
30
|
-
import "./chunk-
|
|
30
|
+
import "./chunk-BFL3UB77.js";
|
|
31
31
|
import "./chunk-AJIXH5JF.js";
|
|
32
|
+
import "./chunk-PVWM2WMM.js";
|
|
32
33
|
import "./chunk-XTWHNLGD.js";
|
|
33
34
|
import "./chunk-AM7S2TY6.js";
|
|
34
|
-
import "./chunk-
|
|
35
|
+
import "./chunk-PGF5I7EV.js";
|
|
35
36
|
import "./chunk-CVYC6DUW.js";
|
|
36
37
|
import "./chunk-ZVTKWWLV.js";
|
|
37
38
|
import "./chunk-CDUB5Q6J.js";
|
|
@@ -45,11 +46,11 @@ import "./chunk-GJV3WDWM.js";
|
|
|
45
46
|
import "./chunk-MP2AFCGL.js";
|
|
46
47
|
import {
|
|
47
48
|
getClient
|
|
48
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-OBESOWFJ.js";
|
|
49
50
|
import "./chunk-TKDITWDN.js";
|
|
50
51
|
import "./chunk-BBMTVAE3.js";
|
|
51
52
|
import "./chunk-5YEUPUV4.js";
|
|
52
|
-
import "./chunk-
|
|
53
|
+
import "./chunk-JDPV7W2L.js";
|
|
53
54
|
import "./chunk-YYB5PMTK.js";
|
|
54
55
|
import "./chunk-NJFJWQNN.js";
|
|
55
56
|
import "./chunk-V3W3SATA.js";
|
|
@@ -57,9 +58,9 @@ import "./chunk-JY5GAZYC.js";
|
|
|
57
58
|
import "./chunk-FXU7JOXK.js";
|
|
58
59
|
import "./chunk-HPXFKUGU.js";
|
|
59
60
|
import "./chunk-WNBZJSQT.js";
|
|
60
|
-
import "./chunk-
|
|
61
|
+
import "./chunk-6UZ3DEQI.js";
|
|
61
62
|
import "./chunk-A7XLR3K7.js";
|
|
62
|
-
import "./chunk-
|
|
63
|
+
import "./chunk-MQ5RUHNZ.js";
|
|
63
64
|
import "./chunk-QILQ5FCG.js";
|
|
64
65
|
import "./chunk-ARX6TAGN.js";
|
|
65
66
|
import "./chunk-QMSEL5YS.js";
|
|
@@ -171,7 +172,7 @@ ${msgLines}`);
|
|
|
171
172
|
} catch {
|
|
172
173
|
}
|
|
173
174
|
try {
|
|
174
|
-
const { getPendingProspective, markSurfaced } = await import("./prospective-memory-
|
|
175
|
+
const { getPendingProspective, markSurfaced } = await import("./prospective-memory-HI3WUY4U.js");
|
|
175
176
|
const due = await getPendingProspective(agentId, { projectName, limit: 5 });
|
|
176
177
|
if (due.length > 0) {
|
|
177
178
|
const now = Date.now();
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
reserveVersions,
|
|
6
6
|
vectorToBlob
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-ELY5WBZX.js";
|
|
8
8
|
import {
|
|
9
9
|
getClient
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-OBESOWFJ.js";
|
|
11
11
|
|
|
12
12
|
// src/lib/documents.ts
|
|
13
13
|
import crypto from "crypto";
|
|
@@ -270,7 +270,7 @@ async function ingestDocument(input) {
|
|
|
270
270
|
await client.batch([documentStmt, ...chunkStmts], "write");
|
|
271
271
|
const embedded = vectors.filter((v) => v !== null).length;
|
|
272
272
|
const originalTexts = input.chunks.map((c) => c.text);
|
|
273
|
-
import("./doc-graph-extractor-
|
|
273
|
+
import("./doc-graph-extractor-6C5JBKPP.js").then(
|
|
274
274
|
({ extractAndStoreDocumentGraph }) => extractAndStoreDocumentGraph(documentId, originalTexts)
|
|
275
275
|
).catch((err) => {
|
|
276
276
|
process.stderr.write(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
withScopedReadWindow
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-GILYOIMP.js";
|
|
4
4
|
import {
|
|
5
5
|
requireOrgPartnerBinding,
|
|
6
6
|
resolvePartnerIdentities
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
sealMailboxEnvelope,
|
|
23
23
|
unrecordedText,
|
|
24
24
|
verifyManifest
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-AAL6CDMQ.js";
|
|
26
26
|
import {
|
|
27
27
|
queueMailboxDeposit
|
|
28
28
|
} from "./chunk-4LWBC7CM.js";
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
loadLicense,
|
|
10
10
|
readCachedLicenseToken
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-6UZ3DEQI.js";
|
|
12
12
|
import {
|
|
13
13
|
EXE_AI_DIR,
|
|
14
14
|
loadConfig
|
|
@@ -213,18 +213,24 @@ async function maybeCloseAdmin(id, adminEndpoint, version, config) {
|
|
|
213
213
|
const res = await fetch(`${adminEndpoint}/${encodeURIComponent(id)}`, {
|
|
214
214
|
method: "PATCH",
|
|
215
215
|
headers: { authorization: `Bearer ${token}`, "content-type": "application/json" },
|
|
216
|
+
// The smoke report is NOT a defect, so there is no fix commit and no defect
|
|
217
|
+
// absence to evidence — it can never produce a verification artifact, and
|
|
218
|
+
// `closed` now requires one (bug e9ba4b47). Resolving it as `wontfix` is the
|
|
219
|
+
// honest terminal state for a synthetic record and is deliberately ungated:
|
|
220
|
+
// declining to fix something is a judgement, not a claim that a defect is gone.
|
|
221
|
+
// Forging an artifact to keep the word "closed" would defeat the gate this
|
|
222
|
+
// health check exists alongside.
|
|
216
223
|
body: JSON.stringify({
|
|
217
|
-
status: "
|
|
218
|
-
triage_notes:
|
|
219
|
-
fixed_version: version
|
|
224
|
+
status: "wontfix",
|
|
225
|
+
triage_notes: `Synthetic support smoke test from exe-os ${version} \u2014 not a defect, auto-resolved.`
|
|
220
226
|
}),
|
|
221
227
|
signal: AbortSignal.timeout(1e4)
|
|
222
228
|
});
|
|
223
229
|
return {
|
|
224
230
|
check: "askexe_admin_autoclose",
|
|
225
231
|
level: res.ok ? "pass" : "warn",
|
|
226
|
-
detail: res.ok ? "
|
|
227
|
-
next: res.ok ? void 0 : "Report was sent; AskExe can
|
|
232
|
+
detail: res.ok ? "resolved wontfix" : `${res.status} ${await res.text()}`,
|
|
233
|
+
next: res.ok ? void 0 : "Report was sent; AskExe can resolve the smoke report manually."
|
|
228
234
|
};
|
|
229
235
|
} catch (err) {
|
|
230
236
|
return {
|
|
@@ -4,17 +4,17 @@ import {
|
|
|
4
4
|
resolveExeSession,
|
|
5
5
|
sendIntercom,
|
|
6
6
|
strictSessionScopeFilter
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-Y4AYNLXU.js";
|
|
8
8
|
import {
|
|
9
9
|
parseMessage,
|
|
10
10
|
serializeMessage
|
|
11
11
|
} from "./chunk-QAEWWYHL.js";
|
|
12
12
|
import {
|
|
13
13
|
recordOrchestrationEventBestEffort
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-BFL3UB77.js";
|
|
15
15
|
import {
|
|
16
16
|
getClient
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-OBESOWFJ.js";
|
|
18
18
|
|
|
19
19
|
// src/lib/messaging.ts
|
|
20
20
|
import crypto from "crypto";
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getAgentLivenessReport
|
|
3
|
+
} from "./chunk-PHUHIVD5.js";
|
|
4
|
+
import {
|
|
5
|
+
isValidSessionScope
|
|
6
|
+
} from "./chunk-BTSWFMEH.js";
|
|
7
|
+
import {
|
|
8
|
+
leaseExpiryIso,
|
|
9
|
+
leaseNowIso
|
|
10
|
+
} from "./chunk-E23LNUWJ.js";
|
|
11
|
+
import {
|
|
12
|
+
getClient
|
|
13
|
+
} from "./chunk-OBESOWFJ.js";
|
|
14
|
+
|
|
15
|
+
// src/lib/work-claims.ts
|
|
16
|
+
var CLAIM_TTL_MINUTES = 90;
|
|
17
|
+
var CLAIM_GRACE_MINUTES = 30;
|
|
18
|
+
var MAX_CLAIM_AGE_HOURS = 24;
|
|
19
|
+
var UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
|
|
20
|
+
var SHORT_ID_RE = /^[0-9a-f]{8}$/;
|
|
21
|
+
function normalizeWorkRef(raw) {
|
|
22
|
+
const v = raw.trim().toLowerCase();
|
|
23
|
+
if (UUID_RE.test(v)) return v.slice(0, 8);
|
|
24
|
+
if (SHORT_ID_RE.test(v)) return v;
|
|
25
|
+
return v.replace(/\s+/g, " ");
|
|
26
|
+
}
|
|
27
|
+
function normalizePathTarget(raw, repoRoot) {
|
|
28
|
+
let v = raw.trim().replace(/\\/g, "/");
|
|
29
|
+
if (repoRoot) {
|
|
30
|
+
const root = repoRoot.replace(/\\/g, "/").replace(/\/+$/, "");
|
|
31
|
+
if (v.startsWith(root + "/")) v = v.slice(root.length + 1);
|
|
32
|
+
}
|
|
33
|
+
v = v.replace(/^\.\//, "").replace(/^\/+/, (m) => repoRoot ? "" : m);
|
|
34
|
+
return v;
|
|
35
|
+
}
|
|
36
|
+
function normalizeTarget(target, opts = {}) {
|
|
37
|
+
if (target.kind === "path") {
|
|
38
|
+
const rel = normalizePathTarget(target.value, opts.repoRoot);
|
|
39
|
+
const project = (opts.project ?? "").trim();
|
|
40
|
+
const key = project ? `${project}/${rel}` : rel;
|
|
41
|
+
return { kind: "path", key, label: project ? `${project}/${rel}` : rel };
|
|
42
|
+
}
|
|
43
|
+
return { kind: "work_ref", key: normalizeWorkRef(target.value), label: target.value.trim() };
|
|
44
|
+
}
|
|
45
|
+
function extractWorkRefCandidates(text) {
|
|
46
|
+
if (!text) return [];
|
|
47
|
+
const out = /* @__PURE__ */ new Set();
|
|
48
|
+
for (const m of text.toLowerCase().matchAll(/\b[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}\b/g)) {
|
|
49
|
+
out.add(m[0].slice(0, 8));
|
|
50
|
+
}
|
|
51
|
+
for (const m of text.toLowerCase().matchAll(/\b[0-9a-f]{8}\b/g)) {
|
|
52
|
+
out.add(m[0]);
|
|
53
|
+
}
|
|
54
|
+
return [...out];
|
|
55
|
+
}
|
|
56
|
+
function rootScope(sessionName) {
|
|
57
|
+
const raw = (sessionName ?? "").trim();
|
|
58
|
+
if (!raw) return "";
|
|
59
|
+
const lastDash = raw.lastIndexOf("-");
|
|
60
|
+
return lastDash >= 0 ? raw.slice(lastDash + 1) : raw;
|
|
61
|
+
}
|
|
62
|
+
function liveSessionScopes() {
|
|
63
|
+
const live = /* @__PURE__ */ new Set();
|
|
64
|
+
try {
|
|
65
|
+
for (const r of getAgentLivenessReport()) {
|
|
66
|
+
if (r.status === "dead") continue;
|
|
67
|
+
const root = rootScope(r.sessionName);
|
|
68
|
+
if (root) live.add(root);
|
|
69
|
+
}
|
|
70
|
+
} catch {
|
|
71
|
+
}
|
|
72
|
+
return live;
|
|
73
|
+
}
|
|
74
|
+
var SELECT_COLS = "id, claim_group, target_kind, target_key, target_label, task_id, holder_session, holder_agent, note, claimed_at, lease_expires_at, updated_at";
|
|
75
|
+
function toRow(r) {
|
|
76
|
+
return {
|
|
77
|
+
id: String(r.id),
|
|
78
|
+
claimGroup: String(r.claim_group),
|
|
79
|
+
targetKind: String(r.target_kind),
|
|
80
|
+
targetKey: String(r.target_key),
|
|
81
|
+
targetLabel: r.target_label == null ? String(r.target_key) : String(r.target_label),
|
|
82
|
+
taskId: r.task_id == null ? null : String(r.task_id),
|
|
83
|
+
holderSession: String(r.holder_session),
|
|
84
|
+
holderAgent: r.holder_agent == null ? null : String(r.holder_agent),
|
|
85
|
+
note: r.note == null ? null : String(r.note),
|
|
86
|
+
claimedAt: String(r.claimed_at),
|
|
87
|
+
leaseExpiresAt: String(r.lease_expires_at),
|
|
88
|
+
updatedAt: String(r.updated_at)
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function isUniqueViolation(err) {
|
|
92
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
93
|
+
return /UNIQUE constraint failed|SQLITE_CONSTRAINT_UNIQUE|duplicate key value/i.test(msg);
|
|
94
|
+
}
|
|
95
|
+
async function listClaims() {
|
|
96
|
+
const client = await getClient();
|
|
97
|
+
const res = await client.execute({
|
|
98
|
+
sql: `SELECT ${SELECT_COLS} FROM work_claims ORDER BY claimed_at DESC`,
|
|
99
|
+
args: []
|
|
100
|
+
});
|
|
101
|
+
return res.rows.map(toRow);
|
|
102
|
+
}
|
|
103
|
+
async function findConflicts(targets, holderSession) {
|
|
104
|
+
if (targets.length === 0) return [];
|
|
105
|
+
const client = await getClient();
|
|
106
|
+
const placeholders = targets.map(() => "(target_kind = ? AND target_key = ?)").join(" OR ");
|
|
107
|
+
const args = [];
|
|
108
|
+
for (const t of targets) args.push(t.kind, t.key);
|
|
109
|
+
const res = await client.execute({
|
|
110
|
+
sql: `SELECT ${SELECT_COLS} FROM work_claims WHERE (${placeholders})`,
|
|
111
|
+
args
|
|
112
|
+
});
|
|
113
|
+
const nowMs = Date.now();
|
|
114
|
+
const live = liveSessionScopes();
|
|
115
|
+
return res.rows.map(toRow).filter((r) => r.holderSession !== holderSession).filter((r) => {
|
|
116
|
+
const expiresMs = new Date(r.leaseExpiresAt).getTime();
|
|
117
|
+
if (Number.isNaN(expiresMs)) return true;
|
|
118
|
+
if (expiresMs >= nowMs) return true;
|
|
119
|
+
const ageMs = nowMs - new Date(r.claimedAt).getTime();
|
|
120
|
+
return live.has(r.holderSession) && ageMs < MAX_CLAIM_AGE_HOURS * 36e5;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
async function findConflictsInText(text, holderSession) {
|
|
124
|
+
const candidates = extractWorkRefCandidates(text);
|
|
125
|
+
if (candidates.length === 0) return [];
|
|
126
|
+
return findConflicts(
|
|
127
|
+
candidates.map((c) => ({ kind: "work_ref", key: c, label: c })),
|
|
128
|
+
holderSession
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
async function acquireClaim(input) {
|
|
132
|
+
const holderSession = (input.holderSession ?? "").trim();
|
|
133
|
+
if (!isValidSessionScope(holderSession)) {
|
|
134
|
+
throw new Error(
|
|
135
|
+
`work-claims: refusing to claim for an invalid session scope "${holderSession}". A claim must name the owning coordinator session (e.g. exe2), not an agent or free text.`
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
if (input.force && !(input.reason ?? "").trim()) {
|
|
139
|
+
throw new Error(
|
|
140
|
+
"work-claims: force override requires a reason. Overriding another session's claim is a deliberate act and is recorded with who and why."
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
const targets = input.targets.map((t) => normalizeTarget(t, { repoRoot: input.repoRoot, project: input.project })).filter((t) => t.key.length > 0);
|
|
144
|
+
if (targets.length === 0) {
|
|
145
|
+
throw new Error("work-claims: no valid targets to claim.");
|
|
146
|
+
}
|
|
147
|
+
const seen = /* @__PURE__ */ new Set();
|
|
148
|
+
const unique = targets.filter((t) => {
|
|
149
|
+
const k = `${t.kind}\0${t.key}`;
|
|
150
|
+
if (seen.has(k)) return false;
|
|
151
|
+
seen.add(k);
|
|
152
|
+
return true;
|
|
153
|
+
});
|
|
154
|
+
const client = await getClient();
|
|
155
|
+
const now = leaseNowIso();
|
|
156
|
+
const nowMs = Date.parse(now);
|
|
157
|
+
const expiry = leaseExpiryIso(now, input.ttlMinutes ?? CLAIM_TTL_MINUTES);
|
|
158
|
+
const graceExpiry = leaseExpiryIso(now, CLAIM_GRACE_MINUTES);
|
|
159
|
+
const minClaimedAt = new Date(nowMs - MAX_CLAIM_AGE_HOURS * 36e5).toISOString();
|
|
160
|
+
const live = [...liveSessionScopes()];
|
|
161
|
+
const stmts = [];
|
|
162
|
+
if (live.length > 0) {
|
|
163
|
+
stmts.push({
|
|
164
|
+
sql: `UPDATE work_claims SET lease_expires_at = ?, updated_at = ? WHERE lease_expires_at < ? AND claimed_at > ? AND holder_session IN (${live.map(() => "?").join(",")})`,
|
|
165
|
+
args: [graceExpiry, now, now, minClaimedAt, ...live]
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
stmts.push({
|
|
169
|
+
sql: `DELETE FROM work_claims WHERE lease_expires_at < ?`,
|
|
170
|
+
args: [now]
|
|
171
|
+
});
|
|
172
|
+
for (const t of unique) {
|
|
173
|
+
if (input.force) {
|
|
174
|
+
stmts.push({
|
|
175
|
+
sql: `DELETE FROM work_claims WHERE target_kind = ? AND target_key = ?`,
|
|
176
|
+
args: [t.kind, t.key]
|
|
177
|
+
});
|
|
178
|
+
} else {
|
|
179
|
+
stmts.push({
|
|
180
|
+
sql: `DELETE FROM work_claims WHERE target_kind = ? AND target_key = ? AND holder_session = ?`,
|
|
181
|
+
args: [t.kind, t.key, holderSession]
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const claimGroup = crypto.randomUUID();
|
|
186
|
+
for (const t of unique) {
|
|
187
|
+
stmts.push({
|
|
188
|
+
sql: `INSERT INTO work_claims (id, claim_group, target_kind, target_key, target_label, task_id, holder_session, holder_agent, note, claimed_at, lease_expires_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
189
|
+
args: [
|
|
190
|
+
crypto.randomUUID(),
|
|
191
|
+
claimGroup,
|
|
192
|
+
t.kind,
|
|
193
|
+
t.key,
|
|
194
|
+
t.label,
|
|
195
|
+
input.taskId ?? null,
|
|
196
|
+
holderSession,
|
|
197
|
+
input.holderAgent ?? null,
|
|
198
|
+
input.note ?? null,
|
|
199
|
+
now,
|
|
200
|
+
expiry,
|
|
201
|
+
now
|
|
202
|
+
]
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
let displaced = [];
|
|
206
|
+
if (input.force) {
|
|
207
|
+
try {
|
|
208
|
+
displaced = await findConflicts(unique, holderSession);
|
|
209
|
+
} catch {
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
try {
|
|
213
|
+
await client.batch(stmts, "write");
|
|
214
|
+
} catch (err) {
|
|
215
|
+
if (!isUniqueViolation(err)) throw err;
|
|
216
|
+
if (live.length > 0) {
|
|
217
|
+
try {
|
|
218
|
+
await client.execute({
|
|
219
|
+
sql: `UPDATE work_claims SET lease_expires_at = ?, updated_at = ? WHERE lease_expires_at < ? AND claimed_at > ? AND holder_session IN (${live.map(() => "?").join(",")})`,
|
|
220
|
+
args: [graceExpiry, now, now, minClaimedAt, ...live]
|
|
221
|
+
});
|
|
222
|
+
} catch {
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
let conflicts = [];
|
|
226
|
+
try {
|
|
227
|
+
conflicts = await findConflicts(unique, holderSession);
|
|
228
|
+
} catch {
|
|
229
|
+
}
|
|
230
|
+
return { ok: false, claimGroup: null, claimed: [], conflicts };
|
|
231
|
+
}
|
|
232
|
+
await recordClaimEvent(
|
|
233
|
+
input.force ? "claim.override" : "claim.acquired",
|
|
234
|
+
holderSession,
|
|
235
|
+
input.holderAgent ?? null,
|
|
236
|
+
{
|
|
237
|
+
claimGroup,
|
|
238
|
+
targets: unique.map((t) => `${t.kind}:${t.key}`),
|
|
239
|
+
note: input.note ?? null,
|
|
240
|
+
reason: input.reason ?? null,
|
|
241
|
+
displaced: displaced.map((d) => ({
|
|
242
|
+
target: `${d.targetKind}:${d.targetKey}`,
|
|
243
|
+
holderSession: d.holderSession,
|
|
244
|
+
holderAgent: d.holderAgent,
|
|
245
|
+
claimedAt: d.claimedAt
|
|
246
|
+
}))
|
|
247
|
+
},
|
|
248
|
+
input.force ? "warn" : "info"
|
|
249
|
+
);
|
|
250
|
+
return { ok: true, claimGroup, claimed: unique, conflicts: [] };
|
|
251
|
+
}
|
|
252
|
+
async function releaseClaim(input) {
|
|
253
|
+
const holderSession = (input.holderSession ?? "").trim();
|
|
254
|
+
if (input.force && !(input.reason ?? "").trim()) {
|
|
255
|
+
throw new Error("work-claims: force release requires a reason.");
|
|
256
|
+
}
|
|
257
|
+
const client = await getClient();
|
|
258
|
+
let released = 0;
|
|
259
|
+
if (!input.claimGroup && !input.taskId && (input.targets ?? []).length === 0) {
|
|
260
|
+
return { released: 0 };
|
|
261
|
+
}
|
|
262
|
+
if (input.claimGroup) {
|
|
263
|
+
const sql = input.force ? `DELETE FROM work_claims WHERE claim_group = ?` : `DELETE FROM work_claims WHERE claim_group = ? AND holder_session = ?`;
|
|
264
|
+
const args = input.force ? [input.claimGroup] : [input.claimGroup, holderSession];
|
|
265
|
+
const res = await client.execute({ sql, args });
|
|
266
|
+
released += Number(res.rowsAffected ?? 0);
|
|
267
|
+
}
|
|
268
|
+
if (input.taskId) {
|
|
269
|
+
const sql = input.force ? `DELETE FROM work_claims WHERE task_id = ?` : `DELETE FROM work_claims WHERE task_id = ? AND holder_session = ?`;
|
|
270
|
+
const args = input.force ? [input.taskId] : [input.taskId, holderSession];
|
|
271
|
+
const res = await client.execute({ sql, args });
|
|
272
|
+
released += Number(res.rowsAffected ?? 0);
|
|
273
|
+
}
|
|
274
|
+
for (const raw of input.targets ?? []) {
|
|
275
|
+
const t = normalizeTarget(raw, { repoRoot: input.repoRoot, project: input.project });
|
|
276
|
+
if (!t.key) continue;
|
|
277
|
+
const sql = input.force ? `DELETE FROM work_claims WHERE target_kind = ? AND target_key = ?` : `DELETE FROM work_claims WHERE target_kind = ? AND target_key = ? AND holder_session = ?`;
|
|
278
|
+
const args = input.force ? [t.kind, t.key] : [t.kind, t.key, holderSession];
|
|
279
|
+
const res = await client.execute({ sql, args });
|
|
280
|
+
released += Number(res.rowsAffected ?? 0);
|
|
281
|
+
}
|
|
282
|
+
if (released > 0) {
|
|
283
|
+
await recordClaimEvent(
|
|
284
|
+
input.force ? "claim.force_released" : "claim.released",
|
|
285
|
+
holderSession,
|
|
286
|
+
null,
|
|
287
|
+
{
|
|
288
|
+
claimGroup: input.claimGroup ?? null,
|
|
289
|
+
taskId: input.taskId ?? null,
|
|
290
|
+
released,
|
|
291
|
+
reason: input.reason ?? null
|
|
292
|
+
},
|
|
293
|
+
input.force ? "warn" : "info"
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
return { released };
|
|
297
|
+
}
|
|
298
|
+
async function heartbeatClaims(holderSession, ttlMinutes = CLAIM_TTL_MINUTES) {
|
|
299
|
+
const client = await getClient();
|
|
300
|
+
const now = leaseNowIso();
|
|
301
|
+
const res = await client.execute({
|
|
302
|
+
sql: `UPDATE work_claims SET lease_expires_at = ?, updated_at = ? WHERE holder_session = ?`,
|
|
303
|
+
args: [leaseExpiryIso(now, ttlMinutes), now, holderSession]
|
|
304
|
+
});
|
|
305
|
+
return { renewed: Number(res.rowsAffected ?? 0) };
|
|
306
|
+
}
|
|
307
|
+
async function recordClaimEvent(eventType, sessionScope, agentId, payload, severity) {
|
|
308
|
+
try {
|
|
309
|
+
const { recordOrchestrationEventBestEffort } = await import("./orchestration-events-VBGCIQSS.js");
|
|
310
|
+
recordOrchestrationEventBestEffort({
|
|
311
|
+
eventType,
|
|
312
|
+
source: "work-claims",
|
|
313
|
+
severity,
|
|
314
|
+
sessionScope: sessionScope || null,
|
|
315
|
+
agentId: agentId ?? void 0,
|
|
316
|
+
payload
|
|
317
|
+
});
|
|
318
|
+
} catch {
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
async function resolveHolderSession() {
|
|
322
|
+
let raw = "";
|
|
323
|
+
try {
|
|
324
|
+
const { getAgentContext } = await import("./agent-context-AZTTMUHP.js");
|
|
325
|
+
raw = getAgentContext()?.sessionHint ?? "";
|
|
326
|
+
} catch {
|
|
327
|
+
}
|
|
328
|
+
if (!raw) raw = process.env.EXE_SESSION_NAME || process.env.EXE_SESSION || "";
|
|
329
|
+
const root = rootScope(raw);
|
|
330
|
+
return isValidSessionScope(root) ? root : "";
|
|
331
|
+
}
|
|
332
|
+
function describeConflict(row, nowMs = Date.now()) {
|
|
333
|
+
const ageMin = Math.max(0, Math.round((nowMs - new Date(row.claimedAt).getTime()) / 6e4));
|
|
334
|
+
const who = row.holderAgent ? `${row.holderSession} (${row.holderAgent})` : row.holderSession;
|
|
335
|
+
const note = row.note ? ` \u2014 "${row.note}"` : "";
|
|
336
|
+
return `${row.targetKind}:${row.targetLabel} held by ${who}, ${ageMin}m ago${note}`;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
export {
|
|
340
|
+
CLAIM_TTL_MINUTES,
|
|
341
|
+
CLAIM_GRACE_MINUTES,
|
|
342
|
+
MAX_CLAIM_AGE_HOURS,
|
|
343
|
+
normalizeWorkRef,
|
|
344
|
+
normalizePathTarget,
|
|
345
|
+
normalizeTarget,
|
|
346
|
+
extractWorkRefCandidates,
|
|
347
|
+
liveSessionScopes,
|
|
348
|
+
listClaims,
|
|
349
|
+
findConflicts,
|
|
350
|
+
findConflictsInText,
|
|
351
|
+
acquireClaim,
|
|
352
|
+
releaseClaim,
|
|
353
|
+
heartbeatClaims,
|
|
354
|
+
resolveHolderSession,
|
|
355
|
+
describeConflict
|
|
356
|
+
};
|