@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
package/dist/config.js ADDED
@@ -0,0 +1,308 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { glob } from 'glob';
4
+ import yaml from 'js-yaml';
5
+ import { validateIndexingPaths, normalizeExcludePatterns as normalizeExcludeFromShared, filterFilesByGitignore, } from '@paparats/shared';
6
+ export const CONFIG_FILE = '.paparats.yml';
7
+ const LANGUAGE_PATTERNS = {
8
+ ruby: ['**/*.rb', '**/*.rake'],
9
+ typescript: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
10
+ javascript: ['**/*.js', '**/*.jsx', '**/*.mjs', '**/*.cjs'],
11
+ python: ['**/*.py'],
12
+ go: ['**/*.go'],
13
+ rust: ['**/*.rs'],
14
+ java: ['**/*.java'],
15
+ terraform: ['**/*.tf', '**/*.tfvars'],
16
+ c: ['**/*.c', '**/*.h'],
17
+ cpp: ['**/*.cpp', '**/*.hpp', '**/*.cc', '**/*.hh', '**/*.cxx', '**/*.h'],
18
+ csharp: ['**/*.cs'],
19
+ generic: ['**/*'],
20
+ };
21
+ const DEFAULT_EXCLUDE = [
22
+ '**/node_modules/**',
23
+ '**/dist/**',
24
+ '**/.git/**',
25
+ '**/build/**',
26
+ '**/vendor/**',
27
+ '**/target/**',
28
+ ];
29
+ export const normalizeExcludePatterns = normalizeExcludeFromShared;
30
+ export const SUPPORTED_LANGUAGES = [
31
+ 'ruby',
32
+ 'typescript',
33
+ 'javascript',
34
+ 'python',
35
+ 'go',
36
+ 'rust',
37
+ 'java',
38
+ 'terraform',
39
+ 'c',
40
+ 'cpp',
41
+ 'csharp',
42
+ ];
43
+ // Explicit priority order (most specific first)
44
+ const DETECT_PRIORITY = [
45
+ ['tsconfig.json', 'typescript'],
46
+ ['package.json', 'typescript'],
47
+ ['Cargo.toml', 'rust'],
48
+ ['go.mod', 'go'],
49
+ ['pyproject.toml', 'python'],
50
+ ['requirements.txt', 'python'],
51
+ ['setup.py', 'python'],
52
+ ['pom.xml', 'java'],
53
+ ['build.gradle', 'java'],
54
+ ['Gemfile', 'ruby'],
55
+ ['Rakefile', 'ruby'],
56
+ ['main.tf', 'terraform'],
57
+ ['CMakeLists.txt', 'cpp'],
58
+ ['Makefile', 'c'],
59
+ ];
60
+ function hasCSharpFiles(dir) {
61
+ try {
62
+ const files = fs.readdirSync(dir);
63
+ return files.some((f) => f.endsWith('.csproj') || f.endsWith('.sln'));
64
+ }
65
+ catch {
66
+ return false;
67
+ }
68
+ }
69
+ function validateConfig(config, configPath) {
70
+ if (!config.group || typeof config.group !== 'string') {
71
+ throw new Error(`Invalid 'group' in ${configPath}: expected non-empty string`);
72
+ }
73
+ if (!config.language) {
74
+ throw new Error(`Missing required field 'language' in ${configPath}`);
75
+ }
76
+ const languages = Array.isArray(config.language) ? config.language : [config.language];
77
+ for (const lang of languages) {
78
+ if (!SUPPORTED_LANGUAGES.includes(lang)) {
79
+ throw new Error(`Unsupported language '${lang}' in ${configPath}.\n` +
80
+ `Supported: ${SUPPORTED_LANGUAGES.join(', ')}`);
81
+ }
82
+ }
83
+ if (config.indexing) {
84
+ const idx = config.indexing;
85
+ if (idx.chunkSize !== undefined) {
86
+ if (typeof idx.chunkSize !== 'number' || idx.chunkSize < 100 || idx.chunkSize > 10000) {
87
+ throw new Error(`Invalid chunkSize in ${configPath}: expected number between 100-10000`);
88
+ }
89
+ }
90
+ if (idx.overlap !== undefined) {
91
+ if (typeof idx.overlap !== 'number' || idx.overlap < 0 || idx.overlap > 1000) {
92
+ throw new Error(`Invalid overlap in ${configPath}: expected number between 0-1000`);
93
+ }
94
+ }
95
+ if (idx.concurrency !== undefined) {
96
+ if (typeof idx.concurrency !== 'number' || idx.concurrency < 1 || idx.concurrency > 100) {
97
+ throw new Error(`Invalid concurrency in ${configPath}: expected number between 1-100`);
98
+ }
99
+ }
100
+ }
101
+ if (config.watcher) {
102
+ const w = config.watcher;
103
+ if (w.enabled !== undefined && typeof w.enabled !== 'boolean') {
104
+ throw new Error(`Invalid watcher.enabled in ${configPath}: expected boolean`);
105
+ }
106
+ if (w.debounce !== undefined) {
107
+ if (typeof w.debounce !== 'number' || w.debounce < 0 || w.debounce > 10000) {
108
+ throw new Error(`Invalid watcher.debounce in ${configPath}: expected 0-10000ms`);
109
+ }
110
+ }
111
+ }
112
+ if (config.embeddings) {
113
+ const emb = config.embeddings;
114
+ if (emb.provider !== undefined && emb.provider !== 'ollama' && emb.provider !== 'openai') {
115
+ throw new Error(`Invalid embeddings.provider in ${configPath}: expected 'ollama' or 'openai'`);
116
+ }
117
+ if (emb.dimensions !== undefined) {
118
+ if (typeof emb.dimensions !== 'number' || emb.dimensions < 128 || emb.dimensions > 8192) {
119
+ throw new Error(`Invalid embeddings.dimensions in ${configPath}: expected 128-8192`);
120
+ }
121
+ }
122
+ }
123
+ }
124
+ export function findConfigDir(startDir) {
125
+ let dir = path.resolve(startDir ?? process.cwd());
126
+ while (true) {
127
+ if (fs.existsSync(path.join(dir, CONFIG_FILE))) {
128
+ return dir;
129
+ }
130
+ const parent = path.dirname(dir);
131
+ if (parent === dir)
132
+ return null;
133
+ dir = parent;
134
+ }
135
+ }
136
+ export function readConfig(projectDir) {
137
+ const dir = projectDir ?? findConfigDir();
138
+ if (!dir) {
139
+ throw new Error(`No ${CONFIG_FILE} found in current directory or any parent.\nRun \`paparats init\` to create one.`);
140
+ }
141
+ const configPath = path.join(dir, CONFIG_FILE);
142
+ let raw;
143
+ try {
144
+ raw = fs.readFileSync(configPath, 'utf8');
145
+ }
146
+ catch (err) {
147
+ const error = err;
148
+ if (error.code === 'ENOENT') {
149
+ throw new Error(`Config file not found: ${configPath}`, { cause: err });
150
+ }
151
+ if (error.code === 'EACCES') {
152
+ throw new Error(`Permission denied reading ${configPath}`, { cause: err });
153
+ }
154
+ throw new Error(`Failed to read ${configPath}: ${error.message}`, { cause: err });
155
+ }
156
+ let parsed;
157
+ try {
158
+ parsed = yaml.load(raw, { schema: yaml.JSON_SCHEMA });
159
+ }
160
+ catch (err) {
161
+ throw new Error(`Invalid YAML in ${configPath}: ${err.message}\n` +
162
+ `Check syntax at https://www.yamllint.com/`, { cause: err });
163
+ }
164
+ if (!parsed || typeof parsed !== 'object') {
165
+ throw new Error(`Invalid config at ${configPath}: expected YAML object`);
166
+ }
167
+ const config = parsed;
168
+ validateConfig(config, configPath);
169
+ const resolvedDir = path.resolve(dir);
170
+ const paths = config.indexing?.paths ?? ['./'];
171
+ validateIndexingPaths(paths, resolvedDir);
172
+ return { config, projectDir: resolvedDir };
173
+ }
174
+ export function writeConfig(projectDir, config) {
175
+ const configPath = path.join(projectDir, CONFIG_FILE);
176
+ if (!fs.existsSync(projectDir)) {
177
+ throw new Error(`Directory does not exist: ${projectDir}`);
178
+ }
179
+ if (fs.existsSync(configPath)) {
180
+ try {
181
+ fs.accessSync(configPath, fs.constants.W_OK);
182
+ }
183
+ catch (err) {
184
+ throw new Error(`Cannot write to ${configPath}: Permission denied`, { cause: err });
185
+ }
186
+ }
187
+ const content = yaml.dump(config, {
188
+ lineWidth: 100,
189
+ noRefs: true,
190
+ sortKeys: false,
191
+ quotingType: '"',
192
+ forceQuotes: false,
193
+ });
194
+ try {
195
+ fs.writeFileSync(configPath, content, 'utf8');
196
+ }
197
+ catch (err) {
198
+ throw new Error(`Failed to write config: ${err.message}`, { cause: err });
199
+ }
200
+ }
201
+ export function detectLanguages(projectDir) {
202
+ const detected = [];
203
+ const seen = new Set();
204
+ try {
205
+ if (!fs.existsSync(projectDir)) {
206
+ return [];
207
+ }
208
+ for (const [file, lang] of DETECT_PRIORITY) {
209
+ if (fs.existsSync(path.join(projectDir, file)) && !seen.has(lang)) {
210
+ detected.push(lang);
211
+ seen.add(lang);
212
+ }
213
+ }
214
+ if (hasCSharpFiles(projectDir) && !seen.has('csharp')) {
215
+ detected.push('csharp');
216
+ seen.add('csharp');
217
+ }
218
+ }
219
+ catch {
220
+ return [];
221
+ }
222
+ return detected;
223
+ }
224
+ export function detectLanguage(projectDir) {
225
+ const languages = detectLanguages(projectDir);
226
+ return languages[0] ?? null;
227
+ }
228
+ /** Get glob patterns for indexing based on config */
229
+ function getIndexPatterns(config) {
230
+ const languages = Array.isArray(config.language) ? config.language : [config.language];
231
+ const paths = config.indexing?.paths ?? ['./'];
232
+ const patterns = [];
233
+ for (const p of paths) {
234
+ const base = p.replace(/\/$/, '') || '.';
235
+ for (const lang of languages) {
236
+ const langPatterns = LANGUAGE_PATTERNS[lang] ??
237
+ LANGUAGE_PATTERNS.generic ?? ['**/*'];
238
+ for (const pat of langPatterns) {
239
+ patterns.push(path.posix.join(base, pat).replace(/\\/g, '/'));
240
+ }
241
+ }
242
+ }
243
+ return [...new Set(patterns)];
244
+ }
245
+ /** Collect project files for indexing (mirrors server glob logic) */
246
+ export async function collectProjectFiles(projectDir, config) {
247
+ const patterns = getIndexPatterns(config);
248
+ const exclude = normalizeExcludePatterns(config.indexing?.exclude ?? DEFAULT_EXCLUDE);
249
+ const respectGitignore = config.indexing?.respectGitignore ?? true;
250
+ const fileSet = new Set();
251
+ for (const pattern of patterns) {
252
+ const found = await glob(pattern, {
253
+ cwd: projectDir,
254
+ absolute: true,
255
+ ignore: exclude,
256
+ nodir: true,
257
+ });
258
+ found.forEach((f) => fileSet.add(f));
259
+ }
260
+ let files = Array.from(fileSet);
261
+ if (respectGitignore) {
262
+ files = filterFilesByGitignore(files, projectDir);
263
+ }
264
+ return files;
265
+ }
266
+ /** Infer language from file extension (for content-based API) */
267
+ const EXT_TO_LANG = {
268
+ '.ts': 'typescript',
269
+ '.tsx': 'typescript',
270
+ '.js': 'javascript',
271
+ '.jsx': 'javascript',
272
+ '.mjs': 'javascript',
273
+ '.cjs': 'javascript',
274
+ '.rb': 'ruby',
275
+ '.rake': 'ruby',
276
+ '.py': 'python',
277
+ '.go': 'go',
278
+ '.rs': 'rust',
279
+ '.java': 'java',
280
+ '.tf': 'terraform',
281
+ '.tfvars': 'terraform',
282
+ '.c': 'c',
283
+ '.h': 'c', // ambiguous: also used for C++. Use projectLanguages to disambiguate.
284
+ '.cpp': 'cpp',
285
+ '.hpp': 'cpp',
286
+ '.cc': 'cpp',
287
+ '.hh': 'cpp',
288
+ '.cxx': 'cpp',
289
+ '.cs': 'csharp',
290
+ };
291
+ /**
292
+ * Get language from file path for chunking/API.
293
+ * For `.h` (ambiguous extension for C/C++ headers), pass projectLanguages to prefer the project's
294
+ * configured language when it includes c or cpp.
295
+ */
296
+ export function getLanguageFromPath(filePath, projectLanguages) {
297
+ const ext = path.extname(filePath).toLowerCase();
298
+ const direct = EXT_TO_LANG[ext];
299
+ if (ext === '.h' && projectLanguages?.length) {
300
+ const langs = projectLanguages.map((l) => l.toLowerCase());
301
+ if (langs.includes('cpp'))
302
+ return 'cpp';
303
+ if (langs.includes('c'))
304
+ return 'c';
305
+ }
306
+ return direct ?? 'generic';
307
+ }
308
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# 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,23 @@
1
+ import { Command } from 'commander';
2
+ import { initCommand } from './commands/init.js';
3
+ import { installCommand } from './commands/install.js';
4
+ import { updateCommand } from './commands/update.js';
5
+ import { indexCommand } from './commands/index-cmd.js';
6
+ import { searchCommand } from './commands/search.js';
7
+ import { statusCommand } from './commands/status.js';
8
+ import { watchCommand } from './commands/watch.js';
9
+ import { doctorCommand } from './commands/doctor.js';
10
+ import { groupsCommand } from './commands/groups.js';
11
+ const program = new Command();
12
+ program.name('paparats').description('Semantic code search for your workspace').version('0.1.0');
13
+ program.addCommand(initCommand);
14
+ program.addCommand(installCommand);
15
+ program.addCommand(updateCommand);
16
+ program.addCommand(indexCommand);
17
+ program.addCommand(searchCommand);
18
+ program.addCommand(statusCommand);
19
+ program.addCommand(watchCommand);
20
+ program.addCommand(doctorCommand);
21
+ program.addCommand(groupsCommand);
22
+ program.parse();
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,yCAAyC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEjG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,28 @@
1
+ export interface LspConfig {
2
+ extensions: string[];
3
+ command: string[];
4
+ installCmd: string;
5
+ installCheck: string;
6
+ displayName: string;
7
+ }
8
+ export declare const LSP_CONFIGS: Record<string, LspConfig>;
9
+ export interface LspInstallerDeps {
10
+ commandExists?: (cmd: string) => boolean;
11
+ execInstall?: (cmd: string) => void;
12
+ }
13
+ export declare function checkLspInstalled(language: string, deps?: LspInstallerDeps): boolean;
14
+ export declare function installLspServer(language: string, deps?: LspInstallerDeps): void;
15
+ /** Server config per cclsp spec: https://github.com/ktnyt/cclsp/blob/main/README.md */
16
+ export interface CclspServerConfig {
17
+ extensions: string[];
18
+ command: string[];
19
+ rootDir?: string;
20
+ }
21
+ export interface CclspConfig {
22
+ servers: CclspServerConfig[];
23
+ }
24
+ export declare function buildCclspConfig(languages: string[]): CclspConfig;
25
+ /** Relative path for CCLSP_CONFIG_PATH — portable, safe for git. */
26
+ export declare const CCLSP_CONFIG_RELATIVE = "./cclsp.json";
27
+ export declare function getCclspConfigPath(projectDir: string): string;
28
+ //# sourceMappingURL=lsp-installers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-installers.d.ts","sourceRoot":"","sources":["../src/lsp-installers.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAgEjD,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAYD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAKpF;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAQhF;AAED,uFAAuF;AACvF,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,CA4BjE;AAED,oEAAoE;AACpE,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AAEpD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D"}
@@ -0,0 +1,125 @@
1
+ import { execSync } from 'child_process';
2
+ import path from 'path';
3
+ export const LSP_CONFIGS = {
4
+ typescript: {
5
+ extensions: ['ts', 'tsx', 'js', 'jsx'],
6
+ command: ['typescript-language-server', '--stdio'],
7
+ installCmd: 'npm install -g typescript-language-server typescript',
8
+ installCheck: 'typescript-language-server',
9
+ displayName: 'TypeScript Language Server',
10
+ },
11
+ javascript: {
12
+ extensions: ['js', 'jsx', 'mjs', 'cjs'],
13
+ command: ['typescript-language-server', '--stdio'],
14
+ installCmd: 'npm install -g typescript-language-server typescript',
15
+ installCheck: 'typescript-language-server',
16
+ displayName: 'TypeScript Language Server',
17
+ },
18
+ python: {
19
+ extensions: ['py'],
20
+ command: ['pylsp'],
21
+ installCmd: 'pip install python-lsp-server',
22
+ installCheck: 'pylsp',
23
+ displayName: 'Python LSP Server (pylsp)',
24
+ },
25
+ go: {
26
+ extensions: ['go'],
27
+ command: ['gopls'],
28
+ installCmd: 'go install golang.org/x/tools/gopls@latest',
29
+ installCheck: 'gopls',
30
+ displayName: 'gopls',
31
+ },
32
+ rust: {
33
+ extensions: ['rs'],
34
+ command: ['rust-analyzer'],
35
+ installCmd: 'rustup component add rust-analyzer',
36
+ installCheck: 'rust-analyzer',
37
+ displayName: 'rust-analyzer',
38
+ },
39
+ java: {
40
+ extensions: ['java'],
41
+ command: ['jdtls'],
42
+ installCmd: 'npm install -g java-language-server',
43
+ installCheck: 'jdtls',
44
+ displayName: 'Eclipse JDT Language Server',
45
+ },
46
+ ruby: {
47
+ extensions: ['rb', 'rake', 'rbs'],
48
+ command: ['solargraph', 'stdio'],
49
+ installCmd: 'gem install solargraph',
50
+ installCheck: 'solargraph',
51
+ displayName: 'Solargraph',
52
+ },
53
+ csharp: {
54
+ extensions: ['cs'],
55
+ command: ['omnisharp'],
56
+ installCmd: 'dotnet tool install -g omnisharp',
57
+ installCheck: 'omnisharp',
58
+ displayName: 'OmniSharp',
59
+ },
60
+ cclsp: {
61
+ extensions: [],
62
+ command: ['cclsp'],
63
+ installCmd: 'npm install -g cclsp',
64
+ installCheck: 'cclsp',
65
+ displayName: 'cclsp',
66
+ },
67
+ };
68
+ function defaultCommandExists(cmd) {
69
+ try {
70
+ const command = process.platform === 'win32' ? `where ${cmd}` : `command -v ${cmd}`;
71
+ execSync(command, { stdio: 'ignore', timeout: 3000 });
72
+ return true;
73
+ }
74
+ catch {
75
+ return false;
76
+ }
77
+ }
78
+ export function checkLspInstalled(language, deps) {
79
+ const config = LSP_CONFIGS[language];
80
+ if (!config)
81
+ return false;
82
+ const cmdExists = deps?.commandExists ?? defaultCommandExists;
83
+ return cmdExists(config.installCheck);
84
+ }
85
+ export function installLspServer(language, deps) {
86
+ const config = LSP_CONFIGS[language];
87
+ if (!config) {
88
+ throw new Error(`No LSP config for language: ${language}`);
89
+ }
90
+ const exec = deps?.execInstall ?? ((cmd) => execSync(cmd, { stdio: 'inherit', timeout: 120_000 }));
91
+ exec(config.installCmd);
92
+ }
93
+ export function buildCclspConfig(languages) {
94
+ const servers = [];
95
+ const seenCommandKey = new Set();
96
+ for (const lang of languages) {
97
+ const config = LSP_CONFIGS[lang];
98
+ if (!config)
99
+ continue;
100
+ const cmdKey = config.command.join(' ');
101
+ if (seenCommandKey.has(cmdKey)) {
102
+ const existing = servers.find((s) => s.command.join(' ') === cmdKey);
103
+ if (existing) {
104
+ for (const ext of config.extensions) {
105
+ if (!existing.extensions.includes(ext))
106
+ existing.extensions.push(ext);
107
+ }
108
+ }
109
+ continue;
110
+ }
111
+ seenCommandKey.add(cmdKey);
112
+ servers.push({
113
+ extensions: [...config.extensions],
114
+ command: config.command,
115
+ rootDir: '.',
116
+ });
117
+ }
118
+ return { servers };
119
+ }
120
+ /** Relative path for CCLSP_CONFIG_PATH — portable, safe for git. */
121
+ export const CCLSP_CONFIG_RELATIVE = './cclsp.json';
122
+ export function getCclspConfigPath(projectDir) {
123
+ return path.join(projectDir, 'cclsp.json');
124
+ }
125
+ //# sourceMappingURL=lsp-installers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-installers.js","sourceRoot":"","sources":["../src/lsp-installers.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,81 @@
1
+ {
2
+ "name": "@paparats/cli",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "CLI for Paparats MCP — semantic code search for AI coding assistants",
6
+ "license": "MIT",
7
+ "author": "Ilya Bazylchuk",
8
+ "homepage": "https://github.com/IBazylchuk/paparats-mcp#readme",
9
+ "keywords": [
10
+ "mcp",
11
+ "semantic-search",
12
+ "embedding",
13
+ "qdrant",
14
+ "ollama",
15
+ "cursor",
16
+ "claude",
17
+ "model-context-protocol",
18
+ "cli",
19
+ "code-search",
20
+ "ai-assistant"
21
+ ],
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/IBazylchuk/paparats-mcp.git",
25
+ "directory": "packages/cli"
26
+ },
27
+ "bugs": {
28
+ "url": "https://github.com/IBazylchuk/paparats-mcp/issues"
29
+ },
30
+ "bin": { "paparats": "./bin/paparats" },
31
+ "main": "./dist/index.js",
32
+ "types": "./dist/index.d.ts",
33
+ "exports": {
34
+ ".": {
35
+ "types": "./dist/index.d.ts",
36
+ "import": "./dist/index.js"
37
+ },
38
+ "./package.json": "./package.json"
39
+ },
40
+ "files": [
41
+ "dist",
42
+ "bin",
43
+ "README.md",
44
+ "LICENSE"
45
+ ],
46
+ "publishConfig": {
47
+ "access": "public",
48
+ "registry": "https://registry.npmjs.org/"
49
+ },
50
+ "engines": {
51
+ "node": ">=18.0.0"
52
+ },
53
+ "preferGlobal": true,
54
+ "scripts": {
55
+ "build": "tsc",
56
+ "postbuild": "node -e \"if (process.platform !== 'win32') require('fs').chmodSync('bin/paparats', 0o755)\"",
57
+ "dev": "tsc --watch",
58
+ "test": "vitest run",
59
+ "test:watch": "vitest",
60
+ "typecheck": "tsc --noEmit",
61
+ "prepublishOnly": "npm run build && npm run test"
62
+ },
63
+ "dependencies": {
64
+ "@paparats/shared": "^0.1.0",
65
+ "@inquirer/prompts": "^7.0.0",
66
+ "chalk": "^5.3.0",
67
+ "chokidar": "^4.0.0",
68
+ "commander": "^12.0.0",
69
+ "glob": "^13.0.1",
70
+ "js-yaml": "^4.1.0",
71
+ "minimatch": "^10.0.0",
72
+ "ora": "^8.0.0",
73
+ "p-limit": "^7.3.0"
74
+ },
75
+ "devDependencies": {
76
+ "@types/js-yaml": "^4.0.9",
77
+ "@types/node": "^22.0.0",
78
+ "typescript": "^5.7.0",
79
+ "vitest": "^4.0.18"
80
+ }
81
+ }