@agimon-ai/doompi-team 0.0.1-alpha.72 → 0.0.1-alpha.75

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.
Files changed (500) hide show
  1. package/README.md +20 -2
  2. package/package.json +78 -54
  3. package/dist/_virtual/_rolldown/runtime.cjs +0 -1
  4. package/dist/api-contracts.cjs +0 -1
  5. package/dist/api-contracts.d.cts +0 -2
  6. package/dist/api-contracts.d.mts +0 -2
  7. package/dist/api-contracts.mjs +0 -1
  8. package/dist/capabilityCeiling.cjs +0 -1
  9. package/dist/capabilityCeiling.d.cts +0 -3
  10. package/dist/capabilityCeiling.d.mts +0 -3
  11. package/dist/capabilityCeiling.mjs +0 -1
  12. package/dist/constants/team.cjs +0 -2
  13. package/dist/constants/team.cjs.map +0 -1
  14. package/dist/constants/team.mjs +0 -2
  15. package/dist/constants/team.mjs.map +0 -1
  16. package/dist/controllers/slashCommands.cjs +0 -4
  17. package/dist/controllers/slashCommands.cjs.map +0 -1
  18. package/dist/controllers/slashCommands.mjs +0 -4
  19. package/dist/controllers/slashCommands.mjs.map +0 -1
  20. package/dist/controllers/teamSessionApi.cjs +0 -2
  21. package/dist/controllers/teamSessionApi.cjs.map +0 -1
  22. package/dist/controllers/teamSessionApi.mjs +0 -2
  23. package/dist/controllers/teamSessionApi.mjs.map +0 -1
  24. package/dist/controllers/webSubagentCatalogChannel.cjs +0 -2
  25. package/dist/controllers/webSubagentCatalogChannel.cjs.map +0 -1
  26. package/dist/controllers/webSubagentCatalogChannel.mjs +0 -2
  27. package/dist/controllers/webSubagentCatalogChannel.mjs.map +0 -1
  28. package/dist/controllers/webSubagentsChannel.cjs +0 -2
  29. package/dist/controllers/webSubagentsChannel.cjs.map +0 -1
  30. package/dist/controllers/webSubagentsChannel.mjs +0 -2
  31. package/dist/controllers/webSubagentsChannel.mjs.map +0 -1
  32. package/dist/delegation-api.cjs +0 -1
  33. package/dist/delegation-api.d.cts +0 -2
  34. package/dist/delegation-api.d.mts +0 -2
  35. package/dist/delegation-api.mjs +0 -1
  36. package/dist/delegation.cjs +0 -1
  37. package/dist/delegation.d.cts +0 -3
  38. package/dist/delegation.d.mts +0 -3
  39. package/dist/delegation.mjs +0 -1
  40. package/dist/env.cjs +0 -1
  41. package/dist/env.d.cts +0 -2
  42. package/dist/env.d.mts +0 -2
  43. package/dist/env.mjs +0 -1
  44. package/dist/extensions/pi.cjs +0 -2
  45. package/dist/extensions/pi.cjs.map +0 -1
  46. package/dist/extensions/pi.d.cts +0 -14
  47. package/dist/extensions/pi.d.cts.map +0 -1
  48. package/dist/extensions/pi.d.mts +0 -14
  49. package/dist/extensions/pi.d.mts.map +0 -1
  50. package/dist/extensions/pi.mjs +0 -2
  51. package/dist/extensions/pi.mjs.map +0 -1
  52. package/dist/extensions/server.cjs +0 -4
  53. package/dist/extensions/server.cjs.map +0 -1
  54. package/dist/extensions/server.d.cts +0 -5
  55. package/dist/extensions/server.d.cts.map +0 -1
  56. package/dist/extensions/server.d.mts +0 -5
  57. package/dist/extensions/server.d.mts.map +0 -1
  58. package/dist/extensions/server.mjs +0 -4
  59. package/dist/extensions/server.mjs.map +0 -1
  60. package/dist/fable-plan-api.cjs +0 -2
  61. package/dist/fable-plan-api.cjs.map +0 -1
  62. package/dist/fable-plan-api.d.cts +0 -96
  63. package/dist/fable-plan-api.d.cts.map +0 -1
  64. package/dist/fable-plan-api.d.mts +0 -96
  65. package/dist/fable-plan-api.d.mts.map +0 -1
  66. package/dist/fable-plan-api.mjs +0 -2
  67. package/dist/fable-plan-api.mjs.map +0 -1
  68. package/dist/fable-plan.cjs +0 -1
  69. package/dist/fable-plan.d.cts +0 -2
  70. package/dist/fable-plan.d.mts +0 -2
  71. package/dist/fable-plan.mjs +0 -1
  72. package/dist/index.cjs +0 -1
  73. package/dist/index.d.cts +0 -2
  74. package/dist/index.d.mts +0 -2
  75. package/dist/index.mjs +0 -1
  76. package/dist/models/slashResult.cjs +0 -2
  77. package/dist/models/slashResult.cjs.map +0 -1
  78. package/dist/models/slashResult.mjs +0 -2
  79. package/dist/models/slashResult.mjs.map +0 -1
  80. package/dist/runs/background/cliRunnerEntry.cjs +0 -2
  81. package/dist/runs/background/cliRunnerEntry.cjs.map +0 -1
  82. package/dist/runs/background/cliRunnerEntry.d.cts +0 -1
  83. package/dist/runs/background/cliRunnerEntry.d.mts +0 -1
  84. package/dist/runs/background/cliRunnerEntry.mjs +0 -2
  85. package/dist/runs/background/cliRunnerEntry.mjs.map +0 -1
  86. package/dist/runtime-subagent-policy.cjs +0 -2
  87. package/dist/runtime-subagent-policy.cjs.map +0 -1
  88. package/dist/runtime-subagent-policy.d.cts +0 -32
  89. package/dist/runtime-subagent-policy.d.cts.map +0 -1
  90. package/dist/runtime-subagent-policy.d.mts +0 -32
  91. package/dist/runtime-subagent-policy.d.mts.map +0 -1
  92. package/dist/runtime-subagent-policy.mjs +0 -2
  93. package/dist/runtime-subagent-policy.mjs.map +0 -1
  94. package/dist/runtime-subagent-tool.cjs +0 -2
  95. package/dist/runtime-subagent-tool.cjs.map +0 -1
  96. package/dist/runtime-subagent-tool.d.cts +0 -101
  97. package/dist/runtime-subagent-tool.d.cts.map +0 -1
  98. package/dist/runtime-subagent-tool.d.mts +0 -101
  99. package/dist/runtime-subagent-tool.d.mts.map +0 -1
  100. package/dist/runtime-subagent-tool.mjs +0 -2
  101. package/dist/runtime-subagent-tool.mjs.map +0 -1
  102. package/dist/schemas/apiContracts.cjs +0 -2
  103. package/dist/schemas/apiContracts.cjs.map +0 -1
  104. package/dist/schemas/apiContracts.d.cts +0 -53
  105. package/dist/schemas/apiContracts.d.cts.map +0 -1
  106. package/dist/schemas/apiContracts.d.mts +0 -53
  107. package/dist/schemas/apiContracts.d.mts.map +0 -1
  108. package/dist/schemas/apiContracts.mjs +0 -2
  109. package/dist/schemas/apiContracts.mjs.map +0 -1
  110. package/dist/schemas/team/capabilityCeiling.cjs +0 -2
  111. package/dist/schemas/team/capabilityCeiling.cjs.map +0 -1
  112. package/dist/schemas/team/capabilityCeiling.d.cts +0 -46
  113. package/dist/schemas/team/capabilityCeiling.d.cts.map +0 -1
  114. package/dist/schemas/team/capabilityCeiling.d.mts +0 -46
  115. package/dist/schemas/team/capabilityCeiling.d.mts.map +0 -1
  116. package/dist/schemas/team/capabilityCeiling.mjs +0 -2
  117. package/dist/schemas/team/capabilityCeiling.mjs.map +0 -1
  118. package/dist/schemas/team/delegation.cjs +0 -2
  119. package/dist/schemas/team/delegation.cjs.map +0 -1
  120. package/dist/schemas/team/delegation.d.cts +0 -268
  121. package/dist/schemas/team/delegation.d.cts.map +0 -1
  122. package/dist/schemas/team/delegation.d.mts +0 -268
  123. package/dist/schemas/team/delegation.d.mts.map +0 -1
  124. package/dist/schemas/team/delegation.mjs +0 -2
  125. package/dist/schemas/team/delegation.mjs.map +0 -1
  126. package/dist/schemas/team/packageConfig.cjs +0 -2
  127. package/dist/schemas/team/packageConfig.cjs.map +0 -1
  128. package/dist/schemas/team/packageConfig.mjs +0 -2
  129. package/dist/schemas/team/packageConfig.mjs.map +0 -1
  130. package/dist/services/admissionGate/index.cjs +0 -2
  131. package/dist/services/admissionGate/index.cjs.map +0 -1
  132. package/dist/services/admissionGate/index.mjs +0 -2
  133. package/dist/services/admissionGate/index.mjs.map +0 -1
  134. package/dist/services/agentDiscovery/index.cjs +0 -2
  135. package/dist/services/agentDiscovery/index.cjs.map +0 -1
  136. package/dist/services/agentDiscovery/index.mjs +0 -2
  137. package/dist/services/agentDiscovery/index.mjs.map +0 -1
  138. package/dist/services/agentFrontmatter/index.cjs +0 -10
  139. package/dist/services/agentFrontmatter/index.cjs.map +0 -1
  140. package/dist/services/agentFrontmatter/index.mjs +0 -10
  141. package/dist/services/agentFrontmatter/index.mjs.map +0 -1
  142. package/dist/services/agentLoader/index.cjs +0 -2
  143. package/dist/services/agentLoader/index.cjs.map +0 -1
  144. package/dist/services/agentLoader/index.mjs +0 -2
  145. package/dist/services/agentLoader/index.mjs.map +0 -1
  146. package/dist/services/agentMemory/index.cjs +0 -3
  147. package/dist/services/agentMemory/index.cjs.map +0 -1
  148. package/dist/services/agentMemory/index.mjs +0 -3
  149. package/dist/services/agentMemory/index.mjs.map +0 -1
  150. package/dist/services/agentProjectRoot/index.cjs +0 -2
  151. package/dist/services/agentProjectRoot/index.cjs.map +0 -1
  152. package/dist/services/agentProjectRoot/index.mjs +0 -2
  153. package/dist/services/agentProjectRoot/index.mjs.map +0 -1
  154. package/dist/services/agentSettings/index.cjs +0 -2
  155. package/dist/services/agentSettings/index.cjs.map +0 -1
  156. package/dist/services/agentSettings/index.mjs +0 -2
  157. package/dist/services/agentSettings/index.mjs.map +0 -1
  158. package/dist/services/agentSkills/index.cjs +0 -0
  159. package/dist/services/agentSkills/index.cjs.map +0 -1
  160. package/dist/services/agentSkills/index.mjs +0 -0
  161. package/dist/services/agentSkills/index.mjs.map +0 -1
  162. package/dist/services/asyncExecution/index.cjs +0 -2
  163. package/dist/services/asyncExecution/index.cjs.map +0 -1
  164. package/dist/services/asyncExecution/index.mjs +0 -2
  165. package/dist/services/asyncExecution/index.mjs.map +0 -1
  166. package/dist/services/asyncJobTracker/index.cjs +0 -2
  167. package/dist/services/asyncJobTracker/index.cjs.map +0 -1
  168. package/dist/services/asyncJobTracker/index.mjs +0 -2
  169. package/dist/services/asyncJobTracker/index.mjs.map +0 -1
  170. package/dist/services/atomicJson/index.cjs +0 -2
  171. package/dist/services/atomicJson/index.cjs.map +0 -1
  172. package/dist/services/atomicJson/index.mjs +0 -2
  173. package/dist/services/atomicJson/index.mjs.map +0 -1
  174. package/dist/services/backgroundWorkService/index.cjs +0 -2
  175. package/dist/services/backgroundWorkService/index.cjs.map +0 -1
  176. package/dist/services/backgroundWorkService/index.mjs +0 -2
  177. package/dist/services/backgroundWorkService/index.mjs.map +0 -1
  178. package/dist/services/boundedKeySet/index.cjs +0 -2
  179. package/dist/services/boundedKeySet/index.cjs.map +0 -1
  180. package/dist/services/boundedKeySet/index.mjs +0 -2
  181. package/dist/services/boundedKeySet/index.mjs.map +0 -1
  182. package/dist/services/chainExpression/index.cjs +0 -2
  183. package/dist/services/chainExpression/index.cjs.map +0 -1
  184. package/dist/services/chainExpression/index.mjs +0 -2
  185. package/dist/services/chainExpression/index.mjs.map +0 -1
  186. package/dist/services/claudeFableProfile/index.cjs +0 -4
  187. package/dist/services/claudeFableProfile/index.cjs.map +0 -1
  188. package/dist/services/claudeFableProfile/index.mjs +0 -4
  189. package/dist/services/claudeFableProfile/index.mjs.map +0 -1
  190. package/dist/services/completionBatcher/index.cjs +0 -2
  191. package/dist/services/completionBatcher/index.cjs.map +0 -1
  192. package/dist/services/completionBatcher/index.mjs +0 -2
  193. package/dist/services/completionBatcher/index.mjs.map +0 -1
  194. package/dist/services/config/index.cjs +0 -2
  195. package/dist/services/config/index.cjs.map +0 -1
  196. package/dist/services/config/index.mjs +0 -2
  197. package/dist/services/config/index.mjs.map +0 -1
  198. package/dist/services/configDir/index.cjs +0 -2
  199. package/dist/services/configDir/index.cjs.map +0 -1
  200. package/dist/services/configDir/index.mjs +0 -2
  201. package/dist/services/configDir/index.mjs.map +0 -1
  202. package/dist/services/delegationBridge/index.cjs +0 -2
  203. package/dist/services/delegationBridge/index.cjs.map +0 -1
  204. package/dist/services/delegationBridge/index.mjs +0 -2
  205. package/dist/services/delegationBridge/index.mjs.map +0 -1
  206. package/dist/services/depthGuard/index.cjs +0 -2
  207. package/dist/services/depthGuard/index.cjs.map +0 -1
  208. package/dist/services/depthGuard/index.mjs +0 -2
  209. package/dist/services/depthGuard/index.mjs.map +0 -1
  210. package/dist/services/directRunBackgroundWork/index.cjs +0 -2
  211. package/dist/services/directRunBackgroundWork/index.cjs.map +0 -1
  212. package/dist/services/directRunBackgroundWork/index.mjs +0 -2
  213. package/dist/services/directRunBackgroundWork/index.mjs.map +0 -1
  214. package/dist/services/displayFormat/index.cjs +0 -2
  215. package/dist/services/displayFormat/index.cjs.map +0 -1
  216. package/dist/services/displayFormat/index.mjs +0 -2
  217. package/dist/services/displayFormat/index.mjs.map +0 -1
  218. package/dist/services/doctor/index.cjs +0 -5
  219. package/dist/services/doctor/index.cjs.map +0 -1
  220. package/dist/services/doctor/index.mjs +0 -5
  221. package/dist/services/doctor/index.mjs.map +0 -1
  222. package/dist/services/errors/index.cjs +0 -2
  223. package/dist/services/errors/index.cjs.map +0 -1
  224. package/dist/services/errors/index.mjs +0 -2
  225. package/dist/services/errors/index.mjs.map +0 -1
  226. package/dist/services/externalProcessIpc/index.cjs +0 -2
  227. package/dist/services/externalProcessIpc/index.cjs.map +0 -1
  228. package/dist/services/externalProcessIpc/index.mjs +0 -2
  229. package/dist/services/externalProcessIpc/index.mjs.map +0 -1
  230. package/dist/services/fablePlanBridge/index.cjs +0 -2
  231. package/dist/services/fablePlanBridge/index.cjs.map +0 -1
  232. package/dist/services/fablePlanBridge/index.mjs +0 -2
  233. package/dist/services/fablePlanBridge/index.mjs.map +0 -1
  234. package/dist/services/fileSystemRetry/index.cjs +0 -2
  235. package/dist/services/fileSystemRetry/index.cjs.map +0 -1
  236. package/dist/services/fileSystemRetry/index.mjs +0 -2
  237. package/dist/services/fileSystemRetry/index.mjs.map +0 -1
  238. package/dist/services/fleetTranscript/index.cjs +0 -3
  239. package/dist/services/fleetTranscript/index.cjs.map +0 -1
  240. package/dist/services/fleetTranscript/index.mjs +0 -3
  241. package/dist/services/fleetTranscript/index.mjs.map +0 -1
  242. package/dist/services/intercomBridge/index.cjs +0 -2
  243. package/dist/services/intercomBridge/index.cjs.map +0 -1
  244. package/dist/services/intercomBridge/index.mjs +0 -2
  245. package/dist/services/intercomBridge/index.mjs.map +0 -1
  246. package/dist/services/lruCache/index.cjs +0 -2
  247. package/dist/services/lruCache/index.cjs.map +0 -1
  248. package/dist/services/lruCache/index.mjs +0 -2
  249. package/dist/services/lruCache/index.mjs.map +0 -1
  250. package/dist/services/managementActions/index.cjs +0 -2
  251. package/dist/services/managementActions/index.cjs.map +0 -1
  252. package/dist/services/managementActions/index.mjs +0 -2
  253. package/dist/services/managementActions/index.mjs.map +0 -1
  254. package/dist/services/mcpDirectToolAllowlist/index.cjs +0 -2
  255. package/dist/services/mcpDirectToolAllowlist/index.cjs.map +0 -1
  256. package/dist/services/mcpDirectToolAllowlist/index.mjs +0 -2
  257. package/dist/services/mcpDirectToolAllowlist/index.mjs.map +0 -1
  258. package/dist/services/modelFallback/index.cjs +0 -2
  259. package/dist/services/modelFallback/index.cjs.map +0 -1
  260. package/dist/services/modelFallback/index.mjs +0 -2
  261. package/dist/services/modelFallback/index.mjs.map +0 -1
  262. package/dist/services/modelInfo/index.cjs +0 -2
  263. package/dist/services/modelInfo/index.cjs.map +0 -1
  264. package/dist/services/modelInfo/index.mjs +0 -2
  265. package/dist/services/modelInfo/index.mjs.map +0 -1
  266. package/dist/services/modelResolution/index.cjs +0 -2
  267. package/dist/services/modelResolution/index.cjs.map +0 -1
  268. package/dist/services/modelResolution/index.mjs +0 -2
  269. package/dist/services/modelResolution/index.mjs.map +0 -1
  270. package/dist/services/modelScope/index.cjs +0 -2
  271. package/dist/services/modelScope/index.cjs.map +0 -1
  272. package/dist/services/modelScope/index.mjs +0 -2
  273. package/dist/services/modelScope/index.mjs.map +0 -1
  274. package/dist/services/nativeFleetTranscript/index.cjs +0 -3
  275. package/dist/services/nativeFleetTranscript/index.cjs.map +0 -1
  276. package/dist/services/nativeFleetTranscript/index.mjs +0 -3
  277. package/dist/services/nativeFleetTranscript/index.mjs.map +0 -1
  278. package/dist/services/nativeRunCoordinator/index.cjs +0 -2
  279. package/dist/services/nativeRunCoordinator/index.cjs.map +0 -1
  280. package/dist/services/nativeRunCoordinator/index.mjs +0 -2
  281. package/dist/services/nativeRunCoordinator/index.mjs.map +0 -1
  282. package/dist/services/nativeRunProjection/index.cjs +0 -2
  283. package/dist/services/nativeRunProjection/index.cjs.map +0 -1
  284. package/dist/services/nativeRunProjection/index.mjs +0 -2
  285. package/dist/services/nativeRunProjection/index.mjs.map +0 -1
  286. package/dist/services/nativeTeamChannel/index.cjs +0 -4
  287. package/dist/services/nativeTeamChannel/index.cjs.map +0 -1
  288. package/dist/services/nativeTeamChannel/index.d.cts +0 -48
  289. package/dist/services/nativeTeamChannel/index.d.cts.map +0 -1
  290. package/dist/services/nativeTeamChannel/index.d.mts +0 -48
  291. package/dist/services/nativeTeamChannel/index.d.mts.map +0 -1
  292. package/dist/services/nativeTeamChannel/index.mjs +0 -4
  293. package/dist/services/nativeTeamChannel/index.mjs.map +0 -1
  294. package/dist/services/notify/index.cjs +0 -4
  295. package/dist/services/notify/index.cjs.map +0 -1
  296. package/dist/services/notify/index.mjs +0 -4
  297. package/dist/services/notify/index.mjs.map +0 -1
  298. package/dist/services/operationJournal/index.cjs +0 -2
  299. package/dist/services/operationJournal/index.cjs.map +0 -1
  300. package/dist/services/operationJournal/index.mjs +0 -2
  301. package/dist/services/operationJournal/index.mjs.map +0 -1
  302. package/dist/services/orchestratorPrompt/index.cjs +0 -42
  303. package/dist/services/orchestratorPrompt/index.cjs.map +0 -1
  304. package/dist/services/orchestratorPrompt/index.mjs +0 -42
  305. package/dist/services/orchestratorPrompt/index.mjs.map +0 -1
  306. package/dist/services/pollScheduler/index.cjs +0 -2
  307. package/dist/services/pollScheduler/index.cjs.map +0 -1
  308. package/dist/services/pollScheduler/index.mjs +0 -2
  309. package/dist/services/pollScheduler/index.mjs.map +0 -1
  310. package/dist/services/runWithConcurrency/index.cjs +0 -2
  311. package/dist/services/runWithConcurrency/index.cjs.map +0 -1
  312. package/dist/services/runWithConcurrency/index.mjs +0 -2
  313. package/dist/services/runWithConcurrency/index.mjs.map +0 -1
  314. package/dist/services/runtimeRegistry/index.cjs +0 -2
  315. package/dist/services/runtimeRegistry/index.cjs.map +0 -1
  316. package/dist/services/runtimeRegistry/index.mjs +0 -2
  317. package/dist/services/runtimeRegistry/index.mjs.map +0 -1
  318. package/dist/services/sessionLifecycle/index.cjs +0 -2
  319. package/dist/services/sessionLifecycle/index.cjs.map +0 -1
  320. package/dist/services/sessionLifecycle/index.mjs +0 -2
  321. package/dist/services/sessionLifecycle/index.mjs.map +0 -1
  322. package/dist/services/sessionPaths/index.cjs +0 -2
  323. package/dist/services/sessionPaths/index.cjs.map +0 -1
  324. package/dist/services/sessionPaths/index.mjs +0 -2
  325. package/dist/services/sessionPaths/index.mjs.map +0 -1
  326. package/dist/services/spawnHandshake/index.cjs +0 -2
  327. package/dist/services/spawnHandshake/index.cjs.map +0 -1
  328. package/dist/services/spawnHandshake/index.mjs +0 -2
  329. package/dist/services/spawnHandshake/index.mjs.map +0 -1
  330. package/dist/services/spawnPlan/index.cjs +0 -4
  331. package/dist/services/spawnPlan/index.cjs.map +0 -1
  332. package/dist/services/spawnPlan/index.mjs +0 -4
  333. package/dist/services/spawnPlan/index.mjs.map +0 -1
  334. package/dist/services/spawnRequestMapping/index.cjs +0 -2
  335. package/dist/services/spawnRequestMapping/index.cjs.map +0 -1
  336. package/dist/services/spawnRequestMapping/index.mjs +0 -2
  337. package/dist/services/spawnRequestMapping/index.mjs.map +0 -1
  338. package/dist/services/statusViews/index.cjs +0 -7
  339. package/dist/services/statusViews/index.cjs.map +0 -1
  340. package/dist/services/statusViews/index.mjs +0 -7
  341. package/dist/services/statusViews/index.mjs.map +0 -1
  342. package/dist/services/statusWriter/index.cjs +0 -2
  343. package/dist/services/statusWriter/index.cjs.map +0 -1
  344. package/dist/services/statusWriter/index.mjs +0 -2
  345. package/dist/services/statusWriter/index.mjs.map +0 -1
  346. package/dist/services/subagentLaunch/index.cjs +0 -2
  347. package/dist/services/subagentLaunch/index.cjs.map +0 -1
  348. package/dist/services/subagentLaunch/index.mjs +0 -2
  349. package/dist/services/subagentLaunch/index.mjs.map +0 -1
  350. package/dist/services/subagentLaunchContract/index.cjs +0 -2
  351. package/dist/services/subagentLaunchContract/index.cjs.map +0 -1
  352. package/dist/services/subagentLaunchContract/index.d.cts +0 -28
  353. package/dist/services/subagentLaunchContract/index.d.cts.map +0 -1
  354. package/dist/services/subagentLaunchContract/index.d.mts +0 -28
  355. package/dist/services/subagentLaunchContract/index.d.mts.map +0 -1
  356. package/dist/services/subagentLaunchContract/index.mjs +0 -2
  357. package/dist/services/subagentLaunchContract/index.mjs.map +0 -1
  358. package/dist/services/subagentPolicyService/index.cjs +0 -2
  359. package/dist/services/subagentPolicyService/index.cjs.map +0 -1
  360. package/dist/services/subagentPolicyService/index.mjs +0 -2
  361. package/dist/services/subagentPolicyService/index.mjs.map +0 -1
  362. package/dist/services/subagentTool/index.cjs +0 -6
  363. package/dist/services/subagentTool/index.cjs.map +0 -1
  364. package/dist/services/subagentTool/index.mjs +0 -6
  365. package/dist/services/subagentTool/index.mjs.map +0 -1
  366. package/dist/services/subagentWait/index.cjs +0 -2
  367. package/dist/services/subagentWait/index.cjs.map +0 -1
  368. package/dist/services/subagentWait/index.mjs +0 -2
  369. package/dist/services/subagentWait/index.mjs.map +0 -1
  370. package/dist/services/suspendedRuns/index.cjs +0 -6
  371. package/dist/services/suspendedRuns/index.cjs.map +0 -1
  372. package/dist/services/suspendedRuns/index.mjs +0 -6
  373. package/dist/services/suspendedRuns/index.mjs.map +0 -1
  374. package/dist/services/teamCollaboration/index.cjs +0 -2
  375. package/dist/services/teamCollaboration/index.cjs.map +0 -1
  376. package/dist/services/teamCollaboration/index.mjs +0 -2
  377. package/dist/services/teamCollaboration/index.mjs.map +0 -1
  378. package/dist/services/teamRuntime/index.cjs +0 -2
  379. package/dist/services/teamRuntime/index.cjs.map +0 -1
  380. package/dist/services/teamRuntime/index.mjs +0 -2
  381. package/dist/services/teamRuntime/index.mjs.map +0 -1
  382. package/dist/services/teamSnapshot/index.cjs +0 -3
  383. package/dist/services/teamSnapshot/index.cjs.map +0 -1
  384. package/dist/services/teamSnapshot/index.d.cts +0 -10
  385. package/dist/services/teamSnapshot/index.d.cts.map +0 -1
  386. package/dist/services/teamSnapshot/index.d.mts +0 -10
  387. package/dist/services/teamSnapshot/index.d.mts.map +0 -1
  388. package/dist/services/teamSnapshot/index.mjs +0 -3
  389. package/dist/services/teamSnapshot/index.mjs.map +0 -1
  390. package/dist/services/toolDescription/index.cjs +0 -2
  391. package/dist/services/toolDescription/index.cjs.map +0 -1
  392. package/dist/services/toolDescription/index.mjs +0 -2
  393. package/dist/services/toolDescription/index.mjs.map +0 -1
  394. package/dist/services/versioned/index.cjs +0 -2
  395. package/dist/services/versioned/index.cjs.map +0 -1
  396. package/dist/services/versioned/index.mjs +0 -2
  397. package/dist/services/versioned/index.mjs.map +0 -1
  398. package/dist/services/webSubagentCatalog/index.cjs +0 -2
  399. package/dist/services/webSubagentCatalog/index.cjs.map +0 -1
  400. package/dist/services/webSubagentCatalog/index.mjs +0 -2
  401. package/dist/services/webSubagentCatalog/index.mjs.map +0 -1
  402. package/dist/subagent-policy.cjs +0 -1
  403. package/dist/subagent-policy.d.cts +0 -2
  404. package/dist/subagent-policy.d.mts +0 -2
  405. package/dist/subagent-policy.mjs +0 -1
  406. package/dist/subagent-tool.cjs +0 -1
  407. package/dist/subagent-tool.d.cts +0 -2
  408. package/dist/subagent-tool.d.mts +0 -2
  409. package/dist/subagent-tool.mjs +0 -1
  410. package/dist/teamSnapshot.cjs +0 -1
  411. package/dist/teamSnapshot.d.cts +0 -2
  412. package/dist/teamSnapshot.d.mts +0 -2
  413. package/dist/teamSnapshot.mjs +0 -1
  414. package/dist/tools/intercom.cjs +0 -2
  415. package/dist/tools/intercom.cjs.map +0 -1
  416. package/dist/tools/intercom.mjs +0 -2
  417. package/dist/tools/intercom.mjs.map +0 -1
  418. package/dist/tools/subagent.cjs +0 -2
  419. package/dist/tools/subagent.cjs.map +0 -1
  420. package/dist/tools/subagent.mjs +0 -2
  421. package/dist/tools/subagent.mjs.map +0 -1
  422. package/dist/tui/agentCatalog.cjs +0 -3
  423. package/dist/tui/agentCatalog.cjs.map +0 -1
  424. package/dist/tui/agentCatalog.mjs +0 -3
  425. package/dist/tui/agentCatalog.mjs.map +0 -1
  426. package/dist/tui/agentResourceProjection.cjs +0 -2
  427. package/dist/tui/agentResourceProjection.cjs.map +0 -1
  428. package/dist/tui/agentResourceProjection.mjs +0 -2
  429. package/dist/tui/agentResourceProjection.mjs.map +0 -1
  430. package/dist/tui/completionNotice.cjs +0 -5
  431. package/dist/tui/completionNotice.cjs.map +0 -1
  432. package/dist/tui/completionNotice.mjs +0 -5
  433. package/dist/tui/completionNotice.mjs.map +0 -1
  434. package/dist/tui/contributions.cjs +0 -2
  435. package/dist/tui/contributions.cjs.map +0 -1
  436. package/dist/tui/contributions.mjs +0 -2
  437. package/dist/tui/contributions.mjs.map +0 -1
  438. package/dist/tui/fleet.cjs +0 -3
  439. package/dist/tui/fleet.cjs.map +0 -1
  440. package/dist/tui/fleet.mjs +0 -3
  441. package/dist/tui/fleet.mjs.map +0 -1
  442. package/dist/tui/fleetAgentView.cjs +0 -2
  443. package/dist/tui/fleetAgentView.cjs.map +0 -1
  444. package/dist/tui/fleetAgentView.mjs +0 -2
  445. package/dist/tui/fleetAgentView.mjs.map +0 -1
  446. package/dist/tui/fleetStatus.cjs +0 -2
  447. package/dist/tui/fleetStatus.cjs.map +0 -1
  448. package/dist/tui/fleetStatus.mjs +0 -2
  449. package/dist/tui/fleetStatus.mjs.map +0 -1
  450. package/dist/tui/fleetTranscript.cjs +0 -4
  451. package/dist/tui/fleetTranscript.cjs.map +0 -1
  452. package/dist/tui/fleetTranscript.mjs +0 -4
  453. package/dist/tui/fleetTranscript.mjs.map +0 -1
  454. package/dist/tui/slashRunNotice.cjs +0 -3
  455. package/dist/tui/slashRunNotice.cjs.map +0 -1
  456. package/dist/tui/slashRunNotice.mjs +0 -3
  457. package/dist/tui/slashRunNotice.mjs.map +0 -1
  458. package/dist/tui/subagentToolRender.cjs +0 -3
  459. package/dist/tui/subagentToolRender.cjs.map +0 -1
  460. package/dist/tui/subagentToolRender.mjs +0 -3
  461. package/dist/tui/subagentToolRender.mjs.map +0 -1
  462. package/dist/types/agent.d.cts +0 -119
  463. package/dist/types/agent.d.cts.map +0 -1
  464. package/dist/types/agent.d.mts +0 -119
  465. package/dist/types/agent.d.mts.map +0 -1
  466. package/dist/types/environment.cjs +0 -2
  467. package/dist/types/environment.cjs.map +0 -1
  468. package/dist/types/environment.d.cts +0 -63
  469. package/dist/types/environment.d.cts.map +0 -1
  470. package/dist/types/environment.d.mts +0 -63
  471. package/dist/types/environment.d.mts.map +0 -1
  472. package/dist/types/environment.mjs +0 -2
  473. package/dist/types/environment.mjs.map +0 -1
  474. package/dist/types/index.d.cts +0 -16
  475. package/dist/types/index.d.cts.map +0 -1
  476. package/dist/types/index.d.mts +0 -16
  477. package/dist/types/index.d.mts.map +0 -1
  478. package/dist/types/webSubagents.cjs +0 -2
  479. package/dist/types/webSubagents.cjs.map +0 -1
  480. package/dist/types/webSubagents.mjs +0 -2
  481. package/dist/types/webSubagents.mjs.map +0 -1
  482. package/src/extensions/web.ts +0 -75
  483. package/src/types/webSubagents.ts +0 -77
  484. package/src/web/api/catalog.ts +0 -76
  485. package/src/web/api/runActionsSlot.ts +0 -8
  486. package/src/web/components/AgentCatalogDrawer.tsx +0 -241
  487. package/src/web/components/AgentThreadPanel.tsx +0 -134
  488. package/src/web/components/AgentsActivitySection.tsx +0 -107
  489. package/src/web/components/IntercomToolMessage.tsx +0 -64
  490. package/src/web/components/LaunchAgentDialog.tsx +0 -194
  491. package/src/web/components/RunControl.tsx +0 -70
  492. package/src/web/components/SubagentToolMessage.tsx +0 -68
  493. package/src/web/components/SubagentsPanel.tsx +0 -493
  494. package/src/web/components/toolRenderers.ts +0 -14
  495. package/src/web/lib/format.ts +0 -21
  496. package/src/web/lib/launchCommand.ts +0 -69
  497. package/src/web/lib/toolText.ts +0 -125
  498. package/src/web/stores/catalogStore.ts +0 -138
  499. package/src/web/stores/subagentsStore.ts +0 -146
  500. package/src/web/tsconfig.json +0 -22
package/README.md CHANGED
@@ -77,6 +77,24 @@ than an inline child transcript. A shutdown requests suspension and writes resto
77
77
  session can list suspended work and explicitly restore it. Reopening does not automatically restart
78
78
  children, and Team does not promise that every run continues after its parent exits.
79
79
 
80
+ ## Agent identity
81
+
82
+ Every spawned agent is given a generated identity of the form `{name}-{role}-{number}`, for example
83
+ `alan-reviewer-3`. The role comes from the agent name with its package prefix dropped, and the number
84
+ counts every agent in the session, so no two agents share an identity. An agent defined inline, with
85
+ no agent file on disk, is shown as `bea-developer-2 (inline)`.
86
+
87
+ The identity is the intercom member id, not a label beside one, so a peer can address exactly what it
88
+ is shown:
89
+
90
+ ```text
91
+ intercom({ action: "send", to: "alan-reviewer-3", message: "..." })
92
+ subagent({ action: "status", id: "alan-reviewer-3" })
93
+ ```
94
+
95
+ Run ids keep working everywhere, and they win when a name and an id collide. A restored run keeps the
96
+ identity its peers already know rather than being renamed. Identities are unique within one root
97
+ session and are not reused when a run ends.
80
98
  The root session scopes run results, transcripts, control inboxes, membership, intercom, and
81
99
  suspended records. State is stored in private, per-user temporary directories with per-session
82
100
  subdirectories. Suspended records are recoverable only while those temporary files remain. Launch
@@ -137,6 +155,6 @@ MIT
137
155
 
138
156
  ## Source and lifecycle
139
157
 
140
- `src/extensions/pi.ts`, `server.ts`, and `web.ts` are the host entries. They compose controllers, native tool declarations, and named services. Controllers coordinate services and models; TUI rendering stays in `src/tui`. Public capabilities live in flat `src/exports` files and build separately from host entries.
158
+ The host entries are generated from `src/extensions/`. Pi commands, tools, hooks, and its root live under `workspaces/sessions/(backend)` because they serve the active Pi session. The session frontend owns message renderers, the fleet and catalog `overlay/*.cli.ts` views, their private presentation helpers, and the `tool/subagent.cli.ts` renderer. The CLI and server session roots hold state, service injection, startup work, and cleanup. The server session backend also owns its API and resources. Team's hub relay channels live in the global backend tree. `src/services` holds platform-agnostic logic, and public capabilities live in flat `src/exports` files.
141
159
 
142
- The Pi and server helpers own contribution registration and disposal. Team's collaboration service replaces session fibers explicitly, uses the injected session only when its session manager matches, and otherwise mounts in the standalone plugin context. Losing that injected session disposes its collaboration fiber.
160
+ The routed files own contribution registration. Team's collaboration service replaces session fibers explicitly, uses the injected session only when its session manager matches, and otherwise mounts in the standalone plugin context. Losing that injected session disposes its collaboration fiber.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agimon-ai/doompi-team",
3
- "version": "0.0.1-alpha.72",
3
+ "version": "0.0.1-alpha.75",
4
4
  "description": "Asynchronous named subagents, team runs, intercom, and model policy for Pi coding agents.",
5
5
  "keywords": [
6
6
  "agent-team",
@@ -26,93 +26,117 @@
26
26
  "directory": "layers/team/doompi-team"
27
27
  },
28
28
  "files": [
29
- "dist",
30
- "src/web",
31
- "src/extensions/web.ts",
32
- "src/types/webSubagents.ts",
33
- "!src/web/**/*.stories.tsx"
29
+ "dist"
34
30
  ],
35
31
  "type": "module",
36
- "types": "./dist/index.d.mts",
32
+ "main": "./dist/index.cjs",
33
+ "module": "./dist/index.mjs",
34
+ "types": "./dist/index.d.cts",
37
35
  "jsnext:main": "./dist/index.mjs",
38
36
  "exports": {
39
- ".": "./dist/index.mjs",
37
+ ".": {
38
+ "types": "./dist/index.d.mts",
39
+ "import": "./dist/index.mjs",
40
+ "require": "./dist/index.cjs"
41
+ },
42
+ "./api-contracts": {
43
+ "types": "./dist/api-contracts.d.mts",
44
+ "import": "./dist/api-contracts.mjs",
45
+ "require": "./dist/api-contracts.cjs"
46
+ },
40
47
  "./capability-ceiling": {
41
- "types": "./dist/capabilityCeiling.d.mts",
42
- "import": "./dist/capabilityCeiling.mjs",
43
- "require": "./dist/capabilityCeiling.cjs"
48
+ "types": "./dist/capability-ceiling.d.mts",
49
+ "import": "./dist/capability-ceiling.mjs",
50
+ "require": "./dist/capability-ceiling.cjs"
44
51
  },
45
52
  "./delegation": {
46
53
  "types": "./dist/delegation.d.mts",
47
54
  "import": "./dist/delegation.mjs",
48
55
  "require": "./dist/delegation.cjs"
49
56
  },
50
- "./team-snapshot": {
51
- "types": "./dist/teamSnapshot.d.mts",
52
- "import": "./dist/teamSnapshot.mjs",
53
- "require": "./dist/teamSnapshot.cjs"
57
+ "./delegation-api": {
58
+ "types": "./dist/delegation-api.d.mts",
59
+ "import": "./dist/delegation-api.mjs",
60
+ "require": "./dist/delegation-api.cjs"
61
+ },
62
+ "./env": {
63
+ "types": "./dist/env.d.mts",
64
+ "import": "./dist/env.mjs",
65
+ "require": "./dist/env.cjs"
66
+ },
67
+ "./extensions/pi": {
68
+ "types": "./dist/extensions/pi.d.mts",
69
+ "import": "./dist/extensions/pi.mjs",
70
+ "require": "./dist/extensions/pi.cjs"
54
71
  },
55
- "./env": "./dist/env.mjs",
56
- "./extensions/pi": "./dist/extensions/pi.mjs",
57
72
  "./extensions/server": {
58
73
  "types": "./dist/extensions/server.d.mts",
59
74
  "import": "./dist/extensions/server.mjs",
60
75
  "require": "./dist/extensions/server.cjs"
61
76
  },
62
- "./package.json": "./package.json",
63
- "./subagent-tool": {
64
- "types": "./dist/subagent-tool.d.mts",
65
- "import": "./dist/subagent-tool.mjs",
66
- "require": "./dist/subagent-tool.cjs"
67
- },
68
- "./subagent-policy": {
69
- "types": "./dist/subagent-policy.d.mts",
70
- "import": "./dist/subagent-policy.mjs",
71
- "require": "./dist/subagent-policy.cjs"
77
+ "./extensions/web": {
78
+ "import": "./dist/extensions/web.mjs"
72
79
  },
73
80
  "./fable-plan": {
74
81
  "types": "./dist/fable-plan.d.mts",
75
82
  "import": "./dist/fable-plan.mjs",
76
83
  "require": "./dist/fable-plan.cjs"
77
84
  },
78
- "./delegation-api": {
79
- "types": "./dist/delegation-api.d.mts",
80
- "import": "./dist/delegation-api.mjs",
81
- "require": "./dist/delegation-api.cjs"
85
+ "./fable-plan-api": {
86
+ "types": "./dist/fable-plan-api.d.mts",
87
+ "import": "./dist/fable-plan-api.mjs",
88
+ "require": "./dist/fable-plan-api.cjs"
82
89
  },
83
- "./runtime-subagent-tool": {
84
- "types": "./dist/runtime-subagent-tool.d.mts",
85
- "import": "./dist/runtime-subagent-tool.mjs",
86
- "require": "./dist/runtime-subagent-tool.cjs"
90
+ "./runs/background/cliRunnerEntry": {
91
+ "types": "./dist/runs/background/cliRunnerEntry.d.mts",
92
+ "import": "./dist/runs/background/cliRunnerEntry.mjs",
93
+ "require": "./dist/runs/background/cliRunnerEntry.cjs"
87
94
  },
88
95
  "./runtime-subagent-policy": {
89
96
  "types": "./dist/runtime-subagent-policy.d.mts",
90
97
  "import": "./dist/runtime-subagent-policy.mjs",
91
98
  "require": "./dist/runtime-subagent-policy.cjs"
92
99
  },
93
- "./fable-plan-api": {
94
- "types": "./dist/fable-plan-api.d.mts",
95
- "import": "./dist/fable-plan-api.mjs",
96
- "require": "./dist/fable-plan-api.cjs"
97
- }
100
+ "./runtime-subagent-tool": {
101
+ "types": "./dist/runtime-subagent-tool.d.mts",
102
+ "import": "./dist/runtime-subagent-tool.mjs",
103
+ "require": "./dist/runtime-subagent-tool.cjs"
104
+ },
105
+ "./subagent-policy": {
106
+ "types": "./dist/subagent-policy.d.mts",
107
+ "import": "./dist/subagent-policy.mjs",
108
+ "require": "./dist/subagent-policy.cjs"
109
+ },
110
+ "./subagent-tool": {
111
+ "types": "./dist/subagent-tool.d.mts",
112
+ "import": "./dist/subagent-tool.mjs",
113
+ "require": "./dist/subagent-tool.cjs"
114
+ },
115
+ "./team-snapshot": {
116
+ "types": "./dist/team-snapshot.d.mts",
117
+ "import": "./dist/team-snapshot.mjs",
118
+ "require": "./dist/team-snapshot.cjs"
119
+ },
120
+ "./package.json": "./package.json"
98
121
  },
99
122
  "publishConfig": {
100
123
  "access": "public",
101
124
  "registry": "https://registry.npmjs.org/"
102
125
  },
103
126
  "dependencies": {
104
- "@agimon-ai/doompi-cache": "0.0.1-alpha.38",
105
- "@agimon-ai/doompi-config": "0.0.1-alpha.71",
106
- "@agimon-ai/doompi-core": "0.0.1-alpha.72",
107
- "@agimon-ai/doompi-telemetry": "0.0.1-alpha.69",
108
- "@agimon-ai/doompi-ui": "0.0.1-alpha.72",
109
- "@agimon-ai/doompi-web-components": "0.0.1-alpha.30",
110
- "@agimon-ai/doompi-web-security": "0.0.1-alpha.32",
127
+ "@agimon-ai/doompi-cache": "0.0.1-alpha.41",
128
+ "@agimon-ai/doompi-config": "0.0.1-alpha.74",
129
+ "@agimon-ai/doompi-core": "0.0.1-alpha.75",
130
+ "@agimon-ai/doompi-telemetry": "0.0.1-alpha.72",
131
+ "@agimon-ai/doompi-ui": "0.0.1-alpha.75",
132
+ "@agimon-ai/doompi-web-components": "0.0.1-alpha.33",
133
+ "@agimon-ai/doompi-web-security": "0.0.1-alpha.35",
111
134
  "@deepseek-ai/cordis": "4.0.2",
112
135
  "typebox": "1.3.30",
113
136
  "yaml": "2.9.0"
114
137
  },
115
138
  "devDependencies": {
139
+ "@agimon-ai/doompi-build": "0.0.1-alpha.4",
116
140
  "@earendil-works/pi-agent-core": "0.85.1",
117
141
  "@earendil-works/pi-ai": "0.85.1",
118
142
  "@earendil-works/pi-coding-agent": "0.85.1",
@@ -151,12 +175,12 @@
151
175
  "node": ">=22.19.0"
152
176
  },
153
177
  "doompiServer": {
154
- "entry": "./src/extensions/server.ts",
178
+ "entry": "./generated/server.ts",
155
179
  "dist": "./dist/extensions/server.mjs",
156
180
  "scopes": [
157
- "session",
158
181
  "global",
159
- "workspace"
182
+ "workspace",
183
+ "session"
160
184
  ],
161
185
  "contracts": {
162
186
  "entry": "./src/exports/apiContracts.ts",
@@ -166,10 +190,10 @@
166
190
  "doompiWeb": {
167
191
  "pluginId": "subagents",
168
192
  "channels": [
169
- "subagent_runs",
170
- "subagent_catalog"
193
+ "subagent_catalog",
194
+ "subagent_runs"
171
195
  ],
172
- "client": "./src/extensions/web.ts",
196
+ "client": "./dist/extensions/web.mjs",
173
197
  "scopes": [
174
198
  "session"
175
199
  ]
@@ -183,7 +207,7 @@
183
207
  "build": "tsdown",
184
208
  "test": "vitest --run",
185
209
  "test-system": "vitest run --config vitest.system.config.ts",
186
- "typecheck": "tsc --noEmit && tsc --noEmit -p src/web/tsconfig.json",
210
+ "typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.web.json",
187
211
  "lint": "oxlint . && oxfmt . --check",
188
212
  "fixcode": "oxlint . --fix && oxfmt ."
189
213
  }
@@ -1 +0,0 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));exports.__toESM=s;
@@ -1 +0,0 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./schemas/apiContracts.cjs");exports.apiContracts=e.apiContracts,exports.default=e.apiContracts;
@@ -1,2 +0,0 @@
1
- import { apiContracts } from "./schemas/apiContracts.cjs";
2
- export { apiContracts, apiContracts as default };
@@ -1,2 +0,0 @@
1
- import { apiContracts } from "./schemas/apiContracts.mjs";
2
- export { apiContracts, apiContracts as default };
@@ -1 +0,0 @@
1
- import{apiContracts as e}from"./schemas/apiContracts.mjs";export{e as apiContracts,e as default};
@@ -1 +0,0 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./types/environment.cjs"),t=require("./schemas/team/capabilityCeiling.cjs");exports.SUBAGENT_CAPABILITY_CEILING_ENV=e.SUBAGENT_CAPABILITY_CEILING_ENV,exports.SUBAGENT_CAPABILITY_CEILING_VERSION=t.SUBAGENT_CAPABILITY_CEILING_VERSION,exports.SubagentCapabilityPolicyStore=t.SubagentCapabilityPolicyStore,exports.decodeSubagentCapabilityCeiling=t.decodeSubagentCapabilityCeiling,exports.encodeSubagentCapabilityCeiling=t.encodeSubagentCapabilityCeiling,exports.intersectSubagentCapabilityCeilings=t.intersectSubagentCapabilityCeilings,exports.parseSubagentCapabilityCeiling=t.parseSubagentCapabilityCeiling;
@@ -1,3 +0,0 @@
1
- import { SUBAGENT_CAPABILITY_CEILING_ENV } from "./types/environment.cjs";
2
- import { ResolvedSubagentCapabilityCeiling, SUBAGENT_CAPABILITY_CEILING_VERSION, SubagentCapabilityAudit, SubagentCapabilityCeiling, SubagentCapabilityPolicyStore, decodeSubagentCapabilityCeiling, encodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, parseSubagentCapabilityCeiling } from "./schemas/team/capabilityCeiling.cjs";
3
- export { ResolvedSubagentCapabilityCeiling, SUBAGENT_CAPABILITY_CEILING_ENV, SUBAGENT_CAPABILITY_CEILING_VERSION, SubagentCapabilityAudit, SubagentCapabilityCeiling, SubagentCapabilityPolicyStore, decodeSubagentCapabilityCeiling, encodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, parseSubagentCapabilityCeiling };
@@ -1,3 +0,0 @@
1
- import { SUBAGENT_CAPABILITY_CEILING_ENV } from "./types/environment.mjs";
2
- import { ResolvedSubagentCapabilityCeiling, SUBAGENT_CAPABILITY_CEILING_VERSION, SubagentCapabilityAudit, SubagentCapabilityCeiling, SubagentCapabilityPolicyStore, decodeSubagentCapabilityCeiling, encodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, parseSubagentCapabilityCeiling } from "./schemas/team/capabilityCeiling.mjs";
3
- export { ResolvedSubagentCapabilityCeiling, SUBAGENT_CAPABILITY_CEILING_ENV, SUBAGENT_CAPABILITY_CEILING_VERSION, SubagentCapabilityAudit, SubagentCapabilityCeiling, SubagentCapabilityPolicyStore, decodeSubagentCapabilityCeiling, encodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, parseSubagentCapabilityCeiling };
@@ -1 +0,0 @@
1
- import{SUBAGENT_CAPABILITY_CEILING_ENV as e}from"./types/environment.mjs";import{SUBAGENT_CAPABILITY_CEILING_VERSION as t,SubagentCapabilityPolicyStore as n,decodeSubagentCapabilityCeiling as r,encodeSubagentCapabilityCeiling as i,intersectSubagentCapabilityCeilings as a,parseSubagentCapabilityCeiling as o}from"./schemas/team/capabilityCeiling.mjs";export{e as SUBAGENT_CAPABILITY_CEILING_ENV,t as SUBAGENT_CAPABILITY_CEILING_VERSION,n as SubagentCapabilityPolicyStore,r as decodeSubagentCapabilityCeiling,i as encodeSubagentCapabilityCeiling,a as intersectSubagentCapabilityCeilings,o as parseSubagentCapabilityCeiling};
@@ -1,2 +0,0 @@
1
- exports.SUBAGENT_SAFETY_GUIDANCE=`Give every child a self-contained task; coordination and further delegation depend on the Team package policy.`;
2
- //# sourceMappingURL=team.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"team.cjs","names":[],"sources":["../../src/constants/team.ts"],"sourcesContent":["export const SUBAGENT_SAFETY_GUIDANCE =\n 'Give every child a self-contained task; coordination and further delegation depend on the Team package policy.';\n"],"mappings":""}
@@ -1,2 +0,0 @@
1
- const e=`Give every child a self-contained task; coordination and further delegation depend on the Team package policy.`;export{e as SUBAGENT_SAFETY_GUIDANCE};
2
- //# sourceMappingURL=team.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"team.mjs","names":[],"sources":["../../src/constants/team.ts"],"sourcesContent":["export const SUBAGENT_SAFETY_GUIDANCE =\n 'Give every child a self-contained task; coordination and further delegation depend on the Team package policy.';\n"],"mappings":"AAAA,MAAa,EACX"}
@@ -1,4 +0,0 @@
1
- const e=require("../services/asyncJobTracker/index.cjs"),t=require("../services/chainExpression/index.cjs"),n=require("../services/sessionPaths/index.cjs"),r=require("../services/doctor/index.cjs"),i=require("../services/modelResolution/index.cjs"),a=require("../services/modelFallback/index.cjs"),o=require("../services/spawnPlan/index.cjs"),s=require("../services/spawnRequestMapping/index.cjs"),c=require("../services/subagentLaunch/index.cjs"),l=require("../models/slashResult.cjs");let u=require("@agimon-ai/doompi-core/child-process");function d(e,t){return n.createSessionScope((0,u.resolveRootSessionId)(e.sessionManager.getSessionId(),t))}function f(e,t,n){e.sendMessage({customType:l.SLASH_RESULT_CUSTOM_TYPE,content:t,display:!0,...n?{details:n}:{}})}function p(e,t){e.hasUI&&e.ui.setStatus(`subagent-slash`,t)}function m(e,t){e.ui.notify(t,`error`)}function h(e,t){e.ui.notify(t,`info`)}function g(e){return e?e.attentionReason?`${e.status??`running`} - needs attention: ${e.attentionReason}`:e.activityState?`${e.status??`running`} - ${e.activityState}`:e.status??`running`:`starting…`}function _(t,n,r,i,a,o){c.watchTrackedRunUntilTerminal(r.scheduler,i,a,r=>{if(p(n,`${o} (${a}): ${g(r)}`),r?.status===void 0||!e.TERMINAL_ASYNC_JOB_STATES.has(r.status))return;p(n,void 0);let i=r.status===`complete`||r.status===`completed`?`completed`:r.status;f(t,r.error?`## Subagent ${i}\n\n${o} (${a})\n\n${r.error}`:`## Subagent ${i}\n\n${o} (${a})`,[{agent:o,runId:a,status:i,...r.error?{error:r.error}:{}}])})}function v(e,t,n,r,i){let a=i.outcomes.filter(e=>e.runId),o=i.outcomes.filter(e=>!e.runId);if(a.length>0){f(e,`## Subagent started\n\n${a.map(e=>`${e.agent} (${e.runId})${e.warning?`\n Warning: ${e.warning}`:``}`).join(`, `)}`,a.map(e=>({agent:e.agent,runId:e.runId??``,status:`started`,...e.warning?{warning:e.warning}:{}}))),p(t,`${a.length} run${a.length===1?``:`s`} started…`);for(let i of a)i.runId&&_(e,t,n,r,i.runId,i.agent)}o.length>0&&m(t,`Some subagents failed to start:\n${o.map(e=>`${e.agent}: ${e.error??`spawn failed`}`).join(`
2
- `)}`)}function y(e,t){if(e.baseCwd)return e.baseCwd;m(t,`Subagent session cwd is not initialized yet`)}function b(e,t,n,r){return e.discovery.discover(t,`both`).agents.find(e=>e.name===n)?!0:(m(r,`Unknown agent: ${n}`),!1)}async function x(e,n,r,l,u){let f=r.baseCwd;if(!f)return{ok:!1,message:`Subagent session cwd is not initialized yet`};if(!l.discovery.discover(f,`both`).agents.find(e=>e.name===u.agent))return{ok:!1,message:`Unknown agent: ${u.agent}`};let p=d(n,l.environment),m=l.tracker.forSession(n.sessionManager.getSessionId(),p);try{let t=o.captureSessionForkSource(n.sessionManager,`settled`),r=a.normalizeParentModel(n.model),d=s.taskInputFromParsedStep({name:u.agent,config:u.config??{},task:u.task},f,u.fork?`fork`:void 0),h=await c.launchSingleSubagent(l.spawnPlanner,m,{agent:d.agent,task:d.task??``,cwd:d.cwd??f,agentScope:`both`,sessionScope:p,parentSessionId:n.sessionManager.getSessionId(),...d.model?{model:d.model}:{},...d.context?{context:d.context}:{},...t?{parentForkSource:t.terminalSource,...t.sessionFile?{parentSessionFile:t.sessionFile}:{},parentLeafId:t.leafId}:{},availableModels:i.authenticatedModelInfos(n.modelRegistry),...r?{parentModel:r}:{}},l.loadConfig());return v(e,n,l,m,h),{ok:!0,result:h}}catch(e){if(e instanceof s.UnsupportedInlineConfigError||e instanceof t.SlashParseError)return{ok:!1,message:e.message};throw e}}function S(e,t,n,r,i){x(e,t,n,r,i).then(e=>{e.ok||m(t,e.message)},e=>{m(t,`Subagent launch failed: ${e instanceof Error?e.message:String(e)}`)})}function C(e,n){if(n instanceof s.UnsupportedInlineConfigError||n instanceof t.SlashParseError){m(e,n.message);return}throw n}function w(e){let n=e.trim();if(n.includes(` -> `)){let e=n.split(` -> `).map(e=>e.trim()).filter(Boolean).map(e=>t.parseSingleTaskToken(e));return e.length===0?void 0:{steps:e,task:e.find(e=>e.task)?.task??``,perStep:!0}}let r=n.indexOf(` -- `);if(r===-1)return;let i=n.slice(0,r).trim(),a=n.slice(r+4).trim();if(!i||!a)return;let o=i.split(/\s+/).filter(Boolean).map(e=>t.parseSingleTaskToken(e));if(o.length!==0)return{steps:o,task:a,perStep:!1}}function T(n,l,u){return[[`run`,{description:`Run a subagent in the background: /run agent[model=x] [task] [--fork]`,handler:async(e,r)=>{let{args:i,fork:a}=t.extractForkFlag(e),o=i.trim();if(!o){m(r,`Usage: /run <agent> [task] [--fork]`);return}let s=o.indexOf(` `),{name:c,config:d}=t.parseAgentToken(s===-1?o:o.slice(0,s)),f=await x(n,r,l,u,{agent:c,task:s===-1?``:o.slice(s+1).trim(),config:d,fork:a});f.ok||m(r,f.message)}}],[`parallel`,{description:`Run agents in parallel: /parallel scout "task1" -> reviewer "task2" [--fork]`,handler:async(e,r)=>{let f=d(r,u.environment),p=u.tracker.forSession(r.sessionManager.getSessionId(),f),{args:h,fork:g}=t.extractForkFlag(e),_=y(l,r);if(!_)return;let x=w(h);if(!x){m(r,`Usage: /parallel agent1 "task1" -> agent2 "task2"`);return}for(let e of x.steps)if(!b(u,_,e.name,r))return;if(!x.steps.some(e=>e.task)&&!x.task){m(r,`At least one step must have a task`);return}try{let e=o.captureSessionForkSource(r.sessionManager,`settled`),t=a.normalizeParentModel(r.model),l=x.steps.map(e=>s.taskInputFromParsedStep({name:e.name,config:e.config,task:e.task??x.task},_,g?`fork`:void 0));v(n,r,u,p,await c.launchParallelSubagents(u.spawnPlanner,p,{tasks:l,cwd:_,agentScope:`both`,sessionScope:f,parentSessionId:r.sessionManager.getSessionId(),...e?{parentForkSource:e.terminalSource,...e.sessionFile?{parentSessionFile:e.sessionFile}:{},parentLeafId:e.leafId}:{},availableModels:i.authenticatedModelInfos(r.modelRegistry),...t?{parentModel:t}:{}},u.loadConfig()))}catch(e){C(r,e)}}}],[`subagents-doctor`,{description:`Show subagent diagnostics`,handler:async(e,t)=>{f(n,r.buildDoctorReport({cwd:t.cwd,agentScope:`both`,scope:d(t,u.environment)},{discovery:u.discovery,skills:u.skills}))}}],[`subagents-steer`,{description:`Send guidance to a running subagent: /subagents-steer <run-id> <message>`,handler:async(e,t)=>{let n=e.trim(),r=n.search(/\s/);if(r===-1||!n.slice(r+1).trim()){m(t,`Usage: /subagents-steer <run-id> <message>`);return}let i=n.slice(0,r),a=n.slice(r+1).trim();try{u.management.bindSessionScope(d(t,u.environment));let e=await u.management.steer(i,a),n=`Steering ${e.state} for ${i}: ${e.message}`;e.state===`failed`?m(t,n):h(t,n)}catch(e){m(t,e instanceof Error?e.message:`Could not steer '${i}'.`)}}}],[`subagents-stop`,{description:`Stop a running subagent: /subagents-stop [run-id]`,handler:async(t,r)=>{let i=d(r,u.environment);u.management.bindSessionScope(i);let a=u.tracker.forSession(r.sessionManager.getSessionId(),i),o=t.trim();if(!o){f(n,E(a.list()));return}try{await u.management.stop(e.resolveTrackedRunId(a,o)),h(r,`Stop requested for ${o}. The run reports its own final state once it acknowledges.`)}catch(e){m(r,e instanceof Error?e.message:`Could not stop '${o}'.`)}}}]]}function E(e){let t=e.filter(e=>e.status===`running`||e.status===`pending`);return t.length===0?`No running subagents to stop.`:[`Running subagents:`,...t.map(e=>`- ${e.runId}${e.status?` (${e.status})`:``}`),``,"Stop one with `/subagents-stop <run-id>`, or open `/subagents-fleet` to inspect and control them interactively."].join(`
3
- `)}exports.createSlashCommands=T,exports.launchSingleAgentRun=x,exports.startSingleAgentRun=S;
4
- //# sourceMappingURL=slashCommands.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slashCommands.cjs","names":["createSessionScope","resolveRootSessionId","SLASH_RESULT_CUSTOM_TYPE","TERMINAL_ASYNC_JOB_STATES","captureSessionForkSource","normalizeParentModel","taskInputFromParsedStep","launchSingleSubagent","authenticatedModelInfos","UnsupportedInlineConfigError","SlashParseError","parseSingleTaskToken","extractForkFlag","parseAgentToken","launchParallelSubagents","buildDoctorReport","resolveTrackedRunId"],"sources":["../../src/controllers/slashCommands.ts"],"sourcesContent":["/**\n * The core `/run`, `/chain`, `/parallel` slash commands. Replaces the\n * always-blocking predecessor with the async-only shape this port settled\n * on: a command launches a spawn, sends an initial status message, and\n * hands off to `watchTrackedRunUntilTerminal` (render-key gated, backed by\n * `PollScheduler`) to update the status bar and finalize the message once\n * the run reaches a terminal state - never by awaiting completion. See\n * `subagentLaunch.ts`'s module doc for the full reasoning.\n *\n * WHAT IS NOT HERE, AND WHY:\n * - `/run-chain`, `/prompt-workflow` and `/chain-prompts`: the whole SAVED\n * work surface - saved agent pipelines (`ChainConfig`, never ported) and\n * saved `.md` prompt templates (ported, then deleted). REMOVED BY\n * DECISION, not deferred: overly complicated for the use they were\n * getting. Do not re-add them because a reader notices the predecessor had\n * them. Ad-hoc chaining (`/chain scout \"x\" -> planner`) is a different\n * feature, lives in `chainExpression.ts`, and stays\n * - `/subagent-cost`: REMOVED BY DECISION. It reads usage/cost data\n * (`totalTokens`/`totalCost`) that nothing in this package's\n * runs/extensions surface tracks - a genuinely absent data source, and\n * building it would mean threading usage out of every child process\n * - `/subagents-check-profile`: removed at the source. Calls\n * `checkSubagentProfile`/`listSubagentProfiles`, which are referenced but\n * defined nowhere in the entire predecessor package - a live\n * `ReferenceError` that only shipped because that package sets\n * `noCheck: true`. Typecheck is on here; porting it faithfully would not\n * compile, and it was asked to be removed independently of that\n * - The `SUBAGENT_FLEET_COMMAND` registration and its `Ctrl+Alt+F` shortcut:\n * fleet view is its own piece, registered by whoever builds it\n * - Inline parallel groups within `/chain` (`(a | b)` syntax): the field\n * mapping for a group's own config exists (`spawnRequestMapping.ts`),\n * but wiring a group INTO a chain request is left for the same pass that\n * revisits per-task field support, so `/chain` reports a clear\n * not-yet-supported message rather than silently flattening a group\n * - `/subagents` (admin) command registration: a separate file, not yet\n * ported\n *\n * `/subagents-doctor` IS here, in `doctor.ts` - read (not ported) the\n * predecessor's foreground-executor `doctor` action before deciding, and it\n * turned out to be a small, mostly-mechanical port. See that module's own\n * doc for what it deliberately leaves out (chain counts, spawn-budget\n * reporting).\n *\n * AVOID:\n * - Awaiting a SINGLE/PARALLEL spawn for a result that will not exist yet.\n * See `subagentLaunch.ts`\n * - A private polling loop for a message's live status. Use\n * `watchTrackedRunUntilTerminal`\n */\n\nimport { resolveRootSessionId } from '@agimon-ai/doompi-core/child-process';\nimport type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';\n\nimport type { SkillDiscoveryContract } from '../services/agentSkills';\nimport type { AsyncJobTrackerContract, TrackedAsyncJobsContract, TrackedAsyncJob } from '../services/asyncJobTracker';\nimport { resolveTrackedRunId, TERMINAL_ASYNC_JOB_STATES } from '../services/asyncJobTracker';\nimport {\n extractForkFlag,\n type InlineConfig,\n type ParsedStep,\n parseAgentToken,\n parseSingleTaskToken,\n SlashParseError,\n} from '../services/chainExpression';\nimport type { ExtensionConfig } from '../services/config';\nimport { buildDoctorReport } from '../services/doctor';\nimport type { ManagementActionsContract } from '../services/managementActions';\nimport { normalizeParentModel } from '../services/modelFallback';\nimport { authenticatedModelInfos } from '../services/modelResolution';\nimport type { PollSchedulerContract } from '../services/pollScheduler';\nimport { createSessionScope } from '../services/sessionPaths';\nimport { captureSessionForkSource, type SpawnPlannerContract, type SpawnPlanResult } from '../services/spawnPlan';\nimport { taskInputFromParsedStep, UnsupportedInlineConfigError } from '../services/spawnRequestMapping';\nimport {\n launchParallelSubagents,\n launchSingleSubagent,\n watchTrackedRunUntilTerminal,\n} from '../services/subagentLaunch';\nimport type { AgentScope, AgentDiscoveryContract } from '../types/agent';\n\nexport interface SlashCommandDeps {\n spawnPlanner: SpawnPlannerContract;\n skills: SkillDiscoveryContract;\n tracker: AsyncJobTrackerContract;\n scheduler: PollSchedulerContract;\n discovery: AgentDiscoveryContract;\n /** Session-scoped typed management for status, prefix resolution, and control. */\n management: ManagementActionsContract;\n loadConfig: () => ExtensionConfig;\n environment: Readonly<Record<string, string | undefined>>;\n}\n\nexport interface SlashCommandState {\n baseCwd: string | undefined;\n}\n\nfunction sessionScopeFor(ctx: ExtensionContext, environment: Readonly<Record<string, string | undefined>>) {\n return createSessionScope(resolveRootSessionId(ctx.sessionManager.getSessionId(), environment));\n}\n\nconst SLASH_STATUS_KEY = 'subagent-slash';\nconst STARTED_STATUS = 'started';\n\n/**\n * The custom-message type a slash launch renders under. Cross-process\n * significant the same way `SUBAGENT_NOTIFY_MESSAGE_TYPE` is: the child-side\n * prompt runtime strips this type out of a child's inherited history\n * (`PARENT_ONLY_CUSTOM_MESSAGE_TYPES`), so both sides must agree on the literal.\n */\nimport { SLASH_RESULT_CUSTOM_TYPE, type SlashRunDetail } from '../models/slashResult';\nfunction sendSlashText(pi: ExtensionAPI, text: string, details?: SlashRunDetail[]): void {\n pi.sendMessage({\n customType: SLASH_RESULT_CUSTOM_TYPE,\n content: text,\n display: true,\n ...(details ? { details } : {}),\n });\n}\n\nfunction setSlashStatus(ctx: ExtensionContext, text: string | undefined): void {\n if (ctx.hasUI) ctx.ui.setStatus(SLASH_STATUS_KEY, text);\n}\n\nfunction notifyError(ctx: ExtensionContext, message: string): void {\n ctx.ui.notify(message, 'error');\n}\n\nfunction notifyInfo(ctx: ExtensionContext, message: string): void {\n ctx.ui.notify(message, 'info');\n}\n\nfunction statusTextFor(job: TrackedAsyncJob | undefined): string {\n if (!job) return 'starting…';\n if (job.attentionReason) return `${job.status ?? 'running'} - needs attention: ${job.attentionReason}`;\n if (job.activityState) return `${job.status ?? 'running'} - ${job.activityState}`;\n return job.status ?? 'running';\n}\n\n/**\n * Watches one launched run to a terminal state and finalizes its message.\n * Each launched run gets its own subscriber, so a PARALLEL launch's\n * siblings finalize independently rather than all waiting on the slowest.\n */\nfunction watchAndFinalize(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n deps: SlashCommandDeps,\n jobs: TrackedAsyncJobsContract,\n runId: string,\n agent: string,\n): void {\n watchTrackedRunUntilTerminal(deps.scheduler, jobs, runId, (job) => {\n setSlashStatus(ctx, `${agent} (${runId}): ${statusTextFor(job)}`);\n if (job?.status === undefined || !TERMINAL_ASYNC_JOB_STATES.has(job.status)) return;\n setSlashStatus(ctx, undefined);\n const outcome = job.status === 'complete' || job.status === 'completed' ? 'completed' : job.status;\n sendSlashText(\n pi,\n job.error\n ? `## Subagent ${outcome}\\n\\n${agent} (${runId})\\n\\n${job.error}`\n : `## Subagent ${outcome}\\n\\n${agent} (${runId})`,\n [{ agent, runId, status: outcome, ...(job.error ? { error: job.error } : {}) }],\n );\n });\n}\n\nfunction reportSpawnResult(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n deps: SlashCommandDeps,\n jobs: TrackedAsyncJobsContract,\n result: SpawnPlanResult,\n): void {\n const started = result.outcomes.filter((outcome) => outcome.runId);\n const failed = result.outcomes.filter((outcome) => !outcome.runId);\n if (started.length > 0) {\n const label = started\n .map(\n (outcome) => `${outcome.agent} (${outcome.runId})${outcome.warning ? `\\n Warning: ${outcome.warning}` : ''}`,\n )\n .join(', ');\n sendSlashText(\n pi,\n `## Subagent started\\n\\n${label}`,\n started.map((outcome) => ({\n agent: outcome.agent,\n runId: outcome.runId ?? '',\n status: STARTED_STATUS,\n ...(outcome.warning ? { warning: outcome.warning } : {}),\n })),\n );\n setSlashStatus(ctx, `${started.length} run${started.length === 1 ? '' : 's'} started…`);\n for (const outcome of started) {\n if (outcome.runId) watchAndFinalize(pi, ctx, deps, jobs, outcome.runId, outcome.agent);\n }\n }\n if (failed.length > 0) {\n const label = failed.map((outcome) => `${outcome.agent}: ${outcome.error ?? 'spawn failed'}`).join('\\n');\n notifyError(ctx, `Some subagents failed to start:\\n${label}`);\n }\n}\n\nfunction requireBaseCwd(state: SlashCommandState, ctx: ExtensionContext): string | undefined {\n if (state.baseCwd) return state.baseCwd;\n notifyError(ctx, 'Subagent session cwd is not initialized yet');\n return undefined;\n}\n\nfunction findAgentOrNotify(deps: SlashCommandDeps, baseCwd: string, name: string, ctx: ExtensionContext): boolean {\n const agents = deps.discovery.discover(baseCwd, 'both' satisfies AgentScope).agents;\n if (agents.find((agent) => agent.name === name)) return true;\n notifyError(ctx, `Unknown agent: ${name}`);\n return false;\n}\n\nexport interface SingleAgentRunRequest {\n agent: string;\n task: string;\n /** Inline `agent[model=x]` config from a slash token; surfaces without that syntax send none. */\n config?: InlineConfig;\n fork?: boolean;\n}\n\nexport type SingleAgentRunOutcome = { ok: true; result: SpawnPlanResult } | { ok: false; message: string };\n\n/**\n * One agent, one task: the shared body of `/run` and the agent catalog's\n * launch key (`SPC a l`, `r`/`R`).\n *\n * Returns `ok: false` with a user-facing message for the validation failures\n * both surfaces share rather than notifying itself, because the two report\n * in different idioms - a slash command notifies, and a fullscreen overlay\n * writes a notice into its own body, where a notification would be covered.\n * Started runs are still reported here through `reportSpawnResult`, which is\n * what tracks them and finalizes their message; that is identical for both.\n */\nexport async function launchSingleAgentRun(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n state: SlashCommandState,\n deps: SlashCommandDeps,\n request: SingleAgentRunRequest,\n): Promise<SingleAgentRunOutcome> {\n const baseCwd = state.baseCwd;\n if (!baseCwd) return { ok: false, message: 'Subagent session cwd is not initialized yet' };\n const agents = deps.discovery.discover(baseCwd, 'both' satisfies AgentScope).agents;\n if (!agents.find((agent) => agent.name === request.agent)) {\n return { ok: false, message: `Unknown agent: ${request.agent}` };\n }\n const scope = sessionScopeFor(ctx, deps.environment);\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId(), scope);\n try {\n const parentForkSource = captureSessionForkSource(ctx.sessionManager, 'settled');\n const parentModel = normalizeParentModel(ctx.model);\n const taskInput = taskInputFromParsedStep(\n { name: request.agent, config: request.config ?? {}, task: request.task },\n baseCwd,\n request.fork ? 'fork' : undefined,\n );\n const result = await launchSingleSubagent(\n deps.spawnPlanner,\n jobs,\n {\n agent: taskInput.agent,\n task: taskInput.task ?? '',\n cwd: taskInput.cwd ?? baseCwd,\n agentScope: 'both',\n sessionScope: scope,\n parentSessionId: ctx.sessionManager.getSessionId(),\n ...(taskInput.model ? { model: taskInput.model } : {}),\n ...(taskInput.context ? { context: taskInput.context } : {}),\n ...(parentForkSource\n ? {\n parentForkSource: parentForkSource.terminalSource,\n ...(parentForkSource.sessionFile ? { parentSessionFile: parentForkSource.sessionFile } : {}),\n parentLeafId: parentForkSource.leafId,\n }\n : {}),\n availableModels: authenticatedModelInfos(ctx.modelRegistry),\n ...(parentModel ? { parentModel } : {}),\n },\n deps.loadConfig(),\n );\n reportSpawnResult(pi, ctx, deps, jobs, result);\n return { ok: true, result };\n } catch (error) {\n if (error instanceof UnsupportedInlineConfigError || error instanceof SlashParseError) {\n return { ok: false, message: error.message };\n }\n throw error;\n }\n}\n\n/**\n * `launchSingleAgentRun` for a surface that cannot await it - the agent\n * catalog closes on launch, so nothing is left to receive the outcome. The\n * failure paths report themselves here, once the overlay is gone and a\n * notification is visible again.\n */\nexport function startSingleAgentRun(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n state: SlashCommandState,\n deps: SlashCommandDeps,\n request: SingleAgentRunRequest,\n): void {\n void launchSingleAgentRun(pi, ctx, state, deps, request).then(\n (outcome) => {\n if (!outcome.ok) notifyError(ctx, outcome.message);\n },\n (error: unknown) => {\n notifyError(ctx, `Subagent launch failed: ${error instanceof Error ? error.message : String(error)}`);\n },\n );\n}\n\nfunction reportKnownErrorOrRethrow(ctx: ExtensionContext, error: unknown): void {\n if (error instanceof UnsupportedInlineConfigError || error instanceof SlashParseError) {\n notifyError(ctx, error.message);\n return;\n }\n throw error;\n}\n\n/**\n * Shared arg parsing for /chain (no inline group) and /parallel:\n * \"agent1 task1 -> agent2 task2\" or \"agent1 agent2 -- shared task\".\n */\nfunction parseAgentArgsFallback(input: string): { steps: ParsedStep[]; task: string; perStep: boolean } | undefined {\n const trimmed = input.trim();\n if (trimmed.includes(' -> ')) {\n const steps = trimmed\n .split(' -> ')\n .map((segment) => segment.trim())\n .filter(Boolean)\n .map((segment) => parseSingleTaskToken(segment));\n if (steps.length === 0) return undefined;\n return { steps, task: steps.find((step) => step.task)?.task ?? '', perStep: true };\n }\n const delimiterIndex = trimmed.indexOf(' -- ');\n if (delimiterIndex === -1) return undefined;\n const agentsPart = trimmed.slice(0, delimiterIndex).trim();\n const sharedTask = trimmed.slice(delimiterIndex + 4).trim();\n if (!agentsPart || !sharedTask) return undefined;\n const steps = agentsPart\n .split(/\\s+/)\n .filter(Boolean)\n .map((token) => parseSingleTaskToken(token));\n if (steps.length === 0) return undefined;\n return { steps, task: sharedTask, perStep: false };\n}\n\nexport function createSlashCommands(\n pi: ExtensionAPI,\n state: SlashCommandState,\n deps: SlashCommandDeps,\n): Array<readonly [string, Parameters<ExtensionAPI['registerCommand']>[1]]> {\n return [\n [\n 'run',\n {\n description: 'Run a subagent in the background: /run agent[model=x] [task] [--fork]',\n handler: async (args, ctx) => {\n const { args: cleanedArgs, fork } = extractForkFlag(args);\n const input = cleanedArgs.trim();\n if (!input) {\n notifyError(ctx, 'Usage: /run <agent> [task] [--fork]');\n return;\n }\n const firstSpace = input.indexOf(' ');\n const { name: agentName, config } = parseAgentToken(firstSpace === -1 ? input : input.slice(0, firstSpace));\n const task = firstSpace === -1 ? '' : input.slice(firstSpace + 1).trim();\n const outcome = await launchSingleAgentRun(pi, ctx, state, deps, { agent: agentName, task, config, fork });\n if (!outcome.ok) notifyError(ctx, outcome.message);\n },\n },\n ],\n [\n 'parallel',\n {\n description: 'Run agents in parallel: /parallel scout \"task1\" -> reviewer \"task2\" [--fork]',\n handler: async (args, ctx) => {\n const scope = sessionScopeFor(ctx, deps.environment);\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId(), scope);\n const { args: cleanedArgs, fork } = extractForkFlag(args);\n const baseCwd = requireBaseCwd(state, ctx);\n if (!baseCwd) return;\n\n const parsed = parseAgentArgsFallback(cleanedArgs);\n if (!parsed) {\n notifyError(ctx, 'Usage: /parallel agent1 \"task1\" -> agent2 \"task2\"');\n return;\n }\n for (const step of parsed.steps) {\n if (!findAgentOrNotify(deps, baseCwd, step.name, ctx)) return;\n }\n if (!parsed.steps.some((step) => step.task) && !parsed.task) {\n notifyError(ctx, 'At least one step must have a task');\n return;\n }\n\n try {\n const parentForkSource = captureSessionForkSource(ctx.sessionManager, 'settled');\n const parentModel = normalizeParentModel(ctx.model);\n const tasks = parsed.steps.map((step) =>\n taskInputFromParsedStep(\n { name: step.name, config: step.config, task: step.task ?? parsed.task },\n baseCwd,\n fork ? 'fork' : undefined,\n ),\n );\n const result = await launchParallelSubagents(\n deps.spawnPlanner,\n jobs,\n {\n tasks,\n cwd: baseCwd,\n agentScope: 'both',\n sessionScope: scope,\n parentSessionId: ctx.sessionManager.getSessionId(),\n ...(parentForkSource\n ? {\n parentForkSource: parentForkSource.terminalSource,\n ...(parentForkSource.sessionFile ? { parentSessionFile: parentForkSource.sessionFile } : {}),\n parentLeafId: parentForkSource.leafId,\n }\n : {}),\n availableModels: authenticatedModelInfos(ctx.modelRegistry),\n ...(parentModel ? { parentModel } : {}),\n },\n deps.loadConfig(),\n );\n reportSpawnResult(pi, ctx, deps, jobs, result);\n } catch (error) {\n reportKnownErrorOrRethrow(ctx, error);\n }\n },\n },\n ],\n [\n 'subagents-doctor',\n {\n description: 'Show subagent diagnostics',\n handler: async (_args, ctx) => {\n sendSlashText(\n pi,\n buildDoctorReport(\n { cwd: ctx.cwd, agentScope: 'both', scope: sessionScopeFor(ctx, deps.environment) },\n { discovery: deps.discovery, skills: deps.skills },\n ),\n );\n },\n },\n ],\n [\n 'subagents-steer',\n {\n description: 'Send guidance to a running subagent: /subagents-steer <run-id> <message>',\n handler: async (args, ctx) => {\n const input = args.trim();\n const separator = input.search(/\\s/);\n if (separator === -1 || !input.slice(separator + 1).trim()) {\n notifyError(ctx, 'Usage: /subagents-steer <run-id> <message>');\n return;\n }\n const id = input.slice(0, separator);\n const message = input.slice(separator + 1).trim();\n try {\n deps.management.bindSessionScope(sessionScopeFor(ctx, deps.environment));\n const result = await deps.management.steer(id, message);\n const summary = `Steering ${result.state} for ${id}: ${result.message}`;\n if (result.state === 'failed') notifyError(ctx, summary);\n else notifyInfo(ctx, summary);\n } catch (error) {\n notifyError(ctx, error instanceof Error ? error.message : `Could not steer '${id}'.`);\n }\n },\n },\n ],\n [\n 'subagents-stop',\n {\n description: 'Stop a running subagent: /subagents-stop [run-id]',\n handler: async (args, ctx) => {\n const scope = sessionScopeFor(ctx, deps.environment);\n deps.management.bindSessionScope(scope);\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId(), scope);\n const id = args.trim();\n if (!id) {\n sendSlashText(pi, stoppableRunsReport(jobs.list()));\n return;\n }\n try {\n await deps.management.stop(resolveTrackedRunId(jobs, id));\n // The direct control request is acknowledged by transport delivery. The\n // run's own event stream remains authoritative for its terminal state.\n notifyInfo(ctx, `Stop requested for ${id}. The run reports its own final state once it acknowledges.`);\n } catch (error) {\n // `ManagementActions.stop` throws only for an id that resolves to no\n // run or to more than one. Both are bad user input, not internal\n // faults, so they are notified rather than rethrown at the host - the\n // same treatment `reportKnownErrorOrRethrow` gives a parse error.\n notifyError(ctx, error instanceof Error ? error.message : `Could not stop '${id}'.`);\n }\n },\n },\n ],\n ];\n}\n\n/**\n * The no-argument `/subagents-stop` listing.\n *\n * The predecessor opened a TUI selector overlay here. This reports the same\n * information as text instead, for one reason worth stating rather than\n * hiding: a selector is a second, independent renderer of run state, and this\n * package already has one in `/subagents-fleet` that shows more (live status,\n * transcripts, and the full set of runtime controls including stop). Building\n * a second, weaker one would mean two things to keep in step. Passing an\n * explicit id stays the direct path, and the fleet overlay is the interactive\n * one.\n */\nfunction stoppableRunsReport(runs: readonly TrackedAsyncJob[]): string {\n const stoppable = runs.filter((run) => run.status === 'running' || run.status === 'pending');\n if (stoppable.length === 0) return 'No running subagents to stop.';\n const lines = stoppable.map((run) => `- ${run.runId}${run.status ? ` (${run.status})` : ''}`);\n return [\n 'Running subagents:',\n ...lines,\n '',\n 'Stop one with `/subagents-stop <run-id>`, or open `/subagents-fleet` to inspect and control them interactively.',\n ].join('\\n');\n}\n"],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import{TERMINAL_ASYNC_JOB_STATES as e,resolveTrackedRunId as t}from"../services/asyncJobTracker/index.mjs";import{SlashParseError as n,extractForkFlag as r,parseAgentToken as i,parseSingleTaskToken as a}from"../services/chainExpression/index.mjs";import{createSessionScope as o}from"../services/sessionPaths/index.mjs";import{buildDoctorReport as s}from"../services/doctor/index.mjs";import{authenticatedModelInfos as c}from"../services/modelResolution/index.mjs";import{normalizeParentModel as l}from"../services/modelFallback/index.mjs";import{captureSessionForkSource as u}from"../services/spawnPlan/index.mjs";import{UnsupportedInlineConfigError as d,taskInputFromParsedStep as f}from"../services/spawnRequestMapping/index.mjs";import{launchParallelSubagents as p,launchSingleSubagent as m,watchTrackedRunUntilTerminal as h}from"../services/subagentLaunch/index.mjs";import{SLASH_RESULT_CUSTOM_TYPE as g}from"../models/slashResult.mjs";import{resolveRootSessionId as _}from"@agimon-ai/doompi-core/child-process";function v(e,t){return o(_(e.sessionManager.getSessionId(),t))}function y(e,t,n){e.sendMessage({customType:g,content:t,display:!0,...n?{details:n}:{}})}function b(e,t){e.hasUI&&e.ui.setStatus(`subagent-slash`,t)}function x(e,t){e.ui.notify(t,`error`)}function S(e,t){e.ui.notify(t,`info`)}function C(e){return e?e.attentionReason?`${e.status??`running`} - needs attention: ${e.attentionReason}`:e.activityState?`${e.status??`running`} - ${e.activityState}`:e.status??`running`:`starting…`}function w(t,n,r,i,a,o){h(r.scheduler,i,a,r=>{if(b(n,`${o} (${a}): ${C(r)}`),r?.status===void 0||!e.has(r.status))return;b(n,void 0);let i=r.status===`complete`||r.status===`completed`?`completed`:r.status;y(t,r.error?`## Subagent ${i}\n\n${o} (${a})\n\n${r.error}`:`## Subagent ${i}\n\n${o} (${a})`,[{agent:o,runId:a,status:i,...r.error?{error:r.error}:{}}])})}function T(e,t,n,r,i){let a=i.outcomes.filter(e=>e.runId),o=i.outcomes.filter(e=>!e.runId);if(a.length>0){y(e,`## Subagent started\n\n${a.map(e=>`${e.agent} (${e.runId})${e.warning?`\n Warning: ${e.warning}`:``}`).join(`, `)}`,a.map(e=>({agent:e.agent,runId:e.runId??``,status:`started`,...e.warning?{warning:e.warning}:{}}))),b(t,`${a.length} run${a.length===1?``:`s`} started…`);for(let i of a)i.runId&&w(e,t,n,r,i.runId,i.agent)}o.length>0&&x(t,`Some subagents failed to start:\n${o.map(e=>`${e.agent}: ${e.error??`spawn failed`}`).join(`
2
- `)}`)}function E(e,t){if(e.baseCwd)return e.baseCwd;x(t,`Subagent session cwd is not initialized yet`)}function D(e,t,n,r){return e.discovery.discover(t,`both`).agents.find(e=>e.name===n)?!0:(x(r,`Unknown agent: ${n}`),!1)}async function O(e,t,r,i,a){let o=r.baseCwd;if(!o)return{ok:!1,message:`Subagent session cwd is not initialized yet`};if(!i.discovery.discover(o,`both`).agents.find(e=>e.name===a.agent))return{ok:!1,message:`Unknown agent: ${a.agent}`};let s=v(t,i.environment),p=i.tracker.forSession(t.sessionManager.getSessionId(),s);try{let n=u(t.sessionManager,`settled`),r=l(t.model),d=f({name:a.agent,config:a.config??{},task:a.task},o,a.fork?`fork`:void 0),h=await m(i.spawnPlanner,p,{agent:d.agent,task:d.task??``,cwd:d.cwd??o,agentScope:`both`,sessionScope:s,parentSessionId:t.sessionManager.getSessionId(),...d.model?{model:d.model}:{},...d.context?{context:d.context}:{},...n?{parentForkSource:n.terminalSource,...n.sessionFile?{parentSessionFile:n.sessionFile}:{},parentLeafId:n.leafId}:{},availableModels:c(t.modelRegistry),...r?{parentModel:r}:{}},i.loadConfig());return T(e,t,i,p,h),{ok:!0,result:h}}catch(e){if(e instanceof d||e instanceof n)return{ok:!1,message:e.message};throw e}}function k(e,t,n,r,i){O(e,t,n,r,i).then(e=>{e.ok||x(t,e.message)},e=>{x(t,`Subagent launch failed: ${e instanceof Error?e.message:String(e)}`)})}function A(e,t){if(t instanceof d||t instanceof n){x(e,t.message);return}throw t}function j(e){let t=e.trim();if(t.includes(` -> `)){let e=t.split(` -> `).map(e=>e.trim()).filter(Boolean).map(e=>a(e));return e.length===0?void 0:{steps:e,task:e.find(e=>e.task)?.task??``,perStep:!0}}let n=t.indexOf(` -- `);if(n===-1)return;let r=t.slice(0,n).trim(),i=t.slice(n+4).trim();if(!r||!i)return;let o=r.split(/\s+/).filter(Boolean).map(e=>a(e));if(o.length!==0)return{steps:o,task:i,perStep:!1}}function M(e,n,a){return[[`run`,{description:`Run a subagent in the background: /run agent[model=x] [task] [--fork]`,handler:async(t,o)=>{let{args:s,fork:c}=r(t),l=s.trim();if(!l){x(o,`Usage: /run <agent> [task] [--fork]`);return}let u=l.indexOf(` `),{name:d,config:f}=i(u===-1?l:l.slice(0,u)),p=await O(e,o,n,a,{agent:d,task:u===-1?``:l.slice(u+1).trim(),config:f,fork:c});p.ok||x(o,p.message)}}],[`parallel`,{description:`Run agents in parallel: /parallel scout "task1" -> reviewer "task2" [--fork]`,handler:async(t,i)=>{let o=v(i,a.environment),s=a.tracker.forSession(i.sessionManager.getSessionId(),o),{args:d,fork:m}=r(t),h=E(n,i);if(!h)return;let g=j(d);if(!g){x(i,`Usage: /parallel agent1 "task1" -> agent2 "task2"`);return}for(let e of g.steps)if(!D(a,h,e.name,i))return;if(!g.steps.some(e=>e.task)&&!g.task){x(i,`At least one step must have a task`);return}try{let t=u(i.sessionManager,`settled`),n=l(i.model),r=g.steps.map(e=>f({name:e.name,config:e.config,task:e.task??g.task},h,m?`fork`:void 0));T(e,i,a,s,await p(a.spawnPlanner,s,{tasks:r,cwd:h,agentScope:`both`,sessionScope:o,parentSessionId:i.sessionManager.getSessionId(),...t?{parentForkSource:t.terminalSource,...t.sessionFile?{parentSessionFile:t.sessionFile}:{},parentLeafId:t.leafId}:{},availableModels:c(i.modelRegistry),...n?{parentModel:n}:{}},a.loadConfig()))}catch(e){A(i,e)}}}],[`subagents-doctor`,{description:`Show subagent diagnostics`,handler:async(t,n)=>{y(e,s({cwd:n.cwd,agentScope:`both`,scope:v(n,a.environment)},{discovery:a.discovery,skills:a.skills}))}}],[`subagents-steer`,{description:`Send guidance to a running subagent: /subagents-steer <run-id> <message>`,handler:async(e,t)=>{let n=e.trim(),r=n.search(/\s/);if(r===-1||!n.slice(r+1).trim()){x(t,`Usage: /subagents-steer <run-id> <message>`);return}let i=n.slice(0,r),o=n.slice(r+1).trim();try{a.management.bindSessionScope(v(t,a.environment));let e=await a.management.steer(i,o),n=`Steering ${e.state} for ${i}: ${e.message}`;e.state===`failed`?x(t,n):S(t,n)}catch(e){x(t,e instanceof Error?e.message:`Could not steer '${i}'.`)}}}],[`subagents-stop`,{description:`Stop a running subagent: /subagents-stop [run-id]`,handler:async(n,r)=>{let i=v(r,a.environment);a.management.bindSessionScope(i);let o=a.tracker.forSession(r.sessionManager.getSessionId(),i),s=n.trim();if(!s){y(e,N(o.list()));return}try{await a.management.stop(t(o,s)),S(r,`Stop requested for ${s}. The run reports its own final state once it acknowledges.`)}catch(e){x(r,e instanceof Error?e.message:`Could not stop '${s}'.`)}}}]]}function N(e){let t=e.filter(e=>e.status===`running`||e.status===`pending`);return t.length===0?`No running subagents to stop.`:[`Running subagents:`,...t.map(e=>`- ${e.runId}${e.status?` (${e.status})`:``}`),``,"Stop one with `/subagents-stop <run-id>`, or open `/subagents-fleet` to inspect and control them interactively."].join(`
3
- `)}export{M as createSlashCommands,O as launchSingleAgentRun,k as startSingleAgentRun};
4
- //# sourceMappingURL=slashCommands.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slashCommands.mjs","names":[],"sources":["../../src/controllers/slashCommands.ts"],"sourcesContent":["/**\n * The core `/run`, `/chain`, `/parallel` slash commands. Replaces the\n * always-blocking predecessor with the async-only shape this port settled\n * on: a command launches a spawn, sends an initial status message, and\n * hands off to `watchTrackedRunUntilTerminal` (render-key gated, backed by\n * `PollScheduler`) to update the status bar and finalize the message once\n * the run reaches a terminal state - never by awaiting completion. See\n * `subagentLaunch.ts`'s module doc for the full reasoning.\n *\n * WHAT IS NOT HERE, AND WHY:\n * - `/run-chain`, `/prompt-workflow` and `/chain-prompts`: the whole SAVED\n * work surface - saved agent pipelines (`ChainConfig`, never ported) and\n * saved `.md` prompt templates (ported, then deleted). REMOVED BY\n * DECISION, not deferred: overly complicated for the use they were\n * getting. Do not re-add them because a reader notices the predecessor had\n * them. Ad-hoc chaining (`/chain scout \"x\" -> planner`) is a different\n * feature, lives in `chainExpression.ts`, and stays\n * - `/subagent-cost`: REMOVED BY DECISION. It reads usage/cost data\n * (`totalTokens`/`totalCost`) that nothing in this package's\n * runs/extensions surface tracks - a genuinely absent data source, and\n * building it would mean threading usage out of every child process\n * - `/subagents-check-profile`: removed at the source. Calls\n * `checkSubagentProfile`/`listSubagentProfiles`, which are referenced but\n * defined nowhere in the entire predecessor package - a live\n * `ReferenceError` that only shipped because that package sets\n * `noCheck: true`. Typecheck is on here; porting it faithfully would not\n * compile, and it was asked to be removed independently of that\n * - The `SUBAGENT_FLEET_COMMAND` registration and its `Ctrl+Alt+F` shortcut:\n * fleet view is its own piece, registered by whoever builds it\n * - Inline parallel groups within `/chain` (`(a | b)` syntax): the field\n * mapping for a group's own config exists (`spawnRequestMapping.ts`),\n * but wiring a group INTO a chain request is left for the same pass that\n * revisits per-task field support, so `/chain` reports a clear\n * not-yet-supported message rather than silently flattening a group\n * - `/subagents` (admin) command registration: a separate file, not yet\n * ported\n *\n * `/subagents-doctor` IS here, in `doctor.ts` - read (not ported) the\n * predecessor's foreground-executor `doctor` action before deciding, and it\n * turned out to be a small, mostly-mechanical port. See that module's own\n * doc for what it deliberately leaves out (chain counts, spawn-budget\n * reporting).\n *\n * AVOID:\n * - Awaiting a SINGLE/PARALLEL spawn for a result that will not exist yet.\n * See `subagentLaunch.ts`\n * - A private polling loop for a message's live status. Use\n * `watchTrackedRunUntilTerminal`\n */\n\nimport { resolveRootSessionId } from '@agimon-ai/doompi-core/child-process';\nimport type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';\n\nimport type { SkillDiscoveryContract } from '../services/agentSkills';\nimport type { AsyncJobTrackerContract, TrackedAsyncJobsContract, TrackedAsyncJob } from '../services/asyncJobTracker';\nimport { resolveTrackedRunId, TERMINAL_ASYNC_JOB_STATES } from '../services/asyncJobTracker';\nimport {\n extractForkFlag,\n type InlineConfig,\n type ParsedStep,\n parseAgentToken,\n parseSingleTaskToken,\n SlashParseError,\n} from '../services/chainExpression';\nimport type { ExtensionConfig } from '../services/config';\nimport { buildDoctorReport } from '../services/doctor';\nimport type { ManagementActionsContract } from '../services/managementActions';\nimport { normalizeParentModel } from '../services/modelFallback';\nimport { authenticatedModelInfos } from '../services/modelResolution';\nimport type { PollSchedulerContract } from '../services/pollScheduler';\nimport { createSessionScope } from '../services/sessionPaths';\nimport { captureSessionForkSource, type SpawnPlannerContract, type SpawnPlanResult } from '../services/spawnPlan';\nimport { taskInputFromParsedStep, UnsupportedInlineConfigError } from '../services/spawnRequestMapping';\nimport {\n launchParallelSubagents,\n launchSingleSubagent,\n watchTrackedRunUntilTerminal,\n} from '../services/subagentLaunch';\nimport type { AgentScope, AgentDiscoveryContract } from '../types/agent';\n\nexport interface SlashCommandDeps {\n spawnPlanner: SpawnPlannerContract;\n skills: SkillDiscoveryContract;\n tracker: AsyncJobTrackerContract;\n scheduler: PollSchedulerContract;\n discovery: AgentDiscoveryContract;\n /** Session-scoped typed management for status, prefix resolution, and control. */\n management: ManagementActionsContract;\n loadConfig: () => ExtensionConfig;\n environment: Readonly<Record<string, string | undefined>>;\n}\n\nexport interface SlashCommandState {\n baseCwd: string | undefined;\n}\n\nfunction sessionScopeFor(ctx: ExtensionContext, environment: Readonly<Record<string, string | undefined>>) {\n return createSessionScope(resolveRootSessionId(ctx.sessionManager.getSessionId(), environment));\n}\n\nconst SLASH_STATUS_KEY = 'subagent-slash';\nconst STARTED_STATUS = 'started';\n\n/**\n * The custom-message type a slash launch renders under. Cross-process\n * significant the same way `SUBAGENT_NOTIFY_MESSAGE_TYPE` is: the child-side\n * prompt runtime strips this type out of a child's inherited history\n * (`PARENT_ONLY_CUSTOM_MESSAGE_TYPES`), so both sides must agree on the literal.\n */\nimport { SLASH_RESULT_CUSTOM_TYPE, type SlashRunDetail } from '../models/slashResult';\nfunction sendSlashText(pi: ExtensionAPI, text: string, details?: SlashRunDetail[]): void {\n pi.sendMessage({\n customType: SLASH_RESULT_CUSTOM_TYPE,\n content: text,\n display: true,\n ...(details ? { details } : {}),\n });\n}\n\nfunction setSlashStatus(ctx: ExtensionContext, text: string | undefined): void {\n if (ctx.hasUI) ctx.ui.setStatus(SLASH_STATUS_KEY, text);\n}\n\nfunction notifyError(ctx: ExtensionContext, message: string): void {\n ctx.ui.notify(message, 'error');\n}\n\nfunction notifyInfo(ctx: ExtensionContext, message: string): void {\n ctx.ui.notify(message, 'info');\n}\n\nfunction statusTextFor(job: TrackedAsyncJob | undefined): string {\n if (!job) return 'starting…';\n if (job.attentionReason) return `${job.status ?? 'running'} - needs attention: ${job.attentionReason}`;\n if (job.activityState) return `${job.status ?? 'running'} - ${job.activityState}`;\n return job.status ?? 'running';\n}\n\n/**\n * Watches one launched run to a terminal state and finalizes its message.\n * Each launched run gets its own subscriber, so a PARALLEL launch's\n * siblings finalize independently rather than all waiting on the slowest.\n */\nfunction watchAndFinalize(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n deps: SlashCommandDeps,\n jobs: TrackedAsyncJobsContract,\n runId: string,\n agent: string,\n): void {\n watchTrackedRunUntilTerminal(deps.scheduler, jobs, runId, (job) => {\n setSlashStatus(ctx, `${agent} (${runId}): ${statusTextFor(job)}`);\n if (job?.status === undefined || !TERMINAL_ASYNC_JOB_STATES.has(job.status)) return;\n setSlashStatus(ctx, undefined);\n const outcome = job.status === 'complete' || job.status === 'completed' ? 'completed' : job.status;\n sendSlashText(\n pi,\n job.error\n ? `## Subagent ${outcome}\\n\\n${agent} (${runId})\\n\\n${job.error}`\n : `## Subagent ${outcome}\\n\\n${agent} (${runId})`,\n [{ agent, runId, status: outcome, ...(job.error ? { error: job.error } : {}) }],\n );\n });\n}\n\nfunction reportSpawnResult(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n deps: SlashCommandDeps,\n jobs: TrackedAsyncJobsContract,\n result: SpawnPlanResult,\n): void {\n const started = result.outcomes.filter((outcome) => outcome.runId);\n const failed = result.outcomes.filter((outcome) => !outcome.runId);\n if (started.length > 0) {\n const label = started\n .map(\n (outcome) => `${outcome.agent} (${outcome.runId})${outcome.warning ? `\\n Warning: ${outcome.warning}` : ''}`,\n )\n .join(', ');\n sendSlashText(\n pi,\n `## Subagent started\\n\\n${label}`,\n started.map((outcome) => ({\n agent: outcome.agent,\n runId: outcome.runId ?? '',\n status: STARTED_STATUS,\n ...(outcome.warning ? { warning: outcome.warning } : {}),\n })),\n );\n setSlashStatus(ctx, `${started.length} run${started.length === 1 ? '' : 's'} started…`);\n for (const outcome of started) {\n if (outcome.runId) watchAndFinalize(pi, ctx, deps, jobs, outcome.runId, outcome.agent);\n }\n }\n if (failed.length > 0) {\n const label = failed.map((outcome) => `${outcome.agent}: ${outcome.error ?? 'spawn failed'}`).join('\\n');\n notifyError(ctx, `Some subagents failed to start:\\n${label}`);\n }\n}\n\nfunction requireBaseCwd(state: SlashCommandState, ctx: ExtensionContext): string | undefined {\n if (state.baseCwd) return state.baseCwd;\n notifyError(ctx, 'Subagent session cwd is not initialized yet');\n return undefined;\n}\n\nfunction findAgentOrNotify(deps: SlashCommandDeps, baseCwd: string, name: string, ctx: ExtensionContext): boolean {\n const agents = deps.discovery.discover(baseCwd, 'both' satisfies AgentScope).agents;\n if (agents.find((agent) => agent.name === name)) return true;\n notifyError(ctx, `Unknown agent: ${name}`);\n return false;\n}\n\nexport interface SingleAgentRunRequest {\n agent: string;\n task: string;\n /** Inline `agent[model=x]` config from a slash token; surfaces without that syntax send none. */\n config?: InlineConfig;\n fork?: boolean;\n}\n\nexport type SingleAgentRunOutcome = { ok: true; result: SpawnPlanResult } | { ok: false; message: string };\n\n/**\n * One agent, one task: the shared body of `/run` and the agent catalog's\n * launch key (`SPC a l`, `r`/`R`).\n *\n * Returns `ok: false` with a user-facing message for the validation failures\n * both surfaces share rather than notifying itself, because the two report\n * in different idioms - a slash command notifies, and a fullscreen overlay\n * writes a notice into its own body, where a notification would be covered.\n * Started runs are still reported here through `reportSpawnResult`, which is\n * what tracks them and finalizes their message; that is identical for both.\n */\nexport async function launchSingleAgentRun(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n state: SlashCommandState,\n deps: SlashCommandDeps,\n request: SingleAgentRunRequest,\n): Promise<SingleAgentRunOutcome> {\n const baseCwd = state.baseCwd;\n if (!baseCwd) return { ok: false, message: 'Subagent session cwd is not initialized yet' };\n const agents = deps.discovery.discover(baseCwd, 'both' satisfies AgentScope).agents;\n if (!agents.find((agent) => agent.name === request.agent)) {\n return { ok: false, message: `Unknown agent: ${request.agent}` };\n }\n const scope = sessionScopeFor(ctx, deps.environment);\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId(), scope);\n try {\n const parentForkSource = captureSessionForkSource(ctx.sessionManager, 'settled');\n const parentModel = normalizeParentModel(ctx.model);\n const taskInput = taskInputFromParsedStep(\n { name: request.agent, config: request.config ?? {}, task: request.task },\n baseCwd,\n request.fork ? 'fork' : undefined,\n );\n const result = await launchSingleSubagent(\n deps.spawnPlanner,\n jobs,\n {\n agent: taskInput.agent,\n task: taskInput.task ?? '',\n cwd: taskInput.cwd ?? baseCwd,\n agentScope: 'both',\n sessionScope: scope,\n parentSessionId: ctx.sessionManager.getSessionId(),\n ...(taskInput.model ? { model: taskInput.model } : {}),\n ...(taskInput.context ? { context: taskInput.context } : {}),\n ...(parentForkSource\n ? {\n parentForkSource: parentForkSource.terminalSource,\n ...(parentForkSource.sessionFile ? { parentSessionFile: parentForkSource.sessionFile } : {}),\n parentLeafId: parentForkSource.leafId,\n }\n : {}),\n availableModels: authenticatedModelInfos(ctx.modelRegistry),\n ...(parentModel ? { parentModel } : {}),\n },\n deps.loadConfig(),\n );\n reportSpawnResult(pi, ctx, deps, jobs, result);\n return { ok: true, result };\n } catch (error) {\n if (error instanceof UnsupportedInlineConfigError || error instanceof SlashParseError) {\n return { ok: false, message: error.message };\n }\n throw error;\n }\n}\n\n/**\n * `launchSingleAgentRun` for a surface that cannot await it - the agent\n * catalog closes on launch, so nothing is left to receive the outcome. The\n * failure paths report themselves here, once the overlay is gone and a\n * notification is visible again.\n */\nexport function startSingleAgentRun(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n state: SlashCommandState,\n deps: SlashCommandDeps,\n request: SingleAgentRunRequest,\n): void {\n void launchSingleAgentRun(pi, ctx, state, deps, request).then(\n (outcome) => {\n if (!outcome.ok) notifyError(ctx, outcome.message);\n },\n (error: unknown) => {\n notifyError(ctx, `Subagent launch failed: ${error instanceof Error ? error.message : String(error)}`);\n },\n );\n}\n\nfunction reportKnownErrorOrRethrow(ctx: ExtensionContext, error: unknown): void {\n if (error instanceof UnsupportedInlineConfigError || error instanceof SlashParseError) {\n notifyError(ctx, error.message);\n return;\n }\n throw error;\n}\n\n/**\n * Shared arg parsing for /chain (no inline group) and /parallel:\n * \"agent1 task1 -> agent2 task2\" or \"agent1 agent2 -- shared task\".\n */\nfunction parseAgentArgsFallback(input: string): { steps: ParsedStep[]; task: string; perStep: boolean } | undefined {\n const trimmed = input.trim();\n if (trimmed.includes(' -> ')) {\n const steps = trimmed\n .split(' -> ')\n .map((segment) => segment.trim())\n .filter(Boolean)\n .map((segment) => parseSingleTaskToken(segment));\n if (steps.length === 0) return undefined;\n return { steps, task: steps.find((step) => step.task)?.task ?? '', perStep: true };\n }\n const delimiterIndex = trimmed.indexOf(' -- ');\n if (delimiterIndex === -1) return undefined;\n const agentsPart = trimmed.slice(0, delimiterIndex).trim();\n const sharedTask = trimmed.slice(delimiterIndex + 4).trim();\n if (!agentsPart || !sharedTask) return undefined;\n const steps = agentsPart\n .split(/\\s+/)\n .filter(Boolean)\n .map((token) => parseSingleTaskToken(token));\n if (steps.length === 0) return undefined;\n return { steps, task: sharedTask, perStep: false };\n}\n\nexport function createSlashCommands(\n pi: ExtensionAPI,\n state: SlashCommandState,\n deps: SlashCommandDeps,\n): Array<readonly [string, Parameters<ExtensionAPI['registerCommand']>[1]]> {\n return [\n [\n 'run',\n {\n description: 'Run a subagent in the background: /run agent[model=x] [task] [--fork]',\n handler: async (args, ctx) => {\n const { args: cleanedArgs, fork } = extractForkFlag(args);\n const input = cleanedArgs.trim();\n if (!input) {\n notifyError(ctx, 'Usage: /run <agent> [task] [--fork]');\n return;\n }\n const firstSpace = input.indexOf(' ');\n const { name: agentName, config } = parseAgentToken(firstSpace === -1 ? input : input.slice(0, firstSpace));\n const task = firstSpace === -1 ? '' : input.slice(firstSpace + 1).trim();\n const outcome = await launchSingleAgentRun(pi, ctx, state, deps, { agent: agentName, task, config, fork });\n if (!outcome.ok) notifyError(ctx, outcome.message);\n },\n },\n ],\n [\n 'parallel',\n {\n description: 'Run agents in parallel: /parallel scout \"task1\" -> reviewer \"task2\" [--fork]',\n handler: async (args, ctx) => {\n const scope = sessionScopeFor(ctx, deps.environment);\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId(), scope);\n const { args: cleanedArgs, fork } = extractForkFlag(args);\n const baseCwd = requireBaseCwd(state, ctx);\n if (!baseCwd) return;\n\n const parsed = parseAgentArgsFallback(cleanedArgs);\n if (!parsed) {\n notifyError(ctx, 'Usage: /parallel agent1 \"task1\" -> agent2 \"task2\"');\n return;\n }\n for (const step of parsed.steps) {\n if (!findAgentOrNotify(deps, baseCwd, step.name, ctx)) return;\n }\n if (!parsed.steps.some((step) => step.task) && !parsed.task) {\n notifyError(ctx, 'At least one step must have a task');\n return;\n }\n\n try {\n const parentForkSource = captureSessionForkSource(ctx.sessionManager, 'settled');\n const parentModel = normalizeParentModel(ctx.model);\n const tasks = parsed.steps.map((step) =>\n taskInputFromParsedStep(\n { name: step.name, config: step.config, task: step.task ?? parsed.task },\n baseCwd,\n fork ? 'fork' : undefined,\n ),\n );\n const result = await launchParallelSubagents(\n deps.spawnPlanner,\n jobs,\n {\n tasks,\n cwd: baseCwd,\n agentScope: 'both',\n sessionScope: scope,\n parentSessionId: ctx.sessionManager.getSessionId(),\n ...(parentForkSource\n ? {\n parentForkSource: parentForkSource.terminalSource,\n ...(parentForkSource.sessionFile ? { parentSessionFile: parentForkSource.sessionFile } : {}),\n parentLeafId: parentForkSource.leafId,\n }\n : {}),\n availableModels: authenticatedModelInfos(ctx.modelRegistry),\n ...(parentModel ? { parentModel } : {}),\n },\n deps.loadConfig(),\n );\n reportSpawnResult(pi, ctx, deps, jobs, result);\n } catch (error) {\n reportKnownErrorOrRethrow(ctx, error);\n }\n },\n },\n ],\n [\n 'subagents-doctor',\n {\n description: 'Show subagent diagnostics',\n handler: async (_args, ctx) => {\n sendSlashText(\n pi,\n buildDoctorReport(\n { cwd: ctx.cwd, agentScope: 'both', scope: sessionScopeFor(ctx, deps.environment) },\n { discovery: deps.discovery, skills: deps.skills },\n ),\n );\n },\n },\n ],\n [\n 'subagents-steer',\n {\n description: 'Send guidance to a running subagent: /subagents-steer <run-id> <message>',\n handler: async (args, ctx) => {\n const input = args.trim();\n const separator = input.search(/\\s/);\n if (separator === -1 || !input.slice(separator + 1).trim()) {\n notifyError(ctx, 'Usage: /subagents-steer <run-id> <message>');\n return;\n }\n const id = input.slice(0, separator);\n const message = input.slice(separator + 1).trim();\n try {\n deps.management.bindSessionScope(sessionScopeFor(ctx, deps.environment));\n const result = await deps.management.steer(id, message);\n const summary = `Steering ${result.state} for ${id}: ${result.message}`;\n if (result.state === 'failed') notifyError(ctx, summary);\n else notifyInfo(ctx, summary);\n } catch (error) {\n notifyError(ctx, error instanceof Error ? error.message : `Could not steer '${id}'.`);\n }\n },\n },\n ],\n [\n 'subagents-stop',\n {\n description: 'Stop a running subagent: /subagents-stop [run-id]',\n handler: async (args, ctx) => {\n const scope = sessionScopeFor(ctx, deps.environment);\n deps.management.bindSessionScope(scope);\n const jobs = deps.tracker.forSession(ctx.sessionManager.getSessionId(), scope);\n const id = args.trim();\n if (!id) {\n sendSlashText(pi, stoppableRunsReport(jobs.list()));\n return;\n }\n try {\n await deps.management.stop(resolveTrackedRunId(jobs, id));\n // The direct control request is acknowledged by transport delivery. The\n // run's own event stream remains authoritative for its terminal state.\n notifyInfo(ctx, `Stop requested for ${id}. The run reports its own final state once it acknowledges.`);\n } catch (error) {\n // `ManagementActions.stop` throws only for an id that resolves to no\n // run or to more than one. Both are bad user input, not internal\n // faults, so they are notified rather than rethrown at the host - the\n // same treatment `reportKnownErrorOrRethrow` gives a parse error.\n notifyError(ctx, error instanceof Error ? error.message : `Could not stop '${id}'.`);\n }\n },\n },\n ],\n ];\n}\n\n/**\n * The no-argument `/subagents-stop` listing.\n *\n * The predecessor opened a TUI selector overlay here. This reports the same\n * information as text instead, for one reason worth stating rather than\n * hiding: a selector is a second, independent renderer of run state, and this\n * package already has one in `/subagents-fleet` that shows more (live status,\n * transcripts, and the full set of runtime controls including stop). Building\n * a second, weaker one would mean two things to keep in step. Passing an\n * explicit id stays the direct path, and the fleet overlay is the interactive\n * one.\n */\nfunction stoppableRunsReport(runs: readonly TrackedAsyncJob[]): string {\n const stoppable = runs.filter((run) => run.status === 'running' || run.status === 'pending');\n if (stoppable.length === 0) return 'No running subagents to stop.';\n const lines = stoppable.map((run) => `- ${run.runId}${run.status ? ` (${run.status})` : ''}`);\n return [\n 'Running subagents:',\n ...lines,\n '',\n 'Stop one with `/subagents-stop <run-id>`, or open `/subagents-fleet` to inspect and control them interactively.',\n ].join('\\n');\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- const e=require("../services/agentDiscovery/index.cjs"),t=require("../services/sessionPaths/index.cjs"),n=require("../services/modelInfo/index.cjs"),r=require("../services/config/index.cjs"),i=require("../services/webSubagentCatalog/index.cjs"),a=`team`;function o(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.agent==`string`&&t.agent.trim()!==``&&typeof t.task==`string`&&typeof t.fork==`boolean`&&(t.model===void 0||typeof t.model==`string`&&t.model.trim()!==``)&&Object.keys(t).every(e=>[`agent`,`task`,`fork`,`model`].includes(e))}function s(t){let n=new e.AgentDiscoveryService(t.environment),r=t.read??(r=>({agents:n.discover(r,`both`).agents,models:e.resolveActiveTeamModelSpecs(t.environment)??[]}));return{async fetch(e){let a=new URL(e.url);if(e.method===`POST`&&a.pathname===`/run`&&t.launch){let n;try{n=await e.json()}catch{return Response.json({error:`Invalid run request.`},{status:400})}if(!o(n))return Response.json({error:`Invalid run request.`},{status:400});try{return Response.json(await t.launch(n),{status:201})}catch(e){return Response.json({error:e instanceof Error?e.message:String(e)},{status:409})}}if(e.method!==`GET`||a.pathname!==`/catalog`)return Response.json({error:`Not found.`},{status:404});try{n.invalidate();let e=r(t.cwd);return Response.json({cwd:t.cwd,agents:i.presentCatalog(e.agents),models:i.catalogModels(e.agents,e.models)})}catch(e){let t=e instanceof Error?e.message:String(e);return Response.json({error:t},{status:500})}},close:()=>void 0}}function c(e,i){let o=t.createSessionScope(i.sessionId),c=e.asyncJobTracker.forSession(i.sessionId,o),l=async t=>{let a=t.fork?await i.session.forkSource?.():void 0;if(t.fork&&!a)throw Error(`This session cannot capture a fork source.`);let s=(await e.spawnPlanner.spawn({single:{agent:t.agent.trim(),task:t.task.trim(),context:t.fork?`fork`:`fresh`,...t.model?{model:t.model}:{}},cwd:i.cwd,agentScope:`both`,sessionScope:o,environment:i.environment,parentSessionId:i.sessionId,...a?{parentForkSource:a}:{},availableModels:i.model?[n.toModelInfo(i.model)]:[],...i.model?{parentModel:i.model}:{}},r.loadConfig().config)).outcomes[0];if(!s?.runId)throw Error(s?.error??`The agent did not start.`);return c.track(s.runId),{runId:s.runId}};return{basePath:a,start:()=>s({cwd:i.cwd,environment:i.environment,launch:l})}}exports.TEAM_API_BASE_PATH=a,exports.TEAM_CATALOG_ROUTE=`/catalog`,exports.TEAM_RUN_ROUTE=`/run`,exports.createTeamApiHandler=s,exports.createTeamSessionApi=c;
2
- //# sourceMappingURL=teamSessionApi.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"teamSessionApi.cjs","names":["AgentDiscoveryService","resolveActiveTeamModelSpecs","presentCatalog","catalogModels","createSessionScope","toModelInfo","loadConfig"],"sources":["../../src/controllers/teamSessionApi.ts"],"sourcesContent":["import type { DoomHeadlessExecutionContext } from '@agimon-ai/doompi-core/headless';\nimport type { DoomApi, DoomApiHandler } from '@agimon-ai/doompi-core/package-api';\n\nimport { AgentDiscoveryService, resolveActiveTeamModelSpecs } from '../services/agentDiscovery';\nimport { loadConfig } from '../services/config';\nimport { toModelInfo } from '../services/modelInfo';\nimport { createSessionScope } from '../services/sessionPaths';\nimport type { TeamExtensionRuntime } from '../services/teamRuntime';\nimport { catalogModels, presentCatalog, type CatalogAgentInput } from '../services/webSubagentCatalog';\n\nexport const TEAM_API_BASE_PATH = 'team';\nexport const TEAM_CATALOG_ROUTE = '/catalog';\nexport const TEAM_RUN_ROUTE = '/run';\n\nexport interface TeamRunRequest {\n agent: string;\n task: string;\n fork: boolean;\n model?: string;\n}\n\nexport interface TeamCatalogSnapshot {\n agents: CatalogAgentInput[];\n models: string[];\n}\n\nexport interface TeamApiOptions {\n cwd: string;\n environment?: Readonly<NodeJS.ProcessEnv>;\n read?: (cwd: string) => TeamCatalogSnapshot;\n launch?: (request: TeamRunRequest) => Promise<{ runId: string }>;\n}\n\nfunction isRunRequest(value: unknown): value is TeamRunRequest {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n const request = value as Record<string, unknown>;\n return (\n typeof request.agent === 'string' &&\n request.agent.trim() !== '' &&\n typeof request.task === 'string' &&\n typeof request.fork === 'boolean' &&\n (request.model === undefined || (typeof request.model === 'string' && request.model.trim() !== '')) &&\n Object.keys(request).every((key) => ['agent', 'task', 'fork', 'model'].includes(key))\n );\n}\n\n/** Serves catalog discovery and run launch from the selected session process. */\nexport function createTeamApiHandler(options: TeamApiOptions): DoomApiHandler {\n const discovery = new AgentDiscoveryService(options.environment);\n const read =\n options.read ??\n ((cwd: string): TeamCatalogSnapshot => ({\n agents: discovery.discover(cwd, 'both').agents,\n models: resolveActiveTeamModelSpecs(options.environment) ?? [],\n }));\n\n return {\n async fetch(request) {\n const url = new URL(request.url);\n if (request.method === 'POST' && url.pathname === TEAM_RUN_ROUTE && options.launch) {\n let input: unknown;\n try {\n input = await request.json();\n } catch {\n return Response.json({ error: 'Invalid run request.' }, { status: 400 });\n }\n if (!isRunRequest(input)) return Response.json({ error: 'Invalid run request.' }, { status: 400 });\n try {\n return Response.json(await options.launch(input), { status: 201 });\n } catch (error) {\n return Response.json({ error: error instanceof Error ? error.message : String(error) }, { status: 409 });\n }\n }\n if (request.method !== 'GET' || url.pathname !== TEAM_CATALOG_ROUTE) {\n return Response.json({ error: 'Not found.' }, { status: 404 });\n }\n try {\n discovery.invalidate();\n const snapshot = read(options.cwd);\n return Response.json({\n cwd: options.cwd,\n agents: presentCatalog(snapshot.agents),\n models: catalogModels(snapshot.agents, snapshot.models),\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return Response.json({ error: message }, { status: 500 });\n }\n },\n close: () => undefined,\n };\n}\n\n/** One mounted session API, backed by the Team runtime that owns the subagent tool. */\nexport function createTeamSessionApi(runtime: TeamExtensionRuntime, execution: DoomHeadlessExecutionContext): DoomApi {\n const scope = createSessionScope(execution.sessionId);\n const jobs = runtime.asyncJobTracker.forSession(execution.sessionId, scope);\n\n const launch = async (request: TeamRunRequest): Promise<{ runId: string }> => {\n const parentForkSource = request.fork ? await execution.session.forkSource?.() : undefined;\n if (request.fork && !parentForkSource) throw new Error('This session cannot capture a fork source.');\n const plan = await runtime.spawnPlanner.spawn(\n {\n single: {\n agent: request.agent.trim(),\n task: request.task.trim(),\n context: request.fork ? 'fork' : 'fresh',\n ...(request.model ? { model: request.model } : {}),\n },\n cwd: execution.cwd,\n agentScope: 'both',\n sessionScope: scope,\n environment: execution.environment,\n parentSessionId: execution.sessionId,\n ...(parentForkSource ? { parentForkSource } : {}),\n availableModels: execution.model ? [toModelInfo(execution.model)] : [],\n ...(execution.model ? { parentModel: execution.model } : {}),\n },\n loadConfig().config,\n );\n const outcome = plan.outcomes[0];\n if (!outcome?.runId) throw new Error(outcome?.error ?? 'The agent did not start.');\n jobs.track(outcome.runId);\n return { runId: outcome.runId };\n };\n\n return {\n basePath: TEAM_API_BASE_PATH,\n start: () =>\n createTeamApiHandler({\n cwd: execution.cwd,\n environment: execution.environment,\n launch,\n }),\n };\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{AgentDiscoveryService as e,resolveActiveTeamModelSpecs as t}from"../services/agentDiscovery/index.mjs";import{createSessionScope as n}from"../services/sessionPaths/index.mjs";import{toModelInfo as r}from"../services/modelInfo/index.mjs";import{loadConfig as i}from"../services/config/index.mjs";import{catalogModels as a,presentCatalog as o}from"../services/webSubagentCatalog/index.mjs";const s=`team`,c=`/catalog`,l=`/run`;function u(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.agent==`string`&&t.agent.trim()!==``&&typeof t.task==`string`&&typeof t.fork==`boolean`&&(t.model===void 0||typeof t.model==`string`&&t.model.trim()!==``)&&Object.keys(t).every(e=>[`agent`,`task`,`fork`,`model`].includes(e))}function d(n){let r=new e(n.environment),i=n.read??(e=>({agents:r.discover(e,`both`).agents,models:t(n.environment)??[]}));return{async fetch(e){let t=new URL(e.url);if(e.method===`POST`&&t.pathname===`/run`&&n.launch){let t;try{t=await e.json()}catch{return Response.json({error:`Invalid run request.`},{status:400})}if(!u(t))return Response.json({error:`Invalid run request.`},{status:400});try{return Response.json(await n.launch(t),{status:201})}catch(e){return Response.json({error:e instanceof Error?e.message:String(e)},{status:409})}}if(e.method!==`GET`||t.pathname!==`/catalog`)return Response.json({error:`Not found.`},{status:404});try{r.invalidate();let e=i(n.cwd);return Response.json({cwd:n.cwd,agents:o(e.agents),models:a(e.agents,e.models)})}catch(e){let t=e instanceof Error?e.message:String(e);return Response.json({error:t},{status:500})}},close:()=>void 0}}function f(e,t){let a=n(t.sessionId),o=e.asyncJobTracker.forSession(t.sessionId,a),c=async n=>{let s=n.fork?await t.session.forkSource?.():void 0;if(n.fork&&!s)throw Error(`This session cannot capture a fork source.`);let c=(await e.spawnPlanner.spawn({single:{agent:n.agent.trim(),task:n.task.trim(),context:n.fork?`fork`:`fresh`,...n.model?{model:n.model}:{}},cwd:t.cwd,agentScope:`both`,sessionScope:a,environment:t.environment,parentSessionId:t.sessionId,...s?{parentForkSource:s}:{},availableModels:t.model?[r(t.model)]:[],...t.model?{parentModel:t.model}:{}},i().config)).outcomes[0];if(!c?.runId)throw Error(c?.error??`The agent did not start.`);return o.track(c.runId),{runId:c.runId}};return{basePath:s,start:()=>d({cwd:t.cwd,environment:t.environment,launch:c})}}export{s as TEAM_API_BASE_PATH,c as TEAM_CATALOG_ROUTE,l as TEAM_RUN_ROUTE,d as createTeamApiHandler,f as createTeamSessionApi};
2
- //# sourceMappingURL=teamSessionApi.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"teamSessionApi.mjs","names":[],"sources":["../../src/controllers/teamSessionApi.ts"],"sourcesContent":["import type { DoomHeadlessExecutionContext } from '@agimon-ai/doompi-core/headless';\nimport type { DoomApi, DoomApiHandler } from '@agimon-ai/doompi-core/package-api';\n\nimport { AgentDiscoveryService, resolveActiveTeamModelSpecs } from '../services/agentDiscovery';\nimport { loadConfig } from '../services/config';\nimport { toModelInfo } from '../services/modelInfo';\nimport { createSessionScope } from '../services/sessionPaths';\nimport type { TeamExtensionRuntime } from '../services/teamRuntime';\nimport { catalogModels, presentCatalog, type CatalogAgentInput } from '../services/webSubagentCatalog';\n\nexport const TEAM_API_BASE_PATH = 'team';\nexport const TEAM_CATALOG_ROUTE = '/catalog';\nexport const TEAM_RUN_ROUTE = '/run';\n\nexport interface TeamRunRequest {\n agent: string;\n task: string;\n fork: boolean;\n model?: string;\n}\n\nexport interface TeamCatalogSnapshot {\n agents: CatalogAgentInput[];\n models: string[];\n}\n\nexport interface TeamApiOptions {\n cwd: string;\n environment?: Readonly<NodeJS.ProcessEnv>;\n read?: (cwd: string) => TeamCatalogSnapshot;\n launch?: (request: TeamRunRequest) => Promise<{ runId: string }>;\n}\n\nfunction isRunRequest(value: unknown): value is TeamRunRequest {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n const request = value as Record<string, unknown>;\n return (\n typeof request.agent === 'string' &&\n request.agent.trim() !== '' &&\n typeof request.task === 'string' &&\n typeof request.fork === 'boolean' &&\n (request.model === undefined || (typeof request.model === 'string' && request.model.trim() !== '')) &&\n Object.keys(request).every((key) => ['agent', 'task', 'fork', 'model'].includes(key))\n );\n}\n\n/** Serves catalog discovery and run launch from the selected session process. */\nexport function createTeamApiHandler(options: TeamApiOptions): DoomApiHandler {\n const discovery = new AgentDiscoveryService(options.environment);\n const read =\n options.read ??\n ((cwd: string): TeamCatalogSnapshot => ({\n agents: discovery.discover(cwd, 'both').agents,\n models: resolveActiveTeamModelSpecs(options.environment) ?? [],\n }));\n\n return {\n async fetch(request) {\n const url = new URL(request.url);\n if (request.method === 'POST' && url.pathname === TEAM_RUN_ROUTE && options.launch) {\n let input: unknown;\n try {\n input = await request.json();\n } catch {\n return Response.json({ error: 'Invalid run request.' }, { status: 400 });\n }\n if (!isRunRequest(input)) return Response.json({ error: 'Invalid run request.' }, { status: 400 });\n try {\n return Response.json(await options.launch(input), { status: 201 });\n } catch (error) {\n return Response.json({ error: error instanceof Error ? error.message : String(error) }, { status: 409 });\n }\n }\n if (request.method !== 'GET' || url.pathname !== TEAM_CATALOG_ROUTE) {\n return Response.json({ error: 'Not found.' }, { status: 404 });\n }\n try {\n discovery.invalidate();\n const snapshot = read(options.cwd);\n return Response.json({\n cwd: options.cwd,\n agents: presentCatalog(snapshot.agents),\n models: catalogModels(snapshot.agents, snapshot.models),\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return Response.json({ error: message }, { status: 500 });\n }\n },\n close: () => undefined,\n };\n}\n\n/** One mounted session API, backed by the Team runtime that owns the subagent tool. */\nexport function createTeamSessionApi(runtime: TeamExtensionRuntime, execution: DoomHeadlessExecutionContext): DoomApi {\n const scope = createSessionScope(execution.sessionId);\n const jobs = runtime.asyncJobTracker.forSession(execution.sessionId, scope);\n\n const launch = async (request: TeamRunRequest): Promise<{ runId: string }> => {\n const parentForkSource = request.fork ? await execution.session.forkSource?.() : undefined;\n if (request.fork && !parentForkSource) throw new Error('This session cannot capture a fork source.');\n const plan = await runtime.spawnPlanner.spawn(\n {\n single: {\n agent: request.agent.trim(),\n task: request.task.trim(),\n context: request.fork ? 'fork' : 'fresh',\n ...(request.model ? { model: request.model } : {}),\n },\n cwd: execution.cwd,\n agentScope: 'both',\n sessionScope: scope,\n environment: execution.environment,\n parentSessionId: execution.sessionId,\n ...(parentForkSource ? { parentForkSource } : {}),\n availableModels: execution.model ? [toModelInfo(execution.model)] : [],\n ...(execution.model ? { parentModel: execution.model } : {}),\n },\n loadConfig().config,\n );\n const outcome = plan.outcomes[0];\n if (!outcome?.runId) throw new Error(outcome?.error ?? 'The agent did not start.');\n jobs.track(outcome.runId);\n return { runId: outcome.runId };\n };\n\n return {\n basePath: TEAM_API_BASE_PATH,\n start: () =>\n createTeamApiHandler({\n cwd: execution.cwd,\n environment: execution.environment,\n launch,\n }),\n };\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- const e=require("../types/webSubagents.cjs");function t(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function n(e){return t(e)&&typeof e.cwd==`string`&&Array.isArray(e.agents)&&Array.isArray(e.models)&&e.models.every(e=>typeof e==`string`)}function r(){return{frameType:e.SUBAGENT_CATALOG_TYPE,start(t){let r=new Map,i=new Map,a=new Map,o=(e,n)=>{r.get(e.sessionId)===e&&n.cwd===e.cwd&&(i.set(e.sessionId,n),t.publish(e.sessionId,n))};return{payloadFor(e){return r.has(e.sessionId)?i.get(e.sessionId):void 0},sessionAdded(s){a.get(s.sessionId)?.(),r.set(s.sessionId,s),i.delete(s.sessionId);let c=t.directEvents.subscribe(e.SUBAGENT_CATALOG_TYPE,s.sessionId,e=>{n(e)&&o(s,e)},{replayLatest:!0});a.set(s.sessionId,c)},sessionRemoved(e){a.get(e)?.(),a.delete(e),r.delete(e),i.delete(e)},close(){for(let e of a.values())e();a.clear(),r.clear(),i.clear()}}}}}exports.createSubagentCatalogChannel=r;
2
- //# sourceMappingURL=webSubagentCatalogChannel.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webSubagentCatalogChannel.cjs","names":["SUBAGENT_CATALOG_TYPE"],"sources":["../../src/controllers/webSubagentCatalogChannel.ts"],"sourcesContent":["import type {\n DoomHubChannelHost as HubChannelHost,\n DoomHubChannelSource as HubChannelSource,\n DoomHubSessionScope as HubSessionScope,\n DoomHubChannel as WebHubChannel,\n} from '@agimon-ai/doompi-core/hub-channel';\n\nimport { SUBAGENT_CATALOG_TYPE, type SubagentCatalogPayload } from '../types/webSubagents';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isSubagentCatalogPayload(value: unknown): value is SubagentCatalogPayload {\n return (\n isRecord(value) &&\n typeof value.cwd === 'string' &&\n Array.isArray(value.agents) &&\n Array.isArray(value.models) &&\n value.models.every((model) => typeof model === 'string')\n );\n}\n\n/**\n * The subagent catalog data channel consumes the session-owned catalog event.\n * The direct event bus retains a bounded latest snapshot for late subscribers.\n */\nexport function createSubagentCatalogChannel(): WebHubChannel {\n return {\n frameType: SUBAGENT_CATALOG_TYPE,\n start(host: HubChannelHost) {\n const scopes = new Map<string, HubSessionScope>();\n const latest = new Map<string, SubagentCatalogPayload>();\n const subscriptions = new Map<string, () => void>();\n const publish = (scope: HubSessionScope, payload: SubagentCatalogPayload): void => {\n if (scopes.get(scope.sessionId) !== scope || payload.cwd !== scope.cwd) return;\n latest.set(scope.sessionId, payload);\n host.publish(scope.sessionId, payload);\n };\n const source: HubChannelSource = {\n payloadFor(scope) {\n return scopes.has(scope.sessionId) ? latest.get(scope.sessionId) : undefined;\n },\n sessionAdded(scope) {\n subscriptions.get(scope.sessionId)?.();\n scopes.set(scope.sessionId, scope);\n latest.delete(scope.sessionId);\n const unsubscribe = host.directEvents.subscribe(\n SUBAGENT_CATALOG_TYPE,\n scope.sessionId,\n (value) => {\n if (isSubagentCatalogPayload(value)) publish(scope, value);\n },\n { replayLatest: true },\n );\n subscriptions.set(scope.sessionId, unsubscribe);\n },\n sessionRemoved(sessionId) {\n subscriptions.get(sessionId)?.();\n subscriptions.delete(sessionId);\n scopes.delete(sessionId);\n latest.delete(sessionId);\n },\n close() {\n for (const unsubscribe of subscriptions.values()) unsubscribe();\n subscriptions.clear();\n scopes.clear();\n latest.clear();\n },\n };\n return source;\n },\n };\n}\n"],"mappings":"6CASA,SAAS,EAAS,EAAkD,CAClE,OAAO,OAAO,GAAU,YAAY,GAAkB,CAAC,MAAM,QAAQ,CAAK,CAC5E,CAEA,SAAS,EAAyB,EAAiD,CACjF,OACE,EAAS,CAAK,GACd,OAAO,EAAM,KAAQ,UACrB,MAAM,QAAQ,EAAM,MAAM,GAC1B,MAAM,QAAQ,EAAM,MAAM,GAC1B,EAAM,OAAO,MAAO,GAAU,OAAO,GAAU,QAAQ,CAE3D,CAMA,SAAgB,GAA8C,CAC5D,MAAO,CACL,UAAWA,EAAAA,sBACX,MAAM,EAAsB,CAC1B,IAAM,EAAS,IAAI,IACb,EAAS,IAAI,IACb,EAAgB,IAAI,IACpB,GAAW,EAAwB,IAA0C,CAC7E,EAAO,IAAI,EAAM,SAAS,IAAM,GAAS,EAAQ,MAAQ,EAAM,MACnE,EAAO,IAAI,EAAM,UAAW,CAAO,EACnC,EAAK,QAAQ,EAAM,UAAW,CAAO,EACvC,EAgCA,MAAO,CA9BL,WAAW,EAAO,CAChB,OAAO,EAAO,IAAI,EAAM,SAAS,EAAI,EAAO,IAAI,EAAM,SAAS,EAAI,IAAA,EACrE,EACA,aAAa,EAAO,CAClB,EAAc,IAAI,EAAM,SAAS,CAAC,GAAG,EACrC,EAAO,IAAI,EAAM,UAAW,CAAK,EACjC,EAAO,OAAO,EAAM,SAAS,EAC7B,IAAM,EAAc,EAAK,aAAa,UACpCA,EAAAA,sBACA,EAAM,UACL,GAAU,CACL,EAAyB,CAAK,GAAG,EAAQ,EAAO,CAAK,CAC3D,EACA,CAAE,aAAc,EAAK,CACvB,EACA,EAAc,IAAI,EAAM,UAAW,CAAW,CAChD,EACA,eAAe,EAAW,CACxB,EAAc,IAAI,CAAS,CAAC,GAAG,EAC/B,EAAc,OAAO,CAAS,EAC9B,EAAO,OAAO,CAAS,EACvB,EAAO,OAAO,CAAS,CACzB,EACA,OAAQ,CACN,IAAK,IAAM,KAAe,EAAc,OAAO,EAAG,EAAY,EAC9D,EAAc,MAAM,EACpB,EAAO,MAAM,EACb,EAAO,MAAM,CACf,CAEU,CACd,CACF,CACF"}
@@ -1,2 +0,0 @@
1
- import{SUBAGENT_CATALOG_TYPE as e}from"../types/webSubagents.mjs";function t(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function n(e){return t(e)&&typeof e.cwd==`string`&&Array.isArray(e.agents)&&Array.isArray(e.models)&&e.models.every(e=>typeof e==`string`)}function r(){return{frameType:e,start(t){let r=new Map,i=new Map,a=new Map,o=(e,n)=>{r.get(e.sessionId)===e&&n.cwd===e.cwd&&(i.set(e.sessionId,n),t.publish(e.sessionId,n))};return{payloadFor(e){return r.has(e.sessionId)?i.get(e.sessionId):void 0},sessionAdded(s){a.get(s.sessionId)?.(),r.set(s.sessionId,s),i.delete(s.sessionId);let c=t.directEvents.subscribe(e,s.sessionId,e=>{n(e)&&o(s,e)},{replayLatest:!0});a.set(s.sessionId,c)},sessionRemoved(e){a.get(e)?.(),a.delete(e),r.delete(e),i.delete(e)},close(){for(let e of a.values())e();a.clear(),r.clear(),i.clear()}}}}}export{r as createSubagentCatalogChannel};
2
- //# sourceMappingURL=webSubagentCatalogChannel.mjs.map