@lore-co/cli 0.2.33 → 0.2.35
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 +17 -8
- package/dist/capture-scope.d.ts +8 -1
- package/dist/capture-scope.d.ts.map +1 -1
- package/dist/capture-scope.js +14 -2
- package/dist/capture-scope.js.map +1 -1
- package/dist/cli.d.ts +8 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +111 -19
- package/dist/cli.js.map +1 -1
- package/dist/connect-project.d.ts.map +1 -1
- package/dist/connect-project.js +3 -3
- package/dist/connect-project.js.map +1 -1
- package/dist/connections.d.ts +3 -0
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +20 -1
- package/dist/connections.js.map +1 -1
- package/dist/generated-assets.d.ts +5 -5
- package/dist/generated-assets.js +5 -5
- package/dist/generic-mcp.d.ts +4 -1
- package/dist/generic-mcp.d.ts.map +1 -1
- package/dist/generic-mcp.js +6 -2
- package/dist/generic-mcp.js.map +1 -1
- package/dist/mcp-config.d.ts +1 -1
- package/dist/mcp-config.d.ts.map +1 -1
- package/dist/mcp-config.js +6 -1
- package/dist/mcp-config.js.map +1 -1
- package/dist/runtime-redaction.d.ts.map +1 -1
- package/dist/runtime-redaction.js +53 -3
- package/dist/runtime-redaction.js.map +1 -1
- package/dist/runtime.d.ts +15 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +70 -9
- package/dist/runtime.js.map +1 -1
- package/dist/self-host.d.ts +2 -2
- package/dist/self-host.d.ts.map +1 -1
- package/dist/self-host.js +5 -4
- package/dist/self-host.js.map +1 -1
- package/dist/skills.d.ts +5 -0
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +18 -4
- package/dist/skills.js.map +1 -1
- package/dist/update.js +3 -3
- package/package.json +4 -4
package/dist/generic-mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generic-mcp.js","sourceRoot":"","sources":["../src/generic-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AACvC,MAAM,QAAQ,GAAG,8BAA8B,CAAC;AAWhD,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,0HAA0H,CAAC,CAAC;IAC9I,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"generic-mcp.js","sourceRoot":"","sources":["../src/generic-mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-config.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export declare const LORE_MCP_SERVER_NAME = "lore";
|
|
8
8
|
/** Agents whose hooks or plugin are paired with the Lore MCP server. */
|
|
9
|
-
export declare const MCP_HOST_AGENTS: readonly ["claude", "codex", "cursor", "copilot-cli", "copilot-vscode"];
|
|
9
|
+
export declare const MCP_HOST_AGENTS: readonly ["bob", "claude", "codex", "cursor", "copilot-cli", "copilot-vscode"];
|
|
10
10
|
export type McpHostAgent = (typeof MCP_HOST_AGENTS)[number];
|
|
11
11
|
/** Every host that runs the Lore MCP server; OpenCode registers it beside its plugin. */
|
|
12
12
|
export type LoreMcpAgent = McpHostAgent | "opencode";
|
package/dist/mcp-config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,SAAS,CAAC;AAE3C,wEAAwE;AACxE,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,SAAS,CAAC;AAE3C,wEAAwE;AACxE,eAAO,MAAM,eAAe,gFAAiF,CAAC;AAC9G,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5D,yFAAyF;AACzF,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;AAiBrD;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAiD,CAAC;AAEvH;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmB5H;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGvD;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI7F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAU3H;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI5F;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAE5D;AAED,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOxF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGzD;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQ7H;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI9F;AA0DD,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAOtF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAKnC"}
|
package/dist/mcp-config.js
CHANGED
|
@@ -8,7 +8,7 @@ import { LORE_DISABLE } from "./directory-policy.js";
|
|
|
8
8
|
*/
|
|
9
9
|
export const LORE_MCP_SERVER_NAME = "lore";
|
|
10
10
|
/** Agents whose hooks or plugin are paired with the Lore MCP server. */
|
|
11
|
-
export const MCP_HOST_AGENTS = ["claude", "codex", "cursor", "copilot-cli", "copilot-vscode"];
|
|
11
|
+
export const MCP_HOST_AGENTS = ["bob", "claude", "codex", "cursor", "copilot-cli", "copilot-vscode"];
|
|
12
12
|
const CODEX_MCP_START = "# >>> Lore MCP server >>>";
|
|
13
13
|
const CODEX_MCP_END = "# <<< Lore MCP server <<<";
|
|
14
14
|
function isObject(value) {
|
|
@@ -53,6 +53,11 @@ export function loreMcpServerEntry(invocation, home, agent) {
|
|
|
53
53
|
// Copilot CLI calls stdio servers "local" and enables tools by name.
|
|
54
54
|
if (agent === "copilot-cli")
|
|
55
55
|
return { ...entry, type: "local", tools: ["*"] };
|
|
56
|
+
// IBM Bob documents command, args, env and cwd for stdio servers, no type.
|
|
57
|
+
if (agent === "bob") {
|
|
58
|
+
const { type: _type, ...bobEntry } = entry;
|
|
59
|
+
return bobEntry;
|
|
60
|
+
}
|
|
56
61
|
return entry;
|
|
57
62
|
}
|
|
58
63
|
export function isLoreMcpServer(value) {
|
package/dist/mcp-config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAE3C,wEAAwE;AACxE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-redaction.d.ts","sourceRoot":"","sources":["../src/runtime-redaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-redaction.d.ts","sourceRoot":"","sources":["../src/runtime-redaction.ts"],"names":[],"mappings":"AA+GA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4FlD"}
|
|
@@ -8,14 +8,56 @@ const NON_SECRET_TOKEN_VALUES = new Set([
|
|
|
8
8
|
"required",
|
|
9
9
|
"undefined",
|
|
10
10
|
]);
|
|
11
|
+
function isRedactionMarker(value) {
|
|
12
|
+
return /^\[REDACTED(?::[A-Z_]+|_[A-Z_]+)?\][.,!?]*$/u.test(value);
|
|
13
|
+
}
|
|
11
14
|
function redactedCredential(value) {
|
|
12
15
|
// Preserve markers from earlier token rules and repeated redaction passes.
|
|
13
|
-
if (
|
|
16
|
+
if (isRedactionMarker(value)) {
|
|
14
17
|
return value;
|
|
15
18
|
}
|
|
16
19
|
const trailing = /[.,!?]+$/u.exec(value)?.[0] ?? "";
|
|
17
20
|
return `[REDACTED:CREDENTIAL]${trailing}`;
|
|
18
21
|
}
|
|
22
|
+
function shannonEntropy(value) {
|
|
23
|
+
const counts = new Map();
|
|
24
|
+
for (const character of value)
|
|
25
|
+
counts.set(character, (counts.get(character) ?? 0) + 1);
|
|
26
|
+
let entropy = 0;
|
|
27
|
+
for (const count of counts.values()) {
|
|
28
|
+
const share = count / value.length;
|
|
29
|
+
entropy -= share * Math.log2(share);
|
|
30
|
+
}
|
|
31
|
+
return entropy;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* An unlabelled run that looks machine-generated: a Vault token, an unseal or
|
|
35
|
+
* recovery key, a cloud secret key. Identifiers, paths, hashes, and IDs share the
|
|
36
|
+
* alphabet, so a run must mix both cases with at least two digits, be mostly
|
|
37
|
+
* not readable words, and be random enough. Hex hashes and UUIDs have one case;
|
|
38
|
+
* `prefix_` IDs (`toolu_…`, `ses_…`) and integrity strings (`sha512-…`) are kept.
|
|
39
|
+
* The server applies the same rule to every request value, and a signed
|
|
40
|
+
* delivery only verifies when this runtime redacts each value the same way.
|
|
41
|
+
*/
|
|
42
|
+
function looksRandomSecret(value) {
|
|
43
|
+
if (/^sha(?:1|256|384|512)-/iu.test(value) || /^[a-z]{2,8}_[A-Za-z0-9]/u.test(value))
|
|
44
|
+
return false;
|
|
45
|
+
if (!/[a-z]/u.test(value) || !/[A-Z]/u.test(value) || (value.match(/[0-9]/gu) ?? []).length < 2)
|
|
46
|
+
return false;
|
|
47
|
+
// Paths and dash or underscore separated names are made of words, hex IDs, and numbers.
|
|
48
|
+
const parts = value.split(/[/_-]/u).filter(Boolean);
|
|
49
|
+
const word = (part) => /^[A-Za-z][a-z]{2,}$|^[A-Z]{3,}$|^[a-z]{3,}$/u.test(part);
|
|
50
|
+
if (parts.length > 1 && (parts.every(part => word(part) || /^(?:[0-9a-f]+|[0-9A-F]+|v?\d+)$/u.test(part))
|
|
51
|
+
|| parts.filter(word).length >= Math.max(1, parts.length / 3)))
|
|
52
|
+
return false;
|
|
53
|
+
const wordCharacters = (value.match(/[A-Za-z][a-z]{3,}/gu) ?? []).join("").length;
|
|
54
|
+
if (wordCharacters / value.length > 0.5)
|
|
55
|
+
return false;
|
|
56
|
+
return shannonEntropy(value) >= 3.7;
|
|
57
|
+
}
|
|
58
|
+
// Names whose value is secret in key/value output, such as `vault kv get`, `vault operator init`, or a .env listing.
|
|
59
|
+
const SECRET_FIELD_NAME = "(?:initial[ _-]?)?root[ _-]?token|(?:unseal|recovery)[ _-]?key(?:[ _-]?\\d+)?|secret[ _-]?(?:access[ _-]?)?key|api[ _-]?key|access[ _-]?token|auth[ _-]?token|client[ _-]?secret|private[ _-]?key|token|secret|password|passwd";
|
|
60
|
+
const SECRET_FIELD_PATTERN = new RegExp(`^([ \\t]*)(${SECRET_FIELD_NAME})([ \\t]{2,}|\\t|[ \\t]*:[ \\t]*)(\\S{4,})[ \\t]*$`, "gimu");
|
|
19
61
|
// This standalone runtime cannot import @lore-co/core after it is copied to
|
|
20
62
|
// ~/.lore. Keep these rules aligned with core/redaction.ts through parity tests.
|
|
21
63
|
// Match invisible characters inside tokens without changing ordinary text;
|
|
@@ -45,7 +87,7 @@ export function redactSecrets(text) {
|
|
|
45
87
|
.replace(/\b((?:postgres(?:ql)?|mysql|mariadb|mongodb(?:\+srv)?|redis|amqps?):\/\/[^:\s/@]+:)[^@\s/]+@/giu, (_match, prefix) => `${prefix}[REDACTED:PASSWORD]@`)
|
|
46
88
|
.replace(JWT_TOKEN_PATTERN, "[REDACTED:JWT]")
|
|
47
89
|
.replace(PROVIDER_TOKEN_PATTERN, "[REDACTED:API_KEY]")
|
|
48
|
-
.replace(/(["']?)\b((?:(?:[A-Za-z][A-Za-z0-9]*[_-])*(?:api[_-]?key|access[_-]?token|auth[_-]?token|client[_-]?secret|private[_-]?key|connection[_-]?(?:string|url)|database[_-]?url|token|secret|password|passwd|credential)|[A-Za-z][A-Za-z0-9]*(?:token|secret|password|passwd|credential|apiKey|privateKey|connectionString|databaseUrl)))\b\1(\s*[:=]\s*)(["']?)([^\s,"'};]{4,})\4/giu, (_match, keyQuote, name, separator, valueQuote, value) => `${keyQuote}${name}${keyQuote}${separator}${valueQuote}${redactedCredential(value)}${valueQuote}`)
|
|
90
|
+
.replace(/(["']?)\b((?:(?:[A-Za-z][A-Za-z0-9]*[_-])*(?:api[_-]?key|secret[_-]?(?:access[_-]?)?key|access[_-]?token|auth[_-]?token|client[_-]?secret|private[_-]?key|connection[_-]?(?:string|url)|database[_-]?url|token|secret|password|passwd|credential)|[A-Za-z][A-Za-z0-9]*(?:token|secret|password|passwd|credential|apiKey|privateKey|connectionString|databaseUrl)))\b\1(\s*[:=]\s*)(["']?)([^\s,"'};]{4,})\4/giu, (_match, keyQuote, name, separator, valueQuote, value) => `${keyQuote}${name}${keyQuote}${separator}${valueQuote}${redactedCredential(value)}${valueQuote}`)
|
|
49
91
|
.replace(/(["']?)\b(api[ _-]?key|access[ _-]?token|auth[ _-]?token|client[ _-]?secret|private[ _-]?key|verification[ _-]?token|password|passwd|secret|credential)\b\1(\s+(?:is|was|equals?)\s+)(["']?)([^\s,"'};]{4,})\4/giu, (_match, keyQuote, name, separator, valueQuote, value) => `${keyQuote}${name}${keyQuote}${separator}${valueQuote}${redactedCredential(value)}${valueQuote}`)
|
|
50
92
|
.replace(/\b(token|credential)\b(\s+(?:is|was|equals?)\s+)(["']?)([^\s,"'};]{8,})\3/giu, (match, name, separator, valueQuote, value) => {
|
|
51
93
|
const normalized = value
|
|
@@ -64,6 +106,14 @@ export function redactSecrets(text) {
|
|
|
64
106
|
? `${name}${separator}${valueQuote}${redactedCredential(value)}${valueQuote}`
|
|
65
107
|
: match;
|
|
66
108
|
})
|
|
67
|
-
.replace(
|
|
109
|
+
.replace(
|
|
110
|
+
// A secret field in a key/value table or listing: `password s3cr3t`, `Unseal Key 1: …`.
|
|
111
|
+
SECRET_FIELD_PATTERN, (match, indent, name, separator, value) => isRedactionMarker(value)
|
|
112
|
+
? match
|
|
113
|
+
: `${indent}${name}${separator}${redactedCredential(value)}`)
|
|
114
|
+
.replace(/\b((?:set-)?cookie\s*:\s*)[^\r\n]+/giu, (_match, prefix) => `${prefix}[REDACTED:AUTHORIZATION]`)
|
|
115
|
+
.replace(
|
|
116
|
+
// Last, so labelled and known formats keep their own markers.
|
|
117
|
+
/(?<![A-Za-z0-9+/_-])[A-Za-z0-9+/_-]{24,}={0,2}(?![A-Za-z0-9+/=_-])/gu, (match) => (looksRandomSecret(match) ? "[REDACTED:SECRET]" : match));
|
|
68
118
|
}
|
|
69
119
|
//# sourceMappingURL=runtime-redaction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-redaction.js","sourceRoot":"","sources":["../src/runtime-redaction.ts"],"names":[],"mappings":"AAAA,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,WAAW;IACX,YAAY;IACZ,WAAW;IACX,UAAU;IACV,aAAa;IACb,UAAU;IACV,UAAU;IACV,WAAW;CACZ,CAAC,CAAC;AAEH,SAAS,kBAAkB,CAAC,KAAa;IACvC,2EAA2E;IAC3E,IAAI,
|
|
1
|
+
{"version":3,"file":"runtime-redaction.js","sourceRoot":"","sources":["../src/runtime-redaction.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { redactSecrets } from "./runtime-redaction.js";
|
|
2
2
|
import { RECAP_REMINDER } from "./directory-policy.js";
|
|
3
|
-
export declare const COMMAND_HOOK_AGENT_NAMES: readonly ["codex", "claude", "copilot-cli", "copilot-vscode", "cursor", "polytoken"];
|
|
3
|
+
export declare const COMMAND_HOOK_AGENT_NAMES: readonly ["bob", "codex", "claude", "copilot-cli", "copilot-vscode", "cursor", "polytoken"];
|
|
4
4
|
export type CommandHookAgentName = (typeof COMMAND_HOOK_AGENT_NAMES)[number];
|
|
5
5
|
/** @deprecated Use CommandHookAgentName for native command-hook integrations. */
|
|
6
6
|
export type AgentName = CommandHookAgentName;
|
|
@@ -149,5 +149,19 @@ export declare function handleHookEvent(value: unknown, agent: CommandHookAgentN
|
|
|
149
149
|
export { RECAP_REMINDER };
|
|
150
150
|
export declare function getCursorContext(sessionId: string, prompt: string, options?: HookRuntimeOptions): Promise<string>;
|
|
151
151
|
export declare function completeCursorResponse(sessionId: string, response: string, options?: HookRuntimeOptions): Promise<void>;
|
|
152
|
+
/**
|
|
153
|
+
* Whether Lore's Copilot CLI hooks already serve this hook invocation. The
|
|
154
|
+
* Copilot runtime (the `copilot` terminal CLI, and the agent host VS Code
|
|
155
|
+
* 1.143+ runs Copilot chat through) loads both `$COPILOT_HOME/hooks/*.json`
|
|
156
|
+
* and the repository's `.github/hooks/*.json`, so on a machine where
|
|
157
|
+
* `lore connect --agent copilot-cli` installed the user-level hooks, a
|
|
158
|
+
* committed `lore-vscode.json` would invoke Lore a second time for every
|
|
159
|
+
* prompt, tool call, and reply: two context deliveries and two recorded
|
|
160
|
+
* sessions with different agent names. The repository hook stands down
|
|
161
|
+
* instead. The runtime marks its hook processes with COPILOT_HOOK_DIR,
|
|
162
|
+
* COPILOT_CLI and COPILOT_HOME; without them (another host runs the
|
|
163
|
+
* repository file) the user-level hooks do not run and Lore proceeds.
|
|
164
|
+
*/
|
|
165
|
+
export declare function copilotCliHooksServeHost(environment: NodeJS.ProcessEnv, home?: string): Promise<boolean>;
|
|
152
166
|
export declare function runHook(args?: readonly string[]): Promise<void>;
|
|
153
167
|
//# sourceMappingURL=runtime.d.ts.map
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AA6DvD,OAAO,EAAsI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAS3L,eAAO,MAAM,wBAAwB,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.js
CHANGED
|
@@ -27,6 +27,7 @@ import { capturePendingImages, enqueueEventImages, flushImageAttachment, hostMes
|
|
|
27
27
|
import { guardRepositoryOverride, guardRuleConflict, guardRuleContent, guardToolTrigger, isGuardRule, supportedGuardRule, guardEmergencyCommand, emergencyOverrideApplies } from "@lore-co/core/guard-evaluation";
|
|
28
28
|
const IS_STANDALONE_RUNTIME = typeof __LORE_STANDALONE__ === "boolean" && __LORE_STANDALONE__;
|
|
29
29
|
export const COMMAND_HOOK_AGENT_NAMES = [
|
|
30
|
+
"bob",
|
|
30
31
|
"codex",
|
|
31
32
|
"claude",
|
|
32
33
|
"copilot-cli",
|
|
@@ -132,6 +133,19 @@ function normalizeHookInput(input, agent, environment) {
|
|
|
132
133
|
(agent === "polytoken"
|
|
133
134
|
? stringField(environment.POLYTOKEN_HOOK_EVENT)
|
|
134
135
|
: undefined);
|
|
136
|
+
if (agent === "bob") {
|
|
137
|
+
// Bob's Stop carries the last assistant message as text, as content
|
|
138
|
+
// blocks, or as null when the turn ended without one.
|
|
139
|
+
const message = input.last_assistant_message;
|
|
140
|
+
const text = Array.isArray(message)
|
|
141
|
+
? message.flatMap((block) => isObject(block) && block.type === "text" && typeof block.text === "string" ? [block.text] : []).join("\n")
|
|
142
|
+
: message;
|
|
143
|
+
return {
|
|
144
|
+
input: { ...input, ...(typeof text === "string" && text.trim() !== "" ? { last_assistant_message: text } : { last_assistant_message: undefined }) },
|
|
145
|
+
eventName: rawEventName,
|
|
146
|
+
sessionId: stringField(input.session_id),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
135
149
|
if (agent !== "cursor" &&
|
|
136
150
|
agent !== "polytoken" &&
|
|
137
151
|
agent !== "copilot-cli") {
|
|
@@ -284,10 +298,14 @@ function validHookInput(input, agent, eventName) {
|
|
|
284
298
|
eventName === "AssistantResponse" ||
|
|
285
299
|
eventName === "PreToolUse" ||
|
|
286
300
|
eventName === "SessionEnd"
|
|
287
|
-
:
|
|
288
|
-
eventName === "
|
|
289
|
-
|
|
290
|
-
|
|
301
|
+
: agent === "bob"
|
|
302
|
+
? eventName === "UserPromptSubmit" ||
|
|
303
|
+
eventName === "PreToolUse" ||
|
|
304
|
+
eventName === "Stop"
|
|
305
|
+
: eventName === "UserPromptSubmit" ||
|
|
306
|
+
eventName === "PreToolUse" ||
|
|
307
|
+
eventName === "Stop" ||
|
|
308
|
+
eventName === "SessionEnd";
|
|
291
309
|
if (!recognized) {
|
|
292
310
|
return false;
|
|
293
311
|
}
|
|
@@ -299,6 +317,9 @@ function validHookInput(input, agent, eventName) {
|
|
|
299
317
|
// transcript or invent assistant text; standalone prompt capture still works.
|
|
300
318
|
if (agent === "copilot-cli" && eventName === "Stop")
|
|
301
319
|
return true;
|
|
320
|
+
// Bob's Stop may carry no assistant text (null); there is then nothing to pair.
|
|
321
|
+
if (agent === "bob" && eventName === "Stop")
|
|
322
|
+
return true;
|
|
302
323
|
return stringField(input.last_assistant_message) !== undefined;
|
|
303
324
|
}
|
|
304
325
|
if (eventName === "PreToolUse") {
|
|
@@ -1782,7 +1803,7 @@ const GUARD_MODE_TTL_MS = 5 * 60_000;
|
|
|
1782
1803
|
const GUARD_KEY_COOLDOWN_MS = 15 * 60_000;
|
|
1783
1804
|
const GUARD_MAX_CACHED_KEYS = 200;
|
|
1784
1805
|
const GUARD_TIMEOUT_MS = 4_000;
|
|
1785
|
-
const GUARD_SHELL_TOOLS = new Set(["Bash", "bash", "Shell", "shell", "exec_command", "shell_command", "run_terminal_cmd", "shell_exec", "shell_monitor"]);
|
|
1806
|
+
const GUARD_SHELL_TOOLS = new Set(["Bash", "bash", "Shell", "shell", "exec_command", "shell_command", "run_terminal_cmd", "shell_exec", "shell_monitor", "execute_command"]);
|
|
1786
1807
|
/**
|
|
1787
1808
|
* Decides whether a tool call is a meaningful action boundary. File edits
|
|
1788
1809
|
* always qualify; shell commands qualify only when they look high-impact
|
|
@@ -2139,8 +2160,9 @@ async function handleGuardEvent(input, agent, config, sessionId, options, now, c
|
|
|
2139
2160
|
return {
|
|
2140
2161
|
hookSpecificOutput: {
|
|
2141
2162
|
hookEventName: "PreToolUse",
|
|
2142
|
-
// Codex parses `ask` as unsupported and then continues the tool call
|
|
2143
|
-
|
|
2163
|
+
// Codex parses `ask` as unsupported and then continues the tool call;
|
|
2164
|
+
// Bob has no ask verdict either and runs the tool on anything but deny.
|
|
2165
|
+
permissionDecision: agent === "codex" || agent === "bob" || result.offline || result.policyUnavailable ? "deny" : "ask",
|
|
2144
2166
|
permissionDecisionReason: reason,
|
|
2145
2167
|
},
|
|
2146
2168
|
};
|
|
@@ -2347,7 +2369,7 @@ export async function handleHookEvent(value, agent, options = {}) {
|
|
|
2347
2369
|
}
|
|
2348
2370
|
export { RECAP_REMINDER };
|
|
2349
2371
|
/** Hosts where `lore connect` installs the recap skill and this runtime delivers context. */
|
|
2350
|
-
const RECAP_HOSTS = new Set(["claude", "codex", "copilot-cli", "copilot-vscode", "cursor"]);
|
|
2372
|
+
const RECAP_HOSTS = new Set(["bob", "claude", "codex", "copilot-cli", "copilot-vscode", "cursor"]);
|
|
2351
2373
|
function recapReminderApplies(agent, capture, config) {
|
|
2352
2374
|
return !capture && config.recapReminder !== false && RECAP_HOSTS.has(agent);
|
|
2353
2375
|
}
|
|
@@ -2773,6 +2795,43 @@ async function finishHookInvocation(tracker, outcome) {
|
|
|
2773
2795
|
}
|
|
2774
2796
|
await writeInvocationCompletionBounded(tracker.workspaceKey, tracker.attempt, outcome, { home: tracker.home, standalone: IS_STANDALONE_RUNTIME, ...(tracker.connectionId ? { connectionId: tracker.connectionId } : {}) }).catch(() => false);
|
|
2775
2797
|
}
|
|
2798
|
+
/**
|
|
2799
|
+
* Whether Lore's Copilot CLI hooks already serve this hook invocation. The
|
|
2800
|
+
* Copilot runtime (the `copilot` terminal CLI, and the agent host VS Code
|
|
2801
|
+
* 1.143+ runs Copilot chat through) loads both `$COPILOT_HOME/hooks/*.json`
|
|
2802
|
+
* and the repository's `.github/hooks/*.json`, so on a machine where
|
|
2803
|
+
* `lore connect --agent copilot-cli` installed the user-level hooks, a
|
|
2804
|
+
* committed `lore-vscode.json` would invoke Lore a second time for every
|
|
2805
|
+
* prompt, tool call, and reply: two context deliveries and two recorded
|
|
2806
|
+
* sessions with different agent names. The repository hook stands down
|
|
2807
|
+
* instead. The runtime marks its hook processes with COPILOT_HOOK_DIR,
|
|
2808
|
+
* COPILOT_CLI and COPILOT_HOME; without them (another host runs the
|
|
2809
|
+
* repository file) the user-level hooks do not run and Lore proceeds.
|
|
2810
|
+
*/
|
|
2811
|
+
export async function copilotCliHooksServeHost(environment, home) {
|
|
2812
|
+
const runtimeHost = environment.COPILOT_HOOK_DIR !== undefined ||
|
|
2813
|
+
environment.COPILOT_CLI !== undefined ||
|
|
2814
|
+
environment.COPILOT_HOME !== undefined;
|
|
2815
|
+
if (!runtimeHost)
|
|
2816
|
+
return false;
|
|
2817
|
+
const copilotHome = environment.COPILOT_HOME?.trim() || resolve(homeDirectory(home), ".copilot");
|
|
2818
|
+
try {
|
|
2819
|
+
const parsed = JSON.parse(await readFile(resolve(copilotHome, "hooks", "lore.json"), "utf8"));
|
|
2820
|
+
const hooks = isObject(parsed) && isObject(parsed.hooks) ? parsed.hooks : {};
|
|
2821
|
+
return Object.values(hooks).some((entries) => Array.isArray(entries) &&
|
|
2822
|
+
entries.some((entry) => {
|
|
2823
|
+
if (!isObject(entry))
|
|
2824
|
+
return false;
|
|
2825
|
+
const command = [entry.bash, entry.powershell, entry.command].find((value) => typeof value === "string");
|
|
2826
|
+
return (command !== undefined &&
|
|
2827
|
+
/(?:^|\s)--agent(?:=|\s+)copilot-cli(?:\s|$)/u.test(command) &&
|
|
2828
|
+
/(?:^|\s)--owner(?:=|\s+)lore(?:\s|$)/u.test(command));
|
|
2829
|
+
}));
|
|
2830
|
+
}
|
|
2831
|
+
catch {
|
|
2832
|
+
return false;
|
|
2833
|
+
}
|
|
2834
|
+
}
|
|
2776
2835
|
export async function runHook(args = process.argv.slice(2)) {
|
|
2777
2836
|
const agent = parseAgent(args);
|
|
2778
2837
|
// Devin imports Claude hook files. Its own bridge provides the correct identity.
|
|
@@ -2781,7 +2840,9 @@ export async function runHook(args = process.argv.slice(2)) {
|
|
|
2781
2840
|
if (agent === null) {
|
|
2782
2841
|
return;
|
|
2783
2842
|
}
|
|
2784
|
-
if (loreDisabled(process.env)
|
|
2843
|
+
if (loreDisabled(process.env) ||
|
|
2844
|
+
// The Copilot CLI hooks on this machine already handle this VS Code session.
|
|
2845
|
+
(agent === "copilot-vscode" && await copilotCliHooksServeHost(process.env))) {
|
|
2785
2846
|
// Nothing is read, sent, or written, not even invocation health. Drain the
|
|
2786
2847
|
// payload so the host never sees a broken pipe, then exit 0 with no output.
|
|
2787
2848
|
try {
|