@nexus-ai-nexoralabs/cli 0.1.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/.env.example +16 -0
- package/LICENSE +21 -0
- package/README.md +106 -0
- package/dist/api/index.d.ts +81 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +224 -0
- package/dist/api/index.js.map +1 -0
- package/dist/chat/chatService.d.ts +49 -0
- package/dist/chat/chatService.d.ts.map +1 -0
- package/dist/chat/chatService.js +163 -0
- package/dist/chat/chatService.js.map +1 -0
- package/dist/chat/contextBuilder.d.ts +19 -0
- package/dist/chat/contextBuilder.d.ts.map +1 -0
- package/dist/chat/contextBuilder.js +43 -0
- package/dist/chat/contextBuilder.js.map +1 -0
- package/dist/chat/conversationService.d.ts +25 -0
- package/dist/chat/conversationService.d.ts.map +1 -0
- package/dist/chat/conversationService.js +55 -0
- package/dist/chat/conversationService.js.map +1 -0
- package/dist/chat/index.d.ts +6 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +6 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/messageService.d.ts +18 -0
- package/dist/chat/messageService.d.ts.map +1 -0
- package/dist/chat/messageService.js +26 -0
- package/dist/chat/messageService.js.map +1 -0
- package/dist/chat/promptTemplates.d.ts +19 -0
- package/dist/chat/promptTemplates.d.ts.map +1 -0
- package/dist/chat/promptTemplates.js +32 -0
- package/dist/chat/promptTemplates.js.map +1 -0
- package/dist/cli/agentRunner.d.ts +126 -0
- package/dist/cli/agentRunner.d.ts.map +1 -0
- package/dist/cli/agentRunner.js +892 -0
- package/dist/cli/agentRunner.js.map +1 -0
- package/dist/cli/bin.d.ts +14 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +20 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/inputEngine.d.ts +76 -0
- package/dist/cli/inputEngine.d.ts.map +1 -0
- package/dist/cli/inputEngine.js +281 -0
- package/dist/cli/inputEngine.js.map +1 -0
- package/dist/cli/main.d.ts +9 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +144 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/uiFormatters.d.ts +108 -0
- package/dist/cli/uiFormatters.d.ts.map +1 -0
- package/dist/cli/uiFormatters.js +925 -0
- package/dist/cli/uiFormatters.js.map +1 -0
- package/dist/common/logger.d.ts +13 -0
- package/dist/common/logger.d.ts.map +1 -0
- package/dist/common/logger.js +43 -0
- package/dist/common/logger.js.map +1 -0
- package/dist/config/firstRunHealthCheck.d.ts +50 -0
- package/dist/config/firstRunHealthCheck.d.ts.map +1 -0
- package/dist/config/firstRunHealthCheck.js +196 -0
- package/dist/config/firstRunHealthCheck.js.map +1 -0
- package/dist/config/firstRunService.d.ts +53 -0
- package/dist/config/firstRunService.d.ts.map +1 -0
- package/dist/config/firstRunService.js +93 -0
- package/dist/config/firstRunService.js.map +1 -0
- package/dist/config/index.d.ts +30 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +65 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/productionPaths.d.ts +34 -0
- package/dist/config/productionPaths.d.ts.map +1 -0
- package/dist/config/productionPaths.js +95 -0
- package/dist/config/productionPaths.js.map +1 -0
- package/dist/config/workspaceService.d.ts +42 -0
- package/dist/config/workspaceService.d.ts.map +1 -0
- package/dist/config/workspaceService.js +218 -0
- package/dist/config/workspaceService.js.map +1 -0
- package/dist/desktop/appWindow.d.ts +21 -0
- package/dist/desktop/appWindow.d.ts.map +1 -0
- package/dist/desktop/appWindow.js +77 -0
- package/dist/desktop/appWindow.js.map +1 -0
- package/dist/desktop/main.d.ts +14 -0
- package/dist/desktop/main.d.ts.map +1 -0
- package/dist/desktop/main.js +90 -0
- package/dist/desktop/main.js.map +1 -0
- package/dist/desktop/preload.d.ts +14 -0
- package/dist/desktop/preload.d.ts.map +1 -0
- package/dist/desktop/preload.js +20 -0
- package/dist/desktop/preload.js.map +1 -0
- package/dist/intelligence/index.d.ts +33 -0
- package/dist/intelligence/index.d.ts.map +1 -0
- package/dist/intelligence/index.js +82 -0
- package/dist/intelligence/index.js.map +1 -0
- package/dist/intelligence/modelGateway.d.ts +35 -0
- package/dist/intelligence/modelGateway.d.ts.map +1 -0
- package/dist/intelligence/modelGateway.js +123 -0
- package/dist/intelligence/modelGateway.js.map +1 -0
- package/dist/intelligence/modelRegistry.d.ts +17 -0
- package/dist/intelligence/modelRegistry.d.ts.map +1 -0
- package/dist/intelligence/modelRegistry.js +87 -0
- package/dist/intelligence/modelRegistry.js.map +1 -0
- package/dist/intelligence/modelRouter.d.ts +76 -0
- package/dist/intelligence/modelRouter.d.ts.map +1 -0
- package/dist/intelligence/modelRouter.js +256 -0
- package/dist/intelligence/modelRouter.js.map +1 -0
- package/dist/intelligence/ollamaAdapter.d.ts +49 -0
- package/dist/intelligence/ollamaAdapter.d.ts.map +1 -0
- package/dist/intelligence/ollamaAdapter.js +197 -0
- package/dist/intelligence/ollamaAdapter.js.map +1 -0
- package/dist/intelligence/prototype/runPrototype.d.ts +14 -0
- package/dist/intelligence/prototype/runPrototype.d.ts.map +1 -0
- package/dist/intelligence/prototype/runPrototype.js +87 -0
- package/dist/intelligence/prototype/runPrototype.js.map +1 -0
- package/dist/intelligence/providers/embeddedInferenceProvider.d.ts +29 -0
- package/dist/intelligence/providers/embeddedInferenceProvider.d.ts.map +1 -0
- package/dist/intelligence/providers/embeddedInferenceProvider.js +162 -0
- package/dist/intelligence/providers/embeddedInferenceProvider.js.map +1 -0
- package/dist/intelligence/providers/index.d.ts +4 -0
- package/dist/intelligence/providers/index.d.ts.map +1 -0
- package/dist/intelligence/providers/index.js +4 -0
- package/dist/intelligence/providers/index.js.map +1 -0
- package/dist/intelligence/providers/inferenceProvider.d.ts +98 -0
- package/dist/intelligence/providers/inferenceProvider.d.ts.map +1 -0
- package/dist/intelligence/providers/inferenceProvider.js +9 -0
- package/dist/intelligence/providers/inferenceProvider.js.map +1 -0
- package/dist/intelligence/providers/ollamaInferenceProvider.d.ts +17 -0
- package/dist/intelligence/providers/ollamaInferenceProvider.d.ts.map +1 -0
- package/dist/intelligence/providers/ollamaInferenceProvider.js +103 -0
- package/dist/intelligence/providers/ollamaInferenceProvider.js.map +1 -0
- package/dist/intelligence/provisioning/hardwareDetector.d.ts +5 -0
- package/dist/intelligence/provisioning/hardwareDetector.d.ts.map +1 -0
- package/dist/intelligence/provisioning/hardwareDetector.js +48 -0
- package/dist/intelligence/provisioning/hardwareDetector.js.map +1 -0
- package/dist/intelligence/provisioning/index.d.ts +12 -0
- package/dist/intelligence/provisioning/index.d.ts.map +1 -0
- package/dist/intelligence/provisioning/index.js +12 -0
- package/dist/intelligence/provisioning/index.js.map +1 -0
- package/dist/intelligence/provisioning/modelDownloader.d.ts +22 -0
- package/dist/intelligence/provisioning/modelDownloader.d.ts.map +1 -0
- package/dist/intelligence/provisioning/modelDownloader.js +134 -0
- package/dist/intelligence/provisioning/modelDownloader.js.map +1 -0
- package/dist/intelligence/provisioning/modelManifest.d.ts +10 -0
- package/dist/intelligence/provisioning/modelManifest.d.ts.map +1 -0
- package/dist/intelligence/provisioning/modelManifest.js +72 -0
- package/dist/intelligence/provisioning/modelManifest.js.map +1 -0
- package/dist/intelligence/provisioning/modelSelector.d.ts +14 -0
- package/dist/intelligence/provisioning/modelSelector.d.ts.map +1 -0
- package/dist/intelligence/provisioning/modelSelector.js +40 -0
- package/dist/intelligence/provisioning/modelSelector.js.map +1 -0
- package/dist/intelligence/provisioning/modelStorage.d.ts +12 -0
- package/dist/intelligence/provisioning/modelStorage.d.ts.map +1 -0
- package/dist/intelligence/provisioning/modelStorage.js +66 -0
- package/dist/intelligence/provisioning/modelStorage.js.map +1 -0
- package/dist/intelligence/provisioning/modelUpdater.d.ts +29 -0
- package/dist/intelligence/provisioning/modelUpdater.d.ts.map +1 -0
- package/dist/intelligence/provisioning/modelUpdater.js +89 -0
- package/dist/intelligence/provisioning/modelUpdater.js.map +1 -0
- package/dist/intelligence/provisioning/modelVerifier.d.ts +16 -0
- package/dist/intelligence/provisioning/modelVerifier.d.ts.map +1 -0
- package/dist/intelligence/provisioning/modelVerifier.js +108 -0
- package/dist/intelligence/provisioning/modelVerifier.js.map +1 -0
- package/dist/intelligence/provisioning/nativeRuntime.d.ts +18 -0
- package/dist/intelligence/provisioning/nativeRuntime.d.ts.map +1 -0
- package/dist/intelligence/provisioning/nativeRuntime.js +78 -0
- package/dist/intelligence/provisioning/nativeRuntime.js.map +1 -0
- package/dist/intelligence/provisioning/platformDetector.d.ts +15 -0
- package/dist/intelligence/provisioning/platformDetector.d.ts.map +1 -0
- package/dist/intelligence/provisioning/platformDetector.js +40 -0
- package/dist/intelligence/provisioning/platformDetector.js.map +1 -0
- package/dist/intelligence/provisioning/setupState.d.ts +10 -0
- package/dist/intelligence/provisioning/setupState.d.ts.map +1 -0
- package/dist/intelligence/provisioning/setupState.js +59 -0
- package/dist/intelligence/provisioning/setupState.js.map +1 -0
- package/dist/intelligence/provisioning/types.d.ts +51 -0
- package/dist/intelligence/provisioning/types.d.ts.map +1 -0
- package/dist/intelligence/provisioning/types.js +2 -0
- package/dist/intelligence/provisioning/types.js.map +1 -0
- package/dist/intelligence/runtime/embeddedRuntimeAdapter.d.ts +26 -0
- package/dist/intelligence/runtime/embeddedRuntimeAdapter.d.ts.map +1 -0
- package/dist/intelligence/runtime/embeddedRuntimeAdapter.js +119 -0
- package/dist/intelligence/runtime/embeddedRuntimeAdapter.js.map +1 -0
- package/dist/intelligence/runtime/ollamaRuntimeAdapter.d.ts +28 -0
- package/dist/intelligence/runtime/ollamaRuntimeAdapter.d.ts.map +1 -0
- package/dist/intelligence/runtime/ollamaRuntimeAdapter.js +131 -0
- package/dist/intelligence/runtime/ollamaRuntimeAdapter.js.map +1 -0
- package/dist/intelligence/runtime/runtimeManager.d.ts +37 -0
- package/dist/intelligence/runtime/runtimeManager.d.ts.map +1 -0
- package/dist/intelligence/runtime/runtimeManager.js +168 -0
- package/dist/intelligence/runtime/runtimeManager.js.map +1 -0
- package/dist/intelligence/runtime/types.d.ts +56 -0
- package/dist/intelligence/runtime/types.d.ts.map +1 -0
- package/dist/intelligence/runtime/types.js +7 -0
- package/dist/intelligence/runtime/types.js.map +1 -0
- package/dist/knowledge/chunker.d.ts +18 -0
- package/dist/knowledge/chunker.d.ts.map +1 -0
- package/dist/knowledge/chunker.js +55 -0
- package/dist/knowledge/chunker.js.map +1 -0
- package/dist/knowledge/citationService.d.ts +26 -0
- package/dist/knowledge/citationService.d.ts.map +1 -0
- package/dist/knowledge/citationService.js +47 -0
- package/dist/knowledge/citationService.js.map +1 -0
- package/dist/knowledge/embeddings.d.ts +11 -0
- package/dist/knowledge/embeddings.d.ts.map +1 -0
- package/dist/knowledge/embeddings.js +28 -0
- package/dist/knowledge/embeddings.js.map +1 -0
- package/dist/knowledge/hybridSearch.d.ts +13 -0
- package/dist/knowledge/hybridSearch.d.ts.map +1 -0
- package/dist/knowledge/hybridSearch.js +38 -0
- package/dist/knowledge/hybridSearch.js.map +1 -0
- package/dist/knowledge/index.d.ts +25 -0
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +37 -0
- package/dist/knowledge/index.js.map +1 -0
- package/dist/knowledge/parsers.d.ts +20 -0
- package/dist/knowledge/parsers.d.ts.map +1 -0
- package/dist/knowledge/parsers.js +94 -0
- package/dist/knowledge/parsers.js.map +1 -0
- package/dist/knowledge/ragEngine.d.ts +24 -0
- package/dist/knowledge/ragEngine.d.ts.map +1 -0
- package/dist/knowledge/ragEngine.js +121 -0
- package/dist/knowledge/ragEngine.js.map +1 -0
- package/dist/knowledge/reranker.d.ts +10 -0
- package/dist/knowledge/reranker.d.ts.map +1 -0
- package/dist/knowledge/reranker.js +11 -0
- package/dist/knowledge/reranker.js.map +1 -0
- package/dist/knowledge/vectorStore.d.ts +22 -0
- package/dist/knowledge/vectorStore.d.ts.map +1 -0
- package/dist/knowledge/vectorStore.js +74 -0
- package/dist/knowledge/vectorStore.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +113 -0
- package/dist/main.js.map +1 -0
- package/dist/orchestration/agentExecutionService.d.ts +29 -0
- package/dist/orchestration/agentExecutionService.d.ts.map +1 -0
- package/dist/orchestration/agentExecutionService.js +306 -0
- package/dist/orchestration/agentExecutionService.js.map +1 -0
- package/dist/orchestration/agentStateMachine.d.ts +29 -0
- package/dist/orchestration/agentStateMachine.d.ts.map +1 -0
- package/dist/orchestration/agentStateMachine.js +153 -0
- package/dist/orchestration/agentStateMachine.js.map +1 -0
- package/dist/orchestration/agentTaskService.d.ts +44 -0
- package/dist/orchestration/agentTaskService.d.ts.map +1 -0
- package/dist/orchestration/agentTaskService.js +168 -0
- package/dist/orchestration/agentTaskService.js.map +1 -0
- package/dist/orchestration/codingAgentDiscovery.d.ts +32 -0
- package/dist/orchestration/codingAgentDiscovery.d.ts.map +1 -0
- package/dist/orchestration/codingAgentDiscovery.js +148 -0
- package/dist/orchestration/codingAgentDiscovery.js.map +1 -0
- package/dist/orchestration/codingAgentService.d.ts +40 -0
- package/dist/orchestration/codingAgentService.d.ts.map +1 -0
- package/dist/orchestration/codingAgentService.js +319 -0
- package/dist/orchestration/codingAgentService.js.map +1 -0
- package/dist/orchestration/codingAgentTypes.d.ts +111 -0
- package/dist/orchestration/codingAgentTypes.d.ts.map +1 -0
- package/dist/orchestration/codingAgentTypes.js +32 -0
- package/dist/orchestration/codingAgentTypes.js.map +1 -0
- package/dist/orchestration/codingAgentVerifier.d.ts +34 -0
- package/dist/orchestration/codingAgentVerifier.d.ts.map +1 -0
- package/dist/orchestration/codingAgentVerifier.js +109 -0
- package/dist/orchestration/codingAgentVerifier.js.map +1 -0
- package/dist/orchestration/codingRepairService.d.ts +34 -0
- package/dist/orchestration/codingRepairService.d.ts.map +1 -0
- package/dist/orchestration/codingRepairService.js +120 -0
- package/dist/orchestration/codingRepairService.js.map +1 -0
- package/dist/orchestration/goalCompletionVerifier.d.ts +36 -0
- package/dist/orchestration/goalCompletionVerifier.d.ts.map +1 -0
- package/dist/orchestration/goalCompletionVerifier.js +165 -0
- package/dist/orchestration/goalCompletionVerifier.js.map +1 -0
- package/dist/orchestration/humanApprovalService.d.ts +89 -0
- package/dist/orchestration/humanApprovalService.d.ts.map +1 -0
- package/dist/orchestration/humanApprovalService.js +346 -0
- package/dist/orchestration/humanApprovalService.js.map +1 -0
- package/dist/orchestration/index.d.ts +47 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +67 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/planner.d.ts +105 -0
- package/dist/orchestration/planner.d.ts.map +1 -0
- package/dist/orchestration/planner.js +692 -0
- package/dist/orchestration/planner.js.map +1 -0
- package/dist/orchestration/types.d.ts +109 -0
- package/dist/orchestration/types.d.ts.map +1 -0
- package/dist/orchestration/types.js +20 -0
- package/dist/orchestration/types.js.map +1 -0
- package/dist/preview/previewServer.d.ts +39 -0
- package/dist/preview/previewServer.d.ts.map +1 -0
- package/dist/preview/previewServer.js +228 -0
- package/dist/preview/previewServer.js.map +1 -0
- package/dist/preview/previewService.d.ts +43 -0
- package/dist/preview/previewService.d.ts.map +1 -0
- package/dist/preview/previewService.js +289 -0
- package/dist/preview/previewService.js.map +1 -0
- package/dist/preview/previewTypes.d.ts +35 -0
- package/dist/preview/previewTypes.d.ts.map +1 -0
- package/dist/preview/previewTypes.js +5 -0
- package/dist/preview/previewTypes.js.map +1 -0
- package/dist/storage/database.d.ts +12 -0
- package/dist/storage/database.d.ts.map +1 -0
- package/dist/storage/database.js +46 -0
- package/dist/storage/database.js.map +1 -0
- package/dist/storage/health.d.ts +17 -0
- package/dist/storage/health.d.ts.map +1 -0
- package/dist/storage/health.js +48 -0
- package/dist/storage/health.js.map +1 -0
- package/dist/storage/index.d.ts +45 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +96 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/migration.d.ts +17 -0
- package/dist/storage/migration.d.ts.map +1 -0
- package/dist/storage/migration.js +354 -0
- package/dist/storage/migration.js.map +1 -0
- package/dist/storage/projectService.d.ts +19 -0
- package/dist/storage/projectService.d.ts.map +1 -0
- package/dist/storage/projectService.js +29 -0
- package/dist/storage/projectService.js.map +1 -0
- package/dist/storage/repositories/agentTaskRepository.d.ts +34 -0
- package/dist/storage/repositories/agentTaskRepository.d.ts.map +1 -0
- package/dist/storage/repositories/agentTaskRepository.js +128 -0
- package/dist/storage/repositories/agentTaskRepository.js.map +1 -0
- package/dist/storage/repositories/approvalRepository.d.ts +20 -0
- package/dist/storage/repositories/approvalRepository.d.ts.map +1 -0
- package/dist/storage/repositories/approvalRepository.js +116 -0
- package/dist/storage/repositories/approvalRepository.js.map +1 -0
- package/dist/storage/repositories/conversationRepository.d.ts +16 -0
- package/dist/storage/repositories/conversationRepository.d.ts.map +1 -0
- package/dist/storage/repositories/conversationRepository.js +50 -0
- package/dist/storage/repositories/conversationRepository.js.map +1 -0
- package/dist/storage/repositories/knowledgeRepository.d.ts +109 -0
- package/dist/storage/repositories/knowledgeRepository.d.ts.map +1 -0
- package/dist/storage/repositories/knowledgeRepository.js +177 -0
- package/dist/storage/repositories/knowledgeRepository.js.map +1 -0
- package/dist/storage/repositories/messageRepository.d.ts +13 -0
- package/dist/storage/repositories/messageRepository.d.ts.map +1 -0
- package/dist/storage/repositories/messageRepository.js +39 -0
- package/dist/storage/repositories/messageRepository.js.map +1 -0
- package/dist/storage/repositories/modelsRepository.d.ts +39 -0
- package/dist/storage/repositories/modelsRepository.d.ts.map +1 -0
- package/dist/storage/repositories/modelsRepository.js +92 -0
- package/dist/storage/repositories/modelsRepository.js.map +1 -0
- package/dist/storage/repositories/projectRepository.d.ts +14 -0
- package/dist/storage/repositories/projectRepository.d.ts.map +1 -0
- package/dist/storage/repositories/projectRepository.js +44 -0
- package/dist/storage/repositories/projectRepository.js.map +1 -0
- package/dist/storage/repositories/settingsRepository.d.ts +10 -0
- package/dist/storage/repositories/settingsRepository.d.ts.map +1 -0
- package/dist/storage/repositories/settingsRepository.js +27 -0
- package/dist/storage/repositories/settingsRepository.js.map +1 -0
- package/dist/storage/repositories/types.d.ts +56 -0
- package/dist/storage/repositories/types.d.ts.map +1 -0
- package/dist/storage/repositories/types.js +2 -0
- package/dist/storage/repositories/types.js.map +1 -0
- package/dist/tools/adapters/filesystemAdapter.d.ts +121 -0
- package/dist/tools/adapters/filesystemAdapter.d.ts.map +1 -0
- package/dist/tools/adapters/filesystemAdapter.js +808 -0
- package/dist/tools/adapters/filesystemAdapter.js.map +1 -0
- package/dist/tools/adapters/terminalAdapter.d.ts +67 -0
- package/dist/tools/adapters/terminalAdapter.d.ts.map +1 -0
- package/dist/tools/adapters/terminalAdapter.js +487 -0
- package/dist/tools/adapters/terminalAdapter.js.map +1 -0
- package/dist/tools/adapters/terminalCommandPolicy.d.ts +44 -0
- package/dist/tools/adapters/terminalCommandPolicy.d.ts.map +1 -0
- package/dist/tools/adapters/terminalCommandPolicy.js +422 -0
- package/dist/tools/adapters/terminalCommandPolicy.js.map +1 -0
- package/dist/tools/adapters/terminalTypes.d.ts +111 -0
- package/dist/tools/adapters/terminalTypes.d.ts.map +1 -0
- package/dist/tools/adapters/terminalTypes.js +26 -0
- package/dist/tools/adapters/terminalTypes.js.map +1 -0
- package/dist/tools/approvalGate.d.ts +24 -0
- package/dist/tools/approvalGate.d.ts.map +1 -0
- package/dist/tools/approvalGate.js +137 -0
- package/dist/tools/approvalGate.js.map +1 -0
- package/dist/tools/approvalPolicyEngine.d.ts +32 -0
- package/dist/tools/approvalPolicyEngine.d.ts.map +1 -0
- package/dist/tools/approvalPolicyEngine.js +141 -0
- package/dist/tools/approvalPolicyEngine.js.map +1 -0
- package/dist/tools/approvalTypes.d.ts +67 -0
- package/dist/tools/approvalTypes.d.ts.map +1 -0
- package/dist/tools/approvalTypes.js +23 -0
- package/dist/tools/approvalTypes.js.map +1 -0
- package/dist/tools/index.d.ts +72 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +353 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/permissionEngine.d.ts +27 -0
- package/dist/tools/permissionEngine.d.ts.map +1 -0
- package/dist/tools/permissionEngine.js +130 -0
- package/dist/tools/permissionEngine.js.map +1 -0
- package/dist/tools/toolExecutor.d.ts +37 -0
- package/dist/tools/toolExecutor.d.ts.map +1 -0
- package/dist/tools/toolExecutor.js +440 -0
- package/dist/tools/toolExecutor.js.map +1 -0
- package/dist/tools/toolRegistry.d.ts +34 -0
- package/dist/tools/toolRegistry.d.ts.map +1 -0
- package/dist/tools/toolRegistry.js +92 -0
- package/dist/tools/toolRegistry.js.map +1 -0
- package/dist/tools/types.d.ts +82 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +33 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/ui/public/app.js +777 -0
- package/dist/ui/public/index.html +117 -0
- package/dist/ui/public/styles.css +413 -0
- package/dist/ui/server.d.ts +27 -0
- package/dist/ui/server.d.ts.map +1 -0
- package/dist/ui/server.js +373 -0
- package/dist/ui/server.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import { ToolRegistry } from './toolRegistry.js';
|
|
2
|
+
import { PermissionEngine } from './permissionEngine.js';
|
|
3
|
+
import { ToolExecutor } from './toolExecutor.js';
|
|
4
|
+
import { Logger } from '../common/logger.js';
|
|
5
|
+
export * from './types.js';
|
|
6
|
+
export * from './approvalTypes.js';
|
|
7
|
+
export * from './adapters/terminalTypes.js';
|
|
8
|
+
export { ToolRegistry } from './toolRegistry.js';
|
|
9
|
+
export { PermissionEngine } from './permissionEngine.js';
|
|
10
|
+
export { ToolExecutor } from './toolExecutor.js';
|
|
11
|
+
export { ApprovalPolicyEngine } from './approvalPolicyEngine.js';
|
|
12
|
+
export { ApprovalGate } from './approvalGate.js';
|
|
13
|
+
export { FilesystemAdapter, ReadonlyFilesystemAdapter, calculateContentHash, isSecretFile, generateUnifiedDiff } from './adapters/filesystemAdapter.js';
|
|
14
|
+
export { TerminalAdapter, buildSanitizedEnv, validateWorkspaceCwd } from './adapters/terminalAdapter.js';
|
|
15
|
+
export { TerminalCommandPolicy } from './adapters/terminalCommandPolicy.js';
|
|
16
|
+
export const READONLY_FILESYSTEM_TOOL_DEFINITION = {
|
|
17
|
+
id: 'filesystem_read',
|
|
18
|
+
name: 'Workspace File Reader',
|
|
19
|
+
description: 'Safely reads content of files located strictly inside the configured workspace sandbox. READ-ONLY file content inspection. Cannot modify files or create directories.',
|
|
20
|
+
version: '1.0.0',
|
|
21
|
+
category: 'filesystem',
|
|
22
|
+
riskLevel: 'low',
|
|
23
|
+
requiredPermissions: ['filesystem.read'],
|
|
24
|
+
inputSchema: {
|
|
25
|
+
relativePath: {
|
|
26
|
+
type: 'string',
|
|
27
|
+
description: 'Workspace-relative path of file to read',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
enabled: true,
|
|
31
|
+
};
|
|
32
|
+
export const WORKSPACE_TREE_TOOL_DEFINITION = {
|
|
33
|
+
id: 'workspace_tree',
|
|
34
|
+
name: 'Workspace Directory Tree Explorer',
|
|
35
|
+
description: 'Returns a safe, bounded metadata representation of the workspace/project directory tree. READ-ONLY directory/workspace inspection. Strictly read-only: cannot create directories, cannot modify files, cannot create files.',
|
|
36
|
+
version: '1.0.0',
|
|
37
|
+
category: 'filesystem',
|
|
38
|
+
riskLevel: 'low',
|
|
39
|
+
requiredPermissions: ['filesystem.read'],
|
|
40
|
+
inputSchema: {
|
|
41
|
+
path: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
description: 'Workspace-relative directory path to explore (default ".")',
|
|
44
|
+
},
|
|
45
|
+
maxDepth: {
|
|
46
|
+
type: 'number',
|
|
47
|
+
description: 'Maximum directory traversal depth (default 5)',
|
|
48
|
+
},
|
|
49
|
+
maxEntries: {
|
|
50
|
+
type: 'number',
|
|
51
|
+
description: 'Maximum total entries to return (default 500)',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
enabled: true,
|
|
55
|
+
};
|
|
56
|
+
export const CODE_SEARCH_TOOL_DEFINITION = {
|
|
57
|
+
id: 'code_search',
|
|
58
|
+
name: 'Workspace Code Base Search',
|
|
59
|
+
description: 'Searches source files within the workspace using deterministic text matching. READ-ONLY source/code search. Cannot modify files or create directories.',
|
|
60
|
+
version: '1.0.0',
|
|
61
|
+
category: 'filesystem',
|
|
62
|
+
riskLevel: 'low',
|
|
63
|
+
requiredPermissions: ['filesystem.read'],
|
|
64
|
+
inputSchema: {
|
|
65
|
+
query: {
|
|
66
|
+
type: 'string',
|
|
67
|
+
description: 'Text query to search for in source files',
|
|
68
|
+
},
|
|
69
|
+
path: {
|
|
70
|
+
type: 'string',
|
|
71
|
+
description: 'Workspace-relative path to search within (default ".")',
|
|
72
|
+
},
|
|
73
|
+
maxResults: {
|
|
74
|
+
type: 'number',
|
|
75
|
+
description: 'Maximum matching results to return (default 50)',
|
|
76
|
+
},
|
|
77
|
+
fileExtensions: {
|
|
78
|
+
type: 'array',
|
|
79
|
+
description: 'Optional list of file extensions to filter by (e.g. [".ts", ".js"])',
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
enabled: true,
|
|
83
|
+
};
|
|
84
|
+
export const FILESYSTEM_WRITE_TOOL_DEFINITION = {
|
|
85
|
+
id: 'filesystem_write',
|
|
86
|
+
name: 'Workspace File Writer',
|
|
87
|
+
description: 'Creates or replaces a file strictly inside the configured workspace sandbox. CREATE/REPLACE file operation. Medium risk, approval required according to P5-F policy.',
|
|
88
|
+
version: '1.0.0',
|
|
89
|
+
category: 'filesystem',
|
|
90
|
+
riskLevel: 'medium',
|
|
91
|
+
requiredPermissions: ['filesystem.write'],
|
|
92
|
+
inputSchema: {
|
|
93
|
+
path: {
|
|
94
|
+
type: 'string',
|
|
95
|
+
description: 'Workspace-relative target file path',
|
|
96
|
+
},
|
|
97
|
+
content: {
|
|
98
|
+
type: 'string',
|
|
99
|
+
description: 'Content to write into the file',
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
enabled: true,
|
|
103
|
+
};
|
|
104
|
+
export const FILESYSTEM_EDIT_TOOL_DEFINITION = {
|
|
105
|
+
id: 'filesystem_edit',
|
|
106
|
+
name: 'Workspace File Editor',
|
|
107
|
+
description: 'Applies a deterministic, hash-verified edit to an existing file in the workspace. MODIFY existing file operation. Medium risk, approval required according to P5-F policy.',
|
|
108
|
+
version: '1.0.0',
|
|
109
|
+
category: 'filesystem',
|
|
110
|
+
riskLevel: 'medium',
|
|
111
|
+
requiredPermissions: ['filesystem.write'],
|
|
112
|
+
inputSchema: {
|
|
113
|
+
path: {
|
|
114
|
+
type: 'string',
|
|
115
|
+
description: 'Workspace-relative target file path',
|
|
116
|
+
},
|
|
117
|
+
expectedContentHash: {
|
|
118
|
+
type: 'string',
|
|
119
|
+
description: 'SHA-256 hash of expected current file content',
|
|
120
|
+
},
|
|
121
|
+
oldText: {
|
|
122
|
+
type: 'string',
|
|
123
|
+
description: 'Exact text to replace',
|
|
124
|
+
},
|
|
125
|
+
newText: {
|
|
126
|
+
type: 'string',
|
|
127
|
+
description: 'Replacement text',
|
|
128
|
+
},
|
|
129
|
+
replaceMode: {
|
|
130
|
+
type: 'string',
|
|
131
|
+
description: 'Replacement mode: "single" (default)',
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
enabled: true,
|
|
135
|
+
};
|
|
136
|
+
export const TERMINAL_EXECUTE_TOOL_DEFINITION = {
|
|
137
|
+
id: 'terminal_execute',
|
|
138
|
+
name: 'Bounded Terminal Execution Adapter',
|
|
139
|
+
description: 'Executes an explicitly allowed development command inside the configured workspace. High risk, bounded, approval-controlled. Never bypasses PermissionEngine or ApprovalGate.',
|
|
140
|
+
version: '1.0.0',
|
|
141
|
+
category: 'terminal',
|
|
142
|
+
riskLevel: 'high',
|
|
143
|
+
requiredPermissions: ['terminal.execute'],
|
|
144
|
+
inputSchema: {
|
|
145
|
+
command: {
|
|
146
|
+
type: 'string',
|
|
147
|
+
description: 'The executable to run (e.g. "npm", "git", "node")',
|
|
148
|
+
},
|
|
149
|
+
args: {
|
|
150
|
+
type: 'array',
|
|
151
|
+
description: 'Array of command arguments',
|
|
152
|
+
},
|
|
153
|
+
cwd: {
|
|
154
|
+
type: 'string',
|
|
155
|
+
description: 'Optional workspace-relative working directory',
|
|
156
|
+
},
|
|
157
|
+
timeoutMs: {
|
|
158
|
+
type: 'number',
|
|
159
|
+
description: 'Execution timeout in milliseconds (default 30000)',
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
enabled: true,
|
|
163
|
+
};
|
|
164
|
+
export class ToolGateway {
|
|
165
|
+
initialized = false;
|
|
166
|
+
workspaceRoot = './workspace';
|
|
167
|
+
registry;
|
|
168
|
+
permissionEngine;
|
|
169
|
+
executor = null;
|
|
170
|
+
taskService = null;
|
|
171
|
+
logger;
|
|
172
|
+
logLevel;
|
|
173
|
+
constructor(policy, logLevel = 'info') {
|
|
174
|
+
this.logLevel = logLevel;
|
|
175
|
+
this.logger = new Logger('ToolGateway', logLevel);
|
|
176
|
+
this.registry = new ToolRegistry(logLevel);
|
|
177
|
+
this.permissionEngine = new PermissionEngine(this.registry, policy, logLevel);
|
|
178
|
+
}
|
|
179
|
+
async initialize(taskService, workspaceRoot = './workspace') {
|
|
180
|
+
this.workspaceRoot = workspaceRoot;
|
|
181
|
+
if (taskService) {
|
|
182
|
+
this.taskService = taskService;
|
|
183
|
+
}
|
|
184
|
+
// Automatically register tools if not registered
|
|
185
|
+
if (!this.registry.isRegistered(READONLY_FILESYSTEM_TOOL_DEFINITION.id)) {
|
|
186
|
+
this.registry.registerTool(READONLY_FILESYSTEM_TOOL_DEFINITION);
|
|
187
|
+
}
|
|
188
|
+
if (!this.registry.isRegistered(WORKSPACE_TREE_TOOL_DEFINITION.id)) {
|
|
189
|
+
this.registry.registerTool(WORKSPACE_TREE_TOOL_DEFINITION);
|
|
190
|
+
}
|
|
191
|
+
if (!this.registry.isRegistered(CODE_SEARCH_TOOL_DEFINITION.id)) {
|
|
192
|
+
this.registry.registerTool(CODE_SEARCH_TOOL_DEFINITION);
|
|
193
|
+
}
|
|
194
|
+
if (!this.registry.isRegistered(FILESYSTEM_WRITE_TOOL_DEFINITION.id)) {
|
|
195
|
+
this.registry.registerTool(FILESYSTEM_WRITE_TOOL_DEFINITION);
|
|
196
|
+
}
|
|
197
|
+
if (!this.registry.isRegistered(FILESYSTEM_EDIT_TOOL_DEFINITION.id)) {
|
|
198
|
+
this.registry.registerTool(FILESYSTEM_EDIT_TOOL_DEFINITION);
|
|
199
|
+
}
|
|
200
|
+
if (!this.registry.isRegistered(TERMINAL_EXECUTE_TOOL_DEFINITION.id)) {
|
|
201
|
+
this.registry.registerTool(TERMINAL_EXECUTE_TOOL_DEFINITION);
|
|
202
|
+
}
|
|
203
|
+
// Initialize tool executor with workspace sandbox root
|
|
204
|
+
this.executor = new ToolExecutor(workspaceRoot, 2 * 1024 * 1024, this.logLevel);
|
|
205
|
+
this.initialized = true;
|
|
206
|
+
this.logger.info(`ToolGateway & security policy engine fully initialized with workspace root: '${workspaceRoot}'`);
|
|
207
|
+
return this.getStatus();
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Register a tool definition with the central registry.
|
|
211
|
+
*/
|
|
212
|
+
registerTool(definition) {
|
|
213
|
+
this.registry.registerTool(definition);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Retrieve a registered tool by ID.
|
|
217
|
+
*/
|
|
218
|
+
getTool(id) {
|
|
219
|
+
return this.registry.getTool(id);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Get workspace root directory path.
|
|
223
|
+
*/
|
|
224
|
+
getWorkspaceRoot() {
|
|
225
|
+
return this.executor?.getWorkspaceRoot() || this.workspaceRoot;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* List all registered tools.
|
|
229
|
+
*/
|
|
230
|
+
listTools() {
|
|
231
|
+
return this.registry.listTools();
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Authorize a tool invocation request against security policy and registry.
|
|
235
|
+
* NOTE: Returns authorization status ONLY. Does NOT execute code.
|
|
236
|
+
*/
|
|
237
|
+
authorizeInvocation(request) {
|
|
238
|
+
const taskExistsFn = this.taskService
|
|
239
|
+
? (taskId) => {
|
|
240
|
+
try {
|
|
241
|
+
return !!this.taskService?.getTask(taskId);
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
: undefined;
|
|
248
|
+
const authResult = this.permissionEngine.authorize(request, taskExistsFn);
|
|
249
|
+
return {
|
|
250
|
+
requestId: authResult.requestId,
|
|
251
|
+
taskId: authResult.taskId,
|
|
252
|
+
toolId: authResult.toolId,
|
|
253
|
+
authorized: authResult.allowed,
|
|
254
|
+
decision: authResult.decision,
|
|
255
|
+
reason: authResult.reason,
|
|
256
|
+
timestamp: authResult.timestamp,
|
|
257
|
+
executed: false,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Execute an authorized tool request through the secure execution pipeline:
|
|
262
|
+
* Agent Task -> Tool Invocation Request -> Tool Registry -> Permission Engine -> Authorization -> Workspace Validation -> Adapter -> Result.
|
|
263
|
+
*
|
|
264
|
+
* SECURITY GUARANTEE: If authorization is DENIED, execution is NEVER attempted.
|
|
265
|
+
*/
|
|
266
|
+
executeTool(request) {
|
|
267
|
+
const timestamp = new Date().toISOString();
|
|
268
|
+
// STEP 1: Mandatory P5-B Authorization Check
|
|
269
|
+
const authResult = this.authorizeInvocation({
|
|
270
|
+
requestId: request.requestId,
|
|
271
|
+
taskId: request.taskId,
|
|
272
|
+
toolId: request.toolId,
|
|
273
|
+
requestedCapabilities: request.requestedCapabilities,
|
|
274
|
+
inputMetadata: request.params,
|
|
275
|
+
});
|
|
276
|
+
// STEP 2: Strict Authorization Gate — NO AUTHORIZATION => NO EXECUTION!
|
|
277
|
+
if (!authResult.authorized) {
|
|
278
|
+
this.logger.warn(`Tool execution blocked: authorization denied`, {
|
|
279
|
+
requestId: request.requestId,
|
|
280
|
+
taskId: request.taskId,
|
|
281
|
+
toolId: request.toolId,
|
|
282
|
+
reason: authResult.reason,
|
|
283
|
+
});
|
|
284
|
+
return {
|
|
285
|
+
requestId: request.requestId,
|
|
286
|
+
taskId: request.taskId,
|
|
287
|
+
toolId: request.toolId,
|
|
288
|
+
authorized: false,
|
|
289
|
+
executed: false, // NO EXECUTION OCCURRED!
|
|
290
|
+
success: false,
|
|
291
|
+
decision: authResult.decision,
|
|
292
|
+
errorCategory: 'PERMISSION_DENIED',
|
|
293
|
+
errorMessage: authResult.reason,
|
|
294
|
+
timestamp,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
// STEP 3: Execute tool via Executor
|
|
298
|
+
if (!this.executor) {
|
|
299
|
+
return {
|
|
300
|
+
requestId: request.requestId,
|
|
301
|
+
taskId: request.taskId,
|
|
302
|
+
toolId: request.toolId,
|
|
303
|
+
authorized: true,
|
|
304
|
+
executed: false,
|
|
305
|
+
success: false,
|
|
306
|
+
decision: 'ALLOWED',
|
|
307
|
+
errorCategory: 'EXECUTOR_UNINITIALIZED',
|
|
308
|
+
errorMessage: 'ToolGateway executor is uninitialized. Call initialize() first.',
|
|
309
|
+
timestamp,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
const execResult = this.executor.execute(request);
|
|
313
|
+
if (execResult instanceof Promise) {
|
|
314
|
+
return execResult.then((res) => ({
|
|
315
|
+
requestId: res.requestId,
|
|
316
|
+
taskId: res.taskId,
|
|
317
|
+
toolId: res.toolId,
|
|
318
|
+
authorized: true,
|
|
319
|
+
executed: res.executed,
|
|
320
|
+
success: res.success,
|
|
321
|
+
decision: 'ALLOWED',
|
|
322
|
+
errorCategory: res.errorCategory,
|
|
323
|
+
errorMessage: res.errorMessage,
|
|
324
|
+
output: res.output,
|
|
325
|
+
timestamp: res.timestamp,
|
|
326
|
+
}));
|
|
327
|
+
}
|
|
328
|
+
return {
|
|
329
|
+
requestId: execResult.requestId,
|
|
330
|
+
taskId: execResult.taskId,
|
|
331
|
+
toolId: execResult.toolId,
|
|
332
|
+
authorized: true,
|
|
333
|
+
executed: execResult.executed,
|
|
334
|
+
success: execResult.success,
|
|
335
|
+
decision: 'ALLOWED',
|
|
336
|
+
errorCategory: execResult.errorCategory,
|
|
337
|
+
errorMessage: execResult.errorMessage,
|
|
338
|
+
output: execResult.output,
|
|
339
|
+
timestamp: execResult.timestamp,
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
getStatus() {
|
|
343
|
+
return {
|
|
344
|
+
name: 'ToolGateway',
|
|
345
|
+
initialized: this.initialized,
|
|
346
|
+
status: this.initialized ? 'ok' : 'degraded',
|
|
347
|
+
message: this.initialized
|
|
348
|
+
? `Tool gateway & security policy engine ready (${this.registry.listTools().length} tools registered)`
|
|
349
|
+
: 'Uninitialized',
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ToolRegistry } from './toolRegistry.js';
|
|
2
|
+
import type { ToolInvocationRequest, AuthorizationResult, PermissionPolicy } from './types.js';
|
|
3
|
+
import { LogLevel } from '../common/logger.js';
|
|
4
|
+
export declare class PermissionEngine {
|
|
5
|
+
private registry;
|
|
6
|
+
private logger;
|
|
7
|
+
private policy;
|
|
8
|
+
constructor(registry: ToolRegistry, policy?: PermissionPolicy, logLevel?: LogLevel);
|
|
9
|
+
/**
|
|
10
|
+
* Get current active permission policy.
|
|
11
|
+
*/
|
|
12
|
+
getPolicy(): PermissionPolicy;
|
|
13
|
+
/**
|
|
14
|
+
* Update active permission policy.
|
|
15
|
+
*/
|
|
16
|
+
setPolicy(policy: PermissionPolicy): void;
|
|
17
|
+
/**
|
|
18
|
+
* Authorize a tool invocation request against the registry and security policy.
|
|
19
|
+
*
|
|
20
|
+
* @param request The tool invocation request.
|
|
21
|
+
* @param taskExistsFn Optional callback to verify if the referenced task ID exists.
|
|
22
|
+
* @returns Deterministic AuthorizationResult.
|
|
23
|
+
*/
|
|
24
|
+
authorize(request: ToolInvocationRequest, taskExistsFn?: (taskId: string) => boolean): AuthorizationResult;
|
|
25
|
+
private deny;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=permissionEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissionEngine.d.ts","sourceRoot":"","sources":["../../src/tools/permissionEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAMpB,OAAO,EAAU,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEvD,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,QAAQ;IAJlB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAmB;gBAGvB,QAAQ,EAAE,YAAY,EAC9B,MAAM,GAAE,gBAA4C,EACpD,QAAQ,GAAE,QAAiB;IAM7B;;OAEG;IACH,SAAS,IAAI,gBAAgB;IAI7B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAKzC;;;;;;OAMG;IACH,SAAS,CACP,OAAO,EAAE,qBAAqB,EAC9B,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,GACzC,mBAAmB;IA+JtB,OAAO,CAAC,IAAI;CA+Bb"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { DEFAULT_PERMISSION_POLICY, VALID_CAPABILITIES, RISK_LEVEL_ORDER, } from './types.js';
|
|
2
|
+
import { Logger } from '../common/logger.js';
|
|
3
|
+
export class PermissionEngine {
|
|
4
|
+
registry;
|
|
5
|
+
logger;
|
|
6
|
+
policy;
|
|
7
|
+
constructor(registry, policy = DEFAULT_PERMISSION_POLICY, logLevel = 'info') {
|
|
8
|
+
this.registry = registry;
|
|
9
|
+
this.logger = new Logger('PermissionEngine', logLevel);
|
|
10
|
+
this.policy = policy;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get current active permission policy.
|
|
14
|
+
*/
|
|
15
|
+
getPolicy() {
|
|
16
|
+
return { ...this.policy, allowedCapabilities: [...this.policy.allowedCapabilities] };
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Update active permission policy.
|
|
20
|
+
*/
|
|
21
|
+
setPolicy(policy) {
|
|
22
|
+
this.policy = { ...policy, allowedCapabilities: [...policy.allowedCapabilities] };
|
|
23
|
+
this.logger.info(`Updated permission policy`, { policyId: policy.id, maxRisk: policy.maxRiskLevel });
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Authorize a tool invocation request against the registry and security policy.
|
|
27
|
+
*
|
|
28
|
+
* @param request The tool invocation request.
|
|
29
|
+
* @param taskExistsFn Optional callback to verify if the referenced task ID exists.
|
|
30
|
+
* @returns Deterministic AuthorizationResult.
|
|
31
|
+
*/
|
|
32
|
+
authorize(request, taskExistsFn) {
|
|
33
|
+
const timestamp = new Date().toISOString();
|
|
34
|
+
// 1. Structure validation
|
|
35
|
+
if (!request ||
|
|
36
|
+
!request.requestId ||
|
|
37
|
+
!request.taskId ||
|
|
38
|
+
!request.toolId ||
|
|
39
|
+
!Array.isArray(request.requestedCapabilities)) {
|
|
40
|
+
return this.deny(request?.requestId || 'unknown', request?.taskId || 'unknown', request?.toolId || 'unknown', request?.requestedCapabilities || [], 'INVALID_REQUEST: Invocation request is missing required fields (requestId, taskId, toolId, or requestedCapabilities).', timestamp);
|
|
41
|
+
}
|
|
42
|
+
// 2. Task identity verification
|
|
43
|
+
if (taskExistsFn && !taskExistsFn(request.taskId)) {
|
|
44
|
+
return this.deny(request.requestId, request.taskId, request.toolId, request.requestedCapabilities, `UNKNOWN_TASK: Agent task '${request.taskId}' does not exist or is invalid.`, timestamp);
|
|
45
|
+
}
|
|
46
|
+
// 3. Unknown capability check
|
|
47
|
+
for (const cap of request.requestedCapabilities) {
|
|
48
|
+
if (!VALID_CAPABILITIES.has(cap)) {
|
|
49
|
+
return this.deny(request.requestId, request.taskId, request.toolId, request.requestedCapabilities, `UNKNOWN_CAPABILITY: Requested capability '${cap}' is not a recognized system capability.`, timestamp);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// 4. Tool registration check
|
|
53
|
+
const tool = this.registry.getTool(request.toolId);
|
|
54
|
+
if (!tool) {
|
|
55
|
+
return this.deny(request.requestId, request.taskId, request.toolId, request.requestedCapabilities, `UNKNOWN_TOOL: Tool '${request.toolId}' is not registered in the ToolRegistry.`, timestamp);
|
|
56
|
+
}
|
|
57
|
+
// 5. Tool enabled state check
|
|
58
|
+
if (!tool.enabled && !this.policy.allowDisabledTools) {
|
|
59
|
+
return this.deny(request.requestId, request.taskId, request.toolId, request.requestedCapabilities, `DISABLED_TOOL: Tool '${request.toolId}' is currently disabled.`, timestamp, tool.riskLevel);
|
|
60
|
+
}
|
|
61
|
+
// 6. Risk level check against policy
|
|
62
|
+
const toolRisk = RISK_LEVEL_ORDER[tool.riskLevel] ?? 4;
|
|
63
|
+
const policyMaxRisk = RISK_LEVEL_ORDER[this.policy.maxRiskLevel] ?? 3;
|
|
64
|
+
if (toolRisk > policyMaxRisk) {
|
|
65
|
+
return this.deny(request.requestId, request.taskId, request.toolId, request.requestedCapabilities, `EXCEEDS_POLICY_RISK: Tool risk level '${tool.riskLevel}' exceeds policy limit '${this.policy.maxRiskLevel}'.`, timestamp, tool.riskLevel);
|
|
66
|
+
}
|
|
67
|
+
// 7. Permission policy allowed capabilities check
|
|
68
|
+
const policyAllowedSet = new Set(this.policy.allowedCapabilities);
|
|
69
|
+
for (const cap of request.requestedCapabilities) {
|
|
70
|
+
if (!policyAllowedSet.has(cap)) {
|
|
71
|
+
return this.deny(request.requestId, request.taskId, request.toolId, request.requestedCapabilities, `MISSING_PERMISSION: Capability '${cap}' is not allowed under policy '${this.policy.id}'.`, timestamp, tool.riskLevel);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// 8. Tool declared capabilities check (requested capability must be declared by tool AND request must satisfy tool required permissions)
|
|
75
|
+
const toolDeclaredSet = new Set(tool.requiredPermissions);
|
|
76
|
+
for (const cap of request.requestedCapabilities) {
|
|
77
|
+
if (!toolDeclaredSet.has(cap)) {
|
|
78
|
+
return this.deny(request.requestId, request.taskId, request.toolId, request.requestedCapabilities, `MISSING_PERMISSION: Capability '${cap}' is not declared in tool '${tool.id}' required permissions.`, timestamp, tool.riskLevel);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const requestedSet = new Set(request.requestedCapabilities);
|
|
82
|
+
for (const reqCap of tool.requiredPermissions) {
|
|
83
|
+
if (!requestedSet.has(reqCap)) {
|
|
84
|
+
return this.deny(request.requestId, request.taskId, request.toolId, request.requestedCapabilities, `MISSING_PERMISSION: Request is missing required capability '${reqCap}' for tool '${tool.id}'.`, timestamp, tool.riskLevel);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// All checks passed — ALLOW
|
|
88
|
+
const result = {
|
|
89
|
+
requestId: request.requestId,
|
|
90
|
+
taskId: request.taskId,
|
|
91
|
+
toolId: request.toolId,
|
|
92
|
+
allowed: true,
|
|
93
|
+
decision: 'ALLOWED',
|
|
94
|
+
reason: `Invocation authorized for task '${request.taskId}' and tool '${request.toolId}'.`,
|
|
95
|
+
requestedCapabilities: [...request.requestedCapabilities],
|
|
96
|
+
riskLevel: tool.riskLevel,
|
|
97
|
+
timestamp,
|
|
98
|
+
};
|
|
99
|
+
this.logger.info(`Security decision: ALLOWED`, {
|
|
100
|
+
requestId: result.requestId,
|
|
101
|
+
taskId: result.taskId,
|
|
102
|
+
toolId: result.toolId,
|
|
103
|
+
decision: result.decision,
|
|
104
|
+
capabilities: result.requestedCapabilities,
|
|
105
|
+
});
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
deny(requestId, taskId, toolId, requestedCapabilities, reason, timestamp, riskLevel) {
|
|
109
|
+
const result = {
|
|
110
|
+
requestId,
|
|
111
|
+
taskId,
|
|
112
|
+
toolId,
|
|
113
|
+
allowed: false,
|
|
114
|
+
decision: 'DENIED',
|
|
115
|
+
reason,
|
|
116
|
+
requestedCapabilities: [...requestedCapabilities],
|
|
117
|
+
riskLevel,
|
|
118
|
+
timestamp,
|
|
119
|
+
};
|
|
120
|
+
this.logger.warn(`Security decision: DENIED`, {
|
|
121
|
+
requestId: result.requestId,
|
|
122
|
+
taskId: result.taskId,
|
|
123
|
+
toolId: result.toolId,
|
|
124
|
+
decision: result.decision,
|
|
125
|
+
reason: result.reason,
|
|
126
|
+
});
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=permissionEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissionEngine.js","sourceRoot":"","sources":["../../src/tools/permissionEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ToolExecutionRequest, ToolExecutionResult } from './types.js';
|
|
2
|
+
import { FilesystemAdapter } from './adapters/filesystemAdapter.js';
|
|
3
|
+
import { TerminalAdapter } from './adapters/terminalAdapter.js';
|
|
4
|
+
import { TerminalCommandPolicy } from './adapters/terminalCommandPolicy.js';
|
|
5
|
+
import { LogLevel } from '../common/logger.js';
|
|
6
|
+
export declare class ToolExecutor {
|
|
7
|
+
private fsAdapter;
|
|
8
|
+
private terminalAdapter;
|
|
9
|
+
private terminalPolicy;
|
|
10
|
+
private logger;
|
|
11
|
+
private workspaceRoot;
|
|
12
|
+
constructor(workspaceRoot: string, maxFileSize?: number, logLevel?: LogLevel);
|
|
13
|
+
/**
|
|
14
|
+
* Get the workspace root directory path.
|
|
15
|
+
*/
|
|
16
|
+
getWorkspaceRoot(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Get the underlying filesystem adapter (useful for testing or direct sandbox checks).
|
|
19
|
+
*/
|
|
20
|
+
getFilesystemAdapter(): FilesystemAdapter;
|
|
21
|
+
/**
|
|
22
|
+
* Execute an authorized tool request.
|
|
23
|
+
*
|
|
24
|
+
* @param request Authorized ToolExecutionRequest.
|
|
25
|
+
* @returns Normalized ToolExecutionResult contract.
|
|
26
|
+
*/
|
|
27
|
+
execute(request: ToolExecutionRequest): Omit<ToolExecutionResult, 'authorized' | 'decision'> | Promise<Omit<ToolExecutionResult, 'authorized' | 'decision'>>;
|
|
28
|
+
/**
|
|
29
|
+
* Get the underlying terminal adapter.
|
|
30
|
+
*/
|
|
31
|
+
getTerminalAdapter(): TerminalAdapter;
|
|
32
|
+
/**
|
|
33
|
+
* Get the underlying terminal command policy.
|
|
34
|
+
*/
|
|
35
|
+
getTerminalPolicy(): TerminalCommandPolicy;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=toolExecutor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolExecutor.d.ts","sourceRoot":"","sources":["../../src/tools/toolExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,OAAO,EAAU,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEvD,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAS;gBAG5B,aAAa,EAAE,MAAM,EACrB,WAAW,GAAE,MAAwB,EACrC,QAAQ,GAAE,QAAiB;IAS7B;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,oBAAoB,IAAI,iBAAiB;IAIzC;;;;;OAKG;IACH,OAAO,CACL,OAAO,EAAE,oBAAoB,GAC5B,IAAI,CAAC,mBAAmB,EAAE,YAAY,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,YAAY,GAAG,UAAU,CAAC,CAAC;IAubvH;;OAEG;IACH,kBAAkB,IAAI,eAAe;IAIrC;;OAEG;IACH,iBAAiB,IAAI,qBAAqB;CAG3C"}
|