carrick 0.3.65 → 0.3.67

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 (42) hide show
  1. package/README.md +34 -0
  2. package/bin/carrick.mjs +9 -1
  3. package/dist/cli.d.ts +20 -2
  4. package/dist/cli.js +24 -2
  5. package/dist/cli.js.map +1 -1
  6. package/dist/contract.d.ts +40 -0
  7. package/dist/contract.js +4 -0
  8. package/dist/contract.js.map +1 -1
  9. package/dist/diagnostics.js +21 -2
  10. package/dist/diagnostics.js.map +1 -1
  11. package/dist/hook/post-edit.js +5 -1
  12. package/dist/hook/post-edit.js.map +1 -1
  13. package/dist/init/connect.js +10 -8
  14. package/dist/init/connect.js.map +1 -1
  15. package/dist/init/hosted.d.ts +23 -1
  16. package/dist/init/hosted.js +41 -32
  17. package/dist/init/hosted.js.map +1 -1
  18. package/dist/init/mcp.d.ts +35 -2
  19. package/dist/init/mcp.js +142 -15
  20. package/dist/init/mcp.js.map +1 -1
  21. package/dist/init/output.d.ts +71 -0
  22. package/dist/init/output.js +173 -0
  23. package/dist/init/output.js.map +1 -0
  24. package/dist/init/remove.d.ts +41 -0
  25. package/dist/init/remove.js +264 -0
  26. package/dist/init/remove.js.map +1 -0
  27. package/dist/init/repos.js +2 -2
  28. package/dist/init/repos.js.map +1 -1
  29. package/dist/init/run.d.ts +44 -30
  30. package/dist/init/run.js +160 -218
  31. package/dist/init/run.js.map +1 -1
  32. package/dist/init/settings.d.ts +15 -0
  33. package/dist/init/settings.js +38 -0
  34. package/dist/init/settings.js.map +1 -1
  35. package/dist/render.d.ts +24 -0
  36. package/dist/render.js +80 -1
  37. package/dist/render.js.map +1 -1
  38. package/package.json +8 -6
  39. package/sidecar/dist/src/capture/machinery.d.ts +10 -0
  40. package/sidecar/dist/src/capture/machinery.js +19 -9
  41. package/sidecar/dist/src/type-inferrer.d.ts +66 -4
  42. package/sidecar/dist/src/type-inferrer.js +249 -18
@@ -0,0 +1,173 @@
1
+ // What `carrick init` puts on the terminal, and how.
2
+ //
3
+ // One line per thing that happened (carrick#1026). The reasoning, the
4
+ // alternatives and the by-hand paths live in the quickstart
5
+ // (https://docs.carrick.tools/quickstart); what stays here is the record of
6
+ // this run: what was signed in as, what was connected, what was derived, what
7
+ // was configured, and what this machine now holds.
8
+ //
9
+ // Three markers, and nothing else carries state:
10
+ //
11
+ // ◇ done — a thing this run did
12
+ // ▲ warning — done, but something is off, and the line says what to do
13
+ // ■ refusal — not done, and the line says why
14
+ //
15
+ // They are `@clack/prompts`'s own symbols, so the interactive rendering is the
16
+ // library's and the plain one is the same characters without its gutter.
17
+ //
18
+ // Two renderings, chosen by the terminal, never by a flag:
19
+ //
20
+ // - **Interactive**, when stdout is a TTY: clack draws the gutter, colours the
21
+ // markers, spins during the hosted download and asks the confirm.
22
+ // - **Plain**, otherwise — CI, an agent's shell, a pipe. The same lines, one
23
+ // per line, no spinner, no colour, no box. Every executable test runs this
24
+ // one, so the lines a test pins are the lines a scripted caller sees.
25
+ //
26
+ // A spinner writes and rewrites one line, so anything else printing while it
27
+ // spins corrupts it: `step()` owns the terminal for the duration of the work
28
+ // it wraps, and the hosted read is quiet underneath it (see `hosted.ts`).
29
+ //
30
+ // A step also OWNS the line its work is reported on. `spinner.stop(text)` in
31
+ // 1.8.1 takes no status code, so a step that stopped with its own label and
32
+ // left the caller to print the outcome spent two lines on the one thing, and a
33
+ // step that stopped with the outcome printed a warning under a done marker.
34
+ // The spinner's three finishers carry the three markers exactly — `stop` is
35
+ // `◇`, `error` is `▲`, `cancel` is `■` — so the work's report goes to `step`
36
+ // and the spinner stops as whatever the work turned out to be (carrick#1032).
37
+ import readline from "node:readline/promises";
38
+ import * as clack from "@clack/prompts";
39
+ import pc from "picocolors";
40
+ export const DONE = "◇";
41
+ export const WARN = "▲";
42
+ export const REFUSE = "■";
43
+ export const DOCS = "https://docs.carrick.tools/quickstart";
44
+ /** Plain text: the same lines, no spinner, no colour, no gutter. */
45
+ export function plainOutput(write = (text) => process.stdout.write(text)) {
46
+ const line = (marker, text) => {
47
+ for (const entry of text.split("\n"))
48
+ write(`${marker} ${entry}\n`);
49
+ };
50
+ const marker = (kind) => kind === "done" ? DONE : kind === "warn" ? WARN : REFUSE;
51
+ return {
52
+ done: (text) => line(DONE, text),
53
+ warn: (text) => line(WARN, text),
54
+ refuse: (text) => line(REFUSE, text),
55
+ say: (text) => write(`${text}\n`),
56
+ note: (title, body) => {
57
+ write("\n");
58
+ write(`${title}\n`);
59
+ for (const entry of body)
60
+ write(` ${entry}\n`);
61
+ write("\n");
62
+ },
63
+ // No spinner here, so the label was never printed: the step is exactly the
64
+ // one line its work reports, which is what the plain rendering already
65
+ // spent on it.
66
+ step: async (_label, work, report) => {
67
+ const value = await work();
68
+ const outcome = report(value);
69
+ line(marker(outcome.kind), outcome.text);
70
+ return value;
71
+ },
72
+ // No colour, ever. picocolors turns itself ON when `CI` is set, which is
73
+ // exactly the run whose output is captured as text, so the decision is made
74
+ // here from the terminal rather than by the library from the environment.
75
+ accent: (text) => text,
76
+ // No terminal to ask with. `init` refuses before this can be reached
77
+ // without `--yes`; a stdin that is a TTY under a piped stdout still gets a
78
+ // real question rather than a silent yes.
79
+ confirm: async (question) => {
80
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
81
+ try {
82
+ const answer = await rl.question(`${question} [Y/n] `);
83
+ return answer.trim() === "" || /^y(es)?$/i.test(answer.trim());
84
+ }
85
+ finally {
86
+ rl.close();
87
+ }
88
+ },
89
+ ask: async (question) => {
90
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
91
+ try {
92
+ return (await rl.question(`${question}\n> `)).trim();
93
+ }
94
+ finally {
95
+ rl.close();
96
+ }
97
+ },
98
+ quiet: false,
99
+ };
100
+ }
101
+ /**
102
+ * clack's rendering, for a terminal.
103
+ *
104
+ * `output` is where the rendering goes. It is threaded into every clack call
105
+ * rather than left to the library's default because that is the only way this
106
+ * rendering can be read back: a terminal's own bytes are not capturable, and
107
+ * the plain one — which every executable test spawns — is a different renderer
108
+ * with different lines. A test that hands this a stream is the only thing that
109
+ * sees the interactive markers at all (carrick#1032).
110
+ */
111
+ export function interactiveOutput(output = process.stdout) {
112
+ return {
113
+ done: (text) => clack.log.step(text, { output }),
114
+ warn: (text) => clack.log.warn(text, { output }),
115
+ refuse: (text) => clack.log.error(text, { output }),
116
+ say: (text) => clack.log.message(text, { output }),
117
+ note: (title, body) => clack.note(body.join("\n"), title, { output }),
118
+ // The spinner's finishers ARE the markers: `stop` prints `◇`, `error`
119
+ // prints `▲` and `cancel` prints `■`, so the step ends on one line with
120
+ // the marker its work earned. Stopping with the label instead cost the
121
+ // hosted read two lines, and stopping with the outcome text alone put
122
+ // warnings and refusals under a done marker (carrick#1032).
123
+ step: async (label, work, report) => {
124
+ const spinner = clack.spinner({ output });
125
+ spinner.start(label);
126
+ let value;
127
+ try {
128
+ value = await work();
129
+ }
130
+ catch (error) {
131
+ // The step did not finish, so it is a refusal: the caller prints why.
132
+ spinner.cancel(label);
133
+ throw error;
134
+ }
135
+ const outcome = report(value);
136
+ if (outcome.kind === "done")
137
+ spinner.stop(outcome.text);
138
+ else if (outcome.kind === "warn")
139
+ spinner.error(outcome.text);
140
+ else
141
+ spinner.cancel(outcome.text);
142
+ return value;
143
+ },
144
+ // A cancelled prompt is a no: `init` returns 0 and writes nothing, which
145
+ // is what answering "n" has always done.
146
+ confirm: async (question) => {
147
+ const answer = await clack.confirm({ message: question, initialValue: true, output });
148
+ return clack.isCancel(answer) ? false : answer;
149
+ },
150
+ ask: async (question) => {
151
+ const answer = await clack.text({ message: question, output });
152
+ return clack.isCancel(answer) ? "" : answer.trim();
153
+ },
154
+ accent: (text) => pc.dim(text),
155
+ quiet: true,
156
+ };
157
+ }
158
+ /**
159
+ * The rendering this terminal gets.
160
+ *
161
+ * stdout decides, not stdin: a run whose output is piped or captured is read
162
+ * as text by whatever holds the other end, and a spinner's rewrites and box
163
+ * art are noise there even when a terminal is still attached to the input.
164
+ *
165
+ * A width of zero is the second half of the test, and it is not hypothetical: a
166
+ * pty with no window size — which is what `script` and several agent harnesses
167
+ * hand a child — reports `isTTY` true and `columns` 0, and clack then wraps its
168
+ * box to one character per line. Measured on macOS, 2026-09-13 (carrick#1026).
169
+ */
170
+ export function createOutput(tty = process.stdout.isTTY === true && (process.stdout.columns ?? 0) > 0) {
171
+ return tty ? interactiveOutput() : plainOutput();
172
+ }
173
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/init/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { type McpRemoval } from "./mcp.ts";
2
+ import { type InitOutput } from "./output.ts";
3
+ export type RemoveOptions = {
4
+ workspace: string;
5
+ /** Leave the saved credential in place: this machine stays signed in. */
6
+ keepLogin: boolean;
7
+ };
8
+ export declare function parseArgs(argv: string[], cwd?: string): RemoveOptions | string;
9
+ /** The settings files a workspace can hold our hook entries in. */
10
+ export declare const SETTINGS_FILES: string[];
11
+ /**
12
+ * The files the scaffold pull request adds to a repository.
13
+ *
14
+ * The list is the scaffold tool's own (`carrick-cloud`
15
+ * `lambdas/mcp-server/src/tools/scaffold.ts`): the workflow, the agent skill,
16
+ * the three hook-pack scripts and the config. Only the ones that exist are
17
+ * printed, so the `git rm` line is one a reader can paste.
18
+ */
19
+ export declare const SCAFFOLD_FILES: string[];
20
+ export type RepoLeftovers = {
21
+ /** Whole files, relative to the workspace, for one `git rm`. */
22
+ files: string[];
23
+ /** What has to be edited by hand, one line each. */
24
+ sections: string[];
25
+ };
26
+ /**
27
+ * Everything the scaffold left in the repositories under this workspace.
28
+ *
29
+ * A workspace is one repository or a folder of them, the same two shapes init
30
+ * takes, so the scan is this directory and its immediate children that hold a
31
+ * `.git` — a file counts as well as a directory, because a linked worktree's
32
+ * `.git` is a file (carrick#975). Nothing here is opened unless it exists, and
33
+ * nothing here is changed.
34
+ */
35
+ export declare function repoLeftovers(workspace: string): RepoLeftovers;
36
+ /** One `◇` line per client this run changed, and a warning for what it could not. */
37
+ export declare function mcpRemovalLines(removals: McpRemoval[]): {
38
+ done: string[];
39
+ warn: string[];
40
+ };
41
+ export declare function remove(argv: string[], out?: InitOutput): Promise<number>;
@@ -0,0 +1,264 @@
1
+ // Undoing `carrick init`, on this machine.
2
+ //
3
+ // An install that can state its own undo is the courtesy that makes people
4
+ // willing to try it (carrick#1034), and init now writes in six places: the
5
+ // hook entries in a workspace's `.claude` settings, an MCP server entry in
6
+ // each agent client's own configuration, the `.carrick` directory, and the
7
+ // credential in the user's configuration directory.
8
+ //
9
+ // Every step here is the inverse of a writer in this folder, and each pair
10
+ // lives in one file so the two cannot drift: `mergeCarrickHooks` /
11
+ // `removeCarrickHooks` in `settings.ts`, `mergeServerEntry` /
12
+ // `removeServerEntry` and `connectMcpClients` / `disconnectMcpClients` in
13
+ // `mcp.ts`, `writeProposal` / the `.carrick` removal below, `saveCredential` /
14
+ // `removeCredential` in `../auth/credentials.ts`.
15
+ //
16
+ // What it does NOT do is edit a tracked file. The scaffold pull request put
17
+ // files in the repository and a repository is version controlled: those are
18
+ // listed with the `git rm` line that removes them, and the sections that were
19
+ // merged into files someone else owns are named for a human to delete. A
20
+ // command that rewrote a committed workflow or an AGENTS.md would be
21
+ // destroying work this command cannot read.
22
+ //
23
+ // It runs no scan and never asks for the scanner binary: everything it touches
24
+ // is a file this package wrote.
25
+ import fs from "node:fs";
26
+ import path from "node:path";
27
+ import { removeCredential, credentialPath } from "../auth/credentials.js";
28
+ import { disconnectMcpClients } from "./mcp.js";
29
+ import { removeCarrickHooks } from "./settings.js";
30
+ import { createOutput, DOCS } from "./output.js";
31
+ export function parseArgs(argv, cwd = process.cwd()) {
32
+ const options = { workspace: cwd, keepLogin: false };
33
+ for (let index = 0; index < argv.length; index += 1) {
34
+ const argument = argv[index];
35
+ switch (argument) {
36
+ case "--keep-login":
37
+ options.keepLogin = true;
38
+ break;
39
+ case "--workspace":
40
+ case "-w": {
41
+ const value = argv[index + 1];
42
+ if (!value)
43
+ return "--workspace needs a directory";
44
+ options.workspace = path.resolve(cwd, value);
45
+ index += 1;
46
+ break;
47
+ }
48
+ case "--help":
49
+ case "-h":
50
+ return help();
51
+ default:
52
+ if (argument?.startsWith("-"))
53
+ return `unknown option for \`carrick remove\`: ${argument}`;
54
+ options.workspace = path.resolve(cwd, argument ?? ".");
55
+ }
56
+ }
57
+ return options;
58
+ }
59
+ function help() {
60
+ return [
61
+ "carrick remove [DIRECTORY] [--keep-login]",
62
+ "",
63
+ "Undo what carrick init wrote on this machine: the Carrick hook entries in",
64
+ "this folder's .claude settings, the carrick MCP server in each agent",
65
+ "client's configuration, the .carrick directory, and the saved credential.",
66
+ "Other hooks, other MCP servers and the settings files themselves are left",
67
+ "as they are. Files the scaffold added to the repository are listed with the",
68
+ "git rm line that removes them; this command never edits a tracked file.",
69
+ "",
70
+ " -w, --workspace DIR The folder init was run in (default: this one)",
71
+ " --keep-login Leave the saved credential; remove everything else",
72
+ "",
73
+ `What each of those things is, and what it does: ${DOCS}`,
74
+ ].join("\n");
75
+ }
76
+ /** The settings files a workspace can hold our hook entries in. */
77
+ export const SETTINGS_FILES = [
78
+ path.join(".claude", "settings.json"),
79
+ path.join(".claude", "settings.local.json"),
80
+ ];
81
+ /**
82
+ * The files the scaffold pull request adds to a repository.
83
+ *
84
+ * The list is the scaffold tool's own (`carrick-cloud`
85
+ * `lambdas/mcp-server/src/tools/scaffold.ts`): the workflow, the agent skill,
86
+ * the three hook-pack scripts and the config. Only the ones that exist are
87
+ * printed, so the `git rm` line is one a reader can paste.
88
+ */
89
+ export const SCAFFOLD_FILES = [
90
+ path.join(".github", "workflows", "carrick.yml"),
91
+ path.join(".claude", "skills", "carrick", "SKILL.md"),
92
+ path.join(".claude", "session-start.sh"),
93
+ path.join(".claude", "turn-reminder.sh"),
94
+ path.join(".claude", "search-gate.sh"),
95
+ "carrick.json",
96
+ ];
97
+ /** The files the scaffold merged INTO, which only their owner can unpick. */
98
+ const SECTION_CARRIERS = [
99
+ { file: "AGENTS.md", holds: (body) => /^##\s+Carrick\s*$/m.test(body), what: 'the "## Carrick" section' },
100
+ { file: "CLAUDE.md", holds: (body) => /^##\s+Carrick\s*$/m.test(body), what: 'the "## Carrick" section' },
101
+ {
102
+ file: path.join(".claude", "settings.json"),
103
+ holds: (body) => body.includes("$CLAUDE_PROJECT_DIR/.claude/"),
104
+ what: "the hook-pack entries the scaffold merged in",
105
+ },
106
+ { file: ".gitignore", holds: (body) => body.includes("!.claude/"), what: "the .claude negations" },
107
+ ];
108
+ /**
109
+ * Everything the scaffold left in the repositories under this workspace.
110
+ *
111
+ * A workspace is one repository or a folder of them, the same two shapes init
112
+ * takes, so the scan is this directory and its immediate children that hold a
113
+ * `.git` — a file counts as well as a directory, because a linked worktree's
114
+ * `.git` is a file (carrick#975). Nothing here is opened unless it exists, and
115
+ * nothing here is changed.
116
+ */
117
+ export function repoLeftovers(workspace) {
118
+ const roots = [workspace];
119
+ let children = [];
120
+ try {
121
+ children = fs.readdirSync(workspace, { withFileTypes: true });
122
+ }
123
+ catch {
124
+ children = [];
125
+ }
126
+ for (const child of children) {
127
+ if (!child.isDirectory() || child.name.startsWith("."))
128
+ continue;
129
+ const candidate = path.join(workspace, child.name);
130
+ if (fs.existsSync(path.join(candidate, ".git")))
131
+ roots.push(candidate);
132
+ }
133
+ const files = [];
134
+ const sections = [];
135
+ for (const root of roots) {
136
+ for (const relative of SCAFFOLD_FILES) {
137
+ const target = path.join(root, relative);
138
+ if (fs.existsSync(target))
139
+ files.push(path.relative(workspace, target) || relative);
140
+ }
141
+ for (const carrier of SECTION_CARRIERS) {
142
+ const target = path.join(root, carrier.file);
143
+ let body;
144
+ try {
145
+ body = fs.readFileSync(target, "utf8");
146
+ }
147
+ catch {
148
+ continue;
149
+ }
150
+ if (!carrier.holds(body))
151
+ continue;
152
+ sections.push(`${path.relative(workspace, target) || carrier.file}: ${carrier.what}`);
153
+ }
154
+ }
155
+ return { files, sections };
156
+ }
157
+ /** One `◇` line per client this run changed, and a warning for what it could not. */
158
+ export function mcpRemovalLines(removals) {
159
+ const done = [];
160
+ const warn = [];
161
+ for (const removal of removals) {
162
+ if (removal.state === "removed") {
163
+ done.push(removal.client === "Claude Code"
164
+ ? `MCP server removed for ${removal.client}`
165
+ : `MCP server removed for ${removal.client}: ${removal.detail}`);
166
+ }
167
+ else if (removal.state === "kept") {
168
+ warn.push(`${removal.client}: ${removal.detail}`);
169
+ }
170
+ else if (removal.state === "failed") {
171
+ warn.push(`MCP server not removed for ${removal.client}: ${removal.detail}`);
172
+ }
173
+ }
174
+ return { done, warn };
175
+ }
176
+ /** Strip our hook entries from one settings file. Null when there was nothing. */
177
+ function removeHooks(file) {
178
+ if (!fs.existsSync(file))
179
+ return null;
180
+ const existing = fs.readFileSync(file, "utf8");
181
+ const cleaned = removeCarrickHooks(existing);
182
+ if (!cleaned.changed)
183
+ return null;
184
+ fs.writeFileSync(file, cleaned.body);
185
+ return file;
186
+ }
187
+ export async function remove(argv, out = createOutput()) {
188
+ const parsed = parseArgs(argv);
189
+ if (typeof parsed === "string") {
190
+ process.stdout.write(`${parsed}\n`);
191
+ return parsed.startsWith("carrick remove") ? 0 : 2;
192
+ }
193
+ const { workspace } = parsed;
194
+ if (!fs.existsSync(workspace)) {
195
+ process.stderr.write(`carrick remove: ${workspace} is not a directory on this machine\n`);
196
+ return 1;
197
+ }
198
+ // Each step reports its own failure and the run carries on: a settings file
199
+ // someone hand-edited into invalid JSON must not leave the credential and
200
+ // the MCP entries behind.
201
+ let removed = 0;
202
+ for (const relative of SETTINGS_FILES) {
203
+ const file = path.join(workspace, relative);
204
+ try {
205
+ if (removeHooks(file) !== null) {
206
+ out.done(`Carrick hook entries removed from ${relative}`);
207
+ removed += 1;
208
+ }
209
+ }
210
+ catch (error) {
211
+ out.refuse(`Could not read ${relative}: ${error.message}. Remove the carrick hook entries there by hand.`);
212
+ }
213
+ }
214
+ const { done, warn } = mcpRemovalLines(disconnectMcpClients());
215
+ for (const line of done) {
216
+ out.done(line);
217
+ removed += 1;
218
+ }
219
+ for (const line of warn)
220
+ out.warn(line);
221
+ const carrick = path.join(workspace, ".carrick");
222
+ if (fs.existsSync(carrick)) {
223
+ try {
224
+ fs.rmSync(carrick, { recursive: true, force: true });
225
+ out.done(".carrick removed, with the proposal and the index in it");
226
+ removed += 1;
227
+ }
228
+ catch (error) {
229
+ out.refuse(`Could not remove ${carrick}: ${error.message}`);
230
+ }
231
+ }
232
+ if (parsed.keepLogin) {
233
+ out.say(`This machine stays signed in; the credential is ${credentialPath()}.`);
234
+ }
235
+ else {
236
+ try {
237
+ if (removeCredential()) {
238
+ out.done("Signed out: the saved credential is gone");
239
+ removed += 1;
240
+ out.say("Revoke the key itself at https://app.carrick.tools/account.");
241
+ }
242
+ if (process.env["CARRICK_TOKEN"] !== undefined) {
243
+ out.warn("CARRICK_TOKEN still signs this shell in; unset it to finish signing out.");
244
+ }
245
+ }
246
+ catch (error) {
247
+ out.refuse(error.message);
248
+ }
249
+ }
250
+ if (removed === 0)
251
+ out.say("Nothing left to remove on this machine.");
252
+ const leftovers = repoLeftovers(workspace);
253
+ if (leftovers.files.length > 0 || leftovers.sections.length > 0) {
254
+ out.say("");
255
+ out.say("In the repository, which this command does not edit:");
256
+ if (leftovers.files.length > 0)
257
+ out.say(` git rm ${leftovers.files.join(" ")}`);
258
+ for (const section of leftovers.sections)
259
+ out.say(` by hand — ${section}`);
260
+ }
261
+ out.note("Last step, when nothing else on this machine needs it", ["npm uninstall -g carrick"]);
262
+ return 0;
263
+ }
264
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/init/remove.ts"],"names":[],"mappings":"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"}
@@ -41,8 +41,8 @@ export const PROPOSAL_FILE = path.join(".carrick", "proposal.json");
41
41
  * writes the proposal before any index exists. Same bytes so neither rewrites
42
42
  * the other's file. Keep the two in step.
43
43
  */
44
- const SELF_IGNORE = "# Written by Carrick. Everything here is derived from your source and is\n" +
45
- "# rebuilt by re-running `carrick index`.\n*\n";
44
+ const SELF_IGNORE = "# Written by Carrick. Everything here is derived from your source and the\n" +
45
+ "# hosted index, and `carrick refresh` rebuilds it.\n*\n";
46
46
  /**
47
47
  * Write the derived proposal where the scaffold tool's agent reads it.
48
48
  *
@@ -1 +1 @@
1
- {"version":3,"file":"repos.js","sourceRoot":"","sources":["../../src/init/repos.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repos.js","sourceRoot":"","sources":["../../src/init/repos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAClJ,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IACxB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3F,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACnG,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3F,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;CACxK,CAAC,CAAC;AAgBH,qFAAqF;AACrF,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,uCAAuC,CAAC,CAAC;IAC/F,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE;QACtF,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;KAChF,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7F,sEAAsE;IACtE,gEAAgE;IAChE,wEAAwE;IACxE,gDAAgD;IAChD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,IAAI,6CAA6C,CAAC,CAAC;IACjJ,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,4GAA4G,CAAC,CAAC;IACnJ,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACxD,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AAEpE;;;;;;;GAOG;AACH,MAAM,WAAW,GACf,6EAA6E;IAC7E,yDAAyD,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,OAAyB;IACxE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACnD,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC;IAC9F,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC;IAChE,OAAO,aAAa,CAAC;AACvB,CAAC;AA2BD,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAClH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3D,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,WAAW,CAAC,IAAY;IAC/B,4EAA4E;IAC5E,2BAA2B;IAC3B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACzE,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;QAC5C,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;KACpC,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1F,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC,CAAC;AAED,MAAM,aAAa,GAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AAExE,gFAAgF;AAChF,SAAS,WAAW,CAAC,MAAc;IACjC,IAAI,IAAY,CAAC;IACjB,IAAI,QAAgB,CAAC;IACrB,IAAI,GAAY,CAAC;IACjB,yEAAyE;IACzE,6EAA6E;IAC7E,yEAAyE;IACzE,IAAI,+BAA+B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,IAAI,GAAQ,CAAC;QACb,IAAI,CAAC;YAAC,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;QACrD,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACrE,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QACpB,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QACxB,GAAG,GAAG,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,iEAAiE;QACjE,MAAM,GAAG,GAAG,kCAAkC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QACf,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QACnB,GAAG,GAAG,IAAI,CAAC;IACb,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAChE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;AAC5F,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,QAAuB,aAAa;IAC7E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;IACzG,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,MAAM,sBAAsB,EAAE,CAAC;IAC3G,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IAClC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,MAAM,2BAA2B,EAAE,CAAC;IACtG,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5F,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,MAAM,UAAU,IAAI,kBAAkB,EAAE,CAAC;IAC3G,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,MAAM,oBAAoB,IAAI,gCAAgC,EAAE,CAAC;IACnI,CAAC;IACD,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,YAAY;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAChG,OAAO;QACL,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QACV,MAAM;QACN,OAAO,EAAE,cAAc,MAAM,oBAAoB,IAAI,6BAA6B,QAAQ,mBAAmB;KAC9G,CAAC;AACJ,CAAC"}