causantic 0.7.2 → 0.8.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.
Files changed (128) hide show
  1. package/README.md +5 -4
  2. package/config.schema.json +46 -0
  3. package/dist/cli/commands/init/api-key.d.ts +2 -0
  4. package/dist/cli/commands/init/api-key.d.ts.map +1 -0
  5. package/dist/cli/commands/init/api-key.js +26 -0
  6. package/dist/cli/commands/init/api-key.js.map +1 -0
  7. package/dist/cli/commands/init/encryption.d.ts +2 -0
  8. package/dist/cli/commands/init/encryption.d.ts.map +1 -0
  9. package/dist/cli/commands/init/encryption.js +104 -0
  10. package/dist/cli/commands/init/encryption.js.map +1 -0
  11. package/dist/cli/commands/init/health.d.ts +2 -0
  12. package/dist/cli/commands/init/health.d.ts.map +1 -0
  13. package/dist/cli/commands/init/health.js +15 -0
  14. package/dist/cli/commands/init/health.js.map +1 -0
  15. package/dist/cli/commands/init/hooks.d.ts +2 -0
  16. package/dist/cli/commands/init/hooks.d.ts.map +1 -0
  17. package/dist/cli/commands/init/hooks.js +92 -0
  18. package/dist/cli/commands/init/hooks.js.map +1 -0
  19. package/dist/cli/commands/init/index.d.ts +3 -0
  20. package/dist/cli/commands/init/index.d.ts.map +1 -0
  21. package/dist/cli/commands/init/index.js +95 -0
  22. package/dist/cli/commands/init/index.js.map +1 -0
  23. package/dist/cli/commands/init/ingest.d.ts +2 -0
  24. package/dist/cli/commands/init/ingest.d.ts.map +1 -0
  25. package/dist/cli/commands/init/ingest.js +171 -0
  26. package/dist/cli/commands/init/ingest.js.map +1 -0
  27. package/dist/cli/commands/init/mcp-config.d.ts +9 -0
  28. package/dist/cli/commands/init/mcp-config.d.ts.map +1 -0
  29. package/dist/cli/commands/init/mcp-config.js +191 -0
  30. package/dist/cli/commands/init/mcp-config.js.map +1 -0
  31. package/dist/cli/commands/init/shared.d.ts +9 -0
  32. package/dist/cli/commands/init/shared.d.ts.map +1 -0
  33. package/dist/cli/commands/init/shared.js +58 -0
  34. package/dist/cli/commands/init/shared.js.map +1 -0
  35. package/dist/cli/commands/init/skills.d.ts +2 -0
  36. package/dist/cli/commands/init/skills.d.ts.map +1 -0
  37. package/dist/cli/commands/init/skills.js +68 -0
  38. package/dist/cli/commands/init/skills.js.map +1 -0
  39. package/dist/cli/commands/reindex.d.ts +8 -0
  40. package/dist/cli/commands/reindex.d.ts.map +1 -0
  41. package/dist/cli/commands/reindex.js +143 -0
  42. package/dist/cli/commands/reindex.js.map +1 -0
  43. package/dist/cli/index.js +4 -7
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/clusters/cluster-manager.d.ts +23 -0
  46. package/dist/clusters/cluster-manager.d.ts.map +1 -1
  47. package/dist/clusters/cluster-manager.js +134 -0
  48. package/dist/clusters/cluster-manager.js.map +1 -1
  49. package/dist/clusters/hdbscan-model-store.d.ts +37 -0
  50. package/dist/clusters/hdbscan-model-store.d.ts.map +1 -0
  51. package/dist/clusters/hdbscan-model-store.js +73 -0
  52. package/dist/clusters/hdbscan-model-store.js.map +1 -0
  53. package/dist/config/loader.d.ts +8 -0
  54. package/dist/config/loader.d.ts.map +1 -1
  55. package/dist/config/loader.js +38 -0
  56. package/dist/config/loader.js.map +1 -1
  57. package/dist/config/memory-config.d.ts +6 -0
  58. package/dist/config/memory-config.d.ts.map +1 -1
  59. package/dist/config/memory-config.js +6 -0
  60. package/dist/config/memory-config.js.map +1 -1
  61. package/dist/dashboard/client/assets/index-Bv5lFW-1.js +17 -0
  62. package/dist/dashboard/client/assets/index-DTriNsi9.css +1 -0
  63. package/dist/dashboard/client/index.html +2 -2
  64. package/dist/ingest/ingest-session.d.ts.map +1 -1
  65. package/dist/ingest/ingest-session.js +165 -217
  66. package/dist/ingest/ingest-session.js.map +1 -1
  67. package/dist/maintenance/scheduler.d.ts.map +1 -1
  68. package/dist/maintenance/scheduler.js +17 -6
  69. package/dist/maintenance/scheduler.js.map +1 -1
  70. package/dist/maintenance/tasks/update-clusters.d.ts +9 -0
  71. package/dist/maintenance/tasks/update-clusters.d.ts.map +1 -1
  72. package/dist/maintenance/tasks/update-clusters.js +26 -7
  73. package/dist/maintenance/tasks/update-clusters.js.map +1 -1
  74. package/dist/mcp/server.d.ts.map +1 -1
  75. package/dist/mcp/server.js +1 -6
  76. package/dist/mcp/server.js.map +1 -1
  77. package/dist/mcp/services.d.ts +27 -0
  78. package/dist/mcp/services.d.ts.map +1 -0
  79. package/dist/mcp/services.js +99 -0
  80. package/dist/mcp/services.js.map +1 -0
  81. package/dist/mcp/tools.d.ts.map +1 -1
  82. package/dist/mcp/tools.js +39 -102
  83. package/dist/mcp/tools.js.map +1 -1
  84. package/dist/models/embedder.d.ts.map +1 -1
  85. package/dist/models/embedder.js +2 -0
  86. package/dist/models/embedder.js.map +1 -1
  87. package/dist/retrieval/chain-assembler.js +2 -6
  88. package/dist/retrieval/chain-assembler.js.map +1 -1
  89. package/dist/retrieval/chain-walker.d.ts +12 -6
  90. package/dist/retrieval/chain-walker.d.ts.map +1 -1
  91. package/dist/retrieval/chain-walker.js +121 -84
  92. package/dist/retrieval/chain-walker.js.map +1 -1
  93. package/dist/retrieval/cluster-expander.d.ts +1 -1
  94. package/dist/retrieval/cluster-expander.d.ts.map +1 -1
  95. package/dist/retrieval/cluster-expander.js +13 -1
  96. package/dist/retrieval/cluster-expander.js.map +1 -1
  97. package/dist/retrieval/formatting.d.ts +13 -0
  98. package/dist/retrieval/formatting.d.ts.map +1 -0
  99. package/dist/retrieval/formatting.js +27 -0
  100. package/dist/retrieval/formatting.js.map +1 -0
  101. package/dist/retrieval/search-assembler.d.ts.map +1 -1
  102. package/dist/retrieval/search-assembler.js +21 -15
  103. package/dist/retrieval/search-assembler.js.map +1 -1
  104. package/dist/storage/feedback-store.d.ts +34 -0
  105. package/dist/storage/feedback-store.d.ts.map +1 -0
  106. package/dist/storage/feedback-store.js +67 -0
  107. package/dist/storage/feedback-store.js.map +1 -0
  108. package/dist/storage/migrations.d.ts.map +1 -1
  109. package/dist/storage/migrations.js +68 -0
  110. package/dist/storage/migrations.js.map +1 -1
  111. package/dist/storage/schema.sql +24 -2
  112. package/dist/storage/vector-store.d.ts +20 -0
  113. package/dist/storage/vector-store.d.ts.map +1 -1
  114. package/dist/storage/vector-store.js +66 -26
  115. package/dist/storage/vector-store.js.map +1 -1
  116. package/dist/utils/version.d.ts +2 -0
  117. package/dist/utils/version.d.ts.map +1 -0
  118. package/dist/utils/version.js +7 -0
  119. package/dist/utils/version.js.map +1 -0
  120. package/package.json +8 -7
  121. package/src/dashboard/client/package-lock.json +179 -880
  122. package/src/dashboard/client/package.json +3 -3
  123. package/dist/cli/commands/init.d.ts +0 -3
  124. package/dist/cli/commands/init.d.ts.map +0 -1
  125. package/dist/cli/commands/init.js +0 -781
  126. package/dist/cli/commands/init.js.map +0 -1
  127. package/dist/dashboard/client/assets/index-BmZeW-Jd.css +0 -1
  128. package/dist/dashboard/client/assets/index-Br0W1mEc.js +0 -166
@@ -0,0 +1,171 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import * as os from 'node:os';
4
+ import { runTask } from '../../../maintenance/scheduler.js';
5
+ import { getChunkCount } from '../../../storage/chunk-store.js';
6
+ import { promptUser } from '../../utils.js';
7
+ import { createSpinner } from './shared.js';
8
+ import { offerApiKeySetup } from './api-key.js';
9
+ export async function offerBatchIngest() {
10
+ const claudeProjectsDir = path.join(os.homedir(), '.claude', 'projects');
11
+ if (!fs.existsSync(claudeProjectsDir))
12
+ return;
13
+ console.log('');
14
+ console.log('Existing Claude Code sessions found.');
15
+ const projectDirs = [];
16
+ try {
17
+ const entries = fs.readdirSync(claudeProjectsDir, { withFileTypes: true });
18
+ for (const entry of entries) {
19
+ if (entry.isDirectory() && !entry.name.startsWith('.')) {
20
+ const projectPath = path.join(claudeProjectsDir, entry.name);
21
+ const files = fs.readdirSync(projectPath);
22
+ const sessionCount = files.filter((f) => f.endsWith('.jsonl') &&
23
+ /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.jsonl$/i.test(f)).length;
24
+ if (sessionCount > 0) {
25
+ const readableName = entry.name
26
+ .replace(/^-/, '')
27
+ .replace(/-/g, '/')
28
+ .replace(/^Users\/[^/]+\//, '~/');
29
+ projectDirs.push({ name: readableName, path: projectPath, sessionCount });
30
+ }
31
+ }
32
+ }
33
+ }
34
+ catch {
35
+ // Ignore errors reading projects
36
+ }
37
+ if (projectDirs.length === 0)
38
+ return;
39
+ projectDirs.sort((a, b) => b.sessionCount - a.sessionCount);
40
+ const totalSessions = projectDirs.reduce((sum, p) => sum + p.sessionCount, 0);
41
+ console.log(`Found ${projectDirs.length} projects with ${totalSessions} total sessions.`);
42
+ console.log('');
43
+ console.log('Import existing sessions?');
44
+ console.log(' [A] All projects');
45
+ console.log(' [S] Select specific projects');
46
+ console.log(' [N] Skip (can run "causantic batch-ingest" later)');
47
+ console.log('');
48
+ const importChoice = (await promptUser('Choice [A/s/n]: ')).toLowerCase() || 'a';
49
+ let projectsToIngest = [];
50
+ if (importChoice === 'a' || importChoice === 'all') {
51
+ projectsToIngest = projectDirs.map((p) => p.path);
52
+ }
53
+ else if (importChoice === 's' || importChoice === 'select') {
54
+ console.log('');
55
+ console.log('Select projects to import (comma-separated numbers, or "all"):');
56
+ console.log('');
57
+ projectDirs.forEach((p, i) => {
58
+ console.log(` [${i + 1}] ${p.name} (${p.sessionCount} sessions)`);
59
+ });
60
+ console.log('');
61
+ const selection = (await promptUser('Projects: ')).trim();
62
+ if (selection.toLowerCase() === 'all') {
63
+ projectsToIngest = projectDirs.map((p) => p.path);
64
+ }
65
+ else {
66
+ const indices = selection.split(',').map((s) => parseInt(s.trim(), 10) - 1);
67
+ for (const idx of indices) {
68
+ if (idx >= 0 && idx < projectDirs.length) {
69
+ projectsToIngest.push(projectDirs[idx].path);
70
+ }
71
+ }
72
+ }
73
+ }
74
+ else {
75
+ console.log('Skipping session import.');
76
+ }
77
+ if (projectsToIngest.length === 0)
78
+ return;
79
+ const spinner = createSpinner();
80
+ const { detectDevice } = await import('../../../models/device-detector.js');
81
+ const { setLogLevel } = await import('../../../utils/logger.js');
82
+ const detectedDevice = detectDevice();
83
+ console.log('');
84
+ const availableHint = detectedDevice.available?.length
85
+ ? ` (${detectedDevice.available.join(', ')} available)`
86
+ : '';
87
+ console.log(`\u2713 Inference: ${detectedDevice.label}${availableHint}`);
88
+ console.log(`Importing ${projectsToIngest.length} project(s)...`);
89
+ console.log('');
90
+ setLogLevel('warn');
91
+ const { discoverSessions, batchIngest } = await import('../../../ingest/batch-ingest.js');
92
+ const { Embedder } = await import('../../../models/embedder.js');
93
+ const { getModel } = await import('../../../models/model-registry.js');
94
+ const { loadConfig, toRuntimeConfig } = await import('../../../config/loader.js');
95
+ const runtimeConfig = toRuntimeConfig(loadConfig());
96
+ const sharedEmbedder = new Embedder();
97
+ await sharedEmbedder.load(getModel(runtimeConfig.embeddingModel), {
98
+ device: detectedDevice.device,
99
+ });
100
+ let totalIngested = 0;
101
+ let totalSkipped = 0;
102
+ let totalChunks = 0;
103
+ let totalEdges = 0;
104
+ for (const projectPath of projectsToIngest) {
105
+ const projectName = path
106
+ .basename(projectPath)
107
+ .replace(/^-/, '')
108
+ .replace(/-/g, '/')
109
+ .replace(/^Users\/[^/]+\//, '~/');
110
+ const shortName = projectName.split('/').pop() || projectName;
111
+ const sessions = await discoverSessions(projectPath);
112
+ if (sessions.length === 0) {
113
+ continue;
114
+ }
115
+ spinner.start(`${shortName}: 0/${sessions.length} sessions`);
116
+ const result = await batchIngest(sessions, {
117
+ embeddingDevice: detectedDevice.device,
118
+ embedder: sharedEmbedder,
119
+ progressCallback: (progress) => {
120
+ spinner.update(`${shortName}: ${progress.done}/${progress.total} sessions, ${progress.totalChunks} chunks`);
121
+ },
122
+ });
123
+ spinner.stop();
124
+ if (result.successCount > 0) {
125
+ console.log(` \u2713 ${shortName}: ${result.successCount} sessions, ${result.totalChunks} chunks, ${result.totalEdges} edges`);
126
+ }
127
+ else if (result.skippedCount > 0) {
128
+ console.log(` \u2713 ${shortName}: ${result.skippedCount} sessions (already ingested)`);
129
+ }
130
+ totalIngested += result.successCount;
131
+ totalSkipped += result.skippedCount;
132
+ totalChunks += result.totalChunks;
133
+ totalEdges += result.totalEdges;
134
+ }
135
+ await sharedEmbedder.dispose();
136
+ setLogLevel('info');
137
+ if (totalIngested === 0 && totalSkipped === 0) {
138
+ console.log(' No sessions found to import.');
139
+ }
140
+ else if (totalIngested === 0) {
141
+ console.log('');
142
+ console.log(`\u2713 All ${totalSkipped} sessions already ingested`);
143
+ }
144
+ else {
145
+ console.log('');
146
+ const skippedSuffix = totalSkipped > 0 ? `, ${totalSkipped} skipped` : '';
147
+ console.log(`\u2713 Total: ${totalIngested} sessions, ${totalChunks} chunks, ${totalEdges} edges${skippedSuffix}`);
148
+ }
149
+ // Run post-ingestion maintenance tasks
150
+ const existingChunks = getChunkCount();
151
+ if (existingChunks > 0) {
152
+ // Offer API key BEFORE clustering so labels can be generated in one pass
153
+ await offerApiKeySetup();
154
+ console.log('');
155
+ console.log('Running post-ingestion processing...');
156
+ const { setLogLevel: setPostLogLevel } = await import('../../../utils/logger.js');
157
+ setPostLogLevel('warn');
158
+ spinner.start('Building clusters...');
159
+ try {
160
+ const clusterResult = await runTask('update-clusters');
161
+ spinner.stop(clusterResult.success
162
+ ? ` \u2713 ${clusterResult.message}`
163
+ : ` \u26a0 Clustering: ${clusterResult.message}`);
164
+ }
165
+ catch (err) {
166
+ spinner.stop(` \u2717 Clustering error: ${err.message}`);
167
+ }
168
+ setPostLogLevel('info');
169
+ }
170
+ }
171
+ //# sourceMappingURL=ingest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/ingest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Migrate Causantic MCP entry from ~/.claude/settings.json to ~/.claude.json.
3
+ * Claude Code reads MCP servers from ~/.claude.json, not settings.json.
4
+ * This cleans up entries left by pre-0.5.0 installs.
5
+ */
6
+ export declare function migrateMcpFromSettings(settingsPath: string, mcpConfigPath: string): void;
7
+ export declare function configureMcp(mcpConfigPath: string): Promise<void>;
8
+ export declare function patchProjectMcpFiles(): Promise<void>;
9
+ //# sourceMappingURL=mcp-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/mcp-config.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAmCxF;AAED,wBAAsB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiEvE;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CA+E1D"}
@@ -0,0 +1,191 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import * as os from 'node:os';
4
+ import { promptYesNo } from '../../utils.js';
5
+ import { getCliEntryPath } from './shared.js';
6
+ /**
7
+ * Migrate Causantic MCP entry from ~/.claude/settings.json to ~/.claude.json.
8
+ * Claude Code reads MCP servers from ~/.claude.json, not settings.json.
9
+ * This cleans up entries left by pre-0.5.0 installs.
10
+ */
11
+ export function migrateMcpFromSettings(settingsPath, mcpConfigPath) {
12
+ try {
13
+ if (!fs.existsSync(settingsPath))
14
+ return;
15
+ const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
16
+ const CAUSANTIC_SERVER_KEY = 'causantic';
17
+ if (!settings.mcpServers?.[CAUSANTIC_SERVER_KEY])
18
+ return;
19
+ // Check if already present in mcpConfigPath
20
+ let mcpConfig = {};
21
+ if (fs.existsSync(mcpConfigPath)) {
22
+ try {
23
+ mcpConfig = JSON.parse(fs.readFileSync(mcpConfigPath, 'utf-8'));
24
+ }
25
+ catch {
26
+ // Treat as empty if unparseable
27
+ }
28
+ }
29
+ const mcpServers = (mcpConfig.mcpServers ?? {});
30
+ if (!mcpServers[CAUSANTIC_SERVER_KEY]) {
31
+ mcpConfig.mcpServers = {
32
+ ...mcpServers,
33
+ [CAUSANTIC_SERVER_KEY]: settings.mcpServers[CAUSANTIC_SERVER_KEY],
34
+ };
35
+ fs.writeFileSync(mcpConfigPath, JSON.stringify(mcpConfig, null, 2));
36
+ console.log('\u2713 Migrated Causantic MCP config: settings.json \u2192 ~/.claude.json');
37
+ }
38
+ // Clean up old entry from settings.json
39
+ delete settings.mcpServers[CAUSANTIC_SERVER_KEY];
40
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
41
+ }
42
+ catch {
43
+ // Best-effort migration
44
+ }
45
+ }
46
+ export async function configureMcp(mcpConfigPath) {
47
+ let config;
48
+ if (!fs.existsSync(mcpConfigPath)) {
49
+ config = { mcpServers: {} };
50
+ }
51
+ else {
52
+ try {
53
+ const configContent = fs.readFileSync(mcpConfigPath, 'utf-8');
54
+ config = JSON.parse(configContent);
55
+ }
56
+ catch {
57
+ console.log('\u26a0 Could not parse Claude Code MCP config');
58
+ return;
59
+ }
60
+ }
61
+ const CAUSANTIC_SERVER_KEY = 'causantic';
62
+ const mcpServers = (config.mcpServers ?? {});
63
+ // Migrate old 'memory' key -> 'causantic'
64
+ if (mcpServers.memory && !mcpServers[CAUSANTIC_SERVER_KEY]) {
65
+ mcpServers[CAUSANTIC_SERVER_KEY] = mcpServers.memory;
66
+ delete mcpServers.memory;
67
+ config.mcpServers = mcpServers;
68
+ fs.writeFileSync(mcpConfigPath, JSON.stringify(config, null, 2));
69
+ console.log('\u2713 Migrated config: memory \u2192 causantic');
70
+ }
71
+ if (mcpServers[CAUSANTIC_SERVER_KEY]) {
72
+ const existing = mcpServers[CAUSANTIC_SERVER_KEY];
73
+ const expectedArgs = [getCliEntryPath(), 'serve'];
74
+ const currentArgs = Array.isArray(existing.args) ? existing.args : [];
75
+ const cliPathStale = currentArgs.length >= 1 &&
76
+ currentArgs[0] !== expectedArgs[0] &&
77
+ !fs.existsSync(currentArgs[0]);
78
+ const usesNpx = existing.command === 'npx';
79
+ if (usesNpx || cliPathStale) {
80
+ mcpServers[CAUSANTIC_SERVER_KEY] = {
81
+ command: process.execPath,
82
+ args: expectedArgs,
83
+ };
84
+ config.mcpServers = mcpServers;
85
+ fs.writeFileSync(mcpConfigPath, JSON.stringify(config, null, 2));
86
+ if (cliPathStale) {
87
+ console.log('\u2713 Updated Causantic config (CLI path was stale)');
88
+ }
89
+ else {
90
+ console.log('\u2713 Updated Causantic config to use absolute paths');
91
+ }
92
+ }
93
+ else {
94
+ console.log('\u2713 Causantic already configured in Claude Code');
95
+ }
96
+ }
97
+ else {
98
+ if (await promptYesNo('Add Causantic to Claude Code MCP config?', true)) {
99
+ mcpServers[CAUSANTIC_SERVER_KEY] = {
100
+ command: process.execPath,
101
+ args: [getCliEntryPath(), 'serve'],
102
+ };
103
+ config.mcpServers = mcpServers;
104
+ fs.writeFileSync(mcpConfigPath, JSON.stringify(config, null, 2));
105
+ console.log('\u2713 Added Causantic to Claude Code config');
106
+ console.log(` Node: ${process.execPath}`);
107
+ console.log(' Restart Claude Code to activate');
108
+ }
109
+ }
110
+ }
111
+ export async function patchProjectMcpFiles() {
112
+ const claudeProjectsDir = path.join(os.homedir(), '.claude', 'projects');
113
+ if (!fs.existsSync(claudeProjectsDir))
114
+ return;
115
+ const serverConfig = {
116
+ command: process.execPath,
117
+ args: [getCliEntryPath(), 'serve'],
118
+ };
119
+ const CAUSANTIC_KEY = 'causantic';
120
+ const projectsToFix = [];
121
+ try {
122
+ const entries = fs.readdirSync(claudeProjectsDir, { withFileTypes: true });
123
+ for (const entry of entries) {
124
+ if (!entry.isDirectory() || entry.name.startsWith('.'))
125
+ continue;
126
+ const projectPath = '/' + entry.name.replace(/^-/, '').replace(/-/g, '/');
127
+ const mcpPath = path.join(projectPath, '.mcp.json');
128
+ if (!fs.existsSync(mcpPath))
129
+ continue;
130
+ try {
131
+ const mcpContent = JSON.parse(fs.readFileSync(mcpPath, 'utf-8'));
132
+ if (!mcpContent.mcpServers)
133
+ continue;
134
+ const readableName = projectPath.replace(new RegExp(`^/Users/${os.userInfo().username}/`), '~/');
135
+ if (mcpContent.mcpServers.memory && !mcpContent.mcpServers[CAUSANTIC_KEY]) {
136
+ projectsToFix.push({ name: readableName, mcpPath, needsMigrate: true });
137
+ }
138
+ else if (!mcpContent.mcpServers[CAUSANTIC_KEY]) {
139
+ projectsToFix.push({ name: readableName, mcpPath, needsMigrate: false });
140
+ }
141
+ }
142
+ catch {
143
+ // Skip unparseable files
144
+ }
145
+ }
146
+ }
147
+ catch {
148
+ return;
149
+ }
150
+ if (projectsToFix.length === 0)
151
+ return;
152
+ const migrateCount = projectsToFix.filter((p) => p.needsMigrate).length;
153
+ const addCount = projectsToFix.length - migrateCount;
154
+ console.log('');
155
+ if (migrateCount > 0 && addCount > 0) {
156
+ console.log(`Found ${addCount} project(s) missing Causantic and ${migrateCount} to migrate:`);
157
+ }
158
+ else if (migrateCount > 0) {
159
+ console.log(`Found ${migrateCount} project(s) with old 'memory' key to migrate:`);
160
+ }
161
+ else {
162
+ console.log(`Found ${addCount} project(s) with .mcp.json missing Causantic:`);
163
+ }
164
+ for (const p of projectsToFix) {
165
+ console.log(` ${p.name}${p.needsMigrate ? ' (migrate)' : ''}`);
166
+ }
167
+ if (!(await promptYesNo('Add/migrate Causantic server in these projects?', true)))
168
+ return;
169
+ let patched = 0;
170
+ for (const p of projectsToFix) {
171
+ try {
172
+ const mcpContent = JSON.parse(fs.readFileSync(p.mcpPath, 'utf-8'));
173
+ if (p.needsMigrate) {
174
+ mcpContent.mcpServers[CAUSANTIC_KEY] = mcpContent.mcpServers.memory;
175
+ delete mcpContent.mcpServers.memory;
176
+ }
177
+ else {
178
+ mcpContent.mcpServers[CAUSANTIC_KEY] = serverConfig;
179
+ }
180
+ fs.writeFileSync(p.mcpPath, JSON.stringify(mcpContent, null, 2) + '\n');
181
+ patched++;
182
+ }
183
+ catch {
184
+ console.log(` \u26a0 Could not patch ${p.name}`);
185
+ }
186
+ }
187
+ if (patched > 0) {
188
+ console.log(`\u2713 Updated Causantic in ${patched} project .mcp.json file(s)`);
189
+ }
190
+ }
191
+ //# sourceMappingURL=mcp-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/mcp-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /** Resolve the CLI entry point path for MCP/hook configuration. */
2
+ export declare function getCliEntryPath(): string;
3
+ /** Create a terminal spinner for progress display. */
4
+ export declare function createSpinner(): {
5
+ start(label: string): void;
6
+ update(label: string): void;
7
+ stop(doneText?: string): void;
8
+ };
9
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/shared.ts"],"names":[],"mappings":"AAGA,mEAAmE;AACnE,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,sDAAsD;AACtD,wBAAgB,aAAa;iBAwBZ,MAAM;kBAUL,MAAM;oBAGJ,MAAM;EAazB"}
@@ -0,0 +1,58 @@
1
+ import * as path from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ /** Resolve the CLI entry point path for MCP/hook configuration. */
4
+ export function getCliEntryPath() {
5
+ return path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..', 'index.js');
6
+ }
7
+ /** Create a terminal spinner for progress display. */
8
+ export function createSpinner() {
9
+ const frames = [
10
+ '\u280b',
11
+ '\u2819',
12
+ '\u2839',
13
+ '\u2838',
14
+ '\u283c',
15
+ '\u2834',
16
+ '\u2826',
17
+ '\u2827',
18
+ '\u2807',
19
+ '\u280f',
20
+ ];
21
+ let idx = 0;
22
+ let timer = null;
23
+ let text = '';
24
+ const writeLine = (line) => {
25
+ if (process.stdout.isTTY) {
26
+ process.stdout.write('\r\x1b[K' + line);
27
+ }
28
+ };
29
+ return {
30
+ start(label) {
31
+ if (!process.stdout.isTTY)
32
+ return;
33
+ text = label;
34
+ idx = 0;
35
+ writeLine(`${frames[0]} ${text}`);
36
+ timer = setInterval(() => {
37
+ idx = (idx + 1) % frames.length;
38
+ writeLine(`${frames[idx]} ${text}`);
39
+ }, 80);
40
+ },
41
+ update(label) {
42
+ text = label;
43
+ },
44
+ stop(doneText) {
45
+ if (timer) {
46
+ clearInterval(timer);
47
+ timer = null;
48
+ }
49
+ if (process.stdout.isTTY) {
50
+ process.stdout.write('\r\x1b[K');
51
+ }
52
+ if (doneText) {
53
+ console.log(doneText);
54
+ }
55
+ },
56
+ };
57
+ }
58
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,mEAAmE;AACnE,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAC5F,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAAG;QACb,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;KACT,CAAC;IACF,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,KAAK,GAA0C,IAAI,CAAC;IACxD,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE;QACjC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,CAAC,KAAa;YACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;gBAAE,OAAO;YAClC,IAAI,GAAG,KAAK,CAAC;YACb,GAAG,GAAG,CAAC,CAAC;YACR,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YAClC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;gBACvB,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;gBAChC,SAAS,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACtC,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,CAAC;QACD,MAAM,CAAC,KAAa;YAClB,IAAI,GAAG,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,QAAiB;YACpB,IAAI,KAAK,EAAE,CAAC;gBACV,aAAa,CAAC,KAAK,CAAC,CAAC;gBACrB,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function installSkillsAndClaudeMd(): Promise<void>;
2
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/skills.ts"],"names":[],"mappings":"AAIA,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkE9D"}
@@ -0,0 +1,68 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import * as os from 'node:os';
4
+ export async function installSkillsAndClaudeMd() {
5
+ const { CAUSANTIC_SKILLS, getMinimalClaudeMdBlock } = await import('../../skill-templates.js');
6
+ const skillsDir = path.join(os.homedir(), '.claude', 'skills');
7
+ let skillsInstalled = 0;
8
+ for (const skill of CAUSANTIC_SKILLS) {
9
+ try {
10
+ const skillDir = path.join(skillsDir, skill.dirName);
11
+ if (!fs.existsSync(skillDir)) {
12
+ fs.mkdirSync(skillDir, { recursive: true });
13
+ }
14
+ fs.writeFileSync(path.join(skillDir, 'SKILL.md'), skill.content);
15
+ skillsInstalled++;
16
+ }
17
+ catch {
18
+ console.log(`\u26a0 Could not install skill: ${skill.dirName}`);
19
+ }
20
+ }
21
+ if (skillsInstalled > 0) {
22
+ console.log(`\u2713 Installed ${skillsInstalled} Causantic skills to ~/.claude/skills/`);
23
+ }
24
+ // Clean up removed skills (causantic-context merged into causantic-explain)
25
+ const removedSkills = ['causantic-context'];
26
+ for (const name of removedSkills) {
27
+ const removedDir = path.join(skillsDir, name);
28
+ if (fs.existsSync(removedDir)) {
29
+ try {
30
+ fs.rmSync(removedDir, { recursive: true });
31
+ }
32
+ catch {
33
+ // best-effort cleanup
34
+ }
35
+ }
36
+ }
37
+ const claudeMdPath = path.join(os.homedir(), '.claude', 'CLAUDE.md');
38
+ const CAUSANTIC_START = '<!-- CAUSANTIC_MEMORY_START -->';
39
+ const CAUSANTIC_END = '<!-- CAUSANTIC_MEMORY_END -->';
40
+ const memoryInstructions = getMinimalClaudeMdBlock();
41
+ try {
42
+ let claudeMd = '';
43
+ if (fs.existsSync(claudeMdPath)) {
44
+ claudeMd = fs.readFileSync(claudeMdPath, 'utf-8');
45
+ }
46
+ if (claudeMd.includes(CAUSANTIC_START)) {
47
+ const startIdx = claudeMd.indexOf(CAUSANTIC_START);
48
+ const endIdx = claudeMd.indexOf(CAUSANTIC_END);
49
+ if (endIdx > startIdx) {
50
+ claudeMd =
51
+ claudeMd.slice(0, startIdx) +
52
+ memoryInstructions +
53
+ claudeMd.slice(endIdx + CAUSANTIC_END.length);
54
+ fs.writeFileSync(claudeMdPath, claudeMd);
55
+ console.log('\u2713 Updated CLAUDE.md with skill references');
56
+ }
57
+ }
58
+ else {
59
+ const separator = claudeMd.length > 0 && !claudeMd.endsWith('\n\n') ? '\n' : '';
60
+ fs.writeFileSync(claudeMdPath, claudeMd + separator + memoryInstructions + '\n');
61
+ console.log('\u2713 Added Causantic reference to CLAUDE.md');
62
+ }
63
+ }
64
+ catch {
65
+ console.log('\u26a0 Could not update CLAUDE.md');
66
+ }
67
+ }
68
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * CLI command: re-embed all chunks with the configured embedding model.
3
+ *
4
+ * Usage: npx causantic reindex [--batch-size N] [--dry-run]
5
+ */
6
+ import type { Command } from '../types.js';
7
+ export declare const reindexCommand: Command;
8
+ //# sourceMappingURL=reindex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reindex.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/reindex.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAqC3C,eAAO,MAAM,cAAc,EAAE,OA4I5B,CAAC"}