@lore-co/cli 0.1.24 → 0.1.26

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 (48) hide show
  1. package/README.md +76 -5
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +50 -4
  4. package/dist/cli.js.map +1 -1
  5. package/dist/codex-hook-approval.d.ts +13 -0
  6. package/dist/codex-hook-approval.d.ts.map +1 -0
  7. package/dist/codex-hook-approval.js +96 -0
  8. package/dist/codex-hook-approval.js.map +1 -0
  9. package/dist/devin-capture.d.ts +25 -0
  10. package/dist/devin-capture.d.ts.map +1 -0
  11. package/dist/devin-capture.js +177 -0
  12. package/dist/devin-capture.js.map +1 -0
  13. package/dist/devin-cli.d.ts +21 -0
  14. package/dist/devin-cli.d.ts.map +1 -0
  15. package/dist/devin-cli.js +432 -0
  16. package/dist/devin-cli.js.map +1 -0
  17. package/dist/devin.d.ts.map +1 -1
  18. package/dist/devin.js +15 -8
  19. package/dist/devin.js.map +1 -1
  20. package/dist/generated-assets.d.ts +4 -4
  21. package/dist/generated-assets.js +4 -4
  22. package/dist/image-capture.d.ts +62 -0
  23. package/dist/image-capture.d.ts.map +1 -0
  24. package/dist/image-capture.js +266 -0
  25. package/dist/image-capture.js.map +1 -0
  26. package/dist/invocation-health-writer.d.ts.map +1 -1
  27. package/dist/invocation-health-writer.js +5 -1
  28. package/dist/invocation-health-writer.js.map +1 -1
  29. package/dist/recovery-state.d.ts +1 -1
  30. package/dist/recovery.d.ts +2 -2
  31. package/dist/recovery.d.ts.map +1 -1
  32. package/dist/recovery.js +37 -22
  33. package/dist/recovery.js.map +1 -1
  34. package/dist/reliability-store.d.ts.map +1 -1
  35. package/dist/reliability-store.js +2 -1
  36. package/dist/reliability-store.js.map +1 -1
  37. package/dist/runtime.d.ts +4 -0
  38. package/dist/runtime.d.ts.map +1 -1
  39. package/dist/runtime.js +34 -0
  40. package/dist/runtime.js.map +1 -1
  41. package/dist/self-host.d.ts +1 -1
  42. package/dist/self-host.js +2 -2
  43. package/dist/share.d.ts +3 -0
  44. package/dist/share.d.ts.map +1 -0
  45. package/dist/share.js +51 -0
  46. package/dist/share.js.map +1 -0
  47. package/dist/update.js +3 -3
  48. package/package.json +7 -3
@@ -0,0 +1,25 @@
1
+ import { type ObservationRequest } from "@lore-co/core";
2
+ import { SharedMemoryClient } from "@lore-co/sdk";
3
+ import { ReliabilityStore } from "./reliability-store.js";
4
+ import type { HostConnection } from "./host.js";
5
+ export declare const devinHash: (value: string) => string;
6
+ /** Do not upload system prompts, reasoning, tool definitions, or tool output. */
7
+ export declare function devinObservations(value: unknown, repo?: string): ObservationRequest[];
8
+ export declare function readDevinJson(path: string, maxBytes?: number): Promise<unknown>;
9
+ /** Credential binding prevents an old workspace's exports from following a new login. */
10
+ export declare function devinCaptureKey(connection: HostConnection): string;
11
+ export declare class DevinCapture {
12
+ readonly connection: HostConnection;
13
+ readonly store: ReliabilityStore;
14
+ readonly client: SharedMemoryClient;
15
+ constructor(connection: HostConnection, home: string, fetcher?: typeof fetch);
16
+ ingest(value: unknown, repo?: string, exportDirectory?: string): Promise<number>;
17
+ flush(): Promise<number>;
18
+ status(): Promise<{
19
+ lastCapture: import("./reliability-store.js").JsonValue;
20
+ pending: number;
21
+ authBlocked: number;
22
+ failed: number;
23
+ }>;
24
+ }
25
+ //# sourceMappingURL=devin-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devin-capture.d.ts","sourceRoot":"","sources":["../src/devin-capture.ts"],"names":[],"mappings":"AAKA,OAAO,EAEc,KAAK,kBAAkB,EAC3C,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAwB,MAAM,wBAAwB,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhD,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAA0D,CAAC;AAmBrG,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAqCrF;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAY/F;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM,CAElE;AAED,qBAAa,YAAY;IAGX,QAAQ,CAAC,UAAU,EAAE,cAAc;IAF/C,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;gBACf,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,KAAa;IAQtF,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkChF,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IA2BxB,MAAM;;;;;;CASb"}
@@ -0,0 +1,177 @@
1
+ import { createHash } from "node:crypto";
2
+ import { constants } from "node:fs";
3
+ import { open } from "node:fs/promises";
4
+ import { basename, resolve } from "node:path";
5
+ import { z } from "zod";
6
+ import { ObservationRequestSchema, redactSensitiveText, stripLoreInjectedContext, } from "@lore-co/core";
7
+ import { SharedMemoryClient } from "@lore-co/sdk";
8
+ import { ReliabilityStore, classifyRetryFailure } from "./reliability-store.js";
9
+ import { enqueueEventImages, flushQueuedImages, hostMessageImages } from "./image-capture.js";
10
+ export const devinHash = (value) => createHash("sha256").update(value).digest("hex");
11
+ const clean = (value) => redactSensitiveText(stripLoreInjectedContext(value)).text;
12
+ const timestamp = z.string().refine(value => Number.isFinite(Date.parse(value)), "Invalid export timestamp");
13
+ const Step = z.object({
14
+ step_id: z.number().int().nonnegative(), timestamp,
15
+ source: z.enum(["system", "user", "agent"]), message: z.union([z.string(), z.array(z.object({ type: z.string(), text: z.string().optional(), source: z.object({ media_type: z.string(), path: z.string() }).optional() }).passthrough()).max(200)]),
16
+ tool_calls: z.array(z.unknown()).optional(),
17
+ });
18
+ const Export = z.object({
19
+ schema_version: z.string().regex(/^ATIF-v1\./u),
20
+ session_id: z.string().min(1).max(500),
21
+ agent: z.object({ name: z.literal("devin") }),
22
+ steps: z.array(Step).max(100_000),
23
+ });
24
+ const messageText = (step) => typeof step.message === "string" ? step.message : step.message.filter(part => part.type === "text").map(part => part.text ?? "").join("\n") || step.message.filter(part => part.type === "image").map(part => part.source?.path.startsWith("data:") ? "Image" : basename((part.source?.path ?? "Image").split(/[?#]/u)[0])).join(", ");
25
+ const messageId = (sessionId, step) => `devin:${devinHash(`${sessionId}:${step.step_id}:${step.timestamp}`)}`;
26
+ const CAPTURE_KIND = "devin-cli-observation";
27
+ /** Do not upload system prompts, reasoning, tool definitions, or tool output. */
28
+ export function devinObservations(value, repo) {
29
+ const data = Export.parse(value);
30
+ const seen = new Set();
31
+ for (const step of data.steps) {
32
+ if (seen.has(step.step_id))
33
+ throw new Error("Duplicate Devin export step ID");
34
+ seen.add(step.step_id);
35
+ }
36
+ const groups = [];
37
+ for (const step of data.steps) {
38
+ if (step.source === "user")
39
+ groups.push({ user: step, replies: [] });
40
+ else if (step.source === "agent")
41
+ groups.at(-1)?.replies.push(step);
42
+ }
43
+ const message = (step) => ({
44
+ role: step.source === "user" ? "user" : "assistant",
45
+ content: clean(messageText(step)),
46
+ id: messageId(data.session_id, step),
47
+ timestamp: new Date(step.timestamp).toISOString(),
48
+ });
49
+ return groups.flatMap((group, index) => {
50
+ const final = group.replies.at(-1);
51
+ // A tool call or interrupted generation is not a completed assistant reply.
52
+ if (!final || final.tool_calls?.length || !messageText(final).trim())
53
+ return [];
54
+ const previous = groups[index - 1]?.replies.at(-1);
55
+ const messages = [
56
+ ...(previous && !previous.tool_calls?.length && messageText(previous).trim() ? [message(previous)] : []),
57
+ message(group.user), ...group.replies.filter(step => messageText(step).trim()).map(message),
58
+ ];
59
+ const eventId = `devin-cli:${devinHash(`${data.session_id}:${group.user.step_id}:${group.user.timestamp}`)}`;
60
+ const request = ObservationRequestSchema.parse({
61
+ connector: "devin-cli", eventId, agent: "devin", sessionId: data.session_id,
62
+ ...(repo ? { scope: { repo } } : {}), learningScope: repo ? { repo } : {},
63
+ messages, occurredAt: new Date(final.timestamp).toISOString(),
64
+ metadata: { source: "devin-cli", format: "atif", schemaVersion: data.schema_version },
65
+ });
66
+ if (Buffer.byteLength(JSON.stringify(request)) > 900_000)
67
+ throw new Error("Devin turn exceeds Lore's capture limit");
68
+ return [request];
69
+ });
70
+ }
71
+ export async function readDevinJson(path, maxBytes = 64 * 1024 * 1024) {
72
+ const file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW);
73
+ try {
74
+ const stat = await file.stat();
75
+ if (!stat.isFile() || stat.size > maxBytes || (process.getuid && stat.uid !== process.getuid())) {
76
+ throw new Error("Unsafe or oversized Devin capture file");
77
+ }
78
+ // readFile can race a writer. A partial JSON document is retried on the next tick.
79
+ const bytes = await file.readFile();
80
+ if (bytes.length > maxBytes)
81
+ throw new Error("Devin export exceeds the capture limit");
82
+ return JSON.parse(bytes.toString("utf8"));
83
+ }
84
+ finally {
85
+ await file.close();
86
+ }
87
+ }
88
+ /** Credential binding prevents an old workspace's exports from following a new login. */
89
+ export function devinCaptureKey(connection) {
90
+ return `devin-cli-${devinHash(`${connection.apiUrl}\n${connection.token}`)}`;
91
+ }
92
+ export class DevinCapture {
93
+ connection;
94
+ store;
95
+ client;
96
+ constructor(connection, home, fetcher = fetch) {
97
+ this.connection = connection;
98
+ this.store = new ReliabilityStore(devinCaptureKey(connection), { home });
99
+ this.client = new SharedMemoryClient({
100
+ baseUrl: connection.apiUrl, headers: { authorization: `Bearer ${connection.token}` },
101
+ timeoutMs: connection.timeoutMs, fetch: fetcher,
102
+ });
103
+ }
104
+ async ingest(value, repo, exportDirectory) {
105
+ let count = 0;
106
+ const data = Export.parse(value);
107
+ const steps = new Map(data.steps.map(step => [messageId(data.session_id, step), step]));
108
+ for (const request of devinObservations(value, repo)) {
109
+ const images = (await Promise.all(request.messages.slice(request.messages.findIndex(message => message.role === "user")).map(async (message) => {
110
+ const step = message.id ? steps.get(message.id) : undefined;
111
+ if (!step || typeof step.message === "string")
112
+ return [];
113
+ const parts = step.message.map(part => part.type === "image" && part.source && !/^https?:/iu.test(part.source.path)
114
+ ? part.source.path.startsWith("data:") ? { type: "file", url: part.source.path }
115
+ : exportDirectory ? { type: "file", file_path: resolve(exportDirectory, part.source.path) } : part
116
+ : part);
117
+ return hostMessageImages(parts, message.role === "assistant" ? "assistant" : "user");
118
+ }))).flat();
119
+ const key = `captured:${request.eventId}`;
120
+ const hash = devinHash(JSON.stringify(request));
121
+ const imageHashes = images.map(image => devinHash(`${image.role}:${image.name}:${image.base64}`));
122
+ const previous = await this.store.readState(key);
123
+ if (previous !== null) {
124
+ if (typeof previous !== "object" || Array.isArray(previous) || previous.hash !== hash) {
125
+ throw new Error("A previously captured Devin turn changed; its original recording was retained");
126
+ }
127
+ if (images.length && Array.isArray(previous.imageHashes) && JSON.stringify(previous.imageHashes) !== JSON.stringify(imageHashes))
128
+ throw new Error("A previously captured Devin image changed; its original bytes were retained");
129
+ continue;
130
+ }
131
+ await this.store.enqueue({ kind: CAPTURE_KIND, idempotencyKey: request.eventId, payload: request });
132
+ await enqueueEventImages(this.store, { connector: request.connector, eventId: request.eventId, sessionId: request.sessionId }, images);
133
+ // Mark only after the redacted request is durable. Delivery can resume after a crash.
134
+ await this.store.writeState(key, { hash, imageHashes });
135
+ count++;
136
+ }
137
+ return count;
138
+ }
139
+ async flush() {
140
+ let sent = 0;
141
+ for (let index = 0; index < 100; index++) {
142
+ const entry = await this.store.claimNext({ workerId: `devin-cli-${process.pid}`, kinds: [CAPTURE_KIND] });
143
+ if (!entry?.claim)
144
+ break;
145
+ try {
146
+ const request = ObservationRequestSchema.parse(entry.payload);
147
+ const result = await this.client.observeEvent(request);
148
+ await this.store.writeState("last-capture", {
149
+ sessionId: request.sessionId, eventId: result.event.id,
150
+ capturedAt: new Date().toISOString(),
151
+ });
152
+ await this.store.acknowledgeClaim(entry.claim.id);
153
+ sent++;
154
+ }
155
+ catch (error) {
156
+ const failure = error;
157
+ await this.store.failClaim({
158
+ claimId: entry.claim.id, classification: classifyRetryFailure(failure),
159
+ message: "Devin capture could not be uploaded. Check Lore connection and capture status.",
160
+ });
161
+ break;
162
+ }
163
+ }
164
+ await flushQueuedImages(this.store, (target, image, name) => this.client.attachEventImage(target, image, name));
165
+ return sent;
166
+ }
167
+ async status() {
168
+ const entries = await this.store.listOutbox();
169
+ return {
170
+ lastCapture: await this.store.readState("last-capture"),
171
+ pending: entries.filter(entry => entry.state === "ready" || entry.state === "in-flight").length,
172
+ authBlocked: entries.filter(entry => entry.state === "auth-blocked").length,
173
+ failed: entries.filter(entry => entry.state === "dead").length,
174
+ };
175
+ }
176
+ }
177
+ //# sourceMappingURL=devin-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devin-capture.js","sourceRoot":"","sources":["../src/devin-capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { DevinCapture } from "./devin-capture.js";
2
+ export declare const devinCaptureEnabled: (home: string) => Promise<boolean>;
3
+ export declare const DEVIN_CLI_HELP = "lore devin cli\nRecord local Devin conversations in Lore with automatic ATIF exports.\n\nUsage:\n lore devin cli setup Enable capture for the devin command in bash/zsh\n lore devin cli -- [args] Run Devin with automatic capture immediately\n lore devin cli status Show the last capture and pending uploads\n lore devin cli sync Retry retained exports and queued uploads\n lore devin cli off Remove the shell integration and Lore's Devin hooks\n\nSign in with devin auth login and approve the repository in interactive Devin.\nWorkspace trust and Devin permissions remain in effect. Cloud sessions continue\nto use lore devin start. Setup uses your existing Lore connection.\n";
4
+ export declare function removeDevinShell(text: string): string;
5
+ export declare function mergeDevinHooks(value: unknown, command?: string): Record<string, unknown>;
6
+ /** Devin reads Claude hooks too. Gate only Lore's commands, retaining user hooks. */
7
+ export declare function claudeOnlyCommand(command: string): string;
8
+ export declare function setupDevinCli(home: string, env?: NodeJS.ProcessEnv): Promise<string>;
9
+ export declare function disableDevinCli(home: string): Promise<void>;
10
+ export declare function devinLaunchArguments(args: readonly string[], managedExport: string): {
11
+ args: string[];
12
+ exportPath: string;
13
+ managed: boolean;
14
+ } | null;
15
+ export declare function syncDevinCaptures(capture: DevinCapture, home: string): Promise<void>;
16
+ type Launch = (command: string, args: string[], env: NodeJS.ProcessEnv) => Promise<void>;
17
+ export declare function captureDevinSession(command: string, args: readonly string[], home: string, launch: Launch): Promise<void>;
18
+ export declare function runDevinCliHook(home: string, input?: unknown, env?: NodeJS.ProcessEnv): Promise<unknown>;
19
+ export declare function runDevinCli(args: readonly string[], home: string): Promise<void>;
20
+ export {};
21
+ //# sourceMappingURL=devin-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devin-cli.d.ts","sourceRoot":"","sources":["../src/devin-cli.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,YAAY,EAA6C,MAAM,oBAAoB,CAAC;AAoB7F,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,OAAO,CAAC,OAAO,CAAsF,CAAC;AAEzJ,eAAO,MAAM,cAAc,ssBAa1B,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMrD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAczF;AAED,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AA2BD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,oBAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAwDpF;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYjE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAapJ;AA8CD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY1F;AAED,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AACzF,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC/H;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,oBAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CA2BxG;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBtF"}