kirograph 0.14.0 → 0.15.0

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 (100) hide show
  1. package/README.md +128 -20
  2. package/dist/assets/logo.png +0 -0
  3. package/dist/bin/commands/help.js +3 -0
  4. package/dist/bin/commands/help.js.map +2 -2
  5. package/dist/bin/commands/memory.js +483 -0
  6. package/dist/bin/commands/memory.js.map +7 -0
  7. package/dist/bin/commands/uninit.js +22 -13
  8. package/dist/bin/commands/uninit.js.map +2 -2
  9. package/dist/bin/installer/config-prompt.js +37 -23
  10. package/dist/bin/installer/config-prompt.js.map +2 -2
  11. package/dist/bin/installer/hooks.js +53 -75
  12. package/dist/bin/installer/hooks.js.map +2 -2
  13. package/dist/bin/installer/index.js +9 -4
  14. package/dist/bin/installer/index.js.map +2 -2
  15. package/dist/bin/installer/prompts.js +37 -6
  16. package/dist/bin/installer/prompts.js.map +2 -2
  17. package/dist/bin/installer/steering.js +19 -0
  18. package/dist/bin/installer/steering.js.map +2 -2
  19. package/dist/bin/installer/targets/aider.js +72 -0
  20. package/dist/bin/installer/targets/aider.js.map +7 -0
  21. package/dist/bin/installer/targets/amp.js +91 -0
  22. package/dist/bin/installer/targets/amp.js.map +7 -0
  23. package/dist/bin/installer/targets/antigravity.js +109 -0
  24. package/dist/bin/installer/targets/antigravity.js.map +7 -0
  25. package/dist/bin/installer/targets/augment.js +81 -0
  26. package/dist/bin/installer/targets/augment.js.map +7 -0
  27. package/dist/bin/installer/targets/claude.js +1 -1
  28. package/dist/bin/installer/targets/claude.js.map +2 -2
  29. package/dist/bin/installer/targets/cline.js +91 -0
  30. package/dist/bin/installer/targets/cline.js.map +7 -0
  31. package/dist/bin/installer/targets/codex.js +1 -1
  32. package/dist/bin/installer/targets/codex.js.map +2 -2
  33. package/dist/bin/installer/targets/continue.js +107 -0
  34. package/dist/bin/installer/targets/continue.js.map +7 -0
  35. package/dist/bin/installer/targets/copilot.js +123 -0
  36. package/dist/bin/installer/targets/copilot.js.map +7 -0
  37. package/dist/bin/installer/targets/cursor.js +143 -0
  38. package/dist/bin/installer/targets/cursor.js.map +7 -0
  39. package/dist/bin/installer/targets/devin.js +148 -0
  40. package/dist/bin/installer/targets/devin.js.map +7 -0
  41. package/dist/bin/installer/targets/gemini-cli.js +126 -0
  42. package/dist/bin/installer/targets/gemini-cli.js.map +7 -0
  43. package/dist/bin/installer/targets/generic.js +120 -0
  44. package/dist/bin/installer/targets/generic.js.map +7 -0
  45. package/dist/bin/installer/targets/goose.js +72 -0
  46. package/dist/bin/installer/targets/goose.js.map +7 -0
  47. package/dist/bin/installer/targets/index.js.map +1 -1
  48. package/dist/bin/installer/targets/junie.js +105 -0
  49. package/dist/bin/installer/targets/junie.js.map +7 -0
  50. package/dist/bin/installer/targets/kilo.js +122 -0
  51. package/dist/bin/installer/targets/kilo.js.map +7 -0
  52. package/dist/bin/installer/targets/kiro.js +3 -3
  53. package/dist/bin/installer/targets/kiro.js.map +2 -2
  54. package/dist/bin/installer/targets/opencode.js +135 -0
  55. package/dist/bin/installer/targets/opencode.js.map +7 -0
  56. package/dist/bin/installer/targets/openhands.js +90 -0
  57. package/dist/bin/installer/targets/openhands.js.map +7 -0
  58. package/dist/bin/installer/targets/replit.js +72 -0
  59. package/dist/bin/installer/targets/replit.js.map +7 -0
  60. package/dist/bin/installer/targets/roo.js +96 -0
  61. package/dist/bin/installer/targets/roo.js.map +7 -0
  62. package/dist/bin/installer/targets/tabnine.js +82 -0
  63. package/dist/bin/installer/targets/tabnine.js.map +7 -0
  64. package/dist/bin/installer/targets/trae.js +84 -0
  65. package/dist/bin/installer/targets/trae.js.map +7 -0
  66. package/dist/bin/installer/targets/warp.js +97 -0
  67. package/dist/bin/installer/targets/warp.js.map +7 -0
  68. package/dist/bin/installer/targets/windsurf.js +141 -0
  69. package/dist/bin/installer/targets/windsurf.js.map +7 -0
  70. package/dist/bin/kirograph.js +3 -1
  71. package/dist/bin/kirograph.js.map +3 -3
  72. package/dist/compression/naive-cost.js +14 -0
  73. package/dist/compression/naive-cost.js.map +2 -2
  74. package/dist/compression/tracker.js +18 -4
  75. package/dist/compression/tracker.js.map +2 -2
  76. package/dist/compression/types.js.map +1 -1
  77. package/dist/config.js +33 -1
  78. package/dist/config.js.map +2 -2
  79. package/dist/db/database.js +17 -0
  80. package/dist/db/database.js.map +2 -2
  81. package/dist/db/memory-schema.sql +51 -0
  82. package/dist/index.js +3 -0
  83. package/dist/index.js.map +2 -2
  84. package/dist/mcp/tool-names.js +5 -1
  85. package/dist/mcp/tool-names.js.map +2 -2
  86. package/dist/mcp/tools.js +232 -3
  87. package/dist/mcp/tools.js.map +2 -2
  88. package/dist/memory/compress.js +142 -0
  89. package/dist/memory/compress.js.map +7 -0
  90. package/dist/memory/database.js +375 -0
  91. package/dist/memory/database.js.map +7 -0
  92. package/dist/memory/index.js +239 -0
  93. package/dist/memory/index.js.map +7 -0
  94. package/dist/memory/symbols.js +54 -0
  95. package/dist/memory/symbols.js.map +7 -0
  96. package/dist/memory/types.js +17 -0
  97. package/dist/memory/types.js.map +7 -0
  98. package/dist/memory/vectors.js +199 -0
  99. package/dist/memory/vectors.js.map +7 -0
  100. package/package.json +1 -1
@@ -0,0 +1,483 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var memory_exports = {};
30
+ __export(memory_exports, {
31
+ register: () => register
32
+ });
33
+ module.exports = __toCommonJS(memory_exports);
34
+ var import_ui = require("../ui");
35
+ function register(program) {
36
+ const mem = program.command("mem").description("Persistent cross-session memory (requires enableMemory: true)");
37
+ mem.command("search <query>").description("Search memory observations (hybrid FTS + vector)").option("--kind <kind>", "Filter by kind: decision, error, pattern, architecture, summary, note").option("--limit <n>", "Max results", "10").option("--session <id>", "Filter to specific session").option("--format <fmt>", "Output format: text, json", "text").action(async (query, opts) => {
38
+ const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
39
+ const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
40
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
41
+ const { trackCliToolSaving } = await Promise.resolve().then(() => require("./utils.js"));
42
+ const cwd = process.cwd();
43
+ if (!KiroGraph.isInitialized(cwd)) {
44
+ console.error(" \u2716 KiroGraph is not initialized. Run `kirograph init` first.");
45
+ process.exit(1);
46
+ }
47
+ const config = await loadConfig(cwd);
48
+ if (!config.enableMemory) {
49
+ console.error(" \u2716 Memory is not enabled. Set enableMemory: true in .kirograph/config.json");
50
+ process.exit(1);
51
+ }
52
+ const cg = await KiroGraph.open(cwd);
53
+ const db = cg.getDatabase();
54
+ db.applyMemorySchema();
55
+ const mem2 = new MemoryManager(config, db.getRawDb());
56
+ mem2.initialize();
57
+ const results = await mem2.search(query, {
58
+ limit: parseInt(opts.limit),
59
+ kind: opts.kind,
60
+ sessionId: opts.session
61
+ });
62
+ if (opts.format === "json") {
63
+ console.log(JSON.stringify(results.map((r) => ({
64
+ id: r.observation.id,
65
+ kind: r.observation.kind,
66
+ content: r.observation.content,
67
+ score: r.score,
68
+ createdAt: r.observation.createdAt,
69
+ sessionId: r.observation.sessionId
70
+ })), null, 2));
71
+ } else {
72
+ if (results.length === 0) {
73
+ console.log(`
74
+ ${import_ui.dim}No observations found for "${query}"${import_ui.reset}
75
+ `);
76
+ } else {
77
+ console.log(`
78
+ ${(0, import_ui.section)("Memory Search:")} ${import_ui.violet}${import_ui.bold}${query}${import_ui.reset}
79
+ `);
80
+ for (const r of results) {
81
+ const age = formatAge(r.observation.createdAt);
82
+ console.log(` ${import_ui.violet}[${r.observation.kind}]${import_ui.reset} ${r.observation.content}`);
83
+ console.log(` ${import_ui.dim}${age} \xB7 score: ${r.score.toFixed(3)}${import_ui.reset}
84
+ `);
85
+ }
86
+ }
87
+ }
88
+ const output = results.map((r) => `[${r.observation.kind}] ${r.observation.content}`).join("\n");
89
+ trackCliToolSaving(cwd, "kirograph_mem_search", output, { limit: parseInt(opts.limit) });
90
+ cg.close();
91
+ });
92
+ mem.command("store [content]").description("Store an observation in memory").option("--kind <kind>", "Observation kind", "note").action(async (content, opts) => {
93
+ const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
94
+ const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
95
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
96
+ const cwd = process.cwd();
97
+ if (!KiroGraph.isInitialized(cwd)) {
98
+ console.error(" \u2716 KiroGraph is not initialized. Run `kirograph init` first.");
99
+ process.exit(1);
100
+ }
101
+ const config = await loadConfig(cwd);
102
+ if (!config.enableMemory) {
103
+ console.error(" \u2716 Memory is not enabled. Set enableMemory: true in .kirograph/config.json");
104
+ process.exit(1);
105
+ }
106
+ let text = content;
107
+ if (!text) {
108
+ const chunks = [];
109
+ for await (const chunk of process.stdin) {
110
+ chunks.push(chunk);
111
+ }
112
+ text = Buffer.concat(chunks).toString("utf8").trim();
113
+ }
114
+ if (!text) {
115
+ console.error(" \u2716 No content provided. Pass as argument or pipe from stdin.");
116
+ process.exit(1);
117
+ }
118
+ const cg = await KiroGraph.open(cwd);
119
+ const db = cg.getDatabase();
120
+ db.applyMemorySchema();
121
+ const mem2 = new MemoryManager(config, db.getRawDb());
122
+ mem2.initialize();
123
+ const id = await mem2.store({ content: text, kind: opts.kind, source: "manual" });
124
+ if (id) {
125
+ console.log(` \u2713 Stored observation ${import_ui.dim}${id}${import_ui.reset} [${import_ui.violet}${opts.kind}${import_ui.reset}]`);
126
+ } else {
127
+ console.log(` ${import_ui.dim}Duplicate observation \u2014 already stored.${import_ui.reset}`);
128
+ }
129
+ cg.close();
130
+ });
131
+ mem.command("timeline").description("List recent sessions and observations").option("--limit <n>", "Number of sessions", "5").option("--session <id>", "Show observations for a specific session").option("--format <fmt>", "Output format: text, json", "text").action(async (opts) => {
132
+ const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
133
+ const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
134
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
135
+ const { trackCliToolSaving } = await Promise.resolve().then(() => require("./utils.js"));
136
+ const cwd = process.cwd();
137
+ if (!KiroGraph.isInitialized(cwd)) {
138
+ console.error(" \u2716 KiroGraph is not initialized. Run `kirograph init` first.");
139
+ process.exit(1);
140
+ }
141
+ const config = await loadConfig(cwd);
142
+ if (!config.enableMemory) {
143
+ console.error(" \u2716 Memory is not enabled. Set enableMemory: true in .kirograph/config.json");
144
+ process.exit(1);
145
+ }
146
+ const cg = await KiroGraph.open(cwd);
147
+ const db = cg.getDatabase();
148
+ db.applyMemorySchema();
149
+ const mem2 = new MemoryManager(config, db.getRawDb());
150
+ mem2.initialize();
151
+ const { sessions, observations } = mem2.timeline({
152
+ limit: parseInt(opts.limit),
153
+ sessionId: opts.session
154
+ });
155
+ if (opts.format === "json") {
156
+ console.log(JSON.stringify({
157
+ sessions: sessions.map((s) => ({
158
+ id: s.id,
159
+ ide: s.ide,
160
+ startedAt: s.startedAt,
161
+ endedAt: s.endedAt,
162
+ observations: (observations.get(s.id) ?? []).map((o) => ({
163
+ id: o.id,
164
+ kind: o.kind,
165
+ content: o.content,
166
+ createdAt: o.createdAt
167
+ }))
168
+ }))
169
+ }, null, 2));
170
+ } else {
171
+ if (sessions.length === 0) {
172
+ console.log(`
173
+ ${import_ui.dim}No memory sessions found.${import_ui.reset}
174
+ `);
175
+ } else {
176
+ console.log(`
177
+ ${(0, import_ui.section)("Memory Timeline")}
178
+ `);
179
+ for (const session of sessions) {
180
+ const start = new Date(session.startedAt).toISOString().slice(0, 16).replace("T", " ");
181
+ const status = session.endedAt ? import_ui.dim + "ended" + import_ui.reset : import_ui.violet + "active" + import_ui.reset;
182
+ const obs = observations.get(session.id) ?? [];
183
+ console.log(` ${import_ui.bold}${start}${import_ui.reset} [${session.ide ?? "unknown"}] ${status} \xB7 ${obs.length} observations`);
184
+ for (const o of obs.slice(0, 5)) {
185
+ console.log(` ${import_ui.dim}\xB7${import_ui.reset} ${import_ui.violet}[${o.kind}]${import_ui.reset} ${o.content.slice(0, 100)}`);
186
+ }
187
+ if (obs.length > 5) console.log(` ${import_ui.dim}\u2026and ${obs.length - 5} more${import_ui.reset}`);
188
+ console.log("");
189
+ }
190
+ }
191
+ }
192
+ const output = sessions.map((s) => s.id).join("\n");
193
+ trackCliToolSaving(cwd, "kirograph_mem_timeline", output, { limit: parseInt(opts.limit) });
194
+ cg.close();
195
+ });
196
+ mem.command("status").description("Show memory subsystem health").action(async () => {
197
+ const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
198
+ const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
199
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
200
+ const cwd = process.cwd();
201
+ if (!KiroGraph.isInitialized(cwd)) {
202
+ console.error(" \u2716 KiroGraph is not initialized. Run `kirograph init` first.");
203
+ process.exit(1);
204
+ }
205
+ const config = await loadConfig(cwd);
206
+ if (!config.enableMemory) {
207
+ console.error(" \u2716 Memory is not enabled. Set enableMemory: true in .kirograph/config.json");
208
+ process.exit(1);
209
+ }
210
+ const cg = await KiroGraph.open(cwd);
211
+ const db = cg.getDatabase();
212
+ db.applyMemorySchema();
213
+ const mem2 = new MemoryManager(config, db.getRawDb());
214
+ mem2.initialize();
215
+ const stats = mem2.getStats();
216
+ console.log(`
217
+ ${(0, import_ui.section)("Memory Status")}
218
+ `);
219
+ console.log(` Sessions: ${import_ui.bold}${stats.sessions}${import_ui.reset} (${stats.activeSessions} active)`);
220
+ console.log(` Observations: ${import_ui.bold}${stats.observations}${import_ui.reset}`);
221
+ console.log(` Symbol links: ${import_ui.bold}${stats.links}${import_ui.reset}`);
222
+ console.log(` Embeddings: ${import_ui.bold}${stats.vectors}${import_ui.reset} / ${stats.embeddableCount}`);
223
+ console.log(` Model mismatch: ${stats.modelMismatch ? import_ui.violet + "\u26A0 yes \u2014 run kirograph mem reembed" + import_ui.reset : import_ui.dim + "no" + import_ui.reset}`);
224
+ console.log(` Compression: ${config.cavemanMode !== "off" ? import_ui.violet + config.cavemanMode + import_ui.reset : import_ui.dim + "off (storing raw)" + import_ui.reset}`);
225
+ console.log("");
226
+ cg.close();
227
+ });
228
+ mem.command("prune").description("Remove old observations").option("--older-than <duration>", "Duration (e.g. 90d, 6m)", "90d").action(async (opts) => {
229
+ const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
230
+ const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
231
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
232
+ const cwd = process.cwd();
233
+ if (!KiroGraph.isInitialized(cwd)) {
234
+ console.error(" \u2716 KiroGraph is not initialized. Run `kirograph init` first.");
235
+ process.exit(1);
236
+ }
237
+ const config = await loadConfig(cwd);
238
+ if (!config.enableMemory) {
239
+ console.error(" \u2716 Memory is not enabled.");
240
+ process.exit(1);
241
+ }
242
+ const ms = parseDuration(opts.olderThan);
243
+ const cg = await KiroGraph.open(cwd);
244
+ const db = cg.getDatabase();
245
+ db.applyMemorySchema();
246
+ const mem2 = new MemoryManager(config, db.getRawDb());
247
+ mem2.initialize();
248
+ const deleted = mem2.prune(ms);
249
+ console.log(` \u2713 Pruned ${deleted} observation(s) older than ${opts.olderThan}`);
250
+ cg.close();
251
+ });
252
+ mem.command("export").description("Export memory observations").option("--format <fmt>", "Output format: jsonl, md", "jsonl").action(async (opts) => {
253
+ const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
254
+ const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
255
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
256
+ const cwd = process.cwd();
257
+ if (!KiroGraph.isInitialized(cwd)) {
258
+ console.error(" \u2716 KiroGraph is not initialized. Run `kirograph init` first.");
259
+ process.exit(1);
260
+ }
261
+ const config = await loadConfig(cwd);
262
+ if (!config.enableMemory) {
263
+ console.error(" \u2716 Memory is not enabled.");
264
+ process.exit(1);
265
+ }
266
+ const cg = await KiroGraph.open(cwd);
267
+ const db = cg.getDatabase();
268
+ db.applyMemorySchema();
269
+ const mem2 = new MemoryManager(config, db.getRawDb());
270
+ mem2.initialize();
271
+ const { sessions, observations } = mem2.timeline({ limit: 1e3 });
272
+ if (opts.format === "jsonl") {
273
+ for (const session of sessions) {
274
+ const obs = observations.get(session.id) ?? [];
275
+ for (const o of obs) {
276
+ console.log(JSON.stringify({
277
+ id: o.id,
278
+ content: o.content,
279
+ content_raw: o.contentRaw,
280
+ kind: o.kind,
281
+ tags: o.tags,
282
+ created_at: o.createdAt,
283
+ session_id: o.sessionId
284
+ }));
285
+ }
286
+ }
287
+ } else {
288
+ for (const session of sessions) {
289
+ const start = new Date(session.startedAt).toISOString().slice(0, 10);
290
+ console.log(`## Session ${start} (${session.ide ?? "unknown"})
291
+ `);
292
+ const obs = observations.get(session.id) ?? [];
293
+ for (const o of obs) {
294
+ const time = new Date(o.createdAt).toISOString().slice(11, 16);
295
+ console.log(`### [${o.kind}] ${time}`);
296
+ console.log(o.content);
297
+ console.log("");
298
+ }
299
+ }
300
+ }
301
+ cg.close();
302
+ });
303
+ mem.command("import <file>").description("Import observations from JSONL backup").action(async (file) => {
304
+ const fs = await import("fs");
305
+ const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
306
+ const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
307
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
308
+ const cwd = process.cwd();
309
+ if (!KiroGraph.isInitialized(cwd)) {
310
+ console.error(" \u2716 KiroGraph is not initialized. Run `kirograph init` first.");
311
+ process.exit(1);
312
+ }
313
+ const config = await loadConfig(cwd);
314
+ if (!config.enableMemory) {
315
+ console.error(" \u2716 Memory is not enabled.");
316
+ process.exit(1);
317
+ }
318
+ if (!fs.existsSync(file)) {
319
+ console.error(` \u2716 File not found: ${file}`);
320
+ process.exit(1);
321
+ }
322
+ const cg = await KiroGraph.open(cwd);
323
+ const db = cg.getDatabase();
324
+ db.applyMemorySchema();
325
+ const mem2 = new MemoryManager(config, db.getRawDb());
326
+ mem2.initialize();
327
+ const lines = fs.readFileSync(file, "utf8").split("\n").filter((l) => l.trim());
328
+ let imported = 0;
329
+ let skipped = 0;
330
+ for (const line of lines) {
331
+ try {
332
+ const data = JSON.parse(line);
333
+ const id = await mem2.store({
334
+ content: data.content_raw || data.content,
335
+ kind: data.kind ?? "note",
336
+ source: "manual",
337
+ tags: data.tags
338
+ });
339
+ if (id) imported++;
340
+ else skipped++;
341
+ } catch {
342
+ skipped++;
343
+ }
344
+ }
345
+ console.log(` \u2713 Imported ${imported} observation(s), skipped ${skipped} (duplicates/errors)`);
346
+ cg.close();
347
+ });
348
+ mem.command("reembed").description("Re-embed all observations with the current model").option("--batch <n>", "Batch size", "32").action(async (opts) => {
349
+ const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
350
+ const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
351
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
352
+ const cwd = process.cwd();
353
+ if (!KiroGraph.isInitialized(cwd)) {
354
+ console.error(" \u2716 KiroGraph is not initialized. Run `kirograph init` first.");
355
+ process.exit(1);
356
+ }
357
+ const config = await loadConfig(cwd);
358
+ if (!config.enableMemory) {
359
+ console.error(" \u2716 Memory is not enabled.");
360
+ process.exit(1);
361
+ }
362
+ const cg = await KiroGraph.open(cwd);
363
+ const db = cg.getDatabase();
364
+ db.applyMemorySchema();
365
+ const mem2 = new MemoryManager(config, db.getRawDb());
366
+ mem2.initialize();
367
+ console.log(" Re-embedding all observations...");
368
+ const count = await mem2.reembed(parseInt(opts.batch));
369
+ console.log(` \u2713 Re-embedded ${count} observation(s)`);
370
+ cg.close();
371
+ });
372
+ mem.command("lint").description("Health check: find stale links, model mismatch, orphans").option("--fix", "Auto-fix issues (remove stale links, close stale sessions)").action(async (opts) => {
373
+ const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
374
+ const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
375
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
376
+ const cwd = process.cwd();
377
+ if (!KiroGraph.isInitialized(cwd)) {
378
+ console.error(" \u2716 KiroGraph is not initialized. Run `kirograph init` first.");
379
+ process.exit(1);
380
+ }
381
+ const config = await loadConfig(cwd);
382
+ if (!config.enableMemory) {
383
+ console.error(" \u2716 Memory is not enabled.");
384
+ process.exit(1);
385
+ }
386
+ const cg = await KiroGraph.open(cwd);
387
+ const db = cg.getDatabase();
388
+ db.applyMemorySchema();
389
+ const mem2 = new MemoryManager(config, db.getRawDb());
390
+ mem2.initialize();
391
+ const result = mem2.lint();
392
+ console.log(`
393
+ ${(0, import_ui.section)("Memory Lint")}
394
+ `);
395
+ console.log(` Stale links: ${result.staleLinks > 0 ? import_ui.violet + result.staleLinks + import_ui.reset : import_ui.dim + "0" + import_ui.reset}`);
396
+ console.log(` Model mismatch: ${result.modelMismatch ? import_ui.violet + "yes" + import_ui.reset : import_ui.dim + "no" + import_ui.reset}`);
397
+ console.log(` Stale sessions: ${result.staleSessions > 0 ? import_ui.violet + String(result.staleSessions) + " (auto-closed)" + import_ui.reset : import_ui.dim + "0" + import_ui.reset}`);
398
+ if (opts.fix && result.staleLinks > 0) {
399
+ const removed = mem2.removeStaleLinks();
400
+ console.log(`
401
+ \u2713 Removed ${removed} stale link(s)`);
402
+ } else if (result.staleLinks > 0) {
403
+ console.log(`
404
+ ${import_ui.dim}Run with --fix to remove stale links${import_ui.reset}`);
405
+ }
406
+ if (result.modelMismatch) {
407
+ console.log(` ${import_ui.dim}Run 'kirograph mem reembed' to fix model mismatch${import_ui.reset}`);
408
+ }
409
+ console.log("");
410
+ cg.close();
411
+ });
412
+ mem.command("session-start").description("Start a new memory session (called by hooks)").option("--ide <name>", "IDE name", "kiro").action(async (opts) => {
413
+ const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
414
+ const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
415
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
416
+ const cwd = process.cwd();
417
+ if (!KiroGraph.isInitialized(cwd)) return;
418
+ const config = await loadConfig(cwd);
419
+ if (!config.enableMemory) return;
420
+ const cg = await KiroGraph.open(cwd);
421
+ const db = cg.getDatabase();
422
+ db.applyMemorySchema();
423
+ const mem2 = new MemoryManager(config, db.getRawDb());
424
+ mem2.initialize();
425
+ const { MemoryDatabase } = await Promise.resolve().then(() => require("../../memory/database.js"));
426
+ const memDb = new MemoryDatabase(db.getRawDb());
427
+ memDb.initialize();
428
+ const sessionId = memDb.getOrCreateSession(opts.ide, cwd);
429
+ console.log(sessionId);
430
+ cg.close();
431
+ });
432
+ mem.command("session-end").description("End the current memory session (called by hooks)").option("--ide <name>", "IDE name", "kiro").action(async (opts) => {
433
+ const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
434
+ const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
435
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
436
+ const cwd = process.cwd();
437
+ if (!KiroGraph.isInitialized(cwd)) return;
438
+ const config = await loadConfig(cwd);
439
+ if (!config.enableMemory) return;
440
+ const cg = await KiroGraph.open(cwd);
441
+ const db = cg.getDatabase();
442
+ db.applyMemorySchema();
443
+ const mem2 = new MemoryManager(config, db.getRawDb());
444
+ mem2.initialize();
445
+ mem2.endCurrentSession(opts.ide);
446
+ cg.close();
447
+ });
448
+ }
449
+ function formatAge(timestamp) {
450
+ const diff = Date.now() - timestamp;
451
+ const minutes = Math.floor(diff / 6e4);
452
+ if (minutes < 60) return `${minutes}m ago`;
453
+ const hours = Math.floor(minutes / 60);
454
+ if (hours < 24) return `${hours}h ago`;
455
+ const days = Math.floor(hours / 24);
456
+ if (days < 7) return `${days}d ago`;
457
+ const weeks = Math.floor(days / 7);
458
+ if (weeks < 5) return `${weeks}w ago`;
459
+ const months = Math.floor(days / 30);
460
+ return `${months}mo ago`;
461
+ }
462
+ function parseDuration(duration) {
463
+ const match = duration.match(/^(\d+)(d|m|w|h)$/);
464
+ if (!match) return 90 * 24 * 60 * 60 * 1e3;
465
+ const value = parseInt(match[1]);
466
+ switch (match[2]) {
467
+ case "h":
468
+ return value * 60 * 60 * 1e3;
469
+ case "d":
470
+ return value * 24 * 60 * 60 * 1e3;
471
+ case "w":
472
+ return value * 7 * 24 * 60 * 60 * 1e3;
473
+ case "m":
474
+ return value * 30 * 24 * 60 * 60 * 1e3;
475
+ default:
476
+ return 90 * 24 * 60 * 60 * 1e3;
477
+ }
478
+ }
479
+ // Annotate the CommonJS export names for ESM import in node:
480
+ 0 && (module.exports = {
481
+ register
482
+ });
483
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/commands/memory.ts"],
4
+ "sourcesContent": ["/**\n * KiroGraph Memory CLI \u2014 mirrors MCP tools + maintenance commands\n *\n * kirograph mem search <query>\n * kirograph mem store <content>\n * kirograph mem timeline\n * kirograph mem status\n * kirograph mem prune\n * kirograph mem export\n * kirograph mem import\n * kirograph mem reembed\n * kirograph mem lint\n */\n\nimport { Command } from 'commander';\nimport { dim, reset, violet, bold, section } from '../ui';\n\nexport function register(program: Command): void {\n const mem = program\n .command('mem')\n .description('Persistent cross-session memory (requires enableMemory: true)');\n\n // \u2500\u2500 search \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n mem\n .command('search <query>')\n .description('Search memory observations (hybrid FTS + vector)')\n .option('--kind <kind>', 'Filter by kind: decision, error, pattern, architecture, summary, note')\n .option('--limit <n>', 'Max results', '10')\n .option('--session <id>', 'Filter to specific session')\n .option('--format <fmt>', 'Output format: text, json', 'text')\n .action(async (query: string, opts: { kind?: string; limit: string; session?: string; format: string }) => {\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n const { trackCliToolSaving } = await Promise.resolve().then(() => require('./utils.js'));\n\n const cwd = process.cwd();\n if (!KiroGraph.isInitialized(cwd)) {\n console.error(' \u2716 KiroGraph is not initialized. Run `kirograph init` first.');\n process.exit(1);\n }\n const config = await loadConfig(cwd);\n if (!config.enableMemory) {\n console.error(' \u2716 Memory is not enabled. Set enableMemory: true in .kirograph/config.json');\n process.exit(1);\n }\n\n const cg = await KiroGraph.open(cwd);\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n const results = await mem.search(query, {\n limit: parseInt(opts.limit),\n kind: opts.kind as any,\n sessionId: opts.session,\n });\n\n if (opts.format === 'json') {\n console.log(JSON.stringify(results.map(r => ({\n id: r.observation.id,\n kind: r.observation.kind,\n content: r.observation.content,\n score: r.score,\n createdAt: r.observation.createdAt,\n sessionId: r.observation.sessionId,\n })), null, 2));\n } else {\n if (results.length === 0) {\n console.log(`\\n ${dim}No observations found for \"${query}\"${reset}\\n`);\n } else {\n console.log(`\\n ${section('Memory Search:')} ${violet}${bold}${query}${reset}\\n`);\n for (const r of results) {\n const age = formatAge(r.observation.createdAt);\n console.log(` ${violet}[${r.observation.kind}]${reset} ${r.observation.content}`);\n console.log(` ${dim}${age} \u00B7 score: ${r.score.toFixed(3)}${reset}\\n`);\n }\n }\n }\n\n const output = results.map(r => `[${r.observation.kind}] ${r.observation.content}`).join('\\n');\n trackCliToolSaving(cwd, 'kirograph_mem_search', output, { limit: parseInt(opts.limit) });\n cg.close();\n });\n\n // \u2500\u2500 store \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n mem\n .command('store [content]')\n .description('Store an observation in memory')\n .option('--kind <kind>', 'Observation kind', 'note')\n .action(async (content: string | undefined, opts: { kind: string }) => {\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n\n const cwd = process.cwd();\n if (!KiroGraph.isInitialized(cwd)) {\n console.error(' \u2716 KiroGraph is not initialized. Run `kirograph init` first.');\n process.exit(1);\n }\n const config = await loadConfig(cwd);\n if (!config.enableMemory) {\n console.error(' \u2716 Memory is not enabled. Set enableMemory: true in .kirograph/config.json');\n process.exit(1);\n }\n\n // Read from stdin if no content argument\n let text = content;\n if (!text) {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(chunk);\n }\n text = Buffer.concat(chunks).toString('utf8').trim();\n }\n\n if (!text) {\n console.error(' \u2716 No content provided. Pass as argument or pipe from stdin.');\n process.exit(1);\n }\n\n const cg = await KiroGraph.open(cwd);\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n const id = await mem.store({ content: text, kind: opts.kind as any, source: 'manual' });\n\n if (id) {\n console.log(` \u2713 Stored observation ${dim}${id}${reset} [${violet}${opts.kind}${reset}]`);\n } else {\n console.log(` ${dim}Duplicate observation \u2014 already stored.${reset}`);\n }\n\n cg.close();\n });\n\n // \u2500\u2500 timeline \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n mem\n .command('timeline')\n .description('List recent sessions and observations')\n .option('--limit <n>', 'Number of sessions', '5')\n .option('--session <id>', 'Show observations for a specific session')\n .option('--format <fmt>', 'Output format: text, json', 'text')\n .action(async (opts: { limit: string; session?: string; format: string }) => {\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n const { trackCliToolSaving } = await Promise.resolve().then(() => require('./utils.js'));\n\n const cwd = process.cwd();\n if (!KiroGraph.isInitialized(cwd)) {\n console.error(' \u2716 KiroGraph is not initialized. Run `kirograph init` first.');\n process.exit(1);\n }\n const config = await loadConfig(cwd);\n if (!config.enableMemory) {\n console.error(' \u2716 Memory is not enabled. Set enableMemory: true in .kirograph/config.json');\n process.exit(1);\n }\n\n const cg = await KiroGraph.open(cwd);\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n const { sessions, observations } = mem.timeline({\n limit: parseInt(opts.limit),\n sessionId: opts.session,\n });\n\n if (opts.format === 'json') {\n console.log(JSON.stringify({\n sessions: sessions.map(s => ({\n id: s.id,\n ide: s.ide,\n startedAt: s.startedAt,\n endedAt: s.endedAt,\n observations: (observations.get(s.id) ?? []).map(o => ({\n id: o.id, kind: o.kind, content: o.content, createdAt: o.createdAt,\n })),\n })),\n }, null, 2));\n } else {\n if (sessions.length === 0) {\n console.log(`\\n ${dim}No memory sessions found.${reset}\\n`);\n } else {\n console.log(`\\n ${section('Memory Timeline')}\\n`);\n for (const session of sessions) {\n const start = new Date(session.startedAt).toISOString().slice(0, 16).replace('T', ' ');\n const status = session.endedAt ? dim + 'ended' + reset : violet + 'active' + reset;\n const obs = observations.get(session.id) ?? [];\n console.log(` ${bold}${start}${reset} [${session.ide ?? 'unknown'}] ${status} \u00B7 ${obs.length} observations`);\n for (const o of obs.slice(0, 5)) {\n console.log(` ${dim}\u00B7${reset} ${violet}[${o.kind}]${reset} ${o.content.slice(0, 100)}`);\n }\n if (obs.length > 5) console.log(` ${dim}\u2026and ${obs.length - 5} more${reset}`);\n console.log('');\n }\n }\n }\n\n const output = sessions.map(s => s.id).join('\\n');\n trackCliToolSaving(cwd, 'kirograph_mem_timeline', output, { limit: parseInt(opts.limit) });\n cg.close();\n });\n\n // \u2500\u2500 status \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n mem\n .command('status')\n .description('Show memory subsystem health')\n .action(async () => {\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n\n const cwd = process.cwd();\n if (!KiroGraph.isInitialized(cwd)) {\n console.error(' \u2716 KiroGraph is not initialized. Run `kirograph init` first.');\n process.exit(1);\n }\n const config = await loadConfig(cwd);\n if (!config.enableMemory) {\n console.error(' \u2716 Memory is not enabled. Set enableMemory: true in .kirograph/config.json');\n process.exit(1);\n }\n\n const cg = await KiroGraph.open(cwd);\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n const stats = mem.getStats();\n console.log(`\\n ${section('Memory Status')}\\n`);\n console.log(` Sessions: ${bold}${stats.sessions}${reset} (${stats.activeSessions} active)`);\n console.log(` Observations: ${bold}${stats.observations}${reset}`);\n console.log(` Symbol links: ${bold}${stats.links}${reset}`);\n console.log(` Embeddings: ${bold}${stats.vectors}${reset} / ${stats.embeddableCount}`);\n console.log(` Model mismatch: ${stats.modelMismatch ? violet + '\u26A0 yes \u2014 run kirograph mem reembed' + reset : dim + 'no' + reset}`);\n console.log(` Compression: ${config.cavemanMode !== 'off' ? violet + config.cavemanMode + reset : dim + 'off (storing raw)' + reset}`);\n console.log('');\n\n cg.close();\n });\n\n // \u2500\u2500 prune \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n mem\n .command('prune')\n .description('Remove old observations')\n .option('--older-than <duration>', 'Duration (e.g. 90d, 6m)', '90d')\n .action(async (opts: { olderThan: string }) => {\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n\n const cwd = process.cwd();\n if (!KiroGraph.isInitialized(cwd)) {\n console.error(' \u2716 KiroGraph is not initialized. Run `kirograph init` first.');\n process.exit(1);\n }\n const config = await loadConfig(cwd);\n if (!config.enableMemory) {\n console.error(' \u2716 Memory is not enabled.');\n process.exit(1);\n }\n\n const ms = parseDuration(opts.olderThan);\n const cg = await KiroGraph.open(cwd);\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n const deleted = mem.prune(ms);\n console.log(` \u2713 Pruned ${deleted} observation(s) older than ${opts.olderThan}`);\n\n cg.close();\n });\n\n // \u2500\u2500 export \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n mem\n .command('export')\n .description('Export memory observations')\n .option('--format <fmt>', 'Output format: jsonl, md', 'jsonl')\n .action(async (opts: { format: string }) => {\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n\n const cwd = process.cwd();\n if (!KiroGraph.isInitialized(cwd)) {\n console.error(' \u2716 KiroGraph is not initialized. Run `kirograph init` first.');\n process.exit(1);\n }\n const config = await loadConfig(cwd);\n if (!config.enableMemory) {\n console.error(' \u2716 Memory is not enabled.');\n process.exit(1);\n }\n\n const cg = await KiroGraph.open(cwd);\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n const { sessions, observations } = mem.timeline({ limit: 1000 });\n\n if (opts.format === 'jsonl') {\n for (const session of sessions) {\n const obs = observations.get(session.id) ?? [];\n for (const o of obs) {\n console.log(JSON.stringify({\n id: o.id,\n content: o.content,\n content_raw: o.contentRaw,\n kind: o.kind,\n tags: o.tags,\n created_at: o.createdAt,\n session_id: o.sessionId,\n }));\n }\n }\n } else {\n // Markdown format\n for (const session of sessions) {\n const start = new Date(session.startedAt).toISOString().slice(0, 10);\n console.log(`## Session ${start} (${session.ide ?? 'unknown'})\\n`);\n const obs = observations.get(session.id) ?? [];\n for (const o of obs) {\n const time = new Date(o.createdAt).toISOString().slice(11, 16);\n console.log(`### [${o.kind}] ${time}`);\n console.log(o.content);\n console.log('');\n }\n }\n }\n\n cg.close();\n });\n\n // \u2500\u2500 import \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n mem\n .command('import <file>')\n .description('Import observations from JSONL backup')\n .action(async (file: string) => {\n const fs = await import('fs');\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n\n const cwd = process.cwd();\n if (!KiroGraph.isInitialized(cwd)) {\n console.error(' \u2716 KiroGraph is not initialized. Run `kirograph init` first.');\n process.exit(1);\n }\n const config = await loadConfig(cwd);\n if (!config.enableMemory) {\n console.error(' \u2716 Memory is not enabled.');\n process.exit(1);\n }\n\n if (!fs.existsSync(file)) {\n console.error(` \u2716 File not found: ${file}`);\n process.exit(1);\n }\n\n const cg = await KiroGraph.open(cwd);\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n const lines = fs.readFileSync(file, 'utf8').split('\\n').filter(l => l.trim());\n let imported = 0;\n let skipped = 0;\n\n for (const line of lines) {\n try {\n const data = JSON.parse(line);\n const id = await mem.store({\n content: data.content_raw || data.content,\n kind: data.kind ?? 'note',\n source: 'manual',\n tags: data.tags,\n });\n if (id) imported++;\n else skipped++;\n } catch {\n skipped++;\n }\n }\n\n console.log(` \u2713 Imported ${imported} observation(s), skipped ${skipped} (duplicates/errors)`);\n cg.close();\n });\n\n // \u2500\u2500 reembed \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n mem\n .command('reembed')\n .description('Re-embed all observations with the current model')\n .option('--batch <n>', 'Batch size', '32')\n .action(async (opts: { batch: string }) => {\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n\n const cwd = process.cwd();\n if (!KiroGraph.isInitialized(cwd)) {\n console.error(' \u2716 KiroGraph is not initialized. Run `kirograph init` first.');\n process.exit(1);\n }\n const config = await loadConfig(cwd);\n if (!config.enableMemory) {\n console.error(' \u2716 Memory is not enabled.');\n process.exit(1);\n }\n\n const cg = await KiroGraph.open(cwd);\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n console.log(' Re-embedding all observations...');\n const count = await mem.reembed(parseInt(opts.batch));\n console.log(` \u2713 Re-embedded ${count} observation(s)`);\n\n cg.close();\n });\n\n // \u2500\u2500 lint \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n mem\n .command('lint')\n .description('Health check: find stale links, model mismatch, orphans')\n .option('--fix', 'Auto-fix issues (remove stale links, close stale sessions)')\n .action(async (opts: { fix?: boolean }) => {\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n\n const cwd = process.cwd();\n if (!KiroGraph.isInitialized(cwd)) {\n console.error(' \u2716 KiroGraph is not initialized. Run `kirograph init` first.');\n process.exit(1);\n }\n const config = await loadConfig(cwd);\n if (!config.enableMemory) {\n console.error(' \u2716 Memory is not enabled.');\n process.exit(1);\n }\n\n const cg = await KiroGraph.open(cwd);\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n const result = mem.lint();\n\n console.log(`\\n ${section('Memory Lint')}\\n`);\n console.log(` Stale links: ${result.staleLinks > 0 ? violet + result.staleLinks + reset : dim + '0' + reset}`);\n console.log(` Model mismatch: ${result.modelMismatch ? violet + 'yes' + reset : dim + 'no' + reset}`);\n console.log(` Stale sessions: ${result.staleSessions > 0 ? violet + String(result.staleSessions) + ' (auto-closed)' + reset : dim + '0' + reset}`);\n\n if (opts.fix && result.staleLinks > 0) {\n const removed = mem.removeStaleLinks();\n console.log(`\\n \u2713 Removed ${removed} stale link(s)`);\n } else if (result.staleLinks > 0) {\n console.log(`\\n ${dim}Run with --fix to remove stale links${reset}`);\n }\n\n if (result.modelMismatch) {\n console.log(` ${dim}Run 'kirograph mem reembed' to fix model mismatch${reset}`);\n }\n\n console.log('');\n cg.close();\n });\n\n // \u2500\u2500 session management (for hooks) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n mem\n .command('session-start')\n .description('Start a new memory session (called by hooks)')\n .option('--ide <name>', 'IDE name', 'kiro')\n .action(async (opts: { ide: string }) => {\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n\n const cwd = process.cwd();\n if (!KiroGraph.isInitialized(cwd)) return;\n const config = await loadConfig(cwd);\n if (!config.enableMemory) return;\n\n const cg = await KiroGraph.open(cwd);\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n // getOrCreateSession handles auto-creation\n const { MemoryDatabase } = await Promise.resolve().then(() => require('../../memory/database.js'));\n const memDb = new MemoryDatabase(db.getRawDb());\n memDb.initialize();\n const sessionId = memDb.getOrCreateSession(opts.ide, cwd);\n console.log(sessionId);\n\n cg.close();\n });\n\n mem\n .command('session-end')\n .description('End the current memory session (called by hooks)')\n .option('--ide <name>', 'IDE name', 'kiro')\n .action(async (opts: { ide: string }) => {\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n\n const cwd = process.cwd();\n if (!KiroGraph.isInitialized(cwd)) return;\n const config = await loadConfig(cwd);\n if (!config.enableMemory) return;\n\n const cg = await KiroGraph.open(cwd);\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n mem.endCurrentSession(opts.ide);\n\n cg.close();\n });\n}\n\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction formatAge(timestamp: number): string {\n const diff = Date.now() - timestamp;\n const minutes = Math.floor(diff / 60000);\n if (minutes < 60) return `${minutes}m ago`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n const days = Math.floor(hours / 24);\n if (days < 7) return `${days}d ago`;\n const weeks = Math.floor(days / 7);\n if (weeks < 5) return `${weeks}w ago`;\n const months = Math.floor(days / 30);\n return `${months}mo ago`;\n}\n\nfunction parseDuration(duration: string): number {\n const match = duration.match(/^(\\d+)(d|m|w|h)$/);\n if (!match) return 90 * 24 * 60 * 60 * 1000; // default 90 days\n\n const value = parseInt(match[1]);\n switch (match[2]) {\n case 'h': return value * 60 * 60 * 1000;\n case 'd': return value * 24 * 60 * 60 * 1000;\n case 'w': return value * 7 * 24 * 60 * 60 * 1000;\n case 'm': return value * 30 * 24 * 60 * 60 * 1000;\n default: return 90 * 24 * 60 * 60 * 1000;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["mem"]
7
+ }