@mmnto/cli 1.7.0 → 1.7.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 (37) hide show
  1. package/dist/commands/describe.d.ts +4 -0
  2. package/dist/commands/describe.d.ts.map +1 -0
  3. package/dist/commands/describe.js +37 -0
  4. package/dist/commands/describe.js.map +1 -0
  5. package/dist/commands/describe.test.d.ts +2 -0
  6. package/dist/commands/describe.test.d.ts.map +1 -0
  7. package/dist/commands/describe.test.js +146 -0
  8. package/dist/commands/describe.test.js.map +1 -0
  9. package/dist/commands/handoff.d.ts +37 -0
  10. package/dist/commands/handoff.d.ts.map +1 -1
  11. package/dist/commands/handoff.js +177 -0
  12. package/dist/commands/handoff.js.map +1 -1
  13. package/dist/commands/handoff.test.js +262 -2
  14. package/dist/commands/handoff.test.js.map +1 -1
  15. package/dist/hooks/__tests__/auto-context.test.d.ts +2 -0
  16. package/dist/hooks/__tests__/auto-context.test.d.ts.map +1 -0
  17. package/dist/hooks/__tests__/auto-context.test.js +155 -0
  18. package/dist/hooks/__tests__/auto-context.test.js.map +1 -0
  19. package/dist/hooks/auto-context.d.ts +26 -0
  20. package/dist/hooks/auto-context.d.ts.map +1 -0
  21. package/dist/hooks/auto-context.js +164 -0
  22. package/dist/hooks/auto-context.js.map +1 -0
  23. package/dist/index.js +12 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/schemas/handoff-checkpoint.d.ts +34 -0
  26. package/dist/schemas/handoff-checkpoint.d.ts.map +1 -0
  27. package/dist/schemas/handoff-checkpoint.js +13 -0
  28. package/dist/schemas/handoff-checkpoint.js.map +1 -0
  29. package/dist/schemas/handoff-checkpoint.test.d.ts +2 -0
  30. package/dist/schemas/handoff-checkpoint.test.d.ts.map +1 -0
  31. package/dist/schemas/handoff-checkpoint.test.js +65 -0
  32. package/dist/schemas/handoff-checkpoint.test.js.map +1 -0
  33. package/dist/utils.d.ts +2 -5
  34. package/dist/utils.d.ts.map +1 -1
  35. package/dist/utils.js +3 -6
  36. package/dist/utils.js.map +1 -1
  37. package/package.json +2 -2
@@ -1,9 +1,10 @@
1
1
  import * as fs from 'node:fs';
2
2
  import * as os from 'node:os';
3
3
  import * as path from 'node:path';
4
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5
+ import { HandoffCheckpointSchema } from '../schemas/handoff-checkpoint.js';
5
6
  import { cleanTmpDir } from '../test-utils.js';
6
- import { buildLiteHandoff, readRecentLessons } from './handoff.js';
7
+ import { buildLiteHandoff, gatherDeterministicState, parseSemanticFields, readRecentLessons, resolveCheckpointPath, writeCheckpoint, } from './handoff.js';
7
8
  describe('readRecentLessons', () => {
8
9
  let tmpDir;
9
10
  const totemDir = '.totem';
@@ -79,4 +80,263 @@ describe('buildLiteHandoff', () => {
79
80
  expect(output).toContain('abc1234 initial commit');
80
81
  });
81
82
  });
83
+ // ─── gatherDeterministicState ───────────────────────
84
+ vi.mock('../git.js', async (importOriginal) => {
85
+ const actual = (await importOriginal());
86
+ return {
87
+ ...actual,
88
+ getGitBranch: vi.fn().mockReturnValue('main'),
89
+ getGitStatus: vi.fn().mockReturnValue(''),
90
+ };
91
+ });
92
+ describe('gatherDeterministicState', () => {
93
+ let mockGetGitBranch;
94
+ let mockGetGitStatus;
95
+ beforeEach(async () => {
96
+ const git = await import('../git.js');
97
+ mockGetGitBranch = git.getGitBranch;
98
+ mockGetGitStatus = git.getGitStatus;
99
+ });
100
+ afterEach(() => {
101
+ vi.restoreAllMocks();
102
+ });
103
+ it('extracts active files from git status safely handling detached HEAD', async () => {
104
+ mockGetGitBranch.mockImplementation(() => {
105
+ throw new Error('not a git repository');
106
+ });
107
+ mockGetGitStatus.mockReturnValue(' M src/foo.ts\n?? src/bar.ts\nA src/baz.ts');
108
+ const result = await gatherDeterministicState('/tmp/test');
109
+ expect(result.branch).toBe('HEAD');
110
+ expect(result.active_files).toContain('src/foo.ts');
111
+ expect(result.active_files).toContain('src/bar.ts');
112
+ expect(result.active_files).toContain('src/baz.ts');
113
+ expect(result.active_files).toHaveLength(3);
114
+ });
115
+ it('extracts active files from normal branch', async () => {
116
+ mockGetGitBranch.mockReturnValue('feat/checkpoint');
117
+ mockGetGitStatus.mockReturnValue(' M src/app.ts\n?? README.md');
118
+ const result = await gatherDeterministicState('/tmp/test');
119
+ expect(result.branch).toBe('feat/checkpoint');
120
+ expect(result.active_files).toEqual(['README.md', 'src/app.ts']);
121
+ });
122
+ it('returns empty active_files when working tree is clean', async () => {
123
+ mockGetGitBranch.mockReturnValue('main');
124
+ mockGetGitStatus.mockReturnValue('');
125
+ const result = await gatherDeterministicState('/tmp/test');
126
+ expect(result.active_files).toEqual([]);
127
+ });
128
+ it('sets checkpoint_version to 1 and timestamp is valid ISO', async () => {
129
+ mockGetGitBranch.mockReturnValue('main');
130
+ mockGetGitStatus.mockReturnValue('');
131
+ const result = await gatherDeterministicState('/tmp/test');
132
+ expect(result.checkpoint_version).toBe(1);
133
+ const parsed = new Date(result.timestamp);
134
+ expect(parsed.toISOString()).toBe(result.timestamp);
135
+ expect(result.open_prs).toEqual([]);
136
+ });
137
+ it('strips C-style quotes from paths with spaces', async () => {
138
+ mockGetGitBranch.mockReturnValue('main');
139
+ mockGetGitStatus.mockReturnValue(' M "src/my file.ts"\n?? "docs/read me.md"');
140
+ const result = await gatherDeterministicState('/tmp/test');
141
+ expect(result.active_files).toEqual(['docs/read me.md', 'src/my file.ts']);
142
+ });
143
+ it('falls back to HEAD when getGitBranch returns empty string', async () => {
144
+ mockGetGitBranch.mockReturnValue('');
145
+ mockGetGitStatus.mockReturnValue('');
146
+ const result = await gatherDeterministicState('/tmp/test');
147
+ expect(result.branch).toBe('HEAD');
148
+ });
149
+ it('falls back to HEAD when getGitBranch returns (unknown)', async () => {
150
+ mockGetGitBranch.mockReturnValue('(unknown)');
151
+ mockGetGitStatus.mockReturnValue('');
152
+ const result = await gatherDeterministicState('/tmp/test');
153
+ expect(result.branch).toBe('HEAD');
154
+ });
155
+ });
156
+ // ─── parseSemanticFields (Task 3) ───────────────────
157
+ describe('parseSemanticFields', () => {
158
+ it('extracts sections from markdown', () => {
159
+ const markdown = [
160
+ '### Branch & State',
161
+ 'feat/test; dirty working tree.',
162
+ '',
163
+ '### What Was Done',
164
+ '- Implemented the schema validation',
165
+ '- Added unit tests for the parser',
166
+ '',
167
+ '### Uncommitted Changes',
168
+ '- Modified handoff.ts with new logic',
169
+ '',
170
+ '### Lessons & Traps',
171
+ '- Always validate with Zod before writing',
172
+ '- Watch out for Windows path separators',
173
+ '',
174
+ '### Next Steps',
175
+ '1. Wire up the atomic file writer',
176
+ '2. Add integration tests',
177
+ '3. Run the full test suite',
178
+ ].join('\n');
179
+ const result = parseSemanticFields(markdown);
180
+ expect(result.completed).toEqual([
181
+ 'Implemented the schema validation',
182
+ 'Added unit tests for the parser',
183
+ ]);
184
+ expect(result.remaining).toEqual([
185
+ 'Wire up the atomic file writer',
186
+ 'Add integration tests',
187
+ 'Run the full test suite',
188
+ ]);
189
+ expect(result.context_hints).toEqual([
190
+ 'Always validate with Zod before writing',
191
+ 'Watch out for Windows path separators',
192
+ ]);
193
+ expect(result.pending_decisions).toEqual(['Modified handoff.ts with new logic']);
194
+ });
195
+ it('returns empty arrays for malformed input', () => {
196
+ const empty = parseSemanticFields('');
197
+ expect(empty.completed).toEqual([]);
198
+ expect(empty.remaining).toEqual([]);
199
+ expect(empty.pending_decisions).toEqual([]);
200
+ expect(empty.context_hints).toEqual([]);
201
+ const garbage = parseSemanticFields('foo bar baz\nno headings here\n!!!');
202
+ expect(garbage.completed).toEqual([]);
203
+ expect(garbage.remaining).toEqual([]);
204
+ expect(garbage.pending_decisions).toEqual([]);
205
+ expect(garbage.context_hints).toEqual([]);
206
+ });
207
+ it('handles ## headings as well as ###', () => {
208
+ const markdown = [
209
+ '## What Was Done',
210
+ '- Finished the feature',
211
+ '',
212
+ '## Next Steps',
213
+ '- Deploy to staging',
214
+ ].join('\n');
215
+ const result = parseSemanticFields(markdown);
216
+ expect(result.completed).toEqual(['Finished the feature']);
217
+ expect(result.remaining).toEqual(['Deploy to staging']);
218
+ });
219
+ it('handles non-bullet content lines', () => {
220
+ const markdown = ['### What Was Done', 'Implemented the schema.', 'Added tests.'].join('\n');
221
+ const result = parseSemanticFields(markdown);
222
+ expect(result.completed).toEqual(['Implemented the schema.', 'Added tests.']);
223
+ });
224
+ });
225
+ // ─── Lite mode checkpoint (Task 3) ──────────────────
226
+ describe('lite mode checkpoint', () => {
227
+ it('bypasses LLM execution when lite flag is provided and returns empty semantic arrays', async () => {
228
+ const git = await import('../git.js');
229
+ const mockBranch = git.getGitBranch;
230
+ const mockStatus = git.getGitStatus;
231
+ mockBranch.mockReturnValue('feat/lite-test');
232
+ mockStatus.mockReturnValue(' M src/foo.ts');
233
+ const state = await gatherDeterministicState('/tmp/test');
234
+ const checkpoint = HandoffCheckpointSchema.parse(state);
235
+ expect(checkpoint.checkpoint_version).toBe(1);
236
+ expect(checkpoint.branch).toBe('feat/lite-test');
237
+ expect(checkpoint.active_files).toEqual(['src/foo.ts']);
238
+ expect(checkpoint.completed).toEqual([]);
239
+ expect(checkpoint.remaining).toEqual([]);
240
+ expect(checkpoint.pending_decisions).toEqual([]);
241
+ expect(checkpoint.context_hints).toEqual([]);
242
+ });
243
+ });
244
+ // ─── writeCheckpoint & resolveCheckpointPath (Task 4) ───
245
+ describe('writeCheckpoint', () => {
246
+ let tmpDir;
247
+ beforeEach(() => {
248
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-checkpoint-'));
249
+ });
250
+ afterEach(() => {
251
+ cleanTmpDir(tmpDir);
252
+ });
253
+ it('writes checkpoint json atomically alongside markdown', () => {
254
+ const mdPath = path.join(tmpDir, 'handoff.md');
255
+ const jsonPath = path.join(tmpDir, 'handoff.json');
256
+ fs.writeFileSync(mdPath, '### Branch & State\nmain; clean.', 'utf-8');
257
+ const checkpoint = HandoffCheckpointSchema.parse({
258
+ checkpoint_version: 1,
259
+ timestamp: new Date().toISOString(),
260
+ branch: 'main',
261
+ active_files: ['src/app.ts'],
262
+ completed: ['Implemented feature X'],
263
+ remaining: ['Add tests'],
264
+ });
265
+ writeCheckpoint(jsonPath, checkpoint);
266
+ expect(fs.existsSync(mdPath)).toBe(true);
267
+ expect(fs.existsSync(jsonPath)).toBe(true);
268
+ const raw = JSON.parse(fs.readFileSync(jsonPath, 'utf-8'));
269
+ const parsed = HandoffCheckpointSchema.parse(raw);
270
+ expect(parsed.branch).toBe('main');
271
+ expect(parsed.active_files).toEqual(['src/app.ts']);
272
+ expect(parsed.completed).toEqual(['Implemented feature X']);
273
+ expect(parsed.remaining).toEqual(['Add tests']);
274
+ expect(fs.existsSync(jsonPath + '.tmp')).toBe(false);
275
+ });
276
+ it('creates parent directories if they do not exist', () => {
277
+ const nested = path.join(tmpDir, 'deep', 'nested');
278
+ const jsonPath = path.join(nested, 'checkpoint.json');
279
+ const checkpoint = HandoffCheckpointSchema.parse({
280
+ checkpoint_version: 1,
281
+ timestamp: new Date().toISOString(),
282
+ branch: 'main',
283
+ active_files: [],
284
+ });
285
+ writeCheckpoint(jsonPath, checkpoint);
286
+ expect(fs.existsSync(jsonPath)).toBe(true);
287
+ });
288
+ it('writes checkpoint to .totem/handoff.json when no --out specified', () => {
289
+ const totemDir = path.join(tmpDir, '.totem');
290
+ fs.mkdirSync(totemDir, { recursive: true });
291
+ const jsonPath = resolveCheckpointPath(tmpDir, '.totem');
292
+ expect(jsonPath).toBe(path.join(tmpDir, '.totem', 'handoff.json'));
293
+ const checkpoint = HandoffCheckpointSchema.parse({
294
+ checkpoint_version: 1,
295
+ timestamp: new Date().toISOString(),
296
+ branch: 'feat/no-out',
297
+ active_files: ['src/index.ts'],
298
+ completed: ['Setup project'],
299
+ });
300
+ writeCheckpoint(jsonPath, checkpoint);
301
+ expect(fs.existsSync(jsonPath)).toBe(true);
302
+ const raw = JSON.parse(fs.readFileSync(jsonPath, 'utf-8'));
303
+ const parsed = HandoffCheckpointSchema.parse(raw);
304
+ expect(parsed.branch).toBe('feat/no-out');
305
+ expect(parsed.active_files).toEqual(['src/index.ts']);
306
+ });
307
+ });
308
+ // ─── resolveCheckpointPath ──────────────────────────
309
+ describe('resolveCheckpointPath', () => {
310
+ let tmpDir;
311
+ beforeEach(() => {
312
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-resolve-'));
313
+ });
314
+ afterEach(() => {
315
+ cleanTmpDir(tmpDir);
316
+ });
317
+ it('returns .json companion when --out has .md extension', () => {
318
+ const result = resolveCheckpointPath(tmpDir, '.totem', '/some/path/handoff.md');
319
+ expect(result).toBe('/some/path/handoff.json');
320
+ });
321
+ it('returns .json companion when --out has no extension', () => {
322
+ const result = resolveCheckpointPath(tmpDir, '.totem', '/some/path/handoff');
323
+ expect(result).toBe('/some/path/handoff.json');
324
+ });
325
+ it('returns totemDir/handoff.json when no --out', () => {
326
+ const result = resolveCheckpointPath(tmpDir, '.totem');
327
+ expect(result).toBe(path.join(tmpDir, '.totem', 'handoff.json'));
328
+ });
329
+ it('uses custom totemDir when configured', () => {
330
+ const result = resolveCheckpointPath(tmpDir, '.governance');
331
+ expect(result).toBe(path.join(tmpDir, '.governance', 'handoff.json'));
332
+ });
333
+ it('replaces .txt extension with .json', () => {
334
+ const result = resolveCheckpointPath(tmpDir, '.totem', '/output/report.txt');
335
+ expect(result).toBe('/output/report.json');
336
+ });
337
+ it('avoids collision when --out already ends in .json', () => {
338
+ const result = resolveCheckpointPath(tmpDir, '.totem', '/output/handoff.json');
339
+ expect(result).toBe('/output/handoff.checkpoint.json');
340
+ });
341
+ });
82
342
  //# sourceMappingURL=handoff.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handoff.test.js","sourceRoot":"","sources":["../../src/commands/handoff.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handoff.test.js","sourceRoot":"","sources":["../../src/commands/handoff.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=auto-context.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-context.test.d.ts","sourceRoot":"","sources":["../../../src/hooks/__tests__/auto-context.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,155 @@
1
+ import * as fs from 'node:fs';
2
+ import * as os from 'node:os';
3
+ import * as path from 'node:path';
4
+ import { describe, expect, it } from 'vitest';
5
+ import { getAutoContext, parseBranch, truncateResults } from '../auto-context.js';
6
+ // ─── Branch Parsing ───────────────────────────────────────
7
+ describe('parseBranch', () => {
8
+ it('extracts ticket number from feature branch', () => {
9
+ const result = parseBranch('feat/1095-session-start-v2');
10
+ expect(result.ticket).toBe('1095');
11
+ expect(result.query).toContain('1095');
12
+ expect(result.query).toContain('session');
13
+ });
14
+ it('extracts ticket from fix branch', () => {
15
+ const result = parseBranch('fix/894-compile-progress');
16
+ expect(result.ticket).toBe('894');
17
+ expect(result.query).toContain('894');
18
+ });
19
+ it('handles branch with no ticket number', () => {
20
+ const result = parseBranch('fix/login-bug');
21
+ expect(result.ticket).toBeNull();
22
+ expect(result.query).toBe('login bug');
23
+ });
24
+ it('returns fallback for main', () => {
25
+ const result = parseBranch('main');
26
+ expect(result.ticket).toBeNull();
27
+ expect(result.query).toBe('project overview');
28
+ });
29
+ it('returns fallback for master', () => {
30
+ const result = parseBranch('master');
31
+ expect(result.ticket).toBeNull();
32
+ expect(result.query).toBe('project overview');
33
+ });
34
+ it('returns fallback for develop', () => {
35
+ const result = parseBranch('develop');
36
+ expect(result.ticket).toBeNull();
37
+ expect(result.query).toBe('project overview');
38
+ });
39
+ it('handles bare ticket number branch', () => {
40
+ const result = parseBranch('1095-direct');
41
+ expect(result.ticket).toBe('1095');
42
+ expect(result.query).toBe('1095 direct');
43
+ });
44
+ it('handles empty string', () => {
45
+ const result = parseBranch('');
46
+ expect(result.ticket).toBeNull();
47
+ expect(result.query).toBe('project overview');
48
+ });
49
+ it('strips prefix and converts delimiters to spaces', () => {
50
+ const result = parseBranch('chore/update_deps-and-stuff');
51
+ expect(result.query).toBe('update deps and stuff');
52
+ });
53
+ });
54
+ // ─── Budget Truncation ────────────────────────────────────
55
+ function fakeResult(label, contentLength) {
56
+ return {
57
+ content: 'x'.repeat(contentLength),
58
+ contextPrefix: '',
59
+ filePath: 'test.ts',
60
+ type: 'code',
61
+ label,
62
+ score: 0.95,
63
+ metadata: {},
64
+ };
65
+ }
66
+ describe('truncateResults', () => {
67
+ it('returns empty for no results', () => {
68
+ const { content, included } = truncateResults([], 10_000);
69
+ expect(content).toBe('');
70
+ expect(included).toBe(0);
71
+ });
72
+ it('includes all results when under budget', () => {
73
+ const results = [fakeResult('A', 100), fakeResult('B', 100), fakeResult('C', 100)];
74
+ const { content, included } = truncateResults(results, 10_000);
75
+ expect(included).toBe(3);
76
+ expect(content).not.toContain('omitted');
77
+ });
78
+ it('enforces character budget', () => {
79
+ const results = Array.from({ length: 10 }, (_, i) => fakeResult(`Result${i}`, 3000));
80
+ const { content, included } = truncateResults(results, 10_000);
81
+ expect(content.length).toBeLessThanOrEqual(10_100); // small overhead for truncation note
82
+ expect(included).toBeLessThan(10);
83
+ expect(content).toContain('omitted');
84
+ });
85
+ it('always includes at least one result even if over budget', () => {
86
+ const results = [fakeResult('BigOne', 15_000)];
87
+ const { included } = truncateResults(results, 10_000);
88
+ expect(included).toBe(1);
89
+ });
90
+ it('shows omitted count in singular form', () => {
91
+ const results = [fakeResult('A', 8000), fakeResult('B', 8000)];
92
+ const { content } = truncateResults(results, 10_000);
93
+ expect(content).toContain('1 additional result omitted');
94
+ });
95
+ it('shows omitted count in plural form', () => {
96
+ const results = Array.from({ length: 5 }, (_, i) => fakeResult(`R${i}`, 4000));
97
+ const { content } = truncateResults(results, 10_000);
98
+ expect(content).toContain('additional results omitted');
99
+ });
100
+ });
101
+ // ─── getAutoContext (graceful degradation) ─────────────────
102
+ describe('getAutoContext', () => {
103
+ it('returns empty context when projectRoot has no totem config', async () => {
104
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-test-'));
105
+ try {
106
+ const result = await getAutoContext({
107
+ branchRef: 'feat/999-nonexistent',
108
+ projectRoot: tmpDir,
109
+ });
110
+ expect(result.searchMethod).toBe('none');
111
+ expect(result.content).toBe('');
112
+ expect(result.resultsIncluded).toBe(0);
113
+ expect(result.durationMs).toBeGreaterThanOrEqual(0);
114
+ }
115
+ finally {
116
+ fs.rmSync(tmpDir, { recursive: true, force: true });
117
+ }
118
+ });
119
+ it('returns empty context when lancedb directory is missing', async () => {
120
+ // Create a tmpdir with a minimal totem.config.ts but no .lancedb
121
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-test-'));
122
+ fs.writeFileSync(path.join(tmpDir, 'totem.config.ts'), 'export default { targets: [], embedding: { provider: "gemini" } };');
123
+ try {
124
+ const result = await getAutoContext({
125
+ branchRef: 'main',
126
+ maxCharacters: 100,
127
+ limit: 1,
128
+ projectRoot: tmpDir,
129
+ });
130
+ expect(result.query).toBe('project overview');
131
+ expect(result.searchMethod).toBe('none');
132
+ expect(typeof result.durationMs).toBe('number');
133
+ }
134
+ finally {
135
+ fs.rmSync(tmpDir, { recursive: true, force: true });
136
+ }
137
+ });
138
+ it('respects maxCharacters in returned content', async () => {
139
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-test-'));
140
+ try {
141
+ const result = await getAutoContext({
142
+ branchRef: 'feat/1095-session-start',
143
+ maxCharacters: 500,
144
+ limit: 2,
145
+ projectRoot: tmpDir,
146
+ });
147
+ // No config → empty content, budget respected trivially
148
+ expect(result.content).toBe('');
149
+ }
150
+ finally {
151
+ fs.rmSync(tmpDir, { recursive: true, force: true });
152
+ }
153
+ });
154
+ });
155
+ //# sourceMappingURL=auto-context.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-context.test.js","sourceRoot":"","sources":["../../../src/hooks/__tests__/auto-context.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { SearchResult } from '@mmnto/totem';
2
+ export interface AutoContextOptions {
3
+ branchRef?: string;
4
+ maxCharacters?: number;
5
+ limit?: number;
6
+ projectRoot?: string;
7
+ }
8
+ export interface AutoContextResult {
9
+ query: string;
10
+ resultsIncluded: number;
11
+ totalFound: number;
12
+ content: string;
13
+ searchMethod: 'hybrid' | 'fts' | 'none';
14
+ durationMs: number;
15
+ }
16
+ export interface ParsedBranch {
17
+ ticket: string | null;
18
+ query: string;
19
+ }
20
+ export declare function parseBranch(branchRef: string): ParsedBranch;
21
+ export declare function truncateResults(results: SearchResult[], maxCharacters: number): {
22
+ content: string;
23
+ included: number;
24
+ };
25
+ export declare function getAutoContext(options?: AutoContextOptions): Promise<AutoContextResult>;
26
+ //# sourceMappingURL=auto-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-context.d.ts","sourceRoot":"","sources":["../../src/hooks/auto-context.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAY,YAAY,EAAe,MAAM,cAAc,CAAC;AAKxE,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;CACpB;AAOD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CAkB3D;AAcD,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,EAAE,EACvB,aAAa,EAAE,MAAM,GACpB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAsBvC;AAiCD,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2F7F"}