@mmnto/cli 0.28.0 → 0.29.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.
- package/dist/adapters/gh-utils.d.ts +5 -0
- package/dist/adapters/gh-utils.d.ts.map +1 -1
- package/dist/adapters/gh-utils.js +19 -0
- package/dist/adapters/gh-utils.js.map +1 -1
- package/dist/commands/audit.d.ts +44 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +400 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/audit.test.d.ts +2 -0
- package/dist/commands/audit.test.d.ts.map +1 -0
- package/dist/commands/audit.test.js +268 -0
- package/dist/commands/audit.test.js.map +1 -0
- package/dist/commands/briefing.d.ts +8 -0
- package/dist/commands/briefing.d.ts.map +1 -1
- package/dist/commands/briefing.js +14 -7
- package/dist/commands/briefing.js.map +1 -1
- package/dist/commands/briefing.test.js +33 -1
- package/dist/commands/briefing.test.js.map +1 -1
- package/dist/commands/init.d.ts +19 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +151 -15
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/init.test.js +125 -1
- package/dist/commands/init.test.js.map +1 -1
- package/dist/commands/shield.d.ts +1 -0
- package/dist/commands/shield.d.ts.map +1 -1
- package/dist/commands/shield.js +13 -6
- package/dist/commands/shield.js.map +1 -1
- package/dist/commands/shield.test.js +23 -0
- package/dist/commands/shield.test.js.map +1 -1
- package/dist/commands/spec.d.ts +19 -0
- package/dist/commands/spec.d.ts.map +1 -1
- package/dist/commands/spec.js +27 -10
- package/dist/commands/spec.js.map +1 -1
- package/dist/commands/spec.test.d.ts +2 -0
- package/dist/commands/spec.test.d.ts.map +1 -0
- package/dist/commands/spec.test.js +159 -0
- package/dist/commands/spec.test.js.map +1 -0
- package/dist/commands/triage.d.ts +8 -0
- package/dist/commands/triage.d.ts.map +1 -1
- package/dist/commands/triage.js +15 -7
- package/dist/commands/triage.js.map +1 -1
- package/dist/commands/triage.test.js +29 -1
- package/dist/commands/triage.test.js.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/dist/utils.d.ts +15 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +42 -0
- package/dist/utils.js.map +1 -1
- package/dist/utils.test.js +97 -1
- package/dist/utils.test.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,268 @@
|
|
|
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 { executeProposals, formatProposalTable, loadStrategicDocs, MAX_STRATEGIC_CONTEXT_CHARS, parseAuditResponse, selectProposals, validateMergeTargets, } from './audit.js';
|
|
6
|
+
// ─── parseAuditResponse ─────────────────────────────────
|
|
7
|
+
describe('parseAuditResponse', () => {
|
|
8
|
+
it('parses valid proposals from XML-wrapped JSON', () => {
|
|
9
|
+
const content = `Here are my proposals:
|
|
10
|
+
<audit_proposals>
|
|
11
|
+
[
|
|
12
|
+
{ "number": 42, "title": "Widget support", "action": "KEEP", "rationale": "Aligns with roadmap." },
|
|
13
|
+
{ "number": 99, "title": "Legacy auth", "action": "CLOSE", "rationale": "Superseded by #150." }
|
|
14
|
+
]
|
|
15
|
+
</audit_proposals>`;
|
|
16
|
+
const proposals = parseAuditResponse(content);
|
|
17
|
+
expect(proposals).toHaveLength(2);
|
|
18
|
+
expect(proposals[0]).toEqual({
|
|
19
|
+
number: 42,
|
|
20
|
+
title: 'Widget support',
|
|
21
|
+
action: 'KEEP',
|
|
22
|
+
newTier: undefined,
|
|
23
|
+
mergeInto: undefined,
|
|
24
|
+
rationale: 'Aligns with roadmap.',
|
|
25
|
+
});
|
|
26
|
+
expect(proposals[1].action).toBe('CLOSE');
|
|
27
|
+
});
|
|
28
|
+
it('parses REPRIORITIZE with newTier', () => {
|
|
29
|
+
const content = `<audit_proposals>
|
|
30
|
+
[{ "number": 55, "title": "Perf", "action": "REPRIORITIZE", "newTier": "tier-3", "rationale": "Defer." }]
|
|
31
|
+
</audit_proposals>`;
|
|
32
|
+
const proposals = parseAuditResponse(content);
|
|
33
|
+
expect(proposals[0].newTier).toBe('tier-3');
|
|
34
|
+
});
|
|
35
|
+
it('parses MERGE with mergeInto', () => {
|
|
36
|
+
const content = `<audit_proposals>
|
|
37
|
+
[{ "number": 88, "title": "Colors", "action": "MERGE", "mergeInto": 42, "rationale": "Subset of #42." }]
|
|
38
|
+
</audit_proposals>`;
|
|
39
|
+
const proposals = parseAuditResponse(content);
|
|
40
|
+
expect(proposals[0].mergeInto).toBe(42);
|
|
41
|
+
});
|
|
42
|
+
it('normalizes action case', () => {
|
|
43
|
+
const content = `<audit_proposals>
|
|
44
|
+
[{ "number": 1, "title": "Test", "action": "close", "rationale": "Done." }]
|
|
45
|
+
</audit_proposals>`;
|
|
46
|
+
const proposals = parseAuditResponse(content);
|
|
47
|
+
expect(proposals[0].action).toBe('CLOSE');
|
|
48
|
+
});
|
|
49
|
+
it('throws on missing XML wrapper', () => {
|
|
50
|
+
expect(() => parseAuditResponse('Just some text without tags')).toThrow('missing <audit_proposals> wrapper');
|
|
51
|
+
});
|
|
52
|
+
it('throws on invalid JSON inside tags', () => {
|
|
53
|
+
const content = '<audit_proposals>not json</audit_proposals>';
|
|
54
|
+
expect(() => parseAuditResponse(content)).toThrow('Failed to parse');
|
|
55
|
+
});
|
|
56
|
+
it('throws on non-array JSON', () => {
|
|
57
|
+
const content = '<audit_proposals>{"number": 1}</audit_proposals>';
|
|
58
|
+
expect(() => parseAuditResponse(content)).toThrow('must be a JSON array');
|
|
59
|
+
});
|
|
60
|
+
it('throws on invalid action', () => {
|
|
61
|
+
const content = `<audit_proposals>
|
|
62
|
+
[{ "number": 1, "title": "Test", "action": "DELETE", "rationale": "Bad." }]
|
|
63
|
+
</audit_proposals>`;
|
|
64
|
+
expect(() => parseAuditResponse(content)).toThrow('Invalid action "DELETE"');
|
|
65
|
+
});
|
|
66
|
+
it('throws on missing issue number', () => {
|
|
67
|
+
const content = `<audit_proposals>
|
|
68
|
+
[{ "title": "Test", "action": "KEEP", "rationale": "Good." }]
|
|
69
|
+
</audit_proposals>`;
|
|
70
|
+
expect(() => parseAuditResponse(content)).toThrow('Invalid or missing "number"');
|
|
71
|
+
});
|
|
72
|
+
it('throws on MERGE without mergeInto', () => {
|
|
73
|
+
const content = `<audit_proposals>
|
|
74
|
+
[{ "number": 88, "title": "Colors", "action": "MERGE", "rationale": "Subset." }]
|
|
75
|
+
</audit_proposals>`;
|
|
76
|
+
expect(() => parseAuditResponse(content)).toThrow('Invalid or missing "mergeInto"');
|
|
77
|
+
});
|
|
78
|
+
it('throws on REPRIORITIZE with invalid tier', () => {
|
|
79
|
+
const content = `<audit_proposals>
|
|
80
|
+
[{ "number": 55, "title": "Perf", "action": "REPRIORITIZE", "newTier": "urgent", "rationale": "Defer." }]
|
|
81
|
+
</audit_proposals>`;
|
|
82
|
+
expect(() => parseAuditResponse(content)).toThrow('Invalid "newTier"');
|
|
83
|
+
});
|
|
84
|
+
it('throws on REPRIORITIZE without newTier', () => {
|
|
85
|
+
const content = `<audit_proposals>
|
|
86
|
+
[{ "number": 55, "title": "Perf", "action": "REPRIORITIZE", "rationale": "Defer." }]
|
|
87
|
+
</audit_proposals>`;
|
|
88
|
+
expect(() => parseAuditResponse(content)).toThrow('Invalid "newTier"');
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
// ─── formatProposalTable ────────────────────────────────
|
|
92
|
+
describe('formatProposalTable', () => {
|
|
93
|
+
const proposals = [
|
|
94
|
+
{ number: 42, title: 'Widget support', action: 'KEEP', rationale: 'Good.' },
|
|
95
|
+
{
|
|
96
|
+
number: 55,
|
|
97
|
+
title: 'Perf',
|
|
98
|
+
action: 'REPRIORITIZE',
|
|
99
|
+
newTier: 'tier-3',
|
|
100
|
+
rationale: 'Defer.',
|
|
101
|
+
},
|
|
102
|
+
{ number: 88, title: 'Colors', action: 'MERGE', mergeInto: 42, rationale: 'Subset.' },
|
|
103
|
+
{ number: 99, title: 'Legacy', action: 'CLOSE', rationale: 'Obsolete.' },
|
|
104
|
+
];
|
|
105
|
+
it('generates a markdown table with all proposals', () => {
|
|
106
|
+
const table = formatProposalTable(proposals);
|
|
107
|
+
expect(table).toContain('| Issue | Title | Action | Rationale |');
|
|
108
|
+
expect(table).toContain('#42');
|
|
109
|
+
expect(table).toContain('#99');
|
|
110
|
+
});
|
|
111
|
+
it('shows tier for REPRIORITIZE', () => {
|
|
112
|
+
const table = formatProposalTable(proposals);
|
|
113
|
+
expect(table).toContain('REPRI → tier-3');
|
|
114
|
+
});
|
|
115
|
+
it('shows merge target for MERGE', () => {
|
|
116
|
+
const table = formatProposalTable(proposals);
|
|
117
|
+
expect(table).toContain('MERGE → #42');
|
|
118
|
+
});
|
|
119
|
+
it('handles empty array', () => {
|
|
120
|
+
const table = formatProposalTable([]);
|
|
121
|
+
const lines = table.split('\n');
|
|
122
|
+
expect(lines).toHaveLength(2); // header + separator only
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
// ─── validateMergeTargets ───────────────────────────────
|
|
126
|
+
describe('validateMergeTargets', () => {
|
|
127
|
+
it('returns empty array when all merge targets are valid', () => {
|
|
128
|
+
const proposals = [
|
|
129
|
+
{ number: 88, title: 'Colors', action: 'MERGE', mergeInto: 42, rationale: 'Subset.' },
|
|
130
|
+
];
|
|
131
|
+
const errors = validateMergeTargets(proposals, new Set([42, 88, 99]));
|
|
132
|
+
expect(errors).toHaveLength(0);
|
|
133
|
+
});
|
|
134
|
+
it('returns errors for invalid merge targets', () => {
|
|
135
|
+
const proposals = [
|
|
136
|
+
{ number: 88, title: 'Colors', action: 'MERGE', mergeInto: 999, rationale: 'Bad.' },
|
|
137
|
+
];
|
|
138
|
+
const errors = validateMergeTargets(proposals, new Set([42, 88]));
|
|
139
|
+
expect(errors).toHaveLength(1);
|
|
140
|
+
expect(errors[0]).toContain('#999');
|
|
141
|
+
expect(errors[0]).toContain('not in the backlog');
|
|
142
|
+
});
|
|
143
|
+
it('ignores non-MERGE proposals', () => {
|
|
144
|
+
const proposals = [
|
|
145
|
+
{ number: 42, title: 'Widget', action: 'KEEP', rationale: 'Good.' },
|
|
146
|
+
{ number: 99, title: 'Legacy', action: 'CLOSE', rationale: 'Old.' },
|
|
147
|
+
];
|
|
148
|
+
const errors = validateMergeTargets(proposals, new Set([42]));
|
|
149
|
+
expect(errors).toHaveLength(0);
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
// ─── selectProposals ────────────────────────────────────
|
|
153
|
+
describe('selectProposals', () => {
|
|
154
|
+
const proposals = [
|
|
155
|
+
{ number: 42, title: 'Widget', action: 'KEEP', rationale: 'Good.' },
|
|
156
|
+
{ number: 99, title: 'Legacy', action: 'CLOSE', rationale: 'Obsolete.' },
|
|
157
|
+
{ number: 55, title: 'Perf', action: 'REPRIORITIZE', newTier: 'tier-3', rationale: 'Defer.' },
|
|
158
|
+
];
|
|
159
|
+
it('returns all actionable proposals in --yes mode', async () => {
|
|
160
|
+
const selected = await selectProposals(proposals, { yes: true, isTTY: false });
|
|
161
|
+
expect(selected).toHaveLength(2); // CLOSE + REPRIORITIZE, not KEEP
|
|
162
|
+
expect(selected.map((p) => p.number)).toEqual([99, 55]);
|
|
163
|
+
});
|
|
164
|
+
it('returns empty array when all proposals are KEEP', async () => {
|
|
165
|
+
const keepOnly = [
|
|
166
|
+
{ number: 1, title: 'A', action: 'KEEP', rationale: 'Good.' },
|
|
167
|
+
{ number: 2, title: 'B', action: 'KEEP', rationale: 'Good.' },
|
|
168
|
+
];
|
|
169
|
+
const selected = await selectProposals(keepOnly, { yes: true, isTTY: false });
|
|
170
|
+
expect(selected).toHaveLength(0);
|
|
171
|
+
});
|
|
172
|
+
it('throws in non-TTY without --yes', async () => {
|
|
173
|
+
await expect(selectProposals(proposals, { yes: false, isTTY: false })).rejects.toThrow('non-interactive mode');
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
// ─── executeProposals ───────────────────────────────────
|
|
177
|
+
vi.mock('../adapters/gh-utils.js', () => ({
|
|
178
|
+
ghExec: vi.fn(),
|
|
179
|
+
}));
|
|
180
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
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
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
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
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
//# sourceMappingURL=audit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.test.js","sourceRoot":"","sources":["../../src/commands/audit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
import type { SearchResult } from '@mmnto/totem';
|
|
1
2
|
import type { StandardPrListItem } from '../adapters/pr-adapter.js';
|
|
3
|
+
interface RetrievedContext {
|
|
4
|
+
specs: SearchResult[];
|
|
5
|
+
sessions: SearchResult[];
|
|
6
|
+
lessons: SearchResult[];
|
|
7
|
+
}
|
|
2
8
|
export declare function formatPRList(prs: StandardPrListItem[]): string;
|
|
9
|
+
export declare function assemblePrompt(branch: string, status: string, prs: StandardPrListItem[], context: RetrievedContext, systemPrompt: string): string;
|
|
3
10
|
export interface BriefingOptions {
|
|
4
11
|
raw?: boolean;
|
|
5
12
|
out?: string;
|
|
@@ -7,4 +14,5 @@ export interface BriefingOptions {
|
|
|
7
14
|
fresh?: boolean;
|
|
8
15
|
}
|
|
9
16
|
export declare function briefingCommand(options: BriefingOptions): Promise<void>;
|
|
17
|
+
export {};
|
|
10
18
|
//# sourceMappingURL=briefing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"briefing.d.ts","sourceRoot":"","sources":["../../src/commands/briefing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"briefing.d.ts","sourceRoot":"","sources":["../../src/commands/briefing.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,cAAc,CAAC;AAI9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AA6DpE,UAAU,gBAAgB;IACxB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAkBD,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,CA8C7E"}
|
|
@@ -3,10 +3,12 @@ import { createEmbedder, LanceStore } from '@mmnto/totem';
|
|
|
3
3
|
import { GitHubCliPrAdapter } from '../adapters/github-cli-pr.js';
|
|
4
4
|
import { getGitBranch, getGitStatus } from '../git.js';
|
|
5
5
|
import { log } from '../ui.js';
|
|
6
|
-
import { formatResults, getSystemPrompt, loadConfig, loadEnv, requireEmbedding, resolveConfigPath, runOrchestrator, wrapXml, writeOutput, } from '../utils.js';
|
|
6
|
+
import { formatLessonSection, formatResults, getSystemPrompt, loadConfig, loadEnv, partitionLessons, requireEmbedding, resolveConfigPath, runOrchestrator, wrapXml, writeOutput, } from '../utils.js';
|
|
7
7
|
// ─── Constants ──────────────────────────────────────────
|
|
8
8
|
const TAG = 'Briefing';
|
|
9
|
+
const SPEC_SEARCH_POOL = 20;
|
|
9
10
|
const MAX_SPEC_RESULTS = 5;
|
|
11
|
+
const MAX_LESSONS = 5;
|
|
10
12
|
const MAX_SESSION_RESULTS = 5;
|
|
11
13
|
// ─── System prompt ──────────────────────────────────────
|
|
12
14
|
const SYSTEM_PROMPT = `# Briefing System Prompt — Session Startup Briefing
|
|
@@ -42,11 +44,12 @@ Respond with ONLY the sections below. No preamble, no closing remarks.
|
|
|
42
44
|
`;
|
|
43
45
|
async function retrieveContext(query, store) {
|
|
44
46
|
const search = (typeFilter, maxResults) => store.search({ query, typeFilter, maxResults });
|
|
45
|
-
const [
|
|
46
|
-
search('spec',
|
|
47
|
+
const [allSpecs, sessions] = await Promise.all([
|
|
48
|
+
search('spec', SPEC_SEARCH_POOL),
|
|
47
49
|
search('session_log', MAX_SESSION_RESULTS),
|
|
48
50
|
]);
|
|
49
|
-
|
|
51
|
+
const { lessons, specs } = partitionLessons(allSpecs, MAX_LESSONS, MAX_SPEC_RESULTS);
|
|
52
|
+
return { specs, sessions, lessons };
|
|
50
53
|
}
|
|
51
54
|
// ─── Prompt assembly ────────────────────────────────────
|
|
52
55
|
export function formatPRList(prs) {
|
|
@@ -54,7 +57,7 @@ export function formatPRList(prs) {
|
|
|
54
57
|
return '(none)';
|
|
55
58
|
return prs.map((pr) => `- #${pr.number} — ${pr.title} (branch: ${pr.headRefName})`).join('\n');
|
|
56
59
|
}
|
|
57
|
-
function assemblePrompt(branch, status, prs, context, systemPrompt) {
|
|
60
|
+
export function assemblePrompt(branch, status, prs, context, systemPrompt) {
|
|
58
61
|
const sections = [systemPrompt];
|
|
59
62
|
// Git state
|
|
60
63
|
sections.push('=== GIT STATE ===');
|
|
@@ -73,6 +76,10 @@ function assemblePrompt(branch, status, prs, context, systemPrompt) {
|
|
|
73
76
|
if (sessionSection)
|
|
74
77
|
sections.push(sessionSection);
|
|
75
78
|
}
|
|
79
|
+
// Lessons — condensed snippets for fast-boot command
|
|
80
|
+
const lessonSection = formatLessonSection(context.lessons, undefined, true);
|
|
81
|
+
if (lessonSection)
|
|
82
|
+
sections.push(lessonSection);
|
|
76
83
|
return sections.join('\n');
|
|
77
84
|
}
|
|
78
85
|
export async function briefingCommand(options) {
|
|
@@ -99,8 +106,8 @@ export async function briefingCommand(options) {
|
|
|
99
106
|
const query = `${branch} active work session priorities`;
|
|
100
107
|
log.info(TAG, 'Querying Totem index...');
|
|
101
108
|
const context = await retrieveContext(query, store);
|
|
102
|
-
const totalResults = context.specs.length + context.sessions.length;
|
|
103
|
-
log.info(TAG, `Found: ${context.specs.length} specs, ${context.sessions.length} sessions`);
|
|
109
|
+
const totalResults = context.specs.length + context.sessions.length + context.lessons.length;
|
|
110
|
+
log.info(TAG, `Found: ${context.specs.length} specs, ${context.sessions.length} sessions, ${context.lessons.length} lessons`);
|
|
104
111
|
// Resolve system prompt (allow .totem/prompts/briefing.md override)
|
|
105
112
|
const systemPrompt = getSystemPrompt('briefing', SYSTEM_PROMPT, cwd, config.totemDir);
|
|
106
113
|
// Assemble prompt
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"briefing.js","sourceRoot":"","sources":["../../src/commands/briefing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,OAAO,EACP,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,OAAO,EACP,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,2DAA2D;AAE3D,MAAM,GAAG,GAAG,UAAU,CAAC;AACvB,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,2DAA2D;AAE3D,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BrB,CAAC;
|
|
1
|
+
{"version":3,"file":"briefing.js","sourceRoot":"","sources":["../../src/commands/briefing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { formatPRList } from './briefing.js';
|
|
2
|
+
import { assemblePrompt, formatPRList } from './briefing.js';
|
|
3
3
|
describe('formatPRList', () => {
|
|
4
4
|
it('returns (none) for empty PR list', () => {
|
|
5
5
|
expect(formatPRList([])).toBe('(none)');
|
|
@@ -23,4 +23,36 @@ describe('formatPRList', () => {
|
|
|
23
23
|
expect(lines[1]).toContain('#2');
|
|
24
24
|
});
|
|
25
25
|
});
|
|
26
|
+
// ─── assemblePrompt ──────────────────────────────────────
|
|
27
|
+
describe('assemblePrompt', () => {
|
|
28
|
+
const makeLesson = (label) => ({
|
|
29
|
+
content: 'Lesson content here',
|
|
30
|
+
contextPrefix: '',
|
|
31
|
+
filePath: '.totem/lessons.md',
|
|
32
|
+
type: 'spec',
|
|
33
|
+
label,
|
|
34
|
+
score: 0.9,
|
|
35
|
+
metadata: {},
|
|
36
|
+
});
|
|
37
|
+
it('includes condensed lesson section when lessons are present', () => {
|
|
38
|
+
const context = { specs: [], sessions: [], lessons: [makeLesson('Test trap')] };
|
|
39
|
+
const result = assemblePrompt('main', '', [], context, 'SYSTEM');
|
|
40
|
+
expect(result).toContain('RELEVANT LESSONS (HARD CONSTRAINTS)');
|
|
41
|
+
expect(result).toContain('Test trap');
|
|
42
|
+
// Condensed mode: no score display
|
|
43
|
+
expect(result).not.toContain('score:');
|
|
44
|
+
});
|
|
45
|
+
it('omits lesson section when no lessons', () => {
|
|
46
|
+
const context = { specs: [], sessions: [], lessons: [] };
|
|
47
|
+
const result = assemblePrompt('main', '', [], context, 'SYSTEM');
|
|
48
|
+
expect(result).not.toContain('RELEVANT LESSONS');
|
|
49
|
+
});
|
|
50
|
+
it('includes git state and PR info', () => {
|
|
51
|
+
const prs = [{ number: 42, title: 'Widget', headRefName: 'feat/widget' }];
|
|
52
|
+
const context = { specs: [], sessions: [], lessons: [] };
|
|
53
|
+
const result = assemblePrompt('feat/widget', 'M src/index.ts', prs, context, 'SYSTEM');
|
|
54
|
+
expect(result).toContain('Branch: feat/widget');
|
|
55
|
+
expect(result).toContain('#42');
|
|
56
|
+
});
|
|
57
|
+
});
|
|
26
58
|
//# sourceMappingURL=briefing.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"briefing.test.js","sourceRoot":"","sources":["../../src/commands/briefing.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"briefing.test.js","sourceRoot":"","sources":["../../src/commands/briefing.test.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as readline from 'node:readline/promises';
|
|
2
2
|
import type { IngestTarget } from '@mmnto/totem';
|
|
3
|
+
export declare const REFLEX_VERSION = 2;
|
|
3
4
|
export interface HookInstallerResult {
|
|
4
5
|
file: string;
|
|
5
6
|
action: 'created' | 'exists' | 'skipped' | 'merged';
|
|
@@ -42,6 +43,24 @@ export declare function detectEmbeddingTier(cwd: string): EmbeddingTier;
|
|
|
42
43
|
* In non-TTY mode (CI), defaults to installing without prompting.
|
|
43
44
|
*/
|
|
44
45
|
export declare function installBaselineLessons(lessonsPath: string, rl: readline.Interface): Promise<'installed' | 'exists' | 'skipped'>;
|
|
46
|
+
export type ReflexStatus = 'current' | 'outdated' | 'missing';
|
|
47
|
+
/** Detect whether the reflex block in a file is current, outdated, or missing. */
|
|
48
|
+
export declare function detectReflexStatus(content: string): ReflexStatus;
|
|
49
|
+
/**
|
|
50
|
+
* Upgrade a reflex block from legacy (v1, no boundaries) or older versioned
|
|
51
|
+
* blocks to the current version. Returns the updated file content.
|
|
52
|
+
*
|
|
53
|
+
* Strategy:
|
|
54
|
+
* - If start/end boundaries exist, replace between them (clean swap).
|
|
55
|
+
* - If only the legacy sentinel exists (v1), find the block start and
|
|
56
|
+
* look for the next user-owned `## ` heading or EOF as the boundary.
|
|
57
|
+
* - If the boundary can't be determined cleanly, append the new block
|
|
58
|
+
* and set `clean: false` so the caller can warn about manual cleanup.
|
|
59
|
+
*/
|
|
60
|
+
export declare function upgradeReflexes(content: string): {
|
|
61
|
+
content: string;
|
|
62
|
+
clean: boolean;
|
|
63
|
+
};
|
|
45
64
|
export declare function initCommand(): Promise<void>;
|
|
46
65
|
export {};
|
|
47
66
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AAInD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AAInD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAWjD,eAAO,MAAM,cAAc,IAAI,CAAC;AA+DhC,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAUD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAInF;AAID;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAA0B,GACjC;IAAE,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAqB5D;AAuID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG;IACrD,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAuDA;AA8DD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC;IAAE,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAoD5D;AA2FD,KAAK,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAElD,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,aAAa,GAAG,MAAM,CAqC5F;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAY9D;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,QAAQ,CAAC,SAAS,GACrB,OAAO,CAAC,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC,CAwB7C;AAID,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAE9D,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAchE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CA+BpF;AAgCD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAuTjD"}
|