maestro-flow 0.3.2 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/CLAUDE.md +2 -2
- package/.claude/agents/cli-explore-agent.md +1 -1
- package/.claude/agents/team-worker.md +237 -237
- package/.claude/commands/maestro-coordinate.md +65 -65
- package/.claude/commands/maestro-link-coordinate.md +71 -71
- package/.claude/commands/manage-issue-execute.md +73 -73
- package/.claude/commands/quality-business-test.md +110 -0
- package/.claude/skills/team-coordinate/SKILL.md +266 -266
- package/.claude/skills/team-lifecycle-v4/SKILL.md +209 -209
- package/.claude/skills/team-lifecycle-v4/roles/analyst/role.md +94 -94
- package/.claude/skills/team-lifecycle-v4/roles/executor/commands/implement.md +62 -62
- package/.claude/skills/team-lifecycle-v4/roles/planner/role.md +85 -85
- package/.claude/skills/team-lifecycle-v4/roles/writer/role.md +95 -95
- package/.claude/skills/team-quality-assurance/SKILL.md +147 -147
- package/.claude/skills/team-quality-assurance/roles/scout/role.md +75 -75
- package/.claude/skills/team-review/SKILL.md +147 -147
- package/.claude/skills/team-review/roles/reviewer/role.md +68 -68
- package/.claude/skills/team-review/roles/scanner/role.md +79 -79
- package/.claude/skills/team-tech-debt/SKILL.md +128 -128
- package/.claude/skills/team-tech-debt/roles/executor/role.md +76 -76
- package/.claude/skills/team-tech-debt/roles/scanner/role.md +90 -90
- package/.claude/skills/team-tech-debt/roles/validator/role.md +78 -78
- package/.claude/skills/team-testing/SKILL.md +143 -143
- package/.claude/skills/team-testing/roles/executor/role.md +99 -99
- package/.claude/skills/team-testing/roles/generator/role.md +98 -98
- package/.codex/skills/maestro-coordinate/SKILL.md +1 -1
- package/.codex/skills/manage-issue-analyze/SKILL.md +3 -3
- package/.codex/skills/manage-issue-execute/SKILL.md +4 -4
- package/.codex/skills/manage-issue-plan/SKILL.md +2 -2
- package/.codex/skills/quality-business-test/SKILL.md +223 -0
- package/.codex/skills/team-coordinate/SKILL.md +7 -7
- package/.codex/skills/team-coordinate/roles/coordinator/role.md +1 -1
- package/.codex/skills/team-lifecycle-v4/SKILL.md +2 -2
- package/.codex/skills/team-lifecycle-v4/instructions/agent-instruction.md +2 -2
- package/.codex/skills/team-lifecycle-v4/roles/analyst/role.md +2 -2
- package/.codex/skills/team-lifecycle-v4/roles/coordinator/role.md +2 -2
- package/.codex/skills/team-lifecycle-v4/roles/executor/commands/implement.md +1 -1
- package/.codex/skills/team-lifecycle-v4/roles/planner/role.md +2 -2
- package/.codex/skills/team-lifecycle-v4/roles/writer/role.md +1 -1
- package/.codex/skills/team-quality-assurance/SKILL.md +2 -2
- package/.codex/skills/team-quality-assurance/roles/coordinator/role.md +2 -2
- package/.codex/skills/team-quality-assurance/roles/scout/role.md +2 -2
- package/.codex/skills/team-review/SKILL.md +2 -2
- package/.codex/skills/team-review/roles/coordinator/role.md +2 -2
- 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/SKILL.md +2 -2
- package/.codex/skills/team-tech-debt/roles/coordinator/role.md +1 -1
- package/.codex/skills/team-tech-debt/roles/executor/role.md +1 -1
- package/.codex/skills/team-tech-debt/roles/scanner/role.md +1 -1
- package/.codex/skills/team-tech-debt/roles/validator/role.md +1 -1
- package/.codex/skills/team-testing/SKILL.md +2 -2
- package/.codex/skills/team-testing/roles/coordinator/role.md +2 -2
- package/.codex/skills/team-testing/roles/executor/role.md +1 -1
- package/.codex/skills/team-testing/roles/generator/role.md +1 -1
- package/README.md +31 -2
- package/README.zh-CN.md +23 -1
- package/chains/_intent-map.json +6 -0
- package/chains/_router.json +14 -0
- package/chains/full-lifecycle.json +15 -0
- package/chains/quality-loop.json +16 -1
- package/chains/singles/business-test.json +26 -0
- package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js +16 -2
- package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.d.ts +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js +25 -9
- package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js.map +1 -1
- package/dashboard/dist-server/src/agents/cli-agent-runner.d.ts +3 -0
- package/dashboard/dist-server/src/agents/cli-agent-runner.js +78 -61
- package/dashboard/dist-server/src/agents/cli-agent-runner.js.map +1 -1
- package/dashboard/dist-server/src/agents/cli-history-store.d.ts +14 -1
- package/dashboard/dist-server/src/agents/cli-history-store.js +24 -2
- package/dashboard/dist-server/src/agents/cli-history-store.js.map +1 -1
- package/dashboard/dist-server/src/commands/delegate.js +142 -6
- package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
- package/dist/src/agents/cli-agent-runner.d.ts +3 -0
- package/dist/src/agents/cli-agent-runner.d.ts.map +1 -1
- package/dist/src/agents/cli-agent-runner.js +78 -61
- package/dist/src/agents/cli-agent-runner.js.map +1 -1
- package/dist/src/agents/cli-history-store.d.ts +14 -1
- package/dist/src/agents/cli-history-store.d.ts.map +1 -1
- package/dist/src/agents/cli-history-store.js +24 -2
- package/dist/src/agents/cli-history-store.js.map +1 -1
- package/dist/src/commands/delegate.d.ts.map +1 -1
- package/dist/src/commands/delegate.js +142 -6
- package/dist/src/commands/delegate.js.map +1 -1
- package/dist/src/commands/hooks.d.ts +15 -0
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +29 -2
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/install-backend.d.ts +15 -0
- package/dist/src/commands/install-backend.d.ts.map +1 -1
- package/dist/src/commands/install-backend.js +67 -0
- package/dist/src/commands/install-backend.js.map +1 -1
- package/dist/src/commands/install-ui/BackupConfig.d.ts +6 -4
- package/dist/src/commands/install-ui/BackupConfig.d.ts.map +1 -1
- package/dist/src/commands/install-ui/BackupConfig.js +39 -12
- package/dist/src/commands/install-ui/BackupConfig.js.map +1 -1
- package/dist/src/commands/install-ui/ConfigPanel.d.ts.map +1 -1
- package/dist/src/commands/install-ui/ConfigPanel.js +1 -1
- package/dist/src/commands/install-ui/ConfigPanel.js.map +1 -1
- package/dist/src/commands/install-ui/InstallConfirm.d.ts +3 -0
- package/dist/src/commands/install-ui/InstallConfirm.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallConfirm.js +5 -1
- package/dist/src/commands/install-ui/InstallConfirm.js.map +1 -1
- package/dist/src/commands/install-ui/InstallExecution.d.ts +2 -0
- package/dist/src/commands/install-ui/InstallExecution.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallExecution.js +30 -5
- package/dist/src/commands/install-ui/InstallExecution.js.map +1 -1
- package/dist/src/commands/install-ui/InstallFlow.d.ts +1 -1
- package/dist/src/commands/install-ui/InstallFlow.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallFlow.js +31 -6
- package/dist/src/commands/install-ui/InstallFlow.js.map +1 -1
- package/dist/src/commands/install-ui/InstallHub.d.ts +5 -0
- package/dist/src/commands/install-ui/InstallHub.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallHub.js +24 -0
- package/dist/src/commands/install-ui/InstallHub.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-ui/StatuslineConfig.d.ts +9 -0
- package/dist/src/commands/install-ui/StatuslineConfig.d.ts.map +1 -0
- package/dist/src/commands/install-ui/StatuslineConfig.js +13 -0
- package/dist/src/commands/install-ui/StatuslineConfig.js.map +1 -0
- package/dist/src/commands/install-ui/index.d.ts +1 -1
- package/dist/src/commands/install-ui/index.d.ts.map +1 -1
- package/dist/src/commands/install-ui/types.d.ts +6 -0
- package/dist/src/commands/install-ui/types.d.ts.map +1 -1
- package/dist/src/commands/install-ui/types.js +3 -0
- package/dist/src/commands/install-ui/types.js.map +1 -1
- package/dist/src/commands/install.d.ts.map +1 -1
- package/dist/src/commands/install.js +6 -1
- package/dist/src/commands/install.js.map +1 -1
- package/dist/src/commands/overlay.d.ts.map +1 -1
- package/dist/src/commands/overlay.js +45 -1
- package/dist/src/commands/overlay.js.map +1 -1
- package/dist/src/commands/team.d.ts +10 -0
- package/dist/src/commands/team.d.ts.map +1 -1
- package/dist/src/commands/team.js +436 -42
- package/dist/src/commands/team.js.map +1 -1
- package/dist/src/core/manifest.d.ts.map +1 -1
- package/dist/src/core/manifest.js +58 -0
- package/dist/src/core/manifest.js.map +1 -1
- package/dist/src/core/overlay/applier.d.ts +4 -0
- package/dist/src/core/overlay/applier.d.ts.map +1 -1
- package/dist/src/core/overlay/applier.js.map +1 -1
- package/dist/src/hooks/delegate-monitor.js +1 -1
- package/dist/src/hooks/delegate-monitor.js.map +1 -1
- package/dist/src/hooks/plugins/spec-injection-plugin.d.ts.map +1 -1
- package/dist/src/hooks/plugins/spec-injection-plugin.js +17 -1
- package/dist/src/hooks/plugins/spec-injection-plugin.js.map +1 -1
- package/dist/src/hooks/spec-injector.d.ts +2 -1
- package/dist/src/hooks/spec-injector.d.ts.map +1 -1
- package/dist/src/hooks/spec-injector.js +19 -2
- package/dist/src/hooks/spec-injector.js.map +1 -1
- package/dist/src/hooks/team-monitor.d.ts.map +1 -1
- package/dist/src/hooks/team-monitor.js +17 -0
- package/dist/src/hooks/team-monitor.js.map +1 -1
- package/dist/src/i18n/locales/en.d.ts.map +1 -1
- package/dist/src/i18n/locales/en.js +25 -1
- package/dist/src/i18n/locales/en.js.map +1 -1
- package/dist/src/i18n/locales/zh.d.ts.map +1 -1
- package/dist/src/i18n/locales/zh.js +25 -1
- package/dist/src/i18n/locales/zh.js.map +1 -1
- package/dist/src/i18n/types.d.ts +22 -0
- package/dist/src/i18n/types.d.ts.map +1 -1
- package/dist/src/mcp/delegate-channel-relay.d.ts.map +1 -1
- package/dist/src/mcp/delegate-channel-relay.js +9 -9
- package/dist/src/mcp/delegate-channel-relay.js.map +1 -1
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +11 -2
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/namespace-guard.d.ts +37 -0
- package/dist/src/tools/namespace-guard.d.ts.map +1 -0
- package/dist/src/tools/namespace-guard.js +126 -0
- package/dist/src/tools/namespace-guard.js.map +1 -0
- package/dist/src/tools/spec-loader.d.ts +17 -1
- package/dist/src/tools/spec-loader.d.ts.map +1 -1
- package/dist/src/tools/spec-loader.js +71 -13
- package/dist/src/tools/spec-loader.js.map +1 -1
- package/dist/src/tools/team-members.d.ts +16 -0
- package/dist/src/tools/team-members.d.ts.map +1 -1
- package/dist/src/tools/team-members.js +31 -0
- package/dist/src/tools/team-members.js.map +1 -1
- package/package.json +2 -2
- package/templates/business-test-report.json +68 -0
- package/workflows/delegate-usage.md +330 -0
|
@@ -10,7 +10,7 @@ import { join } from 'node:path';
|
|
|
10
10
|
// ============================================================================
|
|
11
11
|
// Filename → Category mapping (single source of truth)
|
|
12
12
|
// ============================================================================
|
|
13
|
-
const CATEGORY_MAP = {
|
|
13
|
+
export const CATEGORY_MAP = {
|
|
14
14
|
'coding-conventions.md': ['execution'],
|
|
15
15
|
'architecture-constraints.md': ['execution', 'planning'],
|
|
16
16
|
'quality-rules.md': ['execution'],
|
|
@@ -23,20 +23,84 @@ const CATEGORY_MAP = {
|
|
|
23
23
|
// learnings.md is always included regardless of category filter
|
|
24
24
|
const ALWAYS_INCLUDE = 'learnings.md';
|
|
25
25
|
const SPECS_DIR = '.workflow/specs';
|
|
26
|
+
export const TEAM_SPECS_DIR = '.workflow/collab/specs';
|
|
27
|
+
/** Layer labels used as section headers when multi-directory scanning is active. */
|
|
28
|
+
const LAYER_LABELS = {
|
|
29
|
+
baseline: '# Baseline Specs',
|
|
30
|
+
team: '# Team Specs',
|
|
31
|
+
// personal label is dynamic — includes uid
|
|
32
|
+
};
|
|
26
33
|
// ============================================================================
|
|
27
34
|
// Public API
|
|
28
35
|
// ============================================================================
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Load spec files from one or more directories.
|
|
38
|
+
*
|
|
39
|
+
* When `uid` is provided, scans three directories in order:
|
|
40
|
+
* 1. .workflow/specs/ (baseline)
|
|
41
|
+
* 2. .workflow/collab/specs/ (team shared)
|
|
42
|
+
* 3. .workflow/collab/specs/{uid}/ (personal)
|
|
43
|
+
*
|
|
44
|
+
* Content from later layers is appended (never replaces earlier content).
|
|
45
|
+
* Each layer's content is prefixed with a header for clarity.
|
|
46
|
+
*
|
|
47
|
+
* When `uid` is absent, only the baseline directory is scanned — identical
|
|
48
|
+
* to the original single-directory behavior.
|
|
49
|
+
*/
|
|
50
|
+
export function loadSpecs(projectPath, category, uid) {
|
|
51
|
+
// Build ordered list of (directory, label) pairs to scan
|
|
52
|
+
const layers = buildLayers(projectPath, uid);
|
|
53
|
+
const allSections = [];
|
|
54
|
+
const allMatched = [];
|
|
55
|
+
let totalCount = 0;
|
|
56
|
+
for (const { dir, label } of layers) {
|
|
57
|
+
const { sections, matched } = loadFromDir(dir, category);
|
|
58
|
+
if (sections.length === 0)
|
|
59
|
+
continue;
|
|
60
|
+
// Only add layer headers when multi-layer mode is active (uid provided)
|
|
61
|
+
if (uid) {
|
|
62
|
+
allSections.push(`${label}\n\n${sections.join('\n\n---\n\n')}`);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
allSections.push(...sections);
|
|
66
|
+
}
|
|
67
|
+
allMatched.push(...matched);
|
|
68
|
+
totalCount += matched.length;
|
|
33
69
|
}
|
|
70
|
+
return {
|
|
71
|
+
content: allSections.length > 0
|
|
72
|
+
? `# Project Specs (${totalCount} loaded)\n\n${allSections.join('\n\n---\n\n')}`
|
|
73
|
+
: '',
|
|
74
|
+
matchedSpecs: allMatched,
|
|
75
|
+
totalLoaded: totalCount,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function buildLayers(projectPath, uid) {
|
|
79
|
+
const baseline = {
|
|
80
|
+
dir: join(projectPath, SPECS_DIR),
|
|
81
|
+
label: LAYER_LABELS.baseline,
|
|
82
|
+
};
|
|
83
|
+
if (!uid)
|
|
84
|
+
return [baseline];
|
|
85
|
+
return [
|
|
86
|
+
baseline,
|
|
87
|
+
{ dir: join(projectPath, TEAM_SPECS_DIR), label: LAYER_LABELS.team },
|
|
88
|
+
{ dir: join(projectPath, TEAM_SPECS_DIR, uid), label: `# Personal Specs (${uid})` },
|
|
89
|
+
];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Load spec files from a single directory. Returns empty arrays if the
|
|
93
|
+
* directory does not exist or is unreadable.
|
|
94
|
+
*/
|
|
95
|
+
function loadFromDir(specsDir, category) {
|
|
96
|
+
if (!existsSync(specsDir))
|
|
97
|
+
return { sections: [], matched: [] };
|
|
34
98
|
let files;
|
|
35
99
|
try {
|
|
36
100
|
files = readdirSync(specsDir).filter(f => f.endsWith('.md'));
|
|
37
101
|
}
|
|
38
102
|
catch {
|
|
39
|
-
return {
|
|
103
|
+
return { sections: [], matched: [] };
|
|
40
104
|
}
|
|
41
105
|
const sections = [];
|
|
42
106
|
const matched = [];
|
|
@@ -57,13 +121,7 @@ export function loadSpecs(projectPath, category) {
|
|
|
57
121
|
sections.push(body);
|
|
58
122
|
matched.push(file);
|
|
59
123
|
}
|
|
60
|
-
return {
|
|
61
|
-
content: sections.length > 0
|
|
62
|
-
? `# Project Specs (${matched.length} loaded)\n\n${sections.join('\n\n---\n\n')}`
|
|
63
|
-
: '',
|
|
64
|
-
matchedSpecs: matched,
|
|
65
|
-
totalLoaded: matched.length,
|
|
66
|
-
};
|
|
124
|
+
return { sections, matched };
|
|
67
125
|
}
|
|
68
126
|
// ============================================================================
|
|
69
127
|
// Internal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-loader.js","sourceRoot":"","sources":["../../../src/tools/spec-loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAcjC,+EAA+E;AAC/E,uDAAuD;AACvD,+EAA+E;AAE/E,MAAM,YAAY,GAAmC;
|
|
1
|
+
{"version":3,"file":"spec-loader.js","sourceRoot":"","sources":["../../../src/tools/spec-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,6 +59,22 @@ export declare function getMemberByUid(uid: string): MemberRecord | null;
|
|
|
59
59
|
* Returns null if git identity is unavailable or no record matches.
|
|
60
60
|
*/
|
|
61
61
|
export declare function resolveSelf(): MemberRecord | null;
|
|
62
|
+
/**
|
|
63
|
+
* Assert that team mode is active (i.e. the current git user has a member
|
|
64
|
+
* record). Throws a descriptive error if `resolveSelf()` returns null.
|
|
65
|
+
*
|
|
66
|
+
* Returns the resolved `MemberRecord` for convenience so callers can chain:
|
|
67
|
+
* const self = requireTeamMode();
|
|
68
|
+
*/
|
|
69
|
+
export declare function requireTeamMode(): MemberRecord;
|
|
70
|
+
/**
|
|
71
|
+
* Assert the current user holds the given role. Calls `resolveSelf()`
|
|
72
|
+
* internally, so it also fails when team mode is off.
|
|
73
|
+
*
|
|
74
|
+
* Throws with a message like:
|
|
75
|
+
* "This operation requires admin role. Your role: member"
|
|
76
|
+
*/
|
|
77
|
+
export declare function requireRole(required: 'admin' | 'member'): MemberRecord;
|
|
62
78
|
/**
|
|
63
79
|
* Join the team. Idempotent.
|
|
64
80
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-members.d.ts","sourceRoot":"","sources":["../../../src/tools/team-members.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAeH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,2DAA2D;AAC3D,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAUD;;;GAGG;AACH,wBAAgB,eAAe,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAKxE;AAcD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED,yEAAyE;AACzE,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAMD;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,YAAY,EAAE,CAkB5C;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAI/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,IAAI,YAAY,GAAG,IAAI,CAQjD;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;CAAE,GAAG,YAAY,CAkC3E"}
|
|
1
|
+
{"version":3,"file":"team-members.d.ts","sourceRoot":"","sources":["../../../src/tools/team-members.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAeH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,2DAA2D;AAC3D,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAUD;;;GAGG;AACH,wBAAgB,eAAe,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAKxE;AAcD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED,yEAAyE;AACzE,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAMD;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,YAAY,EAAE,CAkB5C;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAI/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,IAAI,YAAY,GAAG,IAAI,CAQjD;AAMD;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAQ9C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,YAAY,CAQtE;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;CAAE,GAAG,YAAY,CAkC3E"}
|
|
@@ -127,6 +127,37 @@ export function resolveSelf() {
|
|
|
127
127
|
return null;
|
|
128
128
|
}
|
|
129
129
|
// ---------------------------------------------------------------------------
|
|
130
|
+
// Guards
|
|
131
|
+
// ---------------------------------------------------------------------------
|
|
132
|
+
/**
|
|
133
|
+
* Assert that team mode is active (i.e. the current git user has a member
|
|
134
|
+
* record). Throws a descriptive error if `resolveSelf()` returns null.
|
|
135
|
+
*
|
|
136
|
+
* Returns the resolved `MemberRecord` for convenience so callers can chain:
|
|
137
|
+
* const self = requireTeamMode();
|
|
138
|
+
*/
|
|
139
|
+
export function requireTeamMode() {
|
|
140
|
+
const self = resolveSelf();
|
|
141
|
+
if (!self) {
|
|
142
|
+
throw new Error("Team mode not enabled. Run 'maestro team join' first.");
|
|
143
|
+
}
|
|
144
|
+
return self;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Assert the current user holds the given role. Calls `resolveSelf()`
|
|
148
|
+
* internally, so it also fails when team mode is off.
|
|
149
|
+
*
|
|
150
|
+
* Throws with a message like:
|
|
151
|
+
* "This operation requires admin role. Your role: member"
|
|
152
|
+
*/
|
|
153
|
+
export function requireRole(required) {
|
|
154
|
+
const self = requireTeamMode();
|
|
155
|
+
if (self.role !== required) {
|
|
156
|
+
throw new Error(`This operation requires ${required} role. Your role: ${self.role}`);
|
|
157
|
+
}
|
|
158
|
+
return self;
|
|
159
|
+
}
|
|
160
|
+
// ---------------------------------------------------------------------------
|
|
130
161
|
// Writes
|
|
131
162
|
// ---------------------------------------------------------------------------
|
|
132
163
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-members.js","sourceRoot":"","sources":["../../../src/tools/team-members.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"team-members.js","sourceRoot":"","sources":["../../../src/tools/team-members.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "maestro-flow",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "Workflow orchestration CLI with MCP endpoint support and extensible architecture",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"imports": {
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"dashboard/package.json"
|
|
34
34
|
],
|
|
35
35
|
"scripts": {
|
|
36
|
-
"build": "tsc",
|
|
36
|
+
"build": "cd dashboard && npx tsc -p tsconfig.node.json && cd .. && tsc",
|
|
37
37
|
"dev": "tsc --watch",
|
|
38
38
|
"start": "node bin/maestro.js",
|
|
39
39
|
"mcp": "node bin/maestro-mcp.js",
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_template_note": "Template for business-test-report.json. Fields marked with {placeholder} are filled at runtime.",
|
|
3
|
+
"phase": "{phase}",
|
|
4
|
+
"spec_ref": "{spec_ref}",
|
|
5
|
+
"spec_mode": "full|degraded",
|
|
6
|
+
"completed_at": "{ISO timestamp}",
|
|
7
|
+
"execution_mode": "gen-code|agent",
|
|
8
|
+
"iterations": {
|
|
9
|
+
"L1": { "count": 0, "converged": false },
|
|
10
|
+
"L2": { "count": 0, "converged": false },
|
|
11
|
+
"L3": { "count": 0, "converged": false }
|
|
12
|
+
},
|
|
13
|
+
"layers": {
|
|
14
|
+
"L1": { "total": 0, "passed": 0, "failed": 0, "blocked": 0, "pass_rate": 0.0 },
|
|
15
|
+
"L2": { "total": 0, "passed": 0, "failed": 0, "blocked": 0, "pass_rate": 0.0 },
|
|
16
|
+
"L3": { "total": 0, "passed": 0, "failed": 0, "blocked": 0, "pass_rate": 0.0 }
|
|
17
|
+
},
|
|
18
|
+
"requirement_coverage": [
|
|
19
|
+
{
|
|
20
|
+
"_example": true,
|
|
21
|
+
"req_id": "REQ-001",
|
|
22
|
+
"title": "Requirement title",
|
|
23
|
+
"total_criteria": 0,
|
|
24
|
+
"criteria_results": [
|
|
25
|
+
{
|
|
26
|
+
"ac_id": "AC-1",
|
|
27
|
+
"description": "Acceptance criterion text",
|
|
28
|
+
"priority": "critical|high|medium",
|
|
29
|
+
"status": "passed|failed|blocked|untested",
|
|
30
|
+
"tests": ["BT-001"],
|
|
31
|
+
"failure": null
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"coverage_pct": 0.0,
|
|
35
|
+
"verdict": "verified|partial|unverified"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"failures": [
|
|
39
|
+
{
|
|
40
|
+
"_example": true,
|
|
41
|
+
"id": "BF-001",
|
|
42
|
+
"test_id": "BT-001",
|
|
43
|
+
"req_ref": "REQ-001:AC-1",
|
|
44
|
+
"layer": "L1|L2|L3",
|
|
45
|
+
"severity": "critical|high|medium",
|
|
46
|
+
"classification": "code_defect|test_defect|env_issue",
|
|
47
|
+
"description": "Failure description",
|
|
48
|
+
"expected": "Expected behavior",
|
|
49
|
+
"actual": "Actual behavior",
|
|
50
|
+
"fix_suggestion": {
|
|
51
|
+
"file": "src/...",
|
|
52
|
+
"line": 0,
|
|
53
|
+
"direction": "Fix direction"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"summary": {
|
|
58
|
+
"total_requirements": 0,
|
|
59
|
+
"fully_verified": 0,
|
|
60
|
+
"partially_verified": 0,
|
|
61
|
+
"unverified": 0,
|
|
62
|
+
"coverage_pct": 0.0,
|
|
63
|
+
"total_scenarios": 0,
|
|
64
|
+
"total_passed": 0,
|
|
65
|
+
"total_failed": 0,
|
|
66
|
+
"total_blocked": 0
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
# Delegate Execution Specification
|
|
2
|
+
|
|
3
|
+
<purpose>
|
|
4
|
+
Unified reference for `maestro delegate` — async task delegation via detached worker processes, with broker-managed lifecycle, message injection, and MCP notifications. Superset of `maestro cli` with async execution, cancellation, and message chaining.
|
|
5
|
+
</purpose>
|
|
6
|
+
|
|
7
|
+
**References**: `~/.maestro/cli-tools.json` (tool config), `~/.maestro/templates/cli/` (protocol + prompt templates)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. Quick Reference
|
|
12
|
+
|
|
13
|
+
<context>
|
|
14
|
+
|
|
15
|
+
### Command Syntax
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
maestro delegate "<PROMPT>" [options]
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Options
|
|
22
|
+
|
|
23
|
+
| Option | Description | Default |
|
|
24
|
+
|--------|-------------|---------|
|
|
25
|
+
| `--to <tool>` | Tool: gemini, qwen, codex, claude, opencode | First enabled in config |
|
|
26
|
+
| `--mode <mode>` | `analysis` (read-only) or `write` (create/modify/delete) | `analysis` |
|
|
27
|
+
| `--model <model>` | Model override | Tool's `primaryModel` |
|
|
28
|
+
| `--cd <dir>` | Working directory | Current directory |
|
|
29
|
+
| `--rule <template>` | Load protocol + prompt template | — (optional) |
|
|
30
|
+
| `--id <id>` | Execution ID | Auto: `{prefix}-{HHmmss}-{rand4}` |
|
|
31
|
+
| `--resume [id]` | Resume previous session (last if no id) | — |
|
|
32
|
+
| `--includeDirs <dirs>` | Additional directories (comma-separated) | — |
|
|
33
|
+
| `--session <id>` | MCP session ID for completion notifications | Auto-detected |
|
|
34
|
+
| `--backend <type>` | Adapter backend: `direct` or `terminal` (tmux/wezterm) | `direct` |
|
|
35
|
+
| `--async` | Run in background and return immediately | foreground |
|
|
36
|
+
|
|
37
|
+
### Mode Definition (Authoritative)
|
|
38
|
+
|
|
39
|
+
| Mode | Permission | Auto-Invoke Safe | Use For |
|
|
40
|
+
|------|-----------|------------------|---------|
|
|
41
|
+
| `analysis` | Read-only | Yes | Review, exploration, diagnosis, architecture analysis |
|
|
42
|
+
| `write` | Create/Modify/Delete | No — requires explicit intent | Implementation, bug fixes, refactoring |
|
|
43
|
+
|
|
44
|
+
> `--mode` is the **authoritative** permission control. The `MODE:` field inside prompt text is a hint for the agent — both should be consistent, but `--mode` governs actual behavior.
|
|
45
|
+
</context>
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 2. Configuration
|
|
50
|
+
|
|
51
|
+
<context>
|
|
52
|
+
|
|
53
|
+
### Config File: `~/.maestro/cli-tools.json`
|
|
54
|
+
|
|
55
|
+
| Field | Description |
|
|
56
|
+
|-------|-------------|
|
|
57
|
+
| `enabled` | Tool availability |
|
|
58
|
+
| `primaryModel` | Default model |
|
|
59
|
+
| `secondaryModel` | Fallback model |
|
|
60
|
+
| `tags` | Capability tags (for caller-side routing) |
|
|
61
|
+
| `type` | `builtin` / `cli-wrapper` / `api-endpoint` |
|
|
62
|
+
|
|
63
|
+
> `api-endpoint` tools support **analysis only** — no file write capability.
|
|
64
|
+
|
|
65
|
+
### Tool Selection
|
|
66
|
+
|
|
67
|
+
1. Explicit `--to` specified → use it (validate enabled)
|
|
68
|
+
2. No `--to` → first enabled tool in config order
|
|
69
|
+
|
|
70
|
+
### Fallback Chain
|
|
71
|
+
|
|
72
|
+
Primary model fails → `secondaryModel` → next enabled tool → first enabled (default).
|
|
73
|
+
|
|
74
|
+
### MCP Server Startup
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# Claude Code — load Maestro as development MCP server
|
|
78
|
+
claude --dangerously-load-development-channels server:maestro --dangerously-skip-permissions
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
With MCP connected, all delegate tools are available programmatically.
|
|
82
|
+
</context>
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 3. Prompt Construction
|
|
87
|
+
|
|
88
|
+
<context>
|
|
89
|
+
|
|
90
|
+
### Assembly Order
|
|
91
|
+
|
|
92
|
+
`maestro delegate` builds the final prompt identically to `maestro cli`:
|
|
93
|
+
|
|
94
|
+
1. **Mode protocol** — `~/.maestro/templates/cli/protocols/{mode}-protocol.md`
|
|
95
|
+
2. **User prompt** — the positional `"<PROMPT>"` value
|
|
96
|
+
3. **Rule template** — `~/.maestro/templates/cli/prompts/{rule}.txt` (if `--rule` specified)
|
|
97
|
+
|
|
98
|
+
### Prompt Template (6 Fields)
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
PURPOSE: [goal] + [why] + [success criteria]
|
|
102
|
+
TASK: [step 1] | [step 2] | [step 3]
|
|
103
|
+
MODE: analysis|write
|
|
104
|
+
CONTEXT: @[file patterns] | Memory: [prior work context]
|
|
105
|
+
EXPECTED: [output format] + [quality criteria]
|
|
106
|
+
CONSTRAINTS: [scope limits] | [special requirements]
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
- **PURPOSE**: What + Why + Success. Not "Analyze code" but "Identify auth vulnerabilities; success = OWASP Top 10 covered"
|
|
110
|
+
- **TASK**: Specific verbs. Not "Review code" but "Scan for SQL injection | Check XSS | Verify CSRF"
|
|
111
|
+
- **MODE**: Must match `--mode` flag
|
|
112
|
+
- **CONTEXT**: File scope + memory from prior work
|
|
113
|
+
- **EXPECTED**: Deliverable format, not just "Report"
|
|
114
|
+
- **CONSTRAINTS**: Task-specific limits (vs `--rule` which loads generic templates)
|
|
115
|
+
|
|
116
|
+
### CONTEXT: File Patterns + Directory
|
|
117
|
+
|
|
118
|
+
- `@**/*` — all files in working directory (default)
|
|
119
|
+
- `@src/**/*.ts` — scoped pattern
|
|
120
|
+
- `@../shared/**/*` — sibling directory (**requires `--includeDirs`**)
|
|
121
|
+
|
|
122
|
+
**Rule**: If CONTEXT uses `@../dir/**/*`, must add `--includeDirs ../dir`.
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
maestro delegate "CONTEXT: @**/* @../shared/**/*" --to gemini --mode analysis \
|
|
126
|
+
--cd "src/auth" --includeDirs "../shared"
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### CONTEXT: Memory
|
|
130
|
+
|
|
131
|
+
Include when building on previous work:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
Memory: Building on auth refactoring (commit abc123), implementing refresh tokens
|
|
135
|
+
Memory: Integration with auth module, using shared error patterns
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### --rule Templates
|
|
139
|
+
|
|
140
|
+
**Universal**: `universal-rigorous-style`, `universal-creative-style`
|
|
141
|
+
|
|
142
|
+
**Analysis**: `analysis-trace-code-execution`, `analysis-diagnose-bug-root-cause`, `analysis-analyze-code-patterns`, `analysis-analyze-technical-document`, `analysis-review-architecture`, `analysis-review-code-quality`, `analysis-analyze-performance`, `analysis-assess-security-risks`
|
|
143
|
+
|
|
144
|
+
**Planning**: `planning-plan-architecture-design`, `planning-breakdown-task-steps`, `planning-design-component-spec`, `planning-plan-migration-strategy`
|
|
145
|
+
|
|
146
|
+
**Development**: `development-implement-feature`, `development-refactor-codebase`, `development-generate-tests`, `development-implement-component-ui`, `development-debug-runtime-issues`
|
|
147
|
+
|
|
148
|
+
### Complete Example
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
maestro delegate "PURPOSE: Identify OWASP Top 10 vulnerabilities in auth module; success = all critical/high documented with remediation
|
|
152
|
+
TASK: Scan for injection flaws | Check auth bypass vectors | Evaluate session management | Assess data exposure
|
|
153
|
+
MODE: analysis
|
|
154
|
+
CONTEXT: @src/auth/**/* @src/middleware/auth.ts | Memory: Using bcrypt + JWT
|
|
155
|
+
EXPECTED: Severity matrix, file:line references, remediation snippets, priority ranking
|
|
156
|
+
CONSTRAINTS: Focus on authentication | Ignore test files
|
|
157
|
+
" --to gemini --mode analysis --rule analysis-assess-security-risks --cd "src/auth" --async
|
|
158
|
+
```
|
|
159
|
+
</context>
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 4. Execution
|
|
164
|
+
|
|
165
|
+
<execution>
|
|
166
|
+
|
|
167
|
+
### Execution ID
|
|
168
|
+
|
|
169
|
+
ID prefix: gemini→`gem`, qwen→`qwn`, codex→`cdx`, claude→`cld`, opencode→`opc`
|
|
170
|
+
|
|
171
|
+
Format: `{prefix}-{HHmmss}-{rand4}` (e.g. `gem-143022-a7f2`)
|
|
172
|
+
|
|
173
|
+
Output to stderr: `[MAESTRO_EXEC_ID=<id>]`
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
maestro delegate "analyze code" --to gemini --async # auto-ID: gem-143022-a7f2
|
|
177
|
+
maestro delegate "fix bug" --to gemini --mode write --id my-task-1 # custom ID
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Session Resume
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
maestro delegate "continue" --to gemini --resume # last session
|
|
184
|
+
maestro delegate "continue" --to gemini --resume <id> # specific session
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Resume auto-assembles previous conversation context. Warning emitted when context exceeds 32KB.
|
|
188
|
+
|
|
189
|
+
### Subcommands
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
# List executions
|
|
193
|
+
maestro delegate show # recent 20
|
|
194
|
+
maestro delegate show --all # up to 100
|
|
195
|
+
|
|
196
|
+
# Inspect state
|
|
197
|
+
maestro delegate status <id> # broker + history + snapshot preview
|
|
198
|
+
maestro delegate status <id> --events 10 # with more broker events
|
|
199
|
+
maestro delegate tail <id> # recent events + history
|
|
200
|
+
maestro delegate tail <id> --events 20 --history 20
|
|
201
|
+
|
|
202
|
+
# Get result
|
|
203
|
+
maestro delegate output <id> # assistant output
|
|
204
|
+
maestro delegate output <id> --verbose # include timestamps
|
|
205
|
+
|
|
206
|
+
# Lifecycle control
|
|
207
|
+
maestro delegate cancel <id> # request cancellation
|
|
208
|
+
|
|
209
|
+
# Message delivery
|
|
210
|
+
maestro delegate message <id> "text" # inject into running worker
|
|
211
|
+
maestro delegate message <id> "text" --delivery after_complete # chain after done
|
|
212
|
+
maestro delegate messages <id> # list queued messages
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### MCP Tools
|
|
216
|
+
|
|
217
|
+
All subcommands are also available as MCP tools for programmatic access:
|
|
218
|
+
|
|
219
|
+
| CLI Subcommand | MCP Tool | Extra Params |
|
|
220
|
+
|---------------|----------|-------------|
|
|
221
|
+
| `message <id> "text"` | `delegate_message` | `delivery` (inject/after_complete) |
|
|
222
|
+
| `messages <id>` | `delegate_messages` | — |
|
|
223
|
+
| `status <id>` | `delegate_status` | `eventLimit` |
|
|
224
|
+
| `output <id>` | `delegate_output` | — |
|
|
225
|
+
| `tail <id>` | `delegate_tail` | `limit` |
|
|
226
|
+
| `cancel <id>` | `delegate_cancel` | — |
|
|
227
|
+
|
|
228
|
+
### Snapshot & Preview
|
|
229
|
+
|
|
230
|
+
`delegate status` includes a `Preview:` field showing the agent's latest output — built from `assistant_message`, `tool_use` completions, and `file_change` events. This serves the same purpose as `maestro cli watch` without requiring real-time streaming.
|
|
231
|
+
|
|
232
|
+
### Job Lifecycle
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
queued → running → completed
|
|
236
|
+
→ failed
|
|
237
|
+
→ cancelled
|
|
238
|
+
↗
|
|
239
|
+
input_required
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Message Delivery
|
|
243
|
+
|
|
244
|
+
| Mode | Behavior | Use For |
|
|
245
|
+
|------|----------|---------|
|
|
246
|
+
| `inject` | Routes to running worker stdin; non-interactive adapters auto cancel + relaunch | Supplementary context, course correction |
|
|
247
|
+
| `after_complete` | Queues message; relaunches delegate with queued message on completion | Chained tasks, post-processing |
|
|
248
|
+
|
|
249
|
+
### Notification Channels
|
|
250
|
+
|
|
251
|
+
Delegate completion notifies the caller through dual channels:
|
|
252
|
+
|
|
253
|
+
1. **MCP channel** (primary) — push notification with structured meta (exec_id, event_type, status)
|
|
254
|
+
2. **Hook fallback** — JSONL file read by `delegate-monitor` PostToolUse hook
|
|
255
|
+
|
|
256
|
+
Throttling: `status_update` at 10s, `snapshot` at 15s.
|
|
257
|
+
</execution>
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## 5. Auto-Invoke Triggers
|
|
262
|
+
|
|
263
|
+
<execution>
|
|
264
|
+
|
|
265
|
+
Proactively invoke `maestro delegate` when these conditions are met — no user confirmation needed for `analysis` mode:
|
|
266
|
+
|
|
267
|
+
| Trigger | Suggested Rule |
|
|
268
|
+
|---------|---------------|
|
|
269
|
+
| Self-repair fails (1+ attempts) | `analysis-diagnose-bug-root-cause` |
|
|
270
|
+
| Ambiguous requirements | `planning-breakdown-task-steps` |
|
|
271
|
+
| Architecture decisions needed | `planning-plan-architecture-design` |
|
|
272
|
+
| Pattern uncertainty | `analysis-analyze-code-patterns` |
|
|
273
|
+
| Critical/security code paths | `analysis-assess-security-risks` |
|
|
274
|
+
|
|
275
|
+
### Principles
|
|
276
|
+
|
|
277
|
+
- Default `--mode analysis` (safe, read-only)
|
|
278
|
+
- Use `--async` for non-blocking execution; await MCP notification for result
|
|
279
|
+
- Tool fallback: `gemini` → `qwen` → `codex`
|
|
280
|
+
- Rule suggestions are guidelines — choose the best fit
|
|
281
|
+
- Use `inject` for supplementary context mid-execution; `after_complete` for chained multi-step tasks
|
|
282
|
+
- Check `delegate status` for snapshot preview instead of polling output
|
|
283
|
+
</execution>
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## 6. Workflows
|
|
288
|
+
|
|
289
|
+
<execution>
|
|
290
|
+
|
|
291
|
+
### Launch → Monitor → Retrieve
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
maestro delegate "analyze auth module" --to gemini --async
|
|
295
|
+
# → [MAESTRO_EXEC_ID=gem-143022-a7f2]
|
|
296
|
+
|
|
297
|
+
maestro delegate status gem-143022-a7f2
|
|
298
|
+
# → status: running, Preview: "Found 3 potential injection points..."
|
|
299
|
+
|
|
300
|
+
# Await MCP channel notification...
|
|
301
|
+
# → [DELEGATE DONE] gem-143022-a7f2 gemini/analysis completed
|
|
302
|
+
|
|
303
|
+
maestro delegate output gem-143022-a7f2
|
|
304
|
+
# → full analysis result
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Inject Supplementary Context
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
maestro delegate message gem-143022-a7f2 "Also check src/utils/sanitize.ts"
|
|
311
|
+
# → accepted: true, delivery: inject
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### Chain: Analyze → Auto-Fix
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
maestro delegate "find SQL injection vulnerabilities" --to gemini --async
|
|
318
|
+
maestro delegate message gem-143022-a7f2 "Fix all critical vulnerabilities" --delivery after_complete
|
|
319
|
+
# → queued, auto-relaunches after analysis completes
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Cancel → Redirect
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
maestro delegate cancel gem-143022-a7f2
|
|
326
|
+
# → cancellation requested
|
|
327
|
+
|
|
328
|
+
maestro delegate "analyze only the payment module" --to gemini --async
|
|
329
|
+
```
|
|
330
|
+
</execution>
|