ctxpkg 0.0.3 → 0.0.4

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 (242) hide show
  1. package/bin/cli.js +1 -1
  2. package/bin/daemon.js +1 -1
  3. package/dist/agent/agent.d.ts +65 -0
  4. package/dist/agent/agent.d.ts.map +1 -0
  5. package/dist/agent/agent.js +291 -0
  6. package/dist/agent/agent.js.map +1 -0
  7. package/dist/agent/agent.prompts.d.ts +13 -0
  8. package/dist/agent/agent.prompts.d.ts.map +1 -0
  9. package/{src/agent/agent.prompts.ts → dist/agent/agent.prompts.js} +11 -12
  10. package/dist/agent/agent.prompts.js.map +1 -0
  11. package/dist/agent/agent.test-runner.d.ts +73 -0
  12. package/dist/agent/agent.test-runner.d.ts.map +1 -0
  13. package/dist/agent/agent.test-runner.js +316 -0
  14. package/dist/agent/agent.test-runner.js.map +1 -0
  15. package/dist/agent/agent.test-runner.schemas.d.ts +382 -0
  16. package/dist/agent/agent.test-runner.schemas.d.ts.map +1 -0
  17. package/dist/agent/agent.test-runner.schemas.js +110 -0
  18. package/dist/agent/agent.test-runner.schemas.js.map +1 -0
  19. package/dist/agent/agent.types.d.ts +122 -0
  20. package/dist/agent/agent.types.d.ts.map +1 -0
  21. package/dist/agent/agent.types.js +19 -0
  22. package/dist/agent/agent.types.js.map +1 -0
  23. package/dist/backend/backend.d.ts +16 -0
  24. package/dist/backend/backend.d.ts.map +1 -0
  25. package/dist/backend/backend.js +79 -0
  26. package/dist/backend/backend.js.map +1 -0
  27. package/dist/backend/backend.protocol.d.ts +74 -0
  28. package/dist/backend/backend.protocol.d.ts.map +1 -0
  29. package/dist/backend/backend.protocol.js +46 -0
  30. package/dist/backend/backend.protocol.js.map +1 -0
  31. package/dist/backend/backend.schemas.d.ts +141 -0
  32. package/dist/backend/backend.schemas.d.ts.map +1 -0
  33. package/dist/backend/backend.schemas.js +59 -0
  34. package/dist/backend/backend.schemas.js.map +1 -0
  35. package/dist/backend/backend.services.d.ts +290 -0
  36. package/dist/backend/backend.services.d.ts.map +1 -0
  37. package/dist/backend/backend.services.js +103 -0
  38. package/dist/backend/backend.services.js.map +1 -0
  39. package/dist/backend/backend.types.d.ts +25 -0
  40. package/dist/backend/backend.types.d.ts.map +1 -0
  41. package/dist/backend/backend.types.js +6 -0
  42. package/dist/backend/backend.types.js.map +1 -0
  43. package/dist/cli/cli.agent.d.ts +4 -0
  44. package/dist/cli/cli.agent.d.ts.map +1 -0
  45. package/dist/cli/cli.agent.js +158 -0
  46. package/dist/cli/cli.agent.js.map +1 -0
  47. package/dist/cli/cli.chat.d.ts +4 -0
  48. package/dist/cli/cli.chat.d.ts.map +1 -0
  49. package/dist/cli/cli.chat.js +311 -0
  50. package/dist/cli/cli.chat.js.map +1 -0
  51. package/dist/cli/cli.client.d.ts +11 -0
  52. package/dist/cli/cli.client.d.ts.map +1 -0
  53. package/dist/cli/cli.client.js +40 -0
  54. package/dist/cli/cli.client.js.map +1 -0
  55. package/dist/cli/cli.collections.d.ts +4 -0
  56. package/dist/cli/cli.collections.d.ts.map +1 -0
  57. package/dist/cli/cli.collections.js +411 -0
  58. package/dist/cli/cli.collections.js.map +1 -0
  59. package/dist/cli/cli.config.d.ts +4 -0
  60. package/dist/cli/cli.config.d.ts.map +1 -0
  61. package/dist/cli/cli.config.js +192 -0
  62. package/dist/cli/cli.config.js.map +1 -0
  63. package/dist/cli/cli.d.ts +4 -0
  64. package/dist/cli/cli.d.ts.map +1 -0
  65. package/dist/cli/cli.daemon.d.ts +4 -0
  66. package/dist/cli/cli.daemon.d.ts.map +1 -0
  67. package/dist/cli/cli.daemon.js +116 -0
  68. package/dist/cli/cli.daemon.js.map +1 -0
  69. package/dist/cli/cli.documents.d.ts +4 -0
  70. package/dist/cli/cli.documents.d.ts.map +1 -0
  71. package/dist/cli/cli.documents.js +332 -0
  72. package/dist/cli/cli.documents.js.map +1 -0
  73. package/dist/cli/cli.js +23 -0
  74. package/dist/cli/cli.js.map +1 -0
  75. package/dist/cli/cli.mcp.d.ts +4 -0
  76. package/dist/cli/cli.mcp.d.ts.map +1 -0
  77. package/dist/cli/cli.mcp.js +146 -0
  78. package/dist/cli/cli.mcp.js.map +1 -0
  79. package/dist/cli/cli.utils.d.ts +51 -0
  80. package/dist/cli/cli.utils.d.ts.map +1 -0
  81. package/dist/cli/cli.utils.js +95 -0
  82. package/dist/cli/cli.utils.js.map +1 -0
  83. package/dist/client/client.adapters.d.ts +38 -0
  84. package/dist/client/client.adapters.d.ts.map +1 -0
  85. package/dist/client/client.adapters.js +233 -0
  86. package/dist/client/client.adapters.js.map +1 -0
  87. package/dist/client/client.d.ts +16 -0
  88. package/dist/client/client.d.ts.map +1 -0
  89. package/dist/client/client.js +74 -0
  90. package/dist/client/client.js.map +1 -0
  91. package/dist/client/client.types.d.ts +10 -0
  92. package/dist/client/client.types.d.ts.map +1 -0
  93. package/dist/client/client.types.js +2 -0
  94. package/dist/client/client.types.js.map +1 -0
  95. package/dist/collections/collections.d.ts +219 -0
  96. package/dist/collections/collections.d.ts.map +1 -0
  97. package/dist/collections/collections.js +933 -0
  98. package/dist/collections/collections.js.map +1 -0
  99. package/dist/collections/collections.schemas.d.ts +298 -0
  100. package/dist/collections/collections.schemas.d.ts.map +1 -0
  101. package/dist/collections/collections.schemas.js +117 -0
  102. package/dist/collections/collections.schemas.js.map +1 -0
  103. package/dist/config/config.d.ts +29 -0
  104. package/dist/config/config.d.ts.map +1 -0
  105. package/dist/config/config.js +112 -0
  106. package/dist/config/config.js.map +1 -0
  107. package/dist/daemon/daemon.config.d.ts +6 -0
  108. package/dist/daemon/daemon.config.d.ts.map +1 -0
  109. package/dist/daemon/daemon.config.js +19 -0
  110. package/dist/daemon/daemon.config.js.map +1 -0
  111. package/dist/daemon/daemon.d.ts +10 -0
  112. package/dist/daemon/daemon.d.ts.map +1 -0
  113. package/dist/daemon/daemon.js +173 -0
  114. package/dist/daemon/daemon.js.map +1 -0
  115. package/dist/daemon/daemon.manager.d.ts +20 -0
  116. package/dist/daemon/daemon.manager.d.ts.map +1 -0
  117. package/dist/daemon/daemon.manager.js +176 -0
  118. package/dist/daemon/daemon.manager.js.map +1 -0
  119. package/dist/daemon/daemon.schemas.d.ts +38 -0
  120. package/dist/daemon/daemon.schemas.d.ts.map +1 -0
  121. package/dist/daemon/daemon.schemas.js +15 -0
  122. package/dist/daemon/daemon.schemas.js.map +1 -0
  123. package/dist/database/database.d.ts +10 -0
  124. package/dist/database/database.d.ts.map +1 -0
  125. package/dist/database/database.js +52 -0
  126. package/dist/database/database.js.map +1 -0
  127. package/dist/database/migrations/migrations.001-init.d.ts +9 -0
  128. package/dist/database/migrations/migrations.001-init.d.ts.map +1 -0
  129. package/dist/database/migrations/migrations.001-init.js +46 -0
  130. package/dist/database/migrations/migrations.001-init.js.map +1 -0
  131. package/dist/database/migrations/migrations.002-fts5.d.ts +11 -0
  132. package/dist/database/migrations/migrations.002-fts5.d.ts.map +1 -0
  133. package/dist/database/migrations/migrations.002-fts5.js +29 -0
  134. package/dist/database/migrations/migrations.002-fts5.js.map +1 -0
  135. package/dist/database/migrations/migrations.d.ts +11 -0
  136. package/dist/database/migrations/migrations.d.ts.map +1 -0
  137. package/dist/database/migrations/migrations.js +14 -0
  138. package/dist/database/migrations/migrations.js.map +1 -0
  139. package/dist/database/migrations/migrations.types.d.ts +8 -0
  140. package/dist/database/migrations/migrations.types.d.ts.map +1 -0
  141. package/dist/database/migrations/migrations.types.js +2 -0
  142. package/dist/database/migrations/migrations.types.js.map +1 -0
  143. package/dist/documents/documents.d.ts +58 -0
  144. package/dist/documents/documents.d.ts.map +1 -0
  145. package/dist/documents/documents.js +597 -0
  146. package/dist/documents/documents.js.map +1 -0
  147. package/dist/documents/documents.schemas.d.ts +418 -0
  148. package/dist/documents/documents.schemas.d.ts.map +1 -0
  149. package/dist/documents/documents.schemas.js +111 -0
  150. package/dist/documents/documents.schemas.js.map +1 -0
  151. package/dist/embedder/embedder.d.ts +22 -0
  152. package/dist/embedder/embedder.d.ts.map +1 -0
  153. package/dist/embedder/embedder.js +46 -0
  154. package/dist/embedder/embedder.js.map +1 -0
  155. package/dist/exports.d.ts +2 -0
  156. package/dist/exports.d.ts.map +1 -0
  157. package/dist/exports.js +2 -0
  158. package/dist/exports.js.map +1 -0
  159. package/dist/mcp/mcp.d.ts +44 -0
  160. package/dist/mcp/mcp.d.ts.map +1 -0
  161. package/dist/mcp/mcp.js +62 -0
  162. package/dist/mcp/mcp.js.map +1 -0
  163. package/dist/tools/agent/agent.d.ts +14 -0
  164. package/dist/tools/agent/agent.d.ts.map +1 -0
  165. package/dist/tools/agent/agent.js +31 -0
  166. package/dist/tools/agent/agent.js.map +1 -0
  167. package/dist/tools/documents/documents.d.ts +28 -0
  168. package/dist/tools/documents/documents.d.ts.map +1 -0
  169. package/dist/tools/documents/documents.js +336 -0
  170. package/dist/tools/documents/documents.js.map +1 -0
  171. package/dist/tools/tools.langchain.d.ts +11 -0
  172. package/dist/tools/tools.langchain.d.ts.map +1 -0
  173. package/dist/tools/tools.langchain.js +30 -0
  174. package/dist/tools/tools.langchain.js.map +1 -0
  175. package/dist/tools/tools.mcp.d.ts +12 -0
  176. package/dist/tools/tools.mcp.d.ts.map +1 -0
  177. package/dist/tools/tools.mcp.js +38 -0
  178. package/dist/tools/tools.mcp.js.map +1 -0
  179. package/{src/tools/tools.types.ts → dist/tools/tools.types.d.ts} +10 -16
  180. package/dist/tools/tools.types.d.ts.map +1 -0
  181. package/dist/tools/tools.types.js +7 -0
  182. package/dist/tools/tools.types.js.map +1 -0
  183. package/dist/tsconfig.tsbuildinfo +1 -0
  184. package/dist/utils/utils.services.d.ts +14 -0
  185. package/dist/utils/utils.services.d.ts.map +1 -0
  186. package/dist/utils/utils.services.js +33 -0
  187. package/dist/utils/utils.services.js.map +1 -0
  188. package/package.json +2 -2
  189. package/src/agent/AGENTS.md +0 -249
  190. package/src/agent/agent.test-runner.schemas.ts +0 -158
  191. package/src/agent/agent.test-runner.ts +0 -436
  192. package/src/agent/agent.ts +0 -371
  193. package/src/agent/agent.types.ts +0 -94
  194. package/src/backend/AGENTS.md +0 -112
  195. package/src/backend/backend.protocol.ts +0 -95
  196. package/src/backend/backend.schemas.ts +0 -123
  197. package/src/backend/backend.services.ts +0 -151
  198. package/src/backend/backend.ts +0 -111
  199. package/src/backend/backend.types.ts +0 -34
  200. package/src/cli/AGENTS.md +0 -213
  201. package/src/cli/cli.agent.ts +0 -197
  202. package/src/cli/cli.chat.ts +0 -369
  203. package/src/cli/cli.client.ts +0 -55
  204. package/src/cli/cli.collections.ts +0 -491
  205. package/src/cli/cli.config.ts +0 -252
  206. package/src/cli/cli.daemon.ts +0 -160
  207. package/src/cli/cli.documents.ts +0 -413
  208. package/src/cli/cli.mcp.ts +0 -177
  209. package/src/cli/cli.ts +0 -28
  210. package/src/cli/cli.utils.ts +0 -122
  211. package/src/client/AGENTS.md +0 -135
  212. package/src/client/client.adapters.ts +0 -279
  213. package/src/client/client.ts +0 -86
  214. package/src/client/client.types.ts +0 -17
  215. package/src/collections/AGENTS.md +0 -185
  216. package/src/collections/collections.schemas.ts +0 -195
  217. package/src/collections/collections.ts +0 -1160
  218. package/src/config/config.ts +0 -118
  219. package/src/daemon/AGENTS.md +0 -168
  220. package/src/daemon/daemon.config.ts +0 -23
  221. package/src/daemon/daemon.manager.ts +0 -215
  222. package/src/daemon/daemon.schemas.ts +0 -22
  223. package/src/daemon/daemon.ts +0 -205
  224. package/src/database/AGENTS.md +0 -211
  225. package/src/database/database.ts +0 -64
  226. package/src/database/migrations/migrations.001-init.ts +0 -56
  227. package/src/database/migrations/migrations.002-fts5.ts +0 -32
  228. package/src/database/migrations/migrations.ts +0 -20
  229. package/src/database/migrations/migrations.types.ts +0 -9
  230. package/src/documents/AGENTS.md +0 -301
  231. package/src/documents/documents.schemas.ts +0 -190
  232. package/src/documents/documents.ts +0 -734
  233. package/src/embedder/embedder.ts +0 -53
  234. package/src/exports.ts +0 -0
  235. package/src/mcp/AGENTS.md +0 -264
  236. package/src/mcp/mcp.ts +0 -105
  237. package/src/tools/AGENTS.md +0 -228
  238. package/src/tools/agent/agent.ts +0 -45
  239. package/src/tools/documents/documents.ts +0 -401
  240. package/src/tools/tools.langchain.ts +0 -37
  241. package/src/tools/tools.mcp.ts +0 -46
  242. package/src/utils/utils.services.ts +0 -46
@@ -0,0 +1,411 @@
1
+ import { existsSync, writeFileSync } from 'node:fs';
2
+ import { resolve, basename } from 'node:path';
3
+ import { formatHeader, formatSuccess, formatError, formatInfo, formatWarning, formatTableHeader, formatTableRow, withErrorHandling, chalk, } from './cli.utils.js';
4
+ import { createCliClient } from './cli.client.js';
5
+ import { Services } from '#root/utils/utils.services.js';
6
+ import { CollectionsService } from '#root/collections/collections.js';
7
+ import { config } from '#root/config/config.js';
8
+ const createCollectionsCli = (command) => {
9
+ command.description('Manage collection packages for AI context');
10
+ // collections init
11
+ command
12
+ .command('init')
13
+ .description('Create a new project config file')
14
+ .option('-f, --force', 'Overwrite existing file')
15
+ .action(withErrorHandling(async (options) => {
16
+ const services = new Services();
17
+ try {
18
+ const collectionsService = services.get(CollectionsService);
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ const configFile = config.get('project.configFile');
21
+ if (collectionsService.projectConfigExists() && !options.force) {
22
+ formatError(`${configFile} already exists. Use --force to overwrite.`);
23
+ return;
24
+ }
25
+ collectionsService.initProjectConfig(process.cwd(), options.force);
26
+ formatSuccess(`Created ${configFile}`);
27
+ }
28
+ finally {
29
+ await services.destroy();
30
+ }
31
+ }));
32
+ // collections add
33
+ command
34
+ .command('add')
35
+ .argument('<name>', 'Name/alias for the collection')
36
+ .argument('<url>', 'Manifest or bundle URL (supports https://, file://, git+https://, git+ssh://, or relative paths)')
37
+ .description('Add a collection to project or global config')
38
+ .option('-g, --global', 'Add to global config instead of project config')
39
+ .action(withErrorHandling(async (name, url, options) => {
40
+ const services = new Services();
41
+ try {
42
+ const collectionsService = services.get(CollectionsService);
43
+ if (!options.global && !collectionsService.projectConfigExists()) {
44
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
+ const configFile = config.get('project.configFile');
46
+ formatError(`No ${configFile} found. Run 'collections init' first, or use -g for global.`);
47
+ return;
48
+ }
49
+ // Normalize local paths to file:// URLs (but not git URLs)
50
+ let normalizedUrl = url;
51
+ if (!url.startsWith('http://') &&
52
+ !url.startsWith('https://') &&
53
+ !url.startsWith('file://') &&
54
+ !url.startsWith('git+')) {
55
+ normalizedUrl = `file://${url}`;
56
+ }
57
+ const spec = { url: normalizedUrl };
58
+ collectionsService.addToConfig(name, spec, { global: options.global });
59
+ const scope = options.global ? 'global config' : 'project config';
60
+ formatSuccess(`Added collection "${name}" to ${scope} (${normalizedUrl})`);
61
+ }
62
+ finally {
63
+ await services.destroy();
64
+ }
65
+ }));
66
+ // collections remove
67
+ command
68
+ .command('remove')
69
+ .argument('<name>', 'Name of the collection to remove')
70
+ .description('Remove a collection from project or global config')
71
+ .option('-g, --global', 'Remove from global config instead of project config')
72
+ .option('--drop', 'Also drop indexed data from database')
73
+ .action(withErrorHandling(async (name, options) => {
74
+ const services = new Services();
75
+ const client = options.drop ? await createCliClient() : null;
76
+ try {
77
+ const collectionsService = services.get(CollectionsService);
78
+ if (options.global) {
79
+ if (!collectionsService.globalConfigExists()) {
80
+ formatError('No global config found.');
81
+ return;
82
+ }
83
+ }
84
+ else {
85
+ if (!collectionsService.projectConfigExists()) {
86
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
87
+ const configFile = config.get('project.configFile');
88
+ formatError(`No ${configFile} found.`);
89
+ return;
90
+ }
91
+ }
92
+ const spec = collectionsService.getFromConfig(name, { global: options.global });
93
+ if (!spec) {
94
+ const scope = options.global ? 'global config' : 'project config';
95
+ formatError(`Collection "${name}" not found in ${scope}.`);
96
+ return;
97
+ }
98
+ if (options.drop && client) {
99
+ const collectionId = collectionsService.computeCollectionId(spec);
100
+ await client.documents.dropCollection({ collection: collectionId });
101
+ await client.collections.delete({ id: collectionId });
102
+ formatInfo(`Dropped indexed data for "${name}"`);
103
+ }
104
+ collectionsService.removeFromConfig(name, { global: options.global });
105
+ const scope = options.global ? 'global config' : 'project config';
106
+ formatSuccess(`Removed "${name}" from ${scope}`);
107
+ }
108
+ finally {
109
+ if (client) {
110
+ await client.disconnect();
111
+ }
112
+ await services.destroy();
113
+ }
114
+ }));
115
+ // collections list
116
+ command
117
+ .command('list')
118
+ .alias('ls')
119
+ .description('List configured collections and their status')
120
+ .option('-g, --global', 'Show only global collections')
121
+ .option('--no-global', 'Show only local collections')
122
+ .action(withErrorHandling(async (options) => {
123
+ const services = new Services();
124
+ const client = await createCliClient();
125
+ try {
126
+ const collectionsService = services.get(CollectionsService);
127
+ // Determine which collections to show
128
+ let entries = [];
129
+ if (options.global === true) {
130
+ // Show only global
131
+ if (!collectionsService.globalConfigExists()) {
132
+ formatInfo('No global collections configured. Use "collections add -g" to add one.');
133
+ return;
134
+ }
135
+ const globalConfig = collectionsService.readGlobalConfig();
136
+ entries = Object.entries(globalConfig.collections).map(([name, spec]) => [name, spec, 'global']);
137
+ }
138
+ else if (options.global === false) {
139
+ // Show only local
140
+ if (!collectionsService.projectConfigExists()) {
141
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
142
+ const configFile = config.get('project.configFile');
143
+ formatInfo(`No ${configFile} found. Run 'collections init' first.`);
144
+ return;
145
+ }
146
+ const projectConfig = collectionsService.readProjectConfig();
147
+ entries = Object.entries(projectConfig.collections).map(([name, spec]) => [name, spec, 'local']);
148
+ }
149
+ else {
150
+ // Show both (default)
151
+ const allCollections = collectionsService.getAllCollections();
152
+ entries = Array.from(allCollections.entries()).map(([name, { spec, source }]) => [name, spec, source]);
153
+ }
154
+ if (entries.length === 0) {
155
+ formatInfo('No collections configured. Use "collections add" to add one.');
156
+ return;
157
+ }
158
+ formatHeader('Collections');
159
+ const maxNameLen = Math.max(...entries.map(([name]) => name.length), 10);
160
+ const urlLengths = entries.map(([, spec]) => spec.url.length);
161
+ const maxUrlLen = Math.min(Math.max(...urlLengths, 20), 45);
162
+ const showSource = options.global === undefined; // Show source column when showing both
163
+ const columns = [
164
+ { name: 'Name', width: maxNameLen },
165
+ { name: 'URL', width: maxUrlLen },
166
+ ...(showSource ? [{ name: 'Source', width: 8 }] : []),
167
+ { name: 'Status', width: 14 },
168
+ ];
169
+ formatTableHeader(columns);
170
+ for (const [name, spec, source] of entries) {
171
+ const status = await client.collections.getSyncStatus({ spec });
172
+ const statusText = status === 'synced' ? chalk.green('✓ synced') : chalk.yellow('⚠ not synced');
173
+ let url = spec.url;
174
+ if (url.length > maxUrlLen) {
175
+ url = url.substring(0, maxUrlLen - 3) + '...';
176
+ }
177
+ const sourceColor = source === 'local' ? chalk.blue : chalk.magenta;
178
+ const row = [
179
+ { value: name, width: maxNameLen, color: chalk.cyan },
180
+ { value: url, width: maxUrlLen, color: chalk.white },
181
+ ...(showSource ? [{ value: source, width: 8, color: sourceColor }] : []),
182
+ { value: statusText, width: 14 },
183
+ ];
184
+ formatTableRow(row);
185
+ }
186
+ console.log();
187
+ }
188
+ finally {
189
+ await client.disconnect();
190
+ await services.destroy();
191
+ }
192
+ }));
193
+ // collections sync
194
+ command
195
+ .command('sync')
196
+ .argument('[name]', 'Name of specific collection to sync (omit for all)')
197
+ .description('Sync collection(s) from config')
198
+ .option('-g, --global', 'Sync only global collections')
199
+ .option('--no-global', 'Sync only local collections')
200
+ .option('-f, --force', 'Re-index all documents (ignore hash cache)')
201
+ .option('--dry-run', 'Show what would happen without making changes')
202
+ .action(withErrorHandling(async (name, options) => {
203
+ const services = new Services();
204
+ try {
205
+ const collectionsService = services.get(CollectionsService);
206
+ // Build list of collections to sync based on options
207
+ let toSync = [];
208
+ if (name) {
209
+ // Syncing a specific collection by name
210
+ if (options.global === true) {
211
+ // Explicitly global
212
+ const spec = collectionsService.getFromConfig(name, { global: true });
213
+ if (!spec) {
214
+ formatError(`Collection "${name}" not found in global config.`);
215
+ return;
216
+ }
217
+ toSync = [[name, spec, 'global']];
218
+ }
219
+ else if (options.global === false) {
220
+ // Explicitly local
221
+ const spec = collectionsService.getFromConfig(name, { global: false });
222
+ if (!spec) {
223
+ formatError(`Collection "${name}" not found in project config.`);
224
+ return;
225
+ }
226
+ toSync = [[name, spec, 'local']];
227
+ }
228
+ else {
229
+ // Search local first, then global
230
+ const localSpec = collectionsService.getFromConfig(name, { global: false });
231
+ if (localSpec) {
232
+ toSync = [[name, localSpec, 'local']];
233
+ }
234
+ else {
235
+ const globalSpec = collectionsService.getFromConfig(name, { global: true });
236
+ if (globalSpec) {
237
+ toSync = [[name, globalSpec, 'global']];
238
+ }
239
+ else {
240
+ formatError(`Collection "${name}" not found in project or global config.`);
241
+ return;
242
+ }
243
+ }
244
+ }
245
+ }
246
+ else {
247
+ // Syncing all collections
248
+ if (options.global === true) {
249
+ // Only global
250
+ if (!collectionsService.globalConfigExists()) {
251
+ formatInfo('No global collections configured. Use "collections add -g" to add one.');
252
+ return;
253
+ }
254
+ const globalConfig = collectionsService.readGlobalConfig();
255
+ toSync = Object.entries(globalConfig.collections).map(([n, spec]) => [n, spec, 'global']);
256
+ }
257
+ else if (options.global === false) {
258
+ // Only local
259
+ if (!collectionsService.projectConfigExists()) {
260
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
261
+ const configFile = config.get('project.configFile');
262
+ formatError(`No ${configFile} found. Run 'collections init' first.`);
263
+ return;
264
+ }
265
+ const projectConfig = collectionsService.readProjectConfig();
266
+ toSync = Object.entries(projectConfig.collections).map(([n, spec]) => [n, spec, 'local']);
267
+ }
268
+ else {
269
+ // Both local and global (default)
270
+ const allCollections = collectionsService.getAllCollections();
271
+ toSync = Array.from(allCollections.entries()).map(([n, { spec, source }]) => [n, spec, source]);
272
+ }
273
+ }
274
+ if (toSync.length === 0) {
275
+ formatInfo('No collections configured. Use "collections add" to add one.');
276
+ return;
277
+ }
278
+ // Handle dry-run mode separately
279
+ if (options.dryRun) {
280
+ formatWarning('Dry run mode - no changes will be made');
281
+ console.log();
282
+ for (const [collectionName, , source] of toSync) {
283
+ console.log(chalk.bold(`Syncing ${collectionName}`) + chalk.dim(` (${source})...`));
284
+ formatInfo(' Would sync this collection');
285
+ console.log();
286
+ }
287
+ console.log(chalk.green.bold('All collections synced.'));
288
+ return;
289
+ }
290
+ // Actually sync collections
291
+ const client = await createCliClient();
292
+ try {
293
+ for (const [collectionName, spec, source] of toSync) {
294
+ console.log(chalk.bold(`Syncing ${collectionName}`) + chalk.dim(` (${source})...`));
295
+ const result = await client.collections.sync({
296
+ name: collectionName,
297
+ spec,
298
+ cwd: process.cwd(),
299
+ force: options.force,
300
+ });
301
+ printSyncResult(collectionName, result);
302
+ }
303
+ }
304
+ finally {
305
+ await client.disconnect();
306
+ }
307
+ console.log(chalk.green.bold('All collections synced.'));
308
+ }
309
+ finally {
310
+ await services.destroy();
311
+ }
312
+ }));
313
+ // collections manifest (subcommand group)
314
+ const manifestCmd = command.command('manifest').description('Manifest management commands');
315
+ // collections manifest init
316
+ manifestCmd
317
+ .command('init')
318
+ .description('Create a manifest.json for publishing')
319
+ .option('-n, --name <name>', 'Package name')
320
+ .option('-v, --version <version>', 'Package version', '1.0.0')
321
+ .action(withErrorHandling(async (options) => {
322
+ const manifestPath = resolve(process.cwd(), 'manifest.json');
323
+ if (existsSync(manifestPath)) {
324
+ formatError('manifest.json already exists');
325
+ return;
326
+ }
327
+ const manifest = {
328
+ name: options.name || basename(process.cwd()),
329
+ version: options.version || '1.0.0',
330
+ description: '',
331
+ sources: {
332
+ glob: ['**/*.md'],
333
+ },
334
+ };
335
+ writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
336
+ formatSuccess('Created manifest.json');
337
+ }));
338
+ // collections pack
339
+ command
340
+ .command('pack')
341
+ .description('Create a distributable bundle from a manifest')
342
+ .option('-m, --manifest <path>', 'Path to manifest file', 'manifest.json')
343
+ .option('-o, --output <path>', 'Output path for bundle')
344
+ .action(withErrorHandling(async (options) => {
345
+ const { createHash } = await import('node:crypto');
346
+ const { readFile, glob } = await import('node:fs/promises');
347
+ const tar = await import('tar');
348
+ const manifestPath = resolve(process.cwd(), options.manifest);
349
+ if (!existsSync(manifestPath)) {
350
+ formatError(`Manifest not found: ${manifestPath}`);
351
+ return;
352
+ }
353
+ const manifestContent = await readFile(manifestPath, 'utf8');
354
+ const manifest = JSON.parse(manifestContent);
355
+ formatHeader('Creating Bundle');
356
+ formatInfo(`Name: ${chalk.cyan(manifest.name)}`);
357
+ formatInfo(`Version: ${chalk.cyan(manifest.version)}`);
358
+ console.log();
359
+ const manifestDir = manifestPath.substring(0, manifestPath.lastIndexOf('/'));
360
+ // Collect files to include
361
+ const filesToInclude = ['manifest.json'];
362
+ if ('glob' in manifest.sources) {
363
+ for (const pattern of manifest.sources.glob) {
364
+ for await (const file of glob(pattern, { cwd: manifestDir || process.cwd() })) {
365
+ filesToInclude.push(file);
366
+ }
367
+ }
368
+ }
369
+ else if ('files' in manifest.sources) {
370
+ for (const entry of manifest.sources.files) {
371
+ const path = typeof entry === 'string' ? entry : entry.path;
372
+ if (path) {
373
+ filesToInclude.push(path);
374
+ }
375
+ }
376
+ }
377
+ formatInfo(`Including ${filesToInclude.length} files`);
378
+ // Create bundle
379
+ const outputPath = options.output || `${manifest.name}-${manifest.version}.tar.gz`;
380
+ const fullOutputPath = resolve(process.cwd(), outputPath);
381
+ await tar.create({
382
+ gzip: true,
383
+ file: fullOutputPath,
384
+ cwd: manifestDir || process.cwd(),
385
+ }, filesToInclude);
386
+ // Calculate hash
387
+ const bundleContent = await readFile(fullOutputPath);
388
+ const hash = createHash('sha256').update(bundleContent).digest('hex');
389
+ console.log();
390
+ formatSuccess(`Created ${outputPath}`);
391
+ formatInfo(`SHA256: ${chalk.dim(hash)}`);
392
+ }));
393
+ };
394
+ const printSyncResult = (name, result) => {
395
+ const parts = [];
396
+ if (result.added > 0)
397
+ parts.push(chalk.green(`${result.added} added`));
398
+ if (result.updated > 0)
399
+ parts.push(chalk.yellow(`${result.updated} updated`));
400
+ if (result.removed > 0)
401
+ parts.push(chalk.red(`${result.removed} removed`));
402
+ if (parts.length === 0) {
403
+ console.log(chalk.green(` ✓ ${result.total} documents (no changes)`));
404
+ }
405
+ else {
406
+ console.log(chalk.green(` ✓ ${result.total} documents (${parts.join(', ')})`));
407
+ }
408
+ console.log();
409
+ };
410
+ export { createCollectionsCli };
411
+ //# sourceMappingURL=cli.collections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.collections.js","sourceRoot":"","sources":["../../src/cli/cli.collections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from 'commander';
2
+ declare const createConfigCli: (command: Command) => void;
3
+ export { createConfigCli };
4
+ //# sourceMappingURL=cli.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.config.d.ts","sourceRoot":"","sources":["../../src/cli/cli.config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2DzC,QAAA,MAAM,eAAe,GAAI,SAAS,OAAO,SA8LxC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,192 @@
1
+ import { input, confirm, select } from '@inquirer/prompts';
2
+ import { formatHeader, formatSuccess, formatInfo, formatWarning, formatTableHeader, formatTableRow, flattenObject, withErrorHandling, chalk, } from './cli.utils.js';
3
+ import { config, configPath, saveConfig } from '#root/config/config.js';
4
+ /**
5
+ * Parse a string value to the appropriate type
6
+ */
7
+ const parseValue = (key, value) => {
8
+ if (value === 'true')
9
+ return true;
10
+ if (value === 'false')
11
+ return false;
12
+ // Don't convert API keys to numbers
13
+ if (!key.toLowerCase().includes('key') && !isNaN(Number(value)) && value.trim() !== '') {
14
+ return Number(value);
15
+ }
16
+ return value;
17
+ };
18
+ /**
19
+ * Get the raw value from config, handling sensitive values
20
+ */
21
+ const getRawValue = (key) => {
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
+ const value = config.get(key);
24
+ if (value === '[Sensitive]') {
25
+ // Try to get the raw value for display
26
+ const parts = key.split('.');
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ let current = config._properties;
29
+ for (const part of parts) {
30
+ if (current && typeof current === 'object' && part in current) {
31
+ current = current[part];
32
+ }
33
+ else {
34
+ return value;
35
+ }
36
+ }
37
+ return current;
38
+ }
39
+ return value;
40
+ };
41
+ const createConfigCli = (command) => {
42
+ command.description('Manage configuration settings');
43
+ // Set a configuration value
44
+ command
45
+ .command('set')
46
+ .argument('<key>', 'Configuration key (e.g., "openai.apiKey")')
47
+ .argument('<value>', 'Value to set')
48
+ .description('Set a configuration value')
49
+ .action(withErrorHandling(async (key, value) => {
50
+ const parsedValue = parseValue(key, value);
51
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
52
+ config.set(key, parsedValue);
53
+ saveConfig();
54
+ formatSuccess(`Configuration updated`);
55
+ console.log(chalk.dim(' Key: ') + chalk.cyan(key));
56
+ console.log(chalk.dim(' Value: ') + chalk.yellow(String(parsedValue)));
57
+ }));
58
+ // Get a configuration value
59
+ command
60
+ .command('get')
61
+ .argument('<key>', 'Configuration key to retrieve')
62
+ .description('Get a configuration value')
63
+ .action(withErrorHandling(async (key) => {
64
+ const value = getRawValue(key);
65
+ if (value === undefined) {
66
+ formatWarning(`Key "${key}" is not set`);
67
+ return;
68
+ }
69
+ console.log(chalk.cyan(String(value)));
70
+ }));
71
+ // Show config file path
72
+ command
73
+ .command('path')
74
+ .description('Show configuration file path')
75
+ .action(() => {
76
+ formatInfo(`Configuration file: ${chalk.cyan(configPath)}`);
77
+ });
78
+ // List all configuration values
79
+ command
80
+ .command('list')
81
+ .alias('ls')
82
+ .description('List all configuration values')
83
+ .option('-a, --all', 'Show all values including sensitive ones')
84
+ .action(withErrorHandling(async (options) => {
85
+ const props = config.getProperties();
86
+ const flat = flattenObject(props);
87
+ const keys = Object.keys(flat).sort();
88
+ if (keys.length === 0) {
89
+ formatInfo('No configuration values set.');
90
+ return;
91
+ }
92
+ formatHeader('Configuration');
93
+ const maxKeyLen = Math.max(...keys.map((k) => k.length), 3);
94
+ formatTableHeader([
95
+ { name: 'Key', width: maxKeyLen },
96
+ { name: 'Value', width: 40 },
97
+ ]);
98
+ for (const key of keys) {
99
+ let value = flat[key];
100
+ let valueColor = chalk.white;
101
+ // Handle sensitive values
102
+ if (value === '[Sensitive]') {
103
+ if (options.all) {
104
+ value = getRawValue(key);
105
+ valueColor = chalk.yellow;
106
+ }
107
+ else {
108
+ valueColor = chalk.dim;
109
+ }
110
+ }
111
+ formatTableRow([
112
+ { value: key, width: maxKeyLen, color: chalk.white },
113
+ { value: String(value), width: 40, color: valueColor },
114
+ ]);
115
+ }
116
+ console.log();
117
+ if (!options.all) {
118
+ formatInfo('Use --all to show sensitive values');
119
+ }
120
+ }));
121
+ // Interactive set command
122
+ command
123
+ .command('edit')
124
+ .argument('[key]', 'Configuration key to edit')
125
+ .description('Interactively edit a configuration value')
126
+ .action(withErrorHandling(async (key) => {
127
+ const props = config.getProperties();
128
+ const flat = flattenObject(props);
129
+ const keys = Object.keys(flat).sort();
130
+ let selectedKey = key;
131
+ if (!selectedKey) {
132
+ selectedKey = await select({
133
+ message: 'Select a configuration key to edit:',
134
+ choices: keys.map((k) => ({
135
+ name: `${k} = ${flat[k]}`,
136
+ value: k,
137
+ })),
138
+ });
139
+ }
140
+ if (!keys.includes(selectedKey)) {
141
+ const createNew = await confirm({
142
+ message: `Key "${selectedKey}" doesn't exist. Create it?`,
143
+ default: false,
144
+ });
145
+ if (!createNew) {
146
+ formatInfo('Operation cancelled.');
147
+ return;
148
+ }
149
+ }
150
+ const currentValue = flat[selectedKey];
151
+ const newValue = await input({
152
+ message: `Enter new value for "${selectedKey}":`,
153
+ default: currentValue !== '[Sensitive]' ? String(currentValue ?? '') : '',
154
+ });
155
+ const parsedValue = parseValue(selectedKey, newValue);
156
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
157
+ config.set(selectedKey, parsedValue);
158
+ saveConfig();
159
+ formatSuccess(`Configuration updated`);
160
+ console.log(chalk.dim(' Key: ') + chalk.cyan(selectedKey));
161
+ console.log(chalk.dim(' Value: ') + chalk.yellow(String(parsedValue)));
162
+ }));
163
+ // Reset/delete a configuration value
164
+ command
165
+ .command('reset')
166
+ .argument('<key>', 'Configuration key to reset')
167
+ .description('Reset a configuration value to its default')
168
+ .option('-f, --force', 'Skip confirmation prompt')
169
+ .action(withErrorHandling(async (key, options) => {
170
+ const currentValue = getRawValue(key);
171
+ if (currentValue === undefined) {
172
+ formatWarning(`Key "${key}" is not set`);
173
+ return;
174
+ }
175
+ if (!options.force) {
176
+ const confirmed = await confirm({
177
+ message: chalk.yellow(`Reset "${key}" to default value?`),
178
+ default: false,
179
+ });
180
+ if (!confirmed) {
181
+ formatInfo('Operation cancelled.');
182
+ return;
183
+ }
184
+ }
185
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
186
+ config.reset(key);
187
+ saveConfig();
188
+ formatSuccess(`Configuration key "${key}" reset to default`);
189
+ }));
190
+ };
191
+ export { createConfigCli };
192
+ //# sourceMappingURL=cli.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.config.js","sourceRoot":"","sources":["../../src/cli/cli.config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ declare const createProgram: () => Command;
3
+ export { createProgram };
4
+ //# sourceMappingURL=cli.d.ts.map