mustflow 2.75.2 → 2.85.4
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/README.md +40 -3
- package/dist/cli/commands/docs.js +86 -2
- package/dist/cli/commands/script-pack.js +9 -0
- package/dist/cli/i18n/en.js +180 -2
- package/dist/cli/i18n/es.js +180 -2
- package/dist/cli/i18n/fr.js +180 -2
- package/dist/cli/i18n/hi.js +180 -2
- package/dist/cli/i18n/ko.js +180 -2
- package/dist/cli/i18n/zh.js +180 -2
- package/dist/cli/lib/repo-map.js +27 -6
- package/dist/cli/lib/run-root-trust.js +15 -1
- package/dist/cli/lib/script-pack-registry.js +275 -6
- package/dist/cli/lib/validation/index.js +2 -2
- package/dist/cli/lib/validation/primitives.js +4 -1
- package/dist/cli/script-packs/code-change-impact.js +172 -0
- package/dist/cli/script-packs/code-dependency-graph.js +181 -0
- package/dist/cli/script-packs/code-export-diff.js +160 -0
- package/dist/cli/script-packs/code-outline.js +33 -5
- package/dist/cli/script-packs/code-route-outline.js +155 -0
- package/dist/cli/script-packs/docs-reference-drift.js +150 -0
- package/dist/cli/script-packs/repo-config-chain.js +163 -0
- package/dist/cli/script-packs/repo-env-contract.js +156 -0
- package/dist/cli/script-packs/repo-related-files.js +161 -0
- package/dist/cli/script-packs/repo-secret-risk-scan.js +147 -0
- package/dist/core/change-impact.js +383 -0
- package/dist/core/change-verification.js +32 -5
- package/dist/core/code-outline.js +460 -79
- package/dist/core/config-chain.js +595 -0
- package/dist/core/config-loading.js +121 -4
- package/dist/core/dependency-graph.js +490 -0
- package/dist/core/env-contract.js +450 -0
- package/dist/core/export-diff.js +359 -0
- package/dist/core/line-endings.js +26 -13
- package/dist/core/public-json-contracts.js +126 -0
- package/dist/core/reference-drift.js +388 -0
- package/dist/core/related-files.js +493 -0
- package/dist/core/route-outline.js +964 -0
- package/dist/core/script-pack-suggestions.js +131 -5
- package/dist/core/secret-risk-scan.js +440 -0
- package/dist/core/source-anchors.js +13 -1
- package/package.json +1 -1
- package/schemas/README.md +44 -6
- package/schemas/change-impact-report.schema.json +150 -0
- package/schemas/code-outline-report.schema.json +1 -1
- package/schemas/code-symbol-read-report.schema.json +64 -4
- package/schemas/commands.schema.json +12 -0
- package/schemas/config-chain-report.schema.json +187 -0
- package/schemas/dependency-graph-report.schema.json +149 -0
- package/schemas/env-contract-report.schema.json +203 -0
- package/schemas/export-diff-report.schema.json +220 -0
- package/schemas/reference-drift-report.schema.json +166 -0
- package/schemas/related-files-report.schema.json +145 -0
- package/schemas/route-outline-report.schema.json +200 -0
- package/schemas/secret-risk-scan-report.schema.json +152 -0
- package/templates/default/common/.mustflow/config/commands.toml +21 -0
- package/templates/default/i18n.toml +21 -9
- package/templates/default/locales/en/.mustflow/docs/agent-workflow.md +1 -1
- package/templates/default/locales/en/.mustflow/skills/INDEX.md +8 -2
- package/templates/default/locales/en/.mustflow/skills/architecture-deepening-review/SKILL.md +28 -11
- package/templates/default/locales/en/.mustflow/skills/astro-code-change/SKILL.md +71 -27
- package/templates/default/locales/en/.mustflow/skills/cross-agent-session-reference/SKILL.md +146 -0
- package/templates/default/locales/en/.mustflow/skills/dependency-upgrade-review/SKILL.md +3 -1
- package/templates/default/locales/en/.mustflow/skills/github-contribution-quality-gate/SKILL.md +48 -11
- package/templates/default/locales/en/.mustflow/skills/javascript-code-change/SKILL.md +15 -13
- package/templates/default/locales/en/.mustflow/skills/node-code-change/SKILL.md +16 -14
- package/templates/default/locales/en/.mustflow/skills/routes.toml +21 -9
- package/templates/default/locales/en/.mustflow/skills/security-privacy-review/SKILL.md +3 -1
- package/templates/default/locales/en/.mustflow/skills/test-suite-performance-review/SKILL.md +314 -0
- package/templates/default/locales/en/.mustflow/skills/typescript-code-change/SKILL.md +13 -10
- package/templates/default/manifest.toml +15 -1
package/README.md
CHANGED
|
@@ -127,8 +127,16 @@ mustflow installs and validates an agent workflow for user projects.
|
|
|
127
127
|
- Reports a read-only complexity budget in `mf api diff-risk --changed --json`, `mf verify`
|
|
128
128
|
evidence, and dashboard exports so agents justify new dependencies, helper-style surfaces,
|
|
129
129
|
config/schema churn, and broad structural changes before treating added complexity as free.
|
|
130
|
-
- Lists and runs bundled utility scripts through `mf script-pack`, including
|
|
131
|
-
|
|
130
|
+
- Lists, suggests, and runs bundled read-only utility scripts through `mf script-pack`, including
|
|
131
|
+
`code/outline` for source symbol maps, `code/dependency-graph` for bounded relative import graphs,
|
|
132
|
+
`code/change-impact` for git-diff impact and verification hints, `code/symbol-read` for focused source snippets,
|
|
133
|
+
`code/route-outline` for Hono, Elysia, Axum, and NestJS route maps, `docs/reference-drift` for stale
|
|
134
|
+
documentation references, `repo/config-chain` for nearby config inheritance,
|
|
135
|
+
`repo/env-contract` for environment-variable contract drift,
|
|
136
|
+
`repo/secret-risk-scan` for plausible hardcoded-secret findings without printing values,
|
|
137
|
+
`repo/generated-boundary` for candidate path safety checks, and `core/text-budget`
|
|
138
|
+
for exact file and JSON-field length budgets, so future checks do not sprawl into top-level
|
|
139
|
+
commands.
|
|
132
140
|
- Prints context trust metadata in `mf context --json` and prompt-cache bundles so agents can distinguish binding instructions, command contracts, contextual hints, generated evidence, and volatile runtime data before using them.
|
|
133
141
|
- Runs only allowed one-shot commands within a timeout via `mf run <intent>` or `mf verify` when the selected intent is runnable.
|
|
134
142
|
- Records blockers, contradictions, verification gaps, and remaining risks as a structured conflict ledger in verify, evidence, and dashboard reports.
|
|
@@ -283,7 +291,22 @@ mf run mustflow_update_apply
|
|
|
283
291
|
| `mf map --write` | Create or update `REPO_MAP.md`. |
|
|
284
292
|
| `mf quality check` | Inspect changed files for quality-gaming patterns without writing files. |
|
|
285
293
|
| `mf quality check --all` | Inspect every tracked text file for quality-gaming patterns. |
|
|
286
|
-
| `mf script-pack list` | List bundled script packs
|
|
294
|
+
| `mf script-pack list` | List bundled script packs, script refs, routing hints, side-effect flags, input/output labels, and JSON schema files. |
|
|
295
|
+
| `mf script-pack suggest --changed --json` | Rank optional read-only helpers for current changed files without running those helpers or granting command authority. |
|
|
296
|
+
| `mf script-pack suggest --path <path> --phase before_change` | Rank helpers for an explicit path and workflow phase before deciding which script to run. |
|
|
297
|
+
| `mf script-pack run code/outline scan <path...> --json` | Scan supported source files for symbol headers, line ranges, source anchors, return metadata, and content hashes. |
|
|
298
|
+
| `mf script-pack run code/dependency-graph scan <path...> --json` | Trace bounded relative import, export, require, and dynamic import edges for TypeScript and JavaScript source files. |
|
|
299
|
+
| `mf script-pack run code/change-impact analyze --base HEAD --json` | Analyze changed files and return bounded impact candidates, script-pack hints, and verification intent hints. |
|
|
300
|
+
| `mf script-pack run code/symbol-read read <path> --start-line <line> --json` | Read the focused symbol range or bounded source snippet after `code/outline` identifies the relevant location. |
|
|
301
|
+
| `mf script-pack run code/symbol-read read --anchor <id> --json` | Read the conservative target symbol for a structured `mf:anchor` source marker. |
|
|
302
|
+
| `mf script-pack run code/route-outline scan <path...> --json` | Scan Hono, Elysia, Axum, and NestJS files for route methods, paths, handlers, lifecycle chains, line ranges, and content hashes. |
|
|
303
|
+
| `mf script-pack run code/export-diff compare --base HEAD --json` | Compare exported TypeScript or JavaScript declarations, return metadata, and package surface hints against a git base. |
|
|
304
|
+
| `mf script-pack run docs/reference-drift check [path...] --json` | Check documentation references to `mf` commands, script-pack refs, schema files, and repository paths against current local surfaces. |
|
|
305
|
+
| `mf script-pack run repo/config-chain inspect <path...> --json` | Inspect nearby package, TypeScript, ESLint, Vite, Tailwind, test, and mustflow config files plus static inheritance edges without executing dynamic config code. |
|
|
306
|
+
| `mf script-pack run repo/env-contract scan [path...] --json` | Scan code, CI, docs, config, and env examples for environment-variable contract drift without reading or printing real secret env values. |
|
|
307
|
+
| `mf script-pack run repo/secret-risk-scan scan [path...] --json` | Scan code, docs, config, CI, and examples for plausible hardcoded secrets while reporting only redacted fingerprints. |
|
|
308
|
+
| `mf script-pack run repo/generated-boundary check <path...> --json` | Check whether candidate paths cross generated, ignored, protected, vendor, or cache boundaries before or after edits. |
|
|
309
|
+
| `mf script-pack run repo/related-files map <path...> --json` | Map direct imports, importers, same-basename siblings, and nearby config or package boundaries for source navigation. |
|
|
287
310
|
| `mf script-pack run core/text-budget check <path...> --max <count>` | Check exact text length budgets for files using grapheme counts by default. |
|
|
288
311
|
| `mf script-pack run core/text-budget check package.json --json-pointer /description --max <count> --json` | Check a JSON string field and print the stable report schema. |
|
|
289
312
|
| `mf run <intent>` | Run an allowed one-shot command. |
|
|
@@ -311,6 +334,20 @@ mf run mustflow_update_apply
|
|
|
311
334
|
|
|
312
335
|
Automation and agents should use `--json` output or `mf api serve --stdio` JSONL responses instead of parsing human-facing text. Published JSON Schemas for stable outputs live in `schemas/`.
|
|
313
336
|
|
|
337
|
+
For script-pack helper selection, start with `mf script-pack suggest --changed --json` or an
|
|
338
|
+
explicit `--path`. The suggestion report is only a ranking aid: it does not run scripts, prove
|
|
339
|
+
verification, or bypass `.mustflow/config/commands.toml`. A common source-orientation flow is
|
|
340
|
+
`code/outline` first, `code/dependency-graph` for relative import impact, then `code/symbol-read`
|
|
341
|
+
for the chosen symbol line or source anchor. After a local diff exists, use `code/change-impact`
|
|
342
|
+
to summarize changed surfaces, likely related files, optional helper scripts, and verification hints. After
|
|
343
|
+
public-ish TypeScript or JavaScript changes, use `code/export-diff` to review exported signatures
|
|
344
|
+
and return metadata against a git base. After docs, schema, CLI, or script-pack surface changes, use
|
|
345
|
+
`docs/reference-drift` to catch stale references before treating docs as synchronized. For
|
|
346
|
+
config-sensitive source or test work, use `repo/config-chain` before assuming effective inherited
|
|
347
|
+
rules. For generated or protected paths, use `repo/generated-boundary` before editing or when
|
|
348
|
+
reviewing a changed-file set. See the full
|
|
349
|
+
[`mf script-pack` documentation](https://0disoft.github.io/mustflow/commands/script-pack/).
|
|
350
|
+
|
|
314
351
|
`core/text-budget` counts `line` units by splitting text on line breaks; a trailing line break
|
|
315
352
|
therefore contributes an empty final line.
|
|
316
353
|
|
|
@@ -3,11 +3,13 @@ import path from 'node:path';
|
|
|
3
3
|
import { printUsageError, renderCliError, renderHelp } from '../lib/cli-output.js';
|
|
4
4
|
import { DOC_REVIEW_LEDGER_RELATIVE_PATH, DOC_REVIEW_STATUSES, REVIEWER_KINDS, addDocReviewEntry, commentDocReviewEntry, isReviewerKind, listDocReviewEntries, markDocReviewEntry, } from '../lib/doc-review-ledger.js';
|
|
5
5
|
import { ensureInside, readUtf8FileInsideWithoutSymlinks } from '../lib/filesystem.js';
|
|
6
|
+
import { GitChangedFilesError, requireGitChangedFiles } from '../lib/git-changes.js';
|
|
6
7
|
import { t } from '../lib/i18n.js';
|
|
7
8
|
import { getParsedCliStringOption, hasCliOptionToken, hasParsedCliOption, parseCliOptions, } from '../lib/option-parser.js';
|
|
8
9
|
import { resolveMustflowRoot } from '../lib/project-root.js';
|
|
9
10
|
const LIST_FLAGS = new Set(['--json', '--all']);
|
|
10
11
|
const LIST_VALUE_OPTIONS = new Set(['--status']);
|
|
12
|
+
const ADD_FLAGS = new Set(['--changed']);
|
|
11
13
|
const ADD_VALUE_OPTIONS = new Set(['--reason', '--origin', '--actor-kind', '--actor-id', '--comment', '--comment-file']);
|
|
12
14
|
const COMMENT_VALUE_OPTIONS = new Set(['--comment', '--comment-file', '--actor-kind', '--actor-id']);
|
|
13
15
|
const REVIEW_VALUE_OPTIONS = new Set([
|
|
@@ -27,6 +29,7 @@ export function getDocsHelp(lang = 'en') {
|
|
|
27
29
|
{ label: '--json', description: t(lang, 'cli.option.json') },
|
|
28
30
|
{ label: '--all', description: t(lang, 'docs.help.option.all') },
|
|
29
31
|
{ label: '--status <status>', description: t(lang, 'docs.help.option.status') },
|
|
32
|
+
{ label: '--changed', description: t(lang, 'docs.help.option.changed') },
|
|
30
33
|
{ label: '--reason <text>', description: t(lang, 'docs.help.option.reason') },
|
|
31
34
|
{ label: '--origin <value>', description: t(lang, 'docs.help.option.origin') },
|
|
32
35
|
{ label: '--actor-kind <kind>', description: t(lang, 'docs.help.option.actorKind') },
|
|
@@ -41,6 +44,7 @@ export function getDocsHelp(lang = 'en') {
|
|
|
41
44
|
examples: [
|
|
42
45
|
'mf docs review list',
|
|
43
46
|
'mf docs review add docs/guide.md --reason llm_modified --actor-kind llm --actor-id codex',
|
|
47
|
+
'mf docs review add --changed --actor-kind llm --actor-id codex',
|
|
44
48
|
'mf docs review comment docs/guide.md --comment-file review-note.md --actor-kind human --actor-id cherr',
|
|
45
49
|
'mf docs review approve docs/guide.md --reviewer-kind llm --reviewer-id opencode --summary "Rewritten for natural tone."',
|
|
46
50
|
],
|
|
@@ -183,6 +187,19 @@ function renderEntries(entries, lang) {
|
|
|
183
187
|
function renderEntryAction(action, path, lang) {
|
|
184
188
|
return `${t(lang, 'docs.review.wrote')}: ${DOC_REVIEW_LEDGER_RELATIVE_PATH}\n${action}: ${path}`;
|
|
185
189
|
}
|
|
190
|
+
function renderChangedAddAction(paths, lang) {
|
|
191
|
+
if (paths.length === 0) {
|
|
192
|
+
return t(lang, 'docs.review.changed.none');
|
|
193
|
+
}
|
|
194
|
+
const lines = [
|
|
195
|
+
`${t(lang, 'docs.review.wrote')}: ${DOC_REVIEW_LEDGER_RELATIVE_PATH}`,
|
|
196
|
+
t(lang, 'docs.review.changed.added', { count: paths.length }),
|
|
197
|
+
];
|
|
198
|
+
for (const path of paths) {
|
|
199
|
+
lines.push(`- ${path}`);
|
|
200
|
+
}
|
|
201
|
+
return lines.join('\n');
|
|
202
|
+
}
|
|
186
203
|
function getMarkedAction(status, lang) {
|
|
187
204
|
if (status === 'approved') {
|
|
188
205
|
return t(lang, 'docs.review.marked.approved');
|
|
@@ -196,6 +213,43 @@ function usageError(reporter, message, lang) {
|
|
|
196
213
|
printUsageError(reporter, message, 'mf docs --help', getDocsHelp(lang), lang);
|
|
197
214
|
return 1;
|
|
198
215
|
}
|
|
216
|
+
function normalizeChangedDocumentPath(relativePath) {
|
|
217
|
+
return relativePath.replace(/\\/gu, '/').replace(/^\.\//u, '');
|
|
218
|
+
}
|
|
219
|
+
function isChangedDocReviewPath(relativePath) {
|
|
220
|
+
const normalized = normalizeChangedDocumentPath(relativePath);
|
|
221
|
+
if (['AGENTS.md', 'CHANGELOG.md', 'README.md'].includes(normalized)) {
|
|
222
|
+
return true;
|
|
223
|
+
}
|
|
224
|
+
if (normalized === 'schemas/README.md') {
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
if (/^\.mustflow\/(?:context|docs)\/.+\.md$/u.test(normalized)) {
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
if (/^\.mustflow\/skills\/(?:INDEX\.md|[^/]+\/SKILL\.md)$/u.test(normalized)) {
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
if (/^docs-site\/src\/content\/docs\/.+\.md$/u.test(normalized)) {
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
if (/^templates\/default\/locales\/[^/]+\/AGENTS\.md$/u.test(normalized)) {
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
if (/^templates\/default\/locales\/[^/]+\/\.mustflow\/(?:context|docs)\/.+\.md$/u.test(normalized)) {
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
if (/^templates\/default\/locales\/[^/]+\/\.mustflow\/skills\/(?:INDEX\.md|[^/]+\/SKILL\.md)$/u.test(normalized)) {
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
if (/^templates\/default\/common\/\.mustflow\/(?:context|docs)\/.+\.md$/u.test(normalized)) {
|
|
246
|
+
return true;
|
|
247
|
+
}
|
|
248
|
+
if (/^tests\/fixtures\/.+\.md$/u.test(normalized)) {
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
199
253
|
function runReviewList(args, reporter, lang) {
|
|
200
254
|
const parsed = parseOptions(args, LIST_VALUE_OPTIONS, LIST_FLAGS);
|
|
201
255
|
if (parsed.error) {
|
|
@@ -236,15 +290,22 @@ function runReviewList(args, reporter, lang) {
|
|
|
236
290
|
* risk: state, data_consistency
|
|
237
291
|
*/
|
|
238
292
|
function runReviewAdd(args, reporter, lang) {
|
|
239
|
-
const parsed = parseOptions(args, ADD_VALUE_OPTIONS,
|
|
293
|
+
const parsed = parseOptions(args, ADD_VALUE_OPTIONS, ADD_FLAGS);
|
|
240
294
|
if (parsed.error) {
|
|
241
295
|
const message = parsed.error.missingValue
|
|
242
296
|
? t(lang, 'cli.error.missingValue', { option: parsed.error.option })
|
|
243
297
|
: t(lang, 'cli.error.unknownOption', { option: parsed.error.option });
|
|
244
298
|
return usageError(reporter, message, lang);
|
|
245
299
|
}
|
|
300
|
+
const addChanged = parsed.flags.has('--changed');
|
|
246
301
|
const [documentPath, unexpected] = parsed.positionals;
|
|
247
|
-
if (
|
|
302
|
+
if (addChanged && documentPath) {
|
|
303
|
+
return usageError(reporter, t(lang, 'docs.error.changedPathConflict'), lang);
|
|
304
|
+
}
|
|
305
|
+
if (addChanged && (parsed.values.has('--comment') || parsed.values.has('--comment-file'))) {
|
|
306
|
+
return usageError(reporter, t(lang, 'docs.error.changedCommentConflict'), lang);
|
|
307
|
+
}
|
|
308
|
+
if (!addChanged && !documentPath) {
|
|
248
309
|
return usageError(reporter, t(lang, 'docs.error.missingPath'), lang);
|
|
249
310
|
}
|
|
250
311
|
if (unexpected) {
|
|
@@ -255,6 +316,29 @@ function runReviewAdd(args, reporter, lang) {
|
|
|
255
316
|
return usageError(reporter, t(lang, 'docs.error.invalidReviewerKind', { kinds: REVIEWER_KINDS.join(', ') }), lang);
|
|
256
317
|
}
|
|
257
318
|
const projectRoot = resolveMustflowRoot();
|
|
319
|
+
if (addChanged) {
|
|
320
|
+
let changedPaths;
|
|
321
|
+
try {
|
|
322
|
+
changedPaths = requireGitChangedFiles(projectRoot);
|
|
323
|
+
}
|
|
324
|
+
catch (error) {
|
|
325
|
+
if (error instanceof GitChangedFilesError) {
|
|
326
|
+
reporter.stderr(renderCliError(t(lang, 'docs.error.changedFilesUnavailable', { message: error.result.message }), 'mf docs --help', lang));
|
|
327
|
+
return 1;
|
|
328
|
+
}
|
|
329
|
+
throw error;
|
|
330
|
+
}
|
|
331
|
+
const reviewPaths = changedPaths.map(normalizeChangedDocumentPath).filter(isChangedDocReviewPath);
|
|
332
|
+
const entries = reviewPaths.map((changedPath) => addDocReviewEntry(projectRoot, {
|
|
333
|
+
path: changedPath,
|
|
334
|
+
reason: parsed.values.get('--reason'),
|
|
335
|
+
origin: parsed.values.get('--origin'),
|
|
336
|
+
actorKind,
|
|
337
|
+
actorId: parsed.values.get('--actor-id'),
|
|
338
|
+
}));
|
|
339
|
+
reporter.stdout(renderChangedAddAction(entries.map((entry) => entry.path), lang));
|
|
340
|
+
return 0;
|
|
341
|
+
}
|
|
258
342
|
const commentResult = readReviewComment(projectRoot, parsed, lang);
|
|
259
343
|
if (commentResult.error) {
|
|
260
344
|
return usageError(reporter, commentResult.error, lang);
|
|
@@ -62,9 +62,18 @@ export function getScriptPackHelp(lang = 'en') {
|
|
|
62
62
|
'mf script-pack suggest --path src/cli/index.ts --phase before_change',
|
|
63
63
|
'mf script-pack suggest --changed --phase after_change --json',
|
|
64
64
|
'mf script-pack run code/outline scan src --json',
|
|
65
|
+
'mf script-pack run code/dependency-graph scan src/cli/index.ts --json',
|
|
66
|
+
'mf script-pack run code/change-impact analyze --base HEAD --json',
|
|
65
67
|
'mf script-pack run code/symbol-read read src/cli/index.ts --start-line 25 --json',
|
|
68
|
+
'mf script-pack run code/route-outline scan src/cli/index.ts --json',
|
|
69
|
+
'mf script-pack run code/export-diff compare --base HEAD~1 --head HEAD --json',
|
|
66
70
|
'mf script-pack run core/text-budget check README.md --max 5000',
|
|
71
|
+
'mf script-pack run docs/reference-drift check README.md schemas/README.md --json',
|
|
72
|
+
'mf script-pack run repo/config-chain inspect src/cli/index.ts --json',
|
|
73
|
+
'mf script-pack run repo/env-contract scan --json',
|
|
74
|
+
'mf script-pack run repo/secret-risk-scan scan src README.md --json',
|
|
67
75
|
'mf script-pack run repo/generated-boundary check src/cli/index.ts --json',
|
|
76
|
+
'mf script-pack run repo/related-files map src/cli/index.ts --json',
|
|
68
77
|
'mf script-pack run core/text-budget --help',
|
|
69
78
|
],
|
|
70
79
|
exitCodes: [
|
package/dist/cli/i18n/en.js
CHANGED
|
@@ -585,6 +585,7 @@ export const enMessages = {
|
|
|
585
585
|
"docs.help.summary": "Track documents that need prose review after LLM creation or modification.",
|
|
586
586
|
"docs.help.option.all": "Include approved and ignored documents",
|
|
587
587
|
"docs.help.option.status": "Filter by review status",
|
|
588
|
+
"docs.help.option.changed": "Add all currently changed documentation review candidates from git status",
|
|
588
589
|
"docs.help.option.reason": "Record why the document needs review",
|
|
589
590
|
"docs.help.option.origin": "Record the source of the review need, such as llm_modified",
|
|
590
591
|
"docs.help.option.actorKind": "Record who changed the document: human, llm, tool, or external",
|
|
@@ -600,6 +601,8 @@ export const enMessages = {
|
|
|
600
601
|
"docs.review.empty": "No documents require review.",
|
|
601
602
|
"docs.review.wrote": "Wrote",
|
|
602
603
|
"docs.review.added": "Added",
|
|
604
|
+
"docs.review.changed.none": "No changed documents require review.",
|
|
605
|
+
"docs.review.changed.added": "Added changed documents: {count}",
|
|
603
606
|
"docs.review.commented": "Commented",
|
|
604
607
|
"docs.review.marked.approved": "Approved",
|
|
605
608
|
"docs.review.marked.needs_human": "Marked as needs_human",
|
|
@@ -612,6 +615,9 @@ export const enMessages = {
|
|
|
612
615
|
"docs.error.emptyComment": "Review comment must not be empty",
|
|
613
616
|
"docs.error.commentSourceConflict": "Use either --comment or --comment-file, not both",
|
|
614
617
|
"docs.error.commentFileIsDocument": "--comment-file must not point to the document being reviewed",
|
|
618
|
+
"docs.error.changedPathConflict": "Use --changed without a document path",
|
|
619
|
+
"docs.error.changedCommentConflict": "Use --changed without --comment or --comment-file",
|
|
620
|
+
"docs.error.changedFilesUnavailable": "Could not inspect changed files with git status: {message}",
|
|
615
621
|
"docs.error.invalidStatus": "Invalid review status. Use one of: {statuses}",
|
|
616
622
|
"docs.error.invalidReviewerKind": "Invalid reviewer kind. Use one of: {kinds}",
|
|
617
623
|
"docs.error.missingReviewerKind": "Missing --reviewer-kind. Use one of: {kinds}",
|
|
@@ -765,11 +771,19 @@ Read these files before working:
|
|
|
765
771
|
"scriptPack.suggest.empty": "No script-pack suggestions matched the supplied paths, skills, or phases.",
|
|
766
772
|
"scriptPack.pack.code.summary": "Source-code orientation utility scripts",
|
|
767
773
|
"scriptPack.pack.core.summary": "Core built-in utility scripts",
|
|
774
|
+
"scriptPack.pack.docs.summary": "Documentation reference utility scripts",
|
|
768
775
|
"scriptPack.pack.repo.summary": "Repository-boundary utility scripts",
|
|
769
776
|
"scriptPack.script.codeOutline.summary": "Scan TypeScript and JavaScript files for symbol headers and line ranges",
|
|
770
|
-
"scriptPack.script.
|
|
777
|
+
"scriptPack.script.codeDependencyGraph.summary": "Trace relative TypeScript and JavaScript dependency graph edges",
|
|
778
|
+
"scriptPack.script.codeChangeImpact.summary": "Analyze changed files for impact, script-pack, and verification hints",
|
|
779
|
+
"scriptPack.script.codeSymbolRead.summary": "Read a bounded source snippet by source anchor, symbol line, or explicit line range",
|
|
780
|
+
"scriptPack.script.codeRouteOutline.summary": "Scan Hono, Elysia, Axum, and NestJS route methods, paths, handlers, and lifecycle chains",
|
|
781
|
+
"scriptPack.script.codeExportDiff.summary": "Compare exported source signatures and return metadata across git refs",
|
|
771
782
|
"scriptPack.script.textBudget.summary": "Check exact text length budgets for files or JSON string fields",
|
|
783
|
+
"scriptPack.script.referenceDrift.summary": "Check documented command, script-pack, schema, and path references for drift",
|
|
784
|
+
"scriptPack.script.configChain.summary": "Inspect nearby config files and static config inheritance",
|
|
772
785
|
"scriptPack.script.generatedBoundary.summary": "Check whether candidate paths cross generated, ignored, protected, vendor, or cache boundaries",
|
|
786
|
+
"scriptPack.script.relatedFiles.summary": "Map likely related files for source-oriented repository navigation",
|
|
773
787
|
"scriptPack.label.script": "Script",
|
|
774
788
|
"scriptPack.label.actions": "actions",
|
|
775
789
|
"scriptPack.label.schema": "schema",
|
|
@@ -796,7 +810,8 @@ Read these files before working:
|
|
|
796
810
|
"codeOutline.error.missingPath": "Provide at least one source file or directory to scan",
|
|
797
811
|
"codeOutline.error.invalidPositiveInteger": "{option} must be a positive safe integer: {value}",
|
|
798
812
|
"codeOutline.error.invalidNonNegativeInteger": "{option} must be a non-negative safe integer: {value}",
|
|
799
|
-
"codeSymbolRead.help.summary": "Read a bounded TypeScript or JavaScript source snippet from a symbol line or explicit line range.",
|
|
813
|
+
"codeSymbolRead.help.summary": "Read a bounded TypeScript or JavaScript source snippet from a source anchor, symbol line, or explicit line range.",
|
|
814
|
+
"codeSymbolRead.help.option.anchor": "Source anchor id to resolve to its target symbol",
|
|
800
815
|
"codeSymbolRead.help.option.startLine": "1-based source line to resolve to a symbol or range",
|
|
801
816
|
"codeSymbolRead.help.option.endLine": "Optional explicit 1-based end line; when omitted, the containing outline symbol is read",
|
|
802
817
|
"codeSymbolRead.help.option.contextLines": "Number of surrounding context lines to include. Default: 0",
|
|
@@ -813,6 +828,56 @@ Read these files before working:
|
|
|
813
828
|
"codeSymbolRead.error.missingPath": "Provide exactly one source file to read",
|
|
814
829
|
"codeSymbolRead.error.tooManyPaths": "Provide only one source file to read",
|
|
815
830
|
"codeSymbolRead.error.missingStartLine": "Provide --start-line <line>",
|
|
831
|
+
"codeSymbolRead.error.anchorConflict": "Use either --anchor <id> or <path> with --start-line/--end-line, not both",
|
|
832
|
+
"codeRouteOutline.help.summary": "Scan Hono, Elysia, Axum, and NestJS route source files for method, path, handler, lifecycle, and line metadata.",
|
|
833
|
+
"codeRouteOutline.help.option.maxFiles": "Maximum number of source files to scan. Default: 200",
|
|
834
|
+
"codeRouteOutline.help.option.maxFileBytes": "Maximum bytes to read from each source file. Default: 1048576",
|
|
835
|
+
"codeRouteOutline.help.exit.ok": "The route outline was scanned without findings",
|
|
836
|
+
"codeRouteOutline.help.exit.fail": "The route outline found invalid input, unreadable files, unsupported files, or scan limits",
|
|
837
|
+
"codeRouteOutline.title": "mustflow route outline",
|
|
838
|
+
"codeRouteOutline.label.files": "Files",
|
|
839
|
+
"codeRouteOutline.label.routes": "Routes",
|
|
840
|
+
"codeRouteOutline.label.findings": "Findings",
|
|
841
|
+
"codeRouteOutline.label.outline": "Route outline",
|
|
842
|
+
"codeRouteOutline.label.issues": "Issues",
|
|
843
|
+
"codeRouteOutline.clean": "No Hono, Elysia, Axum, or NestJS routes were found.",
|
|
844
|
+
"codeRouteOutline.error.missingAction": "Specify a route-outline action: scan",
|
|
845
|
+
"codeRouteOutline.error.unknownAction": "Unknown route-outline action: {action}",
|
|
846
|
+
"codeRouteOutline.error.missingPath": "Provide at least one source file or directory to scan",
|
|
847
|
+
"codeRouteOutline.error.invalidPositiveInteger": "{option} must be a positive safe integer: {value}",
|
|
848
|
+
"exportDiff.help.summary": "Compare exported TS/JS signatures, return metadata, and package surface hints across a git base and head.",
|
|
849
|
+
"exportDiff.help.option.base": "Git base ref to compare from. Default: HEAD",
|
|
850
|
+
"exportDiff.help.option.head": "Git head ref to compare to. Omit to compare the base with the working tree.",
|
|
851
|
+
"exportDiff.help.option.maxFiles": "Maximum number of changed source files to inspect. Default: 100",
|
|
852
|
+
"exportDiff.help.option.maxFileBytes": "Maximum bytes to read from each source file snapshot. Default: 1048576",
|
|
853
|
+
"exportDiff.help.exit.ok": "The export diff completed without input errors",
|
|
854
|
+
"exportDiff.help.exit.fail": "The export diff could not read git input or exceeded configured limits",
|
|
855
|
+
"exportDiff.title": "mustflow export diff",
|
|
856
|
+
"exportDiff.label.files": "Files",
|
|
857
|
+
"exportDiff.label.added": "Added",
|
|
858
|
+
"exportDiff.label.removed": "Removed",
|
|
859
|
+
"exportDiff.label.changed": "Changed",
|
|
860
|
+
"exportDiff.label.exports": "Exports",
|
|
861
|
+
"exportDiff.label.findings": "Findings",
|
|
862
|
+
"exportDiff.label.issues": "Issues",
|
|
863
|
+
"exportDiff.clean": "No exported TypeScript or JavaScript declaration changes were found.",
|
|
864
|
+
"exportDiff.error.missingAction": "Specify an export-diff action: compare",
|
|
865
|
+
"exportDiff.error.unknownAction": "Unknown export-diff action: {action}",
|
|
866
|
+
"exportDiff.error.invalidPositiveInteger": "{option} must be a positive safe integer: {value}",
|
|
867
|
+
"referenceDrift.help.summary": "Check documentation references against current mf commands, script-pack refs, schema files, and repository paths.",
|
|
868
|
+
"referenceDrift.help.option.maxFiles": "Maximum number of document files to inspect. Default: 200",
|
|
869
|
+
"referenceDrift.help.option.maxFileBytes": "Maximum bytes to read from each document file. Default: 524288",
|
|
870
|
+
"referenceDrift.help.exit.ok": "All checked documentation references resolved against current repository surfaces",
|
|
871
|
+
"referenceDrift.help.exit.fail": "A documentation reference was stale, missing, unknown, unreadable, or over a configured limit",
|
|
872
|
+
"referenceDrift.title": "mustflow reference drift",
|
|
873
|
+
"referenceDrift.label.files": "Files",
|
|
874
|
+
"referenceDrift.label.references": "References",
|
|
875
|
+
"referenceDrift.label.findings": "Findings",
|
|
876
|
+
"referenceDrift.label.issues": "Issues",
|
|
877
|
+
"referenceDrift.clean": "No documentation references were found.",
|
|
878
|
+
"referenceDrift.error.missingAction": "Specify a reference-drift action: check",
|
|
879
|
+
"referenceDrift.error.unknownAction": "Unknown reference-drift action: {action}",
|
|
880
|
+
"referenceDrift.error.invalidPositiveInteger": "{option} must be a positive safe integer: {value}",
|
|
816
881
|
"textBudget.help.summary": "Check exact text length budgets for files or JSON string fields using grapheme counts by default.",
|
|
817
882
|
"textBudget.help.option.min": "Require at least this many units",
|
|
818
883
|
"textBudget.help.option.max": "Require at most this many units",
|
|
@@ -849,6 +914,119 @@ Read these files before working:
|
|
|
849
914
|
"generatedBoundary.error.missingAction": "Specify a generated-boundary action: check",
|
|
850
915
|
"generatedBoundary.error.unknownAction": "Unknown generated-boundary action: {action}",
|
|
851
916
|
"generatedBoundary.error.missingPath": "Provide at least one path to check",
|
|
917
|
+
"dependencyGraph.help.summary": "Trace bounded relative import, export, require, and dynamic import edges for TypeScript and JavaScript source files.",
|
|
918
|
+
"dependencyGraph.help.option.maxDepth": "Maximum dependency depth from target files. Default: 2",
|
|
919
|
+
"dependencyGraph.help.option.maxFiles": "Maximum number of source files to scan. Default: 1000",
|
|
920
|
+
"dependencyGraph.help.option.maxFileBytes": "Maximum bytes to read from each source file. Default: 262144",
|
|
921
|
+
"dependencyGraph.help.option.maxNodes": "Maximum number of graph nodes to report. Default: 300",
|
|
922
|
+
"dependencyGraph.help.option.maxEdges": "Maximum number of graph edges to report. Default: 800",
|
|
923
|
+
"dependencyGraph.help.exit.ok": "The dependency graph completed without input or scan-limit findings",
|
|
924
|
+
"dependencyGraph.help.exit.fail": "The dependency graph found invalid input, unreadable paths, or scan limits",
|
|
925
|
+
"dependencyGraph.title": "mustflow dependency graph",
|
|
926
|
+
"dependencyGraph.label.targets": "Targets",
|
|
927
|
+
"dependencyGraph.label.nodes": "Nodes",
|
|
928
|
+
"dependencyGraph.label.edges": "Edges",
|
|
929
|
+
"dependencyGraph.label.cycles": "Cycles",
|
|
930
|
+
"dependencyGraph.label.truncated": "Truncated",
|
|
931
|
+
"dependencyGraph.label.cycleList": "Cycle hints",
|
|
932
|
+
"dependencyGraph.label.findings": "Findings",
|
|
933
|
+
"dependencyGraph.label.issues": "Issues",
|
|
934
|
+
"dependencyGraph.clean": "No relative dependency edges were found.",
|
|
935
|
+
"dependencyGraph.error.missingAction": "Specify a dependency-graph action: scan",
|
|
936
|
+
"dependencyGraph.error.unknownAction": "Unknown dependency-graph action: {action}",
|
|
937
|
+
"dependencyGraph.error.missingPath": "Provide at least one path to scan",
|
|
938
|
+
"dependencyGraph.error.invalidPositiveInteger": "{option} must be a positive safe integer: {value}",
|
|
939
|
+
"changeImpact.help.summary": "Analyze git changes and return bounded file-impact, script-pack, and verification hints.",
|
|
940
|
+
"changeImpact.help.option.base": "Git base ref to compare from. Default: HEAD",
|
|
941
|
+
"changeImpact.help.option.head": "Git head ref to compare to. Omit to compare the base with the working tree.",
|
|
942
|
+
"changeImpact.help.option.maxFiles": "Maximum number of changed files to inspect. Default: 200",
|
|
943
|
+
"changeImpact.help.option.maxImpacts": "Maximum number of impact candidates to report. Default: 300",
|
|
944
|
+
"changeImpact.help.option.maxFileBytes": "Maximum bytes to read from each source file while tracing dependencies. Default: 262144",
|
|
945
|
+
"changeImpact.help.exit.ok": "The change-impact analysis completed without input or scan-limit findings",
|
|
946
|
+
"changeImpact.help.exit.fail": "The change-impact analysis found invalid git input or scan limits",
|
|
947
|
+
"changeImpact.title": "mustflow change impact",
|
|
948
|
+
"changeImpact.label.changedFiles": "Changed files",
|
|
949
|
+
"changeImpact.label.impacts": "Impacts",
|
|
950
|
+
"changeImpact.label.truncated": "Truncated",
|
|
951
|
+
"changeImpact.label.scriptHints": "Script hints",
|
|
952
|
+
"changeImpact.label.verificationHints": "Verification hints",
|
|
953
|
+
"changeImpact.label.findings": "Findings",
|
|
954
|
+
"changeImpact.label.issues": "Issues",
|
|
955
|
+
"changeImpact.clean": "No changed files were found for the selected git range.",
|
|
956
|
+
"changeImpact.error.missingAction": "Specify a change-impact action: analyze",
|
|
957
|
+
"changeImpact.error.unknownAction": "Unknown change-impact action: {action}",
|
|
958
|
+
"changeImpact.error.invalidPositiveInteger": "{option} must be a positive safe integer: {value}",
|
|
959
|
+
"relatedFiles.help.summary": "Map direct imports, importers, sibling files, and nearby config boundaries for source-oriented repository navigation.",
|
|
960
|
+
"relatedFiles.help.option.maxFiles": "Maximum number of source or related files to scan. Default: 1000",
|
|
961
|
+
"relatedFiles.help.option.maxFileBytes": "Maximum bytes to read from each source file. Default: 262144",
|
|
962
|
+
"relatedFiles.help.option.maxCandidates": "Maximum number of related-file candidates to report. Default: 200",
|
|
963
|
+
"relatedFiles.help.exit.ok": "The related-file map completed without input or scan-limit findings",
|
|
964
|
+
"relatedFiles.help.exit.fail": "The related-file map found invalid input, unreadable paths, or scan limits",
|
|
965
|
+
"relatedFiles.title": "mustflow related files",
|
|
966
|
+
"relatedFiles.label.targets": "Targets",
|
|
967
|
+
"relatedFiles.label.candidates": "Candidates",
|
|
968
|
+
"relatedFiles.label.truncated": "Truncated",
|
|
969
|
+
"relatedFiles.label.related": "Related files",
|
|
970
|
+
"relatedFiles.label.confidence": "confidence",
|
|
971
|
+
"relatedFiles.label.findings": "Findings",
|
|
972
|
+
"relatedFiles.label.issues": "Issues",
|
|
973
|
+
"relatedFiles.clean": "No related-file candidates were found.",
|
|
974
|
+
"relatedFiles.error.missingAction": "Specify a related-files action: map",
|
|
975
|
+
"relatedFiles.error.unknownAction": "Unknown related-files action: {action}",
|
|
976
|
+
"relatedFiles.error.missingPath": "Provide at least one path to map",
|
|
977
|
+
"relatedFiles.error.invalidPositiveInteger": "{option} must be a positive safe integer: {value}",
|
|
978
|
+
"configChain.help.summary": "Inspect nearby config files, static inheritance, workspace hints, and dynamic config boundaries.",
|
|
979
|
+
"configChain.help.option.maxConfigs": "Maximum number of config files to inspect. Default: 120",
|
|
980
|
+
"configChain.help.option.maxFileBytes": "Maximum bytes to read from each config file. Default: 262144",
|
|
981
|
+
"configChain.help.exit.ok": "The config chain was inspected without blocking findings",
|
|
982
|
+
"configChain.help.exit.fail": "The config chain found invalid input, unreadable files, parse errors, or scan limits",
|
|
983
|
+
"configChain.title": "mustflow config chain",
|
|
984
|
+
"configChain.label.targets": "Targets",
|
|
985
|
+
"configChain.label.configs": "Configs",
|
|
986
|
+
"configChain.label.edges": "Edges",
|
|
987
|
+
"configChain.label.findings": "Findings",
|
|
988
|
+
"configChain.label.dynamic": "dynamic",
|
|
989
|
+
"configChain.label.issues": "Issues",
|
|
990
|
+
"configChain.clean": "No nearby config files were found.",
|
|
991
|
+
"configChain.error.missingAction": "Specify a config-chain action: inspect",
|
|
992
|
+
"configChain.error.unknownAction": "Unknown config-chain action: {action}",
|
|
993
|
+
"configChain.error.missingPath": "Provide at least one path to inspect",
|
|
994
|
+
"configChain.error.invalidPositiveInteger": "{option} must be a positive safe integer: {value}",
|
|
995
|
+
"scriptPack.script.envContract.summary": "Scan repository environment-variable contracts without reading secret values",
|
|
996
|
+
"envContract.help.summary": "Scan code, CI, docs, config, and env examples for environment variable contract drift without printing env values.",
|
|
997
|
+
"envContract.help.option.maxFiles": "Maximum number of files to inspect. Default: 1000",
|
|
998
|
+
"envContract.help.option.maxFileBytes": "Maximum bytes to read from each inspected file. Default: 262144",
|
|
999
|
+
"envContract.help.option.maxKeys": "Maximum number of env keys to report. Default: 300",
|
|
1000
|
+
"envContract.help.exit.ok": "The env contract scan completed without blocking findings",
|
|
1001
|
+
"envContract.help.exit.fail": "The env contract scan found invalid input, unreadable files, or contract findings",
|
|
1002
|
+
"envContract.title": "mustflow env contract",
|
|
1003
|
+
"envContract.label.files": "Files",
|
|
1004
|
+
"envContract.label.keys": "Keys",
|
|
1005
|
+
"envContract.label.findings": "Findings",
|
|
1006
|
+
"envContract.label.truncated": "Truncated",
|
|
1007
|
+
"envContract.label.issues": "Issues",
|
|
1008
|
+
"envContract.clean": "No environment variable references were found.",
|
|
1009
|
+
"envContract.error.missingAction": "Specify an env-contract action: scan",
|
|
1010
|
+
"envContract.error.unknownAction": "Unknown env-contract action: {action}",
|
|
1011
|
+
"envContract.error.invalidPositiveInteger": "{option} must be a positive safe integer: {value}",
|
|
1012
|
+
"scriptPack.script.secretRiskScan.summary": "Scan repository files for plausible secrets without printing secret values",
|
|
1013
|
+
"secretRiskScan.help.summary": "Scan code, docs, config, CI, and examples for plausible hardcoded secrets without printing secret values.",
|
|
1014
|
+
"secretRiskScan.help.option.maxFiles": "Maximum number of files to inspect. Default: 1000",
|
|
1015
|
+
"secretRiskScan.help.option.maxFileBytes": "Maximum bytes to read from each inspected file. Default: 262144",
|
|
1016
|
+
"secretRiskScan.help.option.maxFindings": "Maximum number of findings to report. Default: 200",
|
|
1017
|
+
"secretRiskScan.help.exit.ok": "The secret-risk scan completed without blocking findings",
|
|
1018
|
+
"secretRiskScan.help.exit.fail": "The secret-risk scan found invalid input, unreadable files, or secret-risk findings",
|
|
1019
|
+
"secretRiskScan.title": "mustflow secret risk scan",
|
|
1020
|
+
"secretRiskScan.label.files": "Files",
|
|
1021
|
+
"secretRiskScan.label.findings": "Findings",
|
|
1022
|
+
"secretRiskScan.label.highOrCritical": "High or critical",
|
|
1023
|
+
"secretRiskScan.label.skippedSecretFiles": "Skipped secret files",
|
|
1024
|
+
"secretRiskScan.label.truncated": "Truncated",
|
|
1025
|
+
"secretRiskScan.label.issues": "Issues",
|
|
1026
|
+
"secretRiskScan.clean": "No plausible hardcoded secrets were found.",
|
|
1027
|
+
"secretRiskScan.error.missingAction": "Specify a secret-risk-scan action: scan",
|
|
1028
|
+
"secretRiskScan.error.unknownAction": "Unknown secret-risk-scan action: {action}",
|
|
1029
|
+
"secretRiskScan.error.invalidPositiveInteger": "{option} must be a positive safe integer: {value}",
|
|
852
1030
|
"run.help.summary": "Run a configured oneshot command from .mustflow/config/commands.toml.",
|
|
853
1031
|
"run.help.option.dryRun": "Print a non-executing command plan",
|
|
854
1032
|
"run.help.option.planOnly": "Alias for --dry-run",
|