mustflow 2.74.2 → 2.74.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.
Files changed (37) hide show
  1. package/dist/cli/commands/script-pack.js +132 -3
  2. package/dist/cli/i18n/en.js +30 -3
  3. package/dist/cli/i18n/es.js +30 -3
  4. package/dist/cli/i18n/fr.js +30 -3
  5. package/dist/cli/i18n/hi.js +30 -3
  6. package/dist/cli/i18n/ko.js +30 -3
  7. package/dist/cli/i18n/zh.js +30 -3
  8. package/dist/cli/lib/script-pack-registry.js +53 -0
  9. package/dist/cli/script-packs/repo-generated-boundary.js +94 -0
  10. package/dist/core/generated-boundary.js +231 -0
  11. package/dist/core/public-json-contracts.js +35 -0
  12. package/dist/core/script-pack-suggestions.js +199 -0
  13. package/package.json +1 -1
  14. package/schemas/README.md +8 -1
  15. package/schemas/generated-boundary-report.schema.json +148 -0
  16. package/schemas/script-pack-catalog.schema.json +32 -0
  17. package/schemas/script-pack-suggestion-report.schema.json +159 -0
  18. package/templates/default/common/.mustflow/config/commands.toml +32 -0
  19. package/templates/default/i18n.toml +17 -17
  20. package/templates/default/locales/en/.mustflow/skills/INDEX.md +4 -4
  21. package/templates/default/locales/en/.mustflow/skills/astro-code-change/SKILL.md +5 -3
  22. package/templates/default/locales/en/.mustflow/skills/completion-evidence-gate/SKILL.md +4 -1
  23. package/templates/default/locales/en/.mustflow/skills/dependency-upgrade-review/SKILL.md +7 -7
  24. package/templates/default/locales/en/.mustflow/skills/elysia-code-change/SKILL.md +15 -8
  25. package/templates/default/locales/en/.mustflow/skills/external-skill-intake/SKILL.md +10 -5
  26. package/templates/default/locales/en/.mustflow/skills/public-json-contract-change/SKILL.md +5 -2
  27. package/templates/default/locales/en/.mustflow/skills/rate-limit-integrity-review/SKILL.md +7 -4
  28. package/templates/default/locales/en/.mustflow/skills/repo-improvement-loop/SKILL.md +6 -2
  29. package/templates/default/locales/en/.mustflow/skills/rust-code-change/SKILL.md +4 -3
  30. package/templates/default/locales/en/.mustflow/skills/skill-authoring/SKILL.md +3 -1
  31. package/templates/default/locales/en/.mustflow/skills/skill-refresh/SKILL.md +19 -2
  32. package/templates/default/locales/en/.mustflow/skills/tailwind-code-change/SKILL.md +12 -9
  33. package/templates/default/locales/en/.mustflow/skills/template-install-surface-sync/SKILL.md +6 -3
  34. package/templates/default/locales/en/.mustflow/skills/typescript-code-change/SKILL.md +22 -17
  35. package/templates/default/locales/en/.mustflow/skills/unocss-code-change/SKILL.md +16 -5
  36. package/templates/default/locales/en/.mustflow/skills/version-freshness-check/SKILL.md +8 -8
  37. package/templates/default/manifest.toml +1 -1
@@ -1,9 +1,17 @@
1
1
  import { printUsageError, renderHelp } from '../lib/cli-output.js';
2
2
  import { t } from '../lib/i18n.js';
3
- import { formatCliOptionParseError, hasCliOptionToken, hasParsedCliOption, parseCliOptions, } from '../lib/option-parser.js';
3
+ import { formatCliOptionParseError, getParsedCliStringOption, hasCliOptionToken, hasParsedCliOption, parseCliOptions, } from '../lib/option-parser.js';
4
4
  import { resolveMustflowRoot } from '../lib/project-root.js';
5
- import { findScriptPackScript, SCRIPT_PACKS, } from '../lib/script-pack-registry.js';
5
+ import { findScriptPackScript, listScriptPackScripts, SCRIPT_PACKS, } from '../lib/script-pack-registry.js';
6
+ import { createScriptPackSuggestionReport, isScriptPackSuggestionPhase, } from '../../core/script-pack-suggestions.js';
6
7
  const SCRIPT_PACK_LIST_OPTIONS = [{ name: '--json', kind: 'boolean' }];
8
+ const SCRIPT_PACK_SUGGEST_OPTIONS = [
9
+ { name: '--json', kind: 'boolean' },
10
+ { name: '--changed', kind: 'boolean' },
11
+ { name: '--phase', kind: 'string' },
12
+ { name: '--skill', kind: 'string' },
13
+ { name: '--path', kind: 'string' },
14
+ ];
7
15
  function createCatalogReport(mustflowRoot, packs) {
8
16
  return {
9
17
  schema_version: '1',
@@ -20,6 +28,16 @@ function createCatalogReport(mustflowRoot, packs) {
20
28
  usage: script.usage,
21
29
  summary_key: script.summaryKey,
22
30
  actions: script.actions,
31
+ use_when: script.useWhen,
32
+ phases: script.phases,
33
+ read_only: script.readOnly,
34
+ mutates: script.mutates,
35
+ network: script.network,
36
+ inputs: script.inputs,
37
+ outputs: script.outputs,
38
+ related_skills: script.relatedSkills,
39
+ risk_level: script.riskLevel,
40
+ cost: script.cost,
23
41
  report_schema_file: script.reportSchemaFile,
24
42
  })),
25
43
  })),
@@ -28,16 +46,23 @@ function createCatalogReport(mustflowRoot, packs) {
28
46
  }
29
47
  export function getScriptPackHelp(lang = 'en') {
30
48
  return renderHelp({
31
- usage: 'mf script-pack <list|run> [options]',
49
+ usage: 'mf script-pack <list|suggest|run> [options]',
32
50
  summary: t(lang, 'scriptPack.help.summary'),
33
51
  options: [
34
52
  { label: '--json', description: t(lang, 'cli.option.json') },
53
+ { label: '--changed', description: t(lang, 'scriptPack.help.option.changed') },
54
+ { label: '--phase <phase>', description: t(lang, 'scriptPack.help.option.phase') },
55
+ { label: '--skill <skill>', description: t(lang, 'scriptPack.help.option.skill') },
56
+ { label: '--path <path>', description: t(lang, 'scriptPack.help.option.path') },
35
57
  { label: '-h, --help', description: t(lang, 'cli.option.help') },
36
58
  ],
37
59
  examples: [
38
60
  'mf script-pack list',
39
61
  'mf script-pack list --json',
62
+ 'mf script-pack suggest --path src/cli/index.ts --phase before_change',
63
+ 'mf script-pack suggest --changed --phase after_change --json',
40
64
  'mf script-pack run core/text-budget check README.md --max 5000',
65
+ 'mf script-pack run repo/generated-boundary check src/cli/index.ts --json',
41
66
  'mf script-pack run core/text-budget --help',
42
67
  ],
43
68
  exitCodes: [
@@ -67,6 +92,83 @@ function parseListOptions(args, lang) {
67
92
  }
68
93
  return { json };
69
94
  }
95
+ function getParsedCliStringOccurrences(parsed, name) {
96
+ return parsed.occurrences
97
+ .filter((occurrence) => occurrence.name === name && typeof occurrence.value === 'string')
98
+ .map((occurrence) => String(occurrence.value));
99
+ }
100
+ function parseSuggestOptions(args, lang) {
101
+ const parsed = parseCliOptions(args, SCRIPT_PACK_SUGGEST_OPTIONS, { allowPositionals: true });
102
+ const json = hasParsedCliOption(parsed, '--json');
103
+ const changed = hasParsedCliOption(parsed, '--changed');
104
+ const phases = getParsedCliStringOccurrences(parsed, '--phase');
105
+ const invalidPhase = phases.find((phase) => !isScriptPackSuggestionPhase(phase));
106
+ if (parsed.error) {
107
+ return { json, changed, phases: [], skills: [], paths: parsed.positionals, error: formatCliOptionParseError(parsed.error, lang) };
108
+ }
109
+ if (invalidPhase) {
110
+ return {
111
+ json,
112
+ changed,
113
+ phases: [],
114
+ skills: [],
115
+ paths: parsed.positionals,
116
+ error: t(lang, 'scriptPack.error.unknownPhase', { phase: invalidPhase }),
117
+ };
118
+ }
119
+ const optionPaths = getParsedCliStringOccurrences(parsed, '--path');
120
+ const firstPath = getParsedCliStringOption(parsed, '--path');
121
+ const paths = optionPaths.length > 0 ? optionPaths : firstPath ? [firstPath] : [];
122
+ const skills = getParsedCliStringOccurrences(parsed, '--skill');
123
+ const selectorsPresent = changed || phases.length > 0 || skills.length > 0 || paths.length > 0 || parsed.positionals.length > 0;
124
+ if (!selectorsPresent) {
125
+ return {
126
+ json,
127
+ changed,
128
+ phases: phases.filter(isScriptPackSuggestionPhase),
129
+ skills,
130
+ paths,
131
+ error: t(lang, 'scriptPack.error.missingSuggestInput'),
132
+ };
133
+ }
134
+ return {
135
+ json,
136
+ changed,
137
+ phases: phases.filter(isScriptPackSuggestionPhase),
138
+ skills,
139
+ paths: [...paths, ...parsed.positionals],
140
+ };
141
+ }
142
+ function renderSuggestionSummary(report, lang) {
143
+ const lines = [
144
+ t(lang, 'scriptPack.suggest.title'),
145
+ `${t(lang, 'label.status')}: ${report.status}`,
146
+ `${t(lang, 'scriptPack.suggest.label.suggestions')}: ${report.suggestions.length}`,
147
+ ];
148
+ if (report.analyzed_paths.length > 0) {
149
+ lines.push(t(lang, 'scriptPack.suggest.label.analyzedPaths'));
150
+ for (const entry of report.analyzed_paths) {
151
+ lines.push(`- ${entry.path}: ${entry.surfaces.join(', ')}`);
152
+ }
153
+ }
154
+ if (report.suggestions.length > 0) {
155
+ lines.push(t(lang, 'scriptPack.suggest.label.recommendations'));
156
+ for (const suggestion of report.suggestions) {
157
+ lines.push(`- ${suggestion.script_ref}: ${suggestion.confidence}, score ${suggestion.score}`);
158
+ for (const reason of suggestion.reasons) {
159
+ lines.push(` - ${reason}`);
160
+ }
161
+ lines.push(` - ${t(lang, 'scriptPack.suggest.label.runHint')}: ${suggestion.run_hint}`);
162
+ }
163
+ }
164
+ else {
165
+ lines.push(t(lang, 'scriptPack.suggest.empty'));
166
+ }
167
+ if (report.issues.length > 0) {
168
+ lines.push(t(lang, 'generatedBoundary.label.issues'), ...report.issues.map((issue) => `- ${issue}`));
169
+ }
170
+ return lines.join('\n');
171
+ }
70
172
  async function runScriptPackList(args, reporter, lang) {
71
173
  if (hasCliOptionToken(args, '--help', ['-h'])) {
72
174
  reporter.stdout(getScriptPackHelp(lang));
@@ -85,6 +187,30 @@ async function runScriptPackList(args, reporter, lang) {
85
187
  reporter.stdout(renderCatalogSummary(report, lang));
86
188
  return 0;
87
189
  }
190
+ async function runScriptPackSuggest(args, reporter, lang) {
191
+ if (hasCliOptionToken(args, '--help', ['-h'])) {
192
+ reporter.stdout(getScriptPackHelp(lang));
193
+ return 0;
194
+ }
195
+ const options = parseSuggestOptions(args, lang);
196
+ if (options.error) {
197
+ printUsageError(reporter, options.error, 'mf script-pack suggest --help', getScriptPackHelp(lang), lang);
198
+ return 1;
199
+ }
200
+ const report = createScriptPackSuggestionReport(resolveMustflowRoot(), {
201
+ changed: options.changed,
202
+ phases: options.phases,
203
+ skills: options.skills,
204
+ paths: options.paths,
205
+ scripts: listScriptPackScripts(),
206
+ });
207
+ if (options.json) {
208
+ reporter.stdout(JSON.stringify(report, null, 2));
209
+ return 0;
210
+ }
211
+ reporter.stdout(renderSuggestionSummary(report, lang));
212
+ return 0;
213
+ }
88
214
  async function runScriptPackScript(args, reporter, lang) {
89
215
  const [scriptRef, ...scriptArgs] = args;
90
216
  if (args.length === 1 && hasCliOptionToken(args, '--help', ['-h'])) {
@@ -116,6 +242,9 @@ export async function runScriptPack(args, reporter, lang = 'en') {
116
242
  if (action === 'list') {
117
243
  return runScriptPackList(rest, reporter, lang);
118
244
  }
245
+ if (action === 'suggest') {
246
+ return runScriptPackSuggest(rest, reporter, lang);
247
+ }
119
248
  if (action === 'run') {
120
249
  return runScriptPackScript(rest, reporter, lang);
121
250
  }
@@ -40,7 +40,7 @@ export const enMessages = {
40
40
  "command.map.summary": "Generate REPO_MAP.md",
41
41
  "command.lineEndings.summary": "Inspect and normalize line-ending policy",
42
42
  "command.quality.summary": "Inspect changed files for quality-gaming patterns",
43
- "command.scriptPack.summary": "List and run bundled mustflow script packs",
43
+ "command.scriptPack.summary": "List, suggest, and run bundled mustflow script packs",
44
44
  "command.run.summary": "Run a configured oneshot command",
45
45
  "command.context.summary": "Print machine-readable agent context",
46
46
  "command.tech.summary": "Manage technology preferences for agents",
@@ -749,19 +749,33 @@ Read these files before working:
749
749
  "quality.clean": "No quality-gaming risks found.",
750
750
  "quality.error.missingAction": "Specify a quality action: check",
751
751
  "quality.error.unknownAction": "Unknown quality action: {action}",
752
- "scriptPack.help.summary": "List and run bundled mustflow script-pack utilities through one stable command namespace.",
752
+ "scriptPack.help.summary": "List, suggest, and run bundled mustflow script-pack utilities through one stable command namespace.",
753
753
  "scriptPack.help.exit.ok": "The script-pack command completed successfully",
754
754
  "scriptPack.help.exit.fail": "The script-pack command received invalid input or the selected script failed",
755
+ "scriptPack.help.option.changed": "Suggest scripts for current Git working-tree changes",
756
+ "scriptPack.help.option.phase": "Limit suggestions to before_change, during_change, after_change, or review",
757
+ "scriptPack.help.option.skill": "Prefer scripts related to a mustflow skill name",
758
+ "scriptPack.help.option.path": "Add a candidate path to classify for script suggestions",
755
759
  "scriptPack.title": "mustflow script packs",
760
+ "scriptPack.suggest.title": "mustflow script suggestions",
761
+ "scriptPack.suggest.label.suggestions": "Suggestions",
762
+ "scriptPack.suggest.label.analyzedPaths": "Analyzed paths",
763
+ "scriptPack.suggest.label.recommendations": "Recommendations",
764
+ "scriptPack.suggest.label.runHint": "Run hint",
765
+ "scriptPack.suggest.empty": "No script-pack suggestions matched the supplied paths, skills, or phases.",
756
766
  "scriptPack.pack.core.summary": "Core built-in utility scripts",
767
+ "scriptPack.pack.repo.summary": "Repository-boundary utility scripts",
757
768
  "scriptPack.script.textBudget.summary": "Check exact text length budgets for files or JSON string fields",
769
+ "scriptPack.script.generatedBoundary.summary": "Check whether candidate paths cross generated, ignored, protected, vendor, or cache boundaries",
758
770
  "scriptPack.label.script": "Script",
759
771
  "scriptPack.label.actions": "actions",
760
772
  "scriptPack.label.schema": "schema",
761
- "scriptPack.error.missingAction": "Specify a script-pack action: list or run",
773
+ "scriptPack.error.missingAction": "Specify a script-pack action: list, suggest, or run",
762
774
  "scriptPack.error.unknownAction": "Unknown script-pack action: {action}",
763
775
  "scriptPack.error.missingScript": "Specify a script ref such as core/text-budget",
764
776
  "scriptPack.error.unknownScript": "Unknown script-pack script: {script}",
777
+ "scriptPack.error.missingSuggestInput": "Provide at least one suggestion input: --path <path>, --changed, --phase <phase>, or --skill <skill>",
778
+ "scriptPack.error.unknownPhase": "Unknown script-pack phase: {phase}",
765
779
  "textBudget.help.summary": "Check exact text length budgets for files or JSON string fields using grapheme counts by default.",
766
780
  "textBudget.help.option.min": "Require at least this many units",
767
781
  "textBudget.help.option.max": "Require at most this many units",
@@ -785,6 +799,19 @@ Read these files before working:
785
799
  "textBudget.error.invalidNumber": "{option} must be a non-negative safe integer: {value}",
786
800
  "textBudget.error.invalidUnit": "Unknown text-budget unit: {unit}. Use one of: {allowed}",
787
801
  "textBudget.error.minGreaterThanMax": "--min must be less than or equal to --max",
802
+ "generatedBoundary.help.summary": "Check whether candidate edit paths cross generated, ignored, protected, vendor, or cache boundaries.",
803
+ "generatedBoundary.help.exit.ok": "Every checked target stayed within ordinary editable project paths",
804
+ "generatedBoundary.help.exit.fail": "A target crossed a generated, ignored, protected, vendor, cache, or root boundary",
805
+ "generatedBoundary.title": "mustflow generated boundary",
806
+ "generatedBoundary.label.checkedTargets": "Checked targets",
807
+ "generatedBoundary.label.findings": "Findings",
808
+ "generatedBoundary.label.targets": "Targets",
809
+ "generatedBoundary.label.boundaries": "boundaries",
810
+ "generatedBoundary.label.issues": "Issues",
811
+ "generatedBoundary.clean": "No generated, ignored, protected, vendor, or cache boundaries matched.",
812
+ "generatedBoundary.error.missingAction": "Specify a generated-boundary action: check",
813
+ "generatedBoundary.error.unknownAction": "Unknown generated-boundary action: {action}",
814
+ "generatedBoundary.error.missingPath": "Provide at least one path to check",
788
815
  "run.help.summary": "Run a configured oneshot command from .mustflow/config/commands.toml.",
789
816
  "run.help.option.dryRun": "Print a non-executing command plan",
790
817
  "run.help.option.planOnly": "Alias for --dry-run",
@@ -40,7 +40,7 @@ export const esMessages = {
40
40
  "command.map.summary": "Genera REPO_MAP.md",
41
41
  "command.lineEndings.summary": "Inspecciona y normaliza la política de finales de línea",
42
42
  "command.quality.summary": "Inspect changed files for quality-gaming patterns",
43
- "command.scriptPack.summary": "List and run bundled mustflow script packs",
43
+ "command.scriptPack.summary": "List, suggest, and run bundled mustflow script packs",
44
44
  "command.run.summary": "Ejecuta un comando configurado de una sola ejecución",
45
45
  "command.context.summary": "Imprime contexto de agente legible por máquinas",
46
46
  "command.tech.summary": "Gestiona preferencias tecnológicas para agentes",
@@ -749,19 +749,33 @@ Lee estos archivos antes de trabajar:
749
749
  "quality.clean": "No quality-gaming risks found.",
750
750
  "quality.error.missingAction": "Specify a quality action: check",
751
751
  "quality.error.unknownAction": "Unknown quality action: {action}",
752
- "scriptPack.help.summary": "List and run bundled mustflow script-pack utilities through one stable command namespace.",
752
+ "scriptPack.help.summary": "List, suggest, and run bundled mustflow script-pack utilities through one stable command namespace.",
753
753
  "scriptPack.help.exit.ok": "The script-pack command completed successfully",
754
754
  "scriptPack.help.exit.fail": "The script-pack command received invalid input or the selected script failed",
755
+ "scriptPack.help.option.changed": "Suggest scripts for current Git working-tree changes",
756
+ "scriptPack.help.option.phase": "Limit suggestions to before_change, during_change, after_change, or review",
757
+ "scriptPack.help.option.skill": "Prefer scripts related to a mustflow skill name",
758
+ "scriptPack.help.option.path": "Add a candidate path to classify for script suggestions",
755
759
  "scriptPack.title": "mustflow script packs",
760
+ "scriptPack.suggest.title": "mustflow script suggestions",
761
+ "scriptPack.suggest.label.suggestions": "Suggestions",
762
+ "scriptPack.suggest.label.analyzedPaths": "Analyzed paths",
763
+ "scriptPack.suggest.label.recommendations": "Recommendations",
764
+ "scriptPack.suggest.label.runHint": "Run hint",
765
+ "scriptPack.suggest.empty": "No script-pack suggestions matched the supplied paths, skills, or phases.",
756
766
  "scriptPack.pack.core.summary": "Core built-in utility scripts",
767
+ "scriptPack.pack.repo.summary": "Repository-boundary utility scripts",
757
768
  "scriptPack.script.textBudget.summary": "Check exact text length budgets for files or JSON string fields",
769
+ "scriptPack.script.generatedBoundary.summary": "Check whether candidate paths cross generated, ignored, protected, vendor, or cache boundaries",
758
770
  "scriptPack.label.script": "Script",
759
771
  "scriptPack.label.actions": "actions",
760
772
  "scriptPack.label.schema": "schema",
761
- "scriptPack.error.missingAction": "Specify a script-pack action: list or run",
773
+ "scriptPack.error.missingAction": "Specify a script-pack action: list, suggest, or run",
762
774
  "scriptPack.error.unknownAction": "Unknown script-pack action: {action}",
763
775
  "scriptPack.error.missingScript": "Specify a script ref such as core/text-budget",
764
776
  "scriptPack.error.unknownScript": "Unknown script-pack script: {script}",
777
+ "scriptPack.error.missingSuggestInput": "Provide at least one suggestion input: --path <path>, --changed, --phase <phase>, or --skill <skill>",
778
+ "scriptPack.error.unknownPhase": "Unknown script-pack phase: {phase}",
765
779
  "textBudget.help.summary": "Check exact text length budgets for files or JSON string fields using grapheme counts by default.",
766
780
  "textBudget.help.option.min": "Require at least this many units",
767
781
  "textBudget.help.option.max": "Require at most this many units",
@@ -785,6 +799,19 @@ Lee estos archivos antes de trabajar:
785
799
  "textBudget.error.invalidNumber": "{option} must be a non-negative safe integer: {value}",
786
800
  "textBudget.error.invalidUnit": "Unknown text-budget unit: {unit}. Use one of: {allowed}",
787
801
  "textBudget.error.minGreaterThanMax": "--min must be less than or equal to --max",
802
+ "generatedBoundary.help.summary": "Check whether candidate edit paths cross generated, ignored, protected, vendor, or cache boundaries.",
803
+ "generatedBoundary.help.exit.ok": "Every checked target stayed within ordinary editable project paths",
804
+ "generatedBoundary.help.exit.fail": "A target crossed a generated, ignored, protected, vendor, cache, or root boundary",
805
+ "generatedBoundary.title": "mustflow generated boundary",
806
+ "generatedBoundary.label.checkedTargets": "Checked targets",
807
+ "generatedBoundary.label.findings": "Findings",
808
+ "generatedBoundary.label.targets": "Targets",
809
+ "generatedBoundary.label.boundaries": "boundaries",
810
+ "generatedBoundary.label.issues": "Issues",
811
+ "generatedBoundary.clean": "No generated, ignored, protected, vendor, or cache boundaries matched.",
812
+ "generatedBoundary.error.missingAction": "Specify a generated-boundary action: check",
813
+ "generatedBoundary.error.unknownAction": "Unknown generated-boundary action: {action}",
814
+ "generatedBoundary.error.missingPath": "Provide at least one path to check",
788
815
  "run.help.summary": "Ejecuta un comando configurado de una sola ejecución desde .mustflow/config/commands.toml.",
789
816
  "run.help.option.dryRun": "Imprime un plan de comando sin ejecutarlo",
790
817
  "run.help.option.planOnly": "Alias de --dry-run",
@@ -40,7 +40,7 @@ export const frMessages = {
40
40
  "command.map.summary": "Génère REPO_MAP.md",
41
41
  "command.lineEndings.summary": "Inspecte et normalise la politique de fins de ligne",
42
42
  "command.quality.summary": "Inspect changed files for quality-gaming patterns",
43
- "command.scriptPack.summary": "List and run bundled mustflow script packs",
43
+ "command.scriptPack.summary": "List, suggest, and run bundled mustflow script packs",
44
44
  "command.run.summary": "Exécute une commande configurée à exécution unique",
45
45
  "command.context.summary": "Imprime le contexte d'agent lisible par machine",
46
46
  "command.tech.summary": "Gère les préférences technologiques pour les agents",
@@ -749,19 +749,33 @@ Lisez ces fichiers avant de travailler :
749
749
  "quality.clean": "No quality-gaming risks found.",
750
750
  "quality.error.missingAction": "Specify a quality action: check",
751
751
  "quality.error.unknownAction": "Unknown quality action: {action}",
752
- "scriptPack.help.summary": "List and run bundled mustflow script-pack utilities through one stable command namespace.",
752
+ "scriptPack.help.summary": "List, suggest, and run bundled mustflow script-pack utilities through one stable command namespace.",
753
753
  "scriptPack.help.exit.ok": "The script-pack command completed successfully",
754
754
  "scriptPack.help.exit.fail": "The script-pack command received invalid input or the selected script failed",
755
+ "scriptPack.help.option.changed": "Suggest scripts for current Git working-tree changes",
756
+ "scriptPack.help.option.phase": "Limit suggestions to before_change, during_change, after_change, or review",
757
+ "scriptPack.help.option.skill": "Prefer scripts related to a mustflow skill name",
758
+ "scriptPack.help.option.path": "Add a candidate path to classify for script suggestions",
755
759
  "scriptPack.title": "mustflow script packs",
760
+ "scriptPack.suggest.title": "mustflow script suggestions",
761
+ "scriptPack.suggest.label.suggestions": "Suggestions",
762
+ "scriptPack.suggest.label.analyzedPaths": "Analyzed paths",
763
+ "scriptPack.suggest.label.recommendations": "Recommendations",
764
+ "scriptPack.suggest.label.runHint": "Run hint",
765
+ "scriptPack.suggest.empty": "No script-pack suggestions matched the supplied paths, skills, or phases.",
756
766
  "scriptPack.pack.core.summary": "Core built-in utility scripts",
767
+ "scriptPack.pack.repo.summary": "Repository-boundary utility scripts",
757
768
  "scriptPack.script.textBudget.summary": "Check exact text length budgets for files or JSON string fields",
769
+ "scriptPack.script.generatedBoundary.summary": "Check whether candidate paths cross generated, ignored, protected, vendor, or cache boundaries",
758
770
  "scriptPack.label.script": "Script",
759
771
  "scriptPack.label.actions": "actions",
760
772
  "scriptPack.label.schema": "schema",
761
- "scriptPack.error.missingAction": "Specify a script-pack action: list or run",
773
+ "scriptPack.error.missingAction": "Specify a script-pack action: list, suggest, or run",
762
774
  "scriptPack.error.unknownAction": "Unknown script-pack action: {action}",
763
775
  "scriptPack.error.missingScript": "Specify a script ref such as core/text-budget",
764
776
  "scriptPack.error.unknownScript": "Unknown script-pack script: {script}",
777
+ "scriptPack.error.missingSuggestInput": "Provide at least one suggestion input: --path <path>, --changed, --phase <phase>, or --skill <skill>",
778
+ "scriptPack.error.unknownPhase": "Unknown script-pack phase: {phase}",
765
779
  "textBudget.help.summary": "Check exact text length budgets for files or JSON string fields using grapheme counts by default.",
766
780
  "textBudget.help.option.min": "Require at least this many units",
767
781
  "textBudget.help.option.max": "Require at most this many units",
@@ -785,6 +799,19 @@ Lisez ces fichiers avant de travailler :
785
799
  "textBudget.error.invalidNumber": "{option} must be a non-negative safe integer: {value}",
786
800
  "textBudget.error.invalidUnit": "Unknown text-budget unit: {unit}. Use one of: {allowed}",
787
801
  "textBudget.error.minGreaterThanMax": "--min must be less than or equal to --max",
802
+ "generatedBoundary.help.summary": "Check whether candidate edit paths cross generated, ignored, protected, vendor, or cache boundaries.",
803
+ "generatedBoundary.help.exit.ok": "Every checked target stayed within ordinary editable project paths",
804
+ "generatedBoundary.help.exit.fail": "A target crossed a generated, ignored, protected, vendor, cache, or root boundary",
805
+ "generatedBoundary.title": "mustflow generated boundary",
806
+ "generatedBoundary.label.checkedTargets": "Checked targets",
807
+ "generatedBoundary.label.findings": "Findings",
808
+ "generatedBoundary.label.targets": "Targets",
809
+ "generatedBoundary.label.boundaries": "boundaries",
810
+ "generatedBoundary.label.issues": "Issues",
811
+ "generatedBoundary.clean": "No generated, ignored, protected, vendor, or cache boundaries matched.",
812
+ "generatedBoundary.error.missingAction": "Specify a generated-boundary action: check",
813
+ "generatedBoundary.error.unknownAction": "Unknown generated-boundary action: {action}",
814
+ "generatedBoundary.error.missingPath": "Provide at least one path to check",
788
815
  "run.help.summary": "Exécute une commande configurée à exécution unique depuis .mustflow/config/commands.toml.",
789
816
  "run.help.option.dryRun": "Imprime un plan de commande sans l'exécuter",
790
817
  "run.help.option.planOnly": "Alias de --dry-run",
@@ -40,7 +40,7 @@ export const hiMessages = {
40
40
  "command.map.summary": "REPO_MAP.md बनाएँ",
41
41
  "command.lineEndings.summary": "लाइन-एंडिंग नीति की जाँच और सामान्यीकरण करें",
42
42
  "command.quality.summary": "Inspect changed files for quality-gaming patterns",
43
- "command.scriptPack.summary": "List and run bundled mustflow script packs",
43
+ "command.scriptPack.summary": "List, suggest, and run bundled mustflow script packs",
44
44
  "command.run.summary": "कॉन्फ़िगर की गई एक-बार चलने वाली कमांड चलाएँ",
45
45
  "command.context.summary": "मशीन-पठनीय एजेंट संदर्भ प्रिंट करें",
46
46
  "command.tech.summary": "एजेंटों के लिए technology preferences प्रबंधित करें",
@@ -749,19 +749,33 @@ export const hiMessages = {
749
749
  "quality.clean": "No quality-gaming risks found.",
750
750
  "quality.error.missingAction": "Specify a quality action: check",
751
751
  "quality.error.unknownAction": "Unknown quality action: {action}",
752
- "scriptPack.help.summary": "List and run bundled mustflow script-pack utilities through one stable command namespace.",
752
+ "scriptPack.help.summary": "List, suggest, and run bundled mustflow script-pack utilities through one stable command namespace.",
753
753
  "scriptPack.help.exit.ok": "The script-pack command completed successfully",
754
754
  "scriptPack.help.exit.fail": "The script-pack command received invalid input or the selected script failed",
755
+ "scriptPack.help.option.changed": "Suggest scripts for current Git working-tree changes",
756
+ "scriptPack.help.option.phase": "Limit suggestions to before_change, during_change, after_change, or review",
757
+ "scriptPack.help.option.skill": "Prefer scripts related to a mustflow skill name",
758
+ "scriptPack.help.option.path": "Add a candidate path to classify for script suggestions",
755
759
  "scriptPack.title": "mustflow script packs",
760
+ "scriptPack.suggest.title": "mustflow script suggestions",
761
+ "scriptPack.suggest.label.suggestions": "Suggestions",
762
+ "scriptPack.suggest.label.analyzedPaths": "Analyzed paths",
763
+ "scriptPack.suggest.label.recommendations": "Recommendations",
764
+ "scriptPack.suggest.label.runHint": "Run hint",
765
+ "scriptPack.suggest.empty": "No script-pack suggestions matched the supplied paths, skills, or phases.",
756
766
  "scriptPack.pack.core.summary": "Core built-in utility scripts",
767
+ "scriptPack.pack.repo.summary": "Repository-boundary utility scripts",
757
768
  "scriptPack.script.textBudget.summary": "Check exact text length budgets for files or JSON string fields",
769
+ "scriptPack.script.generatedBoundary.summary": "Check whether candidate paths cross generated, ignored, protected, vendor, or cache boundaries",
758
770
  "scriptPack.label.script": "Script",
759
771
  "scriptPack.label.actions": "actions",
760
772
  "scriptPack.label.schema": "schema",
761
- "scriptPack.error.missingAction": "Specify a script-pack action: list or run",
773
+ "scriptPack.error.missingAction": "Specify a script-pack action: list, suggest, or run",
762
774
  "scriptPack.error.unknownAction": "Unknown script-pack action: {action}",
763
775
  "scriptPack.error.missingScript": "Specify a script ref such as core/text-budget",
764
776
  "scriptPack.error.unknownScript": "Unknown script-pack script: {script}",
777
+ "scriptPack.error.missingSuggestInput": "Provide at least one suggestion input: --path <path>, --changed, --phase <phase>, or --skill <skill>",
778
+ "scriptPack.error.unknownPhase": "Unknown script-pack phase: {phase}",
765
779
  "textBudget.help.summary": "Check exact text length budgets for files or JSON string fields using grapheme counts by default.",
766
780
  "textBudget.help.option.min": "Require at least this many units",
767
781
  "textBudget.help.option.max": "Require at most this many units",
@@ -785,6 +799,19 @@ export const hiMessages = {
785
799
  "textBudget.error.invalidNumber": "{option} must be a non-negative safe integer: {value}",
786
800
  "textBudget.error.invalidUnit": "Unknown text-budget unit: {unit}. Use one of: {allowed}",
787
801
  "textBudget.error.minGreaterThanMax": "--min must be less than or equal to --max",
802
+ "generatedBoundary.help.summary": "Check whether candidate edit paths cross generated, ignored, protected, vendor, or cache boundaries.",
803
+ "generatedBoundary.help.exit.ok": "Every checked target stayed within ordinary editable project paths",
804
+ "generatedBoundary.help.exit.fail": "A target crossed a generated, ignored, protected, vendor, cache, or root boundary",
805
+ "generatedBoundary.title": "mustflow generated boundary",
806
+ "generatedBoundary.label.checkedTargets": "Checked targets",
807
+ "generatedBoundary.label.findings": "Findings",
808
+ "generatedBoundary.label.targets": "Targets",
809
+ "generatedBoundary.label.boundaries": "boundaries",
810
+ "generatedBoundary.label.issues": "Issues",
811
+ "generatedBoundary.clean": "No generated, ignored, protected, vendor, or cache boundaries matched.",
812
+ "generatedBoundary.error.missingAction": "Specify a generated-boundary action: check",
813
+ "generatedBoundary.error.unknownAction": "Unknown generated-boundary action: {action}",
814
+ "generatedBoundary.error.missingPath": "Provide at least one path to check",
788
815
  "run.help.summary": ".mustflow/config/commands.toml से कॉन्फ़िगर की गई एक-बार चलने वाली कमांड चलाएँ।",
789
816
  "run.help.option.dryRun": "कमांड चलाए बिना उसका plan प्रिंट करें",
790
817
  "run.help.option.planOnly": "--dry-run का alias",
@@ -40,7 +40,7 @@ export const koMessages = {
40
40
  "command.map.summary": "REPO_MAP.md를 작성합니다",
41
41
  "command.lineEndings.summary": "줄바꿈 정책을 검사하고 정규화합니다",
42
42
  "command.quality.summary": "변경 파일의 품질 지표 꼼수를 검사합니다",
43
- "command.scriptPack.summary": "mustflow 내장 script pack을 나열하고 실행합니다",
43
+ "command.scriptPack.summary": "mustflow 내장 script pack을 나열, 추천, 실행합니다",
44
44
  "command.run.summary": "설정된 일회성 명령을 실행합니다",
45
45
  "command.context.summary": "에이전트 작업 맥락을 출력합니다",
46
46
  "command.tech.summary": "에이전트용 기술 선호를 관리합니다",
@@ -749,19 +749,33 @@ export const koMessages = {
749
749
  "quality.clean": "품질 지표 꼼수가 발견되지 않았습니다.",
750
750
  "quality.error.missingAction": "quality 작업을 지정하세요: check",
751
751
  "quality.error.unknownAction": "알 수 없는 quality 작업: {action}",
752
- "scriptPack.help.summary": "mustflow 내장 utility script들을 하나의 안정적인 command namespace 아래에서 나열하고 실행합니다.",
752
+ "scriptPack.help.summary": "mustflow 내장 utility script들을 하나의 안정적인 command namespace 아래에서 나열, 추천, 실행합니다.",
753
753
  "scriptPack.help.exit.ok": "script-pack 명령이 성공적으로 완료되었습니다",
754
754
  "scriptPack.help.exit.fail": "script-pack 명령에 잘못된 입력이 제공되었거나 선택한 script가 실패했습니다",
755
+ "scriptPack.help.option.changed": "현재 Git 작업 트리 변경에 맞는 script를 추천합니다",
756
+ "scriptPack.help.option.phase": "추천을 before_change, during_change, after_change, review 중 하나로 좁힙니다",
757
+ "scriptPack.help.option.skill": "mustflow skill 이름과 관련된 script를 우선합니다",
758
+ "scriptPack.help.option.path": "script 추천을 위해 분류할 후보 경로를 추가합니다",
755
759
  "scriptPack.title": "mustflow script packs",
760
+ "scriptPack.suggest.title": "mustflow script suggestions",
761
+ "scriptPack.suggest.label.suggestions": "추천",
762
+ "scriptPack.suggest.label.analyzedPaths": "분석한 경로",
763
+ "scriptPack.suggest.label.recommendations": "추천 항목",
764
+ "scriptPack.suggest.label.runHint": "실행 힌트",
765
+ "scriptPack.suggest.empty": "제공된 경로, skill, phase에 맞는 script-pack 추천이 없습니다.",
756
766
  "scriptPack.pack.core.summary": "핵심 내장 utility script",
767
+ "scriptPack.pack.repo.summary": "Repository-boundary utility scripts",
757
768
  "scriptPack.script.textBudget.summary": "파일이나 JSON 문자열 필드의 정확한 텍스트 길이 예산을 검사합니다",
769
+ "scriptPack.script.generatedBoundary.summary": "Check whether candidate paths cross generated, ignored, protected, vendor, or cache boundaries",
758
770
  "scriptPack.label.script": "Script",
759
771
  "scriptPack.label.actions": "작업",
760
772
  "scriptPack.label.schema": "스키마",
761
- "scriptPack.error.missingAction": "script-pack 작업을 지정하세요: list 또는 run",
773
+ "scriptPack.error.missingAction": "script-pack 작업을 지정하세요: list, suggest, 또는 run",
762
774
  "scriptPack.error.unknownAction": "알 수 없는 script-pack 작업: {action}",
763
775
  "scriptPack.error.missingScript": "core/text-budget 같은 script ref를 지정하세요",
764
776
  "scriptPack.error.unknownScript": "알 수 없는 script-pack script: {script}",
777
+ "scriptPack.error.missingSuggestInput": "추천 입력을 하나 이상 제공하세요: --path <path>, --changed, --phase <phase>, 또는 --skill <skill>",
778
+ "scriptPack.error.unknownPhase": "알 수 없는 script-pack phase: {phase}",
765
779
  "textBudget.help.summary": "파일이나 JSON 문자열 필드의 정확한 텍스트 길이 예산을 검사합니다. 기본 단위는 grapheme입니다.",
766
780
  "textBudget.help.option.min": "최소 단위 수를 요구합니다",
767
781
  "textBudget.help.option.max": "최대 단위 수를 요구합니다",
@@ -785,6 +799,19 @@ export const koMessages = {
785
799
  "textBudget.error.invalidNumber": "{option} 값은 0 이상의 안전한 정수여야 합니다: {value}",
786
800
  "textBudget.error.invalidUnit": "알 수 없는 text-budget 단위: {unit}. 다음 중 하나를 사용하세요: {allowed}",
787
801
  "textBudget.error.minGreaterThanMax": "--min은 --max보다 작거나 같아야 합니다",
802
+ "generatedBoundary.help.summary": "Check whether candidate edit paths cross generated, ignored, protected, vendor, or cache boundaries.",
803
+ "generatedBoundary.help.exit.ok": "Every checked target stayed within ordinary editable project paths",
804
+ "generatedBoundary.help.exit.fail": "A target crossed a generated, ignored, protected, vendor, cache, or root boundary",
805
+ "generatedBoundary.title": "mustflow generated boundary",
806
+ "generatedBoundary.label.checkedTargets": "Checked targets",
807
+ "generatedBoundary.label.findings": "Findings",
808
+ "generatedBoundary.label.targets": "Targets",
809
+ "generatedBoundary.label.boundaries": "boundaries",
810
+ "generatedBoundary.label.issues": "Issues",
811
+ "generatedBoundary.clean": "No generated, ignored, protected, vendor, or cache boundaries matched.",
812
+ "generatedBoundary.error.missingAction": "Specify a generated-boundary action: check",
813
+ "generatedBoundary.error.unknownAction": "Unknown generated-boundary action: {action}",
814
+ "generatedBoundary.error.missingPath": "Provide at least one path to check",
788
815
  "run.help.summary": ".mustflow/config/commands.toml에 설정된 일회성 명령을 실행합니다.",
789
816
  "run.help.option.dryRun": "실행하지 않고 명령 계획을 출력합니다",
790
817
  "run.help.option.planOnly": "--dry-run과 같은 동작입니다",
@@ -40,7 +40,7 @@ export const zhMessages = {
40
40
  "command.map.summary": "生成 REPO_MAP.md",
41
41
  "command.lineEndings.summary": "检查并规范化换行符策略",
42
42
  "command.quality.summary": "Inspect changed files for quality-gaming patterns",
43
- "command.scriptPack.summary": "List and run bundled mustflow script packs",
43
+ "command.scriptPack.summary": "List, suggest, and run bundled mustflow script packs",
44
44
  "command.run.summary": "运行已配置的一次性命令",
45
45
  "command.context.summary": "输出机器可读的代理上下文",
46
46
  "command.tech.summary": "管理代理使用的技术偏好",
@@ -749,19 +749,33 @@ export const zhMessages = {
749
749
  "quality.clean": "No quality-gaming risks found.",
750
750
  "quality.error.missingAction": "Specify a quality action: check",
751
751
  "quality.error.unknownAction": "Unknown quality action: {action}",
752
- "scriptPack.help.summary": "List and run bundled mustflow script-pack utilities through one stable command namespace.",
752
+ "scriptPack.help.summary": "List, suggest, and run bundled mustflow script-pack utilities through one stable command namespace.",
753
753
  "scriptPack.help.exit.ok": "The script-pack command completed successfully",
754
754
  "scriptPack.help.exit.fail": "The script-pack command received invalid input or the selected script failed",
755
+ "scriptPack.help.option.changed": "Suggest scripts for current Git working-tree changes",
756
+ "scriptPack.help.option.phase": "Limit suggestions to before_change, during_change, after_change, or review",
757
+ "scriptPack.help.option.skill": "Prefer scripts related to a mustflow skill name",
758
+ "scriptPack.help.option.path": "Add a candidate path to classify for script suggestions",
755
759
  "scriptPack.title": "mustflow script packs",
760
+ "scriptPack.suggest.title": "mustflow script suggestions",
761
+ "scriptPack.suggest.label.suggestions": "Suggestions",
762
+ "scriptPack.suggest.label.analyzedPaths": "Analyzed paths",
763
+ "scriptPack.suggest.label.recommendations": "Recommendations",
764
+ "scriptPack.suggest.label.runHint": "Run hint",
765
+ "scriptPack.suggest.empty": "No script-pack suggestions matched the supplied paths, skills, or phases.",
756
766
  "scriptPack.pack.core.summary": "Core built-in utility scripts",
767
+ "scriptPack.pack.repo.summary": "Repository-boundary utility scripts",
757
768
  "scriptPack.script.textBudget.summary": "Check exact text length budgets for files or JSON string fields",
769
+ "scriptPack.script.generatedBoundary.summary": "Check whether candidate paths cross generated, ignored, protected, vendor, or cache boundaries",
758
770
  "scriptPack.label.script": "Script",
759
771
  "scriptPack.label.actions": "actions",
760
772
  "scriptPack.label.schema": "schema",
761
- "scriptPack.error.missingAction": "Specify a script-pack action: list or run",
773
+ "scriptPack.error.missingAction": "Specify a script-pack action: list, suggest, or run",
762
774
  "scriptPack.error.unknownAction": "Unknown script-pack action: {action}",
763
775
  "scriptPack.error.missingScript": "Specify a script ref such as core/text-budget",
764
776
  "scriptPack.error.unknownScript": "Unknown script-pack script: {script}",
777
+ "scriptPack.error.missingSuggestInput": "Provide at least one suggestion input: --path <path>, --changed, --phase <phase>, or --skill <skill>",
778
+ "scriptPack.error.unknownPhase": "Unknown script-pack phase: {phase}",
765
779
  "textBudget.help.summary": "Check exact text length budgets for files or JSON string fields using grapheme counts by default.",
766
780
  "textBudget.help.option.min": "Require at least this many units",
767
781
  "textBudget.help.option.max": "Require at most this many units",
@@ -785,6 +799,19 @@ export const zhMessages = {
785
799
  "textBudget.error.invalidNumber": "{option} must be a non-negative safe integer: {value}",
786
800
  "textBudget.error.invalidUnit": "Unknown text-budget unit: {unit}. Use one of: {allowed}",
787
801
  "textBudget.error.minGreaterThanMax": "--min must be less than or equal to --max",
802
+ "generatedBoundary.help.summary": "Check whether candidate edit paths cross generated, ignored, protected, vendor, or cache boundaries.",
803
+ "generatedBoundary.help.exit.ok": "Every checked target stayed within ordinary editable project paths",
804
+ "generatedBoundary.help.exit.fail": "A target crossed a generated, ignored, protected, vendor, cache, or root boundary",
805
+ "generatedBoundary.title": "mustflow generated boundary",
806
+ "generatedBoundary.label.checkedTargets": "Checked targets",
807
+ "generatedBoundary.label.findings": "Findings",
808
+ "generatedBoundary.label.targets": "Targets",
809
+ "generatedBoundary.label.boundaries": "boundaries",
810
+ "generatedBoundary.label.issues": "Issues",
811
+ "generatedBoundary.clean": "No generated, ignored, protected, vendor, or cache boundaries matched.",
812
+ "generatedBoundary.error.missingAction": "Specify a generated-boundary action: check",
813
+ "generatedBoundary.error.unknownAction": "Unknown generated-boundary action: {action}",
814
+ "generatedBoundary.error.missingPath": "Provide at least one path to check",
788
815
  "run.help.summary": "从 .mustflow/config/commands.toml 运行已配置的一次性命令。",
789
816
  "run.help.option.dryRun": "输出命令计划但不执行",
790
817
  "run.help.option.planOnly": "--dry-run 的别名",