maestro-flow 0.3.22 → 0.3.23
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/.claude/commands/maestro-analyze.md +1 -1
- package/.claude/commands/maestro-brainstorm.md +1 -1
- package/.claude/commands/maestro-composer.md +3 -3
- package/.claude/commands/maestro-init.md +4 -4
- package/.claude/commands/maestro-roadmap.md +164 -108
- package/.claude/commands/maestro.md +19 -10
- package/.claude/commands/quality-business-test.md +2 -2
- package/.claude/skills/team-quality-assurance/roles/scout/role.md +1 -1
- package/.claude/skills/team-review/roles/reviewer/role.md +1 -1
- package/.claude/skills/team-review/roles/scanner/role.md +1 -1
- package/.claude/skills/team-tech-debt/roles/scanner/role.md +3 -3
- package/.codex/skills/maestro/SKILL.md +12 -9
- package/.codex/skills/maestro-brainstorm/SKILL.md +1 -1
- package/.codex/skills/maestro-composer/SKILL.md +3 -3
- package/.codex/skills/maestro-init/SKILL.md +1 -1
- package/.codex/skills/maestro-link-coordinate/SKILL.md +1 -1
- package/.codex/skills/maestro-player/SKILL.md +2 -2
- package/.codex/skills/maestro-roadmap/SKILL.md +443 -332
- package/.codex/skills/quality-business-test/SKILL.md +2 -2
- package/.codex/skills/team-coordinate/roles/coordinator/role.md +1 -1
- package/.codex/skills/team-lifecycle-v4/roles/coordinator/role.md +1 -1
- package/.codex/skills/team-quality-assurance/roles/scout/role.md +1 -1
- package/.codex/skills/team-review/roles/reviewer/role.md +1 -1
- package/.codex/skills/team-review/roles/scanner/role.md +1 -1
- package/.codex/skills/team-tech-debt/roles/scanner/role.md +3 -3
- package/chains/singles/spec-generate.json +3 -3
- package/chains/spec-driven.json +2 -2
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +4 -0
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js +2 -2
- package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/install-utils.d.ts +5 -12
- package/dashboard/dist-server/dashboard/src/server/routes/install-utils.js +10 -65
- package/dashboard/dist-server/dashboard/src/server/routes/install-utils.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/install.js +17 -11
- package/dashboard/dist-server/dashboard/src/server/routes/install.js.map +1 -1
- package/dashboard/dist-server/src/agents/cli-agent-runner.d.ts +4 -0
- package/dashboard/dist-server/src/agents/cli-agent-runner.js +4 -2
- package/dashboard/dist-server/src/agents/cli-agent-runner.js.map +1 -1
- package/dashboard/dist-server/src/commands/delegate.d.ts +2 -0
- package/dashboard/dist-server/src/commands/delegate.js +20 -4
- package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
- package/dashboard/dist-server/src/config/cli-tools-config.d.ts +64 -3
- package/dashboard/dist-server/src/config/cli-tools-config.js +226 -9
- package/dashboard/dist-server/src/config/cli-tools-config.js.map +1 -1
- package/dist/src/agents/cli-agent-runner.d.ts +4 -0
- package/dist/src/agents/cli-agent-runner.d.ts.map +1 -1
- package/dist/src/agents/cli-agent-runner.js +4 -2
- package/dist/src/agents/cli-agent-runner.js.map +1 -1
- package/dist/src/cli.js +2 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/cli.d.ts.map +1 -1
- package/dist/src/commands/cli.js +21 -4
- package/dist/src/commands/cli.js.map +1 -1
- package/dist/src/commands/delegate.d.ts +2 -0
- package/dist/src/commands/delegate.d.ts.map +1 -1
- package/dist/src/commands/delegate.js +20 -4
- package/dist/src/commands/delegate.js.map +1 -1
- package/dist/src/commands/install-backend.d.ts +5 -16
- package/dist/src/commands/install-backend.d.ts.map +1 -1
- package/dist/src/commands/install-backend.js +8 -104
- package/dist/src/commands/install-backend.js.map +1 -1
- package/dist/src/commands/install-ui/ExecutionView.js +1 -1
- package/dist/src/commands/install-ui/ExecutionView.js.map +1 -1
- package/dist/src/commands/install-ui/InstallExecution.d.ts +1 -0
- package/dist/src/commands/install-ui/InstallExecution.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallExecution.js +19 -4
- package/dist/src/commands/install-ui/InstallExecution.js.map +1 -1
- package/dist/src/commands/install-ui/InstallResult.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallResult.js +1 -1
- package/dist/src/commands/install-ui/InstallResult.js.map +1 -1
- package/dist/src/commands/install.d.ts.map +1 -1
- package/dist/src/commands/install.js +23 -3
- package/dist/src/commands/install.js.map +1 -1
- package/dist/src/commands/tools-ui/CommandReference.d.ts +7 -0
- package/dist/src/commands/tools-ui/CommandReference.d.ts.map +1 -0
- package/dist/src/commands/tools-ui/CommandReference.js +33 -0
- package/dist/src/commands/tools-ui/CommandReference.js.map +1 -0
- package/dist/src/commands/tools-ui/ConfigSources.d.ts +6 -0
- package/dist/src/commands/tools-ui/ConfigSources.d.ts.map +1 -0
- package/dist/src/commands/tools-ui/ConfigSources.js +27 -0
- package/dist/src/commands/tools-ui/ConfigSources.js.map +1 -0
- package/dist/src/commands/tools-ui/RegisterSettings.d.ts +8 -0
- package/dist/src/commands/tools-ui/RegisterSettings.d.ts.map +1 -0
- package/dist/src/commands/tools-ui/RegisterSettings.js +125 -0
- package/dist/src/commands/tools-ui/RegisterSettings.js.map +1 -0
- package/dist/src/commands/tools-ui/RoleMappings.d.ts +9 -0
- package/dist/src/commands/tools-ui/RoleMappings.d.ts.map +1 -0
- package/dist/src/commands/tools-ui/RoleMappings.js +104 -0
- package/dist/src/commands/tools-ui/RoleMappings.js.map +1 -0
- package/dist/src/commands/tools-ui/ToolsDashboard.d.ts +8 -0
- package/dist/src/commands/tools-ui/ToolsDashboard.d.ts.map +1 -0
- package/dist/src/commands/tools-ui/ToolsDashboard.js +60 -0
- package/dist/src/commands/tools-ui/ToolsDashboard.js.map +1 -0
- package/dist/src/commands/tools-ui/ToolsOverview.d.ts +9 -0
- package/dist/src/commands/tools-ui/ToolsOverview.d.ts.map +1 -0
- package/dist/src/commands/tools-ui/ToolsOverview.js +84 -0
- package/dist/src/commands/tools-ui/ToolsOverview.js.map +1 -0
- package/dist/src/commands/tools.d.ts +3 -0
- package/dist/src/commands/tools.d.ts.map +1 -0
- package/dist/src/commands/tools.js +78 -0
- package/dist/src/commands/tools.js.map +1 -0
- package/dist/src/config/cli-tools-config.d.ts +64 -3
- package/dist/src/config/cli-tools-config.d.ts.map +1 -1
- package/dist/src/config/cli-tools-config.js +226 -9
- package/dist/src/config/cli-tools-config.js.map +1 -1
- package/dist/src/core/component-defs.d.ts +16 -0
- package/dist/src/core/component-defs.d.ts.map +1 -0
- package/dist/src/core/component-defs.js +142 -0
- package/dist/src/core/component-defs.js.map +1 -0
- package/dist/src/core/manifest.d.ts +8 -1
- package/dist/src/core/manifest.d.ts.map +1 -1
- package/dist/src/core/manifest.js +29 -40
- package/dist/src/core/manifest.js.map +1 -1
- package/dist/src/core/tag-injector.d.ts +72 -0
- package/dist/src/core/tag-injector.d.ts.map +1 -0
- package/dist/src/core/tag-injector.js +228 -0
- package/dist/src/core/tag-injector.js.map +1 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +1 -1
- package/templates/cli/prompts/workflow-skill-conflict-patterns.txt +1 -1
- package/templates/cli/prompts/workflow-skill-lessons-learned.txt +1 -1
- package/templates/search-tools.md +1 -1
- package/templates/workflows/specs/node-catalog.md +1 -1
- package/workflows/brainstorm.md +1 -1
- package/{.claude/CLAUDE.md → workflows/claude-instructions.md} +25 -26
- package/workflows/cli-tools-usage.md +16 -2
- package/workflows/codex-instructions.md +150 -0
- package/workflows/delegate-usage.md +16 -2
- package/workflows/execute.md +28 -14
- package/workflows/init.md +2 -2
- package/workflows/issue-discover.md +2 -2
- package/workflows/maestro-super.md +120 -0
- package/workflows/maestro.codex.md +4 -4
- package/workflows/maestro.md +5 -5
- package/workflows/roadmap-common.md +197 -0
- package/workflows/roadmap.md +190 -355
- package/workflows/spec-generate.md +457 -544
- package/.claude/commands/maestro-spec-generate.md +0 -78
- package/.codex/skills/maestro-spec-generate/SKILL.md +0 -355
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { join } from 'node:path';
|
|
7
7
|
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, unlinkSync, rmSync, } from 'node:fs';
|
|
8
8
|
import { paths } from '../config/paths.js';
|
|
9
|
+
import { hasAnyMarkers, removeAllSections } from './tag-injector.js';
|
|
9
10
|
// ---------------------------------------------------------------------------
|
|
10
11
|
// Paths
|
|
11
12
|
// ---------------------------------------------------------------------------
|
|
@@ -107,56 +108,40 @@ export function deleteManifest(manifest) {
|
|
|
107
108
|
// ---------------------------------------------------------------------------
|
|
108
109
|
/** Files to preserve even during cleanup. */
|
|
109
110
|
const PRESERVE = new Set(['settings.json', 'settings.local.json']);
|
|
110
|
-
/** Files that should have maestro content removed instead of being deleted entirely. */
|
|
111
|
-
const CONTENT_MANAGED = new Set(['CLAUDE.md']);
|
|
112
|
-
/** Maestro-specific line patterns in CLAUDE.md */
|
|
113
|
-
const MAESTRO_LINE_PATTERNS = [
|
|
114
|
-
/^#\s*Maestro\s*$/i,
|
|
115
|
-
/maestro/i,
|
|
116
|
-
/~\/\.maestro\//,
|
|
117
|
-
/mcp__ide__getDiagnostics/,
|
|
118
|
-
/cli-tools\.json/,
|
|
119
|
-
];
|
|
111
|
+
/** Files that should have maestro content removed via tag injection instead of being deleted entirely. */
|
|
112
|
+
const CONTENT_MANAGED = new Set(['CLAUDE.md', 'AGENTS.md']);
|
|
120
113
|
/**
|
|
121
|
-
* Remove maestro-
|
|
114
|
+
* Remove maestro-injected content from a doc file using `<!-- maestro:start/end -->` markers.
|
|
122
115
|
*
|
|
123
|
-
*
|
|
124
|
-
* -
|
|
125
|
-
* -
|
|
126
|
-
* - If file matches maestro source content → safe to delete
|
|
127
|
-
* - If file has user additions → remove only maestro-originated lines
|
|
116
|
+
* - If the file has markers, removes only the marked section.
|
|
117
|
+
* - If nothing remains after removal, deletes the file entirely.
|
|
118
|
+
* - Returns true if any content was removed.
|
|
128
119
|
*/
|
|
129
|
-
function
|
|
120
|
+
function cleanInjectedDoc(filePath) {
|
|
130
121
|
if (!existsSync(filePath))
|
|
131
122
|
return false;
|
|
132
123
|
const content = readFileSync(filePath, 'utf-8');
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
const filteredLines = lines.filter(line => {
|
|
136
|
-
const trimmed = line.trim();
|
|
137
|
-
if (trimmed.length === 0)
|
|
138
|
-
return true; // keep blank lines
|
|
139
|
-
return !MAESTRO_LINE_PATTERNS.some(p => p.test(trimmed));
|
|
140
|
-
});
|
|
141
|
-
// Check if remaining content is empty (only whitespace/blank lines)
|
|
142
|
-
const meaningful = filteredLines.filter(l => l.trim().length > 0);
|
|
143
|
-
if (meaningful.length === 0) {
|
|
144
|
-
// File only had maestro content — safe to delete
|
|
124
|
+
if (!hasAnyMarkers(content)) {
|
|
125
|
+
// No markers — this is a legacy install or user-only file, delete entirely
|
|
145
126
|
unlinkSync(filePath);
|
|
146
127
|
return true;
|
|
147
128
|
}
|
|
148
|
-
|
|
149
|
-
if (
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
.trimEnd() + '\n';
|
|
129
|
+
const cleaned = removeAllSections(content);
|
|
130
|
+
if (!cleaned || cleaned.trim() === '') {
|
|
131
|
+
// Nothing left after removing all maestro sections — delete the file
|
|
132
|
+
unlinkSync(filePath);
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
// User content remains — write back without maestro sections
|
|
156
136
|
writeFileSync(filePath, cleaned, 'utf-8');
|
|
157
137
|
return true;
|
|
158
138
|
}
|
|
159
|
-
|
|
139
|
+
/**
|
|
140
|
+
* @param skipContentManaged If true, skip CONTENT_MANAGED files (CLAUDE.md, AGENTS.md).
|
|
141
|
+
* Use during re-install — tag injection updates in-place, so no cleanup needed.
|
|
142
|
+
* Default false (full cleanup, used by uninstall).
|
|
143
|
+
*/
|
|
144
|
+
export function cleanManifestFiles(manifest, opts) {
|
|
160
145
|
let removed = 0;
|
|
161
146
|
let skipped = 0;
|
|
162
147
|
// Remove files first (deepest paths first)
|
|
@@ -169,10 +154,14 @@ export function cleanManifestFiles(manifest) {
|
|
|
169
154
|
skipped++;
|
|
170
155
|
continue;
|
|
171
156
|
}
|
|
172
|
-
// Content-managed files:
|
|
157
|
+
// Content-managed files: skip during re-install, clean during uninstall
|
|
173
158
|
if (CONTENT_MANAGED.has(name)) {
|
|
159
|
+
if (opts?.skipContentManaged) {
|
|
160
|
+
skipped++;
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
174
163
|
try {
|
|
175
|
-
if (
|
|
164
|
+
if (cleanInjectedDoc(entry.path))
|
|
176
165
|
removed++;
|
|
177
166
|
}
|
|
178
167
|
catch { /* skip */ }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/core/manifest.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,wBAAwB;AACxB,4DAA4D;AAC5D,qDAAqD;AACrD,8EAA8E;AAE9E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,aAAa,EACb,UAAU,EACV,MAAM,GAEP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/core/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type Manifest } from './manifest.js';
|
|
2
|
+
/** Default section name when none specified (backward compat). */
|
|
3
|
+
export declare const DEFAULT_SECTION = "core";
|
|
4
|
+
export declare function markerStart(section: string): string;
|
|
5
|
+
export declare function markerEnd(section: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Detect whether the text contains markers for a specific section.
|
|
8
|
+
*/
|
|
9
|
+
export declare function hasSection(text: string, section: string): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Detect whether the text contains any maestro markers at all.
|
|
12
|
+
*/
|
|
13
|
+
export declare function hasAnyMarkers(text: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Compute bidirectional line-level similarity (Jaccard-like).
|
|
16
|
+
* Returns 0..1 where 1 = existing and source have identical line sets.
|
|
17
|
+
* Uses intersection / union to avoid false positives when one is a superset.
|
|
18
|
+
*/
|
|
19
|
+
export declare function computeSimilarity(existing: string, source: string): number;
|
|
20
|
+
export type MigrateAction = 'created' | 'updated' | 'migrated' | 'injected';
|
|
21
|
+
export interface MigrateResult {
|
|
22
|
+
/** What action was taken */
|
|
23
|
+
action: MigrateAction;
|
|
24
|
+
/** Final file content */
|
|
25
|
+
content: string;
|
|
26
|
+
/** Warning message for user (legacy content needs manual cleanup) */
|
|
27
|
+
warning?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Migrate legacy or update existing doc file content with section-based tag injection.
|
|
31
|
+
*
|
|
32
|
+
* Handles scenarios:
|
|
33
|
+
* 1. No existing file → create with markers (`created`)
|
|
34
|
+
* 2. Has this section → replace between markers (`updated`)
|
|
35
|
+
* 3. Legacy ≥99% similar (core section only, no markers at all) → replace entire content (`migrated`)
|
|
36
|
+
* 4. Legacy ≥80% similar (core section only) → inject + warn (`injected` + warning)
|
|
37
|
+
* 5. Otherwise → append markers normally (`injected`)
|
|
38
|
+
*/
|
|
39
|
+
export declare function migrateAndInject(existingContent: string, sourceContent: string, targetPath: string, section?: string): MigrateResult;
|
|
40
|
+
/**
|
|
41
|
+
* Inject or update content for a specific section.
|
|
42
|
+
*
|
|
43
|
+
* - If section markers exist, replaces everything between them.
|
|
44
|
+
* - If no section markers, appends section block at the end.
|
|
45
|
+
* - If the file is empty/missing, creates with section block.
|
|
46
|
+
*
|
|
47
|
+
* Returns the updated text.
|
|
48
|
+
*/
|
|
49
|
+
export declare function injectContent(existingContent: string, content: string, section?: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Remove a specific section's markers and content.
|
|
52
|
+
* Returns the cleaned text, or the original text if section not found.
|
|
53
|
+
*/
|
|
54
|
+
export declare function removeContent(text: string, section?: string): string;
|
|
55
|
+
/**
|
|
56
|
+
* Remove ALL maestro sections from text.
|
|
57
|
+
* Also cleans up any orphaned markers (start without matching end).
|
|
58
|
+
*/
|
|
59
|
+
export declare function removeAllSections(text: string): string;
|
|
60
|
+
export interface CopyStats {
|
|
61
|
+
files: number;
|
|
62
|
+
dirs: number;
|
|
63
|
+
skipped: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Inject source content into a target doc file using sectioned markers.
|
|
67
|
+
* Handles legacy migration with similarity detection.
|
|
68
|
+
*
|
|
69
|
+
* Returns migration result with optional warning.
|
|
70
|
+
*/
|
|
71
|
+
export declare function injectDocFile(src: string, dest: string, stats: CopyStats, manifest: Manifest, section?: string): MigrateResult;
|
|
72
|
+
//# sourceMappingURL=tag-injector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag-injector.d.ts","sourceRoot":"","sources":["../../../src/core/tag-injector.ts"],"names":[],"mappings":"AAsBA,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,eAAe,CAAC;AAEvB,kEAAkE;AAClE,eAAO,MAAM,eAAe,SAAS,CAAC;AAEtC,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;AAiBD;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAgBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAY1E;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5E,MAAM,WAAW,aAAa;IAC5B,4BAA4B;IAC5B,MAAM,EAAE,aAAa,CAAC;IACtB,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAwB,GAChC,aAAa,CAsDf;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAwB,GAChC,MAAM,CA0BR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAwB,GAAG,MAAM,CAgBrF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBtD;AAMD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,aAAa,CAgBf"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Tag Injector — injects/updates/removes content in doc files using
|
|
3
|
+
// HTML comment markers with section attributes for non-destructive,
|
|
4
|
+
// idempotent, multi-section installation.
|
|
5
|
+
//
|
|
6
|
+
// Marker format:
|
|
7
|
+
// <!-- maestro:start section="core" -->
|
|
8
|
+
// ...injected content...
|
|
9
|
+
// <!-- maestro:end section="core" -->
|
|
10
|
+
//
|
|
11
|
+
// <!-- maestro:start section="chinese" -->
|
|
12
|
+
// ...chinese response content...
|
|
13
|
+
// <!-- maestro:end section="chinese" -->
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, } from 'node:fs';
|
|
16
|
+
import { dirname } from 'node:path';
|
|
17
|
+
import { addFile, addDir, } from './manifest.js';
|
|
18
|
+
/** Default section name when none specified (backward compat). */
|
|
19
|
+
export const DEFAULT_SECTION = 'core';
|
|
20
|
+
export function markerStart(section) {
|
|
21
|
+
return `<!-- maestro:start section="${section}" -->`;
|
|
22
|
+
}
|
|
23
|
+
export function markerEnd(section) {
|
|
24
|
+
return `<!-- maestro:end section="${section}" -->`;
|
|
25
|
+
}
|
|
26
|
+
function startRe(section) {
|
|
27
|
+
return new RegExp(`^<!-- maestro:start section="${escapeRe(section)}" -->$`, 'm');
|
|
28
|
+
}
|
|
29
|
+
function endRe(section) {
|
|
30
|
+
return new RegExp(`^<!-- maestro:end section="${escapeRe(section)}" -->$`, 'm');
|
|
31
|
+
}
|
|
32
|
+
/** Match any maestro section marker (for generic detection). */
|
|
33
|
+
const ANY_START_RE = /^<!-- maestro:start section="[^"]*" -->$/m;
|
|
34
|
+
function escapeRe(s) {
|
|
35
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Detect whether the text contains markers for a specific section.
|
|
39
|
+
*/
|
|
40
|
+
export function hasSection(text, section) {
|
|
41
|
+
return startRe(section).test(text) && endRe(section).test(text);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Detect whether the text contains any maestro markers at all.
|
|
45
|
+
*/
|
|
46
|
+
export function hasAnyMarkers(text) {
|
|
47
|
+
return ANY_START_RE.test(text);
|
|
48
|
+
}
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// Legacy migration — similarity detection
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
/** Normalize text for comparison: trim lines, collapse blanks, lowercase. */
|
|
53
|
+
function normalizeForCompare(text) {
|
|
54
|
+
return text
|
|
55
|
+
.replace(/\r\n/g, '\n')
|
|
56
|
+
.split('\n')
|
|
57
|
+
.map(l => l.trim())
|
|
58
|
+
.filter(l => l.length > 0)
|
|
59
|
+
.map(l => l.toLowerCase());
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Compute bidirectional line-level similarity (Jaccard-like).
|
|
63
|
+
* Returns 0..1 where 1 = existing and source have identical line sets.
|
|
64
|
+
* Uses intersection / union to avoid false positives when one is a superset.
|
|
65
|
+
*/
|
|
66
|
+
export function computeSimilarity(existing, source) {
|
|
67
|
+
const existingLines = normalizeForCompare(existing);
|
|
68
|
+
const sourceLines = normalizeForCompare(source);
|
|
69
|
+
if (sourceLines.length === 0 && existingLines.length === 0)
|
|
70
|
+
return 1;
|
|
71
|
+
if (sourceLines.length === 0 || existingLines.length === 0)
|
|
72
|
+
return 0;
|
|
73
|
+
const existingSet = new Set(existingLines);
|
|
74
|
+
const sourceSet = new Set(sourceLines);
|
|
75
|
+
const intersection = sourceLines.filter(l => existingSet.has(l)).length;
|
|
76
|
+
const union = new Set([...existingLines, ...sourceLines]).size;
|
|
77
|
+
return intersection / union;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Migrate legacy or update existing doc file content with section-based tag injection.
|
|
81
|
+
*
|
|
82
|
+
* Handles scenarios:
|
|
83
|
+
* 1. No existing file → create with markers (`created`)
|
|
84
|
+
* 2. Has this section → replace between markers (`updated`)
|
|
85
|
+
* 3. Legacy ≥99% similar (core section only, no markers at all) → replace entire content (`migrated`)
|
|
86
|
+
* 4. Legacy ≥80% similar (core section only) → inject + warn (`injected` + warning)
|
|
87
|
+
* 5. Otherwise → append markers normally (`injected`)
|
|
88
|
+
*/
|
|
89
|
+
export function migrateAndInject(existingContent, sourceContent, targetPath, section = DEFAULT_SECTION) {
|
|
90
|
+
const trimmedSource = sourceContent.replace(/\r\n/g, '\n').replace(/\n+$/, '');
|
|
91
|
+
const block = `${markerStart(section)}\n${trimmedSource}\n${markerEnd(section)}`;
|
|
92
|
+
// Case 1: no existing file
|
|
93
|
+
if (!existingContent || existingContent.trim() === '') {
|
|
94
|
+
return { action: 'created', content: block + '\n' };
|
|
95
|
+
}
|
|
96
|
+
const text = existingContent.replace(/\r\n/g, '\n');
|
|
97
|
+
// Case 2: already has this section — just update
|
|
98
|
+
if (hasSection(text, section)) {
|
|
99
|
+
return { action: 'updated', content: injectContent(text, sourceContent, section) };
|
|
100
|
+
}
|
|
101
|
+
// If file already has other maestro sections, just append this new section
|
|
102
|
+
if (hasAnyMarkers(text)) {
|
|
103
|
+
const normalized = text.replace(/\n+$/, '');
|
|
104
|
+
return { action: 'injected', content: normalized + '\n\n' + block + '\n' };
|
|
105
|
+
}
|
|
106
|
+
// Case 3-5: legacy file without any markers — check similarity (only for core section)
|
|
107
|
+
if (section === DEFAULT_SECTION) {
|
|
108
|
+
// Exact content match → safe to wrap entirely in markers
|
|
109
|
+
const normExisting = normalizeForCompare(text);
|
|
110
|
+
const normSource = normalizeForCompare(sourceContent);
|
|
111
|
+
const isExactMatch = normExisting.length === normSource.length &&
|
|
112
|
+
normExisting.every((line, i) => line === normSource[i]);
|
|
113
|
+
if (isExactMatch) {
|
|
114
|
+
return { action: 'migrated', content: block + '\n' };
|
|
115
|
+
}
|
|
116
|
+
// Check how much of the source is present in existing (one-directional)
|
|
117
|
+
const existingSet = new Set(normExisting);
|
|
118
|
+
const matched = normSource.filter(l => existingSet.has(l)).length;
|
|
119
|
+
const forwardSimilarity = normSource.length > 0 ? matched / normSource.length : 0;
|
|
120
|
+
if (forwardSimilarity >= 0.8) {
|
|
121
|
+
const normalized = text.replace(/\n+$/, '');
|
|
122
|
+
return {
|
|
123
|
+
action: 'injected',
|
|
124
|
+
content: normalized + '\n\n' + block + '\n',
|
|
125
|
+
warning: `${targetPath}: legacy maestro content detected (${Math.round(forwardSimilarity * 100)}% match). ` +
|
|
126
|
+
`New content injected with markers. Please manually remove the old untagged content above the ${markerStart(section)} marker.`,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Case 5: just append
|
|
131
|
+
const normalized = text.replace(/\n+$/, '');
|
|
132
|
+
return { action: 'injected', content: normalized + '\n\n' + block + '\n' };
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Inject or update content for a specific section.
|
|
136
|
+
*
|
|
137
|
+
* - If section markers exist, replaces everything between them.
|
|
138
|
+
* - If no section markers, appends section block at the end.
|
|
139
|
+
* - If the file is empty/missing, creates with section block.
|
|
140
|
+
*
|
|
141
|
+
* Returns the updated text.
|
|
142
|
+
*/
|
|
143
|
+
export function injectContent(existingContent, content, section = DEFAULT_SECTION) {
|
|
144
|
+
const trimmedContent = content.replace(/\r\n/g, '\n').replace(/\n+$/, '');
|
|
145
|
+
const block = `${markerStart(section)}\n${trimmedContent}\n${markerEnd(section)}`;
|
|
146
|
+
if (!existingContent || existingContent.trim() === '') {
|
|
147
|
+
return block + '\n';
|
|
148
|
+
}
|
|
149
|
+
const text = existingContent.replace(/\r\n/g, '\n');
|
|
150
|
+
if (hasSection(text, section)) {
|
|
151
|
+
const start = markerStart(section);
|
|
152
|
+
const end = markerEnd(section);
|
|
153
|
+
const startIdx = text.indexOf(start);
|
|
154
|
+
const endIdx = text.indexOf(end);
|
|
155
|
+
if (startIdx === -1 || endIdx === -1) {
|
|
156
|
+
return text + '\n\n' + block + '\n';
|
|
157
|
+
}
|
|
158
|
+
const before = text.slice(0, startIdx);
|
|
159
|
+
const after = text.slice(endIdx + end.length);
|
|
160
|
+
return before + block + after;
|
|
161
|
+
}
|
|
162
|
+
// No section markers — append with a blank line separator
|
|
163
|
+
const normalized = text.replace(/\n+$/, '');
|
|
164
|
+
return normalized + '\n\n' + block + '\n';
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Remove a specific section's markers and content.
|
|
168
|
+
* Returns the cleaned text, or the original text if section not found.
|
|
169
|
+
*/
|
|
170
|
+
export function removeContent(text, section = DEFAULT_SECTION) {
|
|
171
|
+
if (!hasSection(text, section))
|
|
172
|
+
return text;
|
|
173
|
+
const normalized = text.replace(/\r\n/g, '\n');
|
|
174
|
+
const start = markerStart(section);
|
|
175
|
+
const end = markerEnd(section);
|
|
176
|
+
const startIdx = normalized.indexOf(start);
|
|
177
|
+
const endIdx = normalized.indexOf(end);
|
|
178
|
+
if (startIdx === -1 || endIdx === -1)
|
|
179
|
+
return text;
|
|
180
|
+
const before = normalized.slice(0, startIdx);
|
|
181
|
+
const after = normalized.slice(endIdx + end.length);
|
|
182
|
+
// Clean up extra blank lines at the junction
|
|
183
|
+
const result = (before.replace(/\n+$/, '') + after.replace(/^\n+/, '\n')).replace(/\n+$/, '');
|
|
184
|
+
return result ? result + '\n' : '';
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Remove ALL maestro sections from text.
|
|
188
|
+
* Also cleans up any orphaned markers (start without matching end).
|
|
189
|
+
*/
|
|
190
|
+
export function removeAllSections(text) {
|
|
191
|
+
const sectionRe = /<!-- maestro:start section="([^"]*)" -->/g;
|
|
192
|
+
let result = text;
|
|
193
|
+
let match;
|
|
194
|
+
// Collect all section names
|
|
195
|
+
const sections = [];
|
|
196
|
+
while ((match = sectionRe.exec(text)) !== null) {
|
|
197
|
+
sections.push(match[1]);
|
|
198
|
+
}
|
|
199
|
+
// Remove each complete section
|
|
200
|
+
for (const s of sections) {
|
|
201
|
+
result = removeContent(result, s);
|
|
202
|
+
}
|
|
203
|
+
// Clean up orphaned start markers (no matching end)
|
|
204
|
+
result = result.replace(/^<!-- maestro:start section="[^"]*" -->\n?/gm, '');
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Inject source content into a target doc file using sectioned markers.
|
|
209
|
+
* Handles legacy migration with similarity detection.
|
|
210
|
+
*
|
|
211
|
+
* Returns migration result with optional warning.
|
|
212
|
+
*/
|
|
213
|
+
export function injectDocFile(src, dest, stats, manifest, section) {
|
|
214
|
+
const destDir = dirname(dest);
|
|
215
|
+
if (!existsSync(destDir)) {
|
|
216
|
+
mkdirSync(destDir, { recursive: true });
|
|
217
|
+
stats.dirs++;
|
|
218
|
+
addDir(manifest, destDir);
|
|
219
|
+
}
|
|
220
|
+
const sourceContent = readFileSync(src, 'utf-8');
|
|
221
|
+
const existingContent = existsSync(dest) ? readFileSync(dest, 'utf-8') : '';
|
|
222
|
+
const result = migrateAndInject(existingContent, sourceContent, dest, section);
|
|
223
|
+
writeFileSync(dest, result.content, 'utf-8');
|
|
224
|
+
stats.files++;
|
|
225
|
+
addFile(manifest, dest);
|
|
226
|
+
return result;
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=tag-injector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag-injector.js","sourceRoot":"","sources":["../../../src/core/tag-injector.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -4,5 +4,9 @@ export { loadConfig, saveConfig } from './config/index.js';
|
|
|
4
4
|
export { paths } from './config/paths.js';
|
|
5
5
|
export { createManifest, addFile, addDir, saveManifest, findManifest, getAllManifests, deleteManifest, cleanManifestFiles, } from './core/manifest.js';
|
|
6
6
|
export type { Manifest, ManifestEntry } from './core/manifest.js';
|
|
7
|
+
export { migrateAndInject, injectContent, injectDocFile, removeContent, removeAllSections, hasSection, hasAnyMarkers, } from './core/tag-injector.js';
|
|
8
|
+
export type { MigrateResult, MigrateAction, CopyStats } from './core/tag-injector.js';
|
|
9
|
+
export { COMPONENT_DEFS } from './core/component-defs.js';
|
|
10
|
+
export type { ComponentDef } from './core/component-defs.js';
|
|
7
11
|
export type * from './types/index.js';
|
|
8
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,cAAc,EACd,OAAO,EACP,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,cAAc,EACd,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,mBAAmB,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,cAAc,EACd,OAAO,EACP,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,cAAc,EACd,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,mBAAmB,kBAAkB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -3,4 +3,6 @@ export { ExtensionLoader } from './core/extension-loader.js';
|
|
|
3
3
|
export { loadConfig, saveConfig } from './config/index.js';
|
|
4
4
|
export { paths } from './config/paths.js';
|
|
5
5
|
export { createManifest, addFile, addDir, saveManifest, findManifest, getAllManifests, deleteManifest, cleanManifestFiles, } from './core/manifest.js';
|
|
6
|
+
export { migrateAndInject, injectContent, injectDocFile, removeContent, removeAllSections, hasSection, hasAnyMarkers, } from './core/tag-injector.js';
|
|
7
|
+
export { COMPONENT_DEFS } from './core/component-defs.js';
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,cAAc,EACd,OAAO,EACP,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,cAAc,EACd,kBAAkB,GACnB,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,cAAc,EACd,OAAO,EACP,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,cAAc,EACd,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,aAAa,GACd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["../src/cli.ts","../src/index.ts","../src/agents/cli-agent-runner.ts","../src/agents/cli-history-store.ts","../src/agents/dashboard-bridge.ts","../src/agents/parallel-cli-runner.ts","../src/agents/terminal-adapter.ts","../src/agents/terminal-backend.ts","../src/async/delegate-broker-client.ts","../src/async/delegate-broker.ts","../src/async/delegate-control.ts","../src/async/index.ts","../src/brainstorm-visualize/frame.ts","../src/brainstorm-visualize/server.ts","../src/commands/brainstorm-visualize.ts","../src/commands/cli.ts","../src/commands/collab.ts","../src/commands/coordinate.ts","../src/commands/delegate.ts","../src/commands/ext.ts","../src/commands/hooks.ts","../src/commands/install-backend.ts","../src/commands/install.ts","../src/commands/knowhow.ts","../src/commands/launcher.ts","../src/commands/msg.ts","../src/commands/overlay.ts","../src/commands/run.ts","../src/commands/serve.ts","../src/commands/spec.ts","../src/commands/stop.ts","../src/commands/tool.ts","../src/commands/uninstall.ts","../src/commands/update.ts","../src/commands/view.ts","../src/commands/wiki.ts","../src/commands/install-ui/backupconfig.tsx","../src/commands/install-ui/blueprintpreview.logic.ts","../src/commands/install-ui/blueprintpreview.tsx","../src/commands/install-ui/componentgrid.logic.ts","../src/commands/install-ui/componentgrid.tsx","../src/commands/install-ui/configpanel.tsx","../src/commands/install-ui/cyberitem.tsx","../src/commands/install-ui/cyberdeckblueprint.tsx","../src/commands/install-ui/executionview.tsx","../src/commands/install-ui/gradientheader.tsx","../src/commands/install-ui/hooksconfig.tsx","../src/commands/install-ui/installconfirm.tsx","../src/commands/install-ui/installexecution.tsx","../src/commands/install-ui/installflow.tsx","../src/commands/install-ui/installhub.tsx","../src/commands/install-ui/installresult.tsx","../src/commands/install-ui/mcpconfig.tsx","../src/commands/install-ui/resultdashboard.tsx","../src/commands/install-ui/reviewpanel.tsx","../src/commands/install-ui/shortcutfooter.tsx","../src/commands/install-ui/statuslineconfig.tsx","../src/commands/install-ui/stepselector.tsx","../src/commands/install-ui/index.ts","../src/commands/install-ui/types.ts","../src/commands/overlay-ui/overlaylist.tsx","../src/commands/overlay-ui/index.ts","../src/commands/uninstall-ui/uninstallflow.tsx","../src/commands/uninstall-ui/index.ts","../src/config/cli-tools-config.ts","../src/config/index.ts","../src/config/paths.ts","../src/config/template-discovery.ts","../src/coordinator/cli-executor.ts","../src/coordinator/coordinate-broker-adapter.ts","../src/coordinator/expr-evaluator.ts","../src/coordinator/graph-loader.ts","../src/coordinator/graph-types.ts","../src/coordinator/graph-walker.ts","../src/coordinator/index.ts","../src/coordinator/intent-router.ts","../src/coordinator/llm-decider.ts","../src/coordinator/output-parser.ts","../src/coordinator/parallel-executor.ts","../src/coordinator/prompt-assembler.ts","../src/coordinator/step-analyzer.ts","../src/core/component-defs.ts","../src/core/extension-loader.ts","../src/core/manifest.ts","../src/core/tag-injector.ts","../src/core/tool-registry.ts","../src/core/overlay/applier.ts","../src/core/overlay/loader.ts","../src/core/overlay/patcher.ts","../src/core/overlay/section-parser.ts","../src/core/overlay/types.ts","../src/db/connection-pool.ts","../src/db/index.ts","../src/db/tenant-migrator.ts","../src/db/tenant-schema.ts","../src/db/schema/core/index.ts","../src/db/schema/core/organizations.ts","../src/db/schema/core/permissions.ts","../src/db/schema/core/refresh-tokens.ts","../src/db/schema/core/users.ts","../src/hooks/auto-mode.ts","../src/hooks/constants.ts","../src/hooks/context-budget.ts","../src/hooks/context-monitor.ts","../src/hooks/coordinator-tracker.ts","../src/hooks/delegate-monitor.ts","../src/hooks/hook-engine.ts","../src/hooks/hook-manager.ts","../src/hooks/index.ts","../src/hooks/keyword-spec-injector.ts","../src/hooks/preflight-core.ts","../src/hooks/session-context.ts","../src/hooks/skill-context.ts","../src/hooks/spec-bridge.ts","../src/hooks/spec-injector.ts","../src/hooks/statusline.ts","../src/hooks/team-monitor.ts","../src/hooks/workflow-hooks.ts","../src/hooks/workspace.ts","../src/hooks/__tests__/statusline-visual-test.ts","../src/hooks/guards/index.ts","../src/hooks/guards/preflight-guard.ts","../src/hooks/guards/prompt-guard.ts","../src/hooks/guards/spec-validator.ts","../src/hooks/guards/workflow-guard.ts","../src/hooks/plugins/index.ts","../src/hooks/plugins/spec-injection-plugin.ts","../src/hooks/plugins/telemetry-plugin.ts","../src/i18n/detect.ts","../src/i18n/index.ts","../src/i18n/types.ts","../src/i18n/locales/en.ts","../src/i18n/locales/zh.ts","../src/mcp/delegate-channel-relay.ts","../src/mcp/server.ts","../src/middleware/auth.ts","../src/middleware/permission.ts","../src/middleware/rate-limit.ts","../src/middleware/tenant.ts","../src/middleware/validation.ts","../src/migrations/_template.ts","../src/migrations/index.ts","../src/migrations/run.ts","../src/migrations/v1-to-v2.ts","../src/routes/auth.ts","../src/routes/members.ts","../src/routes/organizations.ts","../src/services/auth.service.ts","../src/services/password.service.ts","../src/services/rbac.service.ts","../src/services/token.service.ts","../src/team/phase-orchestrator.ts","../src/team/phase-types.ts","../src/tools/collab-adapter.ts","../src/tools/edit-file.ts","../src/tools/index.ts","../src/tools/merge-validator.ts","../src/tools/namespace-guard.ts","../src/tools/phase-gate-evaluator.ts","../src/tools/read-file.ts","../src/tools/read-many-files.ts","../src/tools/spec-entry-parser.ts","../src/tools/spec-init.ts","../src/tools/spec-keyword-index.ts","../src/tools/spec-loader.ts","../src/tools/store-knowhow.ts","../src/tools/team-activity.ts","../src/tools/team-agents.ts","../src/tools/team-mailbox.ts","../src/tools/team-members.ts","../src/tools/team-msg.ts","../src/tools/team-tasks-mcp.ts","../src/tools/team-tasks.ts","../src/tools/transition-recorder.ts","../src/tools/write-file.ts","../src/types/hono.d.ts","../src/types/index.ts","../src/types/tool-schema.ts","../src/utils/cli-format.ts","../src/utils/file-reader.ts","../src/utils/get-version.ts","../src/utils/jsonl-log.ts","../src/utils/migration-registry.ts","../src/utils/path-validator.ts","../src/utils/state-schema.ts","../shared/agent-types.ts"],"version":"5.9.3"}
|
package/package.json
CHANGED
|
@@ -77,7 +77,7 @@ MODE: analysis
|
|
|
77
77
|
CONTEXT: @.workflow/.archives/*/IMPL_PLAN.md @.workflow/.archives/manifest.json
|
|
78
78
|
EXPECTED: Conflict patterns with frequency and resolution
|
|
79
79
|
CONSTRAINTS: analysis=READ-ONLY
|
|
80
|
-
" --
|
|
80
|
+
" --role analyze --mode analysis --rule workflow-skill-aggregation --cd .workflow/.archives
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
**Pattern Grouping**:
|
|
@@ -73,7 +73,7 @@ MODE: analysis
|
|
|
73
73
|
CONTEXT: @.workflow/.archives/manifest.json
|
|
74
74
|
EXPECTED: Aggregated lessons with frequency counts
|
|
75
75
|
CONSTRAINTS: analysis=READ-ONLY
|
|
76
|
-
" --
|
|
76
|
+
" --role analyze --mode analysis --rule workflow-skill-aggregation --cd .workflow/.archives
|
|
77
77
|
```
|
|
78
78
|
|
|
79
79
|
**Severity Classification**:
|
|
@@ -17,7 +17,7 @@ Semantic Search → Grep (pattern) → Glob (files) → CLI (deep analysis)
|
|
|
17
17
|
| Find by intent/behavior | Semantic search tool (see above) |
|
|
18
18
|
| Known identifier/regex | `Grep` |
|
|
19
19
|
| Find files by name/ext | `Glob` |
|
|
20
|
-
| Complex cross-file reasoning | `maestro delegate --
|
|
20
|
+
| Complex cross-file reasoning | `maestro delegate --role analyze --mode analysis` |
|
|
21
21
|
| Read identified file | `Read` |
|
|
22
22
|
|
|
23
23
|
## Fallback
|
|
@@ -128,7 +128,7 @@ Deliver: [specify expected output format]
|
|
|
128
128
|
| `testing` | skill | `quality-test` |
|
|
129
129
|
| `review` | skill | `quality-review` |
|
|
130
130
|
| `brainstorm` | skill | `maestro-brainstorm` |
|
|
131
|
-
| `analysis` | cli | `maestro delegate --
|
|
131
|
+
| `analysis` | cli | `maestro delegate --role analyze --mode analysis` |
|
|
132
132
|
| `spec` | skill | `maestro-spec-generate` |
|
|
133
133
|
| `refactor` | skill | `quality-refactor` |
|
|
134
134
|
| `integration-test` | skill | `quality-integration-test` |
|
package/workflows/brainstorm.md
CHANGED
|
@@ -432,7 +432,7 @@ Execute analysis for ONE specified role with optional interactive context gather
|
|
|
432
432
|
- Enhancements applied (EP-IDs)
|
|
433
433
|
- Complexity score and review status
|
|
434
434
|
- Next:
|
|
435
|
-
Skill({ skill: "maestro-
|
|
435
|
+
Skill({ skill: "maestro-roadmap", args: "--mode full --from-brainstorm {sessionId}" }) — Generate full spec package
|
|
436
436
|
Skill({ skill: "maestro-analyze", args: "{topic}" }) — Evaluate feasibility + lock decisions
|
|
437
437
|
Skill({ skill: "maestro-analyze", args: "{phase} -q" }) — Quick decision extraction only
|
|
438
438
|
Skill({ skill: "maestro-plan", args: "{phase}" }) — Plan directly (if scope is clear)
|
|
@@ -1,26 +1,25 @@
|
|
|
1
|
-
# Maestro
|
|
2
|
-
|
|
3
|
-
Workflow orchestration CLI with MCP endpoint support and extensible architecture.
|
|
4
|
-
|
|
5
|
-
- **Coding Philosophy**: @~/.maestro/workflows/coding-philosophy.md
|
|
6
|
-
|
|
7
|
-
## Delegate & CLI
|
|
8
|
-
|
|
9
|
-
- **Delegate Usage**: @~/.maestro/workflows/delegate-usage.md
|
|
10
|
-
- **CLI Endpoints Config**: @~/.maestro/cli-tools.json
|
|
11
|
-
|
|
12
|
-
**Strictly follow the cli-tools.json configuration**
|
|
13
|
-
|
|
14
|
-
Available CLI endpoints are dynamically defined by the config file
|
|
15
|
-
|
|
16
|
-
## Code Diagnostics
|
|
17
|
-
|
|
18
|
-
- **Prefer `mcp__ide__getDiagnostics`** for code error checking over shell-based TypeScript compilation
|
|
19
|
-
|
|
20
|
-
## Knowledge Capture
|
|
21
|
-
|
|
22
|
-
- **Spec writes** → always `<spec-entry>` closed-tag format with `category`, `keywords`, `date`, `source`. Never raw Markdown. Route through `spec-add` when possible.
|
|
23
|
-
- **Capture signal** → when execution surfaces non-obvious knowledge (plan deviation, retry pattern, root cause, constraint violation), ask user once whether to persist it. Match category to content: decisions→`arch`, pitfalls→`debug`/`learning`, patterns→`coding`, rules→`quality`.
|
|
24
|
-
- **Promotion** → at milestone close, scan learnings for repeated keywords (≥2 entries) and offer to graduate them into formal conventions.
|
|
25
|
-
- **Traceability** → every entry needs a source anchor: `file:line`, `INS-{id}`, commit, or phase path.
|
|
26
|
-
|
|
1
|
+
# Maestro
|
|
2
|
+
|
|
3
|
+
Workflow orchestration CLI with MCP endpoint support and extensible architecture.
|
|
4
|
+
|
|
5
|
+
- **Coding Philosophy**: @~/.maestro/workflows/coding-philosophy.md
|
|
6
|
+
|
|
7
|
+
## Delegate & CLI
|
|
8
|
+
|
|
9
|
+
- **Delegate Usage**: @~/.maestro/workflows/delegate-usage.md
|
|
10
|
+
- **CLI Endpoints Config**: @~/.maestro/cli-tools.json
|
|
11
|
+
|
|
12
|
+
**Strictly follow the cli-tools.json configuration**
|
|
13
|
+
|
|
14
|
+
Available CLI endpoints are dynamically defined by the config file
|
|
15
|
+
|
|
16
|
+
## Code Diagnostics
|
|
17
|
+
|
|
18
|
+
- **Prefer `mcp__ide__getDiagnostics`** for code error checking over shell-based TypeScript compilation
|
|
19
|
+
|
|
20
|
+
## Knowledge Capture
|
|
21
|
+
|
|
22
|
+
- **Spec writes** → always `<spec-entry>` closed-tag format with `category`, `keywords`, `date`, `source`. Never raw Markdown. Route through `spec-add` when possible.
|
|
23
|
+
- **Capture signal** → when execution surfaces non-obvious knowledge (plan deviation, retry pattern, root cause, constraint violation), ask user once whether to persist it. Match category to content: decisions→`arch`, pitfalls→`debug`/`learning`, patterns→`coding`, rules→`quality`.
|
|
24
|
+
- **Promotion** → at milestone close, scan learnings for repeated keywords (≥2 entries) and offer to graduate them into formal conventions.
|
|
25
|
+
- **Traceability** → every entry needs a source anchor: `file:line`, `INS-{id}`, commit, or phase path.
|