@a5c-ai/genty-platform 5.1.1-staging.583e3d9a6ed7
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/README.md +48 -0
- package/dist/anycli/cache.d.ts +45 -0
- package/dist/anycli/cache.d.ts.map +1 -0
- package/dist/anycli/cache.js +118 -0
- package/dist/anycli/index.d.ts +10 -0
- package/dist/anycli/index.d.ts.map +1 -0
- package/dist/anycli/index.js +25 -0
- package/dist/anycli/types.d.ts +32 -0
- package/dist/anycli/types.d.ts.map +1 -0
- package/dist/anycli/types.js +9 -0
- package/dist/api/breakpoints.d.ts +93 -0
- package/dist/api/breakpoints.d.ts.map +1 -0
- package/dist/api/breakpoints.js +334 -0
- package/dist/api/effects.d.ts +14 -0
- package/dist/api/effects.d.ts.map +1 -0
- package/dist/api/effects.js +306 -0
- package/dist/api/effectsTypes.d.ts +79 -0
- package/dist/api/effectsTypes.d.ts.map +1 -0
- package/dist/api/effectsTypes.js +6 -0
- package/dist/api/eventStream.d.ts +34 -0
- package/dist/api/eventStream.d.ts.map +1 -0
- package/dist/api/eventStream.js +126 -0
- package/dist/api/index.d.ts +10 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +27 -0
- package/dist/api/runs.d.ts +85 -0
- package/dist/api/runs.d.ts.map +1 -0
- package/dist/api/runs.js +247 -0
- package/dist/api/utils.d.ts +28 -0
- package/dist/api/utils.d.ts.map +1 -0
- package/dist/api/utils.js +74 -0
- package/dist/breakpoints/approvalChains.d.ts +68 -0
- package/dist/breakpoints/approvalChains.d.ts.map +1 -0
- package/dist/breakpoints/approvalChains.js +111 -0
- package/dist/breakpoints/delegation.d.ts +42 -0
- package/dist/breakpoints/delegation.d.ts.map +1 -0
- package/dist/breakpoints/delegation.js +199 -0
- package/dist/breakpoints/delegationTypes.d.ts +46 -0
- package/dist/breakpoints/delegationTypes.d.ts.map +1 -0
- package/dist/breakpoints/delegationTypes.js +10 -0
- package/dist/breakpoints/postures.d.ts +28 -0
- package/dist/breakpoints/postures.d.ts.map +1 -0
- package/dist/breakpoints/postures.js +100 -0
- package/dist/compression/compaction.d.ts +82 -0
- package/dist/compression/compaction.d.ts.map +1 -0
- package/dist/compression/compaction.js +310 -0
- package/dist/cost/claudeCodeParser.d.ts +81 -0
- package/dist/cost/claudeCodeParser.d.ts.map +1 -0
- package/dist/cost/claudeCodeParser.js +232 -0
- package/dist/cost/collector.d.ts +42 -0
- package/dist/cost/collector.d.ts.map +1 -0
- package/dist/cost/collector.js +105 -0
- package/dist/cost/effectCost.d.ts +23 -0
- package/dist/cost/effectCost.d.ts.map +1 -0
- package/dist/cost/effectCost.js +26 -0
- package/dist/cost/index.d.ts +7 -0
- package/dist/cost/index.d.ts.map +1 -0
- package/dist/cost/index.js +28 -0
- package/dist/cost/journal.d.ts +40 -0
- package/dist/cost/journal.d.ts.map +1 -0
- package/dist/cost/journal.js +158 -0
- package/dist/cost/types.d.ts +164 -0
- package/dist/cost/types.d.ts.map +1 -0
- package/dist/cost/types.js +228 -0
- package/dist/daemon/automationExecutor.d.ts +16 -0
- package/dist/daemon/automationExecutor.d.ts.map +1 -0
- package/dist/daemon/automationExecutor.js +222 -0
- package/dist/daemon/config.d.ts +8 -0
- package/dist/daemon/config.d.ts.map +1 -0
- package/dist/daemon/config.js +245 -0
- package/dist/daemon/daemonLog.d.ts +13 -0
- package/dist/daemon/daemonLog.d.ts.map +1 -0
- package/dist/daemon/daemonLog.js +64 -0
- package/dist/daemon/durableQueue.d.ts +41 -0
- package/dist/daemon/durableQueue.d.ts.map +1 -0
- package/dist/daemon/durableQueue.js +183 -0
- package/dist/daemon/fileWatcher.d.ts +9 -0
- package/dist/daemon/fileWatcher.d.ts.map +1 -0
- package/dist/daemon/fileWatcher.js +144 -0
- package/dist/daemon/index.d.ts +9 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +26 -0
- package/dist/daemon/lifecycle.d.ts +12 -0
- package/dist/daemon/lifecycle.d.ts.map +1 -0
- package/dist/daemon/lifecycle.js +257 -0
- package/dist/daemon/loop.d.ts +27 -0
- package/dist/daemon/loop.d.ts.map +1 -0
- package/dist/daemon/loop.js +387 -0
- package/dist/daemon/timerScheduler.d.ts +13 -0
- package/dist/daemon/timerScheduler.d.ts.map +1 -0
- package/dist/daemon/timerScheduler.js +212 -0
- package/dist/daemon/types.d.ts +122 -0
- package/dist/daemon/types.d.ts.map +1 -0
- package/dist/daemon/types.js +25 -0
- package/dist/daemon/webhookListener.d.ts +6 -0
- package/dist/daemon/webhookListener.d.ts.map +1 -0
- package/dist/daemon/webhookListener.js +132 -0
- package/dist/governance/authority.d.ts +68 -0
- package/dist/governance/authority.d.ts.map +1 -0
- package/dist/governance/authority.js +136 -0
- package/dist/governance/bridge.d.ts +17 -0
- package/dist/governance/bridge.d.ts.map +1 -0
- package/dist/governance/bridge.js +46 -0
- package/dist/governance/builtins.d.ts +25 -0
- package/dist/governance/builtins.d.ts.map +1 -0
- package/dist/governance/builtins.js +67 -0
- package/dist/governance/categories.d.ts +58 -0
- package/dist/governance/categories.d.ts.map +1 -0
- package/dist/governance/categories.js +120 -0
- package/dist/governance/decisionTrail.d.ts +60 -0
- package/dist/governance/decisionTrail.d.ts.map +1 -0
- package/dist/governance/decisionTrail.js +68 -0
- package/dist/governance/engine.d.ts +20 -0
- package/dist/governance/engine.d.ts.map +1 -0
- package/dist/governance/engine.js +124 -0
- package/dist/governance/index.d.ts +20 -0
- package/dist/governance/index.d.ts.map +1 -0
- package/dist/governance/index.js +75 -0
- package/dist/governance/logging.d.ts +18 -0
- package/dist/governance/logging.d.ts.map +1 -0
- package/dist/governance/logging.js +83 -0
- package/dist/governance/mandate.d.ts +83 -0
- package/dist/governance/mandate.d.ts.map +1 -0
- package/dist/governance/mandate.js +180 -0
- package/dist/governance/permissionEvents.d.ts +51 -0
- package/dist/governance/permissionEvents.d.ts.map +1 -0
- package/dist/governance/permissionEvents.js +52 -0
- package/dist/governance/permissionPropagation.d.ts +18 -0
- package/dist/governance/permissionPropagation.d.ts.map +1 -0
- package/dist/governance/permissionPropagation.js +58 -0
- package/dist/governance/postureBridge.d.ts +17 -0
- package/dist/governance/postureBridge.d.ts.map +1 -0
- package/dist/governance/postureBridge.js +117 -0
- package/dist/governance/sandboxBridge.d.ts +49 -0
- package/dist/governance/sandboxBridge.d.ts.map +1 -0
- package/dist/governance/sandboxBridge.js +77 -0
- package/dist/governance/sandboxPolicy.d.ts +51 -0
- package/dist/governance/sandboxPolicy.d.ts.map +1 -0
- package/dist/governance/sandboxPolicy.js +177 -0
- package/dist/governance/types.d.ts +3 -0
- package/dist/governance/types.d.ts.map +1 -0
- package/dist/governance/types.js +5 -0
- package/dist/harness/adapters/adapterBridge.d.ts +71 -0
- package/dist/harness/adapters/adapterBridge.d.ts.map +1 -0
- package/dist/harness/adapters/adapterBridge.js +117 -0
- package/dist/harness/adapters/adapterClientFactory.d.ts +29 -0
- package/dist/harness/adapters/adapterClientFactory.d.ts.map +1 -0
- package/dist/harness/adapters/adapterClientFactory.js +90 -0
- package/dist/harness/adapters/adapterEventEmitter.d.ts +51 -0
- package/dist/harness/adapters/adapterEventEmitter.d.ts.map +1 -0
- package/dist/harness/adapters/adapterEventEmitter.js +143 -0
- package/dist/harness/adapters/adapterEventMapper.d.ts +63 -0
- package/dist/harness/adapters/adapterEventMapper.d.ts.map +1 -0
- package/dist/harness/adapters/adapterEventMapper.js +100 -0
- package/dist/harness/adapters/adapterHarnessMap.d.ts +25 -0
- package/dist/harness/adapters/adapterHarnessMap.d.ts.map +1 -0
- package/dist/harness/adapters/adapterHarnessMap.js +55 -0
- package/dist/harness/adapters/adapterStdinReader.d.ts +45 -0
- package/dist/harness/adapters/adapterStdinReader.d.ts.map +1 -0
- package/dist/harness/adapters/adapterStdinReader.js +106 -0
- package/dist/harness/adapters/adapterTypes.d.ts +122 -0
- package/dist/harness/adapters/adapterTypes.d.ts.map +1 -0
- package/dist/harness/adapters/adapterTypes.js +11 -0
- package/dist/harness/adapters/index.d.ts +17 -0
- package/dist/harness/adapters/index.d.ts.map +1 -0
- package/dist/harness/adapters/index.js +34 -0
- package/dist/harness/backgroundTracker.d.ts +64 -0
- package/dist/harness/backgroundTracker.d.ts.map +1 -0
- package/dist/harness/backgroundTracker.js +107 -0
- package/dist/harness/builtInHarness.d.ts +3 -0
- package/dist/harness/builtInHarness.d.ts.map +1 -0
- package/dist/harness/builtInHarness.js +18 -0
- package/dist/harness/capabilityRouter.d.ts +76 -0
- package/dist/harness/capabilityRouter.d.ts.map +1 -0
- package/dist/harness/capabilityRouter.js +176 -0
- package/dist/harness/fallbackChains.d.ts +42 -0
- package/dist/harness/fallbackChains.d.ts.map +1 -0
- package/dist/harness/fallbackChains.js +69 -0
- package/dist/harness/hostContract.d.ts +63 -0
- package/dist/harness/hostContract.d.ts.map +1 -0
- package/dist/harness/hostContract.js +136 -0
- package/dist/harness/index.d.ts +18 -0
- package/dist/harness/index.d.ts.map +1 -0
- package/dist/harness/index.js +91 -0
- package/dist/harness/internal/createRun/agent-core-loop.d.ts +43 -0
- package/dist/harness/internal/createRun/agent-core-loop.d.ts.map +1 -0
- package/dist/harness/internal/createRun/agent-core-loop.js +247 -0
- package/dist/harness/internal/createRun/askUserQuestion.d.ts +11 -0
- package/dist/harness/internal/createRun/askUserQuestion.d.ts.map +1 -0
- package/dist/harness/internal/createRun/askUserQuestion.js +162 -0
- package/dist/harness/internal/createRun/index.d.ts +25 -0
- package/dist/harness/internal/createRun/index.d.ts.map +1 -0
- package/dist/harness/internal/createRun/index.js +163 -0
- package/dist/harness/internal/createRun/orchestration/constants.d.ts +7 -0
- package/dist/harness/internal/createRun/orchestration/constants.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/constants.js +17 -0
- package/dist/harness/internal/createRun/orchestration/dispatch.d.ts +23 -0
- package/dist/harness/internal/createRun/orchestration/dispatch.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/dispatch.js +135 -0
- package/dist/harness/internal/createRun/orchestration/effects.d.ts +134 -0
- package/dist/harness/internal/createRun/orchestration/effects.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/effects.js +859 -0
- package/dist/harness/internal/createRun/orchestration/effectsHelpers.d.ts +20 -0
- package/dist/harness/internal/createRun/orchestration/effectsHelpers.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/effectsHelpers.js +79 -0
- package/dist/harness/internal/createRun/orchestration/effectsHelpers.test.d.ts +2 -0
- package/dist/harness/internal/createRun/orchestration/effectsHelpers.test.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/effectsHelpers.test.js +81 -0
- package/dist/harness/internal/createRun/orchestration/externalPhase.d.ts +3 -0
- package/dist/harness/internal/createRun/orchestration/externalPhase.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/externalPhase.js +399 -0
- package/dist/harness/internal/createRun/orchestration/externalPhaseHelpers.d.ts +16 -0
- package/dist/harness/internal/createRun/orchestration/externalPhaseHelpers.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/externalPhaseHelpers.js +104 -0
- package/dist/harness/internal/createRun/orchestration/hookDecisionEffects.d.ts +32 -0
- package/dist/harness/internal/createRun/orchestration/hookDecisionEffects.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/hookDecisionEffects.js +76 -0
- package/dist/harness/internal/createRun/orchestration/index.d.ts +29 -0
- package/dist/harness/internal/createRun/orchestration/index.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/index.js +370 -0
- package/dist/harness/internal/createRun/orchestration/internalPhase.d.ts +3 -0
- package/dist/harness/internal/createRun/orchestration/internalPhase.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/internalPhase.js +580 -0
- package/dist/harness/internal/createRun/orchestration/internalTools.d.ts +27 -0
- package/dist/harness/internal/createRun/orchestration/internalTools.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/internalTools.js +264 -0
- package/dist/harness/internal/createRun/orchestration/internalToolsHelpers.d.ts +17 -0
- package/dist/harness/internal/createRun/orchestration/internalToolsHelpers.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/internalToolsHelpers.js +23 -0
- package/dist/harness/internal/createRun/orchestration/taskResult.d.ts +10 -0
- package/dist/harness/internal/createRun/orchestration/taskResult.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/taskResult.js +67 -0
- package/dist/harness/internal/createRun/orchestration/types.d.ts +46 -0
- package/dist/harness/internal/createRun/orchestration/types.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/types.js +2 -0
- package/dist/harness/internal/createRun/orchestration/verbose.d.ts +7 -0
- package/dist/harness/internal/createRun/orchestration/verbose.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/verbose.js +240 -0
- package/dist/harness/internal/createRun/output.d.ts +40 -0
- package/dist/harness/internal/createRun/output.d.ts.map +1 -0
- package/dist/harness/internal/createRun/output.js +467 -0
- package/dist/harness/internal/createRun/pi.d.ts +10 -0
- package/dist/harness/internal/createRun/pi.d.ts.map +1 -0
- package/dist/harness/internal/createRun/pi.js +35 -0
- package/dist/harness/internal/createRun/planProcess/agentOutput.d.ts +5 -0
- package/dist/harness/internal/createRun/planProcess/agentOutput.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/agentOutput.js +113 -0
- package/dist/harness/internal/createRun/planProcess/delegation.d.ts +23 -0
- package/dist/harness/internal/createRun/planProcess/delegation.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/delegation.js +176 -0
- package/dist/harness/internal/createRun/planProcess/external.d.ts +14 -0
- package/dist/harness/internal/createRun/planProcess/external.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/external.js +139 -0
- package/dist/harness/internal/createRun/planProcess/index.d.ts +12 -0
- package/dist/harness/internal/createRun/planProcess/index.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/index.js +24 -0
- package/dist/harness/internal/createRun/planProcess/paths.d.ts +7 -0
- package/dist/harness/internal/createRun/planProcess/paths.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/paths.js +98 -0
- package/dist/harness/internal/createRun/planProcess/phase.d.ts +6 -0
- package/dist/harness/internal/createRun/planProcess/phase.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/phase.js +424 -0
- package/dist/harness/internal/createRun/planProcess/phaseHelpers.d.ts +37 -0
- package/dist/harness/internal/createRun/planProcess/phaseHelpers.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/phaseHelpers.js +159 -0
- package/dist/harness/internal/createRun/planProcess/phaseTypes.d.ts +25 -0
- package/dist/harness/internal/createRun/planProcess/phaseTypes.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/phaseTypes.js +6 -0
- package/dist/harness/internal/createRun/planProcess/prompts.d.ts +22 -0
- package/dist/harness/internal/createRun/planProcess/prompts.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/prompts.js +239 -0
- package/dist/harness/internal/createRun/planProcess/recovery.d.ts +18 -0
- package/dist/harness/internal/createRun/planProcess/recovery.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/recovery.js +205 -0
- package/dist/harness/internal/createRun/planProcess/recovery.test.d.ts +2 -0
- package/dist/harness/internal/createRun/planProcess/recovery.test.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/recovery.test.js +68 -0
- package/dist/harness/internal/createRun/planProcess/runState.d.ts +40 -0
- package/dist/harness/internal/createRun/planProcess/runState.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/runState.js +179 -0
- package/dist/harness/internal/createRun/planProcess/understandIntent.d.ts +22 -0
- package/dist/harness/internal/createRun/planProcess/understandIntent.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/understandIntent.js +65 -0
- package/dist/harness/internal/createRun/planProcess/validation.d.ts +4 -0
- package/dist/harness/internal/createRun/planProcess/validation.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/validation.js +260 -0
- package/dist/harness/internal/createRun/planProcess/validationSource.d.ts +13 -0
- package/dist/harness/internal/createRun/planProcess/validationSource.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/validationSource.js +345 -0
- package/dist/harness/internal/createRun/planProcess/validationText.d.ts +3 -0
- package/dist/harness/internal/createRun/planProcess/validationText.d.ts.map +1 -0
- package/dist/harness/internal/createRun/planProcess/validationText.js +145 -0
- package/dist/harness/internal/createRun/prompts.d.ts +59 -0
- package/dist/harness/internal/createRun/prompts.d.ts.map +1 -0
- package/dist/harness/internal/createRun/prompts.js +427 -0
- package/dist/harness/internal/createRun/resumeState.d.ts +28 -0
- package/dist/harness/internal/createRun/resumeState.d.ts.map +1 -0
- package/dist/harness/internal/createRun/resumeState.js +133 -0
- package/dist/harness/internal/createRun/utils.d.ts +184 -0
- package/dist/harness/internal/createRun/utils.d.ts.map +1 -0
- package/dist/harness/internal/createRun/utils.js +218 -0
- package/dist/harness/internal.d.ts +13 -0
- package/dist/harness/internal.d.ts.map +1 -0
- package/dist/harness/internal.js +149 -0
- package/dist/harness/invoker/launch.d.ts +20 -0
- package/dist/harness/invoker/launch.d.ts.map +1 -0
- package/dist/harness/invoker/launch.js +23 -0
- package/dist/harness/invoker/processControl.d.ts +11 -0
- package/dist/harness/invoker/processControl.d.ts.map +1 -0
- package/dist/harness/invoker/processControl.js +50 -0
- package/dist/harness/invoker.d.ts +44 -0
- package/dist/harness/invoker.d.ts.map +1 -0
- package/dist/harness/invoker.js +276 -0
- package/dist/harness/modeSelector.d.ts +50 -0
- package/dist/harness/modeSelector.d.ts.map +1 -0
- package/dist/harness/modeSelector.js +124 -0
- package/dist/harness/modelSelection.d.ts +37 -0
- package/dist/harness/modelSelection.d.ts.map +1 -0
- package/dist/harness/modelSelection.js +81 -0
- package/dist/harness/operatorCommands.d.ts +38 -0
- package/dist/harness/operatorCommands.d.ts.map +1 -0
- package/dist/harness/operatorCommands.js +118 -0
- package/dist/harness/piSecureSandbox.d.ts +8 -0
- package/dist/harness/piSecureSandbox.d.ts.map +1 -0
- package/dist/harness/piSecureSandbox.js +366 -0
- package/dist/harness/piSecureSandboxTypes.d.ts +51 -0
- package/dist/harness/piSecureSandboxTypes.d.ts.map +1 -0
- package/dist/harness/piSecureSandboxTypes.js +6 -0
- package/dist/harness/piWrapper/compaction.d.ts +13 -0
- package/dist/harness/piWrapper/compaction.d.ts.map +1 -0
- package/dist/harness/piWrapper/compaction.js +38 -0
- package/dist/harness/piWrapper/instructionPrompts.d.ts +2 -0
- package/dist/harness/piWrapper/instructionPrompts.d.ts.map +1 -0
- package/dist/harness/piWrapper/instructionPrompts.js +97 -0
- package/dist/harness/piWrapper/moduleSupport.d.ts +78 -0
- package/dist/harness/piWrapper/moduleSupport.d.ts.map +1 -0
- package/dist/harness/piWrapper/moduleSupport.js +207 -0
- package/dist/harness/piWrapper/moduleSupport.test.d.ts +2 -0
- package/dist/harness/piWrapper/moduleSupport.test.d.ts.map +1 -0
- package/dist/harness/piWrapper/moduleSupport.test.js +31 -0
- package/dist/harness/piWrapper.d.ts +82 -0
- package/dist/harness/piWrapper.d.ts.map +1 -0
- package/dist/harness/piWrapper.js +406 -0
- package/dist/harness/piWrapper.test.d.ts +2 -0
- package/dist/harness/piWrapper.test.d.ts.map +1 -0
- package/dist/harness/piWrapper.test.js +240 -0
- package/dist/harness/planMode.d.ts +68 -0
- package/dist/harness/planMode.d.ts.map +1 -0
- package/dist/harness/planMode.js +145 -0
- package/dist/harness/selectionPolicies.d.ts +29 -0
- package/dist/harness/selectionPolicies.d.ts.map +1 -0
- package/dist/harness/selectionPolicies.js +165 -0
- package/dist/harness/types.d.ts +276 -0
- package/dist/harness/types.d.ts.map +1 -0
- package/dist/harness/types.js +34 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -0
- package/dist/interaction/askUserQuestion/core.d.ts +8 -0
- package/dist/interaction/askUserQuestion/core.d.ts.map +1 -0
- package/dist/interaction/askUserQuestion/core.js +112 -0
- package/dist/interaction/askUserQuestion/terminal.d.ts +15 -0
- package/dist/interaction/askUserQuestion/terminal.d.ts.map +1 -0
- package/dist/interaction/askUserQuestion/terminal.js +128 -0
- package/dist/interaction/askUserQuestion.d.ts +10 -0
- package/dist/interaction/askUserQuestion.d.ts.map +1 -0
- package/dist/interaction/askUserQuestion.js +295 -0
- package/dist/interaction/askUserQuestionTypes.d.ts +31 -0
- package/dist/interaction/askUserQuestionTypes.d.ts.map +1 -0
- package/dist/interaction/askUserQuestionTypes.js +6 -0
- package/dist/interaction/index.d.ts +4 -0
- package/dist/interaction/index.d.ts.map +1 -0
- package/dist/interaction/index.js +20 -0
- package/dist/interaction/interactionRouter.d.ts +25 -0
- package/dist/interaction/interactionRouter.d.ts.map +1 -0
- package/dist/interaction/interactionRouter.js +55 -0
- package/dist/mcp/channels/allowlist.d.ts +19 -0
- package/dist/mcp/channels/allowlist.d.ts.map +1 -0
- package/dist/mcp/channels/allowlist.js +140 -0
- package/dist/mcp/channels/channelManager.d.ts +64 -0
- package/dist/mcp/channels/channelManager.d.ts.map +1 -0
- package/dist/mcp/channels/channelManager.js +137 -0
- package/dist/mcp/channels/inboundQueue.d.ts +47 -0
- package/dist/mcp/channels/inboundQueue.d.ts.map +1 -0
- package/dist/mcp/channels/inboundQueue.js +96 -0
- package/dist/mcp/channels/index.d.ts +16 -0
- package/dist/mcp/channels/index.d.ts.map +1 -0
- package/dist/mcp/channels/index.js +38 -0
- package/dist/mcp/channels/outbound.d.ts +33 -0
- package/dist/mcp/channels/outbound.d.ts.map +1 -0
- package/dist/mcp/channels/outbound.js +94 -0
- package/dist/mcp/channels/permissionRelay.d.ts +62 -0
- package/dist/mcp/channels/permissionRelay.d.ts.map +1 -0
- package/dist/mcp/channels/permissionRelay.js +159 -0
- package/dist/mcp/channels/types.d.ts +135 -0
- package/dist/mcp/channels/types.d.ts.map +1 -0
- package/dist/mcp/channels/types.js +16 -0
- package/dist/mcp/client/config.d.ts +28 -0
- package/dist/mcp/client/config.d.ts.map +1 -0
- package/dist/mcp/client/config.js +144 -0
- package/dist/mcp/client/executor.d.ts +30 -0
- package/dist/mcp/client/executor.d.ts.map +1 -0
- package/dist/mcp/client/executor.js +61 -0
- package/dist/mcp/client/index.d.ts +12 -0
- package/dist/mcp/client/index.d.ts.map +1 -0
- package/dist/mcp/client/index.js +27 -0
- package/dist/mcp/client/manager.d.ts +74 -0
- package/dist/mcp/client/manager.d.ts.map +1 -0
- package/dist/mcp/client/manager.js +215 -0
- package/dist/mcp/client/toolRegistry.d.ts +113 -0
- package/dist/mcp/client/toolRegistry.d.ts.map +1 -0
- package/dist/mcp/client/toolRegistry.js +190 -0
- package/dist/mcp/client/types.d.ts +96 -0
- package/dist/mcp/client/types.d.ts.map +1 -0
- package/dist/mcp/client/types.js +15 -0
- package/dist/mcp/transport/index.d.ts +9 -0
- package/dist/mcp/transport/index.d.ts.map +1 -0
- package/dist/mcp/transport/index.js +13 -0
- package/dist/mcp/transport/session.d.ts +18 -0
- package/dist/mcp/transport/session.d.ts.map +1 -0
- package/dist/mcp/transport/session.js +78 -0
- package/dist/mcp/transport/types.d.ts +19 -0
- package/dist/mcp/transport/types.d.ts.map +1 -0
- package/dist/mcp/transport/types.js +7 -0
- package/dist/mcp/transport/websocket.d.ts +41 -0
- package/dist/mcp/transport/websocket.d.ts.map +1 -0
- package/dist/mcp/transport/websocket.js +271 -0
- package/dist/observability/health.d.ts +19 -0
- package/dist/observability/health.d.ts.map +1 -0
- package/dist/observability/health.js +129 -0
- package/dist/observability/index.d.ts +7 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +22 -0
- package/dist/observability/runStatus.d.ts +44 -0
- package/dist/observability/runStatus.d.ts.map +1 -0
- package/dist/observability/runStatus.js +169 -0
- package/dist/observability/timeline.d.ts +11 -0
- package/dist/observability/timeline.d.ts.map +1 -0
- package/dist/observability/timeline.js +176 -0
- package/dist/observability/types.d.ts +62 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability/types.js +8 -0
- package/dist/observability/webhooks.d.ts +68 -0
- package/dist/observability/webhooks.d.ts.map +1 -0
- package/dist/observability/webhooks.js +132 -0
- package/dist/plugins/index.d.ts +11 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +18 -0
- package/dist/plugins/loader.d.ts +37 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +112 -0
- package/dist/plugins/sandbox.d.ts +38 -0
- package/dist/plugins/sandbox.d.ts.map +1 -0
- package/dist/plugins/sandbox.js +109 -0
- package/dist/plugins/types.d.ts +27 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +7 -0
- package/dist/plugins/version-check.d.ts +23 -0
- package/dist/plugins/version-check.d.ts.map +1 -0
- package/dist/plugins/version-check.js +70 -0
- package/dist/processes/index.d.ts +12 -0
- package/dist/processes/index.d.ts.map +1 -0
- package/dist/processes/index.js +15 -0
- package/dist/processes/recommender.d.ts +36 -0
- package/dist/processes/recommender.d.ts.map +1 -0
- package/dist/processes/recommender.js +73 -0
- package/dist/processes/scorer.d.ts +26 -0
- package/dist/processes/scorer.d.ts.map +1 -0
- package/dist/processes/scorer.js +104 -0
- package/dist/processes/types.d.ts +48 -0
- package/dist/processes/types.d.ts.map +1 -0
- package/dist/processes/types.js +9 -0
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +28 -0
- package/dist/seams/contract.d.ts +63 -0
- package/dist/seams/contract.d.ts.map +1 -0
- package/dist/seams/contract.js +138 -0
- package/dist/seams/contract.test.d.ts +2 -0
- package/dist/seams/contract.test.d.ts.map +1 -0
- package/dist/seams/contract.test.js +99 -0
- package/dist/seams/index.d.ts +3 -0
- package/dist/seams/index.d.ts.map +1 -0
- package/dist/seams/index.js +8 -0
- package/dist/session/context.d.ts +22 -0
- package/dist/session/context.d.ts.map +1 -0
- package/dist/session/context.js +113 -0
- package/dist/session/continuityState.d.ts +39 -0
- package/dist/session/continuityState.d.ts.map +1 -0
- package/dist/session/continuityState.js +164 -0
- package/dist/session/cost.d.ts +72 -0
- package/dist/session/cost.d.ts.map +1 -0
- package/dist/session/cost.js +221 -0
- package/dist/session/discovery.d.ts +22 -0
- package/dist/session/discovery.d.ts.map +1 -0
- package/dist/session/discovery.js +35 -0
- package/dist/session/history.d.ts +30 -0
- package/dist/session/history.d.ts.map +1 -0
- package/dist/session/history.js +144 -0
- package/dist/session/index.d.ts +7 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +70 -0
- package/dist/session/memoryExtraction.d.ts +65 -0
- package/dist/session/memoryExtraction.d.ts.map +1 -0
- package/dist/session/memoryExtraction.js +201 -0
- package/dist/session/parse.d.ts +45 -0
- package/dist/session/parse.d.ts.map +1 -0
- package/dist/session/parse.js +170 -0
- package/dist/session/persistence.d.ts +46 -0
- package/dist/session/persistence.d.ts.map +1 -0
- package/dist/session/persistence.js +180 -0
- package/dist/session/types.d.ts +267 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/session/types.js +45 -0
- package/dist/session/write.d.ts +61 -0
- package/dist/session/write.d.ts.map +1 -0
- package/dist/session/write.js +213 -0
- package/dist/skills/chain.d.ts +31 -0
- package/dist/skills/chain.d.ts.map +1 -0
- package/dist/skills/chain.js +113 -0
- package/dist/skills/discovery.d.ts +34 -0
- package/dist/skills/discovery.d.ts.map +1 -0
- package/dist/skills/discovery.js +185 -0
- package/dist/skills/index.d.ts +12 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +18 -0
- package/dist/skills/router.d.ts +35 -0
- package/dist/skills/router.d.ts.map +1 -0
- package/dist/skills/router.js +143 -0
- package/dist/skills/types.d.ts +33 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +5 -0
- package/dist/storage/atomic.d.ts +2 -0
- package/dist/storage/atomic.d.ts.map +1 -0
- package/dist/storage/atomic.js +54 -0
- package/dist/storage/clock.d.ts +2 -0
- package/dist/storage/clock.d.ts.map +1 -0
- package/dist/storage/clock.js +6 -0
- package/dist/storage/index.d.ts +7 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +9 -0
- package/dist/storage/journalWatcher.d.ts +24 -0
- package/dist/storage/journalWatcher.d.ts.map +1 -0
- package/dist/storage/journalWatcher.js +173 -0
- package/dist/storage/paths.d.ts +5 -0
- package/dist/storage/paths.d.ts.map +1 -0
- package/dist/storage/paths.js +26 -0
- package/dist/storage/snapshotState.d.ts +10 -0
- package/dist/storage/snapshotState.d.ts.map +1 -0
- package/dist/storage/snapshotState.js +15 -0
- package/dist/storage/storeTaskArtifacts.d.ts +6 -0
- package/dist/storage/storeTaskArtifacts.d.ts.map +1 -0
- package/dist/storage/storeTaskArtifacts.js +55 -0
- package/dist/storage/types.d.ts +21 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +2 -0
- package/dist/tasks/crud.d.ts +33 -0
- package/dist/tasks/crud.d.ts.map +1 -0
- package/dist/tasks/crud.js +150 -0
- package/dist/tasks/index.d.ts +2 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +9 -0
- package/package.json +161 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GAP-MCPC-002: Outbound Channel Sender.
|
|
4
|
+
*
|
|
5
|
+
* Sends messages to channels via MCP server tools.
|
|
6
|
+
* Supports template-based message formatting.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.OutboundChannelSender = exports.DEFAULT_CHANNEL_TOOL_MAPPINGS = void 0;
|
|
10
|
+
exports.formatTemplate = formatTemplate;
|
|
11
|
+
exports.DEFAULT_CHANNEL_TOOL_MAPPINGS = {
|
|
12
|
+
slack: { sendToolName: "slack_send_message", channelArg: "channel", textArg: "text" },
|
|
13
|
+
discord: { sendToolName: "discord_send_message", channelArg: "channel_id", textArg: "content" },
|
|
14
|
+
email: { sendToolName: "gmail_create_draft", channelArg: "to", textArg: "body" },
|
|
15
|
+
};
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Template formatting
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
/** Format a message with simple {{var}} template substitution. */
|
|
20
|
+
function formatTemplate(template, vars) {
|
|
21
|
+
return template.replace(/\{\{(\w+)\}\}/g, (_match, key) => vars[key] ?? `{{${key}}}`);
|
|
22
|
+
}
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// OutboundChannelSender
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
class OutboundChannelSender {
|
|
27
|
+
_clientManager;
|
|
28
|
+
_toolMappings;
|
|
29
|
+
constructor(clientManager, toolMappings = exports.DEFAULT_CHANNEL_TOOL_MAPPINGS) {
|
|
30
|
+
this._clientManager = clientManager;
|
|
31
|
+
this._toolMappings = toolMappings;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Send a message to a channel.
|
|
35
|
+
* Resolves the channel source (serverName:channelId) to determine
|
|
36
|
+
* which MCP server and tool to use.
|
|
37
|
+
*/
|
|
38
|
+
async send(request) {
|
|
39
|
+
const colonIdx = request.channelSource.indexOf(":");
|
|
40
|
+
if (colonIdx < 0) {
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
error: `Invalid channel source "${request.channelSource}" — expected "serverName:channelId"`,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const serverName = request.channelSource.slice(0, colonIdx);
|
|
47
|
+
const channelId = request.channelSource.slice(colonIdx + 1);
|
|
48
|
+
// Resolve text: apply template if provided
|
|
49
|
+
let text = request.text;
|
|
50
|
+
if (request.template && request.templateVars) {
|
|
51
|
+
text = formatTemplate(request.template, request.templateVars);
|
|
52
|
+
}
|
|
53
|
+
// Find tool mapping by trying to detect channel type from server tools
|
|
54
|
+
const mapping = await this._resolveToolMapping(serverName);
|
|
55
|
+
if (!mapping) {
|
|
56
|
+
return {
|
|
57
|
+
success: false,
|
|
58
|
+
error: `No send-message tool mapping found for server "${serverName}"`,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const args = {
|
|
63
|
+
[mapping.channelArg]: channelId,
|
|
64
|
+
[mapping.textArg]: text,
|
|
65
|
+
};
|
|
66
|
+
const result = await this._clientManager.callTool(serverName, mapping.sendToolName, args);
|
|
67
|
+
return {
|
|
68
|
+
success: result.success,
|
|
69
|
+
messageId: result.content[0]?.text,
|
|
70
|
+
error: result.error,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
75
|
+
return { success: false, error: message };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async _resolveToolMapping(serverName) {
|
|
79
|
+
try {
|
|
80
|
+
const tools = await this._clientManager.listTools(serverName);
|
|
81
|
+
const toolNames = tools.map((t) => t.name);
|
|
82
|
+
for (const [_type, mapping] of Object.entries(this._toolMappings)) {
|
|
83
|
+
if (toolNames.includes(mapping.sendToolName)) {
|
|
84
|
+
return mapping;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Server not connected or tools unavailable
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.OutboundChannelSender = OutboundChannelSender;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GAP-MCPC-003: Channel Permission Relay.
|
|
3
|
+
*
|
|
4
|
+
* Routes breakpoint approval prompts through messaging channels.
|
|
5
|
+
* Uses a racing claim() pattern: channel response races against
|
|
6
|
+
* local interaction, first resolver wins.
|
|
7
|
+
*/
|
|
8
|
+
import type { ChannelApprovalRequest, ChannelApprovalResponse, ApprovalClaim, ChannelApprovalSecurityConfig } from "./types";
|
|
9
|
+
import type { OutboundChannelSender } from "./outbound";
|
|
10
|
+
export interface PermissionRelayOptions {
|
|
11
|
+
/** Outbound sender for dispatching approval requests to channels. */
|
|
12
|
+
sender: OutboundChannelSender;
|
|
13
|
+
/** Security configuration for channel approvals. */
|
|
14
|
+
security?: ChannelApprovalSecurityConfig;
|
|
15
|
+
}
|
|
16
|
+
/** Result of a relay attempt. */
|
|
17
|
+
export interface RelayResult {
|
|
18
|
+
/** Whether the relay was dispatched (false if blocked by security). */
|
|
19
|
+
relayed: boolean;
|
|
20
|
+
/** Reason if not relayed. */
|
|
21
|
+
reason?: string;
|
|
22
|
+
/** Request ID for tracking. */
|
|
23
|
+
requestId?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Creates a claimable approval slot.
|
|
27
|
+
* Multiple resolvers can race to claim it; only the first wins.
|
|
28
|
+
*/
|
|
29
|
+
export declare function createApprovalRace(): {
|
|
30
|
+
claim: (source: string, response?: ChannelApprovalResponse) => ApprovalClaim;
|
|
31
|
+
getWinner: () => ApprovalClaim | undefined;
|
|
32
|
+
promise: Promise<ApprovalClaim>;
|
|
33
|
+
};
|
|
34
|
+
export declare class ChannelPermissionRelay {
|
|
35
|
+
private readonly _sender;
|
|
36
|
+
private readonly _security;
|
|
37
|
+
private readonly _pendingRequests;
|
|
38
|
+
constructor(options: PermissionRelayOptions);
|
|
39
|
+
/**
|
|
40
|
+
* Check whether a breakpoint can be relayed through channels.
|
|
41
|
+
* Returns false for terminal-only breakpoints or when relay is disabled.
|
|
42
|
+
*/
|
|
43
|
+
canRelay(breakpointId: string, tags?: string[]): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Relay a breakpoint approval request to all active channels.
|
|
46
|
+
* Returns relay result. Does NOT wait for responses — use handleResponse()
|
|
47
|
+
* to process incoming channel approvals.
|
|
48
|
+
*/
|
|
49
|
+
relay(request: ChannelApprovalRequest, channelSources: string[], tags?: string[]): Promise<RelayResult>;
|
|
50
|
+
/**
|
|
51
|
+
* Handle a response from a channel.
|
|
52
|
+
* Returns the matched request if it was still pending (not expired).
|
|
53
|
+
*/
|
|
54
|
+
handleResponse(response: ChannelApprovalResponse): ChannelApprovalRequest | undefined;
|
|
55
|
+
/** Get a pending request by ID (returns undefined if expired). */
|
|
56
|
+
getPendingRequest(requestId: string): ChannelApprovalRequest | undefined;
|
|
57
|
+
/** Get all pending (non-expired) requests. */
|
|
58
|
+
getPendingRequests(): ChannelApprovalRequest[];
|
|
59
|
+
/** Get the security configuration. */
|
|
60
|
+
get security(): ChannelApprovalSecurityConfig;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=permissionRelay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissionRelay.d.ts","sourceRoot":"","sources":["../../../src/mcp/channels/permissionRelay.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACvB,aAAa,EACb,6BAA6B,EAC9B,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAMxD,MAAM,WAAW,sBAAsB;IACrC,qEAAqE;IACrE,MAAM,EAAE,qBAAqB,CAAC;IAC9B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,6BAA6B,CAAC;CAC1C;AAED,iCAAiC;AACjC,MAAM,WAAW,WAAW;IAC1B,uEAAuE;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,uBAAuB,KAAK,aAAa,CAAC;IAC7E,SAAS,EAAE,MAAM,aAAa,GAAG,SAAS,CAAC;IAC3C,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CACjC,CAwBA;AAMD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6C;gBAElE,OAAO,EAAE,sBAAsB;IAK3C;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO;IAsBxD;;;;OAIG;IACG,KAAK,CACT,OAAO,EAAE,sBAAsB,EAC/B,cAAc,EAAE,MAAM,EAAE,EACxB,IAAI,CAAC,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,WAAW,CAAC;IAuCvB;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,uBAAuB,GAAG,sBAAsB,GAAG,SAAS;IAerF,kEAAkE;IAClE,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAWxE,8CAA8C;IAC9C,kBAAkB,IAAI,sBAAsB,EAAE;IAc9C,sCAAsC;IACtC,IAAI,QAAQ,IAAI,6BAA6B,CAE5C;CACF"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GAP-MCPC-003: Channel Permission Relay.
|
|
4
|
+
*
|
|
5
|
+
* Routes breakpoint approval prompts through messaging channels.
|
|
6
|
+
* Uses a racing claim() pattern: channel response races against
|
|
7
|
+
* local interaction, first resolver wins.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.ChannelPermissionRelay = void 0;
|
|
11
|
+
exports.createApprovalRace = createApprovalRace;
|
|
12
|
+
const types_1 = require("./types");
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Approval claim racing
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/**
|
|
17
|
+
* Creates a claimable approval slot.
|
|
18
|
+
* Multiple resolvers can race to claim it; only the first wins.
|
|
19
|
+
*/
|
|
20
|
+
function createApprovalRace() {
|
|
21
|
+
let winner;
|
|
22
|
+
let resolvePromise;
|
|
23
|
+
const promise = new Promise((resolve) => {
|
|
24
|
+
resolvePromise = resolve;
|
|
25
|
+
});
|
|
26
|
+
function claim(source, response) {
|
|
27
|
+
if (winner) {
|
|
28
|
+
return { claimed: false, source };
|
|
29
|
+
}
|
|
30
|
+
winner = { claimed: true, source, response };
|
|
31
|
+
if (resolvePromise) {
|
|
32
|
+
resolvePromise(winner);
|
|
33
|
+
}
|
|
34
|
+
return winner;
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
claim,
|
|
38
|
+
getWinner: () => winner,
|
|
39
|
+
promise,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// ChannelPermissionRelay
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
class ChannelPermissionRelay {
|
|
46
|
+
_sender;
|
|
47
|
+
_security;
|
|
48
|
+
_pendingRequests = new Map();
|
|
49
|
+
constructor(options) {
|
|
50
|
+
this._sender = options.sender;
|
|
51
|
+
this._security = options.security ?? types_1.DEFAULT_APPROVAL_SECURITY;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check whether a breakpoint can be relayed through channels.
|
|
55
|
+
* Returns false for terminal-only breakpoints or when relay is disabled.
|
|
56
|
+
*/
|
|
57
|
+
canRelay(breakpointId, tags) {
|
|
58
|
+
if (!this._security.enabled)
|
|
59
|
+
return false;
|
|
60
|
+
// Check terminal-only tags
|
|
61
|
+
if (tags) {
|
|
62
|
+
for (const tag of tags) {
|
|
63
|
+
if (this._security.terminalOnlyTags.includes(tag)) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Check breakpoint ID prefixes for terminal-only categories
|
|
69
|
+
for (const restrictedTag of this._security.terminalOnlyTags) {
|
|
70
|
+
if (breakpointId.startsWith(`${restrictedTag}.`)) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Relay a breakpoint approval request to all active channels.
|
|
78
|
+
* Returns relay result. Does NOT wait for responses — use handleResponse()
|
|
79
|
+
* to process incoming channel approvals.
|
|
80
|
+
*/
|
|
81
|
+
async relay(request, channelSources, tags) {
|
|
82
|
+
if (!this.canRelay(request.breakpointId, tags)) {
|
|
83
|
+
return {
|
|
84
|
+
relayed: false,
|
|
85
|
+
reason: `Breakpoint "${request.breakpointId}" is restricted to terminal-only approval`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
if (channelSources.length === 0) {
|
|
89
|
+
return { relayed: false, reason: "No active channels to relay to" };
|
|
90
|
+
}
|
|
91
|
+
this._pendingRequests.set(request.requestId, request);
|
|
92
|
+
// Send to all channels
|
|
93
|
+
const template = `Breakpoint approval needed:\n**{{description}}**\nRun: {{runId}}\nOptions: {{options}}\n\nReply to approve or reject.`;
|
|
94
|
+
const templateVars = {
|
|
95
|
+
description: request.description,
|
|
96
|
+
runId: request.runId,
|
|
97
|
+
options: request.options.join(", "),
|
|
98
|
+
};
|
|
99
|
+
// formatTemplate is applied by OutboundChannelSender when both template and templateVars are present.
|
|
100
|
+
// text is set as fallback in case template rendering fails.
|
|
101
|
+
const fallbackText = `Approval needed: ${request.description} (${request.options.join(", ")})`;
|
|
102
|
+
await Promise.allSettled(channelSources.map((source) => this._sender.send({
|
|
103
|
+
channelSource: source,
|
|
104
|
+
text: fallbackText,
|
|
105
|
+
template,
|
|
106
|
+
templateVars,
|
|
107
|
+
})));
|
|
108
|
+
return { relayed: true, requestId: request.requestId };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Handle a response from a channel.
|
|
112
|
+
* Returns the matched request if it was still pending (not expired).
|
|
113
|
+
*/
|
|
114
|
+
handleResponse(response) {
|
|
115
|
+
const request = this._pendingRequests.get(response.requestId);
|
|
116
|
+
if (!request)
|
|
117
|
+
return undefined;
|
|
118
|
+
// Check if the request has expired
|
|
119
|
+
const elapsed = Date.now() - new Date(request.createdAt).getTime();
|
|
120
|
+
if (elapsed > request.timeoutMs) {
|
|
121
|
+
this._pendingRequests.delete(response.requestId);
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
this._pendingRequests.delete(response.requestId);
|
|
125
|
+
return request;
|
|
126
|
+
}
|
|
127
|
+
/** Get a pending request by ID (returns undefined if expired). */
|
|
128
|
+
getPendingRequest(requestId) {
|
|
129
|
+
const request = this._pendingRequests.get(requestId);
|
|
130
|
+
if (!request)
|
|
131
|
+
return undefined;
|
|
132
|
+
const elapsed = Date.now() - new Date(request.createdAt).getTime();
|
|
133
|
+
if (elapsed > request.timeoutMs) {
|
|
134
|
+
this._pendingRequests.delete(requestId);
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
return request;
|
|
138
|
+
}
|
|
139
|
+
/** Get all pending (non-expired) requests. */
|
|
140
|
+
getPendingRequests() {
|
|
141
|
+
const now = Date.now();
|
|
142
|
+
const results = [];
|
|
143
|
+
for (const [id, request] of this._pendingRequests) {
|
|
144
|
+
const elapsed = now - new Date(request.createdAt).getTime();
|
|
145
|
+
if (elapsed > request.timeoutMs) {
|
|
146
|
+
this._pendingRequests.delete(id);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
results.push(request);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return results;
|
|
153
|
+
}
|
|
154
|
+
/** Get the security configuration. */
|
|
155
|
+
get security() {
|
|
156
|
+
return this._security;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
exports.ChannelPermissionRelay = ChannelPermissionRelay;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GAP-MCPC-001/002/003: MCP Channel types.
|
|
3
|
+
*
|
|
4
|
+
* Defines types for messaging channels backed by MCP servers.
|
|
5
|
+
* Channels enable inbound/outbound messaging and breakpoint approval
|
|
6
|
+
* routing through external platforms (Slack, Discord, email, etc.).
|
|
7
|
+
*/
|
|
8
|
+
/** Channel capability declaration from an MCP server. */
|
|
9
|
+
export interface ChannelCapability {
|
|
10
|
+
/** Whether the server supports channel notifications. */
|
|
11
|
+
inbound: boolean;
|
|
12
|
+
/** Whether the server supports outbound messaging tools. */
|
|
13
|
+
outbound: boolean;
|
|
14
|
+
/** Whether the server supports permission relay. */
|
|
15
|
+
permissionRelay: boolean;
|
|
16
|
+
/** Human-readable channel type (slack, discord, email, etc.). */
|
|
17
|
+
channelType?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Configuration for a channel binding. */
|
|
20
|
+
export interface ChannelConfig {
|
|
21
|
+
/** MCP server name (matches McpServerConfig.name). */
|
|
22
|
+
serverName: string;
|
|
23
|
+
/** Display name shown in notifications. */
|
|
24
|
+
displayName: string;
|
|
25
|
+
/** Channel identifier (e.g. Slack channel ID). */
|
|
26
|
+
channelId: string;
|
|
27
|
+
/** Channel type for routing. */
|
|
28
|
+
channelType: string;
|
|
29
|
+
/** Whether the channel is currently enabled. */
|
|
30
|
+
enabled: boolean;
|
|
31
|
+
}
|
|
32
|
+
/** A message received from a channel. */
|
|
33
|
+
export interface ChannelMessage {
|
|
34
|
+
/** Unique message identifier. */
|
|
35
|
+
messageId: string;
|
|
36
|
+
/** Channel source identifier (serverName:channelId). */
|
|
37
|
+
source: string;
|
|
38
|
+
/** Sender identifier (platform-specific). */
|
|
39
|
+
sender: string;
|
|
40
|
+
/** Message content. */
|
|
41
|
+
content: string;
|
|
42
|
+
/** ISO timestamp of when the message was received. */
|
|
43
|
+
receivedAt: string;
|
|
44
|
+
/** Optional metadata from the channel platform. */
|
|
45
|
+
metadata?: Record<string, unknown>;
|
|
46
|
+
}
|
|
47
|
+
/** Binding of a channel to a specific run. */
|
|
48
|
+
export interface ChannelBinding {
|
|
49
|
+
/** Channel source (serverName:channelId). */
|
|
50
|
+
channelSource: string;
|
|
51
|
+
/** Run ID this channel is bound to. */
|
|
52
|
+
runId: string;
|
|
53
|
+
/** ISO timestamp of when the binding was created. */
|
|
54
|
+
boundAt: string;
|
|
55
|
+
}
|
|
56
|
+
/** Request to send an outbound message through a channel. */
|
|
57
|
+
export interface OutboundMessageRequest {
|
|
58
|
+
/** Target channel source (serverName:channelId). */
|
|
59
|
+
channelSource: string;
|
|
60
|
+
/** Message text. */
|
|
61
|
+
text: string;
|
|
62
|
+
/** Optional template name for formatting. */
|
|
63
|
+
template?: string;
|
|
64
|
+
/** Template variables for substitution. */
|
|
65
|
+
templateVars?: Record<string, string>;
|
|
66
|
+
}
|
|
67
|
+
/** Result of sending an outbound message. */
|
|
68
|
+
export interface OutboundMessageResult {
|
|
69
|
+
success: boolean;
|
|
70
|
+
/** Platform-specific message ID if available. */
|
|
71
|
+
messageId?: string;
|
|
72
|
+
error?: string;
|
|
73
|
+
}
|
|
74
|
+
/** A breakpoint approval request sent to a channel. */
|
|
75
|
+
export interface ChannelApprovalRequest {
|
|
76
|
+
/** Unique request identifier. */
|
|
77
|
+
requestId: string;
|
|
78
|
+
/** Breakpoint ID being approved. */
|
|
79
|
+
breakpointId: string;
|
|
80
|
+
/** Run ID. */
|
|
81
|
+
runId: string;
|
|
82
|
+
/** Effect ID. */
|
|
83
|
+
effectId: string;
|
|
84
|
+
/** Human-readable description of the breakpoint. */
|
|
85
|
+
description: string;
|
|
86
|
+
/** Options available (e.g. ["approve", "reject"]). */
|
|
87
|
+
options: string[];
|
|
88
|
+
/** ISO timestamp of when the request was created. */
|
|
89
|
+
createdAt: string;
|
|
90
|
+
/** Timeout in ms for the channel response. */
|
|
91
|
+
timeoutMs: number;
|
|
92
|
+
}
|
|
93
|
+
/** Response to a breakpoint approval request from a channel. */
|
|
94
|
+
export interface ChannelApprovalResponse {
|
|
95
|
+
/** Request ID being responded to. */
|
|
96
|
+
requestId: string;
|
|
97
|
+
/** Whether the breakpoint was approved. */
|
|
98
|
+
approved: boolean;
|
|
99
|
+
/** Optional feedback text. */
|
|
100
|
+
feedback?: string;
|
|
101
|
+
/** Who responded (platform-specific identifier). */
|
|
102
|
+
respondedBy: string;
|
|
103
|
+
/** Which channel the response came from. */
|
|
104
|
+
channelSource: string;
|
|
105
|
+
/** ISO timestamp of the response. */
|
|
106
|
+
respondedAt: string;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* An approval claim. Multiple resolvers race; the first to claim() wins.
|
|
110
|
+
*/
|
|
111
|
+
export interface ApprovalClaim {
|
|
112
|
+
/** Whether this claim was the winning one. */
|
|
113
|
+
claimed: boolean;
|
|
114
|
+
/** Source of the claim (e.g. "channel:slack:general", "local:terminal"). */
|
|
115
|
+
source: string;
|
|
116
|
+
/** The response if this claim won. */
|
|
117
|
+
response?: ChannelApprovalResponse;
|
|
118
|
+
}
|
|
119
|
+
/** Persisted channel allowlist. */
|
|
120
|
+
export interface ChannelAllowlistFile {
|
|
121
|
+
schemaVersion: string;
|
|
122
|
+
channels: ChannelConfig[];
|
|
123
|
+
}
|
|
124
|
+
export declare const CHANNEL_ALLOWLIST_SCHEMA_VERSION = "2026.01.channel-allowlist-v1";
|
|
125
|
+
/** Per-tag or per-level security constraints for channel approvals. */
|
|
126
|
+
export interface ChannelApprovalSecurityConfig {
|
|
127
|
+
/** Tags that require terminal-only approval (no channel relay). */
|
|
128
|
+
terminalOnlyTags: string[];
|
|
129
|
+
/** Whether channel approval is enabled at all. */
|
|
130
|
+
enabled: boolean;
|
|
131
|
+
/** Default timeout for channel approval requests (ms). */
|
|
132
|
+
defaultTimeoutMs: number;
|
|
133
|
+
}
|
|
134
|
+
export declare const DEFAULT_APPROVAL_SECURITY: ChannelApprovalSecurityConfig;
|
|
135
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/mcp/channels/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,yDAAyD;AACzD,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,OAAO,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,QAAQ,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,eAAe,EAAE,OAAO,CAAC;IACzB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,2CAA2C;AAC3C,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,8CAA8C;AAC9C,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,6DAA6D;AAC7D,MAAM,WAAW,sBAAsB;IACrC,oDAAoD;IACpD,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,6CAA6C;AAC7C,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,uDAAuD;AACvD,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,gEAAgE;AAChE,MAAM,WAAW,uBAAuB;IACtC,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACpC;AAMD,mCAAmC;AACnC,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,gCAAgC,iCAAiC,CAAC;AAM/E,uEAAuE;AACvE,MAAM,WAAW,6BAA6B;IAC5C,mEAAmE;IACnE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,kDAAkD;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,yBAAyB,EAAE,6BAIvC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GAP-MCPC-001/002/003: MCP Channel types.
|
|
4
|
+
*
|
|
5
|
+
* Defines types for messaging channels backed by MCP servers.
|
|
6
|
+
* Channels enable inbound/outbound messaging and breakpoint approval
|
|
7
|
+
* routing through external platforms (Slack, Discord, email, etc.).
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.DEFAULT_APPROVAL_SECURITY = exports.CHANNEL_ALLOWLIST_SCHEMA_VERSION = void 0;
|
|
11
|
+
exports.CHANNEL_ALLOWLIST_SCHEMA_VERSION = "2026.01.channel-allowlist-v1";
|
|
12
|
+
exports.DEFAULT_APPROVAL_SECURITY = {
|
|
13
|
+
terminalOnlyTags: ["destroy", "auth", "credential"],
|
|
14
|
+
enabled: false,
|
|
15
|
+
defaultTimeoutMs: 300_000, // 5 minutes
|
|
16
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status: Integrated with agent-platform MCP orchestration wiring.
|
|
3
|
+
* Moved from @a5c-ai/babysitter-sdk.
|
|
4
|
+
* GAP-REMOTE-006: MCP server configuration persistence.
|
|
5
|
+
*
|
|
6
|
+
* Read/write/merge server configurations from mcp-servers.json.
|
|
7
|
+
* Uses the same atomic temp-file + rename pattern as session modules.
|
|
8
|
+
*/
|
|
9
|
+
import type { McpServerConfig, McpServersFile } from "./types";
|
|
10
|
+
/** Resolve the path to mcp-servers.json within a state directory. */
|
|
11
|
+
export declare function getMcpServersConfigPath(stateDir: string): string;
|
|
12
|
+
/** Read server configurations. Returns empty list on missing/corrupt file. */
|
|
13
|
+
export declare function readMcpServersConfig(stateDir: string): Promise<McpServersFile>;
|
|
14
|
+
/** Write server configurations atomically. */
|
|
15
|
+
export declare function writeMcpServersConfig(stateDir: string, config: McpServersFile): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Add or update a server configuration.
|
|
18
|
+
* If a server with the same name exists, it is replaced.
|
|
19
|
+
*/
|
|
20
|
+
export declare function upsertServerConfig(stateDir: string, server: McpServerConfig): Promise<McpServersFile>;
|
|
21
|
+
/** Remove a server configuration by name. Returns true if removed. */
|
|
22
|
+
export declare function removeServerConfig(stateDir: string, serverName: string): Promise<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Merge an array of server configs into the existing configuration.
|
|
25
|
+
* Servers with matching names are replaced; new ones are appended.
|
|
26
|
+
*/
|
|
27
|
+
export declare function mergeMcpServersConfig(stateDir: string, incoming: McpServerConfig[]): Promise<McpServersFile>;
|
|
28
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/mcp/client/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAe/D,qEAAqE;AACrE,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,8EAA8E;AAC9E,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAqBpF;AAED,8CAA8C;AAC9C,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,cAAc,CAAC,CAUzB;AAED,sEAAsE;AACtE,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,eAAe,EAAE,GAC1B,OAAO,CAAC,cAAc,CAAC,CAYzB"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Status: Integrated with agent-platform MCP orchestration wiring.
|
|
4
|
+
* Moved from @a5c-ai/babysitter-sdk.
|
|
5
|
+
* GAP-REMOTE-006: MCP server configuration persistence.
|
|
6
|
+
*
|
|
7
|
+
* Read/write/merge server configurations from mcp-servers.json.
|
|
8
|
+
* Uses the same atomic temp-file + rename pattern as session modules.
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.getMcpServersConfigPath = getMcpServersConfigPath;
|
|
45
|
+
exports.readMcpServersConfig = readMcpServersConfig;
|
|
46
|
+
exports.writeMcpServersConfig = writeMcpServersConfig;
|
|
47
|
+
exports.upsertServerConfig = upsertServerConfig;
|
|
48
|
+
exports.removeServerConfig = removeServerConfig;
|
|
49
|
+
exports.mergeMcpServersConfig = mergeMcpServersConfig;
|
|
50
|
+
const node_fs_1 = require("node:fs");
|
|
51
|
+
const path = __importStar(require("node:path"));
|
|
52
|
+
const types_1 = require("./types");
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// Helpers
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
function emptyServersFile() {
|
|
57
|
+
return { schemaVersion: types_1.MCP_SERVERS_SCHEMA_VERSION, servers: [] };
|
|
58
|
+
}
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Public API
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
/** Resolve the path to mcp-servers.json within a state directory. */
|
|
63
|
+
function getMcpServersConfigPath(stateDir) {
|
|
64
|
+
return path.join(stateDir, "mcp-servers.json");
|
|
65
|
+
}
|
|
66
|
+
/** Read server configurations. Returns empty list on missing/corrupt file. */
|
|
67
|
+
async function readMcpServersConfig(stateDir) {
|
|
68
|
+
const filePath = getMcpServersConfigPath(stateDir);
|
|
69
|
+
let raw;
|
|
70
|
+
try {
|
|
71
|
+
raw = await node_fs_1.promises.readFile(filePath, "utf8");
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
const err = error;
|
|
75
|
+
if (err.code === "ENOENT")
|
|
76
|
+
return emptyServersFile();
|
|
77
|
+
process.stderr.write(`[babysitter] MCP config read error (${err.code}): ${filePath}\n`);
|
|
78
|
+
return emptyServersFile();
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
const data = JSON.parse(raw);
|
|
82
|
+
return {
|
|
83
|
+
schemaVersion: typeof data.schemaVersion === "string" ? data.schemaVersion : types_1.MCP_SERVERS_SCHEMA_VERSION,
|
|
84
|
+
servers: Array.isArray(data.servers) ? data.servers : [],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
process.stderr.write(`[babysitter] MCP config parse error: ${filePath}: ${e instanceof Error ? e.message : String(e)}\n`);
|
|
89
|
+
return emptyServersFile();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Write server configurations atomically. */
|
|
93
|
+
async function writeMcpServersConfig(stateDir, config) {
|
|
94
|
+
const filePath = getMcpServersConfigPath(stateDir);
|
|
95
|
+
const dir = path.dirname(filePath);
|
|
96
|
+
const tempPath = `${filePath}.tmp.${process.pid}`;
|
|
97
|
+
await node_fs_1.promises.mkdir(dir, { recursive: true });
|
|
98
|
+
await node_fs_1.promises.writeFile(tempPath, JSON.stringify(config, null, 2), "utf8");
|
|
99
|
+
await node_fs_1.promises.rename(tempPath, filePath);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Add or update a server configuration.
|
|
103
|
+
* If a server with the same name exists, it is replaced.
|
|
104
|
+
*/
|
|
105
|
+
async function upsertServerConfig(stateDir, server) {
|
|
106
|
+
const config = await readMcpServersConfig(stateDir);
|
|
107
|
+
const idx = config.servers.findIndex((s) => s.name === server.name);
|
|
108
|
+
if (idx >= 0) {
|
|
109
|
+
config.servers[idx] = server;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
config.servers.push(server);
|
|
113
|
+
}
|
|
114
|
+
await writeMcpServersConfig(stateDir, config);
|
|
115
|
+
return config;
|
|
116
|
+
}
|
|
117
|
+
/** Remove a server configuration by name. Returns true if removed. */
|
|
118
|
+
async function removeServerConfig(stateDir, serverName) {
|
|
119
|
+
const config = await readMcpServersConfig(stateDir);
|
|
120
|
+
const before = config.servers.length;
|
|
121
|
+
config.servers = config.servers.filter((s) => s.name !== serverName);
|
|
122
|
+
if (config.servers.length === before)
|
|
123
|
+
return false;
|
|
124
|
+
await writeMcpServersConfig(stateDir, config);
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Merge an array of server configs into the existing configuration.
|
|
129
|
+
* Servers with matching names are replaced; new ones are appended.
|
|
130
|
+
*/
|
|
131
|
+
async function mergeMcpServersConfig(stateDir, incoming) {
|
|
132
|
+
const config = await readMcpServersConfig(stateDir);
|
|
133
|
+
for (const server of incoming) {
|
|
134
|
+
const idx = config.servers.findIndex((s) => s.name === server.name);
|
|
135
|
+
if (idx >= 0) {
|
|
136
|
+
config.servers[idx] = server;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
config.servers.push(server);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
await writeMcpServersConfig(stateDir, config);
|
|
143
|
+
return config;
|
|
144
|
+
}
|