@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,23 @@
1
+ export interface CaptureCommandOptions {
2
+ url?: string;
3
+ file?: string;
4
+ tags?: string;
5
+ title?: string;
6
+ path?: string;
7
+ format?: string;
8
+ }
9
+ /**
10
+ * @deprecated Use captureAddCommand instead
11
+ */
12
+ export declare function captureCommand(text: string | undefined, options: CaptureCommandOptions): Promise<void>;
13
+ export declare function captureAddCommand(text: string | undefined, options: CaptureCommandOptions): Promise<void>;
14
+ export interface CaptureListOptions {
15
+ path?: string;
16
+ format?: string;
17
+ }
18
+ export declare function captureListCommand(options: CaptureListOptions): Promise<void>;
19
+ export interface CaptureDeleteOptions {
20
+ path?: string;
21
+ }
22
+ export declare function captureDeleteCommand(idStr: string, options: CaptureDeleteOptions): Promise<void>;
23
+ //# sourceMappingURL=capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmBD;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CA0Hf;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CnF;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
@@ -0,0 +1,237 @@
1
+ import { resolve } from "path";
2
+ import { existsSync, readFileSync } from "fs";
3
+ import { loadConfig, resolveDefaultPath, createDatabase, Migrator, KnowledgeRepository, ALL_MIGRATIONS, } from "@knowledgine/core";
4
+ import { EventWriter, sanitizeContent } from "@knowledgine/ingest";
5
+ import { validateCaptureUrl } from "../lib/url-validator.js";
6
+ import { createBox, createTable, colors, symbols } from "../lib/ui/index.js";
7
+ async function readStdin() {
8
+ return new Promise((resolve, reject) => {
9
+ const chunks = [];
10
+ process.stdin.on("data", (chunk) => chunks.push(chunk));
11
+ process.stdin.on("end", () => resolve(Buffer.concat(chunks).toString("utf-8")));
12
+ process.stdin.on("error", reject);
13
+ });
14
+ }
15
+ function initDb(rootPath) {
16
+ const config = loadConfig(rootPath);
17
+ const db = createDatabase(config.dbPath);
18
+ new Migrator(db, ALL_MIGRATIONS).migrate();
19
+ const repository = new KnowledgeRepository(db);
20
+ return { db, repository };
21
+ }
22
+ /**
23
+ * @deprecated Use captureAddCommand instead
24
+ */
25
+ export async function captureCommand(text, options) {
26
+ return captureAddCommand(text, options);
27
+ }
28
+ export async function captureAddCommand(text, options) {
29
+ // 1. DB初期化
30
+ const rootPath = resolveDefaultPath(options.path);
31
+ const knowledgineDir = resolve(rootPath, ".knowledgine");
32
+ if (!existsSync(knowledgineDir)) {
33
+ console.error("Error: Knowledge base not initialized.\n Run: knowledgine init --path <dir>");
34
+ process.exitCode = 1;
35
+ return;
36
+ }
37
+ // 2. 入力ソース判定(排他)
38
+ let content;
39
+ let sourceUri;
40
+ let sourceType;
41
+ if (text) {
42
+ content = text;
43
+ sourceUri = "capture://text";
44
+ sourceType = "text";
45
+ }
46
+ else if (options.url) {
47
+ try {
48
+ const parsed = validateCaptureUrl(options.url);
49
+ const response = await fetch(parsed.href);
50
+ if (!response.ok) {
51
+ console.error(`Error: Failed to fetch URL: ${response.status} ${response.statusText}`);
52
+ process.exitCode = 1;
53
+ return;
54
+ }
55
+ content = await response.text();
56
+ sourceUri = parsed.href;
57
+ sourceType = "url";
58
+ }
59
+ catch (error) {
60
+ console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
61
+ process.exitCode = 1;
62
+ return;
63
+ }
64
+ }
65
+ else if (options.file) {
66
+ const filePath = resolve(options.file);
67
+ if (!existsSync(filePath)) {
68
+ console.error(`Error: File not found: ${filePath}`);
69
+ process.exitCode = 1;
70
+ return;
71
+ }
72
+ content = readFileSync(filePath, "utf-8");
73
+ sourceUri = `file://${filePath}`;
74
+ sourceType = "file";
75
+ }
76
+ else if (!process.stdin.isTTY) {
77
+ content = await readStdin();
78
+ if (!content.trim()) {
79
+ console.error("Error: No input provided. Provide text, --url, --file, or pipe via stdin.");
80
+ process.exitCode = 1;
81
+ return;
82
+ }
83
+ sourceUri = "capture://stdin";
84
+ sourceType = "stdin";
85
+ }
86
+ else {
87
+ console.error("Error: No input provided. Provide text, --url, --file, or pipe via stdin.");
88
+ process.exitCode = 1;
89
+ return;
90
+ }
91
+ // 3. タイトルとタグ
92
+ const title = options.title || content.slice(0, 50).replace(/\n/g, " ").trim();
93
+ const tags = options.tags
94
+ ? options.tags
95
+ .split(",")
96
+ .map((t) => t.trim())
97
+ .filter(Boolean)
98
+ : [];
99
+ // 4. NormalizedEvent構築
100
+ const event = {
101
+ sourceUri,
102
+ eventType: "capture",
103
+ title,
104
+ content: sanitizeContent(content),
105
+ timestamp: new Date(),
106
+ metadata: {
107
+ sourcePlugin: "capture",
108
+ sourceId: `capture-${Date.now()}`,
109
+ tags: tags.length > 0 ? tags : undefined,
110
+ },
111
+ };
112
+ // 5. DB書き込み
113
+ const { db, repository } = initDb(rootPath);
114
+ try {
115
+ const writer = new EventWriter(db, repository);
116
+ const result = writer.writeEvent(event);
117
+ // 6. 出力
118
+ const format = options.format ?? "plain";
119
+ if (format === "json") {
120
+ console.log(JSON.stringify({
121
+ ok: true,
122
+ command: "capture",
123
+ result: {
124
+ id: result.id,
125
+ title,
126
+ tags,
127
+ sourceUri,
128
+ },
129
+ }));
130
+ }
131
+ else {
132
+ const lines = [
133
+ `${symbols.success} Captured (id: ${result.id})`,
134
+ ` Title: ${title}`,
135
+ ];
136
+ if (tags.length > 0) {
137
+ lines.push(` Tags: ${tags.join(", ")}`);
138
+ }
139
+ lines.push(` Source: ${sourceType} (manual)`);
140
+ console.error(createBox(lines.join("\n"), { title: "Captured" }));
141
+ }
142
+ }
143
+ catch (error) {
144
+ console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
145
+ process.exitCode = 1;
146
+ }
147
+ finally {
148
+ db.close();
149
+ }
150
+ }
151
+ export async function captureListCommand(options) {
152
+ const rootPath = resolveDefaultPath(options.path);
153
+ const knowledgineDir = resolve(rootPath, ".knowledgine");
154
+ if (!existsSync(knowledgineDir)) {
155
+ console.error("Error: Knowledge base not initialized.\n Run: knowledgine init --path <dir>");
156
+ process.exitCode = 1;
157
+ return;
158
+ }
159
+ const { db, repository } = initDb(rootPath);
160
+ try {
161
+ const notes = repository.getNotesWithPrefix("capture://");
162
+ const format = options.format ?? "plain";
163
+ if (format === "json") {
164
+ console.log(JSON.stringify({
165
+ ok: true,
166
+ command: "capture list",
167
+ result: notes.map((n) => ({
168
+ id: n.id,
169
+ title: n.title,
170
+ filePath: n.file_path,
171
+ createdAt: n.created_at,
172
+ })),
173
+ }));
174
+ }
175
+ else {
176
+ if (notes.length === 0) {
177
+ console.error("No captured notes found.");
178
+ return;
179
+ }
180
+ const rows = notes.map((n) => [
181
+ String(n.id),
182
+ n.title,
183
+ n.file_path,
184
+ n.created_at,
185
+ ]);
186
+ console.error(createTable({ head: ["ID", "Title", "Source", "Created"], rows }));
187
+ }
188
+ }
189
+ finally {
190
+ db.close();
191
+ }
192
+ }
193
+ export async function captureDeleteCommand(idStr, options) {
194
+ const rootPath = resolveDefaultPath(options.path);
195
+ const knowledgineDir = resolve(rootPath, ".knowledgine");
196
+ if (!existsSync(knowledgineDir)) {
197
+ console.error("Error: Knowledge base not initialized.\n Run: knowledgine init --path <dir>");
198
+ process.exitCode = 1;
199
+ return;
200
+ }
201
+ const id = parseInt(idStr, 10);
202
+ if (isNaN(id) || id <= 0) {
203
+ console.error(`Error: Invalid ID: ${idStr}`);
204
+ process.exitCode = 1;
205
+ return;
206
+ }
207
+ const { db, repository } = initDb(rootPath);
208
+ try {
209
+ const note = repository.getNoteById(id);
210
+ if (!note) {
211
+ console.error(`${symbols.error} Error: Note #${id} not found.`);
212
+ process.exitCode = 1;
213
+ return;
214
+ }
215
+ if (!note.file_path.startsWith("capture://")) {
216
+ console.error(`${symbols.error} Error: Note #${id} is not a captured note (file_path: ${note.file_path}). Only capture:// notes can be deleted with this command.`);
217
+ process.exitCode = 1;
218
+ return;
219
+ }
220
+ const deleted = repository.deleteNoteById(id);
221
+ if (deleted) {
222
+ console.error(`${symbols.success} Deleted captured note #${id}: ${note.title}`);
223
+ }
224
+ else {
225
+ console.error(`${symbols.error} Error: Failed to delete note #${id}.`);
226
+ process.exitCode = 1;
227
+ }
228
+ }
229
+ catch (error) {
230
+ console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
231
+ process.exitCode = 1;
232
+ }
233
+ finally {
234
+ db.close();
235
+ }
236
+ }
237
+ //# sourceMappingURL=capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface DemoOptions {
2
+ clean?: boolean;
3
+ }
4
+ export declare function getDemoNotesPath(basePath?: string): string;
5
+ export declare function demoCommand(options: DemoOptions): Promise<void>;
6
+ //# sourceMappingURL=demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../../src/commands/demo.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAID,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CrE"}
@@ -0,0 +1,48 @@
1
+ import { resolve } from "path";
2
+ import { existsSync } from "fs";
3
+ import { cleanDemo, getDemoDir } from "../lib/demo-manager.js";
4
+ import { createBox, colors, symbols } from "../lib/ui/index.js";
5
+ const DEMO_NOTES_DIR = "knowledgine-demo-notes";
6
+ export function getDemoNotesPath(basePath) {
7
+ return resolve(basePath ?? process.cwd(), DEMO_NOTES_DIR);
8
+ }
9
+ export async function demoCommand(options) {
10
+ if (options.clean) {
11
+ const demoPath = getDemoNotesPath();
12
+ if (!existsSync(demoPath)) {
13
+ console.error("No demo files found to clean.");
14
+ return;
15
+ }
16
+ cleanDemo(demoPath);
17
+ console.error(`${symbols.success} Demo files cleaned successfully.`);
18
+ return;
19
+ }
20
+ // Show demo usage information
21
+ const demoDir = getDemoDir();
22
+ const hasDemoFixtures = existsSync(demoDir);
23
+ if (!hasDemoFixtures) {
24
+ console.error(`${symbols.error} Error: Demo fixtures not found. Reinstall the package.`);
25
+ return;
26
+ }
27
+ const usageLines = [
28
+ colors.bold("knowledgine demo mode"),
29
+ "",
30
+ "Try knowledgine with sample developer notes:",
31
+ "",
32
+ ` 1. ${colors.accent("knowledgine init --demo")} Set up demo environment`,
33
+ ` 2. ${colors.accent('knowledgine search "auth" --demo')} Search demo notes`,
34
+ ` 3. ${colors.accent("knowledgine demo --clean")} Remove demo files`,
35
+ "",
36
+ "The demo includes 8 sample notes covering:",
37
+ ` ${symbols.bullet} Authentication debugging (JWT)`,
38
+ ` ${symbols.bullet} React performance optimization`,
39
+ ` ${symbols.bullet} Docker networking troubleshooting`,
40
+ ` ${symbols.bullet} REST API design decisions`,
41
+ ` ${symbols.bullet} TypeScript migration learnings`,
42
+ ` ${symbols.bullet} Database query optimization`,
43
+ ` ${symbols.bullet} CI/CD pipeline setup`,
44
+ ` ${symbols.bullet} Code review guidelines`,
45
+ ];
46
+ console.error(createBox(usageLines.join("\n")));
47
+ }
48
+ //# sourceMappingURL=demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.js","sourceRoot":"","sources":["../../src/commands/demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAMhE,MAAM,cAAc,GAAG,wBAAwB,CAAC;AAEhD,MAAM,UAAU,gBAAgB,CAAC,QAAiB;IAChD,OAAO,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QACD,SAAS,CAAC,QAAQ,CAAC,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,mCAAmC,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,8BAA8B;IAC9B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAE5C,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,yDAAyD,CAAC,CAAC;QACzF,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG;QACjB,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC;QACpC,EAAE;QACF,8CAA8C;QAC9C,EAAE;QACF,QAAQ,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,iCAAiC;QACjF,QAAQ,MAAM,CAAC,MAAM,CAAC,kCAAkC,CAAC,qBAAqB;QAC9E,QAAQ,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC,2BAA2B;QAC5E,EAAE;QACF,4CAA4C;QAC5C,KAAK,OAAO,CAAC,MAAM,iCAAiC;QACpD,KAAK,OAAO,CAAC,MAAM,iCAAiC;QACpD,KAAK,OAAO,CAAC,MAAM,oCAAoC;QACvD,KAAK,OAAO,CAAC,MAAM,4BAA4B;QAC/C,KAAK,OAAO,CAAC,MAAM,iCAAiC;QACpD,KAAK,OAAO,CAAC,MAAM,8BAA8B;QACjD,KAAK,OAAO,CAAC,MAAM,uBAAuB;QAC1C,KAAK,OAAO,CAAC,MAAM,yBAAyB;KAC7C,CAAC;IAEF,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,27 @@
1
+ export interface FeedbackListOptions {
2
+ status?: string;
3
+ path?: string;
4
+ }
5
+ export declare function feedbackListCommand(options: FeedbackListOptions): Promise<void>;
6
+ export interface FeedbackApplyOptions {
7
+ path?: string;
8
+ }
9
+ export declare function feedbackApplyCommand(idStr: string, options: FeedbackApplyOptions): Promise<void>;
10
+ export interface FeedbackDismissOptions {
11
+ path?: string;
12
+ }
13
+ export declare function feedbackDismissCommand(idStr: string, options: FeedbackDismissOptions): Promise<void>;
14
+ export interface FeedbackStatsOptions {
15
+ path?: string;
16
+ }
17
+ export declare function feedbackStatsCommand(options: FeedbackStatsOptions): Promise<void>;
18
+ export interface FeedbackReportOptions {
19
+ entity: string;
20
+ type: string;
21
+ entityType?: string;
22
+ correctType?: string;
23
+ details?: string;
24
+ path?: string;
25
+ }
26
+ export declare function feedbackReportCommand(options: FeedbackReportOptions): Promise<void>;
27
+ //# sourceMappingURL=feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/commands/feedback.ts"],"names":[],"mappings":"AAuCA,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBrF;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAUvF;AAID,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCzF"}
@@ -0,0 +1,120 @@
1
+ import { resolve } from "path";
2
+ import { loadConfig, resolveDefaultPath, createDatabase, Migrator, ALL_MIGRATIONS, FeedbackRepository, FeedbackLearner, } from "@knowledgine/core";
3
+ import { createTable, colors, symbols } from "../lib/ui/index.js";
4
+ function createFeedbackDeps(rootPath) {
5
+ const config = loadConfig(rootPath);
6
+ const db = createDatabase(config.dbPath);
7
+ new Migrator(db, ALL_MIGRATIONS).migrate();
8
+ const feedbackRepository = new FeedbackRepository(db);
9
+ const rulesPath = resolve(rootPath, ".knowledgine", "extraction-rules.json");
10
+ const feedbackLearner = new FeedbackLearner(feedbackRepository, rulesPath);
11
+ return { feedbackRepository, feedbackLearner };
12
+ }
13
+ function statusColor(status) {
14
+ switch (status) {
15
+ case "pending":
16
+ return colors.warning(status);
17
+ case "applied":
18
+ return colors.success(status);
19
+ case "dismissed":
20
+ return colors.dim(status);
21
+ default:
22
+ return status;
23
+ }
24
+ }
25
+ export async function feedbackListCommand(options) {
26
+ const rootPath = resolveDefaultPath(options.path);
27
+ const { feedbackRepository } = createFeedbackDeps(rootPath);
28
+ const records = feedbackRepository.list({ status: options.status });
29
+ if (records.length === 0) {
30
+ console.log("No feedback records found.");
31
+ return;
32
+ }
33
+ const rows = records.map((r) => [
34
+ String(r.id),
35
+ r.errorType,
36
+ r.entityName,
37
+ statusColor(r.status),
38
+ ]);
39
+ console.log(createTable({ head: ["ID", "Error Type", "Entity", "Status"], rows }));
40
+ }
41
+ export async function feedbackApplyCommand(idStr, options) {
42
+ const rootPath = resolveDefaultPath(options.path);
43
+ const { feedbackLearner } = createFeedbackDeps(rootPath);
44
+ const id = parseInt(idStr, 10);
45
+ if (isNaN(id) || id <= 0) {
46
+ console.error(`${symbols.error} Invalid feedback ID: ${idStr}`);
47
+ process.exitCode = 1;
48
+ return;
49
+ }
50
+ try {
51
+ feedbackLearner.applyFeedback(id);
52
+ console.log(`${symbols.success} Feedback #${id} applied successfully. Extraction rules updated.`);
53
+ }
54
+ catch (error) {
55
+ console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
56
+ process.exitCode = 1;
57
+ }
58
+ }
59
+ export async function feedbackDismissCommand(idStr, options) {
60
+ const rootPath = resolveDefaultPath(options.path);
61
+ const { feedbackRepository } = createFeedbackDeps(rootPath);
62
+ const id = parseInt(idStr, 10);
63
+ if (isNaN(id) || id <= 0) {
64
+ console.error(`${symbols.error} Invalid feedback ID: ${idStr}`);
65
+ process.exitCode = 1;
66
+ return;
67
+ }
68
+ try {
69
+ feedbackRepository.updateStatus(id, "dismissed");
70
+ console.log(`${symbols.success} Feedback #${id} dismissed.`);
71
+ }
72
+ catch (error) {
73
+ console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
74
+ process.exitCode = 1;
75
+ }
76
+ }
77
+ export async function feedbackStatsCommand(options) {
78
+ const rootPath = resolveDefaultPath(options.path);
79
+ const { feedbackRepository } = createFeedbackDeps(rootPath);
80
+ const stats = feedbackRepository.getStats();
81
+ console.log("Feedback Statistics:");
82
+ console.log(` Total: ${stats.total}`);
83
+ console.log(` Pending: ${stats.pending}`);
84
+ console.log(` Applied: ${stats.applied}`);
85
+ console.log(` Dismissed: ${stats.dismissed}`);
86
+ }
87
+ const VALID_ERROR_TYPES = ["false_positive", "wrong_type", "missed_entity"];
88
+ export async function feedbackReportCommand(options) {
89
+ const rootPath = resolveDefaultPath(options.path);
90
+ if (!VALID_ERROR_TYPES.includes(options.type)) {
91
+ console.error(`${symbols.error} Error: Invalid error type "${options.type}". Must be one of: ${VALID_ERROR_TYPES.join(", ")}`);
92
+ process.exitCode = 1;
93
+ return;
94
+ }
95
+ const { feedbackRepository } = createFeedbackDeps(rootPath);
96
+ try {
97
+ const record = feedbackRepository.create({
98
+ entityName: options.entity,
99
+ errorType: options.type,
100
+ entityType: options.entityType,
101
+ correctType: options.correctType,
102
+ details: options.details,
103
+ });
104
+ console.log(`${symbols.success} Feedback #${record.id} created.`);
105
+ console.log(` Entity: ${record.entityName}`);
106
+ console.log(` Error type: ${record.errorType}`);
107
+ if (record.entityType)
108
+ console.log(` Type: ${record.entityType}`);
109
+ if (record.correctType)
110
+ console.log(` Correct: ${record.correctType}`);
111
+ if (record.details)
112
+ console.log(` Details: ${record.details}`);
113
+ console.log(` Status: ${statusColor(record.status)}`);
114
+ }
115
+ catch (error) {
116
+ console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
117
+ process.exitCode = 1;
118
+ }
119
+ }
120
+ //# sourceMappingURL=feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/commands/feedback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface IngestOptions {
2
+ source?: string;
3
+ path?: string;
4
+ full?: boolean;
5
+ all?: boolean;
6
+ repo?: string;
7
+ }
8
+ export declare function ingestCommand(options: IngestOptions): Promise<void>;
9
+ //# sourceMappingURL=ingest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/commands/ingest.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuKzE"}