kirograph 1.0.0 → 1.2.1
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 +4 -2
- package/dist/architecture/manifest/python.js +2 -2
- package/dist/architecture/manifest/python.js.map +2 -2
- package/dist/bin/commands/help.js +3 -1
- package/dist/bin/commands/help.js.map +2 -2
- package/dist/bin/commands/memory.js +29 -9
- package/dist/bin/commands/memory.js.map +2 -2
- package/dist/bin/commands/reachability.js +7 -2
- package/dist/bin/commands/reachability.js.map +2 -2
- package/dist/bin/commands/vulns.js +16 -1
- package/dist/bin/commands/vulns.js.map +2 -2
- package/dist/bin/commands/wiki.js +59 -2
- package/dist/bin/commands/wiki.js.map +2 -2
- package/dist/bin/installer/steering.js +9 -0
- package/dist/bin/installer/steering.js.map +2 -2
- package/dist/bin/kirograph.js +1 -1
- package/dist/config.js +12 -0
- package/dist/config.js.map +2 -2
- package/dist/db/memory-schema.sql +2 -1
- package/dist/extraction/extractor.js +46 -41
- package/dist/extraction/extractor.js.map +2 -2
- package/dist/extraction/notebook.js +15 -7
- package/dist/extraction/notebook.js.map +2 -2
- package/dist/jev/client.js +99 -0
- package/dist/jev/client.js.map +7 -0
- package/dist/jev/types.js +17 -0
- package/dist/jev/types.js.map +7 -0
- package/dist/mcp/handlers/memory.js +15 -8
- package/dist/mcp/handlers/memory.js.map +2 -2
- package/dist/mcp/handlers/security.js +5 -3
- package/dist/mcp/handlers/security.js.map +2 -2
- package/dist/mcp/handlers/wiki.js +4 -2
- package/dist/mcp/handlers/wiki.js.map +2 -2
- package/dist/mcp/tools.js +3 -2
- package/dist/mcp/tools.js.map +2 -2
- package/dist/memory/database.js +17 -4
- package/dist/memory/database.js.map +2 -2
- package/dist/memory/index.js +31 -2
- package/dist/memory/index.js.map +3 -3
- package/dist/memory/relation-jev.js +59 -0
- package/dist/memory/relation-jev.js.map +7 -0
- package/dist/memory/schema.js +92 -0
- package/dist/memory/schema.js.map +7 -0
- package/dist/memory/types.js.map +1 -1
- package/dist/patterns/loader.js +2 -146
- package/dist/patterns/loader.js.map +3 -3
- package/dist/security/auth-detection-jev.js +47 -0
- package/dist/security/auth-detection-jev.js.map +7 -0
- package/dist/security/manifest/adapter.js +17 -3
- package/dist/security/manifest/adapter.js.map +3 -3
- package/dist/security/manifest/plugins/cargo.js +23 -0
- package/dist/security/manifest/plugins/cargo.js.map +2 -2
- package/dist/security/manifest/plugins/composer.js +12 -0
- package/dist/security/manifest/plugins/composer.js.map +2 -2
- package/dist/security/manifest/plugins/gradle.js +12 -0
- package/dist/security/manifest/plugins/gradle.js.map +2 -2
- package/dist/security/manifest/plugins/hex.js +12 -0
- package/dist/security/manifest/plugins/hex.js.map +2 -2
- package/dist/security/manifest/plugins/maven.js +101 -4
- package/dist/security/manifest/plugins/maven.js.map +2 -2
- package/dist/security/manifest/plugins/npm.js +117 -2
- package/dist/security/manifest/plugins/npm.js.map +2 -2
- package/dist/security/manifest/plugins/nuget.js +13 -0
- package/dist/security/manifest/plugins/nuget.js.map +2 -2
- package/dist/security/manifest/plugins/pubspec.js +12 -0
- package/dist/security/manifest/plugins/pubspec.js.map +2 -2
- package/dist/security/manifest/plugins/pyproject.js +12 -0
- package/dist/security/manifest/plugins/pyproject.js.map +2 -2
- package/dist/security/manifest/plugins/rubygems.js +12 -0
- package/dist/security/manifest/plugins/rubygems.js.map +2 -2
- package/dist/security/pipeline.js +1 -1
- package/dist/security/pipeline.js.map +2 -2
- package/dist/security/reachability.js +54 -5
- package/dist/security/reachability.js.map +3 -3
- package/dist/security/types.js.map +1 -1
- package/dist/security/vuln/client.js +45 -1
- package/dist/security/vuln/client.js.map +2 -2
- package/dist/security/vuln/osv-adapter.js +45 -1
- package/dist/security/vuln/osv-adapter.js.map +2 -2
- package/dist/shared/json-schema.js +136 -0
- package/dist/shared/json-schema.js.map +7 -0
- package/dist/shared/yaml.js +174 -0
- package/dist/shared/yaml.js.map +7 -0
- package/dist/wiki/contradiction-jev.js +49 -0
- package/dist/wiki/contradiction-jev.js.map +7 -0
- package/dist/wiki/index.js +16 -1
- package/dist/wiki/index.js.map +2 -2
- package/dist/wiki/ingest.js +2 -0
- package/dist/wiki/ingest.js.map +2 -2
- package/dist/wiki/links.js +53 -0
- package/dist/wiki/links.js.map +7 -0
- package/dist/wiki/lint.js +17 -7
- package/dist/wiki/lint.js.map +2 -2
- package/dist/wiki/rename.js +103 -0
- package/dist/wiki/rename.js.map +7 -0
- package/dist/wiki/typed-pages.js +67 -0
- package/dist/wiki/typed-pages.js.map +7 -0
- package/dist/wiki/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var client_exports = {};
|
|
20
|
+
__export(client_exports, {
|
|
21
|
+
JevClient: () => JevClient,
|
|
22
|
+
JevError: () => JevError,
|
|
23
|
+
createJevClientFromConfig: () => createJevClientFromConfig
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(client_exports);
|
|
26
|
+
const DEFAULT_BASE_URL = "https://api.typesafe.ai";
|
|
27
|
+
const DEFAULT_MODEL = "jev-latest";
|
|
28
|
+
const DEFAULT_TIMEOUT_MS = 15e3;
|
|
29
|
+
class JevError extends Error {
|
|
30
|
+
constructor(message, status) {
|
|
31
|
+
super(message);
|
|
32
|
+
this.status = status;
|
|
33
|
+
this.name = "JevError";
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
class JevClient {
|
|
37
|
+
constructor(opts) {
|
|
38
|
+
if (!opts.apiKey) {
|
|
39
|
+
throw new JevError("jev API key is required");
|
|
40
|
+
}
|
|
41
|
+
this.apiKey = opts.apiKey;
|
|
42
|
+
this.baseUrl = (opts.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, "");
|
|
43
|
+
this.model = opts.model ?? DEFAULT_MODEL;
|
|
44
|
+
this.timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Ask one or more typed questions about a piece of state in a single
|
|
48
|
+
* request — the API evaluates them in parallel, so callers should batch
|
|
49
|
+
* multiple questions about the same state rather than issuing separate calls.
|
|
50
|
+
*/
|
|
51
|
+
async ask(state, questions) {
|
|
52
|
+
const controller = new AbortController();
|
|
53
|
+
const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
54
|
+
let res;
|
|
55
|
+
try {
|
|
56
|
+
res = await fetch(`${this.baseUrl}/v1/systemone`, {
|
|
57
|
+
method: "POST",
|
|
58
|
+
headers: {
|
|
59
|
+
"Authorization": `Bearer ${this.apiKey}`,
|
|
60
|
+
"Content-Type": "application/json"
|
|
61
|
+
},
|
|
62
|
+
body: JSON.stringify({ state, model: this.model, questions }),
|
|
63
|
+
signal: controller.signal
|
|
64
|
+
});
|
|
65
|
+
} catch (err) {
|
|
66
|
+
if (err instanceof Error && err.name === "AbortError") {
|
|
67
|
+
throw new JevError(`jev request timed out after ${this.timeoutMs}ms`);
|
|
68
|
+
}
|
|
69
|
+
throw new JevError(`jev request failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
70
|
+
} finally {
|
|
71
|
+
clearTimeout(timeout);
|
|
72
|
+
}
|
|
73
|
+
if (!res.ok) {
|
|
74
|
+
let detail = "";
|
|
75
|
+
try {
|
|
76
|
+
detail = await res.text();
|
|
77
|
+
} catch {
|
|
78
|
+
}
|
|
79
|
+
throw new JevError(`jev request failed (${res.status})${detail ? `: ${detail}` : ""}`, res.status);
|
|
80
|
+
}
|
|
81
|
+
return await res.json();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function createJevClientFromConfig(config) {
|
|
85
|
+
const apiKey = config.jevApiKey || process.env.JEV_API_KEY;
|
|
86
|
+
if (!apiKey) {
|
|
87
|
+
throw new JevError(
|
|
88
|
+
'jev API key not set \u2014 set the JEV_API_KEY environment variable, or "jevApiKey" in .kirograph/config.json'
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
return new JevClient({ apiKey, baseUrl: config.jevBaseUrl, model: config.jevModel });
|
|
92
|
+
}
|
|
93
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
94
|
+
0 && (module.exports = {
|
|
95
|
+
JevClient,
|
|
96
|
+
JevError,
|
|
97
|
+
createJevClientFromConfig
|
|
98
|
+
});
|
|
99
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/jev/client.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * KiroGraph \u2014 jev (TypeSafe System One) client\n *\n * Thin HTTP client for https://docs.typesafe.ai's fast typed-classification\n * model. Used by opt-in \"jev mode\" toggles across the codebase (memory\n * relation judging, wiki contradiction detection, attack-surface auth\n * detection) as a cheaper/faster alternative to delegating a narrow\n * classification decision to a full agent turn.\n */\nimport type { JevQuestion, JevResponse } from './types';\n\nconst DEFAULT_BASE_URL = 'https://api.typesafe.ai';\nconst DEFAULT_MODEL = 'jev-latest';\nconst DEFAULT_TIMEOUT_MS = 15000;\n\nexport class JevError extends Error {\n constructor(message: string, public readonly status?: number) {\n super(message);\n this.name = 'JevError';\n }\n}\n\nexport interface JevClientOptions {\n apiKey: string;\n /** Override for testing / self-hosted deployments. Default: https://api.typesafe.ai */\n baseUrl?: string;\n /** Default: jev-latest */\n model?: string;\n timeoutMs?: number;\n}\n\nexport class JevClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly model: string;\n private readonly timeoutMs: number;\n\n constructor(opts: JevClientOptions) {\n if (!opts.apiKey) {\n throw new JevError('jev API key is required');\n }\n this.apiKey = opts.apiKey;\n this.baseUrl = (opts.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, '');\n this.model = opts.model ?? DEFAULT_MODEL;\n this.timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n }\n\n /**\n * Ask one or more typed questions about a piece of state in a single\n * request \u2014 the API evaluates them in parallel, so callers should batch\n * multiple questions about the same state rather than issuing separate calls.\n */\n async ask(state: string, questions: Record<string, JevQuestion>): Promise<JevResponse> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), this.timeoutMs);\n\n let res: Response;\n try {\n res = await fetch(`${this.baseUrl}/v1/systemone`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ state, model: this.model, questions }),\n signal: controller.signal,\n });\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') {\n throw new JevError(`jev request timed out after ${this.timeoutMs}ms`);\n }\n throw new JevError(`jev request failed: ${err instanceof Error ? err.message : String(err)}`);\n } finally {\n clearTimeout(timeout);\n }\n\n if (!res.ok) {\n let detail = '';\n try { detail = await res.text(); } catch { /* ignore */ }\n throw new JevError(`jev request failed (${res.status})${detail ? `: ${detail}` : ''}`, res.status);\n }\n\n return await res.json() as JevResponse;\n }\n}\n\n/** Minimal shape of the config fields JevClient needs \u2014 avoids importing the full KiroGraphConfig type. */\nexport interface JevConfigLike {\n jevApiKey?: string;\n jevBaseUrl?: string;\n jevModel?: string;\n}\n\n/**\n * Build a JevClient from KiroGraph config, falling back to the JEV_API_KEY\n * env var when `jevApiKey` isn't set in .kirograph/config.json (config.json\n * is often committed to source control \u2014 a config field is provided mainly\n * for pointing at a local mock server in tests).\n */\nexport function createJevClientFromConfig(config: JevConfigLike): JevClient {\n const apiKey = config.jevApiKey || process.env.JEV_API_KEY;\n if (!apiKey) {\n throw new JevError(\n 'jev API key not set \u2014 set the JEV_API_KEY environment variable, or \"jevApiKey\" in .kirograph/config.json',\n );\n }\n return new JevClient({ apiKey, baseUrl: config.jevBaseUrl, model: config.jevModel });\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,MAAM,mBAAmB;AACzB,MAAM,gBAAgB;AACtB,MAAM,qBAAqB;AAEpB,MAAM,iBAAiB,MAAM;AAAA,EAClC,YAAY,SAAiC,QAAiB;AAC5D,UAAM,OAAO;AAD8B;AAE3C,SAAK,OAAO;AAAA,EACd;AACF;AAWO,MAAM,UAAU;AAAA,EAMrB,YAAY,MAAwB;AAClC,QAAI,CAAC,KAAK,QAAQ;AAChB,YAAM,IAAI,SAAS,yBAAyB;AAAA,IAC9C;AACA,SAAK,SAAS,KAAK;AACnB,SAAK,WAAW,KAAK,WAAW,kBAAkB,QAAQ,QAAQ,EAAE;AACpE,SAAK,QAAQ,KAAK,SAAS;AAC3B,SAAK,YAAY,KAAK,aAAa;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,IAAI,OAAe,WAA8D;AACrF,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,UAAU,WAAW,MAAM,WAAW,MAAM,GAAG,KAAK,SAAS;AAEnE,QAAI;AACJ,QAAI;AACF,YAAM,MAAM,MAAM,GAAG,KAAK,OAAO,iBAAiB;AAAA,QAChD,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,iBAAiB,UAAU,KAAK,MAAM;AAAA,UACtC,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,EAAE,OAAO,OAAO,KAAK,OAAO,UAAU,CAAC;AAAA,QAC5D,QAAQ,WAAW;AAAA,MACrB,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,UAAI,eAAe,SAAS,IAAI,SAAS,cAAc;AACrD,cAAM,IAAI,SAAS,+BAA+B,KAAK,SAAS,IAAI;AAAA,MACtE;AACA,YAAM,IAAI,SAAS,uBAAuB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,IAC9F,UAAE;AACA,mBAAa,OAAO;AAAA,IACtB;AAEA,QAAI,CAAC,IAAI,IAAI;AACX,UAAI,SAAS;AACb,UAAI;AAAE,iBAAS,MAAM,IAAI,KAAK;AAAA,MAAG,QAAQ;AAAA,MAAe;AACxD,YAAM,IAAI,SAAS,uBAAuB,IAAI,MAAM,IAAI,SAAS,KAAK,MAAM,KAAK,EAAE,IAAI,IAAI,MAAM;AAAA,IACnG;AAEA,WAAO,MAAM,IAAI,KAAK;AAAA,EACxB;AACF;AAeO,SAAS,0BAA0B,QAAkC;AAC1E,QAAM,SAAS,OAAO,aAAa,QAAQ,IAAI;AAC/C,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO,IAAI,UAAU,EAAE,QAAQ,SAAS,OAAO,YAAY,OAAO,OAAO,SAAS,CAAC;AACrF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
var types_exports = {};
|
|
16
|
+
module.exports = __toCommonJS(types_exports);
|
|
17
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/jev/types.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * KiroGraph \u2014 jev (TypeSafe System One) client types\n *\n * Mirrors the real API shape at https://docs.typesafe.ai:\n * POST /v1/systemone\n * { state: string, model: string, questions: { [id]: JevQuestion } }\n * \u2192 { model: string, answers: { [id]: JevAnswer }, usage?: {...} }\n */\n\n/** Choice: selects one of a fixed set of named categories. Max 255 options. */\nexport interface JevChoiceQuestion {\n type: 'choice';\n instructions: string;\n /** category name \u2192 description shown to the model */\n criteria: Record<string, string>;\n}\n\n/** Score: a calibrated numeric level chosen from an ordered set of 2\u201310 descriptions. */\nexport interface JevScoreQuestion {\n type: 'score';\n instructions: string;\n /** ordered level descriptions, low \u2192 high */\n criteria: string[];\n}\n\n/** Noul: a boolean-shaped judgment returned as a 0.0\u20131.0 value. */\nexport interface JevNoulQuestion {\n type: 'noul';\n instructions: string;\n}\n\nexport type JevQuestion = JevChoiceQuestion | JevScoreQuestion | JevNoulQuestion;\n\nexport interface JevChoiceAnswer {\n type: 'choice';\n choice: string;\n confidence?: number;\n probabilities?: Record<string, number>;\n}\n\nexport interface JevScoreAnswer {\n type: 'score';\n score: number;\n confidence?: number;\n legend?: Record<string, string>;\n}\n\nexport interface JevNoulAnswer {\n type: 'noul';\n noul: number;\n confidence?: number;\n}\n\nexport type JevAnswer = JevChoiceAnswer | JevScoreAnswer | JevNoulAnswer;\n\nexport interface JevUsage {\n input_tokens: number;\n output_tokens: number;\n}\n\nexport interface JevResponse {\n model: string;\n answers: Record<string, JevAnswer>;\n usage?: JevUsage;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -59,18 +59,25 @@ async function handleMemory(toolName, args, cg) {
|
|
|
59
59
|
const projectRoot = cg.getProjectRoot();
|
|
60
60
|
const config = await loadConfig(projectRoot);
|
|
61
61
|
if (!config.enableMemory) return "Memory is not enabled. Set enableMemory: true in .kirograph/config.json";
|
|
62
|
-
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
62
|
+
const { MemoryManager, MemorySchemaError } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
63
63
|
const db = cg.getDatabase();
|
|
64
64
|
db.applyMemorySchema();
|
|
65
65
|
const mem = new MemoryManager(config, db.getRawDb());
|
|
66
66
|
mem.initialize();
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
67
|
+
let id;
|
|
68
|
+
try {
|
|
69
|
+
id = await mem.store({
|
|
70
|
+
content: args.content,
|
|
71
|
+
kind: args.kind ?? "note",
|
|
72
|
+
source: "agent",
|
|
73
|
+
topicKey: args.topicKey,
|
|
74
|
+
reviewAfter: args.reviewAfter,
|
|
75
|
+
fields: args.fields
|
|
76
|
+
});
|
|
77
|
+
} catch (err) {
|
|
78
|
+
if (err instanceof MemorySchemaError) return `Rejected: ${err.message}`;
|
|
79
|
+
throw err;
|
|
80
|
+
}
|
|
74
81
|
if (!id) return "Observation already exists (duplicate content).";
|
|
75
82
|
return `Stored observation ${id} [${args.kind ?? "note"}]`;
|
|
76
83
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/mcp/handlers/memory.ts"],
|
|
4
|
-
"sourcesContent": ["import KiroGraph from '../../index';\nimport { clampLimit, formatAge } from './utils';\n\nexport async function handleMemory(toolName: string, args: Record<string, unknown>, cg: KiroGraph): Promise<string> {\n switch (toolName) {\n case 'kirograph_mem_search': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled. Set enableMemory: true in .kirograph/config.json';\n\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n const results = await mem.search(args.query as string, {\n limit: (args.limit as number) ?? 10,\n kind: args.kind as any,\n sessionId: args.sessionId as string | undefined,\n asOf: args.asOf as number | undefined,\n });\n\n if (results.length === 0) return `No memory observations found for \"${args.query}\".`;\n\n return results.map((r, i) => {\n const age = formatAge(r.observation.createdAt);\n const lines = [`${i + 1}. [${r.observation.kind}] ${r.observation.content} (${age})`];\n if (r.relations && r.relations.length > 0) {\n for (const rel of r.relations) {\n const other = rel.observationA === r.observation.id ? rel.observationB : rel.observationA;\n const icon = rel.relation === 'conflicts_with' ? '\u26A1' : rel.relation === 'supersedes' ? '\u21A9' : '~';\n lines.push(` ${icon} ${rel.relation} ${other} (confidence: ${rel.confidence})${rel.judgmentStatus === 'judged' ? ' (judged)' : ''}`);\n }\n }\n return lines.join('\\n');\n }).join('\\n');\n }\n\n case 'kirograph_mem_store': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled. Set enableMemory: true in .kirograph/config.json';\n\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n const id = await mem.store({\n content: args.content as string,\n kind: (args.kind as any) ?? 'note',\n source: 'agent',\n topicKey: args.topicKey as string | undefined,\n reviewAfter: args.reviewAfter as number | undefined,\n });\n\n if (!id) return 'Observation already exists (duplicate content).';\n return `Stored observation ${id} [${(args.kind as string) ?? 'note'}]`;\n }\n\n case 'kirograph_mem_timeline': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled. Set enableMemory: true in .kirograph/config.json';\n\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n const { sessions, observations } = mem.timeline({\n limit: (args.limit as number) ?? 5,\n sessionId: args.sessionId as string | undefined,\n });\n\n if (sessions.length === 0) return 'No memory sessions found.';\n\n const lines: string[] = [];\n for (const session of sessions) {\n const start = new Date(session.startedAt).toISOString().slice(0, 16).replace('T', ' ');\n const status = session.endedAt ? 'ended' : 'active';\n const obs = observations.get(session.id) ?? [];\n lines.push(`## ${start} [${session.ide ?? 'unknown'}] (${status}, ${obs.length} observations)`);\n for (const o of obs.slice(0, 5)) {\n lines.push(` - [${o.kind}] ${o.content.slice(0, 120)}`);\n }\n if (obs.length > 5) lines.push(` \u2026and ${obs.length - 5} more`);\n }\n return lines.join('\\n');\n }\n\n case 'kirograph_mem_status': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled. Set enableMemory: true in .kirograph/config.json';\n\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n const stats = mem.getStats();\n const lines = [\n 'KiroGraph Memory Status',\n ` Sessions: ${stats.sessions} (${stats.activeSessions} active)`,\n ` Observations: ${stats.observations}`,\n ` Symbol links: ${stats.links}`,\n ` Embeddings: ${stats.vectors} / ${stats.embeddableCount}`,\n ` Model mismatch: ${stats.modelMismatch ? '\u26A0 yes \u2014 run kirograph mem reembed' : 'no'}`,\n ` Relations: ${stats.relations} (${stats.pendingConflicts} pending)`,\n ` Caveman compression: ${config.cavemanMode !== 'off' ? config.cavemanMode : 'off (storing raw)'}`,\n ];\n return lines.join('\\n');\n }\n\n case 'kirograph_mem_review': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const obs = mem.getObservationsForReview(args.limit as number ?? 20);\n if (obs.length === 0) return 'No overdue observations \u2014 all review_after dates are in the future.';\n const now = Date.now();\n return obs.map((o, i) => {\n const daysOverdue = Math.floor((now - (o.reviewAfter ?? now)) / 86400000);\n return `${i + 1}. [${o.kind}]${o.topicKey ? ` (${o.topicKey})` : ''} ${o.content.slice(0, 120)} \u2014 overdue by ${daysOverdue}d`;\n }).join('\\n');\n }\n\n case 'kirograph_mem_mark_reviewed': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n mem.markReviewed(args.id as string);\n return `Observation ${args.id} marked as reviewed.`;\n }\n\n case 'kirograph_mem_compare': {\n if (!args.observationA || !args.observationB || !args.relation) {\n return 'Error: observationA, observationB, and relation are required.';\n }\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const relationId = mem.compareObservations({\n observationA: args.observationA as string,\n observationB: args.observationB as string,\n relation: args.relation as any,\n confidence: args.confidence as number ?? 1.0,\n reason: args.reason as string | undefined,\n evidence: args.evidence as string | undefined,\n });\n return `Relation ${relationId} created (${args.relation}, confidence: ${args.confidence ?? 1.0}). Use kirograph_mem_judge to finalize.`;\n }\n\n case 'kirograph_mem_judge': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n mem.judgeRelation(\n args.relationId as string,\n args.relation as any,\n args.confidence as number,\n args.reason as string | undefined,\n args.evidence as string | undefined,\n );\n return `Relation ${args.relationId} judged as [${args.relation}] (confidence: ${args.confidence}).`;\n }\n\n case 'kirograph_mem_capture': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const extracted = mem.capturePassive(args.content as string);\n if (extracted.length === 0) return 'No structured sections found. Use ## Key Learnings, ## Observations, ## Decisions, or ## Key Changes headings.';\n return `Captured ${extracted.length} observation(s):\\n` + extracted.map((e, i) => `${i + 1}. [${e.kind}] ${e.content.slice(0, 100)}${e.id ? '' : ' (duplicate)'}`).join('\\n');\n }\n\n case 'kirograph_mem_save_prompt': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const id = await mem.savePrompt(args.content as string);\n return `Prompt saved as ${id}.`;\n }\n\n case 'kirograph_mem_suggest_topic_key': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const key = mem.suggestTopicKey(args.kind as string, args.title as string);\n return `Suggested topic_key: ${key}`;\n }\n\n case 'kirograph_mem_conflicts_scan': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const candidates = mem.scanConflicts(args.limit as number ?? 50);\n if (candidates.length === 0) return 'No potential conflicts found among recent observations.';\n return `Found ${candidates.length} potential conflict(s):\\n` + candidates.map((c, i) =>\n `${i + 1}. [${c.observationA.kind}] \"${c.observationA.content.slice(0, 80)}\" \u2194 [${c.observationB.kind}] \"${c.observationB.content.slice(0, 80)}\" (similarity: ${c.similarity.toFixed(2)})`\n ).join('\\n') + '\\n\\nUse kirograph_mem_compare to establish relations.';\n }\n\n case 'kirograph_mem_prune': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const olderThan = (args.olderThan as string) ?? '90d';\n const durationMs = (() => {\n const m = olderThan.match(/^(\\d+)(d|m|w|h)$/);\n if (!m) return 90 * 86400000;\n const v = parseInt(m[1]);\n switch (m[2]) {\n case 'h': return v * 3600000;\n case 'd': return v * 86400000;\n case 'w': return v * 7 * 86400000;\n case 'm': return v * 30 * 86400000;\n default: return 90 * 86400000;\n }\n })();\n const deleted = mem.prune(durationMs);\n return `Pruned ${deleted} observation(s) older than ${olderThan}.`;\n }\n\n case 'kirograph_mem_lint': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const result = mem.lint();\n const lines = ['Memory Lint Results:'];\n lines.push(` Stale links: ${result.staleLinks}`);\n lines.push(` Model mismatch: ${result.modelMismatch ? 'yes' : 'no'}`);\n lines.push(` Stale sessions: ${result.staleSessions} (auto-closed)`);\n if (args.fix && result.staleLinks > 0) {\n const removed = mem.removeStaleLinks();\n lines.push(`\\n\u2713 Removed ${removed} stale link(s)`);\n } else if (result.staleLinks > 0) {\n lines.push(`\\nPass fix: true to remove stale links.`);\n }\n if (result.modelMismatch) {\n lines.push(`\\nRun 'kirograph mem reembed' to fix model mismatch.`);\n }\n return lines.join('\\n');\n }\n\n case 'kirograph_mem_conflicts_list': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const limit = clampLimit(args.limit as number | undefined, 20);\n const pending = mem.getPendingRelations(limit);\n if (pending.length === 0) return 'No pending conflict relations.';\n return `Pending relations (${pending.length}):\\n\\n` + pending.map(r =>\n `[${r.id}] ${r.relation}\\n A: ${r.observationA}\\n B: ${r.observationB}${r.reason ? `\\n Reason: ${r.reason}` : ''}`\n ).join('\\n\\n') + '\\n\\nUse kirograph_mem_conflicts_ignore to dismiss, or kirograph_mem_judge to finalize.';\n }\n\n case 'kirograph_mem_conflicts_ignore': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const relationId = args.relationId as string;\n mem.ignoreRelation(relationId);\n return `Relation \"${relationId}\" ignored.`;\n }\n\n default:\n return `Unknown tool: ${toolName}`;\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import KiroGraph from '../../index';\nimport { clampLimit, formatAge } from './utils';\n\nexport async function handleMemory(toolName: string, args: Record<string, unknown>, cg: KiroGraph): Promise<string> {\n switch (toolName) {\n case 'kirograph_mem_search': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled. Set enableMemory: true in .kirograph/config.json';\n\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n const results = await mem.search(args.query as string, {\n limit: (args.limit as number) ?? 10,\n kind: args.kind as any,\n sessionId: args.sessionId as string | undefined,\n asOf: args.asOf as number | undefined,\n });\n\n if (results.length === 0) return `No memory observations found for \"${args.query}\".`;\n\n return results.map((r, i) => {\n const age = formatAge(r.observation.createdAt);\n const lines = [`${i + 1}. [${r.observation.kind}] ${r.observation.content} (${age})`];\n if (r.relations && r.relations.length > 0) {\n for (const rel of r.relations) {\n const other = rel.observationA === r.observation.id ? rel.observationB : rel.observationA;\n const icon = rel.relation === 'conflicts_with' ? '\u26A1' : rel.relation === 'supersedes' ? '\u21A9' : '~';\n lines.push(` ${icon} ${rel.relation} ${other} (confidence: ${rel.confidence})${rel.judgmentStatus === 'judged' ? ' (judged)' : ''}`);\n }\n }\n return lines.join('\\n');\n }).join('\\n');\n }\n\n case 'kirograph_mem_store': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled. Set enableMemory: true in .kirograph/config.json';\n\n const { MemoryManager, MemorySchemaError } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n let id;\n try {\n id = await mem.store({\n content: args.content as string,\n kind: (args.kind as any) ?? 'note',\n source: 'agent',\n topicKey: args.topicKey as string | undefined,\n reviewAfter: args.reviewAfter as number | undefined,\n fields: args.fields as Record<string, unknown> | undefined,\n });\n } catch (err) {\n if (err instanceof MemorySchemaError) return `Rejected: ${err.message}`;\n throw err;\n }\n\n if (!id) return 'Observation already exists (duplicate content).';\n return `Stored observation ${id} [${(args.kind as string) ?? 'note'}]`;\n }\n\n case 'kirograph_mem_timeline': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled. Set enableMemory: true in .kirograph/config.json';\n\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n const { sessions, observations } = mem.timeline({\n limit: (args.limit as number) ?? 5,\n sessionId: args.sessionId as string | undefined,\n });\n\n if (sessions.length === 0) return 'No memory sessions found.';\n\n const lines: string[] = [];\n for (const session of sessions) {\n const start = new Date(session.startedAt).toISOString().slice(0, 16).replace('T', ' ');\n const status = session.endedAt ? 'ended' : 'active';\n const obs = observations.get(session.id) ?? [];\n lines.push(`## ${start} [${session.ide ?? 'unknown'}] (${status}, ${obs.length} observations)`);\n for (const o of obs.slice(0, 5)) {\n lines.push(` - [${o.kind}] ${o.content.slice(0, 120)}`);\n }\n if (obs.length > 5) lines.push(` \u2026and ${obs.length - 5} more`);\n }\n return lines.join('\\n');\n }\n\n case 'kirograph_mem_status': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled. Set enableMemory: true in .kirograph/config.json';\n\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase();\n db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n\n const stats = mem.getStats();\n const lines = [\n 'KiroGraph Memory Status',\n ` Sessions: ${stats.sessions} (${stats.activeSessions} active)`,\n ` Observations: ${stats.observations}`,\n ` Symbol links: ${stats.links}`,\n ` Embeddings: ${stats.vectors} / ${stats.embeddableCount}`,\n ` Model mismatch: ${stats.modelMismatch ? '\u26A0 yes \u2014 run kirograph mem reembed' : 'no'}`,\n ` Relations: ${stats.relations} (${stats.pendingConflicts} pending)`,\n ` Caveman compression: ${config.cavemanMode !== 'off' ? config.cavemanMode : 'off (storing raw)'}`,\n ];\n return lines.join('\\n');\n }\n\n case 'kirograph_mem_review': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const obs = mem.getObservationsForReview(args.limit as number ?? 20);\n if (obs.length === 0) return 'No overdue observations \u2014 all review_after dates are in the future.';\n const now = Date.now();\n return obs.map((o, i) => {\n const daysOverdue = Math.floor((now - (o.reviewAfter ?? now)) / 86400000);\n return `${i + 1}. [${o.kind}]${o.topicKey ? ` (${o.topicKey})` : ''} ${o.content.slice(0, 120)} \u2014 overdue by ${daysOverdue}d`;\n }).join('\\n');\n }\n\n case 'kirograph_mem_mark_reviewed': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n mem.markReviewed(args.id as string);\n return `Observation ${args.id} marked as reviewed.`;\n }\n\n case 'kirograph_mem_compare': {\n if (!args.observationA || !args.observationB || !args.relation) {\n return 'Error: observationA, observationB, and relation are required.';\n }\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const relationId = mem.compareObservations({\n observationA: args.observationA as string,\n observationB: args.observationB as string,\n relation: args.relation as any,\n confidence: args.confidence as number ?? 1.0,\n reason: args.reason as string | undefined,\n evidence: args.evidence as string | undefined,\n });\n return `Relation ${relationId} created (${args.relation}, confidence: ${args.confidence ?? 1.0}). Use kirograph_mem_judge to finalize.`;\n }\n\n case 'kirograph_mem_judge': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n mem.judgeRelation(\n args.relationId as string,\n args.relation as any,\n args.confidence as number,\n args.reason as string | undefined,\n args.evidence as string | undefined,\n );\n return `Relation ${args.relationId} judged as [${args.relation}] (confidence: ${args.confidence}).`;\n }\n\n case 'kirograph_mem_capture': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const extracted = mem.capturePassive(args.content as string);\n if (extracted.length === 0) return 'No structured sections found. Use ## Key Learnings, ## Observations, ## Decisions, or ## Key Changes headings.';\n return `Captured ${extracted.length} observation(s):\\n` + extracted.map((e, i) => `${i + 1}. [${e.kind}] ${e.content.slice(0, 100)}${e.id ? '' : ' (duplicate)'}`).join('\\n');\n }\n\n case 'kirograph_mem_save_prompt': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const id = await mem.savePrompt(args.content as string);\n return `Prompt saved as ${id}.`;\n }\n\n case 'kirograph_mem_suggest_topic_key': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const key = mem.suggestTopicKey(args.kind as string, args.title as string);\n return `Suggested topic_key: ${key}`;\n }\n\n case 'kirograph_mem_conflicts_scan': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const candidates = mem.scanConflicts(args.limit as number ?? 50);\n if (candidates.length === 0) return 'No potential conflicts found among recent observations.';\n return `Found ${candidates.length} potential conflict(s):\\n` + candidates.map((c, i) =>\n `${i + 1}. [${c.observationA.kind}] \"${c.observationA.content.slice(0, 80)}\" \u2194 [${c.observationB.kind}] \"${c.observationB.content.slice(0, 80)}\" (similarity: ${c.similarity.toFixed(2)})`\n ).join('\\n') + '\\n\\nUse kirograph_mem_compare to establish relations.';\n }\n\n case 'kirograph_mem_prune': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const olderThan = (args.olderThan as string) ?? '90d';\n const durationMs = (() => {\n const m = olderThan.match(/^(\\d+)(d|m|w|h)$/);\n if (!m) return 90 * 86400000;\n const v = parseInt(m[1]);\n switch (m[2]) {\n case 'h': return v * 3600000;\n case 'd': return v * 86400000;\n case 'w': return v * 7 * 86400000;\n case 'm': return v * 30 * 86400000;\n default: return 90 * 86400000;\n }\n })();\n const deleted = mem.prune(durationMs);\n return `Pruned ${deleted} observation(s) older than ${olderThan}.`;\n }\n\n case 'kirograph_mem_lint': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const result = mem.lint();\n const lines = ['Memory Lint Results:'];\n lines.push(` Stale links: ${result.staleLinks}`);\n lines.push(` Model mismatch: ${result.modelMismatch ? 'yes' : 'no'}`);\n lines.push(` Stale sessions: ${result.staleSessions} (auto-closed)`);\n if (args.fix && result.staleLinks > 0) {\n const removed = mem.removeStaleLinks();\n lines.push(`\\n\u2713 Removed ${removed} stale link(s)`);\n } else if (result.staleLinks > 0) {\n lines.push(`\\nPass fix: true to remove stale links.`);\n }\n if (result.modelMismatch) {\n lines.push(`\\nRun 'kirograph mem reembed' to fix model mismatch.`);\n }\n return lines.join('\\n');\n }\n\n case 'kirograph_mem_conflicts_list': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const limit = clampLimit(args.limit as number | undefined, 20);\n const pending = mem.getPendingRelations(limit);\n if (pending.length === 0) return 'No pending conflict relations.';\n return `Pending relations (${pending.length}):\\n\\n` + pending.map(r =>\n `[${r.id}] ${r.relation}\\n A: ${r.observationA}\\n B: ${r.observationB}${r.reason ? `\\n Reason: ${r.reason}` : ''}`\n ).join('\\n\\n') + '\\n\\nUse kirograph_mem_conflicts_ignore to dismiss, or kirograph_mem_judge to finalize.';\n }\n\n case 'kirograph_mem_conflicts_ignore': {\n const { loadConfig } = await Promise.resolve().then(() => require('../../config.js'));\n const projectRoot = args.projectPath as string ?? cg.getProjectRoot();\n const config = await loadConfig(projectRoot);\n if (!config.enableMemory) return 'Memory is not enabled.';\n const { MemoryManager } = await Promise.resolve().then(() => require('../../memory/index.js'));\n const db = cg.getDatabase(); db.applyMemorySchema();\n const mem = new MemoryManager(config, db.getRawDb());\n mem.initialize();\n const relationId = args.relationId as string;\n mem.ignoreRelation(relationId);\n return `Relation \"${relationId}\" ignored.`;\n }\n\n default:\n return `Unknown tool: ${toolName}`;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -114,7 +114,7 @@ async function handleSecurity(toolName, args, cg) {
|
|
|
114
114
|
if (dbName.toUpperCase() === "OSV") return new OsvAdapter();
|
|
115
115
|
return null;
|
|
116
116
|
}).filter(Boolean);
|
|
117
|
-
const client = new VulnerabilityDatabaseClient(adapters, db);
|
|
117
|
+
const client = new VulnerabilityDatabaseClient(adapters, db, void 0, projectRoot);
|
|
118
118
|
await client.enrichAll();
|
|
119
119
|
}
|
|
120
120
|
let query = `
|
|
@@ -319,14 +319,16 @@ async function handleSecurity(toolName, args, cg) {
|
|
|
319
319
|
return `Target "${target}" not found. Provide a valid CVE ID or dependency package name.`;
|
|
320
320
|
}
|
|
321
321
|
}
|
|
322
|
-
const { ReachabilityAnalyzer } = await Promise.resolve().then(() => require("../../security/reachability.js"));
|
|
322
|
+
const { ReachabilityAnalyzer, explainReachability } = await Promise.resolve().then(() => require("../../security/reachability.js"));
|
|
323
323
|
const analyzer = new ReachabilityAnalyzer(db, config);
|
|
324
324
|
const result = await analyzer.analyze(vulnerabilityNodeId);
|
|
325
325
|
const lines = [
|
|
326
326
|
`# Reachability: ${targetLabel}`,
|
|
327
327
|
"",
|
|
328
328
|
`Verdict: ${result.verdict}`,
|
|
329
|
-
`Reaching entry points: ${result.reachingEntryPointCount}
|
|
329
|
+
`Reaching entry points: ${result.reachingEntryPointCount}`,
|
|
330
|
+
"",
|
|
331
|
+
`Why: ${explainReachability(result)}`
|
|
330
332
|
];
|
|
331
333
|
if (result.paths.length > 0) {
|
|
332
334
|
lines.push("", "## Paths");
|