@lore-co/cli 0.1.21 → 0.1.23

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 (47) hide show
  1. package/README.md +16 -5
  2. package/dist/agents.d.ts +16 -0
  3. package/dist/agents.d.ts.map +1 -0
  4. package/dist/agents.js +80 -0
  5. package/dist/agents.js.map +1 -0
  6. package/dist/cli.d.ts +4 -0
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +40 -6
  9. package/dist/cli.js.map +1 -1
  10. package/dist/devin-client.d.ts +2 -2
  11. package/dist/generated-assets.d.ts +4 -4
  12. package/dist/generated-assets.js +4 -4
  13. package/dist/guard.d.ts +1 -1
  14. package/dist/guard.d.ts.map +1 -1
  15. package/dist/guard.js +2 -1
  16. package/dist/guard.js.map +1 -1
  17. package/dist/handoff.d.ts.map +1 -1
  18. package/dist/handoff.js +12 -25
  19. package/dist/handoff.js.map +1 -1
  20. package/dist/live.d.ts.map +1 -1
  21. package/dist/live.js +29 -2
  22. package/dist/live.js.map +1 -1
  23. package/dist/pty.d.ts.map +1 -1
  24. package/dist/pty.js +46 -6
  25. package/dist/pty.js.map +1 -1
  26. package/dist/recovery-opencode.d.ts +3 -0
  27. package/dist/recovery-opencode.d.ts.map +1 -0
  28. package/dist/recovery-opencode.js +72 -0
  29. package/dist/recovery-opencode.js.map +1 -0
  30. package/dist/recovery-state.d.ts +77 -0
  31. package/dist/recovery-state.d.ts.map +1 -0
  32. package/dist/recovery-state.js +262 -0
  33. package/dist/recovery-state.js.map +1 -0
  34. package/dist/recovery.d.ts +21 -0
  35. package/dist/recovery.d.ts.map +1 -0
  36. package/dist/recovery.js +560 -0
  37. package/dist/recovery.js.map +1 -0
  38. package/dist/runtime.d.ts.map +1 -1
  39. package/dist/runtime.js +52 -41
  40. package/dist/runtime.js.map +1 -1
  41. package/dist/self-host.d.ts +1 -1
  42. package/dist/self-host.js +2 -2
  43. package/dist/signed-snapshot.d.ts.map +1 -1
  44. package/dist/signed-snapshot.js +3 -3
  45. package/dist/signed-snapshot.js.map +1 -1
  46. package/dist/update.js +3 -3
  47. package/package.json +3 -3
package/README.md CHANGED
@@ -88,6 +88,14 @@ For a review-first rollout in a personal vault or component catalog, follow the
88
88
 
89
89
  ## Query shared context
90
90
 
91
+ Use `lore connect --fallback <agent>` or set independent routes with
92
+ `lore recovery enable --from opencode --to devin`, then open a new terminal.
93
+ Local destinations are Claude, Codex, OpenCode, Devin CLI, Cursor Agent and
94
+ Copilot CLI, plus Polytoken. Claude and OpenCode support automatic offers for documented failure
95
+ conditions; Claude/Codex/OpenCode/Devin also support a manual Ctrl+] switch.
96
+ Setup adds reversible shell wrappers and separate checkpoint integrations.
97
+ See the [recovery guide](../../docs/recovery.md) for exact coverage and evidence.
98
+
91
99
  ```sh
92
100
  lore ask "How should payment retries work?"
93
101
  lore ask "What did the previous agent already try?" --repo acme/billing
@@ -140,9 +148,12 @@ lore guard approve <check-id> # confirm a blocked action
140
148
  With guard on, connected agents receive up to three highly relevant learnings
141
149
  (with sources) before file edits, commits, deploys, and destructive commands.
142
150
  In `enforce` mode, actions that conflict with a learning marked as a
143
- *Required rule* pause: Claude Code and Codex show their native confirmation
144
- dialog, while Cursor and OpenCode block the call and include the
145
- `lore guard approve` command in the message. Changing modes requires an
151
+ *Required rule* pause: Claude Code shows its native confirmation dialog,
152
+ Codex denies the call with approve-and-retry instructions, and Cursor and
153
+ OpenCode block the call and include the `lore guard approve` command in the
154
+ message. Native hooks and OpenCode preserve known Enforce during outages using
155
+ a verified saved policy and block Guard-eligible actions if no usable policy
156
+ exists. Changing modes requires an
146
157
  owner- or admin-attributed credential; `status` and `approve` work for every
147
158
  member. All subcommands support `--json`. Guard output uses the same relevance,
148
159
  provenance, scope, status, and freshness explanation as `ask`. Every decision,
@@ -153,7 +164,7 @@ content-free `guard_check` audit event.
153
164
 
154
165
  ```sh
155
166
  lore update
156
- lore update --version v0.1.21
167
+ lore update --version v0.1.23
157
168
  ```
158
169
 
159
170
  `update` resolves the latest release to an exact tag, or uses the exact
@@ -416,7 +427,7 @@ same-repository, non-draft pull requests bearing the corresponding
416
427
  `lore:codex-review` or `lore:devin-review` label.
417
428
 
418
429
  Generated jobs require a published standalone binary release and default to
419
- `treadiehq/lore-releases` at `v0.1.21`. Set `LORE_CLI_REPOSITORY` to the publicly
430
+ `treadiehq/lore-releases` at `v0.1.23`. Set `LORE_CLI_REPOSITORY` to the publicly
420
431
  readable `owner/repository` and `LORE_CLI_VERSION` to an existing release tag
421
432
  when using another release source.
422
433
 
@@ -0,0 +1,16 @@
1
+ /** Local terminal clients. Cloud and desktop surfaces need different transports. */
2
+ export declare const LAUNCHABLE_AGENTS: readonly ["claude", "codex", "opencode", "devin", "cursor", "copilot-cli", "polytoken"];
3
+ export type LaunchableAgent = (typeof LAUNCHABLE_AGENTS)[number];
4
+ export declare const RECOVERY_SOURCES: readonly ["claude", "codex", "opencode", "devin"];
5
+ export type RecoverySource = (typeof RECOVERY_SOURCES)[number];
6
+ export declare const AGENTS: Record<LaunchableAgent, {
7
+ label: string;
8
+ commands: readonly string[];
9
+ automatic: string | null;
10
+ }>;
11
+ export declare const isLaunchable: (value: string) => value is LaunchableAgent;
12
+ export declare const isRecoverySource: (value: string) => value is RecoverySource;
13
+ export declare function launchArguments(agent: LaunchableAgent, brief: string): string[];
14
+ export declare function findAgentExecutable(agent: LaunchableAgent, env?: NodeJS.ProcessEnv): Promise<string>;
15
+ export declare function isInteractiveAgent(agent: RecoverySource, args: readonly string[], stdinIsTty: boolean, stdoutIsTty: boolean): boolean;
16
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAIA,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,yFAA0F,CAAC;AACzH,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AACjE,eAAO,MAAM,gBAAgB,mDAAoD,CAAC;AAClF,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/D,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAQpH,CAAC;AACF,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,KAAK,IAAI,eAA2E,CAAC;AAClI,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,KAAG,KAAK,IAAI,cAAyE,CAAC;AAEpI,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAM/E;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,oBAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CASpG;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CA6BrI"}
package/dist/agents.js ADDED
@@ -0,0 +1,80 @@
1
+ import { constants } from "node:fs";
2
+ import { access, realpath, stat } from "node:fs/promises";
3
+ import { delimiter, resolve } from "node:path";
4
+ /** Local terminal clients. Cloud and desktop surfaces need different transports. */
5
+ export const LAUNCHABLE_AGENTS = ["claude", "codex", "opencode", "devin", "cursor", "copilot-cli", "polytoken"];
6
+ export const RECOVERY_SOURCES = ["claude", "codex", "opencode", "devin"];
7
+ export const AGENTS = {
8
+ claude: { label: "Claude", commands: ["claude"], automatic: "StopFailure: rate_limit" },
9
+ codex: { label: "Codex", commands: ["codex"], automatic: null },
10
+ opencode: { label: "OpenCode", commands: ["opencode"], automatic: "APIError: HTTP 429, or 3 provider retries" },
11
+ devin: { label: "Devin CLI", commands: ["devin"], automatic: null },
12
+ cursor: { label: "Cursor Agent", commands: ["cursor-agent", "agent"], automatic: null },
13
+ "copilot-cli": { label: "Copilot CLI", commands: ["copilot"], automatic: null },
14
+ polytoken: { label: "Polytoken", commands: ["polytoken"], automatic: null },
15
+ };
16
+ export const isLaunchable = (value) => LAUNCHABLE_AGENTS.includes(value);
17
+ export const isRecoverySource = (value) => RECOVERY_SOURCES.includes(value);
18
+ export function launchArguments(agent, brief) {
19
+ if (agent === "opencode")
20
+ return ["--prompt", brief];
21
+ if (agent === "copilot-cli")
22
+ return ["--interactive", brief];
23
+ if (agent === "devin")
24
+ return ["--", brief];
25
+ if (agent === "polytoken")
26
+ return ["new", "--prompt", brief];
27
+ return [brief];
28
+ }
29
+ export async function findAgentExecutable(agent, env = process.env) {
30
+ for (const command of AGENTS[agent].commands) {
31
+ for (const directory of (env.PATH ?? "").split(delimiter)) {
32
+ if (!directory)
33
+ continue;
34
+ const path = resolve(directory, command);
35
+ try {
36
+ await access(path, constants.X_OK);
37
+ if ((await stat(path)).isFile())
38
+ return await realpath(path);
39
+ }
40
+ catch { /* next PATH entry */ }
41
+ }
42
+ }
43
+ throw new Error(`${AGENTS[agent].label} is not installed or is not on PATH (expected ${AGENTS[agent].commands.join(" or ")}).`);
44
+ }
45
+ export function isInteractiveAgent(agent, args, stdinIsTty, stdoutIsTty) {
46
+ if (!stdinIsTty || !stdoutIsTty)
47
+ return false;
48
+ const common = ["--help", "-h", "--version", "-v", "-V", "--print", "-p"];
49
+ const bypass = {
50
+ claude: ["--bg", "--background", "--cloud", "--bare", "--safe-mode", "--worktree", "-w", "--tmux"],
51
+ codex: ["--cd", "-C", "--remote", "--remote-session"],
52
+ devin: ["--config"],
53
+ opencode: [],
54
+ };
55
+ const beforeDelimiter = args.slice(0, args.indexOf("--") < 0 ? args.length : args.indexOf("--"));
56
+ if (beforeDelimiter.some((arg) => [...common, ...bypass[agent]].includes(arg.split("=")[0] ?? arg)))
57
+ return false;
58
+ const commands = {
59
+ claude: ["auth", "mcp", "plugin", "plugins", "install", "update", "upgrade", "doctor", "setup-token", "agents", "attach", "logs", "rm", "stop", "kill", "respawn", "gateway", "import", "project", "ultrareview"],
60
+ codex: ["exec", "e", "review", "login", "logout", "mcp", "mcp-server", "app-server", "app", "completion", "sandbox", "debug", "apply", "a", "resume", "fork", "cloud", "features", "help"],
61
+ devin: ["auth", "mcp", "models", "rules", "skills", "plugins", "cloud", "list", "ls", "update", "version", "migrate", "sandbox", "setup", "uninstall", "acp", "help"],
62
+ opencode: ["completion", "acp", "mcp", "attach", "run", "debug", "providers", "auth", "agent", "upgrade", "uninstall", "serve", "web", "models", "stats", "export", "import", "github", "pr", "session", "db"],
63
+ };
64
+ if (commands[agent].includes(args[0] ?? ""))
65
+ return false;
66
+ // OpenCode's positional argument selects another directory. Keep wrappers
67
+ // scoped to their existing cwd; flags with values are still supported.
68
+ if (agent === "opencode") {
69
+ const valued = ["--prompt", "--model", "-m", "--session", "-s", "--agent", "--port", "--hostname", "--log-level", "--mdns-domain", "--cors"];
70
+ for (let i = 0; i < args.length; i++) {
71
+ const arg = args[i];
72
+ if (!arg.startsWith("-"))
73
+ return false;
74
+ if (valued.includes(arg))
75
+ i++;
76
+ }
77
+ }
78
+ return true;
79
+ }
80
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts CHANGED
@@ -78,6 +78,7 @@ export interface AgentInstallation {
78
78
  }
79
79
  export declare function t3CodeProviderInstallations(settings: unknown, paths: LorePaths): AgentInstallation[];
80
80
  export interface ConnectWithCredentialOptions {
81
+ fallback?: string;
81
82
  /** Explicit installation root for embedded callers and isolated acceptance tests. */
82
83
  home?: string;
83
84
  /** Repository root for project-local integrations such as VS Code. */
@@ -89,6 +90,7 @@ export interface ConnectWithCredentialOptions {
89
90
  timeoutMs?: number;
90
91
  }
91
92
  export interface ConnectResult {
93
+ recoveryNotice?: string;
92
94
  connected: true;
93
95
  apiUrl: string;
94
96
  identity: WorkspaceIdentityResponse;
@@ -99,6 +101,8 @@ export interface ConnectResult {
99
101
  warnings: string[];
100
102
  }
101
103
  export declare function connectWithCredential(options: ConnectWithCredentialOptions): Promise<ConnectResult>;
104
+ export declare function reliabilityWorkspaceKey(config: ConnectorConfig): string;
105
+ export declare function credentialReliabilityWorkspaceKey(apiUrl: string, token: string): string;
102
106
  export declare function runCli(args?: readonly string[]): Promise<void>;
103
107
  export {};
104
108
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -14,6 +14,8 @@ import { runAskCommand } from "./ask.js";
14
14
  import { runRememberCommand } from "./remember.js";
15
15
  import { runGuardCommand } from "./guard.js";
16
16
  import { runContinueCommand, runResumeCommand } from "./handoff.js";
17
+ import { disableRecovery, prepareRecoveryInstallation, runRecoveryCommand, runRecoveryHook, runWrappedAgent } from "./recovery.js";
18
+ import { LAUNCHABLE_AGENTS, isLaunchable, isRecoverySource } from "./agents.js";
17
19
  import { runAttachCommand, runLiveHostCommand, runLiveRunCommand, } from "./live.js";
18
20
  import { runMachinesCommand } from "./machine.js";
19
21
  import { connectGithub, runGithubCommand } from "./github.js";
@@ -86,6 +88,8 @@ Commands:
86
88
  guard Control Context Guard (off, assist, enforce)
87
89
  resume Continue previous work with saved Lore context
88
90
  continue Hand the current work to a different agent (--on <agent>)
91
+ run Run a coding agent with configured recovery
92
+ recovery Inspect recovery metrics, record feedback, or disable recovery
89
93
  attach Reconnect to a live Lore-managed session (--from <machine>)
90
94
  machines List registered machines and their live sessions
91
95
  github Prepare/post GitHub reviews and observe corrections
@@ -141,6 +145,7 @@ Options:
141
145
  --token <token> Workspace bearer token (or LORE_WORKSPACE_TOKEN/LORE_TOKEN)
142
146
  --agent <name> claude, codex, copilot, copilot-cli, copilot-vscode, cowork, cursor, opencode, polytoken, or t3code
143
147
  --timeout-ms <ms> Hook request timeout, 250-10000 (default: 2500)
148
+ --fallback <agent> claude, codex, opencode, devin, cursor, copilot-cli, polytoken
144
149
  --json Print machine-readable output
145
150
  --help Show this command's help
146
151
 
@@ -1552,12 +1557,18 @@ function parseConnectArguments(args) {
1552
1557
  argument !== "--dashboard-url" &&
1553
1558
  argument !== "--token" &&
1554
1559
  argument !== "--agent" &&
1560
+ argument !== "--fallback" &&
1555
1561
  argument !== "--timeout-ms") {
1556
1562
  throw new Error(`Unknown connect option: ${argument ?? ""}`);
1557
1563
  }
1558
1564
  const [value, valueIndex] = valueAfter(args, index, argument);
1559
1565
  index = valueIndex;
1560
- if (argument === "--url") {
1566
+ if (argument === "--fallback") {
1567
+ if (!isLaunchable(value))
1568
+ throw new Error(`--fallback must be ${LAUNCHABLE_AGENTS.join(", ")}`);
1569
+ parsed.fallback = value;
1570
+ }
1571
+ else if (argument === "--url") {
1561
1572
  parsed.apiUrl = value;
1562
1573
  }
1563
1574
  else if (argument === "--dashboard-url") {
@@ -1613,6 +1624,8 @@ export async function connectWithCredential(options) {
1613
1624
  throw new Error("Lore agent integrations currently support macOS and Linux");
1614
1625
  }
1615
1626
  const paths = getLorePaths(options.home, options.home === undefined ? process.env : {}, options.cwd);
1627
+ const installRecovery = options.fallback === undefined ? undefined :
1628
+ await prepareRecoveryInstallation(paths, options.fallback, options.home === undefined ? process.env : { ...process.env, ZDOTDIR: paths.home });
1616
1629
  const existing = await readConnectorConfig(paths);
1617
1630
  const apiUrl = normalizeApiUrl(options.apiUrl);
1618
1631
  const dashboardUrl = options.dashboardUrl === undefined
@@ -1624,9 +1637,12 @@ export async function connectWithCredential(options) {
1624
1637
  }
1625
1638
  const timeoutMs = options.timeoutMs ?? existing?.timeoutMs ?? 2_500;
1626
1639
  const identity = await authenticatedIdentity(apiUrl, token.trim(), timeoutMs);
1627
- const requestedExpansion = options.agents.length === 0
1640
+ const recoveryAgents = installRecovery ? [...installRecovery.sources, installRecovery.fallback]
1641
+ .filter((agent) => agent !== "devin") : [];
1642
+ const requestedAgents = [...new Set([...options.agents, ...recoveryAgents])];
1643
+ const requestedExpansion = requestedAgents.length === 0
1628
1644
  ? { installations: [], warnings: [] }
1629
- : await expandConnectInstallations(options.agents, paths);
1645
+ : await expandConnectInstallations(requestedAgents, paths);
1630
1646
  const detectedAgents = options.agents.length === 0 ? await detectAgents(paths) : [];
1631
1647
  const installations = uniqueInstallations([
1632
1648
  ...configuredInstallations(existing, paths),
@@ -1713,6 +1729,7 @@ export async function connectWithCredential(options) {
1713
1729
  await credentialStore.transferPendingTo(reliabilityStore);
1714
1730
  }
1715
1731
  await reliabilityStore.releaseAuthBlocked(now);
1732
+ const recoveryNotice = installRecovery ? await installRecovery() : undefined;
1716
1733
  return {
1717
1734
  connected: true,
1718
1735
  apiUrl: config.apiUrl,
@@ -1722,6 +1739,7 @@ export async function connectWithCredential(options) {
1722
1739
  changedHookFiles,
1723
1740
  backups,
1724
1741
  warnings: requestedExpansion.warnings,
1742
+ ...(recoveryNotice ? { recoveryNotice } : {}),
1725
1743
  };
1726
1744
  }
1727
1745
  async function requestDeviceAuthorization(input) {
@@ -1854,13 +1872,14 @@ async function connectCommand(args) {
1854
1872
  throw new Error("Workspace token is required. Use --login, --token <token>, LORE_WORKSPACE_TOKEN, or LORE_TOKEN.");
1855
1873
  }
1856
1874
  const result = await connectWithCredential({
1875
+ ...(parsed.fallback === undefined ? {} : { fallback: parsed.fallback }),
1857
1876
  apiUrl,
1858
1877
  ...(dashboardUrl === undefined ? {} : { dashboardUrl }),
1859
1878
  token,
1860
1879
  agents: parsed.agents,
1861
1880
  ...(parsed.timeoutMs === undefined ? {} : { timeoutMs: parsed.timeoutMs }),
1862
1881
  });
1863
- writeResult(result, parsed.json, `connected: ${result.agents.join(", ")}\napi_url: ${result.apiUrl}\nconfig: ${result.config}\n${result.warnings.map((warning) => `warning: ${warning}\n`).join("")}`);
1882
+ writeResult(result, parsed.json, `connected: ${result.agents.join(", ")}\napi_url: ${result.apiUrl}\nconfig: ${result.config}\n${result.recoveryNotice ? `${result.recoveryNotice}\n` : ""}${result.warnings.map((warning) => `warning: ${warning}\n`).join("")}`);
1864
1883
  }
1865
1884
  async function queueCount(paths) {
1866
1885
  try {
@@ -1870,11 +1889,11 @@ async function queueCount(paths) {
1870
1889
  return 0;
1871
1890
  }
1872
1891
  }
1873
- function reliabilityWorkspaceKey(config) {
1892
+ export function reliabilityWorkspaceKey(config) {
1874
1893
  return (config.workspaceId ??
1875
1894
  credentialReliabilityWorkspaceKey(config.apiUrl, config.token));
1876
1895
  }
1877
- function credentialReliabilityWorkspaceKey(apiUrl, token) {
1896
+ export function credentialReliabilityWorkspaceKey(apiUrl, token) {
1878
1897
  return `credential-${createHash("sha256")
1879
1898
  .update(`${apiUrl}\0${token}`)
1880
1899
  .digest("hex")
@@ -2181,6 +2200,7 @@ async function disconnectCommand(args) {
2181
2200
  return;
2182
2201
  }
2183
2202
  const paths = getLorePaths();
2203
+ await disableRecovery(paths.home);
2184
2204
  const config = await readConnectorConfig(paths);
2185
2205
  const now = new Date();
2186
2206
  const changedHookFiles = [];
@@ -2517,6 +2537,20 @@ export async function runCli(args = process.argv.slice(2)) {
2517
2537
  case "continue":
2518
2538
  await runContinueCommand(commandArgs, await readConnectorConfig(getLorePaths()), getLorePaths());
2519
2539
  return;
2540
+ case "run":
2541
+ await runWrappedAgent(commandArgs, getLorePaths(process.env.LORE_HOME));
2542
+ return;
2543
+ case "recovery":
2544
+ await runRecoveryCommand(commandArgs, getLorePaths(process.env.LORE_HOME));
2545
+ return;
2546
+ case "recovery-hook":
2547
+ {
2548
+ const agent = commandArgs.includes("--agent") ? commandArgs[commandArgs.indexOf("--agent") + 1] : "claude";
2549
+ if (!agent || !isRecoverySource(agent))
2550
+ throw new Error("Unknown recovery hook agent.");
2551
+ await runRecoveryHook(getLorePaths(process.env.LORE_HOME).home, agent);
2552
+ }
2553
+ return;
2520
2554
  case "attach":
2521
2555
  await runAttachCommand(commandArgs, await readConnectorConfig(getLorePaths()), getLorePaths());
2522
2556
  return;