@lore-co/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/LICENSE +110 -0
  2. package/README.md +218 -0
  3. package/dist/cli.d.ts +28 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +792 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/devin-client.d.ts +63 -0
  8. package/dist/devin-client.d.ts.map +1 -0
  9. package/dist/devin-client.js +231 -0
  10. package/dist/devin-client.js.map +1 -0
  11. package/dist/devin.d.ts +2 -0
  12. package/dist/devin.d.ts.map +1 -0
  13. package/dist/devin.js +479 -0
  14. package/dist/devin.js.map +1 -0
  15. package/dist/generated-assets.d.ts +7 -0
  16. package/dist/generated-assets.d.ts.map +1 -0
  17. package/dist/generated-assets.js +8 -0
  18. package/dist/generated-assets.js.map +1 -0
  19. package/dist/github.d.ts +13 -0
  20. package/dist/github.d.ts.map +1 -0
  21. package/dist/github.js +559 -0
  22. package/dist/github.js.map +1 -0
  23. package/dist/host.d.ts +24 -0
  24. package/dist/host.d.ts.map +1 -0
  25. package/dist/host.js +337 -0
  26. package/dist/host.js.map +1 -0
  27. package/dist/index.d.ts +8 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +8 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/main.d.ts +2 -0
  32. package/dist/main.d.ts.map +1 -0
  33. package/dist/main.js +10 -0
  34. package/dist/main.js.map +1 -0
  35. package/dist/repository.d.ts +3 -0
  36. package/dist/repository.d.ts.map +1 -0
  37. package/dist/repository.js +60 -0
  38. package/dist/repository.js.map +1 -0
  39. package/dist/review-output.d.ts +59 -0
  40. package/dist/review-output.d.ts.map +1 -0
  41. package/dist/review-output.js +112 -0
  42. package/dist/review-output.js.map +1 -0
  43. package/dist/runtime.d.ts +63 -0
  44. package/dist/runtime.d.ts.map +1 -0
  45. package/dist/runtime.js +612 -0
  46. package/dist/runtime.js.map +1 -0
  47. package/dist/update.d.ts +2 -0
  48. package/dist/update.d.ts.map +1 -0
  49. package/dist/update.js +97 -0
  50. package/dist/update.js.map +1 -0
  51. package/dist/version.d.ts +3 -0
  52. package/dist/version.d.ts.map +1 -0
  53. package/dist/version.js +6 -0
  54. package/dist/version.js.map +1 -0
  55. package/package.json +47 -0
package/dist/github.js ADDED
@@ -0,0 +1,559 @@
1
+ import { createHash } from "node:crypto";
2
+ import { spawn } from "node:child_process";
3
+ import { mkdir, readFile, writeFile, } from "node:fs/promises";
4
+ import { homedir } from "node:os";
5
+ import { dirname, resolve } from "node:path";
6
+ import { parseReviewOutput, } from "./review-output.js";
7
+ import { GITHUB_TEMPLATE_ASSETS } from "./generated-assets.js";
8
+ const TEMPLATE_FILES = [
9
+ "lore-codex-review.yml",
10
+ "lore-devin-review.yml",
11
+ "lore-observe-correction.yml",
12
+ ];
13
+ const MAX_DIFF_BYTES = 512 * 1024;
14
+ const MAX_FILES = 500;
15
+ const MAX_COMMENT_LENGTH = 60_000;
16
+ const REVIEW_MARKER_V2 = "lore-review:v2";
17
+ const REVIEW_PROVENANCE_MARKER = "lore-review-provenance:v1";
18
+ function required(value, name) {
19
+ if (value === undefined || value.trim() === "") {
20
+ throw new Error(`${name} is required`);
21
+ }
22
+ return value.trim();
23
+ }
24
+ function parseProvider(value) {
25
+ if (value === "codex" || value === "devin") {
26
+ return value;
27
+ }
28
+ throw new Error("--provider must be codex or devin");
29
+ }
30
+ function valueAfter(args, index) {
31
+ const value = args[index + 1];
32
+ if (value === undefined) {
33
+ throw new Error(`Missing value for ${args[index] ?? "option"}`);
34
+ }
35
+ return [value, index + 1];
36
+ }
37
+ function parseFlags(args) {
38
+ const flags = new Map();
39
+ for (let index = 0; index < args.length; index += 1) {
40
+ const name = args[index];
41
+ if (name === undefined || !name.startsWith("--")) {
42
+ throw new Error(`Unexpected argument: ${name ?? ""}`);
43
+ }
44
+ if (name === "--configure-secrets" || name === "--yes") {
45
+ flags.set(name, ["true"]);
46
+ continue;
47
+ }
48
+ const [value, valueIndex] = valueAfter(args, index);
49
+ index = valueIndex;
50
+ flags.set(name, [...(flags.get(name) ?? []), value]);
51
+ }
52
+ return flags;
53
+ }
54
+ async function readLoreConnection() {
55
+ const envUrl = process.env.LORE_API_URL;
56
+ const envToken = process.env.LORE_WORKSPACE_TOKEN ?? process.env.LORE_TOKEN;
57
+ if (envUrl !== undefined && envToken !== undefined) {
58
+ return {
59
+ apiUrl: envUrl.replace(/\/+$/u, ""),
60
+ token: envToken,
61
+ };
62
+ }
63
+ const configPath = resolve(process.env.HOME ?? homedir(), ".lore", "config.json");
64
+ const parsed = JSON.parse(await readFile(configPath, "utf8"));
65
+ if (typeof parsed.apiUrl !== "string" || typeof parsed.token !== "string") {
66
+ throw new Error(`Invalid Lore connector config: ${configPath}`);
67
+ }
68
+ return {
69
+ apiUrl: parsed.apiUrl.replace(/\/+$/u, ""),
70
+ token: parsed.token,
71
+ };
72
+ }
73
+ async function readEvent(path) {
74
+ const eventPath = required(path ?? process.env.GITHUB_EVENT_PATH, "GitHub event path");
75
+ return JSON.parse(await readFile(eventPath, "utf8"));
76
+ }
77
+ function reviewMetadata(event, provider) {
78
+ const repository = required(event.repository?.full_name, "event repository");
79
+ const pr = event.pull_request;
80
+ if (pr?.number === undefined ||
81
+ pr.html_url === undefined ||
82
+ pr.head?.sha === undefined) {
83
+ throw new Error("The event does not contain a pull request");
84
+ }
85
+ if (pr.draft === true) {
86
+ throw new Error("Draft pull requests are not reviewed");
87
+ }
88
+ if (pr.head.repo?.full_name !== undefined &&
89
+ pr.head.repo.full_name !== repository) {
90
+ throw new Error("Fork pull requests are not eligible for secret-backed reviews");
91
+ }
92
+ const [owner, repo] = repository.split("/", 2);
93
+ if (owner === undefined || repo === undefined) {
94
+ throw new Error(`Invalid repository slug: ${repository}`);
95
+ }
96
+ const metadata = {
97
+ provider,
98
+ repository,
99
+ owner,
100
+ repo,
101
+ prNumber: pr.number,
102
+ prUrl: pr.html_url,
103
+ headSha: pr.head.sha,
104
+ };
105
+ return { ...metadata, marker: reviewMarker(metadata) };
106
+ }
107
+ async function runProcess(command, args, cwd) {
108
+ return new Promise((resolvePromise, reject) => {
109
+ const child = spawn(command, [...args], {
110
+ cwd,
111
+ stdio: ["ignore", "pipe", "pipe"],
112
+ });
113
+ let stdout = "";
114
+ let stderr = "";
115
+ child.stdout.setEncoding("utf8").on("data", (chunk) => {
116
+ stdout += chunk;
117
+ });
118
+ child.stderr.setEncoding("utf8").on("data", (chunk) => {
119
+ stderr += chunk;
120
+ });
121
+ child.on("error", reject);
122
+ child.on("close", (code) => {
123
+ if (code === 0) {
124
+ resolvePromise(stdout);
125
+ }
126
+ else {
127
+ reject(new Error(`${command} ${args.join(" ")} failed (${code ?? "signal"}): ${stderr.trim()}`));
128
+ }
129
+ });
130
+ });
131
+ }
132
+ async function gitReviewEvidence(checkout, baseSha, headSha) {
133
+ const range = `${baseSha}...${headSha}`;
134
+ const [rawDiff, rawFiles] = await Promise.all([
135
+ runProcess("git", ["diff", "--no-ext-diff", "--unified=40", range], checkout),
136
+ runProcess("git", ["diff", "--name-only", range], checkout),
137
+ ]);
138
+ const diffBuffer = Buffer.from(rawDiff);
139
+ const diff = diffBuffer.byteLength <= MAX_DIFF_BYTES
140
+ ? rawDiff
141
+ : `${diffBuffer.subarray(0, MAX_DIFF_BYTES).toString("utf8")}\n\n[diff truncated by Lore]`;
142
+ return {
143
+ diff,
144
+ files: rawFiles
145
+ .split("\n")
146
+ .map((file) => file.trim())
147
+ .filter(Boolean)
148
+ .slice(0, MAX_FILES),
149
+ };
150
+ }
151
+ async function fetchLoreContext(input) {
152
+ const connection = await readLoreConnection();
153
+ const eventId = reviewEventKey(input.metadata);
154
+ const response = await fetch(`${connection.apiUrl}/v1/context/deliveries`, {
155
+ method: "POST",
156
+ headers: {
157
+ accept: "application/json",
158
+ authorization: `Bearer ${connection.token}`,
159
+ "content-type": "application/json",
160
+ },
161
+ body: JSON.stringify({
162
+ connector: `github-${input.metadata.provider}-review`,
163
+ eventId,
164
+ sessionId: `github:${input.metadata.repository}:pr:${input.metadata.prNumber}:${input.metadata.headSha}`,
165
+ task: {
166
+ agent: input.metadata.provider,
167
+ organization: input.metadata.owner,
168
+ repo: input.metadata.repository,
169
+ task: `Review PR #${input.metadata.prNumber}: ${input.title}\n${input.body}`,
170
+ diff: input.diff,
171
+ files: input.files,
172
+ limit: 8,
173
+ },
174
+ }),
175
+ signal: AbortSignal.timeout(10_000),
176
+ });
177
+ if (!response.ok) {
178
+ throw new Error(`Lore context request failed with HTTP ${response.status}`);
179
+ }
180
+ const body = (await response.json());
181
+ if (typeof body.context !== "string" ||
182
+ typeof body.packing?.contextSha256 !== "string" ||
183
+ typeof body.receipt?.id !== "string" ||
184
+ typeof body.receipt.deliveredAt !== "string" ||
185
+ !Array.isArray(body.memories)) {
186
+ throw new Error("Lore context delivery returned an invalid response");
187
+ }
188
+ return {
189
+ context: body.context,
190
+ delivery: {
191
+ eventId,
192
+ receiptId: body.receipt.id,
193
+ contextSha256: body.packing.contextSha256,
194
+ memoryIds: body.memories
195
+ .map((memory) => memory.id)
196
+ .filter((id) => typeof id === "string"),
197
+ deliveredAt: body.receipt.deliveredAt,
198
+ },
199
+ };
200
+ }
201
+ async function prepareReview(args) {
202
+ const flags = parseFlags(args);
203
+ const provider = parseProvider(flags.get("--provider")?.[0]);
204
+ const event = await readEvent(flags.get("--event")?.[0]);
205
+ const metadata = reviewMetadata(event, provider);
206
+ const checkout = resolve(required(flags.get("--checkout")?.[0], "--checkout"));
207
+ const baseSha = required(event.pull_request?.base?.sha, "base SHA");
208
+ const { diff, files } = await gitReviewEvidence(checkout, baseSha, metadata.headSha);
209
+ const lore = await fetchLoreContext({
210
+ metadata,
211
+ title: event.pull_request?.title ?? "",
212
+ body: event.pull_request?.body ?? "",
213
+ diff,
214
+ files,
215
+ });
216
+ metadata.loreDelivery = lore.delivery;
217
+ const prompt = [
218
+ `Review ${metadata.prUrl} at exact head ${metadata.headSha}.`,
219
+ "Only report consequential, actionable defects introduced by this pull request.",
220
+ lore.context === ""
221
+ ? ""
222
+ : `\n<<< RELEVANT LORE ENGINEERING KNOWLEDGE >>>\n${lore.context}\n<<< END RELEVANT LORE ENGINEERING KNOWLEDGE >>>`,
223
+ "\nReturn JSON matching the supplied review schema.",
224
+ ]
225
+ .filter(Boolean)
226
+ .join("\n");
227
+ const promptOut = resolve(required(flags.get("--prompt-out")?.[0], "--prompt-out"));
228
+ const metadataOut = resolve(required(flags.get("--metadata-out")?.[0], "--metadata-out"));
229
+ await Promise.all([
230
+ mkdir(dirname(promptOut), { recursive: true }),
231
+ mkdir(dirname(metadataOut), { recursive: true }),
232
+ ]);
233
+ await Promise.all([
234
+ writeFile(promptOut, `${prompt}\n`, "utf8"),
235
+ writeFile(metadataOut, `${JSON.stringify(metadata, null, 2)}\n`, "utf8"),
236
+ ...(flags.get("--schema-out")?.[0] === undefined
237
+ ? []
238
+ : [
239
+ (async () => {
240
+ const schemaOut = resolve(flags.get("--schema-out")?.[0] ?? "");
241
+ await mkdir(dirname(schemaOut), { recursive: true });
242
+ await writeFile(schemaOut, GITHUB_TEMPLATE_ASSETS["review-output.schema.json"], "utf8");
243
+ })(),
244
+ ]),
245
+ ]);
246
+ }
247
+ async function githubRequest(path, init = {}) {
248
+ const token = required(process.env.GH_TOKEN ?? process.env.GITHUB_TOKEN, "GH_TOKEN");
249
+ const response = await fetch(`https://api.github.com${path}`, {
250
+ ...init,
251
+ headers: {
252
+ accept: "application/vnd.github+json",
253
+ authorization: `Bearer ${token}`,
254
+ "x-github-api-version": "2022-11-28",
255
+ ...(init.headers ?? {}),
256
+ },
257
+ });
258
+ if (!response.ok) {
259
+ throw new Error(`GitHub API ${path} failed with HTTP ${response.status}`);
260
+ }
261
+ return (await response.json());
262
+ }
263
+ function inlineCode(value, maxLength) {
264
+ const bounded = value
265
+ .trim()
266
+ .replace(/[\r\n]+/gu, " ")
267
+ .slice(0, maxLength)
268
+ .replaceAll("`", "'")
269
+ .replaceAll("<", "&lt;")
270
+ .replaceAll(">", "&gt;");
271
+ return `\`${bounded}\``;
272
+ }
273
+ function boundedSessionId(metadata) {
274
+ const value = metadata.sessionId?.trim();
275
+ return value === undefined || value === "" || value.length > 128
276
+ ? undefined
277
+ : value;
278
+ }
279
+ function renderProvenance(metadata) {
280
+ const sessionId = boundedSessionId(metadata);
281
+ const hidden = sessionId === undefined
282
+ ? ""
283
+ : `\n<!-- ${REVIEW_PROVENANCE_MARKER} session=${encodeURIComponent(sessionId)} -->`;
284
+ const visible = [
285
+ `provider ${inlineCode(metadata.provider, 16)}`,
286
+ `repository ${inlineCode(metadata.repository, 120)}`,
287
+ `PR ${metadata.prNumber}`,
288
+ `head ${inlineCode(metadata.headSha, 64)}`,
289
+ ...(sessionId === undefined
290
+ ? []
291
+ : [`session ${inlineCode(sessionId, 128)}`]),
292
+ ].join(" · ");
293
+ return `${hidden}\n\n---\n<sub>Provenance: ${visible}</sub>`;
294
+ }
295
+ function renderReviewOutput(output) {
296
+ return [
297
+ output.summary,
298
+ ...output.findings.map((finding) => {
299
+ const location = finding.path === null
300
+ ? ""
301
+ : ` (${inlineCode(finding.path, 500)}${finding.line === null ? "" : `:${finding.line}`})`;
302
+ return `- **${finding.severity} — ${finding.title}**${location}\n ${finding.body}`;
303
+ }),
304
+ ].join("\n\n");
305
+ }
306
+ function renderReview(metadata, raw) {
307
+ const marker = reviewMarker(metadata);
308
+ const prefix = `${marker}\n### Lore ${metadata.provider} review\n\n`;
309
+ const suffix = renderProvenance(metadata);
310
+ const rendered = renderReviewOutput(parseReviewOutput(raw));
311
+ const truncationNotice = "\n\n[Review truncated by Lore]";
312
+ const available = MAX_COMMENT_LENGTH - prefix.length - suffix.length;
313
+ const body = rendered.length <= available
314
+ ? rendered
315
+ : `${rendered.slice(0, Math.max(0, available - truncationNotice.length))}${truncationNotice}`;
316
+ return `${prefix}${body}${suffix}`;
317
+ }
318
+ async function findExistingReviewComment(metadata, marker) {
319
+ for (let page = 1;; page += 1) {
320
+ const comments = await githubRequest(`/repos/${metadata.owner}/${metadata.repo}/issues/${metadata.prNumber}/comments?per_page=100&page=${page}`);
321
+ const existing = comments.find((comment) => comment.user?.login === "github-actions[bot]" &&
322
+ comment.body?.includes(marker) === true);
323
+ if (existing !== undefined) {
324
+ return existing;
325
+ }
326
+ if (comments.length < 100) {
327
+ return undefined;
328
+ }
329
+ }
330
+ }
331
+ async function postReview(args) {
332
+ const flags = parseFlags(args);
333
+ const metadata = JSON.parse(await readFile(resolve(required(flags.get("--metadata")?.[0], "--metadata")), "utf8"));
334
+ const raw = await readFile(resolve(required(flags.get("--output")?.[0], "--output")), "utf8");
335
+ const marker = reviewMarker(metadata);
336
+ const body = renderReview(metadata, raw);
337
+ const existing = await findExistingReviewComment(metadata, marker);
338
+ if (existing === undefined) {
339
+ await githubRequest(`/repos/${metadata.owner}/${metadata.repo}/issues/${metadata.prNumber}/comments`, {
340
+ method: "POST",
341
+ headers: { "content-type": "application/json" },
342
+ body: JSON.stringify({ body }),
343
+ });
344
+ }
345
+ else {
346
+ await githubRequest(`/repos/${metadata.owner}/${metadata.repo}/issues/comments/${existing.id}`, {
347
+ method: "PATCH",
348
+ headers: { "content-type": "application/json" },
349
+ body: JSON.stringify({ body }),
350
+ });
351
+ }
352
+ }
353
+ function commentIdFromUrl(url) {
354
+ const match = /#issuecomment-(\d+)$/u.exec(url);
355
+ if (match?.[1] === undefined) {
356
+ throw new Error("Correction must reference a GitHub issue-comment URL");
357
+ }
358
+ return Number(match[1]);
359
+ }
360
+ function provenanceSessionId(body) {
361
+ const encoded = /<!-- lore-review-provenance:v1 session=(\S+) -->/u.exec(body)?.[1];
362
+ if (encoded === undefined) {
363
+ return undefined;
364
+ }
365
+ try {
366
+ const decoded = decodeURIComponent(encoded);
367
+ return decoded !== "" && decoded.length <= 128 ? decoded : undefined;
368
+ }
369
+ catch {
370
+ return undefined;
371
+ }
372
+ }
373
+ function parseReviewMarker(body, repository) {
374
+ const v2 = /<!-- lore-review:v2 key=([a-f0-9]{64}) provider=(codex|devin) head=(\S+) pr=(\d+) -->/u.exec(body);
375
+ if (v2?.[1] !== undefined &&
376
+ v2[2] !== undefined &&
377
+ v2[3] !== undefined &&
378
+ v2[4] !== undefined) {
379
+ let headSha;
380
+ try {
381
+ headSha = decodeURIComponent(v2[3]);
382
+ }
383
+ catch {
384
+ return undefined;
385
+ }
386
+ const provider = v2[2];
387
+ const prNumber = Number(v2[4]);
388
+ if (Number.isSafeInteger(prNumber) &&
389
+ reviewEventKey({ provider, repository, prNumber, headSha }) === v2[1]) {
390
+ const sessionId = provenanceSessionId(body);
391
+ return {
392
+ provider,
393
+ prNumber,
394
+ headSha,
395
+ ...(sessionId === undefined ? {} : { sessionId }),
396
+ };
397
+ }
398
+ return undefined;
399
+ }
400
+ const v1 = /<!-- lore-review:v1 provider=(codex|devin)(?: session=(\S+))? head=(\S+) pr=(\d+) -->/u.exec(body);
401
+ if (v1?.[1] === undefined || v1[3] === undefined || v1[4] === undefined) {
402
+ return undefined;
403
+ }
404
+ return {
405
+ provider: v1[1],
406
+ prNumber: Number(v1[4]),
407
+ headSha: v1[3],
408
+ ...(v1[2] === undefined ? {} : { sessionId: v1[2] }),
409
+ };
410
+ }
411
+ async function observeCorrection(args) {
412
+ const flags = parseFlags(args);
413
+ const event = await readEvent(flags.get("--event")?.[0]);
414
+ const repository = required(event.repository?.full_name, "event repository");
415
+ const [owner, repo] = repository.split("/", 2);
416
+ const body = required(event.comment?.body, "comment body");
417
+ const match = /^\/lore\s+correct\s+(\S+)\s*\n+([\s\S]+)$/u.exec(body);
418
+ if (owner === undefined ||
419
+ repo === undefined ||
420
+ match?.[1] === undefined ||
421
+ match[2] === undefined ||
422
+ event.comment?.id === undefined ||
423
+ event.issue?.number === undefined) {
424
+ throw new Error("Use `/lore correct <bot-comment-url>` followed by the correction");
425
+ }
426
+ const sender = required(event.sender?.login, "event sender");
427
+ const permission = await githubRequest(`/repos/${owner}/${repo}/collaborators/${encodeURIComponent(sender)}/permission`);
428
+ if (!["write", "maintain", "admin"].includes(permission.permission ?? "")) {
429
+ throw new Error("The commenter does not have permission to teach Lore");
430
+ }
431
+ const targetId = commentIdFromUrl(match[1]);
432
+ const target = await githubRequest(`/repos/${owner}/${repo}/issues/comments/${targetId}`);
433
+ const marker = parseReviewMarker(target.body ?? "", repository);
434
+ if (target.user?.login !== "github-actions[bot]" ||
435
+ marker === undefined ||
436
+ marker.prNumber !== event.issue.number) {
437
+ throw new Error("The referenced comment is not a Lore review on this PR");
438
+ }
439
+ const connection = await readLoreConnection();
440
+ const eventId = `github:issue_comment:${repository}:${event.comment.id}`;
441
+ const response = await fetch(`${connection.apiUrl}/v1/turns`, {
442
+ method: "POST",
443
+ headers: {
444
+ authorization: `Bearer ${connection.token}`,
445
+ "content-type": "application/json",
446
+ "idempotency-key": eventId,
447
+ },
448
+ body: JSON.stringify({
449
+ connector: "github",
450
+ eventId,
451
+ agent: marker.provider,
452
+ sessionId: marker.sessionId ?? `github:${repository}:pull:${event.issue.number}`,
453
+ previousAssistant: {
454
+ id: `github-comment:${target.id}`,
455
+ content: (target.body ?? "").replace(/<!--[\s\S]*?-->/gu, "").trim(),
456
+ },
457
+ currentUser: {
458
+ id: `github-comment:${event.comment.id}`,
459
+ content: match[2].trim(),
460
+ ...(event.comment.created_at === undefined
461
+ ? {}
462
+ : { timestamp: event.comment.created_at }),
463
+ },
464
+ occurredAt: event.comment.created_at ?? new Date().toISOString(),
465
+ scope: { repo: repository },
466
+ learningScope: {},
467
+ metadata: {
468
+ prNumber: event.issue.number,
469
+ headSha: marker.headSha,
470
+ },
471
+ }),
472
+ signal: AbortSignal.timeout(10_000),
473
+ });
474
+ if (!response.ok) {
475
+ const detail = (await response.text()).trim().slice(0, 1_000);
476
+ throw new Error(`Lore correction failed with HTTP ${response.status}${detail === "" ? "" : `: ${detail}`}`);
477
+ }
478
+ }
479
+ async function writeGhSecret(repo, name, value, variable = false) {
480
+ await new Promise((resolvePromise, reject) => {
481
+ const args = variable
482
+ ? ["variable", "set", name, "--repo", repo, "--body", value]
483
+ : ["secret", "set", name, "--repo", repo];
484
+ const child = spawn("gh", args, { stdio: ["pipe", "ignore", "pipe"] });
485
+ let stderr = "";
486
+ child.stderr.setEncoding("utf8").on("data", (chunk) => {
487
+ stderr += chunk;
488
+ });
489
+ child.on("error", reject);
490
+ child.on("close", (code) => {
491
+ if (code === 0) {
492
+ resolvePromise();
493
+ }
494
+ else {
495
+ reject(new Error(`gh failed to set ${name}: ${stderr.trim()}`));
496
+ }
497
+ });
498
+ child.stdin.end(variable ? undefined : value);
499
+ });
500
+ }
501
+ export async function connectGithub(args) {
502
+ const flags = parseFlags(args);
503
+ const root = resolve(flags.get("--repo-root")?.[0] ?? process.cwd());
504
+ const repository = flags.get("--repo")?.[0] ?? process.env.GITHUB_REPOSITORY;
505
+ const workflowRoot = resolve(root, ".github", "workflows");
506
+ const loreRoot = resolve(root, ".github", "lore");
507
+ await Promise.all([
508
+ mkdir(workflowRoot, { recursive: true }),
509
+ mkdir(loreRoot, { recursive: true }),
510
+ ]);
511
+ await Promise.all([
512
+ ...TEMPLATE_FILES.map((file) => writeFile(resolve(workflowRoot, file), GITHUB_TEMPLATE_ASSETS[file], "utf8")),
513
+ writeFile(resolve(loreRoot, "review-output.schema.json"), GITHUB_TEMPLATE_ASSETS["review-output.schema.json"], "utf8"),
514
+ ]);
515
+ if (flags.has("--configure-secrets")) {
516
+ const repo = required(repository, "--repo");
517
+ const connection = await readLoreConnection();
518
+ await writeGhSecret(repo, "LORE_WORKSPACE_TOKEN", connection.token);
519
+ await writeGhSecret(repo, "LORE_API_URL", connection.apiUrl, true);
520
+ const openAiKey = process.env.OPENAI_API_KEY;
521
+ const devinKey = process.env.DEVIN_API_KEY;
522
+ const devinOrg = process.env.DEVIN_ORG_ID;
523
+ if (openAiKey !== undefined) {
524
+ await writeGhSecret(repo, "OPENAI_API_KEY", openAiKey);
525
+ }
526
+ if (devinKey !== undefined) {
527
+ await writeGhSecret(repo, "DEVIN_API_KEY", devinKey);
528
+ }
529
+ if (devinOrg !== undefined) {
530
+ await writeGhSecret(repo, "DEVIN_ORG_ID", devinOrg, true);
531
+ }
532
+ }
533
+ process.stdout.write(`GitHub workflows installed in ${resolve(root, ".github")}.\nSet LORE_WORKSPACE_TOKEN and vendor credentials before enabling review labels.\n`);
534
+ }
535
+ export async function runGithubCommand(args) {
536
+ const command = args[0];
537
+ switch (command) {
538
+ case "prepare-review":
539
+ await prepareReview(args.slice(1));
540
+ return;
541
+ case "post-review":
542
+ await postReview(args.slice(1));
543
+ return;
544
+ case "observe-correction":
545
+ await observeCorrection(args.slice(1));
546
+ return;
547
+ default:
548
+ throw new Error(`Unknown github command: ${command ?? ""}. Use prepare-review, post-review, or observe-correction.`);
549
+ }
550
+ }
551
+ export function reviewEventKey(metadata) {
552
+ return createHash("sha256")
553
+ .update(`${metadata.provider}\0${metadata.repository}\0${metadata.prNumber}\0${metadata.headSha}`)
554
+ .digest("hex");
555
+ }
556
+ export function reviewMarker(metadata) {
557
+ return `<!-- ${REVIEW_MARKER_V2} key=${reviewEventKey(metadata)} provider=${metadata.provider} head=${encodeURIComponent(metadata.headSha)} pr=${metadata.prNumber} -->`;
558
+ }
559
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"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"}
package/dist/host.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ export type HostCommand = "deliver" | "observe" | "turn";
2
+ export type HostOutput = "json" | "context" | "prompt";
3
+ export interface HostConnection {
4
+ apiUrl: string;
5
+ token: string;
6
+ timeoutMs: number;
7
+ }
8
+ export interface HostCommandOptions {
9
+ env?: NodeJS.ProcessEnv;
10
+ home?: string;
11
+ fetch?: typeof fetch;
12
+ stdin?: NodeJS.ReadableStream & AsyncIterable<string | Uint8Array>;
13
+ stdout?: {
14
+ write(value: string): unknown;
15
+ };
16
+ }
17
+ export declare const HOST_HELP = "lore host\nCall Lore's auditable host APIs from services, CI, and webhook handlers.\n\nUsage:\n lore host <command> [options]\n\nCommands:\n deliver Retrieve context and record a delivery receipt\n observe Record a stable host event for later learning\n turn Process an assistant/user pair and retrieve context\n\nDiscover:\n lore host deliver --help\n lore host observe --help\n lore host turn --help\n\nExamples:\n lore host deliver --input request.json --output prompt\n cat observation.json | lore host observe --input -\n lore host turn --input turn.json --idempotency-key incident-42:reply-3\n";
18
+ export declare const HOST_DELIVER_HELP = "lore host deliver\nSend exact POST /v1/context/deliveries JSON and print its audited result.\n\nUsage:\n lore host deliver --input <file|-> [--output json|context|prompt]\n\nOptions:\n --input <file|-> Strict endpoint JSON file, or - for standard input\n --output <format> json (default), context, or prompt\n --help Show this command's help\n\nExamples:\n lore host deliver --input delivery.json --output json\n cat delivery.json | lore host deliver --input - --output prompt\n";
19
+ export declare const HOST_OBSERVE_HELP = "lore host observe\nSend exact POST /v1/observations JSON and print its audited event.\n\nUsage:\n lore host observe --input <file|-> [--output json]\n\nOptions:\n --input <file|-> Strict endpoint JSON file, or - for standard input\n --output json Print the JSON response (default)\n --help Show this command's help\n\nExamples:\n lore host observe --input webhook-observation.json\n cat observation.json | lore host observe --input -\n";
20
+ export declare const HOST_TURN_HELP = "lore host turn\nSend exact POST /v1/turns JSON and print its audited result.\n\nUsage:\n lore host turn --input <file|-> [--output json|context|prompt] [--idempotency-key value]\n\nOptions:\n --input <file|-> Strict endpoint JSON file, or - for standard input\n --output <format> json (default), context, or prompt\n --idempotency-key <value> Forward a retry-safe Idempotency-Key header\n --help Show this command's help\n\nExamples:\n lore host turn --input turn.json --output prompt\n cat turn.json | lore host turn --input - --idempotency-key incident-42:reply-3\n";
21
+ export declare function readHostConnection(env?: NodeJS.ProcessEnv, home?: string): Promise<HostConnection>;
22
+ export declare function injectHostContext(original: string, context: string): string;
23
+ export declare function runHostCommand(args: readonly string[], options?: HostCommandOptions): Promise<void>;
24
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AACzD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,GAAG,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IACnE,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CAC5C;AAQD,eAAO,MAAM,SAAS,+mBAoBrB,CAAC;AAEF,eAAO,MAAM,iBAAiB,ogBAc7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,6dAc7B,CAAC;AAEF,eAAO,MAAM,cAAc,mnBAe1B,CAAC;AAkHF,wBAAsB,kBAAkB,CACtC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,IAAI,SAAwB,GAC3B,OAAO,CAAC,cAAc,CAAC,CA0CzB;AAiFD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAM3E;AAgBD,wBAAsB,cAAc,CAClC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CA2Ef"}