@mmnto/cli 1.5.10 → 1.6.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/github-cli-pr.d.ts +8 -0
- package/dist/adapters/github-cli-pr.d.ts.map +1 -1
- package/dist/adapters/github-cli-pr.js +34 -1
- package/dist/adapters/github-cli-pr.js.map +1 -1
- package/dist/adapters/pr-adapter.d.ts +8 -0
- package/dist/adapters/pr-adapter.d.ts.map +1 -1
- package/dist/commands/extract.d.ts +1 -0
- package/dist/commands/extract.d.ts.map +1 -1
- package/dist/commands/extract.js +1 -1
- package/dist/commands/extract.js.map +1 -1
- package/dist/commands/ledger-analyzer.d.ts.map +1 -1
- package/dist/commands/ledger-analyzer.js +2 -0
- package/dist/commands/ledger-analyzer.js.map +1 -1
- package/dist/commands/review-learn.d.ts.map +1 -1
- package/dist/commands/review-learn.js +38 -1
- package/dist/commands/review-learn.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 +59 -5
- package/dist/commands/shield.js.map +1 -1
- package/dist/commands/triage-pr.d.ts +4 -1
- package/dist/commands/triage-pr.d.ts.map +1 -1
- package/dist/commands/triage-pr.js +262 -3
- package/dist/commands/triage-pr.js.map +1 -1
- package/dist/exemptions/__tests__/exemption-engine.test.d.ts +2 -0
- package/dist/exemptions/__tests__/exemption-engine.test.d.ts.map +1 -0
- package/dist/exemptions/__tests__/exemption-engine.test.js +317 -0
- package/dist/exemptions/__tests__/exemption-engine.test.js.map +1 -0
- package/dist/exemptions/exemption-engine.d.ts +27 -0
- package/dist/exemptions/exemption-engine.d.ts.map +1 -0
- package/dist/exemptions/exemption-engine.js +193 -0
- package/dist/exemptions/exemption-engine.js.map +1 -0
- package/dist/exemptions/exemption-schema.d.ts +127 -0
- package/dist/exemptions/exemption-schema.d.ts.map +1 -0
- package/dist/exemptions/exemption-schema.js +32 -0
- package/dist/exemptions/exemption-schema.js.map +1 -0
- package/dist/exemptions/exemption-store.d.ts +22 -0
- package/dist/exemptions/exemption-store.d.ts.map +1 -0
- package/dist/exemptions/exemption-store.js +80 -0
- package/dist/exemptions/exemption-store.js.map +1 -0
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/parsers/bot-review-parser.d.ts +8 -0
- package/dist/parsers/bot-review-parser.d.ts.map +1 -1
- package/dist/parsers/bot-review-parser.js +48 -11
- package/dist/parsers/bot-review-parser.js.map +1 -1
- package/dist/parsers/bot-review-parser.test.js +108 -1
- package/dist/parsers/bot-review-parser.test.js.map +1 -1
- package/dist/services/__tests__/deferred-issuer.test.d.ts +2 -0
- package/dist/services/__tests__/deferred-issuer.test.d.ts.map +1 -0
- package/dist/services/__tests__/deferred-issuer.test.js +115 -0
- package/dist/services/__tests__/deferred-issuer.test.js.map +1 -0
- package/dist/services/__tests__/fix-dispatcher.test.d.ts +2 -0
- package/dist/services/__tests__/fix-dispatcher.test.d.ts.map +1 -0
- package/dist/services/__tests__/fix-dispatcher.test.js +129 -0
- package/dist/services/__tests__/fix-dispatcher.test.js.map +1 -0
- package/dist/services/deferred-issuer.d.ts +17 -0
- package/dist/services/deferred-issuer.d.ts.map +1 -0
- package/dist/services/deferred-issuer.js +64 -0
- package/dist/services/deferred-issuer.js.map +1 -0
- package/dist/services/fix-dispatcher.d.ts +19 -0
- package/dist/services/fix-dispatcher.d.ts.map +1 -0
- package/dist/services/fix-dispatcher.js +100 -0
- package/dist/services/fix-dispatcher.js.map +1 -0
- package/dist/utils/__tests__/milestone-inference.test.d.ts +2 -0
- package/dist/utils/__tests__/milestone-inference.test.d.ts.map +1 -0
- package/dist/utils/__tests__/milestone-inference.test.js +35 -0
- package/dist/utils/__tests__/milestone-inference.test.js.map +1 -0
- package/dist/utils/milestone-inference.d.ts +6 -0
- package/dist/utils/milestone-inference.d.ts.map +1 -0
- package/dist/utils/milestone-inference.js +15 -0
- package/dist/utils/milestone-inference.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { safeExec } from '@mmnto/totem';
|
|
4
|
+
const FIX_SYSTEM_PROMPT = `You are a code fix agent. Given a file and a review finding, produce the COMPLETE fixed file content.
|
|
5
|
+
|
|
6
|
+
Rules:
|
|
7
|
+
- Output ONLY the fixed file content inside a single code block
|
|
8
|
+
- Do NOT add explanations before or after the code block
|
|
9
|
+
- Make the MINIMAL change needed to address the finding
|
|
10
|
+
- Do NOT refactor surrounding code or add features
|
|
11
|
+
- Preserve all existing formatting, comments, and structure`;
|
|
12
|
+
/**
|
|
13
|
+
* Apply a fix for a single finding: read file, LLM patch, write, commit, return SHA.
|
|
14
|
+
* Sequential — no concurrency concerns.
|
|
15
|
+
*/
|
|
16
|
+
export async function dispatchFix(opts) {
|
|
17
|
+
const { filePath, line, findingBody, findingTool, cwd, onLog } = opts;
|
|
18
|
+
// 1. Validate and read the target file
|
|
19
|
+
const absPath = path.resolve(cwd, filePath);
|
|
20
|
+
if (!absPath.startsWith(path.resolve(cwd))) {
|
|
21
|
+
return { applied: false, reason: `Path traversal blocked: ${filePath}` };
|
|
22
|
+
}
|
|
23
|
+
let originalContent;
|
|
24
|
+
try {
|
|
25
|
+
originalContent = fs.readFileSync(absPath, 'utf-8');
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
29
|
+
return { applied: false, reason: `Cannot read ${filePath}: ${msg}` };
|
|
30
|
+
}
|
|
31
|
+
// 2. Build prompt
|
|
32
|
+
const lineContext = line != null ? `The finding is at line ${line}.` : '';
|
|
33
|
+
const prompt = [
|
|
34
|
+
FIX_SYSTEM_PROMPT,
|
|
35
|
+
'',
|
|
36
|
+
`=== FILE: ${filePath} ===`,
|
|
37
|
+
'```',
|
|
38
|
+
originalContent,
|
|
39
|
+
'```',
|
|
40
|
+
'',
|
|
41
|
+
`=== FINDING (${findingTool}) ===`,
|
|
42
|
+
lineContext,
|
|
43
|
+
findingBody,
|
|
44
|
+
'',
|
|
45
|
+
`Output the complete fixed file content in a single code block.`,
|
|
46
|
+
].join('\n');
|
|
47
|
+
// 3. Call LLM
|
|
48
|
+
onLog?.(`Generating fix for ${filePath}...`);
|
|
49
|
+
let response;
|
|
50
|
+
try {
|
|
51
|
+
response = await opts.runOrchestrator(prompt);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
55
|
+
return { applied: false, reason: `LLM call failed: ${msg}` };
|
|
56
|
+
}
|
|
57
|
+
if (!response) {
|
|
58
|
+
return { applied: false, reason: 'No response from LLM' };
|
|
59
|
+
}
|
|
60
|
+
// 4. Extract code block from response
|
|
61
|
+
const codeMatch = response.match(/```(?:\w+)?\s*\n([\s\S]*?)```/);
|
|
62
|
+
if (!codeMatch?.[1]) {
|
|
63
|
+
return { applied: false, reason: 'Could not extract code block from LLM response' };
|
|
64
|
+
}
|
|
65
|
+
const fixedContent = codeMatch[1];
|
|
66
|
+
// 5. Check if content actually changed
|
|
67
|
+
if (fixedContent.trim() === originalContent.trim()) {
|
|
68
|
+
onLog?.(`No changes needed for ${filePath}`);
|
|
69
|
+
return { applied: false, reason: 'LLM returned unchanged content' };
|
|
70
|
+
}
|
|
71
|
+
// 6. Write fixed file
|
|
72
|
+
fs.writeFileSync(absPath, fixedContent, 'utf-8');
|
|
73
|
+
// 7. Commit (rollback file on failure)
|
|
74
|
+
const summaryLine = findingBody
|
|
75
|
+
.split('\n')
|
|
76
|
+
.find((l) => l.trim())
|
|
77
|
+
?.replace(/^[#*>\-\s]+/, '')
|
|
78
|
+
.slice(0, 60) ?? 'bot review fix';
|
|
79
|
+
const commitMsg = `fix: ${summaryLine}\n\nFinding: ${findingTool} on ${filePath}${line != null ? `:${line}` : ''}`;
|
|
80
|
+
try {
|
|
81
|
+
safeExec('git', ['add', filePath], { cwd });
|
|
82
|
+
safeExec('git', ['commit', '-m', commitMsg], { cwd });
|
|
83
|
+
const sha = safeExec('git', ['rev-parse', '--short', 'HEAD'], { cwd }).trim();
|
|
84
|
+
onLog?.(`Committed fix: ${sha}`);
|
|
85
|
+
return { applied: true, commitSha: sha };
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
// Rollback: restore original content and unstage
|
|
89
|
+
try {
|
|
90
|
+
fs.writeFileSync(absPath, originalContent, 'utf-8');
|
|
91
|
+
safeExec('git', ['reset', 'HEAD', '--', filePath], { cwd });
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Best-effort rollback
|
|
95
|
+
}
|
|
96
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
97
|
+
return { applied: false, reason: `Git commit failed (rolled back): ${msg}` };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=fix-dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-dispatcher.js","sourceRoot":"","sources":["../../src/services/fix-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,MAAM,iBAAiB,GAAG;;;;;;;4DAOkC,CAAC;AAQ7D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAQjC;IACC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAEtE,uCAAuC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,QAAQ,EAAE,EAAE,CAAC;IAC3E,CAAC;IACD,IAAI,eAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,QAAQ,KAAK,GAAG,EAAE,EAAE,CAAC;IACvE,CAAC;IAED,kBAAkB;IAClB,MAAM,WAAW,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,0BAA0B,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,MAAM,GAAG;QACb,iBAAiB;QACjB,EAAE;QACF,aAAa,QAAQ,MAAM;QAC3B,KAAK;QACL,eAAe;QACf,KAAK;QACL,EAAE;QACF,gBAAgB,WAAW,OAAO;QAClC,WAAW;QACX,WAAW;QACX,EAAE;QACF,gEAAgE;KACjE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,cAAc;IACd,KAAK,EAAE,CAAC,sBAAsB,QAAQ,KAAK,CAAC,CAAC;IAC7C,IAAI,QAA4B,CAAC;IACjC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,GAAG,EAAE,EAAE,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IAC5D,CAAC;IAED,sCAAsC;IACtC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAClE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,gDAAgD,EAAE,CAAC;IACtF,CAAC;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAElC,uCAAuC;IACvC,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;QACnD,KAAK,EAAE,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC;IACtE,CAAC;IAED,sBAAsB;IACtB,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAEjD,uCAAuC;IACvC,MAAM,WAAW,GACf,WAAW;SACR,KAAK,CAAC,IAAI,CAAC;SACX,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtB,EAAE,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC;IACtC,MAAM,SAAS,GAAG,QAAQ,WAAW,gBAAgB,WAAW,OAAO,QAAQ,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAEnH,IAAI,CAAC;QACH,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5C,QAAQ,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9E,KAAK,EAAE,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,iDAAiD;QACjD,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;YACpD,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,oCAAoC,GAAG,EAAE,EAAE,CAAC;IAC/E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"milestone-inference.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/milestone-inference.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { inferNextMilestone } from '../milestone-inference.js';
|
|
3
|
+
describe('inferNextMilestone', () => {
|
|
4
|
+
it('bumps minor version: 1.6.0 → 1.7.0', () => {
|
|
5
|
+
expect(inferNextMilestone('1.6.0')).toBe('1.7.0');
|
|
6
|
+
});
|
|
7
|
+
it('preserves v prefix: v1.6.0 → v1.7.0', () => {
|
|
8
|
+
expect(inferNextMilestone('v1.6.0')).toBe('v1.7.0');
|
|
9
|
+
});
|
|
10
|
+
it('strips title suffix: 1.6.0 — Pipeline Maturity → 1.7.0', () => {
|
|
11
|
+
expect(inferNextMilestone('1.6.0 — Pipeline Maturity')).toBe('1.7.0');
|
|
12
|
+
});
|
|
13
|
+
it('bumps major milestone: v2.0.0 → v2.1.0', () => {
|
|
14
|
+
expect(inferNextMilestone('v2.0.0')).toBe('v2.1.0');
|
|
15
|
+
});
|
|
16
|
+
it('bumps from 0.0.1 → 0.1.0', () => {
|
|
17
|
+
expect(inferNextMilestone('0.0.1')).toBe('0.1.0');
|
|
18
|
+
});
|
|
19
|
+
it('returns undefined for non-semver string: Sprint 4', () => {
|
|
20
|
+
expect(inferNextMilestone('Sprint 4')).toBeUndefined();
|
|
21
|
+
});
|
|
22
|
+
it('returns undefined for non-semver string: MVP', () => {
|
|
23
|
+
expect(inferNextMilestone('MVP')).toBeUndefined();
|
|
24
|
+
});
|
|
25
|
+
it('returns undefined for undefined input', () => {
|
|
26
|
+
expect(inferNextMilestone(undefined)).toBeUndefined();
|
|
27
|
+
});
|
|
28
|
+
it('returns undefined for null input', () => {
|
|
29
|
+
expect(inferNextMilestone(null)).toBeUndefined();
|
|
30
|
+
});
|
|
31
|
+
it('returns undefined for empty string', () => {
|
|
32
|
+
expect(inferNextMilestone('')).toBeUndefined();
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=milestone-inference.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"milestone-inference.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/milestone-inference.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Infer the next milestone from the current one by bumping the minor version.
|
|
3
|
+
* Returns undefined for non-semver strings.
|
|
4
|
+
*/
|
|
5
|
+
export declare function inferNextMilestone(current: string | undefined | null): string | undefined;
|
|
6
|
+
//# sourceMappingURL=milestone-inference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"milestone-inference.d.ts","sourceRoot":"","sources":["../../src/utils/milestone-inference.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAOzF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Infer the next milestone from the current one by bumping the minor version.
|
|
3
|
+
* Returns undefined for non-semver strings.
|
|
4
|
+
*/
|
|
5
|
+
export function inferNextMilestone(current) {
|
|
6
|
+
if (!current)
|
|
7
|
+
return undefined;
|
|
8
|
+
// Match milestone titles like "1.6.0", "v1.6.0", "1.6.0 — Pipeline Maturity"
|
|
9
|
+
const match = current.match(/^(v?)(\d+)\.(\d+)\.(\d+)/);
|
|
10
|
+
if (!match)
|
|
11
|
+
return undefined;
|
|
12
|
+
const [, prefix, major, minor, _patch] = match;
|
|
13
|
+
return `${prefix}${major}.${Number(minor) + 1}.0`;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=milestone-inference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"milestone-inference.js","sourceRoot":"","sources":["../../src/utils/milestone-inference.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAkC;IACnE,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,6EAA6E;IAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAC/C,OAAO,GAAG,MAAM,GAAG,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mmnto/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "CLI for Totem — AI persistent memory and context layer",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"smol-toml": "^1.6.1",
|
|
24
24
|
"yaml": "^2.4.0",
|
|
25
25
|
"zod": "^3.24.0",
|
|
26
|
-
"@mmnto/totem": "1.
|
|
26
|
+
"@mmnto/totem": "1.6.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@anthropic-ai/sdk": "^0.78.0",
|