locadex 0.1.0-alpha.9 → 0.1.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.
- package/CHANGELOG.md +20 -0
- package/README.md +3 -5
- package/dist/cli.js +11 -10
- package/dist/cli.js.map +1 -1
- package/dist/commands/i18n.d.ts.map +1 -1
- package/dist/commands/i18n.js +15 -14
- package/dist/commands/i18n.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +15 -14
- package/dist/commands/setup.js.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/logging/console.js +2 -5
- package/dist/logging/console.js.map +1 -1
- package/dist/logging/logger.d.ts +4 -2
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/logger.js +1 -4
- package/dist/logging/logger.js.map +1 -1
- package/dist/mcp/getDocs.js +1 -4
- package/dist/mcp/getDocs.js.map +1 -1
- package/dist/mcp/getGuide.js +1 -4
- package/dist/mcp/getGuide.js.map +1 -1
- package/dist/mcp/getPort.js +1 -4
- package/dist/mcp/getPort.js.map +1 -1
- package/dist/mcp/tools/docs.js +1 -4
- package/dist/mcp/tools/docs.js.map +1 -1
- package/dist/mcp/tools/guides.js +1 -4
- package/dist/mcp/tools/guides.js.map +1 -1
- package/dist/mcp.d.ts +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +56 -16
- package/dist/mcp.js.map +1 -1
- package/dist/prompts/system.js +1 -4
- package/dist/prompts/system.js.map +1 -1
- package/dist/tasks/concurrency.d.ts +72 -0
- package/dist/tasks/concurrency.d.ts.map +1 -0
- package/dist/tasks/concurrency.js +132 -0
- package/dist/tasks/concurrency.js.map +1 -0
- package/dist/tasks/i18n.d.ts.map +1 -1
- package/dist/tasks/i18n.js +60 -127
- package/dist/tasks/i18n.js.map +1 -1
- package/dist/tasks/setup.d.ts.map +1 -1
- package/dist/tasks/setup.js +40 -44
- package/dist/tasks/setup.js.map +1 -1
- package/dist/telemetry.js +1 -4
- package/dist/telemetry.js.map +1 -1
- package/dist/types/claude-sdk.d.ts +1 -1
- package/dist/types/claude-sdk.d.ts.map +1 -1
- package/dist/types/claude-sdk.js +1 -4
- package/dist/types/claude-sdk.js.map +1 -1
- package/dist/types/cli.d.ts +3 -0
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/cli.js +1 -4
- package/dist/types/cli.js.map +1 -1
- package/dist/utils/claudeCode.d.ts +6 -5
- package/dist/utils/claudeCode.d.ts.map +1 -1
- package/dist/utils/claudeCode.js +50 -17
- package/dist/utils/claudeCode.js.map +1 -1
- package/dist/utils/config.d.ts +4 -3
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +33 -20
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/dag/createDag.d.ts.map +1 -1
- package/dist/utils/dag/createDag.js +10 -11
- package/dist/utils/dag/createDag.js.map +1 -1
- package/dist/utils/dag/extractFiles.d.ts.map +1 -1
- package/dist/utils/dag/extractFiles.js +6 -9
- package/dist/utils/dag/extractFiles.js.map +1 -1
- package/dist/utils/dag/getFiles.d.ts +1 -12
- package/dist/utils/dag/getFiles.d.ts.map +1 -1
- package/dist/utils/dag/getFiles.js +5 -53
- package/dist/utils/dag/getFiles.js.map +1 -1
- package/dist/utils/dag/matchFiles.d.ts +2 -2
- package/dist/utils/dag/matchFiles.d.ts.map +1 -1
- package/dist/utils/dag/matchFiles.js +3 -6
- package/dist/utils/dag/matchFiles.js.map +1 -1
- package/dist/utils/fs/findConfigs.d.ts +4 -4
- package/dist/utils/fs/findConfigs.d.ts.map +1 -1
- package/dist/utils/fs/findConfigs.js +7 -13
- package/dist/utils/fs/findConfigs.js.map +1 -1
- package/dist/utils/fs/getFiles.d.ts +1 -1
- package/dist/utils/fs/getFiles.d.ts.map +1 -1
- package/dist/utils/fs/getFiles.js +3 -6
- package/dist/utils/fs/getFiles.js.map +1 -1
- package/dist/utils/fs/git.d.ts +6 -0
- package/dist/utils/fs/git.d.ts.map +1 -0
- package/dist/utils/fs/git.js +32 -0
- package/dist/utils/fs/git.js.map +1 -0
- package/dist/utils/fs/writeFiles.js +1 -4
- package/dist/utils/fs/writeFiles.js.map +1 -1
- package/dist/utils/getPaths.js +1 -4
- package/dist/utils/getPaths.js.map +1 -1
- package/dist/utils/locadexManager.d.ts +15 -5
- package/dist/utils/locadexManager.d.ts.map +1 -1
- package/dist/utils/locadexManager.js +80 -73
- package/dist/utils/locadexManager.js.map +1 -1
- package/dist/utils/lockfile.d.ts +2 -2
- package/dist/utils/lockfile.d.ts.map +1 -1
- package/dist/utils/lockfile.js +8 -17
- package/dist/utils/lockfile.js.map +1 -1
- package/dist/utils/packages/installPackage.d.ts +4 -0
- package/dist/utils/packages/installPackage.d.ts.map +1 -1
- package/dist/utils/packages/installPackage.js +41 -5
- package/dist/utils/packages/installPackage.js.map +1 -1
- package/dist/utils/session.js +1 -4
- package/dist/utils/session.js.map +1 -1
- package/dist/utils/shared.js +1 -4
- package/dist/utils/shared.js.map +1 -1
- package/dist/utils/shutdown.d.ts.map +1 -1
- package/dist/utils/shutdown.js +1 -9
- package/dist/utils/shutdown.js.map +1 -1
- package/dist/utils/stats.js +1 -4
- package/dist/utils/stats.js.map +1 -1
- package/guides/next/advanced/var-outside-client-server-component.md +1 -1
- package/package.json +4 -6
- package/dist/mcp/debugger.d.ts +0 -3
- package/dist/mcp/debugger.d.ts.map +0 -1
- package/dist/mcp/debugger.js +0 -37
- package/dist/mcp/debugger.js.map +0 -1
- package/dist/mcp-sse.d.ts +0 -3
- package/dist/mcp-sse.d.ts.map +0 -1
- package/dist/mcp-sse.js +0 -77
- package/dist/mcp-sse.js.map +0 -1
|
@@ -1,12 +1,13 @@
|
|
|
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]="4315bb3c-f91e-59a8-82ba-0b76e35bae44")}catch(e){}}();
|
|
3
1
|
import { getPackageInfo } from 'gtx-cli/utils/packageInfo';
|
|
4
2
|
import { createSpinner } from '../../logging/console.js';
|
|
5
3
|
import chalk from 'chalk';
|
|
6
|
-
import { installPackageGlobal } from 'gtx-cli/utils/installPackage';
|
|
4
|
+
import { installPackage, installPackageGlobal, } from 'gtx-cli/utils/installPackage';
|
|
7
5
|
import { logger } from '../../logging/logger.js';
|
|
8
6
|
import { CLAUDE_CODE_VERSION } from '../shared.js';
|
|
9
7
|
import { exit } from '../shutdown.js';
|
|
8
|
+
import { getPackageManager, } from 'gtx-cli/utils/packageManager';
|
|
9
|
+
import { updatePackageJson } from 'gtx-cli/utils/packageJson';
|
|
10
|
+
import path from 'node:path';
|
|
10
11
|
export async function installClaudeCode() {
|
|
11
12
|
const claudeCodeInfo = await getPackageInfo('@anthropic-ai/claude-code');
|
|
12
13
|
if (!claudeCodeInfo) {
|
|
@@ -26,5 +27,40 @@ export async function installClaudeCode() {
|
|
|
26
27
|
logger.step(`claude-code is already installed: v${claudeCodeInfo.version}`);
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
export async function addTranslateScript(manager, packageJson, packageManager) {
|
|
31
|
+
if (!packageJson.scripts) {
|
|
32
|
+
packageJson.scripts = {};
|
|
33
|
+
}
|
|
34
|
+
const translateCommand = `locadex translate`;
|
|
35
|
+
let translateScript = 'translate';
|
|
36
|
+
if (!packageJson.scripts?.translate) {
|
|
37
|
+
packageJson.scripts.translate = translateCommand;
|
|
38
|
+
translateScript = 'translate';
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
if (packageJson.scripts.translate &&
|
|
42
|
+
packageJson.scripts.translate.includes(translateCommand)) {
|
|
43
|
+
translateScript = 'translate';
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
packageJson.scripts['translate:gt'] = translateCommand;
|
|
47
|
+
translateScript = 'translate:gt';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// prefix translate to build command
|
|
51
|
+
const runTranslate = `${packageManager.runScriptCommand} ${translateScript}`;
|
|
52
|
+
if (packageJson.scripts.build &&
|
|
53
|
+
!packageJson.scripts.build.includes(runTranslate)) {
|
|
54
|
+
packageJson.scripts.build = `${runTranslate} && ${packageJson.scripts.build}`;
|
|
55
|
+
}
|
|
56
|
+
await updatePackageJson(packageJson, manager.appDirectory);
|
|
57
|
+
logger.success(`Added ${chalk.cyan(translateScript)} script to your ${chalk.cyan(path.relative(manager.rootDirectory, path.resolve(manager.appDirectory, 'package.json')))} file and build command. Run ${chalk.cyan(translateScript)} to translate your project.`);
|
|
58
|
+
}
|
|
59
|
+
export async function installLocadex(manager) {
|
|
60
|
+
const packageManager = await getPackageManager(manager.rootDirectory);
|
|
61
|
+
const spinner = createSpinner();
|
|
62
|
+
spinner.start(`Installing locadex as a dev dependency with ${packageManager.name}...`);
|
|
63
|
+
await installPackage('locadex', packageManager, true, manager.rootDirectory);
|
|
64
|
+
spinner.stop(chalk.green('Installed locadex.'));
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=installPackage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installPackage.js","sources":["utils/packages/installPackage.ts"],"
|
|
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 {\n installPackage,\n installPackageGlobal,\n} from 'gtx-cli/utils/installPackage';\nimport { logger } from '../../logging/logger.js';\nimport { CLAUDE_CODE_VERSION } from '../shared.js';\nimport { exit } from '../shutdown.js';\nimport {\n getPackageManager,\n PackageManager,\n} 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 installClaudeCode() {\n const claudeCodeInfo = await getPackageInfo('@anthropic-ai/claude-code');\n if (!claudeCodeInfo) {\n const spinner = createSpinner();\n spinner.start('Installing claude-code...');\n try {\n await installPackageGlobal(\n '@anthropic-ai/claude-code',\n CLAUDE_CODE_VERSION\n );\n spinner.stop(chalk.green('Installed claude-code.'));\n } catch (error) {\n spinner.stop(chalk.red('Failed to install claude-code.'));\n logger.error(\n 'Claude Code installation failed. Please install it manually and try again.'\n );\n await exit(1);\n }\n } else {\n logger.step(`claude-code is already installed: v${claudeCodeInfo.version}`);\n }\n}\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 installLocadex(manager: LocadexManager) {\n const packageManager = await getPackageManager(manager.rootDirectory);\n const spinner = createSpinner();\n spinner.start(\n `Installing locadex as a dev dependency with ${packageManager.name}...`\n );\n await installPackage('locadex', packageManager, true, manager.rootDirectory);\n spinner.stop(chalk.green('Installed locadex.'));\n}\n"]}
|
package/dist/utils/session.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
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){}}();
|
|
3
1
|
import { randomUUID } from 'node:crypto';
|
|
4
2
|
let _sessionId = null;
|
|
5
3
|
export function getSessionId() {
|
|
@@ -8,5 +6,4 @@ export function getSessionId() {
|
|
|
8
6
|
}
|
|
9
7
|
return _sessionId;
|
|
10
8
|
}
|
|
11
|
-
//# sourceMappingURL=session.js.map
|
|
12
|
-
//# debugId=1cd0c442-1dd2-510f-a16c-b7ccf0366d8b
|
|
9
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sources":["utils/session.ts"],"
|
|
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"]}
|
package/dist/utils/shared.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
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]="513100d0-dccb-53d9-ad07-db86abb4c4ec")}catch(e){}}();
|
|
3
1
|
export const DAG_IGNORED_FILES = [
|
|
4
2
|
'next.config.js',
|
|
5
3
|
'next.config.ts',
|
|
@@ -46,5 +44,4 @@ export const DAG_IGNORED_EXTENSIONS = [
|
|
|
46
44
|
'.fixture.ts', // Test fixtures
|
|
47
45
|
];
|
|
48
46
|
export const CLAUDE_CODE_VERSION = '1.0.16';
|
|
49
|
-
//# sourceMappingURL=shared.js.map
|
|
50
|
-
//# debugId=513100d0-dccb-53d9-ad07-db86abb4c4ec
|
|
47
|
+
//# sourceMappingURL=shared.js.map
|
package/dist/utils/shared.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sources":["utils/shared.ts"],"
|
|
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.16';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.d.ts","sourceRoot":"/","sources":["utils/shutdown.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;AAE7B,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,cAAM,gBAAgB;IACpB,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAe;;YASjB,YAAY;IAO1B,UAAU,CAAC,OAAO,EAAE,eAAe;IAI7B,QAAQ,CAAC,QAAQ,GAAE,QAAY;
|
|
1
|
+
{"version":3,"file":"shutdown.d.ts","sourceRoot":"/","sources":["utils/shutdown.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;AAE7B,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,cAAM,gBAAgB;IACpB,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAe;;YASjB,YAAY;IAO1B,UAAU,CAAC,OAAO,EAAE,eAAe;IAI7B,QAAQ,CAAC,QAAQ,GAAE,QAAY;IAmCrC,IAAI,CAAC,IAAI,GAAE,QAAY;CAGxB;AAGD,eAAO,MAAM,gBAAgB,kBAAyB,CAAC;AAGvD,wBAAgB,IAAI,CAAC,IAAI,GAAE,QAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAEvD"}
|
package/dist/utils/shutdown.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
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]="298af6f8-5391-5ade-a89e-a253f2207811")}catch(e){}}();
|
|
3
1
|
import { logger } from '../logging/logger.js';
|
|
4
2
|
class GracefulShutdown {
|
|
5
3
|
shutdownHandlers = [];
|
|
@@ -40,11 +38,6 @@ class GracefulShutdown {
|
|
|
40
38
|
}
|
|
41
39
|
}
|
|
42
40
|
logger.debugMessage('Graceful shutdown complete');
|
|
43
|
-
// Force exit after a timeout if process doesn't exit naturally
|
|
44
|
-
global.setTimeout(() => {
|
|
45
|
-
logger.error('Force exiting after timeout');
|
|
46
|
-
process.exit(this.exitCode);
|
|
47
|
-
}, 1000);
|
|
48
41
|
process.exit(this.exitCode);
|
|
49
42
|
}
|
|
50
43
|
// For backward compatibility and convenience
|
|
@@ -58,5 +51,4 @@ export const gracefulShutdown = new GracefulShutdown();
|
|
|
58
51
|
export function exit(code = 0) {
|
|
59
52
|
return gracefulShutdown.shutdown(code);
|
|
60
53
|
}
|
|
61
|
-
//# sourceMappingURL=shutdown.js.map
|
|
62
|
-
//# debugId=298af6f8-5391-5ade-a89e-a253f2207811
|
|
54
|
+
//# sourceMappingURL=shutdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.js","sources":["utils/shutdown.ts"],"
|
|
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,6BAA6B;QAC7B,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;IAC/E,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,MAAc;QACvC,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;IAED,6CAA6C;IAC7C,IAAI,CAAC,OAAiB,CAAC;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,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 // Handle termination signals\n process.on('SIGINT', () => this.handleSignal('SIGINT'));\n process.on('SIGTERM', () => this.handleSignal('SIGTERM'));\n process.on('SIGUSR2', () => this.handleSignal('SIGUSR2')); // nodemon restart\n }\n\n private 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 // For backward compatibility and convenience\n exit(code: ExitCode = 0) {\n return this.shutdown(code);\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"]}
|
package/dist/utils/stats.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
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){}}();
|
|
3
1
|
import { posthog } from '../telemetry.js';
|
|
4
2
|
import { getSessionId } from './session.js';
|
|
5
3
|
import * as Sentry from '@sentry/node';
|
|
@@ -93,5 +91,4 @@ export class AgentStats {
|
|
|
93
91
|
});
|
|
94
92
|
}
|
|
95
93
|
}
|
|
96
|
-
//# sourceMappingURL=stats.js.map
|
|
97
|
-
//# debugId=24d19598-ee2b-5e12-9264-36c1477ffac0
|
|
94
|
+
//# sourceMappingURL=stats.js.map
|
package/dist/utils/stats.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"/","sources":["utils/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AAEvC,MAAM,OAAO,UAAU;IACb,UAAU,GAAW,CAAC,CAAC;IACvB,cAAc,GAAW,CAAC,CAAC;IAC3B,SAAS,GAAW,CAAC,CAAC;IACtB,cAAc,GAAW,CAAC,CAAC;IAC3B,gBAAgB,GAAW,CAAC,CAAC;IAC7B,iBAAiB,GAAW,CAAC,CAAC;IAC9B,SAAS,CAAS;IAClB,WAAW,GAAW,CAAC,CAAC;IACxB,YAAY,GAAW,CAAC,CAAC;IACzB,iBAAiB,GAAW,CAAC,CAAC;IAC9B,KAAK,GAAW,CAAC,CAAC;IAE1B;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED,WAAW,CAAC,KAUX;QACC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,iBAAiB,CAAC;QACjD,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC;QAClC,CAAC;QACD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,YAAY,CAAC;QAC5C,CAAC;QACD,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,cAAc,CAAC;QAChD,CAAC;QACD,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YAC1B,IAAI,CAAC,iBAAiB,IAAI,KAAK,CAAC,eAAe,CAAC;QAClD,CAAC;QACD,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,cAAc,CAAC;QAC3C,CAAC;QACD,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,eAAe,CAAC;QAC7C,CAAC;QACD,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;YAC/B,IAAI,CAAC,iBAAiB,IAAI,KAAK,CAAC,oBAAoB,CAAC;QACvD,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,OAAgB;QAC9B,MAAM,CAAC,aAAa,EAAE,EAAE,aAAa,CAAC;YACpC,0BAA0B,EAAE,IAAI,CAAC,WAAW;YAC5C,iCAAiC,EAAE,IAAI,CAAC,iBAAiB;YACzD,2BAA2B,EAAE,IAAI,CAAC,YAAY;YAC9C,mBAAmB,EAAE,IAAI,CAAC,KAAK;YAC/B,sBAAsB,EAAE,IAAI,CAAC,SAAS;YACtC,8BAA8B,EAAE,IAAI,CAAC,iBAAiB;YACtD,6BAA6B,EAAE,IAAI,CAAC,gBAAgB;YACpD,6BAA6B,EAAE,IAAI,CAAC,cAAc;YAClD,wBAAwB,EAAE,IAAI,CAAC,cAAc;YAC7C,eAAe,EAAE,OAAO;SACzB,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,CAAC;YACd,UAAU,EAAE,YAAY,EAAE;YAC1B,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE;gBACV,WAAW,EAAE,IAAI,CAAC,cAAc;gBAChC,WAAW,EAAE,IAAI,CAAC,KAAK;gBACvB,kBAAkB,EAAE,IAAI,CAAC,WAAW;gBACpC,mBAAmB,EAAE,IAAI,CAAC,YAAY;gBACtC,cAAc,EAAE,IAAI,CAAC,SAAS;gBAC9B,sBAAsB,EAAE,IAAI,CAAC,iBAAiB;gBAC9C,qBAAqB,EAAE,IAAI,CAAC,gBAAgB;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,cAAc;gBAC1C,gBAAgB,EAAE,IAAI,CAAC,cAAc;gBACrC,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CAAC;IACL,CAAC;CACF","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"]}
|
|
@@ -8,7 +8,7 @@ Apply this pattern when variables declared outside function scope contain string
|
|
|
8
8
|
|
|
9
9
|
1. **Minimal footprint**: Minimize code changes by keeping internationalized content in the same file where it originated
|
|
10
10
|
2. **No file movement**: Avoid moving content between files unless absolutely necessary
|
|
11
|
-
3. **
|
|
11
|
+
3. **Only add the "use client" directive when ABSOLUTELY necessary**: Do not add "use server" directives
|
|
12
12
|
4. **Scope**: Only use this implementation for string translation (for HTML translation use ALWAYS `<T>`)
|
|
13
13
|
|
|
14
14
|
Rule of thumb for implementation:
|
package/package.json
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "locadex",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "An AI agent for internationalization",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
|
-
"locadex": "dist/cli.js"
|
|
9
|
-
"locadex-mcp": "dist/mcp.js",
|
|
10
|
-
"locadex-mcp-sse": "dist/mcp-sse.js"
|
|
8
|
+
"locadex": "dist/cli.js"
|
|
11
9
|
},
|
|
12
10
|
"files": [
|
|
13
11
|
"dist",
|
|
@@ -15,7 +13,6 @@
|
|
|
15
13
|
"guides"
|
|
16
14
|
],
|
|
17
15
|
"dependencies": {
|
|
18
|
-
"@anthropic-ai/sdk": "^0.52.0",
|
|
19
16
|
"@clack/prompts": "^1.0.0-alpha.1",
|
|
20
17
|
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
21
18
|
"@sentry/cli": "^2.46.0",
|
|
@@ -25,11 +22,12 @@
|
|
|
25
22
|
"dependency-tree": "^11.1.1",
|
|
26
23
|
"dotenv": "^16.4.5",
|
|
27
24
|
"express": "^5.1.0",
|
|
28
|
-
"gtx-cli": "^1.2.24
|
|
25
|
+
"gtx-cli": "^1.2.24",
|
|
29
26
|
"micromatch": "^4.0.8",
|
|
30
27
|
"posthog-node": "^4.18.0"
|
|
31
28
|
},
|
|
32
29
|
"devDependencies": {
|
|
30
|
+
"@anthropic-ai/sdk": "^0.52.0",
|
|
33
31
|
"@modelcontextprotocol/inspector": "^0.13.0",
|
|
34
32
|
"@types/express": "^5.0.2",
|
|
35
33
|
"@types/jest": "^29.5.14",
|
package/dist/mcp/debugger.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"debugger.d.ts","sourceRoot":"/","sources":["mcp/debugger.ts"],"names":[],"mappings":"AAqBA,wBAAgB,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAiB1C;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
|
package/dist/mcp/debugger.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
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]="0329310b-d542-544f-a626-1c13dd43b861")}catch(e){}}();
|
|
3
|
-
import { appendFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { randomBytes } from 'node:crypto';
|
|
6
|
-
let debugLogPath = null;
|
|
7
|
-
function getDebugLogPath() {
|
|
8
|
-
if (!debugLogPath) {
|
|
9
|
-
const uniqueId = randomBytes(8).toString('hex');
|
|
10
|
-
const debugDir = join(process.cwd(), '.tmp', uniqueId);
|
|
11
|
-
if (!existsSync(debugDir)) {
|
|
12
|
-
mkdirSync(debugDir, { recursive: true });
|
|
13
|
-
}
|
|
14
|
-
debugLogPath = join(debugDir, 'out.txt');
|
|
15
|
-
}
|
|
16
|
-
return debugLogPath;
|
|
17
|
-
}
|
|
18
|
-
export function debug(...args) {
|
|
19
|
-
const logPath = getDebugLogPath();
|
|
20
|
-
const timestamp = new Date().toISOString();
|
|
21
|
-
const message = args
|
|
22
|
-
.map((arg) => typeof arg === 'object' ? JSON.stringify(arg, null, 2) : String(arg))
|
|
23
|
-
.join(' ');
|
|
24
|
-
const logEntry = `[${timestamp}] ${message}\n`;
|
|
25
|
-
try {
|
|
26
|
-
appendFileSync(logPath, logEntry);
|
|
27
|
-
}
|
|
28
|
-
catch (error) {
|
|
29
|
-
// Fallback to console if file writing fails
|
|
30
|
-
console.error('Debug log write failed:', error);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
export function getDebugLocation() {
|
|
34
|
-
return getDebugLogPath();
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=debugger.js.map
|
|
37
|
-
//# debugId=0329310b-d542-544f-a626-1c13dd43b861
|
package/dist/mcp/debugger.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"debugger.js","sources":["mcp/debugger.ts"],"sourceRoot":"/","sourcesContent":["import { appendFileSync, existsSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { randomBytes } from 'node:crypto';\n\nlet debugLogPath: string | null = null;\n\nfunction getDebugLogPath(): string {\n if (!debugLogPath) {\n const uniqueId = randomBytes(8).toString('hex');\n const debugDir = join(process.cwd(), '.tmp', uniqueId);\n\n if (!existsSync(debugDir)) {\n mkdirSync(debugDir, { recursive: true });\n }\n\n debugLogPath = join(debugDir, 'out.txt');\n }\n\n return debugLogPath;\n}\n\nexport function debug(...args: any[]): void {\n const logPath = getDebugLogPath();\n const timestamp = new Date().toISOString();\n const message = args\n .map((arg) =>\n typeof arg === 'object' ? JSON.stringify(arg, null, 2) : String(arg)\n )\n .join(' ');\n\n const logEntry = `[${timestamp}] ${message}\\n`;\n\n try {\n appendFileSync(logPath, logEntry);\n } catch (error) {\n // Fallback to console if file writing fails\n console.error('Debug log write failed:', error);\n }\n}\n\nexport function getDebugLocation(): string {\n return getDebugLogPath();\n}\n"],"names":[],"mappings":";;AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,IAAI,YAAY,GAAkB,IAAI,CAAC;AAEvC,SAAS,eAAe;IACtB,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEvD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAG,IAAW;IAClC,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI;SACjB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACX,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACrE;SACA,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,MAAM,QAAQ,GAAG,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC;IAE/C,IAAI,CAAC;QACH,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,4CAA4C;QAC5C,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,eAAe,EAAE,CAAC;AAC3B,CAAC","debug_id":"0329310b-d542-544f-a626-1c13dd43b861"}
|
package/dist/mcp-sse.d.ts
DELETED
package/dist/mcp-sse.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-sse.d.ts","sourceRoot":"/","sources":["mcp-sse.ts"],"names":[],"mappings":";AAcA,wBAAsB,KAAK,kBAuE1B"}
|
package/dist/mcp-sse.js
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
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]="1077fad8-46e0-5d35-8ffc-cc8350fa9d60")}catch(e){}}();
|
|
4
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
5
|
-
import { addDocsTools } from './mcp/tools/docs.js';
|
|
6
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
7
|
-
import { fromPackageRoot } from './utils/getPaths.js';
|
|
8
|
-
import { addGuidesTools } from './mcp/tools/guides.js';
|
|
9
|
-
import express from 'express';
|
|
10
|
-
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
|
|
11
|
-
import { logger } from './logging/logger.js';
|
|
12
|
-
import { findAvailablePort } from './mcp/getPort.js';
|
|
13
|
-
import { exit } from './utils/shutdown.js';
|
|
14
|
-
export async function start() {
|
|
15
|
-
const stateFile = process.env.LOCADEX_FILES_STATE_FILE_PATH;
|
|
16
|
-
const logFile = process.env.LOCADEX_LOG_FILE_PATH;
|
|
17
|
-
const requestedPort = process.env.PORT ? parseInt(process.env.PORT) : 8888;
|
|
18
|
-
const port = await findAvailablePort(requestedPort);
|
|
19
|
-
const verbose = process.env.LOCADEX_VERBOSE === 'true';
|
|
20
|
-
const debug = process.env.LOCADEX_DEBUG === 'true';
|
|
21
|
-
logger.initialize({ verbose, debug }, logFile);
|
|
22
|
-
if (stateFile && existsSync(stateFile)) {
|
|
23
|
-
const state = JSON.parse(readFileSync(stateFile, 'utf8'));
|
|
24
|
-
logger.debugMessage(`[locadex-mcp-sse] state: ${JSON.stringify(state, null, 2)}`);
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
throw new Error(`[locadex-mcp-sse] state file not found: ${stateFile}`);
|
|
28
|
-
}
|
|
29
|
-
const mcpServer = new McpServer({
|
|
30
|
-
name: 'Locadex: AI Agent for Internationalization',
|
|
31
|
-
version: JSON.parse(readFileSync(fromPackageRoot('package.json'), 'utf8'))
|
|
32
|
-
.version,
|
|
33
|
-
});
|
|
34
|
-
const app = express();
|
|
35
|
-
app.use(express.json());
|
|
36
|
-
// Store transports for each session type
|
|
37
|
-
const transports = {
|
|
38
|
-
streamable: {},
|
|
39
|
-
sse: {},
|
|
40
|
-
};
|
|
41
|
-
addDocsTools(mcpServer);
|
|
42
|
-
addGuidesTools(mcpServer);
|
|
43
|
-
// SSE endpoint for legacy clients
|
|
44
|
-
// Claude Code only supports SSE as of 2025-06-04
|
|
45
|
-
app.get('/sse', async (req, res) => {
|
|
46
|
-
const transport = new SSEServerTransport('/messages', res);
|
|
47
|
-
transports.sse[transport.sessionId] = transport;
|
|
48
|
-
res.on('close', () => {
|
|
49
|
-
delete transports.sse[transport.sessionId];
|
|
50
|
-
});
|
|
51
|
-
await mcpServer.connect(transport);
|
|
52
|
-
});
|
|
53
|
-
// Companion endpoint for sending messages
|
|
54
|
-
app.post('/messages', async (req, res) => {
|
|
55
|
-
const sessionId = req.query.sessionId;
|
|
56
|
-
const transport = transports.sse[sessionId];
|
|
57
|
-
if (transport) {
|
|
58
|
-
await transport.handlePostMessage(req, res, req.body);
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
res.status(400).send('No transport found for sessionId');
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
app.listen(port, () => {
|
|
65
|
-
const portMessage = port !== requestedPort
|
|
66
|
-
? `${port} (requested ${requestedPort} was in use)`
|
|
67
|
-
: `${port}`;
|
|
68
|
-
logger.debugMessage(`[locadex-mcp] started on port ${portMessage} with state file ${stateFile}`);
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
// Start the SSE server
|
|
72
|
-
start().catch(async (error) => {
|
|
73
|
-
logger.error(`[locadex-mcp-sse] Failed to start: ${error instanceof Error ? error.message : String(error)}`);
|
|
74
|
-
await exit(1);
|
|
75
|
-
});
|
|
76
|
-
//# sourceMappingURL=mcp-sse.js.map
|
|
77
|
-
//# debugId=1077fad8-46e0-5d35-8ffc-cc8350fa9d60
|
package/dist/mcp-sse.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-sse.js","sources":["mcp-sse.ts"],"sourceRoot":"/","sourcesContent":["#!/usr/bin/env node\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { addDocsTools } from './mcp/tools/docs.js';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { fromPackageRoot } from './utils/getPaths.js';\nimport { addGuidesTools } from './mcp/tools/guides.js';\nimport express from 'express';\nimport { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\nimport { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';\nimport { logger } from './logging/logger.js';\nimport { findAvailablePort } from './mcp/getPort.js';\nimport { exit } from './utils/shutdown.js';\n\nexport async function start() {\n const stateFile = process.env.LOCADEX_FILES_STATE_FILE_PATH;\n const logFile = process.env.LOCADEX_LOG_FILE_PATH;\n const requestedPort = process.env.PORT ? parseInt(process.env.PORT) : 8888;\n const port = await findAvailablePort(requestedPort);\n\n const verbose = process.env.LOCADEX_VERBOSE === 'true';\n const debug = process.env.LOCADEX_DEBUG === 'true';\n\n logger.initialize({ verbose, debug }, logFile);\n\n if (stateFile && existsSync(stateFile)) {\n const state = JSON.parse(readFileSync(stateFile, 'utf8'));\n logger.debugMessage(\n `[locadex-mcp-sse] state: ${JSON.stringify(state, null, 2)}`\n );\n } else {\n throw new Error(`[locadex-mcp-sse] state file not found: ${stateFile}`);\n }\n\n const mcpServer = new McpServer({\n name: 'Locadex: AI Agent for Internationalization',\n version: JSON.parse(readFileSync(fromPackageRoot('package.json'), 'utf8'))\n .version,\n });\n\n const app = express();\n app.use(express.json());\n\n // Store transports for each session type\n const transports = {\n streamable: {} as Record<string, StreamableHTTPServerTransport>,\n sse: {} as Record<string, SSEServerTransport>,\n };\n\n addDocsTools(mcpServer);\n addGuidesTools(mcpServer);\n\n // SSE endpoint for legacy clients\n // Claude Code only supports SSE as of 2025-06-04\n app.get('/sse', async (req, res) => {\n const transport = new SSEServerTransport('/messages', res);\n transports.sse[transport.sessionId] = transport;\n\n res.on('close', () => {\n delete transports.sse[transport.sessionId];\n });\n\n await mcpServer.connect(transport);\n });\n\n // Companion endpoint for sending messages\n app.post('/messages', async (req, res) => {\n const sessionId = req.query.sessionId as string;\n const transport = transports.sse[sessionId];\n if (transport) {\n await transport.handlePostMessage(req, res, req.body);\n } else {\n res.status(400).send('No transport found for sessionId');\n }\n });\n\n app.listen(port, () => {\n const portMessage =\n port !== requestedPort\n ? `${port} (requested ${requestedPort} was in use)`\n : `${port}`;\n logger.debugMessage(\n `[locadex-mcp] started on port ${portMessage} with state file ${stateFile}`\n );\n });\n}\n\n// Start the SSE server\nstart().catch(async (error) => {\n logger.error(\n `[locadex-mcp-sse] Failed to start: ${error instanceof Error ? error.message : String(error)}`\n );\n await exit(1);\n});\n"],"names":[],"mappings":"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","debug_id":"1077fad8-46e0-5d35-8ffc-cc8350fa9d60"}
|