@askexenow/exe-os 0.9.299 → 0.9.301
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.customer.example +1 -1
- package/deploy/compose/.env.example +1 -1
- package/deploy/compose/docker-compose.yml +31 -5
- package/deploy/compose/erp-nginx/nginx.conf +6 -3
- package/deploy/compose/generate-env.ts +1 -1
- package/deploy/compose/observability/otel-collector-config.yaml +10 -1
- package/deploy/compose/setup.sh +1 -1
- package/dist/active-agent-56J56WW5.js +27 -0
- package/dist/active-agent-UNJO6AJ2.js +27 -0
- package/dist/active-agent-VDWK7TES.js +28 -0
- package/dist/active-agent-Y5LSIMVC.js +28 -0
- package/dist/agentic-ontology-MZ4WHFDE.js +25 -0
- package/dist/agentic-ontology-QEV7GI3T.js +25 -0
- package/dist/assets/com.askexe.exed.plist +6 -5
- package/dist/backfill-metadata-IHKI5GXV.js +600 -0
- package/dist/backfill-metadata-RQZ4BN7G.js +600 -0
- package/dist/backfill-metadata-ZU3SZNBD.js +600 -0
- package/dist/behaviors-A3L5CWMK.js +46 -0
- package/dist/behaviors-G4KWGS24.js +46 -0
- package/dist/behaviors-WO67R6C4.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 +13 -7
- package/dist/bin/cc-doctor.js +5 -5
- package/dist/bin/cleanup-stale-review-tasks.js +10 -10
- 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 +10 -10
- package/dist/bin/exe-assign.js +8 -8
- package/dist/bin/exe-boot.js +36 -21
- package/dist/bin/exe-call.js +4 -4
- package/dist/bin/exe-cloud.js +13 -7
- package/dist/bin/exe-dispatch.js +10 -10
- 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 +5 -5
- package/dist/bin/exe-heartbeat.js +10 -10
- package/dist/bin/exe-kill.js +13 -13
- package/dist/bin/exe-launch-agent.js +29 -19
- package/dist/bin/exe-new-employee.js +6 -6
- package/dist/bin/exe-pending-messages.js +11 -11
- package/dist/bin/exe-pending-notifications.js +10 -10
- package/dist/bin/exe-pending-reviews.js +10 -10
- package/dist/bin/exe-rename.js +4 -4
- package/dist/bin/exe-review.js +12 -12
- package/dist/bin/exe-search.js +5 -5
- package/dist/bin/exe-session-cleanup.js +15 -15
- package/dist/bin/exe-settings.js +13 -7
- package/dist/bin/exe-start-codex.js +11 -11
- package/dist/bin/exe-start-opencode.js +8 -8
- package/dist/bin/exe-status.js +11 -11
- package/dist/bin/exe-team.js +3 -3
- package/dist/bin/exe-watchdog.js +3 -3
- package/dist/bin/git-sweep.js +11 -11
- package/dist/bin/graph-backfill.js +6 -6
- package/dist/bin/graph-export.js +5 -5
- package/dist/bin/import-history.js +9 -9
- package/dist/bin/install-launchd.js +7 -3
- package/dist/bin/install.js +19 -15
- 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/pre-publish.js +24 -1
- package/dist/bin/scan-tasks.js +10 -10
- package/dist/bin/setup.js +1 -1
- package/dist/bin/shard-migrate.js +4 -4
- package/dist/bin/stack-update.js +123 -3
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/capability-cards-VTGDTOZ4.js +89 -0
- package/dist/capability-cards-XAQSL26B.js +89 -0
- package/dist/capacity-monitor-6MQLFFQT.js +51 -0
- package/dist/capacity-monitor-BB3LKJLE.js +51 -0
- package/dist/capacity-monitor-G2MAJPRP.js +51 -0
- package/dist/catchup-brief-BQSL5M5S.js +175 -0
- package/dist/catchup-brief-COALBX6L.js +175 -0
- package/dist/catchup-brief-VBGEJQRS.js +175 -0
- package/dist/cc-binary-detect-B5JDCJ5J.js +19 -0
- package/dist/chunk-22LDUTY7.js +14597 -0
- package/dist/chunk-24JVDLQJ.js +345 -0
- package/dist/chunk-24M4AJPG.js +128 -0
- package/dist/chunk-2B7RCTPT.js +85 -0
- package/dist/chunk-2QBA6YE6.js +127 -0
- package/dist/chunk-2RGDEBZC.js +731 -0
- package/dist/chunk-2T3OYZMR.js +1158 -0
- package/dist/chunk-32DBQWR5.js +333 -0
- package/dist/chunk-3ABY3QDX.js +199 -0
- package/dist/chunk-3EOPMTG2.js +128 -0
- package/dist/chunk-3G3ECFB5.js +668 -0
- package/dist/chunk-3LHOFGHT.js +280 -0
- package/dist/chunk-3NS4V4JW.js +382 -0
- package/dist/chunk-3NYY2NZ3.js +836 -0
- package/dist/chunk-3RA62PNQ.js +58 -0
- package/dist/chunk-3ROUD5WA.js +97 -0
- package/dist/chunk-3RY2ARDN.js +129 -0
- package/dist/chunk-3XRS5AVV.js +567 -0
- package/dist/chunk-3Y5IRIRU.js +290 -0
- package/dist/chunk-3YK7X5FD.js +1186 -0
- package/dist/chunk-3ZWWUKBI.js +210 -0
- package/dist/chunk-463G3VAH.js +122 -0
- package/dist/chunk-4L6PVYFE.js +54 -0
- package/dist/chunk-4LC7BFI2.js +76 -0
- package/dist/chunk-4O67LBMK.js +377 -0
- package/dist/chunk-4OIU3N6U.js +167 -0
- package/dist/chunk-4Z3FWLOE.js +836 -0
- package/dist/chunk-5BAU4T5G.js +208 -0
- package/dist/chunk-5FP7YHCG.js +1158 -0
- package/dist/chunk-5SYYMNPE.js +30 -0
- package/dist/chunk-5TO5PH7O.js +304 -0
- package/dist/chunk-5U3JZP62.js +1352 -0
- package/dist/chunk-5VNFXIGF.js +85 -0
- package/dist/chunk-5XD2Y463.js +402 -0
- package/dist/chunk-63AENHJC.js +123 -0
- package/dist/chunk-673IFJYB.js +731 -0
- package/dist/chunk-6UVUJNLY.js +1186 -0
- package/dist/chunk-7AWH47AR.js +448 -0
- package/dist/chunk-7KPWYWYL.js +290 -0
- package/dist/chunk-7P4B6AEP.js +227 -0
- package/dist/chunk-7URNGDEY.js +2145 -0
- package/dist/chunk-7VHOALNC.js +244 -0
- package/dist/chunk-ADZQBZOX.js +122 -0
- package/dist/chunk-APSZAEDO.js +1186 -0
- package/dist/chunk-ASHF6VO4.js +2265 -0
- package/dist/chunk-ASJHCAVL.js +38 -0
- package/dist/chunk-BT2LEHIW.js +448 -0
- package/dist/chunk-BTS5QUWB.js +50 -0
- package/dist/chunk-BWJDJ3BS.js +604 -0
- package/dist/chunk-CME46VWP.js +150 -0
- package/dist/chunk-D3ICCKXY.js +54 -0
- package/dist/chunk-D3IOU3NO.js +377 -0
- package/dist/chunk-DFGXRKI2.js +221 -0
- package/dist/chunk-DICIFTCS.js +150 -0
- package/dist/chunk-DIFI5JDC.js +76 -0
- package/dist/chunk-DO65VHQZ.js +128 -0
- package/dist/chunk-DPOIJ5SM.js +284 -0
- package/dist/chunk-E2OMUBXQ.js +567 -0
- package/dist/chunk-ECMXIV6N.js +97 -0
- package/dist/chunk-EDMVA3PT.js +727 -0
- package/dist/chunk-F5OSXH4A.js +4388 -0
- package/dist/chunk-F5OWHPRG.js +236 -0
- package/dist/chunk-F7MZA3QP.js +199 -0
- package/dist/chunk-FAZNXNA5.js +33 -0
- package/dist/chunk-FCHG5RC4.js +197 -0
- package/dist/chunk-FFKSPZO2.js +157 -0
- package/dist/chunk-FNHYH5U6.js +331 -0
- package/dist/chunk-FRNXQSB4.js +134 -0
- package/dist/chunk-FTAASABV.js +362 -0
- package/dist/chunk-FWPDAQ6Q.js +1350 -0
- package/dist/chunk-FZB73QOI.js +210 -0
- package/dist/chunk-GBL5QSTM.js +197 -0
- package/dist/chunk-GJBR6QLD.js +630 -0
- package/dist/chunk-GRSYAHKI.js +535 -0
- package/dist/chunk-GRXWINOW.js +244 -0
- package/dist/chunk-GUPNVUG5.js +348 -0
- package/dist/chunk-GY66UPMX.js +167 -0
- package/dist/chunk-HCCG67BY.js +43 -0
- package/dist/chunk-HCSZZXZZ.js +197 -0
- package/dist/chunk-HNGNZU62.js +240 -0
- package/dist/chunk-HP2D5LIE.js +214 -0
- package/dist/chunk-HUABQHDC.js +1352 -0
- package/dist/chunk-HYKO2LNW.js +157 -0
- package/dist/chunk-IFL6DG2K.js +181 -0
- package/dist/chunk-IKPQRHVQ.js +304 -0
- package/dist/chunk-J5HFRVNW.js +362 -0
- package/dist/chunk-J6SD7LT2.js +171 -0
- package/dist/chunk-JCWA3X6A.js +402 -0
- package/dist/chunk-JHPK33IP.js +2162 -0
- package/dist/chunk-JURL2S27.js +128 -0
- package/dist/chunk-JWGDH5I2.js +127 -0
- package/dist/chunk-KBXQFXYM.js +567 -0
- package/dist/chunk-KGY5QIOJ.js +1350 -0
- package/dist/chunk-KLES22FB.js +1094 -0
- package/dist/chunk-KPUYYOFS.js +122 -0
- package/dist/chunk-KY43UELJ.js +331 -0
- package/dist/chunk-L32V4O5Z.js +58 -0
- package/dist/chunk-LAFARYU5.js +456 -0
- package/dist/chunk-LC7ETNTJ.js +1350 -0
- package/dist/chunk-LEJ5FKIK.js +55 -0
- package/dist/chunk-LNLLCAI4.js +377 -0
- package/dist/chunk-LQWZYMNU.js +448 -0
- package/dist/chunk-LSDXEHKL.js +381 -0
- package/dist/chunk-LY3SOO73.js +76 -0
- package/dist/chunk-M6CIHXXB.js +159 -0
- package/dist/chunk-MJOQ35DX.js +427 -0
- package/dist/chunk-MO5HER5Y.js +345 -0
- package/dist/chunk-MS2EOZJQ.js +290 -0
- package/dist/chunk-MUIMJGSQ.js +128 -0
- package/dist/chunk-MY4TGLT6.js +284 -0
- package/dist/chunk-N3ARGCVG.js +345 -0
- package/dist/chunk-N4XG2M2U.js +735 -0
- package/dist/chunk-N72JNFJ4.js +535 -0
- package/dist/chunk-NJMPNYBS.js +427 -0
- package/dist/chunk-NM3AUMFE.js +2145 -0
- package/dist/chunk-NPPQ3TR4.js +735 -0
- package/dist/chunk-NTWF4DAF.js +581 -0
- package/dist/chunk-NXL3VKXM.js +331 -0
- package/dist/chunk-OJACH2JF.js +128 -0
- package/dist/chunk-OMSLHEEF.js +456 -0
- package/dist/chunk-OO4IFABD.js +382 -0
- package/dist/chunk-OYIP3QVN.js +167 -0
- package/dist/chunk-P2IOW54H.js +668 -0
- package/dist/chunk-P5KXQ3RN.js +731 -0
- package/dist/chunk-P5UXP53T.js +81 -0
- package/dist/chunk-PH6VRRFR.js +395 -0
- package/dist/chunk-Q3GKOF7Z.js +85 -0
- package/dist/chunk-Q65NCNL4.js +1352 -0
- package/dist/chunk-QIGS2LRT.js +735 -0
- package/dist/chunk-QKBN3CY2.js +381 -0
- package/dist/chunk-QNNAVMQH.js +1094 -0
- package/dist/chunk-QODDW4YI.js +171 -0
- package/dist/chunk-QPAYPTSH.js +2162 -0
- package/dist/chunk-QRWDJ5RI.js +381 -0
- package/dist/chunk-RBFZCHVB.js +105 -0
- package/dist/chunk-RCEULTPF.js +185 -0
- package/dist/chunk-RCGHXBCX.js +630 -0
- package/dist/chunk-ROSCLRTH.js +204 -0
- package/dist/chunk-RYAOSGUW.js +227 -0
- package/dist/chunk-S2SPGHPY.js +38 -0
- package/dist/chunk-S73ZAJ2S.js +262 -0
- package/dist/chunk-SBPEWD7Z.js +171 -0
- package/dist/chunk-SDPUWZP5.js +333 -0
- package/dist/chunk-SJ4UF7YK.js +1094 -0
- package/dist/chunk-SOZ7D77I.js +204 -0
- package/dist/chunk-SVLSHDNL.js +54 -0
- package/dist/chunk-SVUYBT5N.js +262 -0
- package/dist/chunk-T7PTLVJV.js +284 -0
- package/dist/chunk-TDX2LK2M.js +240 -0
- package/dist/chunk-TGUSLO4B.js +50 -0
- package/dist/chunk-TPJH6PE6.js +1158 -0
- package/dist/chunk-TVW7EDOJ.js +382 -0
- package/dist/chunk-TYRUIE6P.js +58 -0
- package/dist/chunk-U5RKGLV6.js +50 -0
- package/dist/chunk-UFGTHBHP.js +127 -0
- package/dist/chunk-ULCYWCPI.js +1079 -0
- package/dist/chunk-UN5EPVBN.js +14597 -0
- package/dist/chunk-URLH7ZVR.js +70 -0
- package/dist/chunk-USYRTGR7.js +402 -0
- package/dist/chunk-V4ABCEHM.js +30 -0
- package/dist/chunk-V6LOEOXG.js +3372 -0
- package/dist/chunk-VAZOVAW4.js +2162 -0
- package/dist/chunk-VEUQVKKT.js +185 -0
- package/dist/chunk-VIDDJ5RF.js +214 -0
- package/dist/chunk-VKCNXOQ6.js +214 -0
- package/dist/chunk-VNB4ROYG.js +348 -0
- package/dist/chunk-VWUQFZFB.js +395 -0
- package/dist/chunk-W77GRCNA.js +85 -0
- package/dist/chunk-WB2B25UM.js +230 -0
- package/dist/chunk-WCUZX7F7.js +204 -0
- package/dist/chunk-WL5RMOZQ.js +362 -0
- package/dist/chunk-WPAXAOHD.js +1079 -0
- package/dist/chunk-WVMG4ZRH.js +14597 -0
- package/dist/chunk-WYVOTRRZ.js +129 -0
- package/dist/chunk-XABJRAUW.js +3346 -0
- package/dist/chunk-XQQ7D4I4.js +85 -0
- package/dist/chunk-YDFY6YCH.js +280 -0
- package/dist/chunk-YGUMRYCN.js +33 -0
- package/dist/chunk-YHJPTIPR.js +836 -0
- package/dist/chunk-YJSP5PPG.js +128 -0
- package/dist/chunk-YLKS7KKC.js +2145 -0
- package/dist/chunk-YOMETWOJ.js +4388 -0
- package/dist/chunk-YU3KEVCO.js +333 -0
- package/dist/chunk-Z4FVFSE3.js +81 -0
- package/dist/chunk-Z4TLSNUW.js +244 -0
- package/dist/chunk-ZDPU3JTF.js +221 -0
- package/dist/chunk-ZDY4LYAJ.js +81 -0
- package/dist/chunk-ZG33AACD.js +70 -0
- package/dist/chunk-ZKHPZ6KN.js +181 -0
- package/dist/chunk-ZO2TM5N5.js +97 -0
- package/dist/chunk-ZP6T5K6I.js +535 -0
- package/dist/chunk-ZR6ZJT32.js +123 -0
- package/dist/chunk-ZSUACDQC.js +4388 -0
- package/dist/co-activation-JGF5YIDU.js +74 -0
- package/dist/co-activation-XM25BLZM.js +74 -0
- package/dist/co-occurrence-CKEMDPWO.js +95 -0
- package/dist/co-occurrence-HLLC6GT2.js +95 -0
- package/dist/co-occurrence-W2LIAPHI.js +95 -0
- package/dist/code-context-index-FCL47WKE.js +30 -0
- package/dist/conversation-entity-extractor-WC2RU6RS.js +114 -0
- package/dist/core-memory-CRSR2PSL.js +110 -0
- package/dist/core-memory-VSKFRMEV.js +110 -0
- package/dist/core-memory-ZDA76EU3.js +110 -0
- package/dist/crdt-sync-6VH2YDVY.js +33 -0
- package/dist/crdt-sync-BJKZB6T6.js +33 -0
- package/dist/crm-webhook-E5PAFAUN.js +10 -0
- package/dist/crm-webhook-RXFPZJXP.js +10 -0
- package/dist/crm-webhook-Z26LEFKG.js +10 -0
- package/dist/cto-delegation-gate-45IBLPTK.js +280 -0
- package/dist/cto-delegation-gate-EMY6ZZ2F.js +280 -0
- package/dist/cto-delegation-gate-SF4EUB2Q.js +280 -0
- package/dist/daemon-orchestration-VB3BLYIT.js +143 -0
- package/dist/daemon-orchestration-W66UYGUD.js +143 -0
- package/dist/daemon-orchestration-Y5Y6YNE3.js +143 -0
- package/dist/db-backup-HFJ53IBU.js +43 -0
- package/dist/db-backup-NVUTS7L5.js +43 -0
- package/dist/doc-graph-extractor-ID45AQ2P.js +133 -0
- package/dist/doc-graph-extractor-MLYQYT4B.js +133 -0
- package/dist/doc-graph-extractor-SVFSXKL6.js +133 -0
- package/dist/dreaming-AZYRAGKA.js +34 -0
- package/dist/dreaming-N6B7KBIE.js +34 -0
- package/dist/dreaming-WG5CDUHX.js +34 -0
- package/dist/entity-boost-XAFCDDB6.js +375 -0
- package/dist/exe-drift-3SGA53CL.js +70 -0
- package/dist/exe-drift-CPUEAPIU.js +70 -0
- package/dist/exe-export-4RTGDV53.js +77 -0
- package/dist/exe-export-APUNLKWF.js +77 -0
- package/dist/exe-export-NM4SXB3P.js +77 -0
- package/dist/exe-import-6GLNCP62.js +80 -0
- package/dist/exe-import-AZMIF34Z.js +80 -0
- package/dist/exe-import-U4H4ES3Z.js +80 -0
- package/dist/exe-key-FIPXUTMF.js +673 -0
- package/dist/exe-key-LJV23AJI.js +673 -0
- package/dist/exe-key-WTLCMOYJ.js +673 -0
- package/dist/exe-snapshot-ILO3WSEC.js +338 -0
- package/dist/exe-snapshot-IODRQLBX.js +338 -0
- package/dist/exe-snapshot-ZOZBW7V6.js +338 -0
- package/dist/fast-db-init-7LYYUCSJ.js +7 -0
- package/dist/fast-db-init-ATRZGHOL.js +7 -0
- package/dist/fast-db-init-IU7GYFWB.js +7 -0
- package/dist/gateway/index.js +11 -11
- package/dist/git-staleness-GGCFPHQ5.js +112 -0
- package/dist/git-staleness-XNOKI4D3.js +112 -0
- package/dist/git-task-sweep-3MO4OVND.js +42 -0
- package/dist/git-task-sweep-M3SWXFKJ.js +42 -0
- package/dist/git-task-sweep-Y6KNWB67.js +42 -0
- package/dist/global-procedures-626WAU3I.js +22 -0
- package/dist/global-procedures-EBAPPWGZ.js +22 -0
- package/dist/graph-auto-extract-TKHQ4OR3.js +183 -0
- package/dist/graph-auto-extract-VGFEWFZX.js +183 -0
- package/dist/graph-auto-extract-VJOUQBPK.js +183 -0
- package/dist/graph-rag-KECA5TE4.js +35 -0
- package/dist/hooks/bug-report-worker.js +12 -12
- package/dist/hooks/codex-stop-task-finalizer.js +12 -12
- package/dist/hooks/commit-complete.js +12 -12
- 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 +15 -15
- package/dist/hooks/prompt-submit.js +28 -26
- package/dist/hooks/session-end.js +20 -20
- package/dist/hooks/session-start.js +12 -12
- package/dist/hooks/stop.js +18 -18
- package/dist/hooks/subagent-stop.js +11 -11
- package/dist/hooks/summary-worker.js +18 -18
- package/dist/index.js +20 -20
- package/dist/installer-37KFNAWE.js +344 -0
- package/dist/installer-3FB5EMPB.js +40 -0
- package/dist/installer-BRQ42CPB.js +344 -0
- package/dist/installer-F55NR4E2.js +298 -0
- package/dist/installer-KOYBUS4J.js +40 -0
- package/dist/installer-PXZJG256.js +298 -0
- package/dist/lib/cloud-sync.js +13 -7
- package/dist/lib/consolidation.js +7 -7
- package/dist/lib/database.js +6 -4
- package/dist/lib/db-daemon-client.js +11 -202
- package/dist/lib/db.js +6 -4
- 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 +53 -51
- package/dist/lib/hybrid-search.js +5 -5
- package/dist/lib/identity.js +2 -2
- package/dist/lib/messaging.js +10 -10
- 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 +11 -11
- package/dist/lib/tmux-routing.js +9 -9
- package/dist/lib/token-spend.js +3 -3
- package/dist/mcp/register-tools.js +65 -63
- package/dist/mcp/server.js +66 -64
- 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 +13 -13
- 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 +13 -13
- package/dist/mcp/tools/send-message.js +12 -12
- package/dist/mcp/tools/update-task.js +12 -12
- package/dist/mcp-http-config-7KJZI7UD.js +31 -0
- package/dist/mcp-http-config-OF3MB7M5.js +31 -0
- package/dist/memory-cards-CPIZVXWI.js +180 -0
- package/dist/memory-cards-ZIT7ZKL5.js +180 -0
- package/dist/memory-graph-extractor-JIYWLBFF.js +22 -0
- package/dist/memory-graph-extractor-LY2VORZT.js +22 -0
- package/dist/memory-graph-extractor-MDPSLZDM.js +22 -0
- package/dist/memory-poisoning-defense-5UZT3WWA.js +224 -0
- package/dist/memory-poisoning-defense-SEM25TY5.js +224 -0
- package/dist/memory-queue-client-WKWRFERJ.js +16 -0
- package/dist/memory-reflection-J2W7CJ7C.js +244 -0
- package/dist/memory-reflection-TA2VQYPH.js +244 -0
- package/dist/message-queue-client-IFQQ2HI7.js +92 -0
- package/dist/notifications-CZBQ3H5T.js +47 -0
- package/dist/notifications-EIIL2EQV.js +47 -0
- package/dist/notifications-RLMSI4YE.js +47 -0
- package/dist/orchestration-events-TGQYA72K.js +27 -0
- package/dist/orchestration-events-VUYR6MXE.js +27 -0
- package/dist/orchestrator-JQD5G3CW.js +35 -0
- package/dist/orchestrator-MAMR4C37.js +35 -0
- package/dist/orchestrator-VE5WHEJH.js +35 -0
- package/dist/pipeline-router-3Q3YBYSM.js +15 -0
- package/dist/pipeline-router-DKXD6DJO.js +15 -0
- package/dist/pipeline-router-YNW63BY5.js +15 -0
- package/dist/plan-limits-YGXTYCW4.js +28 -0
- package/dist/plan-limits-ZM4MNZKY.js +28 -0
- package/dist/project-boot-E2TWYTAC.js +299 -0
- package/dist/project-boot-TDOZKKDR.js +299 -0
- package/dist/projection-worker-TMKUSVGD.js +1084 -0
- package/dist/projection-worker-WFPRM4AI.js +1084 -0
- package/dist/projection-worker-YKV3PFCV.js +1084 -0
- package/dist/prospective-memory-CNJDBNWF.js +232 -0
- package/dist/prospective-memory-OAFZUODU.js +232 -0
- package/dist/reranker-AFU75HEX.js +19 -0
- package/dist/reranker-RYNSJNDF.js +19 -0
- package/dist/reranker-YQIRNGDM.js +19 -0
- package/dist/retrieval-health-M5BVB7EV.js +12 -0
- package/dist/retrieval-health-RSQEIYIB.js +12 -0
- package/dist/review-polling-LGX7DUNT.js +126 -0
- package/dist/review-polling-MJBCYV4I.js +126 -0
- package/dist/review-polling-ZMB3OBPC.js +126 -0
- package/dist/runtime/index.js +16 -16
- package/dist/services/codex-reviewd/index.js +855 -0
- package/dist/session-events-5N47BRFK.js +38 -0
- package/dist/session-events-PT6SVS2P.js +38 -0
- package/dist/session-events-UTMCKDIN.js +38 -0
- package/dist/session-kill-telemetry-FRQA5MVD.js +31 -0
- package/dist/session-kill-telemetry-HKL2NQMR.js +31 -0
- package/dist/session-scope-2BD6QLNI.js +88 -0
- package/dist/session-scope-GQNCM6UQ.js +88 -0
- package/dist/session-scope-MMGM232A.js +88 -0
- package/dist/setup-wizard-SELXXVLD.js +12 -0
- package/dist/setup-wizard-W64I6SHC.js +12 -0
- package/dist/setup-wizard-X7YSRDNQ.js +12 -0
- package/dist/skill-refinement-CCP4ULZ3.js +159 -0
- package/dist/skill-refinement-FXCXTUS2.js +159 -0
- package/dist/skill-refinement-WCPDNHZ5.js +159 -0
- package/dist/stack-update-5VSGG36W.js +84 -0
- package/dist/steward-gate-JDR3SLH3.js +15 -0
- package/dist/steward-gate-PIXNK4BK.js +15 -0
- package/dist/task-enforcement-LEBWCYZT.js +506 -0
- package/dist/task-enforcement-VOSQRAQB.js +506 -0
- package/dist/task-enforcement-WCEA4FZI.js +506 -0
- package/dist/task-scope-CQZ33PRU.js +37 -0
- package/dist/task-scope-JTTEZKDU.js +37 -0
- package/dist/task-scope-L5GDL2AV.js +37 -0
- package/dist/tasks-crud-DC4GCXQQ.js +79 -0
- package/dist/tasks-crud-S36AFYYM.js +79 -0
- package/dist/tasks-crud-T32IRPXF.js +79 -0
- package/dist/tasks-notify-OBFVHJDP.js +40 -0
- package/dist/tasks-notify-OUQWUM6W.js +40 -0
- package/dist/tasks-notify-W2W2BJRB.js +40 -0
- package/dist/tasks-review-34WV7BX2.js +49 -0
- package/dist/tasks-review-N33MTHWJ.js +49 -0
- package/dist/tasks-review-OSBG2YN2.js +49 -0
- package/dist/telemetry-upload-3CSVO3J7.js +741 -0
- package/dist/telemetry-upload-EYHEWTKG.js +741 -0
- package/dist/telemetry-upload-XLBW4DRP.js +741 -0
- package/dist/token-budget-I6FMMDFX.js +86 -0
- package/dist/token-budget-ZG2MQ5GD.js +86 -0
- package/dist/tool-capability-index-IWQBQKM7.js +10 -0
- package/dist/tool-telemetry-2E3Z7CRV.js +17 -0
- package/dist/tool-telemetry-ODL4F2CW.js +17 -0
- package/dist/tui/App.js +17 -17
- package/dist/tui-data-VWT4Q5UT.js +260 -0
- package/dist/tui-data-XFBFBSBE.js +260 -0
- package/dist/tui-data-Z5UF7KEI.js +260 -0
- package/dist/wiki-acl-EUOPNUIQ.js +111 -0
- package/dist/wiki-acl-SZFHCEC4.js +111 -0
- package/dist/worker-gate-OOO6BWZ6.js +21 -0
- package/dist/worker-gate-OQMKAMP7.js +21 -0
- package/dist/worker-gate-ZPP3SZK6.js +21 -0
- package/dist/workflow-engine-P7WYJP2B.js +28 -0
- package/dist/workflow-engine-QY3IFFR2.js +28 -0
- package/dist/workflow-engine-UYNB5RTB.js +28 -0
- package/dist/worktree-CNOQZBNT.js +28 -0
- package/dist/worktree-H5C4LMQR.js +28 -0
- package/dist/worktree-sweep-KFWF3XZD.js +21 -0
- package/dist/worktree-sweep-SE7ITXC4.js +21 -0
- package/package.json +1 -1
- package/release-notes.json +117 -191
- package/src/commands/exe.md +18 -1
|
@@ -0,0 +1,735 @@
|
|
|
1
|
+
import {
|
|
2
|
+
sessionScopeFilter
|
|
3
|
+
} from "./chunk-F5OSXH4A.js";
|
|
4
|
+
import {
|
|
5
|
+
getClient,
|
|
6
|
+
getIdentity
|
|
7
|
+
} from "./chunk-XABJRAUW.js";
|
|
8
|
+
import {
|
|
9
|
+
getEmotionalBaseline
|
|
10
|
+
} from "./chunk-PNQDP3OA.js";
|
|
11
|
+
|
|
12
|
+
// src/lib/dreaming.ts
|
|
13
|
+
var DreamingEngine = class {
|
|
14
|
+
/**
|
|
15
|
+
* Gather recent work artifacts for analysis.
|
|
16
|
+
*/
|
|
17
|
+
async reviewRecentWork(agentId, hours = 24) {
|
|
18
|
+
const client = getClient();
|
|
19
|
+
const now = /* @__PURE__ */ new Date();
|
|
20
|
+
const start = new Date(now.getTime() - hours * 60 * 60 * 1e3);
|
|
21
|
+
const startISO = start.toISOString();
|
|
22
|
+
const endISO = now.toISOString();
|
|
23
|
+
const memResult = await client.execute({
|
|
24
|
+
sql: `SELECT id, agent_id, raw_text, memory_type, importance, timestamp, project_name
|
|
25
|
+
FROM memories
|
|
26
|
+
WHERE agent_id = ? AND timestamp >= ? AND (status IS NULL OR status != 'deleted')
|
|
27
|
+
ORDER BY timestamp DESC
|
|
28
|
+
LIMIT 200`,
|
|
29
|
+
args: [agentId, startISO]
|
|
30
|
+
});
|
|
31
|
+
const memories = memResult.rows.map((r) => ({
|
|
32
|
+
id: String(r.id),
|
|
33
|
+
agent_id: String(r.agent_id),
|
|
34
|
+
text: String(r.raw_text ?? ""),
|
|
35
|
+
memory_type: String(r.memory_type ?? "raw"),
|
|
36
|
+
importance: Number(r.importance ?? 0),
|
|
37
|
+
created_at: String(r.timestamp ?? ""),
|
|
38
|
+
project_name: r.project_name ? String(r.project_name) : null
|
|
39
|
+
}));
|
|
40
|
+
const scope = sessionScopeFilter();
|
|
41
|
+
const taskResult = await client.execute({
|
|
42
|
+
sql: `SELECT id, title, status, assigned_to, result, created_at, updated_at, project_name
|
|
43
|
+
FROM tasks
|
|
44
|
+
WHERE assigned_to = ? AND updated_at >= ?${scope.sql}
|
|
45
|
+
ORDER BY updated_at DESC
|
|
46
|
+
LIMIT 100`,
|
|
47
|
+
args: [agentId, startISO, ...scope.args]
|
|
48
|
+
});
|
|
49
|
+
const tasks = taskResult.rows.map((r) => ({
|
|
50
|
+
id: String(r.id),
|
|
51
|
+
title: String(r.title ?? ""),
|
|
52
|
+
status: String(r.status ?? ""),
|
|
53
|
+
assigned_to: String(r.assigned_to ?? ""),
|
|
54
|
+
result: r.result ? String(r.result) : null,
|
|
55
|
+
created_at: String(r.created_at),
|
|
56
|
+
updated_at: String(r.updated_at),
|
|
57
|
+
project_name: r.project_name ? String(r.project_name) : null
|
|
58
|
+
}));
|
|
59
|
+
const behaviorResult = await client.execute({
|
|
60
|
+
sql: `SELECT id, agent_id, domain, content, priority, created_at
|
|
61
|
+
FROM behaviors
|
|
62
|
+
WHERE agent_id = ? AND created_at >= ? AND active = 1
|
|
63
|
+
ORDER BY created_at DESC
|
|
64
|
+
LIMIT 50`,
|
|
65
|
+
args: [agentId, startISO]
|
|
66
|
+
});
|
|
67
|
+
const behaviors = behaviorResult.rows.map((r) => ({
|
|
68
|
+
id: String(r.id),
|
|
69
|
+
agent_id: String(r.agent_id),
|
|
70
|
+
domain: r.domain ? String(r.domain) : null,
|
|
71
|
+
content: String(r.content ?? ""),
|
|
72
|
+
priority: String(r.priority ?? "p1"),
|
|
73
|
+
created_at: String(r.created_at)
|
|
74
|
+
}));
|
|
75
|
+
let investigations = [];
|
|
76
|
+
try {
|
|
77
|
+
const invResult = await client.execute({
|
|
78
|
+
sql: `SELECT investigation_key,
|
|
79
|
+
COUNT(*) as total,
|
|
80
|
+
SUM(CASE WHEN result != 'pass' THEN 1 ELSE 0 END) as failed,
|
|
81
|
+
SUM(CASE WHEN result != 'pass' THEN duration_ms ELSE 0 END) as wasted_ms,
|
|
82
|
+
failure_category
|
|
83
|
+
FROM investigation_attempts
|
|
84
|
+
WHERE agent_id = ? AND timestamp >= ?
|
|
85
|
+
GROUP BY investigation_key
|
|
86
|
+
ORDER BY failed DESC
|
|
87
|
+
LIMIT 20`,
|
|
88
|
+
args: [agentId, startISO]
|
|
89
|
+
});
|
|
90
|
+
const invMap = /* @__PURE__ */ new Map();
|
|
91
|
+
const catCounts = /* @__PURE__ */ new Map();
|
|
92
|
+
for (const r of invResult.rows) {
|
|
93
|
+
const key = String(r.investigation_key ?? "");
|
|
94
|
+
if (!invMap.has(key)) {
|
|
95
|
+
invMap.set(key, {
|
|
96
|
+
investigationKey: key,
|
|
97
|
+
totalAttempts: Number(r.total ?? 0),
|
|
98
|
+
failedAttempts: Number(r.failed ?? 0),
|
|
99
|
+
topFailureCategory: String(r.failure_category ?? "unknown"),
|
|
100
|
+
wastedMs: Number(r.wasted_ms ?? 0)
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
const cat = String(r.failure_category ?? "unknown");
|
|
104
|
+
if (!catCounts.has(key)) catCounts.set(key, /* @__PURE__ */ new Map());
|
|
105
|
+
catCounts.get(key).set(cat, (catCounts.get(key).get(cat) ?? 0) + Number(r.failed ?? 0));
|
|
106
|
+
}
|
|
107
|
+
for (const [key, rec] of invMap) {
|
|
108
|
+
const cats = catCounts.get(key);
|
|
109
|
+
if (cats) {
|
|
110
|
+
let topCat = "unknown";
|
|
111
|
+
let topCount = 0;
|
|
112
|
+
for (const [cat, count] of cats) {
|
|
113
|
+
if (count > topCount) {
|
|
114
|
+
topCat = cat;
|
|
115
|
+
topCount = count;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
rec.topFailureCategory = topCat;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
investigations = Array.from(invMap.values());
|
|
122
|
+
} catch {
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
memories,
|
|
126
|
+
tasks,
|
|
127
|
+
behaviors,
|
|
128
|
+
investigations,
|
|
129
|
+
period: { start: startISO, end: endISO }
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Analyze work review for recurring patterns.
|
|
134
|
+
*/
|
|
135
|
+
identifyPatterns(review) {
|
|
136
|
+
const patterns = [];
|
|
137
|
+
const investigations = review.investigations ?? [];
|
|
138
|
+
const errorTasks = review.tasks.filter(
|
|
139
|
+
(t) => /\b(fix|bug|error|fail|broken|crash|revert)\b/i.test(t.title) || t.result && /\b(error|failed|broken|crash)\b/i.test(t.result)
|
|
140
|
+
);
|
|
141
|
+
if (errorTasks.length >= 2) {
|
|
142
|
+
patterns.push({
|
|
143
|
+
type: "mistake",
|
|
144
|
+
description: `Repeated error/fix tasks detected (${errorTasks.length} in period)`,
|
|
145
|
+
evidence: errorTasks.map((t) => `Task "${t.title}" (${t.status})`),
|
|
146
|
+
frequency: errorTasks.length,
|
|
147
|
+
confidence: Math.min(0.5 + errorTasks.length * 0.1, 1)
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
const completedTasks = review.tasks.filter(
|
|
151
|
+
(t) => t.status === "done" || t.status === "closed" || t.status === "needs_review"
|
|
152
|
+
);
|
|
153
|
+
if (completedTasks.length >= 3) {
|
|
154
|
+
patterns.push({
|
|
155
|
+
type: "success",
|
|
156
|
+
description: `High task completion rate: ${completedTasks.length} tasks completed in review period`,
|
|
157
|
+
evidence: completedTasks.map((t) => `"${t.title}" (${t.status})`),
|
|
158
|
+
frequency: completedTasks.length,
|
|
159
|
+
confidence: 0.8
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
const questionMemories = review.memories.filter(
|
|
163
|
+
(m) => /\b(how do|what is|where is|can't find|unclear|confused|don't know)\b/i.test(m.text)
|
|
164
|
+
);
|
|
165
|
+
if (questionMemories.length >= 3) {
|
|
166
|
+
patterns.push({
|
|
167
|
+
type: "gap",
|
|
168
|
+
description: `Knowledge gaps detected: ${questionMemories.length} uncertainty signals in memories`,
|
|
169
|
+
evidence: questionMemories.slice(0, 5).map((m) => m.text.slice(0, 120)),
|
|
170
|
+
frequency: questionMemories.length,
|
|
171
|
+
confidence: Math.min(0.4 + questionMemories.length * 0.1, 0.9)
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
if (review.behaviors.length >= 5) {
|
|
175
|
+
patterns.push({
|
|
176
|
+
type: "inefficiency",
|
|
177
|
+
description: `High behavior churn: ${review.behaviors.length} new behaviors in period (suggests unstable workflow)`,
|
|
178
|
+
evidence: review.behaviors.map((b) => `[${b.domain ?? "general"}] ${b.content.slice(0, 80)}`),
|
|
179
|
+
frequency: review.behaviors.length,
|
|
180
|
+
confidence: Math.min(0.5 + review.behaviors.length * 0.05, 0.9)
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
const blockedTasks = review.tasks.filter(
|
|
184
|
+
(t) => t.status === "blocked" || t.status === "cancelled"
|
|
185
|
+
);
|
|
186
|
+
if (blockedTasks.length >= 2) {
|
|
187
|
+
patterns.push({
|
|
188
|
+
type: "inefficiency",
|
|
189
|
+
description: `${blockedTasks.length} tasks blocked or cancelled in period`,
|
|
190
|
+
evidence: blockedTasks.map((t) => `"${t.title}" (${t.status})`),
|
|
191
|
+
frequency: blockedTasks.length,
|
|
192
|
+
confidence: 0.7
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
if (investigations.length > 0) {
|
|
196
|
+
const catTotals = /* @__PURE__ */ new Map();
|
|
197
|
+
let totalFailed = 0;
|
|
198
|
+
let totalAttempts = 0;
|
|
199
|
+
let totalWastedMs = 0;
|
|
200
|
+
for (const inv of investigations) {
|
|
201
|
+
totalAttempts += inv.totalAttempts;
|
|
202
|
+
totalFailed += inv.failedAttempts;
|
|
203
|
+
totalWastedMs += inv.wastedMs;
|
|
204
|
+
catTotals.set(inv.topFailureCategory, (catTotals.get(inv.topFailureCategory) ?? 0) + inv.failedAttempts);
|
|
205
|
+
}
|
|
206
|
+
if (totalAttempts > 0 && totalFailed / totalAttempts > 0.5) {
|
|
207
|
+
patterns.push({
|
|
208
|
+
type: "mistake",
|
|
209
|
+
description: `Investigation failure rate: ${Math.round(totalFailed / totalAttempts * 100)}% of ${totalAttempts} attempts failed (${Math.round(totalWastedMs / 6e4)}min wasted)`,
|
|
210
|
+
evidence: investigations.map((i) => `${i.investigationKey}: ${i.failedAttempts}/${i.totalAttempts} failed (${i.topFailureCategory})`),
|
|
211
|
+
frequency: totalFailed,
|
|
212
|
+
confidence: Math.min(0.6 + totalFailed * 0.05, 0.95)
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
const sortedCats = Array.from(catTotals.entries()).sort(([, a], [, b]) => b - a);
|
|
216
|
+
if (sortedCats.length > 0 && sortedCats[0][1] >= 2) {
|
|
217
|
+
const [topCat, topCount] = sortedCats[0];
|
|
218
|
+
patterns.push({
|
|
219
|
+
type: "inefficiency",
|
|
220
|
+
description: `Top debugging failure: "${topCat}" (${topCount} times). ${topCat === "lack_of_context" ? "Agent didn't have enough code context before editing" : topCat === "lack_of_tools" ? "Agent couldn't verify the fix (missing tools)" : topCat === "lack_of_reasoning" ? "Agent had the info but drew wrong conclusion" : topCat === "lack_of_measurement" ? "Agent tested the wrong thing (API vs browser)" : topCat === "wrong_diagnosis" ? "Agent misidentified the root cause" : "Recurring failure pattern"}`,
|
|
221
|
+
evidence: investigations.filter((i) => i.topFailureCategory === topCat).map((i) => `${i.investigationKey}: ${i.failedAttempts} failed attempts`),
|
|
222
|
+
frequency: topCount,
|
|
223
|
+
confidence: Math.min(0.7 + topCount * 0.05, 0.95)
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return patterns;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Generate behavior proposals for high-confidence patterns.
|
|
231
|
+
*/
|
|
232
|
+
proposeBehaviors(patterns) {
|
|
233
|
+
const proposals = [];
|
|
234
|
+
for (const pattern of patterns) {
|
|
235
|
+
if (pattern.confidence < 0.7) continue;
|
|
236
|
+
switch (pattern.type) {
|
|
237
|
+
case "mistake":
|
|
238
|
+
proposals.push({
|
|
239
|
+
text: `Before implementing fixes, verify the root cause with tests \u2014 ${pattern.evidence.length} fix cycles detected recently.`,
|
|
240
|
+
priority: "p1",
|
|
241
|
+
domain: "workflow",
|
|
242
|
+
rationale: `Pattern: ${pattern.description}`,
|
|
243
|
+
source_pattern: pattern
|
|
244
|
+
});
|
|
245
|
+
break;
|
|
246
|
+
case "gap":
|
|
247
|
+
proposals.push({
|
|
248
|
+
text: `Document solutions immediately after resolving uncertainties \u2014 ${pattern.frequency} knowledge gaps detected.`,
|
|
249
|
+
priority: "p1",
|
|
250
|
+
domain: "workflow",
|
|
251
|
+
rationale: `Pattern: ${pattern.description}`,
|
|
252
|
+
source_pattern: pattern
|
|
253
|
+
});
|
|
254
|
+
break;
|
|
255
|
+
case "inefficiency":
|
|
256
|
+
if (pattern.description.includes("lack_of_context")) {
|
|
257
|
+
proposals.push({
|
|
258
|
+
text: "Before editing any file for a bug fix, run code_context(action='search') and code_context(action='trace') to understand the full call chain. You've been editing without enough context.",
|
|
259
|
+
priority: "p0",
|
|
260
|
+
domain: "investigation",
|
|
261
|
+
rationale: `Pattern: ${pattern.description}`,
|
|
262
|
+
source_pattern: pattern
|
|
263
|
+
});
|
|
264
|
+
} else if (pattern.description.includes("lack_of_measurement")) {
|
|
265
|
+
proposals.push({
|
|
266
|
+
text: "After every fix, test the ACTUAL user flow (playwright for frontend, curl for API) \u2014 not just the build. You've been testing at the wrong level.",
|
|
267
|
+
priority: "p0",
|
|
268
|
+
domain: "investigation",
|
|
269
|
+
rationale: `Pattern: ${pattern.description}`,
|
|
270
|
+
source_pattern: pattern
|
|
271
|
+
});
|
|
272
|
+
} else if (pattern.description.includes("lack_of_tools")) {
|
|
273
|
+
proposals.push({
|
|
274
|
+
text: "You lack verification tools for this type of work. Before starting, check: do you have playwright for browser testing? curl for API testing? Access to logs? Request what you need before guessing.",
|
|
275
|
+
priority: "p0",
|
|
276
|
+
domain: "investigation",
|
|
277
|
+
rationale: `Pattern: ${pattern.description}`,
|
|
278
|
+
source_pattern: pattern
|
|
279
|
+
});
|
|
280
|
+
} else if (pattern.description.includes("lack_of_reasoning")) {
|
|
281
|
+
proposals.push({
|
|
282
|
+
text: "Trace the actual execution path step-by-step instead of guessing from code reading. Read the logs, add console.log, check the actual HTTP request \u2014 don't reason about what SHOULD happen.",
|
|
283
|
+
priority: "p0",
|
|
284
|
+
domain: "investigation",
|
|
285
|
+
rationale: `Pattern: ${pattern.description}`,
|
|
286
|
+
source_pattern: pattern
|
|
287
|
+
});
|
|
288
|
+
} else if (pattern.description.includes("wrong_diagnosis")) {
|
|
289
|
+
proposals.push({
|
|
290
|
+
text: "Run blast_radius before editing. Your diagnoses are hitting the wrong target. Understand what the change affects across the full dependency chain before committing to a fix.",
|
|
291
|
+
priority: "p0",
|
|
292
|
+
domain: "investigation",
|
|
293
|
+
rationale: `Pattern: ${pattern.description}`,
|
|
294
|
+
source_pattern: pattern
|
|
295
|
+
});
|
|
296
|
+
} else if (pattern.description.includes("behavior churn")) {
|
|
297
|
+
proposals.push({
|
|
298
|
+
text: `Review existing behaviors before creating new ones \u2014 high churn detected (${pattern.frequency} in period).`,
|
|
299
|
+
priority: "p1",
|
|
300
|
+
domain: "workflow",
|
|
301
|
+
rationale: `Pattern: ${pattern.description}`,
|
|
302
|
+
source_pattern: pattern
|
|
303
|
+
});
|
|
304
|
+
} else {
|
|
305
|
+
proposals.push({
|
|
306
|
+
text: `Identify and surface blockers earlier \u2014 ${pattern.frequency} blocked/cancelled tasks detected.`,
|
|
307
|
+
priority: "p1",
|
|
308
|
+
domain: "workflow",
|
|
309
|
+
rationale: `Pattern: ${pattern.description}`,
|
|
310
|
+
source_pattern: pattern
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
break;
|
|
314
|
+
case "success":
|
|
315
|
+
proposals.push({
|
|
316
|
+
text: `Continue current approach \u2014 high completion rate (${pattern.frequency} tasks) indicates effective workflow.`,
|
|
317
|
+
priority: "p2",
|
|
318
|
+
domain: "workflow",
|
|
319
|
+
rationale: `Pattern: ${pattern.description}`,
|
|
320
|
+
source_pattern: pattern
|
|
321
|
+
});
|
|
322
|
+
break;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return proposals;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Score how far an agent's recent work diverges from their identity definition.
|
|
329
|
+
*
|
|
330
|
+
* Heuristic-based: compares identity keywords vs recent memory/task topics.
|
|
331
|
+
* Score 0.0 = perfectly aligned, 1.0 = completely off-identity.
|
|
332
|
+
*/
|
|
333
|
+
calculateDrift(agentId, review) {
|
|
334
|
+
const identity = getIdentity(agentId);
|
|
335
|
+
if (!identity) {
|
|
336
|
+
return {
|
|
337
|
+
score: 0,
|
|
338
|
+
factors: [{ factor: "no_identity", weight: 0, evidence: "No identity file found \u2014 cannot calculate drift." }],
|
|
339
|
+
narrative: `No identity file found for ${agentId}. Drift cannot be calculated.`
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
const factors = [];
|
|
343
|
+
const identityText = (identity.body + " " + identity.frontmatter.role + " " + identity.frontmatter.title).toLowerCase();
|
|
344
|
+
const identityKeywords = new Set(
|
|
345
|
+
identityText.replace(/[^a-z0-9\s]/g, " ").split(/\s+/).filter((w) => w.length >= 4)
|
|
346
|
+
);
|
|
347
|
+
const workText = [
|
|
348
|
+
...review.memories.map((m) => m.text),
|
|
349
|
+
...review.tasks.map((t) => t.title + " " + (t.result ?? ""))
|
|
350
|
+
].join(" ").toLowerCase();
|
|
351
|
+
const workWords = new Set(
|
|
352
|
+
workText.replace(/[^a-z0-9\s]/g, " ").split(/\s+/).filter((w) => w.length >= 4)
|
|
353
|
+
);
|
|
354
|
+
let identityHits = 0;
|
|
355
|
+
for (const kw of identityKeywords) {
|
|
356
|
+
if (workWords.has(kw)) identityHits++;
|
|
357
|
+
}
|
|
358
|
+
const coverageRatio = identityKeywords.size > 0 ? identityHits / identityKeywords.size : 1;
|
|
359
|
+
const coverageDrift = 1 - coverageRatio;
|
|
360
|
+
factors.push({
|
|
361
|
+
factor: "keyword_coverage",
|
|
362
|
+
weight: 0.4,
|
|
363
|
+
evidence: `${identityHits}/${identityKeywords.size} identity keywords found in recent work (${(coverageRatio * 100).toFixed(0)}% coverage)`
|
|
364
|
+
});
|
|
365
|
+
const role = identity.frontmatter.role.toLowerCase();
|
|
366
|
+
const roleWords = role.split(/\s+/).filter((w) => w.length >= 3);
|
|
367
|
+
let roleMatchCount = 0;
|
|
368
|
+
for (const task of review.tasks) {
|
|
369
|
+
const taskLower = (task.title + " " + (task.result ?? "")).toLowerCase();
|
|
370
|
+
if (roleWords.some((rw) => taskLower.includes(rw))) {
|
|
371
|
+
roleMatchCount++;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
const roleAlignment = review.tasks.length > 0 ? roleMatchCount / review.tasks.length : 1;
|
|
375
|
+
const roleDrift = 1 - roleAlignment;
|
|
376
|
+
factors.push({
|
|
377
|
+
factor: "role_alignment",
|
|
378
|
+
weight: 0.4,
|
|
379
|
+
evidence: `${roleMatchCount}/${review.tasks.length} tasks align with role "${identity.frontmatter.role}" (${(roleAlignment * 100).toFixed(0)}%)`
|
|
380
|
+
});
|
|
381
|
+
const offTopicMemories = review.memories.filter((m) => {
|
|
382
|
+
const mWords = m.text.toLowerCase().split(/\s+/);
|
|
383
|
+
return !mWords.some((w) => identityKeywords.has(w));
|
|
384
|
+
});
|
|
385
|
+
const offTopicRatio = review.memories.length > 0 ? offTopicMemories.length / review.memories.length : 0;
|
|
386
|
+
factors.push({
|
|
387
|
+
factor: "off_topic_work",
|
|
388
|
+
weight: 0.2,
|
|
389
|
+
evidence: `${offTopicMemories.length}/${review.memories.length} memories have no identity keyword overlap (${(offTopicRatio * 100).toFixed(0)}% off-topic)`
|
|
390
|
+
});
|
|
391
|
+
const rawScore = coverageDrift * 0.4 + roleDrift * 0.4 + offTopicRatio * 0.2;
|
|
392
|
+
const score = Math.max(0, Math.min(1, rawScore));
|
|
393
|
+
let narrative;
|
|
394
|
+
if (score < 0.2) {
|
|
395
|
+
narrative = `${agentId} is well-aligned with their identity. Recent work closely matches role definition.`;
|
|
396
|
+
} else if (score < 0.5) {
|
|
397
|
+
narrative = `${agentId} shows moderate drift (${(score * 100).toFixed(0)}%). Some work falls outside identity scope. Review factors for specifics.`;
|
|
398
|
+
} else {
|
|
399
|
+
narrative = `${agentId} shows significant drift (${(score * 100).toFixed(0)}%). Much of recent work does not align with identity. Consider reviewing task assignments.`;
|
|
400
|
+
}
|
|
401
|
+
return { score, factors, narrative };
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Score how far an agent's recent communication tone diverges from their
|
|
405
|
+
* role's emotional baseline.
|
|
406
|
+
*
|
|
407
|
+
* Scans recent memories and task results for presence/absence of target
|
|
408
|
+
* tones and anti-patterns defined in EMOTIONAL_BASELINES.
|
|
409
|
+
*
|
|
410
|
+
* Score 0.0 = perfectly on-tone, 1.0 = completely off-tone.
|
|
411
|
+
*/
|
|
412
|
+
calculateEmotionalDrift(agentId, review) {
|
|
413
|
+
const identity = getIdentity(agentId);
|
|
414
|
+
const role = identity?.frontmatter.role ?? agentId;
|
|
415
|
+
const baseline = getEmotionalBaseline(role);
|
|
416
|
+
if (!baseline) {
|
|
417
|
+
return {
|
|
418
|
+
score: 0,
|
|
419
|
+
baseline: null,
|
|
420
|
+
tonesPresent: [],
|
|
421
|
+
tonesMissing: [],
|
|
422
|
+
antiPatternsDetected: [],
|
|
423
|
+
narrative: `No emotional baseline defined for role "${role}". Skipping emotional drift check.`
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
const workText = [
|
|
427
|
+
...review.memories.map((m) => m.text),
|
|
428
|
+
...review.tasks.map((t) => t.title + " " + (t.result ?? ""))
|
|
429
|
+
].join(" ").toLowerCase();
|
|
430
|
+
if (workText.trim().length === 0) {
|
|
431
|
+
return {
|
|
432
|
+
score: 0,
|
|
433
|
+
baseline,
|
|
434
|
+
tonesPresent: [],
|
|
435
|
+
tonesMissing: baseline.tone,
|
|
436
|
+
antiPatternsDetected: [],
|
|
437
|
+
narrative: `No recent work found for ${agentId}. Cannot assess emotional drift.`
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
const TONE_SIGNALS = {
|
|
441
|
+
calm: ["calm", "measured", "steady", "composed", "clear-headed"],
|
|
442
|
+
direct: ["direct", "straightforward", "blunt", "upfront", "plainly"],
|
|
443
|
+
confident: ["confident", "certain", "assertive", "definitive"],
|
|
444
|
+
decisive: ["decisive", "decided", "committed", "chose", "picked"],
|
|
445
|
+
precise: ["precise", "exact", "specific", "pinpoint"],
|
|
446
|
+
technical: ["technical", "implementation", "architecture", "function", "module", "api", "endpoint"],
|
|
447
|
+
analytical: ["analytical", "analyzed", "compared", "measured", "benchmarked", "evaluated"],
|
|
448
|
+
creative: ["creative", "innovative", "original", "compelling", "storytelling"],
|
|
449
|
+
persuasive: ["persuasive", "compelling", "convincing", "engaging"],
|
|
450
|
+
"brand-conscious": ["brand", "design system", "consistency", "guidelines"],
|
|
451
|
+
strategic: ["strategic", "strategy", "goal", "objective", "roadmap"],
|
|
452
|
+
"ownership-oriented": ["ownership", "accountable", "responsible", "own"],
|
|
453
|
+
pragmatic: ["pragmatic", "practical", "realistic", "achievable"],
|
|
454
|
+
proactive: ["proactive", "anticipated", "surfaced", "flagged early"],
|
|
455
|
+
accountable: ["accountable", "ownership", "responsible", "followed through"],
|
|
456
|
+
terse: ["terse", "brief", "concise", "short"],
|
|
457
|
+
factual: ["factual", "fact", "evidence", "verified", "confirmed"],
|
|
458
|
+
focused: ["focused", "scoped", "targeted", "on-track"],
|
|
459
|
+
"production-focused": ["production", "rendered", "deliverable", "asset", "output"],
|
|
460
|
+
efficient: ["efficient", "optimized", "fast", "streamlined"],
|
|
461
|
+
"detail-oriented": ["detail", "checked", "verified", "dimensions", "specifications"],
|
|
462
|
+
"cost-aware": ["cost", "budget", "credits", "pricing"],
|
|
463
|
+
"evidence-based": ["evidence", "benchmark", "measured", "data", "metrics"],
|
|
464
|
+
skeptical: ["skeptical", "questioned", "challenged", "validated"],
|
|
465
|
+
thorough: ["thorough", "comprehensive", "exhaustive", "covered"],
|
|
466
|
+
strict: ["strict", "mandatory", "non-negotiable", "enforced"],
|
|
467
|
+
uncompromising: ["uncompromising", "no exceptions", "mandatory", "must"],
|
|
468
|
+
systematic: ["systematic", "pattern", "checklist", "audit"],
|
|
469
|
+
"evidence-driven": ["evidence", "finding", "file:line", "grep", "verified"]
|
|
470
|
+
};
|
|
471
|
+
const ANTI_PATTERN_SIGNALS = {
|
|
472
|
+
sugarcoating: ["sugarcoat", "softened", "downplay", "not that bad"],
|
|
473
|
+
hedging: ["maybe", "perhaps", "might", "could potentially", "not sure but"],
|
|
474
|
+
apologetic: ["sorry", "apologize", "my apologies", "forgive"],
|
|
475
|
+
passive: ["waiting", "monitoring", "will check later", "when available"],
|
|
476
|
+
vague: ["somehow", "something", "stuff", "things", "various"],
|
|
477
|
+
"hand-wavy": ["hand-wav", "roughly", "ballpark", "ish", "sort of"],
|
|
478
|
+
"deferring without opinion": ["up to you", "your call", "whatever you think", "no preference"],
|
|
479
|
+
"marketing-speak": ["synergy", "leverage", "paradigm", "disrupt", "revolutionary"],
|
|
480
|
+
"off-brand": ["off-brand", "inconsistent", "doesn't match"],
|
|
481
|
+
generic: ["generic", "boilerplate", "template-like"],
|
|
482
|
+
"verbose prose": ["in conclusion", "furthermore", "moreover", "it should be noted"],
|
|
483
|
+
speculation: ["speculate", "guess", "assume without", "probably means"],
|
|
484
|
+
"scope creep": ["also added", "while I was there", "bonus", "extra feature"],
|
|
485
|
+
"excuses for failing tests": ["flaky test", "not my fault", "works locally"],
|
|
486
|
+
hype: ["game-changer", "revolutionary", "incredible", "amazing"],
|
|
487
|
+
"rubber-stamping": ["looks good", "lgtm", "ship it", "approved without"],
|
|
488
|
+
"improvising on brand": ["took creative liberty", "my own spin", "deviated from brief"],
|
|
489
|
+
"ignoring budget": ["didn't check cost", "budget unknown"],
|
|
490
|
+
"deflecting responsibility": ["not my area", "someone else", "not my problem"],
|
|
491
|
+
"vague status updates": ["progressing", "making headway", "things are moving"],
|
|
492
|
+
"waiting passively": ["waiting on", "blocked by", "nothing I can do"],
|
|
493
|
+
"over-escalating": ["escalating everything", "need founder input on"]
|
|
494
|
+
};
|
|
495
|
+
const tonesPresent = [];
|
|
496
|
+
const tonesMissing = [];
|
|
497
|
+
for (const targetTone of baseline.tone) {
|
|
498
|
+
const signals = TONE_SIGNALS[targetTone] ?? [targetTone];
|
|
499
|
+
const found = signals.some((signal) => workText.includes(signal));
|
|
500
|
+
if (found) {
|
|
501
|
+
tonesPresent.push(targetTone);
|
|
502
|
+
} else {
|
|
503
|
+
tonesMissing.push(targetTone);
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
const antiPatternsDetected = [];
|
|
507
|
+
for (const avoidItem of baseline.avoid) {
|
|
508
|
+
const signals = ANTI_PATTERN_SIGNALS[avoidItem] ?? [avoidItem];
|
|
509
|
+
const found = signals.some((signal) => workText.includes(signal));
|
|
510
|
+
if (found) {
|
|
511
|
+
antiPatternsDetected.push(avoidItem);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
const toneCoverage = baseline.tone.length > 0 ? tonesPresent.length / baseline.tone.length : 1;
|
|
515
|
+
const toneGap = 1 - toneCoverage;
|
|
516
|
+
const antiPatternRatio = baseline.avoid.length > 0 ? antiPatternsDetected.length / baseline.avoid.length : 0;
|
|
517
|
+
const rawScore = toneGap * 0.6 + antiPatternRatio * 0.4;
|
|
518
|
+
const score = Math.max(0, Math.min(1, rawScore));
|
|
519
|
+
let narrative;
|
|
520
|
+
if (score < 0.15) {
|
|
521
|
+
narrative = `${agentId} is well-aligned with their emotional baseline. Communication tone matches role expectations.`;
|
|
522
|
+
} else if (score < 0.4) {
|
|
523
|
+
narrative = `${agentId} shows moderate emotional drift (${(score * 100).toFixed(0)}%).`;
|
|
524
|
+
if (tonesMissing.length > 0) {
|
|
525
|
+
narrative += ` Missing tones: ${tonesMissing.join(", ")}.`;
|
|
526
|
+
}
|
|
527
|
+
if (antiPatternsDetected.length > 0) {
|
|
528
|
+
narrative += ` Anti-patterns detected: ${antiPatternsDetected.join(", ")}.`;
|
|
529
|
+
}
|
|
530
|
+
} else {
|
|
531
|
+
narrative = `${agentId} shows significant emotional drift (${(score * 100).toFixed(0)}%).`;
|
|
532
|
+
if (tonesMissing.length > 0) {
|
|
533
|
+
narrative += ` Missing tones: ${tonesMissing.join(", ")}.`;
|
|
534
|
+
}
|
|
535
|
+
if (antiPatternsDetected.length > 0) {
|
|
536
|
+
narrative += ` Anti-patterns detected: ${antiPatternsDetected.join(", ")}.`;
|
|
537
|
+
}
|
|
538
|
+
narrative += ` Review whether task assignments match this agent's role persona.`;
|
|
539
|
+
}
|
|
540
|
+
return {
|
|
541
|
+
score,
|
|
542
|
+
baseline,
|
|
543
|
+
tonesPresent,
|
|
544
|
+
tonesMissing,
|
|
545
|
+
antiPatternsDetected,
|
|
546
|
+
narrative
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* Auto-compute calibration scores from completed tasks with assertions + time estimates.
|
|
551
|
+
* Returns structured calibration data for the dream cycle summary and telemetry.
|
|
552
|
+
*/
|
|
553
|
+
async computeCalibration(agentId, hours = 24) {
|
|
554
|
+
const client = getClient();
|
|
555
|
+
const since = new Date(Date.now() - hours * 60 * 60 * 1e3).toISOString();
|
|
556
|
+
const report = {
|
|
557
|
+
assertions: { total: 0, correct: 0, incorrect: 0, partial: 0, byType: {} },
|
|
558
|
+
estimation: { total: 0, avgRatio: 0, underestimates: 0, overestimates: 0, accurate: 0 },
|
|
559
|
+
whyWrong: {}
|
|
560
|
+
};
|
|
561
|
+
try {
|
|
562
|
+
const isAllAgents = agentId === "*";
|
|
563
|
+
const scope = sessionScopeFilter();
|
|
564
|
+
const tasks = await client.execute({
|
|
565
|
+
sql: isAllAgents ? `SELECT assertions, estimated_minutes, actual_minutes, estimate_confidence
|
|
566
|
+
FROM tasks WHERE updated_at >= ?
|
|
567
|
+
AND status IN ('needs_review', 'closed')
|
|
568
|
+
AND (assertions IS NOT NULL OR estimated_minutes IS NOT NULL)${scope.sql}` : `SELECT assertions, estimated_minutes, actual_minutes, estimate_confidence
|
|
569
|
+
FROM tasks WHERE assigned_to = ? AND updated_at >= ?
|
|
570
|
+
AND status IN ('needs_review', 'closed')
|
|
571
|
+
AND (assertions IS NOT NULL OR estimated_minutes IS NOT NULL)${scope.sql}`,
|
|
572
|
+
args: isAllAgents ? [since, ...scope.args] : [agentId, since, ...scope.args]
|
|
573
|
+
});
|
|
574
|
+
for (const row of tasks.rows) {
|
|
575
|
+
try {
|
|
576
|
+
const data = JSON.parse(String(row.assertions ?? "{}"));
|
|
577
|
+
const resolved = data.resolved ?? [];
|
|
578
|
+
for (const r of resolved) {
|
|
579
|
+
report.assertions.total++;
|
|
580
|
+
if (r.outcome === "correct") report.assertions.correct++;
|
|
581
|
+
else if (r.outcome === "incorrect") report.assertions.incorrect++;
|
|
582
|
+
else if (r.outcome === "partial") report.assertions.partial++;
|
|
583
|
+
const aType = r.type ?? "unknown";
|
|
584
|
+
if (!report.assertions.byType[aType]) {
|
|
585
|
+
report.assertions.byType[aType] = { total: 0, correct: 0 };
|
|
586
|
+
}
|
|
587
|
+
report.assertions.byType[aType].total++;
|
|
588
|
+
if (r.outcome === "correct") report.assertions.byType[aType].correct++;
|
|
589
|
+
if (r.outcome === "incorrect" && r.why_wrong) {
|
|
590
|
+
report.whyWrong[r.why_wrong] = (report.whyWrong[r.why_wrong] ?? 0) + 1;
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
} catch {
|
|
594
|
+
}
|
|
595
|
+
const est = Number(row.estimated_minutes);
|
|
596
|
+
const actual = Number(row.actual_minutes);
|
|
597
|
+
if (est > 0 && actual > 0) {
|
|
598
|
+
report.estimation.total++;
|
|
599
|
+
const ratio = actual / est;
|
|
600
|
+
report.estimation.avgRatio += ratio;
|
|
601
|
+
if (ratio > 1.3) report.estimation.underestimates++;
|
|
602
|
+
else if (ratio < 0.7) report.estimation.overestimates++;
|
|
603
|
+
else report.estimation.accurate++;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
if (report.estimation.total > 0) {
|
|
607
|
+
report.estimation.avgRatio = report.estimation.avgRatio / report.estimation.total;
|
|
608
|
+
}
|
|
609
|
+
} catch {
|
|
610
|
+
}
|
|
611
|
+
return report;
|
|
612
|
+
}
|
|
613
|
+
/**
|
|
614
|
+
* Run a full dream cycle: review → identify patterns → propose behaviors → drift check → calibration.
|
|
615
|
+
*/
|
|
616
|
+
async runDreamCycle(agentId, hours = 24) {
|
|
617
|
+
const review = await this.reviewRecentWork(agentId, hours);
|
|
618
|
+
const patterns = this.identifyPatterns(review);
|
|
619
|
+
const proposals = this.proposeBehaviors(patterns);
|
|
620
|
+
const drift = this.calculateDrift(agentId, review);
|
|
621
|
+
const emotionalDrift = this.calculateEmotionalDrift(agentId, review);
|
|
622
|
+
const calibration = await this.computeCalibration(agentId, hours);
|
|
623
|
+
const client = getClient();
|
|
624
|
+
try {
|
|
625
|
+
const { scoreBehaviors, detectConflicts, measureBehaviorLoad } = await import("./behavior-effectiveness-UP76GMOC.js");
|
|
626
|
+
const scores = await scoreBehaviors(agentId);
|
|
627
|
+
const conflicts = await detectConflicts(agentId);
|
|
628
|
+
await measureBehaviorLoad(agentId);
|
|
629
|
+
for (const score of scores) {
|
|
630
|
+
if (score.recommendation === "deactivate") {
|
|
631
|
+
await client.execute({
|
|
632
|
+
sql: "UPDATE behaviors SET active = 0, updated_at = ? WHERE id = ?",
|
|
633
|
+
args: [(/* @__PURE__ */ new Date()).toISOString(), score.behaviorId]
|
|
634
|
+
});
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
const deactivateCount = scores.filter((s) => s.recommendation === "deactivate").length;
|
|
638
|
+
if (conflicts.length > 0 || deactivateCount > 0) {
|
|
639
|
+
process.stderr.write(`[dreaming] Behavior health: ${conflicts.length} conflicts, ${deactivateCount} ineffective
|
|
640
|
+
`);
|
|
641
|
+
}
|
|
642
|
+
} catch {
|
|
643
|
+
}
|
|
644
|
+
let overdueProspective = [];
|
|
645
|
+
try {
|
|
646
|
+
const { getOverdueProspective, completeProspective } = await import("./prospective-memory-OAFZUODU.js");
|
|
647
|
+
const overdue = await getOverdueProspective(agentId);
|
|
648
|
+
overdueProspective = overdue.map((o) => ({
|
|
649
|
+
id: o.id,
|
|
650
|
+
content: o.content,
|
|
651
|
+
dueDate: o.dueDate ?? "",
|
|
652
|
+
recurrence: o.recurrence,
|
|
653
|
+
priority: o.priority
|
|
654
|
+
}));
|
|
655
|
+
for (const item of overdue) {
|
|
656
|
+
if (item.recurrence !== "once") {
|
|
657
|
+
await completeProspective(item.id);
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
} catch {
|
|
661
|
+
}
|
|
662
|
+
const result = {
|
|
663
|
+
review,
|
|
664
|
+
patterns,
|
|
665
|
+
proposals,
|
|
666
|
+
drift,
|
|
667
|
+
emotionalDrift,
|
|
668
|
+
calibration,
|
|
669
|
+
overdueProspective,
|
|
670
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
671
|
+
};
|
|
672
|
+
try {
|
|
673
|
+
const { randomUUID } = await import("crypto");
|
|
674
|
+
const id = randomUUID();
|
|
675
|
+
const calLines = [];
|
|
676
|
+
if (calibration.assertions.total > 0) {
|
|
677
|
+
const pct = Math.round(calibration.assertions.correct / calibration.assertions.total * 100);
|
|
678
|
+
calLines.push(`Assertion accuracy: ${pct}% (${calibration.assertions.correct}/${calibration.assertions.total})`);
|
|
679
|
+
for (const [type, data] of Object.entries(calibration.assertions.byType)) {
|
|
680
|
+
const tPct = data.total > 0 ? Math.round(data.correct / data.total * 100) : 0;
|
|
681
|
+
calLines.push(` ${type}: ${tPct}% (${data.correct}/${data.total})`);
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
if (calibration.estimation.total > 0) {
|
|
685
|
+
calLines.push(`Time estimation: avg ${calibration.estimation.avgRatio.toFixed(1)}x ratio (${calibration.estimation.accurate} accurate, ${calibration.estimation.underestimates} under, ${calibration.estimation.overestimates} over)`);
|
|
686
|
+
}
|
|
687
|
+
if (Object.keys(calibration.whyWrong).length > 0) {
|
|
688
|
+
calLines.push(`Why wrong: ${Object.entries(calibration.whyWrong).map(([k, v]) => `${k}=${v}`).join(", ")}`);
|
|
689
|
+
}
|
|
690
|
+
const emotionalLines = [];
|
|
691
|
+
if (emotionalDrift.baseline) {
|
|
692
|
+
emotionalLines.push(`Emotional drift: ${(emotionalDrift.score * 100).toFixed(0)}% \u2014 ${emotionalDrift.narrative}`);
|
|
693
|
+
if (emotionalDrift.tonesPresent.length > 0) emotionalLines.push(` Tones present: ${emotionalDrift.tonesPresent.join(", ")}`);
|
|
694
|
+
if (emotionalDrift.tonesMissing.length > 0) emotionalLines.push(` Tones missing: ${emotionalDrift.tonesMissing.join(", ")}`);
|
|
695
|
+
if (emotionalDrift.antiPatternsDetected.length > 0) emotionalLines.push(` Anti-patterns: ${emotionalDrift.antiPatternsDetected.join(", ")}`);
|
|
696
|
+
}
|
|
697
|
+
const summaryText = [
|
|
698
|
+
`DREAM CYCLE for ${agentId}`,
|
|
699
|
+
`Period: ${review.period.start} \u2192 ${review.period.end}`,
|
|
700
|
+
`Memories analyzed: ${review.memories.length}`,
|
|
701
|
+
`Tasks analyzed: ${review.tasks.length}`,
|
|
702
|
+
`Patterns found: ${patterns.length}`,
|
|
703
|
+
`Behavior proposals: ${proposals.length}`,
|
|
704
|
+
`Overdue reminders: ${overdueProspective.length}`,
|
|
705
|
+
`Drift score: ${drift.score.toFixed(2)} \u2014 ${drift.narrative}`,
|
|
706
|
+
emotionalLines.length > 0 ? `
|
|
707
|
+
Emotional Baseline:
|
|
708
|
+
${emotionalLines.join("\n")}` : "",
|
|
709
|
+
calLines.length > 0 ? `
|
|
710
|
+
Calibration:
|
|
711
|
+
${calLines.join("\n")}` : "",
|
|
712
|
+
patterns.length > 0 ? `
|
|
713
|
+
Patterns:
|
|
714
|
+
${patterns.map((p) => `- [${p.type}] ${p.description}`).join("\n")}` : "",
|
|
715
|
+
proposals.length > 0 ? `
|
|
716
|
+
Proposals:
|
|
717
|
+
${proposals.map((p) => `- [${p.priority}/${p.domain}] ${p.text}`).join("\n")}` : "",
|
|
718
|
+
overdueProspective.length > 0 ? `
|
|
719
|
+
Overdue Reminders:
|
|
720
|
+
${overdueProspective.map((o) => `- [P${o.priority}] ${o.content} (due ${o.dueDate}${o.recurrence !== "once" ? `, ${o.recurrence}` : ""})`).join("\n")}` : ""
|
|
721
|
+
].filter(Boolean).join("\n");
|
|
722
|
+
await client.execute({
|
|
723
|
+
sql: `INSERT INTO memories (id, agent_id, raw_text, memory_type, importance, timestamp, status, agent_role, session_id, tool_name, project_name, has_error, version)
|
|
724
|
+
VALUES (?, ?, ?, 'observation', 7, ?, 'active', 'system', 'dream-cycle', 'dreaming', '', 0, 0)`,
|
|
725
|
+
args: [id, agentId, summaryText, result.timestamp]
|
|
726
|
+
});
|
|
727
|
+
} catch {
|
|
728
|
+
}
|
|
729
|
+
return result;
|
|
730
|
+
}
|
|
731
|
+
};
|
|
732
|
+
|
|
733
|
+
export {
|
|
734
|
+
DreamingEngine
|
|
735
|
+
};
|