@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.
Files changed (87) hide show
  1. package/dist/commands/capture.d.ts +10 -0
  2. package/dist/commands/capture.d.ts.map +1 -0
  3. package/dist/commands/capture.js +132 -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 +44 -0
  8. package/dist/commands/demo.js.map +1 -0
  9. package/dist/commands/feedback.d.ts +18 -0
  10. package/dist/commands/feedback.d.ts.map +1 -0
  11. package/dist/commands/feedback.js +79 -0
  12. package/dist/commands/feedback.js.map +1 -0
  13. package/dist/commands/ingest.d.ts +8 -0
  14. package/dist/commands/ingest.d.ts.map +1 -0
  15. package/dist/commands/ingest.js +98 -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 +294 -37
  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 +40 -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 +117 -0
  28. package/dist/commands/search.js.map +1 -0
  29. package/dist/commands/setup.d.ts +14 -0
  30. package/dist/commands/setup.d.ts.map +1 -0
  31. package/dist/commands/setup.js +167 -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 +82 -15
  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 +121 -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 +91 -0
  48. package/dist/commands/upgrade.js.map +1 -0
  49. package/dist/index.js +144 -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/formatter.d.ts +7 -0
  56. package/dist/lib/formatter.d.ts.map +1 -0
  57. package/dist/lib/formatter.js +91 -0
  58. package/dist/lib/formatter.js.map +1 -0
  59. package/dist/lib/indexer.d.ts +4 -1
  60. package/dist/lib/indexer.d.ts.map +1 -1
  61. package/dist/lib/indexer.js +2 -1
  62. package/dist/lib/indexer.js.map +1 -1
  63. package/dist/lib/ingest-watcher.d.ts +20 -0
  64. package/dist/lib/ingest-watcher.d.ts.map +1 -0
  65. package/dist/lib/ingest-watcher.js +44 -0
  66. package/dist/lib/ingest-watcher.js.map +1 -0
  67. package/dist/lib/plugin-loader.d.ts +5 -0
  68. package/dist/lib/plugin-loader.d.ts.map +1 -0
  69. package/dist/lib/plugin-loader.js +27 -0
  70. package/dist/lib/plugin-loader.js.map +1 -0
  71. package/dist/lib/progress.d.ts +57 -0
  72. package/dist/lib/progress.d.ts.map +1 -0
  73. package/dist/lib/progress.js +191 -0
  74. package/dist/lib/progress.js.map +1 -0
  75. package/dist/lib/url-validator.d.ts +2 -0
  76. package/dist/lib/url-validator.d.ts.map +1 -0
  77. package/dist/lib/url-validator.js +17 -0
  78. package/dist/lib/url-validator.js.map +1 -0
  79. package/fixtures/demo/notes/api-design-decisions.md +79 -0
  80. package/fixtures/demo/notes/auth-debugging.md +52 -0
  81. package/fixtures/demo/notes/ci-cd-pipeline.md +90 -0
  82. package/fixtures/demo/notes/code-review-notes.md +71 -0
  83. package/fixtures/demo/notes/database-optimization.md +73 -0
  84. package/fixtures/demo/notes/docker-troubleshooting.md +74 -0
  85. package/fixtures/demo/notes/react-performance.md +66 -0
  86. package/fixtures/demo/notes/typescript-migration.md +80 -0
  87. 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,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":"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 in the current directory")
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;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"}
@@ -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"}