claude-cognitive 0.5.7 → 0.5.9
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/dist/cli/commands/consolidate.d.ts +10 -0
- package/dist/cli/commands/consolidate.d.ts.map +1 -0
- package/dist/cli/commands/consolidate.js +99 -0
- package/dist/cli/commands/consolidate.js.map +1 -0
- package/dist/cli/commands/index.d.ts +3 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +3 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/metrics.d.ts +10 -0
- package/dist/cli/commands/metrics.d.ts.map +1 -0
- package/dist/cli/commands/metrics.js +89 -0
- package/dist/cli/commands/metrics.js.map +1 -0
- package/dist/cli/commands/recall.d.ts.map +1 -1
- package/dist/cli/commands/recall.js +11 -0
- package/dist/cli/commands/recall.js.map +1 -1
- package/dist/cli/commands/retain.d.ts +10 -0
- package/dist/cli/commands/retain.d.ts.map +1 -0
- package/dist/cli/commands/retain.js +82 -0
- package/dist/cli/commands/retain.js.map +1 -0
- package/dist/cli/commands/sync-session.d.ts.map +1 -1
- package/dist/cli/commands/sync-session.js +26 -0
- package/dist/cli/commands/sync-session.js.map +1 -1
- package/dist/cli/index.js +4 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/diff.d.ts +33 -0
- package/dist/cli/utils/diff.d.ts.map +1 -0
- package/dist/cli/utils/diff.js +88 -0
- package/dist/cli/utils/diff.js.map +1 -0
- package/dist/client.d.ts +61 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +78 -0
- package/dist/client.js.map +1 -1
- package/dist/consolidate/index.d.ts +7 -0
- package/dist/consolidate/index.d.ts.map +1 -0
- package/dist/consolidate/index.js +6 -0
- package/dist/consolidate/index.js.map +1 -0
- package/dist/consolidate/pruner.d.ts +36 -0
- package/dist/consolidate/pruner.d.ts.map +1 -0
- package/dist/consolidate/pruner.js +106 -0
- package/dist/consolidate/pruner.js.map +1 -0
- package/dist/feedback/tracker.js +1 -1
- package/dist/feedback/tracker.js.map +1 -1
- package/dist/mind.d.ts +28 -1
- package/dist/mind.d.ts.map +1 -1
- package/dist/mind.js +77 -2
- package/dist/mind.js.map +1 -1
- package/dist/types.d.ts +88 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI consolidate command - analyze and identify low-value memories for pruning.
|
|
3
|
+
* @module cli/commands/consolidate
|
|
4
|
+
*/
|
|
5
|
+
import type { CAC } from "cac";
|
|
6
|
+
/**
|
|
7
|
+
* Register the consolidate command.
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerConsolidateCommand(cli: CAC): void;
|
|
10
|
+
//# sourceMappingURL=consolidate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/consolidate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAiE/B;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA2FzD"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI consolidate command - analyze and identify low-value memories for pruning.
|
|
3
|
+
* @module cli/commands/consolidate
|
|
4
|
+
*/
|
|
5
|
+
import { Mind } from "../../mind.js";
|
|
6
|
+
import { analyzePruningCandidates } from "../../consolidate/index.js";
|
|
7
|
+
import { CLIError, ExitCode, info, output, warn } from "../utils/index.js";
|
|
8
|
+
/**
|
|
9
|
+
* Format consolidation report for human-readable output.
|
|
10
|
+
*/
|
|
11
|
+
function formatConsolidationReport(report) {
|
|
12
|
+
const lines = [];
|
|
13
|
+
lines.push("Memory Consolidation Report");
|
|
14
|
+
lines.push("=".repeat(40));
|
|
15
|
+
lines.push("");
|
|
16
|
+
lines.push(`Bank: ${report.bankId}`);
|
|
17
|
+
lines.push(`Total memories: ${report.totalMemories}`);
|
|
18
|
+
lines.push("");
|
|
19
|
+
lines.push("Pruning criteria:");
|
|
20
|
+
lines.push(` Min usefulness: ${((report.criteria.minUsefulness ?? 0.3) * 100).toFixed(0)}%`);
|
|
21
|
+
lines.push(` Min signals: ${report.criteria.minSignals ?? 5}`);
|
|
22
|
+
lines.push("");
|
|
23
|
+
if (report.candidates.length === 0) {
|
|
24
|
+
lines.push("No pruning candidates found.");
|
|
25
|
+
lines.push("All memories meet the usefulness threshold.");
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
lines.push(`Found ${report.candidates.length} pruning candidate(s):`);
|
|
29
|
+
lines.push("");
|
|
30
|
+
for (const candidate of report.candidates.slice(0, 20)) {
|
|
31
|
+
const score = (candidate.usefulnessScore * 100).toFixed(0);
|
|
32
|
+
const text = candidate.text.slice(0, 50) + (candidate.text.length > 50 ? "..." : "");
|
|
33
|
+
lines.push(` [${score}%] "${text}"`);
|
|
34
|
+
lines.push(` ${candidate.reason}`);
|
|
35
|
+
}
|
|
36
|
+
if (report.candidates.length > 20) {
|
|
37
|
+
lines.push("");
|
|
38
|
+
lines.push(` ... and ${report.candidates.length - 20} more`);
|
|
39
|
+
}
|
|
40
|
+
lines.push("");
|
|
41
|
+
lines.push("NOTE: Automatic deletion is not yet supported.");
|
|
42
|
+
lines.push("Individual fact deletion requires an upstream Hindsight API change.");
|
|
43
|
+
}
|
|
44
|
+
return lines.join("\n");
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Register the consolidate command.
|
|
48
|
+
*/
|
|
49
|
+
export function registerConsolidateCommand(cli) {
|
|
50
|
+
cli
|
|
51
|
+
.command("consolidate", "Analyze and identify low-value memories for pruning")
|
|
52
|
+
.option("--project <path>", "Project directory (default: current directory)")
|
|
53
|
+
.option("--dry-run", "Only show what would be pruned (default behavior)")
|
|
54
|
+
.option("--min-usefulness <score>", "Minimum usefulness score threshold (0.0-1.0, default: 0.3)")
|
|
55
|
+
.option("--min-signals <count>", "Minimum signal count to consider (default: 5)")
|
|
56
|
+
.option("--json", "Output as JSON")
|
|
57
|
+
.option("--quiet", "Suppress output")
|
|
58
|
+
.action(async (options) => {
|
|
59
|
+
const projectPath = options.project ?? process.cwd();
|
|
60
|
+
const mind = new Mind({ projectPath });
|
|
61
|
+
await mind.init();
|
|
62
|
+
if (mind.isDegraded) {
|
|
63
|
+
throw new CLIError("Cannot consolidate: Hindsight is unavailable.", ExitCode.CONNECTION_ERROR, "Make sure Hindsight is running and accessible.");
|
|
64
|
+
}
|
|
65
|
+
// Parse and validate criteria
|
|
66
|
+
let minUsefulness;
|
|
67
|
+
if (options.minUsefulness !== undefined) {
|
|
68
|
+
minUsefulness = parseFloat(options.minUsefulness);
|
|
69
|
+
if (isNaN(minUsefulness) || minUsefulness < 0 || minUsefulness > 1) {
|
|
70
|
+
throw new CLIError("Invalid --min-usefulness: must be a number between 0.0 and 1.0", ExitCode.CONFIG_ERROR);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
let minSignals;
|
|
74
|
+
if (options.minSignals !== undefined) {
|
|
75
|
+
minSignals = parseInt(options.minSignals, 10);
|
|
76
|
+
if (isNaN(minSignals) || minSignals < 0) {
|
|
77
|
+
throw new CLIError("Invalid --min-signals: must be a non-negative integer", ExitCode.CONFIG_ERROR);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
info("Analyzing memory bank for pruning candidates...", options);
|
|
81
|
+
const client = mind.getClient();
|
|
82
|
+
if (!client) {
|
|
83
|
+
throw new CLIError("Cannot get client: Mind is in degraded mode", ExitCode.CONNECTION_ERROR);
|
|
84
|
+
}
|
|
85
|
+
// Build options object, only including defined values
|
|
86
|
+
const analysisOptions = {};
|
|
87
|
+
if (minUsefulness !== undefined)
|
|
88
|
+
analysisOptions.minUsefulness = minUsefulness;
|
|
89
|
+
if (minSignals !== undefined)
|
|
90
|
+
analysisOptions.minSignals = minSignals;
|
|
91
|
+
const report = await analyzePruningCandidates(client, mind.getBankId(), analysisOptions);
|
|
92
|
+
// Note about dry-run being the only mode currently
|
|
93
|
+
if (!options.dryRun && report.candidates.length > 0) {
|
|
94
|
+
warn("Note: Automatic deletion not yet supported. Showing report only.", options);
|
|
95
|
+
}
|
|
96
|
+
output(report, formatConsolidationReport, options);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=consolidate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidate.js","sourceRoot":"","sources":["../../../src/cli/commands/consolidate.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,4 +18,7 @@ export { registerSyncSessionCommand } from "./sync-session.js";
|
|
|
18
18
|
export { registerUpdateCommand } from "./update.js";
|
|
19
19
|
export { registerFeedbackStatsCommand } from "./feedback-stats.js";
|
|
20
20
|
export { registerFeedbackSyncCommand } from "./feedback-sync.js";
|
|
21
|
+
export { registerMetricsCommand } from "./metrics.js";
|
|
22
|
+
export { registerConsolidateCommand } from "./consolidate.js";
|
|
23
|
+
export { registerRetainCommand } from "./retain.js";
|
|
21
24
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -18,4 +18,7 @@ export { registerSyncSessionCommand } from "./sync-session.js";
|
|
|
18
18
|
export { registerUpdateCommand } from "./update.js";
|
|
19
19
|
export { registerFeedbackStatsCommand } from "./feedback-stats.js";
|
|
20
20
|
export { registerFeedbackSyncCommand } from "./feedback-sync.js";
|
|
21
|
+
export { registerMetricsCommand } from "./metrics.js";
|
|
22
|
+
export { registerConsolidateCommand } from "./consolidate.js";
|
|
23
|
+
export { registerRetainCommand } from "./retain.js";
|
|
21
24
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI metrics command - show memory effectiveness metrics.
|
|
3
|
+
* @module cli/commands/metrics
|
|
4
|
+
*/
|
|
5
|
+
import type { CAC } from "cac";
|
|
6
|
+
/**
|
|
7
|
+
* Register the metrics command.
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerMetricsCommand(cli: CAC): void;
|
|
10
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/metrics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAyF/B;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA2BrD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI metrics command - show memory effectiveness metrics.
|
|
3
|
+
* @module cli/commands/metrics
|
|
4
|
+
*/
|
|
5
|
+
import { Mind } from "../../mind.js";
|
|
6
|
+
import { CLIError, ExitCode, output } from "../utils/index.js";
|
|
7
|
+
/**
|
|
8
|
+
* Format metrics for human-readable output.
|
|
9
|
+
*/
|
|
10
|
+
function formatMetrics(result) {
|
|
11
|
+
const lines = [];
|
|
12
|
+
lines.push("Memory Health Report");
|
|
13
|
+
lines.push("=".repeat(40));
|
|
14
|
+
lines.push("");
|
|
15
|
+
// Total facts by type
|
|
16
|
+
lines.push(`Total facts: ${result.totalFacts}`);
|
|
17
|
+
const typeBreakdown = Object.entries(result.factsByType)
|
|
18
|
+
.filter(([, count]) => count > 0)
|
|
19
|
+
.map(([type, count]) => `${type}: ${count}`)
|
|
20
|
+
.join(" | ");
|
|
21
|
+
if (typeBreakdown) {
|
|
22
|
+
lines.push(` ${typeBreakdown}`);
|
|
23
|
+
}
|
|
24
|
+
// Signal breakdown
|
|
25
|
+
if (result.bankStats) {
|
|
26
|
+
const stats = result.bankStats;
|
|
27
|
+
lines.push("");
|
|
28
|
+
lines.push(`Signal breakdown (${stats.totalSignals} total signals):`);
|
|
29
|
+
const dist = stats.signalDistribution;
|
|
30
|
+
const total = stats.totalSignals || 1;
|
|
31
|
+
for (const [type, count] of Object.entries(dist)) {
|
|
32
|
+
const pct = ((count / total) * 100).toFixed(0);
|
|
33
|
+
lines.push(` ${type}: ${count} (${pct}%)`);
|
|
34
|
+
}
|
|
35
|
+
lines.push("");
|
|
36
|
+
lines.push(`Average usefulness: ${(stats.averageUsefulness * 100).toFixed(0)}%`);
|
|
37
|
+
// Top useful memories
|
|
38
|
+
if (stats.topUsefulFacts.length > 0) {
|
|
39
|
+
lines.push("");
|
|
40
|
+
lines.push("Top 5 most useful memories:");
|
|
41
|
+
for (const fact of stats.topUsefulFacts.slice(0, 5)) {
|
|
42
|
+
const score = (fact.score * 100).toFixed(0);
|
|
43
|
+
const text = fact.text.slice(0, 60) + (fact.text.length > 60 ? "..." : "");
|
|
44
|
+
lines.push(` - "${text}" (${score}%)`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Least useful / pruning candidates
|
|
48
|
+
if (stats.leastUsefulFacts.length > 0) {
|
|
49
|
+
lines.push("");
|
|
50
|
+
lines.push("Least useful memories (pruning candidates):");
|
|
51
|
+
for (const fact of stats.leastUsefulFacts.slice(0, 5)) {
|
|
52
|
+
const score = (fact.score * 100).toFixed(0);
|
|
53
|
+
const text = fact.text.slice(0, 60) + (fact.text.length > 60 ? "..." : "");
|
|
54
|
+
lines.push(` - "${text}" (${score}%)`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
lines.push("");
|
|
60
|
+
lines.push("No signal data available yet.");
|
|
61
|
+
lines.push("Signals are collected when memories are recalled and used.");
|
|
62
|
+
}
|
|
63
|
+
if (result.pruningCandidates > 0) {
|
|
64
|
+
lines.push("");
|
|
65
|
+
lines.push(`Candidates for pruning: ${result.pruningCandidates} facts (score < 30%)`);
|
|
66
|
+
}
|
|
67
|
+
return lines.join("\n");
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Register the metrics command.
|
|
71
|
+
*/
|
|
72
|
+
export function registerMetricsCommand(cli) {
|
|
73
|
+
cli
|
|
74
|
+
.command("metrics", "Show memory effectiveness metrics")
|
|
75
|
+
.option("--project <path>", "Project directory (default: current directory)")
|
|
76
|
+
.option("--json", "Output as JSON")
|
|
77
|
+
.option("--quiet", "Suppress output")
|
|
78
|
+
.action(async (options) => {
|
|
79
|
+
const projectPath = options.project ?? process.cwd();
|
|
80
|
+
const mind = new Mind({ projectPath });
|
|
81
|
+
await mind.init();
|
|
82
|
+
if (mind.isDegraded) {
|
|
83
|
+
throw new CLIError("Cannot get metrics: Hindsight is unavailable.", ExitCode.CONNECTION_ERROR, "Make sure Hindsight is running and accessible.");
|
|
84
|
+
}
|
|
85
|
+
const result = await mind.getMetrics();
|
|
86
|
+
output(result, formatMetrics, options);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/cli/commands/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/recall.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/recall.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAmB/B;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA4EpD"}
|
|
@@ -16,6 +16,7 @@ export function registerRecallCommand(cli) {
|
|
|
16
16
|
.option("--limit <n>", "Maximum number of results")
|
|
17
17
|
.option("--json", "Output as JSON")
|
|
18
18
|
.option("--quiet", "Suppress output")
|
|
19
|
+
.option("--dry-run", "Preview search without tracking for feedback")
|
|
19
20
|
.action(async (query, options) => {
|
|
20
21
|
const projectPath = options.project ?? process.cwd();
|
|
21
22
|
// Validate options
|
|
@@ -41,6 +42,16 @@ export function registerRecallCommand(cli) {
|
|
|
41
42
|
if (options.budget) {
|
|
42
43
|
recallOptions.budget = options.budget;
|
|
43
44
|
}
|
|
45
|
+
if (options.dryRun) {
|
|
46
|
+
recallOptions.skipTracking = true;
|
|
47
|
+
}
|
|
48
|
+
// Show dry-run banner
|
|
49
|
+
if (options.dryRun && !options.quiet && !options.json) {
|
|
50
|
+
console.log("=".repeat(60));
|
|
51
|
+
console.log("DRY RUN - Results will not be tracked for feedback");
|
|
52
|
+
console.log("=".repeat(60));
|
|
53
|
+
console.log();
|
|
54
|
+
}
|
|
44
55
|
const memories = await mind.recall(query, recallOptions);
|
|
45
56
|
// Apply limit if specified
|
|
46
57
|
const limited = options.limit
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recall.js","sourceRoot":"","sources":["../../../src/cli/commands/recall.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAMrC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"recall.js","sourceRoot":"","sources":["../../../src/cli/commands/recall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI retain command - store content in memory.
|
|
3
|
+
* @module cli/commands/retain
|
|
4
|
+
*/
|
|
5
|
+
import type { CAC } from "cac";
|
|
6
|
+
/**
|
|
7
|
+
* Register the retain command.
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerRetainCommand(cli: CAC): void;
|
|
10
|
+
//# sourceMappingURL=retain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retain.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/retain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AA0D/B;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA0DpD"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI retain command - store content in memory.
|
|
3
|
+
* @module cli/commands/retain
|
|
4
|
+
*/
|
|
5
|
+
import { Mind } from "../../mind.js";
|
|
6
|
+
import { CLIError, ExitCode, info, output } from "../utils/index.js";
|
|
7
|
+
/**
|
|
8
|
+
* Truncate string to max length with ellipsis.
|
|
9
|
+
*/
|
|
10
|
+
function truncate(s, maxLen) {
|
|
11
|
+
return s.length > maxLen ? s.slice(0, maxLen) + "..." : s;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Format retain result for human-readable output.
|
|
15
|
+
*/
|
|
16
|
+
function formatRetainResult(result) {
|
|
17
|
+
const lines = [];
|
|
18
|
+
if (result.dryRun) {
|
|
19
|
+
lines.push("=== DRY RUN - Nothing was stored ===");
|
|
20
|
+
lines.push("");
|
|
21
|
+
}
|
|
22
|
+
lines.push(`Content: "${truncate(result.content, 100)}"`);
|
|
23
|
+
lines.push(`Length: ${result.contentLength} characters`);
|
|
24
|
+
lines.push(`Type: ${result.factType}`);
|
|
25
|
+
if (result.context) {
|
|
26
|
+
lines.push(`Context: ${result.context}`);
|
|
27
|
+
}
|
|
28
|
+
lines.push(`Destination: ${result.destination}`);
|
|
29
|
+
if (!result.dryRun) {
|
|
30
|
+
lines.push("");
|
|
31
|
+
lines.push("Memory stored successfully.");
|
|
32
|
+
}
|
|
33
|
+
return lines.join("\n");
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Register the retain command.
|
|
37
|
+
*/
|
|
38
|
+
export function registerRetainCommand(cli) {
|
|
39
|
+
cli
|
|
40
|
+
.command("retain <content>", "Store content in memory")
|
|
41
|
+
.option("--project <path>", "Project directory (default: current directory)")
|
|
42
|
+
.option("--context <ctx>", "Additional context for the memory")
|
|
43
|
+
.option("--type <type>", "Memory type: world, experience, opinion (default: experience)")
|
|
44
|
+
.option("--dry-run", "Preview what would be stored without storing")
|
|
45
|
+
.option("--json", "Output as JSON")
|
|
46
|
+
.option("--quiet", "Suppress output")
|
|
47
|
+
.action(async (content, options) => {
|
|
48
|
+
const projectPath = options.project ?? process.cwd();
|
|
49
|
+
// Validate type
|
|
50
|
+
const validTypes = [
|
|
51
|
+
"world",
|
|
52
|
+
"experience",
|
|
53
|
+
"opinion",
|
|
54
|
+
"observation",
|
|
55
|
+
];
|
|
56
|
+
const factType = options.type ?? "experience";
|
|
57
|
+
if (options.type && !validTypes.includes(factType)) {
|
|
58
|
+
throw new CLIError(`Invalid type: ${options.type}. Use one of: ${validTypes.join(", ")}`, ExitCode.CONFIG_ERROR);
|
|
59
|
+
}
|
|
60
|
+
const mind = new Mind({ projectPath });
|
|
61
|
+
await mind.init();
|
|
62
|
+
const destination = mind.isDegraded ? "offline" : "hindsight";
|
|
63
|
+
const result = {
|
|
64
|
+
stored: false,
|
|
65
|
+
content,
|
|
66
|
+
contentLength: content.length,
|
|
67
|
+
factType,
|
|
68
|
+
destination,
|
|
69
|
+
dryRun: options.dryRun ?? false,
|
|
70
|
+
};
|
|
71
|
+
if (options.context) {
|
|
72
|
+
result.context = options.context;
|
|
73
|
+
}
|
|
74
|
+
if (!options.dryRun) {
|
|
75
|
+
info(`Storing to ${destination}...`, options);
|
|
76
|
+
await mind.retain(content, options.context, factType);
|
|
77
|
+
result.stored = true;
|
|
78
|
+
}
|
|
79
|
+
output(result, formatRetainResult, options);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=retain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retain.js","sourceRoot":"","sources":["../../../src/cli/commands/retain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-session.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/sync-session.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"sync-session.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/sync-session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AA4E/B;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAuGzD"}
|
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
* CLI sync-session command - sync current session to Hindsight before /clear.
|
|
3
3
|
* @module cli/commands/sync-session
|
|
4
4
|
*/
|
|
5
|
+
import { readFile } from "node:fs/promises";
|
|
6
|
+
import { join } from "node:path";
|
|
5
7
|
import { Mind } from "../../mind.js";
|
|
6
8
|
import { readBuffer, formatBufferAsTranscript, clearBuffer, } from "../../hooks/buffer-message.js";
|
|
7
9
|
import { CLIError, ExitCode, info, output } from "../utils/index.js";
|
|
10
|
+
import { calculateMemoryDiff, formatMemoryDiff, } from "../utils/diff.js";
|
|
8
11
|
/**
|
|
9
12
|
* Format sync-session result for human-readable output.
|
|
10
13
|
*/
|
|
@@ -33,6 +36,10 @@ function formatSyncSessionResult(result) {
|
|
|
33
36
|
if (result.bufferCleared) {
|
|
34
37
|
lines.push(` Buffer cleared: yes`);
|
|
35
38
|
}
|
|
39
|
+
if (result.memoryDiff) {
|
|
40
|
+
lines.push("");
|
|
41
|
+
lines.push(formatMemoryDiff(result.memoryDiff));
|
|
42
|
+
}
|
|
36
43
|
return lines.join("\n");
|
|
37
44
|
}
|
|
38
45
|
/**
|
|
@@ -78,6 +85,15 @@ export function registerSyncSessionCommand(cli) {
|
|
|
78
85
|
output(result, formatSyncSessionResult, options);
|
|
79
86
|
return;
|
|
80
87
|
}
|
|
88
|
+
// Capture memory.md content before sync for diff
|
|
89
|
+
let beforeMemoryContent = null;
|
|
90
|
+
const memoryPath = join(projectPath, ".claude", "memory.md");
|
|
91
|
+
try {
|
|
92
|
+
beforeMemoryContent = await readFile(memoryPath, "utf-8");
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// File doesn't exist yet, that's okay
|
|
96
|
+
}
|
|
81
97
|
// Initialize Mind
|
|
82
98
|
info("Connecting to Hindsight...", options);
|
|
83
99
|
const mind = new Mind({ projectPath });
|
|
@@ -90,6 +106,16 @@ export function registerSyncSessionCommand(cli) {
|
|
|
90
106
|
const reflectResult = await mind.onSessionEnd(transcript);
|
|
91
107
|
result.synced = true;
|
|
92
108
|
result.opinionsFormed = reflectResult?.opinions.length ?? 0;
|
|
109
|
+
// Calculate memory diff if we had content before
|
|
110
|
+
if (beforeMemoryContent !== null) {
|
|
111
|
+
try {
|
|
112
|
+
const afterMemoryContent = await readFile(memoryPath, "utf-8");
|
|
113
|
+
result.memoryDiff = calculateMemoryDiff(beforeMemoryContent, afterMemoryContent);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// Ignore diff errors
|
|
117
|
+
}
|
|
118
|
+
}
|
|
93
119
|
// Clear buffer unless --keep-buffer is set
|
|
94
120
|
if (!options.keepBuffer) {
|
|
95
121
|
await clearBuffer(projectPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-session.js","sourceRoot":"","sources":["../../../src/cli/commands/sync-session.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"sync-session.js","sourceRoot":"","sources":["../../../src/cli/commands/sync-session.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { cac } from "cac";
|
|
6
6
|
import { createRequire } from "module";
|
|
7
7
|
import { handleError } from "./utils/index.js";
|
|
8
|
-
import { registerInitCommand, registerInstallCommand, registerUninstallCommand, registerServeCommand, registerStatusCommand, registerLearnCommand, registerRecallCommand, registerReflectCommand, registerSemanticCommand, registerConfigCommand, registerUpdateBankCommand, registerSyncCommand, registerSyncSessionCommand, registerUpdateCommand, registerFeedbackStatsCommand, registerFeedbackSyncCommand, } from "./commands/index.js";
|
|
8
|
+
import { registerInitCommand, registerInstallCommand, registerUninstallCommand, registerServeCommand, registerStatusCommand, registerLearnCommand, registerRecallCommand, registerReflectCommand, registerSemanticCommand, registerConfigCommand, registerUpdateBankCommand, registerSyncCommand, registerSyncSessionCommand, registerUpdateCommand, registerFeedbackStatsCommand, registerFeedbackSyncCommand, registerMetricsCommand, registerConsolidateCommand, registerRetainCommand, } from "./commands/index.js";
|
|
9
9
|
import { registerInjectContextCommand } from "../hooks/inject-context.js";
|
|
10
10
|
import { registerProcessSessionCommand } from "../hooks/process-session.js";
|
|
11
11
|
import { registerBufferMessageCommand } from "../hooks/buffer-message.js";
|
|
@@ -35,6 +35,9 @@ function createCLI() {
|
|
|
35
35
|
registerUpdateCommand(cli);
|
|
36
36
|
registerFeedbackStatsCommand(cli);
|
|
37
37
|
registerFeedbackSyncCommand(cli);
|
|
38
|
+
registerMetricsCommand(cli);
|
|
39
|
+
registerConsolidateCommand(cli);
|
|
40
|
+
registerRetainCommand(cli);
|
|
38
41
|
// Register hook commands
|
|
39
42
|
registerInjectContextCommand(cli);
|
|
40
43
|
registerProcessSessionCommand(cli);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAAY,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,EACrB,4BAA4B,EAC5B,2BAA2B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAAY,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,EACrB,4BAA4B,EAC5B,2BAA2B,EAC3B,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAE1E,4CAA4C;AAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AACjE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AAE5B;;GAEG;AACH,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAEpC,oBAAoB;IACpB,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC5B,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAC9B,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC5B,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC7B,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC/B,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAChC,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAClC,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACjC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC5B,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAChC,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAE3B,yBAAyB;IACzB,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAClC,6BAA6B,CAAC,GAAG,CAAC,CAAC;IACnC,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAElC,cAAc;IACd,GAAG,CAAC,IAAI,EAAE,CAAC;IAEX,UAAU;IACV,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAErB,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IAExB,IAAI,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,iCAAiC;AACjC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,WAAW,CAAC,KAAK,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for calculating and displaying memory diffs.
|
|
3
|
+
* @module cli/utils/diff
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Result of comparing two versions of memory content.
|
|
7
|
+
*/
|
|
8
|
+
export interface MemoryDiff {
|
|
9
|
+
/** Whether any changes were detected */
|
|
10
|
+
hasChanges: boolean;
|
|
11
|
+
/** Number of lines added */
|
|
12
|
+
linesAdded: number;
|
|
13
|
+
/** Number of lines removed */
|
|
14
|
+
linesRemoved: number;
|
|
15
|
+
/** Section names that were modified */
|
|
16
|
+
sectionsChanged: string[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Calculate diff between two versions of memory.md content.
|
|
20
|
+
*
|
|
21
|
+
* @param before - Content before sync
|
|
22
|
+
* @param after - Content after sync
|
|
23
|
+
* @returns Diff summary
|
|
24
|
+
*/
|
|
25
|
+
export declare function calculateMemoryDiff(before: string, after: string): MemoryDiff;
|
|
26
|
+
/**
|
|
27
|
+
* Format memory diff for human-readable display.
|
|
28
|
+
*
|
|
29
|
+
* @param diff - Diff result to format
|
|
30
|
+
* @returns Formatted string
|
|
31
|
+
*/
|
|
32
|
+
export declare function formatMemoryDiff(diff: MemoryDiff): string;
|
|
33
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/diff.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAqC7E;AA+BD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAezD"}
|