turboflux 1.0.0
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 +21 -0
- package/README.md +177 -0
- package/bin/turboflux.mjs +28 -0
- package/dist/cli/brand.d.ts +7 -0
- package/dist/cli/brand.js +33 -0
- package/dist/cli/brand.js.map +1 -0
- package/dist/cli/commands/index.d.ts +4 -0
- package/dist/cli/commands/index.js +671 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/registry.d.ts +24 -0
- package/dist/cli/commands/registry.js +124 -0
- package/dist/cli/commands/registry.js.map +1 -0
- package/dist/cli/commands/types.d.ts +69 -0
- package/dist/cli/commands/types.js +2 -0
- package/dist/cli/commands/types.js.map +1 -0
- package/dist/cli/components/App.d.ts +15 -0
- package/dist/cli/components/App.js +1738 -0
- package/dist/cli/components/App.js.map +1 -0
- package/dist/cli/components/ConversationHistory.d.ts +15 -0
- package/dist/cli/components/ConversationHistory.js +92 -0
- package/dist/cli/components/ConversationHistory.js.map +1 -0
- package/dist/cli/components/TranscriptViewport.d.ts +25 -0
- package/dist/cli/components/TranscriptViewport.js +77 -0
- package/dist/cli/components/TranscriptViewport.js.map +1 -0
- package/dist/cli/components/agentActivityModel.d.ts +24 -0
- package/dist/cli/components/agentActivityModel.js +45 -0
- package/dist/cli/components/agentActivityModel.js.map +1 -0
- package/dist/cli/components/appHelpers.d.ts +34 -0
- package/dist/cli/components/appHelpers.js +209 -0
- package/dist/cli/components/appHelpers.js.map +1 -0
- package/dist/cli/components/design-system/StatusIcon.d.ts +5 -0
- package/dist/cli/components/design-system/StatusIcon.js +25 -0
- package/dist/cli/components/design-system/StatusIcon.js.map +1 -0
- package/dist/cli/components/developerFlowModel.d.ts +36 -0
- package/dist/cli/components/developerFlowModel.js +88 -0
- package/dist/cli/components/developerFlowModel.js.map +1 -0
- package/dist/cli/components/diff/DiffCard.d.ts +16 -0
- package/dist/cli/components/diff/DiffCard.js +30 -0
- package/dist/cli/components/diff/DiffCard.js.map +1 -0
- package/dist/cli/components/diff/DiffHunks.d.ts +11 -0
- package/dist/cli/components/diff/DiffHunks.js +58 -0
- package/dist/cli/components/diff/DiffHunks.js.map +1 -0
- package/dist/cli/components/header/Header.d.ts +13 -0
- package/dist/cli/components/header/Header.js +25 -0
- package/dist/cli/components/header/Header.js.map +1 -0
- package/dist/cli/components/header/Mascot.d.ts +4 -0
- package/dist/cli/components/header/Mascot.js +53 -0
- package/dist/cli/components/header/Mascot.js.map +1 -0
- package/dist/cli/components/header/StatusLine.d.ts +21 -0
- package/dist/cli/components/header/StatusLine.js +110 -0
- package/dist/cli/components/header/StatusLine.js.map +1 -0
- package/dist/cli/components/input/EffortPicker.d.ts +30 -0
- package/dist/cli/components/input/EffortPicker.js +126 -0
- package/dist/cli/components/input/EffortPicker.js.map +1 -0
- package/dist/cli/components/input/ModelPicker.d.ts +15 -0
- package/dist/cli/components/input/ModelPicker.js +95 -0
- package/dist/cli/components/input/ModelPicker.js.map +1 -0
- package/dist/cli/components/input/PromptInput.d.ts +79 -0
- package/dist/cli/components/input/PromptInput.js +496 -0
- package/dist/cli/components/input/PromptInput.js.map +1 -0
- package/dist/cli/components/input/RewindSelector.d.ts +8 -0
- package/dist/cli/components/input/RewindSelector.js +45 -0
- package/dist/cli/components/input/RewindSelector.js.map +1 -0
- package/dist/cli/components/input/pasteState.d.ts +6 -0
- package/dist/cli/components/input/pasteState.js +42 -0
- package/dist/cli/components/input/pasteState.js.map +1 -0
- package/dist/cli/components/input/terminalInputStateMachine.d.ts +29 -0
- package/dist/cli/components/input/terminalInputStateMachine.js +67 -0
- package/dist/cli/components/input/terminalInputStateMachine.js.map +1 -0
- package/dist/cli/components/layout/CockpitRails.d.ts +6 -0
- package/dist/cli/components/layout/CockpitRails.js +13 -0
- package/dist/cli/components/layout/CockpitRails.js.map +1 -0
- package/dist/cli/components/layout/LandingView.d.ts +15 -0
- package/dist/cli/components/layout/LandingView.js +12 -0
- package/dist/cli/components/layout/LandingView.js.map +1 -0
- package/dist/cli/components/layout/SessionSidebar.d.ts +18 -0
- package/dist/cli/components/layout/SessionSidebar.js +70 -0
- package/dist/cli/components/layout/SessionSidebar.js.map +1 -0
- package/dist/cli/components/layout/StartupAnimation.d.ts +14 -0
- package/dist/cli/components/layout/StartupAnimation.js +30 -0
- package/dist/cli/components/layout/StartupAnimation.js.map +1 -0
- package/dist/cli/components/markdown/highlighter.d.ts +1 -0
- package/dist/cli/components/markdown/highlighter.js +110 -0
- package/dist/cli/components/markdown/highlighter.js.map +1 -0
- package/dist/cli/components/markdown/index.d.ts +11 -0
- package/dist/cli/components/markdown/index.js +86 -0
- package/dist/cli/components/markdown/index.js.map +1 -0
- package/dist/cli/components/messages/MessageList.d.ts +16 -0
- package/dist/cli/components/messages/MessageList.js +56 -0
- package/dist/cli/components/messages/MessageList.js.map +1 -0
- package/dist/cli/components/messages/Messages.d.ts +26 -0
- package/dist/cli/components/messages/Messages.js +32 -0
- package/dist/cli/components/messages/Messages.js.map +1 -0
- package/dist/cli/components/messages/ThinkingBlock.d.ts +9 -0
- package/dist/cli/components/messages/ThinkingBlock.js +51 -0
- package/dist/cli/components/messages/ThinkingBlock.js.map +1 -0
- package/dist/cli/components/messages/WindowedMessageList.d.ts +21 -0
- package/dist/cli/components/messages/WindowedMessageList.js +44 -0
- package/dist/cli/components/messages/WindowedMessageList.js.map +1 -0
- package/dist/cli/components/permissions/PermissionDialog.d.ts +23 -0
- package/dist/cli/components/permissions/PermissionDialog.js +83 -0
- package/dist/cli/components/permissions/PermissionDialog.js.map +1 -0
- package/dist/cli/components/spinner/SpinnerGlyph.d.ts +6 -0
- package/dist/cli/components/spinner/SpinnerGlyph.js +55 -0
- package/dist/cli/components/spinner/SpinnerGlyph.js.map +1 -0
- package/dist/cli/components/spinner/constants.d.ts +4 -0
- package/dist/cli/components/spinner/constants.js +5 -0
- package/dist/cli/components/spinner/constants.js.map +1 -0
- package/dist/cli/components/tools/ActiveWorkPanel.d.ts +22 -0
- package/dist/cli/components/tools/ActiveWorkPanel.js +70 -0
- package/dist/cli/components/tools/ActiveWorkPanel.js.map +1 -0
- package/dist/cli/components/tools/AgentActivityLine.d.ts +13 -0
- package/dist/cli/components/tools/AgentActivityLine.js +88 -0
- package/dist/cli/components/tools/AgentActivityLine.js.map +1 -0
- package/dist/cli/components/tools/QueuedPromptList.d.ts +10 -0
- package/dist/cli/components/tools/QueuedPromptList.js +26 -0
- package/dist/cli/components/tools/QueuedPromptList.js.map +1 -0
- package/dist/cli/components/tools/TaskFlowHud.d.ts +15 -0
- package/dist/cli/components/tools/TaskFlowHud.js +55 -0
- package/dist/cli/components/tools/TaskFlowHud.js.map +1 -0
- package/dist/cli/components/tools/TerminalSessionsFooter.d.ts +6 -0
- package/dist/cli/components/tools/TerminalSessionsFooter.js +36 -0
- package/dist/cli/components/tools/TerminalSessionsFooter.js.map +1 -0
- package/dist/cli/components/tools/ToolActivityList.d.ts +11 -0
- package/dist/cli/components/tools/ToolActivityList.js +73 -0
- package/dist/cli/components/tools/ToolActivityList.js.map +1 -0
- package/dist/cli/components/tools/ToolCallTree.d.ts +11 -0
- package/dist/cli/components/tools/ToolCallTree.js +14 -0
- package/dist/cli/components/tools/ToolCallTree.js.map +1 -0
- package/dist/cli/components/tools/toolLifecycleModel.d.ts +16 -0
- package/dist/cli/components/tools/toolLifecycleModel.js +30 -0
- package/dist/cli/components/tools/toolLifecycleModel.js.map +1 -0
- package/dist/cli/components/tools/toolPresentation.d.ts +9 -0
- package/dist/cli/components/tools/toolPresentation.js +171 -0
- package/dist/cli/components/tools/toolPresentation.js.map +1 -0
- package/dist/cli/components/tools/toolTypes.d.ts +16 -0
- package/dist/cli/components/tools/toolTypes.js +2 -0
- package/dist/cli/components/tools/toolTypes.js.map +1 -0
- package/dist/cli/components/transcriptWindowing.d.ts +19 -0
- package/dist/cli/components/transcriptWindowing.js +81 -0
- package/dist/cli/components/transcriptWindowing.js.map +1 -0
- package/dist/cli/config.d.ts +1 -0
- package/dist/cli/config.js +2 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/conversations/journalWriter.d.ts +50 -0
- package/dist/cli/conversations/journalWriter.js +191 -0
- package/dist/cli/conversations/journalWriter.js.map +1 -0
- package/dist/cli/conversations/manager.d.ts +65 -0
- package/dist/cli/conversations/manager.js +435 -0
- package/dist/cli/conversations/manager.js.map +1 -0
- package/dist/cli/conversations/recoveryExport.d.ts +18 -0
- package/dist/cli/conversations/recoveryExport.js +39 -0
- package/dist/cli/conversations/recoveryExport.js.map +1 -0
- package/dist/cli/conversations/recoveryMessages.d.ts +2 -0
- package/dist/cli/conversations/recoveryMessages.js +3 -0
- package/dist/cli/conversations/recoveryMessages.js.map +1 -0
- package/dist/cli/conversations/store.d.ts +14 -0
- package/dist/cli/conversations/store.js +603 -0
- package/dist/cli/conversations/store.js.map +1 -0
- package/dist/cli/conversations/types.d.ts +142 -0
- package/dist/cli/conversations/types.js +2 -0
- package/dist/cli/conversations/types.js.map +1 -0
- package/dist/cli/globalConfiguration.d.ts +13 -0
- package/dist/cli/globalConfiguration.js +61 -0
- package/dist/cli/globalConfiguration.js.map +1 -0
- package/dist/cli/hooks/useMessageCursor.d.ts +16 -0
- package/dist/cli/hooks/useMessageCursor.js +75 -0
- package/dist/cli/hooks/useMessageCursor.js.map +1 -0
- package/dist/cli/hooks/useOverlayStack.d.ts +9 -0
- package/dist/cli/hooks/useOverlayStack.js +26 -0
- package/dist/cli/hooks/useOverlayStack.js.map +1 -0
- package/dist/cli/hooks/useTerminalSize.d.ts +16 -0
- package/dist/cli/hooks/useTerminalSize.js +37 -0
- package/dist/cli/hooks/useTerminalSize.js.map +1 -0
- package/dist/cli/i18n/index.d.ts +15 -0
- package/dist/cli/i18n/index.js +32 -0
- package/dist/cli/i18n/index.js.map +1 -0
- package/dist/cli/i18n/messages.d.ts +1305 -0
- package/dist/cli/i18n/messages.js +1305 -0
- package/dist/cli/i18n/messages.js.map +1 -0
- package/dist/cli/imageAttachments.d.ts +22 -0
- package/dist/cli/imageAttachments.js +329 -0
- package/dist/cli/imageAttachments.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +146 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/platform/terminalAttention.d.ts +46 -0
- package/dist/cli/platform/terminalAttention.js +152 -0
- package/dist/cli/platform/terminalAttention.js.map +1 -0
- package/dist/cli/platform/terminalTransparency.d.ts +11 -0
- package/dist/cli/platform/terminalTransparency.js +193 -0
- package/dist/cli/platform/terminalTransparency.js.map +1 -0
- package/dist/cli/repl.d.ts +15 -0
- package/dist/cli/repl.js +38 -0
- package/dist/cli/repl.js.map +1 -0
- package/dist/cli/setup.d.ts +17 -0
- package/dist/cli/setup.js +991 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/singleShot.d.ts +30 -0
- package/dist/cli/singleShot.js +167 -0
- package/dist/cli/singleShot.js.map +1 -0
- package/dist/cli/state/adaptiveStreamScheduler.d.ts +53 -0
- package/dist/cli/state/adaptiveStreamScheduler.js +136 -0
- package/dist/cli/state/adaptiveStreamScheduler.js.map +1 -0
- package/dist/cli/state/agentFlowController.d.ts +37 -0
- package/dist/cli/state/agentFlowController.js +402 -0
- package/dist/cli/state/agentFlowController.js.map +1 -0
- package/dist/cli/state/approvalPresentationScheduler.d.ts +28 -0
- package/dist/cli/state/approvalPresentationScheduler.js +72 -0
- package/dist/cli/state/approvalPresentationScheduler.js.map +1 -0
- package/dist/cli/state/flowFeatureFlags.d.ts +18 -0
- package/dist/cli/state/flowFeatureFlags.js +45 -0
- package/dist/cli/state/flowFeatureFlags.js.map +1 -0
- package/dist/cli/state/flowReducer.d.ts +120 -0
- package/dist/cli/state/flowReducer.js +535 -0
- package/dist/cli/state/flowReducer.js.map +1 -0
- package/dist/cli/state/flowSelectors.d.ts +45 -0
- package/dist/cli/state/flowSelectors.js +144 -0
- package/dist/cli/state/flowSelectors.js.map +1 -0
- package/dist/cli/state/flowStore.d.ts +19 -0
- package/dist/cli/state/flowStore.js +51 -0
- package/dist/cli/state/flowStore.js.map +1 -0
- package/dist/cli/state/globalCommandActivity.d.ts +25 -0
- package/dist/cli/state/globalCommandActivity.js +57 -0
- package/dist/cli/state/globalCommandActivity.js.map +1 -0
- package/dist/cli/state/goldenTraces.d.ts +2 -0
- package/dist/cli/state/goldenTraces.js +15 -0
- package/dist/cli/state/goldenTraces.js.map +1 -0
- package/dist/cli/state/notificationCoordinator.d.ts +38 -0
- package/dist/cli/state/notificationCoordinator.js +101 -0
- package/dist/cli/state/notificationCoordinator.js.map +1 -0
- package/dist/cli/stateProvider.d.ts +5 -0
- package/dist/cli/stateProvider.js +7 -0
- package/dist/cli/stateProvider.js.map +1 -0
- package/dist/cli/telemetry/localFlowTelemetry.d.ts +42 -0
- package/dist/cli/telemetry/localFlowTelemetry.js +131 -0
- package/dist/cli/telemetry/localFlowTelemetry.js.map +1 -0
- package/dist/cli/telemetry/terminalBaseline.d.ts +93 -0
- package/dist/cli/telemetry/terminalBaseline.js +199 -0
- package/dist/cli/telemetry/terminalBaseline.js.map +1 -0
- package/dist/cli/telemetry/terminalLatencyTracker.d.ts +24 -0
- package/dist/cli/telemetry/terminalLatencyTracker.js +59 -0
- package/dist/cli/telemetry/terminalLatencyTracker.js.map +1 -0
- package/dist/cli/terminalLayout.d.ts +2 -0
- package/dist/cli/terminalLayout.js +16 -0
- package/dist/cli/terminalLayout.js.map +1 -0
- package/dist/cli/terminalMouse.d.ts +10 -0
- package/dist/cli/terminalMouse.js +29 -0
- package/dist/cli/terminalMouse.js.map +1 -0
- package/dist/cli/theme/ThemeProvider.d.ts +9 -0
- package/dist/cli/theme/ThemeProvider.js +26 -0
- package/dist/cli/theme/ThemeProvider.js.map +1 -0
- package/dist/cli/theme/dark.d.ts +2 -0
- package/dist/cli/theme/dark.js +27 -0
- package/dist/cli/theme/dark.js.map +1 -0
- package/dist/cli/theme/index.d.ts +5 -0
- package/dist/cli/theme/index.js +5 -0
- package/dist/cli/theme/index.js.map +1 -0
- package/dist/cli/theme/light.d.ts +2 -0
- package/dist/cli/theme/light.js +26 -0
- package/dist/cli/theme/light.js.map +1 -0
- package/dist/cli/theme/palette.d.ts +7 -0
- package/dist/cli/theme/palette.js +8 -0
- package/dist/cli/theme/palette.js.map +1 -0
- package/dist/cli/theme/resolveColor.d.ts +4 -0
- package/dist/cli/theme/resolveColor.js +43 -0
- package/dist/cli/theme/resolveColor.js.map +1 -0
- package/dist/cli/theme/types.d.ts +27 -0
- package/dist/cli/theme/types.js +2 -0
- package/dist/cli/theme/types.js.map +1 -0
- package/dist/cli/toolExecutor.d.ts +1 -0
- package/dist/cli/toolExecutor.js +2 -0
- package/dist/cli/toolExecutor.js.map +1 -0
- package/dist/core/agentEngine.d.ts +425 -0
- package/dist/core/agentEngine.js +5170 -0
- package/dist/core/agentEngine.js.map +1 -0
- package/dist/core/agents/loader.d.ts +9 -0
- package/dist/core/agents/loader.js +144 -0
- package/dist/core/agents/loader.js.map +1 -0
- package/dist/core/applyPatch.d.ts +24 -0
- package/dist/core/applyPatch.js +158 -0
- package/dist/core/applyPatch.js.map +1 -0
- package/dist/core/cacheMonitor.d.ts +24 -0
- package/dist/core/cacheMonitor.js +211 -0
- package/dist/core/cacheMonitor.js.map +1 -0
- package/dist/core/clientIdentity.d.ts +6 -0
- package/dist/core/clientIdentity.js +44 -0
- package/dist/core/clientIdentity.js.map +1 -0
- package/dist/core/config.d.ts +99 -0
- package/dist/core/config.js +715 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/contextCompaction.d.ts +20 -0
- package/dist/core/contextCompaction.js +158 -0
- package/dist/core/contextCompaction.js.map +1 -0
- package/dist/core/contextManager.d.ts +44 -0
- package/dist/core/contextManager.js +590 -0
- package/dist/core/contextManager.js.map +1 -0
- package/dist/core/contextPolicy.d.ts +18 -0
- package/dist/core/contextPolicy.js +39 -0
- package/dist/core/contextPolicy.js.map +1 -0
- package/dist/core/credentialStore.d.ts +8 -0
- package/dist/core/credentialStore.js +37 -0
- package/dist/core/credentialStore.js.map +1 -0
- package/dist/core/diffCompute.d.ts +31 -0
- package/dist/core/diffCompute.js +116 -0
- package/dist/core/diffCompute.js.map +1 -0
- package/dist/core/editHelpers.d.ts +8 -0
- package/dist/core/editHelpers.js +35 -0
- package/dist/core/editHelpers.js.map +1 -0
- package/dist/core/fileIO.d.ts +12 -0
- package/dist/core/fileIO.js +199 -0
- package/dist/core/fileIO.js.map +1 -0
- package/dist/core/gitService.d.ts +83 -0
- package/dist/core/gitService.js +522 -0
- package/dist/core/gitService.js.map +1 -0
- package/dist/core/index.d.ts +30 -0
- package/dist/core/index.js +19 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/mcp/client.d.ts +32 -0
- package/dist/core/mcp/client.js +186 -0
- package/dist/core/mcp/client.js.map +1 -0
- package/dist/core/mcp/settings.d.ts +2 -0
- package/dist/core/mcp/settings.js +26 -0
- package/dist/core/mcp/settings.js.map +1 -0
- package/dist/core/mcp/toolBridge.d.ts +20 -0
- package/dist/core/mcp/toolBridge.js +74 -0
- package/dist/core/mcp/toolBridge.js.map +1 -0
- package/dist/core/mcp/types.d.ts +29 -0
- package/dist/core/mcp/types.js +2 -0
- package/dist/core/mcp/types.js.map +1 -0
- package/dist/core/modelDiscovery.d.ts +14 -0
- package/dist/core/modelDiscovery.js +566 -0
- package/dist/core/modelDiscovery.js.map +1 -0
- package/dist/core/modelProtocol.d.ts +43 -0
- package/dist/core/modelProtocol.js +238 -0
- package/dist/core/modelProtocol.js.map +1 -0
- package/dist/core/modelRegistry.d.ts +56 -0
- package/dist/core/modelRegistry.js +308 -0
- package/dist/core/modelRegistry.js.map +1 -0
- package/dist/core/networkProxy.d.ts +20 -0
- package/dist/core/networkProxy.js +145 -0
- package/dist/core/networkProxy.js.map +1 -0
- package/dist/core/normalizeBaseUrl.d.ts +1 -0
- package/dist/core/normalizeBaseUrl.js +9 -0
- package/dist/core/normalizeBaseUrl.js.map +1 -0
- package/dist/core/pathUtils.d.ts +3 -0
- package/dist/core/pathUtils.js +46 -0
- package/dist/core/pathUtils.js.map +1 -0
- package/dist/core/permissions.d.ts +29 -0
- package/dist/core/permissions.js +245 -0
- package/dist/core/permissions.js.map +1 -0
- package/dist/core/persona/voiceProfile.d.ts +7 -0
- package/dist/core/persona/voiceProfile.js +14 -0
- package/dist/core/persona/voiceProfile.js.map +1 -0
- package/dist/core/profile.d.ts +35 -0
- package/dist/core/profile.js +373 -0
- package/dist/core/profile.js.map +1 -0
- package/dist/core/requestCompatibility.d.ts +13 -0
- package/dist/core/requestCompatibility.js +181 -0
- package/dist/core/requestCompatibility.js.map +1 -0
- package/dist/core/runtime/agentRuntime.d.ts +43 -0
- package/dist/core/runtime/agentRuntime.js +137 -0
- package/dist/core/runtime/agentRuntime.js.map +1 -0
- package/dist/core/runtime/approvalCoordinator.d.ts +36 -0
- package/dist/core/runtime/approvalCoordinator.js +113 -0
- package/dist/core/runtime/approvalCoordinator.js.map +1 -0
- package/dist/core/runtime/capabilityBoundary.d.ts +18 -0
- package/dist/core/runtime/capabilityBoundary.js +89 -0
- package/dist/core/runtime/capabilityBoundary.js.map +1 -0
- package/dist/core/runtime/nodeToolExecutor.d.ts +200 -0
- package/dist/core/runtime/nodeToolExecutor.js +2446 -0
- package/dist/core/runtime/nodeToolExecutor.js.map +1 -0
- package/dist/core/runtime/runtimeLogWriter.d.ts +32 -0
- package/dist/core/runtime/runtimeLogWriter.js +129 -0
- package/dist/core/runtime/runtimeLogWriter.js.map +1 -0
- package/dist/core/runtime/runtimeTaskManager.d.ts +78 -0
- package/dist/core/runtime/runtimeTaskManager.js +374 -0
- package/dist/core/runtime/runtimeTaskManager.js.map +1 -0
- package/dist/core/runtime/sessionRegistry.d.ts +19 -0
- package/dist/core/runtime/sessionRegistry.js +41 -0
- package/dist/core/runtime/sessionRegistry.js.map +1 -0
- package/dist/core/runtime/stateProvider.d.ts +69 -0
- package/dist/core/runtime/stateProvider.js +131 -0
- package/dist/core/runtime/stateProvider.js.map +1 -0
- package/dist/core/runtime/subAgentTaskManager.d.ts +111 -0
- package/dist/core/runtime/subAgentTaskManager.js +386 -0
- package/dist/core/runtime/subAgentTaskManager.js.map +1 -0
- package/dist/core/schemaValidation.d.ts +5 -0
- package/dist/core/schemaValidation.js +153 -0
- package/dist/core/schemaValidation.js.map +1 -0
- package/dist/core/skills/loader.d.ts +7 -0
- package/dist/core/skills/loader.js +91 -0
- package/dist/core/skills/loader.js.map +1 -0
- package/dist/core/skills/runtime.d.ts +19 -0
- package/dist/core/skills/runtime.js +61 -0
- package/dist/core/skills/runtime.js.map +1 -0
- package/dist/core/subAgent.d.ts +50 -0
- package/dist/core/subAgent.js +1258 -0
- package/dist/core/subAgent.js.map +1 -0
- package/dist/core/systemPrompt.d.ts +27 -0
- package/dist/core/systemPrompt.js +219 -0
- package/dist/core/systemPrompt.js.map +1 -0
- package/dist/core/taskManager.d.ts +105 -0
- package/dist/core/taskManager.js +617 -0
- package/dist/core/taskManager.js.map +1 -0
- package/dist/core/tokenCompressor.d.ts +14 -0
- package/dist/core/tokenCompressor.js +161 -0
- package/dist/core/tokenCompressor.js.map +1 -0
- package/dist/core/tokenCounter.d.ts +28 -0
- package/dist/core/tokenCounter.js +101 -0
- package/dist/core/tokenCounter.js.map +1 -0
- package/dist/core/toolDispatcher.d.ts +11 -0
- package/dist/core/toolDispatcher.js +38 -0
- package/dist/core/toolDispatcher.js.map +1 -0
- package/dist/core/toolExecutionLedger.d.ts +9 -0
- package/dist/core/toolExecutionLedger.js +84 -0
- package/dist/core/toolExecutionLedger.js.map +1 -0
- package/dist/core/toolRegistry.d.ts +19 -0
- package/dist/core/toolRegistry.js +820 -0
- package/dist/core/toolRegistry.js.map +1 -0
- package/dist/core/turnStrategy.d.ts +20 -0
- package/dist/core/turnStrategy.js +103 -0
- package/dist/core/turnStrategy.js.map +1 -0
- package/dist/platform/process.d.ts +14 -0
- package/dist/platform/process.js +28 -0
- package/dist/platform/process.js.map +1 -0
- package/dist/platform/runtime.d.ts +8 -0
- package/dist/platform/runtime.js +21 -0
- package/dist/platform/runtime.js.map +1 -0
- package/dist/server/adminPage.d.ts +1 -0
- package/dist/server/adminPage.js +755 -0
- package/dist/server/adminPage.js.map +1 -0
- package/dist/server/index.d.ts +22 -0
- package/dist/server/index.js +566 -0
- package/dist/server/index.js.map +1 -0
- package/dist/shared/agentTypes.d.ts +227 -0
- package/dist/shared/agentTypes.js +79 -0
- package/dist/shared/agentTypes.js.map +1 -0
- package/dist/shared/codeIndexTypes.d.ts +32 -0
- package/dist/shared/codeIndexTypes.js +2 -0
- package/dist/shared/codeIndexTypes.js.map +1 -0
- package/dist/shared/flowEvents.d.ts +192 -0
- package/dist/shared/flowEvents.js +37 -0
- package/dist/shared/flowEvents.js.map +1 -0
- package/dist/shared/memoryTypes.d.ts +100 -0
- package/dist/shared/memoryTypes.js +2 -0
- package/dist/shared/memoryTypes.js.map +1 -0
- package/dist/shared/pluginTypes.d.ts +345 -0
- package/dist/shared/pluginTypes.js +2 -0
- package/dist/shared/pluginTypes.js.map +1 -0
- package/dist/shared/runtimeTaskTypes.d.ts +43 -0
- package/dist/shared/runtimeTaskTypes.js +2 -0
- package/dist/shared/runtimeTaskTypes.js.map +1 -0
- package/dist/shared/skillTypes.d.ts +1 -0
- package/dist/shared/skillTypes.js +2 -0
- package/dist/shared/skillTypes.js.map +1 -0
- package/dist/shared/subAgentTypes.d.ts +99 -0
- package/dist/shared/subAgentTypes.js +2 -0
- package/dist/shared/subAgentTypes.js.map +1 -0
- package/dist/shared/terminalTypes.d.ts +102 -0
- package/dist/shared/terminalTypes.js +2 -0
- package/dist/shared/terminalTypes.js.map +1 -0
- package/dist/shared/toolCallMarkup.d.ts +10 -0
- package/dist/shared/toolCallMarkup.js +107 -0
- package/dist/shared/toolCallMarkup.js.map +1 -0
- package/dist/shared/toolTypes.d.ts +24 -0
- package/dist/shared/toolTypes.js +2 -0
- package/dist/shared/toolTypes.js.map +1 -0
- package/dist/shared/types.d.ts +81 -0
- package/dist/shared/types.js +2 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/state/types.d.ts +69 -0
- package/dist/state/types.js +2 -0
- package/dist/state/types.js.map +1 -0
- package/dist/tools/executor.d.ts +133 -0
- package/dist/tools/executor.js +2 -0
- package/dist/tools/executor.js.map +1 -0
- package/dist/tools/memory/loaders.d.ts +6 -0
- package/dist/tools/memory/loaders.js +292 -0
- package/dist/tools/memory/loaders.js.map +1 -0
- package/dist/tools/memory/sanitizer.d.ts +6 -0
- package/dist/tools/memory/sanitizer.js +48 -0
- package/dist/tools/memory/sanitizer.js.map +1 -0
- package/dist/tools/memory/service.d.ts +24 -0
- package/dist/tools/memory/service.js +273 -0
- package/dist/tools/memory/service.js.map +1 -0
- package/dist/tools/memory/writer.d.ts +17 -0
- package/dist/tools/memory/writer.js +192 -0
- package/dist/tools/memory/writer.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
function parseFrontmatter(content) {
|
|
4
|
+
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);
|
|
5
|
+
if (!match)
|
|
6
|
+
return { meta: {}, body: content };
|
|
7
|
+
const yamlBlock = match[1];
|
|
8
|
+
const body = match[2];
|
|
9
|
+
const meta = {};
|
|
10
|
+
let currentKey = null;
|
|
11
|
+
let currentArray = null;
|
|
12
|
+
for (const rawLine of yamlBlock.split('\n')) {
|
|
13
|
+
const line = rawLine.replace(/\r$/, '');
|
|
14
|
+
if (currentArray && line.match(/^\s*-\s+/)) {
|
|
15
|
+
const val = line.replace(/^\s*-\s+/, '').trim().replace(/^["']|["']$/g, '');
|
|
16
|
+
if (val)
|
|
17
|
+
currentArray.push(val);
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const kv = line.match(/^(\w+):\s*(.*)$/);
|
|
21
|
+
if (!kv)
|
|
22
|
+
continue;
|
|
23
|
+
if (currentArray && currentKey) {
|
|
24
|
+
;
|
|
25
|
+
meta[currentKey] = currentArray;
|
|
26
|
+
currentArray = null;
|
|
27
|
+
currentKey = null;
|
|
28
|
+
}
|
|
29
|
+
const [, key, rawValue] = kv;
|
|
30
|
+
const value = rawValue.trim();
|
|
31
|
+
if (key === 'tools' || key === 'skills') {
|
|
32
|
+
if (value.startsWith('[')) {
|
|
33
|
+
try {
|
|
34
|
+
;
|
|
35
|
+
meta[key] = JSON.parse(value);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
;
|
|
39
|
+
meta[key] = value.replace(/[\[\]]/g, '').split(',').map(s => s.trim()).filter(Boolean);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else if (value === '') {
|
|
43
|
+
currentKey = key;
|
|
44
|
+
currentArray = [];
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
;
|
|
48
|
+
meta[key] = [value];
|
|
49
|
+
}
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (key === 'maxTurns' || key === 'maxParallel' || key === 'temperature' || key === 'maxOutputTokens') {
|
|
53
|
+
const num = Number(value);
|
|
54
|
+
if (!isNaN(num))
|
|
55
|
+
meta[key] = num;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
;
|
|
59
|
+
meta[key] = value.replace(/^["']|["']$/g, '');
|
|
60
|
+
}
|
|
61
|
+
if (currentArray && currentKey) {
|
|
62
|
+
;
|
|
63
|
+
meta[currentKey] = currentArray;
|
|
64
|
+
}
|
|
65
|
+
return { meta, body };
|
|
66
|
+
}
|
|
67
|
+
const VALID_DRIVERS = ['deepseek-flash', 'deepseek-reasoner'];
|
|
68
|
+
const VALID_THINKING = ['disabled', 'high', 'max'];
|
|
69
|
+
function resolveDriver(model) {
|
|
70
|
+
if (!model)
|
|
71
|
+
return 'deepseek-flash';
|
|
72
|
+
if (model === 'deepseek-reasoner' || model === 'reasoner')
|
|
73
|
+
return 'deepseek-reasoner';
|
|
74
|
+
return 'deepseek-flash';
|
|
75
|
+
}
|
|
76
|
+
function mapToDefinition(meta, body, source, filePath) {
|
|
77
|
+
if (!meta.name || !meta.description)
|
|
78
|
+
return null;
|
|
79
|
+
const driver = resolveDriver(meta.model);
|
|
80
|
+
return {
|
|
81
|
+
id: meta.name,
|
|
82
|
+
label: meta.name.replace(/[-_]/g, ' ').replace(/\b\w/g, c => c.toUpperCase()),
|
|
83
|
+
description: meta.description,
|
|
84
|
+
driver,
|
|
85
|
+
systemPrompt: body.trim(),
|
|
86
|
+
maxTurns: meta.maxTurns ?? 5,
|
|
87
|
+
maxParallel: meta.maxParallel ?? 4,
|
|
88
|
+
maxOutputTokens: meta.maxOutputTokens,
|
|
89
|
+
temperature: meta.temperature ?? 0,
|
|
90
|
+
thinking: (meta.thinking && VALID_THINKING.includes(meta.thinking)) ? meta.thinking : 'disabled',
|
|
91
|
+
source,
|
|
92
|
+
filePath,
|
|
93
|
+
color: meta.color,
|
|
94
|
+
skills: meta.skills,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function loadAgentFromFile(filePath, source) {
|
|
98
|
+
try {
|
|
99
|
+
const raw = readFileSync(filePath, 'utf-8');
|
|
100
|
+
const { meta, body } = parseFrontmatter(raw);
|
|
101
|
+
return mapToDefinition(meta, body, source, filePath);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export function loadAgentsFromDir(workspacePath) {
|
|
108
|
+
const agentsDir = join(workspacePath, '.turboflux', 'agents');
|
|
109
|
+
if (!existsSync(agentsDir))
|
|
110
|
+
return [];
|
|
111
|
+
const agents = [];
|
|
112
|
+
try {
|
|
113
|
+
const entries = readdirSync(agentsDir);
|
|
114
|
+
for (const entry of entries) {
|
|
115
|
+
if (!entry.endsWith('.md'))
|
|
116
|
+
continue;
|
|
117
|
+
const fullPath = join(agentsDir, entry);
|
|
118
|
+
try {
|
|
119
|
+
if (!statSync(fullPath).isFile())
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const agent = loadAgentFromFile(fullPath, 'project');
|
|
126
|
+
if (agent)
|
|
127
|
+
agents.push(agent);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
}
|
|
132
|
+
return agents;
|
|
133
|
+
}
|
|
134
|
+
export function mergeAgentDefinitions(builtin, dynamic) {
|
|
135
|
+
const map = new Map();
|
|
136
|
+
for (const def of builtin) {
|
|
137
|
+
map.set(def.id, def);
|
|
138
|
+
}
|
|
139
|
+
for (const def of dynamic) {
|
|
140
|
+
map.set(def.id, def);
|
|
141
|
+
}
|
|
142
|
+
return map;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/agents/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type ApplyPatchOperation = {
|
|
2
|
+
kind: 'add';
|
|
3
|
+
path: string;
|
|
4
|
+
content: string;
|
|
5
|
+
} | {
|
|
6
|
+
kind: 'delete';
|
|
7
|
+
path: string;
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'update';
|
|
10
|
+
path: string;
|
|
11
|
+
moveTo?: string;
|
|
12
|
+
hunks: ApplyPatchHunk[];
|
|
13
|
+
};
|
|
14
|
+
export interface ApplyPatchHunk {
|
|
15
|
+
header: string;
|
|
16
|
+
lines: string[];
|
|
17
|
+
}
|
|
18
|
+
export declare const MAX_APPLY_PATCH_CHARS = 1000000;
|
|
19
|
+
export declare const MAX_APPLY_PATCH_OPERATIONS = 200;
|
|
20
|
+
export declare const MAX_APPLY_PATCH_HUNKS = 1000;
|
|
21
|
+
export declare const MAX_APPLY_PATCH_LINE_CHARS = 256000;
|
|
22
|
+
export declare function parseApplyPatch(source: string): ApplyPatchOperation[];
|
|
23
|
+
export declare function applyPatchHunks(original: string, hunks: ApplyPatchHunk[], path: string): string;
|
|
24
|
+
export declare function applyPatchAdd(content: string): string;
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
export const MAX_APPLY_PATCH_CHARS = 1_000_000;
|
|
2
|
+
export const MAX_APPLY_PATCH_OPERATIONS = 200;
|
|
3
|
+
export const MAX_APPLY_PATCH_HUNKS = 1_000;
|
|
4
|
+
export const MAX_APPLY_PATCH_LINE_CHARS = 256_000;
|
|
5
|
+
export function parseApplyPatch(source) {
|
|
6
|
+
if (typeof source !== 'string' || source.trim().length === 0) {
|
|
7
|
+
throw new Error('Patch must be a non-empty string');
|
|
8
|
+
}
|
|
9
|
+
if (source.length > MAX_APPLY_PATCH_CHARS) {
|
|
10
|
+
throw new Error(`Patch exceeds the ${MAX_APPLY_PATCH_CHARS.toLocaleString()} character limit`);
|
|
11
|
+
}
|
|
12
|
+
const lines = source.replace(/\r\n?/g, '\n').split('\n');
|
|
13
|
+
if (lines[0] !== '*** Begin Patch') {
|
|
14
|
+
throw new Error("Patch must start with '*** Begin Patch'");
|
|
15
|
+
}
|
|
16
|
+
if (lines[lines.length - 1] === '')
|
|
17
|
+
lines.pop();
|
|
18
|
+
if (lines[lines.length - 1] !== '*** End Patch') {
|
|
19
|
+
throw new Error("Patch must end with '*** End Patch'");
|
|
20
|
+
}
|
|
21
|
+
const operations = [];
|
|
22
|
+
const seenPaths = new Set();
|
|
23
|
+
let index = 1;
|
|
24
|
+
while (index < lines.length - 1) {
|
|
25
|
+
if (operations.length >= MAX_APPLY_PATCH_OPERATIONS) {
|
|
26
|
+
throw new Error(`Patch exceeds the ${MAX_APPLY_PATCH_OPERATIONS} file operation limit`);
|
|
27
|
+
}
|
|
28
|
+
const header = lines[index];
|
|
29
|
+
const match = header.match(/^\*\*\* (Add|Delete|Update) File: (.+)$/);
|
|
30
|
+
if (!match)
|
|
31
|
+
throw new Error(`Invalid patch header on line ${index + 1}: ${header || '(empty)'}`);
|
|
32
|
+
const kind = match[1].toLowerCase();
|
|
33
|
+
const path = match[2].trim();
|
|
34
|
+
if (!path)
|
|
35
|
+
throw new Error(`Patch path is empty on line ${index + 1}`);
|
|
36
|
+
const pathKey = path.replace(/\\/g, '/').toLowerCase();
|
|
37
|
+
if (seenPaths.has(pathKey))
|
|
38
|
+
throw new Error(`Patch contains duplicate file path: ${path}`);
|
|
39
|
+
seenPaths.add(pathKey);
|
|
40
|
+
index += 1;
|
|
41
|
+
if (kind === 'add') {
|
|
42
|
+
const contentLines = [];
|
|
43
|
+
while (index < lines.length - 1 && !isFileHeader(lines[index])) {
|
|
44
|
+
const line = lines[index];
|
|
45
|
+
if (line.length > MAX_APPLY_PATCH_LINE_CHARS) {
|
|
46
|
+
throw new Error(`Patch line ${index + 1} exceeds the ${MAX_APPLY_PATCH_LINE_CHARS.toLocaleString()} character limit`);
|
|
47
|
+
}
|
|
48
|
+
if (!line.startsWith('+')) {
|
|
49
|
+
throw new Error(`Add file content must use '+' prefixes on line ${index + 1}`);
|
|
50
|
+
}
|
|
51
|
+
contentLines.push(line.slice(1));
|
|
52
|
+
index += 1;
|
|
53
|
+
}
|
|
54
|
+
operations.push({ kind, path, content: withTrailingNewline(contentLines.join('\n')) });
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (kind === 'delete') {
|
|
58
|
+
if (index < lines.length - 1 && !isFileHeader(lines[index])) {
|
|
59
|
+
throw new Error(`Delete file entry cannot contain content on line ${index + 1}`);
|
|
60
|
+
}
|
|
61
|
+
operations.push({ kind, path });
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
let moveTo;
|
|
65
|
+
if (index < lines.length - 1 && lines[index].startsWith('*** Move to:')) {
|
|
66
|
+
moveTo = lines[index].slice('*** Move to:'.length).trim();
|
|
67
|
+
if (!moveTo)
|
|
68
|
+
throw new Error(`Move destination is empty on line ${index + 1}`);
|
|
69
|
+
index += 1;
|
|
70
|
+
}
|
|
71
|
+
const hunks = [];
|
|
72
|
+
while (index < lines.length - 1 && !isFileHeader(lines[index])) {
|
|
73
|
+
const hunkHeader = lines[index];
|
|
74
|
+
if (!hunkHeader.startsWith('@@')) {
|
|
75
|
+
throw new Error(`Update file hunk must start with '@@' on line ${index + 1}`);
|
|
76
|
+
}
|
|
77
|
+
index += 1;
|
|
78
|
+
const hunkLines = [];
|
|
79
|
+
while (index < lines.length - 1 && !isFileHeader(lines[index]) && !lines[index].startsWith('@@')) {
|
|
80
|
+
const line = lines[index];
|
|
81
|
+
if (line.length > MAX_APPLY_PATCH_LINE_CHARS) {
|
|
82
|
+
throw new Error(`Patch line ${index + 1} exceeds the ${MAX_APPLY_PATCH_LINE_CHARS.toLocaleString()} character limit`);
|
|
83
|
+
}
|
|
84
|
+
if (!line.startsWith(' ') && !line.startsWith('+') && !line.startsWith('-')) {
|
|
85
|
+
throw new Error(`Invalid patch line on line ${index + 1}: ${line || '(empty)'}`);
|
|
86
|
+
}
|
|
87
|
+
hunkLines.push(line);
|
|
88
|
+
index += 1;
|
|
89
|
+
}
|
|
90
|
+
if (hunkLines.length === 0 || !hunkLines.some(line => line.startsWith('+') || line.startsWith('-'))) {
|
|
91
|
+
throw new Error(`Update hunk on line ${index} must contain an addition or deletion`);
|
|
92
|
+
}
|
|
93
|
+
if (hunks.length >= MAX_APPLY_PATCH_HUNKS) {
|
|
94
|
+
throw new Error(`Patch exceeds the ${MAX_APPLY_PATCH_HUNKS.toLocaleString()} hunk limit`);
|
|
95
|
+
}
|
|
96
|
+
hunks.push({ header: hunkHeader, lines: hunkLines });
|
|
97
|
+
}
|
|
98
|
+
if (hunks.length === 0)
|
|
99
|
+
throw new Error(`Update file '${path}' has no hunks`);
|
|
100
|
+
operations.push({ kind, path, ...(moveTo ? { moveTo } : {}), hunks });
|
|
101
|
+
}
|
|
102
|
+
if (operations.length === 0)
|
|
103
|
+
throw new Error('Patch contains no file operations');
|
|
104
|
+
return operations;
|
|
105
|
+
}
|
|
106
|
+
export function applyPatchHunks(original, hunks, path) {
|
|
107
|
+
const normalized = original.replace(/\r\n?/g, '\n');
|
|
108
|
+
let lines = splitLines(normalized);
|
|
109
|
+
for (const hunk of hunks) {
|
|
110
|
+
const oldLines = hunk.lines.filter(line => line.startsWith(' ') || line.startsWith('-')).map(line => line.slice(1));
|
|
111
|
+
const newLines = hunk.lines.filter(line => line.startsWith(' ') || line.startsWith('+')).map(line => line.slice(1));
|
|
112
|
+
const start = findUniqueSequence(lines, oldLines, path, hunk.header);
|
|
113
|
+
lines = [...lines.slice(0, start), ...newLines, ...lines.slice(start + oldLines.length)];
|
|
114
|
+
}
|
|
115
|
+
return withTrailingNewline(lines.join('\n'));
|
|
116
|
+
}
|
|
117
|
+
export function applyPatchAdd(content) {
|
|
118
|
+
return withTrailingNewline(content.replace(/\r\n?/g, '\n').replace(/\n$/, ''));
|
|
119
|
+
}
|
|
120
|
+
function isFileHeader(line) {
|
|
121
|
+
return /^\*\*\* (?:Add|Delete|Update) File: /.test(line) || line === '*** End Patch';
|
|
122
|
+
}
|
|
123
|
+
function splitLines(content) {
|
|
124
|
+
if (content === '')
|
|
125
|
+
return [];
|
|
126
|
+
const lines = content.split('\n');
|
|
127
|
+
if (lines[lines.length - 1] === '')
|
|
128
|
+
lines.pop();
|
|
129
|
+
return lines;
|
|
130
|
+
}
|
|
131
|
+
function withTrailingNewline(content) {
|
|
132
|
+
return content.endsWith('\n') ? content : `${content}\n`;
|
|
133
|
+
}
|
|
134
|
+
function findUniqueSequence(lines, expected, path, header) {
|
|
135
|
+
if (expected.length === 0) {
|
|
136
|
+
const location = parseHunkStart(header);
|
|
137
|
+
return location === undefined ? lines.length : Math.min(location, lines.length);
|
|
138
|
+
}
|
|
139
|
+
const matches = [];
|
|
140
|
+
for (let index = 0; index <= lines.length - expected.length; index += 1) {
|
|
141
|
+
if (expected.every((line, offset) => lines[index + offset] === line))
|
|
142
|
+
matches.push(index);
|
|
143
|
+
}
|
|
144
|
+
if (matches.length === 0) {
|
|
145
|
+
throw new Error(`Failed to find expected lines in ${path}:\n${expected.join('\n')}`);
|
|
146
|
+
}
|
|
147
|
+
if (matches.length > 1) {
|
|
148
|
+
throw new Error(`Patch context is ambiguous in ${path}: found ${matches.length} matching locations for ${header}`);
|
|
149
|
+
}
|
|
150
|
+
return matches[0];
|
|
151
|
+
}
|
|
152
|
+
function parseHunkStart(header) {
|
|
153
|
+
const match = header.match(/^@@(?: -([0-9]+)(?:,[0-9]+)?(?: \+[0-9]+(?:,[0-9]+)?)?)?/);
|
|
154
|
+
if (!match?.[1])
|
|
155
|
+
return undefined;
|
|
156
|
+
return Math.max(0, Number(match[1]) - 1);
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=applyPatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyPatch.js","sourceRoot":"","sources":["../../src/core/applyPatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface PromptStateSnapshot {
|
|
2
|
+
systemPrompt: string;
|
|
3
|
+
toolCount: number;
|
|
4
|
+
toolNames: string[];
|
|
5
|
+
toolSchemas?: unknown[];
|
|
6
|
+
model: string;
|
|
7
|
+
provider: string;
|
|
8
|
+
strategy?: string | null;
|
|
9
|
+
cacheControl?: unknown;
|
|
10
|
+
extraBodyParams?: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface CacheBreakResult {
|
|
13
|
+
broken: boolean;
|
|
14
|
+
reason: string;
|
|
15
|
+
tokenDrop: number;
|
|
16
|
+
likelyTtlExpiry: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare class CacheMonitor {
|
|
19
|
+
private state;
|
|
20
|
+
recordPromptState(snapshot: PromptStateSnapshot): void;
|
|
21
|
+
checkCacheBreak(cacheReadTokens: number, cacheCreationTokens: number): CacheBreakResult;
|
|
22
|
+
reset(): void;
|
|
23
|
+
resetBaseline(): void;
|
|
24
|
+
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
const MIN_CACHE_MISS_TOKENS = 2_000;
|
|
2
|
+
const CACHE_TTL_5MIN_MS = 5 * 60 * 1_000;
|
|
3
|
+
const CACHE_TTL_1HOUR_MS = 60 * 60 * 1_000;
|
|
4
|
+
function djb2Hash(str) {
|
|
5
|
+
let hash = 5381;
|
|
6
|
+
for (let i = 0; i < str.length; i++) {
|
|
7
|
+
hash = ((hash << 5) + hash) + str.charCodeAt(i);
|
|
8
|
+
}
|
|
9
|
+
return hash >>> 0;
|
|
10
|
+
}
|
|
11
|
+
function normalizeForHash(data) {
|
|
12
|
+
if (Array.isArray(data)) {
|
|
13
|
+
return data.map(normalizeForHash);
|
|
14
|
+
}
|
|
15
|
+
if (data && typeof data === 'object') {
|
|
16
|
+
const input = data;
|
|
17
|
+
const output = {};
|
|
18
|
+
for (const key of Object.keys(input).sort()) {
|
|
19
|
+
output[key] = normalizeForHash(input[key]);
|
|
20
|
+
}
|
|
21
|
+
return output;
|
|
22
|
+
}
|
|
23
|
+
return data;
|
|
24
|
+
}
|
|
25
|
+
function computeHash(data) {
|
|
26
|
+
try {
|
|
27
|
+
return djb2Hash(JSON.stringify(normalizeForHash(data)));
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function computePerToolHashes(toolSchemas, toolNames) {
|
|
34
|
+
const hashes = {};
|
|
35
|
+
for (let i = 0; i < toolNames.length; i++) {
|
|
36
|
+
hashes[toolNames[i]] = computeHash(toolSchemas?.[i] ?? toolNames[i]);
|
|
37
|
+
}
|
|
38
|
+
return hashes;
|
|
39
|
+
}
|
|
40
|
+
export class CacheMonitor {
|
|
41
|
+
state = null;
|
|
42
|
+
recordPromptState(snapshot) {
|
|
43
|
+
const systemHash = computeHash(snapshot.systemPrompt);
|
|
44
|
+
const toolsHash = computeHash(snapshot.toolSchemas ?? {
|
|
45
|
+
names: snapshot.toolNames,
|
|
46
|
+
count: snapshot.toolCount,
|
|
47
|
+
});
|
|
48
|
+
const cacheControlHash = computeHash(snapshot.cacheControl ?? null);
|
|
49
|
+
const extraBodyHash = computeHash(snapshot.extraBodyParams ?? null);
|
|
50
|
+
const perToolHashes = computePerToolHashes(snapshot.toolSchemas, snapshot.toolNames);
|
|
51
|
+
const systemCharCount = snapshot.systemPrompt.length;
|
|
52
|
+
if (!this.state) {
|
|
53
|
+
this.state = {
|
|
54
|
+
systemHash,
|
|
55
|
+
toolsHash,
|
|
56
|
+
cacheControlHash,
|
|
57
|
+
extraBodyHash,
|
|
58
|
+
toolNames: snapshot.toolNames,
|
|
59
|
+
perToolHashes,
|
|
60
|
+
model: snapshot.model,
|
|
61
|
+
provider: snapshot.provider,
|
|
62
|
+
strategy: snapshot.strategy ?? null,
|
|
63
|
+
systemCharCount,
|
|
64
|
+
prevCacheReadTokens: null,
|
|
65
|
+
lastTurnAt: Date.now(),
|
|
66
|
+
pendingChanges: null,
|
|
67
|
+
};
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const prev = this.state;
|
|
71
|
+
const systemPromptChanged = systemHash !== prev.systemHash;
|
|
72
|
+
const toolSchemasChanged = toolsHash !== prev.toolsHash;
|
|
73
|
+
const cacheControlChanged = cacheControlHash !== prev.cacheControlHash;
|
|
74
|
+
const extraBodyChanged = extraBodyHash !== prev.extraBodyHash;
|
|
75
|
+
const modelChanged = snapshot.model !== prev.model;
|
|
76
|
+
const providerChanged = snapshot.provider !== prev.provider;
|
|
77
|
+
const strategyChanged = (snapshot.strategy ?? null) !== prev.strategy;
|
|
78
|
+
const prevToolSet = new Set(prev.toolNames);
|
|
79
|
+
const newToolSet = new Set(snapshot.toolNames);
|
|
80
|
+
const addedTools = snapshot.toolNames.filter(n => !prevToolSet.has(n));
|
|
81
|
+
const removedTools = prev.toolNames.filter(n => !newToolSet.has(n));
|
|
82
|
+
const changedToolSchemas = [];
|
|
83
|
+
if (toolSchemasChanged) {
|
|
84
|
+
for (const name of snapshot.toolNames) {
|
|
85
|
+
if (!prevToolSet.has(name))
|
|
86
|
+
continue;
|
|
87
|
+
if (perToolHashes[name] !== prev.perToolHashes[name]) {
|
|
88
|
+
changedToolSchemas.push(name);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (systemPromptChanged ||
|
|
93
|
+
toolSchemasChanged ||
|
|
94
|
+
cacheControlChanged ||
|
|
95
|
+
extraBodyChanged ||
|
|
96
|
+
modelChanged ||
|
|
97
|
+
providerChanged ||
|
|
98
|
+
strategyChanged) {
|
|
99
|
+
prev.pendingChanges = {
|
|
100
|
+
systemPromptChanged,
|
|
101
|
+
toolSchemasChanged,
|
|
102
|
+
cacheControlChanged,
|
|
103
|
+
extraBodyChanged,
|
|
104
|
+
modelChanged,
|
|
105
|
+
providerChanged,
|
|
106
|
+
strategyChanged,
|
|
107
|
+
addedTools,
|
|
108
|
+
removedTools,
|
|
109
|
+
changedToolSchemas,
|
|
110
|
+
systemCharDelta: systemCharCount - prev.systemCharCount,
|
|
111
|
+
previousModel: prev.model,
|
|
112
|
+
newModel: snapshot.model,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
prev.pendingChanges = null;
|
|
117
|
+
}
|
|
118
|
+
prev.systemHash = systemHash;
|
|
119
|
+
prev.toolsHash = toolsHash;
|
|
120
|
+
prev.cacheControlHash = cacheControlHash;
|
|
121
|
+
prev.extraBodyHash = extraBodyHash;
|
|
122
|
+
prev.toolNames = snapshot.toolNames;
|
|
123
|
+
prev.perToolHashes = perToolHashes;
|
|
124
|
+
prev.model = snapshot.model;
|
|
125
|
+
prev.provider = snapshot.provider;
|
|
126
|
+
prev.strategy = snapshot.strategy ?? null;
|
|
127
|
+
prev.systemCharCount = systemCharCount;
|
|
128
|
+
}
|
|
129
|
+
checkCacheBreak(cacheReadTokens, cacheCreationTokens) {
|
|
130
|
+
void cacheCreationTokens;
|
|
131
|
+
const state = this.state;
|
|
132
|
+
if (!state) {
|
|
133
|
+
return { broken: false, reason: '', tokenDrop: 0, likelyTtlExpiry: false };
|
|
134
|
+
}
|
|
135
|
+
const prevCacheRead = state.prevCacheReadTokens;
|
|
136
|
+
const timeSinceLast = Date.now() - state.lastTurnAt;
|
|
137
|
+
state.prevCacheReadTokens = cacheReadTokens;
|
|
138
|
+
state.lastTurnAt = Date.now();
|
|
139
|
+
if (prevCacheRead === null) {
|
|
140
|
+
return { broken: false, reason: '', tokenDrop: 0, likelyTtlExpiry: false };
|
|
141
|
+
}
|
|
142
|
+
const tokenDrop = prevCacheRead - cacheReadTokens;
|
|
143
|
+
if (cacheReadTokens >= prevCacheRead * 0.95 ||
|
|
144
|
+
tokenDrop < MIN_CACHE_MISS_TOKENS) {
|
|
145
|
+
return { broken: false, reason: '', tokenDrop, likelyTtlExpiry: false };
|
|
146
|
+
}
|
|
147
|
+
const parts = [];
|
|
148
|
+
const changes = state.pendingChanges;
|
|
149
|
+
if (changes) {
|
|
150
|
+
if (changes.modelChanged) {
|
|
151
|
+
parts.push(`model changed (${changes.previousModel} -> ${changes.newModel})`);
|
|
152
|
+
}
|
|
153
|
+
if (changes.providerChanged) {
|
|
154
|
+
parts.push('provider changed');
|
|
155
|
+
}
|
|
156
|
+
if (changes.systemPromptChanged) {
|
|
157
|
+
const delta = changes.systemCharDelta;
|
|
158
|
+
const info = delta === 0 ? '' : delta > 0 ? ` (+${delta} chars)` : ` (${delta} chars)`;
|
|
159
|
+
parts.push(`system prompt changed${info}`);
|
|
160
|
+
}
|
|
161
|
+
if (changes.toolSchemasChanged) {
|
|
162
|
+
const diff = changes.addedTools.length > 0 || changes.removedTools.length > 0
|
|
163
|
+
? ` (+${changes.addedTools.length}/-${changes.removedTools.length} tools)`
|
|
164
|
+
: changes.changedToolSchemas.length > 0
|
|
165
|
+
? ` (schema drift: ${changes.changedToolSchemas.slice(0, 5).join(', ')})`
|
|
166
|
+
: ' (schema drift, same set)';
|
|
167
|
+
parts.push(`tools changed${diff}`);
|
|
168
|
+
}
|
|
169
|
+
if (changes.cacheControlChanged && !changes.systemPromptChanged) {
|
|
170
|
+
parts.push('cache_control changed');
|
|
171
|
+
}
|
|
172
|
+
if (changes.extraBodyChanged) {
|
|
173
|
+
parts.push('request params changed');
|
|
174
|
+
}
|
|
175
|
+
if (changes.strategyChanged) {
|
|
176
|
+
parts.push('strategy changed');
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const likelyTtlExpiry = timeSinceLast > CACHE_TTL_5MIN_MS;
|
|
180
|
+
let reason;
|
|
181
|
+
if (parts.length > 0) {
|
|
182
|
+
reason = parts.join(', ');
|
|
183
|
+
}
|
|
184
|
+
else if (timeSinceLast > CACHE_TTL_1HOUR_MS) {
|
|
185
|
+
reason = 'possible 1h TTL expiry (prompt unchanged)';
|
|
186
|
+
}
|
|
187
|
+
else if (timeSinceLast > CACHE_TTL_5MIN_MS) {
|
|
188
|
+
reason = 'possible 5min TTL expiry (prompt unchanged)';
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
reason = 'likely server-side (prompt unchanged, <5min gap)';
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
broken: true,
|
|
195
|
+
reason,
|
|
196
|
+
tokenDrop,
|
|
197
|
+
likelyTtlExpiry,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
reset() {
|
|
201
|
+
this.state = null;
|
|
202
|
+
}
|
|
203
|
+
resetBaseline() {
|
|
204
|
+
if (!this.state)
|
|
205
|
+
return;
|
|
206
|
+
this.state.prevCacheReadTokens = null;
|
|
207
|
+
this.state.pendingChanges = null;
|
|
208
|
+
this.state.lastTurnAt = Date.now();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=cacheMonitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cacheMonitor.js","sourceRoot":"","sources":["../../src/core/cacheMonitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function getTurboFluxClientIdentity(environment?: NodeJS.ProcessEnv): {
|
|
2
|
+
product: string;
|
|
3
|
+
originator: string;
|
|
4
|
+
userAgent: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function createTurboFluxRequestHeaders(headers?: Record<string, string>, requestId?: `${string}-${string}-${string}-${string}-${string}`): Record<string, string>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
const DEFAULT_VERSION = '1.0.0';
|
|
4
|
+
const DEFAULT_SURFACE = 'cli';
|
|
5
|
+
let cachedVersion;
|
|
6
|
+
function packageVersion() {
|
|
7
|
+
if (cachedVersion)
|
|
8
|
+
return cachedVersion;
|
|
9
|
+
try {
|
|
10
|
+
const packageJson = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8'));
|
|
11
|
+
cachedVersion = typeof packageJson.version === 'string' && packageJson.version.trim()
|
|
12
|
+
? packageJson.version.trim()
|
|
13
|
+
: DEFAULT_VERSION;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
cachedVersion = DEFAULT_VERSION;
|
|
17
|
+
}
|
|
18
|
+
return cachedVersion;
|
|
19
|
+
}
|
|
20
|
+
function clientSurface(environment = process.env) {
|
|
21
|
+
const value = environment.TURBOFLUX_CLIENT_SURFACE?.trim().toLowerCase();
|
|
22
|
+
return value && /^[a-z0-9][a-z0-9._-]{0,63}$/.test(value) ? value : DEFAULT_SURFACE;
|
|
23
|
+
}
|
|
24
|
+
export function getTurboFluxClientIdentity(environment = process.env) {
|
|
25
|
+
const surface = clientSurface(environment);
|
|
26
|
+
const product = `turboflux-${surface}`;
|
|
27
|
+
return {
|
|
28
|
+
product,
|
|
29
|
+
originator: product.replace(/-/g, '_'),
|
|
30
|
+
userAgent: `${product}/${packageVersion()} (${process.platform}; ${process.arch})`,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function createTurboFluxRequestHeaders(headers = {}, requestId = randomUUID()) {
|
|
34
|
+
const identity = getTurboFluxClientIdentity();
|
|
35
|
+
return {
|
|
36
|
+
'User-Agent': identity.userAgent,
|
|
37
|
+
'x-app': identity.product,
|
|
38
|
+
'x-client-app': identity.product,
|
|
39
|
+
'originator': identity.originator,
|
|
40
|
+
'x-client-request-id': requestId,
|
|
41
|
+
...headers,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=clientIdentity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientIdentity.js","sourceRoot":"","sources":["../../src/core/clientIdentity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC,MAAM,eAAe,GAAG,OAAO,CAAA;AAC/B,MAAM,eAAe,GAAG,KAAK,CAAA;AAE7B,IAAI,aAAiC,CAAA;AAErC,SAAS,cAAc;IACrB,IAAI,aAAa;QAAE,OAAO,aAAa,CAAA;IACvC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAA0B,CAAA;QAC7H,aAAa,GAAG,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;YACnF,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;YAC5B,CAAC,CAAC,eAAe,CAAA;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,GAAG,eAAe,CAAA;IACjC,CAAC;IACD,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,SAAS,aAAa,CAAC,cAAiC,OAAO,CAAC,GAAG;IACjE,MAAM,KAAK,GAAG,WAAW,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACxE,OAAO,KAAK,IAAI,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAA;AACrF,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,cAAiC,OAAO,CAAC,GAAG;IAKrF,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;IAC1C,MAAM,OAAO,GAAG,aAAa,OAAO,EAAE,CAAA;IACtC,OAAO;QACL,OAAO;QACP,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;QACtC,SAAS,EAAE,GAAG,OAAO,IAAI,cAAc,EAAE,KAAK,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,IAAI,GAAG;KACnF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,UAAkC,EAAE,EACpC,SAAS,GAAG,UAAU,EAAE;IAExB,MAAM,QAAQ,GAAG,0BAA0B,EAAE,CAAA;IAC7C,OAAO;QACL,YAAY,EAAE,QAAQ,CAAC,SAAS;QAChC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,cAAc,EAAE,QAAQ,CAAC,OAAO;QAChC,YAAY,EAAE,QAAQ,CAAC,UAAU;QACjC,qBAAqB,EAAE,SAAS;QAChC,GAAG,OAAO;KACX,CAAA;AACH,CAAC"}
|