@within-7/minto 0.0.5-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +1097 -0
- package/README.zh-CN.md +1097 -0
- package/cli.js +59 -0
- package/dist/Tool.js +1 -0
- package/dist/Tool.js.map +7 -0
- package/dist/commands/agents.js +2086 -0
- package/dist/commands/agents.js.map +7 -0
- package/dist/commands/approvedTools.js +36 -0
- package/dist/commands/approvedTools.js.map +7 -0
- package/dist/commands/bug.js +21 -0
- package/dist/commands/bug.js.map +7 -0
- package/dist/commands/build.js +74 -0
- package/dist/commands/build.js.map +7 -0
- package/dist/commands/clear.js +37 -0
- package/dist/commands/clear.js.map +7 -0
- package/dist/commands/compact.js +82 -0
- package/dist/commands/compact.js.map +7 -0
- package/dist/commands/compression.js +57 -0
- package/dist/commands/compression.js.map +7 -0
- package/dist/commands/config.js +20 -0
- package/dist/commands/config.js.map +7 -0
- package/dist/commands/cost.js +19 -0
- package/dist/commands/cost.js.map +7 -0
- package/dist/commands/ctx_viz.js +152 -0
- package/dist/commands/ctx_viz.js.map +7 -0
- package/dist/commands/doctor.js +25 -0
- package/dist/commands/doctor.js.map +7 -0
- package/dist/commands/help.js +20 -0
- package/dist/commands/help.js.map +7 -0
- package/dist/commands/init.js +38 -0
- package/dist/commands/init.js.map +7 -0
- package/dist/commands/listen.js +37 -0
- package/dist/commands/listen.js.map +7 -0
- package/dist/commands/login.js +37 -0
- package/dist/commands/login.js.map +7 -0
- package/dist/commands/logout.js +33 -0
- package/dist/commands/logout.js.map +7 -0
- package/dist/commands/mcp-interactive.js +267 -0
- package/dist/commands/mcp-interactive.js.map +7 -0
- package/dist/commands/mcp.js +40 -0
- package/dist/commands/mcp.js.map +7 -0
- package/dist/commands/mcp_refresh.js +40 -0
- package/dist/commands/mcp_refresh.js.map +7 -0
- package/dist/commands/model.js +41 -0
- package/dist/commands/model.js.map +7 -0
- package/dist/commands/modelstatus.js +21 -0
- package/dist/commands/modelstatus.js.map +7 -0
- package/dist/commands/onboarding.js +36 -0
- package/dist/commands/onboarding.js.map +7 -0
- package/dist/commands/plugin/AddMarketplaceForm.js +62 -0
- package/dist/commands/plugin/AddMarketplaceForm.js.map +7 -0
- package/dist/commands/plugin/ConfirmDialog.js +71 -0
- package/dist/commands/plugin/ConfirmDialog.js.map +7 -0
- package/dist/commands/plugin/ErrorView.js +33 -0
- package/dist/commands/plugin/ErrorView.js.map +7 -0
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js +135 -0
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js.map +7 -0
- package/dist/commands/plugin/InstalledPluginsManager.js +99 -0
- package/dist/commands/plugin/InstalledPluginsManager.js.map +7 -0
- package/dist/commands/plugin/LoadingView.js +14 -0
- package/dist/commands/plugin/LoadingView.js.map +7 -0
- package/dist/commands/plugin/MainMenu.js +57 -0
- package/dist/commands/plugin/MainMenu.js.map +7 -0
- package/dist/commands/plugin/MarketplaceManager.js +155 -0
- package/dist/commands/plugin/MarketplaceManager.js.map +7 -0
- package/dist/commands/plugin/MarketplaceSelector.js +119 -0
- package/dist/commands/plugin/MarketplaceSelector.js.map +7 -0
- package/dist/commands/plugin/PlaceholderScreen.js +16 -0
- package/dist/commands/plugin/PlaceholderScreen.js.map +7 -0
- package/dist/commands/plugin/PluginBrowser.js +180 -0
- package/dist/commands/plugin/PluginBrowser.js.map +7 -0
- package/dist/commands/plugin/PluginDetailsInstall.js +152 -0
- package/dist/commands/plugin/PluginDetailsInstall.js.map +7 -0
- package/dist/commands/plugin/PluginDetailsManage.js +200 -0
- package/dist/commands/plugin/PluginDetailsManage.js.map +7 -0
- package/dist/commands/plugin/components.js +16 -0
- package/dist/commands/plugin/components.js.map +7 -0
- package/dist/commands/plugin/example-usage.js +63 -0
- package/dist/commands/plugin/example-usage.js.map +7 -0
- package/dist/commands/plugin/types.js +1 -0
- package/dist/commands/plugin/types.js.map +7 -0
- package/dist/commands/plugin/utils.js +77 -0
- package/dist/commands/plugin/utils.js.map +7 -0
- package/dist/commands/plugin-interactive.js +446 -0
- package/dist/commands/plugin-interactive.js.map +7 -0
- package/dist/commands/plugin.js +523 -0
- package/dist/commands/plugin.js.map +7 -0
- package/dist/commands/pr_comments.js +61 -0
- package/dist/commands/pr_comments.js.map +7 -0
- package/dist/commands/quit.js +16 -0
- package/dist/commands/quit.js.map +7 -0
- package/dist/commands/refreshCommands.js +43 -0
- package/dist/commands/refreshCommands.js.map +7 -0
- package/dist/commands/release-notes.js +30 -0
- package/dist/commands/release-notes.js.map +7 -0
- package/dist/commands/resume.js +35 -0
- package/dist/commands/resume.js.map +7 -0
- package/dist/commands/review.js +51 -0
- package/dist/commands/review.js.map +7 -0
- package/dist/commands/terminalSetup.js +164 -0
- package/dist/commands/terminalSetup.js.map +7 -0
- package/dist/commands.js +104 -0
- package/dist/commands.js.map +7 -0
- package/dist/components/AgentResponseBlock.js +41 -0
- package/dist/components/AgentResponseBlock.js.map +7 -0
- package/dist/components/AgentThinkingBlock.js +40 -0
- package/dist/components/AgentThinkingBlock.js.map +7 -0
- package/dist/components/AsciiLogo.js +19 -0
- package/dist/components/AsciiLogo.js.map +7 -0
- package/dist/components/BackgroundTasksPanel.js +124 -0
- package/dist/components/BackgroundTasksPanel.js.map +7 -0
- package/dist/components/Bug.js +147 -0
- package/dist/components/Bug.js.map +7 -0
- package/dist/components/Config.js +166 -0
- package/dist/components/Config.js.map +7 -0
- package/dist/components/ConsoleOAuthFlow.js +178 -0
- package/dist/components/ConsoleOAuthFlow.js.map +7 -0
- package/dist/components/Cost.js +13 -0
- package/dist/components/Cost.js.map +7 -0
- package/dist/components/CostThresholdDialog.js +38 -0
- package/dist/components/CostThresholdDialog.js.map +7 -0
- package/dist/components/CustomSelect/option-map.js +32 -0
- package/dist/components/CustomSelect/option-map.js.map +7 -0
- package/dist/components/CustomSelect/select-option.js +34 -0
- package/dist/components/CustomSelect/select-option.js.map +7 -0
- package/dist/components/CustomSelect/select.js +64 -0
- package/dist/components/CustomSelect/select.js.map +7 -0
- package/dist/components/CustomSelect/theme.js +1 -0
- package/dist/components/CustomSelect/theme.js.map +7 -0
- package/dist/components/CustomSelect/use-select-state.js +220 -0
- package/dist/components/CustomSelect/use-select-state.js.map +7 -0
- package/dist/components/CustomSelect/use-select.js +21 -0
- package/dist/components/CustomSelect/use-select.js.map +7 -0
- package/dist/components/FallbackToolUseRejectedMessage.js +11 -0
- package/dist/components/FallbackToolUseRejectedMessage.js.map +7 -0
- package/dist/components/FileEditToolUpdatedMessage.js +32 -0
- package/dist/components/FileEditToolUpdatedMessage.js.map +7 -0
- package/dist/components/HeaderBar.js +57 -0
- package/dist/components/HeaderBar.js.map +7 -0
- package/dist/components/Help.js +46 -0
- package/dist/components/Help.js.map +7 -0
- package/dist/components/HighlightedCode.js +30 -0
- package/dist/components/HighlightedCode.js.map +7 -0
- package/dist/components/HistorySearchOverlay.js +48 -0
- package/dist/components/HistorySearchOverlay.js.map +7 -0
- package/dist/components/InteractionRoundBlock.js +56 -0
- package/dist/components/InteractionRoundBlock.js.map +7 -0
- package/dist/components/InvalidConfigDialog.js +83 -0
- package/dist/components/InvalidConfigDialog.js.map +7 -0
- package/dist/components/Link.js +18 -0
- package/dist/components/Link.js.map +7 -0
- package/dist/components/LogSelector.js +50 -0
- package/dist/components/LogSelector.js.map +7 -0
- package/dist/components/Logo.js +96 -0
- package/dist/components/Logo.js.map +7 -0
- package/dist/components/MCPServerApprovalDialog.js +79 -0
- package/dist/components/MCPServerApprovalDialog.js.map +7 -0
- package/dist/components/MCPServerDialogCopy.js +11 -0
- package/dist/components/MCPServerDialogCopy.js.map +7 -0
- package/dist/components/MCPServerMultiselectDialog.js +80 -0
- package/dist/components/MCPServerMultiselectDialog.js.map +7 -0
- package/dist/components/Message.js +146 -0
- package/dist/components/Message.js.map +7 -0
- package/dist/components/MessageResponse.js +9 -0
- package/dist/components/MessageResponse.js.map +7 -0
- package/dist/components/MessageSelector.js +125 -0
- package/dist/components/MessageSelector.js.map +7 -0
- package/dist/components/ModeIndicator.js +38 -0
- package/dist/components/ModeIndicator.js.map +7 -0
- package/dist/components/ModelConfig.js +208 -0
- package/dist/components/ModelConfig.js.map +7 -0
- package/dist/components/ModelListManager.js +140 -0
- package/dist/components/ModelListManager.js.map +7 -0
- package/dist/components/ModelSelector.js +2062 -0
- package/dist/components/ModelSelector.js.map +7 -0
- package/dist/components/ModelStatusDisplay.js +87 -0
- package/dist/components/ModelStatusDisplay.js.map +7 -0
- package/dist/components/Onboarding.js +153 -0
- package/dist/components/Onboarding.js.map +7 -0
- package/dist/components/PressEnterToContinue.js +10 -0
- package/dist/components/PressEnterToContinue.js.map +7 -0
- package/dist/components/ProjectOnboarding.js +99 -0
- package/dist/components/ProjectOnboarding.js.map +7 -0
- package/dist/components/PromptInput.js +755 -0
- package/dist/components/PromptInput.js.map +7 -0
- package/dist/components/QuitSummary.js +81 -0
- package/dist/components/QuitSummary.js.map +7 -0
- package/dist/components/SentryErrorBoundary.js +27 -0
- package/dist/components/SentryErrorBoundary.js.map +7 -0
- package/dist/components/Spinner.js +101 -0
- package/dist/components/Spinner.js.map +7 -0
- package/dist/components/SpinnerSymbol.js +78 -0
- package/dist/components/SpinnerSymbol.js.map +7 -0
- package/dist/components/StreamingBashOutput.js +70 -0
- package/dist/components/StreamingBashOutput.js.map +7 -0
- package/dist/components/StructuredDiff.js +148 -0
- package/dist/components/StructuredDiff.js.map +7 -0
- package/dist/components/SubagentBlock.js +157 -0
- package/dist/components/SubagentBlock.js.map +7 -0
- package/dist/components/SubagentManager.js +65 -0
- package/dist/components/SubagentManager.js.map +7 -0
- package/dist/components/SubagentProgress.js +109 -0
- package/dist/components/SubagentProgress.js.map +7 -0
- package/dist/components/SubagentStatusMarker.js +37 -0
- package/dist/components/SubagentStatusMarker.js.map +7 -0
- package/dist/components/TaskCard.js +170 -0
- package/dist/components/TaskCard.js.map +7 -0
- package/dist/components/TextInput.js +100 -0
- package/dist/components/TextInput.js.map +7 -0
- package/dist/components/TimelineRenderer.js +31 -0
- package/dist/components/TimelineRenderer.js.map +7 -0
- package/dist/components/TodoChangeBlock.js +29 -0
- package/dist/components/TodoChangeBlock.js.map +7 -0
- package/dist/components/TodoChangeLine.js +22 -0
- package/dist/components/TodoChangeLine.js.map +7 -0
- package/dist/components/TodoItem.js +35 -0
- package/dist/components/TodoItem.js.map +7 -0
- package/dist/components/TodoPanel.js +55 -0
- package/dist/components/TodoPanel.js.map +7 -0
- package/dist/components/TokenWarning.js +19 -0
- package/dist/components/TokenWarning.js.map +7 -0
- package/dist/components/ToolExecutionBlock.js +18 -0
- package/dist/components/ToolExecutionBlock.js.map +7 -0
- package/dist/components/ToolUseLoader.js +24 -0
- package/dist/components/ToolUseLoader.js.map +7 -0
- package/dist/components/TrustDialog.js +71 -0
- package/dist/components/TrustDialog.js.map +7 -0
- package/dist/components/UserQueryBlock.js +12 -0
- package/dist/components/UserQueryBlock.js.map +7 -0
- package/dist/components/binary-feedback/BinaryFeedback.js +50 -0
- package/dist/components/binary-feedback/BinaryFeedback.js.map +7 -0
- package/dist/components/binary-feedback/BinaryFeedbackOption.js +94 -0
- package/dist/components/binary-feedback/BinaryFeedbackOption.js.map +7 -0
- package/dist/components/binary-feedback/BinaryFeedbackView.js +139 -0
- package/dist/components/binary-feedback/BinaryFeedbackView.js.map +7 -0
- package/dist/components/binary-feedback/utils.js +108 -0
- package/dist/components/binary-feedback/utils.js.map +7 -0
- package/dist/components/messages/AssistantBashOutputMessage.js +23 -0
- package/dist/components/messages/AssistantBashOutputMessage.js.map +7 -0
- package/dist/components/messages/AssistantLocalCommandOutputMessage.js +36 -0
- package/dist/components/messages/AssistantLocalCommandOutputMessage.js.map +7 -0
- package/dist/components/messages/AssistantRedactedThinkingMessage.js +12 -0
- package/dist/components/messages/AssistantRedactedThinkingMessage.js.map +7 -0
- package/dist/components/messages/AssistantTextMessage.js +78 -0
- package/dist/components/messages/AssistantTextMessage.js.map +7 -0
- package/dist/components/messages/AssistantThinkingMessage.js +27 -0
- package/dist/components/messages/AssistantThinkingMessage.js.map +7 -0
- package/dist/components/messages/AssistantToolUseMessage.js +91 -0
- package/dist/components/messages/AssistantToolUseMessage.js.map +7 -0
- package/dist/components/messages/TaskProgressMessage.js +11 -0
- package/dist/components/messages/TaskProgressMessage.js.map +7 -0
- package/dist/components/messages/TaskToolMessage.js +39 -0
- package/dist/components/messages/TaskToolMessage.js.map +7 -0
- package/dist/components/messages/UserBashInputMessage.js +18 -0
- package/dist/components/messages/UserBashInputMessage.js.map +7 -0
- package/dist/components/messages/UserCommandMessage.js +20 -0
- package/dist/components/messages/UserCommandMessage.js.map +7 -0
- package/dist/components/messages/UserKodingInputMessage.js +18 -0
- package/dist/components/messages/UserKodingInputMessage.js.map +7 -0
- package/dist/components/messages/UserPromptMessage.js +20 -0
- package/dist/components/messages/UserPromptMessage.js.map +7 -0
- package/dist/components/messages/UserTextMessage.js +25 -0
- package/dist/components/messages/UserTextMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +10 -0
- package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js +15 -0
- package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +25 -0
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +47 -0
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +23 -0
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/utils.js +50 -0
- package/dist/components/messages/UserToolResultMessage/utils.js.map +7 -0
- package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js +112 -0
- package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js.map +7 -0
- package/dist/components/permissions/FallbackPermissionRequest.js +131 -0
- package/dist/components/permissions/FallbackPermissionRequest.js.map +7 -0
- package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +159 -0
- package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js.map +7 -0
- package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +58 -0
- package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js.map +7 -0
- package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +153 -0
- package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js.map +7 -0
- package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +70 -0
- package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js.map +7 -0
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +212 -0
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +7 -0
- package/dist/components/permissions/PermissionRequest.js +70 -0
- package/dist/components/permissions/PermissionRequest.js.map +7 -0
- package/dist/components/permissions/PermissionRequestTitle.js +52 -0
- package/dist/components/permissions/PermissionRequestTitle.js.map +7 -0
- package/dist/components/permissions/hooks.js +23 -0
- package/dist/components/permissions/hooks.js.map +7 -0
- package/dist/components/permissions/toolUseOptions.js +46 -0
- package/dist/components/permissions/toolUseOptions.js.map +7 -0
- package/dist/components/permissions/utils.js +21 -0
- package/dist/components/permissions/utils.js.map +7 -0
- package/dist/constants/claude-asterisk-ascii-art.js +242 -0
- package/dist/constants/claude-asterisk-ascii-art.js.map +7 -0
- package/dist/constants/colors.js +126 -0
- package/dist/constants/colors.js.map +7 -0
- package/dist/constants/compressionPrompts.js +73 -0
- package/dist/constants/compressionPrompts.js.map +7 -0
- package/dist/constants/figures.js +6 -0
- package/dist/constants/figures.js.map +7 -0
- package/dist/constants/macros.js +11 -0
- package/dist/constants/macros.js.map +7 -0
- package/dist/constants/modelCapabilities.js +154 -0
- package/dist/constants/modelCapabilities.js.map +7 -0
- package/dist/constants/models.js +1034 -0
- package/dist/constants/models.js.map +7 -0
- package/dist/constants/oauth.js +18 -0
- package/dist/constants/oauth.js.map +7 -0
- package/dist/constants/product.js +26 -0
- package/dist/constants/product.js.map +7 -0
- package/dist/constants/prompts.js +168 -0
- package/dist/constants/prompts.js.map +7 -0
- package/dist/constants/releaseNotes.js +9 -0
- package/dist/constants/releaseNotes.js.map +7 -0
- package/dist/constants/symbols.js +50 -0
- package/dist/constants/symbols.js.map +7 -0
- package/dist/context/PermissionContext.js +111 -0
- package/dist/context/PermissionContext.js.map +7 -0
- package/dist/context.js +278 -0
- package/dist/context.js.map +7 -0
- package/dist/cost-tracker.js +76 -0
- package/dist/cost-tracker.js.map +7 -0
- package/dist/entrypoints/cli-wrapper.js +61 -0
- package/dist/entrypoints/cli-wrapper.js.map +7 -0
- package/dist/entrypoints/cli.js +1115 -0
- package/dist/entrypoints/cli.js.map +7 -0
- package/dist/entrypoints/mcp.js +150 -0
- package/dist/entrypoints/mcp.js.map +7 -0
- package/dist/history.js +25 -0
- package/dist/history.js.map +7 -0
- package/dist/hooks/useApiKeyVerification.js +12 -0
- package/dist/hooks/useApiKeyVerification.js.map +7 -0
- package/dist/hooks/useArrowKeyHistory.js +50 -0
- package/dist/hooks/useArrowKeyHistory.js.map +7 -0
- package/dist/hooks/useCanUseTool.js +87 -0
- package/dist/hooks/useCanUseTool.js.map +7 -0
- package/dist/hooks/useCancelRequest.js +28 -0
- package/dist/hooks/useCancelRequest.js.map +7 -0
- package/dist/hooks/useDoublePress.js +31 -0
- package/dist/hooks/useDoublePress.js.map +7 -0
- package/dist/hooks/useExitOnCtrlCD.js +26 -0
- package/dist/hooks/useExitOnCtrlCD.js.map +7 -0
- package/dist/hooks/useHistorySearch.js +62 -0
- package/dist/hooks/useHistorySearch.js.map +7 -0
- package/dist/hooks/useInterval.js +18 -0
- package/dist/hooks/useInterval.js.map +7 -0
- package/dist/hooks/useLogMessages.js +14 -0
- package/dist/hooks/useLogMessages.js.map +7 -0
- package/dist/hooks/useLogStartupTime.js +10 -0
- package/dist/hooks/useLogStartupTime.js.map +7 -0
- package/dist/hooks/useNotifyAfterTimeout.js +42 -0
- package/dist/hooks/useNotifyAfterTimeout.js.map +7 -0
- package/dist/hooks/usePermissionRequestLogging.js +23 -0
- package/dist/hooks/usePermissionRequestLogging.js.map +7 -0
- package/dist/hooks/useTerminalSize.js +38 -0
- package/dist/hooks/useTerminalSize.js.map +7 -0
- package/dist/hooks/useTextInput.js +252 -0
- package/dist/hooks/useTextInput.js.map +7 -0
- package/dist/hooks/useUnifiedCompletion.js +929 -0
- package/dist/hooks/useUnifiedCompletion.js.map +7 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +7 -0
- package/dist/messages.js +33 -0
- package/dist/messages.js.map +7 -0
- package/dist/package.json +4 -0
- package/dist/permissions.js +194 -0
- package/dist/permissions.js.map +7 -0
- package/dist/query.js +499 -0
- package/dist/query.js.map +7 -0
- package/dist/screens/Doctor.js +22 -0
- package/dist/screens/Doctor.js.map +7 -0
- package/dist/screens/LogList.js +55 -0
- package/dist/screens/LogList.js.map +7 -0
- package/dist/screens/REPL.js +671 -0
- package/dist/screens/REPL.js.map +7 -0
- package/dist/screens/ResumeConversation.js +56 -0
- package/dist/screens/ResumeConversation.js.map +7 -0
- package/dist/services/adapters/base.js +29 -0
- package/dist/services/adapters/base.js.map +7 -0
- package/dist/services/adapters/chatCompletions.js +69 -0
- package/dist/services/adapters/chatCompletions.js.map +7 -0
- package/dist/services/adapters/responsesAPI.js +126 -0
- package/dist/services/adapters/responsesAPI.js.map +7 -0
- package/dist/services/claude.js +1573 -0
- package/dist/services/claude.js.map +7 -0
- package/dist/services/compressionService.js +210 -0
- package/dist/services/compressionService.js.map +7 -0
- package/dist/services/customCommands.js +437 -0
- package/dist/services/customCommands.js.map +7 -0
- package/dist/services/fileFreshness.js +275 -0
- package/dist/services/fileFreshness.js.map +7 -0
- package/dist/services/gpt5ConnectionTest.js +248 -0
- package/dist/services/gpt5ConnectionTest.js.map +7 -0
- package/dist/services/hookExecutor.js +276 -0
- package/dist/services/hookExecutor.js.map +7 -0
- package/dist/services/mainAgentCompressor.js +84 -0
- package/dist/services/mainAgentCompressor.js.map +7 -0
- package/dist/services/mcpClient.js +449 -0
- package/dist/services/mcpClient.js.map +7 -0
- package/dist/services/mcpServerApproval.js +55 -0
- package/dist/services/mcpServerApproval.js.map +7 -0
- package/dist/services/mentionProcessor.js +201 -0
- package/dist/services/mentionProcessor.js.map +7 -0
- package/dist/services/modelAdapterFactory.js +47 -0
- package/dist/services/modelAdapterFactory.js.map +7 -0
- package/dist/services/notifier.js +35 -0
- package/dist/services/notifier.js.map +7 -0
- package/dist/services/oauth.js +247 -0
- package/dist/services/oauth.js.map +7 -0
- package/dist/services/openai.js +995 -0
- package/dist/services/openai.js.map +7 -0
- package/dist/services/responseStateManager.js +68 -0
- package/dist/services/responseStateManager.js.map +7 -0
- package/dist/services/sentry.js +9 -0
- package/dist/services/sentry.js.map +7 -0
- package/dist/services/subagentAbortManager.js +95 -0
- package/dist/services/subagentAbortManager.js.map +7 -0
- package/dist/services/subagentCompressor.js +146 -0
- package/dist/services/subagentCompressor.js.map +7 -0
- package/dist/services/systemReminder.js +335 -0
- package/dist/services/systemReminder.js.map +7 -0
- package/dist/services/vcr.js +133 -0
- package/dist/services/vcr.js.map +7 -0
- package/dist/tools/ArchitectTool/ArchitectTool.js +119 -0
- package/dist/tools/ArchitectTool/ArchitectTool.js.map +7 -0
- package/dist/tools/ArchitectTool/prompt.js +18 -0
- package/dist/tools/ArchitectTool/prompt.js.map +7 -0
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +423 -0
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +7 -0
- package/dist/tools/BashOutputTool/BashOutputTool.js +120 -0
- package/dist/tools/BashOutputTool/BashOutputTool.js.map +7 -0
- package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js +11 -0
- package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js.map +7 -0
- package/dist/tools/BashOutputTool/prompt.js +13 -0
- package/dist/tools/BashOutputTool/prompt.js.map +7 -0
- package/dist/tools/BashTool/BashTool.js +209 -0
- package/dist/tools/BashTool/BashTool.js.map +7 -0
- package/dist/tools/BashTool/BashToolResultMessage.js +21 -0
- package/dist/tools/BashTool/BashToolResultMessage.js.map +7 -0
- package/dist/tools/BashTool/OutputLine.js +30 -0
- package/dist/tools/BashTool/OutputLine.js.map +7 -0
- package/dist/tools/BashTool/prompt.js +180 -0
- package/dist/tools/BashTool/prompt.js.map +7 -0
- package/dist/tools/BashTool/utils.js +51 -0
- package/dist/tools/BashTool/utils.js.map +7 -0
- package/dist/tools/FileEditTool/FileEditTool.js +226 -0
- package/dist/tools/FileEditTool/FileEditTool.js.map +7 -0
- package/dist/tools/FileEditTool/prompt.js +54 -0
- package/dist/tools/FileEditTool/prompt.js.map +7 -0
- package/dist/tools/FileEditTool/utils.js +42 -0
- package/dist/tools/FileEditTool/utils.js.map +7 -0
- package/dist/tools/FileReadTool/FileReadTool.js +272 -0
- package/dist/tools/FileReadTool/FileReadTool.js.map +7 -0
- package/dist/tools/FileReadTool/prompt.js +10 -0
- package/dist/tools/FileReadTool/prompt.js.map +7 -0
- package/dist/tools/FileWriteTool/FileWriteTool.js +202 -0
- package/dist/tools/FileWriteTool/FileWriteTool.js.map +7 -0
- package/dist/tools/FileWriteTool/prompt.js +14 -0
- package/dist/tools/FileWriteTool/prompt.js.map +7 -0
- package/dist/tools/GlobTool/GlobTool.js +88 -0
- package/dist/tools/GlobTool/GlobTool.js.map +7 -0
- package/dist/tools/GlobTool/prompt.js +12 -0
- package/dist/tools/GlobTool/prompt.js.map +7 -0
- package/dist/tools/GrepTool/GrepTool.js +107 -0
- package/dist/tools/GrepTool/GrepTool.js.map +7 -0
- package/dist/tools/GrepTool/prompt.js +15 -0
- package/dist/tools/GrepTool/prompt.js.map +7 -0
- package/dist/tools/KillShellTool/KillShellTool.js +92 -0
- package/dist/tools/KillShellTool/KillShellTool.js.map +7 -0
- package/dist/tools/KillShellTool/KillShellToolResultMessage.js +11 -0
- package/dist/tools/KillShellTool/KillShellToolResultMessage.js.map +7 -0
- package/dist/tools/KillShellTool/prompt.js +12 -0
- package/dist/tools/KillShellTool/prompt.js.map +7 -0
- package/dist/tools/MCPTool/MCPTool.js +90 -0
- package/dist/tools/MCPTool/MCPTool.js.map +7 -0
- package/dist/tools/MCPTool/prompt.js +7 -0
- package/dist/tools/MCPTool/prompt.js.map +7 -0
- package/dist/tools/MemoryReadTool/MemoryReadTool.js +103 -0
- package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +7 -0
- package/dist/tools/MemoryReadTool/prompt.js +7 -0
- package/dist/tools/MemoryReadTool/prompt.js.map +7 -0
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +77 -0
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +7 -0
- package/dist/tools/MemoryWriteTool/prompt.js +7 -0
- package/dist/tools/MemoryWriteTool/prompt.js.map +7 -0
- package/dist/tools/MultiEditTool/MultiEditTool.js +301 -0
- package/dist/tools/MultiEditTool/MultiEditTool.js.map +7 -0
- package/dist/tools/MultiEditTool/prompt.js +48 -0
- package/dist/tools/MultiEditTool/prompt.js.map +7 -0
- package/dist/tools/NotebookEditTool/NotebookEditTool.js +238 -0
- package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +7 -0
- package/dist/tools/NotebookEditTool/prompt.js +7 -0
- package/dist/tools/NotebookEditTool/prompt.js.map +7 -0
- package/dist/tools/NotebookReadTool/NotebookReadTool.js +212 -0
- package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +7 -0
- package/dist/tools/NotebookReadTool/prompt.js +7 -0
- package/dist/tools/NotebookReadTool/prompt.js.map +7 -0
- package/dist/tools/SkillTool/SkillTool.js +209 -0
- package/dist/tools/SkillTool/SkillTool.js.map +7 -0
- package/dist/tools/SkillTool/prompt.js +81 -0
- package/dist/tools/SkillTool/prompt.js.map +7 -0
- package/dist/tools/TaskTool/TaskTool.js +381 -0
- package/dist/tools/TaskTool/TaskTool.js.map +7 -0
- package/dist/tools/TaskTool/constants.js +5 -0
- package/dist/tools/TaskTool/constants.js.map +7 -0
- package/dist/tools/TaskTool/prompt.js +111 -0
- package/dist/tools/TaskTool/prompt.js.map +7 -0
- package/dist/tools/ThinkTool/ThinkTool.js +40 -0
- package/dist/tools/ThinkTool/ThinkTool.js.map +7 -0
- package/dist/tools/ThinkTool/prompt.js +16 -0
- package/dist/tools/ThinkTool/prompt.js.map +7 -0
- package/dist/tools/TodoWriteTool/TodoWriteTool.js +243 -0
- package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +7 -0
- package/dist/tools/TodoWriteTool/prompt.js +66 -0
- package/dist/tools/TodoWriteTool/prompt.js.map +7 -0
- package/dist/tools/URLFetcherTool/URLFetcherTool.js +137 -0
- package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +7 -0
- package/dist/tools/URLFetcherTool/cache.js +45 -0
- package/dist/tools/URLFetcherTool/cache.js.map +7 -0
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js +42 -0
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js.map +7 -0
- package/dist/tools/URLFetcherTool/prompt.js +22 -0
- package/dist/tools/URLFetcherTool/prompt.js.map +7 -0
- package/dist/tools/WebSearchTool/WebSearchTool.js +86 -0
- package/dist/tools/WebSearchTool/WebSearchTool.js.map +7 -0
- package/dist/tools/WebSearchTool/prompt.js +17 -0
- package/dist/tools/WebSearchTool/prompt.js.map +7 -0
- package/dist/tools/WebSearchTool/searchProviders.js +48 -0
- package/dist/tools/WebSearchTool/searchProviders.js.map +7 -0
- package/dist/tools/lsTool/lsTool.js +201 -0
- package/dist/tools/lsTool/lsTool.js.map +7 -0
- package/dist/tools/lsTool/prompt.js +5 -0
- package/dist/tools/lsTool/prompt.js.map +7 -0
- package/dist/tools.js +70 -0
- package/dist/tools.js.map +7 -0
- package/dist/types/PermissionMode.js +82 -0
- package/dist/types/PermissionMode.js.map +7 -0
- package/dist/types/RequestContext.js +47 -0
- package/dist/types/RequestContext.js.map +7 -0
- package/dist/types/common.d.js +1 -0
- package/dist/types/common.d.js.map +7 -0
- package/dist/types/conversation.js +1 -0
- package/dist/types/conversation.js.map +7 -0
- package/dist/types/hooks.js +38 -0
- package/dist/types/hooks.js.map +7 -0
- package/dist/types/interactionRound.js +1 -0
- package/dist/types/interactionRound.js.map +7 -0
- package/dist/types/logs.js +1 -0
- package/dist/types/logs.js.map +7 -0
- package/dist/types/marketplace.js +101 -0
- package/dist/types/marketplace.js.map +7 -0
- package/dist/types/modelCapabilities.js +1 -0
- package/dist/types/modelCapabilities.js.map +7 -0
- package/dist/types/notebook.js +1 -0
- package/dist/types/notebook.js.map +7 -0
- package/dist/types/plugin.js +83 -0
- package/dist/types/plugin.js.map +7 -0
- package/dist/types/subagent.js +1 -0
- package/dist/types/subagent.js.map +7 -0
- package/dist/utils/BackgroundShellManager.js +215 -0
- package/dist/utils/BackgroundShellManager.js.map +7 -0
- package/dist/utils/Cursor.js +315 -0
- package/dist/utils/Cursor.js.map +7 -0
- package/dist/utils/PersistentShell.js +371 -0
- package/dist/utils/PersistentShell.js.map +7 -0
- package/dist/utils/advancedFuzzyMatcher.js +206 -0
- package/dist/utils/advancedFuzzyMatcher.js.map +7 -0
- package/dist/utils/agentLoader.js +244 -0
- package/dist/utils/agentLoader.js.map +7 -0
- package/dist/utils/agentStorage.js +59 -0
- package/dist/utils/agentStorage.js.map +7 -0
- package/dist/utils/array.js +7 -0
- package/dist/utils/array.js.map +7 -0
- package/dist/utils/ask.js +77 -0
- package/dist/utils/ask.js.map +7 -0
- package/dist/utils/auth.js +11 -0
- package/dist/utils/auth.js.map +7 -0
- package/dist/utils/autoCompactCore.js +126 -0
- package/dist/utils/autoCompactCore.js.map +7 -0
- package/dist/utils/autoUpdater.js +107 -0
- package/dist/utils/autoUpdater.js.map +7 -0
- package/dist/utils/browser.js +15 -0
- package/dist/utils/browser.js.map +7 -0
- package/dist/utils/cleanup.js +54 -0
- package/dist/utils/cleanup.js.map +7 -0
- package/dist/utils/commands.js +207 -0
- package/dist/utils/commands.js.map +7 -0
- package/dist/utils/commonUnixCommands.js +687 -0
- package/dist/utils/commonUnixCommands.js.map +7 -0
- package/dist/utils/compressionMode.js +47 -0
- package/dist/utils/compressionMode.js.map +7 -0
- package/dist/utils/config.js +651 -0
- package/dist/utils/config.js.map +7 -0
- package/dist/utils/conversationRecovery.js +35 -0
- package/dist/utils/conversationRecovery.js.map +7 -0
- package/dist/utils/debugLogger.js +889 -0
- package/dist/utils/debugLogger.js.map +7 -0
- package/dist/utils/diff.js +32 -0
- package/dist/utils/diff.js.map +7 -0
- package/dist/utils/env.js +44 -0
- package/dist/utils/env.js.map +7 -0
- package/dist/utils/errors.js +23 -0
- package/dist/utils/errors.js.map +7 -0
- package/dist/utils/execFileNoThrow.js +44 -0
- package/dist/utils/execFileNoThrow.js.map +7 -0
- package/dist/utils/expertChatStorage.js +78 -0
- package/dist/utils/expertChatStorage.js.map +7 -0
- package/dist/utils/file.js +282 -0
- package/dist/utils/file.js.map +7 -0
- package/dist/utils/fileRecoveryCore.js +41 -0
- package/dist/utils/fileRecoveryCore.js.map +7 -0
- package/dist/utils/format.js +41 -0
- package/dist/utils/format.js.map +7 -0
- package/dist/utils/fuzzyMatcher.js +252 -0
- package/dist/utils/fuzzyMatcher.js.map +7 -0
- package/dist/utils/generators.js +46 -0
- package/dist/utils/generators.js.map +7 -0
- package/dist/utils/git.js +83 -0
- package/dist/utils/git.js.map +7 -0
- package/dist/utils/hookManager.js +238 -0
- package/dist/utils/hookManager.js.map +7 -0
- package/dist/utils/http.js +7 -0
- package/dist/utils/http.js.map +7 -0
- package/dist/utils/imagePaste.js +29 -0
- package/dist/utils/imagePaste.js.map +7 -0
- package/dist/utils/json.js +16 -0
- package/dist/utils/json.js.map +7 -0
- package/dist/utils/log.js +329 -0
- package/dist/utils/log.js.map +7 -0
- package/dist/utils/markdown.js +187 -0
- package/dist/utils/markdown.js.map +7 -0
- package/dist/utils/marketplaceManager.js +474 -0
- package/dist/utils/marketplaceManager.js.map +7 -0
- package/dist/utils/messageContextManager.js +195 -0
- package/dist/utils/messageContextManager.js.map +7 -0
- package/dist/utils/messages.js +650 -0
- package/dist/utils/messages.js.map +7 -0
- package/dist/utils/model.js +677 -0
- package/dist/utils/model.js.map +7 -0
- package/dist/utils/permissions/filesystem.js +80 -0
- package/dist/utils/permissions/filesystem.js.map +7 -0
- package/dist/utils/pluginInstaller.js +491 -0
- package/dist/utils/pluginInstaller.js.map +7 -0
- package/dist/utils/pluginLoader.js +582 -0
- package/dist/utils/pluginLoader.js.map +7 -0
- package/dist/utils/pluginRegistry.js +111 -0
- package/dist/utils/pluginRegistry.js.map +7 -0
- package/dist/utils/pluginValidator.js +774 -0
- package/dist/utils/pluginValidator.js.map +7 -0
- package/dist/utils/ptyCompat.js +125 -0
- package/dist/utils/ptyCompat.js.map +7 -0
- package/dist/utils/replStateMachine.js +145 -0
- package/dist/utils/replStateMachine.js.map +7 -0
- package/dist/utils/ripgrep.js +131 -0
- package/dist/utils/ripgrep.js.map +7 -0
- package/dist/utils/roundConverter.js +262 -0
- package/dist/utils/roundConverter.js.map +7 -0
- package/dist/utils/secureFile.js +483 -0
- package/dist/utils/secureFile.js.map +7 -0
- package/dist/utils/sessionState.js +22 -0
- package/dist/utils/sessionState.js.map +7 -0
- package/dist/utils/skillLoader.js +79 -0
- package/dist/utils/skillLoader.js.map +7 -0
- package/dist/utils/state.js +24 -0
- package/dist/utils/state.js.map +7 -0
- package/dist/utils/style.js +31 -0
- package/dist/utils/style.js.map +7 -0
- package/dist/utils/terminal.js +47 -0
- package/dist/utils/terminal.js.map +7 -0
- package/dist/utils/theme.js +102 -0
- package/dist/utils/theme.js.map +7 -0
- package/dist/utils/thinking.js +59 -0
- package/dist/utils/thinking.js.map +7 -0
- package/dist/utils/todoChangeCalculator.js +64 -0
- package/dist/utils/todoChangeCalculator.js.map +7 -0
- package/dist/utils/todoStorage.js +291 -0
- package/dist/utils/todoStorage.js.map +7 -0
- package/dist/utils/tokens.js +30 -0
- package/dist/utils/tokens.js.map +7 -0
- package/dist/utils/toolExecutionController.js +109 -0
- package/dist/utils/toolExecutionController.js.map +7 -0
- package/dist/utils/unaryLogging.js +6 -0
- package/dist/utils/unaryLogging.js.map +7 -0
- package/dist/utils/user.js +40 -0
- package/dist/utils/user.js.map +7 -0
- package/dist/utils/validate.js +132 -0
- package/dist/utils/validate.js.map +7 -0
- package/dist/version.js +7 -0
- package/dist/version.js.map +7 -0
- package/dist/yoga.wasm +0 -0
- package/package.json +113 -0
- package/scripts/postinstall.js +18 -0
- package/yoga.wasm +0 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { setSessionState, getSessionState } from "./sessionState.js";
|
|
2
|
+
import { readAgentData, writeAgentData, resolveAgentId } from "./agentStorage.js";
|
|
3
|
+
const TODO_STORAGE_KEY = "todos";
|
|
4
|
+
const TODO_CONFIG_KEY = "todoConfig";
|
|
5
|
+
const TODO_CACHE_KEY = "todoCache";
|
|
6
|
+
const DEFAULT_CONFIG = {
|
|
7
|
+
maxTodos: 100,
|
|
8
|
+
autoArchiveCompleted: false,
|
|
9
|
+
sortBy: "status",
|
|
10
|
+
// Using smart sorting now
|
|
11
|
+
sortOrder: "desc"
|
|
12
|
+
};
|
|
13
|
+
let todoCache = null;
|
|
14
|
+
let cacheTimestamp = 0;
|
|
15
|
+
const CACHE_TTL = 5e3;
|
|
16
|
+
function invalidateCache() {
|
|
17
|
+
todoCache = null;
|
|
18
|
+
cacheTimestamp = 0;
|
|
19
|
+
}
|
|
20
|
+
function updateMetrics(operation, cacheHit = false) {
|
|
21
|
+
const sessionState = getSessionState();
|
|
22
|
+
const metrics = sessionState.todoMetrics || {
|
|
23
|
+
totalOperations: 0,
|
|
24
|
+
cacheHits: 0,
|
|
25
|
+
cacheMisses: 0,
|
|
26
|
+
lastOperation: 0
|
|
27
|
+
};
|
|
28
|
+
metrics.totalOperations++;
|
|
29
|
+
metrics.lastOperation = Date.now();
|
|
30
|
+
if (cacheHit) {
|
|
31
|
+
metrics.cacheHits++;
|
|
32
|
+
} else {
|
|
33
|
+
metrics.cacheMisses++;
|
|
34
|
+
}
|
|
35
|
+
setSessionState({
|
|
36
|
+
...sessionState,
|
|
37
|
+
todoMetrics: metrics
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function getTodoMetrics() {
|
|
41
|
+
const sessionState = getSessionState();
|
|
42
|
+
return sessionState.todoMetrics || {
|
|
43
|
+
totalOperations: 0,
|
|
44
|
+
cacheHits: 0,
|
|
45
|
+
cacheMisses: 0,
|
|
46
|
+
lastOperation: 0
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function getTodos(agentId) {
|
|
50
|
+
const resolvedAgentId = resolveAgentId(agentId);
|
|
51
|
+
const now = Date.now();
|
|
52
|
+
if (agentId) {
|
|
53
|
+
updateMetrics("getTodos", false);
|
|
54
|
+
const agentTodos = readAgentData(resolvedAgentId) || [];
|
|
55
|
+
const agentCacheKey = `todoCache_${resolvedAgentId}`;
|
|
56
|
+
return agentTodos;
|
|
57
|
+
}
|
|
58
|
+
if (todoCache && now - cacheTimestamp < CACHE_TTL) {
|
|
59
|
+
updateMetrics("getTodos", true);
|
|
60
|
+
return todoCache;
|
|
61
|
+
}
|
|
62
|
+
updateMetrics("getTodos", false);
|
|
63
|
+
const sessionState = getSessionState();
|
|
64
|
+
const todos = sessionState[TODO_STORAGE_KEY] || [];
|
|
65
|
+
todoCache = [...todos];
|
|
66
|
+
cacheTimestamp = now;
|
|
67
|
+
return todos;
|
|
68
|
+
}
|
|
69
|
+
function setTodos(todos, agentId) {
|
|
70
|
+
const resolvedAgentId = resolveAgentId(agentId);
|
|
71
|
+
const config = getTodoConfig();
|
|
72
|
+
const existingTodos = getTodos(agentId);
|
|
73
|
+
if (agentId) {
|
|
74
|
+
if (todos.length > config.maxTodos) {
|
|
75
|
+
throw new Error(
|
|
76
|
+
`Todo limit exceeded. Maximum ${config.maxTodos} todos allowed.`
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
let processedTodos2 = todos;
|
|
80
|
+
if (config.autoArchiveCompleted) {
|
|
81
|
+
processedTodos2 = todos.filter((todo) => todo.status !== "completed");
|
|
82
|
+
}
|
|
83
|
+
const updatedTodos2 = processedTodos2.map((todo) => {
|
|
84
|
+
const existingTodo = existingTodos.find(
|
|
85
|
+
(existing) => existing.id === todo.id
|
|
86
|
+
);
|
|
87
|
+
return {
|
|
88
|
+
...todo,
|
|
89
|
+
updatedAt: Date.now(),
|
|
90
|
+
createdAt: todo.createdAt || Date.now(),
|
|
91
|
+
previousStatus: existingTodo?.status !== todo.status ? existingTodo?.status : todo.previousStatus
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
updatedTodos2.sort((a, b) => {
|
|
95
|
+
const statusOrder = { in_progress: 3, pending: 2, completed: 1 };
|
|
96
|
+
const statusDiff = statusOrder[b.status] - statusOrder[a.status];
|
|
97
|
+
if (statusDiff !== 0) return statusDiff;
|
|
98
|
+
const priorityOrder = { high: 3, medium: 2, low: 1 };
|
|
99
|
+
const priorityDiff = priorityOrder[b.priority] - priorityOrder[a.priority];
|
|
100
|
+
if (priorityDiff !== 0) return priorityDiff;
|
|
101
|
+
const aTime = a.updatedAt || 0;
|
|
102
|
+
const bTime = b.updatedAt || 0;
|
|
103
|
+
return bTime - aTime;
|
|
104
|
+
});
|
|
105
|
+
writeAgentData(resolvedAgentId, updatedTodos2);
|
|
106
|
+
updateMetrics("setTodos");
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (todos.length > config.maxTodos) {
|
|
110
|
+
throw new Error(
|
|
111
|
+
`Todo limit exceeded. Maximum ${config.maxTodos} todos allowed.`
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
let processedTodos = todos;
|
|
115
|
+
if (config.autoArchiveCompleted) {
|
|
116
|
+
processedTodos = todos.filter((todo) => todo.status !== "completed");
|
|
117
|
+
}
|
|
118
|
+
const updatedTodos = processedTodos.map((todo) => {
|
|
119
|
+
const existingTodo = existingTodos.find((existing) => existing.id === todo.id);
|
|
120
|
+
return {
|
|
121
|
+
...todo,
|
|
122
|
+
updatedAt: Date.now(),
|
|
123
|
+
createdAt: todo.createdAt || Date.now(),
|
|
124
|
+
previousStatus: existingTodo?.status !== todo.status ? existingTodo?.status : todo.previousStatus
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
updatedTodos.sort((a, b) => {
|
|
128
|
+
const statusOrder = { in_progress: 3, pending: 2, completed: 1 };
|
|
129
|
+
const statusDiff = statusOrder[b.status] - statusOrder[a.status];
|
|
130
|
+
if (statusDiff !== 0) return statusDiff;
|
|
131
|
+
const priorityOrder = { high: 3, medium: 2, low: 1 };
|
|
132
|
+
const priorityDiff = priorityOrder[b.priority] - priorityOrder[a.priority];
|
|
133
|
+
if (priorityDiff !== 0) return priorityDiff;
|
|
134
|
+
const aTime = a.updatedAt || 0;
|
|
135
|
+
const bTime = b.updatedAt || 0;
|
|
136
|
+
return bTime - aTime;
|
|
137
|
+
});
|
|
138
|
+
setSessionState({
|
|
139
|
+
...getSessionState(),
|
|
140
|
+
[TODO_STORAGE_KEY]: updatedTodos
|
|
141
|
+
});
|
|
142
|
+
invalidateCache();
|
|
143
|
+
updateMetrics("setTodos");
|
|
144
|
+
}
|
|
145
|
+
function getTodoConfig() {
|
|
146
|
+
const sessionState = getSessionState();
|
|
147
|
+
return { ...DEFAULT_CONFIG, ...sessionState[TODO_CONFIG_KEY] || {} };
|
|
148
|
+
}
|
|
149
|
+
function setTodoConfig(config) {
|
|
150
|
+
const currentConfig = getTodoConfig();
|
|
151
|
+
const newConfig = { ...currentConfig, ...config };
|
|
152
|
+
setSessionState({
|
|
153
|
+
...getSessionState(),
|
|
154
|
+
[TODO_CONFIG_KEY]: newConfig
|
|
155
|
+
});
|
|
156
|
+
if (config.sortBy || config.sortOrder) {
|
|
157
|
+
const todos = getTodos();
|
|
158
|
+
setTodos(todos);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function addTodo(todo) {
|
|
162
|
+
const todos = getTodos();
|
|
163
|
+
if (todos.some((existing) => existing.id === todo.id)) {
|
|
164
|
+
throw new Error(`Todo with ID '${todo.id}' already exists`);
|
|
165
|
+
}
|
|
166
|
+
const newTodo = {
|
|
167
|
+
...todo,
|
|
168
|
+
createdAt: Date.now(),
|
|
169
|
+
updatedAt: Date.now()
|
|
170
|
+
};
|
|
171
|
+
const updatedTodos = [...todos, newTodo];
|
|
172
|
+
setTodos(updatedTodos);
|
|
173
|
+
updateMetrics("addTodo");
|
|
174
|
+
return updatedTodos;
|
|
175
|
+
}
|
|
176
|
+
function updateTodo(id, updates) {
|
|
177
|
+
const todos = getTodos();
|
|
178
|
+
const existingTodo = todos.find((todo) => todo.id === id);
|
|
179
|
+
if (!existingTodo) {
|
|
180
|
+
throw new Error(`Todo with ID '${id}' not found`);
|
|
181
|
+
}
|
|
182
|
+
const updatedTodos = todos.map(
|
|
183
|
+
(todo) => todo.id === id ? { ...todo, ...updates, updatedAt: Date.now() } : todo
|
|
184
|
+
);
|
|
185
|
+
setTodos(updatedTodos);
|
|
186
|
+
updateMetrics("updateTodo");
|
|
187
|
+
return updatedTodos;
|
|
188
|
+
}
|
|
189
|
+
function deleteTodo(id) {
|
|
190
|
+
const todos = getTodos();
|
|
191
|
+
const todoExists = todos.some((todo) => todo.id === id);
|
|
192
|
+
if (!todoExists) {
|
|
193
|
+
throw new Error(`Todo with ID '${id}' not found`);
|
|
194
|
+
}
|
|
195
|
+
const updatedTodos = todos.filter((todo) => todo.id !== id);
|
|
196
|
+
setTodos(updatedTodos);
|
|
197
|
+
updateMetrics("deleteTodo");
|
|
198
|
+
return updatedTodos;
|
|
199
|
+
}
|
|
200
|
+
function clearTodos() {
|
|
201
|
+
setTodos([]);
|
|
202
|
+
updateMetrics("clearTodos");
|
|
203
|
+
}
|
|
204
|
+
function getTodoById(id) {
|
|
205
|
+
const todos = getTodos();
|
|
206
|
+
updateMetrics("getTodoById");
|
|
207
|
+
return todos.find((todo) => todo.id === id);
|
|
208
|
+
}
|
|
209
|
+
function getTodosByStatus(status) {
|
|
210
|
+
const todos = getTodos();
|
|
211
|
+
updateMetrics("getTodosByStatus");
|
|
212
|
+
return todos.filter((todo) => todo.status === status);
|
|
213
|
+
}
|
|
214
|
+
function getTodosByPriority(priority) {
|
|
215
|
+
const todos = getTodos();
|
|
216
|
+
updateMetrics("getTodosByPriority");
|
|
217
|
+
return todos.filter((todo) => todo.priority === priority);
|
|
218
|
+
}
|
|
219
|
+
function queryTodos(query) {
|
|
220
|
+
const todos = getTodos();
|
|
221
|
+
updateMetrics("queryTodos");
|
|
222
|
+
return todos.filter((todo) => {
|
|
223
|
+
if (query.status && !query.status.includes(todo.status)) {
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
if (query.priority && !query.priority.includes(todo.priority)) {
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
if (query.contentMatch && !todo.content.toLowerCase().includes(query.contentMatch.toLowerCase())) {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
if (query.tags && todo.tags) {
|
|
233
|
+
const hasMatchingTag = query.tags.some((tag) => todo.tags.includes(tag));
|
|
234
|
+
if (!hasMatchingTag) return false;
|
|
235
|
+
}
|
|
236
|
+
if (query.dateRange) {
|
|
237
|
+
const todoDate = new Date(todo.createdAt || 0);
|
|
238
|
+
if (query.dateRange.from && todoDate < query.dateRange.from) return false;
|
|
239
|
+
if (query.dateRange.to && todoDate > query.dateRange.to) return false;
|
|
240
|
+
}
|
|
241
|
+
return true;
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
function getTodoStatistics() {
|
|
245
|
+
const todos = getTodos();
|
|
246
|
+
const metrics = getTodoMetrics();
|
|
247
|
+
return {
|
|
248
|
+
total: todos.length,
|
|
249
|
+
byStatus: {
|
|
250
|
+
pending: todos.filter((t) => t.status === "pending").length,
|
|
251
|
+
in_progress: todos.filter((t) => t.status === "in_progress").length,
|
|
252
|
+
completed: todos.filter((t) => t.status === "completed").length
|
|
253
|
+
},
|
|
254
|
+
byPriority: {
|
|
255
|
+
high: todos.filter((t) => t.priority === "high").length,
|
|
256
|
+
medium: todos.filter((t) => t.priority === "medium").length,
|
|
257
|
+
low: todos.filter((t) => t.priority === "low").length
|
|
258
|
+
},
|
|
259
|
+
metrics,
|
|
260
|
+
cacheEfficiency: metrics.totalOperations > 0 ? Math.round(metrics.cacheHits / metrics.totalOperations * 100) : 0
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
function optimizeTodoStorage() {
|
|
264
|
+
invalidateCache();
|
|
265
|
+
const todos = getTodos();
|
|
266
|
+
const validTodos = todos.filter(
|
|
267
|
+
(todo) => todo.id && todo.content && ["pending", "in_progress", "completed"].includes(todo.status) && ["high", "medium", "low"].includes(todo.priority)
|
|
268
|
+
);
|
|
269
|
+
if (validTodos.length !== todos.length) {
|
|
270
|
+
setTodos(validTodos);
|
|
271
|
+
}
|
|
272
|
+
updateMetrics("optimizeTodoStorage");
|
|
273
|
+
}
|
|
274
|
+
export {
|
|
275
|
+
addTodo,
|
|
276
|
+
clearTodos,
|
|
277
|
+
deleteTodo,
|
|
278
|
+
getTodoById,
|
|
279
|
+
getTodoConfig,
|
|
280
|
+
getTodoMetrics,
|
|
281
|
+
getTodoStatistics,
|
|
282
|
+
getTodos,
|
|
283
|
+
getTodosByPriority,
|
|
284
|
+
getTodosByStatus,
|
|
285
|
+
optimizeTodoStorage,
|
|
286
|
+
queryTodos,
|
|
287
|
+
setTodoConfig,
|
|
288
|
+
setTodos,
|
|
289
|
+
updateTodo
|
|
290
|
+
};
|
|
291
|
+
//# sourceMappingURL=todoStorage.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/todoStorage.ts"],
|
|
4
|
+
"sourcesContent": ["import { setSessionState, getSessionState } from './sessionState'\nimport { readAgentData, writeAgentData, resolveAgentId } from './agentStorage'\n\nexport interface TodoItem {\n id: string\n content: string\n activeForm?: string // Optional - will be auto-generated if not provided\n status: 'pending' | 'in_progress' | 'completed'\n priority: 'high' | 'medium' | 'low'\n createdAt?: number\n updatedAt?: number\n tags?: string[]\n estimatedHours?: number\n previousStatus?: 'pending' | 'in_progress' | 'completed'\n}\n\nexport interface TodoQuery {\n status?: TodoItem['status'][]\n priority?: TodoItem['priority'][]\n contentMatch?: string\n tags?: string[]\n dateRange?: { from?: Date; to?: Date }\n}\n\nexport interface TodoStorageConfig {\n maxTodos: number\n autoArchiveCompleted: boolean\n sortBy: 'createdAt' | 'updatedAt' | 'priority' | 'status'\n sortOrder: 'asc' | 'desc'\n}\n\nconst TODO_STORAGE_KEY = 'todos'\nconst TODO_CONFIG_KEY = 'todoConfig'\nconst TODO_CACHE_KEY = 'todoCache'\n\n// Default configuration\nconst DEFAULT_CONFIG: TodoStorageConfig = {\n maxTodos: 100,\n autoArchiveCompleted: false,\n sortBy: 'status', // Using smart sorting now\n sortOrder: 'desc',\n}\n\n// In-memory cache for performance\nlet todoCache: TodoItem[] | null = null\nlet cacheTimestamp = 0\nconst CACHE_TTL = 5000 // 5 seconds cache\n\n// Performance metrics\nexport interface TodoMetrics {\n totalOperations: number\n cacheHits: number\n cacheMisses: number\n lastOperation: number\n}\n\nfunction invalidateCache(): void {\n todoCache = null\n cacheTimestamp = 0\n}\n\nfunction updateMetrics(operation: string, cacheHit: boolean = false): void {\n const sessionState = getSessionState() as any\n const metrics = sessionState.todoMetrics || {\n totalOperations: 0,\n cacheHits: 0,\n cacheMisses: 0,\n lastOperation: 0,\n }\n\n metrics.totalOperations++\n metrics.lastOperation = Date.now()\n\n if (cacheHit) {\n metrics.cacheHits++\n } else {\n metrics.cacheMisses++\n }\n\n setSessionState({\n ...sessionState,\n todoMetrics: metrics,\n })\n}\n\nexport function getTodoMetrics(): TodoMetrics {\n const sessionState = getSessionState() as any\n return (\n sessionState.todoMetrics || {\n totalOperations: 0,\n cacheHits: 0,\n cacheMisses: 0,\n lastOperation: 0,\n }\n )\n}\n\nexport function getTodos(agentId?: string): TodoItem[] {\n const resolvedAgentId = resolveAgentId(agentId)\n const now = Date.now()\n\n // For agent-scoped storage, use file-based storage instead of session state\n if (agentId) {\n updateMetrics('getTodos', false)\n const agentTodos = readAgentData<TodoItem[]>(resolvedAgentId) || []\n\n // Update cache with agent-specific cache key\n const agentCacheKey = `todoCache_${resolvedAgentId}`\n // Note: In production, we'd want agent-specific caching\n\n return agentTodos\n }\n\n // Original session-based storage for backward compatibility\n // Check cache first\n if (todoCache && now - cacheTimestamp < CACHE_TTL) {\n updateMetrics('getTodos', true)\n return todoCache\n }\n\n updateMetrics('getTodos', false)\n const sessionState = getSessionState()\n const todos = (sessionState as any)[TODO_STORAGE_KEY] || []\n\n // Update cache\n todoCache = [...todos]\n cacheTimestamp = now\n\n return todos\n}\n\nexport function setTodos(todos: TodoItem[], agentId?: string): void {\n const resolvedAgentId = resolveAgentId(agentId)\n const config = getTodoConfig()\n const existingTodos = getTodos(agentId)\n\n // For agent-scoped storage, use file-based storage\n if (agentId) {\n // Validate todo limit\n if (todos.length > config.maxTodos) {\n throw new Error(\n `Todo limit exceeded. Maximum ${config.maxTodos} todos allowed.`,\n )\n }\n\n // Auto-archive completed todos if enabled\n let processedTodos = todos\n if (config.autoArchiveCompleted) {\n processedTodos = todos.filter(todo => todo.status !== 'completed')\n }\n\n const updatedTodos = processedTodos.map(todo => {\n // Find existing todo to track status changes\n const existingTodo = existingTodos.find(\n existing => existing.id === todo.id,\n )\n\n return {\n ...todo,\n updatedAt: Date.now(),\n createdAt: todo.createdAt || Date.now(),\n previousStatus:\n existingTodo?.status !== todo.status\n ? existingTodo?.status\n : todo.previousStatus,\n }\n })\n\n // Smart sorting for agent todos\n updatedTodos.sort((a, b) => {\n // 1. Status priority: in_progress > pending > completed\n const statusOrder = { in_progress: 3, pending: 2, completed: 1 }\n const statusDiff = statusOrder[b.status] - statusOrder[a.status]\n if (statusDiff !== 0) return statusDiff\n\n // 2. For same status, sort by priority: high > medium > low\n const priorityOrder = { high: 3, medium: 2, low: 1 }\n const priorityDiff = priorityOrder[b.priority] - priorityOrder[a.priority]\n if (priorityDiff !== 0) return priorityDiff\n\n // 3. For same status and priority, sort by updatedAt (newest first)\n const aTime = a.updatedAt || 0\n const bTime = b.updatedAt || 0\n return bTime - aTime\n })\n\n // Write to agent-specific storage\n writeAgentData(resolvedAgentId, updatedTodos)\n updateMetrics('setTodos')\n return\n }\n\n // Original session-based logic for backward compatibility\n // Validate todo limit\n if (todos.length > config.maxTodos) {\n throw new Error(\n `Todo limit exceeded. Maximum ${config.maxTodos} todos allowed.`,\n )\n }\n\n // Auto-archive completed todos if enabled\n let processedTodos = todos\n if (config.autoArchiveCompleted) {\n processedTodos = todos.filter(todo => todo.status !== 'completed')\n }\n\n const updatedTodos = processedTodos.map(todo => {\n // Find existing todo to track status changes\n const existingTodo = existingTodos.find(existing => existing.id === todo.id)\n\n return {\n ...todo,\n updatedAt: Date.now(),\n createdAt: todo.createdAt || Date.now(),\n previousStatus:\n existingTodo?.status !== todo.status\n ? existingTodo?.status\n : todo.previousStatus,\n }\n })\n\n // Smart sorting: status -> priority -> updatedAt\n updatedTodos.sort((a, b) => {\n // 1. Status priority: in_progress > pending > completed\n const statusOrder = { in_progress: 3, pending: 2, completed: 1 }\n const statusDiff = statusOrder[b.status] - statusOrder[a.status]\n if (statusDiff !== 0) return statusDiff\n\n // 2. For same status, sort by priority: high > medium > low\n const priorityOrder = { high: 3, medium: 2, low: 1 }\n const priorityDiff = priorityOrder[b.priority] - priorityOrder[a.priority]\n if (priorityDiff !== 0) return priorityDiff\n\n // 3. For same status and priority, sort by updatedAt (newest first)\n const aTime = a.updatedAt || 0\n const bTime = b.updatedAt || 0\n return bTime - aTime\n })\n\n setSessionState({\n ...getSessionState(),\n [TODO_STORAGE_KEY]: updatedTodos,\n } as any)\n\n // Invalidate cache\n invalidateCache()\n updateMetrics('setTodos')\n}\n\nexport function getTodoConfig(): TodoStorageConfig {\n const sessionState = getSessionState() as any\n return { ...DEFAULT_CONFIG, ...(sessionState[TODO_CONFIG_KEY] || {}) }\n}\n\nexport function setTodoConfig(config: Partial<TodoStorageConfig>): void {\n const currentConfig = getTodoConfig()\n const newConfig = { ...currentConfig, ...config }\n\n setSessionState({\n ...getSessionState(),\n [TODO_CONFIG_KEY]: newConfig,\n } as any)\n\n // Re-sort existing todos if sort order changed\n if (config.sortBy || config.sortOrder) {\n const todos = getTodos()\n setTodos(todos) // This will re-sort according to new config\n }\n}\n\nexport function addTodo(\n todo: Omit<TodoItem, 'createdAt' | 'updatedAt'>,\n): TodoItem[] {\n const todos = getTodos()\n\n // Check for duplicate IDs\n if (todos.some(existing => existing.id === todo.id)) {\n throw new Error(`Todo with ID '${todo.id}' already exists`)\n }\n\n const newTodo: TodoItem = {\n ...todo,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n }\n\n const updatedTodos = [...todos, newTodo]\n setTodos(updatedTodos)\n updateMetrics('addTodo')\n return updatedTodos\n}\n\nexport function updateTodo(id: string, updates: Partial<TodoItem>): TodoItem[] {\n const todos = getTodos()\n const existingTodo = todos.find(todo => todo.id === id)\n\n if (!existingTodo) {\n throw new Error(`Todo with ID '${id}' not found`)\n }\n\n const updatedTodos = todos.map(todo =>\n todo.id === id ? { ...todo, ...updates, updatedAt: Date.now() } : todo,\n )\n\n setTodos(updatedTodos)\n updateMetrics('updateTodo')\n return updatedTodos\n}\n\nexport function deleteTodo(id: string): TodoItem[] {\n const todos = getTodos()\n const todoExists = todos.some(todo => todo.id === id)\n\n if (!todoExists) {\n throw new Error(`Todo with ID '${id}' not found`)\n }\n\n const updatedTodos = todos.filter(todo => todo.id !== id)\n setTodos(updatedTodos)\n updateMetrics('deleteTodo')\n return updatedTodos\n}\n\nexport function clearTodos(): void {\n setTodos([])\n updateMetrics('clearTodos')\n}\n\nexport function getTodoById(id: string): TodoItem | undefined {\n const todos = getTodos()\n updateMetrics('getTodoById')\n return todos.find(todo => todo.id === id)\n}\n\nexport function getTodosByStatus(status: TodoItem['status']): TodoItem[] {\n const todos = getTodos()\n updateMetrics('getTodosByStatus')\n return todos.filter(todo => todo.status === status)\n}\n\nexport function getTodosByPriority(priority: TodoItem['priority']): TodoItem[] {\n const todos = getTodos()\n updateMetrics('getTodosByPriority')\n return todos.filter(todo => todo.priority === priority)\n}\n\n// Advanced query function\nexport function queryTodos(query: TodoQuery): TodoItem[] {\n const todos = getTodos()\n updateMetrics('queryTodos')\n\n return todos.filter(todo => {\n // Status filter\n if (query.status && !query.status.includes(todo.status)) {\n return false\n }\n\n // Priority filter\n if (query.priority && !query.priority.includes(todo.priority)) {\n return false\n }\n\n // Content search\n if (\n query.contentMatch &&\n !todo.content.toLowerCase().includes(query.contentMatch.toLowerCase())\n ) {\n return false\n }\n\n // Tags filter\n if (query.tags && todo.tags) {\n const hasMatchingTag = query.tags.some(tag => todo.tags!.includes(tag))\n if (!hasMatchingTag) return false\n }\n\n // Date range filter\n if (query.dateRange) {\n const todoDate = new Date(todo.createdAt || 0)\n if (query.dateRange.from && todoDate < query.dateRange.from) return false\n if (query.dateRange.to && todoDate > query.dateRange.to) return false\n }\n\n return true\n })\n}\n\n// Utility functions\nexport function getTodoStatistics() {\n const todos = getTodos()\n const metrics = getTodoMetrics()\n\n return {\n total: todos.length,\n byStatus: {\n pending: todos.filter(t => t.status === 'pending').length,\n in_progress: todos.filter(t => t.status === 'in_progress').length,\n completed: todos.filter(t => t.status === 'completed').length,\n },\n byPriority: {\n high: todos.filter(t => t.priority === 'high').length,\n medium: todos.filter(t => t.priority === 'medium').length,\n low: todos.filter(t => t.priority === 'low').length,\n },\n metrics,\n cacheEfficiency:\n metrics.totalOperations > 0\n ? Math.round((metrics.cacheHits / metrics.totalOperations) * 100)\n : 0,\n }\n}\n\nexport function optimizeTodoStorage(): void {\n // Force cache refresh\n invalidateCache()\n\n // Compact storage by removing any invalid entries\n const todos = getTodos()\n const validTodos = todos.filter(\n todo =>\n todo.id &&\n todo.content &&\n ['pending', 'in_progress', 'completed'].includes(todo.status) &&\n ['high', 'medium', 'low'].includes(todo.priority),\n )\n\n if (validTodos.length !== todos.length) {\n setTodos(validTodos)\n }\n\n updateMetrics('optimizeTodoStorage')\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,iBAAiB,uBAAuB;AACjD,SAAS,eAAe,gBAAgB,sBAAsB;AA8B9D,MAAM,mBAAmB;AACzB,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AAGvB,MAAM,iBAAoC;AAAA,EACxC,UAAU;AAAA,EACV,sBAAsB;AAAA,EACtB,QAAQ;AAAA;AAAA,EACR,WAAW;AACb;AAGA,IAAI,YAA+B;AACnC,IAAI,iBAAiB;AACrB,MAAM,YAAY;AAUlB,SAAS,kBAAwB;AAC/B,cAAY;AACZ,mBAAiB;AACnB;AAEA,SAAS,cAAc,WAAmB,WAAoB,OAAa;AACzE,QAAM,eAAe,gBAAgB;AACrC,QAAM,UAAU,aAAa,eAAe;AAAA,IAC1C,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,aAAa;AAAA,IACb,eAAe;AAAA,EACjB;AAEA,UAAQ;AACR,UAAQ,gBAAgB,KAAK,IAAI;AAEjC,MAAI,UAAU;AACZ,YAAQ;AAAA,EACV,OAAO;AACL,YAAQ;AAAA,EACV;AAEA,kBAAgB;AAAA,IACd,GAAG;AAAA,IACH,aAAa;AAAA,EACf,CAAC;AACH;AAEO,SAAS,iBAA8B;AAC5C,QAAM,eAAe,gBAAgB;AACrC,SACE,aAAa,eAAe;AAAA,IAC1B,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,aAAa;AAAA,IACb,eAAe;AAAA,EACjB;AAEJ;AAEO,SAAS,SAAS,SAA8B;AACrD,QAAM,kBAAkB,eAAe,OAAO;AAC9C,QAAM,MAAM,KAAK,IAAI;AAGrB,MAAI,SAAS;AACX,kBAAc,YAAY,KAAK;AAC/B,UAAM,aAAa,cAA0B,eAAe,KAAK,CAAC;AAGlE,UAAM,gBAAgB,aAAa,eAAe;AAGlD,WAAO;AAAA,EACT;AAIA,MAAI,aAAa,MAAM,iBAAiB,WAAW;AACjD,kBAAc,YAAY,IAAI;AAC9B,WAAO;AAAA,EACT;AAEA,gBAAc,YAAY,KAAK;AAC/B,QAAM,eAAe,gBAAgB;AACrC,QAAM,QAAS,aAAqB,gBAAgB,KAAK,CAAC;AAG1D,cAAY,CAAC,GAAG,KAAK;AACrB,mBAAiB;AAEjB,SAAO;AACT;AAEO,SAAS,SAAS,OAAmB,SAAwB;AAClE,QAAM,kBAAkB,eAAe,OAAO;AAC9C,QAAM,SAAS,cAAc;AAC7B,QAAM,gBAAgB,SAAS,OAAO;AAGtC,MAAI,SAAS;AAEX,QAAI,MAAM,SAAS,OAAO,UAAU;AAClC,YAAM,IAAI;AAAA,QACR,gCAAgC,OAAO,QAAQ;AAAA,MACjD;AAAA,IACF;AAGA,QAAIA,kBAAiB;AACrB,QAAI,OAAO,sBAAsB;AAC/B,MAAAA,kBAAiB,MAAM,OAAO,UAAQ,KAAK,WAAW,WAAW;AAAA,IACnE;AAEA,UAAMC,gBAAeD,gBAAe,IAAI,UAAQ;AAE9C,YAAM,eAAe,cAAc;AAAA,QACjC,cAAY,SAAS,OAAO,KAAK;AAAA,MACnC;AAEA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,WAAW,KAAK,IAAI;AAAA,QACpB,WAAW,KAAK,aAAa,KAAK,IAAI;AAAA,QACtC,gBACE,cAAc,WAAW,KAAK,SAC1B,cAAc,SACd,KAAK;AAAA,MACb;AAAA,IACF,CAAC;AAGD,IAAAC,cAAa,KAAK,CAAC,GAAG,MAAM;AAE1B,YAAM,cAAc,EAAE,aAAa,GAAG,SAAS,GAAG,WAAW,EAAE;AAC/D,YAAM,aAAa,YAAY,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM;AAC/D,UAAI,eAAe,EAAG,QAAO;AAG7B,YAAM,gBAAgB,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,EAAE;AACnD,YAAM,eAAe,cAAc,EAAE,QAAQ,IAAI,cAAc,EAAE,QAAQ;AACzE,UAAI,iBAAiB,EAAG,QAAO;AAG/B,YAAM,QAAQ,EAAE,aAAa;AAC7B,YAAM,QAAQ,EAAE,aAAa;AAC7B,aAAO,QAAQ;AAAA,IACjB,CAAC;AAGD,mBAAe,iBAAiBA,aAAY;AAC5C,kBAAc,UAAU;AACxB;AAAA,EACF;AAIA,MAAI,MAAM,SAAS,OAAO,UAAU;AAClC,UAAM,IAAI;AAAA,MACR,gCAAgC,OAAO,QAAQ;AAAA,IACjD;AAAA,EACF;AAGA,MAAI,iBAAiB;AACrB,MAAI,OAAO,sBAAsB;AAC/B,qBAAiB,MAAM,OAAO,UAAQ,KAAK,WAAW,WAAW;AAAA,EACnE;AAEA,QAAM,eAAe,eAAe,IAAI,UAAQ;AAE9C,UAAM,eAAe,cAAc,KAAK,cAAY,SAAS,OAAO,KAAK,EAAE;AAE3E,WAAO;AAAA,MACL,GAAG;AAAA,MACH,WAAW,KAAK,IAAI;AAAA,MACpB,WAAW,KAAK,aAAa,KAAK,IAAI;AAAA,MACtC,gBACE,cAAc,WAAW,KAAK,SAC1B,cAAc,SACd,KAAK;AAAA,IACb;AAAA,EACF,CAAC;AAGD,eAAa,KAAK,CAAC,GAAG,MAAM;AAE1B,UAAM,cAAc,EAAE,aAAa,GAAG,SAAS,GAAG,WAAW,EAAE;AAC/D,UAAM,aAAa,YAAY,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM;AAC/D,QAAI,eAAe,EAAG,QAAO;AAG7B,UAAM,gBAAgB,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,EAAE;AACnD,UAAM,eAAe,cAAc,EAAE,QAAQ,IAAI,cAAc,EAAE,QAAQ;AACzE,QAAI,iBAAiB,EAAG,QAAO;AAG/B,UAAM,QAAQ,EAAE,aAAa;AAC7B,UAAM,QAAQ,EAAE,aAAa;AAC7B,WAAO,QAAQ;AAAA,EACjB,CAAC;AAED,kBAAgB;AAAA,IACd,GAAG,gBAAgB;AAAA,IACnB,CAAC,gBAAgB,GAAG;AAAA,EACtB,CAAQ;AAGR,kBAAgB;AAChB,gBAAc,UAAU;AAC1B;AAEO,SAAS,gBAAmC;AACjD,QAAM,eAAe,gBAAgB;AACrC,SAAO,EAAE,GAAG,gBAAgB,GAAI,aAAa,eAAe,KAAK,CAAC,EAAG;AACvE;AAEO,SAAS,cAAc,QAA0C;AACtE,QAAM,gBAAgB,cAAc;AACpC,QAAM,YAAY,EAAE,GAAG,eAAe,GAAG,OAAO;AAEhD,kBAAgB;AAAA,IACd,GAAG,gBAAgB;AAAA,IACnB,CAAC,eAAe,GAAG;AAAA,EACrB,CAAQ;AAGR,MAAI,OAAO,UAAU,OAAO,WAAW;AACrC,UAAM,QAAQ,SAAS;AACvB,aAAS,KAAK;AAAA,EAChB;AACF;AAEO,SAAS,QACd,MACY;AACZ,QAAM,QAAQ,SAAS;AAGvB,MAAI,MAAM,KAAK,cAAY,SAAS,OAAO,KAAK,EAAE,GAAG;AACnD,UAAM,IAAI,MAAM,iBAAiB,KAAK,EAAE,kBAAkB;AAAA,EAC5D;AAEA,QAAM,UAAoB;AAAA,IACxB,GAAG;AAAA,IACH,WAAW,KAAK,IAAI;AAAA,IACpB,WAAW,KAAK,IAAI;AAAA,EACtB;AAEA,QAAM,eAAe,CAAC,GAAG,OAAO,OAAO;AACvC,WAAS,YAAY;AACrB,gBAAc,SAAS;AACvB,SAAO;AACT;AAEO,SAAS,WAAW,IAAY,SAAwC;AAC7E,QAAM,QAAQ,SAAS;AACvB,QAAM,eAAe,MAAM,KAAK,UAAQ,KAAK,OAAO,EAAE;AAEtD,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI,MAAM,iBAAiB,EAAE,aAAa;AAAA,EAClD;AAEA,QAAM,eAAe,MAAM;AAAA,IAAI,UAC7B,KAAK,OAAO,KAAK,EAAE,GAAG,MAAM,GAAG,SAAS,WAAW,KAAK,IAAI,EAAE,IAAI;AAAA,EACpE;AAEA,WAAS,YAAY;AACrB,gBAAc,YAAY;AAC1B,SAAO;AACT;AAEO,SAAS,WAAW,IAAwB;AACjD,QAAM,QAAQ,SAAS;AACvB,QAAM,aAAa,MAAM,KAAK,UAAQ,KAAK,OAAO,EAAE;AAEpD,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,iBAAiB,EAAE,aAAa;AAAA,EAClD;AAEA,QAAM,eAAe,MAAM,OAAO,UAAQ,KAAK,OAAO,EAAE;AACxD,WAAS,YAAY;AACrB,gBAAc,YAAY;AAC1B,SAAO;AACT;AAEO,SAAS,aAAmB;AACjC,WAAS,CAAC,CAAC;AACX,gBAAc,YAAY;AAC5B;AAEO,SAAS,YAAY,IAAkC;AAC5D,QAAM,QAAQ,SAAS;AACvB,gBAAc,aAAa;AAC3B,SAAO,MAAM,KAAK,UAAQ,KAAK,OAAO,EAAE;AAC1C;AAEO,SAAS,iBAAiB,QAAwC;AACvE,QAAM,QAAQ,SAAS;AACvB,gBAAc,kBAAkB;AAChC,SAAO,MAAM,OAAO,UAAQ,KAAK,WAAW,MAAM;AACpD;AAEO,SAAS,mBAAmB,UAA4C;AAC7E,QAAM,QAAQ,SAAS;AACvB,gBAAc,oBAAoB;AAClC,SAAO,MAAM,OAAO,UAAQ,KAAK,aAAa,QAAQ;AACxD;AAGO,SAAS,WAAW,OAA8B;AACvD,QAAM,QAAQ,SAAS;AACvB,gBAAc,YAAY;AAE1B,SAAO,MAAM,OAAO,UAAQ;AAE1B,QAAI,MAAM,UAAU,CAAC,MAAM,OAAO,SAAS,KAAK,MAAM,GAAG;AACvD,aAAO;AAAA,IACT;AAGA,QAAI,MAAM,YAAY,CAAC,MAAM,SAAS,SAAS,KAAK,QAAQ,GAAG;AAC7D,aAAO;AAAA,IACT;AAGA,QACE,MAAM,gBACN,CAAC,KAAK,QAAQ,YAAY,EAAE,SAAS,MAAM,aAAa,YAAY,CAAC,GACrE;AACA,aAAO;AAAA,IACT;AAGA,QAAI,MAAM,QAAQ,KAAK,MAAM;AAC3B,YAAM,iBAAiB,MAAM,KAAK,KAAK,SAAO,KAAK,KAAM,SAAS,GAAG,CAAC;AACtE,UAAI,CAAC,eAAgB,QAAO;AAAA,IAC9B;AAGA,QAAI,MAAM,WAAW;AACnB,YAAM,WAAW,IAAI,KAAK,KAAK,aAAa,CAAC;AAC7C,UAAI,MAAM,UAAU,QAAQ,WAAW,MAAM,UAAU,KAAM,QAAO;AACpE,UAAI,MAAM,UAAU,MAAM,WAAW,MAAM,UAAU,GAAI,QAAO;AAAA,IAClE;AAEA,WAAO;AAAA,EACT,CAAC;AACH;AAGO,SAAS,oBAAoB;AAClC,QAAM,QAAQ,SAAS;AACvB,QAAM,UAAU,eAAe;AAE/B,SAAO;AAAA,IACL,OAAO,MAAM;AAAA,IACb,UAAU;AAAA,MACR,SAAS,MAAM,OAAO,OAAK,EAAE,WAAW,SAAS,EAAE;AAAA,MACnD,aAAa,MAAM,OAAO,OAAK,EAAE,WAAW,aAAa,EAAE;AAAA,MAC3D,WAAW,MAAM,OAAO,OAAK,EAAE,WAAW,WAAW,EAAE;AAAA,IACzD;AAAA,IACA,YAAY;AAAA,MACV,MAAM,MAAM,OAAO,OAAK,EAAE,aAAa,MAAM,EAAE;AAAA,MAC/C,QAAQ,MAAM,OAAO,OAAK,EAAE,aAAa,QAAQ,EAAE;AAAA,MACnD,KAAK,MAAM,OAAO,OAAK,EAAE,aAAa,KAAK,EAAE;AAAA,IAC/C;AAAA,IACA;AAAA,IACA,iBACE,QAAQ,kBAAkB,IACtB,KAAK,MAAO,QAAQ,YAAY,QAAQ,kBAAmB,GAAG,IAC9D;AAAA,EACR;AACF;AAEO,SAAS,sBAA4B;AAE1C,kBAAgB;AAGhB,QAAM,QAAQ,SAAS;AACvB,QAAM,aAAa,MAAM;AAAA,IACvB,UACE,KAAK,MACL,KAAK,WACL,CAAC,WAAW,eAAe,WAAW,EAAE,SAAS,KAAK,MAAM,KAC5D,CAAC,QAAQ,UAAU,KAAK,EAAE,SAAS,KAAK,QAAQ;AAAA,EACpD;AAEA,MAAI,WAAW,WAAW,MAAM,QAAQ;AACtC,aAAS,UAAU;AAAA,EACrB;AAEA,gBAAc,qBAAqB;AACrC;",
|
|
6
|
+
"names": ["processedTodos", "updatedTodos"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { SYNTHETIC_ASSISTANT_MESSAGES } from "./messages.js";
|
|
2
|
+
function countTokens(messages) {
|
|
3
|
+
let i = messages.length - 1;
|
|
4
|
+
while (i >= 0) {
|
|
5
|
+
const message = messages[i];
|
|
6
|
+
if (message?.type === "assistant" && "usage" in message.message && !(message.message.content[0]?.type === "text" && SYNTHETIC_ASSISTANT_MESSAGES.has(message.message.content[0].text))) {
|
|
7
|
+
const { usage } = message.message;
|
|
8
|
+
return usage.input_tokens + (usage.cache_creation_input_tokens ?? 0) + (usage.cache_read_input_tokens ?? 0) + usage.output_tokens;
|
|
9
|
+
}
|
|
10
|
+
i--;
|
|
11
|
+
}
|
|
12
|
+
return 0;
|
|
13
|
+
}
|
|
14
|
+
function countCachedTokens(messages) {
|
|
15
|
+
let i = messages.length - 1;
|
|
16
|
+
while (i >= 0) {
|
|
17
|
+
const message = messages[i];
|
|
18
|
+
if (message?.type === "assistant" && "usage" in message.message) {
|
|
19
|
+
const { usage } = message.message;
|
|
20
|
+
return (usage.cache_creation_input_tokens ?? 0) + (usage.cache_read_input_tokens ?? 0);
|
|
21
|
+
}
|
|
22
|
+
i--;
|
|
23
|
+
}
|
|
24
|
+
return 0;
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
countCachedTokens,
|
|
28
|
+
countTokens
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/tokens.ts"],
|
|
4
|
+
"sourcesContent": ["import { Message } from '@query'\nimport { SYNTHETIC_ASSISTANT_MESSAGES } from './messages'\n\nexport function countTokens(messages: Message[]): number {\n let i = messages.length - 1\n while (i >= 0) {\n const message = messages[i]\n if (\n message?.type === 'assistant' &&\n 'usage' in message.message &&\n !(\n message.message.content[0]?.type === 'text' &&\n SYNTHETIC_ASSISTANT_MESSAGES.has(message.message.content[0].text)\n )\n ) {\n const { usage } = message.message\n return (\n usage.input_tokens +\n (usage.cache_creation_input_tokens ?? 0) +\n (usage.cache_read_input_tokens ?? 0) +\n usage.output_tokens\n )\n }\n i--\n }\n return 0\n}\n\nexport function countCachedTokens(messages: Message[]): number {\n let i = messages.length - 1\n while (i >= 0) {\n const message = messages[i]\n if (message?.type === 'assistant' && 'usage' in message.message) {\n const { usage } = message.message\n return (\n (usage.cache_creation_input_tokens ?? 0) +\n (usage.cache_read_input_tokens ?? 0)\n )\n }\n i--\n }\n return 0\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,oCAAoC;AAEtC,SAAS,YAAY,UAA6B;AACvD,MAAI,IAAI,SAAS,SAAS;AAC1B,SAAO,KAAK,GAAG;AACb,UAAM,UAAU,SAAS,CAAC;AAC1B,QACE,SAAS,SAAS,eAClB,WAAW,QAAQ,WACnB,EACE,QAAQ,QAAQ,QAAQ,CAAC,GAAG,SAAS,UACrC,6BAA6B,IAAI,QAAQ,QAAQ,QAAQ,CAAC,EAAE,IAAI,IAElE;AACA,YAAM,EAAE,MAAM,IAAI,QAAQ;AAC1B,aACE,MAAM,gBACL,MAAM,+BAA+B,MACrC,MAAM,2BAA2B,KAClC,MAAM;AAAA,IAEV;AACA;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,kBAAkB,UAA6B;AAC7D,MAAI,IAAI,SAAS,SAAS;AAC1B,SAAO,KAAK,GAAG;AACb,UAAM,UAAU,SAAS,CAAC;AAC1B,QAAI,SAAS,SAAS,eAAe,WAAW,QAAQ,SAAS;AAC/D,YAAM,EAAE,MAAM,IAAI,QAAQ;AAC1B,cACG,MAAM,+BAA+B,MACrC,MAAM,2BAA2B;AAAA,IAEtC;AACA;AAAA,EACF;AACA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
class ToolExecutionController {
|
|
2
|
+
tools;
|
|
3
|
+
constructor(tools) {
|
|
4
|
+
this.tools = tools;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Group tools into concurrent and sequential execution groups
|
|
8
|
+
*/
|
|
9
|
+
groupToolsForExecution(toolUseMessages) {
|
|
10
|
+
const groups = [];
|
|
11
|
+
let currentGroup = { concurrent: [], sequential: [] };
|
|
12
|
+
for (const toolUse of toolUseMessages) {
|
|
13
|
+
const tool = this.findTool(toolUse.name);
|
|
14
|
+
if (!tool) {
|
|
15
|
+
this.flushCurrentGroup(groups, currentGroup);
|
|
16
|
+
currentGroup = { concurrent: [], sequential: [toolUse] };
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
if (tool.isConcurrencySafe()) {
|
|
20
|
+
currentGroup.concurrent.push(toolUse);
|
|
21
|
+
} else {
|
|
22
|
+
this.flushCurrentGroup(groups, currentGroup);
|
|
23
|
+
currentGroup = { concurrent: [], sequential: [toolUse] };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
this.flushCurrentGroup(groups, currentGroup);
|
|
27
|
+
return groups.filter(
|
|
28
|
+
(group) => group.concurrent.length > 0 || group.sequential.length > 0
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check if all tools in a list can be executed concurrently
|
|
33
|
+
*/
|
|
34
|
+
canExecuteConcurrently(toolUseMessages) {
|
|
35
|
+
return toolUseMessages.every((msg) => {
|
|
36
|
+
const tool = this.findTool(msg.name);
|
|
37
|
+
return tool?.isConcurrencySafe() ?? false;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get tool concurrency safety status
|
|
42
|
+
*/
|
|
43
|
+
getToolConcurrencyInfo(toolName) {
|
|
44
|
+
const tool = this.findTool(toolName);
|
|
45
|
+
if (!tool) {
|
|
46
|
+
return { found: false, isConcurrencySafe: false, isReadOnly: false };
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
found: true,
|
|
50
|
+
isConcurrencySafe: tool.isConcurrencySafe(),
|
|
51
|
+
isReadOnly: tool.isReadOnly()
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Analyze tool execution plan and provide recommendations
|
|
56
|
+
*/
|
|
57
|
+
analyzeExecutionPlan(toolUseMessages) {
|
|
58
|
+
const groups = this.groupToolsForExecution(toolUseMessages);
|
|
59
|
+
const concurrentCount = groups.reduce(
|
|
60
|
+
(sum, g) => sum + g.concurrent.length,
|
|
61
|
+
0
|
|
62
|
+
);
|
|
63
|
+
const sequentialCount = groups.reduce(
|
|
64
|
+
(sum, g) => sum + g.sequential.length,
|
|
65
|
+
0
|
|
66
|
+
);
|
|
67
|
+
const recommendations = [];
|
|
68
|
+
if (concurrentCount > 1) {
|
|
69
|
+
recommendations.push(
|
|
70
|
+
`${concurrentCount} tools can run concurrently for better performance`
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
if (sequentialCount > 1) {
|
|
74
|
+
recommendations.push(
|
|
75
|
+
`${sequentialCount} tools must run sequentially for safety`
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
if (groups.length > 1) {
|
|
79
|
+
recommendations.push(
|
|
80
|
+
`Execution will be divided into ${groups.length} groups`
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
canOptimize: concurrentCount > 1,
|
|
85
|
+
concurrentCount,
|
|
86
|
+
sequentialCount,
|
|
87
|
+
groups,
|
|
88
|
+
recommendations
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
findTool(name) {
|
|
92
|
+
return this.tools.find((t) => t.name === name);
|
|
93
|
+
}
|
|
94
|
+
flushCurrentGroup(groups, currentGroup) {
|
|
95
|
+
if (currentGroup.concurrent.length > 0 || currentGroup.sequential.length > 0) {
|
|
96
|
+
groups.push({ ...currentGroup });
|
|
97
|
+
currentGroup.concurrent = [];
|
|
98
|
+
currentGroup.sequential = [];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function createToolExecutionController(tools) {
|
|
103
|
+
return new ToolExecutionController(tools);
|
|
104
|
+
}
|
|
105
|
+
export {
|
|
106
|
+
ToolExecutionController,
|
|
107
|
+
createToolExecutionController
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=toolExecutionController.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/toolExecutionController.ts"],
|
|
4
|
+
"sourcesContent": ["import { ToolUseBlock } from '@anthropic-ai/sdk/resources/index.mjs'\nimport type { Tool } from '@tool'\n\nexport interface ToolExecutionGroup {\n concurrent: ToolUseBlock[]\n sequential: ToolUseBlock[]\n}\n\n/**\n * Tool Execution Controller\n * Manages tool execution based on concurrency safety and dependencies\n */\nexport class ToolExecutionController {\n private tools: Tool[]\n\n constructor(tools: Tool[]) {\n this.tools = tools\n }\n\n /**\n * Group tools into concurrent and sequential execution groups\n */\n groupToolsForExecution(\n toolUseMessages: ToolUseBlock[],\n ): ToolExecutionGroup[] {\n const groups: ToolExecutionGroup[] = []\n let currentGroup: ToolExecutionGroup = { concurrent: [], sequential: [] }\n\n for (const toolUse of toolUseMessages) {\n const tool = this.findTool(toolUse.name)\n\n if (!tool) {\n // Unknown tool, execute sequentially for safety\n this.flushCurrentGroup(groups, currentGroup)\n currentGroup = { concurrent: [], sequential: [toolUse] }\n continue\n }\n\n if (tool.isConcurrencySafe()) {\n // Safe for concurrent execution\n currentGroup.concurrent.push(toolUse)\n } else {\n // Must be executed sequentially\n this.flushCurrentGroup(groups, currentGroup)\n currentGroup = { concurrent: [], sequential: [toolUse] }\n }\n }\n\n // Flush the last group\n this.flushCurrentGroup(groups, currentGroup)\n\n return groups.filter(\n group => group.concurrent.length > 0 || group.sequential.length > 0,\n )\n }\n\n /**\n * Check if all tools in a list can be executed concurrently\n */\n canExecuteConcurrently(toolUseMessages: ToolUseBlock[]): boolean {\n return toolUseMessages.every(msg => {\n const tool = this.findTool(msg.name)\n return tool?.isConcurrencySafe() ?? false\n })\n }\n\n /**\n * Get tool concurrency safety status\n */\n getToolConcurrencyInfo(toolName: string): {\n found: boolean\n isConcurrencySafe: boolean\n isReadOnly: boolean\n } {\n const tool = this.findTool(toolName)\n\n if (!tool) {\n return { found: false, isConcurrencySafe: false, isReadOnly: false }\n }\n\n return {\n found: true,\n isConcurrencySafe: tool.isConcurrencySafe(),\n isReadOnly: tool.isReadOnly(),\n }\n }\n\n /**\n * Analyze tool execution plan and provide recommendations\n */\n analyzeExecutionPlan(toolUseMessages: ToolUseBlock[]): {\n canOptimize: boolean\n concurrentCount: number\n sequentialCount: number\n groups: ToolExecutionGroup[]\n recommendations: string[]\n } {\n const groups = this.groupToolsForExecution(toolUseMessages)\n const concurrentCount = groups.reduce(\n (sum, g) => sum + g.concurrent.length,\n 0,\n )\n const sequentialCount = groups.reduce(\n (sum, g) => sum + g.sequential.length,\n 0,\n )\n\n const recommendations: string[] = []\n\n if (concurrentCount > 1) {\n recommendations.push(\n `${concurrentCount} tools can run concurrently for better performance`,\n )\n }\n\n if (sequentialCount > 1) {\n recommendations.push(\n `${sequentialCount} tools must run sequentially for safety`,\n )\n }\n\n if (groups.length > 1) {\n recommendations.push(\n `Execution will be divided into ${groups.length} groups`,\n )\n }\n\n return {\n canOptimize: concurrentCount > 1,\n concurrentCount,\n sequentialCount,\n groups,\n recommendations,\n }\n }\n\n private findTool(name: string): Tool | undefined {\n return this.tools.find(t => t.name === name)\n }\n\n private flushCurrentGroup(\n groups: ToolExecutionGroup[],\n currentGroup: ToolExecutionGroup,\n ): void {\n if (\n currentGroup.concurrent.length > 0 ||\n currentGroup.sequential.length > 0\n ) {\n groups.push({ ...currentGroup })\n currentGroup.concurrent = []\n currentGroup.sequential = []\n }\n }\n}\n\n/**\n * Create a tool execution controller for the given tools\n */\nexport function createToolExecutionController(\n tools: Tool[],\n): ToolExecutionController {\n return new ToolExecutionController(tools)\n}\n"],
|
|
5
|
+
"mappings": "AAYO,MAAM,wBAAwB;AAAA,EAC3B;AAAA,EAER,YAAY,OAAe;AACzB,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,uBACE,iBACsB;AACtB,UAAM,SAA+B,CAAC;AACtC,QAAI,eAAmC,EAAE,YAAY,CAAC,GAAG,YAAY,CAAC,EAAE;AAExE,eAAW,WAAW,iBAAiB;AACrC,YAAM,OAAO,KAAK,SAAS,QAAQ,IAAI;AAEvC,UAAI,CAAC,MAAM;AAET,aAAK,kBAAkB,QAAQ,YAAY;AAC3C,uBAAe,EAAE,YAAY,CAAC,GAAG,YAAY,CAAC,OAAO,EAAE;AACvD;AAAA,MACF;AAEA,UAAI,KAAK,kBAAkB,GAAG;AAE5B,qBAAa,WAAW,KAAK,OAAO;AAAA,MACtC,OAAO;AAEL,aAAK,kBAAkB,QAAQ,YAAY;AAC3C,uBAAe,EAAE,YAAY,CAAC,GAAG,YAAY,CAAC,OAAO,EAAE;AAAA,MACzD;AAAA,IACF;AAGA,SAAK,kBAAkB,QAAQ,YAAY;AAE3C,WAAO,OAAO;AAAA,MACZ,WAAS,MAAM,WAAW,SAAS,KAAK,MAAM,WAAW,SAAS;AAAA,IACpE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAuB,iBAA0C;AAC/D,WAAO,gBAAgB,MAAM,SAAO;AAClC,YAAM,OAAO,KAAK,SAAS,IAAI,IAAI;AACnC,aAAO,MAAM,kBAAkB,KAAK;AAAA,IACtC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAuB,UAIrB;AACA,UAAM,OAAO,KAAK,SAAS,QAAQ;AAEnC,QAAI,CAAC,MAAM;AACT,aAAO,EAAE,OAAO,OAAO,mBAAmB,OAAO,YAAY,MAAM;AAAA,IACrE;AAEA,WAAO;AAAA,MACL,OAAO;AAAA,MACP,mBAAmB,KAAK,kBAAkB;AAAA,MAC1C,YAAY,KAAK,WAAW;AAAA,IAC9B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB,iBAMnB;AACA,UAAM,SAAS,KAAK,uBAAuB,eAAe;AAC1D,UAAM,kBAAkB,OAAO;AAAA,MAC7B,CAAC,KAAK,MAAM,MAAM,EAAE,WAAW;AAAA,MAC/B;AAAA,IACF;AACA,UAAM,kBAAkB,OAAO;AAAA,MAC7B,CAAC,KAAK,MAAM,MAAM,EAAE,WAAW;AAAA,MAC/B;AAAA,IACF;AAEA,UAAM,kBAA4B,CAAC;AAEnC,QAAI,kBAAkB,GAAG;AACvB,sBAAgB;AAAA,QACd,GAAG,eAAe;AAAA,MACpB;AAAA,IACF;AAEA,QAAI,kBAAkB,GAAG;AACvB,sBAAgB;AAAA,QACd,GAAG,eAAe;AAAA,MACpB;AAAA,IACF;AAEA,QAAI,OAAO,SAAS,GAAG;AACrB,sBAAgB;AAAA,QACd,kCAAkC,OAAO,MAAM;AAAA,MACjD;AAAA,IACF;AAEA,WAAO;AAAA,MACL,aAAa,kBAAkB;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,SAAS,MAAgC;AAC/C,WAAO,KAAK,MAAM,KAAK,OAAK,EAAE,SAAS,IAAI;AAAA,EAC7C;AAAA,EAEQ,kBACN,QACA,cACM;AACN,QACE,aAAa,WAAW,SAAS,KACjC,aAAa,WAAW,SAAS,GACjC;AACA,aAAO,KAAK,EAAE,GAAG,aAAa,CAAC;AAC/B,mBAAa,aAAa,CAAC;AAC3B,mBAAa,aAAa,CAAC;AAAA,IAC7B;AAAA,EACF;AACF;AAKO,SAAS,8BACd,OACyB;AACzB,SAAO,IAAI,wBAAwB,KAAK;AAC1C;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/unaryLogging.ts"],
|
|
4
|
+
"sourcesContent": ["\nexport type CompletionType =\n | 'str_replace_single'\n | 'write_file_single'\n | 'tool_use_single'\n\ntype LogEvent = {\n completion_type: CompletionType\n event: 'accept' | 'reject' | 'response'\n metadata: {\n language_name: string\n message_id: string\n platform: string\n }\n}\n\nexport function logUnaryEvent(event: LogEvent): void {\n // intentionally no-op\n}\n"],
|
|
5
|
+
"mappings": "AAgBO,SAAS,cAAc,OAAuB;AAErD;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { getGlobalConfig, getOrCreateUserID } from "./config.js";
|
|
2
|
+
import { memoize } from "lodash-es";
|
|
3
|
+
import { env } from "./env.js";
|
|
4
|
+
import { execFileNoThrow } from "./execFileNoThrow.js";
|
|
5
|
+
import { logError, SESSION_ID } from "./log.js";
|
|
6
|
+
import { MACRO } from "../constants/macros.js";
|
|
7
|
+
const getGitEmail = memoize(async () => {
|
|
8
|
+
const result = await execFileNoThrow("git", ["config", "user.email"]);
|
|
9
|
+
if (result.code !== 0) {
|
|
10
|
+
logError(`Failed to get git email: ${result.stdout} ${result.stderr}`);
|
|
11
|
+
return void 0;
|
|
12
|
+
}
|
|
13
|
+
return result.stdout.trim() || void 0;
|
|
14
|
+
});
|
|
15
|
+
const getUser = memoize(async () => {
|
|
16
|
+
const userID = getOrCreateUserID();
|
|
17
|
+
const config = getGlobalConfig();
|
|
18
|
+
const email = void 0;
|
|
19
|
+
return {
|
|
20
|
+
customIDs: {
|
|
21
|
+
// for session level tests
|
|
22
|
+
sessionId: SESSION_ID
|
|
23
|
+
},
|
|
24
|
+
userID,
|
|
25
|
+
appVersion: MACRO.VERSION,
|
|
26
|
+
userAgent: env.platform,
|
|
27
|
+
email,
|
|
28
|
+
custom: {
|
|
29
|
+
nodeVersion: env.nodeVersion,
|
|
30
|
+
userType: process.env.USER_TYPE,
|
|
31
|
+
organizationUuid: config.oauthAccount?.organizationUuid,
|
|
32
|
+
accountUuid: config.oauthAccount?.accountUuid
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
export {
|
|
37
|
+
getGitEmail,
|
|
38
|
+
getUser
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=user.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/user.ts"],
|
|
4
|
+
"sourcesContent": ["import { getGlobalConfig, getOrCreateUserID } from './config'\nimport { memoize } from 'lodash-es'\nimport { env } from './env'\nimport { execFileNoThrow } from './execFileNoThrow'\nimport { logError, SESSION_ID } from './log'\nimport { MACRO } from '@constants/macros'\nexport const getGitEmail = memoize(async (): Promise<string | undefined> => {\n const result = await execFileNoThrow('git', ['config', 'user.email'])\n if (result.code !== 0) {\n logError(`Failed to get git email: ${result.stdout} ${result.stderr}`)\n return undefined\n }\n return result.stdout.trim() || undefined\n})\n\ntype SimpleUser = {\n customIDs?: Record<string, string>\n userID: string\n appVersion?: string\n userAgent?: string\n email?: string\n custom?: Record<string, unknown>\n}\n\nexport const getUser = memoize(async (): Promise<SimpleUser> => {\n const userID = getOrCreateUserID()\n const config = getGlobalConfig()\n const email = undefined\n return {\n customIDs: {\n // for session level tests\n sessionId: SESSION_ID,\n },\n userID,\n appVersion: MACRO.VERSION,\n userAgent: env.platform,\n email,\n custom: {\n nodeVersion: env.nodeVersion,\n userType: process.env.USER_TYPE,\n organizationUuid: config.oauthAccount?.organizationUuid,\n accountUuid: config.oauthAccount?.accountUuid,\n },\n }\n})\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,iBAAiB,yBAAyB;AACnD,SAAS,eAAe;AACxB,SAAS,WAAW;AACpB,SAAS,uBAAuB;AAChC,SAAS,UAAU,kBAAkB;AACrC,SAAS,aAAa;AACf,MAAM,cAAc,QAAQ,YAAyC;AAC1E,QAAM,SAAS,MAAM,gBAAgB,OAAO,CAAC,UAAU,YAAY,CAAC;AACpE,MAAI,OAAO,SAAS,GAAG;AACrB,aAAS,4BAA4B,OAAO,MAAM,IAAI,OAAO,MAAM,EAAE;AACrE,WAAO;AAAA,EACT;AACA,SAAO,OAAO,OAAO,KAAK,KAAK;AACjC,CAAC;AAWM,MAAM,UAAU,QAAQ,YAAiC;AAC9D,QAAM,SAAS,kBAAkB;AACjC,QAAM,SAAS,gBAAgB;AAC/B,QAAM,QAAQ;AACd,SAAO;AAAA,IACL,WAAW;AAAA;AAAA,MAET,WAAW;AAAA,IACb;AAAA,IACA;AAAA,IACA,YAAY,MAAM;AAAA,IAClB,WAAW,IAAI;AAAA,IACf;AAAA,IACA,QAAQ;AAAA,MACN,aAAa,IAAI;AAAA,MACjB,UAAU,QAAQ,IAAI;AAAA,MACtB,kBAAkB,OAAO,cAAc;AAAA,MACvC,aAAa,OAAO,cAAc;AAAA,IACpC;AAAA,EACF;AACF,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|