@askexenow/exe-os 0.9.166 → 0.9.167

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.
Files changed (244) hide show
  1. package/deploy/compose/backup.sh +45 -7
  2. package/deploy/compose/setup.sh +7 -0
  3. package/deploy/stack-manifests/v0.9.json +40 -1
  4. package/dist/{active-agent-R2KMWMR6.js → active-agent-DGTIJN2U.js} +2 -2
  5. package/dist/{active-agent-CYMM3QQA.js → active-agent-HVMLG6FH.js} +2 -2
  6. package/dist/{agentic-ontology-GKAKYNPE.js → agentic-ontology-S54AFODT.js} +1 -1
  7. package/dist/{backfill-metadata-Z5SYUWAV.js → backfill-metadata-74IWETRF.js} +4 -3
  8. package/dist/{behaviors-QGU6XI5R.js → behaviors-LZVAVHTC.js} +2 -2
  9. package/dist/bin/agentic-ontology-backfill.js +5 -4
  10. package/dist/bin/agentic-reflection-backfill.js +6 -5
  11. package/dist/bin/agentic-semantic-label.js +5 -4
  12. package/dist/bin/backfill-conversations.js +5 -4
  13. package/dist/bin/backfill-responses.js +5 -4
  14. package/dist/bin/backfill-vectors.js +6 -5
  15. package/dist/bin/bulk-sync-postgres.js +6 -5
  16. package/dist/bin/cleanup-stale-review-tasks.js +9 -9
  17. package/dist/bin/cli.js +16 -13
  18. package/dist/bin/daily-summary.js +0 -217
  19. package/dist/bin/deferred-daemon-restart.js +8 -0
  20. package/dist/bin/exe-agent-config.js +1 -1
  21. package/dist/bin/exe-agent.js +10 -10
  22. package/dist/bin/exe-assign.js +7 -6
  23. package/dist/bin/exe-boot.js +20 -19
  24. package/dist/bin/exe-call.js +4 -4
  25. package/dist/bin/exe-cloud.js +3 -3
  26. package/dist/bin/exe-dispatch.js +9 -9
  27. package/dist/bin/exe-doctor.js +1 -1
  28. package/dist/bin/exe-export-behaviors.js +7 -6
  29. package/dist/bin/exe-forget.js +6 -5
  30. package/dist/bin/exe-gateway.js +5 -5
  31. package/dist/bin/exe-heartbeat.js +9 -9
  32. package/dist/bin/exe-kill.js +13 -12
  33. package/dist/bin/exe-launch-agent.js +11 -10
  34. package/dist/bin/exe-new-employee.js +6 -6
  35. package/dist/bin/exe-pending-messages.js +10 -10
  36. package/dist/bin/exe-pending-notifications.js +9 -9
  37. package/dist/bin/exe-pending-reviews.js +9 -9
  38. package/dist/bin/exe-rename.js +4 -4
  39. package/dist/bin/exe-review.js +12 -11
  40. package/dist/bin/exe-search.js +5 -4
  41. package/dist/bin/exe-session-cleanup.js +19 -14
  42. package/dist/bin/exe-settings.js +3 -3
  43. package/dist/bin/exe-start-codex.js +11 -10
  44. package/dist/bin/exe-start-opencode.js +8 -7
  45. package/dist/bin/exe-status.js +10 -10
  46. package/dist/bin/exe-team.js +2 -2
  47. package/dist/bin/git-sweep.js +9 -9
  48. package/dist/bin/graph-backfill.js +4 -3
  49. package/dist/bin/graph-export.js +5 -4
  50. package/dist/bin/import-history.js +171 -0
  51. package/dist/bin/install-launchd.js +41 -0
  52. package/dist/bin/install.js +50 -74
  53. package/dist/bin/intercom-check.js +4 -4
  54. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  55. package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
  56. package/dist/bin/pre-publish.js +1 -1
  57. package/dist/bin/scan-tasks.js +22 -12
  58. package/dist/bin/setup.js +1 -1
  59. package/dist/bin/shard-migrate.js +4 -3
  60. package/dist/bin/stack-update.js +61 -857
  61. package/dist/bin/vps-backup.js +170 -0
  62. package/dist/bin/vps-health-gate.js +232 -0
  63. package/dist/{capacity-monitor-ZEAE4WP2.js → capacity-monitor-JBZB2S4P.js} +10 -10
  64. package/dist/{catchup-brief-OGWCHENC.js → catchup-brief-HE2EMZS5.js} +12 -11
  65. package/dist/{chunk-DJJNB47C.js → chunk-27DO3EZO.js} +1 -1
  66. package/dist/{chunk-45FYZIHI.js → chunk-32YUET3Y.js} +2 -2
  67. package/dist/{chunk-Y75ECPO5.js → chunk-3FW5LUGI.js} +2 -2
  68. package/dist/{chunk-4OZGQZ4U.js → chunk-3M3O56VT.js} +636 -179
  69. package/dist/{chunk-77WQOD6J.js → chunk-4CXUZ4NI.js} +2 -2
  70. package/dist/{chunk-PBXWPHEK.js → chunk-4VEHJZ6R.js} +1 -1
  71. package/dist/{chunk-TH22QIEC.js → chunk-6A4COFDG.js} +1 -1
  72. package/dist/{chunk-ACBTCC2L.js → chunk-7OJH2A6I.js} +1 -1
  73. package/dist/{chunk-NHCOTCI6.js → chunk-A7SGEBXJ.js} +2 -2
  74. package/dist/{chunk-5MPQSNZF.js → chunk-AUTCT6AY.js} +1 -1
  75. package/dist/{chunk-OEKSTOTE.js → chunk-AZAZ2C75.js} +1 -1
  76. package/dist/chunk-CHCA3ZM2.js +167 -0
  77. package/dist/{chunk-X347L57O.js → chunk-CSTJQDOE.js} +4 -3
  78. package/dist/{chunk-B234R3VW.js → chunk-D7WLV6WD.js} +2 -2
  79. package/dist/{chunk-GMXF3AHJ.js → chunk-DGAONW36.js} +1 -1
  80. package/dist/chunk-EAT5YL3W.js +229 -0
  81. package/dist/{chunk-OD4H5YCJ.js → chunk-EKTQE2R5.js} +8 -8
  82. package/dist/{chunk-Z44PC42G.js → chunk-ELUBA7XL.js} +2 -2
  83. package/dist/{chunk-ZWS6XQER.js → chunk-F5AKOE4P.js} +7 -7
  84. package/dist/{chunk-T5YULDDO.js → chunk-FVI4UBKO.js} +27 -4
  85. package/dist/{chunk-ESRI7MFI.js → chunk-GAN7PW6G.js} +28 -24
  86. package/dist/{chunk-K4OWYJSP.js → chunk-GM2WZTG3.js} +2 -2
  87. package/dist/{chunk-TAB5QGIK.js → chunk-GZYQTPTF.js} +3 -3
  88. package/dist/{chunk-CXDU5DE3.js → chunk-IAUNGATJ.js} +1 -1
  89. package/dist/{chunk-YS63NS6M.js → chunk-IHSM5GR4.js} +1 -1
  90. package/dist/{chunk-23PTS2ZD.js → chunk-IP7KJAUW.js} +117 -15
  91. package/dist/{chunk-D6IMJAV2.js → chunk-J64P2LB2.js} +2 -2
  92. package/dist/{chunk-CXAVSQZM.js → chunk-JXMSCKRM.js} +1 -1
  93. package/dist/{chunk-RQMK3IQH.js → chunk-K4OTJP6N.js} +14 -7
  94. package/dist/{chunk-L7ROZR2H.js → chunk-KXAUMIOX.js} +1 -1
  95. package/dist/{chunk-TPC3LAP7.js → chunk-LGY2BIOT.js} +13 -0
  96. package/dist/{chunk-RPIDSBK7.js → chunk-LLHRJEE4.js} +3 -3
  97. package/dist/{chunk-6WG2VIKC.js → chunk-LM7H6XU4.js} +1 -1
  98. package/dist/{chunk-Y6GMKZZ2.js → chunk-LOFFGJSY.js} +150 -23
  99. package/dist/{chunk-W7SDGBEC.js → chunk-MFI5OXYW.js} +52 -84
  100. package/dist/{chunk-KNPEVPYG.js → chunk-MSSQWF6X.js} +2 -2
  101. package/dist/{chunk-QIQAO3VG.js → chunk-NEFFFKMD.js} +3 -3
  102. package/dist/{chunk-YUC552KZ.js → chunk-NEHONJJC.js} +3 -3
  103. package/dist/{chunk-KZ7SXZ2V.js → chunk-NFMQRLCD.js} +1 -1
  104. package/dist/{chunk-52HCNDPG.js → chunk-O4TATDOV.js} +1 -1
  105. package/dist/{chunk-AR3OYGLB.js → chunk-PEFBRL4S.js} +28 -6
  106. package/dist/{chunk-AEUXUEJG.js → chunk-PEXVU3HU.js} +5 -3
  107. package/dist/chunk-Q2G5C3HV.js +217 -0
  108. package/dist/{chunk-KOO56JVC.js → chunk-Q6N6LDEJ.js} +1 -1
  109. package/dist/{chunk-TXSJ2L5O.js → chunk-QI4IXJN7.js} +1 -1
  110. package/dist/{chunk-HLVQ5Y7B.js → chunk-RE4VLK45.js} +1 -1
  111. package/dist/{chunk-TF6SZGDT.js → chunk-SA2PH6WY.js} +1 -1
  112. package/dist/{chunk-5RSYY7BE.js → chunk-SJYOPYXH.js} +117 -9
  113. package/dist/{chunk-PJGHBANY.js → chunk-TTJE7CCU.js} +1 -1
  114. package/dist/{chunk-A7KEWR6S.js → chunk-TXWQPL2U.js} +1 -1
  115. package/dist/{chunk-XXSJ35J5.js → chunk-U5ZH52FB.js} +2 -2
  116. package/dist/{chunk-G4FDG3LK.js → chunk-UVNDLF74.js} +63 -40
  117. package/dist/{chunk-5OD3AFRW.js → chunk-V6RCZ25F.js} +1 -1
  118. package/dist/{chunk-LHMBIFKD.js → chunk-VYNNN2S3.js} +4 -4
  119. package/dist/chunk-WCYT54XP.js +934 -0
  120. package/dist/{chunk-5AMSQRHT.js → chunk-XGYSTVUH.js} +1 -1
  121. package/dist/{chunk-MKZBHM6A.js → chunk-XLWF3C4R.js} +4 -4
  122. package/dist/{chunk-YL36L2SN.js → chunk-Y7YHLV57.js} +1 -1
  123. package/dist/{chunk-HZC4MR4H.js → chunk-YBKB2PXY.js} +1 -1
  124. package/dist/{chunk-NWM3A4TK.js → chunk-ZDNLKXZA.js} +1 -1
  125. package/dist/{chunk-O7KW6QMH.js → chunk-ZW4TKQUM.js} +15 -5
  126. package/dist/{chunk-6BURHBE6.js → chunk-ZXB44R3E.js} +32 -11
  127. package/dist/co-occurrence-WCED475N.js +73 -0
  128. package/dist/{code-context-index-B6VIWPSF.js → code-context-index-LSZ3DKTJ.js} +2 -2
  129. package/dist/{crdt-sync-XA22KI3S.js → crdt-sync-PBXZTHZC.js} +1 -1
  130. package/dist/{crm-webhook-CIZNOEY4.js → crm-webhook-W7Q25VZU.js} +2 -2
  131. package/dist/{cto-delegation-gate-H5IULFRC.js → cto-delegation-gate-JKULOLMC.js} +8 -8
  132. package/dist/{daemon-orchestration-VO5XQIJL.js → daemon-orchestration-CHV6MB42.js} +13 -11
  133. package/dist/{exe-drift-DMT75WR3.js → exe-drift-PW36OULT.js} +2 -2
  134. package/dist/{exe-export-2RZWOSX6.js → exe-export-XQOD3KE6.js} +6 -5
  135. package/dist/{exe-import-NFNYATHL.js → exe-import-QOFP67LW.js} +6 -5
  136. package/dist/{exe-key-4D7CF3BU.js → exe-key-WQ34UZR6.js} +1 -1
  137. package/dist/{fast-db-init-LAEISZQ2.js → fast-db-init-UKETGWQI.js} +1 -1
  138. package/dist/gateway/index.js +6 -6
  139. package/dist/{git-staleness-M46AYLPP.js → git-staleness-ATV5CGAP.js} +1 -1
  140. package/dist/{git-task-sweep-PXOS56YT.js → git-task-sweep-KXZRIP4T.js} +9 -9
  141. package/dist/{global-procedures-KROQQX54.js → global-procedures-G6IKCYKM.js} +3 -3
  142. package/dist/{graph-auto-extract-QJ2BBJM2.js → graph-auto-extract-ZJXJOLE2.js} +1 -1
  143. package/dist/hooks/bug-report-worker.js +10 -10
  144. package/dist/hooks/codex-stop-task-finalizer.js +10 -10
  145. package/dist/hooks/commit-complete.js +11 -11
  146. package/dist/hooks/error-recall.js +8 -7
  147. package/dist/hooks/exe-heartbeat-hook.js +2 -2
  148. package/dist/hooks/ingest-worker.js +3 -3
  149. package/dist/hooks/ingest.js +9 -9
  150. package/dist/hooks/instructions-loaded.js +3 -3
  151. package/dist/hooks/notification.js +3 -3
  152. package/dist/hooks/post-compact.js +10 -10
  153. package/dist/hooks/post-tool-combined.js +5 -5
  154. package/dist/hooks/pre-compact.js +16 -16
  155. package/dist/hooks/pre-tool-use.js +14 -14
  156. package/dist/hooks/prompt-submit.js +30 -29
  157. package/dist/hooks/session-end.js +46 -25
  158. package/dist/hooks/session-start.js +48 -10
  159. package/dist/hooks/stop.js +17 -17
  160. package/dist/hooks/subagent-stop.js +10 -10
  161. package/dist/hooks/summary-worker.js +17 -16
  162. package/dist/index.js +17 -17
  163. package/dist/{installer-SDBLJBAB.js → installer-DE2LH5EC.js} +4 -4
  164. package/dist/{installer-ZA6QNQ4P.js → installer-M2MDS7HC.js} +4 -4
  165. package/dist/{installer-6KAY6LD6.js → installer-VE23YFXU.js} +4 -4
  166. package/dist/{intercom-queue-K3DVKSPJ.js → intercom-queue-RNM6EPGA.js} +1 -1
  167. package/dist/keyword-extractor-UJHFWVZE.js +11 -0
  168. package/dist/lib/cloud-sync.js +3 -3
  169. package/dist/lib/consolidation.js +5 -4
  170. package/dist/lib/database.js +1 -1
  171. package/dist/lib/db-daemon-client.js +1 -1
  172. package/dist/lib/db.js +1 -1
  173. package/dist/lib/embed-worker.js +98 -0
  174. package/dist/lib/embedder.js +2 -2
  175. package/dist/lib/employee-templates.js +4 -4
  176. package/dist/lib/employees.js +1 -1
  177. package/dist/lib/exe-daemon-client.js +1 -1
  178. package/dist/lib/exe-daemon.js +523 -500
  179. package/dist/lib/hybrid-search.js +5 -6
  180. package/dist/lib/identity.js +1 -1
  181. package/dist/lib/messaging.js +9 -9
  182. package/dist/lib/reminders.js +2 -2
  183. package/dist/lib/schedules.js +5 -4
  184. package/dist/lib/skill-learning.js +3 -3
  185. package/dist/lib/store.js +4 -3
  186. package/dist/lib/task-router.js +2 -2
  187. package/dist/lib/tasks.js +9 -9
  188. package/dist/lib/tmux-routing.js +8 -8
  189. package/dist/lib/tmux-transport.js +1 -1
  190. package/dist/lib/token-spend.js +2 -2
  191. package/dist/lib/transport.js +2 -2
  192. package/dist/lib/ws-client.js +3 -1
  193. package/dist/mcp/register-tools.js +54 -51
  194. package/dist/mcp/server.js +58 -55
  195. package/dist/mcp/tools/complete-reminder.js +3 -3
  196. package/dist/mcp/tools/create-reminder.js +3 -3
  197. package/dist/mcp/tools/create-task.js +11 -11
  198. package/dist/mcp/tools/deactivate-behavior.js +4 -4
  199. package/dist/mcp/tools/list-reminders.js +3 -3
  200. package/dist/mcp/tools/list-tasks.js +11 -11
  201. package/dist/mcp/tools/send-message.js +11 -11
  202. package/dist/mcp/tools/update-task.js +10 -10
  203. package/dist/{mcp-http-config-LK2EDOEJ.js → mcp-http-config-Z2E4VUOF.js} +2 -2
  204. package/dist/{memory-cards-V3DKSRWL.js → memory-cards-SFDKDIAW.js} +1 -1
  205. package/dist/memory-graph-extractor-YD4GNH7T.js +16 -0
  206. package/dist/{memory-poisoning-defense-3B75HS74.js → memory-poisoning-defense-VEGNFELN.js} +1 -1
  207. package/dist/{memory-queue-client-LFPZPPQA.js → memory-queue-client-5HB2XUH7.js} +2 -2
  208. package/dist/{memory-reflection-HTDAUUE5.js → memory-reflection-MTPRQNI6.js} +2 -2
  209. package/dist/{notifications-76VCYXWW.js → notifications-6TCE6OBG.js} +8 -8
  210. package/dist/{orchestrator-CBNSBI5P.js → orchestrator-W2GYJR23.js} +10 -10
  211. package/dist/{plan-limits-SOR3QXKV.js → plan-limits-4EP46323.js} +2 -2
  212. package/dist/{projection-worker-FK5YOEIL.js → projection-worker-EBUYNMU2.js} +1 -1
  213. package/dist/{review-polling-ZLNDUKL4.js → review-polling-2N7KQFZZ.js} +9 -9
  214. package/dist/runtime/index.js +15 -15
  215. package/dist/{session-events-CUSPL25D.js → session-events-K47FHAXJ.js} +9 -9
  216. package/dist/{session-kill-telemetry-FLBRHBDP.js → session-kill-telemetry-275YUXM5.js} +2 -2
  217. package/dist/{session-scope-PX2ABSJO.js → session-scope-XSFJZEER.js} +8 -8
  218. package/dist/{setup-wizard-Y6PBZGFX.js → setup-wizard-UEO7HYLQ.js} +1 -1
  219. package/dist/{skill-refinement-L7PGKCYO.js → skill-refinement-WXBTANDQ.js} +1 -1
  220. package/dist/stack-update-2B2UXREV.js +50 -0
  221. package/dist/{task-enforcement-7FUILB63.js → task-enforcement-2JIJSXPU.js} +14 -16
  222. package/dist/{task-scope-2N45TE32.js → task-scope-W73Z3XWE.js} +8 -8
  223. package/dist/{tasks-crud-ADLCGHGH.js → tasks-crud-HPJKI3QQ.js} +8 -8
  224. package/dist/{tasks-review-PJ2DUI6N.js → tasks-review-MXLMPGNZ.js} +8 -8
  225. package/dist/{token-budget-T5DFXVTM.js → token-budget-BA46CVHX.js} +1 -1
  226. package/dist/{tool-capability-index-6JJN6ZRC.js → tool-capability-index-42VVN5BS.js} +1 -1
  227. package/dist/{tool-telemetry-72PVO5HV.js → tool-telemetry-GZ5E2AUL.js} +1 -1
  228. package/dist/tui/App.js +22 -18
  229. package/dist/{tui-data-63JHE6EZ.js → tui-data-PVXWQCJX.js} +8 -8
  230. package/dist/{worker-gate-REVBJUZ6.js → worker-gate-WTTK64TK.js} +1 -1
  231. package/dist/{workflow-engine-W2WNHJG5.js → workflow-engine-LT3WTT7V.js} +2 -2
  232. package/package.json +1 -1
  233. package/release-notes.json +209 -209
  234. /package/dist/{chunk-BNOZUS6J.js → chunk-6VVCAVRT.js} +0 -0
  235. /package/dist/{chunk-IC7GKK6I.js → chunk-CWQZZ7X3.js} +0 -0
  236. /package/dist/{chunk-ZI2ZVERO.js → chunk-EIW5GOBW.js} +0 -0
  237. /package/dist/{chunk-2BGGDNRD.js → chunk-IPPJEM26.js} +0 -0
  238. /package/dist/{chunk-4ISDU5KR.js → chunk-K5UR73PM.js} +0 -0
  239. /package/dist/{chunk-ZWRTVUQ6.js → chunk-KIMO5S45.js} +0 -0
  240. /package/dist/{chunk-S2FX5KJ4.js → chunk-WBLILGAP.js} +0 -0
  241. /package/dist/{core-memory-PCJ3L46L.js → core-memory-RAC6M67J.js} +0 -0
  242. /package/dist/{entity-boost-GHFPE6A2.js → entity-boost-5FIRFRDC.js} +0 -0
  243. /package/dist/{message-queue-client-CHRQYBH5.js → message-queue-client-PTQ2S7D7.js} +0 -0
  244. /package/dist/{wiki-acl-QYRAYYVQ.js → wiki-acl-MSDRCIAI.js} +0 -0
@@ -19,7 +19,7 @@ import {
19
19
  import {
20
20
  createCRMWebhookHandler,
21
21
  parseTwentyWebhook
22
- } from "./chunk-OEKSTOTE.js";
22
+ } from "./chunk-AZAZ2C75.js";
23
23
  import {
24
24
  BotRegistry,
25
25
  BotRuntime,
@@ -42,7 +42,7 @@ import {
42
42
  retryWithBackoff,
43
43
  routeMessage,
44
44
  validateGatewayConfig
45
- } from "./chunk-KNPEVPYG.js";
45
+ } from "./chunk-MSSQWF6X.js";
46
46
  import {
47
47
  OllamaProvider
48
48
  } from "./chunk-FWFFZGSC.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getGlobalProceduresBlock
3
- } from "./chunk-NHCOTCI6.js";
3
+ } from "./chunk-A7SGEBXJ.js";
4
4
 
5
5
  // src/lib/employee-templates.ts
6
6
  var BASE_OPERATING_PROCEDURES = `
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-5RSYY7BE.js";
3
+ } from "./chunk-SJYOPYXH.js";
4
4
 
5
5
  // src/lib/reminders.ts
6
6
  import crypto from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listReminders
3
- } from "./chunk-TH22QIEC.js";
3
+ } from "./chunk-6A4COFDG.js";
4
4
 
5
5
  // src/mcp/tools/list-reminders.ts
6
6
  import { z } from "zod";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  PLATFORM_PROCEDURES,
3
3
  PLATFORM_PROCEDURE_TITLES
4
- } from "./chunk-TPC3LAP7.js";
4
+ } from "./chunk-LGY2BIOT.js";
5
5
  import {
6
6
  getClient
7
- } from "./chunk-5RSYY7BE.js";
7
+ } from "./chunk-SJYOPYXH.js";
8
8
 
9
9
  // src/lib/global-procedures.ts
10
10
  import { randomUUID } from "crypto";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  executeAction,
3
3
  substituteTemplate
4
- } from "./chunk-ZWRTVUQ6.js";
4
+ } from "./chunk-KIMO5S45.js";
5
5
 
6
6
  // src/automation/workflow-engine.ts
7
7
  import { randomUUID } from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  processCRMEvent
3
- } from "./chunk-ZWRTVUQ6.js";
3
+ } from "./chunk-KIMO5S45.js";
4
4
 
5
5
  // src/gateway/adapters/crm-webhook.ts
6
6
  function parseTwentyWebhook(payload) {
@@ -0,0 +1,167 @@
1
+ // src/lib/keyword-extractor.ts
2
+ var STOP_WORDS = /* @__PURE__ */ new Set([
3
+ "the",
4
+ "a",
5
+ "an",
6
+ "is",
7
+ "are",
8
+ "was",
9
+ "were",
10
+ "be",
11
+ "been",
12
+ "being",
13
+ "have",
14
+ "has",
15
+ "had",
16
+ "do",
17
+ "does",
18
+ "did",
19
+ "will",
20
+ "would",
21
+ "could",
22
+ "should",
23
+ "may",
24
+ "might",
25
+ "shall",
26
+ "can",
27
+ "need",
28
+ "must",
29
+ "to",
30
+ "of",
31
+ "in",
32
+ "for",
33
+ "on",
34
+ "with",
35
+ "at",
36
+ "by",
37
+ "from",
38
+ "as",
39
+ "into",
40
+ "through",
41
+ "during",
42
+ "before",
43
+ "after",
44
+ "above",
45
+ "below",
46
+ "between",
47
+ "out",
48
+ "off",
49
+ "over",
50
+ "under",
51
+ "again",
52
+ "further",
53
+ "then",
54
+ "once",
55
+ "here",
56
+ "there",
57
+ "when",
58
+ "where",
59
+ "why",
60
+ "how",
61
+ "all",
62
+ "each",
63
+ "every",
64
+ "both",
65
+ "few",
66
+ "more",
67
+ "most",
68
+ "other",
69
+ "some",
70
+ "such",
71
+ "no",
72
+ "not",
73
+ "only",
74
+ "own",
75
+ "same",
76
+ "so",
77
+ "than",
78
+ "too",
79
+ "very",
80
+ "just",
81
+ "and",
82
+ "but",
83
+ "or",
84
+ "if",
85
+ "while",
86
+ "because",
87
+ "until",
88
+ "about",
89
+ "this",
90
+ "that",
91
+ "these",
92
+ "those",
93
+ "it",
94
+ "its",
95
+ "they",
96
+ "them",
97
+ "their",
98
+ "we",
99
+ "our",
100
+ "you",
101
+ "your",
102
+ "he",
103
+ "she",
104
+ "his",
105
+ "her"
106
+ ]);
107
+ var FILE_PATH_RE = /(?:[\w@.-]+\/)+[\w@.-]+\.[\w]+/g;
108
+ var DOTTED_ID_RE = /\b[a-zA-Z_][\w]*(?:\.[\w]+){1,5}\b/g;
109
+ var CAMEL_CASE_RE = /\b[a-z][a-zA-Z0-9]*[A-Z][a-zA-Z0-9]*\b/g;
110
+ var PASCAL_CASE_RE = /\b[A-Z][a-z]+(?:[A-Z][a-z]+)+\b/g;
111
+ var UPPER_SNAKE_RE = /\b[A-Z][A-Z0-9_]{2,}\b/g;
112
+ var SNAKE_CASE_RE = /\b[a-z]+_[a-z_]+\b/g;
113
+ var KEBAB_FILE_RE = /\b[\w]+-[\w-]+\.[\w]+\b/g;
114
+ var ERROR_CODE_RE = /\b(?:E[A-Z]+|ERR_[A-Z_]+|[0-9]{3})\b/g;
115
+ function extractKeywords(text) {
116
+ if (!text || text.length === 0) return [];
117
+ const keywords = /* @__PURE__ */ new Set();
118
+ for (const match of text.matchAll(FILE_PATH_RE)) {
119
+ keywords.add(match[0]);
120
+ }
121
+ for (const match of text.matchAll(DOTTED_ID_RE)) {
122
+ if (match[0].length > 4) keywords.add(match[0]);
123
+ }
124
+ for (const match of text.matchAll(KEBAB_FILE_RE)) {
125
+ keywords.add(match[0]);
126
+ }
127
+ for (const match of text.matchAll(CAMEL_CASE_RE)) {
128
+ keywords.add(match[0]);
129
+ }
130
+ for (const match of text.matchAll(PASCAL_CASE_RE)) {
131
+ keywords.add(match[0]);
132
+ }
133
+ for (const match of text.matchAll(UPPER_SNAKE_RE)) {
134
+ if (!STOP_WORDS.has(match[0].toLowerCase())) {
135
+ keywords.add(match[0]);
136
+ }
137
+ }
138
+ for (const match of text.matchAll(SNAKE_CASE_RE)) {
139
+ if (match[0].length > 4 && !STOP_WORDS.has(match[0])) {
140
+ keywords.add(match[0]);
141
+ }
142
+ }
143
+ for (const match of text.matchAll(ERROR_CODE_RE)) {
144
+ keywords.add(match[0]);
145
+ }
146
+ const words = text.replace(/[^a-zA-Z0-9\s_.-]/g, " ").split(/\s+/).filter((w) => w.length >= 3 && !STOP_WORDS.has(w.toLowerCase()));
147
+ for (const word of words) {
148
+ if (word.length >= 4 && !STOP_WORDS.has(word.toLowerCase())) {
149
+ keywords.add(word);
150
+ }
151
+ }
152
+ return [...keywords];
153
+ }
154
+ function keywordsToString(keywords) {
155
+ const unique = [...new Set(keywords)];
156
+ return unique.slice(0, 200).join(" ");
157
+ }
158
+ function stringToKeywords(stored) {
159
+ if (!stored) return [];
160
+ return stored.split(/\s+/).filter((k) => k.length > 0);
161
+ }
162
+
163
+ export {
164
+ extractKeywords,
165
+ keywordsToString,
166
+ stringToKeywords
167
+ };
@@ -39,7 +39,8 @@ var TmuxTransport = class {
39
39
  }
40
40
  }
41
41
  sendKeys(target, keys) {
42
- execFileSync("tmux", ["send-keys", "-t", target, keys, "Enter"], QUIET);
42
+ execFileSync("tmux", ["send-keys", "-t", target, keys], QUIET);
43
+ execFileSync("tmux", ["send-keys", "-t", target, "Enter"], QUIET);
43
44
  }
44
45
  /**
45
46
  * Send text as literal characters, then submit with Enter as a separate call.
@@ -87,10 +88,10 @@ var TmuxTransport = class {
87
88
  }
88
89
  spawn(name, config) {
89
90
  try {
90
- const args = ["new-session", "-d", "-s", name];
91
+ const args = ["new-session", "-d", "-s", name, "-x", "200", "-y", "50"];
91
92
  if (config.cwd) args.push("-c", config.cwd);
92
- args.push(config.command);
93
93
  execFileSync("tmux", args);
94
+ execFileSync("tmux", ["send-keys", "-t", name, config.command, "Enter"]);
94
95
  return { sessionName: name };
95
96
  } catch (e) {
96
97
  return { sessionName: name, error: `spawn failed: ${e}` };
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  sendMessage
3
- } from "./chunk-O7KW6QMH.js";
3
+ } from "./chunk-ZW4TKQUM.js";
4
4
  import {
5
5
  getActiveAgent
6
- } from "./chunk-6WG2VIKC.js";
6
+ } from "./chunk-LM7H6XU4.js";
7
7
 
8
8
  // src/mcp/tools/send-message.ts
9
9
  import { z } from "zod";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listBehaviors
3
- } from "./chunk-PJGHBANY.js";
3
+ } from "./chunk-TTJE7CCU.js";
4
4
  import {
5
5
  loadConfigSync
6
6
  } from "./chunk-4GXRETYL.js";
@@ -0,0 +1,229 @@
1
+ import {
2
+ getClient
3
+ } from "./chunk-SJYOPYXH.js";
4
+
5
+ // src/lib/memory-graph-extractor.ts
6
+ function entityId(type, name) {
7
+ return `mem:${type}:${name.toLowerCase().replace(/[^a-z0-9]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "")}`;
8
+ }
9
+ function relationshipId(sourceId, targetId, relType) {
10
+ return `rel:${sourceId}:${relType}:${targetId}`;
11
+ }
12
+ var FILE_EXT_PATTERN = /(?:^|\s|['"`(])([a-zA-Z0-9_./-]+\.(?:ts|js|tsx|jsx|json|md|py|rs|go|toml|yaml|yml|css|html|sql|sh|bash|zsh|env|conf|cfg|xml|csv|lock))\b/g;
13
+ var PATH_PATTERN = /(?:^|\s|['"`(])((?:src|lib|bin|dist|tests?|__tests__|node_modules|\.?\w+)\/[a-zA-Z0-9_./-]+)/g;
14
+ function extractFilePaths(text) {
15
+ const paths = /* @__PURE__ */ new Set();
16
+ let match;
17
+ FILE_EXT_PATTERN.lastIndex = 0;
18
+ while ((match = FILE_EXT_PATTERN.exec(text)) !== null) {
19
+ const p = match[1].trim();
20
+ if (p.length >= 3 && p.length <= 200 && !p.startsWith("http")) {
21
+ paths.add(p);
22
+ }
23
+ }
24
+ PATH_PATTERN.lastIndex = 0;
25
+ while ((match = PATH_PATTERN.exec(text)) !== null) {
26
+ const p = match[1].trim();
27
+ if (p.length >= 5 && p.length <= 200 && !p.startsWith("http") && p.includes("/")) {
28
+ paths.add(p);
29
+ }
30
+ }
31
+ return Array.from(paths).slice(0, 20);
32
+ }
33
+ var ERROR_PATTERNS = [
34
+ /\b(Error|TypeError|ReferenceError|SyntaxError|RangeError):\s*(.{10,80})/g,
35
+ /\b(ERR_[A-Z_]+)/g,
36
+ /\b(ENOENT|EACCES|EPERM|ECONNREFUSED|ETIMEDOUT|SQLITE_BUSY)\b/g,
37
+ /\bfailed\s+(?:to\s+)?(\w+(?:\s+\w+){0,3})/gi
38
+ ];
39
+ function extractErrors(text) {
40
+ const errors = /* @__PURE__ */ new Set();
41
+ for (const pattern of ERROR_PATTERNS) {
42
+ pattern.lastIndex = 0;
43
+ let match;
44
+ while ((match = pattern.exec(text)) !== null) {
45
+ const err = (match[1] ?? match[0]).trim();
46
+ if (err.length >= 3 && err.length <= 100) {
47
+ errors.add(err);
48
+ }
49
+ }
50
+ if (errors.size >= 5) break;
51
+ }
52
+ return Array.from(errors).slice(0, 5);
53
+ }
54
+ var IDENTIFIER_PATTERN = /\b([a-z][a-zA-Z0-9]{3,30}[A-Z][a-zA-Z0-9]{0,30}|[A-Z][a-zA-Z0-9]{2,30})\b/g;
55
+ var COMMON_WORDS = /* @__PURE__ */ new Set([
56
+ "Error",
57
+ "String",
58
+ "Number",
59
+ "Boolean",
60
+ "Object",
61
+ "Array",
62
+ "Promise",
63
+ "Buffer",
64
+ "Event",
65
+ "Date",
66
+ "Math",
67
+ "JSON",
68
+ "RegExp",
69
+ "Symbol",
70
+ "NULL",
71
+ "TRUE",
72
+ "FALSE",
73
+ "undefined",
74
+ "NaN",
75
+ "This",
76
+ "That",
77
+ "Each",
78
+ "Some",
79
+ "Every",
80
+ "Many"
81
+ ]);
82
+ function extractIdentifiers(text) {
83
+ const counts = /* @__PURE__ */ new Map();
84
+ IDENTIFIER_PATTERN.lastIndex = 0;
85
+ let match;
86
+ while ((match = IDENTIFIER_PATTERN.exec(text)) !== null) {
87
+ const id = match[1];
88
+ if (!COMMON_WORDS.has(id) && id.length >= 4) {
89
+ counts.set(id, (counts.get(id) ?? 0) + 1);
90
+ }
91
+ }
92
+ return Array.from(counts.entries()).filter(([, count]) => count >= 2).map(([name]) => name).slice(0, 10);
93
+ }
94
+ function extractMemoryGraph(memoryText, agentId, projectName, toolName) {
95
+ const entities = [];
96
+ const relationships = [];
97
+ entities.push({ name: agentId, type: "agent" });
98
+ if (projectName && projectName !== "unknown") {
99
+ entities.push({ name: projectName, type: "project" });
100
+ relationships.push({
101
+ source: agentId,
102
+ sourceType: "agent",
103
+ target: projectName,
104
+ targetType: "project",
105
+ type: "works_on"
106
+ });
107
+ }
108
+ if (toolName && toolName !== "manual" && toolName !== "unknown") {
109
+ entities.push({ name: toolName, type: "tool" });
110
+ relationships.push({
111
+ source: agentId,
112
+ sourceType: "agent",
113
+ target: toolName,
114
+ targetType: "tool",
115
+ type: "used_tool"
116
+ });
117
+ }
118
+ const filePaths = extractFilePaths(memoryText);
119
+ for (const fp of filePaths) {
120
+ entities.push({ name: fp, type: "file" });
121
+ relationships.push({
122
+ source: agentId,
123
+ sourceType: "agent",
124
+ target: fp,
125
+ targetType: "file",
126
+ type: "modified"
127
+ });
128
+ if (projectName && projectName !== "unknown") {
129
+ relationships.push({
130
+ source: fp,
131
+ sourceType: "file",
132
+ target: projectName,
133
+ targetType: "project",
134
+ type: "belongs_to"
135
+ });
136
+ }
137
+ }
138
+ const errors = extractErrors(memoryText);
139
+ for (const err of errors) {
140
+ entities.push({ name: err, type: "error" });
141
+ relationships.push({
142
+ source: agentId,
143
+ sourceType: "agent",
144
+ target: err,
145
+ targetType: "error",
146
+ type: "encountered"
147
+ });
148
+ }
149
+ const identifiers = extractIdentifiers(memoryText);
150
+ for (const id of identifiers) {
151
+ entities.push({ name: id, type: "function" });
152
+ if (filePaths.length > 0) {
153
+ relationships.push({
154
+ source: filePaths[0],
155
+ sourceType: "file",
156
+ target: id,
157
+ targetType: "function",
158
+ type: "contains"
159
+ });
160
+ }
161
+ }
162
+ return { entities, relationships };
163
+ }
164
+ async function upsertMemoryGraph(result, memoryId) {
165
+ const client = getClient();
166
+ const now = (/* @__PURE__ */ new Date()).toISOString();
167
+ for (const e of result.entities) {
168
+ const id = entityId(e.type, e.name);
169
+ await client.execute({
170
+ sql: `INSERT INTO entities (id, name, type, first_seen, last_seen, properties)
171
+ VALUES (?, ?, ?, ?, ?, '{}')
172
+ ON CONFLICT(name, type) DO UPDATE SET last_seen = ?`,
173
+ args: [id, e.name, e.type, now, now, now]
174
+ });
175
+ await client.execute({
176
+ sql: `INSERT OR IGNORE INTO entity_memories (entity_id, memory_id)
177
+ VALUES (?, ?)`,
178
+ args: [id, memoryId]
179
+ });
180
+ }
181
+ try {
182
+ const { createCoOccurrenceEdges } = await import("./co-occurrence-WCED475N.js");
183
+ await createCoOccurrenceEdges(result.entities, memoryId);
184
+ } catch {
185
+ }
186
+ for (const r of result.relationships) {
187
+ const sourceId = entityId(r.sourceType, r.source);
188
+ const targetId = entityId(r.targetType, r.target);
189
+ const relId = relationshipId(sourceId, targetId, r.type);
190
+ await client.execute({
191
+ sql: `INSERT INTO relationships (id, source_entity_id, target_entity_id, type, weight, timestamp, properties)
192
+ VALUES (?, ?, ?, ?, 1.0, ?, '{}')
193
+ ON CONFLICT(source_entity_id, target_entity_id, type) DO UPDATE SET
194
+ weight = MIN(weight + 0.1, 10.0),
195
+ timestamp = ?`,
196
+ args: [relId, sourceId, targetId, r.type, now, now]
197
+ });
198
+ }
199
+ }
200
+ async function extractGraphForBatch(batch) {
201
+ for (const row of batch) {
202
+ try {
203
+ const graphResult = extractMemoryGraph(
204
+ row.raw_text,
205
+ row.agent_id,
206
+ row.project_name,
207
+ row.tool_name
208
+ );
209
+ if (graphResult.entities.length > 0) {
210
+ await upsertMemoryGraph(graphResult, row.id);
211
+ }
212
+ try {
213
+ const client = getClient();
214
+ await client.execute({
215
+ sql: `UPDATE memories SET graph_extracted = 1 WHERE id = ?`,
216
+ args: [row.id]
217
+ });
218
+ } catch {
219
+ }
220
+ } catch {
221
+ }
222
+ }
223
+ }
224
+
225
+ export {
226
+ extractMemoryGraph,
227
+ upsertMemoryGraph,
228
+ extractGraphForBatch
229
+ };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  MultiAgentOrchestrator
3
- } from "./chunk-LHMBIFKD.js";
3
+ } from "./chunk-VYNNN2S3.js";
4
4
  import {
5
5
  createQuietRenderer,
6
6
  createTerminalRenderer,
@@ -33,6 +33,10 @@ import {
33
33
  partitionTools,
34
34
  zodToJsonSchema
35
35
  } from "./chunk-JQ6TLNIV.js";
36
+ import {
37
+ composeHooks,
38
+ createDefaultHooks
39
+ } from "./chunk-O377P7GM.js";
36
40
  import {
37
41
  EMPLOYEE_PERMISSIONS,
38
42
  checkPermission,
@@ -46,10 +50,6 @@ import {
46
50
  matchInputPattern,
47
51
  matchToolPattern
48
52
  } from "./chunk-HF25XPZE.js";
49
- import {
50
- composeHooks,
51
- createDefaultHooks
52
- } from "./chunk-O377P7GM.js";
53
53
  import {
54
54
  StateBus,
55
55
  orgBus
@@ -206,7 +206,7 @@ function createExeOSHooks(config) {
206
206
  );
207
207
  }
208
208
  try {
209
- const { listBehaviors } = await import("./behaviors-QGU6XI5R.js");
209
+ const { listBehaviors } = await import("./behaviors-LZVAVHTC.js");
210
210
  const behaviors = await listBehaviors(config.agentId, config.projectName, 12);
211
211
  if (behaviors.length > 0) {
212
212
  process.stderr.write(
@@ -327,7 +327,7 @@ function createExeOSHooks(config) {
327
327
  async onSubagentStop(_reason) {
328
328
  try {
329
329
  const { getClient } = await import("./lib/database.js");
330
- const { sessionScopeFilter } = await import("./task-scope-2N45TE32.js");
330
+ const { sessionScopeFilter } = await import("./task-scope-W73Z3XWE.js");
331
331
  const client = getClient();
332
332
  const ehScope = sessionScopeFilter();
333
333
  const tasks = await client.execute({
@@ -419,7 +419,7 @@ function createExeOSHooks(config) {
419
419
  try {
420
420
  const { writeMemory, flushBatch } = await import("./lib/store.js");
421
421
  const { getClient } = await import("./lib/database.js");
422
- const { sessionScopeFilter: cpScopeFilter } = await import("./task-scope-2N45TE32.js");
422
+ const { sessionScopeFilter: cpScopeFilter } = await import("./task-scope-W73Z3XWE.js");
423
423
  const client = getClient();
424
424
  const cpScope = cpScopeFilter();
425
425
  const tasks = await client.execute({
@@ -830,7 +830,7 @@ function formatReport(report, flags) {
830
830
  return lines.join("\n");
831
831
  }
832
832
  async function fixNullVectors() {
833
- const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-REVBJUZ6.js");
833
+ const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-WTTK64TK.js");
834
834
  if (!tryAcquireWorkerSlot()) {
835
835
  process.stderr.write("[exe-doctor] Worker gate full \u2014 waiting for existing backfill workers to finish\n");
836
836
  await new Promise((r) => setTimeout(r, 5e3));
@@ -951,7 +951,7 @@ function splitAtSentences(text, maxChunkSize) {
951
951
  }
952
952
  async function main(argv = process.argv.slice(2)) {
953
953
  const flags = parseFlags(argv);
954
- const { fastDbInit } = await import("./fast-db-init-LAEISZQ2.js");
954
+ const { fastDbInit } = await import("./fast-db-init-UKETGWQI.js");
955
955
  const client = await fastDbInit();
956
956
  const report = await runAudit(client, flags);
957
957
  console.log(formatReport(report, flags));
@@ -11,10 +11,10 @@ import {
11
11
  sessionScopeFilter,
12
12
  updateTaskStatus,
13
13
  writeNotification
14
- } from "./chunk-W7SDGBEC.js";
14
+ } from "./chunk-MFI5OXYW.js";
15
15
  import {
16
16
  getTransport
17
- } from "./chunk-A7KEWR6S.js";
17
+ } from "./chunk-TXWQPL2U.js";
18
18
  import {
19
19
  getSessionKey
20
20
  } from "./chunk-CVYC6DUW.js";
@@ -27,7 +27,7 @@ import {
27
27
  isCoordinatorName,
28
28
  isMultiInstance,
29
29
  shouldAutoInstance
30
- } from "./chunk-5RSYY7BE.js";
30
+ } from "./chunk-SJYOPYXH.js";
31
31
  import {
32
32
  EXE_AI_DIR
33
33
  } from "./chunk-4GXRETYL.js";
@@ -69,7 +69,7 @@ async function cascadeUnblock(taskId, baseDir, now) {
69
69
  }
70
70
  if (unblockedRows.rows.length > 0 && !process.env.VITEST) {
71
71
  try {
72
- const { queueIntercom } = await import("./intercom-queue-K3DVKSPJ.js");
72
+ const { queueIntercom } = await import("./intercom-queue-RNM6EPGA.js");
73
73
  const dispatched = /* @__PURE__ */ new Set();
74
74
  for (const ur of unblockedRows.rows) {
75
75
  const assignee = String(ur.assigned_to);
@@ -136,7 +136,7 @@ async function dispatchTaskToEmployee(input) {
136
136
  let crossProject = false;
137
137
  if (input.projectName) {
138
138
  try {
139
- const { assertSessionScope } = await import("./session-scope-PX2ABSJO.js");
139
+ const { assertSessionScope } = await import("./session-scope-XSFJZEER.js");
140
140
  const check = assertSessionScope("dispatch_task", input.projectName);
141
141
  if (check.reason === "cross_session_denied") {
142
142
  crossProject = true;
@@ -356,7 +356,7 @@ async function updateTask(input) {
356
356
  try {
357
357
  process.stderr.write(`[tasks] EVENT: tmux delivery failed for reviewer="${reviewer}". Queueing for daemon delivery.
358
358
  `);
359
- const { queueIntercom } = await import("./intercom-queue-K3DVKSPJ.js");
359
+ const { queueIntercom } = await import("./intercom-queue-RNM6EPGA.js");
360
360
  const { resolveExeSession: resolveExeSession2 } = await import("./lib/tmux-routing.js");
361
361
  const exeSession = row.session_scope ? String(row.session_scope) : resolveExeSession2();
362
362
  if (exeSession) {
@@ -396,7 +396,7 @@ async function updateTask(input) {
396
396
  await markTaskNotificationsRead(taskFile);
397
397
  if (input.status === "needs_review" && !isCoordinator) {
398
398
  try {
399
- const { writeNotification: writeNotification2 } = await import("./notifications-76VCYXWW.js");
399
+ const { writeNotification: writeNotification2 } = await import("./notifications-6TCE6OBG.js");
400
400
  await writeNotification2({
401
401
  agentId: String(row.assigned_to),
402
402
  agentRole: String(row.assigned_to),