@agent-native/core 0.7.11 → 0.7.13

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 (327) hide show
  1. package/README.md +1 -1
  2. package/dist/action.js +30 -11
  3. package/dist/action.js.map +1 -1
  4. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  5. package/dist/agent/engine/ai-sdk-engine.js +26 -8
  6. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  7. package/dist/agent/engine/builder-engine.d.ts +19 -0
  8. package/dist/agent/engine/builder-engine.d.ts.map +1 -0
  9. package/dist/agent/engine/builder-engine.js +430 -0
  10. package/dist/agent/engine/builder-engine.js.map +1 -0
  11. package/dist/agent/engine/builtin.d.ts.map +1 -1
  12. package/dist/agent/engine/builtin.js +26 -10
  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 +37 -0
  23. package/dist/agent/engine/registry.d.ts.map +1 -1
  24. package/dist/agent/engine/registry.js +102 -4
  25. package/dist/agent/engine/registry.js.map +1 -1
  26. package/dist/agent/engine/types.d.ts +30 -0
  27. package/dist/agent/engine/types.d.ts.map +1 -1
  28. package/dist/agent/engine/types.js +19 -1
  29. package/dist/agent/engine/types.js.map +1 -1
  30. package/dist/agent/production-agent.d.ts +7 -1
  31. package/dist/agent/production-agent.d.ts.map +1 -1
  32. package/dist/agent/production-agent.js +67 -15
  33. package/dist/agent/production-agent.js.map +1 -1
  34. package/dist/agent/run-manager.d.ts.map +1 -1
  35. package/dist/agent/run-manager.js +11 -1
  36. package/dist/agent/run-manager.js.map +1 -1
  37. package/dist/agent/thread-data-builder.d.ts +4 -0
  38. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  39. package/dist/agent/thread-data-builder.js +1 -0
  40. package/dist/agent/thread-data-builder.js.map +1 -1
  41. package/dist/agent/types.d.ts +8 -0
  42. package/dist/agent/types.d.ts.map +1 -1
  43. package/dist/checkpoints/service.d.ts +1 -0
  44. package/dist/checkpoints/service.d.ts.map +1 -1
  45. package/dist/checkpoints/service.js +26 -2
  46. package/dist/checkpoints/service.js.map +1 -1
  47. package/dist/cli/create.d.ts +30 -0
  48. package/dist/cli/create.d.ts.map +1 -1
  49. package/dist/cli/create.js +127 -10
  50. package/dist/cli/create.js.map +1 -1
  51. package/dist/cli/index.js +19 -2
  52. package/dist/cli/index.js.map +1 -1
  53. package/dist/cli/templates-meta.d.ts +2 -0
  54. package/dist/cli/templates-meta.d.ts.map +1 -1
  55. package/dist/cli/templates-meta.js +2 -0
  56. package/dist/cli/templates-meta.js.map +1 -1
  57. package/dist/cli/workspacify.d.ts.map +1 -1
  58. package/dist/cli/workspacify.js +7 -3
  59. package/dist/cli/workspacify.js.map +1 -1
  60. package/dist/client/AgentPanel.js +1 -1
  61. package/dist/client/AgentPanel.js.map +1 -1
  62. package/dist/client/AssistantChat.d.ts.map +1 -1
  63. package/dist/client/AssistantChat.js +93 -37
  64. package/dist/client/AssistantChat.js.map +1 -1
  65. package/dist/client/ConnectBuilderCard.d.ts +1 -7
  66. package/dist/client/ConnectBuilderCard.d.ts.map +1 -1
  67. package/dist/client/ConnectBuilderCard.js +30 -132
  68. package/dist/client/ConnectBuilderCard.js.map +1 -1
  69. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  70. package/dist/client/MultiTabAssistantChat.js +58 -26
  71. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  72. package/dist/client/analytics.d.ts +5 -8
  73. package/dist/client/analytics.d.ts.map +1 -1
  74. package/dist/client/analytics.js +53 -11
  75. package/dist/client/analytics.js.map +1 -1
  76. package/dist/client/builder-mark.d.ts +9 -0
  77. package/dist/client/builder-mark.d.ts.map +1 -0
  78. package/dist/client/builder-mark.js +10 -0
  79. package/dist/client/builder-mark.js.map +1 -0
  80. package/dist/client/components/ui/popover.d.ts +8 -0
  81. package/dist/client/components/ui/popover.d.ts.map +1 -0
  82. package/dist/client/components/ui/popover.js +11 -0
  83. package/dist/client/components/ui/popover.js.map +1 -0
  84. package/dist/client/composer/ComposerPlusMenu.d.ts +2 -0
  85. package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -0
  86. package/dist/client/composer/ComposerPlusMenu.js +244 -0
  87. package/dist/client/composer/ComposerPlusMenu.js.map +1 -0
  88. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  89. package/dist/client/composer/TiptapComposer.js +25 -7
  90. package/dist/client/composer/TiptapComposer.js.map +1 -1
  91. package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
  92. package/dist/client/composer/useVoiceDictation.js +4 -2
  93. package/dist/client/composer/useVoiceDictation.js.map +1 -1
  94. package/dist/client/error-format.d.ts +2 -0
  95. package/dist/client/error-format.d.ts.map +1 -0
  96. package/dist/client/error-format.js +31 -0
  97. package/dist/client/error-format.js.map +1 -0
  98. package/dist/client/index.d.ts +3 -1
  99. package/dist/client/index.d.ts.map +1 -1
  100. package/dist/client/index.js +3 -1
  101. package/dist/client/index.js.map +1 -1
  102. package/dist/client/observability/ObservabilityDashboard.d.ts +5 -0
  103. package/dist/client/observability/ObservabilityDashboard.d.ts.map +1 -0
  104. package/dist/client/observability/ObservabilityDashboard.js +169 -0
  105. package/dist/client/observability/ObservabilityDashboard.js.map +1 -0
  106. package/dist/client/observability/ThumbsFeedback.d.ts +8 -0
  107. package/dist/client/observability/ThumbsFeedback.d.ts.map +1 -0
  108. package/dist/client/observability/ThumbsFeedback.js +64 -0
  109. package/dist/client/observability/ThumbsFeedback.js.map +1 -0
  110. package/dist/client/observability/index.d.ts +4 -0
  111. package/dist/client/observability/index.d.ts.map +1 -0
  112. package/dist/client/observability/index.js +4 -0
  113. package/dist/client/observability/index.js.map +1 -0
  114. package/dist/client/observability/useObservability.d.ts +128 -0
  115. package/dist/client/observability/useObservability.d.ts.map +1 -0
  116. package/dist/client/observability/useObservability.js +109 -0
  117. package/dist/client/observability/useObservability.js.map +1 -0
  118. package/dist/client/onboarding/OnboardingPanel.d.ts.map +1 -1
  119. package/dist/client/onboarding/OnboardingPanel.js +34 -92
  120. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  121. package/dist/client/org/RequireActiveOrg.d.ts +33 -0
  122. package/dist/client/org/RequireActiveOrg.d.ts.map +1 -0
  123. package/dist/client/org/RequireActiveOrg.js +63 -0
  124. package/dist/client/org/RequireActiveOrg.js.map +1 -0
  125. package/dist/client/org/hooks.d.ts.map +1 -1
  126. package/dist/client/org/hooks.js +50 -15
  127. package/dist/client/org/hooks.js.map +1 -1
  128. package/dist/client/org/index.d.ts +1 -0
  129. package/dist/client/org/index.d.ts.map +1 -1
  130. package/dist/client/org/index.js +1 -0
  131. package/dist/client/org/index.js.map +1 -1
  132. package/dist/client/resources/ResourcesPanel.js +3 -3
  133. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  134. package/dist/client/settings/AutomationsSection.js +1 -1
  135. package/dist/client/settings/AutomationsSection.js.map +1 -1
  136. package/dist/client/settings/BrowserSection.js +1 -1
  137. package/dist/client/settings/BrowserSection.js.map +1 -1
  138. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  139. package/dist/client/settings/SettingsPanel.js +251 -42
  140. package/dist/client/settings/SettingsPanel.js.map +1 -1
  141. package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
  142. package/dist/client/settings/VoiceTranscriptionSection.js +10 -4
  143. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
  144. package/dist/client/settings/useBuilderStatus.d.ts +26 -0
  145. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  146. package/dist/client/settings/useBuilderStatus.js +128 -4
  147. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  148. package/dist/client/sse-event-processor.d.ts +2 -0
  149. package/dist/client/sse-event-processor.d.ts.map +1 -1
  150. package/dist/client/sse-event-processor.js +6 -2
  151. package/dist/client/sse-event-processor.js.map +1 -1
  152. package/dist/client/transcription/BuilderTranscriptionCta.d.ts +9 -0
  153. package/dist/client/transcription/BuilderTranscriptionCta.d.ts.map +1 -0
  154. package/dist/client/transcription/BuilderTranscriptionCta.js +18 -0
  155. package/dist/client/transcription/BuilderTranscriptionCta.js.map +1 -0
  156. package/dist/client/transcription/use-live-transcription.d.ts +29 -0
  157. package/dist/client/transcription/use-live-transcription.d.ts.map +1 -0
  158. package/dist/client/transcription/use-live-transcription.js +156 -0
  159. package/dist/client/transcription/use-live-transcription.js.map +1 -0
  160. package/dist/client/use-builder-enabled.d.ts +17 -0
  161. package/dist/client/use-builder-enabled.d.ts.map +1 -0
  162. package/dist/client/use-builder-enabled.js +36 -0
  163. package/dist/client/use-builder-enabled.js.map +1 -0
  164. package/dist/client/use-db-sync.d.ts.map +1 -1
  165. package/dist/client/use-db-sync.js +4 -2
  166. package/dist/client/use-db-sync.js.map +1 -1
  167. package/dist/client/useProductionAgent.d.ts.map +1 -1
  168. package/dist/client/useProductionAgent.js +3 -1
  169. package/dist/client/useProductionAgent.js.map +1 -1
  170. package/dist/db/migrations.d.ts +9 -0
  171. package/dist/db/migrations.d.ts.map +1 -1
  172. package/dist/db/migrations.js +75 -10
  173. package/dist/db/migrations.js.map +1 -1
  174. package/dist/file-upload/builder.d.ts.map +1 -1
  175. package/dist/file-upload/builder.js +11 -4
  176. package/dist/file-upload/builder.js.map +1 -1
  177. package/dist/jobs/tools.d.ts.map +1 -1
  178. package/dist/jobs/tools.js +137 -161
  179. package/dist/jobs/tools.js.map +1 -1
  180. package/dist/notifications/actions.d.ts +2 -2
  181. package/dist/notifications/actions.d.ts.map +1 -1
  182. package/dist/notifications/actions.js +77 -69
  183. package/dist/notifications/actions.js.map +1 -1
  184. package/dist/observability/evals.d.ts +22 -0
  185. package/dist/observability/evals.d.ts.map +1 -0
  186. package/dist/observability/evals.js +371 -0
  187. package/dist/observability/evals.js.map +1 -0
  188. package/dist/observability/experiments.d.ts +24 -0
  189. package/dist/observability/experiments.d.ts.map +1 -0
  190. package/dist/observability/experiments.js +274 -0
  191. package/dist/observability/experiments.js.map +1 -0
  192. package/dist/observability/feedback.d.ts +14 -0
  193. package/dist/observability/feedback.d.ts.map +1 -0
  194. package/dist/observability/feedback.js +256 -0
  195. package/dist/observability/feedback.js.map +1 -0
  196. package/dist/observability/index.d.ts +6 -0
  197. package/dist/observability/index.d.ts.map +1 -0
  198. package/dist/observability/index.js +5 -0
  199. package/dist/observability/index.js.map +1 -0
  200. package/dist/observability/plugin.d.ts +2 -0
  201. package/dist/observability/plugin.d.ts.map +1 -0
  202. package/dist/observability/plugin.js +12 -0
  203. package/dist/observability/plugin.js.map +1 -0
  204. package/dist/observability/routes.d.ts +68 -0
  205. package/dist/observability/routes.d.ts.map +1 -0
  206. package/dist/observability/routes.js +301 -0
  207. package/dist/observability/routes.js.map +1 -0
  208. package/dist/observability/store.d.ts +77 -0
  209. package/dist/observability/store.d.ts.map +1 -0
  210. package/dist/observability/store.js +976 -0
  211. package/dist/observability/store.js.map +1 -0
  212. package/dist/observability/traces.d.ts +37 -0
  213. package/dist/observability/traces.d.ts.map +1 -0
  214. package/dist/observability/traces.js +182 -0
  215. package/dist/observability/traces.js.map +1 -0
  216. package/dist/observability/types.d.ts +159 -0
  217. package/dist/observability/types.d.ts.map +1 -0
  218. package/dist/observability/types.js +16 -0
  219. package/dist/observability/types.js.map +1 -0
  220. package/dist/onboarding/default-steps.d.ts.map +1 -1
  221. package/dist/onboarding/default-steps.js +68 -24
  222. package/dist/onboarding/default-steps.js.map +1 -1
  223. package/dist/onboarding/types.d.ts +10 -1
  224. package/dist/onboarding/types.d.ts.map +1 -1
  225. package/dist/org/context.d.ts +8 -1
  226. package/dist/org/context.d.ts.map +1 -1
  227. package/dist/org/context.js +163 -6
  228. package/dist/org/context.js.map +1 -1
  229. package/dist/org/handlers.d.ts.map +1 -1
  230. package/dist/org/handlers.js +49 -30
  231. package/dist/org/handlers.js.map +1 -1
  232. package/dist/progress/actions.d.ts +3 -0
  233. package/dist/progress/actions.d.ts.map +1 -1
  234. package/dist/progress/actions.js +86 -110
  235. package/dist/progress/actions.js.map +1 -1
  236. package/dist/progress/routes.d.ts +1 -1
  237. package/dist/progress/routes.js +1 -1
  238. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  239. package/dist/scripts/agent-engines/list-agent-engines.js +20 -6
  240. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  241. package/dist/scripts/agent-engines/manage-agent-engine.d.ts +10 -0
  242. package/dist/scripts/agent-engines/manage-agent-engine.d.ts.map +1 -0
  243. package/dist/scripts/agent-engines/manage-agent-engine.js +47 -0
  244. package/dist/scripts/agent-engines/manage-agent-engine.js.map +1 -0
  245. package/dist/scripts/agent-engines/set-agent-engine.d.ts.map +1 -1
  246. package/dist/scripts/agent-engines/set-agent-engine.js +10 -9
  247. package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -1
  248. package/dist/server/agent-chat-plugin.d.ts +39 -0
  249. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  250. package/dist/server/agent-chat-plugin.js +743 -452
  251. package/dist/server/agent-chat-plugin.js.map +1 -1
  252. package/dist/server/agent-teams.d.ts.map +1 -1
  253. package/dist/server/agent-teams.js +18 -7
  254. package/dist/server/agent-teams.js.map +1 -1
  255. package/dist/server/analytics.d.ts +9 -7
  256. package/dist/server/analytics.d.ts.map +1 -1
  257. package/dist/server/analytics.js +12 -11
  258. package/dist/server/analytics.js.map +1 -1
  259. package/dist/server/app-name.d.ts +5 -2
  260. package/dist/server/app-name.d.ts.map +1 -1
  261. package/dist/server/app-name.js +14 -3
  262. package/dist/server/app-name.js.map +1 -1
  263. package/dist/server/app-url.d.ts.map +1 -1
  264. package/dist/server/app-url.js +17 -5
  265. package/dist/server/app-url.js.map +1 -1
  266. package/dist/server/auth.d.ts +2 -0
  267. package/dist/server/auth.d.ts.map +1 -1
  268. package/dist/server/auth.js +153 -2
  269. package/dist/server/auth.js.map +1 -1
  270. package/dist/server/better-auth-instance.d.ts +2 -0
  271. package/dist/server/better-auth-instance.d.ts.map +1 -1
  272. package/dist/server/better-auth-instance.js +4 -0
  273. package/dist/server/better-auth-instance.js.map +1 -1
  274. package/dist/server/builder-browser.d.ts +59 -1
  275. package/dist/server/builder-browser.d.ts.map +1 -1
  276. package/dist/server/builder-browser.js +127 -11
  277. package/dist/server/builder-browser.js.map +1 -1
  278. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  279. package/dist/server/core-routes-plugin.js +278 -13
  280. package/dist/server/core-routes-plugin.js.map +1 -1
  281. package/dist/server/credential-provider.d.ts +7 -0
  282. package/dist/server/credential-provider.d.ts.map +1 -1
  283. package/dist/server/credential-provider.js +10 -0
  284. package/dist/server/credential-provider.js.map +1 -1
  285. package/dist/server/onboarding-html.d.ts.map +1 -1
  286. package/dist/server/onboarding-html.js +29 -4
  287. package/dist/server/onboarding-html.js.map +1 -1
  288. package/dist/server/poll.d.ts.map +1 -1
  289. package/dist/server/poll.js +46 -5
  290. package/dist/server/poll.js.map +1 -1
  291. package/dist/server/ssr-handler.d.ts.map +1 -1
  292. package/dist/server/ssr-handler.js +2 -1
  293. package/dist/server/ssr-handler.js.map +1 -1
  294. package/dist/server/transcribe-voice.d.ts.map +1 -1
  295. package/dist/server/transcribe-voice.js +44 -5
  296. package/dist/server/transcribe-voice.js.map +1 -1
  297. package/dist/styles/agent-native.css +11 -2
  298. package/dist/templates/default/.agents/skills/progress/SKILL.md +14 -12
  299. package/dist/templates/default/app/root.tsx +7 -0
  300. package/dist/templates/workspace-root/pnpm-workspace.yaml +6 -0
  301. package/dist/transcription/builder-transcription.d.ts +27 -0
  302. package/dist/transcription/builder-transcription.d.ts.map +1 -0
  303. package/dist/transcription/builder-transcription.js +41 -0
  304. package/dist/transcription/builder-transcription.js.map +1 -0
  305. package/dist/triggers/actions.d.ts +3 -0
  306. package/dist/triggers/actions.d.ts.map +1 -1
  307. package/dist/triggers/actions.js +189 -213
  308. package/dist/triggers/actions.js.map +1 -1
  309. package/docs/content/agent-mentions.md +1 -1
  310. package/docs/content/automations.md +22 -19
  311. package/docs/content/cloneable-saas.md +2 -2
  312. package/docs/content/deployment.md +21 -61
  313. package/docs/content/getting-started.md +1 -1
  314. package/docs/content/key-concepts.md +1 -1
  315. package/docs/content/{enterprise-workspace.md → multi-app-workspace.md} +3 -3
  316. package/docs/content/multi-tenancy.md +1 -1
  317. package/docs/content/progress.md +11 -11
  318. package/docs/content/template-dispatch.md +3 -3
  319. package/docs/content/workspace-management.md +1 -1
  320. package/package.json +13 -1
  321. package/src/templates/default/.agents/skills/progress/SKILL.md +14 -12
  322. package/src/templates/default/app/root.tsx +7 -0
  323. package/src/templates/workspace-root/pnpm-workspace.yaml +6 -0
  324. package/dist/client/settings/LLMSection.d.ts +0 -2
  325. package/dist/client/settings/LLMSection.d.ts.map +0 -1
  326. package/dist/client/settings/LLMSection.js +0 -191
  327. package/dist/client/settings/LLMSection.js.map +0 -1
@@ -5,203 +5,179 @@ import { getRequestUserEmail, getRequestOrgId, } from "../server/request-context
5
5
  function getOwner() {
6
6
  return getRequestUserEmail() || "local@localhost";
7
7
  }
8
+ async function runCreate(args) {
9
+ const { name, schedule, instructions, scope, runAs } = args;
10
+ if (!name || !schedule || !instructions) {
11
+ return JSON.stringify({
12
+ error: "name, schedule, and instructions are required",
13
+ });
14
+ }
15
+ if (!isValidCron(schedule)) {
16
+ return JSON.stringify({
17
+ error: `Invalid cron expression: "${schedule}". Use 5 fields: minute hour day-of-month month day-of-week.`,
18
+ });
19
+ }
20
+ const owner = scope === "personal" ? getOwner() : SHARED_OWNER;
21
+ const path = `jobs/${name}.md`;
22
+ const now = new Date();
23
+ const next = nextOccurrence(schedule, now);
24
+ const meta = {
25
+ schedule,
26
+ enabled: true,
27
+ createdBy: getOwner(),
28
+ orgId: getRequestOrgId() || undefined,
29
+ runAs: runAs === "shared" ? "shared" : "creator",
30
+ nextRun: next.toISOString(),
31
+ };
32
+ const content = buildJobContent(meta, instructions);
33
+ await resourcePut(owner, path, content);
34
+ return JSON.stringify({
35
+ created: true,
36
+ name,
37
+ path,
38
+ schedule,
39
+ scheduleDescription: describeCron(schedule),
40
+ nextRun: next.toISOString(),
41
+ scope: scope || "shared",
42
+ });
43
+ }
44
+ async function runList(args) {
45
+ const owner = getOwner();
46
+ // Fetch only current user's and shared jobs (not other users')
47
+ const [personal, shared] = await Promise.all([
48
+ resourceList(owner, "jobs/"),
49
+ resourceList(SHARED_OWNER, "jobs/"),
50
+ ]);
51
+ let resources = [...personal, ...shared];
52
+ if (args.scope === "personal")
53
+ resources = personal;
54
+ else if (args.scope === "shared")
55
+ resources = shared;
56
+ const metas = resources.filter((r) => r.path.endsWith(".md") && !r.path.endsWith(".keep"));
57
+ const jobs = await Promise.all(metas.map(async (r) => {
58
+ const full = await resourceGetByPath(r.owner, r.path);
59
+ const { meta } = parseJobFrontmatter(full?.content || "");
60
+ return {
61
+ name: r.path.replace(/^jobs\//, "").replace(/\.md$/, ""),
62
+ path: r.path,
63
+ scope: r.owner === SHARED_OWNER ? "shared" : "personal",
64
+ schedule: meta.schedule,
65
+ scheduleDescription: meta.schedule ? describeCron(meta.schedule) : "",
66
+ enabled: meta.enabled,
67
+ lastRun: meta.lastRun || null,
68
+ lastStatus: meta.lastStatus || null,
69
+ lastError: meta.lastError || null,
70
+ nextRun: meta.nextRun || null,
71
+ };
72
+ }));
73
+ if (jobs.length === 0) {
74
+ return "No recurring jobs configured. Use manage-jobs with action 'create' to create one.";
75
+ }
76
+ return JSON.stringify(jobs, null, 2);
77
+ }
78
+ async function runUpdate(args) {
79
+ const { name, schedule, instructions, enabled, scope, runAs } = args;
80
+ const path = `jobs/${name}.md`;
81
+ // Try to find the resource
82
+ let resource = await resourceGetByPath(SHARED_OWNER, path);
83
+ if (!resource && scope !== "shared") {
84
+ resource = await resourceGetByPath(getOwner(), path);
85
+ }
86
+ if (!resource) {
87
+ return JSON.stringify({ error: `Job "${name}" not found` });
88
+ }
89
+ const { meta, body } = parseJobFrontmatter(resource.content);
90
+ if (schedule) {
91
+ if (!isValidCron(schedule)) {
92
+ return JSON.stringify({
93
+ error: `Invalid cron expression: "${schedule}"`,
94
+ });
95
+ }
96
+ meta.schedule = schedule;
97
+ meta.nextRun = nextOccurrence(schedule).toISOString();
98
+ }
99
+ if (enabled !== undefined) {
100
+ meta.enabled = enabled === "true";
101
+ }
102
+ if (runAs === "creator" || runAs === "shared") {
103
+ meta.runAs = runAs;
104
+ }
105
+ const newBody = instructions || body;
106
+ const content = buildJobContent(meta, newBody);
107
+ await resourcePut(resource.owner, resource.path, content);
108
+ return JSON.stringify({
109
+ updated: true,
110
+ name,
111
+ schedule: meta.schedule,
112
+ scheduleDescription: describeCron(meta.schedule),
113
+ enabled: meta.enabled,
114
+ nextRun: meta.nextRun,
115
+ });
116
+ }
8
117
  export function createJobTools() {
9
118
  return {
10
- "create-job": {
119
+ "manage-jobs": {
11
120
  tool: {
12
- description: "Create a recurring job that runs on a cron schedule. The job instructions describe what the agent should do each time it runs. The schedule uses standard 5-field cron format (minute hour day-of-month month day-of-week). Common patterns: '0 9 * * *' (daily 9am), '0 9 * * 1-5' (weekdays 9am), '0 * * * *' (every hour), '0 9 * * 1' (Mondays 9am), '*/30 * * * *' (every 30 min).",
121
+ description: `Manage recurring jobs that run on a cron schedule.
122
+
123
+ Actions:
124
+ - "create": Create a new recurring job. Requires name, schedule, and instructions.
125
+ - "list": List all recurring jobs and their status (schedule, enabled, last run, next run).
126
+ - "update": Update a job's schedule, instructions, or enabled state. Requires name.
127
+
128
+ Cron format is 5 fields: minute hour day-of-month month day-of-week. Common patterns: '0 9 * * *' (daily 9am), '0 9 * * 1-5' (weekdays 9am), '0 * * * *' (every hour), '0 9 * * 1' (Mondays 9am), '*/30 * * * *' (every 30 min).`,
13
129
  parameters: {
14
130
  type: "object",
15
131
  properties: {
16
- name: {
132
+ action: {
17
133
  type: "string",
18
- description: "Job name (hyphen-case, e.g. 'daily-scorecard-check'). Used as the filename.",
134
+ description: "The action to perform.",
135
+ enum: ["create", "list", "update"],
19
136
  },
20
- schedule: {
21
- type: "string",
22
- description: "Cron expression (5 fields: minute hour day-of-month month day-of-week). Examples: '0 9 * * 1-5' (weekdays 9am), '0 */2 * * *' (every 2 hours).",
23
- },
24
- instructions: {
25
- type: "string",
26
- description: "What the agent should do when this job runs. Be specific — include which actions to call and what to do with the results.",
27
- },
28
- scope: {
29
- type: "string",
30
- description: "personal (only your jobs) or shared (team jobs). Default: shared.",
31
- enum: ["personal", "shared"],
32
- },
33
- runAs: {
34
- type: "string",
35
- description: "Who shared jobs execute as: creator or shared. Default: creator.",
36
- enum: ["creator", "shared"],
37
- },
38
- },
39
- required: ["name", "schedule", "instructions"],
40
- },
41
- },
42
- run: async (args) => {
43
- const { name, schedule, instructions, scope, runAs } = args;
44
- if (!name || !schedule || !instructions) {
45
- return JSON.stringify({
46
- error: "name, schedule, and instructions are required",
47
- });
48
- }
49
- if (!isValidCron(schedule)) {
50
- return JSON.stringify({
51
- error: `Invalid cron expression: "${schedule}". Use 5 fields: minute hour day-of-month month day-of-week.`,
52
- });
53
- }
54
- const owner = scope === "personal" ? getOwner() : SHARED_OWNER;
55
- const path = `jobs/${name}.md`;
56
- const now = new Date();
57
- const next = nextOccurrence(schedule, now);
58
- const meta = {
59
- schedule,
60
- enabled: true,
61
- createdBy: getOwner(),
62
- orgId: getRequestOrgId() || undefined,
63
- runAs: runAs === "shared" ? "shared" : "creator",
64
- nextRun: next.toISOString(),
65
- };
66
- const content = buildJobContent(meta, instructions);
67
- await resourcePut(owner, path, content);
68
- return JSON.stringify({
69
- created: true,
70
- name,
71
- path,
72
- schedule,
73
- scheduleDescription: describeCron(schedule),
74
- nextRun: next.toISOString(),
75
- scope: scope || "shared",
76
- });
77
- },
78
- },
79
- "list-jobs": {
80
- tool: {
81
- description: "List all recurring jobs and their status (schedule, enabled, last run, last status, next run).",
82
- parameters: {
83
- type: "object",
84
- properties: {
85
- scope: {
86
- type: "string",
87
- description: "Filter by scope: personal, shared, or all. Default: all.",
88
- enum: ["personal", "shared", "all"],
89
- },
90
- },
91
- },
92
- },
93
- run: async (args) => {
94
- const owner = getOwner();
95
- // Fetch only current user's and shared jobs (not other users')
96
- const [personal, shared] = await Promise.all([
97
- resourceList(owner, "jobs/"),
98
- resourceList(SHARED_OWNER, "jobs/"),
99
- ]);
100
- let resources = [...personal, ...shared];
101
- if (args.scope === "personal")
102
- resources = personal;
103
- else if (args.scope === "shared")
104
- resources = shared;
105
- const metas = resources.filter((r) => r.path.endsWith(".md") && !r.path.endsWith(".keep"));
106
- const jobs = await Promise.all(metas.map(async (r) => {
107
- const full = await resourceGetByPath(r.owner, r.path);
108
- const { meta } = parseJobFrontmatter(full?.content || "");
109
- return {
110
- name: r.path.replace(/^jobs\//, "").replace(/\.md$/, ""),
111
- path: r.path,
112
- scope: r.owner === SHARED_OWNER ? "shared" : "personal",
113
- schedule: meta.schedule,
114
- scheduleDescription: meta.schedule
115
- ? describeCron(meta.schedule)
116
- : "",
117
- enabled: meta.enabled,
118
- lastRun: meta.lastRun || null,
119
- lastStatus: meta.lastStatus || null,
120
- lastError: meta.lastError || null,
121
- nextRun: meta.nextRun || null,
122
- };
123
- }));
124
- if (jobs.length === 0) {
125
- return "No recurring jobs configured. Use create-job to create one.";
126
- }
127
- return JSON.stringify(jobs, null, 2);
128
- },
129
- },
130
- "update-job": {
131
- tool: {
132
- description: "Update a recurring job's schedule, instructions, or enabled state.",
133
- parameters: {
134
- type: "object",
135
- properties: {
136
137
  name: {
137
138
  type: "string",
138
- description: "Job name (e.g. 'daily-scorecard-check')",
139
+ description: "Job name (hyphen-case, e.g. 'daily-scorecard-check'). Required for create and update.",
139
140
  },
140
141
  schedule: {
141
142
  type: "string",
142
- description: "New cron expression (optional)",
143
+ description: "Cron expression (5 fields: minute hour day-of-month month day-of-week). Required for create, optional for update.",
143
144
  },
144
145
  instructions: {
145
146
  type: "string",
146
- description: "New job instructions (optional)",
147
+ description: "What the agent should do when this job runs. Be specific — include which actions to call and what to do with the results. Required for create, optional for update.",
147
148
  },
148
149
  enabled: {
149
150
  type: "string",
150
- description: "Enable or disable: 'true' or 'false' (optional)",
151
+ description: "Enable or disable a job: 'true' or 'false'. Only used with update.",
151
152
  enum: ["true", "false"],
152
153
  },
153
154
  scope: {
154
155
  type: "string",
155
- description: "Which scope to search: personal, shared, or all. Default: all.",
156
+ description: "For create: personal or shared (default: shared). For list: personal, shared, or all (default: all). For update: which scope to search (default: all).",
156
157
  enum: ["personal", "shared", "all"],
157
158
  },
158
159
  runAs: {
159
160
  type: "string",
160
- description: "Update execution principal to creator or shared.",
161
+ description: "Who shared jobs execute as: creator or shared. Default: creator. Used with create and update.",
161
162
  enum: ["creator", "shared"],
162
163
  },
163
164
  },
164
- required: ["name"],
165
+ required: ["action"],
165
166
  },
166
167
  },
167
168
  run: async (args) => {
168
- const { name, schedule, instructions, enabled, scope, runAs } = args;
169
- const path = `jobs/${name}.md`;
170
- // Try to find the resource
171
- let resource = await resourceGetByPath(SHARED_OWNER, path);
172
- if (!resource && scope !== "shared") {
173
- resource = await resourceGetByPath(getOwner(), path);
174
- }
175
- if (!resource) {
176
- return JSON.stringify({ error: `Job "${name}" not found` });
177
- }
178
- const { meta, body } = parseJobFrontmatter(resource.content);
179
- if (schedule) {
180
- if (!isValidCron(schedule)) {
169
+ switch (args.action) {
170
+ case "create":
171
+ return runCreate(args);
172
+ case "list":
173
+ return runList(args);
174
+ case "update":
175
+ return runUpdate(args);
176
+ default:
181
177
  return JSON.stringify({
182
- error: `Invalid cron expression: "${schedule}"`,
178
+ error: `Unknown action "${args.action}". Use "create", "list", or "update".`,
183
179
  });
184
- }
185
- meta.schedule = schedule;
186
- meta.nextRun = nextOccurrence(schedule).toISOString();
187
- }
188
- if (enabled !== undefined) {
189
- meta.enabled = enabled === "true";
190
- }
191
- if (runAs === "creator" || runAs === "shared") {
192
- meta.runAs = runAs;
193
180
  }
194
- const newBody = instructions || body;
195
- const content = buildJobContent(meta, newBody);
196
- await resourcePut(resource.owner, resource.path, content);
197
- return JSON.stringify({
198
- updated: true,
199
- name,
200
- schedule: meta.schedule,
201
- scheduleDescription: describeCron(meta.schedule),
202
- enabled: meta.enabled,
203
- nextRun: meta.nextRun,
204
- });
205
181
  },
206
182
  },
207
183
  };
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/jobs/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/jobs/tools.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,8 @@
2
2
  * Framework-level agent actions for the notifications primitive.
3
3
  *
4
4
  * Registered as native tools (not template actions) so they're available in
5
- * every template. The agent uses `notify` to surface progress, completions,
6
- * and alerts to the user through the in-app inbox and any registered channels.
5
+ * every template. Consolidated into a single `manage-notifications` tool with
6
+ * an `action` parameter that dispatches to the correct implementation.
7
7
  */
8
8
  import type { ActionEntry } from "../agent/production-agent.js";
9
9
  export declare function createNotificationToolEntries(getCurrentUser: () => string): Record<string, ActionEntry>;
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/notifications/actions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAIhE,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,MAAM,MAAM,GAC3B,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAsH7B"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/notifications/actions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAIhE,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,MAAM,MAAM,GAC3B,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAkI7B"}
@@ -2,112 +2,120 @@
2
2
  * Framework-level agent actions for the notifications primitive.
3
3
  *
4
4
  * Registered as native tools (not template actions) so they're available in
5
- * every template. The agent uses `notify` to surface progress, completions,
6
- * and alerts to the user through the in-app inbox and any registered channels.
5
+ * every template. Consolidated into a single `manage-notifications` tool with
6
+ * an `action` parameter that dispatches to the correct implementation.
7
7
  */
8
8
  import { notify, listNotifications, countUnread } from "./registry.js";
9
9
  export function createNotificationToolEntries(getCurrentUser) {
10
10
  return {
11
- notify: {
11
+ "manage-notifications": {
12
12
  tool: {
13
- description: "Send a notification to the user. Always persisted to the in-app inbox so the bell + toast surface shows it. Registered channels (webhook, Slack, etc.) also run. Use `info` for FYI, `warning` for things the user should look at, `critical` for things that need immediate attention.",
13
+ description: [
14
+ "Manage user notifications. Available actions:",
15
+ "",
16
+ '• action="send" — Send a notification to the user. Persisted to the in-app inbox so the bell + toast surface shows it. Registered channels (webhook, Slack, etc.) also run.',
17
+ " Required: severity, title. Optional: body, metadataJson, channels.",
18
+ "",
19
+ '• action="list" — List recent notifications for the current user. Useful when the user asks about prior alerts.',
20
+ " Optional: unreadOnly (boolean), limit (number, default 20, max 200).",
21
+ ].join("\n"),
14
22
  parameters: {
15
23
  type: "object",
16
24
  properties: {
25
+ action: {
26
+ type: "string",
27
+ enum: ["send", "list"],
28
+ description: "The notification action to perform.",
29
+ },
17
30
  severity: {
18
31
  type: "string",
19
32
  enum: ["info", "warning", "critical"],
20
- description: "Severity level — drives styling and per-severity channel routing.",
33
+ description: '(send) Severity level — drives styling and per-severity channel routing. Use "info" for FYI, "warning" for things the user should look at, "critical" for things that need immediate attention.',
21
34
  },
22
35
  title: {
23
36
  type: "string",
24
- description: "Short, human-readable headline (≤100 chars).",
37
+ description: "(send) Short, human-readable headline (≤100 chars).",
25
38
  },
26
39
  body: {
27
40
  type: "string",
28
- description: "Optional longer description.",
41
+ description: "(send) Optional longer description.",
29
42
  },
30
43
  metadataJson: {
31
44
  type: "string",
32
- description: 'Optional JSON metadata (URLs, entity ids, etc.). Example: \'{"threadId":"abc","link":"/inbox/abc"}\'.',
45
+ description: '(send) Optional JSON metadata (URLs, entity ids, etc.). Example: \'{"threadId":"abc","link":"/inbox/abc"}\'.',
33
46
  },
34
47
  channels: {
35
48
  type: "string",
36
- description: 'Optional comma-separated channel allowlist (e.g. "inbox,webhook"). Omit to run all registered channels.',
49
+ description: '(send) Optional comma-separated channel allowlist (e.g. "inbox,webhook"). Omit to run all registered channels.',
37
50
  },
38
- },
39
- required: ["severity", "title"],
40
- },
41
- },
42
- run: async (args) => {
43
- const owner = getCurrentUser();
44
- if (!args.severity || !args.title) {
45
- return "Error: --severity and --title are required.";
46
- }
47
- const severity = args.severity;
48
- if (!["info", "warning", "critical"].includes(severity)) {
49
- return `Error: severity must be info, warning, or critical (got "${severity}").`;
50
- }
51
- let metadata;
52
- if (args.metadataJson) {
53
- try {
54
- metadata = JSON.parse(args.metadataJson);
55
- }
56
- catch {
57
- return "Error: metadataJson must be valid JSON.";
58
- }
59
- }
60
- const channels = args.channels
61
- ? args.channels
62
- .split(",")
63
- .map((s) => s.trim())
64
- .filter(Boolean)
65
- : undefined;
66
- const stored = await notify({
67
- severity,
68
- title: args.title,
69
- body: args.body || undefined,
70
- metadata,
71
- channels,
72
- }, { owner });
73
- return stored
74
- ? `Notification sent (id: ${stored.id})`
75
- : "Notification dispatched to channels (not persisted).";
76
- },
77
- },
78
- "list-notifications": {
79
- tool: {
80
- description: "List recent notifications for the current user. Useful when the user asks about prior alerts.",
81
- parameters: {
82
- type: "object",
83
- properties: {
84
51
  unreadOnly: {
85
52
  type: "boolean",
86
- description: "When true, only include unread notifications.",
53
+ description: "(list) When true, only include unread notifications.",
87
54
  },
88
55
  limit: {
89
56
  type: "number",
90
- description: "Max rows to return (default 20, max 200).",
57
+ description: "(list) Max rows to return (default 20, max 200).",
91
58
  },
92
59
  },
60
+ required: ["action"],
93
61
  },
94
62
  },
95
63
  run: async (args) => {
96
64
  const owner = getCurrentUser();
97
- const rows = await listNotifications(owner, {
98
- unreadOnly: args.unreadOnly === true || args.unreadOnly === "true",
99
- limit: Math.min(Number(args.limit ?? 20), 200),
100
- });
101
- if (rows.length === 0) {
102
- return args.unreadOnly
103
- ? "No unread notifications."
104
- : "No notifications.";
65
+ const action = args.action;
66
+ switch (action) {
67
+ case "send": {
68
+ if (!args.severity || !args.title) {
69
+ return "Error: severity and title are required for action=send.";
70
+ }
71
+ const severity = args.severity;
72
+ if (!["info", "warning", "critical"].includes(severity)) {
73
+ return `Error: severity must be info, warning, or critical (got "${severity}").`;
74
+ }
75
+ let metadata;
76
+ if (args.metadataJson) {
77
+ try {
78
+ metadata = JSON.parse(args.metadataJson);
79
+ }
80
+ catch {
81
+ return "Error: metadataJson must be valid JSON.";
82
+ }
83
+ }
84
+ const channels = typeof args.channels === "string"
85
+ ? args.channels
86
+ .split(",")
87
+ .map((s) => s.trim())
88
+ .filter(Boolean)
89
+ : undefined;
90
+ const stored = await notify({
91
+ severity,
92
+ title: args.title,
93
+ body: args.body || undefined,
94
+ metadata,
95
+ channels,
96
+ }, { owner });
97
+ return stored
98
+ ? `Notification sent (id: ${stored.id})`
99
+ : "Notification dispatched to channels (not persisted).";
100
+ }
101
+ case "list": {
102
+ const rows = await listNotifications(owner, {
103
+ unreadOnly: args.unreadOnly === true || args.unreadOnly === "true",
104
+ limit: Math.min(Number(args.limit ?? 20), 200),
105
+ });
106
+ if (rows.length === 0) {
107
+ return args.unreadOnly
108
+ ? "No unread notifications."
109
+ : "No notifications.";
110
+ }
111
+ const unreadCount = await countUnread(owner);
112
+ const lines = rows.map((n) => `[${n.readAt ? " " : "•"}] (${n.severity}) ${n.title}${n.body ? ` — ${n.body}` : ""} · ${n.createdAt}`);
113
+ return `${unreadCount} unread\n\n${lines.join("\n")}`;
114
+ }
115
+ default:
116
+ return `Error: unknown action "${action}". Must be one of: send, list.`;
105
117
  }
106
- const unreadCount = await countUnread(owner);
107
- const lines = rows.map((n) => `[${n.readAt ? " " : "•"}] (${n.severity}) ${n.title}${n.body ? ` — ${n.body}` : ""} · ${n.createdAt}`);
108
- return `${unreadCount} unread\n\n${lines.join("\n")}`;
109
118
  },
110
- readOnly: true,
111
119
  },
112
120
  };
113
121
  }
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/notifications/actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/notifications/actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { EvalResult, EvalCriteria } from "./types.js";
2
+ import type { AgentEngine } from "../agent/engine/types.js";
3
+ export declare function runAutomatedEvals(runId: string): Promise<EvalResult[]>;
4
+ export declare function runLlmJudgeEval(runId: string, criteria: EvalCriteria, opts?: {
5
+ engine?: AgentEngine;
6
+ model?: string;
7
+ userId?: string | null;
8
+ }): Promise<EvalResult | null>;
9
+ export declare function runDatasetEval(datasetId: string, opts?: {
10
+ criteria?: EvalCriteria[];
11
+ engine?: AgentEngine;
12
+ model?: string;
13
+ }): Promise<{
14
+ datasetId: string;
15
+ totalCases: number;
16
+ avgScore: number;
17
+ results: EvalResult[];
18
+ }>;
19
+ export declare function evaluateRun(runId: string, opts?: {
20
+ sampleRate?: number;
21
+ }): Promise<EvalResult[]>;
22
+ //# sourceMappingURL=evals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evals.d.ts","sourceRoot":"","sources":["../../src/observability/evals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EAGb,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AA0I5D,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAsB5E;AA2DD,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,YAAY,EACtB,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACtE,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA6E5B;AAID,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE,OAAO,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB,CAAC,CAkDD;AAuGD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B,OAAO,CAAC,UAAU,EAAE,CAAC,CA6BvB"}