@agent-native/core 0.7.10 → 0.7.12

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 (375) hide show
  1. package/dist/action.js +30 -11
  2. package/dist/action.js.map +1 -1
  3. package/dist/agent/engine/ai-sdk-engine.d.ts +14 -2
  4. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  5. package/dist/agent/engine/ai-sdk-engine.js +70 -54
  6. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  7. package/dist/agent/engine/anthropic-engine.d.ts +1 -6
  8. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  9. package/dist/agent/engine/anthropic-engine.js +3 -14
  10. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  11. package/dist/agent/engine/builtin.d.ts.map +1 -1
  12. package/dist/agent/engine/builtin.js +3 -0
  13. package/dist/agent/engine/builtin.js.map +1 -1
  14. package/dist/agent/engine/index.d.ts +1 -1
  15. package/dist/agent/engine/index.d.ts.map +1 -1
  16. package/dist/agent/engine/index.js +1 -1
  17. package/dist/agent/engine/index.js.map +1 -1
  18. package/dist/agent/engine/provider-env-vars.d.ts +21 -0
  19. package/dist/agent/engine/provider-env-vars.d.ts.map +1 -0
  20. package/dist/agent/engine/provider-env-vars.js +50 -0
  21. package/dist/agent/engine/provider-env-vars.js.map +1 -0
  22. package/dist/agent/engine/registry.d.ts +18 -0
  23. package/dist/agent/engine/registry.d.ts.map +1 -1
  24. package/dist/agent/engine/registry.js +54 -4
  25. package/dist/agent/engine/registry.js.map +1 -1
  26. package/dist/agent/engine/translate-ai-sdk.d.ts +35 -10
  27. package/dist/agent/engine/translate-ai-sdk.d.ts.map +1 -1
  28. package/dist/agent/engine/translate-ai-sdk.js +190 -91
  29. package/dist/agent/engine/translate-ai-sdk.js.map +1 -1
  30. package/dist/agent/engine/types.d.ts +10 -1
  31. package/dist/agent/engine/types.d.ts.map +1 -1
  32. package/dist/agent/production-agent.d.ts +21 -1
  33. package/dist/agent/production-agent.d.ts.map +1 -1
  34. package/dist/agent/production-agent.js +72 -21
  35. package/dist/agent/production-agent.js.map +1 -1
  36. package/dist/agent/thread-data-builder.js +1 -1
  37. package/dist/agent/thread-data-builder.js.map +1 -1
  38. package/dist/agent/types.d.ts +4 -0
  39. package/dist/agent/types.d.ts.map +1 -1
  40. package/dist/application-state/script-helpers.d.ts +12 -5
  41. package/dist/application-state/script-helpers.d.ts.map +1 -1
  42. package/dist/application-state/script-helpers.js +41 -20
  43. package/dist/application-state/script-helpers.js.map +1 -1
  44. package/dist/catalog.json +15 -0
  45. package/dist/checkpoints/index.d.ts +3 -0
  46. package/dist/checkpoints/index.d.ts.map +1 -0
  47. package/dist/checkpoints/index.js +3 -0
  48. package/dist/checkpoints/index.js.map +1 -0
  49. package/dist/checkpoints/service.d.ts +6 -0
  50. package/dist/checkpoints/service.d.ts.map +1 -0
  51. package/dist/checkpoints/service.js +107 -0
  52. package/dist/checkpoints/service.js.map +1 -0
  53. package/dist/checkpoints/store.d.ts +27 -0
  54. package/dist/checkpoints/store.d.ts.map +1 -0
  55. package/dist/checkpoints/store.js +92 -0
  56. package/dist/checkpoints/store.js.map +1 -0
  57. package/dist/cli/create.d.ts.map +1 -1
  58. package/dist/cli/create.js +191 -2
  59. package/dist/cli/create.js.map +1 -1
  60. package/dist/cli/index.js +63 -3
  61. package/dist/cli/index.js.map +1 -1
  62. package/dist/cli/templates-meta.d.ts +2 -0
  63. package/dist/cli/templates-meta.d.ts.map +1 -1
  64. package/dist/cli/templates-meta.js +35 -0
  65. package/dist/cli/templates-meta.js.map +1 -1
  66. package/dist/cli/workspacify.d.ts.map +1 -1
  67. package/dist/cli/workspacify.js +7 -3
  68. package/dist/cli/workspacify.js.map +1 -1
  69. package/dist/client/AgentPanel.d.ts.map +1 -1
  70. package/dist/client/AgentPanel.js +3 -1
  71. package/dist/client/AgentPanel.js.map +1 -1
  72. package/dist/client/AssistantChat.d.ts +15 -0
  73. package/dist/client/AssistantChat.d.ts.map +1 -1
  74. package/dist/client/AssistantChat.js +162 -67
  75. package/dist/client/AssistantChat.js.map +1 -1
  76. package/dist/client/CommandMenu.d.ts.map +1 -1
  77. package/dist/client/CommandMenu.js +9 -5
  78. package/dist/client/CommandMenu.js.map +1 -1
  79. package/dist/client/ConnectBuilderCard.js +1 -1
  80. package/dist/client/ConnectBuilderCard.js.map +1 -1
  81. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  82. package/dist/client/MultiTabAssistantChat.js +89 -4
  83. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  84. package/dist/client/agent-chat-adapter.d.ts +6 -0
  85. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  86. package/dist/client/agent-chat-adapter.js +4 -0
  87. package/dist/client/agent-chat-adapter.js.map +1 -1
  88. package/dist/client/composer/TiptapComposer.d.ts +12 -1
  89. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  90. package/dist/client/composer/TiptapComposer.js +87 -5
  91. package/dist/client/composer/TiptapComposer.js.map +1 -1
  92. package/dist/client/notifications/NotificationsBell.d.ts +23 -0
  93. package/dist/client/notifications/NotificationsBell.d.ts.map +1 -0
  94. package/dist/client/notifications/NotificationsBell.js +165 -0
  95. package/dist/client/notifications/NotificationsBell.js.map +1 -0
  96. package/dist/client/notifications/index.d.ts +2 -0
  97. package/dist/client/notifications/index.d.ts.map +1 -0
  98. package/dist/client/notifications/index.js +2 -0
  99. package/dist/client/notifications/index.js.map +1 -0
  100. package/dist/client/onboarding/OnboardingPanel.js +6 -3
  101. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  102. package/dist/client/progress/RunsTray.d.ts +18 -0
  103. package/dist/client/progress/RunsTray.d.ts.map +1 -0
  104. package/dist/client/progress/RunsTray.js +70 -0
  105. package/dist/client/progress/RunsTray.js.map +1 -0
  106. package/dist/client/progress/index.d.ts +2 -0
  107. package/dist/client/progress/index.d.ts.map +1 -0
  108. package/dist/client/progress/index.js +2 -0
  109. package/dist/client/progress/index.js.map +1 -0
  110. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  111. package/dist/client/resources/ResourcesPanel.js +19 -4
  112. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  113. package/dist/client/settings/AutomationsSection.d.ts +2 -0
  114. package/dist/client/settings/AutomationsSection.d.ts.map +1 -0
  115. package/dist/client/settings/AutomationsSection.js +214 -0
  116. package/dist/client/settings/AutomationsSection.js.map +1 -0
  117. package/dist/client/settings/ComingSoonSection.d.ts.map +1 -1
  118. package/dist/client/settings/ComingSoonSection.js +2 -1
  119. package/dist/client/settings/ComingSoonSection.js.map +1 -1
  120. package/dist/client/settings/SecretsSection.d.ts.map +1 -1
  121. package/dist/client/settings/SecretsSection.js +122 -3
  122. package/dist/client/settings/SecretsSection.js.map +1 -1
  123. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  124. package/dist/client/settings/SettingsPanel.js +252 -14
  125. package/dist/client/settings/SettingsPanel.js.map +1 -1
  126. package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
  127. package/dist/client/settings/VoiceTranscriptionSection.js +2 -2
  128. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
  129. package/dist/client/use-pausing-interval.d.ts +11 -0
  130. package/dist/client/use-pausing-interval.d.ts.map +1 -0
  131. package/dist/client/use-pausing-interval.js +49 -0
  132. package/dist/client/use-pausing-interval.js.map +1 -0
  133. package/dist/db/client.d.ts +26 -0
  134. package/dist/db/client.d.ts.map +1 -1
  135. package/dist/db/client.js +84 -2
  136. package/dist/db/client.js.map +1 -1
  137. package/dist/db/drizzle-config.d.ts +33 -0
  138. package/dist/db/drizzle-config.d.ts.map +1 -0
  139. package/dist/db/drizzle-config.js +132 -0
  140. package/dist/db/drizzle-config.js.map +1 -0
  141. package/dist/db/migrations.d.ts.map +1 -1
  142. package/dist/db/migrations.js +11 -6
  143. package/dist/db/migrations.js.map +1 -1
  144. package/dist/deploy/build.js +2 -1
  145. package/dist/deploy/build.js.map +1 -1
  146. package/dist/event-bus/bus.d.ts +20 -0
  147. package/dist/event-bus/bus.d.ts.map +1 -0
  148. package/dist/event-bus/bus.js +108 -0
  149. package/dist/event-bus/bus.js.map +1 -0
  150. package/dist/event-bus/index.d.ts +4 -0
  151. package/dist/event-bus/index.d.ts.map +1 -0
  152. package/dist/event-bus/index.js +3 -0
  153. package/dist/event-bus/index.js.map +1 -0
  154. package/dist/event-bus/registry.d.ts +22 -0
  155. package/dist/event-bus/registry.d.ts.map +1 -0
  156. package/dist/event-bus/registry.js +63 -0
  157. package/dist/event-bus/registry.js.map +1 -0
  158. package/dist/event-bus/types.d.ts +27 -0
  159. package/dist/event-bus/types.d.ts.map +1 -0
  160. package/dist/event-bus/types.js +2 -0
  161. package/dist/event-bus/types.js.map +1 -0
  162. package/dist/integrations/config-store.d.ts.map +1 -1
  163. package/dist/integrations/config-store.js +16 -12
  164. package/dist/integrations/config-store.js.map +1 -1
  165. package/dist/integrations/google-docs-poller.d.ts.map +1 -1
  166. package/dist/integrations/google-docs-poller.js +5 -1
  167. package/dist/integrations/google-docs-poller.js.map +1 -1
  168. package/dist/jobs/scheduler.d.ts.map +1 -1
  169. package/dist/jobs/scheduler.js +7 -3
  170. package/dist/jobs/scheduler.js.map +1 -1
  171. package/dist/notifications/actions.d.ts +10 -0
  172. package/dist/notifications/actions.d.ts.map +1 -0
  173. package/dist/notifications/actions.js +114 -0
  174. package/dist/notifications/actions.js.map +1 -0
  175. package/dist/notifications/channels.d.ts +15 -0
  176. package/dist/notifications/channels.d.ts.map +1 -0
  177. package/dist/notifications/channels.js +97 -0
  178. package/dist/notifications/channels.js.map +1 -0
  179. package/dist/notifications/index.d.ts +4 -0
  180. package/dist/notifications/index.d.ts.map +1 -0
  181. package/dist/notifications/index.js +3 -0
  182. package/dist/notifications/index.js.map +1 -0
  183. package/dist/notifications/registry.d.ts +9 -0
  184. package/dist/notifications/registry.d.ts.map +1 -0
  185. package/dist/notifications/registry.js +146 -0
  186. package/dist/notifications/registry.js.map +1 -0
  187. package/dist/notifications/routes.d.ts +34 -0
  188. package/dist/notifications/routes.d.ts.map +1 -0
  189. package/dist/notifications/routes.js +69 -0
  190. package/dist/notifications/routes.js.map +1 -0
  191. package/dist/notifications/store.d.ts +25 -0
  192. package/dist/notifications/store.d.ts.map +1 -0
  193. package/dist/notifications/store.js +158 -0
  194. package/dist/notifications/store.js.map +1 -0
  195. package/dist/notifications/types.d.ts +43 -0
  196. package/dist/notifications/types.d.ts.map +1 -0
  197. package/dist/notifications/types.js +2 -0
  198. package/dist/notifications/types.js.map +1 -0
  199. package/dist/onboarding/default-steps.d.ts.map +1 -1
  200. package/dist/onboarding/default-steps.js +63 -20
  201. package/dist/onboarding/default-steps.js.map +1 -1
  202. package/dist/org/handlers.d.ts.map +1 -1
  203. package/dist/org/handlers.js +7 -26
  204. package/dist/org/handlers.js.map +1 -1
  205. package/dist/progress/actions.d.ts +8 -0
  206. package/dist/progress/actions.d.ts.map +1 -0
  207. package/dist/progress/actions.js +158 -0
  208. package/dist/progress/actions.js.map +1 -0
  209. package/dist/progress/index.d.ts +3 -0
  210. package/dist/progress/index.d.ts.map +1 -0
  211. package/dist/progress/index.js +2 -0
  212. package/dist/progress/index.js.map +1 -0
  213. package/dist/progress/registry.d.ts +22 -0
  214. package/dist/progress/registry.d.ts.map +1 -0
  215. package/dist/progress/registry.js +98 -0
  216. package/dist/progress/registry.js.map +1 -0
  217. package/dist/progress/routes.d.ts +21 -0
  218. package/dist/progress/routes.d.ts.map +1 -0
  219. package/dist/progress/routes.js +59 -0
  220. package/dist/progress/routes.js.map +1 -0
  221. package/dist/progress/store.d.ts +7 -0
  222. package/dist/progress/store.d.ts.map +1 -0
  223. package/dist/progress/store.js +195 -0
  224. package/dist/progress/store.js.map +1 -0
  225. package/dist/progress/types.d.ts +49 -0
  226. package/dist/progress/types.d.ts.map +1 -0
  227. package/dist/progress/types.js +7 -0
  228. package/dist/progress/types.js.map +1 -0
  229. package/dist/resources/store.d.ts.map +1 -1
  230. package/dist/resources/store.js +19 -15
  231. package/dist/resources/store.js.map +1 -1
  232. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  233. package/dist/scripts/agent-engines/list-agent-engines.js +19 -5
  234. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  235. package/dist/scripts/agent-engines/set-agent-engine.d.ts.map +1 -1
  236. package/dist/scripts/agent-engines/set-agent-engine.js +8 -7
  237. package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -1
  238. package/dist/secrets/index.d.ts +3 -2
  239. package/dist/secrets/index.d.ts.map +1 -1
  240. package/dist/secrets/index.js +3 -2
  241. package/dist/secrets/index.js.map +1 -1
  242. package/dist/secrets/routes.d.ts +41 -2
  243. package/dist/secrets/routes.d.ts.map +1 -1
  244. package/dist/secrets/routes.js +167 -1
  245. package/dist/secrets/routes.js.map +1 -1
  246. package/dist/secrets/schema.d.ts +39 -1
  247. package/dist/secrets/schema.d.ts.map +1 -1
  248. package/dist/secrets/schema.js +6 -0
  249. package/dist/secrets/schema.js.map +1 -1
  250. package/dist/secrets/storage.d.ts +26 -0
  251. package/dist/secrets/storage.d.ts.map +1 -1
  252. package/dist/secrets/storage.js +111 -5
  253. package/dist/secrets/storage.js.map +1 -1
  254. package/dist/secrets/substitution.d.ts +39 -0
  255. package/dist/secrets/substitution.d.ts.map +1 -0
  256. package/dist/secrets/substitution.js +93 -0
  257. package/dist/secrets/substitution.js.map +1 -0
  258. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  259. package/dist/server/agent-chat-plugin.js +1684 -1410
  260. package/dist/server/agent-chat-plugin.js.map +1 -1
  261. package/dist/server/agent-teams.d.ts.map +1 -1
  262. package/dist/server/agent-teams.js +17 -6
  263. package/dist/server/agent-teams.js.map +1 -1
  264. package/dist/server/analytics.d.ts +8 -5
  265. package/dist/server/analytics.d.ts.map +1 -1
  266. package/dist/server/analytics.js +17 -8
  267. package/dist/server/analytics.js.map +1 -1
  268. package/dist/server/app-url.d.ts.map +1 -1
  269. package/dist/server/app-url.js +7 -4
  270. package/dist/server/app-url.js.map +1 -1
  271. package/dist/server/auth.d.ts +11 -0
  272. package/dist/server/auth.d.ts.map +1 -1
  273. package/dist/server/auth.js +74 -21
  274. package/dist/server/auth.js.map +1 -1
  275. package/dist/server/better-auth-instance.d.ts.map +1 -1
  276. package/dist/server/better-auth-instance.js +34 -16
  277. package/dist/server/better-auth-instance.js.map +1 -1
  278. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  279. package/dist/server/core-routes-plugin.js +179 -2
  280. package/dist/server/core-routes-plugin.js.map +1 -1
  281. package/dist/server/email-templates.d.ts +43 -0
  282. package/dist/server/email-templates.d.ts.map +1 -0
  283. package/dist/server/email-templates.js +86 -0
  284. package/dist/server/email-templates.js.map +1 -0
  285. package/dist/server/framework-request-handler.d.ts +15 -0
  286. package/dist/server/framework-request-handler.d.ts.map +1 -1
  287. package/dist/server/framework-request-handler.js +64 -1
  288. package/dist/server/framework-request-handler.js.map +1 -1
  289. package/dist/server/onboarding-html.d.ts +11 -0
  290. package/dist/server/onboarding-html.d.ts.map +1 -1
  291. package/dist/server/onboarding-html.js +275 -16
  292. package/dist/server/onboarding-html.js.map +1 -1
  293. package/dist/server/schema-prompt.d.ts.map +1 -1
  294. package/dist/server/schema-prompt.js +5 -0
  295. package/dist/server/schema-prompt.js.map +1 -1
  296. package/dist/shared/index.d.ts +1 -0
  297. package/dist/shared/index.d.ts.map +1 -1
  298. package/dist/shared/index.js +1 -0
  299. package/dist/shared/index.js.map +1 -1
  300. package/dist/shared/truncate.d.ts +8 -0
  301. package/dist/shared/truncate.d.ts.map +1 -0
  302. package/dist/shared/truncate.js +12 -0
  303. package/dist/shared/truncate.js.map +1 -0
  304. package/dist/templates/default/.agents/skills/agent-engines/SKILL.md +60 -4
  305. package/dist/templates/default/.agents/skills/notifications/SKILL.md +95 -0
  306. package/dist/templates/default/.agents/skills/progress/SKILL.md +97 -0
  307. package/dist/templates/default/AGENTS.md +12 -10
  308. package/dist/templates/default/package.json +10 -10
  309. package/dist/templates/workspace-core/package.json +5 -5
  310. package/dist/templates/workspace-root/package.json +1 -1
  311. package/dist/templates/workspace-root/pnpm-workspace.yaml +6 -0
  312. package/dist/templates/workspace-root/tsconfig.base.json +1 -2
  313. package/dist/tools/fetch-tool.d.ts +22 -0
  314. package/dist/tools/fetch-tool.d.ts.map +1 -0
  315. package/dist/tools/fetch-tool.js +156 -0
  316. package/dist/tools/fetch-tool.js.map +1 -0
  317. package/dist/tracking/index.d.ts +4 -0
  318. package/dist/tracking/index.d.ts.map +1 -0
  319. package/dist/tracking/index.js +3 -0
  320. package/dist/tracking/index.js.map +1 -0
  321. package/dist/tracking/providers.d.ts +15 -0
  322. package/dist/tracking/providers.d.ts.map +1 -0
  323. package/dist/tracking/providers.js +195 -0
  324. package/dist/tracking/providers.js.map +1 -0
  325. package/dist/tracking/registry.d.ts +10 -0
  326. package/dist/tracking/registry.d.ts.map +1 -0
  327. package/dist/tracking/registry.js +75 -0
  328. package/dist/tracking/registry.js.map +1 -0
  329. package/dist/tracking/types.d.ts +13 -0
  330. package/dist/tracking/types.d.ts.map +1 -0
  331. package/dist/tracking/types.js +2 -0
  332. package/dist/tracking/types.js.map +1 -0
  333. package/dist/triggers/actions.d.ts +10 -0
  334. package/dist/triggers/actions.d.ts.map +1 -0
  335. package/dist/triggers/actions.js +277 -0
  336. package/dist/triggers/actions.js.map +1 -0
  337. package/dist/triggers/condition-evaluator.d.ts +15 -0
  338. package/dist/triggers/condition-evaluator.d.ts.map +1 -0
  339. package/dist/triggers/condition-evaluator.js +107 -0
  340. package/dist/triggers/condition-evaluator.js.map +1 -0
  341. package/dist/triggers/dispatcher.d.ts +32 -0
  342. package/dist/triggers/dispatcher.d.ts.map +1 -0
  343. package/dist/triggers/dispatcher.js +291 -0
  344. package/dist/triggers/dispatcher.js.map +1 -0
  345. package/dist/triggers/index.d.ts +5 -0
  346. package/dist/triggers/index.d.ts.map +1 -0
  347. package/dist/triggers/index.js +4 -0
  348. package/dist/triggers/index.js.map +1 -0
  349. package/dist/triggers/types.d.ts +35 -0
  350. package/dist/triggers/types.d.ts.map +1 -0
  351. package/dist/triggers/types.js +9 -0
  352. package/dist/triggers/types.js.map +1 -0
  353. package/dist/vite/client.d.ts.map +1 -1
  354. package/dist/vite/client.js +66 -16
  355. package/dist/vite/client.js.map +1 -1
  356. package/docs/content/automations.md +239 -0
  357. package/docs/content/multi-tenancy.md +88 -0
  358. package/docs/content/notifications.md +199 -0
  359. package/docs/content/progress.md +176 -0
  360. package/docs/content/tracking.md +168 -0
  361. package/package.json +59 -35
  362. package/src/templates/default/.agents/skills/agent-engines/SKILL.md +60 -4
  363. package/src/templates/default/.agents/skills/notifications/SKILL.md +95 -0
  364. package/src/templates/default/.agents/skills/progress/SKILL.md +97 -0
  365. package/src/templates/default/AGENTS.md +12 -10
  366. package/src/templates/default/package.json +10 -10
  367. package/src/templates/workspace-core/package.json +5 -5
  368. package/src/templates/workspace-root/package.json +1 -1
  369. package/src/templates/workspace-root/pnpm-workspace.yaml +6 -0
  370. package/src/templates/workspace-root/tsconfig.base.json +1 -2
  371. package/tsconfig.base.json +1 -1
  372. package/dist/client/settings/LLMSection.d.ts +0 -2
  373. package/dist/client/settings/LLMSection.d.ts.map +0 -1
  374. package/dist/client/settings/LLMSection.js +0 -64
  375. package/dist/client/settings/LLMSection.js.map +0 -1
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Framework-level agent tools for the progress primitive. Registered as
3
+ * native tools so every template exposes them. Use from long agent loops
4
+ * to communicate status to the user while work is still in-flight.
5
+ */
6
+ import { startRun, updateRunProgress, completeRun, listRuns, } from "./registry.js";
7
+ export function createProgressToolEntries(getCurrentUser) {
8
+ return {
9
+ "start-run": {
10
+ tool: {
11
+ description: "Mark the start of a long-running task the user should be able to watch. Returns a runId — pass it to `update-run-progress` and `complete-run`. Call this at the top of any task that will take more than a few seconds.",
12
+ parameters: {
13
+ type: "object",
14
+ properties: {
15
+ title: {
16
+ type: "string",
17
+ description: 'Short human-readable title, e.g. "Triage 128 unread emails".',
18
+ },
19
+ step: {
20
+ type: "string",
21
+ description: 'Initial step description, e.g. "Fetching inbox".',
22
+ },
23
+ metadataJson: {
24
+ type: "string",
25
+ description: "Optional JSON metadata: link, thread id, artifact path, etc.",
26
+ },
27
+ },
28
+ required: ["title"],
29
+ },
30
+ },
31
+ run: async (args) => {
32
+ const owner = getCurrentUser();
33
+ if (!args.title)
34
+ return "Error: --title is required.";
35
+ let metadata;
36
+ if (args.metadataJson) {
37
+ try {
38
+ metadata = JSON.parse(args.metadataJson);
39
+ }
40
+ catch {
41
+ return "Error: metadataJson must be valid JSON.";
42
+ }
43
+ }
44
+ const run = await startRun({
45
+ owner,
46
+ title: args.title,
47
+ step: args.step || undefined,
48
+ metadata,
49
+ });
50
+ return `Run started. runId=${run.id}`;
51
+ },
52
+ },
53
+ "update-run-progress": {
54
+ tool: {
55
+ description: "Update a running task with progress. Call frequently during long loops so the user can watch status in the runs tray. Any omitted field stays unchanged.",
56
+ parameters: {
57
+ type: "object",
58
+ properties: {
59
+ runId: {
60
+ type: "string",
61
+ description: "The id returned by `start-run`.",
62
+ },
63
+ percent: {
64
+ type: "number",
65
+ description: "Progress 0–100. Omit if the task has no known upper bound.",
66
+ },
67
+ step: {
68
+ type: "string",
69
+ description: 'Current step, e.g. "Drafting reply 23/100".',
70
+ },
71
+ },
72
+ required: ["runId"],
73
+ },
74
+ },
75
+ run: async (args) => {
76
+ const owner = getCurrentUser();
77
+ const runId = String(args.runId ?? "");
78
+ if (!runId)
79
+ return "Error: --runId is required.";
80
+ const percent = args.percent == null ? undefined : Number(args.percent);
81
+ const run = await updateRunProgress(runId, owner, {
82
+ percent,
83
+ step: args.step ? String(args.step) : undefined,
84
+ });
85
+ if (!run)
86
+ return `Error: run ${runId} not found.`;
87
+ return `Run updated (percent=${run.percent ?? "?"}, step=${run.step ?? ""}).`;
88
+ },
89
+ },
90
+ "complete-run": {
91
+ tool: {
92
+ description: "Mark a task as finished. Use `succeeded` for a clean finish, `failed` when something went wrong, `cancelled` when the user interrupted. Pairs well with `notify` to tell the user the outcome.",
93
+ parameters: {
94
+ type: "object",
95
+ properties: {
96
+ runId: {
97
+ type: "string",
98
+ description: "The id returned by `start-run`.",
99
+ },
100
+ status: {
101
+ type: "string",
102
+ enum: ["succeeded", "failed", "cancelled"],
103
+ description: "Terminal status.",
104
+ },
105
+ step: {
106
+ type: "string",
107
+ description: "Optional final step text.",
108
+ },
109
+ },
110
+ required: ["runId", "status"],
111
+ },
112
+ },
113
+ run: async (args) => {
114
+ const owner = getCurrentUser();
115
+ if (!args.runId || !args.status) {
116
+ return "Error: --runId and --status are required.";
117
+ }
118
+ const run = await completeRun(args.runId, owner, args.status, args.step ? { step: args.step } : undefined);
119
+ if (!run)
120
+ return `Error: run ${args.runId} not found.`;
121
+ return `Run ${run.id} completed with status=${run.status}.`;
122
+ },
123
+ },
124
+ "list-runs": {
125
+ tool: {
126
+ description: "List the user's recent runs. Use when the user asks 'what is still running' or 'what did you do earlier'.",
127
+ parameters: {
128
+ type: "object",
129
+ properties: {
130
+ active: {
131
+ type: "boolean",
132
+ description: "When true, only return runs still in progress.",
133
+ },
134
+ limit: {
135
+ type: "number",
136
+ description: "Max rows (default 20, max 200).",
137
+ },
138
+ },
139
+ },
140
+ },
141
+ run: async (args) => {
142
+ const owner = getCurrentUser();
143
+ const rows = await listRuns(owner, {
144
+ activeOnly: args.active === true || args.active === "true",
145
+ limit: Math.min(Number(args.limit ?? 20), 200),
146
+ });
147
+ if (rows.length === 0) {
148
+ return args.active ? "No active runs." : "No runs.";
149
+ }
150
+ return rows
151
+ .map((r) => `[${r.status}] ${r.title}${r.percent != null ? ` · ${r.percent}%` : ""}${r.step ? ` — ${r.step}` : ""} · ${r.startedAt}`)
152
+ .join("\n");
153
+ },
154
+ readOnly: true,
155
+ },
156
+ };
157
+ }
158
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/progress/actions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,QAAQ,GACT,MAAM,eAAe,CAAC;AAEvB,MAAM,UAAU,yBAAyB,CACvC,cAA4B;IAE5B,OAAO;QACL,WAAW,EAAE;YACX,IAAI,EAAE;gBACJ,WAAW,EACT,yNAAyN;gBAC3N,UAAU,EAAE;oBACV,IAAI,EAAE,QAAiB;oBACvB,UAAU,EAAE;wBACV,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,8DAA8D;yBACjE;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,kDAAkD;yBAChE;wBACD,YAAY,EAAE;4BACZ,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,8DAA8D;yBACjE;qBACF;oBACD,QAAQ,EAAE,CAAC,OAAO,CAAC;iBACpB;aACF;YACD,GAAG,EAAE,KAAK,EAAE,IAA4B,EAAE,EAAE;gBAC1C,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,KAAK;oBAAE,OAAO,6BAA6B,CAAC;gBACtD,IAAI,QAA6C,CAAC;gBAClD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,IAAI,CAAC;wBACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAC3C,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,yCAAyC,CAAC;oBACnD,CAAC;gBACH,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC;oBACzB,KAAK;oBACL,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS;oBAC5B,QAAQ;iBACT,CAAC,CAAC;gBACH,OAAO,sBAAsB,GAAG,CAAC,EAAE,EAAE,CAAC;YACxC,CAAC;SACF;QAED,qBAAqB,EAAE;YACrB,IAAI,EAAE;gBACJ,WAAW,EACT,0JAA0J;gBAC5J,UAAU,EAAE;oBACV,IAAI,EAAE,QAAiB;oBACvB,UAAU,EAAE;wBACV,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,iCAAiC;yBAC/C;wBACD,OAAO,EAAE;4BACP,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,4DAA4D;yBAC/D;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,6CAA6C;yBAC3D;qBACF;oBACD,QAAQ,EAAE,CAAC,OAAO,CAAC;iBACpB;aACF;YACD,GAAG,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;gBAC3C,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBACvC,IAAI,CAAC,KAAK;oBAAE,OAAO,6BAA6B,CAAC;gBACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxE,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE;oBAChD,OAAO;oBACP,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;iBAChD,CAAC,CAAC;gBACH,IAAI,CAAC,GAAG;oBAAE,OAAO,cAAc,KAAK,aAAa,CAAC;gBAClD,OAAO,wBAAwB,GAAG,CAAC,OAAO,IAAI,GAAG,UAAU,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC;YAChF,CAAC;SACF;QAED,cAAc,EAAE;YACd,IAAI,EAAE;gBACJ,WAAW,EACT,gMAAgM;gBAClM,UAAU,EAAE;oBACV,IAAI,EAAE,QAAiB;oBACvB,UAAU,EAAE;wBACV,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,iCAAiC;yBAC/C;wBACD,MAAM,EAAE;4BACN,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC;4BAC1C,WAAW,EAAE,kBAAkB;yBAChC;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,2BAA2B;yBACzC;qBACF;oBACD,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;iBAC9B;aACF;YACD,GAAG,EAAE,KAAK,EAAE,IAA4B,EAAE,EAAE;gBAC1C,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChC,OAAO,2CAA2C,CAAC;gBACrD,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,WAAW,CAC3B,IAAI,CAAC,KAAK,EACV,KAAK,EACL,IAAI,CAAC,MAA8C,EACnD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAC5C,CAAC;gBACF,IAAI,CAAC,GAAG;oBAAE,OAAO,cAAc,IAAI,CAAC,KAAK,aAAa,CAAC;gBACvD,OAAO,OAAO,GAAG,CAAC,EAAE,0BAA0B,GAAG,CAAC,MAAM,GAAG,CAAC;YAC9D,CAAC;SACF;QAED,WAAW,EAAE;YACX,IAAI,EAAE;gBACJ,WAAW,EACT,2GAA2G;gBAC7G,UAAU,EAAE;oBACV,IAAI,EAAE,QAAiB;oBACvB,UAAU,EAAE;wBACV,MAAM,EAAE;4BACN,IAAI,EAAE,SAAS;4BACf,WAAW,EAAE,gDAAgD;yBAC9D;wBACD,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,iCAAiC;yBAC/C;qBACF;iBACF;aACF;YACD,GAAG,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;gBAC3C,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE;oBACjC,UAAU,EAAE,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;oBAC1D,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC;iBAC/C,CAAC,CAAC;gBACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACtB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC;gBACtD,CAAC;gBACD,OAAO,IAAI;qBACR,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE,CAC3H;qBACA,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;YACD,QAAQ,EAAE,IAAI;SACf;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type { AgentRun, ProgressStatus, StartRunInput, UpdateProgressInput, ListRunsOptions, } from "./types.js";
2
+ export { startRun, updateRunProgress, completeRun, getRun, listRuns, deleteRun, } from "./registry.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/progress/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,MAAM,EACN,QAAQ,EACR,SAAS,GACV,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { startRun, updateRunProgress, completeRun, getRun, listRuns, deleteRun, } from "./registry.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/progress/index.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,MAAM,EACN,QAAQ,EACR,SAAS,GACV,MAAM,eAAe,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { getRun, listRuns, deleteRun } from "./store.js";
2
+ import { type AgentRun, type StartRunInput, type UpdateProgressInput } from "./types.js";
3
+ /**
4
+ * Start a new run. Emits `run.progress.started` on the event bus so
5
+ * automations can react (e.g. pinning the row in a UI tray).
6
+ */
7
+ export declare function startRun(input: StartRunInput): Promise<AgentRun>;
8
+ /**
9
+ * Update a run in-flight. Emits `run.progress.updated`. Caller supplies
10
+ * partial fields — any omitted field stays unchanged.
11
+ */
12
+ export declare function updateRunProgress(id: string, owner: string, input: UpdateProgressInput): Promise<AgentRun | null>;
13
+ /**
14
+ * Finalize a run with a terminal status. Convenience wrapper around
15
+ * `updateRunProgress` that ensures `completed_at` is set.
16
+ */
17
+ export declare function completeRun(id: string, owner: string, status: "succeeded" | "failed" | "cancelled", extras?: {
18
+ step?: string;
19
+ metadata?: Record<string, unknown>;
20
+ }): Promise<AgentRun | null>;
21
+ export { getRun, listRuns, deleteRun };
22
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/progress/registry.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AAwCpB;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoBtE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAqB1B;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,EAC5C,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC7D,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAO1B;AAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { z } from "zod";
2
+ import { emit as emitBusEvent } from "../event-bus/bus.js";
3
+ import { registerEvent } from "../event-bus/registry.js";
4
+ import { insertRun, updateRun, getRun, listRuns, deleteRun } from "./store.js";
5
+ import { PROGRESS_STATUSES, } from "./types.js";
6
+ import { truncate } from "../shared/truncate.js";
7
+ registerEvent({
8
+ name: "run.progress.started",
9
+ description: "Fires when a long-running agent task begins. Pair with run.progress.updated to build watchdogs for stuck work.",
10
+ payloadSchema: z.object({
11
+ runId: z.string(),
12
+ title: z.string(),
13
+ step: z.string().optional(),
14
+ }),
15
+ example: {
16
+ runId: "run_abc",
17
+ title: "Triage 128 unread emails",
18
+ step: "Fetching inbox",
19
+ },
20
+ });
21
+ registerEvent({
22
+ name: "run.progress.updated",
23
+ description: "Fires on every progress update or terminal transition. Subscribe to watch for slow runs (status=running and elapsed > N) or fan terminal status to a notification.",
24
+ payloadSchema: z.object({
25
+ runId: z.string(),
26
+ percent: z.number().nullable(),
27
+ step: z.string().optional(),
28
+ status: z.enum(PROGRESS_STATUSES),
29
+ }),
30
+ example: {
31
+ runId: "run_abc",
32
+ percent: 45,
33
+ step: "Classifying 56/128",
34
+ status: "running",
35
+ },
36
+ });
37
+ const MAX_TITLE_LEN = 100;
38
+ const MAX_STEP_LEN = 200;
39
+ /**
40
+ * Start a new run. Emits `run.progress.started` on the event bus so
41
+ * automations can react (e.g. pinning the row in a UI tray).
42
+ */
43
+ export async function startRun(input) {
44
+ const run = await insertRun({
45
+ ...input,
46
+ title: truncate(input.title, MAX_TITLE_LEN),
47
+ step: truncate(input.step, MAX_STEP_LEN),
48
+ });
49
+ try {
50
+ emitBusEvent("run.progress.started", {
51
+ runId: run.id,
52
+ title: run.title,
53
+ step: run.step,
54
+ }, { owner: run.owner });
55
+ }
56
+ catch {
57
+ // best-effort
58
+ }
59
+ return run;
60
+ }
61
+ /**
62
+ * Update a run in-flight. Emits `run.progress.updated`. Caller supplies
63
+ * partial fields — any omitted field stays unchanged.
64
+ */
65
+ export async function updateRunProgress(id, owner, input) {
66
+ const run = await updateRun(id, owner, {
67
+ ...input,
68
+ step: truncate(input.step, MAX_STEP_LEN),
69
+ });
70
+ if (!run)
71
+ return null;
72
+ try {
73
+ emitBusEvent("run.progress.updated", {
74
+ runId: run.id,
75
+ percent: run.percent,
76
+ step: run.step,
77
+ status: run.status,
78
+ }, { owner: run.owner });
79
+ }
80
+ catch {
81
+ // best-effort
82
+ }
83
+ return run;
84
+ }
85
+ /**
86
+ * Finalize a run with a terminal status. Convenience wrapper around
87
+ * `updateRunProgress` that ensures `completed_at` is set.
88
+ */
89
+ export async function completeRun(id, owner, status, extras) {
90
+ return updateRunProgress(id, owner, {
91
+ status,
92
+ percent: status === "succeeded" ? 100 : undefined,
93
+ step: extras?.step,
94
+ metadata: extras?.metadata,
95
+ });
96
+ }
97
+ export { getRun, listRuns, deleteRun };
98
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/progress/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * H3 event handlers for the agent-runs progress primitive.
3
+ *
4
+ * Mounted under `/_agent-native/runs/*` by `core-routes-plugin`.
5
+ *
6
+ * GET /_agent-native/runs?active=true&limit=50
7
+ * GET /_agent-native/runs/:id
8
+ * DELETE /_agent-native/runs/:id
9
+ *
10
+ * Writes happen through the `update-run-progress` agent tool, not HTTP —
11
+ * the agent is the canonical writer, the UI only reads. (We can add write
12
+ * routes later if a non-agent producer needs them.)
13
+ */
14
+ export declare function createProgressHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<import("./types.js").AgentRun | import("./types.js").AgentRun[] | {
15
+ error: string;
16
+ ok?: undefined;
17
+ } | {
18
+ ok: boolean;
19
+ error?: undefined;
20
+ }>>;
21
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/progress/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAiBH,wBAAgB,qBAAqB;;;;;;IAyCpC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * H3 event handlers for the agent-runs progress primitive.
3
+ *
4
+ * Mounted under `/_agent-native/runs/*` by `core-routes-plugin`.
5
+ *
6
+ * GET /_agent-native/runs?active=true&limit=50
7
+ * GET /_agent-native/runs/:id
8
+ * DELETE /_agent-native/runs/:id
9
+ *
10
+ * Writes happen through the `update-run-progress` agent tool, not HTTP —
11
+ * the agent is the canonical writer, the UI only reads. (We can add write
12
+ * routes later if a non-agent producer needs them.)
13
+ */
14
+ import { defineEventHandler, getMethod, getQuery, setResponseStatus, } from "h3";
15
+ import { getSession } from "../server/auth.js";
16
+ import { listRuns, getRun, deleteRun } from "./store.js";
17
+ async function resolveOwner(event) {
18
+ const session = await getSession(event).catch(() => null);
19
+ return session?.email || "local@localhost";
20
+ }
21
+ export function createProgressHandler() {
22
+ return defineEventHandler(async (event) => {
23
+ const method = getMethod(event);
24
+ const pathname = (event.url?.pathname || "")
25
+ .replace(/^\/+/, "")
26
+ .replace(/\/+$/, "");
27
+ const parts = pathname ? pathname.split("/") : [];
28
+ const owner = await resolveOwner(event);
29
+ // GET / — list
30
+ if (method === "GET" && parts.length === 0) {
31
+ const q = getQuery(event);
32
+ return listRuns(owner, {
33
+ activeOnly: q.active === "true" || q.active === "1",
34
+ limit: q.limit ? Math.min(Number(q.limit) || 50, 200) : 50,
35
+ });
36
+ }
37
+ // GET /:id
38
+ if (method === "GET" && parts.length === 1) {
39
+ const row = await getRun(parts[0], owner);
40
+ if (!row) {
41
+ setResponseStatus(event, 404);
42
+ return { error: "Not found" };
43
+ }
44
+ return row;
45
+ }
46
+ // DELETE /:id
47
+ if (method === "DELETE" && parts.length === 1) {
48
+ const ok = await deleteRun(parts[0], owner);
49
+ if (!ok) {
50
+ setResponseStatus(event, 404);
51
+ return { error: "Not found" };
52
+ }
53
+ return { ok: true };
54
+ }
55
+ setResponseStatus(event, 404);
56
+ return { error: "Not found" };
57
+ });
58
+ }
59
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/progress/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,kBAAkB,EAClB,SAAS,EACT,QAAQ,EACR,iBAAiB,GAElB,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzD,KAAK,UAAU,YAAY,CAAC,KAAc;IACxC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,OAAO,EAAE,KAAK,IAAI,iBAAiB,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,kBAAkB,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;QACjD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,IAAI,EAAE,CAAC;aACzC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;aACnB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;QAExC,gBAAgB;QAChB,IAAI,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO,QAAQ,CAAC,KAAK,EAAE;gBACrB,UAAU,EAAE,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG;gBACnD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;aAC3D,CAAC,CAAC;QACL,CAAC;QAED,WAAW;QACX,IAAI,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YAChC,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,cAAc;QACd,IAAI,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YAChC,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QACtB,CAAC;QAED,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { AgentRun, ListRunsOptions, StartRunInput, UpdateProgressInput } from "./types.js";
2
+ export declare function insertRun(input: StartRunInput): Promise<AgentRun>;
3
+ export declare function getRun(id: string, owner: string): Promise<AgentRun | null>;
4
+ export declare function updateRun(id: string, owner: string, input: UpdateProgressInput): Promise<AgentRun | null>;
5
+ export declare function listRuns(owner: string, options?: ListRunsOptions): Promise<AgentRun[]>;
6
+ export declare function deleteRun(id: string, owner: string): Promise<boolean>;
7
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/progress/store.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EAEf,aAAa,EACb,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAyEpB,wBAAsB,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAyCvE;AAED,wBAAsB,MAAM,CAC1B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAS1B;AAED,wBAAsB,SAAS,CAC7B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAmD1B;AAOD,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,QAAQ,EAAE,CAAC,CAarB;AAED,wBAAsB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAW3E"}
@@ -0,0 +1,195 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { getDbExec, intType, isUniqueViolation, retryOnDdlRace, safeJsonParse, } from "../db/client.js";
3
+ import { recordChange } from "../server/poll.js";
4
+ function bumpPoll(owner) {
5
+ recordChange({ source: "runs", type: "change", key: owner });
6
+ }
7
+ let _initPromise;
8
+ async function ensureTable() {
9
+ if (!_initPromise) {
10
+ _initPromise = (async () => {
11
+ const client = getDbExec();
12
+ await retryOnDdlRace(() => client.execute(`
13
+ CREATE TABLE IF NOT EXISTS progress_runs (
14
+ id TEXT PRIMARY KEY,
15
+ owner TEXT NOT NULL,
16
+ title TEXT NOT NULL,
17
+ step TEXT,
18
+ percent ${intType()},
19
+ status TEXT NOT NULL DEFAULT 'running',
20
+ metadata TEXT,
21
+ started_at ${intType()} NOT NULL,
22
+ updated_at ${intType()} NOT NULL,
23
+ completed_at ${intType()}
24
+ )
25
+ `));
26
+ await retryOnDdlRace(() => client.execute(`CREATE INDEX IF NOT EXISTS idx_progress_runs_owner_status ON progress_runs (owner, status, started_at)`));
27
+ // NOTE: table name is `progress_runs` (not `agent_runs`) to avoid
28
+ // colliding with core's existing agent/run-store.ts which uses
29
+ // `agent_runs` for agent-chat turn lifecycle tracking. These are
30
+ // separate concerns — progress = user-facing task status, agent_runs =
31
+ // internal chat turn bookkeeping.
32
+ })().catch((err) => {
33
+ // Reset on failure so a transient DB outage doesn't poison the cached
34
+ // promise and reject every future insert/update call for the lifetime
35
+ // of the process.
36
+ _initPromise = undefined;
37
+ throw err;
38
+ });
39
+ }
40
+ return _initPromise;
41
+ }
42
+ function parseRow(row) {
43
+ const percent = row.percent;
44
+ return {
45
+ id: String(row.id),
46
+ owner: String(row.owner),
47
+ title: String(row.title),
48
+ step: row.step == null ? undefined : String(row.step),
49
+ percent: percent == null ? null : Number(percent),
50
+ status: String(row.status),
51
+ metadata: row.metadata
52
+ ? safeJsonParse(row.metadata, undefined)
53
+ : undefined,
54
+ startedAt: new Date(Number(row.started_at)).toISOString(),
55
+ updatedAt: new Date(Number(row.updated_at)).toISOString(),
56
+ completedAt: row.completed_at == null
57
+ ? null
58
+ : new Date(Number(row.completed_at)).toISOString(),
59
+ };
60
+ }
61
+ export async function insertRun(input) {
62
+ await ensureTable();
63
+ const client = getDbExec();
64
+ const id = input.id ?? randomUUID();
65
+ const now = Date.now();
66
+ try {
67
+ await client.execute({
68
+ sql: `INSERT INTO progress_runs
69
+ (id, owner, title, step, percent, status, metadata, started_at, updated_at, completed_at)
70
+ VALUES (?, ?, ?, ?, NULL, 'running', ?, ?, ?, NULL)`,
71
+ args: [
72
+ id,
73
+ input.owner,
74
+ input.title,
75
+ input.step ?? null,
76
+ input.metadata ? JSON.stringify(input.metadata) : null,
77
+ now,
78
+ now,
79
+ ],
80
+ });
81
+ }
82
+ catch (err) {
83
+ if (input.id && isUniqueViolation(err)) {
84
+ throw new Error(`insertRun: run id "${input.id}" already exists for this owner`);
85
+ }
86
+ throw err;
87
+ }
88
+ bumpPoll(input.owner);
89
+ return {
90
+ id,
91
+ owner: input.owner,
92
+ title: input.title,
93
+ step: input.step,
94
+ percent: null,
95
+ status: "running",
96
+ metadata: input.metadata,
97
+ startedAt: new Date(now).toISOString(),
98
+ updatedAt: new Date(now).toISOString(),
99
+ completedAt: null,
100
+ };
101
+ }
102
+ export async function getRun(id, owner) {
103
+ await ensureTable();
104
+ const client = getDbExec();
105
+ const { rows } = await client.execute({
106
+ sql: `SELECT * FROM progress_runs WHERE id = ? AND owner = ?`,
107
+ args: [id, owner],
108
+ });
109
+ if (rows.length === 0)
110
+ return null;
111
+ return parseRow(rows[0]);
112
+ }
113
+ export async function updateRun(id, owner, input) {
114
+ await ensureTable();
115
+ const client = getDbExec();
116
+ // Read current row first so we can return a consistent snapshot of this
117
+ // caller's update (avoids the UPDATE→SELECT race where a concurrent writer
118
+ // could have their change reflected in the returned value).
119
+ const current = await getRun(id, owner);
120
+ if (!current)
121
+ return null;
122
+ const now = Date.now();
123
+ const sets = ["updated_at = ?"];
124
+ const args = [now];
125
+ const next = {
126
+ ...current,
127
+ updatedAt: new Date(now).toISOString(),
128
+ };
129
+ if (Object.prototype.hasOwnProperty.call(input, "percent")) {
130
+ const percent = input.percent == null ? null : clampPercent(input.percent);
131
+ sets.push("percent = ?");
132
+ args.push(percent);
133
+ next.percent = percent;
134
+ }
135
+ if (input.step !== undefined) {
136
+ sets.push("step = ?");
137
+ args.push(input.step);
138
+ next.step = input.step;
139
+ }
140
+ if (input.metadata !== undefined) {
141
+ sets.push("metadata = ?");
142
+ args.push(JSON.stringify(input.metadata));
143
+ next.metadata = input.metadata;
144
+ }
145
+ if (input.status !== undefined) {
146
+ sets.push("status = ?");
147
+ args.push(input.status);
148
+ next.status = input.status;
149
+ if (input.status !== "running") {
150
+ sets.push("completed_at = ?");
151
+ args.push(now);
152
+ next.completedAt = new Date(now).toISOString();
153
+ }
154
+ }
155
+ args.push(id, owner);
156
+ await client.execute({
157
+ sql: `UPDATE progress_runs SET ${sets.join(", ")} WHERE id = ? AND owner = ?`,
158
+ args,
159
+ });
160
+ bumpPoll(owner);
161
+ return next;
162
+ }
163
+ function clampPercent(n) {
164
+ if (Number.isNaN(n))
165
+ return 0;
166
+ return Math.max(0, Math.min(100, Math.round(n)));
167
+ }
168
+ export async function listRuns(owner, options = {}) {
169
+ await ensureTable();
170
+ const client = getDbExec();
171
+ const limit = Math.min(options.limit ?? 50, 200);
172
+ let where = `owner = ?`;
173
+ const args = [owner];
174
+ if (options.activeOnly)
175
+ where += ` AND status = 'running'`;
176
+ args.push(limit);
177
+ const { rows } = await client.execute({
178
+ sql: `SELECT * FROM progress_runs WHERE ${where} ORDER BY started_at DESC LIMIT ?`,
179
+ args,
180
+ });
181
+ return rows.map((r) => parseRow(r));
182
+ }
183
+ export async function deleteRun(id, owner) {
184
+ await ensureTable();
185
+ const client = getDbExec();
186
+ const res = await client.execute({
187
+ sql: `DELETE FROM progress_runs WHERE id = ? AND owner = ?`,
188
+ args: [id, owner],
189
+ });
190
+ const deleted = res.rowsAffected !== 0;
191
+ if (deleted)
192
+ bumpPoll(owner);
193
+ return deleted;
194
+ }
195
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/progress/store.ts"],"names":[],"mappings":"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"}