@geminixiang/mikan 1.0.0-beta.39 → 1.0.0-beta.40

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 (397) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +50 -23
  3. package/dist/adapter.d.ts +1 -1
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js.map +1 -1
  6. package/dist/adapters/discord/bot.d.ts +2 -1
  7. package/dist/adapters/discord/bot.d.ts.map +1 -1
  8. package/dist/adapters/discord/bot.js +3 -3
  9. package/dist/adapters/discord/bot.js.map +1 -1
  10. package/dist/adapters/discord/context.d.ts +2 -1
  11. package/dist/adapters/discord/context.d.ts.map +1 -1
  12. package/dist/adapters/discord/context.js +1 -1
  13. package/dist/adapters/discord/context.js.map +1 -1
  14. package/dist/adapters/github/bot.d.ts +2 -1
  15. package/dist/adapters/github/bot.d.ts.map +1 -1
  16. package/dist/adapters/github/bot.js +11 -7
  17. package/dist/adapters/github/bot.js.map +1 -1
  18. package/dist/adapters/github/client.js +2 -2
  19. package/dist/adapters/github/client.js.map +1 -1
  20. package/dist/adapters/github/context.d.ts +4 -2
  21. package/dist/adapters/github/context.d.ts.map +1 -1
  22. package/dist/adapters/github/context.js +2 -2
  23. package/dist/adapters/github/context.js.map +1 -1
  24. package/dist/adapters/github/gcp-auth.js +2 -2
  25. package/dist/adapters/github/gcp-auth.js.map +1 -1
  26. package/dist/adapters/github/github-ops.d.ts +3 -2
  27. package/dist/adapters/github/github-ops.d.ts.map +1 -1
  28. package/dist/adapters/github/github-ops.js +1 -1
  29. package/dist/adapters/github/github-ops.js.map +1 -1
  30. package/dist/adapters/github/ids.d.ts.map +1 -1
  31. package/dist/adapters/github/ids.js +7 -3
  32. package/dist/adapters/github/ids.js.map +1 -1
  33. package/dist/adapters/github/repo.js +3 -3
  34. package/dist/adapters/github/repo.js.map +1 -1
  35. package/dist/adapters/github/types.d.ts +2 -1
  36. package/dist/adapters/github/types.d.ts.map +1 -1
  37. package/dist/adapters/github/types.js.map +1 -1
  38. package/dist/adapters/progressive-renderer.js +1 -1
  39. package/dist/adapters/progressive-renderer.js.map +1 -1
  40. package/dist/adapters/shared.js +4 -4
  41. package/dist/adapters/shared.js.map +1 -1
  42. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  43. package/dist/adapters/slack/blocks.js +3 -1
  44. package/dist/adapters/slack/blocks.js.map +1 -1
  45. package/dist/adapters/slack/bot.d.ts +12 -2
  46. package/dist/adapters/slack/bot.d.ts.map +1 -1
  47. package/dist/adapters/slack/bot.js +70 -9
  48. package/dist/adapters/slack/bot.js.map +1 -1
  49. package/dist/adapters/slack/context.d.ts +2 -1
  50. package/dist/adapters/slack/context.d.ts.map +1 -1
  51. package/dist/adapters/slack/context.js +1 -0
  52. package/dist/adapters/slack/context.js.map +1 -1
  53. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  54. package/dist/adapters/slack/response-lifecycle.js +4 -4
  55. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  56. package/dist/adapters/slack/session.d.ts.map +1 -1
  57. package/dist/adapters/slack/session.js +2 -3
  58. package/dist/adapters/slack/session.js.map +1 -1
  59. package/dist/adapters/slack/tools/attach.js +1 -1
  60. package/dist/adapters/slack/tools/attach.js.map +1 -1
  61. package/dist/adapters/telegram/bot.d.ts +2 -1
  62. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  63. package/dist/adapters/telegram/bot.js +6 -6
  64. package/dist/adapters/telegram/bot.js.map +1 -1
  65. package/dist/adapters/telegram/context.d.ts +2 -1
  66. package/dist/adapters/telegram/context.d.ts.map +1 -1
  67. package/dist/adapters/telegram/context.js.map +1 -1
  68. package/dist/adapters/telegram/html.d.ts.map +1 -1
  69. package/dist/adapters/telegram/html.js +10 -7
  70. package/dist/adapters/telegram/html.js.map +1 -1
  71. package/dist/adapters/types.d.ts +4 -2
  72. package/dist/adapters/types.d.ts.map +1 -1
  73. package/dist/adapters/types.js.map +1 -1
  74. package/dist/agent-events.d.ts +3 -2
  75. package/dist/agent-events.d.ts.map +1 -1
  76. package/dist/agent-events.js +19 -1
  77. package/dist/agent-events.js.map +1 -1
  78. package/dist/agent.d.ts.map +1 -1
  79. package/dist/agent.js +34 -9
  80. package/dist/agent.js.map +1 -1
  81. package/dist/cli/arg-grammar.d.ts.map +1 -1
  82. package/dist/cli/arg-grammar.js +5 -3
  83. package/dist/cli/arg-grammar.js.map +1 -1
  84. package/dist/cli/boot.d.ts.map +1 -1
  85. package/dist/cli/boot.js +5 -3
  86. package/dist/cli/boot.js.map +1 -1
  87. package/dist/cli/download.d.ts.map +1 -1
  88. package/dist/cli/download.js +2 -0
  89. package/dist/cli/download.js.map +1 -1
  90. package/dist/cli/ext-dev.d.ts.map +1 -1
  91. package/dist/cli/ext-dev.js +4 -1
  92. package/dist/cli/ext-dev.js.map +1 -1
  93. package/dist/cli/ext.d.ts.map +1 -1
  94. package/dist/cli/ext.js +123 -23
  95. package/dist/cli/ext.js.map +1 -1
  96. package/dist/cli/office.d.ts.map +1 -1
  97. package/dist/cli/office.js +2 -0
  98. package/dist/cli/office.js.map +1 -1
  99. package/dist/cli/types.d.ts +0 -6
  100. package/dist/cli/types.d.ts.map +1 -1
  101. package/dist/cli/types.js.map +1 -1
  102. package/dist/commands/admin.js +1 -1
  103. package/dist/commands/admin.js.map +1 -1
  104. package/dist/commands/auto-reply.js +2 -2
  105. package/dist/commands/auto-reply.js.map +1 -1
  106. package/dist/commands/extensions.js +1 -1
  107. package/dist/commands/extensions.js.map +1 -1
  108. package/dist/commands/login.js +1 -1
  109. package/dist/commands/login.js.map +1 -1
  110. package/dist/commands/manifest.d.ts +7 -0
  111. package/dist/commands/manifest.d.ts.map +1 -1
  112. package/dist/commands/manifest.js +28 -0
  113. package/dist/commands/manifest.js.map +1 -1
  114. package/dist/commands/model.d.ts.map +1 -1
  115. package/dist/commands/model.js +4 -1
  116. package/dist/commands/model.js.map +1 -1
  117. package/dist/commands/new.js +1 -1
  118. package/dist/commands/new.js.map +1 -1
  119. package/dist/commands/sandbox.js +3 -3
  120. package/dist/commands/sandbox.js.map +1 -1
  121. package/dist/commands/session-view.d.ts.map +1 -1
  122. package/dist/commands/session-view.js +5 -2
  123. package/dist/commands/session-view.js.map +1 -1
  124. package/dist/commands/types.d.ts +1 -1
  125. package/dist/commands/types.d.ts.map +1 -1
  126. package/dist/commands/types.js.map +1 -1
  127. package/dist/config.js +4 -4
  128. package/dist/config.js.map +1 -1
  129. package/dist/env-manifest.d.ts +2 -0
  130. package/dist/env-manifest.d.ts.map +1 -1
  131. package/dist/env-manifest.js +11 -1
  132. package/dist/env-manifest.js.map +1 -1
  133. package/dist/events.d.ts.map +1 -1
  134. package/dist/events.js +7 -6
  135. package/dist/events.js.map +1 -1
  136. package/dist/execution-resolver.d.ts.map +1 -1
  137. package/dist/execution-resolver.js +3 -2
  138. package/dist/execution-resolver.js.map +1 -1
  139. package/dist/extension-schedules.d.ts +31 -0
  140. package/dist/extension-schedules.d.ts.map +1 -0
  141. package/dist/extension-schedules.js +229 -0
  142. package/dist/extension-schedules.js.map +1 -0
  143. package/dist/harness/auth.js +5 -5
  144. package/dist/harness/auth.js.map +1 -1
  145. package/dist/harness/event-format.d.ts +2 -0
  146. package/dist/harness/event-format.d.ts.map +1 -1
  147. package/dist/harness/event-format.js +2 -1
  148. package/dist/harness/event-format.js.map +1 -1
  149. package/dist/harness/extensions/loader.d.ts +2 -2
  150. package/dist/harness/extensions/loader.d.ts.map +1 -1
  151. package/dist/harness/extensions/loader.js +135 -33
  152. package/dist/harness/extensions/loader.js.map +1 -1
  153. package/dist/harness/extensions/registry.d.ts +33 -1
  154. package/dist/harness/extensions/registry.d.ts.map +1 -1
  155. package/dist/harness/extensions/registry.js +79 -2
  156. package/dist/harness/extensions/registry.js.map +1 -1
  157. package/dist/harness/extensions/types.d.ts +165 -21
  158. package/dist/harness/extensions/types.d.ts.map +1 -1
  159. package/dist/harness/extensions/types.js.map +1 -1
  160. package/dist/harness/index.d.ts +2 -2
  161. package/dist/harness/index.d.ts.map +1 -1
  162. package/dist/harness/index.js +1 -1
  163. package/dist/harness/index.js.map +1 -1
  164. package/dist/harness/models.d.ts.map +1 -1
  165. package/dist/harness/models.js +36 -24
  166. package/dist/harness/models.js.map +1 -1
  167. package/dist/harness/runner.js +2 -2
  168. package/dist/harness/runner.js.map +1 -1
  169. package/dist/harness/session-store.d.ts.map +1 -1
  170. package/dist/harness/session-store.js +9 -7
  171. package/dist/harness/session-store.js.map +1 -1
  172. package/dist/harness/skills.js +3 -3
  173. package/dist/harness/skills.js.map +1 -1
  174. package/dist/harness/subagent-profiles.js +2 -2
  175. package/dist/harness/subagent-profiles.js.map +1 -1
  176. package/dist/harness/subagent-runner.js +3 -3
  177. package/dist/harness/subagent-runner.js.map +1 -1
  178. package/dist/index.d.ts +8 -8
  179. package/dist/index.d.ts.map +1 -1
  180. package/dist/index.js +5 -5
  181. package/dist/index.js.map +1 -1
  182. package/dist/main.js +58 -9
  183. package/dist/main.js.map +1 -1
  184. package/dist/observability/instrument.js +1 -1
  185. package/dist/observability/instrument.js.map +1 -1
  186. package/dist/observability/sentry.js +1 -1
  187. package/dist/observability/sentry.js.map +1 -1
  188. package/dist/office/index.d.ts +1 -1
  189. package/dist/office/index.d.ts.map +1 -1
  190. package/dist/office/index.js +1 -1
  191. package/dist/office/index.js.map +1 -1
  192. package/dist/office/layout.d.ts +7 -0
  193. package/dist/office/layout.d.ts.map +1 -1
  194. package/dist/office/layout.js +10 -1
  195. package/dist/office/layout.js.map +1 -1
  196. package/dist/office/registry.d.ts.map +1 -1
  197. package/dist/office/registry.js +7 -5
  198. package/dist/office/registry.js.map +1 -1
  199. package/dist/packages/materialize.js +10 -3
  200. package/dist/packages/materialize.js.map +1 -1
  201. package/dist/packages/source.d.ts +6 -0
  202. package/dist/packages/source.d.ts.map +1 -1
  203. package/dist/packages/source.js +14 -2
  204. package/dist/packages/source.js.map +1 -1
  205. package/dist/packages/types.d.ts +5 -3
  206. package/dist/packages/types.d.ts.map +1 -1
  207. package/dist/packages/types.js.map +1 -1
  208. package/dist/provisioner.js +5 -5
  209. package/dist/provisioner.js.map +1 -1
  210. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  211. package/dist/runtime/conversation-runtime.js +44 -2
  212. package/dist/runtime/conversation-runtime.js.map +1 -1
  213. package/dist/runtime/types.d.ts +10 -2
  214. package/dist/runtime/types.d.ts.map +1 -1
  215. package/dist/runtime/types.js.map +1 -1
  216. package/dist/sandbox/cloudflare.js +1 -1
  217. package/dist/sandbox/cloudflare.js.map +1 -1
  218. package/dist/sandbox/container.js +1 -2
  219. package/dist/sandbox/container.js.map +1 -1
  220. package/dist/sandbox/firecracker.js +1 -1
  221. package/dist/sandbox/firecracker.js.map +1 -1
  222. package/dist/sandbox/gondolin.d.ts.map +1 -1
  223. package/dist/sandbox/gondolin.js +1 -2
  224. package/dist/sandbox/gondolin.js.map +1 -1
  225. package/dist/sandbox/host.d.ts.map +1 -1
  226. package/dist/sandbox/host.js +4 -5
  227. package/dist/sandbox/host.js.map +1 -1
  228. package/dist/sandbox/index.js +1 -1
  229. package/dist/sandbox/index.js.map +1 -1
  230. package/dist/sandbox/utils.d.ts +2 -0
  231. package/dist/sandbox/utils.d.ts.map +1 -1
  232. package/dist/sandbox/utils.js +30 -1
  233. package/dist/sandbox/utils.js.map +1 -1
  234. package/dist/sessions/chat-history-sync.d.ts.map +1 -1
  235. package/dist/sessions/chat-history-sync.js +9 -8
  236. package/dist/sessions/chat-history-sync.js.map +1 -1
  237. package/dist/sessions/conversation-log.d.ts.map +1 -1
  238. package/dist/sessions/conversation-log.js +5 -2
  239. package/dist/sessions/conversation-log.js.map +1 -1
  240. package/dist/sessions/history-line.d.ts +9 -0
  241. package/dist/sessions/history-line.d.ts.map +1 -1
  242. package/dist/sessions/history-line.js +22 -1
  243. package/dist/sessions/history-line.js.map +1 -1
  244. package/dist/sessions/session-key.d.ts +5 -12
  245. package/dist/sessions/session-key.d.ts.map +1 -1
  246. package/dist/sessions/session-key.js +23 -0
  247. package/dist/sessions/session-key.js.map +1 -1
  248. package/dist/sessions/store.d.ts +2 -6
  249. package/dist/sessions/store.d.ts.map +1 -1
  250. package/dist/sessions/store.js +16 -16
  251. package/dist/sessions/store.js.map +1 -1
  252. package/dist/sessions/types.d.ts +2 -1
  253. package/dist/sessions/types.d.ts.map +1 -1
  254. package/dist/sessions/types.js.map +1 -1
  255. package/dist/tools/bash.js +1 -1
  256. package/dist/tools/bash.js.map +1 -1
  257. package/dist/tools/edit.d.ts.map +1 -1
  258. package/dist/tools/edit.js +4 -1
  259. package/dist/tools/edit.js.map +1 -1
  260. package/dist/tools/event.js +1 -1
  261. package/dist/tools/event.js.map +1 -1
  262. package/dist/tools/generate-image.js +3 -3
  263. package/dist/tools/generate-image.js.map +1 -1
  264. package/dist/tools/read.js +4 -4
  265. package/dist/tools/read.js.map +1 -1
  266. package/dist/tools/subagent.d.ts.map +1 -1
  267. package/dist/tools/subagent.js +9 -2
  268. package/dist/tools/subagent.js.map +1 -1
  269. package/dist/tools/types.d.ts +0 -26
  270. package/dist/tools/types.d.ts.map +1 -1
  271. package/dist/tools/types.js.map +1 -1
  272. package/dist/trigger.d.ts +2 -1
  273. package/dist/trigger.d.ts.map +1 -1
  274. package/dist/trigger.js.map +1 -1
  275. package/dist/types.d.ts +108 -16
  276. package/dist/types.d.ts.map +1 -1
  277. package/dist/types.js +2 -2
  278. package/dist/types.js.map +1 -1
  279. package/dist/utils/file-guards.d.ts +9 -0
  280. package/dist/utils/file-guards.d.ts.map +1 -1
  281. package/dist/utils/file-guards.js +44 -1
  282. package/dist/utils/file-guards.js.map +1 -1
  283. package/dist/vault/disabled.d.ts.map +1 -1
  284. package/dist/vault/disabled.js +3 -0
  285. package/dist/vault/disabled.js.map +1 -1
  286. package/dist/vault/index.d.ts +29 -0
  287. package/dist/vault/index.d.ts.map +1 -1
  288. package/dist/vault/index.js +68 -4
  289. package/dist/vault/index.js.map +1 -1
  290. package/dist/vault/types.d.ts +2 -0
  291. package/dist/vault/types.d.ts.map +1 -1
  292. package/dist/vault/types.js.map +1 -1
  293. package/dist/web/admin/portal.d.ts +1 -1
  294. package/dist/web/admin/portal.d.ts.map +1 -1
  295. package/dist/web/admin/portal.js +194 -22
  296. package/dist/web/admin/portal.js.map +1 -1
  297. package/dist/web/admin/provider-models.js +1 -1
  298. package/dist/web/admin/provider-models.js.map +1 -1
  299. package/dist/web/login/oauth.js +1 -1
  300. package/dist/web/login/oauth.js.map +1 -1
  301. package/dist/web/login/portal.d.ts +1 -1
  302. package/dist/web/login/portal.d.ts.map +1 -1
  303. package/dist/web/login/portal.js +13 -36
  304. package/dist/web/login/portal.js.map +1 -1
  305. package/dist/web/portal-shell.d.ts +17 -0
  306. package/dist/web/portal-shell.d.ts.map +1 -1
  307. package/dist/web/portal-shell.js +66 -1
  308. package/dist/web/portal-shell.js.map +1 -1
  309. package/dist/web/server.d.ts +3 -2
  310. package/dist/web/server.d.ts.map +1 -1
  311. package/dist/web/server.js +3 -3
  312. package/dist/web/server.js.map +1 -1
  313. package/dist/web/session-view/portal.d.ts +1 -1
  314. package/dist/web/session-view/portal.d.ts.map +1 -1
  315. package/dist/web/session-view/portal.js +10 -12
  316. package/dist/web/session-view/portal.js.map +1 -1
  317. package/dist/web/session-view/service.d.ts.map +1 -1
  318. package/dist/web/session-view/service.js +11 -6
  319. package/dist/web/session-view/service.js.map +1 -1
  320. package/dist/web/session-view/types.d.ts +0 -4
  321. package/dist/web/session-view/types.d.ts.map +1 -1
  322. package/dist/web/session-view/types.js.map +1 -1
  323. package/dist/web/token-store.js +1 -1
  324. package/dist/web/token-store.js.map +1 -1
  325. package/package.json +8 -17
  326. package/dist/cli/ext-git.d.ts +0 -17
  327. package/dist/cli/ext-git.d.ts.map +0 -1
  328. package/dist/cli/ext-git.js +0 -107
  329. package/dist/cli/ext-git.js.map +0 -1
  330. package/dist/commands/parse.d.ts +0 -7
  331. package/dist/commands/parse.d.ts.map +0 -1
  332. package/dist/commands/parse.js +0 -14
  333. package/dist/commands/parse.js.map +0 -1
  334. package/dist/commands/text.d.ts +0 -2
  335. package/dist/commands/text.d.ts.map +0 -1
  336. package/dist/commands/text.js +0 -16
  337. package/dist/commands/text.js.map +0 -1
  338. package/dist/harness/extensions/blockkit.d.ts +0 -19
  339. package/dist/harness/extensions/blockkit.d.ts.map +0 -1
  340. package/dist/harness/extensions/blockkit.js +0 -42
  341. package/dist/harness/extensions/blockkit.js.map +0 -1
  342. package/dist/sandbox/path-context.d.ts +0 -3
  343. package/dist/sandbox/path-context.d.ts.map +0 -1
  344. package/dist/sandbox/path-context.js +0 -30
  345. package/dist/sandbox/path-context.js.map +0 -1
  346. package/dist/sessions/metadata.d.ts +0 -3
  347. package/dist/sessions/metadata.d.ts.map +0 -1
  348. package/dist/sessions/metadata.js +0 -11
  349. package/dist/sessions/metadata.js.map +0 -1
  350. package/dist/sessions/policy.d.ts +0 -6
  351. package/dist/sessions/policy.d.ts.map +0 -1
  352. package/dist/sessions/policy.js +0 -25
  353. package/dist/sessions/policy.js.map +0 -1
  354. package/dist/tools/truncate.d.ts +0 -33
  355. package/dist/tools/truncate.d.ts.map +0 -1
  356. package/dist/tools/truncate.js +0 -184
  357. package/dist/tools/truncate.js.map +0 -1
  358. package/dist/utils/date.d.ts +0 -10
  359. package/dist/utils/date.d.ts.map +0 -1
  360. package/dist/utils/date.js +0 -23
  361. package/dist/utils/date.js.map +0 -1
  362. package/dist/utils/env.d.ts +0 -3
  363. package/dist/utils/env.d.ts.map +0 -1
  364. package/dist/utils/env.js +0 -12
  365. package/dist/utils/env.js.map +0 -1
  366. package/dist/utils/fs-atomic.d.ts +0 -10
  367. package/dist/utils/fs-atomic.d.ts.map +0 -1
  368. package/dist/utils/fs-atomic.js +0 -45
  369. package/dist/utils/fs-atomic.js.map +0 -1
  370. package/dist/utils/html.d.ts +0 -2
  371. package/dist/utils/html.d.ts.map +0 -1
  372. package/dist/utils/html.js +0 -4
  373. package/dist/utils/html.js.map +0 -1
  374. package/dist/utils/http-body.d.ts +0 -10
  375. package/dist/utils/http-body.d.ts.map +0 -1
  376. package/dist/utils/http-body.js +0 -34
  377. package/dist/utils/http-body.js.map +0 -1
  378. package/dist/vault/injection.d.ts +0 -12
  379. package/dist/vault/injection.d.ts.map +0 -1
  380. package/dist/vault/injection.js +0 -30
  381. package/dist/vault/injection.js.map +0 -1
  382. package/dist/vault/policy.d.ts +0 -20
  383. package/dist/vault/policy.d.ts.map +0 -1
  384. package/dist/vault/policy.js +0 -20
  385. package/dist/vault/policy.js.map +0 -1
  386. package/dist/web/agent-events/portal.d.ts +0 -3
  387. package/dist/web/agent-events/portal.d.ts.map +0 -1
  388. package/dist/web/agent-events/portal.js +0 -19
  389. package/dist/web/agent-events/portal.js.map +0 -1
  390. package/dist/web/request.d.ts +0 -3
  391. package/dist/web/request.d.ts.map +0 -1
  392. package/dist/web/request.js +0 -13
  393. package/dist/web/request.js.map +0 -1
  394. package/dist/web/session-view/command.d.ts +0 -4
  395. package/dist/web/session-view/command.d.ts.map +0 -1
  396. package/dist/web/session-view/command.js +0 -10
  397. package/dist/web/session-view/command.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-runner.js","sourceRoot":"","sources":["../../src/harness/subagent-runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { AgentMessage, AgentTool, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Api, AssistantMessage, Model } from \"@earendil-works/pi-ai\";\nimport { Kind, Type, type TSchema } from \"@sinclair/typebox\";\nimport { Value } from \"@sinclair/typebox/value\";\nimport * as log from \"../log.js\";\nimport type { MikanModels } from \"./models.js\";\nimport type { SubagentProfile } from \"./types.js\";\nimport { MikanAgentSession } from \"./runner.js\";\nimport { SessionStore } from \"./session-store.js\";\nimport type {\n SubagentModelSpec,\n SubagentRunOutput,\n SubagentRunRequest,\n SubagentRunResult,\n SubagentUsage,\n SubagentUsageSink,\n} from \"./types.js\";\nimport { copySubagentUsage, createEmptySubagentUsage } from \"./usage.js\";\nimport { unboundedSlotPool, type SubagentSlotPool } from \"../tools/subagent-slots.js\";\n\nconst subagentRunDepth = new AsyncLocalStorage<number>();\nconst DEFAULT_SYSTEM_PROMPT =\n \"You are a focused subagent. Complete only the assigned task and return the result directly.\";\nexport const DEFAULT_SUBAGENT_BUDGET = {\n maxTurns: 100,\n maxCostUsd: 10,\n maxDurationMs: 10 * 60 * 1000,\n} as const;\n\n/** Time allowed for an aborted subagent to settle before detached cleanup. */\nexport const SUBAGENT_ABORT_GRACE_MS = 100;\n\nconst SCHEMA_STRUCTURAL_KEYS = new Set([\n \"type\",\n \"properties\",\n \"required\",\n \"items\",\n \"enum\",\n \"const\",\n \"anyOf\",\n \"oneOf\",\n \"allOf\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction schemaOptions(node: Record<string, unknown>): Record<string, unknown> {\n const options: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(node)) {\n if (!SCHEMA_STRUCTURAL_KEYS.has(key)) options[key] = value;\n }\n if (isRecord(options.additionalProperties)) {\n options.additionalProperties = hydrateSchema(options.additionalProperties);\n }\n return options;\n}\n\n/**\n * outputSchema arrives over the subagent tool as plain JSON (tool-call\n * arguments never carry TypeBox's Kind symbol), but Value.Check dispatches\n * purely on schema[Kind] and throws ValueCheckUnknownTypeError for anything\n * without it. Hydrate plain JSON Schema into real TypeBox schema nodes so\n * validation runs instead of throwing; schemas built with TypeBox already\n * carry Kind and pass through untouched.\n *\n * Unsupported keywords ($ref, not, patternProperties, if/then/else) degrade to\n * a permissive Unknown — fail-open by design: outputSchema is advisory output\n * validation, not a security boundary.\n */\nfunction hydrateSchema(schema: unknown): TSchema {\n if (isRecord(schema) && Kind in schema) return schema as TSchema;\n if (!isRecord(schema)) return Type.Unknown();\n\n if (Array.isArray(schema.enum)) {\n const literals = schema.enum.filter(\n (value): value is string | number | boolean =>\n typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\",\n );\n return literals.length > 0\n ? Type.Union(literals.map((value) => Type.Literal(value)))\n : Type.Unknown();\n }\n if (\"const\" in schema) {\n const value = schema.const;\n return typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\"\n ? Type.Literal(value)\n : Type.Unknown();\n }\n if (Array.isArray(schema.anyOf)) return Type.Union(schema.anyOf.map(hydrateSchema));\n if (Array.isArray(schema.oneOf)) return Type.Union(schema.oneOf.map(hydrateSchema));\n if (Array.isArray(schema.allOf)) return Type.Intersect(schema.allOf.map(hydrateSchema));\n\n const type = Array.isArray(schema.type)\n ? schema.type\n : (schema.type ?? (schema.properties ? \"object\" : schema.items ? \"array\" : undefined));\n if (Array.isArray(type)) {\n return Type.Union(type.map((variant) => hydrateSchema({ ...schema, type: variant })));\n }\n\n const options = schemaOptions(schema);\n switch (type) {\n case \"object\": {\n const properties = isRecord(schema.properties) ? schema.properties : {};\n const required = new Set(Array.isArray(schema.required) ? schema.required : []);\n const props: Record<string, TSchema> = {};\n for (const [key, value] of Object.entries(properties)) {\n const hydrated = hydrateSchema(value);\n props[key] = required.has(key) ? hydrated : Type.Optional(hydrated);\n }\n return Type.Object(props, options);\n }\n case \"array\":\n return Type.Array(\n schema.items !== undefined ? hydrateSchema(schema.items) : Type.Unknown(),\n options,\n );\n case \"string\":\n return Type.String(options);\n case \"number\":\n return Type.Number(options);\n case \"integer\":\n return Type.Integer(options);\n case \"boolean\":\n return Type.Boolean(options);\n case \"null\":\n return Type.Null(options);\n default:\n return Type.Unknown(options);\n }\n}\n\ninterface RunSubagentOptions<TOutputSchema extends TSchema | undefined = undefined> {\n request: SubagentRunRequest<TOutputSchema>;\n defaultModel: Model<Api>;\n thinkingLevel: ThinkingLevel;\n models: MikanModels;\n workspaceDir: string;\n availableTools: AgentTool[];\n profiles?: ReadonlyMap<string, SubagentProfile>;\n /** Process-wide launch pool shared by tool and extension invocations. */\n slots?: SubagentSlotPool;\n /** Host-snapshotted parent transcript; never sourced from the public request. */\n parentMessages?: AgentMessage[];\n /** Usage attribution sink snapshotted when this invocation begins. */\n onUsage?: SubagentUsageSink;\n}\n\nfunction resolveBudget(budget: RunSubagentOptions[\"request\"][\"budget\"]) {\n const resolved = { ...DEFAULT_SUBAGENT_BUDGET, ...budget };\n const positiveIntegerFields = [\n [\"maxTurns\", resolved.maxTurns],\n [\"maxTokens\", resolved.maxTokens],\n [\"maxDurationMs\", resolved.maxDurationMs],\n ] as const;\n for (const [name, value] of positiveIntegerFields) {\n if (value !== undefined && (!Number.isInteger(value) || value <= 0)) {\n throw new Error(`api.subagent.run budget.${name} must be a positive integer`);\n }\n }\n if (!Number.isFinite(resolved.maxCostUsd) || resolved.maxCostUsd < 0) {\n throw new Error(\"api.subagent.run budget.maxCostUsd must be a non-negative number\");\n }\n return resolved;\n}\n\nfunction selectTools(requested: string[] | undefined, available: AgentTool[]): AgentTool[] {\n if (!requested || requested.length === 0) return [];\n const byName = new Map<string, AgentTool>();\n for (const tool of available) {\n if (!byName.has(tool.name)) byName.set(tool.name, tool);\n }\n const selected: AgentTool[] = [];\n for (const name of new Set(requested)) {\n const tool = byName.get(name);\n if (!tool) throw new Error(`Unknown or unavailable subagent tool: ${name}`);\n selected.push(tool);\n }\n return selected;\n}\n\n/**\n * Wrap a tool so the run can prove it was actually reached. Fields are listed\n * explicitly rather than spread: `AgentTool` is a plain interface, and a\n * structural copy would silently drop anything added to it later.\n */\nfunction witnessToolUse(tool: AgentTool, invoked: Set<string>): AgentTool {\n return {\n name: tool.name,\n label: tool.label,\n description: tool.description,\n parameters: tool.parameters,\n ...(tool.constrainedSampling !== undefined\n ? { constrainedSampling: tool.constrainedSampling }\n : {}),\n ...(tool.prepareArguments ? { prepareArguments: tool.prepareArguments.bind(tool) } : {}),\n ...(tool.executionMode ? { executionMode: tool.executionMode } : {}),\n execute: (...args: Parameters<AgentTool[\"execute\"]>) => {\n invoked.add(tool.name);\n return tool.execute(...args);\n },\n };\n}\n\nfunction formatTask(task: string, input: unknown, parentContext?: string): string {\n const trimmed = task.trim();\n if (!trimmed) throw new Error(\"api.subagent.run requires a non-empty task\");\n let formatted = trimmed;\n if (input !== undefined) {\n let serialized: string | undefined;\n try {\n serialized = JSON.stringify(input, null, 2);\n } catch (err) {\n throw new Error(\n `api.subagent.run input must be JSON-serializable: ${err instanceof Error ? err.message : String(err)}`,\n { cause: err },\n );\n }\n if (serialized === undefined)\n throw new Error(\"api.subagent.run input must be JSON-serializable\");\n formatted = `${trimmed}\\n\\nInput:\\n${serialized}`;\n }\n return parentContext ? `${parentContext}\\n\\n${formatted}` : formatted;\n}\n\nfunction messageText(message: AgentMessage): string {\n if (message.role === \"compactionSummary\" || message.role === \"branchSummary\") {\n return message.summary;\n }\n if (!(\"content\" in message)) return \"\";\n if (typeof message.content === \"string\") return message.content;\n if (!Array.isArray(message.content)) return \"\";\n return message.content\n .filter(\n (part): part is { type: \"text\"; text: string } =>\n typeof part === \"object\" && part !== null && part.type === \"text\",\n )\n .map((part) => part.text)\n .join(\"\");\n}\n\nfunction normalizedParentContext(\n request: SubagentRunRequest<TSchema | undefined>,\n messages: AgentMessage[] | undefined,\n): string | undefined {\n if (!request.parentContext || !messages) return undefined;\n const recentTurns = request.parentContext.recentTurns ?? 3;\n if (!Number.isInteger(recentTurns) || recentTurns < 1 || recentTurns > 8) {\n throw new Error(\"api.subagent.run parentContext.recentTurns must be an integer from 1 to 8\");\n }\n const conversation = messages.filter(\n (message) => (message.role === \"user\" || message.role === \"assistant\") && messageText(message),\n );\n let first = conversation.length;\n let users = 0;\n while (first > 0 && users < recentTurns) {\n first -= 1;\n if (conversation[first].role === \"user\") users += 1;\n }\n const recent = conversation.slice(first);\n const recentStart = recent[0] ? messages.indexOf(recent[0]) : messages.length;\n let summary: AgentMessage | undefined;\n for (let index = recentStart - 1; index >= 0; index--) {\n const message = messages[index];\n if (message.role === \"compactionSummary\" || message.role === \"branchSummary\") {\n summary = message;\n break;\n }\n }\n return [\n \"<parent_reference_context>\",\n summary ? `Earlier summary: ${messageText(summary)}` : \"[Earlier parent context omitted]\",\n ...recent.map(\n (message) => `${message.role === \"user\" ? \"User\" : \"Assistant\"}: ${messageText(message)}`,\n ),\n \"</parent_reference_context>\",\n ].join(\"\\n\");\n}\n\n/**\n * The evidence policy has to name the actual grant. Told to \"use granted\n * tools\" while holding none, a model will write a tool call as prose and\n * hand that text back as its answer — which then flows to dependent DAG\n * nodes as if it were a finding.\n */\nfunction groundingPolicy(toolNames: string[]): string {\n if (toolNames.length === 0) {\n return [\n \"Evidence policy:\",\n \"- You have NO tools in this run. Do not emit tool calls or tool-call syntax; they will not execute.\",\n \"- Answer only from the task text and any structured input supplied to you.\",\n \"- Never claim to have read a file, run a command, or reached a repository or URL.\",\n \"- If the task cannot be done without a tool, say so plainly and stop.\",\n ].join(\"\\n\");\n }\n return [\n \"Evidence policy:\",\n `- Your tools this run: ${toolNames.join(\", \")}. Nothing else will execute.`,\n \"- Use them for any claim about files, commands, repositories, or external state.\",\n \"- Never simulate tool output or claim a tool was used when it was not.\",\n \"- If the task requires a tool you were not granted, state that you cannot verify it instead of guessing.\",\n ].join(\"\\n\");\n}\n\nfunction buildSystemPrompt(\n base: string | undefined,\n outputSchema: TSchema | undefined,\n toolNames: string[],\n): string {\n const prompt = [base?.trim() || DEFAULT_SYSTEM_PROMPT, groundingPolicy(toolNames)].join(\"\\n\\n\");\n if (!outputSchema) return prompt;\n return [\n prompt,\n \"\",\n \"Return only one JSON value matching this JSON Schema. Do not use Markdown or code fences.\",\n JSON.stringify(outputSchema),\n ].join(\"\\n\");\n}\n\ntype SubagentRunStats = ReturnType<MikanAgentSession[\"getLastRunStats\"]>;\n\n/**\n * Every SubagentRunResult's metric fields are born here — one derivation from\n * the session's run stats, so adding a metric is one edit and no terminal\n * site can drift (the abort branch once shipped without toolCallCounts). The\n * terminal sites state only what differs: status, error, text.\n */\nfunction baseRunResult(\n runId: string,\n model: SubagentModelSpec,\n startedAt: number,\n stats?: SubagentRunStats,\n) {\n const usage = stats?.usage ?? createEmptySubagentUsage();\n return {\n runId,\n model,\n turns: stats?.llmCalls ?? 0,\n toolCalls: stats?.toolCalls ?? 0,\n toolCallCounts: stats?.toolCallCounts ?? {},\n usage,\n tokens: usage.totalTokens,\n costUsd: usage.cost.total,\n durationMs: Date.now() - startedAt,\n };\n}\n\nfunction finalAssistant(messages: AgentMessage[]): AssistantMessage | undefined {\n for (let index = messages.length - 1; index >= 0; index--) {\n const message = messages[index];\n if (message.role === \"assistant\") return message;\n }\n return undefined;\n}\n\nfunction assistantText(message: AssistantMessage | undefined): string {\n if (!message) return \"\";\n return message.content\n .filter((part) => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\");\n}\n\n/**\n * Execute one non-recursive, fresh subagent run. Never rejects: every\n * failure — including request validation — is a result with a terminal\n * status, so batch callers (`tasks` / `dag`) can never orphan in-flight\n * sibling runs on one bad request. Usage is reported once, after the\n * underlying run settles; an aborted run may report it from detached cleanup.\n */\nexport async function runSubagent<TOutputSchema extends TSchema | undefined = undefined>(\n options: RunSubagentOptions<TOutputSchema>,\n): Promise<SubagentRunResult<SubagentRunOutput<TOutputSchema>>> {\n const execution = await executeBoundedSubagentRun(options);\n if (execution.cleanup) {\n void execution.cleanup\n .then(async (result) => {\n await reportSubagentUsage(options.onUsage, result.usage);\n })\n .catch((err) => {\n log.logWarning(\"Subagent detached cleanup failed\", String(err));\n });\n return execution.result;\n }\n await reportSubagentUsage(options.onUsage, execution.result.usage);\n return execution.result;\n}\n\nasync function reportSubagentUsage(\n onUsage: SubagentUsageSink | undefined,\n usage: SubagentUsage,\n): Promise<void> {\n try {\n await onUsage?.(copySubagentUsage(usage));\n } catch (err) {\n log.logWarning(\"Subagent onUsage listener failed\", String(err));\n }\n}\n\ntype BoundedSubagentExecution<TOutput> = {\n result: SubagentRunResult<TOutput>;\n /** Resolves after an aborted prompt settles and returns its final result. */\n cleanup?: Promise<SubagentRunResult<TOutput>>;\n};\n\nasync function executeBoundedSubagentRun<TOutputSchema extends TSchema | undefined = undefined>(\n options: RunSubagentOptions<TOutputSchema>,\n): Promise<BoundedSubagentExecution<SubagentRunOutput<TOutputSchema>>> {\n const startedAt = Date.now();\n let release: (() => void) | undefined;\n try {\n release = await (options.slots ?? unboundedSlotPool()).acquire(options.request.signal);\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") {\n const model = options.request.model ?? {\n provider: options.defaultModel.provider,\n id: options.defaultModel.id,\n };\n return {\n result: { ...baseRunResult(randomUUID(), model, startedAt), status: \"cancelled\" },\n };\n }\n throw err;\n }\n if (!release) throw new Error(\"Subagent slot acquisition returned no release handle\");\n\n try {\n const execution = await executeSubagentRun(options);\n if (!execution.cleanup) {\n release();\n release = undefined;\n return execution;\n }\n\n const cleanup = execution.cleanup;\n const heldRelease = release;\n void cleanup\n .then(\n () => heldRelease(),\n (err) => {\n log.logWarning(\"Subagent detached cleanup failed\", String(err));\n heldRelease();\n },\n )\n .catch((err) => {\n log.logWarning(\"Subagent detached release failed\", String(err));\n heldRelease();\n });\n release = undefined;\n return execution;\n } catch (err) {\n release?.();\n release = undefined;\n throw err;\n }\n}\n\nfunction noop(): void {}\n\n/**\n * Expand `request.profile` into the concrete capability set it names. Most\n * profile budgets are caps that callers may only tighten. Token budgets are\n * different: the effective allowance is the larger of the profile default and\n * the caller's request.\n */\nfunction resolveProfile<TOutputSchema extends TSchema | undefined>(\n request: SubagentRunRequest<TOutputSchema>,\n options: RunSubagentOptions<TOutputSchema>,\n): SubagentRunRequest<TOutputSchema> {\n if (!request.profile) return request;\n const profile = options.profiles?.get(request.profile);\n if (!profile) {\n const known = [...(options.profiles?.keys() ?? [])].join(\", \");\n throw new Error(\n `Unknown subagent profile: ${request.profile}${known ? ` (available: ${known})` : \"\"}`,\n );\n }\n if (request.tools || request.model || request.systemPrompt || request.thinkingLevel) {\n throw new Error(\n `Subagent profile ${request.profile} cannot be combined with tools, model, systemPrompt, or thinkingLevel`,\n );\n }\n const budget = {\n ...request.budget,\n ...(profile.maxTurns !== undefined\n ? { maxTurns: Math.min(profile.maxTurns, request.budget?.maxTurns ?? profile.maxTurns) }\n : {}),\n ...(profile.maxTokens !== undefined || request.budget?.maxTokens !== undefined\n ? { maxTokens: Math.max(profile.maxTokens ?? 0, request.budget?.maxTokens ?? 0) }\n : {}),\n ...(profile.maxCostUsd !== undefined\n ? {\n maxCostUsd: Math.min(\n profile.maxCostUsd,\n request.budget?.maxCostUsd ?? profile.maxCostUsd,\n ),\n }\n : {}),\n ...(profile.maxDurationMs !== undefined\n ? {\n maxDurationMs: Math.min(\n profile.maxDurationMs,\n request.budget?.maxDurationMs ?? profile.maxDurationMs,\n ),\n }\n : {}),\n };\n return {\n ...request,\n systemPrompt: profile.systemPrompt,\n tools: profile.tools,\n requiredTools: profile.requiredTools,\n ...(profile.model ? { model: profile.model } : {}),\n ...(profile.thinkingLevel ? { thinkingLevel: profile.thinkingLevel } : {}),\n ...(Object.keys(budget).length > 0 ? { budget } : {}),\n };\n}\n\nasync function executeSubagentRun<TOutputSchema extends TSchema | undefined = undefined>(\n options: RunSubagentOptions<TOutputSchema>,\n): Promise<BoundedSubagentExecution<SubagentRunOutput<TOutputSchema>>> {\n const request = resolveProfile(options.request, options);\n const runId = randomUUID();\n const startedAt = Date.now();\n let modelSpec: SubagentModelSpec = request.model ?? {\n provider: options.defaultModel.provider,\n id: options.defaultModel.id,\n };\n let sessionRef: MikanAgentSession | undefined;\n let terminalSignal: \"cancelled\" | \"timeout\" | undefined;\n let timeout: NodeJS.Timeout | undefined;\n let notifyAbort: () => void = noop;\n const abortRequested = new Promise<void>((resolve) => {\n notifyAbort = resolve;\n });\n const abort = (reason: \"cancelled\" | \"timeout\") => {\n if (terminalSignal) return;\n terminalSignal = reason;\n sessionRef?.abort();\n notifyAbort();\n };\n const onAbort = () => abort(\"cancelled\");\n\n try {\n if ((subagentRunDepth.getStore() ?? 0) >= 1) {\n throw new Error(\"Nested api.subagent.run calls are not allowed\");\n }\n const model = request.model\n ? options.models.resolve(request.model.provider, request.model.id)\n : options.defaultModel;\n modelSpec = { provider: model.provider, id: model.id };\n const invokedTools = new Set<string>();\n const granted = selectTools(request.tools, options.availableTools);\n const missingRequiredTools = (request.requiredTools ?? []).filter(\n (name) => !granted.some((tool) => tool.name === name),\n );\n if (missingRequiredTools.length > 0) {\n throw new Error(\n `Required subagent tools were not granted: ${missingRequiredTools.join(\", \")}`,\n );\n }\n const tools = granted.map((tool) => witnessToolUse(tool, invokedTools));\n const task = formatTask(\n request.task,\n request.input,\n normalizedParentContext(request, options.parentMessages),\n );\n const budget = resolveBudget(request.budget);\n const session = new MikanAgentSession({\n systemPrompt: buildSystemPrompt(\n request.systemPrompt,\n request.outputSchema,\n granted.map((tool) => tool.name),\n ),\n model,\n thinkingLevel: request.thinkingLevel ?? options.thinkingLevel,\n tools,\n models: options.models,\n sessionStore: SessionStore.inMemory(options.workspaceDir),\n settings: { compaction: { enabled: false } },\n });\n sessionRef = session;\n\n request.signal?.addEventListener(\"abort\", onAbort, { once: true });\n if (request.signal?.aborted) abort(\"cancelled\");\n timeout = setTimeout(() => abort(\"timeout\"), budget.maxDurationMs);\n timeout.unref();\n\n const buildResult = (\n cleanupPending = false,\n ): SubagentRunResult<SubagentRunOutput<TOutputSchema>> => {\n const stats = session.getLastRunStats();\n const assistant = finalAssistant(session.messages);\n const text = assistantText(assistant);\n const base = {\n ...baseRunResult(runId, modelSpec, startedAt, stats),\n ...(text ? { text } : {}),\n ...(cleanupPending ? { cleanupPending: true as const } : {}),\n };\n\n if (terminalSignal) {\n return {\n ...base,\n status: terminalSignal,\n ...(terminalSignal === \"timeout\"\n ? { error: `Subagent exceeded its ${budget.maxDurationMs}ms duration limit` }\n : {}),\n };\n }\n if (stats.budgetExceededReason) {\n return {\n ...base,\n status: \"budget_exceeded\",\n error: stats.budgetExceededReason,\n };\n }\n const unusedRequiredTools = (request.requiredTools ?? []).filter(\n (name) => !invokedTools.has(name),\n );\n if (unusedRequiredTools.length > 0) {\n return {\n ...base,\n status: \"failed\",\n error: `Required tool not used: ${unusedRequiredTools.join(\", \")}`,\n };\n }\n if (assistant?.stopReason === \"error\") {\n return {\n ...base,\n status: \"failed\",\n error: assistant.errorMessage || \"Subagent failed\",\n };\n }\n if (!assistant) {\n return { ...base, status: \"failed\", error: \"Subagent produced no assistant response\" };\n }\n\n if (request.outputSchema) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n return { ...base, status: \"invalid_output\", error: \"Subagent output is not valid JSON\" };\n }\n if (!Value.Check(hydrateSchema(request.outputSchema), parsed)) {\n return {\n ...base,\n status: \"invalid_output\",\n error: \"Subagent output does not match the requested schema\",\n };\n }\n return {\n ...base,\n status: \"completed\",\n output: parsed as SubagentRunOutput<TOutputSchema>,\n };\n }\n\n if (!text) {\n return { ...base, status: \"failed\", error: \"Subagent produced no text output\" };\n }\n return {\n ...base,\n status: \"completed\",\n output: text as SubagentRunOutput<TOutputSchema>,\n };\n };\n const buildFailureResult = (\n err: unknown,\n ): SubagentRunResult<SubagentRunOutput<TOutputSchema>> => ({\n ...baseRunResult(runId, modelSpec, startedAt, session.getLastRunStats()),\n status: terminalSignal ?? \"failed\",\n error: err instanceof Error ? err.message : String(err),\n });\n\n if (!terminalSignal) {\n const promptOutcome = subagentRunDepth\n .run(1, () =>\n session.prompt(task, {\n budget: {\n maxLlmCalls: budget.maxTurns,\n maxTokens: budget.maxTokens,\n maxCostUsd: budget.maxCostUsd,\n maxDurationMs: budget.maxDurationMs,\n },\n }),\n )\n .then(\n () => ({ ok: true as const }),\n (error: unknown) => ({ ok: false as const, error }),\n );\n const winner = await Promise.race([\n promptOutcome.then((outcome) => ({ type: \"settled\" as const, outcome })),\n abortRequested.then(async () => {\n let graceTimer: NodeJS.Timeout | undefined;\n const graceExpired = new Promise<\"expired\">((resolve) => {\n graceTimer = setTimeout(() => resolve(\"expired\"), SUBAGENT_ABORT_GRACE_MS);\n });\n const graceOutcome = await Promise.race([\n promptOutcome.then((settledOutcome) => ({\n type: \"settled\" as const,\n outcome: settledOutcome,\n })),\n graceExpired.then((value) => ({ type: value as \"expired\" })),\n ]);\n if (graceTimer) clearTimeout(graceTimer);\n return graceOutcome;\n }),\n ]);\n if (winner.type === \"expired\") {\n const cleanup = promptOutcome.then((settledOutcome) =>\n settledOutcome.ok ? buildResult() : buildFailureResult(settledOutcome.error),\n );\n return { result: buildResult(true), cleanup };\n }\n if (!winner.outcome.ok) throw winner.outcome.error;\n }\n\n return { result: buildResult() };\n } catch (err) {\n return {\n result: {\n ...baseRunResult(runId, modelSpec, startedAt, sessionRef?.getLastRunStats()),\n status: terminalSignal ?? \"failed\",\n error: err instanceof Error ? err.message : String(err),\n },\n };\n } finally {\n if (timeout) clearTimeout(timeout);\n request.signal?.removeEventListener(\"abort\", onAbort);\n }\n}\n"]}
1
+ {"version":3,"file":"subagent-runner.js","sourceRoot":"","sources":["../../src/harness/subagent-runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { AgentMessage, AgentTool, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Api, AssistantMessage, Model } from \"@earendil-works/pi-ai\";\nimport { Kind, Type, type TSchema } from \"@sinclair/typebox\";\nimport { Value } from \"@sinclair/typebox/value\";\nimport * as log from \"../log.js\";\nimport type { MikanModels } from \"./models.js\";\nimport type { SubagentProfile } from \"./types.js\";\nimport { MikanAgentSession } from \"./runner.js\";\nimport { SessionStore } from \"./session-store.js\";\nimport type {\n SubagentModelSpec,\n SubagentRunOutput,\n SubagentRunRequest,\n SubagentRunResult,\n SubagentUsage,\n SubagentUsageSink,\n} from \"./types.js\";\nimport { copySubagentUsage, createEmptySubagentUsage } from \"./usage.js\";\nimport { unboundedSlotPool, type SubagentSlotPool } from \"../tools/subagent-slots.js\";\n\nconst subagentRunDepth = new AsyncLocalStorage<number>();\nconst DEFAULT_SYSTEM_PROMPT =\n \"You are a focused subagent. Complete only the assigned task and return the result directly.\";\nexport const DEFAULT_SUBAGENT_BUDGET = {\n maxTurns: 100,\n maxCostUsd: 10,\n maxDurationMs: 10 * 60 * 1000,\n} as const;\n\n/** Time allowed for an aborted subagent to settle before detached cleanup. */\nexport const SUBAGENT_ABORT_GRACE_MS = 100;\n\nconst SCHEMA_STRUCTURAL_KEYS = new Set([\n \"type\",\n \"properties\",\n \"required\",\n \"items\",\n \"enum\",\n \"const\",\n \"anyOf\",\n \"oneOf\",\n \"allOf\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction schemaOptions(node: Record<string, unknown>): Record<string, unknown> {\n const options: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(node)) {\n if (!SCHEMA_STRUCTURAL_KEYS.has(key)) options[key] = value;\n }\n if (isRecord(options.additionalProperties)) {\n options.additionalProperties = hydrateSchema(options.additionalProperties);\n }\n return options;\n}\n\n/**\n * outputSchema arrives over the subagent tool as plain JSON (tool-call\n * arguments never carry TypeBox's Kind symbol), but Value.Check dispatches\n * purely on schema[Kind] and throws ValueCheckUnknownTypeError for anything\n * without it. Hydrate plain JSON Schema into real TypeBox schema nodes so\n * validation runs instead of throwing; schemas built with TypeBox already\n * carry Kind and pass through untouched.\n *\n * Unsupported keywords ($ref, not, patternProperties, if/then/else) degrade to\n * a permissive Unknown — fail-open by design: outputSchema is advisory output\n * validation, not a security boundary.\n */\nfunction hydrateSchema(schema: unknown): TSchema {\n if (isRecord(schema) && Kind in schema) return schema as TSchema;\n if (!isRecord(schema)) return Type.Unknown();\n\n if (Array.isArray(schema.enum)) {\n const literals = schema.enum.filter(\n (value): value is string | number | boolean =>\n typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\",\n );\n return literals.length > 0\n ? Type.Union(literals.map((value) => Type.Literal(value)))\n : Type.Unknown();\n }\n if (\"const\" in schema) {\n const value = schema.const;\n return typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\"\n ? Type.Literal(value)\n : Type.Unknown();\n }\n if (Array.isArray(schema.anyOf)) return Type.Union(schema.anyOf.map(hydrateSchema));\n if (Array.isArray(schema.oneOf)) return Type.Union(schema.oneOf.map(hydrateSchema));\n if (Array.isArray(schema.allOf)) return Type.Intersect(schema.allOf.map(hydrateSchema));\n\n const type = Array.isArray(schema.type)\n ? schema.type\n : (schema.type ?? (schema.properties ? \"object\" : schema.items ? \"array\" : undefined));\n if (Array.isArray(type)) {\n return Type.Union(type.map((variant) => hydrateSchema({ ...schema, type: variant })));\n }\n\n const options = schemaOptions(schema);\n switch (type) {\n case \"object\": {\n const properties = isRecord(schema.properties) ? schema.properties : {};\n const required = new Set(Array.isArray(schema.required) ? schema.required : []);\n const props: Record<string, TSchema> = {};\n for (const [key, value] of Object.entries(properties)) {\n const hydrated = hydrateSchema(value);\n props[key] = required.has(key) ? hydrated : Type.Optional(hydrated);\n }\n return Type.Object(props, options);\n }\n case \"array\":\n return Type.Array(\n schema.items !== undefined ? hydrateSchema(schema.items) : Type.Unknown(),\n options,\n );\n case \"string\":\n return Type.String(options);\n case \"number\":\n return Type.Number(options);\n case \"integer\":\n return Type.Integer(options);\n case \"boolean\":\n return Type.Boolean(options);\n case \"null\":\n return Type.Null(options);\n default:\n return Type.Unknown(options);\n }\n}\n\ninterface RunSubagentOptions<TOutputSchema extends TSchema | undefined = undefined> {\n request: SubagentRunRequest<TOutputSchema>;\n defaultModel: Model<Api>;\n thinkingLevel: ThinkingLevel;\n models: MikanModels;\n workspaceDir: string;\n availableTools: AgentTool[];\n profiles?: ReadonlyMap<string, SubagentProfile>;\n /** Process-wide launch pool shared by tool and extension invocations. */\n slots?: SubagentSlotPool;\n /** Host-snapshotted parent transcript; never sourced from the public request. */\n parentMessages?: AgentMessage[];\n /** Usage attribution sink snapshotted when this invocation begins. */\n onUsage?: SubagentUsageSink;\n}\n\nfunction resolveBudget(budget: RunSubagentOptions[\"request\"][\"budget\"]) {\n const resolved = { ...DEFAULT_SUBAGENT_BUDGET, ...budget };\n const positiveIntegerFields = [\n [\"maxTurns\", resolved.maxTurns],\n [\"maxTokens\", resolved.maxTokens],\n [\"maxDurationMs\", resolved.maxDurationMs],\n ] as const;\n for (const [name, value] of positiveIntegerFields) {\n if (value !== undefined && (!Number.isInteger(value) || value <= 0)) {\n throw new Error(`api.subagent.run budget.${name} must be a positive integer`);\n }\n }\n if (!Number.isFinite(resolved.maxCostUsd) || resolved.maxCostUsd < 0) {\n throw new Error(\"api.subagent.run budget.maxCostUsd must be a non-negative number\");\n }\n return resolved;\n}\n\nfunction selectTools(requested: string[] | undefined, available: AgentTool[]): AgentTool[] {\n if (!requested || requested.length === 0) return [];\n const byName = new Map<string, AgentTool>();\n for (const tool of available) {\n if (!byName.has(tool.name)) byName.set(tool.name, tool);\n }\n const selected: AgentTool[] = [];\n for (const name of new Set(requested)) {\n const tool = byName.get(name);\n if (!tool) throw new Error(`Unknown or unavailable subagent tool: ${name}`);\n selected.push(tool);\n }\n return selected;\n}\n\n/**\n * Wrap a tool so the run can prove it was actually reached. Fields are listed\n * explicitly rather than spread: `AgentTool` is a plain interface, and a\n * structural copy would silently drop anything added to it later.\n */\nfunction witnessToolUse(tool: AgentTool, invoked: Set<string>): AgentTool {\n return {\n name: tool.name,\n label: tool.label,\n description: tool.description,\n parameters: tool.parameters,\n ...(tool.constrainedSampling !== undefined\n ? { constrainedSampling: tool.constrainedSampling }\n : {}),\n ...(tool.prepareArguments ? { prepareArguments: tool.prepareArguments.bind(tool) } : {}),\n ...(tool.executionMode ? { executionMode: tool.executionMode } : {}),\n execute: (...args: Parameters<AgentTool[\"execute\"]>) => {\n invoked.add(tool.name);\n return tool.execute(...args);\n },\n };\n}\n\nfunction formatTask(task: string, input: unknown, parentContext?: string): string {\n const trimmed = task.trim();\n if (!trimmed) throw new Error(\"api.subagent.run requires a non-empty task\");\n let formatted = trimmed;\n if (input !== undefined) {\n let serialized: string | undefined;\n try {\n serialized = JSON.stringify(input, null, 2);\n } catch (err) {\n throw new Error(\n `api.subagent.run input must be JSON-serializable: ${err instanceof Error ? err.message : String(err)}`,\n { cause: err },\n );\n }\n if (serialized === undefined)\n throw new Error(\"api.subagent.run input must be JSON-serializable\");\n formatted = `${trimmed}\\n\\nInput:\\n${serialized}`;\n }\n return parentContext ? `${parentContext}\\n\\n${formatted}` : formatted;\n}\n\nfunction messageText(message: AgentMessage): string {\n if (message.role === \"compactionSummary\" || message.role === \"branchSummary\") {\n return message.summary;\n }\n if (!(\"content\" in message)) return \"\";\n if (typeof message.content === \"string\") return message.content;\n if (!Array.isArray(message.content)) return \"\";\n return message.content\n .filter(\n (part): part is { type: \"text\"; text: string } =>\n typeof part === \"object\" && part !== null && part.type === \"text\",\n )\n .map((part) => part.text)\n .join(\"\");\n}\n\nfunction normalizedParentContext(\n request: SubagentRunRequest<TSchema | undefined>,\n messages: AgentMessage[] | undefined,\n): string | undefined {\n if (!request.parentContext || !messages) return undefined;\n const recentTurns = request.parentContext.recentTurns ?? 3;\n if (!Number.isInteger(recentTurns) || recentTurns < 1 || recentTurns > 8) {\n throw new Error(\"api.subagent.run parentContext.recentTurns must be an integer from 1 to 8\");\n }\n const conversation = messages.filter(\n (message) => (message.role === \"user\" || message.role === \"assistant\") && messageText(message),\n );\n let first = conversation.length;\n let users = 0;\n while (first > 0 && users < recentTurns) {\n first -= 1;\n if (conversation[first]?.role === \"user\") users += 1;\n }\n const recent = conversation.slice(first);\n const recentStart = recent[0] ? messages.indexOf(recent[0]) : messages.length;\n let summary: AgentMessage | undefined;\n for (let index = recentStart - 1; index >= 0; index--) {\n const message = messages[index];\n if (message?.role === \"compactionSummary\" || message?.role === \"branchSummary\") {\n summary = message;\n break;\n }\n }\n return [\n \"<parent_reference_context>\",\n summary ? `Earlier summary: ${messageText(summary)}` : \"[Earlier parent context omitted]\",\n ...recent.map(\n (message) => `${message.role === \"user\" ? \"User\" : \"Assistant\"}: ${messageText(message)}`,\n ),\n \"</parent_reference_context>\",\n ].join(\"\\n\");\n}\n\n/**\n * The evidence policy has to name the actual grant. Told to \"use granted\n * tools\" while holding none, a model will write a tool call as prose and\n * hand that text back as its answer — which then flows to dependent DAG\n * nodes as if it were a finding.\n */\nfunction groundingPolicy(toolNames: string[]): string {\n if (toolNames.length === 0) {\n return [\n \"Evidence policy:\",\n \"- You have NO tools in this run. Do not emit tool calls or tool-call syntax; they will not execute.\",\n \"- Answer only from the task text and any structured input supplied to you.\",\n \"- Never claim to have read a file, run a command, or reached a repository or URL.\",\n \"- If the task cannot be done without a tool, say so plainly and stop.\",\n ].join(\"\\n\");\n }\n return [\n \"Evidence policy:\",\n `- Your tools this run: ${toolNames.join(\", \")}. Nothing else will execute.`,\n \"- Use them for any claim about files, commands, repositories, or external state.\",\n \"- Never simulate tool output or claim a tool was used when it was not.\",\n \"- If the task requires a tool you were not granted, state that you cannot verify it instead of guessing.\",\n ].join(\"\\n\");\n}\n\nfunction buildSystemPrompt(\n base: string | undefined,\n outputSchema: TSchema | undefined,\n toolNames: string[],\n): string {\n const prompt = [base?.trim() || DEFAULT_SYSTEM_PROMPT, groundingPolicy(toolNames)].join(\"\\n\\n\");\n if (!outputSchema) return prompt;\n return [\n prompt,\n \"\",\n \"Return only one JSON value matching this JSON Schema. Do not use Markdown or code fences.\",\n JSON.stringify(outputSchema),\n ].join(\"\\n\");\n}\n\ntype SubagentRunStats = ReturnType<MikanAgentSession[\"getLastRunStats\"]>;\n\n/**\n * Every SubagentRunResult's metric fields are born here — one derivation from\n * the session's run stats, so adding a metric is one edit and no terminal\n * site can drift (the abort branch once shipped without toolCallCounts). The\n * terminal sites state only what differs: status, error, text.\n */\nfunction baseRunResult(\n runId: string,\n model: SubagentModelSpec,\n startedAt: number,\n stats?: SubagentRunStats,\n) {\n const usage = stats?.usage ?? createEmptySubagentUsage();\n return {\n runId,\n model,\n turns: stats?.llmCalls ?? 0,\n toolCalls: stats?.toolCalls ?? 0,\n toolCallCounts: stats?.toolCallCounts ?? {},\n usage,\n tokens: usage.totalTokens,\n costUsd: usage.cost.total,\n durationMs: Date.now() - startedAt,\n };\n}\n\nfunction finalAssistant(messages: AgentMessage[]): AssistantMessage | undefined {\n for (let index = messages.length - 1; index >= 0; index--) {\n const message = messages[index];\n if (message?.role === \"assistant\") return message;\n }\n return undefined;\n}\n\nfunction assistantText(message: AssistantMessage | undefined): string {\n if (!message) return \"\";\n return message.content\n .filter((part) => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\");\n}\n\n/**\n * Execute one non-recursive, fresh subagent run. Never rejects: every\n * failure — including request validation — is a result with a terminal\n * status, so batch callers (`tasks` / `dag`) can never orphan in-flight\n * sibling runs on one bad request. Usage is reported once, after the\n * underlying run settles; an aborted run may report it from detached cleanup.\n */\nexport async function runSubagent<TOutputSchema extends TSchema | undefined = undefined>(\n options: RunSubagentOptions<TOutputSchema>,\n): Promise<SubagentRunResult<SubagentRunOutput<TOutputSchema>>> {\n const execution = await executeBoundedSubagentRun(options);\n if (execution.cleanup) {\n void execution.cleanup\n .then(async (result) => {\n await reportSubagentUsage(options.onUsage, result.usage);\n })\n .catch((err) => {\n log.logWarning(\"Subagent detached cleanup failed\", String(err));\n });\n return execution.result;\n }\n await reportSubagentUsage(options.onUsage, execution.result.usage);\n return execution.result;\n}\n\nasync function reportSubagentUsage(\n onUsage: SubagentUsageSink | undefined,\n usage: SubagentUsage,\n): Promise<void> {\n try {\n await onUsage?.(copySubagentUsage(usage));\n } catch (err) {\n log.logWarning(\"Subagent onUsage listener failed\", String(err));\n }\n}\n\ntype BoundedSubagentExecution<TOutput> = {\n result: SubagentRunResult<TOutput>;\n /** Resolves after an aborted prompt settles and returns its final result. */\n cleanup?: Promise<SubagentRunResult<TOutput>>;\n};\n\nasync function executeBoundedSubagentRun<TOutputSchema extends TSchema | undefined = undefined>(\n options: RunSubagentOptions<TOutputSchema>,\n): Promise<BoundedSubagentExecution<SubagentRunOutput<TOutputSchema>>> {\n const startedAt = Date.now();\n let release: (() => void) | undefined;\n try {\n release = await (options.slots ?? unboundedSlotPool()).acquire(options.request.signal);\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") {\n const model = options.request.model ?? {\n provider: options.defaultModel.provider,\n id: options.defaultModel.id,\n };\n return {\n result: { ...baseRunResult(randomUUID(), model, startedAt), status: \"cancelled\" },\n };\n }\n throw err;\n }\n if (!release) throw new Error(\"Subagent slot acquisition returned no release handle\");\n\n try {\n const execution = await executeSubagentRun(options);\n if (!execution.cleanup) {\n release();\n release = undefined;\n return execution;\n }\n\n const cleanup = execution.cleanup;\n const heldRelease = release;\n void cleanup\n .then(\n () => heldRelease(),\n (err) => {\n log.logWarning(\"Subagent detached cleanup failed\", String(err));\n heldRelease();\n },\n )\n .catch((err) => {\n log.logWarning(\"Subagent detached release failed\", String(err));\n heldRelease();\n });\n release = undefined;\n return execution;\n } catch (err) {\n release?.();\n release = undefined;\n throw err;\n }\n}\n\nfunction noop(): void {}\n\n/**\n * Expand `request.profile` into the concrete capability set it names. Most\n * profile budgets are caps that callers may only tighten. Token budgets are\n * different: the effective allowance is the larger of the profile default and\n * the caller's request.\n */\nfunction resolveProfile<TOutputSchema extends TSchema | undefined>(\n request: SubagentRunRequest<TOutputSchema>,\n options: RunSubagentOptions<TOutputSchema>,\n): SubagentRunRequest<TOutputSchema> {\n if (!request.profile) return request;\n const profile = options.profiles?.get(request.profile);\n if (!profile) {\n const known = [...(options.profiles?.keys() ?? [])].join(\", \");\n throw new Error(\n `Unknown subagent profile: ${request.profile}${known ? ` (available: ${known})` : \"\"}`,\n );\n }\n if (request.tools || request.model || request.systemPrompt || request.thinkingLevel) {\n throw new Error(\n `Subagent profile ${request.profile} cannot be combined with tools, model, systemPrompt, or thinkingLevel`,\n );\n }\n const budget = {\n ...request.budget,\n ...(profile.maxTurns !== undefined\n ? { maxTurns: Math.min(profile.maxTurns, request.budget?.maxTurns ?? profile.maxTurns) }\n : {}),\n ...(profile.maxTokens !== undefined || request.budget?.maxTokens !== undefined\n ? { maxTokens: Math.max(profile.maxTokens ?? 0, request.budget?.maxTokens ?? 0) }\n : {}),\n ...(profile.maxCostUsd !== undefined\n ? {\n maxCostUsd: Math.min(\n profile.maxCostUsd,\n request.budget?.maxCostUsd ?? profile.maxCostUsd,\n ),\n }\n : {}),\n ...(profile.maxDurationMs !== undefined\n ? {\n maxDurationMs: Math.min(\n profile.maxDurationMs,\n request.budget?.maxDurationMs ?? profile.maxDurationMs,\n ),\n }\n : {}),\n };\n return {\n ...request,\n systemPrompt: profile.systemPrompt,\n tools: profile.tools,\n requiredTools: profile.requiredTools,\n ...(profile.model ? { model: profile.model } : {}),\n ...(profile.thinkingLevel ? { thinkingLevel: profile.thinkingLevel } : {}),\n ...(Object.keys(budget).length > 0 ? { budget } : {}),\n };\n}\n\nasync function executeSubagentRun<TOutputSchema extends TSchema | undefined = undefined>(\n options: RunSubagentOptions<TOutputSchema>,\n): Promise<BoundedSubagentExecution<SubagentRunOutput<TOutputSchema>>> {\n const request = resolveProfile(options.request, options);\n const runId = randomUUID();\n const startedAt = Date.now();\n let modelSpec: SubagentModelSpec = request.model ?? {\n provider: options.defaultModel.provider,\n id: options.defaultModel.id,\n };\n let sessionRef: MikanAgentSession | undefined;\n let terminalSignal: \"cancelled\" | \"timeout\" | undefined;\n let timeout: NodeJS.Timeout | undefined;\n let notifyAbort: () => void = noop;\n const abortRequested = new Promise<void>((resolve) => {\n notifyAbort = resolve;\n });\n const abort = (reason: \"cancelled\" | \"timeout\") => {\n if (terminalSignal) return;\n terminalSignal = reason;\n sessionRef?.abort();\n notifyAbort();\n };\n const onAbort = () => abort(\"cancelled\");\n\n try {\n if ((subagentRunDepth.getStore() ?? 0) >= 1) {\n throw new Error(\"Nested api.subagent.run calls are not allowed\");\n }\n const model = request.model\n ? options.models.resolve(request.model.provider, request.model.id)\n : options.defaultModel;\n modelSpec = { provider: model.provider, id: model.id };\n const invokedTools = new Set<string>();\n const granted = selectTools(request.tools, options.availableTools);\n const missingRequiredTools = (request.requiredTools ?? []).filter(\n (name) => !granted.some((tool) => tool.name === name),\n );\n if (missingRequiredTools.length > 0) {\n throw new Error(\n `Required subagent tools were not granted: ${missingRequiredTools.join(\", \")}`,\n );\n }\n const tools = granted.map((tool) => witnessToolUse(tool, invokedTools));\n const task = formatTask(\n request.task,\n request.input,\n normalizedParentContext(request, options.parentMessages),\n );\n const budget = resolveBudget(request.budget);\n const session = new MikanAgentSession({\n systemPrompt: buildSystemPrompt(\n request.systemPrompt,\n request.outputSchema,\n granted.map((tool) => tool.name),\n ),\n model,\n thinkingLevel: request.thinkingLevel ?? options.thinkingLevel,\n tools,\n models: options.models,\n sessionStore: SessionStore.inMemory(options.workspaceDir),\n settings: { compaction: { enabled: false } },\n });\n sessionRef = session;\n\n request.signal?.addEventListener(\"abort\", onAbort, { once: true });\n if (request.signal?.aborted) abort(\"cancelled\");\n timeout = setTimeout(() => abort(\"timeout\"), budget.maxDurationMs);\n timeout.unref();\n\n const buildResult = (\n cleanupPending = false,\n ): SubagentRunResult<SubagentRunOutput<TOutputSchema>> => {\n const stats = session.getLastRunStats();\n const assistant = finalAssistant(session.messages);\n const text = assistantText(assistant);\n const base = {\n ...baseRunResult(runId, modelSpec, startedAt, stats),\n ...(text ? { text } : {}),\n ...(cleanupPending ? { cleanupPending: true as const } : {}),\n };\n\n if (terminalSignal) {\n return {\n ...base,\n status: terminalSignal,\n ...(terminalSignal === \"timeout\"\n ? { error: `Subagent exceeded its ${budget.maxDurationMs}ms duration limit` }\n : {}),\n };\n }\n if (stats.budgetExceededReason) {\n return {\n ...base,\n status: \"budget_exceeded\",\n error: stats.budgetExceededReason,\n };\n }\n const unusedRequiredTools = (request.requiredTools ?? []).filter(\n (name) => !invokedTools.has(name),\n );\n if (unusedRequiredTools.length > 0) {\n return {\n ...base,\n status: \"failed\",\n error: `Required tool not used: ${unusedRequiredTools.join(\", \")}`,\n };\n }\n if (assistant?.stopReason === \"error\") {\n return {\n ...base,\n status: \"failed\",\n error: assistant.errorMessage || \"Subagent failed\",\n };\n }\n if (!assistant) {\n return { ...base, status: \"failed\", error: \"Subagent produced no assistant response\" };\n }\n\n if (request.outputSchema) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n return { ...base, status: \"invalid_output\", error: \"Subagent output is not valid JSON\" };\n }\n if (!Value.Check(hydrateSchema(request.outputSchema), parsed)) {\n return {\n ...base,\n status: \"invalid_output\",\n error: \"Subagent output does not match the requested schema\",\n };\n }\n return {\n ...base,\n status: \"completed\",\n output: parsed as SubagentRunOutput<TOutputSchema>,\n };\n }\n\n if (!text) {\n return { ...base, status: \"failed\", error: \"Subagent produced no text output\" };\n }\n return {\n ...base,\n status: \"completed\",\n output: text as SubagentRunOutput<TOutputSchema>,\n };\n };\n const buildFailureResult = (\n err: unknown,\n ): SubagentRunResult<SubagentRunOutput<TOutputSchema>> => ({\n ...baseRunResult(runId, modelSpec, startedAt, session.getLastRunStats()),\n status: terminalSignal ?? \"failed\",\n error: err instanceof Error ? err.message : String(err),\n });\n\n if (!terminalSignal) {\n const promptOutcome = subagentRunDepth\n .run(1, () =>\n session.prompt(task, {\n budget: {\n maxLlmCalls: budget.maxTurns,\n maxTokens: budget.maxTokens,\n maxCostUsd: budget.maxCostUsd,\n maxDurationMs: budget.maxDurationMs,\n },\n }),\n )\n .then(\n () => ({ ok: true as const }),\n (error: unknown) => ({ ok: false as const, error }),\n );\n const winner = await Promise.race([\n promptOutcome.then((outcome) => ({ type: \"settled\" as const, outcome })),\n abortRequested.then(async () => {\n let graceTimer: NodeJS.Timeout | undefined;\n const graceExpired = new Promise<\"expired\">((resolve) => {\n graceTimer = setTimeout(() => resolve(\"expired\"), SUBAGENT_ABORT_GRACE_MS);\n });\n const graceOutcome = await Promise.race([\n promptOutcome.then((settledOutcome) => ({\n type: \"settled\" as const,\n outcome: settledOutcome,\n })),\n graceExpired.then((value) => ({ type: value as \"expired\" })),\n ]);\n if (graceTimer) clearTimeout(graceTimer);\n return graceOutcome;\n }),\n ]);\n if (winner.type === \"expired\") {\n const cleanup = promptOutcome.then((settledOutcome) =>\n settledOutcome.ok ? buildResult() : buildFailureResult(settledOutcome.error),\n );\n return { result: buildResult(true), cleanup };\n }\n if (!winner.outcome.ok) throw winner.outcome.error;\n }\n\n return { result: buildResult() };\n } catch (err) {\n return {\n result: {\n ...baseRunResult(runId, modelSpec, startedAt, sessionRef?.getLastRunStats()),\n status: terminalSignal ?? \"failed\",\n error: err instanceof Error ? err.message : String(err),\n },\n };\n } finally {\n if (timeout) clearTimeout(timeout);\n request.signal?.removeEventListener(\"abort\", onAbort);\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -10,7 +10,7 @@ export { loadSubagentProfiles } from "./harness/subagent-profiles.js";
10
10
  export { DEFAULT_BUDGET_SETTINGS, DEFAULT_EVENT_BUDGET, DEFAULT_RETRY_SETTINGS, resolveHarnessSettings, } from "./harness/settings.js";
11
11
  export { buildEventPayload, EventTypeSchema, parseEventPayload } from "./harness/event-format.js";
12
12
  export { ExtensionRegistry, parseCommandInput } from "./harness/extensions/registry.js";
13
- export { EXT_ACTION_PREFIX, namespaceActionIds, parseExtActionId, } from "./harness/extensions/blockkit.js";
13
+ export { EXT_ACTION_PREFIX, namespaceActionIds, parseExtActionId, } from "./harness/extensions/registry.js";
14
14
  export { defaultExtensionDirs, extensionSlug, listInstalledExtensions, loadExtensions, validateExtension, } from "./harness/extensions/loader.js";
15
15
  export type { CreateMikanModelsOptions } from "./harness/models.js";
16
16
  export type { CompactionReason, HarnessEvent, HarnessEventListener, MikanAgentSessionOptions, PromptBlockedOutcome, } from "./harness/runner.js";
@@ -24,17 +24,17 @@ export type { BranchSummaryEntry, CompactionEntry, CustomEntry, CustomMessageEnt
24
24
  export { CURRENT_SESSION_VERSION } from "./harness/types.js";
25
25
  export { ChatHistorySync, hasMaterializedChatSession, registerThreadSession, waitForThreadSessionBootstrap, } from "./sessions/chat-history-sync.js";
26
26
  export type { ChatHistorySyncOptions, ChatSyncReport, HasMaterializedSessionOptions, RegisterThreadSessionOptions, ResetChatSessionOptions, ResolveChatSessionScopeOptions, SyncChatSessionOptions, ThreadBootstrapWaitOptions, } from "./sessions/chat-history-sync.js";
27
- export { isPlatformHistorySession } from "./sessions/metadata.js";
28
- export type { MikanSessionHeader } from "./sessions/metadata.js";
29
- export { inferConversationKind, resolveChatSessionKey } from "./sessions/policy.js";
30
- export type { ResolveSessionKeyOptions } from "./sessions/policy.js";
31
- export { createManagedSessionFile, createManagedSessionFileAtPath, createNewSessionFile, extractSessionSuffix, extractSessionUuid, getChannelSessionDir, getThreadSessionFile, openManagedSession, resolveChannelSessionFile, resolveManagedSessionFile, resolveSessionFile, tryResolveCurrentSession, tryResolveThreadSession, } from "./sessions/store.js";
27
+ export { isPlatformHistorySession } from "./sessions/store.js";
28
+ export type { MikanSessionHeader } from "./sessions/store.js";
29
+ export { inferConversationKind, resolveChatSessionKey } from "./sessions/session-key.js";
30
+ export type { ResolveSessionKeyOptions } from "./sessions/session-key.js";
31
+ export { createManagedSessionFile, createManagedSessionFileAtPath, createNewSessionFile, extractSessionSuffix, extractSessionUuid, getThreadSessionFile, openManagedSession, resolveChannelSessionFile, resolveManagedSessionFile, resolveSessionFile, tryResolveCurrentSession, tryResolveThreadSession, } from "./sessions/store.js";
32
32
  export type { ResolvedSessionScope, ThreadRootMessage } from "./sessions/store.js";
33
33
  export { createConversationRuntime, type ConversationRuntime, type ConversationRuntimeOptions, type RunSessionOptions, } from "./runtime/conversation-runtime.js";
34
34
  export { createConversationEvent, createConversationMessage } from "./adapter.js";
35
- export { createOfficeAddress, createWorkspace, officeKey } from "./office/index.js";
35
+ export { createOfficeAddress, createWorkspace, officeKey, officeSessionsDir, } from "./office/index.js";
36
36
  export type { Office, Workspace } from "./office/index.js";
37
- export type { ChatAdapter, ChatToolResult, ConversationContext, ConversationEvent, ConversationKind, ConversationMessage, ConversationResponder, MessagingBot, OfficeAddress, OfficeKey, MessagingEventHandler, MessagingInfo, RunningSession, } from "./adapter.js";
37
+ export type { ChatAdapter, ChatToolResult, ConversationContext, ConversationEvent, ConversationKind, ConversationMessage, ConversationResponder, MessagingBot, OfficeAddress, OfficeKey, MessagingEventHandler, MessagingInfo, PlatformName, RunningSession, } from "./adapter.js";
38
38
  export { SandboxError, configureGondolinRuntime, createExecutor, getSandboxAdapters, parseSandboxArg, validateSandbox, type GondolinBootstrapOptions, } from "./sandbox/index.js";
39
39
  export type { CloudflareSandboxConfig, ExecOptions, ExecResult, Executor, SandboxAdapter, SandboxConfig, } from "./sandbox/index.js";
40
40
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -11,15 +11,15 @@ export { loadSubagentProfiles } from "./harness/subagent-profiles.js";
11
11
  export { DEFAULT_BUDGET_SETTINGS, DEFAULT_EVENT_BUDGET, DEFAULT_RETRY_SETTINGS, resolveHarnessSettings, } from "./harness/settings.js";
12
12
  export { buildEventPayload, EventTypeSchema, parseEventPayload } from "./harness/event-format.js";
13
13
  export { ExtensionRegistry, parseCommandInput } from "./harness/extensions/registry.js";
14
- export { EXT_ACTION_PREFIX, namespaceActionIds, parseExtActionId, } from "./harness/extensions/blockkit.js";
14
+ export { EXT_ACTION_PREFIX, namespaceActionIds, parseExtActionId, } from "./harness/extensions/registry.js";
15
15
  export { defaultExtensionDirs, extensionSlug, listInstalledExtensions, loadExtensions, validateExtension, } from "./harness/extensions/loader.js";
16
16
  export { CURRENT_SESSION_VERSION } from "./harness/types.js";
17
17
  export { ChatHistorySync, hasMaterializedChatSession, registerThreadSession, waitForThreadSessionBootstrap, } from "./sessions/chat-history-sync.js";
18
- export { isPlatformHistorySession } from "./sessions/metadata.js";
19
- export { inferConversationKind, resolveChatSessionKey } from "./sessions/policy.js";
20
- export { createManagedSessionFile, createManagedSessionFileAtPath, createNewSessionFile, extractSessionSuffix, extractSessionUuid, getChannelSessionDir, getThreadSessionFile, openManagedSession, resolveChannelSessionFile, resolveManagedSessionFile, resolveSessionFile, tryResolveCurrentSession, tryResolveThreadSession, } from "./sessions/store.js";
18
+ export { isPlatformHistorySession } from "./sessions/store.js";
19
+ export { inferConversationKind, resolveChatSessionKey } from "./sessions/session-key.js";
20
+ export { createManagedSessionFile, createManagedSessionFileAtPath, createNewSessionFile, extractSessionSuffix, extractSessionUuid, getThreadSessionFile, openManagedSession, resolveChannelSessionFile, resolveManagedSessionFile, resolveSessionFile, tryResolveCurrentSession, tryResolveThreadSession, } from "./sessions/store.js";
21
21
  export { createConversationRuntime, } from "./runtime/conversation-runtime.js";
22
22
  export { createConversationEvent, createConversationMessage } from "./adapter.js";
23
- export { createOfficeAddress, createWorkspace, officeKey } from "./office/index.js";
23
+ export { createOfficeAddress, createWorkspace, officeKey, officeSessionsDir, } from "./office/index.js";
24
24
  export { SandboxError, configureGondolinRuntime, createExecutor, getSandboxAdapters, parseSandboxArg, validateSandbox, } from "./sandbox/index.js";
25
25
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGjF,gFAAgF;AAChF,6DAA6D;AAC7D,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACxF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AA8FxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AAWzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAEpF,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,yBAAyB,GAI1B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAiBpF,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,GAEhB,MAAM,oBAAoB,CAAC","sourcesContent":["export { defaultCommandHandlers, dispatchCommand } from \"./commands/registry.js\";\nexport type { CommandContext, CommandHandler, CommandServices } from \"./commands/types.js\";\n\n// Public harness interface. Keep this list explicit: adding an internal harness\n// helper must not silently expand the npm package interface.\nexport { FileCredentialStore, defaultAuthPath } from \"./harness/auth.js\";\nexport {\n DEFAULT_HTTP_IDLE_TIMEOUT_MS,\n configureHttpDispatcher,\n parseHttpIdleTimeoutMs,\n} from \"./harness/http.js\";\nexport { MikanModels, defaultModelsJsonPath } from \"./harness/models.js\";\nexport {\n SessionStore,\n loadSessionFileEntries,\n parseSessionFileEntries,\n} from \"./harness/session-store.js\";\nexport { MikanAgentSession } from \"./harness/runner.js\";\nexport { formatSkillsForPrompt, loadSkillsFromDir, parseFrontmatter } from \"./harness/skills.js\";\nexport { loadSubagentProfiles } from \"./harness/subagent-profiles.js\";\nexport {\n DEFAULT_BUDGET_SETTINGS,\n DEFAULT_EVENT_BUDGET,\n DEFAULT_RETRY_SETTINGS,\n resolveHarnessSettings,\n} from \"./harness/settings.js\";\nexport { buildEventPayload, EventTypeSchema, parseEventPayload } from \"./harness/event-format.js\";\nexport { ExtensionRegistry, parseCommandInput } from \"./harness/extensions/registry.js\";\nexport {\n EXT_ACTION_PREFIX,\n namespaceActionIds,\n parseExtActionId,\n} from \"./harness/extensions/blockkit.js\";\nexport {\n defaultExtensionDirs,\n extensionSlug,\n listInstalledExtensions,\n loadExtensions,\n validateExtension,\n} from \"./harness/extensions/loader.js\";\nexport type { CreateMikanModelsOptions } from \"./harness/models.js\";\nexport type {\n CompactionReason,\n HarnessEvent,\n HarnessEventListener,\n MikanAgentSessionOptions,\n PromptBlockedOutcome,\n} from \"./harness/runner.js\";\nexport type { LoadSkillsResult, MikanSkill, SkillDiagnostic } from \"./harness/skills.js\";\nexport type {\n LoadSubagentProfilesResult,\n SubagentProfileDiagnostic,\n} from \"./harness/subagent-profiles.js\";\nexport type {\n BudgetSettings,\n CompactionSettings,\n HarnessSettings,\n RetrySettings,\n} from \"./harness/settings.js\";\nexport type {\n EventConversationKind,\n EventFilePayload,\n EventPayloadInput,\n EventType,\n ImmediateEventPayload,\n OneShotEventPayload,\n PeriodicEventPayload,\n} from \"./harness/event-format.js\";\nexport type {\n ExtensionValidation,\n InstalledExtensionInfo,\n LoadExtensionsOptions,\n LoadExtensionsResult,\n} from \"./harness/extensions/loader.js\";\nexport type {\n AgentErrorHookEvent,\n BeforeAgentStartHookEvent,\n BeforeAgentStartHookResult,\n BudgetExceededHookEvent,\n ContextHookEvent,\n ContextHookResult,\n ExtensionBlockAction,\n ExtensionBlockActionHandler,\n ExtensionBlockKitMessage,\n ExtensionCommand,\n ExtensionCommandContext,\n ExtensionDisposer,\n ExtensionHostServices,\n ExtensionLoadError,\n ExtensionManifest,\n ExtensionScheduleInfo,\n ExtensionSchedulePayload,\n ExtensionScheduleSpec,\n ExtensionScheduleStore,\n LoadedExtension,\n MessageEndHookEvent,\n MessageEndHookResult,\n MikanExtensionActivate,\n MikanExtensionApi,\n MikanExtensionModule,\n MikanHookMap,\n MikanHookName,\n RunOrigin,\n SessionCompactHookEvent,\n SubagentApi,\n ToolCallHookEvent,\n ToolCallHookResult,\n ToolResultHookEvent,\n ToolResultHookResult,\n TurnEndHookEvent,\n} from \"./harness/extensions/types.js\";\nexport type {\n BranchSummaryEntry,\n CompactionEntry,\n CustomEntry,\n CustomMessageEntry,\n SessionContext,\n SessionEntry,\n SessionFileEntry,\n SessionHeader,\n SessionInfoEntry,\n SessionMessageEntry,\n SubagentModelSpec,\n SubagentParentContext,\n SubagentProfile,\n SubagentRunBudget,\n SubagentRunOutput,\n SubagentRunRequest,\n SubagentRunResult,\n SubagentRunStatus,\n SubagentUsage,\n SubagentUsageSink,\n} from \"./harness/types.js\";\nexport { CURRENT_SESSION_VERSION } from \"./harness/types.js\";\n\nexport {\n ChatHistorySync,\n hasMaterializedChatSession,\n registerThreadSession,\n waitForThreadSessionBootstrap,\n} from \"./sessions/chat-history-sync.js\";\nexport type {\n ChatHistorySyncOptions,\n ChatSyncReport,\n HasMaterializedSessionOptions,\n RegisterThreadSessionOptions,\n ResetChatSessionOptions,\n ResolveChatSessionScopeOptions,\n SyncChatSessionOptions,\n ThreadBootstrapWaitOptions,\n} from \"./sessions/chat-history-sync.js\";\nexport { isPlatformHistorySession } from \"./sessions/metadata.js\";\nexport type { MikanSessionHeader } from \"./sessions/metadata.js\";\nexport { inferConversationKind, resolveChatSessionKey } from \"./sessions/policy.js\";\nexport type { ResolveSessionKeyOptions } from \"./sessions/policy.js\";\nexport {\n createManagedSessionFile,\n createManagedSessionFileAtPath,\n createNewSessionFile,\n extractSessionSuffix,\n extractSessionUuid,\n getChannelSessionDir,\n getThreadSessionFile,\n openManagedSession,\n resolveChannelSessionFile,\n resolveManagedSessionFile,\n resolveSessionFile,\n tryResolveCurrentSession,\n tryResolveThreadSession,\n} from \"./sessions/store.js\";\nexport type { ResolvedSessionScope, ThreadRootMessage } from \"./sessions/store.js\";\nexport {\n createConversationRuntime,\n type ConversationRuntime,\n type ConversationRuntimeOptions,\n type RunSessionOptions,\n} from \"./runtime/conversation-runtime.js\";\nexport { createConversationEvent, createConversationMessage } from \"./adapter.js\";\nexport { createOfficeAddress, createWorkspace, officeKey } from \"./office/index.js\";\nexport type { Office, Workspace } from \"./office/index.js\";\nexport type {\n ChatAdapter,\n ChatToolResult,\n ConversationContext,\n ConversationEvent,\n ConversationKind,\n ConversationMessage,\n ConversationResponder,\n MessagingBot,\n OfficeAddress,\n OfficeKey,\n MessagingEventHandler,\n MessagingInfo,\n RunningSession,\n} from \"./adapter.js\";\nexport {\n SandboxError,\n configureGondolinRuntime,\n createExecutor,\n getSandboxAdapters,\n parseSandboxArg,\n validateSandbox,\n type GondolinBootstrapOptions,\n} from \"./sandbox/index.js\";\nexport type {\n CloudflareSandboxConfig,\n ExecOptions,\n ExecResult,\n Executor,\n SandboxAdapter,\n SandboxConfig,\n} from \"./sandbox/index.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGjF,gFAAgF;AAChF,6DAA6D;AAC7D,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACxF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AA8FxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AAWzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEzF,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,yBAAyB,GAI1B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAkB3B,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,GAEhB,MAAM,oBAAoB,CAAC","sourcesContent":["export { defaultCommandHandlers, dispatchCommand } from \"./commands/registry.js\";\nexport type { CommandContext, CommandHandler, CommandServices } from \"./commands/types.js\";\n\n// Public harness interface. Keep this list explicit: adding an internal harness\n// helper must not silently expand the npm package interface.\nexport { FileCredentialStore, defaultAuthPath } from \"./harness/auth.js\";\nexport {\n DEFAULT_HTTP_IDLE_TIMEOUT_MS,\n configureHttpDispatcher,\n parseHttpIdleTimeoutMs,\n} from \"./harness/http.js\";\nexport { MikanModels, defaultModelsJsonPath } from \"./harness/models.js\";\nexport {\n SessionStore,\n loadSessionFileEntries,\n parseSessionFileEntries,\n} from \"./harness/session-store.js\";\nexport { MikanAgentSession } from \"./harness/runner.js\";\nexport { formatSkillsForPrompt, loadSkillsFromDir, parseFrontmatter } from \"./harness/skills.js\";\nexport { loadSubagentProfiles } from \"./harness/subagent-profiles.js\";\nexport {\n DEFAULT_BUDGET_SETTINGS,\n DEFAULT_EVENT_BUDGET,\n DEFAULT_RETRY_SETTINGS,\n resolveHarnessSettings,\n} from \"./harness/settings.js\";\nexport { buildEventPayload, EventTypeSchema, parseEventPayload } from \"./harness/event-format.js\";\nexport { ExtensionRegistry, parseCommandInput } from \"./harness/extensions/registry.js\";\nexport {\n EXT_ACTION_PREFIX,\n namespaceActionIds,\n parseExtActionId,\n} from \"./harness/extensions/registry.js\";\nexport {\n defaultExtensionDirs,\n extensionSlug,\n listInstalledExtensions,\n loadExtensions,\n validateExtension,\n} from \"./harness/extensions/loader.js\";\nexport type { CreateMikanModelsOptions } from \"./harness/models.js\";\nexport type {\n CompactionReason,\n HarnessEvent,\n HarnessEventListener,\n MikanAgentSessionOptions,\n PromptBlockedOutcome,\n} from \"./harness/runner.js\";\nexport type { LoadSkillsResult, MikanSkill, SkillDiagnostic } from \"./harness/skills.js\";\nexport type {\n LoadSubagentProfilesResult,\n SubagentProfileDiagnostic,\n} from \"./harness/subagent-profiles.js\";\nexport type {\n BudgetSettings,\n CompactionSettings,\n HarnessSettings,\n RetrySettings,\n} from \"./harness/settings.js\";\nexport type {\n EventConversationKind,\n EventFilePayload,\n EventPayloadInput,\n EventType,\n ImmediateEventPayload,\n OneShotEventPayload,\n PeriodicEventPayload,\n} from \"./harness/event-format.js\";\nexport type {\n ExtensionValidation,\n InstalledExtensionInfo,\n LoadExtensionsOptions,\n LoadExtensionsResult,\n} from \"./harness/extensions/loader.js\";\nexport type {\n AgentErrorHookEvent,\n BeforeAgentStartHookEvent,\n BeforeAgentStartHookResult,\n BudgetExceededHookEvent,\n ContextHookEvent,\n ContextHookResult,\n ExtensionBlockAction,\n ExtensionBlockActionHandler,\n ExtensionBlockKitMessage,\n ExtensionCommand,\n ExtensionCommandContext,\n ExtensionDisposer,\n ExtensionHostServices,\n ExtensionLoadError,\n ExtensionManifest,\n ExtensionScheduleInfo,\n ExtensionSchedulePayload,\n ExtensionScheduleSpec,\n ExtensionScheduleStore,\n LoadedExtension,\n MessageEndHookEvent,\n MessageEndHookResult,\n MikanExtensionActivate,\n MikanExtensionApi,\n MikanExtensionModule,\n MikanHookMap,\n MikanHookName,\n RunOrigin,\n SessionCompactHookEvent,\n SubagentApi,\n ToolCallHookEvent,\n ToolCallHookResult,\n ToolResultHookEvent,\n ToolResultHookResult,\n TurnEndHookEvent,\n} from \"./harness/extensions/types.js\";\nexport type {\n BranchSummaryEntry,\n CompactionEntry,\n CustomEntry,\n CustomMessageEntry,\n SessionContext,\n SessionEntry,\n SessionFileEntry,\n SessionHeader,\n SessionInfoEntry,\n SessionMessageEntry,\n SubagentModelSpec,\n SubagentParentContext,\n SubagentProfile,\n SubagentRunBudget,\n SubagentRunOutput,\n SubagentRunRequest,\n SubagentRunResult,\n SubagentRunStatus,\n SubagentUsage,\n SubagentUsageSink,\n} from \"./harness/types.js\";\nexport { CURRENT_SESSION_VERSION } from \"./harness/types.js\";\n\nexport {\n ChatHistorySync,\n hasMaterializedChatSession,\n registerThreadSession,\n waitForThreadSessionBootstrap,\n} from \"./sessions/chat-history-sync.js\";\nexport type {\n ChatHistorySyncOptions,\n ChatSyncReport,\n HasMaterializedSessionOptions,\n RegisterThreadSessionOptions,\n ResetChatSessionOptions,\n ResolveChatSessionScopeOptions,\n SyncChatSessionOptions,\n ThreadBootstrapWaitOptions,\n} from \"./sessions/chat-history-sync.js\";\nexport { isPlatformHistorySession } from \"./sessions/store.js\";\nexport type { MikanSessionHeader } from \"./sessions/store.js\";\nexport { inferConversationKind, resolveChatSessionKey } from \"./sessions/session-key.js\";\nexport type { ResolveSessionKeyOptions } from \"./sessions/session-key.js\";\nexport {\n createManagedSessionFile,\n createManagedSessionFileAtPath,\n createNewSessionFile,\n extractSessionSuffix,\n extractSessionUuid,\n getThreadSessionFile,\n openManagedSession,\n resolveChannelSessionFile,\n resolveManagedSessionFile,\n resolveSessionFile,\n tryResolveCurrentSession,\n tryResolveThreadSession,\n} from \"./sessions/store.js\";\nexport type { ResolvedSessionScope, ThreadRootMessage } from \"./sessions/store.js\";\nexport {\n createConversationRuntime,\n type ConversationRuntime,\n type ConversationRuntimeOptions,\n type RunSessionOptions,\n} from \"./runtime/conversation-runtime.js\";\nexport { createConversationEvent, createConversationMessage } from \"./adapter.js\";\nexport {\n createOfficeAddress,\n createWorkspace,\n officeKey,\n officeSessionsDir,\n} from \"./office/index.js\";\nexport type { Office, Workspace } from \"./office/index.js\";\nexport type {\n ChatAdapter,\n ChatToolResult,\n ConversationContext,\n ConversationEvent,\n ConversationKind,\n ConversationMessage,\n ConversationResponder,\n MessagingBot,\n OfficeAddress,\n OfficeKey,\n MessagingEventHandler,\n MessagingInfo,\n PlatformName,\n RunningSession,\n} from \"./adapter.js\";\nexport {\n SandboxError,\n configureGondolinRuntime,\n createExecutor,\n getSandboxAdapters,\n parseSandboxArg,\n validateSandbox,\n type GondolinBootstrapOptions,\n} from \"./sandbox/index.js\";\nexport type {\n CloudflareSandboxConfig,\n ExecOptions,\n ExecResult,\n Executor,\n SandboxAdapter,\n SandboxConfig,\n} from \"./sandbox/index.js\";\n"]}
package/dist/main.js CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import "./observability/instrument.js";
3
- import { join } from "path";
4
- import { mkdirSync, statSync, writeFileSync } from "fs";
5
- import { fileURLToPath } from "url";
6
- import { dirname, join as pathJoin } from "path";
3
+ import { join } from "node:path";
4
+ import { mkdirSync, statSync, writeFileSync } from "node:fs";
5
+ import { fileURLToPath } from "node:url";
6
+ import { dirname, join as pathJoin } from "node:path";
7
7
  import { DiscordMessagingBot } from "./adapters/discord/bot.js";
8
8
  import { GithubMessagingBot } from "./adapters/github/bot.js";
9
9
  import { createGithubToolPack } from "./adapters/github/tool-pack.js";
@@ -13,6 +13,7 @@ import { SlackMessagingBot as SlackMessagingBotClass } from "./adapters/slack/bo
13
13
  import { createSlackToolPack } from "./adapters/slack/tool-pack.js";
14
14
  import { downloadChannel } from "./cli/download.js";
15
15
  import { EventsWatcher } from "./events.js";
16
+ import { ExtensionCallbackScheduler } from "./extension-schedules.js";
16
17
  import * as log from "./log.js";
17
18
  import { startWebServer } from "./web/server.js";
18
19
  import { InMemoryAdminTokenStore } from "./web/admin/store.js";
@@ -21,8 +22,8 @@ import { InMemorySessionViewTokenStore } from "./web/session-view/store.js";
21
22
  import { DockerContainerManager } from "./provisioner.js";
22
23
  import { assertStateDirOutsideWorkspace, createGlobalSettingsFile, loadGlobalSettings, MissingGlobalSettingsError, resolveLinkBaseUrl, } from "./config.js";
23
24
  import { configureHttpDispatcher, defaultAuthPath, defaultModelsJsonPath, parseHttpIdleTimeoutMs, } from "./harness/index.js";
24
- import { existsSync, readFileSync } from "fs";
25
- import { readEnv, setEnvAliases } from "./utils/env.js";
25
+ import { existsSync, readFileSync } from "node:fs";
26
+ import { readEnv, setEnvAliases } from "./env-manifest.js";
26
27
  import { ensureDirExists, isRecord, readJsonFileIfExists } from "./utils/file-guards.js";
27
28
  import { SandboxError, validateSandbox } from "./sandbox/index.js";
28
29
  import { helpText, resolveBoot } from "./cli/boot.js";
@@ -370,10 +371,45 @@ function resolvePlatformBot(op, platform) {
370
371
  return [key, bot];
371
372
  }
372
373
  /** Extension `api.notify` backend: post into a conversation without a run. */
373
- const platformNotifier = async (conversationId, text, platform) => {
374
- const [key, bot] = resolvePlatformBot("notify", platform);
375
- await bot.postMessage(conversationId, text);
374
+ const platformNotifier = async (conversationId, text, options) => {
375
+ const [key, bot] = resolvePlatformBot("notify", options?.platform);
376
+ let messageTs;
377
+ if (options?.threadTs) {
378
+ if (!bot.postInThread) {
379
+ throw new Error(`notify: platform '${key}' does not support threaded posts`);
380
+ }
381
+ messageTs = await bot.postInThread(conversationId, options.threadTs, text);
382
+ }
383
+ else {
384
+ messageTs = await bot.postMessage(conversationId, text);
385
+ }
376
386
  log.logInfo(`[notify] posted to ${key}/${conversationId} (${text.length} chars)`);
387
+ return messageTs;
388
+ };
389
+ /** Extension `api.openDm` backend: resolve a user's DM conversation id. */
390
+ const platformDmOpener = async (userId, platform) => {
391
+ const [key, bot] = resolvePlatformBot("openDm", platform);
392
+ if (!bot.openDirectConversation) {
393
+ throw new Error(`openDm: platform '${key}' does not support opening direct messages`);
394
+ }
395
+ return bot.openDirectConversation(userId);
396
+ };
397
+ /** Extension `api.fetchHistory` backend: read recent conversation messages. */
398
+ const platformHistoryFetcher = async (conversationId, options) => {
399
+ const [key, bot] = resolvePlatformBot("fetchHistory", options?.platform);
400
+ if (!bot.fetchHistory) {
401
+ throw new Error(`fetchHistory: platform '${key}' does not support history reads`);
402
+ }
403
+ const { platform: _platform, ...historyOptions } = options ?? {};
404
+ return bot.fetchHistory(conversationId, historyOptions);
405
+ };
406
+ /** Extension `api.listUsers` backend: list the workspace's active users. */
407
+ const platformUserLister = async (platform) => {
408
+ const [key, bot] = resolvePlatformBot("listUsers", platform);
409
+ if (!bot.listUsers) {
410
+ throw new Error(`listUsers: platform '${key}' does not support user listings`);
411
+ }
412
+ return bot.listUsers();
377
413
  };
378
414
  /** Extension `api.react` backend: add a reaction to a message. */
379
415
  const platformReactor = async (conversationId, messageTs, emoji, platform) => {
@@ -469,6 +505,13 @@ function buildPlatformToolPackFactories() {
469
505
  factories.push(() => createGithubToolPack(platformGithubOps));
470
506
  return factories;
471
507
  }
508
+ // Host-authoritative engine for extension callback schedules. Dispatch routes
509
+ // through the runtime so fires run against the conversation's activated
510
+ // extensions; created before the runtime, wired after (mutual reference).
511
+ const extensionScheduleEngine = new ExtensionCallbackScheduler({
512
+ stateDir,
513
+ dispatch: (fire) => handler.handleExtensionScheduleCallback(fire),
514
+ });
472
515
  const handler = createConversationRuntime({
473
516
  workspace,
474
517
  sandbox,
@@ -483,6 +526,10 @@ const handler = createConversationRuntime({
483
526
  platformReactor,
484
527
  platformUploader,
485
528
  platformBlockKit,
529
+ platformDmOpener,
530
+ platformHistoryFetcher,
531
+ platformUserLister,
532
+ extensionScheduleEngine,
486
533
  platformToolPackFactories: buildPlatformToolPackFactories(),
487
534
  });
488
535
  const sandboxDesc = sandbox.type === "host"
@@ -627,10 +674,12 @@ if (slackMessagingBot) {
627
674
  slackMessagingBot.setEventsWatcher(eventsWatcher);
628
675
  }
629
676
  eventsWatcher.start();
677
+ extensionScheduleEngine.start();
630
678
  // Handle shutdown
631
679
  async function shutdown() {
632
680
  await handler.shutdown();
633
681
  eventsWatcher.stop();
682
+ extensionScheduleEngine.stop();
634
683
  await stopAllGondolinRuntimes();
635
684
  await Sentry.close(5000);
636
685
  process.exit(0);