@geminixiang/mikan 1.0.0-beta.4 → 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 (639) hide show
  1. package/CHANGELOG.md +688 -0
  2. package/README.md +99 -36
  3. package/dist/adapter.d.ts +11 -1
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +18 -1
  6. package/dist/adapter.js.map +1 -1
  7. package/dist/adapters/discord/bot.d.ts +6 -7
  8. package/dist/adapters/discord/bot.d.ts.map +1 -1
  9. package/dist/adapters/discord/bot.js +82 -117
  10. package/dist/adapters/discord/bot.js.map +1 -1
  11. package/dist/adapters/discord/context.d.ts +3 -1
  12. package/dist/adapters/discord/context.d.ts.map +1 -1
  13. package/dist/adapters/discord/context.js +54 -215
  14. package/dist/adapters/discord/context.js.map +1 -1
  15. package/dist/adapters/github/bot.d.ts +89 -0
  16. package/dist/adapters/github/bot.d.ts.map +1 -0
  17. package/dist/adapters/github/bot.js +653 -0
  18. package/dist/adapters/github/bot.js.map +1 -0
  19. package/dist/adapters/github/client.d.ts +122 -0
  20. package/dist/adapters/github/client.d.ts.map +1 -0
  21. package/dist/adapters/github/client.js +314 -0
  22. package/dist/adapters/github/client.js.map +1 -0
  23. package/dist/adapters/github/cloudbuild.d.ts +19 -0
  24. package/dist/adapters/github/cloudbuild.d.ts.map +1 -0
  25. package/dist/adapters/github/cloudbuild.js +71 -0
  26. package/dist/adapters/github/cloudbuild.js.map +1 -0
  27. package/dist/adapters/github/context.d.ts +12 -0
  28. package/dist/adapters/github/context.d.ts.map +1 -0
  29. package/dist/adapters/github/context.js +101 -0
  30. package/dist/adapters/github/context.js.map +1 -0
  31. package/dist/adapters/github/gcp-auth.d.ts +28 -0
  32. package/dist/adapters/github/gcp-auth.d.ts.map +1 -0
  33. package/dist/adapters/github/gcp-auth.js +196 -0
  34. package/dist/adapters/github/gcp-auth.js.map +1 -0
  35. package/dist/adapters/github/github-ops.d.ts +91 -0
  36. package/dist/adapters/github/github-ops.d.ts.map +1 -0
  37. package/dist/adapters/github/github-ops.js +406 -0
  38. package/dist/adapters/github/github-ops.js.map +1 -0
  39. package/dist/adapters/github/ids.d.ts +34 -0
  40. package/dist/adapters/github/ids.d.ts.map +1 -0
  41. package/dist/adapters/github/ids.js +57 -0
  42. package/dist/adapters/github/ids.js.map +1 -0
  43. package/dist/adapters/github/repo.d.ts +33 -0
  44. package/dist/adapters/github/repo.d.ts.map +1 -0
  45. package/dist/adapters/github/repo.js +141 -0
  46. package/dist/adapters/github/repo.js.map +1 -0
  47. package/dist/adapters/github/tool-pack.d.ts +14 -0
  48. package/dist/adapters/github/tool-pack.d.ts.map +1 -0
  49. package/dist/adapters/github/tool-pack.js +56 -0
  50. package/dist/adapters/github/tool-pack.js.map +1 -0
  51. package/dist/adapters/github/tools/checks.d.ts +19 -0
  52. package/dist/adapters/github/tools/checks.d.ts.map +1 -0
  53. package/dist/adapters/github/tools/checks.js +105 -0
  54. package/dist/adapters/github/tools/checks.js.map +1 -0
  55. package/dist/adapters/github/tools/issue.d.ts +21 -0
  56. package/dist/adapters/github/tools/issue.d.ts.map +1 -0
  57. package/dist/adapters/github/tools/issue.js +48 -0
  58. package/dist/adapters/github/tools/issue.js.map +1 -0
  59. package/dist/adapters/github/tools/pr.d.ts +22 -0
  60. package/dist/adapters/github/tools/pr.d.ts.map +1 -0
  61. package/dist/adapters/github/tools/pr.js +48 -0
  62. package/dist/adapters/github/tools/pr.js.map +1 -0
  63. package/dist/adapters/github/tools/read.d.ts +21 -0
  64. package/dist/adapters/github/tools/read.d.ts.map +1 -0
  65. package/dist/adapters/github/tools/read.js +141 -0
  66. package/dist/adapters/github/tools/read.js.map +1 -0
  67. package/dist/adapters/github/tools/review-reply.d.ts +17 -0
  68. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
  69. package/dist/adapters/github/tools/review-reply.js +38 -0
  70. package/dist/adapters/github/tools/review-reply.js.map +1 -0
  71. package/dist/adapters/github/tools/sync.d.ts +17 -0
  72. package/dist/adapters/github/tools/sync.d.ts.map +1 -0
  73. package/dist/adapters/github/tools/sync.js +34 -0
  74. package/dist/adapters/github/tools/sync.js.map +1 -0
  75. package/dist/adapters/github/types.d.ts +373 -0
  76. package/dist/adapters/github/types.d.ts.map +1 -0
  77. package/dist/adapters/github/types.js +2 -0
  78. package/dist/adapters/github/types.js.map +1 -0
  79. package/dist/adapters/intake.d.ts +16 -5
  80. package/dist/adapters/intake.d.ts.map +1 -1
  81. package/dist/adapters/intake.js +86 -23
  82. package/dist/adapters/intake.js.map +1 -1
  83. package/dist/adapters/progressive-renderer.d.ts +7 -0
  84. package/dist/adapters/progressive-renderer.d.ts.map +1 -0
  85. package/dist/adapters/progressive-renderer.js +383 -0
  86. package/dist/adapters/progressive-renderer.js.map +1 -0
  87. package/dist/adapters/shared.d.ts +23 -10
  88. package/dist/adapters/shared.d.ts.map +1 -1
  89. package/dist/adapters/shared.js +60 -22
  90. package/dist/adapters/shared.js.map +1 -1
  91. package/dist/adapters/slack/blocks.d.ts +14 -0
  92. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  93. package/dist/adapters/slack/blocks.js +147 -111
  94. package/dist/adapters/slack/blocks.js.map +1 -1
  95. package/dist/adapters/slack/bot.d.ts +43 -13
  96. package/dist/adapters/slack/bot.d.ts.map +1 -1
  97. package/dist/adapters/slack/bot.js +385 -207
  98. package/dist/adapters/slack/bot.js.map +1 -1
  99. package/dist/adapters/slack/context.d.ts +3 -1
  100. package/dist/adapters/slack/context.d.ts.map +1 -1
  101. package/dist/adapters/slack/context.js +11 -17
  102. package/dist/adapters/slack/context.js.map +1 -1
  103. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  104. package/dist/adapters/slack/response-lifecycle.js +126 -323
  105. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  106. package/dist/adapters/slack/session.d.ts.map +1 -1
  107. package/dist/adapters/slack/session.js +7 -11
  108. package/dist/adapters/slack/session.js.map +1 -1
  109. package/dist/adapters/slack/tool-pack.d.ts +11 -0
  110. package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
  111. package/dist/adapters/slack/tool-pack.js +45 -0
  112. package/dist/adapters/slack/tool-pack.js.map +1 -0
  113. package/dist/adapters/slack/tools/attach.js +1 -1
  114. package/dist/adapters/slack/tools/attach.js.map +1 -1
  115. package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
  116. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
  117. package/dist/adapters/slack/tools/blockkit.js +106 -0
  118. package/dist/adapters/slack/tools/blockkit.js.map +1 -0
  119. package/dist/adapters/slack/types.d.ts +40 -2
  120. package/dist/adapters/slack/types.d.ts.map +1 -1
  121. package/dist/adapters/slack/types.js.map +1 -1
  122. package/dist/adapters/telegram/bot.d.ts +8 -9
  123. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  124. package/dist/adapters/telegram/bot.js +90 -117
  125. package/dist/adapters/telegram/bot.js.map +1 -1
  126. package/dist/adapters/telegram/context.d.ts +2 -0
  127. package/dist/adapters/telegram/context.d.ts.map +1 -1
  128. package/dist/adapters/telegram/context.js +61 -184
  129. package/dist/adapters/telegram/context.js.map +1 -1
  130. package/dist/adapters/telegram/html.d.ts.map +1 -1
  131. package/dist/adapters/telegram/html.js +10 -7
  132. package/dist/adapters/telegram/html.js.map +1 -1
  133. package/dist/adapters/types.d.ts +109 -12
  134. package/dist/adapters/types.d.ts.map +1 -1
  135. package/dist/adapters/types.js.map +1 -1
  136. package/dist/agent-events.d.ts +3 -2
  137. package/dist/agent-events.d.ts.map +1 -1
  138. package/dist/agent-events.js +19 -1
  139. package/dist/agent-events.js.map +1 -1
  140. package/dist/agent.d.ts +14 -19
  141. package/dist/agent.d.ts.map +1 -1
  142. package/dist/agent.js +840 -298
  143. package/dist/agent.js.map +1 -1
  144. package/dist/cli/arg-grammar.d.ts +25 -0
  145. package/dist/cli/arg-grammar.d.ts.map +1 -0
  146. package/dist/cli/arg-grammar.js +61 -0
  147. package/dist/cli/arg-grammar.js.map +1 -0
  148. package/dist/cli/boot.d.ts +5 -0
  149. package/dist/cli/boot.d.ts.map +1 -0
  150. package/dist/cli/boot.js +117 -0
  151. package/dist/cli/boot.js.map +1 -0
  152. package/dist/cli/download.d.ts.map +1 -0
  153. package/dist/{download.js → cli/download.js} +2 -0
  154. package/dist/cli/download.js.map +1 -0
  155. package/dist/cli/ext-dev.d.ts +2 -0
  156. package/dist/cli/ext-dev.d.ts.map +1 -0
  157. package/dist/cli/ext-dev.js +188 -0
  158. package/dist/cli/ext-dev.js.map +1 -0
  159. package/dist/cli/ext.d.ts +2 -0
  160. package/dist/cli/ext.d.ts.map +1 -0
  161. package/dist/cli/ext.js +324 -0
  162. package/dist/cli/ext.js.map +1 -0
  163. package/dist/cli/office.d.ts +2 -0
  164. package/dist/cli/office.d.ts.map +1 -0
  165. package/dist/cli/office.js +91 -0
  166. package/dist/cli/office.js.map +1 -0
  167. package/dist/cli/types.d.ts +16 -0
  168. package/dist/cli/types.d.ts.map +1 -0
  169. package/dist/cli/types.js +2 -0
  170. package/dist/cli/types.js.map +1 -0
  171. package/dist/commands/admin.d.ts.map +1 -1
  172. package/dist/commands/admin.js +3 -2
  173. package/dist/commands/admin.js.map +1 -1
  174. package/dist/commands/auto-reply.d.ts.map +1 -1
  175. package/dist/commands/auto-reply.js +5 -9
  176. package/dist/commands/auto-reply.js.map +1 -1
  177. package/dist/commands/extensions.d.ts.map +1 -1
  178. package/dist/commands/extensions.js +9 -6
  179. package/dist/commands/extensions.js.map +1 -1
  180. package/dist/commands/login.d.ts +2 -1
  181. package/dist/commands/login.d.ts.map +1 -1
  182. package/dist/commands/login.js +40 -5
  183. package/dist/commands/login.js.map +1 -1
  184. package/dist/commands/manifest.d.ts +37 -0
  185. package/dist/commands/manifest.d.ts.map +1 -0
  186. package/dist/commands/manifest.js +151 -0
  187. package/dist/commands/manifest.js.map +1 -0
  188. package/dist/commands/model.d.ts +2 -3
  189. package/dist/commands/model.d.ts.map +1 -1
  190. package/dist/commands/model.js +63 -24
  191. package/dist/commands/model.js.map +1 -1
  192. package/dist/commands/new.d.ts.map +1 -1
  193. package/dist/commands/new.js +15 -3
  194. package/dist/commands/new.js.map +1 -1
  195. package/dist/commands/registry.d.ts +2 -2
  196. package/dist/commands/registry.d.ts.map +1 -1
  197. package/dist/commands/registry.js +1 -2
  198. package/dist/commands/registry.js.map +1 -1
  199. package/dist/commands/sandbox.d.ts.map +1 -1
  200. package/dist/commands/sandbox.js +83 -33
  201. package/dist/commands/sandbox.js.map +1 -1
  202. package/dist/commands/session-view.d.ts.map +1 -1
  203. package/dist/commands/session-view.js +6 -3
  204. package/dist/commands/session-view.js.map +1 -1
  205. package/dist/commands/types.d.ts +79 -7
  206. package/dist/commands/types.d.ts.map +1 -1
  207. package/dist/commands/types.js.map +1 -1
  208. package/dist/config.d.ts +23 -8
  209. package/dist/config.d.ts.map +1 -1
  210. package/dist/config.js +222 -135
  211. package/dist/config.js.map +1 -1
  212. package/dist/env-manifest.d.ts +30 -0
  213. package/dist/env-manifest.d.ts.map +1 -0
  214. package/dist/env-manifest.js +229 -0
  215. package/dist/env-manifest.js.map +1 -0
  216. package/dist/events.d.ts.map +1 -1
  217. package/dist/events.js +20 -81
  218. package/dist/events.js.map +1 -1
  219. package/dist/execution-resolver.d.ts +7 -8
  220. package/dist/execution-resolver.d.ts.map +1 -1
  221. package/dist/execution-resolver.js +106 -110
  222. package/dist/execution-resolver.js.map +1 -1
  223. package/dist/extension-schedules.d.ts +31 -0
  224. package/dist/extension-schedules.d.ts.map +1 -0
  225. package/dist/extension-schedules.js +229 -0
  226. package/dist/extension-schedules.js.map +1 -0
  227. package/dist/harness/auth.d.ts +2 -1
  228. package/dist/harness/auth.d.ts.map +1 -1
  229. package/dist/harness/auth.js +11 -5
  230. package/dist/harness/auth.js.map +1 -1
  231. package/dist/harness/event-format.d.ts +27 -0
  232. package/dist/harness/event-format.d.ts.map +1 -0
  233. package/dist/harness/event-format.js +160 -0
  234. package/dist/harness/event-format.js.map +1 -0
  235. package/dist/harness/extensions/loader.d.ts +27 -49
  236. package/dist/harness/extensions/loader.d.ts.map +1 -1
  237. package/dist/harness/extensions/loader.js +486 -130
  238. package/dist/harness/extensions/loader.js.map +1 -1
  239. package/dist/harness/extensions/registry.d.ts +107 -2
  240. package/dist/harness/extensions/registry.d.ts.map +1 -1
  241. package/dist/harness/extensions/registry.js +316 -0
  242. package/dist/harness/extensions/registry.js.map +1 -1
  243. package/dist/harness/extensions/types.d.ts +482 -42
  244. package/dist/harness/extensions/types.d.ts.map +1 -1
  245. package/dist/harness/extensions/types.js.map +1 -1
  246. package/dist/harness/index.d.ts +18 -8
  247. package/dist/harness/index.d.ts.map +1 -1
  248. package/dist/harness/index.js +7 -4
  249. package/dist/harness/index.js.map +1 -1
  250. package/dist/harness/models.d.ts +7 -4
  251. package/dist/harness/models.d.ts.map +1 -1
  252. package/dist/harness/models.js +46 -24
  253. package/dist/harness/models.js.map +1 -1
  254. package/dist/harness/runner.d.ts +50 -54
  255. package/dist/harness/runner.d.ts.map +1 -1
  256. package/dist/harness/runner.js +232 -46
  257. package/dist/harness/runner.js.map +1 -1
  258. package/dist/harness/session-store.d.ts +11 -5
  259. package/dist/harness/session-store.d.ts.map +1 -1
  260. package/dist/harness/session-store.js +141 -36
  261. package/dist/harness/session-store.js.map +1 -1
  262. package/dist/harness/settings.d.ts +2 -20
  263. package/dist/harness/settings.d.ts.map +1 -1
  264. package/dist/harness/settings.js +12 -1
  265. package/dist/harness/settings.js.map +1 -1
  266. package/dist/harness/skills.d.ts +10 -29
  267. package/dist/harness/skills.d.ts.map +1 -1
  268. package/dist/harness/skills.js +48 -6
  269. package/dist/harness/skills.js.map +1 -1
  270. package/dist/harness/subagent-profiles.d.ts +8 -0
  271. package/dist/harness/subagent-profiles.d.ts.map +1 -0
  272. package/dist/harness/subagent-profiles.js +299 -0
  273. package/dist/harness/subagent-profiles.js.map +1 -0
  274. package/dist/harness/subagent-runner.d.ts +39 -0
  275. package/dist/harness/subagent-runner.d.ts.map +1 -0
  276. package/dist/harness/subagent-runner.js +617 -0
  277. package/dist/harness/subagent-runner.js.map +1 -0
  278. package/dist/harness/types.d.ts +267 -1
  279. package/dist/harness/types.d.ts.map +1 -1
  280. package/dist/harness/types.js.map +1 -1
  281. package/dist/harness/usage.d.ts +6 -0
  282. package/dist/harness/usage.d.ts.map +1 -0
  283. package/dist/harness/usage.js +32 -0
  284. package/dist/harness/usage.js.map +1 -0
  285. package/dist/index.d.ts +36 -8
  286. package/dist/index.d.ts.map +1 -1
  287. package/dist/index.js +22 -6
  288. package/dist/index.js.map +1 -1
  289. package/dist/main.js +391 -127
  290. package/dist/main.js.map +1 -1
  291. package/dist/observability/instrument.js +7 -5
  292. package/dist/observability/instrument.js.map +1 -1
  293. package/dist/observability/sentry.d.ts +2 -0
  294. package/dist/observability/sentry.d.ts.map +1 -1
  295. package/dist/observability/sentry.js +10 -2
  296. package/dist/observability/sentry.js.map +1 -1
  297. package/dist/office/address.d.ts +31 -0
  298. package/dist/office/address.d.ts.map +1 -0
  299. package/dist/office/address.js +113 -0
  300. package/dist/office/address.js.map +1 -0
  301. package/dist/office/index.d.ts +11 -0
  302. package/dist/office/index.d.ts.map +1 -0
  303. package/dist/office/index.js +11 -0
  304. package/dist/office/index.js.map +1 -0
  305. package/dist/office/layout.d.ts +27 -0
  306. package/dist/office/layout.d.ts.map +1 -0
  307. package/dist/office/layout.js +97 -0
  308. package/dist/office/layout.js.map +1 -0
  309. package/dist/office/migration.d.ts +44 -0
  310. package/dist/office/migration.d.ts.map +1 -0
  311. package/dist/office/migration.js +255 -0
  312. package/dist/office/migration.js.map +1 -0
  313. package/dist/office/registry.d.ts +75 -0
  314. package/dist/office/registry.d.ts.map +1 -0
  315. package/dist/office/registry.js +646 -0
  316. package/dist/office/registry.js.map +1 -0
  317. package/dist/office/types.d.ts +71 -0
  318. package/dist/office/types.d.ts.map +1 -0
  319. package/dist/office/types.js +2 -0
  320. package/dist/office/types.js.map +1 -0
  321. package/dist/packages/admin.d.ts +17 -0
  322. package/dist/packages/admin.d.ts.map +1 -0
  323. package/dist/packages/admin.js +98 -0
  324. package/dist/packages/admin.js.map +1 -0
  325. package/dist/packages/index.d.ts +6 -0
  326. package/dist/packages/index.d.ts.map +1 -0
  327. package/dist/packages/index.js +6 -0
  328. package/dist/packages/index.js.map +1 -0
  329. package/dist/packages/inspect.d.ts +11 -0
  330. package/dist/packages/inspect.d.ts.map +1 -0
  331. package/dist/packages/inspect.js +98 -0
  332. package/dist/packages/inspect.js.map +1 -0
  333. package/dist/packages/materialize.d.ts +40 -0
  334. package/dist/packages/materialize.d.ts.map +1 -0
  335. package/dist/packages/materialize.js +297 -0
  336. package/dist/packages/materialize.js.map +1 -0
  337. package/dist/packages/resolve.d.ts +25 -0
  338. package/dist/packages/resolve.d.ts.map +1 -0
  339. package/dist/packages/resolve.js +208 -0
  340. package/dist/packages/resolve.js.map +1 -0
  341. package/dist/packages/source.d.ts +39 -0
  342. package/dist/packages/source.d.ts.map +1 -0
  343. package/dist/packages/source.js +189 -0
  344. package/dist/packages/source.js.map +1 -0
  345. package/dist/packages/types.d.ts +104 -0
  346. package/dist/packages/types.d.ts.map +1 -0
  347. package/dist/packages/types.js +2 -0
  348. package/dist/packages/types.js.map +1 -0
  349. package/dist/provisioner.d.ts +66 -0
  350. package/dist/provisioner.d.ts.map +1 -1
  351. package/dist/provisioner.js +335 -13
  352. package/dist/provisioner.js.map +1 -1
  353. package/dist/runtime/conversation-runtime.d.ts +1 -1
  354. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  355. package/dist/runtime/conversation-runtime.js +562 -118
  356. package/dist/runtime/conversation-runtime.js.map +1 -1
  357. package/dist/runtime/session-lifecycle.d.ts +38 -0
  358. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  359. package/dist/runtime/session-lifecycle.js +193 -0
  360. package/dist/runtime/session-lifecycle.js.map +1 -0
  361. package/dist/runtime/types.d.ts +66 -7
  362. package/dist/runtime/types.d.ts.map +1 -1
  363. package/dist/runtime/types.js.map +1 -1
  364. package/dist/sandbox/cloudflare.d.ts +3 -0
  365. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  366. package/dist/sandbox/cloudflare.js +13 -1
  367. package/dist/sandbox/cloudflare.js.map +1 -1
  368. package/dist/sandbox/container.d.ts +4 -0
  369. package/dist/sandbox/container.d.ts.map +1 -1
  370. package/dist/sandbox/container.js +13 -3
  371. package/dist/sandbox/container.js.map +1 -1
  372. package/dist/sandbox/firecracker.d.ts +3 -0
  373. package/dist/sandbox/firecracker.d.ts.map +1 -1
  374. package/dist/sandbox/firecracker.js +13 -2
  375. package/dist/sandbox/firecracker.js.map +1 -1
  376. package/dist/sandbox/gondolin.d.ts +57 -0
  377. package/dist/sandbox/gondolin.d.ts.map +1 -0
  378. package/dist/sandbox/gondolin.js +764 -0
  379. package/dist/sandbox/gondolin.js.map +1 -0
  380. package/dist/sandbox/host.d.ts +3 -0
  381. package/dist/sandbox/host.d.ts.map +1 -1
  382. package/dist/sandbox/host.js +18 -3
  383. package/dist/sandbox/host.js.map +1 -1
  384. package/dist/sandbox/identity.d.ts +44 -0
  385. package/dist/sandbox/identity.d.ts.map +1 -0
  386. package/dist/sandbox/identity.js +68 -0
  387. package/dist/sandbox/identity.js.map +1 -0
  388. package/dist/sandbox/image.d.ts.map +1 -1
  389. package/dist/sandbox/image.js +2 -0
  390. package/dist/sandbox/image.js.map +1 -1
  391. package/dist/sandbox/index.d.ts +17 -4
  392. package/dist/sandbox/index.d.ts.map +1 -1
  393. package/dist/sandbox/index.js +37 -3
  394. package/dist/sandbox/index.js.map +1 -1
  395. package/dist/sandbox/types.d.ts +65 -1
  396. package/dist/sandbox/types.d.ts.map +1 -1
  397. package/dist/sandbox/types.js.map +1 -1
  398. package/dist/sandbox/utils.d.ts +14 -0
  399. package/dist/sandbox/utils.d.ts.map +1 -1
  400. package/dist/sandbox/utils.js +68 -1
  401. package/dist/sandbox/utils.js.map +1 -1
  402. package/dist/sessions/chat-history-sync.d.ts +25 -0
  403. package/dist/sessions/chat-history-sync.d.ts.map +1 -0
  404. package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +135 -131
  405. package/dist/sessions/chat-history-sync.js.map +1 -0
  406. package/dist/sessions/conversation-log.d.ts +9 -0
  407. package/dist/sessions/conversation-log.d.ts.map +1 -0
  408. package/dist/sessions/conversation-log.js +50 -0
  409. package/dist/sessions/conversation-log.js.map +1 -0
  410. package/dist/sessions/history-line.d.ts +29 -0
  411. package/dist/sessions/history-line.d.ts.map +1 -0
  412. package/dist/sessions/history-line.js +45 -0
  413. package/dist/sessions/history-line.js.map +1 -0
  414. package/dist/sessions/rotation.d.ts +2 -0
  415. package/dist/sessions/rotation.d.ts.map +1 -0
  416. package/dist/sessions/rotation.js +39 -0
  417. package/dist/sessions/rotation.js.map +1 -0
  418. package/dist/sessions/session-key.d.ts +33 -0
  419. package/dist/sessions/session-key.d.ts.map +1 -0
  420. package/dist/sessions/session-key.js +115 -0
  421. package/dist/sessions/session-key.js.map +1 -0
  422. package/dist/sessions/store.d.ts +15 -7
  423. package/dist/sessions/store.d.ts.map +1 -1
  424. package/dist/sessions/store.js +127 -36
  425. package/dist/sessions/store.js.map +1 -1
  426. package/dist/sessions/types.d.ts +19 -5
  427. package/dist/sessions/types.d.ts.map +1 -1
  428. package/dist/sessions/types.js.map +1 -1
  429. package/dist/settings-mutation.d.ts +40 -0
  430. package/dist/settings-mutation.d.ts.map +1 -0
  431. package/dist/settings-mutation.js +61 -0
  432. package/dist/settings-mutation.js.map +1 -0
  433. package/dist/subagent-progress.d.ts +43 -0
  434. package/dist/subagent-progress.d.ts.map +1 -0
  435. package/dist/subagent-progress.js +220 -0
  436. package/dist/subagent-progress.js.map +1 -0
  437. package/dist/tools/bash.d.ts +3 -1
  438. package/dist/tools/bash.d.ts.map +1 -1
  439. package/dist/tools/bash.js +26 -18
  440. package/dist/tools/bash.js.map +1 -1
  441. package/dist/tools/edit.d.ts.map +1 -1
  442. package/dist/tools/edit.js +14 -13
  443. package/dist/tools/edit.js.map +1 -1
  444. package/dist/tools/event.d.ts +1 -1
  445. package/dist/tools/event.d.ts.map +1 -1
  446. package/dist/tools/event.js +58 -45
  447. package/dist/tools/event.js.map +1 -1
  448. package/dist/tools/generate-image.d.ts +23 -0
  449. package/dist/tools/generate-image.d.ts.map +1 -0
  450. package/dist/tools/generate-image.js +65 -0
  451. package/dist/tools/generate-image.js.map +1 -0
  452. package/dist/tools/host-fn-tool.d.ts +21 -0
  453. package/dist/tools/host-fn-tool.d.ts.map +1 -0
  454. package/dist/tools/host-fn-tool.js +32 -0
  455. package/dist/tools/host-fn-tool.js.map +1 -0
  456. package/dist/tools/index.d.ts +19 -2
  457. package/dist/tools/index.d.ts.map +1 -1
  458. package/dist/tools/index.js +25 -2
  459. package/dist/tools/index.js.map +1 -1
  460. package/dist/tools/react.d.ts +15 -0
  461. package/dist/tools/react.d.ts.map +1 -0
  462. package/dist/tools/react.js +29 -0
  463. package/dist/tools/react.js.map +1 -0
  464. package/dist/tools/read.d.ts +1 -0
  465. package/dist/tools/read.d.ts.map +1 -1
  466. package/dist/tools/read.js +39 -33
  467. package/dist/tools/read.js.map +1 -1
  468. package/dist/tools/sandbox.d.ts +2 -2
  469. package/dist/tools/sandbox.d.ts.map +1 -1
  470. package/dist/tools/sandbox.js +14 -9
  471. package/dist/tools/sandbox.js.map +1 -1
  472. package/dist/tools/subagent-slots.d.ts +28 -0
  473. package/dist/tools/subagent-slots.d.ts.map +1 -0
  474. package/dist/tools/subagent-slots.js +72 -0
  475. package/dist/tools/subagent-slots.js.map +1 -0
  476. package/dist/tools/subagent.d.ts +54 -0
  477. package/dist/tools/subagent.d.ts.map +1 -0
  478. package/dist/tools/subagent.js +411 -0
  479. package/dist/tools/subagent.js.map +1 -0
  480. package/dist/tools/types.d.ts +40 -32
  481. package/dist/tools/types.d.ts.map +1 -1
  482. package/dist/tools/types.js.map +1 -1
  483. package/dist/tools/write.d.ts.map +1 -1
  484. package/dist/tools/write.js +2 -8
  485. package/dist/tools/write.js.map +1 -1
  486. package/dist/trigger.d.ts +2 -1
  487. package/dist/trigger.d.ts.map +1 -1
  488. package/dist/trigger.js +6 -9
  489. package/dist/trigger.js.map +1 -1
  490. package/dist/types.d.ts +403 -59
  491. package/dist/types.d.ts.map +1 -1
  492. package/dist/types.js +2 -2
  493. package/dist/types.js.map +1 -1
  494. package/dist/utils/file-guards.d.ts +9 -0
  495. package/dist/utils/file-guards.d.ts.map +1 -1
  496. package/dist/utils/file-guards.js +44 -1
  497. package/dist/utils/file-guards.js.map +1 -1
  498. package/dist/vault/disabled.d.ts +9 -0
  499. package/dist/vault/disabled.d.ts.map +1 -0
  500. package/dist/vault/disabled.js +25 -0
  501. package/dist/vault/disabled.js.map +1 -0
  502. package/dist/vault/index.d.ts +45 -2
  503. package/dist/vault/index.d.ts.map +1 -1
  504. package/dist/vault/index.js +127 -36
  505. package/dist/vault/index.js.map +1 -1
  506. package/dist/vault/types.d.ts +6 -2
  507. package/dist/vault/types.d.ts.map +1 -1
  508. package/dist/vault/types.js.map +1 -1
  509. package/dist/web/admin/portal.d.ts +31 -3
  510. package/dist/web/admin/portal.d.ts.map +1 -1
  511. package/dist/web/admin/portal.js +846 -345
  512. package/dist/web/admin/portal.js.map +1 -1
  513. package/dist/web/admin/provider-models.js +1 -1
  514. package/dist/web/admin/provider-models.js.map +1 -1
  515. package/dist/web/admin/types.d.ts +23 -3
  516. package/dist/web/admin/types.d.ts.map +1 -1
  517. package/dist/web/admin/types.js.map +1 -1
  518. package/dist/web/login/oauth.d.ts +2 -3
  519. package/dist/web/login/oauth.d.ts.map +1 -1
  520. package/dist/web/login/oauth.js +1 -32
  521. package/dist/web/login/oauth.js.map +1 -1
  522. package/dist/web/login/portal.d.ts +1 -1
  523. package/dist/web/login/portal.d.ts.map +1 -1
  524. package/dist/web/login/portal.js +13 -36
  525. package/dist/web/login/portal.js.map +1 -1
  526. package/dist/web/login/types.d.ts +0 -11
  527. package/dist/web/login/types.d.ts.map +1 -1
  528. package/dist/web/login/types.js.map +1 -1
  529. package/dist/web/portal-shell.d.ts +21 -0
  530. package/dist/web/portal-shell.d.ts.map +1 -0
  531. package/dist/{portal-shell.js → web/portal-shell.js} +67 -2
  532. package/dist/web/portal-shell.js.map +1 -0
  533. package/dist/web/server.d.ts +3 -2
  534. package/dist/web/server.d.ts.map +1 -1
  535. package/dist/web/server.js +11 -4
  536. package/dist/web/server.js.map +1 -1
  537. package/dist/web/session-view/portal.d.ts +1 -1
  538. package/dist/web/session-view/portal.d.ts.map +1 -1
  539. package/dist/web/session-view/portal.js +37 -28
  540. package/dist/web/session-view/portal.js.map +1 -1
  541. package/dist/web/session-view/service.d.ts +1 -1
  542. package/dist/web/session-view/service.d.ts.map +1 -1
  543. package/dist/web/session-view/service.js +61 -18
  544. package/dist/web/session-view/service.js.map +1 -1
  545. package/dist/web/session-view/types.d.ts +0 -3
  546. package/dist/web/session-view/types.d.ts.map +1 -1
  547. package/dist/web/session-view/types.js.map +1 -1
  548. package/dist/web/token-store.js +1 -1
  549. package/dist/web/token-store.js.map +1 -1
  550. package/dist/workspace-projection/index.d.ts +10 -0
  551. package/dist/workspace-projection/index.d.ts.map +1 -0
  552. package/dist/workspace-projection/index.js +120 -0
  553. package/dist/workspace-projection/index.js.map +1 -0
  554. package/dist/workspace-projection/types.d.ts +16 -0
  555. package/dist/workspace-projection/types.d.ts.map +1 -0
  556. package/dist/workspace-projection/types.js +2 -0
  557. package/dist/workspace-projection/types.js.map +1 -0
  558. package/package.json +67 -37
  559. package/dist/adapters/streaming.d.ts +0 -18
  560. package/dist/adapters/streaming.d.ts.map +0 -1
  561. package/dist/adapters/streaming.js +0 -44
  562. package/dist/adapters/streaming.js.map +0 -1
  563. package/dist/commands/parse.d.ts +0 -7
  564. package/dist/commands/parse.d.ts.map +0 -1
  565. package/dist/commands/parse.js +0 -14
  566. package/dist/commands/parse.js.map +0 -1
  567. package/dist/download.d.ts.map +0 -1
  568. package/dist/download.js.map +0 -1
  569. package/dist/model-registry.d.ts +0 -4
  570. package/dist/model-registry.d.ts.map +0 -1
  571. package/dist/model-registry.js +0 -7
  572. package/dist/model-registry.js.map +0 -1
  573. package/dist/portal-shell.d.ts +0 -4
  574. package/dist/portal-shell.d.ts.map +0 -1
  575. package/dist/portal-shell.js.map +0 -1
  576. package/dist/runtime/agent-run-controller.d.ts +0 -31
  577. package/dist/runtime/agent-run-controller.d.ts.map +0 -1
  578. package/dist/runtime/agent-run-controller.js +0 -195
  579. package/dist/runtime/agent-run-controller.js.map +0 -1
  580. package/dist/sandbox/path-context.d.ts +0 -3
  581. package/dist/sandbox/path-context.d.ts.map +0 -1
  582. package/dist/sandbox/path-context.js +0 -20
  583. package/dist/sandbox/path-context.js.map +0 -1
  584. package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
  585. package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
  586. package/dist/sessions/agent-memory-file-manager.js.map +0 -1
  587. package/dist/sessions/metadata.d.ts +0 -3
  588. package/dist/sessions/metadata.d.ts.map +0 -1
  589. package/dist/sessions/metadata.js +0 -11
  590. package/dist/sessions/metadata.js.map +0 -1
  591. package/dist/sessions/policy.d.ts +0 -6
  592. package/dist/sessions/policy.d.ts.map +0 -1
  593. package/dist/sessions/policy.js +0 -23
  594. package/dist/sessions/policy.js.map +0 -1
  595. package/dist/store.d.ts +0 -46
  596. package/dist/store.d.ts.map +0 -1
  597. package/dist/store.js +0 -177
  598. package/dist/store.js.map +0 -1
  599. package/dist/tools/truncate.d.ts +0 -33
  600. package/dist/tools/truncate.d.ts.map +0 -1
  601. package/dist/tools/truncate.js +0 -184
  602. package/dist/tools/truncate.js.map +0 -1
  603. package/dist/utils/date.d.ts +0 -10
  604. package/dist/utils/date.d.ts.map +0 -1
  605. package/dist/utils/date.js +0 -23
  606. package/dist/utils/date.js.map +0 -1
  607. package/dist/utils/env.d.ts +0 -3
  608. package/dist/utils/env.d.ts.map +0 -1
  609. package/dist/utils/env.js +0 -12
  610. package/dist/utils/env.js.map +0 -1
  611. package/dist/utils/fs-atomic.d.ts +0 -10
  612. package/dist/utils/fs-atomic.d.ts.map +0 -1
  613. package/dist/utils/fs-atomic.js +0 -45
  614. package/dist/utils/fs-atomic.js.map +0 -1
  615. package/dist/utils/html.d.ts +0 -2
  616. package/dist/utils/html.d.ts.map +0 -1
  617. package/dist/utils/html.js +0 -4
  618. package/dist/utils/html.js.map +0 -1
  619. package/dist/utils/http-body.d.ts +0 -10
  620. package/dist/utils/http-body.d.ts.map +0 -1
  621. package/dist/utils/http-body.js +0 -34
  622. package/dist/utils/http-body.js.map +0 -1
  623. package/dist/vault/routing.d.ts +0 -3
  624. package/dist/vault/routing.d.ts.map +0 -1
  625. package/dist/vault/routing.js +0 -13
  626. package/dist/vault/routing.js.map +0 -1
  627. package/dist/web/agent-events/portal.d.ts +0 -3
  628. package/dist/web/agent-events/portal.d.ts.map +0 -1
  629. package/dist/web/agent-events/portal.js +0 -18
  630. package/dist/web/agent-events/portal.js.map +0 -1
  631. package/dist/web/request.d.ts +0 -3
  632. package/dist/web/request.d.ts.map +0 -1
  633. package/dist/web/request.js +0 -13
  634. package/dist/web/request.js.map +0 -1
  635. package/dist/web/session-view/command.d.ts +0 -4
  636. package/dist/web/session-view/command.d.ts.map +0 -1
  637. package/dist/web/session-view/command.js +0 -7
  638. package/dist/web/session-view/command.js.map +0 -1
  639. /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
@@ -0,0 +1,617 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { AsyncLocalStorage } from "node:async_hooks";
3
+ import { Kind, Type } from "@sinclair/typebox";
4
+ import { Value } from "@sinclair/typebox/value";
5
+ import * as log from "../log.js";
6
+ import { MikanAgentSession } from "./runner.js";
7
+ import { SessionStore } from "./session-store.js";
8
+ import { copySubagentUsage, createEmptySubagentUsage } from "./usage.js";
9
+ import { unboundedSlotPool } from "../tools/subagent-slots.js";
10
+ const subagentRunDepth = new AsyncLocalStorage();
11
+ const DEFAULT_SYSTEM_PROMPT = "You are a focused subagent. Complete only the assigned task and return the result directly.";
12
+ export const DEFAULT_SUBAGENT_BUDGET = {
13
+ maxTurns: 100,
14
+ maxCostUsd: 10,
15
+ maxDurationMs: 10 * 60 * 1000,
16
+ };
17
+ /** Time allowed for an aborted subagent to settle before detached cleanup. */
18
+ export const SUBAGENT_ABORT_GRACE_MS = 100;
19
+ const SCHEMA_STRUCTURAL_KEYS = new Set([
20
+ "type",
21
+ "properties",
22
+ "required",
23
+ "items",
24
+ "enum",
25
+ "const",
26
+ "anyOf",
27
+ "oneOf",
28
+ "allOf",
29
+ ]);
30
+ function isRecord(value) {
31
+ return typeof value === "object" && value !== null && !Array.isArray(value);
32
+ }
33
+ function schemaOptions(node) {
34
+ const options = {};
35
+ for (const [key, value] of Object.entries(node)) {
36
+ if (!SCHEMA_STRUCTURAL_KEYS.has(key))
37
+ options[key] = value;
38
+ }
39
+ if (isRecord(options.additionalProperties)) {
40
+ options.additionalProperties = hydrateSchema(options.additionalProperties);
41
+ }
42
+ return options;
43
+ }
44
+ /**
45
+ * outputSchema arrives over the subagent tool as plain JSON (tool-call
46
+ * arguments never carry TypeBox's Kind symbol), but Value.Check dispatches
47
+ * purely on schema[Kind] and throws ValueCheckUnknownTypeError for anything
48
+ * without it. Hydrate plain JSON Schema into real TypeBox schema nodes so
49
+ * validation runs instead of throwing; schemas built with TypeBox already
50
+ * carry Kind and pass through untouched.
51
+ *
52
+ * Unsupported keywords ($ref, not, patternProperties, if/then/else) degrade to
53
+ * a permissive Unknown — fail-open by design: outputSchema is advisory output
54
+ * validation, not a security boundary.
55
+ */
56
+ function hydrateSchema(schema) {
57
+ if (isRecord(schema) && Kind in schema)
58
+ return schema;
59
+ if (!isRecord(schema))
60
+ return Type.Unknown();
61
+ if (Array.isArray(schema.enum)) {
62
+ const literals = schema.enum.filter((value) => typeof value === "string" || typeof value === "number" || typeof value === "boolean");
63
+ return literals.length > 0
64
+ ? Type.Union(literals.map((value) => Type.Literal(value)))
65
+ : Type.Unknown();
66
+ }
67
+ if ("const" in schema) {
68
+ const value = schema.const;
69
+ return typeof value === "string" || typeof value === "number" || typeof value === "boolean"
70
+ ? Type.Literal(value)
71
+ : Type.Unknown();
72
+ }
73
+ if (Array.isArray(schema.anyOf))
74
+ return Type.Union(schema.anyOf.map(hydrateSchema));
75
+ if (Array.isArray(schema.oneOf))
76
+ return Type.Union(schema.oneOf.map(hydrateSchema));
77
+ if (Array.isArray(schema.allOf))
78
+ return Type.Intersect(schema.allOf.map(hydrateSchema));
79
+ const type = Array.isArray(schema.type)
80
+ ? schema.type
81
+ : (schema.type ?? (schema.properties ? "object" : schema.items ? "array" : undefined));
82
+ if (Array.isArray(type)) {
83
+ return Type.Union(type.map((variant) => hydrateSchema({ ...schema, type: variant })));
84
+ }
85
+ const options = schemaOptions(schema);
86
+ switch (type) {
87
+ case "object": {
88
+ const properties = isRecord(schema.properties) ? schema.properties : {};
89
+ const required = new Set(Array.isArray(schema.required) ? schema.required : []);
90
+ const props = {};
91
+ for (const [key, value] of Object.entries(properties)) {
92
+ const hydrated = hydrateSchema(value);
93
+ props[key] = required.has(key) ? hydrated : Type.Optional(hydrated);
94
+ }
95
+ return Type.Object(props, options);
96
+ }
97
+ case "array":
98
+ return Type.Array(schema.items !== undefined ? hydrateSchema(schema.items) : Type.Unknown(), options);
99
+ case "string":
100
+ return Type.String(options);
101
+ case "number":
102
+ return Type.Number(options);
103
+ case "integer":
104
+ return Type.Integer(options);
105
+ case "boolean":
106
+ return Type.Boolean(options);
107
+ case "null":
108
+ return Type.Null(options);
109
+ default:
110
+ return Type.Unknown(options);
111
+ }
112
+ }
113
+ function resolveBudget(budget) {
114
+ const resolved = { ...DEFAULT_SUBAGENT_BUDGET, ...budget };
115
+ const positiveIntegerFields = [
116
+ ["maxTurns", resolved.maxTurns],
117
+ ["maxTokens", resolved.maxTokens],
118
+ ["maxDurationMs", resolved.maxDurationMs],
119
+ ];
120
+ for (const [name, value] of positiveIntegerFields) {
121
+ if (value !== undefined && (!Number.isInteger(value) || value <= 0)) {
122
+ throw new Error(`api.subagent.run budget.${name} must be a positive integer`);
123
+ }
124
+ }
125
+ if (!Number.isFinite(resolved.maxCostUsd) || resolved.maxCostUsd < 0) {
126
+ throw new Error("api.subagent.run budget.maxCostUsd must be a non-negative number");
127
+ }
128
+ return resolved;
129
+ }
130
+ function selectTools(requested, available) {
131
+ if (!requested || requested.length === 0)
132
+ return [];
133
+ const byName = new Map();
134
+ for (const tool of available) {
135
+ if (!byName.has(tool.name))
136
+ byName.set(tool.name, tool);
137
+ }
138
+ const selected = [];
139
+ for (const name of new Set(requested)) {
140
+ const tool = byName.get(name);
141
+ if (!tool)
142
+ throw new Error(`Unknown or unavailable subagent tool: ${name}`);
143
+ selected.push(tool);
144
+ }
145
+ return selected;
146
+ }
147
+ /**
148
+ * Wrap a tool so the run can prove it was actually reached. Fields are listed
149
+ * explicitly rather than spread: `AgentTool` is a plain interface, and a
150
+ * structural copy would silently drop anything added to it later.
151
+ */
152
+ function witnessToolUse(tool, invoked) {
153
+ return {
154
+ name: tool.name,
155
+ label: tool.label,
156
+ description: tool.description,
157
+ parameters: tool.parameters,
158
+ ...(tool.constrainedSampling !== undefined
159
+ ? { constrainedSampling: tool.constrainedSampling }
160
+ : {}),
161
+ ...(tool.prepareArguments ? { prepareArguments: tool.prepareArguments.bind(tool) } : {}),
162
+ ...(tool.executionMode ? { executionMode: tool.executionMode } : {}),
163
+ execute: (...args) => {
164
+ invoked.add(tool.name);
165
+ return tool.execute(...args);
166
+ },
167
+ };
168
+ }
169
+ function formatTask(task, input, parentContext) {
170
+ const trimmed = task.trim();
171
+ if (!trimmed)
172
+ throw new Error("api.subagent.run requires a non-empty task");
173
+ let formatted = trimmed;
174
+ if (input !== undefined) {
175
+ let serialized;
176
+ try {
177
+ serialized = JSON.stringify(input, null, 2);
178
+ }
179
+ catch (err) {
180
+ throw new Error(`api.subagent.run input must be JSON-serializable: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
181
+ }
182
+ if (serialized === undefined)
183
+ throw new Error("api.subagent.run input must be JSON-serializable");
184
+ formatted = `${trimmed}\n\nInput:\n${serialized}`;
185
+ }
186
+ return parentContext ? `${parentContext}\n\n${formatted}` : formatted;
187
+ }
188
+ function messageText(message) {
189
+ if (message.role === "compactionSummary" || message.role === "branchSummary") {
190
+ return message.summary;
191
+ }
192
+ if (!("content" in message))
193
+ return "";
194
+ if (typeof message.content === "string")
195
+ return message.content;
196
+ if (!Array.isArray(message.content))
197
+ return "";
198
+ return message.content
199
+ .filter((part) => typeof part === "object" && part !== null && part.type === "text")
200
+ .map((part) => part.text)
201
+ .join("");
202
+ }
203
+ function normalizedParentContext(request, messages) {
204
+ if (!request.parentContext || !messages)
205
+ return undefined;
206
+ const recentTurns = request.parentContext.recentTurns ?? 3;
207
+ if (!Number.isInteger(recentTurns) || recentTurns < 1 || recentTurns > 8) {
208
+ throw new Error("api.subagent.run parentContext.recentTurns must be an integer from 1 to 8");
209
+ }
210
+ const conversation = messages.filter((message) => (message.role === "user" || message.role === "assistant") && messageText(message));
211
+ let first = conversation.length;
212
+ let users = 0;
213
+ while (first > 0 && users < recentTurns) {
214
+ first -= 1;
215
+ if (conversation[first]?.role === "user")
216
+ users += 1;
217
+ }
218
+ const recent = conversation.slice(first);
219
+ const recentStart = recent[0] ? messages.indexOf(recent[0]) : messages.length;
220
+ let summary;
221
+ for (let index = recentStart - 1; index >= 0; index--) {
222
+ const message = messages[index];
223
+ if (message?.role === "compactionSummary" || message?.role === "branchSummary") {
224
+ summary = message;
225
+ break;
226
+ }
227
+ }
228
+ return [
229
+ "<parent_reference_context>",
230
+ summary ? `Earlier summary: ${messageText(summary)}` : "[Earlier parent context omitted]",
231
+ ...recent.map((message) => `${message.role === "user" ? "User" : "Assistant"}: ${messageText(message)}`),
232
+ "</parent_reference_context>",
233
+ ].join("\n");
234
+ }
235
+ /**
236
+ * The evidence policy has to name the actual grant. Told to "use granted
237
+ * tools" while holding none, a model will write a tool call as prose and
238
+ * hand that text back as its answer — which then flows to dependent DAG
239
+ * nodes as if it were a finding.
240
+ */
241
+ function groundingPolicy(toolNames) {
242
+ if (toolNames.length === 0) {
243
+ return [
244
+ "Evidence policy:",
245
+ "- You have NO tools in this run. Do not emit tool calls or tool-call syntax; they will not execute.",
246
+ "- Answer only from the task text and any structured input supplied to you.",
247
+ "- Never claim to have read a file, run a command, or reached a repository or URL.",
248
+ "- If the task cannot be done without a tool, say so plainly and stop.",
249
+ ].join("\n");
250
+ }
251
+ return [
252
+ "Evidence policy:",
253
+ `- Your tools this run: ${toolNames.join(", ")}. Nothing else will execute.`,
254
+ "- Use them for any claim about files, commands, repositories, or external state.",
255
+ "- Never simulate tool output or claim a tool was used when it was not.",
256
+ "- If the task requires a tool you were not granted, state that you cannot verify it instead of guessing.",
257
+ ].join("\n");
258
+ }
259
+ function buildSystemPrompt(base, outputSchema, toolNames) {
260
+ const prompt = [base?.trim() || DEFAULT_SYSTEM_PROMPT, groundingPolicy(toolNames)].join("\n\n");
261
+ if (!outputSchema)
262
+ return prompt;
263
+ return [
264
+ prompt,
265
+ "",
266
+ "Return only one JSON value matching this JSON Schema. Do not use Markdown or code fences.",
267
+ JSON.stringify(outputSchema),
268
+ ].join("\n");
269
+ }
270
+ /**
271
+ * Every SubagentRunResult's metric fields are born here — one derivation from
272
+ * the session's run stats, so adding a metric is one edit and no terminal
273
+ * site can drift (the abort branch once shipped without toolCallCounts). The
274
+ * terminal sites state only what differs: status, error, text.
275
+ */
276
+ function baseRunResult(runId, model, startedAt, stats) {
277
+ const usage = stats?.usage ?? createEmptySubagentUsage();
278
+ return {
279
+ runId,
280
+ model,
281
+ turns: stats?.llmCalls ?? 0,
282
+ toolCalls: stats?.toolCalls ?? 0,
283
+ toolCallCounts: stats?.toolCallCounts ?? {},
284
+ usage,
285
+ tokens: usage.totalTokens,
286
+ costUsd: usage.cost.total,
287
+ durationMs: Date.now() - startedAt,
288
+ };
289
+ }
290
+ function finalAssistant(messages) {
291
+ for (let index = messages.length - 1; index >= 0; index--) {
292
+ const message = messages[index];
293
+ if (message?.role === "assistant")
294
+ return message;
295
+ }
296
+ return undefined;
297
+ }
298
+ function assistantText(message) {
299
+ if (!message)
300
+ return "";
301
+ return message.content
302
+ .filter((part) => part.type === "text")
303
+ .map((part) => part.text)
304
+ .join("");
305
+ }
306
+ /**
307
+ * Execute one non-recursive, fresh subagent run. Never rejects: every
308
+ * failure — including request validation — is a result with a terminal
309
+ * status, so batch callers (`tasks` / `dag`) can never orphan in-flight
310
+ * sibling runs on one bad request. Usage is reported once, after the
311
+ * underlying run settles; an aborted run may report it from detached cleanup.
312
+ */
313
+ export async function runSubagent(options) {
314
+ const execution = await executeBoundedSubagentRun(options);
315
+ if (execution.cleanup) {
316
+ void execution.cleanup
317
+ .then(async (result) => {
318
+ await reportSubagentUsage(options.onUsage, result.usage);
319
+ })
320
+ .catch((err) => {
321
+ log.logWarning("Subagent detached cleanup failed", String(err));
322
+ });
323
+ return execution.result;
324
+ }
325
+ await reportSubagentUsage(options.onUsage, execution.result.usage);
326
+ return execution.result;
327
+ }
328
+ async function reportSubagentUsage(onUsage, usage) {
329
+ try {
330
+ await onUsage?.(copySubagentUsage(usage));
331
+ }
332
+ catch (err) {
333
+ log.logWarning("Subagent onUsage listener failed", String(err));
334
+ }
335
+ }
336
+ async function executeBoundedSubagentRun(options) {
337
+ const startedAt = Date.now();
338
+ let release;
339
+ try {
340
+ release = await (options.slots ?? unboundedSlotPool()).acquire(options.request.signal);
341
+ }
342
+ catch (err) {
343
+ if (err instanceof Error && err.name === "AbortError") {
344
+ const model = options.request.model ?? {
345
+ provider: options.defaultModel.provider,
346
+ id: options.defaultModel.id,
347
+ };
348
+ return {
349
+ result: { ...baseRunResult(randomUUID(), model, startedAt), status: "cancelled" },
350
+ };
351
+ }
352
+ throw err;
353
+ }
354
+ if (!release)
355
+ throw new Error("Subagent slot acquisition returned no release handle");
356
+ try {
357
+ const execution = await executeSubagentRun(options);
358
+ if (!execution.cleanup) {
359
+ release();
360
+ release = undefined;
361
+ return execution;
362
+ }
363
+ const cleanup = execution.cleanup;
364
+ const heldRelease = release;
365
+ void cleanup
366
+ .then(() => heldRelease(), (err) => {
367
+ log.logWarning("Subagent detached cleanup failed", String(err));
368
+ heldRelease();
369
+ })
370
+ .catch((err) => {
371
+ log.logWarning("Subagent detached release failed", String(err));
372
+ heldRelease();
373
+ });
374
+ release = undefined;
375
+ return execution;
376
+ }
377
+ catch (err) {
378
+ release?.();
379
+ release = undefined;
380
+ throw err;
381
+ }
382
+ }
383
+ function noop() { }
384
+ /**
385
+ * Expand `request.profile` into the concrete capability set it names. Most
386
+ * profile budgets are caps that callers may only tighten. Token budgets are
387
+ * different: the effective allowance is the larger of the profile default and
388
+ * the caller's request.
389
+ */
390
+ function resolveProfile(request, options) {
391
+ if (!request.profile)
392
+ return request;
393
+ const profile = options.profiles?.get(request.profile);
394
+ if (!profile) {
395
+ const known = [...(options.profiles?.keys() ?? [])].join(", ");
396
+ throw new Error(`Unknown subagent profile: ${request.profile}${known ? ` (available: ${known})` : ""}`);
397
+ }
398
+ if (request.tools || request.model || request.systemPrompt || request.thinkingLevel) {
399
+ throw new Error(`Subagent profile ${request.profile} cannot be combined with tools, model, systemPrompt, or thinkingLevel`);
400
+ }
401
+ const budget = {
402
+ ...request.budget,
403
+ ...(profile.maxTurns !== undefined
404
+ ? { maxTurns: Math.min(profile.maxTurns, request.budget?.maxTurns ?? profile.maxTurns) }
405
+ : {}),
406
+ ...(profile.maxTokens !== undefined || request.budget?.maxTokens !== undefined
407
+ ? { maxTokens: Math.max(profile.maxTokens ?? 0, request.budget?.maxTokens ?? 0) }
408
+ : {}),
409
+ ...(profile.maxCostUsd !== undefined
410
+ ? {
411
+ maxCostUsd: Math.min(profile.maxCostUsd, request.budget?.maxCostUsd ?? profile.maxCostUsd),
412
+ }
413
+ : {}),
414
+ ...(profile.maxDurationMs !== undefined
415
+ ? {
416
+ maxDurationMs: Math.min(profile.maxDurationMs, request.budget?.maxDurationMs ?? profile.maxDurationMs),
417
+ }
418
+ : {}),
419
+ };
420
+ return {
421
+ ...request,
422
+ systemPrompt: profile.systemPrompt,
423
+ tools: profile.tools,
424
+ requiredTools: profile.requiredTools,
425
+ ...(profile.model ? { model: profile.model } : {}),
426
+ ...(profile.thinkingLevel ? { thinkingLevel: profile.thinkingLevel } : {}),
427
+ ...(Object.keys(budget).length > 0 ? { budget } : {}),
428
+ };
429
+ }
430
+ async function executeSubagentRun(options) {
431
+ const request = resolveProfile(options.request, options);
432
+ const runId = randomUUID();
433
+ const startedAt = Date.now();
434
+ let modelSpec = request.model ?? {
435
+ provider: options.defaultModel.provider,
436
+ id: options.defaultModel.id,
437
+ };
438
+ let sessionRef;
439
+ let terminalSignal;
440
+ let timeout;
441
+ let notifyAbort = noop;
442
+ const abortRequested = new Promise((resolve) => {
443
+ notifyAbort = resolve;
444
+ });
445
+ const abort = (reason) => {
446
+ if (terminalSignal)
447
+ return;
448
+ terminalSignal = reason;
449
+ sessionRef?.abort();
450
+ notifyAbort();
451
+ };
452
+ const onAbort = () => abort("cancelled");
453
+ try {
454
+ if ((subagentRunDepth.getStore() ?? 0) >= 1) {
455
+ throw new Error("Nested api.subagent.run calls are not allowed");
456
+ }
457
+ const model = request.model
458
+ ? options.models.resolve(request.model.provider, request.model.id)
459
+ : options.defaultModel;
460
+ modelSpec = { provider: model.provider, id: model.id };
461
+ const invokedTools = new Set();
462
+ const granted = selectTools(request.tools, options.availableTools);
463
+ const missingRequiredTools = (request.requiredTools ?? []).filter((name) => !granted.some((tool) => tool.name === name));
464
+ if (missingRequiredTools.length > 0) {
465
+ throw new Error(`Required subagent tools were not granted: ${missingRequiredTools.join(", ")}`);
466
+ }
467
+ const tools = granted.map((tool) => witnessToolUse(tool, invokedTools));
468
+ const task = formatTask(request.task, request.input, normalizedParentContext(request, options.parentMessages));
469
+ const budget = resolveBudget(request.budget);
470
+ const session = new MikanAgentSession({
471
+ systemPrompt: buildSystemPrompt(request.systemPrompt, request.outputSchema, granted.map((tool) => tool.name)),
472
+ model,
473
+ thinkingLevel: request.thinkingLevel ?? options.thinkingLevel,
474
+ tools,
475
+ models: options.models,
476
+ sessionStore: SessionStore.inMemory(options.workspaceDir),
477
+ settings: { compaction: { enabled: false } },
478
+ });
479
+ sessionRef = session;
480
+ request.signal?.addEventListener("abort", onAbort, { once: true });
481
+ if (request.signal?.aborted)
482
+ abort("cancelled");
483
+ timeout = setTimeout(() => abort("timeout"), budget.maxDurationMs);
484
+ timeout.unref();
485
+ const buildResult = (cleanupPending = false) => {
486
+ const stats = session.getLastRunStats();
487
+ const assistant = finalAssistant(session.messages);
488
+ const text = assistantText(assistant);
489
+ const base = {
490
+ ...baseRunResult(runId, modelSpec, startedAt, stats),
491
+ ...(text ? { text } : {}),
492
+ ...(cleanupPending ? { cleanupPending: true } : {}),
493
+ };
494
+ if (terminalSignal) {
495
+ return {
496
+ ...base,
497
+ status: terminalSignal,
498
+ ...(terminalSignal === "timeout"
499
+ ? { error: `Subagent exceeded its ${budget.maxDurationMs}ms duration limit` }
500
+ : {}),
501
+ };
502
+ }
503
+ if (stats.budgetExceededReason) {
504
+ return {
505
+ ...base,
506
+ status: "budget_exceeded",
507
+ error: stats.budgetExceededReason,
508
+ };
509
+ }
510
+ const unusedRequiredTools = (request.requiredTools ?? []).filter((name) => !invokedTools.has(name));
511
+ if (unusedRequiredTools.length > 0) {
512
+ return {
513
+ ...base,
514
+ status: "failed",
515
+ error: `Required tool not used: ${unusedRequiredTools.join(", ")}`,
516
+ };
517
+ }
518
+ if (assistant?.stopReason === "error") {
519
+ return {
520
+ ...base,
521
+ status: "failed",
522
+ error: assistant.errorMessage || "Subagent failed",
523
+ };
524
+ }
525
+ if (!assistant) {
526
+ return { ...base, status: "failed", error: "Subagent produced no assistant response" };
527
+ }
528
+ if (request.outputSchema) {
529
+ let parsed;
530
+ try {
531
+ parsed = JSON.parse(text);
532
+ }
533
+ catch {
534
+ return { ...base, status: "invalid_output", error: "Subagent output is not valid JSON" };
535
+ }
536
+ if (!Value.Check(hydrateSchema(request.outputSchema), parsed)) {
537
+ return {
538
+ ...base,
539
+ status: "invalid_output",
540
+ error: "Subagent output does not match the requested schema",
541
+ };
542
+ }
543
+ return {
544
+ ...base,
545
+ status: "completed",
546
+ output: parsed,
547
+ };
548
+ }
549
+ if (!text) {
550
+ return { ...base, status: "failed", error: "Subagent produced no text output" };
551
+ }
552
+ return {
553
+ ...base,
554
+ status: "completed",
555
+ output: text,
556
+ };
557
+ };
558
+ const buildFailureResult = (err) => ({
559
+ ...baseRunResult(runId, modelSpec, startedAt, session.getLastRunStats()),
560
+ status: terminalSignal ?? "failed",
561
+ error: err instanceof Error ? err.message : String(err),
562
+ });
563
+ if (!terminalSignal) {
564
+ const promptOutcome = subagentRunDepth
565
+ .run(1, () => session.prompt(task, {
566
+ budget: {
567
+ maxLlmCalls: budget.maxTurns,
568
+ maxTokens: budget.maxTokens,
569
+ maxCostUsd: budget.maxCostUsd,
570
+ maxDurationMs: budget.maxDurationMs,
571
+ },
572
+ }))
573
+ .then(() => ({ ok: true }), (error) => ({ ok: false, error }));
574
+ const winner = await Promise.race([
575
+ promptOutcome.then((outcome) => ({ type: "settled", outcome })),
576
+ abortRequested.then(async () => {
577
+ let graceTimer;
578
+ const graceExpired = new Promise((resolve) => {
579
+ graceTimer = setTimeout(() => resolve("expired"), SUBAGENT_ABORT_GRACE_MS);
580
+ });
581
+ const graceOutcome = await Promise.race([
582
+ promptOutcome.then((settledOutcome) => ({
583
+ type: "settled",
584
+ outcome: settledOutcome,
585
+ })),
586
+ graceExpired.then((value) => ({ type: value })),
587
+ ]);
588
+ if (graceTimer)
589
+ clearTimeout(graceTimer);
590
+ return graceOutcome;
591
+ }),
592
+ ]);
593
+ if (winner.type === "expired") {
594
+ const cleanup = promptOutcome.then((settledOutcome) => settledOutcome.ok ? buildResult() : buildFailureResult(settledOutcome.error));
595
+ return { result: buildResult(true), cleanup };
596
+ }
597
+ if (!winner.outcome.ok)
598
+ throw winner.outcome.error;
599
+ }
600
+ return { result: buildResult() };
601
+ }
602
+ catch (err) {
603
+ return {
604
+ result: {
605
+ ...baseRunResult(runId, modelSpec, startedAt, sessionRef?.getLastRunStats()),
606
+ status: terminalSignal ?? "failed",
607
+ error: err instanceof Error ? err.message : String(err),
608
+ },
609
+ };
610
+ }
611
+ finally {
612
+ if (timeout)
613
+ clearTimeout(timeout);
614
+ request.signal?.removeEventListener("abort", onAbort);
615
+ }
616
+ }
617
+ //# sourceMappingURL=subagent-runner.js.map