@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.
Files changed (188) hide show
  1. package/CHANGELOG.md +555 -0
  2. package/README.md +5 -5
  3. package/dist/cli/commands/build.js +3 -3
  4. package/dist/cli/commands/build.js.map +1 -1
  5. package/dist/cli/commands/copilot-bridge.d.ts.map +1 -1
  6. package/dist/cli/commands/copilot-bridge.js +5 -1
  7. package/dist/cli/commands/copilot-bridge.js.map +1 -1
  8. package/dist/cli/commands/cross-squad.d.ts +15 -2
  9. package/dist/cli/commands/cross-squad.d.ts.map +1 -1
  10. package/dist/cli/commands/cross-squad.js +78 -4
  11. package/dist/cli/commands/cross-squad.js.map +1 -1
  12. package/dist/cli/commands/doctor.d.ts +6 -0
  13. package/dist/cli/commands/doctor.d.ts.map +1 -1
  14. package/dist/cli/commands/doctor.js +120 -5
  15. package/dist/cli/commands/doctor.js.map +1 -1
  16. package/dist/cli/commands/export.d.ts +7 -3
  17. package/dist/cli/commands/export.d.ts.map +1 -1
  18. package/dist/cli/commands/export.js +68 -16
  19. package/dist/cli/commands/export.js.map +1 -1
  20. package/dist/cli/commands/import.d.ts +7 -3
  21. package/dist/cli/commands/import.d.ts.map +1 -1
  22. package/dist/cli/commands/import.js +140 -42
  23. package/dist/cli/commands/import.js.map +1 -1
  24. package/dist/cli/commands/install-hooks.d.ts.map +1 -1
  25. package/dist/cli/commands/install-hooks.js +50 -5
  26. package/dist/cli/commands/install-hooks.js.map +1 -1
  27. package/dist/cli/commands/link.d.ts.map +1 -1
  28. package/dist/cli/commands/link.js +7 -1
  29. package/dist/cli/commands/link.js.map +1 -1
  30. package/dist/cli/commands/loop.d.ts.map +1 -1
  31. package/dist/cli/commands/loop.js +7 -5
  32. package/dist/cli/commands/loop.js.map +1 -1
  33. package/dist/cli/commands/memory.d.ts +2 -0
  34. package/dist/cli/commands/memory.d.ts.map +1 -0
  35. package/dist/cli/commands/memory.js +304 -0
  36. package/dist/cli/commands/memory.js.map +1 -0
  37. package/dist/cli/commands/migrate-backend.d.ts +36 -5
  38. package/dist/cli/commands/migrate-backend.d.ts.map +1 -1
  39. package/dist/cli/commands/migrate-backend.js +250 -40
  40. package/dist/cli/commands/migrate-backend.js.map +1 -1
  41. package/dist/cli/commands/notes.d.ts +27 -0
  42. package/dist/cli/commands/notes.d.ts.map +1 -0
  43. package/dist/cli/commands/notes.js +222 -0
  44. package/dist/cli/commands/notes.js.map +1 -0
  45. package/dist/cli/commands/plugin.d.ts.map +1 -1
  46. package/dist/cli/commands/plugin.js +423 -8
  47. package/dist/cli/commands/plugin.js.map +1 -1
  48. package/dist/cli/commands/skill.d.ts +31 -0
  49. package/dist/cli/commands/skill.d.ts.map +1 -0
  50. package/dist/cli/commands/skill.js +498 -0
  51. package/dist/cli/commands/skill.js.map +1 -0
  52. package/dist/cli/commands/start.d.ts.map +1 -1
  53. package/dist/cli/commands/start.js +9 -1
  54. package/dist/cli/commands/start.js.map +1 -1
  55. package/dist/cli/commands/state-mcp.d.ts +25 -0
  56. package/dist/cli/commands/state-mcp.d.ts.map +1 -0
  57. package/dist/cli/commands/state-mcp.js +174 -0
  58. package/dist/cli/commands/state-mcp.js.map +1 -0
  59. package/dist/cli/commands/watch/agent-spawn.d.ts +62 -0
  60. package/dist/cli/commands/watch/agent-spawn.d.ts.map +1 -0
  61. package/dist/cli/commands/watch/agent-spawn.js +127 -0
  62. package/dist/cli/commands/watch/agent-spawn.js.map +1 -0
  63. package/dist/cli/commands/watch/capabilities/board.d.ts.map +1 -1
  64. package/dist/cli/commands/watch/capabilities/board.js +2 -1
  65. package/dist/cli/commands/watch/capabilities/board.js.map +1 -1
  66. package/dist/cli/commands/watch/capabilities/decision-hygiene.d.ts.map +1 -1
  67. package/dist/cli/commands/watch/capabilities/decision-hygiene.js +3 -2
  68. package/dist/cli/commands/watch/capabilities/decision-hygiene.js.map +1 -1
  69. package/dist/cli/commands/watch/capabilities/execute.d.ts.map +1 -1
  70. package/dist/cli/commands/watch/capabilities/execute.js +14 -2
  71. package/dist/cli/commands/watch/capabilities/execute.js.map +1 -1
  72. package/dist/cli/commands/watch/capabilities/index.d.ts.map +1 -1
  73. package/dist/cli/commands/watch/capabilities/index.js +2 -0
  74. package/dist/cli/commands/watch/capabilities/index.js.map +1 -1
  75. package/dist/cli/commands/watch/capabilities/monitor-email.d.ts +1 -1
  76. package/dist/cli/commands/watch/capabilities/monitor-email.d.ts.map +1 -1
  77. package/dist/cli/commands/watch/capabilities/monitor-email.js +21 -4
  78. package/dist/cli/commands/watch/capabilities/monitor-email.js.map +1 -1
  79. package/dist/cli/commands/watch/capabilities/monitor-teams.d.ts +1 -1
  80. package/dist/cli/commands/watch/capabilities/monitor-teams.d.ts.map +1 -1
  81. package/dist/cli/commands/watch/capabilities/monitor-teams.js +21 -5
  82. package/dist/cli/commands/watch/capabilities/monitor-teams.js.map +1 -1
  83. package/dist/cli/commands/watch/capabilities/notes-promote.d.ts +11 -0
  84. package/dist/cli/commands/watch/capabilities/notes-promote.d.ts.map +1 -0
  85. package/dist/cli/commands/watch/capabilities/notes-promote.js +124 -0
  86. package/dist/cli/commands/watch/capabilities/notes-promote.js.map +1 -0
  87. package/dist/cli/commands/watch/capabilities/retro.d.ts.map +1 -1
  88. package/dist/cli/commands/watch/capabilities/retro.js +3 -2
  89. package/dist/cli/commands/watch/capabilities/retro.js.map +1 -1
  90. package/dist/cli/commands/watch/capabilities/wave-dispatch.d.ts.map +1 -1
  91. package/dist/cli/commands/watch/capabilities/wave-dispatch.js +2 -1
  92. package/dist/cli/commands/watch/capabilities/wave-dispatch.js.map +1 -1
  93. package/dist/cli/commands/watch/index.d.ts.map +1 -1
  94. package/dist/cli/commands/watch/index.js +16 -12
  95. package/dist/cli/commands/watch/index.js.map +1 -1
  96. package/dist/cli/core/cast.d.ts.map +1 -1
  97. package/dist/cli/core/cast.js +216 -1
  98. package/dist/cli/core/cast.js.map +1 -1
  99. package/dist/cli/core/command-help.d.ts +44 -0
  100. package/dist/cli/core/command-help.d.ts.map +1 -0
  101. package/dist/cli/core/command-help.js +401 -0
  102. package/dist/cli/core/command-help.js.map +1 -0
  103. package/dist/cli/core/copilot-invocation.d.ts +57 -0
  104. package/dist/cli/core/copilot-invocation.d.ts.map +1 -0
  105. package/dist/cli/core/copilot-invocation.js +84 -0
  106. package/dist/cli/core/copilot-invocation.js.map +1 -0
  107. package/dist/cli/core/effective-squad-dir.d.ts +33 -0
  108. package/dist/cli/core/effective-squad-dir.d.ts.map +1 -0
  109. package/dist/cli/core/effective-squad-dir.js +37 -0
  110. package/dist/cli/core/effective-squad-dir.js.map +1 -0
  111. package/dist/cli/core/init.d.ts +2 -0
  112. package/dist/cli/core/init.d.ts.map +1 -1
  113. package/dist/cli/core/init.js +130 -1
  114. package/dist/cli/core/init.js.map +1 -1
  115. package/dist/cli/core/mcp-root.d.ts +73 -0
  116. package/dist/cli/core/mcp-root.d.ts.map +1 -0
  117. package/dist/cli/core/mcp-root.js +195 -0
  118. package/dist/cli/core/mcp-root.js.map +1 -0
  119. package/dist/cli/core/mcp-spec.d.ts +48 -0
  120. package/dist/cli/core/mcp-spec.d.ts.map +1 -0
  121. package/dist/cli/core/mcp-spec.js +62 -0
  122. package/dist/cli/core/mcp-spec.js.map +1 -0
  123. package/dist/cli/core/npm-registry.d.ts +25 -0
  124. package/dist/cli/core/npm-registry.d.ts.map +1 -0
  125. package/dist/cli/core/npm-registry.js +65 -0
  126. package/dist/cli/core/npm-registry.js.map +1 -0
  127. package/dist/cli/core/templates.d.ts.map +1 -1
  128. package/dist/cli/core/templates.js +102 -24
  129. package/dist/cli/core/templates.js.map +1 -1
  130. package/dist/cli/core/upgrade.d.ts +29 -0
  131. package/dist/cli/core/upgrade.d.ts.map +1 -1
  132. package/dist/cli/core/upgrade.js +413 -15
  133. package/dist/cli/core/upgrade.js.map +1 -1
  134. package/dist/cli/index.d.ts +1 -0
  135. package/dist/cli/index.d.ts.map +1 -1
  136. package/dist/cli/index.js +1 -0
  137. package/dist/cli/index.js.map +1 -1
  138. package/dist/cli/shell/components/App.js +1 -1
  139. package/dist/cli/shell/components/App.js.map +1 -1
  140. package/dist/cli/shell/components/MessageStream.js +2 -2
  141. package/dist/cli/shell/components/MessageStream.js.map +1 -1
  142. package/dist/cli/shell/coordinator.d.ts.map +1 -1
  143. package/dist/cli/shell/coordinator.js +11 -5
  144. package/dist/cli/shell/coordinator.js.map +1 -1
  145. package/dist/cli/shell/index.d.ts.map +1 -1
  146. package/dist/cli/shell/index.js +14 -7
  147. package/dist/cli/shell/index.js.map +1 -1
  148. package/dist/cli/shell/lifecycle.d.ts.map +1 -1
  149. package/dist/cli/shell/lifecycle.js +12 -7
  150. package/dist/cli/shell/lifecycle.js.map +1 -1
  151. package/dist/cli/shell/session-store.d.ts +4 -4
  152. package/dist/cli/shell/session-store.d.ts.map +1 -1
  153. package/dist/cli/shell/session-store.js +11 -11
  154. package/dist/cli/shell/session-store.js.map +1 -1
  155. package/dist/cli-entry.js +171 -50
  156. package/dist/cli-entry.js.map +1 -1
  157. package/package.json +9 -4
  158. package/scripts/patch-esm-imports.mjs +3 -1
  159. package/templates/after-agent-reference.md +64 -0
  160. package/templates/ceremony-reference.md +82 -0
  161. package/templates/client-compatibility-reference.md +46 -0
  162. package/templates/copilot-agent.md +96 -0
  163. package/templates/copilot-instructions.md +14 -0
  164. package/templates/fact-checker-policy.md +104 -0
  165. package/templates/model-selection-reference.md +101 -0
  166. package/templates/prd-intake.md +105 -0
  167. package/templates/rai-charter.md +110 -0
  168. package/templates/rai-policy.md +103 -0
  169. package/templates/ralph-reference.md +141 -0
  170. package/templates/routing.md +1 -0
  171. package/templates/scribe-charter.md +18 -151
  172. package/templates/session-init-reference.md +199 -0
  173. package/templates/skills/cross-squad/SKILL.md +66 -6
  174. package/templates/skills/cross-squad-communication/SKILL.md +399 -0
  175. package/templates/skills/e2e-template-testing/SKILL.md +557 -0
  176. package/templates/skills/fact-checking/SKILL.md +61 -0
  177. package/templates/skills/release-process/SKILL.md +2 -2
  178. package/templates/skills/squad/SKILL.md +299 -0
  179. package/templates/skills/squad-help/SKILL.md +97 -0
  180. package/templates/skills/squad-version-check/SKILL.md +169 -0
  181. package/templates/skills/tiered-memory/SKILL.md +31 -44
  182. package/templates/spawn-reference.md +131 -0
  183. package/templates/squad.agent.md.template +306 -618
  184. package/templates/workflow-wiring-appendix-a-code-reviewer.md +131 -0
  185. package/templates/workflow-wiring-appendix-b-documenter.md +140 -0
  186. package/templates/workflow-wiring-guide.md +276 -0
  187. package/templates/workflows/squad-heartbeat.yml +167 -167
  188. 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
- * Export squad to JSON
13
+ * Build the export manifest from a local squad directory.
12
14
  */
13
- export async function runExport(dest, outPath) {
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: '0.6.0',
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
- // Determine output path
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, JSON.stringify(manifest, null, 2) + '\n');
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":"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"}
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"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"}
@@ -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;AAkBH;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAyH/F"}
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
- * Import squad from JSON
32
+ * Apply an import manifest to a target directory.
13
33
  */
14
- export async function runImport(dest, importPath, force) {
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
- // Write empty project-specific files
64
- storage.writeSync(path.join(squadDir, 'decisions.md'), '');
65
- storage.writeSync(path.join(squadDir, 'team.md'), '');
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 from filename
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, sourceProject);
98
+ historyContent = splitHistory(agent.history, sourceLabel);
85
99
  }
86
- historyContent = `📌 Imported from ${sourceProject} on ${importDate}. Portable knowledge carried over; project learnings from previous project preserved below.\n\n` + historyContent;
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
- const skillName = nameMatch
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 ${path.basename(resolvedPath)}`);
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":"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"}
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;AAoGH,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,CA4BvD"}
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
- const prePushPath = path.join(hooksDir, 'pre-push');
236
- if (fs.existsSync(prePushPath)) {
237
- const content = fs.readFileSync(prePushPath, 'utf-8');
238
- if (content.includes(SQUAD_HOOK_MARKER))
239
- return; // Already installed
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,CAqDtE"}
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;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAExC;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,UAAkB,EAAE,YAAoB;IAC9D,iDAAiD;IACjD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAE5D,6BAA6B;IAC7B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,+BAA+B,YAAY,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3C,KAAK,CAAC,mCAAmC,YAAY,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,gEAAgE;IAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,gDAAgD,YAAY,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,gCAAgC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACjD,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjD,uDAAuD;IACvD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,YAAY;QACtB,UAAU,EAAE,IAAI;KACjB,CAAC;IAEF,OAAO,CAAC,SAAS,CACf,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EAClC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CACvC,CAAC;IAEF,gFAAgF;IAChF,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,oBAAoB,CAAC;IACzC,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACtC,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;cACxE,gEAAgE;cAChE,WAAW,GAAG,IAAI,CAAC;QACvB,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAC;AACxD,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;AAqBH,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,CAiM9E"}
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"}