@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,30 +1,43 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Export command — port from beta CLI
|
|
3
|
-
* Exports squad to squad-export.json
|
|
3
|
+
* Exports squad to squad-export.json (local or GitHub repo)
|
|
4
4
|
*/
|
|
5
5
|
import path from 'node:path';
|
|
6
|
-
import { FSStorageProvider } from '@bradygaster/squad-sdk';
|
|
6
|
+
import { FSStorageProvider, exportToRepo, parseRepoString } from '@bradygaster/squad-sdk';
|
|
7
7
|
import { detectSquadDir } from '../core/detect-squad-dir.js';
|
|
8
8
|
import { success, warn } from '../core/output.js';
|
|
9
9
|
import { fatal } from '../core/errors.js';
|
|
10
|
+
import { getPackageVersion } from '../core/version.js';
|
|
11
|
+
import { ghAvailable, ghAuthenticated } from '../core/gh-cli.js';
|
|
10
12
|
/**
|
|
11
|
-
*
|
|
13
|
+
* Build the export manifest from a local squad directory.
|
|
12
14
|
*/
|
|
13
|
-
|
|
14
|
-
const storage = new FSStorageProvider();
|
|
15
|
-
const squadInfo = detectSquadDir(dest);
|
|
16
|
-
const teamMd = path.join(squadInfo.path, 'team.md');
|
|
17
|
-
if (!storage.existsSync(teamMd)) {
|
|
18
|
-
fatal('No squad found — run init first');
|
|
19
|
-
}
|
|
15
|
+
function buildManifest(dest, storage, squadInfo) {
|
|
20
16
|
const manifest = {
|
|
21
17
|
version: '1.0',
|
|
22
18
|
exported_at: new Date().toISOString(),
|
|
23
|
-
squad_version:
|
|
19
|
+
squad_version: getPackageVersion(),
|
|
24
20
|
casting: {},
|
|
25
21
|
agents: {},
|
|
26
|
-
skills: []
|
|
22
|
+
skills: [],
|
|
27
23
|
};
|
|
24
|
+
// Read top-level squad files (team.md, decisions.md, routing.md)
|
|
25
|
+
const teamMdPath = path.join(squadInfo.path, 'team.md');
|
|
26
|
+
const teamMdContent = storage.readSync(teamMdPath);
|
|
27
|
+
if (teamMdContent !== undefined) {
|
|
28
|
+
manifest.team_md = teamMdContent;
|
|
29
|
+
manifest.team = teamMdContent;
|
|
30
|
+
}
|
|
31
|
+
const decisionsMdPath = path.join(squadInfo.path, 'decisions.md');
|
|
32
|
+
const decisionsMdContent = storage.readSync(decisionsMdPath);
|
|
33
|
+
if (decisionsMdContent !== undefined) {
|
|
34
|
+
manifest.decisions_md = decisionsMdContent;
|
|
35
|
+
manifest.decisions = decisionsMdContent;
|
|
36
|
+
}
|
|
37
|
+
const routingMdPath = path.join(squadInfo.path, 'routing.md');
|
|
38
|
+
const routingMdContent = storage.readSync(routingMdPath);
|
|
39
|
+
if (routingMdContent !== undefined)
|
|
40
|
+
manifest.routing_md = routingMdContent;
|
|
28
41
|
// Read casting state
|
|
29
42
|
const castingDir = path.join(squadInfo.path, 'casting');
|
|
30
43
|
for (const file of ['registry.json', 'policy.json', 'history.json']) {
|
|
@@ -45,7 +58,6 @@ export async function runExport(dest, outPath) {
|
|
|
45
58
|
if (storage.existsSync(agentsDir)) {
|
|
46
59
|
for (const entry of storage.listSync(agentsDir)) {
|
|
47
60
|
const agentDir = path.join(agentsDir, entry);
|
|
48
|
-
// Check if entry is a directory using StorageProvider
|
|
49
61
|
if (!storage.isDirectorySync(agentDir))
|
|
50
62
|
continue;
|
|
51
63
|
const agent = {};
|
|
@@ -87,16 +99,56 @@ export async function runExport(dest, outPath) {
|
|
|
87
99
|
catch (err) {
|
|
88
100
|
console.error(`Warning: could not read skills: ${err.message}`);
|
|
89
101
|
}
|
|
90
|
-
|
|
102
|
+
return manifest;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Export squad to JSON (local file or GitHub repo)
|
|
106
|
+
*/
|
|
107
|
+
export async function runExport(dest, outPath, repoOptions) {
|
|
108
|
+
const storage = new FSStorageProvider();
|
|
109
|
+
const squadInfo = detectSquadDir(dest);
|
|
110
|
+
const teamMd = path.join(squadInfo.path, 'team.md');
|
|
111
|
+
if (!storage.existsSync(teamMd)) {
|
|
112
|
+
fatal('No squad found — run init first');
|
|
113
|
+
}
|
|
114
|
+
const manifest = buildManifest(dest, storage, squadInfo);
|
|
115
|
+
const bundleJson = JSON.stringify(manifest, null, 2) + '\n';
|
|
116
|
+
// Export to GitHub repo if --repo is specified
|
|
117
|
+
if (repoOptions?.repo) {
|
|
118
|
+
if (!(await ghAvailable())) {
|
|
119
|
+
fatal('GitHub CLI (gh) is required for repo export. Install from https://cli.github.com');
|
|
120
|
+
}
|
|
121
|
+
if (!(await ghAuthenticated())) {
|
|
122
|
+
fatal('GitHub CLI is not authenticated. Run: gh auth login');
|
|
123
|
+
}
|
|
124
|
+
const parsed = parseRepoString(repoOptions.repo);
|
|
125
|
+
const repoSpec = {
|
|
126
|
+
owner: parsed.owner,
|
|
127
|
+
repo: parsed.repo,
|
|
128
|
+
branch: repoOptions.branch,
|
|
129
|
+
};
|
|
130
|
+
try {
|
|
131
|
+
const result = await exportToRepo(bundleJson, repoSpec, {
|
|
132
|
+
branch: repoOptions.branch,
|
|
133
|
+
});
|
|
134
|
+
success(result.message);
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
fatal(`Failed to export to repo: ${err.message}`);
|
|
138
|
+
}
|
|
139
|
+
warn('Review agent histories, decisions, and team content before sharing — they may contain project-specific information');
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
// Local file export (existing behavior)
|
|
91
143
|
const finalOutPath = outPath || path.join(dest, 'squad-export.json');
|
|
92
144
|
try {
|
|
93
|
-
storage.writeSync(finalOutPath,
|
|
145
|
+
storage.writeSync(finalOutPath, bundleJson);
|
|
94
146
|
}
|
|
95
147
|
catch (err) {
|
|
96
148
|
fatal(`Failed to write export file: ${err.message}`);
|
|
97
149
|
}
|
|
98
150
|
const displayPath = path.relative(dest, finalOutPath) || path.basename(finalOutPath);
|
|
99
151
|
success(`Exported squad to ${displayPath}`);
|
|
100
|
-
warn('Review agent histories before sharing — they may contain project-specific information');
|
|
152
|
+
warn('Review agent histories, decisions, and team content before sharing — they may contain project-specific information');
|
|
101
153
|
}
|
|
102
154
|
//# sourceMappingURL=export.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE1F,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAQ,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAqBjE;;GAEG;AACH,SAAS,aAAa,CAAC,IAAY,EAAE,OAA0B,EAAE,SAA2B;IAC1F,MAAM,QAAQ,GAAmB;QAC/B,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,aAAa,EAAE,iBAAiB,EAAE;QAClC,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,EAAE;KACX,CAAC;IAEF,iEAAiE;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,QAAQ,CAAC,OAAO,GAAG,aAAa,CAAC;QACjC,QAAQ,CAAC,IAAI,GAAG,aAAa,CAAC;IAChC,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAClE,MAAM,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC7D,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;QACrC,QAAQ,CAAC,YAAY,GAAG,kBAAkB,CAAC;QAC3C,QAAQ,CAAC,SAAS,GAAG,kBAAkB,CAAC;IAC1C,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACzD,IAAI,gBAAgB,KAAK,SAAS;QAAE,QAAQ,CAAC,UAAU,GAAG,gBAAgB,CAAC;IAE3E,qBAAqB;IACrB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxD,KAAK,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,aAAa,EAAE,cAAc,CAAC,EAAE,CAAC;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,mCAAmC,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAED,cAAc;IACd,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC7C,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC;oBAAE,SAAS;gBACjD,MAAM,KAAK,GAA2C,EAAE,CAAC;gBACzD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;gBACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;gBACtD,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBACrD,IAAI,cAAc,KAAK,SAAS;oBAAE,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;gBACjE,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBACrD,IAAI,cAAc,KAAK,SAAS;oBAAE,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;gBACjE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,mCAAoC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,cAAc;IACd,MAAM,YAAY,GAAG;QACnB,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAiB,EAAE;QACzE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAiB,EAAE;QACvE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAe,EAAE;KACxE,CAAC;IACF,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,IAAI,YAAY,EAAE,CAAC;YACjB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,KAAK,QAAQ;oBAChD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC;oBAChD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACvC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACjD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;oBAC/B,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,mCAAoC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,OAAgB,EAAE,WAA+B;IAC7F,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAEpD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAE5D,+CAA+C;IAC/C,IAAI,WAAW,EAAE,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,MAAM,WAAW,EAAE,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,kFAAkF,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,qDAAqD,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAa;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,WAAW,CAAC,MAAM;SAC3B,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE;gBACtD,MAAM,EAAE,WAAW,CAAC,MAAM;aAC3B,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,6BAA8B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,oHAAoH,CAAC,CAAC;QAC3H,OAAO;IACT,CAAC;IAED,wCAAwC;IACxC,MAAM,YAAY,GAAG,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAErE,IAAI,CAAC;QACH,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,gCAAiC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrF,OAAO,CAAC,qBAAqB,WAAW,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,oHAAoH,CAAC,CAAC;AAC7H,CAAC"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Import command — port from beta CLI
|
|
3
|
-
* Imports squad from squad-export.json
|
|
3
|
+
* Imports squad from squad-export.json (local file or GitHub repo)
|
|
4
4
|
*/
|
|
5
|
+
export interface ImportRepoOptions {
|
|
6
|
+
repo: string;
|
|
7
|
+
branch?: string;
|
|
8
|
+
}
|
|
5
9
|
/**
|
|
6
|
-
* Import squad from JSON
|
|
10
|
+
* Import squad from JSON (local file or GitHub repo)
|
|
7
11
|
*/
|
|
8
|
-
export declare function runImport(dest: string, importPath: string, force: boolean): Promise<void>;
|
|
12
|
+
export declare function runImport(dest: string, importPath: string, force: boolean, repoOptions?: ImportRepoOptions): Promise<void>;
|
|
9
13
|
//# sourceMappingURL=import.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/import.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/import.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAuJD;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFhI"}
|
|
@@ -1,46 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Import command — port from beta CLI
|
|
3
|
-
* Imports squad from squad-export.json
|
|
3
|
+
* Imports squad from squad-export.json (local file or GitHub repo)
|
|
4
4
|
*/
|
|
5
5
|
import path from 'node:path';
|
|
6
|
-
import { FSStorageProvider } from '@bradygaster/squad-sdk';
|
|
6
|
+
import { FSStorageProvider, importFromRepo, parseRepoString } from '@bradygaster/squad-sdk';
|
|
7
7
|
import { detectSquadDir } from '../core/detect-squad-dir.js';
|
|
8
8
|
import { success, warn, info } from '../core/output.js';
|
|
9
9
|
import { fatal } from '../core/errors.js';
|
|
10
10
|
import { splitHistory } from '../core/history-split.js';
|
|
11
|
+
import { ghAvailable, ghAuthenticated } from '../core/gh-cli.js';
|
|
12
|
+
/** Validate that a name is a safe slug (no path traversal or special characters). */
|
|
13
|
+
function isSafeSlug(name) {
|
|
14
|
+
if (!name)
|
|
15
|
+
return false;
|
|
16
|
+
if (name.includes('..') || name.includes('/') || name.includes('\\'))
|
|
17
|
+
return false;
|
|
18
|
+
if (name.startsWith('.') || name.startsWith('-'))
|
|
19
|
+
return false;
|
|
20
|
+
// Only allow alphanumeric, hyphens, underscores, and dots (not leading)
|
|
21
|
+
return /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(name);
|
|
22
|
+
}
|
|
23
|
+
/** Validate that a resolved path is under the expected parent directory. */
|
|
24
|
+
function assertPathUnder(resolvedPath, parentDir) {
|
|
25
|
+
const normalizedChild = path.resolve(resolvedPath);
|
|
26
|
+
const normalizedParent = path.resolve(parentDir);
|
|
27
|
+
if (!normalizedChild.startsWith(normalizedParent + path.sep) && normalizedChild !== normalizedParent) {
|
|
28
|
+
throw new Error(`Path traversal detected: "${resolvedPath}" escapes "${parentDir}"`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
11
31
|
/**
|
|
12
|
-
*
|
|
32
|
+
* Apply an import manifest to a target directory.
|
|
13
33
|
*/
|
|
14
|
-
|
|
15
|
-
const storage = new FSStorageProvider();
|
|
16
|
-
const resolvedPath = path.resolve(importPath);
|
|
17
|
-
if (!storage.existsSync(resolvedPath)) {
|
|
18
|
-
fatal(`Import file not found: ${importPath}`);
|
|
19
|
-
}
|
|
20
|
-
let manifest;
|
|
21
|
-
try {
|
|
22
|
-
const raw = storage.readSync(resolvedPath);
|
|
23
|
-
if (raw === undefined) {
|
|
24
|
-
fatal(`Import file not found: ${importPath}`);
|
|
25
|
-
}
|
|
26
|
-
manifest = JSON.parse(raw);
|
|
27
|
-
}
|
|
28
|
-
catch (err) {
|
|
29
|
-
fatal(`Invalid JSON in import file: ${err.message}`);
|
|
30
|
-
}
|
|
31
|
-
// Validate manifest
|
|
32
|
-
if (manifest.version !== '1.0') {
|
|
33
|
-
fatal(`Unsupported export version: ${manifest.version || 'missing'} (expected 1.0)`);
|
|
34
|
-
}
|
|
35
|
-
if (!manifest.agents || typeof manifest.agents !== 'object') {
|
|
36
|
-
fatal('Invalid export file: missing or invalid "agents" field');
|
|
37
|
-
}
|
|
38
|
-
if (!manifest.casting || typeof manifest.casting !== 'object') {
|
|
39
|
-
fatal('Invalid export file: missing or invalid "casting" field');
|
|
40
|
-
}
|
|
41
|
-
if (!Array.isArray(manifest.skills)) {
|
|
42
|
-
fatal('Invalid export file: missing or invalid "skills" field');
|
|
43
|
-
}
|
|
34
|
+
function applyManifest(manifest, dest, sourceLabel, force, storage) {
|
|
44
35
|
const squadInfo = detectSquadDir(dest);
|
|
45
36
|
const squadDir = squadInfo.path;
|
|
46
37
|
// Conflict detection
|
|
@@ -60,39 +51,68 @@ export async function runImport(dest, importPath, force) {
|
|
|
60
51
|
storage.mkdirSync(path.join(squadDir, 'orchestration-log'), { recursive: true });
|
|
61
52
|
storage.mkdirSync(path.join(squadDir, 'log'), { recursive: true });
|
|
62
53
|
storage.mkdirSync(path.join(dest, '.copilot', 'skills'), { recursive: true });
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
54
|
+
if (manifest.decisions_md !== undefined && typeof manifest.decisions_md !== 'string') {
|
|
55
|
+
fatal('Invalid export file: "decisions_md" field must be a string');
|
|
56
|
+
}
|
|
57
|
+
if (manifest.team_md !== undefined && typeof manifest.team_md !== 'string') {
|
|
58
|
+
fatal('Invalid export file: "team_md" field must be a string');
|
|
59
|
+
}
|
|
60
|
+
if (manifest.routing_md !== undefined && typeof manifest.routing_md !== 'string') {
|
|
61
|
+
fatal('Invalid export file: "routing_md" field must be a string');
|
|
62
|
+
}
|
|
63
|
+
if (manifest.decisions !== undefined && typeof manifest.decisions !== 'string') {
|
|
64
|
+
fatal('Invalid export file: "decisions" field must be a string');
|
|
65
|
+
}
|
|
66
|
+
if (manifest.team !== undefined && typeof manifest.team !== 'string') {
|
|
67
|
+
fatal('Invalid export file: "team" field must be a string');
|
|
68
|
+
}
|
|
69
|
+
const decisionsContent = manifest.decisions_md ?? manifest.decisions ?? '';
|
|
70
|
+
const teamContent = manifest.team_md ?? manifest.team ?? '';
|
|
71
|
+
// Write top-level squad files
|
|
72
|
+
storage.writeSync(path.join(squadDir, 'decisions.md'), decisionsContent);
|
|
73
|
+
storage.writeSync(path.join(squadDir, 'team.md'), teamContent);
|
|
74
|
+
if (manifest.routing_md !== undefined) {
|
|
75
|
+
storage.writeSync(path.join(squadDir, 'routing.md'), manifest.routing_md);
|
|
76
|
+
}
|
|
66
77
|
// Write casting state
|
|
67
78
|
for (const [key, value] of Object.entries(manifest.casting)) {
|
|
68
79
|
storage.writeSync(path.join(squadDir, 'casting', `${key}.json`), JSON.stringify(value, null, 2) + '\n');
|
|
69
80
|
}
|
|
70
|
-
// Determine source project name
|
|
71
|
-
const sourceProject = path.basename(resolvedPath, '.json');
|
|
81
|
+
// Determine source project name
|
|
72
82
|
const importDate = new Date().toISOString();
|
|
73
83
|
// Write agents
|
|
74
84
|
const agentNames = Object.keys(manifest.agents);
|
|
75
85
|
for (const name of agentNames) {
|
|
86
|
+
if (!isSafeSlug(name)) {
|
|
87
|
+
fatal(`Invalid agent name "${name}": must be a safe slug (alphanumeric, hyphens, underscores)`);
|
|
88
|
+
}
|
|
76
89
|
const agent = manifest.agents[name];
|
|
77
90
|
const agentDir = path.join(squadDir, 'agents', name);
|
|
91
|
+
assertPathUnder(agentDir, path.join(squadDir, 'agents'));
|
|
78
92
|
if (agent.charter) {
|
|
79
93
|
storage.writeSync(path.join(agentDir, 'charter.md'), agent.charter);
|
|
80
94
|
}
|
|
81
95
|
// History split: separate portable knowledge from project learnings
|
|
82
96
|
let historyContent = '';
|
|
83
97
|
if (agent.history) {
|
|
84
|
-
historyContent = splitHistory(agent.history,
|
|
98
|
+
historyContent = splitHistory(agent.history, sourceLabel);
|
|
85
99
|
}
|
|
86
|
-
historyContent = `📌 Imported from ${
|
|
100
|
+
historyContent = `📌 Imported from ${sourceLabel} on ${importDate}. Portable knowledge carried over; project learnings from previous project preserved below.\n\n` + historyContent;
|
|
87
101
|
storage.writeSync(path.join(agentDir, 'history.md'), historyContent);
|
|
88
102
|
}
|
|
89
103
|
// Write skills
|
|
90
104
|
for (const skillContent of manifest.skills) {
|
|
91
105
|
const nameMatch = skillContent.match(/^name:\s*["']?(.+?)["']?\s*$/m);
|
|
92
|
-
|
|
106
|
+
let skillName = nameMatch
|
|
93
107
|
? nameMatch[1].trim().toLowerCase().replace(/\s+/g, '-')
|
|
94
108
|
: `skill-${manifest.skills.indexOf(skillContent)}`;
|
|
109
|
+
// Sanitize skill name to prevent path traversal
|
|
110
|
+
skillName = skillName.replace(/[^a-z0-9._-]/g, '-').replace(/^[.-]+/, '');
|
|
111
|
+
if (!skillName || !isSafeSlug(skillName)) {
|
|
112
|
+
skillName = `skill-${manifest.skills.indexOf(skillContent)}`;
|
|
113
|
+
}
|
|
95
114
|
const skillDir = path.join(dest, '.copilot', 'skills', skillName);
|
|
115
|
+
assertPathUnder(skillDir, path.join(dest, '.copilot', 'skills'));
|
|
96
116
|
storage.writeSync(path.join(skillDir, 'SKILL.md'), skillContent);
|
|
97
117
|
}
|
|
98
118
|
// Determine universe for messaging
|
|
@@ -104,7 +124,7 @@ export async function runImport(dest, importPath, force) {
|
|
|
104
124
|
}
|
|
105
125
|
}
|
|
106
126
|
// Output
|
|
107
|
-
success(`Imported squad from ${
|
|
127
|
+
success(`Imported squad from ${sourceLabel}`);
|
|
108
128
|
info(` ${agentNames.length} agents: ${agentNames.join(', ')}`);
|
|
109
129
|
info(` ${manifest.skills.length} skills imported`);
|
|
110
130
|
info(` Casting: ${universe} universe preserved`);
|
|
@@ -116,4 +136,82 @@ export async function runImport(dest, importPath, force) {
|
|
|
116
136
|
info(' 2. Tell the team about this project — they\'ll adapt');
|
|
117
137
|
console.log();
|
|
118
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* Import squad from JSON (local file or GitHub repo)
|
|
141
|
+
*/
|
|
142
|
+
export async function runImport(dest, importPath, force, repoOptions) {
|
|
143
|
+
const storage = new FSStorageProvider();
|
|
144
|
+
// Import from GitHub repo if --repo is specified
|
|
145
|
+
if (repoOptions?.repo) {
|
|
146
|
+
if (!(await ghAvailable())) {
|
|
147
|
+
fatal('GitHub CLI (gh) is required for repo import. Install from https://cli.github.com');
|
|
148
|
+
}
|
|
149
|
+
if (!(await ghAuthenticated())) {
|
|
150
|
+
fatal('GitHub CLI is not authenticated. Run: gh auth login');
|
|
151
|
+
}
|
|
152
|
+
const parsed = parseRepoString(repoOptions.repo);
|
|
153
|
+
const repoSpec = {
|
|
154
|
+
owner: parsed.owner,
|
|
155
|
+
repo: parsed.repo,
|
|
156
|
+
branch: repoOptions.branch,
|
|
157
|
+
};
|
|
158
|
+
let manifest;
|
|
159
|
+
try {
|
|
160
|
+
const result = await importFromRepo(repoSpec, {
|
|
161
|
+
branch: repoOptions.branch,
|
|
162
|
+
});
|
|
163
|
+
manifest = JSON.parse(result.content);
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
fatal(`Failed to import from repo: ${err.message}`);
|
|
167
|
+
}
|
|
168
|
+
// Validate manifest
|
|
169
|
+
if (manifest.version !== '1.0') {
|
|
170
|
+
fatal(`Unsupported export version: ${manifest.version || 'missing'} (expected 1.0)`);
|
|
171
|
+
}
|
|
172
|
+
if (!manifest.agents || typeof manifest.agents !== 'object') {
|
|
173
|
+
fatal('Invalid export file: missing or invalid "agents" field');
|
|
174
|
+
}
|
|
175
|
+
if (!manifest.casting || typeof manifest.casting !== 'object') {
|
|
176
|
+
fatal('Invalid export file: missing or invalid "casting" field');
|
|
177
|
+
}
|
|
178
|
+
if (!Array.isArray(manifest.skills)) {
|
|
179
|
+
fatal('Invalid export file: missing or invalid "skills" field');
|
|
180
|
+
}
|
|
181
|
+
const sourceLabel = `${repoSpec.owner}/${repoSpec.repo}`;
|
|
182
|
+
applyManifest(manifest, dest, sourceLabel, force, storage);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
// Local file import (existing behavior)
|
|
186
|
+
const resolvedPath = path.resolve(importPath);
|
|
187
|
+
if (!storage.existsSync(resolvedPath)) {
|
|
188
|
+
fatal(`Import file not found: ${importPath}`);
|
|
189
|
+
}
|
|
190
|
+
let manifest;
|
|
191
|
+
try {
|
|
192
|
+
const raw = storage.readSync(resolvedPath);
|
|
193
|
+
if (raw === undefined) {
|
|
194
|
+
fatal(`Import file not found: ${importPath}`);
|
|
195
|
+
}
|
|
196
|
+
manifest = JSON.parse(raw);
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
fatal(`Invalid JSON in import file: ${err.message}`);
|
|
200
|
+
}
|
|
201
|
+
// Validate manifest
|
|
202
|
+
if (manifest.version !== '1.0') {
|
|
203
|
+
fatal(`Unsupported export version: ${manifest.version || 'missing'} (expected 1.0)`);
|
|
204
|
+
}
|
|
205
|
+
if (!manifest.agents || typeof manifest.agents !== 'object') {
|
|
206
|
+
fatal('Invalid export file: missing or invalid "agents" field');
|
|
207
|
+
}
|
|
208
|
+
if (!manifest.casting || typeof manifest.casting !== 'object') {
|
|
209
|
+
fatal('Invalid export file: missing or invalid "casting" field');
|
|
210
|
+
}
|
|
211
|
+
if (!Array.isArray(manifest.skills)) {
|
|
212
|
+
fatal('Invalid export file: missing or invalid "skills" field');
|
|
213
|
+
}
|
|
214
|
+
const sourceLabel = path.basename(resolvedPath, '.json');
|
|
215
|
+
applyManifest(manifest, dest, sourceLabel, force, storage);
|
|
216
|
+
}
|
|
119
217
|
//# sourceMappingURL=import.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/cli/commands/import.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/cli/commands/import.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-hooks.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/install-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"install-hooks.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/install-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAqIH,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA2DD;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAgDpF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAkCvD"}
|
|
@@ -102,6 +102,39 @@ if [ "\$3" = "1" ] && [ -z "$SQUAD_SYNC_ACTIVE" ]; then
|
|
|
102
102
|
git fetch "$REMOTE" '+refs/notes/squad*:refs/notes/squad*' 2>/dev/null || true
|
|
103
103
|
unset SQUAD_SYNC_ACTIVE
|
|
104
104
|
fi
|
|
105
|
+
`,
|
|
106
|
+
'pre-commit': `#!/bin/sh
|
|
107
|
+
${SQUAD_HOOK_MARKER}
|
|
108
|
+
# WI-1: Guard against accidentally committing two-layer mutable state into the
|
|
109
|
+
# working tree. If the user has staged any .squad/ paths that are owned by the
|
|
110
|
+
# two-layer/orphan backend (decisions.md, agents/*/history.md, casting/, routing/),
|
|
111
|
+
# warn and abort so the state stays on the squad-state orphan branch.
|
|
112
|
+
# Installed by: squad init / squad upgrade --state-backend (two-layer/orphan)
|
|
113
|
+
if [ -z "$SQUAD_SYNC_ACTIVE" ]; then
|
|
114
|
+
STAGED=$(git diff --cached --name-only 2>/dev/null | grep -E '^\\.squad/(decisions\\.md|agents/.+/history\\.md|casting/|routing/)' || true)
|
|
115
|
+
if [ -n "$STAGED" ]; then
|
|
116
|
+
echo "⚠ squad pre-commit: refusing to commit two-layer state into the working tree." >&2
|
|
117
|
+
echo " These paths belong on the 'squad-state' orphan branch, not in your normal commits:" >&2
|
|
118
|
+
echo "$STAGED" | sed 's/^/ /' >&2
|
|
119
|
+
echo " Use 'git restore --staged <path>' to unstage, or set SQUAD_SYNC_ACTIVE=1 to bypass." >&2
|
|
120
|
+
exit 1
|
|
121
|
+
fi
|
|
122
|
+
fi
|
|
123
|
+
`,
|
|
124
|
+
'post-commit': `#!/bin/sh
|
|
125
|
+
${SQUAD_HOOK_MARKER}
|
|
126
|
+
# WI-1: After a working-tree commit, sync any pending two-layer state (decisions,
|
|
127
|
+
# histories, casting) onto the squad-state orphan branch so team-state stays
|
|
128
|
+
# durable and shareable. Best-effort — never blocks the commit.
|
|
129
|
+
# Installed by: squad init / squad upgrade --state-backend (two-layer/orphan)
|
|
130
|
+
if [ -z "$SQUAD_SYNC_ACTIVE" ]; then
|
|
131
|
+
export SQUAD_SYNC_ACTIVE=1
|
|
132
|
+
# If the squad CLI is on PATH, ask it to flush any pending state.
|
|
133
|
+
if command -v squad >/dev/null 2>&1; then
|
|
134
|
+
squad sync --quiet 2>/dev/null || true
|
|
135
|
+
fi
|
|
136
|
+
unset SQUAD_SYNC_ACTIVE
|
|
137
|
+
fi
|
|
105
138
|
`,
|
|
106
139
|
};
|
|
107
140
|
/**
|
|
@@ -232,12 +265,24 @@ export function ensureHooksForBackend(cwd) {
|
|
|
232
265
|
catch {
|
|
233
266
|
return;
|
|
234
267
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
268
|
+
// WI-1: verify ALL squad hooks are present (sync hooks + commit hooks).
|
|
269
|
+
// If any of the required hooks is missing or lacks our marker, reinstall.
|
|
270
|
+
const requiredHooks = ['pre-push', 'post-merge', 'post-rewrite', 'post-checkout', 'pre-commit', 'post-commit'];
|
|
271
|
+
let allInstalled = true;
|
|
272
|
+
for (const hookName of requiredHooks) {
|
|
273
|
+
const hookPath = path.join(hooksDir, hookName);
|
|
274
|
+
if (!fs.existsSync(hookPath)) {
|
|
275
|
+
allInstalled = false;
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
const content = fs.readFileSync(hookPath, 'utf-8');
|
|
279
|
+
if (!content.includes(SQUAD_HOOK_MARKER)) {
|
|
280
|
+
allInstalled = false;
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
240
283
|
}
|
|
284
|
+
if (allInstalled)
|
|
285
|
+
return;
|
|
241
286
|
// Hooks missing — install them
|
|
242
287
|
installGitHooks(cwd, { force: false });
|
|
243
288
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-hooks.js","sourceRoot":"","sources":["../../../src/cli/commands/install-hooks.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"install-hooks.js","sourceRoot":"","sources":["../../../src/cli/commands/install-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CA4DtE"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* @module cli/commands/link
|
|
10
10
|
*/
|
|
11
11
|
import path from 'node:path';
|
|
12
|
-
import { FSStorageProvider } from '@bradygaster/squad-sdk';
|
|
12
|
+
import { FSStorageProvider, clearResolveSquadCache } from '@bradygaster/squad-sdk';
|
|
13
13
|
import { fatal } from '../core/errors.js';
|
|
14
14
|
const storage = new FSStorageProvider();
|
|
15
15
|
/**
|
|
@@ -58,6 +58,12 @@ export function runLink(projectDir, teamRepoPath) {
|
|
|
58
58
|
+ ignoreEntry + '\n';
|
|
59
59
|
storage.appendSync(gitignorePath, block);
|
|
60
60
|
}
|
|
61
|
+
// Link just (re)created `.squad/` and wrote config.json. Any subsequent
|
|
62
|
+
// code in this process that calls resolveSquad()/resolveSquadPaths()
|
|
63
|
+
// would otherwise be served the cached "not found" result from before
|
|
64
|
+
// link ran. Drop the cache so the new directory is observed immediately
|
|
65
|
+
// instead of after the 5-second TTL.
|
|
66
|
+
clearResolveSquadCache();
|
|
61
67
|
console.log(`✅ Linked to team root: ${relativePath}`);
|
|
62
68
|
}
|
|
63
69
|
//# sourceMappingURL=link.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../../src/cli/commands/link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../../src/cli/commands/link.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/loop.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/loop.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsBH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACjE;AAID;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,WAAW,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAoD/F;AAID,2DAA2D;AAC3D,wBAAgB,gBAAgB,IAAI,MAAM,CAKzC;AAkID;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAkM9E"}
|