maestro-flow 0.4.14 → 0.4.16
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/.agents/skills/maestro/SKILL.md +22 -42
- package/.agents/skills/maestro-plan/SKILL.md +10 -9
- package/.agents/skills/maestro-ralph/SKILL.md +61 -55
- package/.agents/skills/maestro-ralph-execute/SKILL.md +66 -109
- package/.agents/skills/manage-knowledge-audit/SKILL.md +90 -0
- package/.agy/skills/maestro/SKILL.md +22 -42
- package/.agy/skills/maestro-plan/SKILL.md +10 -9
- package/.agy/skills/maestro-ralph/SKILL.md +61 -55
- package/.agy/skills/maestro-ralph-execute/SKILL.md +66 -109
- package/.agy/skills/manage-knowledge-audit/SKILL.md +90 -0
- package/.claude/commands/maestro-plan.md +10 -9
- package/.claude/commands/maestro-ralph-execute.md +66 -109
- package/.claude/commands/maestro-ralph.md +61 -55
- package/.claude/commands/maestro.md +22 -42
- package/.claude/commands/manage-knowledge-audit.md +88 -0
- package/dist/src/cli.js +1 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/font-guide.d.ts +13 -0
- package/dist/src/commands/font-guide.d.ts.map +1 -0
- package/dist/src/commands/font-guide.js +114 -0
- package/dist/src/commands/font-guide.js.map +1 -0
- package/dist/src/commands/hooks.d.ts +30 -3
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +138 -11
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/install-backend.d.ts +49 -4
- package/dist/src/commands/install-backend.d.ts.map +1 -1
- package/dist/src/commands/install-backend.js +163 -53
- package/dist/src/commands/install-backend.js.map +1 -1
- package/dist/src/commands/install.d.ts.map +1 -1
- package/dist/src/commands/install.js +50 -10
- package/dist/src/commands/install.js.map +1 -1
- package/dist/src/commands/ralph.d.ts +6 -0
- package/dist/src/commands/ralph.d.ts.map +1 -0
- package/dist/src/commands/ralph.js +133 -0
- package/dist/src/commands/ralph.js.map +1 -0
- package/dist/src/commands/uninstall.d.ts.map +1 -1
- package/dist/src/commands/uninstall.js +25 -38
- package/dist/src/commands/uninstall.js.map +1 -1
- package/dist/src/core/manifest.d.ts +45 -0
- package/dist/src/core/manifest.d.ts.map +1 -1
- package/dist/src/core/manifest.js +37 -1
- package/dist/src/core/manifest.js.map +1 -1
- package/dist/src/hooks/statusline.d.ts.map +1 -1
- package/dist/src/hooks/statusline.js +189 -81
- package/dist/src/hooks/statusline.js.map +1 -1
- package/dist/src/ralph/cmd-check.d.ts +9 -0
- package/dist/src/ralph/cmd-check.d.ts.map +1 -0
- package/dist/src/ralph/cmd-check.js +53 -0
- package/dist/src/ralph/cmd-check.js.map +1 -0
- package/dist/src/ralph/cmd-complete.d.ts +10 -0
- package/dist/src/ralph/cmd-complete.d.ts.map +1 -0
- package/dist/src/ralph/cmd-complete.js +91 -0
- package/dist/src/ralph/cmd-complete.js.map +1 -0
- package/dist/src/ralph/cmd-next.d.ts +5 -0
- package/dist/src/ralph/cmd-next.d.ts.map +1 -0
- package/dist/src/ralph/cmd-next.js +158 -0
- package/dist/src/ralph/cmd-next.js.map +1 -0
- package/dist/src/ralph/cmd-session.d.ts +5 -0
- package/dist/src/ralph/cmd-session.d.ts.map +1 -0
- package/dist/src/ralph/cmd-session.js +52 -0
- package/dist/src/ralph/cmd-session.js.map +1 -0
- package/dist/src/ralph/cmd-skills.d.ts +6 -0
- package/dist/src/ralph/cmd-skills.d.ts.map +1 -0
- package/dist/src/ralph/cmd-skills.js +55 -0
- package/dist/src/ralph/cmd-skills.js.map +1 -0
- package/dist/src/ralph/skill-resolver.d.ts +40 -0
- package/dist/src/ralph/skill-resolver.d.ts.map +1 -0
- package/dist/src/ralph/skill-resolver.js +162 -0
- package/dist/src/ralph/skill-resolver.js.map +1 -0
- package/dist/src/ralph/skill-scanner.d.ts +15 -0
- package/dist/src/ralph/skill-scanner.d.ts.map +1 -0
- package/dist/src/ralph/skill-scanner.js +122 -0
- package/dist/src/ralph/skill-scanner.js.map +1 -0
- package/dist/src/ralph/status-checker.d.ts +7 -0
- package/dist/src/ralph/status-checker.d.ts.map +1 -0
- package/dist/src/ralph/status-checker.js +139 -0
- package/dist/src/ralph/status-checker.js.map +1 -0
- package/dist/src/ralph/status-schema.d.ts +94 -0
- package/dist/src/ralph/status-schema.d.ts.map +1 -0
- package/dist/src/ralph/status-schema.js +9 -0
- package/dist/src/ralph/status-schema.js.map +1 -0
- package/dist/src/ralph/status-store.d.ts +20 -0
- package/dist/src/ralph/status-store.d.ts.map +1 -0
- package/dist/src/ralph/status-store.js +70 -0
- package/dist/src/ralph/status-store.js.map +1 -0
- package/dist/src/tui/install-ui/ExecutionView.d.ts.map +1 -1
- package/dist/src/tui/install-ui/ExecutionView.js +14 -5
- package/dist/src/tui/install-ui/ExecutionView.js.map +1 -1
- package/dist/src/tui/install-ui/InstallExecution.d.ts.map +1 -1
- package/dist/src/tui/install-ui/InstallExecution.js +89 -45
- package/dist/src/tui/install-ui/InstallExecution.js.map +1 -1
- package/dist/src/tui/install-ui/InstallFlow.d.ts.map +1 -1
- package/dist/src/tui/install-ui/InstallFlow.js +28 -14
- package/dist/src/tui/install-ui/InstallFlow.js.map +1 -1
- package/dist/src/tui/install-ui/InstallResult.d.ts.map +1 -1
- package/dist/src/tui/install-ui/InstallResult.js +1 -1
- package/dist/src/tui/install-ui/InstallResult.js.map +1 -1
- package/dist/src/tui/uninstall-ui/UninstallFlow.d.ts.map +1 -1
- package/dist/src/tui/uninstall-ui/UninstallFlow.js +12 -28
- package/dist/src/tui/uninstall-ui/UninstallFlow.js.map +1 -1
- package/dist/src/utils/update-notices.js +12 -0
- package/dist/src/utils/update-notices.js.map +1 -1
- package/package.json +1 -1
- package/workflows/knowledge-audit.md +358 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// `maestro ralph` — Ralph step loader & status.json driver.
|
|
3
|
+
//
|
|
4
|
+
// Subcommands:
|
|
5
|
+
// skills List effective commands + skills (global + project, project wins)
|
|
6
|
+
// check Run health check against current ralph status.json
|
|
7
|
+
// session Show current ralph session summary
|
|
8
|
+
// next Load next pending step + required_reading, write status.json
|
|
9
|
+
// complete Mark current step done / concerns / retry / blocked
|
|
10
|
+
// retry Sugar for `complete <idx> --status NEEDS_RETRY`
|
|
11
|
+
//
|
|
12
|
+
// Data contract: drives `.workflow/.maestro/ralph-*/status.json`.
|
|
13
|
+
// NOT to be confused with `maestro coordinate` (graph chain walker).
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Lazy module loader — keeps cold start cheap and isolates ralph-only deps.
|
|
16
|
+
async function loadSkillsCmd() {
|
|
17
|
+
return (await import('../ralph/cmd-skills.js')).runSkills;
|
|
18
|
+
}
|
|
19
|
+
async function loadCheckCmd() {
|
|
20
|
+
return (await import('../ralph/cmd-check.js')).runCheck;
|
|
21
|
+
}
|
|
22
|
+
async function loadSessionCmd() {
|
|
23
|
+
return (await import('../ralph/cmd-session.js')).runSession;
|
|
24
|
+
}
|
|
25
|
+
async function loadNextCmd() {
|
|
26
|
+
return (await import('../ralph/cmd-next.js')).runNext;
|
|
27
|
+
}
|
|
28
|
+
async function loadCompleteCmd() {
|
|
29
|
+
return (await import('../ralph/cmd-complete.js')).runComplete;
|
|
30
|
+
}
|
|
31
|
+
const VALID_STATUSES = ['DONE', 'DONE_WITH_CONCERNS', 'NEEDS_RETRY', 'BLOCKED'];
|
|
32
|
+
export function registerRalphCommand(program) {
|
|
33
|
+
const ralph = program
|
|
34
|
+
.command('ralph')
|
|
35
|
+
.description('Ralph step loader & status.json driver (separate from coordinate)');
|
|
36
|
+
// ── skills ──────────────────────────────────────────────────────────────
|
|
37
|
+
ralph
|
|
38
|
+
.command('skills')
|
|
39
|
+
.description('List effective commands + skills (project overrides global)')
|
|
40
|
+
.option('--json', 'Machine-readable output (single JSON line per entry)')
|
|
41
|
+
.option('--quiet', 'Suppress decorative output (for ralph build consumption)')
|
|
42
|
+
.action(async (opts) => {
|
|
43
|
+
const run = await loadSkillsCmd();
|
|
44
|
+
const code = await run({ json: !!opts.json, quiet: !!opts.quiet });
|
|
45
|
+
process.exit(code);
|
|
46
|
+
});
|
|
47
|
+
// ── check ───────────────────────────────────────────────────────────────
|
|
48
|
+
ralph
|
|
49
|
+
.command('check')
|
|
50
|
+
.description('Health-check the current ralph status.json')
|
|
51
|
+
.option('--session <id>', 'Session id (default: latest running ralph-*)')
|
|
52
|
+
.option('--json', 'Output findings as JSON')
|
|
53
|
+
.action(async (opts) => {
|
|
54
|
+
const run = await loadCheckCmd();
|
|
55
|
+
const code = await run({ sessionId: opts.session, json: !!opts.json });
|
|
56
|
+
process.exit(code);
|
|
57
|
+
});
|
|
58
|
+
// ── session ─────────────────────────────────────────────────────────────
|
|
59
|
+
ralph
|
|
60
|
+
.command('session')
|
|
61
|
+
.description('Show current ralph session summary')
|
|
62
|
+
.option('--session <id>', 'Session id (default: latest running ralph-*)')
|
|
63
|
+
.action(async (opts) => {
|
|
64
|
+
const run = await loadSessionCmd();
|
|
65
|
+
const code = await run({ sessionId: opts.session });
|
|
66
|
+
process.exit(code);
|
|
67
|
+
});
|
|
68
|
+
// ── next ────────────────────────────────────────────────────────────────
|
|
69
|
+
ralph
|
|
70
|
+
.command('next')
|
|
71
|
+
.description('Load next pending step + required_reading, write status.json, print prompt')
|
|
72
|
+
.option('--session <id>', 'Session id (default: latest running ralph-*)')
|
|
73
|
+
.action(async (opts) => {
|
|
74
|
+
const run = await loadNextCmd();
|
|
75
|
+
const code = await run({ sessionId: opts.session });
|
|
76
|
+
process.exit(code);
|
|
77
|
+
});
|
|
78
|
+
// ── complete ────────────────────────────────────────────────────────────
|
|
79
|
+
ralph
|
|
80
|
+
.command('complete <index>')
|
|
81
|
+
.description('Mark step at <index> complete with a STATUS verdict')
|
|
82
|
+
.requiredOption('--status <status>', `One of: ${VALID_STATUSES.join('|')}`)
|
|
83
|
+
.option('--evidence <path>', 'Artifact path / output excerpt (repeatable)', collect, [])
|
|
84
|
+
.option('--concerns <text>', 'Concerns text (with DONE_WITH_CONCERNS)')
|
|
85
|
+
.option('--reason <text>', 'Reason (with BLOCKED)')
|
|
86
|
+
.option('--session <id>', 'Session id (default: latest running ralph-*)')
|
|
87
|
+
.action(async (indexArg, opts) => {
|
|
88
|
+
const status = opts.status.toUpperCase();
|
|
89
|
+
if (!VALID_STATUSES.includes(status)) {
|
|
90
|
+
console.error(`[ralph complete] --status must be one of: ${VALID_STATUSES.join(', ')} (got "${opts.status}")`);
|
|
91
|
+
process.exit(2);
|
|
92
|
+
}
|
|
93
|
+
const index = Number.parseInt(indexArg, 10);
|
|
94
|
+
if (!Number.isFinite(index) || index < 0) {
|
|
95
|
+
console.error(`[ralph complete] <index> must be a non-negative integer (got "${indexArg}")`);
|
|
96
|
+
process.exit(2);
|
|
97
|
+
}
|
|
98
|
+
const run = await loadCompleteCmd();
|
|
99
|
+
const code = await run({
|
|
100
|
+
sessionId: opts.session,
|
|
101
|
+
index,
|
|
102
|
+
status,
|
|
103
|
+
evidence: opts.evidence,
|
|
104
|
+
concerns: opts.concerns,
|
|
105
|
+
reason: opts.reason,
|
|
106
|
+
});
|
|
107
|
+
process.exit(code);
|
|
108
|
+
});
|
|
109
|
+
// ── retry ───────────────────────────────────────────────────────────────
|
|
110
|
+
ralph
|
|
111
|
+
.command('retry <index>')
|
|
112
|
+
.description('Sugar: mark step at <index> as NEEDS_RETRY')
|
|
113
|
+
.option('--session <id>', 'Session id (default: latest running ralph-*)')
|
|
114
|
+
.action(async (indexArg, opts) => {
|
|
115
|
+
const index = Number.parseInt(indexArg, 10);
|
|
116
|
+
if (!Number.isFinite(index) || index < 0) {
|
|
117
|
+
console.error(`[ralph retry] <index> must be a non-negative integer (got "${indexArg}")`);
|
|
118
|
+
process.exit(2);
|
|
119
|
+
}
|
|
120
|
+
const run = await loadCompleteCmd();
|
|
121
|
+
const code = await run({
|
|
122
|
+
sessionId: opts.session,
|
|
123
|
+
index,
|
|
124
|
+
status: 'NEEDS_RETRY',
|
|
125
|
+
evidence: [],
|
|
126
|
+
});
|
|
127
|
+
process.exit(code);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
function collect(value, prior) {
|
|
131
|
+
return prior.concat(value);
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=ralph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ralph.js","sourceRoot":"","sources":["../../../src/commands/ralph.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/commands/uninstall.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/commands/uninstall.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCzC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4C/D"}
|
|
@@ -2,47 +2,41 @@
|
|
|
2
2
|
// `maestro uninstall` — remove installed maestro assets using manifests
|
|
3
3
|
//
|
|
4
4
|
// Interactive Ink TUI by default. Supports --all -y for non-interactive.
|
|
5
|
-
//
|
|
5
|
+
// All removal goes through the unified uninstallManifest() function which
|
|
6
|
+
// reads the manifest as the source of truth — no marker scanning.
|
|
6
7
|
// ---------------------------------------------------------------------------
|
|
7
|
-
import { join } from 'node:path';
|
|
8
|
-
import { existsSync, writeFileSync } from 'node:fs';
|
|
9
|
-
import { homedir } from 'node:os';
|
|
10
8
|
import { confirm } from '@inquirer/prompts';
|
|
11
9
|
import { ExitPromptError } from '@inquirer/core';
|
|
12
|
-
import { getAllManifests,
|
|
13
|
-
import {
|
|
14
|
-
import { removeMcpServer } from './install-backend.js';
|
|
15
|
-
import { removeMaestroHooks, loadClaudeSettings, getClaudeSettingsPath, } from './hooks.js';
|
|
10
|
+
import { getAllManifests, } from '../core/manifest.js';
|
|
11
|
+
import { uninstallManifest } from './install-backend.js';
|
|
16
12
|
import { runUninstallFlow } from '../tui/uninstall-ui/index.js';
|
|
17
13
|
import { t } from '../i18n/index.js';
|
|
18
14
|
// ---------------------------------------------------------------------------
|
|
19
|
-
// Helpers
|
|
15
|
+
// Helpers
|
|
20
16
|
// ---------------------------------------------------------------------------
|
|
21
17
|
function formatManifest(m) {
|
|
22
18
|
const date = m.installedAt.split('T')[0];
|
|
23
19
|
return `[${m.scope}] ${m.targetPath} (${(m.entries ?? []).length} entries, ${date})`;
|
|
24
20
|
}
|
|
25
|
-
function
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
deleteManifest(manifest);
|
|
45
|
-
return { removed, skipped, mcp, hooks };
|
|
21
|
+
function formatResult(r) {
|
|
22
|
+
const parts = [`${r.filesRemoved} removed`];
|
|
23
|
+
if (r.filesSkipped > 0)
|
|
24
|
+
parts.push(`${r.filesSkipped} preserved`);
|
|
25
|
+
if (r.claudeHooksRemoved > 0)
|
|
26
|
+
parts.push(`${r.claudeHooksRemoved} claude hooks`);
|
|
27
|
+
if (r.codexHooksRemoved > 0)
|
|
28
|
+
parts.push(`${r.codexHooksRemoved} codex hooks`);
|
|
29
|
+
if (r.agyHooksRemoved > 0)
|
|
30
|
+
parts.push(`${r.agyHooksRemoved} agy hooks`);
|
|
31
|
+
if (r.statuslineRemoved)
|
|
32
|
+
parts.push('statusline');
|
|
33
|
+
if (r.mcpRemoved.claude)
|
|
34
|
+
parts.push('claude mcp');
|
|
35
|
+
if (r.mcpRemoved.codex)
|
|
36
|
+
parts.push('codex mcp');
|
|
37
|
+
if (r.mcpRemoved.extras.length)
|
|
38
|
+
parts.push(`${r.mcpRemoved.extras.length} extra mcp`);
|
|
39
|
+
return parts.join(', ');
|
|
46
40
|
}
|
|
47
41
|
// ---------------------------------------------------------------------------
|
|
48
42
|
// Command registration
|
|
@@ -86,14 +80,7 @@ export function registerUninstallCommand(program) {
|
|
|
86
80
|
for (const m of manifests) {
|
|
87
81
|
console.error(`\n${formatManifest(m)}`);
|
|
88
82
|
const r = uninstallManifest(m);
|
|
89
|
-
|
|
90
|
-
if (r.skipped > 0)
|
|
91
|
-
parts.push(`${r.skipped} preserved`);
|
|
92
|
-
if (r.mcp)
|
|
93
|
-
parts.push('MCP cleaned');
|
|
94
|
-
if (r.hooks)
|
|
95
|
-
parts.push('hooks cleaned');
|
|
96
|
-
console.error(` ${parts.join(', ')}`);
|
|
83
|
+
console.error(` ${formatResult(r)}`);
|
|
97
84
|
}
|
|
98
85
|
console.error('\nDone.');
|
|
99
86
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,wEAAwE;AACxE,EAAE;AACF,yEAAyE;AACzE,
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,35 @@ export interface ManifestEntry {
|
|
|
2
2
|
path: string;
|
|
3
3
|
type: 'file' | 'dir';
|
|
4
4
|
}
|
|
5
|
+
/** Claude Code / Codex / Antigravity hook installation record. */
|
|
6
|
+
export interface HookRecord {
|
|
7
|
+
/** Absolute path to the settings/hooks config file written. */
|
|
8
|
+
settingsPath: string;
|
|
9
|
+
/** Hook names registered (matches keys in HOOK_DEFS / CODEX_HOOK_DEFS / AGY_HOOK_DEFS). */
|
|
10
|
+
installed: string[];
|
|
11
|
+
/** Level selected at install time (none/minimal/standard/full). */
|
|
12
|
+
level?: string;
|
|
13
|
+
}
|
|
14
|
+
/** Statusline installation record (Claude Code settings.statusLine). */
|
|
15
|
+
export interface StatuslineRecord {
|
|
16
|
+
settingsPath: string;
|
|
17
|
+
/** Theme stored to maestro config; null when no theme was persisted. */
|
|
18
|
+
theme?: string;
|
|
19
|
+
}
|
|
20
|
+
/** Single MCP server registration record. */
|
|
21
|
+
export interface McpRecord {
|
|
22
|
+
/** Absolute path to the config file containing the registration. */
|
|
23
|
+
configPath: string;
|
|
24
|
+
/** Server name under mcpServers / servers key. */
|
|
25
|
+
serverName: string;
|
|
26
|
+
}
|
|
27
|
+
/** Extra MCP target registration (Cursor / Qoder / Trae / Kiro / Roo / VS Code / Gemini). */
|
|
28
|
+
export interface ExtraMcpRecord extends McpRecord {
|
|
29
|
+
targetId: string;
|
|
30
|
+
}
|
|
5
31
|
export interface Manifest {
|
|
6
32
|
id: string;
|
|
33
|
+
/** Manifest schema version. Bumped when fields change in a backward-incompatible way. */
|
|
7
34
|
version: string;
|
|
8
35
|
scope: 'global' | 'project';
|
|
9
36
|
targetPath: string;
|
|
@@ -13,6 +40,17 @@ export interface Manifest {
|
|
|
13
40
|
hookLevel?: string;
|
|
14
41
|
/** Component IDs selected during interactive install (omitted = all) */
|
|
15
42
|
selectedComponentIds?: string[];
|
|
43
|
+
hooks?: {
|
|
44
|
+
claude?: HookRecord;
|
|
45
|
+
codex?: HookRecord;
|
|
46
|
+
agy?: HookRecord;
|
|
47
|
+
};
|
|
48
|
+
statusline?: StatuslineRecord;
|
|
49
|
+
mcp?: {
|
|
50
|
+
claude?: McpRecord;
|
|
51
|
+
codex?: McpRecord;
|
|
52
|
+
extras?: ExtraMcpRecord[];
|
|
53
|
+
};
|
|
16
54
|
}
|
|
17
55
|
export declare function createManifest(scope: 'global' | 'project', targetPath: string, opts?: {
|
|
18
56
|
hookLevel?: string;
|
|
@@ -20,6 +58,13 @@ export declare function createManifest(scope: 'global' | 'project', targetPath:
|
|
|
20
58
|
}): Manifest;
|
|
21
59
|
export declare function addFile(manifest: Manifest, filePath: string): void;
|
|
22
60
|
export declare function addDir(manifest: Manifest, dirPath: string): void;
|
|
61
|
+
export declare function recordClaudeHooks(manifest: Manifest, record: HookRecord): void;
|
|
62
|
+
export declare function recordCodexHooks(manifest: Manifest, record: HookRecord): void;
|
|
63
|
+
export declare function recordAgyHooks(manifest: Manifest, record: HookRecord): void;
|
|
64
|
+
export declare function recordStatusline(manifest: Manifest, record: StatuslineRecord): void;
|
|
65
|
+
export declare function recordClaudeMcp(manifest: Manifest, record: McpRecord): void;
|
|
66
|
+
export declare function recordCodexMcp(manifest: Manifest, record: McpRecord): void;
|
|
67
|
+
export declare function recordExtraMcp(manifest: Manifest, record: ExtraMcpRecord): void;
|
|
23
68
|
export declare function saveManifest(manifest: Manifest): string;
|
|
24
69
|
export declare function findManifest(scope: 'global' | 'project', targetPath: string): Manifest | null;
|
|
25
70
|
export declare function getAllManifests(): Manifest[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/core/manifest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/core/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,17 @@
|
|
|
2
2
|
// Installation Manifest
|
|
3
3
|
// Tracks installed files for clean reinstall and uninstall.
|
|
4
4
|
// Manifests stored at ~/.maestro/manifests/{id}.json
|
|
5
|
+
//
|
|
6
|
+
// Manifest is the single source of truth for an installation. Every install
|
|
7
|
+
// step (files, hooks, MCP, statusline) records itself here so uninstall can
|
|
8
|
+
// reverse exactly what was installed — no marker scanning, no guesswork.
|
|
5
9
|
// ---------------------------------------------------------------------------
|
|
6
10
|
import { join } from 'node:path';
|
|
7
11
|
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, unlinkSync, rmSync, } from 'node:fs';
|
|
8
12
|
import { paths } from '../config/paths.js';
|
|
9
13
|
import { hasAnyMarkers, removeAllSections } from './tag-injector.js';
|
|
14
|
+
/** Current manifest schema version. */
|
|
15
|
+
const SCHEMA_VERSION = '2.0';
|
|
10
16
|
// ---------------------------------------------------------------------------
|
|
11
17
|
// Paths
|
|
12
18
|
// ---------------------------------------------------------------------------
|
|
@@ -26,7 +32,7 @@ export function createManifest(scope, targetPath, opts) {
|
|
|
26
32
|
const ts = new Date().toISOString().replace(/[-:]/g, '').replace('T', '-').split('.')[0];
|
|
27
33
|
return {
|
|
28
34
|
id: `${scope}-${ts}`,
|
|
29
|
-
version:
|
|
35
|
+
version: SCHEMA_VERSION,
|
|
30
36
|
scope,
|
|
31
37
|
targetPath,
|
|
32
38
|
installedAt: new Date().toISOString(),
|
|
@@ -41,6 +47,36 @@ export function addFile(manifest, filePath) {
|
|
|
41
47
|
export function addDir(manifest, dirPath) {
|
|
42
48
|
manifest.entries.push({ path: dirPath, type: 'dir' });
|
|
43
49
|
}
|
|
50
|
+
// --- Extended tracking helpers ---
|
|
51
|
+
export function recordClaudeHooks(manifest, record) {
|
|
52
|
+
manifest.hooks ??= {};
|
|
53
|
+
manifest.hooks.claude = record;
|
|
54
|
+
}
|
|
55
|
+
export function recordCodexHooks(manifest, record) {
|
|
56
|
+
manifest.hooks ??= {};
|
|
57
|
+
manifest.hooks.codex = record;
|
|
58
|
+
}
|
|
59
|
+
export function recordAgyHooks(manifest, record) {
|
|
60
|
+
manifest.hooks ??= {};
|
|
61
|
+
manifest.hooks.agy = record;
|
|
62
|
+
}
|
|
63
|
+
export function recordStatusline(manifest, record) {
|
|
64
|
+
manifest.statusline = record;
|
|
65
|
+
}
|
|
66
|
+
export function recordClaudeMcp(manifest, record) {
|
|
67
|
+
manifest.mcp ??= {};
|
|
68
|
+
manifest.mcp.claude = record;
|
|
69
|
+
}
|
|
70
|
+
export function recordCodexMcp(manifest, record) {
|
|
71
|
+
manifest.mcp ??= {};
|
|
72
|
+
manifest.mcp.codex = record;
|
|
73
|
+
}
|
|
74
|
+
export function recordExtraMcp(manifest, record) {
|
|
75
|
+
manifest.mcp ??= {};
|
|
76
|
+
manifest.mcp.extras ??= [];
|
|
77
|
+
manifest.mcp.extras.push(record);
|
|
78
|
+
}
|
|
79
|
+
// --- Save / Load ---
|
|
44
80
|
export function saveManifest(manifest) {
|
|
45
81
|
ensureDir();
|
|
46
82
|
// Remove old manifests for same scope+path
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/core/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../../../src/hooks/statusline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAyBH,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,SAAS,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE;QACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,IAAI,CAAC,EAAE;QACL,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../../../src/hooks/statusline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAyBH,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,SAAS,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE;QACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,IAAI,CAAC,EAAE;QACL,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH;AA0bD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA2CxD;AAMD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAqC/D;AA0ID,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CA2F9D;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,IAAI,IAAI,CAepC"}
|