@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.
- package/dist/action.js +30 -11
- package/dist/action.js.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.d.ts +14 -2
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +70 -54
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts +1 -6
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/anthropic-engine.js +3 -14
- package/dist/agent/engine/anthropic-engine.js.map +1 -1
- package/dist/agent/engine/builtin.d.ts.map +1 -1
- package/dist/agent/engine/builtin.js +3 -0
- package/dist/agent/engine/builtin.js.map +1 -1
- package/dist/agent/engine/index.d.ts +1 -1
- package/dist/agent/engine/index.d.ts.map +1 -1
- package/dist/agent/engine/index.js +1 -1
- package/dist/agent/engine/index.js.map +1 -1
- package/dist/agent/engine/provider-env-vars.d.ts +21 -0
- package/dist/agent/engine/provider-env-vars.d.ts.map +1 -0
- package/dist/agent/engine/provider-env-vars.js +50 -0
- package/dist/agent/engine/provider-env-vars.js.map +1 -0
- package/dist/agent/engine/registry.d.ts +18 -0
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +54 -4
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/engine/translate-ai-sdk.d.ts +35 -10
- package/dist/agent/engine/translate-ai-sdk.d.ts.map +1 -1
- package/dist/agent/engine/translate-ai-sdk.js +190 -91
- package/dist/agent/engine/translate-ai-sdk.js.map +1 -1
- package/dist/agent/engine/types.d.ts +10 -1
- package/dist/agent/engine/types.d.ts.map +1 -1
- package/dist/agent/production-agent.d.ts +21 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +72 -21
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/thread-data-builder.js +1 -1
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/agent/types.d.ts +4 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/application-state/script-helpers.d.ts +12 -5
- package/dist/application-state/script-helpers.d.ts.map +1 -1
- package/dist/application-state/script-helpers.js +41 -20
- package/dist/application-state/script-helpers.js.map +1 -1
- package/dist/catalog.json +15 -0
- package/dist/checkpoints/index.d.ts +3 -0
- package/dist/checkpoints/index.d.ts.map +1 -0
- package/dist/checkpoints/index.js +3 -0
- package/dist/checkpoints/index.js.map +1 -0
- package/dist/checkpoints/service.d.ts +6 -0
- package/dist/checkpoints/service.d.ts.map +1 -0
- package/dist/checkpoints/service.js +107 -0
- package/dist/checkpoints/service.js.map +1 -0
- package/dist/checkpoints/store.d.ts +27 -0
- package/dist/checkpoints/store.d.ts.map +1 -0
- package/dist/checkpoints/store.js +92 -0
- package/dist/checkpoints/store.js.map +1 -0
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +191 -2
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +63 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/templates-meta.d.ts +2 -0
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +35 -0
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/cli/workspacify.d.ts.map +1 -1
- package/dist/cli/workspacify.js +7 -3
- package/dist/cli/workspacify.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +3 -1
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +15 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +162 -67
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +9 -5
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/ConnectBuilderCard.js +1 -1
- package/dist/client/ConnectBuilderCard.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +89 -4
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts +6 -0
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +4 -0
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +12 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +87 -5
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/notifications/NotificationsBell.d.ts +23 -0
- package/dist/client/notifications/NotificationsBell.d.ts.map +1 -0
- package/dist/client/notifications/NotificationsBell.js +165 -0
- package/dist/client/notifications/NotificationsBell.js.map +1 -0
- package/dist/client/notifications/index.d.ts +2 -0
- package/dist/client/notifications/index.d.ts.map +1 -0
- package/dist/client/notifications/index.js +2 -0
- package/dist/client/notifications/index.js.map +1 -0
- package/dist/client/onboarding/OnboardingPanel.js +6 -3
- package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
- package/dist/client/progress/RunsTray.d.ts +18 -0
- package/dist/client/progress/RunsTray.d.ts.map +1 -0
- package/dist/client/progress/RunsTray.js +70 -0
- package/dist/client/progress/RunsTray.js.map +1 -0
- package/dist/client/progress/index.d.ts +2 -0
- package/dist/client/progress/index.d.ts.map +1 -0
- package/dist/client/progress/index.js +2 -0
- package/dist/client/progress/index.js.map +1 -0
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +19 -4
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/settings/AutomationsSection.d.ts +2 -0
- package/dist/client/settings/AutomationsSection.d.ts.map +1 -0
- package/dist/client/settings/AutomationsSection.js +214 -0
- package/dist/client/settings/AutomationsSection.js.map +1 -0
- package/dist/client/settings/ComingSoonSection.d.ts.map +1 -1
- package/dist/client/settings/ComingSoonSection.js +2 -1
- package/dist/client/settings/ComingSoonSection.js.map +1 -1
- package/dist/client/settings/SecretsSection.d.ts.map +1 -1
- package/dist/client/settings/SecretsSection.js +122 -3
- package/dist/client/settings/SecretsSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +252 -14
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +2 -2
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
- package/dist/client/use-pausing-interval.d.ts +11 -0
- package/dist/client/use-pausing-interval.d.ts.map +1 -0
- package/dist/client/use-pausing-interval.js +49 -0
- package/dist/client/use-pausing-interval.js.map +1 -0
- package/dist/db/client.d.ts +26 -0
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +84 -2
- package/dist/db/client.js.map +1 -1
- package/dist/db/drizzle-config.d.ts +33 -0
- package/dist/db/drizzle-config.d.ts.map +1 -0
- package/dist/db/drizzle-config.js +132 -0
- package/dist/db/drizzle-config.js.map +1 -0
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +11 -6
- package/dist/db/migrations.js.map +1 -1
- package/dist/deploy/build.js +2 -1
- package/dist/deploy/build.js.map +1 -1
- package/dist/event-bus/bus.d.ts +20 -0
- package/dist/event-bus/bus.d.ts.map +1 -0
- package/dist/event-bus/bus.js +108 -0
- package/dist/event-bus/bus.js.map +1 -0
- package/dist/event-bus/index.d.ts +4 -0
- package/dist/event-bus/index.d.ts.map +1 -0
- package/dist/event-bus/index.js +3 -0
- package/dist/event-bus/index.js.map +1 -0
- package/dist/event-bus/registry.d.ts +22 -0
- package/dist/event-bus/registry.d.ts.map +1 -0
- package/dist/event-bus/registry.js +63 -0
- package/dist/event-bus/registry.js.map +1 -0
- package/dist/event-bus/types.d.ts +27 -0
- package/dist/event-bus/types.d.ts.map +1 -0
- package/dist/event-bus/types.js +2 -0
- package/dist/event-bus/types.js.map +1 -0
- package/dist/integrations/config-store.d.ts.map +1 -1
- package/dist/integrations/config-store.js +16 -12
- package/dist/integrations/config-store.js.map +1 -1
- package/dist/integrations/google-docs-poller.d.ts.map +1 -1
- package/dist/integrations/google-docs-poller.js +5 -1
- package/dist/integrations/google-docs-poller.js.map +1 -1
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +7 -3
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/notifications/actions.d.ts +10 -0
- package/dist/notifications/actions.d.ts.map +1 -0
- package/dist/notifications/actions.js +114 -0
- package/dist/notifications/actions.js.map +1 -0
- package/dist/notifications/channels.d.ts +15 -0
- package/dist/notifications/channels.d.ts.map +1 -0
- package/dist/notifications/channels.js +97 -0
- package/dist/notifications/channels.js.map +1 -0
- package/dist/notifications/index.d.ts +4 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +3 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/registry.d.ts +9 -0
- package/dist/notifications/registry.d.ts.map +1 -0
- package/dist/notifications/registry.js +146 -0
- package/dist/notifications/registry.js.map +1 -0
- package/dist/notifications/routes.d.ts +34 -0
- package/dist/notifications/routes.d.ts.map +1 -0
- package/dist/notifications/routes.js +69 -0
- package/dist/notifications/routes.js.map +1 -0
- package/dist/notifications/store.d.ts +25 -0
- package/dist/notifications/store.d.ts.map +1 -0
- package/dist/notifications/store.js +158 -0
- package/dist/notifications/store.js.map +1 -0
- package/dist/notifications/types.d.ts +43 -0
- package/dist/notifications/types.d.ts.map +1 -0
- package/dist/notifications/types.js +2 -0
- package/dist/notifications/types.js.map +1 -0
- package/dist/onboarding/default-steps.d.ts.map +1 -1
- package/dist/onboarding/default-steps.js +63 -20
- package/dist/onboarding/default-steps.js.map +1 -1
- package/dist/org/handlers.d.ts.map +1 -1
- package/dist/org/handlers.js +7 -26
- package/dist/org/handlers.js.map +1 -1
- package/dist/progress/actions.d.ts +8 -0
- package/dist/progress/actions.d.ts.map +1 -0
- package/dist/progress/actions.js +158 -0
- package/dist/progress/actions.js.map +1 -0
- package/dist/progress/index.d.ts +3 -0
- package/dist/progress/index.d.ts.map +1 -0
- package/dist/progress/index.js +2 -0
- package/dist/progress/index.js.map +1 -0
- package/dist/progress/registry.d.ts +22 -0
- package/dist/progress/registry.d.ts.map +1 -0
- package/dist/progress/registry.js +98 -0
- package/dist/progress/registry.js.map +1 -0
- package/dist/progress/routes.d.ts +21 -0
- package/dist/progress/routes.d.ts.map +1 -0
- package/dist/progress/routes.js +59 -0
- package/dist/progress/routes.js.map +1 -0
- package/dist/progress/store.d.ts +7 -0
- package/dist/progress/store.d.ts.map +1 -0
- package/dist/progress/store.js +195 -0
- package/dist/progress/store.js.map +1 -0
- package/dist/progress/types.d.ts +49 -0
- package/dist/progress/types.d.ts.map +1 -0
- package/dist/progress/types.js +7 -0
- package/dist/progress/types.js.map +1 -0
- package/dist/resources/store.d.ts.map +1 -1
- package/dist/resources/store.js +19 -15
- package/dist/resources/store.js.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.js +19 -5
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
- package/dist/scripts/agent-engines/set-agent-engine.d.ts.map +1 -1
- package/dist/scripts/agent-engines/set-agent-engine.js +8 -7
- package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -1
- package/dist/secrets/index.d.ts +3 -2
- package/dist/secrets/index.d.ts.map +1 -1
- package/dist/secrets/index.js +3 -2
- package/dist/secrets/index.js.map +1 -1
- package/dist/secrets/routes.d.ts +41 -2
- package/dist/secrets/routes.d.ts.map +1 -1
- package/dist/secrets/routes.js +167 -1
- package/dist/secrets/routes.js.map +1 -1
- package/dist/secrets/schema.d.ts +39 -1
- package/dist/secrets/schema.d.ts.map +1 -1
- package/dist/secrets/schema.js +6 -0
- package/dist/secrets/schema.js.map +1 -1
- package/dist/secrets/storage.d.ts +26 -0
- package/dist/secrets/storage.d.ts.map +1 -1
- package/dist/secrets/storage.js +111 -5
- package/dist/secrets/storage.js.map +1 -1
- package/dist/secrets/substitution.d.ts +39 -0
- package/dist/secrets/substitution.d.ts.map +1 -0
- package/dist/secrets/substitution.js +93 -0
- package/dist/secrets/substitution.js.map +1 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +1684 -1410
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-teams.d.ts.map +1 -1
- package/dist/server/agent-teams.js +17 -6
- package/dist/server/agent-teams.js.map +1 -1
- package/dist/server/analytics.d.ts +8 -5
- package/dist/server/analytics.d.ts.map +1 -1
- package/dist/server/analytics.js +17 -8
- package/dist/server/analytics.js.map +1 -1
- package/dist/server/app-url.d.ts.map +1 -1
- package/dist/server/app-url.js +7 -4
- package/dist/server/app-url.js.map +1 -1
- package/dist/server/auth.d.ts +11 -0
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +74 -21
- package/dist/server/auth.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +34 -16
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +179 -2
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/email-templates.d.ts +43 -0
- package/dist/server/email-templates.d.ts.map +1 -0
- package/dist/server/email-templates.js +86 -0
- package/dist/server/email-templates.js.map +1 -0
- package/dist/server/framework-request-handler.d.ts +15 -0
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +64 -1
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/server/onboarding-html.d.ts +11 -0
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +275 -16
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/schema-prompt.d.ts.map +1 -1
- package/dist/server/schema-prompt.js +5 -0
- package/dist/server/schema-prompt.js.map +1 -1
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/truncate.d.ts +8 -0
- package/dist/shared/truncate.d.ts.map +1 -0
- package/dist/shared/truncate.js +12 -0
- package/dist/shared/truncate.js.map +1 -0
- package/dist/templates/default/.agents/skills/agent-engines/SKILL.md +60 -4
- package/dist/templates/default/.agents/skills/notifications/SKILL.md +95 -0
- package/dist/templates/default/.agents/skills/progress/SKILL.md +97 -0
- package/dist/templates/default/AGENTS.md +12 -10
- package/dist/templates/default/package.json +10 -10
- package/dist/templates/workspace-core/package.json +5 -5
- package/dist/templates/workspace-root/package.json +1 -1
- package/dist/templates/workspace-root/pnpm-workspace.yaml +6 -0
- package/dist/templates/workspace-root/tsconfig.base.json +1 -2
- package/dist/tools/fetch-tool.d.ts +22 -0
- package/dist/tools/fetch-tool.d.ts.map +1 -0
- package/dist/tools/fetch-tool.js +156 -0
- package/dist/tools/fetch-tool.js.map +1 -0
- package/dist/tracking/index.d.ts +4 -0
- package/dist/tracking/index.d.ts.map +1 -0
- package/dist/tracking/index.js +3 -0
- package/dist/tracking/index.js.map +1 -0
- package/dist/tracking/providers.d.ts +15 -0
- package/dist/tracking/providers.d.ts.map +1 -0
- package/dist/tracking/providers.js +195 -0
- package/dist/tracking/providers.js.map +1 -0
- package/dist/tracking/registry.d.ts +10 -0
- package/dist/tracking/registry.d.ts.map +1 -0
- package/dist/tracking/registry.js +75 -0
- package/dist/tracking/registry.js.map +1 -0
- package/dist/tracking/types.d.ts +13 -0
- package/dist/tracking/types.d.ts.map +1 -0
- package/dist/tracking/types.js +2 -0
- package/dist/tracking/types.js.map +1 -0
- package/dist/triggers/actions.d.ts +10 -0
- package/dist/triggers/actions.d.ts.map +1 -0
- package/dist/triggers/actions.js +277 -0
- package/dist/triggers/actions.js.map +1 -0
- package/dist/triggers/condition-evaluator.d.ts +15 -0
- package/dist/triggers/condition-evaluator.d.ts.map +1 -0
- package/dist/triggers/condition-evaluator.js +107 -0
- package/dist/triggers/condition-evaluator.js.map +1 -0
- package/dist/triggers/dispatcher.d.ts +32 -0
- package/dist/triggers/dispatcher.d.ts.map +1 -0
- package/dist/triggers/dispatcher.js +291 -0
- package/dist/triggers/dispatcher.js.map +1 -0
- package/dist/triggers/index.d.ts +5 -0
- package/dist/triggers/index.d.ts.map +1 -0
- package/dist/triggers/index.js +4 -0
- package/dist/triggers/index.js.map +1 -0
- package/dist/triggers/types.d.ts +35 -0
- package/dist/triggers/types.d.ts.map +1 -0
- package/dist/triggers/types.js +9 -0
- package/dist/triggers/types.js.map +1 -0
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +66 -16
- package/dist/vite/client.js.map +1 -1
- package/docs/content/automations.md +239 -0
- package/docs/content/multi-tenancy.md +88 -0
- package/docs/content/notifications.md +199 -0
- package/docs/content/progress.md +176 -0
- package/docs/content/tracking.md +168 -0
- package/package.json +59 -35
- package/src/templates/default/.agents/skills/agent-engines/SKILL.md +60 -4
- package/src/templates/default/.agents/skills/notifications/SKILL.md +95 -0
- package/src/templates/default/.agents/skills/progress/SKILL.md +97 -0
- package/src/templates/default/AGENTS.md +12 -10
- package/src/templates/default/package.json +10 -10
- package/src/templates/workspace-core/package.json +5 -5
- package/src/templates/workspace-root/package.json +1 -1
- package/src/templates/workspace-root/pnpm-workspace.yaml +6 -0
- package/src/templates/workspace-root/tsconfig.base.json +1 -2
- package/tsconfig.base.json +1 -1
- package/dist/client/settings/LLMSection.d.ts +0 -2
- package/dist/client/settings/LLMSection.d.ts.map +0 -1
- package/dist/client/settings/LLMSection.js +0 -64
- 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":"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"}
|
|
@@ -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 @@
|
|
|
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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"}
|