@agimon-ai/doompi-team 0.0.1-alpha.7 → 0.0.1-alpha.71
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 +118 -22
- package/dist/_virtual/_rolldown/runtime.cjs +1 -1
- package/dist/api-contracts.cjs +1 -0
- package/dist/api-contracts.d.cts +2 -0
- package/dist/api-contracts.d.mts +2 -0
- package/dist/api-contracts.mjs +1 -0
- package/dist/capabilityCeiling.cjs +1 -0
- package/dist/capabilityCeiling.d.cts +3 -0
- package/dist/capabilityCeiling.d.mts +3 -0
- package/dist/capabilityCeiling.mjs +1 -0
- package/dist/constants/team.cjs +2 -0
- package/dist/constants/team.cjs.map +1 -0
- package/dist/constants/team.mjs +2 -0
- package/dist/constants/team.mjs.map +1 -0
- package/dist/controllers/slashCommands.cjs +4 -0
- package/dist/controllers/slashCommands.cjs.map +1 -0
- package/dist/controllers/slashCommands.mjs +4 -0
- package/dist/controllers/slashCommands.mjs.map +1 -0
- package/dist/controllers/teamSessionApi.cjs +2 -0
- package/dist/controllers/teamSessionApi.cjs.map +1 -0
- package/dist/controllers/teamSessionApi.mjs +2 -0
- package/dist/controllers/teamSessionApi.mjs.map +1 -0
- package/dist/controllers/webSubagentCatalogChannel.cjs +2 -0
- package/dist/controllers/webSubagentCatalogChannel.cjs.map +1 -0
- package/dist/controllers/webSubagentCatalogChannel.mjs +2 -0
- package/dist/controllers/webSubagentCatalogChannel.mjs.map +1 -0
- package/dist/controllers/webSubagentsChannel.cjs +2 -0
- package/dist/controllers/webSubagentsChannel.cjs.map +1 -0
- package/dist/controllers/webSubagentsChannel.mjs +2 -0
- package/dist/controllers/webSubagentsChannel.mjs.map +1 -0
- package/dist/delegation-api.cjs +1 -0
- package/dist/delegation-api.d.cts +2 -0
- package/dist/delegation-api.d.mts +2 -0
- package/dist/delegation-api.mjs +1 -0
- package/dist/delegation.cjs +1 -0
- package/dist/delegation.d.cts +3 -0
- package/dist/delegation.d.mts +3 -0
- package/dist/delegation.mjs +1 -0
- package/dist/env.cjs +1 -2
- package/dist/env.d.cts +2 -65
- package/dist/env.d.mts +2 -65
- package/dist/env.mjs +1 -2
- package/dist/extensions/pi.cjs +1 -1
- package/dist/extensions/pi.cjs.map +1 -1
- package/dist/extensions/pi.d.cts +14 -2
- package/dist/extensions/pi.d.cts.map +1 -0
- package/dist/extensions/pi.d.mts +14 -2
- package/dist/extensions/pi.d.mts.map +1 -0
- package/dist/extensions/pi.mjs +1 -1
- package/dist/extensions/pi.mjs.map +1 -1
- package/dist/extensions/server.cjs +4 -0
- package/dist/extensions/server.cjs.map +1 -0
- package/dist/extensions/server.d.cts +5 -0
- package/dist/extensions/server.d.cts.map +1 -0
- package/dist/extensions/server.d.mts +5 -0
- package/dist/extensions/server.d.mts.map +1 -0
- package/dist/extensions/server.mjs +4 -0
- package/dist/extensions/server.mjs.map +1 -0
- package/dist/fable-plan-api.cjs +2 -0
- package/dist/fable-plan-api.cjs.map +1 -0
- package/dist/fable-plan-api.d.cts +96 -0
- package/dist/fable-plan-api.d.cts.map +1 -0
- package/dist/fable-plan-api.d.mts +96 -0
- package/dist/fable-plan-api.d.mts.map +1 -0
- package/dist/fable-plan-api.mjs +2 -0
- package/dist/fable-plan-api.mjs.map +1 -0
- package/dist/fable-plan.cjs +1 -0
- package/dist/fable-plan.d.cts +2 -0
- package/dist/fable-plan.d.mts +2 -0
- package/dist/fable-plan.mjs +1 -0
- package/dist/index.cjs +1 -2
- package/dist/index.d.cts +2 -34
- package/dist/index.d.mts +2 -34
- package/dist/index.mjs +1 -2
- package/dist/models/slashResult.cjs +2 -0
- package/dist/models/slashResult.cjs.map +1 -0
- package/dist/models/slashResult.mjs +2 -0
- package/dist/models/slashResult.mjs.map +1 -0
- package/dist/runs/background/cliRunnerEntry.cjs +1 -1
- package/dist/runs/background/cliRunnerEntry.cjs.map +1 -1
- package/dist/runs/background/cliRunnerEntry.d.cts +1 -1
- package/dist/runs/background/cliRunnerEntry.d.mts +1 -1
- package/dist/runs/background/cliRunnerEntry.mjs +1 -1
- package/dist/runs/background/cliRunnerEntry.mjs.map +1 -1
- package/dist/runtime-subagent-policy.cjs +2 -0
- package/dist/runtime-subagent-policy.cjs.map +1 -0
- package/dist/runtime-subagent-policy.d.cts +32 -0
- package/dist/runtime-subagent-policy.d.cts.map +1 -0
- package/dist/runtime-subagent-policy.d.mts +32 -0
- package/dist/runtime-subagent-policy.d.mts.map +1 -0
- package/dist/runtime-subagent-policy.mjs +2 -0
- package/dist/runtime-subagent-policy.mjs.map +1 -0
- package/dist/runtime-subagent-tool.cjs +2 -0
- package/dist/runtime-subagent-tool.cjs.map +1 -0
- package/dist/runtime-subagent-tool.d.cts +68 -0
- package/dist/runtime-subagent-tool.d.cts.map +1 -0
- package/dist/runtime-subagent-tool.d.mts +68 -0
- package/dist/runtime-subagent-tool.d.mts.map +1 -0
- package/dist/runtime-subagent-tool.mjs +2 -0
- package/dist/runtime-subagent-tool.mjs.map +1 -0
- package/dist/schemas/apiContracts.cjs +2 -0
- package/dist/schemas/apiContracts.cjs.map +1 -0
- package/dist/schemas/apiContracts.d.cts +53 -0
- package/dist/schemas/apiContracts.d.cts.map +1 -0
- package/dist/schemas/apiContracts.d.mts +53 -0
- package/dist/schemas/apiContracts.d.mts.map +1 -0
- package/dist/schemas/apiContracts.mjs +2 -0
- package/dist/schemas/apiContracts.mjs.map +1 -0
- package/dist/schemas/team/capabilityCeiling.cjs +2 -0
- package/dist/schemas/team/capabilityCeiling.cjs.map +1 -0
- package/dist/schemas/team/capabilityCeiling.d.cts +46 -0
- package/dist/schemas/team/capabilityCeiling.d.cts.map +1 -0
- package/dist/schemas/team/capabilityCeiling.d.mts +46 -0
- package/dist/schemas/team/capabilityCeiling.d.mts.map +1 -0
- package/dist/schemas/team/capabilityCeiling.mjs +2 -0
- package/dist/schemas/team/capabilityCeiling.mjs.map +1 -0
- package/dist/schemas/team/delegation.cjs.map +1 -0
- package/dist/schemas/team/delegation.d.cts +268 -0
- package/dist/schemas/team/delegation.d.cts.map +1 -0
- package/dist/schemas/team/delegation.d.mts +268 -0
- package/dist/schemas/team/delegation.d.mts.map +1 -0
- package/dist/schemas/team/delegation.mjs.map +1 -0
- package/dist/schemas/team/packageConfig.cjs +2 -0
- package/dist/schemas/team/packageConfig.cjs.map +1 -0
- package/dist/schemas/team/packageConfig.mjs +2 -0
- package/dist/schemas/team/packageConfig.mjs.map +1 -0
- package/dist/services/admissionGate/index.cjs +2 -0
- package/dist/services/admissionGate/index.cjs.map +1 -0
- package/dist/services/admissionGate/index.mjs +2 -0
- package/dist/services/admissionGate/index.mjs.map +1 -0
- package/dist/services/agentDiscovery/index.cjs +2 -0
- package/dist/services/agentDiscovery/index.cjs.map +1 -0
- package/dist/services/agentDiscovery/index.mjs +2 -0
- package/dist/services/agentDiscovery/index.mjs.map +1 -0
- package/dist/services/agentFrontmatter/index.cjs +10 -0
- package/dist/services/agentFrontmatter/index.cjs.map +1 -0
- package/dist/services/agentFrontmatter/index.mjs +10 -0
- package/dist/services/agentFrontmatter/index.mjs.map +1 -0
- package/dist/services/agentLoader/index.cjs +2 -0
- package/dist/services/agentLoader/index.cjs.map +1 -0
- package/dist/services/agentLoader/index.mjs +2 -0
- package/dist/services/agentLoader/index.mjs.map +1 -0
- package/dist/services/agentMemory/index.cjs +3 -0
- package/dist/services/agentMemory/index.cjs.map +1 -0
- package/dist/services/agentMemory/index.mjs +3 -0
- package/dist/services/agentMemory/index.mjs.map +1 -0
- package/dist/services/agentProjectRoot/index.cjs +2 -0
- package/dist/services/agentProjectRoot/index.cjs.map +1 -0
- package/dist/services/agentProjectRoot/index.mjs +2 -0
- package/dist/services/agentProjectRoot/index.mjs.map +1 -0
- package/dist/services/agentSettings/index.cjs +2 -0
- package/dist/services/agentSettings/index.cjs.map +1 -0
- package/dist/services/agentSettings/index.mjs +2 -0
- package/dist/services/agentSettings/index.mjs.map +1 -0
- package/dist/services/agentSkills/index.cjs +0 -0
- package/dist/services/agentSkills/index.cjs.map +1 -0
- package/dist/services/agentSkills/index.mjs +0 -0
- package/dist/services/agentSkills/index.mjs.map +1 -0
- package/dist/services/asyncExecution/index.cjs +2 -0
- package/dist/services/asyncExecution/index.cjs.map +1 -0
- package/dist/services/asyncExecution/index.mjs +2 -0
- package/dist/services/asyncExecution/index.mjs.map +1 -0
- package/dist/services/asyncJobTracker/index.cjs +2 -0
- package/dist/services/asyncJobTracker/index.cjs.map +1 -0
- package/dist/services/asyncJobTracker/index.mjs +2 -0
- package/dist/services/asyncJobTracker/index.mjs.map +1 -0
- package/dist/services/atomicJson/index.cjs +2 -0
- package/dist/services/atomicJson/index.cjs.map +1 -0
- package/dist/services/atomicJson/index.mjs +2 -0
- package/dist/services/atomicJson/index.mjs.map +1 -0
- package/dist/services/backgroundWorkService/index.cjs +2 -0
- package/dist/services/backgroundWorkService/index.cjs.map +1 -0
- package/dist/services/backgroundWorkService/index.mjs +2 -0
- package/dist/services/backgroundWorkService/index.mjs.map +1 -0
- package/dist/services/boundedKeySet/index.cjs +2 -0
- package/dist/services/boundedKeySet/index.cjs.map +1 -0
- package/dist/services/boundedKeySet/index.mjs +2 -0
- package/dist/services/boundedKeySet/index.mjs.map +1 -0
- package/dist/services/chainExpression/index.cjs +2 -0
- package/dist/services/chainExpression/index.cjs.map +1 -0
- package/dist/services/chainExpression/index.mjs +2 -0
- package/dist/services/chainExpression/index.mjs.map +1 -0
- package/dist/services/claudeFableProfile/index.cjs +4 -0
- package/dist/services/claudeFableProfile/index.cjs.map +1 -0
- package/dist/services/claudeFableProfile/index.mjs +4 -0
- package/dist/services/claudeFableProfile/index.mjs.map +1 -0
- package/dist/services/completionBatcher/index.cjs +2 -0
- package/dist/services/completionBatcher/index.cjs.map +1 -0
- package/dist/services/completionBatcher/index.mjs +2 -0
- package/dist/services/completionBatcher/index.mjs.map +1 -0
- package/dist/services/config/index.cjs +2 -0
- package/dist/services/config/index.cjs.map +1 -0
- package/dist/services/config/index.mjs +2 -0
- package/dist/services/config/index.mjs.map +1 -0
- package/dist/services/configDir/index.cjs +2 -0
- package/dist/services/configDir/index.cjs.map +1 -0
- package/dist/services/configDir/index.mjs +2 -0
- package/dist/services/configDir/index.mjs.map +1 -0
- package/dist/services/delegationBridge/index.cjs +2 -0
- package/dist/services/delegationBridge/index.cjs.map +1 -0
- package/dist/services/delegationBridge/index.mjs +2 -0
- package/dist/services/delegationBridge/index.mjs.map +1 -0
- package/dist/services/depthGuard/index.cjs +2 -0
- package/dist/services/depthGuard/index.cjs.map +1 -0
- package/dist/services/depthGuard/index.mjs +2 -0
- package/dist/services/depthGuard/index.mjs.map +1 -0
- package/dist/services/directRunBackgroundWork/index.cjs +2 -0
- package/dist/services/directRunBackgroundWork/index.cjs.map +1 -0
- package/dist/services/directRunBackgroundWork/index.mjs +2 -0
- package/dist/services/directRunBackgroundWork/index.mjs.map +1 -0
- package/dist/services/displayFormat/index.cjs +2 -0
- package/dist/services/displayFormat/index.cjs.map +1 -0
- package/dist/services/displayFormat/index.mjs +2 -0
- package/dist/services/displayFormat/index.mjs.map +1 -0
- package/dist/services/doctor/index.cjs +5 -0
- package/dist/services/doctor/index.cjs.map +1 -0
- package/dist/services/doctor/index.mjs +5 -0
- package/dist/services/doctor/index.mjs.map +1 -0
- package/dist/services/errors/index.cjs +2 -0
- package/dist/services/errors/index.cjs.map +1 -0
- package/dist/services/errors/index.mjs +2 -0
- package/dist/services/errors/index.mjs.map +1 -0
- package/dist/services/externalProcessIpc/index.cjs +2 -0
- package/dist/services/externalProcessIpc/index.cjs.map +1 -0
- package/dist/services/externalProcessIpc/index.mjs +2 -0
- package/dist/services/externalProcessIpc/index.mjs.map +1 -0
- package/dist/services/fablePlanBridge/index.cjs +2 -0
- package/dist/services/fablePlanBridge/index.cjs.map +1 -0
- package/dist/services/fablePlanBridge/index.mjs +2 -0
- package/dist/services/fablePlanBridge/index.mjs.map +1 -0
- package/dist/services/fileSystemRetry/index.cjs +2 -0
- package/dist/services/fileSystemRetry/index.cjs.map +1 -0
- package/dist/services/fileSystemRetry/index.mjs +2 -0
- package/dist/services/fileSystemRetry/index.mjs.map +1 -0
- package/dist/services/fleetTranscript/index.cjs +3 -0
- package/dist/services/fleetTranscript/index.cjs.map +1 -0
- package/dist/services/fleetTranscript/index.mjs +3 -0
- package/dist/services/fleetTranscript/index.mjs.map +1 -0
- package/dist/services/intercomBridge/index.cjs +2 -0
- package/dist/services/intercomBridge/index.cjs.map +1 -0
- package/dist/services/intercomBridge/index.mjs +2 -0
- package/dist/services/intercomBridge/index.mjs.map +1 -0
- package/dist/services/lruCache/index.cjs +2 -0
- package/dist/services/lruCache/index.cjs.map +1 -0
- package/dist/services/lruCache/index.mjs +2 -0
- package/dist/services/lruCache/index.mjs.map +1 -0
- package/dist/services/managementActions/index.cjs +2 -0
- package/dist/services/managementActions/index.cjs.map +1 -0
- package/dist/services/managementActions/index.mjs +2 -0
- package/dist/services/managementActions/index.mjs.map +1 -0
- package/dist/services/mcpDirectToolAllowlist/index.cjs +2 -0
- package/dist/services/mcpDirectToolAllowlist/index.cjs.map +1 -0
- package/dist/services/mcpDirectToolAllowlist/index.mjs +2 -0
- package/dist/services/mcpDirectToolAllowlist/index.mjs.map +1 -0
- package/dist/services/modelFallback/index.cjs +2 -0
- package/dist/services/modelFallback/index.cjs.map +1 -0
- package/dist/services/modelFallback/index.mjs +2 -0
- package/dist/services/modelFallback/index.mjs.map +1 -0
- package/dist/services/modelInfo/index.cjs +2 -0
- package/dist/services/modelInfo/index.cjs.map +1 -0
- package/dist/services/modelInfo/index.mjs +2 -0
- package/dist/services/modelInfo/index.mjs.map +1 -0
- package/dist/services/modelResolution/index.cjs +2 -0
- package/dist/services/modelResolution/index.cjs.map +1 -0
- package/dist/services/modelResolution/index.mjs +2 -0
- package/dist/services/modelResolution/index.mjs.map +1 -0
- package/dist/services/modelScope/index.cjs +2 -0
- package/dist/services/modelScope/index.cjs.map +1 -0
- package/dist/services/modelScope/index.mjs +2 -0
- package/dist/services/modelScope/index.mjs.map +1 -0
- package/dist/services/nativeFleetTranscript/index.cjs +3 -0
- package/dist/services/nativeFleetTranscript/index.cjs.map +1 -0
- package/dist/services/nativeFleetTranscript/index.mjs +3 -0
- package/dist/services/nativeFleetTranscript/index.mjs.map +1 -0
- package/dist/services/nativeRunCoordinator/index.cjs +2 -0
- package/dist/services/nativeRunCoordinator/index.cjs.map +1 -0
- package/dist/services/nativeRunCoordinator/index.mjs +2 -0
- package/dist/services/nativeRunCoordinator/index.mjs.map +1 -0
- package/dist/services/nativeRunProjection/index.cjs +2 -0
- package/dist/services/nativeRunProjection/index.cjs.map +1 -0
- package/dist/services/nativeRunProjection/index.mjs +2 -0
- package/dist/services/nativeRunProjection/index.mjs.map +1 -0
- package/dist/services/nativeTeamChannel/index.cjs +4 -0
- package/dist/services/nativeTeamChannel/index.cjs.map +1 -0
- package/dist/services/nativeTeamChannel/index.d.cts +48 -0
- package/dist/services/nativeTeamChannel/index.d.cts.map +1 -0
- package/dist/services/nativeTeamChannel/index.d.mts +48 -0
- package/dist/services/nativeTeamChannel/index.d.mts.map +1 -0
- package/dist/services/nativeTeamChannel/index.mjs +4 -0
- package/dist/services/nativeTeamChannel/index.mjs.map +1 -0
- package/dist/services/notify/index.cjs +4 -0
- package/dist/services/notify/index.cjs.map +1 -0
- package/dist/services/notify/index.mjs +4 -0
- package/dist/services/notify/index.mjs.map +1 -0
- package/dist/services/operationJournal/index.cjs +2 -0
- package/dist/services/operationJournal/index.cjs.map +1 -0
- package/dist/services/operationJournal/index.mjs +2 -0
- package/dist/services/operationJournal/index.mjs.map +1 -0
- package/dist/services/orchestratorPrompt/index.cjs +42 -0
- package/dist/services/orchestratorPrompt/index.cjs.map +1 -0
- package/dist/services/orchestratorPrompt/index.mjs +42 -0
- package/dist/services/orchestratorPrompt/index.mjs.map +1 -0
- package/dist/services/pollScheduler/index.cjs +2 -0
- package/dist/services/pollScheduler/index.cjs.map +1 -0
- package/dist/services/pollScheduler/index.mjs +2 -0
- package/dist/services/pollScheduler/index.mjs.map +1 -0
- package/dist/services/runWithConcurrency/index.cjs +2 -0
- package/dist/services/runWithConcurrency/index.cjs.map +1 -0
- package/dist/services/runWithConcurrency/index.mjs +2 -0
- package/dist/services/runWithConcurrency/index.mjs.map +1 -0
- package/dist/services/runtimeRegistry/index.cjs +2 -0
- package/dist/services/runtimeRegistry/index.cjs.map +1 -0
- package/dist/services/runtimeRegistry/index.mjs +2 -0
- package/dist/services/runtimeRegistry/index.mjs.map +1 -0
- package/dist/services/sessionLifecycle/index.cjs +2 -0
- package/dist/services/sessionLifecycle/index.cjs.map +1 -0
- package/dist/services/sessionLifecycle/index.mjs +2 -0
- package/dist/services/sessionLifecycle/index.mjs.map +1 -0
- package/dist/services/sessionPaths/index.cjs +2 -0
- package/dist/services/sessionPaths/index.cjs.map +1 -0
- package/dist/services/sessionPaths/index.mjs +2 -0
- package/dist/services/sessionPaths/index.mjs.map +1 -0
- package/dist/services/spawnHandshake/index.cjs +2 -0
- package/dist/services/spawnHandshake/index.cjs.map +1 -0
- package/dist/services/spawnHandshake/index.mjs +2 -0
- package/dist/services/spawnHandshake/index.mjs.map +1 -0
- package/dist/services/spawnPlan/index.cjs +4 -0
- package/dist/services/spawnPlan/index.cjs.map +1 -0
- package/dist/services/spawnPlan/index.mjs +4 -0
- package/dist/services/spawnPlan/index.mjs.map +1 -0
- package/dist/services/spawnRequestMapping/index.cjs +2 -0
- package/dist/services/spawnRequestMapping/index.cjs.map +1 -0
- package/dist/services/spawnRequestMapping/index.mjs +2 -0
- package/dist/services/spawnRequestMapping/index.mjs.map +1 -0
- package/dist/services/statusViews/index.cjs +7 -0
- package/dist/services/statusViews/index.cjs.map +1 -0
- package/dist/services/statusViews/index.mjs +7 -0
- package/dist/services/statusViews/index.mjs.map +1 -0
- package/dist/services/statusWriter/index.cjs +2 -0
- package/dist/services/statusWriter/index.cjs.map +1 -0
- package/dist/services/statusWriter/index.mjs +2 -0
- package/dist/services/statusWriter/index.mjs.map +1 -0
- package/dist/services/subagentLaunch/index.cjs +2 -0
- package/dist/services/subagentLaunch/index.cjs.map +1 -0
- package/dist/services/subagentLaunch/index.mjs +2 -0
- package/dist/services/subagentLaunch/index.mjs.map +1 -0
- package/dist/services/subagentLaunchContract/index.cjs +2 -0
- package/dist/services/subagentLaunchContract/index.cjs.map +1 -0
- package/dist/services/subagentLaunchContract/index.d.cts +28 -0
- package/dist/services/subagentLaunchContract/index.d.cts.map +1 -0
- package/dist/services/subagentLaunchContract/index.d.mts +28 -0
- package/dist/services/subagentLaunchContract/index.d.mts.map +1 -0
- package/dist/services/subagentLaunchContract/index.mjs +2 -0
- package/dist/services/subagentLaunchContract/index.mjs.map +1 -0
- package/dist/services/subagentPolicyService/index.cjs +2 -0
- package/dist/services/subagentPolicyService/index.cjs.map +1 -0
- package/dist/services/subagentPolicyService/index.mjs +2 -0
- package/dist/services/subagentPolicyService/index.mjs.map +1 -0
- package/dist/services/subagentTool/index.cjs +6 -0
- package/dist/services/subagentTool/index.cjs.map +1 -0
- package/dist/services/subagentTool/index.mjs +6 -0
- package/dist/services/subagentTool/index.mjs.map +1 -0
- package/dist/services/subagentWait/index.cjs +2 -0
- package/dist/services/subagentWait/index.cjs.map +1 -0
- package/dist/services/subagentWait/index.mjs +2 -0
- package/dist/services/subagentWait/index.mjs.map +1 -0
- package/dist/services/suspendedRuns/index.cjs +6 -0
- package/dist/services/suspendedRuns/index.cjs.map +1 -0
- package/dist/services/suspendedRuns/index.mjs +6 -0
- package/dist/services/suspendedRuns/index.mjs.map +1 -0
- package/dist/services/teamCollaboration/index.cjs +2 -0
- package/dist/services/teamCollaboration/index.cjs.map +1 -0
- package/dist/services/teamCollaboration/index.mjs +2 -0
- package/dist/services/teamCollaboration/index.mjs.map +1 -0
- package/dist/services/teamRuntime/index.cjs +2 -0
- package/dist/services/teamRuntime/index.cjs.map +1 -0
- package/dist/services/teamRuntime/index.mjs +2 -0
- package/dist/services/teamRuntime/index.mjs.map +1 -0
- package/dist/services/teamSnapshot/index.cjs +3 -0
- package/dist/services/teamSnapshot/index.cjs.map +1 -0
- package/dist/services/teamSnapshot/index.d.cts +10 -0
- package/dist/services/teamSnapshot/index.d.cts.map +1 -0
- package/dist/services/teamSnapshot/index.d.mts +10 -0
- package/dist/services/teamSnapshot/index.d.mts.map +1 -0
- package/dist/services/teamSnapshot/index.mjs +3 -0
- package/dist/services/teamSnapshot/index.mjs.map +1 -0
- package/dist/services/toolDescription/index.cjs +2 -0
- package/dist/services/toolDescription/index.cjs.map +1 -0
- package/dist/services/toolDescription/index.mjs +2 -0
- package/dist/services/toolDescription/index.mjs.map +1 -0
- package/dist/services/versioned/index.cjs +2 -0
- package/dist/services/versioned/index.cjs.map +1 -0
- package/dist/services/versioned/index.mjs +2 -0
- package/dist/services/versioned/index.mjs.map +1 -0
- package/dist/services/webSubagentCatalog/index.cjs +2 -0
- package/dist/services/webSubagentCatalog/index.cjs.map +1 -0
- package/dist/services/webSubagentCatalog/index.mjs +2 -0
- package/dist/services/webSubagentCatalog/index.mjs.map +1 -0
- package/dist/subagent-policy.cjs +1 -0
- package/dist/subagent-policy.d.cts +2 -0
- package/dist/subagent-policy.d.mts +2 -0
- package/dist/subagent-policy.mjs +1 -0
- package/dist/subagent-tool.cjs +1 -0
- package/dist/subagent-tool.d.cts +2 -0
- package/dist/subagent-tool.d.mts +2 -0
- package/dist/subagent-tool.mjs +1 -0
- package/dist/teamSnapshot.cjs +1 -0
- package/dist/teamSnapshot.d.cts +2 -0
- package/dist/teamSnapshot.d.mts +2 -0
- package/dist/teamSnapshot.mjs +1 -0
- package/dist/tools/intercom.cjs +2 -0
- package/dist/tools/intercom.cjs.map +1 -0
- package/dist/tools/intercom.mjs +2 -0
- package/dist/tools/intercom.mjs.map +1 -0
- package/dist/tools/subagent.cjs +2 -0
- package/dist/tools/subagent.cjs.map +1 -0
- package/dist/tools/subagent.mjs +2 -0
- package/dist/tools/subagent.mjs.map +1 -0
- package/dist/tui/agentCatalog.cjs +2 -1
- package/dist/tui/agentCatalog.cjs.map +1 -1
- package/dist/tui/agentCatalog.mjs +2 -1
- package/dist/tui/agentCatalog.mjs.map +1 -1
- package/dist/tui/agentResourceProjection.cjs +1 -1
- package/dist/tui/agentResourceProjection.cjs.map +1 -1
- package/dist/tui/agentResourceProjection.mjs +1 -1
- package/dist/tui/agentResourceProjection.mjs.map +1 -1
- package/dist/tui/completionNotice.cjs +2 -2
- package/dist/tui/completionNotice.cjs.map +1 -1
- package/dist/tui/completionNotice.mjs +3 -3
- package/dist/tui/completionNotice.mjs.map +1 -1
- package/dist/tui/contributions.cjs +2 -0
- package/dist/tui/contributions.cjs.map +1 -0
- package/dist/tui/contributions.mjs +2 -0
- package/dist/tui/contributions.mjs.map +1 -0
- package/dist/tui/fleet.cjs +2 -2
- package/dist/tui/fleet.cjs.map +1 -1
- package/dist/tui/fleet.mjs +2 -2
- package/dist/tui/fleet.mjs.map +1 -1
- package/dist/tui/fleetAgentView.cjs +1 -1
- package/dist/tui/fleetAgentView.cjs.map +1 -1
- package/dist/tui/fleetAgentView.mjs +1 -1
- package/dist/tui/fleetAgentView.mjs.map +1 -1
- package/dist/tui/fleetStatus.cjs +1 -1
- package/dist/tui/fleetStatus.cjs.map +1 -1
- package/dist/tui/fleetStatus.mjs +1 -1
- package/dist/tui/fleetStatus.mjs.map +1 -1
- package/dist/tui/fleetTranscript.cjs +3 -4
- package/dist/tui/fleetTranscript.cjs.map +1 -1
- package/dist/tui/fleetTranscript.mjs +3 -4
- package/dist/tui/fleetTranscript.mjs.map +1 -1
- package/dist/tui/slashRunNotice.cjs +3 -0
- package/dist/tui/slashRunNotice.cjs.map +1 -0
- package/dist/tui/slashRunNotice.mjs +3 -0
- package/dist/tui/slashRunNotice.mjs.map +1 -0
- package/dist/tui/subagentToolRender.cjs +3 -0
- package/dist/tui/subagentToolRender.cjs.map +1 -0
- package/dist/tui/subagentToolRender.mjs +3 -0
- package/dist/tui/subagentToolRender.mjs.map +1 -0
- package/dist/types/agent.d.cts +119 -0
- package/dist/types/agent.d.cts.map +1 -0
- package/dist/types/agent.d.mts +119 -0
- package/dist/types/agent.d.mts.map +1 -0
- package/dist/types/environment.cjs +2 -0
- package/dist/types/environment.cjs.map +1 -0
- package/dist/types/environment.d.cts +63 -0
- package/dist/types/environment.d.cts.map +1 -0
- package/dist/types/environment.d.mts +63 -0
- package/dist/types/environment.d.mts.map +1 -0
- package/dist/types/environment.mjs +2 -0
- package/dist/types/environment.mjs.map +1 -0
- package/dist/types/index.d.cts +16 -0
- package/dist/types/index.d.cts.map +1 -0
- package/dist/types/index.d.mts +16 -0
- package/dist/types/index.d.mts.map +1 -0
- package/dist/types/webSubagents.cjs +2 -0
- package/dist/types/webSubagents.cjs.map +1 -0
- package/dist/types/webSubagents.mjs +2 -0
- package/dist/types/webSubagents.mjs.map +1 -0
- package/package.json +135 -31
- package/src/extensions/web.ts +75 -0
- package/src/types/webSubagents.ts +77 -0
- package/src/web/api/catalog.ts +75 -0
- package/src/web/api/runActionsSlot.ts +8 -0
- package/src/web/components/AgentCatalogDrawer.tsx +241 -0
- package/src/web/components/AgentThreadPanel.tsx +134 -0
- package/src/web/components/AgentsActivitySection.tsx +107 -0
- package/src/web/components/IntercomToolMessage.tsx +64 -0
- package/src/web/components/LaunchAgentDialog.tsx +194 -0
- package/src/web/components/RunControl.tsx +70 -0
- package/src/web/components/SubagentToolMessage.tsx +68 -0
- package/src/web/components/SubagentsPanel.tsx +493 -0
- package/src/web/components/toolRenderers.ts +14 -0
- package/src/web/lib/format.ts +21 -0
- package/src/web/lib/launchCommand.ts +69 -0
- package/src/web/lib/toolText.ts +125 -0
- package/src/web/stores/catalogStore.ts +138 -0
- package/src/web/stores/subagentsStore.ts +146 -0
- package/src/web/tsconfig.json +22 -0
- package/dist/_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.cjs +0 -1
- package/dist/_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.mjs +0 -1
- package/dist/_virtual/_@oxc-project_runtime@0.127.0/helpers/decorateMetadata.cjs +0 -1
- package/dist/_virtual/_@oxc-project_runtime@0.127.0/helpers/decorateMetadata.mjs +0 -1
- package/dist/_virtual/_@oxc-project_runtime@0.127.0/helpers/decorateParam.cjs +0 -1
- package/dist/_virtual/_@oxc-project_runtime@0.127.0/helpers/decorateParam.mjs +0 -1
- package/dist/_virtual/_rolldown/runtime.mjs +0 -1
- package/dist/agents/discovery.cjs +0 -2
- package/dist/agents/discovery.cjs.map +0 -1
- package/dist/agents/discovery.mjs +0 -2
- package/dist/agents/discovery.mjs.map +0 -1
- package/dist/agents/frontmatter.cjs +0 -10
- package/dist/agents/frontmatter.cjs.map +0 -1
- package/dist/agents/frontmatter.mjs +0 -10
- package/dist/agents/frontmatter.mjs.map +0 -1
- package/dist/agents/loader.cjs +0 -2
- package/dist/agents/loader.cjs.map +0 -1
- package/dist/agents/loader.mjs +0 -2
- package/dist/agents/loader.mjs.map +0 -1
- package/dist/agents/memory.cjs +0 -3
- package/dist/agents/memory.cjs.map +0 -1
- package/dist/agents/memory.mjs +0 -3
- package/dist/agents/memory.mjs.map +0 -1
- package/dist/agents/projectRoot.cjs +0 -2
- package/dist/agents/projectRoot.cjs.map +0 -1
- package/dist/agents/projectRoot.mjs +0 -2
- package/dist/agents/projectRoot.mjs.map +0 -1
- package/dist/agents/settings.cjs +0 -2
- package/dist/agents/settings.cjs.map +0 -1
- package/dist/agents/settings.mjs +0 -2
- package/dist/agents/settings.mjs.map +0 -1
- package/dist/agents/skills.cjs +0 -0
- package/dist/agents/skills.cjs.map +0 -1
- package/dist/agents/skills.mjs +0 -5
- package/dist/agents/skills.mjs.map +0 -1
- package/dist/agents/types.d.cts +0 -121
- package/dist/agents/types.d.cts.map +0 -1
- package/dist/agents/types.d.mts +0 -121
- package/dist/agents/types.d.mts.map +0 -1
- package/dist/api/backgroundWork.cjs +0 -1
- package/dist/api/backgroundWork.d.cts +0 -2
- package/dist/api/backgroundWork.d.mts +0 -2
- package/dist/api/backgroundWork.mjs +0 -1
- package/dist/api/capabilityCeiling.cjs +0 -1
- package/dist/api/capabilityCeiling.d.cts +0 -3
- package/dist/api/capabilityCeiling.d.mts +0 -3
- package/dist/api/capabilityCeiling.mjs +0 -2
- package/dist/api/capabilityCeiling.mjs.map +0 -1
- package/dist/api/delegation.cjs +0 -1
- package/dist/api/delegation.d.cts +0 -2
- package/dist/api/delegation.d.mts +0 -2
- package/dist/api/delegation.mjs +0 -1
- package/dist/api/teamSnapshot.cjs +0 -1
- package/dist/api/teamSnapshot.d.cts +0 -2
- package/dist/api/teamSnapshot.d.mts +0 -2
- package/dist/api/teamSnapshot.mjs +0 -2
- package/dist/api/teamSnapshot.mjs.map +0 -1
- package/dist/container/bindOrRebind.cjs +0 -2
- package/dist/container/bindOrRebind.cjs.map +0 -1
- package/dist/container/bindOrRebind.mjs +0 -2
- package/dist/container/bindOrRebind.mjs.map +0 -1
- package/dist/container/globalBridge.cjs +0 -2
- package/dist/container/globalBridge.cjs.map +0 -1
- package/dist/container/globalBridge.d.cts +0 -19
- package/dist/container/globalBridge.d.cts.map +0 -1
- package/dist/container/globalBridge.d.mts +0 -19
- package/dist/container/globalBridge.d.mts.map +0 -1
- package/dist/container/globalBridge.mjs +0 -2
- package/dist/container/globalBridge.mjs.map +0 -1
- package/dist/container/index.cjs +0 -2
- package/dist/container/index.cjs.map +0 -1
- package/dist/container/index.d.cts +0 -38
- package/dist/container/index.d.cts.map +0 -1
- package/dist/container/index.d.mts +0 -38
- package/dist/container/index.d.mts.map +0 -1
- package/dist/container/index.mjs +0 -2
- package/dist/container/index.mjs.map +0 -1
- package/dist/container/modules/agents.cjs +0 -2
- package/dist/container/modules/agents.cjs.map +0 -1
- package/dist/container/modules/agents.d.cts +0 -1
- package/dist/container/modules/agents.d.mts +0 -1
- package/dist/container/modules/agents.mjs +0 -2
- package/dist/container/modules/agents.mjs.map +0 -1
- package/dist/container/modules/core.cjs +0 -2
- package/dist/container/modules/core.cjs.map +0 -1
- package/dist/container/modules/core.d.cts +0 -1
- package/dist/container/modules/core.d.mts +0 -1
- package/dist/container/modules/core.mjs +0 -2
- package/dist/container/modules/core.mjs.map +0 -1
- package/dist/container/modules/extensions.cjs +0 -2
- package/dist/container/modules/extensions.cjs.map +0 -1
- package/dist/container/modules/extensions.mjs +0 -2
- package/dist/container/modules/extensions.mjs.map +0 -1
- package/dist/container/modules/intercom.cjs +0 -2
- package/dist/container/modules/intercom.cjs.map +0 -1
- package/dist/container/modules/intercom.mjs +0 -2
- package/dist/container/modules/intercom.mjs.map +0 -1
- package/dist/container/modules/runs.cjs +0 -2
- package/dist/container/modules/runs.cjs.map +0 -1
- package/dist/container/modules/runs.mjs +0 -2
- package/dist/container/modules/runs.mjs.map +0 -1
- package/dist/container/types.cjs +0 -2
- package/dist/container/types.cjs.map +0 -1
- package/dist/container/types.d.cts +0 -45
- package/dist/container/types.d.cts.map +0 -1
- package/dist/container/types.d.mts +0 -45
- package/dist/container/types.d.mts.map +0 -1
- package/dist/container/types.mjs +0 -2
- package/dist/container/types.mjs.map +0 -1
- package/dist/env.cjs.map +0 -1
- package/dist/env.d.cts.map +0 -1
- package/dist/env.d.mts.map +0 -1
- package/dist/env.mjs.map +0 -1
- package/dist/extension.cjs +0 -2
- package/dist/extension.cjs.map +0 -1
- package/dist/extension.mjs +0 -2
- package/dist/extension.mjs.map +0 -1
- package/dist/extensions/config.cjs +0 -2
- package/dist/extensions/config.cjs.map +0 -1
- package/dist/extensions/config.mjs +0 -2
- package/dist/extensions/config.mjs.map +0 -1
- package/dist/extensions/delegationBridge.cjs +0 -2
- package/dist/extensions/delegationBridge.cjs.map +0 -1
- package/dist/extensions/delegationBridge.mjs +0 -2
- package/dist/extensions/delegationBridge.mjs.map +0 -1
- package/dist/extensions/doom.cjs +0 -2
- package/dist/extensions/doom.cjs.map +0 -1
- package/dist/extensions/doom.d.cts +0 -8
- package/dist/extensions/doom.d.cts.map +0 -1
- package/dist/extensions/doom.d.mts +0 -8
- package/dist/extensions/doom.d.mts.map +0 -1
- package/dist/extensions/doom.mjs +0 -2
- package/dist/extensions/doom.mjs.map +0 -1
- package/dist/extensions/fablePlanBridge.cjs +0 -2
- package/dist/extensions/fablePlanBridge.cjs.map +0 -1
- package/dist/extensions/fablePlanBridge.mjs +0 -2
- package/dist/extensions/fablePlanBridge.mjs.map +0 -1
- package/dist/extensions/managementActions.cjs +0 -2
- package/dist/extensions/managementActions.cjs.map +0 -1
- package/dist/extensions/managementActions.mjs +0 -2
- package/dist/extensions/managementActions.mjs.map +0 -1
- package/dist/extensions/operationJournal.cjs +0 -2
- package/dist/extensions/operationJournal.cjs.map +0 -1
- package/dist/extensions/operationJournal.mjs +0 -2
- package/dist/extensions/operationJournal.mjs.map +0 -1
- package/dist/extensions/orchestratorPrompt.cjs +0 -40
- package/dist/extensions/orchestratorPrompt.cjs.map +0 -1
- package/dist/extensions/orchestratorPrompt.mjs +0 -40
- package/dist/extensions/orchestratorPrompt.mjs.map +0 -1
- package/dist/extensions/schemas.cjs +0 -1
- package/dist/extensions/schemas.mjs +0 -2
- package/dist/extensions/schemas.mjs.map +0 -1
- package/dist/extensions/spawnPlan.cjs +0 -3
- package/dist/extensions/spawnPlan.cjs.map +0 -1
- package/dist/extensions/spawnPlan.mjs +0 -3
- package/dist/extensions/spawnPlan.mjs.map +0 -1
- package/dist/extensions/standard.cjs +0 -2
- package/dist/extensions/standard.cjs.map +0 -1
- package/dist/extensions/standard.d.cts +0 -8
- package/dist/extensions/standard.d.cts.map +0 -1
- package/dist/extensions/standard.d.mts +0 -8
- package/dist/extensions/standard.d.mts.map +0 -1
- package/dist/extensions/standard.mjs +0 -2
- package/dist/extensions/standard.mjs.map +0 -1
- package/dist/extensions/statusViews.cjs +0 -7
- package/dist/extensions/statusViews.cjs.map +0 -1
- package/dist/extensions/statusViews.mjs +0 -7
- package/dist/extensions/statusViews.mjs.map +0 -1
- package/dist/extensions/subagentPromptRuntime.cjs +0 -19
- package/dist/extensions/subagentPromptRuntime.cjs.map +0 -1
- package/dist/extensions/subagentPromptRuntime.d.cts +0 -58
- package/dist/extensions/subagentPromptRuntime.d.cts.map +0 -1
- package/dist/extensions/subagentPromptRuntime.d.mts +0 -58
- package/dist/extensions/subagentPromptRuntime.d.mts.map +0 -1
- package/dist/extensions/subagentPromptRuntime.mjs +0 -19
- package/dist/extensions/subagentPromptRuntime.mjs.map +0 -1
- package/dist/extensions/subagentPromptRuntimeEntry.cjs +0 -2
- package/dist/extensions/subagentPromptRuntimeEntry.cjs.map +0 -1
- package/dist/extensions/subagentPromptRuntimeEntry.d.cts +0 -2
- package/dist/extensions/subagentPromptRuntimeEntry.d.mts +0 -2
- package/dist/extensions/subagentPromptRuntimeEntry.mjs +0 -2
- package/dist/extensions/subagentPromptRuntimeEntry.mjs.map +0 -1
- package/dist/extensions/subagentTool.cjs +0 -6
- package/dist/extensions/subagentTool.cjs.map +0 -1
- package/dist/extensions/subagentTool.mjs +0 -6
- package/dist/extensions/subagentTool.mjs.map +0 -1
- package/dist/extensions/toolDescription.cjs +0 -2
- package/dist/extensions/toolDescription.cjs.map +0 -1
- package/dist/extensions/toolDescription.mjs +0 -2
- package/dist/extensions/toolDescription.mjs.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/intercom/intercomBridge.cjs +0 -2
- package/dist/intercom/intercomBridge.cjs.map +0 -1
- package/dist/intercom/intercomBridge.mjs +0 -2
- package/dist/intercom/intercomBridge.mjs.map +0 -1
- package/dist/intercom/nativeTeamChannel.cjs +0 -5
- package/dist/intercom/nativeTeamChannel.cjs.map +0 -1
- package/dist/intercom/nativeTeamChannel.d.cts +0 -22
- package/dist/intercom/nativeTeamChannel.d.cts.map +0 -1
- package/dist/intercom/nativeTeamChannel.d.mts +0 -22
- package/dist/intercom/nativeTeamChannel.d.mts.map +0 -1
- package/dist/intercom/nativeTeamChannel.mjs +0 -5
- package/dist/intercom/nativeTeamChannel.mjs.map +0 -1
- package/dist/intercom/supervisorControlChannel.cjs +0 -2
- package/dist/intercom/supervisorControlChannel.cjs.map +0 -1
- package/dist/intercom/supervisorControlChannel.mjs +0 -2
- package/dist/intercom/supervisorControlChannel.mjs.map +0 -1
- package/dist/protocol/backgroundWork.cjs +0 -2
- package/dist/protocol/backgroundWork.cjs.map +0 -1
- package/dist/protocol/backgroundWork.d.cts +0 -52
- package/dist/protocol/backgroundWork.d.cts.map +0 -1
- package/dist/protocol/backgroundWork.d.mts +0 -52
- package/dist/protocol/backgroundWork.d.mts.map +0 -1
- package/dist/protocol/backgroundWork.mjs +0 -2
- package/dist/protocol/backgroundWork.mjs.map +0 -1
- package/dist/protocol/capabilityCeiling.cjs +0 -2
- package/dist/protocol/capabilityCeiling.cjs.map +0 -1
- package/dist/protocol/capabilityCeiling.d.cts +0 -51
- package/dist/protocol/capabilityCeiling.d.cts.map +0 -1
- package/dist/protocol/capabilityCeiling.d.mts +0 -51
- package/dist/protocol/capabilityCeiling.d.mts.map +0 -1
- package/dist/protocol/capabilityCeiling.mjs +0 -2
- package/dist/protocol/capabilityCeiling.mjs.map +0 -1
- package/dist/protocol/delegation.cjs.map +0 -1
- package/dist/protocol/delegation.d.cts +0 -269
- package/dist/protocol/delegation.d.cts.map +0 -1
- package/dist/protocol/delegation.d.mts +0 -269
- package/dist/protocol/delegation.d.mts.map +0 -1
- package/dist/protocol/delegation.mjs.map +0 -1
- package/dist/runs/background/asyncExecution.cjs +0 -2
- package/dist/runs/background/asyncExecution.cjs.map +0 -1
- package/dist/runs/background/asyncExecution.mjs +0 -2
- package/dist/runs/background/asyncExecution.mjs.map +0 -1
- package/dist/runs/background/asyncJobTracker.cjs +0 -2
- package/dist/runs/background/asyncJobTracker.cjs.map +0 -1
- package/dist/runs/background/asyncJobTracker.mjs +0 -2
- package/dist/runs/background/asyncJobTracker.mjs.map +0 -1
- package/dist/runs/background/completionBatcher.cjs +0 -2
- package/dist/runs/background/completionBatcher.cjs.map +0 -1
- package/dist/runs/background/completionBatcher.mjs +0 -2
- package/dist/runs/background/completionBatcher.mjs.map +0 -1
- package/dist/runs/background/notify.cjs +0 -4
- package/dist/runs/background/notify.cjs.map +0 -1
- package/dist/runs/background/notify.mjs +0 -4
- package/dist/runs/background/notify.mjs.map +0 -1
- package/dist/runs/background/parentWatchdog.cjs +0 -2
- package/dist/runs/background/parentWatchdog.cjs.map +0 -1
- package/dist/runs/background/parentWatchdog.mjs +0 -2
- package/dist/runs/background/parentWatchdog.mjs.map +0 -1
- package/dist/runs/background/processTerminal.cjs +0 -2
- package/dist/runs/background/processTerminal.cjs.map +0 -1
- package/dist/runs/background/processTerminal.mjs +0 -2
- package/dist/runs/background/processTerminal.mjs.map +0 -1
- package/dist/runs/background/resultWatcher.cjs +0 -2
- package/dist/runs/background/resultWatcher.cjs.map +0 -1
- package/dist/runs/background/resultWatcher.mjs +0 -2
- package/dist/runs/background/resultWatcher.mjs.map +0 -1
- package/dist/runs/background/runIdResolver.cjs +0 -2
- package/dist/runs/background/runIdResolver.cjs.map +0 -1
- package/dist/runs/background/runIdResolver.mjs +0 -2
- package/dist/runs/background/runIdResolver.mjs.map +0 -1
- package/dist/runs/background/runnerBootstrap.cjs +0 -2
- package/dist/runs/background/runnerBootstrap.cjs.map +0 -1
- package/dist/runs/background/runnerBootstrap.mjs +0 -2
- package/dist/runs/background/runnerBootstrap.mjs.map +0 -1
- package/dist/runs/background/runnerExecution.cjs +0 -2
- package/dist/runs/background/runnerExecution.cjs.map +0 -1
- package/dist/runs/background/runnerExecution.mjs +0 -2
- package/dist/runs/background/runnerExecution.mjs.map +0 -1
- package/dist/runs/background/runnerReporting.cjs +0 -3
- package/dist/runs/background/runnerReporting.cjs.map +0 -1
- package/dist/runs/background/runnerReporting.mjs +0 -3
- package/dist/runs/background/runnerReporting.mjs.map +0 -1
- package/dist/runs/background/runnerTeamMembership.cjs +0 -2
- package/dist/runs/background/runnerTeamMembership.cjs.map +0 -1
- package/dist/runs/background/runnerTeamMembership.mjs +0 -2
- package/dist/runs/background/runnerTeamMembership.mjs.map +0 -1
- package/dist/runs/background/spawnHandshake.cjs +0 -2
- package/dist/runs/background/spawnHandshake.cjs.map +0 -1
- package/dist/runs/background/spawnHandshake.mjs +0 -2
- package/dist/runs/background/spawnHandshake.mjs.map +0 -1
- package/dist/runs/background/staleRunReconciler.cjs +0 -2
- package/dist/runs/background/staleRunReconciler.cjs.map +0 -1
- package/dist/runs/background/staleRunReconciler.mjs +0 -2
- package/dist/runs/background/staleRunReconciler.mjs.map +0 -1
- package/dist/runs/background/statusReader.cjs +0 -2
- package/dist/runs/background/statusReader.cjs.map +0 -1
- package/dist/runs/background/statusReader.mjs +0 -2
- package/dist/runs/background/statusReader.mjs.map +0 -1
- package/dist/runs/background/statusWriter.cjs +0 -2
- package/dist/runs/background/statusWriter.cjs.map +0 -1
- package/dist/runs/background/statusWriter.mjs +0 -2
- package/dist/runs/background/statusWriter.mjs.map +0 -1
- package/dist/runs/background/subagentWait.cjs +0 -2
- package/dist/runs/background/subagentWait.cjs.map +0 -1
- package/dist/runs/background/subagentWait.mjs +0 -2
- package/dist/runs/background/subagentWait.mjs.map +0 -1
- package/dist/runs/background/terminalPersistence.cjs +0 -2
- package/dist/runs/background/terminalPersistence.cjs.map +0 -1
- package/dist/runs/background/terminalPersistence.mjs +0 -2
- package/dist/runs/background/terminalPersistence.mjs.map +0 -1
- package/dist/runs/registry/processGroup.cjs +0 -2
- package/dist/runs/registry/processGroup.cjs.map +0 -1
- package/dist/runs/registry/processGroup.mjs +0 -2
- package/dist/runs/registry/processGroup.mjs.map +0 -1
- package/dist/runs/registry/runRegistry.cjs +0 -2
- package/dist/runs/registry/runRegistry.cjs.map +0 -1
- package/dist/runs/registry/runRegistry.mjs +0 -2
- package/dist/runs/registry/runRegistry.mjs.map +0 -1
- package/dist/runs/registry/sessionLifecycle.cjs +0 -2
- package/dist/runs/registry/sessionLifecycle.cjs.map +0 -1
- package/dist/runs/registry/sessionLifecycle.mjs +0 -2
- package/dist/runs/registry/sessionLifecycle.mjs.map +0 -1
- package/dist/runs/registry/suspendedRuns.cjs +0 -4
- package/dist/runs/registry/suspendedRuns.cjs.map +0 -1
- package/dist/runs/registry/suspendedRuns.mjs +0 -4
- package/dist/runs/registry/suspendedRuns.mjs.map +0 -1
- package/dist/runs/sdkRunnerEntry.cjs +0 -2
- package/dist/runs/sdkRunnerEntry.cjs.map +0 -1
- package/dist/runs/sdkRunnerEntry.d.cts +0 -1
- package/dist/runs/sdkRunnerEntry.d.mts +0 -1
- package/dist/runs/sdkRunnerEntry.mjs +0 -2
- package/dist/runs/sdkRunnerEntry.mjs.map +0 -1
- package/dist/runs/shared/claudeFableProfile.cjs +0 -4
- package/dist/runs/shared/claudeFableProfile.cjs.map +0 -1
- package/dist/runs/shared/claudeFableProfile.mjs +0 -4
- package/dist/runs/shared/claudeFableProfile.mjs.map +0 -1
- package/dist/runs/shared/depthGuard.cjs +0 -2
- package/dist/runs/shared/depthGuard.cjs.map +0 -1
- package/dist/runs/shared/depthGuard.mjs +0 -2
- package/dist/runs/shared/depthGuard.mjs.map +0 -1
- package/dist/runs/shared/mcpDirectToolAllowlist.cjs +0 -2
- package/dist/runs/shared/mcpDirectToolAllowlist.cjs.map +0 -1
- package/dist/runs/shared/mcpDirectToolAllowlist.mjs +0 -2
- package/dist/runs/shared/mcpDirectToolAllowlist.mjs.map +0 -1
- package/dist/runs/shared/modelFallback.cjs +0 -2
- package/dist/runs/shared/modelFallback.cjs.map +0 -1
- package/dist/runs/shared/modelFallback.mjs +0 -2
- package/dist/runs/shared/modelFallback.mjs.map +0 -1
- package/dist/runs/shared/modelScope.cjs +0 -2
- package/dist/runs/shared/modelScope.cjs.map +0 -1
- package/dist/runs/shared/modelScope.mjs +0 -2
- package/dist/runs/shared/modelScope.mjs.map +0 -1
- package/dist/runs/shared/nestedPath.cjs +0 -2
- package/dist/runs/shared/nestedPath.cjs.map +0 -1
- package/dist/runs/shared/nestedPath.mjs +0 -2
- package/dist/runs/shared/nestedPath.mjs.map +0 -1
- package/dist/runs/shared/piArgs.cjs +0 -2
- package/dist/runs/shared/piArgs.cjs.map +0 -1
- package/dist/runs/shared/piArgs.mjs +0 -2
- package/dist/runs/shared/piArgs.mjs.map +0 -1
- package/dist/runs/shared/piSpawn.cjs +0 -2
- package/dist/runs/shared/piSpawn.cjs.map +0 -1
- package/dist/runs/shared/piSpawn.mjs +0 -2
- package/dist/runs/shared/piSpawn.mjs.map +0 -1
- package/dist/runs/shared/runWithConcurrency.cjs +0 -2
- package/dist/runs/shared/runWithConcurrency.cjs.map +0 -1
- package/dist/runs/shared/runWithConcurrency.mjs +0 -2
- package/dist/runs/shared/runWithConcurrency.mjs.map +0 -1
- package/dist/runs/shared/runtimeRegistry.cjs +0 -2
- package/dist/runs/shared/runtimeRegistry.cjs.map +0 -1
- package/dist/runs/shared/runtimeRegistry.mjs +0 -2
- package/dist/runs/shared/runtimeRegistry.mjs.map +0 -1
- package/dist/runs/shared/structuredOutput.cjs +0 -2
- package/dist/runs/shared/structuredOutput.cjs.map +0 -1
- package/dist/runs/shared/structuredOutput.mjs +0 -2
- package/dist/runs/shared/structuredOutput.mjs.map +0 -1
- package/dist/runs/shared/toolAvailability.cjs +0 -2
- package/dist/runs/shared/toolAvailability.cjs.map +0 -1
- package/dist/runs/shared/toolAvailability.mjs +0 -2
- package/dist/runs/shared/toolAvailability.mjs.map +0 -1
- package/dist/runs/shared/toolBudget.cjs +0 -2
- package/dist/runs/shared/toolBudget.cjs.map +0 -1
- package/dist/runs/shared/toolBudget.mjs +0 -2
- package/dist/runs/shared/toolBudget.mjs.map +0 -1
- package/dist/shared/artifacts.cjs +0 -2
- package/dist/shared/artifacts.cjs.map +0 -1
- package/dist/shared/artifacts.mjs +0 -2
- package/dist/shared/artifacts.mjs.map +0 -1
- package/dist/shared/atomicJson.cjs +0 -2
- package/dist/shared/atomicJson.cjs.map +0 -1
- package/dist/shared/atomicJson.mjs +0 -2
- package/dist/shared/atomicJson.mjs.map +0 -1
- package/dist/shared/boundedKeySet.cjs +0 -2
- package/dist/shared/boundedKeySet.cjs.map +0 -1
- package/dist/shared/boundedKeySet.mjs +0 -2
- package/dist/shared/boundedKeySet.mjs.map +0 -1
- package/dist/shared/childTranscript.cjs +0 -5
- package/dist/shared/childTranscript.cjs.map +0 -1
- package/dist/shared/childTranscript.mjs +0 -5
- package/dist/shared/childTranscript.mjs.map +0 -1
- package/dist/shared/configDir.cjs +0 -2
- package/dist/shared/configDir.cjs.map +0 -1
- package/dist/shared/configDir.mjs +0 -2
- package/dist/shared/configDir.mjs.map +0 -1
- package/dist/shared/errors.cjs +0 -2
- package/dist/shared/errors.cjs.map +0 -1
- package/dist/shared/errors.mjs +0 -2
- package/dist/shared/errors.mjs.map +0 -1
- package/dist/shared/fileSystemRetry.cjs +0 -2
- package/dist/shared/fileSystemRetry.cjs.map +0 -1
- package/dist/shared/fileSystemRetry.mjs +0 -2
- package/dist/shared/fileSystemRetry.mjs.map +0 -1
- package/dist/shared/formatters.cjs +0 -2
- package/dist/shared/formatters.cjs.map +0 -1
- package/dist/shared/formatters.mjs +0 -2
- package/dist/shared/formatters.mjs.map +0 -1
- package/dist/shared/lruCache.cjs +0 -2
- package/dist/shared/lruCache.cjs.map +0 -1
- package/dist/shared/lruCache.mjs +0 -2
- package/dist/shared/lruCache.mjs.map +0 -1
- package/dist/shared/modelInfo.cjs +0 -2
- package/dist/shared/modelInfo.cjs.map +0 -1
- package/dist/shared/modelInfo.mjs +0 -2
- package/dist/shared/modelInfo.mjs.map +0 -1
- package/dist/shared/modelResolution.cjs +0 -2
- package/dist/shared/modelResolution.cjs.map +0 -1
- package/dist/shared/modelResolution.mjs +0 -2
- package/dist/shared/modelResolution.mjs.map +0 -1
- package/dist/shared/paths.cjs +0 -2
- package/dist/shared/paths.cjs.map +0 -1
- package/dist/shared/paths.mjs +0 -2
- package/dist/shared/paths.mjs.map +0 -1
- package/dist/shared/pollScheduler.cjs +0 -2
- package/dist/shared/pollScheduler.cjs.map +0 -1
- package/dist/shared/pollScheduler.mjs +0 -2
- package/dist/shared/pollScheduler.mjs.map +0 -1
- package/dist/shared/scopeOwner.cjs +0 -2
- package/dist/shared/scopeOwner.cjs.map +0 -1
- package/dist/shared/scopeOwner.mjs +0 -2
- package/dist/shared/scopeOwner.mjs.map +0 -1
- package/dist/shared/versioned.cjs +0 -2
- package/dist/shared/versioned.cjs.map +0 -1
- package/dist/shared/versioned.mjs +0 -2
- package/dist/shared/versioned.mjs.map +0 -1
- package/dist/slash/chainExpression.cjs +0 -2
- package/dist/slash/chainExpression.cjs.map +0 -1
- package/dist/slash/chainExpression.mjs +0 -2
- package/dist/slash/chainExpression.mjs.map +0 -1
- package/dist/slash/doctor.cjs +0 -5
- package/dist/slash/doctor.cjs.map +0 -1
- package/dist/slash/doctor.mjs +0 -5
- package/dist/slash/doctor.mjs.map +0 -1
- package/dist/slash/slashCommands.cjs +0 -4
- package/dist/slash/slashCommands.cjs.map +0 -1
- package/dist/slash/slashCommands.mjs +0 -4
- package/dist/slash/slashCommands.mjs.map +0 -1
- package/dist/slash/spawnRequestMapping.cjs +0 -2
- package/dist/slash/spawnRequestMapping.cjs.map +0 -1
- package/dist/slash/spawnRequestMapping.mjs +0 -2
- package/dist/slash/spawnRequestMapping.mjs.map +0 -1
- package/dist/slash/subagentLaunch.cjs +0 -2
- package/dist/slash/subagentLaunch.cjs.map +0 -1
- package/dist/slash/subagentLaunch.mjs +0 -2
- package/dist/slash/subagentLaunch.mjs.map +0 -1
- package/dist/tui/register.cjs +0 -2
- package/dist/tui/register.cjs.map +0 -1
- package/dist/tui/register.mjs +0 -2
- package/dist/tui/register.mjs.map +0 -1
- package/dist/types.d.cts +0 -59
- package/dist/types.d.cts.map +0 -1
- package/dist/types.d.mts +0 -59
- package/dist/types.d.mts.map +0 -1
- /package/dist/{protocol → schemas/team}/delegation.cjs +0 -0
- /package/dist/{protocol → schemas/team}/delegation.mjs +0 -0
package/README.md
CHANGED
|
@@ -1,46 +1,142 @@
|
|
|
1
1
|
# @agimon-ai/doompi-team
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Discover agents, run them in the background, exchange messages, and enforce model and tool policy.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
parallel, with peer messaging and a model policy per layer.
|
|
5
|
+
Part of the [DoomPi distribution](https://www.npmjs.com/package/@agimon-ai/doompi).
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
installed on its own.
|
|
7
|
+
Team does not own Task's graph. When both packages are loaded, Team fulfills Task delegation
|
|
8
|
+
requests while Task remains the source of truth for task status and dependencies.
|
|
11
9
|
|
|
12
|
-
|
|
10
|
+
> **Alpha:** run, policy, and intercom contracts may change between releases.
|
|
13
11
|
|
|
14
|
-
|
|
15
|
-
npm install @agimon-ai/doompi-team
|
|
16
|
-
```
|
|
12
|
+
## Requirements
|
|
17
13
|
|
|
18
|
-
|
|
14
|
+
- Node.js 22.19.0 or newer
|
|
15
|
+
- `@earendil-works/pi-agent-core`, `@earendil-works/pi-ai`,
|
|
16
|
+
`@earendil-works/pi-coding-agent`, and `@earendil-works/pi-tui` 0.85.0
|
|
17
|
+
|
|
18
|
+
## Install
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Define a layer and select it in `.doom/modes.yaml`. Add Task separately for graph-backed delegation:
|
|
21
21
|
|
|
22
22
|
```yaml
|
|
23
23
|
layers:
|
|
24
|
-
|
|
25
|
-
packages:
|
|
24
|
+
coordination:
|
|
25
|
+
packages:
|
|
26
|
+
- '@agimon-ai/doompi-task'
|
|
27
|
+
- name: '@agimon-ai/doompi-team'
|
|
28
|
+
config:
|
|
29
|
+
models:
|
|
30
|
+
- model: provider/model-id
|
|
31
|
+
thinking: high
|
|
32
|
+
excludeTools: [ask_user_question]
|
|
26
33
|
|
|
27
34
|
majorMode:
|
|
28
|
-
|
|
35
|
+
development:
|
|
36
|
+
description: Development with tasks and delegated agents.
|
|
37
|
+
layers: [coordination]
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
For Team without Task in standalone Pi:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
pi install npm:@agimon-ai/doompi-team
|
|
29
44
|
```
|
|
30
45
|
|
|
31
|
-
|
|
46
|
+
Team-only sessions can launch and manage agents directly; they simply have no Task-owned graph to
|
|
47
|
+
update.
|
|
48
|
+
|
|
49
|
+
## Commands and tools
|
|
50
|
+
|
|
51
|
+
Slash commands include:
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
/run
|
|
55
|
+
/parallel
|
|
56
|
+
/subagents-doctor
|
|
57
|
+
/subagents-steer <run-id> <message>
|
|
58
|
+
/subagents-stop
|
|
59
|
+
/subagents-list
|
|
60
|
+
/subagents-fleet
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Use `/run` for one agent and `/parallel` for several. `/subagents-doctor` reports diagnostics,
|
|
64
|
+
`/subagents-steer` sends guidance to a running agent, and `/subagents-stop` requests a stop.
|
|
65
|
+
`/subagents-list` shows available agents, and `/subagents-fleet` shows current runs.
|
|
66
|
+
|
|
67
|
+
The `subagent` tool exposes `agents`, `run`, `status`, `steer`, `stop`, `suspended`, and `restore`.
|
|
68
|
+
The `intercom` tool exposes `members`, `send`, `ask`, `pending`, and `reply`.
|
|
69
|
+
|
|
70
|
+
Use `SPC a l` to browse agents and `SPC a r` to inspect current-session runs. TUI views require an
|
|
71
|
+
interactive host; tools and commands support headless orchestration.
|
|
72
|
+
|
|
73
|
+
## Run lifecycle
|
|
32
74
|
|
|
33
|
-
|
|
75
|
+
Runs are asynchronous. The parent receives a run identifier and later completion or failure rather
|
|
76
|
+
than an inline child transcript. A shutdown requests suspension and writes restorable state. A later
|
|
77
|
+
session can list suspended work and explicitly restore it. Reopening does not automatically restart
|
|
78
|
+
children, and Team does not promise that every run continues after its parent exits.
|
|
34
79
|
|
|
35
|
-
|
|
80
|
+
The root session scopes run results, transcripts, control inboxes, membership, intercom, and
|
|
81
|
+
suspended records. State is stored in private, per-user temporary directories with per-session
|
|
82
|
+
subdirectories. Suspended records are recoverable only while those temporary files remain. Launch
|
|
83
|
+
contracts can contain full prompts and are written with private permissions, then removed after
|
|
84
|
+
handoff. Intercom messages expire after 24 hours; liveness checks remove stale membership and run
|
|
85
|
+
state.
|
|
36
86
|
|
|
37
|
-
|
|
38
|
-
them, so each one gets a harness state file of its own.
|
|
87
|
+
## Model and tool policy
|
|
39
88
|
|
|
40
|
-
|
|
89
|
+
Package configuration belongs on the Team package entry. When several selected entries contribute
|
|
90
|
+
configuration, later entries replace the `models` list and `excludeTools` values are combined in
|
|
91
|
+
layer order.
|
|
41
92
|
|
|
42
|
-
|
|
93
|
+
Agent configuration, explicit launch options, Team policy, and provider availability determine the
|
|
94
|
+
final model and tools. A child cannot exceed the capability ceiling supplied by its parent or
|
|
95
|
+
provider policy. Allowed MCP and stdio tools can execute commands, so treat agent definitions and
|
|
96
|
+
the inherited environment as trusted configuration.
|
|
97
|
+
|
|
98
|
+
## Task delegation bridge
|
|
99
|
+
|
|
100
|
+
With Task installed:
|
|
101
|
+
|
|
102
|
+
1. Task selects a pending, unblocked task and sends a delegation request.
|
|
103
|
+
2. Team resolves the named agent, context, model, skills, and capability policy.
|
|
104
|
+
3. Team owns the background run, messaging, steering, and suspension.
|
|
105
|
+
4. Task records the terminal result on its own task.
|
|
106
|
+
|
|
107
|
+
This is a named Cordis service relationship, not shared persistence. Team provides
|
|
108
|
+
`doom/delegation`, `doom/background-work`, `doom/subagent-policy`, and `doom/fable-plan` for the
|
|
109
|
+
active session. Consumers disconnect and reconnect automatically when that provider changes.
|
|
110
|
+
|
|
111
|
+
## Public API
|
|
112
|
+
|
|
113
|
+
```ts
|
|
114
|
+
import { resolveSubagentLaunchContract } from '@agimon-ai/doompi-team';
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Focused subpaths include `/api/capability-ceiling`, `/api/delegation`, `/api/team-snapshot`,
|
|
118
|
+
and `/env`. Live cross-extension collaboration contracts come from
|
|
119
|
+
`@agimon-ai/doompi-core`; Pi loads `/extensions/pi` through package metadata.
|
|
120
|
+
|
|
121
|
+
## Development
|
|
122
|
+
|
|
123
|
+
Run from this package directory in the workspace:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
pnpm build
|
|
127
|
+
pnpm typecheck
|
|
128
|
+
pnpm test
|
|
129
|
+
pnpm lint
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Maintained by [Agimon](https://agimon.ai/about).
|
|
43
133
|
|
|
44
134
|
## License
|
|
45
135
|
|
|
46
136
|
MIT
|
|
137
|
+
|
|
138
|
+
## Source and lifecycle
|
|
139
|
+
|
|
140
|
+
`src/extensions/pi.ts`, `server.ts`, and `web.ts` are the host entries. They compose controllers, native tool declarations, and named services. Controllers coordinate services and models; TUI rendering stays in `src/tui`. Public capabilities live in flat `src/exports` files and build separately from host entries.
|
|
141
|
+
|
|
142
|
+
The Pi and server helpers own contribution registration and disposal. Team's collaboration service replaces session fibers explicitly, uses the injected session only when its session manager matches, and otherwise mounts in the standalone plugin context. Losing that injected session disposes its collaboration fiber.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));exports.__toESM=s;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./schemas/apiContracts.cjs");exports.apiContracts=e.apiContracts,exports.default=e.apiContracts;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{apiContracts as e}from"./schemas/apiContracts.mjs";export{e as apiContracts,e as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./types/environment.cjs"),t=require("./schemas/team/capabilityCeiling.cjs");exports.SUBAGENT_CAPABILITY_CEILING_ENV=e.SUBAGENT_CAPABILITY_CEILING_ENV,exports.SUBAGENT_CAPABILITY_CEILING_VERSION=t.SUBAGENT_CAPABILITY_CEILING_VERSION,exports.SubagentCapabilityPolicyStore=t.SubagentCapabilityPolicyStore,exports.decodeSubagentCapabilityCeiling=t.decodeSubagentCapabilityCeiling,exports.encodeSubagentCapabilityCeiling=t.encodeSubagentCapabilityCeiling,exports.intersectSubagentCapabilityCeilings=t.intersectSubagentCapabilityCeilings,exports.parseSubagentCapabilityCeiling=t.parseSubagentCapabilityCeiling;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { SUBAGENT_CAPABILITY_CEILING_ENV } from "./types/environment.cjs";
|
|
2
|
+
import { ResolvedSubagentCapabilityCeiling, SUBAGENT_CAPABILITY_CEILING_VERSION, SubagentCapabilityAudit, SubagentCapabilityCeiling, SubagentCapabilityPolicyStore, decodeSubagentCapabilityCeiling, encodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, parseSubagentCapabilityCeiling } from "./schemas/team/capabilityCeiling.cjs";
|
|
3
|
+
export { ResolvedSubagentCapabilityCeiling, SUBAGENT_CAPABILITY_CEILING_ENV, SUBAGENT_CAPABILITY_CEILING_VERSION, SubagentCapabilityAudit, SubagentCapabilityCeiling, SubagentCapabilityPolicyStore, decodeSubagentCapabilityCeiling, encodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, parseSubagentCapabilityCeiling };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { SUBAGENT_CAPABILITY_CEILING_ENV } from "./types/environment.mjs";
|
|
2
|
+
import { ResolvedSubagentCapabilityCeiling, SUBAGENT_CAPABILITY_CEILING_VERSION, SubagentCapabilityAudit, SubagentCapabilityCeiling, SubagentCapabilityPolicyStore, decodeSubagentCapabilityCeiling, encodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, parseSubagentCapabilityCeiling } from "./schemas/team/capabilityCeiling.mjs";
|
|
3
|
+
export { ResolvedSubagentCapabilityCeiling, SUBAGENT_CAPABILITY_CEILING_ENV, SUBAGENT_CAPABILITY_CEILING_VERSION, SubagentCapabilityAudit, SubagentCapabilityCeiling, SubagentCapabilityPolicyStore, decodeSubagentCapabilityCeiling, encodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, parseSubagentCapabilityCeiling };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{SUBAGENT_CAPABILITY_CEILING_ENV as e}from"./types/environment.mjs";import{SUBAGENT_CAPABILITY_CEILING_VERSION as t,SubagentCapabilityPolicyStore as n,decodeSubagentCapabilityCeiling as r,encodeSubagentCapabilityCeiling as i,intersectSubagentCapabilityCeilings as a,parseSubagentCapabilityCeiling as o}from"./schemas/team/capabilityCeiling.mjs";export{e as SUBAGENT_CAPABILITY_CEILING_ENV,t as SUBAGENT_CAPABILITY_CEILING_VERSION,n as SubagentCapabilityPolicyStore,r as decodeSubagentCapabilityCeiling,i as encodeSubagentCapabilityCeiling,a as intersectSubagentCapabilityCeilings,o as parseSubagentCapabilityCeiling};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team.cjs","names":[],"sources":["../../src/constants/team.ts"],"sourcesContent":["export const SUBAGENT_SAFETY_GUIDANCE =\n 'Give every child a self-contained task; coordination and further delegation depend on the Team package policy.';\n"],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team.mjs","names":[],"sources":["../../src/constants/team.ts"],"sourcesContent":["export const SUBAGENT_SAFETY_GUIDANCE =\n 'Give every child a self-contained task; coordination and further delegation depend on the Team package policy.';\n"],"mappings":"AAAA,MAAa,EACX"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
const e=require("../services/asyncJobTracker/index.cjs"),t=require("../services/chainExpression/index.cjs"),n=require("../services/sessionPaths/index.cjs"),r=require("../services/doctor/index.cjs"),i=require("../services/modelResolution/index.cjs"),a=require("../services/modelFallback/index.cjs"),o=require("../services/spawnPlan/index.cjs"),s=require("../services/spawnRequestMapping/index.cjs"),c=require("../services/subagentLaunch/index.cjs"),l=require("../models/slashResult.cjs");let u=require("@agimon-ai/doompi-core/child-process");function d(e,t){return n.createSessionScope((0,u.resolveRootSessionId)(e.sessionManager.getSessionId(),t))}function f(e,t,n){e.sendMessage({customType:l.SLASH_RESULT_CUSTOM_TYPE,content:t,display:!0,...n?{details:n}:{}})}function p(e,t){e.hasUI&&e.ui.setStatus(`subagent-slash`,t)}function m(e,t){e.ui.notify(t,`error`)}function h(e,t){e.ui.notify(t,`info`)}function g(e){return e?e.attentionReason?`${e.status??`running`} - needs attention: ${e.attentionReason}`:e.activityState?`${e.status??`running`} - ${e.activityState}`:e.status??`running`:`starting…`}function _(t,n,r,i,a,o){c.watchTrackedRunUntilTerminal(r.scheduler,i,a,r=>{if(p(n,`${o} (${a}): ${g(r)}`),r?.status===void 0||!e.TERMINAL_ASYNC_JOB_STATES.has(r.status))return;p(n,void 0);let i=r.status===`complete`||r.status===`completed`?`completed`:r.status;f(t,r.error?`## Subagent ${i}\n\n${o} (${a})\n\n${r.error}`:`## Subagent ${i}\n\n${o} (${a})`,[{agent:o,runId:a,status:i,...r.error?{error:r.error}:{}}])})}function v(e,t,n,r,i){let a=i.outcomes.filter(e=>e.runId),o=i.outcomes.filter(e=>!e.runId);if(a.length>0){f(e,`## Subagent started\n\n${a.map(e=>`${e.agent} (${e.runId})${e.warning?`\n Warning: ${e.warning}`:``}`).join(`, `)}`,a.map(e=>({agent:e.agent,runId:e.runId??``,status:`started`,...e.warning?{warning:e.warning}:{}}))),p(t,`${a.length} run${a.length===1?``:`s`} started…`);for(let i of a)i.runId&&_(e,t,n,r,i.runId,i.agent)}o.length>0&&m(t,`Some subagents failed to start:\n${o.map(e=>`${e.agent}: ${e.error??`spawn failed`}`).join(`
|
|
2
|
+
`)}`)}function y(e,t){if(e.baseCwd)return e.baseCwd;m(t,`Subagent session cwd is not initialized yet`)}function b(e,t,n,r){return e.discovery.discover(t,`both`).agents.find(e=>e.name===n)?!0:(m(r,`Unknown agent: ${n}`),!1)}async function x(e,n,r,l,u){let f=r.baseCwd;if(!f)return{ok:!1,message:`Subagent session cwd is not initialized yet`};if(!l.discovery.discover(f,`both`).agents.find(e=>e.name===u.agent))return{ok:!1,message:`Unknown agent: ${u.agent}`};let p=d(n,l.environment),m=l.tracker.forSession(n.sessionManager.getSessionId(),p);try{let t=o.captureSessionForkSource(n.sessionManager,`settled`),r=a.normalizeParentModel(n.model),d=s.taskInputFromParsedStep({name:u.agent,config:u.config??{},task:u.task},f,u.fork?`fork`:void 0),h=await c.launchSingleSubagent(l.spawnPlanner,m,{agent:d.agent,task:d.task??``,cwd:d.cwd??f,agentScope:`both`,sessionScope:p,parentSessionId:n.sessionManager.getSessionId(),...d.model?{model:d.model}:{},...d.context?{context:d.context}:{},...t?{parentForkSource:t.terminalSource,...t.sessionFile?{parentSessionFile:t.sessionFile}:{},parentLeafId:t.leafId}:{},availableModels:i.authenticatedModelInfos(n.modelRegistry),...r?{parentModel:r}:{}},l.loadConfig());return v(e,n,l,m,h),{ok:!0,result:h}}catch(e){if(e instanceof s.UnsupportedInlineConfigError||e instanceof t.SlashParseError)return{ok:!1,message:e.message};throw e}}function S(e,t,n,r,i){x(e,t,n,r,i).then(e=>{e.ok||m(t,e.message)},e=>{m(t,`Subagent launch failed: ${e instanceof Error?e.message:String(e)}`)})}function C(e,n){if(n instanceof s.UnsupportedInlineConfigError||n instanceof t.SlashParseError){m(e,n.message);return}throw n}function w(e){let n=e.trim();if(n.includes(` -> `)){let e=n.split(` -> `).map(e=>e.trim()).filter(Boolean).map(e=>t.parseSingleTaskToken(e));return e.length===0?void 0:{steps:e,task:e.find(e=>e.task)?.task??``,perStep:!0}}let r=n.indexOf(` -- `);if(r===-1)return;let i=n.slice(0,r).trim(),a=n.slice(r+4).trim();if(!i||!a)return;let o=i.split(/\s+/).filter(Boolean).map(e=>t.parseSingleTaskToken(e));if(o.length!==0)return{steps:o,task:a,perStep:!1}}function T(n,l,u){return[[`run`,{description:`Run a subagent in the background: /run agent[model=x] [task] [--fork]`,handler:async(e,r)=>{let{args:i,fork:a}=t.extractForkFlag(e),o=i.trim();if(!o){m(r,`Usage: /run <agent> [task] [--fork]`);return}let s=o.indexOf(` `),{name:c,config:d}=t.parseAgentToken(s===-1?o:o.slice(0,s)),f=await x(n,r,l,u,{agent:c,task:s===-1?``:o.slice(s+1).trim(),config:d,fork:a});f.ok||m(r,f.message)}}],[`parallel`,{description:`Run agents in parallel: /parallel scout "task1" -> reviewer "task2" [--fork]`,handler:async(e,r)=>{let f=d(r,u.environment),p=u.tracker.forSession(r.sessionManager.getSessionId(),f),{args:h,fork:g}=t.extractForkFlag(e),_=y(l,r);if(!_)return;let x=w(h);if(!x){m(r,`Usage: /parallel agent1 "task1" -> agent2 "task2"`);return}for(let e of x.steps)if(!b(u,_,e.name,r))return;if(!x.steps.some(e=>e.task)&&!x.task){m(r,`At least one step must have a task`);return}try{let e=o.captureSessionForkSource(r.sessionManager,`settled`),t=a.normalizeParentModel(r.model),l=x.steps.map(e=>s.taskInputFromParsedStep({name:e.name,config:e.config,task:e.task??x.task},_,g?`fork`:void 0));v(n,r,u,p,await c.launchParallelSubagents(u.spawnPlanner,p,{tasks:l,cwd:_,agentScope:`both`,sessionScope:f,parentSessionId:r.sessionManager.getSessionId(),...e?{parentForkSource:e.terminalSource,...e.sessionFile?{parentSessionFile:e.sessionFile}:{},parentLeafId:e.leafId}:{},availableModels:i.authenticatedModelInfos(r.modelRegistry),...t?{parentModel:t}:{}},u.loadConfig()))}catch(e){C(r,e)}}}],[`subagents-doctor`,{description:`Show subagent diagnostics`,handler:async(e,t)=>{f(n,r.buildDoctorReport({cwd:t.cwd,agentScope:`both`,scope:d(t,u.environment)},{discovery:u.discovery,skills:u.skills}))}}],[`subagents-steer`,{description:`Send guidance to a running subagent: /subagents-steer <run-id> <message>`,handler:async(e,t)=>{let n=e.trim(),r=n.search(/\s/);if(r===-1||!n.slice(r+1).trim()){m(t,`Usage: /subagents-steer <run-id> <message>`);return}let i=n.slice(0,r),a=n.slice(r+1).trim();try{u.management.bindSessionScope(d(t,u.environment));let e=await u.management.steer(i,a),n=`Steering ${e.state} for ${i}: ${e.message}`;e.state===`failed`?m(t,n):h(t,n)}catch(e){m(t,e instanceof Error?e.message:`Could not steer '${i}'.`)}}}],[`subagents-stop`,{description:`Stop a running subagent: /subagents-stop [run-id]`,handler:async(t,r)=>{let i=d(r,u.environment);u.management.bindSessionScope(i);let a=u.tracker.forSession(r.sessionManager.getSessionId(),i),o=t.trim();if(!o){f(n,E(a.list()));return}try{await u.management.stop(e.resolveTrackedRunId(a,o)),h(r,`Stop requested for ${o}. The run reports its own final state once it acknowledges.`)}catch(e){m(r,e instanceof Error?e.message:`Could not stop '${o}'.`)}}}]]}function E(e){let t=e.filter(e=>e.status===`running`||e.status===`pending`);return t.length===0?`No running subagents to stop.`:[`Running subagents:`,...t.map(e=>`- ${e.runId}${e.status?` (${e.status})`:``}`),``,"Stop one with `/subagents-stop <run-id>`, or open `/subagents-fleet` to inspect and control them interactively."].join(`
|
|
3
|
+
`)}exports.createSlashCommands=T,exports.launchSingleAgentRun=x,exports.startSingleAgentRun=S;
|
|
4
|
+
//# sourceMappingURL=slashCommands.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slashCommands.cjs","names":["createSessionScope","resolveRootSessionId","SLASH_RESULT_CUSTOM_TYPE","TERMINAL_ASYNC_JOB_STATES","captureSessionForkSource","normalizeParentModel","taskInputFromParsedStep","launchSingleSubagent","authenticatedModelInfos","UnsupportedInlineConfigError","SlashParseError","parseSingleTaskToken","extractForkFlag","parseAgentToken","launchParallelSubagents","buildDoctorReport","resolveTrackedRunId"],"sources":["../../src/controllers/slashCommands.ts"],"sourcesContent":["/**\n * The core `/run`, `/chain`, `/parallel` slash commands. Replaces the\n * always-blocking predecessor with the async-only shape this port settled\n * on: a command launches a spawn, sends an initial status message, and\n * hands off to `watchTrackedRunUntilTerminal` (render-key gated, backed by\n * `PollScheduler`) to update the status bar and finalize the message once\n * the run reaches a terminal state - never by awaiting completion. See\n * `subagentLaunch.ts`'s module doc for the full reasoning.\n *\n * WHAT IS NOT HERE, AND WHY:\n * - `/run-chain`, `/prompt-workflow` and `/chain-prompts`: the whole SAVED\n * work surface - saved agent pipelines (`ChainConfig`, never ported) and\n * saved `.md` prompt templates (ported, then deleted). REMOVED BY\n * DECISION, not deferred: overly complicated for the use they were\n * getting. Do not re-add them because a reader notices the predecessor had\n * them. Ad-hoc chaining (`/chain scout \"x\" -> planner`) is a different\n * feature, lives in `chainExpression.ts`, and stays\n * - `/subagent-cost`: REMOVED BY DECISION. It reads usage/cost data\n * (`totalTokens`/`totalCost`) that nothing in this package's\n * runs/extensions surface tracks - a genuinely absent data source, and\n * building it would mean threading usage out of every child process\n * - `/subagents-check-profile`: removed at the source. Calls\n * `checkSubagentProfile`/`listSubagentProfiles`, which are referenced but\n * defined nowhere in the entire predecessor package - a live\n * `ReferenceError` that only shipped because that package sets\n * `noCheck: true`. Typecheck is on here; porting it faithfully would not\n * compile, and it was asked to be removed independently of that\n * - The `SUBAGENT_FLEET_COMMAND` registration and its `Ctrl+Alt+F` shortcut:\n * fleet view is its own piece, registered by whoever builds it\n * - Inline parallel groups within `/chain` (`(a | b)` syntax): the field\n * mapping for a group's own config exists (`spawnRequestMapping.ts`),\n * but wiring a group INTO a chain request is left for the same pass that\n * revisits per-task field support, so `/chain` reports a clear\n * not-yet-supported message rather than silently flattening a group\n * - `/subagents` (admin) command registration: a separate file, not yet\n * ported\n *\n * `/subagents-doctor` IS here, in `doctor.ts` - read (not ported) the\n * predecessor's foreground-executor `doctor` action before deciding, and it\n * turned out to be a small, mostly-mechanical port. See that module's own\n * doc for what it deliberately leaves out (chain counts, spawn-budget\n * reporting).\n *\n * AVOID:\n * - Awaiting a SINGLE/PARALLEL spawn for a result that will not exist yet.\n * See `subagentLaunch.ts`\n * - A private polling loop for a message's live status. Use\n * `watchTrackedRunUntilTerminal`\n */\n\nimport { resolveRootSessionId } from '@agimon-ai/doompi-core/child-process';\nimport type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';\n\nimport type { SkillDiscoveryContract } from '../services/agentSkills';\nimport type { AsyncJobTrackerContract, TrackedAsyncJobsContract, TrackedAsyncJob } from '../services/asyncJobTracker';\nimport { resolveTrackedRunId, TERMINAL_ASYNC_JOB_STATES } from '../services/asyncJobTracker';\nimport {\n extractForkFlag,\n type InlineConfig,\n type ParsedStep,\n parseAgentToken,\n parseSingleTaskToken,\n SlashParseError,\n} from '../services/chainExpression';\nimport type { ExtensionConfig } from '../services/config';\nimport { buildDoctorReport } from '../services/doctor';\nimport type { ManagementActionsContract } from '../services/managementActions';\nimport { normalizeParentModel } from '../services/modelFallback';\nimport { authenticatedModelInfos } from '../services/modelResolution';\nimport type { PollSchedulerContract } from '../services/pollScheduler';\nimport { createSessionScope } from '../services/sessionPaths';\nimport { captureSessionForkSource, type SpawnPlannerContract, type SpawnPlanResult } from '../services/spawnPlan';\nimport { taskInputFromParsedStep, UnsupportedInlineConfigError } from '../services/spawnRequestMapping';\nimport {\n launchParallelSubagents,\n launchSingleSubagent,\n watchTrackedRunUntilTerminal,\n} from '../services/subagentLaunch';\nimport type { AgentScope, AgentDiscoveryContract } from '../types/agent';\n\nexport interface SlashCommandDeps {\n spawnPlanner: SpawnPlannerContract;\n skills: SkillDiscoveryContract;\n tracker: AsyncJobTrackerContract;\n scheduler: PollSchedulerContract;\n discovery: AgentDiscoveryContract;\n /** Session-scoped typed management for status, prefix resolution, and control. */\n management: ManagementActionsContract;\n loadConfig: () => ExtensionConfig;\n environment: Readonly<Record<string, string | undefined>>;\n}\n\nexport interface SlashCommandState {\n baseCwd: string | undefined;\n}\n\nfunction sessionScopeFor(ctx: ExtensionContext, environment: Readonly<Record<string, string | undefined>>) {\n return createSessionScope(resolveRootSessionId(ctx.sessionManager.getSessionId(), environment));\n}\n\nconst SLASH_STATUS_KEY = 'subagent-slash';\nconst STARTED_STATUS = 'started';\n\n/**\n * The custom-message type a slash launch renders under. Cross-process\n * significant the same way `SUBAGENT_NOTIFY_MESSAGE_TYPE` is: the child-side\n * prompt runtime strips this type out of a child's inherited history\n * (`PARENT_ONLY_CUSTOM_MESSAGE_TYPES`), so both sides must agree on the literal.\n */\nimport { SLASH_RESULT_CUSTOM_TYPE, type SlashRunDetail } from '../models/slashResult';\nfunction sendSlashText(pi: ExtensionAPI, text: string, details?: SlashRunDetail[]): void {\n pi.sendMessage({\n customType: SLASH_RESULT_CUSTOM_TYPE,\n content: text,\n display: true,\n ...(details ? { details } : {}),\n });\n}\n\nfunction setSlashStatus(ctx: ExtensionContext, text: string | undefined): void {\n if (ctx.hasUI) ctx.ui.setStatus(SLASH_STATUS_KEY, text);\n}\n\nfunction notifyError(ctx: ExtensionContext, message: string): void {\n ctx.ui.notify(message, 'error');\n}\n\nfunction notifyInfo(ctx: ExtensionContext, message: string): void {\n ctx.ui.notify(message, 'info');\n}\n\nfunction statusTextFor(job: TrackedAsyncJob | undefined): string {\n if (!job) return 'starting…';\n if (job.attentionReason) return `${job.status ?? 'running'} - needs attention: ${job.attentionReason}`;\n if (job.activityState) return `${job.status ?? 'running'} - ${job.activityState}`;\n return job.status ?? 'running';\n}\n\n/**\n * Watches one launched run to a terminal state and finalizes its message.\n * Each launched run gets its own subscriber, so a PARALLEL launch's\n * siblings finalize independently rather than all waiting on the slowest.\n */\nfunction watchAndFinalize(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n deps: SlashCommandDeps,\n jobs: TrackedAsyncJobsContract,\n runId: string,\n agent: string,\n): void {\n watchTrackedRunUntilTerminal(deps.scheduler, jobs, runId, (job) => {\n setSlashStatus(ctx, `${agent} (${runId}): ${statusTextFor(job)}`);\n if (job?.status === undefined || !TERMINAL_ASYNC_JOB_STATES.has(job.status)) return;\n setSlashStatus(ctx, undefined);\n const outcome = job.status === 'complete' || job.status === 'completed' ? 'completed' : job.status;\n sendSlashText(\n pi,\n job.error\n ? `## Subagent ${outcome}\\n\\n${agent} (${runId})\\n\\n${job.error}`\n : `## Subagent ${outcome}\\n\\n${agent} (${runId})`,\n [{ agent, runId, status: outcome, ...(job.error ? { error: job.error } : {}) }],\n );\n });\n}\n\nfunction reportSpawnResult(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n deps: SlashCommandDeps,\n jobs: TrackedAsyncJobsContract,\n result: SpawnPlanResult,\n): void {\n const started = result.outcomes.filter((outcome) => outcome.runId);\n const failed = result.outcomes.filter((outcome) => !outcome.runId);\n if (started.length > 0) {\n const label = started\n .map(\n (outcome) => `${outcome.agent} (${outcome.runId})${outcome.warning ? `\\n Warning: ${outcome.warning}` : ''}`,\n )\n .join(', ');\n sendSlashText(\n pi,\n `## Subagent started\\n\\n${label}`,\n started.map((outcome) => ({\n agent: outcome.agent,\n runId: outcome.runId ?? '',\n status: STARTED_STATUS,\n ...(outcome.warning ? { warning: outcome.warning } : {}),\n })),\n );\n setSlashStatus(ctx, `${started.length} run${started.length === 1 ? '' : 's'} started…`);\n for (const outcome of started) {\n if (outcome.runId) watchAndFinalize(pi, ctx, deps, jobs, outcome.runId, outcome.agent);\n }\n }\n if (failed.length > 0) {\n const label = failed.map((outcome) => `${outcome.agent}: ${outcome.error ?? 'spawn failed'}`).join('\\n');\n notifyError(ctx, `Some subagents failed to start:\\n${label}`);\n }\n}\n\nfunction requireBaseCwd(state: SlashCommandState, ctx: ExtensionContext): string | undefined {\n if (state.baseCwd) return state.baseCwd;\n notifyError(ctx, 'Subagent session cwd is not initialized yet');\n return undefined;\n}\n\nfunction findAgentOrNotify(deps: SlashCommandDeps, baseCwd: string, name: string, ctx: ExtensionContext): boolean {\n const agents = deps.discovery.discover(baseCwd, 'both' satisfies AgentScope).agents;\n if (agents.find((agent) => agent.name === name)) return true;\n notifyError(ctx, `Unknown agent: ${name}`);\n return false;\n}\n\nexport interface SingleAgentRunRequest {\n agent: string;\n task: string;\n /** Inline `agent[model=x]` config from a slash token; surfaces without that syntax send none. */\n config?: InlineConfig;\n fork?: boolean;\n}\n\nexport type SingleAgentRunOutcome = { ok: true; result: SpawnPlanResult } | { ok: false; message: string };\n\n/**\n * One agent, one task: the shared body of `/run` and the agent catalog's\n * launch key (`SPC a l`, `r`/`R`).\n *\n * Returns `ok: false` with a user-facing message for the validation failures\n * both surfaces share rather than notifying itself, because the two report\n * in different idioms - a slash command notifies, and a fullscreen overlay\n * writes a notice into its own body, where a notification would be covered.\n * Started runs are still reported here through `reportSpawnResult`, which is\n * what tracks them and finalizes their message; that is identical for both.\n */\nexport async function launchSingleAgentRun(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n state: SlashCommandState,\n deps: SlashCommandDeps,\n request: SingleAgentRunRequest,\n): Promise<SingleAgentRunOutcome> {\n const baseCwd = state.baseCwd;\n if (!baseCwd) return { ok: false, message: 'Subagent session cwd is not initialized yet' };\n const agents = deps.discovery.discover(baseCwd, 'both' satisfies AgentScope).agents;\n if (!agents.find((agent) => agent.name === request.agent)) {\n return { ok: false, message: `Unknown agent: ${request.agent}` };\n }\n const scope = sessionScopeFor(ctx, deps.environment);\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId(), scope);\n try {\n const parentForkSource = captureSessionForkSource(ctx.sessionManager, 'settled');\n const parentModel = normalizeParentModel(ctx.model);\n const taskInput = taskInputFromParsedStep(\n { name: request.agent, config: request.config ?? {}, task: request.task },\n baseCwd,\n request.fork ? 'fork' : undefined,\n );\n const result = await launchSingleSubagent(\n deps.spawnPlanner,\n jobs,\n {\n agent: taskInput.agent,\n task: taskInput.task ?? '',\n cwd: taskInput.cwd ?? baseCwd,\n agentScope: 'both',\n sessionScope: scope,\n parentSessionId: ctx.sessionManager.getSessionId(),\n ...(taskInput.model ? { model: taskInput.model } : {}),\n ...(taskInput.context ? { context: taskInput.context } : {}),\n ...(parentForkSource\n ? {\n parentForkSource: parentForkSource.terminalSource,\n ...(parentForkSource.sessionFile ? { parentSessionFile: parentForkSource.sessionFile } : {}),\n parentLeafId: parentForkSource.leafId,\n }\n : {}),\n availableModels: authenticatedModelInfos(ctx.modelRegistry),\n ...(parentModel ? { parentModel } : {}),\n },\n deps.loadConfig(),\n );\n reportSpawnResult(pi, ctx, deps, jobs, result);\n return { ok: true, result };\n } catch (error) {\n if (error instanceof UnsupportedInlineConfigError || error instanceof SlashParseError) {\n return { ok: false, message: error.message };\n }\n throw error;\n }\n}\n\n/**\n * `launchSingleAgentRun` for a surface that cannot await it - the agent\n * catalog closes on launch, so nothing is left to receive the outcome. The\n * failure paths report themselves here, once the overlay is gone and a\n * notification is visible again.\n */\nexport function startSingleAgentRun(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n state: SlashCommandState,\n deps: SlashCommandDeps,\n request: SingleAgentRunRequest,\n): void {\n void launchSingleAgentRun(pi, ctx, state, deps, request).then(\n (outcome) => {\n if (!outcome.ok) notifyError(ctx, outcome.message);\n },\n (error: unknown) => {\n notifyError(ctx, `Subagent launch failed: ${error instanceof Error ? error.message : String(error)}`);\n },\n );\n}\n\nfunction reportKnownErrorOrRethrow(ctx: ExtensionContext, error: unknown): void {\n if (error instanceof UnsupportedInlineConfigError || error instanceof SlashParseError) {\n notifyError(ctx, error.message);\n return;\n }\n throw error;\n}\n\n/**\n * Shared arg parsing for /chain (no inline group) and /parallel:\n * \"agent1 task1 -> agent2 task2\" or \"agent1 agent2 -- shared task\".\n */\nfunction parseAgentArgsFallback(input: string): { steps: ParsedStep[]; task: string; perStep: boolean } | undefined {\n const trimmed = input.trim();\n if (trimmed.includes(' -> ')) {\n const steps = trimmed\n .split(' -> ')\n .map((segment) => segment.trim())\n .filter(Boolean)\n .map((segment) => parseSingleTaskToken(segment));\n if (steps.length === 0) return undefined;\n return { steps, task: steps.find((step) => step.task)?.task ?? '', perStep: true };\n }\n const delimiterIndex = trimmed.indexOf(' -- ');\n if (delimiterIndex === -1) return undefined;\n const agentsPart = trimmed.slice(0, delimiterIndex).trim();\n const sharedTask = trimmed.slice(delimiterIndex + 4).trim();\n if (!agentsPart || !sharedTask) return undefined;\n const steps = agentsPart\n .split(/\\s+/)\n .filter(Boolean)\n .map((token) => parseSingleTaskToken(token));\n if (steps.length === 0) return undefined;\n return { steps, task: sharedTask, perStep: false };\n}\n\nexport function createSlashCommands(\n pi: ExtensionAPI,\n state: SlashCommandState,\n deps: SlashCommandDeps,\n): Array<readonly [string, Parameters<ExtensionAPI['registerCommand']>[1]]> {\n return [\n [\n 'run',\n {\n description: 'Run a subagent in the background: /run agent[model=x] [task] [--fork]',\n handler: async (args, ctx) => {\n const { args: cleanedArgs, fork } = extractForkFlag(args);\n const input = cleanedArgs.trim();\n if (!input) {\n notifyError(ctx, 'Usage: /run <agent> [task] [--fork]');\n return;\n }\n const firstSpace = input.indexOf(' ');\n const { name: agentName, config } = parseAgentToken(firstSpace === -1 ? input : input.slice(0, firstSpace));\n const task = firstSpace === -1 ? '' : input.slice(firstSpace + 1).trim();\n const outcome = await launchSingleAgentRun(pi, ctx, state, deps, { agent: agentName, task, config, fork });\n if (!outcome.ok) notifyError(ctx, outcome.message);\n },\n },\n ],\n [\n 'parallel',\n {\n description: 'Run agents in parallel: /parallel scout \"task1\" -> reviewer \"task2\" [--fork]',\n handler: async (args, ctx) => {\n const scope = sessionScopeFor(ctx, deps.environment);\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId(), scope);\n const { args: cleanedArgs, fork } = extractForkFlag(args);\n const baseCwd = requireBaseCwd(state, ctx);\n if (!baseCwd) return;\n\n const parsed = parseAgentArgsFallback(cleanedArgs);\n if (!parsed) {\n notifyError(ctx, 'Usage: /parallel agent1 \"task1\" -> agent2 \"task2\"');\n return;\n }\n for (const step of parsed.steps) {\n if (!findAgentOrNotify(deps, baseCwd, step.name, ctx)) return;\n }\n if (!parsed.steps.some((step) => step.task) && !parsed.task) {\n notifyError(ctx, 'At least one step must have a task');\n return;\n }\n\n try {\n const parentForkSource = captureSessionForkSource(ctx.sessionManager, 'settled');\n const parentModel = normalizeParentModel(ctx.model);\n const tasks = parsed.steps.map((step) =>\n taskInputFromParsedStep(\n { name: step.name, config: step.config, task: step.task ?? parsed.task },\n baseCwd,\n fork ? 'fork' : undefined,\n ),\n );\n const result = await launchParallelSubagents(\n deps.spawnPlanner,\n jobs,\n {\n tasks,\n cwd: baseCwd,\n agentScope: 'both',\n sessionScope: scope,\n parentSessionId: ctx.sessionManager.getSessionId(),\n ...(parentForkSource\n ? {\n parentForkSource: parentForkSource.terminalSource,\n ...(parentForkSource.sessionFile ? { parentSessionFile: parentForkSource.sessionFile } : {}),\n parentLeafId: parentForkSource.leafId,\n }\n : {}),\n availableModels: authenticatedModelInfos(ctx.modelRegistry),\n ...(parentModel ? { parentModel } : {}),\n },\n deps.loadConfig(),\n );\n reportSpawnResult(pi, ctx, deps, jobs, result);\n } catch (error) {\n reportKnownErrorOrRethrow(ctx, error);\n }\n },\n },\n ],\n [\n 'subagents-doctor',\n {\n description: 'Show subagent diagnostics',\n handler: async (_args, ctx) => {\n sendSlashText(\n pi,\n buildDoctorReport(\n { cwd: ctx.cwd, agentScope: 'both', scope: sessionScopeFor(ctx, deps.environment) },\n { discovery: deps.discovery, skills: deps.skills },\n ),\n );\n },\n },\n ],\n [\n 'subagents-steer',\n {\n description: 'Send guidance to a running subagent: /subagents-steer <run-id> <message>',\n handler: async (args, ctx) => {\n const input = args.trim();\n const separator = input.search(/\\s/);\n if (separator === -1 || !input.slice(separator + 1).trim()) {\n notifyError(ctx, 'Usage: /subagents-steer <run-id> <message>');\n return;\n }\n const id = input.slice(0, separator);\n const message = input.slice(separator + 1).trim();\n try {\n deps.management.bindSessionScope(sessionScopeFor(ctx, deps.environment));\n const result = await deps.management.steer(id, message);\n const summary = `Steering ${result.state} for ${id}: ${result.message}`;\n if (result.state === 'failed') notifyError(ctx, summary);\n else notifyInfo(ctx, summary);\n } catch (error) {\n notifyError(ctx, error instanceof Error ? error.message : `Could not steer '${id}'.`);\n }\n },\n },\n ],\n [\n 'subagents-stop',\n {\n description: 'Stop a running subagent: /subagents-stop [run-id]',\n handler: async (args, ctx) => {\n const scope = sessionScopeFor(ctx, deps.environment);\n deps.management.bindSessionScope(scope);\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId(), scope);\n const id = args.trim();\n if (!id) {\n sendSlashText(pi, stoppableRunsReport(jobs.list()));\n return;\n }\n try {\n await deps.management.stop(resolveTrackedRunId(jobs, id));\n // The direct control request is acknowledged by transport delivery. The\n // run's own event stream remains authoritative for its terminal state.\n notifyInfo(ctx, `Stop requested for ${id}. The run reports its own final state once it acknowledges.`);\n } catch (error) {\n // `ManagementActions.stop` throws only for an id that resolves to no\n // run or to more than one. Both are bad user input, not internal\n // faults, so they are notified rather than rethrown at the host - the\n // same treatment `reportKnownErrorOrRethrow` gives a parse error.\n notifyError(ctx, error instanceof Error ? error.message : `Could not stop '${id}'.`);\n }\n },\n },\n ],\n ];\n}\n\n/**\n * The no-argument `/subagents-stop` listing.\n *\n * The predecessor opened a TUI selector overlay here. This reports the same\n * information as text instead, for one reason worth stating rather than\n * hiding: a selector is a second, independent renderer of run state, and this\n * package already has one in `/subagents-fleet` that shows more (live status,\n * transcripts, and the full set of runtime controls including stop). Building\n * a second, weaker one would mean two things to keep in step. Passing an\n * explicit id stays the direct path, and the fleet overlay is the interactive\n * one.\n */\nfunction stoppableRunsReport(runs: readonly TrackedAsyncJob[]): string {\n const stoppable = runs.filter((run) => run.status === 'running' || run.status === 'pending');\n if (stoppable.length === 0) return 'No running subagents to stop.';\n const lines = stoppable.map((run) => `- ${run.runId}${run.status ? ` (${run.status})` : ''}`);\n return [\n 'Running subagents:',\n ...lines,\n '',\n 'Stop one with `/subagents-stop <run-id>`, or open `/subagents-fleet` to inspect and control them interactively.',\n ].join('\\n');\n}\n"],"mappings":"6hBAgGA,SAAS,EAAgB,EAAuB,EAA2D,CACzG,OAAOA,EAAAA,oBAAAA,EAAmBC,EAAAA,qBAAAA,CAAqB,EAAI,eAAe,aAAa,EAAG,CAAW,CAAC,CAChG,CAYA,SAAS,EAAc,EAAkB,EAAc,EAAkC,CACvF,EAAG,YAAY,CACb,WAAYC,EAAAA,yBACZ,QAAS,EACT,QAAS,GACT,GAAI,EAAU,CAAE,SAAQ,EAAI,CAAC,CAC/B,CAAC,CACH,CAEA,SAAS,EAAe,EAAuB,EAAgC,CACzE,EAAI,OAAO,EAAI,GAAG,UAAU,iBAAkB,CAAI,CACxD,CAEA,SAAS,EAAY,EAAuB,EAAuB,CACjE,EAAI,GAAG,OAAO,EAAS,OAAO,CAChC,CAEA,SAAS,EAAW,EAAuB,EAAuB,CAChE,EAAI,GAAG,OAAO,EAAS,MAAM,CAC/B,CAEA,SAAS,EAAc,EAA0C,CAI/D,OAHK,EACD,EAAI,gBAAwB,GAAG,EAAI,QAAU,UAAU,sBAAsB,EAAI,kBACjF,EAAI,cAAsB,GAAG,EAAI,QAAU,UAAU,KAAK,EAAI,gBAC3D,EAAI,QAAU,UAHJ,WAInB,CAOA,SAAS,EACP,EACA,EACA,EACA,EACA,EACA,EACM,CACN,EAAA,6BAA6B,EAAK,UAAW,EAAM,EAAQ,GAAQ,CAEjE,GADA,EAAe,EAAK,GAAG,EAAM,IAAI,EAAM,KAAK,EAAc,CAAG,GAAG,EAC5D,GAAK,SAAW,IAAA,IAAa,CAACC,EAAAA,0BAA0B,IAAI,EAAI,MAAM,EAAG,OAC7E,EAAe,EAAK,IAAA,EAAS,EAC7B,IAAM,EAAU,EAAI,SAAW,YAAc,EAAI,SAAW,YAAc,YAAc,EAAI,OAC5F,EACE,EACA,EAAI,MACA,eAAe,EAAQ,MAAM,EAAM,IAAI,EAAM,OAAO,EAAI,QACxD,eAAe,EAAQ,MAAM,EAAM,IAAI,EAAM,GACjD,CAAC,CAAE,QAAO,QAAO,OAAQ,EAAS,GAAI,EAAI,MAAQ,CAAE,MAAO,EAAI,KAAM,EAAI,CAAC,CAAG,CAAC,CAChF,CACF,CAAC,CACH,CAEA,SAAS,EACP,EACA,EACA,EACA,EACA,EACM,CACN,IAAM,EAAU,EAAO,SAAS,OAAQ,GAAY,EAAQ,KAAK,EAC3D,EAAS,EAAO,SAAS,OAAQ,GAAY,CAAC,EAAQ,KAAK,EACjE,GAAI,EAAQ,OAAS,EAAG,CAMtB,EACE,EACA,0BAPY,EACX,IACE,GAAY,GAAG,EAAQ,MAAM,IAAI,EAAQ,MAAM,GAAG,EAAQ,QAAU,gBAAgB,EAAQ,UAAY,IAC3G,CAAC,CACA,KAAK,IAGwB,IAC9B,EAAQ,IAAK,IAAa,CACxB,MAAO,EAAQ,MACf,MAAO,EAAQ,OAAS,GACxB,OAAQ,UACR,GAAI,EAAQ,QAAU,CAAE,QAAS,EAAQ,OAAQ,EAAI,CAAC,CACxD,EAAE,CACJ,EACA,EAAe,EAAK,GAAG,EAAQ,OAAO,MAAM,EAAQ,SAAW,EAAI,GAAK,IAAI,UAAU,EACtF,IAAK,IAAM,KAAW,EAChB,EAAQ,OAAO,EAAiB,EAAI,EAAK,EAAM,EAAM,EAAQ,MAAO,EAAQ,KAAK,CAEzF,CACI,EAAO,OAAS,GAElB,EAAY,EAAK,oCADH,EAAO,IAAK,GAAY,GAAG,EAAQ,MAAM,IAAI,EAAQ,OAAS,gBAAgB,CAAC,CAAC,KAAK;CAC1C,GAAG,CAEhE,CAEA,SAAS,EAAe,EAA0B,EAA2C,CAC3F,GAAI,EAAM,QAAS,OAAO,EAAM,QAChC,EAAY,EAAK,6CAA6C,CAEhE,CAEA,SAAS,EAAkB,EAAwB,EAAiB,EAAc,EAAgC,CAIhH,OAHe,EAAK,UAAU,SAAS,EAAS,MAA2B,CAAC,CAAC,OAClE,KAAM,GAAU,EAAM,OAAS,CAAI,EAAU,IACxD,EAAY,EAAK,kBAAkB,GAAM,EAClC,GACT,CAuBA,eAAsB,EACpB,EACA,EACA,EACA,EACA,EACgC,CAChC,IAAM,EAAU,EAAM,QACtB,GAAI,CAAC,EAAS,MAAO,CAAE,GAAI,GAAO,QAAS,6CAA8C,EAEzF,GAAI,CADW,EAAK,UAAU,SAAS,EAAS,MAA2B,CAAC,CAAC,OACjE,KAAM,GAAU,EAAM,OAAS,EAAQ,KAAK,EACtD,MAAO,CAAE,GAAI,GAAO,QAAS,kBAAkB,EAAQ,OAAQ,EAEjE,IAAM,EAAQ,EAAgB,EAAK,EAAK,WAAW,EAC7C,EAAO,EAAK,QAAQ,WAAW,EAAI,eAAe,aAAa,EAAG,CAAK,EAC7E,GAAI,CACF,IAAM,EAAmBC,EAAAA,yBAAyB,EAAI,eAAgB,SAAS,EACzE,EAAcC,EAAAA,qBAAqB,EAAI,KAAK,EAC5C,EAAYC,EAAAA,wBAChB,CAAE,KAAM,EAAQ,MAAO,OAAQ,EAAQ,QAAU,CAAC,EAAG,KAAM,EAAQ,IAAK,EACxE,EACA,EAAQ,KAAO,OAAS,IAAA,EAC1B,EACM,EAAS,MAAMC,EAAAA,qBACnB,EAAK,aACL,EACA,CACE,MAAO,EAAU,MACjB,KAAM,EAAU,MAAQ,GACxB,IAAK,EAAU,KAAO,EACtB,WAAY,OACZ,aAAc,EACd,gBAAiB,EAAI,eAAe,aAAa,EACjD,GAAI,EAAU,MAAQ,CAAE,MAAO,EAAU,KAAM,EAAI,CAAC,EACpD,GAAI,EAAU,QAAU,CAAE,QAAS,EAAU,OAAQ,EAAI,CAAC,EAC1D,GAAI,EACA,CACE,iBAAkB,EAAiB,eACnC,GAAI,EAAiB,YAAc,CAAE,kBAAmB,EAAiB,WAAY,EAAI,CAAC,EAC1F,aAAc,EAAiB,MACjC,EACA,CAAC,EACL,gBAAiBC,EAAAA,wBAAwB,EAAI,aAAa,EAC1D,GAAI,EAAc,CAAE,aAAY,EAAI,CAAC,CACvC,EACA,EAAK,WAAW,CAClB,EAEA,OADA,EAAkB,EAAI,EAAK,EAAM,EAAM,CAAM,EACtC,CAAE,GAAI,GAAM,QAAO,CAC5B,OAAS,EAAO,CACd,GAAI,aAAiBC,EAAAA,8BAAgC,aAAiBC,EAAAA,gBACpE,MAAO,CAAE,GAAI,GAAO,QAAS,EAAM,OAAQ,EAE7C,MAAM,CACR,CACF,CAQA,SAAgB,EACd,EACA,EACA,EACA,EACA,EACM,CACN,EAA0B,EAAI,EAAK,EAAO,EAAM,CAAO,CAAC,CAAC,KACtD,GAAY,CACN,EAAQ,IAAI,EAAY,EAAK,EAAQ,OAAO,CACnD,EACC,GAAmB,CAClB,EAAY,EAAK,2BAA2B,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAAG,CACtG,CACF,CACF,CAEA,SAAS,EAA0B,EAAuB,EAAsB,CAC9E,GAAI,aAAiBD,EAAAA,8BAAgC,aAAiBC,EAAAA,gBAAiB,CACrF,EAAY,EAAK,EAAM,OAAO,EAC9B,MACF,CACA,MAAM,CACR,CAMA,SAAS,EAAuB,EAAoF,CAClH,IAAM,EAAU,EAAM,KAAK,EAC3B,GAAI,EAAQ,SAAS,MAAM,EAAG,CAC5B,IAAM,EAAQ,EACX,MAAM,MAAM,CAAC,CACb,IAAK,GAAY,EAAQ,KAAK,CAAC,CAAC,CAChC,OAAO,OAAO,CAAC,CACf,IAAK,GAAYC,EAAAA,qBAAqB,CAAO,CAAC,EAEjD,OADI,EAAM,SAAW,EAAG,OACjB,CAAE,QAAO,KAAM,EAAM,KAAM,GAAS,EAAK,IAAI,CAAC,EAAE,MAAQ,GAAI,QAAS,EAAK,CACnF,CACA,IAAM,EAAiB,EAAQ,QAAQ,MAAM,EAC7C,GAAI,IAAmB,GAAI,OAC3B,IAAM,EAAa,EAAQ,MAAM,EAAG,CAAc,CAAC,CAAC,KAAK,EACnD,EAAa,EAAQ,MAAM,EAAiB,CAAC,CAAC,CAAC,KAAK,EAC1D,GAAI,CAAC,GAAc,CAAC,EAAY,OAChC,IAAM,EAAQ,EACX,MAAM,KAAK,CAAC,CACZ,OAAO,OAAO,CAAC,CACf,IAAK,GAAUA,EAAAA,qBAAqB,CAAK,CAAC,EACzC,KAAM,SAAW,EACrB,MAAO,CAAE,QAAO,KAAM,EAAY,QAAS,EAAM,CACnD,CAEA,SAAgB,EACd,EACA,EACA,EAC0E,CAC1E,MAAO,CACL,CACE,MACA,CACE,YAAa,wEACb,QAAS,MAAO,EAAM,IAAQ,CAC5B,GAAM,CAAE,KAAM,EAAa,QAASC,EAAAA,gBAAgB,CAAI,EAClD,EAAQ,EAAY,KAAK,EAC/B,GAAI,CAAC,EAAO,CACV,EAAY,EAAK,qCAAqC,EACtD,MACF,CACA,IAAM,EAAa,EAAM,QAAQ,GAAG,EAC9B,CAAE,KAAM,EAAW,UAAWC,EAAAA,gBAAgB,IAAe,GAAK,EAAQ,EAAM,MAAM,EAAG,CAAU,CAAC,EAEpG,EAAU,MAAM,EAAqB,EAAI,EAAK,EAAO,EAAM,CAAE,MAAO,EAAW,KADxE,IAAe,GAAK,GAAK,EAAM,MAAM,EAAa,CAAC,CAAC,CAAC,KAAK,EACoB,SAAQ,MAAK,CAAC,EACpG,EAAQ,IAAI,EAAY,EAAK,EAAQ,OAAO,CACnD,CACF,CACF,EACA,CACE,WACA,CACE,YAAa,+EACb,QAAS,MAAO,EAAM,IAAQ,CAC5B,IAAM,EAAQ,EAAgB,EAAK,EAAK,WAAW,EAC7C,EAAO,EAAK,QAAQ,WAAW,EAAI,eAAe,aAAa,EAAG,CAAK,EACvE,CAAE,KAAM,EAAa,QAASD,EAAAA,gBAAgB,CAAI,EAClD,EAAU,EAAe,EAAO,CAAG,EACzC,GAAI,CAAC,EAAS,OAEd,IAAM,EAAS,EAAuB,CAAW,EACjD,GAAI,CAAC,EAAQ,CACX,EAAY,EAAK,mDAAmD,EACpE,MACF,CACA,IAAK,IAAM,KAAQ,EAAO,MACxB,GAAI,CAAC,EAAkB,EAAM,EAAS,EAAK,KAAM,CAAG,EAAG,OAEzD,GAAI,CAAC,EAAO,MAAM,KAAM,GAAS,EAAK,IAAI,GAAK,CAAC,EAAO,KAAM,CAC3D,EAAY,EAAK,oCAAoC,EACrD,MACF,CAEA,GAAI,CACF,IAAM,EAAmBR,EAAAA,yBAAyB,EAAI,eAAgB,SAAS,EACzE,EAAcC,EAAAA,qBAAqB,EAAI,KAAK,EAC5C,EAAQ,EAAO,MAAM,IAAK,GAC9BC,EAAAA,wBACE,CAAE,KAAM,EAAK,KAAM,OAAQ,EAAK,OAAQ,KAAM,EAAK,MAAQ,EAAO,IAAK,EACvE,EACA,EAAO,OAAS,IAAA,EAClB,CACF,EAsBA,EAAkB,EAAI,EAAK,EAAM,EAAM,MArBlBQ,EAAAA,wBACnB,EAAK,aACL,EACA,CACE,QACA,IAAK,EACL,WAAY,OACZ,aAAc,EACd,gBAAiB,EAAI,eAAe,aAAa,EACjD,GAAI,EACA,CACE,iBAAkB,EAAiB,eACnC,GAAI,EAAiB,YAAc,CAAE,kBAAmB,EAAiB,WAAY,EAAI,CAAC,EAC1F,aAAc,EAAiB,MACjC,EACA,CAAC,EACL,gBAAiBN,EAAAA,wBAAwB,EAAI,aAAa,EAC1D,GAAI,EAAc,CAAE,aAAY,EAAI,CAAC,CACvC,EACA,EAAK,WAAW,CAClB,CAC6C,CAC/C,OAAS,EAAO,CACd,EAA0B,EAAK,CAAK,CACtC,CACF,CACF,CACF,EACA,CACE,mBACA,CACE,YAAa,4BACb,QAAS,MAAO,EAAO,IAAQ,CAC7B,EACE,EACAO,EAAAA,kBACE,CAAE,IAAK,EAAI,IAAK,WAAY,OAAQ,MAAO,EAAgB,EAAK,EAAK,WAAW,CAAE,EAClF,CAAE,UAAW,EAAK,UAAW,OAAQ,EAAK,MAAO,CACnD,CACF,CACF,CACF,CACF,EACA,CACE,kBACA,CACE,YAAa,2EACb,QAAS,MAAO,EAAM,IAAQ,CAC5B,IAAM,EAAQ,EAAK,KAAK,EAClB,EAAY,EAAM,OAAO,IAAI,EACnC,GAAI,IAAc,IAAM,CAAC,EAAM,MAAM,EAAY,CAAC,CAAC,CAAC,KAAK,EAAG,CAC1D,EAAY,EAAK,4CAA4C,EAC7D,MACF,CACA,IAAM,EAAK,EAAM,MAAM,EAAG,CAAS,EAC7B,EAAU,EAAM,MAAM,EAAY,CAAC,CAAC,CAAC,KAAK,EAChD,GAAI,CACF,EAAK,WAAW,iBAAiB,EAAgB,EAAK,EAAK,WAAW,CAAC,EACvE,IAAM,EAAS,MAAM,EAAK,WAAW,MAAM,EAAI,CAAO,EAChD,EAAU,YAAY,EAAO,MAAM,OAAO,EAAG,IAAI,EAAO,UAC1D,EAAO,QAAU,SAAU,EAAY,EAAK,CAAO,EAClD,EAAW,EAAK,CAAO,CAC9B,OAAS,EAAO,CACd,EAAY,EAAK,aAAiB,MAAQ,EAAM,QAAU,oBAAoB,EAAG,GAAG,CACtF,CACF,CACF,CACF,EACA,CACE,iBACA,CACE,YAAa,oDACb,QAAS,MAAO,EAAM,IAAQ,CAC5B,IAAM,EAAQ,EAAgB,EAAK,EAAK,WAAW,EACnD,EAAK,WAAW,iBAAiB,CAAK,EACtC,IAAM,EAAO,EAAK,QAAQ,WAAW,EAAI,eAAe,aAAa,EAAG,CAAK,EACvE,EAAK,EAAK,KAAK,EACrB,GAAI,CAAC,EAAI,CACP,EAAc,EAAI,EAAoB,EAAK,KAAK,CAAC,CAAC,EAClD,MACF,CACA,GAAI,CACF,MAAM,EAAK,WAAW,KAAKC,EAAAA,oBAAoB,EAAM,CAAE,CAAC,EAGxD,EAAW,EAAK,sBAAsB,EAAG,4DAA4D,CACvG,OAAS,EAAO,CAKd,EAAY,EAAK,aAAiB,MAAQ,EAAM,QAAU,mBAAmB,EAAG,GAAG,CACrF,CACF,CACF,CACF,CACF,CACF,CAcA,SAAS,EAAoB,EAA0C,CACrE,IAAM,EAAY,EAAK,OAAQ,GAAQ,EAAI,SAAW,WAAa,EAAI,SAAW,SAAS,EAG3F,OAFI,EAAU,SAAW,EAAU,gCAE5B,CACL,qBACA,GAHY,EAAU,IAAK,GAAQ,KAAK,EAAI,QAAQ,EAAI,OAAS,KAAK,EAAI,OAAO,GAAK,IAG/E,EACP,GACA,iHACF,CAAC,CAAC,KAAK;CAAI,CACb"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{TERMINAL_ASYNC_JOB_STATES as e,resolveTrackedRunId as t}from"../services/asyncJobTracker/index.mjs";import{SlashParseError as n,extractForkFlag as r,parseAgentToken as i,parseSingleTaskToken as a}from"../services/chainExpression/index.mjs";import{createSessionScope as o}from"../services/sessionPaths/index.mjs";import{buildDoctorReport as s}from"../services/doctor/index.mjs";import{authenticatedModelInfos as c}from"../services/modelResolution/index.mjs";import{normalizeParentModel as l}from"../services/modelFallback/index.mjs";import{captureSessionForkSource as u}from"../services/spawnPlan/index.mjs";import{UnsupportedInlineConfigError as d,taskInputFromParsedStep as f}from"../services/spawnRequestMapping/index.mjs";import{launchParallelSubagents as p,launchSingleSubagent as m,watchTrackedRunUntilTerminal as h}from"../services/subagentLaunch/index.mjs";import{SLASH_RESULT_CUSTOM_TYPE as g}from"../models/slashResult.mjs";import{resolveRootSessionId as _}from"@agimon-ai/doompi-core/child-process";function v(e,t){return o(_(e.sessionManager.getSessionId(),t))}function y(e,t,n){e.sendMessage({customType:g,content:t,display:!0,...n?{details:n}:{}})}function b(e,t){e.hasUI&&e.ui.setStatus(`subagent-slash`,t)}function x(e,t){e.ui.notify(t,`error`)}function S(e,t){e.ui.notify(t,`info`)}function C(e){return e?e.attentionReason?`${e.status??`running`} - needs attention: ${e.attentionReason}`:e.activityState?`${e.status??`running`} - ${e.activityState}`:e.status??`running`:`starting…`}function w(t,n,r,i,a,o){h(r.scheduler,i,a,r=>{if(b(n,`${o} (${a}): ${C(r)}`),r?.status===void 0||!e.has(r.status))return;b(n,void 0);let i=r.status===`complete`||r.status===`completed`?`completed`:r.status;y(t,r.error?`## Subagent ${i}\n\n${o} (${a})\n\n${r.error}`:`## Subagent ${i}\n\n${o} (${a})`,[{agent:o,runId:a,status:i,...r.error?{error:r.error}:{}}])})}function T(e,t,n,r,i){let a=i.outcomes.filter(e=>e.runId),o=i.outcomes.filter(e=>!e.runId);if(a.length>0){y(e,`## Subagent started\n\n${a.map(e=>`${e.agent} (${e.runId})${e.warning?`\n Warning: ${e.warning}`:``}`).join(`, `)}`,a.map(e=>({agent:e.agent,runId:e.runId??``,status:`started`,...e.warning?{warning:e.warning}:{}}))),b(t,`${a.length} run${a.length===1?``:`s`} started…`);for(let i of a)i.runId&&w(e,t,n,r,i.runId,i.agent)}o.length>0&&x(t,`Some subagents failed to start:\n${o.map(e=>`${e.agent}: ${e.error??`spawn failed`}`).join(`
|
|
2
|
+
`)}`)}function E(e,t){if(e.baseCwd)return e.baseCwd;x(t,`Subagent session cwd is not initialized yet`)}function D(e,t,n,r){return e.discovery.discover(t,`both`).agents.find(e=>e.name===n)?!0:(x(r,`Unknown agent: ${n}`),!1)}async function O(e,t,r,i,a){let o=r.baseCwd;if(!o)return{ok:!1,message:`Subagent session cwd is not initialized yet`};if(!i.discovery.discover(o,`both`).agents.find(e=>e.name===a.agent))return{ok:!1,message:`Unknown agent: ${a.agent}`};let s=v(t,i.environment),p=i.tracker.forSession(t.sessionManager.getSessionId(),s);try{let n=u(t.sessionManager,`settled`),r=l(t.model),d=f({name:a.agent,config:a.config??{},task:a.task},o,a.fork?`fork`:void 0),h=await m(i.spawnPlanner,p,{agent:d.agent,task:d.task??``,cwd:d.cwd??o,agentScope:`both`,sessionScope:s,parentSessionId:t.sessionManager.getSessionId(),...d.model?{model:d.model}:{},...d.context?{context:d.context}:{},...n?{parentForkSource:n.terminalSource,...n.sessionFile?{parentSessionFile:n.sessionFile}:{},parentLeafId:n.leafId}:{},availableModels:c(t.modelRegistry),...r?{parentModel:r}:{}},i.loadConfig());return T(e,t,i,p,h),{ok:!0,result:h}}catch(e){if(e instanceof d||e instanceof n)return{ok:!1,message:e.message};throw e}}function k(e,t,n,r,i){O(e,t,n,r,i).then(e=>{e.ok||x(t,e.message)},e=>{x(t,`Subagent launch failed: ${e instanceof Error?e.message:String(e)}`)})}function A(e,t){if(t instanceof d||t instanceof n){x(e,t.message);return}throw t}function j(e){let t=e.trim();if(t.includes(` -> `)){let e=t.split(` -> `).map(e=>e.trim()).filter(Boolean).map(e=>a(e));return e.length===0?void 0:{steps:e,task:e.find(e=>e.task)?.task??``,perStep:!0}}let n=t.indexOf(` -- `);if(n===-1)return;let r=t.slice(0,n).trim(),i=t.slice(n+4).trim();if(!r||!i)return;let o=r.split(/\s+/).filter(Boolean).map(e=>a(e));if(o.length!==0)return{steps:o,task:i,perStep:!1}}function M(e,n,a){return[[`run`,{description:`Run a subagent in the background: /run agent[model=x] [task] [--fork]`,handler:async(t,o)=>{let{args:s,fork:c}=r(t),l=s.trim();if(!l){x(o,`Usage: /run <agent> [task] [--fork]`);return}let u=l.indexOf(` `),{name:d,config:f}=i(u===-1?l:l.slice(0,u)),p=await O(e,o,n,a,{agent:d,task:u===-1?``:l.slice(u+1).trim(),config:f,fork:c});p.ok||x(o,p.message)}}],[`parallel`,{description:`Run agents in parallel: /parallel scout "task1" -> reviewer "task2" [--fork]`,handler:async(t,i)=>{let o=v(i,a.environment),s=a.tracker.forSession(i.sessionManager.getSessionId(),o),{args:d,fork:m}=r(t),h=E(n,i);if(!h)return;let g=j(d);if(!g){x(i,`Usage: /parallel agent1 "task1" -> agent2 "task2"`);return}for(let e of g.steps)if(!D(a,h,e.name,i))return;if(!g.steps.some(e=>e.task)&&!g.task){x(i,`At least one step must have a task`);return}try{let t=u(i.sessionManager,`settled`),n=l(i.model),r=g.steps.map(e=>f({name:e.name,config:e.config,task:e.task??g.task},h,m?`fork`:void 0));T(e,i,a,s,await p(a.spawnPlanner,s,{tasks:r,cwd:h,agentScope:`both`,sessionScope:o,parentSessionId:i.sessionManager.getSessionId(),...t?{parentForkSource:t.terminalSource,...t.sessionFile?{parentSessionFile:t.sessionFile}:{},parentLeafId:t.leafId}:{},availableModels:c(i.modelRegistry),...n?{parentModel:n}:{}},a.loadConfig()))}catch(e){A(i,e)}}}],[`subagents-doctor`,{description:`Show subagent diagnostics`,handler:async(t,n)=>{y(e,s({cwd:n.cwd,agentScope:`both`,scope:v(n,a.environment)},{discovery:a.discovery,skills:a.skills}))}}],[`subagents-steer`,{description:`Send guidance to a running subagent: /subagents-steer <run-id> <message>`,handler:async(e,t)=>{let n=e.trim(),r=n.search(/\s/);if(r===-1||!n.slice(r+1).trim()){x(t,`Usage: /subagents-steer <run-id> <message>`);return}let i=n.slice(0,r),o=n.slice(r+1).trim();try{a.management.bindSessionScope(v(t,a.environment));let e=await a.management.steer(i,o),n=`Steering ${e.state} for ${i}: ${e.message}`;e.state===`failed`?x(t,n):S(t,n)}catch(e){x(t,e instanceof Error?e.message:`Could not steer '${i}'.`)}}}],[`subagents-stop`,{description:`Stop a running subagent: /subagents-stop [run-id]`,handler:async(n,r)=>{let i=v(r,a.environment);a.management.bindSessionScope(i);let o=a.tracker.forSession(r.sessionManager.getSessionId(),i),s=n.trim();if(!s){y(e,N(o.list()));return}try{await a.management.stop(t(o,s)),S(r,`Stop requested for ${s}. The run reports its own final state once it acknowledges.`)}catch(e){x(r,e instanceof Error?e.message:`Could not stop '${s}'.`)}}}]]}function N(e){let t=e.filter(e=>e.status===`running`||e.status===`pending`);return t.length===0?`No running subagents to stop.`:[`Running subagents:`,...t.map(e=>`- ${e.runId}${e.status?` (${e.status})`:``}`),``,"Stop one with `/subagents-stop <run-id>`, or open `/subagents-fleet` to inspect and control them interactively."].join(`
|
|
3
|
+
`)}export{M as createSlashCommands,O as launchSingleAgentRun,k as startSingleAgentRun};
|
|
4
|
+
//# sourceMappingURL=slashCommands.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slashCommands.mjs","names":[],"sources":["../../src/controllers/slashCommands.ts"],"sourcesContent":["/**\n * The core `/run`, `/chain`, `/parallel` slash commands. Replaces the\n * always-blocking predecessor with the async-only shape this port settled\n * on: a command launches a spawn, sends an initial status message, and\n * hands off to `watchTrackedRunUntilTerminal` (render-key gated, backed by\n * `PollScheduler`) to update the status bar and finalize the message once\n * the run reaches a terminal state - never by awaiting completion. See\n * `subagentLaunch.ts`'s module doc for the full reasoning.\n *\n * WHAT IS NOT HERE, AND WHY:\n * - `/run-chain`, `/prompt-workflow` and `/chain-prompts`: the whole SAVED\n * work surface - saved agent pipelines (`ChainConfig`, never ported) and\n * saved `.md` prompt templates (ported, then deleted). REMOVED BY\n * DECISION, not deferred: overly complicated for the use they were\n * getting. Do not re-add them because a reader notices the predecessor had\n * them. Ad-hoc chaining (`/chain scout \"x\" -> planner`) is a different\n * feature, lives in `chainExpression.ts`, and stays\n * - `/subagent-cost`: REMOVED BY DECISION. It reads usage/cost data\n * (`totalTokens`/`totalCost`) that nothing in this package's\n * runs/extensions surface tracks - a genuinely absent data source, and\n * building it would mean threading usage out of every child process\n * - `/subagents-check-profile`: removed at the source. Calls\n * `checkSubagentProfile`/`listSubagentProfiles`, which are referenced but\n * defined nowhere in the entire predecessor package - a live\n * `ReferenceError` that only shipped because that package sets\n * `noCheck: true`. Typecheck is on here; porting it faithfully would not\n * compile, and it was asked to be removed independently of that\n * - The `SUBAGENT_FLEET_COMMAND` registration and its `Ctrl+Alt+F` shortcut:\n * fleet view is its own piece, registered by whoever builds it\n * - Inline parallel groups within `/chain` (`(a | b)` syntax): the field\n * mapping for a group's own config exists (`spawnRequestMapping.ts`),\n * but wiring a group INTO a chain request is left for the same pass that\n * revisits per-task field support, so `/chain` reports a clear\n * not-yet-supported message rather than silently flattening a group\n * - `/subagents` (admin) command registration: a separate file, not yet\n * ported\n *\n * `/subagents-doctor` IS here, in `doctor.ts` - read (not ported) the\n * predecessor's foreground-executor `doctor` action before deciding, and it\n * turned out to be a small, mostly-mechanical port. See that module's own\n * doc for what it deliberately leaves out (chain counts, spawn-budget\n * reporting).\n *\n * AVOID:\n * - Awaiting a SINGLE/PARALLEL spawn for a result that will not exist yet.\n * See `subagentLaunch.ts`\n * - A private polling loop for a message's live status. Use\n * `watchTrackedRunUntilTerminal`\n */\n\nimport { resolveRootSessionId } from '@agimon-ai/doompi-core/child-process';\nimport type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';\n\nimport type { SkillDiscoveryContract } from '../services/agentSkills';\nimport type { AsyncJobTrackerContract, TrackedAsyncJobsContract, TrackedAsyncJob } from '../services/asyncJobTracker';\nimport { resolveTrackedRunId, TERMINAL_ASYNC_JOB_STATES } from '../services/asyncJobTracker';\nimport {\n extractForkFlag,\n type InlineConfig,\n type ParsedStep,\n parseAgentToken,\n parseSingleTaskToken,\n SlashParseError,\n} from '../services/chainExpression';\nimport type { ExtensionConfig } from '../services/config';\nimport { buildDoctorReport } from '../services/doctor';\nimport type { ManagementActionsContract } from '../services/managementActions';\nimport { normalizeParentModel } from '../services/modelFallback';\nimport { authenticatedModelInfos } from '../services/modelResolution';\nimport type { PollSchedulerContract } from '../services/pollScheduler';\nimport { createSessionScope } from '../services/sessionPaths';\nimport { captureSessionForkSource, type SpawnPlannerContract, type SpawnPlanResult } from '../services/spawnPlan';\nimport { taskInputFromParsedStep, UnsupportedInlineConfigError } from '../services/spawnRequestMapping';\nimport {\n launchParallelSubagents,\n launchSingleSubagent,\n watchTrackedRunUntilTerminal,\n} from '../services/subagentLaunch';\nimport type { AgentScope, AgentDiscoveryContract } from '../types/agent';\n\nexport interface SlashCommandDeps {\n spawnPlanner: SpawnPlannerContract;\n skills: SkillDiscoveryContract;\n tracker: AsyncJobTrackerContract;\n scheduler: PollSchedulerContract;\n discovery: AgentDiscoveryContract;\n /** Session-scoped typed management for status, prefix resolution, and control. */\n management: ManagementActionsContract;\n loadConfig: () => ExtensionConfig;\n environment: Readonly<Record<string, string | undefined>>;\n}\n\nexport interface SlashCommandState {\n baseCwd: string | undefined;\n}\n\nfunction sessionScopeFor(ctx: ExtensionContext, environment: Readonly<Record<string, string | undefined>>) {\n return createSessionScope(resolveRootSessionId(ctx.sessionManager.getSessionId(), environment));\n}\n\nconst SLASH_STATUS_KEY = 'subagent-slash';\nconst STARTED_STATUS = 'started';\n\n/**\n * The custom-message type a slash launch renders under. Cross-process\n * significant the same way `SUBAGENT_NOTIFY_MESSAGE_TYPE` is: the child-side\n * prompt runtime strips this type out of a child's inherited history\n * (`PARENT_ONLY_CUSTOM_MESSAGE_TYPES`), so both sides must agree on the literal.\n */\nimport { SLASH_RESULT_CUSTOM_TYPE, type SlashRunDetail } from '../models/slashResult';\nfunction sendSlashText(pi: ExtensionAPI, text: string, details?: SlashRunDetail[]): void {\n pi.sendMessage({\n customType: SLASH_RESULT_CUSTOM_TYPE,\n content: text,\n display: true,\n ...(details ? { details } : {}),\n });\n}\n\nfunction setSlashStatus(ctx: ExtensionContext, text: string | undefined): void {\n if (ctx.hasUI) ctx.ui.setStatus(SLASH_STATUS_KEY, text);\n}\n\nfunction notifyError(ctx: ExtensionContext, message: string): void {\n ctx.ui.notify(message, 'error');\n}\n\nfunction notifyInfo(ctx: ExtensionContext, message: string): void {\n ctx.ui.notify(message, 'info');\n}\n\nfunction statusTextFor(job: TrackedAsyncJob | undefined): string {\n if (!job) return 'starting…';\n if (job.attentionReason) return `${job.status ?? 'running'} - needs attention: ${job.attentionReason}`;\n if (job.activityState) return `${job.status ?? 'running'} - ${job.activityState}`;\n return job.status ?? 'running';\n}\n\n/**\n * Watches one launched run to a terminal state and finalizes its message.\n * Each launched run gets its own subscriber, so a PARALLEL launch's\n * siblings finalize independently rather than all waiting on the slowest.\n */\nfunction watchAndFinalize(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n deps: SlashCommandDeps,\n jobs: TrackedAsyncJobsContract,\n runId: string,\n agent: string,\n): void {\n watchTrackedRunUntilTerminal(deps.scheduler, jobs, runId, (job) => {\n setSlashStatus(ctx, `${agent} (${runId}): ${statusTextFor(job)}`);\n if (job?.status === undefined || !TERMINAL_ASYNC_JOB_STATES.has(job.status)) return;\n setSlashStatus(ctx, undefined);\n const outcome = job.status === 'complete' || job.status === 'completed' ? 'completed' : job.status;\n sendSlashText(\n pi,\n job.error\n ? `## Subagent ${outcome}\\n\\n${agent} (${runId})\\n\\n${job.error}`\n : `## Subagent ${outcome}\\n\\n${agent} (${runId})`,\n [{ agent, runId, status: outcome, ...(job.error ? { error: job.error } : {}) }],\n );\n });\n}\n\nfunction reportSpawnResult(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n deps: SlashCommandDeps,\n jobs: TrackedAsyncJobsContract,\n result: SpawnPlanResult,\n): void {\n const started = result.outcomes.filter((outcome) => outcome.runId);\n const failed = result.outcomes.filter((outcome) => !outcome.runId);\n if (started.length > 0) {\n const label = started\n .map(\n (outcome) => `${outcome.agent} (${outcome.runId})${outcome.warning ? `\\n Warning: ${outcome.warning}` : ''}`,\n )\n .join(', ');\n sendSlashText(\n pi,\n `## Subagent started\\n\\n${label}`,\n started.map((outcome) => ({\n agent: outcome.agent,\n runId: outcome.runId ?? '',\n status: STARTED_STATUS,\n ...(outcome.warning ? { warning: outcome.warning } : {}),\n })),\n );\n setSlashStatus(ctx, `${started.length} run${started.length === 1 ? '' : 's'} started…`);\n for (const outcome of started) {\n if (outcome.runId) watchAndFinalize(pi, ctx, deps, jobs, outcome.runId, outcome.agent);\n }\n }\n if (failed.length > 0) {\n const label = failed.map((outcome) => `${outcome.agent}: ${outcome.error ?? 'spawn failed'}`).join('\\n');\n notifyError(ctx, `Some subagents failed to start:\\n${label}`);\n }\n}\n\nfunction requireBaseCwd(state: SlashCommandState, ctx: ExtensionContext): string | undefined {\n if (state.baseCwd) return state.baseCwd;\n notifyError(ctx, 'Subagent session cwd is not initialized yet');\n return undefined;\n}\n\nfunction findAgentOrNotify(deps: SlashCommandDeps, baseCwd: string, name: string, ctx: ExtensionContext): boolean {\n const agents = deps.discovery.discover(baseCwd, 'both' satisfies AgentScope).agents;\n if (agents.find((agent) => agent.name === name)) return true;\n notifyError(ctx, `Unknown agent: ${name}`);\n return false;\n}\n\nexport interface SingleAgentRunRequest {\n agent: string;\n task: string;\n /** Inline `agent[model=x]` config from a slash token; surfaces without that syntax send none. */\n config?: InlineConfig;\n fork?: boolean;\n}\n\nexport type SingleAgentRunOutcome = { ok: true; result: SpawnPlanResult } | { ok: false; message: string };\n\n/**\n * One agent, one task: the shared body of `/run` and the agent catalog's\n * launch key (`SPC a l`, `r`/`R`).\n *\n * Returns `ok: false` with a user-facing message for the validation failures\n * both surfaces share rather than notifying itself, because the two report\n * in different idioms - a slash command notifies, and a fullscreen overlay\n * writes a notice into its own body, where a notification would be covered.\n * Started runs are still reported here through `reportSpawnResult`, which is\n * what tracks them and finalizes their message; that is identical for both.\n */\nexport async function launchSingleAgentRun(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n state: SlashCommandState,\n deps: SlashCommandDeps,\n request: SingleAgentRunRequest,\n): Promise<SingleAgentRunOutcome> {\n const baseCwd = state.baseCwd;\n if (!baseCwd) return { ok: false, message: 'Subagent session cwd is not initialized yet' };\n const agents = deps.discovery.discover(baseCwd, 'both' satisfies AgentScope).agents;\n if (!agents.find((agent) => agent.name === request.agent)) {\n return { ok: false, message: `Unknown agent: ${request.agent}` };\n }\n const scope = sessionScopeFor(ctx, deps.environment);\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId(), scope);\n try {\n const parentForkSource = captureSessionForkSource(ctx.sessionManager, 'settled');\n const parentModel = normalizeParentModel(ctx.model);\n const taskInput = taskInputFromParsedStep(\n { name: request.agent, config: request.config ?? {}, task: request.task },\n baseCwd,\n request.fork ? 'fork' : undefined,\n );\n const result = await launchSingleSubagent(\n deps.spawnPlanner,\n jobs,\n {\n agent: taskInput.agent,\n task: taskInput.task ?? '',\n cwd: taskInput.cwd ?? baseCwd,\n agentScope: 'both',\n sessionScope: scope,\n parentSessionId: ctx.sessionManager.getSessionId(),\n ...(taskInput.model ? { model: taskInput.model } : {}),\n ...(taskInput.context ? { context: taskInput.context } : {}),\n ...(parentForkSource\n ? {\n parentForkSource: parentForkSource.terminalSource,\n ...(parentForkSource.sessionFile ? { parentSessionFile: parentForkSource.sessionFile } : {}),\n parentLeafId: parentForkSource.leafId,\n }\n : {}),\n availableModels: authenticatedModelInfos(ctx.modelRegistry),\n ...(parentModel ? { parentModel } : {}),\n },\n deps.loadConfig(),\n );\n reportSpawnResult(pi, ctx, deps, jobs, result);\n return { ok: true, result };\n } catch (error) {\n if (error instanceof UnsupportedInlineConfigError || error instanceof SlashParseError) {\n return { ok: false, message: error.message };\n }\n throw error;\n }\n}\n\n/**\n * `launchSingleAgentRun` for a surface that cannot await it - the agent\n * catalog closes on launch, so nothing is left to receive the outcome. The\n * failure paths report themselves here, once the overlay is gone and a\n * notification is visible again.\n */\nexport function startSingleAgentRun(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n state: SlashCommandState,\n deps: SlashCommandDeps,\n request: SingleAgentRunRequest,\n): void {\n void launchSingleAgentRun(pi, ctx, state, deps, request).then(\n (outcome) => {\n if (!outcome.ok) notifyError(ctx, outcome.message);\n },\n (error: unknown) => {\n notifyError(ctx, `Subagent launch failed: ${error instanceof Error ? error.message : String(error)}`);\n },\n );\n}\n\nfunction reportKnownErrorOrRethrow(ctx: ExtensionContext, error: unknown): void {\n if (error instanceof UnsupportedInlineConfigError || error instanceof SlashParseError) {\n notifyError(ctx, error.message);\n return;\n }\n throw error;\n}\n\n/**\n * Shared arg parsing for /chain (no inline group) and /parallel:\n * \"agent1 task1 -> agent2 task2\" or \"agent1 agent2 -- shared task\".\n */\nfunction parseAgentArgsFallback(input: string): { steps: ParsedStep[]; task: string; perStep: boolean } | undefined {\n const trimmed = input.trim();\n if (trimmed.includes(' -> ')) {\n const steps = trimmed\n .split(' -> ')\n .map((segment) => segment.trim())\n .filter(Boolean)\n .map((segment) => parseSingleTaskToken(segment));\n if (steps.length === 0) return undefined;\n return { steps, task: steps.find((step) => step.task)?.task ?? '', perStep: true };\n }\n const delimiterIndex = trimmed.indexOf(' -- ');\n if (delimiterIndex === -1) return undefined;\n const agentsPart = trimmed.slice(0, delimiterIndex).trim();\n const sharedTask = trimmed.slice(delimiterIndex + 4).trim();\n if (!agentsPart || !sharedTask) return undefined;\n const steps = agentsPart\n .split(/\\s+/)\n .filter(Boolean)\n .map((token) => parseSingleTaskToken(token));\n if (steps.length === 0) return undefined;\n return { steps, task: sharedTask, perStep: false };\n}\n\nexport function createSlashCommands(\n pi: ExtensionAPI,\n state: SlashCommandState,\n deps: SlashCommandDeps,\n): Array<readonly [string, Parameters<ExtensionAPI['registerCommand']>[1]]> {\n return [\n [\n 'run',\n {\n description: 'Run a subagent in the background: /run agent[model=x] [task] [--fork]',\n handler: async (args, ctx) => {\n const { args: cleanedArgs, fork } = extractForkFlag(args);\n const input = cleanedArgs.trim();\n if (!input) {\n notifyError(ctx, 'Usage: /run <agent> [task] [--fork]');\n return;\n }\n const firstSpace = input.indexOf(' ');\n const { name: agentName, config } = parseAgentToken(firstSpace === -1 ? input : input.slice(0, firstSpace));\n const task = firstSpace === -1 ? '' : input.slice(firstSpace + 1).trim();\n const outcome = await launchSingleAgentRun(pi, ctx, state, deps, { agent: agentName, task, config, fork });\n if (!outcome.ok) notifyError(ctx, outcome.message);\n },\n },\n ],\n [\n 'parallel',\n {\n description: 'Run agents in parallel: /parallel scout \"task1\" -> reviewer \"task2\" [--fork]',\n handler: async (args, ctx) => {\n const scope = sessionScopeFor(ctx, deps.environment);\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId(), scope);\n const { args: cleanedArgs, fork } = extractForkFlag(args);\n const baseCwd = requireBaseCwd(state, ctx);\n if (!baseCwd) return;\n\n const parsed = parseAgentArgsFallback(cleanedArgs);\n if (!parsed) {\n notifyError(ctx, 'Usage: /parallel agent1 \"task1\" -> agent2 \"task2\"');\n return;\n }\n for (const step of parsed.steps) {\n if (!findAgentOrNotify(deps, baseCwd, step.name, ctx)) return;\n }\n if (!parsed.steps.some((step) => step.task) && !parsed.task) {\n notifyError(ctx, 'At least one step must have a task');\n return;\n }\n\n try {\n const parentForkSource = captureSessionForkSource(ctx.sessionManager, 'settled');\n const parentModel = normalizeParentModel(ctx.model);\n const tasks = parsed.steps.map((step) =>\n taskInputFromParsedStep(\n { name: step.name, config: step.config, task: step.task ?? parsed.task },\n baseCwd,\n fork ? 'fork' : undefined,\n ),\n );\n const result = await launchParallelSubagents(\n deps.spawnPlanner,\n jobs,\n {\n tasks,\n cwd: baseCwd,\n agentScope: 'both',\n sessionScope: scope,\n parentSessionId: ctx.sessionManager.getSessionId(),\n ...(parentForkSource\n ? {\n parentForkSource: parentForkSource.terminalSource,\n ...(parentForkSource.sessionFile ? { parentSessionFile: parentForkSource.sessionFile } : {}),\n parentLeafId: parentForkSource.leafId,\n }\n : {}),\n availableModels: authenticatedModelInfos(ctx.modelRegistry),\n ...(parentModel ? { parentModel } : {}),\n },\n deps.loadConfig(),\n );\n reportSpawnResult(pi, ctx, deps, jobs, result);\n } catch (error) {\n reportKnownErrorOrRethrow(ctx, error);\n }\n },\n },\n ],\n [\n 'subagents-doctor',\n {\n description: 'Show subagent diagnostics',\n handler: async (_args, ctx) => {\n sendSlashText(\n pi,\n buildDoctorReport(\n { cwd: ctx.cwd, agentScope: 'both', scope: sessionScopeFor(ctx, deps.environment) },\n { discovery: deps.discovery, skills: deps.skills },\n ),\n );\n },\n },\n ],\n [\n 'subagents-steer',\n {\n description: 'Send guidance to a running subagent: /subagents-steer <run-id> <message>',\n handler: async (args, ctx) => {\n const input = args.trim();\n const separator = input.search(/\\s/);\n if (separator === -1 || !input.slice(separator + 1).trim()) {\n notifyError(ctx, 'Usage: /subagents-steer <run-id> <message>');\n return;\n }\n const id = input.slice(0, separator);\n const message = input.slice(separator + 1).trim();\n try {\n deps.management.bindSessionScope(sessionScopeFor(ctx, deps.environment));\n const result = await deps.management.steer(id, message);\n const summary = `Steering ${result.state} for ${id}: ${result.message}`;\n if (result.state === 'failed') notifyError(ctx, summary);\n else notifyInfo(ctx, summary);\n } catch (error) {\n notifyError(ctx, error instanceof Error ? error.message : `Could not steer '${id}'.`);\n }\n },\n },\n ],\n [\n 'subagents-stop',\n {\n description: 'Stop a running subagent: /subagents-stop [run-id]',\n handler: async (args, ctx) => {\n const scope = sessionScopeFor(ctx, deps.environment);\n deps.management.bindSessionScope(scope);\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId(), scope);\n const id = args.trim();\n if (!id) {\n sendSlashText(pi, stoppableRunsReport(jobs.list()));\n return;\n }\n try {\n await deps.management.stop(resolveTrackedRunId(jobs, id));\n // The direct control request is acknowledged by transport delivery. The\n // run's own event stream remains authoritative for its terminal state.\n notifyInfo(ctx, `Stop requested for ${id}. The run reports its own final state once it acknowledges.`);\n } catch (error) {\n // `ManagementActions.stop` throws only for an id that resolves to no\n // run or to more than one. Both are bad user input, not internal\n // faults, so they are notified rather than rethrown at the host - the\n // same treatment `reportKnownErrorOrRethrow` gives a parse error.\n notifyError(ctx, error instanceof Error ? error.message : `Could not stop '${id}'.`);\n }\n },\n },\n ],\n ];\n}\n\n/**\n * The no-argument `/subagents-stop` listing.\n *\n * The predecessor opened a TUI selector overlay here. This reports the same\n * information as text instead, for one reason worth stating rather than\n * hiding: a selector is a second, independent renderer of run state, and this\n * package already has one in `/subagents-fleet` that shows more (live status,\n * transcripts, and the full set of runtime controls including stop). Building\n * a second, weaker one would mean two things to keep in step. Passing an\n * explicit id stays the direct path, and the fleet overlay is the interactive\n * one.\n */\nfunction stoppableRunsReport(runs: readonly TrackedAsyncJob[]): string {\n const stoppable = runs.filter((run) => run.status === 'running' || run.status === 'pending');\n if (stoppable.length === 0) return 'No running subagents to stop.';\n const lines = stoppable.map((run) => `- ${run.runId}${run.status ? ` (${run.status})` : ''}`);\n return [\n 'Running subagents:',\n ...lines,\n '',\n 'Stop one with `/subagents-stop <run-id>`, or open `/subagents-fleet` to inspect and control them interactively.',\n ].join('\\n');\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../services/agentDiscovery/index.cjs"),t=require("../services/sessionPaths/index.cjs"),n=require("../services/modelInfo/index.cjs"),r=require("../services/config/index.cjs"),i=require("../services/webSubagentCatalog/index.cjs"),a=`team`;function o(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.agent==`string`&&t.agent.trim()!==``&&typeof t.task==`string`&&typeof t.fork==`boolean`&&(t.model===void 0||typeof t.model==`string`&&t.model.trim()!==``)&&Object.keys(t).every(e=>[`agent`,`task`,`fork`,`model`].includes(e))}function s(t){let n=new e.AgentDiscoveryService(t.environment),r=t.read??(r=>({agents:n.discover(r,`both`).agents,models:e.resolveActiveTeamModelSpecs(t.environment)??[]}));return{async fetch(e){let a=new URL(e.url);if(e.method===`POST`&&a.pathname===`/run`&&t.launch){let n;try{n=await e.json()}catch{return Response.json({error:`Invalid run request.`},{status:400})}if(!o(n))return Response.json({error:`Invalid run request.`},{status:400});try{return Response.json(await t.launch(n),{status:201})}catch(e){return Response.json({error:e instanceof Error?e.message:String(e)},{status:409})}}if(e.method!==`GET`||a.pathname!==`/catalog`)return Response.json({error:`Not found.`},{status:404});try{n.invalidate();let e=r(t.cwd);return Response.json({cwd:t.cwd,agents:i.presentCatalog(e.agents),models:i.catalogModels(e.agents,e.models)})}catch(e){let t=e instanceof Error?e.message:String(e);return Response.json({error:t},{status:500})}},close:()=>void 0}}function c(e,i){let o=t.createSessionScope(i.sessionId),c=e.asyncJobTracker.forSession(i.sessionId,o),l=async t=>{let a=t.fork?await i.session.forkSource?.():void 0;if(t.fork&&!a)throw Error(`This session cannot capture a fork source.`);let s=(await e.spawnPlanner.spawn({single:{agent:t.agent.trim(),task:t.task.trim(),context:t.fork?`fork`:`fresh`,...t.model?{model:t.model}:{}},cwd:i.cwd,agentScope:`both`,sessionScope:o,environment:i.environment,parentSessionId:i.sessionId,...a?{parentForkSource:a}:{},availableModels:i.model?[n.toModelInfo(i.model)]:[],...i.model?{parentModel:i.model}:{}},r.loadConfig().config)).outcomes[0];if(!s?.runId)throw Error(s?.error??`The agent did not start.`);return c.track(s.runId),{runId:s.runId}};return{basePath:a,start:()=>s({cwd:i.cwd,environment:i.environment,launch:l})}}exports.TEAM_API_BASE_PATH=a,exports.TEAM_CATALOG_ROUTE=`/catalog`,exports.TEAM_RUN_ROUTE=`/run`,exports.createTeamApiHandler=s,exports.createTeamSessionApi=c;
|
|
2
|
+
//# sourceMappingURL=teamSessionApi.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teamSessionApi.cjs","names":["AgentDiscoveryService","resolveActiveTeamModelSpecs","presentCatalog","catalogModels","createSessionScope","toModelInfo","loadConfig"],"sources":["../../src/controllers/teamSessionApi.ts"],"sourcesContent":["import type { DoomHeadlessExecutionContext } from '@agimon-ai/doompi-core/headless';\nimport type { DoomApi, DoomApiHandler } from '@agimon-ai/doompi-core/package-api';\n\nimport { AgentDiscoveryService, resolveActiveTeamModelSpecs } from '../services/agentDiscovery';\nimport { loadConfig } from '../services/config';\nimport { toModelInfo } from '../services/modelInfo';\nimport { createSessionScope } from '../services/sessionPaths';\nimport type { TeamExtensionRuntime } from '../services/teamRuntime';\nimport { catalogModels, presentCatalog, type CatalogAgentInput } from '../services/webSubagentCatalog';\n\nexport const TEAM_API_BASE_PATH = 'team';\nexport const TEAM_CATALOG_ROUTE = '/catalog';\nexport const TEAM_RUN_ROUTE = '/run';\n\nexport interface TeamRunRequest {\n agent: string;\n task: string;\n fork: boolean;\n model?: string;\n}\n\nexport interface TeamCatalogSnapshot {\n agents: CatalogAgentInput[];\n models: string[];\n}\n\nexport interface TeamApiOptions {\n cwd: string;\n environment?: Readonly<NodeJS.ProcessEnv>;\n read?: (cwd: string) => TeamCatalogSnapshot;\n launch?: (request: TeamRunRequest) => Promise<{ runId: string }>;\n}\n\nfunction isRunRequest(value: unknown): value is TeamRunRequest {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n const request = value as Record<string, unknown>;\n return (\n typeof request.agent === 'string' &&\n request.agent.trim() !== '' &&\n typeof request.task === 'string' &&\n typeof request.fork === 'boolean' &&\n (request.model === undefined || (typeof request.model === 'string' && request.model.trim() !== '')) &&\n Object.keys(request).every((key) => ['agent', 'task', 'fork', 'model'].includes(key))\n );\n}\n\n/** Serves catalog discovery and run launch from the selected session process. */\nexport function createTeamApiHandler(options: TeamApiOptions): DoomApiHandler {\n const discovery = new AgentDiscoveryService(options.environment);\n const read =\n options.read ??\n ((cwd: string): TeamCatalogSnapshot => ({\n agents: discovery.discover(cwd, 'both').agents,\n models: resolveActiveTeamModelSpecs(options.environment) ?? [],\n }));\n\n return {\n async fetch(request) {\n const url = new URL(request.url);\n if (request.method === 'POST' && url.pathname === TEAM_RUN_ROUTE && options.launch) {\n let input: unknown;\n try {\n input = await request.json();\n } catch {\n return Response.json({ error: 'Invalid run request.' }, { status: 400 });\n }\n if (!isRunRequest(input)) return Response.json({ error: 'Invalid run request.' }, { status: 400 });\n try {\n return Response.json(await options.launch(input), { status: 201 });\n } catch (error) {\n return Response.json({ error: error instanceof Error ? error.message : String(error) }, { status: 409 });\n }\n }\n if (request.method !== 'GET' || url.pathname !== TEAM_CATALOG_ROUTE) {\n return Response.json({ error: 'Not found.' }, { status: 404 });\n }\n try {\n discovery.invalidate();\n const snapshot = read(options.cwd);\n return Response.json({\n cwd: options.cwd,\n agents: presentCatalog(snapshot.agents),\n models: catalogModels(snapshot.agents, snapshot.models),\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return Response.json({ error: message }, { status: 500 });\n }\n },\n close: () => undefined,\n };\n}\n\n/** One mounted session API, backed by the Team runtime that owns the subagent tool. */\nexport function createTeamSessionApi(runtime: TeamExtensionRuntime, execution: DoomHeadlessExecutionContext): DoomApi {\n const scope = createSessionScope(execution.sessionId);\n const jobs = runtime.asyncJobTracker.forSession(execution.sessionId, scope);\n\n const launch = async (request: TeamRunRequest): Promise<{ runId: string }> => {\n const parentForkSource = request.fork ? await execution.session.forkSource?.() : undefined;\n if (request.fork && !parentForkSource) throw new Error('This session cannot capture a fork source.');\n const plan = await runtime.spawnPlanner.spawn(\n {\n single: {\n agent: request.agent.trim(),\n task: request.task.trim(),\n context: request.fork ? 'fork' : 'fresh',\n ...(request.model ? { model: request.model } : {}),\n },\n cwd: execution.cwd,\n agentScope: 'both',\n sessionScope: scope,\n environment: execution.environment,\n parentSessionId: execution.sessionId,\n ...(parentForkSource ? { parentForkSource } : {}),\n availableModels: execution.model ? [toModelInfo(execution.model)] : [],\n ...(execution.model ? { parentModel: execution.model } : {}),\n },\n loadConfig().config,\n );\n const outcome = plan.outcomes[0];\n if (!outcome?.runId) throw new Error(outcome?.error ?? 'The agent did not start.');\n jobs.track(outcome.runId);\n return { runId: outcome.runId };\n };\n\n return {\n basePath: TEAM_API_BASE_PATH,\n start: () =>\n createTeamApiHandler({\n cwd: execution.cwd,\n environment: execution.environment,\n launch,\n }),\n };\n}\n"],"mappings":"qPAUa,EAAqB,OAuBlC,SAAS,EAAa,EAAyC,CAC7D,GAAI,OAAO,GAAU,WAAY,GAAkB,MAAM,QAAQ,CAAK,EAAG,MAAO,GAChF,IAAM,EAAU,EAChB,OACE,OAAO,EAAQ,OAAU,UACzB,EAAQ,MAAM,KAAK,IAAM,IACzB,OAAO,EAAQ,MAAS,UACxB,OAAO,EAAQ,MAAS,YACvB,EAAQ,QAAU,IAAA,IAAc,OAAO,EAAQ,OAAU,UAAY,EAAQ,MAAM,KAAK,IAAM,KAC/F,OAAO,KAAK,CAAO,CAAC,CAAC,MAAO,GAAQ,CAAC,QAAS,OAAQ,OAAQ,OAAO,CAAC,CAAC,SAAS,CAAG,CAAC,CAExF,CAGA,SAAgB,EAAqB,EAAyC,CAC5E,IAAM,EAAY,IAAIA,EAAAA,sBAAsB,EAAQ,WAAW,EACzD,EACJ,EAAQ,OACN,IAAsC,CACtC,OAAQ,EAAU,SAAS,EAAK,MAAM,CAAC,CAAC,OACxC,OAAQC,EAAAA,4BAA4B,EAAQ,WAAW,GAAK,CAAC,CAC/D,IAEF,MAAO,CACL,MAAM,MAAM,EAAS,CACnB,IAAM,EAAM,IAAI,IAAI,EAAQ,GAAG,EAC/B,GAAI,EAAQ,SAAW,QAAU,EAAI,WAAA,QAA+B,EAAQ,OAAQ,CAClF,IAAI,EACJ,GAAI,CACF,EAAQ,MAAM,EAAQ,KAAK,CAC7B,MAAQ,CACN,OAAO,SAAS,KAAK,CAAE,MAAO,sBAAuB,EAAG,CAAE,OAAQ,GAAI,CAAC,CACzE,CACA,GAAI,CAAC,EAAa,CAAK,EAAG,OAAO,SAAS,KAAK,CAAE,MAAO,sBAAuB,EAAG,CAAE,OAAQ,GAAI,CAAC,EACjG,GAAI,CACF,OAAO,SAAS,KAAK,MAAM,EAAQ,OAAO,CAAK,EAAG,CAAE,OAAQ,GAAI,CAAC,CACnE,OAAS,EAAO,CACd,OAAO,SAAS,KAAK,CAAE,MAAO,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAAE,EAAG,CAAE,OAAQ,GAAI,CAAC,CACzG,CACF,CACA,GAAI,EAAQ,SAAW,OAAS,EAAI,WAAA,WAClC,OAAO,SAAS,KAAK,CAAE,MAAO,YAAa,EAAG,CAAE,OAAQ,GAAI,CAAC,EAE/D,GAAI,CACF,EAAU,WAAW,EACrB,IAAM,EAAW,EAAK,EAAQ,GAAG,EACjC,OAAO,SAAS,KAAK,CACnB,IAAK,EAAQ,IACb,OAAQC,EAAAA,eAAe,EAAS,MAAM,EACtC,OAAQC,EAAAA,cAAc,EAAS,OAAQ,EAAS,MAAM,CACxD,CAAC,CACH,OAAS,EAAO,CACd,IAAM,EAAU,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EACrE,OAAO,SAAS,KAAK,CAAE,MAAO,CAAQ,EAAG,CAAE,OAAQ,GAAI,CAAC,CAC1D,CACF,EACA,UAAa,IAAA,EACf,CACF,CAGA,SAAgB,EAAqB,EAA+B,EAAkD,CACpH,IAAM,EAAQC,EAAAA,mBAAmB,EAAU,SAAS,EAC9C,EAAO,EAAQ,gBAAgB,WAAW,EAAU,UAAW,CAAK,EAEpE,EAAS,KAAO,IAAwD,CAC5E,IAAM,EAAmB,EAAQ,KAAO,MAAM,EAAU,QAAQ,aAAa,EAAI,IAAA,GACjF,GAAI,EAAQ,MAAQ,CAAC,EAAkB,MAAU,MAAM,4CAA4C,EAoBnG,IAAM,GAAU,MAnBG,EAAQ,aAAa,MACtC,CACE,OAAQ,CACN,MAAO,EAAQ,MAAM,KAAK,EAC1B,KAAM,EAAQ,KAAK,KAAK,EACxB,QAAS,EAAQ,KAAO,OAAS,QACjC,GAAI,EAAQ,MAAQ,CAAE,MAAO,EAAQ,KAAM,EAAI,CAAC,CAClD,EACA,IAAK,EAAU,IACf,WAAY,OACZ,aAAc,EACd,YAAa,EAAU,YACvB,gBAAiB,EAAU,UAC3B,GAAI,EAAmB,CAAE,kBAAiB,EAAI,CAAC,EAC/C,gBAAiB,EAAU,MAAQ,CAACC,EAAAA,YAAY,EAAU,KAAK,CAAC,EAAI,CAAC,EACrE,GAAI,EAAU,MAAQ,CAAE,YAAa,EAAU,KAAM,EAAI,CAAC,CAC5D,EACAC,EAAAA,WAAW,CAAC,CAAC,MACf,EAAA,CACqB,SAAS,GAC9B,GAAI,CAAC,GAAS,MAAO,MAAU,MAAM,GAAS,OAAS,0BAA0B,EAEjF,OADA,EAAK,MAAM,EAAQ,KAAK,EACjB,CAAE,MAAO,EAAQ,KAAM,CAChC,EAEA,MAAO,CACL,SAAU,EACV,UACE,EAAqB,CACnB,IAAK,EAAU,IACf,YAAa,EAAU,YACvB,QACF,CAAC,CACL,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AgentDiscoveryService as e,resolveActiveTeamModelSpecs as t}from"../services/agentDiscovery/index.mjs";import{createSessionScope as n}from"../services/sessionPaths/index.mjs";import{toModelInfo as r}from"../services/modelInfo/index.mjs";import{loadConfig as i}from"../services/config/index.mjs";import{catalogModels as a,presentCatalog as o}from"../services/webSubagentCatalog/index.mjs";const s=`team`,c=`/catalog`,l=`/run`;function u(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.agent==`string`&&t.agent.trim()!==``&&typeof t.task==`string`&&typeof t.fork==`boolean`&&(t.model===void 0||typeof t.model==`string`&&t.model.trim()!==``)&&Object.keys(t).every(e=>[`agent`,`task`,`fork`,`model`].includes(e))}function d(n){let r=new e(n.environment),i=n.read??(e=>({agents:r.discover(e,`both`).agents,models:t(n.environment)??[]}));return{async fetch(e){let t=new URL(e.url);if(e.method===`POST`&&t.pathname===`/run`&&n.launch){let t;try{t=await e.json()}catch{return Response.json({error:`Invalid run request.`},{status:400})}if(!u(t))return Response.json({error:`Invalid run request.`},{status:400});try{return Response.json(await n.launch(t),{status:201})}catch(e){return Response.json({error:e instanceof Error?e.message:String(e)},{status:409})}}if(e.method!==`GET`||t.pathname!==`/catalog`)return Response.json({error:`Not found.`},{status:404});try{r.invalidate();let e=i(n.cwd);return Response.json({cwd:n.cwd,agents:o(e.agents),models:a(e.agents,e.models)})}catch(e){let t=e instanceof Error?e.message:String(e);return Response.json({error:t},{status:500})}},close:()=>void 0}}function f(e,t){let a=n(t.sessionId),o=e.asyncJobTracker.forSession(t.sessionId,a),c=async n=>{let s=n.fork?await t.session.forkSource?.():void 0;if(n.fork&&!s)throw Error(`This session cannot capture a fork source.`);let c=(await e.spawnPlanner.spawn({single:{agent:n.agent.trim(),task:n.task.trim(),context:n.fork?`fork`:`fresh`,...n.model?{model:n.model}:{}},cwd:t.cwd,agentScope:`both`,sessionScope:a,environment:t.environment,parentSessionId:t.sessionId,...s?{parentForkSource:s}:{},availableModels:t.model?[r(t.model)]:[],...t.model?{parentModel:t.model}:{}},i().config)).outcomes[0];if(!c?.runId)throw Error(c?.error??`The agent did not start.`);return o.track(c.runId),{runId:c.runId}};return{basePath:s,start:()=>d({cwd:t.cwd,environment:t.environment,launch:c})}}export{s as TEAM_API_BASE_PATH,c as TEAM_CATALOG_ROUTE,l as TEAM_RUN_ROUTE,d as createTeamApiHandler,f as createTeamSessionApi};
|
|
2
|
+
//# sourceMappingURL=teamSessionApi.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teamSessionApi.mjs","names":[],"sources":["../../src/controllers/teamSessionApi.ts"],"sourcesContent":["import type { DoomHeadlessExecutionContext } from '@agimon-ai/doompi-core/headless';\nimport type { DoomApi, DoomApiHandler } from '@agimon-ai/doompi-core/package-api';\n\nimport { AgentDiscoveryService, resolveActiveTeamModelSpecs } from '../services/agentDiscovery';\nimport { loadConfig } from '../services/config';\nimport { toModelInfo } from '../services/modelInfo';\nimport { createSessionScope } from '../services/sessionPaths';\nimport type { TeamExtensionRuntime } from '../services/teamRuntime';\nimport { catalogModels, presentCatalog, type CatalogAgentInput } from '../services/webSubagentCatalog';\n\nexport const TEAM_API_BASE_PATH = 'team';\nexport const TEAM_CATALOG_ROUTE = '/catalog';\nexport const TEAM_RUN_ROUTE = '/run';\n\nexport interface TeamRunRequest {\n agent: string;\n task: string;\n fork: boolean;\n model?: string;\n}\n\nexport interface TeamCatalogSnapshot {\n agents: CatalogAgentInput[];\n models: string[];\n}\n\nexport interface TeamApiOptions {\n cwd: string;\n environment?: Readonly<NodeJS.ProcessEnv>;\n read?: (cwd: string) => TeamCatalogSnapshot;\n launch?: (request: TeamRunRequest) => Promise<{ runId: string }>;\n}\n\nfunction isRunRequest(value: unknown): value is TeamRunRequest {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n const request = value as Record<string, unknown>;\n return (\n typeof request.agent === 'string' &&\n request.agent.trim() !== '' &&\n typeof request.task === 'string' &&\n typeof request.fork === 'boolean' &&\n (request.model === undefined || (typeof request.model === 'string' && request.model.trim() !== '')) &&\n Object.keys(request).every((key) => ['agent', 'task', 'fork', 'model'].includes(key))\n );\n}\n\n/** Serves catalog discovery and run launch from the selected session process. */\nexport function createTeamApiHandler(options: TeamApiOptions): DoomApiHandler {\n const discovery = new AgentDiscoveryService(options.environment);\n const read =\n options.read ??\n ((cwd: string): TeamCatalogSnapshot => ({\n agents: discovery.discover(cwd, 'both').agents,\n models: resolveActiveTeamModelSpecs(options.environment) ?? [],\n }));\n\n return {\n async fetch(request) {\n const url = new URL(request.url);\n if (request.method === 'POST' && url.pathname === TEAM_RUN_ROUTE && options.launch) {\n let input: unknown;\n try {\n input = await request.json();\n } catch {\n return Response.json({ error: 'Invalid run request.' }, { status: 400 });\n }\n if (!isRunRequest(input)) return Response.json({ error: 'Invalid run request.' }, { status: 400 });\n try {\n return Response.json(await options.launch(input), { status: 201 });\n } catch (error) {\n return Response.json({ error: error instanceof Error ? error.message : String(error) }, { status: 409 });\n }\n }\n if (request.method !== 'GET' || url.pathname !== TEAM_CATALOG_ROUTE) {\n return Response.json({ error: 'Not found.' }, { status: 404 });\n }\n try {\n discovery.invalidate();\n const snapshot = read(options.cwd);\n return Response.json({\n cwd: options.cwd,\n agents: presentCatalog(snapshot.agents),\n models: catalogModels(snapshot.agents, snapshot.models),\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return Response.json({ error: message }, { status: 500 });\n }\n },\n close: () => undefined,\n };\n}\n\n/** One mounted session API, backed by the Team runtime that owns the subagent tool. */\nexport function createTeamSessionApi(runtime: TeamExtensionRuntime, execution: DoomHeadlessExecutionContext): DoomApi {\n const scope = createSessionScope(execution.sessionId);\n const jobs = runtime.asyncJobTracker.forSession(execution.sessionId, scope);\n\n const launch = async (request: TeamRunRequest): Promise<{ runId: string }> => {\n const parentForkSource = request.fork ? await execution.session.forkSource?.() : undefined;\n if (request.fork && !parentForkSource) throw new Error('This session cannot capture a fork source.');\n const plan = await runtime.spawnPlanner.spawn(\n {\n single: {\n agent: request.agent.trim(),\n task: request.task.trim(),\n context: request.fork ? 'fork' : 'fresh',\n ...(request.model ? { model: request.model } : {}),\n },\n cwd: execution.cwd,\n agentScope: 'both',\n sessionScope: scope,\n environment: execution.environment,\n parentSessionId: execution.sessionId,\n ...(parentForkSource ? { parentForkSource } : {}),\n availableModels: execution.model ? [toModelInfo(execution.model)] : [],\n ...(execution.model ? { parentModel: execution.model } : {}),\n },\n loadConfig().config,\n );\n const outcome = plan.outcomes[0];\n if (!outcome?.runId) throw new Error(outcome?.error ?? 'The agent did not start.');\n jobs.track(outcome.runId);\n return { runId: outcome.runId };\n };\n\n return {\n basePath: TEAM_API_BASE_PATH,\n start: () =>\n createTeamApiHandler({\n cwd: execution.cwd,\n environment: execution.environment,\n launch,\n }),\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../types/webSubagents.cjs");function t(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function n(e){return t(e)&&typeof e.cwd==`string`&&Array.isArray(e.agents)&&Array.isArray(e.models)&&e.models.every(e=>typeof e==`string`)}function r(){return{frameType:e.SUBAGENT_CATALOG_TYPE,start(t){let r=new Map,i=new Map,a=new Map,o=(e,n)=>{r.get(e.sessionId)===e&&n.cwd===e.cwd&&(i.set(e.sessionId,n),t.publish(e.sessionId,n))};return{payloadFor(e){return r.has(e.sessionId)?i.get(e.sessionId):void 0},sessionAdded(s){a.get(s.sessionId)?.(),r.set(s.sessionId,s),i.delete(s.sessionId);let c=t.directEvents.subscribe(e.SUBAGENT_CATALOG_TYPE,s.sessionId,e=>{n(e)&&o(s,e)},{replayLatest:!0});a.set(s.sessionId,c)},sessionRemoved(e){a.get(e)?.(),a.delete(e),r.delete(e),i.delete(e)},close(){for(let e of a.values())e();a.clear(),r.clear(),i.clear()}}}}}exports.createSubagentCatalogChannel=r;
|
|
2
|
+
//# sourceMappingURL=webSubagentCatalogChannel.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webSubagentCatalogChannel.cjs","names":["SUBAGENT_CATALOG_TYPE"],"sources":["../../src/controllers/webSubagentCatalogChannel.ts"],"sourcesContent":["import type {\n DoomHubChannelHost as HubChannelHost,\n DoomHubChannelSource as HubChannelSource,\n DoomHubSessionScope as HubSessionScope,\n DoomHubChannel as WebHubChannel,\n} from '@agimon-ai/doompi-core/hub-channel';\n\nimport { SUBAGENT_CATALOG_TYPE, type SubagentCatalogPayload } from '../types/webSubagents';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isSubagentCatalogPayload(value: unknown): value is SubagentCatalogPayload {\n return (\n isRecord(value) &&\n typeof value.cwd === 'string' &&\n Array.isArray(value.agents) &&\n Array.isArray(value.models) &&\n value.models.every((model) => typeof model === 'string')\n );\n}\n\n/**\n * The subagent catalog data channel consumes the session-owned catalog event.\n * The direct event bus retains a bounded latest snapshot for late subscribers.\n */\nexport function createSubagentCatalogChannel(): WebHubChannel {\n return {\n frameType: SUBAGENT_CATALOG_TYPE,\n start(host: HubChannelHost) {\n const scopes = new Map<string, HubSessionScope>();\n const latest = new Map<string, SubagentCatalogPayload>();\n const subscriptions = new Map<string, () => void>();\n const publish = (scope: HubSessionScope, payload: SubagentCatalogPayload): void => {\n if (scopes.get(scope.sessionId) !== scope || payload.cwd !== scope.cwd) return;\n latest.set(scope.sessionId, payload);\n host.publish(scope.sessionId, payload);\n };\n const source: HubChannelSource = {\n payloadFor(scope) {\n return scopes.has(scope.sessionId) ? latest.get(scope.sessionId) : undefined;\n },\n sessionAdded(scope) {\n subscriptions.get(scope.sessionId)?.();\n scopes.set(scope.sessionId, scope);\n latest.delete(scope.sessionId);\n const unsubscribe = host.directEvents.subscribe(\n SUBAGENT_CATALOG_TYPE,\n scope.sessionId,\n (value) => {\n if (isSubagentCatalogPayload(value)) publish(scope, value);\n },\n { replayLatest: true },\n );\n subscriptions.set(scope.sessionId, unsubscribe);\n },\n sessionRemoved(sessionId) {\n subscriptions.get(sessionId)?.();\n subscriptions.delete(sessionId);\n scopes.delete(sessionId);\n latest.delete(sessionId);\n },\n close() {\n for (const unsubscribe of subscriptions.values()) unsubscribe();\n subscriptions.clear();\n scopes.clear();\n latest.clear();\n },\n };\n return source;\n },\n };\n}\n"],"mappings":"6CASA,SAAS,EAAS,EAAkD,CAClE,OAAO,OAAO,GAAU,YAAY,GAAkB,CAAC,MAAM,QAAQ,CAAK,CAC5E,CAEA,SAAS,EAAyB,EAAiD,CACjF,OACE,EAAS,CAAK,GACd,OAAO,EAAM,KAAQ,UACrB,MAAM,QAAQ,EAAM,MAAM,GAC1B,MAAM,QAAQ,EAAM,MAAM,GAC1B,EAAM,OAAO,MAAO,GAAU,OAAO,GAAU,QAAQ,CAE3D,CAMA,SAAgB,GAA8C,CAC5D,MAAO,CACL,UAAWA,EAAAA,sBACX,MAAM,EAAsB,CAC1B,IAAM,EAAS,IAAI,IACb,EAAS,IAAI,IACb,EAAgB,IAAI,IACpB,GAAW,EAAwB,IAA0C,CAC7E,EAAO,IAAI,EAAM,SAAS,IAAM,GAAS,EAAQ,MAAQ,EAAM,MACnE,EAAO,IAAI,EAAM,UAAW,CAAO,EACnC,EAAK,QAAQ,EAAM,UAAW,CAAO,EACvC,EAgCA,MAAO,CA9BL,WAAW,EAAO,CAChB,OAAO,EAAO,IAAI,EAAM,SAAS,EAAI,EAAO,IAAI,EAAM,SAAS,EAAI,IAAA,EACrE,EACA,aAAa,EAAO,CAClB,EAAc,IAAI,EAAM,SAAS,CAAC,GAAG,EACrC,EAAO,IAAI,EAAM,UAAW,CAAK,EACjC,EAAO,OAAO,EAAM,SAAS,EAC7B,IAAM,EAAc,EAAK,aAAa,UACpCA,EAAAA,sBACA,EAAM,UACL,GAAU,CACL,EAAyB,CAAK,GAAG,EAAQ,EAAO,CAAK,CAC3D,EACA,CAAE,aAAc,EAAK,CACvB,EACA,EAAc,IAAI,EAAM,UAAW,CAAW,CAChD,EACA,eAAe,EAAW,CACxB,EAAc,IAAI,CAAS,CAAC,GAAG,EAC/B,EAAc,OAAO,CAAS,EAC9B,EAAO,OAAO,CAAS,EACvB,EAAO,OAAO,CAAS,CACzB,EACA,OAAQ,CACN,IAAK,IAAM,KAAe,EAAc,OAAO,EAAG,EAAY,EAC9D,EAAc,MAAM,EACpB,EAAO,MAAM,EACb,EAAO,MAAM,CACf,CAEU,CACd,CACF,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{SUBAGENT_CATALOG_TYPE as e}from"../types/webSubagents.mjs";function t(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function n(e){return t(e)&&typeof e.cwd==`string`&&Array.isArray(e.agents)&&Array.isArray(e.models)&&e.models.every(e=>typeof e==`string`)}function r(){return{frameType:e,start(t){let r=new Map,i=new Map,a=new Map,o=(e,n)=>{r.get(e.sessionId)===e&&n.cwd===e.cwd&&(i.set(e.sessionId,n),t.publish(e.sessionId,n))};return{payloadFor(e){return r.has(e.sessionId)?i.get(e.sessionId):void 0},sessionAdded(s){a.get(s.sessionId)?.(),r.set(s.sessionId,s),i.delete(s.sessionId);let c=t.directEvents.subscribe(e,s.sessionId,e=>{n(e)&&o(s,e)},{replayLatest:!0});a.set(s.sessionId,c)},sessionRemoved(e){a.get(e)?.(),a.delete(e),r.delete(e),i.delete(e)},close(){for(let e of a.values())e();a.clear(),r.clear(),i.clear()}}}}}export{r as createSubagentCatalogChannel};
|
|
2
|
+
//# sourceMappingURL=webSubagentCatalogChannel.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webSubagentCatalogChannel.mjs","names":[],"sources":["../../src/controllers/webSubagentCatalogChannel.ts"],"sourcesContent":["import type {\n DoomHubChannelHost as HubChannelHost,\n DoomHubChannelSource as HubChannelSource,\n DoomHubSessionScope as HubSessionScope,\n DoomHubChannel as WebHubChannel,\n} from '@agimon-ai/doompi-core/hub-channel';\n\nimport { SUBAGENT_CATALOG_TYPE, type SubagentCatalogPayload } from '../types/webSubagents';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isSubagentCatalogPayload(value: unknown): value is SubagentCatalogPayload {\n return (\n isRecord(value) &&\n typeof value.cwd === 'string' &&\n Array.isArray(value.agents) &&\n Array.isArray(value.models) &&\n value.models.every((model) => typeof model === 'string')\n );\n}\n\n/**\n * The subagent catalog data channel consumes the session-owned catalog event.\n * The direct event bus retains a bounded latest snapshot for late subscribers.\n */\nexport function createSubagentCatalogChannel(): WebHubChannel {\n return {\n frameType: SUBAGENT_CATALOG_TYPE,\n start(host: HubChannelHost) {\n const scopes = new Map<string, HubSessionScope>();\n const latest = new Map<string, SubagentCatalogPayload>();\n const subscriptions = new Map<string, () => void>();\n const publish = (scope: HubSessionScope, payload: SubagentCatalogPayload): void => {\n if (scopes.get(scope.sessionId) !== scope || payload.cwd !== scope.cwd) return;\n latest.set(scope.sessionId, payload);\n host.publish(scope.sessionId, payload);\n };\n const source: HubChannelSource = {\n payloadFor(scope) {\n return scopes.has(scope.sessionId) ? latest.get(scope.sessionId) : undefined;\n },\n sessionAdded(scope) {\n subscriptions.get(scope.sessionId)?.();\n scopes.set(scope.sessionId, scope);\n latest.delete(scope.sessionId);\n const unsubscribe = host.directEvents.subscribe(\n SUBAGENT_CATALOG_TYPE,\n scope.sessionId,\n (value) => {\n if (isSubagentCatalogPayload(value)) publish(scope, value);\n },\n { replayLatest: true },\n );\n subscriptions.set(scope.sessionId, unsubscribe);\n },\n sessionRemoved(sessionId) {\n subscriptions.get(sessionId)?.();\n subscriptions.delete(sessionId);\n scopes.delete(sessionId);\n latest.delete(sessionId);\n },\n close() {\n for (const unsubscribe of subscriptions.values()) unsubscribe();\n subscriptions.clear();\n scopes.clear();\n latest.clear();\n },\n };\n return source;\n },\n };\n}\n"],"mappings":"kEASA,SAAS,EAAS,EAAkD,CAClE,OAAO,OAAO,GAAU,YAAY,GAAkB,CAAC,MAAM,QAAQ,CAAK,CAC5E,CAEA,SAAS,EAAyB,EAAiD,CACjF,OACE,EAAS,CAAK,GACd,OAAO,EAAM,KAAQ,UACrB,MAAM,QAAQ,EAAM,MAAM,GAC1B,MAAM,QAAQ,EAAM,MAAM,GAC1B,EAAM,OAAO,MAAO,GAAU,OAAO,GAAU,QAAQ,CAE3D,CAMA,SAAgB,GAA8C,CAC5D,MAAO,CACL,UAAW,EACX,MAAM,EAAsB,CAC1B,IAAM,EAAS,IAAI,IACb,EAAS,IAAI,IACb,EAAgB,IAAI,IACpB,GAAW,EAAwB,IAA0C,CAC7E,EAAO,IAAI,EAAM,SAAS,IAAM,GAAS,EAAQ,MAAQ,EAAM,MACnE,EAAO,IAAI,EAAM,UAAW,CAAO,EACnC,EAAK,QAAQ,EAAM,UAAW,CAAO,EACvC,EAgCA,MAAO,CA9BL,WAAW,EAAO,CAChB,OAAO,EAAO,IAAI,EAAM,SAAS,EAAI,EAAO,IAAI,EAAM,SAAS,EAAI,IAAA,EACrE,EACA,aAAa,EAAO,CAClB,EAAc,IAAI,EAAM,SAAS,CAAC,GAAG,EACrC,EAAO,IAAI,EAAM,UAAW,CAAK,EACjC,EAAO,OAAO,EAAM,SAAS,EAC7B,IAAM,EAAc,EAAK,aAAa,UACpC,EACA,EAAM,UACL,GAAU,CACL,EAAyB,CAAK,GAAG,EAAQ,EAAO,CAAK,CAC3D,EACA,CAAE,aAAc,EAAK,CACvB,EACA,EAAc,IAAI,EAAM,UAAW,CAAW,CAChD,EACA,eAAe,EAAW,CACxB,EAAc,IAAI,CAAS,CAAC,GAAG,EAC/B,EAAc,OAAO,CAAS,EAC9B,EAAO,OAAO,CAAS,EACvB,EAAO,OAAO,CAAS,CACzB,EACA,OAAQ,CACN,IAAK,IAAM,KAAe,EAAc,OAAO,EAAG,EAAY,EAC9D,EAAc,MAAM,EACpB,EAAO,MAAM,EACb,EAAO,MAAM,CACf,CAEU,CACd,CACF,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../types/webSubagents.cjs"),t=/^[\w.-]+$/;function n(e){return typeof e==`object`&&!!e&&Array.isArray(e.runs)}function r(e){return{runs:e.runs.map(({sessionFile:e,...t})=>t)}}function i(){return{frameType:e.SUBAGENT_RUNS_TYPE,start(i){let a=new Map,o=new Map,s=new Map,c=(e,t)=>{a.get(e.sessionId)===e&&(o.set(e.sessionId,t),i.publish(e.sessionId,r(t)))};return{payloadFor(e){let t=a.has(e.sessionId)?o.get(e.sessionId):void 0;return t===void 0?void 0:r(t)},threadJournal(e,n){if(t.test(n))return o.get(e.sessionId)?.runs.find(e=>e.runId===n)?.sessionFile},sessionAdded(t){s.get(t.sessionId)?.(),a.set(t.sessionId,t),o.delete(t.sessionId);let r=i.directEvents.subscribe(e.SUBAGENT_RUNS_TYPE,t.sessionId,e=>{n(e)&&c(t,e)},{replayLatest:!0});s.set(t.sessionId,r)},sessionRemoved(e){s.get(e)?.(),s.delete(e),a.delete(e),o.delete(e)},close(){for(let e of s.values())e();s.clear(),a.clear(),o.clear()}}}}}exports.createSubagentsChannel=i;
|
|
2
|
+
//# sourceMappingURL=webSubagentsChannel.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webSubagentsChannel.cjs","names":["SUBAGENT_RUNS_TYPE"],"sources":["../../src/controllers/webSubagentsChannel.ts"],"sourcesContent":["import type {\n DoomHubChannelSource as HubChannelSource,\n DoomHubSessionScope,\n DoomHubChannel as WebHubChannel,\n} from '@agimon-ai/doompi-core/hub-channel';\n\nimport { SUBAGENT_RUNS_TYPE, type SubagentRun } from '../types/webSubagents';\n\nconst RUN_ID_PATTERN = /^[\\w.-]+$/;\n\ninterface SessionRunProjection extends SubagentRun {\n /** Host-private child transcript path. Never published to the browser. */\n sessionFile?: string;\n}\n\ntype SessionRunProjectionPayload = { runs: SessionRunProjection[] };\ntype SubagentRunsPayload = { runs: SubagentRun[] };\n\nfunction isSubagentRunsPayload(value: unknown): value is SessionRunProjectionPayload {\n return typeof value === 'object' && value !== null && Array.isArray((value as { runs?: unknown }).runs);\n}\n\nfunction publicPayload(payload: SessionRunProjectionPayload): SubagentRunsPayload {\n return { runs: payload.runs.map(({ sessionFile: _sessionFile, ...run }) => run) };\n}\n\n/**\n * The built-in subagents data channel consumes current state from the\n * host-owned direct event bus. Its bounded latest replay seeds late subscribers.\n */\nexport function createSubagentsChannel(): WebHubChannel {\n return {\n frameType: SUBAGENT_RUNS_TYPE,\n start(host) {\n const scopes = new Map<string, DoomHubSessionScope>();\n const latest = new Map<string, SessionRunProjectionPayload>();\n const subscriptions = new Map<string, () => void>();\n const publish = (scope: DoomHubSessionScope, payload: SessionRunProjectionPayload): void => {\n if (scopes.get(scope.sessionId) !== scope) return;\n latest.set(scope.sessionId, payload);\n host.publish(scope.sessionId, publicPayload(payload));\n };\n const source: HubChannelSource = {\n payloadFor(scope) {\n const payload = scopes.has(scope.sessionId) ? latest.get(scope.sessionId) : undefined;\n return payload === undefined ? undefined : publicPayload(payload);\n },\n threadJournal(scope, runId) {\n if (!RUN_ID_PATTERN.test(runId)) return undefined;\n const projected = latest.get(scope.sessionId)?.runs.find((run) => run.runId === runId);\n return projected?.sessionFile;\n },\n sessionAdded(scope) {\n subscriptions.get(scope.sessionId)?.();\n scopes.set(scope.sessionId, scope);\n latest.delete(scope.sessionId);\n const unsubscribe = host.directEvents.subscribe(\n SUBAGENT_RUNS_TYPE,\n scope.sessionId,\n (value) => {\n if (isSubagentRunsPayload(value)) publish(scope, value);\n },\n { replayLatest: true },\n );\n subscriptions.set(scope.sessionId, unsubscribe);\n },\n sessionRemoved(sessionId) {\n subscriptions.get(sessionId)?.();\n subscriptions.delete(sessionId);\n scopes.delete(sessionId);\n latest.delete(sessionId);\n },\n close() {\n for (const unsubscribe of subscriptions.values()) unsubscribe();\n subscriptions.clear();\n scopes.clear();\n latest.clear();\n },\n };\n return source;\n },\n };\n}\n"],"mappings":"6CAQM,EAAiB,YAUvB,SAAS,EAAsB,EAAsD,CACnF,OAAO,OAAO,GAAU,YAAY,GAAkB,MAAM,QAAS,EAA6B,IAAI,CACxG,CAEA,SAAS,EAAc,EAA2D,CAChF,MAAO,CAAE,KAAM,EAAQ,KAAK,KAAK,CAAE,YAAa,EAAc,GAAG,KAAU,CAAG,CAAE,CAClF,CAMA,SAAgB,GAAwC,CACtD,MAAO,CACL,UAAWA,EAAAA,mBACX,MAAM,EAAM,CACV,IAAM,EAAS,IAAI,IACb,EAAS,IAAI,IACb,EAAgB,IAAI,IACpB,GAAW,EAA4B,IAA+C,CACtF,EAAO,IAAI,EAAM,SAAS,IAAM,IACpC,EAAO,IAAI,EAAM,UAAW,CAAO,EACnC,EAAK,QAAQ,EAAM,UAAW,EAAc,CAAO,CAAC,EACtD,EAsCA,MAAO,CApCL,WAAW,EAAO,CAChB,IAAM,EAAU,EAAO,IAAI,EAAM,SAAS,EAAI,EAAO,IAAI,EAAM,SAAS,EAAI,IAAA,GAC5E,OAAO,IAAY,IAAA,GAAY,IAAA,GAAY,EAAc,CAAO,CAClE,EACA,cAAc,EAAO,EAAO,CACrB,KAAe,KAAK,CAAK,EAE9B,OADkB,EAAO,IAAI,EAAM,SAAS,CAAC,EAAE,KAAK,KAAM,GAAQ,EAAI,QAAU,CAAK,CAAA,EACnE,WACpB,EACA,aAAa,EAAO,CAClB,EAAc,IAAI,EAAM,SAAS,CAAC,GAAG,EACrC,EAAO,IAAI,EAAM,UAAW,CAAK,EACjC,EAAO,OAAO,EAAM,SAAS,EAC7B,IAAM,EAAc,EAAK,aAAa,UACpCA,EAAAA,mBACA,EAAM,UACL,GAAU,CACL,EAAsB,CAAK,GAAG,EAAQ,EAAO,CAAK,CACxD,EACA,CAAE,aAAc,EAAK,CACvB,EACA,EAAc,IAAI,EAAM,UAAW,CAAW,CAChD,EACA,eAAe,EAAW,CACxB,EAAc,IAAI,CAAS,CAAC,GAAG,EAC/B,EAAc,OAAO,CAAS,EAC9B,EAAO,OAAO,CAAS,EACvB,EAAO,OAAO,CAAS,CACzB,EACA,OAAQ,CACN,IAAK,IAAM,KAAe,EAAc,OAAO,EAAG,EAAY,EAC9D,EAAc,MAAM,EACpB,EAAO,MAAM,EACb,EAAO,MAAM,CACf,CAEU,CACd,CACF,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{SUBAGENT_RUNS_TYPE as e}from"../types/webSubagents.mjs";const t=/^[\w.-]+$/;function n(e){return typeof e==`object`&&!!e&&Array.isArray(e.runs)}function r(e){return{runs:e.runs.map(({sessionFile:e,...t})=>t)}}function i(){return{frameType:e,start(i){let a=new Map,o=new Map,s=new Map,c=(e,t)=>{a.get(e.sessionId)===e&&(o.set(e.sessionId,t),i.publish(e.sessionId,r(t)))};return{payloadFor(e){let t=a.has(e.sessionId)?o.get(e.sessionId):void 0;return t===void 0?void 0:r(t)},threadJournal(e,n){if(t.test(n))return o.get(e.sessionId)?.runs.find(e=>e.runId===n)?.sessionFile},sessionAdded(t){s.get(t.sessionId)?.(),a.set(t.sessionId,t),o.delete(t.sessionId);let r=i.directEvents.subscribe(e,t.sessionId,e=>{n(e)&&c(t,e)},{replayLatest:!0});s.set(t.sessionId,r)},sessionRemoved(e){s.get(e)?.(),s.delete(e),a.delete(e),o.delete(e)},close(){for(let e of s.values())e();s.clear(),a.clear(),o.clear()}}}}}export{i as createSubagentsChannel};
|
|
2
|
+
//# sourceMappingURL=webSubagentsChannel.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webSubagentsChannel.mjs","names":[],"sources":["../../src/controllers/webSubagentsChannel.ts"],"sourcesContent":["import type {\n DoomHubChannelSource as HubChannelSource,\n DoomHubSessionScope,\n DoomHubChannel as WebHubChannel,\n} from '@agimon-ai/doompi-core/hub-channel';\n\nimport { SUBAGENT_RUNS_TYPE, type SubagentRun } from '../types/webSubagents';\n\nconst RUN_ID_PATTERN = /^[\\w.-]+$/;\n\ninterface SessionRunProjection extends SubagentRun {\n /** Host-private child transcript path. Never published to the browser. */\n sessionFile?: string;\n}\n\ntype SessionRunProjectionPayload = { runs: SessionRunProjection[] };\ntype SubagentRunsPayload = { runs: SubagentRun[] };\n\nfunction isSubagentRunsPayload(value: unknown): value is SessionRunProjectionPayload {\n return typeof value === 'object' && value !== null && Array.isArray((value as { runs?: unknown }).runs);\n}\n\nfunction publicPayload(payload: SessionRunProjectionPayload): SubagentRunsPayload {\n return { runs: payload.runs.map(({ sessionFile: _sessionFile, ...run }) => run) };\n}\n\n/**\n * The built-in subagents data channel consumes current state from the\n * host-owned direct event bus. Its bounded latest replay seeds late subscribers.\n */\nexport function createSubagentsChannel(): WebHubChannel {\n return {\n frameType: SUBAGENT_RUNS_TYPE,\n start(host) {\n const scopes = new Map<string, DoomHubSessionScope>();\n const latest = new Map<string, SessionRunProjectionPayload>();\n const subscriptions = new Map<string, () => void>();\n const publish = (scope: DoomHubSessionScope, payload: SessionRunProjectionPayload): void => {\n if (scopes.get(scope.sessionId) !== scope) return;\n latest.set(scope.sessionId, payload);\n host.publish(scope.sessionId, publicPayload(payload));\n };\n const source: HubChannelSource = {\n payloadFor(scope) {\n const payload = scopes.has(scope.sessionId) ? latest.get(scope.sessionId) : undefined;\n return payload === undefined ? undefined : publicPayload(payload);\n },\n threadJournal(scope, runId) {\n if (!RUN_ID_PATTERN.test(runId)) return undefined;\n const projected = latest.get(scope.sessionId)?.runs.find((run) => run.runId === runId);\n return projected?.sessionFile;\n },\n sessionAdded(scope) {\n subscriptions.get(scope.sessionId)?.();\n scopes.set(scope.sessionId, scope);\n latest.delete(scope.sessionId);\n const unsubscribe = host.directEvents.subscribe(\n SUBAGENT_RUNS_TYPE,\n scope.sessionId,\n (value) => {\n if (isSubagentRunsPayload(value)) publish(scope, value);\n },\n { replayLatest: true },\n );\n subscriptions.set(scope.sessionId, unsubscribe);\n },\n sessionRemoved(sessionId) {\n subscriptions.get(sessionId)?.();\n subscriptions.delete(sessionId);\n scopes.delete(sessionId);\n latest.delete(sessionId);\n },\n close() {\n for (const unsubscribe of subscriptions.values()) unsubscribe();\n subscriptions.clear();\n scopes.clear();\n latest.clear();\n },\n };\n return source;\n },\n };\n}\n"],"mappings":"+DAQA,MAAM,EAAiB,YAUvB,SAAS,EAAsB,EAAsD,CACnF,OAAO,OAAO,GAAU,YAAY,GAAkB,MAAM,QAAS,EAA6B,IAAI,CACxG,CAEA,SAAS,EAAc,EAA2D,CAChF,MAAO,CAAE,KAAM,EAAQ,KAAK,KAAK,CAAE,YAAa,EAAc,GAAG,KAAU,CAAG,CAAE,CAClF,CAMA,SAAgB,GAAwC,CACtD,MAAO,CACL,UAAW,EACX,MAAM,EAAM,CACV,IAAM,EAAS,IAAI,IACb,EAAS,IAAI,IACb,EAAgB,IAAI,IACpB,GAAW,EAA4B,IAA+C,CACtF,EAAO,IAAI,EAAM,SAAS,IAAM,IACpC,EAAO,IAAI,EAAM,UAAW,CAAO,EACnC,EAAK,QAAQ,EAAM,UAAW,EAAc,CAAO,CAAC,EACtD,EAsCA,MAAO,CApCL,WAAW,EAAO,CAChB,IAAM,EAAU,EAAO,IAAI,EAAM,SAAS,EAAI,EAAO,IAAI,EAAM,SAAS,EAAI,IAAA,GAC5E,OAAO,IAAY,IAAA,GAAY,IAAA,GAAY,EAAc,CAAO,CAClE,EACA,cAAc,EAAO,EAAO,CACrB,KAAe,KAAK,CAAK,EAE9B,OADkB,EAAO,IAAI,EAAM,SAAS,CAAC,EAAE,KAAK,KAAM,GAAQ,EAAI,QAAU,CAAK,CAAA,EACnE,WACpB,EACA,aAAa,EAAO,CAClB,EAAc,IAAI,EAAM,SAAS,CAAC,GAAG,EACrC,EAAO,IAAI,EAAM,UAAW,CAAK,EACjC,EAAO,OAAO,EAAM,SAAS,EAC7B,IAAM,EAAc,EAAK,aAAa,UACpC,EACA,EAAM,UACL,GAAU,CACL,EAAsB,CAAK,GAAG,EAAQ,EAAO,CAAK,CACxD,EACA,CAAE,aAAc,EAAK,CACvB,EACA,EAAc,IAAI,EAAM,UAAW,CAAW,CAChD,EACA,eAAe,EAAW,CACxB,EAAc,IAAI,CAAS,CAAC,GAAG,EAC/B,EAAc,OAAO,CAAS,EAC9B,EAAO,OAAO,CAAS,EACvB,EAAO,OAAO,CAAS,CACzB,EACA,OAAQ,CACN,IAAK,IAAM,KAAe,EAAc,OAAO,EAAG,EAAY,EAC9D,EAAc,MAAM,EACpB,EAAO,MAAM,EACb,EAAO,MAAM,CACf,CAEU,CACd,CACF,CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@agimon-ai/doompi-core/delegation");Object.defineProperty(exports,"DOOM_DELEGATION_ACCEPTED_EVENT",{enumerable:!0,get:function(){return e.DOOM_DELEGATION_ACCEPTED_EVENT}}),Object.defineProperty(exports,"DOOM_DELEGATION_CANCELLED_EVENT",{enumerable:!0,get:function(){return e.DOOM_DELEGATION_CANCELLED_EVENT}}),Object.defineProperty(exports,"DOOM_DELEGATION_FINISHED_EVENT",{enumerable:!0,get:function(){return e.DOOM_DELEGATION_FINISHED_EVENT}}),Object.defineProperty(exports,"DOOM_DELEGATION_REQUESTED_EVENT",{enumerable:!0,get:function(){return e.DOOM_DELEGATION_REQUESTED_EVENT}}),Object.defineProperty(exports,"DOOM_DELEGATION_SERVICE",{enumerable:!0,get:function(){return e.DOOM_DELEGATION_SERVICE}}),Object.defineProperty(exports,"DOOM_DELEGATION_STARTED_EVENT",{enumerable:!0,get:function(){return e.DOOM_DELEGATION_STARTED_EVENT}}),Object.defineProperty(exports,"DOOM_DELEGATION_UPDATED_EVENT",{enumerable:!0,get:function(){return e.DOOM_DELEGATION_UPDATED_EVENT}}),Object.defineProperty(exports,"DelegationAcceptedSchema",{enumerable:!0,get:function(){return e.DelegationAcceptedSchema}}),Object.defineProperty(exports,"DelegationCancelSchema",{enumerable:!0,get:function(){return e.DelegationCancelSchema}}),Object.defineProperty(exports,"DelegationRequestSchema",{enumerable:!0,get:function(){return e.DelegationRequestSchema}}),Object.defineProperty(exports,"DelegationResultSchema",{enumerable:!0,get:function(){return e.DelegationResultSchema}}),Object.defineProperty(exports,"DelegationStartedSchema",{enumerable:!0,get:function(){return e.DelegationStartedSchema}}),Object.defineProperty(exports,"DelegationStatusSchema",{enumerable:!0,get:function(){return e.DelegationStatusSchema}}),Object.defineProperty(exports,"DelegationUpdateSchema",{enumerable:!0,get:function(){return e.DelegationUpdateSchema}}),Object.defineProperty(exports,"readDoomDelegationService",{enumerable:!0,get:function(){return e.readDoomDelegationService}});
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { DOOM_DELEGATION_ACCEPTED_EVENT, DOOM_DELEGATION_CANCELLED_EVENT, DOOM_DELEGATION_FINISHED_EVENT, DOOM_DELEGATION_REQUESTED_EVENT, DOOM_DELEGATION_SERVICE, DOOM_DELEGATION_STARTED_EVENT, DOOM_DELEGATION_UPDATED_EVENT, DelegationAccepted, DelegationAcceptedSchema, DelegationCancel, DelegationCancelSchema, DelegationRequest, DelegationRequestSchema, DelegationResult, DelegationResultSchema, DelegationStarted, DelegationStartedSchema, DelegationStatus, DelegationStatusSchema, DelegationUpdate, DelegationUpdateSchema, DoomDelegationService, readDoomDelegationService } from "@agimon-ai/doompi-core/delegation";
|
|
2
|
+
export { DOOM_DELEGATION_ACCEPTED_EVENT, DOOM_DELEGATION_CANCELLED_EVENT, DOOM_DELEGATION_FINISHED_EVENT, DOOM_DELEGATION_REQUESTED_EVENT, DOOM_DELEGATION_SERVICE, DOOM_DELEGATION_STARTED_EVENT, DOOM_DELEGATION_UPDATED_EVENT, type DelegationAccepted, DelegationAcceptedSchema, type DelegationCancel, DelegationCancelSchema, type DelegationRequest, DelegationRequestSchema, type DelegationResult, DelegationResultSchema, type DelegationStarted, DelegationStartedSchema, type DelegationStatus, DelegationStatusSchema, type DelegationUpdate, DelegationUpdateSchema, type DoomDelegationService, readDoomDelegationService };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { DOOM_DELEGATION_ACCEPTED_EVENT, DOOM_DELEGATION_CANCELLED_EVENT, DOOM_DELEGATION_FINISHED_EVENT, DOOM_DELEGATION_REQUESTED_EVENT, DOOM_DELEGATION_SERVICE, DOOM_DELEGATION_STARTED_EVENT, DOOM_DELEGATION_UPDATED_EVENT, DelegationAccepted, DelegationAcceptedSchema, DelegationCancel, DelegationCancelSchema, DelegationRequest, DelegationRequestSchema, DelegationResult, DelegationResultSchema, DelegationStarted, DelegationStartedSchema, DelegationStatus, DelegationStatusSchema, DelegationUpdate, DelegationUpdateSchema, DoomDelegationService, readDoomDelegationService } from "@agimon-ai/doompi-core/delegation";
|
|
2
|
+
export { DOOM_DELEGATION_ACCEPTED_EVENT, DOOM_DELEGATION_CANCELLED_EVENT, DOOM_DELEGATION_FINISHED_EVENT, DOOM_DELEGATION_REQUESTED_EVENT, DOOM_DELEGATION_SERVICE, DOOM_DELEGATION_STARTED_EVENT, DOOM_DELEGATION_UPDATED_EVENT, type DelegationAccepted, DelegationAcceptedSchema, type DelegationCancel, DelegationCancelSchema, type DelegationRequest, DelegationRequestSchema, type DelegationResult, DelegationResultSchema, type DelegationStarted, DelegationStartedSchema, type DelegationStatus, DelegationStatusSchema, type DelegationUpdate, DelegationUpdateSchema, type DoomDelegationService, readDoomDelegationService };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{DOOM_DELEGATION_ACCEPTED_EVENT as e,DOOM_DELEGATION_CANCELLED_EVENT as t,DOOM_DELEGATION_FINISHED_EVENT as n,DOOM_DELEGATION_REQUESTED_EVENT as r,DOOM_DELEGATION_SERVICE as i,DOOM_DELEGATION_STARTED_EVENT as a,DOOM_DELEGATION_UPDATED_EVENT as o,DelegationAcceptedSchema as s,DelegationCancelSchema as c,DelegationRequestSchema as l,DelegationResultSchema as u,DelegationStartedSchema as d,DelegationStatusSchema as f,DelegationUpdateSchema as p,readDoomDelegationService as m}from"@agimon-ai/doompi-core/delegation";export{e as DOOM_DELEGATION_ACCEPTED_EVENT,t as DOOM_DELEGATION_CANCELLED_EVENT,n as DOOM_DELEGATION_FINISHED_EVENT,r as DOOM_DELEGATION_REQUESTED_EVENT,i as DOOM_DELEGATION_SERVICE,a as DOOM_DELEGATION_STARTED_EVENT,o as DOOM_DELEGATION_UPDATED_EVENT,s as DelegationAcceptedSchema,c as DelegationCancelSchema,l as DelegationRequestSchema,u as DelegationResultSchema,d as DelegationStartedSchema,f as DelegationStatusSchema,p as DelegationUpdateSchema,m as readDoomDelegationService};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./schemas/team/delegation.cjs");exports.SUBAGENT_DELEGATION_CANCEL_EVENT=e.SUBAGENT_DELEGATION_CANCEL_EVENT,exports.SUBAGENT_DELEGATION_PROTOCOL_VERSION=e.SUBAGENT_DELEGATION_PROTOCOL_VERSION,exports.SUBAGENT_DELEGATION_REQUEST_EVENT=e.SUBAGENT_DELEGATION_REQUEST_EVENT,exports.SUBAGENT_DELEGATION_RESPONSE_EVENT=e.SUBAGENT_DELEGATION_RESPONSE_EVENT,exports.SUBAGENT_DELEGATION_STARTED_EVENT=e.SUBAGENT_DELEGATION_STARTED_EVENT,exports.SUBAGENT_DELEGATION_UPDATE_EVENT=e.SUBAGENT_DELEGATION_UPDATE_EVENT,exports.SUBAGENT_DELEGATION_V2_PROTOCOL_VERSION=e.SUBAGENT_DELEGATION_V2_PROTOCOL_VERSION;var t=require("@agimon-ai/doompi-core/delegation");Object.keys(t).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return t[e]}})});
|