@bradygaster/squad-cli 0.9.6-insider.2 → 0.10.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/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/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 +497 -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 +168 -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 +132 -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 +74 -1
- package/dist/cli/core/init.js.map +1 -1
- package/dist/cli/core/mcp-root.d.ts +60 -0
- package/dist/cli/core/mcp-root.d.ts.map +1 -0
- package/dist/cli/core/mcp-root.js +124 -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 +61 -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 +52 -16
- package/dist/cli/core/templates.js.map +1 -1
- package/dist/cli/core/upgrade.d.ts +5 -0
- package/dist/cli/core/upgrade.d.ts.map +1 -1
- package/dist/cli/core/upgrade.js +231 -12
- 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 +162 -50
- package/dist/cli-entry.js.map +1 -1
- package/package.json +7 -3
- 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/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/e2e-template-testing/SKILL.md +557 -0
- package/templates/skills/fact-checking/SKILL.md +61 -0
- package/templates/skills/squad-commands/SKILL.md +303 -0
- package/templates/skills/squad-version-check/SKILL.md +160 -0
- package/templates/spawn-reference.md +131 -0
- package/templates/squad.agent.md.template +200 -625
- 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
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight helper to check whether a specific package version exists in the
|
|
3
|
+
* public npm registry. Used by `ensureSquadStateMcpPinned` to avoid pinning a
|
|
4
|
+
* `squad_state` MCP launch spec to a version that `npx` cannot resolve
|
|
5
|
+
* (which would cause an ETARGET at session start and leave the bridge unwired).
|
|
6
|
+
*
|
|
7
|
+
* The result is cached per-process to avoid repeated lookups across the
|
|
8
|
+
* multi-pass upgrade flow. Network failures and non-200 responses are
|
|
9
|
+
* conservatively treated as "version not published" so that we fall back to
|
|
10
|
+
* the locally-installed binary rather than pinning a bad spec.
|
|
11
|
+
*
|
|
12
|
+
* See `.squad/files/validation/MCP-LOADER-ROOT-CAUSE.md` (data-15 Option A).
|
|
13
|
+
*/
|
|
14
|
+
const cache = new Map();
|
|
15
|
+
/** Reset the cache (test-only helper). */
|
|
16
|
+
export function _resetNpmRegistryCache() {
|
|
17
|
+
cache.clear();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Returns true if `@bradygaster/squad-cli@<version>` is reachable on the npm
|
|
21
|
+
* registry, false on any network failure / 404 / non-publishable response.
|
|
22
|
+
*
|
|
23
|
+
* Uses Node's built-in `https` so we don't pull in extra deps. Total budget
|
|
24
|
+
* is bounded by `timeoutMs` (default 2s) so a slow / offline registry can
|
|
25
|
+
* never block CLI startup.
|
|
26
|
+
*/
|
|
27
|
+
export async function isSquadCliVersionPublished(version, timeoutMs = 2000) {
|
|
28
|
+
if (!version || version === '0.0.0')
|
|
29
|
+
return false;
|
|
30
|
+
const cacheKey = version;
|
|
31
|
+
const cached = cache.get(cacheKey);
|
|
32
|
+
if (cached !== undefined)
|
|
33
|
+
return cached;
|
|
34
|
+
const url = `https://registry.npmjs.org/@bradygaster%2Fsquad-cli/${encodeURIComponent(version)}`;
|
|
35
|
+
const ok = await new Promise((resolve) => {
|
|
36
|
+
let settled = false;
|
|
37
|
+
const finish = (v) => {
|
|
38
|
+
if (settled)
|
|
39
|
+
return;
|
|
40
|
+
settled = true;
|
|
41
|
+
resolve(v);
|
|
42
|
+
};
|
|
43
|
+
const timer = setTimeout(() => finish(false), timeoutMs);
|
|
44
|
+
void import('node:https')
|
|
45
|
+
.then(({ request }) => {
|
|
46
|
+
const req = request(url, { method: 'GET' }, (res) => {
|
|
47
|
+
// Drain to free the socket.
|
|
48
|
+
res.resume();
|
|
49
|
+
finish(res.statusCode === 200);
|
|
50
|
+
});
|
|
51
|
+
req.on('error', () => finish(false));
|
|
52
|
+
req.on('timeout', () => {
|
|
53
|
+
req.destroy();
|
|
54
|
+
finish(false);
|
|
55
|
+
});
|
|
56
|
+
req.setTimeout(timeoutMs);
|
|
57
|
+
req.end();
|
|
58
|
+
})
|
|
59
|
+
.catch(() => finish(false))
|
|
60
|
+
.finally(() => clearTimeout(timer));
|
|
61
|
+
});
|
|
62
|
+
cache.set(cacheKey, ok);
|
|
63
|
+
return ok;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=npm-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-registry.js","sourceRoot":"","sources":["../../../src/cli/core/npm-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;AAEzC,0CAA0C;AAC1C,MAAM,UAAU,sBAAsB;IACpC,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAAe,EACf,SAAS,GAAG,IAAI;IAEhB,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC;IACzB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,MAAM,GAAG,GAAG,uDAAuD,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;IACjG,MAAM,EAAE,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;QAChD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,CAAU,EAAE,EAAE;YAC5B,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;QAEzD,KAAK,MAAM,CAAC,YAAY,CAAC;aACtB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACpB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBAClD,4BAA4B;gBAC5B,GAAG,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACrC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;gBACrB,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC1B,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aAC1B,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/cli/core/templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,+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;AAQH,+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,EAiT3C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAWxC"}
|
|
@@ -22,6 +22,9 @@ export const TEMPLATE_MANIFEST = [
|
|
|
22
22
|
description: 'Squad coordinator agent prompt',
|
|
23
23
|
},
|
|
24
24
|
// Casting system (squad-owned, overwrite on upgrade)
|
|
25
|
+
// NOTE: These JSON files are read at runtime by the SDK and many agent
|
|
26
|
+
// skills via their flat `.squad/casting-*.json` paths — do NOT route into
|
|
27
|
+
// a subdirectory without coordinated updates across the SDK + skill docs.
|
|
25
28
|
{
|
|
26
29
|
source: 'casting-history.json',
|
|
27
30
|
destination: 'casting-history.json',
|
|
@@ -40,88 +43,102 @@ export const TEMPLATE_MANIFEST = [
|
|
|
40
43
|
overwriteOnUpgrade: true,
|
|
41
44
|
description: 'Universe-based character registry',
|
|
42
45
|
},
|
|
43
|
-
// Template files (squad-owned, overwrite on upgrade)
|
|
46
|
+
// Template files (squad-owned, overwrite on upgrade) — routed to
|
|
47
|
+
// .squad/templates/ so upgrade doesn't dump ~20 generic *.md docs
|
|
48
|
+
// into the .squad/ root.
|
|
44
49
|
{
|
|
45
50
|
source: 'charter.md',
|
|
46
|
-
destination: 'charter.md',
|
|
51
|
+
destination: 'templates/charter.md',
|
|
47
52
|
overwriteOnUpgrade: true,
|
|
48
53
|
description: 'Agent charter template',
|
|
49
54
|
},
|
|
50
55
|
{
|
|
51
56
|
source: 'constraint-tracking.md',
|
|
52
|
-
destination: 'constraint-tracking.md',
|
|
57
|
+
destination: 'templates/constraint-tracking.md',
|
|
53
58
|
overwriteOnUpgrade: true,
|
|
54
59
|
description: 'Constraint tracking template',
|
|
55
60
|
},
|
|
56
61
|
{
|
|
57
62
|
source: 'copilot-instructions.md',
|
|
58
|
-
destination: 'copilot-instructions.md',
|
|
63
|
+
destination: 'templates/copilot-instructions.md',
|
|
59
64
|
overwriteOnUpgrade: true,
|
|
60
65
|
description: 'Copilot instructions template',
|
|
61
66
|
},
|
|
62
67
|
{
|
|
63
68
|
source: 'history.md',
|
|
64
|
-
destination: 'history.md',
|
|
69
|
+
destination: 'templates/history.md',
|
|
65
70
|
overwriteOnUpgrade: true,
|
|
66
71
|
description: 'Agent history template',
|
|
67
72
|
},
|
|
68
73
|
{
|
|
69
74
|
source: 'mcp-config.md',
|
|
70
|
-
destination: 'mcp-config.md',
|
|
75
|
+
destination: 'templates/mcp-config.md',
|
|
71
76
|
overwriteOnUpgrade: true,
|
|
72
77
|
description: 'MCP configuration template',
|
|
73
78
|
},
|
|
74
79
|
{
|
|
75
80
|
source: 'multi-agent-format.md',
|
|
76
|
-
destination: 'multi-agent-format.md',
|
|
81
|
+
destination: 'templates/multi-agent-format.md',
|
|
77
82
|
overwriteOnUpgrade: true,
|
|
78
83
|
description: 'Multi-agent format specification',
|
|
79
84
|
},
|
|
80
85
|
{
|
|
81
86
|
source: 'orchestration-log.md',
|
|
82
|
-
destination: 'orchestration-log.md',
|
|
87
|
+
destination: 'templates/orchestration-log.md',
|
|
83
88
|
overwriteOnUpgrade: true,
|
|
84
89
|
description: 'Orchestration log template',
|
|
85
90
|
},
|
|
86
91
|
{
|
|
87
92
|
source: 'plugin-marketplace.md',
|
|
88
|
-
destination: 'plugin-marketplace.md',
|
|
93
|
+
destination: 'templates/plugin-marketplace.md',
|
|
89
94
|
overwriteOnUpgrade: true,
|
|
90
95
|
description: 'Plugin marketplace template',
|
|
91
96
|
},
|
|
92
97
|
{
|
|
93
98
|
source: 'raw-agent-output.md',
|
|
94
|
-
destination: 'raw-agent-output.md',
|
|
99
|
+
destination: 'templates/raw-agent-output.md',
|
|
95
100
|
overwriteOnUpgrade: true,
|
|
96
101
|
description: 'Raw agent output template',
|
|
97
102
|
},
|
|
98
103
|
{
|
|
99
104
|
source: 'roster.md',
|
|
100
|
-
destination: 'roster.md',
|
|
105
|
+
destination: 'templates/roster.md',
|
|
101
106
|
overwriteOnUpgrade: true,
|
|
102
107
|
description: 'Team roster template',
|
|
103
108
|
},
|
|
104
109
|
{
|
|
105
110
|
source: 'run-output.md',
|
|
106
|
-
destination: 'run-output.md',
|
|
111
|
+
destination: 'templates/run-output.md',
|
|
107
112
|
overwriteOnUpgrade: true,
|
|
108
113
|
description: 'Run output template',
|
|
109
114
|
},
|
|
110
115
|
{
|
|
111
116
|
source: 'scribe-charter.md',
|
|
112
|
-
destination: 'scribe-charter.md',
|
|
117
|
+
destination: 'templates/scribe-charter.md',
|
|
113
118
|
overwriteOnUpgrade: true,
|
|
114
119
|
description: 'Scribe charter template',
|
|
115
120
|
},
|
|
121
|
+
{
|
|
122
|
+
source: 'Rai-charter.md',
|
|
123
|
+
destination: 'templates/Rai-charter.md',
|
|
124
|
+
overwriteOnUpgrade: true,
|
|
125
|
+
description: 'Rai RAI reviewer charter template',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
source: 'rai-policy.md',
|
|
129
|
+
destination: 'templates/rai-policy.md',
|
|
130
|
+
overwriteOnUpgrade: true,
|
|
131
|
+
description: 'Default RAI policy template',
|
|
132
|
+
},
|
|
116
133
|
{
|
|
117
134
|
source: 'fact-checker-charter.md',
|
|
118
|
-
destination: 'fact-checker-charter.md',
|
|
135
|
+
destination: 'templates/fact-checker-charter.md',
|
|
119
136
|
overwriteOnUpgrade: true,
|
|
120
137
|
description: 'Fact checker charter template',
|
|
121
138
|
},
|
|
122
139
|
{
|
|
123
140
|
source: 'skill.md',
|
|
124
|
-
destination: 'skill.md',
|
|
141
|
+
destination: 'templates/skill.md',
|
|
125
142
|
overwriteOnUpgrade: true,
|
|
126
143
|
description: 'Skill definition template',
|
|
127
144
|
},
|
|
@@ -154,7 +171,7 @@ export const TEMPLATE_MANIFEST = [
|
|
|
154
171
|
// Issue lifecycle (squad-owned)
|
|
155
172
|
{
|
|
156
173
|
source: 'issue-lifecycle.md',
|
|
157
|
-
destination: 'issue-lifecycle.md',
|
|
174
|
+
destination: 'templates/issue-lifecycle.md',
|
|
158
175
|
overwriteOnUpgrade: true,
|
|
159
176
|
description: 'Issue lifecycle process template',
|
|
160
177
|
},
|
|
@@ -207,6 +224,25 @@ export const TEMPLATE_MANIFEST = [
|
|
|
207
224
|
overwriteOnUpgrade: true,
|
|
208
225
|
description: 'Multi-agent collaboration and handoff patterns',
|
|
209
226
|
},
|
|
227
|
+
{
|
|
228
|
+
source: 'skills/squad-commands/SKILL.md',
|
|
229
|
+
destination: '../.copilot/skills/squad-commands/SKILL.md',
|
|
230
|
+
overwriteOnUpgrade: true,
|
|
231
|
+
description: 'In-chat command discovery — categorized menu of Squad operations',
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
source: 'skills/squad-version-check/SKILL.md',
|
|
235
|
+
destination: '../.copilot/skills/squad-version-check/SKILL.md',
|
|
236
|
+
overwriteOnUpgrade: true,
|
|
237
|
+
description: 'Squad CLI internals — version stamping & upgrade mechanics',
|
|
238
|
+
},
|
|
239
|
+
// Session init reference (squad-owned, coordinator reads at session start)
|
|
240
|
+
{
|
|
241
|
+
source: 'session-init-reference.md',
|
|
242
|
+
destination: 'templates/session-init-reference.md',
|
|
243
|
+
overwriteOnUpgrade: true,
|
|
244
|
+
description: 'Session init reference — coordinator procedures run at session start',
|
|
245
|
+
},
|
|
210
246
|
// Workflows (squad-owned, overwrite on upgrade)
|
|
211
247
|
{
|
|
212
248
|
source: 'workflows/squad-ci.yml',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/cli/core/templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAcxC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAmB;IAC/C,mBAAmB;IACnB;QACE,MAAM,EAAE,yBAAyB;QACjC,WAAW,EAAE,kCAAkC;QAC/C,kBAAkB,EAAE,IAAI;QACxB,WAAW,EAAE,gCAAgC;KAC9C;IAED,qDAAqD;IACrD;QACE,MAAM,EAAE,sBAAsB;QAC9B,WAAW,EAAE,sBAAsB;QACnC,kBAAkB,EAAE,IAAI;QACxB,WAAW,EAAE,0BAA0B;KACxC;IACD;QACE,MAAM,EAAE,qBAAqB;QAC7B,WAAW,EAAE,qBAAqB;QAClC,kBAAkB,EAAE,IAAI;QACxB,WAAW,EAAE,8BAA8B;KAC5C;IACD;QACE,MAAM,EAAE,uBAAuB;QAC/B,WAAW,EAAE,uBAAuB;QACpC,kBAAkB,EAAE,IAAI;QACxB,WAAW,EAAE,mCAAmC;KACjD;IAED,
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/cli/core/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* Zero-dep implementation using Node.js stdlib only
|
|
4
4
|
* @module cli/core/upgrade
|
|
5
5
|
*/
|
|
6
|
+
import { type SquadStateMcpSpec } from './mcp-spec.js';
|
|
7
|
+
export { resolveSquadStateMcpSpec } from './mcp-spec.js';
|
|
6
8
|
export interface UpgradeOptions {
|
|
7
9
|
migrateDirectory?: boolean;
|
|
8
10
|
self?: boolean;
|
|
@@ -35,6 +37,9 @@ export declare function ensureDirectories(dest: string): string[];
|
|
|
35
37
|
* available, falling back to inline JSON defaults.
|
|
36
38
|
*/
|
|
37
39
|
export declare function ensureCastingDefaults(dest: string, templatesDir?: string): string[];
|
|
40
|
+
/** Human-readable single-line description of an McpSpec for success() messages. */
|
|
41
|
+
export declare function describeMcpSpec(spec: SquadStateMcpSpec): string;
|
|
42
|
+
export declare function ensureMemoryGovernanceUpgradeDefaults(dest: string): string[];
|
|
38
43
|
/**
|
|
39
44
|
* Run the upgrade command
|
|
40
45
|
*/
|
|
@@ -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,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AA0GzD,MAAM,WAAW,cAAc;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;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;AAyTD;;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;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CA+CnF;AA8HD,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAI/D;AAED,wBAAgB,qCAAqC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAsC5E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAqKhG;AAMD,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAiBD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDpF"}
|
package/dist/cli/core/upgrade.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* @module cli/core/upgrade
|
|
5
5
|
*/
|
|
6
6
|
import path from 'node:path';
|
|
7
|
+
import { execFileSync } from 'node:child_process';
|
|
7
8
|
import { FSStorageProvider } from '@bradygaster/squad-sdk';
|
|
8
9
|
import { success, warn, info, dim } from './output.js';
|
|
9
10
|
import { fatal } from './errors.js';
|
|
@@ -11,7 +12,79 @@ import { detectSquadDir } from './detect-squad-dir.js';
|
|
|
11
12
|
import { TEMPLATE_MANIFEST, getTemplatesDir } from './templates.js';
|
|
12
13
|
import { runMigrations } from './migrations.js';
|
|
13
14
|
import { getPackageVersion, stampVersion, readInstalledVersion } from './version.js';
|
|
15
|
+
import { resolveSquadStateMcpSpec } from './mcp-spec.js';
|
|
16
|
+
export { resolveSquadStateMcpSpec } from './mcp-spec.js';
|
|
17
|
+
import { ensureSquadStateMcpInRoot, tombstoneStaleSquadStateInProjectMcp } from './mcp-root.js';
|
|
14
18
|
const storage = new FSStorageProvider();
|
|
19
|
+
function buildMcpServerSpecs(isGitHub, cliVersion) {
|
|
20
|
+
// Pin the squad-cli package to the currently-installed CLI version so that
|
|
21
|
+
// `npx -y @bradygaster/squad-cli state-mcp` does NOT silently resolve to the
|
|
22
|
+
// npm `latest` dist-tag (which may predate the `state-mcp` command and thus
|
|
23
|
+
// expose zero tools to Copilot — see MCP-BRIDGE-BROKEN root cause).
|
|
24
|
+
const pkgSpec = cliVersion && cliVersion !== '0.0.0'
|
|
25
|
+
? `@bradygaster/squad-cli@${cliVersion}`
|
|
26
|
+
: '@bradygaster/squad-cli';
|
|
27
|
+
const servers = [
|
|
28
|
+
{
|
|
29
|
+
name: 'squad_state',
|
|
30
|
+
command: 'npx',
|
|
31
|
+
args: ['-y', pkgSpec, 'state-mcp'],
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
servers.push(isGitHub
|
|
35
|
+
? {
|
|
36
|
+
name: 'EXAMPLE-github',
|
|
37
|
+
command: 'npx',
|
|
38
|
+
args: ['-y', '@anthropic/github-mcp-server'],
|
|
39
|
+
env: { GITHUB_TOKEN: '${GITHUB_TOKEN}' },
|
|
40
|
+
}
|
|
41
|
+
: {
|
|
42
|
+
name: 'EXAMPLE-azure-devops',
|
|
43
|
+
command: 'npx',
|
|
44
|
+
args: ['-y', '@azure/devops-mcp-server'],
|
|
45
|
+
env: {
|
|
46
|
+
AZURE_DEVOPS_ORG: '${AZURE_DEVOPS_ORG}',
|
|
47
|
+
AZURE_DEVOPS_PAT: '${AZURE_DEVOPS_PAT}',
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
return servers;
|
|
51
|
+
}
|
|
52
|
+
function yamlSingleQuoted(value) {
|
|
53
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
54
|
+
}
|
|
55
|
+
function yamlEnvValue(value) {
|
|
56
|
+
if (/^\$\{[A-Z0-9_]+\}$/.test(value)) {
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
60
|
+
}
|
|
61
|
+
function buildMcpFrontmatterBlock(isGitHub, cliVersion) {
|
|
62
|
+
const lines = ['mcp-servers:'];
|
|
63
|
+
for (const server of buildMcpServerSpecs(isGitHub, cliVersion)) {
|
|
64
|
+
lines.push(` ${server.name}:`);
|
|
65
|
+
lines.push(' type: local');
|
|
66
|
+
lines.push(` command: ${server.command}`);
|
|
67
|
+
lines.push(` args: [${server.args.map(yamlSingleQuoted).join(', ')}]`);
|
|
68
|
+
lines.push(' tools: ["*"]');
|
|
69
|
+
if (server.env && Object.keys(server.env).length > 0) {
|
|
70
|
+
lines.push(' env:');
|
|
71
|
+
for (const [key, value] of Object.entries(server.env)) {
|
|
72
|
+
lines.push(` ${key}: ${yamlEnvValue(value)}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return lines.join('\n');
|
|
77
|
+
}
|
|
78
|
+
function injectMcpFrontmatter(content, isGitHub, cliVersion) {
|
|
79
|
+
const closingStart = content.indexOf('\n---', 4);
|
|
80
|
+
if (!content.startsWith('---') || closingStart === -1) {
|
|
81
|
+
return content;
|
|
82
|
+
}
|
|
83
|
+
return content.slice(0, closingStart)
|
|
84
|
+
+ '\n'
|
|
85
|
+
+ buildMcpFrontmatterBlock(isGitHub, cliVersion)
|
|
86
|
+
+ content.slice(closingStart);
|
|
87
|
+
}
|
|
15
88
|
function copyDirRecursive(src, dest, force = true) {
|
|
16
89
|
storage.mkdirSync(dest, { recursive: true });
|
|
17
90
|
for (const entry of storage.listSync(src)) {
|
|
@@ -49,6 +122,64 @@ function compareSemver(a, b) {
|
|
|
49
122
|
return a < b ? -1 : a > b ? 1 : 0;
|
|
50
123
|
return 0;
|
|
51
124
|
}
|
|
125
|
+
function readSquadConfig(squadDir) {
|
|
126
|
+
const configPath = path.join(squadDir, 'config.json');
|
|
127
|
+
if (!storage.existsSync(configPath))
|
|
128
|
+
return {};
|
|
129
|
+
try {
|
|
130
|
+
const raw = storage.readSync(configPath);
|
|
131
|
+
if (!raw)
|
|
132
|
+
return {};
|
|
133
|
+
const parsed = JSON.parse(raw);
|
|
134
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
135
|
+
return parsed;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// Ignore malformed config for upgrade compatibility.
|
|
140
|
+
}
|
|
141
|
+
return {};
|
|
142
|
+
}
|
|
143
|
+
function readMcpConfigMode(config) {
|
|
144
|
+
return config['mcpConfigMode'] === 'agent-frontmatter' ? 'agent-frontmatter' : 'copilot-file';
|
|
145
|
+
}
|
|
146
|
+
function detectMcpConfigMode(config, agentDest) {
|
|
147
|
+
const configuredMode = readMcpConfigMode(config);
|
|
148
|
+
if (configuredMode === 'agent-frontmatter')
|
|
149
|
+
return configuredMode;
|
|
150
|
+
if (storage.existsSync(agentDest)) {
|
|
151
|
+
const existingAgent = storage.readSync(agentDest) ?? '';
|
|
152
|
+
const frontmatterEnd = existingAgent.indexOf('\n---', 4);
|
|
153
|
+
const frontmatter = frontmatterEnd === -1 ? '' : existingAgent.slice(0, frontmatterEnd);
|
|
154
|
+
if (frontmatter.includes('mcp-servers:')) {
|
|
155
|
+
return 'agent-frontmatter';
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return configuredMode;
|
|
159
|
+
}
|
|
160
|
+
function detectIsGitHubForMcp(dest, config) {
|
|
161
|
+
if (config['platform'] === 'azure-devops')
|
|
162
|
+
return false;
|
|
163
|
+
try {
|
|
164
|
+
const remoteUrl = execFileSync('git', ['remote', 'get-url', 'origin'], { cwd: dest, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
165
|
+
const remoteUrlLower = remoteUrl.toLowerCase();
|
|
166
|
+
if (remoteUrlLower.includes('dev.azure.com') || remoteUrlLower.includes('visualstudio.com') || remoteUrlLower.includes('ssh.dev.azure.com')) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// No git remote — assume GitHub, matching init behavior.
|
|
172
|
+
}
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
function writeAgentTemplate(agentSrc, agentDest, cliVersion, mcpConfigMode, isGitHub) {
|
|
176
|
+
let agentContent = storage.readSync(agentSrc) ?? '';
|
|
177
|
+
if (mcpConfigMode === 'agent-frontmatter') {
|
|
178
|
+
agentContent = injectMcpFrontmatter(agentContent, isGitHub, cliVersion);
|
|
179
|
+
}
|
|
180
|
+
storage.writeSync(agentDest, agentContent);
|
|
181
|
+
stampVersion(agentDest, cliVersion);
|
|
182
|
+
}
|
|
52
183
|
/**
|
|
53
184
|
* Detect project type by checking marker files
|
|
54
185
|
*/
|
|
@@ -252,6 +383,7 @@ const GITIGNORE_ENTRIES = [
|
|
|
252
383
|
'.squad/log/',
|
|
253
384
|
'.squad/decisions/inbox/',
|
|
254
385
|
'.squad/sessions/',
|
|
386
|
+
'.squad/.cache/',
|
|
255
387
|
'.squad-workstream',
|
|
256
388
|
];
|
|
257
389
|
const ENSURE_DIRECTORIES = [
|
|
@@ -464,7 +596,7 @@ function refreshSquadTemplatesDir(dest, templatesDir) {
|
|
|
464
596
|
/**
|
|
465
597
|
* Run all ensure* checks and skill/template sync — shared by both code paths
|
|
466
598
|
*/
|
|
467
|
-
function runEnsureChecks(dest, templatesDir, filesUpdated) {
|
|
599
|
+
async function runEnsureChecks(dest, templatesDir, filesUpdated) {
|
|
468
600
|
const attrAdded = ensureGitattributes(dest);
|
|
469
601
|
if (attrAdded.length > 0) {
|
|
470
602
|
success(`ensured .gitattributes (${attrAdded.length} rules added)`);
|
|
@@ -485,6 +617,11 @@ function runEnsureChecks(dest, templatesDir, filesUpdated) {
|
|
|
485
617
|
success(`scaffolded ${castingFiles.length} default casting files`);
|
|
486
618
|
filesUpdated.push(...castingFiles);
|
|
487
619
|
}
|
|
620
|
+
const memoryFiles = ensureMemoryGovernanceUpgradeDefaults(dest);
|
|
621
|
+
if (memoryFiles.length > 0) {
|
|
622
|
+
success(`scaffolded memory governance defaults (${memoryFiles.length} files/directories)`);
|
|
623
|
+
filesUpdated.push(...memoryFiles);
|
|
624
|
+
}
|
|
488
625
|
const skillCount = syncAllSkills(dest, templatesDir);
|
|
489
626
|
if (skillCount > 0) {
|
|
490
627
|
success(`synced ${skillCount} skills to .copilot/skills/`);
|
|
@@ -493,6 +630,71 @@ function runEnsureChecks(dest, templatesDir, filesUpdated) {
|
|
|
493
630
|
refreshSquadTemplatesDir(dest, templatesDir);
|
|
494
631
|
success('refreshed .squad/templates/');
|
|
495
632
|
filesUpdated.push('.squad/templates/');
|
|
633
|
+
// iter-8: write squad_state MCP entry to repo-root `.mcp.json`
|
|
634
|
+
// (auto-loaded by Copilot CLI 5.3+ walking up from cwd to git root)
|
|
635
|
+
// and tombstone any stale project-level entry left by older Squad
|
|
636
|
+
// versions in `.copilot/mcp-config.json`. No HOME modifications.
|
|
637
|
+
const pinnedSpec = await resolveSquadStateMcpSpec(getPackageVersion());
|
|
638
|
+
try {
|
|
639
|
+
const rootResult = ensureSquadStateMcpInRoot(dest, getPackageVersion(), pinnedSpec);
|
|
640
|
+
if (rootResult.written) {
|
|
641
|
+
success(`installed squad_state MCP server to .mcp.json (${describeMcpSpec(pinnedSpec)}) — Copilot CLI will auto-load on next invocation`);
|
|
642
|
+
filesUpdated.push('.mcp.json');
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
catch (err) {
|
|
646
|
+
warn(`Could not write .mcp.json: ${err instanceof Error ? err.message : err}`);
|
|
647
|
+
}
|
|
648
|
+
const tomb = tombstoneStaleSquadStateInProjectMcp(dest);
|
|
649
|
+
if (tomb.removed) {
|
|
650
|
+
success(`removed stale squad_state from ${tomb.path} (now lives in .mcp.json)`);
|
|
651
|
+
filesUpdated.push('.copilot/mcp-config.json (tombstoned)');
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
/** Human-readable single-line description of an McpSpec for success() messages. */
|
|
655
|
+
export function describeMcpSpec(spec) {
|
|
656
|
+
// After iter-7 all specs are `npx -y <pkg@version-or-tag> state-mcp`.
|
|
657
|
+
const pkg = spec.args[1] ?? '<unknown>';
|
|
658
|
+
return spec.source === 'insider' ? `${pkg} (@insider fallback)` : pkg;
|
|
659
|
+
}
|
|
660
|
+
export function ensureMemoryGovernanceUpgradeDefaults(dest) {
|
|
661
|
+
const memoryDir = path.join(dest, '.squad', 'memory');
|
|
662
|
+
const created = [];
|
|
663
|
+
for (const dir of ['local', 'policy-inbox', 'semantic-inbox', 'tombstones']) {
|
|
664
|
+
const fullPath = path.join(memoryDir, dir);
|
|
665
|
+
if (!storage.existsSync(fullPath)) {
|
|
666
|
+
storage.mkdirSync(fullPath, { recursive: true });
|
|
667
|
+
created.push(path.join('.squad', 'memory', dir));
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
const defaults = {
|
|
671
|
+
'config.json': JSON.stringify({
|
|
672
|
+
version: 1,
|
|
673
|
+
defaultProvider: 'local',
|
|
674
|
+
promptOnlyFallback: true,
|
|
675
|
+
externalProviders: {
|
|
676
|
+
hostInjectedCopilotAdapter: {
|
|
677
|
+
enabled: false,
|
|
678
|
+
requireApproval: true,
|
|
679
|
+
},
|
|
680
|
+
},
|
|
681
|
+
policy: {
|
|
682
|
+
rejectForbidden: true,
|
|
683
|
+
rejectTransientDurableWrites: true,
|
|
684
|
+
auditContent: false,
|
|
685
|
+
},
|
|
686
|
+
}, null, 2) + '\n',
|
|
687
|
+
'index.json': '[]\n',
|
|
688
|
+
'audit.jsonl': '',
|
|
689
|
+
};
|
|
690
|
+
for (const [file, content] of Object.entries(defaults)) {
|
|
691
|
+
const fullPath = path.join(memoryDir, file);
|
|
692
|
+
if (!storage.existsSync(fullPath)) {
|
|
693
|
+
storage.writeSync(fullPath, content);
|
|
694
|
+
created.push(path.join('.squad', 'memory', file));
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
return created;
|
|
496
698
|
}
|
|
497
699
|
/**
|
|
498
700
|
* Run the upgrade command
|
|
@@ -513,6 +715,9 @@ export async function runUpgrade(dest, options = {}) {
|
|
|
513
715
|
}
|
|
514
716
|
const agentDest = path.join(dest, '.github', 'agents', 'squad.agent.md');
|
|
515
717
|
const oldVersion = readInstalledVersion(agentDest) ?? '0.0.0';
|
|
718
|
+
const squadConfig = readSquadConfig(squadDirInfo.path);
|
|
719
|
+
const mcpConfigMode = detectMcpConfigMode(squadConfig, agentDest);
|
|
720
|
+
const isGitHubForMcp = detectIsGitHubForMcp(dest, squadConfig);
|
|
516
721
|
// Check if already current
|
|
517
722
|
const isAlreadyCurrent = !options.force && oldVersion && oldVersion !== '0.0.0' && compareSemver(oldVersion, cliVersion) === 0;
|
|
518
723
|
const projectType = detectProjectType(dest);
|
|
@@ -537,8 +742,7 @@ export async function runUpgrade(dest, options = {}) {
|
|
|
537
742
|
const agentSrc = path.join(templatesDir, 'squad.agent.md.template');
|
|
538
743
|
if (storage.existsSync(agentSrc)) {
|
|
539
744
|
storage.mkdirSync(path.dirname(agentDest), { recursive: true });
|
|
540
|
-
|
|
541
|
-
stampVersion(agentDest, cliVersion);
|
|
745
|
+
writeAgentTemplate(agentSrc, agentDest, cliVersion, mcpConfigMode, isGitHubForMcp);
|
|
542
746
|
success('upgraded squad.agent.md');
|
|
543
747
|
filesUpdated.push('squad.agent.md');
|
|
544
748
|
}
|
|
@@ -546,7 +750,7 @@ export async function runUpgrade(dest, options = {}) {
|
|
|
546
750
|
warn('squad.agent.md.template not found — squad.agent.md was not refreshed. Reinstall or repair the CLI to restore the missing template.');
|
|
547
751
|
}
|
|
548
752
|
// Run infrastructure ensure checks even when already current
|
|
549
|
-
runEnsureChecks(dest, templatesDir, filesUpdated);
|
|
753
|
+
await runEnsureChecks(dest, templatesDir, filesUpdated);
|
|
550
754
|
return {
|
|
551
755
|
fromVersion: oldVersion,
|
|
552
756
|
toVersion: cliVersion,
|
|
@@ -561,8 +765,7 @@ export async function runUpgrade(dest, options = {}) {
|
|
|
561
765
|
fatal('squad.agent.md.template not found in templates — installation may be corrupted');
|
|
562
766
|
}
|
|
563
767
|
storage.mkdirSync(path.dirname(agentDest), { recursive: true });
|
|
564
|
-
|
|
565
|
-
stampVersion(agentDest, cliVersion);
|
|
768
|
+
writeAgentTemplate(agentSrc, agentDest, cliVersion, mcpConfigMode, isGitHubForMcp);
|
|
566
769
|
const fromLabel = oldVersion === '0.0.0' || !oldVersion ? 'unknown' : oldVersion;
|
|
567
770
|
success(`upgraded coordinator from ${fromLabel} to ${cliVersion}`);
|
|
568
771
|
filesUpdated.push('squad.agent.md');
|
|
@@ -613,7 +816,7 @@ export async function runUpgrade(dest, options = {}) {
|
|
|
613
816
|
}
|
|
614
817
|
}
|
|
615
818
|
// Run infrastructure ensure checks
|
|
616
|
-
runEnsureChecks(dest, templatesDir, filesUpdated);
|
|
819
|
+
await runEnsureChecks(dest, templatesDir, filesUpdated);
|
|
617
820
|
console.log();
|
|
618
821
|
info(`Upgrade complete: v${fromLabel} → v${cliVersion}`);
|
|
619
822
|
if (migrationsApplied.some(m => m.toLowerCase().includes('scrub email'))) {
|
|
@@ -677,15 +880,31 @@ export async function selfUpgradeCli(options = {}) {
|
|
|
677
880
|
execSync(cmd, { stdio: 'inherit' });
|
|
678
881
|
}
|
|
679
882
|
catch (err) {
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
883
|
+
// UPGRADE-EPERM-FALSE-SUCCESS fix: do NOT swallow self-upgrade failures.
|
|
884
|
+
// Previously this only printed a warning and returned, causing the caller
|
|
885
|
+
// (cli-entry.ts) to then unconditionally print "✅ Upgraded" and exit 0.
|
|
886
|
+
// Now we surface the failure as a thrown error so the caller can exit non-zero
|
|
887
|
+
// and avoid the contradictory success message.
|
|
888
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
889
|
+
const code = err instanceof Error && 'code' in err
|
|
890
|
+
? (err.code ?? '')
|
|
891
|
+
: '';
|
|
892
|
+
const isPermission = code === 'EACCES' || code === 'EPERM' || /EACCES|EPERM|permission denied/i.test(errMsg);
|
|
893
|
+
const isBusy = code === 'EBUSY' || /EBUSY|in use|cannot access|being used by another process/i.test(errMsg);
|
|
894
|
+
let hint;
|
|
683
895
|
if (isPermission) {
|
|
684
|
-
|
|
896
|
+
hint = `Permission denied. Try: sudo ${cmd}`;
|
|
897
|
+
}
|
|
898
|
+
else if (isBusy) {
|
|
899
|
+
hint = `A file is in use (likely another squad shell is running). Close other squad CLI processes and retry: ${cmd}`;
|
|
685
900
|
}
|
|
686
901
|
else {
|
|
687
|
-
|
|
902
|
+
hint = `Upgrade failed. Try running manually: ${cmd}`;
|
|
688
903
|
}
|
|
904
|
+
warn(hint);
|
|
905
|
+
const failure = new Error(`Self-upgrade failed: ${hint}`);
|
|
906
|
+
failure.code = code || undefined;
|
|
907
|
+
throw failure;
|
|
689
908
|
}
|
|
690
909
|
}
|
|
691
910
|
//# sourceMappingURL=upgrade.js.map
|