@knowledgine/cli 0.1.0 → 0.2.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/dist/commands/capture.d.ts +10 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +132 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/demo.d.ts +6 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +44 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/feedback.d.ts +18 -0
- package/dist/commands/feedback.d.ts.map +1 -0
- package/dist/commands/feedback.js +79 -0
- package/dist/commands/feedback.js.map +1 -0
- package/dist/commands/ingest.d.ts +8 -0
- package/dist/commands/ingest.d.ts.map +1 -0
- package/dist/commands/ingest.js +98 -0
- package/dist/commands/ingest.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +294 -37
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/plugins.d.ts +6 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +40 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/commands/search.d.ts +16 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +117 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/setup.d.ts +14 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +167 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/start.d.ts +1 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +82 -15
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +121 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/tool.d.ts +29 -0
- package/dist/commands/tool.d.ts.map +1 -0
- package/dist/commands/tool.js +247 -0
- package/dist/commands/tool.js.map +1 -0
- package/dist/commands/upgrade.d.ts +6 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +91 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/index.js +144 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/demo-manager.d.ts +16 -0
- package/dist/lib/demo-manager.d.ts.map +1 -0
- package/dist/lib/demo-manager.js +37 -0
- package/dist/lib/demo-manager.js.map +1 -0
- package/dist/lib/formatter.d.ts +7 -0
- package/dist/lib/formatter.d.ts.map +1 -0
- package/dist/lib/formatter.js +91 -0
- package/dist/lib/formatter.js.map +1 -0
- package/dist/lib/indexer.d.ts +4 -1
- package/dist/lib/indexer.d.ts.map +1 -1
- package/dist/lib/indexer.js +2 -1
- package/dist/lib/indexer.js.map +1 -1
- package/dist/lib/ingest-watcher.d.ts +20 -0
- package/dist/lib/ingest-watcher.d.ts.map +1 -0
- package/dist/lib/ingest-watcher.js +44 -0
- package/dist/lib/ingest-watcher.js.map +1 -0
- package/dist/lib/plugin-loader.d.ts +5 -0
- package/dist/lib/plugin-loader.d.ts.map +1 -0
- package/dist/lib/plugin-loader.js +27 -0
- package/dist/lib/plugin-loader.js.map +1 -0
- package/dist/lib/progress.d.ts +57 -0
- package/dist/lib/progress.d.ts.map +1 -0
- package/dist/lib/progress.js +191 -0
- package/dist/lib/progress.js.map +1 -0
- package/dist/lib/url-validator.d.ts +2 -0
- package/dist/lib/url-validator.d.ts.map +1 -0
- package/dist/lib/url-validator.js +17 -0
- package/dist/lib/url-validator.js.map +1 -0
- package/fixtures/demo/notes/api-design-decisions.md +79 -0
- package/fixtures/demo/notes/auth-debugging.md +52 -0
- package/fixtures/demo/notes/ci-cd-pipeline.md +90 -0
- package/fixtures/demo/notes/code-review-notes.md +71 -0
- package/fixtures/demo/notes/database-optimization.md +73 -0
- package/fixtures/demo/notes/docker-troubleshooting.md +74 -0
- package/fixtures/demo/notes/react-performance.md +66 -0
- package/fixtures/demo/notes/typescript-migration.md +80 -0
- package/package.json +6 -4
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { resolve } from "path";
|
|
2
|
+
import { existsSync } from "fs";
|
|
3
|
+
import { loadConfig, createDatabase, Migrator, KnowledgeRepository, GraphRepository, ALL_MIGRATIONS, KnowledgeService, } from "@knowledgine/core";
|
|
4
|
+
import { formatSearchResults, formatRelatedNotes, formatStats, formatEntities, } from "../lib/formatter.js";
|
|
5
|
+
const CLI_ERRORS = {
|
|
6
|
+
NOT_INITIALIZED: 'Not initialized. Run "knowledgine init --path <dir>" first.',
|
|
7
|
+
GRAPH_NOT_AVAILABLE: "Knowledge graph is not available. Run init with graph support.",
|
|
8
|
+
FEEDBACK_NOT_AVAILABLE: "Feedback system is not available.",
|
|
9
|
+
NOTE_ID_OR_FILE_REQUIRED: "Either --id <noteId> or --file <path> is required.",
|
|
10
|
+
ENTITY_ID_OR_NAME_REQUIRED: "Either entityId or entityName is required.",
|
|
11
|
+
INVALID_PATH: "Invalid file path: outside of root directory.",
|
|
12
|
+
};
|
|
13
|
+
function validateLimit(value) {
|
|
14
|
+
if (value === undefined)
|
|
15
|
+
return 20;
|
|
16
|
+
const n = parseInt(value, 10);
|
|
17
|
+
if (isNaN(n) || n < 1 || n > 10000)
|
|
18
|
+
throw new Error("--limit must be a positive integer (1-10000)");
|
|
19
|
+
return n;
|
|
20
|
+
}
|
|
21
|
+
function validateMode(value) {
|
|
22
|
+
if (value === undefined)
|
|
23
|
+
return "keyword";
|
|
24
|
+
if (!["keyword", "semantic", "hybrid"].includes(value))
|
|
25
|
+
throw new Error("--mode must be one of: keyword, semantic, hybrid");
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
function validateFormat(value) {
|
|
29
|
+
if (value === undefined)
|
|
30
|
+
return "table";
|
|
31
|
+
if (!["json", "table", "plain"].includes(value))
|
|
32
|
+
throw new Error("--format must be one of: json, table, plain");
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
export async function toolSearchCommand(query, options) {
|
|
36
|
+
const rootPath = options.path ? resolve(options.path) : resolve(process.cwd());
|
|
37
|
+
const knowledgineDir = resolve(rootPath, ".knowledgine");
|
|
38
|
+
if (!existsSync(knowledgineDir)) {
|
|
39
|
+
console.error(CLI_ERRORS.NOT_INITIALIZED);
|
|
40
|
+
process.exitCode = 1;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
let limit;
|
|
44
|
+
let mode;
|
|
45
|
+
let format;
|
|
46
|
+
try {
|
|
47
|
+
limit = validateLimit(options.limit);
|
|
48
|
+
mode = validateMode(options.mode);
|
|
49
|
+
format = validateFormat(options.format);
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
console.error(`Error: ${e instanceof Error ? e.message : String(e)}`);
|
|
53
|
+
process.exitCode = 1;
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const config = loadConfig(rootPath);
|
|
57
|
+
const db = createDatabase(config.dbPath);
|
|
58
|
+
try {
|
|
59
|
+
new Migrator(db, ALL_MIGRATIONS).migrate();
|
|
60
|
+
const repository = new KnowledgeRepository(db);
|
|
61
|
+
const graphRepository = new GraphRepository(db);
|
|
62
|
+
const service = new KnowledgeService({ repository, rootPath, graphRepository });
|
|
63
|
+
const result = await service.search({ query, limit, mode });
|
|
64
|
+
if (result.results.length === 0) {
|
|
65
|
+
console.error(`No results for "${query}"`);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
console.error(formatSearchResults(result.results, format));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
73
|
+
process.exitCode = 1;
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
db.close();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export async function toolRelatedCommand(options) {
|
|
80
|
+
const rootPath = options.path ? resolve(options.path) : resolve(process.cwd());
|
|
81
|
+
const knowledgineDir = resolve(rootPath, ".knowledgine");
|
|
82
|
+
if (!existsSync(knowledgineDir)) {
|
|
83
|
+
console.error(CLI_ERRORS.NOT_INITIALIZED);
|
|
84
|
+
process.exitCode = 1;
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (!options.id && !options.file) {
|
|
88
|
+
console.error(`Error: ${CLI_ERRORS.NOTE_ID_OR_FILE_REQUIRED}`);
|
|
89
|
+
process.exitCode = 1;
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
let limit;
|
|
93
|
+
let format;
|
|
94
|
+
try {
|
|
95
|
+
limit = validateLimit(options.limit);
|
|
96
|
+
format = validateFormat(options.format);
|
|
97
|
+
}
|
|
98
|
+
catch (e) {
|
|
99
|
+
console.error(`Error: ${e instanceof Error ? e.message : String(e)}`);
|
|
100
|
+
process.exitCode = 1;
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const noteId = options.id ? parseInt(options.id, 10) : undefined;
|
|
104
|
+
if (options.id && (isNaN(noteId) || noteId < 1)) {
|
|
105
|
+
console.error("Error: --id must be a positive integer");
|
|
106
|
+
process.exitCode = 1;
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const config = loadConfig(rootPath);
|
|
110
|
+
const db = createDatabase(config.dbPath);
|
|
111
|
+
try {
|
|
112
|
+
new Migrator(db, ALL_MIGRATIONS).migrate();
|
|
113
|
+
const repository = new KnowledgeRepository(db);
|
|
114
|
+
const graphRepository = new GraphRepository(db);
|
|
115
|
+
const service = new KnowledgeService({ repository, rootPath, graphRepository });
|
|
116
|
+
const result = await service.findRelated({
|
|
117
|
+
noteId,
|
|
118
|
+
filePath: options.file,
|
|
119
|
+
limit,
|
|
120
|
+
});
|
|
121
|
+
console.error(formatRelatedNotes(result, format));
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
125
|
+
if (msg.includes("Invalid file path")) {
|
|
126
|
+
console.error(`Error: ${CLI_ERRORS.INVALID_PATH}`);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
console.error(`Error: ${msg}`);
|
|
130
|
+
}
|
|
131
|
+
process.exitCode = 1;
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
db.close();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export async function toolStatsCommand(options) {
|
|
138
|
+
const rootPath = options.path ? resolve(options.path) : resolve(process.cwd());
|
|
139
|
+
const knowledgineDir = resolve(rootPath, ".knowledgine");
|
|
140
|
+
if (!existsSync(knowledgineDir)) {
|
|
141
|
+
console.error(CLI_ERRORS.NOT_INITIALIZED);
|
|
142
|
+
process.exitCode = 1;
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
let format;
|
|
146
|
+
try {
|
|
147
|
+
format = validateFormat(options.format);
|
|
148
|
+
}
|
|
149
|
+
catch (e) {
|
|
150
|
+
console.error(`Error: ${e instanceof Error ? e.message : String(e)}`);
|
|
151
|
+
process.exitCode = 1;
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const config = loadConfig(rootPath);
|
|
155
|
+
const db = createDatabase(config.dbPath);
|
|
156
|
+
try {
|
|
157
|
+
new Migrator(db, ALL_MIGRATIONS).migrate();
|
|
158
|
+
const repository = new KnowledgeRepository(db);
|
|
159
|
+
const graphRepository = new GraphRepository(db);
|
|
160
|
+
const service = new KnowledgeService({ repository, rootPath, graphRepository });
|
|
161
|
+
const result = service.getStats();
|
|
162
|
+
console.error(formatStats(result, format));
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
166
|
+
process.exitCode = 1;
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
db.close();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
export async function toolEntitiesCommand(query, options) {
|
|
173
|
+
const rootPath = options.path ? resolve(options.path) : resolve(process.cwd());
|
|
174
|
+
const knowledgineDir = resolve(rootPath, ".knowledgine");
|
|
175
|
+
if (!existsSync(knowledgineDir)) {
|
|
176
|
+
console.error(CLI_ERRORS.NOT_INITIALIZED);
|
|
177
|
+
process.exitCode = 1;
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
let limit;
|
|
181
|
+
let format;
|
|
182
|
+
try {
|
|
183
|
+
limit = validateLimit(options.limit);
|
|
184
|
+
format = validateFormat(options.format);
|
|
185
|
+
}
|
|
186
|
+
catch (e) {
|
|
187
|
+
console.error(`Error: ${e instanceof Error ? e.message : String(e)}`);
|
|
188
|
+
process.exitCode = 1;
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const config = loadConfig(rootPath);
|
|
192
|
+
const db = createDatabase(config.dbPath);
|
|
193
|
+
try {
|
|
194
|
+
new Migrator(db, ALL_MIGRATIONS).migrate();
|
|
195
|
+
const repository = new KnowledgeRepository(db);
|
|
196
|
+
const graphRepository = new GraphRepository(db);
|
|
197
|
+
const service = new KnowledgeService({ repository, rootPath, graphRepository });
|
|
198
|
+
const result = service.searchEntities({ query, limit });
|
|
199
|
+
if (result.totalResults === 0) {
|
|
200
|
+
console.error(`No entities found for "${query}"`);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
console.error(formatEntities(result, format));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
208
|
+
process.exitCode = 1;
|
|
209
|
+
}
|
|
210
|
+
finally {
|
|
211
|
+
db.close();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
export function registerToolCommands(program) {
|
|
215
|
+
const toolCmd = program.command("tool").description("Knowledge base query tools");
|
|
216
|
+
toolCmd
|
|
217
|
+
.command("search <query>")
|
|
218
|
+
.description("Search indexed notes")
|
|
219
|
+
.option("--path <dir>", "Root directory")
|
|
220
|
+
.option("--limit <n>", "Maximum results (1-10000)", "20")
|
|
221
|
+
.option("--mode <mode>", "Search mode: keyword, semantic, hybrid", "keyword")
|
|
222
|
+
.option("--format <format>", "Output format: json, table, plain", "table")
|
|
223
|
+
.action(toolSearchCommand);
|
|
224
|
+
toolCmd
|
|
225
|
+
.command("related")
|
|
226
|
+
.description("Find related notes for a given note")
|
|
227
|
+
.option("--path <dir>", "Root directory")
|
|
228
|
+
.option("--id <noteId>", "Note ID")
|
|
229
|
+
.option("--file <path>", "File path")
|
|
230
|
+
.option("--limit <n>", "Maximum results (1-10000)", "5")
|
|
231
|
+
.option("--format <format>", "Output format: json, table, plain", "table")
|
|
232
|
+
.action(toolRelatedCommand);
|
|
233
|
+
toolCmd
|
|
234
|
+
.command("stats")
|
|
235
|
+
.description("Show knowledge base statistics")
|
|
236
|
+
.option("--path <dir>", "Root directory")
|
|
237
|
+
.option("--format <format>", "Output format: json, table, plain", "table")
|
|
238
|
+
.action(toolStatsCommand);
|
|
239
|
+
toolCmd
|
|
240
|
+
.command("entities <query>")
|
|
241
|
+
.description("Search entities in the knowledge graph")
|
|
242
|
+
.option("--path <dir>", "Root directory")
|
|
243
|
+
.option("--limit <n>", "Maximum results (1-10000)", "20")
|
|
244
|
+
.option("--format <format>", "Output format: json, table, plain", "table")
|
|
245
|
+
.action(toolEntitiesCommand);
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/commands/tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+F3E"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { resolve } from "path";
|
|
2
|
+
import { existsSync } from "fs";
|
|
3
|
+
import { loadConfig, writeRcConfig, createDatabase, loadSqliteVecExtension, Migrator, KnowledgeRepository, ALL_MIGRATIONS, OnnxEmbeddingProvider, ModelManager, downloadModel, } from "@knowledgine/core";
|
|
4
|
+
import { createProgress } from "../lib/progress.js";
|
|
5
|
+
export async function upgradeCommand(options) {
|
|
6
|
+
const rootPath = resolve(options.path ?? process.cwd());
|
|
7
|
+
if (!options.semantic) {
|
|
8
|
+
console.error("Usage: knowledgine upgrade --semantic");
|
|
9
|
+
console.error("");
|
|
10
|
+
console.error("Available upgrades:");
|
|
11
|
+
console.error(" --semantic Enable semantic search (download model + generate embeddings)");
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
// Check initialization
|
|
15
|
+
const knowledgineDir = resolve(rootPath, ".knowledgine");
|
|
16
|
+
if (!existsSync(knowledgineDir)) {
|
|
17
|
+
console.error(`Error: Not initialized. Run 'knowledgine init --path ${rootPath}' first.`);
|
|
18
|
+
process.exitCode = 1;
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const config = loadConfig(rootPath);
|
|
22
|
+
config.embedding.enabled = true;
|
|
23
|
+
const db = createDatabase(config.dbPath);
|
|
24
|
+
await loadSqliteVecExtension(db);
|
|
25
|
+
new Migrator(db, ALL_MIGRATIONS).migrate();
|
|
26
|
+
const repository = new KnowledgeRepository(db);
|
|
27
|
+
// Download model
|
|
28
|
+
const modelManager = new ModelManager();
|
|
29
|
+
if (!modelManager.isModelAvailable()) {
|
|
30
|
+
console.error("Downloading embedding model (~23MB)...");
|
|
31
|
+
try {
|
|
32
|
+
await downloadModel(modelManager, {
|
|
33
|
+
onProgress: (progress) => {
|
|
34
|
+
if (progress.total) {
|
|
35
|
+
const mb = (progress.downloaded / (1024 * 1024)).toFixed(1);
|
|
36
|
+
const totalMb = (progress.total / (1024 * 1024)).toFixed(1);
|
|
37
|
+
process.stderr.write(`\r ${progress.file}: ${mb}/${totalMb} MB`);
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
onFileComplete: (file) => {
|
|
41
|
+
process.stderr.write(`\r [done] ${file} \n`);
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
console.error("Model download complete.");
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
console.error(`\nModel download failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
48
|
+
console.error("Semantic search upgrade aborted.");
|
|
49
|
+
db.close();
|
|
50
|
+
process.exitCode = 1;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
console.error("Embedding model already available.");
|
|
56
|
+
}
|
|
57
|
+
// Generate embeddings for notes that don't have them
|
|
58
|
+
const embeddingProvider = new OnnxEmbeddingProvider(undefined, modelManager);
|
|
59
|
+
const notesWithout = repository.getNotesWithoutEmbeddings();
|
|
60
|
+
if (notesWithout.length > 0) {
|
|
61
|
+
console.error("");
|
|
62
|
+
const embProgress = createProgress(notesWithout.length, "Generating embeddings");
|
|
63
|
+
let generated = 0;
|
|
64
|
+
let failed = 0;
|
|
65
|
+
for (const note of notesWithout) {
|
|
66
|
+
try {
|
|
67
|
+
const embedding = await embeddingProvider.embed(note.content);
|
|
68
|
+
repository.saveEmbedding(note.id, embedding, config.embedding.modelName);
|
|
69
|
+
generated++;
|
|
70
|
+
embProgress.update(generated);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
failed++;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
embProgress.finish();
|
|
77
|
+
console.error(` Generated: ${generated}, Failed: ${failed}`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.error("All notes already have embeddings.");
|
|
81
|
+
}
|
|
82
|
+
// Write .knowledginerc.json
|
|
83
|
+
writeRcConfig(rootPath, { semantic: true });
|
|
84
|
+
console.error("");
|
|
85
|
+
console.error("Semantic search enabled successfully.");
|
|
86
|
+
console.error(" Config: .knowledginerc.json written (semantic: true)");
|
|
87
|
+
console.error("");
|
|
88
|
+
console.error("Restart the MCP server to activate semantic search.");
|
|
89
|
+
db.close();
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,20 +3,162 @@ import { Command } from "commander";
|
|
|
3
3
|
import { VERSION } from "@knowledgine/core";
|
|
4
4
|
import { initCommand } from "./commands/init.js";
|
|
5
5
|
import { startCommand } from "./commands/start.js";
|
|
6
|
+
import { setupCommand } from "./commands/setup.js";
|
|
7
|
+
import { statusCommand } from "./commands/status.js";
|
|
8
|
+
import { upgradeCommand } from "./commands/upgrade.js";
|
|
9
|
+
import { ingestCommand } from "./commands/ingest.js";
|
|
10
|
+
import { pluginsListCommand, pluginsStatusCommand } from "./commands/plugins.js";
|
|
11
|
+
import { feedbackListCommand, feedbackApplyCommand, feedbackDismissCommand, feedbackStatsCommand, } from "./commands/feedback.js";
|
|
12
|
+
import { demoCommand } from "./commands/demo.js";
|
|
13
|
+
import { searchCommand } from "./commands/search.js";
|
|
14
|
+
import { captureCommand } from "./commands/capture.js";
|
|
15
|
+
import { registerToolCommands } from "./commands/tool.js";
|
|
6
16
|
const program = new Command();
|
|
7
17
|
program
|
|
8
18
|
.name("knowledgine")
|
|
9
19
|
.description("Developer Knowledge Infrastructure - Extract structured knowledge from your codebase")
|
|
10
|
-
.version(VERSION)
|
|
20
|
+
.version(VERSION)
|
|
21
|
+
.addHelpText("after", `
|
|
22
|
+
Workflow:
|
|
23
|
+
1. knowledgine init --path ~/notes Index your files (FTS5 full-text search)
|
|
24
|
+
2. knowledgine setup --target claude-desktop Configure AI tool
|
|
25
|
+
3. knowledgine start --path ~/notes Start MCP server
|
|
26
|
+
|
|
27
|
+
Optional:
|
|
28
|
+
knowledgine upgrade --semantic Enable semantic search (downloads ~23MB model)
|
|
29
|
+
|
|
30
|
+
Run 'knowledgine <command> --help' for more information on a command.`);
|
|
11
31
|
program
|
|
12
32
|
.command("init")
|
|
13
|
-
.description("Scan and index markdown files
|
|
33
|
+
.description("Scan and index markdown files (FTS5 full-text search by default)")
|
|
14
34
|
.option("--path <dir>", "Root directory to scan")
|
|
35
|
+
.option("--semantic", "Enable semantic search (download model + generate embeddings)")
|
|
36
|
+
.option("--skip-embeddings", "[deprecated] Use default behavior instead (embeddings are now opt-in)")
|
|
37
|
+
.option("--demo", "Initialize with sample demo notes")
|
|
38
|
+
.addHelpText("after", `
|
|
39
|
+
Examples:
|
|
40
|
+
knowledgine init --path ~/notes
|
|
41
|
+
knowledgine init --path ~/project --semantic
|
|
42
|
+
knowledgine init --demo`)
|
|
15
43
|
.action(initCommand);
|
|
16
44
|
program
|
|
17
45
|
.command("start")
|
|
18
46
|
.description("Start MCP server with file watching")
|
|
19
47
|
.option("--path <dir>", "Root directory to serve")
|
|
48
|
+
.option("--ingest", "Enable IngestEngine for all plugins")
|
|
49
|
+
.addHelpText("after", `
|
|
50
|
+
Example:
|
|
51
|
+
knowledgine start --path ~/notes
|
|
52
|
+
knowledgine start --path ~/notes --ingest`)
|
|
20
53
|
.action(startCommand);
|
|
54
|
+
program
|
|
55
|
+
.command("setup")
|
|
56
|
+
.description("Generate MCP configuration for AI tools")
|
|
57
|
+
.option("--target <tool>", "Target AI tool (claude-desktop, cursor)")
|
|
58
|
+
.option("--path <dir>", "Root directory of indexed notes")
|
|
59
|
+
.option("--write", "Write configuration to file (default: dry-run)")
|
|
60
|
+
.addHelpText("after", `
|
|
61
|
+
Examples:
|
|
62
|
+
knowledgine setup --target claude-desktop --path ~/notes
|
|
63
|
+
knowledgine setup --target cursor --path ~/notes --write`)
|
|
64
|
+
.action(setupCommand);
|
|
65
|
+
program
|
|
66
|
+
.command("status")
|
|
67
|
+
.description("Check knowledgine setup and configuration status")
|
|
68
|
+
.option("--path <dir>", "Root directory to check")
|
|
69
|
+
.addHelpText("after", `
|
|
70
|
+
Example:
|
|
71
|
+
knowledgine status --path ~/notes`)
|
|
72
|
+
.action(statusCommand);
|
|
73
|
+
program
|
|
74
|
+
.command("upgrade")
|
|
75
|
+
.description("Upgrade knowledgine capabilities")
|
|
76
|
+
.option("--semantic", "Enable semantic search (download model + generate embeddings)")
|
|
77
|
+
.option("--path <dir>", "Root directory")
|
|
78
|
+
.addHelpText("after", `
|
|
79
|
+
Example:
|
|
80
|
+
knowledgine upgrade --semantic --path ~/notes`)
|
|
81
|
+
.action(upgradeCommand);
|
|
82
|
+
program
|
|
83
|
+
.command("ingest")
|
|
84
|
+
.description("Ingest knowledge from configured sources")
|
|
85
|
+
.option("--source <pluginId>", "Specific plugin to run")
|
|
86
|
+
.option("--path <dir>", "Root directory")
|
|
87
|
+
.option("--full", "Force full re-ingest (ignore cursor)")
|
|
88
|
+
.option("--all", "Run all registered plugins")
|
|
89
|
+
.action(ingestCommand);
|
|
90
|
+
const pluginsCmd = program
|
|
91
|
+
.command("plugins")
|
|
92
|
+
.description("Manage ingest plugins");
|
|
93
|
+
pluginsCmd
|
|
94
|
+
.command("list")
|
|
95
|
+
.description("List registered plugins")
|
|
96
|
+
.action(pluginsListCommand);
|
|
97
|
+
pluginsCmd
|
|
98
|
+
.command("status")
|
|
99
|
+
.option("--path <dir>", "Root directory")
|
|
100
|
+
.description("Show plugin ingest status")
|
|
101
|
+
.action(pluginsStatusCommand);
|
|
102
|
+
const feedbackCmd = program
|
|
103
|
+
.command("feedback")
|
|
104
|
+
.description("Manage extraction feedback");
|
|
105
|
+
feedbackCmd
|
|
106
|
+
.command("list")
|
|
107
|
+
.description("List feedback records")
|
|
108
|
+
.option("--status <status>", "Filter by status (pending, applied, dismissed)")
|
|
109
|
+
.option("--path <dir>", "Root directory")
|
|
110
|
+
.action(feedbackListCommand);
|
|
111
|
+
feedbackCmd
|
|
112
|
+
.command("apply <id>")
|
|
113
|
+
.description("Apply feedback and update extraction rules")
|
|
114
|
+
.option("--path <dir>", "Root directory")
|
|
115
|
+
.action(feedbackApplyCommand);
|
|
116
|
+
feedbackCmd
|
|
117
|
+
.command("dismiss <id>")
|
|
118
|
+
.description("Dismiss feedback without applying")
|
|
119
|
+
.option("--path <dir>", "Root directory")
|
|
120
|
+
.action(feedbackDismissCommand);
|
|
121
|
+
feedbackCmd
|
|
122
|
+
.command("stats")
|
|
123
|
+
.description("Show feedback statistics")
|
|
124
|
+
.option("--path <dir>", "Root directory")
|
|
125
|
+
.action(feedbackStatsCommand);
|
|
126
|
+
program
|
|
127
|
+
.command("demo")
|
|
128
|
+
.description("Show demo usage information or clean up demo files")
|
|
129
|
+
.option("--clean", "Remove demo notes and data")
|
|
130
|
+
.action(demoCommand);
|
|
131
|
+
program
|
|
132
|
+
.command("search <query>")
|
|
133
|
+
.description("Search indexed notes")
|
|
134
|
+
.option("--demo", "Search in demo notes")
|
|
135
|
+
.option("--mode <mode>", "Search mode: keyword, semantic, hybrid", "keyword")
|
|
136
|
+
.option("--limit <n>", "Maximum results", "20")
|
|
137
|
+
.option("--format <format>", "Output format: json, table, plain", "plain")
|
|
138
|
+
.option("--related <noteId>", "Find related notes by note ID")
|
|
139
|
+
.option("--related-file <path>", "Find related notes by file path")
|
|
140
|
+
.option("--path <dir>", "Root directory")
|
|
141
|
+
.action((query, opts) => {
|
|
142
|
+
return searchCommand(query, {
|
|
143
|
+
demo: opts.demo,
|
|
144
|
+
mode: opts.mode,
|
|
145
|
+
limit: Number(opts.limit),
|
|
146
|
+
format: opts.format,
|
|
147
|
+
related: opts.related,
|
|
148
|
+
relatedFile: opts.relatedFile,
|
|
149
|
+
path: opts.path,
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
program
|
|
153
|
+
.command("capture [text]")
|
|
154
|
+
.description("Capture knowledge from text, URL, or file")
|
|
155
|
+
.option("-u, --url <url>", "URL to fetch and capture")
|
|
156
|
+
.option("-f, --file <path>", "File path to capture")
|
|
157
|
+
.option("-t, --tags <tags>", "Comma-separated tags")
|
|
158
|
+
.option("--title <title>", "Title for the captured knowledge")
|
|
159
|
+
.option("--path <dir>", "Root directory")
|
|
160
|
+
.option("--format <format>", "Output format: json, plain", "plain")
|
|
161
|
+
.action(captureCommand);
|
|
162
|
+
registerToolCommands(program);
|
|
21
163
|
program.parse();
|
|
22
164
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the path to the bundled demo fixture notes.
|
|
3
|
+
* Works from both src/ (development) and dist/ (published package).
|
|
4
|
+
*/
|
|
5
|
+
export declare function getDemoDir(): string;
|
|
6
|
+
/**
|
|
7
|
+
* Copy demo fixtures into the target directory.
|
|
8
|
+
* Returns the number of markdown files copied.
|
|
9
|
+
*/
|
|
10
|
+
export declare function copyDemoFixtures(targetDir: string): number;
|
|
11
|
+
/**
|
|
12
|
+
* Remove the demo notes directory.
|
|
13
|
+
* Only removes the notes directory — does NOT touch .knowledgine.
|
|
14
|
+
*/
|
|
15
|
+
export declare function cleanDemo(demoPath: string): void;
|
|
16
|
+
//# sourceMappingURL=demo-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-manager.d.ts","sourceRoot":"","sources":["../../src/lib/demo-manager.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAQ1D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAIhD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { fileURLToPath } from "url";
|
|
2
|
+
import { dirname, resolve } from "path";
|
|
3
|
+
import { cpSync, rmSync, existsSync, mkdirSync, readdirSync } from "fs";
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the path to the bundled demo fixture notes.
|
|
6
|
+
* Works from both src/ (development) and dist/ (published package).
|
|
7
|
+
*/
|
|
8
|
+
export function getDemoDir() {
|
|
9
|
+
const currentDir = dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
// In dist: dist/lib/demo-manager.js -> package root
|
|
11
|
+
// In src: src/lib/demo-manager.js -> package root
|
|
12
|
+
const packageRoot = resolve(currentDir, "..", "..");
|
|
13
|
+
return resolve(packageRoot, "fixtures", "demo", "notes");
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Copy demo fixtures into the target directory.
|
|
17
|
+
* Returns the number of markdown files copied.
|
|
18
|
+
*/
|
|
19
|
+
export function copyDemoFixtures(targetDir) {
|
|
20
|
+
const demoDir = getDemoDir();
|
|
21
|
+
if (!existsSync(demoDir)) {
|
|
22
|
+
throw new Error(`Demo fixtures not found at ${demoDir}`);
|
|
23
|
+
}
|
|
24
|
+
mkdirSync(targetDir, { recursive: true });
|
|
25
|
+
cpSync(demoDir, targetDir, { recursive: true });
|
|
26
|
+
return readdirSync(targetDir).filter((f) => f.endsWith(".md")).length;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Remove the demo notes directory.
|
|
30
|
+
* Only removes the notes directory — does NOT touch .knowledgine.
|
|
31
|
+
*/
|
|
32
|
+
export function cleanDemo(demoPath) {
|
|
33
|
+
if (existsSync(demoPath)) {
|
|
34
|
+
rmSync(demoPath, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=demo-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-manager.js","sourceRoot":"","sources":["../../src/lib/demo-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAExE;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,oDAAoD;IACpD,oDAAoD;IACpD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SearchKnowledgeResult, FindRelatedResult, StatsResult, SearchEntitiesResult } from "@knowledgine/core";
|
|
2
|
+
export type OutputFormat = "json" | "table" | "plain";
|
|
3
|
+
export declare function formatSearchResults(results: SearchKnowledgeResult["results"], format: OutputFormat): string;
|
|
4
|
+
export declare function formatRelatedNotes(result: FindRelatedResult, format: OutputFormat): string;
|
|
5
|
+
export declare function formatStats(stats: StatsResult, format: OutputFormat): string;
|
|
6
|
+
export declare function formatEntities(result: SearchEntitiesResult, format: OutputFormat): string;
|
|
7
|
+
//# sourceMappingURL=formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/lib/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEtD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,qBAAqB,CAAC,SAAS,CAAC,EACzC,MAAM,EAAE,YAAY,GACnB,MAAM,CAgBR;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAwB1F;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CA+B5E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAkBzF"}
|