@geminixiang/mikan 1.0.0-beta.7 → 1.0.0-beta.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (856) hide show
  1. package/CHANGELOG.md +1052 -0
  2. package/README.md +98 -38
  3. package/dist/adapters/commands/admin.d.ts.map +1 -0
  4. package/dist/{commands → adapters/commands}/admin.js +11 -8
  5. package/dist/adapters/commands/admin.js.map +1 -0
  6. package/dist/{commands → adapters/commands}/auto-reply.d.ts +0 -3
  7. package/dist/adapters/commands/auto-reply.d.ts.map +1 -0
  8. package/dist/adapters/commands/auto-reply.js +47 -0
  9. package/dist/adapters/commands/auto-reply.js.map +1 -0
  10. package/dist/adapters/commands/login.d.ts +6 -0
  11. package/dist/adapters/commands/login.d.ts.map +1 -0
  12. package/dist/adapters/commands/login.js +166 -0
  13. package/dist/adapters/commands/login.js.map +1 -0
  14. package/dist/adapters/commands/manifest.d.ts +37 -0
  15. package/dist/adapters/commands/manifest.d.ts.map +1 -0
  16. package/dist/adapters/commands/manifest.js +155 -0
  17. package/dist/adapters/commands/manifest.js.map +1 -0
  18. package/dist/adapters/commands/model.d.ts +15 -0
  19. package/dist/adapters/commands/model.d.ts.map +1 -0
  20. package/dist/adapters/commands/model.js +153 -0
  21. package/dist/adapters/commands/model.js.map +1 -0
  22. package/dist/adapters/commands/new.d.ts.map +1 -0
  23. package/dist/adapters/commands/new.js +41 -0
  24. package/dist/adapters/commands/new.js.map +1 -0
  25. package/dist/adapters/commands/registry.d.ts +5 -0
  26. package/dist/adapters/commands/registry.d.ts.map +1 -0
  27. package/dist/adapters/commands/registry.js +43 -0
  28. package/dist/adapters/commands/registry.js.map +1 -0
  29. package/dist/adapters/commands/sandbox.d.ts.map +1 -0
  30. package/dist/adapters/commands/sandbox.js +125 -0
  31. package/dist/adapters/commands/sandbox.js.map +1 -0
  32. package/dist/adapters/commands/session-view.d.ts.map +1 -0
  33. package/dist/{commands → adapters/commands}/session-view.js +23 -16
  34. package/dist/adapters/commands/session-view.js.map +1 -0
  35. package/dist/adapters/commands/types.d.ts +145 -0
  36. package/dist/adapters/commands/types.d.ts.map +1 -0
  37. package/dist/adapters/commands/types.js.map +1 -0
  38. package/dist/adapters/commands/utils.d.ts +14 -0
  39. package/dist/adapters/commands/utils.d.ts.map +1 -0
  40. package/dist/{commands → adapters/commands}/utils.js +18 -1
  41. package/dist/adapters/commands/utils.js.map +1 -0
  42. package/dist/adapters/discord/bot.d.ts +11 -8
  43. package/dist/adapters/discord/bot.d.ts.map +1 -1
  44. package/dist/adapters/discord/bot.js +223 -256
  45. package/dist/adapters/discord/bot.js.map +1 -1
  46. package/dist/adapters/discord/components.d.ts +28 -0
  47. package/dist/adapters/discord/components.d.ts.map +1 -0
  48. package/dist/adapters/discord/components.js +32 -0
  49. package/dist/adapters/discord/components.js.map +1 -0
  50. package/dist/adapters/discord/context.d.ts +2 -6
  51. package/dist/adapters/discord/context.d.ts.map +1 -1
  52. package/dist/adapters/discord/context.js +64 -218
  53. package/dist/adapters/discord/context.js.map +1 -1
  54. package/dist/adapters/discord/format.d.ts +3 -0
  55. package/dist/adapters/discord/format.d.ts.map +1 -0
  56. package/dist/adapters/discord/format.js +84 -0
  57. package/dist/adapters/discord/format.js.map +1 -0
  58. package/dist/adapters/discord/types.d.ts +8 -1
  59. package/dist/adapters/discord/types.d.ts.map +1 -1
  60. package/dist/adapters/discord/types.js.map +1 -1
  61. package/dist/adapters/github/bot.d.ts +102 -0
  62. package/dist/adapters/github/bot.d.ts.map +1 -0
  63. package/dist/adapters/github/bot.js +720 -0
  64. package/dist/adapters/github/bot.js.map +1 -0
  65. package/dist/adapters/github/client.d.ts +122 -0
  66. package/dist/adapters/github/client.d.ts.map +1 -0
  67. package/dist/adapters/github/client.js +301 -0
  68. package/dist/adapters/github/client.js.map +1 -0
  69. package/dist/adapters/github/context.d.ts +5 -0
  70. package/dist/adapters/github/context.d.ts.map +1 -0
  71. package/dist/adapters/github/context.js +101 -0
  72. package/dist/adapters/github/context.js.map +1 -0
  73. package/dist/adapters/github/github-ops.d.ts +78 -0
  74. package/dist/adapters/github/github-ops.d.ts.map +1 -0
  75. package/dist/adapters/github/github-ops.js +337 -0
  76. package/dist/adapters/github/github-ops.js.map +1 -0
  77. package/dist/adapters/github/ids.d.ts +34 -0
  78. package/dist/adapters/github/ids.d.ts.map +1 -0
  79. package/dist/adapters/github/ids.js +57 -0
  80. package/dist/adapters/github/ids.js.map +1 -0
  81. package/dist/adapters/github/repo.d.ts +33 -0
  82. package/dist/adapters/github/repo.d.ts.map +1 -0
  83. package/dist/adapters/github/repo.js +141 -0
  84. package/dist/adapters/github/repo.js.map +1 -0
  85. package/dist/adapters/github/tool-pack.d.ts +14 -0
  86. package/dist/adapters/github/tool-pack.d.ts.map +1 -0
  87. package/dist/adapters/github/tool-pack.js +55 -0
  88. package/dist/adapters/github/tool-pack.js.map +1 -0
  89. package/dist/adapters/github/tools/checks.d.ts +18 -0
  90. package/dist/adapters/github/tools/checks.d.ts.map +1 -0
  91. package/dist/adapters/github/tools/checks.js +86 -0
  92. package/dist/adapters/github/tools/checks.js.map +1 -0
  93. package/dist/adapters/github/tools/issue.d.ts +21 -0
  94. package/dist/adapters/github/tools/issue.d.ts.map +1 -0
  95. package/dist/adapters/github/tools/issue.js +48 -0
  96. package/dist/adapters/github/tools/issue.js.map +1 -0
  97. package/dist/adapters/github/tools/pr.d.ts +22 -0
  98. package/dist/adapters/github/tools/pr.d.ts.map +1 -0
  99. package/dist/adapters/github/tools/pr.js +48 -0
  100. package/dist/adapters/github/tools/pr.js.map +1 -0
  101. package/dist/adapters/github/tools/read.d.ts +21 -0
  102. package/dist/adapters/github/tools/read.d.ts.map +1 -0
  103. package/dist/adapters/github/tools/read.js +141 -0
  104. package/dist/adapters/github/tools/read.js.map +1 -0
  105. package/dist/adapters/github/tools/review-reply.d.ts +17 -0
  106. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
  107. package/dist/adapters/github/tools/review-reply.js +38 -0
  108. package/dist/adapters/github/tools/review-reply.js.map +1 -0
  109. package/dist/adapters/github/tools/sync.d.ts +17 -0
  110. package/dist/adapters/github/tools/sync.d.ts.map +1 -0
  111. package/dist/adapters/github/tools/sync.js +34 -0
  112. package/dist/adapters/github/tools/sync.js.map +1 -0
  113. package/dist/adapters/github/types.d.ts +345 -0
  114. package/dist/adapters/github/types.d.ts.map +1 -0
  115. package/dist/adapters/github/types.js.map +1 -0
  116. package/dist/adapters/github/webhook.d.ts +20 -0
  117. package/dist/adapters/github/webhook.d.ts.map +1 -0
  118. package/dist/adapters/github/webhook.js +78 -0
  119. package/dist/adapters/github/webhook.js.map +1 -0
  120. package/dist/adapters/index.d.ts +12 -0
  121. package/dist/adapters/index.d.ts.map +1 -0
  122. package/dist/adapters/index.js +19 -0
  123. package/dist/adapters/index.js.map +1 -0
  124. package/dist/adapters/intake.d.ts +17 -6
  125. package/dist/adapters/intake.d.ts.map +1 -1
  126. package/dist/adapters/intake.js +96 -27
  127. package/dist/adapters/intake.js.map +1 -1
  128. package/dist/adapters/markdown-tables.d.ts +19 -0
  129. package/dist/adapters/markdown-tables.d.ts.map +1 -0
  130. package/dist/adapters/markdown-tables.js +152 -0
  131. package/dist/adapters/markdown-tables.js.map +1 -0
  132. package/dist/{platform-messages.d.ts → adapters/messages.d.ts} +3 -2
  133. package/dist/adapters/messages.d.ts.map +1 -0
  134. package/dist/{platform-messages.js → adapters/messages.js} +4 -1
  135. package/dist/adapters/messages.js.map +1 -0
  136. package/dist/adapters/progressive-renderer.d.ts +7 -0
  137. package/dist/adapters/progressive-renderer.d.ts.map +1 -0
  138. package/dist/adapters/progressive-renderer.js +443 -0
  139. package/dist/adapters/progressive-renderer.js.map +1 -0
  140. package/dist/adapters/shared.d.ts +37 -11
  141. package/dist/adapters/shared.d.ts.map +1 -1
  142. package/dist/adapters/shared.js +130 -24
  143. package/dist/adapters/shared.js.map +1 -1
  144. package/dist/adapters/slack/assistant.d.ts +73 -0
  145. package/dist/adapters/slack/assistant.d.ts.map +1 -0
  146. package/dist/adapters/slack/assistant.js +205 -0
  147. package/dist/adapters/slack/assistant.js.map +1 -0
  148. package/dist/adapters/slack/auto-reply-context.d.ts +21 -0
  149. package/dist/adapters/slack/auto-reply-context.d.ts.map +1 -0
  150. package/dist/adapters/slack/auto-reply-context.js +28 -0
  151. package/dist/adapters/slack/auto-reply-context.js.map +1 -0
  152. package/dist/adapters/slack/blocks.d.ts +14 -0
  153. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  154. package/dist/adapters/slack/blocks.js +104 -148
  155. package/dist/adapters/slack/blocks.js.map +1 -1
  156. package/dist/adapters/slack/bot.d.ts +154 -21
  157. package/dist/adapters/slack/bot.d.ts.map +1 -1
  158. package/dist/adapters/slack/bot.js +1037 -484
  159. package/dist/adapters/slack/bot.js.map +1 -1
  160. package/dist/adapters/slack/context.d.ts +2 -6
  161. package/dist/adapters/slack/context.d.ts.map +1 -1
  162. package/dist/adapters/slack/context.js +11 -17
  163. package/dist/adapters/slack/context.js.map +1 -1
  164. package/dist/adapters/slack/jev-context.d.ts +30 -0
  165. package/dist/adapters/slack/jev-context.d.ts.map +1 -0
  166. package/dist/adapters/slack/jev-context.js +67 -0
  167. package/dist/adapters/slack/jev-context.js.map +1 -0
  168. package/dist/adapters/slack/markdown.d.ts +3 -0
  169. package/dist/adapters/slack/markdown.d.ts.map +1 -0
  170. package/dist/adapters/slack/markdown.js +48 -0
  171. package/dist/adapters/slack/markdown.js.map +1 -0
  172. package/dist/adapters/slack/persona.d.ts +15 -0
  173. package/dist/adapters/slack/persona.d.ts.map +1 -0
  174. package/dist/adapters/slack/persona.js +22 -0
  175. package/dist/adapters/slack/persona.js.map +1 -0
  176. package/dist/adapters/slack/response-lifecycle.d.ts +1 -1
  177. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  178. package/dist/adapters/slack/response-lifecycle.js +261 -345
  179. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  180. package/dist/adapters/slack/session.d.ts.map +1 -1
  181. package/dist/adapters/slack/session.js +7 -11
  182. package/dist/adapters/slack/session.js.map +1 -1
  183. package/dist/adapters/slack/stream-limits.d.ts +35 -0
  184. package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
  185. package/dist/adapters/slack/stream-limits.js +56 -0
  186. package/dist/adapters/slack/stream-limits.js.map +1 -0
  187. package/dist/adapters/slack/task-intent.d.ts +32 -0
  188. package/dist/adapters/slack/task-intent.d.ts.map +1 -0
  189. package/dist/adapters/slack/task-intent.js +72 -0
  190. package/dist/adapters/slack/task-intent.js.map +1 -0
  191. package/dist/adapters/slack/task-status.d.ts +7 -0
  192. package/dist/adapters/slack/task-status.d.ts.map +1 -0
  193. package/dist/adapters/slack/task-status.js +107 -0
  194. package/dist/adapters/slack/task-status.js.map +1 -0
  195. package/dist/adapters/slack/tool-pack.d.ts +11 -0
  196. package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
  197. package/dist/adapters/slack/tool-pack.js +45 -0
  198. package/dist/adapters/slack/tool-pack.js.map +1 -0
  199. package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
  200. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
  201. package/dist/adapters/slack/tools/blockkit.js +106 -0
  202. package/dist/adapters/slack/tools/blockkit.js.map +1 -0
  203. package/dist/adapters/slack/types.d.ts +73 -2
  204. package/dist/adapters/slack/types.d.ts.map +1 -1
  205. package/dist/adapters/slack/types.js.map +1 -1
  206. package/dist/adapters/slack/update-diagnostics.d.ts +14 -0
  207. package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
  208. package/dist/adapters/slack/update-diagnostics.js +134 -0
  209. package/dist/adapters/slack/update-diagnostics.js.map +1 -0
  210. package/dist/adapters/telegram/bot.d.ts +10 -9
  211. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  212. package/dist/adapters/telegram/bot.js +133 -202
  213. package/dist/adapters/telegram/bot.js.map +1 -1
  214. package/dist/adapters/telegram/context.d.ts +2 -6
  215. package/dist/adapters/telegram/context.d.ts.map +1 -1
  216. package/dist/adapters/telegram/context.js +53 -190
  217. package/dist/adapters/telegram/context.js.map +1 -1
  218. package/dist/adapters/telegram/types.d.ts +1 -1
  219. package/dist/adapters/telegram/types.d.ts.map +1 -1
  220. package/dist/adapters/telegram/types.js.map +1 -1
  221. package/dist/adapters/types.d.ts +144 -13
  222. package/dist/adapters/types.d.ts.map +1 -1
  223. package/dist/adapters/types.js.map +1 -1
  224. package/dist/adapters/web/admin/portal.d.ts +44 -0
  225. package/dist/adapters/web/admin/portal.d.ts.map +1 -0
  226. package/dist/adapters/web/admin/portal.js +3207 -0
  227. package/dist/adapters/web/admin/portal.js.map +1 -0
  228. package/dist/{web → adapters/web}/admin/provider-models.d.ts +1 -1
  229. package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
  230. package/dist/{web → adapters/web}/admin/provider-models.js +1 -1
  231. package/dist/adapters/web/admin/provider-models.js.map +1 -0
  232. package/dist/adapters/web/admin/types.d.ts +53 -0
  233. package/dist/adapters/web/admin/types.d.ts.map +1 -0
  234. package/dist/adapters/web/admin/types.js.map +1 -0
  235. package/dist/adapters/web/login/oauth.d.ts +5 -0
  236. package/dist/adapters/web/login/oauth.d.ts.map +1 -0
  237. package/dist/{web → adapters/web}/login/oauth.js +50 -85
  238. package/dist/adapters/web/login/oauth.js.map +1 -0
  239. package/dist/{web → adapters/web}/login/portal.d.ts +9 -3
  240. package/dist/adapters/web/login/portal.d.ts.map +1 -0
  241. package/dist/{web → adapters/web}/login/portal.js +161 -119
  242. package/dist/adapters/web/login/portal.js.map +1 -0
  243. package/dist/{web → adapters/web}/login/types.d.ts +1 -12
  244. package/dist/adapters/web/login/types.d.ts.map +1 -0
  245. package/dist/adapters/web/login/types.js.map +1 -0
  246. package/dist/adapters/web/portal-shell.d.ts +22 -0
  247. package/dist/adapters/web/portal-shell.d.ts.map +1 -0
  248. package/dist/{portal-shell.js → adapters/web/portal-shell.js} +78 -2
  249. package/dist/adapters/web/portal-shell.js.map +1 -0
  250. package/dist/{web → adapters/web}/server.d.ts +14 -8
  251. package/dist/adapters/web/server.d.ts.map +1 -0
  252. package/dist/{web → adapters/web}/server.js +14 -7
  253. package/dist/adapters/web/server.js.map +1 -0
  254. package/dist/adapters/web/session-view/portal.d.ts +20 -0
  255. package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
  256. package/dist/{web → adapters/web}/session-view/portal.js +633 -162
  257. package/dist/adapters/web/session-view/portal.js.map +1 -0
  258. package/dist/{web → adapters/web}/session-view/types.d.ts +11 -6
  259. package/dist/adapters/web/session-view/types.d.ts.map +1 -0
  260. package/dist/adapters/web/session-view/types.js.map +1 -0
  261. package/dist/adapters/web/token-store.d.ts.map +1 -0
  262. package/dist/{web → adapters/web}/token-store.js +1 -1
  263. package/dist/adapters/web/token-store.js.map +1 -0
  264. package/dist/adapters/web/types.d.ts.map +1 -0
  265. package/dist/adapters/web/types.js.map +1 -0
  266. package/dist/cli/arg-grammar.d.ts +11 -0
  267. package/dist/cli/arg-grammar.d.ts.map +1 -0
  268. package/dist/cli/arg-grammar.js +50 -0
  269. package/dist/cli/arg-grammar.js.map +1 -0
  270. package/dist/cli/boot.d.ts +5 -0
  271. package/dist/cli/boot.d.ts.map +1 -0
  272. package/dist/cli/boot.js +90 -0
  273. package/dist/cli/boot.js.map +1 -0
  274. package/dist/cli/download.d.ts.map +1 -0
  275. package/dist/cli/download.js +88 -0
  276. package/dist/cli/download.js.map +1 -0
  277. package/dist/cli/office.d.ts +2 -0
  278. package/dist/cli/office.d.ts.map +1 -0
  279. package/dist/cli/office.js +181 -0
  280. package/dist/cli/office.js.map +1 -0
  281. package/dist/cli/onboard.d.ts +10 -0
  282. package/dist/cli/onboard.d.ts.map +1 -0
  283. package/dist/cli/onboard.js +225 -0
  284. package/dist/cli/onboard.js.map +1 -0
  285. package/dist/cli/process-lifecycle.d.ts +19 -0
  286. package/dist/cli/process-lifecycle.d.ts.map +1 -0
  287. package/dist/cli/process-lifecycle.js +67 -0
  288. package/dist/cli/process-lifecycle.js.map +1 -0
  289. package/dist/cli/sessions.d.ts +2 -0
  290. package/dist/cli/sessions.d.ts.map +1 -0
  291. package/dist/cli/sessions.js +88 -0
  292. package/dist/cli/sessions.js.map +1 -0
  293. package/dist/cli/types.d.ts +25 -0
  294. package/dist/cli/types.d.ts.map +1 -0
  295. package/dist/cli/types.js.map +1 -0
  296. package/dist/dream/index.d.ts +20 -0
  297. package/dist/dream/index.d.ts.map +1 -0
  298. package/dist/dream/index.js +264 -0
  299. package/dist/dream/index.js.map +1 -0
  300. package/dist/dream/types.d.ts +30 -0
  301. package/dist/dream/types.d.ts.map +1 -0
  302. package/dist/dream/types.js +2 -0
  303. package/dist/dream/types.js.map +1 -0
  304. package/dist/env-manifest.d.ts +38 -0
  305. package/dist/env-manifest.d.ts.map +1 -0
  306. package/dist/env-manifest.js +260 -0
  307. package/dist/env-manifest.js.map +1 -0
  308. package/dist/events/index.d.ts +172 -0
  309. package/dist/events/index.d.ts.map +1 -0
  310. package/dist/events/index.js +340 -0
  311. package/dist/events/index.js.map +1 -0
  312. package/dist/events/scheduler.d.ts +34 -0
  313. package/dist/events/scheduler.d.ts.map +1 -0
  314. package/dist/events/scheduler.js +231 -0
  315. package/dist/events/scheduler.js.map +1 -0
  316. package/dist/file-guards.d.ts +26 -0
  317. package/dist/file-guards.d.ts.map +1 -0
  318. package/dist/file-guards.js +133 -0
  319. package/dist/file-guards.js.map +1 -0
  320. package/dist/harness/execution-env.d.ts +19 -0
  321. package/dist/harness/execution-env.d.ts.map +1 -0
  322. package/dist/harness/execution-env.js +262 -0
  323. package/dist/harness/execution-env.js.map +1 -0
  324. package/dist/harness/execution-resolver.d.ts +25 -0
  325. package/dist/harness/execution-resolver.d.ts.map +1 -0
  326. package/dist/harness/execution-resolver.js +156 -0
  327. package/dist/harness/execution-resolver.js.map +1 -0
  328. package/dist/harness/index.d.ts +18 -13
  329. package/dist/harness/index.d.ts.map +1 -1
  330. package/dist/harness/index.js +11 -11
  331. package/dist/harness/index.js.map +1 -1
  332. package/dist/harness/jev.d.ts +86 -0
  333. package/dist/harness/jev.d.ts.map +1 -0
  334. package/dist/harness/jev.js +167 -0
  335. package/dist/harness/jev.js.map +1 -0
  336. package/dist/harness/mcp.d.ts +38 -0
  337. package/dist/harness/mcp.d.ts.map +1 -0
  338. package/dist/harness/mcp.js +304 -0
  339. package/dist/harness/mcp.js.map +1 -0
  340. package/dist/harness/models.d.ts +7 -4
  341. package/dist/harness/models.d.ts.map +1 -1
  342. package/dist/harness/models.js +54 -55
  343. package/dist/harness/models.js.map +1 -1
  344. package/dist/harness/open-connector.d.ts +25 -0
  345. package/dist/harness/open-connector.d.ts.map +1 -0
  346. package/dist/harness/open-connector.js +178 -0
  347. package/dist/harness/open-connector.js.map +1 -0
  348. package/dist/harness/presenter.d.ts +31 -0
  349. package/dist/harness/presenter.d.ts.map +1 -0
  350. package/dist/harness/presenter.js +859 -0
  351. package/dist/harness/presenter.js.map +1 -0
  352. package/dist/harness/prompt.d.ts +30 -0
  353. package/dist/harness/prompt.d.ts.map +1 -0
  354. package/dist/harness/prompt.js +420 -0
  355. package/dist/harness/prompt.js.map +1 -0
  356. package/dist/harness/runner.d.ts +2 -123
  357. package/dist/harness/runner.d.ts.map +1 -1
  358. package/dist/harness/runner.js +551 -416
  359. package/dist/harness/runner.js.map +1 -1
  360. package/dist/harness/session.d.ts +122 -0
  361. package/dist/harness/session.d.ts.map +1 -0
  362. package/dist/harness/session.js +581 -0
  363. package/dist/harness/session.js.map +1 -0
  364. package/dist/harness/skills.d.ts +17 -28
  365. package/dist/harness/skills.d.ts.map +1 -1
  366. package/dist/harness/skills.js +104 -39
  367. package/dist/harness/skills.js.map +1 -1
  368. package/dist/harness/subagent-profiles.d.ts +8 -0
  369. package/dist/harness/subagent-profiles.d.ts.map +1 -0
  370. package/dist/harness/subagent-profiles.js +293 -0
  371. package/dist/harness/subagent-profiles.js.map +1 -0
  372. package/dist/harness/subagent.d.ts +64 -0
  373. package/dist/harness/subagent.d.ts.map +1 -0
  374. package/dist/harness/subagent.js +687 -0
  375. package/dist/harness/subagent.js.map +1 -0
  376. package/dist/harness/tools/attach.d.ts.map +1 -0
  377. package/dist/{adapters/slack → harness}/tools/attach.js +1 -1
  378. package/dist/harness/tools/attach.js.map +1 -0
  379. package/dist/{tools → harness/tools}/event.d.ts +4 -33
  380. package/dist/harness/tools/event.d.ts.map +1 -0
  381. package/dist/harness/tools/event.js +175 -0
  382. package/dist/harness/tools/event.js.map +1 -0
  383. package/dist/harness/tools/generate-image.d.ts +23 -0
  384. package/dist/harness/tools/generate-image.d.ts.map +1 -0
  385. package/dist/harness/tools/generate-image.js +65 -0
  386. package/dist/harness/tools/generate-image.js.map +1 -0
  387. package/dist/harness/tools/host-fn-tool.d.ts +21 -0
  388. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
  389. package/dist/harness/tools/host-fn-tool.js +32 -0
  390. package/dist/harness/tools/host-fn-tool.js.map +1 -0
  391. package/dist/harness/tools/index.d.ts +41 -0
  392. package/dist/harness/tools/index.d.ts.map +1 -0
  393. package/dist/harness/tools/index.js +51 -0
  394. package/dist/harness/tools/index.js.map +1 -0
  395. package/dist/harness/tools/jev.d.ts +21 -0
  396. package/dist/harness/tools/jev.d.ts.map +1 -0
  397. package/dist/harness/tools/jev.js +109 -0
  398. package/dist/harness/tools/jev.js.map +1 -0
  399. package/dist/harness/tools/pi-tools.d.ts +18 -0
  400. package/dist/harness/tools/pi-tools.d.ts.map +1 -0
  401. package/dist/harness/tools/pi-tools.js +84 -0
  402. package/dist/harness/tools/pi-tools.js.map +1 -0
  403. package/dist/harness/tools/react.d.ts.map +1 -0
  404. package/dist/{tools → harness/tools}/react.js +6 -17
  405. package/dist/harness/tools/react.js.map +1 -0
  406. package/dist/{tools → harness/tools}/sandbox.d.ts +4 -4
  407. package/dist/harness/tools/sandbox.d.ts.map +1 -0
  408. package/dist/{tools → harness/tools}/sandbox.js +12 -8
  409. package/dist/harness/tools/sandbox.js.map +1 -0
  410. package/dist/harness/tools/subagent.d.ts +85 -0
  411. package/dist/harness/tools/subagent.d.ts.map +1 -0
  412. package/dist/harness/tools/subagent.js +677 -0
  413. package/dist/harness/tools/subagent.js.map +1 -0
  414. package/dist/harness/tools/task.d.ts +20 -0
  415. package/dist/harness/tools/task.d.ts.map +1 -0
  416. package/dist/harness/tools/task.js +79 -0
  417. package/dist/harness/tools/task.js.map +1 -0
  418. package/dist/harness/tools/types.d.ts +29 -0
  419. package/dist/harness/tools/types.d.ts.map +1 -0
  420. package/dist/harness/tools/types.js +2 -0
  421. package/dist/harness/tools/types.js.map +1 -0
  422. package/dist/harness/types.d.ts +384 -25
  423. package/dist/harness/types.d.ts.map +1 -1
  424. package/dist/harness/types.js +1 -1
  425. package/dist/harness/types.js.map +1 -1
  426. package/dist/index.d.ts +33 -9
  427. package/dist/index.d.ts.map +1 -1
  428. package/dist/index.js +19 -6
  429. package/dist/index.js.map +1 -1
  430. package/dist/log.d.ts.map +1 -1
  431. package/dist/log.js +4 -1
  432. package/dist/log.js.map +1 -1
  433. package/dist/main.js +357 -198
  434. package/dist/main.js.map +1 -1
  435. package/dist/observability/index.d.ts +33 -0
  436. package/dist/observability/index.d.ts.map +1 -0
  437. package/dist/observability/index.js +257 -0
  438. package/dist/observability/index.js.map +1 -0
  439. package/dist/observability/instrument.js +14 -6
  440. package/dist/observability/instrument.js.map +1 -1
  441. package/dist/observability/otel.d.ts +10 -0
  442. package/dist/observability/otel.d.ts.map +1 -0
  443. package/dist/observability/otel.js +183 -0
  444. package/dist/observability/otel.js.map +1 -0
  445. package/dist/observability/sentry.d.ts +40 -7
  446. package/dist/observability/sentry.d.ts.map +1 -1
  447. package/dist/observability/sentry.js +176 -32
  448. package/dist/observability/sentry.js.map +1 -1
  449. package/dist/observability/types.d.ts +24 -3
  450. package/dist/observability/types.d.ts.map +1 -1
  451. package/dist/observability/types.js.map +1 -1
  452. package/dist/office/index.d.ts +139 -0
  453. package/dist/office/index.d.ts.map +1 -0
  454. package/dist/office/index.js +1084 -0
  455. package/dist/office/index.js.map +1 -0
  456. package/dist/office/projection.d.ts +42 -0
  457. package/dist/office/projection.d.ts.map +1 -0
  458. package/dist/office/projection.js +182 -0
  459. package/dist/office/projection.js.map +1 -0
  460. package/dist/office/types.d.ts +116 -0
  461. package/dist/office/types.d.ts.map +1 -0
  462. package/dist/office/types.js +2 -0
  463. package/dist/office/types.js.map +1 -0
  464. package/dist/runtime/conversation-runtime.d.ts +1 -1
  465. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  466. package/dist/runtime/conversation-runtime.js +423 -152
  467. package/dist/runtime/conversation-runtime.js.map +1 -1
  468. package/dist/runtime/session-lifecycle.d.ts +76 -0
  469. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  470. package/dist/runtime/session-lifecycle.js +404 -0
  471. package/dist/runtime/session-lifecycle.js.map +1 -0
  472. package/dist/runtime/types.d.ts +63 -15
  473. package/dist/runtime/types.d.ts.map +1 -1
  474. package/dist/runtime/types.js.map +1 -1
  475. package/dist/sandbox/cloudflare.d.ts +4 -0
  476. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  477. package/dist/sandbox/cloudflare.js +54 -52
  478. package/dist/sandbox/cloudflare.js.map +1 -1
  479. package/dist/sandbox/container.d.ts +3 -0
  480. package/dist/sandbox/container.d.ts.map +1 -1
  481. package/dist/sandbox/container.js +19 -7
  482. package/dist/sandbox/container.js.map +1 -1
  483. package/dist/sandbox/host.d.ts +3 -0
  484. package/dist/sandbox/host.d.ts.map +1 -1
  485. package/dist/sandbox/host.js +44 -35
  486. package/dist/sandbox/host.js.map +1 -1
  487. package/dist/sandbox/identity.d.ts +42 -0
  488. package/dist/sandbox/identity.d.ts.map +1 -0
  489. package/dist/sandbox/identity.js +77 -0
  490. package/dist/sandbox/identity.js.map +1 -0
  491. package/dist/sandbox/index.d.ts +24 -6
  492. package/dist/sandbox/index.d.ts.map +1 -1
  493. package/dist/sandbox/index.js +77 -17
  494. package/dist/sandbox/index.js.map +1 -1
  495. package/dist/sandbox/provisioner.d.ts +139 -0
  496. package/dist/sandbox/provisioner.d.ts.map +1 -0
  497. package/dist/{provisioner.js → sandbox/provisioner.js} +378 -24
  498. package/dist/sandbox/provisioner.js.map +1 -0
  499. package/dist/sandbox/types.d.ts +43 -9
  500. package/dist/sandbox/types.d.ts.map +1 -1
  501. package/dist/sandbox/types.js.map +1 -1
  502. package/dist/sandbox/utils.d.ts +24 -0
  503. package/dist/sandbox/utils.d.ts.map +1 -1
  504. package/dist/sandbox/utils.js +92 -1
  505. package/dist/sandbox/utils.js.map +1 -1
  506. package/dist/sessions/chat-history-sync.d.ts +23 -0
  507. package/dist/sessions/chat-history-sync.d.ts.map +1 -0
  508. package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +239 -175
  509. package/dist/sessions/chat-history-sync.js.map +1 -0
  510. package/dist/sessions/history-line.d.ts +29 -0
  511. package/dist/sessions/history-line.d.ts.map +1 -0
  512. package/dist/sessions/history-line.js +45 -0
  513. package/dist/sessions/history-line.js.map +1 -0
  514. package/dist/sessions/migrate-common.d.ts +43 -0
  515. package/dist/sessions/migrate-common.d.ts.map +1 -0
  516. package/dist/sessions/migrate-common.js +99 -0
  517. package/dist/sessions/migrate-common.js.map +1 -0
  518. package/dist/sessions/migrate-pi-084.d.ts +8 -0
  519. package/dist/sessions/migrate-pi-084.d.ts.map +1 -0
  520. package/dist/sessions/migrate-pi-084.js +302 -0
  521. package/dist/sessions/migrate-pi-084.js.map +1 -0
  522. package/dist/sessions/migrate-v3.d.ts +15 -0
  523. package/dist/sessions/migrate-v3.d.ts.map +1 -0
  524. package/dist/sessions/migrate-v3.js +419 -0
  525. package/dist/sessions/migrate-v3.js.map +1 -0
  526. package/dist/sessions/session-key.d.ts +33 -0
  527. package/dist/sessions/session-key.d.ts.map +1 -0
  528. package/dist/sessions/session-key.js +115 -0
  529. package/dist/sessions/session-key.js.map +1 -0
  530. package/dist/sessions/session-store.d.ts +61 -0
  531. package/dist/sessions/session-store.d.ts.map +1 -0
  532. package/dist/sessions/session-store.js +684 -0
  533. package/dist/sessions/session-store.js.map +1 -0
  534. package/dist/sessions/store.d.ts +17 -10
  535. package/dist/sessions/store.d.ts.map +1 -1
  536. package/dist/sessions/store.js +182 -47
  537. package/dist/sessions/store.js.map +1 -1
  538. package/dist/sessions/types.d.ts +74 -8
  539. package/dist/sessions/types.d.ts.map +1 -1
  540. package/dist/sessions/types.js +1 -1
  541. package/dist/sessions/types.js.map +1 -1
  542. package/dist/settings/apply.d.ts +16 -0
  543. package/dist/settings/apply.d.ts.map +1 -0
  544. package/dist/settings/apply.js +60 -0
  545. package/dist/settings/apply.js.map +1 -0
  546. package/dist/settings/index.d.ts +126 -0
  547. package/dist/settings/index.d.ts.map +1 -0
  548. package/dist/settings/index.js +422 -0
  549. package/dist/settings/index.js.map +1 -0
  550. package/dist/settings/migrate.d.ts +21 -0
  551. package/dist/settings/migrate.d.ts.map +1 -0
  552. package/dist/settings/migrate.js +86 -0
  553. package/dist/settings/migrate.js.map +1 -0
  554. package/dist/types.d.ts +330 -141
  555. package/dist/types.d.ts.map +1 -1
  556. package/dist/types.js +2 -2
  557. package/dist/types.js.map +1 -1
  558. package/dist/vault/index.d.ts +52 -2
  559. package/dist/vault/index.d.ts.map +1 -1
  560. package/dist/vault/index.js +218 -86
  561. package/dist/vault/index.js.map +1 -1
  562. package/dist/vault/types.d.ts +6 -2
  563. package/dist/vault/types.d.ts.map +1 -1
  564. package/dist/vault/types.js.map +1 -1
  565. package/package.json +79 -40
  566. package/dist/adapter.d.ts +0 -2
  567. package/dist/adapter.d.ts.map +0 -1
  568. package/dist/adapter.js +0 -2
  569. package/dist/adapter.js.map +0 -1
  570. package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
  571. package/dist/adapters/slack/tools/attach.js.map +0 -1
  572. package/dist/adapters/streaming.d.ts +0 -18
  573. package/dist/adapters/streaming.d.ts.map +0 -1
  574. package/dist/adapters/streaming.js +0 -44
  575. package/dist/adapters/streaming.js.map +0 -1
  576. package/dist/adapters/telegram/html.d.ts +0 -3
  577. package/dist/adapters/telegram/html.d.ts.map +0 -1
  578. package/dist/adapters/telegram/html.js +0 -98
  579. package/dist/adapters/telegram/html.js.map +0 -1
  580. package/dist/agent-events.d.ts +0 -5
  581. package/dist/agent-events.d.ts.map +0 -1
  582. package/dist/agent-events.js +0 -26
  583. package/dist/agent-events.js.map +0 -1
  584. package/dist/agent.d.ts +0 -39
  585. package/dist/agent.d.ts.map +0 -1
  586. package/dist/agent.js +0 -1291
  587. package/dist/agent.js.map +0 -1
  588. package/dist/cli/ext-git.d.ts +0 -22
  589. package/dist/cli/ext-git.d.ts.map +0 -1
  590. package/dist/cli/ext-git.js +0 -76
  591. package/dist/cli/ext-git.js.map +0 -1
  592. package/dist/cli/ext.d.ts +0 -2
  593. package/dist/cli/ext.d.ts.map +0 -1
  594. package/dist/cli/ext.js +0 -217
  595. package/dist/cli/ext.js.map +0 -1
  596. package/dist/commands/admin.d.ts.map +0 -1
  597. package/dist/commands/admin.js.map +0 -1
  598. package/dist/commands/auto-reply.d.ts.map +0 -1
  599. package/dist/commands/auto-reply.js +0 -76
  600. package/dist/commands/auto-reply.js.map +0 -1
  601. package/dist/commands/extensions.d.ts +0 -14
  602. package/dist/commands/extensions.d.ts.map +0 -1
  603. package/dist/commands/extensions.js +0 -55
  604. package/dist/commands/extensions.js.map +0 -1
  605. package/dist/commands/login.d.ts +0 -5
  606. package/dist/commands/login.d.ts.map +0 -1
  607. package/dist/commands/login.js +0 -115
  608. package/dist/commands/login.js.map +0 -1
  609. package/dist/commands/model.d.ts +0 -10
  610. package/dist/commands/model.d.ts.map +0 -1
  611. package/dist/commands/model.js +0 -102
  612. package/dist/commands/model.js.map +0 -1
  613. package/dist/commands/new.d.ts.map +0 -1
  614. package/dist/commands/new.js +0 -25
  615. package/dist/commands/new.js.map +0 -1
  616. package/dist/commands/parse.d.ts +0 -7
  617. package/dist/commands/parse.d.ts.map +0 -1
  618. package/dist/commands/parse.js +0 -14
  619. package/dist/commands/parse.js.map +0 -1
  620. package/dist/commands/registry.d.ts +0 -5
  621. package/dist/commands/registry.d.ts.map +0 -1
  622. package/dist/commands/registry.js +0 -31
  623. package/dist/commands/registry.js.map +0 -1
  624. package/dist/commands/sandbox.d.ts.map +0 -1
  625. package/dist/commands/sandbox.js +0 -78
  626. package/dist/commands/sandbox.js.map +0 -1
  627. package/dist/commands/session-view.d.ts.map +0 -1
  628. package/dist/commands/session-view.js.map +0 -1
  629. package/dist/commands/types.d.ts +0 -66
  630. package/dist/commands/types.d.ts.map +0 -1
  631. package/dist/commands/types.js.map +0 -1
  632. package/dist/commands/utils.d.ts +0 -11
  633. package/dist/commands/utils.d.ts.map +0 -1
  634. package/dist/commands/utils.js.map +0 -1
  635. package/dist/config.d.ts +0 -78
  636. package/dist/config.d.ts.map +0 -1
  637. package/dist/config.js +0 -450
  638. package/dist/config.js.map +0 -1
  639. package/dist/download.d.ts.map +0 -1
  640. package/dist/download.js +0 -89
  641. package/dist/download.js.map +0 -1
  642. package/dist/events.d.ts +0 -43
  643. package/dist/events.d.ts.map +0 -1
  644. package/dist/events.js +0 -456
  645. package/dist/events.js.map +0 -1
  646. package/dist/execution-resolver.d.ts +0 -21
  647. package/dist/execution-resolver.d.ts.map +0 -1
  648. package/dist/execution-resolver.js +0 -170
  649. package/dist/execution-resolver.js.map +0 -1
  650. package/dist/harness/auth.d.ts +0 -16
  651. package/dist/harness/auth.d.ts.map +0 -1
  652. package/dist/harness/auth.js +0 -86
  653. package/dist/harness/auth.js.map +0 -1
  654. package/dist/harness/extensions/loader.d.ts +0 -86
  655. package/dist/harness/extensions/loader.d.ts.map +0 -1
  656. package/dist/harness/extensions/loader.js +0 -525
  657. package/dist/harness/extensions/loader.js.map +0 -1
  658. package/dist/harness/extensions/registry.d.ts +0 -23
  659. package/dist/harness/extensions/registry.d.ts.map +0 -1
  660. package/dist/harness/extensions/registry.js +0 -45
  661. package/dist/harness/extensions/registry.js.map +0 -1
  662. package/dist/harness/extensions/types.d.ts +0 -248
  663. package/dist/harness/extensions/types.d.ts.map +0 -1
  664. package/dist/harness/extensions/types.js.map +0 -1
  665. package/dist/harness/session-store.d.ts +0 -77
  666. package/dist/harness/session-store.d.ts.map +0 -1
  667. package/dist/harness/session-store.js +0 -248
  668. package/dist/harness/session-store.js.map +0 -1
  669. package/dist/harness/settings.d.ts +0 -47
  670. package/dist/harness/settings.d.ts.map +0 -1
  671. package/dist/harness/settings.js +0 -29
  672. package/dist/harness/settings.js.map +0 -1
  673. package/dist/model-registry.d.ts +0 -4
  674. package/dist/model-registry.d.ts.map +0 -1
  675. package/dist/model-registry.js +0 -7
  676. package/dist/model-registry.js.map +0 -1
  677. package/dist/platform-messages.d.ts.map +0 -1
  678. package/dist/platform-messages.js.map +0 -1
  679. package/dist/portal-shell.d.ts +0 -4
  680. package/dist/portal-shell.d.ts.map +0 -1
  681. package/dist/portal-shell.js.map +0 -1
  682. package/dist/provisioner.d.ts +0 -61
  683. package/dist/provisioner.d.ts.map +0 -1
  684. package/dist/provisioner.js.map +0 -1
  685. package/dist/runtime/agent-run-controller.d.ts +0 -31
  686. package/dist/runtime/agent-run-controller.d.ts.map +0 -1
  687. package/dist/runtime/agent-run-controller.js +0 -195
  688. package/dist/runtime/agent-run-controller.js.map +0 -1
  689. package/dist/sandbox/errors.d.ts +0 -6
  690. package/dist/sandbox/errors.d.ts.map +0 -1
  691. package/dist/sandbox/errors.js +0 -11
  692. package/dist/sandbox/errors.js.map +0 -1
  693. package/dist/sandbox/firecracker.d.ts +0 -15
  694. package/dist/sandbox/firecracker.d.ts.map +0 -1
  695. package/dist/sandbox/firecracker.js +0 -212
  696. package/dist/sandbox/firecracker.js.map +0 -1
  697. package/dist/sandbox/image.d.ts +0 -3
  698. package/dist/sandbox/image.d.ts.map +0 -1
  699. package/dist/sandbox/image.js +0 -27
  700. package/dist/sandbox/image.js.map +0 -1
  701. package/dist/sandbox/path-context.d.ts +0 -3
  702. package/dist/sandbox/path-context.d.ts.map +0 -1
  703. package/dist/sandbox/path-context.js +0 -20
  704. package/dist/sandbox/path-context.js.map +0 -1
  705. package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
  706. package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
  707. package/dist/sessions/agent-memory-file-manager.js.map +0 -1
  708. package/dist/sessions/metadata.d.ts +0 -3
  709. package/dist/sessions/metadata.d.ts.map +0 -1
  710. package/dist/sessions/metadata.js +0 -11
  711. package/dist/sessions/metadata.js.map +0 -1
  712. package/dist/sessions/policy.d.ts +0 -6
  713. package/dist/sessions/policy.d.ts.map +0 -1
  714. package/dist/sessions/policy.js +0 -23
  715. package/dist/sessions/policy.js.map +0 -1
  716. package/dist/store.d.ts +0 -46
  717. package/dist/store.d.ts.map +0 -1
  718. package/dist/store.js +0 -177
  719. package/dist/store.js.map +0 -1
  720. package/dist/tools/bash.d.ts +0 -10
  721. package/dist/tools/bash.d.ts.map +0 -1
  722. package/dist/tools/bash.js +0 -80
  723. package/dist/tools/bash.js.map +0 -1
  724. package/dist/tools/edit.d.ts +0 -11
  725. package/dist/tools/edit.d.ts.map +0 -1
  726. package/dist/tools/edit.js +0 -131
  727. package/dist/tools/edit.js.map +0 -1
  728. package/dist/tools/event.d.ts.map +0 -1
  729. package/dist/tools/event.js +0 -252
  730. package/dist/tools/event.js.map +0 -1
  731. package/dist/tools/index.d.ts +0 -24
  732. package/dist/tools/index.d.ts.map +0 -1
  733. package/dist/tools/index.js +0 -31
  734. package/dist/tools/index.js.map +0 -1
  735. package/dist/tools/react.d.ts.map +0 -1
  736. package/dist/tools/react.js.map +0 -1
  737. package/dist/tools/read.d.ts +0 -11
  738. package/dist/tools/read.d.ts.map +0 -1
  739. package/dist/tools/read.js +0 -134
  740. package/dist/tools/read.js.map +0 -1
  741. package/dist/tools/sandbox.d.ts.map +0 -1
  742. package/dist/tools/sandbox.js.map +0 -1
  743. package/dist/tools/truncate.d.ts +0 -33
  744. package/dist/tools/truncate.d.ts.map +0 -1
  745. package/dist/tools/truncate.js +0 -184
  746. package/dist/tools/truncate.js.map +0 -1
  747. package/dist/tools/types.d.ts +0 -54
  748. package/dist/tools/types.d.ts.map +0 -1
  749. package/dist/tools/types.js.map +0 -1
  750. package/dist/tools/write.d.ts +0 -10
  751. package/dist/tools/write.d.ts.map +0 -1
  752. package/dist/tools/write.js +0 -29
  753. package/dist/tools/write.js.map +0 -1
  754. package/dist/trigger.d.ts +0 -22
  755. package/dist/trigger.d.ts.map +0 -1
  756. package/dist/trigger.js +0 -100
  757. package/dist/trigger.js.map +0 -1
  758. package/dist/utils/date.d.ts +0 -10
  759. package/dist/utils/date.d.ts.map +0 -1
  760. package/dist/utils/date.js +0 -23
  761. package/dist/utils/date.js.map +0 -1
  762. package/dist/utils/env.d.ts +0 -3
  763. package/dist/utils/env.d.ts.map +0 -1
  764. package/dist/utils/env.js +0 -12
  765. package/dist/utils/env.js.map +0 -1
  766. package/dist/utils/file-guards.d.ts +0 -9
  767. package/dist/utils/file-guards.d.ts.map +0 -1
  768. package/dist/utils/file-guards.js +0 -59
  769. package/dist/utils/file-guards.js.map +0 -1
  770. package/dist/utils/fs-atomic.d.ts +0 -10
  771. package/dist/utils/fs-atomic.d.ts.map +0 -1
  772. package/dist/utils/fs-atomic.js +0 -45
  773. package/dist/utils/fs-atomic.js.map +0 -1
  774. package/dist/utils/html.d.ts +0 -2
  775. package/dist/utils/html.d.ts.map +0 -1
  776. package/dist/utils/html.js +0 -4
  777. package/dist/utils/html.js.map +0 -1
  778. package/dist/utils/http-body.d.ts +0 -10
  779. package/dist/utils/http-body.d.ts.map +0 -1
  780. package/dist/utils/http-body.js +0 -34
  781. package/dist/utils/http-body.js.map +0 -1
  782. package/dist/vault/routing.d.ts +0 -3
  783. package/dist/vault/routing.d.ts.map +0 -1
  784. package/dist/vault/routing.js +0 -13
  785. package/dist/vault/routing.js.map +0 -1
  786. package/dist/web/admin/portal.d.ts +0 -5
  787. package/dist/web/admin/portal.d.ts.map +0 -1
  788. package/dist/web/admin/portal.js +0 -2572
  789. package/dist/web/admin/portal.js.map +0 -1
  790. package/dist/web/admin/provider-models.d.ts.map +0 -1
  791. package/dist/web/admin/provider-models.js.map +0 -1
  792. package/dist/web/admin/store.d.ts +0 -13
  793. package/dist/web/admin/store.d.ts.map +0 -1
  794. package/dist/web/admin/store.js +0 -14
  795. package/dist/web/admin/store.js.map +0 -1
  796. package/dist/web/admin/types.d.ts +0 -30
  797. package/dist/web/admin/types.d.ts.map +0 -1
  798. package/dist/web/admin/types.js.map +0 -1
  799. package/dist/web/agent-events/portal.d.ts +0 -3
  800. package/dist/web/agent-events/portal.d.ts.map +0 -1
  801. package/dist/web/agent-events/portal.js +0 -18
  802. package/dist/web/agent-events/portal.js.map +0 -1
  803. package/dist/web/login/oauth.d.ts +0 -6
  804. package/dist/web/login/oauth.d.ts.map +0 -1
  805. package/dist/web/login/oauth.js.map +0 -1
  806. package/dist/web/login/portal.d.ts.map +0 -1
  807. package/dist/web/login/portal.js.map +0 -1
  808. package/dist/web/login/store.d.ts +0 -8
  809. package/dist/web/login/store.d.ts.map +0 -1
  810. package/dist/web/login/store.js +0 -15
  811. package/dist/web/login/store.js.map +0 -1
  812. package/dist/web/login/types.d.ts.map +0 -1
  813. package/dist/web/login/types.js.map +0 -1
  814. package/dist/web/request.d.ts +0 -3
  815. package/dist/web/request.d.ts.map +0 -1
  816. package/dist/web/request.js +0 -13
  817. package/dist/web/request.js.map +0 -1
  818. package/dist/web/server.d.ts.map +0 -1
  819. package/dist/web/server.js.map +0 -1
  820. package/dist/web/session-view/command.d.ts +0 -4
  821. package/dist/web/session-view/command.d.ts.map +0 -1
  822. package/dist/web/session-view/command.js +0 -7
  823. package/dist/web/session-view/command.js.map +0 -1
  824. package/dist/web/session-view/portal.d.ts +0 -13
  825. package/dist/web/session-view/portal.d.ts.map +0 -1
  826. package/dist/web/session-view/portal.js.map +0 -1
  827. package/dist/web/session-view/service.d.ts +0 -6
  828. package/dist/web/session-view/service.d.ts.map +0 -1
  829. package/dist/web/session-view/service.js +0 -498
  830. package/dist/web/session-view/service.js.map +0 -1
  831. package/dist/web/session-view/store.d.ts +0 -8
  832. package/dist/web/session-view/store.d.ts.map +0 -1
  833. package/dist/web/session-view/store.js +0 -15
  834. package/dist/web/session-view/store.js.map +0 -1
  835. package/dist/web/session-view/types.d.ts.map +0 -1
  836. package/dist/web/session-view/types.js.map +0 -1
  837. package/dist/web/token-store.d.ts.map +0 -1
  838. package/dist/web/token-store.js.map +0 -1
  839. package/dist/web/types.d.ts.map +0 -1
  840. package/dist/web/types.js.map +0 -1
  841. /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
  842. /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
  843. /package/dist/{commands → adapters/commands}/sandbox.d.ts +0 -0
  844. /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
  845. /package/dist/{commands → adapters/commands}/types.js +0 -0
  846. /package/dist/{harness/extensions → adapters/github}/types.js +0 -0
  847. /package/dist/{tools → adapters/web/admin}/types.js +0 -0
  848. /package/dist/{web/admin → adapters/web/login}/types.js +0 -0
  849. /package/dist/{web/login → adapters/web/session-view}/types.js +0 -0
  850. /package/dist/{web → adapters/web}/token-store.d.ts +0 -0
  851. /package/dist/{web → adapters/web}/types.d.ts +0 -0
  852. /package/dist/{web/session-view → adapters/web}/types.js +0 -0
  853. /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
  854. /package/dist/{web → cli}/types.js +0 -0
  855. /package/dist/{adapters/slack → harness}/tools/attach.d.ts +0 -0
  856. /package/dist/{tools → harness/tools}/react.d.ts +0 -0
@@ -0,0 +1,677 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { recordSubagentOutcome, reportSubagentLaunchError } from "../../observability/index.js";
3
+ const MAX_DAG_NODES = 8;
4
+ const MAX_DAG_EDGES = 16;
5
+ const MAX_DAG_DEPTH = 4;
6
+ const MAX_CONCURRENT_SUBAGENTS = 4;
7
+ const MAX_DEPENDENCY_OUTPUT_CHARS = 4000;
8
+ /**
9
+ * Every subagent runs under a named profile: the profile owns the prompt,
10
+ * tool grant, model and budget defaults. Letting the model assemble those
11
+ * per call proved unstable, so the schema deliberately exposes no
12
+ * `systemPrompt`, `tools` or `model` escape hatch — narrowing what the model
13
+ * can get wrong is the point. The model may request a larger token allowance,
14
+ * but cannot accidentally shrink the profile's turn, cost, or duration limits.
15
+ *
16
+ * `profileNames` is baked into the schema as an enum to steer the model's
17
+ * choice. TypeBox does not check `enum` on a string, so an unknown name still
18
+ * reaches `validatePlanProfiles`, which names the available profiles.
19
+ */
20
+ function buildTaskProperties(profileNames) {
21
+ return {
22
+ task: Type.String({ minLength: 1, description: "Self-contained task for a fresh subagent." }),
23
+ profile: Type.Optional(Type.String({
24
+ enum: profileNames,
25
+ description: "Profile this subagent runs under. Required, but a top-level profile covers every task and DAG node that does not set its own.",
26
+ })),
27
+ // No length bound: a label is a display string, and `taskLabel` clamps it.
28
+ // Bounding it in the schema only lets a cosmetic field reject a whole DAG,
29
+ // and validation reports that failure by echoing every node back.
30
+ label: Type.Optional(Type.String({ description: "Short progress label for this subagent." })),
31
+ input: Type.Optional(Type.Unknown({ description: "Optional JSON-serializable structured input for the task." })),
32
+ };
33
+ }
34
+ const sharedProperties = {
35
+ parentContext: Type.Optional(Type.Object({
36
+ mode: Type.Literal("normalized"),
37
+ recentTurns: Type.Optional(Type.Integer({ minimum: 1, maximum: 8, default: 3 })),
38
+ })),
39
+ outputSchema: Type.Optional(Type.Record(Type.String(), Type.Unknown(), {
40
+ description: "Optional TypeBox/JSON Schema applied to every subagent result.",
41
+ })),
42
+ budget: Type.Optional(Type.Object({
43
+ maxTokens: Type.Optional(Type.Integer({ minimum: 1 })),
44
+ }, {
45
+ description: "Optionally requests a larger token allowance than the profile default.",
46
+ })),
47
+ };
48
+ /**
49
+ * The runtime schema varies only in the `profile` enum, so every instance
50
+ * shares one static type and `subagentSchema` below can stand in for it.
51
+ */
52
+ function buildSubagentSchema(profileNames) {
53
+ const taskProperties = buildTaskProperties(profileNames);
54
+ return Type.Object({
55
+ task: Type.Optional(taskProperties.task),
56
+ profile: taskProperties.profile,
57
+ label: taskProperties.label,
58
+ input: taskProperties.input,
59
+ tasks: Type.Optional(Type.Array(Type.Object(taskProperties), {
60
+ minItems: 1,
61
+ maxItems: MAX_DAG_NODES,
62
+ description: "Independent subagent tasks executed concurrently; results preserve input order.",
63
+ })),
64
+ dag: Type.Optional(Type.Object({
65
+ nodes: Type.Array(Type.Object({
66
+ id: Type.String({
67
+ pattern: "^[A-Za-z0-9_-]+$",
68
+ maxLength: 64,
69
+ description: "Unique stable node id used by dependsOn.",
70
+ }),
71
+ ...taskProperties,
72
+ dependsOn: Type.Optional(Type.Array(Type.String(), { maxItems: MAX_DAG_NODES })),
73
+ }), { minItems: 1, maxItems: MAX_DAG_NODES }),
74
+ maxConcurrency: Type.Optional(Type.Integer({
75
+ minimum: 1,
76
+ maximum: MAX_CONCURRENT_SUBAGENTS,
77
+ default: MAX_CONCURRENT_SUBAGENTS,
78
+ })),
79
+ })),
80
+ ...sharedProperties,
81
+ }, { description: "Provide task, tasks, or dag." });
82
+ }
83
+ const subagentSchema = buildSubagentSchema([]);
84
+ /** Shortest gap between activity-driven redraws of the dashboard. */
85
+ const ACTIVITY_EMIT_INTERVAL_MS = 2000;
86
+ class SubagentProgressTracker {
87
+ constructor(mode, items, onUpdate) {
88
+ this.mode = mode;
89
+ this.items = items;
90
+ this.onUpdate = onUpdate;
91
+ this.lastActivityEmit = 0;
92
+ this.states = new Map();
93
+ this.metrics = new Map();
94
+ for (const item of items)
95
+ this.states.set(item.id, "pending");
96
+ }
97
+ update(id, status, metrics) {
98
+ this.states.set(id, status);
99
+ if (metrics)
100
+ this.metrics.set(id, metrics);
101
+ this.emit();
102
+ }
103
+ /**
104
+ * Record what a node is doing, rate-limited.
105
+ *
106
+ * Status changes are rare and each one matters, so `update` emits every
107
+ * time. Activity is the opposite — it can change several times a second
108
+ * while text streams — and every emission redraws the whole response, on a
109
+ * path that is deliberately not batched. Left unbounded this would spend the
110
+ * platform's edit budget on a character counter.
111
+ */
112
+ activity(id, activity) {
113
+ const previous = this.metrics.get(id) ?? {};
114
+ this.metrics.set(id, { ...previous, activity });
115
+ const now = Date.now();
116
+ if (now - this.lastActivityEmit < ACTIVITY_EMIT_INTERVAL_MS)
117
+ return;
118
+ this.lastActivityEmit = now;
119
+ this.emit();
120
+ }
121
+ emit() {
122
+ if (!this.onUpdate)
123
+ return;
124
+ const nodes = this.items.map((item) => boundSubagentProgressNode({
125
+ ...item,
126
+ status: this.states.get(item.id) ?? "pending",
127
+ ...this.metrics.get(item.id),
128
+ }));
129
+ this.onUpdate({
130
+ content: [],
131
+ details: { progress: { mode: this.mode, nodes } },
132
+ });
133
+ }
134
+ }
135
+ function taskLabel(task, fallback) {
136
+ return clampSubagentLabel(task.label?.trim() || task.task.trim().slice(0, 48) || fallback);
137
+ }
138
+ function formatOutcome(outcome) {
139
+ if (outcome.status === "budget_exceeded") {
140
+ return `Subagent stopped: budget limit exceeded${outcome.error ? ` (${outcome.error})` : ""}`;
141
+ }
142
+ if (outcome.status !== "completed") {
143
+ return `Subagent ${outcome.status}${outcome.error ? `: ${outcome.error}` : ""}`;
144
+ }
145
+ return typeof outcome.output === "string"
146
+ ? outcome.output
147
+ : JSON.stringify(outcome.output, null, 2);
148
+ }
149
+ function buildRequest(task, shared, signal) {
150
+ const outputSchema = shared.outputSchema;
151
+ return {
152
+ task: task.task,
153
+ ...(task.profile ? { profile: task.profile } : {}),
154
+ ...(task.input !== undefined ? { input: task.input } : {}),
155
+ ...(shared.parentContext ? { parentContext: shared.parentContext } : {}),
156
+ ...(outputSchema ? { outputSchema } : {}),
157
+ ...(shared.budget ? { budget: shared.budget } : {}),
158
+ ...(signal ? { signal } : {}),
159
+ };
160
+ }
161
+ function buildDagWaves(nodes) {
162
+ if (nodes.length === 0 || nodes.length > MAX_DAG_NODES) {
163
+ throw new Error(`Subagent DAG must contain 1-${MAX_DAG_NODES} nodes`);
164
+ }
165
+ const byId = new Map();
166
+ let edgeCount = 0;
167
+ for (const node of nodes) {
168
+ if (!/^[A-Za-z0-9_-]{1,64}$/.test(node.id)) {
169
+ throw new Error(`Invalid subagent DAG node id: ${node.id}`);
170
+ }
171
+ if (byId.has(node.id))
172
+ throw new Error(`Duplicate subagent DAG node id: ${node.id}`);
173
+ byId.set(node.id, node);
174
+ const dependencies = new Set(node.dependsOn ?? []);
175
+ if (dependencies.size !== (node.dependsOn?.length ?? 0)) {
176
+ throw new Error(`Duplicate dependency on subagent DAG node: ${node.id}`);
177
+ }
178
+ edgeCount += dependencies.size;
179
+ }
180
+ if (edgeCount > MAX_DAG_EDGES) {
181
+ throw new Error(`Subagent DAG exceeds ${MAX_DAG_EDGES} dependency edges`);
182
+ }
183
+ for (const node of nodes) {
184
+ for (const dependency of node.dependsOn ?? []) {
185
+ if (!byId.has(dependency)) {
186
+ throw new Error(`Unknown subagent DAG dependency ${dependency} for node ${node.id}`);
187
+ }
188
+ if (dependency === node.id)
189
+ throw new Error(`Subagent DAG node ${node.id} depends on itself`);
190
+ }
191
+ }
192
+ const remaining = new Set(nodes.map((node) => node.id));
193
+ const completed = new Set();
194
+ const waves = [];
195
+ while (remaining.size > 0) {
196
+ const wave = nodes.filter((node) => remaining.has(node.id) && (node.dependsOn ?? []).every((id) => completed.has(id)));
197
+ if (wave.length === 0)
198
+ throw new Error("Subagent DAG contains a cycle");
199
+ waves.push(wave);
200
+ if (waves.length > MAX_DAG_DEPTH) {
201
+ throw new Error(`Subagent DAG exceeds maximum depth ${MAX_DAG_DEPTH}`);
202
+ }
203
+ for (const node of wave) {
204
+ remaining.delete(node.id);
205
+ completed.add(node.id);
206
+ }
207
+ }
208
+ return waves;
209
+ }
210
+ /**
211
+ * A top-level `profile` is the default for every task and DAG node, like the
212
+ * other shared params. A fan-out that runs entirely under one profile then
213
+ * names it once instead of repeating it per node.
214
+ */
215
+ function withDefaultProfile(task, fallback) {
216
+ return task.profile || !fallback ? task : { ...task, profile: fallback };
217
+ }
218
+ function itemForNode(node, defaultProfile) {
219
+ return {
220
+ id: node.id,
221
+ label: clampSubagentLabel(node.label?.trim() || node.id),
222
+ task: withDefaultProfile(node, defaultProfile),
223
+ dependsOn: node.dependsOn ?? [],
224
+ };
225
+ }
226
+ /** Normalize every tool mode into one plan: nodes, waves, concurrency. */
227
+ function buildPlan(params) {
228
+ const modeCount = [params.task, params.tasks, params.dag].filter((mode) => mode !== undefined).length;
229
+ if (modeCount !== 1) {
230
+ throw new Error("Subagent requires exactly one of task, tasks, or dag");
231
+ }
232
+ if (params.dag !== undefined) {
233
+ const toItem = (node) => itemForNode(node, params.profile);
234
+ const waves = buildDagWaves(params.dag.nodes).map((wave) => wave.map(toItem));
235
+ const requested = params.dag.maxConcurrency ?? MAX_CONCURRENT_SUBAGENTS;
236
+ return {
237
+ mode: "dag",
238
+ items: params.dag.nodes.map(toItem),
239
+ waves,
240
+ concurrency: Math.max(1, Math.min(MAX_CONCURRENT_SUBAGENTS, Math.floor(requested))),
241
+ };
242
+ }
243
+ if (params.tasks !== undefined) {
244
+ const items = params.tasks.map((task, index) => ({
245
+ id: String(index),
246
+ label: taskLabel(task, String(index + 1)),
247
+ task: withDefaultProfile(task, params.profile),
248
+ dependsOn: [],
249
+ }));
250
+ return { mode: "parallel", items, waves: [items], concurrency: MAX_CONCURRENT_SUBAGENTS };
251
+ }
252
+ if (!params.task)
253
+ throw new Error("Subagent requires task, tasks, or dag");
254
+ const task = { ...params, task: params.task };
255
+ const item = { id: "0", label: taskLabel(task, "subagent"), task, dependsOn: [] };
256
+ return { mode: "single", items: [item], waves: [[item]], concurrency: 1 };
257
+ }
258
+ /** Run `worker` over every item with at most `limit` in flight. */
259
+ async function forEachConcurrent(items, limit, worker) {
260
+ let cursor = 0;
261
+ await Promise.all(Array.from({ length: Math.min(limit, items.length) }, async () => {
262
+ while (cursor < items.length) {
263
+ const index = cursor++;
264
+ const item = items[index];
265
+ if (item === undefined)
266
+ continue;
267
+ await worker(item, index);
268
+ }
269
+ }));
270
+ }
271
+ function dependencyOutput(outcome) {
272
+ if (outcome.status !== "completed")
273
+ return undefined;
274
+ const value = outcome.output;
275
+ const serialized = typeof value === "string" ? value : JSON.stringify(value);
276
+ if (serialized === undefined)
277
+ return null;
278
+ if (serialized.length <= MAX_DEPENDENCY_OUTPUT_CHARS)
279
+ return value;
280
+ // Oversized structured output becomes a marked string — the shape is lost,
281
+ // which the tool description warns downstream consumers about.
282
+ return `${serialized.slice(0, MAX_DEPENDENCY_OUTPUT_CHARS)}\n[truncated]`;
283
+ }
284
+ function planRequest(item, shared, outcomes, signal) {
285
+ if (item.dependsOn.length === 0)
286
+ return buildRequest(item.task, shared, signal);
287
+ const dependencies = Object.fromEntries(item.dependsOn.map((id) => [id, dependencyOutput(outcomes.get(id))]));
288
+ const input = {
289
+ ...(item.task.input !== undefined ? { input: item.task.input } : {}),
290
+ dependencies,
291
+ };
292
+ return buildRequest({ ...item.task, input }, shared, signal);
293
+ }
294
+ /**
295
+ * One executor for every mode: wave barriers and a per-invocation concurrency
296
+ * bound. Process-wide slots are acquired by the shared runner seam.
297
+ */
298
+ async function runWaves(plan, shared, runSubagent, progress, signal) {
299
+ const outcomes = new Map();
300
+ for (const wave of plan.waves) {
301
+ await forEachConcurrent(wave, plan.concurrency, async (item) => {
302
+ const failedDependency = item.dependsOn.find((id) => outcomes.get(id)?.status !== "completed");
303
+ if (failedDependency) {
304
+ outcomes.set(item.id, {
305
+ id: item.id,
306
+ status: "skipped",
307
+ error: `Dependency ${failedDependency} did not complete`,
308
+ });
309
+ recordSubagentOutcome({
310
+ itemId: item.id,
311
+ mode: plan.mode,
312
+ status: "skipped",
313
+ profile: item.task.profile,
314
+ error: `Dependency ${failedDependency} did not complete`,
315
+ });
316
+ progress.update(item.id, "skipped", {
317
+ reason: `Dependency ${failedDependency} did not complete`,
318
+ });
319
+ return;
320
+ }
321
+ let result;
322
+ progress.update(item.id, "running");
323
+ try {
324
+ result = await runSubagent(planRequest(item, shared, outcomes, signal), {
325
+ onActivity: (activity) => progress.activity(item.id, activity),
326
+ });
327
+ }
328
+ catch (error) {
329
+ reportSubagentLaunchError(error, {
330
+ itemId: item.id,
331
+ mode: plan.mode,
332
+ profile: item.task.profile,
333
+ });
334
+ throw error;
335
+ }
336
+ outcomes.set(item.id, { id: item.id, ...result });
337
+ recordSubagentOutcome({
338
+ itemId: item.id,
339
+ mode: plan.mode,
340
+ status: result.status,
341
+ profile: item.task.profile,
342
+ error: result.error,
343
+ turns: result.turns,
344
+ toolCalls: result.toolCalls,
345
+ tokens: result.tokens,
346
+ costUsd: result.costUsd,
347
+ durationMs: result.durationMs,
348
+ cleanupPending: result.cleanupPending,
349
+ });
350
+ progress.update(item.id, result.status, {
351
+ turns: result.turns,
352
+ toolCalls: result.toolCalls,
353
+ toolCallCounts: result.toolCallCounts,
354
+ tokens: result.tokens,
355
+ costUsd: result.costUsd,
356
+ durationMs: result.durationMs,
357
+ ...(result.error ? { reason: result.error } : {}),
358
+ ...(result.cleanupPending ? { cleanupPending: true } : {}),
359
+ });
360
+ });
361
+ }
362
+ return plan.items.map((item) => outcomes.get(item.id));
363
+ }
364
+ /**
365
+ * The tool grant belongs in the menu. A description alone reads as a stylistic
366
+ * constraint, so a model will pick a no-tool profile for work that needs tools
367
+ * and then narrate the tool call it could not make.
368
+ */
369
+ function formatToolGrant(tools) {
370
+ if (!tools)
371
+ return "tools unknown";
372
+ return tools.length === 0 ? "no tools" : `tools: ${tools.join(", ")}`;
373
+ }
374
+ function validatePlanProfiles(plan, availableProfiles) {
375
+ const known = [...availableProfiles].join(", ");
376
+ for (const item of plan.items) {
377
+ const profile = item.task.profile;
378
+ if (!profile) {
379
+ throw new Error(`Subagent ${item.label} must specify a profile (available: ${known})`);
380
+ }
381
+ if (!availableProfiles.has(profile)) {
382
+ throw new Error(`Unknown subagent profile: ${profile} (available: ${known})`);
383
+ }
384
+ }
385
+ }
386
+ /**
387
+ * Create the normal agent's bounded subagent delegation and DAG tool.
388
+ * `globalSlots` is the process-wide fan-out account shared across every
389
+ * conversation's tool instance; omitted, fan-out is bounded per run only.
390
+ *
391
+ * `profiles` must be non-empty: it is both the model-facing menu and the only
392
+ * way to grant a subagent any capability at all.
393
+ */
394
+ export function createSubagentTool(runSubagent, profiles) {
395
+ if (profiles.size === 0) {
396
+ throw new Error("createSubagentTool requires at least one subagent profile");
397
+ }
398
+ const profileDescription = [...profiles.entries()]
399
+ .map(([name, profile]) => `${name} [${formatToolGrant(profile.tools)}] — ${profile.description}`)
400
+ .join("; ");
401
+ return {
402
+ name: "subagent",
403
+ label: "Subagent",
404
+ description: `Run fresh isolated subagents. Use task for one subagent, tasks for independent concurrent work, or dag.nodes for a bounded dependency graph. At most ${MAX_CONCURRENT_SUBAGENTS} subagents run concurrently. DAG limits: ${MAX_DAG_NODES} nodes, ${MAX_DAG_EDGES} edges, depth ${MAX_DAG_DEPTH}; failed dependencies skip descendants, and dependency outputs larger than ${MAX_DEPENDENCY_OUTPUT_CHARS} characters reach downstream nodes as a truncated string. ` +
405
+ "Subagents are fresh by default; parentContext.mode=normalized can include a sanitized reference snapshot of the active parent run. Nested subagents are not allowed. " +
406
+ `Every task and DAG node must set profile; the profile supplies the prompt, tools, model and budget. Available profiles: ${profileDescription}.`,
407
+ parameters: buildSubagentSchema([...profiles.keys()]),
408
+ execute: async (_toolCallId, params, signal, onUpdate) => {
409
+ const plan = buildPlan(params);
410
+ validatePlanProfiles(plan, new Set(profiles.keys()));
411
+ const progress = new SubagentProgressTracker(plan.mode, plan.items.map(({ id, label, task }) => ({ id, label, profile: task.profile })), onUpdate);
412
+ progress.emit();
413
+ const ordered = await runWaves(plan, params, runSubagent, progress, signal);
414
+ switch (plan.mode) {
415
+ case "dag":
416
+ return {
417
+ content: [
418
+ {
419
+ type: "text",
420
+ text: ordered
421
+ .map((outcome) => `[${outcome.id}] ${formatOutcome(outcome)}`)
422
+ .join("\n\n"),
423
+ },
424
+ ],
425
+ details: {
426
+ mode: "dag",
427
+ waves: plan.waves.map((wave) => wave.map((item) => item.id)),
428
+ results: ordered,
429
+ },
430
+ };
431
+ case "parallel": {
432
+ const results = ordered.map(({ id: _id, ...result }) => result);
433
+ return {
434
+ content: [
435
+ {
436
+ type: "text",
437
+ text: results
438
+ .map((result, index) => `[${index + 1}] ${formatOutcome(result)}`)
439
+ .join("\n\n"),
440
+ },
441
+ ],
442
+ details: { mode: "parallel", results },
443
+ };
444
+ }
445
+ case "single": {
446
+ const single = ordered[0];
447
+ if (single === undefined) {
448
+ throw new Error("Subagent plan produced no outcome");
449
+ }
450
+ const { id: _id, ...result } = single;
451
+ return {
452
+ content: [{ type: "text", text: formatOutcome(result) }],
453
+ details: result,
454
+ };
455
+ }
456
+ }
457
+ },
458
+ };
459
+ }
460
+ // Subagent progress protocol: the tool owns construction, transport validation,
461
+ // settlement and its canonical response-source dashboard. Presenters consume it.
462
+ /** Longest label the dashboard renders; longer ones are clamped, never rejected. */
463
+ export const MAX_SUBAGENT_LABEL_CHARS = 100;
464
+ const MAX_PROFILE_CHARS = 64;
465
+ const MAX_REASON_CHARS = 240;
466
+ const MAX_ACTIVITY_CHARS = 80;
467
+ const SUBAGENT_STATUS_MARKER = {
468
+ pending: "○",
469
+ running: "●",
470
+ completed: "✓",
471
+ failed: "✗",
472
+ cancelled: "■",
473
+ timeout: "◷",
474
+ budget_exceeded: "!",
475
+ invalid_output: "✗",
476
+ skipped: "⊘",
477
+ };
478
+ const SUBAGENT_STATUS_LABEL = {
479
+ pending: "Waiting",
480
+ running: "Running",
481
+ completed: "Completed",
482
+ failed: "Failed",
483
+ cancelled: "Cancelled",
484
+ timeout: "Timed out",
485
+ budget_exceeded: "Budget exceeded",
486
+ invalid_output: "Invalid output",
487
+ skipped: "Skipped",
488
+ };
489
+ /**
490
+ * Derived from the marker table, which `satisfies` keeps exhaustive: a new
491
+ * terminal status is a compile error there, and this runtime set follows —
492
+ * the validator can never silently drop a status the tables know about.
493
+ */
494
+ const VALID_STATUSES = new Set(Object.keys(SUBAGENT_STATUS_MARKER));
495
+ /** Clamp a label to the display bound, ending a truncation visibly with `…`. */
496
+ function clampSubagentLabel(label) {
497
+ if (label.length <= MAX_SUBAGENT_LABEL_CHARS)
498
+ return label;
499
+ return `${label.slice(0, MAX_SUBAGENT_LABEL_CHARS - 1)}…`;
500
+ }
501
+ /** The display bounds, applied once at construction and again on parse. */
502
+ export function boundSubagentProgressNode(node) {
503
+ return {
504
+ ...node,
505
+ label: clampSubagentLabel(node.label),
506
+ ...(node.profile !== undefined ? { profile: node.profile.slice(0, MAX_PROFILE_CHARS) } : {}),
507
+ ...(node.activity !== undefined
508
+ ? { activity: node.activity.slice(0, MAX_ACTIVITY_CHARS) }
509
+ : {}),
510
+ ...(node.reason !== undefined ? { reason: node.reason.slice(0, MAX_REASON_CHARS) } : {}),
511
+ };
512
+ }
513
+ function parseNode(value) {
514
+ if (!value || typeof value !== "object")
515
+ return undefined;
516
+ const item = value;
517
+ if (typeof item.id !== "string" ||
518
+ typeof item.label !== "string" ||
519
+ typeof item.status !== "string" ||
520
+ !VALID_STATUSES.has(item.status)) {
521
+ return undefined;
522
+ }
523
+ return boundSubagentProgressNode({
524
+ id: item.id,
525
+ label: item.label,
526
+ status: item.status,
527
+ ...(typeof item.profile === "string" ? { profile: item.profile } : {}),
528
+ ...(typeof item.turns === "number" ? { turns: item.turns } : {}),
529
+ ...(typeof item.toolCalls === "number" ? { toolCalls: item.toolCalls } : {}),
530
+ ...(item.toolCallCounts && typeof item.toolCallCounts === "object"
531
+ ? {
532
+ toolCallCounts: Object.fromEntries(Object.entries(item.toolCallCounts).filter((entry) => typeof entry[1] === "number")),
533
+ }
534
+ : {}),
535
+ ...(typeof item.tokens === "number" ? { tokens: item.tokens } : {}),
536
+ ...(typeof item.costUsd === "number" ? { costUsd: item.costUsd } : {}),
537
+ ...(typeof item.durationMs === "number" ? { durationMs: item.durationMs } : {}),
538
+ ...(typeof item.activity === "string" ? { activity: item.activity } : {}),
539
+ ...(typeof item.reason === "string" ? { reason: item.reason } : {}),
540
+ ...(item.cleanupPending === true ? { cleanupPending: true } : {}),
541
+ });
542
+ }
543
+ /**
544
+ * Parse a snapshot back off the untyped transport. All-or-nothing: one
545
+ * malformed node means the payload is not ours (any tool can put anything in
546
+ * `details`), so the whole candidate is rejected rather than partially shown.
547
+ */
548
+ export function parseSubagentProgressSnapshot(value) {
549
+ if (!value || typeof value !== "object")
550
+ return undefined;
551
+ const candidate = value;
552
+ if ((candidate.mode !== "single" && candidate.mode !== "parallel" && candidate.mode !== "dag") ||
553
+ !Array.isArray(candidate.nodes)) {
554
+ return undefined;
555
+ }
556
+ const nodes = [];
557
+ for (const node of candidate.nodes) {
558
+ const parsed = parseNode(node);
559
+ if (!parsed)
560
+ return undefined;
561
+ nodes.push(parsed);
562
+ }
563
+ return { mode: candidate.mode, nodes };
564
+ }
565
+ /**
566
+ * Project a live snapshot to its end-of-tool state: nodes still pending or
567
+ * running settle to the tool call's outcome. Metrics spread through
568
+ * unchanged — an unsettled node never reported any.
569
+ */
570
+ export function settleSubagentProgress(snapshot, isError) {
571
+ return {
572
+ ...snapshot,
573
+ nodes: snapshot.nodes.map((node) => node.status !== "running" && node.status !== "pending"
574
+ ? node
575
+ : { ...node, status: isError ? "failed" : "completed" }),
576
+ };
577
+ }
578
+ /**
579
+ * Fold concurrent or successive subagent fan-outs into the single snapshot the
580
+ * dashboard renders. A run can call the subagent tool more than once; picking
581
+ * one snapshot would drop the others' cost and status, and alternating between
582
+ * them makes the live view flicker. Node ids are namespaced by source because
583
+ * each fan-out numbers its own nodes from zero.
584
+ */
585
+ export function mergeSubagentProgress(snapshots) {
586
+ if (snapshots.length === 0)
587
+ return undefined;
588
+ if (snapshots.length === 1)
589
+ return snapshots[0];
590
+ const nodes = snapshots.flatMap((snapshot, index) => snapshot.nodes.map((node) => ({ ...node, id: `${index}:${node.id}` })));
591
+ const mode = snapshots.some((snapshot) => snapshot.mode === "dag")
592
+ ? "dag"
593
+ : nodes.length > 1
594
+ ? "parallel"
595
+ : "single";
596
+ return { mode, nodes };
597
+ }
598
+ // ---------------------------------------------------------------------------
599
+ // Dashboard text
600
+ // ---------------------------------------------------------------------------
601
+ function settledCount(snapshot) {
602
+ return snapshot.nodes.filter((node) => node.status !== "pending" && node.status !== "running")
603
+ .length;
604
+ }
605
+ function modeLabel(snapshot) {
606
+ if (snapshot.mode === "dag")
607
+ return "DAG";
608
+ if (snapshot.mode === "parallel")
609
+ return "Parallel";
610
+ return "Run";
611
+ }
612
+ function escapeMarkdown(text) {
613
+ return text.replace(/([\\`*_{}[\]()<>#+\-.!|~])/g, "\\$1");
614
+ }
615
+ function compactNumber(value) {
616
+ return new Intl.NumberFormat("en", { notation: "compact", maximumFractionDigits: 1 }).format(value);
617
+ }
618
+ function summaryText(snapshot) {
619
+ const totals = snapshot.nodes.reduce((sum, node) => ({
620
+ turns: sum.turns + (node.turns ?? 0),
621
+ toolCalls: sum.toolCalls + (node.toolCalls ?? 0),
622
+ tokens: sum.tokens + (node.tokens ?? 0),
623
+ costUsd: sum.costUsd + (node.costUsd ?? 0),
624
+ }), { turns: 0, toolCalls: 0, tokens: 0, costUsd: 0 });
625
+ return [
626
+ totals.turns > 0 ? `${totals.turns} LLM turns` : undefined,
627
+ totals.toolCalls > 0 ? `${totals.toolCalls} tool calls` : undefined,
628
+ totals.tokens > 0 ? `${compactNumber(totals.tokens)} tokens` : undefined,
629
+ totals.costUsd > 0 ? `$${totals.costUsd.toFixed(4)}` : undefined,
630
+ ]
631
+ .filter(Boolean)
632
+ .join(" · ");
633
+ }
634
+ /** The dashboard's one-line summary header, unformatted. */
635
+ function dashboardHeader(snapshot) {
636
+ const base = `Subagents · ${settledCount(snapshot)}/${snapshot.nodes.length} · ${modeLabel(snapshot)}`;
637
+ const summary = summaryText(snapshot);
638
+ return summary ? `${base} · ${summary}` : base;
639
+ }
640
+ function countLabel(count, singular) {
641
+ return `${count} ${singular}${count === 1 ? "" : "s"}`;
642
+ }
643
+ function detailText(node) {
644
+ const toolBreakdown = node.toolCallCounts
645
+ ? Object.entries(node.toolCallCounts)
646
+ .map(([name, count]) => `${name} ×${count}`)
647
+ .join(" · ")
648
+ : undefined;
649
+ const metrics = [
650
+ node.turns !== undefined ? countLabel(node.turns, "LLM turn") : undefined,
651
+ node.toolCalls !== undefined ? countLabel(node.toolCalls, "tool call") : undefined,
652
+ toolBreakdown,
653
+ node.tokens !== undefined ? `${compactNumber(node.tokens)} tokens` : undefined,
654
+ node.costUsd !== undefined ? `$${node.costUsd.toFixed(4)}` : undefined,
655
+ node.durationMs !== undefined ? `${(node.durationMs / 1000).toFixed(1)}s` : undefined,
656
+ ].filter(Boolean);
657
+ const reason = node.cleanupPending ? "Cleanup pending; usage is provisional" : node.reason;
658
+ // Activity is shown only while running, and that is exactly when there is
659
+ // nothing else: a node reports its metrics on the way out, so without this
660
+ // the whole of a long step reads "Running · profile" and never changes.
661
+ const activity = node.status === "running" ? node.activity : undefined;
662
+ // Profile leads the line: when a node reports no tool calls, the profile is
663
+ // what says whether that was the plan or a bad pick.
664
+ return [SUBAGENT_STATUS_LABEL[node.status], node.profile, activity, ...metrics, reason]
665
+ .filter(Boolean)
666
+ .join(" · ");
667
+ }
668
+ /** The dashboard as response source Markdown; adapters own any conversion. */
669
+ export function renderSubagentDashboard(snapshot) {
670
+ const header = `**${dashboardHeader(snapshot)}**`;
671
+ const rows = snapshot.nodes.flatMap((node) => [
672
+ `${SUBAGENT_STATUS_MARKER[node.status]} ${escapeMarkdown(node.label)}`,
673
+ `└ ${detailText(node)}`,
674
+ ]);
675
+ return [header, ...rows].join("\n");
676
+ }
677
+ //# sourceMappingURL=subagent.js.map