@askexenow/exe-os 0.9.129 → 0.9.131

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 (180) hide show
  1. package/dist/{agentic-ontology-2VYNTMNO.js → agentic-ontology-FXPFDEUJ.js} +1 -1
  2. package/dist/{backfill-metadata-OJWOCLSZ.js → backfill-metadata-3NFOSJ43.js} +3 -3
  3. package/dist/{behaviors-CSB2YLDT.js → behaviors-YDPUKGJH.js} +2 -2
  4. package/dist/bin/agentic-ontology-backfill.js +4 -4
  5. package/dist/bin/agentic-reflection-backfill.js +5 -5
  6. package/dist/bin/agentic-semantic-label.js +4 -4
  7. package/dist/bin/backfill-conversations.js +3 -3
  8. package/dist/bin/backfill-responses.js +3 -3
  9. package/dist/bin/backfill-vectors.js +3 -3
  10. package/dist/bin/bulk-sync-postgres.js +5 -5
  11. package/dist/bin/cleanup-stale-review-tasks.js +4 -4
  12. package/dist/bin/cli.js +6 -6
  13. package/dist/bin/exe-agent.js +3 -3
  14. package/dist/bin/exe-assign.js +3 -3
  15. package/dist/bin/exe-boot.js +9 -9
  16. package/dist/bin/exe-call.js +3 -3
  17. package/dist/bin/exe-cloud.js +3 -3
  18. package/dist/bin/exe-dispatch.js +5 -5
  19. package/dist/bin/exe-doctor.js +1 -1
  20. package/dist/bin/exe-export-behaviors.js +6 -6
  21. package/dist/bin/exe-forget.js +5 -5
  22. package/dist/bin/exe-gateway.js +3 -3
  23. package/dist/bin/exe-heartbeat.js +4 -4
  24. package/dist/bin/exe-kill.js +5 -5
  25. package/dist/bin/exe-launch-agent.js +8 -8
  26. package/dist/bin/exe-new-employee.js +5 -5
  27. package/dist/bin/exe-pending-messages.js +5 -5
  28. package/dist/bin/exe-pending-notifications.js +4 -4
  29. package/dist/bin/exe-pending-reviews.js +4 -4
  30. package/dist/bin/exe-rename.js +3 -3
  31. package/dist/bin/exe-review.js +4 -4
  32. package/dist/bin/exe-search.js +4 -4
  33. package/dist/bin/exe-session-cleanup.js +8 -8
  34. package/dist/bin/exe-settings.js +3 -3
  35. package/dist/bin/exe-start-codex.js +6 -6
  36. package/dist/bin/exe-start-opencode.js +5 -5
  37. package/dist/bin/exe-status.js +5 -5
  38. package/dist/bin/exe-team.js +2 -2
  39. package/dist/bin/git-sweep.js +4 -4
  40. package/dist/bin/graph-backfill.js +3 -3
  41. package/dist/bin/graph-export.js +4 -4
  42. package/dist/bin/install.js +1 -1
  43. package/dist/bin/intercom-check.js +4 -4
  44. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  45. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  46. package/dist/bin/scan-tasks.js +4 -4
  47. package/dist/bin/setup.js +1 -1
  48. package/dist/bin/shard-migrate.js +3 -3
  49. package/dist/{capacity-monitor-3GZIHLB4.js → capacity-monitor-DZK4L6AI.js} +5 -5
  50. package/dist/{catchup-brief-67QDCINS.js → catchup-brief-XQE6OPX3.js} +6 -6
  51. package/dist/{chunk-NZLCDI6Y.js → chunk-2CPAX2XT.js} +2 -2
  52. package/dist/{chunk-JD4FAPYG.js → chunk-3FPH3UB7.js} +1 -1
  53. package/dist/{chunk-N7L33TED.js → chunk-3IDUX6ZD.js} +4 -4
  54. package/dist/{chunk-LVNMOVGD.js → chunk-4GXJ4KWB.js} +1 -1
  55. package/dist/{chunk-WMC3TXJF.js → chunk-4NCSE6PB.js} +1 -1
  56. package/dist/{chunk-2QD7KBJN.js → chunk-4PGS5OKU.js} +13 -4
  57. package/dist/{chunk-HVRTW3OP.js → chunk-65P2ZP5F.js} +18 -3
  58. package/dist/{chunk-4Y6QZBEO.js → chunk-ACXN2E2T.js} +1 -1
  59. package/dist/{chunk-B4TT2QQA.js → chunk-AGVPLEGP.js} +2 -2
  60. package/dist/{chunk-INO4ZD5Y.js → chunk-AOSCG2LD.js} +1 -1
  61. package/dist/{chunk-MJAE4NB7.js → chunk-AVU6RF2L.js} +2 -2
  62. package/dist/{chunk-ZBY4AUD4.js → chunk-C5L36MKS.js} +45 -45
  63. package/dist/{chunk-P3CVUMEH.js → chunk-CUEYUZKY.js} +1 -1
  64. package/dist/{chunk-IHDHL5ML.js → chunk-DJ5ZWBKZ.js} +1 -1
  65. package/dist/{chunk-LAN26C3W.js → chunk-DOBUMDFP.js} +1 -1
  66. package/dist/{chunk-NPT4EHZK.js → chunk-EWAWYBVL.js} +1 -1
  67. package/dist/{chunk-EHOJUXYG.js → chunk-F25LWMFW.js} +2 -2
  68. package/dist/{chunk-MPURH6JI.js → chunk-FKEHAW5H.js} +5 -5
  69. package/dist/{chunk-CFIM43JH.js → chunk-FN4R2IJH.js} +2 -2
  70. package/dist/{chunk-JN44LQ53.js → chunk-FO43GJS2.js} +3 -3
  71. package/dist/{chunk-6M5II4EV.js → chunk-GLESRO6K.js} +1 -1
  72. package/dist/{chunk-HSRM6PNM.js → chunk-HWZKHJ4Z.js} +5 -5
  73. package/dist/{chunk-PEDLSJBL.js → chunk-I2NFOJFM.js} +1 -1
  74. package/dist/{chunk-ZS7MGQSD.js → chunk-ITSYZA76.js} +3 -3
  75. package/dist/{chunk-RMFDPCA2.js → chunk-JBSJUYRX.js} +1 -1
  76. package/dist/{chunk-N3DTSVKE.js → chunk-JFFZJGX3.js} +1 -1
  77. package/dist/{chunk-VQ4K2MLM.js → chunk-L6DRNKF7.js} +2 -2
  78. package/dist/{chunk-DL52JPGF.js → chunk-LVNKCRR2.js} +29 -6
  79. package/dist/{chunk-E2Q4Y22A.js → chunk-MFFT4HO3.js} +3 -3
  80. package/dist/{chunk-L4X5EUHR.js → chunk-MRZGBK5L.js} +2 -2
  81. package/dist/{chunk-7RK3AYJE.js → chunk-N26MHKKN.js} +3 -3
  82. package/dist/{chunk-IJ73YE73.js → chunk-O7SOBCXV.js} +1 -1
  83. package/dist/{chunk-A2NZP64U.js → chunk-OQP6TD46.js} +33 -0
  84. package/dist/{chunk-IHF5RXJM.js → chunk-P7KSH2Q5.js} +1 -1
  85. package/dist/{chunk-P4HIF72O.js → chunk-QAXIPSLD.js} +1 -1
  86. package/dist/{chunk-O4VFZRA5.js → chunk-QIHP2HDQ.js} +1 -1
  87. package/dist/{chunk-SVMFVPBF.js → chunk-QN63NQ6T.js} +1 -1
  88. package/dist/{chunk-PGW7TIV6.js → chunk-R5QAAAYZ.js} +1 -1
  89. package/dist/{chunk-Q36CMZIX.js → chunk-THIAOMXO.js} +1 -1
  90. package/dist/{chunk-Q2O4VJHH.js → chunk-UVRYWAUD.js} +2 -2
  91. package/dist/{chunk-RJZMRZNV.js → chunk-WC727FG7.js} +7 -3
  92. package/dist/{chunk-MILTNDZH.js → chunk-YQEI7PSQ.js} +4 -4
  93. package/dist/{chunk-MVBWW2EO.js → chunk-ZA6RNNQT.js} +1 -1
  94. package/dist/{chunk-WPOA7XAE.js → chunk-ZBPC4DW7.js} +2 -2
  95. package/dist/{chunk-MLCUPTP7.js → chunk-ZHMQDTGE.js} +8 -4
  96. package/dist/{crdt-sync-T7MHVQCS.js → crdt-sync-TG7XPFKW.js} +1 -1
  97. package/dist/{crm-webhook-OAFTLJYA.js → crm-webhook-UF3UBK7V.js} +2 -2
  98. package/dist/{cto-delegation-gate-XWHZCUJH.js → cto-delegation-gate-4FMBWVLW.js} +3 -3
  99. package/dist/{daemon-orchestration-2C3TVOHO.js → daemon-orchestration-5LJ7UFOT.js} +5 -5
  100. package/dist/{entity-boost-IOER4VRR.js → entity-boost-CSKKVLPV.js} +5 -1
  101. package/dist/{exe-drift-2IJFQV43.js → exe-drift-SHQNHORE.js} +3 -3
  102. package/dist/{exe-export-Y2RFXGNB.js → exe-export-6ZSCPI4J.js} +5 -5
  103. package/dist/{exe-import-LN6PE2YT.js → exe-import-SKFOTZYP.js} +5 -5
  104. package/dist/{exe-key-DHKBWLIT.js → exe-key-ZRBTIXC3.js} +1 -1
  105. package/dist/{fast-db-init-IIP6EGWT.js → fast-db-init-FQ47BIJ4.js} +1 -1
  106. package/dist/gateway/index.js +5 -5
  107. package/dist/{git-staleness-I2BUEDE2.js → git-staleness-ZDKQLBCH.js} +1 -1
  108. package/dist/{git-task-sweep-UEOTXRW4.js → git-task-sweep-RYMNUR4U.js} +4 -4
  109. package/dist/{global-procedures-MFE5LGRF.js → global-procedures-4VE5RP5Z.js} +2 -2
  110. package/dist/hooks/bug-report-worker.js +7 -7
  111. package/dist/hooks/codex-stop-task-finalizer.js +7 -7
  112. package/dist/hooks/commit-complete.js +6 -6
  113. package/dist/hooks/error-recall.js +4 -4
  114. package/dist/hooks/ingest.js +2 -2
  115. package/dist/hooks/instructions-loaded.js +3 -3
  116. package/dist/hooks/notification.js +1 -1
  117. package/dist/hooks/post-compact.js +4 -4
  118. package/dist/hooks/post-tool-combined.js +2 -2
  119. package/dist/hooks/pre-compact.js +5 -5
  120. package/dist/hooks/pre-tool-use.js +8 -8
  121. package/dist/hooks/prompt-submit.js +11 -11
  122. package/dist/hooks/session-end.js +9 -9
  123. package/dist/hooks/session-start.js +4 -4
  124. package/dist/hooks/stop.js +7 -7
  125. package/dist/hooks/subagent-stop.js +4 -4
  126. package/dist/hooks/summary-worker.js +7 -7
  127. package/dist/index.js +10 -10
  128. package/dist/lib/cloud-sync.js +3 -3
  129. package/dist/lib/consolidation.js +4 -4
  130. package/dist/lib/database.js +1 -1
  131. package/dist/lib/db.js +1 -1
  132. package/dist/lib/employee-templates.js +3 -3
  133. package/dist/lib/exe-daemon.js +102 -18
  134. package/dist/lib/hybrid-search.js +4 -4
  135. package/dist/lib/identity.js +2 -2
  136. package/dist/lib/messaging.js +4 -4
  137. package/dist/lib/reminders.js +2 -2
  138. package/dist/lib/schedules.js +4 -4
  139. package/dist/lib/session-wrappers.js +1 -1
  140. package/dist/lib/skill-learning.js +3 -3
  141. package/dist/lib/store.js +3 -3
  142. package/dist/lib/tasks.js +6 -6
  143. package/dist/lib/tmux-routing.js +3 -3
  144. package/dist/lib/token-spend.js +2 -2
  145. package/dist/mcp/register-tools.js +41 -41
  146. package/dist/mcp/server.js +41 -41
  147. package/dist/mcp/tools/complete-reminder.js +3 -3
  148. package/dist/mcp/tools/create-reminder.js +3 -3
  149. package/dist/mcp/tools/create-task.js +7 -7
  150. package/dist/mcp/tools/deactivate-behavior.js +3 -3
  151. package/dist/mcp/tools/list-reminders.js +3 -3
  152. package/dist/mcp/tools/list-tasks.js +7 -7
  153. package/dist/mcp/tools/send-message.js +5 -5
  154. package/dist/mcp/tools/update-task.js +7 -7
  155. package/dist/{memory-cards-RIL5BZHK.js → memory-cards-JASZEXYI.js} +1 -1
  156. package/dist/memory-reflection-GNZFIXB4.js +239 -0
  157. package/dist/{notifications-CJFULBMN.js → notifications-DOGZCKY3.js} +3 -3
  158. package/dist/{orchestrator-RXIPT6PZ.js → orchestrator-HV7DEBXM.js} +5 -5
  159. package/dist/{plan-limits-5WY5YK6X.js → plan-limits-Y7UCRWY6.js} +2 -2
  160. package/dist/{projection-worker-OY4WYZW6.js → projection-worker-NIESKYOK.js} +1 -1
  161. package/dist/runtime/index.js +6 -6
  162. package/dist/{session-events-TQ6S5KQN.js → session-events-UDVAORX2.js} +4 -4
  163. package/dist/{session-kill-telemetry-46YIJWE2.js → session-kill-telemetry-NV4IJPBK.js} +2 -2
  164. package/dist/{session-scope-3MYK3YRV.js → session-scope-24IMXQES.js} +4 -4
  165. package/dist/{setup-wizard-ZJ7UCRBP.js → setup-wizard-XB6LSCKU.js} +1 -1
  166. package/dist/{task-scope-MUU4KXE6.js → task-scope-5QM7HN4D.js} +3 -3
  167. package/dist/{tasks-crud-PMLK3MM4.js → tasks-crud-PS73UQYV.js} +4 -4
  168. package/dist/{tasks-review-56LVKKNL.js → tasks-review-CGHWTOOW.js} +3 -3
  169. package/dist/{tool-telemetry-L77WNAYT.js → tool-telemetry-VWWL2662.js} +1 -1
  170. package/dist/tui/App.js +11 -11
  171. package/dist/{tui-data-SB45REYU.js → tui-data-O7PRTO73.js} +3 -3
  172. package/package.json +1 -1
  173. /package/dist/{chunk-4CMVLKEI.js → chunk-65HEEFCM.js} +0 -0
  174. /package/dist/{chunk-K6OEWZTB.js → chunk-7WZMQNA6.js} +0 -0
  175. /package/dist/{chunk-4QNPADWL.js → chunk-ADNF2DB4.js} +0 -0
  176. /package/dist/{chunk-4FLUOZTR.js → chunk-BBOP5GLG.js} +0 -0
  177. /package/dist/{chunk-CURJUF3W.js → chunk-DGRHKL3P.js} +0 -0
  178. /package/dist/{chunk-NHK5KW6Y.js → chunk-GZY3EIWR.js} +0 -0
  179. /package/dist/{chunk-AFYIYM2K.js → chunk-HQSBBKPD.js} +0 -0
  180. /package/dist/{chunk-PFICKZZ5.js → chunk-WA6YUCX6.js} +0 -0
@@ -0,0 +1,239 @@
1
+ import {
2
+ getClient,
3
+ init_database
4
+ } from "./chunk-OQP6TD46.js";
5
+ import "./chunk-4NYQAS33.js";
6
+ import "./chunk-RUG3N6P4.js";
7
+ import "./chunk-KVPG5UT6.js";
8
+ import "./chunk-X2IMCCM5.js";
9
+ import "./chunk-KFQGP6VL.js";
10
+
11
+ // src/lib/memory-reflection.ts
12
+ init_database();
13
+ var REFLECTION_SCHEMA = `
14
+ CREATE TABLE IF NOT EXISTS memory_reflections (
15
+ id TEXT PRIMARY KEY,
16
+ agent_id TEXT NOT NULL,
17
+ project_name TEXT,
18
+ insight_type TEXT NOT NULL CHECK (insight_type IN ('pattern', 'contradiction', 'evolution', 'summary')),
19
+ subject TEXT NOT NULL,
20
+ content TEXT NOT NULL,
21
+ source_card_ids TEXT NOT NULL DEFAULT '[]',
22
+ confidence REAL NOT NULL DEFAULT 0.7,
23
+ active INTEGER NOT NULL DEFAULT 1,
24
+ created_at TEXT NOT NULL,
25
+ expires_at TEXT
26
+ );
27
+
28
+ CREATE INDEX IF NOT EXISTS idx_memory_reflections_agent
29
+ ON memory_reflections(agent_id, insight_type, created_at DESC);
30
+
31
+ CREATE VIRTUAL TABLE IF NOT EXISTS memory_reflections_fts USING fts5(
32
+ content, subject,
33
+ content=memory_reflections, content_rowid=rowid
34
+ );
35
+
36
+ CREATE TRIGGER IF NOT EXISTS memory_reflections_ai AFTER INSERT ON memory_reflections BEGIN
37
+ INSERT INTO memory_reflections_fts(rowid, content, subject)
38
+ VALUES (new.rowid, new.content, new.subject);
39
+ END;
40
+
41
+ CREATE TRIGGER IF NOT EXISTS memory_reflections_ad AFTER DELETE ON memory_reflections BEGIN
42
+ INSERT INTO memory_reflections_fts(memory_reflections_fts, rowid, content, subject)
43
+ VALUES ('delete', old.rowid, old.content, old.subject);
44
+ END;
45
+ `;
46
+ async function detectContradictions(agentId, projectName) {
47
+ const client = getClient();
48
+ const insights = [];
49
+ let sql = `SELECT subject, GROUP_CONCAT(id) as card_ids,
50
+ GROUP_CONCAT(content, '|||') as contents,
51
+ GROUP_CONCAT(timestamp) as timestamps,
52
+ COUNT(*) as cnt
53
+ FROM memory_cards
54
+ WHERE agent_id = ? AND active = 1 AND subject IS NOT NULL`;
55
+ const args = [agentId];
56
+ if (projectName) {
57
+ sql += " AND project_name = ?";
58
+ args.push(projectName);
59
+ }
60
+ sql += " GROUP BY subject HAVING cnt >= 2 ORDER BY cnt DESC LIMIT 100";
61
+ const result = await client.execute({ sql, args });
62
+ for (const row of result.rows) {
63
+ const subject = row.subject;
64
+ const cardIds = row.card_ids.split(",");
65
+ const contents = row.contents.split("|||");
66
+ const timestamps = row.timestamps.split(",");
67
+ if (contents.length < 2) continue;
68
+ const unique = new Set(contents.map((c) => c.toLowerCase().trim()));
69
+ if (unique.size < 2) continue;
70
+ const pairs = contents.map((c, i) => ({ content: c, ts: timestamps[i], id: cardIds[i] }));
71
+ pairs.sort((a, b) => (a.ts ?? "").localeCompare(b.ts ?? ""));
72
+ const earliest = pairs[0];
73
+ const latest = pairs[pairs.length - 1];
74
+ if (earliest.content.toLowerCase().trim() === latest.content.toLowerCase().trim()) continue;
75
+ const insightContent = `${subject}: changed from "${earliest.content.slice(0, 100)}" to "${latest.content.slice(0, 100)}"`;
76
+ const id = `reflect-evol-${subject.slice(0, 20)}-${Date.now()}`.replace(/[^a-zA-Z0-9-]/g, "_");
77
+ insights.push({
78
+ id,
79
+ agent_id: agentId,
80
+ project_name: projectName ?? null,
81
+ insight_type: "evolution",
82
+ subject,
83
+ content: insightContent,
84
+ source_card_ids: cardIds.slice(0, 10),
85
+ confidence: 0.7,
86
+ created_at: (/* @__PURE__ */ new Date()).toISOString()
87
+ });
88
+ }
89
+ return insights;
90
+ }
91
+ async function detectPatterns(agentId, projectName) {
92
+ const client = getClient();
93
+ const insights = [];
94
+ let sql = `SELECT subject, card_type, COUNT(DISTINCT session_id) as sessions,
95
+ COUNT(*) as total, GROUP_CONCAT(id) as card_ids,
96
+ GROUP_CONCAT(DISTINCT content, '|||') as sample_contents
97
+ FROM memory_cards
98
+ WHERE agent_id = ? AND active = 1 AND subject IS NOT NULL`;
99
+ const args = [agentId];
100
+ if (projectName) {
101
+ sql += " AND project_name = ?";
102
+ args.push(projectName);
103
+ }
104
+ sql += " GROUP BY subject, card_type HAVING sessions >= 3 ORDER BY sessions DESC LIMIT 50";
105
+ const result = await client.execute({ sql, args });
106
+ for (const row of result.rows) {
107
+ const subject = row.subject;
108
+ const cardType = row.card_type;
109
+ const sessions = Number(row.sessions);
110
+ const total = Number(row.total);
111
+ const cardIds = row.card_ids.split(",");
112
+ const samples = row.sample_contents.split("|||").slice(0, 3);
113
+ const insightContent = `${subject} appears in ${sessions} sessions (${total} mentions) as ${cardType}. Examples: ${samples.map((s) => `"${s.slice(0, 80)}"`).join("; ")}`;
114
+ const id = `reflect-pattern-${subject.slice(0, 20)}-${Date.now()}`.replace(/[^a-zA-Z0-9-]/g, "_");
115
+ insights.push({
116
+ id,
117
+ agent_id: agentId,
118
+ project_name: projectName ?? null,
119
+ insight_type: "pattern",
120
+ subject,
121
+ content: insightContent,
122
+ source_card_ids: cardIds.slice(0, 10),
123
+ confidence: Math.min(0.5 + sessions * 0.1, 0.95),
124
+ created_at: (/* @__PURE__ */ new Date()).toISOString()
125
+ });
126
+ }
127
+ return insights;
128
+ }
129
+ async function generateSummaries(agentId, projectName) {
130
+ const client = getClient();
131
+ const insights = [];
132
+ let sql = `SELECT subject, COUNT(*) as cnt, GROUP_CONCAT(id) as card_ids,
133
+ GROUP_CONCAT(content, '|||') as all_contents,
134
+ MIN(timestamp) as first_seen, MAX(timestamp) as last_seen
135
+ FROM memory_cards
136
+ WHERE agent_id = ? AND active = 1 AND subject IS NOT NULL`;
137
+ const args = [agentId];
138
+ if (projectName) {
139
+ sql += " AND project_name = ?";
140
+ args.push(projectName);
141
+ }
142
+ sql += " GROUP BY subject HAVING cnt >= 5 ORDER BY cnt DESC LIMIT 30";
143
+ const result = await client.execute({ sql, args });
144
+ for (const row of result.rows) {
145
+ const subject = row.subject;
146
+ const cnt = Number(row.cnt);
147
+ const cardIds = row.card_ids.split(",");
148
+ const allContents = (row.sample_contents ?? row.all_contents ?? "").split("|||");
149
+ const firstSeen = row.first_seen;
150
+ const lastSeen = row.last_seen;
151
+ const unique = [...new Set(allContents.map((c) => c.trim()))].filter((c) => c.length > 10).slice(0, 5);
152
+ if (unique.length < 2) continue;
153
+ const insightContent = `${subject} (${cnt} facts, ${firstSeen?.slice(0, 10)} to ${lastSeen?.slice(0, 10)}): ${unique.map((u) => u.slice(0, 80)).join(". ")}`;
154
+ const id = `reflect-summary-${subject.slice(0, 20)}-${Date.now()}`.replace(/[^a-zA-Z0-9-]/g, "_");
155
+ insights.push({
156
+ id,
157
+ agent_id: agentId,
158
+ project_name: projectName ?? null,
159
+ insight_type: "summary",
160
+ subject,
161
+ content: insightContent,
162
+ source_card_ids: cardIds.slice(0, 10),
163
+ confidence: 0.6,
164
+ created_at: (/* @__PURE__ */ new Date()).toISOString()
165
+ });
166
+ }
167
+ return insights;
168
+ }
169
+ async function runReflection(agentId, projectName) {
170
+ const [contradictions, patterns, summaries] = await Promise.all([
171
+ detectContradictions(agentId, projectName),
172
+ detectPatterns(agentId, projectName),
173
+ generateSummaries(agentId, projectName)
174
+ ]);
175
+ const all = [...contradictions, ...patterns, ...summaries];
176
+ if (all.length === 0) return { contradictions: 0, patterns: 0, summaries: 0 };
177
+ const client = getClient();
178
+ const now = (/* @__PURE__ */ new Date()).toISOString();
179
+ const stmts = all.map((insight) => ({
180
+ sql: `INSERT OR IGNORE INTO memory_reflections
181
+ (id, agent_id, project_name, insight_type, subject, content,
182
+ source_card_ids, confidence, active, created_at)
183
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?)`,
184
+ args: [
185
+ insight.id,
186
+ insight.agent_id,
187
+ insight.project_name,
188
+ insight.insight_type,
189
+ insight.subject,
190
+ insight.content,
191
+ JSON.stringify(insight.source_card_ids),
192
+ insight.confidence,
193
+ now
194
+ ]
195
+ }));
196
+ await client.batch(stmts, "write");
197
+ return {
198
+ contradictions: contradictions.length,
199
+ patterns: patterns.length,
200
+ summaries: summaries.length
201
+ };
202
+ }
203
+ async function searchReflections(queryText, agentId, limit = 5) {
204
+ const terms = queryText.toLowerCase().split(/\s+/).filter((t) => t.length >= 3).map((t) => t.replace(/[^a-z0-9_]/g, "")).filter((t) => t.length >= 3).slice(0, 8);
205
+ if (terms.length === 0) return [];
206
+ const matchExpr = terms.map((t) => `${t}*`).join(terms.length >= 3 ? " AND " : " OR ");
207
+ const client = getClient();
208
+ const result = await client.execute({
209
+ sql: `SELECT r.id, r.agent_id, r.project_name, r.insight_type, r.subject,
210
+ r.content, r.source_card_ids, r.confidence, r.created_at
211
+ FROM memory_reflections r
212
+ JOIN memory_reflections_fts fts ON r.rowid = fts.rowid
213
+ WHERE memory_reflections_fts MATCH ?
214
+ AND r.agent_id = ?
215
+ AND r.active = 1
216
+ ORDER BY rank
217
+ LIMIT ?`,
218
+ args: [matchExpr, agentId, limit]
219
+ });
220
+ return result.rows.map((row) => ({
221
+ id: row.id,
222
+ agent_id: row.agent_id,
223
+ project_name: row.project_name,
224
+ insight_type: row.insight_type,
225
+ subject: row.subject,
226
+ content: row.content,
227
+ source_card_ids: JSON.parse(row.source_card_ids ?? "[]"),
228
+ confidence: Number(row.confidence),
229
+ created_at: row.created_at
230
+ }));
231
+ }
232
+ export {
233
+ REFLECTION_SCHEMA,
234
+ detectContradictions,
235
+ detectPatterns,
236
+ generateSummaries,
237
+ runReflection,
238
+ searchReflections
239
+ };
@@ -8,7 +8,7 @@ import {
8
8
  migrateJsonNotifications,
9
9
  readUnreadNotifications,
10
10
  writeNotification
11
- } from "./chunk-N7L33TED.js";
11
+ } from "./chunk-3IDUX6ZD.js";
12
12
  import "./chunk-NEAHEC5G.js";
13
13
  import "./chunk-KRLOFIPI.js";
14
14
  import "./chunk-R4M6XCMU.js";
@@ -16,11 +16,11 @@ import "./chunk-TYLF4LSW.js";
16
16
  import "./chunk-PJHHFJAN.js";
17
17
  import "./chunk-YOQKMB6N.js";
18
18
  import "./chunk-JT76KRZQ.js";
19
- import "./chunk-6M5II4EV.js";
19
+ import "./chunk-GLESRO6K.js";
20
20
  import "./chunk-HP43GLZ6.js";
21
21
  import "./chunk-ELE2C7L4.js";
22
22
  import "./chunk-WZQ4CPRG.js";
23
- import "./chunk-A2NZP64U.js";
23
+ import "./chunk-OQP6TD46.js";
24
24
  import "./chunk-4NYQAS33.js";
25
25
  import "./chunk-OFK72LTZ.js";
26
26
  import "./chunk-6BFIFI5F.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  MultiAgentOrchestrator
3
- } from "./chunk-L4X5EUHR.js";
3
+ } from "./chunk-MRZGBK5L.js";
4
4
  import "./chunk-5QTWQKNF.js";
5
- import "./chunk-2QD7KBJN.js";
6
- import "./chunk-N7L33TED.js";
5
+ import "./chunk-4PGS5OKU.js";
6
+ import "./chunk-3IDUX6ZD.js";
7
7
  import "./chunk-NEAHEC5G.js";
8
8
  import "./chunk-KRLOFIPI.js";
9
9
  import "./chunk-R4M6XCMU.js";
@@ -11,11 +11,11 @@ import "./chunk-TYLF4LSW.js";
11
11
  import "./chunk-PJHHFJAN.js";
12
12
  import "./chunk-YOQKMB6N.js";
13
13
  import "./chunk-JT76KRZQ.js";
14
- import "./chunk-6M5II4EV.js";
14
+ import "./chunk-GLESRO6K.js";
15
15
  import "./chunk-HP43GLZ6.js";
16
16
  import "./chunk-ELE2C7L4.js";
17
17
  import "./chunk-WZQ4CPRG.js";
18
- import "./chunk-A2NZP64U.js";
18
+ import "./chunk-OQP6TD46.js";
19
19
  import "./chunk-4NYQAS33.js";
20
20
  import "./chunk-OFK72LTZ.js";
21
21
  import "./chunk-6BFIFI5F.js";
@@ -7,8 +7,8 @@ import {
7
7
  countActiveMemories,
8
8
  getLicenseSync,
9
9
  init_plan_limits
10
- } from "./chunk-6M5II4EV.js";
11
- import "./chunk-A2NZP64U.js";
10
+ } from "./chunk-GLESRO6K.js";
11
+ import "./chunk-OQP6TD46.js";
12
12
  import "./chunk-4NYQAS33.js";
13
13
  import "./chunk-RUG3N6P4.js";
14
14
  import "./chunk-IRQTM7DY.js";
@@ -5,7 +5,7 @@ import {
5
5
  inferOutcome,
6
6
  inferSemanticLabel,
7
7
  ontologyPayload
8
- } from "./chunk-K6OEWZTB.js";
8
+ } from "./chunk-7WZMQNA6.js";
9
9
  import {
10
10
  init_config,
11
11
  loadConfig
@@ -3,10 +3,10 @@ import {
3
3
  SessionManager,
4
4
  checkGitSafety,
5
5
  targetsMainBranch
6
- } from "../chunk-MILTNDZH.js";
6
+ } from "../chunk-YQEI7PSQ.js";
7
7
  import {
8
8
  MultiAgentOrchestrator
9
- } from "../chunk-L4X5EUHR.js";
9
+ } from "../chunk-MRZGBK5L.js";
10
10
  import {
11
11
  createQuietRenderer,
12
12
  createTerminalRenderer,
@@ -57,8 +57,8 @@ import {
57
57
  matchToolPattern
58
58
  } from "../chunk-HF25XPZE.js";
59
59
  import "../chunk-5QTWQKNF.js";
60
- import "../chunk-2QD7KBJN.js";
61
- import "../chunk-N7L33TED.js";
60
+ import "../chunk-4PGS5OKU.js";
61
+ import "../chunk-3IDUX6ZD.js";
62
62
  import "../chunk-NEAHEC5G.js";
63
63
  import "../chunk-KRLOFIPI.js";
64
64
  import "../chunk-R4M6XCMU.js";
@@ -66,14 +66,14 @@ import "../chunk-TYLF4LSW.js";
66
66
  import "../chunk-PJHHFJAN.js";
67
67
  import "../chunk-YOQKMB6N.js";
68
68
  import "../chunk-JT76KRZQ.js";
69
- import "../chunk-6M5II4EV.js";
69
+ import "../chunk-GLESRO6K.js";
70
70
  import "../chunk-HP43GLZ6.js";
71
71
  import "../chunk-ELE2C7L4.js";
72
72
  import {
73
73
  StateBus,
74
74
  orgBus
75
75
  } from "../chunk-WZQ4CPRG.js";
76
- import "../chunk-A2NZP64U.js";
76
+ import "../chunk-OQP6TD46.js";
77
77
  import "../chunk-4NYQAS33.js";
78
78
  import "../chunk-OFK72LTZ.js";
79
79
  import "../chunk-6BFIFI5F.js";
@@ -2,9 +2,9 @@ import {
2
2
  ensureSessionEventsTable,
3
3
  listRecentSessionEvents,
4
4
  recordSessionEvent
5
- } from "./chunk-LVNMOVGD.js";
5
+ } from "./chunk-4GXJ4KWB.js";
6
6
  import "./chunk-LPGBKR4H.js";
7
- import "./chunk-N7L33TED.js";
7
+ import "./chunk-3IDUX6ZD.js";
8
8
  import "./chunk-NEAHEC5G.js";
9
9
  import "./chunk-KRLOFIPI.js";
10
10
  import "./chunk-R4M6XCMU.js";
@@ -12,11 +12,11 @@ import "./chunk-TYLF4LSW.js";
12
12
  import "./chunk-PJHHFJAN.js";
13
13
  import "./chunk-YOQKMB6N.js";
14
14
  import "./chunk-JT76KRZQ.js";
15
- import "./chunk-6M5II4EV.js";
15
+ import "./chunk-GLESRO6K.js";
16
16
  import "./chunk-HP43GLZ6.js";
17
17
  import "./chunk-ELE2C7L4.js";
18
18
  import "./chunk-WZQ4CPRG.js";
19
- import "./chunk-A2NZP64U.js";
19
+ import "./chunk-OQP6TD46.js";
20
20
  import "./chunk-4NYQAS33.js";
21
21
  import "./chunk-OFK72LTZ.js";
22
22
  import "./chunk-6BFIFI5F.js";
@@ -9,8 +9,8 @@ import {
9
9
  parseStreakState,
10
10
  recordSessionKill,
11
11
  sumTokensSavedSince
12
- } from "./chunk-IHDHL5ML.js";
13
- import "./chunk-A2NZP64U.js";
12
+ } from "./chunk-DJ5ZWBKZ.js";
13
+ import "./chunk-OQP6TD46.js";
14
14
  import "./chunk-4NYQAS33.js";
15
15
  import "./chunk-RUG3N6P4.js";
16
16
  import "./chunk-KVPG5UT6.js";
@@ -3,9 +3,9 @@ import {
3
3
  findSessionForProject,
4
4
  getSessionProject,
5
5
  init_session_scope
6
- } from "./chunk-MVBWW2EO.js";
6
+ } from "./chunk-ZA6RNNQT.js";
7
7
  import "./chunk-LPGBKR4H.js";
8
- import "./chunk-N7L33TED.js";
8
+ import "./chunk-3IDUX6ZD.js";
9
9
  import "./chunk-NEAHEC5G.js";
10
10
  import "./chunk-KRLOFIPI.js";
11
11
  import "./chunk-R4M6XCMU.js";
@@ -13,11 +13,11 @@ import "./chunk-TYLF4LSW.js";
13
13
  import "./chunk-PJHHFJAN.js";
14
14
  import "./chunk-YOQKMB6N.js";
15
15
  import "./chunk-JT76KRZQ.js";
16
- import "./chunk-6M5II4EV.js";
16
+ import "./chunk-GLESRO6K.js";
17
17
  import "./chunk-HP43GLZ6.js";
18
18
  import "./chunk-ELE2C7L4.js";
19
19
  import "./chunk-WZQ4CPRG.js";
20
- import "./chunk-A2NZP64U.js";
20
+ import "./chunk-OQP6TD46.js";
21
21
  import "./chunk-4NYQAS33.js";
22
22
  import "./chunk-OFK72LTZ.js";
23
23
  import "./chunk-6BFIFI5F.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  runSetupWizard,
3
3
  validateModel
4
- } from "./chunk-4QNPADWL.js";
4
+ } from "./chunk-ADNF2DB4.js";
5
5
  import "./chunk-XUHFQHGZ.js";
6
6
  import "./chunk-KVPG5UT6.js";
7
7
  import "./chunk-X2IMCCM5.js";
@@ -3,7 +3,7 @@ import {
3
3
  init_task_scope,
4
4
  sessionScopeFilter,
5
5
  strictSessionScopeFilter
6
- } from "./chunk-N7L33TED.js";
6
+ } from "./chunk-3IDUX6ZD.js";
7
7
  import "./chunk-NEAHEC5G.js";
8
8
  import "./chunk-KRLOFIPI.js";
9
9
  import "./chunk-R4M6XCMU.js";
@@ -11,11 +11,11 @@ import "./chunk-TYLF4LSW.js";
11
11
  import "./chunk-PJHHFJAN.js";
12
12
  import "./chunk-YOQKMB6N.js";
13
13
  import "./chunk-JT76KRZQ.js";
14
- import "./chunk-6M5II4EV.js";
14
+ import "./chunk-GLESRO6K.js";
15
15
  import "./chunk-HP43GLZ6.js";
16
16
  import "./chunk-ELE2C7L4.js";
17
17
  import "./chunk-WZQ4CPRG.js";
18
- import "./chunk-A2NZP64U.js";
18
+ import "./chunk-OQP6TD46.js";
19
19
  import "./chunk-4NYQAS33.js";
20
20
  import "./chunk-OFK72LTZ.js";
21
21
  import "./chunk-6BFIFI5F.js";
@@ -13,8 +13,8 @@ import {
13
13
  slugify,
14
14
  updateTaskStatus,
15
15
  writeCheckpoint
16
- } from "./chunk-2QD7KBJN.js";
17
- import "./chunk-N7L33TED.js";
16
+ } from "./chunk-4PGS5OKU.js";
17
+ import "./chunk-3IDUX6ZD.js";
18
18
  import "./chunk-NEAHEC5G.js";
19
19
  import "./chunk-KRLOFIPI.js";
20
20
  import "./chunk-R4M6XCMU.js";
@@ -22,11 +22,11 @@ import "./chunk-TYLF4LSW.js";
22
22
  import "./chunk-PJHHFJAN.js";
23
23
  import "./chunk-YOQKMB6N.js";
24
24
  import "./chunk-JT76KRZQ.js";
25
- import "./chunk-6M5II4EV.js";
25
+ import "./chunk-GLESRO6K.js";
26
26
  import "./chunk-HP43GLZ6.js";
27
27
  import "./chunk-ELE2C7L4.js";
28
28
  import "./chunk-WZQ4CPRG.js";
29
- import "./chunk-A2NZP64U.js";
29
+ import "./chunk-OQP6TD46.js";
30
30
  import "./chunk-4NYQAS33.js";
31
31
  import "./chunk-OFK72LTZ.js";
32
32
  import "./chunk-6BFIFI5F.js";
@@ -9,7 +9,7 @@ import {
9
9
  init_tasks_review,
10
10
  isStale,
11
11
  listPendingReviews
12
- } from "./chunk-N7L33TED.js";
12
+ } from "./chunk-3IDUX6ZD.js";
13
13
  import "./chunk-NEAHEC5G.js";
14
14
  import "./chunk-KRLOFIPI.js";
15
15
  import "./chunk-R4M6XCMU.js";
@@ -17,11 +17,11 @@ import "./chunk-TYLF4LSW.js";
17
17
  import "./chunk-PJHHFJAN.js";
18
18
  import "./chunk-YOQKMB6N.js";
19
19
  import "./chunk-JT76KRZQ.js";
20
- import "./chunk-6M5II4EV.js";
20
+ import "./chunk-GLESRO6K.js";
21
21
  import "./chunk-HP43GLZ6.js";
22
22
  import "./chunk-ELE2C7L4.js";
23
23
  import "./chunk-WZQ4CPRG.js";
24
- import "./chunk-A2NZP64U.js";
24
+ import "./chunk-OQP6TD46.js";
25
25
  import "./chunk-4NYQAS33.js";
26
26
  import "./chunk-OFK72LTZ.js";
27
27
  import "./chunk-6BFIFI5F.js";
@@ -4,7 +4,7 @@ import {
4
4
  startToolTelemetryFlush,
5
5
  stopToolTelemetryFlush,
6
6
  wrapServerWithTelemetry
7
- } from "./chunk-4FLUOZTR.js";
7
+ } from "./chunk-BBOP5GLG.js";
8
8
  import "./chunk-KFQGP6VL.js";
9
9
  export {
10
10
  getToolUsageStats,
package/dist/tui/App.js CHANGED
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getSessionPrompt
4
- } from "../chunk-LAN26C3W.js";
5
- import "../chunk-RMFDPCA2.js";
4
+ } from "../chunk-DOBUMDFP.js";
5
+ import "../chunk-JBSJUYRX.js";
6
6
  import "../chunk-6QEFN3DV.js";
7
7
  import {
8
8
  init_task_scope,
9
9
  sessionScopeFilter
10
- } from "../chunk-N7L33TED.js";
10
+ } from "../chunk-3IDUX6ZD.js";
11
11
  import "../chunk-NEAHEC5G.js";
12
12
  import "../chunk-KRLOFIPI.js";
13
13
  import "../chunk-R4M6XCMU.js";
@@ -15,14 +15,14 @@ import "../chunk-TYLF4LSW.js";
15
15
  import "../chunk-PJHHFJAN.js";
16
16
  import "../chunk-YOQKMB6N.js";
17
17
  import "../chunk-JT76KRZQ.js";
18
- import "../chunk-6M5II4EV.js";
18
+ import "../chunk-GLESRO6K.js";
19
19
  import "../chunk-HP43GLZ6.js";
20
20
  import "../chunk-ELE2C7L4.js";
21
21
  import {
22
22
  init_state_bus,
23
23
  orgBus
24
24
  } from "../chunk-WZQ4CPRG.js";
25
- import "../chunk-A2NZP64U.js";
25
+ import "../chunk-OQP6TD46.js";
26
26
  import "../chunk-4NYQAS33.js";
27
27
  import "../chunk-OFK72LTZ.js";
28
28
  import "../chunk-6BFIFI5F.js";
@@ -7397,7 +7397,7 @@ function useOrchestrator(enabled = true) {
7397
7397
  let cancelled = false;
7398
7398
  async function init() {
7399
7399
  try {
7400
- const { MultiAgentOrchestrator } = await import("../orchestrator-RXIPT6PZ.js");
7400
+ const { MultiAgentOrchestrator } = await import("../orchestrator-HV7DEBXM.js");
7401
7401
  const { getCoordinatorName, isCoordinatorRole, loadEmployees } = await import("../lib/employees.js");
7402
7402
  const { isExeSession } = await import("../lib/tmux-routing.js");
7403
7403
  const { listTmuxSessions, inTmux } = await import("../lib/tmux-status.js");
@@ -7438,7 +7438,7 @@ function useOrchestrator(enabled = true) {
7438
7438
  setTotalInProgress(health.totalInProgress);
7439
7439
  try {
7440
7440
  const { getClient } = await import("../lib/database.js");
7441
- const { sessionScopeFilter: sessionScopeFilter2 } = await import("../task-scope-MUU4KXE6.js");
7441
+ const { sessionScopeFilter: sessionScopeFilter2 } = await import("../task-scope-5QM7HN4D.js");
7442
7442
  const client = getClient();
7443
7443
  const uoScope = sessionScopeFilter2();
7444
7444
  const result = await client.execute({
@@ -7470,7 +7470,7 @@ function useOrchestrator(enabled = true) {
7470
7470
  const spawnSession = useCallback5(
7471
7471
  async (agentId) => {
7472
7472
  try {
7473
- const { createTaskCore } = await import("../tasks-crud-PMLK3MM4.js");
7473
+ const { createTaskCore } = await import("../tasks-crud-PS73UQYV.js");
7474
7474
  const { ensureEmployee } = await import("../lib/tmux-routing.js");
7475
7475
  const { getCoordinatorName } = await import("../lib/employees.js");
7476
7476
  await createTaskCore({
@@ -8093,7 +8093,7 @@ function TasksView({ onBack }) {
8093
8093
  const { withTrace } = await import("../telemetry-SPVGPKU7.js");
8094
8094
  return withTrace("tui.tasks.loadTasks", async () => {
8095
8095
  try {
8096
- const { loadTaskList } = await import("../tui-data-SB45REYU.js");
8096
+ const { loadTaskList } = await import("../tui-data-O7PRTO73.js");
8097
8097
  const tasks = await loadTaskList();
8098
8098
  setAllTasks(
8099
8099
  tasks.map((task) => ({
@@ -8926,7 +8926,7 @@ function TeamView({ onBack, onViewSessions }) {
8926
8926
  let projectsByEmployee = /* @__PURE__ */ new Map();
8927
8927
  let currentTaskByEmployee = /* @__PURE__ */ new Map();
8928
8928
  try {
8929
- const { loadTeamBadgeCounts, loadTeamDetailMetrics } = await import("../tui-data-SB45REYU.js");
8929
+ const { loadTeamBadgeCounts, loadTeamDetailMetrics } = await import("../tui-data-O7PRTO73.js");
8930
8930
  setBadgeInFlight(true);
8931
8931
  const badgeCountsPromise = loadTeamBadgeCounts();
8932
8932
  const detailsPromise = loadTeamDetailMetrics(roster.map((emp) => emp.name));
@@ -9292,7 +9292,7 @@ function WikiView({ onBack }) {
9292
9292
  }
9293
9293
  setSearchLoading(true);
9294
9294
  try {
9295
- const { searchWikiMemoryRows } = await import("../tui-data-SB45REYU.js");
9295
+ const { searchWikiMemoryRows } = await import("../tui-data-O7PRTO73.js");
9296
9296
  setSearchResults(await searchWikiMemoryRows(query));
9297
9297
  } catch {
9298
9298
  setSearchResults([]);
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  init_task_scope,
3
3
  sessionScopeFilter
4
- } from "./chunk-N7L33TED.js";
4
+ } from "./chunk-3IDUX6ZD.js";
5
5
  import "./chunk-NEAHEC5G.js";
6
6
  import "./chunk-KRLOFIPI.js";
7
7
  import "./chunk-R4M6XCMU.js";
@@ -9,14 +9,14 @@ import "./chunk-TYLF4LSW.js";
9
9
  import "./chunk-PJHHFJAN.js";
10
10
  import "./chunk-YOQKMB6N.js";
11
11
  import "./chunk-JT76KRZQ.js";
12
- import "./chunk-6M5II4EV.js";
12
+ import "./chunk-GLESRO6K.js";
13
13
  import "./chunk-HP43GLZ6.js";
14
14
  import "./chunk-ELE2C7L4.js";
15
15
  import "./chunk-WZQ4CPRG.js";
16
16
  import {
17
17
  getClient,
18
18
  init_database
19
- } from "./chunk-A2NZP64U.js";
19
+ } from "./chunk-OQP6TD46.js";
20
20
  import "./chunk-4NYQAS33.js";
21
21
  import "./chunk-OFK72LTZ.js";
22
22
  import "./chunk-6BFIFI5F.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.129",
3
+ "version": "0.9.131",
4
4
  "description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes