carrick 0.3.57 → 0.3.59
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 +117 -26
- package/bin/carrick.mjs +13 -2
- package/dist/auth/credentials.d.ts +14 -0
- package/dist/auth/credentials.js +86 -0
- package/dist/auth/credentials.js.map +1 -0
- package/dist/auth/oauth.d.ts +11 -0
- package/dist/auth/oauth.js +119 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/auth/read.d.ts +139 -0
- package/dist/auth/read.js +44 -0
- package/dist/auth/read.js.map +1 -0
- package/dist/auth/run.d.ts +12 -0
- package/dist/auth/run.js +68 -0
- package/dist/auth/run.js.map +1 -0
- package/dist/contract.d.ts +10 -0
- package/dist/contract.js +3 -0
- package/dist/contract.js.map +1 -1
- package/dist/definition.d.ts +33 -0
- package/dist/definition.js +107 -0
- package/dist/definition.js.map +1 -0
- package/dist/diagnostics.d.ts +72 -3
- package/dist/diagnostics.js +275 -55
- package/dist/diagnostics.js.map +1 -1
- package/dist/hook/refresh.d.ts +32 -0
- package/dist/hook/refresh.js +138 -0
- package/dist/hook/refresh.js.map +1 -0
- package/dist/hook/session-start.js +13 -0
- package/dist/hook/session-start.js.map +1 -1
- package/dist/init/connect.d.ts +17 -0
- package/dist/init/connect.js +120 -0
- package/dist/init/connect.js.map +1 -0
- package/dist/init/mcp.d.ts +50 -0
- package/dist/init/mcp.js +235 -0
- package/dist/init/mcp.js.map +1 -0
- package/dist/init/projects.d.ts +46 -0
- package/dist/init/projects.js +137 -0
- package/dist/init/projects.js.map +1 -0
- package/dist/init/repos.d.ts +113 -19
- package/dist/init/repos.js +60 -39
- package/dist/init/repos.js.map +1 -1
- package/dist/init/run.d.ts +16 -0
- package/dist/init/run.js +243 -61
- package/dist/init/run.js.map +1 -1
- package/dist/init/settings.d.ts +1 -1
- package/dist/init/settings.js +1 -1
- package/dist/init/settings.js.map +1 -1
- package/dist/lens.d.ts +41 -0
- package/dist/lens.js +116 -0
- package/dist/lens.js.map +1 -0
- package/dist/server.js +327 -24
- package/dist/server.js.map +1 -1
- package/dist/surfaces.d.ts +28 -0
- package/dist/surfaces.js +70 -0
- package/dist/surfaces.js.map +1 -0
- package/package.json +6 -6
- package/sidecar/dist/src/capture/deno-project.d.ts +41 -0
- package/sidecar/dist/src/capture/deno-project.js +513 -0
- package/sidecar/dist/src/capture/index.d.ts +1 -0
- package/sidecar/dist/src/capture/index.js +60 -19
- package/sidecar/dist/src/capture/self-check.d.ts +2 -0
- package/sidecar/dist/src/capture/self-check.js +3 -2
- package/sidecar/dist/src/project-loader.js +22 -1
- package/dist/init/identity.d.ts +0 -20
- package/dist/init/identity.js +0 -60
- package/dist/init/identity.js.map +0 -1
package/dist/init/run.js
CHANGED
|
@@ -1,27 +1,40 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
// It does the four things that are otherwise four installs — the repo list,
|
|
4
|
-
// the first index, the agent hooks, and the editor line — and prints the two
|
|
5
|
-
// it cannot do for you. Everything it writes is a file you can read and edit
|
|
6
|
-
// afterwards; nothing here is state only Carrick understands.
|
|
7
|
-
//
|
|
8
|
-
// Re-running it updates rather than duplicates: the repo list keeps the order
|
|
9
|
-
// and the hand-written entries it already had, and the hook entries are merged
|
|
10
|
-
// by command rather than replacing the settings file's `hooks` key.
|
|
1
|
+
// Authenticated setup; Rust owns the workspace and service proposal.
|
|
11
2
|
import fs from "node:fs";
|
|
12
3
|
import path from "node:path";
|
|
13
4
|
import readline from "node:readline/promises";
|
|
14
5
|
import { spawnSync } from "node:child_process";
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
6
|
+
import { readCredential } from "../auth/credentials.js";
|
|
7
|
+
import { signIn } from "../auth/run.js";
|
|
8
|
+
import { resolveRepos } from "../auth/read.js";
|
|
9
|
+
import { deriveWorkspace, writeConfigs, githubRemote } from "./repos.js";
|
|
10
|
+
import { connectRepos, reposAreInProject } from "./connect.js";
|
|
11
|
+
import { listProjects, createProject, projectLines } from "./projects.js";
|
|
12
|
+
import { connectMcpClients, mcpLines } from "./mcp.js";
|
|
17
13
|
import { hookCommand, mergeCarrickHooks } from "./settings.js";
|
|
18
14
|
import { renderTemplate } from "../templates.js";
|
|
19
15
|
import { resolveNativeBinary, nativeEnv, packageRoot } from "../native.js";
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
const EXTENSION_ID = "carrick-tools.carrick";
|
|
17
|
+
/**
|
|
18
|
+
* The prompt that makes an agent write this repo's setup files.
|
|
19
|
+
*
|
|
20
|
+
* A copy, and deliberately a verbatim one: the source of truth is
|
|
21
|
+
* `AGENT_SCAFFOLD_PROMPT` in the dashboard (carrick-cloud
|
|
22
|
+
* `app/src/lib/onboarding.ts`), whose own test checks every filename in it
|
|
23
|
+
* against what the `scaffold` MCP tool actually returns. It is printed here so
|
|
24
|
+
* the terminal path ends where the dashboard path ends — with the one prompt
|
|
25
|
+
* that turns a signed-in workspace into a repo that scans itself in CI
|
|
26
|
+
* (carrick#955). Keep the two in step; the tool's instructions, not this text,
|
|
27
|
+
* decide what gets written.
|
|
28
|
+
*/
|
|
29
|
+
const AGENT_SCAFFOLD_PROMPT = "Run the carrick scaffold tool, passing this repo's owner/repo from " +
|
|
30
|
+
"`git remote get-url origin` as `repo`, and follow the instructions it " +
|
|
31
|
+
"returns: create each file at its path, populate carrick.json by scanning " +
|
|
32
|
+
"this repo for its service(s) and the env vars / domains they call (use a " +
|
|
33
|
+
"nested services config if it's a monorepo), and add the Carrick section " +
|
|
34
|
+
"to AGENTS.md if this repo already has one. Answer the closing checklist " +
|
|
35
|
+
"before you open the PR.";
|
|
23
36
|
export function parseArgs(argv, cwd = process.cwd()) {
|
|
24
|
-
const options = { workspace: cwd, assumeYes: false, skipIndex: false };
|
|
37
|
+
const options = { workspace: cwd, project: null, assumeYes: false, skipIndex: false };
|
|
25
38
|
for (let index = 0; index < argv.length; index += 1) {
|
|
26
39
|
const argument = argv[index];
|
|
27
40
|
switch (argument) {
|
|
@@ -32,6 +45,17 @@ export function parseArgs(argv, cwd = process.cwd()) {
|
|
|
32
45
|
case "--skip-index":
|
|
33
46
|
options.skipIndex = true;
|
|
34
47
|
break;
|
|
48
|
+
case "--project": {
|
|
49
|
+
const value = argv[index + 1];
|
|
50
|
+
if (!value)
|
|
51
|
+
return "--project needs a slug";
|
|
52
|
+
if (!/^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){2,31}$/.test(value)) {
|
|
53
|
+
return `invalid project slug "${value}": use 3-32 lowercase letters, digits, and single hyphens`;
|
|
54
|
+
}
|
|
55
|
+
options.project = value;
|
|
56
|
+
index += 1;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
35
59
|
case "--workspace":
|
|
36
60
|
case "-w": {
|
|
37
61
|
const value = argv[index + 1];
|
|
@@ -54,12 +78,17 @@ export function parseArgs(argv, cwd = process.cwd()) {
|
|
|
54
78
|
}
|
|
55
79
|
function help() {
|
|
56
80
|
return [
|
|
57
|
-
"carrick init [DIRECTORY]",
|
|
81
|
+
"carrick init [DIRECTORY] [--project SLUG]",
|
|
58
82
|
"",
|
|
59
|
-
"
|
|
60
|
-
"and the
|
|
83
|
+
"Sign in (here, or beforehand with carrick login), then configure services,",
|
|
84
|
+
"hooks, the MCP connection and the first index in a repository or a folder",
|
|
85
|
+
"of repos.",
|
|
86
|
+
"With --project, a project missing from the workspace is offered for",
|
|
87
|
+
"creation here; the browser assigns the repos and the CLI waits for Carrick",
|
|
88
|
+
"to verify the assignment.",
|
|
61
89
|
"",
|
|
62
90
|
" -w, --workspace DIR The folder holding the repos (default: this one)",
|
|
91
|
+
" --project SLUG Require these repos in this Carrick project",
|
|
63
92
|
" -y, --yes Take the repo list as proposed",
|
|
64
93
|
" --skip-index Write the files and print the lines, index later",
|
|
65
94
|
].join("\n");
|
|
@@ -92,6 +121,70 @@ function onPath(command) {
|
|
|
92
121
|
});
|
|
93
122
|
return probe.status === 0;
|
|
94
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* The editor lines, one line per editor that is on the machine.
|
|
126
|
+
*
|
|
127
|
+
* `--install-extension <id>` resolves the id against that editor's own gallery,
|
|
128
|
+
* and the three editors below read three different ones: VS Code the VS Code
|
|
129
|
+
* Marketplace, Cursor and Windsurf each their own. The extension is published
|
|
130
|
+
* to all three, so the id is a command every one of them can run
|
|
131
|
+
* (carrick#915). Any other editor gets the server's command and no claim about
|
|
132
|
+
* the editor: the per-editor results table in `plugin/TEST-PLAN.md` section 6
|
|
133
|
+
* is still empty.
|
|
134
|
+
*
|
|
135
|
+
* `onPath` is injected so a test can state each machine.
|
|
136
|
+
*/
|
|
137
|
+
export function editorLines(onPath) {
|
|
138
|
+
const lines = [];
|
|
139
|
+
for (const [command, editor] of [
|
|
140
|
+
["code", "VS Code"],
|
|
141
|
+
["cursor", "Cursor"],
|
|
142
|
+
["windsurf", "Windsurf"],
|
|
143
|
+
]) {
|
|
144
|
+
if (!onPath(command))
|
|
145
|
+
continue;
|
|
146
|
+
lines.push(` ${editor}, for diagnostics in the Problems panel:`);
|
|
147
|
+
lines.push(` ${command} --install-extension ${EXTENSION_ID}`);
|
|
148
|
+
}
|
|
149
|
+
if (lines.length === 0) {
|
|
150
|
+
lines.push(" Any editor with an LSP client starts the server itself as `carrick lsp --stdio`.");
|
|
151
|
+
}
|
|
152
|
+
return lines;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Make sure the named project exists, from the terminal where that is possible.
|
|
156
|
+
*
|
|
157
|
+
* Returns whether this run can state that the project exists. `false` is the
|
|
158
|
+
* honest answer for every case it could not settle — an API without the
|
|
159
|
+
* actions, a declined offer, a refused create — and the caller then prints
|
|
160
|
+
* today's browser instructions, which include creating it.
|
|
161
|
+
*/
|
|
162
|
+
async function ensureProject(token, slug, options) {
|
|
163
|
+
const { say } = options;
|
|
164
|
+
const projects = await listProjects(token);
|
|
165
|
+
if (projects === null)
|
|
166
|
+
return false;
|
|
167
|
+
if (projects.some((project) => project.slug === slug && !project.archived)) {
|
|
168
|
+
say(`Project "${slug}" is in this workspace.`);
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
say(projects.length === 0
|
|
172
|
+
? "This workspace has no projects yet."
|
|
173
|
+
: "Projects in this workspace:");
|
|
174
|
+
for (const line of projectLines(projects))
|
|
175
|
+
say(line);
|
|
176
|
+
const create = options.assumeYes || (options.interactive && (await confirm(`Create project "${slug}"?`)));
|
|
177
|
+
if (!create)
|
|
178
|
+
return false;
|
|
179
|
+
const outcome = await createProject(token, slug);
|
|
180
|
+
if (outcome.kind === "created") {
|
|
181
|
+
say(`Created project "${slug}".`);
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
if (outcome.kind === "refused")
|
|
185
|
+
say(`Carrick did not create "${slug}": ${outcome.message}`);
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
95
188
|
export async function init(argv) {
|
|
96
189
|
const parsed = parseArgs(argv);
|
|
97
190
|
if (typeof parsed === "string") {
|
|
@@ -103,48 +196,127 @@ export async function init(argv) {
|
|
|
103
196
|
process.stderr.write(`carrick init: ${workspace} is not a directory on this machine\n`);
|
|
104
197
|
return 1;
|
|
105
198
|
}
|
|
106
|
-
|
|
107
|
-
//
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
199
|
+
const interactive = process.stdin.isTTY === true;
|
|
200
|
+
// Authentication and all derivation validation precede local writes.
|
|
201
|
+
let plan;
|
|
202
|
+
try {
|
|
203
|
+
// A machine that has never signed in signs in here rather than being told
|
|
204
|
+
// to run another command: `carrick login` is the same browser round trip,
|
|
205
|
+
// and refusing to take it was the first thing a new install did
|
|
206
|
+
// (carrick#955). Without a terminal there is no browser to hand it to.
|
|
207
|
+
let credential = readCredential();
|
|
208
|
+
if (!credential) {
|
|
209
|
+
if (!interactive) {
|
|
210
|
+
throw new Error("carrick init requires a Carrick login. Run carrick login, or set CARRICK_TOKEN.");
|
|
211
|
+
}
|
|
212
|
+
say("This machine is not signed in to Carrick.");
|
|
213
|
+
credential = await signIn(say);
|
|
214
|
+
}
|
|
215
|
+
plan = deriveWorkspace(workspace);
|
|
216
|
+
const repoIdentities = plan.repos.map((repo) => ({ path: repo.path, name: githubRemote(repo.path) }));
|
|
217
|
+
const names = [...new Set(repoIdentities.map((repo) => repo.name).filter((name) => name !== null))];
|
|
218
|
+
if (names.length > 200)
|
|
219
|
+
throw new Error("This workspace has more than 200 GitHub repos. Initialise smaller workspace groups.");
|
|
220
|
+
const missingIdentities = repoIdentities.filter((repo) => repo.name === null);
|
|
221
|
+
if (parsed.project && missingIdentities.length > 0) {
|
|
222
|
+
throw new Error(`--project ${parsed.project} cannot verify ${missingIdentities.map((repo) => repo.path).join(", ")} because ${missingIdentities.length === 1 ? "it has" : "they have"} no GitHub origin. No project assignment was verified.`);
|
|
223
|
+
}
|
|
224
|
+
if (parsed.project && names.length === 0) {
|
|
225
|
+
throw new Error(`--project ${parsed.project} found no GitHub repos to verify.`);
|
|
226
|
+
}
|
|
227
|
+
if (parsed.project) {
|
|
228
|
+
say(`Repos requested for project "${parsed.project}":`);
|
|
229
|
+
for (const name of names)
|
|
230
|
+
say(` ${name}`);
|
|
231
|
+
}
|
|
232
|
+
const initial = await resolveRepos(credential.token, names);
|
|
233
|
+
// The project half of the browser round trip, where this API can do it
|
|
234
|
+
// from here. Assignment still belongs to the browser, so this only ever
|
|
235
|
+
// removes the "create the project" step from the wait.
|
|
236
|
+
const projectExists = parsed.project && !reposAreInProject(initial, names, parsed.project)
|
|
237
|
+
? await ensureProject(credential.token, parsed.project, {
|
|
238
|
+
say,
|
|
239
|
+
interactive,
|
|
240
|
+
assumeYes: parsed.assumeYes,
|
|
241
|
+
})
|
|
242
|
+
: false;
|
|
243
|
+
const identity = await connectRepos(credential.token, names, initial, {
|
|
244
|
+
interactive,
|
|
245
|
+
project: parsed.project ?? undefined,
|
|
246
|
+
projectExists,
|
|
247
|
+
say,
|
|
248
|
+
});
|
|
249
|
+
if (parsed.project && !reposAreInProject(identity, names, parsed.project)) {
|
|
250
|
+
throw new Error(`Project "${parsed.project}" was not verified for every requested repo. Complete the browser steps and run carrick init --project ${parsed.project} again.`);
|
|
251
|
+
}
|
|
252
|
+
say(`Carrick workspace: ${identity.workspace.slug}`);
|
|
253
|
+
if (identity.allowance_sentence)
|
|
254
|
+
say(identity.allowance_sentence);
|
|
255
|
+
for (const repo of identity.repos) {
|
|
256
|
+
if (!repo.connected)
|
|
257
|
+
say(`${repo.full_name} is not connected to this Carrick workspace.`);
|
|
258
|
+
else if (repo.services.length === 0) {
|
|
259
|
+
say(`${repo.full_name} is connected and has no hosted index yet.`);
|
|
260
|
+
say(" Add the workflow in that repo:");
|
|
261
|
+
say(" mkdir -p .github/workflows");
|
|
262
|
+
say(" carrick templates workflow > .github/workflows/carrick.yml");
|
|
263
|
+
}
|
|
264
|
+
}
|
|
113
265
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
// 2. The repos, proposed and confirmed.
|
|
117
|
-
const workspaceFile = path.join(workspace, WORKSPACE_FILE);
|
|
118
|
-
const existing = fs.existsSync(workspaceFile) ? fs.readFileSync(workspaceFile, "utf8") : null;
|
|
119
|
-
const found = findRepos(workspace);
|
|
120
|
-
const merged = mergeWorkspace(existing, found);
|
|
121
|
-
if (merged.repos.length === 0) {
|
|
122
|
-
process.stderr.write(`carrick init: no repos in ${workspace}. Carrick indexes the directories beside each other, so run it in the folder that holds them, or pass one: carrick init ~/code\n`);
|
|
266
|
+
catch (error) {
|
|
267
|
+
process.stderr.write(`carrick init: ${error.message}\n`);
|
|
123
268
|
return 1;
|
|
124
269
|
}
|
|
125
|
-
say(`Repos to index, in ${workspace}:`);
|
|
126
|
-
|
|
127
|
-
|
|
270
|
+
say(`Repos to index, in ${plan.workspace} (${plan.repos_detected_by}):`);
|
|
271
|
+
if (plan.parent_proposal) {
|
|
272
|
+
const parent = plan.parent_proposal;
|
|
273
|
+
say(`The parent folder ${parent.directory} holds ${parent.repos.length} repo(s): ${parent.repos.join(", ")}. Run carrick init .. to initialise that workspace.`);
|
|
128
274
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
say(`Nothing written. Edit ${WORKSPACE_FILE} yourself and run carrick index.`);
|
|
134
|
-
return 0;
|
|
275
|
+
for (const repo of plan.repos) {
|
|
276
|
+
say(` ${repo.path} (${repo.reason})`);
|
|
277
|
+
for (const service of repo.services) {
|
|
278
|
+
say(` ${service.serviceName ?? "<repository>"}: directory ${service.directory ?? "."}, tsconfig ${service.tsconfig ?? "scanner default"}`);
|
|
135
279
|
}
|
|
280
|
+
for (const warning of repo.warnings)
|
|
281
|
+
say(` ${warning}`);
|
|
282
|
+
}
|
|
283
|
+
for (const missing of plan.missing)
|
|
284
|
+
say(`Missing workspace override: ${missing}`);
|
|
285
|
+
if (!parsed.assumeYes) {
|
|
286
|
+
if (!process.stdin.isTTY) {
|
|
287
|
+
process.stderr.write("carrick init: use --yes to accept this proposal without a terminal.\n");
|
|
288
|
+
return 1;
|
|
289
|
+
}
|
|
290
|
+
if (!await confirm("Create missing configs and configure hooks?"))
|
|
291
|
+
return 0;
|
|
292
|
+
}
|
|
293
|
+
try {
|
|
294
|
+
for (const result of writeConfigs(plan))
|
|
295
|
+
say(`${result.created ? "wrote" : "unchanged"} ${result.path}`);
|
|
296
|
+
// Revalidate any file that appeared between preview and exclusive create.
|
|
297
|
+
deriveWorkspace(workspace);
|
|
136
298
|
}
|
|
137
|
-
|
|
138
|
-
|
|
299
|
+
catch (error) {
|
|
300
|
+
process.stderr.write(`carrick init: ${error.message}\n`);
|
|
301
|
+
return 1;
|
|
302
|
+
}
|
|
303
|
+
say("Review carrick.json service boundaries and shared includes before committing it.");
|
|
139
304
|
// 3. The agent hooks. Merged by command: this file may already hold a user's
|
|
140
305
|
// own hooks, or the hook pack the hosted index installs.
|
|
141
|
-
const settingsFile = path.join(workspace, SETTINGS_FILE);
|
|
142
|
-
const settings = fs.existsSync(settingsFile) ? fs.readFileSync(settingsFile, "utf8") : null;
|
|
143
306
|
const command = hookCommand({ onPath });
|
|
307
|
+
const settingsName = path.join(".claude", command.bare ? "settings.json" : "settings.local.json");
|
|
308
|
+
const settingsFile = path.join(workspace, settingsName);
|
|
144
309
|
try {
|
|
310
|
+
const settings = fs.existsSync(settingsFile) ? fs.readFileSync(settingsFile, "utf8") : null;
|
|
311
|
+
const otherFile = path.join(workspace, ".claude", command.bare ? "settings.local.json" : "settings.json");
|
|
312
|
+
const other = fs.existsSync(otherFile) ? fs.readFileSync(otherFile, "utf8") : null;
|
|
313
|
+
const cleaned = other === null ? null : mergeCarrickHooks(other, null);
|
|
145
314
|
const hooks = mergeCarrickHooks(settings, command.command);
|
|
315
|
+
// Validate both documents before migrating our entries between them.
|
|
316
|
+
if (cleaned?.changed)
|
|
317
|
+
writeIfChanged(otherFile, cleaned.body);
|
|
146
318
|
const wroteHooks = writeIfChanged(settingsFile, hooks.body);
|
|
147
|
-
say(`${wroteHooks === "written" ? "wrote" : "unchanged"} ${
|
|
319
|
+
say(`${wroteHooks === "written" ? "wrote" : "unchanged"} ${settingsName}`);
|
|
148
320
|
if (!command.bare) {
|
|
149
321
|
say(` \`carrick\` is not on PATH here, so those hooks name this install: ${command.command}.`);
|
|
150
322
|
say(" An npx run leaves nothing on PATH afterwards, and a hook that cannot find carrick");
|
|
@@ -153,7 +325,7 @@ export async function init(argv) {
|
|
|
153
325
|
}
|
|
154
326
|
}
|
|
155
327
|
catch (error) {
|
|
156
|
-
say(`
|
|
328
|
+
say(`Could not configure Carrick hooks: ${error.message}. Fix the settings files and run carrick init again.`);
|
|
157
329
|
}
|
|
158
330
|
// 4. The index itself.
|
|
159
331
|
if (parsed.skipIndex) {
|
|
@@ -176,22 +348,32 @@ export async function init(argv) {
|
|
|
176
348
|
return scan.status ?? 1;
|
|
177
349
|
}
|
|
178
350
|
}
|
|
179
|
-
// 5. The
|
|
351
|
+
// 5. The MCP connection, for work that crosses repos this machine does not
|
|
352
|
+
// hold. Configured here for every client this machine has, rather than
|
|
353
|
+
// printed for one of them (carrick#955).
|
|
354
|
+
say();
|
|
355
|
+
say("Next:");
|
|
180
356
|
say();
|
|
181
|
-
|
|
357
|
+
for (const line of mcpLines(connectMcpClients()))
|
|
358
|
+
say(line);
|
|
182
359
|
say();
|
|
183
|
-
say(" The
|
|
184
|
-
say(` ${MCP_LINE}`);
|
|
360
|
+
say(" The CI check, once per repo (it needs no secret). Paste this to your agent:");
|
|
185
361
|
say();
|
|
186
|
-
say(
|
|
362
|
+
say(` ${AGENT_SCAFFOLD_PROMPT}`);
|
|
363
|
+
say();
|
|
364
|
+
say(" Or write the workflow yourself:");
|
|
365
|
+
say(" mkdir -p .github/workflows");
|
|
187
366
|
say(" carrick templates workflow > .github/workflows/carrick.yml");
|
|
188
367
|
say();
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
368
|
+
say(" The first scan on the repo's default branch writes the hosted index. A session");
|
|
369
|
+
say(" started in this folder afterwards picks it up on its own; by hand it is:");
|
|
370
|
+
say(" carrick refresh");
|
|
371
|
+
say(" carrick status");
|
|
372
|
+
say();
|
|
373
|
+
for (const line of editorLines(onPath))
|
|
374
|
+
say(line);
|
|
375
|
+
say();
|
|
376
|
+
say(`Start Claude Code in this folder — the hooks above are ${settingsName} here, and`);
|
|
195
377
|
say("the index covers every repo in it. The hooks need no plugin; the language server does:");
|
|
196
378
|
const plugin = path.join(packageRoot(), "plugin");
|
|
197
379
|
say(` claude --plugin-dir ${fs.existsSync(plugin) ? plugin : "<carrick checkout>/plugin"}`);
|
package/dist/init/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/init/run.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/init/run.ts"],"names":[],"mappings":"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"}
|
package/dist/init/settings.d.ts
CHANGED
|
@@ -47,4 +47,4 @@ export type MergeResult = {
|
|
|
47
47
|
* Throws when the existing file is not JSON: a settings file a user has hand
|
|
48
48
|
* edited into invalid JSON is a thing to report, never a thing to overwrite.
|
|
49
49
|
*/
|
|
50
|
-
export declare function mergeCarrickHooks(existing: string | null, command?: string): MergeResult;
|
|
50
|
+
export declare function mergeCarrickHooks(existing: string | null, command?: string | null): MergeResult;
|
package/dist/init/settings.js
CHANGED
|
@@ -117,7 +117,7 @@ export function mergeCarrickHooks(existing, command = "carrick") {
|
|
|
117
117
|
for (const [event, groups] of Object.entries(hooksBefore)) {
|
|
118
118
|
hooks[event] = withoutOurs(groups);
|
|
119
119
|
}
|
|
120
|
-
for (const [event, groups] of Object.entries(carrickHooks(command))) {
|
|
120
|
+
for (const [event, groups] of Object.entries(command === null ? {} : carrickHooks(command))) {
|
|
121
121
|
hooks[event] = [...(hooks[event] ?? []), ...groups];
|
|
122
122
|
}
|
|
123
123
|
// An event that only ever held our entry, and no longer does, leaves no
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/init/settings.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/init/settings.ts"],"names":[],"mappings":"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"}
|
package/dist/lens.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type CheckResult } from "./contract.ts";
|
|
2
|
+
import { rangeAt } from "./diagnostics.ts";
|
|
3
|
+
import { type Surfaces } from "./surfaces.ts";
|
|
4
|
+
/** The command a client invokes when a lens is clicked. */
|
|
5
|
+
export declare const SHOW_COUNTERPARTS = "carrick.showCounterparts";
|
|
6
|
+
export type LensCommand = {
|
|
7
|
+
title: string;
|
|
8
|
+
command: string;
|
|
9
|
+
arguments?: unknown[];
|
|
10
|
+
};
|
|
11
|
+
export type CodeLens = {
|
|
12
|
+
range: ReturnType<typeof rangeAt>;
|
|
13
|
+
command?: LensCommand;
|
|
14
|
+
};
|
|
15
|
+
/** What the command is handed: enough to list the other side and open it. */
|
|
16
|
+
export type CounterpartList = {
|
|
17
|
+
/** The row's own operation, e.g. `GET /api/users/:id`. */
|
|
18
|
+
operation: string;
|
|
19
|
+
/** Absolute paths, already checked to exist, one per site. */
|
|
20
|
+
sites: Array<{
|
|
21
|
+
role: string;
|
|
22
|
+
service: string | null;
|
|
23
|
+
/** Absolute; null when the counterpart is not on this disk. */
|
|
24
|
+
path: string | null;
|
|
25
|
+
line: number | null;
|
|
26
|
+
}>;
|
|
27
|
+
/** The service's boundary lines, so an empty list reads correctly. */
|
|
28
|
+
boundary: string[];
|
|
29
|
+
};
|
|
30
|
+
export type LensOptions = {
|
|
31
|
+
/** Injectable for tests. */
|
|
32
|
+
exists?: (target: string) => boolean;
|
|
33
|
+
surfaces?: Surfaces;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* One lens per row that the index knows something actionable about.
|
|
37
|
+
*
|
|
38
|
+
* Never one per line of a handler, never one for a row whose line the payload
|
|
39
|
+
* did not state, and never one that would have to say zero.
|
|
40
|
+
*/
|
|
41
|
+
export declare function toCodeLenses(result: CheckResult, options?: LensOptions): CodeLens[];
|
package/dist/lens.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// Code lenses: the one place a person sees what Carrick knows without asking.
|
|
2
|
+
//
|
|
3
|
+
// carrick#880, and the design record of 2026-09-09, candidate 1. Humans only:
|
|
4
|
+
// an agent cannot invoke a lens, so nothing here reaches the agent channel and
|
|
5
|
+
// the whole of it is judged as an editor surface.
|
|
6
|
+
//
|
|
7
|
+
// ZERO SUPPRESSION is the rule the rest of this file exists to keep. A laptop
|
|
8
|
+
// index holds facts only, so a route with no indexed consumer is the ordinary
|
|
9
|
+
// state and not a finding: a lens reading "0 consumers" would say "nobody calls
|
|
10
|
+
// this" where it means "not indexed here". So a lens is rendered only where the
|
|
11
|
+
// index holds at least one counterpart or one non-compatible verdict for that
|
|
12
|
+
// row, and the boundary answers the question of why the others are bare. The
|
|
13
|
+
// general form of the rule, from the same record: nothing states a number it
|
|
14
|
+
// cannot attribute.
|
|
15
|
+
//
|
|
16
|
+
// A candidate row produces no lens at all. Candidates are the model's reading
|
|
17
|
+
// and cannot reach a laptop index today; when they can, they are counted in a
|
|
18
|
+
// clause of their own and never inside the mismatch count, because the mismatch
|
|
19
|
+
// count is the number a person acts on.
|
|
20
|
+
//
|
|
21
|
+
// The lens command carries the boundary in its arguments rather than in a
|
|
22
|
+
// tooltip: `vscode-languageclient`'s `asCommand` copies title, command and
|
|
23
|
+
// arguments and drops everything else, so a tooltip set here would never reach
|
|
24
|
+
// a VS Code user. The extension shows those lines when the lens is clicked, and
|
|
25
|
+
// the status bar item from carrick#879 is where the boundary lives for a person
|
|
26
|
+
// the rest of the time.
|
|
27
|
+
import { isCandidate, } from "./contract.js";
|
|
28
|
+
import { boundaryFor } from "./render.js";
|
|
29
|
+
import { rangeAt, resolveCounterpart } from "./diagnostics.js";
|
|
30
|
+
import { DEFAULT_SURFACES } from "./surfaces.js";
|
|
31
|
+
/** The command a client invokes when a lens is clicked. */
|
|
32
|
+
export const SHOW_COUNTERPARTS = "carrick.showCounterparts";
|
|
33
|
+
/** A verdict that states a result other than `compatible`, on this one row. */
|
|
34
|
+
function isMismatch(item) {
|
|
35
|
+
const verdict = item.verdict;
|
|
36
|
+
return Boolean(verdict && verdict.result != null && verdict.result !== "compatible");
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* How many of the other side there are, in the word for what they are.
|
|
40
|
+
*
|
|
41
|
+
* One role gets its own noun; a mixed row gets the neutral one. Nothing here
|
|
42
|
+
* can render a zero: the caller has already decided there is something to say.
|
|
43
|
+
*/
|
|
44
|
+
function counterpartClause(counterparts) {
|
|
45
|
+
const roles = new Set(counterparts.map((counterpart) => counterpart.role));
|
|
46
|
+
const count = counterparts.length;
|
|
47
|
+
const plural = count === 1 ? "" : "s";
|
|
48
|
+
if (roles.size === 1 && roles.has("consumer"))
|
|
49
|
+
return `${count} consumer${plural}`;
|
|
50
|
+
if (roles.size === 1 && roles.has("producer"))
|
|
51
|
+
return `${count} producer${plural}`;
|
|
52
|
+
if (roles.size === 1 && roles.has("peer"))
|
|
53
|
+
return `${count} service${plural} on the same contract`;
|
|
54
|
+
return `${count} counterpart${plural}`;
|
|
55
|
+
}
|
|
56
|
+
function operationOf(item) {
|
|
57
|
+
return [item.method, item.path].filter(Boolean).join(" ") || item.kind;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* One lens per row that the index knows something actionable about.
|
|
61
|
+
*
|
|
62
|
+
* Never one per line of a handler, never one for a row whose line the payload
|
|
63
|
+
* did not state, and never one that would have to say zero.
|
|
64
|
+
*/
|
|
65
|
+
export function toCodeLenses(result, options = {}) {
|
|
66
|
+
const surfaces = options.surfaces ?? DEFAULT_SURFACES;
|
|
67
|
+
if (!surfaces.codeLens)
|
|
68
|
+
return [];
|
|
69
|
+
if (result.error)
|
|
70
|
+
return [];
|
|
71
|
+
const exists = options.exists;
|
|
72
|
+
// `carrick.boundary` off takes the boundary off this surface too, or the
|
|
73
|
+
// switch would only half work.
|
|
74
|
+
const boundary = surfaces.boundary ? boundaryFor(result) : [];
|
|
75
|
+
const lenses = [];
|
|
76
|
+
for (const item of result.items ?? []) {
|
|
77
|
+
// A row the model alone states informs a pull surface and asserts nothing
|
|
78
|
+
// on a pushed one. A lens is rendered without being asked for, so no.
|
|
79
|
+
if (isCandidate(item))
|
|
80
|
+
continue;
|
|
81
|
+
if (typeof item.line !== "number")
|
|
82
|
+
continue;
|
|
83
|
+
const counterparts = item.counterparts ?? [];
|
|
84
|
+
const mismatch = isMismatch(item);
|
|
85
|
+
if (counterparts.length === 0 && !mismatch)
|
|
86
|
+
continue;
|
|
87
|
+
const clauses = [];
|
|
88
|
+
if (counterparts.length > 0)
|
|
89
|
+
clauses.push(counterpartClause(counterparts));
|
|
90
|
+
// One row carries one verdict, so the count is one or none. It is stated as
|
|
91
|
+
// a count anyway, because it is the number a person acts on and the clause
|
|
92
|
+
// has to stay countable when candidates gain one of their own.
|
|
93
|
+
if (mismatch)
|
|
94
|
+
clauses.push("1 mismatch");
|
|
95
|
+
const payload = {
|
|
96
|
+
operation: operationOf(item),
|
|
97
|
+
sites: counterparts.map((counterpart) => ({
|
|
98
|
+
role: counterpart.role,
|
|
99
|
+
service: counterpart.service ?? null,
|
|
100
|
+
path: resolveCounterpart(counterpart, exists),
|
|
101
|
+
line: counterpart.line ?? null,
|
|
102
|
+
})),
|
|
103
|
+
boundary,
|
|
104
|
+
};
|
|
105
|
+
lenses.push({
|
|
106
|
+
range: rangeAt(item.line, item.col),
|
|
107
|
+
command: {
|
|
108
|
+
title: clauses.join(", "),
|
|
109
|
+
command: SHOW_COUNTERPARTS,
|
|
110
|
+
arguments: [payload],
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
return lenses;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=lens.js.map
|
package/dist/lens.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lens.js","sourceRoot":"","sources":["../src/lens.ts"],"names":[],"mappings":"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"}
|