@lcvbeek/patina 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +195 -0
  2. package/dist/commands/apply.d.ts +2 -0
  3. package/dist/commands/apply.d.ts.map +1 -0
  4. package/dist/commands/apply.js +186 -0
  5. package/dist/commands/apply.js.map +1 -0
  6. package/dist/commands/capture.d.ts +5 -0
  7. package/dist/commands/capture.d.ts.map +1 -0
  8. package/dist/commands/capture.js +88 -0
  9. package/dist/commands/capture.js.map +1 -0
  10. package/dist/commands/diff.d.ts +2 -0
  11. package/dist/commands/diff.d.ts.map +1 -0
  12. package/dist/commands/diff.js +43 -0
  13. package/dist/commands/diff.js.map +1 -0
  14. package/dist/commands/ingest.d.ts +14 -0
  15. package/dist/commands/ingest.d.ts.map +1 -0
  16. package/dist/commands/ingest.js +111 -0
  17. package/dist/commands/ingest.js.map +1 -0
  18. package/dist/commands/init.d.ts +2 -0
  19. package/dist/commands/init.d.ts.map +1 -0
  20. package/dist/commands/init.js +165 -0
  21. package/dist/commands/init.js.map +1 -0
  22. package/dist/commands/layers.d.ts +2 -0
  23. package/dist/commands/layers.d.ts.map +1 -0
  24. package/dist/commands/layers.js +141 -0
  25. package/dist/commands/layers.js.map +1 -0
  26. package/dist/commands/onboard.d.ts +2 -0
  27. package/dist/commands/onboard.d.ts.map +1 -0
  28. package/dist/commands/onboard.js +275 -0
  29. package/dist/commands/onboard.js.map +1 -0
  30. package/dist/commands/run.d.ts +4 -0
  31. package/dist/commands/run.d.ts.map +1 -0
  32. package/dist/commands/run.js +526 -0
  33. package/dist/commands/run.js.map +1 -0
  34. package/dist/commands/status.d.ts +2 -0
  35. package/dist/commands/status.d.ts.map +1 -0
  36. package/dist/commands/status.js +121 -0
  37. package/dist/commands/status.js.map +1 -0
  38. package/dist/index.d.ts +3 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +108 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/lib/claude.d.ts +12 -0
  43. package/dist/lib/claude.d.ts.map +1 -0
  44. package/dist/lib/claude.js +70 -0
  45. package/dist/lib/claude.js.map +1 -0
  46. package/dist/lib/metrics.d.ts +29 -0
  47. package/dist/lib/metrics.d.ts.map +1 -0
  48. package/dist/lib/metrics.js +96 -0
  49. package/dist/lib/metrics.js.map +1 -0
  50. package/dist/lib/parser.d.ts +28 -0
  51. package/dist/lib/parser.d.ts.map +1 -0
  52. package/dist/lib/parser.js +226 -0
  53. package/dist/lib/parser.js.map +1 -0
  54. package/dist/lib/storage.d.ts +126 -0
  55. package/dist/lib/storage.d.ts.map +1 -0
  56. package/dist/lib/storage.js +201 -0
  57. package/dist/lib/storage.js.map +1 -0
  58. package/package.json +45 -0
@@ -0,0 +1,275 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import readline from 'readline';
4
+ import { LIVING_DOC_FILE, writeCycleFile, } from '../lib/storage.js';
5
+ import { callClaudeForJson } from '../lib/claude.js';
6
+ // ---------------------------------------------------------------------------
7
+ // ANSI helpers
8
+ // ---------------------------------------------------------------------------
9
+ const isTTY = process.stdout.isTTY;
10
+ function bold(s) { return isTTY ? `\x1b[1m${s}\x1b[0m` : s; }
11
+ function dim(s) { return isTTY ? `\x1b[2m${s}\x1b[0m` : s; }
12
+ function green(s) { return isTTY ? `\x1b[32m${s}\x1b[0m` : s; }
13
+ function cyan(s) { return isTTY ? `\x1b[36m${s}\x1b[0m` : s; }
14
+ function yellow(s) { return isTTY ? `\x1b[33m${s}\x1b[0m` : s; }
15
+ function red(s) { return isTTY ? `\x1b[31m${s}\x1b[0m` : s; }
16
+ function hr(len = 60) { return dim('─'.repeat(len)); }
17
+ function section(title) {
18
+ console.log(`\n${bold(title)}`);
19
+ console.log(hr());
20
+ }
21
+ // ---------------------------------------------------------------------------
22
+ // Questions
23
+ // ---------------------------------------------------------------------------
24
+ const QUESTIONS = [
25
+ // Behavior Contract
26
+ {
27
+ key: 'agent_purpose',
28
+ label: 'Behavior Contract',
29
+ text: 'What does your AI agent primarily help you with? (one sentence)',
30
+ },
31
+ {
32
+ key: 'always_do',
33
+ label: null,
34
+ text: 'What should it ALWAYS do in every session?',
35
+ },
36
+ {
37
+ key: 'never_do',
38
+ label: null,
39
+ text: 'What should it NEVER do, regardless of what you ask?',
40
+ },
41
+ {
42
+ key: 'tone',
43
+ label: null,
44
+ text: 'How should it communicate? (e.g., direct and brief, explain its reasoning, lead with code)',
45
+ },
46
+ {
47
+ key: 'confidence_threshold',
48
+ label: null,
49
+ text: 'When should it stop and ask rather than proceed?',
50
+ },
51
+ // Autonomy Map
52
+ {
53
+ key: 'auto_ok',
54
+ label: 'Autonomy Map',
55
+ text: "What's a task you'd trust it to handle fully automatically?",
56
+ },
57
+ {
58
+ key: 'always_review',
59
+ label: null,
60
+ text: "What's a scenario that should ALWAYS require your explicit approval, no matter what?",
61
+ },
62
+ // Eval Framework
63
+ {
64
+ key: 'good_output',
65
+ label: 'Eval Framework',
66
+ text: "What does good output look like for your most common task?",
67
+ },
68
+ {
69
+ key: 'biggest_fear',
70
+ label: null,
71
+ text: "What's your biggest fear — the thing you're most worried the agent might do wrong?",
72
+ },
73
+ ];
74
+ // ---------------------------------------------------------------------------
75
+ // Claude call
76
+ // ---------------------------------------------------------------------------
77
+ async function callClaude(prompt) {
78
+ return callClaudeForJson(prompt);
79
+ }
80
+ // ---------------------------------------------------------------------------
81
+ // Build synthesis prompt
82
+ // ---------------------------------------------------------------------------
83
+ function buildPrompt(answers) {
84
+ const qa = QUESTIONS.map((q) => `Q: ${q.text}\nA: ${answers[q.key] || '(no answer)'}`).join('\n\n');
85
+ return `You are helping a developer set up their team's AI operating agreements for the first time.
86
+ Based on their answers below, produce a JSON object that populates three sections of their patina.md file.
87
+
88
+ ${qa}
89
+
90
+ Respond with a JSON object matching this exact TypeScript type (raw JSON only, no markdown wrapper):
91
+
92
+ {
93
+ "summary": "2-3 sentences describing what was established",
94
+ "behavior_contract_md": "Full markdown block for one agent behavior contract. Use this structure exactly:\\n\\n### [Agent name based on their purpose]\\n\\n**What it does:** [one sentence]\\n\\n**Always do:**\\n- [rule]\\n\\n**Never do:**\\n- [rule]\\n\\n**Tone / voice:** [their style preference]\\n\\n**Confidence threshold:** [when to stop and ask]",
95
+ "autonomy_map_rows_md": "One or more markdown table rows (no header) for their autonomy map. Bold any always-review rows. Use this column order: Scenario | L1 — Review all | L2/L3 — Smart | L4+ — Auto. Example row: | Single-file edit | Draft → review | Auto if clear | Auto |",
96
+ "eval_rows_md": "One or more markdown table rows (no header) for their eval framework. Use this column order: Scenario | Input | Expected Output | Pass Threshold. Include a row for their biggest fear with 100% threshold."
97
+ }
98
+
99
+ Be specific and concrete — use their actual words where possible. Do not be generic.`;
100
+ }
101
+ // ---------------------------------------------------------------------------
102
+ // Apply to patina.md
103
+ // ---------------------------------------------------------------------------
104
+ /**
105
+ * Insert content before the next section boundary (--- or ## N.) after the
106
+ * given section header. Used as a fallback when a specific placeholder isn't found.
107
+ */
108
+ function insertBeforeSectionEnd(content, sectionHeader, insertion) {
109
+ const idx = content.indexOf(sectionHeader);
110
+ if (idx === -1)
111
+ return content;
112
+ const after = content.slice(idx + sectionHeader.length);
113
+ const boundaryMatch = after.match(/\n---\n|\n## \d+\./);
114
+ if (!boundaryMatch || boundaryMatch.index === undefined) {
115
+ return content + '\n' + insertion + '\n';
116
+ }
117
+ const insertAt = idx + sectionHeader.length + boundaryMatch.index;
118
+ return content.slice(0, insertAt) + '\n' + insertion.trim() + '\n' + content.slice(insertAt);
119
+ }
120
+ function applyOnboarding(content, response) {
121
+ let result = content;
122
+ // Replace Section 2 agent placeholder block with the generated behavior contract
123
+ result = result.replace(/### General-purpose coding agent[\s\S]*?(?=<!-- Add more (contracts|profiles)|---\n\n## 3)/, `${response.behavior_contract_md.trim()}\n\n<!-- Add more contracts as needed -->\n\n`);
124
+ // Insert autonomy map rows — try new template placeholder first, fall back to section end
125
+ const autonomyPlaceholder = '| [Your scenario] | [Your rule] | [Your rule] | [Your rule] |';
126
+ if (result.includes(autonomyPlaceholder)) {
127
+ result = result.replace(autonomyPlaceholder, `${response.autonomy_map_rows_md.trim()}\n${autonomyPlaceholder}`);
128
+ }
129
+ else {
130
+ // Old template: find section 3 and append an autonomy map table
131
+ const header = result.match(/## 3\..+/)?.[0] ?? '## 3.';
132
+ const table = `| Scenario | L1 — Review all | L2/L3 — Smart | L4+ — Auto |\n|---|---|---|---|\n${response.autonomy_map_rows_md.trim()}`;
133
+ result = insertBeforeSectionEnd(result, header, table);
134
+ }
135
+ // Insert eval rows — try new template placeholder first, fall back to section end
136
+ const evalPlaceholder = '| **Your biggest fear**';
137
+ if (result.includes(evalPlaceholder)) {
138
+ result = result.replace(evalPlaceholder, `${response.eval_rows_md.trim()}\n${evalPlaceholder}`);
139
+ }
140
+ else {
141
+ // Old template: find section 5 and append an eval table
142
+ const header = result.match(/## 5\..+/)?.[0] ?? '## 5.';
143
+ const table = `| Scenario | Input | Expected Output | Pass Threshold |\n|---|---|---|---|\n${response.eval_rows_md.trim()}`;
144
+ result = insertBeforeSectionEnd(result, header, table);
145
+ }
146
+ return result;
147
+ }
148
+ // ---------------------------------------------------------------------------
149
+ // Display
150
+ // ---------------------------------------------------------------------------
151
+ function displayResults(response) {
152
+ section('Summary');
153
+ console.log(` ${response.summary}`);
154
+ section('Behavior Contract');
155
+ response.behavior_contract_md.split('\n').forEach((l) => console.log(` ${l}`));
156
+ section('Autonomy Map rows');
157
+ response.autonomy_map_rows_md.split('\n').forEach((l) => console.log(` ${green('+')} ${l}`));
158
+ section('Eval Framework rows');
159
+ response.eval_rows_md.split('\n').forEach((l) => console.log(` ${green('+')} ${l}`));
160
+ }
161
+ // ---------------------------------------------------------------------------
162
+ // Main
163
+ // ---------------------------------------------------------------------------
164
+ export async function onboardCommand(cwd) {
165
+ const today = new Date().toISOString().slice(0, 10);
166
+ console.log(`\n${bold('patina run')} — first cycle setup`);
167
+ console.log(hr());
168
+ console.log(dim(" No prior cycles found. Let's set up your AI operating agreements."));
169
+ console.log(dim(' 9 questions across three frameworks (~10 min).'));
170
+ console.log(dim(' Evals define what good means → Behavior contracts encode it → Autonomy map enforces it.'));
171
+ console.log();
172
+ const rl = readline.createInterface({
173
+ input: process.stdin,
174
+ output: process.stdout,
175
+ terminal: isTTY,
176
+ });
177
+ const ask = (question) => new Promise((resolve) => rl.question(question, (a) => resolve(a.trim())));
178
+ const answers = {};
179
+ let currentLabel = '';
180
+ for (let i = 0; i < QUESTIONS.length; i++) {
181
+ const q = QUESTIONS[i];
182
+ if (q.label && q.label !== currentLabel) {
183
+ currentLabel = q.label;
184
+ console.log(`\n${bold(cyan(q.label))}`);
185
+ console.log(dim('─'.repeat(q.label.length)));
186
+ }
187
+ const prefix = `${dim(`[${i + 1}/${QUESTIONS.length}]`)} ${bold(q.text)}\n> `;
188
+ answers[q.key] = await ask(prefix);
189
+ console.log();
190
+ }
191
+ rl.close();
192
+ console.log(hr());
193
+ console.log(`\n${bold('Sending to Claude...')}`);
194
+ let response;
195
+ try {
196
+ response = await callClaude(buildPrompt(answers));
197
+ }
198
+ catch (err) {
199
+ console.error(`\n${red('Claude CLI call failed:')} ${err instanceof Error ? err.message : String(err)}`);
200
+ process.exit(1);
201
+ }
202
+ console.log(`\n${bold('Done.')}\n`);
203
+ displayResults(response);
204
+ // Confirm before writing
205
+ const confirmRl = readline.createInterface({ input: process.stdin, output: process.stdout });
206
+ const ok = await new Promise((resolve) => {
207
+ confirmRl.question(`\n${hr()}\nApply this to ${LIVING_DOC_FILE}? [y/N] `, (a) => {
208
+ confirmRl.close();
209
+ resolve(a.trim().toLowerCase().startsWith('y'));
210
+ });
211
+ });
212
+ if (!ok) {
213
+ console.log(dim('Aborted. Run `patina run` to try again.'));
214
+ return;
215
+ }
216
+ // Read and populate patina.md
217
+ const livingDocPath = path.join(cwd, LIVING_DOC_FILE);
218
+ if (!fs.existsSync(livingDocPath)) {
219
+ console.error(red(`${LIVING_DOC_FILE} not found. Run \`patina init\` first.`));
220
+ process.exit(1);
221
+ }
222
+ const original = fs.readFileSync(livingDocPath, 'utf-8');
223
+ const populated = applyOnboarding(original, response);
224
+ // Update the "last updated" timestamp
225
+ const dated = populated.replace(/> Maintained by `patina`\. Last updated: .+/, `> Maintained by \`patina\`. Last updated: ${today}`);
226
+ fs.writeFileSync(livingDocPath, dated, 'utf-8');
227
+ // Save cycle file
228
+ const cycleContent = `# Onboarding Cycle — ${today}
229
+
230
+ > Generated by \`patina run\` (first cycle setup) on ${new Date().toISOString()}
231
+
232
+ ---
233
+
234
+ ## Summary
235
+
236
+ ${response.summary}
237
+
238
+ ---
239
+
240
+ ## Behavior Contract
241
+
242
+ ${response.behavior_contract_md}
243
+
244
+ ---
245
+
246
+ ## Autonomy Map (additions)
247
+
248
+ | Scenario | L1 — Review all | L2/L3 — Smart | L4+ — Auto |
249
+ |---|---|---|---|
250
+ ${response.autonomy_map_rows_md}
251
+
252
+ ---
253
+
254
+ ## Eval Framework (additions)
255
+
256
+ | Scenario | Input | Expected Output | Pass Threshold |
257
+ |---|---|---|---|
258
+ ${response.eval_rows_md}
259
+
260
+ ---
261
+
262
+ ## Answers
263
+
264
+ ${QUESTIONS.map((q) => `**${q.text}**\n\n${answers[q.key] || '_(no answer)_'}`).join('\n\n---\n\n')}
265
+ `;
266
+ writeCycleFile(today, cycleContent, cwd);
267
+ console.log();
268
+ console.log(green('✓') + ` Applied to ${bold(LIVING_DOC_FILE)}`);
269
+ console.log(green('✓') + ` Cycle report saved to ${dim(`.patina/cycles/${today}.md`)}`);
270
+ console.log();
271
+ console.log(dim('Your AI operating agreements are set. Run `patina run` after your next work cycle.'));
272
+ console.log(dim(`Commit ${LIVING_DOC_FILE} to share with your team.`));
273
+ console.log();
274
+ }
275
+ //# sourceMappingURL=onboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EACL,eAAe,EACf,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,SAAS,IAAI,CAAC,CAAS,IAAM,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,SAAS,GAAG,CAAC,CAAS,IAAO,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,SAAS,KAAK,CAAC,CAAS,IAAK,OAAO,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,SAAS,IAAI,CAAC,CAAS,IAAM,OAAO,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,SAAS,MAAM,CAAC,CAAS,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,SAAS,GAAG,CAAC,CAAS,IAAO,OAAO,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,SAAS,EAAE,CAAC,GAAG,GAAG,EAAE,IAAS,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACpB,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,SAAS,GAAG;IAChB,oBAAoB;IACpB;QACE,GAAG,EAAE,eAAe;QACpB,KAAK,EAAE,mBAAmB;QAC1B,IAAI,EAAE,iEAAiE;KACxE;IACD;QACE,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,4CAA4C;KACnD;IACD;QACE,GAAG,EAAE,UAAU;QACf,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,sDAAsD;KAC7D;IACD;QACE,GAAG,EAAE,MAAM;QACX,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,4FAA4F;KACnG;IACD;QACE,GAAG,EAAE,sBAAsB;QAC3B,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,kDAAkD;KACzD;IACD,eAAe;IACf;QACE,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,cAAc;QACrB,IAAI,EAAE,6DAA6D;KACpE;IACD;QACE,GAAG,EAAE,eAAe;QACpB,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,sFAAsF;KAC7F;IACD,iBAAiB;IACjB;QACE,GAAG,EAAE,aAAa;QAClB,KAAK,EAAE,gBAAgB;QACvB,IAAI,EAAE,4DAA4D;KACnE;IACD;QACE,GAAG,EAAE,cAAc;QACnB,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,oFAAoF;KAC3F;CACO,CAAC;AAaX,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,KAAK,UAAU,UAAU,CAAC,MAAc;IACtC,OAAO,iBAAiB,CAAqB,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,SAAS,WAAW,CAAC,OAA+B;IAClD,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,QAAQ,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEpG,OAAO;;;EAGP,EAAE;;;;;;;;;;;qFAWiF,CAAC;AACtF,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,sBAAsB,CAAC,OAAe,EAAE,aAAqB,EAAE,SAAiB;IACvF,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3C,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IAE/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxD,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACxD,OAAO,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;IAC3C,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,GAAG,aAAa,CAAC,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC;IAClE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,QAA4B;IACpE,IAAI,MAAM,GAAG,OAAO,CAAC;IAErB,iFAAiF;IACjF,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,4FAA4F,EAC5F,GAAG,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,+CAA+C,CACvF,CAAC;IAEF,0FAA0F;IAC1F,MAAM,mBAAmB,GAAG,+DAA+D,CAAC;IAC5F,IAAI,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACzC,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,mBAAmB,EACnB,GAAG,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,mBAAmB,EAAE,CAClE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,gEAAgE;QAChE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;QACxD,MAAM,KAAK,GAAG,mFAAmF,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC;QACxI,MAAM,GAAG,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,kFAAkF;IAClF,MAAM,eAAe,GAAG,yBAAyB,CAAC;IAClD,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACrC,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,eAAe,EACf,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,eAAe,EAAE,CACtD,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,wDAAwD;QACxD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;QACxD,MAAM,KAAK,GAAG,+EAA+E,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5H,MAAM,GAAG,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,cAAc,CAAC,QAA4B;IAClD,OAAO,CAAC,SAAS,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAErC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAEhF,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9F,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,2FAA2F,CAAC,CAAC,CAAC;IAC9G,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,CAAC,QAAgB,EAAmB,EAAE,CAChD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE5E,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,YAAY,GAAG,EAAE,CAAC;IAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAEvB,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;YACxC,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9E,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAEjD,IAAI,QAA4B,CAAC;IACjC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,yBAAyB,CAAC,IAAI,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEzB,yBAAyB;IACzB,MAAM,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7F,MAAM,EAAE,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;QAChD,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,mBAAmB,eAAe,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;YAC9E,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,8BAA8B;IAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,eAAe,wCAAwC,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEtD,sCAAsC;IACtC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAC7B,6CAA6C,EAC7C,6CAA6C,KAAK,EAAE,CACrD,CAAC;IAEF,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAEhD,kBAAkB;IAClB,MAAM,YAAY,GAAG,wBAAwB,KAAK;;uDAEG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;;;;;EAM7E,QAAQ,CAAC,OAAO;;;;;;EAMhB,QAAQ,CAAC,oBAAoB;;;;;;;;EAQ7B,QAAQ,CAAC,oBAAoB;;;;;;;;EAQ7B,QAAQ,CAAC,YAAY;;;;;;EAMrB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;CAClG,CAAC;IAEA,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;IAEzC,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,eAAe,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,2BAA2B,GAAG,CAAC,kBAAkB,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAC,CAAC;IACvG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,eAAe,2BAA2B,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function runCommand(options?: {
2
+ onboard?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AA+fA,wBAAsB,UAAU,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA+LnF"}