@bradygaster/squad-cli 0.8.25 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +284 -32
- package/dist/cli/commands/aspire.d.ts.map +1 -1
- package/dist/cli/commands/aspire.js +3 -0
- package/dist/cli/commands/aspire.js.map +1 -1
- package/dist/cli/commands/build.js +3 -3
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/cast.d.ts +13 -0
- package/dist/cli/commands/cast.d.ts.map +1 -0
- package/dist/cli/commands/cast.js +77 -0
- package/dist/cli/commands/cast.js.map +1 -0
- package/dist/cli/commands/cost.d.ts +2 -0
- package/dist/cli/commands/cost.d.ts.map +1 -0
- package/dist/cli/commands/cost.js +170 -0
- package/dist/cli/commands/cost.js.map +1 -0
- package/dist/cli/commands/cross-squad.d.ts +12 -0
- package/dist/cli/commands/cross-squad.d.ts.map +1 -0
- package/dist/cli/commands/cross-squad.js +80 -0
- package/dist/cli/commands/cross-squad.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +5 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +156 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/economy.d.ts +10 -0
- package/dist/cli/commands/economy.d.ts.map +1 -0
- package/dist/cli/commands/economy.js +64 -0
- package/dist/cli/commands/economy.js.map +1 -0
- package/dist/cli/commands/export.d.ts.map +1 -1
- package/dist/cli/commands/export.js +11 -4
- package/dist/cli/commands/export.js.map +1 -1
- package/dist/cli/commands/import.js +2 -2
- package/dist/cli/commands/import.js.map +1 -1
- package/dist/cli/commands/personal.d.ts +16 -0
- package/dist/cli/commands/personal.d.ts.map +1 -0
- package/dist/cli/commands/personal.js +213 -0
- package/dist/cli/commands/personal.js.map +1 -0
- package/dist/cli/commands/roles.d.ts +2 -0
- package/dist/cli/commands/roles.d.ts.map +1 -0
- package/dist/cli/commands/roles.js +54 -0
- package/dist/cli/commands/roles.js.map +1 -0
- package/dist/cli/commands/schedule.d.ts +14 -0
- package/dist/cli/commands/schedule.d.ts.map +1 -0
- package/dist/cli/commands/schedule.js +208 -0
- package/dist/cli/commands/schedule.js.map +1 -0
- package/dist/cli/commands/watch.d.ts.map +1 -1
- package/dist/cli/commands/watch.js +17 -5
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/cli/core/cast.d.ts +9 -0
- package/dist/cli/core/cast.d.ts.map +1 -1
- package/dist/cli/core/cast.js +170 -60
- package/dist/cli/core/cast.js.map +1 -1
- package/dist/cli/core/detect-squad-dir.d.ts +10 -0
- package/dist/cli/core/detect-squad-dir.d.ts.map +1 -1
- package/dist/cli/core/detect-squad-dir.js +47 -0
- package/dist/cli/core/detect-squad-dir.js.map +1 -1
- package/dist/cli/core/init.d.ts +8 -0
- package/dist/cli/core/init.d.ts.map +1 -1
- package/dist/cli/core/init.js +115 -2
- package/dist/cli/core/init.js.map +1 -1
- package/dist/cli/core/migrations.d.ts.map +1 -1
- package/dist/cli/core/migrations.js +21 -0
- package/dist/cli/core/migrations.js.map +1 -1
- package/dist/cli/core/templates.d.ts.map +1 -1
- package/dist/cli/core/templates.js +8 -1
- package/dist/cli/core/templates.js.map +1 -1
- package/dist/cli/core/upgrade.d.ts +14 -0
- package/dist/cli/core/upgrade.d.ts.map +1 -1
- package/dist/cli/core/upgrade.js +182 -48
- package/dist/cli/core/upgrade.js.map +1 -1
- package/dist/cli/core/version.js +2 -2
- package/dist/cli/core/version.js.map +1 -1
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/self-update.d.ts +21 -0
- package/dist/cli/self-update.d.ts.map +1 -0
- package/dist/cli/self-update.js +113 -0
- package/dist/cli/self-update.js.map +1 -0
- package/dist/cli/shell/autocomplete.d.ts.map +1 -1
- package/dist/cli/shell/autocomplete.js +5 -0
- package/dist/cli/shell/autocomplete.js.map +1 -1
- package/dist/cli/shell/commands.d.ts.map +1 -1
- package/dist/cli/shell/commands.js +55 -24
- package/dist/cli/shell/commands.js.map +1 -1
- package/dist/cli/shell/components/AgentPanel.d.ts.map +1 -1
- package/dist/cli/shell/components/AgentPanel.js +21 -6
- package/dist/cli/shell/components/AgentPanel.js.map +1 -1
- package/dist/cli/shell/components/App.d.ts.map +1 -1
- package/dist/cli/shell/components/App.js +33 -15
- package/dist/cli/shell/components/App.js.map +1 -1
- package/dist/cli/shell/components/InputPrompt.js +1 -1
- package/dist/cli/shell/components/InputPrompt.js.map +1 -1
- package/dist/cli/shell/components/MessageStream.d.ts +2 -0
- package/dist/cli/shell/components/MessageStream.d.ts.map +1 -1
- package/dist/cli/shell/components/MessageStream.js +20 -20
- package/dist/cli/shell/components/MessageStream.js.map +1 -1
- package/dist/cli/shell/components/ThinkingIndicator.d.ts +4 -0
- package/dist/cli/shell/components/ThinkingIndicator.d.ts.map +1 -1
- package/dist/cli/shell/components/ThinkingIndicator.js +23 -4
- package/dist/cli/shell/components/ThinkingIndicator.js.map +1 -1
- package/dist/cli/shell/coordinator.d.ts +7 -0
- package/dist/cli/shell/coordinator.d.ts.map +1 -1
- package/dist/cli/shell/coordinator.js +206 -88
- package/dist/cli/shell/coordinator.js.map +1 -1
- package/dist/cli/shell/error-messages.d.ts +14 -0
- package/dist/cli/shell/error-messages.d.ts.map +1 -1
- package/dist/cli/shell/error-messages.js +65 -1
- package/dist/cli/shell/error-messages.js.map +1 -1
- package/dist/cli/shell/index.d.ts +1 -1
- package/dist/cli/shell/index.d.ts.map +1 -1
- package/dist/cli/shell/index.js +83 -12
- package/dist/cli/shell/index.js.map +1 -1
- package/dist/cli/shell/router.d.ts.map +1 -1
- package/dist/cli/shell/router.js +21 -2
- package/dist/cli/shell/router.js.map +1 -1
- package/dist/cli/shell/stream-bridge.d.ts +2 -0
- package/dist/cli/shell/stream-bridge.d.ts.map +1 -1
- package/dist/cli/shell/stream-bridge.js +11 -2
- package/dist/cli/shell/stream-bridge.js.map +1 -1
- package/dist/cli/shell/terminal.d.ts +5 -5
- package/dist/cli/shell/terminal.d.ts.map +1 -1
- package/dist/cli/shell/terminal.js +35 -26
- package/dist/cli/shell/terminal.js.map +1 -1
- package/dist/cli-entry.js +124 -42
- package/dist/cli-entry.js.map +1 -1
- package/package.json +20 -4
- package/scripts/patch-esm-imports.mjs +84 -55
- package/scripts/patch-ink-rendering.mjs +115 -0
- package/templates/casting/Futurama.json +10 -0
- package/templates/casting-policy.json +4 -2
- package/templates/casting-reference.md +104 -0
- package/templates/cooperative-rate-limiting.md +229 -0
- package/templates/issue-lifecycle.md +412 -0
- package/templates/keda-scaler.md +164 -0
- package/templates/machine-capabilities.md +75 -0
- package/templates/orchestration-log.md +1 -1
- package/templates/ralph-circuit-breaker.md +313 -0
- package/templates/routing.md +5 -20
- package/templates/scribe-charter.md +1 -1
- package/templates/skills/agent-collaboration/SKILL.md +42 -0
- package/templates/skills/agent-conduct/SKILL.md +24 -0
- package/templates/skills/architectural-proposals/SKILL.md +151 -0
- package/templates/skills/ci-validation-gates/SKILL.md +84 -0
- package/templates/skills/cli-wiring/SKILL.md +47 -0
- package/templates/skills/client-compatibility/SKILL.md +89 -0
- package/templates/skills/cross-squad/SKILL.md +114 -0
- package/templates/skills/distributed-mesh/SKILL.md +287 -0
- package/templates/skills/distributed-mesh/mesh.json.example +30 -0
- package/templates/skills/distributed-mesh/sync-mesh.ps1 +111 -0
- package/templates/skills/distributed-mesh/sync-mesh.sh +104 -0
- package/templates/skills/docs-standards/SKILL.md +71 -0
- package/templates/skills/economy-mode/SKILL.md +114 -0
- package/templates/skills/external-comms/SKILL.md +329 -0
- package/templates/skills/gh-auth-isolation/SKILL.md +183 -0
- package/templates/skills/git-workflow/SKILL.md +204 -0
- package/templates/skills/github-multi-account/SKILL.md +95 -0
- package/templates/skills/history-hygiene/SKILL.md +36 -0
- package/templates/skills/humanizer/SKILL.md +105 -0
- package/templates/skills/init-mode/SKILL.md +102 -0
- package/templates/skills/model-selection/SKILL.md +117 -0
- package/templates/skills/nap/SKILL.md +24 -0
- package/templates/skills/personal-squad/SKILL.md +57 -0
- package/templates/skills/release-process/SKILL.md +423 -0
- package/templates/skills/reskill/SKILL.md +92 -0
- package/templates/skills/reviewer-protocol/SKILL.md +79 -0
- package/templates/skills/secret-handling/SKILL.md +200 -0
- package/templates/skills/session-recovery/SKILL.md +155 -0
- package/templates/skills/test-discipline/SKILL.md +37 -0
- package/templates/skills/windows-compatibility/SKILL.md +74 -0
- package/templates/squad.agent.md +1287 -1146
- package/templates/workflows/squad-docs.yml +8 -4
- package/templates/workflows/squad-heartbeat.yml +3 -4
package/dist/cli/core/init.js
CHANGED
|
@@ -2,14 +2,37 @@
|
|
|
2
2
|
* Init command implementation — uses SDK
|
|
3
3
|
* Scaffolds a new Squad project with templates, workflows, and directory structure
|
|
4
4
|
*/
|
|
5
|
+
import fs from 'node:fs';
|
|
5
6
|
import path from 'node:path';
|
|
6
|
-
import {
|
|
7
|
+
import { execFileSync } from 'node:child_process';
|
|
8
|
+
import { detectSquadDir, resolveWorktreeMainCheckout } from './detect-squad-dir.js';
|
|
7
9
|
import { success, BOLD, RESET, YELLOW, GREEN, DIM } from './output.js';
|
|
8
10
|
import { fatal } from './errors.js';
|
|
9
11
|
import { detectProjectType } from './project-type.js';
|
|
10
|
-
import { getPackageVersion } from './version.js';
|
|
12
|
+
import { getPackageVersion, stampVersion } from './version.js';
|
|
11
13
|
import { initSquad as sdkInitSquad, cleanupOrphanInitPrompt } from '@bradygaster/squad-sdk';
|
|
12
14
|
const CYAN = '\x1b[36m';
|
|
15
|
+
/**
|
|
16
|
+
* Detect if the target directory is inside a parent git repo.
|
|
17
|
+
* Returns the normalized git root path if a parent repo is detected,
|
|
18
|
+
* or null if dest IS the git root or no git repo exists.
|
|
19
|
+
*/
|
|
20
|
+
export function detectParentGitRepo(dest) {
|
|
21
|
+
try {
|
|
22
|
+
const gitRoot = execFileSync('git', ['rev-parse', '--show-toplevel'], {
|
|
23
|
+
cwd: dest, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
|
|
24
|
+
}).trim().replace(/\//g, path.sep);
|
|
25
|
+
const normalDest = path.resolve(dest);
|
|
26
|
+
const normalGitRoot = path.resolve(gitRoot);
|
|
27
|
+
if (normalDest.toLowerCase() !== normalGitRoot.toLowerCase()) {
|
|
28
|
+
return normalGitRoot;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// No git available or not in a git repo
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
13
36
|
/** True when animations should be suppressed (NO_COLOR, dumb term, non-TTY). */
|
|
14
37
|
export function isInitNoColor() {
|
|
15
38
|
return ((process.env['NO_COLOR'] != null && process.env['NO_COLOR'] !== '') ||
|
|
@@ -67,8 +90,81 @@ export async function runInit(dest, options = {}) {
|
|
|
67
90
|
console.log();
|
|
68
91
|
// Detect project type
|
|
69
92
|
const projectType = detectProjectType(dest);
|
|
93
|
+
// ── Parent git repo detection ─────────────────────────────────────
|
|
94
|
+
// Copilot resolves .github/agents/ relative to the git root.
|
|
95
|
+
// If CWD is inside a parent git repo, the agent file will be
|
|
96
|
+
// invisible to copilot because the git root points elsewhere.
|
|
97
|
+
try {
|
|
98
|
+
const gitRoot = execFileSync('git', ['rev-parse', '--show-toplevel'], {
|
|
99
|
+
cwd: dest, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
|
|
100
|
+
}).trim().replace(/\//g, path.sep);
|
|
101
|
+
const normalDest = path.resolve(dest);
|
|
102
|
+
const normalGitRoot = path.resolve(gitRoot);
|
|
103
|
+
if (normalDest.toLowerCase() !== normalGitRoot.toLowerCase()) {
|
|
104
|
+
console.log();
|
|
105
|
+
console.log(`${YELLOW}${BOLD}⚠ Parent git repo detected${RESET}`);
|
|
106
|
+
console.log(`${YELLOW} Git root: ${normalGitRoot}${RESET}`);
|
|
107
|
+
console.log(`${YELLOW} You're in: ${normalDest}${RESET}`);
|
|
108
|
+
console.log();
|
|
109
|
+
console.log(`${DIM}Copilot resolves .github/agents/ from the git root, not from here.${RESET}`);
|
|
110
|
+
console.log(`${DIM}The Squad agent won't be visible to copilot in this folder.${RESET}`);
|
|
111
|
+
console.log();
|
|
112
|
+
// Auto-fix: run git init to create a repo boundary here
|
|
113
|
+
console.log(`${CYAN}${BOLD}→${RESET} Running ${CYAN}git init${RESET} to create a repo boundary...`);
|
|
114
|
+
execFileSync('git', ['init'], { cwd: dest, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
115
|
+
console.log(`${GREEN}${BOLD}✓${RESET} Initialized git repo at ${normalDest}`);
|
|
116
|
+
console.log();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// No git available or not in a git repo — that's fine, continue normally.
|
|
121
|
+
// Copilot will fall back to CWD for .github/agents/ discovery.
|
|
122
|
+
}
|
|
70
123
|
// Detect squad directory
|
|
71
124
|
const squadInfo = detectSquadDir(dest);
|
|
125
|
+
// ── Worktree guard ────────────────────────────────────────────────
|
|
126
|
+
// Prevent silently scaffolding a duplicate .squad/ when running init
|
|
127
|
+
// from a git worktree that already has .squad/ in the main checkout.
|
|
128
|
+
const mainCheckout = resolveWorktreeMainCheckout(dest);
|
|
129
|
+
if (mainCheckout) {
|
|
130
|
+
const mainSquadDir = path.join(mainCheckout, '.squad');
|
|
131
|
+
if (fs.existsSync(mainSquadDir)) {
|
|
132
|
+
console.log();
|
|
133
|
+
console.log(`${YELLOW}${BOLD}⚠ Git worktree detected${RESET}`);
|
|
134
|
+
console.log(`${YELLOW} Main checkout: ${mainCheckout}${RESET}`);
|
|
135
|
+
console.log(`${YELLOW} .squad/ already exists there.${RESET}`);
|
|
136
|
+
console.log();
|
|
137
|
+
console.log(` ${BOLD}[s]${RESET} Use shared .squad/ from main checkout ${DIM}(recommended)${RESET}`);
|
|
138
|
+
console.log(` ${BOLD}[l]${RESET} Create a worktree-local .squad/ in this branch`);
|
|
139
|
+
console.log();
|
|
140
|
+
let useShared = true;
|
|
141
|
+
if (process.stdin.isTTY) {
|
|
142
|
+
const { createInterface } = await import('node:readline/promises');
|
|
143
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
144
|
+
try {
|
|
145
|
+
const answer = (await rl.question(` Strategy [s/l, default: s]: `)).trim().toLowerCase();
|
|
146
|
+
useShared = answer !== 'l' && answer !== 'local';
|
|
147
|
+
}
|
|
148
|
+
finally {
|
|
149
|
+
rl.close();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
console.log(` ${DIM}Non-interactive mode — defaulting to shared strategy.${RESET}`);
|
|
154
|
+
}
|
|
155
|
+
if (useShared) {
|
|
156
|
+
console.log();
|
|
157
|
+
console.log(`${GREEN}${BOLD}✓${RESET} Using shared .squad/ from ${mainCheckout}`);
|
|
158
|
+
console.log(`${DIM} No changes made. Run squad commands from the main checkout.${RESET}`);
|
|
159
|
+
console.log();
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
// Local strategy: fall through to scaffold .squad/ in this worktree
|
|
163
|
+
console.log();
|
|
164
|
+
console.log(`${GREEN}${BOLD}→${RESET} Creating worktree-local .squad/ in ${dest}`);
|
|
165
|
+
console.log();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
72
168
|
// Show deprecation warning if using .ai-team/
|
|
73
169
|
if (squadInfo.isLegacy) {
|
|
74
170
|
showDeprecationWarning();
|
|
@@ -82,6 +178,11 @@ export async function runInit(dest, options = {}) {
|
|
|
82
178
|
name: 'scribe',
|
|
83
179
|
role: 'scribe',
|
|
84
180
|
displayName: 'Scribe',
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
name: 'ralph',
|
|
184
|
+
role: 'ralph',
|
|
185
|
+
displayName: 'Ralph',
|
|
85
186
|
}
|
|
86
187
|
],
|
|
87
188
|
configFormat: options.sdk ? 'sdk' : 'markdown',
|
|
@@ -93,6 +194,7 @@ export async function runInit(dest, options = {}) {
|
|
|
93
194
|
version,
|
|
94
195
|
prompt: options.prompt,
|
|
95
196
|
extractionDisabled: options.extractionDisabled,
|
|
197
|
+
roles: options.roles,
|
|
96
198
|
};
|
|
97
199
|
// Handle SIGINT to cleanup orphan .init-prompt
|
|
98
200
|
const squadDir = squadInfo.path;
|
|
@@ -112,6 +214,17 @@ export async function runInit(dest, options = {}) {
|
|
|
112
214
|
return; // Unreachable but makes TS happy
|
|
113
215
|
}
|
|
114
216
|
process.off('SIGINT', sigintHandler);
|
|
217
|
+
// Ensure version is fully stamped in squad.agent.md
|
|
218
|
+
const agentPath = path.join(dest, '.github', 'agents', 'squad.agent.md');
|
|
219
|
+
if (fs.existsSync(agentPath)) {
|
|
220
|
+
stampVersion(agentPath, version);
|
|
221
|
+
}
|
|
222
|
+
// Persist --roles flag for the REPL to pick up during casting
|
|
223
|
+
if (options.roles) {
|
|
224
|
+
const rolesMarker = path.join(squadDir, '.init-roles');
|
|
225
|
+
fs.writeFileSync(rolesMarker, '1', 'utf-8');
|
|
226
|
+
success(`base roles enabled — team will use built-in role catalog`);
|
|
227
|
+
}
|
|
115
228
|
// Report .init-prompt storage
|
|
116
229
|
if (options.prompt) {
|
|
117
230
|
success(`.init-prompt stored — team will be cast when you start squad`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/core/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/core/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../src/cli/core/migrations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../src/cli/core/migrations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8FH;;;GAGG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB"}
|
|
@@ -38,6 +38,27 @@ const migrations = [
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
version: '0.9.0',
|
|
44
|
+
description: 'Copy legacy .squad skills into .copilot/skills',
|
|
45
|
+
run(squadDir) {
|
|
46
|
+
const projectRoot = path.dirname(squadDir);
|
|
47
|
+
const legacySkillsDir = path.join(squadDir, 'skills');
|
|
48
|
+
if (!fs.existsSync(legacySkillsDir)) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const skillNames = fs.readdirSync(legacySkillsDir).filter(entry => fs.existsSync(path.join(legacySkillsDir, entry, 'SKILL.md')));
|
|
52
|
+
if (skillNames.length === 0) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const copilotSkillsDir = path.join(projectRoot, '.copilot', 'skills');
|
|
56
|
+
fs.mkdirSync(copilotSkillsDir, { recursive: true });
|
|
57
|
+
for (const skillName of skillNames) {
|
|
58
|
+
fs.cpSync(path.join(legacySkillsDir, skillName), path.join(copilotSkillsDir, skillName), { recursive: true, force: false, errorOnExist: false });
|
|
59
|
+
}
|
|
60
|
+
success(`Migrated skills to .copilot/skills: ${skillNames.join(', ')}`);
|
|
61
|
+
}
|
|
41
62
|
}
|
|
42
63
|
];
|
|
43
64
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/cli/core/migrations.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/cli/core/migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/cli/core/templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,+BAA+B;AAC/B,MAAM,WAAW,YAAY;IAC3B,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,kBAAkB,EAAE,OAAO,CAAC;IAC5B,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/cli/core/templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,+BAA+B;AAC/B,MAAM,WAAW,YAAY;IAC3B,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,kBAAkB,EAAE,OAAO,CAAC;IAC5B,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,YAAY,EA4N3C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAWxC"}
|
|
@@ -144,10 +144,17 @@ export const TEMPLATE_MANIFEST = [
|
|
|
144
144
|
overwriteOnUpgrade: false,
|
|
145
145
|
description: 'Agent accumulated wisdom',
|
|
146
146
|
},
|
|
147
|
+
// Issue lifecycle (squad-owned)
|
|
148
|
+
{
|
|
149
|
+
source: 'issue-lifecycle.md',
|
|
150
|
+
destination: 'issue-lifecycle.md',
|
|
151
|
+
overwriteOnUpgrade: true,
|
|
152
|
+
description: 'Issue lifecycle process template',
|
|
153
|
+
},
|
|
147
154
|
// Skills subdirectory (squad-owned)
|
|
148
155
|
{
|
|
149
156
|
source: 'skills/squad-conventions/SKILL.md',
|
|
150
|
-
destination: 'skills/squad-conventions/SKILL.md',
|
|
157
|
+
destination: '../.copilot/skills/squad-conventions/SKILL.md',
|
|
151
158
|
overwriteOnUpgrade: true,
|
|
152
159
|
description: 'Squad conventions skill definition',
|
|
153
160
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/cli/core/templates.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/cli/core/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
export interface UpgradeOptions {
|
|
7
7
|
migrateDirectory?: boolean;
|
|
8
8
|
self?: boolean;
|
|
9
|
+
force?: boolean;
|
|
9
10
|
}
|
|
10
11
|
export interface UpdateInfo {
|
|
11
12
|
fromVersion: string;
|
|
@@ -13,6 +14,19 @@ export interface UpdateInfo {
|
|
|
13
14
|
filesUpdated: string[];
|
|
14
15
|
migrationsRun: string[];
|
|
15
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Ensure .gitattributes has required merge=union rules (idempotent)
|
|
19
|
+
*/
|
|
20
|
+
export declare function ensureGitattributes(dest: string): string[];
|
|
21
|
+
/**
|
|
22
|
+
* Ensure .gitignore has required entries (idempotent).
|
|
23
|
+
* Skips entries already covered by a parent path (e.g. `.squad/` covers `.squad/log/`).
|
|
24
|
+
*/
|
|
25
|
+
export declare function ensureGitignore(dest: string): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Create missing infrastructure directories
|
|
28
|
+
*/
|
|
29
|
+
export declare function ensureDirectories(dest: string): string[];
|
|
16
30
|
/**
|
|
17
31
|
* Run the upgrade command
|
|
18
32
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/core/upgrade.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/core/upgrade.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,MAAM,WAAW,cAAc;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAuPD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAyB1D;AAkBD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBtD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAUxD;AAyED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CA+JhG"}
|
package/dist/cli/core/upgrade.js
CHANGED
|
@@ -5,35 +5,12 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import fs from 'node:fs';
|
|
7
7
|
import path from 'node:path';
|
|
8
|
-
import { fileURLToPath } from 'node:url';
|
|
9
|
-
import { dirname } from 'node:path';
|
|
10
8
|
import { success, warn, info, dim } from './output.js';
|
|
11
9
|
import { fatal } from './errors.js';
|
|
12
10
|
import { detectSquadDir } from './detect-squad-dir.js';
|
|
13
11
|
import { TEMPLATE_MANIFEST, getTemplatesDir } from './templates.js';
|
|
14
12
|
import { runMigrations } from './migrations.js';
|
|
15
|
-
|
|
16
|
-
const currentDir = dirname(currentFile);
|
|
17
|
-
/**
|
|
18
|
-
* Read version from squad.agent.md HTML comment
|
|
19
|
-
*/
|
|
20
|
-
function readInstalledVersion(agentPath) {
|
|
21
|
-
try {
|
|
22
|
-
if (!fs.existsSync(agentPath))
|
|
23
|
-
return '0.0.0';
|
|
24
|
-
const content = fs.readFileSync(agentPath, 'utf8');
|
|
25
|
-
// Try HTML comment first (new format)
|
|
26
|
-
const commentMatch = content.match(/<!-- version: ([0-9.]+(?:-[a-z]+(?:\.\d+)?)?) -->/);
|
|
27
|
-
if (commentMatch)
|
|
28
|
-
return commentMatch[1];
|
|
29
|
-
// Fallback to frontmatter (old format)
|
|
30
|
-
const frontmatterMatch = content.match(/^version:\s*"([^"]+)"/m);
|
|
31
|
-
return frontmatterMatch ? frontmatterMatch[1] : '0.0.0';
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
return '0.0.0';
|
|
35
|
-
}
|
|
36
|
-
}
|
|
13
|
+
import { getPackageVersion, stampVersion, readInstalledVersion } from './version.js';
|
|
37
14
|
/**
|
|
38
15
|
* Compare semver strings: -1 (a<b), 0 (a==b), 1 (a>b)
|
|
39
16
|
*/
|
|
@@ -58,19 +35,6 @@ function compareSemver(a, b) {
|
|
|
58
35
|
return a < b ? -1 : a > b ? 1 : 0;
|
|
59
36
|
return 0;
|
|
60
37
|
}
|
|
61
|
-
/**
|
|
62
|
-
* Stamp version into squad.agent.md after copying
|
|
63
|
-
*/
|
|
64
|
-
function stampVersion(filePath, version) {
|
|
65
|
-
let content = fs.readFileSync(filePath, 'utf8');
|
|
66
|
-
// Replace version in HTML comment
|
|
67
|
-
content = content.replace(/<!-- version: [^>]+ -->/m, `<!-- version: ${version} -->`);
|
|
68
|
-
// Replace version in Identity section's Version line
|
|
69
|
-
content = content.replace(/- \*\*Version:\*\* [0-9.]+(?:-[a-z]+(?:\.\d+)?)?/m, `- **Version:** ${version}`);
|
|
70
|
-
// Replace {version} placeholder
|
|
71
|
-
content = content.replace(/`Squad v\{version\}`/g, `\`Squad v${version}\``);
|
|
72
|
-
fs.writeFileSync(filePath, content);
|
|
73
|
-
}
|
|
74
38
|
/**
|
|
75
39
|
* Detect project type by checking marker files
|
|
76
40
|
*/
|
|
@@ -262,25 +226,186 @@ function writeWorkflowFile(file, srcPath, destPath, projectType) {
|
|
|
262
226
|
}
|
|
263
227
|
fs.copyFileSync(srcPath, destPath);
|
|
264
228
|
}
|
|
229
|
+
/* ── Infrastructure ensure functions ────────────────────────────── */
|
|
230
|
+
const GITATTRIBUTES_RULES = [
|
|
231
|
+
'.squad/decisions.md merge=union',
|
|
232
|
+
'.squad/agents/*/history.md merge=union',
|
|
233
|
+
'.squad/log/** merge=union',
|
|
234
|
+
'.squad/orchestration-log/** merge=union',
|
|
235
|
+
];
|
|
236
|
+
const GITIGNORE_ENTRIES = [
|
|
237
|
+
'.squad/orchestration-log/',
|
|
238
|
+
'.squad/log/',
|
|
239
|
+
'.squad/decisions/inbox/',
|
|
240
|
+
'.squad/sessions/',
|
|
241
|
+
'.squad-workstream',
|
|
242
|
+
];
|
|
243
|
+
const ENSURE_DIRECTORIES = [
|
|
244
|
+
'.squad/identity',
|
|
245
|
+
'.squad/orchestration-log',
|
|
246
|
+
'.squad/log',
|
|
247
|
+
'.squad/sessions',
|
|
248
|
+
'.squad/decisions/inbox',
|
|
249
|
+
'.copilot/skills',
|
|
250
|
+
];
|
|
251
|
+
/**
|
|
252
|
+
* Ensure .gitattributes has required merge=union rules (idempotent)
|
|
253
|
+
*/
|
|
254
|
+
export function ensureGitattributes(dest) {
|
|
255
|
+
const filePath = path.join(dest, '.gitattributes');
|
|
256
|
+
let content = '';
|
|
257
|
+
if (fs.existsSync(filePath)) {
|
|
258
|
+
content = fs.readFileSync(filePath, 'utf8');
|
|
259
|
+
}
|
|
260
|
+
const added = [];
|
|
261
|
+
for (const rule of GITATTRIBUTES_RULES) {
|
|
262
|
+
if (!content.includes(rule)) {
|
|
263
|
+
added.push(rule);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
if (added.length > 0) {
|
|
267
|
+
const suffix = content.length > 0 && !content.endsWith('\n') ? '\n' : '';
|
|
268
|
+
try {
|
|
269
|
+
fs.writeFileSync(filePath, content + suffix + added.join('\n') + '\n');
|
|
270
|
+
}
|
|
271
|
+
catch (err) {
|
|
272
|
+
if (err instanceof Error && 'code' in err && ['EPERM', 'EACCES'].includes(err.code ?? '')) {
|
|
273
|
+
warn('Could not update .gitattributes (read-only). Add merge=union entries manually.');
|
|
274
|
+
return [];
|
|
275
|
+
}
|
|
276
|
+
throw err;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return added;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Check whether an existing gitignore line already covers a candidate entry
|
|
283
|
+
* via parent-directory matching (e.g. `.squad/` covers `.squad/log/`).
|
|
284
|
+
*/
|
|
285
|
+
function isAlreadyCoveredByParent(entry, lines) {
|
|
286
|
+
for (const line of lines) {
|
|
287
|
+
const trimmed = line.trim();
|
|
288
|
+
if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('!'))
|
|
289
|
+
continue;
|
|
290
|
+
const parent = trimmed.endsWith('/') ? trimmed : trimmed + '/';
|
|
291
|
+
if (entry.startsWith(parent) && entry !== trimmed) {
|
|
292
|
+
return true;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
265
297
|
/**
|
|
266
|
-
*
|
|
298
|
+
* Ensure .gitignore has required entries (idempotent).
|
|
299
|
+
* Skips entries already covered by a parent path (e.g. `.squad/` covers `.squad/log/`).
|
|
267
300
|
*/
|
|
268
|
-
function
|
|
301
|
+
export function ensureGitignore(dest) {
|
|
302
|
+
const filePath = path.join(dest, '.gitignore');
|
|
303
|
+
let content = '';
|
|
304
|
+
if (fs.existsSync(filePath)) {
|
|
305
|
+
content = fs.readFileSync(filePath, 'utf8');
|
|
306
|
+
}
|
|
307
|
+
const existingLines = content.split('\n');
|
|
308
|
+
const added = [];
|
|
309
|
+
for (const entry of GITIGNORE_ENTRIES) {
|
|
310
|
+
if (content.includes(entry))
|
|
311
|
+
continue;
|
|
312
|
+
if (isAlreadyCoveredByParent(entry, existingLines))
|
|
313
|
+
continue;
|
|
314
|
+
added.push(entry);
|
|
315
|
+
}
|
|
316
|
+
if (added.length > 0) {
|
|
317
|
+
const suffix = content.length > 0 && !content.endsWith('\n') ? '\n' : '';
|
|
318
|
+
fs.writeFileSync(filePath, content + suffix + added.join('\n') + '\n');
|
|
319
|
+
}
|
|
320
|
+
return added;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Create missing infrastructure directories
|
|
324
|
+
*/
|
|
325
|
+
export function ensureDirectories(dest) {
|
|
326
|
+
const created = [];
|
|
327
|
+
for (const dir of ENSURE_DIRECTORIES) {
|
|
328
|
+
const fullPath = path.join(dest, dir);
|
|
329
|
+
if (!fs.existsSync(fullPath)) {
|
|
330
|
+
fs.mkdirSync(fullPath, { recursive: true });
|
|
331
|
+
created.push(dir);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return created;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Copy all skills from package templates to .copilot/skills/ (force: false)
|
|
338
|
+
*/
|
|
339
|
+
function syncAllSkills(dest, templatesDir) {
|
|
340
|
+
const skillsSrc = path.join(templatesDir, 'skills');
|
|
341
|
+
const skillsDest = path.join(dest, '.copilot', 'skills');
|
|
342
|
+
if (!fs.existsSync(skillsSrc))
|
|
343
|
+
return 0;
|
|
344
|
+
fs.mkdirSync(skillsDest, { recursive: true });
|
|
345
|
+
fs.cpSync(skillsSrc, skillsDest, { recursive: true, force: false });
|
|
346
|
+
// Count skill directories synced
|
|
269
347
|
try {
|
|
270
|
-
|
|
271
|
-
const pkgPath = path.join(currentDir, '..', '..', '..', 'package.json');
|
|
272
|
-
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
273
|
-
return pkg.version || '0.0.0';
|
|
348
|
+
return fs.readdirSync(skillsSrc).filter(e => fs.statSync(path.join(skillsSrc, e)).isDirectory()).length;
|
|
274
349
|
}
|
|
275
350
|
catch {
|
|
276
|
-
return
|
|
351
|
+
return 0;
|
|
277
352
|
}
|
|
278
353
|
}
|
|
354
|
+
/**
|
|
355
|
+
* Copy full templates/ directory to .squad/templates/ for user access
|
|
356
|
+
*/
|
|
357
|
+
function refreshSquadTemplatesDir(dest, templatesDir) {
|
|
358
|
+
const squadTemplatesDest = path.join(dest, '.squad', 'templates');
|
|
359
|
+
fs.mkdirSync(squadTemplatesDest, { recursive: true });
|
|
360
|
+
// Copy everything except workflows and skills (those have dedicated handling)
|
|
361
|
+
const entries = fs.readdirSync(templatesDir);
|
|
362
|
+
for (const entry of entries) {
|
|
363
|
+
if (entry === 'workflows' || entry === 'skills')
|
|
364
|
+
continue;
|
|
365
|
+
const srcPath = path.join(templatesDir, entry);
|
|
366
|
+
const destPath = path.join(squadTemplatesDest, entry);
|
|
367
|
+
const stat = fs.statSync(srcPath);
|
|
368
|
+
if (stat.isDirectory()) {
|
|
369
|
+
fs.cpSync(srcPath, destPath, { recursive: true, force: true });
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
fs.copyFileSync(srcPath, destPath);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Run all ensure* checks and skill/template sync — shared by both code paths
|
|
378
|
+
*/
|
|
379
|
+
function runEnsureChecks(dest, templatesDir, filesUpdated) {
|
|
380
|
+
const attrAdded = ensureGitattributes(dest);
|
|
381
|
+
if (attrAdded.length > 0) {
|
|
382
|
+
success(`ensured .gitattributes (${attrAdded.length} rules added)`);
|
|
383
|
+
filesUpdated.push('.gitattributes');
|
|
384
|
+
}
|
|
385
|
+
const ignoreAdded = ensureGitignore(dest);
|
|
386
|
+
if (ignoreAdded.length > 0) {
|
|
387
|
+
success(`ensured .gitignore (${ignoreAdded.length} entries added)`);
|
|
388
|
+
filesUpdated.push('.gitignore');
|
|
389
|
+
}
|
|
390
|
+
const dirsCreated = ensureDirectories(dest);
|
|
391
|
+
if (dirsCreated.length > 0) {
|
|
392
|
+
success(`created ${dirsCreated.length} missing directories`);
|
|
393
|
+
filesUpdated.push(...dirsCreated);
|
|
394
|
+
}
|
|
395
|
+
const skillCount = syncAllSkills(dest, templatesDir);
|
|
396
|
+
if (skillCount > 0) {
|
|
397
|
+
success(`synced ${skillCount} skills to .copilot/skills/`);
|
|
398
|
+
filesUpdated.push(`skills (${skillCount})`);
|
|
399
|
+
}
|
|
400
|
+
refreshSquadTemplatesDir(dest, templatesDir);
|
|
401
|
+
success('refreshed .squad/templates/');
|
|
402
|
+
filesUpdated.push('.squad/templates/');
|
|
403
|
+
}
|
|
279
404
|
/**
|
|
280
405
|
* Run the upgrade command
|
|
281
406
|
*/
|
|
282
407
|
export async function runUpgrade(dest, options = {}) {
|
|
283
|
-
const cliVersion =
|
|
408
|
+
const cliVersion = getPackageVersion();
|
|
284
409
|
const filesUpdated = [];
|
|
285
410
|
// Detect squad directory
|
|
286
411
|
const squadDirInfo = detectSquadDir(dest);
|
|
@@ -294,9 +419,9 @@ export async function runUpgrade(dest, options = {}) {
|
|
|
294
419
|
fatal('No squad found — run init first.');
|
|
295
420
|
}
|
|
296
421
|
const agentDest = path.join(dest, '.github', 'agents', 'squad.agent.md');
|
|
297
|
-
const oldVersion = readInstalledVersion(agentDest);
|
|
422
|
+
const oldVersion = readInstalledVersion(agentDest) ?? '0.0.0';
|
|
298
423
|
// Check if already current
|
|
299
|
-
const isAlreadyCurrent = oldVersion && oldVersion !== '0.0.0' && compareSemver(oldVersion, cliVersion) === 0;
|
|
424
|
+
const isAlreadyCurrent = !options.force && oldVersion && oldVersion !== '0.0.0' && compareSemver(oldVersion, cliVersion) === 0;
|
|
300
425
|
const projectType = detectProjectType(dest);
|
|
301
426
|
if (isAlreadyCurrent) {
|
|
302
427
|
info(`Already up to date (v${cliVersion})`);
|
|
@@ -324,6 +449,8 @@ export async function runUpgrade(dest, options = {}) {
|
|
|
324
449
|
success('upgraded squad.agent.md');
|
|
325
450
|
filesUpdated.push('squad.agent.md');
|
|
326
451
|
}
|
|
452
|
+
// Run infrastructure ensure checks even when already current
|
|
453
|
+
runEnsureChecks(dest, templatesDir, filesUpdated);
|
|
327
454
|
return {
|
|
328
455
|
fromVersion: oldVersion,
|
|
329
456
|
toVersion: cliVersion,
|
|
@@ -386,9 +513,16 @@ export async function runUpgrade(dest, options = {}) {
|
|
|
386
513
|
filesUpdated.push('copilot-instructions.md');
|
|
387
514
|
}
|
|
388
515
|
}
|
|
516
|
+
// Run infrastructure ensure checks
|
|
517
|
+
runEnsureChecks(dest, templatesDir, filesUpdated);
|
|
389
518
|
console.log();
|
|
390
519
|
info(`Upgrade complete: v${fromLabel} → v${cliVersion}`);
|
|
391
|
-
|
|
520
|
+
if (migrationsApplied.some(m => m.toLowerCase().includes('scrub email'))) {
|
|
521
|
+
dim('Privacy scrub applied to .squad/ files (email addresses removed)');
|
|
522
|
+
}
|
|
523
|
+
else {
|
|
524
|
+
dim('Preserves user state: team.md, decisions/, agents/*/history.md');
|
|
525
|
+
}
|
|
392
526
|
console.log();
|
|
393
527
|
return {
|
|
394
528
|
fromVersion: fromLabel,
|