mustflow 2.59.0 → 2.69.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/README.md +1 -0
- package/dist/cli/commands/context.js +81 -6
- package/dist/cli/commands/skill.js +116 -0
- package/dist/cli/i18n/en.js +3 -1
- package/dist/cli/i18n/es.js +3 -1
- package/dist/cli/i18n/fr.js +3 -1
- package/dist/cli/i18n/hi.js +3 -1
- package/dist/cli/i18n/ko.js +3 -1
- package/dist/cli/i18n/zh.js +3 -1
- package/dist/cli/lib/agent-context.js +981 -8
- package/dist/cli/lib/command-registry.js +6 -0
- package/dist/cli/lib/local-index/constants.js +4 -5
- package/dist/cli/lib/local-index/freshness.js +5 -1
- package/dist/cli/lib/local-index/index.js +1 -1
- package/dist/cli/lib/repo-map.js +7 -1
- package/dist/cli/lib/validation/constants.js +3 -0
- package/dist/cli/lib/validation/index.js +41 -2
- package/dist/core/check-issues.js +5 -0
- package/dist/core/prompt-cache-rendering.js +19 -0
- package/dist/core/public-json-contracts.js +26 -0
- package/dist/core/quality-gaming.js +4 -0
- package/dist/core/skill-route-fixtures.js +173 -0
- package/dist/core/skill-route-resolution.js +398 -0
- package/dist/core/source-anchors.js +91 -5
- package/package.json +1 -1
- package/schemas/README.md +7 -2
- package/schemas/context-report.schema.json +442 -0
- package/schemas/quality-gaming-report.schema.json +1 -0
- package/schemas/route-fixture.schema.json +57 -0
- package/schemas/skill-route-report.schema.json +242 -0
- package/templates/default/common/.mustflow/config/commands.toml +18 -2
- package/templates/default/common/.mustflow/config/mustflow.toml +16 -10
- package/templates/default/i18n.toml +21 -9
- package/templates/default/locales/en/.mustflow/context/PROJECT.md +5 -3
- package/templates/default/locales/en/.mustflow/docs/agent-workflow.md +13 -9
- package/templates/default/locales/en/.mustflow/skills/INDEX.md +4 -2
- package/templates/default/locales/en/.mustflow/skills/llm-token-cost-control-review/SKILL.md +5 -2
- package/templates/default/locales/en/.mustflow/skills/quality-gaming-guard/SKILL.md +8 -6
- package/templates/default/locales/en/.mustflow/skills/router.toml +67 -0
- package/templates/default/locales/en/.mustflow/skills/routes.toml +12 -0
- package/templates/default/locales/en/.mustflow/skills/skill-refresh/SKILL.md +234 -0
- package/templates/default/locales/en/.mustflow/skills/task-instruction-authoring/SKILL.md +239 -0
- package/templates/default/locales/en/AGENTS.md +15 -7
- package/templates/default/locales/ko/.mustflow/context/PROJECT.md +4 -2
- package/templates/default/locales/ko/.mustflow/docs/agent-workflow.md +18 -12
- package/templates/default/locales/ko/AGENTS.md +8 -6
- package/templates/default/manifest.toml +12 -1
package/README.md
CHANGED
|
@@ -270,6 +270,7 @@ mf run mustflow_update_apply
|
|
|
270
270
|
| `mf docs review approve <path>` | Mark review complete and hide the document from the default queue. |
|
|
271
271
|
| `mf handoff validate <path>` | Validate a restricted work-item or handoff JSON record without writing files. |
|
|
272
272
|
| `mf context --json` | Print read order, command rules, available capabilities, and recent run summary as JSON. |
|
|
273
|
+
| `mf skill route` | Resolve compact skill route candidates from task text, paths, and reasons before reading selected skill documents. |
|
|
273
274
|
| `mf map --stdout` | Print the current mustflow root map to stdout. |
|
|
274
275
|
| `mf map --write` | Create or update `REPO_MAP.md`. |
|
|
275
276
|
| `mf quality check` | Inspect changed files for quality-gaming patterns without writing files. |
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { printUsageError, renderHelp } from '../lib/cli-output.js';
|
|
2
|
-
import { getAgentContext, getPromptCacheProfileContext } from '../lib/agent-context.js';
|
|
2
|
+
import { getAgentContext, getPromptCacheProfileContext, } from '../lib/agent-context.js';
|
|
3
3
|
import { t } from '../lib/i18n.js';
|
|
4
4
|
import { formatCliOptionParseError, getParsedCliStringOption, hasCliOptionToken, hasParsedCliOption, parseCliOptions, } from '../lib/option-parser.js';
|
|
5
5
|
import { resolveMustflowRoot } from '../lib/project-root.js';
|
|
@@ -16,9 +16,27 @@ export function getContextHelp(lang = 'en') {
|
|
|
16
16
|
label: '--cache-profile <profile>',
|
|
17
17
|
description: t(lang, 'context.help.option.cacheProfile'),
|
|
18
18
|
},
|
|
19
|
+
{
|
|
20
|
+
label: '--cache-audit',
|
|
21
|
+
description: t(lang, 'context.help.option.cacheAudit'),
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
label: '--cache-compare <path>',
|
|
25
|
+
description: 'Compare the current prompt bundle with a prior context JSON report inside the mustflow root.',
|
|
26
|
+
},
|
|
27
|
+
{ label: '--task <text>', description: 'Task text used to resolve selected task-layer skill context.' },
|
|
28
|
+
{ label: '--path <path>', description: 'Changed or expected path for task-layer route resolution; may be repeated.' },
|
|
29
|
+
{ label: '--reason <reason>', description: 'Classification or verification reason for route resolution; may be repeated.' },
|
|
30
|
+
{ label: '--max-candidates <count>', description: 'Maximum skill route candidates to consider while resolving task context.' },
|
|
19
31
|
{ label: '-h, --help', description: t(lang, 'cli.option.help') },
|
|
20
32
|
],
|
|
21
|
-
examples: [
|
|
33
|
+
examples: [
|
|
34
|
+
'mf context --json',
|
|
35
|
+
'mf context --json --cache-profile stable',
|
|
36
|
+
'mf context --json --cache-audit',
|
|
37
|
+
'mf context --json --cache-profile all --cache-compare .mustflow/cache/baseline-context.json',
|
|
38
|
+
'mf context --json --cache-audit --task "change TypeScript CLI output" --path src/cli/commands/context.ts --reason code_change',
|
|
39
|
+
],
|
|
22
40
|
exitCodes: [
|
|
23
41
|
{
|
|
24
42
|
label: '0',
|
|
@@ -31,6 +49,12 @@ export function getContextHelp(lang = 'en') {
|
|
|
31
49
|
const CONTEXT_OPTIONS = [
|
|
32
50
|
{ name: '--json', kind: 'boolean' },
|
|
33
51
|
{ name: '--cache-profile', kind: 'string' },
|
|
52
|
+
{ name: '--cache-audit', kind: 'boolean' },
|
|
53
|
+
{ name: '--cache-compare', kind: 'string' },
|
|
54
|
+
{ name: '--task', kind: 'string' },
|
|
55
|
+
{ name: '--path', kind: 'string' },
|
|
56
|
+
{ name: '--reason', kind: 'string' },
|
|
57
|
+
{ name: '--max-candidates', kind: 'string' },
|
|
34
58
|
];
|
|
35
59
|
const CACHE_PROFILES = new Set(['stable', 'task', 'volatile', 'all']);
|
|
36
60
|
function parseCacheProfile(value) {
|
|
@@ -42,6 +66,32 @@ function parseCacheProfile(value) {
|
|
|
42
66
|
}
|
|
43
67
|
return { profile: value, invalid: false };
|
|
44
68
|
}
|
|
69
|
+
function parseMaxCandidates(value) {
|
|
70
|
+
if (value === null) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
const parsed = Number(value);
|
|
74
|
+
return Number.isInteger(parsed) && parsed > 0 ? parsed : Number.NaN;
|
|
75
|
+
}
|
|
76
|
+
function getParsedCliStringOptions(parsed, name) {
|
|
77
|
+
return parsed.occurrences
|
|
78
|
+
.filter((occurrence) => occurrence.name === name && typeof occurrence.value === 'string')
|
|
79
|
+
.map((occurrence) => occurrence.value);
|
|
80
|
+
}
|
|
81
|
+
function hasRouteSignalOptions(parsed) {
|
|
82
|
+
return (getParsedCliStringOption(parsed, '--task') !== null ||
|
|
83
|
+
getParsedCliStringOption(parsed, '--max-candidates') !== null ||
|
|
84
|
+
getParsedCliStringOptions(parsed, '--path').length > 0 ||
|
|
85
|
+
getParsedCliStringOptions(parsed, '--reason').length > 0);
|
|
86
|
+
}
|
|
87
|
+
function readPromptCacheRouteInput(parsed) {
|
|
88
|
+
return {
|
|
89
|
+
taskText: getParsedCliStringOption(parsed, '--task'),
|
|
90
|
+
paths: getParsedCliStringOptions(parsed, '--path'),
|
|
91
|
+
reasons: getParsedCliStringOptions(parsed, '--reason'),
|
|
92
|
+
maxCandidates: parseMaxCandidates(getParsedCliStringOption(parsed, '--max-candidates')),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
45
95
|
export async function runContext(args, reporter, lang = 'en') {
|
|
46
96
|
if (hasCliOptionToken(args, '--help', ['-h'])) {
|
|
47
97
|
reporter.stdout(getContextHelp(lang));
|
|
@@ -57,14 +107,39 @@ export async function runContext(args, reporter, lang = 'en') {
|
|
|
57
107
|
printUsageError(reporter, t(lang, 'cli.error.unexpectedValue', { option: '--cache-profile' }), 'mf context --help', getContextHelp(lang), lang);
|
|
58
108
|
return 1;
|
|
59
109
|
}
|
|
60
|
-
|
|
110
|
+
const jsonRequested = hasParsedCliOption(parsed, '--json');
|
|
111
|
+
const cacheAudit = hasParsedCliOption(parsed, '--cache-audit');
|
|
112
|
+
const cacheComparePath = getParsedCliStringOption(parsed, '--cache-compare');
|
|
113
|
+
const routeSignalOptions = hasRouteSignalOptions(parsed);
|
|
114
|
+
const routeInput = readPromptCacheRouteInput(parsed);
|
|
115
|
+
if (Number.isNaN(routeInput.maxCandidates)) {
|
|
116
|
+
printUsageError(reporter, t(lang, 'cli.error.unexpectedValue', { option: '--max-candidates' }), 'mf context --help', getContextHelp(lang), lang);
|
|
117
|
+
return 1;
|
|
118
|
+
}
|
|
119
|
+
if (cacheProfile.profile && !jsonRequested) {
|
|
61
120
|
printUsageError(reporter, t(lang, 'cli.error.unexpectedArgument', { argument: '--cache-profile' }), 'mf context --help', getContextHelp(lang), lang);
|
|
62
121
|
return 1;
|
|
63
122
|
}
|
|
123
|
+
if (cacheAudit && !jsonRequested) {
|
|
124
|
+
printUsageError(reporter, t(lang, 'cli.error.unexpectedArgument', { argument: '--cache-audit' }), 'mf context --help', getContextHelp(lang), lang);
|
|
125
|
+
return 1;
|
|
126
|
+
}
|
|
127
|
+
if (cacheComparePath && !jsonRequested) {
|
|
128
|
+
printUsageError(reporter, t(lang, 'cli.error.unexpectedArgument', { argument: '--cache-compare' }), 'mf context --help', getContextHelp(lang), lang);
|
|
129
|
+
return 1;
|
|
130
|
+
}
|
|
131
|
+
if (routeSignalOptions && !jsonRequested) {
|
|
132
|
+
printUsageError(reporter, t(lang, 'cli.error.unexpectedArgument', { argument: '--task/--path/--reason/--max-candidates' }), 'mf context --help', getContextHelp(lang), lang);
|
|
133
|
+
return 1;
|
|
134
|
+
}
|
|
64
135
|
const mustflowRoot = resolveMustflowRoot();
|
|
65
|
-
if (
|
|
66
|
-
if (cacheProfile.profile) {
|
|
67
|
-
reporter.stdout(JSON.stringify(await getPromptCacheProfileContext(mustflowRoot, cacheProfile.profile
|
|
136
|
+
if (jsonRequested) {
|
|
137
|
+
if (cacheProfile.profile || cacheAudit || cacheComparePath || routeSignalOptions) {
|
|
138
|
+
reporter.stdout(JSON.stringify(await getPromptCacheProfileContext(mustflowRoot, cacheProfile.profile ?? 'all', {
|
|
139
|
+
includeAudit: cacheAudit,
|
|
140
|
+
comparePath: cacheComparePath,
|
|
141
|
+
routeInput,
|
|
142
|
+
}), null, 2));
|
|
68
143
|
return 0;
|
|
69
144
|
}
|
|
70
145
|
const context = getAgentContext(mustflowRoot);
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { printUsageError, renderHelp } from '../lib/cli-output.js';
|
|
2
|
+
import { t } from '../lib/i18n.js';
|
|
3
|
+
import { formatCliOptionParseError, getParsedCliStringOption, hasCliOptionToken, hasParsedCliOption, parseCliOptions, } from '../lib/option-parser.js';
|
|
4
|
+
import { resolveMustflowRoot } from '../lib/project-root.js';
|
|
5
|
+
import { resolveSkillRoutes } from '../../core/skill-route-resolution.js';
|
|
6
|
+
const SKILL_OPTIONS = [
|
|
7
|
+
{ name: '--json', kind: 'boolean' },
|
|
8
|
+
{ name: '--task', kind: 'string' },
|
|
9
|
+
{ name: '--path', kind: 'string' },
|
|
10
|
+
{ name: '--reason', kind: 'string' },
|
|
11
|
+
{ name: '--max-candidates', kind: 'string' },
|
|
12
|
+
];
|
|
13
|
+
export function getSkillHelp(lang = 'en') {
|
|
14
|
+
return renderHelp({
|
|
15
|
+
usage: 'mf skill route [options]',
|
|
16
|
+
summary: t(lang, 'command.skill.summary'),
|
|
17
|
+
options: [
|
|
18
|
+
{ label: '--task <text>', description: 'Task text used for route scoring' },
|
|
19
|
+
{ label: '--path <path>', description: 'Changed or expected path; may be repeated' },
|
|
20
|
+
{ label: '--reason <reason>', description: 'Classification or verification reason; may be repeated' },
|
|
21
|
+
{ label: '--max-candidates <count>', description: 'Maximum candidates to return, from 1 to 10' },
|
|
22
|
+
{ label: '--json', description: t(lang, 'cli.option.json') },
|
|
23
|
+
{ label: '-h, --help', description: t(lang, 'cli.option.help') },
|
|
24
|
+
],
|
|
25
|
+
examples: [
|
|
26
|
+
'mf skill route --task "change TypeScript CLI output" --path src/cli/index.ts --reason code_change --json',
|
|
27
|
+
'mf skill route --reason docs_change --path docs-site/src/content/docs/en/commands/context.md',
|
|
28
|
+
],
|
|
29
|
+
exitCodes: [
|
|
30
|
+
{ label: '0', description: 'Skill route candidates were resolved' },
|
|
31
|
+
{ label: '1', description: t(lang, 'cli.common.invalidInput') },
|
|
32
|
+
],
|
|
33
|
+
}, lang);
|
|
34
|
+
}
|
|
35
|
+
function parseMaxCandidates(value) {
|
|
36
|
+
if (value === null) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
const parsed = Number(value);
|
|
40
|
+
return Number.isInteger(parsed) ? parsed : Number.NaN;
|
|
41
|
+
}
|
|
42
|
+
function getParsedCliStringOptions(parsed, name) {
|
|
43
|
+
return parsed.occurrences
|
|
44
|
+
.filter((occurrence) => occurrence.name === name && typeof occurrence.value === 'string')
|
|
45
|
+
.map((occurrence) => occurrence.value);
|
|
46
|
+
}
|
|
47
|
+
function parseSkillArgs(args) {
|
|
48
|
+
const parsed = parseCliOptions(args, SKILL_OPTIONS, { allowPositionals: true });
|
|
49
|
+
return {
|
|
50
|
+
json: hasParsedCliOption(parsed, '--json'),
|
|
51
|
+
action: parsed.positionals[0] ?? null,
|
|
52
|
+
taskText: getParsedCliStringOption(parsed, '--task'),
|
|
53
|
+
paths: getParsedCliStringOptions(parsed, '--path'),
|
|
54
|
+
reasons: getParsedCliStringOptions(parsed, '--reason'),
|
|
55
|
+
maxCandidates: parseMaxCandidates(getParsedCliStringOption(parsed, '--max-candidates')),
|
|
56
|
+
error: parsed.error,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function renderSkillRouteReport(report, lang) {
|
|
60
|
+
const lines = [
|
|
61
|
+
'mustflow skill route',
|
|
62
|
+
`${t(lang, 'label.mustflowRoot')}: ${resolveMustflowRoot()}`,
|
|
63
|
+
`selected_main: ${report.selected.main?.skill ?? t(lang, 'value.none')}`,
|
|
64
|
+
`selected_adjuncts: ${report.selected.adjuncts.map((candidate) => candidate.skill).join(', ') || t(lang, 'value.none')}`,
|
|
65
|
+
'',
|
|
66
|
+
'Candidates',
|
|
67
|
+
];
|
|
68
|
+
if (report.candidates.length === 0) {
|
|
69
|
+
lines.push(`- ${t(lang, 'value.none')}`);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
for (const candidate of report.candidates) {
|
|
73
|
+
lines.push(`- ${candidate.skill} (${candidate.route_type}, score ${candidate.score.toFixed(1)})`, ` path: ${candidate.skill_path}`, ` reasons: ${candidate.selection_reasons.join(', ') || t(lang, 'value.none')}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
lines.push('', 'Read plan', ...report.read_plan.selected_skill_paths.map((skillPath) => `- read selected skill: ${skillPath}`), `- avoid by default: ${report.read_plan.avoid_by_default.join(', ') || t(lang, 'value.none')}`, `- fallback route metadata: ${report.read_plan.fallback_route_metadata.path}`, '', 'Source files', ...report.source_files.map((sourceFile) => `- ${sourceFile}`));
|
|
77
|
+
return lines.join('\n');
|
|
78
|
+
}
|
|
79
|
+
export function runSkill(args, reporter, lang = 'en') {
|
|
80
|
+
if (hasCliOptionToken(args, '--help', ['-h'])) {
|
|
81
|
+
reporter.stdout(getSkillHelp(lang));
|
|
82
|
+
return 0;
|
|
83
|
+
}
|
|
84
|
+
const parsed = parseSkillArgs(args);
|
|
85
|
+
if (parsed.error) {
|
|
86
|
+
printUsageError(reporter, formatCliOptionParseError(parsed.error, lang), 'mf skill --help', getSkillHelp(lang), lang);
|
|
87
|
+
return 1;
|
|
88
|
+
}
|
|
89
|
+
if (parsed.action !== 'route') {
|
|
90
|
+
printUsageError(reporter, t(lang, parsed.action ? 'cli.error.unexpectedArgument' : 'cli.error.missingValue', {
|
|
91
|
+
argument: parsed.action ?? '',
|
|
92
|
+
option: 'route',
|
|
93
|
+
}), 'mf skill --help', getSkillHelp(lang), lang);
|
|
94
|
+
return 1;
|
|
95
|
+
}
|
|
96
|
+
if (Number.isNaN(parsed.maxCandidates)) {
|
|
97
|
+
printUsageError(reporter, t(lang, 'cli.error.unexpectedValue', { option: '--max-candidates' }), 'mf skill --help', getSkillHelp(lang), lang);
|
|
98
|
+
return 1;
|
|
99
|
+
}
|
|
100
|
+
const report = resolveSkillRoutes(resolveMustflowRoot(), {
|
|
101
|
+
taskText: parsed.taskText,
|
|
102
|
+
paths: parsed.paths,
|
|
103
|
+
reasons: parsed.reasons,
|
|
104
|
+
maxCandidates: parsed.maxCandidates,
|
|
105
|
+
});
|
|
106
|
+
if (parsed.json) {
|
|
107
|
+
reporter.stdout(JSON.stringify({
|
|
108
|
+
...report,
|
|
109
|
+
command: 'skill',
|
|
110
|
+
action: 'route',
|
|
111
|
+
}, null, 2));
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
reporter.stdout(renderSkillRouteReport(report, lang));
|
|
115
|
+
return 0;
|
|
116
|
+
}
|
package/dist/cli/i18n/en.js
CHANGED
|
@@ -48,6 +48,7 @@ export const enMessages = {
|
|
|
48
48
|
"command.handoff.summary": "Validate restricted work-item and handoff records",
|
|
49
49
|
"command.index.summary": "Build the local mustflow SQLite index",
|
|
50
50
|
"command.search.summary": "Search the local mustflow SQLite index",
|
|
51
|
+
"command.skill.summary": "Resolve compact skill route candidates",
|
|
51
52
|
"command.dashboard.summary": "Start the local mustflow dashboard",
|
|
52
53
|
"command.version.summary": "Show package version and optional npm update status",
|
|
53
54
|
"command.versionSources.summary": "Show detected version sources",
|
|
@@ -143,6 +144,7 @@ export const enMessages = {
|
|
|
143
144
|
"context.help.summary": "Print the agent context for the current mustflow root.",
|
|
144
145
|
"context.help.option.json": "Print machine-readable context JSON",
|
|
145
146
|
"context.help.option.cacheProfile": "Print a prompt-cache profile: stable, task, volatile, or all",
|
|
147
|
+
"context.help.option.cacheAudit": "Include prompt-cache rendered byte, token estimate, and budget audit data",
|
|
146
148
|
"context.help.exit.ok": "Context was inspected and printed",
|
|
147
149
|
"context.title": "mustflow context",
|
|
148
150
|
"api.help.summary": "Print stable machine-readable API reports for the current mustflow root.",
|
|
@@ -733,7 +735,7 @@ Read these files before working:
|
|
|
733
735
|
"lineEndings.error.checkModeOption": "check does not accept --apply or --dry-run",
|
|
734
736
|
"lineEndings.error.conflictingModes": "Cannot combine --apply and --dry-run",
|
|
735
737
|
"quality.help.summary": "Inspect changed files for quality-gaming patterns such as line stuffing, validation suppressions, " +
|
|
736
|
-
"test bypass markers, type escapes, and placeholder implementations.",
|
|
738
|
+
"test bypass markers, type escapes, empty catch blocks, and placeholder implementations.",
|
|
737
739
|
"quality.help.option.all": "Inspect every tracked text file instead of only changed files",
|
|
738
740
|
"quality.help.exit.ok": "Quality-gaming risks were inspected and no risk was found",
|
|
739
741
|
"quality.help.exit.fail": "Quality-gaming risks, repository issues, or invalid input were found",
|
package/dist/cli/i18n/es.js
CHANGED
|
@@ -48,6 +48,7 @@ export const esMessages = {
|
|
|
48
48
|
"command.handoff.summary": "Valida registros restringidos de trabajo y handoff",
|
|
49
49
|
"command.index.summary": "Construye el índice SQLite local de mustflow",
|
|
50
50
|
"command.search.summary": "Busca en el índice SQLite local de mustflow",
|
|
51
|
+
"command.skill.summary": "Resuelve candidatos compactos de ruta de skill",
|
|
51
52
|
"command.dashboard.summary": "Inicia el dashboard local de mustflow",
|
|
52
53
|
"command.version.summary": "Muestra la versión del paquete y el estado de actualización en npm",
|
|
53
54
|
"command.versionSources.summary": "Muestra fuentes de versión detectadas",
|
|
@@ -143,6 +144,7 @@ export const esMessages = {
|
|
|
143
144
|
"context.help.summary": "Imprime el contexto de agente para la raíz mustflow actual.",
|
|
144
145
|
"context.help.option.json": "Imprime JSON de contexto legible por máquinas",
|
|
145
146
|
"context.help.option.cacheProfile": "Imprime un perfil de caché de prompt: stable, task, volatile o all",
|
|
147
|
+
"context.help.option.cacheAudit": "Incluye bytes renderizados, estimación de tokens y auditoría de presupuesto de caché de prompt",
|
|
146
148
|
"context.help.exit.ok": "El contexto se inspeccionó e imprimió",
|
|
147
149
|
"context.title": "contexto mustflow",
|
|
148
150
|
"api.help.summary": "Imprime informes API estables legibles por máquinas para la raíz mustflow actual.",
|
|
@@ -733,7 +735,7 @@ Lee estos archivos antes de trabajar:
|
|
|
733
735
|
"lineEndings.error.checkModeOption": "check does not accept --apply or --dry-run",
|
|
734
736
|
"lineEndings.error.conflictingModes": "Cannot combine --apply and --dry-run",
|
|
735
737
|
"quality.help.summary": "Inspect changed files for quality-gaming patterns such as line stuffing, validation suppressions, " +
|
|
736
|
-
"test bypass markers, type escapes, and placeholder implementations.",
|
|
738
|
+
"test bypass markers, type escapes, empty catch blocks, and placeholder implementations.",
|
|
737
739
|
"quality.help.option.all": "Inspect every tracked text file instead of only changed files",
|
|
738
740
|
"quality.help.exit.ok": "Quality-gaming risks were inspected and no risk was found",
|
|
739
741
|
"quality.help.exit.fail": "Quality-gaming risks, repository issues, or invalid input were found",
|
package/dist/cli/i18n/fr.js
CHANGED
|
@@ -48,6 +48,7 @@ export const frMessages = {
|
|
|
48
48
|
"command.handoff.summary": "Valide les enregistrements restreints de travail et de handoff",
|
|
49
49
|
"command.index.summary": "Construit l'index SQLite local de mustflow",
|
|
50
50
|
"command.search.summary": "Recherche dans l'index SQLite local de mustflow",
|
|
51
|
+
"command.skill.summary": "Résout des candidats compacts de route de skill",
|
|
51
52
|
"command.dashboard.summary": "Démarre le tableau de bord mustflow local",
|
|
52
53
|
"command.version.summary": "Affiche la version du paquet et l'état de mise à jour npm",
|
|
53
54
|
"command.versionSources.summary": "Affiche les sources de version détectées",
|
|
@@ -143,6 +144,7 @@ export const frMessages = {
|
|
|
143
144
|
"context.help.summary": "Imprime le contexte d'agent pour la racine mustflow actuelle.",
|
|
144
145
|
"context.help.option.json": "Imprime le JSON de contexte lisible par machine",
|
|
145
146
|
"context.help.option.cacheProfile": "Imprime un profil de cache de prompt : stable, task, volatile ou all",
|
|
147
|
+
"context.help.option.cacheAudit": "Inclut les octets rendus, l'estimation de tokens et l'audit de budget du cache de prompt",
|
|
146
148
|
"context.help.exit.ok": "Le contexte a été inspecté et imprimé",
|
|
147
149
|
"context.title": "contexte mustflow",
|
|
148
150
|
"api.help.summary": "Imprime des rapports API stables lisibles par machine pour la racine mustflow actuelle.",
|
|
@@ -733,7 +735,7 @@ Lisez ces fichiers avant de travailler :
|
|
|
733
735
|
"lineEndings.error.checkModeOption": "check does not accept --apply or --dry-run",
|
|
734
736
|
"lineEndings.error.conflictingModes": "Cannot combine --apply and --dry-run",
|
|
735
737
|
"quality.help.summary": "Inspect changed files for quality-gaming patterns such as line stuffing, validation suppressions, " +
|
|
736
|
-
"test bypass markers, type escapes, and placeholder implementations.",
|
|
738
|
+
"test bypass markers, type escapes, empty catch blocks, and placeholder implementations.",
|
|
737
739
|
"quality.help.option.all": "Inspect every tracked text file instead of only changed files",
|
|
738
740
|
"quality.help.exit.ok": "Quality-gaming risks were inspected and no risk was found",
|
|
739
741
|
"quality.help.exit.fail": "Quality-gaming risks, repository issues, or invalid input were found",
|
package/dist/cli/i18n/hi.js
CHANGED
|
@@ -48,6 +48,7 @@ export const hiMessages = {
|
|
|
48
48
|
"command.handoff.summary": "Restricted work-item और handoff records validate करें",
|
|
49
49
|
"command.index.summary": "स्थानीय mustflow SQLite इंडेक्स बनाएँ",
|
|
50
50
|
"command.search.summary": "स्थानीय mustflow SQLite इंडेक्स में खोजें",
|
|
51
|
+
"command.skill.summary": "छोटे skill route उम्मीदवार चुनें",
|
|
51
52
|
"command.dashboard.summary": "स्थानीय mustflow डैशबोर्ड शुरू करें",
|
|
52
53
|
"command.version.summary": "Package version और npm update status दिखाएँ",
|
|
53
54
|
"command.versionSources.summary": "पहचाने गए संस्करण स्रोत दिखाएँ",
|
|
@@ -143,6 +144,7 @@ export const hiMessages = {
|
|
|
143
144
|
"context.help.summary": "वर्तमान mustflow रूट के लिए एजेंट संदर्भ प्रिंट करें।",
|
|
144
145
|
"context.help.option.json": "मशीन-पठनीय संदर्भ JSON प्रिंट करें",
|
|
145
146
|
"context.help.option.cacheProfile": "prompt cache profile प्रिंट करें: stable, task, volatile, या all",
|
|
147
|
+
"context.help.option.cacheAudit": "prompt cache rendered bytes, token estimate, और budget audit data शामिल करें",
|
|
146
148
|
"context.help.exit.ok": "संदर्भ जाँचा और प्रिंट किया गया",
|
|
147
149
|
"context.title": "mustflow संदर्भ",
|
|
148
150
|
"api.help.summary": "वर्तमान mustflow रूट के लिए स्थिर machine-readable API रिपोर्ट प्रिंट करें।",
|
|
@@ -733,7 +735,7 @@ export const hiMessages = {
|
|
|
733
735
|
"lineEndings.error.checkModeOption": "check does not accept --apply or --dry-run",
|
|
734
736
|
"lineEndings.error.conflictingModes": "Cannot combine --apply and --dry-run",
|
|
735
737
|
"quality.help.summary": "Inspect changed files for quality-gaming patterns such as line stuffing, validation suppressions, " +
|
|
736
|
-
"test bypass markers, type escapes, and placeholder implementations.",
|
|
738
|
+
"test bypass markers, type escapes, empty catch blocks, and placeholder implementations.",
|
|
737
739
|
"quality.help.option.all": "Inspect every tracked text file instead of only changed files",
|
|
738
740
|
"quality.help.exit.ok": "Quality-gaming risks were inspected and no risk was found",
|
|
739
741
|
"quality.help.exit.fail": "Quality-gaming risks, repository issues, or invalid input were found",
|
package/dist/cli/i18n/ko.js
CHANGED
|
@@ -48,6 +48,7 @@ export const koMessages = {
|
|
|
48
48
|
"command.handoff.summary": "제한된 작업 항목과 인수인계 기록을 검증합니다",
|
|
49
49
|
"command.index.summary": "로컬 mustflow SQLite 색인을 만듭니다",
|
|
50
50
|
"command.search.summary": "로컬 mustflow SQLite 색인을 검색합니다",
|
|
51
|
+
"command.skill.summary": "간결한 skill route 후보를 고릅니다",
|
|
51
52
|
"command.dashboard.summary": "로컬 mustflow 대시보드를 시작합니다",
|
|
52
53
|
"command.version.summary": "패키지 버전과 npm 업데이트 상태를 출력합니다",
|
|
53
54
|
"command.versionSources.summary": "감지된 버전 기준 원본을 출력합니다",
|
|
@@ -143,6 +144,7 @@ export const koMessages = {
|
|
|
143
144
|
"context.help.summary": "현재 mustflow 루트의 에이전트 작업 맥락을 출력합니다.",
|
|
144
145
|
"context.help.option.json": "맥락을 JSON 형식으로 출력합니다",
|
|
145
146
|
"context.help.option.cacheProfile": "프롬프트 캐시 프로필을 출력합니다: stable, task, volatile, all",
|
|
147
|
+
"context.help.option.cacheAudit": "프롬프트 캐시의 렌더링 바이트, 토큰 추정, 예산 감사 데이터를 포함합니다",
|
|
146
148
|
"context.help.exit.ok": "맥락을 확인하고 출력했습니다",
|
|
147
149
|
"context.title": "mustflow 맥락",
|
|
148
150
|
"api.help.summary": "현재 mustflow 루트의 안정적 JSON API 보고서를 출력합니다.",
|
|
@@ -732,7 +734,7 @@ export const koMessages = {
|
|
|
732
734
|
"lineEndings.error.unknownAction": "알 수 없는 line-endings 작업: {action}",
|
|
733
735
|
"lineEndings.error.checkModeOption": "check에는 --apply 또는 --dry-run을 사용할 수 없습니다",
|
|
734
736
|
"lineEndings.error.conflictingModes": "--apply와 --dry-run은 함께 사용할 수 없습니다",
|
|
735
|
-
"quality.help.summary": "긴 줄 몰아넣기, 검증 억제, 테스트 우회 표시, 타입 회피, 미완성 구현 같은 " +
|
|
737
|
+
"quality.help.summary": "긴 줄 몰아넣기, 검증 억제, 테스트 우회 표시, 타입 회피, 빈 catch, 미완성 구현 같은 " +
|
|
736
738
|
"품질 지표 꼼수를 변경 파일에서 검사합니다.",
|
|
737
739
|
"quality.help.option.all": "변경 파일만이 아니라 추적 중인 모든 텍스트 파일을 검사합니다",
|
|
738
740
|
"quality.help.exit.ok": "품질 지표 꼼수를 검사했고 위험이 발견되지 않았습니다",
|
package/dist/cli/i18n/zh.js
CHANGED
|
@@ -48,6 +48,7 @@ export const zhMessages = {
|
|
|
48
48
|
"command.handoff.summary": "验证受限的工作项和交接记录",
|
|
49
49
|
"command.index.summary": "构建本地 mustflow SQLite 索引",
|
|
50
50
|
"command.search.summary": "搜索本地 mustflow SQLite 索引",
|
|
51
|
+
"command.skill.summary": "解析紧凑的 skill route 候选项",
|
|
51
52
|
"command.dashboard.summary": "启动本地 mustflow 仪表板",
|
|
52
53
|
"command.version.summary": "显示包版本和 npm 更新状态",
|
|
53
54
|
"command.versionSources.summary": "显示检测到的版本来源",
|
|
@@ -143,6 +144,7 @@ export const zhMessages = {
|
|
|
143
144
|
"context.help.summary": "输出当前 mustflow 根目录的代理上下文。",
|
|
144
145
|
"context.help.option.json": "输出机器可读的上下文 JSON",
|
|
145
146
|
"context.help.option.cacheProfile": "输出提示缓存配置文件:stable、task、volatile 或 all",
|
|
147
|
+
"context.help.option.cacheAudit": "包含提示缓存渲染字节、token 估算和预算审计数据",
|
|
146
148
|
"context.help.exit.ok": "已检查并输出上下文",
|
|
147
149
|
"context.title": "mustflow 上下文",
|
|
148
150
|
"api.help.summary": "为当前 mustflow 根目录输出稳定的机器可读 API 报告。",
|
|
@@ -733,7 +735,7 @@ export const zhMessages = {
|
|
|
733
735
|
"lineEndings.error.checkModeOption": "check does not accept --apply or --dry-run",
|
|
734
736
|
"lineEndings.error.conflictingModes": "Cannot combine --apply and --dry-run",
|
|
735
737
|
"quality.help.summary": "Inspect changed files for quality-gaming patterns such as line stuffing, validation suppressions, " +
|
|
736
|
-
"test bypass markers, type escapes, and placeholder implementations.",
|
|
738
|
+
"test bypass markers, type escapes, empty catch blocks, and placeholder implementations.",
|
|
737
739
|
"quality.help.option.all": "Inspect every tracked text file instead of only changed files",
|
|
738
740
|
"quality.help.exit.ok": "Quality-gaming risks were inspected and no risk was found",
|
|
739
741
|
"quality.help.exit.fail": "Quality-gaming risks, repository issues, or invalid input were found",
|