@lore-co/cli 0.2.8 → 0.2.10

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 (52) hide show
  1. package/README.md +2 -2
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +5 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/connections.d.ts.map +1 -1
  6. package/dist/connections.js +25 -3
  7. package/dist/connections.js.map +1 -1
  8. package/dist/devin-cli.d.ts +1 -1
  9. package/dist/devin-cli.d.ts.map +1 -1
  10. package/dist/devin-cli.js +46 -5
  11. package/dist/devin-cli.js.map +1 -1
  12. package/dist/generated-assets.d.ts +4 -4
  13. package/dist/generated-assets.d.ts.map +1 -1
  14. package/dist/generated-assets.js +4 -4
  15. package/dist/generated-assets.js.map +1 -1
  16. package/dist/live.d.ts.map +1 -1
  17. package/dist/live.js +24 -7
  18. package/dist/live.js.map +1 -1
  19. package/dist/recovery-cloud.d.ts.map +1 -1
  20. package/dist/recovery-cloud.js +22 -5
  21. package/dist/recovery-cloud.js.map +1 -1
  22. package/dist/recovery-desktop.d.ts.map +1 -1
  23. package/dist/recovery-desktop.js +11 -3
  24. package/dist/recovery-desktop.js.map +1 -1
  25. package/dist/recovery-remote.d.ts +1 -1
  26. package/dist/recovery-remote.d.ts.map +1 -1
  27. package/dist/recovery-remote.js +19 -4
  28. package/dist/recovery-remote.js.map +1 -1
  29. package/dist/recovery-state.d.ts +2 -0
  30. package/dist/recovery-state.d.ts.map +1 -1
  31. package/dist/recovery-state.js +41 -4
  32. package/dist/recovery-state.js.map +1 -1
  33. package/dist/recovery-transfer.d.ts.map +1 -1
  34. package/dist/recovery-transfer.js +39 -8
  35. package/dist/recovery-transfer.js.map +1 -1
  36. package/dist/recovery.d.ts +1 -1
  37. package/dist/recovery.d.ts.map +1 -1
  38. package/dist/recovery.js +75 -22
  39. package/dist/recovery.js.map +1 -1
  40. package/dist/reliability-store.d.ts.map +1 -1
  41. package/dist/reliability-store.js +5 -2
  42. package/dist/reliability-store.js.map +1 -1
  43. package/dist/runtime.d.ts.map +1 -1
  44. package/dist/runtime.js +25 -5
  45. package/dist/runtime.js.map +1 -1
  46. package/dist/self-host.d.ts +1 -1
  47. package/dist/self-host.d.ts.map +1 -1
  48. package/dist/self-host.js +2 -2
  49. package/dist/self-host.js.map +1 -1
  50. package/dist/update.js +3 -3
  51. package/dist/update.js.map +1 -1
  52. package/package.json +3 -3
@@ -3,17 +3,30 @@ import { resolve } from "node:path";
3
3
  import { connectionConfigPath, localConnectionId, savedLocalConnections } from "./directory-policy.js";
4
4
  import { atomicWriteJson } from "./reliability-store.js";
5
5
  const validName = (value) => /^[a-z0-9][a-z0-9_-]{0,63}$/u.test(value);
6
+ const canonicalApi = (value) => new URL(value).href.replace(/\/+$/u, "");
6
7
  function defaultName(connection) {
7
8
  const label = (connection.workspaceName ?? "workspace").toLowerCase().replace(/[^a-z0-9]+/gu, "-").replace(/^-|-$/gu, "").slice(0, 45) || "workspace";
8
9
  return `${label}-${localConnectionId(connection).slice(0, 8)}`;
9
10
  }
10
11
  export async function prepareConnection(paths, identity, credentials, previousIdentity) {
11
12
  const saved = await savedLocalConnections(paths.home);
12
- const profiles = saved.map(connection => {
13
+ const sameCredential = (connection) => canonicalApi(connection.apiUrl) === canonicalApi(credentials.apiUrl)
14
+ && connection.workspaceId === identity.workspaceId && connection.token === credentials.token;
15
+ if (!identity.account && new Set(saved.filter(sameCredential).map(connection => connection.accountId).filter(Boolean)).size > 1) {
16
+ throw new Error("This credential matches multiple saved accounts, but the server returned no account identity. Restore account identity on the server before reconnecting.");
17
+ }
18
+ let profiles = saved.map(connection => {
13
19
  // A successful check of the previous credential upgrades legacy identity.
14
- const previous = previousIdentity && !connection.connectionId
20
+ let previous = previousIdentity && !connection.connectionId
15
21
  ? { ...connection, ...(previousIdentity.account ? { accountId: previousIdentity.account.id } : {}), workspaceId: previousIdentity.workspaceId, workspaceName: previousIdentity.workspaceName }
16
22
  : connection;
23
+ // Older servers omit account identity. Reconcile that metadata transition
24
+ // only for the exact authenticated credential and workspace. Two different
25
+ // known accounts must remain separate, even if a token was reassigned.
26
+ if (sameCredential(previous) && (!previous.accountId || !identity.account)) {
27
+ const { accountId: _oldAccount, ...rest } = previous;
28
+ previous = { ...rest, ...(identity.account ? { accountId: identity.account.id } : {}) };
29
+ }
17
30
  const connectionId = localConnectionId(previous);
18
31
  return { ...previous, connectionId, connectionName: previous.connectionName ?? defaultName(previous) };
19
32
  });
@@ -23,7 +36,16 @@ export async function prepareConnection(paths, identity, credentials, previousId
23
36
  ...(identity.account ? { accountId: identity.account.id } : {}),
24
37
  };
25
38
  const connectionId = localConnectionId(target);
26
- const previous = profiles.find(value => value.connectionId === connectionId);
39
+ const matching = profiles.filter(value => value.connectionId === connectionId);
40
+ // A previous reconnect may already have created an empty duplicate. Keep
41
+ // the original configured profile, but never combine conflicting rules.
42
+ const configured = matching.filter(value => value.directories === undefined || value.directories.include.length > 0);
43
+ if (configured.some(value => JSON.stringify(value.directories) !== JSON.stringify(configured[0].directories))) {
44
+ throw new Error("Matching saved connections have different folder rules. Reconcile their rules with lore config before reconnecting.");
45
+ }
46
+ const candidates = configured.length ? configured : matching;
47
+ const previous = candidates.find(value => value.connectionName === credentials.connectionName) ?? candidates[0];
48
+ profiles = [...profiles.filter(value => value.connectionId !== connectionId), ...(previous ? [previous] : [])];
27
49
  const connectionName = credentials.connectionName ?? previous?.connectionName ?? defaultName(target);
28
50
  if (!validName(connectionName))
29
51
  throw new Error("Connection names use lowercase letters, numbers, hyphens, or underscores (up to 64 characters).");
@@ -1 +1 @@
1
- {"version":3,"file":"connections.js","sourceRoot":"","sources":["../src/connections.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connections.js","sourceRoot":"","sources":["../src/connections.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { DevinCapture } from "./devin-capture.js";
2
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 devin in bash, zsh, or PowerShell\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";
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 devin in bash, zsh, or PowerShell\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\nExports that cannot be matched to their original run are kept for manual recovery.\nUse status to find them.\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
4
  export declare function removeDevinShell(text: string): string;
5
5
  export declare function mergeDevinHooks(value: unknown, command?: string): Record<string, unknown>;
6
6
  /** Devin reads Claude hooks too. Gate only Lore's commands, retaining user hooks. */
@@ -1 +1 @@
1
- {"version":3,"file":"devin-cli.d.ts","sourceRoot":"","sources":["../src/devin-cli.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAA6C,MAAM,oBAAoB,CAAC;AAqB7F,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,OAAO,CAAC,OAAO,CAAsF,CAAC;AAEzJ,eAAO,MAAM,cAAc,0sBAa1B,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,CAQzD;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;AA+CD,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,CAiC/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"}
1
+ {"version":3,"file":"devin-cli.d.ts","sourceRoot":"","sources":["../src/devin-cli.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAA6C,MAAM,oBAAoB,CAAC;AAwB7F,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,OAAO,CAAC,OAAO,CAAsF,CAAC;AAEzJ,eAAO,MAAM,cAAc,0zBAgB1B,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,CAQzD;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;AAoED,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,CAqC/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,CAqBtF"}
package/dist/devin-cli.js CHANGED
@@ -29,9 +29,12 @@ const Run = z.object({
29
29
  startedAt: z.string(), initialMtime: z.number().nullable(),
30
30
  closed: z.boolean().optional(),
31
31
  closedMtime: z.number().nullable().optional(),
32
+ /** Only ENOENT at close proves there was no export to import. */
33
+ exportMissingAtClose: z.boolean().optional(),
32
34
  });
33
35
  const directory = (home) => resolve(home, ".lore", "devin-cli");
34
36
  const runsDirectory = (home, key) => resolve(directory(home), "runs", key);
37
+ const unverifiedDirectory = (home, key) => resolve(directory(home), "unverified", key);
35
38
  export const devinCaptureEnabled = (home) => stat(resolve(directory(home), "installation.json")).then(() => true, () => false);
36
39
  export const DEVIN_CLI_HELP = `lore devin cli
37
40
  Record local Devin conversations in Lore with automatic ATIF exports.
@@ -43,6 +46,9 @@ Usage:
43
46
  lore devin cli sync Retry retained exports and queued uploads
44
47
  lore devin cli off Remove the shell integration and Lore's Devin hooks
45
48
 
49
+ Exports that cannot be matched to their original run are kept for manual recovery.
50
+ Use status to find them.
51
+
46
52
  Sign in with devin auth login and approve the repository in interactive Devin.
47
53
  Workspace trust and Devin permissions remain in effect. Cloud sessions continue
48
54
  to use lore devin start. Setup uses your existing Lore connection.
@@ -260,10 +266,15 @@ async function repoFor(cwd) {
260
266
  }
261
267
  async function syncRun(capture, runPath) {
262
268
  const run = Run.parse(await readDevinJson(resolve(runPath, "run.json")));
263
- if (!(await checkLoreAccess(run.cwd, capture.home, capture.connection, capture.fetcher, run.repo)).allowed)
264
- return false;
265
269
  if (run.key !== devinCaptureKey(capture.connection))
266
270
  throw new Error("Devin capture belongs to another Lore connection");
271
+ // Cleanup must work while offline or access is denied. A later file at an
272
+ // explicitly missing export path belongs to neither this run nor its scope.
273
+ if (run.closed && run.exportMissingAtClose) {
274
+ await rm(runPath, { recursive: true, force: true });
275
+ return false;
276
+ }
277
+ const unverified = run.closed && run.closedMtime == null;
267
278
  let info;
268
279
  try {
269
280
  info = await stat(run.exportPath);
@@ -274,8 +285,26 @@ async function syncRun(capture, runPath) {
274
285
  await rm(runPath, { recursive: true, force: true });
275
286
  return false;
276
287
  }
277
- throw error;
288
+ if (!unverified)
289
+ throw error;
290
+ }
291
+ if (unverified) {
292
+ // Legacy null baselines also represent stat errors, so preserve their data.
293
+ // Moving them out of the retry queue prevents repeated warnings and avoids
294
+ // importing a subsequent session's export with this run's saved scope.
295
+ const destination = resolve(unverifiedDirectory(capture.home, run.key), basename(runPath));
296
+ await mkdir(dirname(destination), { recursive: true, mode: 0o700 });
297
+ await rename(runPath, destination);
298
+ if (run.managed && run.exportPath === resolve(runPath, "conversation.atif.json")) {
299
+ await atomicWriteJson(resolve(destination, "run.json"), { ...run, exportPath: resolve(destination, "conversation.atif.json") });
300
+ }
301
+ process.stderr.write(`Lore set aside an unverified Devin export for manual recovery: ${destination}\n`);
302
+ return false;
278
303
  }
304
+ if (!info)
305
+ throw new Error("Devin export metadata is unavailable");
306
+ if (!(await checkLoreAccess(run.cwd, capture.home, capture.connection, capture.fetcher, run.repo)).allowed)
307
+ return false;
279
308
  if (run.closed && run.closedMtime !== undefined && info.mtimeMs !== run.closedMtime) {
280
309
  throw new Error("The Devin export changed after this run closed; refusing to import it with an old repository scope");
281
310
  }
@@ -364,7 +393,15 @@ export async function captureDevinSession(command, args, home, launch) {
364
393
  finally {
365
394
  stopped = true;
366
395
  await watcher;
367
- await atomicWriteJson(resolve(runPath, "run.json"), { ...run, closed: true, closedMtime: await stat(run.exportPath).then(info => info.mtimeMs, () => null) });
396
+ let closedMtime = null;
397
+ let exportMissingAtClose = false;
398
+ try {
399
+ closedMtime = (await stat(run.exportPath)).mtimeMs;
400
+ }
401
+ catch (error) {
402
+ exportMissingAtClose = error.code === "ENOENT";
403
+ }
404
+ await atomicWriteJson(resolve(runPath, "run.json"), { ...run, closed: true, closedMtime, exportMissingAtClose });
368
405
  await sync(true);
369
406
  const state = await capture.status();
370
407
  if (state.pending || state.authBlocked || state.failed)
@@ -433,7 +470,11 @@ export async function runDevinCli(args, home) {
433
470
  await capture.store.releaseAuthBlocked();
434
471
  await syncDevinCaptures(capture, home);
435
472
  }
436
- process.stdout.write(`${JSON.stringify(await capture.status(), null, 2)}\n`);
473
+ const unverifiedPath = unverifiedDirectory(home, devinCaptureKey(capture.connection));
474
+ const unverified = await readdir(unverifiedPath).catch((error) => { if (error.code === "ENOENT")
475
+ return []; throw error; });
476
+ const unverifiedExports = unverified.filter(name => /^[0-9a-f-]{36}$/u.test(name)).length;
477
+ process.stdout.write(`${JSON.stringify({ ...await capture.status(), ...(unverifiedExports ? { unverifiedExports, unverifiedExportsPath: unverifiedPath } : {}) }, null, 2)}\n`);
437
478
  return;
438
479
  }
439
480
  if (args.length && !["--help", "-h"].includes(args[0]))
@@ -1 +1 @@
1
- {"version":3,"file":"devin-cli.js","sourceRoot":"","sources":["../src/devin-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devin-cli.js","sourceRoot":"","sources":["../src/devin-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC1H,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACjC,MAAM,KAAK,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AAC/E,MAAM,KAAK,GAAG,8BAA8B,CAAC;AAC7C,MAAM,GAAG,GAAG,8BAA8B,CAAC;AAC3C,MAAM,KAAK,GAAG,wBAAwB,CAAC;AACvC,MAAM,WAAW,GAAG,CAAC,kBAAkB,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAC/D,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACvD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACnE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IAC7D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1D,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC7C,iEAAiE;IACjE,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC;AACH,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAChF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,GAAW,EAAU,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AACnG,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,GAAW,EAAU,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;AAC/G,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAoB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAEzJ,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;CAgB7B,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACrC,IAAI,GAAG,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACrE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,OAAgB;IAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACrD,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC7E,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACnI,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,CAAC,CAAC,CAAC;QACH,IAAI,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,KAAK,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpH,IAAI,MAAM,CAAC,MAAM;YAAE,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;;YAAM,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;QAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;;QAAM,OAAO,MAAM,CAAC,KAAK,CAAC;IAC9E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,uCAAuC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAAE,OAAO,OAAO,CAAC;QACnF,MAAM,MAAM,GAAG,2CAA2C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/G,OAAO,CAAC,gBAAgB,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,6CAA6C,OAAO,OAAO,CAAC;AACvH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QAAC,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IAAC,CAAC;IAC3E,OAAO,KAAK,EAAE,CAAC;QAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAAC,MAAM,KAAK,CAAC;IAAC,CAAC;IACjG,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;QACxJ,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;YAAS,CAAC;QAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,QAAgB,EAAE,KAAa;IACtE,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO;IAC/B,IAAI,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAC;IACtG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,IAAI,sBAAsB,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACpF,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;gBAAS,CAAC;YAAC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;IAC7E,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,IAAI,SAAS,UAAU,EAAE,EAAE,CAAC;IACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC;QAAC,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAAC,CAAC;YAAS,CAAC;QAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAAC,CAAC;IACvF,IAAI,CAAC;QAAC,MAAM,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAAC,CAAC;YAAS,CAAC;QAAC,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;AAC1F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG;IACjE,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,CAAC,MAAM,wBAAwB,EAAE;QACzE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;KAC5G,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClF,+BAA+B,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,SAAS,EAAE,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;IACjK,MAAM,UAAU,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/J,IAAI,CAAC,SAAS,EAAE,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrC,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC;YAChE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAC,KAAK,GAAG,SAAS,CAAC;gBAAC,MAAM;YAAC,CAAC;QACxF,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,UAAU,GAAG,8CAA8C,KAAK,CAAC,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACvH,MAAM,KAAK,GAAwD,EAAE,CAAC;IACtE,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,+EAA+E,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACpH,MAAM,IAAI,KAAK,CAAC,8HAA8H,CAAC,CAAC;QAClJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,GAAG,aAAa,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,UAAU,uBAAuB,KAAK,GAAG,IAAI,EAAE,CAAC,CAAC;IACjQ,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACpG,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,aAAa,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,mBAAmB,KAAK,EAAE,CAAC,CAAC;IAChS,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1F,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,uBAAuB,EAAE,6BAA6B,CAAC,EAAE,CAAC;QAC5F,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,SAAS;QAC7B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,SAAS;YACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;oBAAE,SAAS;gBAC3C,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAClC,IAAI,OAAO,OAAO,EAAE,OAAO,KAAK,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;wBAAE,OAAO,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnM,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClF,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,MAAM,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IACjG,OAAO,sDAAsD,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,iFAAiF,CAAC;AACtM,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAC3D,IAAI,YAAY,CAAC;IACjB,IAAI,CAAC;QAAC,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAAC,CAAC;IAC9H,OAAO,KAAK,EAAE,CAAC;QAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO;QAAC,MAAM,KAAK,CAAC;IAAC,CAAC;IAC9F,KAAK,MAAM,SAAS,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,QAAQ;QAAE,MAAM,WAAW,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1I,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAuB,EAAE,aAAqB;IACjF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnS,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1F,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7F,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACrH,IAAI,QAAQ;YAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAClG,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/G,IAAI,CAAC;YAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAC3I,MAAM,CAAC;YAAC,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,OAAqB,EAAE,OAAe;IAC3D,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACzE,IAAI,GAAG,CAAC,GAAG,KAAK,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACzH,0EAA0E;IAC1E,4EAA4E;IAC5E,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,oBAAoB,EAAE,CAAC;QAC3C,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC;IACzD,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QAAC,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAAC,CAAC;IAC1C,OAAO,KAAK,EAAE,CAAC;QACb,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,IAAI,GAAG,CAAC,MAAM;gBAAE,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,UAAU;YAAE,MAAM,KAAK,CAAC;IAC/B,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,4EAA4E;QAC5E,2EAA2E;QAC3E,uEAAuE;QACvE,MAAM,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3F,MAAM,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACpE,MAAM,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACnC,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,UAAU,KAAK,OAAO,CAAC,OAAO,EAAE,wBAAwB,CAAC,EAAE,CAAC;YACjF,MAAM,eAAe,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,WAAW,EAAE,wBAAwB,CAAC,EAAE,CAAC,CAAC;QAClI,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kEAAkE,WAAW,IAAI,CAAC,CAAC;QACxG,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACnE,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACzH,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC;QACpF,MAAM,IAAI,KAAK,CAAC,oGAAoG,CAAC,CAAC;IACxH,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM;YAAE,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9H,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3F,IAAI,GAAG,CAAC,MAAM;YAAE,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAC7E,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACxE,MAAM,eAAe,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5E,yEAAyE;IACzE,2DAA2D;IAC3D,IAAI,GAAG,CAAC,MAAM;QAAE,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAqB,EAAE,IAAY;IACzE,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAA4B,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnI,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7C,IAAI,CAAC;YAAC,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAAC,CAAC;QACpD,OAAO,KAAK,EAAE,CAAC;YACb,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4FAA4F,CAAC,CAAC;QACrH,CAAC;IACH,CAAC;IACD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAe,EAAE,IAAuB,EAAE,IAAY,EAAE,MAAc;IAC9G,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,4EAA4E;IAC5E,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1F,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/D,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACtH,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACjF,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAE,CAAC;IACzF,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,MAAM,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzR,MAAM,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;IACzD,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,IAAI,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE;QACnC,IAAI,CAAC;YAAC,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAAC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;QAC/D,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,WAAW,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,kCAAkC;YACtF,IAAI,CAAC,MAAM,EAAE,CAAC;gBAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kGAAkG,CAAC,CAAC;gBAAC,MAAM,GAAG,IAAI,CAAC;YAAC,CAAC;QAC3J,CAAC;IACH,CAAC,CAAC;IACF,MAAM,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAmD,CAAC,CAAC,CAAC;IACxG,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAAC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvG,IAAI,CAAC;QAAC,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,CAAC;IAAC,CAAC;YAC3G,CAAC;QACP,OAAO,GAAG,IAAI,CAAC;QACf,MAAM,OAAO,CAAC;QACd,IAAI,WAAW,GAAkB,IAAI,CAAC;QACtC,IAAI,oBAAoB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC;YAAC,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;QAAC,CAAC;QAC3D,OAAO,KAAK,EAAE,CAAC;YAAC,oBAAoB,GAAI,KAA+B,CAAC,IAAI,KAAK,QAAQ,CAAC;QAAC,CAAC;QAC5F,MAAM,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACjH,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,qEAAqE,CAAC,CAAC;IAC/M,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,KAAe,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG;IACpF,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC;IAC3C,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9D,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAAE,OAAO;IAC9F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;QAC/D,IAAI,IAAI,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACtE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5P,+EAA+E;IAC/E,8EAA8E;IAC9E,IAAI,KAAK,CAAC,eAAe,KAAK,kBAAkB;QAAE,OAAO;IACzD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,OAAO;IACtD,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;QAAE,OAAO;IACzF,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,mBAAmB,CAAC,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;QACpD,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,SAAS,CAAC,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE;QAC1G,SAAS,EAAE,KAAK,CAAC,UAAU;QAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;KAC3F,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO;IACtC,OAAO,EAAE,kBAAkB,EAAE,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;AAC7G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAuB,EAAE,IAAY;IACrE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAC1D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAClD,OAAO,eAAe,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACzG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAChG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACrF,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;QAAC,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;QAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACnK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,MAAM,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACpF,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YAAC,MAAM,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAAC,MAAM,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAAC,CAAC;QAC7G,MAAM,cAAc,GAAG,mBAAmB,CAAC,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACtF,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAC,KAA4B,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnJ,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAChL,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IAC9I,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AACvC,CAAC"}
@@ -1,10 +1,10 @@
1
1
  export declare const GITHUB_TEMPLATE_ASSETS: {
2
- readonly "lore-codex-review.yml": "name: Lore Codex review\nrun-name: \"Lore Codex review [${{ github.event.action }}] PR #${{ github.event.pull_request.number }} @ ${{ github.event.pull_request.head.sha }}\"\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review, labeled]\n\njobs:\n review:\n if: >-\n !github.event.pull_request.draft &&\n github.event.pull_request.head.repo.full_name == github.repository &&\n contains(github.event.pull_request.labels.*.name, 'lore:codex-review')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.8' }}\n outputs:\n final-message: ${{ steps.codex.outputs.final-message }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n fetch-depth: 0\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - name: Prepare Lore review context\n env:\n LORE_API_URL: ${{ vars.LORE_API_URL }}\n LORE_WORKSPACE_TOKEN: ${{ secrets.LORE_WORKSPACE_TOKEN }}\n run: >-\n lore github prepare-review\n --provider codex\n --event \"$GITHUB_EVENT_PATH\"\n --checkout \"$GITHUB_WORKSPACE/review\"\n --prompt-out \"$GITHUB_WORKSPACE/.lore/codex-prompt.md\"\n --metadata-out \"$GITHUB_WORKSPACE/.lore/codex-metadata.json\"\n --schema-out \"$GITHUB_WORKSPACE/.lore/review-output.schema.json\"\n\n - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2\n with:\n name: lore-codex-metadata\n path: .lore/codex-metadata.json\n retention-days: 1\n\n - name: Run Codex\n id: codex\n uses: openai/codex-action@52fe01ec70a42f454c9d2ebd47598f9fd6893d56 # v1.11\n with:\n openai-api-key: ${{ secrets.OPENAI_API_KEY }}\n prompt-file: .lore/codex-prompt.md\n output-schema-file: .lore/review-output.schema.json\n working-directory: review\n permission-profile: \":read-only\"\n safety-strategy: drop-sudo\n\n post:\n needs: review\n if: needs.review.outputs.final-message != ''\n runs-on: ubuntu-latest\n permissions:\n contents: read\n pull-requests: write\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.8' }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0\n with:\n name: lore-codex-metadata\n path: .lore\n\n - name: Save review output\n env:\n CODEX_REVIEW: ${{ needs.review.outputs.final-message }}\n run: |\n mkdir -p .lore\n printf '%s' \"$CODEX_REVIEW\" > .lore/codex-output.json\n\n - name: Post or update Lore review\n env:\n GH_TOKEN: ${{ github.token }}\n run: >-\n lore github post-review\n --metadata .lore/codex-metadata.json\n --output .lore/codex-output.json\n";
3
- readonly "lore-devin-review.yml": "name: Lore Devin review\nrun-name: \"Lore Devin review [${{ github.event.action }}] PR #${{ github.event.pull_request.number }} @ ${{ github.event.pull_request.head.sha }}\"\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review, labeled]\n\nconcurrency:\n group: lore-devin-review-${{ github.repository }}-${{ github.event.pull_request.number }}\n cancel-in-progress: true\n\njobs:\n review:\n if: >-\n !github.event.pull_request.draft &&\n github.event.pull_request.head.repo.full_name == github.repository &&\n contains(github.event.pull_request.labels.*.name, 'lore:devin-review')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n pull-requests: write\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.8' }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n fetch-depth: 0\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - name: Prepare Lore review context\n env:\n LORE_API_URL: ${{ vars.LORE_API_URL }}\n LORE_WORKSPACE_TOKEN: ${{ secrets.LORE_WORKSPACE_TOKEN }}\n run: >-\n lore github prepare-review\n --provider devin\n --event \"$GITHUB_EVENT_PATH\"\n --checkout \"$GITHUB_WORKSPACE/review\"\n --prompt-out \"$GITHUB_WORKSPACE/.lore/devin-prompt.md\"\n --metadata-out \"$GITHUB_WORKSPACE/.lore/devin-metadata.json\"\n\n - name: Run Lore-enriched Devin review\n env:\n DEVIN_API_KEY: ${{ secrets.DEVIN_API_KEY }}\n DEVIN_ORG_ID: ${{ vars.DEVIN_ORG_ID }}\n run: >-\n lore devin run-review\n --prompt .lore/devin-prompt.md\n --metadata .lore/devin-metadata.json\n --output .lore/devin-output.json\n\n - name: Post or update Lore review\n env:\n GH_TOKEN: ${{ github.token }}\n run: >-\n lore github post-review\n --metadata .lore/devin-metadata.json\n --output .lore/devin-output.json\n\n - name: Clean up Devin session\n if: always()\n continue-on-error: true\n env:\n DEVIN_API_KEY: ${{ secrets.DEVIN_API_KEY }}\n DEVIN_ORG_ID: ${{ vars.DEVIN_ORG_ID }}\n run: |\n SESSION_ID=\"$(jq -r '.sessionId // empty' .lore/devin-metadata.json 2>/dev/null || true)\"\n if [ -n \"$SESSION_ID\" ]; then\n lore devin terminate --session \"$SESSION_ID\"\n fi\n";
4
- readonly "lore-observe-correction.yml": "name: Lore review correction\nrun-name: \"Lore review correction comment #${{ github.event.comment.id }}\"\n\non:\n issue_comment:\n types: [created]\n\njobs:\n observe:\n if: >-\n github.event.issue.pull_request &&\n startsWith(github.event.comment.body, '/lore correct ')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n issues: read\n pull-requests: read\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.8' }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - name: Teach Lore from an authorized correction\n env:\n GH_TOKEN: ${{ github.token }}\n LORE_API_URL: ${{ vars.LORE_API_URL }}\n LORE_WORKSPACE_TOKEN: ${{ secrets.LORE_WORKSPACE_TOKEN }}\n run: >-\n lore github observe-correction\n --event \"$GITHUB_EVENT_PATH\"\n";
2
+ readonly "lore-codex-review.yml": "name: Lore Codex review\nrun-name: \"Lore Codex review [${{ github.event.action }}] PR #${{ github.event.pull_request.number }} @ ${{ github.event.pull_request.head.sha }}\"\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review, labeled]\n\njobs:\n review:\n if: >-\n !github.event.pull_request.draft &&\n github.event.pull_request.head.repo.full_name == github.repository &&\n contains(github.event.pull_request.labels.*.name, 'lore:codex-review')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.10' }}\n outputs:\n final-message: ${{ steps.codex.outputs.final-message }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n fetch-depth: 0\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - name: Prepare Lore review context\n env:\n LORE_API_URL: ${{ vars.LORE_API_URL }}\n LORE_WORKSPACE_TOKEN: ${{ secrets.LORE_WORKSPACE_TOKEN }}\n run: >-\n lore github prepare-review\n --provider codex\n --event \"$GITHUB_EVENT_PATH\"\n --checkout \"$GITHUB_WORKSPACE/review\"\n --prompt-out \"$GITHUB_WORKSPACE/.lore/codex-prompt.md\"\n --metadata-out \"$GITHUB_WORKSPACE/.lore/codex-metadata.json\"\n --schema-out \"$GITHUB_WORKSPACE/.lore/review-output.schema.json\"\n\n - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2\n with:\n name: lore-codex-metadata\n path: .lore/codex-metadata.json\n retention-days: 1\n\n - name: Run Codex\n id: codex\n uses: openai/codex-action@52fe01ec70a42f454c9d2ebd47598f9fd6893d56 # v1.11\n with:\n openai-api-key: ${{ secrets.OPENAI_API_KEY }}\n prompt-file: .lore/codex-prompt.md\n output-schema-file: .lore/review-output.schema.json\n working-directory: review\n permission-profile: \":read-only\"\n safety-strategy: drop-sudo\n\n post:\n needs: review\n if: needs.review.outputs.final-message != ''\n runs-on: ubuntu-latest\n permissions:\n contents: read\n pull-requests: write\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.10' }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0\n with:\n name: lore-codex-metadata\n path: .lore\n\n - name: Save review output\n env:\n CODEX_REVIEW: ${{ needs.review.outputs.final-message }}\n run: |\n mkdir -p .lore\n printf '%s' \"$CODEX_REVIEW\" > .lore/codex-output.json\n\n - name: Post or update Lore review\n env:\n GH_TOKEN: ${{ github.token }}\n run: >-\n lore github post-review\n --metadata .lore/codex-metadata.json\n --output .lore/codex-output.json\n";
3
+ readonly "lore-devin-review.yml": "name: Lore Devin review\nrun-name: \"Lore Devin review [${{ github.event.action }}] PR #${{ github.event.pull_request.number }} @ ${{ github.event.pull_request.head.sha }}\"\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review, labeled]\n\nconcurrency:\n group: lore-devin-review-${{ github.repository }}-${{ github.event.pull_request.number }}\n cancel-in-progress: true\n\njobs:\n review:\n if: >-\n !github.event.pull_request.draft &&\n github.event.pull_request.head.repo.full_name == github.repository &&\n contains(github.event.pull_request.labels.*.name, 'lore:devin-review')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n pull-requests: write\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.10' }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n fetch-depth: 0\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - name: Prepare Lore review context\n env:\n LORE_API_URL: ${{ vars.LORE_API_URL }}\n LORE_WORKSPACE_TOKEN: ${{ secrets.LORE_WORKSPACE_TOKEN }}\n run: >-\n lore github prepare-review\n --provider devin\n --event \"$GITHUB_EVENT_PATH\"\n --checkout \"$GITHUB_WORKSPACE/review\"\n --prompt-out \"$GITHUB_WORKSPACE/.lore/devin-prompt.md\"\n --metadata-out \"$GITHUB_WORKSPACE/.lore/devin-metadata.json\"\n\n - name: Run Lore-enriched Devin review\n env:\n DEVIN_API_KEY: ${{ secrets.DEVIN_API_KEY }}\n DEVIN_ORG_ID: ${{ vars.DEVIN_ORG_ID }}\n run: >-\n lore devin run-review\n --prompt .lore/devin-prompt.md\n --metadata .lore/devin-metadata.json\n --output .lore/devin-output.json\n\n - name: Post or update Lore review\n env:\n GH_TOKEN: ${{ github.token }}\n run: >-\n lore github post-review\n --metadata .lore/devin-metadata.json\n --output .lore/devin-output.json\n\n - name: Clean up Devin session\n if: always()\n continue-on-error: true\n env:\n DEVIN_API_KEY: ${{ secrets.DEVIN_API_KEY }}\n DEVIN_ORG_ID: ${{ vars.DEVIN_ORG_ID }}\n run: |\n SESSION_ID=\"$(jq -r '.sessionId // empty' .lore/devin-metadata.json 2>/dev/null || true)\"\n if [ -n \"$SESSION_ID\" ]; then\n lore devin terminate --session \"$SESSION_ID\"\n fi\n";
4
+ readonly "lore-observe-correction.yml": "name: Lore review correction\nrun-name: \"Lore review correction comment #${{ github.event.comment.id }}\"\n\non:\n issue_comment:\n types: [created]\n\njobs:\n observe:\n if: >-\n github.event.issue.pull_request &&\n startsWith(github.event.comment.body, '/lore correct ')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n issues: read\n pull-requests: read\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.10' }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - name: Teach Lore from an authorized correction\n env:\n GH_TOKEN: ${{ github.token }}\n LORE_API_URL: ${{ vars.LORE_API_URL }}\n LORE_WORKSPACE_TOKEN: ${{ secrets.LORE_WORKSPACE_TOKEN }}\n run: >-\n lore github observe-correction\n --event \"$GITHUB_EVENT_PATH\"\n";
5
5
  readonly "review-output.schema.json": "{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\"summary\", \"findings\"],\n \"properties\": {\n \"summary\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"\\\\S\"\n },\n \"findings\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\"severity\", \"title\", \"body\", \"path\", \"line\"],\n \"properties\": {\n \"severity\": {\n \"enum\": [\"critical\", \"high\", \"medium\", \"low\"]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"\\\\S\"\n },\n \"body\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"\\\\S\"\n },\n \"path\": {\n \"type\": [\"string\", \"null\"],\n \"minLength\": 1,\n \"pattern\": \"\\\\S\"\n },\n \"line\": {\n \"type\": [\"integer\", \"null\"],\n \"minimum\": 1\n }\n }\n }\n }\n }\n}\n";
6
6
  };
7
- export declare const SELF_HOST_COMPOSE_ASSET = "name: lore\n\nx-api-image: &api-image \"${LORE_API_IMAGE:-ghcr.io/treadiehq/lore-api}:${LORE_IMAGE_TAG:-0.2.8}\"\nx-web-image: &web-image \"${LORE_WEB_IMAGE:-ghcr.io/treadiehq/lore-web}:${LORE_IMAGE_TAG:-0.2.8}\"\n\nservices:\n postgres:\n image: pgvector/pgvector:0.8.6-pg18\n environment:\n POSTGRES_DB: lore\n POSTGRES_USER: lore\n POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-}\n volumes:\n - postgres-data:/var/lib/postgresql\n healthcheck:\n test:\n [\n \"CMD-SHELL\",\n 'pg_isready -h 127.0.0.1 -U \"$${POSTGRES_USER}\" -d \"$${POSTGRES_DB}\"',\n ]\n interval: 5s\n timeout: 5s\n retries: 10\n start_period: 10s\n restart: unless-stopped\n\n api:\n image: *api-image\n environment:\n NODE_ENV: production\n DATABASE_URL: \"postgresql://lore:${POSTGRES_PASSWORD:-}@postgres:5432/lore\"\n API_HOST: 0.0.0.0\n API_PORT: 3001\n API_JSON_BODY_LIMIT: ${API_JSON_BODY_LIMIT:-1mb}\n API_RATE_LIMIT_PER_MINUTE: ${API_RATE_LIMIT_PER_MINUTE:-120}\n RATE_LIMIT_KEY_SECRET: ${RATE_LIMIT_KEY_SECRET:-}\n TRUSTED_PROXY_CIDRS: ${TRUSTED_PROXY_CIDRS:-10.0.0.0/8,172.16.0.0/12}\n NUXT_ORIGIN: ${NUXT_ORIGIN:-}\n LORE_SERVER_VERSION: ${LORE_IMAGE_TAG:-0.2.8}\n LORE_SERVER_REVISION: ${LORE_SERVER_REVISION:-}\n LORE_WORKSPACE_TOKEN: ${LORE_WORKSPACE_TOKEN:-}\n LORE_WORKSPACE_ORGANIZATION: ${LORE_WORKSPACE_ORGANIZATION:-}\n LORE_WORKSPACE_NAME: ${LORE_WORKSPACE_NAME:-}\n AUTH_MODE: ${AUTH_MODE:-magic_link}\n AUTH_EMAIL_MODE: ${AUTH_EMAIL_MODE:-resend}\n AUTH_WEB_ORIGIN: ${AUTH_WEB_ORIGIN:-}\n AUTH_OWNER_EMAIL: ${AUTH_OWNER_EMAIL:-}\n AUTH_EMAIL_FROM: ${AUTH_EMAIL_FROM:-}\n RESEND_API_KEY: ${RESEND_API_KEY:-}\n AUTH_MAGIC_LINK_TTL_MINUTES: ${AUTH_MAGIC_LINK_TTL_MINUTES:-15}\n AUTH_SESSION_TTL_DAYS: ${AUTH_SESSION_TTL_DAYS:-30}\n GITHUB_AUTH_CLIENT_ID: ${GITHUB_AUTH_CLIENT_ID:-}\n GITHUB_AUTH_CLIENT_SECRET: ${GITHUB_AUTH_CLIENT_SECRET:-}\n GITHUB_AUTH_REDIRECT_URI: ${GITHUB_AUTH_REDIRECT_URI:-}\n CLOUD_RECOVERY_ENCRYPTION_KEY: ${CLOUD_RECOVERY_ENCRYPTION_KEY:-}\n CLOUD_RECOVERY_PUBLIC_API_URL: ${CLOUD_RECOVERY_PUBLIC_API_URL:-}\n DEVIN_POLLING_ENABLED: ${DEVIN_POLLING_ENABLED:-false}\n DEVIN_API_KEY: ${DEVIN_API_KEY:-}\n DEVIN_ORG_ID: ${DEVIN_ORG_ID:-}\n DEVIN_REPOSITORY_ALLOWLIST: ${DEVIN_REPOSITORY_ALLOWLIST:-}\n DEVIN_POLL_INTERVAL_MS: ${DEVIN_POLL_INTERVAL_MS:-15000}\n DEVIN_REQUEST_TIMEOUT_MS: ${DEVIN_REQUEST_TIMEOUT_MS:-10000}\n DEVIN_POLL_BATCH_SIZE: ${DEVIN_POLL_BATCH_SIZE:-25}\n EXTRACTOR_PROVIDER: ${EXTRACTOR_PROVIDER:-heuristic}\n EXTRACTOR_MIN_CONFIDENCE: ${EXTRACTOR_MIN_CONFIDENCE:-0.8}\n EXTRACTOR_MODEL: ${EXTRACTOR_MODEL:-}\n EXTRACTOR_BASE_URL: ${EXTRACTOR_BASE_URL:-}\n EXTRACTOR_API_KEY: ${EXTRACTOR_API_KEY:-}\n RETRIEVAL_MODE: ${RETRIEVAL_MODE:-auto}\n EMBEDDING_MODEL: ${EMBEDDING_MODEL:-text-embedding-3-small}\n EMBEDDING_BASE_URL: ${EMBEDDING_BASE_URL:-https://api.openai.com/v1}\n EMBEDDING_API_KEY: ${EMBEDDING_API_KEY:-}\n EMBEDDING_DIMENSIONS: ${EMBEDDING_DIMENSIONS:-1536}\n EMBEDDING_TIMEOUT_MS: ${EMBEDDING_TIMEOUT_MS:-5000}\n EMBEDDING_SPACE_ID: ${EMBEDDING_SPACE_ID:-}\n EMBEDDING_RECONCILE_INTERVAL_MS: ${EMBEDDING_RECONCILE_INTERVAL_MS:-60000}\n EMBEDDING_RECONCILE_BATCH_SIZE: ${EMBEDDING_RECONCILE_BATCH_SIZE:-500}\n EMBEDDING_RECONCILE_PAGE_SIZE: ${EMBEDDING_RECONCILE_PAGE_SIZE:-100}\n CAPTURE_WORKER_POLL_INTERVAL_MS: ${CAPTURE_WORKER_POLL_INTERVAL_MS:-500}\n CAPTURE_WORKER_CONCURRENCY: ${CAPTURE_WORKER_CONCURRENCY:-2}\n CAPTURE_WORKER_LEASE_MS: ${CAPTURE_WORKER_LEASE_MS:-60000}\n CAPTURE_INLINE_TIMEOUT_MS: ${CAPTURE_INLINE_TIMEOUT_MS:-45000}\n SEMANTIC_MIN_SIMILARITY: ${SEMANTIC_MIN_SIMILARITY:-0.4}\n CONTEXT_MAX_ITEMS: ${CONTEXT_MAX_ITEMS:-10}\n CONTEXT_MAX_CHARACTERS: ${CONTEXT_MAX_CHARACTERS:-12000}\n CONTEXT_MAX_ESTIMATED_TOKENS: ${CONTEXT_MAX_ESTIMATED_TOKENS:-4000}\n ports:\n - \"${API_BIND_ADDRESS:-127.0.0.1}:${API_PORT:-3001}:3001\"\n depends_on:\n postgres:\n condition: service_healthy\n healthcheck:\n test:\n [\n \"CMD\",\n \"node\",\n \"-e\",\n \"fetch('http://127.0.0.1:3001/health/ready').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))\",\n ]\n interval: 5s\n timeout: 5s\n retries: 12\n start_period: 10s\n restart: unless-stopped\n\n web:\n image: *web-image\n environment:\n HOST: 0.0.0.0\n PORT: 3000\n NITRO_HOST: 0.0.0.0\n NITRO_PORT: 3000\n NUXT_LORE_API_URL: http://api:3001\n NUXT_AUTH_COOKIE_NAME: ${NUXT_AUTH_COOKIE_NAME:-lore_session}\n NUXT_GITHUB_REPOSITORIES_CLIENT_ID: ${NUXT_GITHUB_REPOSITORIES_CLIENT_ID:-}\n NUXT_GITHUB_REPOSITORIES_CLIENT_SECRET: ${NUXT_GITHUB_REPOSITORIES_CLIENT_SECRET:-}\n NUXT_GITHUB_REPOSITORIES_APP_SLUG: ${NUXT_GITHUB_REPOSITORIES_APP_SLUG:-}\n NUXT_GITHUB_REPOSITORIES_REDIRECT_URI: ${NUXT_GITHUB_REPOSITORIES_REDIRECT_URI:-}\n NUXT_AUTH_COOKIE_SECURE: ${NUXT_AUTH_COOKIE_SECURE:-true}\n TRUSTED_PROXY_CIDRS: ${TRUSTED_PROXY_CIDRS:-10.0.0.0/8,172.16.0.0/12}\n NUXT_PUBLIC_API_BASE_URL: /api/lore\n NUXT_PUBLIC_LORE_CONNECTOR_API_URL: ${NUXT_PUBLIC_LORE_CONNECTOR_API_URL:-http://localhost:3001}\n NUXT_PUBLIC_LORE_INSTALL_URL: ${NUXT_PUBLIC_LORE_INSTALL_URL:-https://uselore.co/install.sh}\n ports:\n - \"${NUXT_BIND_ADDRESS:-127.0.0.1}:${NUXT_PORT:-3000}:3000\"\n depends_on:\n api:\n condition: service_healthy\n healthcheck:\n test:\n [\n \"CMD\",\n \"node\",\n \"-e\",\n \"fetch('http://127.0.0.1:3000/health').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))\",\n ]\n interval: 10s\n timeout: 5s\n retries: 12\n start_period: 15s\n restart: unless-stopped\n\nvolumes:\n postgres-data:\n";
7
+ export declare const SELF_HOST_COMPOSE_ASSET = "name: lore\n\nx-api-image: &api-image \"${LORE_API_IMAGE:-ghcr.io/treadiehq/lore-api}:${LORE_IMAGE_TAG:-0.2.10}\"\nx-web-image: &web-image \"${LORE_WEB_IMAGE:-ghcr.io/treadiehq/lore-web}:${LORE_IMAGE_TAG:-0.2.10}\"\n\nservices:\n postgres:\n image: pgvector/pgvector:0.8.6-pg18\n environment:\n POSTGRES_DB: lore\n POSTGRES_USER: lore\n POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-}\n volumes:\n - postgres-data:/var/lib/postgresql\n healthcheck:\n test:\n [\n \"CMD-SHELL\",\n 'pg_isready -h 127.0.0.1 -U \"$${POSTGRES_USER}\" -d \"$${POSTGRES_DB}\"',\n ]\n interval: 5s\n timeout: 5s\n retries: 10\n start_period: 10s\n restart: unless-stopped\n\n api:\n image: *api-image\n environment:\n NODE_ENV: production\n DATABASE_URL: \"postgresql://lore:${POSTGRES_PASSWORD:-}@postgres:5432/lore\"\n API_HOST: 0.0.0.0\n API_PORT: 3001\n API_JSON_BODY_LIMIT: ${API_JSON_BODY_LIMIT:-1mb}\n API_RATE_LIMIT_PER_MINUTE: ${API_RATE_LIMIT_PER_MINUTE:-120}\n RATE_LIMIT_KEY_SECRET: ${RATE_LIMIT_KEY_SECRET:-}\n TRUSTED_PROXY_CIDRS: ${TRUSTED_PROXY_CIDRS:-10.0.0.0/8,172.16.0.0/12}\n NUXT_ORIGIN: ${NUXT_ORIGIN:-}\n LORE_SERVER_VERSION: ${LORE_IMAGE_TAG:-0.2.10}\n LORE_SERVER_REVISION: ${LORE_SERVER_REVISION:-}\n LORE_WORKSPACE_TOKEN: ${LORE_WORKSPACE_TOKEN:-}\n LORE_WORKSPACE_ORGANIZATION: ${LORE_WORKSPACE_ORGANIZATION:-}\n LORE_WORKSPACE_NAME: ${LORE_WORKSPACE_NAME:-}\n AUTH_MODE: ${AUTH_MODE:-magic_link}\n AUTH_EMAIL_MODE: ${AUTH_EMAIL_MODE:-resend}\n AUTH_WEB_ORIGIN: ${AUTH_WEB_ORIGIN:-}\n AUTH_OWNER_EMAIL: ${AUTH_OWNER_EMAIL:-}\n AUTH_EMAIL_FROM: ${AUTH_EMAIL_FROM:-}\n RESEND_API_KEY: ${RESEND_API_KEY:-}\n AUTH_MAGIC_LINK_TTL_MINUTES: ${AUTH_MAGIC_LINK_TTL_MINUTES:-15}\n AUTH_SESSION_TTL_DAYS: ${AUTH_SESSION_TTL_DAYS:-30}\n GITHUB_AUTH_CLIENT_ID: ${GITHUB_AUTH_CLIENT_ID:-}\n GITHUB_AUTH_CLIENT_SECRET: ${GITHUB_AUTH_CLIENT_SECRET:-}\n GITHUB_AUTH_REDIRECT_URI: ${GITHUB_AUTH_REDIRECT_URI:-}\n CLOUD_RECOVERY_ENCRYPTION_KEY: ${CLOUD_RECOVERY_ENCRYPTION_KEY:-}\n CLOUD_RECOVERY_PUBLIC_API_URL: ${CLOUD_RECOVERY_PUBLIC_API_URL:-}\n DEVIN_POLLING_ENABLED: ${DEVIN_POLLING_ENABLED:-false}\n DEVIN_API_KEY: ${DEVIN_API_KEY:-}\n DEVIN_ORG_ID: ${DEVIN_ORG_ID:-}\n DEVIN_REPOSITORY_ALLOWLIST: ${DEVIN_REPOSITORY_ALLOWLIST:-}\n DEVIN_POLL_INTERVAL_MS: ${DEVIN_POLL_INTERVAL_MS:-15000}\n DEVIN_REQUEST_TIMEOUT_MS: ${DEVIN_REQUEST_TIMEOUT_MS:-10000}\n DEVIN_POLL_BATCH_SIZE: ${DEVIN_POLL_BATCH_SIZE:-25}\n EXTRACTOR_PROVIDER: ${EXTRACTOR_PROVIDER:-heuristic}\n EXTRACTOR_MIN_CONFIDENCE: ${EXTRACTOR_MIN_CONFIDENCE:-0.8}\n EXTRACTOR_MODEL: ${EXTRACTOR_MODEL:-}\n EXTRACTOR_BASE_URL: ${EXTRACTOR_BASE_URL:-}\n EXTRACTOR_API_KEY: ${EXTRACTOR_API_KEY:-}\n RETRIEVAL_MODE: ${RETRIEVAL_MODE:-auto}\n EMBEDDING_MODEL: ${EMBEDDING_MODEL:-text-embedding-3-small}\n EMBEDDING_BASE_URL: ${EMBEDDING_BASE_URL:-https://api.openai.com/v1}\n EMBEDDING_API_KEY: ${EMBEDDING_API_KEY:-}\n EMBEDDING_DIMENSIONS: ${EMBEDDING_DIMENSIONS:-1536}\n EMBEDDING_TIMEOUT_MS: ${EMBEDDING_TIMEOUT_MS:-5000}\n EMBEDDING_SPACE_ID: ${EMBEDDING_SPACE_ID:-}\n EMBEDDING_RECONCILE_INTERVAL_MS: ${EMBEDDING_RECONCILE_INTERVAL_MS:-60000}\n EMBEDDING_RECONCILE_BATCH_SIZE: ${EMBEDDING_RECONCILE_BATCH_SIZE:-500}\n EMBEDDING_RECONCILE_PAGE_SIZE: ${EMBEDDING_RECONCILE_PAGE_SIZE:-100}\n CAPTURE_WORKER_POLL_INTERVAL_MS: ${CAPTURE_WORKER_POLL_INTERVAL_MS:-500}\n CAPTURE_WORKER_CONCURRENCY: ${CAPTURE_WORKER_CONCURRENCY:-2}\n CAPTURE_WORKER_LEASE_MS: ${CAPTURE_WORKER_LEASE_MS:-60000}\n CAPTURE_INLINE_TIMEOUT_MS: ${CAPTURE_INLINE_TIMEOUT_MS:-45000}\n SEMANTIC_MIN_SIMILARITY: ${SEMANTIC_MIN_SIMILARITY:-0.4}\n CONTEXT_MAX_ITEMS: ${CONTEXT_MAX_ITEMS:-10}\n CONTEXT_MAX_CHARACTERS: ${CONTEXT_MAX_CHARACTERS:-12000}\n CONTEXT_MAX_ESTIMATED_TOKENS: ${CONTEXT_MAX_ESTIMATED_TOKENS:-4000}\n ports:\n - \"${API_BIND_ADDRESS:-127.0.0.1}:${API_PORT:-3001}:3001\"\n depends_on:\n postgres:\n condition: service_healthy\n healthcheck:\n test:\n [\n \"CMD\",\n \"node\",\n \"-e\",\n \"fetch('http://127.0.0.1:3001/health/ready').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))\",\n ]\n interval: 5s\n timeout: 5s\n retries: 12\n start_period: 10s\n restart: unless-stopped\n\n web:\n image: *web-image\n environment:\n HOST: 0.0.0.0\n PORT: 3000\n NITRO_HOST: 0.0.0.0\n NITRO_PORT: 3000\n NUXT_LORE_API_URL: http://api:3001\n NUXT_AUTH_COOKIE_NAME: ${NUXT_AUTH_COOKIE_NAME:-lore_session}\n NUXT_GITHUB_REPOSITORIES_CLIENT_ID: ${NUXT_GITHUB_REPOSITORIES_CLIENT_ID:-}\n NUXT_GITHUB_REPOSITORIES_CLIENT_SECRET: ${NUXT_GITHUB_REPOSITORIES_CLIENT_SECRET:-}\n NUXT_GITHUB_REPOSITORIES_APP_SLUG: ${NUXT_GITHUB_REPOSITORIES_APP_SLUG:-}\n NUXT_GITHUB_REPOSITORIES_REDIRECT_URI: ${NUXT_GITHUB_REPOSITORIES_REDIRECT_URI:-}\n NUXT_AUTH_COOKIE_SECURE: ${NUXT_AUTH_COOKIE_SECURE:-true}\n TRUSTED_PROXY_CIDRS: ${TRUSTED_PROXY_CIDRS:-10.0.0.0/8,172.16.0.0/12}\n NUXT_PUBLIC_API_BASE_URL: /api/lore\n NUXT_PUBLIC_LORE_CONNECTOR_API_URL: ${NUXT_PUBLIC_LORE_CONNECTOR_API_URL:-http://localhost:3001}\n NUXT_PUBLIC_LORE_INSTALL_URL: ${NUXT_PUBLIC_LORE_INSTALL_URL:-https://uselore.co/install.sh}\n ports:\n - \"${NUXT_BIND_ADDRESS:-127.0.0.1}:${NUXT_PORT:-3000}:3000\"\n depends_on:\n api:\n condition: service_healthy\n healthcheck:\n test:\n [\n \"CMD\",\n \"node\",\n \"-e\",\n \"fetch('http://127.0.0.1:3000/health').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))\",\n ]\n interval: 10s\n timeout: 5s\n retries: 12\n start_period: 15s\n restart: unless-stopped\n\nvolumes:\n postgres-data:\n";
8
8
  export declare const VSCODE_RECOVERY_ASSETS: {
9
9
  readonly "package.json": "{\n \"name\": \"lore-recovery\",\n \"displayName\": \"Lore Recovery\",\n \"publisher\": \"lore-co\",\n \"version\": \"0.1.0\",\n \"description\": \"Continue a stopped Copilot job in another connected coding tool.\",\n \"engines\": { \"vscode\": \"^1.105.0\" },\n \"main\": \"./extension.cjs\",\n \"activationEvents\": [\"onStartupFinished\"],\n \"extensionKind\": [\"workspace\"],\n \"capabilities\": { \"untrustedWorkspaces\": { \"supported\": false }, \"virtualWorkspaces\": false },\n \"contributes\": { \"commands\": [{ \"command\": \"lore.recovery.status\", \"title\": \"Lore: Show Recovery Status\" }] }\n}\n";
10
10
  readonly "extension.cjs": "const vscode = require('vscode');\nconst fs = require('node:fs/promises');\nconst { constants } = require('node:fs');\nconst path = require('node:path');\nconst { tmpdir } = require('node:os');\nconst { spawn } = require('node:child_process');\nconst { fileURLToPath } = require('node:url');\nconst { parseSession, checkpoint, bindActiveSession } = require('./session.cjs');\n\nfunction continuationTerminal(config, result, cwd, platform = process.platform) {\n const args = [...config.invocation, 'recovery', 'launch-accepted', result.id, result.failureId];\n const options = { name: 'Lore continuation', cwd };\n if (platform === 'win32') {\n const quote = s => `'${s.replaceAll(\"'\", \"''\")}'`;\n return { options: { ...options, shellPath: 'powershell.exe', env: { PATH: config.path || process.env.PATH, LORE_HOME: config.home, BUN_OPTIONS: null, BUN_BE_BUN: null } }, command: '& ' + args.map(quote).join(' ') };\n }\n const quote = s => `'${s.replaceAll(\"'\", \"'\\\\''\")}'`;\n return { options, command: ['env','-u','BUN_OPTIONS','-u','BUN_BE_BUN',`PATH=${config.path || process.env.PATH}`,`LORE_HOME=${config.home}`, ...args].map(quote).join(' ') };\n}\n\nasync function readActiveSession(saved) {\n if (!saved.length) return;\n const directory = await fs.mkdtemp(path.join(tmpdir(), 'lore-chat-'));\n try {\n await fs.chmod(directory, 0o700);\n const target = path.join(directory, 'active.json');\n await fs.writeFile(target, '', { mode: 0o600 });\n // This public command exports the in-memory chat without opening a dialog.\n await vscode.commands.executeCommand('workbench.action.chat.export', vscode.Uri.file(target));\n const file = await fs.open(target, constants.O_RDONLY | constants.O_NOFOLLOW);\n try {\n const stat = await file.stat();\n if (!stat.isFile() || stat.size > 8 * 1024 * 1024 || (process.getuid && stat.uid !== process.getuid())) return;\n return bindActiveSession(parseSession(await file.readFile('utf8')), saved);\n } finally { await file.close(); }\n } catch { /* Unsupported export commands keep the saved-session fallback. */ }\n finally { await fs.rm(directory, { recursive: true, force: true }); }\n}\n\nfunction activate(context) {\n const output = vscode.window.createOutputChannel('Lore Recovery'); context.subscriptions.push(output);\n let config = require('./connection.json'); // Written by lore connect, outside the repository.\n let busy = false, disposed = false, lastError = '', status = 'Waiting for a saved Copilot turn.';\n const offered = new Set();\n function call(args, input) {\n return new Promise((resolve, reject) => {\n const child = spawn(config.invocation[0], [...config.invocation.slice(1), 'recovery', ...args], {\n env: { ...process.env, PATH: config.path || process.env.PATH, LORE_HOME: config.home, BUN_OPTIONS: undefined, BUN_BE_BUN: undefined }, stdio: ['pipe','pipe','pipe'],\n });\n let body = '', error = ''; const timer = setTimeout(() => { child.kill(); reject(Error('Lore adapter timed out')); }, 10000);\n child.stdout.on('data', b => { body += b; if (body.length > 65536) child.kill(); });\n child.stderr.on('data', b => { error = (error + b).slice(-2000); });\n child.once('error', e => { clearTimeout(timer); reject(e); });\n child.once('exit', code => { clearTimeout(timer); if(code) reject(Error(error || 'Lore adapter failed')); else { try { resolve(JSON.parse(body)); } catch { reject(Error('Invalid Lore response')); } } });\n child.stdin.on('error', () => {}); child.stdin.end(JSON.stringify(input));\n });\n }\n async function poll() {\n if (busy || disposed || !vscode.workspace.isTrusted || !context.storageUri || context.storageUri.scheme !== 'file') return;\n busy = true;\n try {\n config = JSON.parse(await fs.readFile(path.join(__dirname, 'connection.json'), 'utf8'));\n if (config.disabled) { status = 'Lore recovery is disabled.'; return; }\n const folders = (vscode.workspace.workspaceFolders ?? []).filter(f => f.uri.scheme === 'file');\n const roots = await Promise.all(folders.map(f => fs.realpath(f.uri.fsPath)));\n const storage = path.dirname(context.storageUri.fsPath), chatDir = path.join(storage, 'chatSessions');\n // The extension context binds this storage directory to this VS Code workspace.\n const names = (await fs.readdir(chatDir).catch(e => { if(e.code === 'ENOENT') return []; throw e; })).filter(n => /^[a-zA-Z0-9-]+\\.jsonl?$/.test(n) && n !== 'index.json').slice(-400);\n const saved = [];\n for (const name of names) {\n const file = await fs.open(path.join(chatDir,name), constants.O_RDONLY | constants.O_NOFOLLOW);\n let session;\n try {\n const stat = await file.stat();\n if (!stat.isFile() || stat.size > 8*1024*1024 || (process.getuid && stat.uid !== process.getuid())) continue;\n session = parseSession(await file.readFile('utf8'), name.endsWith('.jsonl'));\n } catch (e) { if(e instanceof SyntaxError) continue; throw e; }\n finally { await file.close(); }\n let cwd;\n if (session?.workingDirectory) {\n try { cwd = await fs.realpath(fileURLToPath(session.workingDirectory)); } catch { continue; }\n if (!roots.some(r => cwd === r || cwd.startsWith(r + path.sep))) continue;\n // Recovery configuration registers exact workspaces. Do not guess another root.\n if (!config.roots.includes(cwd)) continue;\n } else if (roots.length === 1) cwd = roots[0]; else continue;\n if (!config.roots.includes(cwd)) continue;\n saved.push({ session, cwd });\n }\n const active = await readActiveSession(saved);\n // Replace the saved copy before processing it, so a live retry/cancellation\n // suppresses an obsolete failure even when disk storage is still behind.\n for (const entry of saved) {\n const { session, cwd } = active?.session.sessionId === entry.session?.sessionId ? active : entry;\n const event = checkpoint(session, cwd); if (!event) continue;\n const timestamp = session.requests?.at(-1)?.timestamp;\n if ((typeof timestamp === 'number' ? timestamp : Date.parse(timestamp)) < config.since || !timestamp) continue;\n const result = await call(['external-checkpoint'], event);\n status = active ? 'Observing active Copilot chat and saved sessions.' : 'Observing saved Copilot sessions; active chat identity is not yet available.';\n if (!result.failureId || offered.has(result.failureId)) continue;\n offered.add(result.failureId);\n const button = `Continue with ${result.target}`;\n void vscode.window.showWarningMessage(`Copilot stopped${event.reason === 'rate_limit' ? ' at a usage limit' : ' with an error'}. Lore can continue this job.`, button, 'Dismiss').then(choice => {\n if(choice !== button || disposed) return;\n const { options, command } = continuationTerminal(config, result, cwd);\n const terminal = vscode.window.createTerminal(options); terminal.show(); terminal.sendText(command, true);\n });\n }\n lastError = '';\n } catch(e) { status = e.message; if(lastError !== status) output.appendLine(status); lastError = status; }\n finally { busy = false; }\n }\n const timer = setInterval(() => { void poll(); }, 1500); void poll();\n context.subscriptions.push({ dispose() { disposed = true; clearInterval(timer); } });\n context.subscriptions.push(vscode.commands.registerCommand('lore.recovery.status', () => vscode.window.showInformationMessage(status)));\n}\nmodule.exports = { activate, readActiveSession, continuationTerminal };\n";
@@ -1 +1 @@
1
- {"version":3,"file":"generated-assets.d.ts","sourceRoot":"","sources":["../src/generated-assets.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,sBAAsB;;;;;CAKzB,CAAC;AACX,eAAO,MAAM,uBAAuB,u+LAAu+L,CAAC;AAC5gM,eAAO,MAAM,sBAAsB;;;;CAAukZ,CAAC"}
1
+ {"version":3,"file":"generated-assets.d.ts","sourceRoot":"","sources":["../src/generated-assets.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,sBAAsB;;;;;CAKzB,CAAC;AACX,eAAO,MAAM,uBAAuB,0+LAA0+L,CAAC;AAC/gM,eAAO,MAAM,sBAAsB;;;;CAAukZ,CAAC"}
@@ -1,10 +1,10 @@
1
1
  // Generated by scripts/generate-cli-assets.mjs. Do not edit directly.
2
2
  export const GITHUB_TEMPLATE_ASSETS = {
3
- "lore-codex-review.yml": "name: Lore Codex review\nrun-name: \"Lore Codex review [${{ github.event.action }}] PR #${{ github.event.pull_request.number }} @ ${{ github.event.pull_request.head.sha }}\"\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review, labeled]\n\njobs:\n review:\n if: >-\n !github.event.pull_request.draft &&\n github.event.pull_request.head.repo.full_name == github.repository &&\n contains(github.event.pull_request.labels.*.name, 'lore:codex-review')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.8' }}\n outputs:\n final-message: ${{ steps.codex.outputs.final-message }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n fetch-depth: 0\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - name: Prepare Lore review context\n env:\n LORE_API_URL: ${{ vars.LORE_API_URL }}\n LORE_WORKSPACE_TOKEN: ${{ secrets.LORE_WORKSPACE_TOKEN }}\n run: >-\n lore github prepare-review\n --provider codex\n --event \"$GITHUB_EVENT_PATH\"\n --checkout \"$GITHUB_WORKSPACE/review\"\n --prompt-out \"$GITHUB_WORKSPACE/.lore/codex-prompt.md\"\n --metadata-out \"$GITHUB_WORKSPACE/.lore/codex-metadata.json\"\n --schema-out \"$GITHUB_WORKSPACE/.lore/review-output.schema.json\"\n\n - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2\n with:\n name: lore-codex-metadata\n path: .lore/codex-metadata.json\n retention-days: 1\n\n - name: Run Codex\n id: codex\n uses: openai/codex-action@52fe01ec70a42f454c9d2ebd47598f9fd6893d56 # v1.11\n with:\n openai-api-key: ${{ secrets.OPENAI_API_KEY }}\n prompt-file: .lore/codex-prompt.md\n output-schema-file: .lore/review-output.schema.json\n working-directory: review\n permission-profile: \":read-only\"\n safety-strategy: drop-sudo\n\n post:\n needs: review\n if: needs.review.outputs.final-message != ''\n runs-on: ubuntu-latest\n permissions:\n contents: read\n pull-requests: write\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.8' }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0\n with:\n name: lore-codex-metadata\n path: .lore\n\n - name: Save review output\n env:\n CODEX_REVIEW: ${{ needs.review.outputs.final-message }}\n run: |\n mkdir -p .lore\n printf '%s' \"$CODEX_REVIEW\" > .lore/codex-output.json\n\n - name: Post or update Lore review\n env:\n GH_TOKEN: ${{ github.token }}\n run: >-\n lore github post-review\n --metadata .lore/codex-metadata.json\n --output .lore/codex-output.json\n",
4
- "lore-devin-review.yml": "name: Lore Devin review\nrun-name: \"Lore Devin review [${{ github.event.action }}] PR #${{ github.event.pull_request.number }} @ ${{ github.event.pull_request.head.sha }}\"\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review, labeled]\n\nconcurrency:\n group: lore-devin-review-${{ github.repository }}-${{ github.event.pull_request.number }}\n cancel-in-progress: true\n\njobs:\n review:\n if: >-\n !github.event.pull_request.draft &&\n github.event.pull_request.head.repo.full_name == github.repository &&\n contains(github.event.pull_request.labels.*.name, 'lore:devin-review')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n pull-requests: write\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.8' }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n fetch-depth: 0\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - name: Prepare Lore review context\n env:\n LORE_API_URL: ${{ vars.LORE_API_URL }}\n LORE_WORKSPACE_TOKEN: ${{ secrets.LORE_WORKSPACE_TOKEN }}\n run: >-\n lore github prepare-review\n --provider devin\n --event \"$GITHUB_EVENT_PATH\"\n --checkout \"$GITHUB_WORKSPACE/review\"\n --prompt-out \"$GITHUB_WORKSPACE/.lore/devin-prompt.md\"\n --metadata-out \"$GITHUB_WORKSPACE/.lore/devin-metadata.json\"\n\n - name: Run Lore-enriched Devin review\n env:\n DEVIN_API_KEY: ${{ secrets.DEVIN_API_KEY }}\n DEVIN_ORG_ID: ${{ vars.DEVIN_ORG_ID }}\n run: >-\n lore devin run-review\n --prompt .lore/devin-prompt.md\n --metadata .lore/devin-metadata.json\n --output .lore/devin-output.json\n\n - name: Post or update Lore review\n env:\n GH_TOKEN: ${{ github.token }}\n run: >-\n lore github post-review\n --metadata .lore/devin-metadata.json\n --output .lore/devin-output.json\n\n - name: Clean up Devin session\n if: always()\n continue-on-error: true\n env:\n DEVIN_API_KEY: ${{ secrets.DEVIN_API_KEY }}\n DEVIN_ORG_ID: ${{ vars.DEVIN_ORG_ID }}\n run: |\n SESSION_ID=\"$(jq -r '.sessionId // empty' .lore/devin-metadata.json 2>/dev/null || true)\"\n if [ -n \"$SESSION_ID\" ]; then\n lore devin terminate --session \"$SESSION_ID\"\n fi\n",
5
- "lore-observe-correction.yml": "name: Lore review correction\nrun-name: \"Lore review correction comment #${{ github.event.comment.id }}\"\n\non:\n issue_comment:\n types: [created]\n\njobs:\n observe:\n if: >-\n github.event.issue.pull_request &&\n startsWith(github.event.comment.body, '/lore correct ')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n issues: read\n pull-requests: read\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.8' }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - name: Teach Lore from an authorized correction\n env:\n GH_TOKEN: ${{ github.token }}\n LORE_API_URL: ${{ vars.LORE_API_URL }}\n LORE_WORKSPACE_TOKEN: ${{ secrets.LORE_WORKSPACE_TOKEN }}\n run: >-\n lore github observe-correction\n --event \"$GITHUB_EVENT_PATH\"\n",
3
+ "lore-codex-review.yml": "name: Lore Codex review\nrun-name: \"Lore Codex review [${{ github.event.action }}] PR #${{ github.event.pull_request.number }} @ ${{ github.event.pull_request.head.sha }}\"\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review, labeled]\n\njobs:\n review:\n if: >-\n !github.event.pull_request.draft &&\n github.event.pull_request.head.repo.full_name == github.repository &&\n contains(github.event.pull_request.labels.*.name, 'lore:codex-review')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.10' }}\n outputs:\n final-message: ${{ steps.codex.outputs.final-message }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n fetch-depth: 0\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - name: Prepare Lore review context\n env:\n LORE_API_URL: ${{ vars.LORE_API_URL }}\n LORE_WORKSPACE_TOKEN: ${{ secrets.LORE_WORKSPACE_TOKEN }}\n run: >-\n lore github prepare-review\n --provider codex\n --event \"$GITHUB_EVENT_PATH\"\n --checkout \"$GITHUB_WORKSPACE/review\"\n --prompt-out \"$GITHUB_WORKSPACE/.lore/codex-prompt.md\"\n --metadata-out \"$GITHUB_WORKSPACE/.lore/codex-metadata.json\"\n --schema-out \"$GITHUB_WORKSPACE/.lore/review-output.schema.json\"\n\n - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2\n with:\n name: lore-codex-metadata\n path: .lore/codex-metadata.json\n retention-days: 1\n\n - name: Run Codex\n id: codex\n uses: openai/codex-action@52fe01ec70a42f454c9d2ebd47598f9fd6893d56 # v1.11\n with:\n openai-api-key: ${{ secrets.OPENAI_API_KEY }}\n prompt-file: .lore/codex-prompt.md\n output-schema-file: .lore/review-output.schema.json\n working-directory: review\n permission-profile: \":read-only\"\n safety-strategy: drop-sudo\n\n post:\n needs: review\n if: needs.review.outputs.final-message != ''\n runs-on: ubuntu-latest\n permissions:\n contents: read\n pull-requests: write\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.10' }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0\n with:\n name: lore-codex-metadata\n path: .lore\n\n - name: Save review output\n env:\n CODEX_REVIEW: ${{ needs.review.outputs.final-message }}\n run: |\n mkdir -p .lore\n printf '%s' \"$CODEX_REVIEW\" > .lore/codex-output.json\n\n - name: Post or update Lore review\n env:\n GH_TOKEN: ${{ github.token }}\n run: >-\n lore github post-review\n --metadata .lore/codex-metadata.json\n --output .lore/codex-output.json\n",
4
+ "lore-devin-review.yml": "name: Lore Devin review\nrun-name: \"Lore Devin review [${{ github.event.action }}] PR #${{ github.event.pull_request.number }} @ ${{ github.event.pull_request.head.sha }}\"\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review, labeled]\n\nconcurrency:\n group: lore-devin-review-${{ github.repository }}-${{ github.event.pull_request.number }}\n cancel-in-progress: true\n\njobs:\n review:\n if: >-\n !github.event.pull_request.draft &&\n github.event.pull_request.head.repo.full_name == github.repository &&\n contains(github.event.pull_request.labels.*.name, 'lore:devin-review')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n pull-requests: write\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.10' }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n fetch-depth: 0\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - name: Prepare Lore review context\n env:\n LORE_API_URL: ${{ vars.LORE_API_URL }}\n LORE_WORKSPACE_TOKEN: ${{ secrets.LORE_WORKSPACE_TOKEN }}\n run: >-\n lore github prepare-review\n --provider devin\n --event \"$GITHUB_EVENT_PATH\"\n --checkout \"$GITHUB_WORKSPACE/review\"\n --prompt-out \"$GITHUB_WORKSPACE/.lore/devin-prompt.md\"\n --metadata-out \"$GITHUB_WORKSPACE/.lore/devin-metadata.json\"\n\n - name: Run Lore-enriched Devin review\n env:\n DEVIN_API_KEY: ${{ secrets.DEVIN_API_KEY }}\n DEVIN_ORG_ID: ${{ vars.DEVIN_ORG_ID }}\n run: >-\n lore devin run-review\n --prompt .lore/devin-prompt.md\n --metadata .lore/devin-metadata.json\n --output .lore/devin-output.json\n\n - name: Post or update Lore review\n env:\n GH_TOKEN: ${{ github.token }}\n run: >-\n lore github post-review\n --metadata .lore/devin-metadata.json\n --output .lore/devin-output.json\n\n - name: Clean up Devin session\n if: always()\n continue-on-error: true\n env:\n DEVIN_API_KEY: ${{ secrets.DEVIN_API_KEY }}\n DEVIN_ORG_ID: ${{ vars.DEVIN_ORG_ID }}\n run: |\n SESSION_ID=\"$(jq -r '.sessionId // empty' .lore/devin-metadata.json 2>/dev/null || true)\"\n if [ -n \"$SESSION_ID\" ]; then\n lore devin terminate --session \"$SESSION_ID\"\n fi\n",
5
+ "lore-observe-correction.yml": "name: Lore review correction\nrun-name: \"Lore review correction comment #${{ github.event.comment.id }}\"\n\non:\n issue_comment:\n types: [created]\n\njobs:\n observe:\n if: >-\n github.event.issue.pull_request &&\n startsWith(github.event.comment.body, '/lore correct ')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n issues: read\n pull-requests: read\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.2.10' }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - name: Teach Lore from an authorized correction\n env:\n GH_TOKEN: ${{ github.token }}\n LORE_API_URL: ${{ vars.LORE_API_URL }}\n LORE_WORKSPACE_TOKEN: ${{ secrets.LORE_WORKSPACE_TOKEN }}\n run: >-\n lore github observe-correction\n --event \"$GITHUB_EVENT_PATH\"\n",
6
6
  "review-output.schema.json": "{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\"summary\", \"findings\"],\n \"properties\": {\n \"summary\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"\\\\S\"\n },\n \"findings\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\"severity\", \"title\", \"body\", \"path\", \"line\"],\n \"properties\": {\n \"severity\": {\n \"enum\": [\"critical\", \"high\", \"medium\", \"low\"]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"\\\\S\"\n },\n \"body\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"\\\\S\"\n },\n \"path\": {\n \"type\": [\"string\", \"null\"],\n \"minLength\": 1,\n \"pattern\": \"\\\\S\"\n },\n \"line\": {\n \"type\": [\"integer\", \"null\"],\n \"minimum\": 1\n }\n }\n }\n }\n }\n}\n"
7
7
  };
8
- export const SELF_HOST_COMPOSE_ASSET = "name: lore\n\nx-api-image: &api-image \"${LORE_API_IMAGE:-ghcr.io/treadiehq/lore-api}:${LORE_IMAGE_TAG:-0.2.8}\"\nx-web-image: &web-image \"${LORE_WEB_IMAGE:-ghcr.io/treadiehq/lore-web}:${LORE_IMAGE_TAG:-0.2.8}\"\n\nservices:\n postgres:\n image: pgvector/pgvector:0.8.6-pg18\n environment:\n POSTGRES_DB: lore\n POSTGRES_USER: lore\n POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-}\n volumes:\n - postgres-data:/var/lib/postgresql\n healthcheck:\n test:\n [\n \"CMD-SHELL\",\n 'pg_isready -h 127.0.0.1 -U \"$${POSTGRES_USER}\" -d \"$${POSTGRES_DB}\"',\n ]\n interval: 5s\n timeout: 5s\n retries: 10\n start_period: 10s\n restart: unless-stopped\n\n api:\n image: *api-image\n environment:\n NODE_ENV: production\n DATABASE_URL: \"postgresql://lore:${POSTGRES_PASSWORD:-}@postgres:5432/lore\"\n API_HOST: 0.0.0.0\n API_PORT: 3001\n API_JSON_BODY_LIMIT: ${API_JSON_BODY_LIMIT:-1mb}\n API_RATE_LIMIT_PER_MINUTE: ${API_RATE_LIMIT_PER_MINUTE:-120}\n RATE_LIMIT_KEY_SECRET: ${RATE_LIMIT_KEY_SECRET:-}\n TRUSTED_PROXY_CIDRS: ${TRUSTED_PROXY_CIDRS:-10.0.0.0/8,172.16.0.0/12}\n NUXT_ORIGIN: ${NUXT_ORIGIN:-}\n LORE_SERVER_VERSION: ${LORE_IMAGE_TAG:-0.2.8}\n LORE_SERVER_REVISION: ${LORE_SERVER_REVISION:-}\n LORE_WORKSPACE_TOKEN: ${LORE_WORKSPACE_TOKEN:-}\n LORE_WORKSPACE_ORGANIZATION: ${LORE_WORKSPACE_ORGANIZATION:-}\n LORE_WORKSPACE_NAME: ${LORE_WORKSPACE_NAME:-}\n AUTH_MODE: ${AUTH_MODE:-magic_link}\n AUTH_EMAIL_MODE: ${AUTH_EMAIL_MODE:-resend}\n AUTH_WEB_ORIGIN: ${AUTH_WEB_ORIGIN:-}\n AUTH_OWNER_EMAIL: ${AUTH_OWNER_EMAIL:-}\n AUTH_EMAIL_FROM: ${AUTH_EMAIL_FROM:-}\n RESEND_API_KEY: ${RESEND_API_KEY:-}\n AUTH_MAGIC_LINK_TTL_MINUTES: ${AUTH_MAGIC_LINK_TTL_MINUTES:-15}\n AUTH_SESSION_TTL_DAYS: ${AUTH_SESSION_TTL_DAYS:-30}\n GITHUB_AUTH_CLIENT_ID: ${GITHUB_AUTH_CLIENT_ID:-}\n GITHUB_AUTH_CLIENT_SECRET: ${GITHUB_AUTH_CLIENT_SECRET:-}\n GITHUB_AUTH_REDIRECT_URI: ${GITHUB_AUTH_REDIRECT_URI:-}\n CLOUD_RECOVERY_ENCRYPTION_KEY: ${CLOUD_RECOVERY_ENCRYPTION_KEY:-}\n CLOUD_RECOVERY_PUBLIC_API_URL: ${CLOUD_RECOVERY_PUBLIC_API_URL:-}\n DEVIN_POLLING_ENABLED: ${DEVIN_POLLING_ENABLED:-false}\n DEVIN_API_KEY: ${DEVIN_API_KEY:-}\n DEVIN_ORG_ID: ${DEVIN_ORG_ID:-}\n DEVIN_REPOSITORY_ALLOWLIST: ${DEVIN_REPOSITORY_ALLOWLIST:-}\n DEVIN_POLL_INTERVAL_MS: ${DEVIN_POLL_INTERVAL_MS:-15000}\n DEVIN_REQUEST_TIMEOUT_MS: ${DEVIN_REQUEST_TIMEOUT_MS:-10000}\n DEVIN_POLL_BATCH_SIZE: ${DEVIN_POLL_BATCH_SIZE:-25}\n EXTRACTOR_PROVIDER: ${EXTRACTOR_PROVIDER:-heuristic}\n EXTRACTOR_MIN_CONFIDENCE: ${EXTRACTOR_MIN_CONFIDENCE:-0.8}\n EXTRACTOR_MODEL: ${EXTRACTOR_MODEL:-}\n EXTRACTOR_BASE_URL: ${EXTRACTOR_BASE_URL:-}\n EXTRACTOR_API_KEY: ${EXTRACTOR_API_KEY:-}\n RETRIEVAL_MODE: ${RETRIEVAL_MODE:-auto}\n EMBEDDING_MODEL: ${EMBEDDING_MODEL:-text-embedding-3-small}\n EMBEDDING_BASE_URL: ${EMBEDDING_BASE_URL:-https://api.openai.com/v1}\n EMBEDDING_API_KEY: ${EMBEDDING_API_KEY:-}\n EMBEDDING_DIMENSIONS: ${EMBEDDING_DIMENSIONS:-1536}\n EMBEDDING_TIMEOUT_MS: ${EMBEDDING_TIMEOUT_MS:-5000}\n EMBEDDING_SPACE_ID: ${EMBEDDING_SPACE_ID:-}\n EMBEDDING_RECONCILE_INTERVAL_MS: ${EMBEDDING_RECONCILE_INTERVAL_MS:-60000}\n EMBEDDING_RECONCILE_BATCH_SIZE: ${EMBEDDING_RECONCILE_BATCH_SIZE:-500}\n EMBEDDING_RECONCILE_PAGE_SIZE: ${EMBEDDING_RECONCILE_PAGE_SIZE:-100}\n CAPTURE_WORKER_POLL_INTERVAL_MS: ${CAPTURE_WORKER_POLL_INTERVAL_MS:-500}\n CAPTURE_WORKER_CONCURRENCY: ${CAPTURE_WORKER_CONCURRENCY:-2}\n CAPTURE_WORKER_LEASE_MS: ${CAPTURE_WORKER_LEASE_MS:-60000}\n CAPTURE_INLINE_TIMEOUT_MS: ${CAPTURE_INLINE_TIMEOUT_MS:-45000}\n SEMANTIC_MIN_SIMILARITY: ${SEMANTIC_MIN_SIMILARITY:-0.4}\n CONTEXT_MAX_ITEMS: ${CONTEXT_MAX_ITEMS:-10}\n CONTEXT_MAX_CHARACTERS: ${CONTEXT_MAX_CHARACTERS:-12000}\n CONTEXT_MAX_ESTIMATED_TOKENS: ${CONTEXT_MAX_ESTIMATED_TOKENS:-4000}\n ports:\n - \"${API_BIND_ADDRESS:-127.0.0.1}:${API_PORT:-3001}:3001\"\n depends_on:\n postgres:\n condition: service_healthy\n healthcheck:\n test:\n [\n \"CMD\",\n \"node\",\n \"-e\",\n \"fetch('http://127.0.0.1:3001/health/ready').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))\",\n ]\n interval: 5s\n timeout: 5s\n retries: 12\n start_period: 10s\n restart: unless-stopped\n\n web:\n image: *web-image\n environment:\n HOST: 0.0.0.0\n PORT: 3000\n NITRO_HOST: 0.0.0.0\n NITRO_PORT: 3000\n NUXT_LORE_API_URL: http://api:3001\n NUXT_AUTH_COOKIE_NAME: ${NUXT_AUTH_COOKIE_NAME:-lore_session}\n NUXT_GITHUB_REPOSITORIES_CLIENT_ID: ${NUXT_GITHUB_REPOSITORIES_CLIENT_ID:-}\n NUXT_GITHUB_REPOSITORIES_CLIENT_SECRET: ${NUXT_GITHUB_REPOSITORIES_CLIENT_SECRET:-}\n NUXT_GITHUB_REPOSITORIES_APP_SLUG: ${NUXT_GITHUB_REPOSITORIES_APP_SLUG:-}\n NUXT_GITHUB_REPOSITORIES_REDIRECT_URI: ${NUXT_GITHUB_REPOSITORIES_REDIRECT_URI:-}\n NUXT_AUTH_COOKIE_SECURE: ${NUXT_AUTH_COOKIE_SECURE:-true}\n TRUSTED_PROXY_CIDRS: ${TRUSTED_PROXY_CIDRS:-10.0.0.0/8,172.16.0.0/12}\n NUXT_PUBLIC_API_BASE_URL: /api/lore\n NUXT_PUBLIC_LORE_CONNECTOR_API_URL: ${NUXT_PUBLIC_LORE_CONNECTOR_API_URL:-http://localhost:3001}\n NUXT_PUBLIC_LORE_INSTALL_URL: ${NUXT_PUBLIC_LORE_INSTALL_URL:-https://uselore.co/install.sh}\n ports:\n - \"${NUXT_BIND_ADDRESS:-127.0.0.1}:${NUXT_PORT:-3000}:3000\"\n depends_on:\n api:\n condition: service_healthy\n healthcheck:\n test:\n [\n \"CMD\",\n \"node\",\n \"-e\",\n \"fetch('http://127.0.0.1:3000/health').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))\",\n ]\n interval: 10s\n timeout: 5s\n retries: 12\n start_period: 15s\n restart: unless-stopped\n\nvolumes:\n postgres-data:\n";
8
+ export const SELF_HOST_COMPOSE_ASSET = "name: lore\n\nx-api-image: &api-image \"${LORE_API_IMAGE:-ghcr.io/treadiehq/lore-api}:${LORE_IMAGE_TAG:-0.2.10}\"\nx-web-image: &web-image \"${LORE_WEB_IMAGE:-ghcr.io/treadiehq/lore-web}:${LORE_IMAGE_TAG:-0.2.10}\"\n\nservices:\n postgres:\n image: pgvector/pgvector:0.8.6-pg18\n environment:\n POSTGRES_DB: lore\n POSTGRES_USER: lore\n POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-}\n volumes:\n - postgres-data:/var/lib/postgresql\n healthcheck:\n test:\n [\n \"CMD-SHELL\",\n 'pg_isready -h 127.0.0.1 -U \"$${POSTGRES_USER}\" -d \"$${POSTGRES_DB}\"',\n ]\n interval: 5s\n timeout: 5s\n retries: 10\n start_period: 10s\n restart: unless-stopped\n\n api:\n image: *api-image\n environment:\n NODE_ENV: production\n DATABASE_URL: \"postgresql://lore:${POSTGRES_PASSWORD:-}@postgres:5432/lore\"\n API_HOST: 0.0.0.0\n API_PORT: 3001\n API_JSON_BODY_LIMIT: ${API_JSON_BODY_LIMIT:-1mb}\n API_RATE_LIMIT_PER_MINUTE: ${API_RATE_LIMIT_PER_MINUTE:-120}\n RATE_LIMIT_KEY_SECRET: ${RATE_LIMIT_KEY_SECRET:-}\n TRUSTED_PROXY_CIDRS: ${TRUSTED_PROXY_CIDRS:-10.0.0.0/8,172.16.0.0/12}\n NUXT_ORIGIN: ${NUXT_ORIGIN:-}\n LORE_SERVER_VERSION: ${LORE_IMAGE_TAG:-0.2.10}\n LORE_SERVER_REVISION: ${LORE_SERVER_REVISION:-}\n LORE_WORKSPACE_TOKEN: ${LORE_WORKSPACE_TOKEN:-}\n LORE_WORKSPACE_ORGANIZATION: ${LORE_WORKSPACE_ORGANIZATION:-}\n LORE_WORKSPACE_NAME: ${LORE_WORKSPACE_NAME:-}\n AUTH_MODE: ${AUTH_MODE:-magic_link}\n AUTH_EMAIL_MODE: ${AUTH_EMAIL_MODE:-resend}\n AUTH_WEB_ORIGIN: ${AUTH_WEB_ORIGIN:-}\n AUTH_OWNER_EMAIL: ${AUTH_OWNER_EMAIL:-}\n AUTH_EMAIL_FROM: ${AUTH_EMAIL_FROM:-}\n RESEND_API_KEY: ${RESEND_API_KEY:-}\n AUTH_MAGIC_LINK_TTL_MINUTES: ${AUTH_MAGIC_LINK_TTL_MINUTES:-15}\n AUTH_SESSION_TTL_DAYS: ${AUTH_SESSION_TTL_DAYS:-30}\n GITHUB_AUTH_CLIENT_ID: ${GITHUB_AUTH_CLIENT_ID:-}\n GITHUB_AUTH_CLIENT_SECRET: ${GITHUB_AUTH_CLIENT_SECRET:-}\n GITHUB_AUTH_REDIRECT_URI: ${GITHUB_AUTH_REDIRECT_URI:-}\n CLOUD_RECOVERY_ENCRYPTION_KEY: ${CLOUD_RECOVERY_ENCRYPTION_KEY:-}\n CLOUD_RECOVERY_PUBLIC_API_URL: ${CLOUD_RECOVERY_PUBLIC_API_URL:-}\n DEVIN_POLLING_ENABLED: ${DEVIN_POLLING_ENABLED:-false}\n DEVIN_API_KEY: ${DEVIN_API_KEY:-}\n DEVIN_ORG_ID: ${DEVIN_ORG_ID:-}\n DEVIN_REPOSITORY_ALLOWLIST: ${DEVIN_REPOSITORY_ALLOWLIST:-}\n DEVIN_POLL_INTERVAL_MS: ${DEVIN_POLL_INTERVAL_MS:-15000}\n DEVIN_REQUEST_TIMEOUT_MS: ${DEVIN_REQUEST_TIMEOUT_MS:-10000}\n DEVIN_POLL_BATCH_SIZE: ${DEVIN_POLL_BATCH_SIZE:-25}\n EXTRACTOR_PROVIDER: ${EXTRACTOR_PROVIDER:-heuristic}\n EXTRACTOR_MIN_CONFIDENCE: ${EXTRACTOR_MIN_CONFIDENCE:-0.8}\n EXTRACTOR_MODEL: ${EXTRACTOR_MODEL:-}\n EXTRACTOR_BASE_URL: ${EXTRACTOR_BASE_URL:-}\n EXTRACTOR_API_KEY: ${EXTRACTOR_API_KEY:-}\n RETRIEVAL_MODE: ${RETRIEVAL_MODE:-auto}\n EMBEDDING_MODEL: ${EMBEDDING_MODEL:-text-embedding-3-small}\n EMBEDDING_BASE_URL: ${EMBEDDING_BASE_URL:-https://api.openai.com/v1}\n EMBEDDING_API_KEY: ${EMBEDDING_API_KEY:-}\n EMBEDDING_DIMENSIONS: ${EMBEDDING_DIMENSIONS:-1536}\n EMBEDDING_TIMEOUT_MS: ${EMBEDDING_TIMEOUT_MS:-5000}\n EMBEDDING_SPACE_ID: ${EMBEDDING_SPACE_ID:-}\n EMBEDDING_RECONCILE_INTERVAL_MS: ${EMBEDDING_RECONCILE_INTERVAL_MS:-60000}\n EMBEDDING_RECONCILE_BATCH_SIZE: ${EMBEDDING_RECONCILE_BATCH_SIZE:-500}\n EMBEDDING_RECONCILE_PAGE_SIZE: ${EMBEDDING_RECONCILE_PAGE_SIZE:-100}\n CAPTURE_WORKER_POLL_INTERVAL_MS: ${CAPTURE_WORKER_POLL_INTERVAL_MS:-500}\n CAPTURE_WORKER_CONCURRENCY: ${CAPTURE_WORKER_CONCURRENCY:-2}\n CAPTURE_WORKER_LEASE_MS: ${CAPTURE_WORKER_LEASE_MS:-60000}\n CAPTURE_INLINE_TIMEOUT_MS: ${CAPTURE_INLINE_TIMEOUT_MS:-45000}\n SEMANTIC_MIN_SIMILARITY: ${SEMANTIC_MIN_SIMILARITY:-0.4}\n CONTEXT_MAX_ITEMS: ${CONTEXT_MAX_ITEMS:-10}\n CONTEXT_MAX_CHARACTERS: ${CONTEXT_MAX_CHARACTERS:-12000}\n CONTEXT_MAX_ESTIMATED_TOKENS: ${CONTEXT_MAX_ESTIMATED_TOKENS:-4000}\n ports:\n - \"${API_BIND_ADDRESS:-127.0.0.1}:${API_PORT:-3001}:3001\"\n depends_on:\n postgres:\n condition: service_healthy\n healthcheck:\n test:\n [\n \"CMD\",\n \"node\",\n \"-e\",\n \"fetch('http://127.0.0.1:3001/health/ready').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))\",\n ]\n interval: 5s\n timeout: 5s\n retries: 12\n start_period: 10s\n restart: unless-stopped\n\n web:\n image: *web-image\n environment:\n HOST: 0.0.0.0\n PORT: 3000\n NITRO_HOST: 0.0.0.0\n NITRO_PORT: 3000\n NUXT_LORE_API_URL: http://api:3001\n NUXT_AUTH_COOKIE_NAME: ${NUXT_AUTH_COOKIE_NAME:-lore_session}\n NUXT_GITHUB_REPOSITORIES_CLIENT_ID: ${NUXT_GITHUB_REPOSITORIES_CLIENT_ID:-}\n NUXT_GITHUB_REPOSITORIES_CLIENT_SECRET: ${NUXT_GITHUB_REPOSITORIES_CLIENT_SECRET:-}\n NUXT_GITHUB_REPOSITORIES_APP_SLUG: ${NUXT_GITHUB_REPOSITORIES_APP_SLUG:-}\n NUXT_GITHUB_REPOSITORIES_REDIRECT_URI: ${NUXT_GITHUB_REPOSITORIES_REDIRECT_URI:-}\n NUXT_AUTH_COOKIE_SECURE: ${NUXT_AUTH_COOKIE_SECURE:-true}\n TRUSTED_PROXY_CIDRS: ${TRUSTED_PROXY_CIDRS:-10.0.0.0/8,172.16.0.0/12}\n NUXT_PUBLIC_API_BASE_URL: /api/lore\n NUXT_PUBLIC_LORE_CONNECTOR_API_URL: ${NUXT_PUBLIC_LORE_CONNECTOR_API_URL:-http://localhost:3001}\n NUXT_PUBLIC_LORE_INSTALL_URL: ${NUXT_PUBLIC_LORE_INSTALL_URL:-https://uselore.co/install.sh}\n ports:\n - \"${NUXT_BIND_ADDRESS:-127.0.0.1}:${NUXT_PORT:-3000}:3000\"\n depends_on:\n api:\n condition: service_healthy\n healthcheck:\n test:\n [\n \"CMD\",\n \"node\",\n \"-e\",\n \"fetch('http://127.0.0.1:3000/health').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))\",\n ]\n interval: 10s\n timeout: 5s\n retries: 12\n start_period: 15s\n restart: unless-stopped\n\nvolumes:\n postgres-data:\n";
9
9
  export const VSCODE_RECOVERY_ASSETS = { "package.json": "{\n \"name\": \"lore-recovery\",\n \"displayName\": \"Lore Recovery\",\n \"publisher\": \"lore-co\",\n \"version\": \"0.1.0\",\n \"description\": \"Continue a stopped Copilot job in another connected coding tool.\",\n \"engines\": { \"vscode\": \"^1.105.0\" },\n \"main\": \"./extension.cjs\",\n \"activationEvents\": [\"onStartupFinished\"],\n \"extensionKind\": [\"workspace\"],\n \"capabilities\": { \"untrustedWorkspaces\": { \"supported\": false }, \"virtualWorkspaces\": false },\n \"contributes\": { \"commands\": [{ \"command\": \"lore.recovery.status\", \"title\": \"Lore: Show Recovery Status\" }] }\n}\n", "extension.cjs": "const vscode = require('vscode');\nconst fs = require('node:fs/promises');\nconst { constants } = require('node:fs');\nconst path = require('node:path');\nconst { tmpdir } = require('node:os');\nconst { spawn } = require('node:child_process');\nconst { fileURLToPath } = require('node:url');\nconst { parseSession, checkpoint, bindActiveSession } = require('./session.cjs');\n\nfunction continuationTerminal(config, result, cwd, platform = process.platform) {\n const args = [...config.invocation, 'recovery', 'launch-accepted', result.id, result.failureId];\n const options = { name: 'Lore continuation', cwd };\n if (platform === 'win32') {\n const quote = s => `'${s.replaceAll(\"'\", \"''\")}'`;\n return { options: { ...options, shellPath: 'powershell.exe', env: { PATH: config.path || process.env.PATH, LORE_HOME: config.home, BUN_OPTIONS: null, BUN_BE_BUN: null } }, command: '& ' + args.map(quote).join(' ') };\n }\n const quote = s => `'${s.replaceAll(\"'\", \"'\\\\''\")}'`;\n return { options, command: ['env','-u','BUN_OPTIONS','-u','BUN_BE_BUN',`PATH=${config.path || process.env.PATH}`,`LORE_HOME=${config.home}`, ...args].map(quote).join(' ') };\n}\n\nasync function readActiveSession(saved) {\n if (!saved.length) return;\n const directory = await fs.mkdtemp(path.join(tmpdir(), 'lore-chat-'));\n try {\n await fs.chmod(directory, 0o700);\n const target = path.join(directory, 'active.json');\n await fs.writeFile(target, '', { mode: 0o600 });\n // This public command exports the in-memory chat without opening a dialog.\n await vscode.commands.executeCommand('workbench.action.chat.export', vscode.Uri.file(target));\n const file = await fs.open(target, constants.O_RDONLY | constants.O_NOFOLLOW);\n try {\n const stat = await file.stat();\n if (!stat.isFile() || stat.size > 8 * 1024 * 1024 || (process.getuid && stat.uid !== process.getuid())) return;\n return bindActiveSession(parseSession(await file.readFile('utf8')), saved);\n } finally { await file.close(); }\n } catch { /* Unsupported export commands keep the saved-session fallback. */ }\n finally { await fs.rm(directory, { recursive: true, force: true }); }\n}\n\nfunction activate(context) {\n const output = vscode.window.createOutputChannel('Lore Recovery'); context.subscriptions.push(output);\n let config = require('./connection.json'); // Written by lore connect, outside the repository.\n let busy = false, disposed = false, lastError = '', status = 'Waiting for a saved Copilot turn.';\n const offered = new Set();\n function call(args, input) {\n return new Promise((resolve, reject) => {\n const child = spawn(config.invocation[0], [...config.invocation.slice(1), 'recovery', ...args], {\n env: { ...process.env, PATH: config.path || process.env.PATH, LORE_HOME: config.home, BUN_OPTIONS: undefined, BUN_BE_BUN: undefined }, stdio: ['pipe','pipe','pipe'],\n });\n let body = '', error = ''; const timer = setTimeout(() => { child.kill(); reject(Error('Lore adapter timed out')); }, 10000);\n child.stdout.on('data', b => { body += b; if (body.length > 65536) child.kill(); });\n child.stderr.on('data', b => { error = (error + b).slice(-2000); });\n child.once('error', e => { clearTimeout(timer); reject(e); });\n child.once('exit', code => { clearTimeout(timer); if(code) reject(Error(error || 'Lore adapter failed')); else { try { resolve(JSON.parse(body)); } catch { reject(Error('Invalid Lore response')); } } });\n child.stdin.on('error', () => {}); child.stdin.end(JSON.stringify(input));\n });\n }\n async function poll() {\n if (busy || disposed || !vscode.workspace.isTrusted || !context.storageUri || context.storageUri.scheme !== 'file') return;\n busy = true;\n try {\n config = JSON.parse(await fs.readFile(path.join(__dirname, 'connection.json'), 'utf8'));\n if (config.disabled) { status = 'Lore recovery is disabled.'; return; }\n const folders = (vscode.workspace.workspaceFolders ?? []).filter(f => f.uri.scheme === 'file');\n const roots = await Promise.all(folders.map(f => fs.realpath(f.uri.fsPath)));\n const storage = path.dirname(context.storageUri.fsPath), chatDir = path.join(storage, 'chatSessions');\n // The extension context binds this storage directory to this VS Code workspace.\n const names = (await fs.readdir(chatDir).catch(e => { if(e.code === 'ENOENT') return []; throw e; })).filter(n => /^[a-zA-Z0-9-]+\\.jsonl?$/.test(n) && n !== 'index.json').slice(-400);\n const saved = [];\n for (const name of names) {\n const file = await fs.open(path.join(chatDir,name), constants.O_RDONLY | constants.O_NOFOLLOW);\n let session;\n try {\n const stat = await file.stat();\n if (!stat.isFile() || stat.size > 8*1024*1024 || (process.getuid && stat.uid !== process.getuid())) continue;\n session = parseSession(await file.readFile('utf8'), name.endsWith('.jsonl'));\n } catch (e) { if(e instanceof SyntaxError) continue; throw e; }\n finally { await file.close(); }\n let cwd;\n if (session?.workingDirectory) {\n try { cwd = await fs.realpath(fileURLToPath(session.workingDirectory)); } catch { continue; }\n if (!roots.some(r => cwd === r || cwd.startsWith(r + path.sep))) continue;\n // Recovery configuration registers exact workspaces. Do not guess another root.\n if (!config.roots.includes(cwd)) continue;\n } else if (roots.length === 1) cwd = roots[0]; else continue;\n if (!config.roots.includes(cwd)) continue;\n saved.push({ session, cwd });\n }\n const active = await readActiveSession(saved);\n // Replace the saved copy before processing it, so a live retry/cancellation\n // suppresses an obsolete failure even when disk storage is still behind.\n for (const entry of saved) {\n const { session, cwd } = active?.session.sessionId === entry.session?.sessionId ? active : entry;\n const event = checkpoint(session, cwd); if (!event) continue;\n const timestamp = session.requests?.at(-1)?.timestamp;\n if ((typeof timestamp === 'number' ? timestamp : Date.parse(timestamp)) < config.since || !timestamp) continue;\n const result = await call(['external-checkpoint'], event);\n status = active ? 'Observing active Copilot chat and saved sessions.' : 'Observing saved Copilot sessions; active chat identity is not yet available.';\n if (!result.failureId || offered.has(result.failureId)) continue;\n offered.add(result.failureId);\n const button = `Continue with ${result.target}`;\n void vscode.window.showWarningMessage(`Copilot stopped${event.reason === 'rate_limit' ? ' at a usage limit' : ' with an error'}. Lore can continue this job.`, button, 'Dismiss').then(choice => {\n if(choice !== button || disposed) return;\n const { options, command } = continuationTerminal(config, result, cwd);\n const terminal = vscode.window.createTerminal(options); terminal.show(); terminal.sendText(command, true);\n });\n }\n lastError = '';\n } catch(e) { status = e.message; if(lastError !== status) output.appendLine(status); lastError = status; }\n finally { busy = false; }\n }\n const timer = setInterval(() => { void poll(); }, 1500); void poll();\n context.subscriptions.push({ dispose() { disposed = true; clearInterval(timer); } });\n context.subscriptions.push(vscode.commands.registerCommand('lore.recovery.status', () => vscode.window.showInformationMessage(status)));\n}\nmodule.exports = { activate, readActiveSession, continuationTerminal };\n", "session.cjs": "// VS Code's version 3 chat model and numeric objectMutationLog format.\n// No terminal/answer text matching, proposed API, or Copilot monkey patching.\nconst forbidden = new Set(['__proto__', 'constructor', 'prototype']);\nfunction parseSession(text, jsonl = false) {\n if (Buffer.byteLength(text) > 8 * 1024 * 1024) throw Error('Chat exceeds the 8 MiB recovery read limit');\n if (!jsonl) return JSON.parse(text);\n let state;\n for (const line of text.trimEnd().split('\\n')) {\n if (!line) continue;\n const entry = JSON.parse(line);\n if (entry.kind === 0) { if (state !== undefined) throw Error('Repeated chat initial state'); state = entry.v; continue; }\n if (!state || !Array.isArray(entry.k) || !entry.k.length || entry.k.length > 30 || entry.k.some(k => !(typeof k === 'string' || Number.isSafeInteger(k)) || forbidden.has(k))) throw Error('Unsupported chat mutation');\n let parent = state;\n for (const k of entry.k.slice(0, -1)) {\n if (!parent || !Object.hasOwn(parent, k)) throw Error('Invalid chat mutation path');\n parent = parent[k];\n }\n const key = entry.k.at(-1);\n if (!parent || typeof parent !== 'object') throw Error('Invalid chat mutation target');\n if (entry.kind === 1) parent[key] = entry.v;\n else if (entry.kind === 3) delete parent[key];\n else if (entry.kind === 2) {\n const array = parent[key];\n if (!Array.isArray(array) || (entry.i !== undefined && (!Number.isSafeInteger(entry.i) || entry.i < 0 || entry.i > array.length)) || (entry.v !== undefined && !Array.isArray(entry.v))) throw Error('Invalid chat array mutation');\n if (entry.i !== undefined) array.splice(entry.i);\n if (entry.v) array.push(...entry.v);\n } else throw Error('Unknown chat mutation');\n }\n return state;\n}\nfunction checkpoint(session, cwd) {\n if (session?.version !== 3 || typeof session.sessionId !== 'string' || !Array.isArray(session.requests)) return;\n const requests = session.requests.filter(r => !r.isSystemInitiated && !r.hiddenFromTranscript);\n const last = requests.at(-1);\n if (!last || typeof last.requestId !== 'string' || typeof last.message?.text !== 'string') return;\n const extension = last.agent?.extensionId;\n if ((typeof extension === 'string' ? extension : extension?.value)?.toLowerCase() !== 'github.copilot-chat') return;\n const error = last.result?.errorDetails ?? last.responseErrorDetails;\n const canceled = last.isCanceled === true || error?.code === 'canceled' || last.modelState?.value === 2;\n const failed = !canceled && !!error && typeof error.message === 'string' && !error.responseIsFiltered && !error.responseIsRedacted;\n const messages = requests.slice(-10).flatMap(r => [\n { role: 'user', text: String(r.message?.text ?? '').slice(0,6000) },\n { role: 'assistant', text: (r.response ?? []).filter(p => typeof p?.value === 'string').map(p => p.value).join('\\n').slice(0,6000) },\n ]).filter(m => m.text);\n return { host: 'copilot-vscode', sourceAgent: 'copilot-cli', sessionId: session.sessionId, turnId: last.requestId, cwd,\n goal: String(requests[0]?.message?.text ?? '').slice(0,6000), messages,\n state: canceled ? 'cancelled' : failed ? 'failed' : last.result ? 'completed' : 'running',\n ...(failed ? { reason: error.isRateLimited === true || error.isQuotaExceeded === true || ['rateLimited','quotaExceeded'].includes(error.code) ? 'rate_limit' : 'agent_error' } : {}), observedAt: Date.now() };\n}\n// Live chat export omits sessionId/cwd. Bind only by the ordered stable request\n// IDs of exactly one saved session; never infer identity from a title or text.\nfunction bindActiveSession(exported, saved) {\n if (!Array.isArray(exported?.requests) || !exported.requests.length) return;\n const ids = exported.requests.map(r => r.requestId);\n if (ids.some(id => typeof id !== 'string' || !id) || new Set(ids).size !== ids.length) return;\n const matches = saved.filter(({ session }) => session?.version === 3 && typeof session.sessionId === 'string' &&\n Array.isArray(session.requests) && session.requests.length > 0 && session.requests.length <= ids.length &&\n session.requests.every((r, i) => r.requestId === ids[i]));\n if (matches.length !== 1) return;\n const match = matches[0];\n return { cwd: match.cwd, session: { ...match.session, requests: exported.requests } };\n}\nmodule.exports = { parseSession, checkpoint, bindActiveSession };\n" };
10
10
  //# sourceMappingURL=generated-assets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generated-assets.js","sourceRoot":"","sources":["../src/generated-assets.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,uBAAuB,EAAE,68HAA68H;IACt+H,uBAAuB,EAAE,05FAA05F;IACn7F,6BAA6B,EAAE,o4CAAo4C;IACn6C,2BAA2B,EAAE,+tCAA+tC;CACpvC,CAAC;AACX,MAAM,CAAC,MAAM,uBAAuB,GAAG,o+LAAo+L,CAAC;AAC5gM,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAC,cAAc,EAAC,mnBAAmnB,EAAC,eAAe,EAAC,4jPAA4jP,EAAC,aAAa,EAAC,21IAA21I,EAAU,CAAC"}
1
+ {"version":3,"file":"generated-assets.js","sourceRoot":"","sources":["../src/generated-assets.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,uBAAuB,EAAE,+8HAA+8H;IACx+H,uBAAuB,EAAE,25FAA25F;IACp7F,6BAA6B,EAAE,q4CAAq4C;IACp6C,2BAA2B,EAAE,+tCAA+tC;CACpvC,CAAC;AACX,MAAM,CAAC,MAAM,uBAAuB,GAAG,u+LAAu+L,CAAC;AAC/gM,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAC,cAAc,EAAC,mnBAAmnB,EAAC,eAAe,EAAC,4jPAA4jP,EAAC,aAAa,EAAC,21IAA21I,EAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAuQ3D,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAED,6DAA6D;AAC7D,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,eAAe,GAAG,IAAI,EAC9B,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CA8Nf;AA+KD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,eAAe,GAAG,IAAI,EAC9B,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CA4Gf;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,eAAe,GAAG,IAAI,EAC9B,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CAwBf"}
1
+ {"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAuQ3D,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAED,6DAA6D;AAC7D,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,eAAe,GAAG,IAAI,EAC9B,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CA8Nf;AAoMD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,eAAe,GAAG,IAAI,EAC9B,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CAyGf;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,eAAe,GAAG,IAAI,EAC9B,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CAwBf"}