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":"automationProgram.js","sourceRoot":"","sources":["../../src/fp/automationProgram.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiIH,iFAAiF;AAEjF,MAAM,UAAU,IAAI,CAAC,MAA8B;IACjD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,QAAsC;IAC7D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,QAAsC;IAC7D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,GAAW,EACX,UAAkB,EAClB,OAA0B;IAE1B,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,GAAW,EACX,UAAkB,EAClB,OAA0B;IAE1B,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,UAAkB,EAClB,OAA0B;IAE1B,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,GAAW,EACX,UAAkB,EAClB,YAAoB,EACpB,OAA0B;IAE1B,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure value type + transition functions for AutomationHooks state.
|
|
3
|
+
*
|
|
4
|
+
* The mutable fields of AutomationHooks that govern cooldowns, active-task
|
|
5
|
+
* tracking, and per-runner test outcomes are extracted here as an immutable
|
|
6
|
+
* record. AutomationHooks holds a single `private state: AutomationState`
|
|
7
|
+
* and delegates the pure logic to these functions.
|
|
8
|
+
*
|
|
9
|
+
* All functions are pure (no side-effects, no I/O, no mutation of the input
|
|
10
|
+
* state). They return new AutomationState values.
|
|
11
|
+
*/
|
|
12
|
+
export interface AutomationState {
|
|
13
|
+
/** Last trigger time (ms since epoch) per trigger key. */
|
|
14
|
+
readonly lastTrigger: ReadonlyMap<string, number>;
|
|
15
|
+
/**
|
|
16
|
+
* Active task IDs per hook key.
|
|
17
|
+
* Key: a hook-specific string (e.g. "diagnostics:/path/to/file",
|
|
18
|
+
* "gitCommit", "save:/path/to/file").
|
|
19
|
+
* Value: the Claude task ID that was spawned for this key.
|
|
20
|
+
*/
|
|
21
|
+
readonly activeTasks: ReadonlyMap<string, string>;
|
|
22
|
+
/**
|
|
23
|
+
* Previous error counts per file (used by onDiagnosticsError /
|
|
24
|
+
* onDiagnosticsCleared to detect transitions).
|
|
25
|
+
*/
|
|
26
|
+
readonly prevDiagnosticErrors: ReadonlyMap<string, number>;
|
|
27
|
+
/**
|
|
28
|
+
* Last test outcome per runner (used by onTestPassAfterFailure to detect
|
|
29
|
+
* fail→pass transitions).
|
|
30
|
+
*/
|
|
31
|
+
readonly lastTestOutcomeByRunner: ReadonlyMap<string, "pass" | "fail">;
|
|
32
|
+
/**
|
|
33
|
+
* Rolling window of task enqueue timestamps (ms since epoch).
|
|
34
|
+
* Used for maxTasksPerHour rate-limiting.
|
|
35
|
+
*/
|
|
36
|
+
readonly taskTimestamps: readonly number[];
|
|
37
|
+
/**
|
|
38
|
+
* Per-content-signature dedup timestamps (keyed: `dedup:${hookKey}:${sig}`).
|
|
39
|
+
* Bounded at 5_000 entries — same eviction as lastTrigger.
|
|
40
|
+
*/
|
|
41
|
+
readonly deduplicationWindow: ReadonlyMap<string, number>;
|
|
42
|
+
/**
|
|
43
|
+
* Pending retry records for WithRetry nodes.
|
|
44
|
+
* Key = `${hookType}:${primaryValue}`.
|
|
45
|
+
*/
|
|
46
|
+
readonly pendingRetries: ReadonlyMap<string, {
|
|
47
|
+
attempt: number;
|
|
48
|
+
nextRetryAt: number;
|
|
49
|
+
taskId: string;
|
|
50
|
+
}>;
|
|
51
|
+
/**
|
|
52
|
+
* Cached diagnostics per file for evaluateWhen condition checks.
|
|
53
|
+
*/
|
|
54
|
+
readonly latestDiagnosticsByFile: ReadonlyMap<string, {
|
|
55
|
+
severity: number;
|
|
56
|
+
count: number;
|
|
57
|
+
}>;
|
|
58
|
+
/**
|
|
59
|
+
* Last known test runner outcome (pass/fail) for evaluateWhen checks.
|
|
60
|
+
*/
|
|
61
|
+
readonly lastTestRunnerStatusByRunner: ReadonlyMap<string, "pass" | "fail">;
|
|
62
|
+
}
|
|
63
|
+
export declare const EMPTY_AUTOMATION_STATE: AutomationState;
|
|
64
|
+
/**
|
|
65
|
+
* Returns true if `key` is still within its cooldown window.
|
|
66
|
+
* Pure — does not mutate `state`.
|
|
67
|
+
*/
|
|
68
|
+
export declare function isOnCooldown(state: AutomationState, key: string, now: number, cooldownMs: number): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Return a new AutomationState where `key` has been marked as triggered at
|
|
71
|
+
* `now` and the associated `taskId` recorded as the active task for `key`.
|
|
72
|
+
*
|
|
73
|
+
* The `taskTimestamps` array is grown by one entry (capped at 10 000 entries
|
|
74
|
+
* matching the cap in AutomationHooks).
|
|
75
|
+
*/
|
|
76
|
+
export declare function recordTrigger(state: AutomationState, key: string, taskId: string, now: number): AutomationState;
|
|
77
|
+
/**
|
|
78
|
+
* Returns true if there is currently an active task for `key`.
|
|
79
|
+
* Pure — does not mutate `state`.
|
|
80
|
+
*/
|
|
81
|
+
export declare function isTaskActive(state: AutomationState, key: string): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Return a new AutomationState where the active task for `key` has been
|
|
84
|
+
* cleared (e.g. after the task completes or is cancelled).
|
|
85
|
+
*/
|
|
86
|
+
export declare function clearActiveTask(state: AutomationState, key: string): AutomationState;
|
|
87
|
+
/**
|
|
88
|
+
* Return a new AutomationState with the previous error count for `file`
|
|
89
|
+
* updated to `count`.
|
|
90
|
+
*/
|
|
91
|
+
export declare function setPrevDiagnosticErrors(state: AutomationState, file: string, count: number): AutomationState;
|
|
92
|
+
/**
|
|
93
|
+
* Return a new AutomationState with the last test outcome for `runner`
|
|
94
|
+
* updated to `outcome`.
|
|
95
|
+
*/
|
|
96
|
+
export declare function setLastTestOutcome(state: AutomationState, runner: string, outcome: "pass" | "fail"): AutomationState;
|
|
97
|
+
/**
|
|
98
|
+
* Count tasks enqueued within the last hour.
|
|
99
|
+
* Pure — does not mutate `state`.
|
|
100
|
+
*/
|
|
101
|
+
export declare function tasksInLastHour(state: AutomationState, now: number): number;
|
|
102
|
+
/**
|
|
103
|
+
* Record a dedup timestamp for `key` at `now`.
|
|
104
|
+
* Evicts oldest entry when size exceeds DEDUP_MAX_SIZE.
|
|
105
|
+
*/
|
|
106
|
+
export declare function recordDedup(state: AutomationState, key: string, now: number): AutomationState;
|
|
107
|
+
/**
|
|
108
|
+
* Returns true if `key` was recorded within `cooldownMs` of `now`.
|
|
109
|
+
* Pure — does not mutate `state`.
|
|
110
|
+
*/
|
|
111
|
+
export declare function isDeduped(state: AutomationState, key: string, now: number, cooldownMs: number): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Record or update a pending retry for `key`.
|
|
114
|
+
*/
|
|
115
|
+
export declare function recordPendingRetry(state: AutomationState, key: string, attempt: number, nextRetryAt: number, taskId: string): AutomationState;
|
|
116
|
+
/**
|
|
117
|
+
* Remove the pending retry record for `key`.
|
|
118
|
+
*/
|
|
119
|
+
export declare function clearPendingRetry(state: AutomationState, key: string): AutomationState;
|
|
120
|
+
/**
|
|
121
|
+
* Update the cached diagnostics for `file`.
|
|
122
|
+
* Bounded at 5000 files — FIFO eviction.
|
|
123
|
+
*/
|
|
124
|
+
export declare function setLatestDiagnostics(state: AutomationState, file: string, severity: number, count: number): AutomationState;
|
|
125
|
+
/**
|
|
126
|
+
* Merge two AutomationStates produced by parallel branches that share the same
|
|
127
|
+
* initial state. For each map, keeps the max timestamp / last value per key.
|
|
128
|
+
* taskTimestamps are unioned. Used by the Parallel interpreter case so both
|
|
129
|
+
* branches' cooldown / trigger records are preserved.
|
|
130
|
+
*/
|
|
131
|
+
export declare function mergeAutomationStates(a: AutomationState, b: AutomationState): AutomationState;
|
|
132
|
+
/**
|
|
133
|
+
* Update the last known test runner outcome for `runner`.
|
|
134
|
+
*/
|
|
135
|
+
export declare function setTestRunnerStatus(state: AutomationState, runner: string, outcome: "pass" | "fail"): AutomationState;
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure value type + transition functions for AutomationHooks state.
|
|
3
|
+
*
|
|
4
|
+
* The mutable fields of AutomationHooks that govern cooldowns, active-task
|
|
5
|
+
* tracking, and per-runner test outcomes are extracted here as an immutable
|
|
6
|
+
* record. AutomationHooks holds a single `private state: AutomationState`
|
|
7
|
+
* and delegates the pure logic to these functions.
|
|
8
|
+
*
|
|
9
|
+
* All functions are pure (no side-effects, no I/O, no mutation of the input
|
|
10
|
+
* state). They return new AutomationState values.
|
|
11
|
+
*/
|
|
12
|
+
export const EMPTY_AUTOMATION_STATE = {
|
|
13
|
+
lastTrigger: new Map(),
|
|
14
|
+
activeTasks: new Map(),
|
|
15
|
+
prevDiagnosticErrors: new Map(),
|
|
16
|
+
lastTestOutcomeByRunner: new Map(),
|
|
17
|
+
taskTimestamps: [],
|
|
18
|
+
deduplicationWindow: new Map(),
|
|
19
|
+
pendingRetries: new Map(),
|
|
20
|
+
latestDiagnosticsByFile: new Map(),
|
|
21
|
+
lastTestRunnerStatusByRunner: new Map(),
|
|
22
|
+
};
|
|
23
|
+
// ── Cooldown helpers ──────────────────────────────────────────────────────────
|
|
24
|
+
/**
|
|
25
|
+
* Returns true if `key` is still within its cooldown window.
|
|
26
|
+
* Pure — does not mutate `state`.
|
|
27
|
+
*/
|
|
28
|
+
export function isOnCooldown(state, key, now, cooldownMs) {
|
|
29
|
+
const last = state.lastTrigger.get(key);
|
|
30
|
+
if (last === undefined)
|
|
31
|
+
return false;
|
|
32
|
+
return now - last < cooldownMs;
|
|
33
|
+
}
|
|
34
|
+
// ── Trigger recording ─────────────────────────────────────────────────────────
|
|
35
|
+
/**
|
|
36
|
+
* Return a new AutomationState where `key` has been marked as triggered at
|
|
37
|
+
* `now` and the associated `taskId` recorded as the active task for `key`.
|
|
38
|
+
*
|
|
39
|
+
* The `taskTimestamps` array is grown by one entry (capped at 10 000 entries
|
|
40
|
+
* matching the cap in AutomationHooks).
|
|
41
|
+
*/
|
|
42
|
+
export function recordTrigger(state, key, taskId, now) {
|
|
43
|
+
const MAX_TASK_TIMESTAMPS = 10_000;
|
|
44
|
+
const newLastTrigger = new Map(state.lastTrigger);
|
|
45
|
+
newLastTrigger.set(key, now);
|
|
46
|
+
const newActiveTasks = new Map(state.activeTasks);
|
|
47
|
+
newActiveTasks.set(key, taskId);
|
|
48
|
+
const rawTimestamps = [...state.taskTimestamps, now];
|
|
49
|
+
const newTaskTimestamps = rawTimestamps.length > MAX_TASK_TIMESTAMPS
|
|
50
|
+
? rawTimestamps.slice(rawTimestamps.length - MAX_TASK_TIMESTAMPS)
|
|
51
|
+
: rawTimestamps;
|
|
52
|
+
return {
|
|
53
|
+
...state,
|
|
54
|
+
lastTrigger: newLastTrigger,
|
|
55
|
+
activeTasks: newActiveTasks,
|
|
56
|
+
taskTimestamps: newTaskTimestamps,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// ── Active-task helpers ───────────────────────────────────────────────────────
|
|
60
|
+
/**
|
|
61
|
+
* Returns true if there is currently an active task for `key`.
|
|
62
|
+
* Pure — does not mutate `state`.
|
|
63
|
+
*/
|
|
64
|
+
export function isTaskActive(state, key) {
|
|
65
|
+
return state.activeTasks.has(key);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Return a new AutomationState where the active task for `key` has been
|
|
69
|
+
* cleared (e.g. after the task completes or is cancelled).
|
|
70
|
+
*/
|
|
71
|
+
export function clearActiveTask(state, key) {
|
|
72
|
+
const newActiveTasks = new Map(state.activeTasks);
|
|
73
|
+
newActiveTasks.delete(key);
|
|
74
|
+
return { ...state, activeTasks: newActiveTasks };
|
|
75
|
+
}
|
|
76
|
+
// ── Diagnostic error count helpers ────────────────────────────────────────────
|
|
77
|
+
/**
|
|
78
|
+
* Return a new AutomationState with the previous error count for `file`
|
|
79
|
+
* updated to `count`.
|
|
80
|
+
*/
|
|
81
|
+
export function setPrevDiagnosticErrors(state, file, count) {
|
|
82
|
+
const newMap = new Map(state.prevDiagnosticErrors);
|
|
83
|
+
newMap.set(file, count);
|
|
84
|
+
return { ...state, prevDiagnosticErrors: newMap };
|
|
85
|
+
}
|
|
86
|
+
// ── Test-outcome helpers ──────────────────────────────────────────────────────
|
|
87
|
+
/**
|
|
88
|
+
* Return a new AutomationState with the last test outcome for `runner`
|
|
89
|
+
* updated to `outcome`.
|
|
90
|
+
*/
|
|
91
|
+
export function setLastTestOutcome(state, runner, outcome) {
|
|
92
|
+
const newMap = new Map(state.lastTestOutcomeByRunner);
|
|
93
|
+
newMap.set(runner, outcome);
|
|
94
|
+
return { ...state, lastTestOutcomeByRunner: newMap };
|
|
95
|
+
}
|
|
96
|
+
// ── Rate-limit helper ─────────────────────────────────────────────────────────
|
|
97
|
+
/**
|
|
98
|
+
* Count tasks enqueued within the last hour.
|
|
99
|
+
* Pure — does not mutate `state`.
|
|
100
|
+
*/
|
|
101
|
+
export function tasksInLastHour(state, now) {
|
|
102
|
+
const cutoff = now - 3_600_000;
|
|
103
|
+
return state.taskTimestamps.filter((t) => t > cutoff).length;
|
|
104
|
+
}
|
|
105
|
+
// ── Deduplication helpers ─────────────────────────────────────────────────────
|
|
106
|
+
const DEDUP_MAX_SIZE = 5_000;
|
|
107
|
+
/**
|
|
108
|
+
* Record a dedup timestamp for `key` at `now`.
|
|
109
|
+
* Evicts oldest entry when size exceeds DEDUP_MAX_SIZE.
|
|
110
|
+
*/
|
|
111
|
+
export function recordDedup(state, key, now) {
|
|
112
|
+
const newMap = new Map(state.deduplicationWindow);
|
|
113
|
+
newMap.set(key, now);
|
|
114
|
+
if (newMap.size > DEDUP_MAX_SIZE) {
|
|
115
|
+
// Evict oldest by insertion order (Map preserves insertion order)
|
|
116
|
+
const firstKey = newMap.keys().next().value;
|
|
117
|
+
newMap.delete(firstKey);
|
|
118
|
+
}
|
|
119
|
+
return { ...state, deduplicationWindow: newMap };
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Returns true if `key` was recorded within `cooldownMs` of `now`.
|
|
123
|
+
* Pure — does not mutate `state`.
|
|
124
|
+
*/
|
|
125
|
+
export function isDeduped(state, key, now, cooldownMs) {
|
|
126
|
+
const last = state.deduplicationWindow.get(key);
|
|
127
|
+
if (last === undefined)
|
|
128
|
+
return false;
|
|
129
|
+
return now - last < cooldownMs;
|
|
130
|
+
}
|
|
131
|
+
// ── Pending retry helpers ─────────────────────────────────────────────────────
|
|
132
|
+
/**
|
|
133
|
+
* Record or update a pending retry for `key`.
|
|
134
|
+
*/
|
|
135
|
+
export function recordPendingRetry(state, key, attempt, nextRetryAt, taskId) {
|
|
136
|
+
const newMap = new Map(state.pendingRetries);
|
|
137
|
+
newMap.set(key, { attempt, nextRetryAt, taskId });
|
|
138
|
+
return { ...state, pendingRetries: newMap };
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Remove the pending retry record for `key`.
|
|
142
|
+
*/
|
|
143
|
+
export function clearPendingRetry(state, key) {
|
|
144
|
+
const newMap = new Map(state.pendingRetries);
|
|
145
|
+
newMap.delete(key);
|
|
146
|
+
return { ...state, pendingRetries: newMap };
|
|
147
|
+
}
|
|
148
|
+
// ── Diagnostics-by-file helpers ───────────────────────────────────────────────
|
|
149
|
+
const DIAGNOSTICS_FILE_MAX_SIZE = 5_000;
|
|
150
|
+
/**
|
|
151
|
+
* Update the cached diagnostics for `file`.
|
|
152
|
+
* Bounded at 5000 files — FIFO eviction.
|
|
153
|
+
*/
|
|
154
|
+
export function setLatestDiagnostics(state, file, severity, count) {
|
|
155
|
+
const newMap = new Map(state.latestDiagnosticsByFile);
|
|
156
|
+
newMap.set(file, { severity, count });
|
|
157
|
+
if (newMap.size > DIAGNOSTICS_FILE_MAX_SIZE) {
|
|
158
|
+
const firstKey = newMap.keys().next().value;
|
|
159
|
+
newMap.delete(firstKey);
|
|
160
|
+
}
|
|
161
|
+
return { ...state, latestDiagnosticsByFile: newMap };
|
|
162
|
+
}
|
|
163
|
+
// ── Merge helper (for Parallel node) ──────────────────────────────────────────
|
|
164
|
+
/**
|
|
165
|
+
* Merge two AutomationStates produced by parallel branches that share the same
|
|
166
|
+
* initial state. For each map, keeps the max timestamp / last value per key.
|
|
167
|
+
* taskTimestamps are unioned. Used by the Parallel interpreter case so both
|
|
168
|
+
* branches' cooldown / trigger records are preserved.
|
|
169
|
+
*/
|
|
170
|
+
export function mergeAutomationStates(a, b) {
|
|
171
|
+
const maxNumMap = (x, y) => {
|
|
172
|
+
const out = new Map(x);
|
|
173
|
+
for (const [k, v] of y) {
|
|
174
|
+
const prev = out.get(k);
|
|
175
|
+
out.set(k, prev === undefined ? v : Math.max(prev, v));
|
|
176
|
+
}
|
|
177
|
+
return out;
|
|
178
|
+
};
|
|
179
|
+
const unionMap = (x, y) => {
|
|
180
|
+
const out = new Map(x);
|
|
181
|
+
for (const [k, v] of y)
|
|
182
|
+
out.set(k, v);
|
|
183
|
+
return out;
|
|
184
|
+
};
|
|
185
|
+
return {
|
|
186
|
+
lastTrigger: maxNumMap(a.lastTrigger, b.lastTrigger),
|
|
187
|
+
activeTasks: unionMap(a.activeTasks, b.activeTasks),
|
|
188
|
+
prevDiagnosticErrors: unionMap(a.prevDiagnosticErrors, b.prevDiagnosticErrors),
|
|
189
|
+
lastTestOutcomeByRunner: unionMap(a.lastTestOutcomeByRunner, b.lastTestOutcomeByRunner),
|
|
190
|
+
taskTimestamps: [...a.taskTimestamps, ...b.taskTimestamps].slice(-10_000),
|
|
191
|
+
deduplicationWindow: maxNumMap(a.deduplicationWindow, b.deduplicationWindow),
|
|
192
|
+
pendingRetries: unionMap(a.pendingRetries, b.pendingRetries),
|
|
193
|
+
latestDiagnosticsByFile: unionMap(a.latestDiagnosticsByFile, b.latestDiagnosticsByFile),
|
|
194
|
+
lastTestRunnerStatusByRunner: unionMap(a.lastTestRunnerStatusByRunner, b.lastTestRunnerStatusByRunner),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
// ── Test runner status helpers ────────────────────────────────────────────────
|
|
198
|
+
/**
|
|
199
|
+
* Update the last known test runner outcome for `runner`.
|
|
200
|
+
*/
|
|
201
|
+
export function setTestRunnerStatus(state, runner, outcome) {
|
|
202
|
+
const newMap = new Map(state.lastTestRunnerStatusByRunner);
|
|
203
|
+
newMap.set(runner, outcome);
|
|
204
|
+
return { ...state, lastTestRunnerStatusByRunner: newMap };
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=automationState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automationState.js","sourceRoot":"","sources":["../../src/fp/automationState.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure utility functions for automation hook prompt assembly.
|
|
3
|
+
* No side effects, no Date.now(), no process.*, no fs.*.
|
|
4
|
+
*/
|
|
5
|
+
/** Maximum byte length of an automation policy prompt (matches runClaudeTask cap) */
|
|
6
|
+
export declare const MAX_POLICY_PROMPT_CHARS = 32768;
|
|
7
|
+
/** Maximum length (chars) of a file path inserted into prompts */
|
|
8
|
+
export declare const MAX_FILE_PATH_CHARS = 500;
|
|
9
|
+
/**
|
|
10
|
+
* Wrap an untrusted user-controlled value in delimiters that include a
|
|
11
|
+
* per-trigger nonce so a crafted value cannot forge a closing delimiter.
|
|
12
|
+
* The nonce is stripped from the value itself before insertion.
|
|
13
|
+
*/
|
|
14
|
+
export declare function untrustedBlock(label: string, value: string, nonce: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Truncate a final prompt to MAX_POLICY_PROMPT_CHARS bytes at the last newline
|
|
17
|
+
* before the limit and append a truncation notice.
|
|
18
|
+
*
|
|
19
|
+
* Uses Buffer byte-length rather than JS string .length (UTF-16 code units) so
|
|
20
|
+
* that multibyte characters (emoji, CJK, surrogate pairs) are never split at a
|
|
21
|
+
* code-unit boundary, which would produce malformed text.
|
|
22
|
+
*/
|
|
23
|
+
export declare function truncatePrompt(prompt: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Build a trusted metadata prefix that is prepended to every automation hook
|
|
26
|
+
* prompt BEFORE any untrustedBlock() substitutions.
|
|
27
|
+
*
|
|
28
|
+
* `nowIso` is injected by caller (e.g. `new Date().toISOString()`) so this
|
|
29
|
+
* function remains deterministic in tests.
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildHookMetadata(hookName: string, nowIso: string, file?: string): string;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure utility functions for automation hook prompt assembly.
|
|
3
|
+
* No side effects, no Date.now(), no process.*, no fs.*.
|
|
4
|
+
*/
|
|
5
|
+
/** Maximum byte length of an automation policy prompt (matches runClaudeTask cap) */
|
|
6
|
+
export const MAX_POLICY_PROMPT_CHARS = 32_768;
|
|
7
|
+
/** Maximum length (chars) of a file path inserted into prompts */
|
|
8
|
+
export const MAX_FILE_PATH_CHARS = 500;
|
|
9
|
+
/**
|
|
10
|
+
* Wrap an untrusted user-controlled value in delimiters that include a
|
|
11
|
+
* per-trigger nonce so a crafted value cannot forge a closing delimiter.
|
|
12
|
+
* The nonce is stripped from the value itself before insertion.
|
|
13
|
+
*/
|
|
14
|
+
export function untrustedBlock(label, value, nonce) {
|
|
15
|
+
if (!/^[A-Z][A-Z0-9 ]*$/.test(label)) {
|
|
16
|
+
throw new Error(`untrustedBlock: label must be uppercase ASCII, got: ${JSON.stringify(label)}`);
|
|
17
|
+
}
|
|
18
|
+
// Use literal string replacement (not RegExp) — nonce is an opaque ID that
|
|
19
|
+
// may contain regex metacharacters (e.g. "[", "+", "."). RegExp would throw
|
|
20
|
+
// SyntaxError for those inputs, enabling a DoS on every hook trigger.
|
|
21
|
+
const safe = value.split(nonce).join("");
|
|
22
|
+
return `\n--- BEGIN ${label} [${nonce}] (untrusted) ---\n${safe}\n--- END ${label} [${nonce}] ---\n`;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Truncate a final prompt to MAX_POLICY_PROMPT_CHARS bytes at the last newline
|
|
26
|
+
* before the limit and append a truncation notice.
|
|
27
|
+
*
|
|
28
|
+
* Uses Buffer byte-length rather than JS string .length (UTF-16 code units) so
|
|
29
|
+
* that multibyte characters (emoji, CJK, surrogate pairs) are never split at a
|
|
30
|
+
* code-unit boundary, which would produce malformed text.
|
|
31
|
+
*/
|
|
32
|
+
export function truncatePrompt(prompt) {
|
|
33
|
+
// Buffer.byteLength counts actual UTF-8 bytes, not UTF-16 code units.
|
|
34
|
+
if (Buffer.byteLength(prompt, "utf8") <= MAX_POLICY_PROMPT_CHARS)
|
|
35
|
+
return prompt;
|
|
36
|
+
// Slice to MAX_POLICY_PROMPT_CHARS bytes then decode — Node.js drops any
|
|
37
|
+
// incomplete multibyte sequence at the boundary automatically.
|
|
38
|
+
let truncated = Buffer.from(prompt, "utf8")
|
|
39
|
+
.subarray(0, MAX_POLICY_PROMPT_CHARS)
|
|
40
|
+
.toString("utf8");
|
|
41
|
+
// Prefer breaking at the last newline so we don't cut mid-sentence.
|
|
42
|
+
const lastNl = truncated.lastIndexOf("\n");
|
|
43
|
+
if (lastNl > 0) {
|
|
44
|
+
truncated = truncated.slice(0, lastNl);
|
|
45
|
+
}
|
|
46
|
+
return `${truncated}\n[... truncated to fit 32KB limit ...]`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Build a trusted metadata prefix that is prepended to every automation hook
|
|
50
|
+
* prompt BEFORE any untrustedBlock() substitutions.
|
|
51
|
+
*
|
|
52
|
+
* `nowIso` is injected by caller (e.g. `new Date().toISOString()`) so this
|
|
53
|
+
* function remains deterministic in tests.
|
|
54
|
+
*/
|
|
55
|
+
export function buildHookMetadata(hookName, nowIso, file) {
|
|
56
|
+
const safeFile = file
|
|
57
|
+
? file.slice(0, MAX_FILE_PATH_CHARS).replace(/[\x00-\x1F\x7F]/g, "")
|
|
58
|
+
: "N/A";
|
|
59
|
+
return `@@ HOOK: ${hookName} | file: ${safeFile} | ts: ${nowIso} @@\n`;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=automationUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automationUtils.js","sourceRoot":"","sources":["../../src/fp/automationUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qFAAqF;AACrF,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAE9C,kEAAkE;AAClE,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,KAAa,EACb,KAAa;IAEb,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,uDAAuD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAC/E,CAAC;IACJ,CAAC;IACD,2EAA2E;IAC3E,6EAA6E;IAC7E,sEAAsE;IACtE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzC,OAAO,eAAe,KAAK,KAAK,KAAK,sBAAsB,IAAI,aAAa,KAAK,KAAK,KAAK,SAAS,CAAC;AACvG,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,sEAAsE;IACtE,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,uBAAuB;QAC9D,OAAO,MAAM,CAAC;IAEhB,yEAAyE;IACzE,+DAA+D;IAC/D,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;SACxC,QAAQ,CAAC,CAAC,EAAE,uBAAuB,CAAC;SACpC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEpB,oEAAoE;IACpE,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,GAAG,SAAS,yCAAyC,CAAC;AAC/D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAgB,EAChB,MAAc,EACd,IAAa;IAEb,MAAM,QAAQ,GAAG,IAAI;QACnB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;QACpE,CAAC,CAAC,KAAK,CAAC;IACV,OAAO,YAAY,QAAQ,YAAY,QAAQ,UAAU,MAAM,OAAO,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Branded types for path safety.
|
|
3
|
+
*
|
|
4
|
+
* AbsPath — an absolute filesystem path (string brand)
|
|
5
|
+
* FileUri — a file:// URI derived from an AbsPath (string brand)
|
|
6
|
+
*
|
|
7
|
+
* Using branded types prevents accidental mixing of relative paths, URIs, and
|
|
8
|
+
* absolute paths at compile time. At runtime the values are plain strings —
|
|
9
|
+
* no overhead.
|
|
10
|
+
*/
|
|
11
|
+
export type AbsPath = string & {
|
|
12
|
+
readonly _brand: "AbsPath";
|
|
13
|
+
};
|
|
14
|
+
export type FileUri = string & {
|
|
15
|
+
readonly _brand: "FileUri";
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Assert that `p` is an absolute path and return it as `AbsPath`.
|
|
19
|
+
* Throws if `p` is relative.
|
|
20
|
+
*/
|
|
21
|
+
export declare function absPath(p: string): AbsPath;
|
|
22
|
+
/**
|
|
23
|
+
* Convert an `AbsPath` to a `file://` URI.
|
|
24
|
+
* Uses `new URL()` for correct encoding (handles spaces, unicode, etc.).
|
|
25
|
+
*/
|
|
26
|
+
export declare function fileUri(p: AbsPath): FileUri;
|
|
27
|
+
/**
|
|
28
|
+
* Strip the `file://` prefix from a `FileUri` and return an `AbsPath`.
|
|
29
|
+
* Handles both `file:///path` (URL-encoded) and plain `file:///path` forms.
|
|
30
|
+
* Uses `decodeURIComponent` to restore percent-encoded characters (spaces, etc.).
|
|
31
|
+
*/
|
|
32
|
+
export declare function uriToAbsPath(uri: FileUri): AbsPath;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Branded types for path safety.
|
|
3
|
+
*
|
|
4
|
+
* AbsPath — an absolute filesystem path (string brand)
|
|
5
|
+
* FileUri — a file:// URI derived from an AbsPath (string brand)
|
|
6
|
+
*
|
|
7
|
+
* Using branded types prevents accidental mixing of relative paths, URIs, and
|
|
8
|
+
* absolute paths at compile time. At runtime the values are plain strings —
|
|
9
|
+
* no overhead.
|
|
10
|
+
*/
|
|
11
|
+
import * as path from "node:path";
|
|
12
|
+
// ── Constructors ──────────────────────────────────────────────────────────────
|
|
13
|
+
/**
|
|
14
|
+
* Assert that `p` is an absolute path and return it as `AbsPath`.
|
|
15
|
+
* Throws if `p` is relative.
|
|
16
|
+
*/
|
|
17
|
+
export function absPath(p) {
|
|
18
|
+
if (!path.isAbsolute(p)) {
|
|
19
|
+
throw new Error(`Expected absolute path, got: ${p}`);
|
|
20
|
+
}
|
|
21
|
+
return p;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Convert an `AbsPath` to a `file://` URI.
|
|
25
|
+
* Uses `new URL()` for correct encoding (handles spaces, unicode, etc.).
|
|
26
|
+
*/
|
|
27
|
+
export function fileUri(p) {
|
|
28
|
+
return new URL(`file://${p}`).href;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Strip the `file://` prefix from a `FileUri` and return an `AbsPath`.
|
|
32
|
+
* Handles both `file:///path` (URL-encoded) and plain `file:///path` forms.
|
|
33
|
+
* Uses `decodeURIComponent` to restore percent-encoded characters (spaces, etc.).
|
|
34
|
+
*/
|
|
35
|
+
export function uriToAbsPath(uri) {
|
|
36
|
+
// URL constructor decodes percent-encoding in pathname on most runtimes, but
|
|
37
|
+
// not all. Use decodeURIComponent for a guaranteed round-trip.
|
|
38
|
+
const pathname = new URL(uri).pathname;
|
|
39
|
+
return decodeURIComponent(pathname);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=brandedTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brandedTypes.js","sourceRoot":"","sources":["../../src/fp/brandedTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAOlC,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,CAAS;IAC/B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,CAAY,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,CAAU;IAChC,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAe,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,6EAA6E;IAC7E,gEAAgE;IAChE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IACvC,OAAO,kBAAkB,CAAC,QAAQ,CAAY,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface CommandDescription {
|
|
2
|
+
readonly command: string;
|
|
3
|
+
readonly args: readonly string[];
|
|
4
|
+
readonly cwd: string;
|
|
5
|
+
readonly timeout: number;
|
|
6
|
+
readonly maxBuffer: number;
|
|
7
|
+
}
|
|
8
|
+
export interface CommandConfig {
|
|
9
|
+
commandAllowlist: string[];
|
|
10
|
+
commandTimeout: number;
|
|
11
|
+
maxResultSize: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Validate raw tool arguments and return an immutable command description.
|
|
15
|
+
* Throws on any security violation (allowlist, blocklist, path-traversal).
|
|
16
|
+
* All security checks are performed here — executeCommand receives a trusted descriptor.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildCommandDescription(rawArgs: Record<string, unknown>, config: CommandConfig, workspace: string): CommandDescription;
|