@within-7/minto 0.3.6 → 0.3.10
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/{cli.js → cli.cjs} +25 -23
- package/dist/commands/agents/AgentsCommand.js +459 -655
- package/dist/commands/agents/AgentsCommand.js.map +2 -2
- package/dist/commands/agents/types.js +1 -0
- package/dist/commands/agents/types.js.map +2 -2
- package/dist/commands/agents/utils/fileOperations.js +96 -36
- package/dist/commands/agents/utils/fileOperations.js.map +3 -3
- package/dist/commands/agents/utils/index.js +3 -1
- package/dist/commands/agents/utils/index.js.map +2 -2
- package/dist/commands/context.js +54 -23
- package/dist/commands/context.js.map +2 -2
- package/dist/commands/export.js +673 -93
- package/dist/commands/export.js.map +2 -2
- package/dist/commands/language.js +110 -0
- package/dist/commands/language.js.map +7 -0
- package/dist/commands/mcp-interactive.js +419 -217
- package/dist/commands/mcp-interactive.js.map +2 -2
- package/dist/commands/model.js +415 -66
- package/dist/commands/model.js.map +2 -2
- package/dist/commands/new.js +56 -0
- package/dist/commands/new.js.map +7 -0
- package/dist/commands/permissions.js +75 -49
- package/dist/commands/permissions.js.map +2 -2
- package/dist/commands/plugin.js +882 -185
- package/dist/commands/plugin.js.map +3 -3
- package/dist/commands/resume.js +251 -16
- package/dist/commands/resume.js.map +2 -2
- package/dist/commands/sandbox.js +168 -70
- package/dist/commands/sandbox.js.map +2 -2
- package/dist/commands/sessions.js +224 -0
- package/dist/commands/sessions.js.map +7 -0
- package/dist/commands/setup.js +596 -109
- package/dist/commands/setup.js.map +2 -2
- package/dist/commands/stats.js +292 -0
- package/dist/commands/stats.js.map +7 -0
- package/dist/commands/status.js +75 -7
- package/dist/commands/status.js.map +2 -2
- package/dist/commands/undo.js +154 -180
- package/dist/commands/undo.js.map +2 -2
- package/dist/commands.js +6 -0
- package/dist/commands.js.map +2 -2
- package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js +3 -2
- package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js.map +2 -2
- package/dist/components/Config.js +9 -8
- package/dist/components/Config.js.map +2 -2
- package/dist/components/HeaderBar.js +2 -1
- package/dist/components/HeaderBar.js.map +2 -2
- package/dist/components/Help.js +166 -32
- package/dist/components/Help.js.map +2 -2
- package/dist/components/HotkeyHelpPanel.js +46 -44
- package/dist/components/HotkeyHelpPanel.js.map +2 -2
- package/dist/components/InfoPanel/InfoPanel.js +123 -0
- package/dist/components/InfoPanel/InfoPanel.js.map +7 -0
- package/dist/components/InfoPanel/index.js +5 -0
- package/dist/components/InfoPanel/index.js.map +7 -0
- package/dist/components/InfoPanel/types.js +1 -0
- package/dist/components/InfoPanel/types.js.map +7 -0
- package/dist/components/Logo.js +5 -2
- package/dist/components/Logo.js.map +2 -2
- package/dist/components/MCPServerApprovalDialog.js +6 -5
- package/dist/components/MCPServerApprovalDialog.js.map +2 -2
- package/dist/components/MCPServerMultiselectDialog.js +5 -4
- package/dist/components/MCPServerMultiselectDialog.js.map +2 -2
- package/dist/components/MessageSelector.js +4 -3
- package/dist/components/MessageSelector.js.map +2 -2
- package/dist/components/ModelConfig.js +13 -12
- package/dist/components/ModelConfig.js.map +2 -2
- package/dist/components/ModelListManager.js +4 -3
- package/dist/components/ModelListManager.js.map +2 -2
- package/dist/components/ModelSelector/BrandTextInput.js +43 -0
- package/dist/components/ModelSelector/BrandTextInput.js.map +7 -0
- package/dist/components/ModelSelector/ModelSelector.js +419 -501
- package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
- package/dist/components/ModelSelector/WizardContainer.js +45 -0
- package/dist/components/ModelSelector/WizardContainer.js.map +7 -0
- package/dist/components/ModelSelector/index.js +1 -3
- package/dist/components/ModelSelector/index.js.map +2 -2
- package/dist/components/PromptInput.js +77 -44
- package/dist/components/PromptInput.js.map +2 -2
- package/dist/components/SensitiveFileWarning.js +12 -8
- package/dist/components/SensitiveFileWarning.js.map +2 -2
- package/dist/components/SimpleSelector/SimpleSelector.js +154 -0
- package/dist/components/SimpleSelector/SimpleSelector.js.map +7 -0
- package/dist/components/SimpleSelector/index.js +5 -0
- package/dist/components/SimpleSelector/index.js.map +7 -0
- package/dist/components/SimpleSelector/types.js +1 -0
- package/dist/components/SimpleSelector/types.js.map +7 -0
- package/dist/components/StatusOverlayContent.js +21 -0
- package/dist/components/StatusOverlayContent.js.map +7 -0
- package/dist/components/TabbedListView/ScrollableList.js +117 -0
- package/dist/components/TabbedListView/ScrollableList.js.map +7 -0
- package/dist/components/TabbedListView/SearchInput.js +23 -0
- package/dist/components/TabbedListView/SearchInput.js.map +7 -0
- package/dist/components/TabbedListView/TabBar.js +20 -0
- package/dist/components/TabbedListView/TabBar.js.map +7 -0
- package/dist/components/TabbedListView/TabbedListView.js +246 -0
- package/dist/components/TabbedListView/TabbedListView.js.map +7 -0
- package/dist/components/TabbedListView/index.js +11 -0
- package/dist/components/TabbedListView/index.js.map +7 -0
- package/dist/components/TabbedListView/types.js +1 -0
- package/dist/components/TabbedListView/types.js.map +7 -0
- package/dist/components/TodoChangeBlock.js +6 -5
- package/dist/components/TodoChangeBlock.js.map +3 -3
- package/dist/components/TodoPanel.js +6 -3
- package/dist/components/TodoPanel.js.map +3 -3
- package/dist/components/TrustDialog.js +6 -5
- package/dist/components/TrustDialog.js.map +2 -2
- package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +2 -1
- package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js.map +2 -2
- package/dist/constants/macros.js +1 -1
- package/dist/constants/macros.js.map +1 -1
- package/dist/constants/product.js +2 -2
- package/dist/constants/product.js.map +1 -1
- package/dist/constants/prompts.js +17 -0
- package/dist/constants/prompts.js.map +2 -2
- package/dist/constants/toolInputExamples.js +5 -1
- package/dist/constants/toolInputExamples.js.map +2 -2
- package/dist/core/backupHook.js +29 -0
- package/dist/core/backupHook.js.map +7 -0
- package/dist/core/config/defaults.js +8 -2
- package/dist/core/config/defaults.js.map +2 -2
- package/dist/core/config/schema.js +14 -2
- package/dist/core/config/schema.js.map +2 -2
- package/dist/core/costTracker.js +0 -16
- package/dist/core/costTracker.js.map +2 -2
- package/dist/core/tokenStatsManager.js +5 -0
- package/dist/core/tokenStatsManager.js.map +2 -2
- package/dist/cost-tracker.js +0 -16
- package/dist/cost-tracker.js.map +2 -2
- package/dist/entrypoints/bootstrap.js +56 -0
- package/dist/entrypoints/bootstrap.js.map +7 -0
- package/dist/entrypoints/cli.js +164 -23
- package/dist/entrypoints/cli.js.map +3 -3
- package/dist/history.js +75 -15
- package/dist/history.js.map +2 -2
- package/dist/i18n/index.js +2 -2
- package/dist/i18n/index.js.map +2 -2
- package/dist/i18n/locales/en.js +582 -1
- package/dist/i18n/locales/en.js.map +2 -2
- package/dist/i18n/locales/zh-CN.js +582 -1
- package/dist/i18n/locales/zh-CN.js.map +2 -2
- package/dist/i18n/types.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +2 -2
- package/dist/messages.js +11 -0
- package/dist/messages.js.map +2 -2
- package/dist/permissions.js.map +2 -2
- package/dist/query.js +9 -0
- package/dist/query.js.map +2 -2
- package/dist/screens/REPL.js +45 -7
- package/dist/screens/REPL.js.map +2 -2
- package/dist/services/customCommands.js +44 -16
- package/dist/services/customCommands.js.map +2 -2
- package/dist/services/plugins/lspServers.js +1 -1
- package/dist/services/plugins/lspServers.js.map +2 -2
- package/dist/services/plugins/pluginRuntime.js +2 -1
- package/dist/services/plugins/pluginRuntime.js.map +2 -2
- package/dist/services/plugins/pluginValidation.js +10 -3
- package/dist/services/plugins/pluginValidation.js.map +2 -2
- package/dist/services/plugins/skillMarketplace.js +16 -8
- package/dist/services/plugins/skillMarketplace.js.map +2 -2
- package/dist/services/systemReminder.js +17 -6
- package/dist/services/systemReminder.js.map +2 -2
- package/dist/tools/FileEditTool/FileEditTool.js +7 -0
- package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
- package/dist/tools/FileWriteTool/FileWriteTool.js +7 -0
- package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
- package/dist/tools/MultiEditTool/MultiEditTool.js +7 -0
- package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
- package/dist/tools/NotebookEditTool/NotebookEditTool.js +2 -0
- package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
- package/dist/tools/TaskTool/TaskTool.js +179 -1
- package/dist/tools/TaskTool/TaskTool.js.map +2 -2
- package/dist/tools/TodoWriteTool/prompt.js +21 -0
- package/dist/tools/TodoWriteTool/prompt.js.map +2 -2
- package/dist/tools/URLFetcherTool/prompt.js +14 -9
- package/dist/tools/URLFetcherTool/prompt.js.map +2 -2
- package/dist/tools/WebSearchTool/prompt.js +12 -6
- package/dist/tools/WebSearchTool/prompt.js.map +2 -2
- package/dist/types/PermissionMode.js +30 -1
- package/dist/types/PermissionMode.js.map +2 -2
- package/dist/types/plugin.js +2 -4
- package/dist/types/plugin.js.map +2 -2
- package/dist/utils/agentHookExecutor.js +103 -0
- package/dist/utils/agentHookExecutor.js.map +7 -0
- package/dist/utils/agentLoader.js +272 -32
- package/dist/utils/agentLoader.js.map +2 -2
- package/dist/utils/agentMemory.js +134 -0
- package/dist/utils/agentMemory.js.map +7 -0
- package/dist/utils/claudeCodeSync.js +439 -0
- package/dist/utils/claudeCodeSync.js.map +7 -0
- package/dist/utils/config.js +52 -24
- package/dist/utils/config.js.map +2 -2
- package/dist/utils/configPaths.js +199 -0
- package/dist/utils/configPaths.js.map +7 -0
- package/dist/utils/execFileNoThrow.js +2 -1
- package/dist/utils/execFileNoThrow.js.map +2 -2
- package/dist/utils/historyManager.js +234 -0
- package/dist/utils/historyManager.js.map +7 -0
- package/dist/utils/marketplaceManager.js +80 -43
- package/dist/utils/marketplaceManager.js.map +2 -2
- package/dist/utils/messages.js +13 -8
- package/dist/utils/messages.js.map +2 -2
- package/dist/utils/migration/index.js +37 -0
- package/dist/utils/migration/index.js.map +7 -0
- package/dist/utils/migration/migrateHistory.js +273 -0
- package/dist/utils/migration/migrateHistory.js.map +7 -0
- package/dist/utils/migration/migrateTodos.js +323 -0
- package/dist/utils/migration/migrateTodos.js.map +7 -0
- package/dist/utils/pasteCache.js +309 -0
- package/dist/utils/pasteCache.js.map +7 -0
- package/dist/utils/pluginInstaller.js +34 -24
- package/dist/utils/pluginInstaller.js.map +2 -2
- package/dist/utils/pluginLoader.js +54 -28
- package/dist/utils/pluginLoader.js.map +2 -2
- package/dist/utils/repoFetcher.js +110 -0
- package/dist/utils/repoFetcher.js.map +7 -0
- package/dist/utils/sessionIndex.js +192 -0
- package/dist/utils/sessionIndex.js.map +7 -0
- package/dist/utils/sessionTracker.js +170 -0
- package/dist/utils/sessionTracker.js.map +7 -0
- package/dist/utils/skillLoader.js +103 -5
- package/dist/utils/skillLoader.js.map +2 -2
- package/dist/utils/stats.js +417 -0
- package/dist/utils/stats.js.map +7 -0
- package/dist/utils/stringSubstitution.js +106 -0
- package/dist/utils/stringSubstitution.js.map +7 -0
- package/dist/utils/teamConfig.js +156 -14
- package/dist/utils/teamConfig.js.map +2 -2
- package/dist/utils/terminal.js +1 -1
- package/dist/utils/terminal.js.map +2 -2
- package/dist/utils/todoStorage.js +51 -19
- package/dist/utils/todoStorage.js.map +2 -2
- package/dist/utils/tooling/safeRender.js.map +2 -2
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +71 -28
- package/scripts/{postinstall.js → postinstall.cjs} +1 -1
package/dist/history.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/history.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["/**\n * History Module\n *\n * Provides command history functionality with dual storage support:\n * 1. New JSONL format (~/.minto/history/global.jsonl) - Primary\n * 2. Legacy project config format (projects.*.history) - Fallback for reading\n *\n * This module serves as the public API for history access. It automatically\n * uses the new JSONL-based historyManager for writes and merges both sources\n * for reads to ensure a smooth transition.\n */\n\nimport {\n getCurrentProjectConfig,\n saveCurrentProjectConfig,\n} from '@utils/config'\nimport { sanitizeInput, containsDangerousSequences } from '@utils/sanitizeInput'\nimport {\n addToHistoryNew,\n getHistoryStrings,\n getCurrentProjectHistory,\n searchHistory as searchHistoryNew,\n type HistoryEntry,\n type HistoryReadOptions,\n} from '@utils/historyManager'\nimport { debug as debugLogger } from '@utils/debugLogger'\n\nconst MAX_HISTORY_ITEMS = 100\n\n/**\n * Get command history\n *\n * Returns a merged list of history from both:\n * 1. New JSONL-based storage (primary)\n * 2. Legacy project config storage (fallback)\n *\n * Duplicates are removed, with JSONL entries taking precedence.\n *\n * @returns Array of command strings (newest first)\n */\nexport function getHistory(): string[] {\n // Get history from new JSONL storage\n const newHistory = getHistoryStrings({ limit: MAX_HISTORY_ITEMS })\n\n // Get history from legacy storage (for backward compatibility)\n let legacyHistory: string[] = []\n try {\n legacyHistory = getCurrentProjectConfig().history ?? []\n legacyHistory = legacyHistory.map(entry => sanitizeInput(entry))\n } catch {\n // Ignore errors reading legacy history\n }\n\n // If new storage is empty but legacy has data, use legacy\n if (newHistory.length === 0 && legacyHistory.length > 0) {\n debugLogger.trace('HISTORY_USING_LEGACY', {\n legacyCount: legacyHistory.length,\n })\n return legacyHistory.slice(0, MAX_HISTORY_ITEMS)\n }\n\n // If new storage has data, prefer it\n if (newHistory.length > 0) {\n // Merge with legacy, removing duplicates\n const seen = new Set(newHistory)\n const merged = [...newHistory]\n\n for (const entry of legacyHistory) {\n if (!seen.has(entry)) {\n merged.push(entry)\n seen.add(entry)\n }\n }\n\n return merged.slice(0, MAX_HISTORY_ITEMS)\n }\n\n // Both empty\n return []\n}\n\n/**\n * Add a command to history\n *\n * Writes to both new JSONL storage and legacy project config storage\n * for backward compatibility during the transition period.\n *\n * @param command The command to add\n */\nexport function addToHistory(command: string): void {\n // Sanitize the command before saving\n const sanitizedCommand = sanitizeInput(command)\n\n // Skip empty commands after sanitization\n if (!sanitizedCommand.trim()) {\n return\n }\n\n // Warn if command contains dangerous sequences\n if (containsDangerousSequences(command)) {\n debugLogger.warn('HISTORY_DANGEROUS_SEQUENCE', {\n command: command.slice(0, 50),\n })\n }\n\n // Detect mode from command prefix\n let mode: 'prompt' | 'bash' | 'koding' = 'prompt'\n if (command.startsWith('!')) {\n mode = 'bash'\n } else if (command.startsWith('#')) {\n mode = 'koding'\n }\n\n // Write to new JSONL storage (primary)\n try {\n addToHistoryNew(sanitizedCommand, mode)\n } catch (error) {\n debugLogger.error('HISTORY_NEW_STORAGE_FAILED', {\n error: error instanceof Error ? error.message : String(error),\n })\n }\n\n // Also write to legacy storage for backward compatibility\n // This can be removed once the migration is fully complete\n try {\n const projectConfig = getCurrentProjectConfig()\n const history = projectConfig.history ?? []\n\n if (history[0] !== sanitizedCommand) {\n history.unshift(sanitizedCommand)\n saveCurrentProjectConfig({\n ...projectConfig,\n history: history.slice(0, MAX_HISTORY_ITEMS),\n })\n }\n } catch (error) {\n // Silently ignore legacy storage errors\n debugLogger.trace('HISTORY_LEGACY_STORAGE_FAILED', {\n error: error instanceof Error ? error.message : String(error),\n })\n }\n}\n\n/**\n * Get history for the current project only\n *\n * @param limit Maximum number of entries to return\n * @returns Array of command strings (newest first)\n */\nexport function getProjectHistory(limit: number = MAX_HISTORY_ITEMS): string[] {\n return getCurrentProjectHistory(limit)\n}\n\n/**\n * Search history for matching commands\n *\n * @param searchTerm Term to search for\n * @param limit Maximum number of results\n * @returns Array of matching history entries\n */\nexport function searchHistory(\n searchTerm: string,\n limit: number = MAX_HISTORY_ITEMS,\n): HistoryEntry[] {\n return searchHistoryNew(searchTerm, { limit })\n}\n\n/**\n * Get history with advanced filtering options\n *\n * @param options Read options for filtering\n * @returns Array of command strings (newest first)\n */\nexport function getHistoryWithOptions(options: HistoryReadOptions): string[] {\n return getHistoryStrings(options)\n}\n\n// Re-export types for convenience\nexport type { HistoryEntry, HistoryReadOptions }\n"],
|
|
5
|
+
"mappings": "AAYA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,eAAe,kCAAkC;AAC1D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,OAGZ;AACP,SAAS,SAAS,mBAAmB;AAErC,MAAM,oBAAoB;AAanB,SAAS,aAAuB;AAErC,QAAM,aAAa,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;AAGjE,MAAI,gBAA0B,CAAC;AAC/B,MAAI;AACF,oBAAgB,wBAAwB,EAAE,WAAW,CAAC;AACtD,oBAAgB,cAAc,IAAI,WAAS,cAAc,KAAK,CAAC;AAAA,EACjE,QAAQ;AAAA,EAER;AAGA,MAAI,WAAW,WAAW,KAAK,cAAc,SAAS,GAAG;AACvD,gBAAY,MAAM,wBAAwB;AAAA,MACxC,aAAa,cAAc;AAAA,IAC7B,CAAC;AACD,WAAO,cAAc,MAAM,GAAG,iBAAiB;AAAA,EACjD;AAGA,MAAI,WAAW,SAAS,GAAG;AAEzB,UAAM,OAAO,IAAI,IAAI,UAAU;AAC/B,UAAM,SAAS,CAAC,GAAG,UAAU;AAE7B,eAAW,SAAS,eAAe;AACjC,UAAI,CAAC,KAAK,IAAI,KAAK,GAAG;AACpB,eAAO,KAAK,KAAK;AACjB,aAAK,IAAI,KAAK;AAAA,MAChB;AAAA,IACF;AAEA,WAAO,OAAO,MAAM,GAAG,iBAAiB;AAAA,EAC1C;AAGA,SAAO,CAAC;AACV;AAUO,SAAS,aAAa,SAAuB;AAElD,QAAM,mBAAmB,cAAc,OAAO;AAG9C,MAAI,CAAC,iBAAiB,KAAK,GAAG;AAC5B;AAAA,EACF;AAGA,MAAI,2BAA2B,OAAO,GAAG;AACvC,gBAAY,KAAK,8BAA8B;AAAA,MAC7C,SAAS,QAAQ,MAAM,GAAG,EAAE;AAAA,IAC9B,CAAC;AAAA,EACH;AAGA,MAAI,OAAqC;AACzC,MAAI,QAAQ,WAAW,GAAG,GAAG;AAC3B,WAAO;AAAA,EACT,WAAW,QAAQ,WAAW,GAAG,GAAG;AAClC,WAAO;AAAA,EACT;AAGA,MAAI;AACF,oBAAgB,kBAAkB,IAAI;AAAA,EACxC,SAAS,OAAO;AACd,gBAAY,MAAM,8BAA8B;AAAA,MAC9C,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC9D,CAAC;AAAA,EACH;AAIA,MAAI;AACF,UAAM,gBAAgB,wBAAwB;AAC9C,UAAM,UAAU,cAAc,WAAW,CAAC;AAE1C,QAAI,QAAQ,CAAC,MAAM,kBAAkB;AACnC,cAAQ,QAAQ,gBAAgB;AAChC,+BAAyB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,QAAQ,MAAM,GAAG,iBAAiB;AAAA,MAC7C,CAAC;AAAA,IACH;AAAA,EACF,SAAS,OAAO;AAEd,gBAAY,MAAM,iCAAiC;AAAA,MACjD,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC9D,CAAC;AAAA,EACH;AACF;AAQO,SAAS,kBAAkB,QAAgB,mBAA6B;AAC7E,SAAO,yBAAyB,KAAK;AACvC;AASO,SAAS,cACd,YACA,QAAgB,mBACA;AAChB,SAAO,iBAAiB,YAAY,EAAE,MAAM,CAAC;AAC/C;AAQO,SAAS,sBAAsB,SAAuC;AAC3E,SAAO,kBAAkB,OAAO;AAClC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/i18n/index.js
CHANGED
|
@@ -73,8 +73,8 @@ function tLang(lang, key, params) {
|
|
|
73
73
|
}
|
|
74
74
|
function interpolate(str, params) {
|
|
75
75
|
if (!params) return str;
|
|
76
|
-
return str.replace(/\{
|
|
77
|
-
return params[key] !== void 0 ? String(params[key]) :
|
|
76
|
+
return str.replace(/\{(\w+)\}/g, (match, key) => {
|
|
77
|
+
return params[key] !== void 0 ? String(params[key]) : match;
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
function isLanguageSupported(lang) {
|
package/dist/i18n/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/i18n/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Minto i18n System\n *\n * Lightweight internationalization system for CLI applications.\n * Supports English (default) and Simplified Chinese.\n *\n * Usage:\n * import { t, setLanguage, getLanguage } from '@i18n'\n *\n * // Get translated string\n * const label = t('ui.displayMode.minimal') // \"Minimal\" or \"\u7CBE\u7B80\"\n *\n * // Change language\n * setLanguage('zh-CN')\n *\n * // Get current language\n * const lang = getLanguage() // 'en' or 'zh-CN'\n */\n\nimport type { Language, TranslationKey, Translations } from './types'\nimport { en } from './locales/en'\nimport { zhCN } from './locales/zh-CN'\n\n// All available translations\nconst translations: Record<Language, Translations> = {\n en,\n 'zh-CN': zhCN,\n}\n\n// Current language state\nlet currentLanguage: Language = 'en'\n\n// Language change listeners\ntype LanguageChangeListener = (lang: Language) => void\nconst listeners: Set<LanguageChangeListener> = new Set()\n\n/**\n * Detect system language\n * Only checks MINTO_LANG environment variable for explicit override\n * Defaults to English - user must explicitly set language for other locales\n */\nexport function detectSystemLanguage(): Language {\n // Only check MINTO_LANG for explicit language override\n // Do NOT auto-detect from system locale (LANG, LC_ALL, etc.)\n const envLang = process.env.MINTO_LANG\n\n if (envLang) {\n const normalized = envLang.toLowerCase()\n if (normalized.startsWith('zh')) {\n return 'zh-CN'\n }\n }\n\n // Default to English\n return 'en'\n}\n\n/**\n * Initialize i18n with optional language\n * Should be called once at application startup\n */\nexport function initI18n(lang?: Language): void {\n if (lang) {\n currentLanguage = lang\n } else {\n // Will be set from config or CLI args\n // For now, default to English\n currentLanguage = 'en'\n }\n}\n\n/**\n * Get current language\n */\nexport function getLanguage(): Language {\n return currentLanguage\n}\n\n/**\n * Set current language\n */\nexport function setLanguage(lang: Language): void {\n if (translations[lang]) {\n currentLanguage = lang\n // Notify listeners\n for (const listener of listeners) {\n listener(lang)\n }\n } else {\n console.warn(`Language '${lang}' not supported, using 'en'`)\n currentLanguage = 'en'\n }\n}\n\n/**\n * Subscribe to language changes\n */\nexport function onLanguageChange(listener: LanguageChangeListener): () => void {\n listeners.add(listener)\n return () => listeners.delete(listener)\n}\n\n/**\n * Check if a translation key exists\n *\n * @param key - Translation key to check\n * @returns true if key exists in current language or fallback (English)\n */\nexport function hasTranslation(key: string): boolean {\n return !!(\n translations[currentLanguage]?.[key as TranslationKey] ||\n translations.en[key as TranslationKey]\n )\n}\n\n/**\n * Get translated string by key (silent version - no warning if key not found)\n *\n * @param key - Translation key\n * @param params - Optional interpolation parameters\n * @returns Translated string or undefined if not found\n */\nexport function tSafe(\n key: string,\n params?: Record<string, string | number>,\n): string | undefined {\n const translation = translations[currentLanguage]?.[key as TranslationKey]\n\n if (!translation) {\n const fallback = translations.en[key as TranslationKey]\n if (!fallback) {\n return undefined\n }\n return interpolate(fallback, params)\n }\n\n return interpolate(translation, params)\n}\n\n/**\n * Get translated string by key\n *\n * @param key - Translation key (e.g., 'ui.displayMode.minimal')\n * @param params - Optional interpolation parameters\n * @returns Translated string\n */\nexport function t(\n key: TranslationKey,\n params?: Record<string, string | number>,\n): string {\n const translation = translations[currentLanguage]?.[key]\n\n if (!translation) {\n // Fallback to English\n const fallback = translations.en[key]\n if (!fallback) {\n // Key not found, return the key itself\n console.warn(`Translation key not found: ${key}`)\n return key\n }\n return interpolate(fallback, params)\n }\n\n return interpolate(translation, params)\n}\n\n/**\n * Get translation for a specific language (without changing current language)\n */\nexport function tLang(\n lang: Language,\n key: TranslationKey,\n params?: Record<string, string | number>,\n): string {\n const translation = translations[lang]?.[key] || translations.en[key] || key\n return interpolate(translation, params)\n}\n\n/**\n * Interpolate parameters into translation string\n * Supports {
|
|
5
|
-
"mappings": "AAoBA,SAAS,UAAU;AACnB,SAAS,YAAY;AAGrB,MAAM,eAA+C;AAAA,EACnD;AAAA,EACA,SAAS;AACX;AAGA,IAAI,kBAA4B;AAIhC,MAAM,YAAyC,oBAAI,IAAI;AAOhD,SAAS,uBAAiC;AAG/C,QAAM,UAAU,QAAQ,IAAI;AAE5B,MAAI,SAAS;AACX,UAAM,aAAa,QAAQ,YAAY;AACvC,QAAI,WAAW,WAAW,IAAI,GAAG;AAC/B,aAAO;AAAA,IACT;AAAA,EACF;AAGA,SAAO;AACT;AAMO,SAAS,SAAS,MAAuB;AAC9C,MAAI,MAAM;AACR,sBAAkB;AAAA,EACpB,OAAO;AAGL,sBAAkB;AAAA,EACpB;AACF;AAKO,SAAS,cAAwB;AACtC,SAAO;AACT;AAKO,SAAS,YAAY,MAAsB;AAChD,MAAI,aAAa,IAAI,GAAG;AACtB,sBAAkB;AAElB,eAAW,YAAY,WAAW;AAChC,eAAS,IAAI;AAAA,IACf;AAAA,EACF,OAAO;AACL,YAAQ,KAAK,aAAa,IAAI,6BAA6B;AAC3D,sBAAkB;AAAA,EACpB;AACF;AAKO,SAAS,iBAAiB,UAA8C;AAC7E,YAAU,IAAI,QAAQ;AACtB,SAAO,MAAM,UAAU,OAAO,QAAQ;AACxC;AAQO,SAAS,eAAe,KAAsB;AACnD,SAAO,CAAC,EACN,aAAa,eAAe,IAAI,GAAqB,KACrD,aAAa,GAAG,GAAqB;AAEzC;AASO,SAAS,MACd,KACA,QACoB;AACpB,QAAM,cAAc,aAAa,eAAe,IAAI,GAAqB;AAEzE,MAAI,CAAC,aAAa;AAChB,UAAM,WAAW,aAAa,GAAG,GAAqB;AACtD,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,IACT;AACA,WAAO,YAAY,UAAU,MAAM;AAAA,EACrC;AAEA,SAAO,YAAY,aAAa,MAAM;AACxC;AASO,SAAS,EACd,KACA,QACQ;AACR,QAAM,cAAc,aAAa,eAAe,IAAI,GAAG;AAEvD,MAAI,CAAC,aAAa;AAEhB,UAAM,WAAW,aAAa,GAAG,GAAG;AACpC,QAAI,CAAC,UAAU;AAEb,cAAQ,KAAK,8BAA8B,GAAG,EAAE;AAChD,aAAO;AAAA,IACT;AACA,WAAO,YAAY,UAAU,MAAM;AAAA,EACrC;AAEA,SAAO,YAAY,aAAa,MAAM;AACxC;AAKO,SAAS,MACd,MACA,KACA,QACQ;AACR,QAAM,cAAc,aAAa,IAAI,IAAI,GAAG,KAAK,aAAa,GAAG,GAAG,KAAK;AACzE,SAAO,YAAY,aAAa,MAAM;AACxC;AAMA,SAAS,YACP,KACA,QACQ;AACR,MAAI,CAAC,OAAQ,QAAO;AAEpB,SAAO,IAAI,QAAQ,
|
|
4
|
+
"sourcesContent": ["/**\n * Minto i18n System\n *\n * Lightweight internationalization system for CLI applications.\n * Supports English (default) and Simplified Chinese.\n *\n * Usage:\n * import { t, setLanguage, getLanguage } from '@i18n'\n *\n * // Get translated string\n * const label = t('ui.displayMode.minimal') // \"Minimal\" or \"\u7CBE\u7B80\"\n *\n * // Change language\n * setLanguage('zh-CN')\n *\n * // Get current language\n * const lang = getLanguage() // 'en' or 'zh-CN'\n */\n\nimport type { Language, TranslationKey, Translations } from './types'\nimport { en } from './locales/en'\nimport { zhCN } from './locales/zh-CN'\n\n// All available translations\nconst translations: Record<Language, Translations> = {\n en,\n 'zh-CN': zhCN,\n}\n\n// Current language state\nlet currentLanguage: Language = 'en'\n\n// Language change listeners\ntype LanguageChangeListener = (lang: Language) => void\nconst listeners: Set<LanguageChangeListener> = new Set()\n\n/**\n * Detect system language\n * Only checks MINTO_LANG environment variable for explicit override\n * Defaults to English - user must explicitly set language for other locales\n */\nexport function detectSystemLanguage(): Language {\n // Only check MINTO_LANG for explicit language override\n // Do NOT auto-detect from system locale (LANG, LC_ALL, etc.)\n const envLang = process.env.MINTO_LANG\n\n if (envLang) {\n const normalized = envLang.toLowerCase()\n if (normalized.startsWith('zh')) {\n return 'zh-CN'\n }\n }\n\n // Default to English\n return 'en'\n}\n\n/**\n * Initialize i18n with optional language\n * Should be called once at application startup\n */\nexport function initI18n(lang?: Language): void {\n if (lang) {\n currentLanguage = lang\n } else {\n // Will be set from config or CLI args\n // For now, default to English\n currentLanguage = 'en'\n }\n}\n\n/**\n * Get current language\n */\nexport function getLanguage(): Language {\n return currentLanguage\n}\n\n/**\n * Set current language\n */\nexport function setLanguage(lang: Language): void {\n if (translations[lang]) {\n currentLanguage = lang\n // Notify listeners\n for (const listener of listeners) {\n listener(lang)\n }\n } else {\n console.warn(`Language '${lang}' not supported, using 'en'`)\n currentLanguage = 'en'\n }\n}\n\n/**\n * Subscribe to language changes\n */\nexport function onLanguageChange(listener: LanguageChangeListener): () => void {\n listeners.add(listener)\n return () => listeners.delete(listener)\n}\n\n/**\n * Check if a translation key exists\n *\n * @param key - Translation key to check\n * @returns true if key exists in current language or fallback (English)\n */\nexport function hasTranslation(key: string): boolean {\n return !!(\n translations[currentLanguage]?.[key as TranslationKey] ||\n translations.en[key as TranslationKey]\n )\n}\n\n/**\n * Get translated string by key (silent version - no warning if key not found)\n *\n * @param key - Translation key\n * @param params - Optional interpolation parameters\n * @returns Translated string or undefined if not found\n */\nexport function tSafe(\n key: string,\n params?: Record<string, string | number>,\n): string | undefined {\n const translation = translations[currentLanguage]?.[key as TranslationKey]\n\n if (!translation) {\n const fallback = translations.en[key as TranslationKey]\n if (!fallback) {\n return undefined\n }\n return interpolate(fallback, params)\n }\n\n return interpolate(translation, params)\n}\n\n/**\n * Get translated string by key\n *\n * @param key - Translation key (e.g., 'ui.displayMode.minimal')\n * @param params - Optional interpolation parameters\n * @returns Translated string\n */\nexport function t(\n key: TranslationKey,\n params?: Record<string, string | number>,\n): string {\n const translation = translations[currentLanguage]?.[key]\n\n if (!translation) {\n // Fallback to English\n const fallback = translations.en[key]\n if (!fallback) {\n // Key not found, return the key itself\n console.warn(`Translation key not found: ${key}`)\n return key\n }\n return interpolate(fallback, params)\n }\n\n return interpolate(translation, params)\n}\n\n/**\n * Get translation for a specific language (without changing current language)\n */\nexport function tLang(\n lang: Language,\n key: TranslationKey,\n params?: Record<string, string | number>,\n): string {\n const translation = translations[lang]?.[key] || translations.en[key] || key\n return interpolate(translation, params)\n}\n\n/**\n * Interpolate parameters into translation string\n * Supports {param} syntax (single braces)\n */\nfunction interpolate(\n str: string,\n params?: Record<string, string | number>,\n): string {\n if (!params) return str\n\n return str.replace(/\\{(\\w+)\\}/g, (match, key) => {\n return params[key] !== undefined ? String(params[key]) : match\n })\n}\n\n/**\n * Check if a language is supported\n */\nexport function isLanguageSupported(lang: string): lang is Language {\n return lang in translations\n}\n\n/**\n * Get list of supported languages\n */\nexport function getSupportedLanguages(): Language[] {\n return Object.keys(translations) as Language[]\n}\n\n/**\n * Get language display name\n */\nexport function getLanguageDisplayName(lang: Language): string {\n const names: Record<Language, string> = {\n en: 'English',\n 'zh-CN': '\u7B80\u4F53\u4E2D\u6587',\n }\n return names[lang] || lang\n}\n\n// Re-export types\nexport type { Language, TranslationKey, Translations } from './types'\nexport { LANGUAGE_NAMES } from './types'\n"],
|
|
5
|
+
"mappings": "AAoBA,SAAS,UAAU;AACnB,SAAS,YAAY;AAGrB,MAAM,eAA+C;AAAA,EACnD;AAAA,EACA,SAAS;AACX;AAGA,IAAI,kBAA4B;AAIhC,MAAM,YAAyC,oBAAI,IAAI;AAOhD,SAAS,uBAAiC;AAG/C,QAAM,UAAU,QAAQ,IAAI;AAE5B,MAAI,SAAS;AACX,UAAM,aAAa,QAAQ,YAAY;AACvC,QAAI,WAAW,WAAW,IAAI,GAAG;AAC/B,aAAO;AAAA,IACT;AAAA,EACF;AAGA,SAAO;AACT;AAMO,SAAS,SAAS,MAAuB;AAC9C,MAAI,MAAM;AACR,sBAAkB;AAAA,EACpB,OAAO;AAGL,sBAAkB;AAAA,EACpB;AACF;AAKO,SAAS,cAAwB;AACtC,SAAO;AACT;AAKO,SAAS,YAAY,MAAsB;AAChD,MAAI,aAAa,IAAI,GAAG;AACtB,sBAAkB;AAElB,eAAW,YAAY,WAAW;AAChC,eAAS,IAAI;AAAA,IACf;AAAA,EACF,OAAO;AACL,YAAQ,KAAK,aAAa,IAAI,6BAA6B;AAC3D,sBAAkB;AAAA,EACpB;AACF;AAKO,SAAS,iBAAiB,UAA8C;AAC7E,YAAU,IAAI,QAAQ;AACtB,SAAO,MAAM,UAAU,OAAO,QAAQ;AACxC;AAQO,SAAS,eAAe,KAAsB;AACnD,SAAO,CAAC,EACN,aAAa,eAAe,IAAI,GAAqB,KACrD,aAAa,GAAG,GAAqB;AAEzC;AASO,SAAS,MACd,KACA,QACoB;AACpB,QAAM,cAAc,aAAa,eAAe,IAAI,GAAqB;AAEzE,MAAI,CAAC,aAAa;AAChB,UAAM,WAAW,aAAa,GAAG,GAAqB;AACtD,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,IACT;AACA,WAAO,YAAY,UAAU,MAAM;AAAA,EACrC;AAEA,SAAO,YAAY,aAAa,MAAM;AACxC;AASO,SAAS,EACd,KACA,QACQ;AACR,QAAM,cAAc,aAAa,eAAe,IAAI,GAAG;AAEvD,MAAI,CAAC,aAAa;AAEhB,UAAM,WAAW,aAAa,GAAG,GAAG;AACpC,QAAI,CAAC,UAAU;AAEb,cAAQ,KAAK,8BAA8B,GAAG,EAAE;AAChD,aAAO;AAAA,IACT;AACA,WAAO,YAAY,UAAU,MAAM;AAAA,EACrC;AAEA,SAAO,YAAY,aAAa,MAAM;AACxC;AAKO,SAAS,MACd,MACA,KACA,QACQ;AACR,QAAM,cAAc,aAAa,IAAI,IAAI,GAAG,KAAK,aAAa,GAAG,GAAG,KAAK;AACzE,SAAO,YAAY,aAAa,MAAM;AACxC;AAMA,SAAS,YACP,KACA,QACQ;AACR,MAAI,CAAC,OAAQ,QAAO;AAEpB,SAAO,IAAI,QAAQ,cAAc,CAAC,OAAO,QAAQ;AAC/C,WAAO,OAAO,GAAG,MAAM,SAAY,OAAO,OAAO,GAAG,CAAC,IAAI;AAAA,EAC3D,CAAC;AACH;AAKO,SAAS,oBAAoB,MAAgC;AAClE,SAAO,QAAQ;AACjB;AAKO,SAAS,wBAAoC;AAClD,SAAO,OAAO,KAAK,YAAY;AACjC;AAKO,SAAS,uBAAuB,MAAwB;AAC7D,QAAM,QAAkC;AAAA,IACtC,IAAI;AAAA,IACJ,SAAS;AAAA,EACX;AACA,SAAO,MAAM,IAAI,KAAK;AACxB;AAIA,SAAS,sBAAsB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|