patchwork-os 0.2.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.bridge.md +352 -0
- package/README.md +72 -0
- package/deploy/README.md +172 -0
- package/deploy/bootstrap-new-vps.sh +364 -0
- package/deploy/claude-ide-bridge.service.template +67 -0
- package/deploy/claude-ide-bridge@.service +31 -0
- package/deploy/ecosystem.config.js.example +36 -0
- package/deploy/install-vps-service.sh +240 -0
- package/deploy/nginx-claude-bridge.conf.template +129 -0
- package/dist/activityLog.d.ts +112 -0
- package/dist/activityLog.js +399 -0
- package/dist/activityLog.js.map +1 -0
- package/dist/activityTypes.d.ts +28 -0
- package/dist/activityTypes.js +9 -0
- package/dist/activityTypes.js.map +1 -0
- package/dist/adapters/base.d.ts +78 -0
- package/dist/adapters/base.js +14 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/claude.d.ts +18 -0
- package/dist/adapters/claude.js +276 -0
- package/dist/adapters/claude.js.map +1 -0
- package/dist/adapters/gemini.d.ts +17 -0
- package/dist/adapters/gemini.js +218 -0
- package/dist/adapters/gemini.js.map +1 -0
- package/dist/adapters/grok.d.ts +7 -0
- package/dist/adapters/grok.js +21 -0
- package/dist/adapters/grok.js.map +1 -0
- package/dist/adapters/index.d.ts +5 -0
- package/dist/adapters/index.js +37 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/local.d.ts +7 -0
- package/dist/adapters/local.js +22 -0
- package/dist/adapters/local.js.map +1 -0
- package/dist/adapters/openai.d.ts +22 -0
- package/dist/adapters/openai.js +284 -0
- package/dist/adapters/openai.js.map +1 -0
- package/dist/adapters/sse.d.ts +13 -0
- package/dist/adapters/sse.js +58 -0
- package/dist/adapters/sse.js.map +1 -0
- package/dist/analyticsAggregator.d.ts +28 -0
- package/dist/analyticsAggregator.js +133 -0
- package/dist/analyticsAggregator.js.map +1 -0
- package/dist/analyticsPrefs.d.ts +9 -0
- package/dist/analyticsPrefs.js +50 -0
- package/dist/analyticsPrefs.js.map +1 -0
- package/dist/analyticsSend.d.ts +12 -0
- package/dist/analyticsSend.js +34 -0
- package/dist/analyticsSend.js.map +1 -0
- package/dist/approvalHttp.d.ts +46 -0
- package/dist/approvalHttp.js +370 -0
- package/dist/approvalHttp.js.map +1 -0
- package/dist/approvalQueue.d.ts +49 -0
- package/dist/approvalQueue.js +84 -0
- package/dist/approvalQueue.js.map +1 -0
- package/dist/automation.d.ts +675 -0
- package/dist/automation.js +1038 -0
- package/dist/automation.js.map +1 -0
- package/dist/bridge.d.ts +85 -0
- package/dist/bridge.js +1535 -0
- package/dist/bridge.js.map +1 -0
- package/dist/bridgeLockDiscovery.d.ts +11 -0
- package/dist/bridgeLockDiscovery.js +49 -0
- package/dist/bridgeLockDiscovery.js.map +1 -0
- package/dist/bridgeToken.d.ts +22 -0
- package/dist/bridgeToken.js +114 -0
- package/dist/bridgeToken.js.map +1 -0
- package/dist/bridgeToolsRules.d.ts +20 -0
- package/dist/bridgeToolsRules.js +79 -0
- package/dist/bridgeToolsRules.js.map +1 -0
- package/dist/ccPermissions.d.ts +59 -0
- package/dist/ccPermissions.js +163 -0
- package/dist/ccPermissions.js.map +1 -0
- package/dist/claudeDriver.d.ts +129 -0
- package/dist/claudeDriver.js +459 -0
- package/dist/claudeDriver.js.map +1 -0
- package/dist/claudeMdPatch.d.ts +29 -0
- package/dist/claudeMdPatch.js +164 -0
- package/dist/claudeMdPatch.js.map +1 -0
- package/dist/claudeOrchestrator.d.ts +171 -0
- package/dist/claudeOrchestrator.js +591 -0
- package/dist/claudeOrchestrator.js.map +1 -0
- package/dist/commands/install.d.ts +1 -0
- package/dist/commands/install.js +158 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/marketplace.d.ts +11 -0
- package/dist/commands/marketplace.js +120 -0
- package/dist/commands/marketplace.js.map +1 -0
- package/dist/commands/patchworkInit.d.ts +14 -0
- package/dist/commands/patchworkInit.js +155 -0
- package/dist/commands/patchworkInit.js.map +1 -0
- package/dist/commands/task.d.ts +14 -0
- package/dist/commands/task.js +289 -0
- package/dist/commands/task.js.map +1 -0
- package/dist/commands/tokenEfficiency.d.ts +9 -0
- package/dist/commands/tokenEfficiency.js +211 -0
- package/dist/commands/tokenEfficiency.js.map +1 -0
- package/dist/commands/tools.d.ts +28 -0
- package/dist/commands/tools.js +326 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commitIssueLinkLog.d.ts +77 -0
- package/dist/commitIssueLinkLog.js +142 -0
- package/dist/commitIssueLinkLog.js.map +1 -0
- package/dist/companions/registry.d.ts +12 -0
- package/dist/companions/registry.js +71 -0
- package/dist/companions/registry.js.map +1 -0
- package/dist/config.d.ts +105 -0
- package/dist/config.js +720 -0
- package/dist/config.js.map +1 -0
- package/dist/crypto.d.ts +16 -0
- package/dist/crypto.js +34 -0
- package/dist/crypto.js.map +1 -0
- package/dist/dashboard.d.ts +12 -0
- package/dist/dashboard.js +149 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/decisionTraceLog.d.ts +77 -0
- package/dist/decisionTraceLog.js +147 -0
- package/dist/decisionTraceLog.js.map +1 -0
- package/dist/errors.d.ts +32 -0
- package/dist/errors.js +34 -0
- package/dist/errors.js.map +1 -0
- package/dist/extensionClient.d.ts +279 -0
- package/dist/extensionClient.js +1253 -0
- package/dist/extensionClient.js.map +1 -0
- package/dist/fileLock.d.ts +36 -0
- package/dist/fileLock.js +121 -0
- package/dist/fileLock.js.map +1 -0
- package/dist/fp/activityAnalytics.d.ts +39 -0
- package/dist/fp/activityAnalytics.js +111 -0
- package/dist/fp/activityAnalytics.js.map +1 -0
- package/dist/fp/async.d.ts +48 -0
- package/dist/fp/async.js +60 -0
- package/dist/fp/async.js.map +1 -0
- package/dist/fp/automationInterpreter.d.ts +37 -0
- package/dist/fp/automationInterpreter.js +523 -0
- package/dist/fp/automationInterpreter.js.map +1 -0
- package/dist/fp/automationProgram.d.ts +89 -0
- package/dist/fp/automationProgram.js +29 -0
- package/dist/fp/automationProgram.js.map +1 -0
- package/dist/fp/automationState.d.ts +135 -0
- package/dist/fp/automationState.js +206 -0
- package/dist/fp/automationState.js.map +1 -0
- package/dist/fp/automationUtils.d.ts +31 -0
- package/dist/fp/automationUtils.js +61 -0
- package/dist/fp/automationUtils.js.map +1 -0
- package/dist/fp/brandedTypes.d.ts +32 -0
- package/dist/fp/brandedTypes.js +41 -0
- package/dist/fp/brandedTypes.js.map +1 -0
- package/dist/fp/commandDescription.d.ts +18 -0
- package/dist/fp/commandDescription.js +125 -0
- package/dist/fp/commandDescription.js.map +1 -0
- package/dist/fp/extensionSnapshot.d.ts +10 -0
- package/dist/fp/extensionSnapshot.js +14 -0
- package/dist/fp/extensionSnapshot.js.map +1 -0
- package/dist/fp/index.d.ts +8 -0
- package/dist/fp/index.js +9 -0
- package/dist/fp/index.js.map +1 -0
- package/dist/fp/interpreterContext.d.ts +69 -0
- package/dist/fp/interpreterContext.js +56 -0
- package/dist/fp/interpreterContext.js.map +1 -0
- package/dist/fp/policyParser.d.ts +16 -0
- package/dist/fp/policyParser.js +334 -0
- package/dist/fp/policyParser.js.map +1 -0
- package/dist/fp/result.d.ts +38 -0
- package/dist/fp/result.js +57 -0
- package/dist/fp/result.js.map +1 -0
- package/dist/fp/tokenBucket.d.ts +27 -0
- package/dist/fp/tokenBucket.js +36 -0
- package/dist/fp/tokenBucket.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1465 -0
- package/dist/index.js.map +1 -0
- package/dist/instructionsUtils.d.ts +17 -0
- package/dist/instructionsUtils.js +38 -0
- package/dist/instructionsUtils.js.map +1 -0
- package/dist/lockfile.d.ts +16 -0
- package/dist/lockfile.js +172 -0
- package/dist/lockfile.js.map +1 -0
- package/dist/logger.d.ts +16 -0
- package/dist/logger.js +68 -0
- package/dist/logger.js.map +1 -0
- package/dist/oauth.d.ts +105 -0
- package/dist/oauth.js +880 -0
- package/dist/oauth.js.map +1 -0
- package/dist/orchestrator/childBridgeClient.d.ts +33 -0
- package/dist/orchestrator/childBridgeClient.js +321 -0
- package/dist/orchestrator/childBridgeClient.js.map +1 -0
- package/dist/orchestrator/childBridgeRegistry.d.ts +67 -0
- package/dist/orchestrator/childBridgeRegistry.js +297 -0
- package/dist/orchestrator/childBridgeRegistry.js.map +1 -0
- package/dist/orchestrator/index.d.ts +3 -0
- package/dist/orchestrator/index.js +3 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/orchestratorBridge.d.ts +32 -0
- package/dist/orchestrator/orchestratorBridge.js +412 -0
- package/dist/orchestrator/orchestratorBridge.js.map +1 -0
- package/dist/orchestrator/orchestratorConfig.d.ts +11 -0
- package/dist/orchestrator/orchestratorConfig.js +85 -0
- package/dist/orchestrator/orchestratorConfig.js.map +1 -0
- package/dist/orchestrator/orchestratorTools.d.ts +16 -0
- package/dist/orchestrator/orchestratorTools.js +272 -0
- package/dist/orchestrator/orchestratorTools.js.map +1 -0
- package/dist/patchworkCli.d.ts +15 -0
- package/dist/patchworkCli.js +41 -0
- package/dist/patchworkCli.js.map +1 -0
- package/dist/patchworkConfig.d.ts +28 -0
- package/dist/patchworkConfig.js +30 -0
- package/dist/patchworkConfig.js.map +1 -0
- package/dist/plugin.d.ts +106 -0
- package/dist/plugin.js +31 -0
- package/dist/plugin.js.map +1 -0
- package/dist/pluginLoader.d.ts +44 -0
- package/dist/pluginLoader.js +357 -0
- package/dist/pluginLoader.js.map +1 -0
- package/dist/pluginWatcher.d.ts +24 -0
- package/dist/pluginWatcher.js +139 -0
- package/dist/pluginWatcher.js.map +1 -0
- package/dist/preToolUseHook.d.ts +10 -0
- package/dist/preToolUseHook.js +57 -0
- package/dist/preToolUseHook.js.map +1 -0
- package/dist/probe.d.ts +35 -0
- package/dist/probe.js +143 -0
- package/dist/probe.js.map +1 -0
- package/dist/prompts.d.ts +27 -0
- package/dist/prompts.js +1680 -0
- package/dist/prompts.js.map +1 -0
- package/dist/quickTaskPresets.d.ts +64 -0
- package/dist/quickTaskPresets.js +156 -0
- package/dist/quickTaskPresets.js.map +1 -0
- package/dist/recipes/compiler.d.ts +44 -0
- package/dist/recipes/compiler.js +140 -0
- package/dist/recipes/compiler.js.map +1 -0
- package/dist/recipes/installer.d.ts +25 -0
- package/dist/recipes/installer.js +62 -0
- package/dist/recipes/installer.js.map +1 -0
- package/dist/recipes/parser.d.ts +18 -0
- package/dist/recipes/parser.js +160 -0
- package/dist/recipes/parser.js.map +1 -0
- package/dist/recipes/scheduler.d.ts +45 -0
- package/dist/recipes/scheduler.js +110 -0
- package/dist/recipes/scheduler.js.map +1 -0
- package/dist/recipes/schema.d.ts +71 -0
- package/dist/recipes/schema.js +11 -0
- package/dist/recipes/schema.js.map +1 -0
- package/dist/recipesHttp.d.ts +63 -0
- package/dist/recipesHttp.js +183 -0
- package/dist/recipesHttp.js.map +1 -0
- package/dist/resources.d.ts +33 -0
- package/dist/resources.js +266 -0
- package/dist/resources.js.map +1 -0
- package/dist/riskTier.d.ts +40 -0
- package/dist/riskTier.js +142 -0
- package/dist/riskTier.js.map +1 -0
- package/dist/runLog.d.ts +90 -0
- package/dist/runLog.js +143 -0
- package/dist/runLog.js.map +1 -0
- package/dist/server.d.ts +160 -0
- package/dist/server.js +1244 -0
- package/dist/server.js.map +1 -0
- package/dist/sessionCheckpoint.d.ts +37 -0
- package/dist/sessionCheckpoint.js +123 -0
- package/dist/sessionCheckpoint.js.map +1 -0
- package/dist/streamableHttp.d.ts +86 -0
- package/dist/streamableHttp.js +702 -0
- package/dist/streamableHttp.js.map +1 -0
- package/dist/telemetry.d.ts +18 -0
- package/dist/telemetry.js +95 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tools/activityLog.d.ts +140 -0
- package/dist/tools/activityLog.js +204 -0
- package/dist/tools/activityLog.js.map +1 -0
- package/dist/tools/auditDependencies.d.ts +67 -0
- package/dist/tools/auditDependencies.js +298 -0
- package/dist/tools/auditDependencies.js.map +1 -0
- package/dist/tools/batchLsp.d.ts +262 -0
- package/dist/tools/batchLsp.js +328 -0
- package/dist/tools/batchLsp.js.map +1 -0
- package/dist/tools/blame-utils.d.ts +30 -0
- package/dist/tools/blame-utils.js +60 -0
- package/dist/tools/blame-utils.js.map +1 -0
- package/dist/tools/bridgeDoctor.d.ts +78 -0
- package/dist/tools/bridgeDoctor.js +542 -0
- package/dist/tools/bridgeDoctor.js.map +1 -0
- package/dist/tools/bridgeStatus.d.ts +122 -0
- package/dist/tools/bridgeStatus.js +250 -0
- package/dist/tools/bridgeStatus.js.map +1 -0
- package/dist/tools/cancelClaudeTask.d.ts +48 -0
- package/dist/tools/cancelClaudeTask.js +56 -0
- package/dist/tools/cancelClaudeTask.js.map +1 -0
- package/dist/tools/checkDocumentDirty.d.ts +56 -0
- package/dist/tools/checkDocumentDirty.js +74 -0
- package/dist/tools/checkDocumentDirty.js.map +1 -0
- package/dist/tools/clipboard.d.ts +80 -0
- package/dist/tools/clipboard.js +211 -0
- package/dist/tools/clipboard.js.map +1 -0
- package/dist/tools/closeTabs.d.ts +84 -0
- package/dist/tools/closeTabs.js +97 -0
- package/dist/tools/closeTabs.js.map +1 -0
- package/dist/tools/codeLens.d.ts +50 -0
- package/dist/tools/codeLens.js +47 -0
- package/dist/tools/codeLens.js.map +1 -0
- package/dist/tools/contextBundle.d.ts +75 -0
- package/dist/tools/contextBundle.js +218 -0
- package/dist/tools/contextBundle.js.map +1 -0
- package/dist/tools/createIssueFromAIComment.d.ts +75 -0
- package/dist/tools/createIssueFromAIComment.js +119 -0
- package/dist/tools/createIssueFromAIComment.js.map +1 -0
- package/dist/tools/ctxGetTaskContext.d.ts +103 -0
- package/dist/tools/ctxGetTaskContext.js +274 -0
- package/dist/tools/ctxGetTaskContext.js.map +1 -0
- package/dist/tools/ctxQueryTraces.d.ts +142 -0
- package/dist/tools/ctxQueryTraces.js +194 -0
- package/dist/tools/ctxQueryTraces.js.map +1 -0
- package/dist/tools/ctxSaveTrace.d.ts +87 -0
- package/dist/tools/ctxSaveTrace.js +94 -0
- package/dist/tools/ctxSaveTrace.js.map +1 -0
- package/dist/tools/debug.d.ts +206 -0
- package/dist/tools/debug.js +234 -0
- package/dist/tools/debug.js.map +1 -0
- package/dist/tools/decorations.d.ts +130 -0
- package/dist/tools/decorations.js +160 -0
- package/dist/tools/decorations.js.map +1 -0
- package/dist/tools/detectUnusedCode.d.ts +78 -0
- package/dist/tools/detectUnusedCode.js +173 -0
- package/dist/tools/detectUnusedCode.js.map +1 -0
- package/dist/tools/documentLinks.d.ts +62 -0
- package/dist/tools/documentLinks.js +55 -0
- package/dist/tools/documentLinks.js.map +1 -0
- package/dist/tools/editText.d.ts +108 -0
- package/dist/tools/editText.js +318 -0
- package/dist/tools/editText.js.map +1 -0
- package/dist/tools/enrichCommit.d.ts +89 -0
- package/dist/tools/enrichCommit.js +201 -0
- package/dist/tools/enrichCommit.js.map +1 -0
- package/dist/tools/enrichStackTrace.d.ts +121 -0
- package/dist/tools/enrichStackTrace.js +194 -0
- package/dist/tools/enrichStackTrace.js.map +1 -0
- package/dist/tools/explainDiagnostic.d.ts +137 -0
- package/dist/tools/explainDiagnostic.js +230 -0
- package/dist/tools/explainDiagnostic.js.map +1 -0
- package/dist/tools/explainSymbol.d.ts +119 -0
- package/dist/tools/explainSymbol.js +177 -0
- package/dist/tools/explainSymbol.js.map +1 -0
- package/dist/tools/fileOperations.d.ts +186 -0
- package/dist/tools/fileOperations.js +330 -0
- package/dist/tools/fileOperations.js.map +1 -0
- package/dist/tools/fileWatcher.d.ts +107 -0
- package/dist/tools/fileWatcher.js +121 -0
- package/dist/tools/fileWatcher.js.map +1 -0
- package/dist/tools/findFiles.d.ts +65 -0
- package/dist/tools/findFiles.js +142 -0
- package/dist/tools/findFiles.js.map +1 -0
- package/dist/tools/findRelatedTests.d.ts +83 -0
- package/dist/tools/findRelatedTests.js +196 -0
- package/dist/tools/findRelatedTests.js.map +1 -0
- package/dist/tools/fixAllLintErrors.d.ts +66 -0
- package/dist/tools/fixAllLintErrors.js +128 -0
- package/dist/tools/fixAllLintErrors.js.map +1 -0
- package/dist/tools/foldingRanges.d.ts +50 -0
- package/dist/tools/foldingRanges.js +51 -0
- package/dist/tools/foldingRanges.js.map +1 -0
- package/dist/tools/formatAndSave.d.ts +57 -0
- package/dist/tools/formatAndSave.js +87 -0
- package/dist/tools/formatAndSave.js.map +1 -0
- package/dist/tools/formatDocument.d.ts +61 -0
- package/dist/tools/formatDocument.js +144 -0
- package/dist/tools/formatDocument.js.map +1 -0
- package/dist/tools/generateAPIDocumentation.d.ts +62 -0
- package/dist/tools/generateAPIDocumentation.js +249 -0
- package/dist/tools/generateAPIDocumentation.js.map +1 -0
- package/dist/tools/generateTests.d.ts +75 -0
- package/dist/tools/generateTests.js +226 -0
- package/dist/tools/generateTests.js.map +1 -0
- package/dist/tools/getAIComments.d.ts +79 -0
- package/dist/tools/getAIComments.js +93 -0
- package/dist/tools/getAIComments.js.map +1 -0
- package/dist/tools/getAnalyticsReport.d.ts +102 -0
- package/dist/tools/getAnalyticsReport.js +137 -0
- package/dist/tools/getAnalyticsReport.js.map +1 -0
- package/dist/tools/getArchitectureContext.d.ts +85 -0
- package/dist/tools/getArchitectureContext.js +135 -0
- package/dist/tools/getArchitectureContext.js.map +1 -0
- package/dist/tools/getBufferContent.d.ts +80 -0
- package/dist/tools/getBufferContent.js +207 -0
- package/dist/tools/getBufferContent.js.map +1 -0
- package/dist/tools/getChangeImpact.d.ts +76 -0
- package/dist/tools/getChangeImpact.js +184 -0
- package/dist/tools/getChangeImpact.js.map +1 -0
- package/dist/tools/getClaudeTaskStatus.d.ts +87 -0
- package/dist/tools/getClaudeTaskStatus.js +89 -0
- package/dist/tools/getClaudeTaskStatus.js.map +1 -0
- package/dist/tools/getCodeCoverage.d.ts +86 -0
- package/dist/tools/getCodeCoverage.js +237 -0
- package/dist/tools/getCodeCoverage.js.map +1 -0
- package/dist/tools/getCommitsForIssue.d.ts +98 -0
- package/dist/tools/getCommitsForIssue.js +106 -0
- package/dist/tools/getCommitsForIssue.js.map +1 -0
- package/dist/tools/getCurrentSelection.d.ts +123 -0
- package/dist/tools/getCurrentSelection.js +113 -0
- package/dist/tools/getCurrentSelection.js.map +1 -0
- package/dist/tools/getDebugState.d.ts +140 -0
- package/dist/tools/getDebugState.js +109 -0
- package/dist/tools/getDebugState.js.map +1 -0
- package/dist/tools/getDependencyTree.d.ts +59 -0
- package/dist/tools/getDependencyTree.js +207 -0
- package/dist/tools/getDependencyTree.js.map +1 -0
- package/dist/tools/getDiagnostics.d.ts +108 -0
- package/dist/tools/getDiagnostics.js +371 -0
- package/dist/tools/getDiagnostics.js.map +1 -0
- package/dist/tools/getDiffFromHandoff.d.ts +89 -0
- package/dist/tools/getDiffFromHandoff.js +163 -0
- package/dist/tools/getDiffFromHandoff.js.map +1 -0
- package/dist/tools/getDocumentSymbols.d.ts +74 -0
- package/dist/tools/getDocumentSymbols.js +177 -0
- package/dist/tools/getDocumentSymbols.js.map +1 -0
- package/dist/tools/getFileTree.d.ts +66 -0
- package/dist/tools/getFileTree.js +131 -0
- package/dist/tools/getFileTree.js.map +1 -0
- package/dist/tools/getGitDiff.d.ts +50 -0
- package/dist/tools/getGitDiff.js +73 -0
- package/dist/tools/getGitDiff.js.map +1 -0
- package/dist/tools/getGitHotspots.d.ts +88 -0
- package/dist/tools/getGitHotspots.js +145 -0
- package/dist/tools/getGitHotspots.js.map +1 -0
- package/dist/tools/getGitLog.d.ts +62 -0
- package/dist/tools/getGitLog.js +87 -0
- package/dist/tools/getGitLog.js.map +1 -0
- package/dist/tools/getGitStatus.d.ts +72 -0
- package/dist/tools/getGitStatus.js +126 -0
- package/dist/tools/getGitStatus.js.map +1 -0
- package/dist/tools/getImportTree.d.ts +73 -0
- package/dist/tools/getImportTree.js +223 -0
- package/dist/tools/getImportTree.js.map +1 -0
- package/dist/tools/getImportedSignatures.d.ts +62 -0
- package/dist/tools/getImportedSignatures.js +255 -0
- package/dist/tools/getImportedSignatures.js.map +1 -0
- package/dist/tools/getOpenEditors.d.ts +62 -0
- package/dist/tools/getOpenEditors.js +126 -0
- package/dist/tools/getOpenEditors.js.map +1 -0
- package/dist/tools/getPRTemplate.d.ts +68 -0
- package/dist/tools/getPRTemplate.js +187 -0
- package/dist/tools/getPRTemplate.js.map +1 -0
- package/dist/tools/getProjectContext.d.ts +114 -0
- package/dist/tools/getProjectContext.js +344 -0
- package/dist/tools/getProjectContext.js.map +1 -0
- package/dist/tools/getProjectInfo.d.ts +51 -0
- package/dist/tools/getProjectInfo.js +325 -0
- package/dist/tools/getProjectInfo.js.map +1 -0
- package/dist/tools/getSecurityAdvisories.d.ts +105 -0
- package/dist/tools/getSecurityAdvisories.js +472 -0
- package/dist/tools/getSecurityAdvisories.js.map +1 -0
- package/dist/tools/getSessionUsage.d.ts +58 -0
- package/dist/tools/getSessionUsage.js +57 -0
- package/dist/tools/getSessionUsage.js.map +1 -0
- package/dist/tools/getSymbolHistory.d.ts +157 -0
- package/dist/tools/getSymbolHistory.js +256 -0
- package/dist/tools/getSymbolHistory.js.map +1 -0
- package/dist/tools/getToolCapabilities.d.ts +69 -0
- package/dist/tools/getToolCapabilities.js +298 -0
- package/dist/tools/getToolCapabilities.js.map +1 -0
- package/dist/tools/getTypeSignature.d.ts +70 -0
- package/dist/tools/getTypeSignature.js +132 -0
- package/dist/tools/getTypeSignature.js.map +1 -0
- package/dist/tools/getWorkspaceFolders.d.ts +58 -0
- package/dist/tools/getWorkspaceFolders.js +69 -0
- package/dist/tools/getWorkspaceFolders.js.map +1 -0
- package/dist/tools/getWorkspaceSettings.d.ts +44 -0
- package/dist/tools/getWorkspaceSettings.js +70 -0
- package/dist/tools/getWorkspaceSettings.js.map +1 -0
- package/dist/tools/git-utils.d.ts +16 -0
- package/dist/tools/git-utils.js +46 -0
- package/dist/tools/git-utils.js.map +1 -0
- package/dist/tools/gitHistory.d.ts +110 -0
- package/dist/tools/gitHistory.js +167 -0
- package/dist/tools/gitHistory.js.map +1 -0
- package/dist/tools/gitWrite.d.ts +612 -0
- package/dist/tools/gitWrite.js +983 -0
- package/dist/tools/gitWrite.js.map +1 -0
- package/dist/tools/github/actions.d.ts +152 -0
- package/dist/tools/github/actions.js +195 -0
- package/dist/tools/github/actions.js.map +1 -0
- package/dist/tools/github/index.d.ts +3 -0
- package/dist/tools/github/index.js +4 -0
- package/dist/tools/github/index.js.map +1 -0
- package/dist/tools/github/issues.d.ts +281 -0
- package/dist/tools/github/issues.js +340 -0
- package/dist/tools/github/issues.js.map +1 -0
- package/dist/tools/github/pr.d.ts +433 -0
- package/dist/tools/github/pr.js +588 -0
- package/dist/tools/github/pr.js.map +1 -0
- package/dist/tools/github/shared.d.ts +4 -0
- package/dist/tools/github/shared.js +12 -0
- package/dist/tools/github/shared.js.map +1 -0
- package/dist/tools/handoffNote.d.ts +106 -0
- package/dist/tools/handoffNote.js +232 -0
- package/dist/tools/handoffNote.js.map +1 -0
- package/dist/tools/headless/lspClient.d.ts +26 -0
- package/dist/tools/headless/lspClient.js +221 -0
- package/dist/tools/headless/lspClient.js.map +1 -0
- package/dist/tools/headless/lspFallback.d.ts +28 -0
- package/dist/tools/headless/lspFallback.js +122 -0
- package/dist/tools/headless/lspFallback.js.map +1 -0
- package/dist/tools/hoverAtCursor.d.ts +54 -0
- package/dist/tools/hoverAtCursor.js +68 -0
- package/dist/tools/hoverAtCursor.js.map +1 -0
- package/dist/tools/httpClient.d.ts +141 -0
- package/dist/tools/httpClient.js +486 -0
- package/dist/tools/httpClient.js.map +1 -0
- package/dist/tools/index.d.ts +49 -0
- package/dist/tools/index.js +672 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/inlayHints.d.ts +81 -0
- package/dist/tools/inlayHints.js +76 -0
- package/dist/tools/inlayHints.js.map +1 -0
- package/dist/tools/issueRefs.d.ts +14 -0
- package/dist/tools/issueRefs.js +27 -0
- package/dist/tools/issueRefs.js.map +1 -0
- package/dist/tools/jumpToFirstError.d.ts +63 -0
- package/dist/tools/jumpToFirstError.js +124 -0
- package/dist/tools/jumpToFirstError.js.map +1 -0
- package/dist/tools/launchQuickTask.d.ts +76 -0
- package/dist/tools/launchQuickTask.js +170 -0
- package/dist/tools/launchQuickTask.js.map +1 -0
- package/dist/tools/linters/biome.d.ts +2 -0
- package/dist/tools/linters/biome.js +44 -0
- package/dist/tools/linters/biome.js.map +1 -0
- package/dist/tools/linters/cargo.d.ts +2 -0
- package/dist/tools/linters/cargo.js +45 -0
- package/dist/tools/linters/cargo.js.map +1 -0
- package/dist/tools/linters/eslint.d.ts +2 -0
- package/dist/tools/linters/eslint.js +59 -0
- package/dist/tools/linters/eslint.js.map +1 -0
- package/dist/tools/linters/govet.d.ts +2 -0
- package/dist/tools/linters/govet.js +37 -0
- package/dist/tools/linters/govet.js.map +1 -0
- package/dist/tools/linters/pyright.d.ts +2 -0
- package/dist/tools/linters/pyright.js +34 -0
- package/dist/tools/linters/pyright.js.map +1 -0
- package/dist/tools/linters/ruff.d.ts +2 -0
- package/dist/tools/linters/ruff.js +30 -0
- package/dist/tools/linters/ruff.js.map +1 -0
- package/dist/tools/linters/types.d.ts +16 -0
- package/dist/tools/linters/types.js +2 -0
- package/dist/tools/linters/types.js.map +1 -0
- package/dist/tools/linters/typescript.d.ts +2 -0
- package/dist/tools/linters/typescript.js +38 -0
- package/dist/tools/linters/typescript.js.map +1 -0
- package/dist/tools/listClaudeTasks.d.ts +84 -0
- package/dist/tools/listClaudeTasks.js +88 -0
- package/dist/tools/listClaudeTasks.js.map +1 -0
- package/dist/tools/listTerminals.d.ts +55 -0
- package/dist/tools/listTerminals.js +78 -0
- package/dist/tools/listTerminals.js.map +1 -0
- package/dist/tools/lsp.d.ts +1086 -0
- package/dist/tools/lsp.js +1339 -0
- package/dist/tools/lsp.js.map +1 -0
- package/dist/tools/navigateToSymbolByName.d.ts +56 -0
- package/dist/tools/navigateToSymbolByName.js +170 -0
- package/dist/tools/navigateToSymbolByName.js.map +1 -0
- package/dist/tools/openDiff.d.ts +66 -0
- package/dist/tools/openDiff.js +126 -0
- package/dist/tools/openDiff.js.map +1 -0
- package/dist/tools/openFile.d.ts +69 -0
- package/dist/tools/openFile.js +129 -0
- package/dist/tools/openFile.js.map +1 -0
- package/dist/tools/openInBrowser.d.ts +55 -0
- package/dist/tools/openInBrowser.js +129 -0
- package/dist/tools/openInBrowser.js.map +1 -0
- package/dist/tools/organizeImports.d.ts +56 -0
- package/dist/tools/organizeImports.js +115 -0
- package/dist/tools/organizeImports.js.map +1 -0
- package/dist/tools/performanceReport.d.ts +133 -0
- package/dist/tools/performanceReport.js +218 -0
- package/dist/tools/performanceReport.js.map +1 -0
- package/dist/tools/planPersistence.d.ts +306 -0
- package/dist/tools/planPersistence.js +485 -0
- package/dist/tools/planPersistence.js.map +1 -0
- package/dist/tools/previewEdit.d.ts +107 -0
- package/dist/tools/previewEdit.js +270 -0
- package/dist/tools/previewEdit.js.map +1 -0
- package/dist/tools/recentTracesDigest.d.ts +35 -0
- package/dist/tools/recentTracesDigest.js +98 -0
- package/dist/tools/recentTracesDigest.js.map +1 -0
- package/dist/tools/refactorAnalyze.d.ts +78 -0
- package/dist/tools/refactorAnalyze.js +141 -0
- package/dist/tools/refactorAnalyze.js.map +1 -0
- package/dist/tools/refactorExtractFunction.d.ts +52 -0
- package/dist/tools/refactorExtractFunction.js +121 -0
- package/dist/tools/refactorExtractFunction.js.map +1 -0
- package/dist/tools/refactorPreview.d.ts +75 -0
- package/dist/tools/refactorPreview.js +93 -0
- package/dist/tools/refactorPreview.js.map +1 -0
- package/dist/tools/replaceBlock.d.ts +62 -0
- package/dist/tools/replaceBlock.js +125 -0
- package/dist/tools/replaceBlock.js.map +1 -0
- package/dist/tools/resumeClaudeTask.d.ts +75 -0
- package/dist/tools/resumeClaudeTask.js +149 -0
- package/dist/tools/resumeClaudeTask.js.map +1 -0
- package/dist/tools/runClaudeTask.d.ts +97 -0
- package/dist/tools/runClaudeTask.js +224 -0
- package/dist/tools/runClaudeTask.js.map +1 -0
- package/dist/tools/runCommand.d.ts +82 -0
- package/dist/tools/runCommand.js +101 -0
- package/dist/tools/runCommand.js.map +1 -0
- package/dist/tools/runTests.d.ts +146 -0
- package/dist/tools/runTests.js +315 -0
- package/dist/tools/runTests.js.map +1 -0
- package/dist/tools/saveDocument.d.ts +50 -0
- package/dist/tools/saveDocument.js +73 -0
- package/dist/tools/saveDocument.js.map +1 -0
- package/dist/tools/screenshot.d.ts +23 -0
- package/dist/tools/screenshot.js +43 -0
- package/dist/tools/screenshot.js.map +1 -0
- package/dist/tools/screenshotAndAnnotate.d.ts +103 -0
- package/dist/tools/screenshotAndAnnotate.js +192 -0
- package/dist/tools/screenshotAndAnnotate.js.map +1 -0
- package/dist/tools/searchAndReplace.d.ts +108 -0
- package/dist/tools/searchAndReplace.js +281 -0
- package/dist/tools/searchAndReplace.js.map +1 -0
- package/dist/tools/searchTools.d.ts +61 -0
- package/dist/tools/searchTools.js +85 -0
- package/dist/tools/searchTools.js.map +1 -0
- package/dist/tools/searchWorkspace.d.ts +99 -0
- package/dist/tools/searchWorkspace.js +189 -0
- package/dist/tools/searchWorkspace.js.map +1 -0
- package/dist/tools/selectionRanges.d.ts +58 -0
- package/dist/tools/selectionRanges.js +61 -0
- package/dist/tools/selectionRanges.js.map +1 -0
- package/dist/tools/semanticTokens.d.ts +87 -0
- package/dist/tools/semanticTokens.js +86 -0
- package/dist/tools/semanticTokens.js.map +1 -0
- package/dist/tools/setActiveWorkspaceFolder.d.ts +41 -0
- package/dist/tools/setActiveWorkspaceFolder.js +38 -0
- package/dist/tools/setActiveWorkspaceFolder.js.map +1 -0
- package/dist/tools/signatureHelp.d.ts +86 -0
- package/dist/tools/signatureHelp.js +79 -0
- package/dist/tools/signatureHelp.js.map +1 -0
- package/dist/tools/spawnWorkspace.d.ts +103 -0
- package/dist/tools/spawnWorkspace.js +268 -0
- package/dist/tools/spawnWorkspace.js.map +1 -0
- package/dist/tools/stackTraceParser.d.ts +43 -0
- package/dist/tools/stackTraceParser.js +139 -0
- package/dist/tools/stackTraceParser.js.map +1 -0
- package/dist/tools/terminal.d.ts +352 -0
- package/dist/tools/terminal.js +670 -0
- package/dist/tools/terminal.js.map +1 -0
- package/dist/tools/testRunners/cargoTest.d.ts +2 -0
- package/dist/tools/testRunners/cargoTest.js +129 -0
- package/dist/tools/testRunners/cargoTest.js.map +1 -0
- package/dist/tools/testRunners/goTest.d.ts +2 -0
- package/dist/tools/testRunners/goTest.js +108 -0
- package/dist/tools/testRunners/goTest.js.map +1 -0
- package/dist/tools/testRunners/pytest.d.ts +2 -0
- package/dist/tools/testRunners/pytest.js +135 -0
- package/dist/tools/testRunners/pytest.js.map +1 -0
- package/dist/tools/testRunners/types.d.ts +18 -0
- package/dist/tools/testRunners/types.js +2 -0
- package/dist/tools/testRunners/types.js.map +1 -0
- package/dist/tools/testRunners/vitestJest.d.ts +3 -0
- package/dist/tools/testRunners/vitestJest.js +215 -0
- package/dist/tools/testRunners/vitestJest.js.map +1 -0
- package/dist/tools/testTraceToSource.d.ts +80 -0
- package/dist/tools/testTraceToSource.js +206 -0
- package/dist/tools/testTraceToSource.js.map +1 -0
- package/dist/tools/transaction.d.ts +243 -0
- package/dist/tools/transaction.js +309 -0
- package/dist/tools/transaction.js.map +1 -0
- package/dist/tools/typeHierarchy.d.ts +77 -0
- package/dist/tools/typeHierarchy.js +86 -0
- package/dist/tools/typeHierarchy.js.map +1 -0
- package/dist/tools/utils.d.ts +124 -0
- package/dist/tools/utils.js +566 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools/vscodeCommands.d.ts +90 -0
- package/dist/tools/vscodeCommands.js +112 -0
- package/dist/tools/vscodeCommands.js.map +1 -0
- package/dist/tools/vscodeTasks.d.ts +102 -0
- package/dist/tools/vscodeTasks.js +110 -0
- package/dist/tools/vscodeTasks.js.map +1 -0
- package/dist/tools/watchDiagnostics.d.ts +64 -0
- package/dist/tools/watchDiagnostics.js +270 -0
- package/dist/tools/watchDiagnostics.js.map +1 -0
- package/dist/tools/workspaceSettings.d.ts +57 -0
- package/dist/tools/workspaceSettings.js +80 -0
- package/dist/tools/workspaceSettings.js.map +1 -0
- package/dist/transport.d.ts +207 -0
- package/dist/transport.js +1272 -0
- package/dist/transport.js.map +1 -0
- package/dist/version.d.ts +13 -0
- package/dist/version.js +31 -0
- package/dist/version.js.map +1 -0
- package/dist/wsUtils.d.ts +8 -0
- package/dist/wsUtils.js +54 -0
- package/dist/wsUtils.js.map +1 -0
- package/package.json +118 -0
- package/scripts/gen-claude-desktop-config.sh +124 -0
- package/scripts/gen-mcp-config.sh +390 -0
- package/scripts/install-extension.sh +106 -0
- package/scripts/mcp-stdio-shim.cjs +482 -0
- package/scripts/postinstall.mjs +68 -0
- package/scripts/start-all.sh +502 -0
- package/scripts/start-orchestrator.sh +186 -0
- package/scripts/start-remote.sh +126 -0
- package/scripts/start-vps.sh +116 -0
- package/templates/CLAUDE.bridge.md +125 -0
- package/templates/automation-policies/security-first.json +46 -0
- package/templates/automation-policies/strict-lint.json +41 -0
- package/templates/automation-policies/test-driven.json +54 -0
- package/templates/automation-policy.example.json +105 -0
- package/templates/bridge-tools.md +111 -0
- package/templates/dispatch-context.md +33 -0
- package/templates/managed-agent/code-review-agent.md +50 -0
- package/templates/managed-agent/managed-agent-mcp.json +102 -0
- package/templates/recipes/ambient-journal.yaml +11 -0
- package/templates/recipes/daily-status.yaml +21 -0
- package/templates/recipes/lint-on-save.yaml +13 -0
- package/templates/recipes/stale-branches.yaml +18 -0
- package/templates/recipes/watch-failing-tests.yaml +15 -0
- package/templates/scheduled-tasks/dependency-audit/SKILL.md +77 -0
- package/templates/scheduled-tasks/health-check/SKILL.md +73 -0
- package/templates/scheduled-tasks/nightly-review/SKILL.md +69 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipesHttp.js","sourceRoot":"","sources":["../src/recipesHttp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** An MCP Resource object. */
|
|
2
|
+
export interface McpResource {
|
|
3
|
+
uri: string;
|
|
4
|
+
name: string;
|
|
5
|
+
mimeType: string;
|
|
6
|
+
size?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface ListResourcesResult {
|
|
9
|
+
resources: McpResource[];
|
|
10
|
+
nextCursor?: string;
|
|
11
|
+
}
|
|
12
|
+
/** Invalidate the walk cache (useful in tests when files are added mid-run). */
|
|
13
|
+
export declare function invalidateResourcesCache(workspace?: string): void;
|
|
14
|
+
/**
|
|
15
|
+
* List workspace files as MCP resources, with cursor-based pagination.
|
|
16
|
+
* Cursor is an opaque base64-encoded decimal offset (same pattern as tools/list).
|
|
17
|
+
*/
|
|
18
|
+
export declare function listResources(workspace: string, cursor?: string): ListResourcesResult;
|
|
19
|
+
export type ReadResourceResult = {
|
|
20
|
+
contents: Array<{
|
|
21
|
+
uri: string;
|
|
22
|
+
text: string;
|
|
23
|
+
mimeType: string;
|
|
24
|
+
}>;
|
|
25
|
+
} | {
|
|
26
|
+
error: string;
|
|
27
|
+
code: string;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Read a workspace file by URI.
|
|
31
|
+
* Returns an error object if the file is outside the workspace, too large, or unreadable.
|
|
32
|
+
*/
|
|
33
|
+
export declare function readResource(workspace: string, uri: string): ReadResourceResult;
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP resources/ implementation.
|
|
3
|
+
*
|
|
4
|
+
* Exposes workspace files as addressable MCP Resource objects.
|
|
5
|
+
* Security: all paths are workspace-confined (same rules as tools).
|
|
6
|
+
* Does not implement resources/subscribe or resources/templates/list (deferred).
|
|
7
|
+
*/
|
|
8
|
+
import fs from "node:fs";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import { mimeTypeFromPath } from "./tools/utils.js";
|
|
11
|
+
const RESOURCES_PAGE_SIZE = 50;
|
|
12
|
+
const MAX_RESOURCE_BYTES = 1 * 1024 * 1024; // 1 MB — same guard as getBufferContent
|
|
13
|
+
/** Extensions we emit as resources. Binary files (images, pdfs) are listed but not read as text. */
|
|
14
|
+
const TEXT_RESOURCE_EXTS = new Set([
|
|
15
|
+
".ts",
|
|
16
|
+
".tsx",
|
|
17
|
+
".js",
|
|
18
|
+
".jsx",
|
|
19
|
+
".mjs",
|
|
20
|
+
".cjs",
|
|
21
|
+
".json",
|
|
22
|
+
".yaml",
|
|
23
|
+
".yml",
|
|
24
|
+
".toml",
|
|
25
|
+
".xml",
|
|
26
|
+
".html",
|
|
27
|
+
".htm",
|
|
28
|
+
".css",
|
|
29
|
+
".scss",
|
|
30
|
+
".less",
|
|
31
|
+
".md",
|
|
32
|
+
".txt",
|
|
33
|
+
".sh",
|
|
34
|
+
".bash",
|
|
35
|
+
".py",
|
|
36
|
+
".rb",
|
|
37
|
+
".rs",
|
|
38
|
+
".go",
|
|
39
|
+
".java",
|
|
40
|
+
".c",
|
|
41
|
+
".cpp",
|
|
42
|
+
".h",
|
|
43
|
+
".hpp",
|
|
44
|
+
".sql",
|
|
45
|
+
".graphql",
|
|
46
|
+
".vue",
|
|
47
|
+
".svelte",
|
|
48
|
+
".gitignore",
|
|
49
|
+
".editorconfig",
|
|
50
|
+
]);
|
|
51
|
+
const SKIP_DIRS = new Set([
|
|
52
|
+
"node_modules",
|
|
53
|
+
".git",
|
|
54
|
+
".svn",
|
|
55
|
+
".hg",
|
|
56
|
+
"dist",
|
|
57
|
+
"build",
|
|
58
|
+
"out",
|
|
59
|
+
".next",
|
|
60
|
+
".nuxt",
|
|
61
|
+
"__pycache__",
|
|
62
|
+
".pytest_cache",
|
|
63
|
+
".tox",
|
|
64
|
+
"target",
|
|
65
|
+
".cargo",
|
|
66
|
+
".DS_Store",
|
|
67
|
+
]);
|
|
68
|
+
const MAX_WALK_DEPTH = 20; // prevent blocking on pathologically deep directory trees
|
|
69
|
+
/**
|
|
70
|
+
* Recursively enumerate workspace files, skipping common non-source directories.
|
|
71
|
+
* Returns absolute paths sorted lexicographically.
|
|
72
|
+
*/
|
|
73
|
+
function collectWorkspaceFiles(workspace) {
|
|
74
|
+
const results = [];
|
|
75
|
+
function walk(dir, depth) {
|
|
76
|
+
if (depth > MAX_WALK_DEPTH)
|
|
77
|
+
return;
|
|
78
|
+
let entries;
|
|
79
|
+
try {
|
|
80
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
for (const entry of entries) {
|
|
86
|
+
if (SKIP_DIRS.has(entry.name))
|
|
87
|
+
continue;
|
|
88
|
+
const full = path.join(dir, entry.name);
|
|
89
|
+
if (entry.isSymbolicLink())
|
|
90
|
+
continue; // skip symlinks for security
|
|
91
|
+
if (entry.isDirectory()) {
|
|
92
|
+
walk(full, depth + 1);
|
|
93
|
+
}
|
|
94
|
+
else if (entry.isFile()) {
|
|
95
|
+
results.push(full);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
walk(workspace, 0);
|
|
100
|
+
results.sort();
|
|
101
|
+
return results;
|
|
102
|
+
}
|
|
103
|
+
function fileToResource(absPath, workspace) {
|
|
104
|
+
const relPath = absPath.startsWith(workspace + path.sep)
|
|
105
|
+
? absPath.slice(workspace.length + 1)
|
|
106
|
+
: absPath;
|
|
107
|
+
const uri = `file://${absPath}`;
|
|
108
|
+
return {
|
|
109
|
+
uri,
|
|
110
|
+
name: relPath,
|
|
111
|
+
mimeType: mimeTypeFromPath(absPath),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// Simple in-memory snapshot to avoid re-walking the filesystem on every paginated call.
|
|
115
|
+
// Invalidated after 5 seconds so the list stays reasonably fresh without constant I/O.
|
|
116
|
+
// Keyed by workspace path so multi-root sessions don't share or evict each other's cache.
|
|
117
|
+
const WALK_CACHE_TTL_MS = 5_000;
|
|
118
|
+
const walkCache = new Map();
|
|
119
|
+
function getCachedWorkspaceFiles(workspace) {
|
|
120
|
+
const now = Date.now();
|
|
121
|
+
const cached = walkCache.get(workspace);
|
|
122
|
+
if (cached && now < cached.expiresAt) {
|
|
123
|
+
return cached.files;
|
|
124
|
+
}
|
|
125
|
+
const files = collectWorkspaceFiles(workspace);
|
|
126
|
+
walkCache.set(workspace, { files, expiresAt: now + WALK_CACHE_TTL_MS });
|
|
127
|
+
return files;
|
|
128
|
+
}
|
|
129
|
+
/** Invalidate the walk cache (useful in tests when files are added mid-run). */
|
|
130
|
+
export function invalidateResourcesCache(workspace) {
|
|
131
|
+
if (workspace) {
|
|
132
|
+
walkCache.delete(workspace);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
walkCache.clear();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* List workspace files as MCP resources, with cursor-based pagination.
|
|
140
|
+
* Cursor is an opaque base64-encoded decimal offset (same pattern as tools/list).
|
|
141
|
+
*/
|
|
142
|
+
export function listResources(workspace, cursor) {
|
|
143
|
+
const allFiles = getCachedWorkspaceFiles(workspace);
|
|
144
|
+
let offset = 0;
|
|
145
|
+
if (typeof cursor === "string") {
|
|
146
|
+
try {
|
|
147
|
+
const decoded = Number.parseInt(Buffer.from(cursor, "base64").toString("utf-8"), 10);
|
|
148
|
+
if (Number.isFinite(decoded) && decoded >= 0)
|
|
149
|
+
offset = decoded;
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// malformed cursor — start from beginning
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const page = allFiles.slice(offset, offset + RESOURCES_PAGE_SIZE);
|
|
156
|
+
const nextOffset = offset + RESOURCES_PAGE_SIZE;
|
|
157
|
+
const hasMore = nextOffset < allFiles.length;
|
|
158
|
+
const nextCursor = hasMore
|
|
159
|
+
? Buffer.from(String(nextOffset)).toString("base64")
|
|
160
|
+
: undefined;
|
|
161
|
+
return {
|
|
162
|
+
resources: page.map((f) => fileToResource(f, workspace)),
|
|
163
|
+
...(nextCursor !== undefined && { nextCursor }),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Read a workspace file by URI.
|
|
168
|
+
* Returns an error object if the file is outside the workspace, too large, or unreadable.
|
|
169
|
+
*/
|
|
170
|
+
export function readResource(workspace, uri) {
|
|
171
|
+
// Accept file:// URIs only
|
|
172
|
+
if (!uri.startsWith("file://")) {
|
|
173
|
+
return { error: "Only file:// URIs are supported", code: "invalid_args" };
|
|
174
|
+
}
|
|
175
|
+
// Decode percent-encoding before resolving — paths with spaces are encoded
|
|
176
|
+
// as "file:///my%20dir/file.ts" and must be decoded or the workspace check fails.
|
|
177
|
+
let rawPath;
|
|
178
|
+
try {
|
|
179
|
+
rawPath = decodeURIComponent(uri.slice(7)); // strip "file://" then decode
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return {
|
|
183
|
+
error: `URI "${uri}" contains invalid percent-encoding`,
|
|
184
|
+
code: "invalid_args",
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
const absPath = path.resolve(rawPath);
|
|
188
|
+
const normalizedWorkspace = path.resolve(workspace);
|
|
189
|
+
// Workspace confinement
|
|
190
|
+
if (absPath !== normalizedWorkspace &&
|
|
191
|
+
!absPath.startsWith(normalizedWorkspace + path.sep)) {
|
|
192
|
+
return {
|
|
193
|
+
error: `URI "${uri}" is outside the workspace`,
|
|
194
|
+
code: "workspace_escape",
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
// Stat to check size — use lstatSync so symlinks are not followed
|
|
198
|
+
let stat;
|
|
199
|
+
try {
|
|
200
|
+
stat = fs.lstatSync(absPath);
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return { error: `Resource not found: ${uri}`, code: "file_not_found" };
|
|
204
|
+
}
|
|
205
|
+
// Reject symlinks — listing already skips them; read must too
|
|
206
|
+
if (stat.isSymbolicLink()) {
|
|
207
|
+
return {
|
|
208
|
+
error: `URI "${uri}" is a symlink — not supported`,
|
|
209
|
+
code: "invalid_args",
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
if (!stat.isFile()) {
|
|
213
|
+
return { error: `URI "${uri}" is not a file`, code: "invalid_args" };
|
|
214
|
+
}
|
|
215
|
+
if (stat.size > MAX_RESOURCE_BYTES) {
|
|
216
|
+
return {
|
|
217
|
+
error: `Resource "${uri}" is too large (${stat.size} bytes > ${MAX_RESOURCE_BYTES} byte limit)`,
|
|
218
|
+
code: "resource_too_large",
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
// Re-check containment after resolving any intermediate symlinks in ancestor directories
|
|
222
|
+
// e.g. workspace/dir/link -> /etc would be caught here
|
|
223
|
+
let realPath;
|
|
224
|
+
let realWorkspace;
|
|
225
|
+
try {
|
|
226
|
+
realPath = fs.realpathSync(absPath);
|
|
227
|
+
realWorkspace = fs.realpathSync(normalizedWorkspace);
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return { error: `Resource not found: ${uri}`, code: "file_not_found" };
|
|
231
|
+
}
|
|
232
|
+
if (realPath !== realWorkspace &&
|
|
233
|
+
!realPath.startsWith(realWorkspace + path.sep)) {
|
|
234
|
+
return {
|
|
235
|
+
error: `URI "${uri}" is outside the workspace`,
|
|
236
|
+
code: "workspace_escape",
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
const ext = path.extname(absPath).toLowerCase();
|
|
240
|
+
if (!TEXT_RESOURCE_EXTS.has(ext)) {
|
|
241
|
+
return {
|
|
242
|
+
error: `Resource "${uri}" has a binary or unsupported extension "${ext}"`,
|
|
243
|
+
code: "invalid_args",
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
let text;
|
|
247
|
+
try {
|
|
248
|
+
text = fs.readFileSync(realPath, "utf-8");
|
|
249
|
+
}
|
|
250
|
+
catch (err) {
|
|
251
|
+
return {
|
|
252
|
+
error: `Failed to read resource: ${err instanceof Error ? err.message : String(err)}`,
|
|
253
|
+
code: "permission_denied",
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
return {
|
|
257
|
+
contents: [
|
|
258
|
+
{
|
|
259
|
+
uri,
|
|
260
|
+
text,
|
|
261
|
+
mimeType: mimeTypeFromPath(absPath),
|
|
262
|
+
},
|
|
263
|
+
],
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Risk tier registry — classifies MCP tools so the dashboard approval flow
|
|
3
|
+
* knows which calls need human sign-off before dispatch.
|
|
4
|
+
*
|
|
5
|
+
* Defaults are deliberately conservative. Unknown tools default to "medium"
|
|
6
|
+
* until someone classifies them (safer than auto-approving).
|
|
7
|
+
*
|
|
8
|
+
* ── Alignment with Claude Code permissions (https://code.claude.com/docs/en/permissions)
|
|
9
|
+
*
|
|
10
|
+
* CC classifies tools by *behavior*, not by abstract risk. Our tiers map to
|
|
11
|
+
* CC's built-in categories as follows:
|
|
12
|
+
*
|
|
13
|
+
* low → read-only — CC never prompts (Read, Grep, Glob, etc.)
|
|
14
|
+
* medium → file-mod — CC prompts, remembered for the session
|
|
15
|
+
* high → shell-exec — CC prompts, remembered permanently per command
|
|
16
|
+
* + external-side-effect (gitPush, sendHttpRequest,
|
|
17
|
+
* githubCreatePR) — always requires approval
|
|
18
|
+
*
|
|
19
|
+
* CC's decision precedence is `deny → ask → allow` via rules in
|
|
20
|
+
* `permissions.{allow,ask,deny}` (settings.json). Our ApprovalQueue +
|
|
21
|
+
* /approvals endpoint plug in as a PreToolUse hook backend so the dashboard
|
|
22
|
+
* can serve as a browser/phone approval UI for CC itself. See
|
|
23
|
+
* scripts/patchwork-approval-hook.sh.
|
|
24
|
+
*/
|
|
25
|
+
export type RiskTier = "low" | "medium" | "high";
|
|
26
|
+
/** CC-native behavior class. Prefer this over RiskTier for new code. */
|
|
27
|
+
export type ToolBehavior = "readOnly" | "localWrite" | "shellExec" | "externalEffect";
|
|
28
|
+
/**
|
|
29
|
+
* Infer a risk tier from the tool name when the hardcoded map has no entry.
|
|
30
|
+
* Lets us classify newly-added tools without maintaining a parallel list.
|
|
31
|
+
* Heuristics ordered from most-specific to most-general; first match wins.
|
|
32
|
+
*/
|
|
33
|
+
export declare function inferTierFromName(toolName: string): RiskTier;
|
|
34
|
+
export declare function classifyTool(toolName: string): RiskTier;
|
|
35
|
+
export declare function requiresApproval(toolName: string, policy?: RiskTier[]): boolean;
|
|
36
|
+
export declare function riskTierSummary(): Record<RiskTier, number>;
|
|
37
|
+
/** Exposed for tests and the dashboard registry endpoint. */
|
|
38
|
+
export declare function getRiskTierMap(): Readonly<Record<string, RiskTier>>;
|
|
39
|
+
/** Derive CC-native behavior class from tool name. */
|
|
40
|
+
export declare function classifyBehavior(toolName: string): ToolBehavior;
|
package/dist/riskTier.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Risk tier registry — classifies MCP tools so the dashboard approval flow
|
|
3
|
+
* knows which calls need human sign-off before dispatch.
|
|
4
|
+
*
|
|
5
|
+
* Defaults are deliberately conservative. Unknown tools default to "medium"
|
|
6
|
+
* until someone classifies them (safer than auto-approving).
|
|
7
|
+
*
|
|
8
|
+
* ── Alignment with Claude Code permissions (https://code.claude.com/docs/en/permissions)
|
|
9
|
+
*
|
|
10
|
+
* CC classifies tools by *behavior*, not by abstract risk. Our tiers map to
|
|
11
|
+
* CC's built-in categories as follows:
|
|
12
|
+
*
|
|
13
|
+
* low → read-only — CC never prompts (Read, Grep, Glob, etc.)
|
|
14
|
+
* medium → file-mod — CC prompts, remembered for the session
|
|
15
|
+
* high → shell-exec — CC prompts, remembered permanently per command
|
|
16
|
+
* + external-side-effect (gitPush, sendHttpRequest,
|
|
17
|
+
* githubCreatePR) — always requires approval
|
|
18
|
+
*
|
|
19
|
+
* CC's decision precedence is `deny → ask → allow` via rules in
|
|
20
|
+
* `permissions.{allow,ask,deny}` (settings.json). Our ApprovalQueue +
|
|
21
|
+
* /approvals endpoint plug in as a PreToolUse hook backend so the dashboard
|
|
22
|
+
* can serve as a browser/phone approval UI for CC itself. See
|
|
23
|
+
* scripts/patchwork-approval-hook.sh.
|
|
24
|
+
*/
|
|
25
|
+
const BEHAVIOR_FROM_TIER = {
|
|
26
|
+
low: "readOnly",
|
|
27
|
+
medium: "localWrite",
|
|
28
|
+
high: "externalEffect",
|
|
29
|
+
};
|
|
30
|
+
const TIER_MAP = {
|
|
31
|
+
// ── low: pure reads ───────────────────────────────────────────────────────
|
|
32
|
+
getBufferContent: "low",
|
|
33
|
+
getDiagnostics: "low",
|
|
34
|
+
getFileTree: "low",
|
|
35
|
+
findFiles: "low",
|
|
36
|
+
searchWorkspace: "low",
|
|
37
|
+
searchWorkspaceSymbols: "low",
|
|
38
|
+
goToDefinition: "low",
|
|
39
|
+
findReferences: "low",
|
|
40
|
+
getCallHierarchy: "low",
|
|
41
|
+
getDocumentSymbols: "low",
|
|
42
|
+
getHover: "low",
|
|
43
|
+
getHoverAtCursor: "low",
|
|
44
|
+
getGitStatus: "low",
|
|
45
|
+
getGitDiff: "low",
|
|
46
|
+
getGitLog: "low",
|
|
47
|
+
getBridgeStatus: "low",
|
|
48
|
+
getToolCapabilities: "low",
|
|
49
|
+
getActivityLog: "low",
|
|
50
|
+
getOpenEditors: "low",
|
|
51
|
+
contextBundle: "low",
|
|
52
|
+
getCodeLens: "low",
|
|
53
|
+
getSemanticTokens: "low",
|
|
54
|
+
getProjectInfo: "low",
|
|
55
|
+
captureScreenshot: "low",
|
|
56
|
+
gitBlame: "low",
|
|
57
|
+
// ── medium: local writes + reversible edits ───────────────────────────────
|
|
58
|
+
editText: "medium",
|
|
59
|
+
createFile: "medium",
|
|
60
|
+
saveDocument: "medium",
|
|
61
|
+
formatDocument: "medium",
|
|
62
|
+
formatAndSave: "medium",
|
|
63
|
+
organizeImports: "medium",
|
|
64
|
+
renameSymbol: "medium",
|
|
65
|
+
refactorExtractFunction: "medium",
|
|
66
|
+
searchAndReplace: "medium",
|
|
67
|
+
applyCodeAction: "medium",
|
|
68
|
+
fixAllLintErrors: "medium",
|
|
69
|
+
runTests: "medium",
|
|
70
|
+
setHandoffNote: "medium",
|
|
71
|
+
gitAdd: "medium",
|
|
72
|
+
gitStash: "medium",
|
|
73
|
+
gitStashPop: "medium",
|
|
74
|
+
gitCheckout: "medium",
|
|
75
|
+
// ── high: remote state, destructive, or side-effect externally ────────────
|
|
76
|
+
gitCommit: "high",
|
|
77
|
+
gitPush: "high",
|
|
78
|
+
gitPull: "high",
|
|
79
|
+
gitFetch: "high",
|
|
80
|
+
githubCreatePR: "high",
|
|
81
|
+
githubCommentIssue: "high",
|
|
82
|
+
githubCreateIssue: "high",
|
|
83
|
+
githubPostPRReview: "high",
|
|
84
|
+
runCommand: "high",
|
|
85
|
+
runInTerminal: "high",
|
|
86
|
+
sendTerminalCommand: "high",
|
|
87
|
+
deleteFile: "high",
|
|
88
|
+
renameFile: "high",
|
|
89
|
+
sendHttpRequest: "high",
|
|
90
|
+
executeVSCodeCommand: "high",
|
|
91
|
+
runClaudeTask: "high",
|
|
92
|
+
resumeClaudeTask: "high",
|
|
93
|
+
evaluateInDebugger: "high",
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Infer a risk tier from the tool name when the hardcoded map has no entry.
|
|
97
|
+
* Lets us classify newly-added tools without maintaining a parallel list.
|
|
98
|
+
* Heuristics ordered from most-specific to most-general; first match wins.
|
|
99
|
+
*/
|
|
100
|
+
export function inferTierFromName(toolName) {
|
|
101
|
+
const n = toolName;
|
|
102
|
+
// Write / destructive / external
|
|
103
|
+
if (/^(git(Push|Pull|Fetch|Commit))$/.test(n) ||
|
|
104
|
+
/^github(Create|Comment|Post|Delete)/.test(n) ||
|
|
105
|
+
/^(delete|unlink|drop)[A-Z]/.test(n) ||
|
|
106
|
+
n === "renameFile" ||
|
|
107
|
+
/^(run|exec|spawn|send|start|stop|kill|launch|resume|cancel)[A-Z]/.test(n) ||
|
|
108
|
+
/^(open|execute|dispatch)[A-Z]/.test(n) ||
|
|
109
|
+
n === "sendHttpRequest")
|
|
110
|
+
return "high";
|
|
111
|
+
// Local writes
|
|
112
|
+
if (/^(edit|write|create|save|format|apply|fix|refactor|rename|organize|stage|commit|add|stash)[A-Z]/.test(n) ||
|
|
113
|
+
/(^set|^update|^replace)[A-Z]/.test(n) ||
|
|
114
|
+
/search[A-Z].*Replace/i.test(n))
|
|
115
|
+
return "medium";
|
|
116
|
+
// Reads
|
|
117
|
+
if (/^(get|find|search|list|read|describe|explain|goTo|hover|preview|capture|explore|resolve|probe|check|lookup|parse|classify|compute|compare|render|validate|ping|ready|detect|watch)/.test(n) ||
|
|
118
|
+
n === "contextBundle")
|
|
119
|
+
return "low";
|
|
120
|
+
return "medium";
|
|
121
|
+
}
|
|
122
|
+
export function classifyTool(toolName) {
|
|
123
|
+
return TIER_MAP[toolName] ?? inferTierFromName(toolName);
|
|
124
|
+
}
|
|
125
|
+
export function requiresApproval(toolName, policy = ["high"]) {
|
|
126
|
+
return policy.includes(classifyTool(toolName));
|
|
127
|
+
}
|
|
128
|
+
export function riskTierSummary() {
|
|
129
|
+
const counts = { low: 0, medium: 0, high: 0 };
|
|
130
|
+
for (const t of Object.values(TIER_MAP))
|
|
131
|
+
counts[t]++;
|
|
132
|
+
return counts;
|
|
133
|
+
}
|
|
134
|
+
/** Exposed for tests and the dashboard registry endpoint. */
|
|
135
|
+
export function getRiskTierMap() {
|
|
136
|
+
return TIER_MAP;
|
|
137
|
+
}
|
|
138
|
+
/** Derive CC-native behavior class from tool name. */
|
|
139
|
+
export function classifyBehavior(toolName) {
|
|
140
|
+
return BEHAVIOR_FROM_TIER[classifyTool(toolName)];
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=riskTier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"riskTier.js","sourceRoot":"","sources":["../src/riskTier.ts"],"names":[],"mappings":"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"}
|
package/dist/runLog.d.ts
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { Logger } from "./logger.js";
|
|
2
|
+
/**
|
|
3
|
+
* RecipeRunLog — persistent audit trail of every recipe execution.
|
|
4
|
+
*
|
|
5
|
+
* A "run" is any orchestrator task whose triggerSource identifies it as recipe-
|
|
6
|
+
* derived (prefix `cron:`, `webhook:`, or `recipe:`). Runs are appended to a
|
|
7
|
+
* JSONL file so overnight/background activity survives bridge restarts, and
|
|
8
|
+
* mirrored into a bounded in-memory ring for quick dashboard reads.
|
|
9
|
+
*
|
|
10
|
+
* Schema is deliberately minimal + additive: extra fields go in without a
|
|
11
|
+
* migration. Consumers must tolerate unknown keys.
|
|
12
|
+
*/
|
|
13
|
+
export type RunTrigger = "cron" | "webhook" | "recipe";
|
|
14
|
+
export type RunStatus = "done" | "error" | "cancelled" | "interrupted";
|
|
15
|
+
export interface RecipeRun {
|
|
16
|
+
/** Monotonic sequence id within the process — stable for pagination. */
|
|
17
|
+
seq: number;
|
|
18
|
+
/** Orchestrator task id — useful for cross-referencing /tasks. */
|
|
19
|
+
taskId: string;
|
|
20
|
+
/** Recipe name extracted from triggerSource. */
|
|
21
|
+
recipeName: string;
|
|
22
|
+
/** Trigger kind: how the recipe fired. */
|
|
23
|
+
trigger: RunTrigger;
|
|
24
|
+
/** Terminal task status. */
|
|
25
|
+
status: RunStatus;
|
|
26
|
+
/** Task creation time (ms epoch). */
|
|
27
|
+
createdAt: number;
|
|
28
|
+
/** Task start time (ms epoch) — undefined if cancelled before spawn. */
|
|
29
|
+
startedAt?: number;
|
|
30
|
+
/** Task completion time (ms epoch). */
|
|
31
|
+
doneAt: number;
|
|
32
|
+
/** Model used, if known. */
|
|
33
|
+
model?: string;
|
|
34
|
+
/** Truncated output tail — first 2KB, enough for a "RECIPE DONE:" line. */
|
|
35
|
+
outputTail?: string;
|
|
36
|
+
/** Error message for failed runs. */
|
|
37
|
+
errorMessage?: string;
|
|
38
|
+
/** Duration ms = doneAt - (startedAt ?? createdAt). */
|
|
39
|
+
durationMs: number;
|
|
40
|
+
}
|
|
41
|
+
export interface RunLogOptions {
|
|
42
|
+
/** Directory holding runs.jsonl. Created if missing. */
|
|
43
|
+
dir: string;
|
|
44
|
+
logger?: Logger;
|
|
45
|
+
/** Cap on in-memory ring. File is not truncated. */
|
|
46
|
+
memoryCap?: number;
|
|
47
|
+
/** Test hook — default Date.now. */
|
|
48
|
+
now?: () => number;
|
|
49
|
+
}
|
|
50
|
+
export interface RunQuery {
|
|
51
|
+
limit?: number;
|
|
52
|
+
trigger?: RunTrigger;
|
|
53
|
+
status?: RunStatus;
|
|
54
|
+
recipe?: string;
|
|
55
|
+
/** Runs with seq > after. */
|
|
56
|
+
after?: number;
|
|
57
|
+
}
|
|
58
|
+
export declare class RecipeRunLog {
|
|
59
|
+
private readonly opts;
|
|
60
|
+
private runs;
|
|
61
|
+
private seq;
|
|
62
|
+
private readonly file;
|
|
63
|
+
private readonly memoryCap;
|
|
64
|
+
private readonly now;
|
|
65
|
+
constructor(opts: RunLogOptions);
|
|
66
|
+
/**
|
|
67
|
+
* Parse triggerSource into `{trigger, recipeName}`. Returns null for non-recipe
|
|
68
|
+
* triggers (e.g. automation hooks like "onFileSave") so the caller can ignore them.
|
|
69
|
+
*/
|
|
70
|
+
static parseTrigger(triggerSource: string | undefined): {
|
|
71
|
+
trigger: RunTrigger;
|
|
72
|
+
recipeName: string;
|
|
73
|
+
} | null;
|
|
74
|
+
record(task: {
|
|
75
|
+
id: string;
|
|
76
|
+
triggerSource?: string;
|
|
77
|
+
status: string;
|
|
78
|
+
createdAt: number;
|
|
79
|
+
startedAt?: number;
|
|
80
|
+
doneAt?: number;
|
|
81
|
+
model?: string;
|
|
82
|
+
output?: string;
|
|
83
|
+
errorMessage?: string;
|
|
84
|
+
}): RecipeRun | null;
|
|
85
|
+
query(q?: RunQuery): RecipeRun[];
|
|
86
|
+
/** Test/inspection helper — current in-memory size. */
|
|
87
|
+
size(): number;
|
|
88
|
+
private append;
|
|
89
|
+
private loadExisting;
|
|
90
|
+
}
|