@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusReader.cjs","names":["fs","path","currentRunsDir","STATUS_FILE_NAME"],"sources":["../../src/adapters/statusReader.ts"],"sourcesContent":["import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport type { AsyncRunStatus } from '../services/runs/background/asyncExecution.ts';\nimport { STATUS_FILE_NAME } from '../services/runs/background/statusWriter.ts';\nimport { currentRunsDir } from '../shared/paths.ts';\n\nexport type StatusReadFailure =\n | { kind: 'missing'; path: string }\n | { kind: 'malformed'; path: string; message: string }\n | { kind: 'incompatible'; path: string; version: unknown }\n | { kind: 'io_error'; path: string; message: string };\n\nexport type StatusReadResult = { kind: 'ok'; path: string; status: AsyncRunStatus } | StatusReadFailure;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function parseAsyncRunStatus(raw: string, statusPath = '<memory>'): StatusReadResult {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n return { kind: 'malformed', path: statusPath, message: error instanceof Error ? error.message : String(error) };\n }\n if (\n !isRecord(parsed) ||\n typeof parsed.runId !== 'string' ||\n typeof parsed.agent !== 'string' ||\n typeof parsed.state !== 'string'\n ) {\n return { kind: 'malformed', path: statusPath, message: 'Expected runId, agent and state fields.' };\n }\n if (parsed.version !== undefined && parsed.version !== 1) {\n return { kind: 'incompatible', path: statusPath, version: parsed.version };\n }\n\n // Read-only compatibility for statuses created before the canonical state\n // name was adopted. New writers emit only `completed`.\n if (parsed.state === 'complete') parsed.state = 'completed';\n if (typeof parsed.reason === 'string' && parsed.attentionReason === undefined) {\n parsed.attentionReason = parsed.reason;\n }\n return { kind: 'ok', path: statusPath, status: parsed as unknown as AsyncRunStatus };\n}\n\n/** Canonical status reader. It preserves the reason a status could not be read. */\nexport function readAsyncRunStatusResultAt(statusPath: string): StatusReadResult {\n let raw: string;\n try {\n raw = fs.readFileSync(statusPath, 'utf8');\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT')\n return { kind: 'missing', path: statusPath };\n return { kind: 'io_error', path: statusPath, message: error instanceof Error ? error.message : String(error) };\n }\n return parseAsyncRunStatus(raw, statusPath);\n}\n\nexport async function readAsyncRunStatusResultAtAsync(statusPath: string): Promise<StatusReadResult> {\n let raw: string;\n try {\n raw = await fs.promises.readFile(statusPath, 'utf8');\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {\n return { kind: 'missing', path: statusPath };\n }\n return { kind: 'io_error', path: statusPath, message: error instanceof Error ? error.message : String(error) };\n }\n return parseAsyncRunStatus(raw, statusPath);\n}\n\nexport function readAsyncRunStatusResult(runId: string): StatusReadResult {\n return readAsyncRunStatusResultAt(path.join(currentRunsDir(), runId, STATUS_FILE_NAME));\n}\n\nexport function readAsyncRunStatusResultAsync(runId: string): Promise<StatusReadResult> {\n return readAsyncRunStatusResultAtAsync(path.join(currentRunsDir(), runId, STATUS_FILE_NAME));\n}\n\n/** Compatibility convenience for callers that intentionally treat all read failures as absence. */\nexport function readAsyncRunStatus(runId: string): AsyncRunStatus | undefined {\n const result = readAsyncRunStatusResult(runId);\n return result.kind === 'ok' ? result.status : undefined;\n}\n\nexport function readAsyncRunStatusAt(statusPath: string): AsyncRunStatus | undefined {\n const result = readAsyncRunStatusResultAt(statusPath);\n return result.kind === 'ok' ? result.status : undefined;\n}\n\nexport async function readAsyncRunStatusAtAsync(statusPath: string): Promise<AsyncRunStatus | undefined> {\n const result = await readAsyncRunStatusResultAtAsync(statusPath);\n return result.kind === 'ok' ? result.status : undefined;\n}\n"],"mappings":"sOAeA,SAAS,EAAS,EAAkD,CAClE,OAAO,OAAO,GAAU,YAAY,GAAkB,CAAC,MAAM,QAAQ,EAAM,CAG7E,SAAgB,EAAoB,EAAa,EAAa,WAA8B,CAC1F,IAAI,EACJ,GAAI,CACF,EAAS,KAAK,MAAM,EAAI,OACjB,EAAO,CACd,MAAO,CAAE,KAAM,YAAa,KAAM,EAAY,QAAS,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CAAE,CAoBjH,MAjBE,CAAC,EAAS,EAAO,EACjB,OAAO,EAAO,OAAU,UACxB,OAAO,EAAO,OAAU,UACxB,OAAO,EAAO,OAAU,SAEjB,CAAE,KAAM,YAAa,KAAM,EAAY,QAAS,0CAA2C,CAEhG,EAAO,UAAY,IAAA,IAAa,EAAO,UAAY,EAC9C,CAAE,KAAM,eAAgB,KAAM,EAAY,QAAS,EAAO,QAAS,EAKxE,EAAO,QAAU,aAAY,EAAO,MAAQ,aAC5C,OAAO,EAAO,QAAW,UAAY,EAAO,kBAAoB,IAAA,KAClE,EAAO,gBAAkB,EAAO,QAE3B,CAAE,KAAM,KAAM,KAAM,EAAY,OAAQ,EAAqC,EAItF,SAAgB,EAA2B,EAAsC,CAC/E,IAAI,EACJ,GAAI,CACF,EAAMA,EAAG,aAAa,EAAY,OAAO,OAClC,EAAO,CAGd,OAFI,aAAiB,OAAS,SAAU,GAAS,EAAM,OAAS,SACvD,CAAE,KAAM,UAAW,KAAM,EAAY,CACvC,CAAE,KAAM,WAAY,KAAM,EAAY,QAAS,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CAAE,CAEhH,OAAO,EAAoB,EAAK,EAAW,CAG7C,eAAsB,EAAgC,EAA+C,CACnG,IAAI,EACJ,GAAI,CACF,EAAM,MAAMA,EAAG,SAAS,SAAS,EAAY,OAAO,OAC7C,EAAO,CAId,OAHI,aAAiB,OAAS,SAAU,GAAS,EAAM,OAAS,SACvD,CAAE,KAAM,UAAW,KAAM,EAAY,CAEvC,CAAE,KAAM,WAAY,KAAM,EAAY,QAAS,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CAAE,CAEhH,OAAO,EAAoB,EAAK,EAAW,CAG7C,SAAgB,EAAyB,EAAiC,CACxE,OAAO,EAA2BC,EAAK,KAAKC,EAAAA,gBAAgB,CAAE,EAAOC,EAAAA,iBAAiB,CAAC,CAQzF,SAAgB,EAAmB,EAA2C,CAC5E,IAAM,EAAS,EAAyB,EAAM,CAC9C,OAAO,EAAO,OAAS,KAAO,EAAO,OAAS,IAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{__esmMin as e}from"../_virtual/_rolldown/runtime.mjs";import{currentRunsDir as t,init_paths as n}from"../shared/paths.mjs";import{STATUS_FILE_NAME as r,init_statusWriter as i}from"../services/runs/background/statusWriter.mjs";import*as a from"node:fs";import*as o from"node:path";function s(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function c(e,t=`<memory>`){let n;try{n=JSON.parse(e)}catch(e){return{kind:`malformed`,path:t,message:e instanceof Error?e.message:String(e)}}return!s(n)||typeof n.runId!=`string`||typeof n.agent!=`string`||typeof n.state!=`string`?{kind:`malformed`,path:t,message:`Expected runId, agent and state fields.`}:n.version!==void 0&&n.version!==1?{kind:`incompatible`,path:t,version:n.version}:(n.state===`complete`&&(n.state=`completed`),typeof n.reason==`string`&&n.attentionReason===void 0&&(n.attentionReason=n.reason),{kind:`ok`,path:t,status:n})}function l(e){let t;try{t=a.readFileSync(e,`utf8`)}catch(t){return t instanceof Error&&`code`in t&&t.code===`ENOENT`?{kind:`missing`,path:e}:{kind:`io_error`,path:e,message:t instanceof Error?t.message:String(t)}}return c(t,e)}async function u(e){let t;try{t=await a.promises.readFile(e,`utf8`)}catch(t){return t instanceof Error&&`code`in t&&t.code===`ENOENT`?{kind:`missing`,path:e}:{kind:`io_error`,path:e,message:t instanceof Error?t.message:String(t)}}return c(t,e)}function d(e){return l(o.join(t(),e,r))}function f(e){let t=d(e);return t.kind===`ok`?t.status:void 0}var p=e((()=>{i(),n()}));p();export{p as init_statusReader,c as parseAsyncRunStatus,f as readAsyncRunStatus,d as readAsyncRunStatusResult,l as readAsyncRunStatusResultAt,u as readAsyncRunStatusResultAtAsync};
|
|
2
|
+
//# sourceMappingURL=statusReader.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusReader.mjs","names":[],"sources":["../../src/adapters/statusReader.ts"],"sourcesContent":["import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport type { AsyncRunStatus } from '../services/runs/background/asyncExecution.ts';\nimport { STATUS_FILE_NAME } from '../services/runs/background/statusWriter.ts';\nimport { currentRunsDir } from '../shared/paths.ts';\n\nexport type StatusReadFailure =\n | { kind: 'missing'; path: string }\n | { kind: 'malformed'; path: string; message: string }\n | { kind: 'incompatible'; path: string; version: unknown }\n | { kind: 'io_error'; path: string; message: string };\n\nexport type StatusReadResult = { kind: 'ok'; path: string; status: AsyncRunStatus } | StatusReadFailure;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function parseAsyncRunStatus(raw: string, statusPath = '<memory>'): StatusReadResult {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n return { kind: 'malformed', path: statusPath, message: error instanceof Error ? error.message : String(error) };\n }\n if (\n !isRecord(parsed) ||\n typeof parsed.runId !== 'string' ||\n typeof parsed.agent !== 'string' ||\n typeof parsed.state !== 'string'\n ) {\n return { kind: 'malformed', path: statusPath, message: 'Expected runId, agent and state fields.' };\n }\n if (parsed.version !== undefined && parsed.version !== 1) {\n return { kind: 'incompatible', path: statusPath, version: parsed.version };\n }\n\n // Read-only compatibility for statuses created before the canonical state\n // name was adopted. New writers emit only `completed`.\n if (parsed.state === 'complete') parsed.state = 'completed';\n if (typeof parsed.reason === 'string' && parsed.attentionReason === undefined) {\n parsed.attentionReason = parsed.reason;\n }\n return { kind: 'ok', path: statusPath, status: parsed as unknown as AsyncRunStatus };\n}\n\n/** Canonical status reader. It preserves the reason a status could not be read. */\nexport function readAsyncRunStatusResultAt(statusPath: string): StatusReadResult {\n let raw: string;\n try {\n raw = fs.readFileSync(statusPath, 'utf8');\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT')\n return { kind: 'missing', path: statusPath };\n return { kind: 'io_error', path: statusPath, message: error instanceof Error ? error.message : String(error) };\n }\n return parseAsyncRunStatus(raw, statusPath);\n}\n\nexport async function readAsyncRunStatusResultAtAsync(statusPath: string): Promise<StatusReadResult> {\n let raw: string;\n try {\n raw = await fs.promises.readFile(statusPath, 'utf8');\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {\n return { kind: 'missing', path: statusPath };\n }\n return { kind: 'io_error', path: statusPath, message: error instanceof Error ? error.message : String(error) };\n }\n return parseAsyncRunStatus(raw, statusPath);\n}\n\nexport function readAsyncRunStatusResult(runId: string): StatusReadResult {\n return readAsyncRunStatusResultAt(path.join(currentRunsDir(), runId, STATUS_FILE_NAME));\n}\n\nexport function readAsyncRunStatusResultAsync(runId: string): Promise<StatusReadResult> {\n return readAsyncRunStatusResultAtAsync(path.join(currentRunsDir(), runId, STATUS_FILE_NAME));\n}\n\n/** Compatibility convenience for callers that intentionally treat all read failures as absence. */\nexport function readAsyncRunStatus(runId: string): AsyncRunStatus | undefined {\n const result = readAsyncRunStatusResult(runId);\n return result.kind === 'ok' ? result.status : undefined;\n}\n\nexport function readAsyncRunStatusAt(statusPath: string): AsyncRunStatus | undefined {\n const result = readAsyncRunStatusResultAt(statusPath);\n return result.kind === 'ok' ? result.status : undefined;\n}\n\nexport async function readAsyncRunStatusAtAsync(statusPath: string): Promise<AsyncRunStatus | undefined> {\n const result = await readAsyncRunStatusResultAtAsync(statusPath);\n return result.kind === 'ok' ? result.status : undefined;\n}\n"],"mappings":"+RAeA,SAAS,EAAS,EAAkD,CAClE,OAAO,OAAO,GAAU,YAAY,GAAkB,CAAC,MAAM,QAAQ,EAAM,CAG7E,SAAgB,EAAoB,EAAa,EAAa,WAA8B,CAC1F,IAAI,EACJ,GAAI,CACF,EAAS,KAAK,MAAM,EAAI,OACjB,EAAO,CACd,MAAO,CAAE,KAAM,YAAa,KAAM,EAAY,QAAS,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CAAE,CAoBjH,MAjBE,CAAC,EAAS,EAAO,EACjB,OAAO,EAAO,OAAU,UACxB,OAAO,EAAO,OAAU,UACxB,OAAO,EAAO,OAAU,SAEjB,CAAE,KAAM,YAAa,KAAM,EAAY,QAAS,0CAA2C,CAEhG,EAAO,UAAY,IAAA,IAAa,EAAO,UAAY,EAC9C,CAAE,KAAM,eAAgB,KAAM,EAAY,QAAS,EAAO,QAAS,EAKxE,EAAO,QAAU,aAAY,EAAO,MAAQ,aAC5C,OAAO,EAAO,QAAW,UAAY,EAAO,kBAAoB,IAAA,KAClE,EAAO,gBAAkB,EAAO,QAE3B,CAAE,KAAM,KAAM,KAAM,EAAY,OAAQ,EAAqC,EAItF,SAAgB,EAA2B,EAAsC,CAC/E,IAAI,EACJ,GAAI,CACF,EAAM,EAAG,aAAa,EAAY,OAAO,OAClC,EAAO,CAGd,OAFI,aAAiB,OAAS,SAAU,GAAS,EAAM,OAAS,SACvD,CAAE,KAAM,UAAW,KAAM,EAAY,CACvC,CAAE,KAAM,WAAY,KAAM,EAAY,QAAS,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CAAE,CAEhH,OAAO,EAAoB,EAAK,EAAW,CAG7C,eAAsB,EAAgC,EAA+C,CACnG,IAAI,EACJ,GAAI,CACF,EAAM,MAAM,EAAG,SAAS,SAAS,EAAY,OAAO,OAC7C,EAAO,CAId,OAHI,aAAiB,OAAS,SAAU,GAAS,EAAM,OAAS,SACvD,CAAE,KAAM,UAAW,KAAM,EAAY,CAEvC,CAAE,KAAM,WAAY,KAAM,EAAY,QAAS,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CAAE,CAEhH,OAAO,EAAoB,EAAK,EAAW,CAG7C,SAAgB,EAAyB,EAAiC,CACxE,OAAO,EAA2B,EAAK,KAAK,GAAgB,CAAE,EAAO,EAAiB,CAAC,CAQzF,SAAgB,EAAmB,EAA2C,CAC5E,IAAM,EAAS,EAAyB,EAAM,CAC9C,OAAO,EAAO,OAAS,KAAO,EAAO,OAAS,IAAA,oBAhF+B,IAC3B"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`./atomicJson.cjs`),n=require(`../shared/paths.cjs`),r=require(`../shared/versioned.cjs`);let i=require(`node:fs`);i=e.__toESM(i,1);let a=require(`node:path`);a=e.__toESM(a,1);const o=`.json`;function s(e,t){return a.join(n.scopeSuspendedDir(e),`${t}${o}`)}function c(e,n){t.writeAtomicJson(s(e,n.runId),{version:1,...n})}async function l(e,n){await t.writeAtomicJsonAsync(s(e,n.runId),{version:1,...n})}function u(e){let t;try{t=JSON.parse(e)}catch{return}let n=r.parseVersioned(t,[1]);return n.ok&&typeof n.value.runId==`string`?n.value:void 0}function d(e){let t;try{t=i.readdirSync(n.scopeSuspendedDir(e))}catch{return[]}let r=[];for(let s of t){if(!s.endsWith(o))continue;let t;try{t=u(i.readFileSync(a.join(n.scopeSuspendedDir(e),s),`utf-8`))}catch{continue}t&&r.push(t)}return r.sort((e,t)=>e.suspendedAt-t.suspendedAt)}async function f(e){let t;try{t=await i.promises.readdir(n.scopeSuspendedDir(e))}catch{return[]}let r=[];for(let s of t)if(s.endsWith(o))try{let t=u(await i.promises.readFile(a.join(n.scopeSuspendedDir(e),s),`utf-8`));t&&r.push(t)}catch{}return r.sort((e,t)=>e.suspendedAt-t.suspendedAt)}function p(e,t){try{i.rmSync(s(e,t),{force:!0})}catch{}}function m(e){if(e.runtime!==`pi`||!e.agent.trim()||!e.task.trim()||!e.cwd.trim()||!e.sessionFile)return!1;try{return i.accessSync(e.sessionFile,i.constants.R_OK),!0}catch{return!1}}async function h(e){if(e.runtime!==`pi`||!e.agent.trim()||!e.task.trim()||!e.cwd.trim()||!e.sessionFile)return!1;try{return await i.promises.access(e.sessionFile,i.constants.R_OK),!0}catch{return!1}}function g(e){if(e.length===0)return``;let t=e.map(e=>{let t=m(e)?`resumable`:`not resumable`;return`- ${e.runId} (${e.agent}, ${e.runtime}, ${t}): ${e.task.split(`
|
|
2
|
+
`)[0]}`}),n=e.length===1?`subagent`:`subagents`;return[`${e.length} suspended ${n} from this session:`,...t,``,`They are stopped. Restore one with subagent {"action":"restore","id":"<run-id>"}, or leave them.`].join(`
|
|
3
|
+
`)}async function _(e){if(e.length===0)return``;let t=await Promise.all(e.map(e=>h(e))),n=e.map((e,n)=>{let r=t[n]?`resumable`:`not resumable`;return`- ${e.runId} (${e.agent}, ${e.runtime}, ${r}): ${e.task.split(`
|
|
4
|
+
`)[0]}`}),r=e.length===1?`subagent`:`subagents`;return[`${e.length} suspended ${r} from this session:`,...n,``,`They are stopped. Restore one with subagent {"action":"restore","id":"<run-id>"}, or leave them.`].join(`
|
|
5
|
+
`)}exports.clearSuspendedRun=p,exports.formatSuspendedRuns=g,exports.formatSuspendedRunsAsync=_,exports.isSuspendedRunResumable=m,exports.isSuspendedRunResumableAsync=h,exports.listSuspendedRuns=d,exports.listSuspendedRunsAsync=f,exports.suspendRun=c,exports.suspendRunAsync=l;
|
|
6
|
+
//# sourceMappingURL=suspendedRuns.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suspendedRuns.cjs","names":["path","scopeSuspendedDir","writeAtomicJsonAsync","parseVersioned","fs"],"sources":["../../src/adapters/suspendedRuns.ts"],"sourcesContent":["/**\n * Runs stopped by a session shutdown, and enough about each to start it again.\n *\n * WHY EVERY SHUTDOWN SUSPENDS, WITH NO SPECIAL CASE FOR `reload`:\n * Pi emits `session_shutdown` for `quit`, `reload`, `new`, `resume` and `fork`.\n * An earlier design kept children alive across `reload` alone, on the grounds\n * that `/domains`, `/major-mode` and `/profile` reload the extension rather than\n * change the session. That is true, and it still makes `reload` the one case\n * behaving differently from the other four - which is a rule someone has to\n * remember, and a branch that silently does the wrong thing if Pi ever adds a\n * sixth reason. Suspending uniformly costs a respawn on reload and removes the\n * special case; restore is cheap because the child continues its own transcript\n * rather than starting over.\n *\n * WHY RESTORE IS OFFERED AND NEVER AUTOMATIC:\n * Reopening a session would otherwise spawn N processes and start spending\n * tokens on tasks that may be days stale. `session_start` reports what is\n * suspended; something explicit has to ask for it back.\n *\n * AVOID:\n * - Auto-restoring from any lifecycle event\n * - Recording a suspended run without its `sessionFile`; without it a restore\n * restarts the work instead of continuing it\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { InlineAgent } from '@agimon-ai/doompi-extension-contracts/subagent-tool';\n\nimport { type SessionScope, scopeSuspendedDir } from '../shared/paths.ts';\nimport { parseVersioned } from '../shared/versioned.ts';\nimport { writeAtomicJson, writeAtomicJsonAsync } from './atomicJson.ts';\n\nconst SUSPENDED_RUN_VERSION = 1;\nconst JSON_SUFFIX = '.json';\n\nexport interface SuspendedRun {\n version: typeof SUSPENDED_RUN_VERSION;\n runId: string;\n agent: string;\n runtime: string;\n task: string;\n cwd: string;\n model?: string;\n /** One-shot agent definition required to reconstruct an inline agent. */\n inlineAgent?: InlineAgent;\n context?: 'fresh' | 'fork';\n /** Last state the run reported before it was stopped. */\n lastStatus?: string;\n /**\n * The child's own transcript.\n *\n * This is what makes a restore a continuation: `sdkRunnerEntry.ts` opens it\n * through `SessionManager.open` when `sdk.sessionFile` is set. Absent for a\n * run that never persisted one (an external CLI, or a headless child), in\n * which case the record remains visible but cannot be restored.\n */\n sessionFile?: string;\n suspendedAt: number;\n /** Why the session went away, for the report a later `session_start` shows. */\n reason: string;\n}\n\nfunction suspendedPath(scope: SessionScope, runId: string): string {\n return path.join(scopeSuspendedDir(scope), `${runId}${JSON_SUFFIX}`);\n}\n\nexport function suspendRun(scope: SessionScope, record: Omit<SuspendedRun, 'version'>): void {\n writeAtomicJson(suspendedPath(scope, record.runId), { version: SUSPENDED_RUN_VERSION, ...record });\n}\n\nexport async function suspendRunAsync(scope: SessionScope, record: Omit<SuspendedRun, 'version'>): Promise<void> {\n await writeAtomicJsonAsync(suspendedPath(scope, record.runId), { version: SUSPENDED_RUN_VERSION, ...record });\n}\n\nfunction parseSuspendedRun(raw: string): SuspendedRun | undefined {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return undefined;\n }\n const result = parseVersioned<SuspendedRun>(parsed, [SUSPENDED_RUN_VERSION]);\n return result.ok && typeof result.value.runId === 'string' ? result.value : undefined;\n}\n\nexport function listSuspendedRuns(scope: SessionScope): SuspendedRun[] {\n let entries: string[];\n try {\n entries = fs.readdirSync(scopeSuspendedDir(scope));\n } catch {\n return [];\n }\n\n const runs: SuspendedRun[] = [];\n for (const entry of entries) {\n if (!entry.endsWith(JSON_SUFFIX)) continue;\n let run: SuspendedRun | undefined;\n try {\n run = parseSuspendedRun(fs.readFileSync(path.join(scopeSuspendedDir(scope), entry), 'utf-8'));\n } catch {\n // A record this build cannot read is skipped, not deleted: it may belong\n // to a newer build that will read it back correctly.\n continue;\n }\n if (run) runs.push(run);\n }\n return runs.sort((left, right) => left.suspendedAt - right.suspendedAt);\n}\n\nexport async function listSuspendedRunsAsync(scope: SessionScope): Promise<SuspendedRun[]> {\n let entries: string[];\n try {\n entries = await fs.promises.readdir(scopeSuspendedDir(scope));\n } catch {\n return [];\n }\n\n const runs: SuspendedRun[] = [];\n for (const entry of entries) {\n if (!entry.endsWith(JSON_SUFFIX)) continue;\n try {\n const run = parseSuspendedRun(await fs.promises.readFile(path.join(scopeSuspendedDir(scope), entry), 'utf-8'));\n if (run) runs.push(run);\n } catch {\n // A record this build cannot read is skipped, not deleted.\n }\n }\n return runs.sort((left, right) => left.suspendedAt - right.suspendedAt);\n}\n\n/** Drop a record once its run has been restored, or explicitly discarded. */\nexport function clearSuspendedRun(scope: SessionScope, runId: string): void {\n try {\n fs.rmSync(suspendedPath(scope, runId), { force: true });\n } catch {\n // Best effort: a leftover record shows up again in the next report, which\n // is a visible annoyance rather than a lost run.\n }\n}\n\n/** Whether an explicit restore can safely continue this exact run. */\nexport function isSuspendedRunResumable(run: SuspendedRun): boolean {\n if (run.runtime !== 'pi' || !run.agent.trim() || !run.task.trim() || !run.cwd.trim() || !run.sessionFile) {\n return false;\n }\n try {\n fs.accessSync(run.sessionFile, fs.constants.R_OK);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function isSuspendedRunResumableAsync(run: SuspendedRun): Promise<boolean> {\n if (run.runtime !== 'pi' || !run.agent.trim() || !run.task.trim() || !run.cwd.trim() || !run.sessionFile) {\n return false;\n }\n try {\n await fs.promises.access(run.sessionFile, fs.constants.R_OK);\n return true;\n } catch {\n return false;\n }\n}\n\n/** One line per suspended run, for the report `session_start` prints. */\nexport function formatSuspendedRuns(runs: SuspendedRun[]): string {\n if (runs.length === 0) return '';\n const lines = runs.map((run) => {\n const continues = isSuspendedRunResumable(run) ? 'resumable' : 'not resumable';\n return `- ${run.runId} (${run.agent}, ${run.runtime}, ${continues}): ${run.task.split('\\n')[0]}`;\n });\n const noun = runs.length === 1 ? 'subagent' : 'subagents';\n return [\n `${runs.length} suspended ${noun} from this session:`,\n ...lines,\n '',\n 'They are stopped. Restore one with subagent {\"action\":\"restore\",\"id\":\"<run-id>\"}, or leave them.',\n ].join('\\n');\n}\n\nexport async function formatSuspendedRunsAsync(runs: SuspendedRun[]): Promise<string> {\n if (runs.length === 0) return '';\n const resumable = await Promise.all(runs.map((run) => isSuspendedRunResumableAsync(run)));\n const lines = runs.map((run, index) => {\n const continues = resumable[index] ? 'resumable' : 'not resumable';\n return `- ${run.runId} (${run.agent}, ${run.runtime}, ${continues}): ${run.task.split('\\n')[0]}`;\n });\n const noun = runs.length === 1 ? 'subagent' : 'subagents';\n return [\n `${runs.length} suspended ${noun} from this session:`,\n ...lines,\n '',\n 'They are stopped. Restore one with subagent {\"action\":\"restore\",\"id\":\"<run-id>\"}, or leave them.',\n ].join('\\n');\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{__esmMin as e}from"../_virtual/_rolldown/runtime.mjs";import{init_atomicJson as t,writeAtomicJson as n,writeAtomicJsonAsync as r}from"./atomicJson.mjs";import{init_paths as i,scopeSuspendedDir as a}from"../shared/paths.mjs";import{init_versioned as o,parseVersioned as s}from"../shared/versioned.mjs";import*as c from"node:fs";import*as l from"node:path";function u(e,t){return l.join(a(e),`${t}${S}`)}function d(e,t){n(u(e,t.runId),{version:x,...t})}async function f(e,t){await r(u(e,t.runId),{version:x,...t})}function p(e){let t;try{t=JSON.parse(e)}catch{return}let n=s(t,[x]);return n.ok&&typeof n.value.runId==`string`?n.value:void 0}function m(e){let t;try{t=c.readdirSync(a(e))}catch{return[]}let n=[];for(let r of t){if(!r.endsWith(S))continue;let t;try{t=p(c.readFileSync(l.join(a(e),r),`utf-8`))}catch{continue}t&&n.push(t)}return n.sort((e,t)=>e.suspendedAt-t.suspendedAt)}async function h(e){let t;try{t=await c.promises.readdir(a(e))}catch{return[]}let n=[];for(let r of t)if(r.endsWith(S))try{let t=p(await c.promises.readFile(l.join(a(e),r),`utf-8`));t&&n.push(t)}catch{}return n.sort((e,t)=>e.suspendedAt-t.suspendedAt)}function g(e,t){try{c.rmSync(u(e,t),{force:!0})}catch{}}function _(e){if(e.runtime!==`pi`||!e.agent.trim()||!e.task.trim()||!e.cwd.trim()||!e.sessionFile)return!1;try{return c.accessSync(e.sessionFile,c.constants.R_OK),!0}catch{return!1}}async function v(e){if(e.runtime!==`pi`||!e.agent.trim()||!e.task.trim()||!e.cwd.trim()||!e.sessionFile)return!1;try{return await c.promises.access(e.sessionFile,c.constants.R_OK),!0}catch{return!1}}function y(e){if(e.length===0)return``;let t=e.map(e=>{let t=_(e)?`resumable`:`not resumable`;return`- ${e.runId} (${e.agent}, ${e.runtime}, ${t}): ${e.task.split(`
|
|
2
|
+
`)[0]}`}),n=e.length===1?`subagent`:`subagents`;return[`${e.length} suspended ${n} from this session:`,...t,``,`They are stopped. Restore one with subagent {"action":"restore","id":"<run-id>"}, or leave them.`].join(`
|
|
3
|
+
`)}async function b(e){if(e.length===0)return``;let t=await Promise.all(e.map(e=>v(e))),n=e.map((e,n)=>{let r=t[n]?`resumable`:`not resumable`;return`- ${e.runId} (${e.agent}, ${e.runtime}, ${r}): ${e.task.split(`
|
|
4
|
+
`)[0]}`}),r=e.length===1?`subagent`:`subagents`;return[`${e.length} suspended ${r} from this session:`,...n,``,`They are stopped. Restore one with subagent {"action":"restore","id":"<run-id>"}, or leave them.`].join(`
|
|
5
|
+
`)}var x,S,C=e((()=>{i(),o(),t(),x=1,S=`.json`}));C();export{g as clearSuspendedRun,y as formatSuspendedRuns,b as formatSuspendedRunsAsync,C as init_suspendedRuns,_ as isSuspendedRunResumable,v as isSuspendedRunResumableAsync,m as listSuspendedRuns,h as listSuspendedRunsAsync,d as suspendRun,f as suspendRunAsync};
|
|
6
|
+
//# sourceMappingURL=suspendedRuns.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suspendedRuns.mjs","names":[],"sources":["../../src/adapters/suspendedRuns.ts"],"sourcesContent":["/**\n * Runs stopped by a session shutdown, and enough about each to start it again.\n *\n * WHY EVERY SHUTDOWN SUSPENDS, WITH NO SPECIAL CASE FOR `reload`:\n * Pi emits `session_shutdown` for `quit`, `reload`, `new`, `resume` and `fork`.\n * An earlier design kept children alive across `reload` alone, on the grounds\n * that `/domains`, `/major-mode` and `/profile` reload the extension rather than\n * change the session. That is true, and it still makes `reload` the one case\n * behaving differently from the other four - which is a rule someone has to\n * remember, and a branch that silently does the wrong thing if Pi ever adds a\n * sixth reason. Suspending uniformly costs a respawn on reload and removes the\n * special case; restore is cheap because the child continues its own transcript\n * rather than starting over.\n *\n * WHY RESTORE IS OFFERED AND NEVER AUTOMATIC:\n * Reopening a session would otherwise spawn N processes and start spending\n * tokens on tasks that may be days stale. `session_start` reports what is\n * suspended; something explicit has to ask for it back.\n *\n * AVOID:\n * - Auto-restoring from any lifecycle event\n * - Recording a suspended run without its `sessionFile`; without it a restore\n * restarts the work instead of continuing it\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { InlineAgent } from '@agimon-ai/doompi-extension-contracts/subagent-tool';\n\nimport { type SessionScope, scopeSuspendedDir } from '../shared/paths.ts';\nimport { parseVersioned } from '../shared/versioned.ts';\nimport { writeAtomicJson, writeAtomicJsonAsync } from './atomicJson.ts';\n\nconst SUSPENDED_RUN_VERSION = 1;\nconst JSON_SUFFIX = '.json';\n\nexport interface SuspendedRun {\n version: typeof SUSPENDED_RUN_VERSION;\n runId: string;\n agent: string;\n runtime: string;\n task: string;\n cwd: string;\n model?: string;\n /** One-shot agent definition required to reconstruct an inline agent. */\n inlineAgent?: InlineAgent;\n context?: 'fresh' | 'fork';\n /** Last state the run reported before it was stopped. */\n lastStatus?: string;\n /**\n * The child's own transcript.\n *\n * This is what makes a restore a continuation: `sdkRunnerEntry.ts` opens it\n * through `SessionManager.open` when `sdk.sessionFile` is set. Absent for a\n * run that never persisted one (an external CLI, or a headless child), in\n * which case the record remains visible but cannot be restored.\n */\n sessionFile?: string;\n suspendedAt: number;\n /** Why the session went away, for the report a later `session_start` shows. */\n reason: string;\n}\n\nfunction suspendedPath(scope: SessionScope, runId: string): string {\n return path.join(scopeSuspendedDir(scope), `${runId}${JSON_SUFFIX}`);\n}\n\nexport function suspendRun(scope: SessionScope, record: Omit<SuspendedRun, 'version'>): void {\n writeAtomicJson(suspendedPath(scope, record.runId), { version: SUSPENDED_RUN_VERSION, ...record });\n}\n\nexport async function suspendRunAsync(scope: SessionScope, record: Omit<SuspendedRun, 'version'>): Promise<void> {\n await writeAtomicJsonAsync(suspendedPath(scope, record.runId), { version: SUSPENDED_RUN_VERSION, ...record });\n}\n\nfunction parseSuspendedRun(raw: string): SuspendedRun | undefined {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return undefined;\n }\n const result = parseVersioned<SuspendedRun>(parsed, [SUSPENDED_RUN_VERSION]);\n return result.ok && typeof result.value.runId === 'string' ? result.value : undefined;\n}\n\nexport function listSuspendedRuns(scope: SessionScope): SuspendedRun[] {\n let entries: string[];\n try {\n entries = fs.readdirSync(scopeSuspendedDir(scope));\n } catch {\n return [];\n }\n\n const runs: SuspendedRun[] = [];\n for (const entry of entries) {\n if (!entry.endsWith(JSON_SUFFIX)) continue;\n let run: SuspendedRun | undefined;\n try {\n run = parseSuspendedRun(fs.readFileSync(path.join(scopeSuspendedDir(scope), entry), 'utf-8'));\n } catch {\n // A record this build cannot read is skipped, not deleted: it may belong\n // to a newer build that will read it back correctly.\n continue;\n }\n if (run) runs.push(run);\n }\n return runs.sort((left, right) => left.suspendedAt - right.suspendedAt);\n}\n\nexport async function listSuspendedRunsAsync(scope: SessionScope): Promise<SuspendedRun[]> {\n let entries: string[];\n try {\n entries = await fs.promises.readdir(scopeSuspendedDir(scope));\n } catch {\n return [];\n }\n\n const runs: SuspendedRun[] = [];\n for (const entry of entries) {\n if (!entry.endsWith(JSON_SUFFIX)) continue;\n try {\n const run = parseSuspendedRun(await fs.promises.readFile(path.join(scopeSuspendedDir(scope), entry), 'utf-8'));\n if (run) runs.push(run);\n } catch {\n // A record this build cannot read is skipped, not deleted.\n }\n }\n return runs.sort((left, right) => left.suspendedAt - right.suspendedAt);\n}\n\n/** Drop a record once its run has been restored, or explicitly discarded. */\nexport function clearSuspendedRun(scope: SessionScope, runId: string): void {\n try {\n fs.rmSync(suspendedPath(scope, runId), { force: true });\n } catch {\n // Best effort: a leftover record shows up again in the next report, which\n // is a visible annoyance rather than a lost run.\n }\n}\n\n/** Whether an explicit restore can safely continue this exact run. */\nexport function isSuspendedRunResumable(run: SuspendedRun): boolean {\n if (run.runtime !== 'pi' || !run.agent.trim() || !run.task.trim() || !run.cwd.trim() || !run.sessionFile) {\n return false;\n }\n try {\n fs.accessSync(run.sessionFile, fs.constants.R_OK);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function isSuspendedRunResumableAsync(run: SuspendedRun): Promise<boolean> {\n if (run.runtime !== 'pi' || !run.agent.trim() || !run.task.trim() || !run.cwd.trim() || !run.sessionFile) {\n return false;\n }\n try {\n await fs.promises.access(run.sessionFile, fs.constants.R_OK);\n return true;\n } catch {\n return false;\n }\n}\n\n/** One line per suspended run, for the report `session_start` prints. */\nexport function formatSuspendedRuns(runs: SuspendedRun[]): string {\n if (runs.length === 0) return '';\n const lines = runs.map((run) => {\n const continues = isSuspendedRunResumable(run) ? 'resumable' : 'not resumable';\n return `- ${run.runId} (${run.agent}, ${run.runtime}, ${continues}): ${run.task.split('\\n')[0]}`;\n });\n const noun = runs.length === 1 ? 'subagent' : 'subagents';\n return [\n `${runs.length} suspended ${noun} from this session:`,\n ...lines,\n '',\n 'They are stopped. Restore one with subagent {\"action\":\"restore\",\"id\":\"<run-id>\"}, or leave them.',\n ].join('\\n');\n}\n\nexport async function formatSuspendedRunsAsync(runs: SuspendedRun[]): Promise<string> {\n if (runs.length === 0) return '';\n const resumable = await Promise.all(runs.map((run) => isSuspendedRunResumableAsync(run)));\n const lines = runs.map((run, index) => {\n const continues = resumable[index] ? 'resumable' : 'not resumable';\n return `- ${run.runId} (${run.agent}, ${run.runtime}, ${continues}): ${run.task.split('\\n')[0]}`;\n });\n const noun = runs.length === 1 ? 'subagent' : 'subagents';\n return [\n `${runs.length} suspended ${noun} from this session:`,\n ...lines,\n '',\n 'They are stopped. Restore one with subagent {\"action\":\"restore\",\"id\":\"<run-id>\"}, or leave them.',\n ].join('\\n');\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../schemas/team/backgroundWork.cjs`);require(`../services/api/backgroundWork.cjs`),exports.BACKGROUND_WORK_PROTOCOL_VERSION=e.BACKGROUND_WORK_PROTOCOL_VERSION,exports.BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY=e.BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY,exports.BACKGROUND_WORK_REGISTRY_KEY=e.BACKGROUND_WORK_REGISTRY_KEY,exports.installBackgroundWorkRegistrationBridge=e.installBackgroundWorkRegistrationBridge,exports.listBackgroundWorkProviders=e.listBackgroundWorkProviders,exports.listBackgroundWorkWakeChannels=e.listBackgroundWorkWakeChannels,exports.registerBackgroundWorkProvider=e.registerBackgroundWorkProvider,exports.snapshotBackgroundWork=e.snapshotBackgroundWork;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { BACKGROUND_WORK_PROTOCOL_VERSION, BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY, BACKGROUND_WORK_REGISTRY_KEY, BackgroundWorkItem, BackgroundWorkProvider, BackgroundWorkReconcileContext, BackgroundWorkRegistrationBridge, BackgroundWorkSnapshot, RegisteredBackgroundWorkItem, installBackgroundWorkRegistrationBridge, listBackgroundWorkProviders, listBackgroundWorkWakeChannels, registerBackgroundWorkProvider, snapshotBackgroundWork } from "../
|
|
2
|
-
export { BACKGROUND_WORK_PROTOCOL_VERSION, BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY, BACKGROUND_WORK_REGISTRY_KEY,
|
|
1
|
+
import { BACKGROUND_WORK_PROTOCOL_VERSION, BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY, BACKGROUND_WORK_REGISTRY_KEY, BackgroundWorkItem, BackgroundWorkProvider, BackgroundWorkReconcileContext, BackgroundWorkRegistrationBridge, BackgroundWorkSnapshot, RegisteredBackgroundWorkItem, installBackgroundWorkRegistrationBridge, listBackgroundWorkProviders, listBackgroundWorkWakeChannels, registerBackgroundWorkProvider, snapshotBackgroundWork } from "../schemas/team/backgroundWork.cjs";
|
|
2
|
+
export { BACKGROUND_WORK_PROTOCOL_VERSION, BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY, BACKGROUND_WORK_REGISTRY_KEY, BackgroundWorkItem, BackgroundWorkProvider, BackgroundWorkReconcileContext, BackgroundWorkRegistrationBridge, BackgroundWorkSnapshot, RegisteredBackgroundWorkItem, installBackgroundWorkRegistrationBridge, listBackgroundWorkProviders, listBackgroundWorkWakeChannels, registerBackgroundWorkProvider, snapshotBackgroundWork };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { BACKGROUND_WORK_PROTOCOL_VERSION, BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY, BACKGROUND_WORK_REGISTRY_KEY, BackgroundWorkItem, BackgroundWorkProvider, BackgroundWorkReconcileContext, BackgroundWorkRegistrationBridge, BackgroundWorkSnapshot, RegisteredBackgroundWorkItem, installBackgroundWorkRegistrationBridge, listBackgroundWorkProviders, listBackgroundWorkWakeChannels, registerBackgroundWorkProvider, snapshotBackgroundWork } from "../
|
|
2
|
-
export { BACKGROUND_WORK_PROTOCOL_VERSION, BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY, BACKGROUND_WORK_REGISTRY_KEY,
|
|
1
|
+
import { BACKGROUND_WORK_PROTOCOL_VERSION, BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY, BACKGROUND_WORK_REGISTRY_KEY, BackgroundWorkItem, BackgroundWorkProvider, BackgroundWorkReconcileContext, BackgroundWorkRegistrationBridge, BackgroundWorkSnapshot, RegisteredBackgroundWorkItem, installBackgroundWorkRegistrationBridge, listBackgroundWorkProviders, listBackgroundWorkWakeChannels, registerBackgroundWorkProvider, snapshotBackgroundWork } from "../schemas/team/backgroundWork.mjs";
|
|
2
|
+
export { BACKGROUND_WORK_PROTOCOL_VERSION, BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY, BACKGROUND_WORK_REGISTRY_KEY, BackgroundWorkItem, BackgroundWorkProvider, BackgroundWorkReconcileContext, BackgroundWorkRegistrationBridge, BackgroundWorkSnapshot, RegisteredBackgroundWorkItem, installBackgroundWorkRegistrationBridge, listBackgroundWorkProviders, listBackgroundWorkWakeChannels, registerBackgroundWorkProvider, snapshotBackgroundWork };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BACKGROUND_WORK_PROTOCOL_VERSION as e,BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY as t,BACKGROUND_WORK_REGISTRY_KEY as n,installBackgroundWorkRegistrationBridge as r,listBackgroundWorkProviders as i,listBackgroundWorkWakeChannels as a,registerBackgroundWorkProvider as o,snapshotBackgroundWork as s}from"../
|
|
1
|
+
import{BACKGROUND_WORK_PROTOCOL_VERSION as e,BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY as t,BACKGROUND_WORK_REGISTRY_KEY as n,installBackgroundWorkRegistrationBridge as r,listBackgroundWorkProviders as i,listBackgroundWorkWakeChannels as a,registerBackgroundWorkProvider as o,snapshotBackgroundWork as s}from"../schemas/team/backgroundWork.mjs";import"../services/api/backgroundWork.mjs";export{e as BACKGROUND_WORK_PROTOCOL_VERSION,t as BACKGROUND_WORK_REGISTRATION_BRIDGE_KEY,n as BACKGROUND_WORK_REGISTRY_KEY,r as installBackgroundWorkRegistrationBridge,i as listBackgroundWorkProviders,a as listBackgroundWorkWakeChannels,o as registerBackgroundWorkProvider,s as snapshotBackgroundWork};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../env.cjs`),t=require(`../
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../adapters/process/env.cjs`),t=require(`../schemas/team/capabilityCeiling.cjs`);require(`../services/api/capabilityCeiling.cjs`),exports.SUBAGENT_CAPABILITY_CEILING_ENV=e.SUBAGENT_CAPABILITY_CEILING_ENV,exports.SUBAGENT_CAPABILITY_CEILING_REGISTRY_KEY=t.SUBAGENT_CAPABILITY_CEILING_REGISTRY_KEY,exports.SUBAGENT_CAPABILITY_CEILING_VERSION=t.SUBAGENT_CAPABILITY_CEILING_VERSION,exports.decodeSubagentCapabilityCeiling=t.decodeSubagentCapabilityCeiling,exports.encodeSubagentCapabilityCeiling=t.encodeSubagentCapabilityCeiling,exports.intersectSubagentCapabilityCeilings=t.intersectSubagentCapabilityCeilings,exports.parseSubagentCapabilityCeiling=t.parseSubagentCapabilityCeiling,exports.registerSubagentCapabilityCeiling=t.registerSubagentCapabilityCeiling,exports.resolveCurrentSubagentCapabilityCeiling=t.resolveCurrentSubagentCapabilityCeiling,exports.resolveSubagentCapabilityCeiling=t.resolveSubagentCapabilityCeiling;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { SUBAGENT_CAPABILITY_CEILING_ENV } from "../env.cjs";
|
|
2
|
-
import { RegisterSubagentCapabilityCeilingOptions, ResolvedSubagentCapabilityCeiling, SUBAGENT_CAPABILITY_CEILING_REGISTRY_KEY, SUBAGENT_CAPABILITY_CEILING_VERSION, SubagentCapabilityAudit, SubagentCapabilityCeiling, SubagentCapabilityCeilingHandle, decodeSubagentCapabilityCeiling, encodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, parseSubagentCapabilityCeiling, registerSubagentCapabilityCeiling, resolveCurrentSubagentCapabilityCeiling, resolveSubagentCapabilityCeiling } from "../
|
|
3
|
-
export {
|
|
1
|
+
import { SUBAGENT_CAPABILITY_CEILING_ENV } from "../adapters/process/env.cjs";
|
|
2
|
+
import { RegisterSubagentCapabilityCeilingOptions, ResolvedSubagentCapabilityCeiling, SUBAGENT_CAPABILITY_CEILING_REGISTRY_KEY, SUBAGENT_CAPABILITY_CEILING_VERSION, SubagentCapabilityAudit, SubagentCapabilityCeiling, SubagentCapabilityCeilingHandle, decodeSubagentCapabilityCeiling, encodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, parseSubagentCapabilityCeiling, registerSubagentCapabilityCeiling, resolveCurrentSubagentCapabilityCeiling, resolveSubagentCapabilityCeiling } from "../schemas/team/capabilityCeiling.cjs";
|
|
3
|
+
export { RegisterSubagentCapabilityCeilingOptions, ResolvedSubagentCapabilityCeiling, SUBAGENT_CAPABILITY_CEILING_ENV, SUBAGENT_CAPABILITY_CEILING_REGISTRY_KEY, SUBAGENT_CAPABILITY_CEILING_VERSION, SubagentCapabilityAudit, SubagentCapabilityCeiling, SubagentCapabilityCeilingHandle, decodeSubagentCapabilityCeiling, encodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, parseSubagentCapabilityCeiling, registerSubagentCapabilityCeiling, resolveCurrentSubagentCapabilityCeiling, resolveSubagentCapabilityCeiling };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { SUBAGENT_CAPABILITY_CEILING_ENV } from "../env.mjs";
|
|
2
|
-
import { RegisterSubagentCapabilityCeilingOptions, ResolvedSubagentCapabilityCeiling, SUBAGENT_CAPABILITY_CEILING_REGISTRY_KEY, SUBAGENT_CAPABILITY_CEILING_VERSION, SubagentCapabilityAudit, SubagentCapabilityCeiling, SubagentCapabilityCeilingHandle, decodeSubagentCapabilityCeiling, encodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, parseSubagentCapabilityCeiling, registerSubagentCapabilityCeiling, resolveCurrentSubagentCapabilityCeiling, resolveSubagentCapabilityCeiling } from "../
|
|
3
|
-
export {
|
|
1
|
+
import { SUBAGENT_CAPABILITY_CEILING_ENV } from "../adapters/process/env.mjs";
|
|
2
|
+
import { RegisterSubagentCapabilityCeilingOptions, ResolvedSubagentCapabilityCeiling, SUBAGENT_CAPABILITY_CEILING_REGISTRY_KEY, SUBAGENT_CAPABILITY_CEILING_VERSION, SubagentCapabilityAudit, SubagentCapabilityCeiling, SubagentCapabilityCeilingHandle, decodeSubagentCapabilityCeiling, encodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, parseSubagentCapabilityCeiling, registerSubagentCapabilityCeiling, resolveCurrentSubagentCapabilityCeiling, resolveSubagentCapabilityCeiling } from "../schemas/team/capabilityCeiling.mjs";
|
|
3
|
+
export { RegisterSubagentCapabilityCeilingOptions, ResolvedSubagentCapabilityCeiling, SUBAGENT_CAPABILITY_CEILING_ENV, SUBAGENT_CAPABILITY_CEILING_REGISTRY_KEY, SUBAGENT_CAPABILITY_CEILING_VERSION, SubagentCapabilityAudit, SubagentCapabilityCeiling, SubagentCapabilityCeilingHandle, decodeSubagentCapabilityCeiling, encodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, parseSubagentCapabilityCeiling, registerSubagentCapabilityCeiling, resolveCurrentSubagentCapabilityCeiling, resolveSubagentCapabilityCeiling };
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{SUBAGENT_CAPABILITY_CEILING_ENV as e}from"../env.mjs";import{SUBAGENT_CAPABILITY_CEILING_REGISTRY_KEY as t,SUBAGENT_CAPABILITY_CEILING_VERSION as n,decodeSubagentCapabilityCeiling as r,encodeSubagentCapabilityCeiling as i,
|
|
2
|
-
//# sourceMappingURL=capabilityCeiling.mjs.map
|
|
1
|
+
import{SUBAGENT_CAPABILITY_CEILING_ENV as e}from"../adapters/process/env.mjs";import{SUBAGENT_CAPABILITY_CEILING_REGISTRY_KEY as t,SUBAGENT_CAPABILITY_CEILING_VERSION as n,decodeSubagentCapabilityCeiling as r,encodeSubagentCapabilityCeiling as i,intersectSubagentCapabilityCeilings as a,parseSubagentCapabilityCeiling as o,registerSubagentCapabilityCeiling as s,resolveCurrentSubagentCapabilityCeiling as c,resolveSubagentCapabilityCeiling as l}from"../schemas/team/capabilityCeiling.mjs";import"../services/api/capabilityCeiling.mjs";export{e as SUBAGENT_CAPABILITY_CEILING_ENV,t as SUBAGENT_CAPABILITY_CEILING_REGISTRY_KEY,n as SUBAGENT_CAPABILITY_CEILING_VERSION,r as decodeSubagentCapabilityCeiling,i as encodeSubagentCapabilityCeiling,a as intersectSubagentCapabilityCeilings,o as parseSubagentCapabilityCeiling,s as registerSubagentCapabilityCeiling,c as resolveCurrentSubagentCapabilityCeiling,l as resolveSubagentCapabilityCeiling};
|
package/dist/api/delegation.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../schemas/team/delegation.cjs`);exports.SUBAGENT_DELEGATION_CANCEL_EVENT=e.SUBAGENT_DELEGATION_CANCEL_EVENT,exports.SUBAGENT_DELEGATION_PROTOCOL_VERSION=e.SUBAGENT_DELEGATION_PROTOCOL_VERSION,exports.SUBAGENT_DELEGATION_REQUEST_EVENT=e.SUBAGENT_DELEGATION_REQUEST_EVENT,exports.SUBAGENT_DELEGATION_RESPONSE_EVENT=e.SUBAGENT_DELEGATION_RESPONSE_EVENT,exports.SUBAGENT_DELEGATION_STARTED_EVENT=e.SUBAGENT_DELEGATION_STARTED_EVENT,exports.SUBAGENT_DELEGATION_UPDATE_EVENT=e.SUBAGENT_DELEGATION_UPDATE_EVENT,exports.SUBAGENT_DELEGATION_V2_PROTOCOL_VERSION=e.SUBAGENT_DELEGATION_V2_PROTOCOL_VERSION;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { SUBAGENT_DELEGATION_CANCEL_EVENT, SUBAGENT_DELEGATION_PROTOCOL_VERSION, SUBAGENT_DELEGATION_REQUEST_EVENT, SUBAGENT_DELEGATION_RESPONSE_EVENT, SUBAGENT_DELEGATION_STARTED_EVENT, SUBAGENT_DELEGATION_UPDATE_EVENT, SUBAGENT_DELEGATION_V2_PROTOCOL_VERSION, SubagentDelegationAcceptance, SubagentDelegationAcceptanceConfig, SubagentDelegationAcceptanceCriterion, SubagentDelegationAcceptanceEvidence, SubagentDelegationAcceptanceResult, SubagentDelegationAcceptanceReview, SubagentDelegationAcceptanceStatus, SubagentDelegationAcceptanceVerifyCommand, SubagentDelegationAgentContract, SubagentDelegationCancel, SubagentDelegationEffectsResult, SubagentDelegationExecutionResult, SubagentDelegationJsonSchemaObject, SubagentDelegationRequest, SubagentDelegationResponse, SubagentDelegationReviewResult, SubagentDelegationStarted, SubagentDelegationStatus, SubagentDelegationToolBudget, SubagentDelegationTurnBudget, SubagentDelegationUpdate, SubagentDelegationV2Cancel, SubagentDelegationV2InvalidResponse, SubagentDelegationV2Request, SubagentDelegationV2Response, SubagentDelegationV2ResultRequest, SubagentDelegationV2Started, SubagentDelegationV2Status, SubagentDelegationV2TerminalResponse, SubagentDelegationV2Thinking, SubagentDelegationV2Update, SubagentDelegationV2Usage, SubagentDelegationV2Value } from "../
|
|
1
|
+
import { SUBAGENT_DELEGATION_CANCEL_EVENT, SUBAGENT_DELEGATION_PROTOCOL_VERSION, SUBAGENT_DELEGATION_REQUEST_EVENT, SUBAGENT_DELEGATION_RESPONSE_EVENT, SUBAGENT_DELEGATION_STARTED_EVENT, SUBAGENT_DELEGATION_UPDATE_EVENT, SUBAGENT_DELEGATION_V2_PROTOCOL_VERSION, SubagentDelegationAcceptance, SubagentDelegationAcceptanceConfig, SubagentDelegationAcceptanceCriterion, SubagentDelegationAcceptanceEvidence, SubagentDelegationAcceptanceResult, SubagentDelegationAcceptanceReview, SubagentDelegationAcceptanceStatus, SubagentDelegationAcceptanceVerifyCommand, SubagentDelegationAgentContract, SubagentDelegationCancel, SubagentDelegationEffectsResult, SubagentDelegationExecutionResult, SubagentDelegationJsonSchemaObject, SubagentDelegationRequest, SubagentDelegationResponse, SubagentDelegationReviewResult, SubagentDelegationStarted, SubagentDelegationStatus, SubagentDelegationToolBudget, SubagentDelegationTurnBudget, SubagentDelegationUpdate, SubagentDelegationV2Cancel, SubagentDelegationV2InvalidResponse, SubagentDelegationV2Request, SubagentDelegationV2Response, SubagentDelegationV2ResultRequest, SubagentDelegationV2Started, SubagentDelegationV2Status, SubagentDelegationV2TerminalResponse, SubagentDelegationV2Thinking, SubagentDelegationV2Update, SubagentDelegationV2Usage, SubagentDelegationV2Value } from "../schemas/team/delegation.cjs";
|
|
2
2
|
export { SUBAGENT_DELEGATION_CANCEL_EVENT, SUBAGENT_DELEGATION_PROTOCOL_VERSION, SUBAGENT_DELEGATION_REQUEST_EVENT, SUBAGENT_DELEGATION_RESPONSE_EVENT, SUBAGENT_DELEGATION_STARTED_EVENT, SUBAGENT_DELEGATION_UPDATE_EVENT, SUBAGENT_DELEGATION_V2_PROTOCOL_VERSION, SubagentDelegationAcceptance, SubagentDelegationAcceptanceConfig, SubagentDelegationAcceptanceCriterion, SubagentDelegationAcceptanceEvidence, SubagentDelegationAcceptanceResult, SubagentDelegationAcceptanceReview, SubagentDelegationAcceptanceStatus, SubagentDelegationAcceptanceVerifyCommand, SubagentDelegationAgentContract, SubagentDelegationCancel, SubagentDelegationEffectsResult, SubagentDelegationExecutionResult, SubagentDelegationJsonSchemaObject, SubagentDelegationRequest, SubagentDelegationResponse, SubagentDelegationReviewResult, SubagentDelegationStarted, SubagentDelegationStatus, SubagentDelegationToolBudget, SubagentDelegationTurnBudget, SubagentDelegationUpdate, SubagentDelegationV2Cancel, SubagentDelegationV2InvalidResponse, SubagentDelegationV2Request, SubagentDelegationV2Response, SubagentDelegationV2ResultRequest, SubagentDelegationV2Started, SubagentDelegationV2Status, SubagentDelegationV2TerminalResponse, SubagentDelegationV2Thinking, SubagentDelegationV2Update, SubagentDelegationV2Usage, SubagentDelegationV2Value };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { SUBAGENT_DELEGATION_CANCEL_EVENT, SUBAGENT_DELEGATION_PROTOCOL_VERSION, SUBAGENT_DELEGATION_REQUEST_EVENT, SUBAGENT_DELEGATION_RESPONSE_EVENT, SUBAGENT_DELEGATION_STARTED_EVENT, SUBAGENT_DELEGATION_UPDATE_EVENT, SUBAGENT_DELEGATION_V2_PROTOCOL_VERSION, SubagentDelegationAcceptance, SubagentDelegationAcceptanceConfig, SubagentDelegationAcceptanceCriterion, SubagentDelegationAcceptanceEvidence, SubagentDelegationAcceptanceResult, SubagentDelegationAcceptanceReview, SubagentDelegationAcceptanceStatus, SubagentDelegationAcceptanceVerifyCommand, SubagentDelegationAgentContract, SubagentDelegationCancel, SubagentDelegationEffectsResult, SubagentDelegationExecutionResult, SubagentDelegationJsonSchemaObject, SubagentDelegationRequest, SubagentDelegationResponse, SubagentDelegationReviewResult, SubagentDelegationStarted, SubagentDelegationStatus, SubagentDelegationToolBudget, SubagentDelegationTurnBudget, SubagentDelegationUpdate, SubagentDelegationV2Cancel, SubagentDelegationV2InvalidResponse, SubagentDelegationV2Request, SubagentDelegationV2Response, SubagentDelegationV2ResultRequest, SubagentDelegationV2Started, SubagentDelegationV2Status, SubagentDelegationV2TerminalResponse, SubagentDelegationV2Thinking, SubagentDelegationV2Update, SubagentDelegationV2Usage, SubagentDelegationV2Value } from "../
|
|
1
|
+
import { SUBAGENT_DELEGATION_CANCEL_EVENT, SUBAGENT_DELEGATION_PROTOCOL_VERSION, SUBAGENT_DELEGATION_REQUEST_EVENT, SUBAGENT_DELEGATION_RESPONSE_EVENT, SUBAGENT_DELEGATION_STARTED_EVENT, SUBAGENT_DELEGATION_UPDATE_EVENT, SUBAGENT_DELEGATION_V2_PROTOCOL_VERSION, SubagentDelegationAcceptance, SubagentDelegationAcceptanceConfig, SubagentDelegationAcceptanceCriterion, SubagentDelegationAcceptanceEvidence, SubagentDelegationAcceptanceResult, SubagentDelegationAcceptanceReview, SubagentDelegationAcceptanceStatus, SubagentDelegationAcceptanceVerifyCommand, SubagentDelegationAgentContract, SubagentDelegationCancel, SubagentDelegationEffectsResult, SubagentDelegationExecutionResult, SubagentDelegationJsonSchemaObject, SubagentDelegationRequest, SubagentDelegationResponse, SubagentDelegationReviewResult, SubagentDelegationStarted, SubagentDelegationStatus, SubagentDelegationToolBudget, SubagentDelegationTurnBudget, SubagentDelegationUpdate, SubagentDelegationV2Cancel, SubagentDelegationV2InvalidResponse, SubagentDelegationV2Request, SubagentDelegationV2Response, SubagentDelegationV2ResultRequest, SubagentDelegationV2Started, SubagentDelegationV2Status, SubagentDelegationV2TerminalResponse, SubagentDelegationV2Thinking, SubagentDelegationV2Update, SubagentDelegationV2Usage, SubagentDelegationV2Value } from "../schemas/team/delegation.mjs";
|
|
2
2
|
export { SUBAGENT_DELEGATION_CANCEL_EVENT, SUBAGENT_DELEGATION_PROTOCOL_VERSION, SUBAGENT_DELEGATION_REQUEST_EVENT, SUBAGENT_DELEGATION_RESPONSE_EVENT, SUBAGENT_DELEGATION_STARTED_EVENT, SUBAGENT_DELEGATION_UPDATE_EVENT, SUBAGENT_DELEGATION_V2_PROTOCOL_VERSION, SubagentDelegationAcceptance, SubagentDelegationAcceptanceConfig, SubagentDelegationAcceptanceCriterion, SubagentDelegationAcceptanceEvidence, SubagentDelegationAcceptanceResult, SubagentDelegationAcceptanceReview, SubagentDelegationAcceptanceStatus, SubagentDelegationAcceptanceVerifyCommand, SubagentDelegationAgentContract, SubagentDelegationCancel, SubagentDelegationEffectsResult, SubagentDelegationExecutionResult, SubagentDelegationJsonSchemaObject, SubagentDelegationRequest, SubagentDelegationResponse, SubagentDelegationReviewResult, SubagentDelegationStarted, SubagentDelegationStatus, SubagentDelegationToolBudget, SubagentDelegationTurnBudget, SubagentDelegationUpdate, SubagentDelegationV2Cancel, SubagentDelegationV2InvalidResponse, SubagentDelegationV2Request, SubagentDelegationV2Response, SubagentDelegationV2ResultRequest, SubagentDelegationV2Started, SubagentDelegationV2Status, SubagentDelegationV2TerminalResponse, SubagentDelegationV2Thinking, SubagentDelegationV2Update, SubagentDelegationV2Usage, SubagentDelegationV2Value };
|
package/dist/api/delegation.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{SUBAGENT_DELEGATION_CANCEL_EVENT as e,SUBAGENT_DELEGATION_PROTOCOL_VERSION as t,SUBAGENT_DELEGATION_REQUEST_EVENT as n,SUBAGENT_DELEGATION_RESPONSE_EVENT as r,SUBAGENT_DELEGATION_STARTED_EVENT as i,SUBAGENT_DELEGATION_UPDATE_EVENT as a,SUBAGENT_DELEGATION_V2_PROTOCOL_VERSION as o}from"../
|
|
1
|
+
import{SUBAGENT_DELEGATION_CANCEL_EVENT as e,SUBAGENT_DELEGATION_PROTOCOL_VERSION as t,SUBAGENT_DELEGATION_REQUEST_EVENT as n,SUBAGENT_DELEGATION_RESPONSE_EVENT as r,SUBAGENT_DELEGATION_STARTED_EVENT as i,SUBAGENT_DELEGATION_UPDATE_EVENT as a,SUBAGENT_DELEGATION_V2_PROTOCOL_VERSION as o}from"../schemas/team/delegation.mjs";export{e as SUBAGENT_DELEGATION_CANCEL_EVENT,t as SUBAGENT_DELEGATION_PROTOCOL_VERSION,n as SUBAGENT_DELEGATION_REQUEST_EVENT,r as SUBAGENT_DELEGATION_RESPONSE_EVENT,i as SUBAGENT_DELEGATION_STARTED_EVENT,a as SUBAGENT_DELEGATION_UPDATE_EVENT,o as SUBAGENT_DELEGATION_V2_PROTOCOL_VERSION};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../intercom/nativeTeamChannel.cjs`);exports.readActiveNativeTeamSnapshot=e.readActiveNativeTeamSnapshot;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../services/intercom/nativeTeamChannel.cjs`);require(`../services/api/teamSnapshot.cjs`),exports.readActiveNativeTeamSnapshot=e.readActiveNativeTeamSnapshot;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { NativeTeamMemberSnapshot, NativeTeamSnapshot, readActiveNativeTeamSnapshot } from "../intercom/nativeTeamChannel.cjs";
|
|
2
|
-
export {
|
|
1
|
+
import { NativeTeamMemberSnapshot, NativeTeamSnapshot, readActiveNativeTeamSnapshot } from "../services/intercom/nativeTeamChannel.cjs";
|
|
2
|
+
export { NativeTeamMemberSnapshot, NativeTeamSnapshot, readActiveNativeTeamSnapshot };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { NativeTeamMemberSnapshot, NativeTeamSnapshot, readActiveNativeTeamSnapshot } from "../intercom/nativeTeamChannel.mjs";
|
|
2
|
-
export {
|
|
1
|
+
import { NativeTeamMemberSnapshot, NativeTeamSnapshot, readActiveNativeTeamSnapshot } from "../services/intercom/nativeTeamChannel.mjs";
|
|
2
|
+
export { NativeTeamMemberSnapshot, NativeTeamSnapshot, readActiveNativeTeamSnapshot };
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=teamSnapshot.mjs.map
|
|
1
|
+
import{readActiveNativeTeamSnapshot as e}from"../services/intercom/nativeTeamChannel.mjs";import"../services/api/teamSnapshot.mjs";export{e as readActiveNativeTeamSnapshot};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chainExpression.cjs","names":[],"sources":["../../../src/commands/slash/chainExpression.ts"],"sourcesContent":["/**\n * Parses `/chain`/`/parallel`/`/run` slash-command argument strings into\n * structured steps: inline per-agent config (`agent[key=value,...]`),\n * `->`-separated chain steps, and `(a | b)`-style parallel groups within a\n * chain. Pure string parsing - nothing here calls into `SpawnPlanner` or\n * knows what a parsed field is used for; see `subagentLaunch.ts` for the\n * execution side and whichever module maps a `ParsedStep` onto a\n * `SpawnPlanTaskInput`/`SpawnPlanChainStepInput` for what happens to a\n * field this parser accepts once `SpawnPlanner`'s own request shape is\n * settled for this port (see the port's own tracking, not this file).\n *\n * WHY THIS IS ITS OWN MODULE, SEPARATE FROM COMMAND REGISTRATION:\n * The predecessor kept this logic inline in `slashCommands.ts`. Splitting\n * it out means the string-parsing rules - which are intricate and worth\n * testing in isolation (quote tracking, nested parens, top-level-only arrow\n * and pipe splitting) - do not need a `pi.registerCommand` fixture to test,\n * and stay unaffected by whatever `SpawnPlanner` request shape a caller\n * eventually maps a `ParsedStep` onto.\n *\n * AVOID:\n * - Adding execution or `SpawnPlanner` knowledge here. If a function needs\n * to know what a field does once parsed, it belongs in the caller, not\n * this file\n */\n\nexport interface InlineConfig {\n output?: string | false;\n outputMode?: 'inline' | 'file-only';\n reads?: string[] | false;\n model?: string;\n skill?: string[] | false;\n progress?: boolean;\n as?: string;\n label?: string;\n phase?: string;\n cwd?: string;\n count?: number;\n outputSchema?: string;\n acceptance?: string;\n}\n\n/** Parses the `key=value,...` body of `agent[...]` inline config. Unknown keys are ignored, not rejected. */\nexport function parseInlineConfig(raw: string): InlineConfig {\n const config: InlineConfig = {};\n for (const part of raw.split(',')) {\n const trimmed = part.trim();\n if (!trimmed) continue;\n const eq = trimmed.indexOf('=');\n if (eq === -1) {\n if (trimmed === 'progress') config.progress = true;\n continue;\n }\n const key = trimmed.slice(0, eq).trim();\n const val = trimmed.slice(eq + 1).trim();\n switch (key) {\n case 'output':\n config.output = val === 'false' ? false : val;\n break;\n case 'outputMode':\n if (val === 'inline' || val === 'file-only') config.outputMode = val;\n break;\n case 'reads':\n config.reads = val === 'false' ? false : val.split('+').filter(Boolean);\n break;\n case 'model':\n config.model = val || undefined;\n break;\n case 'skill':\n case 'skills':\n config.skill = val === 'false' ? false : val.split('+').filter(Boolean);\n break;\n case 'progress':\n config.progress = val !== 'false';\n break;\n case 'as':\n config.as = val || undefined;\n break;\n case 'label':\n config.label = val || undefined;\n break;\n case 'phase':\n config.phase = val || undefined;\n break;\n case 'cwd':\n config.cwd = val || undefined;\n break;\n case 'count': {\n const n = Number(val);\n if (Number.isInteger(n) && n > 0) config.count = n;\n break;\n }\n case 'outputSchema':\n config.outputSchema = val || undefined;\n break;\n case 'acceptance':\n config.acceptance = val || undefined;\n break;\n }\n }\n return config;\n}\n\n/** Splits `agent[key=value]` into the bare agent name and its parsed inline config. */\nexport function parseAgentToken(token: string): { name: string; config: InlineConfig } {\n const bracket = token.indexOf('[');\n if (bracket === -1) return { name: token, config: {} };\n const end = token.lastIndexOf(']');\n return {\n name: token.slice(0, bracket),\n config: parseInlineConfig(token.slice(bracket + 1, end !== -1 ? end : undefined)),\n };\n}\n\nexport interface ParsedStep {\n kind: 'step';\n name: string;\n config: InlineConfig;\n task?: string;\n}\n\nexport class SlashParseError extends Error {}\n\nexport function parseSingleTaskToken(token: string): ParsedStep {\n let agentPart: string;\n let task: string | undefined;\n const qMatch = token.match(/^(\\S+(?:\\[[^\\]]*\\])?)\\s+(?:\"([^\"]*)\"|'([^']*)')$/);\n if (qMatch) {\n agentPart = qMatch[1]!;\n task = (qMatch[2] ?? qMatch[3]) || undefined;\n } else {\n const dashIdx = token.indexOf(' -- ');\n if (dashIdx !== -1) {\n agentPart = token.slice(0, dashIdx).trim();\n task = token.slice(dashIdx + 4).trim() || undefined;\n } else {\n agentPart = token;\n }\n }\n return { kind: 'step', ...parseAgentToken(agentPart), task };\n}\n\n/**\n * User-typed flag selecting fork context for a run.\n *\n * Named because it is part of the command surface a user types, so the literal\n * appears in the parser, in help text and in any error naming it. Three copies\n * of a user-facing token drift one edit at a time, and the failure mode is a\n * flag the help promises and the parser does not accept.\n */\nconst FORK_FLAG = '--fork';\n\n/**\n * The predecessor's flags that used to select background execution. `--async`\n * was a synonym for the same flag, accepted by the since-removed prompt\n * workflow commands; it stays rejected here so anyone carrying an old\n * invocation gets the explanation rather than an unknown-flag error.\n */\nconst DEPRECATED_BACKGROUND_FLAGS = ['--bg', '--async'];\n\n/**\n * Thrown when a command's argument text still contains a background-mode\n * flag. Distinct from a generic parse error so the message can say\n * specifically why the flag is gone, not just that it was unexpected -\n * caught the same way as any other `SlashParseError` by\n * `reportKnownErrorOrRethrow`.\n */\nexport class DeprecatedBackgroundFlagError extends SlashParseError {\n constructor(readonly flag: string) {\n super(`'${flag}' is no longer needed: every run in this package is already background.`);\n this.name = 'DeprecatedBackgroundFlagError';\n }\n}\n\nfunction matchesTrailingFlag(text: string, flag: string): boolean {\n return text === flag || text.endsWith(` ${flag}`);\n}\n\nfunction stripTrailingFlag(text: string, flag: string): string {\n return text === flag ? '' : text.slice(0, -(flag.length + 1)).trim();\n}\n\n/**\n * Removes a trailing ` --fork` flag, returning the remaining argument text.\n *\n * `--bg`/`--async` are gone entirely - not stripped, not accepted, not\n * silently ignored. A user typing `--bg` out of habit gets an explicit,\n * named rejection here rather than falling through as literal text that\n * then produces an unrelated \"no such agent\" error further down the\n * pipeline, which points at the wrong problem. See `subagentLaunch.ts`'s\n * module doc for why background is the only mode.\n */\nexport function extractForkFlag(rawArgs: string): { args: string; fork: boolean } {\n let trimmed = rawArgs.trim();\n let fork = false;\n for (;;) {\n if (matchesTrailingFlag(trimmed, FORK_FLAG)) {\n fork = true;\n trimmed = stripTrailingFlag(trimmed, FORK_FLAG);\n continue;\n }\n const deprecatedFlag = DEPRECATED_BACKGROUND_FLAGS.find((flag) => matchesTrailingFlag(trimmed, flag));\n if (deprecatedFlag) throw new DeprecatedBackgroundFlagError(deprecatedFlag);\n break;\n }\n return { args: trimmed, fork };\n}\n"],"mappings":"AA0CA,SAAgB,EAAkB,EAA2B,CAC3D,IAAM,EAAuB,EAAE,CAC/B,IAAK,IAAM,KAAQ,EAAI,MAAM,IAAI,CAAE,CACjC,IAAM,EAAU,EAAK,MAAM,CAC3B,GAAI,CAAC,EAAS,SACd,IAAM,EAAK,EAAQ,QAAQ,IAAI,CAC/B,GAAI,IAAO,GAAI,CACT,IAAY,aAAY,EAAO,SAAW,IAC9C,SAEF,IAAM,EAAM,EAAQ,MAAM,EAAG,EAAG,CAAC,MAAM,CACjC,EAAM,EAAQ,MAAM,EAAK,EAAE,CAAC,MAAM,CACxC,OAAQ,EAAR,CACE,IAAK,SACH,EAAO,OAAS,IAAQ,QAAU,GAAQ,EAC1C,MACF,IAAK,cACC,IAAQ,UAAY,IAAQ,eAAa,EAAO,WAAa,GACjE,MACF,IAAK,QACH,EAAO,MAAQ,IAAQ,QAAU,GAAQ,EAAI,MAAM,IAAI,CAAC,OAAO,QAAQ,CACvE,MACF,IAAK,QACH,EAAO,MAAQ,GAAO,IAAA,GACtB,MACF,IAAK,QACL,IAAK,SACH,EAAO,MAAQ,IAAQ,QAAU,GAAQ,EAAI,MAAM,IAAI,CAAC,OAAO,QAAQ,CACvE,MACF,IAAK,WACH,EAAO,SAAW,IAAQ,QAC1B,MACF,IAAK,KACH,EAAO,GAAK,GAAO,IAAA,GACnB,MACF,IAAK,QACH,EAAO,MAAQ,GAAO,IAAA,GACtB,MACF,IAAK,QACH,EAAO,MAAQ,GAAO,IAAA,GACtB,MACF,IAAK,MACH,EAAO,IAAM,GAAO,IAAA,GACpB,MACF,IAAK,QAAS,CACZ,IAAM,EAAI,OAAO,EAAI,CACjB,OAAO,UAAU,EAAE,EAAI,EAAI,IAAG,EAAO,MAAQ,GACjD,MAEF,IAAK,eACH,EAAO,aAAe,GAAO,IAAA,GAC7B,MACF,IAAK,aACH,EAAO,WAAa,GAAO,IAAA,GAC3B,OAGN,OAAO,EAIT,SAAgB,EAAgB,EAAuD,CACrF,IAAM,EAAU,EAAM,QAAQ,IAAI,CAClC,GAAI,IAAY,GAAI,MAAO,CAAE,KAAM,EAAO,OAAQ,EAAE,CAAE,CACtD,IAAM,EAAM,EAAM,YAAY,IAAI,CAClC,MAAO,CACL,KAAM,EAAM,MAAM,EAAG,EAAQ,CAC7B,OAAQ,EAAkB,EAAM,MAAM,EAAU,EAAG,IAAQ,GAAW,IAAA,GAAN,EAAgB,CAAC,CAClF,CAUH,IAAa,EAAb,cAAqC,KAAM,GAE3C,SAAgB,EAAqB,EAA2B,CAC9D,IAAI,EACA,EACE,EAAS,EAAM,MAAM,mDAAmD,CAC9E,GAAI,EACF,EAAY,EAAO,GACnB,GAAQ,EAAO,IAAM,EAAO,KAAO,IAAA,OAC9B,CACL,IAAM,EAAU,EAAM,QAAQ,OAAO,CACjC,IAAY,GAId,EAAY,GAHZ,EAAY,EAAM,MAAM,EAAG,EAAQ,CAAC,MAAM,CAC1C,EAAO,EAAM,MAAM,EAAU,EAAE,CAAC,MAAM,EAAI,IAAA,IAK9C,MAAO,CAAE,KAAM,OAAQ,GAAG,EAAgB,EAAU,CAAE,OAAM,CAW9D,MAAM,EAAY,SAQZ,EAA8B,CAAC,OAAQ,UAAU,CASvD,IAAa,EAAb,cAAmD,CAAgB,CACjE,YAAY,EAAuB,CACjC,MAAM,IAAI,EAAK,yEAAyE,CADrE,KAAA,KAAA,EAEnB,KAAK,KAAO,kCAIhB,SAAS,EAAoB,EAAc,EAAuB,CAChE,OAAO,IAAS,GAAQ,EAAK,SAAS,IAAI,IAAO,CAGnD,SAAS,EAAkB,EAAc,EAAsB,CAC7D,OAAO,IAAS,EAAO,GAAK,EAAK,MAAM,EAAG,EAAE,EAAK,OAAS,GAAG,CAAC,MAAM,CAatE,SAAgB,EAAgB,EAAkD,CAChF,IAAI,EAAU,EAAQ,MAAM,CACxB,EAAO,GACX,OAAS,CACP,GAAI,EAAoB,EAAS,EAAU,CAAE,CAC3C,EAAO,GACP,EAAU,EAAkB,EAAS,EAAU,CAC/C,SAEF,IAAM,EAAiB,EAA4B,KAAM,GAAS,EAAoB,EAAS,EAAK,CAAC,CACrG,GAAI,EAAgB,MAAM,IAAI,EAA8B,EAAe,CAC3E,MAEF,MAAO,CAAE,KAAM,EAAS,OAAM"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chainExpression.mjs","names":[],"sources":["../../../src/commands/slash/chainExpression.ts"],"sourcesContent":["/**\n * Parses `/chain`/`/parallel`/`/run` slash-command argument strings into\n * structured steps: inline per-agent config (`agent[key=value,...]`),\n * `->`-separated chain steps, and `(a | b)`-style parallel groups within a\n * chain. Pure string parsing - nothing here calls into `SpawnPlanner` or\n * knows what a parsed field is used for; see `subagentLaunch.ts` for the\n * execution side and whichever module maps a `ParsedStep` onto a\n * `SpawnPlanTaskInput`/`SpawnPlanChainStepInput` for what happens to a\n * field this parser accepts once `SpawnPlanner`'s own request shape is\n * settled for this port (see the port's own tracking, not this file).\n *\n * WHY THIS IS ITS OWN MODULE, SEPARATE FROM COMMAND REGISTRATION:\n * The predecessor kept this logic inline in `slashCommands.ts`. Splitting\n * it out means the string-parsing rules - which are intricate and worth\n * testing in isolation (quote tracking, nested parens, top-level-only arrow\n * and pipe splitting) - do not need a `pi.registerCommand` fixture to test,\n * and stay unaffected by whatever `SpawnPlanner` request shape a caller\n * eventually maps a `ParsedStep` onto.\n *\n * AVOID:\n * - Adding execution or `SpawnPlanner` knowledge here. If a function needs\n * to know what a field does once parsed, it belongs in the caller, not\n * this file\n */\n\nexport interface InlineConfig {\n output?: string | false;\n outputMode?: 'inline' | 'file-only';\n reads?: string[] | false;\n model?: string;\n skill?: string[] | false;\n progress?: boolean;\n as?: string;\n label?: string;\n phase?: string;\n cwd?: string;\n count?: number;\n outputSchema?: string;\n acceptance?: string;\n}\n\n/** Parses the `key=value,...` body of `agent[...]` inline config. Unknown keys are ignored, not rejected. */\nexport function parseInlineConfig(raw: string): InlineConfig {\n const config: InlineConfig = {};\n for (const part of raw.split(',')) {\n const trimmed = part.trim();\n if (!trimmed) continue;\n const eq = trimmed.indexOf('=');\n if (eq === -1) {\n if (trimmed === 'progress') config.progress = true;\n continue;\n }\n const key = trimmed.slice(0, eq).trim();\n const val = trimmed.slice(eq + 1).trim();\n switch (key) {\n case 'output':\n config.output = val === 'false' ? false : val;\n break;\n case 'outputMode':\n if (val === 'inline' || val === 'file-only') config.outputMode = val;\n break;\n case 'reads':\n config.reads = val === 'false' ? false : val.split('+').filter(Boolean);\n break;\n case 'model':\n config.model = val || undefined;\n break;\n case 'skill':\n case 'skills':\n config.skill = val === 'false' ? false : val.split('+').filter(Boolean);\n break;\n case 'progress':\n config.progress = val !== 'false';\n break;\n case 'as':\n config.as = val || undefined;\n break;\n case 'label':\n config.label = val || undefined;\n break;\n case 'phase':\n config.phase = val || undefined;\n break;\n case 'cwd':\n config.cwd = val || undefined;\n break;\n case 'count': {\n const n = Number(val);\n if (Number.isInteger(n) && n > 0) config.count = n;\n break;\n }\n case 'outputSchema':\n config.outputSchema = val || undefined;\n break;\n case 'acceptance':\n config.acceptance = val || undefined;\n break;\n }\n }\n return config;\n}\n\n/** Splits `agent[key=value]` into the bare agent name and its parsed inline config. */\nexport function parseAgentToken(token: string): { name: string; config: InlineConfig } {\n const bracket = token.indexOf('[');\n if (bracket === -1) return { name: token, config: {} };\n const end = token.lastIndexOf(']');\n return {\n name: token.slice(0, bracket),\n config: parseInlineConfig(token.slice(bracket + 1, end !== -1 ? end : undefined)),\n };\n}\n\nexport interface ParsedStep {\n kind: 'step';\n name: string;\n config: InlineConfig;\n task?: string;\n}\n\nexport class SlashParseError extends Error {}\n\nexport function parseSingleTaskToken(token: string): ParsedStep {\n let agentPart: string;\n let task: string | undefined;\n const qMatch = token.match(/^(\\S+(?:\\[[^\\]]*\\])?)\\s+(?:\"([^\"]*)\"|'([^']*)')$/);\n if (qMatch) {\n agentPart = qMatch[1]!;\n task = (qMatch[2] ?? qMatch[3]) || undefined;\n } else {\n const dashIdx = token.indexOf(' -- ');\n if (dashIdx !== -1) {\n agentPart = token.slice(0, dashIdx).trim();\n task = token.slice(dashIdx + 4).trim() || undefined;\n } else {\n agentPart = token;\n }\n }\n return { kind: 'step', ...parseAgentToken(agentPart), task };\n}\n\n/**\n * User-typed flag selecting fork context for a run.\n *\n * Named because it is part of the command surface a user types, so the literal\n * appears in the parser, in help text and in any error naming it. Three copies\n * of a user-facing token drift one edit at a time, and the failure mode is a\n * flag the help promises and the parser does not accept.\n */\nconst FORK_FLAG = '--fork';\n\n/**\n * The predecessor's flags that used to select background execution. `--async`\n * was a synonym for the same flag, accepted by the since-removed prompt\n * workflow commands; it stays rejected here so anyone carrying an old\n * invocation gets the explanation rather than an unknown-flag error.\n */\nconst DEPRECATED_BACKGROUND_FLAGS = ['--bg', '--async'];\n\n/**\n * Thrown when a command's argument text still contains a background-mode\n * flag. Distinct from a generic parse error so the message can say\n * specifically why the flag is gone, not just that it was unexpected -\n * caught the same way as any other `SlashParseError` by\n * `reportKnownErrorOrRethrow`.\n */\nexport class DeprecatedBackgroundFlagError extends SlashParseError {\n constructor(readonly flag: string) {\n super(`'${flag}' is no longer needed: every run in this package is already background.`);\n this.name = 'DeprecatedBackgroundFlagError';\n }\n}\n\nfunction matchesTrailingFlag(text: string, flag: string): boolean {\n return text === flag || text.endsWith(` ${flag}`);\n}\n\nfunction stripTrailingFlag(text: string, flag: string): string {\n return text === flag ? '' : text.slice(0, -(flag.length + 1)).trim();\n}\n\n/**\n * Removes a trailing ` --fork` flag, returning the remaining argument text.\n *\n * `--bg`/`--async` are gone entirely - not stripped, not accepted, not\n * silently ignored. A user typing `--bg` out of habit gets an explicit,\n * named rejection here rather than falling through as literal text that\n * then produces an unrelated \"no such agent\" error further down the\n * pipeline, which points at the wrong problem. See `subagentLaunch.ts`'s\n * module doc for why background is the only mode.\n */\nexport function extractForkFlag(rawArgs: string): { args: string; fork: boolean } {\n let trimmed = rawArgs.trim();\n let fork = false;\n for (;;) {\n if (matchesTrailingFlag(trimmed, FORK_FLAG)) {\n fork = true;\n trimmed = stripTrailingFlag(trimmed, FORK_FLAG);\n continue;\n }\n const deprecatedFlag = DEPRECATED_BACKGROUND_FLAGS.find((flag) => matchesTrailingFlag(trimmed, flag));\n if (deprecatedFlag) throw new DeprecatedBackgroundFlagError(deprecatedFlag);\n break;\n }\n return { args: trimmed, fork };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
const e=require(`../../_virtual/_rolldown/runtime.cjs`);require(`../../adapters/process/env.cjs`);const t=require(`../../shared/paths.cjs`),n=require(`../../services/intercom/intercomBridge.cjs`);let r=require(`node:fs`);r=e.__toESM(r,1);let i=require(`@agimon-ai/doompi-extension-contracts/child-process`);function a(e){return e instanceof Error?`${e.name}: ${e.message}`:String(e)}function o(e,t){try{return t()}catch(t){return`- ${e}: failed - ${a(t)}`}}function s(e,t){try{if(!r.existsSync(t))return`- ${e}: missing (${t})`;if(!r.statSync(t).isDirectory())throw Error(`not a directory: ${t}`);return r.accessSync(t,r.constants.R_OK|r.constants.W_OK),`- ${e}: ok (${t})`}catch(n){return`- ${e}: failed (${t}) - ${a(n)}`}}const c=[`plugin`,`user`,`project`],l=[`project`,`project-settings`,`user`,`user-settings`,`extension`,`builtin`,`unknown`];function u(e){let t=new Map;for(let n of e)t.set(n.source,(t.get(n.source)??0)+1);let n=c.map(e=>`${e} ${t.get(e)??0}`).filter(e=>!e.endsWith(` 0`));return n.length>0?n.join(`, `):`none`}function d(e){let t=new Map;for(let n of e)t.set(n.source,(t.get(n.source)??0)+1);let n=l.map(e=>`${e} ${t.get(e)??0}`).filter(e=>!e.endsWith(` 0`));return n.length>0?n.join(`, `):`none`}function f(e){let t=[`- current session file: ${e.currentSessionFile??`not available`}`,`- current session id: ${e.currentSessionId??`not available`}`];return e.sessionError&&t.push(`- session manager: failed - ${e.sessionError}`),t}function p(e,t){return[o(`agents`,()=>{let n=t.discovery.discover(e.cwd,e.agentScope).agents;return`- agents: total ${n.length} (${u(n)})`}),o(`skills`,()=>{let n=t.skills.discoverAvailableSkills(e.cwd);return`- skills: total ${n.length} (${d(n)})`})]}function m(){let e=[],t=(process.env[i.SUBAGENT_PARENT_SESSION_ENV]??``).trim();e.push(t?`- parent session: set (${t})`:`- parent session: not set - ask forwarding from a subprocess child will not reach a parent UI`);let n=process.env[i.SUBAGENT_CHILD_ENV]===`1`;return e.push(`- subagent process: ${n?`yes (${i.SUBAGENT_CHILD_ENV}=1)`:`no`}`),e}function h(e){return o(`intercom bridge`,()=>{let t=n.diagnoseIntercomBridge({config:e.intercomBridgeConfig,context:e.context,orchestratorTarget:e.orchestratorTarget});return[`- bridge: ${t.active?`active`:`inactive`}${t.reason?` (${t.reason})`:``}`,`- mode: ${t.mode}; context: ${e.context??`unspecified`}`,`- orchestrator target: ${t.orchestratorTarget??`not available`}`,`- intercom: ${t.intercomAvailable?`available`:`unavailable`} (${t.extensionDir})`].join(`
|
|
2
|
+
`)}).split(`
|
|
3
|
+
`)}function g(e,n){return[`Subagents doctor report`,``,`Runtime`,`- cwd: ${e.cwd}`,`- async support: available (this package is async-only)`,...f(e),``,`Filesystem`,s(`temp root`,t.TEMP_ROOT_DIR),s(`runs`,t.currentRunsDir()),s(`results`,t.currentResultsDir()),``,`Discovery`,...p(e,n),``,`Permission system`,...m(),``,`Intercom bridge`,...h(e)].join(`
|
|
4
|
+
`)}exports.buildDoctorReport=g;
|
|
5
|
+
//# sourceMappingURL=doctor.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.cjs","names":["fs","SUBAGENT_PARENT_SESSION_ENV","SUBAGENT_CHILD_ENV","diagnoseIntercomBridge","TEMP_ROOT_DIR","currentRunsDir","currentResultsDir"],"sources":["../../../src/commands/slash/doctor.ts"],"sourcesContent":["/**\n * `/subagents-doctor`: a diagnostic report of this package's own runtime\n * state - filesystem roots, agent/skill discovery, the intercom bridge, and\n * the child-process signal env vars - for a user debugging \"why didn't my\n * subagent do X\".\n *\n * WHY THIS PORTS AS A SMALL PORT, NOT A DEFERRAL:\n * Read (not ported) the predecessor's foreground executor's `doctor` action\n * and `extension/doctor.ts`'s `buildDoctorReport` in full before deciding.\n * Every section it builds has a real doom-team equivalent: filesystem roots\n * (`shared/paths.ts`), agent/skill discovery (`AgentDiscoveryService`/\n * `SkillDiscoveryService`), the permission-system env signals\n * (`SUBAGENT_CHILD_ENV`/`SUBAGENT_PARENT_SESSION_ENV` - same wire names),\n * and the intercom bridge diagnostic (`diagnoseIntercomBridge`, already\n * ported). This package is also inherently async-only, so the predecessor's\n * \"async support: available/unavailable\" runtime check has nothing to\n * branch on here - it always reports available.\n *\n * WHAT IS DELIBERATELY LEFT OUT, AND WHY:\n * - Chain and prompt-workflow counts. The saved-work surface was REMOVED BY\n * DECISION (see `slashCommands.ts`'s header), so there is nothing to\n * count rather than something not yet built. Reporting a zero would imply\n * a feature that is simply absent\n * - The spawn-budget section entirely. `runs/shared/spawn-budget.ts` DOES\n * exist, but its own header says `maxSubagentSpawnsPerSession` is NOT\n * enforced by `SpawnPlanner` yet. Reporting a budget number nothing\n * enforces would be the same class of lie as parsing an inline-config\n * field and silently ignoring it - see `spawnRequestMapping.ts`\n *\n * AVOID:\n * - Reporting a spawn budget. There is no enforcement to report on yet\n */\n\nimport * as fs from 'node:fs';\nimport { SUBAGENT_CHILD_ENV, SUBAGENT_PARENT_SESSION_ENV } from '../../adapters/process/env.ts';\nimport type { DiscoveredSkill, ISkillDiscoveryService, SkillSource } from '../../services/agents/skills.ts';\nimport type { AgentScope, AgentSource, IAgentDiscoveryService } from '../../services/agents/types.ts';\nimport { diagnoseIntercomBridge, type IntercomBridgeConfigInput } from '../../services/intercom/intercomBridge.ts';\nimport { currentResultsDir, currentRunsDir, TEMP_ROOT_DIR } from '../../shared/paths.ts';\n\nexport interface DoctorReportInput {\n cwd: string;\n agentScope: AgentScope;\n intercomBridgeConfig?: IntercomBridgeConfigInput;\n context?: 'fresh' | 'fork';\n orchestratorTarget?: string;\n currentSessionFile?: string | null;\n currentSessionId?: string | null;\n sessionError?: string;\n}\n\nexport interface DoctorReportDeps {\n discovery: IAgentDiscoveryService;\n skills: ISkillDiscoveryService;\n}\n\nfunction errorText(error: unknown): string {\n return error instanceof Error ? `${error.name}: ${error.message}` : String(error);\n}\n\nfunction lineFromCheck(label: string, check: () => string): string {\n try {\n return check();\n } catch (error) {\n return `- ${label}: failed - ${errorText(error)}`;\n }\n}\n\nfunction formatExistingDirectory(label: string, dirPath: string): string {\n try {\n if (!fs.existsSync(dirPath)) return `- ${label}: missing (${dirPath})`;\n const stats = fs.statSync(dirPath);\n if (!stats.isDirectory()) throw new Error(`not a directory: ${dirPath}`);\n fs.accessSync(dirPath, fs.constants.R_OK | fs.constants.W_OK);\n return `- ${label}: ok (${dirPath})`;\n } catch (error) {\n return `- ${label}: failed (${dirPath}) - ${errorText(error)}`;\n }\n}\n\nconst AGENT_SOURCE_ORDER: AgentSource[] = ['plugin', 'user', 'project'];\nconst SKILL_SOURCE_ORDER: SkillSource[] = [\n 'project',\n 'project-settings',\n 'user',\n 'user-settings',\n 'extension',\n 'builtin',\n 'unknown',\n];\n\nfunction formatSourceCounts(agents: Array<{ source: AgentSource }>): string {\n const counts = new Map<AgentSource, number>();\n for (const agent of agents) counts.set(agent.source, (counts.get(agent.source) ?? 0) + 1);\n const parts = AGENT_SOURCE_ORDER.map((source) => `${source} ${counts.get(source) ?? 0}`).filter(\n (part) => !part.endsWith(' 0'),\n );\n return parts.length > 0 ? parts.join(', ') : 'none';\n}\n\nfunction formatSkillSourceCounts(skills: DiscoveredSkill[]): string {\n const counts = new Map<SkillSource, number>();\n for (const skill of skills) counts.set(skill.source, (counts.get(skill.source) ?? 0) + 1);\n const parts = SKILL_SOURCE_ORDER.map((source) => `${source} ${counts.get(source) ?? 0}`).filter(\n (part) => !part.endsWith(' 0'),\n );\n return parts.length > 0 ? parts.join(', ') : 'none';\n}\n\nfunction formatSessionLines(input: DoctorReportInput): string[] {\n const lines = [\n `- current session file: ${input.currentSessionFile ?? 'not available'}`,\n `- current session id: ${input.currentSessionId ?? 'not available'}`,\n ];\n if (input.sessionError) lines.push(`- session manager: failed - ${input.sessionError}`);\n return lines;\n}\n\nfunction formatDiscovery(input: DoctorReportInput, deps: DoctorReportDeps): string[] {\n return [\n lineFromCheck('agents', () => {\n const agents = deps.discovery.discover(input.cwd, input.agentScope).agents;\n return `- agents: total ${agents.length} (${formatSourceCounts(agents)})`;\n }),\n lineFromCheck('skills', () => {\n const skills = deps.skills.discoverAvailableSkills(input.cwd);\n return `- skills: total ${skills.length} (${formatSkillSourceCounts(skills)})`;\n }),\n ];\n}\n\nfunction formatPermissionSystemSection(): string[] {\n const lines: string[] = [];\n const parentSession = (process.env[SUBAGENT_PARENT_SESSION_ENV] ?? '').trim();\n lines.push(\n parentSession\n ? `- parent session: set (${parentSession})`\n : '- parent session: not set - ask forwarding from a subprocess child will not reach a parent UI',\n );\n const isChild = process.env[SUBAGENT_CHILD_ENV] === '1';\n lines.push(`- subagent process: ${isChild ? `yes (${SUBAGENT_CHILD_ENV}=1)` : 'no'}`);\n return lines;\n}\n\nfunction formatIntercomSection(input: DoctorReportInput): string[] {\n return lineFromCheck('intercom bridge', () => {\n const diagnostic = diagnoseIntercomBridge({\n config: input.intercomBridgeConfig,\n context: input.context,\n orchestratorTarget: input.orchestratorTarget,\n });\n return [\n `- bridge: ${diagnostic.active ? 'active' : 'inactive'}${diagnostic.reason ? ` (${diagnostic.reason})` : ''}`,\n `- mode: ${diagnostic.mode}; context: ${input.context ?? 'unspecified'}`,\n `- orchestrator target: ${diagnostic.orchestratorTarget ?? 'not available'}`,\n `- intercom: ${diagnostic.intercomAvailable ? 'available' : 'unavailable'} (${diagnostic.extensionDir})`,\n ].join('\\n');\n }).split('\\n');\n}\n\nexport function buildDoctorReport(input: DoctorReportInput, deps: DoctorReportDeps): string {\n const lines = [\n 'Subagents doctor report',\n '',\n 'Runtime',\n `- cwd: ${input.cwd}`,\n '- async support: available (this package is async-only)',\n ...formatSessionLines(input),\n '',\n 'Filesystem',\n formatExistingDirectory('temp root', TEMP_ROOT_DIR),\n formatExistingDirectory('runs', currentRunsDir()),\n formatExistingDirectory('results', currentResultsDir()),\n '',\n 'Discovery',\n ...formatDiscovery(input, deps),\n '',\n 'Permission system',\n ...formatPermissionSystemSection(),\n '',\n 'Intercom bridge',\n ...formatIntercomSection(input),\n ];\n return lines.join('\\n');\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{SUBAGENT_CHILD_ENV as e,SUBAGENT_PARENT_SESSION_ENV as t,init_env as n}from"../../adapters/process/env.mjs";import{TEMP_ROOT_DIR as r,currentResultsDir as i,currentRunsDir as a,init_paths as o}from"../../shared/paths.mjs";import{diagnoseIntercomBridge as s}from"../../services/intercom/intercomBridge.mjs";import*as c from"node:fs";n(),o();function l(e){return e instanceof Error?`${e.name}: ${e.message}`:String(e)}function u(e,t){try{return t()}catch(t){return`- ${e}: failed - ${l(t)}`}}function d(e,t){try{if(!c.existsSync(t))return`- ${e}: missing (${t})`;if(!c.statSync(t).isDirectory())throw Error(`not a directory: ${t}`);return c.accessSync(t,c.constants.R_OK|c.constants.W_OK),`- ${e}: ok (${t})`}catch(n){return`- ${e}: failed (${t}) - ${l(n)}`}}const f=[`plugin`,`user`,`project`],p=[`project`,`project-settings`,`user`,`user-settings`,`extension`,`builtin`,`unknown`];function m(e){let t=new Map;for(let n of e)t.set(n.source,(t.get(n.source)??0)+1);let n=f.map(e=>`${e} ${t.get(e)??0}`).filter(e=>!e.endsWith(` 0`));return n.length>0?n.join(`, `):`none`}function h(e){let t=new Map;for(let n of e)t.set(n.source,(t.get(n.source)??0)+1);let n=p.map(e=>`${e} ${t.get(e)??0}`).filter(e=>!e.endsWith(` 0`));return n.length>0?n.join(`, `):`none`}function g(e){let t=[`- current session file: ${e.currentSessionFile??`not available`}`,`- current session id: ${e.currentSessionId??`not available`}`];return e.sessionError&&t.push(`- session manager: failed - ${e.sessionError}`),t}function _(e,t){return[u(`agents`,()=>{let n=t.discovery.discover(e.cwd,e.agentScope).agents;return`- agents: total ${n.length} (${m(n)})`}),u(`skills`,()=>{let n=t.skills.discoverAvailableSkills(e.cwd);return`- skills: total ${n.length} (${h(n)})`})]}function v(){let n=[],r=(process.env[t]??``).trim();n.push(r?`- parent session: set (${r})`:`- parent session: not set - ask forwarding from a subprocess child will not reach a parent UI`);let i=process.env[e]===`1`;return n.push(`- subagent process: ${i?`yes (${e}=1)`:`no`}`),n}function y(e){return u(`intercom bridge`,()=>{let t=s({config:e.intercomBridgeConfig,context:e.context,orchestratorTarget:e.orchestratorTarget});return[`- bridge: ${t.active?`active`:`inactive`}${t.reason?` (${t.reason})`:``}`,`- mode: ${t.mode}; context: ${e.context??`unspecified`}`,`- orchestrator target: ${t.orchestratorTarget??`not available`}`,`- intercom: ${t.intercomAvailable?`available`:`unavailable`} (${t.extensionDir})`].join(`
|
|
2
|
+
`)}).split(`
|
|
3
|
+
`)}function b(e,t){return[`Subagents doctor report`,``,`Runtime`,`- cwd: ${e.cwd}`,`- async support: available (this package is async-only)`,...g(e),``,`Filesystem`,d(`temp root`,r),d(`runs`,a()),d(`results`,i()),``,`Discovery`,..._(e,t),``,`Permission system`,...v(),``,`Intercom bridge`,...y(e)].join(`
|
|
4
|
+
`)}export{b as buildDoctorReport};
|
|
5
|
+
//# sourceMappingURL=doctor.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.cjs","names":["fs","SUBAGENT_PARENT_SESSION_ENV","SUBAGENT_CHILD_ENV","diagnoseIntercomBridge","TEMP_ROOT_DIR","currentRunsDir","currentResultsDir"],"sources":["../../src/slash/doctor.ts"],"sourcesContent":["/**\n * `/subagents-doctor`: a diagnostic report of this package's own runtime\n * state - filesystem roots, agent/skill discovery, the intercom bridge, and\n * the child-process signal env vars - for a user debugging \"why didn't my\n * subagent do X\".\n *\n * WHY THIS PORTS AS A SMALL PORT, NOT A DEFERRAL:\n * Read (not ported) the predecessor's foreground executor's `doctor` action\n * and `extension/doctor.ts`'s `buildDoctorReport` in full before deciding.\n * Every section it builds has a real doom-team equivalent: filesystem roots\n * (`shared/paths.ts`), agent/skill discovery (`AgentDiscoveryService`/\n * `SkillDiscoveryService`), the permission-system env signals\n * (`SUBAGENT_CHILD_ENV`/`SUBAGENT_PARENT_SESSION_ENV` - same wire names),\n * and the intercom bridge diagnostic (`diagnoseIntercomBridge`, already\n * ported). This package is also inherently async-only, so the predecessor's\n * \"async support: available/unavailable\" runtime check has nothing to\n * branch on here - it always reports available.\n *\n * WHAT IS DELIBERATELY LEFT OUT, AND WHY:\n * - Chain and prompt-workflow counts. The saved-work surface was REMOVED BY\n * DECISION (see `slashCommands.ts`'s header), so there is nothing to\n * count rather than something not yet built. Reporting a zero would imply\n * a feature that is simply absent\n * - The spawn-budget section entirely. `runs/shared/spawn-budget.ts` DOES\n * exist, but its own header says `maxSubagentSpawnsPerSession` is NOT\n * enforced by `SpawnPlanner` yet. Reporting a budget number nothing\n * enforces would be the same class of lie as parsing an inline-config\n * field and silently ignoring it - see `spawnRequestMapping.ts`\n *\n * AVOID:\n * - Reporting a spawn budget. There is no enforcement to report on yet\n */\n\nimport * as fs from 'node:fs';\n\nimport type { DiscoveredSkill, ISkillDiscoveryService, SkillSource } from '../agents/skills.ts';\nimport type { AgentScope, AgentSource, IAgentDiscoveryService } from '../agents/types.ts';\nimport { SUBAGENT_CHILD_ENV, SUBAGENT_PARENT_SESSION_ENV } from '../env.ts';\nimport { diagnoseIntercomBridge, type IntercomBridgeConfigInput } from '../intercom/intercomBridge.ts';\nimport { currentResultsDir, currentRunsDir, TEMP_ROOT_DIR } from '../shared/paths.ts';\n\nexport interface DoctorReportInput {\n cwd: string;\n agentScope: AgentScope;\n intercomBridgeConfig?: IntercomBridgeConfigInput;\n context?: 'fresh' | 'fork';\n orchestratorTarget?: string;\n currentSessionFile?: string | null;\n currentSessionId?: string | null;\n sessionError?: string;\n}\n\nexport interface DoctorReportDeps {\n discovery: IAgentDiscoveryService;\n skills: ISkillDiscoveryService;\n}\n\nfunction errorText(error: unknown): string {\n return error instanceof Error ? `${error.name}: ${error.message}` : String(error);\n}\n\nfunction lineFromCheck(label: string, check: () => string): string {\n try {\n return check();\n } catch (error) {\n return `- ${label}: failed - ${errorText(error)}`;\n }\n}\n\nfunction formatExistingDirectory(label: string, dirPath: string): string {\n try {\n if (!fs.existsSync(dirPath)) return `- ${label}: missing (${dirPath})`;\n const stats = fs.statSync(dirPath);\n if (!stats.isDirectory()) throw new Error(`not a directory: ${dirPath}`);\n fs.accessSync(dirPath, fs.constants.R_OK | fs.constants.W_OK);\n return `- ${label}: ok (${dirPath})`;\n } catch (error) {\n return `- ${label}: failed (${dirPath}) - ${errorText(error)}`;\n }\n}\n\nconst AGENT_SOURCE_ORDER: AgentSource[] = ['plugin', 'user', 'project'];\nconst SKILL_SOURCE_ORDER: SkillSource[] = [\n 'project',\n 'project-settings',\n 'user',\n 'user-settings',\n 'extension',\n 'builtin',\n 'unknown',\n];\n\nfunction formatSourceCounts(agents: Array<{ source: AgentSource }>): string {\n const counts = new Map<AgentSource, number>();\n for (const agent of agents) counts.set(agent.source, (counts.get(agent.source) ?? 0) + 1);\n const parts = AGENT_SOURCE_ORDER.map((source) => `${source} ${counts.get(source) ?? 0}`).filter(\n (part) => !part.endsWith(' 0'),\n );\n return parts.length > 0 ? parts.join(', ') : 'none';\n}\n\nfunction formatSkillSourceCounts(skills: DiscoveredSkill[]): string {\n const counts = new Map<SkillSource, number>();\n for (const skill of skills) counts.set(skill.source, (counts.get(skill.source) ?? 0) + 1);\n const parts = SKILL_SOURCE_ORDER.map((source) => `${source} ${counts.get(source) ?? 0}`).filter(\n (part) => !part.endsWith(' 0'),\n );\n return parts.length > 0 ? parts.join(', ') : 'none';\n}\n\nfunction formatSessionLines(input: DoctorReportInput): string[] {\n const lines = [\n `- current session file: ${input.currentSessionFile ?? 'not available'}`,\n `- current session id: ${input.currentSessionId ?? 'not available'}`,\n ];\n if (input.sessionError) lines.push(`- session manager: failed - ${input.sessionError}`);\n return lines;\n}\n\nfunction formatDiscovery(input: DoctorReportInput, deps: DoctorReportDeps): string[] {\n return [\n lineFromCheck('agents', () => {\n const agents = deps.discovery.discover(input.cwd, input.agentScope).agents;\n return `- agents: total ${agents.length} (${formatSourceCounts(agents)})`;\n }),\n lineFromCheck('skills', () => {\n const skills = deps.skills.discoverAvailableSkills(input.cwd);\n return `- skills: total ${skills.length} (${formatSkillSourceCounts(skills)})`;\n }),\n ];\n}\n\nfunction formatPermissionSystemSection(): string[] {\n const lines: string[] = [];\n const parentSession = (process.env[SUBAGENT_PARENT_SESSION_ENV] ?? '').trim();\n lines.push(\n parentSession\n ? `- parent session: set (${parentSession})`\n : '- parent session: not set - ask forwarding from a subprocess child will not reach a parent UI',\n );\n const isChild = process.env[SUBAGENT_CHILD_ENV] === '1';\n lines.push(`- subagent process: ${isChild ? `yes (${SUBAGENT_CHILD_ENV}=1)` : 'no'}`);\n return lines;\n}\n\nfunction formatIntercomSection(input: DoctorReportInput): string[] {\n return lineFromCheck('intercom bridge', () => {\n const diagnostic = diagnoseIntercomBridge({\n config: input.intercomBridgeConfig,\n context: input.context,\n orchestratorTarget: input.orchestratorTarget,\n });\n return [\n `- bridge: ${diagnostic.active ? 'active' : 'inactive'}${diagnostic.reason ? ` (${diagnostic.reason})` : ''}`,\n `- mode: ${diagnostic.mode}; context: ${input.context ?? 'unspecified'}`,\n `- orchestrator target: ${diagnostic.orchestratorTarget ?? 'not available'}`,\n `- intercom: ${diagnostic.intercomAvailable ? 'available' : 'unavailable'} (${diagnostic.extensionDir})`,\n ].join('\\n');\n }).split('\\n');\n}\n\nexport function buildDoctorReport(input: DoctorReportInput, deps: DoctorReportDeps): string {\n const lines = [\n 'Subagents doctor report',\n '',\n 'Runtime',\n `- cwd: ${input.cwd}`,\n '- async support: available (this package is async-only)',\n ...formatSessionLines(input),\n '',\n 'Filesystem',\n formatExistingDirectory('temp root', TEMP_ROOT_DIR),\n formatExistingDirectory('runs', currentRunsDir()),\n formatExistingDirectory('results', currentResultsDir()),\n '',\n 'Discovery',\n ...formatDiscovery(input, deps),\n '',\n 'Permission system',\n ...formatPermissionSystemSection(),\n '',\n 'Intercom bridge',\n ...formatIntercomSection(input),\n ];\n return lines.join('\\n');\n}\n"],"mappings":"6QAyDA,SAAS,EAAU,EAAwB,CACzC,OAAO,aAAiB,MAAQ,GAAG,EAAM,KAAK,IAAI,EAAM,UAAY,OAAO,EAAM,CAGnF,SAAS,EAAc,EAAe,EAA6B,CACjE,GAAI,CACF,OAAO,GAAO,OACP,EAAO,CACd,MAAO,KAAK,EAAM,aAAa,EAAU,EAAM,IAInD,SAAS,EAAwB,EAAe,EAAyB,CACvE,GAAI,CACF,GAAI,CAACA,EAAG,WAAW,EAAQ,CAAE,MAAO,KAAK,EAAM,aAAa,EAAQ,GAEpE,GAAI,CADUA,EAAG,SAAS,EAChB,CAAC,aAAa,CAAE,MAAU,MAAM,oBAAoB,IAAU,CAExE,OADA,EAAG,WAAW,EAASA,EAAG,UAAU,KAAOA,EAAG,UAAU,KAAK,CACtD,KAAK,EAAM,QAAQ,EAAQ,SAC3B,EAAO,CACd,MAAO,KAAK,EAAM,YAAY,EAAQ,MAAM,EAAU,EAAM,IAIhE,MAAM,EAAoC,CAAC,SAAU,OAAQ,UAAU,CACjE,EAAoC,CACxC,UACA,mBACA,OACA,gBACA,YACA,UACA,UACD,CAED,SAAS,EAAmB,EAAgD,CAC1E,IAAM,EAAS,IAAI,IACnB,IAAK,IAAM,KAAS,EAAQ,EAAO,IAAI,EAAM,QAAS,EAAO,IAAI,EAAM,OAAO,EAAI,GAAK,EAAE,CACzF,IAAM,EAAQ,EAAmB,IAAK,GAAW,GAAG,EAAO,GAAG,EAAO,IAAI,EAAO,EAAI,IAAI,CAAC,OACtF,GAAS,CAAC,EAAK,SAAS,KAAK,CAC/B,CACD,OAAO,EAAM,OAAS,EAAI,EAAM,KAAK,KAAK,CAAG,OAG/C,SAAS,EAAwB,EAAmC,CAClE,IAAM,EAAS,IAAI,IACnB,IAAK,IAAM,KAAS,EAAQ,EAAO,IAAI,EAAM,QAAS,EAAO,IAAI,EAAM,OAAO,EAAI,GAAK,EAAE,CACzF,IAAM,EAAQ,EAAmB,IAAK,GAAW,GAAG,EAAO,GAAG,EAAO,IAAI,EAAO,EAAI,IAAI,CAAC,OACtF,GAAS,CAAC,EAAK,SAAS,KAAK,CAC/B,CACD,OAAO,EAAM,OAAS,EAAI,EAAM,KAAK,KAAK,CAAG,OAG/C,SAAS,EAAmB,EAAoC,CAC9D,IAAM,EAAQ,CACZ,2BAA2B,EAAM,oBAAsB,kBACvD,yBAAyB,EAAM,kBAAoB,kBACpD,CAED,OADI,EAAM,cAAc,EAAM,KAAK,+BAA+B,EAAM,eAAe,CAChF,EAGT,SAAS,EAAgB,EAA0B,EAAkC,CACnF,MAAO,CACL,EAAc,aAAgB,CAC5B,IAAM,EAAS,EAAK,UAAU,SAAS,EAAM,IAAK,EAAM,WAAW,CAAC,OACpE,MAAO,mBAAmB,EAAO,OAAO,IAAI,EAAmB,EAAO,CAAC,IACvE,CACF,EAAc,aAAgB,CAC5B,IAAM,EAAS,EAAK,OAAO,wBAAwB,EAAM,IAAI,CAC7D,MAAO,mBAAmB,EAAO,OAAO,IAAI,EAAwB,EAAO,CAAC,IAC5E,CACH,CAGH,SAAS,GAA0C,CACjD,IAAM,EAAkB,EAAE,CACpB,GAAiB,QAAQ,IAAIC,EAAAA,8BAAgC,IAAI,MAAM,CAC7E,EAAM,KACJ,EACI,0BAA0B,EAAc,GACxC,gGACL,CACD,IAAM,EAAU,QAAQ,IAAIC,EAAAA,sBAAwB,IAEpD,OADA,EAAM,KAAK,uBAAuB,EAAU,QAAQA,EAAAA,mBAAmB,KAAO,OAAO,CAC9E,EAGT,SAAS,EAAsB,EAAoC,CACjE,OAAO,EAAc,sBAAyB,CAC5C,IAAM,EAAaC,EAAAA,uBAAuB,CACxC,OAAQ,EAAM,qBACd,QAAS,EAAM,QACf,mBAAoB,EAAM,mBAC3B,CAAC,CACF,MAAO,CACL,aAAa,EAAW,OAAS,SAAW,aAAa,EAAW,OAAS,KAAK,EAAW,OAAO,GAAK,KACzG,WAAW,EAAW,KAAK,aAAa,EAAM,SAAW,gBACzD,0BAA0B,EAAW,oBAAsB,kBAC3D,eAAe,EAAW,kBAAoB,YAAc,cAAc,IAAI,EAAW,aAAa,GACvG,CAAC,KAAK;EAAK,EACZ,CAAC,MAAM;EAAK,CAGhB,SAAgB,EAAkB,EAA0B,EAAgC,CAuB1F,MAAO,CArBL,0BACA,GACA,UACA,UAAU,EAAM,MAChB,0DACA,GAAG,EAAmB,EAAM,CAC5B,GACA,aACA,EAAwB,YAAaC,EAAAA,cAAc,CACnD,EAAwB,OAAQC,EAAAA,gBAAgB,CAAC,CACjD,EAAwB,UAAWC,EAAAA,mBAAmB,CAAC,CACvD,GACA,YACA,GAAG,EAAgB,EAAO,EAAK,CAC/B,GACA,oBACA,GAAG,GAA+B,CAClC,GACA,kBACA,GAAG,EAAsB,EAAM,CAErB,CAAC,KAAK;EAAK"}
|
|
1
|
+
{"version":3,"file":"doctor.mjs","names":[],"sources":["../../../src/commands/slash/doctor.ts"],"sourcesContent":["/**\n * `/subagents-doctor`: a diagnostic report of this package's own runtime\n * state - filesystem roots, agent/skill discovery, the intercom bridge, and\n * the child-process signal env vars - for a user debugging \"why didn't my\n * subagent do X\".\n *\n * WHY THIS PORTS AS A SMALL PORT, NOT A DEFERRAL:\n * Read (not ported) the predecessor's foreground executor's `doctor` action\n * and `extension/doctor.ts`'s `buildDoctorReport` in full before deciding.\n * Every section it builds has a real doom-team equivalent: filesystem roots\n * (`shared/paths.ts`), agent/skill discovery (`AgentDiscoveryService`/\n * `SkillDiscoveryService`), the permission-system env signals\n * (`SUBAGENT_CHILD_ENV`/`SUBAGENT_PARENT_SESSION_ENV` - same wire names),\n * and the intercom bridge diagnostic (`diagnoseIntercomBridge`, already\n * ported). This package is also inherently async-only, so the predecessor's\n * \"async support: available/unavailable\" runtime check has nothing to\n * branch on here - it always reports available.\n *\n * WHAT IS DELIBERATELY LEFT OUT, AND WHY:\n * - Chain and prompt-workflow counts. The saved-work surface was REMOVED BY\n * DECISION (see `slashCommands.ts`'s header), so there is nothing to\n * count rather than something not yet built. Reporting a zero would imply\n * a feature that is simply absent\n * - The spawn-budget section entirely. `runs/shared/spawn-budget.ts` DOES\n * exist, but its own header says `maxSubagentSpawnsPerSession` is NOT\n * enforced by `SpawnPlanner` yet. Reporting a budget number nothing\n * enforces would be the same class of lie as parsing an inline-config\n * field and silently ignoring it - see `spawnRequestMapping.ts`\n *\n * AVOID:\n * - Reporting a spawn budget. There is no enforcement to report on yet\n */\n\nimport * as fs from 'node:fs';\nimport { SUBAGENT_CHILD_ENV, SUBAGENT_PARENT_SESSION_ENV } from '../../adapters/process/env.ts';\nimport type { DiscoveredSkill, ISkillDiscoveryService, SkillSource } from '../../services/agents/skills.ts';\nimport type { AgentScope, AgentSource, IAgentDiscoveryService } from '../../services/agents/types.ts';\nimport { diagnoseIntercomBridge, type IntercomBridgeConfigInput } from '../../services/intercom/intercomBridge.ts';\nimport { currentResultsDir, currentRunsDir, TEMP_ROOT_DIR } from '../../shared/paths.ts';\n\nexport interface DoctorReportInput {\n cwd: string;\n agentScope: AgentScope;\n intercomBridgeConfig?: IntercomBridgeConfigInput;\n context?: 'fresh' | 'fork';\n orchestratorTarget?: string;\n currentSessionFile?: string | null;\n currentSessionId?: string | null;\n sessionError?: string;\n}\n\nexport interface DoctorReportDeps {\n discovery: IAgentDiscoveryService;\n skills: ISkillDiscoveryService;\n}\n\nfunction errorText(error: unknown): string {\n return error instanceof Error ? `${error.name}: ${error.message}` : String(error);\n}\n\nfunction lineFromCheck(label: string, check: () => string): string {\n try {\n return check();\n } catch (error) {\n return `- ${label}: failed - ${errorText(error)}`;\n }\n}\n\nfunction formatExistingDirectory(label: string, dirPath: string): string {\n try {\n if (!fs.existsSync(dirPath)) return `- ${label}: missing (${dirPath})`;\n const stats = fs.statSync(dirPath);\n if (!stats.isDirectory()) throw new Error(`not a directory: ${dirPath}`);\n fs.accessSync(dirPath, fs.constants.R_OK | fs.constants.W_OK);\n return `- ${label}: ok (${dirPath})`;\n } catch (error) {\n return `- ${label}: failed (${dirPath}) - ${errorText(error)}`;\n }\n}\n\nconst AGENT_SOURCE_ORDER: AgentSource[] = ['plugin', 'user', 'project'];\nconst SKILL_SOURCE_ORDER: SkillSource[] = [\n 'project',\n 'project-settings',\n 'user',\n 'user-settings',\n 'extension',\n 'builtin',\n 'unknown',\n];\n\nfunction formatSourceCounts(agents: Array<{ source: AgentSource }>): string {\n const counts = new Map<AgentSource, number>();\n for (const agent of agents) counts.set(agent.source, (counts.get(agent.source) ?? 0) + 1);\n const parts = AGENT_SOURCE_ORDER.map((source) => `${source} ${counts.get(source) ?? 0}`).filter(\n (part) => !part.endsWith(' 0'),\n );\n return parts.length > 0 ? parts.join(', ') : 'none';\n}\n\nfunction formatSkillSourceCounts(skills: DiscoveredSkill[]): string {\n const counts = new Map<SkillSource, number>();\n for (const skill of skills) counts.set(skill.source, (counts.get(skill.source) ?? 0) + 1);\n const parts = SKILL_SOURCE_ORDER.map((source) => `${source} ${counts.get(source) ?? 0}`).filter(\n (part) => !part.endsWith(' 0'),\n );\n return parts.length > 0 ? parts.join(', ') : 'none';\n}\n\nfunction formatSessionLines(input: DoctorReportInput): string[] {\n const lines = [\n `- current session file: ${input.currentSessionFile ?? 'not available'}`,\n `- current session id: ${input.currentSessionId ?? 'not available'}`,\n ];\n if (input.sessionError) lines.push(`- session manager: failed - ${input.sessionError}`);\n return lines;\n}\n\nfunction formatDiscovery(input: DoctorReportInput, deps: DoctorReportDeps): string[] {\n return [\n lineFromCheck('agents', () => {\n const agents = deps.discovery.discover(input.cwd, input.agentScope).agents;\n return `- agents: total ${agents.length} (${formatSourceCounts(agents)})`;\n }),\n lineFromCheck('skills', () => {\n const skills = deps.skills.discoverAvailableSkills(input.cwd);\n return `- skills: total ${skills.length} (${formatSkillSourceCounts(skills)})`;\n }),\n ];\n}\n\nfunction formatPermissionSystemSection(): string[] {\n const lines: string[] = [];\n const parentSession = (process.env[SUBAGENT_PARENT_SESSION_ENV] ?? '').trim();\n lines.push(\n parentSession\n ? `- parent session: set (${parentSession})`\n : '- parent session: not set - ask forwarding from a subprocess child will not reach a parent UI',\n );\n const isChild = process.env[SUBAGENT_CHILD_ENV] === '1';\n lines.push(`- subagent process: ${isChild ? `yes (${SUBAGENT_CHILD_ENV}=1)` : 'no'}`);\n return lines;\n}\n\nfunction formatIntercomSection(input: DoctorReportInput): string[] {\n return lineFromCheck('intercom bridge', () => {\n const diagnostic = diagnoseIntercomBridge({\n config: input.intercomBridgeConfig,\n context: input.context,\n orchestratorTarget: input.orchestratorTarget,\n });\n return [\n `- bridge: ${diagnostic.active ? 'active' : 'inactive'}${diagnostic.reason ? ` (${diagnostic.reason})` : ''}`,\n `- mode: ${diagnostic.mode}; context: ${input.context ?? 'unspecified'}`,\n `- orchestrator target: ${diagnostic.orchestratorTarget ?? 'not available'}`,\n `- intercom: ${diagnostic.intercomAvailable ? 'available' : 'unavailable'} (${diagnostic.extensionDir})`,\n ].join('\\n');\n }).split('\\n');\n}\n\nexport function buildDoctorReport(input: DoctorReportInput, deps: DoctorReportDeps): string {\n const lines = [\n 'Subagents doctor report',\n '',\n 'Runtime',\n `- cwd: ${input.cwd}`,\n '- async support: available (this package is async-only)',\n ...formatSessionLines(input),\n '',\n 'Filesystem',\n formatExistingDirectory('temp root', TEMP_ROOT_DIR),\n formatExistingDirectory('runs', currentRunsDir()),\n formatExistingDirectory('results', currentResultsDir()),\n '',\n 'Discovery',\n ...formatDiscovery(input, deps),\n '',\n 'Permission system',\n ...formatPermissionSystemSection(),\n '',\n 'Intercom bridge',\n ...formatIntercomSection(input),\n ];\n return lines.join('\\n');\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const e=require(
|
|
1
|
+
const e=require(`../../shared/modelResolution.cjs`),t=require(`../../services/runs/shared/modelFallback.cjs`),n=require(`../../extensions/spawnPlan.cjs`),r=require(`../../adapters/asyncJobTracker.cjs`);require(`../../services/runs/background/asyncJobTracker.cjs`);const i=require(`./chainExpression.cjs`),a=require(`./doctor.cjs`),o=require(`./spawnRequestMapping.cjs`),s=require(`./subagentLaunch.cjs`);function c(e,t){e.sendMessage({customType:`subagent-slash-result`,content:t,display:!0})}function l(e,t){e.hasUI&&e.ui.setStatus(`subagent-slash`,t)}function u(e,t){e.ui.notify(t,`error`)}function d(e,t){e.ui.notify(t,`info`)}function f(e){return e?e.attentionReason?`${e.status??`running`} - needs attention: ${e.attentionReason}`:e.activityState?`${e.status??`running`} - ${e.activityState}`:e.status??`running`:`starting…`}function p(e,t,n,i,a,o){s.watchTrackedRunUntilTerminal(n.scheduler,i,a,n=>{if(l(t,`${o} (${a}): ${f(n)}`),n?.status===void 0||!r.TERMINAL_ASYNC_JOB_STATES.has(n.status))return;l(t,void 0);let i=n.status===`complete`||n.status===`completed`?`completed`:n.status;c(e,n.error?`## Subagent ${i}\n\n${o} (${a})\n\n${n.error}`:`## Subagent ${i}\n\n${o} (${a})`)})}function m(e,t,n,r,i){let a=i.outcomes.filter(e=>e.runId),o=i.outcomes.filter(e=>!e.runId);if(a.length>0){c(e,`## Subagent started\n\n${a.map(e=>`${e.agent} (${e.runId})${e.warning?`\n Warning: ${e.warning}`:``}`).join(`, `)}`),l(t,`${a.length} run${a.length===1?``:`s`} started…`);for(let i of a)i.runId&&p(e,t,n,r,i.runId,i.agent)}o.length>0&&u(t,`Some subagents failed to start:\n${o.map(e=>`${e.agent}: ${e.error??`spawn failed`}`).join(`
|
|
2
2
|
`)}`)}function h(e,t){if(e.baseCwd)return e.baseCwd;u(t,`Subagent session cwd is not initialized yet`)}function g(e,t,n,r){return e.discovery.discover(t,`both`).agents.find(e=>e.name===n)?!0:(u(r,`Unknown agent: ${n}`),!1)}function _(e,t){if(t instanceof o.UnsupportedInlineConfigError||t instanceof i.SlashParseError){u(e,t.message);return}throw t}function v(e){let t=e.trim();if(t.includes(` -> `)){let e=t.split(` -> `).map(e=>e.trim()).filter(Boolean).map(e=>i.parseSingleTaskToken(e));return e.length===0?void 0:{steps:e,task:e.find(e=>e.task)?.task??``,perStep:!0}}let n=t.indexOf(` -- `);if(n===-1)return;let r=t.slice(0,n).trim(),a=t.slice(n+4).trim();if(!r||!a)return;let o=r.split(/\s+/).filter(Boolean).map(e=>i.parseSingleTaskToken(e));if(o.length!==0)return{steps:o,task:a,perStep:!1}}function y(l,f,p){l.registerCommand(`run`,{description:`Run a subagent in the background: /run agent[model=x] [task] [--fork]`,handler:async(r,a)=>{let c=p.tracker.forSession(a.sessionManager.getSessionId()),{args:d,fork:v}=i.extractForkFlag(r),y=d.trim();if(!y){u(a,`Usage: /run <agent> [task] [--fork]`);return}let b=y.indexOf(` `),{name:x,config:S}=i.parseAgentToken(b===-1?y:y.slice(0,b)),C=b===-1?``:y.slice(b+1).trim(),w=h(f,a);if(w&&g(p,w,x,a))try{let r=n.captureSessionForkSource(a.sessionManager,`settled`),i=t.normalizeParentModel(a.model),u=o.taskInputFromParsedStep({name:x,config:S,task:C},w,v?`fork`:void 0);m(l,a,p,c,await s.launchSingleSubagent(p.spawnPlanner,c,{agent:u.agent,task:u.task??``,cwd:u.cwd??w,agentScope:`both`,parentSessionId:a.sessionManager.getSessionId(),...u.model?{model:u.model}:{},...u.context?{context:u.context}:{},...r?{parentSessionFile:r.sessionFile,parentLeafId:r.leafId}:{},availableModels:e.authenticatedModelInfos(a.modelRegistry),...i?{parentModel:i}:{}},p.loadConfig()))}catch(e){_(a,e)}}}),l.registerCommand(`parallel`,{description:`Run agents in parallel: /parallel scout "task1" -> reviewer "task2" [--fork]`,handler:async(r,a)=>{let c=p.tracker.forSession(a.sessionManager.getSessionId()),{args:d,fork:y}=i.extractForkFlag(r),b=h(f,a);if(!b)return;let x=v(d);if(!x){u(a,`Usage: /parallel agent1 "task1" -> agent2 "task2"`);return}for(let e of x.steps)if(!g(p,b,e.name,a))return;if(!x.steps.some(e=>e.task)&&!x.task){u(a,`At least one step must have a task`);return}try{let r=n.captureSessionForkSource(a.sessionManager,`settled`),i=t.normalizeParentModel(a.model),u=x.steps.map(e=>o.taskInputFromParsedStep({name:e.name,config:e.config,task:e.task??x.task},b,y?`fork`:void 0));m(l,a,p,c,await s.launchParallelSubagents(p.spawnPlanner,c,{tasks:u,cwd:b,agentScope:`both`,parentSessionId:a.sessionManager.getSessionId(),...r?{parentSessionFile:r.sessionFile,parentLeafId:r.leafId}:{},availableModels:e.authenticatedModelInfos(a.modelRegistry),...i?{parentModel:i}:{}},p.loadConfig()))}catch(e){_(a,e)}}}),l.registerCommand(`subagents-doctor`,{description:`Show subagent diagnostics`,handler:async(e,t)=>{c(l,a.buildDoctorReport({cwd:t.cwd,agentScope:`both`},{discovery:p.discovery,skills:p.skills}))}}),l.registerCommand(`subagents-stop`,{description:`Stop a running subagent: /subagents-stop [run-id]`,handler:async(e,t)=>{let n=p.tracker.forSession(t.sessionManager.getSessionId()),i=e.trim();if(!i){c(l,b(n.list()));return}try{p.management.stop(r.resolveTrackedRunId(n,i)),d(t,`Stop requested for ${i}. The run reports its own final state once it acknowledges.`)}catch(e){u(t,e instanceof Error?e.message:`Could not stop '${i}'.`)}}})}function b(e){let t=e.filter(e=>e.status===`running`||e.status===`pending`);return t.length===0?`No running subagents to stop.`:[`Running subagents:`,...t.map(e=>`- ${e.runId}${e.status?` (${e.status})`:``}`),``,"Stop one with `/subagents-stop <run-id>`, or open `/subagents-fleet` to inspect and control them interactively."].join(`
|
|
3
3
|
`)}exports.registerSlashCommands=y;
|
|
4
4
|
//# sourceMappingURL=slashCommands.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slashCommands.cjs","names":["TERMINAL_ASYNC_JOB_STATES","UnsupportedInlineConfigError","SlashParseError","parseSingleTaskToken","extractForkFlag","parseAgentToken","captureSessionForkSource","normalizeParentModel","taskInputFromParsedStep","launchSingleSubagent","authenticatedModelInfos","launchParallelSubagents","buildDoctorReport","resolveTrackedRunId"],"sources":["../../../src/commands/slash/slashCommands.ts"],"sourcesContent":["/**\n * The core `/run`, `/chain`, `/parallel` slash commands. Replaces the\n * always-blocking predecessor with the async-only shape this port settled\n * on: a command launches a spawn, sends an initial status message, and\n * hands off to `watchTrackedRunUntilTerminal` (render-key gated, backed by\n * `PollScheduler`) to update the status bar and finalize the message once\n * the run reaches a terminal state - never by awaiting completion. See\n * `subagentLaunch.ts`'s module doc for the full reasoning.\n *\n * WHAT IS NOT HERE, AND WHY:\n * - `/run-chain`, `/prompt-workflow` and `/chain-prompts`: the whole SAVED\n * work surface - saved agent pipelines (`ChainConfig`, never ported) and\n * saved `.md` prompt templates (ported, then deleted). REMOVED BY\n * DECISION, not deferred: overly complicated for the use they were\n * getting. Do not re-add them because a reader notices the predecessor had\n * them. Ad-hoc chaining (`/chain scout \"x\" -> planner`) is a different\n * feature, lives in `chainExpression.ts`, and stays\n * - `/subagent-cost`: REMOVED BY DECISION. It reads usage/cost data\n * (`totalTokens`/`totalCost`) that nothing in this package's\n * runs/extensions surface tracks - a genuinely absent data source, and\n * building it would mean threading usage out of every child process\n * - `/subagents-check-profile`: removed at the source. Calls\n * `checkSubagentProfile`/`listSubagentProfiles`, which are referenced but\n * defined nowhere in the entire predecessor package - a live\n * `ReferenceError` that only shipped because that package sets\n * `noCheck: true`. Typecheck is on here; porting it faithfully would not\n * compile, and it was asked to be removed independently of that\n * - The `SUBAGENT_FLEET_COMMAND` registration and its `Ctrl+Alt+F` shortcut:\n * fleet view is its own piece, registered by whoever builds it\n * - Inline parallel groups within `/chain` (`(a | b)` syntax): the field\n * mapping for a group's own config exists (`spawnRequestMapping.ts`),\n * but wiring a group INTO a chain request is left for the same pass that\n * revisits per-task field support, so `/chain` reports a clear\n * not-yet-supported message rather than silently flattening a group\n * - `/subagents` (admin) command registration: a separate file, not yet\n * ported\n *\n * `/subagents-doctor` IS here, in `doctor.ts` - read (not ported) the\n * predecessor's foreground-executor `doctor` action before deciding, and it\n * turned out to be a small, mostly-mechanical port. See that module's own\n * doc for what it deliberately leaves out (chain counts, spawn-budget\n * reporting).\n *\n * AVOID:\n * - Awaiting a SINGLE/PARALLEL spawn for a result that will not exist yet.\n * See `subagentLaunch.ts`\n * - A private polling loop for a message's live status. Use\n * `watchTrackedRunUntilTerminal`\n */\n\nimport type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';\nimport type { ExtensionConfig } from '../../extensions/config.ts';\nimport type { IManagementActions } from '../../extensions/managementActions.ts';\nimport { captureSessionForkSource, type ISpawnPlanner, type SpawnPlanResult } from '../../extensions/spawnPlan.ts';\nimport type { ISkillDiscoveryService } from '../../services/agents/skills.ts';\nimport type { AgentScope, IAgentDiscoveryService } from '../../services/agents/types.ts';\nimport type {\n IAsyncJobTracker,\n ITrackedAsyncJobs,\n TrackedAsyncJob,\n} from '../../services/runs/background/asyncJobTracker.ts';\nimport { resolveTrackedRunId, TERMINAL_ASYNC_JOB_STATES } from '../../services/runs/background/asyncJobTracker.ts';\nimport { normalizeParentModel } from '../../services/runs/shared/modelFallback.ts';\nimport { authenticatedModelInfos } from '../../shared/modelResolution.ts';\nimport type { IPollScheduler } from '../../shared/pollScheduler.ts';\nimport {\n extractForkFlag,\n type ParsedStep,\n parseAgentToken,\n parseSingleTaskToken,\n SlashParseError,\n} from './chainExpression.ts';\nimport { buildDoctorReport } from './doctor.ts';\nimport { taskInputFromParsedStep, UnsupportedInlineConfigError } from './spawnRequestMapping.ts';\nimport { launchParallelSubagents, launchSingleSubagent, watchTrackedRunUntilTerminal } from './subagentLaunch.ts';\n\nexport interface SlashCommandDeps {\n spawnPlanner: ISpawnPlanner;\n skills: ISkillDiscoveryService;\n tracker: IAsyncJobTracker;\n scheduler: IPollScheduler;\n discovery: IAgentDiscoveryService;\n /**\n * Used by `/subagents-stop`. Preferred over calling `requestSlashRunStop`\n * directly because it resolves an id PREFIX through `RunIdResolver` and\n * raises a real error for an unknown or ambiguous one, instead of writing a\n * stop request into a directory for a run that does not exist.\n */\n management: IManagementActions;\n loadConfig: () => ExtensionConfig;\n}\n\nexport interface SlashCommandState {\n baseCwd: string | undefined;\n}\n\nconst SLASH_STATUS_KEY = 'subagent-slash';\nconst SLASH_RESULT_CUSTOM_TYPE = 'subagent-slash-result';\n\nfunction sendSlashText(pi: ExtensionAPI, text: string): void {\n pi.sendMessage({ customType: SLASH_RESULT_CUSTOM_TYPE, content: text, display: true });\n}\n\nfunction setSlashStatus(ctx: ExtensionContext, text: string | undefined): void {\n if (ctx.hasUI) ctx.ui.setStatus(SLASH_STATUS_KEY, text);\n}\n\nfunction notifyError(ctx: ExtensionContext, message: string): void {\n ctx.ui.notify(message, 'error');\n}\n\nfunction notifyInfo(ctx: ExtensionContext, message: string): void {\n ctx.ui.notify(message, 'info');\n}\n\nfunction statusTextFor(job: TrackedAsyncJob | undefined): string {\n if (!job) return 'starting…';\n if (job.attentionReason) return `${job.status ?? 'running'} - needs attention: ${job.attentionReason}`;\n if (job.activityState) return `${job.status ?? 'running'} - ${job.activityState}`;\n return job.status ?? 'running';\n}\n\n/**\n * Watches one launched run to a terminal state and finalizes its message.\n * Each launched run gets its own subscriber, so a PARALLEL launch's\n * siblings finalize independently rather than all waiting on the slowest.\n */\nfunction watchAndFinalize(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n deps: SlashCommandDeps,\n jobs: ITrackedAsyncJobs,\n runId: string,\n agent: string,\n): void {\n watchTrackedRunUntilTerminal(deps.scheduler, jobs, runId, (job) => {\n setSlashStatus(ctx, `${agent} (${runId}): ${statusTextFor(job)}`);\n if (job?.status === undefined || !TERMINAL_ASYNC_JOB_STATES.has(job.status)) return;\n setSlashStatus(ctx, undefined);\n const outcome = job.status === 'complete' || job.status === 'completed' ? 'completed' : job.status;\n sendSlashText(\n pi,\n job.error\n ? `## Subagent ${outcome}\\n\\n${agent} (${runId})\\n\\n${job.error}`\n : `## Subagent ${outcome}\\n\\n${agent} (${runId})`,\n );\n });\n}\n\nfunction reportSpawnResult(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n deps: SlashCommandDeps,\n jobs: ITrackedAsyncJobs,\n result: SpawnPlanResult,\n): void {\n const started = result.outcomes.filter((outcome) => outcome.runId);\n const failed = result.outcomes.filter((outcome) => !outcome.runId);\n if (started.length > 0) {\n const label = started\n .map(\n (outcome) => `${outcome.agent} (${outcome.runId})${outcome.warning ? `\\n Warning: ${outcome.warning}` : ''}`,\n )\n .join(', ');\n sendSlashText(pi, `## Subagent started\\n\\n${label}`);\n setSlashStatus(ctx, `${started.length} run${started.length === 1 ? '' : 's'} started…`);\n for (const outcome of started) {\n if (outcome.runId) watchAndFinalize(pi, ctx, deps, jobs, outcome.runId, outcome.agent);\n }\n }\n if (failed.length > 0) {\n const label = failed.map((outcome) => `${outcome.agent}: ${outcome.error ?? 'spawn failed'}`).join('\\n');\n notifyError(ctx, `Some subagents failed to start:\\n${label}`);\n }\n}\n\nfunction requireBaseCwd(state: SlashCommandState, ctx: ExtensionContext): string | undefined {\n if (state.baseCwd) return state.baseCwd;\n notifyError(ctx, 'Subagent session cwd is not initialized yet');\n return undefined;\n}\n\nfunction findAgentOrNotify(deps: SlashCommandDeps, baseCwd: string, name: string, ctx: ExtensionContext): boolean {\n const agents = deps.discovery.discover(baseCwd, 'both' satisfies AgentScope).agents;\n if (agents.find((agent) => agent.name === name)) return true;\n notifyError(ctx, `Unknown agent: ${name}`);\n return false;\n}\n\nfunction reportKnownErrorOrRethrow(ctx: ExtensionContext, error: unknown): void {\n if (error instanceof UnsupportedInlineConfigError || error instanceof SlashParseError) {\n notifyError(ctx, error.message);\n return;\n }\n throw error;\n}\n\n/**\n * Shared arg parsing for /chain (no inline group) and /parallel:\n * \"agent1 task1 -> agent2 task2\" or \"agent1 agent2 -- shared task\".\n */\nfunction parseAgentArgsFallback(input: string): { steps: ParsedStep[]; task: string; perStep: boolean } | undefined {\n const trimmed = input.trim();\n if (trimmed.includes(' -> ')) {\n const steps = trimmed\n .split(' -> ')\n .map((segment) => segment.trim())\n .filter(Boolean)\n .map((segment) => parseSingleTaskToken(segment));\n if (steps.length === 0) return undefined;\n return { steps, task: steps.find((step) => step.task)?.task ?? '', perStep: true };\n }\n const delimiterIndex = trimmed.indexOf(' -- ');\n if (delimiterIndex === -1) return undefined;\n const agentsPart = trimmed.slice(0, delimiterIndex).trim();\n const sharedTask = trimmed.slice(delimiterIndex + 4).trim();\n if (!agentsPart || !sharedTask) return undefined;\n const steps = agentsPart\n .split(/\\s+/)\n .filter(Boolean)\n .map((token) => parseSingleTaskToken(token));\n if (steps.length === 0) return undefined;\n return { steps, task: sharedTask, perStep: false };\n}\n\nexport function registerSlashCommands(pi: ExtensionAPI, state: SlashCommandState, deps: SlashCommandDeps): void {\n pi.registerCommand('run', {\n description: 'Run a subagent in the background: /run agent[model=x] [task] [--fork]',\n handler: async (args, ctx) => {\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId());\n const { args: cleanedArgs, fork } = extractForkFlag(args);\n const input = cleanedArgs.trim();\n if (!input) {\n notifyError(ctx, 'Usage: /run <agent> [task] [--fork]');\n return;\n }\n const firstSpace = input.indexOf(' ');\n const { name: agentName, config } = parseAgentToken(firstSpace === -1 ? input : input.slice(0, firstSpace));\n const task = firstSpace === -1 ? '' : input.slice(firstSpace + 1).trim();\n\n const baseCwd = requireBaseCwd(state, ctx);\n if (!baseCwd) return;\n if (!findAgentOrNotify(deps, baseCwd, agentName, ctx)) return;\n\n try {\n const parentForkSource = captureSessionForkSource(ctx.sessionManager, 'settled');\n const parentModel = normalizeParentModel(ctx.model);\n const taskInput = taskInputFromParsedStep(\n { name: agentName, config, task },\n baseCwd,\n fork ? 'fork' : undefined,\n );\n const result = await launchSingleSubagent(\n deps.spawnPlanner,\n jobs,\n {\n agent: taskInput.agent,\n task: taskInput.task ?? '',\n cwd: taskInput.cwd ?? baseCwd,\n agentScope: 'both',\n parentSessionId: ctx.sessionManager.getSessionId(),\n ...(taskInput.model ? { model: taskInput.model } : {}),\n ...(taskInput.context ? { context: taskInput.context } : {}),\n ...(parentForkSource\n ? { parentSessionFile: parentForkSource.sessionFile, parentLeafId: parentForkSource.leafId }\n : {}),\n availableModels: authenticatedModelInfos(ctx.modelRegistry),\n ...(parentModel ? { parentModel } : {}),\n },\n deps.loadConfig(),\n );\n reportSpawnResult(pi, ctx, deps, jobs, result);\n } catch (error) {\n reportKnownErrorOrRethrow(ctx, error);\n }\n },\n });\n\n pi.registerCommand('parallel', {\n description: 'Run agents in parallel: /parallel scout \"task1\" -> reviewer \"task2\" [--fork]',\n handler: async (args, ctx) => {\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId());\n const { args: cleanedArgs, fork } = extractForkFlag(args);\n const baseCwd = requireBaseCwd(state, ctx);\n if (!baseCwd) return;\n\n const parsed = parseAgentArgsFallback(cleanedArgs);\n if (!parsed) {\n notifyError(ctx, 'Usage: /parallel agent1 \"task1\" -> agent2 \"task2\"');\n return;\n }\n for (const step of parsed.steps) {\n if (!findAgentOrNotify(deps, baseCwd, step.name, ctx)) return;\n }\n if (!parsed.steps.some((step) => step.task) && !parsed.task) {\n notifyError(ctx, 'At least one step must have a task');\n return;\n }\n\n try {\n const parentForkSource = captureSessionForkSource(ctx.sessionManager, 'settled');\n const parentModel = normalizeParentModel(ctx.model);\n const tasks = parsed.steps.map((step) =>\n taskInputFromParsedStep(\n { name: step.name, config: step.config, task: step.task ?? parsed.task },\n baseCwd,\n fork ? 'fork' : undefined,\n ),\n );\n const result = await launchParallelSubagents(\n deps.spawnPlanner,\n jobs,\n {\n tasks,\n cwd: baseCwd,\n agentScope: 'both',\n parentSessionId: ctx.sessionManager.getSessionId(),\n ...(parentForkSource\n ? { parentSessionFile: parentForkSource.sessionFile, parentLeafId: parentForkSource.leafId }\n : {}),\n availableModels: authenticatedModelInfos(ctx.modelRegistry),\n ...(parentModel ? { parentModel } : {}),\n },\n deps.loadConfig(),\n );\n reportSpawnResult(pi, ctx, deps, jobs, result);\n } catch (error) {\n reportKnownErrorOrRethrow(ctx, error);\n }\n },\n });\n\n pi.registerCommand('subagents-doctor', {\n description: 'Show subagent diagnostics',\n handler: async (_args, ctx) => {\n sendSlashText(\n pi,\n buildDoctorReport({ cwd: ctx.cwd, agentScope: 'both' }, { discovery: deps.discovery, skills: deps.skills }),\n );\n },\n });\n\n pi.registerCommand('subagents-stop', {\n description: 'Stop a running subagent: /subagents-stop [run-id]',\n handler: async (args, ctx) => {\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId());\n const id = args.trim();\n if (!id) {\n sendSlashText(pi, stoppableRunsReport(jobs.list()));\n return;\n }\n try {\n deps.management.stop(resolveTrackedRunId(jobs, id));\n // Deliberately reports the REQUEST, not the outcome. Stop is\n // asynchronous in this package: the request is a file the child\n // claims on its next control-channel tick, so claiming \"stopped\"\n // here would assert something this process has not observed. The\n // run's own status is what confirms it, via /subagents-fleet or a\n // completion notification.\n notifyInfo(ctx, `Stop requested for ${id}. The run reports its own final state once it acknowledges.`);\n } catch (error) {\n // `ManagementActions.stop` throws only for an id that resolves to no\n // run or to more than one. Both are bad user input, not internal\n // faults, so they are notified rather than rethrown at the host - the\n // same treatment `reportKnownErrorOrRethrow` gives a parse error.\n notifyError(ctx, error instanceof Error ? error.message : `Could not stop '${id}'.`);\n }\n },\n });\n}\n\n/**\n * The no-argument `/subagents-stop` listing.\n *\n * The predecessor opened a TUI selector overlay here. This reports the same\n * information as text instead, for one reason worth stating rather than\n * hiding: a selector is a second, independent renderer of run state, and this\n * package already has one in `/subagents-fleet` that shows more (live status,\n * transcripts, and the full set of runtime controls including stop). Building\n * a second, weaker one would mean two things to keep in step. Passing an\n * explicit id stays the direct path, and the fleet overlay is the interactive\n * one.\n */\nfunction stoppableRunsReport(runs: readonly TrackedAsyncJob[]): string {\n const stoppable = runs.filter((run) => run.status === 'running' || run.status === 'pending');\n if (stoppable.length === 0) return 'No running subagents to stop.';\n const lines = stoppable.map((run) => `- ${run.runId}${run.status ? ` (${run.status})` : ''}`);\n return [\n 'Running subagents:',\n ...lines,\n '',\n 'Stop one with `/subagents-stop <run-id>`, or open `/subagents-fleet` to inspect and control them interactively.',\n ].join('\\n');\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{authenticatedModelInfos as e,init_modelResolution as t}from"
|
|
2
|
-
`)}`)}function E(e,t){if(e.baseCwd)return e.baseCwd;x(t,`Subagent session cwd is not initialized yet`)}function D(e,t,n,r){return e.discovery.discover(t,`both`).agents.find(e=>e.name===n)?!0:(x(r,`Unknown agent: ${n}`),!1)}function O(e,t){if(t instanceof m||t instanceof l){x(e,t.message);return}throw t}function k(e){let t=e.trim();if(t.includes(` -> `)){let e=t.split(` -> `).map(e=>e.trim()).filter(Boolean).map(e=>f(e));return e.length===0?void 0:{steps:e,task:e.find(e=>e.task)?.task??``,perStep:!0}}let n=t.indexOf(` -- `);if(n===-1)return;let r=t.slice(0,n).trim(),i=t.slice(n+4).trim();if(!r||!i)return;let a=r.split(/\s+/).filter(Boolean).map(e=>f(e));if(a.length!==0)return{steps:a,task:i,perStep:!1}}function A(t,n,a){t.registerCommand(`run`,{description:`Run a subagent in the background: /run agent[model=x] [task] [--fork]`,handler:async(o,s)=>{let c=a.tracker.forSession(s.sessionManager.getSessionId()),{args:l,fork:f}=u(o),p=l.trim();if(!p){x(s,`Usage: /run <agent> [task] [--fork]`);return}let m=p.indexOf(` `),{name:g,config:v}=d(m===-1?p:p.slice(0,m)),y=m===-1?``:p.slice(m+1).trim(),b=E(n,s);if(b&&D(a,b,g,s))try{let n=i(s.sessionManager,`settled`),o=r(s.model),l=h({name:g,config:v,task:y},b,f?`fork`:void 0);T(t,s,a,c,await _(a.spawnPlanner,c,{agent:l.agent,task:l.task??``,cwd:l.cwd??b,agentScope:`both`,parentSessionId:s.sessionManager.getSessionId(),...l.model?{model:l.model}:{},...l.context?{context:l.context}:{},...n?{parentSessionFile:n.sessionFile,parentLeafId:n.leafId}:{},availableModels:e(s.modelRegistry),...o?{parentModel:o}:{}},a.loadConfig()))}catch(e){O(s,e)}}}),t.registerCommand(`parallel`,{description:`Run agents in parallel: /parallel scout "task1" -> reviewer "task2" [--fork]`,handler:async(o,s)=>{let c=a.tracker.forSession(s.sessionManager.getSessionId()),{args:l,fork:d}=u(o),f=E(n,s);if(!f)return;let p=k(l);if(!p){x(s,`Usage: /parallel agent1 "task1" -> agent2 "task2"`);return}for(let e of p.steps)if(!D(a,f,e.name,s))return;if(!p.steps.some(e=>e.task)&&!p.task){x(s,`At least one step must have a task`);return}try{let n=i(s.sessionManager,`settled`),o=r(s.model),l=p.steps.map(e=>h({name:e.name,config:e.config,task:e.task??p.task},f,d?`fork`:void 0));T(t,s,a,c,await g(a.spawnPlanner,c,{tasks:l,cwd:f,agentScope:`both`,parentSessionId:s.sessionManager.getSessionId(),...n?{parentSessionFile:n.sessionFile,parentLeafId:n.leafId}:{},availableModels:e(s.modelRegistry),...o?{parentModel:o}:{}},a.loadConfig()))}catch(e){O(s,e)}}}),t.registerCommand(`subagents-doctor`,{description:`Show subagent diagnostics`,handler:async(e,n)=>{y(t,p({cwd:n.cwd,agentScope:`both`},{discovery:a.discovery,skills:a.skills}))}}),t.registerCommand(`subagents-stop`,{description:`Stop a running subagent: /subagents-stop [run-id]`,handler:async(e,n)=>{let r=a.tracker.forSession(n.sessionManager.getSessionId()),i=e.trim();if(!i){y(t,j(r.list()));return}try{a.management.stop(
|
|
1
|
+
import{authenticatedModelInfos as e,init_modelResolution as t}from"../../shared/modelResolution.mjs";import{init_modelFallback as n,normalizeParentModel as r}from"../../services/runs/shared/modelFallback.mjs";import{captureSessionForkSource as i,init_spawnPlan as a}from"../../extensions/spawnPlan.mjs";import{TERMINAL_ASYNC_JOB_STATES as o,resolveTrackedRunId as s}from"../../adapters/asyncJobTracker.mjs";import{init_asyncJobTracker as c}from"../../services/runs/background/asyncJobTracker.mjs";import{SlashParseError as l,extractForkFlag as u,parseAgentToken as d,parseSingleTaskToken as f}from"./chainExpression.mjs";import{buildDoctorReport as p}from"./doctor.mjs";import{UnsupportedInlineConfigError as m,taskInputFromParsedStep as h}from"./spawnRequestMapping.mjs";import{launchParallelSubagents as g,launchSingleSubagent as _,watchTrackedRunUntilTerminal as v}from"./subagentLaunch.mjs";a(),c(),n(),t();function y(e,t){e.sendMessage({customType:`subagent-slash-result`,content:t,display:!0})}function b(e,t){e.hasUI&&e.ui.setStatus(`subagent-slash`,t)}function x(e,t){e.ui.notify(t,`error`)}function S(e,t){e.ui.notify(t,`info`)}function C(e){return e?e.attentionReason?`${e.status??`running`} - needs attention: ${e.attentionReason}`:e.activityState?`${e.status??`running`} - ${e.activityState}`:e.status??`running`:`starting…`}function w(e,t,n,r,i,a){v(n.scheduler,r,i,n=>{if(b(t,`${a} (${i}): ${C(n)}`),n?.status===void 0||!o.has(n.status))return;b(t,void 0);let r=n.status===`complete`||n.status===`completed`?`completed`:n.status;y(e,n.error?`## Subagent ${r}\n\n${a} (${i})\n\n${n.error}`:`## Subagent ${r}\n\n${a} (${i})`)})}function T(e,t,n,r,i){let a=i.outcomes.filter(e=>e.runId),o=i.outcomes.filter(e=>!e.runId);if(a.length>0){y(e,`## Subagent started\n\n${a.map(e=>`${e.agent} (${e.runId})${e.warning?`\n Warning: ${e.warning}`:``}`).join(`, `)}`),b(t,`${a.length} run${a.length===1?``:`s`} started…`);for(let i of a)i.runId&&w(e,t,n,r,i.runId,i.agent)}o.length>0&&x(t,`Some subagents failed to start:\n${o.map(e=>`${e.agent}: ${e.error??`spawn failed`}`).join(`
|
|
2
|
+
`)}`)}function E(e,t){if(e.baseCwd)return e.baseCwd;x(t,`Subagent session cwd is not initialized yet`)}function D(e,t,n,r){return e.discovery.discover(t,`both`).agents.find(e=>e.name===n)?!0:(x(r,`Unknown agent: ${n}`),!1)}function O(e,t){if(t instanceof m||t instanceof l){x(e,t.message);return}throw t}function k(e){let t=e.trim();if(t.includes(` -> `)){let e=t.split(` -> `).map(e=>e.trim()).filter(Boolean).map(e=>f(e));return e.length===0?void 0:{steps:e,task:e.find(e=>e.task)?.task??``,perStep:!0}}let n=t.indexOf(` -- `);if(n===-1)return;let r=t.slice(0,n).trim(),i=t.slice(n+4).trim();if(!r||!i)return;let a=r.split(/\s+/).filter(Boolean).map(e=>f(e));if(a.length!==0)return{steps:a,task:i,perStep:!1}}function A(t,n,a){t.registerCommand(`run`,{description:`Run a subagent in the background: /run agent[model=x] [task] [--fork]`,handler:async(o,s)=>{let c=a.tracker.forSession(s.sessionManager.getSessionId()),{args:l,fork:f}=u(o),p=l.trim();if(!p){x(s,`Usage: /run <agent> [task] [--fork]`);return}let m=p.indexOf(` `),{name:g,config:v}=d(m===-1?p:p.slice(0,m)),y=m===-1?``:p.slice(m+1).trim(),b=E(n,s);if(b&&D(a,b,g,s))try{let n=i(s.sessionManager,`settled`),o=r(s.model),l=h({name:g,config:v,task:y},b,f?`fork`:void 0);T(t,s,a,c,await _(a.spawnPlanner,c,{agent:l.agent,task:l.task??``,cwd:l.cwd??b,agentScope:`both`,parentSessionId:s.sessionManager.getSessionId(),...l.model?{model:l.model}:{},...l.context?{context:l.context}:{},...n?{parentSessionFile:n.sessionFile,parentLeafId:n.leafId}:{},availableModels:e(s.modelRegistry),...o?{parentModel:o}:{}},a.loadConfig()))}catch(e){O(s,e)}}}),t.registerCommand(`parallel`,{description:`Run agents in parallel: /parallel scout "task1" -> reviewer "task2" [--fork]`,handler:async(o,s)=>{let c=a.tracker.forSession(s.sessionManager.getSessionId()),{args:l,fork:d}=u(o),f=E(n,s);if(!f)return;let p=k(l);if(!p){x(s,`Usage: /parallel agent1 "task1" -> agent2 "task2"`);return}for(let e of p.steps)if(!D(a,f,e.name,s))return;if(!p.steps.some(e=>e.task)&&!p.task){x(s,`At least one step must have a task`);return}try{let n=i(s.sessionManager,`settled`),o=r(s.model),l=p.steps.map(e=>h({name:e.name,config:e.config,task:e.task??p.task},f,d?`fork`:void 0));T(t,s,a,c,await g(a.spawnPlanner,c,{tasks:l,cwd:f,agentScope:`both`,parentSessionId:s.sessionManager.getSessionId(),...n?{parentSessionFile:n.sessionFile,parentLeafId:n.leafId}:{},availableModels:e(s.modelRegistry),...o?{parentModel:o}:{}},a.loadConfig()))}catch(e){O(s,e)}}}),t.registerCommand(`subagents-doctor`,{description:`Show subagent diagnostics`,handler:async(e,n)=>{y(t,p({cwd:n.cwd,agentScope:`both`},{discovery:a.discovery,skills:a.skills}))}}),t.registerCommand(`subagents-stop`,{description:`Stop a running subagent: /subagents-stop [run-id]`,handler:async(e,n)=>{let r=a.tracker.forSession(n.sessionManager.getSessionId()),i=e.trim();if(!i){y(t,j(r.list()));return}try{a.management.stop(s(r,i)),S(n,`Stop requested for ${i}. The run reports its own final state once it acknowledges.`)}catch(e){x(n,e instanceof Error?e.message:`Could not stop '${i}'.`)}}})}function j(e){let t=e.filter(e=>e.status===`running`||e.status===`pending`);return t.length===0?`No running subagents to stop.`:[`Running subagents:`,...t.map(e=>`- ${e.runId}${e.status?` (${e.status})`:``}`),``,"Stop one with `/subagents-stop <run-id>`, or open `/subagents-fleet` to inspect and control them interactively."].join(`
|
|
3
3
|
`)}export{A as registerSlashCommands};
|
|
4
4
|
//# sourceMappingURL=slashCommands.mjs.map
|