@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,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: notifications
|
|
3
|
+
description: >-
|
|
4
|
+
In-app notifications primitive with pluggable server-side channels. Use when
|
|
5
|
+
the agent needs to surface progress, alerts, or completions to the user —
|
|
6
|
+
both in-app (bell + toast) and out-of-band (webhook, Slack, custom).
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Notifications
|
|
10
|
+
|
|
11
|
+
`notify()` is the framework's "tell the user something" primitive. Every call persists a row to the inbox (drives the bell UI) and fans out to any registered server-side channels. Channels follow the same pluggable-provider pattern as `tracking` — register at startup, `notify()` fans out, errors are isolated.
|
|
12
|
+
|
|
13
|
+
Use for: *agent progress milestones, automation triggers firing, background job completions, critical errors*. Don't use for chat replies — those go through the conversation.
|
|
14
|
+
|
|
15
|
+
## Tools
|
|
16
|
+
|
|
17
|
+
| Tool | Purpose |
|
|
18
|
+
|---|---|
|
|
19
|
+
| `notify` | Send a notification (severity + title + optional body/metadata/channels) |
|
|
20
|
+
| `list-notifications` | Show recent notifications for the current user |
|
|
21
|
+
|
|
22
|
+
## Sending
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
notify --severity info --title "Booking confirmed" --body "Jane at 3pm"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
| Severity | When |
|
|
29
|
+
|---|---|
|
|
30
|
+
| `info` | FYI / progress / confirmation |
|
|
31
|
+
| `warning` | Something to look at soon |
|
|
32
|
+
| `critical` | Needs immediate attention |
|
|
33
|
+
|
|
34
|
+
Optional: `--metadataJson '{"threadId":"abc"}'`, `--channels inbox,webhook` (omit to run all registered).
|
|
35
|
+
|
|
36
|
+
## Delivery
|
|
37
|
+
|
|
38
|
+
`notify()` always inserts into the `notifications` table (unless `channels` explicitly excludes `inbox`), then fans out to every registered channel in parallel (best-effort; a failing channel doesn't block others). Finally it emits `notification.sent` on the event bus so automations can chain — e.g. *"when a critical notification fires, also page on-call."*
|
|
39
|
+
|
|
40
|
+
## Built-in Channels
|
|
41
|
+
|
|
42
|
+
| Channel | How | Requires |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| `inbox` | INSERT → drives bell UI | (always on) |
|
|
45
|
+
| `webhook` | POST JSON to `NOTIFICATIONS_WEBHOOK_URL` (+ optional `NOTIFICATIONS_WEBHOOK_AUTH`); both support `${keys.NAME}` + URL allowlists from the ad-hoc-keys system | env var set |
|
|
46
|
+
|
|
47
|
+
The webhook channel resolves `${keys.NAME}` server-side — the raw value never enters the agent context.
|
|
48
|
+
|
|
49
|
+
## Registering a Custom Channel
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
// server/plugins/notifications-slack.ts
|
|
53
|
+
import { registerNotificationChannel } from "@agent-native/core/notifications";
|
|
54
|
+
|
|
55
|
+
export default () => {
|
|
56
|
+
registerNotificationChannel({
|
|
57
|
+
name: "slack-ops",
|
|
58
|
+
async deliver(input, meta) {
|
|
59
|
+
await fetch(process.env.OPS_SLACK_WEBHOOK!, {
|
|
60
|
+
method: "POST",
|
|
61
|
+
headers: { "Content-Type": "application/json" },
|
|
62
|
+
body: JSON.stringify({ text: `*${input.severity}* — ${input.title}`, owner: meta.owner }),
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Names are unique — re-registering replaces. `deliver()` must be best-effort; a thrown error is logged and ignored. Do NOT call `notify()` from inside a channel (recursion).
|
|
70
|
+
|
|
71
|
+
## HTTP API
|
|
72
|
+
|
|
73
|
+
Mounted at `/_agent-native/notifications/*` by `core-routes-plugin`, all session-scoped:
|
|
74
|
+
|
|
75
|
+
- `GET /notifications?unread=true&limit=50&before=<iso>`
|
|
76
|
+
- `GET /notifications/count`
|
|
77
|
+
- `POST /notifications/:id/read`
|
|
78
|
+
- `POST /notifications/read-all`
|
|
79
|
+
- `DELETE /notifications/:id`
|
|
80
|
+
|
|
81
|
+
## UI
|
|
82
|
+
|
|
83
|
+
```tsx
|
|
84
|
+
import { NotificationsBell } from "@agent-native/core/client/notifications";
|
|
85
|
+
|
|
86
|
+
<NotificationsBell browserNotifications />
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Bell icon + unread badge + lazy-loaded dropdown. Pass `browserNotifications` to also fire system `new Notification(...)` popups for items that arrive after mount (dedups by id, renders an "Enable" prompt until permission is granted, silently no-ops on denied / unsupported). Styled with shadcn tokens — adapts to the host theme.
|
|
90
|
+
|
|
91
|
+
## Related
|
|
92
|
+
|
|
93
|
+
- `automations` — event-triggered bodies can call `notify`.
|
|
94
|
+
- `secrets` — `${keys.NAME}` substitution + URL allowlists powering the webhook channel.
|
|
95
|
+
- `tracking` — analytics; separate concern, don't route through notifications.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: progress
|
|
3
|
+
description: >-
|
|
4
|
+
Report live progress from long-running agent tasks. Use when a task takes
|
|
5
|
+
more than a few seconds, so the user can watch status in the runs tray
|
|
6
|
+
instead of staring at a spinner.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Progress
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
`progress_runs` is the framework's "what is the agent doing right now" primitive. The agent starts a run at the top of a long task, updates it as work proceeds, and completes it with a terminal status. The UI renders active runs in a header-bar widget with a percent bar, current step, and spinner/check/X — live visibility into work that would otherwise be opaque.
|
|
14
|
+
|
|
15
|
+
Separate concern from `notifications`:
|
|
16
|
+
|
|
17
|
+
| | Notifications | Progress |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| Shape | One-shot event — "X happened" | Continuous state — "X is 45% done" |
|
|
20
|
+
| UI surface | Bell + toast | Runs tray with percent bar |
|
|
21
|
+
| Lifecycle | Dismissable (read/unread) | Running → terminal (succeeded/failed/cancelled) |
|
|
22
|
+
|
|
23
|
+
Common pattern: on completion, emit a `notify()` so the user sees the outcome when they're not actively watching the tray.
|
|
24
|
+
|
|
25
|
+
## Available Tools
|
|
26
|
+
|
|
27
|
+
| Tool | Purpose |
|
|
28
|
+
|---|---|
|
|
29
|
+
| `start-run` | Mark the start of a long task. Returns a runId. |
|
|
30
|
+
| `update-run-progress` | Update percent and/or current step. Call frequently. |
|
|
31
|
+
| `complete-run` | Mark terminal status: `succeeded`, `failed`, `cancelled`. |
|
|
32
|
+
| `list-runs` | List recent runs (all or `--active=true`). |
|
|
33
|
+
|
|
34
|
+
## Canonical Flow
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
start-run --title "Triage 128 unread emails" --step "Fetching inbox"
|
|
38
|
+
→ runId=abc
|
|
39
|
+
|
|
40
|
+
update-run-progress --runId=abc --percent=25 --step="Classifying 32/128"
|
|
41
|
+
update-run-progress --runId=abc --percent=75 --step="Drafting replies 97/128"
|
|
42
|
+
|
|
43
|
+
complete-run --runId=abc --status=succeeded
|
|
44
|
+
notify --severity=info --title="Triage done" --body="12 archived, 6 drafts ready to review"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Best Practices
|
|
48
|
+
|
|
49
|
+
- **Start a run for anything > ~5 seconds.** Users want feedback; a spinner with no context feels frozen.
|
|
50
|
+
- **Update at natural checkpoints**, not every iteration. Every 5–10% is enough for most UIs.
|
|
51
|
+
- **Always call `complete-run`** at the end — including the error path. An orphaned `running` row is worse than no row.
|
|
52
|
+
- **Pair with `notify`** on completion. The tray tells users what's *running*; notifications tell them what *finished*.
|
|
53
|
+
- **Use `metadataJson`** on `start-run` to pass a link back to the produced artifact (thread id, document path), so the UI can deep-link from the runs tray.
|
|
54
|
+
|
|
55
|
+
## Runs API
|
|
56
|
+
|
|
57
|
+
Mounted at `/_agent-native/runs/*` by `core-routes-plugin`. **Read-only** over HTTP — writes flow through the agent tools:
|
|
58
|
+
|
|
59
|
+
| Method | Route |
|
|
60
|
+
|---|---|
|
|
61
|
+
| `GET` | `/_agent-native/runs?active=true&limit=50` |
|
|
62
|
+
| `GET` | `/_agent-native/runs/:id` |
|
|
63
|
+
| `DELETE` | `/_agent-native/runs/:id` |
|
|
64
|
+
|
|
65
|
+
## UI Surface
|
|
66
|
+
|
|
67
|
+
Ships as `<RunsTray />` at `@agent-native/core/client/progress`:
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
import { RunsTray } from "@agent-native/core/client/progress";
|
|
71
|
+
|
|
72
|
+
export function HeaderBar() {
|
|
73
|
+
return (
|
|
74
|
+
<header className="flex items-center gap-2">
|
|
75
|
+
{/* … */}
|
|
76
|
+
<RunsTray />
|
|
77
|
+
</header>
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Inline header widget — mount next to the notifications bell. Shows a spinner icon + count badge when runs are active; click opens a dropdown with a live percent bar per run. Hides the trigger entirely when no active runs. Polls `active=true` every `pollMs` (default 3s).
|
|
83
|
+
|
|
84
|
+
## Event Bus Integration
|
|
85
|
+
|
|
86
|
+
Two events emit on the bus so automations can react:
|
|
87
|
+
|
|
88
|
+
- `run.progress.started` — `{ runId, title, step? }`
|
|
89
|
+
- `run.progress.updated` — `{ runId, percent, step, status }`
|
|
90
|
+
|
|
91
|
+
Example automation: *"when a run takes longer than 5 minutes, notify me."*
|
|
92
|
+
|
|
93
|
+
## Related Skills
|
|
94
|
+
|
|
95
|
+
- `notifications` — fire one when a run finishes so the user sees the outcome.
|
|
96
|
+
- `automations` — subscribe to `run.progress.updated` to build watchdogs on slow runs.
|
|
97
|
+
- `delegate-to-agent` — if you're delegating a long task, start a run on the delegator side so the caller has visibility.
|
|
@@ -84,16 +84,18 @@ You do NOT get auto-injected screen state. **Call `pnpm action view-screen` at t
|
|
|
84
84
|
|
|
85
85
|
Skills in `.agents/skills/` provide detailed guidance for each architectural rule. Read them before making changes.
|
|
86
86
|
|
|
87
|
-
| Skill | When to read
|
|
88
|
-
| --------------------- |
|
|
89
|
-
| `storing-data` | Before storing or reading any app state
|
|
90
|
-
| `delegate-to-agent` | Before adding LLM calls or AI delegation
|
|
91
|
-
| `actions` | Before creating or modifying actions
|
|
92
|
-
| `real-time-sync` | Before wiring up real-time UI sync
|
|
93
|
-
| `self-modifying-code` | Before editing source, components, or styles
|
|
94
|
-
| `capture-learnings` | Before recording user preferences or corrections
|
|
95
|
-
| `frontend-design` | Before building or restyling any UI component, page, or layout
|
|
96
|
-
| `agent-engines` | Before switching LLM providers or registering a custom engine
|
|
87
|
+
| Skill | When to read |
|
|
88
|
+
| --------------------- | --------------------------------------------------------------- |
|
|
89
|
+
| `storing-data` | Before storing or reading any app state |
|
|
90
|
+
| `delegate-to-agent` | Before adding LLM calls or AI delegation |
|
|
91
|
+
| `actions` | Before creating or modifying actions |
|
|
92
|
+
| `real-time-sync` | Before wiring up real-time UI sync |
|
|
93
|
+
| `self-modifying-code` | Before editing source, components, or styles |
|
|
94
|
+
| `capture-learnings` | Before recording user preferences or corrections |
|
|
95
|
+
| `frontend-design` | Before building or restyling any UI component, page, or layout |
|
|
96
|
+
| `agent-engines` | Before switching LLM providers or registering a custom engine |
|
|
97
|
+
| `notifications` | Before surfacing alerts/progress to the user or adding channels |
|
|
98
|
+
| `progress` | Before running any task that takes more than a few seconds |
|
|
97
99
|
|
|
98
100
|
## When Adding Features
|
|
99
101
|
|
|
@@ -22,23 +22,23 @@
|
|
|
22
22
|
"@react-router/dev": "^7.13.1",
|
|
23
23
|
"@react-router/fs-routes": "^7.13.1",
|
|
24
24
|
"@tailwindcss/vite": "^4.1.18",
|
|
25
|
-
"@tanstack/react-query": "^5.
|
|
25
|
+
"@tanstack/react-query": "^5.99.2",
|
|
26
26
|
"@types/node": "^24.2.1",
|
|
27
|
-
"@types/react": "^
|
|
28
|
-
"@types/react-dom": "^
|
|
27
|
+
"@types/react": "^19.2.14",
|
|
28
|
+
"@types/react-dom": "^19.2.3",
|
|
29
29
|
"class-variance-authority": "^0.7.1",
|
|
30
30
|
"clsx": "^2.1.1",
|
|
31
|
-
"lucide-react": "^
|
|
31
|
+
"lucide-react": "^1.8.0",
|
|
32
32
|
"next-themes": "^0.4.6",
|
|
33
33
|
"prettier": "^3.6.2",
|
|
34
|
-
"react": "^
|
|
35
|
-
"react-dom": "^
|
|
34
|
+
"react": "^19.2.5",
|
|
35
|
+
"react-dom": "^19.2.5",
|
|
36
36
|
"react-router": "^7.13.1",
|
|
37
|
-
"sonner": "^
|
|
38
|
-
"tailwind-merge": "^
|
|
37
|
+
"sonner": "^2.0.7",
|
|
38
|
+
"tailwind-merge": "^3.5.0",
|
|
39
39
|
"tailwindcss": "^4.1.18",
|
|
40
40
|
"tsx": "^4.20.3",
|
|
41
|
-
"typescript": "^
|
|
42
|
-
"vite": "^
|
|
41
|
+
"typescript": "^6.0.3",
|
|
42
|
+
"vite": "^8.0.0"
|
|
43
43
|
}
|
|
44
44
|
}
|
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
"./styles/tokens.css": "./styles/tokens.css"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@agent-native/core": "^0.
|
|
26
|
+
"@agent-native/core": "^0.7.10"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@types/react": "^
|
|
30
|
-
"react": "^
|
|
31
|
-
"typescript": "^
|
|
29
|
+
"@types/react": "^19.2.14",
|
|
30
|
+
"react": "^19.2.5",
|
|
31
|
+
"typescript": "^6.0.3"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
|
-
"react": "^
|
|
34
|
+
"react": "^19.2.5"
|
|
35
35
|
}
|
|
36
36
|
}
|
package/tsconfig.base.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"compilerOptions": {
|
|
4
|
+
"ignoreDeprecations": "6.0",
|
|
4
5
|
"target": "ES2020",
|
|
5
6
|
"useDefineForClassFields": true,
|
|
6
7
|
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
@@ -15,7 +16,6 @@
|
|
|
15
16
|
"jsx": "react-jsx",
|
|
16
17
|
"esModuleInterop": true,
|
|
17
18
|
"allowSyntheticDefaultImports": true,
|
|
18
|
-
"forceConsistentCasingInFileNames": true,
|
|
19
19
|
|
|
20
20
|
"strict": false,
|
|
21
21
|
"noUnusedLocals": false,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LLMSection.d.ts","sourceRoot":"","sources":["../../../src/client/settings/LLMSection.tsx"],"names":[],"mappings":"AAiBA,wBAAgB,UAAU,4CAuIzB"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useEffect, useCallback } from "react";
|
|
3
|
-
import { IconBrain, IconCheck, IconLoader2, IconExternalLink, } from "@tabler/icons-react";
|
|
4
|
-
import { SettingsSection } from "./SettingsSection.js";
|
|
5
|
-
import { useBuilderStatus } from "./useBuilderStatus.js";
|
|
6
|
-
export function LLMSection() {
|
|
7
|
-
const { status: builder } = useBuilderStatus();
|
|
8
|
-
const [envKeys, setEnvKeys] = useState([]);
|
|
9
|
-
const [loading, setLoading] = useState(true);
|
|
10
|
-
const [apiKey, setApiKey] = useState("");
|
|
11
|
-
const [saving, setSaving] = useState(false);
|
|
12
|
-
const [saved, setSaved] = useState(false);
|
|
13
|
-
const fetchEnvStatus = useCallback(async () => {
|
|
14
|
-
try {
|
|
15
|
-
const res = await fetch("/_agent-native/env-status");
|
|
16
|
-
if (!res.ok)
|
|
17
|
-
return;
|
|
18
|
-
setEnvKeys(await res.json());
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
// env-status not configured
|
|
22
|
-
}
|
|
23
|
-
finally {
|
|
24
|
-
setLoading(false);
|
|
25
|
-
}
|
|
26
|
-
}, []);
|
|
27
|
-
useEffect(() => {
|
|
28
|
-
fetchEnvStatus();
|
|
29
|
-
}, [fetchEnvStatus]);
|
|
30
|
-
const anthropicKey = envKeys.find((k) => k.key === "ANTHROPIC_API_KEY");
|
|
31
|
-
const isConfigured = anthropicKey?.configured ?? false;
|
|
32
|
-
const builderConnected = builder?.configured ?? false;
|
|
33
|
-
const handleSave = async () => {
|
|
34
|
-
if (!apiKey.trim())
|
|
35
|
-
return;
|
|
36
|
-
setSaving(true);
|
|
37
|
-
setSaved(false);
|
|
38
|
-
try {
|
|
39
|
-
const res = await fetch("/_agent-native/env-vars", {
|
|
40
|
-
method: "POST",
|
|
41
|
-
headers: { "Content-Type": "application/json" },
|
|
42
|
-
body: JSON.stringify({
|
|
43
|
-
vars: [{ key: "ANTHROPIC_API_KEY", value: apiKey.trim() }],
|
|
44
|
-
}),
|
|
45
|
-
});
|
|
46
|
-
if (res.ok) {
|
|
47
|
-
setSaved(true);
|
|
48
|
-
setApiKey("");
|
|
49
|
-
fetchEnvStatus();
|
|
50
|
-
setTimeout(() => setSaved(false), 2000);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
finally {
|
|
54
|
-
setSaving(false);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
return (_jsx(SettingsSection, { icon: _jsx(IconBrain, { size: 14 }), title: "LLM", subtitle: "Provide an Anthropic API key or connect Builder to use their LLM proxy.", connected: isConfigured || builderConnected, children: _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "rounded-md border border-border px-2.5 py-2", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("div", { className: "text-[11px] font-medium text-foreground", children: "Builder LLM Proxy" }), builderConnected ? (_jsxs("span", { className: "flex items-center gap-1 text-[10px] text-green-500", children: [_jsx(IconCheck, { size: 10 }), "Connected"] })) : builder?.connectUrl ? (_jsxs("a", { href: builder.connectUrl, target: "_blank", rel: "noopener noreferrer", className: "flex items-center gap-1 rounded px-2 py-0.5 text-[10px] font-medium bg-accent text-foreground hover:bg-accent/80", children: ["Connect Builder", _jsx(IconExternalLink, { size: 10 })] })) : null] }), _jsx("p", { className: "text-[10px] text-muted-foreground mt-1", children: builderConnected
|
|
58
|
-
? `Using Builder's LLM proxy${builder?.orgName ? ` (${builder.orgName})` : ""}`
|
|
59
|
-
: "Use Builder's managed Anthropic proxy — no API key needed" })] }), _jsxs("div", { className: "rounded-md border border-border px-2.5 py-2", children: [_jsx("div", { className: "text-[11px] font-medium text-foreground mb-1.5", children: "Own API Key" }), loading ? (_jsxs("div", { className: "flex items-center gap-1.5 text-[10px] text-muted-foreground", children: [_jsx(IconLoader2, { size: 10, className: "animate-spin" }), "Checking..."] })) : isConfigured ? (_jsxs("div", { className: "flex items-center gap-1.5 text-[10px] text-green-500", children: [_jsx(IconCheck, { size: 10 }), "ANTHROPIC_API_KEY configured"] })) : (_jsxs("div", { className: "flex gap-1.5", children: [_jsx("input", { type: "password", value: apiKey, onChange: (e) => setApiKey(e.target.value), onKeyDown: (e) => {
|
|
60
|
-
if (e.key === "Enter")
|
|
61
|
-
handleSave();
|
|
62
|
-
}, placeholder: "sk-ant-...", className: "flex-1 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent" }), _jsx("button", { onClick: handleSave, disabled: !apiKey.trim() || saving, className: "rounded bg-accent px-2 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40", children: saving ? (_jsx(IconLoader2, { size: 10, className: "animate-spin" })) : saved ? (_jsx(IconCheck, { size: 10 })) : ("Save") })] }))] })] }) }));
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=LLMSection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LLMSection.js","sourceRoot":"","sources":["../../../src/client/settings/LLMSection.tsx"],"names":[],"mappings":"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"}
|