locadex 0.1.0-alpha.7 → 0.1.0-alpha.9

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 (46) hide show
  1. package/dist/cli.js +4 -6
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/i18n.d.ts.map +1 -1
  4. package/dist/commands/i18n.js +2 -7
  5. package/dist/commands/i18n.js.map +1 -1
  6. package/dist/commands/setup.d.ts.map +1 -1
  7. package/dist/commands/setup.js +2 -7
  8. package/dist/commands/setup.js.map +1 -1
  9. package/dist/tasks/i18n.d.ts.map +1 -1
  10. package/dist/tasks/i18n.js +34 -41
  11. package/dist/tasks/i18n.js.map +1 -1
  12. package/dist/tasks/setup.js +7 -3
  13. package/dist/tasks/setup.js.map +1 -1
  14. package/dist/telemetry.d.ts.map +1 -1
  15. package/dist/telemetry.js +2 -3
  16. package/dist/telemetry.js.map +1 -1
  17. package/dist/types/cli.d.ts +0 -2
  18. package/dist/types/cli.d.ts.map +1 -1
  19. package/dist/types/cli.js +2 -2
  20. package/dist/types/cli.js.map +1 -1
  21. package/dist/utils/claudeCode.d.ts +3 -2
  22. package/dist/utils/claudeCode.d.ts.map +1 -1
  23. package/dist/utils/claudeCode.js +8 -7
  24. package/dist/utils/claudeCode.js.map +1 -1
  25. package/dist/utils/config.d.ts +0 -1
  26. package/dist/utils/config.d.ts.map +1 -1
  27. package/dist/utils/config.js +2 -11
  28. package/dist/utils/config.js.map +1 -1
  29. package/dist/utils/dag/extractFiles.d.ts +7 -0
  30. package/dist/utils/dag/extractFiles.d.ts.map +1 -0
  31. package/dist/utils/dag/extractFiles.js +32 -0
  32. package/dist/utils/dag/extractFiles.js.map +1 -0
  33. package/dist/utils/dag/matchFiles.d.ts +2 -1
  34. package/dist/utils/dag/matchFiles.d.ts.map +1 -1
  35. package/dist/utils/dag/matchFiles.js +27 -6
  36. package/dist/utils/dag/matchFiles.js.map +1 -1
  37. package/dist/utils/locadexManager.d.ts.map +1 -1
  38. package/dist/utils/locadexManager.js +6 -9
  39. package/dist/utils/locadexManager.js.map +1 -1
  40. package/dist/utils/shared.d.ts.map +1 -1
  41. package/dist/utils/shared.js +3 -2
  42. package/dist/utils/shared.js.map +1 -1
  43. package/dist/utils/shutdown.d.ts.map +1 -1
  44. package/dist/utils/shutdown.js +3 -4
  45. package/dist/utils/shutdown.js.map +1 -1
  46. package/package.json +3 -1
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sources":["telemetry.ts"],"sourceRoot":"/","sourcesContent":["import { exit, gracefulShutdown } from './utils/shutdown.js';\nimport * as Sentry from '@sentry/node';\nimport { PostHog } from 'posthog-node';\nimport { getLocadexVersion } from './utils/getPaths.js';\nimport { CliOptions } from './types/cli.js';\nimport { getSessionId } from './utils/session.js';\n\nlet _posthog: PostHog | null = null;\nlet sentryInitialized = false;\nlet telemetryEnabled = false;\n\n// Create a PostHog proxy that behaves like PostHog but does nothing when disabled\nconst posthog = new Proxy({} as PostHog, {\n get(target, prop) {\n if (!telemetryEnabled || !_posthog) {\n // Return no-op functions for all PostHog methods\n if (\n typeof prop === 'string' &&\n ['capture', 'identify', 'alias', 'shutdown'].includes(prop)\n ) {\n return () => {};\n }\n return undefined;\n }\n return _posthog[prop as keyof PostHog];\n },\n});\n\nfunction initializeTelemetry(enabled: boolean) {\n telemetryEnabled = enabled;\n\n if (!sentryInitialized) {\n Sentry.init({\n dsn: 'https://f542d2155ab069c9de0fcd913ed3ce3b@o4508407294853120.ingest.us.sentry.io/4509441836843008',\n release: getLocadexVersion(),\n enabled,\n tracesSampleRate: 1.0,\n beforeSend: (event) => {\n event.exception?.values?.forEach((exception) => {\n delete exception.stacktrace;\n });\n delete event.server_name;\n return event;\n },\n beforeSendTransaction: (event) => {\n delete event.server_name;\n return event;\n },\n });\n sentryInitialized = true;\n }\n\n if (!_posthog && enabled) {\n _posthog = new PostHog('phc_LJRRBlhH8kgjiydp2bKjC7QPMguDoNd1b4QHQArxtha', {\n host: 'https://us.i.posthog.com',\n disableGeoip: true,\n });\n }\n}\n\nfunction updateProgress(status: string) {\n posthog.capture({\n distinctId: getSessionId(),\n event: 'locadex_progress',\n properties: { status },\n });\n}\n\nexport async function withTelemetry<F>(\n params: {\n enabled: boolean;\n options: CliOptions;\n },\n callback: () => F | Promise<F>\n): Promise<F> {\n const { enabled, options } = params;\n initializeTelemetry(enabled);\n\n if (!enabled) {\n return await callback();\n }\n\n Sentry.setTag('args.verbose', !!options.verbose);\n Sentry.setTag('args.debug', !!options.debug);\n Sentry.setTag('args.noTelemetry', !!options.noTelemetry);\n Sentry.setTag('args.batchSize', options.batchSize);\n Sentry.setTag('args.concurrency', options.concurrency);\n Sentry.setTag('args.matchingFiles', options.matchingFiles);\n Sentry.setTag('args.matchingExtensions', options.matchingExtensions);\n\n try {\n return await Sentry.startSpan(\n {\n name: 'locadex-execution',\n op: 'locadex.exec',\n },\n async () => {\n updateProgress('start');\n const res = await callback();\n updateProgress('finished');\n return res;\n }\n );\n } catch (e) {\n Sentry.captureException(e);\n throw e;\n } finally {\n await exit(0);\n }\n}\n\n// Register telemetry cleanup with graceful shutdown\ngracefulShutdown.addHandler({\n name: 'telemetry-cleanup',\n handler: async () => {\n if (_posthog) {\n await _posthog.shutdown();\n }\n await Sentry.flush(3000).then(null, () => {});\n },\n timeout: 3000,\n});\n\nexport { posthog };\n"],"names":[],"mappings":"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","debug_id":"098a5a64-e899-5a52-b0ad-69dc35b385a7"}
1
+ {"version":3,"file":"telemetry.js","sources":["telemetry.ts"],"sourceRoot":"/","sourcesContent":["import { exit, gracefulShutdown } from './utils/shutdown.js';\nimport * as Sentry from '@sentry/node';\nimport { PostHog } from 'posthog-node';\nimport { getLocadexVersion } from './utils/getPaths.js';\nimport { CliOptions } from './types/cli.js';\nimport { getSessionId } from './utils/session.js';\n\nlet _posthog: PostHog | null = null;\nlet sentryInitialized = false;\nlet telemetryEnabled = false;\n\n// Create a PostHog proxy that behaves like PostHog but does nothing when disabled\nconst posthog = new Proxy({} as PostHog, {\n get(target, prop) {\n if (!telemetryEnabled || !_posthog) {\n // Return no-op functions for all PostHog methods\n if (\n typeof prop === 'string' &&\n ['capture', 'identify', 'alias', 'shutdown'].includes(prop)\n ) {\n return () => {};\n }\n return undefined;\n }\n return _posthog[prop as keyof PostHog];\n },\n});\n\nfunction initializeTelemetry(enabled: boolean) {\n telemetryEnabled = enabled;\n\n if (!sentryInitialized) {\n Sentry.init({\n dsn: 'https://f542d2155ab069c9de0fcd913ed3ce3b@o4508407294853120.ingest.us.sentry.io/4509441836843008',\n release: getLocadexVersion(),\n enabled,\n tracesSampleRate: 1.0,\n beforeSend: (event) => {\n event.exception?.values?.forEach((exception) => {\n delete exception.stacktrace;\n });\n delete event.server_name;\n return event;\n },\n beforeSendTransaction: (event) => {\n delete event.server_name;\n return event;\n },\n });\n sentryInitialized = true;\n }\n\n if (!_posthog && enabled) {\n _posthog = new PostHog('phc_LJRRBlhH8kgjiydp2bKjC7QPMguDoNd1b4QHQArxtha', {\n host: 'https://us.i.posthog.com',\n disableGeoip: true,\n });\n }\n}\n\nfunction updateProgress(status: string) {\n posthog.capture({\n distinctId: getSessionId(),\n event: 'locadex_progress',\n properties: { status },\n });\n}\n\nexport async function withTelemetry<F>(\n params: {\n enabled: boolean;\n options: CliOptions;\n },\n callback: () => F | Promise<F>\n): Promise<F> {\n const { enabled, options } = params;\n initializeTelemetry(enabled);\n\n if (!enabled) {\n return await callback();\n }\n\n Sentry.setTag('args.verbose', !!options.verbose);\n Sentry.setTag('args.debug', !!options.debug);\n Sentry.setTag('args.noTelemetry', !!options.noTelemetry);\n Sentry.setTag('args.batchSize', options.batchSize);\n Sentry.setTag('args.concurrency', options.concurrency);\n Sentry.setTag('args.matchingFiles', options.matchingFiles);\n\n try {\n return await Sentry.startSpan(\n {\n name: 'locadex-execution',\n op: 'locadex.exec',\n },\n async () => {\n updateProgress('start');\n const res = await callback();\n updateProgress('finished');\n return res;\n }\n );\n } catch (e) {\n Sentry.captureException(e);\n throw e;\n } finally {\n await exit(0);\n }\n}\n\n// Register telemetry cleanup with graceful shutdown\ngracefulShutdown.addHandler({\n name: 'telemetry-cleanup',\n handler: async () => {\n if (_posthog) {\n await _posthog.shutdown();\n }\n await Sentry.flush(3000).then(null, () => {});\n },\n timeout: 3000,\n});\n\nexport { posthog };\n"],"names":[],"mappings":"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","debug_id":"bf55c1ef-1335-56c7-8592-1fca656dd8bc"}
@@ -5,12 +5,10 @@ export type CliOptions = {
5
5
  batchSize?: string;
6
6
  concurrency?: string;
7
7
  matchingFiles?: string;
8
- matchingExtensions?: string;
9
8
  };
10
9
  export type LocadexConfig = {
11
10
  batchSize: number;
12
11
  maxConcurrency: number;
13
12
  matchingFiles: string[];
14
- matchingExtensions: string[];
15
13
  };
16
14
  //# sourceMappingURL=cli.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"/","sources":["types/cli.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"/","sources":["types/cli.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC"}
package/dist/types/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c89b6b75-84a4-59f5-9013-ab5de6871b18")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="38b8ca8b-456e-5e7f-9dfa-68211d455f1f")}catch(e){}}();
3
3
  export {};
4
4
  //# sourceMappingURL=cli.js.map
5
- //# debugId=c89b6b75-84a4-59f5-9013-ab5de6871b18
5
+ //# debugId=38b8ca8b-456e-5e7f-9dfa-68211d455f1f
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sources":["types/cli.ts"],"sourceRoot":"/","sourcesContent":["export type CliOptions = {\n verbose?: boolean;\n debug?: boolean;\n noTelemetry?: boolean;\n batchSize?: string;\n concurrency?: string;\n matchingFiles?: string;\n matchingExtensions?: string;\n};\n\nexport type LocadexConfig = {\n batchSize: number;\n maxConcurrency: number;\n matchingFiles: string[];\n matchingExtensions: string[];\n};\n"],"names":[],"mappings":"","debug_id":"c89b6b75-84a4-59f5-9013-ab5de6871b18"}
1
+ {"version":3,"file":"cli.js","sources":["types/cli.ts"],"sourceRoot":"/","sourcesContent":["export type CliOptions = {\n verbose?: boolean;\n debug?: boolean;\n noTelemetry?: boolean;\n batchSize?: string;\n concurrency?: string;\n matchingFiles?: string;\n};\n\nexport type LocadexConfig = {\n batchSize: number;\n maxConcurrency: number;\n matchingFiles: string[];\n};\n"],"names":[],"mappings":"","debug_id":"38b8ca8b-456e-5e7f-9dfa-68211d455f1f"}
@@ -16,13 +16,14 @@ export declare class ClaudeCodeRunner {
16
16
  private mcpConfig;
17
17
  private manager;
18
18
  private changes;
19
- constructor(manager: LocadexManager, options: {
19
+ private controller;
20
+ constructor(manager: LocadexManager, controller: AbortController, options: {
20
21
  id: string;
21
22
  apiKey: string;
22
23
  mcpConfig: string;
23
24
  });
24
25
  getSessionId(): string;
25
- run(options: ClaudeCodeOptions, obs: ClaudeCodeObservation, controller: AbortController): Promise<string>;
26
+ run(options: ClaudeCodeOptions, obs: ClaudeCodeObservation): Promise<string>;
26
27
  private handleSDKOutput;
27
28
  generateReport(): string;
28
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"claudeCode.d.ts","sourceRoot":"/","sources":["utils/claudeCode.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,MAAM,WAAW,iBAAiB;IAChC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;CAAG;AAczC,eAAO,MAAM,sBAAsB,YAElC,CAAC;AAEF,qBAAa,gBAAgB;IASzB,OAAO,CAAC,OAAO;IARjB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAgB;gBAG7B,OAAO,EAAE,cAAc,EACf,OAAO,EAAE;QACf,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB;IAgBH,YAAY,IAAI,MAAM;IAIhB,GAAG,CACP,OAAO,EAAE,iBAAiB,EAC1B,GAAG,EAAE,qBAAqB,EAC1B,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC,MAAM,CAAC;IAoIlB,OAAO,CAAC,eAAe;IAmEvB,cAAc,IAAI,MAAM;CAGzB"}
1
+ {"version":3,"file":"claudeCode.d.ts","sourceRoot":"/","sources":["utils/claudeCode.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,MAAM,WAAW,iBAAiB;IAChC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;CAAG;AAczC,eAAO,MAAM,sBAAsB,YAElC,CAAC;AAEF,qBAAa,gBAAgB;IAWzB,OAAO,CAAC,OAAO;IAVjB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAkB;gBAGlC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,eAAe,EACnB,OAAO,EAAE;QACf,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB;IAeH,YAAY,IAAI,MAAM;IAIhB,GAAG,CACP,OAAO,EAAE,iBAAiB,EAC1B,GAAG,EAAE,qBAAqB,GACzB,OAAO,CAAC,MAAM,CAAC;IAoIlB,OAAO,CAAC,eAAe;IAmEvB,cAAc,IAAI,MAAM;CAGzB"}
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="779b7827-a535-57f3-9023-fe30a57f0ea0")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="3462e977-07c6-543f-94a5-feae01f1c2b2")}catch(e){}}();
3
3
  import { spawn } from 'node:child_process';
4
4
  import { guides } from '../mcp/tools/guides.js';
5
5
  import { logger } from '../logging/logger.js';
@@ -26,21 +26,22 @@ export class ClaudeCodeRunner {
26
26
  mcpConfig;
27
27
  manager;
28
28
  changes = [];
29
- constructor(manager, options) {
29
+ controller;
30
+ constructor(manager, controller, options) {
30
31
  this.options = options;
31
32
  this.manager = manager;
32
33
  this.id = options.id;
33
34
  this.mcpConfig = options.mcpConfig;
35
+ this.controller = controller;
34
36
  // Ensure API key is set
35
37
  if (!process.env.ANTHROPIC_API_KEY && !this.options.apiKey) {
36
38
  throw new Error('ANTHROPIC_API_KEY environment variable or apiKey option is required');
37
39
  }
38
- // AbortController handles cleanup automatically
39
40
  }
40
41
  getSessionId() {
41
42
  return this.sessionId;
42
43
  }
43
- async run(options, obs, controller) {
44
+ async run(options, obs) {
44
45
  this.changes = [];
45
46
  return Sentry.startSpan({
46
47
  name: 'claude-code-exec',
@@ -78,9 +79,9 @@ export class ClaudeCodeRunner {
78
79
  additionalAllowedTools: options.additionalAllowedTools,
79
80
  }, null, 2)}. API key is ${this.options.apiKey ? 'set' : 'not set'}`);
80
81
  const claude = spawn('claude', args, {
81
- stdio: ['inherit', 'pipe', 'pipe'],
82
+ stdio: ['ignore', 'pipe', 'pipe'],
82
83
  env,
83
- signal: controller.signal,
84
+ signal: this.controller.signal,
84
85
  });
85
86
  logger.debugMessage(`[${this.id}] Spawned claude code process`);
86
87
  const output = '';
@@ -191,4 +192,4 @@ export class ClaudeCodeRunner {
191
192
  }
192
193
  }
193
194
  //# sourceMappingURL=claudeCode.js.map
194
- //# debugId=779b7827-a535-57f3-9023-fe30a57f0ea0
195
+ //# debugId=3462e977-07c6-543f-94a5-feae01f1c2b2
@@ -1 +1 @@
1
- {"version":3,"file":"claudeCode.js","sources":["utils/claudeCode.ts"],"sourceRoot":"/","sourcesContent":["import { spawn } from 'node:child_process';\nimport { ClaudeSDKMessage } from '../types/claude-sdk.js';\nimport { guides } from '../mcp/tools/guides.js';\nimport { logger } from '../logging/logger.js';\nimport { posthog } from '../telemetry.js';\nimport { LocadexManager } from './locadexManager.js';\nimport { getSessionId } from './session.js';\nimport * as Sentry from '@sentry/node';\n\nexport interface ClaudeCodeOptions {\n additionalSystemPrompt?: string;\n prompt: string;\n additionalAllowedTools?: string[];\n maxTurns?: number;\n sessionId?: string;\n}\n\nexport interface ClaudeCodeObservation {}\n\nconst DEFAULT_ALLOWED_TOOLS = [\n 'mcp__locadex__fetch-docs',\n 'mcp__locadex__list-docs',\n 'Bash',\n 'Edit',\n 'MultiEdit',\n 'Write',\n].concat(guides.map((guide) => `mcp__locadex__${guide.id}`));\n\nconst DISALLOWED_TOOLS = ['NotebookEdit', 'WebFetch', 'WebSearch'];\n\n// Legacy function for backward compatibility\nexport const killAllClaudeProcesses = () => {\n // No-op since we now use AbortController\n};\n\nexport class ClaudeCodeRunner {\n private id: string;\n private sessionId: string = '';\n private mcpConfig: string | undefined;\n private manager: LocadexManager;\n private changes: string[] = [];\n\n constructor(\n manager: LocadexManager,\n private options: {\n id: string;\n apiKey: string;\n mcpConfig: string;\n }\n ) {\n this.manager = manager;\n this.id = options.id;\n this.mcpConfig = options.mcpConfig;\n\n // Ensure API key is set\n if (!process.env.ANTHROPIC_API_KEY && !this.options.apiKey) {\n throw new Error(\n 'ANTHROPIC_API_KEY environment variable or apiKey option is required'\n );\n }\n\n // AbortController handles cleanup automatically\n }\n\n getSessionId(): string {\n return this.sessionId;\n }\n\n async run(\n options: ClaudeCodeOptions,\n obs: ClaudeCodeObservation,\n controller: AbortController\n ): Promise<string> {\n this.changes = [];\n return Sentry.startSpan(\n {\n name: 'claude-code-exec',\n op: 'claude-code.exec',\n attributes: {\n 'process.command': 'claude',\n },\n },\n () =>\n new Promise((resolve, reject) => {\n const args = ['-p', options.prompt];\n\n if (options.additionalSystemPrompt) {\n args.push('--append-system-prompt', options.additionalSystemPrompt);\n }\n\n args.push('--output-format', 'stream-json');\n args.push('--verbose');\n if (options.sessionId) {\n args.push('--resume', options.sessionId);\n }\n\n if (this.mcpConfig) {\n args.push('--mcp-config', this.mcpConfig);\n }\n\n args.push(\n '--allowedTools',\n [\n ...DEFAULT_ALLOWED_TOOLS,\n ...(options?.additionalAllowedTools || []),\n ].join(',')\n );\n\n args.push('--disallowedTools', DISALLOWED_TOOLS.join(','));\n\n if (options.maxTurns) {\n args.push('--max-turns', options.maxTurns.toString());\n }\n\n const env = { ...process.env };\n env.ANTHROPIC_API_KEY = this.options.apiKey;\n logger.debugMessage(\n `[${this.id}] Spawning Claude Code with additional args: ${JSON.stringify(\n {\n maxTurns: options.maxTurns,\n sessionId: options.sessionId,\n mcpConfig: this.mcpConfig,\n additionalAllowedTools: options.additionalAllowedTools,\n },\n null,\n 2\n )}. API key is ${this.options.apiKey ? 'set' : 'not set'}`\n );\n\n const claude = spawn('claude', args, {\n stdio: ['inherit', 'pipe', 'pipe'],\n env,\n signal: controller.signal,\n });\n\n logger.debugMessage(`[${this.id}] Spawned claude code process`);\n\n const output = '';\n const errorOutput = '';\n\n let buffer = '';\n claude.stdout?.on('data', (data) => {\n buffer += data.toString();\n const lines = buffer.split('\\n');\n\n // Keep the last incomplete line in buffer\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n if (line.trim()) {\n try {\n logger.debugMessage(`[${this.id}] ${line}`);\n const outputData: ClaudeSDKMessage = JSON.parse(line);\n this.handleSDKOutput(outputData, obs);\n } catch (error) {\n logger.debugMessage(\n `[${this.id}] Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n }\n });\n\n claude.stderr?.on('data', (data) => {\n logger.debugMessage(`[${this.id}] ${data.toString().trim()}`);\n });\n\n claude.on('close', (code) => {\n if (code === 0) {\n resolve(output.trim());\n } else {\n logger.debugMessage(\n `[${this.id}] Claude Code exited with code ${code}: ${errorOutput}`\n );\n reject(\n new Error(\n `[${this.id}] Claude Code exited with code ${code}: ${errorOutput}`\n )\n );\n }\n });\n\n claude.on('error', (error) => {\n // Check if this is an AbortError\n if (error.name === 'AbortError') {\n logger.debugMessage(\n `[${this.id}] Claude Code process was aborted`\n );\n reject(new Error(`[${this.id}] Claude Code process was aborted`));\n } else {\n logger.debugMessage(\n `[${this.id}] failed to run Claude Code: ${error.message}`\n );\n reject(\n new Error(\n `[${this.id}] failed to run Claude Code: ${error.message}`\n )\n );\n }\n });\n })\n );\n }\n\n private handleSDKOutput(\n outputData: ClaudeSDKMessage,\n obs: ClaudeCodeObservation\n ) {\n if (outputData.type === 'assistant') {\n const text: string[] = [];\n const toolUses: string[] = [];\n outputData.message.content.forEach((c) => {\n if (c.type === 'text') {\n text.push(c.text);\n }\n if (c.type === 'tool_use') {\n toolUses.push(c.name);\n if (c.name.startsWith('mcp__locadex__')) {\n posthog.capture({\n distinctId: getSessionId(),\n event: 'tool_used',\n properties: {\n tool: c.name,\n },\n });\n }\n }\n });\n if (text.length > 0) {\n logger.verboseMessage(`[${this.id}] ${text.join('').trim()}`);\n }\n if (toolUses.length > 0) {\n logger.debugMessage(`[${this.id}] used tools: ${toolUses.join(', ')}`);\n }\n this.manager.stats.updateStats({\n newToolCalls: toolUses.length,\n newInputTokens: outputData.message.usage.input_tokens,\n newOutputTokens: outputData.message.usage.output_tokens,\n newCachedInputTokens:\n outputData.message.usage.cache_read_input_tokens ?? 0,\n });\n } else if (outputData.type === 'result') {\n if (!outputData.is_error) {\n logger.verboseMessage(\n `[${this.id}] finished task.\\nCost: $${Number(outputData.cost_usd).toFixed(2)}\\nDuration: ${\n Number(outputData.duration_ms) / 1000\n }s`\n );\n } else {\n logger.verboseMessage(\n `[${this.id}] finished task with error: ${outputData.subtype}\\nCost: $${outputData.cost_usd}\\nDuration: ${\n Number(outputData.duration_ms) / 1000\n }s`\n );\n }\n if (outputData.subtype === 'success') {\n this.changes.push(outputData.result);\n }\n this.manager.stats.updateStats({\n newCost: Number(outputData.cost_usd),\n newWallDuration: Number(outputData.duration_ms),\n newApiDuration: Number(outputData.duration_api_ms),\n newTurns: Number(outputData.num_turns),\n });\n } else if (outputData.type === 'system') {\n if (outputData.subtype === 'init') {\n this.sessionId = outputData.session_id;\n }\n }\n }\n\n generateReport(): string {\n return this.changes.join('\\n');\n }\n}\n"],"names":[],"mappings":"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","debug_id":"779b7827-a535-57f3-9023-fe30a57f0ea0"}
1
+ {"version":3,"file":"claudeCode.js","sources":["utils/claudeCode.ts"],"sourceRoot":"/","sourcesContent":["import { spawn } from 'node:child_process';\nimport { ClaudeSDKMessage } from '../types/claude-sdk.js';\nimport { guides } from '../mcp/tools/guides.js';\nimport { logger } from '../logging/logger.js';\nimport { posthog } from '../telemetry.js';\nimport { LocadexManager } from './locadexManager.js';\nimport { getSessionId } from './session.js';\nimport * as Sentry from '@sentry/node';\n\nexport interface ClaudeCodeOptions {\n additionalSystemPrompt?: string;\n prompt: string;\n additionalAllowedTools?: string[];\n maxTurns?: number;\n sessionId?: string;\n}\n\nexport interface ClaudeCodeObservation {}\n\nconst DEFAULT_ALLOWED_TOOLS = [\n 'mcp__locadex__fetch-docs',\n 'mcp__locadex__list-docs',\n 'Bash',\n 'Edit',\n 'MultiEdit',\n 'Write',\n].concat(guides.map((guide) => `mcp__locadex__${guide.id}`));\n\nconst DISALLOWED_TOOLS = ['NotebookEdit', 'WebFetch', 'WebSearch'];\n\n// Legacy function for backward compatibility\nexport const killAllClaudeProcesses = () => {\n // No-op since we now use AbortController\n};\n\nexport class ClaudeCodeRunner {\n private id: string;\n private sessionId: string = '';\n private mcpConfig: string | undefined;\n private manager: LocadexManager;\n private changes: string[] = [];\n private controller: AbortController;\n\n constructor(\n manager: LocadexManager,\n controller: AbortController,\n private options: {\n id: string;\n apiKey: string;\n mcpConfig: string;\n }\n ) {\n this.manager = manager;\n this.id = options.id;\n this.mcpConfig = options.mcpConfig;\n this.controller = controller;\n\n // Ensure API key is set\n if (!process.env.ANTHROPIC_API_KEY && !this.options.apiKey) {\n throw new Error(\n 'ANTHROPIC_API_KEY environment variable or apiKey option is required'\n );\n }\n }\n\n getSessionId(): string {\n return this.sessionId;\n }\n\n async run(\n options: ClaudeCodeOptions,\n obs: ClaudeCodeObservation\n ): Promise<string> {\n this.changes = [];\n return Sentry.startSpan(\n {\n name: 'claude-code-exec',\n op: 'claude-code.exec',\n attributes: {\n 'process.command': 'claude',\n },\n },\n () =>\n new Promise((resolve, reject) => {\n const args = ['-p', options.prompt];\n\n if (options.additionalSystemPrompt) {\n args.push('--append-system-prompt', options.additionalSystemPrompt);\n }\n\n args.push('--output-format', 'stream-json');\n args.push('--verbose');\n if (options.sessionId) {\n args.push('--resume', options.sessionId);\n }\n\n if (this.mcpConfig) {\n args.push('--mcp-config', this.mcpConfig);\n }\n\n args.push(\n '--allowedTools',\n [\n ...DEFAULT_ALLOWED_TOOLS,\n ...(options?.additionalAllowedTools || []),\n ].join(',')\n );\n\n args.push('--disallowedTools', DISALLOWED_TOOLS.join(','));\n\n if (options.maxTurns) {\n args.push('--max-turns', options.maxTurns.toString());\n }\n\n const env = { ...process.env };\n env.ANTHROPIC_API_KEY = this.options.apiKey;\n logger.debugMessage(\n `[${this.id}] Spawning Claude Code with additional args: ${JSON.stringify(\n {\n maxTurns: options.maxTurns,\n sessionId: options.sessionId,\n mcpConfig: this.mcpConfig,\n additionalAllowedTools: options.additionalAllowedTools,\n },\n null,\n 2\n )}. API key is ${this.options.apiKey ? 'set' : 'not set'}`\n );\n\n const claude = spawn('claude', args, {\n stdio: ['ignore', 'pipe', 'pipe'],\n env,\n signal: this.controller.signal,\n });\n\n logger.debugMessage(`[${this.id}] Spawned claude code process`);\n\n const output = '';\n const errorOutput = '';\n\n let buffer = '';\n claude.stdout?.on('data', (data) => {\n buffer += data.toString();\n const lines = buffer.split('\\n');\n\n // Keep the last incomplete line in buffer\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n if (line.trim()) {\n try {\n logger.debugMessage(`[${this.id}] ${line}`);\n const outputData: ClaudeSDKMessage = JSON.parse(line);\n this.handleSDKOutput(outputData, obs);\n } catch (error) {\n logger.debugMessage(\n `[${this.id}] Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n }\n });\n\n claude.stderr?.on('data', (data) => {\n logger.debugMessage(`[${this.id}] ${data.toString().trim()}`);\n });\n\n claude.on('close', (code) => {\n if (code === 0) {\n resolve(output.trim());\n } else {\n logger.debugMessage(\n `[${this.id}] Claude Code exited with code ${code}: ${errorOutput}`\n );\n reject(\n new Error(\n `[${this.id}] Claude Code exited with code ${code}: ${errorOutput}`\n )\n );\n }\n });\n\n claude.on('error', (error) => {\n // Check if this is an AbortError\n if (error.name === 'AbortError') {\n logger.debugMessage(\n `[${this.id}] Claude Code process was aborted`\n );\n reject(new Error(`[${this.id}] Claude Code process was aborted`));\n } else {\n logger.debugMessage(\n `[${this.id}] failed to run Claude Code: ${error.message}`\n );\n reject(\n new Error(\n `[${this.id}] failed to run Claude Code: ${error.message}`\n )\n );\n }\n });\n })\n );\n }\n\n private handleSDKOutput(\n outputData: ClaudeSDKMessage,\n obs: ClaudeCodeObservation\n ) {\n if (outputData.type === 'assistant') {\n const text: string[] = [];\n const toolUses: string[] = [];\n outputData.message.content.forEach((c) => {\n if (c.type === 'text') {\n text.push(c.text);\n }\n if (c.type === 'tool_use') {\n toolUses.push(c.name);\n if (c.name.startsWith('mcp__locadex__')) {\n posthog.capture({\n distinctId: getSessionId(),\n event: 'tool_used',\n properties: {\n tool: c.name,\n },\n });\n }\n }\n });\n if (text.length > 0) {\n logger.verboseMessage(`[${this.id}] ${text.join('').trim()}`);\n }\n if (toolUses.length > 0) {\n logger.debugMessage(`[${this.id}] used tools: ${toolUses.join(', ')}`);\n }\n this.manager.stats.updateStats({\n newToolCalls: toolUses.length,\n newInputTokens: outputData.message.usage.input_tokens,\n newOutputTokens: outputData.message.usage.output_tokens,\n newCachedInputTokens:\n outputData.message.usage.cache_read_input_tokens ?? 0,\n });\n } else if (outputData.type === 'result') {\n if (!outputData.is_error) {\n logger.verboseMessage(\n `[${this.id}] finished task.\\nCost: $${Number(outputData.cost_usd).toFixed(2)}\\nDuration: ${\n Number(outputData.duration_ms) / 1000\n }s`\n );\n } else {\n logger.verboseMessage(\n `[${this.id}] finished task with error: ${outputData.subtype}\\nCost: $${outputData.cost_usd}\\nDuration: ${\n Number(outputData.duration_ms) / 1000\n }s`\n );\n }\n if (outputData.subtype === 'success') {\n this.changes.push(outputData.result);\n }\n this.manager.stats.updateStats({\n newCost: Number(outputData.cost_usd),\n newWallDuration: Number(outputData.duration_ms),\n newApiDuration: Number(outputData.duration_api_ms),\n newTurns: Number(outputData.num_turns),\n });\n } else if (outputData.type === 'system') {\n if (outputData.subtype === 'init') {\n this.sessionId = outputData.session_id;\n }\n }\n }\n\n generateReport(): string {\n return this.changes.join('\\n');\n }\n}\n"],"names":[],"mappings":"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","debug_id":"3462e977-07c6-543f-94a5-feae01f1c2b2"}
@@ -4,7 +4,6 @@ export declare function createConfig(directory: string, options: {
4
4
  batchSize: number;
5
5
  maxConcurrency: number;
6
6
  matchingFiles: string[];
7
- matchingExtensions: string[];
8
7
  }): void;
9
8
  export declare function getConfig(directory: string, options?: Partial<LocadexConfig>): LocadexConfig;
10
9
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"/","sources":["utils/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,wBAAsB,qBAAqB,kBAQ1C;AAID,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IACP,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B,QAeF;AASD,wBAAgB,SAAS,CACvB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GACnC,aAAa,CAoCf"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"/","sources":["utils/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,wBAAsB,qBAAqB,kBAQ1C;AAID,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IACP,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,QAcF;AAQD,wBAAgB,SAAS,CACvB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GACnC,aAAa,CA4Bf"}
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7b33b037-223b-502e-8b4b-5b63b494693f")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="25044f10-3084-5717-91fe-cee3aa030acd")}catch(e){}}();
3
3
  import { existsSync, readFileSync, writeFileSync } from 'node:fs';
4
4
  import { logger } from '../logging/logger.js';
5
5
  import path from 'node:path';
@@ -21,7 +21,6 @@ export function createConfig(directory, options) {
21
21
  batchSize: options.batchSize,
22
22
  maxConcurrency: options.maxConcurrency,
23
23
  matchingFiles: options.matchingFiles,
24
- matchingExtensions: options.matchingExtensions,
25
24
  };
26
25
  writeFileSync(configPath, JSON.stringify(config, null, 2));
27
26
  }
@@ -29,7 +28,6 @@ const DEFAULT_CONFIG = {
29
28
  batchSize: 10,
30
29
  maxConcurrency: 1,
31
30
  matchingFiles: ['**/*.{ts,tsx,js,jsx}'],
32
- matchingExtensions: ['.ts', '.tsx', '.js', '.jsx'],
33
31
  };
34
32
  export function getConfig(directory, options = {}) {
35
33
  const configPath = path.resolve(directory, CONFIG_FILE_NAME);
@@ -53,14 +51,7 @@ export function getConfig(directory, options = {}) {
53
51
  : fileConfig.matchingFiles && fileConfig.matchingFiles.length > 0
54
52
  ? fileConfig.matchingFiles
55
53
  : DEFAULT_CONFIG.matchingFiles;
56
- mergedConfig.matchingExtensions =
57
- options.matchingExtensions && options.matchingExtensions.length > 0
58
- ? options.matchingExtensions
59
- : fileConfig.matchingExtensions &&
60
- fileConfig.matchingExtensions.length > 0
61
- ? fileConfig.matchingExtensions
62
- : DEFAULT_CONFIG.matchingExtensions;
63
54
  return mergedConfig;
64
55
  }
65
56
  //# sourceMappingURL=config.js.map
66
- //# debugId=7b33b037-223b-502e-8b4b-5b63b494693f
57
+ //# debugId=25044f10-3084-5717-91fe-cee3aa030acd
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["utils/config.ts"],"sourceRoot":"/","sourcesContent":["import { existsSync, readFileSync, writeFileSync } from 'node:fs';\nimport { logger } from '../logging/logger.js';\nimport path from 'node:path';\nimport { LocadexConfig } from '../types/cli.js';\nimport { exit } from './shutdown.js';\n\nexport async function validateInitialConfig() {\n // Validate ANTHROPIC_API_KEY\n if (!process.env.ANTHROPIC_API_KEY) {\n logger.error(\n 'ANTHROPIC_API_KEY is not set! Please set it as an environment variable or in a .env | .env.local file.'\n );\n await exit(1);\n }\n}\n\nconst CONFIG_FILE_NAME = 'locadex.config.json';\n\nexport function createConfig(\n directory: string,\n options: {\n batchSize: number;\n maxConcurrency: number;\n matchingFiles: string[];\n matchingExtensions: string[];\n }\n) {\n const configPath = path.resolve(directory, CONFIG_FILE_NAME);\n if (existsSync(configPath)) {\n return;\n }\n\n const config = {\n batchSize: options.batchSize,\n maxConcurrency: options.maxConcurrency,\n matchingFiles: options.matchingFiles,\n matchingExtensions: options.matchingExtensions,\n };\n\n writeFileSync(configPath, JSON.stringify(config, null, 2));\n}\n\nconst DEFAULT_CONFIG: LocadexConfig = {\n batchSize: 10,\n maxConcurrency: 1,\n matchingFiles: ['**/*.{ts,tsx,js,jsx}'],\n matchingExtensions: ['.ts', '.tsx', '.js', '.jsx'],\n};\n\nexport function getConfig(\n directory: string,\n options: Partial<LocadexConfig> = {}\n): LocadexConfig {\n const configPath = path.resolve(directory, CONFIG_FILE_NAME);\n let fileConfig: Partial<LocadexConfig> = {};\n\n // Load config file if it exists\n if (existsSync(configPath)) {\n try {\n fileConfig = JSON.parse(readFileSync(configPath, 'utf8'));\n } catch (error) {\n logger.error(\n `Error parsing config file ${configPath}: ${error instanceof Error ? error.message : String(error)}`\n );\n // Continue with empty file config on parse error\n }\n }\n\n // Merge configurations: defaults < file config < passed options\n const mergedConfig = { ...DEFAULT_CONFIG, ...fileConfig, ...options };\n\n // Use hierarchy for arrays: options > file config > defaults\n mergedConfig.matchingFiles =\n options.matchingFiles && options.matchingFiles.length > 0\n ? options.matchingFiles\n : fileConfig.matchingFiles && fileConfig.matchingFiles.length > 0\n ? fileConfig.matchingFiles\n : DEFAULT_CONFIG.matchingFiles;\n\n mergedConfig.matchingExtensions =\n options.matchingExtensions && options.matchingExtensions.length > 0\n ? options.matchingExtensions\n : fileConfig.matchingExtensions &&\n fileConfig.matchingExtensions.length > 0\n ? fileConfig.matchingExtensions\n : DEFAULT_CONFIG.matchingExtensions;\n\n return mergedConfig;\n}\n"],"names":[],"mappings":"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","debug_id":"7b33b037-223b-502e-8b4b-5b63b494693f"}
1
+ {"version":3,"file":"config.js","sources":["utils/config.ts"],"sourceRoot":"/","sourcesContent":["import { existsSync, readFileSync, writeFileSync } from 'node:fs';\nimport { logger } from '../logging/logger.js';\nimport path from 'node:path';\nimport { LocadexConfig } from '../types/cli.js';\nimport { exit } from './shutdown.js';\n\nexport async function validateInitialConfig() {\n // Validate ANTHROPIC_API_KEY\n if (!process.env.ANTHROPIC_API_KEY) {\n logger.error(\n 'ANTHROPIC_API_KEY is not set! Please set it as an environment variable or in a .env | .env.local file.'\n );\n await exit(1);\n }\n}\n\nconst CONFIG_FILE_NAME = 'locadex.config.json';\n\nexport function createConfig(\n directory: string,\n options: {\n batchSize: number;\n maxConcurrency: number;\n matchingFiles: string[];\n }\n) {\n const configPath = path.resolve(directory, CONFIG_FILE_NAME);\n if (existsSync(configPath)) {\n return;\n }\n\n const config = {\n batchSize: options.batchSize,\n maxConcurrency: options.maxConcurrency,\n matchingFiles: options.matchingFiles,\n };\n\n writeFileSync(configPath, JSON.stringify(config, null, 2));\n}\n\nconst DEFAULT_CONFIG: LocadexConfig = {\n batchSize: 10,\n maxConcurrency: 1,\n matchingFiles: ['**/*.{ts,tsx,js,jsx}'],\n};\n\nexport function getConfig(\n directory: string,\n options: Partial<LocadexConfig> = {}\n): LocadexConfig {\n const configPath = path.resolve(directory, CONFIG_FILE_NAME);\n let fileConfig: Partial<LocadexConfig> = {};\n\n // Load config file if it exists\n if (existsSync(configPath)) {\n try {\n fileConfig = JSON.parse(readFileSync(configPath, 'utf8'));\n } catch (error) {\n logger.error(\n `Error parsing config file ${configPath}: ${error instanceof Error ? error.message : String(error)}`\n );\n // Continue with empty file config on parse error\n }\n }\n\n // Merge configurations: defaults < file config < passed options\n const mergedConfig = { ...DEFAULT_CONFIG, ...fileConfig, ...options };\n\n // Use hierarchy for arrays: options > file config > defaults\n mergedConfig.matchingFiles =\n options.matchingFiles && options.matchingFiles.length > 0\n ? options.matchingFiles\n : fileConfig.matchingFiles && fileConfig.matchingFiles.length > 0\n ? fileConfig.matchingFiles\n : DEFAULT_CONFIG.matchingFiles;\n\n return mergedConfig;\n}\n"],"names":[],"mappings":";;AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,6BAA6B;IAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACnC,MAAM,CAAC,KAAK,CACV,wGAAwG,CACzG,CAAC;QACF,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAE/C,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,OAIC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG;QACb,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC;IAEF,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,cAAc,GAAkB;IACpC,SAAS,EAAE,EAAE;IACb,cAAc,EAAE,CAAC;IACjB,aAAa,EAAE,CAAC,sBAAsB,CAAC;CACxC,CAAC;AAEF,MAAM,UAAU,SAAS,CACvB,SAAiB,EACjB,UAAkC,EAAE;IAEpC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAC7D,IAAI,UAAU,GAA2B,EAAE,CAAC;IAE5C,gCAAgC;IAChC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CACV,6BAA6B,UAAU,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACrG,CAAC;YACF,iDAAiD;QACnD,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,MAAM,YAAY,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC;IAEtE,6DAA6D;IAC7D,YAAY,CAAC,aAAa;QACxB,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YACvD,CAAC,CAAC,OAAO,CAAC,aAAa;YACvB,CAAC,CAAC,UAAU,CAAC,aAAa,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;gBAC/D,CAAC,CAAC,UAAU,CAAC,aAAa;gBAC1B,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC;IAErC,OAAO,YAAY,CAAC;AACtB,CAAC","debug_id":"25044f10-3084-5717-91fe-cee3aa030acd"}
@@ -0,0 +1,7 @@
1
+ import { LocadexManager } from '../locadexManager.js';
2
+ import { Dag } from './createDag.js';
3
+ export declare function extractFiles(manager: LocadexManager): {
4
+ files: string[];
5
+ dag: Dag;
6
+ };
7
+ //# sourceMappingURL=extractFiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractFiles.d.ts","sourceRoot":"/","sources":["utils/dag/extractFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAa,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAShD,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG;IACrD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,GAAG,CAAC;CACV,CA+BA"}
@@ -0,0 +1,32 @@
1
+
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="996509db-1280-5f76-aa8f-6b3d3ffd7899")}catch(e){}}();
3
+ import { getChangedFiles } from '../lockfile.js';
4
+ import { findSourceFiles, filterFiles } from './matchFiles.js';
5
+ import { createDag } from './createDag.js';
6
+ import { findTsConfig, findWebpackConfig, findRequireConfig, } from '../fs/findConfigs.js';
7
+ import { logger } from '../../logging/logger.js';
8
+ // extracts list of files that should be processed
9
+ export function extractFiles(manager) {
10
+ const config = manager.getConfig();
11
+ // files with absolute paths
12
+ const allFiles = findSourceFiles(config.matchingFiles);
13
+ logger.debugMessage(`Found ${allFiles.length} matching files`);
14
+ const dag = createDag(allFiles, {
15
+ tsConfig: findTsConfig(),
16
+ webpackConfig: findWebpackConfig(),
17
+ requireConfig: findRequireConfig(),
18
+ });
19
+ // Create deep copy of topological order
20
+ const topologicalOrder = Array.from(dag.getTopologicalOrder());
21
+ // 2nd filter pass
22
+ const filteredFiles = filterFiles(config.matchingFiles, topologicalOrder);
23
+ logger.debugMessage(`Post-filter: ${filteredFiles.length} files`);
24
+ // Get lockfile path from manager
25
+ const lockfilePath = manager.getLockFilePath();
26
+ // Filter files to only include those with changed content hashes
27
+ const changedFiles = getChangedFiles(filteredFiles, lockfilePath);
28
+ logger.debugMessage(`Detected ${changedFiles.length} modified files`);
29
+ return { files: changedFiles, dag };
30
+ }
31
+ //# sourceMappingURL=extractFiles.js.map
32
+ //# debugId=996509db-1280-5f76-aa8f-6b3d3ffd7899
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractFiles.js","sources":["utils/dag/extractFiles.ts"],"sourceRoot":"/","sourcesContent":["import { LocadexManager } from '../locadexManager.js';\nimport { getChangedFiles } from '../lockfile.js';\nimport { findSourceFiles, filterFiles } from './matchFiles.js';\nimport { createDag, Dag } from './createDag.js';\nimport {\n findTsConfig,\n findWebpackConfig,\n findRequireConfig,\n} from '../fs/findConfigs.js';\nimport { logger } from '../../logging/logger.js';\n\n// extracts list of files that should be processed\nexport function extractFiles(manager: LocadexManager): {\n files: string[];\n dag: Dag;\n} {\n const config = manager.getConfig();\n\n // files with absolute paths\n const allFiles = findSourceFiles(config.matchingFiles);\n\n logger.debugMessage(`Found ${allFiles.length} matching files`);\n\n const dag = createDag(allFiles, {\n tsConfig: findTsConfig(),\n webpackConfig: findWebpackConfig(),\n requireConfig: findRequireConfig(),\n });\n\n // Create deep copy of topological order\n const topologicalOrder = Array.from(dag.getTopologicalOrder());\n\n // 2nd filter pass\n const filteredFiles = filterFiles(config.matchingFiles, topologicalOrder);\n\n logger.debugMessage(`Post-filter: ${filteredFiles.length} files`);\n\n // Get lockfile path from manager\n const lockfilePath = manager.getLockFilePath();\n\n // Filter files to only include those with changed content hashes\n const changedFiles = getChangedFiles(filteredFiles, lockfilePath);\n\n logger.debugMessage(`Detected ${changedFiles.length} modified files`);\n\n return { files: changedFiles, dag };\n}\n"],"names":[],"mappings":";;AACA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAO,MAAM,gBAAgB,CAAC;AAChD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,kDAAkD;AAClD,MAAM,UAAU,YAAY,CAAC,OAAuB;IAIlD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAEnC,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAEvD,MAAM,CAAC,YAAY,CAAC,SAAS,QAAQ,CAAC,MAAM,iBAAiB,CAAC,CAAC;IAE/D,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE;QAC9B,QAAQ,EAAE,YAAY,EAAE;QACxB,aAAa,EAAE,iBAAiB,EAAE;QAClC,aAAa,EAAE,iBAAiB,EAAE;KACnC,CAAC,CAAC;IAEH,wCAAwC;IACxC,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAE/D,kBAAkB;IAClB,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAE1E,MAAM,CAAC,YAAY,CAAC,gBAAgB,aAAa,CAAC,MAAM,QAAQ,CAAC,CAAC;IAElE,iCAAiC;IACjC,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAE/C,iEAAiE;IACjE,MAAM,YAAY,GAAG,eAAe,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAElE,MAAM,CAAC,YAAY,CAAC,YAAY,YAAY,CAAC,MAAM,iBAAiB,CAAC,CAAC;IAEtE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;AACtC,CAAC","debug_id":"996509db-1280-5f76-aa8f-6b3d3ffd7899"}
@@ -1,2 +1,3 @@
1
- export declare function findSourceFiles(globPatterns: string[], allowedExtensions: string[], cwd?: string): string[];
1
+ export declare function findSourceFiles(globPatterns: string[], cwd?: string): string[];
2
+ export declare function filterFiles(globPatterns: string[], filePaths: string[], cwd?: string): string[];
2
3
  //# sourceMappingURL=matchFiles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"matchFiles.d.ts","sourceRoot":"/","sources":["utils/dag/matchFiles.ts"],"names":[],"mappings":"AASA,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EAAE,EACtB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,GAAG,GAAE,MAAsB,GAC1B,MAAM,EAAE,CA0CV"}
1
+ {"version":3,"file":"matchFiles.d.ts","sourceRoot":"/","sources":["utils/dag/matchFiles.ts"],"names":[],"mappings":"AAWA,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EAAE,EACtB,GAAG,GAAE,MAAsB,GAC1B,MAAM,EAAE,CAwCV;AAED,wBAAgB,WAAW,CACzB,YAAY,EAAE,MAAM,EAAE,EACtB,SAAS,EAAE,MAAM,EAAE,EACnB,GAAG,GAAE,MAAsB,GAC1B,MAAM,EAAE,CAuBV"}
@@ -1,10 +1,12 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d7f04102-24fc-5f58-985d-f0f23b8d105f")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="385e3c9c-1912-5a98-98b9-de9a8d7bff43")}catch(e){}}();
3
3
  import { logger } from '../../logging/logger.js';
4
4
  import * as path from 'node:path';
5
5
  import fg from 'fast-glob';
6
+ import micromatch from 'micromatch';
7
+ const { isMatch } = micromatch;
6
8
  import { DAG_IGNORED_EXTENSIONS, DAG_IGNORED_FILES, DAG_IGNORED_PATTERNS, } from '../shared.js';
7
- export function findSourceFiles(globPatterns, allowedExtensions, cwd = process.cwd()) {
9
+ export function findSourceFiles(globPatterns, cwd = process.cwd()) {
8
10
  const allFiles = [];
9
11
  for (const pattern of globPatterns) {
10
12
  try {
@@ -25,16 +27,35 @@ export function findSourceFiles(globPatterns, allowedExtensions, cwd = process.c
25
27
  // Filter by extensions and apply blacklists
26
28
  const filteredFiles = uniqueFiles.filter((file) => {
27
29
  const filename = path.basename(file);
28
- const ext = path.extname(file);
29
30
  const hasBlacklistedExtension = DAG_IGNORED_EXTENSIONS.some((blacklistedExt) => filename.endsWith(blacklistedExt));
30
31
  // Skip blacklisted extensions and files
31
32
  if (hasBlacklistedExtension || DAG_IGNORED_FILES.includes(filename)) {
32
33
  return false;
33
34
  }
34
- // Apply extension filter
35
- return allowedExtensions.includes(ext);
35
+ return true;
36
36
  });
37
37
  return filteredFiles;
38
38
  }
39
+ export function filterFiles(globPatterns, filePaths, cwd = process.cwd()) {
40
+ if (globPatterns.length === 0) {
41
+ return filePaths;
42
+ }
43
+ return filePaths.filter((filePath) => {
44
+ // Convert to relative path if absolute
45
+ const relativePath = path.isAbsolute(filePath)
46
+ ? path.relative(cwd, filePath)
47
+ : filePath;
48
+ // Check if file matches any of the glob patterns
49
+ return globPatterns.some((pattern) => {
50
+ try {
51
+ return isMatch(relativePath, pattern);
52
+ }
53
+ catch (error) {
54
+ logger.debugMessage(`Failed to match file "${filePath}" against pattern "${pattern}": ${error}`);
55
+ return false;
56
+ }
57
+ });
58
+ });
59
+ }
39
60
  //# sourceMappingURL=matchFiles.js.map
40
- //# debugId=d7f04102-24fc-5f58-985d-f0f23b8d105f
61
+ //# debugId=385e3c9c-1912-5a98-98b9-de9a8d7bff43
@@ -1 +1 @@
1
- {"version":3,"file":"matchFiles.js","sources":["utils/dag/matchFiles.ts"],"sourceRoot":"/","sourcesContent":["import { logger } from '../../logging/logger.js';\nimport * as path from 'node:path';\nimport fg from 'fast-glob';\nimport {\n DAG_IGNORED_EXTENSIONS,\n DAG_IGNORED_FILES,\n DAG_IGNORED_PATTERNS,\n} from '../shared.js';\n\nexport function findSourceFiles(\n globPatterns: string[],\n allowedExtensions: string[],\n cwd: string = process.cwd()\n): string[] {\n const allFiles: string[] = [];\n\n for (const pattern of globPatterns) {\n try {\n const matchedFiles = fg.sync(pattern, {\n cwd,\n absolute: true,\n onlyFiles: true,\n ignore: DAG_IGNORED_PATTERNS,\n });\n\n allFiles.push(...matchedFiles);\n } catch (error) {\n logger.debugMessage(\n `Failed to process glob pattern \"${pattern}\": ${error}`\n );\n }\n }\n\n // Remove duplicates\n const uniqueFiles = Array.from(new Set(allFiles));\n\n // Filter by extensions and apply blacklists\n const filteredFiles = uniqueFiles.filter((file) => {\n const filename = path.basename(file);\n const ext = path.extname(file);\n\n const hasBlacklistedExtension = DAG_IGNORED_EXTENSIONS.some(\n (blacklistedExt) => filename.endsWith(blacklistedExt)\n );\n\n // Skip blacklisted extensions and files\n if (hasBlacklistedExtension || DAG_IGNORED_FILES.includes(filename)) {\n return false;\n }\n\n // Apply extension filter\n return allowedExtensions.includes(ext);\n });\n\n return filteredFiles;\n}\n"],"names":[],"mappings":";;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,MAAM,UAAU,eAAe,CAC7B,YAAsB,EACtB,iBAA2B,EAC3B,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE;gBACpC,GAAG;gBACH,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,oBAAoB;aAC7B,CAAC,CAAC;YAEH,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,YAAY,CACjB,mCAAmC,OAAO,MAAM,KAAK,EAAE,CACxD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAElD,4CAA4C;IAC5C,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE/B,MAAM,uBAAuB,GAAG,sBAAsB,CAAC,IAAI,CACzD,CAAC,cAAc,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CACtD,CAAC;QAEF,wCAAwC;QACxC,IAAI,uBAAuB,IAAI,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,yBAAyB;QACzB,OAAO,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC;AACvB,CAAC","debug_id":"d7f04102-24fc-5f58-985d-f0f23b8d105f"}
1
+ {"version":3,"file":"matchFiles.js","sources":["utils/dag/matchFiles.ts"],"sourceRoot":"/","sourcesContent":["import { logger } from '../../logging/logger.js';\nimport * as path from 'node:path';\nimport fg from 'fast-glob';\nimport micromatch from 'micromatch';\nconst { isMatch } = micromatch;\nimport {\n DAG_IGNORED_EXTENSIONS,\n DAG_IGNORED_FILES,\n DAG_IGNORED_PATTERNS,\n} from '../shared.js';\n\nexport function findSourceFiles(\n globPatterns: string[],\n cwd: string = process.cwd()\n): string[] {\n const allFiles: string[] = [];\n\n for (const pattern of globPatterns) {\n try {\n const matchedFiles = fg.sync(pattern, {\n cwd,\n absolute: true,\n onlyFiles: true,\n ignore: DAG_IGNORED_PATTERNS,\n });\n\n allFiles.push(...matchedFiles);\n } catch (error) {\n logger.debugMessage(\n `Failed to process glob pattern \"${pattern}\": ${error}`\n );\n }\n }\n\n // Remove duplicates\n const uniqueFiles = Array.from(new Set(allFiles));\n\n // Filter by extensions and apply blacklists\n const filteredFiles = uniqueFiles.filter((file) => {\n const filename = path.basename(file);\n\n const hasBlacklistedExtension = DAG_IGNORED_EXTENSIONS.some(\n (blacklistedExt) => filename.endsWith(blacklistedExt)\n );\n\n // Skip blacklisted extensions and files\n if (hasBlacklistedExtension || DAG_IGNORED_FILES.includes(filename)) {\n return false;\n }\n\n return true;\n });\n\n return filteredFiles;\n}\n\nexport function filterFiles(\n globPatterns: string[],\n filePaths: string[],\n cwd: string = process.cwd()\n): string[] {\n if (globPatterns.length === 0) {\n return filePaths;\n }\n\n return filePaths.filter((filePath) => {\n // Convert to relative path if absolute\n const relativePath = path.isAbsolute(filePath)\n ? path.relative(cwd, filePath)\n : filePath;\n\n // Check if file matches any of the glob patterns\n return globPatterns.some((pattern) => {\n try {\n return isMatch(relativePath, pattern);\n } catch (error) {\n logger.debugMessage(\n `Failed to match file \"${filePath}\" against pattern \"${pattern}\": ${error}`\n );\n return false;\n }\n });\n });\n}\n"],"names":[],"mappings":";;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,MAAM,UAAU,eAAe,CAC7B,YAAsB,EACtB,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE;gBACpC,GAAG;gBACH,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,oBAAoB;aAC7B,CAAC,CAAC;YAEH,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,YAAY,CACjB,mCAAmC,OAAO,MAAM,KAAK,EAAE,CACxD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAElD,4CAA4C;IAC5C,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAErC,MAAM,uBAAuB,GAAG,sBAAsB,CAAC,IAAI,CACzD,CAAC,cAAc,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CACtD,CAAC;QAEF,wCAAwC;QACxC,IAAI,uBAAuB,IAAI,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,YAAsB,EACtB,SAAmB,EACnB,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QACnC,uCAAuC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC5C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;YAC9B,CAAC,CAAC,QAAQ,CAAC;QAEb,iDAAiD;QACjD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC;gBACH,OAAO,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,YAAY,CACjB,yBAAyB,QAAQ,sBAAsB,OAAO,MAAM,KAAK,EAAE,CAC5E,CAAC;gBACF,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC","debug_id":"385e3c9c-1912-5a98-98b9-de9a8d7bff43"}
@@ -1 +1 @@
1
- {"version":3,"file":"locadexManager.d.ts","sourceRoot":"/","sources":["utils/locadexManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA0B,MAAM,iBAAiB,CAAC;AAU3E,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAM5D,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,GAAG,OAAO,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAoBD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA6B;IACpD,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAGf;IACF,OAAO,CAAC,oBAAoB,CAAkB;IAC9C,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,MAAM,CAAgB;IAC9B,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO;IA4ED,cAAc;IAsDpB,MAAM,CAAC,WAAW,IAAI,cAAc;IAOpC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE;QACxB,YAAY,EAAE,KAAK,GAAG,OAAO,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACtC,UAAU,EAAE,UAAU,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;KACjC,GAAG,IAAI;IAgBR,MAAM,CAAC,KAAK,IAAI,IAAI;IAOpB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB;IAQ/C,eAAe,IAAI,IAAI;IAajB,iBAAiB,IAAI,OAAO,CAAC;QACjC,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,gBAAgB,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;IAmBT,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOpC,YAAY,IAAI,GAAG,CACjB,MAAM,EACN;QAAE,KAAK,EAAE,gBAAgB,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAC/D;IAID,aAAa,IAAI,IAAI;IAkBrB,qBAAqB,IAAI,MAAM;IAG/B,mBAAmB,IAAI,MAAM;IAG7B,iBAAiB,IAAI,MAAM;IAG3B,YAAY,IAAI,MAAM;IAGtB,SAAS,IAAI,aAAa;IAI1B,eAAe,IAAI,MAAM;IAIzB,OAAO,IAAI,IAAI;IAmBf,aAAa,IAAI,MAAM;IAIvB,uBAAuB,IAAI,eAAe;CAG3C"}
1
+ {"version":3,"file":"locadexManager.d.ts","sourceRoot":"/","sources":["utils/locadexManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAUnD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAM5D,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,GAAG,OAAO,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAoBD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA6B;IACpD,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAGf;IACF,OAAO,CAAC,oBAAoB,CAAkB;IAC9C,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,MAAM,CAAgB;IAC9B,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO;IA2ED,cAAc;IAsDpB,MAAM,CAAC,WAAW,IAAI,cAAc;IAOpC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE;QACxB,YAAY,EAAE,KAAK,GAAG,OAAO,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACtC,UAAU,EAAE,UAAU,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;KACjC,GAAG,IAAI;IAgBR,MAAM,CAAC,KAAK,IAAI,IAAI;IAOpB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB;IAQ/C,eAAe,IAAI,IAAI;IAajB,iBAAiB,IAAI,OAAO,CAAC;QACjC,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,gBAAgB,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;IAmBT,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOpC,YAAY,IAAI,GAAG,CACjB,MAAM,EACN;QAAE,KAAK,EAAE,gBAAgB,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAC/D;IAID,aAAa,IAAI,IAAI;IAerB,qBAAqB,IAAI,MAAM;IAG/B,mBAAmB,IAAI,MAAM;IAG7B,iBAAiB,IAAI,MAAM;IAG3B,YAAY,IAAI,MAAM;IAGtB,SAAS,IAAI,aAAa;IAI1B,eAAe,IAAI,MAAM;IAIzB,OAAO,IAAI,IAAI;IAmBf,aAAa,IAAI,MAAM;IAIvB,uBAAuB,IAAI,eAAe;CAG3C"}
@@ -1,6 +1,6 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5a2c167e-7d34-5d40-81d2-5a25d6e25b73")}catch(e){}}();
3
- import { ClaudeCodeRunner, killAllClaudeProcesses } from './claudeCode.js';
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0f14c435-6150-5211-9dbd-d86fc0f35244")}catch(e){}}();
3
+ import { ClaudeCodeRunner } from './claudeCode.js';
4
4
  import { fromPackageRoot } from './getPaths.js';
5
5
  import fs from 'node:fs';
6
6
  import path from 'node:path';
@@ -66,7 +66,6 @@ export class LocadexManager {
66
66
  batchSize: this.config.batchSize,
67
67
  maxConcurrency: this.config.maxConcurrency,
68
68
  matchingFiles: this.config.matchingFiles,
69
- matchingExtensions: this.config.matchingExtensions,
70
69
  });
71
70
  addToGitIgnore(cwd, '.locadex/runs');
72
71
  this.maxConcurrency = this.config.maxConcurrency;
@@ -100,7 +99,7 @@ export class LocadexManager {
100
99
  gracefulShutdown.addHandler({
101
100
  name: 'locadex-manager-cleanup',
102
101
  handler: () => this.cleanup(),
103
- timeout: 5000,
102
+ timeout: 3000,
104
103
  });
105
104
  }
106
105
  async startMcpServer() {
@@ -125,7 +124,7 @@ export class LocadexManager {
125
124
  LOCADEX_LOG_FILE_PATH: this.logFile,
126
125
  PORT: port.toString(),
127
126
  },
128
- stdio: 'inherit',
127
+ stdio: ['ignore', 'inherit', 'inherit'],
129
128
  signal: this.mcpAbortController.signal,
130
129
  });
131
130
  this.mcpProcess.on('error', async (error) => {
@@ -170,7 +169,7 @@ export class LocadexManager {
170
169
  }
171
170
  }
172
171
  createSingleAgent(id) {
173
- return new ClaudeCodeRunner(this, {
172
+ return new ClaudeCodeRunner(this, this.agentAbortController, {
174
173
  apiKey: this.apiKey,
175
174
  mcpConfig: this.mcpConfigPath,
176
175
  id,
@@ -223,8 +222,6 @@ export class LocadexManager {
223
222
  for (const agentData of this.agentPool.values()) {
224
223
  agentData.busy = false;
225
224
  }
226
- // Kill all active Claude Code processes (fallback)
227
- killAllClaudeProcesses();
228
225
  // Clear the agent pool
229
226
  this.agentPool.clear();
230
227
  }
@@ -270,4 +267,4 @@ export class LocadexManager {
270
267
  }
271
268
  }
272
269
  //# sourceMappingURL=locadexManager.js.map
273
- //# debugId=5a2c167e-7d34-5d40-81d2-5a25d6e25b73
270
+ //# debugId=0f14c435-6150-5211-9dbd-d86fc0f35244