kirograph 0.27.1 → 0.28.0
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 +35 -2
- package/dist/bin/commands/annotations.js +56 -0
- package/dist/bin/commands/annotations.js.map +7 -0
- package/dist/bin/commands/ast-rewrite.js +55 -0
- package/dist/bin/commands/ast-rewrite.js.map +7 -0
- package/dist/bin/commands/bench.js +103 -0
- package/dist/bin/commands/bench.js.map +7 -0
- package/dist/bin/commands/branch.js +133 -0
- package/dist/bin/commands/branch.js.map +7 -0
- package/dist/bin/commands/callees.js +76 -0
- package/dist/bin/commands/callees.js.map +7 -0
- package/dist/bin/commands/callers.js +76 -0
- package/dist/bin/commands/callers.js.map +7 -0
- package/dist/bin/commands/changelog.js +55 -0
- package/dist/bin/commands/changelog.js.map +7 -0
- package/dist/bin/commands/circular-deps.js +68 -0
- package/dist/bin/commands/circular-deps.js.map +7 -0
- package/dist/bin/commands/commit-context.js +55 -0
- package/dist/bin/commands/commit-context.js.map +7 -0
- package/dist/bin/commands/complexity.js +60 -0
- package/dist/bin/commands/complexity.js.map +7 -0
- package/dist/bin/commands/cost.js +146 -0
- package/dist/bin/commands/cost.js.map +7 -0
- package/dist/bin/commands/dependency-depth.js +55 -0
- package/dist/bin/commands/dependency-depth.js.map +7 -0
- package/dist/bin/commands/diff-context.js +55 -0
- package/dist/bin/commands/diff-context.js.map +7 -0
- package/dist/bin/commands/distribution.js +56 -0
- package/dist/bin/commands/distribution.js.map +7 -0
- package/dist/bin/commands/doc-coverage.js +56 -0
- package/dist/bin/commands/doc-coverage.js.map +7 -0
- package/dist/bin/commands/doctor.js +202 -0
- package/dist/bin/commands/doctor.js.map +7 -0
- package/dist/bin/commands/dsm.js +56 -0
- package/dist/bin/commands/dsm.js.map +7 -0
- package/dist/bin/commands/gini.js +55 -0
- package/dist/bin/commands/gini.js.map +7 -0
- package/dist/bin/commands/god-class.js +56 -0
- package/dist/bin/commands/god-class.js.map +7 -0
- package/dist/bin/commands/health.js +55 -0
- package/dist/bin/commands/health.js.map +7 -0
- package/dist/bin/commands/help.js +224 -45
- package/dist/bin/commands/help.js.map +2 -2
- package/dist/bin/commands/impact.js +76 -0
- package/dist/bin/commands/impact.js.map +7 -0
- package/dist/bin/commands/inheritance-depth.js +56 -0
- package/dist/bin/commands/inheritance-depth.js.map +7 -0
- package/dist/bin/commands/insert-at.js +55 -0
- package/dist/bin/commands/insert-at.js.map +7 -0
- package/dist/bin/commands/largest.js +56 -0
- package/dist/bin/commands/largest.js.map +7 -0
- package/dist/bin/commands/manifest.js +158 -0
- package/dist/bin/commands/manifest.js.map +7 -0
- package/dist/bin/commands/module-api.js +57 -0
- package/dist/bin/commands/module-api.js.map +7 -0
- package/dist/bin/commands/monitor.js +91 -0
- package/dist/bin/commands/monitor.js.map +7 -0
- package/dist/bin/commands/multi-replace.js +66 -0
- package/dist/bin/commands/multi-replace.js.map +7 -0
- package/dist/bin/commands/pr-context.js +55 -0
- package/dist/bin/commands/pr-context.js.map +7 -0
- package/dist/bin/commands/query.js +19 -1
- package/dist/bin/commands/query.js.map +3 -3
- package/dist/bin/commands/rank.js +56 -0
- package/dist/bin/commands/rank.js.map +7 -0
- package/dist/bin/commands/read.js +1 -1
- package/dist/bin/commands/read.js.map +2 -2
- package/dist/bin/commands/recursion.js +56 -0
- package/dist/bin/commands/recursion.js.map +7 -0
- package/dist/bin/commands/rename-preview.js +56 -0
- package/dist/bin/commands/rename-preview.js.map +7 -0
- package/dist/bin/commands/session.js +60 -0
- package/dist/bin/commands/session.js.map +7 -0
- package/dist/bin/commands/simplify-scan.js +56 -0
- package/dist/bin/commands/simplify-scan.js.map +7 -0
- package/dist/bin/commands/str-replace.js +55 -0
- package/dist/bin/commands/str-replace.js.map +7 -0
- package/dist/bin/commands/test-coverage.js +59 -0
- package/dist/bin/commands/test-coverage.js.map +7 -0
- package/dist/bin/commands/test-map.js +56 -0
- package/dist/bin/commands/test-map.js.map +7 -0
- package/dist/bin/commands/test-risk.js +59 -0
- package/dist/bin/commands/test-risk.js.map +7 -0
- package/dist/bin/commands/type-hierarchy.js +76 -0
- package/dist/bin/commands/type-hierarchy.js.map +7 -0
- package/dist/bin/commands/unused-imports.js +55 -0
- package/dist/bin/commands/unused-imports.js.map +7 -0
- package/dist/bin/commands/upgrade.js +78 -0
- package/dist/bin/commands/upgrade.js.map +7 -0
- package/dist/bin/installer/common.js +19 -9
- package/dist/bin/installer/common.js.map +2 -2
- package/dist/bin/installer/config-prompt.js +147 -12
- package/dist/bin/installer/config-prompt.js.map +3 -3
- package/dist/bin/installer/index.js +62 -6
- package/dist/bin/installer/index.js.map +2 -2
- package/dist/bin/installer/instructions.js +14 -25
- package/dist/bin/installer/instructions.js.map +2 -2
- package/dist/bin/installer/mcp.js.map +2 -2
- package/dist/bin/installer/steering.js +569 -100
- package/dist/bin/installer/steering.js.map +2 -2
- package/dist/bin/installer/targets/aider.js +3 -3
- package/dist/bin/installer/targets/aider.js.map +2 -2
- package/dist/bin/installer/targets/amp.js +3 -3
- package/dist/bin/installer/targets/amp.js.map +2 -2
- package/dist/bin/installer/targets/antigravity.js +4 -4
- package/dist/bin/installer/targets/antigravity.js.map +2 -2
- package/dist/bin/installer/targets/augment.js +3 -3
- package/dist/bin/installer/targets/augment.js.map +2 -2
- package/dist/bin/installer/targets/claude.js +3 -3
- package/dist/bin/installer/targets/claude.js.map +2 -2
- package/dist/bin/installer/targets/cline.js +4 -4
- package/dist/bin/installer/targets/cline.js.map +2 -2
- package/dist/bin/installer/targets/codex.js +4 -4
- package/dist/bin/installer/targets/codex.js.map +2 -2
- package/dist/bin/installer/targets/continue.js +4 -4
- package/dist/bin/installer/targets/continue.js.map +2 -2
- package/dist/bin/installer/targets/copilot-cli.js +4 -4
- package/dist/bin/installer/targets/copilot-cli.js.map +2 -2
- package/dist/bin/installer/targets/copilot.js +4 -4
- package/dist/bin/installer/targets/copilot.js.map +2 -2
- package/dist/bin/installer/targets/cursor.js +5 -5
- package/dist/bin/installer/targets/cursor.js.map +2 -2
- package/dist/bin/installer/targets/devin.js +4 -4
- package/dist/bin/installer/targets/devin.js.map +2 -2
- package/dist/bin/installer/targets/gemini-cli.js +4 -4
- package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
- package/dist/bin/installer/targets/generic.js +2 -2
- package/dist/bin/installer/targets/generic.js.map +2 -2
- package/dist/bin/installer/targets/goose.js +3 -4
- package/dist/bin/installer/targets/goose.js.map +3 -3
- package/dist/bin/installer/targets/index.js.map +1 -1
- package/dist/bin/installer/targets/junie.js +4 -4
- package/dist/bin/installer/targets/junie.js.map +2 -2
- package/dist/bin/installer/targets/kilo.js +4 -4
- package/dist/bin/installer/targets/kilo.js.map +2 -2
- package/dist/bin/installer/targets/kiro.js +27 -3
- package/dist/bin/installer/targets/kiro.js.map +2 -2
- package/dist/bin/installer/targets/opencode.js +3 -3
- package/dist/bin/installer/targets/opencode.js.map +2 -2
- package/dist/bin/installer/targets/openhands.js +3 -3
- package/dist/bin/installer/targets/openhands.js.map +2 -2
- package/dist/bin/installer/targets/qoder.js +2 -2
- package/dist/bin/installer/targets/qoder.js.map +2 -2
- package/dist/bin/installer/targets/qwen.js +2 -2
- package/dist/bin/installer/targets/qwen.js.map +2 -2
- package/dist/bin/installer/targets/replit.js +3 -3
- package/dist/bin/installer/targets/replit.js.map +2 -2
- package/dist/bin/installer/targets/roo.js +4 -4
- package/dist/bin/installer/targets/roo.js.map +2 -2
- package/dist/bin/installer/targets/tabnine.js +3 -3
- package/dist/bin/installer/targets/tabnine.js.map +2 -2
- package/dist/bin/installer/targets/trae.js +3 -3
- package/dist/bin/installer/targets/trae.js.map +2 -2
- package/dist/bin/installer/targets/warp.js +4 -4
- package/dist/bin/installer/targets/warp.js.map +2 -2
- package/dist/bin/installer/targets/windsurf.js +4 -4
- package/dist/bin/installer/targets/windsurf.js.map +2 -2
- package/dist/bin/kirograph.js +83 -1
- package/dist/bin/kirograph.js.map +3 -3
- package/dist/config.js +30 -8
- package/dist/config.js.map +2 -2
- package/dist/core/branch-manager.js +111 -0
- package/dist/core/branch-manager.js.map +7 -0
- package/dist/core/pipeline.js +3 -3
- package/dist/core/pipeline.js.map +2 -2
- package/dist/data/pixelrag-bridge.js +93 -0
- package/dist/data/pixelrag-bridge.js.map +7 -0
- package/dist/data/pixelrag-manager.js +416 -0
- package/dist/data/pixelrag-manager.js.map +7 -0
- package/dist/db/database.js +34 -7
- package/dist/db/database.js.map +2 -2
- package/dist/db/schema.sql +7 -1
- package/dist/extraction/complexity.js +116 -0
- package/dist/extraction/complexity.js.map +7 -0
- package/dist/extraction/extractor.js +52 -1
- package/dist/extraction/extractor.js.map +2 -2
- package/dist/graph/git-context.js +229 -0
- package/dist/graph/git-context.js.map +7 -0
- package/dist/index.js +4 -2
- package/dist/index.js.map +2 -2
- package/dist/mcp/cache.js +1 -1
- package/dist/mcp/cache.js.map +2 -2
- package/dist/mcp/handler.js +446 -0
- package/dist/mcp/handler.js.map +7 -0
- package/dist/mcp/handlers/architecture.js +297 -0
- package/dist/mcp/handlers/architecture.js.map +7 -0
- package/dist/mcp/handlers/branch.js +175 -0
- package/dist/mcp/handlers/branch.js.map +7 -0
- package/dist/mcp/handlers/code-health.js +563 -0
- package/dist/mcp/handlers/code-health.js.map +7 -0
- package/dist/mcp/handlers/complexity.js +267 -0
- package/dist/mcp/handlers/complexity.js.map +7 -0
- package/dist/mcp/handlers/core.js +611 -0
- package/dist/mcp/handlers/core.js.map +7 -0
- package/dist/mcp/handlers/data.js +337 -0
- package/dist/mcp/handlers/data.js.map +7 -0
- package/dist/mcp/handlers/docs.js +159 -0
- package/dist/mcp/handlers/docs.js.map +7 -0
- package/dist/mcp/handlers/edit-primitives.js +200 -0
- package/dist/mcp/handlers/edit-primitives.js.map +7 -0
- package/dist/mcp/handlers/git-context.js +286 -0
- package/dist/mcp/handlers/git-context.js.map +7 -0
- package/dist/mcp/handlers/memory.js +363 -0
- package/dist/mcp/handlers/memory.js.map +7 -0
- package/dist/mcp/handlers/patterns.js +310 -0
- package/dist/mcp/handlers/patterns.js.map +7 -0
- package/dist/mcp/handlers/security.js +699 -0
- package/dist/mcp/handlers/security.js.map +7 -0
- package/dist/mcp/handlers/utils.js +97 -0
- package/dist/mcp/handlers/utils.js.map +7 -0
- package/dist/mcp/handlers/watchmen.js +104 -0
- package/dist/mcp/handlers/watchmen.js.map +7 -0
- package/dist/mcp/handlers/wiki.js +242 -0
- package/dist/mcp/handlers/wiki.js.map +7 -0
- package/dist/mcp/server.js +72 -3
- package/dist/mcp/server.js.map +2 -2
- package/dist/mcp/tool-names.js +136 -10
- package/dist/mcp/tool-names.js.map +2 -2
- package/dist/mcp/tools.js +846 -3019
- package/dist/mcp/tools.js.map +3 -3
- package/dist/types.js.map +2 -2
- package/package.json +36 -10
|
@@ -0,0 +1,363 @@
|
|
|
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 memory_exports = {};
|
|
20
|
+
__export(memory_exports, {
|
|
21
|
+
handleMemory: () => handleMemory
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(memory_exports);
|
|
24
|
+
var import_utils = require("./utils");
|
|
25
|
+
async function handleMemory(toolName, args, cg) {
|
|
26
|
+
switch (toolName) {
|
|
27
|
+
case "kirograph_mem_search": {
|
|
28
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
29
|
+
const projectRoot = cg.getProjectRoot();
|
|
30
|
+
const config = await loadConfig(projectRoot);
|
|
31
|
+
if (!config.enableMemory) return "Memory is not enabled. Set enableMemory: true in .kirograph/config.json";
|
|
32
|
+
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
33
|
+
const db = cg.getDatabase();
|
|
34
|
+
db.applyMemorySchema();
|
|
35
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
36
|
+
mem.initialize();
|
|
37
|
+
const results = await mem.search(args.query, {
|
|
38
|
+
limit: args.limit ?? 10,
|
|
39
|
+
kind: args.kind,
|
|
40
|
+
sessionId: args.sessionId,
|
|
41
|
+
asOf: args.asOf
|
|
42
|
+
});
|
|
43
|
+
if (results.length === 0) return `No memory observations found for "${args.query}".`;
|
|
44
|
+
return results.map((r, i) => {
|
|
45
|
+
const age = (0, import_utils.formatAge)(r.observation.createdAt);
|
|
46
|
+
const lines = [`${i + 1}. [${r.observation.kind}] ${r.observation.content} (${age})`];
|
|
47
|
+
if (r.relations && r.relations.length > 0) {
|
|
48
|
+
for (const rel of r.relations) {
|
|
49
|
+
const other = rel.observationA === r.observation.id ? rel.observationB : rel.observationA;
|
|
50
|
+
const icon = rel.relation === "conflicts_with" ? "\u26A1" : rel.relation === "supersedes" ? "\u21A9" : "~";
|
|
51
|
+
lines.push(` ${icon} ${rel.relation} ${other} (confidence: ${rel.confidence})${rel.judgmentStatus === "judged" ? " (judged)" : ""}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return lines.join("\n");
|
|
55
|
+
}).join("\n");
|
|
56
|
+
}
|
|
57
|
+
case "kirograph_mem_store": {
|
|
58
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
59
|
+
const projectRoot = cg.getProjectRoot();
|
|
60
|
+
const config = await loadConfig(projectRoot);
|
|
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"));
|
|
63
|
+
const db = cg.getDatabase();
|
|
64
|
+
db.applyMemorySchema();
|
|
65
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
66
|
+
mem.initialize();
|
|
67
|
+
const id = await mem.store({
|
|
68
|
+
content: args.content,
|
|
69
|
+
kind: args.kind ?? "note",
|
|
70
|
+
source: "agent",
|
|
71
|
+
topicKey: args.topicKey,
|
|
72
|
+
reviewAfter: args.reviewAfter
|
|
73
|
+
});
|
|
74
|
+
if (!id) return "Observation already exists (duplicate content).";
|
|
75
|
+
return `Stored observation ${id} [${args.kind ?? "note"}]`;
|
|
76
|
+
}
|
|
77
|
+
case "kirograph_mem_timeline": {
|
|
78
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
79
|
+
const projectRoot = cg.getProjectRoot();
|
|
80
|
+
const config = await loadConfig(projectRoot);
|
|
81
|
+
if (!config.enableMemory) return "Memory is not enabled. Set enableMemory: true in .kirograph/config.json";
|
|
82
|
+
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
83
|
+
const db = cg.getDatabase();
|
|
84
|
+
db.applyMemorySchema();
|
|
85
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
86
|
+
mem.initialize();
|
|
87
|
+
const { sessions, observations } = mem.timeline({
|
|
88
|
+
limit: args.limit ?? 5,
|
|
89
|
+
sessionId: args.sessionId
|
|
90
|
+
});
|
|
91
|
+
if (sessions.length === 0) return "No memory sessions found.";
|
|
92
|
+
const lines = [];
|
|
93
|
+
for (const session of sessions) {
|
|
94
|
+
const start = new Date(session.startedAt).toISOString().slice(0, 16).replace("T", " ");
|
|
95
|
+
const status = session.endedAt ? "ended" : "active";
|
|
96
|
+
const obs = observations.get(session.id) ?? [];
|
|
97
|
+
lines.push(`## ${start} [${session.ide ?? "unknown"}] (${status}, ${obs.length} observations)`);
|
|
98
|
+
for (const o of obs.slice(0, 5)) {
|
|
99
|
+
lines.push(` - [${o.kind}] ${o.content.slice(0, 120)}`);
|
|
100
|
+
}
|
|
101
|
+
if (obs.length > 5) lines.push(` \u2026and ${obs.length - 5} more`);
|
|
102
|
+
}
|
|
103
|
+
return lines.join("\n");
|
|
104
|
+
}
|
|
105
|
+
case "kirograph_mem_status": {
|
|
106
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
107
|
+
const projectRoot = cg.getProjectRoot();
|
|
108
|
+
const config = await loadConfig(projectRoot);
|
|
109
|
+
if (!config.enableMemory) return "Memory is not enabled. Set enableMemory: true in .kirograph/config.json";
|
|
110
|
+
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
111
|
+
const db = cg.getDatabase();
|
|
112
|
+
db.applyMemorySchema();
|
|
113
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
114
|
+
mem.initialize();
|
|
115
|
+
const stats = mem.getStats();
|
|
116
|
+
const lines = [
|
|
117
|
+
"KiroGraph Memory Status",
|
|
118
|
+
` Sessions: ${stats.sessions} (${stats.activeSessions} active)`,
|
|
119
|
+
` Observations: ${stats.observations}`,
|
|
120
|
+
` Symbol links: ${stats.links}`,
|
|
121
|
+
` Embeddings: ${stats.vectors} / ${stats.embeddableCount}`,
|
|
122
|
+
` Model mismatch: ${stats.modelMismatch ? "\u26A0 yes \u2014 run kirograph mem reembed" : "no"}`,
|
|
123
|
+
` Relations: ${stats.relations} (${stats.pendingConflicts} pending)`,
|
|
124
|
+
` Caveman compression: ${config.cavemanMode !== "off" ? config.cavemanMode : "off (storing raw)"}`
|
|
125
|
+
];
|
|
126
|
+
return lines.join("\n");
|
|
127
|
+
}
|
|
128
|
+
case "kirograph_mem_review": {
|
|
129
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
130
|
+
const projectRoot = args.projectPath ?? cg.getProjectRoot();
|
|
131
|
+
const config = await loadConfig(projectRoot);
|
|
132
|
+
if (!config.enableMemory) return "Memory is not enabled.";
|
|
133
|
+
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
134
|
+
const db = cg.getDatabase();
|
|
135
|
+
db.applyMemorySchema();
|
|
136
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
137
|
+
mem.initialize();
|
|
138
|
+
const obs = mem.getObservationsForReview(args.limit ?? 20);
|
|
139
|
+
if (obs.length === 0) return "No overdue observations \u2014 all review_after dates are in the future.";
|
|
140
|
+
const now = Date.now();
|
|
141
|
+
return obs.map((o, i) => {
|
|
142
|
+
const daysOverdue = Math.floor((now - (o.reviewAfter ?? now)) / 864e5);
|
|
143
|
+
return `${i + 1}. [${o.kind}]${o.topicKey ? ` (${o.topicKey})` : ""} ${o.content.slice(0, 120)} \u2014 overdue by ${daysOverdue}d`;
|
|
144
|
+
}).join("\n");
|
|
145
|
+
}
|
|
146
|
+
case "kirograph_mem_mark_reviewed": {
|
|
147
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
148
|
+
const projectRoot = args.projectPath ?? cg.getProjectRoot();
|
|
149
|
+
const config = await loadConfig(projectRoot);
|
|
150
|
+
if (!config.enableMemory) return "Memory is not enabled.";
|
|
151
|
+
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
152
|
+
const db = cg.getDatabase();
|
|
153
|
+
db.applyMemorySchema();
|
|
154
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
155
|
+
mem.initialize();
|
|
156
|
+
mem.markReviewed(args.id);
|
|
157
|
+
return `Observation ${args.id} marked as reviewed.`;
|
|
158
|
+
}
|
|
159
|
+
case "kirograph_mem_compare": {
|
|
160
|
+
if (!args.observationA || !args.observationB || !args.relation) {
|
|
161
|
+
return "Error: observationA, observationB, and relation are required.";
|
|
162
|
+
}
|
|
163
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
164
|
+
const projectRoot = args.projectPath ?? cg.getProjectRoot();
|
|
165
|
+
const config = await loadConfig(projectRoot);
|
|
166
|
+
if (!config.enableMemory) return "Memory is not enabled.";
|
|
167
|
+
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
168
|
+
const db = cg.getDatabase();
|
|
169
|
+
db.applyMemorySchema();
|
|
170
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
171
|
+
mem.initialize();
|
|
172
|
+
const relationId = mem.compareObservations({
|
|
173
|
+
observationA: args.observationA,
|
|
174
|
+
observationB: args.observationB,
|
|
175
|
+
relation: args.relation,
|
|
176
|
+
confidence: args.confidence ?? 1,
|
|
177
|
+
reason: args.reason,
|
|
178
|
+
evidence: args.evidence
|
|
179
|
+
});
|
|
180
|
+
return `Relation ${relationId} created (${args.relation}, confidence: ${args.confidence ?? 1}). Use kirograph_mem_judge to finalize.`;
|
|
181
|
+
}
|
|
182
|
+
case "kirograph_mem_judge": {
|
|
183
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
184
|
+
const projectRoot = args.projectPath ?? cg.getProjectRoot();
|
|
185
|
+
const config = await loadConfig(projectRoot);
|
|
186
|
+
if (!config.enableMemory) return "Memory is not enabled.";
|
|
187
|
+
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
188
|
+
const db = cg.getDatabase();
|
|
189
|
+
db.applyMemorySchema();
|
|
190
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
191
|
+
mem.initialize();
|
|
192
|
+
mem.judgeRelation(
|
|
193
|
+
args.relationId,
|
|
194
|
+
args.relation,
|
|
195
|
+
args.confidence,
|
|
196
|
+
args.reason,
|
|
197
|
+
args.evidence
|
|
198
|
+
);
|
|
199
|
+
return `Relation ${args.relationId} judged as [${args.relation}] (confidence: ${args.confidence}).`;
|
|
200
|
+
}
|
|
201
|
+
case "kirograph_mem_capture": {
|
|
202
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
203
|
+
const projectRoot = args.projectPath ?? cg.getProjectRoot();
|
|
204
|
+
const config = await loadConfig(projectRoot);
|
|
205
|
+
if (!config.enableMemory) return "Memory is not enabled.";
|
|
206
|
+
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
207
|
+
const db = cg.getDatabase();
|
|
208
|
+
db.applyMemorySchema();
|
|
209
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
210
|
+
mem.initialize();
|
|
211
|
+
const extracted = mem.capturePassive(args.content);
|
|
212
|
+
if (extracted.length === 0) return "No structured sections found. Use ## Key Learnings, ## Observations, ## Decisions, or ## Key Changes headings.";
|
|
213
|
+
return `Captured ${extracted.length} observation(s):
|
|
214
|
+
` + extracted.map((e, i) => `${i + 1}. [${e.kind}] ${e.content.slice(0, 100)}${e.id ? "" : " (duplicate)"}`).join("\n");
|
|
215
|
+
}
|
|
216
|
+
case "kirograph_mem_save_prompt": {
|
|
217
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
218
|
+
const projectRoot = args.projectPath ?? cg.getProjectRoot();
|
|
219
|
+
const config = await loadConfig(projectRoot);
|
|
220
|
+
if (!config.enableMemory) return "Memory is not enabled.";
|
|
221
|
+
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
222
|
+
const db = cg.getDatabase();
|
|
223
|
+
db.applyMemorySchema();
|
|
224
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
225
|
+
mem.initialize();
|
|
226
|
+
const id = await mem.savePrompt(args.content);
|
|
227
|
+
return `Prompt saved as ${id}.`;
|
|
228
|
+
}
|
|
229
|
+
case "kirograph_mem_suggest_topic_key": {
|
|
230
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
231
|
+
const projectRoot = args.projectPath ?? cg.getProjectRoot();
|
|
232
|
+
const config = await loadConfig(projectRoot);
|
|
233
|
+
if (!config.enableMemory) return "Memory is not enabled.";
|
|
234
|
+
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
235
|
+
const db = cg.getDatabase();
|
|
236
|
+
db.applyMemorySchema();
|
|
237
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
238
|
+
mem.initialize();
|
|
239
|
+
const key = mem.suggestTopicKey(args.kind, args.title);
|
|
240
|
+
return `Suggested topic_key: ${key}`;
|
|
241
|
+
}
|
|
242
|
+
case "kirograph_mem_conflicts_scan": {
|
|
243
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
244
|
+
const projectRoot = args.projectPath ?? cg.getProjectRoot();
|
|
245
|
+
const config = await loadConfig(projectRoot);
|
|
246
|
+
if (!config.enableMemory) return "Memory is not enabled.";
|
|
247
|
+
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
248
|
+
const db = cg.getDatabase();
|
|
249
|
+
db.applyMemorySchema();
|
|
250
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
251
|
+
mem.initialize();
|
|
252
|
+
const candidates = mem.scanConflicts(args.limit ?? 50);
|
|
253
|
+
if (candidates.length === 0) return "No potential conflicts found among recent observations.";
|
|
254
|
+
return `Found ${candidates.length} potential conflict(s):
|
|
255
|
+
` + candidates.map(
|
|
256
|
+
(c, i) => `${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)})`
|
|
257
|
+
).join("\n") + "\n\nUse kirograph_mem_compare to establish relations.";
|
|
258
|
+
}
|
|
259
|
+
case "kirograph_mem_prune": {
|
|
260
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
261
|
+
const projectRoot = args.projectPath ?? cg.getProjectRoot();
|
|
262
|
+
const config = await loadConfig(projectRoot);
|
|
263
|
+
if (!config.enableMemory) return "Memory is not enabled.";
|
|
264
|
+
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
265
|
+
const db = cg.getDatabase();
|
|
266
|
+
db.applyMemorySchema();
|
|
267
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
268
|
+
mem.initialize();
|
|
269
|
+
const olderThan = args.olderThan ?? "90d";
|
|
270
|
+
const durationMs = (() => {
|
|
271
|
+
const m = olderThan.match(/^(\d+)(d|m|w|h)$/);
|
|
272
|
+
if (!m) return 90 * 864e5;
|
|
273
|
+
const v = parseInt(m[1]);
|
|
274
|
+
switch (m[2]) {
|
|
275
|
+
case "h":
|
|
276
|
+
return v * 36e5;
|
|
277
|
+
case "d":
|
|
278
|
+
return v * 864e5;
|
|
279
|
+
case "w":
|
|
280
|
+
return v * 7 * 864e5;
|
|
281
|
+
case "m":
|
|
282
|
+
return v * 30 * 864e5;
|
|
283
|
+
default:
|
|
284
|
+
return 90 * 864e5;
|
|
285
|
+
}
|
|
286
|
+
})();
|
|
287
|
+
const deleted = mem.prune(durationMs);
|
|
288
|
+
return `Pruned ${deleted} observation(s) older than ${olderThan}.`;
|
|
289
|
+
}
|
|
290
|
+
case "kirograph_mem_lint": {
|
|
291
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
292
|
+
const projectRoot = args.projectPath ?? cg.getProjectRoot();
|
|
293
|
+
const config = await loadConfig(projectRoot);
|
|
294
|
+
if (!config.enableMemory) return "Memory is not enabled.";
|
|
295
|
+
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
296
|
+
const db = cg.getDatabase();
|
|
297
|
+
db.applyMemorySchema();
|
|
298
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
299
|
+
mem.initialize();
|
|
300
|
+
const result = mem.lint();
|
|
301
|
+
const lines = ["Memory Lint Results:"];
|
|
302
|
+
lines.push(` Stale links: ${result.staleLinks}`);
|
|
303
|
+
lines.push(` Model mismatch: ${result.modelMismatch ? "yes" : "no"}`);
|
|
304
|
+
lines.push(` Stale sessions: ${result.staleSessions} (auto-closed)`);
|
|
305
|
+
if (args.fix && result.staleLinks > 0) {
|
|
306
|
+
const removed = mem.removeStaleLinks();
|
|
307
|
+
lines.push(`
|
|
308
|
+
\u2713 Removed ${removed} stale link(s)`);
|
|
309
|
+
} else if (result.staleLinks > 0) {
|
|
310
|
+
lines.push(`
|
|
311
|
+
Pass fix: true to remove stale links.`);
|
|
312
|
+
}
|
|
313
|
+
if (result.modelMismatch) {
|
|
314
|
+
lines.push(`
|
|
315
|
+
Run 'kirograph mem reembed' to fix model mismatch.`);
|
|
316
|
+
}
|
|
317
|
+
return lines.join("\n");
|
|
318
|
+
}
|
|
319
|
+
case "kirograph_mem_conflicts_list": {
|
|
320
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
321
|
+
const projectRoot = args.projectPath ?? cg.getProjectRoot();
|
|
322
|
+
const config = await loadConfig(projectRoot);
|
|
323
|
+
if (!config.enableMemory) return "Memory is not enabled.";
|
|
324
|
+
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
325
|
+
const db = cg.getDatabase();
|
|
326
|
+
db.applyMemorySchema();
|
|
327
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
328
|
+
mem.initialize();
|
|
329
|
+
const limit = (0, import_utils.clampLimit)(args.limit, 20);
|
|
330
|
+
const pending = mem.getPendingRelations(limit);
|
|
331
|
+
if (pending.length === 0) return "No pending conflict relations.";
|
|
332
|
+
return `Pending relations (${pending.length}):
|
|
333
|
+
|
|
334
|
+
` + pending.map(
|
|
335
|
+
(r) => `[${r.id}] ${r.relation}
|
|
336
|
+
A: ${r.observationA}
|
|
337
|
+
B: ${r.observationB}${r.reason ? `
|
|
338
|
+
Reason: ${r.reason}` : ""}`
|
|
339
|
+
).join("\n\n") + "\n\nUse kirograph_mem_conflicts_ignore to dismiss, or kirograph_mem_judge to finalize.";
|
|
340
|
+
}
|
|
341
|
+
case "kirograph_mem_conflicts_ignore": {
|
|
342
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
|
|
343
|
+
const projectRoot = args.projectPath ?? cg.getProjectRoot();
|
|
344
|
+
const config = await loadConfig(projectRoot);
|
|
345
|
+
if (!config.enableMemory) return "Memory is not enabled.";
|
|
346
|
+
const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
|
|
347
|
+
const db = cg.getDatabase();
|
|
348
|
+
db.applyMemorySchema();
|
|
349
|
+
const mem = new MemoryManager(config, db.getRawDb());
|
|
350
|
+
mem.initialize();
|
|
351
|
+
const relationId = args.relationId;
|
|
352
|
+
mem.ignoreRelation(relationId);
|
|
353
|
+
return `Relation "${relationId}" ignored.`;
|
|
354
|
+
}
|
|
355
|
+
default:
|
|
356
|
+
return `Unknown tool: ${toolName}`;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
360
|
+
0 && (module.exports = {
|
|
361
|
+
handleMemory
|
|
362
|
+
});
|
|
363
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|