@askexenow/exe-os 0.9.365 → 0.9.367
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/dist/.dist-verified.json +3 -3
- package/dist/{active-agent-C6DPH43L.js → active-agent-R6Q7UEUD.js} +3 -3
- package/dist/{active-agent-MGF7J3HB.js → active-agent-V3CUDNED.js} +3 -3
- package/dist/{agent-defs-generator-X7TVMPVB.js → agent-defs-generator-MLPRGY75.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-5FMQWGDZ.js} +1 -1
- package/dist/{backfill-metadata-ANCJA6LA.js → backfill-metadata-YXUMCKRV.js} +5 -5
- package/dist/{backup-verify-F7BHVEF7.js → backup-verify-GYHKAX7K.js} +1 -1
- package/dist/{behavior-injection-XQ4B7DCF.js → behavior-injection-7VGYY2KO.js} +7 -7
- package/dist/{behaviors-R2IE3PEN.js → behaviors-O6HKTSOF.js} +6 -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 +14 -13
- package/dist/bin/cli.js +20 -20
- package/dist/bin/deferred-daemon-restart.js +78 -75
- package/dist/bin/exe-agent-config.js +2 -2
- package/dist/bin/exe-agent.js +251 -13
- package/dist/bin/exe-assign.js +6 -6
- package/dist/bin/exe-boot.js +29 -27
- 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 +15 -14
- package/dist/bin/exe-doctor.js +5 -5
- package/dist/bin/exe-export-behaviors.js +8 -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 +17 -16
- package/dist/bin/exe-kill.js +18 -17
- package/dist/bin/exe-launch-agent.js +23 -22
- 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 +15 -14
- package/dist/bin/exe-pending-notifications.js +14 -13
- package/dist/bin/exe-pending-reviews.js +14 -13
- package/dist/bin/exe-rename.js +4 -4
- package/dist/bin/exe-review.js +17 -16
- package/dist/bin/exe-search.js +6 -6
- package/dist/bin/exe-session-cleanup.js +18 -17
- package/dist/bin/exe-settings.js +10 -10
- package/dist/bin/exe-start-codex.js +21 -13
- package/dist/bin/exe-start-opencode.js +9 -9
- package/dist/bin/exe-status.js +16 -15
- package/dist/bin/exe-support.js +3 -3
- package/dist/bin/exe-team.js +4 -4
- package/dist/bin/git-sweep.js +23 -14
- package/dist/bin/graph-backfill.js +6 -6
- package/dist/bin/graph-export.js +6 -6
- package/dist/bin/import-history.js +9 -9
- package/dist/bin/install.js +80 -77
- 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 +2 -2
- package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
- package/dist/bin/reconcile-backlog.js +2 -2
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/scan-tasks.js +14 -13
- package/dist/bin/setup.js +1 -1
- package/dist/bin/shard-migrate.js +5 -5
- package/dist/bin/stack-update.js +34 -6
- package/dist/bin/verify-stack.js +6 -1
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{boot-generation-X45BSVZY.js → boot-generation-EZ2Y74IG.js} +3 -3
- package/dist/{boot-review-sections-OBVRXXSF.js → boot-review-sections-7CNQTAYR.js} +13 -12
- package/dist/build-manifest.json +865 -835
- package/dist/{capability-cards-57FURUMR.js → capability-cards-ZTFMK4VJ.js} +2 -2
- package/dist/{capacity-monitor-QEL62JDO.js → capacity-monitor-B2XU4YHP.js} +15 -14
- package/dist/{catchup-brief-PMXTCASA.js → catchup-brief-3BEOL7EV.js} +18 -17
- package/dist/{chunk-J6I7X272.js → chunk-267QB6VB.js} +1 -1
- package/dist/{chunk-IXEFO6HD.js → chunk-2IZH6W73.js} +3 -3
- package/dist/{chunk-6GQYPJPG.js → chunk-4DJDC4Y2.js} +8 -8
- package/dist/{chunk-LZKYVMBY.js → chunk-4WOOCTON.js} +2 -2
- package/dist/{chunk-RHX6MNWY.js → chunk-52CFP2AV.js} +1 -1
- package/dist/{chunk-EWZYFG5Q.js → chunk-53LCVVX5.js} +2 -2
- package/dist/{chunk-52TIQJEQ.js → chunk-5CH6XKVC.js} +1 -1
- package/dist/{chunk-22YQBVMO.js → chunk-66BFQOWR.js} +4 -4
- package/dist/{chunk-ESTR7QUP.js → chunk-6MCUXRIP.js} +1 -1
- package/dist/{chunk-LHOKWZKL.js → chunk-6NJURKRG.js} +1 -1
- package/dist/{chunk-VGE6IHZB.js → chunk-7W5LCREK.js} +80 -12
- package/dist/{chunk-FXPAUDCZ.js → chunk-7W6FDHHY.js} +1 -1
- package/dist/{chunk-E6ORBQHP.js → chunk-AAMGHW5W.js} +1 -0
- package/dist/{chunk-EMZHB767.js → chunk-AE3PYLLS.js} +9 -9
- package/dist/{chunk-JUOZLXLH.js → chunk-AEVE654G.js} +1 -1
- package/dist/{chunk-PPGPCWRC.js → chunk-ALKYXAMB.js} +4 -4
- package/dist/{chunk-MPQXQ5IE.js → chunk-ALYI3P5D.js} +1 -1
- package/dist/{chunk-4QKKLK3C.js → chunk-BQYQES2Z.js} +10 -10
- package/dist/{chunk-WYLFDSIE.js → chunk-BTMX2D4X.js} +5 -5
- package/dist/chunk-BTSWFMEH.js +14 -0
- package/dist/{chunk-EKVTRI3N.js → chunk-BY3V5CLX.js} +5 -4
- package/dist/{chunk-ZSZPMUNX.js → chunk-CKKLSY7B.js} +126 -7
- package/dist/{chunk-6Q263OZE.js → chunk-CTPG4KYZ.js} +1 -1
- package/dist/{chunk-C3UAQ3JG.js → chunk-CX4MVEM3.js} +1 -1
- package/dist/{chunk-DEFSN2FQ.js → chunk-CYNL3ZFD.js} +3 -3
- package/dist/{chunk-RD4E5G3B.js → chunk-DTTISDTI.js} +1 -1
- package/dist/{chunk-ZRKEUCUZ.js → chunk-DXCTHNEF.js} +12 -10
- package/dist/{chunk-KSVLBATT.js → chunk-E5QQZDQN.js} +53 -0
- package/dist/{chunk-DQ5KHWFD.js → chunk-EDZ5URGR.js} +1 -1
- package/dist/{chunk-ZDUO6QBH.js → chunk-F3PIHVVY.js} +1 -1
- package/dist/{chunk-EJ4522YM.js → chunk-FSIAGX55.js} +1 -1
- package/dist/{chunk-RVWALVDT.js → chunk-GUOMZ3JM.js} +2 -2
- package/dist/{chunk-BRLS5OLZ.js → chunk-HSBKV5LB.js} +35 -4
- package/dist/{chunk-QFIVK3G5.js → chunk-IIVFXD6P.js} +1 -1
- package/dist/{chunk-SBAU735L.js → chunk-J6VQ7HYV.js} +4 -4
- package/dist/{chunk-EWCEUO65.js → chunk-JFOZHVNO.js} +1 -1
- package/dist/{chunk-T6S45OLV.js → chunk-JJRZE2LD.js} +1 -1
- package/dist/{chunk-DYWGIPVP.js → chunk-JOKKIFRN.js} +3 -3
- package/dist/{chunk-X6A2VWVJ.js → chunk-K2OFS57E.js} +2 -2
- package/dist/{chunk-NV6A5HDN.js → chunk-KDD26FUY.js} +1 -1
- package/dist/{chunk-L3TB7CC3.js → chunk-KM6XSFHP.js} +12 -2
- package/dist/{chunk-CKG6CVKI.js → chunk-LIZ3QQGK.js} +1 -1
- package/dist/{chunk-OFGFRT5J.js → chunk-LW5WRSDD.js} +1 -1
- package/dist/{chunk-JITNFE4W.js → chunk-MLPPG2OG.js} +1 -1
- package/dist/{chunk-3JNVB5LG.js → chunk-MQ3N4KZY.js} +1 -1
- package/dist/{chunk-2FYIMTQE.js → chunk-N3JLNMPF.js} +2 -2
- package/dist/{chunk-RZIKSE6N.js → chunk-NPND34FS.js} +4 -4
- package/dist/{chunk-DWAQOEXL.js → chunk-O3F5P6Z5.js} +2 -2
- package/dist/{chunk-M7EES2KM.js → chunk-OADOH45L.js} +3 -3
- package/dist/{chunk-MZJBUAC3.js → chunk-OISZ2I4X.js} +4 -4
- package/dist/{chunk-R7RM766N.js → chunk-OPS7KUFV.js} +3 -3
- package/dist/{chunk-JNVQGLPX.js → chunk-P5XER5QY.js} +3 -3
- package/dist/{chunk-J4U5Z7VX.js → chunk-P76VYS6V.js} +4 -4
- package/dist/{chunk-KRUYQFSH.js → chunk-PFOJX6CR.js} +5 -5
- package/dist/chunk-PFR6EOUY.js +356 -0
- package/dist/{agent-heartbeat-I5UPGXAU.js → chunk-PHUHIVD5.js} +4 -5
- package/dist/{chunk-45EQTS7B.js → chunk-PQ6NRLKL.js} +1 -1
- package/dist/{chunk-5CBGH6RA.js → chunk-PR3AHVFW.js} +3 -3
- package/dist/{chunk-ODBRU6BF.js → chunk-PS4NA7PM.js} +1399 -943
- package/dist/{chunk-CPILYY2K.js → chunk-PS6VPW64.js} +1 -1
- package/dist/{chunk-YMJOLEPE.js → chunk-PWCZFIQH.js} +4 -4
- package/dist/{chunk-POPRJKAY.js → chunk-QS6HI4B6.js} +6 -0
- package/dist/{chunk-ZNEBZCZR.js → chunk-QWDZNQXA.js} +1 -1
- package/dist/{chunk-ORNCMRIX.js → chunk-QX33D4CH.js} +25 -31
- package/dist/{chunk-BATQKSLI.js → chunk-R3H3WW7H.js} +2 -2
- package/dist/chunk-R4AROSYI.js +496 -0
- package/dist/{chunk-F2S3M5MB.js → chunk-SFKIZYKK.js} +2 -2
- package/dist/{chunk-IIZITKBV.js → chunk-TCR7NBHD.js} +4 -4
- package/dist/{chunk-7C4FUNVO.js → chunk-TJSTWACD.js} +2 -2
- package/dist/chunk-TX3Q2GIL.js +97 -0
- package/dist/{chunk-2ESB5SDP.js → chunk-TZFOWWPM.js} +1 -1
- package/dist/{chunk-WR75WUEP.js → chunk-UI3K73LD.js} +1 -1
- package/dist/{chunk-DJK45U7B.js → chunk-URHJDUWO.js} +1 -1
- package/dist/{chunk-SP37DONS.js → chunk-V3ISR2QT.js} +1 -1
- package/dist/{chunk-EPNWEOOE.js → chunk-VY3QUSWS.js} +6 -6
- package/dist/{chunk-O2MEBF23.js → chunk-WBKIU6UJ.js} +2 -2
- package/dist/{chunk-TO6TB75E.js → chunk-WCDIDSLR.js} +2 -2
- package/dist/{chunk-EVPBYX2Z.js → chunk-WSLFGJBA.js} +1 -1
- package/dist/{chunk-OPNROU5B.js → chunk-WYVBWDFY.js} +1 -1
- package/dist/{chunk-JYFYIGYK.js → chunk-XA4EU3CW.js} +1 -1
- package/dist/{chunk-ZEKCHV43.js → chunk-XAMLDTRA.js} +4 -4
- package/dist/{chunk-EHHMNKOA.js → chunk-XKFMNAJ7.js} +1 -1
- package/dist/{chunk-5KLQCGI5.js → chunk-XKZD5FGK.js} +55 -0
- package/dist/{chunk-U373MEF5.js → chunk-XSXZVKJ7.js} +3 -3
- package/dist/{chunk-IM2I7OOS.js → chunk-XTEKGO44.js} +1 -1
- package/dist/{chunk-Q7BU5Q6I.js → chunk-XUGOVOID.js} +3 -3
- package/dist/{chunk-BEHLIRRJ.js → chunk-XVRQZCTS.js} +1 -1
- package/dist/{chunk-P47MPWNU.js → chunk-Y4JVM3SI.js} +1 -1
- package/dist/{chunk-NO3M2AFM.js → chunk-Y7OK5PJE.js} +1 -1
- package/dist/{chunk-ANPE3TT3.js → chunk-YA4PM3MV.js} +3 -3
- package/dist/{chunk-EPDNWY5P.js → chunk-YYLVHUYZ.js} +1 -1
- package/dist/{chunk-QYJANQWC.js → chunk-Z5Z3MYUW.js} +2 -2
- package/dist/{chunk-MXEIZUXG.js → chunk-ZSHLY5BS.js} +1 -1
- package/dist/{chunk-AGQAGOQN.js → chunk-ZZ3JQM5I.js} +9 -9
- package/dist/{cleanup-graph-garbage-CAA625RJ.js → cleanup-graph-garbage-XDIX3HLN.js} +7 -7
- package/dist/{cloud-sync-command-DBB7WRHL.js → cloud-sync-command-VPYE4FIH.js} +2 -2
- package/dist/{cloud-sync-db-init-V7IB23W5.js → cloud-sync-db-init-NSDBTFGI.js} +1 -1
- package/dist/{cloud-sync-shutdown-2D3B73CJ.js → cloud-sync-shutdown-6OUYTG4T.js} +2 -2
- package/dist/{co-activation-JVN7EBS6.js → co-activation-EAAKGGZH.js} +2 -2
- package/dist/{co-occurrence-526PTFGT.js → co-occurrence-OFVF55RX.js} +5 -5
- package/dist/codex-consolidation-PPXNBXCV.js +96 -0
- package/dist/{conversation-entity-extractor-JO56DB2E.js → conversation-entity-extractor-ZR5GFKAI.js} +3 -3
- package/dist/{crdt-sync-LIJLZKFE.js → crdt-sync-FGH4SBFW.js} +1 -1
- package/dist/{crm-webhook-55F7Y6D2.js → crm-webhook-PJATR2DC.js} +2 -2
- package/dist/{cto-delegation-gate-QIYV4KFO.js → cto-delegation-gate-PO4LSSQ4.js} +13 -12
- package/dist/{daemon-orchestration-Q3GJA2JJ.js → daemon-orchestration-IJFZFQUX.js} +18 -17
- package/dist/{doc-graph-extractor-P46R4QME.js → doc-graph-extractor-CAYUAM5A.js} +5 -5
- package/dist/{documents-7KFEREWO.js → documents-W2G477QE.js} +6 -6
- package/dist/{dreaming-JMUXBAPU.js → dreaming-FVXSIIWV.js} +17 -16
- package/dist/{employee-boot-brief-HN63D2BY.js → employee-boot-brief-OYMSHFHA.js} +19 -18
- package/dist/{exe-drift-7J7GX7DP.js → exe-drift-67RGJOBX.js} +3 -3
- package/dist/{exe-export-KJ7B2OBU.js → exe-export-SGYX6XZG.js} +7 -7
- package/dist/{exe-import-HPZDWKGE.js → exe-import-UABVA5N3.js} +7 -7
- package/dist/{exe-key-2PREP464.js → exe-key-XNYDCVFE.js} +78 -75
- package/dist/{exe-org-VEIISATF.js → exe-org-XJVSU5HN.js} +8 -8
- package/dist/{exe-snapshot-JXQFLUKA.js → exe-snapshot-YXOGYZUX.js} +18 -17
- package/dist/{fast-db-init-SCXJXOYX.js → fast-db-init-GDFJY5UH.js} +1 -1
- package/dist/{founder-context-U2SZPLYV.js → founder-context-KUXSNXKS.js} +2 -2
- package/dist/gateway/index.js +8 -8
- package/dist/{git-staleness-S4NDR7NX.js → git-staleness-NN6RWNLW.js} +2 -2
- package/dist/{global-procedures-ZOFTOXIR.js → global-procedures-XDNA3TNA.js} +3 -3
- package/dist/{graph-auto-extract-CLVTSUSB.js → graph-auto-extract-KTOR45V4.js} +5 -5
- package/dist/{graph-rag-LSJLWGXV.js → graph-rag-L5NV5YWD.js} +3 -3
- package/dist/{hook-integrity-SGTKBL6W.js → hook-integrity-X3YAVGUW.js} +1 -1
- package/dist/{hook-prefetch-BDSLB6F4.js → hook-prefetch-WE4MIXBM.js} +14 -13
- package/dist/hooks/bug-report-worker.js +18 -17
- package/dist/hooks/codex-stop-task-finalizer.js +19 -18
- package/dist/hooks/commit-complete.js +33 -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 +17 -16
- package/dist/hooks/pre-tool-use.js +68 -23
- package/dist/hooks/prompt-submit.js +30 -29
- package/dist/hooks/session-end.js +113 -99
- package/dist/hooks/session-start.js +16 -16
- package/dist/hooks/stop.js +82 -19
- package/dist/hooks/subagent-stop.js +18 -17
- package/dist/hooks/summary-worker.js +22 -21
- package/dist/index.js +24 -23
- package/dist/{installer-RC2JCKSE.js → installer-EAAYEEEF.js} +6 -6
- package/dist/{installer-KCEM4RCG.js → installer-EPQAOI6M.js} +152 -8
- package/dist/{installer-EA7T3PBD.js → installer-UDRMFY75.js} +6 -6
- package/dist/{intercom-queue-6DZPHHQ2.js → intercom-queue-IBOAVT2I.js} +13 -12
- package/dist/lib/cloud-sync.js +10 -10
- package/dist/lib/consolidation.js +7 -7
- 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/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 +77 -76
- 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 +14 -13
- 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 +15 -14
- package/dist/lib/tmux-routing.js +13 -12
- package/dist/lib/token-spend.js +3 -3
- package/dist/{license-gate-HMSMUIAU.js → license-gate-3TTWJABL.js} +3 -3
- package/dist/{license-sync-FBCMPC4J.js → license-sync-ZC6TPKVV.js} +2 -2
- package/dist/mcp/register-tools.js +77 -74
- package/dist/mcp/server.js +78 -75
- 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 +17 -16
- 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 +17 -16
- package/dist/mcp/tools/send-message.js +16 -15
- package/dist/mcp/tools/update-task.js +16 -15
- package/dist/{mcp-http-config-YKJN52HG.js → mcp-http-config-ROF5EPEF.js} +3 -3
- package/dist/{mcp-session-identity-QLUVYWPR.js → mcp-session-identity-ERU6FEUB.js} +13 -12
- package/dist/{memory-cards-K2OSX4AW.js → memory-cards-3QTXI2SG.js} +5 -5
- package/dist/{memory-graph-extractor-YLTSKLSY.js → memory-graph-extractor-7GAILMYG.js} +6 -6
- package/dist/{memory-poisoning-defense-IPO4ADRL.js → memory-poisoning-defense-TPXSRJTQ.js} +2 -2
- package/dist/{memory-pressure-watchdog-ZI3TH2OF.js → memory-pressure-watchdog-ZSOP6T2F.js} +14 -13
- package/dist/{memory-reflection-ZKVRU3NT.js → memory-reflection-3AI4JBV2.js} +2 -2
- package/dist/{notification-ledger-4REL6M3T.js → notification-ledger-ZU7ZFJJX.js} +16 -14
- package/dist/{notifications-UXJUAP3C.js → notifications-S4GU22GF.js} +13 -12
- package/dist/{orchestration-events-GMRGGBMN.js → orchestration-events-HVG56HJ5.js} +3 -3
- package/dist/{orchestrator-5TV75HDJ.js → orchestrator-UW3Q3WYG.js} +15 -14
- package/dist/{org-brief-session-7AZZEO3F.js → org-brief-session-G36TJBN4.js} +5 -5
- package/dist/{org-consent-policy-XT6UZENB.js → org-consent-policy-RMYVMM3X.js} +1 -1
- package/dist/{org-partner-runtime-WLZAZJIY.js → org-partner-runtime-KXMGEYFW.js} +5 -5
- package/dist/{org-row-visibility-A5XM4MVO.js → org-row-visibility-UI5PGN76.js} +1 -1
- package/dist/{pipeline-router-UEVXDUHR.js → pipeline-router-IODWXDDI.js} +3 -3
- package/dist/{plan-limits-QEP32X4W.js → plan-limits-XMAQVEJZ.js} +5 -5
- package/dist/{projection-worker-GMRC6SBH.js → projection-worker-6LZUCI3B.js} +2 -2
- package/dist/{prospective-memory-QLHSAPSG.js → prospective-memory-G5VK5GCD.js} +2 -2
- package/dist/{push-notifications-GKRPXOGI.js → push-notifications-S2RYRXLF.js} +14 -13
- package/dist/{reranker-GB4VEMUV.js → reranker-EHQTAA3L.js} +1 -1
- package/dist/{retrieval-health-QIBPBGN6.js → retrieval-health-WZ4ICGNF.js} +1 -1
- package/dist/{review-polling-MU47NQ2N.js → review-polling-MAWLRDSP.js} +14 -13
- package/dist/runtime/index.js +18 -17
- package/dist/{session-events-YMQ3VGBJ.js → session-events-BRUIZ5E4.js} +14 -13
- package/dist/{session-kill-telemetry-VGPKE57M.js → session-kill-telemetry-PTZLHT33.js} +14 -13
- package/dist/{session-scope-P46KAHXQ.js → session-scope-G4RVJJGR.js} +13 -12
- package/dist/{setup-wizard-BRNHSJ4U.js → setup-wizard-WFEUB63Z.js} +1 -1
- package/dist/{skill-refinement-NLYDSFEH.js → skill-refinement-2OYPH7WD.js} +3 -3
- package/dist/{stack-promote-NHFTNIM2.js → stack-promote-DLYYQXQI.js} +5 -4
- package/dist/{stack-release-AQVKZUS7.js → stack-release-OPWARLXI.js} +5 -4
- package/dist/{stack-update-LLX5KT7G.js → stack-update-SJ43IEQE.js} +10 -3
- package/dist/{steward-gate-JKHYFAHA.js → steward-gate-V7PBGVFK.js} +3 -3
- package/dist/{subagent-brief-injection-VDVOHDOU.js → subagent-brief-injection-BLCRI2AJ.js} +20 -19
- package/dist/{support-inbox-S6YO5YZU.js → support-inbox-6HOQYFD2.js} +3 -3
- package/dist/{task-enforcement-LXW45H5Z.js → task-enforcement-EF6O2V26.js} +14 -13
- package/dist/{task-request-inbox-UCSKDC3R.js → task-request-inbox-OB2KIJWO.js} +1 -1
- package/dist/{task-scope-GDLFE26E.js → task-scope-74JBTKJN.js} +17 -15
- package/dist/{tasks-crud-W7VGWRUV.js → tasks-crud-ZU6RZDEZ.js} +13 -12
- package/dist/{tasks-notify-CT7NWCS4.js → tasks-notify-767DRYAA.js} +14 -13
- package/dist/{tasks-review-WCSKOUFW.js → tasks-review-4F6PZZ3B.js} +13 -12
- package/dist/{telemetry-upload-FK5WKXVB.js → telemetry-upload-2JM6KIAB.js} +7 -7
- package/dist/{token-budget-GBNGSIU3.js → token-budget-NH2RD4YX.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-CHCBD4OQ.js} +1 -1
- package/dist/tui/App.js +22 -21
- package/dist/{tui-data-FTPV2XBQ.js → tui-data-244GF3BI.js} +13 -12
- package/dist/{update-support-J6UWPUOC.js → update-support-P2LO3DAB.js} +9 -9
- package/dist/work-claims-4QOE7DT2.js +53 -0
- package/dist/{work-state-heartbeat-4LDF6DSM.js → work-state-heartbeat-GX3VWWWK.js} +1 -1
- package/dist/{worker-gate-35VZINZG.js → worker-gate-62PZATOV.js} +1 -1
- package/dist/{workflow-engine-4DA6RSHI.js → workflow-engine-7YIRU62F.js} +2 -2
- package/dist/{worktree-H3YFJ3NU.js → worktree-3TUKIZWY.js} +4 -4
- package/dist/{worktree-sweep-4EDLLQ2E.js → worktree-sweep-MYQHUXDE.js} +5 -5
- package/package.json +6 -2
- package/release-notes.json +68 -62
- package/dist/chunk-2RQT7TED.js +0 -275
- /package/dist/{chunk-7Y6AQWVT.js → chunk-25EN7XXN.js} +0 -0
- /package/dist/{chunk-3THNS2T7.js → chunk-62U63R3E.js} +0 -0
- /package/dist/{chunk-VS4LPG66.js → chunk-65ZSFW3O.js} +0 -0
- /package/dist/{chunk-LKYGSJ2E.js → chunk-BTFDA3UJ.js} +0 -0
- /package/dist/{chunk-JRPYLUXH.js → chunk-DAXFAXLN.js} +0 -0
- /package/dist/{chunk-3NBWARKC.js → chunk-FLP2BQOA.js} +0 -0
- /package/dist/{chunk-CMBF5WCL.js → chunk-GTOMDMJL.js} +0 -0
- /package/dist/{chunk-QYECRPGD.js → chunk-JLYHJJHU.js} +0 -0
- /package/dist/{chunk-MBBFL2SP.js → chunk-JZBZI36P.js} +0 -0
- /package/dist/{chunk-BY7WWPRM.js → chunk-OUIEDJFO.js} +0 -0
- /package/dist/{chunk-7DMCAGSC.js → chunk-WM7Y5ZV2.js} +0 -0
- /package/dist/{chunk-G2EAYH4U.js → chunk-XM7HJ5SS.js} +0 -0
- /package/dist/{chunk-UY6HRDB2.js → chunk-YNPOELAN.js} +0 -0
- /package/dist/{core-memory-CMPPHJN5.js → core-memory-EARETDZ6.js} +0 -0
- /package/dist/{memory-isolation-ZB5S5HCO.js → memory-isolation-XASOGA7G.js} +0 -0
- /package/dist/{oauth-server-NP7KGF7N.js → oauth-server-C3BXAKAW.js} +0 -0
- /package/dist/{project-boot-LEZSK3W7.js → project-boot-LCFBQ6NB.js} +0 -0
- /package/dist/{wiki-acl-5DKOWOIH.js → wiki-acl-XQH4UBP2.js} +0 -0
|
@@ -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-HSBKV5LB.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-HVG56HJ5.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
|
+
};
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import "./chunk-MLKGABMK.js";
|
|
2
|
-
|
|
3
1
|
// src/lib/agent-heartbeat.ts
|
|
4
2
|
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
5
3
|
import path from "path";
|
|
@@ -52,9 +50,10 @@ function getAgentLivenessReport() {
|
|
|
52
50
|
};
|
|
53
51
|
});
|
|
54
52
|
}
|
|
53
|
+
|
|
55
54
|
export {
|
|
56
|
-
classifyLiveness,
|
|
57
|
-
getAgentLivenessReport,
|
|
58
55
|
loadHeartbeats,
|
|
59
|
-
recordHeartbeat
|
|
56
|
+
recordHeartbeat,
|
|
57
|
+
classifyLiveness,
|
|
58
|
+
getAgentLivenessReport
|
|
60
59
|
};
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
reserveVersions,
|
|
6
6
|
vectorToBlob
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-BQYQES2Z.js";
|
|
8
8
|
import {
|
|
9
9
|
getClient
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-HSBKV5LB.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-CAYUAM5A.js").then(
|
|
274
274
|
({ extractAndStoreDocumentGraph }) => extractAndStoreDocumentGraph(documentId, originalTexts)
|
|
275
275
|
).catch((err) => {
|
|
276
276
|
process.stderr.write(
|