@moxn/kb-cli 0.1.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 (74) hide show
  1. package/bin/moxn-kb +2 -0
  2. package/dist/auth.d.ts +3 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +11 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/client.d.ts +14 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +25 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/commands/databases.d.ts +3 -0
  11. package/dist/commands/databases.d.ts.map +1 -0
  12. package/dist/commands/databases.js +209 -0
  13. package/dist/commands/databases.js.map +1 -0
  14. package/dist/commands/documents.d.ts +3 -0
  15. package/dist/commands/documents.d.ts.map +1 -0
  16. package/dist/commands/documents.js +160 -0
  17. package/dist/commands/documents.js.map +1 -0
  18. package/dist/commands/find.d.ts +3 -0
  19. package/dist/commands/find.d.ts.map +1 -0
  20. package/dist/commands/find.js +31 -0
  21. package/dist/commands/find.js.map +1 -0
  22. package/dist/commands/helpers.d.ts +8 -0
  23. package/dist/commands/helpers.d.ts.map +1 -0
  24. package/dist/commands/helpers.js +23 -0
  25. package/dist/commands/helpers.js.map +1 -0
  26. package/dist/commands/members.d.ts +3 -0
  27. package/dist/commands/members.d.ts.map +1 -0
  28. package/dist/commands/members.js +18 -0
  29. package/dist/commands/members.js.map +1 -0
  30. package/dist/commands/merge-requests.d.ts +3 -0
  31. package/dist/commands/merge-requests.d.ts.map +1 -0
  32. package/dist/commands/merge-requests.js +99 -0
  33. package/dist/commands/merge-requests.js.map +1 -0
  34. package/dist/commands/read.d.ts +3 -0
  35. package/dist/commands/read.d.ts.map +1 -0
  36. package/dist/commands/read.js +45 -0
  37. package/dist/commands/read.js.map +1 -0
  38. package/dist/commands/search.d.ts +3 -0
  39. package/dist/commands/search.d.ts.map +1 -0
  40. package/dist/commands/search.js +19 -0
  41. package/dist/commands/search.js.map +1 -0
  42. package/dist/commands/sections.d.ts +3 -0
  43. package/dist/commands/sections.d.ts.map +1 -0
  44. package/dist/commands/sections.js +167 -0
  45. package/dist/commands/sections.js.map +1 -0
  46. package/dist/commands/upload.d.ts +3 -0
  47. package/dist/commands/upload.d.ts.map +1 -0
  48. package/dist/commands/upload.js +28 -0
  49. package/dist/commands/upload.js.map +1 -0
  50. package/dist/format/index.d.ts +3 -0
  51. package/dist/format/index.d.ts.map +1 -0
  52. package/dist/format/index.js +12 -0
  53. package/dist/format/index.js.map +1 -0
  54. package/dist/format/json.d.ts +2 -0
  55. package/dist/format/json.d.ts.map +1 -0
  56. package/dist/format/json.js +4 -0
  57. package/dist/format/json.js.map +1 -0
  58. package/dist/format/markdown.d.ts +2 -0
  59. package/dist/format/markdown.d.ts.map +1 -0
  60. package/dist/format/markdown.js +7 -0
  61. package/dist/format/markdown.js.map +1 -0
  62. package/dist/format/xml.d.ts +2 -0
  63. package/dist/format/xml.d.ts.map +1 -0
  64. package/dist/format/xml.js +7 -0
  65. package/dist/format/xml.js.map +1 -0
  66. package/dist/index.d.ts +3 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +31 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/upload.d.ts +8 -0
  71. package/dist/upload.d.ts.map +1 -0
  72. package/dist/upload.js +41 -0
  73. package/dist/upload.js.map +1 -0
  74. package/package.json +42 -0
@@ -0,0 +1,99 @@
1
+ import { runToolCommand } from './helpers.js';
2
+ export function registerMergeRequestsCommand(program) {
3
+ const mr = program
4
+ .command('merge-requests')
5
+ .description('Manage merge requests (create, review, merge)');
6
+ mr.command('list')
7
+ .description('List merge requests')
8
+ .option('--document-id <uuid>', 'Filter by document ID')
9
+ .option('--status <status>', 'Filter by status: open, merged, closed')
10
+ .action(async function () {
11
+ const opts = this.opts();
12
+ const params = { action: 'list' };
13
+ if (opts.documentId)
14
+ params.documentId = opts.documentId;
15
+ if (opts.status)
16
+ params.status = opts.status;
17
+ await runToolCommand(this, 'merge_requests', params);
18
+ });
19
+ mr.command('get')
20
+ .description('Get merge request details')
21
+ .requiredOption('--id <uuid>', 'Merge request ID')
22
+ .action(async function () {
23
+ const opts = this.opts();
24
+ await runToolCommand(this, 'merge_requests', {
25
+ action: 'get',
26
+ mergeRequestId: opts.id,
27
+ });
28
+ });
29
+ mr.command('create')
30
+ .description('Create a new merge request')
31
+ .requiredOption('--document-id <uuid>', 'Document ID')
32
+ .requiredOption('--source-branch <branch>', 'Source branch name')
33
+ .requiredOption('--target-branch <branch>', 'Target branch name')
34
+ .requiredOption('--title <title>', 'Merge request title')
35
+ .option('--description <desc>', 'Merge request description')
36
+ .action(async function () {
37
+ const opts = this.opts();
38
+ await runToolCommand(this, 'merge_requests', {
39
+ action: 'create',
40
+ documentId: opts.documentId,
41
+ sourceBranch: opts.sourceBranch,
42
+ targetBranch: opts.targetBranch,
43
+ title: opts.title,
44
+ description: opts.description,
45
+ });
46
+ });
47
+ mr.command('analyze')
48
+ .description('Analyze merge request changes and conflicts')
49
+ .requiredOption('--id <uuid>', 'Merge request ID')
50
+ .action(async function () {
51
+ const opts = this.opts();
52
+ await runToolCommand(this, 'merge_requests', {
53
+ action: 'analyze',
54
+ mergeRequestId: opts.id,
55
+ });
56
+ });
57
+ mr.command('execute')
58
+ .description('Execute (merge) a merge request')
59
+ .requiredOption('--id <uuid>', 'Merge request ID')
60
+ .option('--resolutions <json>', 'Conflict resolutions as JSON')
61
+ .action(async function () {
62
+ const opts = this.opts();
63
+ const params = {
64
+ action: 'execute',
65
+ mergeRequestId: opts.id,
66
+ };
67
+ if (opts.resolutions)
68
+ params.resolutions = JSON.parse(opts.resolutions);
69
+ await runToolCommand(this, 'merge_requests', params);
70
+ });
71
+ mr.command('close')
72
+ .description('Close a merge request without merging')
73
+ .requiredOption('--id <uuid>', 'Merge request ID')
74
+ .action(async function () {
75
+ const opts = this.opts();
76
+ await runToolCommand(this, 'merge_requests', {
77
+ action: 'close',
78
+ mergeRequestId: opts.id,
79
+ });
80
+ });
81
+ mr.command('update')
82
+ .description('Update merge request title or description')
83
+ .requiredOption('--id <uuid>', 'Merge request ID')
84
+ .option('--new-title <title>', 'New title')
85
+ .option('--new-description <desc>', 'New description')
86
+ .action(async function () {
87
+ const opts = this.opts();
88
+ const params = {
89
+ action: 'update',
90
+ mergeRequestId: opts.id,
91
+ };
92
+ if (opts.newTitle)
93
+ params.newTitle = opts.newTitle;
94
+ if (opts.newDescription)
95
+ params.newDescription = opts.newDescription;
96
+ await runToolCommand(this, 'merge_requests', params);
97
+ });
98
+ }
99
+ //# sourceMappingURL=merge-requests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-requests.js","sourceRoot":"","sources":["../../src/commands/merge-requests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerReadCommand(program: Command): void;
3
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyC1D"}
@@ -0,0 +1,45 @@
1
+ import { runToolCommand } from './helpers.js';
2
+ export function registerReadCommand(program) {
3
+ program
4
+ .command('read')
5
+ .description('Read document or section content from the knowledge base')
6
+ .option('--document-id <uuid>', 'Document ID to read')
7
+ .option('--section-id <uuid>', 'Specific section to read (requires --document-id)')
8
+ .option('--branch <branch>', 'Branch name (default: document default branch)')
9
+ .option('--items <json>', 'Batch read: JSON array of {type, documentId, sectionId?, branchName?}')
10
+ .action(async function () {
11
+ const opts = this.opts();
12
+ let params;
13
+ if (opts.items) {
14
+ // Batch read mode
15
+ params = { items: JSON.parse(opts.items) };
16
+ }
17
+ else if (opts.documentId && opts.sectionId) {
18
+ // Single section read
19
+ params = {
20
+ items: [{
21
+ type: 'section',
22
+ documentId: opts.documentId,
23
+ sectionId: opts.sectionId,
24
+ branchName: opts.branch,
25
+ }],
26
+ };
27
+ }
28
+ else if (opts.documentId) {
29
+ // Full document read
30
+ params = {
31
+ items: [{
32
+ type: 'document',
33
+ documentId: opts.documentId,
34
+ branchName: opts.branch,
35
+ }],
36
+ };
37
+ }
38
+ else {
39
+ console.error('Error: --document-id or --items is required');
40
+ process.exit(1);
41
+ }
42
+ await runToolCommand(this, 'read', params);
43
+ });
44
+ }
45
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0DAA0D,CAAC;SACvE,MAAM,CAAC,sBAAsB,EAAE,qBAAqB,CAAC;SACrD,MAAM,CAAC,qBAAqB,EAAE,mDAAmD,CAAC;SAClF,MAAM,CAAC,mBAAmB,EAAE,gDAAgD,CAAC;SAC7E,MAAM,CAAC,gBAAgB,EAAE,uEAAuE,CAAC;SACjG,MAAM,CAAC,KAAK;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,MAA+B,CAAC;QAEpC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,kBAAkB;YAClB,MAAM,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7C,sBAAsB;YACtB,MAAM,GAAG;gBACP,KAAK,EAAE,CAAC;wBACN,IAAI,EAAE,SAAS;wBACf,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,UAAU,EAAE,IAAI,CAAC,MAAM;qBACxB,CAAC;aACH,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3B,qBAAqB;YACrB,MAAM,GAAG;gBACP,KAAK,EAAE,CAAC;wBACN,IAAI,EAAE,UAAU;wBAChB,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,UAAU,EAAE,IAAI,CAAC,MAAM;qBACxB,CAAC;aACH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerSearchCommand(program: Command): void;
3
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAe5D"}
@@ -0,0 +1,19 @@
1
+ import { runToolCommand } from './helpers.js';
2
+ export function registerSearchCommand(program) {
3
+ program
4
+ .command('search <query>')
5
+ .description('Search section content in the knowledge base')
6
+ .option('--path <path>', 'Path prefix to search under')
7
+ .option('--limit <n>', 'Maximum results (default: 100, max: 500)', '100')
8
+ .action(async function (query) {
9
+ const opts = this.opts();
10
+ const params = {
11
+ query,
12
+ limit: parseInt(opts.limit, 10),
13
+ };
14
+ if (opts.path)
15
+ params.path = opts.path;
16
+ await runToolCommand(this, 'search', params);
17
+ });
18
+ }
19
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;SACtD,MAAM,CAAC,aAAa,EAAE,0CAA0C,EAAE,KAAK,CAAC;SACxE,MAAM,CAAC,KAAK,WAAyB,KAAa;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,MAAM,GAA4B;YACtC,KAAK;YACL,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;SAChC,CAAC;QACF,IAAI,IAAI,CAAC,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvC,MAAM,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerSectionsCommand(program: Command): void;
3
+ //# sourceMappingURL=sections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../src/commands/sections.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuI9D"}
@@ -0,0 +1,167 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import { runToolCommand } from './helpers.js';
3
+ async function resolveContent(opts) {
4
+ // Priority: content-json > content-json-file > content-file > content > stdin
5
+ if (opts.contentJson) {
6
+ return JSON.parse(opts.contentJson);
7
+ }
8
+ if (opts.contentJsonFile) {
9
+ const raw = await fs.readFile(opts.contentJsonFile, 'utf-8');
10
+ return JSON.parse(raw);
11
+ }
12
+ if (opts.contentFile) {
13
+ const text = await fs.readFile(opts.contentFile, 'utf-8');
14
+ return [{ blockType: 'text', text }];
15
+ }
16
+ if (opts.content) {
17
+ if (opts.content === '-') {
18
+ // Read from stdin
19
+ const chunks = [];
20
+ for await (const chunk of process.stdin) {
21
+ chunks.push(chunk);
22
+ }
23
+ const text = Buffer.concat(chunks).toString('utf-8');
24
+ return [{ blockType: 'text', text }];
25
+ }
26
+ return [{ blockType: 'text', text: opts.content }];
27
+ }
28
+ return undefined;
29
+ }
30
+ export function registerSectionsCommand(program) {
31
+ const sections = program
32
+ .command('sections')
33
+ .description('Manage KB document sections (create, update, delete, reorder)');
34
+ sections.command('create')
35
+ .description('Create a new section in a document')
36
+ .requiredOption('--document-id <uuid>', 'Document ID')
37
+ .requiredOption('--name <name>', 'Section name')
38
+ .option('--content <text>', 'Markdown content (use "-" for stdin)')
39
+ .option('--content-file <path>', 'Read content from file')
40
+ .option('--content-json <json>', 'Full block array as JSON')
41
+ .option('--content-json-file <path>', 'Block array from JSON file')
42
+ .option('--branch <branch>', 'Branch name (default: main)')
43
+ .option('--position <n>', 'Position index')
44
+ .action(async function () {
45
+ const opts = this.opts();
46
+ const content = await resolveContent(opts);
47
+ const params = {
48
+ action: 'create',
49
+ documentId: opts.documentId,
50
+ name: opts.name,
51
+ };
52
+ if (content)
53
+ params.content = content;
54
+ if (opts.branch)
55
+ params.branchName = opts.branch;
56
+ if (opts.position !== undefined)
57
+ params.position = parseInt(opts.position, 10);
58
+ await runToolCommand(this, 'sections', params);
59
+ });
60
+ sections.command('batch-create')
61
+ .description('Create multiple sections at once')
62
+ .requiredOption('--document-id <uuid>', 'Document ID')
63
+ .requiredOption('--sections <json>', 'JSON array of {name, content?, position?}')
64
+ .option('--branch <branch>', 'Branch name')
65
+ .action(async function () {
66
+ const opts = this.opts();
67
+ const sectionsData = JSON.parse(opts.sections);
68
+ await runToolCommand(this, 'sections', {
69
+ action: 'batch_create',
70
+ documentId: opts.documentId,
71
+ sections: sectionsData,
72
+ branchName: opts.branch,
73
+ });
74
+ });
75
+ sections.command('update')
76
+ .description('Update a section')
77
+ .requiredOption('--document-id <uuid>', 'Document ID')
78
+ .requiredOption('--section-id <uuid>', 'Section ID')
79
+ .option('--new-name <name>', 'New section name')
80
+ .option('--content <text>', 'New markdown content (use "-" for stdin)')
81
+ .option('--content-file <path>', 'New content from file')
82
+ .option('--content-json <json>', 'New content as full block array')
83
+ .option('--content-json-file <path>', 'New content block array from file')
84
+ .option('--branch <branch>', 'Branch name')
85
+ .option('--commit-message <msg>', 'Commit message')
86
+ .action(async function () {
87
+ const opts = this.opts();
88
+ const content = await resolveContent(opts);
89
+ const params = {
90
+ action: 'update',
91
+ documentId: opts.documentId,
92
+ sectionId: opts.sectionId,
93
+ };
94
+ if (content)
95
+ params.newContent = content;
96
+ if (opts.newName)
97
+ params.newName = opts.newName;
98
+ if (opts.branch)
99
+ params.branchName = opts.branch;
100
+ if (opts.commitMessage)
101
+ params.commitMessage = opts.commitMessage;
102
+ await runToolCommand(this, 'sections', params);
103
+ });
104
+ sections.command('delete')
105
+ .description('Delete a section')
106
+ .requiredOption('--document-id <uuid>', 'Document ID')
107
+ .requiredOption('--section-id <uuid>', 'Section ID')
108
+ .option('--branch <branch>', 'Branch name')
109
+ .action(async function () {
110
+ const opts = this.opts();
111
+ await runToolCommand(this, 'sections', {
112
+ action: 'delete',
113
+ documentId: opts.documentId,
114
+ sectionId: opts.sectionId,
115
+ branchName: opts.branch,
116
+ });
117
+ });
118
+ sections.command('reorder')
119
+ .description('Reorder sections in a document')
120
+ .requiredOption('--document-id <uuid>', 'Document ID')
121
+ .requiredOption('--section-order <ids>', 'Comma-separated section IDs in desired order')
122
+ .option('--branch <branch>', 'Branch name')
123
+ .action(async function () {
124
+ const opts = this.opts();
125
+ await runToolCommand(this, 'sections', {
126
+ action: 'reorder',
127
+ documentId: opts.documentId,
128
+ sectionOrder: opts.sectionOrder.split(',').map((s) => s.trim()),
129
+ branchName: opts.branch,
130
+ });
131
+ });
132
+ sections.command('add-reference')
133
+ .description('Add a cross-reference from a section to another document/section')
134
+ .requiredOption('--document-id <uuid>', 'Source document ID')
135
+ .requiredOption('--section-id <uuid>', 'Source section ID')
136
+ .requiredOption('--target-document-id <uuid>', 'Target document ID')
137
+ .option('--target-section-id <uuid>', 'Target section ID (optional)')
138
+ .option('--branch <branch>', 'Branch name')
139
+ .action(async function () {
140
+ const opts = this.opts();
141
+ const params = {
142
+ action: 'add_reference',
143
+ documentId: opts.documentId,
144
+ sectionId: opts.sectionId,
145
+ targetDocumentId: opts.targetDocumentId,
146
+ branchName: opts.branch,
147
+ };
148
+ if (opts.targetSectionId)
149
+ params.targetSectionId = opts.targetSectionId;
150
+ await runToolCommand(this, 'sections', params);
151
+ });
152
+ sections.command('remove-reference')
153
+ .description('Remove a cross-reference')
154
+ .requiredOption('--document-id <uuid>', 'Document ID')
155
+ .requiredOption('--reference-id <uuid>', 'Reference ID to remove')
156
+ .option('--branch <branch>', 'Branch name')
157
+ .action(async function () {
158
+ const opts = this.opts();
159
+ await runToolCommand(this, 'sections', {
160
+ action: 'remove_reference',
161
+ documentId: opts.documentId,
162
+ referenceId: opts.referenceId,
163
+ branchName: opts.branch,
164
+ });
165
+ });
166
+ }
167
+ //# sourceMappingURL=sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/commands/sections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerUploadCommand(program: Command): void;
3
+ //# sourceMappingURL=upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsB5D"}
@@ -0,0 +1,28 @@
1
+ import { getGlobalOptions } from './helpers.js';
2
+ import { uploadFile } from '../upload.js';
3
+ import { formatOutput } from '../format/index.js';
4
+ export function registerUploadCommand(program) {
5
+ program
6
+ .command('upload')
7
+ .description('Upload a file to KB storage')
8
+ .requiredOption('--file <path>', 'File path to upload')
9
+ .option('--filename <name>', 'Display filename (defaults to file basename)')
10
+ .action(async function () {
11
+ const opts = this.opts();
12
+ const globalOpts = getGlobalOptions(this);
13
+ try {
14
+ const result = await uploadFile(opts.file, {
15
+ apiKey: globalOpts.apiKey,
16
+ baseUrl: globalOpts.baseUrl,
17
+ filename: opts.filename,
18
+ });
19
+ console.log(formatOutput(result, globalOpts.format));
20
+ }
21
+ catch (error) {
22
+ const message = error instanceof Error ? error.message : String(error);
23
+ console.error(`Error: ${message}`);
24
+ process.exit(1);
25
+ }
26
+ });
27
+ }
28
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,cAAc,CAAC,eAAe,EAAE,qBAAqB,CAAC;SACtD,MAAM,CAAC,mBAAmB,EAAE,8CAA8C,CAAC;SAC3E,MAAM,CAAC,KAAK;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;gBACzC,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,OAAO,EAAE,UAAU,CAAC,OAAO;gBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type OutputFormat = 'json' | 'markdown' | 'xml';
2
+ export declare function formatOutput(data: unknown, format?: OutputFormat): string;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/format/index.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;AAEvD,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,GAAE,YAAqB,GAAG,MAAM,CAOjF"}
@@ -0,0 +1,12 @@
1
+ import { formatJson } from './json.js';
2
+ import { formatMarkdown } from './markdown.js';
3
+ import { formatXml } from './xml.js';
4
+ export function formatOutput(data, format = 'json') {
5
+ switch (format) {
6
+ case 'markdown': return formatMarkdown(data);
7
+ case 'xml': return formatXml(data);
8
+ case 'json':
9
+ default: return formatJson(data);
10
+ }
11
+ }
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/format/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIrC,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,SAAuB,MAAM;IACvE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU,CAAC,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7C,KAAK,KAAK,CAAC,CAAC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,MAAM,CAAC;QACZ,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function formatJson(data: unknown): string;
2
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/format/json.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEhD"}
@@ -0,0 +1,4 @@
1
+ export function formatJson(data) {
2
+ return JSON.stringify(data, null, 2);
3
+ }
4
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/format/json.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function formatMarkdown(data: unknown): string;
2
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/format/markdown.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,7 @@
1
+ // P1/P2 - Markdown formatting for read results
2
+ // For now, falls back to JSON
3
+ import { formatJson } from './json.js';
4
+ export function formatMarkdown(data) {
5
+ return formatJson(data);
6
+ }
7
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/format/markdown.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,8BAA8B;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,UAAU,cAAc,CAAC,IAAa;IAC1C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function formatXml(data: unknown): string;
2
+ //# sourceMappingURL=xml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../../src/format/xml.ts"],"names":[],"mappings":"AAIA,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAE/C"}
@@ -0,0 +1,7 @@
1
+ // P1/P2 - XML formatting
2
+ // For now, falls back to JSON
3
+ import { formatJson } from './json.js';
4
+ export function formatXml(data) {
5
+ return formatJson(data);
6
+ }
7
+ //# sourceMappingURL=xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.js","sourceRoot":"","sources":["../../src/format/xml.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,8BAA8B;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { registerFindCommand } from './commands/find.js';
4
+ import { registerReadCommand } from './commands/read.js';
5
+ import { registerSearchCommand } from './commands/search.js';
6
+ import { registerDocumentsCommand } from './commands/documents.js';
7
+ import { registerSectionsCommand } from './commands/sections.js';
8
+ import { registerDatabasesCommand } from './commands/databases.js';
9
+ import { registerUploadCommand } from './commands/upload.js';
10
+ import { registerMergeRequestsCommand } from './commands/merge-requests.js';
11
+ import { registerMembersCommand } from './commands/members.js';
12
+ const program = new Command();
13
+ program
14
+ .name('moxn-kb')
15
+ .description('CLI for Moxn Knowledge Base — designed for AI agents')
16
+ .version('0.1.0')
17
+ .option('-f, --format <type>', 'Output format: json, markdown, xml', 'json')
18
+ .option('--api-key <key>', 'API key (overrides MOXN_API_KEY env var)')
19
+ .option('--base-url <url>', 'API base URL (overrides MOXN_BASE_URL, default: https://moxn.dev)');
20
+ // Register all commands
21
+ registerFindCommand(program);
22
+ registerReadCommand(program);
23
+ registerSearchCommand(program);
24
+ registerDocumentsCommand(program);
25
+ registerSectionsCommand(program);
26
+ registerDatabasesCommand(program);
27
+ registerUploadCommand(program);
28
+ registerMergeRequestsCommand(program);
29
+ registerMembersCommand(program);
30
+ program.parse();
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,sDAAsD,CAAC;KACnE,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,qBAAqB,EAAE,oCAAoC,EAAE,MAAM,CAAC;KAC3E,MAAM,CAAC,iBAAiB,EAAE,0CAA0C,CAAC;KACrE,MAAM,CAAC,kBAAkB,EAAE,mEAAmE,CAAC,CAAC;AAEnG,wBAAwB;AACxB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,4BAA4B,CAAC,OAAO,CAAC,CAAC;AACtC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type ClientOptions } from './client.js';
2
+ export declare function uploadFile(filePath: string, options: ClientOptions & {
3
+ filename?: string;
4
+ }): Promise<{
5
+ key: string;
6
+ uploadUrl: string;
7
+ }>;
8
+ //# sourceMappingURL=upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../src/upload.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAkB3D,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAyB7C"}
package/dist/upload.js ADDED
@@ -0,0 +1,41 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import { callTool } from './client.js';
4
+ function inferMimeType(filePath) {
5
+ const ext = path.extname(filePath).toLowerCase();
6
+ const mimeMap = {
7
+ '.png': 'image/png', '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg',
8
+ '.gif': 'image/gif', '.webp': 'image/webp', '.pdf': 'application/pdf',
9
+ '.csv': 'text/csv', '.svg': 'image/svg+xml',
10
+ '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
11
+ '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
12
+ '.txt': 'text/plain', '.md': 'text/markdown', '.json': 'application/json',
13
+ '.html': 'text/html', '.xml': 'application/xml',
14
+ '.yaml': 'text/yaml', '.yml': 'text/yaml',
15
+ '.zip': 'application/zip',
16
+ };
17
+ return mimeMap[ext] || 'application/octet-stream';
18
+ }
19
+ export async function uploadFile(filePath, options) {
20
+ const absolutePath = path.resolve(filePath);
21
+ const fileBuffer = await fs.readFile(absolutePath);
22
+ const fileName = options.filename || path.basename(absolutePath);
23
+ const mimeType = inferMimeType(absolutePath);
24
+ // Get presigned upload URL
25
+ const uploadResult = await callTool('upload_url', {
26
+ type: mimeType,
27
+ filename: fileName,
28
+ }, options);
29
+ // Upload file to presigned URL
30
+ const uploadRes = await fetch(uploadResult.token, {
31
+ method: 'PUT',
32
+ headers: { 'Content-Type': mimeType },
33
+ body: fileBuffer,
34
+ });
35
+ if (!uploadRes.ok) {
36
+ const text = await uploadRes.text();
37
+ throw new Error(`Upload failed: ${uploadRes.status} ${text}`);
38
+ }
39
+ return { key: uploadResult.path, uploadUrl: uploadResult.token };
40
+ }
41
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../src/upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAsB,MAAM,aAAa,CAAC;AAE3D,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,MAAM,OAAO,GAA2B;QACtC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY;QAChE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB;QACrE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe;QAC3C,OAAO,EAAE,yEAAyE;QAClF,OAAO,EAAE,mEAAmE;QAC5E,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,kBAAkB;QACzE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB;QAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW;QACzC,MAAM,EAAE,iBAAiB;KAC1B,CAAC;IACF,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,0BAA0B,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAAgB,EAChB,OAA8C;IAE9C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IAE7C,2BAA2B;IAC3B,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE;QAChD,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,QAAQ;KACnB,EAAE,OAAO,CAAoC,CAAC;IAE/C,+BAA+B;IAC/B,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE;QAChD,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE;QACrC,IAAI,EAAE,UAAU;KACjB,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC;AACnE,CAAC"}