locadex 0.1.13 → 0.1.14-alpha.1

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 (92) hide show
  1. package/dist/cli.js +4 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/fixErrors.js +4 -1
  4. package/dist/commands/fixErrors.js.map +1 -1
  5. package/dist/commands/i18n.js +4 -1
  6. package/dist/commands/i18n.js.map +1 -1
  7. package/dist/commands/setup.js +4 -1
  8. package/dist/commands/setup.js.map +1 -1
  9. package/dist/index.js +4 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/logging/console.js +4 -1
  12. package/dist/logging/console.js.map +1 -1
  13. package/dist/logging/logger.js +4 -1
  14. package/dist/logging/logger.js.map +1 -1
  15. package/dist/mcp/getDocs.js +4 -1
  16. package/dist/mcp/getDocs.js.map +1 -1
  17. package/dist/mcp/getGuide.js +4 -1
  18. package/dist/mcp/getGuide.js.map +1 -1
  19. package/dist/mcp/getPort.js +4 -1
  20. package/dist/mcp/getPort.js.map +1 -1
  21. package/dist/mcp/tools/docs.js +4 -1
  22. package/dist/mcp/tools/docs.js.map +1 -1
  23. package/dist/mcp/tools/guides.js +4 -1
  24. package/dist/mcp/tools/guides.js.map +1 -1
  25. package/dist/mcp/tools/validate.js +4 -1
  26. package/dist/mcp/tools/validate.js.map +1 -1
  27. package/dist/mcp/validateEnv.js +4 -1
  28. package/dist/mcp/validateEnv.js.map +1 -1
  29. package/dist/mcp-sse.js +4 -1
  30. package/dist/mcp-sse.js.map +1 -1
  31. package/dist/mcp-stdio.js +4 -1
  32. package/dist/mcp-stdio.js.map +1 -1
  33. package/dist/prompts/system.js +4 -1
  34. package/dist/prompts/system.js.map +1 -1
  35. package/dist/resources/getResource.js +4 -1
  36. package/dist/resources/getResource.js.map +1 -1
  37. package/dist/tasks/concurrency.js +4 -1
  38. package/dist/tasks/concurrency.js.map +1 -1
  39. package/dist/tasks/fixErrors.js +4 -1
  40. package/dist/tasks/fixErrors.js.map +1 -1
  41. package/dist/tasks/i18n.d.ts.map +1 -1
  42. package/dist/tasks/i18n.js +8 -1
  43. package/dist/tasks/i18n.js.map +1 -1
  44. package/dist/tasks/setup.js +4 -1
  45. package/dist/tasks/setup.js.map +1 -1
  46. package/dist/telemetry.js +4 -1
  47. package/dist/telemetry.js.map +1 -1
  48. package/dist/types/claude-sdk.js +4 -1
  49. package/dist/types/claude-sdk.js.map +1 -1
  50. package/dist/types/cli.js +4 -1
  51. package/dist/types/cli.js.map +1 -1
  52. package/dist/utils/claudeCode.js +4 -1
  53. package/dist/utils/claudeCode.js.map +1 -1
  54. package/dist/utils/config.js +4 -1
  55. package/dist/utils/config.js.map +1 -1
  56. package/dist/utils/dag/createDag.js +4 -1
  57. package/dist/utils/dag/createDag.js.map +1 -1
  58. package/dist/utils/dag/extractFiles.js +4 -1
  59. package/dist/utils/dag/extractFiles.js.map +1 -1
  60. package/dist/utils/dag/getFiles.js +4 -1
  61. package/dist/utils/dag/getFiles.js.map +1 -1
  62. package/dist/utils/dag/matchFiles.js +4 -1
  63. package/dist/utils/dag/matchFiles.js.map +1 -1
  64. package/dist/utils/errors.js +4 -1
  65. package/dist/utils/errors.js.map +1 -1
  66. package/dist/utils/exec.js +4 -1
  67. package/dist/utils/exec.js.map +1 -1
  68. package/dist/utils/fs/findConfigs.js +4 -1
  69. package/dist/utils/fs/findConfigs.js.map +1 -1
  70. package/dist/utils/fs/getFiles.js +4 -1
  71. package/dist/utils/fs/getFiles.js.map +1 -1
  72. package/dist/utils/fs/git.js +4 -1
  73. package/dist/utils/fs/git.js.map +1 -1
  74. package/dist/utils/fs/writeFiles.js +4 -1
  75. package/dist/utils/fs/writeFiles.js.map +1 -1
  76. package/dist/utils/getPaths.js +4 -1
  77. package/dist/utils/getPaths.js.map +1 -1
  78. package/dist/utils/locadexManager.js +4 -1
  79. package/dist/utils/locadexManager.js.map +1 -1
  80. package/dist/utils/lockfile.js +4 -1
  81. package/dist/utils/lockfile.js.map +1 -1
  82. package/dist/utils/packages/installPackage.js +4 -1
  83. package/dist/utils/packages/installPackage.js.map +1 -1
  84. package/dist/utils/session.js +4 -1
  85. package/dist/utils/session.js.map +1 -1
  86. package/dist/utils/shared.js +4 -1
  87. package/dist/utils/shared.js.map +1 -1
  88. package/dist/utils/shutdown.js +4 -1
  89. package/dist/utils/shutdown.js.map +1 -1
  90. package/dist/utils/stats.js +4 -1
  91. package/dist/utils/stats.js.map +1 -1
  92. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"getPaths.js","sourceRoot":"/","sources":["utils/getPaths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,eAAe,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAExD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC","sourcesContent":["import path, { dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport fs from 'node:fs';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport function fromPackageRoot(relative: string) {\n return path.resolve(__dirname, `../../`, relative);\n}\n\nexport function getLocadexVersion(): string {\n const packageJsonPath = fromPackageRoot('package.json');\n\n if (!fs.existsSync(packageJsonPath)) {\n return 'unknown';\n }\n try {\n return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')).version;\n } catch (error) {\n return 'unknown';\n }\n}\n"]}
1
+ {"version":3,"file":"getPaths.js","sources":["utils/getPaths.ts"],"sourceRoot":"/","sourcesContent":["import path, { dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport fs from 'node:fs';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport function fromPackageRoot(relative: string) {\n return path.resolve(__dirname, `../../`, relative);\n}\n\nexport function getLocadexVersion(): string {\n const packageJsonPath = fromPackageRoot('package.json');\n\n if (!fs.existsSync(packageJsonPath)) {\n return 'unknown';\n }\n try {\n return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')).version;\n } catch (error) {\n return 'unknown';\n }\n}\n"],"names":[],"mappings":";;AAAA,OAAO,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,eAAe,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAExD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC","debug_id":"753d767d-b755-5567-ae1a-f45989169bc4"}
@@ -1,3 +1,5 @@
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]="f344147d-f05d-5384-b98f-6eb22b65f559")}catch(e){}}();
1
3
  import { ClaudeCodeRunner } from './claudeCode.js';
2
4
  import { fromPackageRoot } from './getPaths.js';
3
5
  import fs from 'node:fs';
@@ -296,4 +298,5 @@ export class LocadexManager {
296
298
  return this.aborted;
297
299
  }
298
300
  }
299
- //# sourceMappingURL=locadexManager.js.map
301
+ //# sourceMappingURL=locadexManager.js.map
302
+ //# debugId=f344147d-f05d-5384-b98f-6eb22b65f559
@@ -1 +1 @@
1
- {"version":3,"file":"locadexManager.js","sourceRoot":"/","sources":["utils/locadexManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { ClaudeCodeRunner, ClaudeRunnerOptions } from './claudeCode.js';\nimport { fromPackageRoot } from './getPaths.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { FileEntry } from './dag/getFiles.js';\nimport { logger } from '../logging/logger.js';\nimport { addToGitIgnore } from './fs/writeFiles.js';\nimport { spawn } from 'node:child_process';\nimport type { ChildProcess } from 'node:child_process';\nimport { setTimeout } from 'node:timers';\nimport { AgentStats } from './stats.js';\nimport { CliOptions, LocadexConfig } from '../types/cli.js';\nimport { findAvailablePort } from '../mcp/getPort.js';\nimport { createConfig, getConfig } from './config.js';\nimport { gracefulShutdown, exit } from './shutdown.js';\nimport { LOCKFILE_NAME } from './lockfile.js';\n\nexport interface LocadexRunMetadata {\n createdAt: string;\n locadexVersion: string;\n workingDirectory: string;\n projectName: string;\n transport: 'sse' | 'stdio';\n tempDirectory: string;\n nodeVersion: string;\n platform: string;\n arch: string;\n logFile: string;\n batchSize: number;\n maxConcurrency: number;\n [key: string]: any;\n}\n\nconst mcpSseConfig = {\n mcpServers: {\n locadex: {\n type: 'sse',\n url: 'http://localhost:8888/sse',\n },\n },\n};\nconst mcpStdioConfig = {\n mcpServers: {\n locadex: {\n command: 'locadex-mcp',\n args: [],\n env: {},\n },\n },\n};\n\nexport class LocadexManager {\n private static instance: LocadexManager | undefined;\n private mcpProcess: ChildProcess | undefined;\n private mcpTransport: 'sse' | 'stdio';\n\n // Paths\n private mcpConfigPath: string;\n private filesStateFilePath: string;\n private metadataFilePath: string;\n private lockFilePath: string;\n private currentRunDir: string;\n public locadexDirectory: string;\n public appDirectory: string;\n public rootDirectory: string;\n\n // Config\n private apiKey: string;\n private maxConcurrency: number;\n private batchSize: number;\n private timeout: number;\n private defaultSoftTurnLimit: number = 100;\n\n // Agent pool\n private agentPool: Map<string, { agent: ClaudeCodeRunner; busy: boolean }>;\n\n // Abort controllers\n private agentAbortController: AbortController;\n private mcpAbortController: AbortController;\n private aborted: boolean = false;\n\n // State\n private agentMutex = Promise.resolve();\n private config: LocadexConfig;\n private cliOptions: CliOptions;\n public stats: AgentStats;\n public logFile: string;\n\n private constructor(params: {\n rootDirectory: string;\n appDirectory: string;\n mcpTransport: 'sse' | 'stdio';\n apiKey: string;\n metadata: Partial<LocadexRunMetadata>;\n cliOptions: CliOptions;\n options: Partial<LocadexConfig>;\n }) {\n this.apiKey = params.apiKey;\n this.agentPool = new Map();\n this.stats = new AgentStats();\n this.mcpTransport = params.mcpTransport;\n this.cliOptions = params.cliOptions;\n this.agentAbortController = new AbortController();\n this.mcpAbortController = new AbortController();\n\n // appDirectory is the absolute path to the app directory\n this.appDirectory = params.appDirectory;\n this.rootDirectory = params.rootDirectory;\n\n this.locadexDirectory = path.resolve(this.rootDirectory, '.locadex');\n this.currentRunDir = path.resolve(\n this.locadexDirectory,\n 'runs',\n Date.now().toString()\n );\n fs.mkdirSync(this.currentRunDir, { recursive: true });\n\n this.config = getConfig(\n this.locadexDirectory,\n this.rootDirectory,\n this.appDirectory,\n params.options\n );\n logger.debugMessage(\n `Locadex loaded with config: ${JSON.stringify(this.config, null, 2)}`\n );\n\n createConfig(this.locadexDirectory, {\n batchSize: this.config.batchSize,\n maxConcurrency: this.config.maxConcurrency,\n matchingFiles: this.config.matchingFiles,\n timeout: this.config.timeout,\n });\n\n addToGitIgnore(this.rootDirectory, '.locadex/runs');\n\n this.maxConcurrency = this.config.maxConcurrency;\n this.batchSize = this.config.batchSize;\n this.timeout = this.config.timeout;\n this.mcpConfigPath = path.resolve(this.currentRunDir, 'mcp.json');\n this.filesStateFilePath = path.resolve(\n this.currentRunDir,\n 'files-state.json'\n );\n this.metadataFilePath = path.resolve(this.currentRunDir, 'metadata.json');\n this.logFile = path.resolve(this.currentRunDir, 'log.txt');\n this.lockFilePath = path.resolve(this.locadexDirectory, LOCKFILE_NAME);\n\n // Create files-state.json\n const filesState: FileEntry[] = [];\n fs.writeFileSync(\n this.filesStateFilePath,\n JSON.stringify(filesState, null, 2)\n );\n\n // Create metadata.json\n const metadata: LocadexRunMetadata = {\n createdAt: new Date().toISOString(),\n locadexVersion: JSON.parse(\n fs.readFileSync(fromPackageRoot('package.json'), 'utf8')\n ).version,\n workingDirectory: this.appDirectory,\n projectName: path.basename(this.appDirectory),\n transport: params.mcpTransport,\n tempDirectory: this.currentRunDir,\n nodeVersion: process.version,\n platform: process.platform,\n arch: process.arch,\n logFile: this.logFile,\n batchSize: this.config.batchSize,\n maxConcurrency: this.config.maxConcurrency,\n ...params.metadata,\n };\n fs.writeFileSync(this.metadataFilePath, JSON.stringify(metadata, null, 2));\n\n // Register cleanup with graceful shutdown\n gracefulShutdown.addHandler({\n name: 'locadex-manager-cleanup',\n handler: () => this.cleanup(),\n timeout: 3000,\n });\n }\n\n async startMcpServer() {\n const env = {\n LOCADEX_FILES_STATE_FILE_PATH: this.filesStateFilePath,\n LOCADEX_LOG_FILE_PATH: this.logFile,\n LOCADEX_VERBOSE: logger.verbose ? 'true' : 'false',\n LOCADEX_DEBUG: logger.debug ? 'true' : 'false',\n APP_DIRECTORY: this.appDirectory,\n };\n if (this.mcpTransport === 'stdio') {\n mcpStdioConfig.mcpServers.locadex.env = env;\n fs.writeFileSync(\n this.mcpConfigPath,\n JSON.stringify(mcpStdioConfig, null, 2)\n );\n logger.debugMessage(\n `Starting MCP server on stdio with config: ${JSON.stringify(\n mcpStdioConfig,\n null,\n 2\n )}`\n );\n } else {\n // First, search for an available port\n const port = await findAvailablePort(8888);\n mcpSseConfig.mcpServers.locadex.url = `http://localhost:${port}/sse`;\n fs.writeFileSync(\n this.mcpConfigPath,\n JSON.stringify(mcpSseConfig, null, 2)\n );\n\n logger.debugMessage(\n `Starting MCP server on port ${port} with config: ${JSON.stringify(\n mcpSseConfig,\n null,\n 2\n )}`\n );\n\n this.mcpProcess = spawn('node', [fromPackageRoot('dist/mcp-sse.js')], {\n env: {\n ...process.env,\n ...env,\n PORT: port.toString(),\n },\n stdio: ['ignore', 'inherit', 'inherit'],\n signal: this.mcpAbortController.signal,\n });\n\n this.mcpProcess.on('error', async (error) => {\n if (error.name === 'AbortError') {\n logger.debugMessage('MCP server was closed');\n } else {\n logger.error(`MCP server failed to start: ${error.message}`);\n await exit(1);\n }\n });\n\n this.mcpProcess.on('exit', async (code, signal) => {\n if (code !== 0 && code !== null) {\n logger.error(`MCP server exited with code ${code}`);\n await exit(code as 0 | 1);\n }\n if (signal) {\n logger.error(`MCP server was killed with signal ${signal}`);\n await exit(0);\n }\n });\n }\n }\n\n static getInstance(): LocadexManager {\n if (!LocadexManager.instance) {\n throw new Error('LocadexManager not initialized');\n }\n return LocadexManager.instance;\n }\n\n static initialize(params: {\n rootDirectory: string;\n appDirectory: string;\n mcpTransport: 'sse' | 'stdio';\n apiKey: string;\n metadata: Partial<LocadexRunMetadata>;\n cliOptions: CliOptions;\n options: Partial<LocadexConfig>;\n }): void {\n if (!LocadexManager.instance) {\n LocadexManager.instance = new LocadexManager(params);\n logger.initialize(params.cliOptions, LocadexManager.instance.logFile);\n\n logger.debugMessage(\n `Locadex loaded with config: ${JSON.stringify(\n LocadexManager.instance.config,\n null,\n 2\n )}`\n );\n LocadexManager.instance.startMcpServer();\n }\n }\n\n static reset(): void {\n if (LocadexManager.instance) {\n LocadexManager.instance.cleanup();\n LocadexManager.instance = undefined;\n }\n }\n\n createSingleAgent(\n id: string,\n options: ClaudeRunnerOptions\n ): ClaudeCodeRunner {\n return new ClaudeCodeRunner(this, this.agentAbortController, {\n apiKey: this.apiKey,\n mcpConfig: this.mcpConfigPath,\n softTurnLimit: options.softTurnLimit ?? this.defaultSoftTurnLimit,\n id,\n });\n }\n\n createAgentPool(options: ClaudeRunnerOptions): void {\n if (this.agentPool.size === 0) {\n for (let i = 0; i < this.maxConcurrency; i++) {\n const agentId = `claude_task_agent_${i + 1}`;\n this.agentPool.set(agentId, {\n agent: this.createSingleAgent(agentId, options),\n busy: false,\n });\n }\n }\n }\n\n async getAvailableAgent(): Promise<{\n id: string;\n agent: ClaudeCodeRunner;\n } | null> {\n return new Promise((resolve) => {\n this.agentMutex = this.agentMutex.then(() => {\n for (const [id, agentData] of this.agentPool) {\n if (!agentData.busy) {\n agentData.busy = true;\n resolve({\n id,\n agent: agentData.agent,\n });\n return;\n }\n }\n resolve(null);\n });\n });\n }\n\n markAgentFree(agentId: string): void {\n const agentData = this.agentPool.get(agentId);\n if (agentData) {\n agentData.busy = false;\n }\n }\n\n getAgentPool(): Map<\n string,\n { agent: ClaudeCodeRunner; sessionId?: string; busy: boolean }\n > {\n return this.agentPool;\n }\n\n cleanupAgents(): void {\n logger.debugMessage('Cleaning up all Claude Code agents and processes');\n\n // Abort all active processes\n this.agentAbortController.abort();\n\n // Mark agents as free\n for (const agentData of this.agentPool.values()) {\n agentData.busy = false;\n }\n\n // Clear the agent pool\n this.agentPool.clear();\n }\n\n getFilesStateFilePath(): string {\n return this.filesStateFilePath;\n }\n getMetadataFilePath(): string {\n return this.metadataFilePath;\n }\n getMaxConcurrency(): number {\n return this.maxConcurrency;\n }\n getBatchSize(): number {\n return this.batchSize;\n }\n getTimeoutFactor(): number {\n return this.timeout;\n }\n getConfig(): LocadexConfig {\n return this.config;\n }\n\n getCliOptions(): CliOptions {\n return this.cliOptions;\n }\n\n getLockFilePath(): string {\n return this.lockFilePath;\n }\n\n cleanup(): void {\n if (this.aborted) {\n return;\n }\n this.aborted = true;\n // Clean up agents first (if not already done)\n this.cleanupAgents();\n\n // Clean up MCP process using abort controller\n if (this.mcpProcess && !this.mcpProcess.killed) {\n logger.debugMessage('Terminating MCP process via abort controller');\n this.mcpAbortController.abort();\n\n // Give the process a moment to handle the abort signal gracefully\n setTimeout(() => {\n if (this.mcpProcess && !this.mcpProcess.killed) {\n logger.debugMessage('Force killing MCP process as fallback');\n this.mcpProcess.kill('SIGTERM');\n }\n }, 1000);\n }\n }\n\n getLogDirectory(): string {\n return this.currentRunDir;\n }\n\n getAgentAbortController(): AbortController {\n return this.agentAbortController;\n }\n\n isAborted(): boolean {\n return this.aborted;\n }\n}\n"]}
1
+ {"version":3,"file":"locadexManager.js","sources":["utils/locadexManager.ts"],"sourceRoot":"/","sourcesContent":["import { ClaudeCodeRunner, ClaudeRunnerOptions } from './claudeCode.js';\nimport { fromPackageRoot } from './getPaths.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { FileEntry } from './dag/getFiles.js';\nimport { logger } from '../logging/logger.js';\nimport { addToGitIgnore } from './fs/writeFiles.js';\nimport { spawn } from 'node:child_process';\nimport type { ChildProcess } from 'node:child_process';\nimport { setTimeout } from 'node:timers';\nimport { AgentStats } from './stats.js';\nimport { CliOptions, LocadexConfig } from '../types/cli.js';\nimport { findAvailablePort } from '../mcp/getPort.js';\nimport { createConfig, getConfig } from './config.js';\nimport { gracefulShutdown, exit } from './shutdown.js';\nimport { LOCKFILE_NAME } from './lockfile.js';\n\nexport interface LocadexRunMetadata {\n createdAt: string;\n locadexVersion: string;\n workingDirectory: string;\n projectName: string;\n transport: 'sse' | 'stdio';\n tempDirectory: string;\n nodeVersion: string;\n platform: string;\n arch: string;\n logFile: string;\n batchSize: number;\n maxConcurrency: number;\n [key: string]: any;\n}\n\nconst mcpSseConfig = {\n mcpServers: {\n locadex: {\n type: 'sse',\n url: 'http://localhost:8888/sse',\n },\n },\n};\nconst mcpStdioConfig = {\n mcpServers: {\n locadex: {\n command: 'locadex-mcp',\n args: [],\n env: {},\n },\n },\n};\n\nexport class LocadexManager {\n private static instance: LocadexManager | undefined;\n private mcpProcess: ChildProcess | undefined;\n private mcpTransport: 'sse' | 'stdio';\n\n // Paths\n private mcpConfigPath: string;\n private filesStateFilePath: string;\n private metadataFilePath: string;\n private lockFilePath: string;\n private currentRunDir: string;\n public locadexDirectory: string;\n public appDirectory: string;\n public rootDirectory: string;\n\n // Config\n private apiKey: string;\n private maxConcurrency: number;\n private batchSize: number;\n private timeout: number;\n private defaultSoftTurnLimit: number = 100;\n\n // Agent pool\n private agentPool: Map<string, { agent: ClaudeCodeRunner; busy: boolean }>;\n\n // Abort controllers\n private agentAbortController: AbortController;\n private mcpAbortController: AbortController;\n private aborted: boolean = false;\n\n // State\n private agentMutex = Promise.resolve();\n private config: LocadexConfig;\n private cliOptions: CliOptions;\n public stats: AgentStats;\n public logFile: string;\n\n private constructor(params: {\n rootDirectory: string;\n appDirectory: string;\n mcpTransport: 'sse' | 'stdio';\n apiKey: string;\n metadata: Partial<LocadexRunMetadata>;\n cliOptions: CliOptions;\n options: Partial<LocadexConfig>;\n }) {\n this.apiKey = params.apiKey;\n this.agentPool = new Map();\n this.stats = new AgentStats();\n this.mcpTransport = params.mcpTransport;\n this.cliOptions = params.cliOptions;\n this.agentAbortController = new AbortController();\n this.mcpAbortController = new AbortController();\n\n // appDirectory is the absolute path to the app directory\n this.appDirectory = params.appDirectory;\n this.rootDirectory = params.rootDirectory;\n\n this.locadexDirectory = path.resolve(this.rootDirectory, '.locadex');\n this.currentRunDir = path.resolve(\n this.locadexDirectory,\n 'runs',\n Date.now().toString()\n );\n fs.mkdirSync(this.currentRunDir, { recursive: true });\n\n this.config = getConfig(\n this.locadexDirectory,\n this.rootDirectory,\n this.appDirectory,\n params.options\n );\n logger.debugMessage(\n `Locadex loaded with config: ${JSON.stringify(this.config, null, 2)}`\n );\n\n createConfig(this.locadexDirectory, {\n batchSize: this.config.batchSize,\n maxConcurrency: this.config.maxConcurrency,\n matchingFiles: this.config.matchingFiles,\n timeout: this.config.timeout,\n });\n\n addToGitIgnore(this.rootDirectory, '.locadex/runs');\n\n this.maxConcurrency = this.config.maxConcurrency;\n this.batchSize = this.config.batchSize;\n this.timeout = this.config.timeout;\n this.mcpConfigPath = path.resolve(this.currentRunDir, 'mcp.json');\n this.filesStateFilePath = path.resolve(\n this.currentRunDir,\n 'files-state.json'\n );\n this.metadataFilePath = path.resolve(this.currentRunDir, 'metadata.json');\n this.logFile = path.resolve(this.currentRunDir, 'log.txt');\n this.lockFilePath = path.resolve(this.locadexDirectory, LOCKFILE_NAME);\n\n // Create files-state.json\n const filesState: FileEntry[] = [];\n fs.writeFileSync(\n this.filesStateFilePath,\n JSON.stringify(filesState, null, 2)\n );\n\n // Create metadata.json\n const metadata: LocadexRunMetadata = {\n createdAt: new Date().toISOString(),\n locadexVersion: JSON.parse(\n fs.readFileSync(fromPackageRoot('package.json'), 'utf8')\n ).version,\n workingDirectory: this.appDirectory,\n projectName: path.basename(this.appDirectory),\n transport: params.mcpTransport,\n tempDirectory: this.currentRunDir,\n nodeVersion: process.version,\n platform: process.platform,\n arch: process.arch,\n logFile: this.logFile,\n batchSize: this.config.batchSize,\n maxConcurrency: this.config.maxConcurrency,\n ...params.metadata,\n };\n fs.writeFileSync(this.metadataFilePath, JSON.stringify(metadata, null, 2));\n\n // Register cleanup with graceful shutdown\n gracefulShutdown.addHandler({\n name: 'locadex-manager-cleanup',\n handler: () => this.cleanup(),\n timeout: 3000,\n });\n }\n\n async startMcpServer() {\n const env = {\n LOCADEX_FILES_STATE_FILE_PATH: this.filesStateFilePath,\n LOCADEX_LOG_FILE_PATH: this.logFile,\n LOCADEX_VERBOSE: logger.verbose ? 'true' : 'false',\n LOCADEX_DEBUG: logger.debug ? 'true' : 'false',\n APP_DIRECTORY: this.appDirectory,\n };\n if (this.mcpTransport === 'stdio') {\n mcpStdioConfig.mcpServers.locadex.env = env;\n fs.writeFileSync(\n this.mcpConfigPath,\n JSON.stringify(mcpStdioConfig, null, 2)\n );\n logger.debugMessage(\n `Starting MCP server on stdio with config: ${JSON.stringify(\n mcpStdioConfig,\n null,\n 2\n )}`\n );\n } else {\n // First, search for an available port\n const port = await findAvailablePort(8888);\n mcpSseConfig.mcpServers.locadex.url = `http://localhost:${port}/sse`;\n fs.writeFileSync(\n this.mcpConfigPath,\n JSON.stringify(mcpSseConfig, null, 2)\n );\n\n logger.debugMessage(\n `Starting MCP server on port ${port} with config: ${JSON.stringify(\n mcpSseConfig,\n null,\n 2\n )}`\n );\n\n this.mcpProcess = spawn('node', [fromPackageRoot('dist/mcp-sse.js')], {\n env: {\n ...process.env,\n ...env,\n PORT: port.toString(),\n },\n stdio: ['ignore', 'inherit', 'inherit'],\n signal: this.mcpAbortController.signal,\n });\n\n this.mcpProcess.on('error', async (error) => {\n if (error.name === 'AbortError') {\n logger.debugMessage('MCP server was closed');\n } else {\n logger.error(`MCP server failed to start: ${error.message}`);\n await exit(1);\n }\n });\n\n this.mcpProcess.on('exit', async (code, signal) => {\n if (code !== 0 && code !== null) {\n logger.error(`MCP server exited with code ${code}`);\n await exit(code as 0 | 1);\n }\n if (signal) {\n logger.error(`MCP server was killed with signal ${signal}`);\n await exit(0);\n }\n });\n }\n }\n\n static getInstance(): LocadexManager {\n if (!LocadexManager.instance) {\n throw new Error('LocadexManager not initialized');\n }\n return LocadexManager.instance;\n }\n\n static initialize(params: {\n rootDirectory: string;\n appDirectory: string;\n mcpTransport: 'sse' | 'stdio';\n apiKey: string;\n metadata: Partial<LocadexRunMetadata>;\n cliOptions: CliOptions;\n options: Partial<LocadexConfig>;\n }): void {\n if (!LocadexManager.instance) {\n LocadexManager.instance = new LocadexManager(params);\n logger.initialize(params.cliOptions, LocadexManager.instance.logFile);\n\n logger.debugMessage(\n `Locadex loaded with config: ${JSON.stringify(\n LocadexManager.instance.config,\n null,\n 2\n )}`\n );\n LocadexManager.instance.startMcpServer();\n }\n }\n\n static reset(): void {\n if (LocadexManager.instance) {\n LocadexManager.instance.cleanup();\n LocadexManager.instance = undefined;\n }\n }\n\n createSingleAgent(\n id: string,\n options: ClaudeRunnerOptions\n ): ClaudeCodeRunner {\n return new ClaudeCodeRunner(this, this.agentAbortController, {\n apiKey: this.apiKey,\n mcpConfig: this.mcpConfigPath,\n softTurnLimit: options.softTurnLimit ?? this.defaultSoftTurnLimit,\n id,\n });\n }\n\n createAgentPool(options: ClaudeRunnerOptions): void {\n if (this.agentPool.size === 0) {\n for (let i = 0; i < this.maxConcurrency; i++) {\n const agentId = `claude_task_agent_${i + 1}`;\n this.agentPool.set(agentId, {\n agent: this.createSingleAgent(agentId, options),\n busy: false,\n });\n }\n }\n }\n\n async getAvailableAgent(): Promise<{\n id: string;\n agent: ClaudeCodeRunner;\n } | null> {\n return new Promise((resolve) => {\n this.agentMutex = this.agentMutex.then(() => {\n for (const [id, agentData] of this.agentPool) {\n if (!agentData.busy) {\n agentData.busy = true;\n resolve({\n id,\n agent: agentData.agent,\n });\n return;\n }\n }\n resolve(null);\n });\n });\n }\n\n markAgentFree(agentId: string): void {\n const agentData = this.agentPool.get(agentId);\n if (agentData) {\n agentData.busy = false;\n }\n }\n\n getAgentPool(): Map<\n string,\n { agent: ClaudeCodeRunner; sessionId?: string; busy: boolean }\n > {\n return this.agentPool;\n }\n\n cleanupAgents(): void {\n logger.debugMessage('Cleaning up all Claude Code agents and processes');\n\n // Abort all active processes\n this.agentAbortController.abort();\n\n // Mark agents as free\n for (const agentData of this.agentPool.values()) {\n agentData.busy = false;\n }\n\n // Clear the agent pool\n this.agentPool.clear();\n }\n\n getFilesStateFilePath(): string {\n return this.filesStateFilePath;\n }\n getMetadataFilePath(): string {\n return this.metadataFilePath;\n }\n getMaxConcurrency(): number {\n return this.maxConcurrency;\n }\n getBatchSize(): number {\n return this.batchSize;\n }\n getTimeoutFactor(): number {\n return this.timeout;\n }\n getConfig(): LocadexConfig {\n return this.config;\n }\n\n getCliOptions(): CliOptions {\n return this.cliOptions;\n }\n\n getLockFilePath(): string {\n return this.lockFilePath;\n }\n\n cleanup(): void {\n if (this.aborted) {\n return;\n }\n this.aborted = true;\n // Clean up agents first (if not already done)\n this.cleanupAgents();\n\n // Clean up MCP process using abort controller\n if (this.mcpProcess && !this.mcpProcess.killed) {\n logger.debugMessage('Terminating MCP process via abort controller');\n this.mcpAbortController.abort();\n\n // Give the process a moment to handle the abort signal gracefully\n setTimeout(() => {\n if (this.mcpProcess && !this.mcpProcess.killed) {\n logger.debugMessage('Force killing MCP process as fallback');\n this.mcpProcess.kill('SIGTERM');\n }\n }, 1000);\n }\n }\n\n getLogDirectory(): string {\n return this.currentRunDir;\n }\n\n getAgentAbortController(): AbortController {\n return this.agentAbortController;\n }\n\n isAborted(): boolean {\n return this.aborted;\n }\n}\n"],"names":[],"mappings":"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","debug_id":"f344147d-f05d-5384-b98f-6eb22b65f559"}
@@ -1,3 +1,5 @@
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]="c0f5da92-0092-53a4-a8ad-d257765ab6f6")}catch(e){}}();
1
3
  import crypto from 'node:crypto';
2
4
  import fs from 'node:fs';
3
5
  import path from 'node:path';
@@ -103,4 +105,5 @@ export function updateLockfile(files, lockfilePath, rootDirectory) {
103
105
  saveLockfile(lockfilePath, lockfile);
104
106
  logger.debugMessage(`Updated lockfile with ${files.length} files${removedCount > 0 ? ` and cleaned up ${removedCount} stale entries` : ''}`);
105
107
  }
106
- //# sourceMappingURL=lockfile.js.map
108
+ //# sourceMappingURL=lockfile.js.map
109
+ //# debugId=c0f5da92-0092-53a4-a8ad-d257765ab6f6
@@ -1 +1 @@
1
- {"version":3,"file":"lockfile.js","sourceRoot":"/","sources":["utils/lockfile.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { logger } from '../logging/logger.js';\n\nexport const LOCKFILE_VERSION = '1.0.0';\nexport const LOCKFILE_NAME = 'locadex-lock.json';\n\nexport interface LockfileEntry {\n path: string;\n}\n\nexport interface Lockfile {\n checksums: Record<string, LockfileEntry>; // checksum -> entry mapping\n version: string;\n updatedAt: string;\n}\n\nexport function calculateFileHash(filePath: string): string {\n try {\n const content = fs.readFileSync(filePath, 'utf8');\n return crypto.createHash('md5').update(content).digest('hex');\n } catch (error) {\n logger.debugMessage(`Failed to calculate hash for ${filePath}: ${error}`);\n return '';\n }\n}\n\nexport function loadLockfile(lockfilePath: string): Lockfile {\n try {\n if (!fs.existsSync(lockfilePath)) {\n return {\n checksums: {},\n version: '1.0.0',\n updatedAt: new Date().toISOString(),\n };\n }\n\n const content = fs.readFileSync(lockfilePath, 'utf8');\n return JSON.parse(content);\n } catch (error) {\n logger.debugMessage(`Failed to load lockfile ${lockfilePath}: ${error}`);\n return {\n checksums: {},\n version: '1.0.0',\n updatedAt: new Date().toISOString(),\n };\n }\n}\n\nexport function saveLockfile(lockfilePath: string, lockfile: Lockfile): void {\n try {\n lockfile.updatedAt = new Date().toISOString();\n fs.writeFileSync(lockfilePath, JSON.stringify(lockfile, null, 2));\n } catch (error) {\n logger.debugMessage(`Failed to save lockfile ${lockfilePath}: ${error}`);\n }\n}\n\nexport function getChangedFiles(\n files: string[],\n lockfilePath: string\n): string[] {\n const lockfile = loadLockfile(lockfilePath);\n const changedFiles: string[] = [];\n\n for (const filePath of files) {\n const currentHash = calculateFileHash(filePath);\n\n if (!currentHash) {\n // Skip files that can't be hashed (likely don't exist or can't be read)\n continue;\n }\n\n // Check if this content hash exists in the lockfile\n const lockfileEntry = lockfile.checksums[currentHash];\n\n if (!lockfileEntry) {\n // Content hash not found, this is new or changed content\n changedFiles.push(filePath);\n }\n // If hash exists, content hasn't changed regardless of file path\n }\n\n logger.debugMessage(\n `Found ${changedFiles.length} changed files out of ${files.length} total files`\n );\n\n return changedFiles;\n}\n\nexport function updateLockfile(\n files: string[],\n lockfilePath: string,\n rootDirectory: string\n): void {\n const lockfile = loadLockfile(lockfilePath);\n\n // Build a map of paths to hashes for efficient lookup\n const pathToHashMap = new Map<string, string>();\n for (const [hash, entry] of Object.entries(lockfile.checksums)) {\n pathToHashMap.set(entry.path, hash);\n }\n\n // Update lockfile with new files\n for (const filePath of files) {\n const relativePath = path.relative(rootDirectory, filePath);\n const currentHash = calculateFileHash(filePath);\n\n if (!currentHash) {\n continue;\n }\n\n // Remove old hash entry for this file path (O(1) lookup and deletion)\n const oldHash = pathToHashMap.get(relativePath);\n if (oldHash) {\n delete lockfile.checksums[oldHash];\n }\n\n // Use hash as key, store current path and metadata\n lockfile.checksums[currentHash] = {\n path: relativePath,\n };\n\n // Update the path-to-hash mapping\n pathToHashMap.set(relativePath, currentHash);\n }\n\n // Cleanup stale entries for files that no longer exist\n let removedCount = 0;\n for (const hash in lockfile.checksums) {\n const entry = lockfile.checksums[hash];\n const absolutePath = path.resolve(rootDirectory, entry.path);\n\n if (!fs.existsSync(absolutePath)) {\n delete lockfile.checksums[hash];\n removedCount++;\n }\n }\n\n saveLockfile(lockfilePath, lockfile);\n logger.debugMessage(\n `Updated lockfile with ${files.length} files${removedCount > 0 ? ` and cleaned up ${removedCount} stale entries` : ''}`\n );\n}\n"]}
1
+ {"version":3,"file":"lockfile.js","sources":["utils/lockfile.ts"],"sourceRoot":"/","sourcesContent":["import crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { logger } from '../logging/logger.js';\n\nexport const LOCKFILE_VERSION = '1.0.0';\nexport const LOCKFILE_NAME = 'locadex-lock.json';\n\nexport interface LockfileEntry {\n path: string;\n}\n\nexport interface Lockfile {\n checksums: Record<string, LockfileEntry>; // checksum -> entry mapping\n version: string;\n updatedAt: string;\n}\n\nexport function calculateFileHash(filePath: string): string {\n try {\n const content = fs.readFileSync(filePath, 'utf8');\n return crypto.createHash('md5').update(content).digest('hex');\n } catch (error) {\n logger.debugMessage(`Failed to calculate hash for ${filePath}: ${error}`);\n return '';\n }\n}\n\nexport function loadLockfile(lockfilePath: string): Lockfile {\n try {\n if (!fs.existsSync(lockfilePath)) {\n return {\n checksums: {},\n version: '1.0.0',\n updatedAt: new Date().toISOString(),\n };\n }\n\n const content = fs.readFileSync(lockfilePath, 'utf8');\n return JSON.parse(content);\n } catch (error) {\n logger.debugMessage(`Failed to load lockfile ${lockfilePath}: ${error}`);\n return {\n checksums: {},\n version: '1.0.0',\n updatedAt: new Date().toISOString(),\n };\n }\n}\n\nexport function saveLockfile(lockfilePath: string, lockfile: Lockfile): void {\n try {\n lockfile.updatedAt = new Date().toISOString();\n fs.writeFileSync(lockfilePath, JSON.stringify(lockfile, null, 2));\n } catch (error) {\n logger.debugMessage(`Failed to save lockfile ${lockfilePath}: ${error}`);\n }\n}\n\nexport function getChangedFiles(\n files: string[],\n lockfilePath: string\n): string[] {\n const lockfile = loadLockfile(lockfilePath);\n const changedFiles: string[] = [];\n\n for (const filePath of files) {\n const currentHash = calculateFileHash(filePath);\n\n if (!currentHash) {\n // Skip files that can't be hashed (likely don't exist or can't be read)\n continue;\n }\n\n // Check if this content hash exists in the lockfile\n const lockfileEntry = lockfile.checksums[currentHash];\n\n if (!lockfileEntry) {\n // Content hash not found, this is new or changed content\n changedFiles.push(filePath);\n }\n // If hash exists, content hasn't changed regardless of file path\n }\n\n logger.debugMessage(\n `Found ${changedFiles.length} changed files out of ${files.length} total files`\n );\n\n return changedFiles;\n}\n\nexport function updateLockfile(\n files: string[],\n lockfilePath: string,\n rootDirectory: string\n): void {\n const lockfile = loadLockfile(lockfilePath);\n\n // Build a map of paths to hashes for efficient lookup\n const pathToHashMap = new Map<string, string>();\n for (const [hash, entry] of Object.entries(lockfile.checksums)) {\n pathToHashMap.set(entry.path, hash);\n }\n\n // Update lockfile with new files\n for (const filePath of files) {\n const relativePath = path.relative(rootDirectory, filePath);\n const currentHash = calculateFileHash(filePath);\n\n if (!currentHash) {\n continue;\n }\n\n // Remove old hash entry for this file path (O(1) lookup and deletion)\n const oldHash = pathToHashMap.get(relativePath);\n if (oldHash) {\n delete lockfile.checksums[oldHash];\n }\n\n // Use hash as key, store current path and metadata\n lockfile.checksums[currentHash] = {\n path: relativePath,\n };\n\n // Update the path-to-hash mapping\n pathToHashMap.set(relativePath, currentHash);\n }\n\n // Cleanup stale entries for files that no longer exist\n let removedCount = 0;\n for (const hash in lockfile.checksums) {\n const entry = lockfile.checksums[hash];\n const absolutePath = path.resolve(rootDirectory, entry.path);\n\n if (!fs.existsSync(absolutePath)) {\n delete lockfile.checksums[hash];\n removedCount++;\n }\n }\n\n saveLockfile(lockfilePath, lockfile);\n logger.debugMessage(\n `Updated lockfile with ${files.length} files${removedCount > 0 ? ` and cleaned up ${removedCount} stale entries` : ''}`\n );\n}\n"],"names":[],"mappings":"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","debug_id":"c0f5da92-0092-53a4-a8ad-d257765ab6f6"}
@@ -1,3 +1,5 @@
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]="48062465-4de6-5836-a2e6-92233aaea253")}catch(e){}}();
1
3
  import { getPackageInfo } from 'gtx-cli/utils/packageInfo';
2
4
  import { createSpinner } from '../../logging/console.js';
3
5
  import chalk from 'chalk';
@@ -54,4 +56,5 @@ export async function installGlobalPackage(packageName, version) {
54
56
  logger.verboseMessage(`${packageName} is already installed: v${packageInfo.version}`);
55
57
  }
56
58
  }
57
- //# sourceMappingURL=installPackage.js.map
59
+ //# sourceMappingURL=installPackage.js.map
60
+ //# debugId=48062465-4de6-5836-a2e6-92233aaea253
@@ -1 +1 @@
1
- {"version":3,"file":"installPackage.js","sourceRoot":"/","sources":["utils/packages/installPackage.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPackageInfo } from 'gtx-cli/utils/packageInfo';\nimport { createSpinner } from '../../logging/console.js';\nimport chalk from 'chalk';\nimport { installPackageGlobal } from 'gtx-cli/utils/installPackage';\nimport { logger } from '../../logging/logger.js';\nimport { exit } from '../shutdown.js';\nimport { PackageManager } from 'gtx-cli/utils/packageManager';\nimport { updatePackageJson } from 'gtx-cli/utils/packageJson';\nimport path from 'node:path';\nimport { LocadexManager } from '../locadexManager.js';\n\nexport async function addTranslateScript(\n manager: LocadexManager,\n packageJson: Record<string, any>,\n packageManager: PackageManager\n) {\n if (!packageJson.scripts) {\n packageJson.scripts = {};\n }\n const translateCommand = `locadex translate`;\n let translateScript = 'translate';\n if (!packageJson.scripts?.translate) {\n packageJson.scripts.translate = translateCommand;\n translateScript = 'translate';\n } else {\n if (\n packageJson.scripts.translate &&\n packageJson.scripts.translate.includes(translateCommand)\n ) {\n translateScript = 'translate';\n } else {\n packageJson.scripts['translate:gt'] = translateCommand;\n translateScript = 'translate:gt';\n }\n }\n // prefix translate to build command\n const runTranslate = `${packageManager.runScriptCommand} ${translateScript}`;\n if (\n packageJson.scripts.build &&\n !packageJson.scripts.build.includes(runTranslate)\n ) {\n packageJson.scripts.build = `${runTranslate} && ${packageJson.scripts.build}`;\n }\n await updatePackageJson(packageJson, manager.appDirectory);\n logger.success(\n `Added ${chalk.cyan(translateScript)} script to your ${chalk.cyan(\n path.relative(\n manager.rootDirectory,\n path.resolve(manager.appDirectory, 'package.json')\n )\n )} file and build command. Run ${chalk.cyan(translateScript)} to translate your project.`\n );\n}\n\nexport async function installGlobalPackage(\n packageName: string,\n version: string\n) {\n const packageInfo = await getPackageInfo(packageName);\n if (!packageInfo) {\n const spinner = createSpinner();\n spinner.start(`Installing ${packageName}...`);\n try {\n await installPackageGlobal(packageName, version);\n spinner.stop(chalk.green(`Installed ${packageName}.`));\n } catch (error) {\n spinner.stop(chalk.red(`Failed to install ${packageName}.`));\n logger.error(\n `${packageName} installation failed. Please install it manually and try again.`\n );\n await exit(1);\n }\n } else {\n logger.verboseMessage(\n `${packageName} is already installed: v${packageInfo.version}`\n );\n }\n}\n"]}
1
+ {"version":3,"file":"installPackage.js","sources":["utils/packages/installPackage.ts"],"sourceRoot":"/","sourcesContent":["import { getPackageInfo } from 'gtx-cli/utils/packageInfo';\nimport { createSpinner } from '../../logging/console.js';\nimport chalk from 'chalk';\nimport { installPackageGlobal } from 'gtx-cli/utils/installPackage';\nimport { logger } from '../../logging/logger.js';\nimport { exit } from '../shutdown.js';\nimport { PackageManager } from 'gtx-cli/utils/packageManager';\nimport { updatePackageJson } from 'gtx-cli/utils/packageJson';\nimport path from 'node:path';\nimport { LocadexManager } from '../locadexManager.js';\n\nexport async function addTranslateScript(\n manager: LocadexManager,\n packageJson: Record<string, any>,\n packageManager: PackageManager\n) {\n if (!packageJson.scripts) {\n packageJson.scripts = {};\n }\n const translateCommand = `locadex translate`;\n let translateScript = 'translate';\n if (!packageJson.scripts?.translate) {\n packageJson.scripts.translate = translateCommand;\n translateScript = 'translate';\n } else {\n if (\n packageJson.scripts.translate &&\n packageJson.scripts.translate.includes(translateCommand)\n ) {\n translateScript = 'translate';\n } else {\n packageJson.scripts['translate:gt'] = translateCommand;\n translateScript = 'translate:gt';\n }\n }\n // prefix translate to build command\n const runTranslate = `${packageManager.runScriptCommand} ${translateScript}`;\n if (\n packageJson.scripts.build &&\n !packageJson.scripts.build.includes(runTranslate)\n ) {\n packageJson.scripts.build = `${runTranslate} && ${packageJson.scripts.build}`;\n }\n await updatePackageJson(packageJson, manager.appDirectory);\n logger.success(\n `Added ${chalk.cyan(translateScript)} script to your ${chalk.cyan(\n path.relative(\n manager.rootDirectory,\n path.resolve(manager.appDirectory, 'package.json')\n )\n )} file and build command. Run ${chalk.cyan(translateScript)} to translate your project.`\n );\n}\n\nexport async function installGlobalPackage(\n packageName: string,\n version: string\n) {\n const packageInfo = await getPackageInfo(packageName);\n if (!packageInfo) {\n const spinner = createSpinner();\n spinner.start(`Installing ${packageName}...`);\n try {\n await installPackageGlobal(packageName, version);\n spinner.stop(chalk.green(`Installed ${packageName}.`));\n } catch (error) {\n spinner.stop(chalk.red(`Failed to install ${packageName}.`));\n logger.error(\n `${packageName} installation failed. Please install it manually and try again.`\n );\n await exit(1);\n }\n } else {\n logger.verboseMessage(\n `${packageName} is already installed: v${packageInfo.version}`\n );\n }\n}\n"],"names":[],"mappings":"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","debug_id":"48062465-4de6-5836-a2e6-92233aaea253"}
@@ -1,3 +1,5 @@
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]="1cd0c442-1dd2-510f-a16c-b7ccf0366d8b")}catch(e){}}();
1
3
  import { randomUUID } from 'node:crypto';
2
4
  let _sessionId = null;
3
5
  export function getSessionId() {
@@ -6,4 +8,5 @@ export function getSessionId() {
6
8
  }
7
9
  return _sessionId;
8
10
  }
9
- //# sourceMappingURL=session.js.map
11
+ //# sourceMappingURL=session.js.map
12
+ //# debugId=1cd0c442-1dd2-510f-a16c-b7ccf0366d8b
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"/","sources":["utils/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,IAAI,UAAU,GAAkB,IAAI,CAAC;AAErC,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,UAAU,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["import { randomUUID } from 'node:crypto';\n\nlet _sessionId: string | null = null;\n\nexport function getSessionId(): string {\n if (!_sessionId) {\n _sessionId = randomUUID();\n }\n return _sessionId;\n}\n"]}
1
+ {"version":3,"file":"session.js","sources":["utils/session.ts"],"sourceRoot":"/","sourcesContent":["import { randomUUID } from 'node:crypto';\n\nlet _sessionId: string | null = null;\n\nexport function getSessionId(): string {\n if (!_sessionId) {\n _sessionId = randomUUID();\n }\n return _sessionId;\n}\n"],"names":[],"mappings":";;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,IAAI,UAAU,GAAkB,IAAI,CAAC;AAErC,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,UAAU,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC","debug_id":"1cd0c442-1dd2-510f-a16c-b7ccf0366d8b"}
@@ -1,3 +1,5 @@
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]="dbaa1d7a-64b6-520b-a815-d87ffadf9896")}catch(e){}}();
1
3
  export const DAG_IGNORED_FILES = [
2
4
  'next.config.js',
3
5
  'next.config.ts',
@@ -44,4 +46,5 @@ export const DAG_IGNORED_EXTENSIONS = [
44
46
  '.fixture.ts', // Test fixtures
45
47
  ];
46
48
  export const CLAUDE_CODE_VERSION = '1.0.22';
47
- //# sourceMappingURL=shared.js.map
49
+ //# sourceMappingURL=shared.js.map
50
+ //# debugId=dbaa1d7a-64b6-520b-a815-d87ffadf9896
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"/","sources":["utils/shared.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,gBAAgB;IAChB,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,oBAAoB;IACpB,mBAAmB;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,oBAAoB;IACpB,aAAa;IACb,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,cAAc;IACd,aAAa;IACb,aAAa;IACb,cAAc;IACd,gBAAgB;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,MAAM,EAAE,cAAc;IACtB,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,sBAAsB;IACjC,SAAS,EAAE,sBAAsB;IACjC,UAAU,EAAE,aAAa;IACzB,UAAU;IACV,UAAU;IACV,UAAU;IACV,aAAa,EAAE,kBAAkB;IACjC,aAAa;IACb,YAAY,EAAE,uDAAuD;IACrE,YAAY;IACZ,OAAO;IACP,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,mBAAmB;IAC9B,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,mBAAmB;IAChC,UAAU,EAAE,aAAa;IACzB,UAAU,EAAE,aAAa;IACzB,aAAa,EAAE,gBAAgB;IAC/B,aAAa,EAAE,gBAAgB;CAChC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC","sourcesContent":["export const DAG_IGNORED_FILES = [\n 'next.config.js',\n 'next.config.ts',\n 'next.config.mjs',\n 'next.config.mts',\n 'next.config.cjs',\n 'next.config.cts',\n 'tailwind.config.js',\n 'webpack.config.js',\n];\n\nexport const DAG_IGNORED_PATTERNS = [\n '**/node_modules/**',\n '**/.next/**',\n '**/dist/**',\n '**/build/**',\n '**/.git/**',\n '**/.cache/**',\n '**/.nuxt/**',\n '**/.vite/**',\n '**/.turbo/**',\n '**/.locadex/**',\n];\n\nexport const DAG_IGNORED_EXTENSIONS = [\n '.map', // Source maps\n '.map.js', // Source maps\n '.min.js', // Minified JavaScript\n '.min.ts', // Minified TypeScript\n '.spec.js', // Test files\n '.spec.ts',\n '.test.js',\n '.test.ts',\n '.stories.js', // Storybook files\n '.stories.ts',\n '.config.js', // Various config files (though some might be relevant)\n '.config.ts',\n '.d.ts',\n '.e2e.js', // End-to-end tests\n '.e2e.ts', // End-to-end tests\n '.setup.js', // Test setup files\n '.setup.ts', // Test setup files\n '.mock.js', // Mock files\n '.mock.ts', // Mock files\n '.fixture.js', // Test fixtures\n '.fixture.ts', // Test fixtures\n];\n\nexport const CLAUDE_CODE_VERSION = '1.0.22';\n"]}
1
+ {"version":3,"file":"shared.js","sources":["utils/shared.ts"],"sourceRoot":"/","sourcesContent":["export const DAG_IGNORED_FILES = [\n 'next.config.js',\n 'next.config.ts',\n 'next.config.mjs',\n 'next.config.mts',\n 'next.config.cjs',\n 'next.config.cts',\n 'tailwind.config.js',\n 'webpack.config.js',\n];\n\nexport const DAG_IGNORED_PATTERNS = [\n '**/node_modules/**',\n '**/.next/**',\n '**/dist/**',\n '**/build/**',\n '**/.git/**',\n '**/.cache/**',\n '**/.nuxt/**',\n '**/.vite/**',\n '**/.turbo/**',\n '**/.locadex/**',\n];\n\nexport const DAG_IGNORED_EXTENSIONS = [\n '.map', // Source maps\n '.map.js', // Source maps\n '.min.js', // Minified JavaScript\n '.min.ts', // Minified TypeScript\n '.spec.js', // Test files\n '.spec.ts',\n '.test.js',\n '.test.ts',\n '.stories.js', // Storybook files\n '.stories.ts',\n '.config.js', // Various config files (though some might be relevant)\n '.config.ts',\n '.d.ts',\n '.e2e.js', // End-to-end tests\n '.e2e.ts', // End-to-end tests\n '.setup.js', // Test setup files\n '.setup.ts', // Test setup files\n '.mock.js', // Mock files\n '.mock.ts', // Mock files\n '.fixture.js', // Test fixtures\n '.fixture.ts', // Test fixtures\n];\n\nexport const CLAUDE_CODE_VERSION = '1.0.22';\n"],"names":[],"mappings":";;AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,gBAAgB;IAChB,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,oBAAoB;IACpB,mBAAmB;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,oBAAoB;IACpB,aAAa;IACb,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,cAAc;IACd,aAAa;IACb,aAAa;IACb,cAAc;IACd,gBAAgB;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,MAAM,EAAE,cAAc;IACtB,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,sBAAsB;IACjC,SAAS,EAAE,sBAAsB;IACjC,UAAU,EAAE,aAAa;IACzB,UAAU;IACV,UAAU;IACV,UAAU;IACV,aAAa,EAAE,kBAAkB;IACjC,aAAa;IACb,YAAY,EAAE,uDAAuD;IACrE,YAAY;IACZ,OAAO;IACP,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,mBAAmB;IAC9B,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,mBAAmB;IAChC,UAAU,EAAE,aAAa;IACzB,UAAU,EAAE,aAAa;IACzB,aAAa,EAAE,gBAAgB;IAC/B,aAAa,EAAE,gBAAgB;CAChC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC","debug_id":"dbaa1d7a-64b6-520b-a815-d87ffadf9896"}
@@ -1,3 +1,5 @@
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]="d0c2def7-fdc4-5bad-b70b-8f02b95cd657")}catch(e){}}();
1
3
  import { logger } from '../logging/logger.js';
2
4
  class GracefulShutdown {
3
5
  shutdownHandlers = [];
@@ -47,4 +49,5 @@ export const gracefulShutdown = new GracefulShutdown();
47
49
  export function exit(code = 0) {
48
50
  return gracefulShutdown.shutdown(code);
49
51
  }
50
- //# sourceMappingURL=shutdown.js.map
52
+ //# sourceMappingURL=shutdown.js.map
53
+ //# debugId=d0c2def7-fdc4-5bad-b70b-8f02b95cd657
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown.js","sourceRoot":"/","sources":["utils/shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAU9C,MAAM,gBAAgB;IACZ,gBAAgB,GAAsB,EAAE,CAAC;IACzC,cAAc,GAAG,KAAK,CAAC;IACvB,QAAQ,GAAa,CAAC,CAAC;IAE/B;QACE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,kBAAkB;QAC7E,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,8EAA8E;IACrI,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,MAAM,CAAC,YAAY,CACjB,YAAY,MAAM,oDAAoD,CACvE,CAAC;QACF,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,UAAU,CAAC,OAAwB;QACjC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,WAAqB,CAAC;QACnC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,oDAAoD;QACpD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC;QAEtD,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC;YACzD,IAAI,CAAC;gBACH,MAAM,CAAC,YAAY,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;gBAE3D,MAAM,cAAc,GAAG,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;oBACrD,MAAM,CAAC,UAAU,CACf,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,EAC3C,OAAO,CACR,CAAC;gBACJ,CAAC,CAAC,CAAC;gBAEH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;gBAEjE,MAAM,CAAC,YAAY,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,MAAM,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,4BAA4B;AAC5B,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAEvD,yDAAyD;AACzD,MAAM,UAAU,IAAI,CAAC,OAAiB,CAAC;IACrC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAmB,CAAC;AAC3D,CAAC","sourcesContent":["import { logger } from '../logging/logger.js';\n\nexport type ExitCode = 0 | 1;\n\ninterface ShutdownHandler {\n name: string;\n handler: () => Promise<void> | void;\n timeout?: number;\n}\n\nclass GracefulShutdown {\n private shutdownHandlers: ShutdownHandler[] = [];\n private isShuttingDown = false;\n private exitCode: ExitCode = 0;\n\n constructor() {\n process.on('SIGINT', () => this.handleSignal('SIGINT'));\n process.on('SIGTERM', () => this.handleSignal('SIGTERM'));\n process.on('SIGUSR2', () => this.handleSignal('SIGUSR2')); // nodemon restart\n process.on('exit', () => this.handleSignal('exit')); // in case other libraries override the signal handlers such as @clack/prompts\n }\n\n async handleSignal(signal: string) {\n logger.debugMessage(\n `Received ${signal}, initiating graceful shutdown with exit code 0...`\n );\n await this.shutdown(0);\n }\n\n addHandler(handler: ShutdownHandler) {\n this.shutdownHandlers.push(handler);\n }\n\n async shutdown(exitCode: ExitCode = 0) {\n if (this.isShuttingDown) {\n return;\n }\n\n this.isShuttingDown = true;\n this.exitCode = exitCode;\n\n // Execute shutdown handlers in reverse order (LIFO)\n const handlers = [...this.shutdownHandlers].reverse();\n\n for (const { name, handler, timeout = 5000 } of handlers) {\n try {\n logger.debugMessage(`Executing shutdown handler: ${name}`);\n\n const timeoutPromise = new Promise<void>((_, reject) => {\n global.setTimeout(\n () => reject(new Error(`Timeout: ${name}`)),\n timeout\n );\n });\n\n await Promise.race([Promise.resolve(handler()), timeoutPromise]);\n\n logger.debugMessage(`Completed shutdown handler: ${name}`);\n } catch (error) {\n logger.error(`Error in shutdown handler ${name}: ${error}`);\n }\n }\n\n logger.debugMessage('Graceful shutdown complete');\n process.exit(this.exitCode);\n }\n}\n\n// Export singleton instance\nexport const gracefulShutdown = new GracefulShutdown();\n\n// Export convenience function for backward compatibility\nexport function exit(code: ExitCode = 0): Promise<never> {\n return gracefulShutdown.shutdown(code) as Promise<never>;\n}\n"]}
1
+ {"version":3,"file":"shutdown.js","sources":["utils/shutdown.ts"],"sourceRoot":"/","sourcesContent":["import { logger } from '../logging/logger.js';\n\nexport type ExitCode = 0 | 1;\n\ninterface ShutdownHandler {\n name: string;\n handler: () => Promise<void> | void;\n timeout?: number;\n}\n\nclass GracefulShutdown {\n private shutdownHandlers: ShutdownHandler[] = [];\n private isShuttingDown = false;\n private exitCode: ExitCode = 0;\n\n constructor() {\n process.on('SIGINT', () => this.handleSignal('SIGINT'));\n process.on('SIGTERM', () => this.handleSignal('SIGTERM'));\n process.on('SIGUSR2', () => this.handleSignal('SIGUSR2')); // nodemon restart\n process.on('exit', () => this.handleSignal('exit')); // in case other libraries override the signal handlers such as @clack/prompts\n }\n\n async handleSignal(signal: string) {\n logger.debugMessage(\n `Received ${signal}, initiating graceful shutdown with exit code 0...`\n );\n await this.shutdown(0);\n }\n\n addHandler(handler: ShutdownHandler) {\n this.shutdownHandlers.push(handler);\n }\n\n async shutdown(exitCode: ExitCode = 0) {\n if (this.isShuttingDown) {\n return;\n }\n\n this.isShuttingDown = true;\n this.exitCode = exitCode;\n\n // Execute shutdown handlers in reverse order (LIFO)\n const handlers = [...this.shutdownHandlers].reverse();\n\n for (const { name, handler, timeout = 5000 } of handlers) {\n try {\n logger.debugMessage(`Executing shutdown handler: ${name}`);\n\n const timeoutPromise = new Promise<void>((_, reject) => {\n global.setTimeout(\n () => reject(new Error(`Timeout: ${name}`)),\n timeout\n );\n });\n\n await Promise.race([Promise.resolve(handler()), timeoutPromise]);\n\n logger.debugMessage(`Completed shutdown handler: ${name}`);\n } catch (error) {\n logger.error(`Error in shutdown handler ${name}: ${error}`);\n }\n }\n\n logger.debugMessage('Graceful shutdown complete');\n process.exit(this.exitCode);\n }\n}\n\n// Export singleton instance\nexport const gracefulShutdown = new GracefulShutdown();\n\n// Export convenience function for backward compatibility\nexport function exit(code: ExitCode = 0): Promise<never> {\n return gracefulShutdown.shutdown(code) as Promise<never>;\n}\n"],"names":[],"mappings":";;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAU9C,MAAM,gBAAgB;IACZ,gBAAgB,GAAsB,EAAE,CAAC;IACzC,cAAc,GAAG,KAAK,CAAC;IACvB,QAAQ,GAAa,CAAC,CAAC;IAE/B;QACE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,kBAAkB;QAC7E,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,8EAA8E;IACrI,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,MAAM,CAAC,YAAY,CACjB,YAAY,MAAM,oDAAoD,CACvE,CAAC;QACF,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,UAAU,CAAC,OAAwB;QACjC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,WAAqB,CAAC;QACnC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,oDAAoD;QACpD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC;QAEtD,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC;YACzD,IAAI,CAAC;gBACH,MAAM,CAAC,YAAY,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;gBAE3D,MAAM,cAAc,GAAG,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;oBACrD,MAAM,CAAC,UAAU,CACf,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,EAC3C,OAAO,CACR,CAAC;gBACJ,CAAC,CAAC,CAAC;gBAEH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;gBAEjE,MAAM,CAAC,YAAY,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,MAAM,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,4BAA4B;AAC5B,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAEvD,yDAAyD;AACzD,MAAM,UAAU,IAAI,CAAC,OAAiB,CAAC;IACrC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAmB,CAAC;AAC3D,CAAC","debug_id":"d0c2def7-fdc4-5bad-b70b-8f02b95cd657"}
@@ -1,3 +1,5 @@
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]="24d19598-ee2b-5e12-9264-36c1477ffac0")}catch(e){}}();
1
3
  import { posthog } from '../telemetry.js';
2
4
  import { getSessionId } from './session.js';
3
5
  import * as Sentry from '@sentry/node';
@@ -91,4 +93,5 @@ export class AgentStats {
91
93
  });
92
94
  }
93
95
  }
94
- //# sourceMappingURL=stats.js.map
96
+ //# sourceMappingURL=stats.js.map
97
+ //# debugId=24d19598-ee2b-5e12-9264-36c1477ffac0
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"/","sources":["utils/stats.ts"],"names":[],"mappings":"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","sourcesContent":["import { posthog } from '../telemetry.js';\nimport { getSessionId } from './session.js';\nimport * as Sentry from '@sentry/node';\n\nexport class AgentStats {\n private totalFiles: number = 0;\n private processedFiles: number = 0;\n private totalCost: number = 0;\n private totalToolCalls: number = 0;\n private totalApiDuration: number = 0;\n private totalWallDuration: number = 0;\n private startTime: number;\n private inputTokens: number = 0;\n private outputTokens: number = 0;\n private cachedInputTokens: number = 0;\n private turns: number = 0;\n\n constructor() {\n this.startTime = Date.now();\n }\n\n updateStats(stats: {\n newProcessedFiles?: number;\n newCost?: number;\n newToolCalls?: number;\n newApiDuration?: number;\n newWallDuration?: number;\n newInputTokens?: number;\n newOutputTokens?: number;\n newCachedInputTokens?: number;\n newTurns?: number;\n }) {\n if (stats.newProcessedFiles) {\n this.processedFiles += stats.newProcessedFiles;\n }\n if (stats.newCost) {\n this.totalCost += stats.newCost;\n }\n if (stats.newToolCalls) {\n this.totalToolCalls += stats.newToolCalls;\n }\n if (stats.newApiDuration) {\n this.totalApiDuration += stats.newApiDuration;\n }\n if (stats.newWallDuration) {\n this.totalWallDuration += stats.newWallDuration;\n }\n if (stats.newInputTokens) {\n this.inputTokens += stats.newInputTokens;\n }\n if (stats.newOutputTokens) {\n this.outputTokens += stats.newOutputTokens;\n }\n if (stats.newCachedInputTokens) {\n this.cachedInputTokens += stats.newCachedInputTokens;\n }\n if (stats.newTurns) {\n this.turns += stats.newTurns;\n }\n }\n\n getStats() {\n return {\n totalFiles: this.totalFiles,\n processedFiles: this.processedFiles,\n totalCost: this.totalCost,\n totalToolCalls: this.totalToolCalls,\n totalApiDuration: this.totalApiDuration,\n totalWallDuration: this.totalWallDuration,\n startTime: this.startTime,\n inputTokens: this.inputTokens,\n outputTokens: this.outputTokens,\n cachedInputTokens: this.cachedInputTokens,\n turns: this.turns,\n };\n }\n\n recordTelemetry(success: boolean) {\n Sentry.getActiveSpan()?.setAttributes({\n 'agent.total_input_tokens': this.inputTokens,\n 'agent.total_cached_input_tokens': this.cachedInputTokens,\n 'agent.total_output_tokens': this.outputTokens,\n 'agent.total_turns': this.turns,\n 'agent.total_cost_usd': this.totalCost,\n 'agent.total_wall_duration_ms': this.totalWallDuration,\n 'agent.total_api_duration_ms': this.totalApiDuration,\n 'agent.total_files_processed': this.processedFiles,\n 'agent.total_tool_calls': this.totalToolCalls,\n 'agent.success': success,\n });\n\n posthog.capture({\n distinctId: getSessionId(),\n event: 'agent_stats',\n properties: {\n total_files: this.processedFiles,\n total_turns: this.turns,\n total_input_tokens: this.inputTokens,\n total_output_tokens: this.outputTokens,\n total_cost_usd: this.totalCost,\n total_wall_duration_ms: this.totalWallDuration,\n total_api_duration_ms: this.totalApiDuration,\n total_files_processed: this.processedFiles,\n total_tool_calls: this.totalToolCalls,\n success: success,\n },\n });\n }\n}\n"]}
1
+ {"version":3,"file":"stats.js","sources":["utils/stats.ts"],"sourceRoot":"/","sourcesContent":["import { posthog } from '../telemetry.js';\nimport { getSessionId } from './session.js';\nimport * as Sentry from '@sentry/node';\n\nexport class AgentStats {\n private totalFiles: number = 0;\n private processedFiles: number = 0;\n private totalCost: number = 0;\n private totalToolCalls: number = 0;\n private totalApiDuration: number = 0;\n private totalWallDuration: number = 0;\n private startTime: number;\n private inputTokens: number = 0;\n private outputTokens: number = 0;\n private cachedInputTokens: number = 0;\n private turns: number = 0;\n\n constructor() {\n this.startTime = Date.now();\n }\n\n updateStats(stats: {\n newProcessedFiles?: number;\n newCost?: number;\n newToolCalls?: number;\n newApiDuration?: number;\n newWallDuration?: number;\n newInputTokens?: number;\n newOutputTokens?: number;\n newCachedInputTokens?: number;\n newTurns?: number;\n }) {\n if (stats.newProcessedFiles) {\n this.processedFiles += stats.newProcessedFiles;\n }\n if (stats.newCost) {\n this.totalCost += stats.newCost;\n }\n if (stats.newToolCalls) {\n this.totalToolCalls += stats.newToolCalls;\n }\n if (stats.newApiDuration) {\n this.totalApiDuration += stats.newApiDuration;\n }\n if (stats.newWallDuration) {\n this.totalWallDuration += stats.newWallDuration;\n }\n if (stats.newInputTokens) {\n this.inputTokens += stats.newInputTokens;\n }\n if (stats.newOutputTokens) {\n this.outputTokens += stats.newOutputTokens;\n }\n if (stats.newCachedInputTokens) {\n this.cachedInputTokens += stats.newCachedInputTokens;\n }\n if (stats.newTurns) {\n this.turns += stats.newTurns;\n }\n }\n\n getStats() {\n return {\n totalFiles: this.totalFiles,\n processedFiles: this.processedFiles,\n totalCost: this.totalCost,\n totalToolCalls: this.totalToolCalls,\n totalApiDuration: this.totalApiDuration,\n totalWallDuration: this.totalWallDuration,\n startTime: this.startTime,\n inputTokens: this.inputTokens,\n outputTokens: this.outputTokens,\n cachedInputTokens: this.cachedInputTokens,\n turns: this.turns,\n };\n }\n\n recordTelemetry(success: boolean) {\n Sentry.getActiveSpan()?.setAttributes({\n 'agent.total_input_tokens': this.inputTokens,\n 'agent.total_cached_input_tokens': this.cachedInputTokens,\n 'agent.total_output_tokens': this.outputTokens,\n 'agent.total_turns': this.turns,\n 'agent.total_cost_usd': this.totalCost,\n 'agent.total_wall_duration_ms': this.totalWallDuration,\n 'agent.total_api_duration_ms': this.totalApiDuration,\n 'agent.total_files_processed': this.processedFiles,\n 'agent.total_tool_calls': this.totalToolCalls,\n 'agent.success': success,\n });\n\n posthog.capture({\n distinctId: getSessionId(),\n event: 'agent_stats',\n properties: {\n total_files: this.processedFiles,\n total_turns: this.turns,\n total_input_tokens: this.inputTokens,\n total_output_tokens: this.outputTokens,\n total_cost_usd: this.totalCost,\n total_wall_duration_ms: this.totalWallDuration,\n total_api_duration_ms: this.totalApiDuration,\n total_files_processed: this.processedFiles,\n total_tool_calls: this.totalToolCalls,\n success: success,\n },\n });\n }\n}\n"],"names":[],"mappings":"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","debug_id":"24d19598-ee2b-5e12-9264-36c1477ffac0"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "locadex",
3
- "version": "0.1.13",
3
+ "version": "0.1.14-alpha.1",
4
4
  "description": "An AI agent for internationalization",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",