@nexus-cortex/executors 4.26.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 +202 -0
- package/NOTICE +2 -0
- package/README.md +13 -0
- package/dist/ExecutorRegistry.d.ts +89 -0
- package/dist/ExecutorRegistry.d.ts.map +1 -0
- package/dist/ExecutorRegistry.js +219 -0
- package/dist/ExecutorRegistry.js.map +1 -0
- package/dist/base/BaseTool.d.ts +108 -0
- package/dist/base/BaseTool.d.ts.map +1 -0
- package/dist/base/BaseTool.js +111 -0
- package/dist/base/BaseTool.js.map +1 -0
- package/dist/base/ToolRegistry.d.ts +141 -0
- package/dist/base/ToolRegistry.d.ts.map +1 -0
- package/dist/base/ToolRegistry.js +241 -0
- package/dist/base/ToolRegistry.js.map +1 -0
- package/dist/base/ToolResult.d.ts +63 -0
- package/dist/base/ToolResult.d.ts.map +1 -0
- package/dist/base/ToolResult.js +8 -0
- package/dist/base/ToolResult.js.map +1 -0
- package/dist/base/index.d.ts +10 -0
- package/dist/base/index.d.ts.map +1 -0
- package/dist/base/index.js +8 -0
- package/dist/base/index.js.map +1 -0
- package/dist/implementations/addon/CreateArtifactTool.d.ts +221 -0
- package/dist/implementations/addon/CreateArtifactTool.d.ts.map +1 -0
- package/dist/implementations/addon/CreateArtifactTool.js +1042 -0
- package/dist/implementations/addon/CreateArtifactTool.js.map +1 -0
- package/dist/implementations/addon/FrameDiffCache.d.ts +166 -0
- package/dist/implementations/addon/FrameDiffCache.d.ts.map +1 -0
- package/dist/implementations/addon/FrameDiffCache.js +395 -0
- package/dist/implementations/addon/FrameDiffCache.js.map +1 -0
- package/dist/implementations/addon/H264StreamEncoder.d.ts +84 -0
- package/dist/implementations/addon/H264StreamEncoder.d.ts.map +1 -0
- package/dist/implementations/addon/H264StreamEncoder.js +203 -0
- package/dist/implementations/addon/H264StreamEncoder.js.map +1 -0
- package/dist/implementations/addon/HybridScreenshotManager.d.ts +197 -0
- package/dist/implementations/addon/HybridScreenshotManager.d.ts.map +1 -0
- package/dist/implementations/addon/HybridScreenshotManager.js +415 -0
- package/dist/implementations/addon/HybridScreenshotManager.js.map +1 -0
- package/dist/implementations/addon/InspectSandboxTool.d.ts +54 -0
- package/dist/implementations/addon/InspectSandboxTool.d.ts.map +1 -0
- package/dist/implementations/addon/InspectSandboxTool.js +226 -0
- package/dist/implementations/addon/InspectSandboxTool.js.map +1 -0
- package/dist/implementations/addon/InteractWithSandboxTool.d.ts +90 -0
- package/dist/implementations/addon/InteractWithSandboxTool.d.ts.map +1 -0
- package/dist/implementations/addon/InteractWithSandboxTool.js +367 -0
- package/dist/implementations/addon/InteractWithSandboxTool.js.map +1 -0
- package/dist/implementations/addon/KeyframeDetector.d.ts +140 -0
- package/dist/implementations/addon/KeyframeDetector.d.ts.map +1 -0
- package/dist/implementations/addon/KeyframeDetector.js +390 -0
- package/dist/implementations/addon/KeyframeDetector.js.map +1 -0
- package/dist/implementations/addon/ModifySandboxTool.d.ts +62 -0
- package/dist/implementations/addon/ModifySandboxTool.d.ts.map +1 -0
- package/dist/implementations/addon/ModifySandboxTool.js +266 -0
- package/dist/implementations/addon/ModifySandboxTool.js.map +1 -0
- package/dist/implementations/addon/ReactArtifactBuilder.d.ts +27 -0
- package/dist/implementations/addon/ReactArtifactBuilder.d.ts.map +1 -0
- package/dist/implementations/addon/ReactArtifactBuilder.js +198 -0
- package/dist/implementations/addon/ReactArtifactBuilder.js.map +1 -0
- package/dist/implementations/addon/SandboxEventBroadcaster.d.ts +143 -0
- package/dist/implementations/addon/SandboxEventBroadcaster.d.ts.map +1 -0
- package/dist/implementations/addon/SandboxEventBroadcaster.js +258 -0
- package/dist/implementations/addon/SandboxEventBroadcaster.js.map +1 -0
- package/dist/implementations/addon/SandboxIntrospectionTools.d.ts +77 -0
- package/dist/implementations/addon/SandboxIntrospectionTools.d.ts.map +1 -0
- package/dist/implementations/addon/SandboxIntrospectionTools.js +292 -0
- package/dist/implementations/addon/SandboxIntrospectionTools.js.map +1 -0
- package/dist/implementations/addon/SandboxViewServer.d.ts +127 -0
- package/dist/implementations/addon/SandboxViewServer.d.ts.map +1 -0
- package/dist/implementations/addon/SandboxViewServer.js +775 -0
- package/dist/implementations/addon/SandboxViewServer.js.map +1 -0
- package/dist/implementations/addon/ScreenStream.d.ts +149 -0
- package/dist/implementations/addon/ScreenStream.d.ts.map +1 -0
- package/dist/implementations/addon/ScreenStream.js +306 -0
- package/dist/implementations/addon/ScreenStream.js.map +1 -0
- package/dist/implementations/addon/StopSandboxTool.d.ts +61 -0
- package/dist/implementations/addon/StopSandboxTool.d.ts.map +1 -0
- package/dist/implementations/addon/StopSandboxTool.js +252 -0
- package/dist/implementations/addon/StopSandboxTool.js.map +1 -0
- package/dist/implementations/addon/TerminalSandbox.d.ts +111 -0
- package/dist/implementations/addon/TerminalSandbox.d.ts.map +1 -0
- package/dist/implementations/addon/TerminalSandbox.js +345 -0
- package/dist/implementations/addon/TerminalSandbox.js.map +1 -0
- package/dist/implementations/addon/VisualFeedbackBridge.d.ts +367 -0
- package/dist/implementations/addon/VisualFeedbackBridge.d.ts.map +1 -0
- package/dist/implementations/addon/VisualFeedbackBridge.js +888 -0
- package/dist/implementations/addon/VisualFeedbackBridge.js.map +1 -0
- package/dist/implementations/addon/WindowManager.d.ts +138 -0
- package/dist/implementations/addon/WindowManager.d.ts.map +1 -0
- package/dist/implementations/addon/WindowManager.js +276 -0
- package/dist/implementations/addon/WindowManager.js.map +1 -0
- package/dist/implementations/addon/index.d.ts +29 -0
- package/dist/implementations/addon/index.d.ts.map +1 -0
- package/dist/implementations/addon/index.js +29 -0
- package/dist/implementations/addon/index.js.map +1 -0
- package/dist/implementations/addon/injectables/reactIntrospection.d.ts +57 -0
- package/dist/implementations/addon/injectables/reactIntrospection.d.ts.map +1 -0
- package/dist/implementations/addon/injectables/reactIntrospection.js +480 -0
- package/dist/implementations/addon/injectables/reactIntrospection.js.map +1 -0
- package/dist/implementations/addon/terminal-client.html +253 -0
- package/dist/implementations/agent/PRAgentTool.d.ts +37 -0
- package/dist/implementations/agent/PRAgentTool.d.ts.map +1 -0
- package/dist/implementations/agent/PRAgentTool.js +257 -0
- package/dist/implementations/agent/PRAgentTool.js.map +1 -0
- package/dist/implementations/agent/TaskTool.d.ts +76 -0
- package/dist/implementations/agent/TaskTool.d.ts.map +1 -0
- package/dist/implementations/agent/TaskTool.js +424 -0
- package/dist/implementations/agent/TaskTool.js.map +1 -0
- package/dist/implementations/agent/index.d.ts +5 -0
- package/dist/implementations/agent/index.d.ts.map +1 -0
- package/dist/implementations/agent/index.js +3 -0
- package/dist/implementations/agent/index.js.map +1 -0
- package/dist/implementations/execution/BackgroundProcessRegistry.d.ts +68 -0
- package/dist/implementations/execution/BackgroundProcessRegistry.d.ts.map +1 -0
- package/dist/implementations/execution/BackgroundProcessRegistry.js +146 -0
- package/dist/implementations/execution/BackgroundProcessRegistry.js.map +1 -0
- package/dist/implementations/execution/BashOutputTool.d.ts +42 -0
- package/dist/implementations/execution/BashOutputTool.d.ts.map +1 -0
- package/dist/implementations/execution/BashOutputTool.js +168 -0
- package/dist/implementations/execution/BashOutputTool.js.map +1 -0
- package/dist/implementations/execution/CodeExecuteTool.d.ts +31 -0
- package/dist/implementations/execution/CodeExecuteTool.d.ts.map +1 -0
- package/dist/implementations/execution/CodeExecuteTool.js +127 -0
- package/dist/implementations/execution/CodeExecuteTool.js.map +1 -0
- package/dist/implementations/execution/KillShellTool.d.ts +37 -0
- package/dist/implementations/execution/KillShellTool.d.ts.map +1 -0
- package/dist/implementations/execution/KillShellTool.js +144 -0
- package/dist/implementations/execution/KillShellTool.js.map +1 -0
- package/dist/implementations/execution/SearchToolsTool.d.ts +32 -0
- package/dist/implementations/execution/SearchToolsTool.d.ts.map +1 -0
- package/dist/implementations/execution/SearchToolsTool.js +109 -0
- package/dist/implementations/execution/SearchToolsTool.js.map +1 -0
- package/dist/implementations/execution/ShellTool.d.ts +108 -0
- package/dist/implementations/execution/ShellTool.d.ts.map +1 -0
- package/dist/implementations/execution/ShellTool.js +546 -0
- package/dist/implementations/execution/ShellTool.js.map +1 -0
- package/dist/implementations/execution/WorkspaceManagerTool.d.ts +40 -0
- package/dist/implementations/execution/WorkspaceManagerTool.d.ts.map +1 -0
- package/dist/implementations/execution/WorkspaceManagerTool.js +370 -0
- package/dist/implementations/execution/WorkspaceManagerTool.js.map +1 -0
- package/dist/implementations/execution/index.d.ts +13 -0
- package/dist/implementations/execution/index.d.ts.map +1 -0
- package/dist/implementations/execution/index.js +13 -0
- package/dist/implementations/execution/index.js.map +1 -0
- package/dist/implementations/extensions/EndTurnTool.d.ts +62 -0
- package/dist/implementations/extensions/EndTurnTool.d.ts.map +1 -0
- package/dist/implementations/extensions/EndTurnTool.js +172 -0
- package/dist/implementations/extensions/EndTurnTool.js.map +1 -0
- package/dist/implementations/extensions/ResearchBacklogTool.d.ts +37 -0
- package/dist/implementations/extensions/ResearchBacklogTool.d.ts.map +1 -0
- package/dist/implementations/extensions/ResearchBacklogTool.js +102 -0
- package/dist/implementations/extensions/ResearchBacklogTool.js.map +1 -0
- package/dist/implementations/extensions/SkillTool.d.ts +108 -0
- package/dist/implementations/extensions/SkillTool.d.ts.map +1 -0
- package/dist/implementations/extensions/SkillTool.js +351 -0
- package/dist/implementations/extensions/SkillTool.js.map +1 -0
- package/dist/implementations/extensions/SlashCommandTool.d.ts +112 -0
- package/dist/implementations/extensions/SlashCommandTool.d.ts.map +1 -0
- package/dist/implementations/extensions/SlashCommandTool.js +315 -0
- package/dist/implementations/extensions/SlashCommandTool.js.map +1 -0
- package/dist/implementations/extensions/index.d.ts +14 -0
- package/dist/implementations/extensions/index.d.ts.map +1 -0
- package/dist/implementations/extensions/index.js +10 -0
- package/dist/implementations/extensions/index.js.map +1 -0
- package/dist/implementations/file/EditTool.d.ts +232 -0
- package/dist/implementations/file/EditTool.d.ts.map +1 -0
- package/dist/implementations/file/EditTool.js +707 -0
- package/dist/implementations/file/EditTool.js.map +1 -0
- package/dist/implementations/file/ReadFileTool.d.ts +49 -0
- package/dist/implementations/file/ReadFileTool.d.ts.map +1 -0
- package/dist/implementations/file/ReadFileTool.js +225 -0
- package/dist/implementations/file/ReadFileTool.js.map +1 -0
- package/dist/implementations/file/WriteBinaryTool.d.ts +21 -0
- package/dist/implementations/file/WriteBinaryTool.d.ts.map +1 -0
- package/dist/implementations/file/WriteBinaryTool.js +153 -0
- package/dist/implementations/file/WriteBinaryTool.js.map +1 -0
- package/dist/implementations/file/WriteFileTool.d.ts +41 -0
- package/dist/implementations/file/WriteFileTool.d.ts.map +1 -0
- package/dist/implementations/file/WriteFileTool.js +220 -0
- package/dist/implementations/file/WriteFileTool.js.map +1 -0
- package/dist/implementations/file/index.d.ts +8 -0
- package/dist/implementations/file/index.d.ts.map +1 -0
- package/dist/implementations/file/index.js +8 -0
- package/dist/implementations/file/index.js.map +1 -0
- package/dist/implementations/historical/GetConversationSegmentTool.d.ts +44 -0
- package/dist/implementations/historical/GetConversationSegmentTool.d.ts.map +1 -0
- package/dist/implementations/historical/GetConversationSegmentTool.js +220 -0
- package/dist/implementations/historical/GetConversationSegmentTool.js.map +1 -0
- package/dist/implementations/historical/ListCompactionBoundariesTool.d.ts +36 -0
- package/dist/implementations/historical/ListCompactionBoundariesTool.d.ts.map +1 -0
- package/dist/implementations/historical/ListCompactionBoundariesTool.js +174 -0
- package/dist/implementations/historical/ListCompactionBoundariesTool.js.map +1 -0
- package/dist/implementations/historical/ListSessionsTool.d.ts +38 -0
- package/dist/implementations/historical/ListSessionsTool.d.ts.map +1 -0
- package/dist/implementations/historical/ListSessionsTool.js +140 -0
- package/dist/implementations/historical/ListSessionsTool.js.map +1 -0
- package/dist/implementations/historical/LoadSessionTool.d.ts +39 -0
- package/dist/implementations/historical/LoadSessionTool.d.ts.map +1 -0
- package/dist/implementations/historical/LoadSessionTool.js +171 -0
- package/dist/implementations/historical/LoadSessionTool.js.map +1 -0
- package/dist/implementations/historical/RequestHistoricalContextTool.d.ts +46 -0
- package/dist/implementations/historical/RequestHistoricalContextTool.d.ts.map +1 -0
- package/dist/implementations/historical/RequestHistoricalContextTool.js +224 -0
- package/dist/implementations/historical/RequestHistoricalContextTool.js.map +1 -0
- package/dist/implementations/historical/SearchConversationHistoryTool.d.ts +51 -0
- package/dist/implementations/historical/SearchConversationHistoryTool.d.ts.map +1 -0
- package/dist/implementations/historical/SearchConversationHistoryTool.js +306 -0
- package/dist/implementations/historical/SearchConversationHistoryTool.js.map +1 -0
- package/dist/implementations/historical/index.d.ts +12 -0
- package/dist/implementations/historical/index.d.ts.map +1 -0
- package/dist/implementations/historical/index.js +12 -0
- package/dist/implementations/historical/index.js.map +1 -0
- package/dist/implementations/index.d.ts +16 -0
- package/dist/implementations/index.d.ts.map +1 -0
- package/dist/implementations/index.js +28 -0
- package/dist/implementations/index.js.map +1 -0
- package/dist/implementations/mcp/DiscoveredMcpTool.d.ts +58 -0
- package/dist/implementations/mcp/DiscoveredMcpTool.d.ts.map +1 -0
- package/dist/implementations/mcp/DiscoveredMcpTool.js +269 -0
- package/dist/implementations/mcp/DiscoveredMcpTool.js.map +1 -0
- package/dist/implementations/mcp/index.d.ts +9 -0
- package/dist/implementations/mcp/index.d.ts.map +1 -0
- package/dist/implementations/mcp/index.js +8 -0
- package/dist/implementations/mcp/index.js.map +1 -0
- package/dist/implementations/notebook/NotebookEditTool.d.ts +96 -0
- package/dist/implementations/notebook/NotebookEditTool.d.ts.map +1 -0
- package/dist/implementations/notebook/NotebookEditTool.js +390 -0
- package/dist/implementations/notebook/NotebookEditTool.js.map +1 -0
- package/dist/implementations/notebook/index.d.ts +7 -0
- package/dist/implementations/notebook/index.d.ts.map +1 -0
- package/dist/implementations/notebook/index.js +7 -0
- package/dist/implementations/notebook/index.js.map +1 -0
- package/dist/implementations/search/GlobTool.d.ts +73 -0
- package/dist/implementations/search/GlobTool.d.ts.map +1 -0
- package/dist/implementations/search/GlobTool.js +213 -0
- package/dist/implementations/search/GlobTool.js.map +1 -0
- package/dist/implementations/search/GrepTool.d.ts +102 -0
- package/dist/implementations/search/GrepTool.d.ts.map +1 -0
- package/dist/implementations/search/GrepTool.js +754 -0
- package/dist/implementations/search/GrepTool.js.map +1 -0
- package/dist/implementations/search/index.d.ts +6 -0
- package/dist/implementations/search/index.d.ts.map +1 -0
- package/dist/implementations/search/index.js +6 -0
- package/dist/implementations/search/index.js.map +1 -0
- package/dist/implementations/tmux/TmuxSessionTool.d.ts +82 -0
- package/dist/implementations/tmux/TmuxSessionTool.d.ts.map +1 -0
- package/dist/implementations/tmux/TmuxSessionTool.js +371 -0
- package/dist/implementations/tmux/TmuxSessionTool.js.map +1 -0
- package/dist/implementations/tmux/TmuxViewServer.d.ts +86 -0
- package/dist/implementations/tmux/TmuxViewServer.d.ts.map +1 -0
- package/dist/implementations/tmux/TmuxViewServer.js +480 -0
- package/dist/implementations/tmux/TmuxViewServer.js.map +1 -0
- package/dist/implementations/tmux/index.d.ts +6 -0
- package/dist/implementations/tmux/index.d.ts.map +1 -0
- package/dist/implementations/tmux/index.js +6 -0
- package/dist/implementations/tmux/index.js.map +1 -0
- package/dist/implementations/ui/AskUserQuestionTool.d.ts +77 -0
- package/dist/implementations/ui/AskUserQuestionTool.d.ts.map +1 -0
- package/dist/implementations/ui/AskUserQuestionTool.js +241 -0
- package/dist/implementations/ui/AskUserQuestionTool.js.map +1 -0
- package/dist/implementations/ui/ExitPlanModeTool.d.ts +44 -0
- package/dist/implementations/ui/ExitPlanModeTool.d.ts.map +1 -0
- package/dist/implementations/ui/ExitPlanModeTool.js +150 -0
- package/dist/implementations/ui/ExitPlanModeTool.js.map +1 -0
- package/dist/implementations/ui/TodoWriteTool.d.ts +59 -0
- package/dist/implementations/ui/TodoWriteTool.d.ts.map +1 -0
- package/dist/implementations/ui/TodoWriteTool.js +315 -0
- package/dist/implementations/ui/TodoWriteTool.js.map +1 -0
- package/dist/implementations/ui/index.d.ts +9 -0
- package/dist/implementations/ui/index.d.ts.map +1 -0
- package/dist/implementations/ui/index.js +9 -0
- package/dist/implementations/ui/index.js.map +1 -0
- package/dist/implementations/web/BrowseTool.d.ts +43 -0
- package/dist/implementations/web/BrowseTool.d.ts.map +1 -0
- package/dist/implementations/web/BrowseTool.js +181 -0
- package/dist/implementations/web/BrowseTool.js.map +1 -0
- package/dist/implementations/web/SandboxTransferTool.d.ts +30 -0
- package/dist/implementations/web/SandboxTransferTool.d.ts.map +1 -0
- package/dist/implementations/web/SandboxTransferTool.js +261 -0
- package/dist/implementations/web/SandboxTransferTool.js.map +1 -0
- package/dist/implementations/web/WebFetchTool.d.ts +93 -0
- package/dist/implementations/web/WebFetchTool.d.ts.map +1 -0
- package/dist/implementations/web/WebFetchTool.js +484 -0
- package/dist/implementations/web/WebFetchTool.js.map +1 -0
- package/dist/implementations/web/WebSearchTool.d.ts +53 -0
- package/dist/implementations/web/WebSearchTool.d.ts.map +1 -0
- package/dist/implementations/web/WebSearchTool.js +227 -0
- package/dist/implementations/web/WebSearchTool.js.map +1 -0
- package/dist/implementations/web/escalateDirective.d.ts +11 -0
- package/dist/implementations/web/escalateDirective.d.ts.map +1 -0
- package/dist/implementations/web/escalateDirective.js +20 -0
- package/dist/implementations/web/escalateDirective.js.map +1 -0
- package/dist/implementations/web/index.d.ts +10 -0
- package/dist/implementations/web/index.d.ts.map +1 -0
- package/dist/implementations/web/index.js +10 -0
- package/dist/implementations/web/index.js.map +1 -0
- package/dist/implementations/web/webBackends.d.ts +65 -0
- package/dist/implementations/web/webBackends.d.ts.map +1 -0
- package/dist/implementations/web/webBackends.js +430 -0
- package/dist/implementations/web/webBackends.js.map +1 -0
- package/dist/implementations/web/webFetchRequestInit.d.ts +9 -0
- package/dist/implementations/web/webFetchRequestInit.d.ts.map +1 -0
- package/dist/implementations/web/webFetchRequestInit.js +21 -0
- package/dist/implementations/web/webFetchRequestInit.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/ArtifactRegistry.d.ts +138 -0
- package/dist/utils/ArtifactRegistry.d.ts.map +1 -0
- package/dist/utils/ArtifactRegistry.js +259 -0
- package/dist/utils/ArtifactRegistry.js.map +1 -0
- package/dist/utils/ChromiumBrowserManager.d.ts +56 -0
- package/dist/utils/ChromiumBrowserManager.d.ts.map +1 -0
- package/dist/utils/ChromiumBrowserManager.js +243 -0
- package/dist/utils/ChromiumBrowserManager.js.map +1 -0
- package/dist/utils/FileUtils.d.ts +81 -0
- package/dist/utils/FileUtils.d.ts.map +1 -0
- package/dist/utils/FileUtils.js +148 -0
- package/dist/utils/FileUtils.js.map +1 -0
- package/dist/utils/GitPolicy.d.ts +70 -0
- package/dist/utils/GitPolicy.d.ts.map +1 -0
- package/dist/utils/GitPolicy.js +166 -0
- package/dist/utils/GitPolicy.js.map +1 -0
- package/dist/utils/GitUtils.d.ts +18 -0
- package/dist/utils/GitUtils.d.ts.map +1 -0
- package/dist/utils/GitUtils.js +62 -0
- package/dist/utils/GitUtils.js.map +1 -0
- package/dist/utils/SandboxRegistry.d.ts +110 -0
- package/dist/utils/SandboxRegistry.d.ts.map +1 -0
- package/dist/utils/SandboxRegistry.js +220 -0
- package/dist/utils/SandboxRegistry.js.map +1 -0
- package/dist/utils/SchemaValidator.d.ts +21 -0
- package/dist/utils/SchemaValidator.d.ts.map +1 -0
- package/dist/utils/SchemaValidator.js +67 -0
- package/dist/utils/SchemaValidator.js.map +1 -0
- package/dist/utils/SessionLock.d.ts +96 -0
- package/dist/utils/SessionLock.d.ts.map +1 -0
- package/dist/utils/SessionLock.js +276 -0
- package/dist/utils/SessionLock.js.map +1 -0
- package/dist/utils/SessionPersistence.d.ts +89 -0
- package/dist/utils/SessionPersistence.d.ts.map +1 -0
- package/dist/utils/SessionPersistence.js +244 -0
- package/dist/utils/SessionPersistence.js.map +1 -0
- package/dist/utils/TextUtils.d.ts +77 -0
- package/dist/utils/TextUtils.d.ts.map +1 -0
- package/dist/utils/TextUtils.js +112 -0
- package/dist/utils/TextUtils.js.map +1 -0
- package/dist/utils/TmuxCapture.d.ts +94 -0
- package/dist/utils/TmuxCapture.d.ts.map +1 -0
- package/dist/utils/TmuxCapture.js +131 -0
- package/dist/utils/TmuxCapture.js.map +1 -0
- package/dist/utils/TmuxManager.d.ts +65 -0
- package/dist/utils/TmuxManager.d.ts.map +1 -0
- package/dist/utils/TmuxManager.js +304 -0
- package/dist/utils/TmuxManager.js.map +1 -0
- package/dist/utils/autoResearchPlanGate.d.ts +10 -0
- package/dist/utils/autoResearchPlanGate.d.ts.map +1 -0
- package/dist/utils/autoResearchPlanGate.js +57 -0
- package/dist/utils/autoResearchPlanGate.js.map +1 -0
- package/dist/utils/index.d.ts +19 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +13 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitPolicy — single source of truth for git/PR access control + safe subprocess wiring.
|
|
3
|
+
*
|
|
4
|
+
* Used by PRAgentTool, WorkspaceManagerTool, and the server's /v1/pr/* routes so that
|
|
5
|
+
* repo/action allow-listing, input validation, and token handling are consistent and
|
|
6
|
+
* defined in exactly one place.
|
|
7
|
+
*
|
|
8
|
+
* Security posture:
|
|
9
|
+
* - Validation (repo/branch/prNumber regexes) is ALWAYS enforced — there is no opt-out.
|
|
10
|
+
* Combined with execFile (no shell), this closes the shell/argument-injection class.
|
|
11
|
+
* - The repo/action allow-list is opt-in defense-in-depth. Unset GIT_ALLOWED_REPOS means
|
|
12
|
+
* "allow all" so existing single-user setups keep working after an upgrade;
|
|
13
|
+
* multi-tenant/shared deployments set it to restrict. (No startup warning — the
|
|
14
|
+
* trade-off is documented in .env.example so the TUI/CLI don't print noise on launch.)
|
|
15
|
+
* - The auth token is exposed to gh/git ONLY through the subprocess environment
|
|
16
|
+
* (GH_TOKEN / GITHUB_TOKEN). It is never interpolated into argv or a clone URL.
|
|
17
|
+
*
|
|
18
|
+
* Env vars (see SettingsSchema.ts / .env.example):
|
|
19
|
+
* - GIT_ALLOWED_REPOS comma list of owner/repo, supports `owner/*` and `*`. Default `*`.
|
|
20
|
+
* - GIT_ALLOWED_ACTIONS comma list of actions. Default: all actions allowed.
|
|
21
|
+
* - GIT_AUTH_TOKEN token for gh/git, injected into the subprocess env only.
|
|
22
|
+
* - GIT_HOST GitHub (Enterprise) host, default `github.com`.
|
|
23
|
+
*/
|
|
24
|
+
export const ALL_GIT_ACTIONS = [
|
|
25
|
+
'review',
|
|
26
|
+
'list',
|
|
27
|
+
'create',
|
|
28
|
+
'post-review',
|
|
29
|
+
'clone',
|
|
30
|
+
'worktree',
|
|
31
|
+
'diff',
|
|
32
|
+
'cleanup',
|
|
33
|
+
'status',
|
|
34
|
+
];
|
|
35
|
+
// First char must be alphanumeric (blocks leading `-` argument injection on both halves);
|
|
36
|
+
// remainder limited to word chars, dot, dash. No slashes beyond the single owner/repo one,
|
|
37
|
+
// no shell metacharacters, no whitespace.
|
|
38
|
+
const REPO_RE = /^[A-Za-z0-9][\w.-]*\/[A-Za-z0-9][\w.-]*$/;
|
|
39
|
+
// Conservative git ref-name rule: no leading dash, no `..`, no whitespace or shell/ref
|
|
40
|
+
// metacharacters. Allows nested refs like `feature/foo-bar`.
|
|
41
|
+
const BRANCH_RE = /^[A-Za-z0-9][A-Za-z0-9._/-]*$/;
|
|
42
|
+
export class GitPolicy {
|
|
43
|
+
/** Parsed allow-list patterns: `*`, `owner/*`, or exact `owner/repo`. */
|
|
44
|
+
repoPatterns;
|
|
45
|
+
/** Allowed actions, or null when all actions are permitted. */
|
|
46
|
+
actions;
|
|
47
|
+
token;
|
|
48
|
+
host;
|
|
49
|
+
constructor(cfg = {}) {
|
|
50
|
+
const reposRaw = (cfg.allowedRepos ?? '').trim();
|
|
51
|
+
if (reposRaw === '' || reposRaw === '*') {
|
|
52
|
+
// Unset / `*` = all repos permitted. The trade-off (and how to restrict it) is
|
|
53
|
+
// documented in `.env.example` under GIT_ALLOWED_REPOS — no startup warning so the
|
|
54
|
+
// TUI/CLI don't print noise on every launch.
|
|
55
|
+
this.repoPatterns = ['*'];
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
this.repoPatterns = reposRaw
|
|
59
|
+
.split(',')
|
|
60
|
+
.map((p) => p.trim().toLowerCase())
|
|
61
|
+
.filter(Boolean);
|
|
62
|
+
}
|
|
63
|
+
const actionsRaw = (cfg.allowedActions ?? '').trim();
|
|
64
|
+
this.actions =
|
|
65
|
+
actionsRaw === '' || actionsRaw === '*'
|
|
66
|
+
? null
|
|
67
|
+
: new Set(actionsRaw
|
|
68
|
+
.split(',')
|
|
69
|
+
.map((a) => a.trim().toLowerCase())
|
|
70
|
+
.filter(Boolean));
|
|
71
|
+
this.token = cfg.token && cfg.token.trim() !== '' ? cfg.token.trim() : undefined;
|
|
72
|
+
this.host = (cfg.host && cfg.host.trim() !== '' ? cfg.host.trim() : 'github.com').toLowerCase();
|
|
73
|
+
}
|
|
74
|
+
/** Build a policy from environment variables (defaults to process.env). */
|
|
75
|
+
static fromEnv(env = process.env) {
|
|
76
|
+
return new GitPolicy({
|
|
77
|
+
allowedRepos: env.GIT_ALLOWED_REPOS,
|
|
78
|
+
allowedActions: env.GIT_ALLOWED_ACTIONS,
|
|
79
|
+
token: env.GIT_AUTH_TOKEN,
|
|
80
|
+
host: env.GIT_HOST,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Validate a repo string: format first (blocks injection), then the allow-list.
|
|
85
|
+
* Returns an error message, or null when the repo is acceptable.
|
|
86
|
+
*/
|
|
87
|
+
validateRepo(repo) {
|
|
88
|
+
if (typeof repo !== 'string' || repo.trim() === '') {
|
|
89
|
+
return 'repo is required and must be a string in "owner/repo" format';
|
|
90
|
+
}
|
|
91
|
+
const value = repo.trim();
|
|
92
|
+
if (!REPO_RE.test(value)) {
|
|
93
|
+
return `repo "${value}" is not a valid "owner/repo" identifier (only letters, digits, ., _, - allowed; no shell metacharacters)`;
|
|
94
|
+
}
|
|
95
|
+
if (!this.isRepoAllowed(value)) {
|
|
96
|
+
return `repo "${value}" is not in the GIT_ALLOWED_REPOS allow-list`;
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
/** True if the (already format-valid) repo matches the allow-list. */
|
|
101
|
+
isRepoAllowed(repo) {
|
|
102
|
+
const value = repo.trim().toLowerCase();
|
|
103
|
+
for (const pattern of this.repoPatterns) {
|
|
104
|
+
if (pattern === '*')
|
|
105
|
+
return true;
|
|
106
|
+
if (pattern === value)
|
|
107
|
+
return true;
|
|
108
|
+
if (pattern.endsWith('/*')) {
|
|
109
|
+
const owner = pattern.slice(0, -2);
|
|
110
|
+
if (value.startsWith(owner + '/'))
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
/** Validate a branch / ref name. Returns an error message or null. */
|
|
117
|
+
validateBranch(name) {
|
|
118
|
+
if (name === undefined || name === null || name === '')
|
|
119
|
+
return null; // optional
|
|
120
|
+
if (typeof name !== 'string' || !BRANCH_RE.test(name) || name.includes('..')) {
|
|
121
|
+
return `branch "${String(name)}" is not a valid git ref name`;
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
/** Validate a PR number (must be a positive integer). Returns an error message or null. */
|
|
126
|
+
validatePrNumber(n) {
|
|
127
|
+
const num = typeof n === 'string' && /^\d+$/.test(n) ? Number(n) : n;
|
|
128
|
+
if (!Number.isInteger(num) || num <= 0) {
|
|
129
|
+
return `prNumber "${String(n)}" must be a positive integer`;
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
/** Coerce a validated PR number to an integer (call only after validatePrNumber passes). */
|
|
134
|
+
prNumber(n) {
|
|
135
|
+
return typeof n === 'string' ? Number(n) : n;
|
|
136
|
+
}
|
|
137
|
+
isActionAllowed(action) {
|
|
138
|
+
return this.actions === null || this.actions.has(action);
|
|
139
|
+
}
|
|
140
|
+
/** Returns an error message if the action is blocked, else null. */
|
|
141
|
+
assertAction(action) {
|
|
142
|
+
return this.isActionAllowed(action)
|
|
143
|
+
? null
|
|
144
|
+
: `action "${action}" is not in the GIT_ALLOWED_ACTIONS allow-list`;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Subprocess environment with the auth token + host injected for gh/git.
|
|
148
|
+
* The token rides in env only — never on argv or in a URL.
|
|
149
|
+
*/
|
|
150
|
+
subprocessEnv(base = process.env) {
|
|
151
|
+
const env = { ...base };
|
|
152
|
+
if (this.token) {
|
|
153
|
+
env.GH_TOKEN = this.token;
|
|
154
|
+
env.GITHUB_TOKEN = this.token;
|
|
155
|
+
}
|
|
156
|
+
if (this.host && this.host !== 'github.com') {
|
|
157
|
+
env.GH_HOST = this.host;
|
|
158
|
+
}
|
|
159
|
+
return env;
|
|
160
|
+
}
|
|
161
|
+
/** HTTPS clone URL for an `owner/repo`, host-aware. No token embedded. */
|
|
162
|
+
cloneUrl(repo) {
|
|
163
|
+
return `https://${this.host}/${repo}.git`;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=GitPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GitPolicy.js","sourceRoot":"","sources":["../../src/utils/GitPolicy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Utility Functions
|
|
3
|
+
*
|
|
4
|
+
* Helpers for detecting git repositories and working with git commands.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Checks if a directory is within a git repository
|
|
8
|
+
* @param directory The directory to check
|
|
9
|
+
* @returns true if the directory is in a git repository, false otherwise
|
|
10
|
+
*/
|
|
11
|
+
export declare function isGitRepository(directory: string): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Finds the root directory of a git repository
|
|
14
|
+
* @param directory Starting directory to search from
|
|
15
|
+
* @returns The git repository root path, or null if not in a git repository
|
|
16
|
+
*/
|
|
17
|
+
export declare function findGitRoot(directory: string): string | null;
|
|
18
|
+
//# sourceMappingURL=GitUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GitUtils.d.ts","sourceRoot":"","sources":["../../src/utils/GitUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CA2B1D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAyB5D"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Utility Functions
|
|
3
|
+
*
|
|
4
|
+
* Helpers for detecting git repositories and working with git commands.
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'fs';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
/**
|
|
9
|
+
* Checks if a directory is within a git repository
|
|
10
|
+
* @param directory The directory to check
|
|
11
|
+
* @returns true if the directory is in a git repository, false otherwise
|
|
12
|
+
*/
|
|
13
|
+
export function isGitRepository(directory) {
|
|
14
|
+
try {
|
|
15
|
+
let currentDir = path.resolve(directory);
|
|
16
|
+
while (true) {
|
|
17
|
+
const gitDir = path.join(currentDir, '.git');
|
|
18
|
+
// Check if .git exists (either as directory or file for worktrees)
|
|
19
|
+
if (fs.existsSync(gitDir)) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
const parentDir = path.dirname(currentDir);
|
|
23
|
+
// If we've reached the root directory, stop searching
|
|
24
|
+
if (parentDir === currentDir) {
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
currentDir = parentDir;
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
catch (_error) {
|
|
32
|
+
// If any filesystem error occurs, assume not a git repo
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Finds the root directory of a git repository
|
|
38
|
+
* @param directory Starting directory to search from
|
|
39
|
+
* @returns The git repository root path, or null if not in a git repository
|
|
40
|
+
*/
|
|
41
|
+
export function findGitRoot(directory) {
|
|
42
|
+
try {
|
|
43
|
+
let currentDir = path.resolve(directory);
|
|
44
|
+
while (true) {
|
|
45
|
+
const gitDir = path.join(currentDir, '.git');
|
|
46
|
+
if (fs.existsSync(gitDir)) {
|
|
47
|
+
return currentDir;
|
|
48
|
+
}
|
|
49
|
+
const parentDir = path.dirname(currentDir);
|
|
50
|
+
// If we've reached the root directory, stop searching
|
|
51
|
+
if (parentDir === currentDir) {
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
currentDir = parentDir;
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
catch (_error) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=GitUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GitUtils.js","sourceRoot":"","sources":["../../src/utils/GitUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,IAAI,CAAC;QACH,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEzC,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAE7C,mEAAmE;YACnE,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE3C,sDAAsD;YACtD,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;gBAC7B,MAAM;YACR,CAAC;YAED,UAAU,GAAG,SAAS,CAAC;QACzB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,wDAAwD;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,IAAI,CAAC;QACH,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEzC,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAE7C,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO,UAAU,CAAC;YACpB,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE3C,sDAAsD;YACtD,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;gBAC7B,MAAM;YACR,CAAC;YAED,UAAU,GAAG,SAAS,CAAC;QACzB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SandboxRegistry - File-based persistent sandbox tracking
|
|
3
|
+
*
|
|
4
|
+
* Maintains a registry of all active sandboxes with file persistence.
|
|
5
|
+
* Survives server restarts and enables stateless mode to discover existing sandboxes.
|
|
6
|
+
*
|
|
7
|
+
* Architecture:
|
|
8
|
+
* - Single source of truth: .addon-tools/registry.json
|
|
9
|
+
* - Atomic writes with temp file + rename
|
|
10
|
+
* - Auto-recovery: validates PIDs and ports on load
|
|
11
|
+
* - Thread-safe: file locking for concurrent access
|
|
12
|
+
*/
|
|
13
|
+
export interface SandboxRegistryEntry {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
port: number;
|
|
17
|
+
url: string;
|
|
18
|
+
pid?: number;
|
|
19
|
+
mode: 'oneshot' | 'dev' | 'persistent';
|
|
20
|
+
startTime: string;
|
|
21
|
+
lastActivity: string;
|
|
22
|
+
path: string;
|
|
23
|
+
metadata?: Record<string, any>;
|
|
24
|
+
}
|
|
25
|
+
export interface SandboxRegistryData {
|
|
26
|
+
version: string;
|
|
27
|
+
sandboxes: Record<string, SandboxRegistryEntry>;
|
|
28
|
+
}
|
|
29
|
+
export declare class SandboxRegistry {
|
|
30
|
+
private static instance;
|
|
31
|
+
private registryPath;
|
|
32
|
+
private registryDir;
|
|
33
|
+
private data;
|
|
34
|
+
private saveDebounceTimer;
|
|
35
|
+
private constructor();
|
|
36
|
+
/**
|
|
37
|
+
* Get singleton instance
|
|
38
|
+
*/
|
|
39
|
+
static getInstance(baseDir?: string): SandboxRegistry;
|
|
40
|
+
/**
|
|
41
|
+
* Initialize registry (load from disk or create new)
|
|
42
|
+
*/
|
|
43
|
+
initialize(): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Load registry from disk
|
|
46
|
+
*/
|
|
47
|
+
private load;
|
|
48
|
+
/**
|
|
49
|
+
* Save registry to disk (atomic write)
|
|
50
|
+
*/
|
|
51
|
+
private save;
|
|
52
|
+
/**
|
|
53
|
+
* Save with debouncing (prevents excessive disk writes)
|
|
54
|
+
*/
|
|
55
|
+
private debouncedSave;
|
|
56
|
+
/**
|
|
57
|
+
* Register a new sandbox
|
|
58
|
+
*/
|
|
59
|
+
register(entry: SandboxRegistryEntry): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Update an existing sandbox
|
|
62
|
+
*/
|
|
63
|
+
update(id: string, updates: Partial<SandboxRegistryEntry>): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Remove a sandbox from registry
|
|
66
|
+
*/
|
|
67
|
+
unregister(id: string): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Get a sandbox by ID
|
|
70
|
+
*/
|
|
71
|
+
get(id: string): SandboxRegistryEntry | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* Get sandbox by name (returns first match)
|
|
74
|
+
*/
|
|
75
|
+
getByName(name: string): SandboxRegistryEntry | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Get all sandboxes
|
|
78
|
+
*/
|
|
79
|
+
getAll(): SandboxRegistryEntry[];
|
|
80
|
+
/**
|
|
81
|
+
* Check if a sandbox exists
|
|
82
|
+
*/
|
|
83
|
+
has(id: string): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Clean stale entries (processes that no longer exist)
|
|
86
|
+
*/
|
|
87
|
+
private cleanStaleEntries;
|
|
88
|
+
/**
|
|
89
|
+
* Check if a process is alive
|
|
90
|
+
*/
|
|
91
|
+
private isProcessAlive;
|
|
92
|
+
/**
|
|
93
|
+
* Get registry statistics
|
|
94
|
+
*/
|
|
95
|
+
getStats(): {
|
|
96
|
+
total: number;
|
|
97
|
+
byMode: Record<string, number>;
|
|
98
|
+
oldestSandbox?: SandboxRegistryEntry;
|
|
99
|
+
newestSandbox?: SandboxRegistryEntry;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Export registry for debugging
|
|
103
|
+
*/
|
|
104
|
+
export(): SandboxRegistryData;
|
|
105
|
+
/**
|
|
106
|
+
* Clear all sandboxes (dangerous - use with caution!)
|
|
107
|
+
*/
|
|
108
|
+
clear(): Promise<void>;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=SandboxRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SandboxRegistry.d.ts","sourceRoot":"","sources":["../../src/utils/SandboxRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,YAAY,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CACjD;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,iBAAiB,CAA+B;IAExD,OAAO;IASP;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,eAAe;IAUrD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC;;OAEG;YACW,IAAI;IAiBlB;;OAEG;YACW,IAAI;IAelB;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1D;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/E;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAIjD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAIzD;;OAEG;IACH,MAAM,IAAI,oBAAoB,EAAE;IAIhC;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB;;OAEG;YACW,iBAAiB;IAqB/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,QAAQ,IAAI;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,aAAa,CAAC,EAAE,oBAAoB,CAAC;QACrC,aAAa,CAAC,EAAE,oBAAoB,CAAC;KACtC;IAoBD;;OAEG;IACH,MAAM,IAAI,mBAAmB;IAI7B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SandboxRegistry - File-based persistent sandbox tracking
|
|
3
|
+
*
|
|
4
|
+
* Maintains a registry of all active sandboxes with file persistence.
|
|
5
|
+
* Survives server restarts and enables stateless mode to discover existing sandboxes.
|
|
6
|
+
*
|
|
7
|
+
* Architecture:
|
|
8
|
+
* - Single source of truth: .addon-tools/registry.json
|
|
9
|
+
* - Atomic writes with temp file + rename
|
|
10
|
+
* - Auto-recovery: validates PIDs and ports on load
|
|
11
|
+
* - Thread-safe: file locking for concurrent access
|
|
12
|
+
*/
|
|
13
|
+
import { promises as fs } from 'fs';
|
|
14
|
+
import { join } from 'path';
|
|
15
|
+
import { existsSync } from 'fs';
|
|
16
|
+
export class SandboxRegistry {
|
|
17
|
+
static instance;
|
|
18
|
+
registryPath;
|
|
19
|
+
registryDir;
|
|
20
|
+
data;
|
|
21
|
+
saveDebounceTimer = null;
|
|
22
|
+
constructor(baseDir) {
|
|
23
|
+
this.registryDir = join(baseDir, '.addon-tools');
|
|
24
|
+
this.registryPath = join(this.registryDir, 'registry.json');
|
|
25
|
+
this.data = {
|
|
26
|
+
version: '1.0.0',
|
|
27
|
+
sandboxes: {}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get singleton instance
|
|
32
|
+
*/
|
|
33
|
+
static getInstance(baseDir) {
|
|
34
|
+
if (!SandboxRegistry.instance) {
|
|
35
|
+
if (!baseDir) {
|
|
36
|
+
throw new Error('SandboxRegistry: baseDir required for first initialization');
|
|
37
|
+
}
|
|
38
|
+
SandboxRegistry.instance = new SandboxRegistry(baseDir);
|
|
39
|
+
}
|
|
40
|
+
return SandboxRegistry.instance;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Initialize registry (load from disk or create new)
|
|
44
|
+
*/
|
|
45
|
+
async initialize() {
|
|
46
|
+
// Ensure directory exists
|
|
47
|
+
await fs.mkdir(this.registryDir, { recursive: true });
|
|
48
|
+
// Load existing registry or create new
|
|
49
|
+
if (existsSync(this.registryPath)) {
|
|
50
|
+
await this.load();
|
|
51
|
+
await this.cleanStaleEntries();
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
await this.save();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Load registry from disk
|
|
59
|
+
*/
|
|
60
|
+
async load() {
|
|
61
|
+
try {
|
|
62
|
+
const content = await fs.readFile(this.registryPath, 'utf-8');
|
|
63
|
+
const loaded = JSON.parse(content);
|
|
64
|
+
// Validate version compatibility
|
|
65
|
+
if (loaded.version !== this.data.version) {
|
|
66
|
+
console.warn(`⚠ SandboxRegistry: Version mismatch (expected ${this.data.version}, got ${loaded.version})`);
|
|
67
|
+
}
|
|
68
|
+
this.data = loaded;
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.error(`[ERROR] Failed to load sandbox registry: ${error.message}`);
|
|
72
|
+
// Keep empty registry
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Save registry to disk (atomic write)
|
|
77
|
+
*/
|
|
78
|
+
async save() {
|
|
79
|
+
try {
|
|
80
|
+
const tempPath = `${this.registryPath}.tmp`;
|
|
81
|
+
const content = JSON.stringify(this.data, null, 2);
|
|
82
|
+
// Write to temp file
|
|
83
|
+
await fs.writeFile(tempPath, content, 'utf-8');
|
|
84
|
+
// Atomic rename
|
|
85
|
+
await fs.rename(tempPath, this.registryPath);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
console.error(`[ERROR] Failed to save sandbox registry: ${error.message}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Save with debouncing (prevents excessive disk writes)
|
|
93
|
+
*/
|
|
94
|
+
debouncedSave() {
|
|
95
|
+
if (this.saveDebounceTimer) {
|
|
96
|
+
clearTimeout(this.saveDebounceTimer);
|
|
97
|
+
}
|
|
98
|
+
this.saveDebounceTimer = setTimeout(() => {
|
|
99
|
+
this.save();
|
|
100
|
+
this.saveDebounceTimer = null;
|
|
101
|
+
}, 1000); // Save after 1s of inactivity
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Register a new sandbox
|
|
105
|
+
*/
|
|
106
|
+
async register(entry) {
|
|
107
|
+
this.data.sandboxes[entry.id] = entry;
|
|
108
|
+
await this.save();
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Update an existing sandbox
|
|
112
|
+
*/
|
|
113
|
+
async update(id, updates) {
|
|
114
|
+
const existing = this.data.sandboxes[id];
|
|
115
|
+
if (!existing) {
|
|
116
|
+
throw new Error(`Sandbox ${id} not found in registry`);
|
|
117
|
+
}
|
|
118
|
+
this.data.sandboxes[id] = {
|
|
119
|
+
...existing,
|
|
120
|
+
...updates,
|
|
121
|
+
lastActivity: new Date().toISOString()
|
|
122
|
+
};
|
|
123
|
+
this.debouncedSave();
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Remove a sandbox from registry
|
|
127
|
+
*/
|
|
128
|
+
async unregister(id) {
|
|
129
|
+
delete this.data.sandboxes[id];
|
|
130
|
+
await this.save();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get a sandbox by ID
|
|
134
|
+
*/
|
|
135
|
+
get(id) {
|
|
136
|
+
return this.data.sandboxes[id];
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get sandbox by name (returns first match)
|
|
140
|
+
*/
|
|
141
|
+
getByName(name) {
|
|
142
|
+
return Object.values(this.data.sandboxes).find(s => s.name === name);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get all sandboxes
|
|
146
|
+
*/
|
|
147
|
+
getAll() {
|
|
148
|
+
return Object.values(this.data.sandboxes);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Check if a sandbox exists
|
|
152
|
+
*/
|
|
153
|
+
has(id) {
|
|
154
|
+
return id in this.data.sandboxes;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Clean stale entries (processes that no longer exist)
|
|
158
|
+
*/
|
|
159
|
+
async cleanStaleEntries() {
|
|
160
|
+
const staleIds = [];
|
|
161
|
+
for (const [id, entry] of Object.entries(this.data.sandboxes)) {
|
|
162
|
+
// Check if process still exists
|
|
163
|
+
if (entry.pid && !this.isProcessAlive(entry.pid)) {
|
|
164
|
+
console.log(` Cleaning stale sandbox: ${entry.name} (PID ${entry.pid} not found)`);
|
|
165
|
+
staleIds.push(id);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Remove stale entries
|
|
169
|
+
for (const id of staleIds) {
|
|
170
|
+
delete this.data.sandboxes[id];
|
|
171
|
+
}
|
|
172
|
+
if (staleIds.length > 0) {
|
|
173
|
+
await this.save();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Check if a process is alive
|
|
178
|
+
*/
|
|
179
|
+
isProcessAlive(pid) {
|
|
180
|
+
try {
|
|
181
|
+
// Send signal 0 to check if process exists
|
|
182
|
+
process.kill(pid, 0);
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Get registry statistics
|
|
191
|
+
*/
|
|
192
|
+
getStats() {
|
|
193
|
+
const sandboxes = this.getAll();
|
|
194
|
+
const byMode = {};
|
|
195
|
+
for (const sandbox of sandboxes) {
|
|
196
|
+
byMode[sandbox.mode] = (byMode[sandbox.mode] || 0) + 1;
|
|
197
|
+
}
|
|
198
|
+
const sorted = sandboxes.sort((a, b) => new Date(a.startTime).getTime() - new Date(b.startTime).getTime());
|
|
199
|
+
return {
|
|
200
|
+
total: sandboxes.length,
|
|
201
|
+
byMode,
|
|
202
|
+
oldestSandbox: sorted[0],
|
|
203
|
+
newestSandbox: sorted[sorted.length - 1]
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Export registry for debugging
|
|
208
|
+
*/
|
|
209
|
+
export() {
|
|
210
|
+
return JSON.parse(JSON.stringify(this.data));
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Clear all sandboxes (dangerous - use with caution!)
|
|
214
|
+
*/
|
|
215
|
+
async clear() {
|
|
216
|
+
this.data.sandboxes = {};
|
|
217
|
+
await this.save();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=SandboxRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SandboxRegistry.js","sourceRoot":"","sources":["../../src/utils/SandboxRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Schema Validator
|
|
3
|
+
*
|
|
4
|
+
* Simple validator for tool parameters using JSON Schema
|
|
5
|
+
*/
|
|
6
|
+
import type { ToolSchema } from '@nexus-cortex/types';
|
|
7
|
+
/**
|
|
8
|
+
* Validate parameters against JSON Schema
|
|
9
|
+
*
|
|
10
|
+
* @param schema JSON Schema definition
|
|
11
|
+
* @param params Parameters to validate (mutated in-place for type coercion)
|
|
12
|
+
* @returns Error message if invalid, null if valid
|
|
13
|
+
*/
|
|
14
|
+
export declare function validateSchema(schema: ToolSchema, params: any): string | null;
|
|
15
|
+
/**
|
|
16
|
+
* Schema Validator class (Gemini-CLI-compatible validation patterns)
|
|
17
|
+
*/
|
|
18
|
+
export declare class SchemaValidator {
|
|
19
|
+
static validate(schema: ToolSchema, params: any): string | null;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=SchemaValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaValidator.d.ts","sourceRoot":"","sources":["../../src/utils/SchemaValidator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAiD7E;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI;CAGhE"}
|