@slope-dev/slope 1.13.1 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +118 -189
- package/dist/adapters.d.ts +3 -0
- package/dist/adapters.d.ts.map +1 -1
- package/dist/adapters.js +2 -0
- package/dist/adapters.js.map +1 -1
- package/dist/cli/commands/context.d.ts +2 -0
- package/dist/cli/commands/context.d.ts.map +1 -0
- package/dist/cli/commands/context.js +190 -0
- package/dist/cli/commands/context.js.map +1 -0
- package/dist/cli/commands/distill.d.ts.map +1 -1
- package/dist/cli/commands/distill.js +13 -4
- package/dist/cli/commands/distill.js.map +1 -1
- package/dist/cli/commands/enrich.d.ts +2 -0
- package/dist/cli/commands/enrich.d.ts.map +1 -0
- package/dist/cli/commands/enrich.js +140 -0
- package/dist/cli/commands/enrich.js.map +1 -0
- package/dist/cli/commands/guard.d.ts +19 -0
- package/dist/cli/commands/guard.d.ts.map +1 -1
- package/dist/cli/commands/guard.js +87 -1
- package/dist/cli/commands/guard.js.map +1 -1
- package/dist/cli/commands/hook.d.ts +1 -0
- package/dist/cli/commands/hook.d.ts.map +1 -1
- package/dist/cli/commands/hook.js +2 -0
- package/dist/cli/commands/hook.js.map +1 -1
- package/dist/cli/commands/index-cmd.d.ts +2 -0
- package/dist/cli/commands/index-cmd.d.ts.map +1 -0
- package/dist/cli/commands/index-cmd.js +296 -0
- package/dist/cli/commands/index-cmd.js.map +1 -0
- package/dist/cli/commands/init.d.ts +4 -2
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +204 -145
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/initiative.d.ts +2 -0
- package/dist/cli/commands/initiative.d.ts.map +1 -0
- package/dist/cli/commands/initiative.js +207 -0
- package/dist/cli/commands/initiative.js.map +1 -0
- package/dist/cli/commands/metaphor.d.ts +3 -0
- package/dist/cli/commands/metaphor.d.ts.map +1 -0
- package/dist/cli/commands/metaphor.js +100 -0
- package/dist/cli/commands/metaphor.js.map +1 -0
- package/dist/cli/commands/prep.d.ts +2 -0
- package/dist/cli/commands/prep.d.ts.map +1 -0
- package/dist/cli/commands/prep.js +94 -0
- package/dist/cli/commands/prep.js.map +1 -0
- package/dist/cli/commands/roadmap.d.ts.map +1 -1
- package/dist/cli/commands/roadmap.js +83 -44
- package/dist/cli/commands/roadmap.js.map +1 -1
- package/dist/cli/commands/store.d.ts +2 -0
- package/dist/cli/commands/store.d.ts.map +1 -0
- package/dist/cli/commands/store.js +270 -0
- package/dist/cli/commands/store.js.map +1 -0
- package/dist/cli/guards/stop-check.d.ts +1 -1
- package/dist/cli/guards/stop-check.d.ts.map +1 -1
- package/dist/cli/guards/stop-check.js +14 -2
- package/dist/cli/guards/stop-check.js.map +1 -1
- package/dist/cli/index.js +60 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/interactive-init.d.ts +19 -0
- package/dist/cli/interactive-init.d.ts.map +1 -0
- package/dist/cli/interactive-init.js +132 -0
- package/dist/cli/interactive-init.js.map +1 -0
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/registry.js +8 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli/store.d.ts +9 -0
- package/dist/cli/store.d.ts.map +1 -1
- package/dist/cli/store.js +29 -0
- package/dist/cli/store.js.map +1 -1
- package/dist/cli/template-generator.d.ts +1 -1
- package/dist/cli/template-generator.d.ts.map +1 -1
- package/dist/cli/template-generator.js +5 -3
- package/dist/cli/template-generator.js.map +1 -1
- package/dist/core/adapters/claude-code.d.ts +3 -0
- package/dist/core/adapters/claude-code.d.ts.map +1 -1
- package/dist/core/adapters/claude-code.js +17 -2
- package/dist/core/adapters/claude-code.js.map +1 -1
- package/dist/core/adapters/cline.d.ts +36 -0
- package/dist/core/adapters/cline.d.ts.map +1 -0
- package/dist/core/adapters/cline.js +279 -0
- package/dist/core/adapters/cline.js.map +1 -0
- package/dist/core/adapters/cursor.d.ts +3 -0
- package/dist/core/adapters/cursor.d.ts.map +1 -1
- package/dist/core/adapters/cursor.js +5 -0
- package/dist/core/adapters/cursor.js.map +1 -1
- package/dist/core/adapters/generic.d.ts +3 -0
- package/dist/core/adapters/generic.d.ts.map +1 -1
- package/dist/core/adapters/generic.js +5 -0
- package/dist/core/adapters/generic.js.map +1 -1
- package/dist/core/adapters/windsurf.d.ts +3 -0
- package/dist/core/adapters/windsurf.d.ts.map +1 -1
- package/dist/core/adapters/windsurf.js +5 -0
- package/dist/core/adapters/windsurf.js.map +1 -1
- package/dist/core/config.d.ts +8 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +9 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/context.d.ts +20 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +59 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/embedding-client.d.ts +11 -0
- package/dist/core/embedding-client.d.ts.map +1 -0
- package/dist/core/embedding-client.js +92 -0
- package/dist/core/embedding-client.js.map +1 -0
- package/dist/core/embedding-store.d.ts +44 -0
- package/dist/core/embedding-store.d.ts.map +1 -0
- package/dist/core/embedding-store.js +7 -0
- package/dist/core/embedding-store.js.map +1 -0
- package/dist/core/embedding.d.ts +32 -0
- package/dist/core/embedding.d.ts.map +1 -0
- package/dist/core/embedding.js +114 -0
- package/dist/core/embedding.js.map +1 -0
- package/dist/core/enrich.d.ts +76 -0
- package/dist/core/enrich.d.ts.map +1 -0
- package/dist/core/enrich.js +115 -0
- package/dist/core/enrich.js.map +1 -0
- package/dist/core/harness.d.ts +6 -0
- package/dist/core/harness.d.ts.map +1 -1
- package/dist/core/harness.js +1 -1
- package/dist/core/harness.js.map +1 -1
- package/dist/core/index.d.ts +30 -8
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +26 -5
- package/dist/core/index.js.map +1 -1
- package/dist/core/initiative.d.ts +72 -0
- package/dist/core/initiative.d.ts.map +1 -0
- package/dist/core/initiative.js +421 -0
- package/dist/core/initiative.js.map +1 -0
- package/dist/core/interview-engine.d.ts +34 -0
- package/dist/core/interview-engine.d.ts.map +1 -0
- package/dist/core/interview-engine.js +195 -0
- package/dist/core/interview-engine.js.map +1 -0
- package/dist/core/interview-steps.d.ts +27 -0
- package/dist/core/interview-steps.d.ts.map +1 -0
- package/dist/core/interview-steps.js +157 -0
- package/dist/core/interview-steps.js.map +1 -0
- package/dist/core/interview.d.ts +20 -0
- package/dist/core/interview.d.ts.map +1 -1
- package/dist/core/interview.js +62 -35
- package/dist/core/interview.js.map +1 -1
- package/dist/core/metaphor-preview.d.ts +34 -0
- package/dist/core/metaphor-preview.d.ts.map +1 -0
- package/dist/core/metaphor-preview.js +94 -0
- package/dist/core/metaphor-preview.js.map +1 -0
- package/dist/core/metaphor.d.ts +14 -0
- package/dist/core/metaphor.d.ts.map +1 -1
- package/dist/core/metaphor.js +14 -0
- package/dist/core/metaphor.js.map +1 -1
- package/dist/core/plugins.d.ts +12 -0
- package/dist/core/plugins.d.ts.map +1 -1
- package/dist/core/plugins.js +58 -1
- package/dist/core/plugins.js.map +1 -1
- package/dist/core/prep.d.ts +88 -0
- package/dist/core/prep.d.ts.map +1 -0
- package/dist/core/prep.js +302 -0
- package/dist/core/prep.js.map +1 -0
- package/dist/core/roadmap.d.ts.map +1 -1
- package/dist/core/roadmap.js +5 -4
- package/dist/core/roadmap.js.map +1 -1
- package/dist/core/roles.d.ts +3 -0
- package/dist/core/roles.d.ts.map +1 -1
- package/dist/core/roles.js +36 -0
- package/dist/core/roles.js.map +1 -1
- package/dist/core/store-health.d.ts +11 -0
- package/dist/core/store-health.d.ts.map +1 -0
- package/dist/core/store-health.js +26 -0
- package/dist/core/store-health.js.map +1 -0
- package/dist/core/store.d.ts +11 -1
- package/dist/core/store.d.ts.map +1 -1
- package/dist/core/store.js.map +1 -1
- package/dist/mcp/index.d.ts +2 -2
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +103 -6
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/index.test.js +7 -4
- package/dist/mcp/index.test.js.map +1 -1
- package/dist/mcp/registry.d.ts +1 -1
- package/dist/mcp/registry.d.ts.map +1 -1
- package/dist/mcp/registry.js +47 -3
- package/dist/mcp/registry.js.map +1 -1
- package/dist/mcp/sandbox.d.ts.map +1 -1
- package/dist/mcp/sandbox.js +18 -1
- package/dist/mcp/sandbox.js.map +1 -1
- package/dist/store/index.d.ts +34 -3
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +220 -4
- package/dist/store/index.js.map +1 -1
- package/dist/store-pg/index.d.ts +3 -0
- package/dist/store-pg/index.d.ts.map +1 -1
- package/dist/store-pg/index.js +74 -1
- package/dist/store-pg/index.js.map +1 -1
- package/package.json +14 -7
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
// slope index — Semantic embedding index management
|
|
2
|
+
// Subcommands: (default) incremental, --full, --status, --prune
|
|
3
|
+
import { execSync, execFileSync } from 'node:child_process';
|
|
4
|
+
import { readFileSync } from 'node:fs';
|
|
5
|
+
import { loadConfig } from '../../core/config.js';
|
|
6
|
+
import { chunkFile, shouldSkipFile } from '../../core/embedding.js';
|
|
7
|
+
import { embedBatch } from '../../core/embedding-client.js';
|
|
8
|
+
import { hasEmbeddingSupport } from '../../core/embedding-store.js';
|
|
9
|
+
import { SqliteSlopeStore } from '../../store/index.js';
|
|
10
|
+
function exec(cmd, cwd) {
|
|
11
|
+
try {
|
|
12
|
+
return execSync(cmd, { cwd, encoding: 'utf8', timeout: 30000 }).trim();
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return '';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function parseArgs(args) {
|
|
19
|
+
return {
|
|
20
|
+
full: args.includes('--full'),
|
|
21
|
+
status: args.includes('--status'),
|
|
22
|
+
prune: args.includes('--prune'),
|
|
23
|
+
json: args.includes('--json'),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function resolveEmbeddingConfig(config) {
|
|
27
|
+
const emb = config.embedding;
|
|
28
|
+
if (!emb) {
|
|
29
|
+
throw new Error('No embedding config found in .slope/config.json.\n' +
|
|
30
|
+
'Add an "embedding" section with endpoint, model, and dimensions.\n' +
|
|
31
|
+
'Example:\n "embedding": {\n "endpoint": "http://localhost:11434/v1/embeddings",\n "model": "nomic-embed-text",\n "dimensions": 768\n }');
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
endpoint: emb.endpoint,
|
|
35
|
+
model: emb.model,
|
|
36
|
+
dimensions: emb.dimensions,
|
|
37
|
+
apiKey: emb.apiKey,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function getSourceFiles(cwd) {
|
|
41
|
+
const output = exec('git ls-files', cwd);
|
|
42
|
+
if (!output)
|
|
43
|
+
return [];
|
|
44
|
+
return output.split('\n').filter(f => !shouldSkipFile(f));
|
|
45
|
+
}
|
|
46
|
+
function getChangedFiles(lastSha, cwd) {
|
|
47
|
+
// Validate SHA to prevent shell injection (use execFileSync for safety)
|
|
48
|
+
if (!/^[0-9a-f]{4,40}$/i.test(lastSha))
|
|
49
|
+
return [];
|
|
50
|
+
try {
|
|
51
|
+
const output = execFileSync('git', ['diff', '--name-only', `${lastSha}..HEAD`], {
|
|
52
|
+
cwd, encoding: 'utf8', timeout: 30000,
|
|
53
|
+
}).trim();
|
|
54
|
+
if (!output)
|
|
55
|
+
return [];
|
|
56
|
+
return output.split('\n').filter(f => !shouldSkipFile(f));
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return [];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function getHeadSha(cwd) {
|
|
63
|
+
return exec('git rev-parse HEAD', cwd);
|
|
64
|
+
}
|
|
65
|
+
export async function indexCommand(args) {
|
|
66
|
+
const cwd = process.cwd();
|
|
67
|
+
const config = loadConfig(cwd);
|
|
68
|
+
const flags = parseArgs(args);
|
|
69
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
70
|
+
printUsage();
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// Resolve store
|
|
74
|
+
const storePath = config.store_path ?? '.slope/slope.db';
|
|
75
|
+
const store = new SqliteSlopeStore(`${cwd}/${storePath}`);
|
|
76
|
+
try {
|
|
77
|
+
if (!hasEmbeddingSupport(store)) {
|
|
78
|
+
console.error('Error: Store does not support embeddings.');
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
if (flags.status) {
|
|
82
|
+
await showStatus(store, flags.json);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const embConfig = resolveEmbeddingConfig(config);
|
|
86
|
+
if (flags.prune) {
|
|
87
|
+
await pruneIndex(store, cwd);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (flags.full) {
|
|
91
|
+
await fullIndex(store, embConfig, cwd);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
await incrementalIndex(store, embConfig, cwd);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
store.close();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async function showStatus(store, json) {
|
|
102
|
+
const stats = await store.getEmbeddingStats();
|
|
103
|
+
if (json) {
|
|
104
|
+
console.log(JSON.stringify({
|
|
105
|
+
fileCount: stats.fileCount,
|
|
106
|
+
chunkCount: stats.chunkCount,
|
|
107
|
+
model: stats.model,
|
|
108
|
+
dimensions: stats.dimensions,
|
|
109
|
+
lastIndexedAt: stats.lastIndexedAt,
|
|
110
|
+
lastSha: stats.lastIndexedSha,
|
|
111
|
+
}));
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (stats.chunkCount === 0) {
|
|
115
|
+
console.log('\nSemantic index: empty');
|
|
116
|
+
console.log(' Run `slope index` to build the index.\n');
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
console.log('\nSemantic Index Status');
|
|
120
|
+
console.log(` Files: ${stats.fileCount}`);
|
|
121
|
+
console.log(` Chunks: ${stats.chunkCount}`);
|
|
122
|
+
console.log(` Model: ${stats.model ?? 'unknown'}`);
|
|
123
|
+
console.log(` Dimensions: ${stats.dimensions ?? 'unknown'}`);
|
|
124
|
+
console.log(` Last SHA: ${stats.lastIndexedSha ?? 'unknown'}`);
|
|
125
|
+
console.log(` Indexed at: ${stats.lastIndexedAt ?? 'unknown'}`);
|
|
126
|
+
console.log('');
|
|
127
|
+
}
|
|
128
|
+
async function fullIndex(store, embConfig, cwd) {
|
|
129
|
+
console.log('Rebuilding semantic index (full)...');
|
|
130
|
+
console.log(` Model: ${embConfig.model} (${embConfig.dimensions} dims)`);
|
|
131
|
+
// Drop and recreate vec table with configured dimensions
|
|
132
|
+
store.clearAllEmbeddings();
|
|
133
|
+
store.recreateVecTable(embConfig.dimensions);
|
|
134
|
+
const files = getSourceFiles(cwd);
|
|
135
|
+
console.log(` Source files: ${files.length}`);
|
|
136
|
+
const allChunks = [];
|
|
137
|
+
for (const file of files) {
|
|
138
|
+
try {
|
|
139
|
+
const content = readFileSync(`${cwd}/${file}`, 'utf8');
|
|
140
|
+
const chunks = chunkFile(file, content);
|
|
141
|
+
allChunks.push(...chunks);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Skip unreadable files
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
console.log(` Total chunks: ${allChunks.length}`);
|
|
148
|
+
if (allChunks.length === 0) {
|
|
149
|
+
console.log(' No chunks to index.\n');
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const headSha = getHeadSha(cwd);
|
|
153
|
+
const start = Date.now();
|
|
154
|
+
// Embed in batches with progress
|
|
155
|
+
const batchSize = 32;
|
|
156
|
+
let indexed = 0;
|
|
157
|
+
for (let i = 0; i < allChunks.length; i += batchSize) {
|
|
158
|
+
const batch = allChunks.slice(i, i + batchSize);
|
|
159
|
+
const results = await embedBatch(batch, embConfig, batchSize);
|
|
160
|
+
const entries = results.map(r => ({
|
|
161
|
+
filePath: r.filePath,
|
|
162
|
+
chunkIndex: r.chunkIndex,
|
|
163
|
+
chunkText: r.chunkText,
|
|
164
|
+
gitSha: headSha,
|
|
165
|
+
model: embConfig.model,
|
|
166
|
+
vector: r.vector,
|
|
167
|
+
}));
|
|
168
|
+
await store.saveEmbeddings(entries);
|
|
169
|
+
indexed += batch.length;
|
|
170
|
+
const pct = Math.round((indexed / allChunks.length) * 100);
|
|
171
|
+
process.stdout.write(`\r Indexing... ${indexed}/${allChunks.length} chunks (${pct}%)`);
|
|
172
|
+
}
|
|
173
|
+
const elapsed = ((Date.now() - start) / 1000).toFixed(1);
|
|
174
|
+
console.log(`\n \u2713 Index rebuilt (${files.length} files, ${allChunks.length} chunks, ${elapsed}s)`);
|
|
175
|
+
await store.setIndexMeta(headSha, embConfig.model, embConfig.dimensions);
|
|
176
|
+
console.log('');
|
|
177
|
+
}
|
|
178
|
+
async function incrementalIndex(store, embConfig, cwd) {
|
|
179
|
+
const meta = await store.getIndexMeta();
|
|
180
|
+
const headSha = getHeadSha(cwd);
|
|
181
|
+
// First-time: do full index
|
|
182
|
+
if (!meta) {
|
|
183
|
+
await fullIndex(store, embConfig, cwd);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
// Dimension mismatch check
|
|
187
|
+
if (meta.dimensions !== embConfig.dimensions) {
|
|
188
|
+
console.error(`Error: Index built with ${meta.dimensions} dims but config specifies ${embConfig.dimensions}. ` +
|
|
189
|
+
'Run: slope index --full');
|
|
190
|
+
process.exit(1);
|
|
191
|
+
}
|
|
192
|
+
// Already up to date
|
|
193
|
+
if (meta.sha === headSha) {
|
|
194
|
+
console.log('Semantic index is up to date.\n');
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
console.log('Updating semantic index...');
|
|
198
|
+
console.log(` Model: ${embConfig.model} (${embConfig.dimensions} dims)`);
|
|
199
|
+
// Find changed files
|
|
200
|
+
const changedFiles = getChangedFiles(meta.sha, cwd);
|
|
201
|
+
if (changedFiles.length === 0) {
|
|
202
|
+
console.log(' No file changes detected.');
|
|
203
|
+
await store.setIndexMeta(headSha, embConfig.model, embConfig.dimensions);
|
|
204
|
+
console.log(` \u2713 Index updated (SHA: ${headSha.slice(0, 8)})\n`);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
// Detect deleted files
|
|
208
|
+
const currentFiles = new Set(getSourceFiles(cwd));
|
|
209
|
+
const indexedFiles = await store.getIndexedFiles();
|
|
210
|
+
const deletedFiles = indexedFiles
|
|
211
|
+
.map(f => f.filePath)
|
|
212
|
+
.filter(f => !currentFiles.has(f));
|
|
213
|
+
// Remove deleted files
|
|
214
|
+
for (const file of deletedFiles) {
|
|
215
|
+
await store.deleteEmbeddingsByFile(file);
|
|
216
|
+
}
|
|
217
|
+
// Chunk changed files
|
|
218
|
+
const allChunks = [];
|
|
219
|
+
const validChangedFiles = changedFiles.filter(f => currentFiles.has(f));
|
|
220
|
+
for (const file of validChangedFiles) {
|
|
221
|
+
// Remove old embeddings for this file
|
|
222
|
+
await store.deleteEmbeddingsByFile(file);
|
|
223
|
+
try {
|
|
224
|
+
const content = readFileSync(`${cwd}/${file}`, 'utf8');
|
|
225
|
+
const chunks = chunkFile(file, content);
|
|
226
|
+
allChunks.push(...chunks);
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
// Skip unreadable files
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
console.log(` Changed files: ${validChangedFiles.length} (${allChunks.length} chunks)`);
|
|
233
|
+
if (deletedFiles.length > 0) {
|
|
234
|
+
console.log(` Deleted files: ${deletedFiles.length}`);
|
|
235
|
+
}
|
|
236
|
+
if (allChunks.length > 0) {
|
|
237
|
+
const start = Date.now();
|
|
238
|
+
const results = await embedBatch(allChunks, embConfig);
|
|
239
|
+
const entries = results.map(r => ({
|
|
240
|
+
filePath: r.filePath,
|
|
241
|
+
chunkIndex: r.chunkIndex,
|
|
242
|
+
chunkText: r.chunkText,
|
|
243
|
+
gitSha: headSha,
|
|
244
|
+
model: embConfig.model,
|
|
245
|
+
vector: r.vector,
|
|
246
|
+
}));
|
|
247
|
+
await store.saveEmbeddings(entries);
|
|
248
|
+
const elapsed = ((Date.now() - start) / 1000).toFixed(1);
|
|
249
|
+
console.log(` \u2713 Index updated (${validChangedFiles.length} files, ${allChunks.length} chunks, ${elapsed}s)`);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
console.log(' \u2713 Index updated (removals only)');
|
|
253
|
+
}
|
|
254
|
+
await store.setIndexMeta(headSha, embConfig.model, embConfig.dimensions);
|
|
255
|
+
console.log('');
|
|
256
|
+
}
|
|
257
|
+
async function pruneIndex(store, cwd) {
|
|
258
|
+
console.log('Pruning semantic index...');
|
|
259
|
+
const currentFiles = new Set(getSourceFiles(cwd));
|
|
260
|
+
const indexedFiles = await store.getIndexedFiles();
|
|
261
|
+
const orphans = indexedFiles
|
|
262
|
+
.map(f => f.filePath)
|
|
263
|
+
.filter(f => !currentFiles.has(f));
|
|
264
|
+
// Deduplicate
|
|
265
|
+
const uniqueOrphans = [...new Set(orphans)];
|
|
266
|
+
if (uniqueOrphans.length === 0) {
|
|
267
|
+
console.log(' No orphaned embeddings found.\n');
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
for (const file of uniqueOrphans) {
|
|
271
|
+
await store.deleteEmbeddingsByFile(file);
|
|
272
|
+
}
|
|
273
|
+
console.log(` \u2713 Pruned ${uniqueOrphans.length} file(s)\n`);
|
|
274
|
+
}
|
|
275
|
+
function printUsage() {
|
|
276
|
+
console.log(`
|
|
277
|
+
slope index — Semantic embedding index management
|
|
278
|
+
|
|
279
|
+
Usage:
|
|
280
|
+
slope index Incremental index (changed files only)
|
|
281
|
+
slope index --full Full reindex (drop + rebuild)
|
|
282
|
+
slope index --status Show index stats
|
|
283
|
+
slope index --status --json Show index stats as JSON
|
|
284
|
+
slope index --prune Remove embeddings for deleted files
|
|
285
|
+
|
|
286
|
+
Requires "embedding" section in .slope/config.json:
|
|
287
|
+
{
|
|
288
|
+
"embedding": {
|
|
289
|
+
"endpoint": "http://localhost:11434/v1/embeddings",
|
|
290
|
+
"model": "nomic-embed-text",
|
|
291
|
+
"dimensions": 768
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
`);
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=index-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/index-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,14 @@ import type { HarnessId } from '../../core/harness.js';
|
|
|
2
2
|
import '../../core/adapters/claude-code.js';
|
|
3
3
|
import '../../core/adapters/cursor.js';
|
|
4
4
|
import '../../core/adapters/windsurf.js';
|
|
5
|
+
import '../../core/adapters/cline.js';
|
|
5
6
|
import '../../core/adapters/generic.js';
|
|
6
7
|
/** Init supports all harness adapters plus OpenCode (template-only, no adapter) */
|
|
7
|
-
type InitProvider = HarnessId | 'opencode';
|
|
8
|
+
export type InitProvider = HarnessId | 'opencode';
|
|
8
9
|
export declare function detectProvidersFromArgs(args: string[]): InitProvider[];
|
|
9
10
|
/** Detect platforms present in the project directory using the adapter framework */
|
|
10
11
|
export declare function detectPlatforms(cwd: string): InitProvider[];
|
|
12
|
+
/** Print a summary of what was installed after init completes */
|
|
13
|
+
export declare function printInstallSummary(providers: InitProvider[]): void;
|
|
11
14
|
export declare function initCommand(args: string[]): Promise<void>;
|
|
12
|
-
export {};
|
|
13
15
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,oCAAoC,CAAC;AAC5C,OAAO,+BAA+B,CAAC;AACvC,OAAO,iCAAiC,CAAC;AACzC,OAAO,8BAA8B,CAAC;AACtC,OAAO,gCAAgC,CAAC;AA0FxC,mFAAmF;AACnF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC;AAElD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAiBtE;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,EAAE,CAa3D;AA2bD,iEAAiE;AACjE,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,IAAI,CAiDnE;AAyBD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmG/D"}
|