@mcampa/ai-context-cli 0.0.1-beta.f7ff6c2 → 0.0.2-beta.2250c7e

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.
package/README.md CHANGED
@@ -24,7 +24,9 @@ npm install -D @mcampa/ai-context-cli
24
24
 
25
25
  ## Quick Start
26
26
 
27
- 1. Create a configuration file `ai-context.config.ts` in your project root:
27
+ 1. Create a configuration file in your project root. You can use TypeScript (`.ts`), JavaScript (`.js`), or JSON (`.json`):
28
+
29
+ **TypeScript/JavaScript projects** - `ai-context.config.ts`:
28
30
 
29
31
  ```typescript
30
32
  import type { ContextConfig } from "@mcampa/ai-context-cli";
@@ -45,6 +47,21 @@ const config: ContextConfig = {
45
47
  export default config;
46
48
  ```
47
49
 
50
+ **Non-JS/TS projects (Python, Go, Rust, etc.)** - `ai-context.config.json`:
51
+
52
+ ```json
53
+ {
54
+ "name": "my-project",
55
+ "embeddingConfig": {
56
+ "apiKey": "[OPENAI_API_KEY]",
57
+ "model": "text-embedding-3-small"
58
+ },
59
+ "vectorDatabaseConfig": {
60
+ "address": "localhost:19530"
61
+ }
62
+ }
63
+ ```
64
+
48
65
  2. Run the indexer:
49
66
 
50
67
  ```bash
@@ -120,6 +137,43 @@ const config = {
120
137
  export default config;
121
138
  ```
122
139
 
140
+ ### JSON Configuration (`ai-context.config.json`)
141
+
142
+ For non-JavaScript/TypeScript projects (Python, Go, Rust, etc.), you can use a JSON config file:
143
+
144
+ ```json
145
+ {
146
+ "name": "my-project",
147
+ "embeddingConfig": {
148
+ "apiKey": "[OPENAI_API_KEY]",
149
+ "model": "text-embedding-3-small"
150
+ },
151
+ "vectorDatabaseConfig": {
152
+ "token": "[ZILLIZ_TOKEN]",
153
+ "address": "localhost:19530"
154
+ },
155
+ "supportedExtensions": [".py", ".go", ".rs"],
156
+ "ignorePatterns": ["venv/**", "__pycache__/**", "target/**"],
157
+ "customExtensions": [".proto"],
158
+ "customIgnorePatterns": ["*_test.go"]
159
+ }
160
+ ```
161
+
162
+ #### Environment Variable Substitution
163
+
164
+ JSON configs support environment variable substitution using the `[ENV_VAR_NAME]` syntax. Any value containing `[VARIABLE_NAME]` will be replaced with the corresponding environment variable:
165
+
166
+ ```json
167
+ {
168
+ "embeddingConfig": {
169
+ "apiKey": "[OPENAI_API_KEY]",
170
+ "baseURL": "https://[API_HOST]:[API_PORT]/v1"
171
+ }
172
+ }
173
+ ```
174
+
175
+ The CLI will throw an error if a referenced environment variable is not set, ensuring you don't accidentally run with missing configuration
176
+
123
177
  ## CLI Options
124
178
 
125
179
  ```
@@ -127,7 +181,7 @@ Usage: ai-context-index [options]
127
181
 
128
182
  Options:
129
183
  -V, --version output the version number
130
- -c, --config <path> path to config file (default: ai-context.config.ts/js)
184
+ -c, --config <path> path to config file (default: ai-context.config.ts/js/json)
131
185
  -f, --force force reindex even if collection already exists
132
186
  -h, --help display help for command
133
187
  ```
@@ -232,7 +286,7 @@ Use `customExtensions` to add more file types or `supportedExtensions` to overri
232
286
 
233
287
  ### "Config file not found"
234
288
 
235
- Make sure you have a config file named `ai-context.config.ts` or `ai-context.config.js` in the directory where you're running the command, or specify a custom path with `--config`.
289
+ Make sure you have a config file named `ai-context.config.ts`, `ai-context.config.js`, or `ai-context.config.json` in the directory where you're running the command, or specify a custom path with `--config`.
236
290
 
237
291
  ### "Missing required field: embeddingConfig.apiKey"
238
292
 
@@ -4,6 +4,10 @@ import type { ContextConfig } from "./types.js";
4
4
  * Searches for ai-context.config.ts first, then ai-context.config.js
5
5
  */
6
6
  export declare function findConfigFile(cwd: string): string | null;
7
+ /**
8
+ * Find tsx binary in multiple locations
9
+ */
10
+ export declare function findTsxBinary(): string | null;
7
11
  /**
8
12
  * Load and validate the configuration file
9
13
  * @param configPath Path to the config file, or directory to search for config
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQzD;AAsED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAsD5E"}
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQhD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQzD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CA8C7C;AAmID;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAmE5E"}
@@ -1,8 +1,12 @@
1
- import { existsSync } from "fs";
1
+ import { existsSync, readFileSync } from "fs";
2
2
  import { resolve, join } from "path";
3
3
  import { pathToFileURL } from "url";
4
- import { spawnSync } from "child_process";
5
- const CONFIG_FILE_NAMES = ["ai-context.config.ts", "ai-context.config.js"];
4
+ import { spawnSync, execSync } from "child_process";
5
+ const CONFIG_FILE_NAMES = [
6
+ "ai-context.config.ts",
7
+ "ai-context.config.js",
8
+ "ai-context.config.json",
9
+ ];
6
10
  /**
7
11
  * Find the config file in the given directory
8
12
  * Searches for ai-context.config.ts first, then ai-context.config.js
@@ -17,19 +21,59 @@ export function findConfigFile(cwd) {
17
21
  return null;
18
22
  }
19
23
  /**
20
- * Load a TypeScript config file by spawning tsx
24
+ * Find tsx binary in multiple locations
21
25
  */
22
- function loadTypeScriptConfig(filePath) {
23
- // Get the CLI root from environment or fallback
26
+ export function findTsxBinary() {
27
+ // 1. Check CLI package's node_modules
24
28
  const cliRoot = process.env.AI_CONTEXT_CLI_ROOT;
25
- // Find tsx binary
26
- let tsxPath = null;
27
29
  if (cliRoot) {
28
- const possiblePath = join(cliRoot, "node_modules", ".bin", "tsx");
29
- if (existsSync(possiblePath)) {
30
- tsxPath = possiblePath;
30
+ const cliPath = join(cliRoot, "node_modules", ".bin", "tsx");
31
+ if (existsSync(cliPath)) {
32
+ return cliPath;
33
+ }
34
+ }
35
+ // 2. Check current working directory's node_modules (where user is running the command)
36
+ const cwd = process.cwd();
37
+ const localPath = join(cwd, "node_modules", ".bin", "tsx");
38
+ if (existsSync(localPath)) {
39
+ return localPath;
40
+ }
41
+ // 3. Check if tsx is available in PATH (globally installed)
42
+ try {
43
+ // Use 'which' on Unix-like systems, 'where' on Windows
44
+ const command = process.platform === "win32" ? "where tsx" : "which tsx";
45
+ const tsxPath = execSync(command, { encoding: "utf-8", stdio: "pipe" })
46
+ .trim()
47
+ .split("\n")[0];
48
+ if (tsxPath && existsSync(tsxPath)) {
49
+ return tsxPath;
50
+ }
51
+ }
52
+ catch {
53
+ // tsx not found in PATH, continue to next check
54
+ }
55
+ // 4. Try to use 'tsx' directly (might work if it's in PATH and spawn can find it)
56
+ // We'll test this by trying to spawn it
57
+ try {
58
+ const testResult = spawnSync("tsx", ["--version"], {
59
+ encoding: "utf-8",
60
+ stdio: "pipe",
61
+ });
62
+ if (testResult.status === 0) {
63
+ return "tsx"; // Return the command name if it works
31
64
  }
32
65
  }
66
+ catch {
67
+ // tsx command not available
68
+ }
69
+ return null;
70
+ }
71
+ /**
72
+ * Load a TypeScript config file by spawning tsx
73
+ */
74
+ function loadTypeScriptConfig(filePath) {
75
+ // Find tsx binary in multiple locations
76
+ const tsxPath = findTsxBinary();
33
77
  if (!tsxPath) {
34
78
  throw new Error("TypeScript config files require tsx to be installed.\n" +
35
79
  "Please use a JavaScript config file (ai-context.config.js) instead,\n" +
@@ -72,6 +116,66 @@ async function loadJavaScriptConfig(filePath) {
72
116
  const module = await import(fileUrl);
73
117
  return module.default || module;
74
118
  }
119
+ /**
120
+ * Replace environment variable placeholders in a string
121
+ * Placeholders are in the format [ENV_VAR_NAME]
122
+ */
123
+ function substituteEnvVars(value) {
124
+ return value.replace(/\[([A-Z_][A-Z0-9_]*)\]/g, (match, envVarName) => {
125
+ const envValue = process.env[envVarName];
126
+ if (envValue === undefined) {
127
+ throw new Error(`Environment variable '${envVarName}' is not set (referenced as ${match} in config)`);
128
+ }
129
+ return envValue;
130
+ });
131
+ }
132
+ /**
133
+ * Recursively process an object and substitute environment variables in string values
134
+ */
135
+ function processEnvVars(obj) {
136
+ if (typeof obj === "string") {
137
+ return substituteEnvVars(obj);
138
+ }
139
+ if (Array.isArray(obj)) {
140
+ return obj.map((item) => processEnvVars(item));
141
+ }
142
+ if (obj !== null && typeof obj === "object") {
143
+ const result = {};
144
+ for (const [key, value] of Object.entries(obj)) {
145
+ result[key] = processEnvVars(value);
146
+ }
147
+ return result;
148
+ }
149
+ return obj;
150
+ }
151
+ /**
152
+ * Load a JSON config file
153
+ * Supports environment variable substitution using [ENV_VAR_NAME] syntax
154
+ */
155
+ function loadJsonConfig(filePath) {
156
+ try {
157
+ const content = readFileSync(filePath, "utf-8");
158
+ const parsed = JSON.parse(content);
159
+ // Validate that parsed JSON is an object (not null, array, or primitive)
160
+ if (parsed === null ||
161
+ typeof parsed !== "object" ||
162
+ Array.isArray(parsed)) {
163
+ throw new Error("JSON config must be an object, not " +
164
+ (parsed === null
165
+ ? "null"
166
+ : Array.isArray(parsed)
167
+ ? "an array"
168
+ : typeof parsed));
169
+ }
170
+ return processEnvVars(parsed);
171
+ }
172
+ catch (error) {
173
+ if (error instanceof SyntaxError) {
174
+ throw new Error(`Invalid JSON in config file: ${error.message}`);
175
+ }
176
+ throw error;
177
+ }
178
+ }
75
179
  /**
76
180
  * Load and validate the configuration file
77
181
  * @param configPath Path to the config file, or directory to search for config
@@ -93,7 +197,7 @@ export async function loadConfig(configPath) {
93
197
  if (!foundPath) {
94
198
  throw new Error(`No config file found. Please create one of:\n` +
95
199
  CONFIG_FILE_NAMES.map((f) => ` - ${f}`).join("\n") +
96
- `\n\nExample config:\n\n` +
200
+ `\n\nExample JS/TS config:\n\n` +
97
201
  `export default {\n` +
98
202
  ` name: "my-project",\n` +
99
203
  ` embeddingConfig: {\n` +
@@ -103,7 +207,18 @@ export async function loadConfig(configPath) {
103
207
  ` vectorDatabaseConfig: {\n` +
104
208
  ` address: "localhost:19530",\n` +
105
209
  ` },\n` +
106
- `};`);
210
+ `};\n\n` +
211
+ `Example JSON config (ai-context.config.json):\n\n` +
212
+ `{\n` +
213
+ ` "name": "my-project",\n` +
214
+ ` "embeddingConfig": {\n` +
215
+ ` "apiKey": "[OPENAI_API_KEY]",\n` +
216
+ ` "model": "text-embedding-3-small"\n` +
217
+ ` },\n` +
218
+ ` "vectorDatabaseConfig": {\n` +
219
+ ` "address": "localhost:19530"\n` +
220
+ ` }\n` +
221
+ `}`);
107
222
  }
108
223
  resolvedPath = foundPath;
109
224
  }
@@ -113,6 +228,9 @@ export async function loadConfig(configPath) {
113
228
  if (resolvedPath.endsWith(".ts") || resolvedPath.endsWith(".tsx")) {
114
229
  config = loadTypeScriptConfig(resolvedPath);
115
230
  }
231
+ else if (resolvedPath.endsWith(".json")) {
232
+ config = loadJsonConfig(resolvedPath);
233
+ }
116
234
  else {
117
235
  config = await loadJavaScriptConfig(resolvedPath);
118
236
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,24 @@
1
1
  import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
- import { existsSync, mkdirSync, writeFileSync, rmSync } from "fs";
2
+ import { existsSync, mkdirSync, writeFileSync, rmSync, } from "fs";
3
3
  import { join } from "path";
4
- import { findConfigFile, loadConfig } from "./config-loader.js";
4
+ import * as childProcess from "child_process";
5
+ import { findConfigFile, loadConfig, findTsxBinary } from "./config-loader.js";
6
+ // Mock fs and child_process modules
7
+ vi.mock("fs", async () => {
8
+ const actual = await vi.importActual("fs");
9
+ return {
10
+ ...actual,
11
+ existsSync: vi.fn(actual.existsSync),
12
+ };
13
+ });
14
+ vi.mock("child_process", async () => {
15
+ const actual = await vi.importActual("child_process");
16
+ return {
17
+ ...actual,
18
+ execSync: vi.fn(),
19
+ spawnSync: vi.fn(),
20
+ };
21
+ });
5
22
  // Test directory for temporary files
6
23
  const TEST_DIR = join(process.cwd(), ".test-temp");
7
24
  // Counter for unique file names to avoid ESM import caching
@@ -23,6 +40,8 @@ describe("config-loader", () => {
23
40
  rmSync(TEST_DIR, { recursive: true, force: true });
24
41
  }
25
42
  vi.restoreAllMocks();
43
+ // Restore original environment
44
+ delete process.env.AI_CONTEXT_CLI_ROOT;
26
45
  });
27
46
  describe("findConfigFile", () => {
28
47
  it("should return null when no config file exists", () => {
@@ -49,6 +68,28 @@ describe("config-loader", () => {
49
68
  const result = findConfigFile(TEST_DIR);
50
69
  expect(result).toBe(tsConfigPath);
51
70
  });
71
+ it("should find ai-context.config.json", () => {
72
+ const configPath = join(TEST_DIR, "ai-context.config.json");
73
+ writeFileSync(configPath, "{}");
74
+ const result = findConfigFile(TEST_DIR);
75
+ expect(result).toBe(configPath);
76
+ });
77
+ it("should prefer .ts over .json", () => {
78
+ const tsConfigPath = join(TEST_DIR, "ai-context.config.ts");
79
+ const jsonConfigPath = join(TEST_DIR, "ai-context.config.json");
80
+ writeFileSync(tsConfigPath, "export default {};");
81
+ writeFileSync(jsonConfigPath, "{}");
82
+ const result = findConfigFile(TEST_DIR);
83
+ expect(result).toBe(tsConfigPath);
84
+ });
85
+ it("should prefer .js over .json", () => {
86
+ const jsConfigPath = join(TEST_DIR, "ai-context.config.js");
87
+ const jsonConfigPath = join(TEST_DIR, "ai-context.config.json");
88
+ writeFileSync(jsConfigPath, "export default {};");
89
+ writeFileSync(jsonConfigPath, "{}");
90
+ const result = findConfigFile(TEST_DIR);
91
+ expect(result).toBe(jsConfigPath);
92
+ });
52
93
  });
53
94
  describe("loadConfig", () => {
54
95
  it("should throw error when no config file found", async () => {
@@ -231,6 +272,335 @@ describe("config-loader", () => {
231
272
  expect(config.customExtensions).toEqual([".vue"]);
232
273
  expect(config.customIgnorePatterns).toEqual(["*.test.ts"]);
233
274
  });
275
+ it("should load and validate a valid JSON config", async () => {
276
+ const configPath = getUniqueConfigPath("json");
277
+ const configContent = JSON.stringify({
278
+ name: "test-project",
279
+ embeddingConfig: {
280
+ apiKey: "test-key",
281
+ model: "text-embedding-3-small",
282
+ },
283
+ vectorDatabaseConfig: {
284
+ address: "localhost:19530",
285
+ },
286
+ });
287
+ writeFileSync(configPath, configContent);
288
+ const config = await loadConfig(configPath);
289
+ expect(config.name).toBe("test-project");
290
+ expect(config.embeddingConfig?.apiKey).toBe("test-key");
291
+ expect(config.embeddingConfig?.model).toBe("text-embedding-3-small");
292
+ expect(config.vectorDatabaseConfig?.address).toBe("localhost:19530");
293
+ });
294
+ it("should throw error for invalid JSON syntax", async () => {
295
+ const configPath = getUniqueConfigPath("json");
296
+ // Invalid JSON (trailing comma)
297
+ writeFileSync(configPath, '{ "name": "test", "embeddingConfig": { "apiKey": "key", } }');
298
+ await expect(loadConfig(configPath)).rejects.toThrow("Invalid JSON");
299
+ });
300
+ it("should throw error when JSON config contains null", async () => {
301
+ const configPath = getUniqueConfigPath("json");
302
+ writeFileSync(configPath, "null");
303
+ await expect(loadConfig(configPath)).rejects.toThrow("JSON config must be an object");
304
+ });
305
+ it("should throw error when JSON config contains an array", async () => {
306
+ const configPath = getUniqueConfigPath("json");
307
+ writeFileSync(configPath, "[]");
308
+ await expect(loadConfig(configPath)).rejects.toThrow("JSON config must be an object");
309
+ });
310
+ it("should throw error when JSON config contains a primitive", async () => {
311
+ const configPath = getUniqueConfigPath("json");
312
+ writeFileSync(configPath, '"just a string"');
313
+ await expect(loadConfig(configPath)).rejects.toThrow("JSON config must be an object");
314
+ });
315
+ it("should accept JSON config with all optional fields", async () => {
316
+ const configPath = getUniqueConfigPath("json");
317
+ const configContent = JSON.stringify({
318
+ name: "test-project",
319
+ embeddingConfig: {
320
+ apiKey: "test-key",
321
+ model: "text-embedding-3-small",
322
+ baseURL: "https://custom.api.com",
323
+ },
324
+ vectorDatabaseConfig: {
325
+ address: "localhost:19530",
326
+ ssl: true,
327
+ },
328
+ supportedExtensions: [".py", ".go"],
329
+ ignorePatterns: ["venv/**"],
330
+ customExtensions: [".rs"],
331
+ customIgnorePatterns: ["*.pyc"],
332
+ });
333
+ writeFileSync(configPath, configContent);
334
+ const config = await loadConfig(configPath);
335
+ expect(config.name).toBe("test-project");
336
+ expect(config.embeddingConfig?.baseURL).toBe("https://custom.api.com");
337
+ expect(config.vectorDatabaseConfig?.ssl).toBe(true);
338
+ expect(config.supportedExtensions).toEqual([".py", ".go"]);
339
+ expect(config.customExtensions).toEqual([".rs"]);
340
+ });
341
+ it("should substitute environment variables in JSON config", async () => {
342
+ const configPath = getUniqueConfigPath("json");
343
+ // Set environment variables for the test
344
+ process.env.TEST_API_KEY = "my-secret-api-key";
345
+ process.env.TEST_MILVUS_TOKEN = "my-milvus-token";
346
+ const configContent = JSON.stringify({
347
+ name: "test-project",
348
+ embeddingConfig: {
349
+ apiKey: "[TEST_API_KEY]",
350
+ model: "text-embedding-3-small",
351
+ },
352
+ vectorDatabaseConfig: {
353
+ token: "[TEST_MILVUS_TOKEN]",
354
+ address: "localhost:19530",
355
+ },
356
+ });
357
+ writeFileSync(configPath, configContent);
358
+ try {
359
+ const config = await loadConfig(configPath);
360
+ expect(config.embeddingConfig?.apiKey).toBe("my-secret-api-key");
361
+ expect(config.vectorDatabaseConfig?.token).toBe("my-milvus-token");
362
+ }
363
+ finally {
364
+ // Clean up environment variables
365
+ delete process.env.TEST_API_KEY;
366
+ delete process.env.TEST_MILVUS_TOKEN;
367
+ }
368
+ });
369
+ it("should throw error for missing environment variable in JSON config", async () => {
370
+ const configPath = getUniqueConfigPath("json");
371
+ // Make sure the env var is not set
372
+ delete process.env.NONEXISTENT_VAR;
373
+ const configContent = JSON.stringify({
374
+ name: "test-project",
375
+ embeddingConfig: {
376
+ apiKey: "[NONEXISTENT_VAR]",
377
+ model: "text-embedding-3-small",
378
+ },
379
+ vectorDatabaseConfig: {
380
+ address: "localhost:19530",
381
+ },
382
+ });
383
+ writeFileSync(configPath, configContent);
384
+ await expect(loadConfig(configPath)).rejects.toThrow("Environment variable 'NONEXISTENT_VAR' is not set");
385
+ });
386
+ it("should substitute multiple env vars in the same string", async () => {
387
+ const configPath = getUniqueConfigPath("json");
388
+ process.env.TEST_HOST = "api.example.com";
389
+ process.env.TEST_PORT = "8080";
390
+ const configContent = JSON.stringify({
391
+ embeddingConfig: {
392
+ apiKey: "test-key",
393
+ model: "text-embedding-3-small",
394
+ baseURL: "https://[TEST_HOST]:[TEST_PORT]/v1",
395
+ },
396
+ vectorDatabaseConfig: {
397
+ address: "localhost:19530",
398
+ },
399
+ });
400
+ writeFileSync(configPath, configContent);
401
+ try {
402
+ const config = await loadConfig(configPath);
403
+ expect(config.embeddingConfig?.baseURL).toBe("https://api.example.com:8080/v1");
404
+ }
405
+ finally {
406
+ delete process.env.TEST_HOST;
407
+ delete process.env.TEST_PORT;
408
+ }
409
+ });
410
+ it("should handle env vars in arrays", async () => {
411
+ const configPath = getUniqueConfigPath("json");
412
+ process.env.TEST_PATTERN = "secret/**";
413
+ const configContent = JSON.stringify({
414
+ embeddingConfig: {
415
+ apiKey: "test-key",
416
+ model: "text-embedding-3-small",
417
+ },
418
+ vectorDatabaseConfig: {
419
+ address: "localhost:19530",
420
+ },
421
+ ignorePatterns: ["node_modules/**", "[TEST_PATTERN]"],
422
+ });
423
+ writeFileSync(configPath, configContent);
424
+ try {
425
+ const config = await loadConfig(configPath);
426
+ expect(config.ignorePatterns).toEqual(["node_modules/**", "secret/**"]);
427
+ }
428
+ finally {
429
+ delete process.env.TEST_PATTERN;
430
+ }
431
+ });
432
+ });
433
+ describe("findTsxBinary", () => {
434
+ const originalEnv = process.env.AI_CONTEXT_CLI_ROOT;
435
+ const originalCwd = process.cwd();
436
+ beforeEach(() => {
437
+ vi.mocked(existsSync).mockImplementation((path) => {
438
+ const pathStr = String(path);
439
+ // Use actual existsSync for test directory operations
440
+ if (pathStr.includes(".test-temp")) {
441
+ return require("fs").existsSync(path);
442
+ }
443
+ return false;
444
+ });
445
+ vi.mocked(childProcess.execSync).mockClear();
446
+ vi.mocked(childProcess.spawnSync).mockClear();
447
+ delete process.env.AI_CONTEXT_CLI_ROOT;
448
+ });
449
+ afterEach(() => {
450
+ vi.restoreAllMocks();
451
+ if (originalEnv) {
452
+ process.env.AI_CONTEXT_CLI_ROOT = originalEnv;
453
+ }
454
+ process.chdir(originalCwd);
455
+ });
456
+ it("should find tsx in CLI package's node_modules", () => {
457
+ const cliRoot = "/fake/cli/root";
458
+ const tsxPath = join(cliRoot, "node_modules", ".bin", "tsx");
459
+ process.env.AI_CONTEXT_CLI_ROOT = cliRoot;
460
+ vi.mocked(existsSync).mockImplementation((path) => {
461
+ const pathStr = String(path);
462
+ if (pathStr.includes(".test-temp")) {
463
+ return require("fs").existsSync(path);
464
+ }
465
+ return pathStr === tsxPath;
466
+ });
467
+ const result = findTsxBinary();
468
+ expect(result).toBe(tsxPath);
469
+ });
470
+ it("should find tsx in current working directory's node_modules when CLI package doesn't have it", () => {
471
+ const cwd = TEST_DIR;
472
+ process.chdir(cwd);
473
+ // After chdir, the path will be constructed using process.cwd()
474
+ const expectedPath = join(process.cwd(), "node_modules", ".bin", "tsx");
475
+ vi.mocked(existsSync).mockImplementation((path) => {
476
+ const pathStr = String(path);
477
+ // Use actual existsSync for test directory operations
478
+ if (pathStr.includes(".test-temp")) {
479
+ const actualFs = require("fs");
480
+ // Only use actual for non-tsx paths
481
+ if (!pathStr.includes("node_modules/.bin/tsx")) {
482
+ return actualFs.existsSync(path);
483
+ }
484
+ }
485
+ // Match the exact path that will be checked
486
+ return pathStr === expectedPath;
487
+ });
488
+ const result = findTsxBinary();
489
+ expect(result).toBe(expectedPath);
490
+ });
491
+ it("should find tsx via which command when not in node_modules", () => {
492
+ const globalTsxPath = "/usr/local/bin/tsx";
493
+ vi.mocked(existsSync).mockImplementation((path) => {
494
+ const pathStr = String(path);
495
+ if (pathStr.includes(".test-temp")) {
496
+ return require("fs").existsSync(path);
497
+ }
498
+ return pathStr === globalTsxPath;
499
+ });
500
+ vi.mocked(childProcess.execSync).mockReturnValue(globalTsxPath + "\n");
501
+ const result = findTsxBinary();
502
+ expect(result).toBe(globalTsxPath);
503
+ });
504
+ it("should find tsx via direct spawn when available in PATH", () => {
505
+ vi.mocked(existsSync).mockImplementation((path) => {
506
+ const pathStr = String(path);
507
+ if (pathStr.includes(".test-temp")) {
508
+ return require("fs").existsSync(path);
509
+ }
510
+ return false;
511
+ });
512
+ vi.mocked(childProcess.execSync).mockImplementation(() => {
513
+ throw new Error("tsx not found");
514
+ });
515
+ vi.mocked(childProcess.spawnSync).mockReturnValue({
516
+ status: 0,
517
+ stdout: "",
518
+ stderr: "",
519
+ });
520
+ const result = findTsxBinary();
521
+ expect(result).toBe("tsx");
522
+ });
523
+ it("should return null when tsx is not found anywhere", () => {
524
+ vi.mocked(existsSync).mockImplementation((path) => {
525
+ const pathStr = String(path);
526
+ if (pathStr.includes(".test-temp")) {
527
+ return require("fs").existsSync(path);
528
+ }
529
+ return false;
530
+ });
531
+ vi.mocked(childProcess.execSync).mockImplementation(() => {
532
+ throw new Error("tsx not found");
533
+ });
534
+ vi.mocked(childProcess.spawnSync).mockReturnValue({
535
+ status: 1,
536
+ stdout: "",
537
+ stderr: "",
538
+ });
539
+ const result = findTsxBinary();
540
+ expect(result).toBeNull();
541
+ });
542
+ it("should prefer CLI package's tsx over local node_modules", () => {
543
+ const cliRoot = "/fake/cli/root";
544
+ const cliTsxPath = join(cliRoot, "node_modules", ".bin", "tsx");
545
+ const cwd = TEST_DIR;
546
+ const localTsxPath = join(cwd, "node_modules", ".bin", "tsx");
547
+ process.env.AI_CONTEXT_CLI_ROOT = cliRoot;
548
+ process.chdir(cwd);
549
+ vi.mocked(existsSync).mockImplementation((path) => {
550
+ const pathStr = String(path);
551
+ if (pathStr.includes(".test-temp")) {
552
+ return require("fs").existsSync(path);
553
+ }
554
+ return pathStr === cliTsxPath || pathStr === localTsxPath;
555
+ });
556
+ const result = findTsxBinary();
557
+ expect(result).toBe(cliTsxPath);
558
+ });
559
+ it("should prefer local node_modules over global tsx", () => {
560
+ const cwd = TEST_DIR;
561
+ process.chdir(cwd);
562
+ // After chdir, the path will be constructed using process.cwd()
563
+ const expectedLocalPath = join(process.cwd(), "node_modules", ".bin", "tsx");
564
+ const globalTsxPath = "/usr/local/bin/tsx";
565
+ vi.mocked(existsSync).mockImplementation((path) => {
566
+ const pathStr = String(path);
567
+ // Use actual existsSync for test directory operations
568
+ if (pathStr.includes(".test-temp")) {
569
+ const actualFs = require("fs");
570
+ // Only use actual for non-tsx paths
571
+ if (!pathStr.includes("node_modules/.bin/tsx")) {
572
+ return actualFs.existsSync(path);
573
+ }
574
+ }
575
+ // Match the exact paths that will be checked
576
+ return pathStr === expectedLocalPath || pathStr === globalTsxPath;
577
+ });
578
+ vi.mocked(childProcess.execSync).mockReturnValue(globalTsxPath + "\n");
579
+ const result = findTsxBinary();
580
+ expect(result).toBe(expectedLocalPath);
581
+ });
582
+ it("should handle Windows which command (where)", () => {
583
+ const originalPlatform = process.platform;
584
+ Object.defineProperty(process, "platform", {
585
+ value: "win32",
586
+ writable: true,
587
+ });
588
+ const globalTsxPath = "C:\\Program Files\\nodejs\\tsx.cmd";
589
+ vi.mocked(existsSync).mockImplementation((path) => {
590
+ const pathStr = String(path);
591
+ if (pathStr.includes(".test-temp")) {
592
+ return require("fs").existsSync(path);
593
+ }
594
+ return pathStr === globalTsxPath;
595
+ });
596
+ vi.mocked(childProcess.execSync).mockReturnValue(globalTsxPath + "\r\n");
597
+ const result = findTsxBinary();
598
+ expect(result).toBe(globalTsxPath);
599
+ Object.defineProperty(process, "platform", {
600
+ value: originalPlatform,
601
+ writable: true,
602
+ });
603
+ });
234
604
  });
235
605
  });
236
606
  //# sourceMappingURL=config-loader.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.test.js","sourceRoot":"","sources":["../src/config-loader.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-loader.test.js","sourceRoot":"","sources":["../src/config-loader.test.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ const program = new Command();
13
13
  program
14
14
  .name("ai-context-index")
15
15
  .description("Index your codebase for AI-powered semantic search")
16
- .version(VERSION)
16
+ .version(VERSION, "-v, --version", "Display version number")
17
17
  .option("-c, --config <path>", "Path to config file (default: ai-context.config.ts/js)")
18
18
  .option("-f, --force", "Force reindex even if collection already exists")
19
19
  .action(async (options) => {
@@ -21,6 +21,7 @@ program
21
21
  console.log("");
22
22
  console.log("╔════════════════════════════════════════════════════════════╗");
23
23
  console.log("║ AI Context CLI - Codebase Indexer ║");
24
+ console.log(`║ Version ${VERSION.padEnd(25)} ║`);
24
25
  console.log("╚════════════════════════════════════════════════════════════╝");
25
26
  console.log("");
26
27
  // Load and validate config
@@ -55,5 +56,10 @@ process.on("unhandledRejection", (reason) => {
55
56
  console.error("❌ Unhandled rejection:", reason);
56
57
  process.exit(1);
57
58
  });
59
+ // Show version if no arguments provided (just the command name)
60
+ if (process.argv.length === 2) {
61
+ console.log(`@mcampa/ai-context-cli version ${VERSION}`);
62
+ process.exit(0);
63
+ }
58
64
  program.parse();
59
65
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +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,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAYxC,oDAAoD;AACpD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC7D,CAAC;AACF,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AAEpC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,CAAC,oDAAoD,CAAC;KACjE,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CACL,qBAAqB,EACrB,wDAAwD,CACzD;KACA,MAAM,CAAC,aAAa,EAAE,iDAAiD,CAAC;KACxE,MAAM,CAAC,KAAK,EAAE,OAAmB,EAAE,EAAE;IACpC,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,gEAAgE,CACjE,CAAC;QACF,OAAO,CAAC,GAAG,CACT,gEAAgE,CACjE,CAAC;QACF,OAAO,CAAC,GAAG,CACT,gEAAgE,CACjE,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,2BAA2B;QAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEhD,6BAA6B;QAC7B,MAAM,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAEtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CACX,UAAU,EACV,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAElB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YAC/D,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,yBAAyB;AACzB,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcampa/ai-context-cli",
3
- "version": "0.0.1-beta.f7ff6c2",
3
+ "version": "0.0.2-beta.2250c7e",
4
4
  "description": "CLI tool for indexing codebases with AI Context",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -9,14 +9,15 @@
9
9
  "ai-context-index": "./bin/ai-context-index.js"
10
10
  },
11
11
  "dependencies": {
12
- "@mcampa/ai-context-core": "0.0.1-beta.f7ff6c2",
12
+ "@mcampa/ai-context-core": "0.0.2-beta.2250c7e",
13
13
  "commander": "^12.1.0",
14
14
  "tsx": "^4.19.4"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@types/node": "^20.0.0",
18
+ "@vitest/coverage-v8": "^2.1.8",
18
19
  "typescript": "^5.0.0",
19
- "vitest": "^2.1.0"
20
+ "vitest": "^2.1.8"
20
21
  },
21
22
  "files": [
22
23
  "dist",
@@ -41,7 +42,7 @@
41
42
  "clean": "rimraf dist",
42
43
  "lint": "eslint src",
43
44
  "lint:fix": "eslint src --fix",
44
- "typecheck": "tsc --noEmit",
45
+ "typecheck": "tsc --noEmit -p tsconfig.typecheck.json",
45
46
  "test": "vitest run",
46
47
  "test:watch": "vitest",
47
48
  "test:coverage": "vitest run --coverage",