@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.
- package/README.md +16 -5
- package/dist/agents.d.ts +16 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +80 -0
- package/dist/agents.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +40 -6
- package/dist/cli.js.map +1 -1
- package/dist/devin-client.d.ts +2 -2
- package/dist/generated-assets.d.ts +4 -4
- package/dist/generated-assets.js +4 -4
- package/dist/guard.d.ts +1 -1
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +2 -1
- package/dist/guard.js.map +1 -1
- package/dist/handoff.d.ts.map +1 -1
- package/dist/handoff.js +12 -25
- package/dist/handoff.js.map +1 -1
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +29 -2
- package/dist/live.js.map +1 -1
- package/dist/pty.d.ts.map +1 -1
- package/dist/pty.js +46 -6
- package/dist/pty.js.map +1 -1
- package/dist/recovery-opencode.d.ts +3 -0
- package/dist/recovery-opencode.d.ts.map +1 -0
- package/dist/recovery-opencode.js +72 -0
- package/dist/recovery-opencode.js.map +1 -0
- package/dist/recovery-state.d.ts +77 -0
- package/dist/recovery-state.d.ts.map +1 -0
- package/dist/recovery-state.js +262 -0
- package/dist/recovery-state.js.map +1 -0
- package/dist/recovery.d.ts +21 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +560 -0
- package/dist/recovery.js.map +1 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +52 -41
- package/dist/runtime.js.map +1 -1
- package/dist/self-host.d.ts +1 -1
- package/dist/self-host.js +2 -2
- package/dist/signed-snapshot.d.ts.map +1 -1
- package/dist/signed-snapshot.js +3 -3
- package/dist/signed-snapshot.js.map +1 -1
- package/dist/update.js +3 -3
- 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
|
|
144
|
-
|
|
145
|
-
`lore guard approve` command in the
|
|
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.
|
|
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.
|
|
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
|
|
package/dist/agents.d.ts
ADDED
|
@@ -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":";AAsBA,OAAO,EAwBL,KAAK,yBAAyB,EAC/B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,cAAc,CAAC;
|
|
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 === "--
|
|
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
|
|
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(
|
|
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;
|