@lore-co/cli 0.2.22 → 0.2.24
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 +109 -13
- package/dist/approach-guidance.js +2 -2
- package/dist/approach-guidance.js.map +1 -1
- package/dist/approach.d.ts +1 -1
- package/dist/approach.d.ts.map +1 -1
- package/dist/approach.js +7 -0
- package/dist/approach.js.map +1 -1
- package/dist/ask.d.ts +2 -6
- package/dist/ask.d.ts.map +1 -1
- package/dist/ask.js +4 -21
- package/dist/ask.js.map +1 -1
- package/dist/chat.d.ts +15 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +286 -0
- package/dist/chat.js.map +1 -0
- package/dist/cli.d.ts +80 -7
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +626 -142
- package/dist/cli.js.map +1 -1
- package/dist/command-help.d.ts +4 -1
- package/dist/command-help.d.ts.map +1 -1
- package/dist/command-help.js +9 -0
- package/dist/command-help.js.map +1 -1
- package/dist/devin-capture.d.ts +6 -0
- package/dist/devin-capture.d.ts.map +1 -1
- package/dist/devin-capture.js +34 -3
- package/dist/devin-capture.js.map +1 -1
- package/dist/devin-cli.d.ts +7 -2
- package/dist/devin-cli.d.ts.map +1 -1
- package/dist/devin-cli.js +81 -8
- package/dist/devin-cli.js.map +1 -1
- package/dist/generated-assets.d.ts +8 -6
- package/dist/generated-assets.d.ts.map +1 -1
- package/dist/generated-assets.js +8 -6
- package/dist/generated-assets.js.map +1 -1
- package/dist/generic-mcp.d.ts +35 -0
- package/dist/generic-mcp.d.ts.map +1 -0
- package/dist/generic-mcp.js +83 -0
- package/dist/generic-mcp.js.map +1 -0
- package/dist/learnings.d.ts +20 -0
- package/dist/learnings.d.ts.map +1 -1
- package/dist/learnings.js +25 -16
- package/dist/learnings.js.map +1 -1
- package/dist/lore-agent.d.ts +50 -0
- package/dist/lore-agent.d.ts.map +1 -0
- package/dist/lore-agent.js +299 -0
- package/dist/lore-agent.js.map +1 -0
- package/dist/mcp-config.d.ts +46 -0
- package/dist/mcp-config.d.ts.map +1 -0
- package/dist/mcp-config.js +196 -0
- package/dist/mcp-config.js.map +1 -0
- package/dist/owned-files.d.ts +21 -0
- package/dist/owned-files.d.ts.map +1 -0
- package/dist/owned-files.js +88 -0
- package/dist/owned-files.js.map +1 -0
- package/dist/recovery-cloud.d.ts +1 -1
- package/dist/review.d.ts +30 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +276 -0
- package/dist/review.js.map +1 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +50 -19
- package/dist/runtime.js.map +1 -1
- package/dist/self-host.d.ts +1 -1
- package/dist/self-host.js +2 -2
- package/dist/skills.d.ts +2 -0
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +46 -97
- package/dist/skills.js.map +1 -1
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +39 -4
- package/dist/update.js.map +1 -1
- package/package.json +7 -4
package/dist/chat.js
ADDED
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { createInterface } from "node:readline";
|
|
2
|
+
import { ChatResponseSchema, GetMemoryResponseSchema, MAX_CHAT_TURNS, WorkSessionDetailResponseSchema, } from "@lore-co/core";
|
|
3
|
+
import { sharingDashboardUrl } from "@lore-co/sdk";
|
|
4
|
+
import { detectRepository } from "./ask.js";
|
|
5
|
+
const CHAT_HELP = `lore chat
|
|
6
|
+
Discuss your workspace's shared knowledge with Lore in plain language.
|
|
7
|
+
Read-only: nothing you type is saved, and no learning, session, approach or
|
|
8
|
+
share is created or changed.
|
|
9
|
+
|
|
10
|
+
Usage:
|
|
11
|
+
lore chat Open a prompt (type quit to leave)
|
|
12
|
+
lore chat "<question>" [options] Answer once and exit
|
|
13
|
+
|
|
14
|
+
Options:
|
|
15
|
+
--repo <repo> Rank knowledge and sessions for this repository
|
|
16
|
+
(default: the Git repository of the current folder)
|
|
17
|
+
--project <name> Rank knowledge and sessions for this project
|
|
18
|
+
--agent <name> Identify the calling agent (default: human)
|
|
19
|
+
--json One-shot mode: print the full machine-readable response
|
|
20
|
+
--help Show this command's help
|
|
21
|
+
|
|
22
|
+
In the prompt:
|
|
23
|
+
<question> Ask; follow-ups keep the previous answer's sources
|
|
24
|
+
<number> Print that cited learning or session in full
|
|
25
|
+
scope <repo> Rank for another repository (scope none for workspace-wide)
|
|
26
|
+
quit Leave the chat
|
|
27
|
+
|
|
28
|
+
Answers cite the learnings and sessions they drew on and say plainly when
|
|
29
|
+
nothing in the workspace covers a question. Servers without an AI model
|
|
30
|
+
(EXTRACTOR_PROVIDER=heuristic) list the retrieved sources instead of prose.
|
|
31
|
+
|
|
32
|
+
Examples:
|
|
33
|
+
lore chat
|
|
34
|
+
lore chat "Has anyone on the team run into flaky auth tests?"
|
|
35
|
+
lore chat "What did we decide about payment retries?" --repo acme/billing --json
|
|
36
|
+
`;
|
|
37
|
+
function parseChatArguments(args) {
|
|
38
|
+
const parsed = { question: "", json: false };
|
|
39
|
+
const positionals = [];
|
|
40
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
41
|
+
const argument = args[index];
|
|
42
|
+
if (argument === "--help" || argument === "-h") {
|
|
43
|
+
process.stdout.write(CHAT_HELP);
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
if (argument === "--json") {
|
|
47
|
+
parsed.json = true;
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (argument === "--repo" || argument === "--project" || argument === "--agent") {
|
|
51
|
+
const value = args[index + 1];
|
|
52
|
+
if (value === undefined || value.startsWith("-"))
|
|
53
|
+
throw new Error(`Missing value for ${argument}`);
|
|
54
|
+
index += 1;
|
|
55
|
+
if (argument === "--repo")
|
|
56
|
+
parsed.repo = value;
|
|
57
|
+
else if (argument === "--project")
|
|
58
|
+
parsed.project = value;
|
|
59
|
+
else
|
|
60
|
+
parsed.agent = value;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (argument.startsWith("--"))
|
|
64
|
+
throw new Error(`Unknown chat option: ${argument}`);
|
|
65
|
+
positionals.push(argument);
|
|
66
|
+
}
|
|
67
|
+
parsed.question = positionals.join(" ").trim();
|
|
68
|
+
if (parsed.json && parsed.question === "") {
|
|
69
|
+
throw new Error('--json needs a question. Try: lore chat "What did we decide about retries?" --json');
|
|
70
|
+
}
|
|
71
|
+
return parsed;
|
|
72
|
+
}
|
|
73
|
+
async function request(config, method, path, body) {
|
|
74
|
+
try {
|
|
75
|
+
return await fetch(`${config.apiUrl}${path}`, {
|
|
76
|
+
method,
|
|
77
|
+
headers: {
|
|
78
|
+
accept: "application/json",
|
|
79
|
+
authorization: `Bearer ${config.token}`,
|
|
80
|
+
...(body === undefined ? {} : { "content-type": "application/json" }),
|
|
81
|
+
},
|
|
82
|
+
...(body === undefined ? {} : { body: JSON.stringify(body) }),
|
|
83
|
+
signal: AbortSignal.timeout(60_000),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
throw new Error("Lore API is unreachable. Run lore doctor to diagnose connectivity.");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function failForStatus(response, feature) {
|
|
91
|
+
if (response.status === 401 || response.status === 403) {
|
|
92
|
+
throw new Error("Lore authentication failed. Reconnect with a valid workspace token.");
|
|
93
|
+
}
|
|
94
|
+
if (response.status === 404) {
|
|
95
|
+
throw new Error(`This Lore server does not support ${feature}. Upgrade the server to use lore chat.`);
|
|
96
|
+
}
|
|
97
|
+
if (response.status === 503) {
|
|
98
|
+
throw new Error("Lore chat is unavailable: the server's model did not answer. Try again later.");
|
|
99
|
+
}
|
|
100
|
+
if (!response.ok)
|
|
101
|
+
throw new Error(`Lore chat failed with HTTP ${response.status}.`);
|
|
102
|
+
}
|
|
103
|
+
async function sendMessage(session, message) {
|
|
104
|
+
const body = {
|
|
105
|
+
message,
|
|
106
|
+
...(session.turns.length === 0 ? {} : { turns: session.turns.slice(-MAX_CHAT_TURNS) }),
|
|
107
|
+
...(session.cited.learnings.length === 0 && session.cited.sessions.length === 0 ? {} : { cited: session.cited }),
|
|
108
|
+
...(session.repo === undefined ? {} : { repo: session.repo }),
|
|
109
|
+
...(session.project === undefined ? {} : { project: session.project }),
|
|
110
|
+
...(session.agent === undefined ? {} : { agent: session.agent }),
|
|
111
|
+
};
|
|
112
|
+
const response = await request(session.config, "POST", "/v1/chat", body);
|
|
113
|
+
failForStatus(response, "chat");
|
|
114
|
+
const parsed = ChatResponseSchema.safeParse(JSON.parse(await response.text()));
|
|
115
|
+
if (!parsed.success) {
|
|
116
|
+
throw new Error("Lore server returned an incompatible chat response. Upgrade the server and CLI.");
|
|
117
|
+
}
|
|
118
|
+
return parsed.data;
|
|
119
|
+
}
|
|
120
|
+
function dashboardFor(config) {
|
|
121
|
+
try {
|
|
122
|
+
return sharingDashboardUrl(config.apiUrl, config.dashboardUrl);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function formatRepositoryLine(repo, source) {
|
|
129
|
+
if (repo === undefined)
|
|
130
|
+
return "Repository: none detected in this folder; discussing workspace-wide knowledge.";
|
|
131
|
+
return `Repository: ${repo} (${source === "flag" ? "from --repo" : "detected from the current folder"})`;
|
|
132
|
+
}
|
|
133
|
+
/** Cited sources first, numbered for the prompt; retrieval mode shows everything found. */
|
|
134
|
+
function listedSources(response) {
|
|
135
|
+
const cited = response.sources.filter((source) => source.cited);
|
|
136
|
+
return cited.length > 0 ? cited : response.mode === "retrieval" ? response.sources : [];
|
|
137
|
+
}
|
|
138
|
+
export function formatChatAnswer(response, dashboard) {
|
|
139
|
+
const sources = listedSources(response);
|
|
140
|
+
const lines = [response.answer.trimEnd()];
|
|
141
|
+
if (sources.length > 0) {
|
|
142
|
+
lines.push("", "Sources:");
|
|
143
|
+
for (const [index, source] of sources.entries()) {
|
|
144
|
+
const where = source.repo === null ? "workspace-wide" : source.repo;
|
|
145
|
+
const link = dashboard === null ? "" : ` ${new URL(source.path, dashboard).href}`;
|
|
146
|
+
lines.push(` [${index + 1}] ${source.kind} · ${source.title} · ${where}${link}`);
|
|
147
|
+
if (response.mode === "retrieval" && source.excerpt !== "")
|
|
148
|
+
lines.push(` ${source.excerpt.slice(0, 240)}`);
|
|
149
|
+
}
|
|
150
|
+
lines.push("Type a number to read a source in full.");
|
|
151
|
+
}
|
|
152
|
+
return { text: `${lines.join("\n")}\n`, sources };
|
|
153
|
+
}
|
|
154
|
+
async function printSource(session, source, write) {
|
|
155
|
+
const link = session.dashboard === null ? "" : `\nDashboard: ${new URL(source.path, session.dashboard).href}`;
|
|
156
|
+
if (source.kind === "learning") {
|
|
157
|
+
const response = await request(session.config, "GET", `/v1/learnings/${source.id}`);
|
|
158
|
+
failForStatus(response, "learnings");
|
|
159
|
+
const parsed = GetMemoryResponseSchema.safeParse(JSON.parse(await response.text()));
|
|
160
|
+
const memory = parsed.success ? parsed.data.memory : null;
|
|
161
|
+
if (memory === null)
|
|
162
|
+
throw new Error("This learning is no longer available in your workspace.");
|
|
163
|
+
const scope = [memory.scope.repo === undefined ? "workspace-wide" : memory.scope.repo, memory.scope.path, memory.scope.component]
|
|
164
|
+
.filter((value) => typeof value === "string").join(" · ");
|
|
165
|
+
write(`Learning ${memory.id}\n${memory.content}\n\ncategory: ${memory.category} · status: ${memory.status} · scope: ${scope} · updated ${memory.updatedAt.slice(0, 10)}${link}\n`);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const response = await request(session.config, "GET", `/v1/sessions/${source.id}`);
|
|
169
|
+
failForStatus(response, "sessions");
|
|
170
|
+
const parsed = WorkSessionDetailResponseSchema.safeParse(JSON.parse(await response.text()));
|
|
171
|
+
if (!parsed.success)
|
|
172
|
+
throw new Error("This session is no longer available in your workspace.");
|
|
173
|
+
const { session: detail, events } = parsed.data;
|
|
174
|
+
const where = detail.repo ?? detail.project ?? "unknown repo";
|
|
175
|
+
const lines = [`Session ${detail.id} · ${detail.agent} · ${where} · last active ${detail.lastActivityAt.slice(0, 10)} · ${detail.eventCount} event(s)`];
|
|
176
|
+
if (detail.title)
|
|
177
|
+
lines.push(detail.title);
|
|
178
|
+
for (const event of events) {
|
|
179
|
+
const parts = [
|
|
180
|
+
event.task === null ? null : `task: ${event.task}`,
|
|
181
|
+
event.userText === null ? null : `user: ${event.userText}`,
|
|
182
|
+
event.assistantText === null ? null : `assistant: ${event.assistantText}`,
|
|
183
|
+
].filter((value) => value !== null);
|
|
184
|
+
if (parts.length > 0)
|
|
185
|
+
lines.push("", `[${event.occurredAt.slice(0, 16).replace("T", " ")} · ${event.type}]`, ...parts);
|
|
186
|
+
}
|
|
187
|
+
write(`${lines.join("\n")}${link}\n`);
|
|
188
|
+
}
|
|
189
|
+
async function handleLine(session, raw, write) {
|
|
190
|
+
const line = raw.trim();
|
|
191
|
+
if (line === "")
|
|
192
|
+
return "continue";
|
|
193
|
+
if (line === "quit" || line === "exit")
|
|
194
|
+
return "quit";
|
|
195
|
+
if (/^\d+$/u.test(line)) {
|
|
196
|
+
const source = session.sources[Number(line) - 1];
|
|
197
|
+
if (source === undefined) {
|
|
198
|
+
write(session.sources.length === 0 ? "No sources to open yet. Ask a question first.\n" : `Choose a source between 1 and ${session.sources.length}.\n`);
|
|
199
|
+
return "continue";
|
|
200
|
+
}
|
|
201
|
+
await printSource(session, source, write);
|
|
202
|
+
return "continue";
|
|
203
|
+
}
|
|
204
|
+
const scope = /^scope(?:\s+(.*))?$/u.exec(line);
|
|
205
|
+
if (scope !== null) {
|
|
206
|
+
const value = scope[1]?.trim();
|
|
207
|
+
if (value === undefined || value === "") {
|
|
208
|
+
write(`${formatRepositoryLine(session.repo, session.repoSource)}\nUse: scope <owner/repo> or scope none\n`);
|
|
209
|
+
return "continue";
|
|
210
|
+
}
|
|
211
|
+
session.repo = value === "none" ? undefined : value;
|
|
212
|
+
session.repoSource = "flag";
|
|
213
|
+
// A new scope is a new subject: start the thread again.
|
|
214
|
+
session.turns = [];
|
|
215
|
+
session.cited = { learnings: [], sessions: [] };
|
|
216
|
+
session.sources = [];
|
|
217
|
+
write(`${session.repo === undefined ? "Repository: none; discussing workspace-wide knowledge." : `Repository: ${session.repo}`}\n`);
|
|
218
|
+
return "continue";
|
|
219
|
+
}
|
|
220
|
+
const response = await sendMessage(session, line);
|
|
221
|
+
const formatted = formatChatAnswer(response, session.dashboard);
|
|
222
|
+
write(formatted.text);
|
|
223
|
+
session.sources = formatted.sources;
|
|
224
|
+
session.cited = response.cited;
|
|
225
|
+
const exchange = [{ role: "user", content: line }, { role: "lore", content: response.answer.slice(0, 4_000) }];
|
|
226
|
+
session.turns = [...session.turns, ...exchange].slice(-MAX_CHAT_TURNS);
|
|
227
|
+
return "continue";
|
|
228
|
+
}
|
|
229
|
+
export async function runChatCommand(args, config, options = {}) {
|
|
230
|
+
const parsed = parseChatArguments(args);
|
|
231
|
+
if (parsed === null)
|
|
232
|
+
return;
|
|
233
|
+
if (config === null) {
|
|
234
|
+
throw new Error("Lore is not connected. Run: lore connect --token <workspace-token>");
|
|
235
|
+
}
|
|
236
|
+
const output = options.output ?? process.stdout;
|
|
237
|
+
const write = (text) => { output.write(text); };
|
|
238
|
+
const repoSource = parsed.repo === undefined ? "folder" : "flag";
|
|
239
|
+
const session = {
|
|
240
|
+
config,
|
|
241
|
+
repo: parsed.repo ?? (await detectRepository(options.cwd ?? process.cwd())),
|
|
242
|
+
repoSource,
|
|
243
|
+
project: parsed.project,
|
|
244
|
+
agent: parsed.agent,
|
|
245
|
+
turns: [],
|
|
246
|
+
cited: { learnings: [], sessions: [] },
|
|
247
|
+
sources: [],
|
|
248
|
+
dashboard: dashboardFor(config),
|
|
249
|
+
};
|
|
250
|
+
if (parsed.question !== "") {
|
|
251
|
+
const response = await sendMessage(session, parsed.question);
|
|
252
|
+
if (parsed.json) {
|
|
253
|
+
write(`${JSON.stringify(response, null, 2)}\n`);
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
const formatted = formatChatAnswer(response, session.dashboard);
|
|
257
|
+
write(`${formatRepositoryLine(session.repo, session.repoSource)}\n\n${formatted.text.replace(/\nType a number to read a source in full\.\n$/u, "\n")}`);
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
write(`Lore chat (read-only; nothing you type is saved)\n${formatRepositoryLine(session.repo, session.repoSource)}\nAsk a question, type a source number to read it, scope <repo> to change scope, or quit.\n\n`);
|
|
261
|
+
const input = options.input ?? process.stdin;
|
|
262
|
+
const prompt = createInterface({ input, terminal: false });
|
|
263
|
+
const showPrompt = () => write("lore> ");
|
|
264
|
+
showPrompt();
|
|
265
|
+
try {
|
|
266
|
+
for await (const line of prompt) {
|
|
267
|
+
let outcome;
|
|
268
|
+
try {
|
|
269
|
+
outcome = await handleLine(session, line, write);
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
// One failed turn ends neither the chat nor the terminal session.
|
|
273
|
+
write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
274
|
+
outcome = "continue";
|
|
275
|
+
}
|
|
276
|
+
if (outcome === "quit")
|
|
277
|
+
break;
|
|
278
|
+
showPrompt();
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
finally {
|
|
282
|
+
prompt.close();
|
|
283
|
+
}
|
|
284
|
+
write("\n");
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=chat.js.map
|
package/dist/chat.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { type DirectoryRules } from "./directory-policy.js";
|
|
2
|
+
import { type CapturePause, type DirectoryRules } from "./directory-policy.js";
|
|
3
3
|
import { type CaptureScopeOptions } from "./capture-scope.js";
|
|
4
4
|
import { type ConnectionReference } from "./directory-policy.js";
|
|
5
|
+
import { type LoreMcpAgent, type McpHostAgent } from "./mcp-config.js";
|
|
5
6
|
import { type OperationalMetricsResponse, type WorkspaceIdentityResponse } from "@lore-co/core";
|
|
6
7
|
import { type CommandHookAgentName } from "./runtime.js";
|
|
8
|
+
import { genericMcpServers, type GenericMcpAgent } from "./generic-mcp.js";
|
|
7
9
|
import { type ReliabilityStoreInspection } from "./reliability-store.js";
|
|
8
10
|
export declare const LORE_OPENCODE_PLUGIN = "@lore-co/opencode";
|
|
9
11
|
export declare const DEFAULT_HOSTED_API_URL = "https://api.uselore.co";
|
|
10
12
|
export declare const DEFAULT_HOSTED_DASHBOARD_URL = "https://uselore.co";
|
|
11
13
|
declare const CONFIGURED_AGENT_NAMES: readonly ["claude", "codex", "copilot-cli", "copilot-vscode", "cursor", "opencode", "polytoken"];
|
|
12
14
|
export type ConfiguredAgentName = (typeof CONFIGURED_AGENT_NAMES)[number];
|
|
13
|
-
export type ConnectAgentName = ConfiguredAgentName | "copilot" | "cowork" | "devin" | "t3code";
|
|
15
|
+
export type ConnectAgentName = ConfiguredAgentName | "copilot" | "cowork" | "devin" | "generic" | "t3code";
|
|
16
|
+
/** Capture mode of a connection: absent means on. */
|
|
17
|
+
export declare function captureEnabled(config: Pick<ConnectorConfig, "capture"> | null | undefined): boolean;
|
|
14
18
|
export interface LorePaths {
|
|
15
19
|
home: string;
|
|
16
20
|
loreDirectory: string;
|
|
@@ -51,25 +55,33 @@ export interface ConnectorConfig {
|
|
|
51
55
|
token: string;
|
|
52
56
|
agents: ConfiguredAgentName[];
|
|
53
57
|
agentConfigPaths?: Partial<Record<ConfiguredAgentName, string[]>>;
|
|
58
|
+
/** Retrieval-only mode: "off" installs no turn-capture hooks and records no turns. Absent means on. */
|
|
59
|
+
capture?: "on" | "off";
|
|
54
60
|
connectedAt: string;
|
|
55
61
|
timeoutMs: number;
|
|
56
62
|
}
|
|
57
63
|
export declare function getLorePaths(home?: string, environment?: NodeJS.ProcessEnv, cwd?: string): LorePaths;
|
|
58
|
-
export declare function mergeLoreHooks(input: Record<string, unknown>, agent: CommandHookAgentName, paths: LorePaths): Record<string, unknown>;
|
|
64
|
+
export declare function mergeLoreHooks(input: Record<string, unknown>, agent: CommandHookAgentName, paths: LorePaths, capture?: boolean): Record<string, unknown>;
|
|
59
65
|
export declare function removeLoreHooks(input: Record<string, unknown>): Record<string, unknown>;
|
|
60
66
|
export declare function countLoreHooks(input: Record<string, unknown>): number;
|
|
61
67
|
export declare function mergeLoreCursorMcp(input: unknown, paths: LorePaths): Record<string, unknown>;
|
|
62
68
|
export declare function removeLoreCursorMcp(input: unknown): Record<string, unknown>;
|
|
63
|
-
|
|
69
|
+
/** The full Lore MCP server, run by this CLI so it shares the hooks' credentials and version. */
|
|
70
|
+
export declare function loreMcpServer(paths: LorePaths, agent: LoreMcpAgent): Record<string, unknown>;
|
|
71
|
+
/** Where each agent lists MCP servers, located from the hooks file Lore already manages. */
|
|
72
|
+
export declare function mcpConfigPath(agent: McpHostAgent, hooksPath: string): string;
|
|
73
|
+
export declare function mergeLoreMcp(input: unknown, agent: McpHostAgent, paths: LorePaths): Record<string, unknown>;
|
|
74
|
+
export declare function removeLoreMcp(input: unknown, agent: McpHostAgent): Record<string, unknown>;
|
|
75
|
+
export declare function mergeLoreCursorHooks(input: Record<string, unknown>, paths: LorePaths, capture?: boolean): Record<string, unknown>;
|
|
64
76
|
export declare function removeLoreCursorHooks(input: Record<string, unknown>): Record<string, unknown>;
|
|
65
77
|
export declare function countLoreCursorHooks(input: Record<string, unknown>): number;
|
|
66
|
-
export declare function mergeLoreCopilotCliHooks(input: Record<string, unknown>, paths: LorePaths): Record<string, unknown>;
|
|
78
|
+
export declare function mergeLoreCopilotCliHooks(input: Record<string, unknown>, paths: LorePaths, capture?: boolean): Record<string, unknown>;
|
|
67
79
|
export declare function removeLoreCopilotCliHooks(input: Record<string, unknown>): Record<string, unknown>;
|
|
68
80
|
export declare function countLoreCopilotCliHooks(input: Record<string, unknown>): number;
|
|
69
|
-
export declare function mergeLoreCopilotVscodeHooks(input: Record<string, unknown>, paths: LorePaths): Record<string, unknown>;
|
|
81
|
+
export declare function mergeLoreCopilotVscodeHooks(input: Record<string, unknown>, paths: LorePaths, capture?: boolean): Record<string, unknown>;
|
|
70
82
|
export declare function removeLoreCopilotVscodeHooks(input: Record<string, unknown>): Record<string, unknown>;
|
|
71
83
|
export declare function countLoreCopilotVscodeHooks(input: Record<string, unknown>): number;
|
|
72
|
-
export declare function mergeLorePolytokenHooks(input: unknown, paths: LorePaths): unknown[];
|
|
84
|
+
export declare function mergeLorePolytokenHooks(input: unknown, paths: LorePaths, capture?: boolean): unknown[];
|
|
73
85
|
export declare function removeLorePolytokenHooks(input: unknown): unknown[];
|
|
74
86
|
export declare function countLorePolytokenHooks(input: unknown): number;
|
|
75
87
|
export declare function mergeLoreOpenCodePlugin(input: Record<string, unknown>): Record<string, unknown>;
|
|
@@ -88,7 +100,28 @@ export interface AgentInstallation {
|
|
|
88
100
|
configPath: string;
|
|
89
101
|
}
|
|
90
102
|
export declare function t3CodeProviderInstallations(settings: unknown, paths: LorePaths): AgentInstallation[];
|
|
103
|
+
export interface RefreshAgentEntriesResult {
|
|
104
|
+
/** Every file the stored connection's agents own: hooks files and MCP configs. */
|
|
105
|
+
configFiles: string[];
|
|
106
|
+
changedFiles: string[];
|
|
107
|
+
backups: string[];
|
|
108
|
+
/** Skill files now at the current version, installed or already current. */
|
|
109
|
+
skillFiles: string[];
|
|
110
|
+
/** Lore agent definitions now at the current version. */
|
|
111
|
+
agentFiles: string[];
|
|
112
|
+
/** Skill or agent files left alone, with the reason; recording works without them. */
|
|
113
|
+
warnings: string[];
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Re-apply the Lore-owned hook and MCP entries and the `lore` skill for the
|
|
117
|
+
* agents recorded in the stored connection, for example after `lore update`
|
|
118
|
+
* replaced the binary. Nothing is authorized again and folder rules are
|
|
119
|
+
* untouched. Resolves to null when no connection is stored.
|
|
120
|
+
*/
|
|
121
|
+
export declare function refreshAgentEntries(paths?: LorePaths): Promise<RefreshAgentEntriesResult | null>;
|
|
91
122
|
export interface ConnectWithCredentialOptions extends CaptureScopeOptions {
|
|
123
|
+
/** false installs retrieval-only hooks; undefined keeps the saved capture mode. */
|
|
124
|
+
capture?: boolean;
|
|
92
125
|
connectionName?: string;
|
|
93
126
|
fallback?: string;
|
|
94
127
|
/** CLI setup opts in automatically; embedded callers can choose explicitly. */
|
|
@@ -101,14 +134,26 @@ export interface ConnectWithCredentialOptions extends CaptureScopeOptions {
|
|
|
101
134
|
dashboardUrl?: string;
|
|
102
135
|
token: string;
|
|
103
136
|
agents: readonly ConnectAgentName[];
|
|
137
|
+
/** The MCP-only agent set up by --agent generic; defaults to id "generic", read-only. */
|
|
138
|
+
genericAgent?: GenericMcpAgent;
|
|
104
139
|
timeoutMs?: number;
|
|
105
140
|
}
|
|
141
|
+
/** What an MCP-only agent needs pasted into its own settings. */
|
|
142
|
+
export interface GenericAgentSetup extends GenericMcpAgent {
|
|
143
|
+
mcpServers: ReturnType<typeof genericMcpServers>["mcpServers"];
|
|
144
|
+
instructions: string;
|
|
145
|
+
}
|
|
106
146
|
export interface ConnectResult {
|
|
107
147
|
capture: {
|
|
148
|
+
mode: "on" | "off";
|
|
108
149
|
folders: string[] | null;
|
|
109
150
|
excludedFolders: string[];
|
|
110
151
|
};
|
|
111
152
|
skillFiles: string[];
|
|
153
|
+
/** Lore agent definitions installed for the connected harnesses. */
|
|
154
|
+
agentFiles: string[];
|
|
155
|
+
/** Set by --agent generic: the entry and instructions to paste, capture always off. */
|
|
156
|
+
genericAgent?: GenericAgentSetup;
|
|
112
157
|
recoveryNotice?: string;
|
|
113
158
|
connected: true;
|
|
114
159
|
apiUrl: string;
|
|
@@ -148,6 +193,22 @@ export interface DoctorCheck {
|
|
|
148
193
|
status: "ok" | "warning" | "error";
|
|
149
194
|
detail: string;
|
|
150
195
|
}
|
|
196
|
+
/** The dashboard's live capture switches, read with the workspace repository policy. */
|
|
197
|
+
export interface CaptureSwitchStatus {
|
|
198
|
+
/** Which switch pauses capture; null when both are on or the policy was not read. */
|
|
199
|
+
pausedBy: CapturePause | null;
|
|
200
|
+
/** False when the policy could not be read; hooks then fail closed and record nothing. */
|
|
201
|
+
checked: boolean;
|
|
202
|
+
reason: string;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* The effective capture state for `lore capture status` and `lore status`:
|
|
206
|
+
* the machine's own choice, then the dashboard switch that pauses it, worded
|
|
207
|
+
* as `lore doctor` words it.
|
|
208
|
+
*/
|
|
209
|
+
export declare function captureSummary(capture: "on" | "off", switches?: CaptureSwitchStatus): string;
|
|
210
|
+
/** Retrieval-only mode and a paused switch are chosen configurations, never warnings. */
|
|
211
|
+
export declare function captureModeCheck(capture: "on" | "off", switches?: CaptureSwitchStatus): DoctorCheck;
|
|
151
212
|
/**
|
|
152
213
|
* Server-side queue health. Dead embedding jobs name the operator fix: once the
|
|
153
214
|
* provider is repaired, `lore embeddings repair` retries them without waiting
|
|
@@ -160,6 +221,18 @@ export declare function operationalMetricsCheck(metrics: OperationalMetricsRespo
|
|
|
160
221
|
* cannot help, and doctor prunes them after the retention window.
|
|
161
222
|
*/
|
|
162
223
|
export declare function durableOutboxCheck(outbox: ReliabilityStoreInspection["outbox"], pruned?: number): DoctorCheck;
|
|
224
|
+
interface CaptureCommandResult {
|
|
225
|
+
/** This machine's own choice. */
|
|
226
|
+
capture: "on" | "off";
|
|
227
|
+
/** The dashboard switch pausing a machine whose own choice is on; status only. */
|
|
228
|
+
pausedBy?: CapturePause | null;
|
|
229
|
+
changed: boolean;
|
|
230
|
+
configFiles: string[];
|
|
231
|
+
}
|
|
232
|
+
/** Switch retrieval-only mode and rewrite the agent hooks to match, without re-authorizing. */
|
|
233
|
+
export declare function setCaptureMode(capture: "on" | "off", paths?: LorePaths): Promise<CaptureCommandResult>;
|
|
234
|
+
/** MCP-only agents from `lore connect --agent generic`: their skills, and that nothing records them. */
|
|
235
|
+
export declare function genericAgentChecks(paths: LorePaths): Promise<DoctorCheck[]>;
|
|
163
236
|
export declare function runCli(args?: readonly string[]): Promise<void>;
|
|
164
237
|
export {};
|
|
165
238
|
//# 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":";AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|