@within-7/minto 0.1.5 → 0.1.6
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/dist/commands/agents/AgentsCommand.js +2342 -0
- package/dist/commands/agents/AgentsCommand.js.map +7 -0
- package/dist/commands/agents/constants.js +58 -0
- package/dist/commands/agents/constants.js.map +7 -0
- package/dist/commands/agents/index.js +37 -0
- package/dist/commands/agents/index.js.map +7 -0
- package/dist/commands/agents/types.js +10 -0
- package/dist/commands/agents/types.js.map +7 -0
- package/dist/commands/agents/utils/fileOperations.js +185 -0
- package/dist/commands/agents/utils/fileOperations.js.map +7 -0
- package/dist/commands/agents/utils/index.js +21 -0
- package/dist/commands/agents/utils/index.js.map +7 -0
- package/dist/commands/bug.js +2 -2
- package/dist/commands/bug.js.map +2 -2
- package/dist/commands/compact.js +5 -5
- package/dist/commands/compact.js.map +2 -2
- package/dist/commands/ctx_viz.js +55 -22
- package/dist/commands/ctx_viz.js.map +2 -2
- package/dist/commands/mcp-interactive.js +11 -11
- package/dist/commands/mcp-interactive.js.map +2 -2
- package/dist/commands/model.js +94 -32
- package/dist/commands/model.js.map +3 -3
- package/dist/commands/plugin/AddMarketplaceForm.js +49 -21
- package/dist/commands/plugin/AddMarketplaceForm.js.map +2 -2
- package/dist/commands/plugin/ConfirmDialog.js +38 -26
- package/dist/commands/plugin/ConfirmDialog.js.map +2 -2
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js +24 -8
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js.map +2 -2
- package/dist/commands/plugin/InstalledPluginsManager.js +3 -1
- package/dist/commands/plugin/InstalledPluginsManager.js.map +2 -2
- package/dist/commands/plugin/MainMenu.js +16 -7
- package/dist/commands/plugin/MainMenu.js.map +2 -2
- package/dist/commands/plugin/MarketplaceManager.js +84 -39
- package/dist/commands/plugin/MarketplaceManager.js.map +2 -2
- package/dist/commands/plugin/MarketplaceSelector.js +7 -3
- package/dist/commands/plugin/MarketplaceSelector.js.map +2 -2
- package/dist/commands/plugin/PlaceholderScreen.js +16 -2
- package/dist/commands/plugin/PlaceholderScreen.js.map +2 -2
- package/dist/commands/plugin/PluginBrowser.js +4 -2
- package/dist/commands/plugin/PluginBrowser.js.map +2 -2
- package/dist/commands/plugin/PluginDetailsInstall.js +12 -6
- package/dist/commands/plugin/PluginDetailsInstall.js.map +2 -2
- package/dist/commands/plugin/PluginDetailsManage.js +14 -5
- package/dist/commands/plugin/PluginDetailsManage.js.map +2 -2
- package/dist/commands/plugin/example-usage.js.map +2 -2
- package/dist/commands/plugin/utils.js.map +2 -2
- package/dist/commands/plugin.js +226 -46
- package/dist/commands/plugin.js.map +2 -2
- package/dist/commands/refreshCommands.js +6 -3
- package/dist/commands/refreshCommands.js.map +2 -2
- package/dist/commands/resume.js +2 -1
- package/dist/commands/resume.js.map +2 -2
- package/dist/commands/setup.js +19 -5
- package/dist/commands/setup.js.map +2 -2
- package/dist/commands/terminalSetup.js +2 -2
- package/dist/commands/terminalSetup.js.map +1 -1
- package/dist/commands.js +14 -30
- package/dist/commands.js.map +2 -2
- package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js.map +2 -2
- package/dist/components/AskUserQuestionDialog/QuestionView.js +10 -1
- package/dist/components/AskUserQuestionDialog/QuestionView.js.map +2 -2
- package/dist/components/BackgroundTasksPanel.js +5 -1
- package/dist/components/BackgroundTasksPanel.js.map +2 -2
- package/dist/components/Config.js +17 -4
- package/dist/components/Config.js.map +2 -2
- package/dist/components/ConsoleOAuthFlow.js.map +2 -2
- package/dist/components/CustomSelect/select-option.js +4 -1
- package/dist/components/CustomSelect/select-option.js.map +2 -2
- package/dist/components/Help.js +6 -8
- package/dist/components/Help.js.map +2 -2
- package/dist/components/Logo.js +1 -1
- package/dist/components/Logo.js.map +2 -2
- package/dist/components/ModelListManager.js.map +2 -2
- package/dist/components/ModelSelector/ModelSelector.js +2030 -0
- package/dist/components/ModelSelector/ModelSelector.js.map +7 -0
- package/dist/components/ModelSelector/ScreenContainer.js +27 -0
- package/dist/components/ModelSelector/ScreenContainer.js.map +7 -0
- package/dist/components/ModelSelector/constants.js +37 -0
- package/dist/components/ModelSelector/constants.js.map +7 -0
- package/dist/components/ModelSelector/hooks/index.js +5 -0
- package/dist/components/ModelSelector/hooks/index.js.map +7 -0
- package/dist/components/ModelSelector/hooks/useEscapeNavigation.js +21 -0
- package/dist/components/ModelSelector/hooks/useEscapeNavigation.js.map +7 -0
- package/dist/components/ModelSelector/index.js +17 -0
- package/dist/components/ModelSelector/index.js.map +7 -0
- package/dist/components/ModelSelector/types.js +1 -0
- package/dist/components/ModelSelector/types.js.map +7 -0
- package/dist/components/PressEnterToContinue.js +1 -1
- package/dist/components/PressEnterToContinue.js.map +2 -2
- package/dist/components/ProjectOnboarding.js +1 -1
- package/dist/components/ProjectOnboarding.js.map +2 -2
- package/dist/components/PromptInput.js +88 -37
- package/dist/components/PromptInput.js.map +2 -2
- package/dist/components/QuitSummary.js +17 -10
- package/dist/components/QuitSummary.js.map +2 -2
- package/dist/components/SentryErrorBoundary.js.map +2 -2
- package/dist/components/StreamingBashOutput.js.map +2 -2
- package/dist/components/StructuredDiff.js.map +2 -2
- package/dist/components/SubagentProgress.js.map +2 -2
- package/dist/components/TaskCard.js.map +2 -2
- package/dist/components/TextInput.js.map +1 -1
- package/dist/components/TodoItem.js.map +1 -1
- package/dist/components/binary-feedback/BinaryFeedbackOption.js +1 -3
- package/dist/components/binary-feedback/BinaryFeedbackOption.js.map +2 -2
- package/dist/components/messages/AssistantLocalCommandOutputMessage.js.map +1 -1
- package/dist/components/messages/AssistantToolUseMessage.js +3 -1
- package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
- package/dist/components/messages/TaskProgressMessage.js.map +2 -2
- package/dist/components/messages/TaskToolMessage.js.map +2 -2
- package/dist/components/messages/UserToolResultMessage/utils.js.map +2 -2
- package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js.map +2 -2
- package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js.map +2 -2
- package/dist/components/permissions/hooks.js.map +2 -2
- package/dist/constants/modelCapabilities.js +1 -1
- package/dist/constants/modelCapabilities.js.map +2 -2
- package/dist/constants/prompts.js.map +1 -1
- package/dist/constants/timing.js +34 -0
- package/dist/constants/timing.js.map +7 -0
- package/dist/entrypoints/cli.js +128 -33
- package/dist/entrypoints/cli.js.map +3 -3
- package/dist/entrypoints/mcp.js +13 -18
- package/dist/entrypoints/mcp.js.map +2 -2
- package/dist/hooks/useCanUseTool.js.map +2 -2
- package/dist/hooks/useCancelRequest.js.map +1 -1
- package/dist/hooks/useHistorySearch.js.map +2 -2
- package/dist/hooks/useLogStartupTime.js.map +2 -2
- package/dist/hooks/usePermissionRequestLogging.js.map +2 -2
- package/dist/hooks/useTextInput.js.map +1 -1
- package/dist/hooks/useUnifiedCompletion.js +493 -394
- package/dist/hooks/useUnifiedCompletion.js.map +2 -2
- package/dist/index.js.map +2 -2
- package/dist/permissions.js +4 -7
- package/dist/permissions.js.map +2 -2
- package/dist/query.js +6 -1
- package/dist/query.js.map +2 -2
- package/dist/screens/REPL.js +72 -36
- package/dist/screens/REPL.js.map +2 -2
- package/dist/screens/ResumeConversation.js +2 -1
- package/dist/screens/ResumeConversation.js.map +2 -2
- package/dist/services/adapters/base.js.map +2 -2
- package/dist/services/adapters/chatCompletions.js.map +2 -2
- package/dist/services/adapters/responsesAPI.js +3 -1
- package/dist/services/adapters/responsesAPI.js.map +2 -2
- package/dist/services/claude.js +327 -328
- package/dist/services/claude.js.map +2 -2
- package/dist/services/customCommands.js +6 -1
- package/dist/services/customCommands.js.map +2 -2
- package/dist/services/fileFreshness.js.map +2 -2
- package/dist/services/gpt5ConnectionTest.js +20 -7
- package/dist/services/gpt5ConnectionTest.js.map +2 -2
- package/dist/services/hookExecutor.js +6 -12
- package/dist/services/hookExecutor.js.map +2 -2
- package/dist/services/mcpClient.js +29 -2
- package/dist/services/mcpClient.js.map +2 -2
- package/dist/services/mentionProcessor.js +23 -10
- package/dist/services/mentionProcessor.js.map +2 -2
- package/dist/services/modelAdapterFactory.js.map +2 -2
- package/dist/services/oauth.js.map +2 -2
- package/dist/services/openai.js +109 -72
- package/dist/services/openai.js.map +3 -3
- package/dist/services/responseStateManager.js.map +2 -2
- package/dist/services/systemReminder.js.map +2 -2
- package/dist/tools/ArchitectTool/ArchitectTool.js.map +1 -1
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +14 -8
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
- package/dist/tools/BashOutputTool/BashOutputTool.js.map +2 -2
- package/dist/tools/BashTool/BashTool.js.map +2 -2
- package/dist/tools/FileReadTool/FileReadTool.js.map +1 -1
- package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
- package/dist/tools/GrepTool/GrepTool.js +1 -4
- package/dist/tools/GrepTool/GrepTool.js.map +2 -2
- package/dist/tools/MultiEditTool/MultiEditTool.js +4 -1
- package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
- package/dist/tools/NotebookReadTool/NotebookReadTool.js +3 -1
- package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +2 -2
- package/dist/tools/SkillTool/SkillTool.js +12 -6
- package/dist/tools/SkillTool/SkillTool.js.map +2 -2
- package/dist/tools/TaskTool/TaskTool.js +14 -5
- package/dist/tools/TaskTool/TaskTool.js.map +2 -2
- package/dist/tools/TaskTool/prompt.js.map +2 -2
- package/dist/tools/ThinkTool/ThinkTool.js +6 -1
- package/dist/tools/ThinkTool/ThinkTool.js.map +2 -2
- package/dist/tools/TodoWriteTool/TodoWriteTool.js +23 -3
- package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +2 -2
- package/dist/tools/URLFetcherTool/URLFetcherTool.js +2 -2
- package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +2 -2
- package/dist/tools/URLFetcherTool/cache.js +6 -3
- package/dist/tools/URLFetcherTool/cache.js.map +2 -2
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js +3 -1
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js.map +2 -2
- package/dist/tools/WebSearchTool/WebSearchTool.js.map +2 -2
- package/dist/tools/WebSearchTool/prompt.js.map +2 -2
- package/dist/tools/WebSearchTool/searchProviders.js +15 -6
- package/dist/tools/WebSearchTool/searchProviders.js.map +2 -2
- package/dist/tools.js +4 -1
- package/dist/tools.js.map +2 -2
- package/dist/types/core.js +1 -0
- package/dist/types/core.js.map +7 -0
- package/dist/types/hooks.js +1 -4
- package/dist/types/hooks.js.map +2 -2
- package/dist/types/marketplace.js +8 -2
- package/dist/types/marketplace.js.map +2 -2
- package/dist/types/plugin.js +9 -6
- package/dist/types/plugin.js.map +2 -2
- package/dist/utils/BackgroundShellManager.js +76 -10
- package/dist/utils/BackgroundShellManager.js.map +2 -2
- package/dist/utils/PersistentShell.js +7 -2
- package/dist/utils/PersistentShell.js.map +2 -2
- package/dist/utils/advancedFuzzyMatcher.js +4 -1
- package/dist/utils/advancedFuzzyMatcher.js.map +2 -2
- package/dist/utils/agentLoader.js +69 -35
- package/dist/utils/agentLoader.js.map +2 -2
- package/dist/utils/agentStorage.js.map +2 -2
- package/dist/utils/async.js +163 -0
- package/dist/utils/async.js.map +7 -0
- package/dist/utils/autoUpdater.js +8 -2
- package/dist/utils/autoUpdater.js.map +2 -2
- package/dist/utils/commands.js +23 -11
- package/dist/utils/commands.js.map +2 -2
- package/dist/utils/commonUnixCommands.js +3 -1
- package/dist/utils/commonUnixCommands.js.map +2 -2
- package/dist/utils/compressionMode.js.map +2 -2
- package/dist/utils/config.js +30 -14
- package/dist/utils/config.js.map +2 -2
- package/dist/utils/debugLogger.js.map +2 -2
- package/dist/utils/env.js.map +2 -2
- package/dist/utils/envConfig.js +82 -0
- package/dist/utils/envConfig.js.map +7 -0
- package/dist/utils/errorHandling.js +89 -0
- package/dist/utils/errorHandling.js.map +7 -0
- package/dist/utils/expertChatStorage.js.map +2 -2
- package/dist/utils/fuzzyMatcher.js +13 -7
- package/dist/utils/fuzzyMatcher.js.map +2 -2
- package/dist/utils/hookManager.js +14 -4
- package/dist/utils/hookManager.js.map +2 -2
- package/dist/utils/log.js.map +2 -2
- package/dist/utils/marketplaceManager.js +44 -9
- package/dist/utils/marketplaceManager.js.map +2 -2
- package/dist/utils/messageContextManager.js.map +1 -1
- package/dist/utils/messages.js +6 -3
- package/dist/utils/messages.js.map +2 -2
- package/dist/utils/model.js +3 -1
- package/dist/utils/model.js.map +2 -2
- package/dist/utils/pluginInstaller.js +3 -15
- package/dist/utils/pluginInstaller.js.map +2 -2
- package/dist/utils/pluginLoader.js +41 -13
- package/dist/utils/pluginLoader.js.map +2 -2
- package/dist/utils/pluginRegistry.js.map +2 -2
- package/dist/utils/pluginValidator.js +71 -49
- package/dist/utils/pluginValidator.js.map +2 -2
- package/dist/utils/ptyCompat.js.map +2 -2
- package/dist/utils/roundConverter.js.map +2 -2
- package/dist/utils/secureFile.js +43 -14
- package/dist/utils/secureFile.js.map +2 -2
- package/dist/utils/sessionState.js.map +2 -2
- package/dist/utils/skillLoader.js.map +2 -2
- package/dist/utils/teamConfig.js +7 -4
- package/dist/utils/teamConfig.js.map +2 -2
- package/dist/utils/theme.js.map +2 -2
- package/dist/utils/thinking.js.map +2 -2
- package/dist/utils/unaryLogging.js.map +2 -2
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +5 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/autoUpdater.ts"],
|
|
4
|
-
"sourcesContent": ["import { execFileNoThrow } from './execFileNoThrow'\nimport { logError } from './log'\n
|
|
5
|
-
"mappings": "AAAA,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AAEzB,SAAS,IAAI,UAAU;AACvB,SAAS,aAAa;AACtB,SAAS,oBAAoB;AAC7B,
|
|
4
|
+
"sourcesContent": ["import { execFileNoThrow } from './execFileNoThrow'\nimport { logError } from './log'\n\nimport { lt, gt } from 'semver'\nimport { MACRO } from '@constants/macros'\nimport { PRODUCT_NAME } from '@constants/product'\nimport {\n getGlobalConfig,\n saveGlobalConfig,\n isAutoUpdaterDisabled,\n} from './config'\nimport { env } from './env'\n\nexport type VersionConfig = {\n minVersion: string\n}\n\n// Ensure current version meets minimum supported version; exit if too old\nexport async function assertMinVersion(): Promise<void> {\n try {\n const versionConfig: VersionConfig = { minVersion: '0.0.0' }\n if (\n versionConfig.minVersion &&\n lt(MACRO.VERSION, versionConfig.minVersion)\n ) {\n const suggestions = await getUpdateCommandSuggestions()\n // Intentionally minimal: caller may print its own message; we just exit\n // eslint-disable-next-line no-console\n console.error(\n `Your ${PRODUCT_NAME} version ${MACRO.VERSION} is below the minimum supported ${versionConfig.minVersion}.\\n` +\n 'Update using one of:\\n' +\n suggestions.map(c => ` ${c}`).join('\\n'),\n )\n process.exit(1)\n }\n } catch (error) {\n logError(`Error checking minimum version: ${error}`)\n }\n}\n\n// Get latest version from npm (via npm CLI or HTTP fallback)\nexport async function getLatestVersion(): Promise<string | null> {\n // Prefer npm CLI (fast when available)\n try {\n const abortController = new AbortController()\n setTimeout(() => abortController.abort(), 5000)\n const result = await execFileNoThrow(\n 'npm',\n ['view', MACRO.PACKAGE_URL, 'version'],\n abortController.signal,\n )\n if (result.code === 0) {\n const v = result.stdout.trim()\n if (v) return v\n }\n } catch {}\n\n // Fallback: query npm registry directly\n try {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 5000)\n const res = await fetch(\n `https://registry.npmjs.org/${encodeURIComponent(MACRO.PACKAGE_URL)}`,\n {\n method: 'GET',\n headers: {\n Accept: 'application/vnd.npm.install-v1+json',\n 'User-Agent': `${PRODUCT_NAME}/${MACRO.VERSION}`,\n },\n signal: controller.signal,\n },\n )\n clearTimeout(timer)\n if (!res.ok) return null\n const json: any = await res.json().catch(() => null)\n const latest = json && json['dist-tags'] && json['dist-tags'].latest\n return typeof latest === 'string' ? latest : null\n } catch {\n return null\n }\n}\n\n// Suggest manual update commands; prefer Bun first, then npm\nexport async function getUpdateCommandSuggestions(): Promise<string[]> {\n return [\n `bun add -g ${MACRO.PACKAGE_URL}@latest`,\n `npm install -g ${MACRO.PACKAGE_URL}@latest`,\n ]\n}\n\n// Optional: background notifier that prints a simple banner\nexport async function checkAndNotifyUpdate(): Promise<void> {\n try {\n if (process.env.NODE_ENV === 'test') return\n if (await isAutoUpdaterDisabled()) return\n if (await env.getIsDocker()) return\n if (!(await env.hasInternetAccess())) return\n\n const config: any = getGlobalConfig()\n const now = Date.now()\n const DAY_MS = 24 * 60 * 60 * 1000\n const lastCheck = Number(config.lastUpdateCheckAt || 0)\n if (lastCheck && now - lastCheck < DAY_MS) return\n\n const latest = await getLatestVersion()\n if (!latest) {\n saveGlobalConfig({ ...config, lastUpdateCheckAt: now })\n return\n }\n\n if (gt(latest, MACRO.VERSION)) {\n saveGlobalConfig({\n ...config,\n lastUpdateCheckAt: now,\n lastSuggestedVersion: latest,\n })\n const suggestions = await getUpdateCommandSuggestions()\n // eslint-disable-next-line no-console\n console.log(\n `New version available: ${latest} (current: ${MACRO.VERSION})`,\n )\n console.log('Run the following command to update:')\n for (const command of suggestions) console.log(` ${command}`)\n } else {\n saveGlobalConfig({ ...config, lastUpdateCheckAt: now })\n }\n } catch (error) {\n logError(`update-notify: ${error}`)\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/utils/commands.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { memoize } from "lodash-es";
|
|
2
1
|
import { API_ERROR_MESSAGE_PREFIX, queryQuick } from "../services/claude.js";
|
|
2
|
+
import { memoizeAsyncWithLimit } from "./async.js";
|
|
3
3
|
import { parse } from "shell-quote";
|
|
4
4
|
import { PRODUCT_NAME } from "../constants/product.js";
|
|
5
5
|
const SINGLE_QUOTE = "__SINGLE_QUOTE__";
|
|
@@ -42,7 +42,7 @@ function splitCommand(command) {
|
|
|
42
42
|
(part) => !COMMAND_LIST_SEPARATORS.has(part)
|
|
43
43
|
);
|
|
44
44
|
}
|
|
45
|
-
const getCommandSubcommandPrefix =
|
|
45
|
+
const getCommandSubcommandPrefix = memoizeAsyncWithLimit(
|
|
46
46
|
async (command, abortSignal) => {
|
|
47
47
|
const subcommands = splitCommand(command);
|
|
48
48
|
const [fullCommandPrefix, ...subcommandPrefixesResults] = await Promise.all(
|
|
@@ -71,10 +71,16 @@ const getCommandSubcommandPrefix = memoize(
|
|
|
71
71
|
subcommandPrefixes
|
|
72
72
|
};
|
|
73
73
|
},
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
{
|
|
75
|
+
max: 200,
|
|
76
|
+
// Cache up to 200 unique commands
|
|
77
|
+
ttl: 3e5,
|
|
78
|
+
// 5 minutes TTL
|
|
79
|
+
resolver: (command) => command
|
|
80
|
+
// memoize by command only, ignore abortSignal
|
|
81
|
+
}
|
|
76
82
|
);
|
|
77
|
-
const getCommandPrefix =
|
|
83
|
+
const getCommandPrefix = memoizeAsyncWithLimit(
|
|
78
84
|
async (command, abortSignal) => {
|
|
79
85
|
const response = await queryQuick({
|
|
80
86
|
systemPrompt: [
|
|
@@ -125,10 +131,10 @@ The user has allowed certain command prefixes to be run, and will otherwise be a
|
|
|
125
131
|
Your task is to determine the command prefix for the following command.
|
|
126
132
|
|
|
127
133
|
IMPORTANT: Bash commands may run multiple commands that are chained together.
|
|
128
|
-
For safety, if the command seems to contain command injection, you must return "command_injection_detected".
|
|
129
|
-
(This will help protect the user: if they think that they're allowlisting command A,
|
|
130
|
-
but the AI coding agent sends a malicious command that technically has the same prefix as command A,
|
|
131
|
-
then the safety system will see that you said
|
|
134
|
+
For safety, if the command seems to contain command injection, you must return "command_injection_detected".
|
|
135
|
+
(This will help protect the user: if they think that they're allowlisting command A,
|
|
136
|
+
but the AI coding agent sends a malicious command that technically has the same prefix as command A,
|
|
137
|
+
then the safety system will see that you said "command_injection_detected" and ask the user for manual confirmation.)
|
|
132
138
|
|
|
133
139
|
Note that not every command has a prefix. If a command has no prefix, return "none".
|
|
134
140
|
|
|
@@ -163,8 +169,14 @@ Command: ${command}
|
|
|
163
169
|
commandInjectionDetected: false
|
|
164
170
|
};
|
|
165
171
|
},
|
|
166
|
-
|
|
167
|
-
|
|
172
|
+
{
|
|
173
|
+
max: 200,
|
|
174
|
+
// Cache up to 200 unique commands
|
|
175
|
+
ttl: 3e5,
|
|
176
|
+
// 5 minutes TTL
|
|
177
|
+
resolver: (command) => command
|
|
178
|
+
// memoize by command only, ignore abortSignal
|
|
179
|
+
}
|
|
168
180
|
);
|
|
169
181
|
const COMMAND_LIST_SEPARATORS = /* @__PURE__ */ new Set([
|
|
170
182
|
"&&",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/commands.ts"],
|
|
4
|
-
"sourcesContent": ["import {
|
|
5
|
-
"mappings": "AAAA,SAAS,
|
|
4
|
+
"sourcesContent": ["import { API_ERROR_MESSAGE_PREFIX, queryQuick } from '@services/claude'\nimport { memoizeAsyncWithLimit } from './async'\nimport { type ControlOperator, parse, ParseEntry } from 'shell-quote'\nimport { PRODUCT_NAME } from '@constants/product'\n\nconst SINGLE_QUOTE = '__SINGLE_QUOTE__'\nconst DOUBLE_QUOTE = '__DOUBLE_QUOTE__'\n\nexport type CommandPrefixResult =\n | {\n commandPrefix: string | null\n commandInjectionDetected: false\n }\n | { commandInjectionDetected: true }\n\n// Command prefix result alongside subcommand prefixes\nexport type CommandSubcommandPrefixResult = CommandPrefixResult & {\n subcommandPrefixes: Map<string, CommandPrefixResult>\n}\n\n/**\n * Splits a command string into individual commands based on shell operators\n */\nexport function splitCommand(command: string): string[] {\n const parts: ParseEntry[] = []\n\n // 1. Collapse adjacent strings\n for (const part of parse(\n command\n .replaceAll('\"', `\"${DOUBLE_QUOTE}`) // parse() strips out quotes :P\n .replaceAll(\"'\", `'${SINGLE_QUOTE}`), // parse() strips out quotes :P\n varName => `$${varName}`, // Preserve shell variables\n )) {\n if (typeof part === 'string') {\n if (parts.length > 0 && typeof parts[parts.length - 1] === 'string') {\n parts[parts.length - 1] += ' ' + part\n continue\n }\n }\n parts.push(part)\n }\n\n // 2. Map tokens to strings\n const stringParts = parts\n .map(part => {\n if (typeof part === 'string') {\n return part\n }\n if ('comment' in part) {\n // TODO: make this less hacky\n return '#' + part.comment\n }\n if ('op' in part && part.op === 'glob') {\n return part.pattern\n }\n if ('op' in part) {\n return part.op\n }\n return null\n })\n .filter(_ => _ !== null)\n\n // 3. Map quotes back to their original form\n const quotedParts = stringParts.map(part => {\n return part\n .replaceAll(`${SINGLE_QUOTE}`, \"'\")\n .replaceAll(`${DOUBLE_QUOTE}`, '\"')\n })\n\n // 4. Filter out separators\n return quotedParts.filter(\n part => !(COMMAND_LIST_SEPARATORS as Set<string>).has(part),\n )\n}\n\n// Use memoizeAsyncWithLimit to prevent unbounded cache growth from unique commands\nexport const getCommandSubcommandPrefix = memoizeAsyncWithLimit(\n async (\n command: string,\n abortSignal: AbortSignal,\n ): Promise<CommandSubcommandPrefixResult | null> => {\n const subcommands = splitCommand(command)\n\n const [fullCommandPrefix, ...subcommandPrefixesResults] = await Promise.all(\n [\n getCommandPrefix(command, abortSignal),\n ...subcommands.map(async subcommand => ({\n subcommand,\n prefix: await getCommandPrefix(subcommand, abortSignal),\n })),\n ],\n )\n if (!fullCommandPrefix) {\n return null\n }\n const subcommandPrefixes = subcommandPrefixesResults.reduce(\n (acc, { subcommand, prefix }) => {\n if (prefix) {\n acc.set(subcommand, prefix)\n }\n return acc\n },\n new Map<string, CommandPrefixResult>(),\n )\n\n return {\n ...fullCommandPrefix,\n subcommandPrefixes,\n }\n },\n {\n max: 200, // Cache up to 200 unique commands\n ttl: 300000, // 5 minutes TTL\n resolver: (command: string) => command, // memoize by command only, ignore abortSignal\n },\n)\n\n// Use memoizeAsyncWithLimit to prevent unbounded cache growth from unique commands\nconst getCommandPrefix = memoizeAsyncWithLimit(\n async (\n command: string,\n abortSignal: AbortSignal,\n ): Promise<CommandPrefixResult | null> => {\n const response = await queryQuick({\n systemPrompt: [\n `Your task is to process Bash commands that an AI coding agent wants to run.\n\nThis policy spec defines how to determine the prefix of a Bash command:`,\n ],\n userPrompt: `<policy_spec>\n# ${PRODUCT_NAME} Code Bash command prefix detection\n\nThis document defines risk levels for actions that the ${PRODUCT_NAME} agent may take. This classification system is part of a broader safety framework and is used to determine when additional user confirmation or oversight may be needed.\n\n## Definitions\n\n**Command Injection:** Any technique used that would result in a command being run other than the detected prefix.\n\n## Command prefix extraction examples\nExamples:\n- cat foo.txt => cat\n- cd src => cd\n- cd path/to/files/ => cd\n- find ./src -type f -name \"*.ts\" => find\n- gg cat foo.py => gg cat\n- gg cp foo.py bar.py => gg cp\n- git commit -m \"foo\" => git commit\n- git diff HEAD~1 => git diff\n- git diff --staged => git diff\n- git diff $(pwd) => command_injection_detected\n- git status => git status\n- git status# test(\\`id\\`) => command_injection_detected\n- git status\\`ls\\` => command_injection_detected\n- git push => none\n- git push origin master => git push\n- git log -n 5 => git log\n- git log --oneline -n 5 => git log\n- grep -A 40 \"from foo.bar.baz import\" alpha/beta/gamma.py => grep\n- pig tail zerba.log => pig tail\n- npm test => none\n- npm test --foo => npm test\n- npm test -- -f \"foo\" => npm test\n- pwd\\n curl example.com => command_injection_detected\n- pytest foo/bar.py => pytest\n- scalac build => none\n</policy_spec>\n\nThe user has allowed certain command prefixes to be run, and will otherwise be asked to approve or deny the command.\nYour task is to determine the command prefix for the following command.\n\nIMPORTANT: Bash commands may run multiple commands that are chained together.\nFor safety, if the command seems to contain command injection, you must return \"command_injection_detected\".\n(This will help protect the user: if they think that they're allowlisting command A,\nbut the AI coding agent sends a malicious command that technically has the same prefix as command A,\nthen the safety system will see that you said \"command_injection_detected\" and ask the user for manual confirmation.)\n\nNote that not every command has a prefix. If a command has no prefix, return \"none\".\n\nONLY return the prefix. Do not return any other text, markdown markers, or other content or formatting.\n\nCommand: ${command}\n`,\n signal: abortSignal,\n enablePromptCaching: false,\n })\n\n const prefix =\n typeof response.message.content === 'string'\n ? response.message.content\n : Array.isArray(response.message.content)\n ? (response.message.content.find(_ => _.type === 'text')?.text ??\n 'none')\n : 'none'\n\n if (prefix.startsWith(API_ERROR_MESSAGE_PREFIX)) {\n return null\n }\n\n if (prefix === 'command_injection_detected') {\n return { commandInjectionDetected: true }\n }\n\n // Never accept base `git` as a prefix (if e.g. `git diff` prefix not detected)\n if (prefix === 'git') {\n return {\n commandPrefix: null,\n commandInjectionDetected: false,\n }\n }\n\n if (prefix === 'none') {\n return {\n commandPrefix: null,\n commandInjectionDetected: false,\n }\n }\n\n return {\n commandPrefix: prefix,\n commandInjectionDetected: false,\n }\n },\n {\n max: 200, // Cache up to 200 unique commands\n ttl: 300000, // 5 minutes TTL\n resolver: (command: string) => command, // memoize by command only, ignore abortSignal\n },\n)\n\nconst COMMAND_LIST_SEPARATORS = new Set<ControlOperator>([\n '&&',\n '||',\n ';',\n ';;',\n])\n\n// Checks if this is just a list of commands\nfunction isCommandList(command: string): boolean {\n for (const part of parse(\n command\n .replaceAll('\"', `\"${DOUBLE_QUOTE}`) // parse() strips out quotes :P\n .replaceAll(\"'\", `'${SINGLE_QUOTE}`), // parse() strips out quotes :P\n varName => `$${varName}`, // Preserve shell variables\n )) {\n if (typeof part === 'string') {\n // Strings are safe\n continue\n }\n if ('comment' in part) {\n // Don't trust comments, they can contain command injection\n return false\n }\n if ('op' in part) {\n if (part.op === 'glob') {\n // Globs are safe\n continue\n } else if (COMMAND_LIST_SEPARATORS.has(part.op)) {\n // Command list separators are safe\n continue\n }\n // Other operators are unsafe\n return false\n }\n }\n // No unsafe operators found in entire command\n return true\n}\n\nexport function isUnsafeCompoundCommand(command: string): boolean {\n return splitCommand(command).length > 1 && !isCommandList(command)\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,0BAA0B,kBAAkB;AACrD,SAAS,6BAA6B;AACtC,SAA+B,aAAyB;AACxD,SAAS,oBAAoB;AAE7B,MAAM,eAAe;AACrB,MAAM,eAAe;AAiBd,SAAS,aAAa,SAA2B;AACtD,QAAM,QAAsB,CAAC;AAG7B,aAAW,QAAQ;AAAA,IACjB,QACG,WAAW,KAAK,IAAI,YAAY,EAAE,EAClC,WAAW,KAAK,IAAI,YAAY,EAAE;AAAA;AAAA,IACrC,aAAW,IAAI,OAAO;AAAA;AAAA,EACxB,GAAG;AACD,QAAI,OAAO,SAAS,UAAU;AAC5B,UAAI,MAAM,SAAS,KAAK,OAAO,MAAM,MAAM,SAAS,CAAC,MAAM,UAAU;AACnE,cAAM,MAAM,SAAS,CAAC,KAAK,MAAM;AACjC;AAAA,MACF;AAAA,IACF;AACA,UAAM,KAAK,IAAI;AAAA,EACjB;AAGA,QAAM,cAAc,MACjB,IAAI,UAAQ;AACX,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO;AAAA,IACT;AACA,QAAI,aAAa,MAAM;AAErB,aAAO,MAAM,KAAK;AAAA,IACpB;AACA,QAAI,QAAQ,QAAQ,KAAK,OAAO,QAAQ;AACtC,aAAO,KAAK;AAAA,IACd;AACA,QAAI,QAAQ,MAAM;AAChB,aAAO,KAAK;AAAA,IACd;AACA,WAAO;AAAA,EACT,CAAC,EACA,OAAO,OAAK,MAAM,IAAI;AAGzB,QAAM,cAAc,YAAY,IAAI,UAAQ;AAC1C,WAAO,KACJ,WAAW,GAAG,YAAY,IAAI,GAAG,EACjC,WAAW,GAAG,YAAY,IAAI,GAAG;AAAA,EACtC,CAAC;AAGD,SAAO,YAAY;AAAA,IACjB,UAAQ,CAAE,wBAAwC,IAAI,IAAI;AAAA,EAC5D;AACF;AAGO,MAAM,6BAA6B;AAAA,EACxC,OACE,SACA,gBACkD;AAClD,UAAM,cAAc,aAAa,OAAO;AAExC,UAAM,CAAC,mBAAmB,GAAG,yBAAyB,IAAI,MAAM,QAAQ;AAAA,MACtE;AAAA,QACE,iBAAiB,SAAS,WAAW;AAAA,QACrC,GAAG,YAAY,IAAI,OAAM,gBAAe;AAAA,UACtC;AAAA,UACA,QAAQ,MAAM,iBAAiB,YAAY,WAAW;AAAA,QACxD,EAAE;AAAA,MACJ;AAAA,IACF;AACA,QAAI,CAAC,mBAAmB;AACtB,aAAO;AAAA,IACT;AACA,UAAM,qBAAqB,0BAA0B;AAAA,MACnD,CAAC,KAAK,EAAE,YAAY,OAAO,MAAM;AAC/B,YAAI,QAAQ;AACV,cAAI,IAAI,YAAY,MAAM;AAAA,QAC5B;AACA,eAAO;AAAA,MACT;AAAA,MACA,oBAAI,IAAiC;AAAA,IACvC;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,KAAK;AAAA;AAAA,IACL,KAAK;AAAA;AAAA,IACL,UAAU,CAAC,YAAoB;AAAA;AAAA,EACjC;AACF;AAGA,MAAM,mBAAmB;AAAA,EACvB,OACE,SACA,gBACwC;AACxC,UAAM,WAAW,MAAM,WAAW;AAAA,MAChC,cAAc;AAAA,QACZ;AAAA;AAAA;AAAA,MAGF;AAAA,MACA,YAAY;AAAA,IACd,YAAY;AAAA;AAAA,yDAEyC,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAgD1D,OAAO;AAAA;AAAA,MAEZ,QAAQ;AAAA,MACR,qBAAqB;AAAA,IACvB,CAAC;AAED,UAAM,SACJ,OAAO,SAAS,QAAQ,YAAY,WAChC,SAAS,QAAQ,UACjB,MAAM,QAAQ,SAAS,QAAQ,OAAO,IACnC,SAAS,QAAQ,QAAQ,KAAK,OAAK,EAAE,SAAS,MAAM,GAAG,QACxD,SACA;AAER,QAAI,OAAO,WAAW,wBAAwB,GAAG;AAC/C,aAAO;AAAA,IACT;AAEA,QAAI,WAAW,8BAA8B;AAC3C,aAAO,EAAE,0BAA0B,KAAK;AAAA,IAC1C;AAGA,QAAI,WAAW,OAAO;AACpB,aAAO;AAAA,QACL,eAAe;AAAA,QACf,0BAA0B;AAAA,MAC5B;AAAA,IACF;AAEA,QAAI,WAAW,QAAQ;AACrB,aAAO;AAAA,QACL,eAAe;AAAA,QACf,0BAA0B;AAAA,MAC5B;AAAA,IACF;AAEA,WAAO;AAAA,MACL,eAAe;AAAA,MACf,0BAA0B;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,KAAK;AAAA;AAAA,IACL,KAAK;AAAA;AAAA,IACL,UAAU,CAAC,YAAoB;AAAA;AAAA,EACjC;AACF;AAEA,MAAM,0BAA0B,oBAAI,IAAqB;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGD,SAAS,cAAc,SAA0B;AAC/C,aAAW,QAAQ;AAAA,IACjB,QACG,WAAW,KAAK,IAAI,YAAY,EAAE,EAClC,WAAW,KAAK,IAAI,YAAY,EAAE;AAAA;AAAA,IACrC,aAAW,IAAI,OAAO;AAAA;AAAA,EACxB,GAAG;AACD,QAAI,OAAO,SAAS,UAAU;AAE5B;AAAA,IACF;AACA,QAAI,aAAa,MAAM;AAErB,aAAO;AAAA,IACT;AACA,QAAI,QAAQ,MAAM;AAChB,UAAI,KAAK,OAAO,QAAQ;AAEtB;AAAA,MACF,WAAW,wBAAwB,IAAI,KAAK,EAAE,GAAG;AAE/C;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,wBAAwB,SAA0B;AAChE,SAAO,aAAa,OAAO,EAAE,SAAS,KAAK,CAAC,cAAc,OAAO;AACnE;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -617,7 +617,9 @@ const COMMON_UNIX_COMMANDS = [
|
|
|
617
617
|
];
|
|
618
618
|
function getCommonSystemCommands(systemCommands) {
|
|
619
619
|
const systemSet = new Set(systemCommands.map((cmd) => cmd.toLowerCase()));
|
|
620
|
-
const commonIntersection = COMMON_UNIX_COMMANDS.filter(
|
|
620
|
+
const commonIntersection = COMMON_UNIX_COMMANDS.filter(
|
|
621
|
+
(cmd) => systemSet.has(cmd.toLowerCase())
|
|
622
|
+
);
|
|
621
623
|
return Array.from(new Set(commonIntersection));
|
|
622
624
|
}
|
|
623
625
|
function getCommandPriority(command) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/commonUnixCommands.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Common Unix Commands Database\n * \n * A curated list of 500+ most frequently used Unix/Linux commands\n * for developers and system administrators.\n * \n * Categories:\n * - File & Directory Operations\n * - Text Processing\n * - Process Management\n * - Network Tools\n * - Development Tools\n * - System Administration\n * - Package Management\n * - Version Control\n */\n\nexport const COMMON_UNIX_COMMANDS = [\n // File & Directory Operations (50+)\n 'ls', 'cd', 'pwd', 'mkdir', 'rmdir', 'rm', 'cp', 'mv', 'touch', 'cat',\n 'less', 'more', 'head', 'tail', 'file', 'stat', 'ln', 'readlink', 'basename', 'dirname',\n 'find', 'locate', 'which', 'whereis', 'type', 'tree', 'du', 'df', 'mount', 'umount',\n 'chmod', 'chown', 'chgrp', 'umask', 'setfacl', 'getfacl', 'lsattr', 'chattr', 'realpath', 'mktemp',\n 'rsync', 'scp', 'sftp', 'ftp', 'wget', 'curl', 'tar', 'gzip', 'gunzip', 'zip',\n 'unzip', 'bzip2', 'bunzip2', 'xz', 'unxz', '7z', 'rar', 'unrar', 'zcat', 'zless',\n \n // Text Processing (50+)\n 'grep', 'egrep', 'fgrep', 'rg', 'ag', 'ack', 'sed', 'awk', 'cut', 'paste',\n 'sort', 'uniq', 'wc', 'tr', 'col', 'column', 'expand', 'unexpand', 'fold', 'fmt',\n 'pr', 'nl', 'od', 'hexdump', 'xxd', 'strings', 'split', 'csplit', 'join', 'comm',\n 'diff', 'sdiff', 'vimdiff', 'patch', 'diffstat', 'cmp', 'md5sum', 'sha1sum', 'sha256sum', 'sha512sum',\n 'base64', 'uuencode', 'uudecode', 'rev', 'tac', 'shuf', 'jq', 'yq', 'xmllint', 'tidy',\n \n // Process Management (40+)\n 'ps', 'top', 'htop', 'atop', 'iotop', 'iftop', 'nethogs', 'pgrep', 'pkill', 'kill',\n 'killall', 'jobs', 'bg', 'fg', 'nohup', 'disown', 'nice', 'renice', 'ionice', 'taskset',\n 'pstree', 'fuser', 'lsof', 'strace', 'ltrace', 'ptrace', 'gdb', 'valgrind', 'time', 'timeout',\n 'watch', 'screen', 'tmux', 'byobu', 'dtach', 'nmon', 'dstat', 'vmstat', 'iostat', 'mpstat',\n \n // Network Tools (50+)\n 'ping', 'ping6', 'traceroute', 'tracepath', 'mtr', 'netstat', 'ss', 'ip', 'ifconfig', 'route',\n 'arp', 'hostname', 'hostnamectl', 'nslookup', 'dig', 'host', 'whois', 'nc', 'netcat', 'ncat',\n 'socat', 'telnet', 'ssh', 'ssh-keygen', 'ssh-copy-id', 'ssh-add', 'ssh-agent', 'sshd', 'tcpdump', 'wireshark',\n 'tshark', 'nmap', 'masscan', 'zmap', 'iptables', 'ip6tables', 'firewall-cmd', 'ufw', 'fail2ban', 'nginx',\n 'apache2', 'httpd', 'curl', 'wget', 'aria2', 'axel', 'links', 'lynx', 'w3m', 'elinks',\n \n // Development Tools - Languages (60+)\n 'gcc', 'g++', 'clang', 'clang++', 'make', 'cmake', 'autoconf', 'automake', 'libtool', 'pkg-config',\n 'python3', 'pip', 'pip3', 'pipenv', 'poetry', 'virtualenv', 'pyenv',\n 'node', 'npm', 'uv', 'npx', 'yarn', 'pnpm', 'nvm', 'volta', 'deno', 'bun', 'tsx',\n 'ruby', 'gem', 'bundle', 'bundler', 'rake', 'rbenv', 'rvm', 'irb', 'pry', 'rails',\n 'java', 'javac', 'jar', 'javadoc', 'maven', 'mvn', 'gradle', 'ant', 'kotlin', 'kotlinc',\n 'go', 'gofmt', 'golint', 'govet', 'godoc', 'rust', 'rustc', 'cargo', 'rustup', 'rustfmt',\n \n // Development Tools - Utilities (40+)\n 'git', 'svn', 'hg', 'bzr', 'cvs', 'fossil', 'tig', 'gitk', 'git-flow', 'hub',\n 'gh', 'glab', 'docker', 'docker-compose', 'podman', 'kubectl', 'helm', 'minikube', 'kind', 'k3s',\n 'vagrant', 'terraform', 'ansible', 'puppet', 'chef', 'salt', 'packer', 'consul', 'vault', 'nomad',\n 'vim', 'vi', 'nvim', 'emacs', 'nano', 'pico', 'ed', 'code', 'subl', 'atom',\n \n // Database & Data Tools (30+)\n 'mysql', 'mysqldump', 'mysqladmin', 'psql', 'pg_dump', 'pg_restore', 'sqlite3', 'redis-cli', 'mongo', 'mongodump',\n 'mongorestore', 'cqlsh', 'influx', 'clickhouse-client', 'mariadb', 'cockroach', 'etcdctl', 'consul', 'vault', 'nomad',\n 'jq', 'yq', 'xmlstarlet', 'csvkit', 'miller', 'awk', 'sed', 'perl', 'lua', 'tcl',\n \n // System Administration (50+)\n 'sudo', 'su', 'passwd', 'useradd', 'userdel', 'usermod', 'groupadd', 'groupdel', 'groupmod', 'id',\n 'who', 'w', 'last', 'lastlog', 'finger', 'chfn', 'chsh', 'login', 'logout', 'exit',\n 'systemctl', 'service', 'journalctl', 'systemd-analyze', 'init', 'telinit', 'runlevel', 'shutdown', 'reboot', 'halt',\n 'poweroff', 'uptime', 'uname', 'hostname', 'hostnamectl', 'timedatectl', 'localectl', 'loginctl', 'machinectl', 'bootctl',\n 'cron', 'crontab', 'at', 'batch', 'anacron', 'systemd-run', 'systemd-timer', 'logrotate', 'logger', 'dmesg',\n \n // Package Management (30+)\n 'apt', 'apt-get', 'apt-cache', 'dpkg', 'dpkg-reconfigure', 'aptitude', 'snap', 'flatpak', 'appimage', 'alien',\n 'yum', 'dnf', 'rpm', 'zypper', 'pacman', 'yaourt', 'yay', 'makepkg', 'abs', 'aur',\n 'brew', 'port', 'pkg', 'emerge', 'portage', 'nix', 'guix', 'conda', 'mamba', 'micromamba',\n \n // Monitoring & Performance (30+)\n 'top', 'htop', 'atop', 'btop', 'gtop', 'gotop', 'bashtop', 'bpytop', 'glances', 'nmon',\n 'sar', 'iostat', 'mpstat', 'vmstat', 'pidstat', 'free', 'uptime', 'tload', 'slabtop', 'powertop',\n 'iotop', 'iftop', 'nethogs', 'bmon', 'nload', 'speedtest', 'speedtest-cli', 'fast', 'mtr', 'smokeping',\n \n // Security Tools (30+)\n 'gpg', 'gpg2', 'openssl', 'ssh-keygen', 'ssh-keyscan', 'ssl-cert', 'certbot', 'acme.sh', 'mkcert', 'step',\n 'pass', 'keepassxc-cli', 'bitwarden', '1password', 'hashcat', 'john', 'hydra', 'ncrack', 'medusa', 'aircrack-ng',\n 'chkrootkit', 'rkhunter', 'clamav', 'clamscan', 'freshclam', 'aide', 'tripwire', 'samhain', 'ossec', 'wazuh',\n \n // Shell & Scripting (30+)\n 'bash', 'sh', 'zsh', 'fish', 'ksh', 'tcsh', 'csh', 'dash', 'ash', 'elvish',\n 'export', 'alias', 'unalias', 'history', 'fc', 'source', 'eval', 'exec', 'command', 'builtin',\n 'set', 'unset', 'env', 'printenv', 'echo', 'printf', 'read', 'test', 'expr', 'let',\n \n // Archive & Compression (20+)\n 'tar', 'gzip', 'gunzip', 'bzip2', 'bunzip2', 'xz', 'unxz', 'lzma', 'unlzma', 'compress',\n 'uncompress', 'zip', 'unzip', '7z', '7za', 'rar', 'unrar', 'ar', 'cpio', 'pax',\n \n // Media Tools (20+)\n 'ffmpeg', 'ffplay', 'ffprobe', 'sox', 'play', 'rec', 'mpg123', 'mpg321', 'ogg123', 'flac',\n 'lame', 'oggenc', 'opusenc', 'convert', 'mogrify', 'identify', 'display', 'import', 'animate', 'montage',\n \n // Math & Calculation (15+)\n 'bc', 'dc', 'calc', 'qalc', 'units', 'factor', 'primes', 'seq', 'shuf', 'random',\n 'octave', 'maxima', 'sage', 'r', 'julia',\n \n // Documentation & Help (15+)\n 'man', 'info', 'help', 'apropos', 'whatis', 'whereis', 'which', 'type', 'command', 'hash',\n 'tldr', 'cheat', 'howdoi', 'stackoverflow', 'explainshell',\n \n // Miscellaneous Utilities (30+)\n 'date', 'cal', 'ncal', 'timedatectl', 'zdump', 'tzselect', 'hwclock', 'ntpdate', 'chrony', 'timeshift',\n 'yes', 'true', 'false', 'sleep', 'usleep', 'seq', 'jot', 'shuf', 'tee', 'xargs',\n 'parallel', 'rush', 'dsh', 'pssh', 'clusterssh', 'terminator', 'tilix', 'alacritty', 'kitty', 'wezterm',\n] as const\n\n/**\n * Get common commands that exist on the current system\n * @param systemCommands Array of commands available on the system\n * @returns Deduplicated intersection of common commands and system commands\n */\nexport function getCommonSystemCommands(systemCommands: string[]): string[] {\n const systemSet = new Set(systemCommands.map(cmd => cmd.toLowerCase()))\n const commonIntersection = COMMON_UNIX_COMMANDS.filter(cmd => systemSet.has(cmd.toLowerCase()))\n // Remove duplicates using Set\n return Array.from(new Set(commonIntersection))\n}\n\n/**\n * Get a priority score for a command based on its position in the common list\n * Earlier commands get higher priority (more commonly used)\n */\nexport function getCommandPriority(command: string): number {\n const index = COMMON_UNIX_COMMANDS.indexOf(command.toLowerCase() as any)\n if (index === -1) return 0\n \n // Convert index to priority score (earlier = higher score)\n const maxScore = 100\n const score = maxScore - (index / COMMON_UNIX_COMMANDS.length) * maxScore\n return Math.round(score)\n}\n\n/**\n * Get essential fallback commands for when PATH is empty or unavailable\n * These are the most basic commands that should always be available\n */\nexport function getEssentialCommands(): string[] {\n return [\n 'ls', 'cd', 'pwd', 'cat', 'grep', 'find', 'which', 'man', 'cp', 'mv', 'rm', 'mkdir',\n 'touch', 'chmod', 'ps', 'top', 'kill', 'git', 'node', 'npm', 'python3',\n 'curl', 'wget', 'docker', 'vim', 'nano', 'echo', 'export', 'env', 'sudo'\n ]\n}\n\n/**\n * Get minimal fallback commands for error scenarios\n * These are absolute minimum commands for basic functionality\n */\nexport function getMinimalFallbackCommands(): string[] {\n return [\n 'ls', 'cd', 'pwd', 'cat', 'grep', 'find', 'git', 'node', 'npm', 'python3', 'vim', 'nano'\n ]\n}"],
|
|
5
|
-
"mappings": "AAiBO,MAAM,uBAAuB;AAAA;AAAA,EAElC;AAAA,
|
|
4
|
+
"sourcesContent": ["/**\n * Common Unix Commands Database\n *\n * A curated list of 500+ most frequently used Unix/Linux commands\n * for developers and system administrators.\n *\n * Categories:\n * - File & Directory Operations\n * - Text Processing\n * - Process Management\n * - Network Tools\n * - Development Tools\n * - System Administration\n * - Package Management\n * - Version Control\n */\n\nexport const COMMON_UNIX_COMMANDS = [\n // File & Directory Operations (50+)\n 'ls',\n 'cd',\n 'pwd',\n 'mkdir',\n 'rmdir',\n 'rm',\n 'cp',\n 'mv',\n 'touch',\n 'cat',\n 'less',\n 'more',\n 'head',\n 'tail',\n 'file',\n 'stat',\n 'ln',\n 'readlink',\n 'basename',\n 'dirname',\n 'find',\n 'locate',\n 'which',\n 'whereis',\n 'type',\n 'tree',\n 'du',\n 'df',\n 'mount',\n 'umount',\n 'chmod',\n 'chown',\n 'chgrp',\n 'umask',\n 'setfacl',\n 'getfacl',\n 'lsattr',\n 'chattr',\n 'realpath',\n 'mktemp',\n 'rsync',\n 'scp',\n 'sftp',\n 'ftp',\n 'wget',\n 'curl',\n 'tar',\n 'gzip',\n 'gunzip',\n 'zip',\n 'unzip',\n 'bzip2',\n 'bunzip2',\n 'xz',\n 'unxz',\n '7z',\n 'rar',\n 'unrar',\n 'zcat',\n 'zless',\n\n // Text Processing (50+)\n 'grep',\n 'egrep',\n 'fgrep',\n 'rg',\n 'ag',\n 'ack',\n 'sed',\n 'awk',\n 'cut',\n 'paste',\n 'sort',\n 'uniq',\n 'wc',\n 'tr',\n 'col',\n 'column',\n 'expand',\n 'unexpand',\n 'fold',\n 'fmt',\n 'pr',\n 'nl',\n 'od',\n 'hexdump',\n 'xxd',\n 'strings',\n 'split',\n 'csplit',\n 'join',\n 'comm',\n 'diff',\n 'sdiff',\n 'vimdiff',\n 'patch',\n 'diffstat',\n 'cmp',\n 'md5sum',\n 'sha1sum',\n 'sha256sum',\n 'sha512sum',\n 'base64',\n 'uuencode',\n 'uudecode',\n 'rev',\n 'tac',\n 'shuf',\n 'jq',\n 'yq',\n 'xmllint',\n 'tidy',\n\n // Process Management (40+)\n 'ps',\n 'top',\n 'htop',\n 'atop',\n 'iotop',\n 'iftop',\n 'nethogs',\n 'pgrep',\n 'pkill',\n 'kill',\n 'killall',\n 'jobs',\n 'bg',\n 'fg',\n 'nohup',\n 'disown',\n 'nice',\n 'renice',\n 'ionice',\n 'taskset',\n 'pstree',\n 'fuser',\n 'lsof',\n 'strace',\n 'ltrace',\n 'ptrace',\n 'gdb',\n 'valgrind',\n 'time',\n 'timeout',\n 'watch',\n 'screen',\n 'tmux',\n 'byobu',\n 'dtach',\n 'nmon',\n 'dstat',\n 'vmstat',\n 'iostat',\n 'mpstat',\n\n // Network Tools (50+)\n 'ping',\n 'ping6',\n 'traceroute',\n 'tracepath',\n 'mtr',\n 'netstat',\n 'ss',\n 'ip',\n 'ifconfig',\n 'route',\n 'arp',\n 'hostname',\n 'hostnamectl',\n 'nslookup',\n 'dig',\n 'host',\n 'whois',\n 'nc',\n 'netcat',\n 'ncat',\n 'socat',\n 'telnet',\n 'ssh',\n 'ssh-keygen',\n 'ssh-copy-id',\n 'ssh-add',\n 'ssh-agent',\n 'sshd',\n 'tcpdump',\n 'wireshark',\n 'tshark',\n 'nmap',\n 'masscan',\n 'zmap',\n 'iptables',\n 'ip6tables',\n 'firewall-cmd',\n 'ufw',\n 'fail2ban',\n 'nginx',\n 'apache2',\n 'httpd',\n 'curl',\n 'wget',\n 'aria2',\n 'axel',\n 'links',\n 'lynx',\n 'w3m',\n 'elinks',\n\n // Development Tools - Languages (60+)\n 'gcc',\n 'g++',\n 'clang',\n 'clang++',\n 'make',\n 'cmake',\n 'autoconf',\n 'automake',\n 'libtool',\n 'pkg-config',\n 'python3',\n 'pip',\n 'pip3',\n 'pipenv',\n 'poetry',\n 'virtualenv',\n 'pyenv',\n 'node',\n 'npm',\n 'uv',\n 'npx',\n 'yarn',\n 'pnpm',\n 'nvm',\n 'volta',\n 'deno',\n 'bun',\n 'tsx',\n 'ruby',\n 'gem',\n 'bundle',\n 'bundler',\n 'rake',\n 'rbenv',\n 'rvm',\n 'irb',\n 'pry',\n 'rails',\n 'java',\n 'javac',\n 'jar',\n 'javadoc',\n 'maven',\n 'mvn',\n 'gradle',\n 'ant',\n 'kotlin',\n 'kotlinc',\n 'go',\n 'gofmt',\n 'golint',\n 'govet',\n 'godoc',\n 'rust',\n 'rustc',\n 'cargo',\n 'rustup',\n 'rustfmt',\n\n // Development Tools - Utilities (40+)\n 'git',\n 'svn',\n 'hg',\n 'bzr',\n 'cvs',\n 'fossil',\n 'tig',\n 'gitk',\n 'git-flow',\n 'hub',\n 'gh',\n 'glab',\n 'docker',\n 'docker-compose',\n 'podman',\n 'kubectl',\n 'helm',\n 'minikube',\n 'kind',\n 'k3s',\n 'vagrant',\n 'terraform',\n 'ansible',\n 'puppet',\n 'chef',\n 'salt',\n 'packer',\n 'consul',\n 'vault',\n 'nomad',\n 'vim',\n 'vi',\n 'nvim',\n 'emacs',\n 'nano',\n 'pico',\n 'ed',\n 'code',\n 'subl',\n 'atom',\n\n // Database & Data Tools (30+)\n 'mysql',\n 'mysqldump',\n 'mysqladmin',\n 'psql',\n 'pg_dump',\n 'pg_restore',\n 'sqlite3',\n 'redis-cli',\n 'mongo',\n 'mongodump',\n 'mongorestore',\n 'cqlsh',\n 'influx',\n 'clickhouse-client',\n 'mariadb',\n 'cockroach',\n 'etcdctl',\n 'consul',\n 'vault',\n 'nomad',\n 'jq',\n 'yq',\n 'xmlstarlet',\n 'csvkit',\n 'miller',\n 'awk',\n 'sed',\n 'perl',\n 'lua',\n 'tcl',\n\n // System Administration (50+)\n 'sudo',\n 'su',\n 'passwd',\n 'useradd',\n 'userdel',\n 'usermod',\n 'groupadd',\n 'groupdel',\n 'groupmod',\n 'id',\n 'who',\n 'w',\n 'last',\n 'lastlog',\n 'finger',\n 'chfn',\n 'chsh',\n 'login',\n 'logout',\n 'exit',\n 'systemctl',\n 'service',\n 'journalctl',\n 'systemd-analyze',\n 'init',\n 'telinit',\n 'runlevel',\n 'shutdown',\n 'reboot',\n 'halt',\n 'poweroff',\n 'uptime',\n 'uname',\n 'hostname',\n 'hostnamectl',\n 'timedatectl',\n 'localectl',\n 'loginctl',\n 'machinectl',\n 'bootctl',\n 'cron',\n 'crontab',\n 'at',\n 'batch',\n 'anacron',\n 'systemd-run',\n 'systemd-timer',\n 'logrotate',\n 'logger',\n 'dmesg',\n\n // Package Management (30+)\n 'apt',\n 'apt-get',\n 'apt-cache',\n 'dpkg',\n 'dpkg-reconfigure',\n 'aptitude',\n 'snap',\n 'flatpak',\n 'appimage',\n 'alien',\n 'yum',\n 'dnf',\n 'rpm',\n 'zypper',\n 'pacman',\n 'yaourt',\n 'yay',\n 'makepkg',\n 'abs',\n 'aur',\n 'brew',\n 'port',\n 'pkg',\n 'emerge',\n 'portage',\n 'nix',\n 'guix',\n 'conda',\n 'mamba',\n 'micromamba',\n\n // Monitoring & Performance (30+)\n 'top',\n 'htop',\n 'atop',\n 'btop',\n 'gtop',\n 'gotop',\n 'bashtop',\n 'bpytop',\n 'glances',\n 'nmon',\n 'sar',\n 'iostat',\n 'mpstat',\n 'vmstat',\n 'pidstat',\n 'free',\n 'uptime',\n 'tload',\n 'slabtop',\n 'powertop',\n 'iotop',\n 'iftop',\n 'nethogs',\n 'bmon',\n 'nload',\n 'speedtest',\n 'speedtest-cli',\n 'fast',\n 'mtr',\n 'smokeping',\n\n // Security Tools (30+)\n 'gpg',\n 'gpg2',\n 'openssl',\n 'ssh-keygen',\n 'ssh-keyscan',\n 'ssl-cert',\n 'certbot',\n 'acme.sh',\n 'mkcert',\n 'step',\n 'pass',\n 'keepassxc-cli',\n 'bitwarden',\n '1password',\n 'hashcat',\n 'john',\n 'hydra',\n 'ncrack',\n 'medusa',\n 'aircrack-ng',\n 'chkrootkit',\n 'rkhunter',\n 'clamav',\n 'clamscan',\n 'freshclam',\n 'aide',\n 'tripwire',\n 'samhain',\n 'ossec',\n 'wazuh',\n\n // Shell & Scripting (30+)\n 'bash',\n 'sh',\n 'zsh',\n 'fish',\n 'ksh',\n 'tcsh',\n 'csh',\n 'dash',\n 'ash',\n 'elvish',\n 'export',\n 'alias',\n 'unalias',\n 'history',\n 'fc',\n 'source',\n 'eval',\n 'exec',\n 'command',\n 'builtin',\n 'set',\n 'unset',\n 'env',\n 'printenv',\n 'echo',\n 'printf',\n 'read',\n 'test',\n 'expr',\n 'let',\n\n // Archive & Compression (20+)\n 'tar',\n 'gzip',\n 'gunzip',\n 'bzip2',\n 'bunzip2',\n 'xz',\n 'unxz',\n 'lzma',\n 'unlzma',\n 'compress',\n 'uncompress',\n 'zip',\n 'unzip',\n '7z',\n '7za',\n 'rar',\n 'unrar',\n 'ar',\n 'cpio',\n 'pax',\n\n // Media Tools (20+)\n 'ffmpeg',\n 'ffplay',\n 'ffprobe',\n 'sox',\n 'play',\n 'rec',\n 'mpg123',\n 'mpg321',\n 'ogg123',\n 'flac',\n 'lame',\n 'oggenc',\n 'opusenc',\n 'convert',\n 'mogrify',\n 'identify',\n 'display',\n 'import',\n 'animate',\n 'montage',\n\n // Math & Calculation (15+)\n 'bc',\n 'dc',\n 'calc',\n 'qalc',\n 'units',\n 'factor',\n 'primes',\n 'seq',\n 'shuf',\n 'random',\n 'octave',\n 'maxima',\n 'sage',\n 'r',\n 'julia',\n\n // Documentation & Help (15+)\n 'man',\n 'info',\n 'help',\n 'apropos',\n 'whatis',\n 'whereis',\n 'which',\n 'type',\n 'command',\n 'hash',\n 'tldr',\n 'cheat',\n 'howdoi',\n 'stackoverflow',\n 'explainshell',\n\n // Miscellaneous Utilities (30+)\n 'date',\n 'cal',\n 'ncal',\n 'timedatectl',\n 'zdump',\n 'tzselect',\n 'hwclock',\n 'ntpdate',\n 'chrony',\n 'timeshift',\n 'yes',\n 'true',\n 'false',\n 'sleep',\n 'usleep',\n 'seq',\n 'jot',\n 'shuf',\n 'tee',\n 'xargs',\n 'parallel',\n 'rush',\n 'dsh',\n 'pssh',\n 'clusterssh',\n 'terminator',\n 'tilix',\n 'alacritty',\n 'kitty',\n 'wezterm',\n] as const\n\n/**\n * Get common commands that exist on the current system\n * @param systemCommands Array of commands available on the system\n * @returns Deduplicated intersection of common commands and system commands\n */\nexport function getCommonSystemCommands(systemCommands: string[]): string[] {\n const systemSet = new Set(systemCommands.map(cmd => cmd.toLowerCase()))\n const commonIntersection = COMMON_UNIX_COMMANDS.filter(cmd =>\n systemSet.has(cmd.toLowerCase()),\n )\n // Remove duplicates using Set\n return Array.from(new Set(commonIntersection))\n}\n\n/**\n * Get a priority score for a command based on its position in the common list\n * Earlier commands get higher priority (more commonly used)\n */\nexport function getCommandPriority(command: string): number {\n const index = COMMON_UNIX_COMMANDS.indexOf(command.toLowerCase() as any)\n if (index === -1) return 0\n\n // Convert index to priority score (earlier = higher score)\n const maxScore = 100\n const score = maxScore - (index / COMMON_UNIX_COMMANDS.length) * maxScore\n return Math.round(score)\n}\n\n/**\n * Get essential fallback commands for when PATH is empty or unavailable\n * These are the most basic commands that should always be available\n */\nexport function getEssentialCommands(): string[] {\n return [\n 'ls',\n 'cd',\n 'pwd',\n 'cat',\n 'grep',\n 'find',\n 'which',\n 'man',\n 'cp',\n 'mv',\n 'rm',\n 'mkdir',\n 'touch',\n 'chmod',\n 'ps',\n 'top',\n 'kill',\n 'git',\n 'node',\n 'npm',\n 'python3',\n 'curl',\n 'wget',\n 'docker',\n 'vim',\n 'nano',\n 'echo',\n 'export',\n 'env',\n 'sudo',\n ]\n}\n\n/**\n * Get minimal fallback commands for error scenarios\n * These are absolute minimum commands for basic functionality\n */\nexport function getMinimalFallbackCommands(): string[] {\n return [\n 'ls',\n 'cd',\n 'pwd',\n 'cat',\n 'grep',\n 'find',\n 'git',\n 'node',\n 'npm',\n 'python3',\n 'vim',\n 'nano',\n ]\n}\n"],
|
|
5
|
+
"mappings": "AAiBO,MAAM,uBAAuB;AAAA;AAAA,EAElC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAOO,SAAS,wBAAwB,gBAAoC;AAC1E,QAAM,YAAY,IAAI,IAAI,eAAe,IAAI,SAAO,IAAI,YAAY,CAAC,CAAC;AACtE,QAAM,qBAAqB,qBAAqB;AAAA,IAAO,SACrD,UAAU,IAAI,IAAI,YAAY,CAAC;AAAA,EACjC;AAEA,SAAO,MAAM,KAAK,IAAI,IAAI,kBAAkB,CAAC;AAC/C;AAMO,SAAS,mBAAmB,SAAyB;AAC1D,QAAM,QAAQ,qBAAqB,QAAQ,QAAQ,YAAY,CAAQ;AACvE,MAAI,UAAU,GAAI,QAAO;AAGzB,QAAM,WAAW;AACjB,QAAM,QAAQ,WAAY,QAAQ,qBAAqB,SAAU;AACjE,SAAO,KAAK,MAAM,KAAK;AACzB;AAMO,SAAS,uBAAiC;AAC/C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAMO,SAAS,6BAAuC;AACrD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/compressionMode.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Compression Mode Management\n *\n * This module manages the compression mode selection between\n * code development and business consulting compression algorithms.\n */\n\nimport type { CompressionMode } from '@constants/compressionPrompts'\nimport { getGlobalConfig, saveGlobalConfig } from './config'\n\n/**\n * Get the current compression mode\n *\n * Priority order:\n * 1. Global configuration setting\n * 2. Default: 'business' (business consulting mode)\n *\n * @returns The current compression mode\n */\nexport function getCompressionMode(): CompressionMode {\n try {\n const config = getGlobalConfig()\n const mode = config.compressionMode\n\n // Validate the mode value\n if (mode === 'business' || mode === 'code') {\n return mode\n }\n\n // Default to business mode if not set or invalid\n return 'business'\n } catch (error) {\n console.error('Error getting compression mode:', error)\n return 'business'\n }\n}\n\n/**\n * Set the compression mode\n *\n * Saves the compression mode to global configuration for persistence\n * across sessions.\n *\n * @param mode - The compression mode to set ('business' or 'code')\n */\nexport function setCompressionMode(mode: CompressionMode): void {\n try {\n const config = getGlobalConfig()\n const updatedConfig = {\n ...config,\n compressionMode: mode,\n }\n saveGlobalConfig(updatedConfig)\n } catch (error) {\n console.error('Error setting compression mode:', error)\n throw error\n }\n}\n\n/**\n * Get a human-readable description of the compression mode\n *\n * @param mode - The compression mode\n * @returns A description of what the mode is optimized for\n */\nexport function getCompressionModeDescription(mode: CompressionMode): string {\n switch (mode) {\n case 'business':\n return 'Business Consulting (optimized for strategic analysis, research, and recommendations)'\n case 'code':\n return 'Code Development (optimized for technical context, debugging, and coding workflows)'\n default:\n return 'Unknown mode'\n }\n}\n\n/**\n * Check if a given string is a valid compression mode\n *\n * @param value - The value to check\n * @returns True if the value is a valid compression mode\n */\nexport function isValidCompressionMode(value: string): value is CompressionMode {\n return value === 'business' || value === 'code'\n}\n"],
|
|
5
|
-
"mappings": "AAQA,SAAS,iBAAiB,wBAAwB;AAW3C,SAAS,qBAAsC;AACpD,MAAI;AACF,UAAM,SAAS,gBAAgB;AAC/B,UAAM,OAAO,OAAO;AAGpB,QAAI,SAAS,cAAc,SAAS,QAAQ;AAC1C,aAAO;AAAA,IACT;AAGA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,MAAM,mCAAmC,KAAK;AACtD,WAAO;AAAA,EACT;AACF;AAUO,SAAS,mBAAmB,MAA6B;AAC9D,MAAI;AACF,UAAM,SAAS,gBAAgB;AAC/B,UAAM,gBAAgB;AAAA,MACpB,GAAG;AAAA,MACH,iBAAiB;AAAA,IACnB;AACA,qBAAiB,aAAa;AAAA,EAChC,SAAS,OAAO;AACd,YAAQ,MAAM,mCAAmC,KAAK;AACtD,UAAM;AAAA,EACR;AACF;AAQO,SAAS,8BAA8B,MAA+B;AAC3E,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAQO,SAAS,
|
|
4
|
+
"sourcesContent": ["/**\n * Compression Mode Management\n *\n * This module manages the compression mode selection between\n * code development and business consulting compression algorithms.\n */\n\nimport type { CompressionMode } from '@constants/compressionPrompts'\nimport { getGlobalConfig, saveGlobalConfig } from './config'\n\n/**\n * Get the current compression mode\n *\n * Priority order:\n * 1. Global configuration setting\n * 2. Default: 'business' (business consulting mode)\n *\n * @returns The current compression mode\n */\nexport function getCompressionMode(): CompressionMode {\n try {\n const config = getGlobalConfig()\n const mode = config.compressionMode\n\n // Validate the mode value\n if (mode === 'business' || mode === 'code') {\n return mode\n }\n\n // Default to business mode if not set or invalid\n return 'business'\n } catch (error) {\n console.error('Error getting compression mode:', error)\n return 'business'\n }\n}\n\n/**\n * Set the compression mode\n *\n * Saves the compression mode to global configuration for persistence\n * across sessions.\n *\n * @param mode - The compression mode to set ('business' or 'code')\n */\nexport function setCompressionMode(mode: CompressionMode): void {\n try {\n const config = getGlobalConfig()\n const updatedConfig = {\n ...config,\n compressionMode: mode,\n }\n saveGlobalConfig(updatedConfig)\n } catch (error) {\n console.error('Error setting compression mode:', error)\n throw error\n }\n}\n\n/**\n * Get a human-readable description of the compression mode\n *\n * @param mode - The compression mode\n * @returns A description of what the mode is optimized for\n */\nexport function getCompressionModeDescription(mode: CompressionMode): string {\n switch (mode) {\n case 'business':\n return 'Business Consulting (optimized for strategic analysis, research, and recommendations)'\n case 'code':\n return 'Code Development (optimized for technical context, debugging, and coding workflows)'\n default:\n return 'Unknown mode'\n }\n}\n\n/**\n * Check if a given string is a valid compression mode\n *\n * @param value - The value to check\n * @returns True if the value is a valid compression mode\n */\nexport function isValidCompressionMode(\n value: string,\n): value is CompressionMode {\n return value === 'business' || value === 'code'\n}\n"],
|
|
5
|
+
"mappings": "AAQA,SAAS,iBAAiB,wBAAwB;AAW3C,SAAS,qBAAsC;AACpD,MAAI;AACF,UAAM,SAAS,gBAAgB;AAC/B,UAAM,OAAO,OAAO;AAGpB,QAAI,SAAS,cAAc,SAAS,QAAQ;AAC1C,aAAO;AAAA,IACT;AAGA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,MAAM,mCAAmC,KAAK;AACtD,WAAO;AAAA,EACT;AACF;AAUO,SAAS,mBAAmB,MAA6B;AAC9D,MAAI;AACF,UAAM,SAAS,gBAAgB;AAC/B,UAAM,gBAAgB;AAAA,MACpB,GAAG;AAAA,MACH,iBAAiB;AAAA,IACnB;AACA,qBAAiB,aAAa;AAAA,EAChC,SAAS,OAAO;AACd,YAAQ,MAAM,mCAAmC,KAAK;AACtD,UAAM;AAAA,EACR;AACF;AAQO,SAAS,8BAA8B,MAA+B;AAC3E,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAQO,SAAS,uBACd,OAC0B;AAC1B,SAAO,UAAU,cAAc,UAAU;AAC3C;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/utils/config.js
CHANGED
|
@@ -432,12 +432,14 @@ function getOpenAIApiKey() {
|
|
|
432
432
|
}
|
|
433
433
|
function migrateModelProfilesRemoveId(config) {
|
|
434
434
|
if (!config.modelProfiles) return config;
|
|
435
|
+
const legacyConfig = config;
|
|
435
436
|
const idToModelNameMap = /* @__PURE__ */ new Map();
|
|
436
437
|
const migratedProfiles = config.modelProfiles.map((profile) => {
|
|
437
|
-
|
|
438
|
-
|
|
438
|
+
const legacyProfile = profile;
|
|
439
|
+
if (legacyProfile.id && profile.modelName) {
|
|
440
|
+
idToModelNameMap.set(legacyProfile.id, profile.modelName);
|
|
439
441
|
}
|
|
440
|
-
const { id, ...profileWithoutId } =
|
|
442
|
+
const { id, ...profileWithoutId } = legacyProfile;
|
|
441
443
|
return profileWithoutId;
|
|
442
444
|
});
|
|
443
445
|
const migratedPointers = {
|
|
@@ -455,12 +457,14 @@ function migrateModelProfilesRemoveId(config) {
|
|
|
455
457
|
});
|
|
456
458
|
}
|
|
457
459
|
let defaultModelName;
|
|
458
|
-
if (
|
|
459
|
-
defaultModelName = idToModelNameMap.get(
|
|
460
|
-
} else if (
|
|
461
|
-
defaultModelName =
|
|
460
|
+
if (legacyConfig.defaultModelId) {
|
|
461
|
+
defaultModelName = idToModelNameMap.get(legacyConfig.defaultModelId) || legacyConfig.defaultModelId;
|
|
462
|
+
} else if (legacyConfig.defaultModelName) {
|
|
463
|
+
defaultModelName = legacyConfig.defaultModelName;
|
|
462
464
|
}
|
|
463
|
-
const migratedConfig = {
|
|
465
|
+
const migratedConfig = {
|
|
466
|
+
...config
|
|
467
|
+
};
|
|
464
468
|
delete migratedConfig.defaultModelId;
|
|
465
469
|
delete migratedConfig.currentSelectedModelId;
|
|
466
470
|
delete migratedConfig.mainAgentModelId;
|
|
@@ -519,31 +523,43 @@ function validateAndRepairGPT5Profile(profile) {
|
|
|
519
523
|
if (!profile.reasoningEffort || !validReasoningEfforts.includes(profile.reasoningEffort)) {
|
|
520
524
|
repairedProfile.reasoningEffort = "medium";
|
|
521
525
|
wasRepaired = true;
|
|
522
|
-
console.log(
|
|
526
|
+
console.log(
|
|
527
|
+
`\u{1F527} GPT-5 Config: Set reasoning effort to 'medium' for ${profile.modelName}`
|
|
528
|
+
);
|
|
523
529
|
}
|
|
524
530
|
if (profile.contextLength < 128e3) {
|
|
525
531
|
repairedProfile.contextLength = 128e3;
|
|
526
532
|
wasRepaired = true;
|
|
527
|
-
console.log(
|
|
533
|
+
console.log(
|
|
534
|
+
`\u{1F527} GPT-5 Config: Updated context length to 128k for ${profile.modelName}`
|
|
535
|
+
);
|
|
528
536
|
}
|
|
529
537
|
if (profile.maxTokens < 4e3) {
|
|
530
538
|
repairedProfile.maxTokens = 8192;
|
|
531
539
|
wasRepaired = true;
|
|
532
|
-
console.log(
|
|
540
|
+
console.log(
|
|
541
|
+
`\u{1F527} GPT-5 Config: Updated max tokens to 8192 for ${profile.modelName}`
|
|
542
|
+
);
|
|
533
543
|
}
|
|
534
544
|
if (profile.provider !== "openai" && profile.provider !== "custom-openai" && profile.provider !== "azure") {
|
|
535
|
-
console.warn(
|
|
545
|
+
console.warn(
|
|
546
|
+
`\u26A0\uFE0F GPT-5 Config: Unexpected provider '${profile.provider}' for GPT-5 model ${profile.modelName}. Consider using 'openai' or 'custom-openai'.`
|
|
547
|
+
);
|
|
536
548
|
}
|
|
537
549
|
if (profile.modelName.includes("gpt-5") && !profile.baseURL) {
|
|
538
550
|
repairedProfile.baseURL = "https://api.openai.com/v1";
|
|
539
551
|
wasRepaired = true;
|
|
540
|
-
console.log(
|
|
552
|
+
console.log(
|
|
553
|
+
`\u{1F527} GPT-5 Config: Set default base URL for ${profile.modelName}`
|
|
554
|
+
);
|
|
541
555
|
}
|
|
542
556
|
}
|
|
543
557
|
repairedProfile.validationStatus = wasRepaired ? "auto_repaired" : "valid";
|
|
544
558
|
repairedProfile.lastValidation = now;
|
|
545
559
|
if (wasRepaired) {
|
|
546
|
-
console.log(
|
|
560
|
+
console.log(
|
|
561
|
+
`\u2705 GPT-5 Config: Auto-repaired configuration for ${profile.modelName}`
|
|
562
|
+
);
|
|
547
563
|
}
|
|
548
564
|
return repairedProfile;
|
|
549
565
|
}
|