@agimon-ai/doompi-team 0.0.1-alpha.32 → 0.0.1-alpha.33
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.
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../../agents/discovery.cjs"),t=require("../../asyncJobTracker.cjs"),n=require("./agentCatalog.cjs"),r=require("./agentResourceProjection.cjs"),i=require("./fleet.cjs"),a=require("./fleetStatus.cjs"),o=`subagents-fleet`,s=`subagents-list`,c=`@agimon-ai/doompi-team`,l={key:`a`,label:`agents`,detail:`subagent resources and runs`,order:15},u=`requested`;function d(e){let t=e.registerLeader({source:c,bindings:[{id:`subagents.fleet`,path:[l,{key:`r`,label:`runs`,detail:`
|
|
1
|
+
const e=require("../../agents/discovery.cjs"),t=require("../../asyncJobTracker.cjs"),n=require("./agentCatalog.cjs"),r=require("./agentResourceProjection.cjs"),i=require("./fleet.cjs"),a=require("./fleetStatus.cjs"),o=`subagents-fleet`,s=`subagents-list`,c=`@agimon-ai/doompi-team`,l={key:`a`,label:`agents`,detail:`subagent resources and runs`,order:15},u=`requested`;function d(e){let t=e.registerLeader({source:c,bindings:[{id:`subagents.fleet`,path:[l,{key:`r`,label:`runs`,detail:`runs in this session`}],command:{name:o}},{id:`subagents.list`,path:[l,{key:`l`,label:`list`,detail:`agents available here`}],command:{name:s}}]});return()=>t.dispose()}function f(t,i){t.registerCommand(s,{description:`Browse agents available from this session cwd and inspect their projected launch resources`,handler:async(t,a)=>{let o=i.discovery.discover(a.cwd,`both`).agents,s=e.resolveActiveTeamPackageConfig(),c=i.skills.discoverAvailableSkills(a.cwd),l=r.buildAgentCatalogEntries(o,{cwd:a.cwd,skills:{resolveSkillsWithFallback:(...e)=>i.skills.resolveSkillsWithFallback(...e),discoverAvailableSkills:()=>c},capabilityCeiling:i.policies.resolve(),...s?.config.excludeTools?{excludeTools:s.config.excludeTools,exclusionSource:s.path}:{},environment:{...process.env}});await n.openAgentCatalog(a,l)}})}function p(e,n){return async r=>{let i=t.resolveTrackedRunId(n,r.id);if(r.action===`interrupt`)return e.interrupt(i,r.message),{status:u};if(r.action===`stop`)return e.stop(i,r.message),{status:u};if(r.action===`steer`){let t=await e.steer(i,r.message??``);return{status:t.state,detail:t.message}}throw Error(`Resume is not supported by the current subagent runtime.`)}}function m(e,t,n){let r,i=!1,o=0,s=t.registerFooter({source:c,id:`agent-count`,order:20}),l=(e=!1)=>{if(!r)return!1;let t=a.agentFleetStatus(r.jobs,o),n=t?.fingerprint;return!e&&n===r.fingerprint?!1:(s.update(t?.footer),r.ctx.hasUI&&r.ctx.ui.setStatus(a.FLEET_STATUS_KEY,t?.text),r.fingerprint=n,!0)},u=n.scheduler.register({id:`doom-team-agent-status`,intervalMs:250,run:()=>(o=(o+1)%a.AGENT_PULSE_FRAMES.length,l())});return e.on(`session_start`,(e,t)=>{i||(r={ctx:t,jobs:n.tracker.forSession(t.sessionManager.getSessionId()),fingerprint:void 0},l(!0))}),()=>{i||(i=!0,u(),s.dispose(),r?.ctx.hasUI&&r.ctx.ui.setStatus(a.FLEET_STATUS_KEY,void 0),r=void 0)}}function h(e,t){e.registerCommand(o,{description:`Open the live agent runs overlay: inspect current-session runs and apply runtime controls`,handler:async(e,n)=>{let r=t.tracker.forSession(n.sessionManager.getSessionId()),a=t.dispatchAction??(t.management?p(t.management,r):void 0);await i.openSubagentFleet(n,t.scheduler,r,{dispatchAction:a})}})}exports.SUBAGENT_FLEET_COMMAND=o,exports.SUBAGENT_LEADER_SOURCE=c,exports.SUBAGENT_LIST_COMMAND=s,exports.createFleetActionDispatcher=p,exports.registerAgentListCommand=f,exports.registerAgentStatus=m,exports.registerFleetCommand=h,exports.registerSubagentLeaderContribution=d;
|
|
2
2
|
//# sourceMappingURL=register.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.cjs","names":["resolveActiveTeamPackageConfig","buildAgentCatalogEntries","openAgentCatalog","resolveTrackedRunId","agentFleetStatus","FLEET_STATUS_KEY","AGENT_PULSE_FRAMES","openSubagentFleet"],"sources":["../../../../../src/adapters/pi/tui/register.ts"],"sourcesContent":["/**\n * Wires the agent catalog, run fleet, and compact footer status into the host.\n *\n * DESIGN PATTERNS:\n * - Wiring only: display decisions live in `agentCatalog.ts`, `fleet.ts`, and\n * `fleetStatus.ts`; this file connects those surfaces to host services.\n */\n\nimport type { DoomUiHubService } from '@agimon-ai/doompi-extension-contracts/ui-hub';\nimport type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';\nimport type { ManagementActionsContract } from '../extensions/managementActions';\nimport type { SubagentCapabilityPolicyStore } from '../../../schemas/team/capabilityCeiling';\nimport { resolveActiveTeamPackageConfig } from '../../agents/discovery';\nimport type { SkillDiscoveryContract } from '../../agents/skills';\nimport type { AgentDiscoveryContract } from '../../agents/types';\nimport {\n type AsyncJobTrackerContract,\n type TrackedAsyncJobsContract,\n resolveTrackedRunId,\n} from '../../asyncJobTracker';\nimport type { PollSchedulerContract } from '../../pollScheduler';\nimport { openAgentCatalog } from './agentCatalog';\nimport { buildAgentCatalogEntries } from './agentResourceProjection';\nimport { type FleetActionDispatcher, openSubagentFleet } from './fleet';\nimport { AGENT_PULSE_FRAMES, agentFleetStatus, FLEET_STATUS_KEY } from './fleetStatus';\n\nexport const SUBAGENT_FLEET_COMMAND = 'subagents-fleet';\nexport const SUBAGENT_LIST_COMMAND = 'subagents-list';\nexport const SUBAGENT_LEADER_SOURCE = '@agimon-ai/doompi-team';\nconst SUBAGENT_LEADER_ORDER = 15;\nconst SUBAGENT_LEADER_SEGMENT = {\n key: 'a',\n label: 'agents',\n detail: 'subagent resources and runs',\n order: SUBAGENT_LEADER_ORDER,\n} as const;\nconst AGENT_FOOTER_ORDER = 20;\nconst AGENT_STATUS_POLL_INTERVAL_MS = 250;\nconst REQUESTED_STATUS = 'requested';\n\n/** Publishes the nested SPC a menu for available agents and current-session runs. */\nexport function registerSubagentLeaderContribution(hub: DoomUiHubService): () => void {\n const contribution = hub.registerLeader({\n source: SUBAGENT_LEADER_SOURCE,\n bindings: [\n {\n id: 'subagents.fleet',\n path: [SUBAGENT_LEADER_SEGMENT, { key: 'r', label: 'runs', detail: 'current-session runs' }],\n command: { name: SUBAGENT_FLEET_COMMAND },\n },\n {\n id: 'subagents.list',\n path: [SUBAGENT_LEADER_SEGMENT, { key: 'l', label: 'list', detail: 'available agents' }],\n command: { name: SUBAGENT_LIST_COMMAND },\n },\n ],\n });\n return () => contribution.dispose();\n}\n\nexport interface RegisterAgentListCommandDeps {\n discovery: AgentDiscoveryContract;\n skills: SkillDiscoveryContract;\n policies: SubagentCapabilityPolicyStore;\n}\n\nexport function registerAgentListCommand(pi: ExtensionAPI, deps: RegisterAgentListCommandDeps): void {\n pi.registerCommand(SUBAGENT_LIST_COMMAND, {\n description: 'Browse agents available from this session cwd and inspect their projected launch resources',\n handler: async (_args: string, ctx: ExtensionContext) => {\n const agents = deps.discovery.discover(ctx.cwd, 'both').agents;\n const teamPackage = resolveActiveTeamPackageConfig();\n const availableSkills = deps.skills.discoverAvailableSkills(ctx.cwd);\n const skillSnapshot = {\n resolveSkillsWithFallback: (\n ...args: Parameters<SkillDiscoveryContract['resolveSkillsWithFallback']>\n ): ReturnType<SkillDiscoveryContract['resolveSkillsWithFallback']> =>\n deps.skills.resolveSkillsWithFallback(...args),\n discoverAvailableSkills: (): ReturnType<SkillDiscoveryContract['discoverAvailableSkills']> => availableSkills,\n };\n const entries = buildAgentCatalogEntries(agents, {\n cwd: ctx.cwd,\n skills: skillSnapshot,\n capabilityCeiling: deps.policies.resolve(),\n ...(teamPackage?.config.excludeTools\n ? { excludeTools: teamPackage.config.excludeTools, exclusionSource: teamPackage.path }\n : {}),\n environment: { ...process.env },\n });\n await openAgentCatalog(ctx, entries);\n },\n });\n}\n\nexport interface RegisterFleetCommandDeps {\n scheduler: PollSchedulerContract;\n tracker: AsyncJobTrackerContract;\n /** Optional: absent until a composition root wires runtime controls to a real dispatcher. */\n dispatchAction?: FleetActionDispatcher;\n /** Builds context-scoped controls when a static test dispatcher is not supplied. */\n management?: ManagementActionsContract;\n}\n\nexport function createFleetActionDispatcher(\n management: ManagementActionsContract,\n jobs: TrackedAsyncJobsContract,\n): FleetActionDispatcher {\n return async (request) => {\n const runId = resolveTrackedRunId(jobs, request.id);\n if (request.action === 'interrupt') {\n management.interrupt(runId, request.message);\n return { status: REQUESTED_STATUS };\n }\n if (request.action === 'stop') {\n management.stop(runId, request.message);\n return { status: REQUESTED_STATUS };\n }\n if (request.action === 'steer') {\n const result = await management.steer(runId, request.message ?? '');\n return { status: result.state, detail: result.message };\n }\n throw new Error('Resume is not supported by the current subagent runtime.');\n };\n}\n\nexport function registerAgentStatus(\n pi: ExtensionAPI,\n hub: DoomUiHubService,\n deps: RegisterFleetCommandDeps,\n): () => void {\n let current: { ctx: ExtensionContext; jobs: TrackedAsyncJobsContract; fingerprint: string | undefined } | undefined;\n let disposed = false;\n let frame = 0;\n const footerContribution = hub.registerFooter({\n source: SUBAGENT_LEADER_SOURCE,\n id: 'agent-count',\n order: AGENT_FOOTER_ORDER,\n });\n\n const publish = (force = false): boolean => {\n if (!current) return false;\n const status = agentFleetStatus(current.jobs, frame);\n const fingerprint = status?.fingerprint;\n if (!force && fingerprint === current.fingerprint) return false;\n footerContribution.update(status?.footer);\n if (current.ctx.hasUI) current.ctx.ui.setStatus(FLEET_STATUS_KEY, status?.text);\n current.fingerprint = fingerprint;\n return true;\n };\n\n const unregisterPoll = deps.scheduler.register({\n id: 'doom-team-agent-status',\n intervalMs: AGENT_STATUS_POLL_INTERVAL_MS,\n run: () => {\n frame = (frame + 1) % AGENT_PULSE_FRAMES.length;\n return publish();\n },\n });\n\n pi.on('session_start', (_event, ctx: ExtensionContext) => {\n if (disposed) return;\n current = {\n ctx,\n jobs: deps.tracker.forSession(ctx.sessionManager.getSessionId()),\n fingerprint: undefined,\n };\n publish(true);\n });\n\n return () => {\n if (disposed) return;\n disposed = true;\n unregisterPoll();\n footerContribution.dispose();\n if (current?.ctx.hasUI) current.ctx.ui.setStatus(FLEET_STATUS_KEY, undefined);\n current = undefined;\n };\n}\n\nexport function registerFleetCommand(pi: ExtensionAPI, deps: RegisterFleetCommandDeps): void {\n pi.registerCommand(SUBAGENT_FLEET_COMMAND, {\n description: 'Open the live agent runs overlay: inspect current-session runs and apply runtime controls',\n handler: async (_args: string, ctx: ExtensionContext) => {\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId());\n const dispatchAction =\n deps.dispatchAction ?? (deps.management ? createFleetActionDispatcher(deps.management, jobs) : undefined);\n await openSubagentFleet(ctx, deps.scheduler, jobs, { dispatchAction });\n },\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"register.cjs","names":["resolveActiveTeamPackageConfig","buildAgentCatalogEntries","openAgentCatalog","resolveTrackedRunId","agentFleetStatus","FLEET_STATUS_KEY","AGENT_PULSE_FRAMES","openSubagentFleet"],"sources":["../../../../../src/adapters/pi/tui/register.ts"],"sourcesContent":["/**\n * Wires the agent catalog, run fleet, and compact footer status into the host.\n *\n * DESIGN PATTERNS:\n * - Wiring only: display decisions live in `agentCatalog.ts`, `fleet.ts`, and\n * `fleetStatus.ts`; this file connects those surfaces to host services.\n */\n\nimport type { DoomUiHubService } from '@agimon-ai/doompi-extension-contracts/ui-hub';\nimport type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';\nimport type { ManagementActionsContract } from '../extensions/managementActions';\nimport type { SubagentCapabilityPolicyStore } from '../../../schemas/team/capabilityCeiling';\nimport { resolveActiveTeamPackageConfig } from '../../agents/discovery';\nimport type { SkillDiscoveryContract } from '../../agents/skills';\nimport type { AgentDiscoveryContract } from '../../agents/types';\nimport {\n type AsyncJobTrackerContract,\n type TrackedAsyncJobsContract,\n resolveTrackedRunId,\n} from '../../asyncJobTracker';\nimport type { PollSchedulerContract } from '../../pollScheduler';\nimport { openAgentCatalog } from './agentCatalog';\nimport { buildAgentCatalogEntries } from './agentResourceProjection';\nimport { type FleetActionDispatcher, openSubagentFleet } from './fleet';\nimport { AGENT_PULSE_FRAMES, agentFleetStatus, FLEET_STATUS_KEY } from './fleetStatus';\n\nexport const SUBAGENT_FLEET_COMMAND = 'subagents-fleet';\nexport const SUBAGENT_LIST_COMMAND = 'subagents-list';\nexport const SUBAGENT_LEADER_SOURCE = '@agimon-ai/doompi-team';\nconst SUBAGENT_LEADER_ORDER = 15;\nconst SUBAGENT_LEADER_SEGMENT = {\n key: 'a',\n label: 'agents',\n detail: 'subagent resources and runs',\n order: SUBAGENT_LEADER_ORDER,\n} as const;\nconst AGENT_FOOTER_ORDER = 20;\nconst AGENT_STATUS_POLL_INTERVAL_MS = 250;\nconst REQUESTED_STATUS = 'requested';\n\n/** Publishes the nested SPC a menu for available agents and current-session runs. */\nexport function registerSubagentLeaderContribution(hub: DoomUiHubService): () => void {\n const contribution = hub.registerLeader({\n source: SUBAGENT_LEADER_SOURCE,\n bindings: [\n {\n id: 'subagents.fleet',\n path: [SUBAGENT_LEADER_SEGMENT, { key: 'r', label: 'runs', detail: 'runs in this session' }],\n command: { name: SUBAGENT_FLEET_COMMAND },\n },\n {\n id: 'subagents.list',\n path: [SUBAGENT_LEADER_SEGMENT, { key: 'l', label: 'list', detail: 'agents available here' }],\n command: { name: SUBAGENT_LIST_COMMAND },\n },\n ],\n });\n return () => contribution.dispose();\n}\n\nexport interface RegisterAgentListCommandDeps {\n discovery: AgentDiscoveryContract;\n skills: SkillDiscoveryContract;\n policies: SubagentCapabilityPolicyStore;\n}\n\nexport function registerAgentListCommand(pi: ExtensionAPI, deps: RegisterAgentListCommandDeps): void {\n pi.registerCommand(SUBAGENT_LIST_COMMAND, {\n description: 'Browse agents available from this session cwd and inspect their projected launch resources',\n handler: async (_args: string, ctx: ExtensionContext) => {\n const agents = deps.discovery.discover(ctx.cwd, 'both').agents;\n const teamPackage = resolveActiveTeamPackageConfig();\n const availableSkills = deps.skills.discoverAvailableSkills(ctx.cwd);\n const skillSnapshot = {\n resolveSkillsWithFallback: (\n ...args: Parameters<SkillDiscoveryContract['resolveSkillsWithFallback']>\n ): ReturnType<SkillDiscoveryContract['resolveSkillsWithFallback']> =>\n deps.skills.resolveSkillsWithFallback(...args),\n discoverAvailableSkills: (): ReturnType<SkillDiscoveryContract['discoverAvailableSkills']> => availableSkills,\n };\n const entries = buildAgentCatalogEntries(agents, {\n cwd: ctx.cwd,\n skills: skillSnapshot,\n capabilityCeiling: deps.policies.resolve(),\n ...(teamPackage?.config.excludeTools\n ? { excludeTools: teamPackage.config.excludeTools, exclusionSource: teamPackage.path }\n : {}),\n environment: { ...process.env },\n });\n await openAgentCatalog(ctx, entries);\n },\n });\n}\n\nexport interface RegisterFleetCommandDeps {\n scheduler: PollSchedulerContract;\n tracker: AsyncJobTrackerContract;\n /** Optional: absent until a composition root wires runtime controls to a real dispatcher. */\n dispatchAction?: FleetActionDispatcher;\n /** Builds context-scoped controls when a static test dispatcher is not supplied. */\n management?: ManagementActionsContract;\n}\n\nexport function createFleetActionDispatcher(\n management: ManagementActionsContract,\n jobs: TrackedAsyncJobsContract,\n): FleetActionDispatcher {\n return async (request) => {\n const runId = resolveTrackedRunId(jobs, request.id);\n if (request.action === 'interrupt') {\n management.interrupt(runId, request.message);\n return { status: REQUESTED_STATUS };\n }\n if (request.action === 'stop') {\n management.stop(runId, request.message);\n return { status: REQUESTED_STATUS };\n }\n if (request.action === 'steer') {\n const result = await management.steer(runId, request.message ?? '');\n return { status: result.state, detail: result.message };\n }\n throw new Error('Resume is not supported by the current subagent runtime.');\n };\n}\n\nexport function registerAgentStatus(\n pi: ExtensionAPI,\n hub: DoomUiHubService,\n deps: RegisterFleetCommandDeps,\n): () => void {\n let current: { ctx: ExtensionContext; jobs: TrackedAsyncJobsContract; fingerprint: string | undefined } | undefined;\n let disposed = false;\n let frame = 0;\n const footerContribution = hub.registerFooter({\n source: SUBAGENT_LEADER_SOURCE,\n id: 'agent-count',\n order: AGENT_FOOTER_ORDER,\n });\n\n const publish = (force = false): boolean => {\n if (!current) return false;\n const status = agentFleetStatus(current.jobs, frame);\n const fingerprint = status?.fingerprint;\n if (!force && fingerprint === current.fingerprint) return false;\n footerContribution.update(status?.footer);\n if (current.ctx.hasUI) current.ctx.ui.setStatus(FLEET_STATUS_KEY, status?.text);\n current.fingerprint = fingerprint;\n return true;\n };\n\n const unregisterPoll = deps.scheduler.register({\n id: 'doom-team-agent-status',\n intervalMs: AGENT_STATUS_POLL_INTERVAL_MS,\n run: () => {\n frame = (frame + 1) % AGENT_PULSE_FRAMES.length;\n return publish();\n },\n });\n\n pi.on('session_start', (_event, ctx: ExtensionContext) => {\n if (disposed) return;\n current = {\n ctx,\n jobs: deps.tracker.forSession(ctx.sessionManager.getSessionId()),\n fingerprint: undefined,\n };\n publish(true);\n });\n\n return () => {\n if (disposed) return;\n disposed = true;\n unregisterPoll();\n footerContribution.dispose();\n if (current?.ctx.hasUI) current.ctx.ui.setStatus(FLEET_STATUS_KEY, undefined);\n current = undefined;\n };\n}\n\nexport function registerFleetCommand(pi: ExtensionAPI, deps: RegisterFleetCommandDeps): void {\n pi.registerCommand(SUBAGENT_FLEET_COMMAND, {\n description: 'Open the live agent runs overlay: inspect current-session runs and apply runtime controls',\n handler: async (_args: string, ctx: ExtensionContext) => {\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId());\n const dispatchAction =\n deps.dispatchAction ?? (deps.management ? createFleetActionDispatcher(deps.management, jobs) : undefined);\n await openSubagentFleet(ctx, deps.scheduler, jobs, { dispatchAction });\n },\n });\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{resolveActiveTeamPackageConfig as e}from"../../agents/discovery.mjs";import{init_asyncJobTracker as t,resolveTrackedRunId as n}from"../../asyncJobTracker.mjs";import{openAgentCatalog as r}from"./agentCatalog.mjs";import{buildAgentCatalogEntries as i}from"./agentResourceProjection.mjs";import{openSubagentFleet as a}from"./fleet.mjs";import{AGENT_PULSE_FRAMES as o,FLEET_STATUS_KEY as s,agentFleetStatus as c}from"./fleetStatus.mjs";t();const l=`subagents-fleet`,u=`subagents-list`,d=`@agimon-ai/doompi-team`,f={key:`a`,label:`agents`,detail:`subagent resources and runs`,order:15},p=`requested`;function m(e){let t=e.registerLeader({source:d,bindings:[{id:`subagents.fleet`,path:[f,{key:`r`,label:`runs`,detail:`
|
|
1
|
+
import{resolveActiveTeamPackageConfig as e}from"../../agents/discovery.mjs";import{init_asyncJobTracker as t,resolveTrackedRunId as n}from"../../asyncJobTracker.mjs";import{openAgentCatalog as r}from"./agentCatalog.mjs";import{buildAgentCatalogEntries as i}from"./agentResourceProjection.mjs";import{openSubagentFleet as a}from"./fleet.mjs";import{AGENT_PULSE_FRAMES as o,FLEET_STATUS_KEY as s,agentFleetStatus as c}from"./fleetStatus.mjs";t();const l=`subagents-fleet`,u=`subagents-list`,d=`@agimon-ai/doompi-team`,f={key:`a`,label:`agents`,detail:`subagent resources and runs`,order:15},p=`requested`;function m(e){let t=e.registerLeader({source:d,bindings:[{id:`subagents.fleet`,path:[f,{key:`r`,label:`runs`,detail:`runs in this session`}],command:{name:l}},{id:`subagents.list`,path:[f,{key:`l`,label:`list`,detail:`agents available here`}],command:{name:u}}]});return()=>t.dispose()}function h(t,n){t.registerCommand(u,{description:`Browse agents available from this session cwd and inspect their projected launch resources`,handler:async(t,a)=>{let o=n.discovery.discover(a.cwd,`both`).agents,s=e(),c=n.skills.discoverAvailableSkills(a.cwd),l=i(o,{cwd:a.cwd,skills:{resolveSkillsWithFallback:(...e)=>n.skills.resolveSkillsWithFallback(...e),discoverAvailableSkills:()=>c},capabilityCeiling:n.policies.resolve(),...s?.config.excludeTools?{excludeTools:s.config.excludeTools,exclusionSource:s.path}:{},environment:{...process.env}});await r(a,l)}})}function g(e,t){return async r=>{let i=n(t,r.id);if(r.action===`interrupt`)return e.interrupt(i,r.message),{status:p};if(r.action===`stop`)return e.stop(i,r.message),{status:p};if(r.action===`steer`){let t=await e.steer(i,r.message??``);return{status:t.state,detail:t.message}}throw Error(`Resume is not supported by the current subagent runtime.`)}}function _(e,t,n){let r,i=!1,a=0,l=t.registerFooter({source:d,id:`agent-count`,order:20}),u=(e=!1)=>{if(!r)return!1;let t=c(r.jobs,a),n=t?.fingerprint;return!e&&n===r.fingerprint?!1:(l.update(t?.footer),r.ctx.hasUI&&r.ctx.ui.setStatus(s,t?.text),r.fingerprint=n,!0)},f=n.scheduler.register({id:`doom-team-agent-status`,intervalMs:250,run:()=>(a=(a+1)%o.length,u())});return e.on(`session_start`,(e,t)=>{i||(r={ctx:t,jobs:n.tracker.forSession(t.sessionManager.getSessionId()),fingerprint:void 0},u(!0))}),()=>{i||(i=!0,f(),l.dispose(),r?.ctx.hasUI&&r.ctx.ui.setStatus(s,void 0),r=void 0)}}function v(e,t){e.registerCommand(l,{description:`Open the live agent runs overlay: inspect current-session runs and apply runtime controls`,handler:async(e,n)=>{let r=t.tracker.forSession(n.sessionManager.getSessionId()),i=t.dispatchAction??(t.management?g(t.management,r):void 0);await a(n,t.scheduler,r,{dispatchAction:i})}})}export{l as SUBAGENT_FLEET_COMMAND,d as SUBAGENT_LEADER_SOURCE,u as SUBAGENT_LIST_COMMAND,g as createFleetActionDispatcher,h as registerAgentListCommand,_ as registerAgentStatus,v as registerFleetCommand,m as registerSubagentLeaderContribution};
|
|
2
2
|
//# sourceMappingURL=register.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.mjs","names":[],"sources":["../../../../../src/adapters/pi/tui/register.ts"],"sourcesContent":["/**\n * Wires the agent catalog, run fleet, and compact footer status into the host.\n *\n * DESIGN PATTERNS:\n * - Wiring only: display decisions live in `agentCatalog.ts`, `fleet.ts`, and\n * `fleetStatus.ts`; this file connects those surfaces to host services.\n */\n\nimport type { DoomUiHubService } from '@agimon-ai/doompi-extension-contracts/ui-hub';\nimport type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';\nimport type { ManagementActionsContract } from '../extensions/managementActions';\nimport type { SubagentCapabilityPolicyStore } from '../../../schemas/team/capabilityCeiling';\nimport { resolveActiveTeamPackageConfig } from '../../agents/discovery';\nimport type { SkillDiscoveryContract } from '../../agents/skills';\nimport type { AgentDiscoveryContract } from '../../agents/types';\nimport {\n type AsyncJobTrackerContract,\n type TrackedAsyncJobsContract,\n resolveTrackedRunId,\n} from '../../asyncJobTracker';\nimport type { PollSchedulerContract } from '../../pollScheduler';\nimport { openAgentCatalog } from './agentCatalog';\nimport { buildAgentCatalogEntries } from './agentResourceProjection';\nimport { type FleetActionDispatcher, openSubagentFleet } from './fleet';\nimport { AGENT_PULSE_FRAMES, agentFleetStatus, FLEET_STATUS_KEY } from './fleetStatus';\n\nexport const SUBAGENT_FLEET_COMMAND = 'subagents-fleet';\nexport const SUBAGENT_LIST_COMMAND = 'subagents-list';\nexport const SUBAGENT_LEADER_SOURCE = '@agimon-ai/doompi-team';\nconst SUBAGENT_LEADER_ORDER = 15;\nconst SUBAGENT_LEADER_SEGMENT = {\n key: 'a',\n label: 'agents',\n detail: 'subagent resources and runs',\n order: SUBAGENT_LEADER_ORDER,\n} as const;\nconst AGENT_FOOTER_ORDER = 20;\nconst AGENT_STATUS_POLL_INTERVAL_MS = 250;\nconst REQUESTED_STATUS = 'requested';\n\n/** Publishes the nested SPC a menu for available agents and current-session runs. */\nexport function registerSubagentLeaderContribution(hub: DoomUiHubService): () => void {\n const contribution = hub.registerLeader({\n source: SUBAGENT_LEADER_SOURCE,\n bindings: [\n {\n id: 'subagents.fleet',\n path: [SUBAGENT_LEADER_SEGMENT, { key: 'r', label: 'runs', detail: 'current-session runs' }],\n command: { name: SUBAGENT_FLEET_COMMAND },\n },\n {\n id: 'subagents.list',\n path: [SUBAGENT_LEADER_SEGMENT, { key: 'l', label: 'list', detail: 'available agents' }],\n command: { name: SUBAGENT_LIST_COMMAND },\n },\n ],\n });\n return () => contribution.dispose();\n}\n\nexport interface RegisterAgentListCommandDeps {\n discovery: AgentDiscoveryContract;\n skills: SkillDiscoveryContract;\n policies: SubagentCapabilityPolicyStore;\n}\n\nexport function registerAgentListCommand(pi: ExtensionAPI, deps: RegisterAgentListCommandDeps): void {\n pi.registerCommand(SUBAGENT_LIST_COMMAND, {\n description: 'Browse agents available from this session cwd and inspect their projected launch resources',\n handler: async (_args: string, ctx: ExtensionContext) => {\n const agents = deps.discovery.discover(ctx.cwd, 'both').agents;\n const teamPackage = resolveActiveTeamPackageConfig();\n const availableSkills = deps.skills.discoverAvailableSkills(ctx.cwd);\n const skillSnapshot = {\n resolveSkillsWithFallback: (\n ...args: Parameters<SkillDiscoveryContract['resolveSkillsWithFallback']>\n ): ReturnType<SkillDiscoveryContract['resolveSkillsWithFallback']> =>\n deps.skills.resolveSkillsWithFallback(...args),\n discoverAvailableSkills: (): ReturnType<SkillDiscoveryContract['discoverAvailableSkills']> => availableSkills,\n };\n const entries = buildAgentCatalogEntries(agents, {\n cwd: ctx.cwd,\n skills: skillSnapshot,\n capabilityCeiling: deps.policies.resolve(),\n ...(teamPackage?.config.excludeTools\n ? { excludeTools: teamPackage.config.excludeTools, exclusionSource: teamPackage.path }\n : {}),\n environment: { ...process.env },\n });\n await openAgentCatalog(ctx, entries);\n },\n });\n}\n\nexport interface RegisterFleetCommandDeps {\n scheduler: PollSchedulerContract;\n tracker: AsyncJobTrackerContract;\n /** Optional: absent until a composition root wires runtime controls to a real dispatcher. */\n dispatchAction?: FleetActionDispatcher;\n /** Builds context-scoped controls when a static test dispatcher is not supplied. */\n management?: ManagementActionsContract;\n}\n\nexport function createFleetActionDispatcher(\n management: ManagementActionsContract,\n jobs: TrackedAsyncJobsContract,\n): FleetActionDispatcher {\n return async (request) => {\n const runId = resolveTrackedRunId(jobs, request.id);\n if (request.action === 'interrupt') {\n management.interrupt(runId, request.message);\n return { status: REQUESTED_STATUS };\n }\n if (request.action === 'stop') {\n management.stop(runId, request.message);\n return { status: REQUESTED_STATUS };\n }\n if (request.action === 'steer') {\n const result = await management.steer(runId, request.message ?? '');\n return { status: result.state, detail: result.message };\n }\n throw new Error('Resume is not supported by the current subagent runtime.');\n };\n}\n\nexport function registerAgentStatus(\n pi: ExtensionAPI,\n hub: DoomUiHubService,\n deps: RegisterFleetCommandDeps,\n): () => void {\n let current: { ctx: ExtensionContext; jobs: TrackedAsyncJobsContract; fingerprint: string | undefined } | undefined;\n let disposed = false;\n let frame = 0;\n const footerContribution = hub.registerFooter({\n source: SUBAGENT_LEADER_SOURCE,\n id: 'agent-count',\n order: AGENT_FOOTER_ORDER,\n });\n\n const publish = (force = false): boolean => {\n if (!current) return false;\n const status = agentFleetStatus(current.jobs, frame);\n const fingerprint = status?.fingerprint;\n if (!force && fingerprint === current.fingerprint) return false;\n footerContribution.update(status?.footer);\n if (current.ctx.hasUI) current.ctx.ui.setStatus(FLEET_STATUS_KEY, status?.text);\n current.fingerprint = fingerprint;\n return true;\n };\n\n const unregisterPoll = deps.scheduler.register({\n id: 'doom-team-agent-status',\n intervalMs: AGENT_STATUS_POLL_INTERVAL_MS,\n run: () => {\n frame = (frame + 1) % AGENT_PULSE_FRAMES.length;\n return publish();\n },\n });\n\n pi.on('session_start', (_event, ctx: ExtensionContext) => {\n if (disposed) return;\n current = {\n ctx,\n jobs: deps.tracker.forSession(ctx.sessionManager.getSessionId()),\n fingerprint: undefined,\n };\n publish(true);\n });\n\n return () => {\n if (disposed) return;\n disposed = true;\n unregisterPoll();\n footerContribution.dispose();\n if (current?.ctx.hasUI) current.ctx.ui.setStatus(FLEET_STATUS_KEY, undefined);\n current = undefined;\n };\n}\n\nexport function registerFleetCommand(pi: ExtensionAPI, deps: RegisterFleetCommandDeps): void {\n pi.registerCommand(SUBAGENT_FLEET_COMMAND, {\n description: 'Open the live agent runs overlay: inspect current-session runs and apply runtime controls',\n handler: async (_args: string, ctx: ExtensionContext) => {\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId());\n const dispatchAction =\n deps.dispatchAction ?? (deps.management ? createFleetActionDispatcher(deps.management, jobs) : undefined);\n await openSubagentFleet(ctx, deps.scheduler, jobs, { dispatchAction });\n },\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"register.mjs","names":[],"sources":["../../../../../src/adapters/pi/tui/register.ts"],"sourcesContent":["/**\n * Wires the agent catalog, run fleet, and compact footer status into the host.\n *\n * DESIGN PATTERNS:\n * - Wiring only: display decisions live in `agentCatalog.ts`, `fleet.ts`, and\n * `fleetStatus.ts`; this file connects those surfaces to host services.\n */\n\nimport type { DoomUiHubService } from '@agimon-ai/doompi-extension-contracts/ui-hub';\nimport type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';\nimport type { ManagementActionsContract } from '../extensions/managementActions';\nimport type { SubagentCapabilityPolicyStore } from '../../../schemas/team/capabilityCeiling';\nimport { resolveActiveTeamPackageConfig } from '../../agents/discovery';\nimport type { SkillDiscoveryContract } from '../../agents/skills';\nimport type { AgentDiscoveryContract } from '../../agents/types';\nimport {\n type AsyncJobTrackerContract,\n type TrackedAsyncJobsContract,\n resolveTrackedRunId,\n} from '../../asyncJobTracker';\nimport type { PollSchedulerContract } from '../../pollScheduler';\nimport { openAgentCatalog } from './agentCatalog';\nimport { buildAgentCatalogEntries } from './agentResourceProjection';\nimport { type FleetActionDispatcher, openSubagentFleet } from './fleet';\nimport { AGENT_PULSE_FRAMES, agentFleetStatus, FLEET_STATUS_KEY } from './fleetStatus';\n\nexport const SUBAGENT_FLEET_COMMAND = 'subagents-fleet';\nexport const SUBAGENT_LIST_COMMAND = 'subagents-list';\nexport const SUBAGENT_LEADER_SOURCE = '@agimon-ai/doompi-team';\nconst SUBAGENT_LEADER_ORDER = 15;\nconst SUBAGENT_LEADER_SEGMENT = {\n key: 'a',\n label: 'agents',\n detail: 'subagent resources and runs',\n order: SUBAGENT_LEADER_ORDER,\n} as const;\nconst AGENT_FOOTER_ORDER = 20;\nconst AGENT_STATUS_POLL_INTERVAL_MS = 250;\nconst REQUESTED_STATUS = 'requested';\n\n/** Publishes the nested SPC a menu for available agents and current-session runs. */\nexport function registerSubagentLeaderContribution(hub: DoomUiHubService): () => void {\n const contribution = hub.registerLeader({\n source: SUBAGENT_LEADER_SOURCE,\n bindings: [\n {\n id: 'subagents.fleet',\n path: [SUBAGENT_LEADER_SEGMENT, { key: 'r', label: 'runs', detail: 'runs in this session' }],\n command: { name: SUBAGENT_FLEET_COMMAND },\n },\n {\n id: 'subagents.list',\n path: [SUBAGENT_LEADER_SEGMENT, { key: 'l', label: 'list', detail: 'agents available here' }],\n command: { name: SUBAGENT_LIST_COMMAND },\n },\n ],\n });\n return () => contribution.dispose();\n}\n\nexport interface RegisterAgentListCommandDeps {\n discovery: AgentDiscoveryContract;\n skills: SkillDiscoveryContract;\n policies: SubagentCapabilityPolicyStore;\n}\n\nexport function registerAgentListCommand(pi: ExtensionAPI, deps: RegisterAgentListCommandDeps): void {\n pi.registerCommand(SUBAGENT_LIST_COMMAND, {\n description: 'Browse agents available from this session cwd and inspect their projected launch resources',\n handler: async (_args: string, ctx: ExtensionContext) => {\n const agents = deps.discovery.discover(ctx.cwd, 'both').agents;\n const teamPackage = resolveActiveTeamPackageConfig();\n const availableSkills = deps.skills.discoverAvailableSkills(ctx.cwd);\n const skillSnapshot = {\n resolveSkillsWithFallback: (\n ...args: Parameters<SkillDiscoveryContract['resolveSkillsWithFallback']>\n ): ReturnType<SkillDiscoveryContract['resolveSkillsWithFallback']> =>\n deps.skills.resolveSkillsWithFallback(...args),\n discoverAvailableSkills: (): ReturnType<SkillDiscoveryContract['discoverAvailableSkills']> => availableSkills,\n };\n const entries = buildAgentCatalogEntries(agents, {\n cwd: ctx.cwd,\n skills: skillSnapshot,\n capabilityCeiling: deps.policies.resolve(),\n ...(teamPackage?.config.excludeTools\n ? { excludeTools: teamPackage.config.excludeTools, exclusionSource: teamPackage.path }\n : {}),\n environment: { ...process.env },\n });\n await openAgentCatalog(ctx, entries);\n },\n });\n}\n\nexport interface RegisterFleetCommandDeps {\n scheduler: PollSchedulerContract;\n tracker: AsyncJobTrackerContract;\n /** Optional: absent until a composition root wires runtime controls to a real dispatcher. */\n dispatchAction?: FleetActionDispatcher;\n /** Builds context-scoped controls when a static test dispatcher is not supplied. */\n management?: ManagementActionsContract;\n}\n\nexport function createFleetActionDispatcher(\n management: ManagementActionsContract,\n jobs: TrackedAsyncJobsContract,\n): FleetActionDispatcher {\n return async (request) => {\n const runId = resolveTrackedRunId(jobs, request.id);\n if (request.action === 'interrupt') {\n management.interrupt(runId, request.message);\n return { status: REQUESTED_STATUS };\n }\n if (request.action === 'stop') {\n management.stop(runId, request.message);\n return { status: REQUESTED_STATUS };\n }\n if (request.action === 'steer') {\n const result = await management.steer(runId, request.message ?? '');\n return { status: result.state, detail: result.message };\n }\n throw new Error('Resume is not supported by the current subagent runtime.');\n };\n}\n\nexport function registerAgentStatus(\n pi: ExtensionAPI,\n hub: DoomUiHubService,\n deps: RegisterFleetCommandDeps,\n): () => void {\n let current: { ctx: ExtensionContext; jobs: TrackedAsyncJobsContract; fingerprint: string | undefined } | undefined;\n let disposed = false;\n let frame = 0;\n const footerContribution = hub.registerFooter({\n source: SUBAGENT_LEADER_SOURCE,\n id: 'agent-count',\n order: AGENT_FOOTER_ORDER,\n });\n\n const publish = (force = false): boolean => {\n if (!current) return false;\n const status = agentFleetStatus(current.jobs, frame);\n const fingerprint = status?.fingerprint;\n if (!force && fingerprint === current.fingerprint) return false;\n footerContribution.update(status?.footer);\n if (current.ctx.hasUI) current.ctx.ui.setStatus(FLEET_STATUS_KEY, status?.text);\n current.fingerprint = fingerprint;\n return true;\n };\n\n const unregisterPoll = deps.scheduler.register({\n id: 'doom-team-agent-status',\n intervalMs: AGENT_STATUS_POLL_INTERVAL_MS,\n run: () => {\n frame = (frame + 1) % AGENT_PULSE_FRAMES.length;\n return publish();\n },\n });\n\n pi.on('session_start', (_event, ctx: ExtensionContext) => {\n if (disposed) return;\n current = {\n ctx,\n jobs: deps.tracker.forSession(ctx.sessionManager.getSessionId()),\n fingerprint: undefined,\n };\n publish(true);\n });\n\n return () => {\n if (disposed) return;\n disposed = true;\n unregisterPoll();\n footerContribution.dispose();\n if (current?.ctx.hasUI) current.ctx.ui.setStatus(FLEET_STATUS_KEY, undefined);\n current = undefined;\n };\n}\n\nexport function registerFleetCommand(pi: ExtensionAPI, deps: RegisterFleetCommandDeps): void {\n pi.registerCommand(SUBAGENT_FLEET_COMMAND, {\n description: 'Open the live agent runs overlay: inspect current-session runs and apply runtime controls',\n handler: async (_args: string, ctx: ExtensionContext) => {\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId());\n const dispatchAction =\n deps.dispatchAction ?? (deps.management ? createFleetActionDispatcher(deps.management, jobs) : undefined);\n await openSubagentFleet(ctx, deps.scheduler, jobs, { dispatchAction });\n },\n });\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agimon-ai/doompi-team",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.33",
|
|
4
4
|
"description": "Asynchronous named subagents, team runs, intercom, and model policy for Pi coding agents.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent-team",
|
|
@@ -40,10 +40,10 @@
|
|
|
40
40
|
"@deepseek-ai/cordis": "4.0.1",
|
|
41
41
|
"typebox": "1.3.16",
|
|
42
42
|
"yaml": "2.9.0",
|
|
43
|
-
"@agimon-ai/doompi-config": "0.0.1-alpha.
|
|
44
|
-
"@agimon-ai/doompi-
|
|
45
|
-
"@agimon-ai/doompi-
|
|
46
|
-
"@agimon-ai/doompi-
|
|
43
|
+
"@agimon-ai/doompi-config": "0.0.1-alpha.33",
|
|
44
|
+
"@agimon-ai/doompi-extension-contracts": "0.0.1-alpha.33",
|
|
45
|
+
"@agimon-ai/doompi-telemetry": "0.0.1-alpha.33",
|
|
46
|
+
"@agimon-ai/doompi-ui": "0.0.1-alpha.33"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@earendil-works/pi-agent-core": "0.84.2",
|