locadex 0.0.1 → 0.0.2-alpha.3

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 (154) hide show
  1. package/.locadex-mcp-stdio.json +9 -0
  2. package/.locadex-mcp.json +8 -0
  3. package/LICENSE.md +1 -1
  4. package/dist/cli.d.ts +3 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +59 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/i18n.d.ts +2 -0
  9. package/dist/commands/i18n.d.ts.map +1 -0
  10. package/dist/commands/i18n.js +215 -0
  11. package/dist/commands/i18n.js.map +1 -0
  12. package/dist/commands/setup.d.ts +2 -0
  13. package/dist/commands/setup.d.ts.map +1 -0
  14. package/dist/commands/setup.js +89 -0
  15. package/dist/commands/setup.js.map +1 -0
  16. package/dist/index.d.ts +0 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +5 -68
  19. package/dist/index.js.map +1 -1
  20. package/dist/logging/console.d.ts +45 -0
  21. package/dist/logging/console.d.ts.map +1 -0
  22. package/dist/logging/console.js +134 -0
  23. package/dist/logging/console.js.map +1 -0
  24. package/dist/logging/constructInfo.d.ts +3 -0
  25. package/dist/logging/constructInfo.d.ts.map +1 -0
  26. package/dist/logging/constructInfo.js +15 -0
  27. package/dist/logging/constructInfo.js.map +1 -0
  28. package/dist/logging/logger.d.ts +24 -0
  29. package/dist/logging/logger.d.ts.map +1 -0
  30. package/dist/logging/logger.js +70 -0
  31. package/dist/logging/logger.js.map +1 -0
  32. package/dist/mcp/debugger.d.ts +3 -0
  33. package/dist/mcp/debugger.d.ts.map +1 -0
  34. package/dist/mcp/debugger.js +37 -0
  35. package/dist/mcp/debugger.js.map +1 -0
  36. package/dist/mcp/getDocs.d.ts.map +1 -0
  37. package/dist/mcp/getDocs.js +56 -0
  38. package/dist/mcp/getDocs.js.map +1 -0
  39. package/dist/mcp/getGuide.d.ts +5 -0
  40. package/dist/mcp/getGuide.d.ts.map +1 -0
  41. package/dist/mcp/getGuide.js +17 -0
  42. package/dist/mcp/getGuide.js.map +1 -0
  43. package/dist/{tools → mcp/tools}/docs.d.ts +3 -0
  44. package/dist/mcp/tools/docs.d.ts.map +1 -0
  45. package/dist/mcp/tools/docs.js +86 -0
  46. package/dist/mcp/tools/docs.js.map +1 -0
  47. package/dist/mcp/tools/fileManager.d.ts +6 -0
  48. package/dist/mcp/tools/fileManager.d.ts.map +1 -0
  49. package/dist/mcp/tools/fileManager.js +233 -0
  50. package/dist/mcp/tools/fileManager.js.map +1 -0
  51. package/dist/mcp/tools/guides.d.ts +11 -0
  52. package/dist/mcp/tools/guides.d.ts.map +1 -0
  53. package/dist/mcp/tools/guides.js +130 -0
  54. package/dist/mcp/tools/guides.js.map +1 -0
  55. package/dist/mcp-sse.d.ts +3 -0
  56. package/dist/mcp-sse.d.ts.map +1 -0
  57. package/dist/mcp-sse.js +72 -0
  58. package/dist/mcp-sse.js.map +1 -0
  59. package/dist/mcp.d.ts +3 -0
  60. package/dist/mcp.d.ts.map +1 -0
  61. package/dist/mcp.js +36 -0
  62. package/dist/mcp.js.map +1 -0
  63. package/dist/prompts/system.d.ts +4 -0
  64. package/dist/prompts/system.d.ts.map +1 -0
  65. package/dist/prompts/system.js +23 -0
  66. package/dist/prompts/system.js.map +1 -0
  67. package/dist/telemetry.d.ts +11 -0
  68. package/dist/telemetry.d.ts.map +1 -0
  69. package/dist/telemetry.js +104 -0
  70. package/dist/telemetry.js.map +1 -0
  71. package/dist/types/claude-sdk.d.ts +39 -0
  72. package/dist/types/claude-sdk.d.ts.map +1 -0
  73. package/dist/types/claude-sdk.js +5 -0
  74. package/dist/types/claude-sdk.js.map +1 -0
  75. package/dist/types/cli.d.ts +7 -0
  76. package/dist/types/cli.d.ts.map +1 -0
  77. package/dist/types/cli.js +5 -0
  78. package/dist/types/cli.js.map +1 -0
  79. package/dist/utils/agentManager.d.ts +22 -0
  80. package/dist/utils/agentManager.d.ts.map +1 -0
  81. package/dist/utils/agentManager.js +110 -0
  82. package/dist/utils/agentManager.js.map +1 -0
  83. package/dist/utils/claudeCode.d.ts +24 -0
  84. package/dist/utils/claudeCode.d.ts.map +1 -0
  85. package/dist/utils/claudeCode.js +167 -0
  86. package/dist/utils/claudeCode.js.map +1 -0
  87. package/dist/utils/dag/createDag.d.ts +24 -0
  88. package/dist/utils/dag/createDag.d.ts.map +1 -0
  89. package/dist/utils/dag/createDag.js +175 -0
  90. package/dist/utils/dag/createDag.js.map +1 -0
  91. package/dist/utils/debugLogger.d.ts +3 -0
  92. package/dist/utils/debugLogger.d.ts.map +1 -0
  93. package/dist/utils/debugLogger.js +36 -0
  94. package/dist/utils/debugLogger.js.map +1 -0
  95. package/dist/utils/fs/findConfigs.d.ts +11 -0
  96. package/dist/utils/fs/findConfigs.d.ts.map +1 -0
  97. package/dist/utils/fs/findConfigs.js +63 -0
  98. package/dist/utils/fs/findConfigs.js.map +1 -0
  99. package/dist/utils/fs/getFiles.d.ts +2 -0
  100. package/dist/utils/fs/getFiles.d.ts.map +1 -0
  101. package/dist/utils/fs/getFiles.js +8 -0
  102. package/dist/utils/fs/getFiles.js.map +1 -0
  103. package/dist/utils/fs/writeFiles.d.ts +2 -0
  104. package/dist/utils/fs/writeFiles.d.ts.map +1 -0
  105. package/dist/utils/fs/writeFiles.js +19 -0
  106. package/dist/utils/fs/writeFiles.js.map +1 -0
  107. package/dist/utils/getFiles.d.ts +30 -0
  108. package/dist/utils/getFiles.d.ts.map +1 -0
  109. package/dist/utils/getFiles.js +152 -0
  110. package/dist/utils/getFiles.js.map +1 -0
  111. package/dist/utils/getPaths.d.ts +1 -0
  112. package/dist/utils/getPaths.d.ts.map +1 -1
  113. package/dist/utils/getPaths.js +19 -3
  114. package/dist/utils/getPaths.js.map +1 -1
  115. package/dist/utils/mcpConfig.d.ts +10 -0
  116. package/dist/utils/mcpConfig.d.ts.map +1 -0
  117. package/dist/utils/mcpConfig.js +13 -0
  118. package/dist/utils/mcpConfig.js.map +1 -0
  119. package/dist/utils/shared.d.ts +2 -0
  120. package/dist/utils/shared.d.ts.map +1 -0
  121. package/dist/utils/shared.js +15 -0
  122. package/dist/utils/shared.js.map +1 -0
  123. package/dist/utils/validateConfig.d.ts +2 -0
  124. package/dist/utils/validateConfig.d.ts.map +1 -0
  125. package/dist/utils/validateConfig.js +12 -0
  126. package/dist/utils/validateConfig.js.map +1 -0
  127. package/guides/next/advanced/complicated-mapping-expressions.md +200 -0
  128. package/guides/next/advanced/interpolated-strings.md +162 -0
  129. package/guides/next/advanced/migrating.md +86 -0
  130. package/guides/next/advanced/ternary-operators.md +217 -0
  131. package/guides/next/advanced/var-outside-client-component.md +446 -0
  132. package/guides/next/advanced/var-outside-client-server-component.md +550 -0
  133. package/guides/next/advanced/var-outside-server-component.md +545 -0
  134. package/guides/next/basic/branches.md +282 -0
  135. package/guides/next/basic/client-side-components.md +214 -0
  136. package/guides/next/basic/jsx.md +259 -0
  137. package/guides/next/basic/locale-selector.md +5 -0
  138. package/guides/next/basic/server-side-components.md +164 -0
  139. package/guides/next/basic/setup.md +139 -0
  140. package/guides/next/basic/translating-html.md +36 -0
  141. package/guides/next/basic/variables.md +185 -0
  142. package/guides/next/important/functions.md +37 -0
  143. package/package.json +32 -13
  144. package/dist/resources/docs.d.ts +0 -4
  145. package/dist/resources/docs.d.ts.map +0 -1
  146. package/dist/resources/docs.js +0 -176
  147. package/dist/resources/docs.js.map +0 -1
  148. package/dist/tools/docs.d.ts.map +0 -1
  149. package/dist/tools/docs.js +0 -140
  150. package/dist/tools/docs.js.map +0 -1
  151. package/dist/utils/getDocs.d.ts.map +0 -1
  152. package/dist/utils/getDocs.js +0 -113
  153. package/dist/utils/getDocs.js.map +0 -1
  154. /package/dist/{utils → mcp}/getDocs.d.ts +0 -0
@@ -0,0 +1,9 @@
1
+ {
2
+ "mcpServers": {
3
+ "locadex": {
4
+ "command": "npx",
5
+ "args": ["locadex-mcp"],
6
+ "env": {}
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "locadex": {
4
+ "type": "sse",
5
+ "url": "http://localhost:8888/sse"
6
+ }
7
+ }
8
+ }
package/LICENSE.md CHANGED
@@ -6,7 +6,7 @@ FSL-1.1-ALv2
6
6
 
7
7
  ## Notice
8
8
 
9
- Copyright 2024 General Translation, Inc.
9
+ Copyright 2025 General Translation, Inc.
10
10
 
11
11
  ## Terms and Conditions
12
12
 
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import './telemetry.js';
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"/","sources":["cli.ts"],"names":[],"mappings":";AAOA,OAAO,gBAAgB,CAAC"}
package/dist/cli.js ADDED
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env node
2
+
3
+ !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]="4b439b5f-1c8d-5c46-baa6-14d0f50dd4f9")}catch(e){}}();
4
+ import dotenv from 'dotenv';
5
+ dotenv.config({ path: '.env' });
6
+ dotenv.config({ path: '.env.local', override: true });
7
+ dotenv.config({ path: '.env.production', override: true });
8
+ import './telemetry.js';
9
+ import { Command } from 'commander';
10
+ import { readFileSync } from 'node:fs';
11
+ import { fromPackageRoot } from './utils/getPaths.js';
12
+ import { setupCommand } from './commands/setup.js';
13
+ import { withTelemetry } from './telemetry.js';
14
+ import { logger } from './logging/logger.js';
15
+ import { i18nCommand } from './commands/i18n.js';
16
+ import { displayHeader } from './logging/console.js';
17
+ import { main } from 'gtx-cli/index';
18
+ const packageJson = JSON.parse(readFileSync(fromPackageRoot('package.json'), 'utf8'));
19
+ const program = new Command();
20
+ program
21
+ .name('locadex')
22
+ .description('AI agent for internationalization')
23
+ .version(packageJson.version);
24
+ program
25
+ .command('start')
26
+ .description('Run Locadex on your project')
27
+ .option('-v, --verbose', 'Verbose output')
28
+ .option('-d, --debug', 'Debug output')
29
+ .option('-b, --batch-size <number>', 'Batch size', '1')
30
+ .option('--no-telemetry', 'Disable telemetry')
31
+ .action((options, command) => {
32
+ const parentOptions = command.parent?.opts() || {};
33
+ const allOptions = { ...parentOptions, ...options };
34
+ withTelemetry({ enabled: !allOptions.noTelemetry, options: allOptions }, () => {
35
+ logger.initialize(allOptions);
36
+ displayHeader();
37
+ setupCommand(Number(allOptions.batchSize) || 1);
38
+ });
39
+ });
40
+ program
41
+ .command('i18n')
42
+ .description('Run Locadex i18n on your project')
43
+ .option('-v, --verbose', 'Verbose output')
44
+ .option('-d, --debug', 'Debug output')
45
+ .option('-b, --batch-size <number>', 'Batch size', '1')
46
+ .option('--no-telemetry', 'Disable telemetry')
47
+ .action((options, command) => {
48
+ const parentOptions = command.parent?.opts() || {};
49
+ const allOptions = { ...parentOptions, ...options };
50
+ withTelemetry({ enabled: !allOptions.noTelemetry, options: allOptions }, () => {
51
+ logger.initialize(allOptions);
52
+ displayHeader();
53
+ i18nCommand(Number(allOptions.batchSize) || 1);
54
+ });
55
+ });
56
+ main(program);
57
+ program.parse();
58
+ //# sourceMappingURL=cli.js.map
59
+ //# debugId=4b439b5f-1c8d-5c46-baa6-14d0f50dd4f9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sources":["cli.ts"],"sourceRoot":"/","sourcesContent":["#!/usr/bin/env node\nimport dotenv from 'dotenv';\n\ndotenv.config({ path: '.env' });\ndotenv.config({ path: '.env.local', override: true });\ndotenv.config({ path: '.env.production', override: true });\n\nimport './telemetry.js';\nimport { Command } from 'commander';\nimport { readFileSync } from 'node:fs';\nimport { fromPackageRoot } from './utils/getPaths.js';\nimport { setupCommand } from './commands/setup.js';\nimport { CliOptions } from './types/cli.js';\nimport { withTelemetry } from './telemetry.js';\nimport { logger } from './logging/logger.js';\nimport { i18nCommand } from './commands/i18n.js';\nimport { displayHeader } from './logging/console.js';\nimport { main } from 'gtx-cli/index';\n\nconst packageJson = JSON.parse(\n readFileSync(fromPackageRoot('package.json'), 'utf8')\n);\n\nconst program = new Command();\n\nprogram\n .name('locadex')\n .description('AI agent for internationalization')\n .version(packageJson.version);\n\nprogram\n .command('start')\n .description('Run Locadex on your project')\n .option('-v, --verbose', 'Verbose output')\n .option('-d, --debug', 'Debug output')\n .option('-b, --batch-size <number>', 'Batch size', '1')\n .option('--no-telemetry', 'Disable telemetry')\n .action((options: CliOptions, command: Command) => {\n const parentOptions = command.parent?.opts() || {};\n const allOptions = { ...parentOptions, ...options };\n withTelemetry(\n { enabled: !allOptions.noTelemetry, options: allOptions },\n () => {\n logger.initialize(allOptions);\n displayHeader();\n setupCommand(Number(allOptions.batchSize) || 1);\n }\n );\n });\n\nprogram\n .command('i18n')\n .description('Run Locadex i18n on your project')\n .option('-v, --verbose', 'Verbose output')\n .option('-d, --debug', 'Debug output')\n .option('-b, --batch-size <number>', 'Batch size', '1')\n .option('--no-telemetry', 'Disable telemetry')\n .action((options: CliOptions, command: Command) => {\n const parentOptions = command.parent?.opts() || {};\n const allOptions = { ...parentOptions, ...options };\n withTelemetry(\n { enabled: !allOptions.noTelemetry, options: allOptions },\n () => {\n logger.initialize(allOptions);\n displayHeader();\n i18nCommand(Number(allOptions.batchSize) || 1);\n }\n );\n });\n\nmain(program);\n\nprogram.parse();\n"],"names":[],"mappings":"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","debug_id":"4b439b5f-1c8d-5c46-baa6-14d0f50dd4f9"}
@@ -0,0 +1,2 @@
1
+ export declare function i18nCommand(batchSize: number): Promise<void>;
2
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"/","sources":["commands/i18n.ts"],"names":[],"mappings":"AA4CA,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,iBAyIlD"}
@@ -0,0 +1,215 @@
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]="07fa5837-c204-572a-a464-4653a2df8e31")}catch(e){}}();
3
+ import { createSpinner } from '../logging/console.js';
4
+ import { allMcpPrompt } from '../prompts/system.js';
5
+ import { logger } from '../logging/logger.js';
6
+ import { createDag } from '../utils/dag/createDag.js';
7
+ import { findTsConfig, findWebpackConfig, findRequireConfig, } from '../utils/fs/findConfigs.js';
8
+ import { configureAgent } from '../utils/agentManager.js';
9
+ import { addFilesToManager, markFileAsEdited, markFileAsInProgress, } from '../utils/getFiles.js';
10
+ import { outro } from '@clack/prompts';
11
+ import chalk from 'chalk';
12
+ import { readdirSync, statSync } from 'node:fs';
13
+ import { EXCLUDED_DIRS } from '../utils/shared.js';
14
+ import { validateInitialConfig } from '../utils/validateConfig.js';
15
+ function getCurrentDirectories() {
16
+ try {
17
+ return readdirSync(process.cwd())
18
+ .filter((item) => {
19
+ try {
20
+ return statSync(item).isDirectory();
21
+ }
22
+ catch {
23
+ return false;
24
+ }
25
+ })
26
+ .map((dir) => `./${dir}`)
27
+ .filter((dir) => {
28
+ return !EXCLUDED_DIRS.includes(dir);
29
+ });
30
+ }
31
+ catch {
32
+ return [];
33
+ }
34
+ }
35
+ export async function i18nCommand(batchSize) {
36
+ validateInitialConfig();
37
+ // Init message
38
+ const spinner = createSpinner();
39
+ spinner.start('Initializing Locadex...');
40
+ // Create DAG
41
+ logger.debugMessage('getCurrentDirectories(): ' + getCurrentDirectories().join(', '));
42
+ const dag = createDag(getCurrentDirectories(), {
43
+ tsConfig: findTsConfig(),
44
+ webpackConfig: findWebpackConfig(),
45
+ requireConfig: findRequireConfig(),
46
+ });
47
+ logger.info('dag.getDag().length: ' + String(Object.keys(dag.getDag()).length));
48
+ logger.info('dag.getReverseDag().length: ' +
49
+ String(Object.keys(dag.getReverseDag()).length));
50
+ logger.info('dag.getTopologicalOrder().length: ' +
51
+ String(dag.getTopologicalOrder().length));
52
+ // Configure agent
53
+ const { agent, filesStateFilePath } = configureAgent({
54
+ mcpTransport: 'sse',
55
+ });
56
+ // Track session id
57
+ let sessionId = undefined;
58
+ // Create the list of files (aka tasks) to process
59
+ const taskQueue = dag.getTopologicalOrder();
60
+ // Add files to manager
61
+ const stateFilePath = addFilesToManager(filesStateFilePath, taskQueue);
62
+ logger.info(`[dagCommand] Track progress here: ${stateFilePath}`);
63
+ // Main loop
64
+ let hasError = false;
65
+ while (taskQueue.length > 0) {
66
+ // Get the next task
67
+ const tasks = taskQueue.splice(0, batchSize);
68
+ if (tasks.length === 0) {
69
+ break;
70
+ }
71
+ // Mark task as in progress
72
+ tasks.forEach((task) => markFileAsInProgress(task, filesStateFilePath));
73
+ // Construct prompt
74
+ const dependencies = Object.fromEntries(tasks.map((task) => [
75
+ task,
76
+ Array.from(new Set(dag.getDependencies(task))),
77
+ ]));
78
+ const dependents = Object.fromEntries(tasks.map((task) => [task, Array.from(new Set(dag.getDependents(task)))]));
79
+ const prompt = getPrompt({
80
+ targetFile: tasks,
81
+ dependencyFiles: dependencies,
82
+ dependentFiles: dependents,
83
+ });
84
+ // Claude call
85
+ try {
86
+ await agent.run({
87
+ prompt,
88
+ sessionId,
89
+ }, { spinner });
90
+ if (!sessionId) {
91
+ sessionId = agent.getSessionId();
92
+ }
93
+ }
94
+ catch (error) {
95
+ hasError = true;
96
+ logger.debugMessage(`[dagCommand] Error in claude i18n process: ${error}`);
97
+ break;
98
+ }
99
+ // Mark task as complete
100
+ tasks.forEach((task) => markFileAsEdited(task, filesStateFilePath));
101
+ }
102
+ // TODO: uncomment
103
+ // // Always clean up the file list when done, regardless of success or failure
104
+ // logger.info(`[dagCommand] Cleaning up file list: ${stateFilePath}`);
105
+ // cleanUp(stateFilePath);
106
+ // If there was an error, exit with code 1
107
+ if (hasError) {
108
+ outro(chalk.red('❌ Locadex i18n failed!'));
109
+ process.exit(1);
110
+ }
111
+ // Fix prompt
112
+ const fixPrompt = getFixPrompt();
113
+ try {
114
+ await agent.run({ prompt: fixPrompt, sessionId }, { spinner });
115
+ }
116
+ catch (error) {
117
+ logger.debugMessage(`[dagCommand] Fixing errors failed: ${error}`);
118
+ outro(chalk.red('❌ Locadex i18n failed!'));
119
+ process.exit(1);
120
+ }
121
+ // Generate report
122
+ const reportPrompt = getReportPrompt();
123
+ try {
124
+ await agent.run({
125
+ prompt: reportPrompt,
126
+ sessionId,
127
+ }, { spinner });
128
+ }
129
+ catch (error) {
130
+ logger.debugMessage(`[dagCommand] Error in claude report generation: ${error}`);
131
+ outro(chalk.red('❌ Locadex i18n failed!'));
132
+ process.exit(1);
133
+ }
134
+ outro(chalk.green('✅ Locadex i18n complete!'));
135
+ process.exit(0);
136
+ }
137
+ function getPrompt({ targetFile, dependencyFiles, dependentFiles, }) {
138
+ const prompt = `# Task: Internationalize the target file using gt-next.
139
+
140
+ --- INSTRUCTIONS ---
141
+
142
+ - You are given a list of target files and a list of dependency/dependent files.
143
+ - The project is already setup for internationalization. You do not need to setup the project again for i18n.
144
+
145
+ ## Workflow:
146
+ 1. **Gather background** Read the target files closely (you should not have to read the dependency/dependent files).
147
+ 2. **Evaluate if i18n is necessary** Evaluate if just the target files need to be internationalized using gt-next (the target files may have no relevant content, they may already be internationalized, or they contain build-time code (e.g. nextjs plugins) should never be internationalized).
148
+ **IMPORTANT**: IF NONE OF THE TARGET FILES NEED TO BE INTERNATIONALIZED, YOUR TASK IS COMPLETE AND YOU MAY RETURN.
149
+ 3. **Identify the tools to use** Given the contents of the files, ask yourself which tools and guides you need to use to get the necessary knowledge to internationalize the target files. Here are some helpful questions to evaluate for tool selection:
150
+ - 3.a. Does this file contain a component? If so, is it a server-side component or a client-side component?
151
+ - 3.b. Is the content that needs to be i18ned being used in this same file, or is it being used in another file?
152
+ - 3.c. Is there any string interpolation that needs to be i18ned?
153
+ - 3.d. Is there any conditional logic or rendering that needs to be i18ned?
154
+ - 3.e. Is the content that needs to be i18ned HTML/JSX or a string?
155
+ 4. **Internationalize** You now have the necessary knowledge. Internationalize the files using the information from the tools provided to you.
156
+ - 4.a. Do not worry about running tsc. We will do that later.
157
+
158
+ ## RULES:
159
+ - ALWAYS use the <T> component to internationalize HTML/JSX content. Only use getGT() or useGT() and getDict() or useDict() for string content.
160
+ - Do not add i18n middleware to the app
161
+ - When adding 'useGT()' or 'useDict()' to a client component, you must add 'use client' to the top of the file.
162
+ - Strictly adhere to the guides provided to gain necessary knowledge about how to internationalize the content.
163
+ - Minimize the footprint of the changes.
164
+ - Only focus on internationalizing the content of the target files.
165
+ - NEVER move internationalized content to a different file. All content MUST remain in the same file where it came from.
166
+ - NEVER CREATE OR REMOVE ANY FILES (especially .bak files)
167
+ - Internationalize all user facing content in the target files. Do not internationalize content that is not user facing.
168
+ - NEVER EDIT FILES THAT ARE NOT GIVEN TO YOU.
169
+
170
+
171
+ --- TARGET FILE INFORMATION ---
172
+ ${targetFile.map((file) => `
173
+ Target file path:
174
+ ${file}
175
+
176
+ Dependency files (files imported by the target file):
177
+ ${dependencyFiles[file].length > 0 ? ` ${dependencyFiles[file].join(', ')}` : 'none'}
178
+
179
+ Dependent files (files that import the target file):
180
+ ${dependentFiles[file].length > 0 ? ` ${dependentFiles[file].join(', ')}` : 'none'}
181
+ `)}
182
+ --- MCP TOOLS ---
183
+
184
+ ${allMcpPrompt}
185
+ `;
186
+ return prompt;
187
+ }
188
+ // check (dry run and ts check) should be at the end
189
+ function getFixPrompt() {
190
+ const prompt = `--- INSTRUCTIONS ---
191
+
192
+ Your task is as follows:
193
+ Start by running the gt-next linter (and ts type check if there are ts/tsx files).
194
+ (1) You need to fix all errors relevant to the gt implementation code.
195
+ (2) Whenever you are finished with your changes please run the gt-next linter (and ts type check if applicable).
196
+ (3) Repeat steps 1-2 until there are no more errors or until you believe that you have fixed all errors.
197
+
198
+ Rules:
199
+ - DO NOT modify any files that are not relevant to the gt implementation code.
200
+ - ONLY fix errors that are relevant to the gt implementation code and your implementation.
201
+
202
+ To run the gt-next linter, run the following command:
203
+ 'npx gtx-cli translate --dry-run'and is appropriate for the files you have modified.`;
204
+ return prompt;
205
+ }
206
+ function getReportPrompt() {
207
+ const prompt = `--- INSTRUCTIONS ---
208
+
209
+ - Please add a markdown file called 'locadex-report.md' to the root of the project.
210
+ - The report should include a summary of the changes you made to the project.
211
+ - A list of items the user needs to complete to finish the internationalization process (adding env vars, etc.).`;
212
+ return prompt;
213
+ }
214
+ //# sourceMappingURL=i18n.js.map
215
+ //# debugId=07fa5837-c204-572a-a464-4653a2df8e31
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sources":["commands/i18n.ts"],"sourceRoot":"/","sourcesContent":["import { createSpinner, displayHeader } from '../logging/console.js';\nimport { allMcpPrompt } from '../prompts/system.js';\n\nimport { logger } from '../logging/logger.js';\nimport { createDag } from '../utils/dag/createDag.js';\nimport {\n findTsConfig,\n findWebpackConfig,\n findRequireConfig,\n} from '../utils/fs/findConfigs.js';\nimport { configureAgent } from '../utils/agentManager.js';\nimport {\n addFilesToManager,\n cleanUp,\n markFileAsEdited,\n markFileAsInProgress,\n} from '../utils/getFiles.js';\nimport { outro } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\nimport { readdirSync, statSync } from 'node:fs';\nimport { EXCLUDED_DIRS } from '../utils/shared.js';\nimport { validateInitialConfig } from '../utils/validateConfig.js';\n\nfunction getCurrentDirectories(): string[] {\n try {\n return readdirSync(process.cwd())\n .filter((item) => {\n try {\n return statSync(item).isDirectory();\n } catch {\n return false;\n }\n })\n .map((dir) => `./${dir}`)\n .filter((dir) => {\n return !EXCLUDED_DIRS.includes(dir);\n });\n } catch {\n return [];\n }\n}\n\nexport async function i18nCommand(batchSize: number) {\n validateInitialConfig();\n\n // Init message\n const spinner = createSpinner();\n spinner.start('Initializing Locadex...');\n\n // Create DAG\n logger.debugMessage(\n 'getCurrentDirectories(): ' + getCurrentDirectories().join(', ')\n );\n const dag = createDag(getCurrentDirectories(), {\n tsConfig: findTsConfig(),\n webpackConfig: findWebpackConfig(),\n requireConfig: findRequireConfig(),\n });\n\n logger.info(\n 'dag.getDag().length: ' + String(Object.keys(dag.getDag()).length)\n );\n logger.info(\n 'dag.getReverseDag().length: ' +\n String(Object.keys(dag.getReverseDag()).length)\n );\n logger.info(\n 'dag.getTopologicalOrder().length: ' +\n String(dag.getTopologicalOrder().length)\n );\n\n // Configure agent\n const { agent, filesStateFilePath } = configureAgent({\n mcpTransport: 'sse',\n });\n\n // Track session id\n let sessionId: string | undefined = undefined;\n\n // Create the list of files (aka tasks) to process\n const taskQueue = dag.getTopologicalOrder();\n\n // Add files to manager\n const stateFilePath = addFilesToManager(filesStateFilePath, taskQueue);\n logger.info(`[dagCommand] Track progress here: ${stateFilePath}`);\n\n // Main loop\n let hasError = false;\n while (taskQueue.length > 0) {\n // Get the next task\n const tasks = taskQueue.splice(0, batchSize);\n if (tasks.length === 0) {\n break;\n }\n\n // Mark task as in progress\n tasks.forEach((task) => markFileAsInProgress(task, filesStateFilePath));\n\n // Construct prompt\n const dependencies = Object.fromEntries(\n tasks.map((task) => [\n task,\n Array.from(new Set(dag.getDependencies(task))),\n ])\n );\n const dependents = Object.fromEntries(\n tasks.map((task) => [task, Array.from(new Set(dag.getDependents(task)))])\n );\n const prompt = getPrompt({\n targetFile: tasks,\n dependencyFiles: dependencies,\n dependentFiles: dependents,\n });\n\n // Claude call\n try {\n await agent.run(\n {\n prompt,\n sessionId,\n },\n { spinner }\n );\n if (!sessionId) {\n sessionId = agent.getSessionId();\n }\n } catch (error) {\n hasError = true;\n logger.debugMessage(\n `[dagCommand] Error in claude i18n process: ${error}`\n );\n break;\n }\n\n // Mark task as complete\n tasks.forEach((task) => markFileAsEdited(task, filesStateFilePath));\n }\n\n // TODO: uncomment\n // // Always clean up the file list when done, regardless of success or failure\n // logger.info(`[dagCommand] Cleaning up file list: ${stateFilePath}`);\n // cleanUp(stateFilePath);\n\n // If there was an error, exit with code 1\n if (hasError) {\n outro(chalk.red('❌ Locadex i18n failed!'));\n process.exit(1);\n }\n\n // Fix prompt\n const fixPrompt = getFixPrompt();\n try {\n await agent.run({ prompt: fixPrompt, sessionId }, { spinner });\n } catch (error) {\n logger.debugMessage(`[dagCommand] Fixing errors failed: ${error}`);\n outro(chalk.red('❌ Locadex i18n failed!'));\n process.exit(1);\n }\n\n // Generate report\n const reportPrompt = getReportPrompt();\n try {\n await agent.run(\n {\n prompt: reportPrompt,\n sessionId,\n },\n { spinner }\n );\n } catch (error) {\n logger.debugMessage(\n `[dagCommand] Error in claude report generation: ${error}`\n );\n outro(chalk.red('❌ Locadex i18n failed!'));\n process.exit(1);\n }\n\n outro(chalk.green('✅ Locadex i18n complete!'));\n process.exit(0);\n}\n\nfunction getPrompt({\n targetFile,\n dependencyFiles,\n dependentFiles,\n}: {\n targetFile: string[];\n dependencyFiles: Record<string, string[]>;\n dependentFiles: Record<string, string[]>;\n}) {\n const prompt = `# Task: Internationalize the target file using gt-next.\n\n--- INSTRUCTIONS ---\n\n- You are given a list of target files and a list of dependency/dependent files.\n- The project is already setup for internationalization. You do not need to setup the project again for i18n.\n\n## Workflow:\n1. **Gather background** Read the target files closely (you should not have to read the dependency/dependent files).\n2. **Evaluate if i18n is necessary** Evaluate if just the target files need to be internationalized using gt-next (the target files may have no relevant content, they may already be internationalized, or they contain build-time code (e.g. nextjs plugins) should never be internationalized).\n**IMPORTANT**: IF NONE OF THE TARGET FILES NEED TO BE INTERNATIONALIZED, YOUR TASK IS COMPLETE AND YOU MAY RETURN.\n3. **Identify the tools to use** Given the contents of the files, ask yourself which tools and guides you need to use to get the necessary knowledge to internationalize the target files. Here are some helpful questions to evaluate for tool selection:\n - 3.a. Does this file contain a component? If so, is it a server-side component or a client-side component?\n - 3.b. Is the content that needs to be i18ned being used in this same file, or is it being used in another file?\n - 3.c. Is there any string interpolation that needs to be i18ned?\n - 3.d. Is there any conditional logic or rendering that needs to be i18ned?\n - 3.e. Is the content that needs to be i18ned HTML/JSX or a string?\n4. **Internationalize** You now have the necessary knowledge. Internationalize the files using the information from the tools provided to you.\n - 4.a. Do not worry about running tsc. We will do that later.\n\n## RULES:\n- ALWAYS use the <T> component to internationalize HTML/JSX content. Only use getGT() or useGT() and getDict() or useDict() for string content.\n- Do not add i18n middleware to the app\n- When adding 'useGT()' or 'useDict()' to a client component, you must add 'use client' to the top of the file.\n- Strictly adhere to the guides provided to gain necessary knowledge about how to internationalize the content.\n- Minimize the footprint of the changes.\n- Only focus on internationalizing the content of the target files.\n- NEVER move internationalized content to a different file. All content MUST remain in the same file where it came from.\n- NEVER CREATE OR REMOVE ANY FILES (especially .bak files)\n- Internationalize all user facing content in the target files. Do not internationalize content that is not user facing.\n- NEVER EDIT FILES THAT ARE NOT GIVEN TO YOU.\n\n\n--- TARGET FILE INFORMATION ---\n${targetFile.map(\n (file) => `\nTarget file path:\n${file}\n\nDependency files (files imported by the target file):\n${dependencyFiles[file].length > 0 ? ` ${dependencyFiles[file].join(', ')}` : 'none'}\n\nDependent files (files that import the target file):\n${dependentFiles[file].length > 0 ? ` ${dependentFiles[file].join(', ')}` : 'none'}\n`\n)}\n--- MCP TOOLS ---\n\n${allMcpPrompt}\n`;\n\n return prompt;\n}\n\n// check (dry run and ts check) should be at the end\n\nfunction getFixPrompt() {\n const prompt = `--- INSTRUCTIONS ---\n \n Your task is as follows:\n Start by running the gt-next linter (and ts type check if there are ts/tsx files).\n (1) You need to fix all errors relevant to the gt implementation code.\n (2) Whenever you are finished with your changes please run the gt-next linter (and ts type check if applicable).\n (3) Repeat steps 1-2 until there are no more errors or until you believe that you have fixed all errors.\n\n Rules:\n - DO NOT modify any files that are not relevant to the gt implementation code.\n - ONLY fix errors that are relevant to the gt implementation code and your implementation.\n\n To run the gt-next linter, run the following command:\n 'npx gtx-cli translate --dry-run'and is appropriate for the files you have modified.`;\n\n return prompt;\n}\n\nfunction getReportPrompt() {\n const prompt = `--- INSTRUCTIONS ---\n\n- Please add a markdown file called 'locadex-report.md' to the root of the project.\n- The report should include a summary of the changes you made to the project.\n- A list of items the user needs to complete to finish the internationalization process (adding env vars, etc.).`;\n\n return prompt;\n}\n"],"names":[],"mappings":"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","debug_id":"07fa5837-c204-572a-a464-4653a2df8e31"}
@@ -0,0 +1,2 @@
1
+ export declare function setupCommand(batchSize: number): Promise<void>;
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"/","sources":["commands/setup.ts"],"names":[],"mappings":"AAmBA,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,iBAuGnD"}
@@ -0,0 +1,89 @@
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]="a9e98ee6-f615-5247-9ff0-2ab8e30ae2c6")}catch(e){}}();
3
+ import { createSpinner, promptConfirm, } from '../logging/console.js';
4
+ import { getPackageJson, isPackageInstalled } from 'gtx-cli/utils/packageJson';
5
+ import { getPackageManager } from 'gtx-cli/utils/packageManager';
6
+ import { installPackage } from 'gtx-cli/utils/installPackage';
7
+ import chalk from 'chalk';
8
+ import { logger } from '../logging/logger.js';
9
+ import { findFilepaths } from '../utils/fs/findConfigs.js';
10
+ import { wrapContentNext } from 'gtx-cli/next/parse/wrapContent';
11
+ import { handleInitGT } from 'gtx-cli/next/parse/handleInitGT';
12
+ import { detectFormatter, formatFiles } from 'gtx-cli/hooks/postProcess';
13
+ import { createOrUpdateConfig } from 'gtx-cli/fs/config/setupConfig';
14
+ import { i18nCommand } from './i18n.js';
15
+ import { validateInitialConfig } from '../utils/validateConfig.js';
16
+ import { getNextDirectories } from '../utils/fs/getFiles.js';
17
+ export async function setupCommand(batchSize) {
18
+ validateInitialConfig();
19
+ const answer = await promptConfirm({
20
+ message: chalk.yellow(`Locadex will modify files! Make sure you have committed or stashed any changes. Do you want to continue?`),
21
+ defaultValue: true,
22
+ cancelMessage: 'Operation cancelled.',
23
+ });
24
+ if (!answer) {
25
+ logger.info('Operation cancelled.');
26
+ process.exit(0);
27
+ }
28
+ const packageJson = await getPackageJson();
29
+ const packageManager = await getPackageManager();
30
+ const spinner = createSpinner('timer');
31
+ spinner.start(`Installing gt-next with ${packageManager.name}...`);
32
+ await installPackage('gt-next', packageManager);
33
+ spinner.stop(chalk.green('Automatically installed gt-next.'));
34
+ const nextConfigPath = findFilepaths([
35
+ './next.config.js',
36
+ './next.config.ts',
37
+ './next.config.mjs',
38
+ './next.config.mts',
39
+ ])[0];
40
+ if (!nextConfigPath) {
41
+ logger.error('No next.config.[js|ts|mjs|mts] file found.');
42
+ process.exit(1);
43
+ }
44
+ const errors = [];
45
+ const warnings = [];
46
+ let filesUpdated = [];
47
+ const babel = createSpinner();
48
+ babel.start('Wrapping JSX content with <T> tags...');
49
+ // Wrap all JSX elements in the src directory with a <T> tag, with unique ids
50
+ const { filesUpdated: filesUpdatedNext } = await wrapContentNext({
51
+ src: getNextDirectories(),
52
+ config: nextConfigPath,
53
+ disableIds: true,
54
+ disableFormatting: true,
55
+ skipTs: true,
56
+ addGTProvider: true,
57
+ }, 'gt-next', errors, warnings);
58
+ filesUpdated = [...filesUpdated, ...filesUpdatedNext];
59
+ babel.stop(chalk.green(`Modified ${filesUpdated.length} files.`));
60
+ // Add the withGTConfig() function to the next.config.js file
61
+ await handleInitGT(nextConfigPath, errors, warnings, filesUpdated);
62
+ logger.step(chalk.green(`Added withGTConfig() to your ${nextConfigPath} file.`));
63
+ const formatter = await detectFormatter();
64
+ if (formatter && filesUpdated.length > 0) {
65
+ logger.step(chalk.green(`Formatting ${filesUpdated.length} files...`));
66
+ await formatFiles(filesUpdated, formatter);
67
+ }
68
+ // Create gt.config.json
69
+ await createOrUpdateConfig('gt.config.json', {
70
+ defaultLocale: 'en',
71
+ locales: ['es', 'fr', 'de', 'ja', 'zh'],
72
+ framework: 'next-app',
73
+ });
74
+ logger.success(`Feel free to edit ${chalk.cyan('gt.config.json')} to customize your translation setup. Docs: https://generaltranslation.com/docs/cli/reference/config`);
75
+ // Install locadex if not installed
76
+ const isLocadexInstalled = packageJson
77
+ ? isPackageInstalled('locadex', packageJson, true, true)
78
+ : true; // if no package.json, we can't install it
79
+ if (!isLocadexInstalled) {
80
+ const packageManager = await getPackageManager();
81
+ const spinner = createSpinner();
82
+ spinner.start(`Installing locadex as a dev dependency with ${packageManager.name}...`);
83
+ await installPackage('locadex', packageManager, true);
84
+ spinner.stop(chalk.green('Installed locadex.'));
85
+ }
86
+ i18nCommand(batchSize);
87
+ }
88
+ //# sourceMappingURL=setup.js.map
89
+ //# debugId=a9e98ee6-f615-5247-9ff0-2ab8e30ae2c6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sources":["commands/setup.ts"],"sourceRoot":"/","sourcesContent":["import {\n createSpinner,\n displayHeader,\n promptConfirm,\n} from '../logging/console.js';\nimport { getPackageJson, isPackageInstalled } from 'gtx-cli/utils/packageJson';\nimport { getPackageManager } from 'gtx-cli/utils/packageManager';\nimport { installPackage } from 'gtx-cli/utils/installPackage';\nimport chalk from 'chalk';\nimport { logger } from '../logging/logger.js';\nimport { findFilepaths } from '../utils/fs/findConfigs.js';\nimport { wrapContentNext } from 'gtx-cli/next/parse/wrapContent';\nimport { handleInitGT } from 'gtx-cli/next/parse/handleInitGT';\nimport { detectFormatter, formatFiles } from 'gtx-cli/hooks/postProcess';\nimport { createOrUpdateConfig } from 'gtx-cli/fs/config/setupConfig';\nimport { i18nCommand } from './i18n.js';\nimport { validateInitialConfig } from '../utils/validateConfig.js';\nimport { getNextDirectories } from '../utils/fs/getFiles.js';\n\nexport async function setupCommand(batchSize: number) {\n validateInitialConfig();\n const answer = await promptConfirm({\n message: chalk.yellow(\n `Locadex will modify files! Make sure you have committed or stashed any changes. Do you want to continue?`\n ),\n defaultValue: true,\n cancelMessage: 'Operation cancelled.',\n });\n if (!answer) {\n logger.info('Operation cancelled.');\n process.exit(0);\n }\n\n const packageJson = await getPackageJson();\n const packageManager = await getPackageManager();\n\n const spinner = createSpinner('timer');\n\n spinner.start(`Installing gt-next with ${packageManager.name}...`);\n\n await installPackage('gt-next', packageManager);\n\n spinner.stop(chalk.green('Automatically installed gt-next.'));\n\n const nextConfigPath = findFilepaths([\n './next.config.js',\n './next.config.ts',\n './next.config.mjs',\n './next.config.mts',\n ])[0];\n\n if (!nextConfigPath) {\n logger.error('No next.config.[js|ts|mjs|mts] file found.');\n process.exit(1);\n }\n\n const errors: string[] = [];\n const warnings: string[] = [];\n let filesUpdated: string[] = [];\n\n const babel = createSpinner();\n\n babel.start('Wrapping JSX content with <T> tags...');\n\n // Wrap all JSX elements in the src directory with a <T> tag, with unique ids\n const { filesUpdated: filesUpdatedNext } = await wrapContentNext(\n {\n src: getNextDirectories(),\n config: nextConfigPath,\n disableIds: true,\n disableFormatting: true,\n skipTs: true,\n addGTProvider: true,\n },\n 'gt-next',\n errors,\n warnings\n );\n filesUpdated = [...filesUpdated, ...filesUpdatedNext];\n\n babel.stop(chalk.green(`Modified ${filesUpdated.length} files.`));\n // Add the withGTConfig() function to the next.config.js file\n await handleInitGT(nextConfigPath, errors, warnings, filesUpdated);\n logger.step(\n chalk.green(`Added withGTConfig() to your ${nextConfigPath} file.`)\n );\n\n const formatter = await detectFormatter();\n if (formatter && filesUpdated.length > 0) {\n logger.step(chalk.green(`Formatting ${filesUpdated.length} files...`));\n await formatFiles(filesUpdated, formatter);\n }\n\n // Create gt.config.json\n await createOrUpdateConfig('gt.config.json', {\n defaultLocale: 'en',\n locales: ['es', 'fr', 'de', 'ja', 'zh'],\n framework: 'next-app',\n });\n\n logger.success(\n `Feel free to edit ${chalk.cyan(\n 'gt.config.json'\n )} to customize your translation setup. Docs: https://generaltranslation.com/docs/cli/reference/config`\n );\n\n // Install locadex if not installed\n const isLocadexInstalled = packageJson\n ? isPackageInstalled('locadex', packageJson, true, true)\n : true; // if no package.json, we can't install it\n\n if (!isLocadexInstalled) {\n const packageManager = await getPackageManager();\n const spinner = createSpinner();\n spinner.start(\n `Installing locadex as a dev dependency with ${packageManager.name}...`\n );\n await installPackage('locadex', packageManager, true);\n spinner.stop(chalk.green('Installed locadex.'));\n }\n\n i18nCommand(batchSize);\n}\n"],"names":[],"mappings":"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","debug_id":"a9e98ee6-f615-5247-9ff0-2ab8e30ae2c6"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,2 @@
1
- #!/usr/bin/env node
2
1
  export {};
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":""}
package/dist/index.js CHANGED
@@ -1,68 +1,5 @@
1
- #!/usr/bin/env node
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
39
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
40
- import { addDocsTools } from './tools/docs.js';
41
- import { addDocsResource } from './resources/docs.js';
42
- import { readFileSync } from 'node:fs';
43
- import { fromPackageRoot } from './utils/getPaths.js';
44
- function main() {
45
- return __awaiter(this, void 0, void 0, function () {
46
- var server, transport;
47
- return __generator(this, function (_a) {
48
- switch (_a.label) {
49
- case 0:
50
- server = new McpServer({
51
- name: 'Locadex: AI Agent for Internationalization',
52
- version: JSON.parse(readFileSync(fromPackageRoot('package.json'), 'utf8'))
53
- .version,
54
- });
55
- addDocsResource(server);
56
- addDocsTools(server);
57
- transport = new StdioServerTransport();
58
- return [4 /*yield*/, server.connect(transport)];
59
- case 1:
60
- _a.sent();
61
- console.error('Locadex started on stdio');
62
- return [2 /*return*/];
63
- }
64
- });
65
- });
66
- }
67
- main();
68
- //# sourceMappingURL=index.js.map
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]="2018e1ad-65d3-5c7a-aa89-fdda8e4aebd8")}catch(e){}}();
3
+ export {};
4
+ //# sourceMappingURL=index.js.map
5
+ //# debugId=2018e1ad-65d3-5c7a-aa89-fdda8e4aebd8
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,SAAe,IAAI;;;;;;oBACX,MAAM,GAAG,IAAI,SAAS,CAAC;wBAC3B,IAAI,EAAE,4CAA4C;wBAClD,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;6BACvE,OAAO;qBACX,CAAC,CAAC;oBACH,eAAe,CAAC,MAAM,CAAC,CAAC;oBACxB,YAAY,CAAC,MAAM,CAAC,CAAC;oBACf,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;oBAC7C,qBAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAA;;oBAA/B,SAA+B,CAAC;oBAChC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;;;;;CAC3C;AACD,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sources":["index.ts"],"sourceRoot":"/","sourcesContent":[""],"names":[],"mappings":"","debug_id":"2018e1ad-65d3-5c7a-aa89-fdda8e4aebd8"}
@@ -0,0 +1,45 @@
1
+ export declare function logInfo(message: string): void;
2
+ export declare function logWarning(message: string): void;
3
+ export declare function logError(message: string): void;
4
+ export declare function logSuccess(message: string): void;
5
+ export declare function logStep(message: string): void;
6
+ export declare function logMessage(message: string): void;
7
+ export declare function logErrorAndExit(message: string): void;
8
+ export declare function startCommand(message: string): void;
9
+ export declare function endCommand(message: string): void;
10
+ export declare function displayHeader(): void;
11
+ export declare function createSpinner(indicator?: 'dots' | 'timer'): import("@clack/prompts").SpinnerResult;
12
+ export declare function promptText({ message, defaultValue, validate, }: {
13
+ message: string;
14
+ defaultValue?: string;
15
+ validate?: (value: string) => boolean | string;
16
+ }): Promise<string>;
17
+ export declare function promptSelect<T>({ message, options, defaultValue, }: {
18
+ message: string;
19
+ options: Array<{
20
+ value: T;
21
+ label: string;
22
+ hint?: string;
23
+ }>;
24
+ defaultValue?: T;
25
+ }): Promise<T>;
26
+ export declare function promptMultiSelect<T extends string>({ message, options, required, }: {
27
+ message: string;
28
+ options: Array<{
29
+ value: T;
30
+ label: string;
31
+ hint?: string;
32
+ }>;
33
+ required?: boolean;
34
+ }): Promise<T[]>;
35
+ export declare function promptConfirm({ message, defaultValue, cancelMessage, }: {
36
+ message: string;
37
+ defaultValue?: boolean;
38
+ cancelMessage?: string;
39
+ }): Promise<boolean>;
40
+ export declare function createTaskLogger(message: string): {
41
+ message(msg: string, mopts?: import("@clack/prompts").TaskLogMessageOptions): void;
42
+ error(message: string, opts?: import("@clack/prompts").TaskLogCompletionOptions): void;
43
+ success(message: string, opts?: import("@clack/prompts").TaskLogCompletionOptions): void;
44
+ };
45
+ //# sourceMappingURL=console.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"/","sources":["logging/console.ts"],"names":[],"mappings":"AAiBA,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,QAEtC;AACD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,QAEzC;AACD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,QAEvC;AACD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,QAEzC;AACD,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,QAEtC;AACD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,QAEzC;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,QAG9C;AAGD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,QAE3C;AACD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,QAEzC;AAGD,wBAAgB,aAAa,SAI5B;AA8BD,wBAAgB,aAAa,CAAC,SAAS,GAAE,MAAM,GAAG,OAAiB,0CAElE;AAGD,wBAAsB,UAAU,CAAC,EAC/B,OAAO,EACP,YAAY,EACZ,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAAC;CAChD,mBAkBA;AAED,wBAAsB,YAAY,CAAC,CAAC,EAAE,EACpC,OAAO,EACP,OAAO,EACP,YAAY,GACb,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,YAAY,CAAC,EAAE,CAAC,CAAC;CAClB,cAoBA;AAED,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,EACxD,OAAO,EACP,OAAO,EACP,QAAe,GAChB,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,gBAoBA;AAED,wBAAsB,aAAa,CAAC,EAClC,OAAO,EACP,YAAmB,EACnB,aAAqC,GACtC,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,oBAYA;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM;;;;EAE/C"}