@husk-ai/sessions 0.1.1

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 (69) hide show
  1. package/dist/chat.d.ts +11 -0
  2. package/dist/chat.d.ts.map +1 -0
  3. package/dist/chat.js +2 -0
  4. package/dist/chat.js.map +1 -0
  5. package/dist/distill.d.ts +130 -0
  6. package/dist/distill.d.ts.map +1 -0
  7. package/dist/distill.js +773 -0
  8. package/dist/distill.js.map +1 -0
  9. package/dist/distiller.d.ts +18 -0
  10. package/dist/distiller.d.ts.map +1 -0
  11. package/dist/distiller.js +23 -0
  12. package/dist/distiller.js.map +1 -0
  13. package/dist/formatter.d.ts +8 -0
  14. package/dist/formatter.d.ts.map +1 -0
  15. package/dist/formatter.js +11 -0
  16. package/dist/formatter.js.map +1 -0
  17. package/dist/importers/chatgpt.d.ts +12 -0
  18. package/dist/importers/chatgpt.d.ts.map +1 -0
  19. package/dist/importers/chatgpt.js +223 -0
  20. package/dist/importers/chatgpt.js.map +1 -0
  21. package/dist/importers/claude.d.ts +37 -0
  22. package/dist/importers/claude.d.ts.map +1 -0
  23. package/dist/importers/claude.js +512 -0
  24. package/dist/importers/claude.js.map +1 -0
  25. package/dist/importers/cursor.d.ts +12 -0
  26. package/dist/importers/cursor.d.ts.map +1 -0
  27. package/dist/importers/cursor.js +229 -0
  28. package/dist/importers/cursor.js.map +1 -0
  29. package/dist/importers/fsutil.d.ts +22 -0
  30. package/dist/importers/fsutil.d.ts.map +1 -0
  31. package/dist/importers/fsutil.js +79 -0
  32. package/dist/importers/fsutil.js.map +1 -0
  33. package/dist/importers/gemini.d.ts +13 -0
  34. package/dist/importers/gemini.d.ts.map +1 -0
  35. package/dist/importers/gemini.js +228 -0
  36. package/dist/importers/gemini.js.map +1 -0
  37. package/dist/importers/index.d.ts +70 -0
  38. package/dist/importers/index.d.ts.map +1 -0
  39. package/dist/importers/index.js +258 -0
  40. package/dist/importers/index.js.map +1 -0
  41. package/dist/importers/markdown.d.ts +14 -0
  42. package/dist/importers/markdown.d.ts.map +1 -0
  43. package/dist/importers/markdown.js +188 -0
  44. package/dist/importers/markdown.js.map +1 -0
  45. package/dist/importers/universal.d.ts +16 -0
  46. package/dist/importers/universal.d.ts.map +1 -0
  47. package/dist/importers/universal.js +106 -0
  48. package/dist/importers/universal.js.map +1 -0
  49. package/dist/index.d.ts +17 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +16 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/prompts.d.ts +151 -0
  54. package/dist/prompts.d.ts.map +1 -0
  55. package/dist/prompts.js +109 -0
  56. package/dist/prompts.js.map +1 -0
  57. package/dist/redactor.d.ts +38 -0
  58. package/dist/redactor.d.ts.map +1 -0
  59. package/dist/redactor.js +144 -0
  60. package/dist/redactor.js.map +1 -0
  61. package/dist/scaffold.d.ts +40 -0
  62. package/dist/scaffold.d.ts.map +1 -0
  63. package/dist/scaffold.js +0 -0
  64. package/dist/scaffold.js.map +1 -0
  65. package/dist/serialize.d.ts +15 -0
  66. package/dist/serialize.d.ts.map +1 -0
  67. package/dist/serialize.js +122 -0
  68. package/dist/serialize.js.map +1 -0
  69. package/package.json +28 -0
@@ -0,0 +1,512 @@
1
+ import { homedir } from 'node:os';
2
+ import { basename, join, dirname, extname } from 'node:path';
3
+ import { readFile } from 'node:fs/promises';
4
+ import { HuskError, id } from '@husk-ai/core';
5
+ import { isDirectory, listFiles, listDirs } from './fsutil.js';
6
+ import { stripScaffolding } from '../scaffold.js';
7
+ const MESSAGE_TYPES = new Set(['user', 'assistant']);
8
+ function asString(v) {
9
+ return typeof v === 'string' && v.length > 0 ? v : undefined;
10
+ }
11
+ function isRecord(v) {
12
+ return typeof v === 'object' && v !== null && !Array.isArray(v);
13
+ }
14
+ /**
15
+ * Parse JSONL leniently. A half-written final line is normal -- Claude Code is
16
+ * probably still appending to the file we are reading.
17
+ */
18
+ function parseLines(content) {
19
+ const raw = content.split('\n');
20
+ let lastNonEmpty = -1;
21
+ for (let i = raw.length - 1; i >= 0; i--) {
22
+ if ((raw[i] ?? '').trim() !== '') {
23
+ lastNonEmpty = i;
24
+ break;
25
+ }
26
+ }
27
+ const rows = [];
28
+ let unparseable = 0;
29
+ let truncatedTail = false;
30
+ for (let i = 0; i < raw.length; i++) {
31
+ const line = raw[i];
32
+ if (!line || line.trim() === '')
33
+ continue;
34
+ try {
35
+ const parsed = JSON.parse(line);
36
+ if (isRecord(parsed))
37
+ rows.push(parsed);
38
+ else
39
+ unparseable++;
40
+ }
41
+ catch {
42
+ // Only the very last non-empty line can legitimately be a partial write.
43
+ if (i === lastNonEmpty)
44
+ truncatedTail = true;
45
+ else
46
+ unparseable++;
47
+ }
48
+ }
49
+ return { rows, unparseable, truncatedTail };
50
+ }
51
+ function toNode(row) {
52
+ const uuid = asString(row.uuid);
53
+ if (!uuid)
54
+ return undefined;
55
+ const msg = isRecord(row.message) ? row.message : undefined;
56
+ const node = {
57
+ uuid,
58
+ parentUuid: asString(row.parentUuid) ?? null,
59
+ type: asString(row.type) ?? 'unknown',
60
+ isSidechain: row.isSidechain === true,
61
+ isMeta: row.isMeta === true,
62
+ };
63
+ const ts = asString(row.timestamp);
64
+ if (ts)
65
+ node.timestamp = ts;
66
+ const origin = isRecord(row.origin) ? row.origin : undefined;
67
+ const originKind = asString(origin?.kind);
68
+ const rawPromptSource = asString(row.promptSource);
69
+ if (originKind)
70
+ node.originKind = originKind;
71
+ // `origin.kind` is the authoritative discriminator, and `promptSource` alone
72
+ // is not evidence of a human. The harness stamps `promptSource: "sdk"` on the
73
+ // task-notification lines it injects, so treating the field as proof handed
74
+ // the distiller a subagent's completion report as though someone had typed
75
+ // it -- which is how a husk ended up with `<task-notification>` in its
76
+ // system prompt. Fall back to `promptSource` only when there is no `origin`
77
+ // at all, for transcripts written before Claude Code recorded one.
78
+ const human = originKind
79
+ ? originKind === 'human'
80
+ : rawPromptSource !== undefined && rawPromptSource !== 'sdk';
81
+ if (human)
82
+ node.promptSource = rawPromptSource ?? 'human';
83
+ if (msg) {
84
+ const role = asString(msg.role);
85
+ if (role)
86
+ node.role = role;
87
+ node.content = msg.content;
88
+ const model = asString(msg.model);
89
+ if (model)
90
+ node.model = model;
91
+ }
92
+ return node;
93
+ }
94
+ /** Every tool_use id -> tool name seen anywhere in the file, sidechains included. */
95
+ function harvestToolNames(rows) {
96
+ const byId = new Map();
97
+ const mainThreadTools = new Set();
98
+ const sidechainTools = new Set();
99
+ for (const row of rows) {
100
+ const msg = isRecord(row.message) ? row.message : undefined;
101
+ if (!msg || !Array.isArray(msg.content))
102
+ continue;
103
+ for (const part of msg.content) {
104
+ if (!isRecord(part) || part.type !== 'tool_use')
105
+ continue;
106
+ const name = asString(part.name);
107
+ if (!name)
108
+ continue;
109
+ const callId = asString(part.id);
110
+ if (callId)
111
+ byId.set(callId, name);
112
+ if (row.isSidechain === true)
113
+ sidechainTools.add(name);
114
+ else
115
+ mainThreadTools.add(name);
116
+ }
117
+ }
118
+ return { byId, mainThreadTools, sidechainTools };
119
+ }
120
+ /**
121
+ * The path that actually happened.
122
+ *
123
+ * Leaves are ranked by chain length first: a retried turn abandons its branch,
124
+ * and the branch the user kept going down is the longer one. Timestamp breaks
125
+ * ties, which is what "the last leaf" means when nothing was retried.
126
+ */
127
+ function reconstructThread(nodes) {
128
+ const byUuid = new Map();
129
+ for (const n of nodes)
130
+ byUuid.set(n.uuid, n);
131
+ const hasChild = new Set();
132
+ for (const n of nodes)
133
+ if (n.parentUuid && byUuid.has(n.parentUuid))
134
+ hasChild.add(n.parentUuid);
135
+ const leaves = nodes.filter((n) => !hasChild.has(n.uuid));
136
+ if (!leaves.length)
137
+ return { chain: [], leaves: 0 };
138
+ const walk = (leaf) => {
139
+ const out = [];
140
+ const seen = new Set();
141
+ let cur = leaf;
142
+ while (cur && !seen.has(cur.uuid)) {
143
+ seen.add(cur.uuid);
144
+ out.push(cur);
145
+ cur = cur.parentUuid ? byUuid.get(cur.parentUuid) : undefined;
146
+ }
147
+ return out.reverse();
148
+ };
149
+ let best = [];
150
+ let bestTs = '';
151
+ for (const leaf of leaves) {
152
+ const chain = walk(leaf);
153
+ const ts = leaf.timestamp ?? '';
154
+ if (chain.length > best.length || (chain.length === best.length && ts > bestTs)) {
155
+ best = chain;
156
+ bestTs = ts;
157
+ }
158
+ }
159
+ return { chain: best, leaves: leaves.length };
160
+ }
161
+ function stringifyToolResult(content) {
162
+ if (typeof content === 'string')
163
+ return content;
164
+ if (Array.isArray(content)) {
165
+ return content
166
+ .map((part) => {
167
+ if (typeof part === 'string')
168
+ return part;
169
+ if (!isRecord(part))
170
+ return '';
171
+ if (part.type === 'text')
172
+ return asString(part.text) ?? '';
173
+ if (part.type === 'image') {
174
+ const src = isRecord(part.source) ? part.source : undefined;
175
+ return `[image: ${asString(src?.media_type) ?? 'unknown'}]`;
176
+ }
177
+ if (part.type === 'tool_reference')
178
+ return `[tool reference: ${asString(part.name) ?? '?'}]`;
179
+ return JSON.stringify(part);
180
+ })
181
+ .filter((s) => s !== '')
182
+ .join('\n');
183
+ }
184
+ if (content === undefined || content === null)
185
+ return '';
186
+ try {
187
+ return JSON.stringify(content);
188
+ }
189
+ catch {
190
+ return String(content);
191
+ }
192
+ }
193
+ /**
194
+ * Cut harness plumbing out of one turn's prose.
195
+ *
196
+ * Returns undefined when nothing survives, which means the turn was pure
197
+ * scaffolding and should never have been a message in the first place.
198
+ */
199
+ function clean(text, tally) {
200
+ const trimmed = text.trim();
201
+ if (!trimmed)
202
+ return undefined;
203
+ const stripped = stripScaffolding(trimmed).trim();
204
+ if (stripped === trimmed)
205
+ return trimmed;
206
+ if (!stripped) {
207
+ tally.dropped++;
208
+ return undefined;
209
+ }
210
+ tally.stripped++;
211
+ return stripped;
212
+ }
213
+ /** One chain node becomes zero or more transcript messages. */
214
+ function emit(node, toolNames, tally) {
215
+ if (!MESSAGE_TYPES.has(node.type) || node.content === undefined)
216
+ return [];
217
+ const ts = node.timestamp;
218
+ const out = [];
219
+ const role = node.role === 'assistant' ? 'assistant' : 'user';
220
+ // isMeta turns are injected, not spoken: image placeholders, loaded skill
221
+ // documents, hook output. Claude Code flags them; the distiller must not read
222
+ // a pasted-in skill file as something the user asked for.
223
+ if (node.isMeta)
224
+ return [];
225
+ // Only a turn a human submitted carries promptSource / origin.kind.
226
+ const human = node.promptSource ? { promptSource: node.promptSource } : undefined;
227
+ if (typeof node.content === 'string') {
228
+ const text = clean(node.content, tally);
229
+ if (!text)
230
+ return [];
231
+ out.push({ role, content: text, ...(ts ? { ts } : {}), ...(human ? { meta: human } : {}) });
232
+ return out;
233
+ }
234
+ if (!Array.isArray(node.content))
235
+ return [];
236
+ const textChunks = [];
237
+ let thinkingBlocks = 0;
238
+ const flushText = () => {
239
+ const joined = clean(textChunks.join('\n\n'), tally);
240
+ textChunks.length = 0;
241
+ if (!joined)
242
+ return;
243
+ const msg = { role, content: joined, ...(ts ? { ts } : {}) };
244
+ if (thinkingBlocks || human)
245
+ msg.meta = { ...(human ?? {}), ...(thinkingBlocks ? { thinkingBlocks } : {}) };
246
+ out.push(msg);
247
+ };
248
+ for (const part of node.content) {
249
+ if (typeof part === 'string') {
250
+ textChunks.push(part);
251
+ continue;
252
+ }
253
+ if (!isRecord(part))
254
+ continue;
255
+ switch (part.type) {
256
+ case 'text': {
257
+ const t = asString(part.text);
258
+ if (t)
259
+ textChunks.push(t);
260
+ break;
261
+ }
262
+ case 'thinking':
263
+ case 'redacted_thinking': {
264
+ // Reasoning is not the answer, and its signature is provider-internal.
265
+ thinkingBlocks++;
266
+ break;
267
+ }
268
+ case 'image': {
269
+ const src = isRecord(part.source) ? part.source : undefined;
270
+ textChunks.push(`[image: ${asString(src?.media_type) ?? 'unknown'}]`);
271
+ break;
272
+ }
273
+ case 'tool_use': {
274
+ flushText();
275
+ const name = asString(part.name) ?? 'unknown';
276
+ const callId = asString(part.id);
277
+ out.push({
278
+ role: 'assistant',
279
+ content: `[tool: ${name}]`,
280
+ ...(ts ? { ts } : {}),
281
+ toolName: name,
282
+ toolInput: part.input,
283
+ ...(callId ? { meta: { toolUseId: callId } } : {}),
284
+ });
285
+ break;
286
+ }
287
+ case 'tool_result': {
288
+ flushText();
289
+ const callId = asString(part.tool_use_id);
290
+ const name = callId ? toolNames.get(callId) : undefined;
291
+ out.push({
292
+ role: 'tool',
293
+ // Stripped but never dropped: an empty result still has to stay
294
+ // paired with the tool_use that produced it.
295
+ content: stripScaffolding(stringifyToolResult(part.content)),
296
+ ...(ts ? { ts } : {}),
297
+ ...(name ? { toolName: name } : {}),
298
+ meta: {
299
+ ...(callId ? { toolUseId: callId } : {}),
300
+ ...(part.is_error === true ? { isError: true } : {}),
301
+ },
302
+ });
303
+ break;
304
+ }
305
+ default:
306
+ break;
307
+ }
308
+ }
309
+ flushText();
310
+ return out;
311
+ }
312
+ /**
313
+ * Parse one Claude Code JSONL document. Exported so tests and `discover()` can
314
+ * use it without touching the filesystem.
315
+ */
316
+ export function parseClaudeJsonl(content, origin) {
317
+ const { rows, unparseable, truncatedTail } = parseLines(content);
318
+ if (!rows.length)
319
+ return undefined;
320
+ const { byId: toolNames, mainThreadTools, sidechainTools } = harvestToolNames(rows);
321
+ const allNodes = [];
322
+ let aiTitle;
323
+ let customTitle;
324
+ let sessionId;
325
+ let cwd;
326
+ let gitBranch;
327
+ let version;
328
+ let sidechainLines = 0;
329
+ const models = new Map();
330
+ for (const row of rows) {
331
+ const t = asString(row.type);
332
+ if (t === 'ai-title')
333
+ aiTitle = asString(row.aiTitle) ?? aiTitle;
334
+ else if (t === 'custom-title')
335
+ customTitle = asString(row.customTitle) ?? customTitle;
336
+ else if (t === 'summary')
337
+ aiTitle = aiTitle ?? asString(row.summary);
338
+ sessionId = sessionId ?? asString(row.sessionId);
339
+ cwd = cwd ?? asString(row.cwd);
340
+ gitBranch = gitBranch ?? asString(row.gitBranch);
341
+ version = asString(row.version) ?? version;
342
+ if (row.isSidechain === true)
343
+ sidechainLines++;
344
+ const node = toNode(row);
345
+ if (!node)
346
+ continue;
347
+ if (node.model)
348
+ models.set(node.model, (models.get(node.model) ?? 0) + 1);
349
+ allNodes.push(node);
350
+ }
351
+ // Subagent traffic is a different conversation. It stays out of the thread,
352
+ // but its tool names still describe what the resulting bot has to be able to do.
353
+ const mainNodes = allNodes.filter((n) => !n.isSidechain);
354
+ const { chain } = reconstructThread(mainNodes);
355
+ const messages = [];
356
+ const tally = { stripped: 0, dropped: 0 };
357
+ for (const node of chain)
358
+ messages.push(...emit(node, toolNames, tally));
359
+ const chainMessageNodes = chain.filter((n) => MESSAGE_TYPES.has(n.type)).length;
360
+ const totalMessageNodes = mainNodes.filter((n) => MESSAGE_TYPES.has(n.type)).length;
361
+ const timestamps = chain.map((n) => n.timestamp).filter((t) => !!t);
362
+ const topModel = [...models.entries()].sort((a, b) => b[1] - a[1])[0]?.[0];
363
+ const title = customTitle ??
364
+ aiTitle ??
365
+ messages.find((m) => m.role === 'user')?.content.slice(0, 80).replace(/\s+/g, ' ').trim();
366
+ const transcript = {
367
+ id: sessionId ?? (origin ? basename(origin, extname(origin)) : id('claude')),
368
+ source: 'claude-code',
369
+ messages,
370
+ ...(title ? { title } : {}),
371
+ ...(timestamps.length
372
+ ? { createdAt: timestamps[0], updatedAt: timestamps[timestamps.length - 1] }
373
+ : {}),
374
+ ...(origin ? { origin } : {}),
375
+ meta: {
376
+ ...(cwd ? { cwd } : {}),
377
+ ...(gitBranch ? { gitBranch } : {}),
378
+ ...(version ? { claudeCodeVersion: version } : {}),
379
+ ...(topModel ? { model: topModel } : {}),
380
+ tools: [...mainThreadTools].sort(),
381
+ ...(sidechainTools.size ? { sidechainTools: [...sidechainTools].sort() } : {}),
382
+ },
383
+ };
384
+ return {
385
+ transcript,
386
+ stats: {
387
+ lines: rows.length,
388
+ unparseable,
389
+ truncatedTail,
390
+ nodes: mainNodes.length,
391
+ chainLength: chain.length,
392
+ branchesDropped: Math.max(0, totalMessageNodes - chainMessageNodes),
393
+ sidechainLines,
394
+ scaffoldingStripped: tally.stripped,
395
+ scaffoldingDropped: tally.dropped,
396
+ },
397
+ };
398
+ }
399
+ /** Newer Claude Code writes subagent transcripts to `<sessionId>/subagents/*.jsonl`. */
400
+ async function siblingSubagentTools(filePath) {
401
+ const sessionDir = join(dirname(filePath), basename(filePath, extname(filePath)), 'subagents');
402
+ const files = await listFiles(sessionDir, '.jsonl');
403
+ const names = new Set();
404
+ for (const f of files.slice(0, 64)) {
405
+ try {
406
+ const { rows } = parseLines(await readFile(f, 'utf8'));
407
+ const harvested = harvestToolNames(rows);
408
+ for (const n of harvested.sidechainTools)
409
+ names.add(n);
410
+ for (const n of harvested.mainThreadTools)
411
+ names.add(n);
412
+ }
413
+ catch {
414
+ // A subagent log we cannot read is not a reason to fail the import.
415
+ }
416
+ }
417
+ return [...names].sort();
418
+ }
419
+ export class ClaudeCodeImporter {
420
+ id = 'claude-code';
421
+ displayName = 'Claude Code';
422
+ async detect(input) {
423
+ try {
424
+ const path = input.path?.replace(/\\/g, '/').toLowerCase();
425
+ let score = 0;
426
+ if (path?.includes('/.claude/projects/'))
427
+ score = 0.7;
428
+ else if (path?.endsWith('.jsonl'))
429
+ score = 0.35;
430
+ const probe = input.content?.slice(0, 64 * 1024);
431
+ if (probe) {
432
+ const markers = [
433
+ /"parentUuid"\s*:/,
434
+ /"isSidechain"\s*:/,
435
+ /"type"\s*:\s*"(assistant|user)"/,
436
+ /"toolUseResult"/,
437
+ /"type"\s*:\s*"(ai-title|last-prompt|permission-mode)"/,
438
+ /"sessionId"\s*:/,
439
+ ].filter((re) => re.test(probe)).length;
440
+ if (markers >= 3)
441
+ score = Math.max(score, 0.97);
442
+ else if (markers === 2)
443
+ score = Math.max(score, 0.6);
444
+ else if (markers === 1)
445
+ score = Math.max(score, 0.2);
446
+ }
447
+ return score;
448
+ }
449
+ catch {
450
+ return 0;
451
+ }
452
+ }
453
+ async parse(input) {
454
+ if (input.content !== undefined) {
455
+ const parsed = parseClaudeJsonl(input.content, input.path);
456
+ return parsed && parsed.transcript.messages.length ? [attachStats(parsed)] : [];
457
+ }
458
+ if (!input.path) {
459
+ throw new HuskError('E_IMPORT_FAILED', 'Claude Code import needs a path or content.', {
460
+ hint: 'Pass { path } pointing at a .jsonl file or a directory, or pass { content }.',
461
+ });
462
+ }
463
+ const files = (await isDirectory(input.path))
464
+ ? await listFiles(input.path, '.jsonl')
465
+ : [input.path];
466
+ const out = [];
467
+ for (const file of files) {
468
+ let content;
469
+ try {
470
+ content = await readFile(file, 'utf8');
471
+ }
472
+ catch (cause) {
473
+ throw new HuskError('E_IMPORT_FAILED', `Cannot read ${file}.`, {
474
+ hint: 'Check the path exists and is readable.',
475
+ cause,
476
+ });
477
+ }
478
+ const parsed = parseClaudeJsonl(content, file);
479
+ if (!parsed || !parsed.transcript.messages.length)
480
+ continue;
481
+ const extra = await siblingSubagentTools(file);
482
+ if (extra.length) {
483
+ const meta = parsed.transcript.meta ?? {};
484
+ const known = new Set(Array.isArray(meta.sidechainTools) ? meta.sidechainTools : []);
485
+ for (const n of extra)
486
+ known.add(n);
487
+ parsed.transcript.meta = { ...meta, sidechainTools: [...known].sort() };
488
+ }
489
+ out.push(attachStats(parsed));
490
+ }
491
+ return out;
492
+ }
493
+ defaultLocations() {
494
+ const configDir = process.env.CLAUDE_CONFIG_DIR;
495
+ const roots = configDir
496
+ ? configDir.split(process.platform === 'win32' ? ';' : ':').filter(Boolean)
497
+ : [join(homedir(), '.claude'), join(homedir(), '.config', 'claude')];
498
+ return roots.map((r) => join(r, 'projects'));
499
+ }
500
+ /** Every per-project directory under the Claude projects root. */
501
+ async projectDirs() {
502
+ const out = [];
503
+ for (const root of this.defaultLocations())
504
+ out.push(...(await listDirs(root)));
505
+ return out;
506
+ }
507
+ }
508
+ function attachStats(parsed) {
509
+ parsed.transcript.meta = { ...(parsed.transcript.meta ?? {}), parse: parsed.stats };
510
+ return parsed.transcript;
511
+ }
512
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/importers/claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ImportInput, Transcript, TranscriptImporter } from '@husk-ai/core';
2
+ export declare class CursorImporter implements TranscriptImporter {
3
+ readonly id: "cursor";
4
+ readonly displayName = "Cursor chat";
5
+ detect(input: {
6
+ path?: string;
7
+ content?: string;
8
+ }): Promise<number>;
9
+ parse(input: ImportInput): Promise<Transcript[]>;
10
+ defaultLocations(): string[];
11
+ }
12
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/importers/cursor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAqB,MAAM,eAAe,CAAC;AA8JpG,qBAAa,cAAe,YAAW,kBAAkB;IACvD,QAAQ,CAAC,EAAE,EAAG,QAAQ,CAAU;IAChC,QAAQ,CAAC,WAAW,iBAAiB;IAE/B,MAAM,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBnE,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA8BtD,gBAAgB,IAAI,MAAM,EAAE;CAW7B"}