@knowledgine/cli 0.1.0 → 0.2.1

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 (123) hide show
  1. package/dist/commands/capture.d.ts +23 -0
  2. package/dist/commands/capture.d.ts.map +1 -0
  3. package/dist/commands/capture.js +237 -0
  4. package/dist/commands/capture.js.map +1 -0
  5. package/dist/commands/demo.d.ts +6 -0
  6. package/dist/commands/demo.d.ts.map +1 -0
  7. package/dist/commands/demo.js +48 -0
  8. package/dist/commands/demo.js.map +1 -0
  9. package/dist/commands/feedback.d.ts +27 -0
  10. package/dist/commands/feedback.d.ts.map +1 -0
  11. package/dist/commands/feedback.js +120 -0
  12. package/dist/commands/feedback.js.map +1 -0
  13. package/dist/commands/ingest.d.ts +9 -0
  14. package/dist/commands/ingest.d.ts.map +1 -0
  15. package/dist/commands/ingest.js +162 -0
  16. package/dist/commands/ingest.js.map +1 -0
  17. package/dist/commands/init.d.ts +2 -0
  18. package/dist/commands/init.d.ts.map +1 -1
  19. package/dist/commands/init.js +327 -42
  20. package/dist/commands/init.js.map +1 -1
  21. package/dist/commands/plugins.d.ts +6 -0
  22. package/dist/commands/plugins.d.ts.map +1 -0
  23. package/dist/commands/plugins.js +41 -0
  24. package/dist/commands/plugins.js.map +1 -0
  25. package/dist/commands/search.d.ts +16 -0
  26. package/dist/commands/search.d.ts.map +1 -0
  27. package/dist/commands/search.js +140 -0
  28. package/dist/commands/search.js.map +1 -0
  29. package/dist/commands/setup.d.ts +57 -0
  30. package/dist/commands/setup.d.ts.map +1 -0
  31. package/dist/commands/setup.js +331 -0
  32. package/dist/commands/setup.js.map +1 -0
  33. package/dist/commands/start.d.ts +1 -0
  34. package/dist/commands/start.d.ts.map +1 -1
  35. package/dist/commands/start.js +98 -24
  36. package/dist/commands/start.js.map +1 -1
  37. package/dist/commands/status.d.ts +5 -0
  38. package/dist/commands/status.d.ts.map +1 -0
  39. package/dist/commands/status.js +149 -0
  40. package/dist/commands/status.js.map +1 -0
  41. package/dist/commands/tool.d.ts +29 -0
  42. package/dist/commands/tool.d.ts.map +1 -0
  43. package/dist/commands/tool.js +247 -0
  44. package/dist/commands/tool.js.map +1 -0
  45. package/dist/commands/upgrade.d.ts +6 -0
  46. package/dist/commands/upgrade.d.ts.map +1 -0
  47. package/dist/commands/upgrade.js +137 -0
  48. package/dist/commands/upgrade.js.map +1 -0
  49. package/dist/index.js +178 -2
  50. package/dist/index.js.map +1 -1
  51. package/dist/lib/demo-manager.d.ts +16 -0
  52. package/dist/lib/demo-manager.d.ts.map +1 -0
  53. package/dist/lib/demo-manager.js +37 -0
  54. package/dist/lib/demo-manager.js.map +1 -0
  55. package/dist/lib/entity-extractor.d.ts +15 -0
  56. package/dist/lib/entity-extractor.d.ts.map +1 -0
  57. package/dist/lib/entity-extractor.js +86 -0
  58. package/dist/lib/entity-extractor.js.map +1 -0
  59. package/dist/lib/formatter.d.ts +7 -0
  60. package/dist/lib/formatter.d.ts.map +1 -0
  61. package/dist/lib/formatter.js +94 -0
  62. package/dist/lib/formatter.js.map +1 -0
  63. package/dist/lib/indexer.d.ts +6 -1
  64. package/dist/lib/indexer.d.ts.map +1 -1
  65. package/dist/lib/indexer.js +4 -1
  66. package/dist/lib/indexer.js.map +1 -1
  67. package/dist/lib/ingest-watcher.d.ts +20 -0
  68. package/dist/lib/ingest-watcher.d.ts.map +1 -0
  69. package/dist/lib/ingest-watcher.js +45 -0
  70. package/dist/lib/ingest-watcher.js.map +1 -0
  71. package/dist/lib/plugin-loader.d.ts +5 -0
  72. package/dist/lib/plugin-loader.d.ts.map +1 -0
  73. package/dist/lib/plugin-loader.js +27 -0
  74. package/dist/lib/plugin-loader.js.map +1 -0
  75. package/dist/lib/progress.d.ts +63 -0
  76. package/dist/lib/progress.d.ts.map +1 -0
  77. package/dist/lib/progress.js +228 -0
  78. package/dist/lib/progress.js.map +1 -0
  79. package/dist/lib/ui/box.d.ts +7 -0
  80. package/dist/lib/ui/box.d.ts.map +1 -0
  81. package/dist/lib/ui/box.js +19 -0
  82. package/dist/lib/ui/box.js.map +1 -0
  83. package/dist/lib/ui/error-formatter.d.ts +8 -0
  84. package/dist/lib/ui/error-formatter.d.ts.map +1 -0
  85. package/dist/lib/ui/error-formatter.js +21 -0
  86. package/dist/lib/ui/error-formatter.js.map +1 -0
  87. package/dist/lib/ui/index.d.ts +7 -0
  88. package/dist/lib/ui/index.d.ts.map +1 -0
  89. package/dist/lib/ui/index.js +7 -0
  90. package/dist/lib/ui/index.js.map +1 -0
  91. package/dist/lib/ui/output.d.ts +2 -0
  92. package/dist/lib/ui/output.d.ts.map +1 -0
  93. package/dist/lib/ui/output.js +4 -0
  94. package/dist/lib/ui/output.js.map +1 -0
  95. package/dist/lib/ui/spinner.d.ts +4 -0
  96. package/dist/lib/ui/spinner.d.ts.map +1 -0
  97. package/dist/lib/ui/spinner.js +5 -0
  98. package/dist/lib/ui/spinner.js.map +1 -0
  99. package/dist/lib/ui/table.d.ts +9 -0
  100. package/dist/lib/ui/table.d.ts.map +1 -0
  101. package/dist/lib/ui/table.js +28 -0
  102. package/dist/lib/ui/table.js.map +1 -0
  103. package/dist/lib/ui/theme.d.ts +21 -0
  104. package/dist/lib/ui/theme.d.ts.map +1 -0
  105. package/dist/lib/ui/theme.js +29 -0
  106. package/dist/lib/ui/theme.js.map +1 -0
  107. package/dist/lib/unknown-command-handler.d.ts +14 -0
  108. package/dist/lib/unknown-command-handler.d.ts.map +1 -0
  109. package/dist/lib/unknown-command-handler.js +25 -0
  110. package/dist/lib/unknown-command-handler.js.map +1 -0
  111. package/dist/lib/url-validator.d.ts +2 -0
  112. package/dist/lib/url-validator.d.ts.map +1 -0
  113. package/dist/lib/url-validator.js +21 -0
  114. package/dist/lib/url-validator.js.map +1 -0
  115. package/fixtures/demo/notes/api-design-decisions.md +84 -0
  116. package/fixtures/demo/notes/auth-debugging.md +60 -0
  117. package/fixtures/demo/notes/ci-cd-pipeline.md +97 -0
  118. package/fixtures/demo/notes/code-review-notes.md +78 -0
  119. package/fixtures/demo/notes/database-optimization.md +81 -0
  120. package/fixtures/demo/notes/docker-troubleshooting.md +80 -0
  121. package/fixtures/demo/notes/react-performance.md +67 -0
  122. package/fixtures/demo/notes/typescript-migration.md +89 -0
  123. package/package.json +13 -4
@@ -0,0 +1,247 @@
1
+ import { resolve } from "path";
2
+ import { existsSync } from "fs";
3
+ import { loadConfig, resolveDefaultPath, 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 = resolveDefaultPath(options.path);
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 = resolveDefaultPath(options.path);
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 = resolveDefaultPath(options.path);
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 = resolveDefaultPath(options.path);
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,6 @@
1
+ export interface UpgradeOptions {
2
+ semantic?: boolean;
3
+ path?: string;
4
+ }
5
+ export declare function upgradeCommand(options: UpgradeOptions): Promise<void>;
6
+ //# sourceMappingURL=upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAmBA,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,CA8J3E"}
@@ -0,0 +1,137 @@
1
+ import { resolve } from "path";
2
+ import { existsSync } from "fs";
3
+ import { loadConfig, writeRcConfig, resolveDefaultPath, createDatabase, loadSqliteVecExtension, Migrator, KnowledgeRepository, ALL_MIGRATIONS, OnnxEmbeddingProvider, ModelManager, DEFAULT_MODEL_NAME, downloadModel, } from "@knowledgine/core";
4
+ import { createProgress } from "../lib/progress.js";
5
+ import { colors, symbols, createBox } from "../lib/ui/index.js";
6
+ export async function upgradeCommand(options) {
7
+ const rootPath = resolveDefaultPath(options.path);
8
+ if (!options.semantic) {
9
+ console.error("Usage: knowledgine upgrade --semantic");
10
+ console.error("");
11
+ console.error("Available upgrades:");
12
+ console.error(" --semantic Enable semantic search (download model + generate embeddings)");
13
+ return;
14
+ }
15
+ // Check initialization
16
+ const knowledgineDir = resolve(rootPath, ".knowledgine");
17
+ if (!existsSync(knowledgineDir)) {
18
+ console.error(colors.error(`Error: Not initialized. Run 'knowledgine init --path ${rootPath}' first.`));
19
+ process.exitCode = 1;
20
+ return;
21
+ }
22
+ const config = loadConfig(rootPath);
23
+ config.embedding.enabled = true;
24
+ const db = createDatabase(config.dbPath);
25
+ const vecLoaded = await loadSqliteVecExtension(db);
26
+ new Migrator(db, ALL_MIGRATIONS).migrate();
27
+ // Ensure vec0 virtual table exists and is populated
28
+ if (vecLoaded) {
29
+ // Create vec table if it doesn't exist
30
+ try {
31
+ db.prepare("SELECT COUNT(*) FROM note_embeddings_vec").get();
32
+ }
33
+ catch {
34
+ db.exec(`
35
+ CREATE VIRTUAL TABLE IF NOT EXISTS note_embeddings_vec USING vec0(
36
+ note_id INTEGER PRIMARY KEY,
37
+ embedding FLOAT[384]
38
+ );
39
+ CREATE TRIGGER IF NOT EXISTS note_embeddings_ad AFTER DELETE ON note_embeddings BEGIN
40
+ DELETE FROM note_embeddings_vec WHERE note_id = old.note_id;
41
+ END;
42
+ `);
43
+ }
44
+ // Backfill: sync embeddings that exist in note_embeddings but not in note_embeddings_vec
45
+ const vecCount = db.prepare("SELECT COUNT(*) as c FROM note_embeddings_vec").get().c;
46
+ const embCount = db.prepare("SELECT COUNT(*) as c FROM note_embeddings").get().c;
47
+ if (embCount > 0 && vecCount < embCount) {
48
+ // Find embeddings missing from vec table
49
+ const missing = db
50
+ .prepare(`
51
+ SELECT e.note_id, e.embedding FROM note_embeddings e
52
+ WHERE e.note_id NOT IN (SELECT note_id FROM note_embeddings_vec)
53
+ `)
54
+ .all();
55
+ if (missing.length > 0) {
56
+ const insert = db.prepare("INSERT INTO note_embeddings_vec (note_id, embedding) VALUES (CAST(? AS INTEGER), ?)");
57
+ const tx = db.transaction(() => {
58
+ for (const row of missing) {
59
+ insert.run(row.note_id, row.embedding);
60
+ }
61
+ });
62
+ tx();
63
+ console.error(`Synced ${missing.length} embeddings into vector index.`);
64
+ }
65
+ }
66
+ }
67
+ const repository = new KnowledgeRepository(db);
68
+ // Download model
69
+ const modelManager = new ModelManager();
70
+ if (!modelManager.isModelAvailable()) {
71
+ console.error(colors.info("Downloading embedding model (~23MB)..."));
72
+ try {
73
+ await downloadModel(modelManager, {
74
+ onProgress: (progress) => {
75
+ if (progress.total) {
76
+ const mb = (progress.downloaded / (1024 * 1024)).toFixed(1);
77
+ const totalMb = (progress.total / (1024 * 1024)).toFixed(1);
78
+ process.stderr.write(`\r ${progress.file}: ${mb}/${totalMb} MB`);
79
+ }
80
+ },
81
+ onFileComplete: (file) => {
82
+ process.stderr.write(`\r ${symbols.success} ${file} \n`);
83
+ },
84
+ });
85
+ console.error(`${symbols.success} ${colors.success("Model download complete.")}`);
86
+ }
87
+ catch (error) {
88
+ console.error(colors.error(`\nModel download failed: ${error instanceof Error ? error.message : String(error)}`));
89
+ console.error(colors.error("Semantic search upgrade aborted."));
90
+ db.close();
91
+ process.exitCode = 1;
92
+ return;
93
+ }
94
+ }
95
+ else {
96
+ console.error(`${symbols.success} ${colors.success("Embedding model already available.")}`);
97
+ }
98
+ // Generate embeddings for notes that don't have them
99
+ const embeddingProvider = new OnnxEmbeddingProvider(DEFAULT_MODEL_NAME, modelManager);
100
+ const notesWithout = repository.getNotesWithoutEmbeddings();
101
+ if (notesWithout.length > 0) {
102
+ // Warm up the ONNX session (first call is slow due to model loading)
103
+ console.error(colors.info("\nLoading embedding model..."));
104
+ await embeddingProvider.embed("warmup");
105
+ console.error("");
106
+ const embProgress = createProgress(notesWithout.length, "Generating embeddings");
107
+ let generated = 0;
108
+ let failed = 0;
109
+ for (const note of notesWithout) {
110
+ try {
111
+ const embedding = await embeddingProvider.embed(note.content);
112
+ repository.saveEmbedding(note.id, embedding, config.embedding.modelName);
113
+ generated++;
114
+ embProgress.update(generated);
115
+ }
116
+ catch {
117
+ failed++;
118
+ }
119
+ }
120
+ embProgress.finish();
121
+ console.error(` ${symbols.success} ${colors.success(`Generated: ${generated}`)}, Failed: ${failed}`);
122
+ }
123
+ else {
124
+ console.error(`${symbols.success} ${colors.success("All notes already have embeddings.")}`);
125
+ }
126
+ // Write .knowledginerc.json
127
+ writeRcConfig(rootPath, { semantic: true });
128
+ console.error("\n" +
129
+ createBox([
130
+ `${symbols.success} ${colors.success("Semantic search enabled")}`,
131
+ ` Config: .knowledginerc.json written`,
132
+ "",
133
+ `${symbols.arrow} ${colors.hint("Restart MCP server to activate.")}`,
134
+ ].join("\n"), { title: "Upgrade Complete", type: "success" }));
135
+ db.close();
136
+ }
137
+ //# 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,196 @@ 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, feedbackReportCommand, } from "./commands/feedback.js";
12
+ import { demoCommand } from "./commands/demo.js";
13
+ import { searchCommand } from "./commands/search.js";
14
+ import { captureAddCommand, captureListCommand, captureDeleteCommand } from "./commands/capture.js";
15
+ import { registerToolCommands } from "./commands/tool.js";
16
+ import { createOutputErrorHandler } from "./lib/unknown-command-handler.js";
6
17
  const program = new Command();
7
18
  program
8
19
  .name("knowledgine")
9
20
  .description("Developer Knowledge Infrastructure - Extract structured knowledge from your codebase")
10
- .version(VERSION);
21
+ .version(VERSION)
22
+ .addHelpText("after", `
23
+ Workflow:
24
+ 1. knowledgine init --path ~/notes Index your files (FTS5 full-text search)
25
+ 2. knowledgine setup --target claude-desktop Configure AI tool
26
+ 3. knowledgine start --path ~/notes Start MCP server
27
+
28
+ Optional:
29
+ knowledgine upgrade --semantic Enable semantic search (downloads ~23MB model)
30
+
31
+ Run 'knowledgine <command> --help' for more information on a command.`);
11
32
  program
12
33
  .command("init")
13
- .description("Scan and index markdown files in the current directory")
34
+ .description("Scan and index markdown files (FTS5 full-text search by default)")
14
35
  .option("--path <dir>", "Root directory to scan")
36
+ .option("--semantic", "Enable semantic search (download model + generate embeddings)")
37
+ .option("--skip-embeddings", "[deprecated] Use default behavior instead (embeddings are now opt-in)")
38
+ .option("--demo", "Initialize with sample demo notes")
39
+ .addHelpText("after", `
40
+ Examples:
41
+ knowledgine init --path ~/notes
42
+ knowledgine init --path ~/project --semantic
43
+ knowledgine init --demo`)
15
44
  .action(initCommand);
16
45
  program
17
46
  .command("start")
18
47
  .description("Start MCP server with file watching")
19
48
  .option("--path <dir>", "Root directory to serve")
49
+ .option("--ingest", "Enable IngestEngine for all plugins")
50
+ .addHelpText("after", `
51
+ Example:
52
+ knowledgine start --path ~/notes
53
+ knowledgine start --path ~/notes --ingest`)
20
54
  .action(startCommand);
55
+ program
56
+ .command("setup")
57
+ .description("Generate MCP configuration for AI tools")
58
+ .option("--target <tool>", "Target AI tool (claude-desktop, cursor, claude-code)")
59
+ .option("--path <dir>", "Root directory of indexed notes")
60
+ .option("--write", "Write configuration to file (default: dry-run)")
61
+ .addHelpText("after", `
62
+ Examples:
63
+ knowledgine setup --target claude-desktop --path ~/notes
64
+ knowledgine setup --target cursor --path ~/notes --write
65
+ knowledgine setup --target claude-code --path ~/notes`)
66
+ .action(setupCommand);
67
+ program
68
+ .command("status")
69
+ .description("Check knowledgine setup and configuration status")
70
+ .option("--path <dir>", "Root directory to check")
71
+ .addHelpText("after", `
72
+ Example:
73
+ knowledgine status --path ~/notes`)
74
+ .action(statusCommand);
75
+ program
76
+ .command("upgrade")
77
+ .description("Upgrade knowledgine capabilities")
78
+ .option("--semantic", "Enable semantic search (download model + generate embeddings)")
79
+ .option("--path <dir>", "Root directory")
80
+ .addHelpText("after", `
81
+ Example:
82
+ knowledgine upgrade --semantic --path ~/notes`)
83
+ .action(upgradeCommand);
84
+ program
85
+ .command("ingest")
86
+ .description("Ingest knowledge from configured sources")
87
+ .option("--source <pluginId>", "Specific plugin to run")
88
+ .option("--path <dir>", "Root directory")
89
+ .option("--full", "Force full re-ingest (ignore cursor)")
90
+ .option("--all", "Run all registered plugins")
91
+ .option("--repo <owner/repo>", "GitHub repository (required for --source github)")
92
+ .addHelpText("after", `
93
+ Examples:
94
+ knowledgine ingest --source markdown --path ~/notes
95
+ knowledgine ingest --source github --repo owner/repo --path ~/notes
96
+ knowledgine ingest --source claude-sessions --path ~/notes
97
+ knowledgine ingest --all --path ~/notes
98
+ knowledgine ingest --source markdown --full --path ~/notes`)
99
+ .action(ingestCommand);
100
+ const pluginsCmd = program.command("plugins").description("Manage ingest plugins");
101
+ pluginsCmd.command("list").description("List registered plugins").action(pluginsListCommand);
102
+ pluginsCmd
103
+ .command("status")
104
+ .option("--path <dir>", "Root directory")
105
+ .description("Show plugin ingest status")
106
+ .action(pluginsStatusCommand);
107
+ const feedbackCmd = program.command("feedback").description("Manage extraction feedback");
108
+ feedbackCmd
109
+ .command("list")
110
+ .description("List feedback records")
111
+ .option("--status <status>", "Filter by status (pending, applied, dismissed)")
112
+ .option("--path <dir>", "Root directory")
113
+ .action(feedbackListCommand);
114
+ feedbackCmd
115
+ .command("apply <id>")
116
+ .description("Apply feedback and update extraction rules")
117
+ .option("--path <dir>", "Root directory")
118
+ .action(feedbackApplyCommand);
119
+ feedbackCmd
120
+ .command("dismiss <id>")
121
+ .description("Dismiss feedback without applying")
122
+ .option("--path <dir>", "Root directory")
123
+ .action(feedbackDismissCommand);
124
+ feedbackCmd
125
+ .command("stats")
126
+ .description("Show feedback statistics")
127
+ .option("--path <dir>", "Root directory")
128
+ .action(feedbackStatsCommand);
129
+ feedbackCmd
130
+ .command("report")
131
+ .description("Report an entity extraction error")
132
+ .requiredOption("--entity <name>", "Entity name")
133
+ .requiredOption("--type <errorType>", "Error type: false_positive, wrong_type, missed_entity")
134
+ .option("--entity-type <type>", "Current entity type")
135
+ .option("--correct-type <type>", "Correct entity type (for wrong_type)")
136
+ .option("--details <text>", "Additional details")
137
+ .option("--path <dir>", "Root directory")
138
+ .action(feedbackReportCommand);
139
+ program
140
+ .command("demo")
141
+ .description("Show demo usage information or clean up demo files")
142
+ .option("--clean", "Remove demo notes and data")
143
+ .action(demoCommand);
144
+ program
145
+ .command("search <query>")
146
+ .description("Search indexed notes")
147
+ .option("--demo", "Search in demo notes")
148
+ .option("--mode <mode>", "Search mode: keyword, semantic, hybrid", "keyword")
149
+ .option("--limit <n>", "Maximum results", "20")
150
+ .option("--format <format>", "Output format: json, table, plain", "plain")
151
+ .option("--related <noteId>", "Find related notes by note ID")
152
+ .option("--related-file <path>", "Find related notes by file path")
153
+ .option("--path <dir>", "Root directory")
154
+ .action((query, opts) => {
155
+ return searchCommand(query, {
156
+ demo: opts.demo,
157
+ mode: opts.mode,
158
+ limit: Number(opts.limit),
159
+ format: opts.format,
160
+ related: opts.related,
161
+ relatedFile: opts.relatedFile,
162
+ path: opts.path,
163
+ });
164
+ });
165
+ const captureCmd = program.command("capture").description("Capture and manage knowledge snippets");
166
+ captureCmd
167
+ .command("add [text]")
168
+ .description("Capture knowledge from text, URL, or file")
169
+ .option("-u, --url <url>", "URL to fetch and capture")
170
+ .option("-f, --file <path>", "File path to capture")
171
+ .option("-t, --tags <tags>", "Comma-separated tags")
172
+ .option("--title <title>", "Title for the captured knowledge")
173
+ .option("--path <dir>", "Root directory")
174
+ .option("--format <format>", "Output format: json, plain", "plain")
175
+ .action(captureAddCommand);
176
+ captureCmd
177
+ .command("list")
178
+ .description("List captured notes")
179
+ .option("--path <dir>", "Root directory")
180
+ .option("--format <format>", "Output format: json, plain", "plain")
181
+ .action(captureListCommand);
182
+ captureCmd
183
+ .command("delete <id>")
184
+ .description("Delete a captured note")
185
+ .option("--path <dir>", "Root directory")
186
+ .action(captureDeleteCommand);
187
+ registerToolCommands(program);
188
+ program.showSuggestionAfterError(true);
189
+ program.configureOutput({
190
+ outputError: createOutputErrorHandler(() => program.commands.map((c) => c.name())),
191
+ });
192
+ // Global error handler for unhandled exceptions (e.g., native module errors)
193
+ process.on("uncaughtException", (error) => {
194
+ console.error(`Error: ${error.message}`);
195
+ process.exit(1);
196
+ });
21
197
  program.parse();
22
198
  //# 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;AAEnD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CACV,sFAAsF,CACvF;KACA,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,cAAc,EAAE,wBAAwB,CAAC;KAChD,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,cAAc,EAAE,yBAAyB,CAAC;KACjD,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,OAAO,CAAC,KAAK,EAAE,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"}