@agimon-ai/doompi-team 0.0.1-alpha.2 → 0.0.1-alpha.21
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 +33 -17
- package/dist/adapters/asyncJobTracker.cjs +2 -0
- package/dist/adapters/asyncJobTracker.cjs.map +1 -0
- package/dist/adapters/asyncJobTracker.mjs +2 -0
- package/dist/adapters/asyncJobTracker.mjs.map +1 -0
- package/dist/adapters/atomicJson.cjs +2 -0
- package/dist/adapters/atomicJson.cjs.map +1 -0
- package/dist/adapters/atomicJson.mjs +2 -0
- package/dist/adapters/atomicJson.mjs.map +1 -0
- package/dist/adapters/pi/extension.cjs +2 -0
- package/dist/adapters/pi/extension.cjs.map +1 -0
- package/dist/adapters/pi/extension.mjs +2 -0
- package/dist/adapters/pi/extension.mjs.map +1 -0
- package/dist/adapters/pollScheduler.cjs +2 -0
- package/dist/adapters/pollScheduler.cjs.map +1 -0
- package/dist/adapters/pollScheduler.mjs +2 -0
- package/dist/adapters/pollScheduler.mjs.map +1 -0
- package/dist/adapters/process/childTranscript.cjs +5 -0
- package/dist/adapters/process/childTranscript.cjs.map +1 -0
- package/dist/adapters/process/childTranscript.mjs +5 -0
- package/dist/adapters/process/childTranscript.mjs.map +1 -0
- package/dist/adapters/process/env.cjs +2 -0
- package/dist/adapters/process/env.cjs.map +1 -0
- package/dist/adapters/process/env.d.cts +69 -0
- package/dist/adapters/process/env.d.cts.map +1 -0
- package/dist/adapters/process/env.d.mts +69 -0
- package/dist/adapters/process/env.d.mts.map +1 -0
- package/dist/adapters/process/env.mjs +2 -0
- package/dist/adapters/process/env.mjs.map +1 -0
- package/dist/adapters/process/sdkRunnerEntry.cjs +2 -0
- package/dist/adapters/process/sdkRunnerEntry.cjs.map +1 -0
- package/dist/adapters/process/sdkRunnerEntry.d.cts +5 -0
- package/dist/adapters/process/sdkRunnerEntry.d.cts.map +1 -0
- package/dist/adapters/process/sdkRunnerEntry.d.mts +5 -0
- package/dist/adapters/process/sdkRunnerEntry.d.mts.map +1 -0
- package/dist/adapters/process/sdkRunnerEntry.mjs +2 -0
- package/dist/adapters/process/sdkRunnerEntry.mjs.map +1 -0
- package/dist/adapters/processTerminal.cjs +2 -0
- package/dist/adapters/processTerminal.cjs.map +1 -0
- package/dist/adapters/processTerminal.mjs +2 -0
- package/dist/adapters/processTerminal.mjs.map +1 -0
- package/dist/adapters/resultWatcher.cjs +2 -0
- package/dist/adapters/resultWatcher.cjs.map +1 -0
- package/dist/adapters/resultWatcher.mjs +2 -0
- package/dist/adapters/resultWatcher.mjs.map +1 -0
- package/dist/adapters/runIdResolver.cjs +2 -0
- package/dist/adapters/runIdResolver.cjs.map +1 -0
- package/dist/adapters/runIdResolver.mjs +2 -0
- package/dist/adapters/runIdResolver.mjs.map +1 -0
- package/dist/adapters/runRegistry.cjs +2 -0
- package/dist/adapters/runRegistry.cjs.map +1 -0
- package/dist/adapters/runRegistry.mjs +2 -0
- package/dist/adapters/runRegistry.mjs.map +1 -0
- package/dist/adapters/scopeOwner.cjs +2 -0
- package/dist/adapters/scopeOwner.cjs.map +1 -0
- package/dist/adapters/scopeOwner.mjs +2 -0
- package/dist/adapters/scopeOwner.mjs.map +1 -0
- package/dist/adapters/staleRunReconciler.cjs +2 -0
- package/dist/adapters/staleRunReconciler.cjs.map +1 -0
- package/dist/adapters/staleRunReconciler.mjs +2 -0
- package/dist/adapters/staleRunReconciler.mjs.map +1 -0
- package/dist/adapters/statusReader.cjs +2 -0
- package/dist/adapters/statusReader.cjs.map +1 -0
- package/dist/adapters/statusReader.mjs +2 -0
- package/dist/adapters/statusReader.mjs.map +1 -0
- package/dist/adapters/suspendedRuns.cjs +6 -0
- package/dist/adapters/suspendedRuns.cjs.map +1 -0
- package/dist/adapters/suspendedRuns.mjs +6 -0
- package/dist/adapters/suspendedRuns.mjs.map +1 -0
- package/dist/api/backgroundWork.cjs +1 -1
- package/dist/api/backgroundWork.d.cts +2 -2
- package/dist/api/backgroundWork.d.mts +2 -2
- package/dist/api/backgroundWork.mjs +1 -1
- package/dist/api/capabilityCeiling.cjs +1 -1
- package/dist/api/capabilityCeiling.d.cts +3 -3
- package/dist/api/capabilityCeiling.d.mts +3 -3
- package/dist/api/capabilityCeiling.mjs +1 -2
- package/dist/api/delegation.cjs +1 -1
- package/dist/api/delegation.d.cts +1 -1
- package/dist/api/delegation.d.mts +1 -1
- package/dist/api/delegation.mjs +1 -1
- package/dist/api/teamSnapshot.cjs +1 -1
- package/dist/api/teamSnapshot.d.cts +2 -2
- package/dist/api/teamSnapshot.d.mts +2 -2
- package/dist/api/teamSnapshot.mjs +1 -2
- package/dist/commands/slash/chainExpression.cjs.map +1 -0
- package/dist/commands/slash/chainExpression.mjs.map +1 -0
- package/dist/commands/slash/doctor.cjs +5 -0
- package/dist/commands/slash/doctor.cjs.map +1 -0
- package/dist/commands/slash/doctor.mjs +5 -0
- package/dist/{slash/doctor.cjs.map → commands/slash/doctor.mjs.map} +1 -1
- package/dist/{slash → commands/slash}/slashCommands.cjs +1 -1
- package/dist/commands/slash/slashCommands.cjs.map +1 -0
- package/dist/{slash → commands/slash}/slashCommands.mjs +2 -2
- package/dist/commands/slash/slashCommands.mjs.map +1 -0
- package/dist/commands/slash/spawnRequestMapping.cjs.map +1 -0
- package/dist/commands/slash/spawnRequestMapping.mjs.map +1 -0
- package/dist/commands/slash/subagentLaunch.cjs +2 -0
- package/dist/commands/slash/subagentLaunch.cjs.map +1 -0
- package/dist/commands/slash/subagentLaunch.mjs +2 -0
- package/dist/commands/slash/subagentLaunch.mjs.map +1 -0
- package/dist/container/globalBridge.cjs.map +1 -1
- package/dist/container/globalBridge.d.cts +1 -1
- package/dist/container/globalBridge.d.mts +1 -1
- package/dist/container/globalBridge.mjs.map +1 -1
- package/dist/container/index.cjs +1 -1
- package/dist/container/index.cjs.map +1 -1
- package/dist/container/index.d.cts +2 -1
- package/dist/container/index.d.cts.map +1 -1
- package/dist/container/index.d.mts +2 -1
- package/dist/container/index.d.mts.map +1 -1
- package/dist/container/index.mjs +1 -1
- package/dist/container/index.mjs.map +1 -1
- package/dist/container/modules/agents.cjs +1 -1
- package/dist/container/modules/agents.cjs.map +1 -1
- package/dist/container/modules/agents.mjs +1 -1
- package/dist/container/modules/agents.mjs.map +1 -1
- package/dist/container/modules/core.cjs +1 -1
- package/dist/container/modules/core.cjs.map +1 -1
- package/dist/container/modules/core.mjs +1 -1
- package/dist/container/modules/core.mjs.map +1 -1
- package/dist/container/modules/extensions.cjs +1 -1
- package/dist/container/modules/extensions.cjs.map +1 -1
- package/dist/container/modules/extensions.mjs +1 -1
- package/dist/container/modules/extensions.mjs.map +1 -1
- package/dist/container/modules/intercom.cjs +1 -1
- package/dist/container/modules/intercom.cjs.map +1 -1
- package/dist/container/modules/intercom.mjs +1 -1
- package/dist/container/modules/intercom.mjs.map +1 -1
- package/dist/container/modules/runs.cjs +1 -1
- package/dist/container/modules/runs.cjs.map +1 -1
- package/dist/container/modules/runs.mjs +1 -1
- package/dist/container/modules/runs.mjs.map +1 -1
- package/dist/container/types.cjs +1 -1
- package/dist/container/types.cjs.map +1 -1
- package/dist/container/types.d.cts +1 -0
- package/dist/container/types.d.cts.map +1 -1
- package/dist/container/types.d.mts +1 -0
- package/dist/container/types.d.mts.map +1 -1
- package/dist/container/types.mjs +1 -1
- package/dist/container/types.mjs.map +1 -1
- 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 -1
- package/dist/env.mjs.map +1 -1
- package/dist/extensions/config.cjs.map +1 -1
- package/dist/extensions/config.mjs.map +1 -1
- package/dist/extensions/delegationBridge.cjs.map +1 -1
- package/dist/extensions/delegationBridge.mjs.map +1 -1
- package/dist/extensions/doom.cjs +1 -1
- package/dist/extensions/doom.cjs.map +1 -1
- package/dist/extensions/doom.mjs +1 -1
- package/dist/extensions/doom.mjs.map +1 -1
- package/dist/extensions/fablePlanBridge.cjs +1 -1
- package/dist/extensions/fablePlanBridge.cjs.map +1 -1
- package/dist/extensions/fablePlanBridge.mjs +1 -1
- package/dist/extensions/fablePlanBridge.mjs.map +1 -1
- package/dist/extensions/managementActions.cjs +1 -1
- package/dist/extensions/managementActions.cjs.map +1 -1
- package/dist/extensions/managementActions.mjs +1 -1
- package/dist/extensions/managementActions.mjs.map +1 -1
- package/dist/extensions/operationJournal.cjs +1 -1
- package/dist/extensions/operationJournal.cjs.map +1 -1
- package/dist/extensions/operationJournal.mjs +1 -1
- package/dist/extensions/operationJournal.mjs.map +1 -1
- package/dist/extensions/orchestratorPrompt.cjs +5 -6
- package/dist/extensions/orchestratorPrompt.cjs.map +1 -1
- package/dist/extensions/orchestratorPrompt.mjs +5 -6
- package/dist/extensions/orchestratorPrompt.mjs.map +1 -1
- package/dist/extensions/schemas.mjs.map +1 -1
- package/dist/extensions/spawnPlan.cjs +3 -2
- package/dist/extensions/spawnPlan.cjs.map +1 -1
- package/dist/extensions/spawnPlan.mjs +3 -2
- package/dist/extensions/spawnPlan.mjs.map +1 -1
- package/dist/extensions/standard.cjs +1 -1
- package/dist/extensions/standard.cjs.map +1 -1
- package/dist/extensions/standard.mjs +1 -1
- package/dist/extensions/standard.mjs.map +1 -1
- package/dist/extensions/statusViews.cjs +1 -1
- package/dist/extensions/statusViews.cjs.map +1 -1
- package/dist/extensions/statusViews.mjs +2 -2
- package/dist/extensions/statusViews.mjs.map +1 -1
- package/dist/extensions/subagentPromptRuntime.cjs +11 -11
- package/dist/extensions/subagentPromptRuntime.cjs.map +1 -1
- package/dist/extensions/subagentPromptRuntime.d.cts.map +1 -1
- package/dist/extensions/subagentPromptRuntime.d.mts.map +1 -1
- package/dist/extensions/subagentPromptRuntime.mjs +5 -5
- package/dist/extensions/subagentPromptRuntime.mjs.map +1 -1
- package/dist/extensions/subagentTool.cjs +5 -6
- package/dist/extensions/subagentTool.cjs.map +1 -1
- package/dist/extensions/subagentTool.mjs +5 -6
- package/dist/extensions/subagentTool.mjs.map +1 -1
- package/dist/extensions/toolDescription.cjs +1 -1
- package/dist/extensions/toolDescription.cjs.map +1 -1
- package/dist/extensions/toolDescription.mjs +1 -1
- package/dist/extensions/toolDescription.mjs.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/runs/background/cliRunnerEntry.cjs +1 -2
- package/dist/runs/background/cliRunnerEntry.mjs +1 -2
- package/dist/runs/sdkRunnerEntry.cjs +1 -2
- package/dist/runs/sdkRunnerEntry.d.cts +2 -1
- package/dist/runs/sdkRunnerEntry.d.mts +2 -1
- package/dist/runs/sdkRunnerEntry.mjs +1 -2
- package/dist/schemas/team/backgroundWork.cjs +2 -0
- package/dist/schemas/team/backgroundWork.cjs.map +1 -0
- package/dist/{protocol → schemas/team}/backgroundWork.d.cts +2 -2
- package/dist/schemas/team/backgroundWork.d.cts.map +1 -0
- package/dist/{protocol → schemas/team}/backgroundWork.d.mts +2 -2
- package/dist/schemas/team/backgroundWork.d.mts.map +1 -0
- package/dist/schemas/team/backgroundWork.mjs +2 -0
- package/dist/{protocol/backgroundWork.cjs.map → schemas/team/backgroundWork.mjs.map} +1 -1
- package/dist/schemas/team/capabilityCeiling.cjs +2 -0
- package/dist/schemas/team/capabilityCeiling.cjs.map +1 -0
- package/dist/{protocol → schemas/team}/capabilityCeiling.d.cts +3 -3
- package/dist/schemas/team/capabilityCeiling.d.cts.map +1 -0
- package/dist/{protocol → schemas/team}/capabilityCeiling.d.mts +3 -3
- 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/{protocol → schemas/team}/delegation.d.cts +1 -1
- package/dist/schemas/team/delegation.d.cts.map +1 -0
- package/dist/{protocol → schemas/team}/delegation.d.mts +1 -1
- 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/agents/discovery.cjs +2 -0
- package/dist/services/agents/discovery.cjs.map +1 -0
- package/dist/services/agents/discovery.mjs +2 -0
- package/dist/services/agents/discovery.mjs.map +1 -0
- package/dist/services/agents/frontmatter.cjs.map +1 -0
- package/dist/{agents → services/agents}/frontmatter.mjs +1 -1
- package/dist/services/agents/frontmatter.mjs.map +1 -0
- package/dist/services/agents/loader.cjs +2 -0
- package/dist/services/agents/loader.cjs.map +1 -0
- package/dist/services/agents/loader.mjs +2 -0
- package/dist/services/agents/loader.mjs.map +1 -0
- package/dist/services/agents/memory.cjs +3 -0
- package/dist/services/agents/memory.cjs.map +1 -0
- package/dist/{agents → services/agents}/memory.mjs +1 -1
- package/dist/services/agents/memory.mjs.map +1 -0
- package/dist/services/agents/projectRoot.cjs +2 -0
- package/dist/services/agents/projectRoot.cjs.map +1 -0
- package/dist/services/agents/projectRoot.mjs +2 -0
- package/dist/services/agents/projectRoot.mjs.map +1 -0
- package/dist/services/agents/settings.cjs +2 -0
- package/dist/services/agents/settings.cjs.map +1 -0
- package/dist/services/agents/settings.mjs +2 -0
- package/dist/services/agents/settings.mjs.map +1 -0
- package/dist/services/agents/skills.cjs +0 -0
- package/dist/services/agents/skills.cjs.map +1 -0
- package/dist/services/agents/skills.mjs +5 -0
- package/dist/services/agents/skills.mjs.map +1 -0
- package/dist/{agents → services/agents}/types.d.cts +4 -4
- package/dist/services/agents/types.d.cts.map +1 -0
- package/dist/{agents → services/agents}/types.d.mts +4 -4
- package/dist/services/agents/types.d.mts.map +1 -0
- package/dist/services/api/backgroundWork.cjs +1 -0
- package/dist/services/api/backgroundWork.d.cts +1 -0
- package/dist/services/api/backgroundWork.d.mts +1 -0
- package/dist/services/api/backgroundWork.mjs +1 -0
- package/dist/services/api/capabilityCeiling.cjs +1 -0
- package/dist/services/api/capabilityCeiling.d.cts +2 -0
- package/dist/services/api/capabilityCeiling.d.mts +2 -0
- package/dist/services/api/capabilityCeiling.mjs +2 -0
- package/dist/services/api/capabilityCeiling.mjs.map +1 -0
- package/dist/services/api/teamSnapshot.cjs +1 -0
- package/dist/services/api/teamSnapshot.d.cts +1 -0
- package/dist/services/api/teamSnapshot.d.mts +1 -0
- package/dist/services/api/teamSnapshot.mjs +2 -0
- package/dist/services/api/teamSnapshot.mjs.map +1 -0
- package/dist/services/intercom/intercomBridge.cjs.map +1 -0
- package/dist/services/intercom/intercomBridge.mjs.map +1 -0
- package/dist/services/intercom/nativeTeamChannel.cjs +5 -0
- package/dist/services/intercom/nativeTeamChannel.cjs.map +1 -0
- package/dist/{intercom → services/intercom}/nativeTeamChannel.d.cts +1 -1
- package/dist/services/intercom/nativeTeamChannel.d.cts.map +1 -0
- package/dist/{intercom → services/intercom}/nativeTeamChannel.d.mts +1 -1
- package/dist/services/intercom/nativeTeamChannel.d.mts.map +1 -0
- package/dist/services/intercom/nativeTeamChannel.mjs +5 -0
- package/dist/services/intercom/nativeTeamChannel.mjs.map +1 -0
- package/dist/services/intercom/supervisorControlChannel.cjs +2 -0
- package/dist/services/intercom/supervisorControlChannel.cjs.map +1 -0
- package/dist/{intercom → services/intercom}/supervisorControlChannel.mjs +1 -1
- package/dist/services/intercom/supervisorControlChannel.mjs.map +1 -0
- package/dist/services/runs/background/asyncExecution.cjs +2 -0
- package/dist/services/runs/background/asyncExecution.cjs.map +1 -0
- package/dist/services/runs/background/asyncExecution.mjs +2 -0
- package/dist/services/runs/background/asyncExecution.mjs.map +1 -0
- package/dist/services/runs/background/asyncJobTracker.cjs +1 -0
- package/dist/services/runs/background/asyncJobTracker.mjs +2 -0
- package/dist/services/runs/background/asyncJobTracker.mjs.map +1 -0
- package/dist/services/runs/background/cliRunnerEntry.cjs +2 -0
- package/dist/services/runs/background/cliRunnerEntry.cjs.map +1 -0
- package/dist/services/runs/background/cliRunnerEntry.mjs +2 -0
- package/dist/services/runs/background/cliRunnerEntry.mjs.map +1 -0
- package/dist/services/runs/background/completionBatcher.cjs.map +1 -0
- package/dist/services/runs/background/completionBatcher.mjs +2 -0
- package/dist/services/runs/background/completionBatcher.mjs.map +1 -0
- package/dist/{runs → services/runs}/background/notify.cjs +1 -1
- package/dist/services/runs/background/notify.cjs.map +1 -0
- package/dist/{runs → services/runs}/background/notify.mjs +1 -1
- package/dist/services/runs/background/notify.mjs.map +1 -0
- package/dist/services/runs/background/parentWatchdog.cjs.map +1 -0
- package/dist/services/runs/background/parentWatchdog.mjs.map +1 -0
- package/dist/services/runs/background/processTerminal.cjs +1 -0
- package/dist/services/runs/background/processTerminal.mjs +2 -0
- package/dist/services/runs/background/processTerminal.mjs.map +1 -0
- package/dist/services/runs/background/resultWatcher.cjs +1 -0
- package/dist/services/runs/background/resultWatcher.mjs +2 -0
- package/dist/services/runs/background/resultWatcher.mjs.map +1 -0
- package/dist/services/runs/background/runIdResolver.cjs +1 -0
- package/dist/services/runs/background/runIdResolver.mjs +2 -0
- package/dist/services/runs/background/runIdResolver.mjs.map +1 -0
- package/dist/services/runs/background/runnerBootstrap.cjs +2 -0
- package/dist/services/runs/background/runnerBootstrap.cjs.map +1 -0
- package/dist/services/runs/background/runnerBootstrap.mjs +2 -0
- package/dist/services/runs/background/runnerBootstrap.mjs.map +1 -0
- package/dist/services/runs/background/runnerExecution.cjs +2 -0
- package/dist/services/runs/background/runnerExecution.cjs.map +1 -0
- package/dist/services/runs/background/runnerExecution.mjs +2 -0
- package/dist/services/runs/background/runnerExecution.mjs.map +1 -0
- package/dist/{runs → services/runs}/background/runnerReporting.cjs +2 -2
- package/dist/services/runs/background/runnerReporting.cjs.map +1 -0
- package/dist/{runs → services/runs}/background/runnerReporting.mjs +2 -2
- package/dist/services/runs/background/runnerReporting.mjs.map +1 -0
- package/dist/services/runs/background/runnerTeamMembership.cjs +2 -0
- package/dist/services/runs/background/runnerTeamMembership.cjs.map +1 -0
- package/dist/services/runs/background/runnerTeamMembership.mjs +2 -0
- package/dist/services/runs/background/runnerTeamMembership.mjs.map +1 -0
- package/dist/services/runs/background/spawnHandshake.cjs +2 -0
- package/dist/services/runs/background/spawnHandshake.cjs.map +1 -0
- package/dist/services/runs/background/spawnHandshake.mjs +2 -0
- package/dist/services/runs/background/spawnHandshake.mjs.map +1 -0
- package/dist/services/runs/background/staleRunReconciler.cjs +1 -0
- package/dist/services/runs/background/staleRunReconciler.mjs +2 -0
- package/dist/services/runs/background/staleRunReconciler.mjs.map +1 -0
- package/dist/services/runs/background/statusReader.cjs +1 -0
- package/dist/services/runs/background/statusReader.mjs +2 -0
- package/dist/services/runs/background/statusReader.mjs.map +1 -0
- package/dist/services/runs/background/statusWriter.cjs +2 -0
- package/dist/services/runs/background/statusWriter.cjs.map +1 -0
- package/dist/services/runs/background/statusWriter.mjs +2 -0
- package/dist/services/runs/background/statusWriter.mjs.map +1 -0
- package/dist/services/runs/background/subagentWait.cjs +2 -0
- package/dist/services/runs/background/subagentWait.cjs.map +1 -0
- package/dist/services/runs/background/subagentWait.mjs +2 -0
- package/dist/services/runs/background/subagentWait.mjs.map +1 -0
- package/dist/{runs/background/terminalPersistence.mjs → services/runs/background/terminalPersistence.cjs} +2 -2
- package/dist/services/runs/background/terminalPersistence.cjs.map +1 -0
- package/dist/services/runs/background/terminalPersistence.mjs +2 -0
- package/dist/services/runs/background/terminalPersistence.mjs.map +1 -0
- package/dist/services/runs/extensionErrorTelemetry.cjs +2 -0
- package/dist/services/runs/extensionErrorTelemetry.cjs.map +1 -0
- package/dist/services/runs/extensionErrorTelemetry.mjs +2 -0
- package/dist/services/runs/extensionErrorTelemetry.mjs.map +1 -0
- package/dist/services/runs/registry/processGroup.cjs.map +1 -0
- package/dist/services/runs/registry/processGroup.mjs.map +1 -0
- package/dist/services/runs/registry/runRegistry.cjs +1 -0
- package/dist/services/runs/registry/runRegistry.mjs +2 -0
- package/dist/services/runs/registry/runRegistry.mjs.map +1 -0
- package/dist/services/runs/registry/sessionLifecycle.cjs +2 -0
- package/dist/services/runs/registry/sessionLifecycle.cjs.map +1 -0
- package/dist/services/runs/registry/sessionLifecycle.mjs +2 -0
- package/dist/services/runs/registry/sessionLifecycle.mjs.map +1 -0
- package/dist/services/runs/registry/suspendedRuns.cjs +1 -0
- package/dist/services/runs/registry/suspendedRuns.mjs +2 -0
- package/dist/services/runs/registry/suspendedRuns.mjs.map +1 -0
- package/dist/services/runs/sdkRunnerEntry.cjs +1 -0
- package/dist/services/runs/sdkRunnerEntry.mjs +1 -0
- package/dist/services/runs/shared/claudeFableProfile.cjs +4 -0
- package/dist/services/runs/shared/claudeFableProfile.cjs.map +1 -0
- package/dist/services/runs/shared/claudeFableProfile.mjs +4 -0
- package/dist/services/runs/shared/claudeFableProfile.mjs.map +1 -0
- package/dist/services/runs/shared/depthGuard.cjs +2 -0
- package/dist/services/runs/shared/depthGuard.cjs.map +1 -0
- package/dist/services/runs/shared/depthGuard.mjs +2 -0
- package/dist/services/runs/shared/depthGuard.mjs.map +1 -0
- package/dist/services/runs/shared/mcpDirectToolAllowlist.cjs +2 -0
- package/dist/services/runs/shared/mcpDirectToolAllowlist.cjs.map +1 -0
- package/dist/services/runs/shared/mcpDirectToolAllowlist.mjs +2 -0
- package/dist/services/runs/shared/mcpDirectToolAllowlist.mjs.map +1 -0
- package/dist/services/runs/shared/modelFallback.cjs +2 -0
- package/dist/services/runs/shared/modelFallback.cjs.map +1 -0
- package/dist/services/runs/shared/modelFallback.mjs +2 -0
- package/dist/services/runs/shared/modelFallback.mjs.map +1 -0
- package/dist/services/runs/shared/modelScope.cjs +2 -0
- package/dist/services/runs/shared/modelScope.cjs.map +1 -0
- package/dist/services/runs/shared/modelScope.mjs +2 -0
- package/dist/services/runs/shared/modelScope.mjs.map +1 -0
- package/dist/services/runs/shared/nestedPath.cjs +2 -0
- package/dist/services/runs/shared/nestedPath.cjs.map +1 -0
- package/dist/services/runs/shared/nestedPath.mjs +2 -0
- package/dist/services/runs/shared/nestedPath.mjs.map +1 -0
- package/dist/services/runs/shared/piArgs.cjs +2 -0
- package/dist/services/runs/shared/piArgs.cjs.map +1 -0
- package/dist/services/runs/shared/piArgs.mjs +2 -0
- package/dist/services/runs/shared/piArgs.mjs.map +1 -0
- package/dist/services/runs/shared/piSpawn.cjs +2 -0
- package/dist/services/runs/shared/piSpawn.cjs.map +1 -0
- package/dist/services/runs/shared/piSpawn.mjs +2 -0
- package/dist/services/runs/shared/piSpawn.mjs.map +1 -0
- package/dist/services/runs/shared/runWithConcurrency.cjs +2 -0
- package/dist/services/runs/shared/runWithConcurrency.cjs.map +1 -0
- package/dist/services/runs/shared/runWithConcurrency.d.cts +25 -0
- package/dist/services/runs/shared/runWithConcurrency.d.cts.map +1 -0
- package/dist/services/runs/shared/runWithConcurrency.d.mts +25 -0
- package/dist/services/runs/shared/runWithConcurrency.d.mts.map +1 -0
- package/dist/services/runs/shared/runWithConcurrency.mjs +2 -0
- package/dist/services/runs/shared/runWithConcurrency.mjs.map +1 -0
- package/dist/services/runs/shared/runtimeRegistry.cjs +2 -0
- package/dist/services/runs/shared/runtimeRegistry.cjs.map +1 -0
- package/dist/services/runs/shared/runtimeRegistry.mjs +2 -0
- package/dist/services/runs/shared/runtimeRegistry.mjs.map +1 -0
- package/dist/services/runs/shared/structuredOutput.cjs +2 -0
- package/dist/{runs → services/runs}/shared/structuredOutput.cjs.map +1 -1
- package/dist/services/runs/shared/structuredOutput.mjs +2 -0
- package/dist/{runs → services/runs}/shared/structuredOutput.mjs.map +1 -1
- package/dist/services/runs/shared/toolAvailability.cjs +2 -0
- package/dist/services/runs/shared/toolAvailability.cjs.map +1 -0
- package/dist/services/runs/shared/toolAvailability.mjs +2 -0
- package/dist/services/runs/shared/toolAvailability.mjs.map +1 -0
- package/dist/services/runs/shared/toolBudget.cjs +2 -0
- package/dist/services/runs/shared/toolBudget.cjs.map +1 -0
- package/dist/services/runs/shared/toolBudget.mjs +2 -0
- package/dist/services/runs/shared/toolBudget.mjs.map +1 -0
- package/dist/shared/artifacts.cjs.map +1 -1
- package/dist/shared/artifacts.mjs.map +1 -1
- package/dist/shared/atomicJson.cjs +1 -2
- package/dist/shared/atomicJson.mjs +1 -1
- package/dist/shared/atomicJson.mjs.map +1 -1
- package/dist/shared/childTranscript.cjs +1 -5
- package/dist/shared/childTranscript.mjs +1 -4
- package/dist/shared/childTranscript.mjs.map +1 -1
- package/dist/shared/fileSystemRetry.cjs +1 -1
- package/dist/shared/fileSystemRetry.cjs.map +1 -1
- package/dist/shared/fileSystemRetry.mjs +1 -1
- package/dist/shared/fileSystemRetry.mjs.map +1 -1
- package/dist/shared/formatters.cjs.map +1 -1
- package/dist/shared/formatters.mjs.map +1 -1
- package/dist/shared/paths.cjs +1 -1
- package/dist/shared/paths.cjs.map +1 -1
- package/dist/shared/paths.mjs +1 -1
- package/dist/shared/paths.mjs.map +1 -1
- package/dist/shared/pollScheduler.cjs +1 -2
- package/dist/shared/pollScheduler.mjs +1 -1
- package/dist/shared/pollScheduler.mjs.map +1 -1
- package/dist/shared/scopeOwner.cjs +1 -2
- package/dist/shared/scopeOwner.mjs +1 -1
- package/dist/shared/scopeOwner.mjs.map +1 -1
- package/dist/tui/agentCatalog.cjs +1 -1
- package/dist/tui/agentCatalog.cjs.map +1 -1
- package/dist/tui/agentCatalog.mjs +1 -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 +1 -1
- package/dist/tui/completionNotice.cjs.map +1 -1
- package/dist/tui/completionNotice.mjs +1 -1
- package/dist/tui/completionNotice.mjs.map +1 -1
- 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.map +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 +1 -1
- package/dist/tui/fleetTranscript.cjs.map +1 -1
- package/dist/tui/fleetTranscript.mjs +1 -1
- package/dist/tui/fleetTranscript.mjs.map +1 -1
- package/dist/tui/register.cjs +1 -1
- package/dist/tui/register.cjs.map +1 -1
- package/dist/tui/register.mjs +1 -1
- package/dist/tui/register.mjs.map +1 -1
- 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.d.cts → types/index.d.cts} +2 -2
- package/dist/types/index.d.cts.map +1 -0
- package/dist/{types.d.mts → types/index.d.mts} +2 -2
- package/dist/types/index.d.mts.map +1 -0
- package/package.json +23 -16
- 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.map +0 -1
- 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.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.map +0 -1
- package/dist/agents/types.d.mts.map +0 -1
- package/dist/api/capabilityCeiling.mjs.map +0 -1
- package/dist/api/teamSnapshot.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/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/intercom/intercomBridge.cjs.map +0 -1
- 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.map +0 -1
- 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.map +0 -1
- package/dist/protocol/backgroundWork.cjs +0 -2
- package/dist/protocol/backgroundWork.d.cts.map +0 -1
- 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.map +0 -1
- 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.map +0 -1
- 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/cliRunnerEntry.cjs.map +0 -1
- package/dist/runs/background/cliRunnerEntry.mjs.map +0 -1
- 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.map +0 -1
- package/dist/runs/background/notify.mjs.map +0 -1
- package/dist/runs/background/parentWatchdog.cjs.map +0 -1
- 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.map +0 -1
- 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.map +0 -1
- package/dist/runs/registry/processGroup.cjs.map +0 -1
- 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.map +0 -1
- 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.mjs +0 -2
- 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/atomicJson.cjs.map +0 -1
- package/dist/shared/childTranscript.cjs.map +0 -1
- package/dist/shared/pollScheduler.cjs.map +0 -1
- package/dist/shared/scopeOwner.cjs.map +0 -1
- package/dist/slash/chainExpression.cjs.map +0 -1
- package/dist/slash/chainExpression.mjs.map +0 -1
- package/dist/slash/doctor.cjs +0 -5
- package/dist/slash/doctor.mjs +0 -5
- package/dist/slash/doctor.mjs.map +0 -1
- package/dist/slash/slashCommands.cjs.map +0 -1
- package/dist/slash/slashCommands.mjs.map +0 -1
- package/dist/slash/spawnRequestMapping.cjs.map +0 -1
- 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/types.d.cts.map +0 -1
- package/dist/types.d.mts.map +0 -1
- /package/dist/{slash → commands/slash}/chainExpression.cjs +0 -0
- /package/dist/{slash → commands/slash}/chainExpression.mjs +0 -0
- /package/dist/{slash → commands/slash}/spawnRequestMapping.cjs +0 -0
- /package/dist/{slash → commands/slash}/spawnRequestMapping.mjs +0 -0
- /package/dist/{protocol → schemas/team}/delegation.cjs +0 -0
- /package/dist/{protocol → schemas/team}/delegation.mjs +0 -0
- /package/dist/{agents → services/agents}/frontmatter.cjs +0 -0
- /package/dist/{intercom → services/intercom}/intercomBridge.cjs +0 -0
- /package/dist/{intercom → services/intercom}/intercomBridge.mjs +0 -0
- /package/dist/{runs → services/runs}/background/completionBatcher.cjs +0 -0
- /package/dist/{runs → services/runs}/background/parentWatchdog.cjs +0 -0
- /package/dist/{runs → services/runs}/background/parentWatchdog.mjs +0 -0
- /package/dist/{runs → services/runs}/registry/processGroup.cjs +0 -0
- /package/dist/{runs → services/runs}/registry/processGroup.mjs +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import{__esmMin as e}from"../_virtual/_rolldown/runtime.mjs";import{
|
|
2
|
-
`)}function K(e){let
|
|
3
|
-
`)}function J(e,t,n){if(typeof e[t]!=`string`||!e[t].trim())throw m(`action='${n}' requires nonblank '${t}'.`,`Correct the request and retry.`)}function
|
|
4
|
-
`)}`,!0,`Call subagent({"action":"agents"}) to verify exact agent names, correct only the failed requests, or ask the user if a different delegation approach is needed.`);let c=
|
|
5
|
-
`),{spawn:i,started:a.length,failed:o.length});return E(e,r.record,c),c}executeAgents(e,t){let n=e.cwd??t.cwd,r=G(e.scope);if(!e.name){let e=this.discovery.discover(n,r);return
|
|
6
|
-
`),{outcome:i})}case O.stop:{let t=y(a,e.id),n=this.management.stop(t,e.reason);return B(`Stop requested for '${t}'.`,{control:n})}case O.steer:{let t=y(a,e.id),r=this.tracker.get(t)?.runtime;if(r&&!ne(r))throw new f(`unsupported_operation`,`Run '${t}' uses '${r}', which does not support steering.`,!1,`Use subagent({"action":"stop","id":"${t}"}) to terminate it.`);let i=await this.management.steer(t,e.message,void 0,n);return B(`Steer request '${i.requestId}' for '${t}' is ${i.state}: ${i.message}`,{steer:i})}case O.suspended:{let e=C(d());return B(e.length?b(e):`No suspended subagents in this session.`,{suspended:e.map(q)})}case O.restore:{let n=d(),a=C(n).find(t=>t.runId===e.id);if(!a)throw new f(`run_not_found`,`No suspended run matches '${e.id}'.`,!1,`Call subagent({"action":"suspended"}) and retry with an exact id.`);if(!S(a))throw new f(`not_resumable`,`Suspended run '${e.id}' does not have complete, readable Pi recovery state.`,!1,`Submit a new explicit run request instead of restoring this record.`);let o=this.trackOutcomes(await this.planner.spawn({single:{agent:a.agent,...a.inlineAgent?{inlineAgent:a.inlineAgent}:{},task:a.task,cwd:a.cwd,...a.model?{model:a.model}:{},sessionFile:a.sessionFile},cwd:a.cwd,agentScope:`both`,runtime:`pi`,availableModels:h(t.modelRegistry),...i?{operationId:i}:{},...r?{preallocatedRunIds:r}:{}},T().config),t).outcomes[0];if(!o?.runId)throw new f(`not_resumable`,`Could not restore '${e.id}': ${o?.error??`the spawn produced no run.`}`,!0,`Inspect suspended state, then submit a new explicit run if recovery is not possible.`);return oe(n,e.id),B(`Restored '${e.id}' as '${o.runId}', continuing its transcript.`,{restore:{...o,restoredFrom:e.id}})}}}buildTool(){return{name:X,label:`Subagent`,description:F,parameters:A,prepareArguments:Y,execute:async(e,t,n,r,i)=>{let a=Y(t),o=H(a);if(o&&r?.(V(o,a.action)),a.action===O.run)return this.executeRun(e,a,i);if(a.action===O.agents)return this.executeAgents(a,i);if(!(a.action===O.steer||a.action===O.stop||a.action===O.restore))return this.executeManagement(a,i,n);let s=D(e,a,a.action===O.restore?[z()]:[]);if(s.kind===`replay`){if(s.record.state===`completed`&&s.record.result)return s.record.result;throw new f(`delivery_unconfirmed`,`Operation '${e}' is already pending.`,!0,`Inspect run status before retrying this control operation.`)}let c=await this.executeManagement(a,i,n,s.record.runIds,e);return E(e,s.record,c),c}}}},Q=r([R(),l(0,L(a.SpawnPlanner)),l(1,L(a.ManagementActions)),l(2,L(a.AsyncJobTracker)),l(3,L(a.AgentDiscoveryService)),l(4,L(a.SubagentWaiter)),s(`design:paramtypes`,[Object,Object,Object,Object,Object])],Q)}));$();export{Q as SubagentToolService,$ as init_subagentTool};
|
|
1
|
+
import{__esmMin as e}from"../_virtual/_rolldown/runtime.mjs";import{__decorate as t,init_decorate as n}from"../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.mjs";import{DOOM_TEAM_TYPES as r,init_types as i}from"../container/types.mjs";import{agentHasWriteTools as a,init_memory as o}from"../services/agents/memory.mjs";import{__decorateMetadata as s,init_decorateMetadata as c}from"../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorateMetadata.mjs";import{__decorateParam as l,init_decorateParam as u}from"../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorateParam.mjs";import{init_paths as ee,requireCurrentSessionScope as d}from"../shared/paths.mjs";import{DoomTeamExpectedError as f,init_errors as p,invalidRequest as m}from"../shared/errors.mjs";import{authenticatedModelInfos as h,init_modelResolution as te}from"../shared/modelResolution.mjs";import{init_modelFallback as g,normalizeParentModel as _}from"../services/runs/shared/modelFallback.mjs";import{init_runtimeRegistry as v,isPiRuntime as ne}from"../services/runs/shared/runtimeRegistry.mjs";import{captureSessionForkSource as re,init_spawnPlan as y}from"./spawnPlan.mjs";import{resolveTrackedRunId as b}from"../adapters/asyncJobTracker.mjs";import{init_asyncJobTracker as x}from"../services/runs/background/asyncJobTracker.mjs";import{clearSuspendedRun as S,formatSuspendedRuns as ie,isSuspendedRunResumable as C,listSuspendedRuns as w}from"../adapters/suspendedRuns.mjs";import{init_suspendedRuns as ae}from"../services/runs/registry/suspendedRuns.mjs";import{init_subagentToolRender as oe,renderSubagentCall as se,renderSubagentResult as ce}from"../tui/subagentToolRender.mjs";import{init_config as le,loadConfig as T}from"./config.mjs";import{completeOperation as E,init_operationJournal as D,startOperation as O}from"./operationJournal.mjs";import{SUBAGENT_ACTIONS as k,SUBAGENT_ACTION_FIELDS as A,SubagentParams as j,init_schemas as M}from"./schemas.mjs";import{formatFleetView as N,formatRunTranscript as P,init_statusViews as F}from"./statusViews.mjs";import{SUBAGENT_TOOL_DESCRIPTION as I,init_toolDescription as L}from"./toolDescription.mjs";import{inject as R,injectable as z}from"inversify";import{randomUUID as B}from"node:crypto";function V(e,t){return{content:[{type:`text`,text:e}],details:t}}function H(e,t){return V(e,{action:t,partial:!0})}function U(e){switch(e.action){case k.run:return`Starting ${e.requests.length} subagent${e.requests.length===1?``:`s`}...`;case k.steer:return`Steering subagent ${e.id}...`;case k.stop:return`Requesting stop for subagent ${e.id}...`;case k.restore:return`Restoring subagent ${e.id}...`;default:return}}function W(e,t){try{return e.getAllTools().some(e=>e.name===t)}catch{return!1}}function G(e){return e??`both`}function ue(e){return[`Executable agents:`,...e.length?e.toSorted((e,t)=>e.name.localeCompare(t.name)).map(e=>`- ${e.name} (${e.source}): ${e.description}`):[`- (none)`]].join(`
|
|
2
|
+
`)}function K(e){let t=[...e.tools??[],...(e.mcpDirectTools??[]).map(e=>`mcp:${e}`)];return{name:e.name,source:e.source,description:e.description,runtime:e.runtime??`pi`,writeCapable:a(e),...e.model?{model:e.model}:{},...e.fallbackModels?.length?{fallbackModels:e.fallbackModels}:{},...t.length?{tools:t}:{}}}function q(e){return{...e,resumable:C(e)}}function de(e){let t=K(e);return[`Agent: ${e.name} (${e.source})`,`Description: ${e.description}`,`Runtime: ${String(t.runtime)}`,`Write capable: ${t.writeCapable?`yes`:`no`}`,...e.model?[`Model: ${e.model}`]:[],...Array.isArray(t.tools)?[`Tools: ${t.tools.join(`, `)}`]:[]].join(`
|
|
3
|
+
`)}function J(e,t,n){if(typeof e[t]!=`string`||!e[t].trim())throw m(`action='${n}' requires nonblank '${t}'.`,`Correct the request and retry.`)}function fe(e){if(!e||typeof e!=`object`||Array.isArray(e))return e;let t=e;if(typeof t.action!=`string`||!Z.has(t.action)||t.action===k.run||typeof t.model!=`string`)return e;let{model:n,...r}=t;return r}function Y(e){let t=fe(e);if(!t||typeof t!=`object`||Array.isArray(t))throw m(`subagent parameters must be an object.`,`Call subagent with one documented action shape.`);let n=t,r=n.action;if(typeof r!=`string`||!Z.has(r))throw m(`Unsupported or missing subagent action ${JSON.stringify(r)}.`,`Use one of: ${[...Z].join(`, `)}.`);let i=A[r],a=Object.keys(n).filter(e=>!i.includes(e));if(a.length)throw m(`action='${r}' does not accept: ${a.join(`, `)}.`,`Remove unknown fields and retry.`);if(r===k.run&&(!Array.isArray(n.requests)||n.requests.length===0))throw m(`action='run' requires a nonempty 'requests' array.`,`Add at least one agent and task.`);return r===k.steer&&(J(n,`id`,r),J(n,`message`,r)),(r===k.stop||r===k.restore)&&J(n,`id`,r),t}var X,Z,Q,$=e((()=>{i(),o(),x(),ae(),g(),v(),p(),te(),ee(),oe(),le(),D(),M(),y(),F(),L(),c(),u(),n(),X=`subagent`,Z=new Set(Object.values(k)),Q=class{registeredHosts=new WeakSet;constructor(e,t,n,r){this.planner=e,this.management=t,this.tracker=n,this.discovery=r}registerTool(e){if(!this.registeredHosts.has(e)){if(W(e,`subagent`))throw new f(`tool_conflict`,`A foreign '${X}' tool is already registered.`,!1,`Disable the competing extension, then reload Doom Team.`);e.registerTool(this.buildTool()),this.registeredHosts.add(e)}}trackOutcomes(e,t){let n=this.tracker.forSession(t.sessionManager.getSessionId());for(let t of e.outcomes)t.runId&&n.track(t.runId);return e}buildSpawnRequest(e,t,n,r){let i=t.requests.map(e=>{if(!e.agent.trim()||!e.task.trim())throw m(`Every run request requires nonblank agent and task values.`,`Correct the request and retry.`);return{agent:e.agent.trim(),...e.inlineAgent?{inlineAgent:e.inlineAgent}:{},task:e.task.trim(),...e.cwd?{cwd:e.cwd}:{},...e.model?{model:e.model}:{},...e.runtime?{runtime:e.runtime}:{}}}),a=re(n.sessionManager,`tool`),o=_(n.model);return{tasks:i,cwd:n.cwd,agentScope:G(t.scope),parentSessionId:n.sessionManager.getSessionId(),...a?{parentSessionFile:a.sessionFile,parentLeafId:a.leafId}:{},...t.concurrency===void 0?{}:{concurrency:t.concurrency},...t.artifacts===void 0?{}:{artifacts:t.artifacts},availableModels:h(n.modelRegistry),...o?{parentModel:o}:{},operationId:e,preallocatedRunIds:r}}async executeRun(e,t,n){let r=O(e,t,t.requests.map(()=>B()));if(r.kind===`replay`){if(r.record.state===`completed`&&r.record.result)return r.record.result;throw new f(`delivery_unconfirmed`,`Operation '${e}' is already pending for runs: ${r.record.runIds.join(`, `)}.`,!0,`Call subagent({"action":"status"}) and do not submit the run again.`)}let i=this.trackOutcomes(await this.planner.spawn(this.buildSpawnRequest(e,t,n,r.record.runIds),T().config),n),a=i.outcomes.filter(e=>e.runId),o=i.outcomes.filter(e=>!e.runId),s=i.outcomes.map(e=>`- ${e.agent}: ${e.runId?`started as ${e.runId}`:`failed: ${e.error??`unknown error`}`}${e.warning?`\n Warning: ${e.warning}`:``}`);if(a.length===0&&o.length>0)throw new f(`runtime_unavailable`,`No requested subagent started.\n${s.join(`
|
|
4
|
+
`)}`,!0,`Call subagent({"action":"agents"}) to verify exact agent names, correct only the failed requests, or ask the user if a different delegation approach is needed.`);let c=V([`Run request: started ${a.length}/${i.outcomes.length} background agents; failed ${o.length}.`,...s,...a.length>0?[``,`The subagent${a.length===1?` is`:`s are`} now running in the background independently of this turn. Completion will arrive asynchronously as a notification. Continue non-overlapping work, or end your turn.`]:[],...o.length>0?[``,`Do not retry the whole request because some runs already started. Inspect the failed entries and submit only corrected replacements for those items.`]:[]].join(`
|
|
5
|
+
`),{spawn:i,started:a.length,failed:o.length});return E(e,r.record,c),c}executeAgents(e,t){let n=e.cwd??t.cwd,r=G(e.scope);if(!e.name){let e=this.discovery.discover(n,r);return V(ue(e.agents),{agents:e.agents.map(K)})}let i=this.discovery.find(n,r,e.name);if(!i){let t=this.discovery.discover(n,r).agents.map(e=>e.name).toSorted();throw new f(`agent_not_found`,`No executable agent matches '${e.name}'.${t.length?` Available: ${t.join(`, `)}.`:``}`,!1,`Call subagent({"action":"agents"}) and retry with an exact name.`)}return V(de(i),{agent:K(i)})}async executeManagement(e,t,n,r,i){let a=this.tracker.forSession(t.sessionManager.getSessionId());switch(e.action){case k.status:{let t=w(d());if(!(`id`in e)){if(`transcriptLines`in e&&e.transcriptLines!==void 0)throw m(`transcriptLines requires a run id.`,`Add id or omit transcriptLines for fleet status.`);let n=a.list();return V(N(n,Date.now(),t),{fleet:n,suspended:t.map(q)})}let n=e.id;if(!n)throw m(`transcriptLines requires a run id.`,`Add id or omit transcriptLines for fleet status.`);let r=t.find(e=>e.runId===n);if(r&&e.transcriptLines===void 0){let e=C(r)?`Restore it with { action: "restore", id: "${r.runId}" }.`:`It is not resumable; submit a new explicit run.`;return V(`Run '${r.runId}' is suspended. ${e}`,{suspended:q(r)})}let i=this.management.status(n);if(!i.runDir&&!i.resultPath&&!r)throw new f(`run_not_found`,`No run matches '${n}'.`,!1,`Call subagent({"action":"status"}) and retry with an exact id.`);return e.transcriptLines===void 0?V(i.status?`Run '${i.runId}': ${i.status.state}`:`Run '${i.runId}' has no status yet.`,{status:i}):V(P(i.status,e.transcriptLines??80),{transcript:{runId:i.runId}})}case k.stop:{let t=b(a,e.id),n=this.management.stop(t,e.reason);return V(`Stop requested for '${t}'.`,{control:n})}case k.steer:{let t=b(a,e.id),r=this.tracker.get(t)?.runtime;if(r&&!ne(r))throw new f(`unsupported_operation`,`Run '${t}' uses '${r}', which does not support steering.`,!1,`Use subagent({"action":"stop","id":"${t}"}) to terminate it.`);let i=await this.management.steer(t,e.message,void 0,n);return V(`Steer request '${i.requestId}' for '${t}' is ${i.state}: ${i.message}`,{steer:i})}case k.suspended:{let e=w(d());return V(e.length?ie(e):`No suspended subagents in this session.`,{suspended:e.map(q)})}case k.restore:{let n=d(),a=w(n).find(t=>t.runId===e.id);if(!a)throw new f(`run_not_found`,`No suspended run matches '${e.id}'.`,!1,`Call subagent({"action":"suspended"}) and retry with an exact id.`);if(!C(a))throw new f(`not_resumable`,`Suspended run '${e.id}' does not have complete, readable Pi recovery state.`,!1,`Submit a new explicit run request instead of restoring this record.`);let o=this.trackOutcomes(await this.planner.spawn({single:{agent:a.agent,...a.inlineAgent?{inlineAgent:a.inlineAgent}:{},task:a.task,cwd:a.cwd,...a.model?{model:a.model}:{},sessionFile:a.sessionFile},cwd:a.cwd,agentScope:`both`,runtime:`pi`,availableModels:h(t.modelRegistry),...i?{operationId:i}:{},...r?{preallocatedRunIds:r}:{}},T().config),t).outcomes[0];if(!o?.runId)throw new f(`not_resumable`,`Could not restore '${e.id}': ${o?.error??`the spawn produced no run.`}`,!0,`Inspect suspended state, then submit a new explicit run if recovery is not possible.`);return S(n,e.id),V(`Restored '${e.id}' as '${o.runId}', continuing its transcript.`,{restore:{...o,restoredFrom:e.id}})}}}buildTool(){return{name:X,label:`Subagent`,description:I,parameters:j,prepareArguments:Y,renderShell:`self`,renderCall:(e,t)=>se(Y(e),t),renderResult:(e,t,n)=>ce(e,t,n),execute:async(e,t,n,r,i)=>{let a=Y(t),o=U(a);if(o&&r?.(H(o,a.action)),a.action===k.run)return this.executeRun(e,a,i);if(a.action===k.agents)return this.executeAgents(a,i);if(!(a.action===k.steer||a.action===k.stop||a.action===k.restore))return this.executeManagement(a,i,n);let s=O(e,a,a.action===k.restore?[B()]:[]);if(s.kind===`replay`){if(s.record.state===`completed`&&s.record.result)return s.record.result;throw new f(`delivery_unconfirmed`,`Operation '${e}' is already pending.`,!0,`Inspect run status before retrying this control operation.`)}let c=await this.executeManagement(a,i,n,s.record.runIds,e);return E(e,s.record,c),c}}}},Q=t([z(),l(0,R(r.SpawnPlanner)),l(1,R(r.ManagementActions)),l(2,R(r.AsyncJobTracker)),l(3,R(r.AgentDiscoveryService)),s(`design:paramtypes`,[Object,Object,Object,Object])],Q)}));$();export{Q as SubagentToolService,$ as init_subagentTool};
|
|
7
6
|
//# sourceMappingURL=subagentTool.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagentTool.mjs","names":[],"sources":["../../src/extensions/subagentTool.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { AgentToolResult } from '@earendil-works/pi-agent-core';\nimport type { ExtensionAPI, ExtensionContext, ToolDefinition } from '@earendil-works/pi-coding-agent';\nimport { inject, injectable } from 'inversify';\n\nimport { agentHasWriteTools } from '../agents/memory.ts';\nimport type { AgentConfig, AgentScope, IAgentDiscoveryService } from '../agents/types.ts';\nimport { DOOM_TEAM_TYPES } from '../container/types.ts';\nimport { resolveTrackedRunId, type IAsyncJobTracker } from '../runs/background/asyncJobTracker.ts';\nimport type { ISubagentWaiter, WaitForMode } from '../runs/background/subagentWait.ts';\nimport {\n clearSuspendedRun,\n formatSuspendedRuns,\n isSuspendedRunResumable,\n listSuspendedRuns,\n type SuspendedRun,\n} from '../runs/registry/suspendedRuns.ts';\nimport { isPiRuntime } from '../runs/shared/runtimeRegistry.ts';\nimport { normalizeParentModel } from '../runs/shared/modelFallback.ts';\nimport { authenticatedModelInfos } from '../shared/modelResolution.ts';\nimport { requireCurrentSessionScope } from '../shared/paths.ts';\nimport { loadConfig } from './config.ts';\nimport { DoomTeamExpectedError, invalidRequest } from '../shared/errors.ts';\nimport type { IManagementActions, StatusActionResult } from './managementActions.ts';\nimport { completeOperation, startOperation } from './operationJournal.ts';\nimport {\n SUBAGENT_ACTION_FIELDS,\n SUBAGENT_ACTIONS,\n SubagentParams,\n type SubagentAction,\n type SubagentToolParams,\n} from './schemas.ts';\nimport { DEFAULT_TRANSCRIPT_LINES, formatFleetView, formatRunTranscript } from './statusViews.ts';\nimport {\n captureSessionForkSource,\n type ISpawnPlanner,\n type SpawnPlanRequest,\n type SpawnPlanResult,\n} from './spawnPlan.ts';\nimport { SUBAGENT_TOOL_DESCRIPTION } from './toolDescription.ts';\n\nexport const SUBAGENT_TOOL_NAME = 'subagent';\nexport const IMPLEMENTED_SUBAGENT_ACTIONS: ReadonlySet<string> = new Set(Object.values(SUBAGENT_ACTIONS));\n\ntype SubagentToolDetails = Record<string, unknown>;\n\nfunction textResult<T extends SubagentToolDetails>(text: string, details: T): AgentToolResult<T> {\n return { content: [{ type: 'text', text }], details };\n}\n\nfunction progressResult(text: string, action: SubagentAction): AgentToolResult<SubagentToolDetails> {\n return textResult(text, { action, partial: true });\n}\n\nfunction progressMessage(params: SubagentToolParams): string | undefined {\n switch (params.action) {\n case SUBAGENT_ACTIONS.run:\n return `Starting ${params.requests.length} subagent${params.requests.length === 1 ? '' : 's'}...`;\n case SUBAGENT_ACTIONS.wait:\n return 'Waiting for subagent activity...';\n case SUBAGENT_ACTIONS.steer:\n return `Steering subagent ${params.id}...`;\n case SUBAGENT_ACTIONS.stop:\n return `Requesting stop for subagent ${params.id}...`;\n case SUBAGENT_ACTIONS.restore:\n return `Restoring subagent ${params.id}...`;\n default:\n return undefined;\n }\n}\n\nfunction waitGuidance(reason: string): string[] {\n if (reason === 'timeout') {\n return [\n 'The wait timed out; the runs may still be active.',\n 'Inspect subagent status, wait again with a deliberate timeout, or ask the user before stopping work.',\n ];\n }\n if (reason === 'attention') {\n return ['Inspect the affected run status or transcript, then steer it or ask the user for the required decision.'];\n }\n if (reason === 'no-active-runs') {\n return ['Inspect fleet status and verify the run ids instead of polling the same empty wait again.'];\n }\n if (reason === 'aborted')\n return ['The wait was cancelled; inspect current run status before deciding what to do next.'];\n return [];\n}\n\nfunction hasTool(pi: ExtensionAPI, name: string): boolean {\n try {\n return pi.getAllTools().some((tool) => tool.name === name);\n } catch {\n return false;\n }\n}\n\nfunction scopeOrDefault(scope: AgentScope | undefined): AgentScope {\n return scope ?? 'both';\n}\n\nfunction formatAgentList(agents: AgentConfig[]): string {\n return [\n 'Executable agents:',\n ...(agents.length\n ? agents\n .toSorted((left, right) => left.name.localeCompare(right.name))\n .map((agent) => `- ${agent.name} (${agent.source}): ${agent.description}`)\n : ['- (none)']),\n ].join('\\n');\n}\n\nfunction publicAgent(agent: AgentConfig): Record<string, unknown> {\n const tools = [...(agent.tools ?? []), ...(agent.mcpDirectTools ?? []).map((tool) => `mcp:${tool}`)];\n return {\n name: agent.name,\n source: agent.source,\n description: agent.description,\n runtime: agent.runtime ?? 'pi',\n writeCapable: agentHasWriteTools(agent),\n ...(agent.model ? { model: agent.model } : {}),\n ...(agent.fallbackModels?.length ? { fallbackModels: agent.fallbackModels } : {}),\n ...(tools.length ? { tools } : {}),\n };\n}\n\nfunction publicSuspendedRun(run: SuspendedRun): SuspendedRun & { resumable: boolean } {\n return { ...run, resumable: isSuspendedRunResumable(run) };\n}\n\nfunction formatAgentDetail(agent: AgentConfig): string {\n const detail = publicAgent(agent);\n return [\n `Agent: ${agent.name} (${agent.source})`,\n `Description: ${agent.description}`,\n `Runtime: ${String(detail.runtime)}`,\n `Write capable: ${detail.writeCapable ? 'yes' : 'no'}`,\n ...(agent.model ? [`Model: ${agent.model}`] : []),\n ...(Array.isArray(detail.tools) ? [`Tools: ${detail.tools.join(', ')}`] : []),\n ].join('\\n');\n}\n\nfunction requireNonblank(record: Record<string, unknown>, field: string, action: string): void {\n if (typeof record[field] !== 'string' || !record[field].trim()) {\n throw invalidRequest(`action='${action}' requires nonblank '${field}'.`, 'Correct the request and retry.');\n }\n}\n\n/** Remove the one legacy field emitted by Doom Plan before strict validation. */\nfunction normalizeCompatibilityParams(raw: unknown): unknown {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return raw;\n const record = raw as Record<string, unknown>;\n if (\n typeof record.action !== 'string' ||\n !IMPLEMENTED_SUBAGENT_ACTIONS.has(record.action) ||\n record.action === SUBAGENT_ACTIONS.run ||\n typeof record.model !== 'string'\n ) {\n return raw;\n }\n const { model: _model, ...normalized } = record;\n return normalized;\n}\n\nfunction validateParams(input: unknown): SubagentToolParams {\n const raw = normalizeCompatibilityParams(input);\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {\n throw invalidRequest('subagent parameters must be an object.', 'Call subagent with one documented action shape.');\n }\n const record = raw as Record<string, unknown>;\n const action = record.action;\n if (typeof action !== 'string' || !IMPLEMENTED_SUBAGENT_ACTIONS.has(action)) {\n throw invalidRequest(\n `Unsupported or missing subagent action ${JSON.stringify(action)}.`,\n `Use one of: ${[...IMPLEMENTED_SUBAGENT_ACTIONS].join(', ')}.`,\n );\n }\n const allowed = SUBAGENT_ACTION_FIELDS[action as SubagentAction] as readonly string[];\n const unknown = Object.keys(record).filter((field) => !allowed.includes(field));\n if (unknown.length) {\n throw invalidRequest(\n `action='${action}' does not accept: ${unknown.join(', ')}.`,\n 'Remove unknown fields and retry.',\n );\n }\n if (action === 'run' && (!Array.isArray(record.requests) || record.requests.length === 0)) {\n throw invalidRequest(\"action='run' requires a nonempty 'requests' array.\", 'Add at least one agent and task.');\n }\n if (action === 'steer') {\n requireNonblank(record, 'id', action);\n requireNonblank(record, 'message', action);\n }\n if (action === 'stop' || action === 'restore') requireNonblank(record, 'id', action);\n return raw as SubagentToolParams;\n}\n\nexport interface ISubagentToolService {\n registerTool(pi: ExtensionAPI): void;\n}\n\n@injectable()\nexport class SubagentToolService implements ISubagentToolService {\n private readonly registeredHosts = new WeakSet<ExtensionAPI>();\n\n constructor(\n @inject(DOOM_TEAM_TYPES.SpawnPlanner) private readonly planner: ISpawnPlanner,\n @inject(DOOM_TEAM_TYPES.ManagementActions) private readonly management: IManagementActions,\n @inject(DOOM_TEAM_TYPES.AsyncJobTracker) private readonly tracker: IAsyncJobTracker,\n @inject(DOOM_TEAM_TYPES.AgentDiscoveryService) private readonly discovery: IAgentDiscoveryService,\n @inject(DOOM_TEAM_TYPES.SubagentWaiter) private readonly waiter: ISubagentWaiter,\n ) {}\n\n registerTool(pi: ExtensionAPI): void {\n if (this.registeredHosts.has(pi)) return;\n if (hasTool(pi, SUBAGENT_TOOL_NAME)) {\n throw new DoomTeamExpectedError(\n 'tool_conflict',\n `A foreign '${SUBAGENT_TOOL_NAME}' tool is already registered.`,\n false,\n 'Disable the competing extension, then reload Doom Team.',\n );\n }\n pi.registerTool(this.buildTool());\n this.registeredHosts.add(pi);\n }\n\n private trackOutcomes(result: SpawnPlanResult, ctx: ExtensionContext): SpawnPlanResult {\n const jobs = this.tracker.forSession(ctx.sessionManager.getSessionId());\n for (const outcome of result.outcomes) {\n if (outcome.runId) jobs.track(outcome.runId);\n }\n return result;\n }\n\n private buildSpawnRequest(\n operationId: string,\n params: Extract<SubagentToolParams, { action: 'run' }>,\n ctx: ExtensionContext,\n preallocatedRunIds: string[],\n ): SpawnPlanRequest {\n const tasks = params.requests.map((request) => {\n if (!request.agent.trim() || !request.task.trim()) {\n throw invalidRequest(\n 'Every run request requires nonblank agent and task values.',\n 'Correct the request and retry.',\n );\n }\n return {\n agent: request.agent.trim(),\n ...(request.inlineAgent ? { inlineAgent: request.inlineAgent } : {}),\n task: request.task.trim(),\n ...(request.cwd ? { cwd: request.cwd } : {}),\n ...(request.model ? { model: request.model } : {}),\n ...(request.runtime ? { runtime: request.runtime } : {}),\n };\n });\n const parentForkSource = captureSessionForkSource(ctx.sessionManager, 'tool');\n const parentModel = normalizeParentModel(ctx.model);\n return {\n tasks,\n cwd: ctx.cwd,\n agentScope: scopeOrDefault(params.scope),\n parentSessionId: ctx.sessionManager.getSessionId(),\n ...(parentForkSource\n ? { parentSessionFile: parentForkSource.sessionFile, parentLeafId: parentForkSource.leafId }\n : {}),\n ...(params.concurrency !== undefined ? { concurrency: params.concurrency } : {}),\n ...(params.artifacts !== undefined ? { artifacts: params.artifacts } : {}),\n availableModels: authenticatedModelInfos(ctx.modelRegistry),\n ...(parentModel ? { parentModel } : {}),\n operationId,\n preallocatedRunIds,\n };\n }\n\n private async executeRun(\n operationId: string,\n params: Extract<SubagentToolParams, { action: 'run' }>,\n ctx: ExtensionContext,\n ): Promise<AgentToolResult<SubagentToolDetails>> {\n const operation = startOperation<AgentToolResult<SubagentToolDetails>>(\n operationId,\n params,\n params.requests.map(() => randomUUID()),\n );\n if (operation.kind === 'replay') {\n if (operation.record.state === 'completed' && operation.record.result) return operation.record.result;\n throw new DoomTeamExpectedError(\n 'delivery_unconfirmed',\n `Operation '${operationId}' is already pending for runs: ${operation.record.runIds.join(', ')}.`,\n true,\n 'Call subagent({\"action\":\"status\"}) and do not submit the run again.',\n );\n }\n const result = this.trackOutcomes(\n await this.planner.spawn(\n this.buildSpawnRequest(operationId, params, ctx, operation.record.runIds),\n loadConfig().config,\n ),\n ctx,\n );\n const started = result.outcomes.filter((outcome) => outcome.runId);\n const failed = result.outcomes.filter((outcome) => !outcome.runId);\n const lines = result.outcomes.map(\n (outcome) =>\n `- ${outcome.agent}: ${outcome.runId ? `started as ${outcome.runId}` : `failed: ${outcome.error ?? 'unknown error'}`}${outcome.warning ? `\\n Warning: ${outcome.warning}` : ''}`,\n );\n if (started.length === 0 && failed.length > 0) {\n throw new DoomTeamExpectedError(\n 'runtime_unavailable',\n `No requested subagent started.\\n${lines.join('\\n')}`,\n true,\n 'Call subagent({\"action\":\"agents\"}) to verify exact agent names, correct only the failed requests, or ask the user if a different delegation approach is needed.',\n );\n }\n const response = textResult(\n [\n `Run request: started ${started.length}/${result.outcomes.length} background agents; failed ${failed.length}.`,\n ...lines,\n ...(started.length > 0\n ? [\n '',\n 'They run independently of this turn and will send completion notifications. Continue non-overlapping work, or end the turn and wait.',\n ]\n : []),\n ...(failed.length > 0\n ? [\n '',\n 'Do not retry the whole request because some runs already started. Inspect the failed entries and submit only corrected replacements for those items.',\n ]\n : []),\n ].join('\\n'),\n { spawn: result, started: started.length, failed: failed.length },\n );\n completeOperation(operationId, operation.record, response);\n return response;\n }\n\n private executeAgents(\n params: Extract<SubagentToolParams, { action: 'agents' }>,\n ctx: ExtensionContext,\n ): AgentToolResult<SubagentToolDetails> {\n const cwd = params.cwd ?? ctx.cwd;\n const scope = scopeOrDefault(params.scope);\n if (!params.name) {\n const result = this.discovery.discover(cwd, scope);\n return textResult(formatAgentList(result.agents), { agents: result.agents.map(publicAgent) });\n }\n const agent = this.discovery.find(cwd, scope, params.name);\n if (!agent) {\n const candidates = this.discovery\n .discover(cwd, scope)\n .agents.map((candidate) => candidate.name)\n .toSorted();\n throw new DoomTeamExpectedError(\n 'agent_not_found',\n `No executable agent matches '${params.name}'.${candidates.length ? ` Available: ${candidates.join(', ')}.` : ''}`,\n false,\n 'Call subagent({\"action\":\"agents\"}) and retry with an exact name.',\n );\n }\n return textResult(formatAgentDetail(agent), { agent: publicAgent(agent) });\n }\n\n private async executeManagement(\n params: Exclude<SubagentToolParams, { action: 'run' } | { action: 'agents' }>,\n ctx: ExtensionContext,\n signal?: AbortSignal,\n preallocatedRunIds?: string[],\n operationId?: string,\n ): Promise<AgentToolResult<SubagentToolDetails>> {\n const jobs = this.tracker.forSession(ctx.sessionManager.getSessionId());\n switch (params.action) {\n case SUBAGENT_ACTIONS.status: {\n const suspendedRuns = listSuspendedRuns(requireCurrentSessionScope());\n if (!('id' in params)) {\n if ('transcriptLines' in params && params.transcriptLines !== undefined) {\n throw invalidRequest(\n 'transcriptLines requires a run id.',\n 'Add id or omit transcriptLines for fleet status.',\n );\n }\n const runs = jobs.list();\n return textResult(formatFleetView(runs, Date.now(), suspendedRuns), {\n fleet: runs,\n suspended: suspendedRuns.map(publicSuspendedRun),\n });\n }\n const runId = params.id;\n if (!runId) {\n throw invalidRequest(\n 'transcriptLines requires a run id.',\n 'Add id or omit transcriptLines for fleet status.',\n );\n }\n const suspended = suspendedRuns.find((run) => run.runId === runId);\n if (suspended && params.transcriptLines === undefined) {\n const resumable = isSuspendedRunResumable(suspended);\n const recovery = resumable\n ? `Restore it with { action: \"restore\", id: \"${suspended.runId}\" }.`\n : 'It is not resumable; submit a new explicit run.';\n return textResult(`Run '${suspended.runId}' is suspended. ${recovery}`, {\n suspended: publicSuspendedRun(suspended),\n });\n }\n const result: StatusActionResult = this.management.status(runId);\n if (!result.runDir && !result.resultPath && !suspended) {\n throw new DoomTeamExpectedError(\n 'run_not_found',\n `No run matches '${runId}'.`,\n false,\n 'Call subagent({\"action\":\"status\"}) and retry with an exact id.',\n );\n }\n if (params.transcriptLines !== undefined) {\n return textResult(formatRunTranscript(result.status, params.transcriptLines ?? DEFAULT_TRANSCRIPT_LINES), {\n transcript: { runId: result.runId },\n });\n }\n return textResult(\n result.status ? `Run '${result.runId}': ${result.status.state}` : `Run '${result.runId}' has no status yet.`,\n { status: result },\n );\n }\n case SUBAGENT_ACTIONS.wait: {\n const ids = params.ids?.map((id) => resolveTrackedRunId(jobs, id));\n const outcome = await this.waiter.wait({\n target: ids ? { ids } : { all: true },\n sessionId: ctx.sessionManager.getSessionId(),\n waitFor: params.until as WaitForMode | undefined,\n timeoutMs: params.timeoutMs,\n signal,\n });\n return textResult([`Subagent wait: ${outcome.reason}.`, ...waitGuidance(outcome.reason)].join('\\n'), {\n outcome,\n });\n }\n case SUBAGENT_ACTIONS.stop: {\n const id = resolveTrackedRunId(jobs, params.id);\n const result = this.management.stop(id, params.reason);\n return textResult(`Stop requested for '${id}'.`, { control: result });\n }\n case SUBAGENT_ACTIONS.steer: {\n const id = resolveTrackedRunId(jobs, params.id);\n const runtime = this.tracker.get(id)?.runtime;\n if (runtime && !isPiRuntime(runtime)) {\n throw new DoomTeamExpectedError(\n 'unsupported_operation',\n `Run '${id}' uses '${runtime}', which does not support steering.`,\n false,\n `Use subagent({\"action\":\"stop\",\"id\":\"${id}\"}) to terminate it.`,\n );\n }\n const result = await this.management.steer(id, params.message, undefined, signal);\n return textResult(`Steer request '${result.requestId}' for '${id}' is ${result.state}: ${result.message}`, {\n steer: result,\n });\n }\n case SUBAGENT_ACTIONS.suspended: {\n const runs = listSuspendedRuns(requireCurrentSessionScope());\n return textResult(runs.length ? formatSuspendedRuns(runs) : 'No suspended subagents in this session.', {\n suspended: runs.map(publicSuspendedRun),\n });\n }\n case SUBAGENT_ACTIONS.restore: {\n const scope = requireCurrentSessionScope();\n const record = listSuspendedRuns(scope).find((run) => run.runId === params.id);\n if (!record) {\n throw new DoomTeamExpectedError(\n 'run_not_found',\n `No suspended run matches '${params.id}'.`,\n false,\n 'Call subagent({\"action\":\"suspended\"}) and retry with an exact id.',\n );\n }\n if (!isSuspendedRunResumable(record)) {\n throw new DoomTeamExpectedError(\n 'not_resumable',\n `Suspended run '${params.id}' does not have complete, readable Pi recovery state.`,\n false,\n 'Submit a new explicit run request instead of restoring this record.',\n );\n }\n const result = this.trackOutcomes(\n await this.planner.spawn(\n {\n single: {\n agent: record.agent,\n ...(record.inlineAgent ? { inlineAgent: record.inlineAgent } : {}),\n task: record.task,\n cwd: record.cwd,\n ...(record.model ? { model: record.model } : {}),\n sessionFile: record.sessionFile,\n },\n cwd: record.cwd,\n agentScope: 'both',\n runtime: 'pi',\n availableModels: authenticatedModelInfos(ctx.modelRegistry),\n ...(operationId ? { operationId } : {}),\n ...(preallocatedRunIds ? { preallocatedRunIds } : {}),\n },\n loadConfig().config,\n ),\n ctx,\n );\n const outcome = result.outcomes[0];\n if (!outcome?.runId) {\n throw new DoomTeamExpectedError(\n 'not_resumable',\n `Could not restore '${params.id}': ${outcome?.error ?? 'the spawn produced no run.'}`,\n true,\n 'Inspect suspended state, then submit a new explicit run if recovery is not possible.',\n );\n }\n clearSuspendedRun(scope, params.id);\n return textResult(`Restored '${params.id}' as '${outcome.runId}', continuing its transcript.`, {\n restore: { ...outcome, restoredFrom: params.id },\n });\n }\n }\n }\n\n private buildTool(): ToolDefinition<typeof SubagentParams, SubagentToolDetails> {\n return {\n name: SUBAGENT_TOOL_NAME,\n label: 'Subagent',\n description: SUBAGENT_TOOL_DESCRIPTION,\n parameters: SubagentParams,\n prepareArguments: validateParams,\n execute: async (id, rawParams, signal, onUpdate, ctx): Promise<AgentToolResult<SubagentToolDetails>> => {\n const params = validateParams(rawParams);\n const progress = progressMessage(params);\n if (progress) onUpdate?.(progressResult(progress, params.action));\n if (params.action === SUBAGENT_ACTIONS.run) return this.executeRun(id, params, ctx);\n if (params.action === SUBAGENT_ACTIONS.agents) return this.executeAgents(params, ctx);\n const journaled =\n params.action === SUBAGENT_ACTIONS.steer ||\n params.action === SUBAGENT_ACTIONS.stop ||\n params.action === SUBAGENT_ACTIONS.restore;\n if (!journaled) return this.executeManagement(params, ctx, signal);\n\n const operation = startOperation<AgentToolResult<SubagentToolDetails>>(\n id,\n params,\n params.action === SUBAGENT_ACTIONS.restore ? [randomUUID()] : [],\n );\n if (operation.kind === 'replay') {\n if (operation.record.state === 'completed' && operation.record.result) return operation.record.result;\n throw new DoomTeamExpectedError(\n 'delivery_unconfirmed',\n `Operation '${id}' is already pending.`,\n true,\n 'Inspect run status before retrying this control operation.',\n );\n }\n const response = await this.executeManagement(params, ctx, signal, operation.record.runIds, id);\n completeOperation(id, operation.record, response);\n return response;\n },\n };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"subagentTool.mjs","names":[],"sources":["../../src/extensions/subagentTool.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { AgentToolResult } from '@earendil-works/pi-agent-core';\nimport type { ExtensionAPI, ExtensionContext, ToolDefinition } from '@earendil-works/pi-coding-agent';\nimport { inject, injectable } from 'inversify';\nimport { DOOM_TEAM_TYPES } from '../container/types.ts';\nimport { agentHasWriteTools } from '../services/agents/memory.ts';\nimport type { AgentConfig, AgentScope, IAgentDiscoveryService } from '../services/agents/types.ts';\nimport { type IAsyncJobTracker, resolveTrackedRunId } from '../services/runs/background/asyncJobTracker.ts';\nimport {\n clearSuspendedRun,\n formatSuspendedRuns,\n isSuspendedRunResumable,\n listSuspendedRuns,\n type SuspendedRun,\n} from '../services/runs/registry/suspendedRuns.ts';\nimport { normalizeParentModel } from '../services/runs/shared/modelFallback.ts';\nimport { isPiRuntime } from '../services/runs/shared/runtimeRegistry.ts';\nimport { DoomTeamExpectedError, invalidRequest } from '../shared/errors.ts';\nimport { authenticatedModelInfos } from '../shared/modelResolution.ts';\nimport { requireCurrentSessionScope } from '../shared/paths.ts';\nimport { renderSubagentCall, renderSubagentResult } from '../tui/subagentToolRender.ts';\nimport { loadConfig } from './config.ts';\nimport type { IManagementActions, StatusActionResult } from './managementActions.ts';\nimport { completeOperation, startOperation } from './operationJournal.ts';\nimport {\n SUBAGENT_ACTION_FIELDS,\n SUBAGENT_ACTIONS,\n type SubagentAction,\n SubagentParams,\n type SubagentToolParams,\n} from './schemas.ts';\nimport {\n captureSessionForkSource,\n type ISpawnPlanner,\n type SpawnPlanRequest,\n type SpawnPlanResult,\n} from './spawnPlan.ts';\nimport { DEFAULT_TRANSCRIPT_LINES, formatFleetView, formatRunTranscript } from './statusViews.ts';\nimport { SUBAGENT_TOOL_DESCRIPTION } from './toolDescription.ts';\n\nexport const SUBAGENT_TOOL_NAME = 'subagent';\nexport const IMPLEMENTED_SUBAGENT_ACTIONS: ReadonlySet<string> = new Set(Object.values(SUBAGENT_ACTIONS));\n\ntype SubagentToolDetails = Record<string, unknown>;\n\nfunction textResult<T extends SubagentToolDetails>(text: string, details: T): AgentToolResult<T> {\n return { content: [{ type: 'text', text }], details };\n}\n\nfunction progressResult(text: string, action: SubagentAction): AgentToolResult<SubagentToolDetails> {\n return textResult(text, { action, partial: true });\n}\n\nfunction progressMessage(params: SubagentToolParams): string | undefined {\n switch (params.action) {\n case SUBAGENT_ACTIONS.run:\n return `Starting ${params.requests.length} subagent${params.requests.length === 1 ? '' : 's'}...`;\n case SUBAGENT_ACTIONS.steer:\n return `Steering subagent ${params.id}...`;\n case SUBAGENT_ACTIONS.stop:\n return `Requesting stop for subagent ${params.id}...`;\n case SUBAGENT_ACTIONS.restore:\n return `Restoring subagent ${params.id}...`;\n default:\n return undefined;\n }\n}\n\nfunction hasTool(pi: ExtensionAPI, name: string): boolean {\n try {\n return pi.getAllTools().some((tool) => tool.name === name);\n } catch {\n return false;\n }\n}\n\nfunction scopeOrDefault(scope: AgentScope | undefined): AgentScope {\n return scope ?? 'both';\n}\n\nfunction formatAgentList(agents: AgentConfig[]): string {\n return [\n 'Executable agents:',\n ...(agents.length\n ? agents\n .toSorted((left, right) => left.name.localeCompare(right.name))\n .map((agent) => `- ${agent.name} (${agent.source}): ${agent.description}`)\n : ['- (none)']),\n ].join('\\n');\n}\n\nfunction publicAgent(agent: AgentConfig): Record<string, unknown> {\n const tools = [...(agent.tools ?? []), ...(agent.mcpDirectTools ?? []).map((tool) => `mcp:${tool}`)];\n return {\n name: agent.name,\n source: agent.source,\n description: agent.description,\n runtime: agent.runtime ?? 'pi',\n writeCapable: agentHasWriteTools(agent),\n ...(agent.model ? { model: agent.model } : {}),\n ...(agent.fallbackModels?.length ? { fallbackModels: agent.fallbackModels } : {}),\n ...(tools.length ? { tools } : {}),\n };\n}\n\nfunction publicSuspendedRun(run: SuspendedRun): SuspendedRun & { resumable: boolean } {\n return { ...run, resumable: isSuspendedRunResumable(run) };\n}\n\nfunction formatAgentDetail(agent: AgentConfig): string {\n const detail = publicAgent(agent);\n return [\n `Agent: ${agent.name} (${agent.source})`,\n `Description: ${agent.description}`,\n `Runtime: ${String(detail.runtime)}`,\n `Write capable: ${detail.writeCapable ? 'yes' : 'no'}`,\n ...(agent.model ? [`Model: ${agent.model}`] : []),\n ...(Array.isArray(detail.tools) ? [`Tools: ${detail.tools.join(', ')}`] : []),\n ].join('\\n');\n}\n\nfunction requireNonblank(record: Record<string, unknown>, field: string, action: string): void {\n if (typeof record[field] !== 'string' || !record[field].trim()) {\n throw invalidRequest(`action='${action}' requires nonblank '${field}'.`, 'Correct the request and retry.');\n }\n}\n\n/** Remove the one legacy field emitted by Doom Plan before strict validation. */\nfunction normalizeCompatibilityParams(raw: unknown): unknown {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return raw;\n const record = raw as Record<string, unknown>;\n if (\n typeof record.action !== 'string' ||\n !IMPLEMENTED_SUBAGENT_ACTIONS.has(record.action) ||\n record.action === SUBAGENT_ACTIONS.run ||\n typeof record.model !== 'string'\n ) {\n return raw;\n }\n const { model: _model, ...normalized } = record;\n return normalized;\n}\n\nfunction validateParams(input: unknown): SubagentToolParams {\n const raw = normalizeCompatibilityParams(input);\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {\n throw invalidRequest('subagent parameters must be an object.', 'Call subagent with one documented action shape.');\n }\n const record = raw as Record<string, unknown>;\n const action = record.action;\n if (typeof action !== 'string' || !IMPLEMENTED_SUBAGENT_ACTIONS.has(action)) {\n throw invalidRequest(\n `Unsupported or missing subagent action ${JSON.stringify(action)}.`,\n `Use one of: ${[...IMPLEMENTED_SUBAGENT_ACTIONS].join(', ')}.`,\n );\n }\n const allowed = SUBAGENT_ACTION_FIELDS[action as SubagentAction] as readonly string[];\n const unknown = Object.keys(record).filter((field) => !allowed.includes(field));\n if (unknown.length) {\n throw invalidRequest(\n `action='${action}' does not accept: ${unknown.join(', ')}.`,\n 'Remove unknown fields and retry.',\n );\n }\n if (action === SUBAGENT_ACTIONS.run && (!Array.isArray(record.requests) || record.requests.length === 0)) {\n throw invalidRequest(\"action='run' requires a nonempty 'requests' array.\", 'Add at least one agent and task.');\n }\n if (action === SUBAGENT_ACTIONS.steer) {\n requireNonblank(record, 'id', action);\n requireNonblank(record, 'message', action);\n }\n if (action === SUBAGENT_ACTIONS.stop || action === SUBAGENT_ACTIONS.restore) requireNonblank(record, 'id', action);\n return raw as SubagentToolParams;\n}\n\nexport interface ISubagentToolService {\n registerTool(pi: ExtensionAPI): void;\n}\n\n@injectable()\nexport class SubagentToolService implements ISubagentToolService {\n private readonly registeredHosts = new WeakSet<ExtensionAPI>();\n\n constructor(\n @inject(DOOM_TEAM_TYPES.SpawnPlanner) private readonly planner: ISpawnPlanner,\n @inject(DOOM_TEAM_TYPES.ManagementActions) private readonly management: IManagementActions,\n @inject(DOOM_TEAM_TYPES.AsyncJobTracker) private readonly tracker: IAsyncJobTracker,\n @inject(DOOM_TEAM_TYPES.AgentDiscoveryService) private readonly discovery: IAgentDiscoveryService,\n ) {}\n\n registerTool(pi: ExtensionAPI): void {\n if (this.registeredHosts.has(pi)) return;\n if (hasTool(pi, SUBAGENT_TOOL_NAME)) {\n throw new DoomTeamExpectedError(\n 'tool_conflict',\n `A foreign '${SUBAGENT_TOOL_NAME}' tool is already registered.`,\n false,\n 'Disable the competing extension, then reload Doom Team.',\n );\n }\n pi.registerTool(this.buildTool());\n this.registeredHosts.add(pi);\n }\n\n private trackOutcomes(result: SpawnPlanResult, ctx: ExtensionContext): SpawnPlanResult {\n const jobs = this.tracker.forSession(ctx.sessionManager.getSessionId());\n for (const outcome of result.outcomes) {\n if (outcome.runId) jobs.track(outcome.runId);\n }\n return result;\n }\n\n private buildSpawnRequest(\n operationId: string,\n params: Extract<SubagentToolParams, { action: 'run' }>,\n ctx: ExtensionContext,\n preallocatedRunIds: string[],\n ): SpawnPlanRequest {\n const tasks = params.requests.map((request) => {\n if (!request.agent.trim() || !request.task.trim()) {\n throw invalidRequest(\n 'Every run request requires nonblank agent and task values.',\n 'Correct the request and retry.',\n );\n }\n return {\n agent: request.agent.trim(),\n ...(request.inlineAgent ? { inlineAgent: request.inlineAgent } : {}),\n task: request.task.trim(),\n ...(request.cwd ? { cwd: request.cwd } : {}),\n ...(request.model ? { model: request.model } : {}),\n ...(request.runtime ? { runtime: request.runtime } : {}),\n };\n });\n const parentForkSource = captureSessionForkSource(ctx.sessionManager, 'tool');\n const parentModel = normalizeParentModel(ctx.model);\n return {\n tasks,\n cwd: ctx.cwd,\n agentScope: scopeOrDefault(params.scope),\n parentSessionId: ctx.sessionManager.getSessionId(),\n ...(parentForkSource\n ? { parentSessionFile: parentForkSource.sessionFile, parentLeafId: parentForkSource.leafId }\n : {}),\n ...(params.concurrency !== undefined ? { concurrency: params.concurrency } : {}),\n ...(params.artifacts !== undefined ? { artifacts: params.artifacts } : {}),\n availableModels: authenticatedModelInfos(ctx.modelRegistry),\n ...(parentModel ? { parentModel } : {}),\n operationId,\n preallocatedRunIds,\n };\n }\n\n private async executeRun(\n operationId: string,\n params: Extract<SubagentToolParams, { action: 'run' }>,\n ctx: ExtensionContext,\n ): Promise<AgentToolResult<SubagentToolDetails>> {\n const operation = startOperation<AgentToolResult<SubagentToolDetails>>(\n operationId,\n params,\n params.requests.map(() => randomUUID()),\n );\n if (operation.kind === 'replay') {\n if (operation.record.state === 'completed' && operation.record.result) return operation.record.result;\n throw new DoomTeamExpectedError(\n 'delivery_unconfirmed',\n `Operation '${operationId}' is already pending for runs: ${operation.record.runIds.join(', ')}.`,\n true,\n 'Call subagent({\"action\":\"status\"}) and do not submit the run again.',\n );\n }\n const result = this.trackOutcomes(\n await this.planner.spawn(\n this.buildSpawnRequest(operationId, params, ctx, operation.record.runIds),\n loadConfig().config,\n ),\n ctx,\n );\n const started = result.outcomes.filter((outcome) => outcome.runId);\n const failed = result.outcomes.filter((outcome) => !outcome.runId);\n const lines = result.outcomes.map(\n (outcome) =>\n `- ${outcome.agent}: ${outcome.runId ? `started as ${outcome.runId}` : `failed: ${outcome.error ?? 'unknown error'}`}${outcome.warning ? `\\n Warning: ${outcome.warning}` : ''}`,\n );\n if (started.length === 0 && failed.length > 0) {\n throw new DoomTeamExpectedError(\n 'runtime_unavailable',\n `No requested subagent started.\\n${lines.join('\\n')}`,\n true,\n 'Call subagent({\"action\":\"agents\"}) to verify exact agent names, correct only the failed requests, or ask the user if a different delegation approach is needed.',\n );\n }\n const response = textResult(\n [\n `Run request: started ${started.length}/${result.outcomes.length} background agents; failed ${failed.length}.`,\n ...lines,\n ...(started.length > 0\n ? [\n '',\n `The subagent${started.length === 1 ? ' is' : 's are'} now running in the background independently of this turn. Completion will arrive asynchronously as a notification. Continue non-overlapping work, or end your turn.`,\n ]\n : []),\n ...(failed.length > 0\n ? [\n '',\n 'Do not retry the whole request because some runs already started. Inspect the failed entries and submit only corrected replacements for those items.',\n ]\n : []),\n ].join('\\n'),\n { spawn: result, started: started.length, failed: failed.length },\n );\n completeOperation(operationId, operation.record, response);\n return response;\n }\n\n private executeAgents(\n params: Extract<SubagentToolParams, { action: 'agents' }>,\n ctx: ExtensionContext,\n ): AgentToolResult<SubagentToolDetails> {\n const cwd = params.cwd ?? ctx.cwd;\n const scope = scopeOrDefault(params.scope);\n if (!params.name) {\n const result = this.discovery.discover(cwd, scope);\n return textResult(formatAgentList(result.agents), { agents: result.agents.map(publicAgent) });\n }\n const agent = this.discovery.find(cwd, scope, params.name);\n if (!agent) {\n const candidates = this.discovery\n .discover(cwd, scope)\n .agents.map((candidate) => candidate.name)\n .toSorted();\n throw new DoomTeamExpectedError(\n 'agent_not_found',\n `No executable agent matches '${params.name}'.${candidates.length ? ` Available: ${candidates.join(', ')}.` : ''}`,\n false,\n 'Call subagent({\"action\":\"agents\"}) and retry with an exact name.',\n );\n }\n return textResult(formatAgentDetail(agent), { agent: publicAgent(agent) });\n }\n\n private async executeManagement(\n params: Exclude<SubagentToolParams, { action: 'run' } | { action: 'agents' }>,\n ctx: ExtensionContext,\n signal?: AbortSignal,\n preallocatedRunIds?: string[],\n operationId?: string,\n ): Promise<AgentToolResult<SubagentToolDetails>> {\n const jobs = this.tracker.forSession(ctx.sessionManager.getSessionId());\n switch (params.action) {\n case SUBAGENT_ACTIONS.status: {\n const suspendedRuns = listSuspendedRuns(requireCurrentSessionScope());\n if (!('id' in params)) {\n if ('transcriptLines' in params && params.transcriptLines !== undefined) {\n throw invalidRequest(\n 'transcriptLines requires a run id.',\n 'Add id or omit transcriptLines for fleet status.',\n );\n }\n const runs = jobs.list();\n return textResult(formatFleetView(runs, Date.now(), suspendedRuns), {\n fleet: runs,\n suspended: suspendedRuns.map(publicSuspendedRun),\n });\n }\n const runId = params.id;\n if (!runId) {\n throw invalidRequest(\n 'transcriptLines requires a run id.',\n 'Add id or omit transcriptLines for fleet status.',\n );\n }\n const suspended = suspendedRuns.find((run) => run.runId === runId);\n if (suspended && params.transcriptLines === undefined) {\n const resumable = isSuspendedRunResumable(suspended);\n const recovery = resumable\n ? `Restore it with { action: \"restore\", id: \"${suspended.runId}\" }.`\n : 'It is not resumable; submit a new explicit run.';\n return textResult(`Run '${suspended.runId}' is suspended. ${recovery}`, {\n suspended: publicSuspendedRun(suspended),\n });\n }\n const result: StatusActionResult = this.management.status(runId);\n if (!result.runDir && !result.resultPath && !suspended) {\n throw new DoomTeamExpectedError(\n 'run_not_found',\n `No run matches '${runId}'.`,\n false,\n 'Call subagent({\"action\":\"status\"}) and retry with an exact id.',\n );\n }\n if (params.transcriptLines !== undefined) {\n return textResult(formatRunTranscript(result.status, params.transcriptLines ?? DEFAULT_TRANSCRIPT_LINES), {\n transcript: { runId: result.runId },\n });\n }\n return textResult(\n result.status ? `Run '${result.runId}': ${result.status.state}` : `Run '${result.runId}' has no status yet.`,\n { status: result },\n );\n }\n case SUBAGENT_ACTIONS.stop: {\n const id = resolveTrackedRunId(jobs, params.id);\n const result = this.management.stop(id, params.reason);\n return textResult(`Stop requested for '${id}'.`, { control: result });\n }\n case SUBAGENT_ACTIONS.steer: {\n const id = resolveTrackedRunId(jobs, params.id);\n const runtime = this.tracker.get(id)?.runtime;\n if (runtime && !isPiRuntime(runtime)) {\n throw new DoomTeamExpectedError(\n 'unsupported_operation',\n `Run '${id}' uses '${runtime}', which does not support steering.`,\n false,\n `Use subagent({\"action\":\"stop\",\"id\":\"${id}\"}) to terminate it.`,\n );\n }\n const result = await this.management.steer(id, params.message, undefined, signal);\n return textResult(`Steer request '${result.requestId}' for '${id}' is ${result.state}: ${result.message}`, {\n steer: result,\n });\n }\n case SUBAGENT_ACTIONS.suspended: {\n const runs = listSuspendedRuns(requireCurrentSessionScope());\n return textResult(runs.length ? formatSuspendedRuns(runs) : 'No suspended subagents in this session.', {\n suspended: runs.map(publicSuspendedRun),\n });\n }\n case SUBAGENT_ACTIONS.restore: {\n const scope = requireCurrentSessionScope();\n const record = listSuspendedRuns(scope).find((run) => run.runId === params.id);\n if (!record) {\n throw new DoomTeamExpectedError(\n 'run_not_found',\n `No suspended run matches '${params.id}'.`,\n false,\n 'Call subagent({\"action\":\"suspended\"}) and retry with an exact id.',\n );\n }\n if (!isSuspendedRunResumable(record)) {\n throw new DoomTeamExpectedError(\n 'not_resumable',\n `Suspended run '${params.id}' does not have complete, readable Pi recovery state.`,\n false,\n 'Submit a new explicit run request instead of restoring this record.',\n );\n }\n const result = this.trackOutcomes(\n await this.planner.spawn(\n {\n single: {\n agent: record.agent,\n ...(record.inlineAgent ? { inlineAgent: record.inlineAgent } : {}),\n task: record.task,\n cwd: record.cwd,\n ...(record.model ? { model: record.model } : {}),\n sessionFile: record.sessionFile,\n },\n cwd: record.cwd,\n agentScope: 'both',\n runtime: 'pi',\n availableModels: authenticatedModelInfos(ctx.modelRegistry),\n ...(operationId ? { operationId } : {}),\n ...(preallocatedRunIds ? { preallocatedRunIds } : {}),\n },\n loadConfig().config,\n ),\n ctx,\n );\n const outcome = result.outcomes[0];\n if (!outcome?.runId) {\n throw new DoomTeamExpectedError(\n 'not_resumable',\n `Could not restore '${params.id}': ${outcome?.error ?? 'the spawn produced no run.'}`,\n true,\n 'Inspect suspended state, then submit a new explicit run if recovery is not possible.',\n );\n }\n clearSuspendedRun(scope, params.id);\n return textResult(`Restored '${params.id}' as '${outcome.runId}', continuing its transcript.`, {\n restore: { ...outcome, restoredFrom: params.id },\n });\n }\n }\n }\n\n private buildTool(): ToolDefinition<typeof SubagentParams, SubagentToolDetails> {\n return {\n name: SUBAGENT_TOOL_NAME,\n label: 'Subagent',\n description: SUBAGENT_TOOL_DESCRIPTION,\n parameters: SubagentParams,\n prepareArguments: validateParams,\n // Subagent output carries explicit lifecycle colors. Owning the shell keeps\n // Pi's broad pending/success/error backgrounds from washing out long lists.\n renderShell: 'self',\n renderCall: (rawParams, theme) => renderSubagentCall(validateParams(rawParams), theme),\n renderResult: (result, options, theme) => renderSubagentResult(result, options, theme),\n execute: async (id, rawParams, signal, onUpdate, ctx): Promise<AgentToolResult<SubagentToolDetails>> => {\n const params = validateParams(rawParams);\n const progress = progressMessage(params);\n if (progress) onUpdate?.(progressResult(progress, params.action));\n if (params.action === SUBAGENT_ACTIONS.run) return this.executeRun(id, params, ctx);\n if (params.action === SUBAGENT_ACTIONS.agents) return this.executeAgents(params, ctx);\n const journaled =\n params.action === SUBAGENT_ACTIONS.steer ||\n params.action === SUBAGENT_ACTIONS.stop ||\n params.action === SUBAGENT_ACTIONS.restore;\n if (!journaled) return this.executeManagement(params, ctx, signal);\n\n const operation = startOperation<AgentToolResult<SubagentToolDetails>>(\n id,\n params,\n params.action === SUBAGENT_ACTIONS.restore ? [randomUUID()] : [],\n );\n if (operation.kind === 'replay') {\n if (operation.record.state === 'completed' && operation.record.result) return operation.record.result;\n throw new DoomTeamExpectedError(\n 'delivery_unconfirmed',\n `Operation '${id}' is already pending.`,\n true,\n 'Inspect run status before retrying this control operation.',\n );\n }\n const response = await this.executeManagement(params, ctx, signal, operation.record.runIds, id);\n completeOperation(id, operation.record, response);\n return response;\n },\n };\n }\n}\n"],"mappings":"mrEA6CA,SAAS,EAA0C,EAAc,EAAgC,CAC/F,MAAO,CAAE,QAAS,CAAC,CAAE,KAAM,OAAQ,OAAM,CAAC,CAAE,UAAS,CAGvD,SAAS,EAAe,EAAc,EAA8D,CAClG,OAAO,EAAW,EAAM,CAAE,SAAQ,QAAS,GAAM,CAAC,CAGpD,SAAS,EAAgB,EAAgD,CACvE,OAAQ,EAAO,OAAf,CACE,KAAK,EAAiB,IACpB,MAAO,YAAY,EAAO,SAAS,OAAO,WAAW,EAAO,SAAS,SAAW,EAAI,GAAK,IAAI,KAC/F,KAAK,EAAiB,MACpB,MAAO,qBAAqB,EAAO,GAAG,KACxC,KAAK,EAAiB,KACpB,MAAO,gCAAgC,EAAO,GAAG,KACnD,KAAK,EAAiB,QACpB,MAAO,sBAAsB,EAAO,GAAG,KACzC,QACE,QAIN,SAAS,EAAQ,EAAkB,EAAuB,CACxD,GAAI,CACF,OAAO,EAAG,aAAa,CAAC,KAAM,GAAS,EAAK,OAAS,EAAK,MACpD,CACN,MAAO,IAIX,SAAS,EAAe,EAA2C,CACjE,OAAO,GAAS,OAGlB,SAAS,GAAgB,EAA+B,CACtD,MAAO,CACL,qBACA,GAAI,EAAO,OACP,EACG,UAAU,EAAM,IAAU,EAAK,KAAK,cAAc,EAAM,KAAK,CAAC,CAC9D,IAAK,GAAU,KAAK,EAAM,KAAK,IAAI,EAAM,OAAO,KAAK,EAAM,cAAc,CAC5E,CAAC,WAAW,CACjB,CAAC,KAAK;EAAK,CAGd,SAAS,EAAY,EAA6C,CAChE,IAAM,EAAQ,CAAC,GAAI,EAAM,OAAS,EAAE,CAAG,IAAI,EAAM,gBAAkB,EAAE,EAAE,IAAK,GAAS,OAAO,IAAO,CAAC,CACpG,MAAO,CACL,KAAM,EAAM,KACZ,OAAQ,EAAM,OACd,YAAa,EAAM,YACnB,QAAS,EAAM,SAAW,KAC1B,aAAc,EAAmB,EAAM,CACvC,GAAI,EAAM,MAAQ,CAAE,MAAO,EAAM,MAAO,CAAG,EAAE,CAC7C,GAAI,EAAM,gBAAgB,OAAS,CAAE,eAAgB,EAAM,eAAgB,CAAG,EAAE,CAChF,GAAI,EAAM,OAAS,CAAE,QAAO,CAAG,EAAE,CAClC,CAGH,SAAS,EAAmB,EAA0D,CACpF,MAAO,CAAE,GAAG,EAAK,UAAW,EAAwB,EAAI,CAAE,CAG5D,SAAS,GAAkB,EAA4B,CACrD,IAAM,EAAS,EAAY,EAAM,CACjC,MAAO,CACL,UAAU,EAAM,KAAK,IAAI,EAAM,OAAO,GACtC,gBAAgB,EAAM,cACtB,YAAY,OAAO,EAAO,QAAQ,GAClC,kBAAkB,EAAO,aAAe,MAAQ,OAChD,GAAI,EAAM,MAAQ,CAAC,UAAU,EAAM,QAAQ,CAAG,EAAE,CAChD,GAAI,MAAM,QAAQ,EAAO,MAAM,CAAG,CAAC,UAAU,EAAO,MAAM,KAAK,KAAK,GAAG,CAAG,EAAE,CAC7E,CAAC,KAAK;EAAK,CAGd,SAAS,EAAgB,EAAiC,EAAe,EAAsB,CAC7F,GAAI,OAAO,EAAO,IAAW,UAAY,CAAC,EAAO,GAAO,MAAM,CAC5D,MAAM,EAAe,WAAW,EAAO,uBAAuB,EAAM,IAAK,iCAAiC,CAK9G,SAAS,GAA6B,EAAuB,CAC3D,GAAI,CAAC,GAAO,OAAO,GAAQ,UAAY,MAAM,QAAQ,EAAI,CAAE,OAAO,EAClE,IAAM,EAAS,EACf,GACE,OAAO,EAAO,QAAW,UACzB,CAAC,EAA6B,IAAI,EAAO,OAAO,EAChD,EAAO,SAAW,EAAiB,KACnC,OAAO,EAAO,OAAU,SAExB,OAAO,EAET,GAAM,CAAE,MAAO,EAAQ,GAAG,GAAe,EACzC,OAAO,EAGT,SAAS,EAAe,EAAoC,CAC1D,IAAM,EAAM,GAA6B,EAAM,CAC/C,GAAI,CAAC,GAAO,OAAO,GAAQ,UAAY,MAAM,QAAQ,EAAI,CACvD,MAAM,EAAe,yCAA0C,kDAAkD,CAEnH,IAAM,EAAS,EACT,EAAS,EAAO,OACtB,GAAI,OAAO,GAAW,UAAY,CAAC,EAA6B,IAAI,EAAO,CACzE,MAAM,EACJ,0CAA0C,KAAK,UAAU,EAAO,CAAC,GACjE,eAAe,CAAC,GAAG,EAA6B,CAAC,KAAK,KAAK,CAAC,GAC7D,CAEH,IAAM,EAAU,EAAuB,GACjC,EAAU,OAAO,KAAK,EAAO,CAAC,OAAQ,GAAU,CAAC,EAAQ,SAAS,EAAM,CAAC,CAC/E,GAAI,EAAQ,OACV,MAAM,EACJ,WAAW,EAAO,qBAAqB,EAAQ,KAAK,KAAK,CAAC,GAC1D,mCACD,CAEH,GAAI,IAAW,EAAiB,MAAQ,CAAC,MAAM,QAAQ,EAAO,SAAS,EAAI,EAAO,SAAS,SAAW,GACpG,MAAM,EAAe,qDAAsD,mCAAmC,CAOhH,OALI,IAAW,EAAiB,QAC9B,EAAgB,EAAQ,KAAM,EAAO,CACrC,EAAgB,EAAQ,UAAW,EAAO,GAExC,IAAW,EAAiB,MAAQ,IAAW,EAAiB,UAAS,EAAgB,EAAQ,KAAM,EAAO,CAC3G,yBAxK+C,IACU,IAE0C,KAOxD,IAC4B,IACP,IACG,KACL,KACP,KACwB,KAC/C,IAEiC,IAOpD,IAME,IAC0E,IACjC,aAEpD,EAAqB,WACrB,EAAoD,IAAI,IAAI,OAAO,OAAO,EAAiB,CAAC,GA2IlG,KAA0D,CAC/D,gBAAmC,IAAI,QAEvC,YACE,EACA,EACA,EACA,EACA,CAJuD,KAAA,QAAA,EACK,KAAA,WAAA,EACF,KAAA,QAAA,EACM,KAAA,UAAA,EAGlE,aAAa,EAAwB,CAC/B,SAAK,gBAAgB,IAAI,EAAG,CAChC,IAAI,EAAQ,EAAA,WAAuB,CACjC,MAAM,IAAI,EACR,gBACA,cAAc,EAAmB,+BACjC,GACA,0DACD,CAEH,EAAG,aAAa,KAAK,WAAW,CAAC,CACjC,KAAK,gBAAgB,IAAI,EAAG,EAG9B,cAAsB,EAAyB,EAAwC,CACrF,IAAM,EAAO,KAAK,QAAQ,WAAW,EAAI,eAAe,cAAc,CAAC,CACvE,IAAK,IAAM,KAAW,EAAO,SACvB,EAAQ,OAAO,EAAK,MAAM,EAAQ,MAAM,CAE9C,OAAO,EAGT,kBACE,EACA,EACA,EACA,EACkB,CAClB,IAAM,EAAQ,EAAO,SAAS,IAAK,GAAY,CAC7C,GAAI,CAAC,EAAQ,MAAM,MAAM,EAAI,CAAC,EAAQ,KAAK,MAAM,CAC/C,MAAM,EACJ,6DACA,iCACD,CAEH,MAAO,CACL,MAAO,EAAQ,MAAM,MAAM,CAC3B,GAAI,EAAQ,YAAc,CAAE,YAAa,EAAQ,YAAa,CAAG,EAAE,CACnE,KAAM,EAAQ,KAAK,MAAM,CACzB,GAAI,EAAQ,IAAM,CAAE,IAAK,EAAQ,IAAK,CAAG,EAAE,CAC3C,GAAI,EAAQ,MAAQ,CAAE,MAAO,EAAQ,MAAO,CAAG,EAAE,CACjD,GAAI,EAAQ,QAAU,CAAE,QAAS,EAAQ,QAAS,CAAG,EAAE,CACxD,EACD,CACI,EAAmB,GAAyB,EAAI,eAAgB,OAAO,CACvE,EAAc,EAAqB,EAAI,MAAM,CACnD,MAAO,CACL,QACA,IAAK,EAAI,IACT,WAAY,EAAe,EAAO,MAAM,CACxC,gBAAiB,EAAI,eAAe,cAAc,CAClD,GAAI,EACA,CAAE,kBAAmB,EAAiB,YAAa,aAAc,EAAiB,OAAQ,CAC1F,EAAE,CACN,GAAI,EAAO,cAAgB,IAAA,GAAkD,EAAE,CAAxC,CAAE,YAAa,EAAO,YAAa,CAC1E,GAAI,EAAO,YAAc,IAAA,GAA8C,EAAE,CAApC,CAAE,UAAW,EAAO,UAAW,CACpE,gBAAiB,EAAwB,EAAI,cAAc,CAC3D,GAAI,EAAc,CAAE,cAAa,CAAG,EAAE,CACtC,cACA,qBACD,CAGH,MAAc,WACZ,EACA,EACA,EAC+C,CAC/C,IAAM,EAAY,EAChB,EACA,EACA,EAAO,SAAS,QAAU,GAAY,CAAC,CACxC,CACD,GAAI,EAAU,OAAS,SAAU,CAC/B,GAAI,EAAU,OAAO,QAAU,aAAe,EAAU,OAAO,OAAQ,OAAO,EAAU,OAAO,OAC/F,MAAM,IAAI,EACR,uBACA,cAAc,EAAY,iCAAiC,EAAU,OAAO,OAAO,KAAK,KAAK,CAAC,GAC9F,GACA,sEACD,CAEH,IAAM,EAAS,KAAK,cAClB,MAAM,KAAK,QAAQ,MACjB,KAAK,kBAAkB,EAAa,EAAQ,EAAK,EAAU,OAAO,OAAO,CACzE,GAAY,CAAC,OACd,CACD,EACD,CACK,EAAU,EAAO,SAAS,OAAQ,GAAY,EAAQ,MAAM,CAC5D,EAAS,EAAO,SAAS,OAAQ,GAAY,CAAC,EAAQ,MAAM,CAC5D,EAAQ,EAAO,SAAS,IAC3B,GACC,KAAK,EAAQ,MAAM,IAAI,EAAQ,MAAQ,cAAc,EAAQ,QAAU,WAAW,EAAQ,OAAS,oBAAoB,EAAQ,QAAU,gBAAgB,EAAQ,UAAY,KAChL,CACD,GAAI,EAAQ,SAAW,GAAK,EAAO,OAAS,EAC1C,MAAM,IAAI,EACR,sBACA,mCAAmC,EAAM,KAAK;EAAK,GACnD,GACA,kKACD,CAEH,IAAM,EAAW,EACf,CACE,wBAAwB,EAAQ,OAAO,GAAG,EAAO,SAAS,OAAO,6BAA6B,EAAO,OAAO,GAC5G,GAAG,EACH,GAAI,EAAQ,OAAS,EACjB,CACE,GACA,eAAe,EAAQ,SAAW,EAAI,MAAQ,QAAQ,sKACvD,CACD,EAAE,CACN,GAAI,EAAO,OAAS,EAChB,CACE,GACA,uJACD,CACD,EAAE,CACP,CAAC,KAAK;EAAK,CACZ,CAAE,MAAO,EAAQ,QAAS,EAAQ,OAAQ,OAAQ,EAAO,OAAQ,CAClE,CAED,OADA,EAAkB,EAAa,EAAU,OAAQ,EAAS,CACnD,EAGT,cACE,EACA,EACsC,CACtC,IAAM,EAAM,EAAO,KAAO,EAAI,IACxB,EAAQ,EAAe,EAAO,MAAM,CAC1C,GAAI,CAAC,EAAO,KAAM,CAChB,IAAM,EAAS,KAAK,UAAU,SAAS,EAAK,EAAM,CAClD,OAAO,EAAW,GAAgB,EAAO,OAAO,CAAE,CAAE,OAAQ,EAAO,OAAO,IAAI,EAAY,CAAE,CAAC,CAE/F,IAAM,EAAQ,KAAK,UAAU,KAAK,EAAK,EAAO,EAAO,KAAK,CAC1D,GAAI,CAAC,EAAO,CACV,IAAM,EAAa,KAAK,UACrB,SAAS,EAAK,EAAM,CACpB,OAAO,IAAK,GAAc,EAAU,KAAK,CACzC,UAAU,CACb,MAAM,IAAI,EACR,kBACA,gCAAgC,EAAO,KAAK,IAAI,EAAW,OAAS,eAAe,EAAW,KAAK,KAAK,CAAC,GAAK,KAC9G,GACA,mEACD,CAEH,OAAO,EAAW,GAAkB,EAAM,CAAE,CAAE,MAAO,EAAY,EAAM,CAAE,CAAC,CAG5E,MAAc,kBACZ,EACA,EACA,EACA,EACA,EAC+C,CAC/C,IAAM,EAAO,KAAK,QAAQ,WAAW,EAAI,eAAe,cAAc,CAAC,CACvE,OAAQ,EAAO,OAAf,CACE,KAAK,EAAiB,OAAQ,CAC5B,IAAM,EAAgB,EAAkB,GAA4B,CAAC,CACrE,GAAI,EAAE,OAAQ,GAAS,CACrB,GAAI,oBAAqB,GAAU,EAAO,kBAAoB,IAAA,GAC5D,MAAM,EACJ,qCACA,mDACD,CAEH,IAAM,EAAO,EAAK,MAAM,CACxB,OAAO,EAAW,EAAgB,EAAM,KAAK,KAAK,CAAE,EAAc,CAAE,CAClE,MAAO,EACP,UAAW,EAAc,IAAI,EAAmB,CACjD,CAAC,CAEJ,IAAM,EAAQ,EAAO,GACrB,GAAI,CAAC,EACH,MAAM,EACJ,qCACA,mDACD,CAEH,IAAM,EAAY,EAAc,KAAM,GAAQ,EAAI,QAAU,EAAM,CAClE,GAAI,GAAa,EAAO,kBAAoB,IAAA,GAAW,CAErD,IAAM,EADY,EAAwB,EAChB,CACtB,6CAA6C,EAAU,MAAM,MAC7D,kDACJ,OAAO,EAAW,QAAQ,EAAU,MAAM,kBAAkB,IAAY,CACtE,UAAW,EAAmB,EAAU,CACzC,CAAC,CAEJ,IAAM,EAA6B,KAAK,WAAW,OAAO,EAAM,CAChE,GAAI,CAAC,EAAO,QAAU,CAAC,EAAO,YAAc,CAAC,EAC3C,MAAM,IAAI,EACR,gBACA,mBAAmB,EAAM,IACzB,GACA,iEACD,CAOH,OALI,EAAO,kBAAoB,IAAA,GAKxB,EACL,EAAO,OAAS,QAAQ,EAAO,MAAM,KAAK,EAAO,OAAO,QAAU,QAAQ,EAAO,MAAM,sBACvF,CAAE,OAAQ,EAAQ,CACnB,CAPQ,EAAW,EAAoB,EAAO,OAAQ,EAAO,iBAAA,GAA4C,CAAE,CACxG,WAAY,CAAE,MAAO,EAAO,MAAO,CACpC,CAAC,CAON,KAAK,EAAiB,KAAM,CAC1B,IAAM,EAAK,EAAoB,EAAM,EAAO,GAAG,CACzC,EAAS,KAAK,WAAW,KAAK,EAAI,EAAO,OAAO,CACtD,OAAO,EAAW,uBAAuB,EAAG,IAAK,CAAE,QAAS,EAAQ,CAAC,CAEvE,KAAK,EAAiB,MAAO,CAC3B,IAAM,EAAK,EAAoB,EAAM,EAAO,GAAG,CACzC,EAAU,KAAK,QAAQ,IAAI,EAAG,EAAE,QACtC,GAAI,GAAW,CAAC,GAAY,EAAQ,CAClC,MAAM,IAAI,EACR,wBACA,QAAQ,EAAG,UAAU,EAAQ,qCAC7B,GACA,uCAAuC,EAAG,sBAC3C,CAEH,IAAM,EAAS,MAAM,KAAK,WAAW,MAAM,EAAI,EAAO,QAAS,IAAA,GAAW,EAAO,CACjF,OAAO,EAAW,kBAAkB,EAAO,UAAU,SAAS,EAAG,OAAO,EAAO,MAAM,IAAI,EAAO,UAAW,CACzG,MAAO,EACR,CAAC,CAEJ,KAAK,EAAiB,UAAW,CAC/B,IAAM,EAAO,EAAkB,GAA4B,CAAC,CAC5D,OAAO,EAAW,EAAK,OAAS,GAAoB,EAAK,CAAG,0CAA2C,CACrG,UAAW,EAAK,IAAI,EAAmB,CACxC,CAAC,CAEJ,KAAK,EAAiB,QAAS,CAC7B,IAAM,EAAQ,GAA4B,CACpC,EAAS,EAAkB,EAAM,CAAC,KAAM,GAAQ,EAAI,QAAU,EAAO,GAAG,CAC9E,GAAI,CAAC,EACH,MAAM,IAAI,EACR,gBACA,6BAA6B,EAAO,GAAG,IACvC,GACA,oEACD,CAEH,GAAI,CAAC,EAAwB,EAAO,CAClC,MAAM,IAAI,EACR,gBACA,kBAAkB,EAAO,GAAG,uDAC5B,GACA,sEACD,CAwBH,IAAM,EAtBS,KAAK,cAClB,MAAM,KAAK,QAAQ,MACjB,CACE,OAAQ,CACN,MAAO,EAAO,MACd,GAAI,EAAO,YAAc,CAAE,YAAa,EAAO,YAAa,CAAG,EAAE,CACjE,KAAM,EAAO,KACb,IAAK,EAAO,IACZ,GAAI,EAAO,MAAQ,CAAE,MAAO,EAAO,MAAO,CAAG,EAAE,CAC/C,YAAa,EAAO,YACrB,CACD,IAAK,EAAO,IACZ,WAAY,OACZ,QAAS,KACT,gBAAiB,EAAwB,EAAI,cAAc,CAC3D,GAAI,EAAc,CAAE,cAAa,CAAG,EAAE,CACtC,GAAI,EAAqB,CAAE,qBAAoB,CAAG,EAAE,CACrD,CACD,GAAY,CAAC,OACd,CACD,EAEoB,CAAC,SAAS,GAChC,GAAI,CAAC,GAAS,MACZ,MAAM,IAAI,EACR,gBACA,sBAAsB,EAAO,GAAG,KAAK,GAAS,OAAS,+BACvD,GACA,uFACD,CAGH,OADA,EAAkB,EAAO,EAAO,GAAG,CAC5B,EAAW,aAAa,EAAO,GAAG,QAAQ,EAAQ,MAAM,+BAAgC,CAC7F,QAAS,CAAE,GAAG,EAAS,aAAc,EAAO,GAAI,CACjD,CAAC,GAKR,WAAgF,CAC9E,MAAO,CACL,KAAM,EACN,MAAO,WACP,YAAa,EACb,WAAY,EACZ,iBAAkB,EAGlB,YAAa,OACb,YAAa,EAAW,IAAU,GAAmB,EAAe,EAAU,CAAE,EAAM,CACtF,cAAe,EAAQ,EAAS,IAAU,GAAqB,EAAQ,EAAS,EAAM,CACtF,QAAS,MAAO,EAAI,EAAW,EAAQ,EAAU,IAAuD,CACtG,IAAM,EAAS,EAAe,EAAU,CAClC,EAAW,EAAgB,EAAO,CAExC,GADI,GAAU,IAAW,EAAe,EAAU,EAAO,OAAO,CAAC,CAC7D,EAAO,SAAW,EAAiB,IAAK,OAAO,KAAK,WAAW,EAAI,EAAQ,EAAI,CACnF,GAAI,EAAO,SAAW,EAAiB,OAAQ,OAAO,KAAK,cAAc,EAAQ,EAAI,CAKrF,GAAI,EAHF,EAAO,SAAW,EAAiB,OACnC,EAAO,SAAW,EAAiB,MACnC,EAAO,SAAW,EAAiB,SACrB,OAAO,KAAK,kBAAkB,EAAQ,EAAK,EAAO,CAElE,IAAM,EAAY,EAChB,EACA,EACA,EAAO,SAAW,EAAiB,QAAU,CAAC,GAAY,CAAC,CAAG,EAAE,CACjE,CACD,GAAI,EAAU,OAAS,SAAU,CAC/B,GAAI,EAAU,OAAO,QAAU,aAAe,EAAU,OAAO,OAAQ,OAAO,EAAU,OAAO,OAC/F,MAAM,IAAI,EACR,uBACA,cAAc,EAAG,uBACjB,GACA,6DACD,CAEH,IAAM,EAAW,MAAM,KAAK,kBAAkB,EAAQ,EAAK,EAAQ,EAAU,OAAO,OAAQ,EAAG,CAE/F,OADA,EAAkB,EAAI,EAAU,OAAQ,EAAS,CAC1C,GAEV,QA9VJ,GAAY,KAKR,EAAO,EAAgB,aAAa,CAAA,KACpC,EAAO,EAAgB,kBAAkB,CAAA,KACzC,EAAO,EAAgB,gBAAgB,CAAA,KACvC,EAAO,EAAgB,sBAAsB,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../_virtual/_rolldown/runtime.cjs`),require(`./schemas.cjs`);let e=require(`@agimon-ai/doompi-extension-contracts/subagent-tool`);const t=[`Run and manage background subagents through one strict action-based contract.`,`Actions: ${[`${e.SUBAGENT_ACTIONS.agents}: list executable agents or inspect one by name`,`${e.SUBAGENT_ACTIONS.run}: start one or more fresh background runs`,`${e.SUBAGENT_ACTIONS.status}: inspect the fleet or one run`,`${e.SUBAGENT_ACTIONS.
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`),require(`./schemas.cjs`);let e=require(`@agimon-ai/doompi-extension-contracts/subagent-tool`);const t=[`Run and manage background subagents through one strict action-based contract.`,`Actions: ${[`${e.SUBAGENT_ACTIONS.agents}: list executable agents or inspect one by name`,`${e.SUBAGENT_ACTIONS.run}: start one or more fresh background runs`,`${e.SUBAGENT_ACTIONS.status}: inspect the fleet or one run`,`${e.SUBAGENT_ACTIONS.steer}: send acknowledged guidance to a Pi run`,`${e.SUBAGENT_ACTIONS.stop}: request idempotent termination`,`${e.SUBAGENT_ACTIONS.suspended}: list suspended work`,`${e.SUBAGENT_ACTIONS.restore}: continue a suspended Pi transcript`].join(`; `)}.`,`A run call uses requests:[{agent,task,cwd?,model?,runtime?}]. It returns after startup; completion arrives asynchronously.`,`Fleet status is {action:"status"}. transcriptLines is valid only with an id. Fleet status includes suspended runs and restore instructions.`,`External CLI runtimes do not support steering or intercom, and Team package tool exclusions are best effort for them.`,`Give every child a self-contained task; coordination and further delegation depend on the Team package policy.`].join(` `);exports.SUBAGENT_TOOL_DESCRIPTION=t;
|
|
2
2
|
//# sourceMappingURL=toolDescription.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolDescription.cjs","names":["SUBAGENT_ACTIONS"],"sources":["../../src/extensions/toolDescription.ts"],"sourcesContent":["import { SUBAGENT_ACTIONS } from './schemas.ts';\n\nconst ACTION_SUMMARY = [\n `${SUBAGENT_ACTIONS.agents}: list executable agents or inspect one by name`,\n `${SUBAGENT_ACTIONS.run}: start one or more fresh background runs`,\n `${SUBAGENT_ACTIONS.status}: inspect the fleet or one run`,\n `${SUBAGENT_ACTIONS.
|
|
1
|
+
{"version":3,"file":"toolDescription.cjs","names":["SUBAGENT_ACTIONS"],"sources":["../../src/extensions/toolDescription.ts"],"sourcesContent":["import { SUBAGENT_ACTIONS } from './schemas.ts';\n\nconst ACTION_SUMMARY = [\n `${SUBAGENT_ACTIONS.agents}: list executable agents or inspect one by name`,\n `${SUBAGENT_ACTIONS.run}: start one or more fresh background runs`,\n `${SUBAGENT_ACTIONS.status}: inspect the fleet or one run`,\n `${SUBAGENT_ACTIONS.steer}: send acknowledged guidance to a Pi run`,\n `${SUBAGENT_ACTIONS.stop}: request idempotent termination`,\n `${SUBAGENT_ACTIONS.suspended}: list suspended work`,\n `${SUBAGENT_ACTIONS.restore}: continue a suspended Pi transcript`,\n].join('; ');\n\nexport const SUBAGENT_SAFETY_GUIDANCE =\n 'Give every child a self-contained task; coordination and further delegation depend on the Team package policy.';\n\nexport const SUBAGENT_TOOL_DESCRIPTION = [\n 'Run and manage background subagents through one strict action-based contract.',\n `Actions: ${ACTION_SUMMARY}.`,\n 'A run call uses requests:[{agent,task,cwd?,model?,runtime?}]. It returns after startup; completion arrives asynchronously.',\n 'Fleet status is {action:\"status\"}. transcriptLines is valid only with an id. Fleet status includes suspended runs and restore instructions.',\n 'External CLI runtimes do not support steering or intercom, and Team package tool exclusions are best effort for them.',\n SUBAGENT_SAFETY_GUIDANCE,\n].join(' ');\n"],"mappings":"2IAEA,MAaa,EAA4B,CACvC,gFACA,YAfqB,CACrB,GAAGA,EAAAA,iBAAiB,OAAO,iDAC3B,GAAGA,EAAAA,iBAAiB,IAAI,2CACxB,GAAGA,EAAAA,iBAAiB,OAAO,gCAC3B,GAAGA,EAAAA,iBAAiB,MAAM,0CAC1B,GAAGA,EAAAA,iBAAiB,KAAK,kCACzB,GAAGA,EAAAA,iBAAiB,UAAU,uBAC9B,GAAGA,EAAAA,iBAAiB,QAAQ,sCAC7B,CAAC,KAAK,KAOO,CAAe,GAC3B,6HACA,8IACA,wHACA,iHACD,CAAC,KAAK,IAAI"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__esmMin as e}from"../_virtual/_rolldown/runtime.mjs";import{SUBAGENT_ACTIONS as t,init_schemas as n}from"./schemas.mjs";var r,i,a,o=e((()=>{n(),r=[`${t.agents}: list executable agents or inspect one by name`,`${t.run}: start one or more fresh background runs`,`${t.status}: inspect the fleet or one run`,`${t.
|
|
1
|
+
import{__esmMin as e}from"../_virtual/_rolldown/runtime.mjs";import{SUBAGENT_ACTIONS as t,init_schemas as n}from"./schemas.mjs";var r,i,a,o=e((()=>{n(),r=[`${t.agents}: list executable agents or inspect one by name`,`${t.run}: start one or more fresh background runs`,`${t.status}: inspect the fleet or one run`,`${t.steer}: send acknowledged guidance to a Pi run`,`${t.stop}: request idempotent termination`,`${t.suspended}: list suspended work`,`${t.restore}: continue a suspended Pi transcript`].join(`; `),i=`Give every child a self-contained task; coordination and further delegation depend on the Team package policy.`,a=[`Run and manage background subagents through one strict action-based contract.`,`Actions: ${r}.`,`A run call uses requests:[{agent,task,cwd?,model?,runtime?}]. It returns after startup; completion arrives asynchronously.`,`Fleet status is {action:"status"}. transcriptLines is valid only with an id. Fleet status includes suspended runs and restore instructions.`,`External CLI runtimes do not support steering or intercom, and Team package tool exclusions are best effort for them.`,i].join(` `)}));o();export{a as SUBAGENT_TOOL_DESCRIPTION,o as init_toolDescription};
|
|
2
2
|
//# sourceMappingURL=toolDescription.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolDescription.mjs","names":[],"sources":["../../src/extensions/toolDescription.ts"],"sourcesContent":["import { SUBAGENT_ACTIONS } from './schemas.ts';\n\nconst ACTION_SUMMARY = [\n `${SUBAGENT_ACTIONS.agents}: list executable agents or inspect one by name`,\n `${SUBAGENT_ACTIONS.run}: start one or more fresh background runs`,\n `${SUBAGENT_ACTIONS.status}: inspect the fleet or one run`,\n `${SUBAGENT_ACTIONS.
|
|
1
|
+
{"version":3,"file":"toolDescription.mjs","names":[],"sources":["../../src/extensions/toolDescription.ts"],"sourcesContent":["import { SUBAGENT_ACTIONS } from './schemas.ts';\n\nconst ACTION_SUMMARY = [\n `${SUBAGENT_ACTIONS.agents}: list executable agents or inspect one by name`,\n `${SUBAGENT_ACTIONS.run}: start one or more fresh background runs`,\n `${SUBAGENT_ACTIONS.status}: inspect the fleet or one run`,\n `${SUBAGENT_ACTIONS.steer}: send acknowledged guidance to a Pi run`,\n `${SUBAGENT_ACTIONS.stop}: request idempotent termination`,\n `${SUBAGENT_ACTIONS.suspended}: list suspended work`,\n `${SUBAGENT_ACTIONS.restore}: continue a suspended Pi transcript`,\n].join('; ');\n\nexport const SUBAGENT_SAFETY_GUIDANCE =\n 'Give every child a self-contained task; coordination and further delegation depend on the Team package policy.';\n\nexport const SUBAGENT_TOOL_DESCRIPTION = [\n 'Run and manage background subagents through one strict action-based contract.',\n `Actions: ${ACTION_SUMMARY}.`,\n 'A run call uses requests:[{agent,task,cwd?,model?,runtime?}]. It returns after startup; completion arrives asynchronously.',\n 'Fleet status is {action:\"status\"}. transcriptLines is valid only with an id. Fleet status includes suspended runs and restore instructions.',\n 'External CLI runtimes do not support steering or intercom, and Team package tool exclusions are best effort for them.',\n SUBAGENT_SAFETY_GUIDANCE,\n].join(' ');\n"],"mappings":"uJAAgD,CAE1C,EAAiB,CACrB,GAAG,EAAiB,OAAO,iDAC3B,GAAG,EAAiB,IAAI,2CACxB,GAAG,EAAiB,OAAO,gCAC3B,GAAG,EAAiB,MAAM,0CAC1B,GAAG,EAAiB,KAAK,kCACzB,GAAG,EAAiB,UAAU,uBAC9B,GAAG,EAAiB,QAAQ,sCAC7B,CAAC,KAAK,KAAK,CAEC,EACX,iHAEW,EAA4B,CACvC,gFACA,YAAY,EAAe,GAC3B,6HACA,8IACA,wHACA,EACD,CAAC,KAAK,IAAI"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./_virtual/_rolldown/runtime.cjs`),t=require(`./
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./_virtual/_rolldown/runtime.cjs`),t=require(`./container/globalBridge.cjs`),n=require(`./container/types.cjs`),r=require(`./services/agents/discovery.cjs`),i=require(`./container/index.cjs`);let a=require(`node:fs`);a=e.__toESM(a,1);let o=require(`node:path`);o=e.__toESM(o,1);async function s(e){let i=o.resolve(e.cwd);try{if(!a.statSync(i).isDirectory())return{ok:!1,code:`invalid_cwd`,message:`cwd '${i}' is not a directory.`}}catch(e){return{ok:!1,code:`invalid_cwd`,message:`cwd '${i}' is not a directory.${e instanceof Error?` ${e.message}`:``}`}}let s=(new t.GlobalStateBridge().getDefaultContainer()?.get(n.DOOM_TEAM_TYPES.AgentDiscoveryService)??new r.AgentDiscoveryService).find(i,e.agentScope??`both`,e.agent);return s?{ok:!0,contract:{agent:s,cwd:i,context:e.context??s.defaultContext??`fresh`}}:{ok:!1,code:`missing_agent`,message:`Unknown agent: ${e.agent}`}}exports.DOOM_TEAM_TYPES=n.DOOM_TEAM_TYPES,Object.defineProperty(exports,`GlobalStateBridge`,{enumerable:!0,get:function(){return t.GlobalStateBridge}}),exports.createExtensionContainer=i.createExtensionContainer,exports.createPromptRuntimeContainer=i.createPromptRuntimeContainer,exports.resolveSubagentLaunchContract=s;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["path","fs","AgentDiscoveryService"],"sources":["../src/index.ts"],"sourcesContent":["/**\n * Package root barrel.\n *\n * DESIGN PATTERNS:\n * - Named exports only, so consumers tree-shake cleanly\n * - Protocol surfaces use dedicated `./api/*` subpaths; cross-domain launch\n * composition lives here because the package root is an allowed composition\n * boundary\n *\n * AVOID:\n * - Re-exporting internals; anything exported here is public API\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport { AgentDiscoveryService } from './agents/discovery.ts';\nimport type { AgentConfig, AgentScope } from './agents/types.ts';\n\nexport {\n createExtensionContainer,\n createPromptRuntimeContainer,\n DOOM_TEAM_TYPES,\n GlobalStateBridge,\n} from './container/index.ts';\nexport type { IGlobalStateBridge } from './types.ts';\n\nexport interface SubagentLaunchContractInput {\n agent: string;\n cwd: string;\n task?: string;\n agentScope?: AgentScope;\n context?: 'fresh' | 'fork';\n skill?: string | string[] | boolean;\n artifacts?: boolean;\n}\n\nexport interface SubagentLaunchContract {\n agent: AgentConfig;\n cwd: string;\n context: 'fresh' | 'fork';\n}\n\nexport type SubagentLaunchContractResult =\n | { ok: true; contract: SubagentLaunchContract }\n | { ok: false; code: 'invalid_cwd' | 'missing_agent'; message: string };\n\n/** Lightweight public availability check using Doom Team's discovery rules. */\nexport async function resolveSubagentLaunchContract(\n input: SubagentLaunchContractInput,\n): Promise<SubagentLaunchContractResult> {\n const cwd = path.resolve(input.cwd);\n try {\n if (!fs.statSync(cwd).isDirectory()) {\n return { ok: false, code: 'invalid_cwd', message: `cwd '${cwd}' is not a directory.` };\n }\n } catch (error) {\n const detail = error instanceof Error ? ` ${error.message}` : '';\n return { ok: false, code: 'invalid_cwd', message: `cwd '${cwd}' is not a directory.${detail}` };\n }\n\n const
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["path","fs","GlobalStateBridge","DOOM_TEAM_TYPES","AgentDiscoveryService"],"sources":["../src/index.ts"],"sourcesContent":["/**\n * Package root barrel.\n *\n * DESIGN PATTERNS:\n * - Named exports only, so consumers tree-shake cleanly\n * - Protocol surfaces use dedicated `./api/*` subpaths; cross-domain launch\n * composition lives here because the package root is an allowed composition\n * boundary\n *\n * AVOID:\n * - Re-exporting internals; anything exported here is public API\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport { GlobalStateBridge } from './container/globalBridge.ts';\nimport { DOOM_TEAM_TYPES } from './container/types.ts';\nimport { AgentDiscoveryService } from './services/agents/discovery.ts';\nimport type { AgentConfig, AgentScope, IAgentDiscoveryService } from './services/agents/types.ts';\n\nexport {\n createExtensionContainer,\n createPromptRuntimeContainer,\n DOOM_TEAM_TYPES,\n GlobalStateBridge,\n} from './container/index.ts';\nexport type { IGlobalStateBridge } from './types/index.ts';\n\nexport interface SubagentLaunchContractInput {\n agent: string;\n cwd: string;\n task?: string;\n agentScope?: AgentScope;\n context?: 'fresh' | 'fork';\n skill?: string | string[] | boolean;\n artifacts?: boolean;\n}\n\nexport interface SubagentLaunchContract {\n agent: AgentConfig;\n cwd: string;\n context: 'fresh' | 'fork';\n}\n\nexport type SubagentLaunchContractResult =\n | { ok: true; contract: SubagentLaunchContract }\n | { ok: false; code: 'invalid_cwd' | 'missing_agent'; message: string };\n\n/** Lightweight public availability check using Doom Team's discovery rules. */\nexport async function resolveSubagentLaunchContract(\n input: SubagentLaunchContractInput,\n): Promise<SubagentLaunchContractResult> {\n const cwd = path.resolve(input.cwd);\n try {\n if (!fs.statSync(cwd).isDirectory()) {\n return { ok: false, code: 'invalid_cwd', message: `cwd '${cwd}' is not a directory.` };\n }\n } catch (error) {\n const detail = error instanceof Error ? ` ${error.message}` : '';\n return { ok: false, code: 'invalid_cwd', message: `cwd '${cwd}' is not a directory.${detail}` };\n }\n\n const discovery =\n new GlobalStateBridge().getDefaultContainer()?.get<IAgentDiscoveryService>(DOOM_TEAM_TYPES.AgentDiscoveryService) ??\n new AgentDiscoveryService();\n const agent = discovery.find(cwd, input.agentScope ?? 'both', input.agent);\n if (!agent) return { ok: false, code: 'missing_agent', message: `Unknown agent: ${input.agent}` };\n\n return {\n ok: true,\n contract: { agent, cwd, context: input.context ?? agent.defaultContext ?? 'fresh' },\n };\n}\n"],"mappings":"0WAkDA,eAAsB,EACpB,EACuC,CACvC,IAAM,EAAMA,EAAK,QAAQ,EAAM,IAAI,CACnC,GAAI,CACF,GAAI,CAACC,EAAG,SAAS,EAAI,CAAC,aAAa,CACjC,MAAO,CAAE,GAAI,GAAO,KAAM,cAAe,QAAS,QAAQ,EAAI,uBAAwB,OAEjF,EAAO,CAEd,MAAO,CAAE,GAAI,GAAO,KAAM,cAAe,QAAS,QAAQ,EAAI,uBAD/C,aAAiB,MAAQ,IAAI,EAAM,UAAY,KACiC,CAMjG,IAAM,GAFJ,IAAIC,EAAAA,mBAAmB,CAAC,qBAAqB,EAAE,IAA4BC,EAAAA,gBAAgB,sBAAsB,EACjH,IAAIC,EAAAA,uBACkB,KAAK,EAAK,EAAM,YAAc,OAAQ,EAAM,MAAM,CAG1E,OAFK,EAEE,CACL,GAAI,GACJ,SAAU,CAAE,QAAO,MAAK,QAAS,EAAM,SAAW,EAAM,gBAAkB,QAAS,CACpF,CALkB,CAAE,GAAI,GAAO,KAAM,gBAAiB,QAAS,kBAAkB,EAAM,QAAS"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { IGlobalStateBridge } from "./types.cjs";
|
|
2
|
-
import { AgentConfig, AgentScope } from "./agents/types.cjs";
|
|
1
|
+
import { IGlobalStateBridge } from "./types/index.cjs";
|
|
2
|
+
import { AgentConfig, AgentScope } from "./services/agents/types.cjs";
|
|
3
3
|
import { GlobalStateBridge } from "./container/globalBridge.cjs";
|
|
4
4
|
import { DOOM_TEAM_TYPES } from "./container/types.cjs";
|
|
5
5
|
import { createExtensionContainer, createPromptRuntimeContainer } from "./container/index.cjs";
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;UA6BiB,2BAAA;EACf,KAAA;EACA,GAAA;EACA,IAAA;EACA,UAAA,GAAa,UAAA;EACb,OAAA;EACA,KAAA;EACA,SAAA;AAAA;AAAA,UAGe,sBAAA;EACf,KAAA,EAAO,WAAA;EACP,GAAA;EACA,OAAA;AAAA;AAAA,KAGU,4BAAA;EACN,EAAA;EAAU,QAAA,EAAU,sBAAA;AAAA;EACpB,EAAA;EAAW,IAAA;EAAuC,OAAA;AAAA;;iBAGlC,6BAAA,CACpB,KAAA,EAAO,2BAAA,GACN,OAAA,CAAQ,4BAAA"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { IGlobalStateBridge } from "./types.mjs";
|
|
2
|
-
import { AgentConfig, AgentScope } from "./agents/types.mjs";
|
|
1
|
+
import { IGlobalStateBridge } from "./types/index.mjs";
|
|
2
|
+
import { AgentConfig, AgentScope } from "./services/agents/types.mjs";
|
|
3
3
|
import { GlobalStateBridge } from "./container/globalBridge.mjs";
|
|
4
4
|
import { DOOM_TEAM_TYPES } from "./container/types.mjs";
|
|
5
5
|
import { createExtensionContainer, createPromptRuntimeContainer } from "./container/index.mjs";
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;UA6BiB,2BAAA;EACf,KAAA;EACA,GAAA;EACA,IAAA;EACA,UAAA,GAAa,UAAA;EACb,OAAA;EACA,KAAA;EACA,SAAA;AAAA;AAAA,UAGe,sBAAA;EACf,KAAA,EAAO,WAAA;EACP,GAAA;EACA,OAAA;AAAA;AAAA,KAGU,4BAAA;EACN,EAAA;EAAU,QAAA,EAAU,sBAAA;AAAA;EACpB,EAAA;EAAW,IAAA;EAAuC,OAAA;AAAA;;iBAGlC,6BAAA,CACpB,KAAA,EAAO,2BAAA,GACN,OAAA,CAAQ,4BAAA"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{GlobalStateBridge as e,init_globalBridge as t}from"./container/globalBridge.mjs";import{DOOM_TEAM_TYPES as n,init_types as r}from"./container/types.mjs";import{AgentDiscoveryService as i,init_discovery as a}from"./services/agents/discovery.mjs";import{createExtensionContainer as o,createPromptRuntimeContainer as s,init_container as c}from"./container/index.mjs";import*as l from"node:fs";import*as u from"node:path";t(),r(),a(),c();async function d(t){let r=u.resolve(t.cwd);try{if(!l.statSync(r).isDirectory())return{ok:!1,code:`invalid_cwd`,message:`cwd '${r}' is not a directory.`}}catch(e){return{ok:!1,code:`invalid_cwd`,message:`cwd '${r}' is not a directory.${e instanceof Error?` ${e.message}`:``}`}}let a=(new e().getDefaultContainer()?.get(n.AgentDiscoveryService)??new i).find(r,t.agentScope??`both`,t.agent);return a?{ok:!0,contract:{agent:a,cwd:r,context:t.context??a.defaultContext??`fresh`}}:{ok:!1,code:`missing_agent`,message:`Unknown agent: ${t.agent}`}}export{n as DOOM_TEAM_TYPES,e as GlobalStateBridge,o as createExtensionContainer,s as createPromptRuntimeContainer,d as resolveSubagentLaunchContract};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["/**\n * Package root barrel.\n *\n * DESIGN PATTERNS:\n * - Named exports only, so consumers tree-shake cleanly\n * - Protocol surfaces use dedicated `./api/*` subpaths; cross-domain launch\n * composition lives here because the package root is an allowed composition\n * boundary\n *\n * AVOID:\n * - Re-exporting internals; anything exported here is public API\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport { AgentDiscoveryService } from './agents/discovery.ts';\nimport type { AgentConfig, AgentScope } from './agents/types.ts';\n\nexport {\n createExtensionContainer,\n createPromptRuntimeContainer,\n DOOM_TEAM_TYPES,\n GlobalStateBridge,\n} from './container/index.ts';\nexport type { IGlobalStateBridge } from './types.ts';\n\nexport interface SubagentLaunchContractInput {\n agent: string;\n cwd: string;\n task?: string;\n agentScope?: AgentScope;\n context?: 'fresh' | 'fork';\n skill?: string | string[] | boolean;\n artifacts?: boolean;\n}\n\nexport interface SubagentLaunchContract {\n agent: AgentConfig;\n cwd: string;\n context: 'fresh' | 'fork';\n}\n\nexport type SubagentLaunchContractResult =\n | { ok: true; contract: SubagentLaunchContract }\n | { ok: false; code: 'invalid_cwd' | 'missing_agent'; message: string };\n\n/** Lightweight public availability check using Doom Team's discovery rules. */\nexport async function resolveSubagentLaunchContract(\n input: SubagentLaunchContractInput,\n): Promise<SubagentLaunchContractResult> {\n const cwd = path.resolve(input.cwd);\n try {\n if (!fs.statSync(cwd).isDirectory()) {\n return { ok: false, code: 'invalid_cwd', message: `cwd '${cwd}' is not a directory.` };\n }\n } catch (error) {\n const detail = error instanceof Error ? ` ${error.message}` : '';\n return { ok: false, code: 'invalid_cwd', message: `cwd '${cwd}' is not a directory.${detail}` };\n }\n\n const
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["/**\n * Package root barrel.\n *\n * DESIGN PATTERNS:\n * - Named exports only, so consumers tree-shake cleanly\n * - Protocol surfaces use dedicated `./api/*` subpaths; cross-domain launch\n * composition lives here because the package root is an allowed composition\n * boundary\n *\n * AVOID:\n * - Re-exporting internals; anything exported here is public API\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport { GlobalStateBridge } from './container/globalBridge.ts';\nimport { DOOM_TEAM_TYPES } from './container/types.ts';\nimport { AgentDiscoveryService } from './services/agents/discovery.ts';\nimport type { AgentConfig, AgentScope, IAgentDiscoveryService } from './services/agents/types.ts';\n\nexport {\n createExtensionContainer,\n createPromptRuntimeContainer,\n DOOM_TEAM_TYPES,\n GlobalStateBridge,\n} from './container/index.ts';\nexport type { IGlobalStateBridge } from './types/index.ts';\n\nexport interface SubagentLaunchContractInput {\n agent: string;\n cwd: string;\n task?: string;\n agentScope?: AgentScope;\n context?: 'fresh' | 'fork';\n skill?: string | string[] | boolean;\n artifacts?: boolean;\n}\n\nexport interface SubagentLaunchContract {\n agent: AgentConfig;\n cwd: string;\n context: 'fresh' | 'fork';\n}\n\nexport type SubagentLaunchContractResult =\n | { ok: true; contract: SubagentLaunchContract }\n | { ok: false; code: 'invalid_cwd' | 'missing_agent'; message: string };\n\n/** Lightweight public availability check using Doom Team's discovery rules. */\nexport async function resolveSubagentLaunchContract(\n input: SubagentLaunchContractInput,\n): Promise<SubagentLaunchContractResult> {\n const cwd = path.resolve(input.cwd);\n try {\n if (!fs.statSync(cwd).isDirectory()) {\n return { ok: false, code: 'invalid_cwd', message: `cwd '${cwd}' is not a directory.` };\n }\n } catch (error) {\n const detail = error instanceof Error ? ` ${error.message}` : '';\n return { ok: false, code: 'invalid_cwd', message: `cwd '${cwd}' is not a directory.${detail}` };\n }\n\n const discovery =\n new GlobalStateBridge().getDefaultContainer()?.get<IAgentDiscoveryService>(DOOM_TEAM_TYPES.AgentDiscoveryService) ??\n new AgentDiscoveryService();\n const agent = discovery.find(cwd, input.agentScope ?? 'both', input.agent);\n if (!agent) return { ok: false, code: 'missing_agent', message: `Unknown agent: ${input.agent}` };\n\n return {\n ok: true,\n contract: { agent, cwd, context: input.context ?? agent.defaultContext ?? 'fresh' },\n };\n}\n"],"mappings":"4aAgBgE,IACT,IACgB,IAQzC,CAwB9B,eAAsB,EACpB,EACuC,CACvC,IAAM,EAAM,EAAK,QAAQ,EAAM,IAAI,CACnC,GAAI,CACF,GAAI,CAAC,EAAG,SAAS,EAAI,CAAC,aAAa,CACjC,MAAO,CAAE,GAAI,GAAO,KAAM,cAAe,QAAS,QAAQ,EAAI,uBAAwB,OAEjF,EAAO,CAEd,MAAO,CAAE,GAAI,GAAO,KAAM,cAAe,QAAS,QAAQ,EAAI,uBAD/C,aAAiB,MAAQ,IAAI,EAAM,UAAY,KACiC,CAMjG,IAAM,GAFJ,IAAI,GAAmB,CAAC,qBAAqB,EAAE,IAA4B,EAAgB,sBAAsB,EACjH,IAAI,GACkB,KAAK,EAAK,EAAM,YAAc,OAAQ,EAAM,MAAM,CAG1E,OAFK,EAEE,CACL,GAAI,GACJ,SAAU,CAAE,QAAO,MAAK,QAAS,EAAM,SAAW,EAAM,gBAAkB,QAAS,CACpF,CALkB,CAAE,GAAI,GAAO,KAAM,gBAAiB,QAAS,kBAAkB,EAAM,QAAS"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=cliRunnerEntry.cjs.map
|
|
1
|
+
require(`../../services/runs/background/cliRunnerEntry.cjs`);
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
//# sourceMappingURL=cliRunnerEntry.mjs.map
|
|
1
|
+
import"../../services/runs/background/cliRunnerEntry.mjs";export{};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=sdkRunnerEntry.cjs.map
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../adapters/process/sdkRunnerEntry.cjs`);require(`../services/runs/sdkRunnerEntry.cjs`),exports.runSdkChild=e.runSdkChild;
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { runSdkChild } from "../adapters/process/sdkRunnerEntry.cjs";
|
|
2
|
+
export { runSdkChild };
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { runSdkChild } from "../adapters/process/sdkRunnerEntry.mjs";
|
|
2
|
+
export { runSdkChild };
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=sdkRunnerEntry.mjs.map
|
|
1
|
+
import{runSdkChild as e}from"../adapters/process/sdkRunnerEntry.mjs";import"../services/runs/sdkRunnerEntry.mjs";export{e as runSdkChild};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../container/globalBridge.cjs`),t=`pi-subagents.background-work.v1`,n=`pi-subagents.background-work.registration.v1`,r=1e4,i=[`name`,`listActiveWork`,`wakeChannels`,`reconcile`];function a(t){return t??new e.GlobalStateBridge}function o(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Malformed background-work registry at Symbol.for("${t}").`);let n=e;if(n.version!==1||!(n.providers instanceof Map))throw Error(`Unsupported background-work registry at Symbol.for("${t}").`);return n}function s(e){return a(e).protocolSlot(t,()=>({version:1,providers:new Map}),o)}function c(e,t,n){if(typeof e!=`string`||e.length===0||e.trim()!==e)throw Error(`${t} must be a non-empty string without leading or trailing whitespace.`);if(e.length>n)throw Error(`${t} must be at most ${n} characters.`);if(e.includes(`\0`))throw Error(`${t} must not contain NUL characters.`);return e}function l(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Background-work provider must be an object.`);let t=e,n=Object.keys(t).filter(e=>!i.includes(e));if(n.length>0)throw Error(`Background-work provider has unknown fields: ${n.join(`, `)}.`);let r=c(t.name,`Background-work provider name`,128);if(typeof t.listActiveWork!=`function`)throw Error(`Background-work provider '${r}' must expose listActiveWork().`);if(t.reconcile!==void 0&&typeof t.reconcile!=`function`)throw Error(`Background-work provider '${r}' reconcile must be a function when provided.`);if(t.wakeChannels!==void 0){if(!Array.isArray(t.wakeChannels))throw Error(`Background-work provider '${r}' wakeChannels must be an array when provided.`);let e=t.wakeChannels.map((e,t)=>c(e,`Background-work provider '${r}' wakeChannels[${t}]`,256));if(new Set(e).size!==e.length)throw Error(`Background-work provider '${r}' wakeChannels must not contain duplicates.`)}return e}function u(e,t,n){if(!t||typeof t!=`object`||Array.isArray(t))throw Error(`Background-work provider '${e}' item ${n} must be an object.`);let r=t,i=Object.keys(r).filter(e=>e!==`id`&&e!==`sessionId`);if(i.length>0)throw Error(`Background-work provider '${e}' item ${n} has unknown fields: ${i.join(`, `)}.`);return{id:c(r.id,`Background-work provider '${e}' item ${n} id`,256),sessionId:c(r.sessionId,`Background-work provider '${e}' item ${n} sessionId`,256)}}function d(e,t){let n=l(e),r=s(t);if(!r.providers.has(n.name)&&r.providers.size>=100)throw Error(`Background-work registry supports at most 100 providers.`);return r.providers.set(n.name,n),()=>{r.providers.get(n.name)===n&&r.providers.delete(n.name)}}function f(e){let t=s(e);if(t.providers.size>100)throw Error(`Background-work registry contains more than 100 providers.`);let n=[];for(let[e,r]of t.providers){let t=l(r);if(e!==t.name)throw Error(`Background-work registry key '${e}' does not match provider name '${t.name}'.`);n.push(t)}return n}function p(e){let t=new Set;for(let n of f(e))for(let e of n.wakeChannels??[])t.add(e);return[...t]}function m(e,t=Date.now(),n){c(e,`Background-work snapshot sessionId`,256);let i=f(n),a=[],o=new Set;for(let n of i){try{n.reconcile?.({sessionId:e,nowMs:t})}catch(e){throw Error(`Background-work provider '${n.name}' reconcile failed: ${e instanceof Error?e.message:String(e)}`,{cause:e})}let i;try{i=n.listActiveWork()}catch(e){throw Error(`Background-work provider '${n.name}' listActiveWork failed: ${e instanceof Error?e.message:String(e)}`,{cause:e})}if(!Array.isArray(i))throw Error(`Background-work provider '${n.name}' listActiveWork() must return an array.`);if(i.length>r)throw Error(`Background-work provider '${n.name}' returned ${i.length} items; maximum is ${r}.`);i.forEach((t,r)=>{let i=u(n.name,t,r),s=`${n.name}\0${i.sessionId}\0${i.id}`;if(o.has(s))throw Error(`Background-work provider '${n.name}' returned duplicate item '${i.id}' for session '${i.sessionId}'.`);o.add(s),i.sessionId===e&&a.push({provider:n.name,...i})})}return{providers:i.map(e=>e.name),items:a}}function h(e){a(e).claimProtocolSlot(n,d)}exports.BACKGROUND_WORK_PROTOCOL_VERSION=1,exports.BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY=n,exports.BACKGROUND_WORK_REGISTRY_KEY=t,exports.installBackgroundWorkRegistrationBridge=h,exports.listBackgroundWorkProviders=f,exports.listBackgroundWorkWakeChannels=p,exports.registerBackgroundWorkProvider=d,exports.snapshotBackgroundWork=m;
|
|
2
|
+
//# sourceMappingURL=backgroundWork.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backgroundWork.cjs","names":["GlobalStateBridge"],"sources":["../../../src/schemas/team/backgroundWork.ts"],"sourcesContent":["/**\n * Background-work registry - a cross-bundle protocol.\n *\n * DESIGN PATTERNS:\n * - Process-global registry keyed by `Symbol.for`, so every bundle that speaks\n * the protocol shares one map regardless of how many copies are loaded\n * - Validate on read as well as on write: entries can be authored by a foreign\n * bundle of any version\n *\n * PROTOCOL COMPATIBILITY (do not change):\n * The key strings and version number below are shared with doom-pi-subagents\n * and with consumers built against it. During cutover both packages can be\n * loaded at once and must attach to the same registry, so these literals are\n * reproduced verbatim and pinned by contract tests.\n *\n * AVOID:\n * - Renaming the keys to a doom-team namespace; that would silently split the\n * registry in two and hide half the in-flight work from the parent\n */\n\nimport { GlobalStateBridge } from '../../container/globalBridge.ts';\nimport type { IGlobalStateBridge } from '../../types/index.ts';\n\nexport const BACKGROUND_WORK_PROTOCOL_VERSION = 1;\nexport const BACKGROUND_WORK_REGISTRY_KEY = 'pi-subagents.background-work.v1';\n\n/**\n * Backward-compatible cross-package registration bridge. Its shape is separate\n * from the v1 registry so existing hosts can keep validating that registry.\n */\nexport const BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY = 'pi-subagents.background-work.registration.v1';\nexport type BackgroundWorkRegistrationBridge = (provider: BackgroundWorkProvider) => () => void;\n\nconst MAX_PROVIDER_NAME_LENGTH = 128;\nconst MAX_PROVIDERS = 100;\nconst MAX_ITEM_ID_LENGTH = 256;\nconst MAX_SESSION_ID_LENGTH = 256;\nconst MAX_WAKE_CHANNEL_LENGTH = 256;\nconst MAX_ITEMS_PER_PROVIDER = 10_000;\nconst PROVIDER_FIELDS = ['name', 'listActiveWork', 'wakeChannels', 'reconcile'];\n\nexport interface BackgroundWorkItem {\n id: string;\n sessionId: string;\n}\n\nexport interface BackgroundWorkReconcileContext {\n sessionId: string;\n nowMs: number;\n}\n\nexport interface BackgroundWorkProvider {\n name: string;\n listActiveWork(): readonly BackgroundWorkItem[];\n wakeChannels?: readonly string[];\n reconcile?(context: BackgroundWorkReconcileContext): void;\n}\n\nexport interface RegisteredBackgroundWorkItem extends BackgroundWorkItem {\n provider: string;\n}\n\nexport interface BackgroundWorkSnapshot {\n providers: readonly string[];\n items: readonly RegisteredBackgroundWorkItem[];\n}\n\ninterface BackgroundWorkRegistry {\n version: typeof BACKGROUND_WORK_PROTOCOL_VERSION;\n providers: Map<string, BackgroundWorkProvider>;\n}\n\n/**\n * The public API functions are called by extensions that hold no container, so\n * they fall back to a standalone bridge. The bridge is a stateless accessor,\n * which makes this safe.\n */\nfunction bridgeFor(bridge?: IGlobalStateBridge): IGlobalStateBridge {\n return bridge ?? new GlobalStateBridge();\n}\n\nfunction adoptRegistry(existing: unknown): BackgroundWorkRegistry {\n if (!existing || typeof existing !== 'object' || Array.isArray(existing)) {\n throw new Error(`Malformed background-work registry at Symbol.for(\"${BACKGROUND_WORK_REGISTRY_KEY}\").`);\n }\n const candidate = existing as Partial<BackgroundWorkRegistry>;\n if (candidate.version !== BACKGROUND_WORK_PROTOCOL_VERSION || !(candidate.providers instanceof Map)) {\n throw new Error(`Unsupported background-work registry at Symbol.for(\"${BACKGROUND_WORK_REGISTRY_KEY}\").`);\n }\n return candidate as BackgroundWorkRegistry;\n}\n\nfunction registry(bridge?: IGlobalStateBridge): BackgroundWorkRegistry {\n return bridgeFor(bridge).protocolSlot<BackgroundWorkRegistry>(\n BACKGROUND_WORK_REGISTRY_KEY,\n () => ({ version: BACKGROUND_WORK_PROTOCOL_VERSION, providers: new Map() }),\n adoptRegistry,\n );\n}\n\nfunction validateString(value: unknown, field: string, maxLength: number): string {\n if (typeof value !== 'string' || value.length === 0 || value.trim() !== value) {\n throw new Error(`${field} must be a non-empty string without leading or trailing whitespace.`);\n }\n if (value.length > maxLength) throw new Error(`${field} must be at most ${maxLength} characters.`);\n if (value.includes('\\0')) throw new Error(`${field} must not contain NUL characters.`);\n return value;\n}\n\nfunction validateProvider(value: unknown): BackgroundWorkProvider {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('Background-work provider must be an object.');\n }\n const provider = value as Record<string, unknown>;\n const unknownFields = Object.keys(provider).filter((key) => !PROVIDER_FIELDS.includes(key));\n if (unknownFields.length > 0) {\n throw new Error(`Background-work provider has unknown fields: ${unknownFields.join(', ')}.`);\n }\n const name = validateString(provider.name, 'Background-work provider name', MAX_PROVIDER_NAME_LENGTH);\n if (typeof provider.listActiveWork !== 'function') {\n throw new Error(`Background-work provider '${name}' must expose listActiveWork().`);\n }\n if (provider.reconcile !== undefined && typeof provider.reconcile !== 'function') {\n throw new Error(`Background-work provider '${name}' reconcile must be a function when provided.`);\n }\n if (provider.wakeChannels !== undefined) {\n if (!Array.isArray(provider.wakeChannels)) {\n throw new Error(`Background-work provider '${name}' wakeChannels must be an array when provided.`);\n }\n const channels = provider.wakeChannels.map((channel, index) =>\n validateString(channel, `Background-work provider '${name}' wakeChannels[${index}]`, MAX_WAKE_CHANNEL_LENGTH),\n );\n if (new Set(channels).size !== channels.length) {\n throw new Error(`Background-work provider '${name}' wakeChannels must not contain duplicates.`);\n }\n }\n return value as BackgroundWorkProvider;\n}\n\nfunction validateItem(provider: string, value: unknown, index: number): BackgroundWorkItem {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error(`Background-work provider '${provider}' item ${index} must be an object.`);\n }\n const item = value as Record<string, unknown>;\n const unknownFields = Object.keys(item).filter((key) => key !== 'id' && key !== 'sessionId');\n if (unknownFields.length > 0) {\n throw new Error(\n `Background-work provider '${provider}' item ${index} has unknown fields: ${unknownFields.join(', ')}.`,\n );\n }\n return {\n id: validateString(item.id, `Background-work provider '${provider}' item ${index} id`, MAX_ITEM_ID_LENGTH),\n sessionId: validateString(\n item.sessionId,\n `Background-work provider '${provider}' item ${index} sessionId`,\n MAX_SESSION_ID_LENGTH,\n ),\n };\n}\n\n/**\n * Register or replace one process-local background-work provider. The returned\n * disposer only removes this exact registration, so an old extension reload\n * cannot unregister its replacement.\n */\nexport function registerBackgroundWorkProvider(\n provider: BackgroundWorkProvider,\n bridge?: IGlobalStateBridge,\n): () => void {\n const validated = validateProvider(provider);\n const current = registry(bridge);\n if (!current.providers.has(validated.name) && current.providers.size >= MAX_PROVIDERS) {\n throw new Error(`Background-work registry supports at most ${MAX_PROVIDERS} providers.`);\n }\n current.providers.set(validated.name, validated);\n return () => {\n if (current.providers.get(validated.name) === validated) current.providers.delete(validated.name);\n };\n}\n\nexport function listBackgroundWorkProviders(bridge?: IGlobalStateBridge): readonly BackgroundWorkProvider[] {\n const current = registry(bridge);\n if (current.providers.size > MAX_PROVIDERS) {\n throw new Error(`Background-work registry contains more than ${MAX_PROVIDERS} providers.`);\n }\n const providers: BackgroundWorkProvider[] = [];\n for (const [key, value] of current.providers) {\n const provider = validateProvider(value);\n if (key !== provider.name) {\n throw new Error(`Background-work registry key '${key}' does not match provider name '${provider.name}'.`);\n }\n providers.push(provider);\n }\n return providers;\n}\n\n/** Read validated provider wake channels without reconciling or listing work. */\nexport function listBackgroundWorkWakeChannels(bridge?: IGlobalStateBridge): readonly string[] {\n const channels = new Set<string>();\n for (const provider of listBackgroundWorkProviders(bridge)) {\n for (const channel of provider.wakeChannels ?? []) channels.add(channel);\n }\n return [...channels];\n}\n\n/** Reconcile and snapshot active provider work owned by one exact Pi session. */\nexport function snapshotBackgroundWork(\n sessionId: string,\n nowMs = Date.now(),\n bridge?: IGlobalStateBridge,\n): BackgroundWorkSnapshot {\n validateString(sessionId, 'Background-work snapshot sessionId', MAX_SESSION_ID_LENGTH);\n const providers = listBackgroundWorkProviders(bridge);\n const items: RegisteredBackgroundWorkItem[] = [];\n const identities = new Set<string>();\n for (const provider of providers) {\n try {\n provider.reconcile?.({ sessionId, nowMs });\n } catch (error) {\n throw new Error(\n `Background-work provider '${provider.name}' reconcile failed: ${error instanceof Error ? error.message : String(error)}`,\n { cause: error },\n );\n }\n let active: readonly BackgroundWorkItem[];\n try {\n active = provider.listActiveWork();\n } catch (error) {\n throw new Error(\n `Background-work provider '${provider.name}' listActiveWork failed: ${error instanceof Error ? error.message : String(error)}`,\n { cause: error },\n );\n }\n if (!Array.isArray(active)) {\n throw new Error(`Background-work provider '${provider.name}' listActiveWork() must return an array.`);\n }\n if (active.length > MAX_ITEMS_PER_PROVIDER) {\n throw new Error(\n `Background-work provider '${provider.name}' returned ${active.length} items; maximum is ${MAX_ITEMS_PER_PROVIDER}.`,\n );\n }\n active.forEach((value, index) => {\n const item = validateItem(provider.name, value, index);\n const identity = `${provider.name}\\0${item.sessionId}\\0${item.id}`;\n if (identities.has(identity)) {\n throw new Error(\n `Background-work provider '${provider.name}' returned duplicate item '${item.id}' for session '${item.sessionId}'.`,\n );\n }\n identities.add(identity);\n if (item.sessionId === sessionId) items.push({ provider: provider.name, ...item });\n });\n }\n return { providers: providers.map((provider) => provider.name), items };\n}\n\n/**\n * Publish the registration bridge for hosts that discover it by symbol rather\n * than by import. First writer wins, so a bundle loaded alongside this one keeps\n * whichever function it already installed.\n */\nexport function installBackgroundWorkRegistrationBridge(bridge?: IGlobalStateBridge): void {\n bridgeFor(bridge).claimProtocolSlot(\n BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY,\n registerBackgroundWorkProvider as BackgroundWorkRegistrationBridge,\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { IGlobalStateBridge } from "
|
|
1
|
+
import { IGlobalStateBridge } from "../../types/index.cjs";
|
|
2
2
|
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/schemas/team/backgroundWork.d.ts
|
|
4
4
|
declare const BACKGROUND_WORK_PROTOCOL_VERSION = 1;
|
|
5
5
|
declare const BACKGROUND_WORK_REGISTRY_KEY = "pi-subagents.background-work.v1";
|
|
6
6
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backgroundWork.d.cts","names":[],"sources":["../../../src/schemas/team/backgroundWork.ts"],"mappings":";;;cAuBa,gCAAA;AAAA,cACA,4BAAA;;AAiBb;;;cAXa,uCAAA;AAAA,KACD,gCAAA,IAAoC,QAAA,EAAU,sBAAA;AAAA,UAUzC,kBAAA;EACf,EAAA;EACA,SAAA;AAAA;AAAA,UAGe,8BAAA;EACf,SAAA;EACA,KAAA;AAAA;AAAA,UAGe,sBAAA;EACf,IAAA;EACA,cAAA,aAA2B,kBAAA;EAC3B,YAAA;EACA,SAAA,EAAW,OAAA,EAAS,8BAAA;AAAA;AAAA,UAGL,4BAAA,SAAqC,kBAAA;EACpD,QAAA;AAAA;AAAA,UAGe,sBAAA;EACf,SAAA;EACA,KAAA,WAAgB,4BAAA;AAAA;;;AAFlB;;;iBAuGgB,8BAAA,CACd,QAAA,EAAU,sBAAA,EACV,MAAA,GAAS,kBAAA;AAAA,iBAaK,2BAAA,CAA4B,MAAA,GAAS,kBAAA,YAA8B,sBAAA;;iBAiBnE,8BAAA,CAA+B,MAAA,GAAS,kBAAA;;iBASxC,sBAAA,CACd,SAAA,UACA,KAAA,WACA,MAAA,GAAS,kBAAA,GACR,sBAAA;AA7CH;;;;;AAAA,iBAgGgB,uCAAA,CAAwC,MAAA,GAAS,kBAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { IGlobalStateBridge } from "
|
|
1
|
+
import { IGlobalStateBridge } from "../../types/index.mjs";
|
|
2
2
|
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/schemas/team/backgroundWork.d.ts
|
|
4
4
|
declare const BACKGROUND_WORK_PROTOCOL_VERSION = 1;
|
|
5
5
|
declare const BACKGROUND_WORK_REGISTRY_KEY = "pi-subagents.background-work.v1";
|
|
6
6
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backgroundWork.d.mts","names":[],"sources":["../../../src/schemas/team/backgroundWork.ts"],"mappings":";;;cAuBa,gCAAA;AAAA,cACA,4BAAA;;AAiBb;;;cAXa,uCAAA;AAAA,KACD,gCAAA,IAAoC,QAAA,EAAU,sBAAA;AAAA,UAUzC,kBAAA;EACf,EAAA;EACA,SAAA;AAAA;AAAA,UAGe,8BAAA;EACf,SAAA;EACA,KAAA;AAAA;AAAA,UAGe,sBAAA;EACf,IAAA;EACA,cAAA,aAA2B,kBAAA;EAC3B,YAAA;EACA,SAAA,EAAW,OAAA,EAAS,8BAAA;AAAA;AAAA,UAGL,4BAAA,SAAqC,kBAAA;EACpD,QAAA;AAAA;AAAA,UAGe,sBAAA;EACf,SAAA;EACA,KAAA,WAAgB,4BAAA;AAAA;;;AAFlB;;;iBAuGgB,8BAAA,CACd,QAAA,EAAU,sBAAA,EACV,MAAA,GAAS,kBAAA;AAAA,iBAaK,2BAAA,CAA4B,MAAA,GAAS,kBAAA,YAA8B,sBAAA;;iBAiBnE,8BAAA,CAA+B,MAAA,GAAS,kBAAA;;iBASxC,sBAAA,CACd,SAAA,UACA,KAAA,WACA,MAAA,GAAS,kBAAA,GACR,sBAAA;AA7CH;;;;;AAAA,iBAgGgB,uCAAA,CAAwC,MAAA,GAAS,kBAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{GlobalStateBridge as e,init_globalBridge as t}from"../../container/globalBridge.mjs";t();const n=1,r=`pi-subagents.background-work.v1`,i=`pi-subagents.background-work.registration.v1`,a=1e4,o=[`name`,`listActiveWork`,`wakeChannels`,`reconcile`];function s(t){return t??new e}function c(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Malformed background-work registry at Symbol.for("${r}").`);let t=e;if(t.version!==1||!(t.providers instanceof Map))throw Error(`Unsupported background-work registry at Symbol.for("${r}").`);return t}function l(e){return s(e).protocolSlot(r,()=>({version:1,providers:new Map}),c)}function u(e,t,n){if(typeof e!=`string`||e.length===0||e.trim()!==e)throw Error(`${t} must be a non-empty string without leading or trailing whitespace.`);if(e.length>n)throw Error(`${t} must be at most ${n} characters.`);if(e.includes(`\0`))throw Error(`${t} must not contain NUL characters.`);return e}function d(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Background-work provider must be an object.`);let t=e,n=Object.keys(t).filter(e=>!o.includes(e));if(n.length>0)throw Error(`Background-work provider has unknown fields: ${n.join(`, `)}.`);let r=u(t.name,`Background-work provider name`,128);if(typeof t.listActiveWork!=`function`)throw Error(`Background-work provider '${r}' must expose listActiveWork().`);if(t.reconcile!==void 0&&typeof t.reconcile!=`function`)throw Error(`Background-work provider '${r}' reconcile must be a function when provided.`);if(t.wakeChannels!==void 0){if(!Array.isArray(t.wakeChannels))throw Error(`Background-work provider '${r}' wakeChannels must be an array when provided.`);let e=t.wakeChannels.map((e,t)=>u(e,`Background-work provider '${r}' wakeChannels[${t}]`,256));if(new Set(e).size!==e.length)throw Error(`Background-work provider '${r}' wakeChannels must not contain duplicates.`)}return e}function f(e,t,n){if(!t||typeof t!=`object`||Array.isArray(t))throw Error(`Background-work provider '${e}' item ${n} must be an object.`);let r=t,i=Object.keys(r).filter(e=>e!==`id`&&e!==`sessionId`);if(i.length>0)throw Error(`Background-work provider '${e}' item ${n} has unknown fields: ${i.join(`, `)}.`);return{id:u(r.id,`Background-work provider '${e}' item ${n} id`,256),sessionId:u(r.sessionId,`Background-work provider '${e}' item ${n} sessionId`,256)}}function p(e,t){let n=d(e),r=l(t);if(!r.providers.has(n.name)&&r.providers.size>=100)throw Error(`Background-work registry supports at most 100 providers.`);return r.providers.set(n.name,n),()=>{r.providers.get(n.name)===n&&r.providers.delete(n.name)}}function m(e){let t=l(e);if(t.providers.size>100)throw Error(`Background-work registry contains more than 100 providers.`);let n=[];for(let[e,r]of t.providers){let t=d(r);if(e!==t.name)throw Error(`Background-work registry key '${e}' does not match provider name '${t.name}'.`);n.push(t)}return n}function h(e){let t=new Set;for(let n of m(e))for(let e of n.wakeChannels??[])t.add(e);return[...t]}function g(e,t=Date.now(),n){u(e,`Background-work snapshot sessionId`,256);let r=m(n),i=[],o=new Set;for(let n of r){try{n.reconcile?.({sessionId:e,nowMs:t})}catch(e){throw Error(`Background-work provider '${n.name}' reconcile failed: ${e instanceof Error?e.message:String(e)}`,{cause:e})}let r;try{r=n.listActiveWork()}catch(e){throw Error(`Background-work provider '${n.name}' listActiveWork failed: ${e instanceof Error?e.message:String(e)}`,{cause:e})}if(!Array.isArray(r))throw Error(`Background-work provider '${n.name}' listActiveWork() must return an array.`);if(r.length>a)throw Error(`Background-work provider '${n.name}' returned ${r.length} items; maximum is ${a}.`);r.forEach((t,r)=>{let a=f(n.name,t,r),s=`${n.name}\0${a.sessionId}\0${a.id}`;if(o.has(s))throw Error(`Background-work provider '${n.name}' returned duplicate item '${a.id}' for session '${a.sessionId}'.`);o.add(s),a.sessionId===e&&i.push({provider:n.name,...a})})}return{providers:r.map(e=>e.name),items:i}}function _(e){s(e).claimProtocolSlot(i,p)}export{n as BACKGROUND_WORK_PROTOCOL_VERSION,i as BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY,r as BACKGROUND_WORK_REGISTRY_KEY,_ as installBackgroundWorkRegistrationBridge,m as listBackgroundWorkProviders,h as listBackgroundWorkWakeChannels,p as registerBackgroundWorkProvider,g as snapshotBackgroundWork};
|
|
2
|
+
//# sourceMappingURL=backgroundWork.mjs.map
|