@mmnto/cli 1.14.12 → 1.14.14

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 (57) hide show
  1. package/dist/assets/universal-lessons.d.ts +1 -1
  2. package/dist/assets/universal-lessons.d.ts.map +1 -1
  3. package/dist/assets/universal-lessons.js +1 -1
  4. package/dist/commands/init-templates.d.ts +2 -2
  5. package/dist/commands/init-templates.d.ts.map +1 -1
  6. package/dist/commands/init-templates.js +6 -8
  7. package/dist/commands/init-templates.js.map +1 -1
  8. package/dist/commands/run-compiled-rules.d.ts.map +1 -1
  9. package/dist/commands/run-compiled-rules.js +290 -286
  10. package/dist/commands/run-compiled-rules.js.map +1 -1
  11. package/dist/commands/run-compiled-rules.test.js +11 -9
  12. package/dist/commands/run-compiled-rules.test.js.map +1 -1
  13. package/dist/commands/shield-eval.integration.test.js +9 -5
  14. package/dist/commands/shield-eval.integration.test.js.map +1 -1
  15. package/dist/commands/shield.js +1 -1
  16. package/dist/commands/shield.js.map +1 -1
  17. package/dist/commands/shield.test.js +8 -4
  18. package/dist/commands/shield.test.js.map +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/test-utils.d.ts +8 -0
  22. package/dist/test-utils.d.ts.map +1 -1
  23. package/dist/test-utils.js +12 -0
  24. package/dist/test-utils.js.map +1 -1
  25. package/dist/utils.d.ts +1 -1
  26. package/dist/utils.d.ts.map +1 -1
  27. package/dist/utils.js +2 -3
  28. package/dist/utils.js.map +1 -1
  29. package/package.json +2 -2
  30. package/dist/commands/audit-templates.d.ts +0 -16
  31. package/dist/commands/audit-templates.d.ts.map +0 -1
  32. package/dist/commands/audit-templates.js +0 -57
  33. package/dist/commands/audit-templates.js.map +0 -1
  34. package/dist/commands/audit.d.ts +0 -41
  35. package/dist/commands/audit.d.ts.map +0 -1
  36. package/dist/commands/audit.js +0 -359
  37. package/dist/commands/audit.js.map +0 -1
  38. package/dist/commands/audit.test.d.ts +0 -2
  39. package/dist/commands/audit.test.d.ts.map +0 -1
  40. package/dist/commands/audit.test.js +0 -268
  41. package/dist/commands/audit.test.js.map +0 -1
  42. package/dist/commands/bridge.d.ts +0 -7
  43. package/dist/commands/bridge.d.ts.map +0 -1
  44. package/dist/commands/bridge.js +0 -50
  45. package/dist/commands/bridge.js.map +0 -1
  46. package/dist/commands/bridge.test.d.ts +0 -2
  47. package/dist/commands/bridge.test.d.ts.map +0 -1
  48. package/dist/commands/bridge.test.js +0 -50
  49. package/dist/commands/bridge.test.js.map +0 -1
  50. package/dist/commands/briefing.d.ts +0 -18
  51. package/dist/commands/briefing.d.ts.map +0 -1
  52. package/dist/commands/briefing.js +0 -146
  53. package/dist/commands/briefing.js.map +0 -1
  54. package/dist/commands/briefing.test.d.ts +0 -2
  55. package/dist/commands/briefing.test.d.ts.map +0 -1
  56. package/dist/commands/briefing.test.js +0 -59
  57. package/dist/commands/briefing.test.js.map +0 -1
@@ -1,268 +0,0 @@
1
- import * as fs from 'node:fs';
2
- import * as os from 'node:os';
3
- import * as path from 'node:path';
4
- import { beforeEach, describe, expect, it, vi } from 'vitest';
5
- import { cleanTmpDir } from '../test-utils.js';
6
- import { executeProposals, formatProposalTable, loadStrategicDocs, MAX_STRATEGIC_CONTEXT_CHARS, parseAuditResponse, selectProposals, validateMergeTargets, } from './audit.js';
7
- // ─── parseAuditResponse ─────────────────────────────────
8
- describe('parseAuditResponse', () => {
9
- it('parses valid proposals from XML-wrapped JSON', () => {
10
- const content = `Here are my proposals:
11
- <audit_proposals>
12
- [
13
- { "number": 42, "title": "Widget support", "action": "KEEP", "rationale": "Aligns with roadmap." },
14
- { "number": 99, "title": "Legacy auth", "action": "CLOSE", "rationale": "Superseded by #150." }
15
- ]
16
- </audit_proposals>`;
17
- const proposals = parseAuditResponse(content);
18
- expect(proposals).toHaveLength(2);
19
- expect(proposals[0]).toEqual({
20
- number: 42,
21
- title: 'Widget support',
22
- action: 'KEEP',
23
- newTier: undefined,
24
- mergeInto: undefined,
25
- rationale: 'Aligns with roadmap.',
26
- });
27
- expect(proposals[1].action).toBe('CLOSE');
28
- });
29
- it('parses REPRIORITIZE with newTier', () => {
30
- const content = `<audit_proposals>
31
- [{ "number": 55, "title": "Perf", "action": "REPRIORITIZE", "newTier": "tier-3", "rationale": "Defer." }]
32
- </audit_proposals>`;
33
- const proposals = parseAuditResponse(content);
34
- expect(proposals[0].newTier).toBe('tier-3');
35
- });
36
- it('parses MERGE with mergeInto', () => {
37
- const content = `<audit_proposals>
38
- [{ "number": 88, "title": "Colors", "action": "MERGE", "mergeInto": 42, "rationale": "Subset of #42." }]
39
- </audit_proposals>`;
40
- const proposals = parseAuditResponse(content);
41
- expect(proposals[0].mergeInto).toBe(42);
42
- });
43
- it('normalizes action case', () => {
44
- const content = `<audit_proposals>
45
- [{ "number": 1, "title": "Test", "action": "close", "rationale": "Done." }]
46
- </audit_proposals>`;
47
- const proposals = parseAuditResponse(content);
48
- expect(proposals[0].action).toBe('CLOSE');
49
- });
50
- it('throws on missing XML wrapper', () => {
51
- expect(() => parseAuditResponse('Just some text without tags')).toThrow('missing <audit_proposals> wrapper');
52
- });
53
- it('throws on invalid JSON inside tags', () => {
54
- const content = '<audit_proposals>not json</audit_proposals>';
55
- expect(() => parseAuditResponse(content)).toThrow('Failed to parse');
56
- });
57
- it('throws on non-array JSON', () => {
58
- const content = '<audit_proposals>{"number": 1}</audit_proposals>';
59
- expect(() => parseAuditResponse(content)).toThrow('must be a JSON array');
60
- });
61
- it('throws on invalid action', () => {
62
- const content = `<audit_proposals>
63
- [{ "number": 1, "title": "Test", "action": "DELETE", "rationale": "Bad." }]
64
- </audit_proposals>`;
65
- expect(() => parseAuditResponse(content)).toThrow('Invalid action "DELETE"');
66
- });
67
- it('throws on missing issue number', () => {
68
- const content = `<audit_proposals>
69
- [{ "title": "Test", "action": "KEEP", "rationale": "Good." }]
70
- </audit_proposals>`;
71
- expect(() => parseAuditResponse(content)).toThrow('Invalid or missing "number"');
72
- });
73
- it('throws on MERGE without mergeInto', () => {
74
- const content = `<audit_proposals>
75
- [{ "number": 88, "title": "Colors", "action": "MERGE", "rationale": "Subset." }]
76
- </audit_proposals>`;
77
- expect(() => parseAuditResponse(content)).toThrow('Invalid or missing "mergeInto"');
78
- });
79
- it('throws on REPRIORITIZE with invalid tier', () => {
80
- const content = `<audit_proposals>
81
- [{ "number": 55, "title": "Perf", "action": "REPRIORITIZE", "newTier": "urgent", "rationale": "Defer." }]
82
- </audit_proposals>`;
83
- expect(() => parseAuditResponse(content)).toThrow('Invalid "newTier"');
84
- });
85
- it('throws on REPRIORITIZE without newTier', () => {
86
- const content = `<audit_proposals>
87
- [{ "number": 55, "title": "Perf", "action": "REPRIORITIZE", "rationale": "Defer." }]
88
- </audit_proposals>`;
89
- expect(() => parseAuditResponse(content)).toThrow('Invalid "newTier"');
90
- });
91
- });
92
- // ─── formatProposalTable ────────────────────────────────
93
- describe('formatProposalTable', () => {
94
- const proposals = [
95
- { number: 42, title: 'Widget support', action: 'KEEP', rationale: 'Good.' },
96
- {
97
- number: 55,
98
- title: 'Perf',
99
- action: 'REPRIORITIZE',
100
- newTier: 'tier-3',
101
- rationale: 'Defer.',
102
- },
103
- { number: 88, title: 'Colors', action: 'MERGE', mergeInto: 42, rationale: 'Subset.' },
104
- { number: 99, title: 'Legacy', action: 'CLOSE', rationale: 'Obsolete.' },
105
- ];
106
- it('generates a markdown table with all proposals', () => {
107
- const table = formatProposalTable(proposals);
108
- expect(table).toContain('| Issue | Title | Action | Rationale |');
109
- expect(table).toContain('#42');
110
- expect(table).toContain('#99');
111
- });
112
- it('shows tier for REPRIORITIZE', () => {
113
- const table = formatProposalTable(proposals);
114
- expect(table).toContain('REPRI → tier-3');
115
- });
116
- it('shows merge target for MERGE', () => {
117
- const table = formatProposalTable(proposals);
118
- expect(table).toContain('MERGE → #42');
119
- });
120
- it('handles empty array', () => {
121
- const table = formatProposalTable([]);
122
- const lines = table.split('\n');
123
- expect(lines).toHaveLength(2); // header + separator only
124
- });
125
- });
126
- // ─── validateMergeTargets ───────────────────────────────
127
- describe('validateMergeTargets', () => {
128
- it('returns empty array when all merge targets are valid', () => {
129
- const proposals = [
130
- { number: 88, title: 'Colors', action: 'MERGE', mergeInto: 42, rationale: 'Subset.' },
131
- ];
132
- const errors = validateMergeTargets(proposals, new Set([42, 88, 99]));
133
- expect(errors).toHaveLength(0);
134
- });
135
- it('returns errors for invalid merge targets', () => {
136
- const proposals = [
137
- { number: 88, title: 'Colors', action: 'MERGE', mergeInto: 999, rationale: 'Bad.' },
138
- ];
139
- const errors = validateMergeTargets(proposals, new Set([42, 88]));
140
- expect(errors).toHaveLength(1);
141
- expect(errors[0]).toContain('#999');
142
- expect(errors[0]).toContain('not in the backlog');
143
- });
144
- it('ignores non-MERGE proposals', () => {
145
- const proposals = [
146
- { number: 42, title: 'Widget', action: 'KEEP', rationale: 'Good.' },
147
- { number: 99, title: 'Legacy', action: 'CLOSE', rationale: 'Old.' },
148
- ];
149
- const errors = validateMergeTargets(proposals, new Set([42]));
150
- expect(errors).toHaveLength(0);
151
- });
152
- });
153
- // ─── selectProposals ────────────────────────────────────
154
- describe('selectProposals', () => {
155
- const proposals = [
156
- { number: 42, title: 'Widget', action: 'KEEP', rationale: 'Good.' },
157
- { number: 99, title: 'Legacy', action: 'CLOSE', rationale: 'Obsolete.' },
158
- { number: 55, title: 'Perf', action: 'REPRIORITIZE', newTier: 'tier-3', rationale: 'Defer.' },
159
- ];
160
- it('returns all actionable proposals in --yes mode', async () => {
161
- const selected = await selectProposals(proposals, { yes: true, isTTY: false });
162
- expect(selected).toHaveLength(2); // CLOSE + REPRIORITIZE, not KEEP
163
- expect(selected.map((p) => p.number)).toEqual([99, 55]);
164
- });
165
- it('returns empty array when all proposals are KEEP', async () => {
166
- const keepOnly = [
167
- { number: 1, title: 'A', action: 'KEEP', rationale: 'Good.' },
168
- { number: 2, title: 'B', action: 'KEEP', rationale: 'Good.' },
169
- ];
170
- const selected = await selectProposals(keepOnly, { yes: true, isTTY: false });
171
- expect(selected).toHaveLength(0);
172
- });
173
- it('throws in non-TTY without --yes', async () => {
174
- await expect(selectProposals(proposals, { yes: false, isTTY: false })).rejects.toThrow('non-interactive mode');
175
- });
176
- });
177
- // ─── executeProposals ───────────────────────────────────
178
- vi.mock('../adapters/gh-utils.js', () => ({
179
- ghExec: vi.fn(),
180
- }));
181
- const { ghExec: mockGhExec } = await vi.importMock('../adapters/gh-utils.js');
182
- describe('executeProposals', () => {
183
- beforeEach(() => {
184
- vi.mocked(mockGhExec).mockReset();
185
- });
186
- it('closes issues with comment and close commands', () => {
187
- const proposals = [
188
- { number: 99, title: 'Legacy', action: 'CLOSE', rationale: 'Done.' },
189
- ];
190
- const result = executeProposals(proposals, '/tmp/test');
191
- expect(result.succeeded).toBe(1);
192
- expect(result.failed).toBe(0);
193
- // ghExec called for: comment (--body-file) + close
194
- expect(vi.mocked(mockGhExec)).toHaveBeenCalledTimes(2);
195
- });
196
- it('continues on failure and reports errors', () => {
197
- vi.mocked(mockGhExec).mockImplementationOnce(() => {
198
- throw new Error('rate limit');
199
- });
200
- const proposals = [
201
- { number: 99, title: 'Legacy', action: 'CLOSE', rationale: 'Done.' },
202
- { number: 55, title: 'Perf', action: 'CLOSE', rationale: 'Old.' },
203
- ];
204
- const result = executeProposals(proposals, '/tmp/test');
205
- expect(result.failed).toBe(1);
206
- expect(result.succeeded).toBe(1);
207
- expect(result.errors).toHaveLength(1);
208
- expect(result.errors[0]).toContain('#99');
209
- });
210
- it('skips KEEP proposals', () => {
211
- const proposals = [
212
- { number: 42, title: 'Widget', action: 'KEEP', rationale: 'Good.' },
213
- ];
214
- const result = executeProposals(proposals, '/tmp/test');
215
- expect(result.succeeded).toBe(0);
216
- expect(result.failed).toBe(0);
217
- expect(vi.mocked(mockGhExec)).not.toHaveBeenCalled();
218
- });
219
- it('reports error when REPRIORITIZE missing newTier (defense-in-depth)', () => {
220
- // parseAuditResponse catches this at parse time, but executeProposals
221
- // still guards against it as defense-in-depth
222
- const proposals = [
223
- { number: 55, title: 'Perf', action: 'REPRIORITIZE', rationale: 'Defer.' },
224
- ];
225
- const result = executeProposals(proposals, '/tmp/test');
226
- expect(result.failed).toBe(1);
227
- expect(result.succeeded).toBe(0);
228
- expect(result.errors[0]).toContain('missing newTier');
229
- });
230
- it('reports error when MERGE missing mergeInto (defense-in-depth)', () => {
231
- const proposals = [
232
- { number: 88, title: 'Colors', action: 'MERGE', rationale: 'Subset.' },
233
- ];
234
- const result = executeProposals(proposals, '/tmp/test');
235
- expect(result.failed).toBe(1);
236
- expect(result.succeeded).toBe(0);
237
- expect(result.errors[0]).toContain('missing mergeInto');
238
- });
239
- });
240
- // ─── loadStrategicDocs ──────────────────────────────────
241
- describe('loadStrategicDocs', () => {
242
- it('truncates when content exceeds MAX_STRATEGIC_CONTEXT_CHARS', () => {
243
- // Create a temp dir with a massive file
244
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-audit-test-'));
245
- const strategyDir = path.join(tmpDir, '.strategy');
246
- fs.mkdirSync(strategyDir, { recursive: true });
247
- const bigContent = 'x'.repeat(MAX_STRATEGIC_CONTEXT_CHARS + 10_000);
248
- fs.writeFileSync(path.join(strategyDir, 'big.md'), bigContent);
249
- try {
250
- const result = loadStrategicDocs(tmpDir);
251
- expect(result.length).toBeLessThanOrEqual(MAX_STRATEGIC_CONTEXT_CHARS);
252
- }
253
- finally {
254
- cleanTmpDir(tmpDir);
255
- }
256
- });
257
- it('returns empty string when no strategic docs exist', () => {
258
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-audit-test-'));
259
- try {
260
- const result = loadStrategicDocs(tmpDir);
261
- expect(result).toBe('');
262
- }
263
- finally {
264
- cleanTmpDir(tmpDir);
265
- }
266
- });
267
- });
268
- //# sourceMappingURL=audit.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit.test.js","sourceRoot":"","sources":["../../src/commands/audit.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- export declare function assembleBridge(branch: string, status: string, message?: string): string;
2
- export interface BridgeOptions {
3
- message?: string;
4
- out?: string;
5
- }
6
- export declare function bridgeCommand(options: BridgeOptions): Promise<void>;
7
- //# sourceMappingURL=bridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/commands/bridge.ts"],"names":[],"mappings":"AAOA,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CA6BvF;AAID,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BzE"}
@@ -1,50 +0,0 @@
1
- // ─── Constants ──────────────────────────────────────────
2
- const TAG = 'Bridge';
3
- const MAX_STATUS_FILES = 20;
4
- // ─── Prompt assembly ────────────────────────────────────
5
- export function assembleBridge(branch, status, message) {
6
- const sections = ['# Context Bridge'];
7
- sections.push(`**Branch:** ${branch}`);
8
- // Summarize modified files
9
- if (status.trim()) {
10
- const lines = status.trim().split('\n');
11
- const fileList = lines.slice(0, MAX_STATUS_FILES).join('\n');
12
- const summary = lines.length > MAX_STATUS_FILES
13
- ? `${fileList}\n... and ${lines.length - MAX_STATUS_FILES} more file${lines.length - MAX_STATUS_FILES === 1 ? '' : 's'}`
14
- : fileList;
15
- sections.push(`**Modified Files:**\n${summary}`);
16
- }
17
- else {
18
- sections.push('**Modified Files:** (clean working tree)');
19
- }
20
- // Breadcrumb message
21
- if (message) {
22
- const sanitized = message.replace(/<\/\s*([a-zA-Z0-9_]+)\s*>/gi, '<\\/$1>');
23
- sections.push(`**Current Task / Breadcrumb:** "${sanitized}"`);
24
- }
25
- sections.push('**Instruction:** Resume work based on the current uncommitted changes and the breadcrumb above. Do not restart the task from scratch.');
26
- return sections.join('\n\n');
27
- }
28
- export async function bridgeCommand(options) {
29
- const fs = await import('node:fs');
30
- const path = await import('node:path');
31
- const { TotemGitError } = await import('@mmnto/totem');
32
- const { getGitBranch, getGitStatus } = await import('../git.js');
33
- const { log } = await import('../ui.js');
34
- const { writeOutput } = await import('../utils.js');
35
- const cwd = process.cwd();
36
- if (!fs.existsSync(path.join(cwd, '.git'))) {
37
- throw new TotemGitError('Not a git repository.', 'Run `totem bridge` from a project with git initialized.');
38
- }
39
- log.info(TAG, 'Capturing workspace state...');
40
- const branch = getGitBranch(cwd);
41
- const status = getGitStatus(cwd);
42
- log.info(TAG, `Branch: ${branch}`);
43
- const output = assembleBridge(branch, status, options.message);
44
- writeOutput(output, options.out);
45
- if (options.out) {
46
- log.success(TAG, `Written to ${options.out}`);
47
- }
48
- log.success(TAG, 'Context bridge generated. Paste this into your new session.');
49
- }
50
- //# sourceMappingURL=bridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/commands/bridge.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAE3D,MAAM,GAAG,GAAG,QAAQ,CAAC;AACrB,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B,2DAA2D;AAE3D,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,MAAc,EAAE,OAAgB;IAC7E,MAAM,QAAQ,GAAa,CAAC,kBAAkB,CAAC,CAAC;IAEhD,QAAQ,CAAC,IAAI,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;IAEvC,2BAA2B;IAC3B,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,MAAM,OAAO,GACX,KAAK,CAAC,MAAM,GAAG,gBAAgB;YAC7B,CAAC,CAAC,GAAG,QAAQ,aAAa,KAAK,CAAC,MAAM,GAAG,gBAAgB,aAAa,KAAK,CAAC,MAAM,GAAG,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;YACxH,CAAC,CAAC,QAAQ,CAAC;QACf,QAAQ,CAAC,IAAI,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAC5D,CAAC;IAED,qBAAqB;IACrB,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,6BAA6B,EAAE,SAAS,CAAC,CAAC;QAC5E,QAAQ,CAAC,IAAI,CAAC,mCAAmC,SAAS,GAAG,CAAC,CAAC;IACjE,CAAC;IAED,QAAQ,CAAC,IAAI,CACX,uIAAuI,CACxI,CAAC;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IACvD,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACjE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IAEpD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,aAAa,CACrB,uBAAuB,EACvB,yDAAyD,CAC1D,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,8BAA8B,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,MAAM,EAAE,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/D,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,6DAA6D,CAAC,CAAC;AAClF,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=bridge.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bridge.test.d.ts","sourceRoot":"","sources":["../../src/commands/bridge.test.ts"],"names":[],"mappings":""}
@@ -1,50 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { assembleBridge } from './bridge.js';
3
- describe('assembleBridge', () => {
4
- it('generates a bridge with branch and clean status', () => {
5
- const output = assembleBridge('main', '');
6
- expect(output).toContain('# Context Bridge');
7
- expect(output).toContain('**Branch:** main');
8
- expect(output).toContain('(clean working tree)');
9
- expect(output).toContain('Resume work');
10
- });
11
- it('includes modified files from git status', () => {
12
- const status = ' M src/foo.ts\n M src/bar.ts';
13
- const output = assembleBridge('feat/test', status);
14
- expect(output).toContain('src/foo.ts');
15
- expect(output).toContain('src/bar.ts');
16
- expect(output).not.toContain('clean working tree');
17
- });
18
- it('includes breadcrumb message when provided', () => {
19
- const output = assembleBridge('main', '', 'Stuck on auth bug in middleware.ts');
20
- expect(output).toContain('Stuck on auth bug in middleware.ts');
21
- expect(output).toContain('**Current Task / Breadcrumb:**');
22
- });
23
- it('omits breadcrumb section when no message provided', () => {
24
- const output = assembleBridge('main', '');
25
- expect(output).not.toContain('Breadcrumb');
26
- });
27
- it('truncates file list when more than 20 files', () => {
28
- const lines = Array.from({ length: 25 }, (_, i) => ` M src/file${i}.ts`);
29
- const status = lines.join('\n');
30
- const output = assembleBridge('main', status);
31
- expect(output).toContain('src/file0.ts');
32
- expect(output).toContain('src/file19.ts');
33
- expect(output).not.toContain('src/file20.ts');
34
- expect(output).toContain('and 5 more files');
35
- });
36
- it('escapes closing XML tags in breadcrumb message', () => {
37
- const output = assembleBridge('main', '', 'Fix </system> injection </TAG >');
38
- expect(output).toContain('<\\/system>');
39
- expect(output).toContain('<\\/TAG>');
40
- expect(output).not.toContain('</system>');
41
- });
42
- it('uses singular "file" when exactly 1 file over limit', () => {
43
- const lines = Array.from({ length: 21 }, (_, i) => ` M src/file${i}.ts`);
44
- const status = lines.join('\n');
45
- const output = assembleBridge('main', status);
46
- expect(output).toContain('and 1 more file');
47
- expect(output).not.toContain('and 1 more files');
48
- });
49
- });
50
- //# sourceMappingURL=bridge.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bridge.test.js","sourceRoot":"","sources":["../../src/commands/bridge.test.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import type { SearchResult } from '@mmnto/totem';
2
- import type { StandardPrListItem } from '../adapters/pr-adapter.js';
3
- interface RetrievedContext {
4
- specs: SearchResult[];
5
- sessions: SearchResult[];
6
- lessons: SearchResult[];
7
- }
8
- export declare function formatPRList(prs: StandardPrListItem[]): string;
9
- export declare function assemblePrompt(branch: string, status: string, prs: StandardPrListItem[], context: RetrievedContext, systemPrompt: string): string;
10
- export interface BriefingOptions {
11
- raw?: boolean;
12
- out?: string;
13
- model?: string;
14
- fresh?: boolean;
15
- }
16
- export declare function briefingCommand(options: BriefingOptions): Promise<void>;
17
- export {};
18
- //# sourceMappingURL=briefing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"briefing.d.ts","sourceRoot":"","sources":["../../src/commands/briefing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AA+CpE,UAAU,gBAAgB;IACxB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AA6BD,wBAAgB,YAAY,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAG9D;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,kBAAkB,EAAE,EACzB,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,MAAM,GACnB,MAAM,CA6BR;AAID,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkF7E"}
@@ -1,146 +0,0 @@
1
- import { formatLessonSection, formatResults, wrapXml } from '../utils.js';
2
- // ─── Constants ──────────────────────────────────────────
3
- const TAG = 'Briefing';
4
- const SPEC_SEARCH_POOL = 20;
5
- const MAX_SPEC_RESULTS = 5;
6
- const MAX_LESSONS = 5;
7
- const MAX_SESSION_RESULTS = 5;
8
- // ─── System prompt ──────────────────────────────────────
9
- const SYSTEM_PROMPT = `# Briefing System Prompt — Session Startup Briefing
10
-
11
- ## Purpose
12
- Produce a session startup briefing that orients the developer at the start of an AI-assisted work session.
13
-
14
- ## Role
15
- You are a technical project assistant producing a quick-start briefing. You have access to the current git state, open pull requests, and project knowledge from Totem. Your job is to synthesize this into an actionable summary so the developer knows exactly where they left off and what to do next.
16
-
17
- ## Rules
18
- - Reference PRs by number (#NNN) and branch name
19
- - Reference issues by number (#NNN) when they appear in Totem knowledge
20
- - Be opinionated about what the recommended first action should be
21
- - Be concise — this is a startup briefing, not a project plan
22
- - If there are uncommitted changes, flag them prominently
23
- - If there are no open PRs, say so
24
-
25
- ## Output Format
26
- Respond with ONLY the sections below. No preamble, no closing remarks.
27
-
28
- ### Session Context
29
- [Current branch, uncommitted changes summary. If working tree is clean, say so. If on a feature branch, note what it likely relates to.]
30
-
31
- ### Open PRs
32
- [List of open PRs with number, title, and branch. If none, say "No open PRs." Highlight any that are the developer's current branch.]
33
-
34
- ### Active Priorities
35
- [Key priorities and recent work context from Totem knowledge — what was recently worked on, what specs are active, what sessions covered. If no relevant knowledge, say "No recent context found in Totem index."]
36
-
37
- ### Recommended First Action
38
- [Single clear recommendation for what the developer should do first in this session. Consider: uncommitted work to commit/continue, PRs to review/merge, next issue to pick up.]
39
- `;
40
- async function retrieveContext(query, store) {
41
- const { partitionLessons } = await import('../utils.js');
42
- const search = (typeFilter, maxResults) => store.search({ query, typeFilter, maxResults });
43
- const [allSpecs, sessions] = await Promise.all([
44
- search('spec', SPEC_SEARCH_POOL),
45
- search('session_log', MAX_SESSION_RESULTS),
46
- ]);
47
- const { lessons, specs } = partitionLessons(allSpecs, MAX_LESSONS, MAX_SPEC_RESULTS);
48
- return { specs, sessions, lessons };
49
- }
50
- // ─── Prompt assembly ────────────────────────────────────
51
- export function formatPRList(prs) {
52
- if (prs.length === 0)
53
- return '(none)';
54
- return prs.map((pr) => `- #${pr.number} — ${pr.title} (branch: ${pr.headRefName})`).join('\n');
55
- }
56
- export function assemblePrompt(branch, status, prs, context, systemPrompt) {
57
- const sections = [systemPrompt];
58
- // Git state
59
- sections.push('=== GIT STATE ===');
60
- sections.push(`Branch: ${branch}`);
61
- sections.push(`Uncommitted changes:\n${status ? wrapXml('git_status', status) : '(clean working tree)'}`);
62
- // Open PRs
63
- sections.push('\n=== OPEN PULL REQUESTS ===');
64
- sections.push(formatPRList(prs));
65
- // Totem knowledge (condensed — fast-boot command, minimize token usage)
66
- const specSection = formatResults(context.specs, 'RECENT SPECS & ADRs', true);
67
- const sessionSection = formatResults(context.sessions, 'RECENT SESSION HISTORY', true);
68
- if (specSection || sessionSection) {
69
- sections.push('\n=== TOTEM KNOWLEDGE ===');
70
- if (specSection)
71
- sections.push(specSection);
72
- if (sessionSection)
73
- sections.push(sessionSection);
74
- }
75
- // Lessons — condensed snippets for fast-boot command
76
- const lessonSection = formatLessonSection(context.lessons, undefined, true);
77
- if (lessonSection)
78
- sections.push(lessonSection);
79
- return sections.join('\n');
80
- }
81
- export async function briefingCommand(options) {
82
- const path = await import('node:path');
83
- const { createEmbedder, LanceStore } = await import('@mmnto/totem');
84
- const { GitHubCliPrAdapter } = await import('../adapters/github-cli-pr.js');
85
- const { getGitBranch, getGitStatus } = await import('../git.js');
86
- const { log } = await import('../ui.js');
87
- const { getSystemPrompt, loadConfig, loadEnv, requireEmbedding, resolveConfigPath, runOrchestrator, writeOutput, } = await import('../utils.js');
88
- const cwd = process.cwd();
89
- const configPath = resolveConfigPath(cwd);
90
- loadEnv(cwd);
91
- const config = await loadConfig(configPath);
92
- // Gather git state
93
- log.info(TAG, 'Gathering git state...');
94
- const branch = getGitBranch(cwd);
95
- const status = getGitStatus(cwd);
96
- log.info(TAG, `Branch: ${branch}`);
97
- // Fetch open PRs
98
- log.info(TAG, 'Fetching open PRs...');
99
- const adapter = new GitHubCliPrAdapter(cwd);
100
- const prs = adapter.fetchOpenPRs();
101
- log.info(TAG, `Found ${prs.length} open PRs.`);
102
- // Connect to LanceDB
103
- const embedding = requireEmbedding(config);
104
- const embedder = createEmbedder(embedding);
105
- const store = new LanceStore(path.join(cwd, config.lanceDir), embedder, {
106
- absolutePathRoot: cwd,
107
- });
108
- await store.connect();
109
- // Run index health check — surface issues before the briefing content
110
- let healthWarningSection = '';
111
- try {
112
- const healthResult = await store.healthCheck();
113
- if (!healthResult.healthy) {
114
- const issueLines = healthResult.issues.map((issue) => `- ${issue}`).join('\n');
115
- healthWarningSection =
116
- '\n### Index Health\n' +
117
- '**Warning:** The Totem index has issues that may affect search quality:\n' +
118
- issueLines +
119
- '\n\nRun `totem sync --full` to re-index and fix these issues.\n';
120
- log.warn(TAG, `Index health check found ${healthResult.issues.length} issue(s)`);
121
- }
122
- }
123
- catch (err) {
124
- log.warn(TAG, `Index health check failed: ${err instanceof Error ? err.message : String(err)}`);
125
- }
126
- // Retrieve context from LanceDB
127
- const query = `${branch} active work session priorities`;
128
- log.info(TAG, 'Querying Totem index...');
129
- const context = await retrieveContext(query, store);
130
- const totalResults = context.specs.length + context.sessions.length + context.lessons.length;
131
- log.info(TAG, `Found: ${context.specs.length} specs, ${context.sessions.length} sessions, ${context.lessons.length} lessons`);
132
- // Resolve system prompt (allow .totem/prompts/briefing.md override)
133
- const systemPrompt = getSystemPrompt('briefing', SYSTEM_PROMPT, cwd, config.totemDir);
134
- // Assemble prompt
135
- const prompt = assemblePrompt(branch, status, prs, context, systemPrompt);
136
- log.dim(TAG, `Prompt: ${(prompt.length / 1024).toFixed(0)}KB`);
137
- const content = await runOrchestrator({ prompt, tag: TAG, options, config, cwd, totalResults });
138
- if (content != null) {
139
- // Append index health warning section if issues were found
140
- const finalContent = healthWarningSection ? content + healthWarningSection : content;
141
- writeOutput(finalContent, options.out);
142
- if (options.out)
143
- log.success(TAG, `Written to ${options.out}`);
144
- }
145
- }
146
- //# sourceMappingURL=briefing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"briefing.js","sourceRoot":"","sources":["../../src/commands/briefing.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=briefing.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"briefing.test.d.ts","sourceRoot":"","sources":["../../src/commands/briefing.test.ts"],"names":[],"mappings":""}