@nanonets/graft 0.18.0 → 0.20.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.
- package/README.md +10 -5
- package/dist/app/brain-build-process.d.ts +22 -0
- package/dist/app/brain-build-process.d.ts.map +1 -0
- package/dist/app/brain-build-process.js +129 -0
- package/dist/app/brain-build-process.js.map +1 -0
- package/dist/app/brain-build-worker.d.ts +35 -0
- package/dist/app/brain-build-worker.d.ts.map +1 -0
- package/dist/app/brain-build-worker.js +56 -0
- package/dist/app/brain-build-worker.js.map +1 -0
- package/dist/app/brain-build.d.ts +97 -3
- package/dist/app/brain-build.d.ts.map +1 -1
- package/dist/app/brain-build.js +148 -39
- package/dist/app/brain-build.js.map +1 -1
- package/dist/app/history.d.ts +2 -2
- package/dist/app/history.d.ts.map +1 -1
- package/dist/app/history.js +9 -6
- package/dist/app/history.js.map +1 -1
- package/dist/app/identity.d.ts +23 -0
- package/dist/app/identity.d.ts.map +1 -1
- package/dist/app/identity.js +47 -0
- package/dist/app/identity.js.map +1 -1
- package/dist/app/main.js +2 -0
- package/dist/app/main.js.map +1 -1
- package/dist/app/server.d.ts +10 -1
- package/dist/app/server.d.ts.map +1 -1
- package/dist/app/server.js +55 -2
- package/dist/app/server.js.map +1 -1
- package/dist/app/sources.d.ts +1 -1
- package/dist/app/sources.d.ts.map +1 -1
- package/dist/app/sources.js +3 -2
- package/dist/app/sources.js.map +1 -1
- package/dist/ask/ask.js +1 -1
- package/dist/brain/claude-md.d.ts +59 -0
- package/dist/brain/claude-md.d.ts.map +1 -0
- package/dist/brain/claude-md.js +170 -0
- package/dist/brain/claude-md.js.map +1 -0
- package/dist/brain/connect.d.ts +3 -3
- package/dist/brain/connect.js +7 -7
- package/dist/brain/link.d.ts +8 -1
- package/dist/brain/link.d.ts.map +1 -1
- package/dist/brain/link.js +11 -1
- package/dist/brain/link.js.map +1 -1
- package/dist/brain/push.d.ts +29 -1
- package/dist/brain/push.d.ts.map +1 -1
- package/dist/brain/push.js +80 -2
- package/dist/brain/push.js.map +1 -1
- package/dist/brain/signup.d.ts +73 -0
- package/dist/brain/signup.d.ts.map +1 -0
- package/dist/brain/signup.js +186 -0
- package/dist/brain/signup.js.map +1 -0
- package/dist/brain/watch.d.ts +136 -0
- package/dist/brain/watch.d.ts.map +1 -0
- package/dist/brain/watch.js +172 -0
- package/dist/brain/watch.js.map +1 -0
- package/dist/claude/init.d.ts.map +1 -1
- package/dist/claude/init.js +3 -1
- package/dist/claude/init.js.map +1 -1
- package/dist/cli.js +236 -33
- package/dist/cli.js.map +1 -1
- package/dist/context/node-file.d.ts +4 -10
- package/dist/context/node-file.d.ts.map +1 -1
- package/dist/context/node-file.js +6 -2
- package/dist/context/node-file.js.map +1 -1
- package/dist/legacy-args.d.ts +12 -0
- package/dist/legacy-args.d.ts.map +1 -0
- package/dist/legacy-args.js +31 -0
- package/dist/legacy-args.js.map +1 -0
- package/dist/telemetry/contract.d.ts +12 -0
- package/dist/telemetry/contract.d.ts.map +1 -1
- package/dist/telemetry/contract.js +19 -0
- package/dist/telemetry/contract.js.map +1 -1
- package/dist/upkeep.d.ts +1 -1
- package/dist/upkeep.js +1 -1
- package/package.json +1 -1
package/dist/app/server.js
CHANGED
|
@@ -20,7 +20,8 @@ import { createServer } from "node:http";
|
|
|
20
20
|
import { timingSafeEqual } from "node:crypto";
|
|
21
21
|
import { jobKey, reviewJobFor } from "./events.js";
|
|
22
22
|
import { InstallationTokens, verifySignature } from "./identity.js";
|
|
23
|
-
import {
|
|
23
|
+
import { checkRepoAccess, RepoNotAccessibleError } from "./brain-build.js";
|
|
24
|
+
import { buildRepoInChildProcess } from "./brain-build-process.js";
|
|
24
25
|
import { PageStore } from "./pages.js";
|
|
25
26
|
import { WorkQueue } from "./queue.js";
|
|
26
27
|
import { reviewInChildProcess } from "./review-process.js";
|
|
@@ -96,6 +97,51 @@ export function createApp(config, seams = {}) {
|
|
|
96
97
|
log(`${jobKey(decided.job)}: queued${decided.job.fromFork ? " (fork)" : ""}`);
|
|
97
98
|
return send(res, 202, "application/json", JSON.stringify({ queued: true }));
|
|
98
99
|
}
|
|
100
|
+
// Can we read this repository? The cheap question, answered on its own.
|
|
101
|
+
//
|
|
102
|
+
// Same secret as /brain/build, because it is the same caller and the same
|
|
103
|
+
// trust. Kept separate from it because it costs a second where the build
|
|
104
|
+
// costs minutes, and the platform needs the answer before it can decide
|
|
105
|
+
// which screen to show.
|
|
106
|
+
if (req.method === "POST" && url.pathname === "/brain/access") {
|
|
107
|
+
if (!config.brainBuildSecret)
|
|
108
|
+
return send(res, 404, "text/plain", "not found");
|
|
109
|
+
if (!bearerMatches(header(req, "authorization"), config.brainBuildSecret)) {
|
|
110
|
+
return send(res, 401, "text/plain", "unauthorized");
|
|
111
|
+
}
|
|
112
|
+
const body = await readBody(req);
|
|
113
|
+
if (body === null)
|
|
114
|
+
return send(res, 413, "text/plain", "payload too large");
|
|
115
|
+
let ask;
|
|
116
|
+
try {
|
|
117
|
+
ask = JSON.parse(body);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return send(res, 400, "text/plain", "bad json");
|
|
121
|
+
}
|
|
122
|
+
if (!ask.owner || !ask.repo) {
|
|
123
|
+
return send(res, 400, "application/json", JSON.stringify({ error: "owner and repo are required" }));
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
const access = await (seams.brainAccess ?? checkRepoAccess)({ owner: ask.owner, repo: ask.repo }, {
|
|
127
|
+
creds: config,
|
|
128
|
+
fetch: fetchImpl,
|
|
129
|
+
api: config.api,
|
|
130
|
+
publicToken: config.publicToken,
|
|
131
|
+
publicOwner: config.publicOwner,
|
|
132
|
+
log,
|
|
133
|
+
now: seams.now,
|
|
134
|
+
});
|
|
135
|
+
// 200 either way: "we cannot see it" is an answer, not a failure, and
|
|
136
|
+
// the platform turns it into a choice rather than an error.
|
|
137
|
+
return send(res, 200, "application/json", JSON.stringify(access));
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
141
|
+
log(`brain access ${ask.owner}/${ask.repo} failed: ${msg}`);
|
|
142
|
+
return send(res, 502, "application/json", JSON.stringify({ error: msg }));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
99
145
|
// Build one repository into a brain, on demand. Called by the platform when
|
|
100
146
|
// someone pastes a repository URL during onboarding — there is no webhook
|
|
101
147
|
// behind it, so it authenticates with a bearer token rather than a payload
|
|
@@ -132,10 +178,17 @@ export function createApp(config, seams = {}) {
|
|
|
132
178
|
// request cannot redirect a repository's history to another host.
|
|
133
179
|
if (config.brainBaseUrl)
|
|
134
180
|
job.brainBaseUrl = config.brainBaseUrl;
|
|
135
|
-
|
|
181
|
+
// Out of this process by default. A read is minutes of blocking work
|
|
182
|
+
// and the App has to keep answering — including the one-second access
|
|
183
|
+
// question the next person's onboarding is waiting on. A test that
|
|
184
|
+
// injects its own builder still runs in-process, which is what a test
|
|
185
|
+
// wants.
|
|
186
|
+
const built = await (seams.brainBuild ?? buildRepoInChildProcess)(job, {
|
|
136
187
|
creds: config,
|
|
137
188
|
fetch: fetchImpl,
|
|
138
189
|
api: config.api,
|
|
190
|
+
publicToken: config.publicToken,
|
|
191
|
+
publicOwner: config.publicOwner,
|
|
139
192
|
log,
|
|
140
193
|
now: seams.now,
|
|
141
194
|
});
|
package/dist/app/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/app/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,YAAY,EAA0D,MAAM,WAAW,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAmC,MAAM,eAAe,CAAC;AACrG,OAAO,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/app/server.ts"],"names":[],"mappings":"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"}
|
package/dist/app/sources.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Fetch } from "./identity.js";
|
|
2
2
|
/** What kind of thing a source is, so extraction can weigh it. */
|
|
3
3
|
export type SourceKind = "agent_instructions" | "decision_doc" | "lint_config" | "ci_config" | "codeowners" | "branch_protection" | "revert" | "test_name" | "declined_issue";
|
|
4
4
|
/** One rule-bearing artefact. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../src/app/sources.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../src/app/sources.ts"],"names":[],"mappings":"AAeA,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtD,kEAAkE;AAClE,MAAM,MAAM,UAAU,GAClB,oBAAoB,GACpB,cAAc,GACd,aAAa,GACb,WAAW,GACX,YAAY,GACZ,mBAAmB,GACnB,QAAQ,GACR,WAAW,GACX,gBAAgB,CAAC;AAErB,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAkCD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAenE;AASD,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAiB9D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CA0B/D;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAM5D;AAiBD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAc,GAAG,aAAa,EAAE,CAe5E;AAKD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,GAAG,SAAiB,GAAG,aAAa,EAAE,CAUvH;AAqBD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,KAAK,EAChB,GAAG,SAA2B,EAC9B,GAAG,SAAe,GACjB,OAAO,CAAC,aAAa,EAAE,CAAC,CAkC1B;AAED,2DAA2D;AAC3D,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,KAAK,EAChB,GAAG,SAA2B,GAC7B,OAAO,CAAC,aAAa,EAAE,CAAC,CA2B1B;AAsBD,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,QAAQ,SAAkB,EAAE,QAAQ,SAAc,GAAG,aAAa,EAAE,CAW3H;AAED,8DAA8D;AAC9D,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzD"}
|
package/dist/app/sources.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
import { readFileSync, existsSync, readdirSync, statSync } from "node:fs";
|
|
14
14
|
import { join, relative } from "node:path";
|
|
15
15
|
import { spawnSync } from "node:child_process";
|
|
16
|
+
import { ghHeaders } from "./identity.js";
|
|
16
17
|
/** Per-file and total caps, so one enormous doc cannot crowd out everything. */
|
|
17
18
|
const MAX_FILE_CHARS = 24_000;
|
|
18
19
|
const MAX_TOTAL_CHARS = 300_000;
|
|
@@ -237,7 +238,7 @@ const MAX_DECLINED = 40;
|
|
|
237
238
|
export async function readDeclinedIssues(owner, repo, token, fetchImpl, api = "https://api.github.com", max = MAX_DECLINED) {
|
|
238
239
|
try {
|
|
239
240
|
const res = await fetchImpl(`${api}/repos/${owner}/${repo}/issues?state=closed&per_page=100&sort=updated`, {
|
|
240
|
-
headers:
|
|
241
|
+
headers: ghHeaders(token),
|
|
241
242
|
});
|
|
242
243
|
if (!res.ok)
|
|
243
244
|
return [];
|
|
@@ -275,7 +276,7 @@ export async function readBranchProtection(owner, repo, branch, token, fetchImpl
|
|
|
275
276
|
return [];
|
|
276
277
|
try {
|
|
277
278
|
const res = await fetchImpl(`${api}/repos/${owner}/${repo}/branches/${encodeURIComponent(branch)}/protection`, {
|
|
278
|
-
headers:
|
|
279
|
+
headers: ghHeaders(token),
|
|
279
280
|
});
|
|
280
281
|
// 404 simply means the branch is not protected, which is not a failure.
|
|
281
282
|
if (!res.ok)
|
package/dist/app/sources.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/app/sources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/app/sources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAc,MAAM,eAAe,CAAC;AAwBtD,gFAAgF;AAChF,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,MAAM,eAAe,GAAG,OAAO,CAAC;AAChC,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,SAAS,QAAQ,CAAC,IAAY,EAAE,GAAW;IACzC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;YAAE,OAAO,IAAI,CAAC;QACzD,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC;IACzG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,SAAS,OAAO,CAAC,IAAY,EAAE,GAAW,EAAE,IAA+B;IACzE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,EAAE,CAAC;QAChE,OAAO,WAAW,CAAC,GAAG,CAAC;aACpB,MAAM,CAAC,IAAI,CAAC;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aACxB,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,UAAU,GAAG;QACjB,WAAW;QACX,WAAW;QACX,WAAW;QACX,iCAAiC;QACjC,0BAA0B;QAC1B,GAAG,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KAClF,CAAC;IACF,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,qFAAqF;AACrF,SAAS,kBAAkB,CAAC,IAAY;IACtC,OAAO,IAAI;SACR,OAAO,CAAC,2EAA2E,EAAE,EAAE,CAAC;SACxF,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG;QACjB,iBAAiB;QACjB,iBAAiB;QACjB,sBAAsB;QACtB,sBAAsB;QACtB,GAAG,IAAI,CAAC,UAAU,CAAC;QACnB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACzB,GAAG,IAAI,CAAC,KAAK,CAAC;KACf,CAAC;IACF,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,IAAI,GAAG;QACX,eAAe;QACf,gBAAgB;QAChB,gBAAgB;QAChB,cAAc;QACd,kBAAkB;QAClB,mBAAmB;QACnB,WAAW;QACX,YAAY;QACZ,aAAa;QACb,kBAAkB;QAClB,uBAAuB;QACvB,sBAAsB;QACtB,eAAe;KAChB,CAAC;IACF,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACvG,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,KAAK,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,YAAY,EAAE,iBAAiB,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI;YAAE,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,gDAAgD;AAChD,SAAS,GAAG,CAAC,IAAY,EAAE,IAAc;IACvC,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,sBAAsB,EAAE,GAAG,IAAI,CAAC,EAAE;QACpE,GAAG,EAAE,IAAI;QACT,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QACjC,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;KAC5B,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjF,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC;AAED,iCAAiC;AACjC,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,GAAG,GAAG,WAAW;IACzD,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,6BAA6B,CAAC,CAAC,CAAC;IACnG,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,SAAS;QAC7B,MAAM,CAAC,GAAG,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,SAAS;QAC7C,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,UAAU,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YACzC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;SAC/D,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,oCAAoC;AACpC,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,WAAkD,EAAE,GAAG,GAAG,cAAc;IACpG,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,wDAAwD,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,SAAS;QACrF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,MAAM;IAChC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC;IACnE,8CAA8C;IAC9C,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAChG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AACzB,CAAC;AAED,yCAAyC;AACzC,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAa,EACb,IAAY,EACZ,KAAa,EACb,SAAgB,EAChB,GAAG,GAAG,wBAAwB,EAC9B,GAAG,GAAG,YAAY;IAElB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,GAAG,UAAU,KAAK,IAAI,IAAI,gDAAgD,EAAE;YACzG,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAOvC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACrC,MAAM,GAAG,GAAoB,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,2EAA2E;YAC3E,sCAAsC;YACtC,IAAI,CAAC,CAAC,YAAY;gBAAE,SAAS;YAC7B,IAAI,CAAC,CAAC,YAAY,KAAK,aAAa;gBAAE,SAAS;YAC/C,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE;gBAAE,SAAS;YAC/B,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,UAAU,CAAC,CAAC,MAAM,EAAE;gBAC1B,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC;gBACjG,GAAG,EAAE,CAAC,CAAC,QAAQ;aAChB,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;gBAAE,MAAM;QAChC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAa,EACb,IAAY,EACZ,MAAc,EACd,KAAa,EACb,SAAgB,EAChB,GAAG,GAAG,wBAAwB;IAE9B,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,GAAG,UAAU,KAAK,IAAI,IAAI,aAAa,kBAAkB,CAAC,MAAM,CAAC,aAAa,EAAE;YAC7G,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC;SAC1B,CAAC,CAAC;QACH,wEAAwE;QACxE,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAIpC,CAAC;QACF,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,CAAC,CAAC,sBAAsB,EAAE,QAAQ,IAAI,EAAE,CAAC;QACxD,IAAI,MAAM,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,2CAA2C,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1G,MAAM,OAAO,GAAG,CAAC,CAAC,6BAA6B,CAAC;QAChD,IAAI,OAAO,EAAE,+BAA+B,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,+BAA+B,6CAA6C,MAAM,GAAG,CAAC,CAAC;QAC/G,CAAC;QACD,IAAI,OAAO,EAAE,0BAA0B;YAAE,KAAK,CAAC,IAAI,CAAC,wCAAwC,MAAM,GAAG,CAAC,CAAC;QACvG,IAAI,CAAC,CAAC,kBAAkB,EAAE,OAAO,KAAK,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,mBAAmB,CAAC,CAAC;QACtG,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,sBAAsB,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,SAAS,GAAiB;IAC9B,oBAAoB;IACpB,cAAc;IACd,YAAY;IACZ,mBAAmB;IACnB,aAAa;IACb,WAAW;IACX,QAAQ;IACR,gBAAgB;IAChB,WAAW;CACZ,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,OAAwB,EAAE,QAAQ,GAAG,eAAe,EAAE,QAAQ,GAAG,WAAW;IACxG,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAClG,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ;YAAE,MAAM;QAClC,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ;YAAE,SAAS;QAC/C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACzB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,GAAW;IAC/C,OAAO,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;AACpC,CAAC"}
|
package/dist/ask/ask.js
CHANGED
|
@@ -1094,7 +1094,7 @@ export function ask(dir, query, opts = {}) {
|
|
|
1094
1094
|
result.saved = baselineFor(result.hits, corpus.graph);
|
|
1095
1095
|
// What the team decided about the code this pack just inlined. Read from the
|
|
1096
1096
|
// local cache only — `ask` is on the agent's hot path and must never wait on
|
|
1097
|
-
// the network; `graft
|
|
1097
|
+
// the network; `graft trail pull` and `init` are what refresh it.
|
|
1098
1098
|
const applied = attachBrainRules(root, result.hits, corpus.graph);
|
|
1099
1099
|
if (applied.length)
|
|
1100
1100
|
result.rules = applied;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `graft claude-md pull`: write the CLAUDE.md changes accepted in Trail into
|
|
3
|
+
* this checkout's instruction file.
|
|
4
|
+
*
|
|
5
|
+
* Trail compares the repository's CLAUDE.md with what its history says and
|
|
6
|
+
* suggests edits and new sections; a person accepts some of them on the brain's
|
|
7
|
+
* CLAUDE.md page. This fetches the accepted ones, applies them to the local
|
|
8
|
+
* file, and tells Trail which it wrote so the page stops listing them.
|
|
9
|
+
*
|
|
10
|
+
* The file is edited line by line, never regenerated, so everything a change
|
|
11
|
+
* does not touch comes back byte for byte. An edit whose text is no longer in
|
|
12
|
+
* its section means the local file has moved on since Trail read it; that
|
|
13
|
+
* change is reported and left, never guessed at. Same rules as Trail's own
|
|
14
|
+
* ComposeClaudeMd, which is what the page's preview shows.
|
|
15
|
+
*/
|
|
16
|
+
import { type BrainLink } from "./link.js";
|
|
17
|
+
/** One accepted change, as Trail sends it. */
|
|
18
|
+
export interface ClaudeMdChange {
|
|
19
|
+
id: string;
|
|
20
|
+
kind: "edit" | "add";
|
|
21
|
+
/** edit: the section it rewrites. add: the new section's heading. */
|
|
22
|
+
heading: string;
|
|
23
|
+
/** add: the section it goes after; "" = end of file. */
|
|
24
|
+
after_heading?: string;
|
|
25
|
+
/** edit: the text to replace; "" = append to the section. */
|
|
26
|
+
find?: string;
|
|
27
|
+
text: string;
|
|
28
|
+
reason?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface ClaudeMdPull {
|
|
31
|
+
/** The file Trail read, e.g. "CLAUDE.md"; "" when the repo had none. */
|
|
32
|
+
path: string;
|
|
33
|
+
head_sha: string;
|
|
34
|
+
changes: ClaudeMdChange[];
|
|
35
|
+
}
|
|
36
|
+
export interface ApplyResult {
|
|
37
|
+
text: string;
|
|
38
|
+
/** Written by this pull. */
|
|
39
|
+
written: ClaudeMdChange[];
|
|
40
|
+
/** Already in the file (committed by someone else): nothing to write. */
|
|
41
|
+
present: ClaudeMdChange[];
|
|
42
|
+
/** Could not be placed; the file was left as it is for these. */
|
|
43
|
+
skipped: Array<{
|
|
44
|
+
change: ClaudeMdChange;
|
|
45
|
+
why: string;
|
|
46
|
+
}>;
|
|
47
|
+
}
|
|
48
|
+
/** GET /api/public/brains/:id/claude-md — the accepted changes. */
|
|
49
|
+
export declare function fetchAcceptedChanges(link: BrainLink, fetchImpl?: typeof fetch): Promise<ClaudeMdPull | {
|
|
50
|
+
error: string;
|
|
51
|
+
}>;
|
|
52
|
+
/** POST /api/public/brains/:id/claude-md/applied — what this pull wrote. */
|
|
53
|
+
export declare function markApplied(link: BrainLink, ids: string[], fetchImpl?: typeof fetch): Promise<boolean>;
|
|
54
|
+
/**
|
|
55
|
+
* Apply accepted changes to the file's text. Pure: reads nothing, writes
|
|
56
|
+
* nothing, so the command and the tests share it.
|
|
57
|
+
*/
|
|
58
|
+
export declare function applyChanges(original: string, changes: ClaudeMdChange[]): ApplyResult;
|
|
59
|
+
//# sourceMappingURL=claude-md.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../src/brain/claude-md.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAEvD,8CAA8C;AAC9C,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,yEAAyE;IACzE,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,iEAAiE;IACjE,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,cAAc,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzD;AAED,mEAAmE;AACnE,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,SAAS,EACf,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB3C;AAED,4EAA4E;AAC5E,wBAAsB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,OAAO,KAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBnH;AAgDD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,WAAW,CAgErF"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `graft claude-md pull`: write the CLAUDE.md changes accepted in Trail into
|
|
3
|
+
* this checkout's instruction file.
|
|
4
|
+
*
|
|
5
|
+
* Trail compares the repository's CLAUDE.md with what its history says and
|
|
6
|
+
* suggests edits and new sections; a person accepts some of them on the brain's
|
|
7
|
+
* CLAUDE.md page. This fetches the accepted ones, applies them to the local
|
|
8
|
+
* file, and tells Trail which it wrote so the page stops listing them.
|
|
9
|
+
*
|
|
10
|
+
* The file is edited line by line, never regenerated, so everything a change
|
|
11
|
+
* does not touch comes back byte for byte. An edit whose text is no longer in
|
|
12
|
+
* its section means the local file has moved on since Trail read it; that
|
|
13
|
+
* change is reported and left, never guessed at. Same rules as Trail's own
|
|
14
|
+
* ComposeClaudeMd, which is what the page's preview shows.
|
|
15
|
+
*/
|
|
16
|
+
import { baseUrlFor } from "./link.js";
|
|
17
|
+
/** GET /api/public/brains/:id/claude-md — the accepted changes. */
|
|
18
|
+
export async function fetchAcceptedChanges(link, fetchImpl = fetch) {
|
|
19
|
+
const url = `${baseUrlFor(link)}/api/public/brains/${encodeURIComponent(link.brainId)}/claude-md`;
|
|
20
|
+
try {
|
|
21
|
+
const res = await fetchImpl(url, {
|
|
22
|
+
headers: { authorization: `Bearer ${link.token}`, accept: "application/json" },
|
|
23
|
+
signal: AbortSignal.timeout(15_000),
|
|
24
|
+
});
|
|
25
|
+
const body = await res.text();
|
|
26
|
+
if (res.status === 404 || res.status === 503) {
|
|
27
|
+
return { error: "this brain has no CLAUDE.md suggestions yet — its Trail may be older than the feature" };
|
|
28
|
+
}
|
|
29
|
+
if (!res.ok)
|
|
30
|
+
return { error: `Trail refused the pull: ${res.status} ${body.slice(0, 200)}` };
|
|
31
|
+
const parsed = JSON.parse(body);
|
|
32
|
+
return { path: parsed.path ?? "", head_sha: parsed.head_sha ?? "", changes: parsed.changes ?? [] };
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
return { error: `could not reach Trail: ${e instanceof Error ? e.message : e}` };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** POST /api/public/brains/:id/claude-md/applied — what this pull wrote. */
|
|
39
|
+
export async function markApplied(link, ids, fetchImpl = fetch) {
|
|
40
|
+
if (ids.length === 0)
|
|
41
|
+
return true;
|
|
42
|
+
const url = `${baseUrlFor(link)}/api/public/brains/${encodeURIComponent(link.brainId)}/claude-md/applied`;
|
|
43
|
+
try {
|
|
44
|
+
// Trail takes at most 100 per request.
|
|
45
|
+
for (let i = 0; i < ids.length; i += 100) {
|
|
46
|
+
const res = await fetchImpl(url, {
|
|
47
|
+
method: "POST",
|
|
48
|
+
headers: {
|
|
49
|
+
authorization: `Bearer ${link.token}`,
|
|
50
|
+
"content-type": "application/json",
|
|
51
|
+
accept: "application/json",
|
|
52
|
+
},
|
|
53
|
+
body: JSON.stringify({ ids: ids.slice(i, i + 100) }),
|
|
54
|
+
signal: AbortSignal.timeout(15_000),
|
|
55
|
+
});
|
|
56
|
+
if (!res.ok)
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const HEADING = /^(#{1,6})\s+(.+?)\s*#*\s*$/;
|
|
66
|
+
/** Every ATX heading outside code fences, with the lines it owns. */
|
|
67
|
+
function sectionsOf(lines) {
|
|
68
|
+
const heads = [];
|
|
69
|
+
let fence = false;
|
|
70
|
+
lines.forEach((ln, i) => {
|
|
71
|
+
const t = ln.trim();
|
|
72
|
+
if (t.startsWith("```") || t.startsWith("~~~")) {
|
|
73
|
+
fence = !fence;
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (fence)
|
|
77
|
+
return;
|
|
78
|
+
const m = HEADING.exec(ln);
|
|
79
|
+
if (m)
|
|
80
|
+
heads.push({ line: i, level: m[1].length, title: m[2].trim() });
|
|
81
|
+
});
|
|
82
|
+
return heads.map((h, i) => {
|
|
83
|
+
let end = lines.length;
|
|
84
|
+
for (let j = i + 1; j < heads.length; j++) {
|
|
85
|
+
if (heads[j].level <= h.level) {
|
|
86
|
+
end = heads[j].line;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return { title: h.title, level: h.level, head: h.line, end };
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
const norm = (s) => s.trim().toLowerCase();
|
|
94
|
+
/** Trim the blank lines a section ends with, so appended text sits under its content. */
|
|
95
|
+
function lastContentLine(lines, s) {
|
|
96
|
+
let i = s.end;
|
|
97
|
+
while (i > s.head + 1 && lines[i - 1].trim() === "")
|
|
98
|
+
i--;
|
|
99
|
+
return i;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Apply accepted changes to the file's text. Pure: reads nothing, writes
|
|
103
|
+
* nothing, so the command and the tests share it.
|
|
104
|
+
*/
|
|
105
|
+
export function applyChanges(original, changes) {
|
|
106
|
+
const crlf = original.includes("\r\n");
|
|
107
|
+
let lines = original.replace(/\r\n/g, "\n").split("\n");
|
|
108
|
+
const out = { text: original, written: [], present: [], skipped: [] };
|
|
109
|
+
// Edits first, against headings that exist; then additions, which may go
|
|
110
|
+
// after a section an edit just touched.
|
|
111
|
+
const ordered = [...changes.filter((c) => c.kind === "edit"), ...changes.filter((c) => c.kind === "add")];
|
|
112
|
+
for (const c of ordered) {
|
|
113
|
+
const sections = sectionsOf(lines);
|
|
114
|
+
if (c.kind === "edit") {
|
|
115
|
+
const s = sections.find((x) => norm(x.title) === norm(c.heading));
|
|
116
|
+
if (!s) {
|
|
117
|
+
out.skipped.push({ change: c, why: `no “${c.heading}” section in the file` });
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
const body = lines.slice(s.head + 1, s.end).join("\n");
|
|
121
|
+
const text = c.text.replace(/\r\n/g, "\n");
|
|
122
|
+
const find = (c.find ?? "").replace(/\r\n/g, "\n");
|
|
123
|
+
if (text.trim() && body.includes(text.trim())) {
|
|
124
|
+
out.present.push(c);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (!find) {
|
|
128
|
+
const at = lastContentLine(lines, s);
|
|
129
|
+
lines = [...lines.slice(0, at), ...text.trimEnd().split("\n"), ...lines.slice(at)];
|
|
130
|
+
out.written.push(c);
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
const idx = body.indexOf(find);
|
|
134
|
+
if (idx < 0) {
|
|
135
|
+
out.skipped.push({ change: c, why: `the text it rewrites is no longer in “${c.heading}”` });
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const next = body.slice(0, idx) + text + body.slice(idx + find.length);
|
|
139
|
+
lines = [...lines.slice(0, s.head + 1), ...next.split("\n"), ...lines.slice(s.end)];
|
|
140
|
+
out.written.push(c);
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
// add
|
|
144
|
+
if (sections.some((x) => norm(x.title) === norm(c.heading))) {
|
|
145
|
+
out.present.push(c);
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
const block = [`## ${c.heading.trim()}`, "", ...c.text.replace(/\r\n/g, "\n").trim().split("\n")];
|
|
149
|
+
const after = c.after_heading ? sections.find((x) => norm(x.title) === norm(c.after_heading)) : undefined;
|
|
150
|
+
if (after) {
|
|
151
|
+
const at = lastContentLine(lines, after);
|
|
152
|
+
// A blank line either side, whatever the file had there.
|
|
153
|
+
const tail = lines.slice(at);
|
|
154
|
+
lines = [...lines.slice(0, at), "", ...block, ...(tail.length > 0 && tail[0].trim() !== "" ? [""] : []), ...tail];
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
while (lines.length > 0 && lines[lines.length - 1].trim() === "")
|
|
158
|
+
lines.pop();
|
|
159
|
+
lines = lines.length > 0 ? [...lines, "", ...block] : block;
|
|
160
|
+
lines.push("");
|
|
161
|
+
}
|
|
162
|
+
out.written.push(c);
|
|
163
|
+
}
|
|
164
|
+
let text = lines.join("\n");
|
|
165
|
+
if (out.written.length > 0 && !text.endsWith("\n"))
|
|
166
|
+
text += "\n";
|
|
167
|
+
out.text = out.written.length > 0 ? (crlf ? text.replace(/\n/g, "\r\n") : text) : original;
|
|
168
|
+
return out;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=claude-md.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../../src/brain/claude-md.ts"],"names":[],"mappings":"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"}
|
package/dist/brain/connect.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { type BrainLink, type BrainRule } from './link.js';
|
|
6
6
|
import { type BrainWrite } from './wire.js';
|
|
7
7
|
/**
|
|
8
|
-
* Parse the `--
|
|
8
|
+
* Parse the `--trail` value.
|
|
9
9
|
*
|
|
10
10
|
* The onboarding page hands over one string so there is one thing to copy. Two
|
|
11
11
|
* accepted shapes:
|
|
@@ -33,7 +33,7 @@ export interface ConnectResult {
|
|
|
33
33
|
*
|
|
34
34
|
* The link is stored even when the pull fails. That is deliberate: a token
|
|
35
35
|
* typed correctly against a brain that is momentarily unreachable should not
|
|
36
|
-
* have to be pasted again — `graft
|
|
36
|
+
* have to be pasted again — `graft trail pull` retries, and `ask` degrades to
|
|
37
37
|
* the code-only answer meanwhile.
|
|
38
38
|
*/
|
|
39
39
|
export declare function connectBrain(repo: string, link: BrainLink, opts?: {
|
|
@@ -50,7 +50,7 @@ export declare function pullBrain(repo: string, opts: {
|
|
|
50
50
|
ids?: string[];
|
|
51
51
|
fetchImpl?: typeof fetch;
|
|
52
52
|
}): Promise<ConnectResult | null>;
|
|
53
|
-
/** The linked brain and its cached rule set, for `graft
|
|
53
|
+
/** The linked brain and its cached rule set, for `graft trail status`. */
|
|
54
54
|
export declare function brainStatus(repo: string): {
|
|
55
55
|
link: BrainLink | null;
|
|
56
56
|
rules: BrainRule[];
|
package/dist/brain/connect.js
CHANGED
|
@@ -6,7 +6,7 @@ import { readLink, writeLink, fetchRules, writeRulesCache, readRulesCache, } fro
|
|
|
6
6
|
import { writeBrainSections } from './wire.js';
|
|
7
7
|
import { basename } from 'node:path';
|
|
8
8
|
/**
|
|
9
|
-
* Parse the `--
|
|
9
|
+
* Parse the `--trail` value.
|
|
10
10
|
*
|
|
11
11
|
* The onboarding page hands over one string so there is one thing to copy. Two
|
|
12
12
|
* accepted shapes:
|
|
@@ -21,19 +21,19 @@ import { basename } from 'node:path';
|
|
|
21
21
|
export function parseBrainArg(value) {
|
|
22
22
|
const raw = value.trim();
|
|
23
23
|
if (!raw)
|
|
24
|
-
return { error: 'empty --
|
|
24
|
+
return { error: 'empty --trail value' };
|
|
25
25
|
const cut = raw.indexOf(':');
|
|
26
26
|
if (cut > 0) {
|
|
27
27
|
const brainId = raw.slice(0, cut).trim();
|
|
28
28
|
const token = raw.slice(cut + 1).trim();
|
|
29
29
|
if (!brainId || !token)
|
|
30
|
-
return { error: 'expected --
|
|
30
|
+
return { error: 'expected --trail <brainId>:<token>' };
|
|
31
31
|
return { brainId, token };
|
|
32
32
|
}
|
|
33
33
|
const envToken = process.env.GRAFT_BRAIN_TOKEN;
|
|
34
34
|
if (!envToken) {
|
|
35
35
|
return {
|
|
36
|
-
error: 'expected --
|
|
36
|
+
error: 'expected --trail <brainId>:<token>, or a bare brain id with the token in GRAFT_BRAIN_TOKEN',
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
39
|
return { brainId: raw, token: envToken };
|
|
@@ -43,7 +43,7 @@ export function parseBrainArg(value) {
|
|
|
43
43
|
*
|
|
44
44
|
* The link is stored even when the pull fails. That is deliberate: a token
|
|
45
45
|
* typed correctly against a brain that is momentarily unreachable should not
|
|
46
|
-
* have to be pasted again — `graft
|
|
46
|
+
* have to be pasted again — `graft trail pull` retries, and `ask` degrades to
|
|
47
47
|
* the code-only answer meanwhile.
|
|
48
48
|
*/
|
|
49
49
|
export async function connectBrain(repo, link, opts = { home: '' }) {
|
|
@@ -54,7 +54,7 @@ export async function connectBrain(repo, link, opts = { home: '' }) {
|
|
|
54
54
|
linked: true,
|
|
55
55
|
ruleCount: 0,
|
|
56
56
|
writes: [],
|
|
57
|
-
warning: 'could not reach the brain to pull its rules — the link is saved; run `graft
|
|
57
|
+
warning: 'could not reach the brain to pull its rules — the link is saved; run `graft trail pull` to retry',
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
60
|
writeRulesCache(repo, { brainId: link.brainId, fetchedAt: Date.now(), rules });
|
|
@@ -71,7 +71,7 @@ export async function pullBrain(repo, opts) {
|
|
|
71
71
|
return null;
|
|
72
72
|
return connectBrain(repo, link, opts);
|
|
73
73
|
}
|
|
74
|
-
/** The linked brain and its cached rule set, for `graft
|
|
74
|
+
/** The linked brain and its cached rule set, for `graft trail status`. */
|
|
75
75
|
export function brainStatus(repo) {
|
|
76
76
|
const link = readLink(repo);
|
|
77
77
|
const cache = readRulesCache(repo);
|
package/dist/brain/link.d.ts
CHANGED
|
@@ -48,7 +48,14 @@ export interface BrainLink {
|
|
|
48
48
|
* attach a brain without writing to the checkout.
|
|
49
49
|
*/
|
|
50
50
|
export declare function readLink(dir: string): BrainLink | null;
|
|
51
|
-
/** Persist the link for repo `dir`, merging into any existing build config.
|
|
51
|
+
/** Persist the link for repo `dir`, merging into any existing build config.
|
|
52
|
+
*
|
|
53
|
+
* The write is what creates `.graft/config.json`, and that file holds the read
|
|
54
|
+
* token — which is exactly why this is also where it gets ignored. The comment
|
|
55
|
+
* on {@link BrainLink} has claimed `.graft/` was "git-ignored" since the day it
|
|
56
|
+
* was written, and nothing ever made it true: `ensureGitignored` only ever ran
|
|
57
|
+
* for the graph cache. Every repository anyone ran `graft trail connect` in was
|
|
58
|
+
* therefore one `git add -A` away from publishing a credential. */
|
|
52
59
|
export declare function writeLink(dir: string, link: BrainLink): void;
|
|
53
60
|
/** Forget the link for repo `dir`. Leaves the cached rules for `uninstall` to remove. */
|
|
54
61
|
export declare function clearLink(dir: string): void;
|
package/dist/brain/link.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/brain/link.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/brain/link.ts"],"names":[],"mappings":"AAsBA,uEAAuE;AACvE,eAAO,MAAM,YAAY,QAAqB,CAAC;AAE/C;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,QAAgB,CAAC;AAEhD,kEAAkE;AAClE,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mEAAmE;AACnE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB;;;iEAG6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,gCAAgC;AAChC,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAStD;AAED;;;;;;;mEAOmE;AACnE,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAG5D;AAED,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAE7D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,SAAa,GAAG,OAAO,CAIhF;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,IAAI,CAIpE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAElD;AAeD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,SAAS,EACf,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CA4B7B"}
|
package/dist/brain/link.js
CHANGED
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { readBuildConfig, patchBuildConfig, cacheDir, readJson, writeJsonAtomic } from '../util/state.js';
|
|
16
16
|
import { join } from 'node:path';
|
|
17
|
+
import { ensureGitignored, LINK_NOTE } from '../context/node-file.js';
|
|
18
|
+
import { BUILD_CONFIG_DIR } from '../util/state.js';
|
|
17
19
|
/** Default API host. Overridden by GRAFT_BRAIN_URL, for staging and self-hosted. */
|
|
18
20
|
const DEFAULT_BRAIN_BASE_URL = 'https://agents.nanonets.com';
|
|
19
21
|
/** How long a cached rule set is served before upkeep refreshes it. */
|
|
@@ -46,9 +48,17 @@ export function readLink(dir) {
|
|
|
46
48
|
return null;
|
|
47
49
|
return stored;
|
|
48
50
|
}
|
|
49
|
-
/** Persist the link for repo `dir`, merging into any existing build config.
|
|
51
|
+
/** Persist the link for repo `dir`, merging into any existing build config.
|
|
52
|
+
*
|
|
53
|
+
* The write is what creates `.graft/config.json`, and that file holds the read
|
|
54
|
+
* token — which is exactly why this is also where it gets ignored. The comment
|
|
55
|
+
* on {@link BrainLink} has claimed `.graft/` was "git-ignored" since the day it
|
|
56
|
+
* was written, and nothing ever made it true: `ensureGitignored` only ever ran
|
|
57
|
+
* for the graph cache. Every repository anyone ran `graft trail connect` in was
|
|
58
|
+
* therefore one `git add -A` away from publishing a credential. */
|
|
50
59
|
export function writeLink(dir, link) {
|
|
51
60
|
patchBuildConfig(dir, { brain: link });
|
|
61
|
+
ensureGitignored(dir, join(dir, BUILD_CONFIG_DIR), LINK_NOTE);
|
|
52
62
|
}
|
|
53
63
|
/** Forget the link for repo `dir`. Leaves the cached rules for `uninstall` to remove. */
|
|
54
64
|
export function clearLink(dir) {
|