@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,437 @@
1
+ import { Command } from 'commander';
2
+ import { execSync } from 'child_process';
3
+ import fs from 'fs';
4
+ import path from 'path';
5
+ import { input, select, confirm, checkbox } from '@inquirer/prompts';
6
+ import chalk from 'chalk';
7
+ import { CONFIG_FILE, SUPPORTED_LANGUAGES, detectLanguage, writeConfig, } from '../config.js';
8
+ import { upsertMcpServer } from './install.js';
9
+ import { LSP_CONFIGS, buildCclspConfig, CCLSP_CONFIG_RELATIVE, checkLspInstalled, installLspServer, getCclspConfigPath, } from '../lsp-installers.js';
10
+ import ora from 'ora';
11
+ /**
12
+ * Language-specific default exclude patterns (bare format).
13
+ * Best practices and language-specific build/cache artifacts.
14
+ */
15
+ const LANGUAGE_EXCLUDE_DEFAULTS = {
16
+ ruby: [
17
+ 'vendor',
18
+ 'tmp',
19
+ 'log',
20
+ 'spec',
21
+ 'test',
22
+ 'node_modules',
23
+ '.bundle',
24
+ 'coverage',
25
+ 'public/packs',
26
+ 'public/assets',
27
+ 'storage',
28
+ '.byebug_history',
29
+ 'sig',
30
+ 'sorbet',
31
+ '**/*.rbi',
32
+ ],
33
+ typescript: [
34
+ 'node_modules',
35
+ 'dist',
36
+ '.next',
37
+ 'coverage',
38
+ 'build',
39
+ '.turbo',
40
+ 'out',
41
+ '.cache',
42
+ '.vercel',
43
+ '.swc',
44
+ '*.tsbuildinfo',
45
+ ],
46
+ javascript: [
47
+ 'node_modules',
48
+ 'dist',
49
+ 'coverage',
50
+ 'build',
51
+ '.cache',
52
+ '.parcel-cache',
53
+ 'out',
54
+ '.nuxt',
55
+ '.output',
56
+ ],
57
+ python: [
58
+ 'venv',
59
+ '__pycache__',
60
+ '.venv',
61
+ '.mypy_cache',
62
+ '*.egg-info',
63
+ '.pytest_cache',
64
+ '.tox',
65
+ '.coverage',
66
+ 'htmlcov',
67
+ 'dist',
68
+ 'build',
69
+ '.ruff_cache',
70
+ '.pytype',
71
+ ],
72
+ go: ['vendor', 'bin', '.idea', '*.test', '*.out'],
73
+ rust: ['target', 'Cargo.lock', '**/*.rs.bk', '.cargo'],
74
+ java: [
75
+ 'build',
76
+ '.gradle',
77
+ 'target',
78
+ 'bin',
79
+ '.idea',
80
+ '.classpath',
81
+ '.project',
82
+ '.settings',
83
+ '*.class',
84
+ '*.jar',
85
+ '*.war',
86
+ ],
87
+ terraform: [
88
+ '.terraform',
89
+ '*.tfstate',
90
+ '*.tfstate.backup',
91
+ '.terraform.lock.hcl',
92
+ 'crash.log',
93
+ 'override.tf',
94
+ 'override.tf.json',
95
+ ],
96
+ c: ['build', 'cmake-build-*', '*.o', '*.so', '*.a', '*.exe', '*.out', 'compile_commands.json'],
97
+ cpp: [
98
+ 'build',
99
+ 'cmake-build-*',
100
+ '*.o',
101
+ '*.so',
102
+ '*.a',
103
+ '*.exe',
104
+ '*.out',
105
+ 'compile_commands.json',
106
+ '.ccls-cache',
107
+ '.clangd',
108
+ ],
109
+ csharp: ['bin', 'obj', '.vs', '*.user', '*.suo', 'packages', '.vscode', '*.cache'],
110
+ php: [
111
+ 'vendor',
112
+ 'node_modules',
113
+ '.phpunit.cache',
114
+ 'storage/framework/cache',
115
+ 'storage/logs',
116
+ 'bootstrap/cache',
117
+ '.env',
118
+ ],
119
+ elixir: ['_build', 'deps', '.elixir_ls', 'cover', 'doc', '*.beam', '.fetch'],
120
+ scala: ['target', '.bsp', '.metals', '.bloop', 'project/target', 'project/project'],
121
+ kotlin: ['build', '.gradle', '.idea', '*.iml', 'out', 'bin'],
122
+ swift: ['.build', '.swiftpm', 'DerivedData', '*.xcodeproj', '*.xcworkspace', 'Pods'],
123
+ };
124
+ const COMMON_EXCLUDE = ['.git'];
125
+ function getDefaultExcludeForLanguages(languages) {
126
+ const merged = new Set(COMMON_EXCLUDE);
127
+ for (const lang of languages) {
128
+ const excludes = LANGUAGE_EXCLUDE_DEFAULTS[lang] ?? LANGUAGE_EXCLUDE_DEFAULTS.typescript ?? [];
129
+ excludes.forEach((e) => merged.add(e));
130
+ }
131
+ return Array.from(merged);
132
+ }
133
+ export function validateGroupName(value) {
134
+ const trimmed = value.trim();
135
+ if (!trimmed)
136
+ return 'Group name is required';
137
+ if (!/^[a-z0-9-_]+$/i.test(trimmed)) {
138
+ return 'Group name can only contain letters, numbers, dashes, and underscores';
139
+ }
140
+ return true;
141
+ }
142
+ export function appendToGitignore(gitignorePath) {
143
+ const content = fs.readFileSync(gitignorePath, 'utf8');
144
+ const needsLeadingNewline = content.length > 0 && !content.endsWith('\n');
145
+ const entry = needsLeadingNewline ? `\n${CONFIG_FILE}\n` : `${CONFIG_FILE}\n`;
146
+ fs.appendFileSync(gitignorePath, entry);
147
+ }
148
+ export async function runInit(projectDir, opts, deps) {
149
+ const configPath = path.join(projectDir, CONFIG_FILE);
150
+ if (fs.existsSync(configPath)) {
151
+ if (!opts.force) {
152
+ throw new Error(`${CONFIG_FILE} already exists. Use --force to overwrite.`);
153
+ }
154
+ console.log(chalk.yellow(`Warning: ${CONFIG_FILE} exists and will be overwritten`));
155
+ }
156
+ const skipPrompts = opts.nonInteractive ?? false;
157
+ const defaultGroup = path.basename(projectDir);
158
+ console.log(chalk.bold('\npaparats init\n'));
159
+ let group;
160
+ if (opts.group) {
161
+ const validation = validateGroupName(opts.group);
162
+ if (validation !== true)
163
+ throw new Error(validation);
164
+ group = opts.group.trim();
165
+ }
166
+ else if (skipPrompts) {
167
+ group = defaultGroup;
168
+ }
169
+ else if (deps?.promptGroup) {
170
+ group = await deps.promptGroup(defaultGroup);
171
+ }
172
+ else {
173
+ group = await input({
174
+ message: 'Group name (projects in the same group share a search index):',
175
+ default: defaultGroup,
176
+ validate: validateGroupName,
177
+ });
178
+ }
179
+ const detected = detectLanguage(projectDir);
180
+ let language;
181
+ if (opts.language) {
182
+ const lang = opts.language;
183
+ if (!SUPPORTED_LANGUAGES.includes(lang)) {
184
+ throw new Error(`Unsupported language '${lang}'. Supported: ${SUPPORTED_LANGUAGES.join(', ')}`);
185
+ }
186
+ language = lang;
187
+ }
188
+ else if (skipPrompts) {
189
+ language = detected ?? 'typescript';
190
+ }
191
+ else if (deps?.promptLanguage) {
192
+ language = await deps.promptLanguage(detected);
193
+ }
194
+ else {
195
+ const multi = await confirm({
196
+ message: 'Is this a multi-language project?',
197
+ default: false,
198
+ });
199
+ if (multi) {
200
+ language = await checkbox({
201
+ message: 'Select all languages:',
202
+ choices: SUPPORTED_LANGUAGES.map((l) => ({ name: l, value: l })),
203
+ validate: (choices) => choices.length > 0 ? true : 'Select at least one language',
204
+ });
205
+ }
206
+ else {
207
+ language = await select({
208
+ message: 'Primary language:',
209
+ choices: SUPPORTED_LANGUAGES.map((l) => ({
210
+ name: l === detected ? `${l} (detected)` : l,
211
+ value: l,
212
+ })),
213
+ default: detected ?? 'typescript',
214
+ });
215
+ }
216
+ }
217
+ let paths;
218
+ let dirs = [];
219
+ if (!skipPrompts) {
220
+ try {
221
+ dirs = fs
222
+ .readdirSync(projectDir, { withFileTypes: true })
223
+ .filter((d) => d.isDirectory() && !d.name.startsWith('.') && d.name !== 'node_modules')
224
+ .map((d) => d.name);
225
+ }
226
+ catch {
227
+ console.error(chalk.yellow('Warning: Could not read directory contents'));
228
+ }
229
+ const addPaths = dirs.length > 0 &&
230
+ (deps?.promptAddPaths
231
+ ? await deps.promptAddPaths()
232
+ : await confirm({
233
+ message: 'Specify custom paths to index? (default: entire project)',
234
+ default: false,
235
+ }));
236
+ if (addPaths && dirs.length > 0) {
237
+ if (deps?.promptPaths) {
238
+ paths = await deps.promptPaths(dirs);
239
+ }
240
+ else {
241
+ const selected = await checkbox({
242
+ message: 'Select directories to index:',
243
+ choices: dirs.map((d) => ({ name: d, value: d + '/' })),
244
+ });
245
+ paths = selected.length > 0 ? selected : undefined;
246
+ }
247
+ }
248
+ }
249
+ const languagesForExclude = Array.isArray(language) ? language : [language];
250
+ const defaultExclude = getDefaultExcludeForLanguages(languagesForExclude);
251
+ let exclude;
252
+ if (skipPrompts) {
253
+ exclude = defaultExclude;
254
+ }
255
+ else if (deps?.promptAddExclude) {
256
+ const add = await deps.promptAddExclude();
257
+ exclude = add ? defaultExclude : undefined;
258
+ }
259
+ else {
260
+ const addExclude = await confirm({
261
+ message: 'Add common exclusions for your language(s)?',
262
+ default: true,
263
+ });
264
+ exclude = addExclude ? defaultExclude : undefined;
265
+ }
266
+ let embeddings;
267
+ if (!skipPrompts) {
268
+ const configureEmbeddings = deps?.promptConfigureEmbeddings ??
269
+ (() => confirm({
270
+ message: 'Configure embeddings provider?',
271
+ default: false,
272
+ }));
273
+ const shouldConfigure = await configureEmbeddings();
274
+ if (shouldConfigure) {
275
+ const provider = (deps?.promptEmbeddingsProvider
276
+ ? await deps.promptEmbeddingsProvider()
277
+ : await select({
278
+ message: 'Embeddings provider:',
279
+ choices: [
280
+ { name: 'Ollama (local, free)', value: 'ollama' },
281
+ { name: 'OpenAI (cloud, paid)', value: 'openai' },
282
+ ],
283
+ default: 'ollama',
284
+ }));
285
+ const defaultModel = provider === 'ollama' ? 'jina-code-embeddings' : 'text-embedding-3-small';
286
+ const model = deps?.promptEmbeddingsModel
287
+ ? await deps.promptEmbeddingsModel(provider)
288
+ : await input({
289
+ message: 'Model name:',
290
+ default: defaultModel,
291
+ });
292
+ embeddings = { provider, model };
293
+ }
294
+ }
295
+ const indexing = {
296
+ ...(paths ? { paths } : {}),
297
+ ...(exclude ? { exclude } : {}),
298
+ };
299
+ const config = {
300
+ group,
301
+ language,
302
+ ...(Object.keys(indexing).length > 0 ? { indexing } : {}),
303
+ ...(embeddings ? { embeddings } : {}),
304
+ };
305
+ writeConfig(projectDir, config);
306
+ console.log(chalk.green(`\n✓ Created ${CONFIG_FILE}`));
307
+ // Auto-configure Claude Code MCP
308
+ const mcpJsonPath = path.join(projectDir, '.mcp.json');
309
+ const mcpResult = upsertMcpServer(mcpJsonPath, 'paparats', {
310
+ type: 'http',
311
+ url: 'http://localhost:9876/mcp',
312
+ });
313
+ if (mcpResult === 'unchanged') {
314
+ console.log(chalk.green('✓ .mcp.json already configured'));
315
+ }
316
+ else {
317
+ console.log(chalk.green('✓ Added paparats to .mcp.json'));
318
+ }
319
+ // CCLSP setup
320
+ if (!opts.skipCclsp) {
321
+ const languages = Array.isArray(language) ? language : [language];
322
+ const supportedLspLanguages = languages.filter((l) => LSP_CONFIGS[l]);
323
+ if (supportedLspLanguages.length > 0) {
324
+ let setupCclsp;
325
+ if (skipPrompts) {
326
+ setupCclsp = true;
327
+ }
328
+ else if (deps?.promptSetupCclsp) {
329
+ setupCclsp = await deps.promptSetupCclsp();
330
+ }
331
+ else {
332
+ setupCclsp = await confirm({
333
+ message: 'Set up CCLSP for precise code navigation (go-to-definition, find-references)?',
334
+ default: true,
335
+ });
336
+ }
337
+ if (setupCclsp) {
338
+ for (const lang of supportedLspLanguages) {
339
+ const lspConfig = LSP_CONFIGS[lang];
340
+ if (!lspConfig)
341
+ continue;
342
+ const installed = checkLspInstalled(lang, deps?.lspDeps);
343
+ if (installed) {
344
+ console.log(chalk.green(`✓ ${lspConfig.displayName} already installed`));
345
+ }
346
+ else {
347
+ const spinner = ora(`Installing ${lspConfig.displayName}...`).start();
348
+ try {
349
+ installLspServer(lang, deps?.lspDeps);
350
+ spinner.succeed(`Installed ${lspConfig.displayName}`);
351
+ }
352
+ catch {
353
+ spinner.warn(`Failed to install ${lspConfig.displayName} — install manually: ${lspConfig.installCmd}`);
354
+ }
355
+ }
356
+ }
357
+ const cclspConfig = buildCclspConfig(supportedLspLanguages);
358
+ const cclspConfigPath = getCclspConfigPath(projectDir);
359
+ fs.writeFileSync(cclspConfigPath, JSON.stringify(cclspConfig, null, 2) + '\n');
360
+ console.log(chalk.green('✓ Created cclsp.json'));
361
+ const cclspInstalled = checkLspInstalled('cclsp', deps?.lspDeps);
362
+ if (!cclspInstalled) {
363
+ const spinner = ora('Installing cclsp...').start();
364
+ try {
365
+ (deps?.lspDeps?.execInstall ??
366
+ ((cmd) => execSync(cmd, { stdio: 'inherit', timeout: 120_000 })))('npm install -g cclsp');
367
+ spinner.succeed('Installed cclsp');
368
+ }
369
+ catch {
370
+ spinner.warn('Failed to install cclsp — install manually: npm install -g cclsp');
371
+ }
372
+ }
373
+ else {
374
+ console.log(chalk.green('✓ cclsp already installed'));
375
+ }
376
+ const cclspMcpResult = upsertMcpServer(mcpJsonPath, 'cclsp', {
377
+ command: 'cclsp',
378
+ env: {
379
+ CCLSP_CONFIG_PATH: CCLSP_CONFIG_RELATIVE,
380
+ },
381
+ });
382
+ if (cclspMcpResult === 'unchanged') {
383
+ console.log(chalk.green('✓ CCLSP already configured in .mcp.json'));
384
+ }
385
+ else {
386
+ console.log(chalk.green('✓ Added CCLSP to .mcp.json'));
387
+ }
388
+ }
389
+ }
390
+ }
391
+ if (!skipPrompts) {
392
+ const gitignorePath = path.join(projectDir, '.gitignore');
393
+ if (fs.existsSync(gitignorePath)) {
394
+ const content = fs.readFileSync(gitignorePath, 'utf8');
395
+ if (!content.includes(CONFIG_FILE)) {
396
+ const addToGitignore = deps?.promptGitignore
397
+ ? await deps.promptGitignore()
398
+ : await confirm({
399
+ message: `Add ${CONFIG_FILE} to .gitignore?`,
400
+ default: false,
401
+ });
402
+ if (addToGitignore) {
403
+ appendToGitignore(gitignorePath);
404
+ console.log(chalk.green(`✓ Added to .gitignore`));
405
+ }
406
+ }
407
+ }
408
+ }
409
+ if (!skipPrompts) {
410
+ console.log(chalk.dim(`\nExample config:`));
411
+ console.log(chalk.dim(` group: ${group}`));
412
+ console.log(chalk.dim(` language: ${Array.isArray(language) ? language.join(', ') : language}`));
413
+ }
414
+ console.log(chalk.dim(`\nNext: run ${chalk.bold('paparats install')} to set up Docker & Ollama`));
415
+ }
416
+ export const initCommand = new Command('init')
417
+ .description('Create .paparats.yml in the current directory')
418
+ .option('--force', 'Overwrite existing config')
419
+ .option('--group <name>', 'Group name (skip prompt)')
420
+ .option('--language <lang>', 'Primary language (skip prompt)')
421
+ .option('--non-interactive', 'Use defaults without prompts')
422
+ .option('--skip-cclsp', 'Skip CCLSP language server setup')
423
+ .action(async (opts) => {
424
+ try {
425
+ await runInit(process.cwd(), opts);
426
+ }
427
+ catch (err) {
428
+ const error = err;
429
+ if (error.name === 'ExitPromptError') {
430
+ console.log(chalk.yellow('\nInit cancelled by user'));
431
+ process.exit(130);
432
+ }
433
+ console.error(chalk.red(error.message));
434
+ process.exit(1);
435
+ }
436
+ });
437
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { Command } from 'commander';
2
+ export declare function commandExists(cmd: string): boolean;
3
+ export declare function getDockerComposeCommand(): string;
4
+ export declare function ollamaModelExists(modelName: string): boolean;
5
+ export declare function isOllamaRunning(): Promise<boolean>;
6
+ export declare function waitForHealth(url: string, label: string, maxRetries?: number, delayMs?: number): Promise<boolean>;
7
+ export interface UpsertMcpDeps {
8
+ readFileSync?: (path: string, encoding: 'utf8') => string;
9
+ writeFileSync?: (path: string, data: string) => void;
10
+ existsSync?: (path: string) => boolean;
11
+ mkdirSync?: (dir: string) => void;
12
+ }
13
+ export declare function upsertMcpServer(filePath: string, serverName: string, serverConfig: Record<string, unknown>, deps?: UpsertMcpDeps): 'added' | 'updated' | 'unchanged';
14
+ export interface InstallOptions {
15
+ skipDocker?: boolean;
16
+ skipOllama?: boolean;
17
+ verbose?: boolean;
18
+ }
19
+ export interface InstallDeps {
20
+ commandExists?: (cmd: string) => boolean;
21
+ getDockerComposeCommand?: () => string;
22
+ exec?: (cmd: string, opts?: {
23
+ timeout?: number;
24
+ }) => string;
25
+ ollamaModelExists?: (modelName: string) => boolean;
26
+ isOllamaRunning?: () => Promise<boolean>;
27
+ waitForHealth?: (url: string, label: string) => Promise<boolean>;
28
+ downloadFile?: (url: string, dest: string, signal?: AbortSignal) => Promise<void>;
29
+ findTemplatePath?: () => string;
30
+ mkdirSync?: (dir: string) => void;
31
+ copyFileSync?: (src: string, dest: string) => void;
32
+ readFileSync?: (path: string, encoding: 'utf8') => string;
33
+ writeFileSync?: (path: string, data: string) => void;
34
+ existsSync?: (path: string) => boolean;
35
+ unlinkSync?: (path: string) => void;
36
+ }
37
+ export declare function runInstall(opts: InstallOptions, deps?: InstallDeps & {
38
+ signal?: AbortSignal;
39
+ }): Promise<void>;
40
+ export declare const installCommand: Command;
41
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}