@bradygaster/squad-cli 0.9.6-insider.2 → 0.10.0-insider.1
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/CHANGELOG.md +555 -0
- package/README.md +5 -5
- package/dist/cli/commands/build.js +3 -3
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/copilot-bridge.d.ts.map +1 -1
- package/dist/cli/commands/copilot-bridge.js +5 -1
- package/dist/cli/commands/copilot-bridge.js.map +1 -1
- package/dist/cli/commands/cross-squad.d.ts +15 -2
- package/dist/cli/commands/cross-squad.d.ts.map +1 -1
- package/dist/cli/commands/cross-squad.js +78 -4
- package/dist/cli/commands/cross-squad.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +6 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +120 -5
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/export.d.ts +7 -3
- package/dist/cli/commands/export.d.ts.map +1 -1
- package/dist/cli/commands/export.js +68 -16
- package/dist/cli/commands/export.js.map +1 -1
- package/dist/cli/commands/import.d.ts +7 -3
- package/dist/cli/commands/import.d.ts.map +1 -1
- package/dist/cli/commands/import.js +140 -42
- package/dist/cli/commands/import.js.map +1 -1
- package/dist/cli/commands/install-hooks.d.ts.map +1 -1
- package/dist/cli/commands/install-hooks.js +50 -5
- package/dist/cli/commands/install-hooks.js.map +1 -1
- package/dist/cli/commands/link.d.ts.map +1 -1
- package/dist/cli/commands/link.js +7 -1
- package/dist/cli/commands/link.js.map +1 -1
- package/dist/cli/commands/loop.d.ts.map +1 -1
- package/dist/cli/commands/loop.js +7 -5
- package/dist/cli/commands/loop.js.map +1 -1
- package/dist/cli/commands/memory.d.ts +2 -0
- package/dist/cli/commands/memory.d.ts.map +1 -0
- package/dist/cli/commands/memory.js +304 -0
- package/dist/cli/commands/memory.js.map +1 -0
- package/dist/cli/commands/migrate-backend.d.ts +36 -5
- package/dist/cli/commands/migrate-backend.d.ts.map +1 -1
- package/dist/cli/commands/migrate-backend.js +250 -40
- package/dist/cli/commands/migrate-backend.js.map +1 -1
- package/dist/cli/commands/notes.d.ts +27 -0
- package/dist/cli/commands/notes.d.ts.map +1 -0
- package/dist/cli/commands/notes.js +222 -0
- package/dist/cli/commands/notes.js.map +1 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -1
- package/dist/cli/commands/plugin.js +423 -8
- package/dist/cli/commands/plugin.js.map +1 -1
- package/dist/cli/commands/skill.d.ts +31 -0
- package/dist/cli/commands/skill.d.ts.map +1 -0
- package/dist/cli/commands/skill.js +498 -0
- package/dist/cli/commands/skill.js.map +1 -0
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +9 -1
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/state-mcp.d.ts +25 -0
- package/dist/cli/commands/state-mcp.d.ts.map +1 -0
- package/dist/cli/commands/state-mcp.js +174 -0
- package/dist/cli/commands/state-mcp.js.map +1 -0
- package/dist/cli/commands/watch/agent-spawn.d.ts +62 -0
- package/dist/cli/commands/watch/agent-spawn.d.ts.map +1 -0
- package/dist/cli/commands/watch/agent-spawn.js +127 -0
- package/dist/cli/commands/watch/agent-spawn.js.map +1 -0
- package/dist/cli/commands/watch/capabilities/board.d.ts.map +1 -1
- package/dist/cli/commands/watch/capabilities/board.js +2 -1
- package/dist/cli/commands/watch/capabilities/board.js.map +1 -1
- package/dist/cli/commands/watch/capabilities/decision-hygiene.d.ts.map +1 -1
- package/dist/cli/commands/watch/capabilities/decision-hygiene.js +3 -2
- package/dist/cli/commands/watch/capabilities/decision-hygiene.js.map +1 -1
- package/dist/cli/commands/watch/capabilities/execute.d.ts.map +1 -1
- package/dist/cli/commands/watch/capabilities/execute.js +14 -2
- package/dist/cli/commands/watch/capabilities/execute.js.map +1 -1
- package/dist/cli/commands/watch/capabilities/index.d.ts.map +1 -1
- package/dist/cli/commands/watch/capabilities/index.js +2 -0
- package/dist/cli/commands/watch/capabilities/index.js.map +1 -1
- package/dist/cli/commands/watch/capabilities/monitor-email.d.ts +1 -1
- package/dist/cli/commands/watch/capabilities/monitor-email.d.ts.map +1 -1
- package/dist/cli/commands/watch/capabilities/monitor-email.js +21 -4
- package/dist/cli/commands/watch/capabilities/monitor-email.js.map +1 -1
- package/dist/cli/commands/watch/capabilities/monitor-teams.d.ts +1 -1
- package/dist/cli/commands/watch/capabilities/monitor-teams.d.ts.map +1 -1
- package/dist/cli/commands/watch/capabilities/monitor-teams.js +21 -5
- package/dist/cli/commands/watch/capabilities/monitor-teams.js.map +1 -1
- package/dist/cli/commands/watch/capabilities/notes-promote.d.ts +11 -0
- package/dist/cli/commands/watch/capabilities/notes-promote.d.ts.map +1 -0
- package/dist/cli/commands/watch/capabilities/notes-promote.js +124 -0
- package/dist/cli/commands/watch/capabilities/notes-promote.js.map +1 -0
- package/dist/cli/commands/watch/capabilities/retro.d.ts.map +1 -1
- package/dist/cli/commands/watch/capabilities/retro.js +3 -2
- package/dist/cli/commands/watch/capabilities/retro.js.map +1 -1
- package/dist/cli/commands/watch/capabilities/wave-dispatch.d.ts.map +1 -1
- package/dist/cli/commands/watch/capabilities/wave-dispatch.js +2 -1
- package/dist/cli/commands/watch/capabilities/wave-dispatch.js.map +1 -1
- package/dist/cli/commands/watch/index.d.ts.map +1 -1
- package/dist/cli/commands/watch/index.js +16 -12
- package/dist/cli/commands/watch/index.js.map +1 -1
- package/dist/cli/core/cast.d.ts.map +1 -1
- package/dist/cli/core/cast.js +216 -1
- package/dist/cli/core/cast.js.map +1 -1
- package/dist/cli/core/command-help.d.ts +44 -0
- package/dist/cli/core/command-help.d.ts.map +1 -0
- package/dist/cli/core/command-help.js +401 -0
- package/dist/cli/core/command-help.js.map +1 -0
- package/dist/cli/core/copilot-invocation.d.ts +57 -0
- package/dist/cli/core/copilot-invocation.d.ts.map +1 -0
- package/dist/cli/core/copilot-invocation.js +84 -0
- package/dist/cli/core/copilot-invocation.js.map +1 -0
- package/dist/cli/core/effective-squad-dir.d.ts +33 -0
- package/dist/cli/core/effective-squad-dir.d.ts.map +1 -0
- package/dist/cli/core/effective-squad-dir.js +37 -0
- package/dist/cli/core/effective-squad-dir.js.map +1 -0
- package/dist/cli/core/init.d.ts +2 -0
- package/dist/cli/core/init.d.ts.map +1 -1
- package/dist/cli/core/init.js +130 -1
- package/dist/cli/core/init.js.map +1 -1
- package/dist/cli/core/mcp-root.d.ts +73 -0
- package/dist/cli/core/mcp-root.d.ts.map +1 -0
- package/dist/cli/core/mcp-root.js +195 -0
- package/dist/cli/core/mcp-root.js.map +1 -0
- package/dist/cli/core/mcp-spec.d.ts +48 -0
- package/dist/cli/core/mcp-spec.d.ts.map +1 -0
- package/dist/cli/core/mcp-spec.js +62 -0
- package/dist/cli/core/mcp-spec.js.map +1 -0
- package/dist/cli/core/npm-registry.d.ts +25 -0
- package/dist/cli/core/npm-registry.d.ts.map +1 -0
- package/dist/cli/core/npm-registry.js +65 -0
- package/dist/cli/core/npm-registry.js.map +1 -0
- package/dist/cli/core/templates.d.ts.map +1 -1
- package/dist/cli/core/templates.js +102 -24
- package/dist/cli/core/templates.js.map +1 -1
- package/dist/cli/core/upgrade.d.ts +29 -0
- package/dist/cli/core/upgrade.d.ts.map +1 -1
- package/dist/cli/core/upgrade.js +413 -15
- package/dist/cli/core/upgrade.js.map +1 -1
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/shell/components/App.js +1 -1
- package/dist/cli/shell/components/App.js.map +1 -1
- package/dist/cli/shell/components/MessageStream.js +2 -2
- package/dist/cli/shell/components/MessageStream.js.map +1 -1
- package/dist/cli/shell/coordinator.d.ts.map +1 -1
- package/dist/cli/shell/coordinator.js +11 -5
- package/dist/cli/shell/coordinator.js.map +1 -1
- package/dist/cli/shell/index.d.ts.map +1 -1
- package/dist/cli/shell/index.js +14 -7
- package/dist/cli/shell/index.js.map +1 -1
- package/dist/cli/shell/lifecycle.d.ts.map +1 -1
- package/dist/cli/shell/lifecycle.js +12 -7
- package/dist/cli/shell/lifecycle.js.map +1 -1
- package/dist/cli/shell/session-store.d.ts +4 -4
- package/dist/cli/shell/session-store.d.ts.map +1 -1
- package/dist/cli/shell/session-store.js +11 -11
- package/dist/cli/shell/session-store.js.map +1 -1
- package/dist/cli-entry.js +171 -50
- package/dist/cli-entry.js.map +1 -1
- package/package.json +9 -4
- package/scripts/patch-esm-imports.mjs +3 -1
- package/templates/after-agent-reference.md +64 -0
- package/templates/ceremony-reference.md +82 -0
- package/templates/client-compatibility-reference.md +46 -0
- package/templates/copilot-agent.md +96 -0
- package/templates/copilot-instructions.md +14 -0
- package/templates/fact-checker-policy.md +104 -0
- package/templates/model-selection-reference.md +101 -0
- package/templates/prd-intake.md +105 -0
- package/templates/rai-charter.md +110 -0
- package/templates/rai-policy.md +103 -0
- package/templates/ralph-reference.md +141 -0
- package/templates/routing.md +1 -0
- package/templates/scribe-charter.md +18 -151
- package/templates/session-init-reference.md +199 -0
- package/templates/skills/cross-squad/SKILL.md +66 -6
- package/templates/skills/cross-squad-communication/SKILL.md +399 -0
- package/templates/skills/e2e-template-testing/SKILL.md +557 -0
- package/templates/skills/fact-checking/SKILL.md +61 -0
- package/templates/skills/release-process/SKILL.md +2 -2
- package/templates/skills/squad/SKILL.md +299 -0
- package/templates/skills/squad-help/SKILL.md +97 -0
- package/templates/skills/squad-version-check/SKILL.md +169 -0
- package/templates/skills/tiered-memory/SKILL.md +31 -44
- package/templates/spawn-reference.md +131 -0
- package/templates/squad.agent.md.template +306 -618
- package/templates/workflow-wiring-appendix-a-code-reviewer.md +131 -0
- package/templates/workflow-wiring-appendix-b-documenter.md +140 -0
- package/templates/workflow-wiring-guide.md +276 -0
- package/templates/workflows/squad-heartbeat.yml +167 -167
- package/templates/worktree-reference.md +126 -0
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Backend migration — upgrades state backend
|
|
2
|
+
* Backend migration — upgrades state backend across allowed transitions.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Supported migrations:
|
|
5
5
|
* - local → orphan
|
|
6
6
|
* - local → two-layer
|
|
7
|
+
* - worktree → orphan
|
|
8
|
+
* - worktree → two-layer
|
|
9
|
+
* - orphan ↔ two-layer (both write to the squad-state orphan branch via different layers)
|
|
7
10
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
11
|
+
* In addition to flipping the `stateBackend` key in `.squad/config.json`, this
|
|
12
|
+
* function MIGRATES pre-existing working-tree state (`decisions.md`,
|
|
13
|
+
* `agents/<name>/history.md`) onto the squad-state orphan branch when moving
|
|
14
|
+
* from a working-tree backend to an orphan-storage backend, so post-upgrade
|
|
15
|
+
* agents can read pre-upgrade content (UPGRADE-NO-MIGRATION fix).
|
|
10
16
|
*/
|
|
11
17
|
import { execFileSync } from 'node:child_process';
|
|
12
18
|
import path from 'node:path';
|
|
@@ -15,43 +21,22 @@ import { installGitHooks } from './install-hooks.js';
|
|
|
15
21
|
const GREEN = '\x1b[32m';
|
|
16
22
|
const YELLOW = '\x1b[33m';
|
|
17
23
|
const BOLD = '\x1b[1m';
|
|
24
|
+
const DIM = '\x1b[2m';
|
|
18
25
|
const RESET = '\x1b[0m';
|
|
19
|
-
const VALID_TARGETS = ['orphan', 'two-layer'];
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
const configPath = path.join(dest, '.squad', 'config.json');
|
|
30
|
-
let config = {};
|
|
31
|
-
try {
|
|
32
|
-
if (fs.existsSync(configPath)) {
|
|
33
|
-
config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
catch { /* start fresh */ }
|
|
37
|
-
const current = config['stateBackend'] || 'local';
|
|
38
|
-
// Validate migration direction
|
|
39
|
-
if (current === target) {
|
|
40
|
-
console.log(`${YELLOW}⚠ Backend is already '${target}'. Nothing to do.${RESET}`);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
if (current !== 'local' && current !== null) {
|
|
44
|
-
console.log(`${YELLOW}⚠ Migration from '${current}' to '${target}' is not supported.${RESET}`);
|
|
45
|
-
console.log(` Only local → orphan or local → two-layer is supported at this time.`);
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
console.log(`\n${BOLD}Migrating state backend: ${current} → ${target}${RESET}\n`);
|
|
49
|
-
// Step 1: Create orphan branch if needed
|
|
26
|
+
const VALID_TARGETS = ['local', 'worktree', 'orphan', 'two-layer'];
|
|
27
|
+
const ORPHAN_BACKENDS = new Set(['orphan', 'two-layer']);
|
|
28
|
+
const WORKTREE_BACKENDS = new Set(['local', 'worktree']);
|
|
29
|
+
/** Paths inside .squad/ that should be carried over to the orphan branch on migration. */
|
|
30
|
+
const MIGRATABLE_PATHS = [
|
|
31
|
+
'decisions.md',
|
|
32
|
+
];
|
|
33
|
+
/** Best-effort: ensure the squad-state orphan branch exists. Returns true on success. */
|
|
34
|
+
export function ensureOrphanBranch(dest) {
|
|
50
35
|
try {
|
|
51
36
|
execFileSync('git', ['rev-parse', '--verify', 'refs/heads/squad-state'], {
|
|
52
37
|
cwd: dest, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
|
|
53
38
|
});
|
|
54
|
-
|
|
39
|
+
return true;
|
|
55
40
|
}
|
|
56
41
|
catch {
|
|
57
42
|
try {
|
|
@@ -69,19 +54,244 @@ export async function migrateStateBackend(dest, target) {
|
|
|
69
54
|
execFileSync('git', ['update-ref', 'refs/heads/squad-state', commitHash], {
|
|
70
55
|
cwd: dest, stdio: ['pipe', 'pipe', 'pipe'],
|
|
71
56
|
});
|
|
72
|
-
|
|
57
|
+
return true;
|
|
73
58
|
}
|
|
74
59
|
catch (err) {
|
|
75
60
|
console.log(`${YELLOW}⚠ Could not create squad-state branch: ${err instanceof Error ? err.message : err}${RESET}`);
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Collect existing working-tree state files that should be migrated to the orphan branch.
|
|
67
|
+
* Returns array of {path, content} pairs (paths are relative to .squad/).
|
|
68
|
+
*/
|
|
69
|
+
function collectWorktreeState(dest) {
|
|
70
|
+
const squadDir = path.join(dest, '.squad');
|
|
71
|
+
const collected = [];
|
|
72
|
+
for (const p of MIGRATABLE_PATHS) {
|
|
73
|
+
const full = path.join(squadDir, p);
|
|
74
|
+
if (fs.existsSync(full) && fs.statSync(full).isFile()) {
|
|
75
|
+
collected.push({ relPath: p, content: fs.readFileSync(full, 'utf-8') });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// agents/<name>/history.md
|
|
79
|
+
const agentsDir = path.join(squadDir, 'agents');
|
|
80
|
+
if (fs.existsSync(agentsDir) && fs.statSync(agentsDir).isDirectory()) {
|
|
81
|
+
for (const agentName of fs.readdirSync(agentsDir)) {
|
|
82
|
+
const histPath = path.join(agentsDir, agentName, 'history.md');
|
|
83
|
+
if (fs.existsSync(histPath) && fs.statSync(histPath).isFile()) {
|
|
84
|
+
collected.push({
|
|
85
|
+
relPath: path.posix.join('agents', agentName, 'history.md'),
|
|
86
|
+
content: fs.readFileSync(histPath, 'utf-8'),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return collected;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Write a set of files onto the squad-state orphan branch via git plumbing.
|
|
95
|
+
* Preserves any files already on the branch (merges trees by path).
|
|
96
|
+
* Returns the number of files written, or -1 on failure.
|
|
97
|
+
*/
|
|
98
|
+
function writeFilesToOrphanBranch(dest, files) {
|
|
99
|
+
if (files.length === 0)
|
|
100
|
+
return 0;
|
|
101
|
+
try {
|
|
102
|
+
// Load the current squad-state tree into the index using a temporary index file
|
|
103
|
+
const gitDir = execFileSync('git', ['rev-parse', '--git-dir'], {
|
|
104
|
+
cwd: dest, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
|
|
105
|
+
}).trim();
|
|
106
|
+
const indexFile = path.resolve(dest, gitDir, 'squad-migrate-index');
|
|
107
|
+
if (fs.existsSync(indexFile))
|
|
108
|
+
fs.unlinkSync(indexFile);
|
|
109
|
+
const env = { ...process.env, GIT_INDEX_FILE: indexFile };
|
|
110
|
+
// Seed index with existing squad-state tree
|
|
111
|
+
execFileSync('git', ['read-tree', 'refs/heads/squad-state'], {
|
|
112
|
+
cwd: dest, env, stdio: ['pipe', 'pipe', 'pipe'],
|
|
113
|
+
});
|
|
114
|
+
// Add each migrated file
|
|
115
|
+
for (const f of files) {
|
|
116
|
+
const blobHash = execFileSync('git', ['hash-object', '-w', '--stdin'], {
|
|
117
|
+
cwd: dest, env, encoding: 'utf-8', input: f.content, stdio: ['pipe', 'pipe', 'pipe'],
|
|
118
|
+
}).trim();
|
|
119
|
+
execFileSync('git', ['update-index', '--add', '--cacheinfo', `100644,${blobHash},${f.relPath}`], {
|
|
120
|
+
cwd: dest, env, stdio: ['pipe', 'pipe', 'pipe'],
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
const treeHash = execFileSync('git', ['write-tree'], {
|
|
124
|
+
cwd: dest, env, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
|
|
125
|
+
}).trim();
|
|
126
|
+
const parentSha = execFileSync('git', ['rev-parse', 'refs/heads/squad-state'], {
|
|
127
|
+
cwd: dest, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
|
|
128
|
+
}).trim();
|
|
129
|
+
const commitHash = execFileSync('git', ['commit-tree', treeHash, '-p', parentSha, '-m', `migrate: import working-tree state on backend upgrade (${files.length} file(s))`], { cwd: dest, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
130
|
+
execFileSync('git', ['update-ref', 'refs/heads/squad-state', commitHash, parentSha], {
|
|
131
|
+
cwd: dest, stdio: ['pipe', 'pipe', 'pipe'],
|
|
132
|
+
});
|
|
133
|
+
// Cleanup the temporary index
|
|
134
|
+
if (fs.existsSync(indexFile))
|
|
135
|
+
fs.unlinkSync(indexFile);
|
|
136
|
+
return files.length;
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
console.log(`${YELLOW}⚠ Could not migrate state onto squad-state branch: ${err instanceof Error ? err.message : err}${RESET}`);
|
|
140
|
+
return -1;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Migrate the state backend for an existing squad project.
|
|
145
|
+
*
|
|
146
|
+
* Fixes:
|
|
147
|
+
* - UPGRADE-FLAG-IGNORED: writes the new `stateBackend` value into config.json
|
|
148
|
+
* via JSON-aware merge (never textual append → avoids Bug E duplicates).
|
|
149
|
+
* - UPGRADE-NO-MIGRATION: when moving from a working-tree backend to an
|
|
150
|
+
* orphan-storage backend, carries existing decisions.md and agent histories
|
|
151
|
+
* onto the squad-state orphan branch so post-upgrade agents see prior state.
|
|
152
|
+
* - WI-1: re-installs the full hook set (including new pre-commit/post-commit).
|
|
153
|
+
*/
|
|
154
|
+
export async function migrateStateBackend(dest, target) {
|
|
155
|
+
if (!VALID_TARGETS.includes(target)) {
|
|
156
|
+
console.log(`${YELLOW}⚠ Invalid backend target '${target}'. Supported: ${VALID_TARGETS.join(', ')}${RESET}`);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const configPath = path.join(dest, '.squad', 'config.json');
|
|
160
|
+
let config = {};
|
|
161
|
+
try {
|
|
162
|
+
if (fs.existsSync(configPath)) {
|
|
163
|
+
config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch { /* start fresh */ }
|
|
167
|
+
const current = config['stateBackend'] || 'local';
|
|
168
|
+
if (current === target) {
|
|
169
|
+
console.log(`${YELLOW}⚠ Backend is already '${target}'. Ensuring hooks + config are consistent.${RESET}`);
|
|
170
|
+
if (ORPHAN_BACKENDS.has(target)) {
|
|
171
|
+
ensureOrphanBranch(dest);
|
|
172
|
+
installGitHooks(dest, { force: false });
|
|
173
|
+
}
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
console.log(`\n${BOLD}Migrating state backend: ${current} → ${target}${RESET}\n`);
|
|
177
|
+
// Step 1: Ensure orphan branch exists when the target needs it
|
|
178
|
+
if (ORPHAN_BACKENDS.has(target)) {
|
|
179
|
+
if (!ensureOrphanBranch(dest))
|
|
76
180
|
return;
|
|
181
|
+
console.log(` ${GREEN}✓${RESET} squad-state branch ready`);
|
|
182
|
+
}
|
|
183
|
+
// Step 2 (UPGRADE-NO-MIGRATION): move working-tree state onto the orphan branch
|
|
184
|
+
// when transitioning from a worktree backend to an orphan-storage backend.
|
|
185
|
+
if (WORKTREE_BACKENDS.has(current) && ORPHAN_BACKENDS.has(target)) {
|
|
186
|
+
const files = collectWorktreeState(dest);
|
|
187
|
+
if (files.length > 0) {
|
|
188
|
+
const wrote = writeFilesToOrphanBranch(dest, files);
|
|
189
|
+
if (wrote > 0) {
|
|
190
|
+
console.log(` ${GREEN}✓${RESET} migrated ${wrote} state file(s) onto squad-state branch:`);
|
|
191
|
+
for (const f of files) {
|
|
192
|
+
console.log(` ${DIM}.squad/${f.relPath}${RESET}`);
|
|
193
|
+
}
|
|
194
|
+
// F1 fix (Round 5, P1.1): the working-tree copies are now stale — the
|
|
195
|
+
// orphan branch is the source of truth for an orphan/two-layer backend.
|
|
196
|
+
// Remove them so `git status` is clean and post-upgrade agents can't
|
|
197
|
+
// accidentally read stale content. Mirrors liftInitMutableStateOntoOrphan
|
|
198
|
+
// behavior. Only files we just successfully migrated are removed; we
|
|
199
|
+
// never touch config.json, charter.md, team.md, casting/, templates/, etc.
|
|
200
|
+
const squadDir = path.join(dest, '.squad');
|
|
201
|
+
const removed = [];
|
|
202
|
+
const removeFailed = [];
|
|
203
|
+
for (const f of files) {
|
|
204
|
+
const full = path.join(squadDir, f.relPath);
|
|
205
|
+
try {
|
|
206
|
+
if (fs.existsSync(full))
|
|
207
|
+
fs.unlinkSync(full);
|
|
208
|
+
removed.push(f.relPath);
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
removeFailed.push(f.relPath);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Clean up now-empty agent directories (e.g. .squad/agents/data/) so
|
|
215
|
+
// they don't leak as zero-content folders post-upgrade.
|
|
216
|
+
const agentsDir = path.join(squadDir, 'agents');
|
|
217
|
+
if (fs.existsSync(agentsDir) && fs.statSync(agentsDir).isDirectory()) {
|
|
218
|
+
for (const agentName of fs.readdirSync(agentsDir)) {
|
|
219
|
+
const agentDir = path.join(agentsDir, agentName);
|
|
220
|
+
try {
|
|
221
|
+
if (fs.statSync(agentDir).isDirectory() &&
|
|
222
|
+
fs.readdirSync(agentDir).length === 0) {
|
|
223
|
+
fs.rmdirSync(agentDir);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
catch { /* best-effort */ }
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
if (removed.length > 0) {
|
|
230
|
+
console.log(` ${GREEN}✓${RESET} removed ${removed.length} stale working-tree file(s) (now sourced from squad-state):`);
|
|
231
|
+
for (const r of removed) {
|
|
232
|
+
console.log(` ${DIM}.squad/${r}${RESET}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if (removeFailed.length > 0) {
|
|
236
|
+
console.log(` ${YELLOW}⚠${RESET} could not remove: ${removeFailed.join(', ')} (will appear in git status)`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
else if (wrote === 0) {
|
|
240
|
+
console.log(` ${DIM}no working-tree state files to migrate${RESET}`);
|
|
241
|
+
}
|
|
242
|
+
// If wrote === -1 we already printed a warning; continue so config still updates.
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
console.log(` ${DIM}no migratable state in working tree${RESET}`);
|
|
77
246
|
}
|
|
78
247
|
}
|
|
79
|
-
// Step
|
|
248
|
+
// Step 3 (UPGRADE-FLAG-IGNORED + Bug E): JSON-merge the new value.
|
|
249
|
+
// Reading + re-stringifying guarantees one canonical `stateBackend` key.
|
|
80
250
|
config['stateBackend'] = target;
|
|
251
|
+
fs.mkdirSync(path.dirname(configPath), { recursive: true });
|
|
81
252
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
82
253
|
console.log(` ${GREEN}✓${RESET} config.json updated: stateBackend = ${target}`);
|
|
83
|
-
// Step
|
|
84
|
-
|
|
254
|
+
// Step 4 (WI-1): re-install hooks (force so new pre-commit/post-commit land)
|
|
255
|
+
if (ORPHAN_BACKENDS.has(target)) {
|
|
256
|
+
installGitHooks(dest, { force: true });
|
|
257
|
+
}
|
|
85
258
|
console.log(`\n${GREEN}${BOLD}✓ Migration complete.${RESET} Backend is now '${target}'.\n`);
|
|
86
259
|
}
|
|
260
|
+
/**
|
|
261
|
+
* INSIDER3-INIT-LEAK fix: when `squad init --state-backend orphan|two-layer`
|
|
262
|
+
* runs, the SDK still hand-writes mutable state files (decisions.md and each
|
|
263
|
+
* agent's history.md) into the working tree because it has no knowledge of the
|
|
264
|
+
* future backend choice. This helper, invoked by the CLI immediately after the
|
|
265
|
+
* orphan branch is created, lifts those mutable files onto the squad-state
|
|
266
|
+
* orphan branch and removes them from the working tree so post-init agents
|
|
267
|
+
* read state exclusively through the runtime bridge.
|
|
268
|
+
*
|
|
269
|
+
* Source-of-truth hierarchy preserved: static files (team.md, charters,
|
|
270
|
+
* ceremonies.md, casting/*, templates/*) are NEVER touched — only mutable
|
|
271
|
+
* state (decisions.md, agents/<n>/history.md) migrates.
|
|
272
|
+
*
|
|
273
|
+
* Returns the relative paths of files that were migrated + removed.
|
|
274
|
+
*/
|
|
275
|
+
export function liftInitMutableStateOntoOrphan(dest) {
|
|
276
|
+
const files = collectWorktreeState(dest);
|
|
277
|
+
if (files.length === 0)
|
|
278
|
+
return [];
|
|
279
|
+
const wrote = writeFilesToOrphanBranch(dest, files);
|
|
280
|
+
if (wrote <= 0)
|
|
281
|
+
return [];
|
|
282
|
+
const removed = [];
|
|
283
|
+
const squadDir = path.join(dest, '.squad');
|
|
284
|
+
for (const f of files) {
|
|
285
|
+
const full = path.join(squadDir, f.relPath);
|
|
286
|
+
try {
|
|
287
|
+
if (fs.existsSync(full))
|
|
288
|
+
fs.unlinkSync(full);
|
|
289
|
+
removed.push(f.relPath);
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
// Leave file behind rather than aborting; the runtime bridge already has authoritative copy.
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return removed;
|
|
296
|
+
}
|
|
87
297
|
//# sourceMappingURL=migrate-backend.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate-backend.js","sourceRoot":"","sources":["../../../src/cli/commands/migrate-backend.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"migrate-backend.js","sourceRoot":"","sources":["../../../src/cli/commands/migrate-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* squad notes — manage squad git-notes state (Round 5, P0.3 A3).
|
|
3
|
+
*
|
|
4
|
+
* Subcommand:
|
|
5
|
+
* promote [--ref <ref>] [--all] [--dry-run]
|
|
6
|
+
*
|
|
7
|
+
* Production caller for {@link TwoLayerBackend.promoteNotes}. Walks notes on
|
|
8
|
+
* each `refs/notes/squad/*` ref, moves notes flagged `promote_to_permanent`
|
|
9
|
+
* into the orphan layer under `promoted/<ref>/<sha>.json`, copies notes
|
|
10
|
+
* flagged `archive_on_close` under `archive/<ref>/<sha>.json`, and leaves
|
|
11
|
+
* un-flagged notes in place.
|
|
12
|
+
*
|
|
13
|
+
* Round 4 audit found `promoteNotes` had zero production callers — the SDK
|
|
14
|
+
* API was wired but never invoked. This command, plus the Ralph heartbeat
|
|
15
|
+
* `notes-promote` capability, are those production callers.
|
|
16
|
+
*
|
|
17
|
+
* @module cli/commands/notes
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Run `squad notes promote`. Returns process exit code.
|
|
21
|
+
*/
|
|
22
|
+
export declare function runNotesPromote(cwd: string, args: string[]): Promise<number>;
|
|
23
|
+
/**
|
|
24
|
+
* Top-level `squad notes` dispatcher.
|
|
25
|
+
*/
|
|
26
|
+
export declare function runNotes(cwd: string, args: string[]): Promise<void>;
|
|
27
|
+
//# sourceMappingURL=notes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notes.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/notes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA+HH;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgFlF;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAezE"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* squad notes — manage squad git-notes state (Round 5, P0.3 A3).
|
|
3
|
+
*
|
|
4
|
+
* Subcommand:
|
|
5
|
+
* promote [--ref <ref>] [--all] [--dry-run]
|
|
6
|
+
*
|
|
7
|
+
* Production caller for {@link TwoLayerBackend.promoteNotes}. Walks notes on
|
|
8
|
+
* each `refs/notes/squad/*` ref, moves notes flagged `promote_to_permanent`
|
|
9
|
+
* into the orphan layer under `promoted/<ref>/<sha>.json`, copies notes
|
|
10
|
+
* flagged `archive_on_close` under `archive/<ref>/<sha>.json`, and leaves
|
|
11
|
+
* un-flagged notes in place.
|
|
12
|
+
*
|
|
13
|
+
* Round 4 audit found `promoteNotes` had zero production callers — the SDK
|
|
14
|
+
* API was wired but never invoked. This command, plus the Ralph heartbeat
|
|
15
|
+
* `notes-promote` capability, are those production callers.
|
|
16
|
+
*
|
|
17
|
+
* @module cli/commands/notes
|
|
18
|
+
*/
|
|
19
|
+
import { execFileSync } from 'node:child_process';
|
|
20
|
+
import * as path from 'node:path';
|
|
21
|
+
import { resolveStateBackend, TwoLayerBackend } from '@bradygaster/squad-sdk';
|
|
22
|
+
import { resolveSquadPaths } from '@bradygaster/squad-sdk/resolution';
|
|
23
|
+
import { BOLD, RESET, DIM, GREEN, YELLOW, RED } from '../core/output.js';
|
|
24
|
+
import { fatal } from '../core/errors.js';
|
|
25
|
+
function parsePromoteArgs(args) {
|
|
26
|
+
const out = { all: false, dryRun: false };
|
|
27
|
+
for (let i = 0; i < args.length; i++) {
|
|
28
|
+
const a = args[i];
|
|
29
|
+
if (a === '--ref') {
|
|
30
|
+
out.ref = args[++i];
|
|
31
|
+
}
|
|
32
|
+
else if (a === '--all') {
|
|
33
|
+
out.all = true;
|
|
34
|
+
}
|
|
35
|
+
else if (a === '--dry-run') {
|
|
36
|
+
out.dryRun = true;
|
|
37
|
+
}
|
|
38
|
+
else if (a === '--help' || a === '-h') {
|
|
39
|
+
printPromoteHelp();
|
|
40
|
+
process.exit(0);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
function printPromoteHelp() {
|
|
46
|
+
console.log(`\n${BOLD}squad notes promote${RESET} — promote/archive flagged git-notes to permanent storage\n`);
|
|
47
|
+
console.log(`Usage: squad notes promote [options]\n`);
|
|
48
|
+
console.log(`Options:`);
|
|
49
|
+
console.log(` --ref <ref> Restrict to a single notes ref (e.g. squad/picard)`);
|
|
50
|
+
console.log(` --all Promote across all refs/notes/squad/* (default)`);
|
|
51
|
+
console.log(` --dry-run Report what would be promoted without writing`);
|
|
52
|
+
console.log(` --help, -h Show this help\n`);
|
|
53
|
+
console.log(`Requires stateBackend: 'two-layer' in .squad/config.json.`);
|
|
54
|
+
console.log(`Idempotent — promoted notes are removed from source, archived notes stay in place.\n`);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Enumerate squad notes refs (`refs/notes/squad/*`) present in the repo.
|
|
58
|
+
* Returns short names (e.g. `squad/picard`, not `refs/notes/squad/picard`).
|
|
59
|
+
*/
|
|
60
|
+
function listSquadNotesRefs(repoRoot) {
|
|
61
|
+
try {
|
|
62
|
+
const out = execFileSync('git', ['for-each-ref', '--format=%(refname)', 'refs/notes/squad/'], { cwd: repoRoot, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
63
|
+
return out
|
|
64
|
+
.split('\n')
|
|
65
|
+
.map((l) => l.trim())
|
|
66
|
+
.filter(Boolean)
|
|
67
|
+
.map((full) => full.replace(/^refs\/notes\//, ''))
|
|
68
|
+
.filter((r) => /^squad\/[A-Za-z0-9_\-./]+$/.test(r));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Best-effort dry-run preview: list notes on a ref with their flag classification.
|
|
76
|
+
* Reuses the same parsing logic as TwoLayerBackend.promoteNotes but without writing.
|
|
77
|
+
*/
|
|
78
|
+
function dryRunRef(repoRoot, ref) {
|
|
79
|
+
const result = { promoted: [], archived: [], skipped: 0 };
|
|
80
|
+
let listing;
|
|
81
|
+
try {
|
|
82
|
+
listing = execFileSync('git', ['notes', `--ref=${ref}`, 'list'], { cwd: repoRoot, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
let reachable;
|
|
88
|
+
try {
|
|
89
|
+
const raw = execFileSync('git', ['rev-list', 'HEAD'], {
|
|
90
|
+
cwd: repoRoot, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
|
|
91
|
+
});
|
|
92
|
+
reachable = new Set(raw.split('\n').map((s) => s.trim()).filter(Boolean));
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
for (const line of listing.split('\n')) {
|
|
98
|
+
const parts = line.trim().split(/\s+/);
|
|
99
|
+
if (parts.length < 2)
|
|
100
|
+
continue;
|
|
101
|
+
const commitSha = parts[1];
|
|
102
|
+
if (!/^[a-f0-9]{40}$|^[a-f0-9]{64}$/.test(commitSha))
|
|
103
|
+
continue;
|
|
104
|
+
if (!reachable.has(commitSha))
|
|
105
|
+
continue;
|
|
106
|
+
let raw;
|
|
107
|
+
try {
|
|
108
|
+
raw = execFileSync('git', ['notes', `--ref=${ref}`, 'show', commitSha], { cwd: repoRoot, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
let payload;
|
|
114
|
+
try {
|
|
115
|
+
payload = JSON.parse(raw);
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
result.skipped++;
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const flags = payload;
|
|
122
|
+
const refSeg = ref.split('/').filter(Boolean).join('/');
|
|
123
|
+
if (flags?.promote_to_permanent === true) {
|
|
124
|
+
result.promoted.push(`promoted/${refSeg}/${commitSha}.json`);
|
|
125
|
+
}
|
|
126
|
+
if (flags?.archive_on_close === true) {
|
|
127
|
+
result.archived.push(`archive/${refSeg}/${commitSha}.json`);
|
|
128
|
+
}
|
|
129
|
+
if (flags?.promote_to_permanent !== true && flags?.archive_on_close !== true) {
|
|
130
|
+
result.skipped++;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return result;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Run `squad notes promote`. Returns process exit code.
|
|
137
|
+
*/
|
|
138
|
+
export async function runNotesPromote(cwd, args) {
|
|
139
|
+
const opts = parsePromoteArgs(args);
|
|
140
|
+
const paths = resolveSquadPaths(cwd);
|
|
141
|
+
if (!paths) {
|
|
142
|
+
fatal('No squad found. Run "squad init" first.');
|
|
143
|
+
}
|
|
144
|
+
const squadDir = paths.projectDir;
|
|
145
|
+
const repoRoot = path.resolve(squadDir, '..');
|
|
146
|
+
const backend = resolveStateBackend(squadDir, repoRoot);
|
|
147
|
+
if (!(backend instanceof TwoLayerBackend)) {
|
|
148
|
+
console.log(`${YELLOW}⚠ stateBackend is '${backend.name}', not 'two-layer'. Nothing to promote.${RESET}`);
|
|
149
|
+
console.log(`${DIM} Run 'squad upgrade --state-backend two-layer' to enable note promotion.${RESET}`);
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
// Decide which refs to process.
|
|
153
|
+
let refs;
|
|
154
|
+
if (opts.ref) {
|
|
155
|
+
refs = [opts.ref];
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
refs = listSquadNotesRefs(repoRoot);
|
|
159
|
+
if (refs.length === 0) {
|
|
160
|
+
console.log(`${DIM}No squad notes refs found (refs/notes/squad/*). Nothing to do.${RESET}`);
|
|
161
|
+
return 0;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const header = opts.dryRun ? `notes promote ${DIM}(dry-run)${RESET}` : 'notes promote';
|
|
165
|
+
console.log(`\n${BOLD}${header}${RESET}\n`);
|
|
166
|
+
const rows = [];
|
|
167
|
+
let anyError = false;
|
|
168
|
+
for (const ref of refs) {
|
|
169
|
+
try {
|
|
170
|
+
const res = opts.dryRun ? dryRunRef(repoRoot, ref) : backend.promoteNotes(ref);
|
|
171
|
+
rows.push({ ref, promoted: res.promoted.length, archived: res.archived.length, skipped: res.skipped });
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
anyError = true;
|
|
175
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
176
|
+
rows.push({ ref, promoted: 0, archived: 0, skipped: 0, error: msg });
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const nameW = Math.max(...rows.map((r) => r.ref.length), 'Ref'.length, 5);
|
|
180
|
+
console.log(` ${'Ref'.padEnd(nameW)} ${'Promoted'.padStart(8)} ${'Archived'.padStart(8)} ${'Skipped'.padStart(7)}`);
|
|
181
|
+
console.log(` ${'─'.repeat(nameW)} ${'─'.repeat(8)} ${'─'.repeat(8)} ${'─'.repeat(7)}`);
|
|
182
|
+
let totalP = 0, totalA = 0, totalS = 0;
|
|
183
|
+
for (const r of rows) {
|
|
184
|
+
if (r.error) {
|
|
185
|
+
console.log(` ${r.ref.padEnd(nameW)} ${RED}error${RESET}: ${r.error}`);
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
totalP += r.promoted;
|
|
189
|
+
totalA += r.archived;
|
|
190
|
+
totalS += r.skipped;
|
|
191
|
+
console.log(` ${r.ref.padEnd(nameW)} ${String(r.promoted).padStart(8)} ${String(r.archived).padStart(8)} ${String(r.skipped).padStart(7)}`);
|
|
192
|
+
}
|
|
193
|
+
console.log(` ${'─'.repeat(nameW)} ${'─'.repeat(8)} ${'─'.repeat(8)} ${'─'.repeat(7)}`);
|
|
194
|
+
console.log(` ${'TOTAL'.padEnd(nameW)} ${String(totalP).padStart(8)} ${String(totalA).padStart(8)} ${String(totalS).padStart(7)}\n`);
|
|
195
|
+
if (anyError) {
|
|
196
|
+
console.log(`${RED}✗${RESET} Completed with errors (see above).`);
|
|
197
|
+
return 1;
|
|
198
|
+
}
|
|
199
|
+
console.log(`${GREEN}✓${RESET} ${opts.dryRun ? 'Dry-run complete' : 'Promotion complete'}.\n`);
|
|
200
|
+
return 0;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Top-level `squad notes` dispatcher.
|
|
204
|
+
*/
|
|
205
|
+
export async function runNotes(cwd, args) {
|
|
206
|
+
const sub = args[0];
|
|
207
|
+
if (!sub || sub === '--help' || sub === '-h' || sub === 'help') {
|
|
208
|
+
console.log(`\n${BOLD}squad notes${RESET} — manage squad git-notes state\n`);
|
|
209
|
+
console.log(`Subcommands:`);
|
|
210
|
+
console.log(` promote Promote/archive flagged notes to permanent orphan storage`);
|
|
211
|
+
console.log(`\nRun 'squad notes <subcommand> --help' for details.\n`);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
if (sub === 'promote') {
|
|
215
|
+
const code = await runNotesPromote(cwd, args.slice(1));
|
|
216
|
+
if (code !== 0)
|
|
217
|
+
process.exit(code);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
fatal(`Unknown 'squad notes' subcommand: ${sub}`);
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=notes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notes.js","sourceRoot":"","sources":["../../../src/cli/commands/notes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqCH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAID,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4J3E"}
|