@askexenow/exe-os 0.9.294 → 0.9.296

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 (279) hide show
  1. package/deploy/compose/cloudflared/config.yml.example +14 -9
  2. package/deploy/compose/docker-compose.yml +86 -8
  3. package/deploy/compose/sso-edge/default.conf.template +87 -0
  4. package/deploy/compose/sso-edge/entrypoint.sh +23 -0
  5. package/deploy/compose/sso-edge/sso-redirect.conf +63 -0
  6. package/deploy/stack-manifests/v0.9.json +2 -2
  7. package/dist/active-agent-AFX2FODG.js +28 -0
  8. package/dist/active-agent-E2IJA7YX.js +27 -0
  9. package/dist/agentic-ontology-A2YUZK5O.js +25 -0
  10. package/dist/assets/com.askexe.exed.plist +4 -1
  11. package/dist/backfill-metadata-OC7EOD5U.js +600 -0
  12. package/dist/behaviors-H5ZOVHDH.js +46 -0
  13. package/dist/bin/agentic-ontology-backfill.js +5 -5
  14. package/dist/bin/agentic-reflection-backfill.js +6 -6
  15. package/dist/bin/agentic-semantic-label.js +5 -5
  16. package/dist/bin/backfill-conversations.js +6 -6
  17. package/dist/bin/backfill-responses.js +6 -6
  18. package/dist/bin/backfill-vectors.js +8 -8
  19. package/dist/bin/bulk-sync-postgres.js +7 -7
  20. package/dist/bin/cc-doctor.js +4 -4
  21. package/dist/bin/cleanup-stale-review-tasks.js +11 -11
  22. package/dist/bin/cli.js +16 -16
  23. package/dist/bin/deferred-daemon-restart.js +1 -1
  24. package/dist/bin/exe-agent-config.js +2 -2
  25. package/dist/bin/exe-agent.js +4 -4
  26. package/dist/bin/exe-assign.js +8 -8
  27. package/dist/bin/exe-boot.js +21 -18
  28. package/dist/bin/exe-call.js +4 -4
  29. package/dist/bin/exe-cloud.js +7 -7
  30. package/dist/bin/exe-dispatch.js +11 -11
  31. package/dist/bin/exe-doctor.js +3 -2
  32. package/dist/bin/exe-export-behaviors.js +7 -7
  33. package/dist/bin/exe-forget.js +6 -6
  34. package/dist/bin/exe-gateway.js +7 -7
  35. package/dist/bin/exe-healthcheck.js +6 -4
  36. package/dist/bin/exe-heartbeat.js +11 -11
  37. package/dist/bin/exe-kill.js +14 -14
  38. package/dist/bin/exe-launch-agent.js +18 -18
  39. package/dist/bin/exe-new-employee.js +6 -6
  40. package/dist/bin/exe-pending-messages.js +12 -12
  41. package/dist/bin/exe-pending-notifications.js +11 -11
  42. package/dist/bin/exe-pending-reviews.js +11 -11
  43. package/dist/bin/exe-rename.js +4 -4
  44. package/dist/bin/exe-review.js +13 -13
  45. package/dist/bin/exe-search.js +5 -5
  46. package/dist/bin/exe-session-cleanup.js +16 -16
  47. package/dist/bin/exe-settings.js +39 -9
  48. package/dist/bin/exe-start-codex.js +11 -11
  49. package/dist/bin/exe-start-opencode.js +8 -8
  50. package/dist/bin/exe-status.js +12 -12
  51. package/dist/bin/exe-team.js +3 -3
  52. package/dist/bin/git-sweep.js +12 -12
  53. package/dist/bin/graph-backfill.js +4 -4
  54. package/dist/bin/graph-export.js +5 -5
  55. package/dist/bin/import-history.js +7 -7
  56. package/dist/bin/install-launchd.js +13 -6
  57. package/dist/bin/install.js +26 -14
  58. package/dist/bin/intercom-check.js +4 -4
  59. package/dist/bin/mcp-sessions.js +2 -2
  60. package/dist/bin/orchestration-metrics.js +4 -4
  61. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  62. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  63. package/dist/bin/scan-tasks.js +11 -11
  64. package/dist/bin/setup.js +1 -1
  65. package/dist/bin/shard-migrate.js +4 -4
  66. package/dist/bin/stack-update.js +2 -2
  67. package/dist/bin/vps-health-gate.js +1 -1
  68. package/dist/capability-cards-4USI7CUW.js +89 -0
  69. package/dist/capacity-monitor-WLCBTEYR.js +51 -0
  70. package/dist/catchup-brief-ZR3NX6LZ.js +175 -0
  71. package/dist/chunk-22TVSRQQ.js +226 -0
  72. package/dist/chunk-2E43UXRH.js +395 -0
  73. package/dist/chunk-2PIGT6UJ.js +460 -0
  74. package/dist/chunk-3XTMW2MZ.js +535 -0
  75. package/dist/chunk-465PQFTH.js +262 -0
  76. package/dist/chunk-5CCXU2AW.js +129 -0
  77. package/dist/chunk-5D6MPWR7.js +1094 -0
  78. package/dist/chunk-5Q4MR6SL.js +123 -0
  79. package/dist/chunk-6327RBWR.js +345 -0
  80. package/dist/chunk-6MZZREZY.js +199 -0
  81. package/dist/chunk-7DI2Q4O5.js +1186 -0
  82. package/dist/chunk-7PW5VNIY.js +122 -0
  83. package/dist/chunk-7T7Y56HW.js +43 -0
  84. package/dist/chunk-7UHCWCLT.js +128 -0
  85. package/dist/chunk-A2ZUMF6L.js +1350 -0
  86. package/dist/chunk-AKV44JEH.js +185 -0
  87. package/dist/chunk-ANHWGX5N.js +735 -0
  88. package/dist/chunk-BQ3P4TKD.js +97 -0
  89. package/dist/chunk-BUZMT3KZ.js +604 -0
  90. package/dist/chunk-C2SBESBO.js +210 -0
  91. package/dist/chunk-CLSXZUZW.js +51 -0
  92. package/dist/chunk-CONHLVAR.js +1079 -0
  93. package/dist/chunk-D3WTZPFX.js +456 -0
  94. package/dist/chunk-DE6SOIYL.js +197 -0
  95. package/dist/chunk-EIVNMA3Q.js +284 -0
  96. package/dist/chunk-EJIF4FNT.js +12 -0
  97. package/dist/chunk-FDFOW564.js +171 -0
  98. package/dist/chunk-GZUBJ5EC.js +127 -0
  99. package/dist/chunk-HGZITN22.js +105 -0
  100. package/dist/chunk-HSRKDU6X.js +362 -0
  101. package/dist/chunk-IIEN2PHV.js +85 -0
  102. package/dist/chunk-JQ56VLMM.js +567 -0
  103. package/dist/chunk-JVHHXRFY.js +280 -0
  104. package/dist/chunk-JXCXGZ3S.js +55 -0
  105. package/dist/chunk-K5ZO532Q.js +4388 -0
  106. package/dist/chunk-K6CAAMXF.js +97 -0
  107. package/dist/chunk-KA26YTNU.js +81 -0
  108. package/dist/chunk-KMUW5C3R.js +381 -0
  109. package/dist/chunk-KOO3J5PV.js +20 -0
  110. package/dist/chunk-LSV7OFIH.js +290 -0
  111. package/dist/chunk-LSVFDVNY.js +1158 -0
  112. package/dist/chunk-LXDQTW32.js +230 -0
  113. package/dist/chunk-MEP7OUVZ.js +181 -0
  114. package/dist/chunk-MN2B2LKS.js +240 -0
  115. package/dist/chunk-N2EAYPYQ.js +1352 -0
  116. package/dist/chunk-N7I2A667.js +70 -0
  117. package/dist/chunk-NLZHVIOP.js +630 -0
  118. package/dist/chunk-NUH5TRZL.js +227 -0
  119. package/dist/chunk-OAHEIH3G.js +167 -0
  120. package/dist/chunk-OBHRQGCK.js +58 -0
  121. package/dist/chunk-ODFA7B2V.js +54 -0
  122. package/dist/chunk-OSNUP45F.js +731 -0
  123. package/dist/chunk-OTPRHBTO.js +33 -0
  124. package/dist/chunk-P6MUA4QU.js +157 -0
  125. package/dist/chunk-PGIOFKSK.js +2093 -0
  126. package/dist/chunk-PSE7VHWK.js +50 -0
  127. package/dist/chunk-QIFUVZFW.js +331 -0
  128. package/dist/chunk-RDPXKTVK.js +221 -0
  129. package/dist/chunk-RKYTYJGB.js +76 -0
  130. package/dist/chunk-RXLR6EFM.js +348 -0
  131. package/dist/chunk-SDB67PQJ.js +159 -0
  132. package/dist/chunk-SF2T7MP3.js +402 -0
  133. package/dist/chunk-SLU3FRFQ.js +2133 -0
  134. package/dist/chunk-SNDZJ5IV.js +214 -0
  135. package/dist/chunk-STEEAABW.js +448 -0
  136. package/dist/chunk-TUTWNHIQ.js +244 -0
  137. package/dist/chunk-UDP35QBR.js +30 -0
  138. package/dist/chunk-UKFHNJBI.js +85 -0
  139. package/dist/chunk-VC2DTK2X.js +382 -0
  140. package/dist/chunk-VRRAE5JX.js +836 -0
  141. package/dist/chunk-VVJTBQPR.js +38 -0
  142. package/dist/chunk-W3EQ362K.js +581 -0
  143. package/dist/chunk-WHIXIFHC.js +2242 -0
  144. package/dist/chunk-WRNGJJNR.js +377 -0
  145. package/dist/chunk-WUKHLCBE.js +3313 -0
  146. package/dist/chunk-WVPLHGDG.js +150 -0
  147. package/dist/chunk-XJZBSTL5.js +204 -0
  148. package/dist/chunk-Y3PMNUM5.js +304 -0
  149. package/dist/chunk-YHVS4QOV.js +14597 -0
  150. package/dist/chunk-YJ2OYAOC.js +668 -0
  151. package/dist/chunk-YYAD2GXX.js +128 -0
  152. package/dist/chunk-ZQML7EWE.js +333 -0
  153. package/dist/co-activation-XJLH46OX.js +74 -0
  154. package/dist/co-occurrence-GNN2X526.js +95 -0
  155. package/dist/code-context-index-OCPRLFG5.js +30 -0
  156. package/dist/core-memory-J4W2IYOF.js +110 -0
  157. package/dist/crdt-sync-QCBTSHIH.js +33 -0
  158. package/dist/crm-webhook-EM442VUW.js +10 -0
  159. package/dist/cto-delegation-gate-MLJMVHBK.js +280 -0
  160. package/dist/daemon-orchestration-2VNLZVTW.js +139 -0
  161. package/dist/db-backup-VUGFTPJ4.js +43 -0
  162. package/dist/doc-graph-extractor-PNRSFPSS.js +133 -0
  163. package/dist/dreaming-SK5VEQRF.js +34 -0
  164. package/dist/entity-boost-TQWWJUC2.js +375 -0
  165. package/dist/exe-drift-N34UPO7S.js +70 -0
  166. package/dist/exe-export-KACBKGVV.js +77 -0
  167. package/dist/exe-import-GXGDWACG.js +80 -0
  168. package/dist/exe-key-XPDOZBWW.js +673 -0
  169. package/dist/exe-snapshot-32GQKGQ5.js +338 -0
  170. package/dist/fast-db-init-F3TDD5VV.js +7 -0
  171. package/dist/gateway/index.js +8 -8
  172. package/dist/git-staleness-J45WNYRF.js +112 -0
  173. package/dist/git-task-sweep-BTGVQPFB.js +42 -0
  174. package/dist/global-procedures-6JCQWU4D.js +22 -0
  175. package/dist/graph-auto-extract-3ZQNXTPC.js +183 -0
  176. package/dist/hooks/bug-report-worker.js +13 -13
  177. package/dist/hooks/codex-stop-task-finalizer.js +13 -13
  178. package/dist/hooks/commit-complete.js +13 -13
  179. package/dist/hooks/error-recall.js +6 -6
  180. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  181. package/dist/hooks/ingest-worker.js +3 -3
  182. package/dist/hooks/ingest.js +6 -6
  183. package/dist/hooks/instructions-loaded.js +4 -4
  184. package/dist/hooks/manifest.json +20 -20
  185. package/dist/hooks/notification.js +4 -4
  186. package/dist/hooks/post-compact.js +12 -12
  187. package/dist/hooks/post-tool-combined.js +6 -6
  188. package/dist/hooks/pre-compact.js +16 -16
  189. package/dist/hooks/pre-tool-use.js +16 -16
  190. package/dist/hooks/prompt-submit.js +24 -24
  191. package/dist/hooks/session-end.js +21 -21
  192. package/dist/hooks/session-start.js +12 -12
  193. package/dist/hooks/stop.js +19 -19
  194. package/dist/hooks/subagent-stop.js +12 -12
  195. package/dist/hooks/summary-worker.js +19 -19
  196. package/dist/index.js +19 -19
  197. package/dist/installer-5VPFY7SB.js +298 -0
  198. package/dist/installer-OENFPMA2.js +344 -0
  199. package/dist/installer-OIX4QOG5.js +40 -0
  200. package/dist/lib/cloud-sync.js +7 -7
  201. package/dist/lib/consolidation.js +6 -5
  202. package/dist/lib/database.js +2 -2
  203. package/dist/lib/db-daemon-client.js +2 -2
  204. package/dist/lib/db.js +2 -2
  205. package/dist/lib/embed-worker.js +1 -0
  206. package/dist/lib/embedder.js +7 -3
  207. package/dist/lib/employee-templates.js +4 -4
  208. package/dist/lib/employees.js +2 -2
  209. package/dist/lib/exe-daemon-client.js +2 -2
  210. package/dist/lib/exe-daemon.js +160 -79
  211. package/dist/lib/hybrid-search.js +5 -5
  212. package/dist/lib/identity.js +2 -2
  213. package/dist/lib/messaging.js +11 -11
  214. package/dist/lib/reminders.js +3 -3
  215. package/dist/lib/schedules.js +5 -5
  216. package/dist/lib/session-registry.js +4 -4
  217. package/dist/lib/skill-learning.js +6 -6
  218. package/dist/lib/store.js +4 -4
  219. package/dist/lib/task-router.js +3 -3
  220. package/dist/lib/tasks.js +12 -12
  221. package/dist/lib/tmux-routing.js +12 -10
  222. package/dist/lib/tmux-transport.js +1 -1
  223. package/dist/lib/token-spend.js +3 -3
  224. package/dist/lib/transport.js +2 -2
  225. package/dist/mcp/register-tools.js +62 -61
  226. package/dist/mcp/server.js +63 -62
  227. package/dist/mcp/tools/complete-reminder.js +4 -4
  228. package/dist/mcp/tools/create-reminder.js +4 -4
  229. package/dist/mcp/tools/create-task.js +14 -14
  230. package/dist/mcp/tools/deactivate-behavior.js +7 -7
  231. package/dist/mcp/tools/list-reminders.js +4 -4
  232. package/dist/mcp/tools/list-tasks.js +14 -14
  233. package/dist/mcp/tools/send-message.js +13 -13
  234. package/dist/mcp/tools/update-task.js +13 -13
  235. package/dist/mcp-http-config-PQTOLCTP.js +29 -0
  236. package/dist/memory-cards-4RVDZIY2.js +180 -0
  237. package/dist/memory-graph-extractor-L6YC7G4M.js +22 -0
  238. package/dist/memory-poisoning-defense-4YVJYH4G.js +224 -0
  239. package/dist/memory-queue-client-MVAUOZNJ.js +16 -0
  240. package/dist/memory-reflection-SHHDQNOH.js +244 -0
  241. package/dist/message-queue-client-DCKZT6X2.js +92 -0
  242. package/dist/notifications-JFR3G42W.js +47 -0
  243. package/dist/orchestration-events-MGCGPTDN.js +27 -0
  244. package/dist/orchestrator-DAFL2YZB.js +35 -0
  245. package/dist/pipeline-router-WWSZVPCH.js +15 -0
  246. package/dist/plan-limits-C7XCSDZC.js +28 -0
  247. package/dist/project-boot-N3NTBVLE.js +299 -0
  248. package/dist/projection-worker-MTPAPCWX.js +1084 -0
  249. package/dist/prospective-memory-BTIVUJSB.js +232 -0
  250. package/dist/reranker-UA6WVESJ.js +19 -0
  251. package/dist/retrieval-health-7XNZJEBF.js +12 -0
  252. package/dist/review-polling-4ALGMXC3.js +126 -0
  253. package/dist/runtime/index.js +13 -13
  254. package/dist/self-query-router-MROFQLQB.js +192 -0
  255. package/dist/session-events-CK44XOU4.js +38 -0
  256. package/dist/session-kill-telemetry-MT6ITDOG.js +31 -0
  257. package/dist/session-scope-3XDBWV65.js +88 -0
  258. package/dist/setup-wizard-X6DOD7MC.js +12 -0
  259. package/dist/skill-refinement-G2CCY3GM.js +159 -0
  260. package/dist/stack-update-JF7F56AS.js +84 -0
  261. package/dist/steward-gate-YF2CYXE7.js +15 -0
  262. package/dist/task-enforcement-YN6HK7NE.js +506 -0
  263. package/dist/task-scope-CVK6ISCZ.js +37 -0
  264. package/dist/tasks-crud-NTNET4JE.js +79 -0
  265. package/dist/tasks-notify-4LJVFPCV.js +40 -0
  266. package/dist/tasks-review-3V4WOIRG.js +49 -0
  267. package/dist/telemetry-upload-5PNUKGTM.js +741 -0
  268. package/dist/token-budget-E46G7ZAQ.js +86 -0
  269. package/dist/tool-capability-index-JDSMKJER.js +10 -0
  270. package/dist/tool-telemetry-J3NLS3LJ.js +17 -0
  271. package/dist/tui/App.js +18 -18
  272. package/dist/tui-data-6DOMUUCM.js +260 -0
  273. package/dist/wiki-acl-5UK37LKF.js +111 -0
  274. package/dist/worker-gate-FM7AEC7G.js +21 -0
  275. package/dist/workflow-engine-2EDUHUIY.js +28 -0
  276. package/dist/worktree-7YKKJIYR.js +28 -0
  277. package/dist/worktree-sweep-C3ELFGDN.js +21 -0
  278. package/package.json +1 -1
  279. package/release-notes.json +88 -88
@@ -0,0 +1,338 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ DreamingEngine
4
+ } from "./chunk-ANHWGX5N.js";
5
+ import {
6
+ storeBehavior
7
+ } from "./chunk-QIFUVZFW.js";
8
+ import {
9
+ disposeStore,
10
+ flushBatch,
11
+ initStore,
12
+ writeMemory
13
+ } from "./chunk-VRRAE5JX.js";
14
+ import {
15
+ extractKeywords,
16
+ keywordsToString
17
+ } from "./chunk-CHCA3ZM2.js";
18
+ import "./chunk-OTVEIJUQ.js";
19
+ import "./chunk-C2SBESBO.js";
20
+ import "./chunk-Y25OJWOQ.js";
21
+ import "./chunk-K5ZO532Q.js";
22
+ import "./chunk-JVHHXRFY.js";
23
+ import "./chunk-4JERP7NT.js";
24
+ import "./chunk-4FVVJ7ME.js";
25
+ import "./chunk-Y3PMNUM5.js";
26
+ import "./chunk-KOO3J5PV.js";
27
+ import "./chunk-22TVSRQQ.js";
28
+ import "./chunk-SSTLTIF3.js";
29
+ import "./chunk-NLZHVIOP.js";
30
+ import "./chunk-QRTJNSKU.js";
31
+ import "./chunk-NGP6LSV2.js";
32
+ import "./chunk-5CCXU2AW.js";
33
+ import "./chunk-CVYC6DUW.js";
34
+ import "./chunk-OPU3NYOO.js";
35
+ import "./chunk-GJV3WDWM.js";
36
+ import "./chunk-MP2AFCGL.js";
37
+ import "./chunk-N7I2A667.js";
38
+ import "./chunk-HYZV25LY.js";
39
+ import "./chunk-WUKHLCBE.js";
40
+ import "./chunk-2I23RPSI.js";
41
+ import "./chunk-2E43UXRH.js";
42
+ import "./chunk-PNQDP3OA.js";
43
+ import "./chunk-7HLWBYH7.js";
44
+ import "./chunk-FXU7JOXK.js";
45
+ import "./chunk-Z42MXYWW.js";
46
+ import "./chunk-YTKVJJSU.js";
47
+ import "./chunk-R36FAN53.js";
48
+ import "./chunk-LYH5HE24.js";
49
+ import "./chunk-MLKGABMK.js";
50
+
51
+ // src/bin/exe-snapshot.ts
52
+ import crypto from "crypto";
53
+ import path from "path";
54
+ import { execSync } from "child_process";
55
+
56
+ // src/lib/session-snapshot.ts
57
+ var FILE_RE = /(?:[\w@.-]+\/)+[\w@.-]+\.(?:ts|tsx|js|jsx|json|md|yml|yaml|sql|py|go|rs|sh|css|html|toml)/g;
58
+ var BACKTICK_RE = /`([^`\n]{2,90})`/g;
59
+ var DECISION_LINE_RE = /(?:^|\n)\s*(?:[-*]\s*)?(?:decision|decided|chose|choose|dropped|drop|keep|use|ship|migrate|move)\b[:\-]?\s*(.{12,180})/gi;
60
+ var ENTITY_STOP_WORDS = /* @__PURE__ */ new Set([
61
+ "session",
62
+ "snapshot",
63
+ "period",
64
+ "memories",
65
+ "reviewed",
66
+ "tasks",
67
+ "patterns",
68
+ "found",
69
+ "behaviors",
70
+ "promoted",
71
+ "drift",
72
+ "score",
73
+ "healthy",
74
+ "warning",
75
+ "critical",
76
+ "current",
77
+ "state",
78
+ "historical",
79
+ "context",
80
+ "project",
81
+ "agent"
82
+ ]);
83
+ function pushUnique(target, value, max) {
84
+ if (!value) return;
85
+ const trimmed = value.trim().replace(/[.,;:)]+$/g, "");
86
+ if (trimmed.length < 2 || trimmed.length > 180) return;
87
+ if (!target.some((v) => v.toLowerCase() === trimmed.toLowerCase())) {
88
+ target.push(trimmed);
89
+ }
90
+ if (target.length > max) target.length = max;
91
+ }
92
+ function collectText(result) {
93
+ const parts = [];
94
+ for (const mem of result.review.memories) {
95
+ parts.push(mem.text);
96
+ }
97
+ for (const task of result.review.tasks) {
98
+ parts.push(task.title);
99
+ if (task.result) parts.push(task.result);
100
+ }
101
+ for (const pattern of result.patterns) {
102
+ parts.push(pattern.description, ...pattern.evidence);
103
+ }
104
+ parts.push(result.drift.narrative);
105
+ return parts.join("\n");
106
+ }
107
+ function extractSnapshotFiles(result) {
108
+ const files = [];
109
+ const text = collectText(result);
110
+ for (const match of text.matchAll(FILE_RE)) {
111
+ pushUnique(files, match[0], 25);
112
+ }
113
+ return files;
114
+ }
115
+ function extractSnapshotDecisions(result) {
116
+ const decisions = [];
117
+ for (const mem of result.review.memories) {
118
+ const type = mem.memory_type.toLowerCase();
119
+ if (type.includes("decision") || type === "adr") {
120
+ pushUnique(decisions, mem.text.split("\n")[0], 12);
121
+ }
122
+ }
123
+ const text = collectText(result);
124
+ for (const match of text.matchAll(DECISION_LINE_RE)) {
125
+ pushUnique(decisions, match[1], 12);
126
+ }
127
+ return decisions;
128
+ }
129
+ function extractSnapshotEntities(result, projectName) {
130
+ const entities = [];
131
+ pushUnique(entities, projectName, 30);
132
+ for (const task of result.review.tasks) {
133
+ if (task.project_name) pushUnique(entities, task.project_name, 30);
134
+ }
135
+ for (const mem of result.review.memories) {
136
+ if (mem.project_name) pushUnique(entities, mem.project_name, 30);
137
+ }
138
+ const text = collectText(result);
139
+ for (const match of text.matchAll(BACKTICK_RE)) {
140
+ const term = match[1];
141
+ if (term && !term.includes("/") && !term.match(/\.(ts|js|json|md|sql)$/)) {
142
+ pushUnique(entities, term, 30);
143
+ }
144
+ }
145
+ for (const keyword of extractKeywords(text)) {
146
+ const normalized = keyword.toLowerCase();
147
+ const looksSpecific = keyword.includes("-") || keyword.includes("_") || /[A-Z]/.test(keyword.slice(1)) || /^[A-Z0-9_]{3,}$/.test(keyword);
148
+ if (looksSpecific && !keyword.includes("/") && !ENTITY_STOP_WORDS.has(normalized)) {
149
+ pushUnique(entities, keyword, 30);
150
+ }
151
+ }
152
+ return entities;
153
+ }
154
+ function buildSessionSnapshotMetadata(result, agentId, projectName, sessionId) {
155
+ return {
156
+ sessionId,
157
+ agentId,
158
+ projectName,
159
+ periodStart: result.review.period.start,
160
+ periodEnd: result.review.period.end,
161
+ keyEntities: extractSnapshotEntities(result, projectName),
162
+ files: extractSnapshotFiles(result),
163
+ decisions: extractSnapshotDecisions(result)
164
+ };
165
+ }
166
+ function formatSessionSnapshotText(result, promoted, metadata, patternBreakdown, driftLabel) {
167
+ const lines = [
168
+ `SESSION SNAPSHOT for ${metadata.agentId} (${metadata.projectName})`,
169
+ `Snapshot ID: ${metadata.sessionId}`,
170
+ `Date range: ${metadata.periodStart} -> ${metadata.periodEnd}`,
171
+ `Project: ${metadata.projectName}`,
172
+ `Agent: ${metadata.agentId}`,
173
+ `Memories reviewed: ${result.review.memories.length}`,
174
+ `Tasks reviewed: ${result.review.tasks.length}`,
175
+ `Patterns found: ${result.patterns.length} (${patternBreakdown})`,
176
+ `Behaviors promoted to p0: ${promoted.length}`,
177
+ `Drift score: ${result.drift.score.toFixed(2)} (${driftLabel})`,
178
+ result.drift.narrative,
179
+ metadata.keyEntities.length > 0 ? `Key entities: ${metadata.keyEntities.join(", ")}` : "",
180
+ metadata.files.length > 0 ? `Files changed: ${metadata.files.join(", ")}` : "",
181
+ metadata.decisions.length > 0 ? `Decisions:
182
+ ${metadata.decisions.map((d) => `- ${d}`).join("\n")}` : "",
183
+ result.patterns.length > 0 ? `
184
+ Patterns:
185
+ ${result.patterns.map((p) => `- [${p.type}] ${p.description} (confidence: ${p.confidence.toFixed(2)})`).join("\n")}` : "",
186
+ promoted.length > 0 ? `
187
+ Promoted behaviors:
188
+ ${promoted.map((p) => `- [p0/${p.domain}] ${p.text}`).join("\n")}` : ""
189
+ ];
190
+ return lines.filter(Boolean).join("\n");
191
+ }
192
+ function buildSessionSnapshotMemory(input) {
193
+ const metadata = buildSessionSnapshotMetadata(
194
+ input.result,
195
+ input.agentId,
196
+ input.projectName,
197
+ input.sessionId
198
+ );
199
+ const rawText = formatSessionSnapshotText(
200
+ input.result,
201
+ input.promoted,
202
+ metadata,
203
+ input.patternBreakdown,
204
+ input.driftLabel
205
+ );
206
+ const keywordText = keywordsToString(extractKeywords([
207
+ rawText,
208
+ metadata.sessionId,
209
+ metadata.periodStart,
210
+ metadata.periodEnd,
211
+ ...metadata.keyEntities,
212
+ ...metadata.files,
213
+ ...metadata.decisions
214
+ ].join("\n")));
215
+ return {
216
+ id: input.id,
217
+ agent_id: input.agentId,
218
+ agent_role: "system",
219
+ session_id: input.sessionId,
220
+ timestamp: input.timestamp,
221
+ tool_name: "exe-snapshot",
222
+ project_name: input.projectName,
223
+ has_error: false,
224
+ raw_text: rawText,
225
+ vector: null,
226
+ importance: 9,
227
+ memory_type: "session_snapshot",
228
+ tier: 1,
229
+ valid_from: metadata.periodStart,
230
+ source_type: "session_snapshot",
231
+ source_path: `session:${metadata.sessionId}`,
232
+ intent: "report",
233
+ outcome: "success",
234
+ domain: "operations",
235
+ referenced_entities: JSON.stringify(metadata.keyEntities),
236
+ file_paths: JSON.stringify(metadata.files),
237
+ keywords: keywordText
238
+ };
239
+ }
240
+
241
+ // src/bin/exe-snapshot.ts
242
+ async function main(_args = []) {
243
+ const agentId = process.env.AGENT_ID || "default";
244
+ let projectName = process.env.EXE_PROJECT;
245
+ if (!projectName) {
246
+ try {
247
+ const gitRoot = execSync("git rev-parse --show-toplevel", {
248
+ encoding: "utf8",
249
+ stdio: ["pipe", "pipe", "pipe"]
250
+ }).trim();
251
+ projectName = path.basename(gitRoot);
252
+ } catch {
253
+ projectName = "unknown";
254
+ }
255
+ }
256
+ try {
257
+ await initStore();
258
+ } catch (err) {
259
+ console.error(
260
+ `Failed to initialize database. Is exe-os set up?
261
+ Run: exe-os setup
262
+
263
+ Error: ${err instanceof Error ? err.message : String(err)}`
264
+ );
265
+ process.exit(1);
266
+ }
267
+ try {
268
+ const engine = new DreamingEngine();
269
+ const result = await engine.runDreamCycle(agentId);
270
+ const promoted = [];
271
+ for (const proposal of result.proposals) {
272
+ if (proposal.source_pattern.confidence > 0.9) {
273
+ await storeBehavior({
274
+ agentId,
275
+ content: proposal.text,
276
+ domain: proposal.domain,
277
+ projectName,
278
+ priority: "p0"
279
+ });
280
+ promoted.push(proposal);
281
+ }
282
+ }
283
+ const patternBreakdown = buildPatternBreakdown(result);
284
+ const driftLabel = driftStatus(result.drift.score);
285
+ const snapshotSessionId = process.env.CLAUDE_SESSION_ID || process.env.SESSION_ID || "snapshot-cli";
286
+ await writeMemory(buildSessionSnapshotMemory({
287
+ id: crypto.randomUUID(),
288
+ agentId,
289
+ projectName,
290
+ sessionId: snapshotSessionId,
291
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
292
+ result,
293
+ promoted,
294
+ patternBreakdown,
295
+ driftLabel
296
+ }));
297
+ await flushBatch();
298
+ console.log(formatReport(result, promoted.length, patternBreakdown));
299
+ } finally {
300
+ await disposeStore();
301
+ }
302
+ }
303
+ function buildPatternBreakdown(result) {
304
+ if (result.patterns.length === 0) return "none";
305
+ const counts = {};
306
+ for (const p of result.patterns) {
307
+ counts[p.type] = (counts[p.type] || 0) + 1;
308
+ }
309
+ return Object.entries(counts).map(([type, count]) => `${count} ${type}${count > 1 ? "s" : ""}`).join(", ");
310
+ }
311
+ function driftStatus(score) {
312
+ if (score > 0.8) return "critical";
313
+ if (score > 0.5) return "warning";
314
+ return "healthy";
315
+ }
316
+ function formatReport(result, promotedCount, patternBreakdown) {
317
+ const driftLabel = driftStatus(result.drift.score);
318
+ return [
319
+ "\u{1F4F8} Snapshot saved.",
320
+ `\u251C\u2500\u2500 Memories reviewed: ${result.review.memories.length}`,
321
+ `\u251C\u2500\u2500 Patterns found: ${result.patterns.length} (${patternBreakdown})`,
322
+ `\u251C\u2500\u2500 Behaviors promoted: ${promotedCount} \u2192 p0`,
323
+ `\u251C\u2500\u2500 Drift score: ${result.drift.score.toFixed(2)} (${driftLabel})`,
324
+ `\u251C\u2500\u2500 Summary committed to long-term memory`,
325
+ `\u2514\u2500\u2500 Tomorrow\u2019s session boots with full context.`
326
+ ].join("\n");
327
+ }
328
+ var isDirectRun = typeof process !== "undefined" && process.argv[1] && (process.argv[1].endsWith("exe-snapshot.js") || process.argv[1].endsWith("exe-snapshot.ts"));
329
+ if (isDirectRun) {
330
+ main(process.argv.slice(2)).catch((err) => {
331
+ console.error(`Snapshot failed: ${err instanceof Error ? err.message : String(err)}`);
332
+ process.exit(1);
333
+ });
334
+ }
335
+ export {
336
+ formatReport,
337
+ main
338
+ };
@@ -0,0 +1,7 @@
1
+ import {
2
+ fastDbInit
3
+ } from "./chunk-KA26YTNU.js";
4
+ import "./chunk-MLKGABMK.js";
5
+ export {
6
+ fastDbInit
7
+ };
@@ -11,7 +11,7 @@ import {
11
11
  createSignupBot,
12
12
  ensureCRMContact,
13
13
  formatAlert
14
- } from "../chunk-ZHHBVPOX.js";
14
+ } from "../chunk-5D6MPWR7.js";
15
15
  import {
16
16
  SlackAdapter
17
17
  } from "../chunk-ORCCI2VV.js";
@@ -21,7 +21,7 @@ import {
21
21
  import {
22
22
  createCRMWebhookHandler,
23
23
  parseTwentyWebhook
24
- } from "../chunk-JPTT22PI.js";
24
+ } from "../chunk-ODFA7B2V.js";
25
25
  import {
26
26
  WhatsAppAdapter
27
27
  } from "../chunk-ECSNSHZ7.js";
@@ -63,16 +63,16 @@ import {
63
63
  retryWithBackoff,
64
64
  routeMessage,
65
65
  validateGatewayConfig
66
- } from "../chunk-GEJAUWIZ.js";
67
- import "../chunk-D6TPR4BN.js";
68
- import "../chunk-F5WN7EQ2.js";
66
+ } from "../chunk-A2ZUMF6L.js";
67
+ import "../chunk-XJZBSTL5.js";
68
+ import "../chunk-ZQML7EWE.js";
69
69
  import {
70
70
  getAccountByName,
71
71
  getAccountByPhoneNumberId,
72
72
  getDefaultAccount,
73
73
  loadAccounts
74
74
  } from "../chunk-YGAAZN3E.js";
75
- import "../chunk-IRT55NLF.js";
75
+ import "../chunk-VC2DTK2X.js";
76
76
  import {
77
77
  createPerson,
78
78
  findPersonByContact,
@@ -83,9 +83,9 @@ import {
83
83
  pushInboundMessageToCRM
84
84
  } from "../chunk-ONKIWA3R.js";
85
85
  import "../chunk-MP2AFCGL.js";
86
- import "../chunk-TM2GZWIT.js";
86
+ import "../chunk-WUKHLCBE.js";
87
87
  import "../chunk-2I23RPSI.js";
88
- import "../chunk-D3X64YSB.js";
88
+ import "../chunk-2E43UXRH.js";
89
89
  import "../chunk-PNQDP3OA.js";
90
90
  import "../chunk-7HLWBYH7.js";
91
91
  import "../chunk-FXU7JOXK.js";
@@ -0,0 +1,112 @@
1
+ import {
2
+ getClient
3
+ } from "./chunk-WUKHLCBE.js";
4
+ import "./chunk-2I23RPSI.js";
5
+ import "./chunk-2E43UXRH.js";
6
+ import "./chunk-PNQDP3OA.js";
7
+ import "./chunk-7HLWBYH7.js";
8
+ import "./chunk-FXU7JOXK.js";
9
+ import "./chunk-R36FAN53.js";
10
+ import "./chunk-LYH5HE24.js";
11
+ import "./chunk-MLKGABMK.js";
12
+
13
+ // src/lib/git-staleness.ts
14
+ import { execSync } from "child_process";
15
+ import path from "path";
16
+ var RECENT_READ_LOOKBACK_MS = 24 * 60 * 60 * 1e3;
17
+ var MAX_STALE_FILES = 10;
18
+ var GIT_TIMEOUT_MS = 400;
19
+ function getHeadCommit(cwd) {
20
+ try {
21
+ return execSync("git rev-parse --short HEAD", {
22
+ cwd,
23
+ timeout: GIT_TIMEOUT_MS,
24
+ encoding: "utf-8"
25
+ }).trim() || null;
26
+ } catch {
27
+ return null;
28
+ }
29
+ }
30
+ function normalizeTrackedPath(cwd, filePath) {
31
+ const resolved = path.resolve(cwd, filePath);
32
+ const relative = path.relative(cwd, resolved);
33
+ if (!relative || relative.startsWith("..") || path.isAbsolute(relative)) {
34
+ return null;
35
+ }
36
+ return relative;
37
+ }
38
+ function formatGitSummary(filePath, summary) {
39
+ const match = summary.trim().match(/^([a-f0-9]+)\s+([^:]+):\s+(.+)$/i);
40
+ if (!match) return `${filePath} (${summary.trim()})`;
41
+ const [, hash, author, subject] = match;
42
+ return `${filePath} (modified by ${author} in commit ${hash}: "${subject}")`;
43
+ }
44
+ async function recordFileRead(sessionUuid, agentId, cwd, filePath) {
45
+ if (!sessionUuid || !filePath) return;
46
+ const trackedPath = normalizeTrackedPath(cwd, filePath);
47
+ if (!trackedPath) return;
48
+ const client = getClient();
49
+ await client.execute({
50
+ sql: `INSERT INTO agent_file_reads (session_uuid, agent_id, file_path, read_at, commit_hash)
51
+ VALUES (?, ?, ?, ?, ?)
52
+ ON CONFLICT(session_uuid, file_path) DO UPDATE SET
53
+ read_at = excluded.read_at,
54
+ commit_hash = excluded.commit_hash`,
55
+ args: [
56
+ sessionUuid,
57
+ agentId,
58
+ trackedPath,
59
+ (/* @__PURE__ */ new Date()).toISOString(),
60
+ getHeadCommit(cwd)
61
+ ]
62
+ });
63
+ }
64
+ async function detectStaleFiles(agentId, cwd) {
65
+ const client = getClient();
66
+ const recentCutoff = new Date(Date.now() - RECENT_READ_LOOKBACK_MS).toISOString();
67
+ const result = await client.execute({
68
+ sql: `SELECT file_path, MAX(read_at) AS read_at
69
+ FROM agent_file_reads
70
+ WHERE agent_id = ? AND read_at >= ?
71
+ GROUP BY file_path
72
+ ORDER BY MAX(read_at) DESC
73
+ LIMIT 10`,
74
+ args: [agentId, recentCutoff]
75
+ });
76
+ const stale = [];
77
+ for (const row of result.rows) {
78
+ if (stale.length >= MAX_STALE_FILES) break;
79
+ const record = row;
80
+ const filePath = String(record.file_path ?? "");
81
+ const readAt = String(record.read_at ?? "");
82
+ if (!filePath || !readAt) continue;
83
+ try {
84
+ const gitSummary = execSync(
85
+ `git log -1 --oneline --after=${JSON.stringify(readAt)} --format="%h %an: %s" -- ${JSON.stringify(filePath)}`,
86
+ {
87
+ cwd,
88
+ timeout: GIT_TIMEOUT_MS,
89
+ encoding: "utf-8"
90
+ }
91
+ ).trim();
92
+ if (gitSummary) {
93
+ stale.push(formatGitSummary(filePath, gitSummary));
94
+ }
95
+ } catch {
96
+ }
97
+ }
98
+ return stale.slice(0, MAX_STALE_FILES);
99
+ }
100
+ async function clearSessionFileReads(sessionUuid) {
101
+ if (!sessionUuid) return;
102
+ const client = getClient();
103
+ await client.execute({
104
+ sql: "DELETE FROM agent_file_reads WHERE session_uuid = ?",
105
+ args: [sessionUuid]
106
+ });
107
+ }
108
+ export {
109
+ clearSessionFileReads,
110
+ detectStaleFiles,
111
+ recordFileRead
112
+ };
@@ -0,0 +1,42 @@
1
+ import {
2
+ extractKeywords,
3
+ findBestMatch,
4
+ getRecentCommits,
5
+ matchScore,
6
+ sweepTasks
7
+ } from "./chunk-SNDZJ5IV.js";
8
+ import "./chunk-K5ZO532Q.js";
9
+ import "./chunk-JVHHXRFY.js";
10
+ import "./chunk-4JERP7NT.js";
11
+ import "./chunk-4FVVJ7ME.js";
12
+ import "./chunk-Y3PMNUM5.js";
13
+ import "./chunk-KOO3J5PV.js";
14
+ import "./chunk-22TVSRQQ.js";
15
+ import "./chunk-SSTLTIF3.js";
16
+ import "./chunk-NLZHVIOP.js";
17
+ import "./chunk-QRTJNSKU.js";
18
+ import "./chunk-NGP6LSV2.js";
19
+ import "./chunk-5CCXU2AW.js";
20
+ import "./chunk-CVYC6DUW.js";
21
+ import "./chunk-OPU3NYOO.js";
22
+ import "./chunk-GJV3WDWM.js";
23
+ import "./chunk-MP2AFCGL.js";
24
+ import "./chunk-N7I2A667.js";
25
+ import "./chunk-HYZV25LY.js";
26
+ import "./chunk-WUKHLCBE.js";
27
+ import "./chunk-2I23RPSI.js";
28
+ import "./chunk-2E43UXRH.js";
29
+ import "./chunk-PNQDP3OA.js";
30
+ import "./chunk-7HLWBYH7.js";
31
+ import "./chunk-FXU7JOXK.js";
32
+ import "./chunk-YTKVJJSU.js";
33
+ import "./chunk-R36FAN53.js";
34
+ import "./chunk-LYH5HE24.js";
35
+ import "./chunk-MLKGABMK.js";
36
+ export {
37
+ extractKeywords,
38
+ findBestMatch,
39
+ getRecentCommits,
40
+ matchScore,
41
+ sweepTasks
42
+ };
@@ -0,0 +1,22 @@
1
+ import {
2
+ deactivateGlobalProcedure,
3
+ getGlobalProceduresBlock,
4
+ loadGlobalProcedures,
5
+ storeGlobalProcedure
6
+ } from "./chunk-IIEN2PHV.js";
7
+ import "./chunk-VUH67PT4.js";
8
+ import "./chunk-WUKHLCBE.js";
9
+ import "./chunk-2I23RPSI.js";
10
+ import "./chunk-2E43UXRH.js";
11
+ import "./chunk-PNQDP3OA.js";
12
+ import "./chunk-7HLWBYH7.js";
13
+ import "./chunk-FXU7JOXK.js";
14
+ import "./chunk-R36FAN53.js";
15
+ import "./chunk-LYH5HE24.js";
16
+ import "./chunk-MLKGABMK.js";
17
+ export {
18
+ deactivateGlobalProcedure,
19
+ getGlobalProceduresBlock,
20
+ loadGlobalProcedures,
21
+ storeGlobalProcedure
22
+ };