@paparats/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 (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +33 -0
  3. package/bin/paparats +2 -0
  4. package/dist/abort.d.ts +6 -0
  5. package/dist/abort.d.ts.map +1 -0
  6. package/dist/abort.js +13 -0
  7. package/dist/abort.js.map +1 -0
  8. package/dist/api-client.d.ts +69 -0
  9. package/dist/api-client.d.ts.map +1 -0
  10. package/dist/api-client.js +188 -0
  11. package/dist/api-client.js.map +1 -0
  12. package/dist/commands/doctor.d.ts +10 -0
  13. package/dist/commands/doctor.d.ts.map +1 -0
  14. package/dist/commands/doctor.js +239 -0
  15. package/dist/commands/doctor.js.map +1 -0
  16. package/dist/commands/groups.d.ts +47 -0
  17. package/dist/commands/groups.d.ts.map +1 -0
  18. package/dist/commands/groups.js +197 -0
  19. package/dist/commands/groups.js.map +1 -0
  20. package/dist/commands/index-cmd.d.ts +75 -0
  21. package/dist/commands/index-cmd.d.ts.map +1 -0
  22. package/dist/commands/index-cmd.js +240 -0
  23. package/dist/commands/index-cmd.js.map +1 -0
  24. package/dist/commands/init.d.ts +28 -0
  25. package/dist/commands/init.d.ts.map +1 -0
  26. package/dist/commands/init.js +437 -0
  27. package/dist/commands/init.js.map +1 -0
  28. package/dist/commands/install.d.ts +41 -0
  29. package/dist/commands/install.d.ts.map +1 -0
  30. package/dist/commands/install.js +324 -0
  31. package/dist/commands/install.js.map +1 -0
  32. package/dist/commands/search.d.ts +53 -0
  33. package/dist/commands/search.d.ts.map +1 -0
  34. package/dist/commands/search.js +216 -0
  35. package/dist/commands/search.js.map +1 -0
  36. package/dist/commands/status.d.ts +69 -0
  37. package/dist/commands/status.d.ts.map +1 -0
  38. package/dist/commands/status.js +309 -0
  39. package/dist/commands/status.js.map +1 -0
  40. package/dist/commands/update.d.ts +18 -0
  41. package/dist/commands/update.d.ts.map +1 -0
  42. package/dist/commands/update.js +95 -0
  43. package/dist/commands/update.js.map +1 -0
  44. package/dist/commands/watch.d.ts +31 -0
  45. package/dist/commands/watch.d.ts.map +1 -0
  46. package/dist/commands/watch.js +339 -0
  47. package/dist/commands/watch.js.map +1 -0
  48. package/dist/config.d.ts +46 -0
  49. package/dist/config.d.ts.map +1 -0
  50. package/dist/config.js +308 -0
  51. package/dist/config.js.map +1 -0
  52. package/dist/index.d.ts +2 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +23 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/lsp-installers.d.ts +28 -0
  57. package/dist/lsp-installers.d.ts.map +1 -0
  58. package/dist/lsp-installers.js +125 -0
  59. package/dist/lsp-installers.js.map +1 -0
  60. package/package.json +81 -0
@@ -0,0 +1,69 @@
1
+ import { Command } from 'commander';
2
+ export interface StatusOptions {
3
+ server?: string;
4
+ timeout?: number;
5
+ json?: boolean;
6
+ verbose?: boolean;
7
+ }
8
+ export interface HealthResponseData {
9
+ status: string;
10
+ groups: Record<string, number>;
11
+ uptime: number;
12
+ memory: {
13
+ heapUsed: string;
14
+ percent: number;
15
+ };
16
+ }
17
+ export declare function validateHealthResponse(data: unknown): data is HealthResponseData;
18
+ export interface StatusDeps {
19
+ dockerStatus?: () => {
20
+ qdrant: string;
21
+ mcp: string;
22
+ };
23
+ ollamaStatus?: (modelName: string) => string;
24
+ findConfigDir?: (startDir?: string) => string | null;
25
+ readConfig?: (dir?: string) => {
26
+ config: {
27
+ group: string;
28
+ language: string | string[];
29
+ embeddings?: {
30
+ model?: string;
31
+ };
32
+ };
33
+ };
34
+ healthCheck?: (url: string, timeout: number) => Promise<{
35
+ status: number;
36
+ data: unknown;
37
+ }>;
38
+ }
39
+ export declare function dockerStatus(): {
40
+ qdrant: string;
41
+ mcp: string;
42
+ };
43
+ export declare function ollamaStatus(modelName?: string): string;
44
+ export interface StatusResult {
45
+ docker: {
46
+ qdrant: string;
47
+ mcp: string;
48
+ };
49
+ ollama: string;
50
+ config: {
51
+ found: boolean;
52
+ group?: string;
53
+ language?: string;
54
+ error?: string;
55
+ };
56
+ server: {
57
+ ok: boolean;
58
+ status?: string;
59
+ uptime?: number;
60
+ memory?: string;
61
+ percent?: number;
62
+ groups?: Record<string, number>;
63
+ error?: string;
64
+ };
65
+ timestamp: string;
66
+ }
67
+ export declare function runStatus(opts: StatusOptions, deps?: StatusDeps): Promise<StatusResult>;
68
+ export declare const statusCommand: Command;
69
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,kBAAkB,CAahF;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,EAAE,MAAM;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACrD,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK;QAC7B,MAAM,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;YAAC,UAAU,CAAC,EAAE;gBAAE,KAAK,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC;KACzF,CAAC;IACF,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC5F;AAED,wBAAgB,YAAY,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAqB9D;AAED,wBAAgB,YAAY,CAAC,SAAS,SAAyB,GAAG,MAAM,CAYvE;AAgBD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QACN,KAAK,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,MAAM,EAAE;QACN,EAAE,EAAE,OAAO,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAqG7F;AAyGD,eAAO,MAAM,aAAa,SAqCtB,CAAC"}
@@ -0,0 +1,309 @@
1
+ import { Command } from 'commander';
2
+ import { execSync } from 'child_process';
3
+ import chalk from 'chalk';
4
+ import { findConfigDir, readConfig, CONFIG_FILE } from '../config.js';
5
+ import { ApiClient } from '../api-client.js';
6
+ export function validateHealthResponse(data) {
7
+ if (!data || typeof data !== 'object')
8
+ return false;
9
+ const d = data;
10
+ return (typeof d.status === 'string' &&
11
+ typeof d.groups === 'object' &&
12
+ d.groups !== null &&
13
+ typeof d.uptime === 'number' &&
14
+ typeof d.memory === 'object' &&
15
+ d.memory !== null);
16
+ }
17
+ export function dockerStatus() {
18
+ const result = { qdrant: 'not running', mcp: 'not running' };
19
+ try {
20
+ const output = execSync('docker ps --format "{{.Names}}|{{.Status}}"', {
21
+ encoding: 'utf8',
22
+ timeout: 5_000,
23
+ stdio: ['pipe', 'pipe', 'pipe'],
24
+ });
25
+ for (const line of output.split('\n')) {
26
+ const [name, status] = line.split('|');
27
+ if (name && name.includes('qdrant')) {
28
+ result.qdrant = status?.trim() || 'running';
29
+ }
30
+ if (name && name.includes('mcp')) {
31
+ result.mcp = status?.trim() || 'running';
32
+ }
33
+ }
34
+ }
35
+ catch {
36
+ // Docker not available or error
37
+ }
38
+ return result;
39
+ }
40
+ export function ollamaStatus(modelName = 'jina-code-embeddings') {
41
+ try {
42
+ const output = execSync('ollama list', {
43
+ encoding: 'utf8',
44
+ timeout: 5_000,
45
+ stdio: ['pipe', 'pipe', 'pipe'],
46
+ });
47
+ if (output.includes(modelName))
48
+ return 'model ready';
49
+ return 'running (model not found)';
50
+ }
51
+ catch {
52
+ return 'not running';
53
+ }
54
+ }
55
+ function formatUptime(seconds) {
56
+ const h = Math.floor(seconds / 3600);
57
+ const m = Math.floor((seconds % 3600) / 60);
58
+ if (h > 0)
59
+ return `${h}h ${m}m`;
60
+ if (m > 0)
61
+ return `${m}m`;
62
+ return `${Math.round(seconds)}s`;
63
+ }
64
+ function formatMemory(heapUsed) {
65
+ const memoryMB = parseInt(heapUsed, 10);
66
+ if (Number.isNaN(memoryMB))
67
+ return heapUsed;
68
+ return memoryMB > 1000 ? `${(memoryMB / 1024).toFixed(1)} GB` : `${memoryMB} MB`;
69
+ }
70
+ export async function runStatus(opts, deps) {
71
+ const getDockerStatus = deps?.dockerStatus ?? dockerStatus;
72
+ const getOllamaStatus = deps?.ollamaStatus ?? ollamaStatus;
73
+ const findCfgDir = deps?.findConfigDir ?? findConfigDir;
74
+ const readCfg = deps?.readConfig ?? readConfig;
75
+ const healthCheck = deps?.healthCheck;
76
+ const serverUrl = opts.server ?? 'http://localhost:9876';
77
+ const timeout = opts.timeout ?? 5_000;
78
+ const result = {
79
+ docker: { qdrant: 'not running', mcp: 'not running' },
80
+ ollama: 'not running',
81
+ config: { found: false },
82
+ server: { ok: false },
83
+ timestamp: new Date().toISOString(),
84
+ };
85
+ // Docker
86
+ const docker = getDockerStatus();
87
+ result.docker = docker;
88
+ // Ollama — read model from config
89
+ let modelName = 'jina-code-embeddings';
90
+ const configDir = findCfgDir();
91
+ if (configDir) {
92
+ try {
93
+ const { config } = readCfg(configDir);
94
+ modelName = config.embeddings?.model ?? modelName;
95
+ }
96
+ catch {
97
+ // Use default
98
+ }
99
+ }
100
+ const ollama = getOllamaStatus(modelName);
101
+ result.ollama = ollama;
102
+ // Config
103
+ if (configDir) {
104
+ try {
105
+ const { config } = readCfg(configDir);
106
+ result.config = {
107
+ found: true,
108
+ group: config.group,
109
+ language: Array.isArray(config.language) ? config.language.join(', ') : config.language,
110
+ };
111
+ }
112
+ catch (err) {
113
+ result.config = { found: true, error: err.message };
114
+ }
115
+ }
116
+ // Server health
117
+ if (healthCheck) {
118
+ try {
119
+ const res = await healthCheck(serverUrl, timeout);
120
+ if (res.status === 200) {
121
+ if (validateHealthResponse(res.data)) {
122
+ const data = res.data;
123
+ result.server = {
124
+ ok: true,
125
+ status: data.status,
126
+ uptime: data.uptime,
127
+ memory: formatMemory(data.memory.heapUsed),
128
+ percent: data.memory.percent,
129
+ groups: data.groups,
130
+ };
131
+ }
132
+ else {
133
+ result.server = { ok: true, error: 'invalid response' };
134
+ }
135
+ }
136
+ else {
137
+ result.server = { ok: false, error: 'error' };
138
+ }
139
+ }
140
+ catch {
141
+ result.server = { ok: false, error: 'unreachable' };
142
+ }
143
+ }
144
+ else {
145
+ try {
146
+ const client = new ApiClient(serverUrl);
147
+ const res = await client.health({ timeout });
148
+ if (res.status === 200) {
149
+ if (validateHealthResponse(res.data)) {
150
+ const data = res.data;
151
+ result.server = {
152
+ ok: true,
153
+ status: data.status,
154
+ uptime: data.uptime,
155
+ memory: formatMemory(data.memory.heapUsed),
156
+ percent: data.memory.percent,
157
+ groups: data.groups,
158
+ };
159
+ }
160
+ else {
161
+ result.server = { ok: true, error: 'invalid response' };
162
+ }
163
+ }
164
+ else {
165
+ result.server = { ok: false, error: 'error' };
166
+ }
167
+ }
168
+ catch {
169
+ result.server = { ok: false, error: 'unreachable' };
170
+ }
171
+ }
172
+ return result;
173
+ }
174
+ function outputStatus(result, opts) {
175
+ const { docker, ollama, config, server } = result;
176
+ const qdrantOk = docker.qdrant !== 'not running';
177
+ const mcpOk = docker.mcp !== 'not running';
178
+ const ollamaOk = ollama === 'model ready';
179
+ if (opts.json) {
180
+ const jsonData = {
181
+ docker,
182
+ ollama,
183
+ config,
184
+ server: server.ok
185
+ ? {
186
+ status: server.status,
187
+ uptime: server.uptime,
188
+ memory: server.memory,
189
+ memoryPercent: server.percent,
190
+ groups: server.groups,
191
+ }
192
+ : { error: server.error },
193
+ timestamp: result.timestamp,
194
+ };
195
+ console.log(JSON.stringify(jsonData, null, 2));
196
+ return;
197
+ }
198
+ console.log(chalk.bold('\npaparats status\n'));
199
+ // Docker
200
+ console.log(` Qdrant: ${qdrantOk ? chalk.green(docker.qdrant) : chalk.red(docker.qdrant)}`);
201
+ console.log(` MCP: ${mcpOk ? chalk.green(docker.mcp) : chalk.red(docker.mcp)}`);
202
+ // Ollama
203
+ console.log(` Ollama: ${ollamaOk ? chalk.green(ollama) : chalk.yellow(ollama)}`);
204
+ // Config
205
+ if (config.found) {
206
+ if (config.error) {
207
+ console.log(` Config: ${chalk.red(`invalid: ${config.error}`)}`);
208
+ }
209
+ else {
210
+ console.log(` Config: ${chalk.green(CONFIG_FILE + ' found')}`);
211
+ console.log(` Group: ${chalk.bold(config.group ?? '')}`);
212
+ console.log(` Language: ${config.language ?? ''}`);
213
+ }
214
+ }
215
+ else {
216
+ console.log(` Config: ${chalk.dim('no ' + CONFIG_FILE + ' in current directory')}`);
217
+ }
218
+ // Server
219
+ if (server.ok) {
220
+ if (server.error === 'invalid response') {
221
+ console.log(` Server: ${chalk.yellow('running (invalid response)')}`);
222
+ }
223
+ else {
224
+ console.log(` Server: ${chalk.green(server.status ?? 'ok')}`);
225
+ if (server.uptime !== undefined) {
226
+ console.log(` Uptime: ${chalk.dim(formatUptime(server.uptime))}`);
227
+ }
228
+ if (server.memory !== undefined && server.percent !== undefined) {
229
+ console.log(` Memory: ${chalk.dim(`${server.memory} (${server.percent}%)`)}`);
230
+ }
231
+ const groupEntries = Object.entries(server.groups ?? {});
232
+ if (groupEntries.length > 0) {
233
+ console.log(chalk.bold('\n Groups:'));
234
+ for (const [name, chunks] of groupEntries) {
235
+ console.log(` ${name}: ${chunks} chunks`);
236
+ }
237
+ }
238
+ }
239
+ }
240
+ else {
241
+ console.log(` Server: ${chalk.red(server.error ?? 'error')}`);
242
+ }
243
+ // Verbose
244
+ if (opts.verbose) {
245
+ console.log(chalk.dim('\n Verbose:'));
246
+ try {
247
+ const containers = execSync('docker ps --filter name=paparats --format "{{.ID}}"', {
248
+ encoding: 'utf8',
249
+ timeout: 5_000,
250
+ stdio: ['pipe', 'pipe', 'pipe'],
251
+ });
252
+ const ids = containers.trim().split('\n').filter(Boolean);
253
+ if (ids.length > 0) {
254
+ console.log(chalk.dim(` Container IDs: ${ids.join(', ')}`));
255
+ }
256
+ }
257
+ catch {
258
+ // Ignore
259
+ }
260
+ try {
261
+ const version = execSync('ollama --version', {
262
+ encoding: 'utf8',
263
+ timeout: 3_000,
264
+ stdio: ['pipe', 'pipe', 'pipe'],
265
+ });
266
+ console.log(chalk.dim(` Ollama version: ${version.trim()}`));
267
+ }
268
+ catch {
269
+ // Ignore
270
+ }
271
+ }
272
+ console.log();
273
+ }
274
+ export const statusCommand = new Command('status')
275
+ .description('Show system status')
276
+ .option('--server <url>', 'MCP server URL', 'http://localhost:9876')
277
+ .option('--timeout <ms>', 'Request timeout in milliseconds', '5000')
278
+ .option('--json', 'Output as JSON')
279
+ .option('-v, --verbose', 'Show detailed output')
280
+ .action(async (opts) => {
281
+ try {
282
+ const timeout = opts.timeout !== undefined ? parseInt(opts.timeout, 10) : 5_000;
283
+ if (Number.isNaN(timeout) || timeout <= 0) {
284
+ throw new Error(`Invalid timeout: ${opts.timeout}. Must be a positive number.`);
285
+ }
286
+ const statusOpts = {
287
+ server: opts.server,
288
+ timeout,
289
+ json: opts.json,
290
+ verbose: opts.verbose,
291
+ };
292
+ const result = await runStatus(statusOpts);
293
+ outputStatus(result, statusOpts);
294
+ const qdrantOk = result.docker.qdrant !== 'not running';
295
+ const mcpOk = result.docker.mcp !== 'not running';
296
+ const ollamaOk = result.ollama === 'model ready';
297
+ const criticalDown = !qdrantOk || !mcpOk || !ollamaOk;
298
+ if (criticalDown && !opts.json) {
299
+ console.log(chalk.yellow('\n⚠ Some critical services are not running'));
300
+ console.log(chalk.dim('Run `paparats install` or `docker compose up -d`'));
301
+ process.exit(1);
302
+ }
303
+ }
304
+ catch (err) {
305
+ console.error(chalk.red(err.message));
306
+ process.exit(1);
307
+ }
308
+ });
309
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Command } from 'commander';
2
+ export interface UpdateOptions {
3
+ skipCli?: boolean;
4
+ skipDocker?: boolean;
5
+ verbose?: boolean;
6
+ }
7
+ export interface UpdateDeps {
8
+ execSync?: (cmd: string, opts?: {
9
+ stdio?: unknown;
10
+ timeout?: number;
11
+ }) => void;
12
+ getDockerComposeCommand?: () => string;
13
+ waitForHealth?: (url: string, label: string) => Promise<boolean>;
14
+ existsSync?: (path: string) => boolean;
15
+ }
16
+ export declare function runUpdate(opts: UpdateOptions, deps?: UpdateDeps): Promise<void>;
17
+ export declare const updateCommand: Command;
18
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/E,uBAAuB,CAAC,EAAE,MAAM,MAAM,CAAC;IACvC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACxC;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAsErF;AAED,eAAO,MAAM,aAAa,SAYtB,CAAC"}
@@ -0,0 +1,95 @@
1
+ import { Command } from 'commander';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import os from 'os';
5
+ import { execSync } from 'child_process';
6
+ import chalk from 'chalk';
7
+ import ora from 'ora';
8
+ import { getDockerComposeCommand } from './install.js';
9
+ import { waitForHealth } from './install.js';
10
+ const PAPARATS_HOME = path.join(os.homedir(), '.paparats');
11
+ const COMPOSE_FILE = path.join(PAPARATS_HOME, 'docker-compose.yml');
12
+ const NPM_PACKAGE = 'paparats-mcp';
13
+ export async function runUpdate(opts, deps) {
14
+ const exec = deps?.execSync ?? execSync;
15
+ const getCompose = deps?.getDockerComposeCommand ?? getDockerComposeCommand;
16
+ const waitHealth = deps?.waitForHealth ?? waitForHealth;
17
+ const exists = deps?.existsSync ?? fs.existsSync.bind(fs);
18
+ console.log(chalk.bold('\npaparats update\n'));
19
+ if (!opts.skipCli) {
20
+ const spinner = ora(`Updating CLI from npm (${NPM_PACKAGE}@latest)...`).start();
21
+ try {
22
+ exec(`npm install -g ${NPM_PACKAGE}@latest`, {
23
+ stdio: opts.verbose ? 'inherit' : ['pipe', 'pipe', 'pipe'],
24
+ timeout: 120_000,
25
+ });
26
+ spinner.succeed('CLI updated');
27
+ }
28
+ catch (err) {
29
+ spinner.fail('Failed to update CLI');
30
+ const msg = err.message;
31
+ if (msg.includes('404') || msg.includes('not found')) {
32
+ console.log(chalk.dim(` Package not yet published to npm. Run without --skip-cli after publish.`));
33
+ }
34
+ else {
35
+ throw err;
36
+ }
37
+ }
38
+ }
39
+ if (!opts.skipDocker) {
40
+ if (!exists(COMPOSE_FILE)) {
41
+ console.log(chalk.yellow(` Docker compose not found at ${COMPOSE_FILE}`));
42
+ console.log(chalk.dim(' Run `paparats install` first to set up Docker.'));
43
+ }
44
+ else {
45
+ const composeCmd = getCompose();
46
+ const composeArg = `-f "${COMPOSE_FILE}"`;
47
+ const pullSpinner = ora('Pulling latest server image...').start();
48
+ try {
49
+ exec(`${composeCmd} ${composeArg} pull`, {
50
+ stdio: opts.verbose ? 'inherit' : ['pipe', 'pipe', 'pipe'],
51
+ timeout: 300_000,
52
+ });
53
+ pullSpinner.succeed('Server image pulled');
54
+ }
55
+ catch (err) {
56
+ pullSpinner.fail('Failed to pull server image');
57
+ throw err;
58
+ }
59
+ const upSpinner = ora('Restarting Docker containers...').start();
60
+ try {
61
+ exec(`${composeCmd} ${composeArg} up -d`, {
62
+ stdio: opts.verbose ? 'inherit' : ['pipe', 'pipe', 'pipe'],
63
+ timeout: 120_000,
64
+ });
65
+ upSpinner.succeed('Docker containers restarted');
66
+ }
67
+ catch (err) {
68
+ upSpinner.fail('Failed to restart Docker containers');
69
+ throw err;
70
+ }
71
+ const qdrantReady = await waitHealth('http://localhost:6333/healthz', 'Qdrant');
72
+ if (!qdrantReady)
73
+ throw new Error('Qdrant failed to start');
74
+ const mcpReady = await waitHealth('http://localhost:9876/health', 'MCP server');
75
+ if (!mcpReady)
76
+ throw new Error('MCP server failed to start');
77
+ }
78
+ }
79
+ console.log(chalk.bold.green('\n✓ Update complete!\n'));
80
+ }
81
+ export const updateCommand = new Command('update')
82
+ .description('Update CLI from npm and pull/restart latest server Docker image')
83
+ .option('--skip-cli', 'Skip CLI update (only update Docker)')
84
+ .option('--skip-docker', 'Skip Docker update (only update CLI)')
85
+ .option('-v, --verbose', 'Show detailed output')
86
+ .action(async (opts) => {
87
+ try {
88
+ await runUpdate(opts);
89
+ }
90
+ catch (err) {
91
+ console.error(chalk.red(err.message));
92
+ process.exit(1);
93
+ }
94
+ });
95
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { Command } from 'commander';
2
+ import { watch } from 'chokidar';
3
+ import { readConfig } from '../config.js';
4
+ export interface WatchOptions {
5
+ server?: string;
6
+ verbose?: boolean;
7
+ dryRun?: boolean;
8
+ json?: boolean;
9
+ }
10
+ export interface WatchDeps {
11
+ readConfigFn?: () => {
12
+ config: Awaited<ReturnType<typeof readConfig>>['config'];
13
+ projectDir: string;
14
+ };
15
+ createWatcher?: typeof watch;
16
+ apiClient?: {
17
+ fileChanged: (group: string, project: string, path: string, content: string, opts?: {
18
+ language?: string;
19
+ }) => Promise<unknown>;
20
+ fileDeleted: (group: string, project: string, path: string) => Promise<unknown>;
21
+ health: (opts?: {
22
+ timeout?: number;
23
+ }) => Promise<{
24
+ status: number;
25
+ }>;
26
+ };
27
+ }
28
+ /** Run watch command. Returns async cleanup function to stop watcher and drain pending. */
29
+ export declare function runWatch(opts: WatchOptions, deps?: WatchDeps): Promise<() => Promise<void>>;
30
+ export declare const watchCommand: Command;
31
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGjC,OAAO,EACL,UAAU,EAIX,MAAM,cAAc,CAAC;AAItB,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAID,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,EAAE,MAAM;QACnB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACzD,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,aAAa,CAAC,EAAE,OAAO,KAAK,CAAC;IAC7B,SAAS,CAAC,EAAE;QACV,WAAW,EAAE,CACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,KACzB,OAAO,CAAC,OAAO,CAAC,CAAC;QACtB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAChF,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtE,CAAC;CACH;AAaD,2FAA2F;AAC3F,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CA6SjG;AAED,eAAO,MAAM,YAAY,SAoBrB,CAAC"}