@askexenow/exe-os 0.9.292 → 0.9.293
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/generate-env.ts +27 -1
- package/dist/active-agent-OEJKODGY.js +27 -0
- package/dist/active-agent-PFZAEMJA.js +28 -0
- package/dist/active-agent-USK4RVP5.js +28 -0
- package/dist/active-agent-XEZTZEV7.js +27 -0
- package/dist/agentic-ontology-46PBPTLE.js +25 -0
- package/dist/agentic-ontology-WTXI6RLB.js +25 -0
- package/dist/assets/com.askexe.exed.plist +70 -0
- package/dist/backfill-metadata-IYP2QGGD.js +600 -0
- package/dist/backfill-metadata-S523IKKJ.js +600 -0
- package/dist/behaviors-GPCWN3RL.js +46 -0
- package/dist/behaviors-UYEYYVIH.js +46 -0
- package/dist/bin/agentic-ontology-backfill.js +5 -5
- package/dist/bin/agentic-reflection-backfill.js +6 -6
- package/dist/bin/agentic-semantic-label.js +5 -5
- package/dist/bin/backfill-conversations.js +6 -6
- package/dist/bin/backfill-responses.js +6 -6
- package/dist/bin/backfill-vectors.js +8 -8
- package/dist/bin/bulk-sync-postgres.js +7 -6
- package/dist/bin/cc-doctor.js +4 -4
- package/dist/bin/cleanup-stale-review-tasks.js +11 -11
- package/dist/bin/cli.js +16 -16
- package/dist/bin/deferred-daemon-restart.js +1 -1
- package/dist/bin/exe-agent-config.js +2 -2
- package/dist/bin/exe-agent.js +4 -4
- package/dist/bin/exe-assign.js +8 -8
- package/dist/bin/exe-boot.js +38 -18
- package/dist/bin/exe-call.js +4 -4
- package/dist/bin/exe-cloud.js +11 -4
- package/dist/bin/exe-dispatch.js +11 -11
- package/dist/bin/exe-doctor.js +2 -2
- package/dist/bin/exe-export-behaviors.js +7 -7
- package/dist/bin/exe-forget.js +6 -6
- package/dist/bin/exe-gateway.js +7 -7
- package/dist/bin/exe-healthcheck.js +4 -4
- package/dist/bin/exe-heartbeat.js +11 -11
- package/dist/bin/exe-kill.js +14 -14
- package/dist/bin/exe-launch-agent.js +36 -18
- package/dist/bin/exe-new-employee.js +6 -6
- package/dist/bin/exe-pending-messages.js +12 -12
- package/dist/bin/exe-pending-notifications.js +11 -11
- package/dist/bin/exe-pending-reviews.js +11 -11
- package/dist/bin/exe-rename.js +4 -4
- package/dist/bin/exe-review.js +13 -13
- package/dist/bin/exe-search.js +5 -5
- package/dist/bin/exe-session-cleanup.js +16 -16
- package/dist/bin/exe-settings.js +12 -4
- package/dist/bin/exe-start-codex.js +11 -11
- package/dist/bin/exe-start-opencode.js +8 -8
- package/dist/bin/exe-status.js +12 -12
- package/dist/bin/exe-team.js +3 -3
- package/dist/bin/git-sweep.js +12 -12
- package/dist/bin/graph-backfill.js +4 -4
- package/dist/bin/graph-export.js +5 -5
- package/dist/bin/import-history.js +7 -7
- package/dist/bin/install-launchd.js +46 -10
- package/dist/bin/install.js +8 -8
- 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/scan-tasks.js +11 -11
- package/dist/bin/setup.js +1 -1
- package/dist/bin/shard-migrate.js +4 -4
- package/dist/capability-cards-7XF2UW3Z.js +89 -0
- package/dist/capability-cards-DME6OMOK.js +89 -0
- package/dist/capacity-monitor-7SKMXRIK.js +51 -0
- package/dist/capacity-monitor-MNEA6FMY.js +51 -0
- package/dist/catchup-brief-46O3RLWO.js +175 -0
- package/dist/catchup-brief-EPEKZKRA.js +175 -0
- package/dist/chunk-2EMOVUJR.js +128 -0
- package/dist/chunk-2JE7LJCZ.js +240 -0
- package/dist/chunk-2LHQ5MGP.js +377 -0
- package/dist/chunk-2ZXMXFGH.js +4380 -0
- package/dist/chunk-3KIMGEFL.js +54 -0
- package/dist/chunk-3PY5PK75.js +14533 -0
- package/dist/chunk-3SDAK22H.js +538 -0
- package/dist/chunk-4CEGPB6F.js +240 -0
- package/dist/chunk-4HDMB2M5.js +574 -0
- package/dist/chunk-4KCLWBF6.js +197 -0
- package/dist/chunk-4WZ55DSC.js +381 -0
- package/dist/chunk-5QX4LHOF.js +668 -0
- package/dist/chunk-5RSGWGYP.js +1119 -0
- package/dist/chunk-5SWY4J5G.js +284 -0
- package/dist/chunk-5ZHIAIDE.js +424 -0
- package/dist/chunk-5ZKD5ZVT.js +33 -0
- package/dist/chunk-67X246EI.js +424 -0
- package/dist/chunk-6A56VNVX.js +448 -0
- package/dist/chunk-6EEBG6WU.js +345 -0
- package/dist/chunk-6EI5U2KJ.js +171 -0
- package/dist/chunk-6G4JWZPF.js +128 -0
- package/dist/chunk-6GTLJHAG.js +150 -0
- package/dist/chunk-6LDZPC2H.js +1079 -0
- package/dist/chunk-6PNCZTKV.js +1119 -0
- package/dist/chunk-6QPDD4BI.js +123 -0
- package/dist/chunk-6ZMLJ6ZQ.js +2129 -0
- package/dist/chunk-72O5EJ52.js +204 -0
- package/dist/chunk-737NSJT4.js +553 -0
- package/dist/chunk-7P5TUGTL.js +456 -0
- package/dist/chunk-7XDF7BZQ.js +192 -0
- package/dist/chunk-ALYNEMIH.js +150 -0
- package/dist/chunk-B4PYJHIV.js +402 -0
- package/dist/chunk-B5ZCGIYB.js +630 -0
- package/dist/chunk-BE3T47CS.js +97 -0
- package/dist/chunk-BNJ3YCPD.js +192 -0
- package/dist/chunk-BUBYDG7Q.js +1079 -0
- package/dist/chunk-CSCRGRZT.js +345 -0
- package/dist/chunk-CY4S3HMG.js +30 -0
- package/dist/chunk-D2WYUJHM.js +50 -0
- package/dist/chunk-D3X64YSB.js +377 -0
- package/dist/chunk-D6TPR4BN.js +204 -0
- package/dist/chunk-DDI57ILJ.js +38 -0
- package/dist/chunk-DQBHY3Q4.js +210 -0
- package/dist/chunk-DVFHAY2J.js +630 -0
- package/dist/chunk-DWCR5GGG.js +128 -0
- package/dist/chunk-DZJPVLVR.js +2078 -0
- package/dist/chunk-E45SQG7C.js +280 -0
- package/dist/chunk-EJ7CWALW.js +244 -0
- package/dist/chunk-EM5WXY6H.js +836 -0
- package/dist/chunk-EOVVOUXC.js +381 -0
- package/dist/chunk-EVV55PHP.js +331 -0
- package/dist/chunk-F4FMIWEL.js +214 -0
- package/dist/chunk-F5GLICUP.js +85 -0
- package/dist/chunk-F5WN7EQ2.js +333 -0
- package/dist/chunk-FVXYTNSI.js +123 -0
- package/dist/chunk-FXD5LXRD.js +8 -0
- package/dist/chunk-G53LIPLG.js +76 -0
- package/dist/chunk-GEJAUWIZ.js +1350 -0
- package/dist/chunk-GJDYAXUL.js +227 -0
- package/dist/chunk-GJS7CJRC.js +129 -0
- package/dist/chunk-GTVP4QTZ.js +362 -0
- package/dist/chunk-HG7Z7JHX.js +85 -0
- package/dist/chunk-HH3MBGMJ.js +70 -0
- package/dist/chunk-HJBKBEC4.js +58 -0
- package/dist/chunk-HKSTWZ22.js +456 -0
- package/dist/chunk-HMP5VT6A.js +118 -0
- package/dist/chunk-HN2PWLQI.js +167 -0
- package/dist/chunk-HN3HGFBL.js +20 -0
- package/dist/chunk-HREBA7BJ.js +290 -0
- package/dist/chunk-HV7F5CXJ.js +553 -0
- package/dist/chunk-HWXIMSB7.js +30 -0
- package/dist/chunk-HWY5ROLO.js +129 -0
- package/dist/chunk-IDJCLLJF.js +3298 -0
- package/dist/chunk-IPMGAQGC.js +290 -0
- package/dist/chunk-IRT55NLF.js +382 -0
- package/dist/chunk-IXZ7OTB3.js +159 -0
- package/dist/chunk-J7JVMFKR.js +262 -0
- package/dist/chunk-JABYHL7R.js +171 -0
- package/dist/chunk-JE2ICRS5.js +197 -0
- package/dist/chunk-JLH273CW.js +70 -0
- package/dist/chunk-JPTT22PI.js +54 -0
- package/dist/chunk-JVT6ONVZ.js +731 -0
- package/dist/chunk-KJEG2OQN.js +1350 -0
- package/dist/chunk-LSASGUNP.js +85 -0
- package/dist/chunk-LSTM35QE.js +1186 -0
- package/dist/chunk-LZEWGBU2.js +97 -0
- package/dist/chunk-M2IOPGVR.js +731 -0
- package/dist/chunk-MBININJN.js +2078 -0
- package/dist/chunk-MJ2MCLZH.js +402 -0
- package/dist/chunk-MX63V4YD.js +38 -0
- package/dist/chunk-N7TWCWY5.js +128 -0
- package/dist/chunk-NAKIQODV.js +331 -0
- package/dist/chunk-NMJSZ5FC.js +185 -0
- package/dist/chunk-NXCJWGAF.js +836 -0
- package/dist/chunk-OLJTE7LW.js +157 -0
- package/dist/chunk-OPDX7KTW.js +167 -0
- package/dist/chunk-OXM62MI7.js +221 -0
- package/dist/chunk-PC53GP5N.js +55 -0
- package/dist/chunk-PMMQFOER.js +81 -0
- package/dist/chunk-PVVG22J4.js +735 -0
- package/dist/chunk-Q326CKO3.js +377 -0
- package/dist/chunk-QAK47LG3.js +81 -0
- package/dist/chunk-QAWSQ5LG.js +157 -0
- package/dist/chunk-QLPHEY7D.js +668 -0
- package/dist/chunk-QV4CHWME.js +97 -0
- package/dist/chunk-QY46R3SB.js +348 -0
- package/dist/chunk-RAERYWCL.js +299 -0
- package/dist/chunk-RT5NXMH2.js +284 -0
- package/dist/chunk-RUUIZJSU.js +127 -0
- package/dist/chunk-S3PNZLTN.js +50 -0
- package/dist/chunk-S6WSWJBL.js +362 -0
- package/dist/chunk-STOZKLK6.js +1352 -0
- package/dist/chunk-SZCJI4TR.js +735 -0
- package/dist/chunk-T3FMPQOR.js +85 -0
- package/dist/chunk-T6EKR34W.js +58 -0
- package/dist/chunk-TKIOFYNW.js +1186 -0
- package/dist/chunk-TM2GZWIT.js +3313 -0
- package/dist/chunk-TWFTSIAI.js +4380 -0
- package/dist/chunk-U7BFATN7.js +538 -0
- package/dist/chunk-UAQZT24C.js +181 -0
- package/dist/chunk-UFHBNXGV.js +333 -0
- package/dist/chunk-UVN3LWCL.js +214 -0
- package/dist/chunk-UVRS32RJ.js +97 -0
- package/dist/chunk-V6R43RSE.js +227 -0
- package/dist/chunk-VHMVQUCR.js +448 -0
- package/dist/chunk-VK7NRMIW.js +2133 -0
- package/dist/chunk-VRFO3H3R.js +76 -0
- package/dist/chunk-VRZS4KWF.js +122 -0
- package/dist/chunk-WOXY76VV.js +33 -0
- package/dist/chunk-X6VOKECC.js +348 -0
- package/dist/chunk-XADXYWPE.js +280 -0
- package/dist/chunk-XCP56OMR.js +1352 -0
- package/dist/chunk-XDH5XB72.js +262 -0
- package/dist/chunk-XFPSFPVD.js +1094 -0
- package/dist/chunk-XOT6CVJA.js +244 -0
- package/dist/chunk-XWRIBBYP.js +210 -0
- package/dist/chunk-XWVCURC2.js +181 -0
- package/dist/chunk-YA6SJFNN.js +221 -0
- package/dist/chunk-YDMUHYCP.js +127 -0
- package/dist/chunk-YKQQ4UTG.js +382 -0
- package/dist/chunk-YNORJIBH.js +208 -0
- package/dist/chunk-YQ2R4BLZ.js +14533 -0
- package/dist/chunk-YUIT7Z7I.js +299 -0
- package/dist/chunk-ZD6EJ7LY.js +604 -0
- package/dist/chunk-ZHHBVPOX.js +1094 -0
- package/dist/chunk-ZNY54QWW.js +377 -0
- package/dist/chunk-ZVABYVSP.js +122 -0
- package/dist/chunk-ZVDYPSJH.js +94 -0
- package/dist/chunk-ZXNQ7GRU.js +185 -0
- package/dist/co-activation-ACVH2TL4.js +74 -0
- package/dist/co-activation-EJ63SDWZ.js +74 -0
- package/dist/co-occurrence-VKJWYROE.js +95 -0
- package/dist/co-occurrence-X2M3ASN4.js +95 -0
- package/dist/code-context-index-5EFZGRML.js +30 -0
- package/dist/core-memory-G3AEM4FY.js +110 -0
- package/dist/core-memory-GOI4WKP5.js +110 -0
- package/dist/crdt-sync-QXBHJ5GL.js +33 -0
- package/dist/crdt-sync-WX6YMYZS.js +33 -0
- package/dist/crm-webhook-EEL2F5TM.js +10 -0
- package/dist/crm-webhook-OYNQH4RZ.js +10 -0
- package/dist/cto-delegation-gate-RP4XBAZZ.js +280 -0
- package/dist/cto-delegation-gate-XOD3NAJS.js +280 -0
- package/dist/daemon-orchestration-33R5DNF2.js +139 -0
- package/dist/daemon-orchestration-EEPWOFMX.js +139 -0
- package/dist/db-backup-T4OALIZH.js +41 -0
- package/dist/db-backup-U5TNET7Z.js +41 -0
- package/dist/dispatch-ack-4S44HBWB.js +15 -0
- package/dist/doc-graph-extractor-O5EADZ3H.js +133 -0
- package/dist/doc-graph-extractor-SFMDR2SB.js +133 -0
- package/dist/dreaming-IXYC3FUN.js +34 -0
- package/dist/dreaming-ODYGZEIV.js +34 -0
- package/dist/entity-boost-XBGZKDJZ.js +375 -0
- package/dist/exe-drift-BKAGZUO2.js +70 -0
- package/dist/exe-drift-N7QYRQX7.js +70 -0
- package/dist/exe-export-AQZ3ZPSJ.js +77 -0
- package/dist/exe-export-QQGWWVZC.js +77 -0
- package/dist/exe-import-EVEGB2O4.js +80 -0
- package/dist/exe-import-RPL3RSZ2.js +80 -0
- package/dist/exe-key-5FYKRZOH.js +673 -0
- package/dist/exe-key-Y256JM3G.js +673 -0
- package/dist/exe-snapshot-AUJQ53Z7.js +338 -0
- package/dist/exe-snapshot-CSJDVWXM.js +338 -0
- package/dist/fast-db-init-57YCVJQP.js +7 -0
- package/dist/fast-db-init-VU4FDPGX.js +7 -0
- package/dist/gateway/index.js +8 -8
- package/dist/git-staleness-CR46BFAY.js +112 -0
- package/dist/git-staleness-H4NWNDJ5.js +112 -0
- package/dist/git-task-sweep-F7ASO7CZ.js +42 -0
- package/dist/git-task-sweep-XSPCOBUY.js +42 -0
- package/dist/global-procedures-7FDCJNWI.js +22 -0
- package/dist/global-procedures-GX7V5L76.js +22 -0
- package/dist/graph-auto-extract-JI3VW5KY.js +183 -0
- package/dist/graph-auto-extract-KFNHAHBK.js +183 -0
- package/dist/hooks/bug-report-worker.js +13 -13
- package/dist/hooks/codex-stop-task-finalizer.js +13 -13
- package/dist/hooks/commit-complete.js +13 -13
- package/dist/hooks/error-recall.js +6 -6
- package/dist/hooks/exe-heartbeat-hook.js +3 -3
- package/dist/hooks/ingest-worker.js +3 -3
- package/dist/hooks/ingest.js +6 -6
- package/dist/hooks/instructions-loaded.js +4 -4
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +4 -4
- package/dist/hooks/post-compact.js +12 -12
- package/dist/hooks/post-tool-combined.js +6 -6
- package/dist/hooks/pre-compact.js +16 -16
- package/dist/hooks/pre-tool-use.js +17 -17
- package/dist/hooks/prompt-submit.js +25 -25
- package/dist/hooks/session-end.js +23 -21
- package/dist/hooks/session-start.js +12 -12
- package/dist/hooks/stop.js +19 -19
- package/dist/hooks/subagent-stop.js +43 -13
- package/dist/hooks/summary-worker.js +19 -19
- package/dist/index.js +19 -19
- package/dist/installer-6PMCIZQZ.js +298 -0
- package/dist/installer-7ET5M2DD.js +344 -0
- package/dist/installer-K7BYY3XC.js +344 -0
- package/dist/installer-U6W7TQZU.js +40 -0
- package/dist/installer-UL4HFVPT.js +298 -0
- package/dist/installer-XMQRESAT.js +40 -0
- package/dist/lib/cloud-sync.js +12 -4
- package/dist/lib/consolidation.js +5 -5
- package/dist/lib/database.js +2 -2
- package/dist/lib/db-daemon-client.js +2 -2
- package/dist/lib/db.js +2 -2
- package/dist/lib/embedder.js +3 -3
- package/dist/lib/employee-templates.js +4 -4
- package/dist/lib/employees.js +2 -2
- package/dist/lib/exe-daemon-client.js +2 -2
- package/dist/lib/exe-daemon.js +50 -39
- package/dist/lib/hybrid-search.js +5 -5
- package/dist/lib/identity.js +2 -2
- package/dist/lib/messaging.js +11 -11
- package/dist/lib/reminders.js +3 -3
- package/dist/lib/schedules.js +5 -5
- package/dist/lib/session-registry.js +4 -4
- package/dist/lib/skill-learning.js +6 -6
- package/dist/lib/store.js +4 -4
- package/dist/lib/task-router.js +3 -3
- package/dist/lib/tasks.js +12 -12
- package/dist/lib/tmux-routing.js +10 -10
- package/dist/lib/tmux-transport.js +2 -1
- package/dist/lib/token-spend.js +3 -3
- package/dist/lib/transport.js +3 -2
- package/dist/mcp/register-tools.js +62 -62
- package/dist/mcp/server.js +63 -63
- 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 +15 -15
- package/dist/mcp/tools/deactivate-behavior.js +7 -7
- package/dist/mcp/tools/list-reminders.js +4 -4
- package/dist/mcp/tools/list-tasks.js +14 -14
- package/dist/mcp/tools/send-message.js +13 -13
- package/dist/mcp/tools/update-task.js +13 -13
- package/dist/mcp-http-config-JZPO4B6K.js +29 -0
- package/dist/mcp-http-config-L6TEBZOW.js +29 -0
- package/dist/memory-cards-EIA3YLFA.js +180 -0
- package/dist/memory-cards-MDZGVJWJ.js +180 -0
- package/dist/memory-graph-extractor-BMZBK2LX.js +22 -0
- package/dist/memory-graph-extractor-U2Q7MTBZ.js +22 -0
- package/dist/memory-poisoning-defense-ORWGA4KK.js +224 -0
- package/dist/memory-poisoning-defense-ZY5P2OOG.js +224 -0
- package/dist/memory-queue-client-A2PMQVEU.js +16 -0
- package/dist/memory-reflection-35NUYL3Z.js +244 -0
- package/dist/memory-reflection-NHOC2FGF.js +244 -0
- package/dist/message-queue-client-L5VZ44IN.js +92 -0
- package/dist/notifications-7GGXNR42.js +47 -0
- package/dist/notifications-B2YCZD3T.js +47 -0
- package/dist/orchestration-events-7EQJF377.js +27 -0
- package/dist/orchestration-events-VJTAOA2R.js +27 -0
- package/dist/orchestrator-IAU2Y3K3.js +35 -0
- package/dist/orchestrator-YOM5D5EJ.js +35 -0
- package/dist/pipeline-router-ITQDOV2B.js +15 -0
- package/dist/pipeline-router-VYFAS3ZX.js +15 -0
- package/dist/plan-limits-OJQINDD3.js +28 -0
- package/dist/plan-limits-UWVCNA67.js +28 -0
- package/dist/project-boot-GSLIQJVS.js +299 -0
- package/dist/project-boot-NRU7RRED.js +299 -0
- package/dist/projection-worker-SKLKJJFA.js +1084 -0
- package/dist/projection-worker-XVOLBYQC.js +1084 -0
- package/dist/prospective-memory-JOKZL7QJ.js +232 -0
- package/dist/prospective-memory-WQSB2IPD.js +232 -0
- package/dist/reranker-5HJXM4K5.js +19 -0
- package/dist/reranker-Q7KD2VDL.js +19 -0
- package/dist/retrieval-health-BAKZOWX7.js +11 -0
- package/dist/retrieval-health-LXDMWIAZ.js +11 -0
- package/dist/review-polling-GBRSJ7X5.js +126 -0
- package/dist/review-polling-YDS35QTO.js +126 -0
- package/dist/runtime/index.js +13 -13
- package/dist/session-events-EJID2CZE.js +38 -0
- package/dist/session-events-UPXPYEA3.js +38 -0
- package/dist/session-kill-telemetry-7FP74BIM.js +31 -0
- package/dist/session-kill-telemetry-XLMNOBBQ.js +31 -0
- package/dist/session-scope-QCN23H6B.js +88 -0
- package/dist/session-scope-ZR2W2EDF.js +88 -0
- package/dist/setup-wizard-7H4CE5UL.js +12 -0
- package/dist/setup-wizard-MR3XA4BC.js +12 -0
- package/dist/skill-refinement-6UK4P4UQ.js +159 -0
- package/dist/skill-refinement-RYBLDKDP.js +159 -0
- package/dist/steward-gate-PSF4JQUC.js +15 -0
- package/dist/steward-gate-U2HQZ4LX.js +15 -0
- package/dist/task-enforcement-NL6WPS3T.js +506 -0
- package/dist/task-enforcement-RYWTWHQJ.js +506 -0
- package/dist/task-scope-43TBGXSP.js +37 -0
- package/dist/task-scope-BR4ZJLQT.js +37 -0
- package/dist/tasks-crud-AQLUDVES.js +79 -0
- package/dist/tasks-crud-LWTHIDHF.js +79 -0
- package/dist/tasks-notify-PZQMVQHI.js +40 -0
- package/dist/tasks-notify-U4QZ2FGV.js +40 -0
- package/dist/tasks-review-E3LQRBNB.js +49 -0
- package/dist/tasks-review-NIGU6K3L.js +49 -0
- package/dist/telemetry-upload-PQLC5A4D.js +741 -0
- package/dist/telemetry-upload-QOYSUDDH.js +741 -0
- package/dist/token-budget-OJGWYISJ.js +86 -0
- package/dist/token-budget-VMQLMHSU.js +86 -0
- package/dist/tool-capability-index-4M3BFQTU.js +10 -0
- package/dist/tool-telemetry-4YD2E6UU.js +17 -0
- package/dist/tool-telemetry-662N3S5Q.js +17 -0
- package/dist/tui/App.js +18 -18
- package/dist/tui-data-IIGF5XRY.js +260 -0
- package/dist/tui-data-W4INCXEA.js +260 -0
- package/dist/wiki-acl-KXXMRMIM.js +111 -0
- package/dist/wiki-acl-XSRBJSBD.js +111 -0
- package/dist/worker-gate-7GMM23JY.js +21 -0
- package/dist/worker-gate-F6LY67TM.js +21 -0
- package/dist/workflow-engine-G4JTWI5N.js +28 -0
- package/dist/workflow-engine-UHOVTA5Q.js +28 -0
- package/dist/worktree-OJMZ4RG4.js +28 -0
- package/dist/worktree-ZLF4MX6T.js +28 -0
- package/dist/worktree-sweep-5Z6V7MNJ.js +21 -0
- package/dist/worktree-sweep-M64OW2MU.js +21 -0
- package/package.json +2 -2
- package/release-notes.json +14 -14
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import {
|
|
2
|
+
clean,
|
|
3
|
+
stableId
|
|
4
|
+
} from "./chunk-J7JVMFKR.js";
|
|
5
|
+
|
|
6
|
+
// src/lib/reflection-checkpoints.ts
|
|
7
|
+
function parsePayload(payload) {
|
|
8
|
+
if (!payload) return {};
|
|
9
|
+
try {
|
|
10
|
+
return JSON.parse(payload);
|
|
11
|
+
} catch {
|
|
12
|
+
return {};
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function semanticArray(event, key) {
|
|
16
|
+
const payload = parsePayload(event.payload);
|
|
17
|
+
const semantic = payload.semantic;
|
|
18
|
+
const value = semantic?.[key];
|
|
19
|
+
return Array.isArray(value) ? value.map(String).filter(Boolean) : [];
|
|
20
|
+
}
|
|
21
|
+
function buildReflectionCheckpoint(events) {
|
|
22
|
+
if (!events.length) return null;
|
|
23
|
+
const sorted = [...events].sort((a, b) => a.occurred_at.localeCompare(b.occurred_at));
|
|
24
|
+
const first = sorted[0];
|
|
25
|
+
const last = sorted[sorted.length - 1];
|
|
26
|
+
const goals = /* @__PURE__ */ new Set();
|
|
27
|
+
const successes = [];
|
|
28
|
+
const failures = [];
|
|
29
|
+
const risks = [];
|
|
30
|
+
const nextActions = [];
|
|
31
|
+
const decisions = [];
|
|
32
|
+
for (const event of sorted) {
|
|
33
|
+
for (const goal of semanticArray(event, "goals")) goals.add(goal);
|
|
34
|
+
for (const item of semanticArray(event, "successSignals")) successes.push(item);
|
|
35
|
+
for (const item of semanticArray(event, "failureSignals")) failures.push(item);
|
|
36
|
+
for (const item of semanticArray(event, "nextActions")) nextActions.push(item);
|
|
37
|
+
for (const item of semanticArray(event, "decisions")) decisions.push(item);
|
|
38
|
+
if (event.impact === "negative" || event.outcome === "failure_signal" || event.event_type === "problem" || event.event_type === "error") {
|
|
39
|
+
failures.push(event.outcome || event.intention || event.event_type);
|
|
40
|
+
}
|
|
41
|
+
if (event.outcome === "risk_signal") risks.push(event.intention || event.outcome);
|
|
42
|
+
if (event.impact === "positive" || event.outcome === "success_signal" || event.event_type === "milestone") {
|
|
43
|
+
successes.push(event.outcome || event.intention || event.event_type);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const uniqueGoals = [...goals].slice(0, 6);
|
|
47
|
+
const uniqueSuccesses = [...new Set(successes.map((x) => clean(x, 180)).filter(Boolean))].slice(0, 6);
|
|
48
|
+
const uniqueFailures = [...new Set(failures.map((x) => clean(x, 180)).filter(Boolean))].slice(0, 6);
|
|
49
|
+
const uniqueRisks = [...new Set(risks.map((x) => clean(x, 180)).filter(Boolean))].slice(0, 6);
|
|
50
|
+
const uniqueNext = [...new Set(nextActions.map((x) => clean(x, 180)).filter(Boolean))].slice(0, 6);
|
|
51
|
+
const uniqueDecisions = [...new Set(decisions.map((x) => clean(x, 180)).filter(Boolean))].slice(0, 6);
|
|
52
|
+
const learnings = [
|
|
53
|
+
uniqueSuccesses.length ? `Working: ${uniqueSuccesses.slice(0, 3).join("; ")}` : "Working: no strong success signal yet",
|
|
54
|
+
uniqueFailures.length ? `Improve: ${uniqueFailures.slice(0, 3).join("; ")}` : "Improve: no strong failure signal in this window",
|
|
55
|
+
uniqueDecisions.length ? `Decision context: ${uniqueDecisions.slice(0, 2).join("; ")}` : "Decision context: no explicit decision signal"
|
|
56
|
+
];
|
|
57
|
+
const summary = clean([
|
|
58
|
+
`Window ${first.occurred_at} \u2192 ${last.occurred_at}`,
|
|
59
|
+
`${sorted.length} events`,
|
|
60
|
+
uniqueGoals.length ? `goals: ${uniqueGoals.join("; ")}` : "goals: inferred from event trajectory",
|
|
61
|
+
uniqueSuccesses.length ? `successes: ${uniqueSuccesses.slice(0, 2).join("; ")}` : "successes: none explicit",
|
|
62
|
+
uniqueFailures.length ? `failures: ${uniqueFailures.slice(0, 2).join("; ")}` : "failures: none explicit"
|
|
63
|
+
].join(". "), 1200);
|
|
64
|
+
return {
|
|
65
|
+
id: stableId("reflection", first.project_name ?? "", first.session_id ?? "", first.occurred_at, last.occurred_at, sorted.length),
|
|
66
|
+
projectName: first.project_name ?? null,
|
|
67
|
+
sessionId: first.session_id ?? null,
|
|
68
|
+
windowStartAt: first.occurred_at,
|
|
69
|
+
windowEndAt: last.occurred_at,
|
|
70
|
+
eventCount: sorted.length,
|
|
71
|
+
goalCount: uniqueGoals.length,
|
|
72
|
+
successCount: uniqueSuccesses.length,
|
|
73
|
+
failureCount: uniqueFailures.length,
|
|
74
|
+
riskCount: uniqueRisks.length,
|
|
75
|
+
summary,
|
|
76
|
+
learnings,
|
|
77
|
+
nextActions: uniqueNext.length ? uniqueNext : ["Continue from latest successful event and resolve highest-impact failure/risk first."],
|
|
78
|
+
evidenceEventIds: sorted.slice(-25).map((e) => e.id),
|
|
79
|
+
confidence: Math.min(0.95, 0.5 + Math.min(sorted.length, 100) / 250 + uniqueGoals.length * 0.03)
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async function resolveClient(client) {
|
|
83
|
+
if (client) return client;
|
|
84
|
+
const { getClient } = await import("./lib/database.js");
|
|
85
|
+
return getClient();
|
|
86
|
+
}
|
|
87
|
+
async function insertReflectionCheckpoint(checkpoint, client) {
|
|
88
|
+
const db = await resolveClient(client);
|
|
89
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
90
|
+
await db.execute({
|
|
91
|
+
sql: `INSERT INTO agent_reflection_checkpoints
|
|
92
|
+
(id, project_name, session_id, window_start_at, window_end_at, event_count, goal_count,
|
|
93
|
+
success_count, failure_count, risk_count, summary, learnings, next_actions, evidence_event_ids,
|
|
94
|
+
confidence, created_at)
|
|
95
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
96
|
+
ON CONFLICT(id) DO UPDATE SET summary = excluded.summary, learnings = excluded.learnings,
|
|
97
|
+
next_actions = excluded.next_actions, confidence = excluded.confidence`,
|
|
98
|
+
args: [
|
|
99
|
+
checkpoint.id,
|
|
100
|
+
checkpoint.projectName,
|
|
101
|
+
checkpoint.sessionId,
|
|
102
|
+
checkpoint.windowStartAt,
|
|
103
|
+
checkpoint.windowEndAt,
|
|
104
|
+
checkpoint.eventCount,
|
|
105
|
+
checkpoint.goalCount,
|
|
106
|
+
checkpoint.successCount,
|
|
107
|
+
checkpoint.failureCount,
|
|
108
|
+
checkpoint.riskCount,
|
|
109
|
+
checkpoint.summary,
|
|
110
|
+
JSON.stringify(checkpoint.learnings),
|
|
111
|
+
JSON.stringify(checkpoint.nextActions),
|
|
112
|
+
JSON.stringify(checkpoint.evidenceEventIds),
|
|
113
|
+
checkpoint.confidence,
|
|
114
|
+
now
|
|
115
|
+
]
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
async function generateReflectionCheckpoints(opts = {}) {
|
|
119
|
+
const db = await resolveClient(opts.client);
|
|
120
|
+
const windowSize = opts.windowSize ?? 100;
|
|
121
|
+
const minEvents = opts.minEvents ?? 20;
|
|
122
|
+
const limit = opts.limit ?? 5e3;
|
|
123
|
+
const where = opts.projectName ? "WHERE project_name = ?" : "";
|
|
124
|
+
const args = opts.projectName ? [opts.projectName] : [];
|
|
125
|
+
const result = await db.execute({
|
|
126
|
+
sql: `SELECT id, event_type, occurred_at, actor_agent_id, project_name, session_id, intention, outcome, impact, evidence_memory_id, payload
|
|
127
|
+
FROM agent_events ${where}
|
|
128
|
+
ORDER BY project_name, session_id, occurred_at, sequence_index
|
|
129
|
+
LIMIT ?`,
|
|
130
|
+
args: [...args, limit]
|
|
131
|
+
});
|
|
132
|
+
const groups = /* @__PURE__ */ new Map();
|
|
133
|
+
for (const row of result.rows) {
|
|
134
|
+
const event = row;
|
|
135
|
+
const key = `${event.project_name ?? ""}::${event.session_id ?? ""}`;
|
|
136
|
+
const bucket = groups.get(key) ?? [];
|
|
137
|
+
bucket.push(event);
|
|
138
|
+
groups.set(key, bucket);
|
|
139
|
+
}
|
|
140
|
+
let inserted = 0;
|
|
141
|
+
for (const events of groups.values()) {
|
|
142
|
+
for (let i = 0; i < events.length; i += windowSize) {
|
|
143
|
+
const window = events.slice(i, i + windowSize);
|
|
144
|
+
if (window.length < minEvents) continue;
|
|
145
|
+
const checkpoint = buildReflectionCheckpoint(window);
|
|
146
|
+
if (!checkpoint) continue;
|
|
147
|
+
await insertReflectionCheckpoint(checkpoint, db);
|
|
148
|
+
inserted++;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return inserted;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export {
|
|
155
|
+
buildReflectionCheckpoint,
|
|
156
|
+
generateReflectionCheckpoints
|
|
157
|
+
};
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EXE_AI_DIR
|
|
3
|
+
} from "./chunk-R36FAN53.js";
|
|
4
|
+
|
|
5
|
+
// src/lib/worker-gate.ts
|
|
6
|
+
import { readdirSync, writeFileSync, unlinkSync, mkdirSync, existsSync, readFileSync } from "fs";
|
|
7
|
+
import path from "path";
|
|
8
|
+
import { totalmem, cpus } from "os";
|
|
9
|
+
var WORKER_PID_DIR = path.join(EXE_AI_DIR, "worker-pids");
|
|
10
|
+
function computeMaxWorkers() {
|
|
11
|
+
const totalGB = totalmem() / 1024 ** 3;
|
|
12
|
+
const coreCount = cpus().length;
|
|
13
|
+
const byRam = Math.floor(totalGB / 4);
|
|
14
|
+
const byCpu = Math.floor(coreCount / 2);
|
|
15
|
+
return Math.max(2, Math.min(8, Math.min(byRam, byCpu)));
|
|
16
|
+
}
|
|
17
|
+
var MAX_CONCURRENT_WORKERS = process.env.EXE_MAX_WORKERS ? Math.max(1, parseInt(process.env.EXE_MAX_WORKERS, 10) || 3) : computeMaxWorkers();
|
|
18
|
+
function tryAcquireWorkerSlot() {
|
|
19
|
+
try {
|
|
20
|
+
mkdirSync(WORKER_PID_DIR, { recursive: true });
|
|
21
|
+
const reservationId = `res-${process.pid}-${Date.now()}`;
|
|
22
|
+
const reservationPath = path.join(WORKER_PID_DIR, `${reservationId}.pid`);
|
|
23
|
+
writeFileSync(reservationPath, String(process.pid));
|
|
24
|
+
const files = readdirSync(WORKER_PID_DIR);
|
|
25
|
+
let alive = 0;
|
|
26
|
+
for (const f of files) {
|
|
27
|
+
if (!f.endsWith(".pid")) continue;
|
|
28
|
+
if (f.startsWith("res-")) {
|
|
29
|
+
const resParts = f.replace(".pid", "").split("-");
|
|
30
|
+
const resPid = parseInt(resParts[1] ?? "", 10);
|
|
31
|
+
if (!isNaN(resPid) && resPid > 0) {
|
|
32
|
+
try {
|
|
33
|
+
process.kill(resPid, 0);
|
|
34
|
+
alive++;
|
|
35
|
+
} catch {
|
|
36
|
+
try {
|
|
37
|
+
unlinkSync(path.join(WORKER_PID_DIR, f));
|
|
38
|
+
} catch {
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
} else {
|
|
42
|
+
alive++;
|
|
43
|
+
}
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const dashIdx = f.lastIndexOf("-");
|
|
47
|
+
const pid = parseInt(f.slice(dashIdx + 1).replace(".pid", ""), 10);
|
|
48
|
+
if (isNaN(pid)) continue;
|
|
49
|
+
try {
|
|
50
|
+
process.kill(pid, 0);
|
|
51
|
+
alive++;
|
|
52
|
+
} catch {
|
|
53
|
+
try {
|
|
54
|
+
unlinkSync(path.join(WORKER_PID_DIR, f));
|
|
55
|
+
} catch {
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (alive >= MAX_CONCURRENT_WORKERS) {
|
|
60
|
+
try {
|
|
61
|
+
unlinkSync(reservationPath);
|
|
62
|
+
} catch {
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
unlinkSync(reservationPath);
|
|
68
|
+
} catch {
|
|
69
|
+
}
|
|
70
|
+
return true;
|
|
71
|
+
} catch {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function registerWorkerPid(pid) {
|
|
76
|
+
try {
|
|
77
|
+
mkdirSync(WORKER_PID_DIR, { recursive: true });
|
|
78
|
+
writeFileSync(path.join(WORKER_PID_DIR, `worker-${pid}.pid`), String(pid));
|
|
79
|
+
} catch {
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function cleanupWorkerPid() {
|
|
83
|
+
try {
|
|
84
|
+
unlinkSync(path.join(WORKER_PID_DIR, `worker-${process.pid}.pid`));
|
|
85
|
+
} catch {
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
var BACKFILL_LOCK = path.join(WORKER_PID_DIR, "backfill.lock");
|
|
89
|
+
function tryAcquireBackfillLock() {
|
|
90
|
+
try {
|
|
91
|
+
mkdirSync(WORKER_PID_DIR, { recursive: true });
|
|
92
|
+
if (existsSync(BACKFILL_LOCK)) {
|
|
93
|
+
try {
|
|
94
|
+
const pid = parseInt(
|
|
95
|
+
readFileSync(BACKFILL_LOCK, "utf8").trim(),
|
|
96
|
+
10
|
|
97
|
+
);
|
|
98
|
+
if (!isNaN(pid) && pid > 0) {
|
|
99
|
+
try {
|
|
100
|
+
process.kill(pid, 0);
|
|
101
|
+
return false;
|
|
102
|
+
} catch {
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
} catch {
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
writeFileSync(BACKFILL_LOCK, String(process.pid));
|
|
109
|
+
return true;
|
|
110
|
+
} catch {
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function releaseBackfillLock() {
|
|
115
|
+
try {
|
|
116
|
+
unlinkSync(BACKFILL_LOCK);
|
|
117
|
+
} catch {
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async function getTaskAwareCapacity() {
|
|
121
|
+
const { getClient } = await import("./lib/database.js");
|
|
122
|
+
const { sessionScopeFilter } = await import("./task-scope-43TBGXSP.js");
|
|
123
|
+
const client = getClient();
|
|
124
|
+
const scope = sessionScopeFilter();
|
|
125
|
+
const result = await client.execute({
|
|
126
|
+
sql: `SELECT assigned_to, COUNT(*) as cnt
|
|
127
|
+
FROM tasks
|
|
128
|
+
WHERE status IN ('open', 'in_progress')${scope.sql}
|
|
129
|
+
GROUP BY assigned_to`,
|
|
130
|
+
args: [...scope.args]
|
|
131
|
+
});
|
|
132
|
+
const busyAgents = [];
|
|
133
|
+
let totalInProgress = 0;
|
|
134
|
+
for (const row of result.rows) {
|
|
135
|
+
const agent = String(row.assigned_to ?? "");
|
|
136
|
+
const count = Number(row.cnt ?? 0);
|
|
137
|
+
if (agent && count > 0) {
|
|
138
|
+
busyAgents.push(agent);
|
|
139
|
+
totalInProgress += count;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const idleAgents = [];
|
|
143
|
+
try {
|
|
144
|
+
const { listTmuxSessions } = await import("./lib/tmux-status.js");
|
|
145
|
+
const { isExeSession } = await import("./lib/tmux-routing.js");
|
|
146
|
+
const { baseAgentName } = await import("./lib/employees.js");
|
|
147
|
+
const liveSessions = listTmuxSessions().filter((s) => !isExeSession(s) && s.includes("-"));
|
|
148
|
+
const liveAgentNames = new Set(liveSessions.map((s) => baseAgentName(s.split("-")[0] ?? "")));
|
|
149
|
+
for (const name of liveAgentNames) {
|
|
150
|
+
if (name && !busyAgents.includes(name)) {
|
|
151
|
+
idleAgents.push(name);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
} catch {
|
|
155
|
+
}
|
|
156
|
+
return { busyAgents, idleAgents, totalInProgress };
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export {
|
|
160
|
+
MAX_CONCURRENT_WORKERS,
|
|
161
|
+
tryAcquireWorkerSlot,
|
|
162
|
+
registerWorkerPid,
|
|
163
|
+
cleanupWorkerPid,
|
|
164
|
+
tryAcquireBackfillLock,
|
|
165
|
+
releaseBackfillLock,
|
|
166
|
+
getTaskAwareCapacity
|
|
167
|
+
};
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
// src/lib/crdt-sync.ts
|
|
2
|
+
import * as Y from "yjs";
|
|
3
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, unlinkSync } from "fs";
|
|
4
|
+
import path from "path";
|
|
5
|
+
import { homedir } from "os";
|
|
6
|
+
var DEFAULT_STATE_PATH = path.join(homedir(), ".exe-os", "crdt-state.bin");
|
|
7
|
+
var _statePathOverride = null;
|
|
8
|
+
function getStatePath() {
|
|
9
|
+
return _statePathOverride ?? DEFAULT_STATE_PATH;
|
|
10
|
+
}
|
|
11
|
+
function _setStatePath(p) {
|
|
12
|
+
_statePathOverride = p;
|
|
13
|
+
}
|
|
14
|
+
var doc = null;
|
|
15
|
+
function initCrdtDoc() {
|
|
16
|
+
if (doc) return doc;
|
|
17
|
+
doc = new Y.Doc();
|
|
18
|
+
const sp = getStatePath();
|
|
19
|
+
if (existsSync(sp)) {
|
|
20
|
+
try {
|
|
21
|
+
const state = readFileSync(sp);
|
|
22
|
+
Y.applyUpdate(doc, new Uint8Array(state));
|
|
23
|
+
} catch {
|
|
24
|
+
console.warn("[crdt-sync] WARN: corrupted state file, rebuilding from DB");
|
|
25
|
+
try {
|
|
26
|
+
unlinkSync(sp);
|
|
27
|
+
} catch {
|
|
28
|
+
}
|
|
29
|
+
rebuildFromDb().catch((err) => {
|
|
30
|
+
console.warn("[crdt-sync] rebuild from DB failed:", err);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
doc.on("update", () => {
|
|
35
|
+
persistState();
|
|
36
|
+
});
|
|
37
|
+
return doc;
|
|
38
|
+
}
|
|
39
|
+
function getMemoriesMap() {
|
|
40
|
+
const d = initCrdtDoc();
|
|
41
|
+
return d.getMap("memories");
|
|
42
|
+
}
|
|
43
|
+
function getBehaviorsMap() {
|
|
44
|
+
const d = initCrdtDoc();
|
|
45
|
+
return d.getMap("behaviors");
|
|
46
|
+
}
|
|
47
|
+
function applyRemoteUpdate(update) {
|
|
48
|
+
const d = initCrdtDoc();
|
|
49
|
+
Y.applyUpdate(d, update);
|
|
50
|
+
}
|
|
51
|
+
function getFullState() {
|
|
52
|
+
const d = initCrdtDoc();
|
|
53
|
+
return Y.encodeStateAsUpdate(d);
|
|
54
|
+
}
|
|
55
|
+
function getDiffUpdate(remoteStateVector) {
|
|
56
|
+
const d = initCrdtDoc();
|
|
57
|
+
return Y.encodeStateAsUpdate(d, remoteStateVector);
|
|
58
|
+
}
|
|
59
|
+
function getStateVector() {
|
|
60
|
+
const d = initCrdtDoc();
|
|
61
|
+
return Y.encodeStateVector(d);
|
|
62
|
+
}
|
|
63
|
+
function importExistingMemories(memories) {
|
|
64
|
+
const map = getMemoriesMap();
|
|
65
|
+
const d = initCrdtDoc();
|
|
66
|
+
let imported = 0;
|
|
67
|
+
d.transact(() => {
|
|
68
|
+
for (const mem of memories) {
|
|
69
|
+
if (!mem.id) continue;
|
|
70
|
+
if (map.has(mem.id)) continue;
|
|
71
|
+
const entry = new Y.Map();
|
|
72
|
+
entry.set("id", mem.id);
|
|
73
|
+
entry.set("agent_id", mem.agent_id ?? null);
|
|
74
|
+
entry.set("agent_role", mem.agent_role ?? null);
|
|
75
|
+
entry.set("session_id", mem.session_id ?? null);
|
|
76
|
+
entry.set("timestamp", mem.timestamp ?? null);
|
|
77
|
+
entry.set("tool_name", mem.tool_name ?? null);
|
|
78
|
+
entry.set("project_name", mem.project_name ?? null);
|
|
79
|
+
entry.set("has_error", mem.has_error ?? 0);
|
|
80
|
+
entry.set("raw_text", mem.raw_text ?? "");
|
|
81
|
+
entry.set("version", mem.version ?? 0);
|
|
82
|
+
entry.set("author_device_id", mem.author_device_id ?? null);
|
|
83
|
+
entry.set("scope", mem.scope ?? "business");
|
|
84
|
+
map.set(mem.id, entry);
|
|
85
|
+
imported++;
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return imported;
|
|
89
|
+
}
|
|
90
|
+
function importExistingBehaviors(behaviors) {
|
|
91
|
+
const map = getBehaviorsMap();
|
|
92
|
+
const d = initCrdtDoc();
|
|
93
|
+
let imported = 0;
|
|
94
|
+
d.transact(() => {
|
|
95
|
+
for (const beh of behaviors) {
|
|
96
|
+
if (!beh.id) continue;
|
|
97
|
+
if (map.has(beh.id)) continue;
|
|
98
|
+
const entry = new Y.Map();
|
|
99
|
+
entry.set("id", beh.id);
|
|
100
|
+
entry.set("agent_id", beh.agent_id ?? null);
|
|
101
|
+
entry.set("project_name", beh.project_name ?? null);
|
|
102
|
+
entry.set("domain", beh.domain ?? null);
|
|
103
|
+
entry.set("content", beh.content ?? null);
|
|
104
|
+
entry.set("active", beh.active ?? 1);
|
|
105
|
+
entry.set("priority", beh.priority ?? "p1");
|
|
106
|
+
entry.set("created_at", beh.created_at ?? null);
|
|
107
|
+
entry.set("updated_at", beh.updated_at ?? null);
|
|
108
|
+
map.set(beh.id, entry);
|
|
109
|
+
imported++;
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
return imported;
|
|
113
|
+
}
|
|
114
|
+
function readAllMemories() {
|
|
115
|
+
const map = getMemoriesMap();
|
|
116
|
+
const records = [];
|
|
117
|
+
map.forEach((entry, id) => {
|
|
118
|
+
records.push({
|
|
119
|
+
id,
|
|
120
|
+
agent_id: entry.get("agent_id"),
|
|
121
|
+
agent_role: entry.get("agent_role"),
|
|
122
|
+
session_id: entry.get("session_id"),
|
|
123
|
+
timestamp: entry.get("timestamp"),
|
|
124
|
+
tool_name: entry.get("tool_name"),
|
|
125
|
+
project_name: entry.get("project_name"),
|
|
126
|
+
has_error: entry.get("has_error"),
|
|
127
|
+
raw_text: entry.get("raw_text"),
|
|
128
|
+
version: entry.get("version"),
|
|
129
|
+
author_device_id: entry.get("author_device_id"),
|
|
130
|
+
scope: entry.get("scope"),
|
|
131
|
+
session_scope: entry.get("session_scope")
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
return records;
|
|
135
|
+
}
|
|
136
|
+
function readAllBehaviors() {
|
|
137
|
+
const map = getBehaviorsMap();
|
|
138
|
+
const records = [];
|
|
139
|
+
map.forEach((entry, id) => {
|
|
140
|
+
records.push({
|
|
141
|
+
id,
|
|
142
|
+
agent_id: entry.get("agent_id"),
|
|
143
|
+
project_name: entry.get("project_name"),
|
|
144
|
+
domain: entry.get("domain"),
|
|
145
|
+
content: entry.get("content"),
|
|
146
|
+
active: entry.get("active"),
|
|
147
|
+
priority: entry.get("priority"),
|
|
148
|
+
created_at: entry.get("created_at"),
|
|
149
|
+
updated_at: entry.get("updated_at")
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
return records;
|
|
153
|
+
}
|
|
154
|
+
function onUpdate(callback) {
|
|
155
|
+
const d = initCrdtDoc();
|
|
156
|
+
const handler = (update) => callback(update);
|
|
157
|
+
d.on("update", handler);
|
|
158
|
+
return () => d.off("update", handler);
|
|
159
|
+
}
|
|
160
|
+
function persistState() {
|
|
161
|
+
if (!doc) return;
|
|
162
|
+
try {
|
|
163
|
+
const sp = getStatePath();
|
|
164
|
+
const dir = path.dirname(sp);
|
|
165
|
+
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
166
|
+
const state = Y.encodeStateAsUpdate(doc);
|
|
167
|
+
writeFileSync(sp, Buffer.from(state));
|
|
168
|
+
} catch {
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function isCrdtSyncEnabled() {
|
|
172
|
+
return process.env.EXE_CRDT_SYNC === "1";
|
|
173
|
+
}
|
|
174
|
+
async function rebuildFromDb() {
|
|
175
|
+
const { getClient } = await import("./lib/database.js");
|
|
176
|
+
const client = getClient();
|
|
177
|
+
const result = await client.execute(
|
|
178
|
+
"SELECT id, agent_id, agent_role, session_id, timestamp, tool_name, project_name, has_error, raw_text, version, author_device_id, scope, session_scope FROM memories"
|
|
179
|
+
);
|
|
180
|
+
const memories = result.rows.map((row) => ({
|
|
181
|
+
id: String(row.id),
|
|
182
|
+
agent_id: row.agent_id,
|
|
183
|
+
agent_role: row.agent_role,
|
|
184
|
+
session_id: row.session_id,
|
|
185
|
+
timestamp: row.timestamp,
|
|
186
|
+
tool_name: row.tool_name,
|
|
187
|
+
project_name: row.project_name,
|
|
188
|
+
has_error: row.has_error,
|
|
189
|
+
raw_text: row.raw_text,
|
|
190
|
+
version: row.version,
|
|
191
|
+
author_device_id: row.author_device_id,
|
|
192
|
+
scope: row.scope,
|
|
193
|
+
session_scope: row.session_scope
|
|
194
|
+
}));
|
|
195
|
+
const count = importExistingMemories(memories);
|
|
196
|
+
persistState();
|
|
197
|
+
return count;
|
|
198
|
+
}
|
|
199
|
+
function destroyCrdtDoc() {
|
|
200
|
+
if (doc) {
|
|
201
|
+
doc.destroy();
|
|
202
|
+
doc = null;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export {
|
|
207
|
+
_setStatePath,
|
|
208
|
+
initCrdtDoc,
|
|
209
|
+
applyRemoteUpdate,
|
|
210
|
+
getFullState,
|
|
211
|
+
getDiffUpdate,
|
|
212
|
+
getStateVector,
|
|
213
|
+
importExistingMemories,
|
|
214
|
+
importExistingBehaviors,
|
|
215
|
+
readAllMemories,
|
|
216
|
+
readAllBehaviors,
|
|
217
|
+
onUpdate,
|
|
218
|
+
isCrdtSyncEnabled,
|
|
219
|
+
rebuildFromDb,
|
|
220
|
+
destroyCrdtDoc
|
|
221
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import {
|
|
2
|
+
enqueueMemory
|
|
3
|
+
} from "./chunk-MEWGYH6Z.js";
|
|
4
|
+
import {
|
|
5
|
+
isClientConnected,
|
|
6
|
+
sendDaemonRequest
|
|
7
|
+
} from "./chunk-4HDMB2M5.js";
|
|
8
|
+
|
|
9
|
+
// src/lib/memory-queue-client.ts
|
|
10
|
+
async function writeMemoryViaDaemon(entry) {
|
|
11
|
+
if (process.env.EXE_IS_DAEMON === "1") {
|
|
12
|
+
enqueueMemory(entry);
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (!isClientConnected()) {
|
|
16
|
+
enqueueMemory(entry);
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const response = await sendDaemonRequest({
|
|
21
|
+
type: "write-memory",
|
|
22
|
+
entry
|
|
23
|
+
});
|
|
24
|
+
if (response.ok) return true;
|
|
25
|
+
enqueueMemory(entry);
|
|
26
|
+
return false;
|
|
27
|
+
} catch {
|
|
28
|
+
enqueueMemory(entry);
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function batchWriteMemoryViaDaemon(entries) {
|
|
33
|
+
if (entries.length === 0) return 0;
|
|
34
|
+
if (process.env.EXE_IS_DAEMON === "1" || !isClientConnected()) {
|
|
35
|
+
for (const entry of entries) enqueueMemory(entry);
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const response = await sendDaemonRequest({
|
|
40
|
+
type: "batch-write-memory",
|
|
41
|
+
entries
|
|
42
|
+
});
|
|
43
|
+
if (response.ok) return response.count ?? entries.length;
|
|
44
|
+
for (const entry of entries) enqueueMemory(entry);
|
|
45
|
+
return 0;
|
|
46
|
+
} catch {
|
|
47
|
+
for (const entry of entries) enqueueMemory(entry);
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export {
|
|
53
|
+
writeMemoryViaDaemon,
|
|
54
|
+
batchWriteMemoryViaDaemon
|
|
55
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// src/bin/fast-db-init.ts
|
|
2
|
+
async function fastDbInit() {
|
|
3
|
+
const { isInitialized, getClient, setExternalClient } = await import("./lib/database.js");
|
|
4
|
+
if (isInitialized()) {
|
|
5
|
+
return getClient();
|
|
6
|
+
}
|
|
7
|
+
const forceDirect = process.env.EXE_DB_DIRECT === "1" || process.env.EXE_DB_READONLY === "1" || process.env.EXE_SKIP_DAEMON === "1";
|
|
8
|
+
if (!forceDirect) {
|
|
9
|
+
try {
|
|
10
|
+
const { connectEmbedDaemon, sendDaemonRequest, isClientConnected, disconnectClient } = await import("./lib/exe-daemon-client.js");
|
|
11
|
+
const { deserializeResultSet } = await import("./daemon-protocol-XW2OLNBS.js");
|
|
12
|
+
await Promise.race([
|
|
13
|
+
connectEmbedDaemon(),
|
|
14
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error("Daemon socket timeout (2s)")), 2e3))
|
|
15
|
+
]);
|
|
16
|
+
if (isClientConnected()) {
|
|
17
|
+
const daemonClient = {
|
|
18
|
+
async execute(stmt) {
|
|
19
|
+
const sql = typeof stmt === "string" ? stmt : stmt.sql;
|
|
20
|
+
const args = typeof stmt === "string" ? [] : Array.isArray(stmt.args) ? stmt.args : [];
|
|
21
|
+
const resp = await sendDaemonRequest({ type: "db-execute", sql, args });
|
|
22
|
+
if (resp.error) throw new Error(String(resp.error));
|
|
23
|
+
if (resp.db) return deserializeResultSet(resp.db);
|
|
24
|
+
throw new Error("Unexpected daemon response");
|
|
25
|
+
},
|
|
26
|
+
async batch(stmts, mode) {
|
|
27
|
+
const statements = stmts.map((s) => {
|
|
28
|
+
const sql = typeof s === "string" ? s : s.sql;
|
|
29
|
+
const args = typeof s === "string" ? [] : Array.isArray(s.args) ? s.args : [];
|
|
30
|
+
return { sql, args };
|
|
31
|
+
});
|
|
32
|
+
const resp = await sendDaemonRequest({ type: "db-batch", statements, mode: mode ?? "deferred" });
|
|
33
|
+
if (resp.error) throw new Error(String(resp.error));
|
|
34
|
+
const batchResults = resp["db-batch"];
|
|
35
|
+
if (batchResults) return batchResults.map(deserializeResultSet);
|
|
36
|
+
throw new Error("Unexpected daemon batch response");
|
|
37
|
+
},
|
|
38
|
+
async transaction(_mode) {
|
|
39
|
+
throw new Error("Transactions not supported via daemon socket");
|
|
40
|
+
},
|
|
41
|
+
async executeMultiple(_sql) {
|
|
42
|
+
throw new Error("executeMultiple not supported via daemon socket");
|
|
43
|
+
},
|
|
44
|
+
async migrate(_stmts) {
|
|
45
|
+
throw new Error("migrate not supported via daemon socket");
|
|
46
|
+
},
|
|
47
|
+
sync() {
|
|
48
|
+
return Promise.resolve(void 0);
|
|
49
|
+
},
|
|
50
|
+
close() {
|
|
51
|
+
},
|
|
52
|
+
get closed() {
|
|
53
|
+
return false;
|
|
54
|
+
},
|
|
55
|
+
get protocol() {
|
|
56
|
+
return "file";
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
try {
|
|
60
|
+
await daemonClient.execute("SELECT 1");
|
|
61
|
+
} catch {
|
|
62
|
+
try {
|
|
63
|
+
disconnectClient();
|
|
64
|
+
} catch {
|
|
65
|
+
}
|
|
66
|
+
throw new Error("Daemon socket validation failed");
|
|
67
|
+
}
|
|
68
|
+
setExternalClient(daemonClient);
|
|
69
|
+
return daemonClient;
|
|
70
|
+
}
|
|
71
|
+
} catch {
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const { initStore } = await import("./lib/store.js");
|
|
75
|
+
await initStore({ lightweight: true });
|
|
76
|
+
return getClient();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export {
|
|
80
|
+
fastDbInit
|
|
81
|
+
};
|