@iflow-mcp/joungminsung-opendocuments 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 (78) hide show
  1. package/README.md +144 -0
  2. package/dist/commands/ask.d.ts +3 -0
  3. package/dist/commands/ask.d.ts.map +1 -0
  4. package/dist/commands/ask.js +99 -0
  5. package/dist/commands/ask.js.map +1 -0
  6. package/dist/commands/auth.d.ts +3 -0
  7. package/dist/commands/auth.d.ts.map +1 -0
  8. package/dist/commands/auth.js +87 -0
  9. package/dist/commands/auth.js.map +1 -0
  10. package/dist/commands/completion.d.ts +3 -0
  11. package/dist/commands/completion.d.ts.map +1 -0
  12. package/dist/commands/completion.js +88 -0
  13. package/dist/commands/completion.js.map +1 -0
  14. package/dist/commands/config-cmd.d.ts +3 -0
  15. package/dist/commands/config-cmd.d.ts.map +1 -0
  16. package/dist/commands/config-cmd.js +61 -0
  17. package/dist/commands/config-cmd.js.map +1 -0
  18. package/dist/commands/connector.d.ts +3 -0
  19. package/dist/commands/connector.d.ts.map +1 -0
  20. package/dist/commands/connector.js +84 -0
  21. package/dist/commands/connector.js.map +1 -0
  22. package/dist/commands/doctor.d.ts +3 -0
  23. package/dist/commands/doctor.d.ts.map +1 -0
  24. package/dist/commands/doctor.js +151 -0
  25. package/dist/commands/doctor.js.map +1 -0
  26. package/dist/commands/document.d.ts +3 -0
  27. package/dist/commands/document.d.ts.map +1 -0
  28. package/dist/commands/document.js +78 -0
  29. package/dist/commands/document.js.map +1 -0
  30. package/dist/commands/export-cmd.d.ts +3 -0
  31. package/dist/commands/export-cmd.d.ts.map +1 -0
  32. package/dist/commands/export-cmd.js +44 -0
  33. package/dist/commands/export-cmd.js.map +1 -0
  34. package/dist/commands/import-cmd.d.ts +3 -0
  35. package/dist/commands/import-cmd.d.ts.map +1 -0
  36. package/dist/commands/import-cmd.js +39 -0
  37. package/dist/commands/import-cmd.js.map +1 -0
  38. package/dist/commands/index-cmd.d.ts +3 -0
  39. package/dist/commands/index-cmd.d.ts.map +1 -0
  40. package/dist/commands/index-cmd.js +76 -0
  41. package/dist/commands/index-cmd.js.map +1 -0
  42. package/dist/commands/init.d.ts +3 -0
  43. package/dist/commands/init.d.ts.map +1 -0
  44. package/dist/commands/init.js +408 -0
  45. package/dist/commands/init.js.map +1 -0
  46. package/dist/commands/plugin.d.ts +3 -0
  47. package/dist/commands/plugin.d.ts.map +1 -0
  48. package/dist/commands/plugin.js +296 -0
  49. package/dist/commands/plugin.js.map +1 -0
  50. package/dist/commands/search.d.ts +3 -0
  51. package/dist/commands/search.d.ts.map +1 -0
  52. package/dist/commands/search.js +40 -0
  53. package/dist/commands/search.js.map +1 -0
  54. package/dist/commands/start.d.ts +3 -0
  55. package/dist/commands/start.d.ts.map +1 -0
  56. package/dist/commands/start.js +120 -0
  57. package/dist/commands/start.js.map +1 -0
  58. package/dist/commands/stop.d.ts +3 -0
  59. package/dist/commands/stop.d.ts.map +1 -0
  60. package/dist/commands/stop.js +55 -0
  61. package/dist/commands/stop.js.map +1 -0
  62. package/dist/commands/upgrade.d.ts +3 -0
  63. package/dist/commands/upgrade.d.ts.map +1 -0
  64. package/dist/commands/upgrade.js +16 -0
  65. package/dist/commands/upgrade.js.map +1 -0
  66. package/dist/commands/workspace.d.ts +3 -0
  67. package/dist/commands/workspace.d.ts.map +1 -0
  68. package/dist/commands/workspace.js +85 -0
  69. package/dist/commands/workspace.js.map +1 -0
  70. package/dist/index.d.ts +3 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +43 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/utils/bootstrap.d.ts +4 -0
  75. package/dist/utils/bootstrap.d.ts.map +1 -0
  76. package/dist/utils/bootstrap.js +17 -0
  77. package/dist/utils/bootstrap.js.map +1 -0
  78. package/package.json +53 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,wBAAgB,aAAa,YAsJ5B"}
@@ -0,0 +1,151 @@
1
+ import { Command } from 'commander';
2
+ import { log } from 'opendocuments-core';
3
+ import { getContext, shutdownContext } from '../utils/bootstrap.js';
4
+ export function doctorCommand() {
5
+ return new Command('doctor')
6
+ .description('Run health diagnostics')
7
+ .action(async () => {
8
+ log.heading('OpenDocuments Health Check');
9
+ let hasIssues = false;
10
+ try {
11
+ const ctx = await getContext();
12
+ log.ok('Core v0.1.0');
13
+ // Test SQLite
14
+ try {
15
+ ctx.db.get('SELECT 1');
16
+ log.ok('SQLite connected');
17
+ }
18
+ catch {
19
+ log.fail('SQLite connection failed');
20
+ hasIssues = true;
21
+ }
22
+ // Test LanceDB / document store
23
+ try {
24
+ log.ok('LanceDB connected');
25
+ const docs = ctx.store.listDocuments();
26
+ log.ok(`Documents ${docs.length} indexed`);
27
+ }
28
+ catch {
29
+ log.fail('LanceDB connection failed');
30
+ hasIssues = true;
31
+ }
32
+ const workspaces = ctx.workspaceManager.list();
33
+ log.ok(`Workspaces ${workspaces.length}`);
34
+ log.blank();
35
+ log.heading('Plugins');
36
+ for (const p of ctx.registry.listAll()) {
37
+ const isStub = p.name.includes('stub');
38
+ if (isStub) {
39
+ log.fail(`${p.name.padEnd(35)} v${p.version} (DEGRADED)`);
40
+ hasIssues = true;
41
+ }
42
+ else {
43
+ log.ok(`${p.name.padEnd(35)} v${p.version}`);
44
+ }
45
+ }
46
+ log.blank();
47
+ log.heading('Model Health');
48
+ for (const model of ctx.registry.getModels()) {
49
+ if (model.healthCheck) {
50
+ try {
51
+ const status = await model.healthCheck();
52
+ if (status.healthy) {
53
+ log.ok(`${model.name.padEnd(35)} healthy`);
54
+ }
55
+ else {
56
+ log.fail(`${model.name.padEnd(35)} ${status.message ?? 'unhealthy'}`);
57
+ hasIssues = true;
58
+ }
59
+ }
60
+ catch (err) {
61
+ log.fail(`${model.name.padEnd(35)} healthCheck threw: ${err.message}`);
62
+ hasIssues = true;
63
+ }
64
+ }
65
+ else {
66
+ log.ok(`${model.name.padEnd(35)} (no healthCheck)`);
67
+ }
68
+ }
69
+ // Ollama-specific diagnostics
70
+ if (ctx.config.model.provider === 'ollama') {
71
+ log.blank();
72
+ log.heading('Ollama Diagnostics');
73
+ const baseUrl = ctx.config.model.baseUrl || 'http://localhost:11434';
74
+ const tagsUrl = `${baseUrl}/api/tags`;
75
+ let ollamaReachable = false;
76
+ let availableModels = [];
77
+ try {
78
+ const controller = new AbortController();
79
+ const timeoutId = setTimeout(() => controller.abort(), 3000);
80
+ const res = await fetch(tagsUrl, { signal: controller.signal });
81
+ clearTimeout(timeoutId);
82
+ if (res.ok) {
83
+ ollamaReachable = true;
84
+ const data = await res.json();
85
+ availableModels = (data.models ?? []).map((m) => m.name);
86
+ log.ok(`Ollama reachable at ${baseUrl}`);
87
+ }
88
+ else {
89
+ log.fail(`Ollama responded with HTTP ${res.status}`);
90
+ hasIssues = true;
91
+ }
92
+ }
93
+ catch {
94
+ log.fail(`Ollama cannot connect to ${baseUrl}`);
95
+ log.arrow(' Fix: ollama serve');
96
+ log.arrow(' Install: https://ollama.com');
97
+ hasIssues = true;
98
+ }
99
+ if (ollamaReachable) {
100
+ const requiredModels = Array.from(new Set([ctx.config.model.llm, ctx.config.model.embedding]));
101
+ for (const required of requiredModels) {
102
+ // Ollama tags may include ":latest" suffix; match on base name or exact name
103
+ const found = availableModels.some((m) => m === required || m === `${required}:latest` || m.startsWith(`${required}:`));
104
+ if (found) {
105
+ log.ok(`Model ${required}`);
106
+ }
107
+ else {
108
+ log.fail(`Model ${required} not found`);
109
+ log.arrow(` Fix: ollama pull ${required}`);
110
+ hasIssues = true;
111
+ }
112
+ }
113
+ }
114
+ }
115
+ log.blank();
116
+ if (hasIssues) {
117
+ log.fail('Some checks failed.');
118
+ }
119
+ else {
120
+ log.ok('All checks passed!');
121
+ }
122
+ }
123
+ catch (err) {
124
+ hasIssues = true;
125
+ const message = err.message;
126
+ log.fail(`Bootstrap failed: ${message}`);
127
+ log.blank();
128
+ log.info('Troubleshooting suggestions:');
129
+ if (message.includes('ENOENT') || message.includes('no such file')) {
130
+ log.arrow(' The data directory or config file may be missing. Run: opendocuments init');
131
+ }
132
+ else if (message.includes('SQLITE') || message.includes('database')) {
133
+ log.arrow(' SQLite database may be corrupt. Try removing ~/.opendocuments/opendocuments.db and restarting.');
134
+ }
135
+ else if (message.includes('permission') || message.includes('EACCES')) {
136
+ log.arrow(' Permission denied. Check ownership of ~/.opendocuments/');
137
+ }
138
+ else {
139
+ log.arrow(' Run with DEBUG=1 for verbose output.');
140
+ log.arrow(' Check logs at ~/.opendocuments/logs/ if available.');
141
+ }
142
+ }
143
+ finally {
144
+ await shutdownContext();
145
+ }
146
+ if (hasIssues) {
147
+ process.exitCode = 1;
148
+ }
149
+ });
150
+ }
151
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function documentCommand(): Command;
3
+ //# sourceMappingURL=document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/commands/document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,wBAAgB,eAAe,YAsD9B"}
@@ -0,0 +1,78 @@
1
+ import { Command } from 'commander';
2
+ import { log } from 'opendocuments-core';
3
+ import chalk from 'chalk';
4
+ import { getContext, shutdownContext } from '../utils/bootstrap.js';
5
+ export function documentCommand() {
6
+ const cmd = new Command('document').description('Manage documents');
7
+ cmd.command('list').description('List indexed documents').action(async () => {
8
+ const ctx = await getContext();
9
+ try {
10
+ const docs = ctx.store.listDocuments();
11
+ if (docs.length === 0) {
12
+ log.info('No documents indexed');
13
+ return;
14
+ }
15
+ log.heading('Documents');
16
+ for (const d of docs) {
17
+ const status = d.status === 'indexed' ? chalk.green('[ok]') : d.status === 'error' ? chalk.red('[!!]') : chalk.yellow('[..]');
18
+ log.dim(` ${status} ${(d.title || '').padEnd(30)} ${String(d.chunk_count || 0).padStart(4)} chunks ${d.source_type}`);
19
+ }
20
+ }
21
+ finally {
22
+ await shutdownContext();
23
+ }
24
+ });
25
+ cmd.command('get <id>').description('Get document details').action(async (id) => {
26
+ const ctx = await getContext();
27
+ try {
28
+ const doc = ctx.store.getDocument(id);
29
+ if (!doc) {
30
+ log.fail('Document not found');
31
+ return;
32
+ }
33
+ console.log(JSON.stringify(doc, null, 2));
34
+ }
35
+ finally {
36
+ await shutdownContext();
37
+ }
38
+ });
39
+ cmd.command('delete <id>').description('Delete a document (soft)').action(async (id) => {
40
+ const ctx = await getContext();
41
+ try {
42
+ await ctx.store.softDeleteDocument(id);
43
+ log.ok('Document moved to trash');
44
+ }
45
+ finally {
46
+ await shutdownContext();
47
+ }
48
+ });
49
+ cmd.command('restore <id>').description('Restore a deleted document').action(async (id) => {
50
+ const ctx = await getContext();
51
+ try {
52
+ ctx.store.restoreDocument(id);
53
+ log.ok('Document restored (needs re-indexing)');
54
+ }
55
+ finally {
56
+ await shutdownContext();
57
+ }
58
+ });
59
+ cmd.command('trash').description('List deleted documents').action(async () => {
60
+ const ctx = await getContext();
61
+ try {
62
+ const docs = ctx.store.listDeletedDocuments();
63
+ if (docs.length === 0) {
64
+ log.info('Trash is empty');
65
+ return;
66
+ }
67
+ log.heading('Trash');
68
+ for (const d of docs) {
69
+ log.dim(` ${(d.title || '').padEnd(30)} deleted: ${d.deleted_at}`);
70
+ }
71
+ }
72
+ finally {
73
+ await shutdownContext();
74
+ }
75
+ });
76
+ return cmd;
77
+ }
78
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/commands/document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function exportCommand(): Command;
3
+ //# sourceMappingURL=export-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/export-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,wBAAgB,aAAa,YAyC5B"}
@@ -0,0 +1,44 @@
1
+ import { Command } from 'commander';
2
+ import { log } from 'opendocuments-core';
3
+ import { getContext, shutdownContext } from '../utils/bootstrap.js';
4
+ import { writeFileSync, mkdirSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ export function exportCommand() {
7
+ return new Command('export')
8
+ .description('Export data for backup')
9
+ .option('--output <path>', 'Output directory', './opendocuments-backup')
10
+ .option('--workspace <name>', 'Workspace to export')
11
+ .action(async (opts) => {
12
+ const ctx = await getContext();
13
+ try {
14
+ log.heading('Export');
15
+ const outDir = opts.output;
16
+ mkdirSync(outDir, { recursive: true });
17
+ // Export documents metadata
18
+ const docs = ctx.store.listDocuments();
19
+ writeFileSync(join(outDir, 'documents.json'), JSON.stringify(docs, null, 2));
20
+ log.ok(`${docs.length} documents exported`);
21
+ // Export conversations
22
+ const convos = ctx.conversationManager.list();
23
+ const convoData = convos.map(c => ({
24
+ ...c,
25
+ messages: ctx.conversationManager.getMessages(c.id),
26
+ }));
27
+ writeFileSync(join(outDir, 'conversations.json'), JSON.stringify(convoData, null, 2));
28
+ log.ok(`${convos.length} conversations exported`);
29
+ // Export config
30
+ writeFileSync(join(outDir, 'config.json'), JSON.stringify(ctx.config, null, 2));
31
+ log.ok('Configuration exported');
32
+ // Export workspaces
33
+ const workspaces = ctx.workspaceManager.list();
34
+ writeFileSync(join(outDir, 'workspaces.json'), JSON.stringify(workspaces, null, 2));
35
+ log.ok(`${workspaces.length} workspaces exported`);
36
+ log.blank();
37
+ log.ok(`Backup saved to ${outDir}/`);
38
+ }
39
+ finally {
40
+ await shutdownContext();
41
+ }
42
+ });
43
+ }
44
+ //# sourceMappingURL=export-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-cmd.js","sourceRoot":"","sources":["../../src/commands/export-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,wBAAwB,CAAC;SACvE,MAAM,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAA;QAC9B,IAAI,CAAC;YACH,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;YAC1B,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAEtC,4BAA4B;YAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,CAAA;YACtC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAC5E,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,qBAAqB,CAAC,CAAA;YAE3C,uBAAuB;YACvB,MAAM,MAAM,GAAG,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAA;YAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjC,GAAG,CAAC;gBACJ,QAAQ,EAAE,GAAG,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;aACpD,CAAC,CAAC,CAAA;YACH,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YACrF,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,yBAAyB,CAAC,CAAA;YAEjD,gBAAgB;YAChB,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAC/E,GAAG,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAA;YAEhC,oBAAoB;YACpB,MAAM,UAAU,GAAG,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAA;YAC9C,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YACnF,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,sBAAsB,CAAC,CAAA;YAElD,GAAG,CAAC,KAAK,EAAE,CAAA;YACX,GAAG,CAAC,EAAE,CAAC,mBAAmB,MAAM,GAAG,CAAC,CAAA;QACtC,CAAC;gBAAS,CAAC;YACT,MAAM,eAAe,EAAE,CAAA;QACzB,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function importCommand(): Command;
3
+ //# sourceMappingURL=import-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/import-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,wBAAgB,aAAa,YAkC5B"}
@@ -0,0 +1,39 @@
1
+ import { Command } from 'commander';
2
+ import { log } from 'opendocuments-core';
3
+ import { getContext, shutdownContext } from '../utils/bootstrap.js';
4
+ import { readFileSync, existsSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ export function importCommand() {
7
+ return new Command('import')
8
+ .description('Import data from backup')
9
+ .argument('<path>', 'Backup directory path')
10
+ .action(async (backupDir) => {
11
+ const ctx = await getContext();
12
+ try {
13
+ log.heading('Import');
14
+ if (!existsSync(backupDir)) {
15
+ log.fail(`Backup directory not found: ${backupDir}`);
16
+ return;
17
+ }
18
+ // Import conversations
19
+ const convosPath = join(backupDir, 'conversations.json');
20
+ if (existsSync(convosPath)) {
21
+ const convos = JSON.parse(readFileSync(convosPath, 'utf-8'));
22
+ let count = 0;
23
+ for (const convo of convos) {
24
+ const created = ctx.conversationManager.create(convo.title);
25
+ for (const msg of convo.messages || []) {
26
+ ctx.conversationManager.addMessage(created.id, msg.role, msg.content);
27
+ }
28
+ count++;
29
+ }
30
+ log.ok(`${count} conversations imported`);
31
+ }
32
+ log.ok('Import complete');
33
+ }
34
+ finally {
35
+ await shutdownContext();
36
+ }
37
+ });
38
+ }
39
+ //# sourceMappingURL=import-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-cmd.js","sourceRoot":"","sources":["../../src/commands/import-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,yBAAyB,CAAC;SACtC,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QAC1B,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAA;QAC9B,IAAI,CAAC;YACH,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAErB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,GAAG,CAAC,IAAI,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAA;gBACpD,OAAM;YACR,CAAC;YAED,uBAAuB;YACvB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAA;YACxD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;gBAC5D,IAAI,KAAK,GAAG,CAAC,CAAA;gBACb,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;oBAC3D,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;wBACvC,GAAG,CAAC,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;oBACvE,CAAC;oBACD,KAAK,EAAE,CAAA;gBACT,CAAC;gBACD,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,yBAAyB,CAAC,CAAA;YAC3C,CAAC;YAED,GAAG,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAA;QAC3B,CAAC;gBAAS,CAAC;YACT,MAAM,eAAe,EAAE,CAAA;QACzB,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function indexCommand(): Command;
3
+ //# sourceMappingURL=index-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/index-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,wBAAgB,YAAY,YAkE3B"}
@@ -0,0 +1,76 @@
1
+ import { Command } from 'commander';
2
+ import { log, discoverFiles, FileWatcher } from 'opendocuments-core';
3
+ import { getContext, shutdownContext } from '../utils/bootstrap.js';
4
+ import { readFileSync } from 'node:fs';
5
+ import { extname, basename, resolve } from 'node:path';
6
+ export function indexCommand() {
7
+ return new Command('index')
8
+ .description('Index a file or directory')
9
+ .argument('<path>', 'File or directory path')
10
+ .option('--reindex', 'Force reindex even if unchanged')
11
+ .option('--watch', 'Watch for file changes')
12
+ .action(async (inputPath, opts) => {
13
+ const ctx = await getContext();
14
+ const absPath = resolve(inputPath);
15
+ const textExtensions = new Set(['.md', '.mdx', '.txt', '.json', '.yaml', '.yml', '.toml', '.csv', '.html', '.htm', '.ipynb']);
16
+ try {
17
+ log.heading('Indexing');
18
+ const files = discoverFiles(absPath);
19
+ if (files.length === 0) {
20
+ log.fail('No supported files found');
21
+ return;
22
+ }
23
+ log.info(`Found ${files.length} file(s)`);
24
+ for (const file of files) {
25
+ if (opts.reindex) {
26
+ // Delete existing document to force reindex (bypass content hash check)
27
+ const docs = ctx.store.listDocuments();
28
+ const existing = docs.find(d => d.source_path === file);
29
+ if (existing) {
30
+ await ctx.store.hardDeleteDocument(existing.id);
31
+ }
32
+ }
33
+ const ext = extname(file);
34
+ const content = textExtensions.has(ext) ? readFileSync(file, 'utf-8') : readFileSync(file);
35
+ const result = await ctx.pipeline.ingest({
36
+ title: basename(file), content, sourceType: 'local',
37
+ sourcePath: file, fileType: extname(file),
38
+ });
39
+ if (result.status === 'indexed')
40
+ log.ok(`${basename(file)} (${result.chunks} chunks)`);
41
+ else if (result.status === 'skipped')
42
+ log.info(`${basename(file)} (unchanged)`);
43
+ else
44
+ log.fail(`${basename(file)} (error)`);
45
+ }
46
+ // After the normal indexing loop, if --watch:
47
+ if (opts.watch) {
48
+ log.info('Watching for changes... (Ctrl+C to stop)');
49
+ const watcher = new FileWatcher(absPath, new Set(['.md', '.mdx', '.txt', '.pdf', '.docx', '.xlsx', '.html', '.ipynb', '.eml']), async (changes) => {
50
+ for (const change of changes) {
51
+ if (change.type === 'deleted') {
52
+ log.info(`Deleted: ${change.path}`);
53
+ }
54
+ else {
55
+ const content = readFileSync(change.path, textExtensions.has(extname(change.path)) ? 'utf-8' : undefined);
56
+ const result = await ctx.pipeline.ingest({
57
+ title: basename(change.path), content, sourceType: 'local',
58
+ sourcePath: change.path, fileType: extname(change.path),
59
+ });
60
+ log.ok(`${change.type}: ${basename(change.path)} (${result.chunks} chunks)`);
61
+ }
62
+ }
63
+ });
64
+ watcher.start();
65
+ // Keep process alive
66
+ await new Promise(() => { });
67
+ }
68
+ }
69
+ finally {
70
+ if (!opts.watch) {
71
+ await shutdownContext();
72
+ }
73
+ }
74
+ });
75
+ }
76
+ //# sourceMappingURL=index-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-cmd.js","sourceRoot":"","sources":["../../src/commands/index-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function initCommand(): Command;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAmEnC,wBAAgB,WAAW,YAkS1B"}