@bradygaster/squad-cli 0.8.4 → 0.8.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/cli/commands/aspire.d.ts.map +1 -1
- package/dist/cli/commands/aspire.js +7 -8
- package/dist/cli/commands/aspire.js.map +1 -1
- package/dist/cli/commands/copilot-bridge.d.ts +42 -0
- package/dist/cli/commands/copilot-bridge.d.ts.map +1 -0
- package/dist/cli/commands/copilot-bridge.js +191 -0
- package/dist/cli/commands/copilot-bridge.js.map +1 -0
- package/dist/cli/commands/import.js.map +1 -1
- package/dist/cli/commands/rc-tunnel.d.ts +30 -0
- package/dist/cli/commands/rc-tunnel.d.ts.map +1 -0
- package/dist/cli/commands/rc-tunnel.js +107 -0
- package/dist/cli/commands/rc-tunnel.js.map +1 -0
- package/dist/cli/commands/rc.d.ts +13 -0
- package/dist/cli/commands/rc.d.ts.map +1 -0
- package/dist/cli/commands/rc.js +270 -0
- package/dist/cli/commands/rc.js.map +1 -0
- package/dist/cli/commands/start.d.ts +18 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +219 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/upstream.js.map +1 -1
- package/dist/cli/commands/watch.d.ts +10 -0
- package/dist/cli/commands/watch.d.ts.map +1 -1
- package/dist/cli/commands/watch.js +181 -65
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/cli/core/cast.d.ts +40 -0
- package/dist/cli/core/cast.d.ts.map +1 -0
- package/dist/cli/core/cast.js +442 -0
- package/dist/cli/core/cast.js.map +1 -0
- package/dist/cli/core/gh-cli.d.ts +25 -0
- package/dist/cli/core/gh-cli.d.ts.map +1 -1
- package/dist/cli/core/gh-cli.js +15 -1
- package/dist/cli/core/gh-cli.js.map +1 -1
- package/dist/cli/core/init.d.ts +9 -1
- package/dist/cli/core/init.d.ts.map +1 -1
- package/dist/cli/core/init.js +108 -13
- package/dist/cli/core/init.js.map +1 -1
- package/dist/cli/core/migrations.js.map +1 -1
- package/dist/cli/core/nap.d.ts +37 -0
- package/dist/cli/core/nap.d.ts.map +1 -0
- package/dist/cli/core/nap.js +528 -0
- package/dist/cli/core/nap.js.map +1 -0
- package/dist/cli/core/output.d.ts +5 -0
- package/dist/cli/core/output.d.ts.map +1 -1
- package/dist/cli/core/output.js +7 -0
- package/dist/cli/core/output.js.map +1 -1
- package/dist/cli/core/upgrade.d.ts +0 -1
- package/dist/cli/core/upgrade.d.ts.map +1 -1
- package/dist/cli/core/upgrade.js.map +1 -1
- package/dist/cli/core/version.js.map +1 -1
- package/dist/cli/shell/agent-status.d.ts +11 -0
- package/dist/cli/shell/agent-status.d.ts.map +1 -0
- package/dist/cli/shell/agent-status.js +26 -0
- package/dist/cli/shell/agent-status.js.map +1 -0
- package/dist/cli/shell/commands.d.ts +10 -0
- package/dist/cli/shell/commands.d.ts.map +1 -1
- package/dist/cli/shell/commands.js +143 -29
- package/dist/cli/shell/commands.js.map +1 -1
- package/dist/cli/shell/components/AgentPanel.d.ts +1 -4
- package/dist/cli/shell/components/AgentPanel.d.ts.map +1 -1
- package/dist/cli/shell/components/AgentPanel.js +88 -6
- package/dist/cli/shell/components/AgentPanel.js.map +1 -1
- package/dist/cli/shell/components/App.d.ts +11 -6
- package/dist/cli/shell/components/App.d.ts.map +1 -1
- package/dist/cli/shell/components/App.js +212 -35
- package/dist/cli/shell/components/App.js.map +1 -1
- package/dist/cli/shell/components/ErrorBoundary.d.ts +22 -0
- package/dist/cli/shell/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/cli/shell/components/ErrorBoundary.js +31 -0
- package/dist/cli/shell/components/ErrorBoundary.js.map +1 -0
- package/dist/cli/shell/components/InputPrompt.d.ts +3 -0
- package/dist/cli/shell/components/InputPrompt.d.ts.map +1 -1
- package/dist/cli/shell/components/InputPrompt.js +155 -13
- package/dist/cli/shell/components/InputPrompt.js.map +1 -1
- package/dist/cli/shell/components/MessageStream.d.ts +17 -4
- package/dist/cli/shell/components/MessageStream.d.ts.map +1 -1
- package/dist/cli/shell/components/MessageStream.js +215 -23
- package/dist/cli/shell/components/MessageStream.js.map +1 -1
- package/dist/cli/shell/components/Separator.d.ts +17 -0
- package/dist/cli/shell/components/Separator.d.ts.map +1 -0
- package/dist/cli/shell/components/Separator.js +10 -0
- package/dist/cli/shell/components/Separator.js.map +1 -0
- package/dist/cli/shell/components/ThinkingIndicator.d.ts +21 -0
- package/dist/cli/shell/components/ThinkingIndicator.d.ts.map +1 -0
- package/dist/cli/shell/components/ThinkingIndicator.js +102 -0
- package/dist/cli/shell/components/ThinkingIndicator.js.map +1 -0
- package/dist/cli/shell/components/index.d.ts +3 -0
- package/dist/cli/shell/components/index.d.ts.map +1 -1
- package/dist/cli/shell/components/index.js +2 -0
- package/dist/cli/shell/components/index.js.map +1 -1
- package/dist/cli/shell/coordinator.d.ts +10 -0
- package/dist/cli/shell/coordinator.d.ts.map +1 -1
- package/dist/cli/shell/coordinator.js +99 -4
- package/dist/cli/shell/coordinator.js.map +1 -1
- package/dist/cli/shell/error-messages.d.ts +21 -0
- package/dist/cli/shell/error-messages.d.ts.map +1 -0
- package/dist/cli/shell/error-messages.js +61 -0
- package/dist/cli/shell/error-messages.js.map +1 -0
- package/dist/cli/shell/index.d.ts +24 -3
- package/dist/cli/shell/index.d.ts.map +1 -1
- package/dist/cli/shell/index.js +949 -29
- package/dist/cli/shell/index.js.map +1 -1
- package/dist/cli/shell/lifecycle.d.ts +2 -0
- package/dist/cli/shell/lifecycle.d.ts.map +1 -1
- package/dist/cli/shell/lifecycle.js +59 -6
- package/dist/cli/shell/lifecycle.js.map +1 -1
- package/dist/cli/shell/memory.d.ts +6 -1
- package/dist/cli/shell/memory.d.ts.map +1 -1
- package/dist/cli/shell/memory.js +12 -1
- package/dist/cli/shell/memory.js.map +1 -1
- package/dist/cli/shell/router.d.ts +16 -0
- package/dist/cli/shell/router.d.ts.map +1 -1
- package/dist/cli/shell/router.js +27 -0
- package/dist/cli/shell/router.js.map +1 -1
- package/dist/cli/shell/session-store.d.ts +47 -0
- package/dist/cli/shell/session-store.d.ts.map +1 -0
- package/dist/cli/shell/session-store.js +125 -0
- package/dist/cli/shell/session-store.js.map +1 -0
- package/dist/cli/shell/sessions.d.ts +2 -0
- package/dist/cli/shell/sessions.d.ts.map +1 -1
- package/dist/cli/shell/sessions.js +19 -5
- package/dist/cli/shell/sessions.js.map +1 -1
- package/dist/cli/shell/shell-metrics.d.ts +34 -0
- package/dist/cli/shell/shell-metrics.d.ts.map +1 -0
- package/dist/cli/shell/shell-metrics.js +98 -0
- package/dist/cli/shell/shell-metrics.js.map +1 -0
- package/dist/cli/shell/spawn.d.ts.map +1 -1
- package/dist/cli/shell/spawn.js +20 -6
- package/dist/cli/shell/spawn.js.map +1 -1
- package/dist/cli/shell/terminal.d.ts +26 -0
- package/dist/cli/shell/terminal.d.ts.map +1 -1
- package/dist/cli/shell/terminal.js +65 -2
- package/dist/cli/shell/terminal.js.map +1 -1
- package/dist/cli/shell/theme-colors.d.ts +39 -0
- package/dist/cli/shell/theme-colors.d.ts.map +1 -0
- package/dist/cli/shell/theme-colors.js +39 -0
- package/dist/cli/shell/theme-colors.js.map +1 -0
- package/dist/cli/shell/types.d.ts +2 -0
- package/dist/cli/shell/types.d.ts.map +1 -1
- package/dist/cli/shell/useAnimation.d.ts +42 -0
- package/dist/cli/shell/useAnimation.d.ts.map +1 -0
- package/dist/cli/shell/useAnimation.js +139 -0
- package/dist/cli/shell/useAnimation.js.map +1 -0
- package/dist/cli-entry.d.ts +0 -7
- package/dist/cli-entry.d.ts.map +1 -1
- package/dist/cli-entry.js +701 -96
- package/dist/cli-entry.js.map +1 -1
- package/package.json +156 -140
- package/templates/orchestration-log.md +1 -1
- package/templates/package.json +3 -0
- package/templates/ralph-triage.js +543 -0
- package/templates/scribe-charter.md +1 -1
- package/templates/squad.agent.md +10 -10
- package/templates/workflows/squad-heartbeat.yml +52 -196
- package/templates/workflows/squad-insider-release.yml +1 -1
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Team casting engine — parses coordinator team proposals and scaffolds agent files.
|
|
3
|
+
* @module cli/core/cast
|
|
4
|
+
*/
|
|
5
|
+
import { mkdir, writeFile, readFile } from 'node:fs/promises';
|
|
6
|
+
import { existsSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
// ── Emoji mapping ──────────────────────────────────────────────────
|
|
9
|
+
const ROLE_EMOJI_MAP = [
|
|
10
|
+
[/lead|architect|tech\s*lead/i, '🏗️'],
|
|
11
|
+
[/frontend|ui|design/i, '⚛️'],
|
|
12
|
+
[/backend|api|server/i, '🔧'],
|
|
13
|
+
[/test|qa|quality/i, '🧪'],
|
|
14
|
+
[/devops|infra|platform/i, '⚙️'],
|
|
15
|
+
[/docs|devrel|writer/i, '📝'],
|
|
16
|
+
[/data|database|analytics/i, '📊'],
|
|
17
|
+
[/security|auth/i, '🔒'],
|
|
18
|
+
];
|
|
19
|
+
/** Map a role string to its emoji. Exported for reuse. */
|
|
20
|
+
export function roleToEmoji(role) {
|
|
21
|
+
for (const [pattern, emoji] of ROLE_EMOJI_MAP) {
|
|
22
|
+
if (pattern.test(role))
|
|
23
|
+
return emoji;
|
|
24
|
+
}
|
|
25
|
+
return '👤';
|
|
26
|
+
}
|
|
27
|
+
// ── Parser ─────────────────────────────────────────────────────────
|
|
28
|
+
/**
|
|
29
|
+
* Parse a team proposal from the coordinator's response.
|
|
30
|
+
* Handles multiple formats:
|
|
31
|
+
* 1. Strict INIT_TEAM: format
|
|
32
|
+
* 2. Markdown code blocks wrapping INIT_TEAM
|
|
33
|
+
* 3. Pipe-delimited lines without INIT_TEAM header
|
|
34
|
+
* 4. Emoji-prefixed role lines (🏗️ Name — Role Scope)
|
|
35
|
+
* Returns null only if no team members could be extracted.
|
|
36
|
+
*/
|
|
37
|
+
export function parseCastResponse(response) {
|
|
38
|
+
// Strip markdown code fences if present
|
|
39
|
+
let cleaned = response.replace(/```[\s\S]*?```/g, (match) => {
|
|
40
|
+
return match.replace(/^```\w*\n?/, '').replace(/\n?```$/, '');
|
|
41
|
+
});
|
|
42
|
+
// Also try without code fence stripping
|
|
43
|
+
const candidates = [cleaned, response];
|
|
44
|
+
for (const text of candidates) {
|
|
45
|
+
const result = tryParseInitTeam(text);
|
|
46
|
+
if (result && result.members.length > 0)
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
// Fallback: try to extract pipe-delimited lines anywhere in the response
|
|
50
|
+
const fallback = tryParsePipeLines(response);
|
|
51
|
+
if (fallback && fallback.members.length > 0)
|
|
52
|
+
return fallback;
|
|
53
|
+
// Last resort: try emoji-prefixed lines (🏗️ Name — Role Scope)
|
|
54
|
+
const emojiResult = tryParseEmojiLines(response);
|
|
55
|
+
if (emojiResult && emojiResult.members.length > 0)
|
|
56
|
+
return emojiResult;
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
function tryParseInitTeam(text) {
|
|
60
|
+
const initIdx = text.indexOf('INIT_TEAM:');
|
|
61
|
+
// Also try "INIT_TEAM" without colon, and case-insensitive
|
|
62
|
+
const altIdx = initIdx === -1 ? text.search(/INIT_TEAM\s*:?/i) : initIdx;
|
|
63
|
+
if (altIdx === -1)
|
|
64
|
+
return null;
|
|
65
|
+
const block = text.slice(altIdx);
|
|
66
|
+
return extractFromBlock(block);
|
|
67
|
+
}
|
|
68
|
+
function tryParsePipeLines(text) {
|
|
69
|
+
// Look for lines with pipe separators: "- Name | Role | Scope" or "Name | Role | Scope"
|
|
70
|
+
const lines = text.split('\n');
|
|
71
|
+
const members = [];
|
|
72
|
+
let universe = '';
|
|
73
|
+
let projectDescription = '';
|
|
74
|
+
for (const line of lines) {
|
|
75
|
+
const trimmed = line.trim();
|
|
76
|
+
// Skip table headers and separators
|
|
77
|
+
if (trimmed.match(/^\|?\s*Name\s*\|/i))
|
|
78
|
+
continue;
|
|
79
|
+
if (trimmed.match(/^\|?\s*-+\s*\|/))
|
|
80
|
+
continue;
|
|
81
|
+
// Match: "- Name | Role | Scope" or "* Name | Role | Scope" or just "Name | Role | Scope"
|
|
82
|
+
const pipeMatch = trimmed.match(/^[-*•]?\s*(.+?)\s*\|\s*(.+?)\s*\|\s*(.+)/);
|
|
83
|
+
if (pipeMatch) {
|
|
84
|
+
const name = pipeMatch[1].trim();
|
|
85
|
+
const role = pipeMatch[2].trim();
|
|
86
|
+
const scope = pipeMatch[3].trim().replace(/\|.*$/, '').trim(); // remove trailing pipes
|
|
87
|
+
if (name && role && !/^-+$/.test(name)) {
|
|
88
|
+
members.push({ name, role, scope, emoji: roleToEmoji(role) });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const universeMatch = trimmed.match(/^(?:\*\*)?Universe(?:\*\*)?:?\s*(.+)/i);
|
|
92
|
+
if (universeMatch)
|
|
93
|
+
universe = universeMatch[1].trim();
|
|
94
|
+
const projectMatch = trimmed.match(/^(?:\*\*)?Project(?:\*\*)?:?\s*(.+)/i);
|
|
95
|
+
if (projectMatch)
|
|
96
|
+
projectDescription = projectMatch[1].trim();
|
|
97
|
+
}
|
|
98
|
+
if (members.length === 0)
|
|
99
|
+
return null;
|
|
100
|
+
return { members, universe: universe || 'Unknown', projectDescription: projectDescription || 'User project' };
|
|
101
|
+
}
|
|
102
|
+
function tryParseEmojiLines(text) {
|
|
103
|
+
// Match lines like: 🏗️ Ripley — Lead Architecture, code review
|
|
104
|
+
// or: 🏗️ Ripley — Lead Scope, decisions
|
|
105
|
+
const lines = text.split('\n');
|
|
106
|
+
const members = [];
|
|
107
|
+
let universe = '';
|
|
108
|
+
let projectDescription = '';
|
|
109
|
+
for (const line of lines) {
|
|
110
|
+
const trimmed = line.trim();
|
|
111
|
+
// Match emoji + name + dash/emdash + role + optional scope
|
|
112
|
+
const emojiMatch = trimmed.match(/^[^\w\s][\uFE0F]?\s+(\w+)\s+[—–-]\s+(.+)/);
|
|
113
|
+
if (emojiMatch) {
|
|
114
|
+
const name = emojiMatch[1].trim();
|
|
115
|
+
const rest = emojiMatch[2].trim();
|
|
116
|
+
// Split rest into role and scope (role is first word(s) before double space or tab)
|
|
117
|
+
const roleScopeMatch = rest.match(/^(.+?)\s{2,}(.+)$/);
|
|
118
|
+
if (roleScopeMatch) {
|
|
119
|
+
const role = roleScopeMatch[1].trim();
|
|
120
|
+
const scope = roleScopeMatch[2].trim();
|
|
121
|
+
members.push({ name, role, scope, emoji: roleToEmoji(role) });
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// No clear scope separation — treat whole rest as role
|
|
125
|
+
members.push({ name, role: rest, scope: rest, emoji: roleToEmoji(rest) });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const universeMatch = trimmed.match(/Universe:?\s*(.+)/i);
|
|
129
|
+
if (universeMatch && !trimmed.includes('|'))
|
|
130
|
+
universe = universeMatch[1].trim();
|
|
131
|
+
const projectMatch = trimmed.match(/Project:?\s*(.+)/i);
|
|
132
|
+
if (projectMatch && !trimmed.includes('|'))
|
|
133
|
+
projectDescription = projectMatch[1].trim();
|
|
134
|
+
}
|
|
135
|
+
if (members.length === 0)
|
|
136
|
+
return null;
|
|
137
|
+
return { members, universe: universe || 'Unknown', projectDescription: projectDescription || 'User project' };
|
|
138
|
+
}
|
|
139
|
+
function extractFromBlock(block) {
|
|
140
|
+
const lines = block.split('\n').map(l => l.trim()).filter(Boolean);
|
|
141
|
+
const members = [];
|
|
142
|
+
let universe = '';
|
|
143
|
+
let projectDescription = '';
|
|
144
|
+
for (const line of lines) {
|
|
145
|
+
// Member line: - Name | Role | Scope
|
|
146
|
+
if (line.startsWith('-') && line.includes('|')) {
|
|
147
|
+
const parts = line.slice(1).split('|').map(s => s.trim());
|
|
148
|
+
if (parts.length >= 3) {
|
|
149
|
+
const name = parts[0];
|
|
150
|
+
const role = parts[1];
|
|
151
|
+
const scope = parts[2];
|
|
152
|
+
members.push({ name, role, scope, emoji: roleToEmoji(role) });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Also handle * bullets
|
|
156
|
+
if (line.startsWith('*') && line.includes('|')) {
|
|
157
|
+
const parts = line.slice(1).split('|').map(s => s.trim());
|
|
158
|
+
if (parts.length >= 3) {
|
|
159
|
+
members.push({ name: parts[0], role: parts[1], scope: parts[2], emoji: roleToEmoji(parts[1]) });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// UNIVERSE: line (handles **UNIVERSE:** and **UNIVERSE**: formats)
|
|
163
|
+
const universeMatch = line.match(/^(?:\*\*)?UNIVERSE(?:\*\*)?:?\s*(?:\*\*)?\s*(.+)/i);
|
|
164
|
+
if (universeMatch) {
|
|
165
|
+
universe = universeMatch[1].replace(/^\*\*\s*/, '').trim();
|
|
166
|
+
}
|
|
167
|
+
// PROJECT: line
|
|
168
|
+
const projectMatch = line.match(/^(?:\*\*)?PROJECT(?:\*\*)?:?\s*(?:\*\*)?\s*(.+)/i);
|
|
169
|
+
if (projectMatch) {
|
|
170
|
+
projectDescription = projectMatch[1].replace(/^\*\*\s*/, '').trim();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (members.length === 0)
|
|
174
|
+
return null;
|
|
175
|
+
return { members, universe: universe || 'Unknown', projectDescription: projectDescription || 'User project' };
|
|
176
|
+
}
|
|
177
|
+
// ── Charter / history generators ───────────────────────────────────
|
|
178
|
+
function personalityForRole(role) {
|
|
179
|
+
const lower = role.toLowerCase();
|
|
180
|
+
if (/lead|architect|tech\s*lead/.test(lower))
|
|
181
|
+
return 'Sees the big picture without losing sight of the details. Decides fast, revisits when the data says so.';
|
|
182
|
+
if (/frontend|ui|design/.test(lower))
|
|
183
|
+
return 'Pixel-aware and user-obsessed. If it looks off by one, it is off by one.';
|
|
184
|
+
if (/backend|api|server/.test(lower))
|
|
185
|
+
return 'Data flows in, answers flow out. Keeps the plumbing tight and the contracts clear.';
|
|
186
|
+
if (/test|qa|quality/.test(lower))
|
|
187
|
+
return 'Breaks things on purpose so users never break them by accident.';
|
|
188
|
+
if (/devops|infra|platform/.test(lower))
|
|
189
|
+
return 'If it ships, it ships reliably. Automates everything twice.';
|
|
190
|
+
if (/docs|devrel|writer/.test(lower))
|
|
191
|
+
return 'Turns complexity into clarity. If the docs are wrong, the product is wrong.';
|
|
192
|
+
if (/data|database|analytics/.test(lower))
|
|
193
|
+
return 'Thinks in tables and queries. Normalizes first, denormalizes when the numbers demand it.';
|
|
194
|
+
if (/security|auth/.test(lower))
|
|
195
|
+
return 'Paranoid by design. Assumes every input is hostile until proven otherwise.';
|
|
196
|
+
if (/session|scribe|log/.test(lower))
|
|
197
|
+
return 'Silent observer. Keeps the record straight so the team never loses context.';
|
|
198
|
+
if (/monitor|queue|work/.test(lower))
|
|
199
|
+
return 'Watches the board, keeps the queue honest, nudges when things stall.';
|
|
200
|
+
return 'Focused and reliable. Gets the job done without fanfare.';
|
|
201
|
+
}
|
|
202
|
+
function ownershipFromRole(role, scope) {
|
|
203
|
+
const items = scope.split(',').map(s => s.trim()).filter(Boolean);
|
|
204
|
+
if (items.length >= 3)
|
|
205
|
+
return items.slice(0, 3).map(i => `- ${i}`).join('\n');
|
|
206
|
+
if (items.length > 0)
|
|
207
|
+
return items.map(i => `- ${i}`).join('\n');
|
|
208
|
+
return `- ${role} domain tasks`;
|
|
209
|
+
}
|
|
210
|
+
function generateCharter(member) {
|
|
211
|
+
const nameLower = member.name.toLowerCase();
|
|
212
|
+
return `# ${member.name} — ${member.role}
|
|
213
|
+
|
|
214
|
+
> ${personalityForRole(member.role)}
|
|
215
|
+
|
|
216
|
+
## Identity
|
|
217
|
+
|
|
218
|
+
- **Name:** ${member.name}
|
|
219
|
+
- **Role:** ${member.role}
|
|
220
|
+
- **Expertise:** ${member.scope}
|
|
221
|
+
- **Style:** Direct and focused.
|
|
222
|
+
|
|
223
|
+
## What I Own
|
|
224
|
+
|
|
225
|
+
${ownershipFromRole(member.role, member.scope)}
|
|
226
|
+
|
|
227
|
+
## How I Work
|
|
228
|
+
|
|
229
|
+
- Read decisions.md before starting
|
|
230
|
+
- Write decisions to inbox when making team-relevant choices
|
|
231
|
+
- Focused, practical, gets things done
|
|
232
|
+
|
|
233
|
+
## Boundaries
|
|
234
|
+
|
|
235
|
+
**I handle:** ${member.scope}
|
|
236
|
+
|
|
237
|
+
**I don't handle:** Work outside my domain — the coordinator routes that elsewhere.
|
|
238
|
+
|
|
239
|
+
**When I'm unsure:** I say so and suggest who might know.
|
|
240
|
+
|
|
241
|
+
**If I review others' work:** On rejection, I may require a different agent to revise (not the original author) or request a new specialist be spawned. The Coordinator enforces this.
|
|
242
|
+
|
|
243
|
+
## Model
|
|
244
|
+
|
|
245
|
+
- **Preferred:** auto
|
|
246
|
+
- **Rationale:** Coordinator selects the best model based on task type
|
|
247
|
+
- **Fallback:** Standard chain
|
|
248
|
+
|
|
249
|
+
## Collaboration
|
|
250
|
+
|
|
251
|
+
Before starting work, run \`git rev-parse --show-toplevel\` to find the repo root, or use the \`TEAM ROOT\` provided in the spawn prompt. All \`.squad/\` paths must be resolved relative to this root.
|
|
252
|
+
|
|
253
|
+
Before starting work, read \`.squad/decisions.md\` for team decisions that affect me.
|
|
254
|
+
After making a decision others should know, write it to \`.squad/decisions/inbox/${nameLower}-{brief-slug}.md\`.
|
|
255
|
+
If I need another team member's input, say so — the coordinator will bring them in.
|
|
256
|
+
|
|
257
|
+
## Voice
|
|
258
|
+
|
|
259
|
+
${personalityForRole(member.role)}
|
|
260
|
+
`;
|
|
261
|
+
}
|
|
262
|
+
function generateHistory(member, projectDescription) {
|
|
263
|
+
return `# ${member.name} — History
|
|
264
|
+
|
|
265
|
+
## Core Context
|
|
266
|
+
|
|
267
|
+
- **Project:** ${projectDescription}
|
|
268
|
+
- **Role:** ${member.role}
|
|
269
|
+
- **Joined:** ${new Date().toISOString()}
|
|
270
|
+
|
|
271
|
+
## Learnings
|
|
272
|
+
|
|
273
|
+
<!-- Append learnings below -->
|
|
274
|
+
`;
|
|
275
|
+
}
|
|
276
|
+
// ── Built-in agents ────────────────────────────────────────────────
|
|
277
|
+
function scribeMember() {
|
|
278
|
+
return { name: 'Scribe', role: 'Session Logger', scope: 'Maintaining decisions.md, cross-agent context sharing, orchestration logging, session logging, git commits', emoji: '📋' };
|
|
279
|
+
}
|
|
280
|
+
function scribeCharter() {
|
|
281
|
+
const m = scribeMember();
|
|
282
|
+
return generateCharter(m);
|
|
283
|
+
}
|
|
284
|
+
function ralphMember() {
|
|
285
|
+
return { name: 'Ralph', role: 'Work Monitor', scope: 'Work queue tracking, backlog management, keep-alive', emoji: '🔄' };
|
|
286
|
+
}
|
|
287
|
+
function ralphCharter() {
|
|
288
|
+
const m = ralphMember();
|
|
289
|
+
return generateCharter(m);
|
|
290
|
+
}
|
|
291
|
+
// ── Team file updaters ─────────────────────────────────────────────
|
|
292
|
+
function buildMembersTable(allMembers) {
|
|
293
|
+
let table = `## Members\n\n| Name | Role | Charter | Status |\n|------|------|---------|--------|\n`;
|
|
294
|
+
for (const m of allMembers) {
|
|
295
|
+
const nameLower = m.name.toLowerCase();
|
|
296
|
+
let status = '✅ Active';
|
|
297
|
+
if (m.role === 'Session Logger')
|
|
298
|
+
status = '📋 Silent';
|
|
299
|
+
if (m.role === 'Work Monitor')
|
|
300
|
+
status = '🔄 Monitor';
|
|
301
|
+
table += `| ${m.name} | ${m.role} | \`.squad/agents/${nameLower}/charter.md\` | ${status} |\n`;
|
|
302
|
+
}
|
|
303
|
+
return table;
|
|
304
|
+
}
|
|
305
|
+
function buildRoutingTable(members) {
|
|
306
|
+
let table = `## Work Type → Agent\n\n| Work Type | Primary | Secondary |\n|-----------|---------|----------|\n`;
|
|
307
|
+
for (const m of members) {
|
|
308
|
+
if (m.role === 'Session Logger' || m.role === 'Work Monitor')
|
|
309
|
+
continue;
|
|
310
|
+
table += `| ${m.scope} | ${m.name} | — |\n`;
|
|
311
|
+
}
|
|
312
|
+
return table;
|
|
313
|
+
}
|
|
314
|
+
// ── Main cast function ─────────────────────────────────────────────
|
|
315
|
+
/**
|
|
316
|
+
* Create all squad agent files for a cast proposal.
|
|
317
|
+
* teamRoot is the project root (parent of .squad/).
|
|
318
|
+
*/
|
|
319
|
+
export async function createTeam(teamRoot, proposal) {
|
|
320
|
+
const squadDir = join(teamRoot, '.squad');
|
|
321
|
+
const agentsDir = join(squadDir, 'agents');
|
|
322
|
+
const castingDir = join(squadDir, 'casting');
|
|
323
|
+
const filesCreated = [];
|
|
324
|
+
const membersCreated = [];
|
|
325
|
+
const now = new Date().toISOString();
|
|
326
|
+
// Ensure directories exist
|
|
327
|
+
await mkdir(agentsDir, { recursive: true });
|
|
328
|
+
await mkdir(castingDir, { recursive: true });
|
|
329
|
+
// Collect all members (proposal + built-ins)
|
|
330
|
+
const allMembers = [...proposal.members];
|
|
331
|
+
const hasScribe = proposal.members.some(m => /scribe/i.test(m.name));
|
|
332
|
+
if (!hasScribe)
|
|
333
|
+
allMembers.push(scribeMember());
|
|
334
|
+
const hasRalph = proposal.members.some(m => /ralph/i.test(m.name));
|
|
335
|
+
if (!hasRalph)
|
|
336
|
+
allMembers.push(ralphMember());
|
|
337
|
+
// Create agent directories and files
|
|
338
|
+
for (const member of allMembers) {
|
|
339
|
+
const nameLower = member.name.toLowerCase();
|
|
340
|
+
const agentDir = join(agentsDir, nameLower);
|
|
341
|
+
await mkdir(agentDir, { recursive: true });
|
|
342
|
+
const charterPath = join(agentDir, 'charter.md');
|
|
343
|
+
let charter;
|
|
344
|
+
if (member.name === 'Scribe' && !hasScribe) {
|
|
345
|
+
charter = scribeCharter();
|
|
346
|
+
}
|
|
347
|
+
else if (member.name === 'Ralph' && !hasRalph) {
|
|
348
|
+
charter = ralphCharter();
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
charter = generateCharter(member);
|
|
352
|
+
}
|
|
353
|
+
await writeFile(charterPath, charter);
|
|
354
|
+
filesCreated.push(charterPath);
|
|
355
|
+
const historyPath = join(agentDir, 'history.md');
|
|
356
|
+
await writeFile(historyPath, generateHistory(member, proposal.projectDescription));
|
|
357
|
+
filesCreated.push(historyPath);
|
|
358
|
+
membersCreated.push(member.name);
|
|
359
|
+
}
|
|
360
|
+
// Update team.md — preserve content before and after ## Members
|
|
361
|
+
const teamPath = join(squadDir, 'team.md');
|
|
362
|
+
if (existsSync(teamPath)) {
|
|
363
|
+
const content = await readFile(teamPath, 'utf8');
|
|
364
|
+
const membersIdx = content.indexOf('## Members');
|
|
365
|
+
if (membersIdx !== -1) {
|
|
366
|
+
const before = content.slice(0, membersIdx);
|
|
367
|
+
// Find next ## header after Members
|
|
368
|
+
const afterMembers = content.slice(membersIdx + '## Members'.length);
|
|
369
|
+
const nextHeaderMatch = afterMembers.match(/\n(## [^\n]+)/);
|
|
370
|
+
const nextHeader = nextHeaderMatch?.[1];
|
|
371
|
+
const after = nextHeader
|
|
372
|
+
? afterMembers.slice(afterMembers.indexOf(nextHeader))
|
|
373
|
+
: '';
|
|
374
|
+
const newContent = before + buildMembersTable(allMembers) + '\n' + after;
|
|
375
|
+
await writeFile(teamPath, newContent);
|
|
376
|
+
filesCreated.push(teamPath);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
// Update routing.md — append routing table
|
|
380
|
+
const routingPath = join(squadDir, 'routing.md');
|
|
381
|
+
if (existsSync(routingPath)) {
|
|
382
|
+
const content = await readFile(routingPath, 'utf8');
|
|
383
|
+
const table = buildRoutingTable(allMembers);
|
|
384
|
+
await writeFile(routingPath, content.trimEnd() + '\n\n' + table + '\n');
|
|
385
|
+
filesCreated.push(routingPath);
|
|
386
|
+
}
|
|
387
|
+
// Create casting state files
|
|
388
|
+
const registryAgents = {};
|
|
389
|
+
const snapshotAgents = [];
|
|
390
|
+
for (const member of allMembers) {
|
|
391
|
+
const nameLower = member.name.toLowerCase();
|
|
392
|
+
registryAgents[nameLower] = {
|
|
393
|
+
created_at: now,
|
|
394
|
+
persistent_name: member.name,
|
|
395
|
+
universe: proposal.universe,
|
|
396
|
+
status: 'active',
|
|
397
|
+
};
|
|
398
|
+
snapshotAgents.push(nameLower);
|
|
399
|
+
}
|
|
400
|
+
const registry = { agents: registryAgents };
|
|
401
|
+
await writeFile(join(castingDir, 'registry.json'), JSON.stringify(registry, null, 2) + '\n');
|
|
402
|
+
filesCreated.push(join(castingDir, 'registry.json'));
|
|
403
|
+
const history = {
|
|
404
|
+
assignment_cast_snapshots: {
|
|
405
|
+
[`repl-cast-${now}`]: {
|
|
406
|
+
created_at: now,
|
|
407
|
+
agents: snapshotAgents,
|
|
408
|
+
universe: proposal.universe,
|
|
409
|
+
},
|
|
410
|
+
},
|
|
411
|
+
universe_usage_history: [
|
|
412
|
+
{ universe: proposal.universe, used_at: now },
|
|
413
|
+
],
|
|
414
|
+
};
|
|
415
|
+
await writeFile(join(castingDir, 'history.json'), JSON.stringify(history, null, 2) + '\n');
|
|
416
|
+
filesCreated.push(join(castingDir, 'history.json'));
|
|
417
|
+
const policy = { universe_allowlist: ['*'], max_capacity: 25 };
|
|
418
|
+
await writeFile(join(castingDir, 'policy.json'), JSON.stringify(policy, null, 2) + '\n');
|
|
419
|
+
filesCreated.push(join(castingDir, 'policy.json'));
|
|
420
|
+
return { teamRoot, membersCreated, filesCreated };
|
|
421
|
+
}
|
|
422
|
+
// ── Display helpers ────────────────────────────────────────────────
|
|
423
|
+
/** Format a cast proposal as a human-readable summary. */
|
|
424
|
+
export function formatCastSummary(proposal) {
|
|
425
|
+
const lines = [];
|
|
426
|
+
for (const m of proposal.members) {
|
|
427
|
+
const nameCol = m.name.padEnd(10);
|
|
428
|
+
const roleCol = m.role.padEnd(15);
|
|
429
|
+
lines.push(`${m.emoji} ${nameCol} — ${roleCol} ${m.scope}`);
|
|
430
|
+
}
|
|
431
|
+
// Always show Scribe and Ralph in the summary
|
|
432
|
+
const hasScribe = proposal.members.some(m => /scribe/i.test(m.name));
|
|
433
|
+
if (!hasScribe) {
|
|
434
|
+
lines.push(`📋 ${'Scribe'.padEnd(10)} — ${'(silent)'.padEnd(15)} Memory, decisions, session logs`);
|
|
435
|
+
}
|
|
436
|
+
const hasRalph = proposal.members.some(m => /ralph/i.test(m.name));
|
|
437
|
+
if (!hasRalph) {
|
|
438
|
+
lines.push(`🔄 ${'Ralph'.padEnd(10)} — ${'(monitor)'.padEnd(15)} Work queue, backlog, keep-alive`);
|
|
439
|
+
}
|
|
440
|
+
return lines.join('\n');
|
|
441
|
+
}
|
|
442
|
+
//# sourceMappingURL=cast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cast.js","sourceRoot":"","sources":["../../../src/cli/core/cast.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
export interface GhIssue {
|
|
5
5
|
number: number;
|
|
6
6
|
title: string;
|
|
7
|
+
body?: string;
|
|
7
8
|
labels: Array<{
|
|
8
9
|
name: string;
|
|
9
10
|
}>;
|
|
@@ -22,6 +23,29 @@ export interface GhEditOptions {
|
|
|
22
23
|
addAssignee?: string;
|
|
23
24
|
removeAssignee?: string;
|
|
24
25
|
}
|
|
26
|
+
export interface GhPullRequest {
|
|
27
|
+
number: number;
|
|
28
|
+
title: string;
|
|
29
|
+
author: {
|
|
30
|
+
login: string;
|
|
31
|
+
};
|
|
32
|
+
labels: Array<{
|
|
33
|
+
name: string;
|
|
34
|
+
}>;
|
|
35
|
+
isDraft: boolean;
|
|
36
|
+
reviewDecision: string;
|
|
37
|
+
state: string;
|
|
38
|
+
headRefName: string;
|
|
39
|
+
statusCheckRollup: Array<{
|
|
40
|
+
state: string;
|
|
41
|
+
name: string;
|
|
42
|
+
}>;
|
|
43
|
+
}
|
|
44
|
+
export interface GhPrListOptions {
|
|
45
|
+
state?: 'open' | 'closed' | 'merged' | 'all';
|
|
46
|
+
limit?: number;
|
|
47
|
+
label?: string;
|
|
48
|
+
}
|
|
25
49
|
/**
|
|
26
50
|
* Check if gh CLI is available
|
|
27
51
|
*/
|
|
@@ -34,6 +58,7 @@ export declare function ghAuthenticated(): Promise<boolean>;
|
|
|
34
58
|
* List issues with optional filters
|
|
35
59
|
*/
|
|
36
60
|
export declare function ghIssueList(options?: GhListOptions): Promise<GhIssue[]>;
|
|
61
|
+
export declare function ghPrList(options?: GhPrListOptions): Promise<GhPullRequest[]>;
|
|
37
62
|
/**
|
|
38
63
|
* Edit an issue (add/remove labels or assignees)
|
|
39
64
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gh-cli.d.ts","sourceRoot":"","sources":["../../../src/cli/core/gh-cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,SAAS,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAOpD;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAOxD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAejF;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB5F"}
|
|
1
|
+
{"version":3,"file":"gh-cli.d.ts","sourceRoot":"","sources":["../../../src/cli/core/gh-cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,SAAS,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAOpD;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAOxD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAejF;AAED,wBAAsB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAetF;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB5F"}
|
package/dist/cli/core/gh-cli.js
CHANGED
|
@@ -32,7 +32,7 @@ export async function ghAuthenticated() {
|
|
|
32
32
|
* List issues with optional filters
|
|
33
33
|
*/
|
|
34
34
|
export async function ghIssueList(options = {}) {
|
|
35
|
-
const args = ['issue', 'list', '--json', 'number,title,labels,assignees'];
|
|
35
|
+
const args = ['issue', 'list', '--json', 'number,title,body,labels,assignees'];
|
|
36
36
|
if (options.label) {
|
|
37
37
|
args.push('--label', options.label);
|
|
38
38
|
}
|
|
@@ -45,6 +45,20 @@ export async function ghIssueList(options = {}) {
|
|
|
45
45
|
const { stdout } = await execFileAsync('gh', args);
|
|
46
46
|
return JSON.parse(stdout || '[]');
|
|
47
47
|
}
|
|
48
|
+
export async function ghPrList(options = {}) {
|
|
49
|
+
const args = ['pr', 'list', '--json', 'number,title,author,labels,isDraft,reviewDecision,state,headRefName,statusCheckRollup'];
|
|
50
|
+
if (options.state) {
|
|
51
|
+
args.push('--state', options.state);
|
|
52
|
+
}
|
|
53
|
+
if (options.limit) {
|
|
54
|
+
args.push('--limit', String(options.limit));
|
|
55
|
+
}
|
|
56
|
+
if (options.label) {
|
|
57
|
+
args.push('--label', options.label);
|
|
58
|
+
}
|
|
59
|
+
const { stdout } = await execFileAsync('gh', args);
|
|
60
|
+
return JSON.parse(stdout || '[]');
|
|
61
|
+
}
|
|
48
62
|
/**
|
|
49
63
|
* Edit an issue (add/remove labels or assignees)
|
|
50
64
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gh-cli.js","sourceRoot":"","sources":["../../../src/cli/core/gh-cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"gh-cli.js","sourceRoot":"","sources":["../../../src/cli/core/gh-cli.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/core/init.d.ts
CHANGED
|
@@ -2,8 +2,16 @@
|
|
|
2
2
|
* Init command implementation — zero dependencies
|
|
3
3
|
* Scaffolds a new Squad project with templates, workflows, and directory structure
|
|
4
4
|
*/
|
|
5
|
+
/** True when animations should be suppressed (NO_COLOR, dumb term, non-TTY). */
|
|
6
|
+
export declare function isInitNoColor(): boolean;
|
|
7
|
+
/** Typewriter effect — falls back to instant print when animations disabled. */
|
|
8
|
+
export declare function typewrite(text: string, charMs?: number): Promise<void>;
|
|
5
9
|
/**
|
|
6
10
|
* Main init command handler
|
|
7
11
|
*/
|
|
8
|
-
export
|
|
12
|
+
export interface InitOptions {
|
|
13
|
+
/** Project description prompt — stored for REPL auto-casting. */
|
|
14
|
+
prompt?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function runInit(dest: string, options?: InitOptions): Promise<void>;
|
|
9
17
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/core/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/core/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,gFAAgF;AAChF,wBAAgB,aAAa,IAAI,OAAO,CAMvC;AAMD,gFAAgF;AAChF,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAU/E;AA6DD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwTpF"}
|