context-vault 3.1.7 → 3.2.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 (131) hide show
  1. package/bin/cli.js +11 -11
  2. package/dist/archive.d.ts +23 -0
  3. package/dist/archive.d.ts.map +1 -0
  4. package/dist/archive.js +197 -0
  5. package/dist/archive.js.map +1 -0
  6. package/dist/consolidation.d.ts +14 -0
  7. package/dist/consolidation.d.ts.map +1 -0
  8. package/dist/consolidation.js +59 -0
  9. package/dist/consolidation.js.map +1 -0
  10. package/dist/error-log.d.ts +4 -0
  11. package/dist/error-log.d.ts.map +1 -0
  12. package/dist/error-log.js +33 -0
  13. package/dist/error-log.js.map +1 -0
  14. package/dist/helpers.d.ts +10 -0
  15. package/dist/helpers.d.ts.map +1 -0
  16. package/dist/helpers.js +42 -0
  17. package/dist/helpers.js.map +1 -0
  18. package/dist/linking.d.ts +13 -0
  19. package/dist/linking.d.ts.map +1 -0
  20. package/dist/linking.js +86 -0
  21. package/dist/linking.js.map +1 -0
  22. package/dist/migrate-dirs.d.ts +16 -0
  23. package/dist/migrate-dirs.d.ts.map +1 -0
  24. package/dist/migrate-dirs.js +127 -0
  25. package/dist/migrate-dirs.js.map +1 -0
  26. package/dist/register-tools.d.ts +3 -0
  27. package/dist/register-tools.d.ts.map +1 -0
  28. package/dist/register-tools.js +161 -0
  29. package/dist/register-tools.js.map +1 -0
  30. package/dist/server.d.ts +3 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +241 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/status.d.ts +18 -0
  35. package/dist/status.d.ts.map +1 -0
  36. package/dist/status.js +265 -0
  37. package/dist/status.js.map +1 -0
  38. package/dist/telemetry.d.ts +6 -0
  39. package/dist/telemetry.d.ts.map +1 -0
  40. package/dist/telemetry.js +74 -0
  41. package/dist/telemetry.js.map +1 -0
  42. package/dist/temporal.d.ts +9 -0
  43. package/dist/temporal.d.ts.map +1 -0
  44. package/dist/temporal.js +76 -0
  45. package/dist/temporal.js.map +1 -0
  46. package/dist/tools/clear-context.d.ts +11 -0
  47. package/dist/tools/clear-context.d.ts.map +1 -0
  48. package/dist/tools/clear-context.js +28 -0
  49. package/dist/tools/clear-context.js.map +1 -0
  50. package/dist/tools/context-status.d.ts +6 -0
  51. package/dist/tools/context-status.d.ts.map +1 -0
  52. package/dist/tools/context-status.js +160 -0
  53. package/dist/tools/context-status.js.map +1 -0
  54. package/dist/tools/create-snapshot.d.ts +13 -0
  55. package/dist/tools/create-snapshot.d.ts.map +1 -0
  56. package/dist/tools/create-snapshot.js +161 -0
  57. package/dist/tools/create-snapshot.js.map +1 -0
  58. package/dist/tools/delete-context.d.ts +9 -0
  59. package/dist/tools/delete-context.d.ts.map +1 -0
  60. package/dist/tools/delete-context.js +45 -0
  61. package/dist/tools/delete-context.js.map +1 -0
  62. package/dist/tools/get-context.d.ts +83 -0
  63. package/dist/tools/get-context.d.ts.map +1 -0
  64. package/dist/tools/get-context.js +598 -0
  65. package/dist/tools/get-context.js.map +1 -0
  66. package/dist/tools/ingest-project.d.ts +11 -0
  67. package/dist/tools/ingest-project.d.ts.map +1 -0
  68. package/dist/tools/ingest-project.js +226 -0
  69. package/dist/tools/ingest-project.js.map +1 -0
  70. package/dist/tools/ingest-url.d.ts +11 -0
  71. package/dist/tools/ingest-url.d.ts.map +1 -0
  72. package/dist/tools/ingest-url.js +62 -0
  73. package/dist/tools/ingest-url.js.map +1 -0
  74. package/dist/tools/list-buckets.d.ts +9 -0
  75. package/dist/tools/list-buckets.d.ts.map +1 -0
  76. package/dist/tools/list-buckets.js +76 -0
  77. package/dist/tools/list-buckets.js.map +1 -0
  78. package/dist/tools/list-context.d.ts +19 -0
  79. package/dist/tools/list-context.d.ts.map +1 -0
  80. package/dist/tools/list-context.js +110 -0
  81. package/dist/tools/list-context.js.map +1 -0
  82. package/dist/tools/save-context.d.ts +36 -0
  83. package/dist/tools/save-context.d.ts.map +1 -0
  84. package/dist/tools/save-context.js +466 -0
  85. package/dist/tools/save-context.js.map +1 -0
  86. package/dist/tools/session-start.d.ts +11 -0
  87. package/dist/tools/session-start.d.ts.map +1 -0
  88. package/dist/tools/session-start.js +224 -0
  89. package/dist/tools/session-start.js.map +1 -0
  90. package/dist/types.d.ts +37 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +2 -0
  93. package/dist/types.js.map +1 -0
  94. package/node_modules/@context-vault/core/dist/constants.d.ts +1 -1
  95. package/node_modules/@context-vault/core/dist/constants.d.ts.map +1 -1
  96. package/node_modules/@context-vault/core/dist/constants.js +1 -1
  97. package/node_modules/@context-vault/core/dist/constants.js.map +1 -1
  98. package/node_modules/@context-vault/core/dist/search.d.ts +2 -1
  99. package/node_modules/@context-vault/core/dist/search.d.ts.map +1 -1
  100. package/node_modules/@context-vault/core/dist/search.js +6 -2
  101. package/node_modules/@context-vault/core/dist/search.js.map +1 -1
  102. package/node_modules/@context-vault/core/dist/types.d.ts +1 -0
  103. package/node_modules/@context-vault/core/dist/types.d.ts.map +1 -1
  104. package/node_modules/@context-vault/core/package.json +1 -1
  105. package/node_modules/@context-vault/core/src/constants.ts +1 -1
  106. package/node_modules/@context-vault/core/src/search.ts +7 -0
  107. package/node_modules/@context-vault/core/src/types.ts +1 -0
  108. package/package.json +10 -4
  109. package/src/{archive.js → archive.ts} +63 -30
  110. package/src/consolidation.ts +78 -0
  111. package/src/{error-log.js → error-log.ts} +3 -3
  112. package/src/{helpers.js → helpers.ts} +11 -5
  113. package/src/{linking.js → linking.ts} +14 -9
  114. package/src/{migrate-dirs.js → migrate-dirs.ts} +21 -8
  115. package/src/{register-tools.js → register-tools.ts} +21 -11
  116. package/src/{server.js → server.ts} +26 -20
  117. package/src/{status.js → status.ts} +60 -38
  118. package/src/{telemetry.js → telemetry.ts} +8 -4
  119. package/src/{temporal.js → temporal.ts} +10 -3
  120. package/src/tools/{clear-context.js → clear-context.ts} +2 -5
  121. package/src/tools/{context-status.js → context-status.ts} +6 -9
  122. package/src/tools/{create-snapshot.js → create-snapshot.ts} +11 -10
  123. package/src/tools/{delete-context.js → delete-context.ts} +9 -9
  124. package/src/tools/{get-context.js → get-context.ts} +72 -62
  125. package/src/tools/{ingest-project.js → ingest-project.ts} +19 -11
  126. package/src/tools/{ingest-url.js → ingest-url.ts} +11 -8
  127. package/src/tools/{list-buckets.js → list-buckets.ts} +11 -15
  128. package/src/tools/{list-context.js → list-context.ts} +13 -15
  129. package/src/tools/{save-context.js → save-context.ts} +54 -42
  130. package/src/tools/{session-start.js → session-start.ts} +29 -20
  131. package/src/types.ts +29 -0
@@ -0,0 +1,466 @@
1
+ import { z } from 'zod';
2
+ import { captureAndIndex, updateEntryFile } from '@context-vault/core/capture';
3
+ import { indexEntry } from '@context-vault/core/index';
4
+ import { categoryFor, defaultTierFor } from '@context-vault/core/categories';
5
+ import { normalizeKind } from '@context-vault/core/files';
6
+ import { ok, err, errWithHint, ensureVaultExists, ensureValidKind } from '../helpers.js';
7
+ import { maybeShowFeedbackPrompt } from '../telemetry.js';
8
+ import { validateRelatedTo } from '../linking.js';
9
+ import { MAX_BODY_LENGTH, MAX_TITLE_LENGTH, MAX_KIND_LENGTH, MAX_TAG_LENGTH, MAX_TAGS_COUNT, MAX_META_LENGTH, MAX_SOURCE_LENGTH, MAX_IDENTITY_KEY_LENGTH, } from '@context-vault/core/constants';
10
+ const DEFAULT_SIMILARITY_THRESHOLD = 0.85;
11
+ const SKIP_THRESHOLD = 0.95;
12
+ const UPDATE_THRESHOLD = 0.85;
13
+ async function findSimilar(ctx, embedding, threshold, { hydrate = false } = {}) {
14
+ try {
15
+ const vecCount = ctx.db.prepare('SELECT COUNT(*) as c FROM vault_vec').get()?.c ?? 0;
16
+ if (vecCount === 0)
17
+ return [];
18
+ const vecRows = ctx.db
19
+ .prepare(`SELECT v.rowid, v.distance FROM vault_vec v WHERE embedding MATCH ? ORDER BY distance LIMIT ?`)
20
+ .all(embedding, 10);
21
+ if (!vecRows.length)
22
+ return [];
23
+ const rowids = vecRows.map((vr) => vr.rowid);
24
+ const placeholders = rowids.map(() => '?').join(',');
25
+ // Local mode has no user_id column — omit it from the SELECT list.
26
+ const isLocal = ctx.stmts._mode === 'local';
27
+ const columns = isLocal
28
+ ? hydrate
29
+ ? 'rowid, id, title, body, kind, tags, category, updated_at'
30
+ : 'rowid, id, title, category'
31
+ : hydrate
32
+ ? 'rowid, id, title, body, kind, tags, category, updated_at'
33
+ : 'rowid, id, title, category';
34
+ const hydratedRows = ctx.db
35
+ .prepare(`SELECT ${columns} FROM vault WHERE rowid IN (${placeholders})`)
36
+ .all(...rowids);
37
+ const byRowid = new Map();
38
+ for (const row of hydratedRows)
39
+ byRowid.set(row.rowid, row);
40
+ const results = [];
41
+ for (const vr of vecRows) {
42
+ const similarity = Math.max(0, 1 - vr.distance / 2);
43
+ if (similarity < threshold)
44
+ continue;
45
+ const row = byRowid.get(vr.rowid);
46
+ if (!row)
47
+ continue;
48
+ if (row.category === 'entity')
49
+ continue;
50
+ const entry = { id: row.id, title: row.title, score: similarity };
51
+ if (hydrate) {
52
+ entry.body = row.body;
53
+ entry.kind = row.kind;
54
+ entry.tags = row.tags;
55
+ entry.updated_at = row.updated_at;
56
+ }
57
+ results.push(entry);
58
+ }
59
+ return results;
60
+ }
61
+ catch {
62
+ return [];
63
+ }
64
+ }
65
+ function formatSimilarWarning(similar) {
66
+ const lines = ['', '⚠ Similar entries already exist:'];
67
+ for (const e of similar) {
68
+ const score = e.score.toFixed(2);
69
+ const title = e.title ? `"${e.title}"` : '(no title)';
70
+ lines.push(` - ${title} (${score}) — id: ${e.id}`);
71
+ }
72
+ lines.push(' Consider using `id: <existing>` in save_context to update instead.');
73
+ return lines.join('\n');
74
+ }
75
+ export function buildConflictCandidates(similarEntries) {
76
+ return similarEntries.map((entry) => {
77
+ let suggested_action;
78
+ let reasoning_context;
79
+ if (entry.score >= SKIP_THRESHOLD) {
80
+ suggested_action = 'SKIP';
81
+ reasoning_context =
82
+ `Near-duplicate detected (${(entry.score * 100).toFixed(0)}% similarity)` +
83
+ `${entry.title ? ` with "${entry.title}"` : ''}. ` +
84
+ `Content is nearly identical — saving would create a redundant entry. ` +
85
+ `Use save_context with id: "${entry.id}" to update instead, or skip saving entirely.`;
86
+ }
87
+ else if (entry.score >= UPDATE_THRESHOLD) {
88
+ suggested_action = 'UPDATE';
89
+ reasoning_context =
90
+ `High content similarity (${(entry.score * 100).toFixed(0)}%)` +
91
+ `${entry.title ? ` with "${entry.title}"` : ''}. ` +
92
+ `Likely the same knowledge — consider updating this entry via save_context with id: "${entry.id}".`;
93
+ }
94
+ else {
95
+ suggested_action = 'ADD';
96
+ reasoning_context =
97
+ `Moderate similarity (${(entry.score * 100).toFixed(0)}%)` +
98
+ `${entry.title ? ` with "${entry.title}"` : ''}. ` +
99
+ `Content is related but distinct enough to coexist.`;
100
+ }
101
+ let parsedTags = [];
102
+ if (entry.tags) {
103
+ try {
104
+ parsedTags = typeof entry.tags === 'string' ? JSON.parse(entry.tags) : entry.tags;
105
+ }
106
+ catch {
107
+ parsedTags = [];
108
+ }
109
+ }
110
+ return {
111
+ id: entry.id,
112
+ title: entry.title || null,
113
+ body: entry.body || null,
114
+ kind: entry.kind || null,
115
+ tags: parsedTags,
116
+ score: entry.score,
117
+ updated_at: entry.updated_at || null,
118
+ suggested_action,
119
+ reasoning_context,
120
+ };
121
+ });
122
+ }
123
+ function formatConflictSuggestions(candidates) {
124
+ const lines = ['', '── Conflict Resolution Suggestions ──'];
125
+ for (const c of candidates) {
126
+ const titleDisplay = c.title ? `"${c.title}"` : '(no title)';
127
+ lines.push(` [${c.suggested_action}] ${titleDisplay} (${(c.score * 100).toFixed(0)}%) — id: ${c.id}`);
128
+ lines.push(` ${c.reasoning_context}`);
129
+ }
130
+ return lines.join('\n');
131
+ }
132
+ /**
133
+ * Validate input fields for save_context. Returns an error response or null.
134
+ */
135
+ function validateSaveInput({ kind, title, body, tags, meta, source, identity_key, expires_at, }) {
136
+ if (kind !== undefined && kind !== null) {
137
+ if (typeof kind !== 'string' || kind.length > MAX_KIND_LENGTH) {
138
+ return err(`kind must be a string, max ${MAX_KIND_LENGTH} chars`, 'INVALID_INPUT');
139
+ }
140
+ }
141
+ if (body !== undefined && body !== null) {
142
+ if (typeof body !== 'string' || body.length > MAX_BODY_LENGTH) {
143
+ return err(`body must be a string, max ${MAX_BODY_LENGTH / 1024}KB`, 'INVALID_INPUT');
144
+ }
145
+ }
146
+ if (title !== undefined && title !== null) {
147
+ if (typeof title !== 'string' || title.length > MAX_TITLE_LENGTH) {
148
+ return err(`title must be a string, max ${MAX_TITLE_LENGTH} chars`, 'INVALID_INPUT');
149
+ }
150
+ }
151
+ if (tags !== undefined && tags !== null) {
152
+ if (!Array.isArray(tags))
153
+ return err('tags must be an array of strings', 'INVALID_INPUT');
154
+ if (tags.length > MAX_TAGS_COUNT)
155
+ return err(`tags: max ${MAX_TAGS_COUNT} tags allowed`, 'INVALID_INPUT');
156
+ for (const tag of tags) {
157
+ if (typeof tag !== 'string' || tag.length > MAX_TAG_LENGTH) {
158
+ return err(`each tag must be a string, max ${MAX_TAG_LENGTH} chars`, 'INVALID_INPUT');
159
+ }
160
+ }
161
+ }
162
+ if (meta !== undefined && meta !== null) {
163
+ const metaStr = JSON.stringify(meta);
164
+ if (metaStr.length > MAX_META_LENGTH) {
165
+ return err(`meta must be under ${MAX_META_LENGTH / 1024}KB when serialized`, 'INVALID_INPUT');
166
+ }
167
+ }
168
+ if (source !== undefined && source !== null) {
169
+ if (typeof source !== 'string' || source.length > MAX_SOURCE_LENGTH) {
170
+ return err(`source must be a string, max ${MAX_SOURCE_LENGTH} chars`, 'INVALID_INPUT');
171
+ }
172
+ }
173
+ if (identity_key !== undefined && identity_key !== null) {
174
+ if (typeof identity_key !== 'string' || identity_key.length > MAX_IDENTITY_KEY_LENGTH) {
175
+ return err(`identity_key must be a string, max ${MAX_IDENTITY_KEY_LENGTH} chars`, 'INVALID_INPUT');
176
+ }
177
+ }
178
+ if (expires_at !== undefined && expires_at !== null) {
179
+ if (typeof expires_at !== 'string' || isNaN(new Date(expires_at).getTime())) {
180
+ return err('expires_at must be a valid ISO date string', 'INVALID_INPUT');
181
+ }
182
+ }
183
+ return null;
184
+ }
185
+ export const name = 'save_context';
186
+ export const description = 'Save knowledge to your vault. Creates a .md file and indexes it for search. Use for any kind of context: insights, decisions, patterns, references, or any custom kind. To update an existing entry, pass its `id` — omitted fields are preserved.';
187
+ export const inputSchema = {
188
+ id: z
189
+ .string()
190
+ .optional()
191
+ .describe('Entry ULID to update. When provided, updates the existing entry instead of creating new. Omitted fields are preserved.'),
192
+ kind: z
193
+ .string()
194
+ .optional()
195
+ .describe("Entry kind — determines folder (e.g. 'insight', 'decision', 'pattern', 'reference', or any custom kind). Required for new entries."),
196
+ title: z.string().optional().describe('Entry title (optional for insights)'),
197
+ body: z.string().optional().describe('Main content. Required for new entries.'),
198
+ tags: z
199
+ .array(z.string())
200
+ .optional()
201
+ .describe("Tags for categorization and search. Use 'bucket:' prefix for project/domain scoping (e.g., 'bucket:autohub') to enable project-scoped retrieval."),
202
+ meta: z
203
+ .any()
204
+ .optional()
205
+ .describe("Additional structured metadata (JSON object, e.g. { language: 'js', status: 'accepted' })"),
206
+ folder: z
207
+ .string()
208
+ .optional()
209
+ .describe("Subfolder within the kind directory (e.g. 'react/hooks')"),
210
+ source: z.string().optional().describe('Where this knowledge came from'),
211
+ identity_key: z
212
+ .string()
213
+ .optional()
214
+ .describe('Required for entity kinds (contact, project, tool, source). The unique identifier for this entity.'),
215
+ expires_at: z.string().optional().describe('ISO date for TTL expiry'),
216
+ supersedes: z
217
+ .array(z.string())
218
+ .optional()
219
+ .describe('Array of entry IDs that this entry supersedes/replaces. Those entries will be marked with superseded_by pointing to this new entry and excluded from future search results by default.'),
220
+ related_to: z
221
+ .array(z.string())
222
+ .optional()
223
+ .describe('Array of entry IDs this entry is related to. Enables bidirectional graph traversal — use get_context with follow_links:true to retrieve linked entries.'),
224
+ source_files: z
225
+ .array(z.object({
226
+ path: z.string().describe('File path (absolute or relative to cwd)'),
227
+ hash: z.string().describe('SHA-256 hash of the file contents at observation time'),
228
+ }))
229
+ .optional()
230
+ .describe('Source code files this entry is derived from. When these files change (hash mismatch), the entry will be flagged as stale in get_context results.'),
231
+ dry_run: z
232
+ .boolean()
233
+ .optional()
234
+ .describe('If true, check for similar entries without saving. Returns similarity results without creating a new entry. Only applies to knowledge and event categories.'),
235
+ similarity_threshold: z
236
+ .number()
237
+ .min(0)
238
+ .max(1)
239
+ .optional()
240
+ .describe('Cosine similarity threshold for duplicate detection (0–1, default 0.85). Entries above this score are flagged as similar. Only applies to knowledge and event categories.'),
241
+ tier: z
242
+ .enum(['ephemeral', 'working', 'durable'])
243
+ .optional()
244
+ .describe("Memory tier for lifecycle management. 'ephemeral': short-lived session data. 'working': active context (default). 'durable': long-term reference material. Defaults based on kind when not specified."),
245
+ conflict_resolution: z
246
+ .enum(['suggest', 'off'])
247
+ .optional()
248
+ .describe('Conflict resolution mode. "suggest" (default): when similar entries are found, return structured conflict_candidates with suggested_action (ADD/UPDATE/SKIP) and reasoning_context for the calling agent to decide. Thresholds: score > 0.95 → SKIP (near-duplicate), score > 0.85 → UPDATE (very similar), score < 0.85 → ADD (distinct enough). "off": flag similar entries only (legacy behavior).'),
249
+ };
250
+ export async function handler({ id, kind, title, body, tags, meta, folder, source, identity_key, expires_at, supersedes, related_to, source_files, dry_run, similarity_threshold, tier, conflict_resolution, }, ctx, { ensureIndexed }) {
251
+ const { config } = ctx;
252
+ const suggestMode = conflict_resolution !== 'off';
253
+ const vaultErr = ensureVaultExists(config);
254
+ if (vaultErr)
255
+ return vaultErr;
256
+ const relatedToErr = validateRelatedTo(related_to);
257
+ if (relatedToErr)
258
+ return err(relatedToErr, 'INVALID_INPUT');
259
+ const inputErr = validateSaveInput({
260
+ kind,
261
+ title,
262
+ body,
263
+ tags,
264
+ meta,
265
+ source,
266
+ identity_key,
267
+ expires_at,
268
+ });
269
+ if (inputErr)
270
+ return inputErr;
271
+ // ── Auto-resolve identity_key to id for upsert ──
272
+ if (!id && identity_key && kind) {
273
+ const normalizedKindForLookup = normalizeKind(kind);
274
+ const existingByKey = ctx.stmts.getByIdentityKey.get(normalizedKindForLookup, identity_key);
275
+ if (existingByKey) {
276
+ id = existingByKey.id;
277
+ }
278
+ }
279
+ // ── Update mode ──
280
+ if (id) {
281
+ await ensureIndexed({ blocking: false });
282
+ const existing = ctx.stmts.getEntryById.get(id);
283
+ if (!existing)
284
+ return err(`Entry not found: ${id}`, 'NOT_FOUND');
285
+ if (kind && normalizeKind(kind) !== existing.kind) {
286
+ return err(`Cannot change kind (current: "${existing.kind}"). Delete and re-create instead.`, 'INVALID_UPDATE');
287
+ }
288
+ if (identity_key && identity_key !== existing.identity_key) {
289
+ return err(`Cannot change identity_key (current: "${existing.identity_key}"). Delete and re-create instead.`, 'INVALID_UPDATE');
290
+ }
291
+ let entry;
292
+ try {
293
+ entry = updateEntryFile(ctx, existing, {
294
+ title,
295
+ body,
296
+ tags,
297
+ meta,
298
+ source,
299
+ expires_at,
300
+ supersedes,
301
+ related_to,
302
+ source_files,
303
+ });
304
+ await indexEntry(ctx, entry);
305
+ }
306
+ catch (e) {
307
+ return errWithHint(e instanceof Error ? e.message : String(e), 'UPDATE_FAILED', 'context-vault save_context update is failing. Check `cat ~/.context-mcp/error.log | tail -5` and help me debug.');
308
+ }
309
+ if (entry.related_to?.length && ctx.stmts.updateRelatedTo) {
310
+ ctx.stmts.updateRelatedTo.run(JSON.stringify(entry.related_to), entry.id);
311
+ }
312
+ else if (entry.related_to === null && ctx.stmts.updateRelatedTo) {
313
+ ctx.stmts.updateRelatedTo.run(null, entry.id);
314
+ }
315
+ const relPath = entry.filePath
316
+ ? entry.filePath.replace(config.vaultDir + '/', '')
317
+ : entry.filePath;
318
+ const parts = [`✓ Updated ${entry.kind} → ${relPath}`, ` id: ${entry.id}`];
319
+ if (entry.title)
320
+ parts.push(` title: ${entry.title}`);
321
+ const entryTags = entry.tags || [];
322
+ if (entryTags.length)
323
+ parts.push(` tags: ${entryTags.join(', ')}`);
324
+ parts.push('', '_Search with get_context to verify changes._');
325
+ return ok(parts.join('\n'));
326
+ }
327
+ // ── Create mode ──
328
+ if (!kind)
329
+ return err('Required: kind (for new entries)', 'INVALID_INPUT');
330
+ const kindErr = ensureValidKind(kind);
331
+ if (kindErr)
332
+ return kindErr;
333
+ if (!body?.trim())
334
+ return err('Required: body (for new entries)', 'INVALID_INPUT');
335
+ // Normalize kind to canonical singular form (e.g. "insights" → "insight")
336
+ const normalizedKind = normalizeKind(kind);
337
+ if (categoryFor(normalizedKind) === 'entity' && !identity_key) {
338
+ return err(`Entity kind "${normalizedKind}" requires identity_key`, 'MISSING_IDENTITY_KEY');
339
+ }
340
+ // Start reindex in background but don't wait — similarity check
341
+ // may miss unindexed entries, but the save won't time out
342
+ await ensureIndexed({ blocking: false });
343
+ // ── Similarity check (knowledge + event only) ────────────────────────────
344
+ const category = categoryFor(normalizedKind);
345
+ let similarEntries = [];
346
+ let queryEmbedding = null;
347
+ if (category === 'knowledge' || category === 'event') {
348
+ const threshold = similarity_threshold ?? DEFAULT_SIMILARITY_THRESHOLD;
349
+ const embeddingText = [title, body].filter(Boolean).join(' ');
350
+ try {
351
+ queryEmbedding = await ctx.embed(embeddingText);
352
+ }
353
+ catch {
354
+ queryEmbedding = null;
355
+ }
356
+ if (queryEmbedding) {
357
+ similarEntries = await findSimilar(ctx, queryEmbedding, threshold, { hydrate: suggestMode });
358
+ }
359
+ }
360
+ if (dry_run) {
361
+ const parts = ['(dry run — nothing saved)'];
362
+ if (similarEntries.length) {
363
+ if (suggestMode) {
364
+ const candidates = buildConflictCandidates(similarEntries);
365
+ parts.push('', '⚠ Similar entries already exist:');
366
+ for (const e of similarEntries) {
367
+ const score = e.score.toFixed(2);
368
+ const titleDisplay = e.title ? `"${e.title}"` : '(no title)';
369
+ parts.push(` - ${titleDisplay} (${score}) — id: ${e.id}`);
370
+ }
371
+ parts.push(formatConflictSuggestions(candidates));
372
+ parts.push('', 'Use save_context with `id: <existing>` to update one, or omit `dry_run` to save as new.');
373
+ }
374
+ else {
375
+ parts.push('', '⚠ Similar entries already exist:');
376
+ for (const e of similarEntries) {
377
+ const score = e.score.toFixed(2);
378
+ const titleDisplay = e.title ? `"${e.title}"` : '(no title)';
379
+ parts.push(` - ${titleDisplay} (${score}) — id: ${e.id}`);
380
+ }
381
+ parts.push('', 'Use save_context with `id: <existing>` to update one, or omit `dry_run` to save as new.');
382
+ }
383
+ }
384
+ else {
385
+ parts.push('', 'No similar entries found. Safe to save.');
386
+ }
387
+ return ok(parts.join('\n'));
388
+ }
389
+ const mergedMeta = { ...(meta || {}) };
390
+ if (folder)
391
+ mergedMeta.folder = folder;
392
+ const finalMeta = Object.keys(mergedMeta).length ? mergedMeta : undefined;
393
+ const effectiveTier = tier ?? defaultTierFor(normalizedKind);
394
+ const embeddingToReuse = category === 'knowledge' ? queryEmbedding : null;
395
+ let entry;
396
+ try {
397
+ entry = await captureAndIndex(ctx, {
398
+ kind: normalizedKind,
399
+ title,
400
+ body,
401
+ meta: finalMeta,
402
+ tags,
403
+ source,
404
+ folder,
405
+ identity_key,
406
+ expires_at,
407
+ supersedes,
408
+ related_to,
409
+ source_files,
410
+ tier: effectiveTier,
411
+ }, embeddingToReuse);
412
+ }
413
+ catch (e) {
414
+ return errWithHint(e instanceof Error ? e.message : String(e), 'SAVE_FAILED', 'context-vault save_context is failing. Check `cat ~/.context-mcp/error.log | tail -5` and help me debug.');
415
+ }
416
+ if (ctx.config?.dataDir) {
417
+ maybeShowFeedbackPrompt(ctx.config.dataDir);
418
+ }
419
+ const relPath = entry.filePath
420
+ ? entry.filePath.replace(config.vaultDir + '/', '')
421
+ : entry.filePath;
422
+ const parts = [`✓ Saved ${normalizedKind} → ${relPath}`, ` id: ${entry.id}`];
423
+ if (title)
424
+ parts.push(` title: ${title}`);
425
+ if (tags?.length)
426
+ parts.push(` tags: ${tags.join(', ')}`);
427
+ parts.push(` tier: ${effectiveTier}`);
428
+ parts.push('', '_Use this id to update or delete later._');
429
+ const hasBucketTag = (tags || []).some((t) => typeof t === 'string' && t.startsWith('bucket:'));
430
+ if (tags && tags.length > 0 && !hasBucketTag) {
431
+ parts.push('', '_Tip: Consider adding a `bucket:` tag (e.g., `bucket:myproject`) for project-scoped retrieval._');
432
+ }
433
+ const bucketTags = (tags || []).filter((t) => typeof t === 'string' && t.startsWith('bucket:'));
434
+ for (const bt of bucketTags) {
435
+ const bucketUserClause = '';
436
+ const bucketParams = false ? [bt] : [bt];
437
+ const exists = ctx.db
438
+ .prepare(`SELECT 1 FROM vault WHERE kind = 'bucket' AND identity_key = ? ${bucketUserClause} LIMIT 1`)
439
+ .get(...bucketParams);
440
+ if (!exists) {
441
+ parts.push(``, `_Note: bucket '${bt}' is not registered. Use save_context(kind: "bucket", identity_key: "${bt}") to register it._`);
442
+ }
443
+ }
444
+ if (similarEntries.length) {
445
+ if (suggestMode) {
446
+ const candidates = buildConflictCandidates(similarEntries);
447
+ parts.push(formatSimilarWarning(similarEntries));
448
+ parts.push(formatConflictSuggestions(candidates));
449
+ }
450
+ else {
451
+ parts.push(formatSimilarWarning(similarEntries));
452
+ }
453
+ }
454
+ const criticalLimit = config.thresholds?.totalEntries?.critical;
455
+ if (criticalLimit != null) {
456
+ try {
457
+ const countRow = ctx.db.prepare('SELECT COUNT(*) as c FROM vault').get();
458
+ if (countRow?.c != null && countRow.c >= criticalLimit) {
459
+ parts.push(``, `ℹ Vault has ${countRow.c.toLocaleString()} entries. Consider running \`context-vault reindex\` or reviewing old entries.`);
460
+ }
461
+ }
462
+ catch { }
463
+ }
464
+ return ok(parts.join('\n'));
465
+ }
466
+ //# sourceMappingURL=save-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-context.js","sourceRoot":"","sources":["../../src/tools/save-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAC1C,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAE9B,KAAK,UAAU,WAAW,CACxB,GAAa,EACb,SAAc,EACd,SAAiB,EACjB,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE;IAExB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAI,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAU,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9F,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE9B,MAAM,OAAO,GAAU,GAAG,CAAC,EAAE;aAC1B,OAAO,CACN,+FAA+F,CAChG;aACA,GAAG,CAAC,SAAS,EAAE,EAAE,CAAU,CAAC;QAE/B,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAE/B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrD,mEAAmE;QACnE,MAAM,OAAO,GAAI,GAAG,CAAC,KAAa,CAAC,KAAK,KAAK,OAAO,CAAC;QACrD,MAAM,OAAO,GAAG,OAAO;YACrB,CAAC,CAAC,OAAO;gBACP,CAAC,CAAC,0DAA0D;gBAC5D,CAAC,CAAC,4BAA4B;YAChC,CAAC,CAAC,OAAO;gBACP,CAAC,CAAC,0DAA0D;gBAC5D,CAAC,CAAC,4BAA4B,CAAC;QACnC,MAAM,YAAY,GAAG,GAAG,CAAC,EAAE;aACxB,OAAO,CAAC,UAAU,OAAO,+BAA+B,YAAY,GAAG,CAAC;aACxE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAElB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,YAAY;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAI,EAAE,CAAC,QAAmB,GAAG,CAAC,CAAC,CAAC;YAChE,IAAI,UAAU,GAAG,SAAS;gBAAE,SAAS;YACrC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;gBAAE,SAAS;YACxC,MAAM,KAAK,GAAwB,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;YACvF,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBACtB,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBACtB,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBACtB,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;YACpC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAc;IAC1C,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,kCAAkC,CAAC,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,KAAK,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACnF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,cAAqB;IAC3D,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE;QACvC,IAAI,gBAAgB,CAAC;QACrB,IAAI,iBAAiB,CAAC;QAEtB,IAAI,KAAK,CAAC,KAAK,IAAI,cAAc,EAAE,CAAC;YAClC,gBAAgB,GAAG,MAAM,CAAC;YAC1B,iBAAiB;gBACf,4BAA4B,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;oBACzE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI;oBAClD,uEAAuE;oBACvE,8BAA8B,KAAK,CAAC,EAAE,+CAA+C,CAAC;QAC1F,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,IAAI,gBAAgB,EAAE,CAAC;YAC3C,gBAAgB,GAAG,QAAQ,CAAC;YAC5B,iBAAiB;gBACf,4BAA4B,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;oBAC9D,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI;oBAClD,uFAAuF,KAAK,CAAC,EAAE,IAAI,CAAC;QACxG,CAAC;aAAM,CAAC;YACN,gBAAgB,GAAG,KAAK,CAAC;YACzB,iBAAiB;gBACf,wBAAwB,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;oBAC1D,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI;oBAClD,oDAAoD,CAAC;QACzD,CAAC;QAED,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,UAAU,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YACpF,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU,GAAG,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;YAC1B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;YACxB,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;YACpC,gBAAgB;YAChB,iBAAiB;SAClB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAAC,UAAiB;IAClD,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,uCAAuC,CAAC,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC;QAC7D,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,CAAC,gBAAgB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAC3F,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,EACzB,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,UAAU,GACU;IACpB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACxC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;YAC9D,OAAO,GAAG,CAAC,8BAA8B,eAAe,QAAQ,EAAE,eAAe,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACxC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;YAC9D,OAAO,GAAG,CAAC,8BAA8B,eAAe,GAAG,IAAI,IAAI,EAAE,eAAe,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;YACjE,OAAO,GAAG,CAAC,+BAA+B,gBAAgB,QAAQ,EAAE,eAAe,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,GAAG,CAAC,kCAAkC,EAAE,eAAe,CAAC,CAAC;QAC1F,IAAI,IAAI,CAAC,MAAM,GAAG,cAAc;YAC9B,OAAO,GAAG,CAAC,aAAa,cAAc,eAAe,EAAE,eAAe,CAAC,CAAC;QAC1E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;gBAC3D,OAAO,GAAG,CAAC,kCAAkC,cAAc,QAAQ,EAAE,eAAe,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;YACrC,OAAO,GAAG,CAAC,sBAAsB,eAAe,GAAG,IAAI,oBAAoB,EAAE,eAAe,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC5C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;YACpE,OAAO,GAAG,CAAC,gCAAgC,iBAAiB,QAAQ,EAAE,eAAe,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IACD,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QACxD,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;YACtF,OAAO,GAAG,CACR,sCAAsC,uBAAuB,QAAQ,EACrE,eAAe,CAChB,CAAC;QACJ,CAAC;IACH,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACpD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC5E,OAAO,GAAG,CAAC,4CAA4C,EAAE,eAAe,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,cAAc,CAAC;AAEnC,MAAM,CAAC,MAAM,WAAW,GACtB,oPAAoP,CAAC;AAEvP,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,EAAE,EAAE,CAAC;SACF,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,wHAAwH,CACzH;IACH,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,oIAAoI,CACrI;IACH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC5E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC/E,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,kJAAkJ,CACnJ;IACH,IAAI,EAAE,CAAC;SACJ,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,CACP,2FAA2F,CAC5F;IACH,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,0DAA0D,CAAC;IACvE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACxE,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,oGAAoG,CACrG;IACH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACrE,UAAU,EAAE,CAAC;SACV,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,wLAAwL,CACzL;IACH,UAAU,EAAE,CAAC;SACV,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,yJAAyJ,CAC1J;IACH,YAAY,EAAE,CAAC;SACZ,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACpE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;KACnF,CAAC,CACH;SACA,QAAQ,EAAE;SACV,QAAQ,CACP,mJAAmJ,CACpJ;IACH,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,6JAA6J,CAC9J;IACH,oBAAoB,EAAE,CAAC;SACpB,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CACP,2KAA2K,CAC5K;IACH,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;SACzC,QAAQ,EAAE;SACV,QAAQ,CACP,uMAAuM,CACxM;IACH,mBAAmB,EAAE,CAAC;SACnB,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;SACxB,QAAQ,EAAE;SACV,QAAQ,CACP,uYAAuY,CACxY;CACJ,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,EACE,EAAE,EACF,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,OAAO,EACP,oBAAoB,EACpB,IAAI,EACJ,mBAAmB,GACC,EACtB,GAAa,EACb,EAAE,aAAa,EAAa;IAE5B,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IACvB,MAAM,WAAW,GAAG,mBAAmB,KAAK,KAAK,CAAC;IAElD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,YAAY;QAAE,OAAO,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAE5D,MAAM,QAAQ,GAAG,iBAAiB,CAAC;QACjC,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,YAAY;QACZ,UAAU;KACX,CAAC,CAAC;IACH,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,mDAAmD;IACnD,IAAI,CAAC,EAAE,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;QAChC,MAAM,uBAAuB,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAClD,uBAAuB,EACvB,YAAY,CACN,CAAC;QACT,IAAI,aAAa,EAAE,CAAC;YAClB,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAEzC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ;YAAE,OAAO,GAAG,CAAC,oBAAoB,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QAEjE,IAAI,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClD,OAAO,GAAG,CACR,iCAAiC,QAAQ,CAAC,IAAI,mCAAmC,EACjF,gBAAgB,CACjB,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,IAAI,YAAY,KAAK,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC3D,OAAO,GAAG,CACR,yCAAyC,QAAQ,CAAC,YAAY,mCAAmC,EACjG,gBAAgB,CACjB,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE;gBACrC,KAAK;gBACL,IAAI;gBACJ,IAAI;gBACJ,IAAI;gBACJ,MAAM;gBACN,UAAU;gBACV,UAAU;gBACV,UAAU;gBACV,YAAY;aACb,CAAC,CAAC;YACH,MAAM,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAChB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAC1C,eAAe,EACf,iHAAiH,CAClH,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YAC1D,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;aAAM,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YAClE,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ;YAC5B,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,GAAG,EAAE,EAAE,CAAC;YACnD,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnB,MAAM,KAAK,GAAG,CAAC,aAAa,KAAK,CAAC,IAAI,MAAM,OAAO,EAAE,EAAE,SAAS,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,IAAI,KAAK,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,8CAA8C,CAAC,CAAC;QAC/D,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,oBAAoB;IACpB,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC,kCAAkC,EAAE,eAAe,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC,kCAAkC,EAAE,eAAe,CAAC,CAAC;IAEnF,0EAA0E;IAC1E,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAE3C,IAAI,WAAW,CAAC,cAAc,CAAC,KAAK,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9D,OAAO,GAAG,CAAC,gBAAgB,cAAc,yBAAyB,EAAE,sBAAsB,CAAC,CAAC;IAC9F,CAAC;IAED,gEAAgE;IAChE,0DAA0D;IAC1D,MAAM,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAEzC,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IAC7C,IAAI,cAAc,GAAU,EAAE,CAAC;IAC/B,IAAI,cAAc,GAAQ,IAAI,CAAC;IAE/B,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACrD,MAAM,SAAS,GAAG,oBAAoB,IAAI,4BAA4B,CAAC;QACvE,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,CAAC;YACH,cAAc,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,GAAG,MAAM,WAAW,CAChC,GAAG,EACH,cAAc,EACd,SAAS,EAET,EAAE,OAAO,EAAE,WAAW,EAAE,CACzB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAC5C,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;YAC1B,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,UAAU,GAAG,uBAAuB,CAAC,cAAc,CAAC,CAAC;gBAC3D,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,kCAAkC,CAAC,CAAC;gBACnD,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACjC,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC;oBAC7D,KAAK,CAAC,IAAI,CAAC,OAAO,YAAY,KAAK,KAAK,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7D,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,CAAC;gBAClD,KAAK,CAAC,IAAI,CACR,EAAE,EACF,yFAAyF,CAC1F,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,kCAAkC,CAAC,CAAC;gBACnD,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACjC,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC;oBAC7D,KAAK,CAAC,IAAI,CAAC,OAAO,YAAY,KAAK,KAAK,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7D,CAAC;gBACD,KAAK,CAAC,IAAI,CACR,EAAE,EACF,yFAAyF,CAC1F,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,yCAAyC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;IACvC,IAAI,MAAM;QAAE,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1E,MAAM,aAAa,GAAG,IAAI,IAAI,cAAc,CAAC,cAAc,CAAC,CAAC;IAE7D,MAAM,gBAAgB,GAAG,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;IAE1E,IAAI,KAAK,CAAC;IACV,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,eAAe,CAC3B,GAAG,EACH;YACE,IAAI,EAAE,cAAc;YACpB,KAAK;YACL,IAAI;YACJ,IAAI,EAAE,SAAS;YACf,IAAI;YACJ,MAAM;YACN,MAAM;YACN,YAAY;YACZ,UAAU;YACV,UAAU;YACV,UAAU;YACV,YAAY;YAEZ,IAAI,EAAE,aAAa;SACpB,EACD,gBAAgB,CACjB,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,WAAW,CAChB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAC1C,aAAa,EACb,0GAA0G,CAC3G,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACxB,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ;QAC5B,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,GAAG,EAAE,EAAE,CAAC;QACnD,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;IACnB,MAAM,KAAK,GAAG,CAAC,WAAW,cAAc,MAAM,OAAO,EAAE,EAAE,SAAS,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;IAC3C,IAAI,IAAI,EAAE,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3D,KAAK,CAAC,IAAI,CAAC,WAAW,aAAa,EAAE,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,0CAA0C,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CACpC,CAAC,CAAM,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAC7D,CAAC;IACF,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CACR,EAAE,EACF,iGAAiG,CAClG,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CACpC,CAAC,CAAM,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAC7D,CAAC;IACF,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,gBAAgB,GAAG,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE;aAClB,OAAO,CACN,kEAAkE,gBAAgB,UAAU,CAC7F;aACA,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CACR,EAAE,EACF,kBAAkB,EAAE,wEAAwE,EAAE,qBAAqB,CACpH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,UAAU,GAAG,uBAAuB,CAAC,cAAc,CAAC,CAAC;YAC3D,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,CAAC;IAChE,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,EAAS,CAAC;YAChF,IAAI,QAAQ,EAAE,CAAC,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,IAAI,aAAa,EAAE,CAAC;gBACvD,KAAK,CAAC,IAAI,CACR,EAAE,EACF,eAAe,QAAQ,CAAC,CAAC,CAAC,cAAc,EAAE,gFAAgF,CAC3H,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+ import type { LocalCtx, SharedCtx, ToolResult } from '../types.js';
3
+ export declare const name = "session_start";
4
+ export declare const description = "Auto-assemble a context brief for the current project on session start. Pulls recent entries, last session summary, and active decisions/blockers into a token-budgeted capsule formatted for agent consumption.";
5
+ export declare const inputSchema: {
6
+ project: z.ZodOptional<z.ZodString>;
7
+ max_tokens: z.ZodOptional<z.ZodNumber>;
8
+ buckets: z.ZodOptional<z.ZodArray<z.ZodString>>;
9
+ };
10
+ export declare function handler({ project, max_tokens, buckets }: Record<string, any>, ctx: LocalCtx, { ensureIndexed }: SharedCtx): Promise<ToolResult>;
11
+ //# sourceMappingURL=session-start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-start.d.ts","sourceRoot":"","sources":["../../src/tools/session-start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQnE,eAAO,MAAM,IAAI,kBAAkB,CAAC;AAEpC,eAAO,MAAM,WAAW,qNAC4L,CAAC;AAErN,eAAO,MAAM,WAAW;;;;CAiBvB,CAAC;AA6CF,wBAAsB,OAAO,CAC3B,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACrD,GAAG,EAAE,QAAQ,EACb,EAAE,aAAa,EAAE,EAAE,SAAS,GAC3B,OAAO,CAAC,UAAU,CAAC,CAiHrB"}