sandstream-kit 1.1.0 → 1.3.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 (129) hide show
  1. package/README.md +101 -92
  2. package/dist/adapters/expo-eas.js +1 -1
  3. package/dist/adapters/expo-eas.js.map +1 -1
  4. package/dist/audit-logging-service.js +1 -1
  5. package/dist/audit-logging-service.js.map +1 -1
  6. package/dist/author-verification.js +1 -1
  7. package/dist/author-verification.js.map +1 -1
  8. package/dist/check-web-search.js +37 -6
  9. package/dist/check-web-search.js.map +1 -1
  10. package/dist/cli-shared.d.ts +4 -0
  11. package/dist/cli-shared.js +11 -0
  12. package/dist/cli-shared.js.map +1 -0
  13. package/dist/cli.js +175 -1189
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands/audit.d.ts +1 -0
  16. package/dist/commands/audit.js +99 -0
  17. package/dist/commands/audit.js.map +1 -0
  18. package/dist/commands/auth.d.ts +1 -0
  19. package/dist/commands/auth.js +121 -0
  20. package/dist/commands/auth.js.map +1 -0
  21. package/dist/commands/env.d.ts +1 -0
  22. package/dist/commands/env.js +149 -0
  23. package/dist/commands/env.js.map +1 -0
  24. package/dist/commands/hooks.d.ts +1 -0
  25. package/dist/commands/hooks.js +146 -0
  26. package/dist/commands/hooks.js.map +1 -0
  27. package/dist/commands/mcp.d.ts +1 -0
  28. package/dist/commands/mcp.js +120 -0
  29. package/dist/commands/mcp.js.map +1 -0
  30. package/dist/commands/memory.d.ts +1 -0
  31. package/dist/commands/memory.js +534 -0
  32. package/dist/commands/memory.js.map +1 -0
  33. package/dist/config.d.ts +2 -0
  34. package/dist/config.js +4 -0
  35. package/dist/config.js.map +1 -1
  36. package/dist/mcp-server.js +59 -6
  37. package/dist/mcp-server.js.map +1 -1
  38. package/dist/memory/amazonq.d.ts +5 -0
  39. package/dist/memory/amazonq.js +161 -0
  40. package/dist/memory/amazonq.js.map +1 -0
  41. package/dist/memory/cline.d.ts +5 -0
  42. package/dist/memory/cline.js +117 -0
  43. package/dist/memory/cline.js.map +1 -0
  44. package/dist/memory/codex.d.ts +5 -0
  45. package/dist/memory/codex.js +150 -0
  46. package/dist/memory/codex.js.map +1 -0
  47. package/dist/memory/continue.d.ts +5 -0
  48. package/dist/memory/continue.js +116 -0
  49. package/dist/memory/continue.js.map +1 -0
  50. package/dist/memory/cursor.d.ts +4 -0
  51. package/dist/memory/cursor.js +116 -0
  52. package/dist/memory/cursor.js.map +1 -0
  53. package/dist/memory/db.d.ts +12 -1
  54. package/dist/memory/db.js +43 -1
  55. package/dist/memory/db.js.map +1 -1
  56. package/dist/memory/gemini.d.ts +5 -0
  57. package/dist/memory/gemini.js +176 -0
  58. package/dist/memory/gemini.js.map +1 -0
  59. package/dist/memory/hook.d.ts +9 -0
  60. package/dist/memory/hook.js +34 -1
  61. package/dist/memory/hook.js.map +1 -1
  62. package/dist/memory/install.js +1 -0
  63. package/dist/memory/install.js.map +1 -1
  64. package/dist/memory/merge.d.ts +18 -0
  65. package/dist/memory/merge.js +109 -0
  66. package/dist/memory/merge.js.map +1 -0
  67. package/dist/memory/parser.d.ts +9 -0
  68. package/dist/memory/parser.js +40 -3
  69. package/dist/memory/parser.js.map +1 -1
  70. package/dist/memory/suggest.d.ts +21 -0
  71. package/dist/memory/suggest.js +36 -0
  72. package/dist/memory/suggest.js.map +1 -0
  73. package/dist/onepassword.js +1 -1
  74. package/dist/onepassword.js.map +1 -1
  75. package/dist/open.js +8 -2
  76. package/dist/open.js.map +1 -1
  77. package/dist/run.js +1 -1
  78. package/dist/run.js.map +1 -1
  79. package/dist/service-auth.d.ts +31 -0
  80. package/dist/service-auth.js +47 -0
  81. package/dist/service-auth.js.map +1 -0
  82. package/dist/stack-detector.js +53 -76
  83. package/dist/stack-detector.js.map +1 -1
  84. package/dist/status.d.ts +9 -0
  85. package/dist/status.js +119 -0
  86. package/dist/status.js.map +1 -0
  87. package/package.json +9 -4
  88. package/dist/memory/backup 2.d.ts +0 -6
  89. package/dist/memory/backup 2.js +0 -80
  90. package/dist/memory/backup 2.js.map +0 -1
  91. package/dist/memory/db 2.d.ts +0 -40
  92. package/dist/memory/db 2.js +0 -233
  93. package/dist/memory/db 2.js.map +0 -1
  94. package/dist/memory/hook 2.d.ts +0 -6
  95. package/dist/memory/hook 2.js +0 -51
  96. package/dist/memory/hook 2.js.map +0 -1
  97. package/dist/memory/hook.test 2.d.ts +0 -1
  98. package/dist/memory/hook.test 2.js +0 -35
  99. package/dist/memory/hook.test 2.js.map +0 -1
  100. package/dist/memory/install 2.d.ts +0 -8
  101. package/dist/memory/install 2.js +0 -72
  102. package/dist/memory/install 2.js.map +0 -1
  103. package/dist/memory/install.test 2.d.ts +0 -1
  104. package/dist/memory/install.test 2.js +0 -59
  105. package/dist/memory/install.test 2.js.map +0 -1
  106. package/dist/memory/pal 2.d.ts +0 -47
  107. package/dist/memory/pal 2.js +0 -154
  108. package/dist/memory/pal 2.js.map +0 -1
  109. package/dist/memory/project 2.d.ts +0 -1
  110. package/dist/memory/project 2.js +0 -24
  111. package/dist/memory/project 2.js.map +0 -1
  112. package/dist/memory/scan 2.d.ts +0 -15
  113. package/dist/memory/scan 2.js +0 -94
  114. package/dist/memory/scan 2.js.map +0 -1
  115. package/dist/memory/scan.test 2.d.ts +0 -1
  116. package/dist/memory/scan.test 2.js +0 -55
  117. package/dist/memory/scan.test 2.js.map +0 -1
  118. package/dist/memory/shared 2.d.ts +0 -33
  119. package/dist/memory/shared 2.js +0 -120
  120. package/dist/memory/shared 2.js.map +0 -1
  121. package/dist/memory/threads 2.d.ts +0 -37
  122. package/dist/memory/threads 2.js +0 -50
  123. package/dist/memory/threads 2.js.map +0 -1
  124. package/dist/memory/threads.test 2.d.ts +0 -1
  125. package/dist/memory/threads.test 2.js +0 -66
  126. package/dist/memory/threads.test 2.js.map +0 -1
  127. package/dist/memory/types 2.d.ts +0 -52
  128. package/dist/memory/types 2.js +0 -5
  129. package/dist/memory/types 2.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/memory/db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASrE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,WAAW,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmFlB,CAAC;AAEF,SAAS,YAAY,CACnB,EAAgB,EAChB,KAAa,EACb,MAAc,EACd,IAAY;IAEZ,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,GAAG,EAAwB,CAAC;IACnF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;QAC7C,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,eAAe,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,EAAgB;IAC/B,EAAE,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IAC7E,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpB,2EAA2E;IAC3E,6CAA6C;IAC7C,YAAY,CAAC,EAAE,EAAE,iBAAiB,EAAE,eAAe,EAAE,4BAA4B,CAAC,CAAC;IACnF,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,EAExD,CAAC;IACd,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChF,CAAC;SAAM,IAAI,GAAG,CAAC,OAAO,GAAG,cAAc,EAAE,CAAC;QACxC,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,MAAM,MAAM,GAAG,IAAI,IAAI,eAAe,EAAE,CAAC;IACzC,IAAI,MAAM,KAAK,UAAU;QAAE,eAAe,EAAE,CAAC;IAC7C,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACrC,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACtC,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,MAAM,KAAK,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC;YACH,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,2DAA2D;QAC7D,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAgB,EAAE,CAAe;IAC7D,EAAE,CAAC,OAAO,CACR;;;;;;;0FAOsF,CACvF,CAAC,GAAG,CACH,CAAC,CAAC,SAAS,EACX,CAAC,CAAC,OAAO,EACT,CAAC,CAAC,OAAO,IAAI,IAAI,EACjB,CAAC,CAAC,cAAc,IAAI,IAAI,EACxB,CAAC,CAAC,aAAa,IAAI,IAAI,EACvB,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,aAAa,CAAC,EAAgB,EAAE,CAAe;IAC7D,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CACN;;sDAEgD,CACjD;SACA,GAAG,CACF,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,SAAS,EACX,CAAC,CAAC,UAAU,IAAI,IAAI,EACpB,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,IAAI,IAAI,IAAI,EACd,CAAC,CAAC,OAAO,IAAI,IAAI,EACjB,CAAC,CAAC,KAAK,IAAI,IAAI,EACf,CAAC,CAAC,WAAW,IAAI,IAAI,EACrB,CAAC,CAAC,YAAY,IAAI,IAAI,EACtB,CAAC,CAAC,SAAS,IAAI,IAAI,EACnB,CAAC,CAAC,GAAG,IAAI,IAAI,EACb,CAAC,CAAC,SAAS,IAAI,IAAI,EACnB,CAAC,CAAC,OAAO,IAAI,IAAI,CAClB,CAAC;IACJ,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,OAAO,CACR,4EAA4E,CAC7E,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAgB,EAAE,CAAe;IAC7D,EAAE,CAAC,OAAO,CACR;4BACwB,CACzB,CAAC,GAAG,CACH,CAAC,CAAC,WAAW,IAAI,IAAI,EACrB,CAAC,CAAC,SAAS,IAAI,IAAI,EACnB,CAAC,CAAC,QAAQ,EACV,CAAC,CAAC,SAAS,IAAI,IAAI,EACnB,CAAC,CAAC,SAAS,IAAI,IAAI,CACpB,CAAC;AACJ,CAAC;AAQD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,EAAgB,EAChB,KAAa,EACb,OAAsB,EAAE;IAExB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAwB,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,KAAK,GAAG,sBAAsB,CAAC;IACnC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,KAAK,IAAI,kCAAkC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO,EAAE;SACN,OAAO,CACN;;;;eAIS,KAAK;;eAEL,CACV;SACA,GAAG,CAAC,GAAG,MAAM,CAA2B,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAgB;IACvC,MAAM,KAAK,GAAG,CAAC,GAAW,EAAU,EAAE;QACpC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAA+B,CAAC;QAC7D,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,MAAM,KAAK,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC;YACH,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;IACH,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,oCAAoC,CAAC;QACrD,QAAQ,EAAE,KAAK,CAAC,oCAAoC,CAAC;QACrD,QAAQ,EAAE,KAAK,CAAC,qCAAqC,CAAC;QACtD,WAAW,EAAE,KAAK,CAChB,iEAAiE,CAClE;QACD,MAAM;QACN,SAAS;KACV,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/memory/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { DatabaseSync } from "node:sqlite";
2
+ import type { IndexResult } from "./parser.js";
3
+ export declare function getGeminiTmpDir(): string;
4
+ /** Walk ~/.gemini/tmp and index every conversation log/checkpoint. Idempotent + incremental. */
5
+ export declare function indexGeminiSessions(db: DatabaseSync): IndexResult;
@@ -0,0 +1,176 @@
1
+ /**
2
+ * kit memory — Gemini CLI transcript parser (multi-harness).
3
+ *
4
+ * Gemini CLI persists conversation state under ~/.gemini/tmp/<projectHash>/ via a
5
+ * few mechanisms. Formats verified against the google-gemini/gemini-cli source:
6
+ * - logs.json — a JSON array of LogEntry records
7
+ * { sessionId, messageId, timestamp, type, message }
8
+ * - checkpoint files — either { history: Content[] } (modern) or a bare
9
+ * Content[] (legacy), where Content = { role: 'user'|'model', parts:[{text}] }
10
+ *
11
+ * We index user + model turns from whichever are present, tag harness="gemini",
12
+ * synthesize stable uuids (idempotent), and STRUCTURALLY skip non-conversation
13
+ * JSON (e.g. file-snapshot checkpoints whose shape isn't Content[]). RAW +
14
+ * deterministic; no model calls.
15
+ *
16
+ * Limitation: Gemini keys directories by a one-way projectHash, so the real repo
17
+ * path isn't recoverable — Gemini messages carry no cwd and surface in `--global`
18
+ * recall rather than project-scoped search.
19
+ */
20
+ import { readFileSync, readdirSync, existsSync, statSync } from "node:fs";
21
+ import { homedir } from "node:os";
22
+ import { join, basename } from "node:path";
23
+ import { insertMessage, upsertSession, isFileIndexed, markFileIndexed } from "./db.js";
24
+ export function getGeminiTmpDir() {
25
+ const base = process.env.KIT_GEMINI_DIR ?? join(homedir(), ".gemini");
26
+ return join(base, "tmp");
27
+ }
28
+ function partsText(parts) {
29
+ if (!Array.isArray(parts))
30
+ return "";
31
+ return parts
32
+ .map((p) => p?.text ?? "")
33
+ .filter(Boolean)
34
+ .join("\n");
35
+ }
36
+ /** Coerce a parsed checkpoint to Content[], or null if it isn't a conversation. */
37
+ function asHistory(parsed) {
38
+ if (Array.isArray(parsed)) {
39
+ const looksLikeContent = parsed.every((x) => x !== null && typeof x === "object" && ("role" in x || "parts" in x));
40
+ return looksLikeContent ? parsed : null;
41
+ }
42
+ if (parsed !== null && typeof parsed === "object") {
43
+ const h = parsed.history;
44
+ if (Array.isArray(h))
45
+ return h;
46
+ }
47
+ return null;
48
+ }
49
+ /** Map a Gemini role/sender to the store's user|assistant. */
50
+ function roleOf(raw) {
51
+ return raw === "user" ? "user" : "assistant"; // 'model'/'gemini'/etc → assistant
52
+ }
53
+ function indexLogs(db, filepath) {
54
+ let parsed;
55
+ try {
56
+ parsed = JSON.parse(readFileSync(filepath, "utf8"));
57
+ }
58
+ catch {
59
+ return { messages: 0 };
60
+ }
61
+ if (!Array.isArray(parsed))
62
+ return { messages: 0 };
63
+ let messages = 0;
64
+ let idx = 0;
65
+ for (const entry of parsed) {
66
+ const text = typeof entry?.message === "string" ? entry.message : "";
67
+ if (!text)
68
+ continue;
69
+ const sessionId = `gemini:${entry.sessionId ?? basename(filepath)}`;
70
+ upsertSession(db, { sessionId, harness: "gemini" });
71
+ const added = insertMessage(db, {
72
+ uuid: `gemini:log:${entry.sessionId ?? basename(filepath)}:${entry.messageId ?? idx}`,
73
+ sessionId,
74
+ type: roleOf(entry.type),
75
+ role: roleOf(entry.type),
76
+ content: text,
77
+ timestamp: entry.timestamp,
78
+ });
79
+ idx++;
80
+ if (added)
81
+ messages++;
82
+ }
83
+ return { messages };
84
+ }
85
+ function indexCheckpoint(db, filepath) {
86
+ let parsed;
87
+ try {
88
+ parsed = JSON.parse(readFileSync(filepath, "utf8"));
89
+ }
90
+ catch {
91
+ return { messages: 0 };
92
+ }
93
+ const history = asHistory(parsed);
94
+ if (!history)
95
+ return { messages: 0 }; // not a conversation checkpoint — skip
96
+ const sessionId = `gemini-ckpt:${basename(filepath, ".json")}`;
97
+ upsertSession(db, { sessionId, harness: "gemini" });
98
+ let messages = 0;
99
+ history.forEach((c, idx) => {
100
+ if (c?.role !== "user" && c?.role !== "model")
101
+ return; // skip non-turn entries
102
+ const text = partsText(c.parts);
103
+ if (!text)
104
+ return;
105
+ const added = insertMessage(db, {
106
+ uuid: `gemini:ckpt:${basename(filepath)}:${idx}`,
107
+ sessionId,
108
+ type: roleOf(c.role),
109
+ role: roleOf(c.role),
110
+ content: text,
111
+ });
112
+ if (added)
113
+ messages++;
114
+ });
115
+ return { messages };
116
+ }
117
+ function* walkGeminiFiles(tmpDir) {
118
+ let hashes;
119
+ try {
120
+ hashes = readdirSync(tmpDir, { withFileTypes: true });
121
+ }
122
+ catch {
123
+ return;
124
+ }
125
+ for (const h of hashes) {
126
+ if (!h.isDirectory())
127
+ continue;
128
+ const projDir = join(tmpDir, h.name);
129
+ const logs = join(projDir, "logs.json");
130
+ if (existsSync(logs))
131
+ yield { path: logs, kind: "logs" };
132
+ // checkpoint JSON lives at the project root and/or in a checkpoints/ subdir
133
+ for (const dir of [projDir, join(projDir, "checkpoints")]) {
134
+ let entries;
135
+ try {
136
+ entries = readdirSync(dir, { withFileTypes: true });
137
+ }
138
+ catch {
139
+ continue;
140
+ }
141
+ for (const e of entries) {
142
+ if (e.isFile() && e.name.endsWith(".json") && e.name !== "logs.json") {
143
+ yield { path: join(dir, e.name), kind: "checkpoint" };
144
+ }
145
+ }
146
+ }
147
+ }
148
+ }
149
+ /** Walk ~/.gemini/tmp and index every conversation log/checkpoint. Idempotent + incremental. */
150
+ export function indexGeminiSessions(db) {
151
+ const tmpDir = getGeminiTmpDir();
152
+ const result = { files: 0, sessions: 0, messages: 0, toolUses: 0, filesSkipped: 0 };
153
+ if (!existsSync(tmpDir))
154
+ return result;
155
+ for (const f of walkGeminiFiles(tmpDir)) {
156
+ let st;
157
+ try {
158
+ st = statSync(f.path);
159
+ }
160
+ catch {
161
+ continue;
162
+ }
163
+ const mtimeMs = Math.floor(st.mtimeMs);
164
+ if (isFileIndexed(db, f.path, mtimeMs, st.size)) {
165
+ result.filesSkipped++;
166
+ continue;
167
+ }
168
+ const counts = f.kind === "logs" ? indexLogs(db, f.path) : indexCheckpoint(db, f.path);
169
+ markFileIndexed(db, f.path, mtimeMs, st.size);
170
+ result.files++;
171
+ result.sessions++;
172
+ result.messages += counts.messages;
173
+ }
174
+ return result;
175
+ }
176
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/memory/gemini.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,14 @@
1
1
  /** Reminder injected before every prompt. Empty string on any error (fail-open). */
2
2
  export declare function userPromptSubmitReminder(): string;
3
+ /**
4
+ * SessionStart recovery — re-inject "where you left off" for THIS project after a
5
+ * resume/compact, so the agent regains continuity instead of starting blank. Pulls
6
+ * the most recent messages + open action items from the store. FAIL-OPEN and
7
+ * deterministic: empty string on any error or when there's nothing to recover.
8
+ */
9
+ export declare function sessionStartRecovery(opts?: {
10
+ limit?: number;
11
+ }): string;
3
12
  /** Index the just-ended session. Returns count of newly indexed messages (fail-open). */
4
13
  export declare function runSessionEndIndex(): {
5
14
  messages: number;
@@ -9,7 +9,7 @@
9
9
  * block a prompt or break a session. Deterministic, zero model calls.
10
10
  */
11
11
  import { basename } from "node:path";
12
- import { openMemoryDb, getStats } from "./db.js";
12
+ import { openMemoryDb, getStats, recentMessages } from "./db.js";
13
13
  import { indexClaudeTranscripts } from "./parser.js";
14
14
  import { palList } from "./pal.js";
15
15
  import { getCurrentProjectRoot } from "./project.js";
@@ -36,6 +36,39 @@ export function userPromptSubmitReminder() {
36
36
  return ""; // fail-open: never block a prompt
37
37
  }
38
38
  }
39
+ /**
40
+ * SessionStart recovery — re-inject "where you left off" for THIS project after a
41
+ * resume/compact, so the agent regains continuity instead of starting blank. Pulls
42
+ * the most recent messages + open action items from the store. FAIL-OPEN and
43
+ * deterministic: empty string on any error or when there's nothing to recover.
44
+ */
45
+ export function sessionStartRecovery(opts = {}) {
46
+ try {
47
+ const db = openMemoryDb();
48
+ const root = getCurrentProjectRoot();
49
+ const recent = recentMessages(db, { projectPath: root, limit: opts.limit ?? 6 });
50
+ const openItems = palList(db, { scope: basename(root) });
51
+ db.close();
52
+ if (recent.length === 0 && openItems.length === 0)
53
+ return "";
54
+ const lines = [`Picking up in ${basename(root)} — recent memory (newest first):`];
55
+ for (const m of recent) {
56
+ const who = m.role === "assistant" ? "assistant" : "you";
57
+ const text = (m.content ?? "").replace(/\s+/g, " ").trim().slice(0, 200);
58
+ if (text)
59
+ lines.push(` · ${who}: ${text}`);
60
+ }
61
+ if (openItems.length > 0) {
62
+ const titles = openItems.slice(0, 3).map((p) => `${p.id} ${p.title}`).join("; ");
63
+ lines.push(`Open action items blocked on you: ${titles}${openItems.length > 3 ? " …" : ""}.`);
64
+ }
65
+ lines.push("Run `kit memory search <terms>` to pull more of what was actually said.");
66
+ return lines.join("\n");
67
+ }
68
+ catch {
69
+ return ""; // fail-open: never block a session start
70
+ }
71
+ }
39
72
  /** Index the just-ended session. Returns count of newly indexed messages (fail-open). */
40
73
  export function runSessionEndIndex() {
41
74
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/memory/hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,oFAAoF;AACpF,MAAM,UAAU,wBAAwB;IACtC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvB,0FAA0F;QAC1F,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5E,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,OAAO,GAAG,IAAI,SAAS,CAAC,MAAM,wCAAwC,MAAM,GAAG,IAAI,GAAG,CAAC;QACzF,CAAC;QACD,OAAO,CACL,uCAAuC,CAAC,CAAC,QAAQ,qBAAqB;YACtE,8EAA8E;YAC9E,mEAAmE,OAAO,EAAE,CAC7E,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,kCAAkC;IAC/C,CAAC;AACH,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,sBAAsB,CAAC,EAAE,CAAC,CAAC;QACvC,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,YAAY;IACtC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/memory/hook.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ import { join, dirname } from "node:path";
11
11
  const MEMORY_HOOKS = [
12
12
  { event: "UserPromptSubmit", command: "kit memory hook user-prompt-submit" },
13
13
  { event: "SessionEnd", command: "kit memory hook session-end" },
14
+ { event: "SessionStart", command: "kit memory hook session-start" },
14
15
  ];
15
16
  export function getClaudeSettingsPath() {
16
17
  return process.env.KIT_CLAUDE_SETTINGS ?? join(homedir(), ".claude", "settings.json");
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/memory/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/memory/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * kit memory — merge another store into this one.
3
+ *
4
+ * Consolidate memory across machines (a server, an old laptop) into one brain.
5
+ * Idempotent: messages dedupe by uuid, sessions/pending/threads by their keys, and
6
+ * a message's tool_uses are copied only when the message itself is newly added, so
7
+ * re-merging the same source adds nothing. `file_index` is NOT merged (it tracks
8
+ * machine-local file paths). Deterministic; no model calls.
9
+ */
10
+ import { DatabaseSync } from "node:sqlite";
11
+ export interface MergeResult {
12
+ sessions: number;
13
+ messages: number;
14
+ toolUses: number;
15
+ pending: number;
16
+ threads: number;
17
+ }
18
+ export declare function mergeDb(target: DatabaseSync, sourcePath: string): MergeResult;
@@ -0,0 +1,109 @@
1
+ /**
2
+ * kit memory — merge another store into this one.
3
+ *
4
+ * Consolidate memory across machines (a server, an old laptop) into one brain.
5
+ * Idempotent: messages dedupe by uuid, sessions/pending/threads by their keys, and
6
+ * a message's tool_uses are copied only when the message itself is newly added, so
7
+ * re-merging the same source adds nothing. `file_index` is NOT merged (it tracks
8
+ * machine-local file paths). Deterministic; no model calls.
9
+ */
10
+ import { DatabaseSync } from "node:sqlite";
11
+ import { existsSync } from "node:fs";
12
+ import { insertMessage, insertToolUse, upsertSession } from "./db.js";
13
+ const str = (v) => (typeof v === "string" && v ? v : undefined);
14
+ const num = (v) => (typeof v === "number" ? v : undefined);
15
+ export function mergeDb(target, sourcePath) {
16
+ if (!existsSync(sourcePath))
17
+ throw new Error(`source memory db not found: ${sourcePath}`);
18
+ const src = new DatabaseSync(sourcePath, { readOnly: true });
19
+ const out = { sessions: 0, messages: 0, toolUses: 0, pending: 0, threads: 0 };
20
+ try {
21
+ // Sessions
22
+ for (const s of src.prepare("SELECT * FROM sessions").all()) {
23
+ const sessionId = str(s.session_id);
24
+ if (!sessionId)
25
+ continue;
26
+ upsertSession(target, {
27
+ sessionId,
28
+ harness: str(s.harness) ?? "claude-code",
29
+ project: str(s.project),
30
+ firstMessageAt: str(s.first_message_at),
31
+ lastMessageAt: str(s.last_message_at),
32
+ isAgentSidechain: !!s.is_agent_sidechain,
33
+ });
34
+ out.sessions++;
35
+ }
36
+ // tool_uses grouped by message uuid (copied only for newly-added messages)
37
+ const toolsByUuid = new Map();
38
+ for (const t of src.prepare("SELECT * FROM tool_uses").all()) {
39
+ const uuid = str(t.message_uuid);
40
+ if (!uuid)
41
+ continue;
42
+ (toolsByUuid.get(uuid) ?? toolsByUuid.set(uuid, []).get(uuid)).push(t);
43
+ }
44
+ // Messages (dedupe by uuid) + their tool_uses
45
+ for (const m of src.prepare("SELECT * FROM messages").all()) {
46
+ const uuid = str(m.uuid);
47
+ const sessionId = str(m.session_id);
48
+ const type = str(m.type);
49
+ if (!uuid || !sessionId || !type)
50
+ continue; // need a stable id to dedupe
51
+ const added = insertMessage(target, {
52
+ uuid,
53
+ sessionId,
54
+ parentUuid: str(m.parent_uuid),
55
+ type,
56
+ role: str(m.role),
57
+ content: str(m.content),
58
+ model: str(m.model),
59
+ inputTokens: num(m.input_tokens),
60
+ outputTokens: num(m.output_tokens),
61
+ timestamp: str(m.timestamp),
62
+ cwd: str(m.cwd),
63
+ gitBranch: str(m.git_branch),
64
+ version: str(m.version),
65
+ });
66
+ if (!added)
67
+ continue;
68
+ out.messages++;
69
+ for (const t of toolsByUuid.get(uuid) ?? []) {
70
+ insertToolUse(target, {
71
+ messageUuid: uuid,
72
+ sessionId: str(t.session_id),
73
+ toolName: str(t.tool_name) ?? "unknown",
74
+ toolInput: str(t.tool_input),
75
+ timestamp: str(t.timestamp),
76
+ });
77
+ out.toolUses++;
78
+ }
79
+ }
80
+ // Pending actions (dedupe by id)
81
+ const insPending = target.prepare(`INSERT OR IGNORE INTO pending_actions
82
+ (id, status, title, detail, scope, kind, verify_cmd, created_at, next_check, snooze_until, closed_at, verify_passes)
83
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
84
+ for (const p of src.prepare("SELECT * FROM pending_actions").all()) {
85
+ if (!str(p.id) || !str(p.title))
86
+ continue;
87
+ const r = insPending.run(p.id, str(p.status) ?? "open", p.title, (str(p.detail) ?? null), (str(p.scope) ?? null), str(p.kind) ?? "manual", (str(p.verify_cmd) ?? null), (str(p.created_at) ?? null), (str(p.next_check) ?? null), (str(p.snooze_until) ?? null), (str(p.closed_at) ?? null), num(p.verify_passes) ?? 0);
88
+ if (Number(r.changes) > 0)
89
+ out.pending++;
90
+ }
91
+ // Saved threads (dedupe by name)
92
+ const insThread = target.prepare(`INSERT OR IGNORE INTO saved_threads (name, session_id, summary, project_path, saved_at)
93
+ VALUES (?, ?, ?, ?, ?)`);
94
+ for (const t of src.prepare("SELECT * FROM saved_threads").all()) {
95
+ const name = str(t.name);
96
+ const sid = str(t.session_id);
97
+ if (!name || !sid)
98
+ continue;
99
+ const r = insThread.run(name, sid, (str(t.summary) ?? null), (str(t.project_path) ?? null), (str(t.saved_at) ?? null));
100
+ if (Number(r.changes) > 0)
101
+ out.threads++;
102
+ }
103
+ }
104
+ finally {
105
+ src.close();
106
+ }
107
+ return out;
108
+ }
109
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/memory/merge.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ export interface IndexResult {
4
4
  sessions: number;
5
5
  messages: number;
6
6
  toolUses: number;
7
+ /** Files skipped because they were unchanged since the last index (incremental). */
8
+ filesSkipped: number;
7
9
  }
8
10
  export declare function getClaudeProjectsDir(): string;
9
11
  interface ContentBlock {
@@ -22,4 +24,11 @@ export declare function extractToolUses(content: Content): {
22
24
  }[];
23
25
  /** Walk ~/.claude/projects and index every transcript. Idempotent. */
24
26
  export declare function indexClaudeTranscripts(db: DatabaseSync): IndexResult;
27
+ /** Per-harness index results, keyed by harness name. */
28
+ export type HarnessResults = Record<string, IndexResult>;
29
+ /**
30
+ * Index every supported harness's transcripts into the store. Returns per-harness
31
+ * counts. Adding a harness = one more parser here (Copilot, Gemini, Aider, Cursor…).
32
+ */
33
+ export declare function indexAllHarnesses(db: DatabaseSync): HarnessResults;
25
34
  export {};
@@ -11,7 +11,13 @@
11
11
  import { readFileSync, readdirSync, existsSync, statSync } from "node:fs";
12
12
  import { homedir } from "node:os";
13
13
  import { join, basename } from "node:path";
14
- import { insertMessage, insertToolUse, upsertSession } from "./db.js";
14
+ import { insertMessage, insertToolUse, upsertSession, isFileIndexed, markFileIndexed, } from "./db.js";
15
+ import { indexCodexSessions } from "./codex.js";
16
+ import { indexGeminiSessions } from "./gemini.js";
17
+ import { indexContinueSessions } from "./continue.js";
18
+ import { indexCursorSessions } from "./cursor.js";
19
+ import { indexAmazonQSessions } from "./amazonq.js";
20
+ import { indexClineSessions } from "./cline.js";
15
21
  export function getClaudeProjectsDir() {
16
22
  const base = process.env.KIT_CLAUDE_DIR ?? join(homedir(), ".claude");
17
23
  return join(base, "projects");
@@ -135,7 +141,7 @@ function indexFile(db, filepath, project) {
135
141
  /** Walk ~/.claude/projects and index every transcript. Idempotent. */
136
142
  export function indexClaudeTranscripts(db) {
137
143
  const projectsDir = getClaudeProjectsDir();
138
- const result = { files: 0, sessions: 0, messages: 0, toolUses: 0 };
144
+ const result = { files: 0, sessions: 0, messages: 0, toolUses: 0, filesSkipped: 0 };
139
145
  if (!existsSync(projectsDir))
140
146
  return result;
141
147
  for (const projectName of readdirSync(projectsDir).sort()) {
@@ -152,7 +158,23 @@ export function indexClaudeTranscripts(db) {
152
158
  for (const entry of readdirSync(projectPath).sort()) {
153
159
  if (!entry.endsWith(".jsonl"))
154
160
  continue;
155
- const counts = indexFile(db, join(projectPath, entry), projectName);
161
+ const filePath = join(projectPath, entry);
162
+ let st;
163
+ try {
164
+ st = statSync(filePath);
165
+ }
166
+ catch {
167
+ continue;
168
+ }
169
+ // Skip files unchanged since the last index (incremental — avoids re-reading
170
+ // every transcript each run; the per-message uuid dedup still backstops it).
171
+ const mtimeMs = Math.floor(st.mtimeMs);
172
+ if (isFileIndexed(db, filePath, mtimeMs, st.size)) {
173
+ result.filesSkipped++;
174
+ continue;
175
+ }
176
+ const counts = indexFile(db, filePath, projectName);
177
+ markFileIndexed(db, filePath, mtimeMs, st.size);
156
178
  result.files++;
157
179
  result.sessions++;
158
180
  result.messages += counts.messages;
@@ -161,4 +183,19 @@ export function indexClaudeTranscripts(db) {
161
183
  }
162
184
  return result;
163
185
  }
186
+ /**
187
+ * Index every supported harness's transcripts into the store. Returns per-harness
188
+ * counts. Adding a harness = one more parser here (Copilot, Gemini, Aider, Cursor…).
189
+ */
190
+ export function indexAllHarnesses(db) {
191
+ return {
192
+ "claude-code": indexClaudeTranscripts(db),
193
+ codex: indexCodexSessions(db),
194
+ gemini: indexGeminiSessions(db),
195
+ continue: indexContinueSessions(db),
196
+ cursor: indexCursorSessions(db),
197
+ "amazon-q": indexAmazonQSessions(db),
198
+ cline: indexClineSessions(db),
199
+ };
200
+ }
164
201
  //# sourceMappingURL=parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/memory/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAStE,MAAM,UAAU,oBAAoB;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAChC,CAAC;AAUD,qFAAqF;AACrF,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,IAAI,CAAC,EAAE,IAAI,KAAK,MAAM;gBAAE,OAAO,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,EAAE,IAAI,KAAK,UAAU;gBAAE,OAAO,UAAU,CAAC,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC;YACpE,IAAI,CAAC,EAAE,IAAI,KAAK,aAAa;gBAAE,OAAO,eAAe,CAAC;YACtD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,GAAG,GAAsC,EAAE,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS;gBACzB,KAAK,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;aAC5D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAoBD,SAAS,SAAS,CAChB,EAAgB,EAChB,QAAgB,EAChB,OAAe;IAEf,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACtC,CAAC;IAED,yEAAyE;IACzE,uCAAuC;IACvC,aAAa,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;IAElE,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,OAA2B,CAAC;IAChC,IAAI,MAA0B,CAAC;IAC/B,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,GAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAqB,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,CAAC,+CAA+C;QAC3D,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QAC9D,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE,SAAS;QACxB,IAAI,GAAG,CAAC,WAAW;YAAE,WAAW,GAAG,IAAI,CAAC;QAExC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;QACxB,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC;QACzB,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,CAAC,OAAO;gBAAE,OAAO,GAAG,EAAE,CAAC;YAC3B,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,EAAE;YAC9B,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;YACrC,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,EAAE,IAAI;YACf,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;YAClC,KAAK,EAAE,GAAG,EAAE,KAAK;YACjB,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY;YACrC,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa;YACvC,SAAS,EAAE,EAAE;YACb,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,EAAE,CAAC;YACX,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;gBACjD,aAAa,CAAC,EAAE,EAAE;oBAChB,WAAW,EAAE,GAAG,CAAC,IAAI;oBACrB,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;oBACrC,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,SAAS,EAAE,IAAI,CAAC,KAAK;oBACrB,SAAS,EAAE,EAAE;iBACd,CAAC,CAAC;gBACH,QAAQ,EAAE,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,aAAa,CAAC,EAAE,EAAE;QAChB,SAAS;QACT,OAAO,EAAE,aAAa;QACtB,OAAO;QACP,cAAc,EAAE,OAAO;QACvB,aAAa,EAAE,MAAM;QACrB,gBAAgB,EAAE,WAAW;KAC9B,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,sBAAsB,CAAC,EAAgB;IACrD,MAAM,WAAW,GAAG,oBAAoB,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAChF,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,MAAM,CAAC;IAE5C,KAAK,MAAM,WAAW,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACnD,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC;YACH,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACpD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACxC,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;YACpE,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;YACnC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/memory/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * kit memory suggest — opt-in, BYO-LLM memory review.
3
+ *
4
+ * Preserves kit's zero-LLM core: kit does NOT call a model. It deterministically
5
+ * gathers the current project's recent activity + open action items and EMITS a
6
+ * structured prompt to stdout, asking *your* model to propose new pal items /
7
+ * shared-area entries worth recording. Pipe it: `kit memory suggest | <your-llm>`.
8
+ * Proposals are reviewed by you and recorded via `kit memory pal add` /
9
+ * `kit memory share`. No state is changed here.
10
+ */
11
+ import type { DatabaseSync } from "node:sqlite";
12
+ export interface SuggestInput {
13
+ project: string;
14
+ recentCount: number;
15
+ openItems: number;
16
+ /** The full prompt to feed to a model (the product of this command). */
17
+ prompt: string;
18
+ }
19
+ export declare function buildSuggestPrompt(db: DatabaseSync, opts?: {
20
+ limit?: number;
21
+ }): SuggestInput;
@@ -0,0 +1,36 @@
1
+ import { basename } from "node:path";
2
+ import { recentMessages } from "./db.js";
3
+ import { palList } from "./pal.js";
4
+ import { getCurrentProjectRoot } from "./project.js";
5
+ export function buildSuggestPrompt(db, opts = {}) {
6
+ const root = getCurrentProjectRoot();
7
+ const project = basename(root);
8
+ const recent = recentMessages(db, { projectPath: root, limit: opts.limit ?? 30 });
9
+ const open = palList(db, { scope: project });
10
+ const lines = [
11
+ `You are reviewing the recent work log for the project "${project}".`,
12
+ "",
13
+ "RECENT MESSAGES (newest first):",
14
+ ];
15
+ if (recent.length === 0) {
16
+ lines.push(" (none indexed for this project)");
17
+ }
18
+ else {
19
+ for (const m of recent) {
20
+ const who = m.role === "assistant" ? "assistant" : "user";
21
+ const text = (m.content ?? "").replace(/\s+/g, " ").trim().slice(0, 300);
22
+ if (text)
23
+ lines.push(` - ${who}: ${text}`);
24
+ }
25
+ }
26
+ lines.push("");
27
+ if (open.length > 0) {
28
+ lines.push("ALREADY-OPEN ACTION ITEMS (do not duplicate these):");
29
+ for (const p of open)
30
+ lines.push(` - ${p.id} ${p.title}`);
31
+ lines.push("");
32
+ }
33
+ lines.push("TASK: Propose what is worth RECORDING into long-term memory. Specifically:", " 1. New action items blocked on the user (things that must happen next).", " 2. Durable decisions / how-we-built-it / status / security notes worth keeping.", "Be concrete, skip anything already open above, and give each proposal a one-line title.", "", "The user will record accepted proposals via:", ' kit memory pal add "<title>"', ' kit memory share <area> <decisions|how-built|status|security> "<note>"');
34
+ return { project, recentCount: recent.length, openItems: open.length, prompt: lines.join("\n") };
35
+ }
36
+ //# sourceMappingURL=suggest.js.map