claude-cognitive 0.1.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/LICENSE +21 -0
- package/README.md +256 -0
- package/bin/claude-cognitive.js +9 -0
- package/dist/agents/context.d.ts +40 -0
- package/dist/agents/context.d.ts.map +1 -0
- package/dist/agents/context.js +144 -0
- package/dist/agents/context.js.map +1 -0
- package/dist/agents/index.d.ts +9 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +11 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/loader.d.ts +48 -0
- package/dist/agents/loader.d.ts.map +1 -0
- package/dist/agents/loader.js +157 -0
- package/dist/agents/loader.js.map +1 -0
- package/dist/agents/templates.d.ts +51 -0
- package/dist/agents/templates.d.ts.map +1 -0
- package/dist/agents/templates.js +186 -0
- package/dist/agents/templates.js.map +1 -0
- package/dist/agents/types.d.ts +52 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +6 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/cli/commands/config.d.ts +10 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +22 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/index.d.ts +17 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +17 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +10 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +109 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +10 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +440 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/learn.d.ts +10 -0
- package/dist/cli/commands/learn.d.ts.map +1 -0
- package/dist/cli/commands/learn.js +33 -0
- package/dist/cli/commands/learn.js.map +1 -0
- package/dist/cli/commands/recall.d.ts +10 -0
- package/dist/cli/commands/recall.d.ts.map +1 -0
- package/dist/cli/commands/recall.js +52 -0
- package/dist/cli/commands/recall.js.map +1 -0
- package/dist/cli/commands/reflect.d.ts +10 -0
- package/dist/cli/commands/reflect.d.ts.map +1 -0
- package/dist/cli/commands/reflect.js +48 -0
- package/dist/cli/commands/reflect.js.map +1 -0
- package/dist/cli/commands/semantic.d.ts +10 -0
- package/dist/cli/commands/semantic.d.ts.map +1 -0
- package/dist/cli/commands/semantic.js +67 -0
- package/dist/cli/commands/semantic.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +10 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +61 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/status.d.ts +10 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +44 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +10 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +260 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/uninstall.d.ts +10 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.js +205 -0
- package/dist/cli/commands/uninstall.js.map +1 -0
- package/dist/cli/commands/update-bank.d.ts +10 -0
- package/dist/cli/commands/update-bank.d.ts.map +1 -0
- package/dist/cli/commands/update-bank.js +129 -0
- package/dist/cli/commands/update-bank.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +56 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/errors.d.ts +42 -0
- package/dist/cli/utils/errors.d.ts.map +1 -0
- package/dist/cli/utils/errors.js +78 -0
- package/dist/cli/utils/errors.js.map +1 -0
- package/dist/cli/utils/index.d.ts +9 -0
- package/dist/cli/utils/index.d.ts.map +1 -0
- package/dist/cli/utils/index.js +7 -0
- package/dist/cli/utils/index.js.map +1 -0
- package/dist/cli/utils/output.d.ts +90 -0
- package/dist/cli/utils/output.d.ts.map +1 -0
- package/dist/cli/utils/output.js +164 -0
- package/dist/cli/utils/output.js.map +1 -0
- package/dist/client.d.ts +200 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +447 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +44 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +264 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +72 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +188 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +148 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +115 -0
- package/dist/events.js.map +1 -0
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/inject-context.d.ts +18 -0
- package/dist/hooks/inject-context.d.ts.map +1 -0
- package/dist/hooks/inject-context.js +57 -0
- package/dist/hooks/inject-context.js.map +1 -0
- package/dist/hooks/process-session.d.ts +18 -0
- package/dist/hooks/process-session.d.ts.map +1 -0
- package/dist/hooks/process-session.js +119 -0
- package/dist/hooks/process-session.js.map +1 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/learn/analyzers/git.d.ts +62 -0
- package/dist/learn/analyzers/git.d.ts.map +1 -0
- package/dist/learn/analyzers/git.js +183 -0
- package/dist/learn/analyzers/git.js.map +1 -0
- package/dist/learn/analyzers/index.d.ts +15 -0
- package/dist/learn/analyzers/index.d.ts.map +1 -0
- package/dist/learn/analyzers/index.js +10 -0
- package/dist/learn/analyzers/index.js.map +1 -0
- package/dist/learn/analyzers/package.d.ts +57 -0
- package/dist/learn/analyzers/package.d.ts.map +1 -0
- package/dist/learn/analyzers/package.js +245 -0
- package/dist/learn/analyzers/package.js.map +1 -0
- package/dist/learn/analyzers/readme.d.ts +27 -0
- package/dist/learn/analyzers/readme.d.ts.map +1 -0
- package/dist/learn/analyzers/readme.js +163 -0
- package/dist/learn/analyzers/readme.js.map +1 -0
- package/dist/learn/analyzers/source.d.ts +70 -0
- package/dist/learn/analyzers/source.d.ts.map +1 -0
- package/dist/learn/analyzers/source.js +231 -0
- package/dist/learn/analyzers/source.js.map +1 -0
- package/dist/learn/analyzers/structure.d.ts +39 -0
- package/dist/learn/analyzers/structure.d.ts.map +1 -0
- package/dist/learn/analyzers/structure.js +172 -0
- package/dist/learn/analyzers/structure.js.map +1 -0
- package/dist/learn/extractor.d.ts +76 -0
- package/dist/learn/extractor.d.ts.map +1 -0
- package/dist/learn/extractor.js +302 -0
- package/dist/learn/extractor.js.map +1 -0
- package/dist/learn/index.d.ts +31 -0
- package/dist/learn/index.d.ts.map +1 -0
- package/dist/learn/index.js +165 -0
- package/dist/learn/index.js.map +1 -0
- package/dist/mcp/handlers.d.ts +23 -0
- package/dist/mcp/handlers.d.ts.map +1 -0
- package/dist/mcp/handlers.js +124 -0
- package/dist/mcp/handlers.js.map +1 -0
- package/dist/mcp/index.d.ts +32 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +40 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +79 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +277 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +59 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +43 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/types.d.ts +65 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +6 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/mind.d.ts +250 -0
- package/dist/mind.d.ts.map +1 -0
- package/dist/mind.js +637 -0
- package/dist/mind.js.map +1 -0
- package/dist/promotion.d.ts +112 -0
- package/dist/promotion.d.ts.map +1 -0
- package/dist/promotion.js +196 -0
- package/dist/promotion.js.map +1 -0
- package/dist/retry.d.ts +70 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +122 -0
- package/dist/retry.js.map +1 -0
- package/dist/semantic.d.ts +202 -0
- package/dist/semantic.d.ts.map +1 -0
- package/dist/semantic.js +424 -0
- package/dist/semantic.js.map +1 -0
- package/dist/types.d.ts +363 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +30 -0
- package/dist/types.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI init command - initialize claude-cognitive for a project.
|
|
3
|
+
* @module cli/commands/init
|
|
4
|
+
*/
|
|
5
|
+
import { mkdir, writeFile, access } from "node:fs/promises";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { Mind } from "../../mind.js";
|
|
8
|
+
import { CLIError, ExitCode, info, output } from "../utils/index.js";
|
|
9
|
+
/**
|
|
10
|
+
* Register the init command.
|
|
11
|
+
*/
|
|
12
|
+
export function registerInitCommand(cli) {
|
|
13
|
+
cli
|
|
14
|
+
.command("init", "Initialize claude-cognitive for the current project")
|
|
15
|
+
.option("--project <path>", "Project directory (default: current directory)")
|
|
16
|
+
.option("--bank-id <id>", "Memory bank ID (default: derived from project name)")
|
|
17
|
+
.option("--force", "Overwrite existing configuration")
|
|
18
|
+
.option("--json", "Output as JSON")
|
|
19
|
+
.option("--quiet", "Suppress output")
|
|
20
|
+
.action(async (options) => {
|
|
21
|
+
const projectPath = options.project ?? process.cwd();
|
|
22
|
+
const rcPath = join(projectPath, ".claudemindrc");
|
|
23
|
+
const semanticDir = join(projectPath, ".claude");
|
|
24
|
+
const semanticPath = join(semanticDir, "memory.md");
|
|
25
|
+
const result = {
|
|
26
|
+
rcPath,
|
|
27
|
+
semanticPath,
|
|
28
|
+
bankId: "",
|
|
29
|
+
created: {
|
|
30
|
+
rc: false,
|
|
31
|
+
semantic: false,
|
|
32
|
+
bank: false,
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
// Check if .claudemindrc exists
|
|
36
|
+
const rcExists = await access(rcPath)
|
|
37
|
+
.then(() => true)
|
|
38
|
+
.catch(() => false);
|
|
39
|
+
if (rcExists && !options.force) {
|
|
40
|
+
throw new CLIError("Configuration already exists. Use --force to overwrite.", ExitCode.CONFIG_ERROR, `Existing file: ${rcPath}`);
|
|
41
|
+
}
|
|
42
|
+
// Create default configuration
|
|
43
|
+
const defaultConfig = {
|
|
44
|
+
hindsight: {
|
|
45
|
+
host: "localhost",
|
|
46
|
+
port: 8888,
|
|
47
|
+
},
|
|
48
|
+
bankId: options.bankId,
|
|
49
|
+
disposition: {
|
|
50
|
+
skepticism: 3,
|
|
51
|
+
literalism: 3,
|
|
52
|
+
empathy: 3,
|
|
53
|
+
},
|
|
54
|
+
semantic: {
|
|
55
|
+
path: ".claude/memory.md",
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
// Write .claudemindrc
|
|
59
|
+
await writeFile(rcPath, JSON.stringify(defaultConfig, null, 2) + "\n");
|
|
60
|
+
result.created.rc = true;
|
|
61
|
+
info(`Created ${rcPath}`, options);
|
|
62
|
+
// Create .claude directory and memory.md if they don't exist
|
|
63
|
+
const semanticExists = await access(semanticPath)
|
|
64
|
+
.then(() => true)
|
|
65
|
+
.catch(() => false);
|
|
66
|
+
if (!semanticExists) {
|
|
67
|
+
await mkdir(semanticDir, { recursive: true });
|
|
68
|
+
const defaultSemantic = `# Project Memory
|
|
69
|
+
|
|
70
|
+
## Tech Stack
|
|
71
|
+
|
|
72
|
+
<!-- Add your tech stack here -->
|
|
73
|
+
|
|
74
|
+
## Key Decisions
|
|
75
|
+
|
|
76
|
+
<!-- Document important architectural decisions -->
|
|
77
|
+
|
|
78
|
+
## Critical Paths
|
|
79
|
+
|
|
80
|
+
<!-- List important code paths -->
|
|
81
|
+
|
|
82
|
+
## Observations
|
|
83
|
+
|
|
84
|
+
<!-- Promoted insights from Hindsight -->
|
|
85
|
+
`;
|
|
86
|
+
await writeFile(semanticPath, defaultSemantic);
|
|
87
|
+
result.created.semantic = true;
|
|
88
|
+
info(`Created ${semanticPath}`, options);
|
|
89
|
+
}
|
|
90
|
+
// Initialize Mind to create bank
|
|
91
|
+
try {
|
|
92
|
+
const mind = new Mind({ projectPath });
|
|
93
|
+
await mind.init();
|
|
94
|
+
result.bankId = mind.getBankId();
|
|
95
|
+
result.created.bank = !mind.isDegraded;
|
|
96
|
+
if (mind.isDegraded) {
|
|
97
|
+
info("Warning: Hindsight unavailable. Bank not created.", options);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
info(`Bank '${result.bankId}' ready`, options);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
info(`Warning: Could not connect to Hindsight: ${error instanceof Error ? error.message : error}`, options);
|
|
105
|
+
}
|
|
106
|
+
output(result, (r) => `Initialized claude-cognitive:\n Config: ${r.rcPath}\n Semantic: ${r.semanticPath}\n Bank: ${r.bankId || "(not created)"}`, options);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI install command - interactive installer for claude-cognitive.
|
|
3
|
+
* @module cli/commands/install
|
|
4
|
+
*/
|
|
5
|
+
import type { CAC } from "cac";
|
|
6
|
+
/**
|
|
7
|
+
* Register the install command.
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerInstallCommand(cli: CAC): void;
|
|
10
|
+
//# sourceMappingURL=install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAuM/B;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAgXrD"}
|
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI install command - interactive installer for claude-cognitive.
|
|
3
|
+
* @module cli/commands/install
|
|
4
|
+
*/
|
|
5
|
+
import { createInterface } from "node:readline";
|
|
6
|
+
import { mkdir, writeFile, readFile, access } from "node:fs/promises";
|
|
7
|
+
import { join, basename } from "node:path";
|
|
8
|
+
import { homedir } from "node:os";
|
|
9
|
+
import { Mind } from "../../mind.js";
|
|
10
|
+
const COLORS = {
|
|
11
|
+
reset: "\x1b[0m",
|
|
12
|
+
bright: "\x1b[1m",
|
|
13
|
+
dim: "\x1b[2m",
|
|
14
|
+
green: "\x1b[32m",
|
|
15
|
+
yellow: "\x1b[33m",
|
|
16
|
+
blue: "\x1b[34m",
|
|
17
|
+
cyan: "\x1b[36m",
|
|
18
|
+
};
|
|
19
|
+
function color(text, c) {
|
|
20
|
+
return `${COLORS[c]}${text}${COLORS.reset}`;
|
|
21
|
+
}
|
|
22
|
+
function print(text) {
|
|
23
|
+
console.log(text);
|
|
24
|
+
}
|
|
25
|
+
function printHeader() {
|
|
26
|
+
print("");
|
|
27
|
+
print(color("╔═══════════════════════════════════════════╗", "cyan"));
|
|
28
|
+
print(color("║ claude-cognitive interactive setup ║", "cyan"));
|
|
29
|
+
print(color("╚═══════════════════════════════════════════╝", "cyan"));
|
|
30
|
+
print("");
|
|
31
|
+
print(color("LLM thinks. Hindsight remembers. Together = mind.", "dim"));
|
|
32
|
+
print("");
|
|
33
|
+
}
|
|
34
|
+
function printStep(step, total, title) {
|
|
35
|
+
print("");
|
|
36
|
+
print(color(`[${step}/${total}] ${title}`, "bright"));
|
|
37
|
+
print(color("─".repeat(45), "dim"));
|
|
38
|
+
}
|
|
39
|
+
function printSuccess(text) {
|
|
40
|
+
print(color(`✓ ${text}`, "green"));
|
|
41
|
+
}
|
|
42
|
+
function printInfo(text) {
|
|
43
|
+
print(color(` ${text}`, "dim"));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a readline interface for prompts.
|
|
47
|
+
*/
|
|
48
|
+
function createPrompt() {
|
|
49
|
+
const rl = createInterface({
|
|
50
|
+
input: process.stdin,
|
|
51
|
+
output: process.stdout,
|
|
52
|
+
});
|
|
53
|
+
const ask = (question, defaultValue) => {
|
|
54
|
+
const defaultHint = defaultValue ? color(` (${defaultValue})`, "dim") : "";
|
|
55
|
+
return new Promise((resolve) => {
|
|
56
|
+
rl.question(` ${question}${defaultHint}: `, (answer) => {
|
|
57
|
+
resolve(answer.trim() || defaultValue || "");
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
const confirm = (question, defaultValue = true) => {
|
|
62
|
+
const hint = defaultValue ? "[Y/n]" : "[y/N]";
|
|
63
|
+
return new Promise((resolve) => {
|
|
64
|
+
rl.question(` ${question} ${color(hint, "dim")}: `, (answer) => {
|
|
65
|
+
if (!answer.trim()) {
|
|
66
|
+
resolve(defaultValue);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
resolve(answer.toLowerCase().startsWith("y"));
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
const select = (question, options, defaultIndex = 0) => {
|
|
75
|
+
print(` ${question}`);
|
|
76
|
+
options.forEach((opt, i) => {
|
|
77
|
+
const marker = i === defaultIndex ? color("→", "cyan") : " ";
|
|
78
|
+
const num = color(`${i + 1}`, "cyan");
|
|
79
|
+
print(` ${marker} ${num}. ${opt.label}`);
|
|
80
|
+
});
|
|
81
|
+
return new Promise((resolve) => {
|
|
82
|
+
rl.question(` ${color(`Enter choice (1-${options.length})`, "dim")}: `, (answer) => {
|
|
83
|
+
const idx = parseInt(answer.trim(), 10) - 1;
|
|
84
|
+
const selected = options[idx];
|
|
85
|
+
const defaultOpt = options[defaultIndex];
|
|
86
|
+
if (selected) {
|
|
87
|
+
resolve(selected.value);
|
|
88
|
+
}
|
|
89
|
+
else if (defaultOpt) {
|
|
90
|
+
resolve(defaultOpt.value);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
// This should never happen since we require minItems: 2
|
|
94
|
+
const firstOpt = options[0];
|
|
95
|
+
resolve(firstOpt ? firstOpt.value : "");
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
const close = () => {
|
|
101
|
+
rl.close();
|
|
102
|
+
};
|
|
103
|
+
return { ask, confirm, select, close };
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Check if a file exists.
|
|
107
|
+
*/
|
|
108
|
+
async function fileExists(path) {
|
|
109
|
+
try {
|
|
110
|
+
await access(path);
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get the Claude Code MCP config path.
|
|
119
|
+
* - Global: ~/.claude.json
|
|
120
|
+
* - Project: .mcp.json in project root
|
|
121
|
+
*/
|
|
122
|
+
function getMcpConfigPath(global, projectPath) {
|
|
123
|
+
if (global) {
|
|
124
|
+
return join(homedir(), ".claude.json");
|
|
125
|
+
}
|
|
126
|
+
return join(projectPath, ".mcp.json");
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Read existing MCP config or return empty object.
|
|
130
|
+
*/
|
|
131
|
+
async function readMcpConfig(path) {
|
|
132
|
+
try {
|
|
133
|
+
const content = await readFile(path, "utf-8");
|
|
134
|
+
return JSON.parse(content);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return {};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get the command to run claude-cognitive serve.
|
|
142
|
+
* Detects if globally installed or uses local path.
|
|
143
|
+
*/
|
|
144
|
+
async function getServeCommand() {
|
|
145
|
+
// Check if claude-cognitive is globally installed
|
|
146
|
+
try {
|
|
147
|
+
const { execSync } = await import("node:child_process");
|
|
148
|
+
execSync("which claude-cognitive", { stdio: "ignore" });
|
|
149
|
+
return {
|
|
150
|
+
command: "claude-cognitive",
|
|
151
|
+
args: ["serve"],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// Use npx as fallback, or direct node path
|
|
156
|
+
return {
|
|
157
|
+
command: "npx",
|
|
158
|
+
args: ["claude-cognitive", "serve"],
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Register the install command.
|
|
164
|
+
*/
|
|
165
|
+
export function registerInstallCommand(cli) {
|
|
166
|
+
cli
|
|
167
|
+
.command("install", "Interactive installer for claude-cognitive")
|
|
168
|
+
.option("--project <path>", "Project directory (skips prompt)")
|
|
169
|
+
.action(async (options) => {
|
|
170
|
+
const prompt = createPrompt();
|
|
171
|
+
try {
|
|
172
|
+
printHeader();
|
|
173
|
+
const answers = {
|
|
174
|
+
projectPath: options.project || process.cwd(),
|
|
175
|
+
bankId: "",
|
|
176
|
+
disposition: { skepticism: 3, literalism: 3, empathy: 3 },
|
|
177
|
+
background: "",
|
|
178
|
+
configureClaudeCode: true,
|
|
179
|
+
globalInstall: false,
|
|
180
|
+
runLearn: false,
|
|
181
|
+
learnDepth: "standard",
|
|
182
|
+
};
|
|
183
|
+
// Step 1: Project path
|
|
184
|
+
printStep(1, 5, "Project Configuration");
|
|
185
|
+
if (!options.project) {
|
|
186
|
+
answers.projectPath = await prompt.ask("Project path", process.cwd());
|
|
187
|
+
}
|
|
188
|
+
printInfo(`Using: ${answers.projectPath}`);
|
|
189
|
+
// Derive default bank ID from project name
|
|
190
|
+
const defaultBankId = basename(answers.projectPath)
|
|
191
|
+
.toLowerCase()
|
|
192
|
+
.replace(/[^a-z0-9-]/g, "-");
|
|
193
|
+
answers.bankId = await prompt.ask("Memory bank ID", defaultBankId);
|
|
194
|
+
answers.background = await prompt.ask("Project description (optional)", "");
|
|
195
|
+
// Step 2: Disposition
|
|
196
|
+
printStep(2, 5, "Disposition (personality traits)");
|
|
197
|
+
print(color(" These traits shape how claude-cognitive reasons about your project.", "dim"));
|
|
198
|
+
print("");
|
|
199
|
+
const dispositionPreset = await prompt.select("Choose a preset or customize:", [
|
|
200
|
+
{
|
|
201
|
+
label: "Balanced (3/3/3) - Good for general use",
|
|
202
|
+
value: "balanced",
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
label: "Code Review (4/5/2) - Precise, questioning",
|
|
206
|
+
value: "review",
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
label: "Documentation (3/3/3) - Balanced interpretation",
|
|
210
|
+
value: "docs",
|
|
211
|
+
},
|
|
212
|
+
{ label: "Custom - Set each trait individually", value: "custom" },
|
|
213
|
+
]);
|
|
214
|
+
if (dispositionPreset === "review") {
|
|
215
|
+
answers.disposition = { skepticism: 4, literalism: 5, empathy: 2 };
|
|
216
|
+
}
|
|
217
|
+
else if (dispositionPreset === "custom") {
|
|
218
|
+
print("");
|
|
219
|
+
print(color(" Rate each trait from 1 (low) to 5 (high):", "dim"));
|
|
220
|
+
const skepticism = await prompt.ask(" Skepticism (1-5)", "3");
|
|
221
|
+
const literalism = await prompt.ask(" Literalism (1-5)", "3");
|
|
222
|
+
const empathy = await prompt.ask(" Empathy (1-5)", "3");
|
|
223
|
+
const parseTraitValue = (val) => {
|
|
224
|
+
const num = Math.min(5, Math.max(1, parseInt(val, 10) || 3));
|
|
225
|
+
return num;
|
|
226
|
+
};
|
|
227
|
+
answers.disposition = {
|
|
228
|
+
skepticism: parseTraitValue(skepticism),
|
|
229
|
+
literalism: parseTraitValue(literalism),
|
|
230
|
+
empathy: parseTraitValue(empathy),
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
printInfo(`Disposition: skepticism=${answers.disposition.skepticism}, literalism=${answers.disposition.literalism}, empathy=${answers.disposition.empathy}`);
|
|
234
|
+
// Step 3: Claude Code integration
|
|
235
|
+
printStep(3, 5, "Claude Code Integration");
|
|
236
|
+
answers.configureClaudeCode = await prompt.confirm("Configure Claude Code MCP server?", true);
|
|
237
|
+
if (answers.configureClaudeCode) {
|
|
238
|
+
answers.globalInstall = await prompt.confirm("Install globally (for all projects)?", true);
|
|
239
|
+
}
|
|
240
|
+
// Step 4: Learn
|
|
241
|
+
printStep(4, 5, "Bootstrap Memory");
|
|
242
|
+
answers.runLearn = await prompt.confirm("Run 'learn' to bootstrap from codebase?", true);
|
|
243
|
+
if (answers.runLearn) {
|
|
244
|
+
answers.learnDepth = await prompt.select("Analysis depth:", [
|
|
245
|
+
{ label: "Quick - README, package.json, structure", value: "quick" },
|
|
246
|
+
{
|
|
247
|
+
label: "Standard - + source patterns, recent git",
|
|
248
|
+
value: "standard",
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
label: "Full - all source files, full git history",
|
|
252
|
+
value: "full",
|
|
253
|
+
},
|
|
254
|
+
], 1);
|
|
255
|
+
}
|
|
256
|
+
// Step 5: Install
|
|
257
|
+
printStep(5, 5, "Installing");
|
|
258
|
+
// Create .claudemindrc
|
|
259
|
+
const rcPath = join(answers.projectPath, ".claudemindrc");
|
|
260
|
+
const config = {
|
|
261
|
+
hindsight: {
|
|
262
|
+
host: "localhost",
|
|
263
|
+
port: 8888,
|
|
264
|
+
},
|
|
265
|
+
bankId: answers.bankId,
|
|
266
|
+
disposition: answers.disposition,
|
|
267
|
+
...(answers.background ? { background: answers.background } : {}),
|
|
268
|
+
semantic: {
|
|
269
|
+
path: ".claude/memory.md",
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
await writeFile(rcPath, JSON.stringify(config, null, 2) + "\n");
|
|
273
|
+
printSuccess(`Created ${rcPath}`);
|
|
274
|
+
// Create .claude/memory.md
|
|
275
|
+
const semanticDir = join(answers.projectPath, ".claude");
|
|
276
|
+
const semanticPath = join(semanticDir, "memory.md");
|
|
277
|
+
if (!(await fileExists(semanticPath))) {
|
|
278
|
+
await mkdir(semanticDir, { recursive: true });
|
|
279
|
+
const semanticContent = `# Project Memory
|
|
280
|
+
|
|
281
|
+
## Tech Stack
|
|
282
|
+
|
|
283
|
+
<!-- Add your tech stack here -->
|
|
284
|
+
|
|
285
|
+
## Key Decisions
|
|
286
|
+
|
|
287
|
+
<!-- Document important architectural decisions -->
|
|
288
|
+
|
|
289
|
+
## Critical Paths
|
|
290
|
+
|
|
291
|
+
<!-- List important code paths -->
|
|
292
|
+
|
|
293
|
+
## Observations
|
|
294
|
+
|
|
295
|
+
<!-- Promoted insights from Hindsight -->
|
|
296
|
+
`;
|
|
297
|
+
await writeFile(semanticPath, semanticContent);
|
|
298
|
+
printSuccess(`Created ${semanticPath}`);
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
printInfo(`${semanticPath} already exists, skipping`);
|
|
302
|
+
}
|
|
303
|
+
// Configure Claude Code MCP
|
|
304
|
+
if (answers.configureClaudeCode) {
|
|
305
|
+
const mcpConfigPath = getMcpConfigPath(answers.globalInstall, answers.projectPath);
|
|
306
|
+
const existing = await readMcpConfig(mcpConfigPath);
|
|
307
|
+
const serveCmd = await getServeCommand();
|
|
308
|
+
if (answers.globalInstall) {
|
|
309
|
+
// Global config: ~/.claude.json with projects key
|
|
310
|
+
const projects = existing.projects || {};
|
|
311
|
+
const projectConfig = projects[answers.projectPath] || {};
|
|
312
|
+
const mcpServers = projectConfig.mcpServers || {};
|
|
313
|
+
mcpServers["claude-cognitive"] = {
|
|
314
|
+
command: serveCmd.command,
|
|
315
|
+
args: [...serveCmd.args, "--project", answers.projectPath],
|
|
316
|
+
};
|
|
317
|
+
projects[answers.projectPath] = {
|
|
318
|
+
...projectConfig,
|
|
319
|
+
mcpServers,
|
|
320
|
+
};
|
|
321
|
+
const newConfig = {
|
|
322
|
+
...existing,
|
|
323
|
+
projects,
|
|
324
|
+
};
|
|
325
|
+
await writeFile(mcpConfigPath, JSON.stringify(newConfig, null, 2) + "\n");
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
// Project config: .mcp.json in project root
|
|
329
|
+
const mcpServers = existing.mcpServers || {};
|
|
330
|
+
mcpServers["claude-cognitive"] = {
|
|
331
|
+
command: serveCmd.command,
|
|
332
|
+
args: serveCmd.args,
|
|
333
|
+
};
|
|
334
|
+
const newConfig = {
|
|
335
|
+
...existing,
|
|
336
|
+
mcpServers,
|
|
337
|
+
};
|
|
338
|
+
await writeFile(mcpConfigPath, JSON.stringify(newConfig, null, 2) + "\n");
|
|
339
|
+
}
|
|
340
|
+
printSuccess(`Configured MCP server: ${answers.globalInstall ? "global (~/.claude.json)" : "project (.mcp.json)"}`);
|
|
341
|
+
printInfo(mcpConfigPath);
|
|
342
|
+
}
|
|
343
|
+
// Inject memory instructions into CLAUDE.md
|
|
344
|
+
const claudeMdPath = join(answers.projectPath, "CLAUDE.md");
|
|
345
|
+
if (await fileExists(claudeMdPath)) {
|
|
346
|
+
const claudeMdContent = await readFile(claudeMdPath, "utf-8");
|
|
347
|
+
// Check if memory section already exists
|
|
348
|
+
if (!claudeMdContent.includes("## 🧠 MEMORY SYSTEM") && !claudeMdContent.includes("memory_recall")) {
|
|
349
|
+
const memorySection = `
|
|
350
|
+
## 🧠 MEMORY SYSTEM
|
|
351
|
+
|
|
352
|
+
This project uses **claude-cognitive** for persistent memory across sessions.
|
|
353
|
+
|
|
354
|
+
### Always Use Memory Tools
|
|
355
|
+
- **Before starting work:** Use \`memory_recall\` to get context about the area you're working on
|
|
356
|
+
- **When asked about the project:** Use \`memory_recall\` to retrieve what you know
|
|
357
|
+
- **When forming opinions:** Use \`memory_reflect\` to reason through your knowledge
|
|
358
|
+
|
|
359
|
+
### Examples
|
|
360
|
+
\`\`\`
|
|
361
|
+
memory_recall("authentication") # Before working on auth
|
|
362
|
+
memory_recall("database schema") # Before working on DB
|
|
363
|
+
memory_reflect("What patterns does this codebase follow?")
|
|
364
|
+
\`\`\`
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
`;
|
|
368
|
+
// Find first --- after the title and insert after it
|
|
369
|
+
const firstDividerIndex = claudeMdContent.indexOf("---");
|
|
370
|
+
let newContent;
|
|
371
|
+
if (firstDividerIndex !== -1) {
|
|
372
|
+
// Insert after the first ---
|
|
373
|
+
const insertPoint = firstDividerIndex + 3;
|
|
374
|
+
newContent = claudeMdContent.slice(0, insertPoint) + "\n" + memorySection + claudeMdContent.slice(insertPoint);
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
// No divider found, prepend to file
|
|
378
|
+
newContent = memorySection + "\n" + claudeMdContent;
|
|
379
|
+
}
|
|
380
|
+
await writeFile(claudeMdPath, newContent);
|
|
381
|
+
printSuccess("Injected memory instructions into CLAUDE.md");
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
printInfo("CLAUDE.md already has memory instructions");
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
printInfo("No CLAUDE.md found (skipping memory instructions)");
|
|
389
|
+
}
|
|
390
|
+
// Initialize Mind
|
|
391
|
+
print("");
|
|
392
|
+
print(color("Connecting to Hindsight...", "dim"));
|
|
393
|
+
let hindsightConnected = false;
|
|
394
|
+
try {
|
|
395
|
+
const mind = new Mind({
|
|
396
|
+
projectPath: answers.projectPath,
|
|
397
|
+
bankId: answers.bankId,
|
|
398
|
+
disposition: answers.disposition,
|
|
399
|
+
background: answers.background,
|
|
400
|
+
});
|
|
401
|
+
await mind.init();
|
|
402
|
+
hindsightConnected = !mind.isDegraded;
|
|
403
|
+
if (hindsightConnected) {
|
|
404
|
+
printSuccess(`Bank '${answers.bankId}' ready`);
|
|
405
|
+
// Run learn if requested
|
|
406
|
+
if (answers.runLearn) {
|
|
407
|
+
print("");
|
|
408
|
+
print(color(`Learning from codebase (${answers.learnDepth})...`, "dim"));
|
|
409
|
+
const result = await mind.learn({ depth: answers.learnDepth });
|
|
410
|
+
printSuccess(`Learned ${result.worldFacts} facts from ${result.filesAnalyzed} files`);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
print(color(" ⚠ Hindsight unavailable - running in degraded mode", "yellow"));
|
|
415
|
+
printInfo("Start Hindsight and run 'claude-cognitive learn' later");
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
catch (error) {
|
|
419
|
+
print(color(` ⚠ Could not connect to Hindsight: ${error instanceof Error ? error.message : error}`, "yellow"));
|
|
420
|
+
}
|
|
421
|
+
// Done!
|
|
422
|
+
print("");
|
|
423
|
+
print(color("═".repeat(45), "green"));
|
|
424
|
+
print(color(" Installation complete!", "green"));
|
|
425
|
+
print(color("═".repeat(45), "green"));
|
|
426
|
+
print("");
|
|
427
|
+
print("Next steps:");
|
|
428
|
+
print(color(" 1. Restart Claude Code to load the MCP server", "dim"));
|
|
429
|
+
print(color(" 2. Ask Claude to use memory_recall to verify", "dim"));
|
|
430
|
+
if (!hindsightConnected) {
|
|
431
|
+
print(color(" 3. Start Hindsight and run: claude-cognitive learn", "dim"));
|
|
432
|
+
}
|
|
433
|
+
print("");
|
|
434
|
+
}
|
|
435
|
+
finally {
|
|
436
|
+
prompt.close();
|
|
437
|
+
}
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI learn command - bootstrap memory from codebase.
|
|
3
|
+
* @module cli/commands/learn
|
|
4
|
+
*/
|
|
5
|
+
import type { CAC } from "cac";
|
|
6
|
+
/**
|
|
7
|
+
* Register the learn command.
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerLearnCommand(cli: CAC): void;
|
|
10
|
+
//# sourceMappingURL=learn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learn.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/learn.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAY/B;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAsCnD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI learn command - bootstrap memory from codebase.
|
|
3
|
+
* @module cli/commands/learn
|
|
4
|
+
*/
|
|
5
|
+
import { Mind } from "../../mind.js";
|
|
6
|
+
import { CLIError, ExitCode, info, output, formatLearnResult } from "../utils/index.js";
|
|
7
|
+
/**
|
|
8
|
+
* Register the learn command.
|
|
9
|
+
*/
|
|
10
|
+
export function registerLearnCommand(cli) {
|
|
11
|
+
cli
|
|
12
|
+
.command("learn", "Bootstrap memory from codebase")
|
|
13
|
+
.option("--project <path>", "Project directory (default: current directory)")
|
|
14
|
+
.option("--depth <level>", "Analysis depth: quick, standard, or full (default: standard)")
|
|
15
|
+
.option("--json", "Output as JSON")
|
|
16
|
+
.option("--quiet", "Suppress output")
|
|
17
|
+
.action(async (options) => {
|
|
18
|
+
const projectPath = options.project ?? process.cwd();
|
|
19
|
+
const depth = (options.depth ?? "standard");
|
|
20
|
+
if (!["quick", "standard", "full"].includes(depth)) {
|
|
21
|
+
throw new CLIError(`Invalid depth: ${depth}. Use 'quick', 'standard', or 'full'.`, ExitCode.CONFIG_ERROR);
|
|
22
|
+
}
|
|
23
|
+
const mind = new Mind({ projectPath });
|
|
24
|
+
await mind.init();
|
|
25
|
+
if (mind.isDegraded) {
|
|
26
|
+
throw new CLIError("Cannot learn: Hindsight is unavailable.", ExitCode.CONNECTION_ERROR, "Make sure Hindsight is running and accessible.");
|
|
27
|
+
}
|
|
28
|
+
info(`Learning from codebase (depth: ${depth})...`, options);
|
|
29
|
+
const result = await mind.learn({ depth });
|
|
30
|
+
output(result, formatLearnResult, options);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=learn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learn.js","sourceRoot":"","sources":["../../../src/cli/commands/learn.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AASxF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAQ;IAC3C,GAAG;SACA,OAAO,CAAC,OAAO,EAAE,gCAAgC,CAAC;SAClD,MAAM,CAAC,kBAAkB,EAAE,gDAAgD,CAAC;SAC5E,MAAM,CACL,iBAAiB,EACjB,8DAA8D,CAC/D;SACA,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC;SACpC,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE;QACtC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,UAAU,CAAe,CAAC;QAE1D,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,QAAQ,CAChB,kBAAkB,KAAK,uCAAuC,EAC9D,QAAQ,CAAC,YAAY,CACtB,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAElB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,QAAQ,CAChB,yCAAyC,EACzC,QAAQ,CAAC,gBAAgB,EACzB,gDAAgD,CACjD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,kCAAkC,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC;QAE7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAE3C,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI recall command - search memories.
|
|
3
|
+
* @module cli/commands/recall
|
|
4
|
+
*/
|
|
5
|
+
import type { CAC } from "cac";
|
|
6
|
+
/**
|
|
7
|
+
* Register the recall command.
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerRecallCommand(cli: CAC): void;
|
|
10
|
+
//# sourceMappingURL=recall.d.ts.map
|
|
@@ -0,0 +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;AAc/B;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA6DpD"}
|