@pcircle/footprint 1.5.0 → 1.7.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 (249) hide show
  1. package/README.md +301 -132
  2. package/SKILL.md +72 -28
  3. package/bin/footprint.js +16 -0
  4. package/dist/src/adapters/claude.d.ts +2 -0
  5. package/dist/src/adapters/claude.d.ts.map +1 -0
  6. package/dist/src/adapters/claude.js +7 -0
  7. package/dist/src/adapters/claude.js.map +1 -0
  8. package/dist/src/adapters/codex.d.ts +2 -0
  9. package/dist/src/adapters/codex.d.ts.map +1 -0
  10. package/dist/src/adapters/codex.js +7 -0
  11. package/dist/src/adapters/codex.js.map +1 -0
  12. package/dist/src/adapters/gemini.d.ts +2 -0
  13. package/dist/src/adapters/gemini.d.ts.map +1 -0
  14. package/dist/src/adapters/gemini.js +7 -0
  15. package/dist/src/adapters/gemini.js.map +1 -0
  16. package/dist/src/adapters/index.d.ts +5 -0
  17. package/dist/src/adapters/index.d.ts.map +1 -0
  18. package/dist/src/adapters/index.js +12 -0
  19. package/dist/src/adapters/index.js.map +1 -0
  20. package/dist/src/adapters/structured-prefix.d.ts +10 -0
  21. package/dist/src/adapters/structured-prefix.d.ts.map +1 -0
  22. package/dist/src/adapters/structured-prefix.js +59 -0
  23. package/dist/src/adapters/structured-prefix.js.map +1 -0
  24. package/dist/src/adapters/types.d.ts +32 -0
  25. package/dist/src/adapters/types.d.ts.map +1 -0
  26. package/dist/src/adapters/types.js +2 -0
  27. package/dist/src/adapters/types.js.map +1 -0
  28. package/dist/src/cli/context-flow.d.ts +92 -0
  29. package/dist/src/cli/context-flow.d.ts.map +1 -0
  30. package/dist/src/cli/context-flow.js +724 -0
  31. package/dist/src/cli/context-flow.js.map +1 -0
  32. package/dist/src/cli/history-display.d.ts +27 -0
  33. package/dist/src/cli/history-display.d.ts.map +1 -0
  34. package/dist/src/cli/history-display.js +167 -0
  35. package/dist/src/cli/history-display.js.map +1 -0
  36. package/dist/src/cli/index.js +924 -0
  37. package/dist/src/cli/index.js.map +1 -1
  38. package/dist/src/cli/launch-spec.d.ts +31 -0
  39. package/dist/src/cli/launch-spec.d.ts.map +1 -0
  40. package/dist/src/cli/launch-spec.js +182 -0
  41. package/dist/src/cli/launch-spec.js.map +1 -0
  42. package/dist/src/cli/live-demo.d.ts +34 -0
  43. package/dist/src/cli/live-demo.d.ts.map +1 -0
  44. package/dist/src/cli/live-demo.js +254 -0
  45. package/dist/src/cli/live-demo.js.map +1 -0
  46. package/dist/src/cli/pty-transcript.d.ts +34 -0
  47. package/dist/src/cli/pty-transcript.d.ts.map +1 -0
  48. package/dist/src/cli/pty-transcript.js +174 -0
  49. package/dist/src/cli/pty-transcript.js.map +1 -0
  50. package/dist/src/cli/session-display.d.ts +74 -0
  51. package/dist/src/cli/session-display.d.ts.map +1 -0
  52. package/dist/src/cli/session-display.js +922 -0
  53. package/dist/src/cli/session-display.js.map +1 -0
  54. package/dist/src/cli/session-execution.d.ts +55 -0
  55. package/dist/src/cli/session-execution.d.ts.map +1 -0
  56. package/dist/src/cli/session-execution.js +817 -0
  57. package/dist/src/cli/session-execution.js.map +1 -0
  58. package/dist/src/cli/session-runtime.d.ts +5 -0
  59. package/dist/src/cli/session-runtime.d.ts.map +1 -0
  60. package/dist/src/cli/session-runtime.js +11 -0
  61. package/dist/src/cli/session-runtime.js.map +1 -0
  62. package/dist/src/cli/setup.d.ts.map +1 -1
  63. package/dist/src/cli/setup.js +2 -0
  64. package/dist/src/cli/setup.js.map +1 -1
  65. package/dist/src/index.d.ts +4 -0
  66. package/dist/src/index.d.ts.map +1 -1
  67. package/dist/src/index.js +148 -7
  68. package/dist/src/index.js.map +1 -1
  69. package/dist/src/ingestion/deterministic.d.ts +3 -0
  70. package/dist/src/ingestion/deterministic.d.ts.map +1 -0
  71. package/dist/src/ingestion/deterministic.js +862 -0
  72. package/dist/src/ingestion/deterministic.js.map +1 -0
  73. package/dist/src/ingestion/index.d.ts +5 -0
  74. package/dist/src/ingestion/index.d.ts.map +1 -0
  75. package/dist/src/ingestion/index.js +27 -0
  76. package/dist/src/ingestion/index.js.map +1 -0
  77. package/dist/src/ingestion/semantic.d.ts +6 -0
  78. package/dist/src/ingestion/semantic.d.ts.map +1 -0
  79. package/dist/src/ingestion/semantic.js +627 -0
  80. package/dist/src/ingestion/semantic.js.map +1 -0
  81. package/dist/src/ingestion/types.d.ts +10 -0
  82. package/dist/src/ingestion/types.d.ts.map +1 -0
  83. package/dist/src/ingestion/types.js +2 -0
  84. package/dist/src/ingestion/types.js.map +1 -0
  85. package/dist/src/lib/context-memory.d.ts +140 -0
  86. package/dist/src/lib/context-memory.d.ts.map +1 -0
  87. package/dist/src/lib/context-memory.js +974 -0
  88. package/dist/src/lib/context-memory.js.map +1 -0
  89. package/dist/src/lib/history-handoff.d.ts +43 -0
  90. package/dist/src/lib/history-handoff.d.ts.map +1 -0
  91. package/dist/src/lib/history-handoff.js +179 -0
  92. package/dist/src/lib/history-handoff.js.map +1 -0
  93. package/dist/src/lib/observability.d.ts +3 -0
  94. package/dist/src/lib/observability.d.ts.map +1 -0
  95. package/dist/src/lib/observability.js +63 -0
  96. package/dist/src/lib/observability.js.map +1 -0
  97. package/dist/src/lib/session-artifacts.d.ts +51 -0
  98. package/dist/src/lib/session-artifacts.d.ts.map +1 -0
  99. package/dist/src/lib/session-artifacts.js +132 -0
  100. package/dist/src/lib/session-artifacts.js.map +1 -0
  101. package/dist/src/lib/session-filters.d.ts +11 -0
  102. package/dist/src/lib/session-filters.d.ts.map +1 -0
  103. package/dist/src/lib/session-filters.js +16 -0
  104. package/dist/src/lib/session-filters.js.map +1 -0
  105. package/dist/src/lib/session-history.d.ts +50 -0
  106. package/dist/src/lib/session-history.d.ts.map +1 -0
  107. package/dist/src/lib/session-history.js +73 -0
  108. package/dist/src/lib/session-history.js.map +1 -0
  109. package/dist/src/lib/session-trends.d.ts +129 -0
  110. package/dist/src/lib/session-trends.d.ts.map +1 -0
  111. package/dist/src/lib/session-trends.js +361 -0
  112. package/dist/src/lib/session-trends.js.map +1 -0
  113. package/dist/src/lib/storage/database.d.ts +212 -1
  114. package/dist/src/lib/storage/database.d.ts.map +1 -1
  115. package/dist/src/lib/storage/database.js +1694 -114
  116. package/dist/src/lib/storage/database.js.map +1 -1
  117. package/dist/src/lib/storage/export-sessions.d.ts +33 -0
  118. package/dist/src/lib/storage/export-sessions.d.ts.map +1 -0
  119. package/dist/src/lib/storage/export-sessions.js +525 -0
  120. package/dist/src/lib/storage/export-sessions.js.map +1 -0
  121. package/dist/src/lib/storage/index.d.ts +7 -6
  122. package/dist/src/lib/storage/index.d.ts.map +1 -1
  123. package/dist/src/lib/storage/index.js +6 -5
  124. package/dist/src/lib/storage/index.js.map +1 -1
  125. package/dist/src/lib/storage/schema.d.ts +6 -1
  126. package/dist/src/lib/storage/schema.d.ts.map +1 -1
  127. package/dist/src/lib/storage/schema.js +337 -2
  128. package/dist/src/lib/storage/schema.js.map +1 -1
  129. package/dist/src/lib/storage/types.d.ts +122 -0
  130. package/dist/src/lib/storage/types.d.ts.map +1 -1
  131. package/dist/src/prompts/skill-prompt.d.ts.map +1 -1
  132. package/dist/src/prompts/skill-prompt.js +13 -0
  133. package/dist/src/prompts/skill-prompt.js.map +1 -1
  134. package/dist/src/tools/confirm-context-link.d.ts +62 -0
  135. package/dist/src/tools/confirm-context-link.d.ts.map +1 -0
  136. package/dist/src/tools/confirm-context-link.js +36 -0
  137. package/dist/src/tools/confirm-context-link.js.map +1 -0
  138. package/dist/src/tools/context-schemas.d.ts +694 -0
  139. package/dist/src/tools/context-schemas.d.ts.map +1 -0
  140. package/dist/src/tools/context-schemas.js +171 -0
  141. package/dist/src/tools/context-schemas.js.map +1 -0
  142. package/dist/src/tools/export-sessions.d.ts +111 -0
  143. package/dist/src/tools/export-sessions.d.ts.map +1 -0
  144. package/dist/src/tools/export-sessions.js +136 -0
  145. package/dist/src/tools/export-sessions.js.map +1 -0
  146. package/dist/src/tools/get-context.d.ts +208 -0
  147. package/dist/src/tools/get-context.d.ts.map +1 -0
  148. package/dist/src/tools/get-context.js +27 -0
  149. package/dist/src/tools/get-context.js.map +1 -0
  150. package/dist/src/tools/get-history-handoff.d.ts +109 -0
  151. package/dist/src/tools/get-history-handoff.d.ts.map +1 -0
  152. package/dist/src/tools/get-history-handoff.js +85 -0
  153. package/dist/src/tools/get-history-handoff.js.map +1 -0
  154. package/dist/src/tools/get-history-trends.d.ts +155 -0
  155. package/dist/src/tools/get-history-trends.d.ts.map +1 -0
  156. package/dist/src/tools/get-history-trends.js +123 -0
  157. package/dist/src/tools/get-history-trends.js.map +1 -0
  158. package/dist/src/tools/get-session-artifacts.d.ts +151 -0
  159. package/dist/src/tools/get-session-artifacts.d.ts.map +1 -0
  160. package/dist/src/tools/get-session-artifacts.js +184 -0
  161. package/dist/src/tools/get-session-artifacts.js.map +1 -0
  162. package/dist/src/tools/get-session-decisions.d.ts +69 -0
  163. package/dist/src/tools/get-session-decisions.d.ts.map +1 -0
  164. package/dist/src/tools/get-session-decisions.js +99 -0
  165. package/dist/src/tools/get-session-decisions.js.map +1 -0
  166. package/dist/src/tools/get-session-messages.d.ts +55 -0
  167. package/dist/src/tools/get-session-messages.d.ts.map +1 -0
  168. package/dist/src/tools/get-session-messages.js +89 -0
  169. package/dist/src/tools/get-session-messages.js.map +1 -0
  170. package/dist/src/tools/get-session-narrative.d.ts +72 -0
  171. package/dist/src/tools/get-session-narrative.d.ts.map +1 -0
  172. package/dist/src/tools/get-session-narrative.js +106 -0
  173. package/dist/src/tools/get-session-narrative.js.map +1 -0
  174. package/dist/src/tools/get-session-timeline.d.ts +55 -0
  175. package/dist/src/tools/get-session-timeline.d.ts.map +1 -0
  176. package/dist/src/tools/get-session-timeline.js +93 -0
  177. package/dist/src/tools/get-session-timeline.js.map +1 -0
  178. package/dist/src/tools/get-session-trends.d.ts +108 -0
  179. package/dist/src/tools/get-session-trends.d.ts.map +1 -0
  180. package/dist/src/tools/get-session-trends.js +130 -0
  181. package/dist/src/tools/get-session-trends.js.map +1 -0
  182. package/dist/src/tools/get-session.d.ts +251 -0
  183. package/dist/src/tools/get-session.d.ts.map +1 -0
  184. package/dist/src/tools/get-session.js +290 -0
  185. package/dist/src/tools/get-session.js.map +1 -0
  186. package/dist/src/tools/index.d.ts +22 -0
  187. package/dist/src/tools/index.d.ts.map +1 -1
  188. package/dist/src/tools/index.js +22 -0
  189. package/dist/src/tools/index.js.map +1 -1
  190. package/dist/src/tools/list-contexts.d.ts +50 -0
  191. package/dist/src/tools/list-contexts.d.ts.map +1 -0
  192. package/dist/src/tools/list-contexts.js +28 -0
  193. package/dist/src/tools/list-contexts.js.map +1 -0
  194. package/dist/src/tools/list-sessions.d.ts +86 -0
  195. package/dist/src/tools/list-sessions.d.ts.map +1 -0
  196. package/dist/src/tools/list-sessions.js +97 -0
  197. package/dist/src/tools/list-sessions.js.map +1 -0
  198. package/dist/src/tools/merge-contexts.d.ts +58 -0
  199. package/dist/src/tools/merge-contexts.d.ts.map +1 -0
  200. package/dist/src/tools/merge-contexts.js +27 -0
  201. package/dist/src/tools/merge-contexts.js.map +1 -0
  202. package/dist/src/tools/move-session-context.d.ts +62 -0
  203. package/dist/src/tools/move-session-context.d.ts.map +1 -0
  204. package/dist/src/tools/move-session-context.js +33 -0
  205. package/dist/src/tools/move-session-context.js.map +1 -0
  206. package/dist/src/tools/reingest-session.d.ts +31 -0
  207. package/dist/src/tools/reingest-session.d.ts.map +1 -0
  208. package/dist/src/tools/reingest-session.js +43 -0
  209. package/dist/src/tools/reingest-session.js.map +1 -0
  210. package/dist/src/tools/reject-context-link.d.ts +58 -0
  211. package/dist/src/tools/reject-context-link.d.ts.map +1 -0
  212. package/dist/src/tools/reject-context-link.js +26 -0
  213. package/dist/src/tools/reject-context-link.js.map +1 -0
  214. package/dist/src/tools/resolve-context.d.ts +287 -0
  215. package/dist/src/tools/resolve-context.d.ts.map +1 -0
  216. package/dist/src/tools/resolve-context.js +35 -0
  217. package/dist/src/tools/resolve-context.js.map +1 -0
  218. package/dist/src/tools/search-history.d.ts +86 -0
  219. package/dist/src/tools/search-history.d.ts.map +1 -0
  220. package/dist/src/tools/search-history.js +103 -0
  221. package/dist/src/tools/search-history.js.map +1 -0
  222. package/dist/src/tools/session-ui-metadata.d.ts +15 -0
  223. package/dist/src/tools/session-ui-metadata.d.ts.map +1 -0
  224. package/dist/src/tools/session-ui-metadata.js +15 -0
  225. package/dist/src/tools/session-ui-metadata.js.map +1 -0
  226. package/dist/src/tools/set-active-context.d.ts +58 -0
  227. package/dist/src/tools/set-active-context.d.ts.map +1 -0
  228. package/dist/src/tools/set-active-context.js +26 -0
  229. package/dist/src/tools/set-active-context.js.map +1 -0
  230. package/dist/src/tools/split-context.d.ts +62 -0
  231. package/dist/src/tools/split-context.d.ts.map +1 -0
  232. package/dist/src/tools/split-context.js +36 -0
  233. package/dist/src/tools/split-context.js.map +1 -0
  234. package/dist/src/tools/verify-footprint.js +1 -1
  235. package/dist/src/tools/verify-footprint.js.map +1 -1
  236. package/dist/src/types.d.ts +2 -0
  237. package/dist/src/types.d.ts.map +1 -1
  238. package/dist/src/ui/register.d.ts +6 -1
  239. package/dist/src/ui/register.d.ts.map +1 -1
  240. package/dist/src/ui/register.js +60 -16
  241. package/dist/src/ui/register.js.map +1 -1
  242. package/dist/ui/dashboard.html +239 -868
  243. package/dist/ui/detail.html +107 -248
  244. package/dist/ui/export.html +115 -298
  245. package/dist/ui/session-dashboard-live.html +264 -0
  246. package/dist/ui/session-dashboard.html +329 -0
  247. package/dist/ui/session-detail-live.html +336 -0
  248. package/dist/ui/session-detail.html +355 -0
  249. package/package.json +34 -9
@@ -1,7 +1,31 @@
1
1
  /**
2
2
  * Current schema version
3
3
  */
4
- const SCHEMA_VERSION = "1";
4
+ const SCHEMA_VERSION = "9";
5
+ function tableExists(db, tableName) {
6
+ const row = db
7
+ .prepare(`
8
+ SELECT name
9
+ FROM sqlite_master
10
+ WHERE type = 'table' AND name = ?
11
+ `)
12
+ .get(tableName);
13
+ return Boolean(row?.name);
14
+ }
15
+ function readSchemaVersion(db) {
16
+ if (!tableExists(db, "metadata")) {
17
+ return 0;
18
+ }
19
+ const row = db
20
+ .prepare(`
21
+ SELECT value
22
+ FROM metadata
23
+ WHERE key = 'schema_version'
24
+ `)
25
+ .get();
26
+ const parsed = Number.parseInt(row?.value ?? "", 10);
27
+ return Number.isFinite(parsed) ? parsed : 0;
28
+ }
5
29
  /**
6
30
  * Creates the database schema (tables and indexes)
7
31
  * This function is idempotent - safe to run multiple times
@@ -12,6 +36,8 @@ export function createSchema(db) {
12
36
  // Note: No try/catch here — on failure, the caller (EvidenceDatabase constructor)
13
37
  // owns the db lifecycle and handles cleanup. Previously this function closed the db
14
38
  // on error, causing a double-close when the constructor's catch also called db.close().
39
+ const previousVersion = readSchemaVersion(db);
40
+ const currentVersion = Number.parseInt(SCHEMA_VERSION, 10);
15
41
  // Pragmas must be set outside transactions
16
42
  db.pragma("journal_mode = WAL");
17
43
  db.pragma("synchronous = NORMAL");
@@ -48,13 +74,234 @@ export function createSchema(db) {
48
74
  salt BLOB NOT NULL,
49
75
  createdAt TEXT NOT NULL DEFAULT (datetime('now'))
50
76
  );
77
+ `);
78
+ db.exec(`
79
+ CREATE TABLE IF NOT EXISTS sessions (
80
+ id TEXT PRIMARY KEY,
81
+ host TEXT NOT NULL,
82
+ projectRoot TEXT NOT NULL,
83
+ cwd TEXT NOT NULL,
84
+ title TEXT,
85
+ status TEXT NOT NULL,
86
+ startedAt TEXT NOT NULL,
87
+ endedAt TEXT,
88
+ metadata TEXT,
89
+ createdAt TEXT NOT NULL DEFAULT (datetime('now')),
90
+ updatedAt TEXT NOT NULL DEFAULT (datetime('now'))
91
+ );
92
+ `);
93
+ db.exec(`
94
+ CREATE TABLE IF NOT EXISTS messages (
95
+ id TEXT PRIMARY KEY,
96
+ sessionId TEXT NOT NULL,
97
+ seq INTEGER NOT NULL,
98
+ role TEXT NOT NULL,
99
+ source TEXT NOT NULL,
100
+ content TEXT NOT NULL,
101
+ capturedAt TEXT NOT NULL,
102
+ metadata TEXT,
103
+ createdAt TEXT NOT NULL DEFAULT (datetime('now')),
104
+ FOREIGN KEY (sessionId) REFERENCES sessions(id) ON DELETE CASCADE,
105
+ UNIQUE (sessionId, seq)
106
+ );
107
+ `);
108
+ db.exec(`
109
+ CREATE TABLE IF NOT EXISTS timeline_events (
110
+ id TEXT PRIMARY KEY,
111
+ sessionId TEXT NOT NULL,
112
+ seq INTEGER NOT NULL,
113
+ eventType TEXT NOT NULL,
114
+ eventSubType TEXT,
115
+ source TEXT NOT NULL,
116
+ summary TEXT,
117
+ payload TEXT,
118
+ startedAt TEXT NOT NULL,
119
+ endedAt TEXT,
120
+ status TEXT,
121
+ relatedMessageId TEXT,
122
+ createdAt TEXT NOT NULL DEFAULT (datetime('now')),
123
+ FOREIGN KEY (sessionId) REFERENCES sessions(id) ON DELETE CASCADE,
124
+ FOREIGN KEY (relatedMessageId) REFERENCES messages(id) ON DELETE SET NULL,
125
+ UNIQUE (sessionId, seq)
126
+ );
127
+ `);
128
+ db.exec(`
129
+ CREATE TABLE IF NOT EXISTS artifacts (
130
+ id TEXT PRIMARY KEY,
131
+ sessionId TEXT NOT NULL,
132
+ eventId TEXT,
133
+ artifactType TEXT NOT NULL,
134
+ path TEXT,
135
+ metadata TEXT,
136
+ createdAt TEXT NOT NULL DEFAULT (datetime('now')),
137
+ FOREIGN KEY (sessionId) REFERENCES sessions(id) ON DELETE CASCADE,
138
+ FOREIGN KEY (eventId) REFERENCES timeline_events(id) ON DELETE SET NULL
139
+ );
140
+ `);
141
+ db.exec(`
142
+ CREATE TABLE IF NOT EXISTS decisions (
143
+ id TEXT PRIMARY KEY,
144
+ sessionId TEXT NOT NULL,
145
+ title TEXT NOT NULL,
146
+ summary TEXT NOT NULL,
147
+ rationale TEXT,
148
+ status TEXT NOT NULL,
149
+ sourceRefs TEXT NOT NULL,
150
+ createdAt TEXT NOT NULL DEFAULT (datetime('now')),
151
+ FOREIGN KEY (sessionId) REFERENCES sessions(id) ON DELETE CASCADE
152
+ );
153
+ `);
154
+ db.exec(`
155
+ CREATE TABLE IF NOT EXISTS narratives (
156
+ id TEXT PRIMARY KEY,
157
+ sessionId TEXT NOT NULL,
158
+ kind TEXT NOT NULL,
159
+ content TEXT NOT NULL,
160
+ sourceRefs TEXT NOT NULL,
161
+ createdAt TEXT NOT NULL DEFAULT (datetime('now')),
162
+ updatedAt TEXT NOT NULL DEFAULT (datetime('now')),
163
+ FOREIGN KEY (sessionId) REFERENCES sessions(id) ON DELETE CASCADE
164
+ );
165
+ `);
166
+ db.exec(`
167
+ CREATE TABLE IF NOT EXISTS ingestion_runs (
168
+ id TEXT PRIMARY KEY,
169
+ sessionId TEXT NOT NULL,
170
+ stage TEXT NOT NULL,
171
+ status TEXT NOT NULL,
172
+ error TEXT,
173
+ startedAt TEXT NOT NULL,
174
+ endedAt TEXT,
175
+ FOREIGN KEY (sessionId) REFERENCES sessions(id) ON DELETE CASCADE
176
+ );
177
+ `);
178
+ db.exec(`
179
+ CREATE TABLE IF NOT EXISTS session_history_cache (
180
+ sessionId TEXT PRIMARY KEY,
181
+ titleText TEXT NOT NULL DEFAULT '',
182
+ metadataText TEXT NOT NULL DEFAULT '',
183
+ messagesText TEXT NOT NULL DEFAULT '',
184
+ artifactsText TEXT NOT NULL DEFAULT '',
185
+ narrativesText TEXT NOT NULL DEFAULT '',
186
+ decisionsText TEXT NOT NULL DEFAULT '',
187
+ updatedAt TEXT NOT NULL DEFAULT (datetime('now')),
188
+ FOREIGN KEY (sessionId) REFERENCES sessions(id) ON DELETE CASCADE
189
+ );
190
+ `);
191
+ db.exec(`
192
+ CREATE TABLE IF NOT EXISTS session_issue_keys (
193
+ sessionId TEXT NOT NULL,
194
+ issueKey TEXT NOT NULL,
195
+ PRIMARY KEY (sessionId, issueKey),
196
+ FOREIGN KEY (sessionId) REFERENCES sessions(id) ON DELETE CASCADE
197
+ );
198
+ `);
199
+ db.exec(`
200
+ CREATE TABLE IF NOT EXISTS session_trend_attempts (
201
+ artifactId TEXT PRIMARY KEY,
202
+ sessionId TEXT NOT NULL,
203
+ issueKey TEXT NOT NULL,
204
+ issueLabel TEXT NOT NULL,
205
+ kind TEXT,
206
+ issueFamilyKey TEXT,
207
+ issueFamilyLabel TEXT,
208
+ outcome TEXT NOT NULL,
209
+ outcomeCategory TEXT NOT NULL,
210
+ seenAt TEXT NOT NULL,
211
+ createdAt TEXT NOT NULL DEFAULT (datetime('now')),
212
+ FOREIGN KEY (artifactId) REFERENCES artifacts(id) ON DELETE CASCADE,
213
+ FOREIGN KEY (sessionId) REFERENCES sessions(id) ON DELETE CASCADE
214
+ );
215
+ `);
216
+ db.exec(`
217
+ CREATE TABLE IF NOT EXISTS session_trend_cache_state (
218
+ sessionId TEXT PRIMARY KEY,
219
+ updatedAt TEXT NOT NULL DEFAULT (datetime('now')),
220
+ FOREIGN KEY (sessionId) REFERENCES sessions(id) ON DELETE CASCADE
221
+ );
222
+ `);
223
+ db.exec(`
224
+ CREATE TABLE IF NOT EXISTS contexts (
225
+ id TEXT PRIMARY KEY,
226
+ label TEXT NOT NULL,
227
+ workspaceKey TEXT NOT NULL,
228
+ status TEXT NOT NULL DEFAULT 'active',
229
+ mergedIntoContextId TEXT,
230
+ metadata TEXT,
231
+ createdAt TEXT NOT NULL DEFAULT (datetime('now')),
232
+ updatedAt TEXT NOT NULL DEFAULT (datetime('now')),
233
+ FOREIGN KEY (mergedIntoContextId) REFERENCES contexts(id) ON DELETE SET NULL
234
+ );
235
+ `);
236
+ db.exec(`
237
+ CREATE TABLE IF NOT EXISTS context_session_links (
238
+ sessionId TEXT PRIMARY KEY,
239
+ contextId TEXT NOT NULL,
240
+ linkSource TEXT NOT NULL,
241
+ createdAt TEXT NOT NULL DEFAULT (datetime('now')),
242
+ updatedAt TEXT NOT NULL DEFAULT (datetime('now')),
243
+ FOREIGN KEY (sessionId) REFERENCES sessions(id) ON DELETE CASCADE,
244
+ FOREIGN KEY (contextId) REFERENCES contexts(id) ON DELETE CASCADE
245
+ );
246
+ `);
247
+ db.exec(`
248
+ CREATE TABLE IF NOT EXISTS context_link_rejections (
249
+ sessionId TEXT NOT NULL,
250
+ contextId TEXT NOT NULL,
251
+ createdAt TEXT NOT NULL DEFAULT (datetime('now')),
252
+ PRIMARY KEY (sessionId, contextId),
253
+ FOREIGN KEY (sessionId) REFERENCES sessions(id) ON DELETE CASCADE,
254
+ FOREIGN KEY (contextId) REFERENCES contexts(id) ON DELETE CASCADE
255
+ );
256
+ `);
257
+ db.exec(`
258
+ CREATE TABLE IF NOT EXISTS context_workspace_preferences (
259
+ workspaceKey TEXT PRIMARY KEY,
260
+ contextId TEXT NOT NULL,
261
+ createdAt TEXT NOT NULL DEFAULT (datetime('now')),
262
+ updatedAt TEXT NOT NULL DEFAULT (datetime('now')),
263
+ FOREIGN KEY (contextId) REFERENCES contexts(id) ON DELETE CASCADE
264
+ );
51
265
  `);
52
266
  db.exec(`CREATE INDEX IF NOT EXISTS idx_timestamp ON evidences(timestamp);`);
53
267
  db.exec(`CREATE INDEX IF NOT EXISTS idx_conversation_id ON evidences(conversationId);`);
54
268
  db.exec(`CREATE INDEX IF NOT EXISTS idx_content_hash ON evidences(contentHash);`);
55
- db.prepare(`INSERT OR IGNORE INTO metadata (key, value) VALUES ('schema_version', ?)`).run(SCHEMA_VERSION);
269
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_evidences_tags ON evidences(tags);`);
270
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_sessions_started_at ON sessions(startedAt DESC);`);
271
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_sessions_host ON sessions(host);`);
272
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_sessions_status_started_at ON sessions(status, startedAt DESC);`);
273
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_sessions_host_status_started_at ON sessions(host, status, startedAt DESC);`);
274
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_messages_session_seq ON messages(sessionId, seq);`);
275
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_messages_session_captured_at_seq ON messages(sessionId, capturedAt DESC, seq DESC, id DESC);`);
276
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_timeline_session_seq ON timeline_events(sessionId, seq);`);
277
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_artifacts_session ON artifacts(sessionId, artifactType);`);
278
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_decisions_session ON decisions(sessionId, createdAt DESC);`);
279
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_narratives_session ON narratives(sessionId, kind);`);
280
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_ingestion_runs_session ON ingestion_runs(sessionId, startedAt DESC);`);
281
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_session_history_cache_updated_at ON session_history_cache(updatedAt DESC);`);
282
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_session_issue_keys_issue_key ON session_issue_keys(issueKey, sessionId);`);
283
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_session_issue_keys_session_issue ON session_issue_keys(sessionId, issueKey);`);
284
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_session_trend_attempts_session_seen_at ON session_trend_attempts(sessionId, seenAt DESC);`);
285
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_session_trend_attempts_session_issue_key ON session_trend_attempts(sessionId, issueKey, seenAt DESC);`);
286
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_session_trend_attempts_issue_key ON session_trend_attempts(issueKey, seenAt DESC);`);
287
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_session_trend_attempts_issue_family_key ON session_trend_attempts(issueFamilyKey, seenAt DESC);`);
288
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_session_trend_cache_state_updated_at ON session_trend_cache_state(updatedAt DESC);`);
289
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_contexts_workspace_key_updated_at ON contexts(workspaceKey, updatedAt DESC);`);
290
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_contexts_status_updated_at ON contexts(status, updatedAt DESC);`);
291
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_context_session_links_context_id_updated_at ON context_session_links(contextId, updatedAt DESC);`);
292
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_context_link_rejections_context_id ON context_link_rejections(contextId, sessionId);`);
293
+ db.prepare(`
294
+ INSERT INTO metadata (key, value)
295
+ VALUES ('schema_version', ?)
296
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value
297
+ `).run(SCHEMA_VERSION);
56
298
  });
57
299
  initSchema();
300
+ return {
301
+ previousVersion,
302
+ currentVersion,
303
+ upgraded: previousVersion > 0 && previousVersion < currentVersion,
304
+ };
58
305
  }
59
306
  /**
60
307
  * Verifies that the database schema is valid
@@ -80,6 +327,34 @@ export function verifySchema(db) {
80
327
  if (!cryptoKeysTableInfo || cryptoKeysTableInfo.length === 0) {
81
328
  return false;
82
329
  }
330
+ const sessionsTableInfo = db.pragma("table_info(sessions)");
331
+ if (!sessionsTableInfo || sessionsTableInfo.length === 0) {
332
+ return false;
333
+ }
334
+ const messagesTableInfo = db.pragma("table_info(messages)");
335
+ if (!messagesTableInfo || messagesTableInfo.length === 0) {
336
+ return false;
337
+ }
338
+ const timelineTableInfo = db.pragma("table_info(timeline_events)");
339
+ if (!timelineTableInfo || timelineTableInfo.length === 0) {
340
+ return false;
341
+ }
342
+ const artifactsTableInfo = db.pragma("table_info(artifacts)");
343
+ if (!artifactsTableInfo || artifactsTableInfo.length === 0) {
344
+ return false;
345
+ }
346
+ const decisionsTableInfo = db.pragma("table_info(decisions)");
347
+ if (!decisionsTableInfo || decisionsTableInfo.length === 0) {
348
+ return false;
349
+ }
350
+ const narrativesTableInfo = db.pragma("table_info(narratives)");
351
+ if (!narrativesTableInfo || narrativesTableInfo.length === 0) {
352
+ return false;
353
+ }
354
+ const ingestionRunsTableInfo = db.pragma("table_info(ingestion_runs)");
355
+ if (!ingestionRunsTableInfo || ingestionRunsTableInfo.length === 0) {
356
+ return false;
357
+ }
83
358
  // Verify required columns exist in evidences table
84
359
  const evidencesColumns = evidencesTableInfo.map((col) => col.name);
85
360
  const requiredColumns = [
@@ -97,6 +372,66 @@ export function verifySchema(db) {
97
372
  return false;
98
373
  }
99
374
  }
375
+ const sessionColumns = sessionsTableInfo.map((col) => col.name);
376
+ for (const col of ["id", "host", "status", "startedAt"]) {
377
+ if (!sessionColumns.includes(col)) {
378
+ return false;
379
+ }
380
+ }
381
+ const messageColumns = messagesTableInfo.map((col) => col.name);
382
+ for (const col of ["id", "sessionId", "seq", "role", "content"]) {
383
+ if (!messageColumns.includes(col)) {
384
+ return false;
385
+ }
386
+ }
387
+ const timelineColumns = timelineTableInfo.map((col) => col.name);
388
+ for (const col of ["id", "sessionId", "seq", "eventType", "startedAt"]) {
389
+ if (!timelineColumns.includes(col)) {
390
+ return false;
391
+ }
392
+ }
393
+ const artifactColumns = artifactsTableInfo.map((col) => col.name);
394
+ for (const col of ["id", "sessionId", "artifactType", "createdAt"]) {
395
+ if (!artifactColumns.includes(col)) {
396
+ return false;
397
+ }
398
+ }
399
+ const decisionColumns = decisionsTableInfo.map((col) => col.name);
400
+ for (const col of ["id", "sessionId", "title", "summary", "sourceRefs"]) {
401
+ if (!decisionColumns.includes(col)) {
402
+ return false;
403
+ }
404
+ }
405
+ const narrativeColumns = narrativesTableInfo.map((col) => col.name);
406
+ for (const col of ["id", "sessionId", "kind", "content", "sourceRefs"]) {
407
+ if (!narrativeColumns.includes(col)) {
408
+ return false;
409
+ }
410
+ }
411
+ const ingestionRunColumns = ingestionRunsTableInfo.map((col) => col.name);
412
+ for (const col of ["id", "sessionId", "stage", "status", "startedAt"]) {
413
+ if (!ingestionRunColumns.includes(col)) {
414
+ return false;
415
+ }
416
+ }
417
+ const contextsTableInfo = db.pragma("table_info(contexts)");
418
+ if (!contextsTableInfo || contextsTableInfo.length === 0) {
419
+ return false;
420
+ }
421
+ const contextLinksTableInfo = db.pragma("table_info(context_session_links)");
422
+ if (!contextLinksTableInfo || contextLinksTableInfo.length === 0) {
423
+ return false;
424
+ }
425
+ const contextRejectionsTableInfo = db.pragma("table_info(context_link_rejections)");
426
+ if (!contextRejectionsTableInfo ||
427
+ contextRejectionsTableInfo.length === 0) {
428
+ return false;
429
+ }
430
+ const contextPreferencesTableInfo = db.pragma("table_info(context_workspace_preferences)");
431
+ if (!contextPreferencesTableInfo ||
432
+ contextPreferencesTableInfo.length === 0) {
433
+ return false;
434
+ }
100
435
  return true;
101
436
  }
102
437
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/lib/storage/schema.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,EAAqB;IAChD,kFAAkF;IAClF,oFAAoF;IACpF,wFAAwF;IAExF,2CAA2C;IAC3C,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAClC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACjC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,mFAAmF;IACnF,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QACrC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;KAgBP,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC;;;;;KAKP,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC;;;;;;KAMP,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CACL,mEAAmE,CACpE,CAAC;QACF,EAAE,CAAC,IAAI,CACL,8EAA8E,CAC/E,CAAC;QACF,EAAE,CAAC,IAAI,CACL,wEAAwE,CACzE,CAAC;QAEF,EAAE,CAAC,OAAO,CACR,0EAA0E,CAC3E,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,UAAU,EAAE,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,EAAqB;IAChD,IAAI,CAAC;QACH,kCAAkC;QAClC,MAAM,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAG1D,CAAC;QACH,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,iCAAiC;QACjC,MAAM,iBAAiB,GAAG,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAGxD,CAAC;QACH,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,oCAAoC;QACpC,MAAM,mBAAmB,GAAG,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAG7D,CAAC;QACH,IAAI,CAAC,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,mDAAmD;QACnD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,eAAe,GAAG;YACtB,IAAI;YACJ,WAAW;YACX,kBAAkB;YAClB,OAAO;YACP,aAAa;YACb,cAAc;YACd,WAAW;YACX,WAAW;SACZ,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YAClC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/lib/storage/schema.ts"],"names":[],"mappings":"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"}
@@ -23,4 +23,126 @@ export interface Metadata {
23
23
  key: string;
24
24
  value: string;
25
25
  }
26
+ export type SessionHost = "claude" | "gemini" | "codex";
27
+ export type SessionStatus = "running" | "completed" | "failed" | "interrupted";
28
+ export type SessionMessageRole = "user" | "assistant" | "system";
29
+ export interface SessionRecord {
30
+ id: string;
31
+ host: SessionHost;
32
+ projectRoot: string;
33
+ cwd: string;
34
+ title: string | null;
35
+ status: SessionStatus;
36
+ startedAt: string;
37
+ endedAt: string | null;
38
+ metadata: string | null;
39
+ createdAt: string;
40
+ updatedAt: string;
41
+ }
42
+ export interface SessionMessageRecord {
43
+ id: string;
44
+ sessionId: string;
45
+ seq: number;
46
+ role: SessionMessageRole;
47
+ source: string;
48
+ content: string;
49
+ capturedAt: string;
50
+ metadata: string | null;
51
+ }
52
+ export interface TimelineEventRecord {
53
+ id: string;
54
+ sessionId: string;
55
+ seq: number;
56
+ eventType: string;
57
+ eventSubType: string | null;
58
+ source: string;
59
+ summary: string | null;
60
+ payload: string | null;
61
+ startedAt: string;
62
+ endedAt: string | null;
63
+ status: string | null;
64
+ relatedMessageId: string | null;
65
+ }
66
+ export type ArtifactType = "file-change" | "command-output" | "test-result" | "git-commit";
67
+ export interface ArtifactRecord {
68
+ id: string;
69
+ sessionId: string;
70
+ eventId: string | null;
71
+ artifactType: ArtifactType;
72
+ path: string | null;
73
+ metadata: string | null;
74
+ createdAt: string;
75
+ }
76
+ export type DecisionStatus = "proposed" | "accepted" | "rejected" | "open";
77
+ export interface DecisionRecord {
78
+ id: string;
79
+ sessionId: string;
80
+ title: string;
81
+ summary: string;
82
+ rationale: string | null;
83
+ status: DecisionStatus;
84
+ sourceRefs: string;
85
+ createdAt: string;
86
+ }
87
+ export type NarrativeKind = "journal" | "project-summary" | "handoff";
88
+ export interface NarrativeRecord {
89
+ id: string;
90
+ sessionId: string;
91
+ kind: NarrativeKind;
92
+ content: string;
93
+ sourceRefs: string;
94
+ createdAt: string;
95
+ updatedAt: string;
96
+ }
97
+ export type IngestionStage = "deterministic" | "semantic";
98
+ export type IngestionStatus = "running" | "completed" | "failed";
99
+ export interface IngestionRunRecord {
100
+ id: string;
101
+ sessionId: string;
102
+ stage: IngestionStage;
103
+ status: IngestionStatus;
104
+ error: string | null;
105
+ startedAt: string;
106
+ endedAt: string | null;
107
+ }
108
+ export interface SessionDetail {
109
+ session: SessionRecord;
110
+ messages: SessionMessageRecord[];
111
+ timeline: TimelineEventRecord[];
112
+ artifacts: ArtifactRecord[];
113
+ narratives: NarrativeRecord[];
114
+ decisions: DecisionRecord[];
115
+ ingestionRuns: IngestionRunRecord[];
116
+ hasNarratives: boolean;
117
+ }
118
+ export type ContextStatus = "active" | "merged";
119
+ export type ContextLinkSource = "confirmed" | "moved" | "split" | "merge" | "bootstrap";
120
+ export interface ContextRecord {
121
+ id: string;
122
+ label: string;
123
+ workspaceKey: string;
124
+ status: ContextStatus;
125
+ mergedIntoContextId: string | null;
126
+ metadata: string | null;
127
+ createdAt: string;
128
+ updatedAt: string;
129
+ }
130
+ export interface ContextSessionLinkRecord {
131
+ sessionId: string;
132
+ contextId: string;
133
+ linkSource: ContextLinkSource;
134
+ createdAt: string;
135
+ updatedAt: string;
136
+ }
137
+ export interface ContextLinkRejectionRecord {
138
+ sessionId: string;
139
+ contextId: string;
140
+ createdAt: string;
141
+ }
142
+ export interface ContextWorkspacePreferenceRecord {
143
+ workspaceKey: string;
144
+ contextId: string;
145
+ createdAt: string;
146
+ updatedAt: string;
147
+ }
26
148
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/storage/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gBAAgB,EAAE,UAAU,CAAC;IAC7B,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/storage/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"skill-prompt.d.ts","sourceRoot":"","sources":["../../../src/prompts/skill-prompt.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiDzE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyF5D"}
1
+ {"version":3,"file":"skill-prompt.d.ts","sourceRoot":"","sources":["../../../src/prompts/skill-prompt.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8DzE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyF5D"}
@@ -28,12 +28,25 @@ Should I capture this conversation?
28
28
  \u251C\u2500 Casual chat/small talk \u2192 NO
29
29
  \u2514\u2500 Uncertain \u2192 ASK user
30
30
 
31
+ Should I reuse prior work context?
32
+ \u251C\u2500 Continuing or resuming work \u2192 resolve-context first
33
+ \u251C\u2500 resolve-context says confirmationRequired \u2192 ASK user
34
+ \u251C\u2500 In interactive CLI, use context prepare / run --prepare-context to ask before recording
35
+ \u251C\u2500 No strong candidate \u2192 create or confirm a new context
36
+ \u2514\u2500 User corrected the context before \u2192 trust confirmed context, not guesswork
37
+
31
38
  ## Tool Selection
32
39
  - Save conversation \u2192 capture-footprint
33
40
  - Browse/overview \u2192 list-footprints
34
41
  - Full content retrieval \u2192 get-footprint
35
42
  - Find by query/tags/dates \u2192 search-footprints
36
43
  - Legal/audit export \u2192 export-footprints
44
+ - Session browse/detail \u2192 list-sessions / get-session
45
+ - Session handoff export \u2192 export-sessions
46
+ - Resolve likely work context \u2192 resolve-context
47
+ - Inspect confirmed context briefing \u2192 list-contexts / get-context
48
+ - Confirm or correct session-to-context links \u2192 confirm-context-link / reject-context-link / move-session-context
49
+ - Reorganize contexts \u2192 merge-contexts / split-context / set-active-context
37
50
  - Verify integrity \u2192 verify-footprint
38
51
  - Tag management \u2192 manage-tags (stats/rename/remove)
39
52
  - Keyword pre-filter \u2192 suggest-capture
@@ -1 +1 @@
1
- {"version":3,"file":"skill-prompt.js","sourceRoot":"","sources":["../../../src/prompts/skill-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C;;;GAGG;AACH,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE,qCAAqC;QAChF,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,EAAE,WAAW;KAC1D,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;6CA2BqB,CAAC;AAE9C;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,YAAY,GAAG,WAAW,EAAE,CAAC;IAEnC,wBAAwB;IACxB,MAAM,CAAC,cAAc,CACnB,iBAAiB,EACjB;QACE,WAAW,EACT,6HAA6H;KAChI,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,YAAY,EAAE;aACvD;SACF;KACF,CAAC,CACH,CAAC;IAEF,4BAA4B;IAC5B,MAAM,CAAC,cAAc,CACnB,qBAAqB,EACrB;QACE,WAAW,EACT,0FAA0F;KAC7F,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,EAAE;aAC1D;SACF;KACF,CAAC,CACH,CAAC;IAEF,sCAAsC;IACtC,MAAM,CAAC,cAAc,CACnB,0BAA0B,EAC1B;QACE,WAAW,EACT,uLAAuL;QACzL,UAAU,EAAE;YACV,mBAAmB,EAAE,CAAC;iBACnB,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,EAAE,sCAAsC,CAAC;iBAC9C,GAAG,CAAC,KAAK,EAAE,sDAAsD,CAAC;iBAClE,QAAQ,CAAC,uDAAuD,CAAC;SACrE;KACF,EACD,KAAK,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;;;EAGhB,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;yEAuBoD;iBAC9D;aACF;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"skill-prompt.js","sourceRoot":"","sources":["../../../src/prompts/skill-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C;;;GAGG;AACH,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE,qCAAqC;QAChF,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,EAAE,WAAW;KAC1D,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CAwCqB,CAAC;AAE9C;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,YAAY,GAAG,WAAW,EAAE,CAAC;IAEnC,wBAAwB;IACxB,MAAM,CAAC,cAAc,CACnB,iBAAiB,EACjB;QACE,WAAW,EACT,6HAA6H;KAChI,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,YAAY,EAAE;aACvD;SACF;KACF,CAAC,CACH,CAAC;IAEF,4BAA4B;IAC5B,MAAM,CAAC,cAAc,CACnB,qBAAqB,EACrB;QACE,WAAW,EACT,0FAA0F;KAC7F,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,EAAE;aAC1D;SACF;KACF,CAAC,CACH,CAAC;IAEF,sCAAsC;IACtC,MAAM,CAAC,cAAc,CACnB,0BAA0B,EAC1B;QACE,WAAW,EACT,uLAAuL;QACzL,UAAU,EAAE;YACV,mBAAmB,EAAE,CAAC;iBACnB,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,EAAE,sCAAsC,CAAC;iBAC9C,GAAG,CAAC,KAAK,EAAE,sDAAsD,CAAC;iBAClE,QAAQ,CAAC,uDAAuD,CAAC;SACrE;KACF,EACD,KAAK,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;;;EAGhB,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;yEAuBoD;iBAC9D;aACF;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,62 @@
1
+ import * as z from "zod";
2
+ import type { EvidenceDatabase } from "../lib/storage/index.js";
3
+ export declare const confirmContextLinkSchema: {
4
+ inputSchema: {
5
+ sessionIds: z.ZodArray<z.ZodString>;
6
+ contextId: z.ZodOptional<z.ZodString>;
7
+ label: z.ZodOptional<z.ZodString>;
8
+ setPreferred: z.ZodOptional<z.ZodBoolean>;
9
+ };
10
+ outputSchema: {
11
+ action: z.ZodEnum<{
12
+ rejected: "rejected";
13
+ merged: "merged";
14
+ confirmed: "confirmed";
15
+ moved: "moved";
16
+ split: "split";
17
+ preferred: "preferred";
18
+ }>;
19
+ context: z.ZodNullable<z.ZodObject<{
20
+ id: z.ZodString;
21
+ label: z.ZodString;
22
+ workspaceKey: z.ZodString;
23
+ latestSessionId: z.ZodString;
24
+ latestSessionLabel: z.ZodString;
25
+ latestStartedAt: z.ZodString;
26
+ latestEndedAt: z.ZodNullable<z.ZodString>;
27
+ sessionCount: z.ZodNumber;
28
+ hosts: z.ZodArray<z.ZodEnum<{
29
+ claude: "claude";
30
+ gemini: "gemini";
31
+ codex: "codex";
32
+ }>>;
33
+ statuses: z.ZodArray<z.ZodEnum<{
34
+ running: "running";
35
+ completed: "completed";
36
+ failed: "failed";
37
+ interrupted: "interrupted";
38
+ }>>;
39
+ confidence: z.ZodEnum<{
40
+ high: "high";
41
+ medium: "medium";
42
+ low: "low";
43
+ }>;
44
+ confidenceScore: z.ZodNumber;
45
+ signals: z.ZodArray<z.ZodString>;
46
+ }, z.core.$strip>>;
47
+ affectedSessionIds: z.ZodArray<z.ZodString>;
48
+ contextId: z.ZodNullable<z.ZodString>;
49
+ mergedFromContextId: z.ZodNullable<z.ZodString>;
50
+ };
51
+ };
52
+ export declare const confirmContextLinkMetadata: {
53
+ title: string;
54
+ description: string;
55
+ };
56
+ export declare function createConfirmContextLinkHandler(db: EvidenceDatabase): (params: {
57
+ sessionIds: string[];
58
+ contextId?: string;
59
+ label?: string;
60
+ setPreferred?: boolean;
61
+ }) => Promise<import("../lib/tool-response.js").ToolResponse<import("../lib/context-memory.js").ContextLinkMutationResult>>;
62
+ //# sourceMappingURL=confirm-context-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm-context-link.d.ts","sourceRoot":"","sources":["../../../src/tools/confirm-context-link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAIzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUpC,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;CAItC,CAAC;AAEF,wBAAgB,+BAA+B,CAAC,EAAE,EAAE,gBAAgB;gBAKlD,MAAM,EAAE;gBACR,MAAM;YACV,MAAM;mBACC,OAAO;4HAoB3B"}