@zhihaohong52/sonata 0.8.2 → 0.8.3

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.
@@ -0,0 +1,340 @@
1
+ /**
2
+ * `sonata reset` — undo what `sonata init` wrote, and nothing else.
3
+ *
4
+ * Init scatters its output across five places: the config, the generated tier
5
+ * agents, the loop skill, a block inside a `CLAUDE.md` sonata does not own,
6
+ * and two settings files holding the routing env, four lifecycle hooks, the
7
+ * permission hook and the tool allow-list. Undoing that by hand means knowing
8
+ * all five, which is why the only reliable answer used to be "delete the repo
9
+ * and start again".
10
+ *
11
+ * Three rules shape the whole command:
12
+ *
13
+ * - **It removes only what sonata wrote.** An agent file without sonata's
14
+ * marker is left alone; `permissions.allow` keeps every entry that is not
15
+ * sonata's; `CLAUDE.md` loses what is between the markers and not one byte
16
+ * more. A settings file is rewritten, never deleted — sonata is one writer
17
+ * of it among several.
18
+ * - **It keeps everything that is expensive to recreate**: API keys, the usage
19
+ * ledger, the ranking catalogs, and the `.sonata/` run store. Those are not
20
+ * configuration, and a user resetting a bad setup should not lose their
21
+ * spend history or have to re-enter every key. The kept list is printed, so
22
+ * "reset" cannot be read as "removed everything".
23
+ * - **It plans first, then applies.** The plan is a list of typed actions with
24
+ * a label each, so the confirmation names every path before anything is
25
+ * touched, and the set shown is exactly the set removed.
26
+ */
27
+ import { existsSync, readFileSync, readdirSync, rmSync, unlinkSync, writeFileSync } from 'node:fs';
28
+ import { join } from 'node:path';
29
+ import { GLOBAL_CONFIG_RELATIVE } from '../config.js';
30
+ import { isSonataAgentText } from '../detect.js';
31
+ import { agentsDirFor, configPathFor } from '../init/helpers.js';
32
+ import { removeGuidance } from '../init/guidance.js';
33
+ import { readSettings, revokeSonataTools, settingsPath, uninstallHook, writeSettings, } from '../settings.js';
34
+ import { planRouteManual, planRouteOff, routeSessionsFile, routeSettingsFile, routeSubagentsFile } from './route.js';
35
+ /**
36
+ * The agent files in this directory that sonata generated.
37
+ *
38
+ * Only a missing directory is an empty answer. Every other failure — a
39
+ * permission error, a bad mount, an unreadable file — used to be flattened to
40
+ * `[]` or to `false`, which produced a plan with no agents in it and a command
41
+ * that reported success having left every agent installed. That is the worst
42
+ * shape a cleanup can fail in: silent, and indistinguishable from having had
43
+ * nothing to do. Unreadable files are named as warnings instead, and the
44
+ * ownership test is the same one `sync` and `prune` use.
45
+ */
46
+ function sonataAgents(dir) {
47
+ const warnings = [];
48
+ let entries;
49
+ try {
50
+ entries = readdirSync(dir);
51
+ }
52
+ catch (err) {
53
+ if (err.code === 'ENOENT')
54
+ return { files: [], warnings };
55
+ return { files: [], warnings: [`could not read ${dir}: ${err.message} — agent files left in place`] };
56
+ }
57
+ const files = [];
58
+ for (const f of entries.filter((name) => name.endsWith('.md')).sort()) {
59
+ const path = join(dir, f);
60
+ try {
61
+ if (isSonataAgentText(readFileSync(path, 'utf8')))
62
+ files.push(f);
63
+ }
64
+ catch (err) {
65
+ warnings.push(`could not read ${path}: ${err.message} — left in place`);
66
+ }
67
+ }
68
+ return { files, warnings };
69
+ }
70
+ /**
71
+ * Strip sonata out of one settings file.
72
+ *
73
+ * Every transform is by command *shape* rather than by this install's own
74
+ * path: a user who ran `sonata init` from a different checkout — an npm
75
+ * install now replaced by a clone, say — would otherwise have their hooks left
76
+ * behind by the very command whose job is removing them. `planRouteOff` can
77
+ * refuse (a non-localhost base URL it did not write), and that refusal must
78
+ * not take the rest of the file down with it, so it is caught and reported.
79
+ */
80
+ export function planSettingsReset(settings, packageRoot, scope) {
81
+ let next = settings;
82
+ let changed = false;
83
+ const warnings = [];
84
+ try {
85
+ const off = planRouteOff(next, packageRoot);
86
+ next = off.settings;
87
+ changed = changed || off.changed;
88
+ }
89
+ catch (err) {
90
+ warnings.push(`left the routing env in place: ${err.message}`);
91
+ }
92
+ const manual = planRouteManual(next, packageRoot, scope);
93
+ next = manual.settings;
94
+ changed = changed || manual.changed;
95
+ // The permission hook is found by the file it runs, not by this install's
96
+ // absolute path, for the same reason `planRouteOff` finds its own that way.
97
+ for (const [event, needle] of [
98
+ ['PreToolUse', 'capture-mode.mjs'],
99
+ ['SessionStart', 'ensure-serve.mjs'],
100
+ ['SessionStart', 'route-session.mjs'],
101
+ ['SessionEnd', 'route-session.mjs'],
102
+ ['SubagentStart', 'route-subagent.mjs'],
103
+ ['SubagentStop', 'route-subagent.mjs'],
104
+ ]) {
105
+ for (;;) {
106
+ const command = (next.hooks?.[event] ?? [])
107
+ .flatMap((entry) => entry.hooks)
108
+ .find((h) => h.command.includes(needle))?.command;
109
+ if (command === undefined)
110
+ break;
111
+ const removed = uninstallHook(next, command, event);
112
+ next = removed.settings;
113
+ changed = changed || removed.changed;
114
+ // `uninstallHook` matches by exact command, so a second install's copy
115
+ // of the same hook survives the first pass. Without this guard, a
116
+ // no-op removal would also spin here forever.
117
+ if (!removed.changed)
118
+ break;
119
+ }
120
+ }
121
+ const revoked = revokeSonataTools(next);
122
+ next = revoked.settings;
123
+ changed = changed || revoked.changed;
124
+ return { settings: next, changed, warnings };
125
+ }
126
+ /**
127
+ * What `sonata reset` would do, without doing any of it.
128
+ *
129
+ * Reads the filesystem — the plan has to name real paths — but writes nothing,
130
+ * so it doubles as the dry run behind the confirmation prompt.
131
+ */
132
+ export function planReset(opts) {
133
+ const scope = opts.scope ?? 'project';
134
+ const { cwd, home, packageRoot } = opts;
135
+ const base = scope === 'global' ? home : cwd;
136
+ const actions = [];
137
+ const warnings = [];
138
+ const configPath = configPathFor(scope, cwd, home);
139
+ if (existsSync(configPath)) {
140
+ actions.push({ kind: 'delete-file', label: 'config', path: configPath });
141
+ }
142
+ const agentsDir = agentsDirFor(scope, cwd, home);
143
+ const agents = sonataAgents(agentsDir);
144
+ warnings.push(...agents.warnings);
145
+ if (agents.files.length > 0) {
146
+ actions.push({
147
+ kind: 'delete-agents',
148
+ label: `${agents.files.length} generated agent${agents.files.length === 1 ? '' : 's'}`,
149
+ dir: agentsDir,
150
+ files: agents.files,
151
+ });
152
+ }
153
+ const skillDir = join(base, '.claude', 'skills', 'sonata-loop');
154
+ if (existsSync(skillDir)) {
155
+ actions.push({ kind: 'delete-dir', label: 'sonata-loop skill', path: skillDir });
156
+ }
157
+ // The CLAUDE.md block is the one artifact in a file sonata does not own, so
158
+ // it is spliced out rather than the file being removed — and a file whose
159
+ // markers do not pair up is left entirely alone, with the reason reported.
160
+ const guidancePath = scope === 'global'
161
+ ? join(home, '.claude', 'CLAUDE.md')
162
+ : join(cwd, 'CLAUDE.md');
163
+ if (existsSync(guidancePath)) {
164
+ try {
165
+ const existing = readFileSync(guidancePath, 'utf8');
166
+ const without = removeGuidance(existing);
167
+ if (without !== undefined) {
168
+ actions.push({
169
+ kind: 'write-file', label: 'the sonata block in CLAUDE.md', path: guidancePath, content: without,
170
+ });
171
+ }
172
+ }
173
+ catch (err) {
174
+ warnings.push(`left ${guidancePath} unchanged: ${err.message}`);
175
+ }
176
+ }
177
+ // Project scope writes routing into `settings.local.json` and the permission
178
+ // hook into `settings.json`; global scope puts both in one file. Deduplicated
179
+ // so the same file is never planned twice.
180
+ const settingsFiles = [...new Set([
181
+ routeSettingsFile(cwd, scope, home),
182
+ settingsPath(scope, cwd, home),
183
+ ])];
184
+ for (const path of settingsFiles) {
185
+ if (!existsSync(path))
186
+ continue;
187
+ const current = readSettings(path);
188
+ const stripped = planSettingsReset(current, packageRoot, scope);
189
+ warnings.push(...stripped.warnings);
190
+ if (stripped.changed) {
191
+ actions.push({
192
+ kind: 'write-settings', label: 'routing, hooks and the tool allow-list', path, settings: stripped.settings,
193
+ });
194
+ }
195
+ }
196
+ for (const path of [routeSessionsFile(cwd, scope, home), routeSubagentsFile(cwd, scope, home)]) {
197
+ if (existsSync(path)) {
198
+ actions.push({ kind: 'delete-file', label: 'routed-session registry', path });
199
+ }
200
+ }
201
+ return {
202
+ scope,
203
+ actions,
204
+ kept: [
205
+ `gateway keys (${join(home, '.config', 'sonata', 'credentials')}) — \`sonata auth list\``,
206
+ `the usage ledger (${join(home, '.config', 'sonata', 'usage')}) — \`sonata usage\``,
207
+ 'the ranking and pricing caches',
208
+ scope === 'global'
209
+ ? `any project's own sonata.toml`
210
+ : `the machine config (${join(home, GLOBAL_CONFIG_RELATIVE)})`,
211
+ ],
212
+ warnings,
213
+ };
214
+ }
215
+ /** The plan as the lines a user is asked to approve. */
216
+ export function describeReset(plan) {
217
+ const lines = [];
218
+ if (plan.actions.length === 0) {
219
+ lines.push(` nothing to remove — no sonata ${plan.scope} setup found`);
220
+ }
221
+ else {
222
+ lines.push(` sonata reset (${plan.scope}) will remove:`);
223
+ for (const action of plan.actions) {
224
+ lines.push(` ${action.kind === 'write-settings' || action.kind === 'write-file' ? '~' : '-'} ${action.label}`);
225
+ if (action.kind === 'delete-agents') {
226
+ // Every path, never a truncated sample. Elsewhere a "… and N more" is
227
+ // a courtesy; here the list *is* the thing being agreed to, and a
228
+ // confirmation that hides paths it then deletes is not a confirmation.
229
+ for (const f of action.files)
230
+ lines.push(` ${join(action.dir, f)}`);
231
+ }
232
+ else {
233
+ lines.push(` ${action.path}`);
234
+ // `writeSettings` copies the file aside before writing, so the reset
235
+ // touches a second path — and would overwrite a backup already there.
236
+ // Naming it keeps "the set shown is the set touched" literally true,
237
+ // and the copy is the undo for this command, so it is kept.
238
+ if (action.kind === 'write-settings') {
239
+ lines.push(` ${action.path}.bak (previous contents, overwritten if one exists)`);
240
+ }
241
+ }
242
+ }
243
+ lines.push('');
244
+ lines.push(' it keeps:');
245
+ for (const k of plan.kept)
246
+ lines.push(` · ${k}`);
247
+ }
248
+ for (const w of plan.warnings)
249
+ lines.push(` ! ${w}`);
250
+ return lines;
251
+ }
252
+ /**
253
+ * Delete one path, reporting anything that is not "it was already gone".
254
+ *
255
+ * `ENOENT` is the only benign failure: a concurrent `sonata sync` or a
256
+ * half-finished earlier reset is a race, not a fault. Every other errno —
257
+ * `EACCES`, `EPERM`, `EBUSY`, `EISDIR` — means the artifact is still there,
258
+ * and swallowing it let the command report success over a setup it had not
259
+ * removed.
260
+ */
261
+ function removePath(path, touched, failures) {
262
+ try {
263
+ unlinkSync(path);
264
+ touched.push(path);
265
+ }
266
+ catch (err) {
267
+ if (err.code === 'ENOENT')
268
+ return;
269
+ failures.push(`${path}: ${err.message}`);
270
+ }
271
+ }
272
+ /** Carry out a plan. */
273
+ export function applyReset(plan) {
274
+ const touched = [];
275
+ const failures = [];
276
+ for (const action of plan.actions) {
277
+ switch (action.kind) {
278
+ case 'delete-file':
279
+ removePath(action.path, touched, failures);
280
+ break;
281
+ case 'delete-dir':
282
+ try {
283
+ rmSync(action.path, { recursive: true, force: true });
284
+ touched.push(action.path);
285
+ }
286
+ catch (err) {
287
+ failures.push(`${action.path}: ${err.message}`);
288
+ }
289
+ break;
290
+ case 'delete-agents':
291
+ for (const f of action.files)
292
+ removePath(join(action.dir, f), touched, failures);
293
+ break;
294
+ case 'write-file':
295
+ try {
296
+ writeFileSync(action.path, action.content);
297
+ touched.push(action.path);
298
+ }
299
+ catch (err) {
300
+ failures.push(`${action.path}: ${err.message}`);
301
+ }
302
+ break;
303
+ case 'write-settings':
304
+ try {
305
+ writeSettings(action.path, action.settings);
306
+ touched.push(action.path);
307
+ }
308
+ catch (err) {
309
+ failures.push(`${action.path}: ${err.message}`);
310
+ }
311
+ break;
312
+ }
313
+ }
314
+ return { touched, failures };
315
+ }
316
+ export async function cmdReset(opts, io) {
317
+ const plan = planReset(opts);
318
+ for (const line of describeReset(plan))
319
+ io.out(line);
320
+ if (plan.actions.length === 0)
321
+ return 0;
322
+ io.out('');
323
+ if (!opts.yes && !await io.confirm('Remove these?')) {
324
+ io.out(' · nothing removed');
325
+ return 1;
326
+ }
327
+ const { touched, failures } = applyReset(plan);
328
+ io.out(` ✓ removed ${touched.length} path${touched.length === 1 ? '' : 's'}`);
329
+ if (failures.length > 0) {
330
+ // A partial reset that exits 0 is the failure this command exists to
331
+ // avoid: the user believes the setup is gone and it is not.
332
+ io.out(` ! ${failures.length} path(s) could not be removed:`);
333
+ for (const f of failures)
334
+ io.out(` ${f}`);
335
+ return 1;
336
+ }
337
+ io.out(' ❯ run `sonata init` to set up again');
338
+ return 0;
339
+ }
340
+ //# sourceMappingURL=reset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset.js","sourceRoot":"","sources":["../../src/commands/reset.ts"],"names":[],"mappings":"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"}
package/dist/detect.js CHANGED
@@ -167,12 +167,22 @@ export function staleAgents(agentsDir, expected) {
167
167
  .filter((f) => !wanted.has(f))
168
168
  .sort();
169
169
  }
170
+ /**
171
+ * Whether this agent file's *content* is sonata's.
172
+ *
173
+ * Split out from `isSonataAgent` so a caller that must distinguish "not
174
+ * sonata's" from "could not be read" can apply the same ownership test without
175
+ * reimplementing it. `sonata reset` is that caller: a file it cannot read is
176
+ * one it cannot promise to have removed.
177
+ */
178
+ export function isSonataAgentText(text) {
179
+ return text.includes('forwarding wrapper around the sonata runtime')
180
+ || text.includes(TIER_AGENT_MARKER)
181
+ || /^name:\s+native-[^\s]+/m.test(text);
182
+ }
170
183
  export function isSonataAgent(path) {
171
184
  try {
172
- const text = readFileSync(path, 'utf8');
173
- return text.includes('forwarding wrapper around the sonata runtime')
174
- || text.includes(TIER_AGENT_MARKER)
175
- || /^name:\s+native-[^\s]+/m.test(text);
185
+ return isSonataAgentText(readFileSync(path, 'utf8'));
176
186
  }
177
187
  catch {
178
188
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"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"}
@@ -65,50 +65,100 @@ function countOccurrences(haystack, needle) {
65
65
  return count;
66
66
  }
67
67
  /**
68
- * Merge the managed block into an existing `CLAUDE.md`.
68
+ * Where the managed block sits, or `undefined` when there is none.
69
69
  *
70
- * Pure so the interesting behaviour — what survives, what is replaced, what is
71
- * refused — is testable without a filesystem. `existing` is `undefined` when
72
- * the file does not exist yet.
70
+ * Extracted so the merge and the removal cannot disagree about what counts as
71
+ * a well-formed file. Every malformed shape throws here rather than being
72
+ * repaired, for the reason the markers exist at all: each available repair —
73
+ * inventing an end, reading a stray marker as prose, rewriting the first of
74
+ * two blocks — can eat a paragraph the user wrote.
73
75
  */
74
- export function mergeGuidance(existing, block) {
75
- // Only a file that does not exist is written whole. A file that exists but
76
- // holds nothing but whitespace still has bytes, and replacing them outright
77
- // would be a change outside the markers — the one thing this must never do.
78
- if (existing === undefined) {
79
- return block.endsWith('\n') ? block : `${block}\n`;
80
- }
76
+ export function locateGuidance(existing) {
81
77
  const begins = countOccurrences(existing, GUIDANCE_BEGIN);
82
78
  const ends = countOccurrences(existing, GUIDANCE_END);
83
- // Repeated markers are refused before any replacement is attempted.
84
- // `indexOf` alone would splice from the *first* begin to the *first* end,
85
- // and in a file shaped begin/…/begin/…/end that span swallows the user text
86
- // sitting between the two begins. Two complete blocks are equally malformed:
87
- // rewriting one would leave the other behind to contradict it.
79
+ // Repeated markers are refused before any splice is attempted. `indexOf`
80
+ // alone would span from the *first* begin to the *first* end, and in a file
81
+ // shaped begin/…/begin/…/end that swallows the user text sitting between the
82
+ // two begins. Two complete blocks are equally malformed: rewriting one would
83
+ // leave the other behind to contradict it.
88
84
  if (begins > 1 || ends > 1) {
89
- throw new Error(`CLAUDE.md contains more than one sonata block (${begins} "${GUIDANCE_BEGIN}", ` +
90
- `${ends} "${GUIDANCE_END}"). Leave exactly one, and run sonata init again.`);
85
+ throw new Error(`CLAUDE.md contains more than one sonata block (${begins} "${GUIDANCE_BEGIN}", `
86
+ + `${ends} "${GUIDANCE_END}"). Leave exactly one, and run the command again.`);
91
87
  }
92
88
  const begin = existing.indexOf(GUIDANCE_BEGIN);
93
89
  const end = existing.indexOf(GUIDANCE_END);
94
- // A marker without its partner means the file was hand-edited. Both repairs
95
- // available here — inventing an end, or treating the stray marker as text —
96
- // can destroy content, so neither is taken.
90
+ // A marker without its partner means the file was hand-edited.
97
91
  if (begin !== -1 && end === -1) {
98
- throw new Error(`CLAUDE.md has an unterminated sonata block: "${GUIDANCE_BEGIN}" with no matching ` +
99
- `"${GUIDANCE_END}". Restore the end marker, or delete the block, and run sonata init again.`);
92
+ throw new Error(`CLAUDE.md has an unterminated sonata block: "${GUIDANCE_BEGIN}" with no matching `
93
+ + `"${GUIDANCE_END}". Restore the end marker, or delete the block, and run the command again.`);
100
94
  }
101
95
  if (begin === -1 && end !== -1) {
102
- throw new Error(`CLAUDE.md has a stray "${GUIDANCE_END}" marker with no matching "${GUIDANCE_BEGIN}". ` +
103
- 'Remove it, and run sonata init again.');
96
+ throw new Error(`CLAUDE.md has a stray "${GUIDANCE_END}" marker with no matching "${GUIDANCE_BEGIN}". `
97
+ + 'Remove it, and run the command again.');
104
98
  }
105
99
  if (begin !== -1 && end !== -1 && end < begin) {
106
- throw new Error(`CLAUDE.md has sonata markers in the wrong order ("${GUIDANCE_END}" before ` +
107
- `"${GUIDANCE_BEGIN}"). Fix or delete the block, and run sonata init again.`);
100
+ throw new Error(`CLAUDE.md has sonata markers in the wrong order ("${GUIDANCE_END}" before `
101
+ + `"${GUIDANCE_BEGIN}"). Fix or delete the block, and run the command again.`);
102
+ }
103
+ return begin === -1 ? undefined : { begin, end: end + GUIDANCE_END.length };
104
+ }
105
+ /**
106
+ * Drop the managed block, leaving every other byte where it was.
107
+ *
108
+ * `undefined` means there was nothing to remove — the caller reports "no block
109
+ * here" rather than rewriting a file it did not change.
110
+ *
111
+ * The one liberty taken is dropping the blank line an append separated the
112
+ * block by, and it is deliberately narrow: *exactly* two trailing newlines
113
+ * collapse to one, and nothing else is touched. A wider rule (`/\n{2,}$/`)
114
+ * ate user content — a whitespace-only `CLAUDE.md` of three newlines came back
115
+ * as one, which is bytes outside the markers, the one thing this must never
116
+ * change. Without any rule, every merge/remove cycle would leave another blank
117
+ * line behind.
118
+ *
119
+ * One case is genuinely unrecoverable: a file that ended *without* a trailing
120
+ * newline was separated by two, and two is also what a file ending in one
121
+ * newline produces. Those are indistinguishable after the fact, so such a file
122
+ * comes back with a single trailing newline it did not have. Adding one byte
123
+ * is the safe side of an ambiguity whose other side deletes one.
124
+ */
125
+ export function removeGuidance(existing) {
126
+ const at = locateGuidance(existing);
127
+ if (at === undefined)
128
+ return undefined;
129
+ const head = existing.slice(0, at.begin);
130
+ const tail = existing.slice(at.end);
131
+ // A block with real content after it was put there by the *replace* path,
132
+ // which preserves both surrounding spans byte-for-byte and inserts no
133
+ // separator of its own. So there is nothing of sonata's to take back:
134
+ // splicing out the markers and leaving every other byte alone is the exact
135
+ // inverse. Touching the whitespace here is how user-authored blank lines on
136
+ // either side got eaten.
137
+ if (tail.trim() !== '')
138
+ return `${head}${tail}`;
139
+ // Otherwise the block sits at the end, where `mergeGuidance` appended it
140
+ // after a separator it chose from the file's own trailing newlines. That
141
+ // separator, and the block's trailing newline, are sonata's to remove.
142
+ return /(^|[^\n])\n\n$/.test(head) ? head.slice(0, -1) : head;
143
+ }
144
+ /**
145
+ * Merge the managed block into an existing `CLAUDE.md`.
146
+ *
147
+ * Pure so the interesting behaviour — what survives, what is replaced, what is
148
+ * refused — is testable without a filesystem. `existing` is `undefined` when
149
+ * the file does not exist yet.
150
+ */
151
+ export function mergeGuidance(existing, block) {
152
+ // Only a file that does not exist is written whole. A file that exists but
153
+ // holds nothing but whitespace still has bytes, and replacing them outright
154
+ // would be a change outside the markers — the one thing this must never do.
155
+ if (existing === undefined) {
156
+ return block.endsWith('\n') ? block : `${block}\n`;
108
157
  }
109
- if (begin !== -1 && end !== -1) {
110
- const before = existing.slice(0, begin);
111
- const after = existing.slice(end + GUIDANCE_END.length);
158
+ const at = locateGuidance(existing);
159
+ if (at !== undefined) {
160
+ const before = existing.slice(0, at.begin);
161
+ const after = existing.slice(at.end);
112
162
  return `${before}${block.trimEnd()}${after}`;
113
163
  }
114
164
  // No block yet: append, leaving every existing byte where it was. An empty
@@ -1 +1 @@
1
- {"version":3,"file":"guidance.js","sourceRoot":"","sources":["../../src/init/guidance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guidance.js","sourceRoot":"","sources":["../../src/init/guidance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,uBAAuB,CAAC;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,cAAc;QACd,kBAAkB;QAClB,EAAE;QACF,6EAA6E;QAC7E,2EAA2E;QAC3E,4EAA4E;QAC5E,+EAA+E;QAC/E,oBAAoB;QACpB,EAAE;QACF,wEAAwE;QACxE,6EAA6E;QAC7E,6EAA6E;QAC7E,aAAa;QACb,EAAE;QACF,+EAA+E;QAC/E,6EAA6E;QAC7E,yEAAyE;QACzE,YAAY;QACZ,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB,EAAE,MAAc;IACxD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACrG,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEtD,yEAAyE;IACzE,4EAA4E;IAC5E,6EAA6E;IAC7E,6EAA6E;IAC7E,2CAA2C;IAC3C,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,kDAAkD,MAAM,KAAK,cAAc,KAAK;cAC9E,GAAG,IAAI,KAAK,YAAY,mDAAmD,CAC9E,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAE3C,+DAA+D;IAC/D,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,gDAAgD,cAAc,qBAAqB;cACjF,IAAI,YAAY,4EAA4E,CAC/F,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,0BAA0B,YAAY,8BAA8B,cAAc,KAAK;cACrF,uCAAuC,CAC1C,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,qDAAqD,YAAY,WAAW;cAC1E,IAAI,cAAc,yDAAyD,CAC9E,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;AAC9E,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAEpC,0EAA0E;IAC1E,sEAAsE;IACtE,sEAAsE;IACtE,2EAA2E;IAC3E,4EAA4E;IAC5E,yBAAyB;IACzB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;IAEhD,yEAAyE;IACzE,yEAAyE;IACzE,uEAAuE;IACvE,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,QAA4B,EAAE,KAAa;IACvE,2EAA2E;IAC3E,4EAA4E;IAC5E,4EAA4E;IAC5E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC;IACrD,CAAC;IAED,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;IAC/C,CAAC;IAED,2EAA2E;IAC3E,yEAAyE;IACzE,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC;QACrC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7E,MAAM,MAAM,GAAG,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,EAAE,CAAC;IACjD,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;AACxD,CAAC"}