@agent-native/core 0.96.0 → 0.97.0
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/README.md +6 -0
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +39 -0
- package/corpus/core/docs/content/audit-log.mdx +2 -1
- package/corpus/core/docs/content/automations.mdx +7 -7
- package/corpus/core/docs/content/creating-templates.mdx +1 -1
- package/corpus/core/docs/content/internationalization.mdx +2 -1
- package/corpus/core/docs/content/locales/ar-SA/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/ar-SA/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/ar-SA/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/ar-SA/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/package-lifecycle.mdx +19 -0
- package/corpus/core/docs/content/locales/ar-SA/sandbox-adapters.mdx +18 -7
- package/corpus/core/docs/content/locales/ar-SA/security.mdx +8 -0
- package/corpus/core/docs/content/locales/de-DE/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/de-DE/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/de-DE/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/de-DE/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/package-lifecycle.mdx +22 -0
- package/corpus/core/docs/content/locales/de-DE/sandbox-adapters.mdx +18 -7
- package/corpus/core/docs/content/locales/de-DE/security.mdx +8 -0
- package/corpus/core/docs/content/locales/es-ES/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/es-ES/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/es-ES/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/es-ES/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/package-lifecycle.mdx +22 -0
- package/corpus/core/docs/content/locales/es-ES/sandbox-adapters.mdx +18 -7
- package/corpus/core/docs/content/locales/es-ES/security.mdx +8 -0
- package/corpus/core/docs/content/locales/fr-FR/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/fr-FR/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/fr-FR/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/fr-FR/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/package-lifecycle.mdx +21 -0
- package/corpus/core/docs/content/locales/fr-FR/sandbox-adapters.mdx +19 -8
- package/corpus/core/docs/content/locales/fr-FR/security.mdx +8 -0
- package/corpus/core/docs/content/locales/hi-IN/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/hi-IN/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/hi-IN/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/hi-IN/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/package-lifecycle.mdx +20 -0
- package/corpus/core/docs/content/locales/hi-IN/sandbox-adapters.mdx +18 -7
- package/corpus/core/docs/content/locales/hi-IN/security.mdx +8 -0
- package/corpus/core/docs/content/locales/ja-JP/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/ja-JP/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/ja-JP/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/ja-JP/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/package-lifecycle.mdx +21 -0
- package/corpus/core/docs/content/locales/ja-JP/sandbox-adapters.mdx +17 -6
- package/corpus/core/docs/content/locales/ja-JP/security.mdx +8 -0
- package/corpus/core/docs/content/locales/ko-KR/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/ko-KR/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/ko-KR/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/ko-KR/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/package-lifecycle.mdx +20 -0
- package/corpus/core/docs/content/locales/ko-KR/sandbox-adapters.mdx +17 -6
- package/corpus/core/docs/content/locales/ko-KR/security.mdx +8 -0
- package/corpus/core/docs/content/locales/pt-BR/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/pt-BR/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/pt-BR/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/pt-BR/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/package-lifecycle.mdx +21 -0
- package/corpus/core/docs/content/locales/pt-BR/sandbox-adapters.mdx +18 -7
- package/corpus/core/docs/content/locales/pt-BR/security.mdx +8 -0
- package/corpus/core/docs/content/locales/zh-CN/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/zh-CN/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/zh-CN/getting-started.mdx +6 -4
- package/corpus/core/docs/content/locales/zh-CN/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/package-lifecycle.mdx +19 -0
- package/corpus/core/docs/content/locales/zh-CN/sandbox-adapters.mdx +17 -6
- package/corpus/core/docs/content/locales/zh-CN/security.mdx +8 -0
- package/corpus/core/docs/content/locales/zh-TW/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/zh-TW/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/zh-TW/getting-started.mdx +6 -4
- package/corpus/core/docs/content/locales/zh-TW/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/package-lifecycle.mdx +19 -0
- package/corpus/core/docs/content/locales/zh-TW/sandbox-adapters.mdx +18 -7
- package/corpus/core/docs/content/locales/zh-TW/security.mdx +8 -0
- package/corpus/core/docs/content/package-lifecycle.mdx +51 -0
- package/corpus/core/docs/content/sandbox-adapters.mdx +16 -5
- package/corpus/core/package.json +9 -2
- package/corpus/core/src/a2a/auth-policy.ts +33 -0
- package/corpus/core/src/agent/durable-background.ts +15 -7
- package/corpus/core/src/agent/run-store.ts +13 -4
- package/corpus/core/src/audit/actions/export-audit-events.ts +162 -0
- package/corpus/core/src/audit/store.ts +8 -3
- package/corpus/core/src/audit/types.ts +3 -0
- package/corpus/core/src/cli/doctor.ts +396 -0
- package/corpus/core/src/cli/index.ts +56 -0
- package/corpus/core/src/cli/info.ts +3 -3
- package/corpus/core/src/cli/package-lifecycle.ts +821 -0
- package/corpus/core/src/client/agent-chat-adapter.ts +9 -9
- package/corpus/core/src/guards/db-tool-scoping.ts +129 -0
- package/corpus/core/src/guards/index.ts +23 -0
- package/corpus/core/src/guards/no-drizzle-push.ts +116 -0
- package/corpus/core/src/guards/no-env-credentials.ts +229 -0
- package/corpus/core/src/guards/no-env-mutation.ts +114 -0
- package/corpus/core/src/guards/no-localhost-fallback.ts +124 -0
- package/corpus/core/src/guards/no-unscoped-credentials.ts +227 -0
- package/corpus/core/src/guards/no-unscoped-queries.ts +834 -0
- package/corpus/core/src/guards/scan-utils.ts +105 -0
- package/corpus/core/src/guards/types.ts +30 -0
- package/corpus/core/src/org/accept-pending.ts +9 -1
- package/corpus/core/src/org/migrations.ts +41 -0
- package/corpus/core/src/package-lifecycle/index.ts +1 -0
- package/corpus/core/src/package-lifecycle/manifest.ts +120 -0
- package/corpus/core/src/provider-api/custom-registry.ts +56 -0
- package/corpus/core/src/provider-api/index.ts +2 -0
- package/corpus/core/src/secrets/storage.ts +47 -27
- package/corpus/core/src/server/action-discovery.ts +4 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +54 -12
- package/corpus/core/src/server/core-routes-plugin.ts +30 -14
- package/corpus/core/src/server/csrf.ts +24 -5
- package/corpus/core/src/server/framework-request-handler.ts +34 -0
- package/corpus/core/src/server/google-realtime-session.ts +1 -36
- package/corpus/core/src/server/poll.ts +24 -2
- package/corpus/core/src/server/realtime-voice.ts +9 -0
- package/corpus/core/src/server/request-origin.ts +63 -0
- package/corpus/core/src/server/transcribe-voice.ts +1 -50
- package/corpus/core/src/templates/default/package.json +2 -2
- package/corpus/core/src/templates/headless/package.json +0 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/audit-log/SKILL.md +3 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/automations/SKILL.md +1 -1
- package/corpus/core/src/templates/workspace-core/package.json +0 -1
- package/corpus/core/src/templates/workspace-root/package.json +0 -1
- package/corpus/core/src/triggers/actions.ts +11 -3
- package/corpus/core/src/triggers/types.ts +7 -1
- package/corpus/templates/analytics/actions/compose-dashboard.ts +65 -37
- package/corpus/templates/analytics/actions/mutate-dashboard.ts +73 -24
- package/corpus/templates/analytics/actions/reorder-dashboard-panels.ts +16 -13
- package/corpus/templates/analytics/actions/update-dashboard.ts +53 -42
- package/corpus/templates/analytics/changelog/2026-07-10-dashboard-edits-from-the-agent-and-the-ui-at-the-same-time-n.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-timed-out-bigquery-jobs-are-now-cancelled-so-they-stop-consu.md +6 -0
- package/corpus/templates/analytics/package.json +1 -2
- package/corpus/templates/analytics/server/lib/bigquery.ts +3 -2
- package/corpus/templates/analytics/server/lib/dashboards-store.ts +154 -11
- package/corpus/templates/assets/package.json +1 -2
- package/corpus/templates/brain/package.json +1 -2
- package/corpus/templates/calendar/package.json +1 -2
- package/corpus/templates/chat/package.json +1 -2
- package/corpus/templates/clips/changelog/2026-07-10-atomic-view-tracking.md +6 -0
- package/corpus/templates/clips/chrome-extension/package.json +3 -2
- package/corpus/templates/clips/desktop/package.json +6 -4
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +26 -13
- package/corpus/templates/clips/desktop/src/lib/voice-dictation.ts +4 -1
- package/corpus/templates/clips/package.json +1 -2
- package/corpus/templates/clips/server/db/schema.ts +29 -17
- package/corpus/templates/clips/server/plugins/db.ts +8 -0
- package/corpus/templates/clips/server/routes/api/view-event.post.ts +260 -105
- package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +16 -0
- package/corpus/templates/content/AGENTS.md +72 -62
- package/corpus/templates/content/actions/_content-database-source-adapters.ts +84 -0
- package/corpus/templates/content/actions/_database-source-utils.ts +206 -96
- package/corpus/templates/content/actions/_notion-database-source-adapter.ts +216 -0
- package/corpus/templates/content/actions/_position-utils.ts +76 -0
- package/corpus/templates/content/actions/_property-utils.ts +31 -20
- package/corpus/templates/content/actions/add-database-item.ts +52 -39
- package/corpus/templates/content/actions/attach-content-database-source.ts +95 -11
- package/corpus/templates/content/actions/change-content-database-source-role.ts +24 -1
- package/corpus/templates/content/actions/configure-document-property.ts +36 -27
- package/corpus/templates/content/actions/create-content-database.ts +40 -30
- package/corpus/templates/content/actions/create-document.ts +39 -32
- package/corpus/templates/content/actions/duplicate-document-property.ts +37 -28
- package/corpus/templates/content/actions/list-notion-database-sources.ts +80 -0
- package/corpus/templates/content/actions/move-document.ts +64 -48
- package/corpus/templates/content/actions/refresh-content-database-source.ts +42 -3
- package/corpus/templates/content/actions/share-local-file-document.ts +36 -27
- package/corpus/templates/content/actions/suggest-source-join-key.ts +39 -16
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +89 -23
- package/corpus/templates/content/app/components/editor/database/settings.tsx +1 -1
- package/corpus/templates/content/app/hooks/use-content-database.ts +18 -1
- package/corpus/templates/content/app/i18n/zh-TW.ts +4 -0
- package/corpus/templates/content/app/i18n-data.ts +40 -0
- package/corpus/templates/content/changelog/2026-07-10-failed-row-creation-and-source-attach-now-show-an-error-inst.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-items-added-at-the-same-time-no-longer-end-up-with-identical.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-notion-databases-can-add-read-only-details-to-content-tables.md +6 -0
- package/corpus/templates/content/package.json +1 -2
- package/corpus/templates/content/parity/matrix.md +25 -25
- package/corpus/templates/content/parity/matrix.ts +1 -0
- package/corpus/templates/content/server/routes/api/documents/[id]/move.patch.ts +43 -26
- package/corpus/templates/content/shared/api.ts +16 -1
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +8 -4
- package/corpus/templates/design/AGENTS.md +12 -2
- package/corpus/templates/design/DEVELOPING.md +10 -6
- package/corpus/templates/design/actions/apply-visual-edit.ts +191 -6
- package/corpus/templates/design/actions/duplicate-design.ts +31 -25
- package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +5 -1
- package/corpus/templates/design/changelog/2026-07-10-duplicating-a-design-can-no-longer-produce-a-copy-with-missi.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-local-visual-edits-can-now-save-safe-leaf-text-class-and.md +6 -0
- package/corpus/templates/design/package.json +1 -1
- package/corpus/templates/design/shared/local-jsx-visual-edit.ts +388 -0
- package/corpus/templates/dispatch/package.json +1 -2
- package/corpus/templates/forms/actions/patch-form-fields.ts +82 -44
- package/corpus/templates/forms/changelog/2026-07-10-simultaneous-edits-to-different-form-fields-no-longer-overwr.md +6 -0
- package/corpus/templates/forms/package.json +1 -2
- package/corpus/templates/macros/package.json +1 -2
- package/corpus/templates/mail/app/components/email/EmailThread.tsx +3 -1
- package/corpus/templates/mail/changelog/2026-07-10-fixed-calendar-rsvp-buttons-in-emails-firing-duplicate-respo.md +6 -0
- package/corpus/templates/mail/package.json +1 -2
- package/corpus/templates/plan/actions/restore-plan-version.ts +126 -96
- package/corpus/templates/plan/changelog/2026-07-10-restoring-a-plan-version-can-no-longer-leave-a-plan-half-res.md +6 -0
- package/corpus/templates/plan/package.json +1 -2
- package/corpus/templates/plan/server/plans.ts +9 -2
- package/corpus/templates/slides/actions/list-decks.ts +28 -0
- package/corpus/templates/slides/app/components/deck/MermaidRenderer.tsx +41 -26
- package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +4 -8
- package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +2 -4
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +4 -8
- package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +5 -12
- package/corpus/templates/slides/app/components/editor/HistoryPanel.tsx +3 -6
- package/corpus/templates/slides/app/components/editor/ImageDropPromptPopover.tsx +3 -6
- package/corpus/templates/slides/app/components/editor/PromptDialog.tsx +2 -5
- package/corpus/templates/slides/app/context/DeckContext.tsx +47 -4
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +11 -30
- package/corpus/templates/slides/app/pages/Index.tsx +2 -3
- package/corpus/templates/slides/app/root.tsx +0 -5
- package/corpus/templates/slides/changelog/2026-07-10-deck-lists-load-much-faster-and-no-longer-re-download-slide-.md +6 -0
- package/corpus/templates/slides/package.json +1 -2
- package/dist/a2a/auth-policy.d.ts +19 -0
- package/dist/a2a/auth-policy.d.ts.map +1 -1
- package/dist/a2a/auth-policy.js +32 -0
- package/dist/a2a/auth-policy.js.map +1 -1
- package/dist/agent/durable-background.d.ts +8 -5
- package/dist/agent/durable-background.d.ts.map +1 -1
- package/dist/agent/durable-background.js +15 -8
- package/dist/agent/durable-background.js.map +1 -1
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +9 -4
- package/dist/agent/run-store.js.map +1 -1
- package/dist/audit/actions/export-audit-events.d.ts +27 -0
- package/dist/audit/actions/export-audit-events.d.ts.map +1 -0
- package/dist/audit/actions/export-audit-events.js +144 -0
- package/dist/audit/actions/export-audit-events.js.map +1 -0
- package/dist/audit/store.d.ts +1 -0
- package/dist/audit/store.d.ts.map +1 -1
- package/dist/audit/store.js +8 -3
- package/dist/audit/store.js.map +1 -1
- package/dist/audit/types.d.ts +3 -0
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/audit/types.js.map +1 -1
- package/dist/cli/doctor.d.ts +83 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +277 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/index.js +50 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/info.js +3 -3
- package/dist/cli/info.js.map +1 -1
- package/dist/cli/package-lifecycle.d.ts +50 -0
- package/dist/cli/package-lifecycle.d.ts.map +1 -0
- package/dist/cli/package-lifecycle.js +560 -0
- package/dist/cli/package-lifecycle.js.map +1 -0
- package/dist/client/agent-chat-adapter.js +7 -3
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/guards/db-tool-scoping.d.ts +38 -0
- package/dist/guards/db-tool-scoping.d.ts.map +1 -0
- package/dist/guards/db-tool-scoping.js +114 -0
- package/dist/guards/db-tool-scoping.js.map +1 -0
- package/dist/guards/index.d.ts +23 -0
- package/dist/guards/index.d.ts.map +1 -0
- package/dist/guards/index.js +19 -0
- package/dist/guards/index.js.map +1 -0
- package/dist/guards/no-drizzle-push.d.ts +14 -0
- package/dist/guards/no-drizzle-push.d.ts.map +1 -0
- package/dist/guards/no-drizzle-push.js +97 -0
- package/dist/guards/no-drizzle-push.js.map +1 -0
- package/dist/guards/no-env-credentials.d.ts +36 -0
- package/dist/guards/no-env-credentials.d.ts.map +1 -0
- package/dist/guards/no-env-credentials.js +204 -0
- package/dist/guards/no-env-credentials.js.map +1 -0
- package/dist/guards/no-env-mutation.d.ts +23 -0
- package/dist/guards/no-env-mutation.d.ts.map +1 -0
- package/dist/guards/no-env-mutation.js +90 -0
- package/dist/guards/no-env-mutation.js.map +1 -0
- package/dist/guards/no-localhost-fallback.d.ts +30 -0
- package/dist/guards/no-localhost-fallback.d.ts.map +1 -0
- package/dist/guards/no-localhost-fallback.js +105 -0
- package/dist/guards/no-localhost-fallback.js.map +1 -0
- package/dist/guards/no-unscoped-credentials.d.ts +28 -0
- package/dist/guards/no-unscoped-credentials.d.ts.map +1 -0
- package/dist/guards/no-unscoped-credentials.js +199 -0
- package/dist/guards/no-unscoped-credentials.js.map +1 -0
- package/dist/guards/no-unscoped-queries.d.ts +32 -0
- package/dist/guards/no-unscoped-queries.d.ts.map +1 -0
- package/dist/guards/no-unscoped-queries.js +720 -0
- package/dist/guards/no-unscoped-queries.js.map +1 -0
- package/dist/guards/scan-utils.d.ts +28 -0
- package/dist/guards/scan-utils.d.ts.map +1 -0
- package/dist/guards/scan-utils.js +92 -0
- package/dist/guards/scan-utils.js.map +1 -0
- package/dist/guards/types.d.ts +28 -0
- package/dist/guards/types.d.ts.map +1 -0
- package/dist/guards/types.js +11 -0
- package/dist/guards/types.js.map +1 -0
- package/dist/org/accept-pending.d.ts.map +1 -1
- package/dist/org/accept-pending.js +9 -1
- package/dist/org/accept-pending.js.map +1 -1
- package/dist/org/migrations.d.ts +7 -2
- package/dist/org/migrations.d.ts.map +1 -1
- package/dist/org/migrations.js +41 -0
- package/dist/org/migrations.js.map +1 -1
- package/dist/package-lifecycle/index.d.ts +2 -0
- package/dist/package-lifecycle/index.d.ts.map +1 -0
- package/dist/package-lifecycle/index.js +2 -0
- package/dist/package-lifecycle/index.js.map +1 -0
- package/dist/package-lifecycle/manifest.d.ts +24 -0
- package/dist/package-lifecycle/manifest.d.ts.map +1 -0
- package/dist/package-lifecycle/manifest.js +81 -0
- package/dist/package-lifecycle/manifest.js.map +1 -0
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/custom-registry.d.ts +32 -1
- package/dist/provider-api/custom-registry.d.ts.map +1 -1
- package/dist/provider-api/custom-registry.js +41 -1
- package/dist/provider-api/custom-registry.js.map +1 -1
- package/dist/provider-api/index.d.ts +1 -1
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +1 -1
- package/dist/provider-api/index.js.map +1 -1
- package/dist/secrets/storage.d.ts.map +1 -1
- package/dist/secrets/storage.js +45 -27
- package/dist/secrets/storage.js.map +1 -1
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +4 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +47 -13
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +23 -12
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/csrf.js +18 -5
- package/dist/server/csrf.js.map +1 -1
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +34 -0
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/server/google-realtime-session.d.ts.map +1 -1
- package/dist/server/google-realtime-session.js +2 -34
- package/dist/server/google-realtime-session.js.map +1 -1
- package/dist/server/poll.d.ts.map +1 -1
- package/dist/server/poll.js +24 -2
- package/dist/server/poll.js.map +1 -1
- package/dist/server/realtime-voice.d.ts.map +1 -1
- package/dist/server/realtime-voice.js +9 -0
- package/dist/server/realtime-voice.js.map +1 -1
- package/dist/server/request-origin.d.ts +10 -0
- package/dist/server/request-origin.d.ts.map +1 -0
- package/dist/server/request-origin.js +60 -0
- package/dist/server/request-origin.js.map +1 -0
- package/dist/server/transcribe-voice.d.ts.map +1 -1
- package/dist/server/transcribe-voice.js +2 -48
- package/dist/server/transcribe-voice.js.map +1 -1
- package/dist/templates/default/package.json +2 -2
- package/dist/templates/headless/package.json +0 -1
- package/dist/templates/workspace-core/.agents/skills/audit-log/SKILL.md +3 -0
- package/dist/templates/workspace-core/.agents/skills/automations/SKILL.md +1 -1
- package/dist/templates/workspace-core/package.json +0 -1
- package/dist/templates/workspace-root/package.json +0 -1
- package/dist/triggers/actions.d.ts.map +1 -1
- package/dist/triggers/actions.js +8 -3
- package/dist/triggers/actions.js.map +1 -1
- package/dist/triggers/types.d.ts +7 -1
- package/dist/triggers/types.d.ts.map +1 -1
- package/dist/triggers/types.js.map +1 -1
- package/docs/content/audit-log.mdx +2 -1
- package/docs/content/automations.mdx +7 -7
- package/docs/content/creating-templates.mdx +1 -1
- package/docs/content/internationalization.mdx +2 -1
- package/docs/content/locales/ar-SA/audit-log.mdx +2 -1
- package/docs/content/locales/ar-SA/automations.mdx +7 -7
- package/docs/content/locales/ar-SA/getting-started.mdx +7 -1
- package/docs/content/locales/ar-SA/internationalization.mdx +1 -1
- package/docs/content/locales/ar-SA/package-lifecycle.mdx +19 -0
- package/docs/content/locales/ar-SA/sandbox-adapters.mdx +18 -7
- package/docs/content/locales/ar-SA/security.mdx +8 -0
- package/docs/content/locales/de-DE/audit-log.mdx +2 -1
- package/docs/content/locales/de-DE/automations.mdx +7 -7
- package/docs/content/locales/de-DE/getting-started.mdx +7 -1
- package/docs/content/locales/de-DE/internationalization.mdx +1 -1
- package/docs/content/locales/de-DE/package-lifecycle.mdx +22 -0
- package/docs/content/locales/de-DE/sandbox-adapters.mdx +18 -7
- package/docs/content/locales/de-DE/security.mdx +8 -0
- package/docs/content/locales/es-ES/audit-log.mdx +2 -1
- package/docs/content/locales/es-ES/automations.mdx +7 -7
- package/docs/content/locales/es-ES/getting-started.mdx +7 -1
- package/docs/content/locales/es-ES/internationalization.mdx +1 -1
- package/docs/content/locales/es-ES/package-lifecycle.mdx +22 -0
- package/docs/content/locales/es-ES/sandbox-adapters.mdx +18 -7
- package/docs/content/locales/es-ES/security.mdx +8 -0
- package/docs/content/locales/fr-FR/audit-log.mdx +2 -1
- package/docs/content/locales/fr-FR/automations.mdx +7 -7
- package/docs/content/locales/fr-FR/getting-started.mdx +7 -1
- package/docs/content/locales/fr-FR/internationalization.mdx +1 -1
- package/docs/content/locales/fr-FR/package-lifecycle.mdx +21 -0
- package/docs/content/locales/fr-FR/sandbox-adapters.mdx +19 -8
- package/docs/content/locales/fr-FR/security.mdx +8 -0
- package/docs/content/locales/hi-IN/audit-log.mdx +2 -1
- package/docs/content/locales/hi-IN/automations.mdx +7 -7
- package/docs/content/locales/hi-IN/getting-started.mdx +7 -1
- package/docs/content/locales/hi-IN/internationalization.mdx +1 -1
- package/docs/content/locales/hi-IN/package-lifecycle.mdx +20 -0
- package/docs/content/locales/hi-IN/sandbox-adapters.mdx +18 -7
- package/docs/content/locales/hi-IN/security.mdx +8 -0
- package/docs/content/locales/ja-JP/audit-log.mdx +2 -1
- package/docs/content/locales/ja-JP/automations.mdx +7 -7
- package/docs/content/locales/ja-JP/getting-started.mdx +7 -1
- package/docs/content/locales/ja-JP/internationalization.mdx +1 -1
- package/docs/content/locales/ja-JP/package-lifecycle.mdx +21 -0
- package/docs/content/locales/ja-JP/sandbox-adapters.mdx +17 -6
- package/docs/content/locales/ja-JP/security.mdx +8 -0
- package/docs/content/locales/ko-KR/audit-log.mdx +2 -1
- package/docs/content/locales/ko-KR/automations.mdx +7 -7
- package/docs/content/locales/ko-KR/getting-started.mdx +7 -1
- package/docs/content/locales/ko-KR/internationalization.mdx +1 -1
- package/docs/content/locales/ko-KR/package-lifecycle.mdx +20 -0
- package/docs/content/locales/ko-KR/sandbox-adapters.mdx +17 -6
- package/docs/content/locales/ko-KR/security.mdx +8 -0
- package/docs/content/locales/pt-BR/audit-log.mdx +2 -1
- package/docs/content/locales/pt-BR/automations.mdx +7 -7
- package/docs/content/locales/pt-BR/getting-started.mdx +7 -1
- package/docs/content/locales/pt-BR/internationalization.mdx +1 -1
- package/docs/content/locales/pt-BR/package-lifecycle.mdx +21 -0
- package/docs/content/locales/pt-BR/sandbox-adapters.mdx +18 -7
- package/docs/content/locales/pt-BR/security.mdx +8 -0
- package/docs/content/locales/zh-CN/audit-log.mdx +2 -1
- package/docs/content/locales/zh-CN/automations.mdx +7 -7
- package/docs/content/locales/zh-CN/getting-started.mdx +6 -4
- package/docs/content/locales/zh-CN/internationalization.mdx +1 -1
- package/docs/content/locales/zh-CN/package-lifecycle.mdx +19 -0
- package/docs/content/locales/zh-CN/sandbox-adapters.mdx +17 -6
- package/docs/content/locales/zh-CN/security.mdx +8 -0
- package/docs/content/locales/zh-TW/audit-log.mdx +2 -1
- package/docs/content/locales/zh-TW/automations.mdx +7 -7
- package/docs/content/locales/zh-TW/getting-started.mdx +6 -4
- package/docs/content/locales/zh-TW/internationalization.mdx +1 -1
- package/docs/content/locales/zh-TW/package-lifecycle.mdx +19 -0
- package/docs/content/locales/zh-TW/sandbox-adapters.mdx +18 -7
- package/docs/content/locales/zh-TW/security.mdx +8 -0
- package/docs/content/package-lifecycle.mdx +51 -0
- package/docs/content/sandbox-adapters.mdx +16 -5
- package/package.json +10 -3
- package/src/templates/default/package.json +2 -2
- package/src/templates/headless/package.json +0 -1
- package/src/templates/workspace-core/.agents/skills/audit-log/SKILL.md +3 -0
- package/src/templates/workspace-core/.agents/skills/automations/SKILL.md +1 -1
- package/src/templates/workspace-core/package.json +0 -1
- package/src/templates/workspace-root/package.json +0 -1
- package/corpus/templates/slides/app/components/ui/toast.tsx +0 -1
- package/corpus/templates/slides/app/components/ui/toaster.tsx +0 -1
- package/corpus/templates/slides/app/hooks/use-toast.ts +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/triggers/actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,YAAY,GACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAGzB,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AAExE,KAAK,UAAU,gBAAgB;IAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,gGAAgG,CAAC;IAC1G,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,CAAC,aAAoB,CAAC;YACjC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC7C,SAAS,GAAG,YAAY,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO;YACvB,CAAC,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;YAC7C,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,IAA4B,EAC5B,cAA4B;IAE5B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,SAAS;SACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC;SAC5D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAChE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACxD,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACZ,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/D,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEL,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,uBAAuB,CAAC;IAE1D,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,MAAM,IAAI,GACR,CAAC,CAAC,IAAI,CAAC,WAAW,KAAK,OAAO;YAC5B,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE;YAC7B,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;QACvD,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS;YAChC,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG;YACxC,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,OAAO,OAAO,CAAC,CAAC,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,GAAG,UAAU,IAAI,SAAS,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACvK,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,IAA4B,EAC5B,cAA4B;IAE5B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAC3D,IAAI,CAAC,IAAI;QAAE,OAAO,+CAA+C,CAAC;IAElE,MAAM,IAAI,GAAG,QAAQ,IAAI,KAAK,CAAC;IAE/B,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,+BAA+B,IAAI,0EAA0E,CAAC;IACvH,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5E,MAAM,IAAI,GAAuB;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;QAC7B,OAAO,EAAE,IAAI;QACb,WAAW;QACX,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;QAC9B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;QACtC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;QACjE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS;QAChC,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,SAAS;KACjB,CAAC;IAEF,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAExC,uEAAuE;IACvE,MAAM,yBAAyB,EAAE,CAAC;IAElC,MAAM,OAAO,GACX,WAAW,KAAK,OAAO;QACrB,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/E,CAAC,CAAC,gBAAgB,IAAI,CAAC,QAAQ,GAAG,CAAC;IAEvC,OAAO,eAAe,IAAI,oBAAoB,OAAO,OAAO,IAAI,CAAC,IAAI,QAAQ,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,IAA4B,EAC5B,cAA4B;IAE5B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,MAAM,IAAI,GAAG,QAAQ,IAAI,KAAK,CAAC;IAE/B,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,eAAe,IAAI,oCAAoC,CAAC;IACjE,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEjE,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC;IAC1C,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;IAC/C,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;IAElC,MAAM,WAAW,CACf,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,IAAI,EACb,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CACnC,CAAC;IACF,MAAM,yBAAyB,EAAE,CAAC;IAElC,OAAO,eAAe,IAAI,YAAY,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,IAA4B,EAC5B,cAA4B;IAE5B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,QAAQ,IAAI,CAAC,IAAI,KAAK,CAAC;IAEpC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,QAAQ;QAAE,OAAO,eAAe,IAAI,CAAC,IAAI,cAAc,CAAC;IAE7D,MAAM,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClC,OAAO,eAAe,IAAI,CAAC,IAAI,YAAY,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,IAA4B,EAC5B,cAA4B;IAE5B,kEAAkE;IAClE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAEvD,IAAI,IAAI,GAA4B,EAAE,CAAC;IACvC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,wCAAwC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,4DAA4D;IAC5D,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9C,OAAO,kCAAkC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,uEAAuE,CAAC;AAC3I,CAAC;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AAExE,MAAM,aAAa,GAAG;IACpB,aAAa;IACb,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,WAAW;CACH,CAAC;AAEX,MAAM,UAAU,2BAA2B,CACzC,cAA4B;IAE5B,OAAO;QACL,oBAAoB,EAAE;YACpB,IAAI,EAAE;gBACJ,WAAW,EAAE;;;;;;;gIAO2G;gBACxH,UAAU,EAAE;oBACV,IAAI,EAAE,QAAiB;oBACvB,UAAU,EAAE;wBACV,MAAM,EAAE;4BACN,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,oFAAoF;4BACtF,IAAI,EAAE,CAAC,GAAG,aAAa,CAAC;yBACzB;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,wFAAwF;yBAC3F;wBACD,YAAY,EAAE;4BACZ,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,6CAA6C;4BAC1D,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;yBAC5B;wBACD,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,iHAAiH;yBACpH;wBACD,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,gFAAgF;yBACnF;wBACD,SAAS,EAAE;4BACT,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,wIAAwI;yBAC3I;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,qGAAqG;4BACvG,IAAI,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC;yBACnC;wBACD,MAAM,EAAE;4BACN,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,iFAAiF;yBACpF;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,yJAAyJ;yBAC5J;wBACD,OAAO,EAAE;4BACP,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,sDAAsD;yBACzD;wBACD,YAAY,EAAE;4BACZ,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,wDAAwD;yBAC3D;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,gHAAgH;yBACnH;qBACF;oBACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;iBACrB;aACF;YACD,GAAG,EAAE,KAAK,EAAE,IAA4B,EAAE,EAAE;gBAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAE3B,QAAQ,MAAM,EAAE,CAAC;oBACf,KAAK,aAAa;wBAChB,OAAO,gBAAgB,EAAE,CAAC;oBAC5B,KAAK,MAAM;wBACT,OAAO,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBAC1C,KAAK,QAAQ;wBACX,OAAO,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBAC5C,KAAK,QAAQ;wBACX,OAAO,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBAC5C,KAAK,QAAQ;wBACX,OAAO,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBAC5C,KAAK,WAAW;wBACd,OAAO,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBAC9C;wBACE,OAAO,0BAA0B,MAAM,qBAAqB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC5F,CAAC;YACH,CAAC;SACF;KACF,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Framework-level agent actions for the automations system.\n *\n * These are registered as native tools (not template actions) so they're\n * available in every template. The agent uses them to create, list, and\n * manage automations from chat.\n *\n * All six operations are consolidated into a single `manage-automations` tool\n * with an `action` discriminator to keep the tool registry compact.\n */\n\nimport type { ActionEntry } from \"../agent/production-agent.js\";\nimport { listEvents } from \"../event-bus/index.js\";\nimport {\n resourceListAllOwners,\n resourcePut,\n resourceDelete,\n resourceGetByPath,\n SHARED_OWNER,\n} from \"../resources/store.js\";\nimport {\n parseTriggerFrontmatter,\n buildTriggerContent,\n refreshEventSubscriptions,\n} from \"./dispatcher.js\";\nimport type { TriggerFrontmatter } from \"./types.js\";\n\n/* ------------------------------------------------------------------ */\n/* Individual action handlers */\n/* ------------------------------------------------------------------ */\n\nasync function handleListEvents(): Promise<string> {\n const events = listEvents();\n if (events.length === 0) {\n return \"No events registered yet. Events are registered by integrations (mail, calendar, clips, etc.).\";\n }\n const lines = events.map((e) => {\n let schemaStr = \"\";\n try {\n const s = e.payloadSchema as any;\n if (s?._zod?.def?.shape) {\n const fields = Object.keys(s._zod.def.shape);\n schemaStr = ` Fields: ${fields.join(\", \")}`;\n }\n } catch {\n // ignore\n }\n const example = e.example\n ? `\\n Example: ${JSON.stringify(e.example)}`\n : \"\";\n return `- **${e.name}**: ${e.description}${schemaStr}${example}`;\n });\n return lines.join(\"\\n\");\n}\n\nasync function handleList(\n args: Record<string, string>,\n getCurrentUser: () => string,\n): Promise<string> {\n const owner = getCurrentUser();\n const resources = await resourceListAllOwners(\"jobs/\");\n const triggers = resources\n .filter((r) => r.owner === owner || r.owner === SHARED_OWNER)\n .filter((r) => r.path.endsWith(\".md\"))\n .map((r) => {\n const { meta, body } = parseTriggerFrontmatter(r.content);\n const name = r.path.replace(/^jobs\\//, \"\").replace(/\\.md$/, \"\");\n return { name, meta, body, owner: r.owner, id: r.id };\n })\n .filter((t) => {\n if (args.domain && t.meta.domain !== args.domain) return false;\n if (args.enabled_only === \"true\" && !t.meta.enabled) return false;\n return true;\n });\n\n if (triggers.length === 0) return \"No automations found.\";\n\n const lines = triggers.map((t) => {\n const type =\n t.meta.triggerType === \"event\"\n ? `on ${t.meta.event || \"?\"}`\n : `cron: ${t.meta.schedule}`;\n const status = t.meta.enabled ? \"enabled\" : \"disabled\";\n const lastStatus = t.meta.lastStatus ? ` (last: ${t.meta.lastStatus})` : \"\";\n const condition = t.meta.condition\n ? `\\n Condition: \"${t.meta.condition}\"`\n : \"\";\n const domain = t.meta.domain ? ` [${t.meta.domain}]` : \"\";\n return `- **${t.name}**${domain}: ${type} → ${t.meta.mode} (${status}${lastStatus})${condition}\\n Body: ${t.body.slice(0, 100)}${t.body.length > 100 ? \"...\" : \"\"}`;\n });\n return lines.join(\"\\n\\n\");\n}\n\nasync function handleDefine(\n args: Record<string, string>,\n getCurrentUser: () => string,\n): Promise<string> {\n const owner = getCurrentUser();\n const name = (args.name || \"\").replace(/[^a-z0-9-]/g, \"-\");\n if (!name) return \"Error: name is required (lowercase, hyphens).\";\n\n const path = `jobs/${name}.md`;\n\n // Check if it already exists\n const existing = await resourceGetByPath(owner, path);\n if (existing) {\n return `Error: An automation named \"${name}\" already exists. Use a different name or delete the existing one first.`;\n }\n\n const triggerType = args.trigger_type === \"schedule\" ? \"schedule\" : \"event\";\n const meta: TriggerFrontmatter = {\n schedule: args.schedule || \"\",\n enabled: true,\n triggerType,\n event: args.event || undefined,\n condition: args.condition || undefined,\n mode: args.mode === \"deterministic\" ? \"deterministic\" : \"agentic\",\n domain: args.domain || undefined,\n createdBy: owner,\n runAs: \"creator\",\n };\n\n const content = buildTriggerContent(meta, args.body || \"\");\n await resourcePut(owner, path, content);\n\n // Refresh event subscriptions so the new trigger is active immediately\n await refreshEventSubscriptions();\n\n const summary =\n triggerType === \"event\"\n ? `on ${meta.event || \"?\"}${meta.condition ? ` when \"${meta.condition}\"` : \"\"}`\n : `on schedule \"${meta.schedule}\"`;\n\n return `Automation \"${name}\" created. Fires ${summary} in ${meta.mode} mode.`;\n}\n\nasync function handleUpdate(\n args: Record<string, string>,\n getCurrentUser: () => string,\n): Promise<string> {\n const owner = getCurrentUser();\n const name = args.name;\n const path = `jobs/${name}.md`;\n\n const resource = await resourceGetByPath(owner, path);\n if (!resource) {\n return `Automation \"${name}\" not found (or you don't own it).`;\n }\n\n const { meta, body } = parseTriggerFrontmatter(resource.content);\n\n if (args.enabled !== undefined) {\n meta.enabled = args.enabled !== \"false\";\n }\n if (args.condition !== undefined) {\n meta.condition = args.condition || undefined;\n }\n const newBody = args.body ?? body;\n\n await resourcePut(\n resource.owner,\n resource.path,\n buildTriggerContent(meta, newBody),\n );\n await refreshEventSubscriptions();\n\n return `Automation \"${name}\" updated.`;\n}\n\nasync function handleDelete(\n args: Record<string, string>,\n getCurrentUser: () => string,\n): Promise<string> {\n const owner = getCurrentUser();\n const path = `jobs/${args.name}.md`;\n\n const resource = await resourceGetByPath(owner, path);\n if (!resource) return `Automation \"${args.name}\" not found.`;\n\n await resourceDelete(resource.id);\n return `Automation \"${args.name}\" deleted.`;\n}\n\nasync function handleFireTest(\n args: Record<string, string>,\n getCurrentUser: () => string,\n): Promise<string> {\n // Dynamic import to avoid circular dependency at module load time\n const { emit } = await import(\"../event-bus/index.js\");\n\n let data: Record<string, unknown> = {};\n if (args.data) {\n try {\n data = JSON.parse(args.data);\n } catch {\n return \"Error: invalid JSON in data parameter.\";\n }\n }\n\n // Scope the test event to the current user so only their automations fire,\n // not automations owned by other users in the same process.\n const owner = getCurrentUser();\n emit(\"test.event.fired\", { data }, { owner });\n return `Test event fired with payload: ${JSON.stringify({ data })}. Any automations subscribed to \"test.event.fired\" will be evaluated.`;\n}\n\n/* ------------------------------------------------------------------ */\n/* Consolidated tool entry */\n/* ------------------------------------------------------------------ */\n\nconst VALID_ACTIONS = [\n \"list-events\",\n \"list\",\n \"define\",\n \"update\",\n \"delete\",\n \"fire-test\",\n] as const;\n\nexport function createAutomationToolEntries(\n getCurrentUser: () => string,\n): Record<string, ActionEntry> {\n return {\n \"manage-automations\": {\n tool: {\n description: `Manage automations (event-triggered and scheduled tasks). Use the \"action\" parameter to choose an operation:\n\n- **list-events**: List all registered event types that automations can subscribe to. Returns event names, descriptions, and payload schemas. Call this BEFORE defining an automation to discover available events.\n- **list**: List all automations (triggers). Shows name, event, condition, mode, status, and domain. Optional params: domain, enabled_only.\n- **define**: Create a new automation. IMPORTANT: Always confirm with the user before calling — show them a summary of what will be created. Required params: name, trigger_type, body. Optional: event, schedule, condition, mode, domain.\n- **update**: Update an existing automation's settings (enabled, condition, body, etc.). Required param: name. Optional: enabled, condition, body.\n- **delete**: Delete an automation. Always confirm with the user first. Required param: name.\n- **fire-test**: Fire a test event to validate automations. Emits a test.event.fired event. Optional param: data (JSON string).`,\n parameters: {\n type: \"object\" as const,\n properties: {\n action: {\n type: \"string\",\n description:\n \"The operation to perform: list-events, list, define, update, delete, or fire-test.\",\n enum: [...VALID_ACTIONS],\n },\n name: {\n type: \"string\",\n description:\n \"Slug name for the automation (lowercase, hyphens). Used by define, update, and delete.\",\n },\n trigger_type: {\n type: \"string\",\n description: '\"event\" or \"schedule\". Required for define.',\n enum: [\"event\", \"schedule\"],\n },\n event: {\n type: \"string\",\n description:\n \"For event triggers: the event name to subscribe to. Call with action=list-events first to see available events.\",\n },\n schedule: {\n type: \"string\",\n description:\n 'For schedule triggers: cron expression. Example: \"0 9 * * 1-5\" (9am weekdays).',\n },\n condition: {\n type: \"string\",\n description:\n 'Natural-language condition. Example: \"attendee email ends with @builder.io\". Leave empty for unconditional. Used by define and update.',\n },\n mode: {\n type: \"string\",\n description:\n '\"agentic\" (full agent loop, can use tools) or \"deterministic\" (fixed actions only). Used by define.',\n enum: [\"agentic\", \"deterministic\"],\n },\n domain: {\n type: \"string\",\n description:\n \"Domain tag for grouping (mail, calendar, clips, etc.). Used by define and list.\",\n },\n body: {\n type: \"string\",\n description:\n \"The natural-language instructions for what to do when the automation fires. This becomes the agent's prompt in agentic mode. Used by define and update.\",\n },\n enabled: {\n type: \"string\",\n description:\n '\"true\" or \"false\" to enable/disable. Used by update.',\n },\n enabled_only: {\n type: \"string\",\n description:\n '\"true\" to show only enabled automations. Used by list.',\n },\n data: {\n type: \"string\",\n description:\n 'JSON data to include as the test event payload. Used by fire-test. Example: \\'{\"email\": \"test@example.com\"}\\'.',\n },\n },\n required: [\"action\"],\n },\n },\n run: async (args: Record<string, string>) => {\n const action = args.action;\n\n switch (action) {\n case \"list-events\":\n return handleListEvents();\n case \"list\":\n return handleList(args, getCurrentUser);\n case \"define\":\n return handleDefine(args, getCurrentUser);\n case \"update\":\n return handleUpdate(args, getCurrentUser);\n case \"delete\":\n return handleDelete(args, getCurrentUser);\n case \"fire-test\":\n return handleFireTest(args, getCurrentUser);\n default:\n return `Error: unknown action \"${action}\". Valid actions: ${VALID_ACTIONS.join(\", \")}.`;\n }\n },\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/triggers/actions.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Framework-level agent actions for the automations system.\n *\n * These are registered as native tools (not template actions) so they're\n * available in every template. The agent uses them to create, list, and\n * manage automations from chat.\n *\n * All six operations are consolidated into a single `manage-automations` tool\n * with an `action` discriminator to keep the tool registry compact.\n */\n\nimport type { ActionEntry } from \"../agent/production-agent.js\";\nimport { listEvents } from \"../event-bus/index.js\";\nimport {\n resourceListAllOwners,\n resourcePut,\n resourceDelete,\n resourceGetByPath,\n SHARED_OWNER,\n} from \"../resources/store.js\";\nimport {\n parseTriggerFrontmatter,\n buildTriggerContent,\n refreshEventSubscriptions,\n} from \"./dispatcher.js\";\nimport type { TriggerFrontmatter } from \"./types.js\";\n\n/* ------------------------------------------------------------------ */\n/* Individual action handlers */\n/* ------------------------------------------------------------------ */\n\nasync function handleListEvents(): Promise<string> {\n const events = listEvents();\n if (events.length === 0) {\n return \"No events registered yet. Events are registered by integrations (mail, calendar, clips, etc.).\";\n }\n const lines = events.map((e) => {\n let schemaStr = \"\";\n try {\n const s = e.payloadSchema as any;\n if (s?._zod?.def?.shape) {\n const fields = Object.keys(s._zod.def.shape);\n schemaStr = ` Fields: ${fields.join(\", \")}`;\n }\n } catch {\n // ignore\n }\n const example = e.example\n ? `\\n Example: ${JSON.stringify(e.example)}`\n : \"\";\n return `- **${e.name}**: ${e.description}${schemaStr}${example}`;\n });\n return lines.join(\"\\n\");\n}\n\nasync function handleList(\n args: Record<string, string>,\n getCurrentUser: () => string,\n): Promise<string> {\n const owner = getCurrentUser();\n const resources = await resourceListAllOwners(\"jobs/\");\n const triggers = resources\n .filter((r) => r.owner === owner || r.owner === SHARED_OWNER)\n .filter((r) => r.path.endsWith(\".md\"))\n .map((r) => {\n const { meta, body } = parseTriggerFrontmatter(r.content);\n const name = r.path.replace(/^jobs\\//, \"\").replace(/\\.md$/, \"\");\n return { name, meta, body, owner: r.owner, id: r.id };\n })\n .filter((t) => {\n if (args.domain && t.meta.domain !== args.domain) return false;\n if (args.enabled_only === \"true\" && !t.meta.enabled) return false;\n return true;\n });\n\n if (triggers.length === 0) return \"No automations found.\";\n\n const lines = triggers.map((t) => {\n const type =\n t.meta.triggerType === \"event\"\n ? `on ${t.meta.event || \"?\"}`\n : `cron: ${t.meta.schedule}`;\n const status = t.meta.enabled ? \"enabled\" : \"disabled\";\n const lastStatus = t.meta.lastStatus ? ` (last: ${t.meta.lastStatus})` : \"\";\n const condition = t.meta.condition\n ? `\\n Condition: \"${t.meta.condition}\"`\n : \"\";\n const domain = t.meta.domain ? ` [${t.meta.domain}]` : \"\";\n return `- **${t.name}**${domain}: ${type} → ${t.meta.mode} (${status}${lastStatus})${condition}\\n Body: ${t.body.slice(0, 100)}${t.body.length > 100 ? \"...\" : \"\"}`;\n });\n return lines.join(\"\\n\\n\");\n}\n\nasync function handleDefine(\n args: Record<string, string>,\n getCurrentUser: () => string,\n): Promise<string> {\n const owner = getCurrentUser();\n const name = (args.name || \"\").replace(/[^a-z0-9-]/g, \"-\");\n if (!name) return \"Error: name is required (lowercase, hyphens).\";\n\n const path = `jobs/${name}.md`;\n\n // Check if it already exists\n const existing = await resourceGetByPath(owner, path);\n if (existing) {\n return `Error: An automation named \"${name}\" already exists. Use a different name or delete the existing one first.`;\n }\n\n if (args.mode === \"deterministic\") {\n return (\n \"Error: Deterministic mode was removed — it was never implemented and \" +\n \"automations that set it never fired. Create the automation without \" +\n \"mode (agentic), and describe the exact fixed steps in the automation body.\"\n );\n }\n\n const triggerType = args.trigger_type === \"schedule\" ? \"schedule\" : \"event\";\n const meta: TriggerFrontmatter = {\n schedule: args.schedule || \"\",\n enabled: true,\n triggerType,\n event: args.event || undefined,\n condition: args.condition || undefined,\n mode: \"agentic\",\n domain: args.domain || undefined,\n createdBy: owner,\n runAs: \"creator\",\n };\n\n const content = buildTriggerContent(meta, args.body || \"\");\n await resourcePut(owner, path, content);\n\n // Refresh event subscriptions so the new trigger is active immediately\n await refreshEventSubscriptions();\n\n const summary =\n triggerType === \"event\"\n ? `on ${meta.event || \"?\"}${meta.condition ? ` when \"${meta.condition}\"` : \"\"}`\n : `on schedule \"${meta.schedule}\"`;\n\n return `Automation \"${name}\" created. Fires ${summary} in ${meta.mode} mode.`;\n}\n\nasync function handleUpdate(\n args: Record<string, string>,\n getCurrentUser: () => string,\n): Promise<string> {\n const owner = getCurrentUser();\n const name = args.name;\n const path = `jobs/${name}.md`;\n\n const resource = await resourceGetByPath(owner, path);\n if (!resource) {\n return `Automation \"${name}\" not found (or you don't own it).`;\n }\n\n const { meta, body } = parseTriggerFrontmatter(resource.content);\n\n if (args.enabled !== undefined) {\n meta.enabled = args.enabled !== \"false\";\n }\n if (args.condition !== undefined) {\n meta.condition = args.condition || undefined;\n }\n const newBody = args.body ?? body;\n\n await resourcePut(\n resource.owner,\n resource.path,\n buildTriggerContent(meta, newBody),\n );\n await refreshEventSubscriptions();\n\n return `Automation \"${name}\" updated.`;\n}\n\nasync function handleDelete(\n args: Record<string, string>,\n getCurrentUser: () => string,\n): Promise<string> {\n const owner = getCurrentUser();\n const path = `jobs/${args.name}.md`;\n\n const resource = await resourceGetByPath(owner, path);\n if (!resource) return `Automation \"${args.name}\" not found.`;\n\n await resourceDelete(resource.id);\n return `Automation \"${args.name}\" deleted.`;\n}\n\nasync function handleFireTest(\n args: Record<string, string>,\n getCurrentUser: () => string,\n): Promise<string> {\n // Dynamic import to avoid circular dependency at module load time\n const { emit } = await import(\"../event-bus/index.js\");\n\n let data: Record<string, unknown> = {};\n if (args.data) {\n try {\n data = JSON.parse(args.data);\n } catch {\n return \"Error: invalid JSON in data parameter.\";\n }\n }\n\n // Scope the test event to the current user so only their automations fire,\n // not automations owned by other users in the same process.\n const owner = getCurrentUser();\n emit(\"test.event.fired\", { data }, { owner });\n return `Test event fired with payload: ${JSON.stringify({ data })}. Any automations subscribed to \"test.event.fired\" will be evaluated.`;\n}\n\n/* ------------------------------------------------------------------ */\n/* Consolidated tool entry */\n/* ------------------------------------------------------------------ */\n\nconst VALID_ACTIONS = [\n \"list-events\",\n \"list\",\n \"define\",\n \"update\",\n \"delete\",\n \"fire-test\",\n] as const;\n\nexport function createAutomationToolEntries(\n getCurrentUser: () => string,\n): Record<string, ActionEntry> {\n return {\n \"manage-automations\": {\n tool: {\n description: `Manage automations (event-triggered and scheduled tasks). Use the \"action\" parameter to choose an operation:\n\n- **list-events**: List all registered event types that automations can subscribe to. Returns event names, descriptions, and payload schemas. Call this BEFORE defining an automation to discover available events.\n- **list**: List all automations (triggers). Shows name, event, condition, mode, status, and domain. Optional params: domain, enabled_only.\n- **define**: Create a new automation. IMPORTANT: Always confirm with the user before calling — show them a summary of what will be created. Required params: name, trigger_type, body. Optional: event, schedule, condition, mode, domain.\n- **update**: Update an existing automation's settings (enabled, condition, body, etc.). Required param: name. Optional: enabled, condition, body.\n- **delete**: Delete an automation. Always confirm with the user first. Required param: name.\n- **fire-test**: Fire a test event to validate automations. Emits a test.event.fired event. Optional param: data (JSON string).`,\n parameters: {\n type: \"object\" as const,\n properties: {\n action: {\n type: \"string\",\n description:\n \"The operation to perform: list-events, list, define, update, delete, or fire-test.\",\n enum: [...VALID_ACTIONS],\n },\n name: {\n type: \"string\",\n description:\n \"Slug name for the automation (lowercase, hyphens). Used by define, update, and delete.\",\n },\n trigger_type: {\n type: \"string\",\n description: '\"event\" or \"schedule\". Required for define.',\n enum: [\"event\", \"schedule\"],\n },\n event: {\n type: \"string\",\n description:\n \"For event triggers: the event name to subscribe to. Call with action=list-events first to see available events.\",\n },\n schedule: {\n type: \"string\",\n description:\n 'For schedule triggers: cron expression. Example: \"0 9 * * 1-5\" (9am weekdays).',\n },\n condition: {\n type: \"string\",\n description:\n 'Natural-language condition. Example: \"attendee email ends with @builder.io\". Leave empty for unconditional. Used by define and update.',\n },\n mode: {\n type: \"string\",\n description:\n '\"agentic\" (full agent loop, can use tools) — the only supported mode. Used by define.',\n enum: [\"agentic\"],\n },\n domain: {\n type: \"string\",\n description:\n \"Domain tag for grouping (mail, calendar, clips, etc.). Used by define and list.\",\n },\n body: {\n type: \"string\",\n description:\n \"The natural-language instructions for what to do when the automation fires. This becomes the agent's prompt in agentic mode. Used by define and update.\",\n },\n enabled: {\n type: \"string\",\n description:\n '\"true\" or \"false\" to enable/disable. Used by update.',\n },\n enabled_only: {\n type: \"string\",\n description:\n '\"true\" to show only enabled automations. Used by list.',\n },\n data: {\n type: \"string\",\n description:\n 'JSON data to include as the test event payload. Used by fire-test. Example: \\'{\"email\": \"test@example.com\"}\\'.',\n },\n },\n required: [\"action\"],\n },\n },\n run: async (args: Record<string, string>) => {\n const action = args.action;\n\n switch (action) {\n case \"list-events\":\n return handleListEvents();\n case \"list\":\n return handleList(args, getCurrentUser);\n case \"define\":\n return handleDefine(args, getCurrentUser);\n case \"update\":\n return handleUpdate(args, getCurrentUser);\n case \"delete\":\n return handleDelete(args, getCurrentUser);\n case \"fire-test\":\n return handleFireTest(args, getCurrentUser);\n default:\n return `Error: unknown action \"${action}\". Valid actions: ${VALID_ACTIONS.join(\", \")}.`;\n }\n },\n },\n };\n}\n"]}
|
package/dist/triggers/types.d.ts
CHANGED
|
@@ -14,7 +14,13 @@ export interface TriggerFrontmatter {
|
|
|
14
14
|
event?: string;
|
|
15
15
|
/** Natural-language condition evaluated by Haiku before dispatch. */
|
|
16
16
|
condition?: string;
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* "agentic" = full runAgentLoop; the only mode `manage-automations` will
|
|
19
|
+
* define/update going forward. "deterministic" was removed from the
|
|
20
|
+
* advertised surface (never implemented) and is legacy-only: rows created
|
|
21
|
+
* before the removal may still carry it, and the dispatcher's
|
|
22
|
+
* warn-and-skip branch keeps them inert by design — do not make them fire.
|
|
23
|
+
*/
|
|
18
24
|
mode: "agentic" | "deterministic";
|
|
19
25
|
/** Domain tag for filtering in per-template UIs. */
|
|
20
26
|
domain?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/triggers/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC;IAClC,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/triggers/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC;IAClC,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,IAAI,EAAE,SAAS,GAAG,eAAe,CAAC;IAClC,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,kBAAkB,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/triggers/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG","sourcesContent":["/**\n * Extended frontmatter for triggers (superset of JobFrontmatter).\n *\n * Stored as markdown resources under `jobs/` — reuses the same storage\n * and scheduler infrastructure. Event-triggered jobs are skipped by the\n * cron scheduler and dispatched by the event bus instead.\n */\n\nexport interface TriggerFrontmatter {\n schedule: string;\n enabled: boolean;\n /** \"schedule\" = cron-based (legacy jobs). \"event\" = fires on bus event. */\n triggerType: \"schedule\" | \"event\";\n /** For event triggers: the event name to subscribe to. */\n event?: string;\n /** Natural-language condition evaluated by Haiku before dispatch. */\n condition?: string;\n
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/triggers/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG","sourcesContent":["/**\n * Extended frontmatter for triggers (superset of JobFrontmatter).\n *\n * Stored as markdown resources under `jobs/` — reuses the same storage\n * and scheduler infrastructure. Event-triggered jobs are skipped by the\n * cron scheduler and dispatched by the event bus instead.\n */\n\nexport interface TriggerFrontmatter {\n schedule: string;\n enabled: boolean;\n /** \"schedule\" = cron-based (legacy jobs). \"event\" = fires on bus event. */\n triggerType: \"schedule\" | \"event\";\n /** For event triggers: the event name to subscribe to. */\n event?: string;\n /** Natural-language condition evaluated by Haiku before dispatch. */\n condition?: string;\n /**\n * \"agentic\" = full runAgentLoop; the only mode `manage-automations` will\n * define/update going forward. \"deterministic\" was removed from the\n * advertised surface (never implemented) and is legacy-only: rows created\n * before the removal may still carry it, and the dispatcher's\n * warn-and-skip branch keeps them inert by design — do not make them fire.\n */\n mode: \"agentic\" | \"deterministic\";\n /** Domain tag for filtering in per-template UIs. */\n domain?: string;\n createdBy?: string;\n orgId?: string;\n runAs?: \"creator\" | \"shared\";\n lastRun?: string;\n lastStatus?: \"success\" | \"error\" | \"running\" | \"skipped\";\n lastError?: string;\n nextRun?: string;\n}\n\nexport interface TriggerDispatchContext {\n triggerName: string;\n triggerBody: string;\n meta: TriggerFrontmatter;\n eventPayload?: unknown;\n}\n"]}
|
|
@@ -73,10 +73,11 @@ Everything in `audit` is optional. The minimum useful addition is `target: () =>
|
|
|
73
73
|
|
|
74
74
|
## Reading the trail {#reading}
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
Three read actions are available to the agent **and** the frontend in every app, scoped in SQL to the caller — they never return another tenant's rows:
|
|
77
77
|
|
|
78
78
|
- **`list-audit-events`** — filter by `targetType` / `targetId`, `actorKind` (`agent` | `human` | `system`), `status`, `threadId` / `turnId`, `action`, `sinceMs`, and `limit`.
|
|
79
79
|
- **`get-audit-event`** — one event by id, including its redacted input payload.
|
|
80
|
+
- **`export-audit-events`** — bulk-export the trail as CSV or NDJSON instead of hand-paging `list-audit-events`, for offline compliance pulls. Takes the same filters as `list-audit-events` (minus `limit`) plus `format` (`csv` | `ndjson`, default `csv`) and `maxRows` (default 5000, hard cap 10000), and returns `{ content, rowCount, truncated, format }` — `truncated: true` means more rows matched than `maxRows` allowed. It's itself a sensitive read, audited via `audit: { onRead: true }`.
|
|
80
81
|
|
|
81
82
|
Build an activity feed or a "who changed this" line by calling `list-audit-events` from the UI with `useActionQuery` — never hand-write a fetch to the audit table:
|
|
82
83
|
|
|
@@ -114,13 +114,13 @@ The third path — writing the `jobs/<name>.md` file by hand via `resourcePut`
|
|
|
114
114
|
|
|
115
115
|
Automations share every field in the [recurring-jobs frontmatter table](/docs/recurring-jobs#frontmatter). These additional fields control event triggers, conditions, and the execution mode:
|
|
116
116
|
|
|
117
|
-
| Field | Type
|
|
118
|
-
| ------------- |
|
|
119
|
-
| `triggerType` | `"schedule"` \| `"event"`
|
|
120
|
-
| `event` | string
|
|
121
|
-
| `condition` | string
|
|
122
|
-
| `mode` | `"agentic"`
|
|
123
|
-
| `domain` | string
|
|
117
|
+
| Field | Type | Default | Description |
|
|
118
|
+
| ------------- | ------------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
119
|
+
| `triggerType` | `"schedule"` \| `"event"` | `"schedule"` | How the automation fires |
|
|
120
|
+
| `event` | string | _(optional)_ | Event name to subscribe to (event triggers only) |
|
|
121
|
+
| `condition` | string | _(optional)_ | Natural-language condition evaluated before dispatch |
|
|
122
|
+
| `mode` | `"agentic"` | `"agentic"` | Full agent loop (the only supported mode). `"deterministic"` was removed — it was never implemented, and automations that set it never fired. |
|
|
123
|
+
| `domain` | string | _(optional)_ | Grouping tag (mail, calendar, clips, etc.) |
|
|
124
124
|
|
|
125
125
|
For an event trigger, `schedule` is `""` (empty); for a schedule trigger it carries the cron expression. The dispatcher also writes the same managed `lastRun` / `lastStatus` / `lastError` fields the scheduler does, plus a `"skipped"` status when a condition evaluates to false.
|
|
126
126
|
|
|
@@ -528,4 +528,4 @@ workspace pointed at current build output.
|
|
|
528
528
|
- [**Multi-App Workspace**](/docs/multi-app-workspace) — make the template fit
|
|
529
529
|
naturally alongside sibling apps and Dispatch.
|
|
530
530
|
- [**Templates**](/docs/cloneable-saas) — turn a template into a
|
|
531
|
-
publishable
|
|
531
|
+
publishable product you can share and deploy.
|
|
@@ -59,7 +59,8 @@ export const i18nCatalog = {
|
|
|
59
59
|
|
|
60
60
|
Always bundle `en-US`. Dynamic-import non-English catalogs so users only
|
|
61
61
|
download the active locale. The supported locale codes are `en-US`, `zh-CN`,
|
|
62
|
-
`es-ES`, `fr-FR`, `de-DE`, `ja-JP`, `ko-KR`, `pt-BR`, `hi-IN`, and
|
|
62
|
+
`zh-TW`, `es-ES`, `fr-FR`, `de-DE`, `ja-JP`, `ko-KR`, `pt-BR`, `hi-IN`, and
|
|
63
|
+
`ar-SA`.
|
|
63
64
|
|
|
64
65
|
## UI
|
|
65
66
|
|
|
@@ -73,10 +73,11 @@ export default defineAction({
|
|
|
73
73
|
|
|
74
74
|
## قراءة المسار {#reading}
|
|
75
75
|
|
|
76
|
-
تتوفر
|
|
76
|
+
تتوفر ثلاث قراءات actions للوكيل **و** الواجهة الأمامية في كل تطبيق، ويتم تحديد نطاقها في SQL للمتصل - ولا تُرجع أبدًا صفوف مستأجر آخر:
|
|
77
77
|
|
|
78
78
|
- **`list-audit-events`** — التصفية حسب `targetType` / `targetId`، `actorKind` (`agent` | `human` | `system`)، `status`، `threadId` / `turnId`، `action`، `sinceMs`، و`limit`.
|
|
79
79
|
- **`get-audit-event`** — حدث واحد حسب المعرف، بما في ذلك حمولة الإدخال المنقحة الخاصة به.
|
|
80
|
+
- **`export-audit-events`** — تصدير السجل بالجملة بصيغة CSV أو NDJSON بدلاً من ترقيم `list-audit-events` يدويًا، لعمليات السحب دون اتصال لأغراض الامتثال. تأخذ نفس عوامل تصفية `list-audit-events` (بدون `limit`) بالإضافة إلى `format` (`csv` | `ndjson`، الافتراضي `csv`) و`maxRows` (الافتراضي 5000، الحد الأقصى 10000)، وتُرجع `{ content, rowCount, truncated, format }` — تعني `truncated: true` أن عدد الصفوف المطابقة تجاوز `maxRows`. وهي نفسها قراءة حساسة، يتم تدقيقها عبر `audit: { onRead: true }`.
|
|
80
81
|
|
|
81
82
|
أنشئ خلاصة نشاط أو سطر "من قام بتغيير هذا" عن طريق استدعاء `list-audit-events` من UI باستخدام `useActionQuery` — لا تكتب أبدًا يدويًا أي جلب إلى جدول التدقيق:
|
|
82
83
|
|
|
@@ -114,13 +114,13 @@ description: "عمليات التشغيل التلقائي المجدولة وا
|
|
|
114
114
|
|
|
115
115
|
تشارك عمليات التشغيل الآلي كل حقل في [recurring-jobs frontmatter table](/docs/recurring-jobs#frontmatter). تتحكم هذه الحقول الإضافية في مشغلات الأحداث وشروطها ووضع التنفيذ:
|
|
116
116
|
|
|
117
|
-
| الحقل | اكتب
|
|
118
|
-
| ------------- |
|
|
119
|
-
| `triggerType` | `"schedule"` \| `"event"`
|
|
120
|
-
| `event` | سلسلة
|
|
121
|
-
| `condition` | سلسلة
|
|
122
|
-
| `mode` | `"agentic"`
|
|
123
|
-
| `domain` | سلسلة
|
|
117
|
+
| الحقل | اكتب | الافتراضي | الوصف |
|
|
118
|
+
| ------------- | ------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------- |
|
|
119
|
+
| `triggerType` | `"schedule"` \| `"event"` | `"schedule"` | كيفية تشغيل الأتمتة |
|
|
120
|
+
| `event` | سلسلة | _(اختياري)_ | اسم الحدث المطلوب الاشتراك فيه (مشغّلات الحدث فقط) |
|
|
121
|
+
| `condition` | سلسلة | _(اختياري)_ | تم تقييم حالة اللغة الطبيعية قبل الإرسال |
|
|
122
|
+
| `mode` | `"agentic"` | `"agentic"` | حلقة الوكيل الكاملة (الوضع الوحيد المدعوم). تمت إزالة `"deterministic"` — لم يتم تنفيذه قط، وعمليات الأتمتة التي تحدده لم تُطلق أبدًا. |
|
|
123
|
+
| `domain` | سلسلة | _(اختياري)_ | علامة التجميع (البريد، التقويم، المقاطع, إلخ.) |
|
|
124
124
|
|
|
125
125
|
بالنسبة لمشغل الحدث، `schedule` هو `""` (فارغ)؛ بالنسبة لمشغل الجدول الزمني فإنه يحمل تعبير cron. يكتب المرسل أيضًا نفس حقول `lastRun` / `lastStatus` / `lastError` المُدارة التي يكتبها المجدول، بالإضافة إلى حالة `"skipped"` عندما يتم تقييم الشرط إلى خطأ.
|
|
126
126
|
|
|
@@ -163,7 +163,13 @@ export const responseInsights = table("response_insights", {
|
|
|
163
163
|
/>
|
|
164
164
|
</WireframeBlock>
|
|
165
165
|
|
|
166
|
-
|
|
166
|
+
## 6. دع agent يتنقل {#agent-navigation}
|
|
167
|
+
|
|
168
|
+
يتضمن قالب Chat action من نوع `view-screen` و `navigate`. وسّعهما مع نمو تطبيقك:
|
|
169
|
+
|
|
170
|
+
- يجب أن يقرأ `view-screen` حالة التطبيق ويُعيد المسار الحالي، والرؤية المحددة، والفلاتر النشطة، وأي سياق صفحة مضغوط يحتاجه agent.
|
|
171
|
+
- يجب أن يكتب `navigate` مسارًا من نفس الأصل مثل `/response-insights` عندما يقرر agent أن على المستخدم معاينة النتيجة بصريًا.
|
|
172
|
+
- يمكن لنتائج action تضمين روابط مثل `href: "/response-insights"` كي تعرض الدردشة زر "افتح رؤى الردود" بشكل صريح.
|
|
167
173
|
|
|
168
174
|
عندما تفتح الدردشة الكاملة صفحة تطبيق، استخدم `AgentChatSurface` و `AgentSidebar` و `useAgentChatHomeHandoff` و `useAgentChatHomeHandoffLinks` و `chatViewTransition` من [Agent Surfaces](/docs/agent-surfaces#rich-chat) كي تنتقل الدردشة إلى اللوحة الجانبية مع الحفاظ على نفس thread.
|
|
169
175
|
|
|
@@ -59,7 +59,7 @@ export const i18nCatalog = {
|
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
حزمة `en-US` دائمًا. يتم استيراد الكتالوجات غير الإنجليزية بشكل ديناميكي للمستخدمين فقط
|
|
62
|
-
قم بتنزيل اللغة النشطة. الرموز المحلية المدعومة هي `en-US`، `zh-CN`،
|
|
62
|
+
قم بتنزيل اللغة النشطة. الرموز المحلية المدعومة هي `en-US`، `zh-CN`، `zh-TW`،
|
|
63
63
|
`es-ES`، و`fr-FR`، و`de-DE`، و`ja-JP`، و`ko-KR`، و`pt-BR`، و`hi-IN`، و`ar-SA`.
|
|
64
64
|
|
|
65
65
|
## UI
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: دورة حياة الحزم
|
|
3
|
+
description: فحص حزم Agent Native المعتمدة على بيان وإضافتها وإخراجها بأمان.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# دورة حياة الحزم
|
|
7
|
+
|
|
8
|
+
يمكن للحزم القابلة لإعادة الاستخدام نشر ملف `agent-native.package.json` ثابت ذي
|
|
9
|
+
إصدار. تقرأ أداة CLI ملف JSON فقط أثناء الفحص ولا تشغّل شيفرة الحزمة.
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
agent-native package inspect @agent-native/scheduling --json
|
|
13
|
+
agent-native package add @agent-native/scheduling --apply
|
|
14
|
+
agent-native package eject @agent-native/scheduling --apply
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
الإضافة والإخراج معاينة افتراضيًا. يسمح `--apply` بالكتابة وتشغيل مدير الحزم. ترفض
|
|
18
|
+
الأداة التعارضات والتخطيطات غير المعروفة، وتستعيد الملفات وملفات القفل عند فشل التثبيت.
|
|
19
|
+
يدعم الإصدار التجريبي إخراج Scheduling فقط، بينما يبقى Pinpoint مؤجلاً.
|
|
@@ -103,6 +103,10 @@ search: "المحولات، محول وضع الحماية، محول cli، رم
|
|
|
103
103
|
path: "index.ts",
|
|
104
104
|
note: "الاختيار: getSandboxAdapter() / registerSandboxAdapter()",
|
|
105
105
|
},
|
|
106
|
+
{
|
|
107
|
+
path: "background.ts",
|
|
108
|
+
note: "علامة قائمة الانتظار الدائمة ودورة حياة التنفيذ في الخلفية",
|
|
109
|
+
},
|
|
106
110
|
{
|
|
107
111
|
path: "local-child-process-adapter.ts",
|
|
108
112
|
note: "ال backend الافتراضي: Node child process مقيد",
|
|
@@ -183,12 +187,17 @@ registerSandboxAdapter(adapter) → AGENT_NATIVE_SANDBOX → local default
|
|
|
183
187
|
|
|
184
188
|
### `AGENT_NATIVE_SANDBOX` env var {#env}
|
|
185
189
|
|
|
186
|
-
يحدد
|
|
190
|
+
يحدد محولًا مضمنًا حسب المعرف. كل من `local` (الافتراضي) و`background` موصولان؛ تعود القيم غير المعروفة إلى `local` بدلاً من فشل التشغيل.
|
|
187
191
|
|
|
188
192
|
```bash
|
|
189
|
-
AGENT_NATIVE_SANDBOX=local
|
|
193
|
+
AGENT_NATIVE_SANDBOX=local # الافتراضي — صريح
|
|
194
|
+
AGENT_NATIVE_SANDBOX=background # وضع كل استدعاء run-code في قائمة انتظار دائمة
|
|
190
195
|
```
|
|
191
196
|
|
|
197
|
+
يخزن `background` التعليمة البرمجية الأولية في `sandbox_executions` ويعيد فورًا `executionId` مع `status: "queued"`. يبدأ الإرسال الذاتي الموقّع استدعاءً جديدًا في بيئة serverless؛ ويبدأ Node طويل العمر عملاً منفصلًا داخل العملية؛ وتعيد عملية التحقق من الحالة والمسح الدوري تشغيل الإرسالات المفقودة أو عقود الإيجار المنتهية. تحقّق من التنفيذ لاحقًا للحصول على النتيجة المحفوظة.
|
|
198
|
+
|
|
199
|
+
`BackgroundQueueAdapter` هو علامة لقائمة انتظار دائمة، وليس المنفذ. يستخدم العمل الموجود في قائمة الانتظار محول تنفيذ مسجلًا غير قائم على قائمة الانتظار عند توفره؛ وإلا فإنه يعود إلى عملية Node الفرعية المحلية. لا يوفر تحديد `background` وحده عزلاً عن بُعد أو داخل حاوية، ولا يجعل وقت تشغيل edge متوافقًا مع `node:child_process`.
|
|
200
|
+
|
|
192
201
|
### `registerSandboxAdapter()` {#register}
|
|
193
202
|
|
|
194
203
|
تتجاوز العملية المضيفة الواجهة الخلفية لجميع استدعاءات `run-code` اللاحقة من خلال `index.ts` الخاص بالوصلة - على سبيل المثال، لتشغيل كل استدعاء في حاوية بعيدة:
|
|
@@ -213,13 +222,15 @@ registerSandboxAdapter(new RemoteSandboxAdapter());
|
|
|
213
222
|
|
|
214
223
|
## التماس لعداء متين {#durable}
|
|
215
224
|
|
|
216
|
-
|
|
225
|
+
يوفر المحول المضمن `background` بالفعل قائمة انتظار دائمة وميزانية تنفيذ جديدة، بينما يظل التنفيذ الفعلي مستخدمًا لمحول غير قائم على قائمة الانتظار أو للعملية الفرعية المحلية الاحتياطية. يمكن لمحول بعيد أو معزول مسجل بشكل منفصل (Docker أو مشغل بنمط Vercel-Sandbox) توفير حدود تنفيذ مختلفة وتنفيذ العمل في الخلفية لكل استدعاء أيضًا.
|
|
226
|
+
|
|
227
|
+
مثل هذا المحول سوف:
|
|
217
228
|
|
|
218
|
-
1.
|
|
219
|
-
2.
|
|
220
|
-
3.
|
|
229
|
+
1. ينفذ `SandboxAdapter.run` في وقت تشغيل خارج العملية.
|
|
230
|
+
2. ينشئ نفقًا لجسر loopback (أو يعيد توجيه استدعاءات الجسر إلى العملية الأصلية).
|
|
231
|
+
3. يوفر عزلاً عن بُعد أو داخل حاوية بشكل مستقل عن دورة حياة قائمة الانتظار الدائمة المشحونة.
|
|
221
232
|
|
|
222
|
-
|
|
233
|
+
سجله برمجيًا عبر `registerSandboxAdapter()`. لا تحتاج حلقة الوكيل و`run-code.ts` إلى التغيير.
|
|
223
234
|
|
|
224
235
|
> [!TIP]
|
|
225
236
|
> يُصدر مخطط `agent-native add sandbox docker` وصفة كاملة ومكتفية ذاتيًا لتنفيذ محول Docker مقابل هذا التماس. انظر [Blueprint Installer](/docs/blueprint-installer).
|
|
@@ -415,3 +415,11 @@ AGENT_NATIVE_KEYS_WORKSPACE_FALLBACK=1
|
|
|
415
415
|
```
|
|
416
416
|
|
|
417
417
|
لا تزال عمليات الكتابة السرية لنطاق مساحة العمل تتطلب دور مالك/مسؤول المؤسسة بغض النظر عن هذه العلامة.
|
|
418
|
+
|
|
419
|
+
## الخطوات التالية
|
|
420
|
+
|
|
421
|
+
- [**Authentication**](/docs/authentication) — أوضاع المصادقة، ونطاقات الكوكيز (cookie)، وتفاصيل الجلسة التي تُبنى عليها هذه الصفحة
|
|
422
|
+
- [**Multi-Tenancy**](/docs/multi-tenancy) — نموذج عضوية المؤسسة وراء تحديد النطاق بـ `org_id`
|
|
423
|
+
- [**Sharing**](/docs/sharing) — نمط `ownableColumns()` وحارس الوصول المُطبَّق على الموارد القابلة للمشاركة
|
|
424
|
+
- [**Messaging**](/docs/messaging#env-vars) — أسرار توقيع webhook لكل تكامل، المُشار إليها في قائمة التحقق أعلاه
|
|
425
|
+
- [**Deployment**](/docs/deployment) — متغيرات بيئة الإنتاج التي تفترض قائمة التحقق هذه أنها مُعيَّنة
|
|
@@ -73,10 +73,11 @@ Alles in `audit` ist optional. Der minimale nützliche Zusatz ist `target: () =>
|
|
|
73
73
|
|
|
74
74
|
## Die Spur lesen {#reading}
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
Drei gelesene actions stehen dem Agenten **und** dem Frontend in jeder App zur Verfügung, in SQL auf den Anrufer beschränkt – sie geben niemals die Zeilen eines anderen Mandanten zurück:
|
|
77
77
|
|
|
78
78
|
- **`list-audit-events`** – Filter nach `targetType` / `targetId`, `actorKind` (`agent` | `human` | `system`), `status`, `threadId` / `turnId`, `action`, `sinceMs` und `limit`.
|
|
79
79
|
- **`get-audit-event`** – ein Ereignis nach ID, einschließlich seiner redigierten Eingabenutzlast.
|
|
80
|
+
- **`export-audit-events`** – exportiert die Spur gesammelt als CSV oder NDJSON statt `list-audit-events` manuell zu paginieren, für Offline-Compliance-Abzüge. Nimmt dieselben Filter wie `list-audit-events` (ohne `limit`) sowie `format` (`csv` | `ndjson`, Standard `csv`) und `maxRows` (Standard 5000, harte Obergrenze 10000) und liefert `{ content, rowCount, truncated, format }` zurück – `truncated: true` bedeutet, dass mehr Zeilen übereinstimmten, als `maxRows` erlaubte. Es ist selbst ein sensibler Lesevorgang, geprüft über `audit: { onRead: true }`.
|
|
80
81
|
|
|
81
82
|
Erstellen Sie einen Aktivitäts-Feed oder eine „Wer hat das geändert“-Zeile, indem Sie `list-audit-events` vom UI mit `useActionQuery` aufrufen – schreiben Sie niemals einen Abruf in die Prüftabelle von Hand:
|
|
82
83
|
|
|
@@ -114,13 +114,13 @@ Der dritte Pfad – das manuelle Schreiben der `jobs/<name>.md`-Datei über `res
|
|
|
114
114
|
|
|
115
115
|
Automatisierungen teilen sich jedes Feld im [recurring-jobs frontmatter table](/docs/recurring-jobs#frontmatter). Diese zusätzlichen Felder steuern Ereignisauslöser, Bedingungen und den Ausführungsmodus:
|
|
116
116
|
|
|
117
|
-
| Feld | Typ
|
|
118
|
-
| ------------- |
|
|
119
|
-
| `triggerType` | `"schedule"` \| `"event"`
|
|
120
|
-
| `event` | Zeichenfolge
|
|
121
|
-
| `condition` | Zeichenfolge
|
|
122
|
-
| `mode` | `"agentic"`
|
|
123
|
-
| `domain` | Zeichenfolge
|
|
117
|
+
| Feld | Typ | Standard | Beschreibung |
|
|
118
|
+
| ------------- | ------------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
119
|
+
| `triggerType` | `"schedule"` \| `"event"` | `"schedule"` | Wie die Automatisierung ausgelöst wird |
|
|
120
|
+
| `event` | Zeichenfolge | _(optional)_ | Ereignisname zum Abonnieren (nur Ereignisauslöser) |
|
|
121
|
+
| `condition` | Zeichenfolge | _(optional)_ | Zustand in natürlicher Sprache wird vor dem Versand ausgewertet |
|
|
122
|
+
| `mode` | `"agentic"` | `"agentic"` | Vollständige Agentenschleife (der einzige unterstützte Modus). `"deterministic"` wurde entfernt – es wurde nie implementiert, und Automatisierungen, die es festlegten, wurden nie ausgelöst. |
|
|
123
|
+
| `domain` | Zeichenfolge | _(optional)_ | Gruppierungs-Tag (E-Mail, Kalender, Clips usw.) |
|
|
124
124
|
|
|
125
125
|
Für einen Ereignisauslöser ist `schedule` `""` (leer); Für einen Zeitplanauslöser trägt es den Cron-Ausdruck. Der Dispatcher schreibt außerdem dieselben verwalteten `lastRun`-/`lastStatus`-/`lastError`-Felder wie der Scheduler, plus einen `"skipped"`-Status, wenn eine Bedingung als „falsch“ ausgewertet wird.
|
|
126
126
|
|
|
@@ -163,7 +163,13 @@ Fügen Sie eine Route `/response-insights` mit `useActionQuery("list-response-in
|
|
|
163
163
|
/>
|
|
164
164
|
</WireframeBlock>
|
|
165
165
|
|
|
166
|
-
|
|
166
|
+
## 6. Agent navigieren lassen {#agent-navigation}
|
|
167
|
+
|
|
168
|
+
Die Chat-Vorlage enthält die actions `view-screen` und `navigate`. Erweitern Sie sie, wenn Ihre App wächst:
|
|
169
|
+
|
|
170
|
+
- `view-screen` sollte den application state lesen und die aktuelle Route, das ausgewählte Insight, aktive Filter und jeden knappen Seitenkontext zurückgeben, den der Agent braucht.
|
|
171
|
+
- `navigate` sollte einen same-origin Pfad wie `/response-insights` schreiben, wenn der Agent entscheidet, dass der Nutzer das Ergebnis visuell prüfen soll.
|
|
172
|
+
- Action-Ergebnisse können Links wie `href: "/response-insights"` enthalten, damit der Chat einen expliziten Button „Antwort-Insights öffnen“ anbieten kann.
|
|
167
173
|
|
|
168
174
|
Wenn der Vollseiten-Chat eine App-Seite öffnet, verwenden Sie `AgentChatSurface`, `AgentSidebar`, `useAgentChatHomeHandoff`, `useAgentChatHomeHandoffLinks` und `chatViewTransition` aus [Agent Surfaces](/docs/agent-surfaces#rich-chat), damit der Chat in die Seitenleiste gleitet und derselbe Thread erhalten bleibt.
|
|
169
175
|
|
|
@@ -59,7 +59,7 @@ export const i18nCatalog = {
|
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
Always bundle `en-US`. Dynamic-import non-English catalogs so users only
|
|
62
|
-
Laden Sie das aktive Gebietsschema herunter. Die unterstützten Gebietsschemacodes sind `en-US`, `zh-CN`,
|
|
62
|
+
Laden Sie das aktive Gebietsschema herunter. Die unterstützten Gebietsschemacodes sind `en-US`, `zh-CN`, `zh-TW`,
|
|
63
63
|
`es-ES`, `fr-FR`, `de-DE`, `ja-JP`, `ko-KR`, `pt-BR`, `hi-IN` und `ar-SA`.
|
|
64
64
|
|
|
65
65
|
## UI
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Paketlebenszyklus
|
|
3
|
+
description: Manifestgesteuerte Agent-Native-Pakete sicher prüfen, hinzufügen und auswerfen.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Paketlebenszyklus
|
|
7
|
+
|
|
8
|
+
Wiederverwendbare Pakete können ein statisches, versioniertes
|
|
9
|
+
`agent-native.package.json` veröffentlichen. Die CLI liest nur diese JSON-Datei
|
|
10
|
+
und führt beim Prüfen keinen Paketcode aus.
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
agent-native package inspect @agent-native/scheduling --json
|
|
14
|
+
agent-native package add @agent-native/scheduling --apply
|
|
15
|
+
agent-native package eject @agent-native/scheduling --apply
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Hinzufügen und Auswerfen sind standardmäßig Vorschauen. Erst `--apply` schreibt
|
|
19
|
+
Dateien und startet den erkannten Paketmanager. Kollisionen und unbekannte
|
|
20
|
+
Layouts werden abgelehnt; bei einem Installationsfehler werden Dateien und
|
|
21
|
+
Lockdateien zurückgesetzt. Zunächst unterstützt nur Scheduling das Auswerfen;
|
|
22
|
+
Pinpoint bleibt bis nach dem Pilotprojekt zurückgestellt.
|
|
@@ -103,6 +103,10 @@ Die Naht befindet sich im Kern bei `packages/core/src/coding-tools/sandbox/` –
|
|
|
103
103
|
path: "index.ts",
|
|
104
104
|
note: "Auswahl: getSandboxAdapter() / registerSandboxAdapter()",
|
|
105
105
|
},
|
|
106
|
+
{
|
|
107
|
+
path: "background.ts",
|
|
108
|
+
note: "Marker für die dauerhafte Warteschlange und Lebenszyklus der Hintergrundausführung",
|
|
109
|
+
},
|
|
106
110
|
{
|
|
107
111
|
path: "local-child-process-adapter.ts",
|
|
108
112
|
note: "Das Standard-Backend: gesperrter Node-Child-Prozess",
|
|
@@ -183,12 +187,17 @@ registerSandboxAdapter(adapter) → AGENT_NATIVE_SANDBOX → local default
|
|
|
183
187
|
|
|
184
188
|
### `AGENT_NATIVE_SANDBOX` Umgebungsvariable {#env}
|
|
185
189
|
|
|
186
|
-
Wählt einen integrierten Adapter anhand der ID aus.
|
|
190
|
+
Wählt einen integrierten Adapter anhand der ID aus. Sowohl `local` (Standard) als auch `background` sind eingebunden; unbekannte Werte fallen auf `local` zurück, statt die Ausführung fehlschlagen zu lassen.
|
|
187
191
|
|
|
188
192
|
```bash
|
|
189
|
-
AGENT_NATIVE_SANDBOX=local
|
|
193
|
+
AGENT_NATIVE_SANDBOX=local # die Standardeinstellung – explizit
|
|
194
|
+
AGENT_NATIVE_SANDBOX=background # jeden run-code-Aufruf dauerhaft einreihen
|
|
190
195
|
```
|
|
191
196
|
|
|
197
|
+
`background` speichert den Rohcode in `sandbox_executions` und gibt sofort eine `executionId` mit `status: "queued"` zurück. Ein signierter Self-Dispatch startet einen neuen Serverless-Aufruf; langlebiges Node startet abgekoppelte Arbeit im Prozess; Statusabfragen und der periodische Sweep treiben verlorene Dispatches oder abgelaufene Leases erneut an. Das gespeicherte Ergebnis wird später durch Abfragen der Ausführung gelesen.
|
|
198
|
+
|
|
199
|
+
`BackgroundQueueAdapter` ist ein Marker für die dauerhafte Warteschlange, nicht der Executor. Eingereihte Arbeit verwendet einen registrierten, nicht warteschlangenbasierten Ausführungsadapter, falls vorhanden; andernfalls fällt sie auf den lokalen Child-Prozess zurück. `background` allein bietet keine Remote- oder Container-Isolation und macht eine Edge-Laufzeit nicht mit `node:child_process` kompatibel.
|
|
200
|
+
|
|
192
201
|
### `registerSandboxAdapter()` {#register}
|
|
193
202
|
|
|
194
203
|
Ein Hostprozess überschreibt das Backend für alle nachfolgenden `run-code`-Aufrufe über den `index.ts` der Seam – zum Beispiel, um jeden Aufruf in einem Remote-Container auszuführen:
|
|
@@ -213,13 +222,15 @@ registerSandboxAdapter(new RemoteSandboxAdapter());
|
|
|
213
222
|
|
|
214
223
|
## Die Naht für einen langlebigen Läufer {#durable}
|
|
215
224
|
|
|
216
|
-
|
|
225
|
+
Der integrierte Adapter `background` bietet bereits dauerhafte Einreihung und ein neues Ausführungsbudget, während die eigentliche Ausführung weiterhin einen nicht warteschlangenbasierten Adapter oder den lokalen Child-Prozess als Fallback verwendet. Ein separat registrierter Remote- oder isolierter Adapter (Docker oder ein Vercel-Sandbox-artiger Runner) kann eine andere Ausführungsgrenze bereitstellen und auch Hintergrundarbeit pro Aufruf ausführen.
|
|
226
|
+
|
|
227
|
+
Ein solcher Adapter würde:
|
|
217
228
|
|
|
218
|
-
1.
|
|
219
|
-
2.
|
|
220
|
-
3.
|
|
229
|
+
1. `SandboxAdapter.run` gegen eine Out-of-Process-Laufzeit implementieren.
|
|
230
|
+
2. Die Loopback-Brücke tunneln oder Bridge-Aufrufe zum übergeordneten Prozess zurückleiten.
|
|
231
|
+
3. Remote- oder Container-Isolation unabhängig vom ausgelieferten dauerhaften Warteschlangenlebenszyklus bereitstellen.
|
|
221
232
|
|
|
222
|
-
Registrieren Sie
|
|
233
|
+
Registrieren Sie ihn programmgesteuert über `registerSandboxAdapter()`. Die Agentenschleife und `run-code.ts` müssen sich nicht ändern.
|
|
223
234
|
|
|
224
235
|
> [!TIP]
|
|
225
236
|
> Der `agent-native add sandbox docker`-Blueprint liefert ein vollständiges, eigenständiges Rezept für die Implementierung eines Docker-Adapters gegen diese Naht. Siehe [Blueprint Installer](/docs/blueprint-installer).
|
|
@@ -417,3 +417,11 @@ AGENT_NATIVE_KEYS_WORKSPACE_FALLBACK=1
|
|
|
417
417
|
```
|
|
418
418
|
|
|
419
419
|
Für geheime Schreibvorgänge im Arbeitsbereichsbereich ist unabhängig von diesem Flag weiterhin die Rolle „Organisationsbesitzer/-administrator“ erforderlich.
|
|
420
|
+
|
|
421
|
+
## Nächste Schritte
|
|
422
|
+
|
|
423
|
+
- [**Authentication**](/docs/authentication) — Auth-Modi, Cookie-Realms und Sitzungsdetails, auf denen diese Seite aufbaut
|
|
424
|
+
- [**Multi-Tenancy**](/docs/multi-tenancy) — das Org-Mitgliedschaftsmodell hinter dem `org_id`-Scoping
|
|
425
|
+
- [**Sharing**](/docs/sharing) — das `ownableColumns()`- und Access-Guard-Muster, angewendet auf teilbare Ressourcen
|
|
426
|
+
- [**Messaging**](/docs/messaging#env-vars) — die Webhook-Signaturgeheimnisse pro Integration, auf die in der obigen Checkliste verwiesen wird
|
|
427
|
+
- [**Deployment**](/docs/deployment) — die Produktionsumgebungsvariablen, deren Vorhandensein diese Checkliste voraussetzt
|
|
@@ -73,10 +73,11 @@ Todo en `audit` es opcional. La adición mínima útil es `target: () => ({ type
|
|
|
73
73
|
|
|
74
74
|
## Leyendo el rastro {#reading}
|
|
75
75
|
|
|
76
|
-
Hay
|
|
76
|
+
Hay tres lecturas actions disponibles para el agente **y** la interfaz de cada aplicación, con alcance en SQL para la persona que llama; nunca devuelven las filas de otro inquilino:
|
|
77
77
|
|
|
78
78
|
- **`list-audit-events`** — filtrar por `targetType` / `targetId`, `actorKind` (`agent` | `human` | `system`), `status`, `threadId` / `turnId`, `action`, `sinceMs` y `limit`.
|
|
79
79
|
- **`get-audit-event`**: un evento por ID, incluida su carga útil de entrada redactada.
|
|
80
|
+
- **`export-audit-events`** — exporta el rastro en bloque como CSV o NDJSON en lugar de paginar manualmente `list-audit-events`, para extracciones de cumplimiento sin conexión. Toma los mismos filtros que `list-audit-events` (sin `limit`) más `format` (`csv` | `ndjson`, por defecto `csv`) y `maxRows` (por defecto 5000, tope máximo 10000), y devuelve `{ content, rowCount, truncated, format }` — `truncated: true` significa que hubo más filas coincidentes de las que permitía `maxRows`. Es en sí misma una lectura sensible, auditada mediante `audit: { onRead: true }`.
|
|
80
81
|
|
|
81
82
|
Cree una fuente de actividad o una línea "quién cambió esto" llamando a `list-audit-events` desde UI con `useActionQuery`; nunca escriba a mano una búsqueda en la tabla de auditoría:
|
|
82
83
|
|
|
@@ -114,13 +114,13 @@ La tercera ruta (escribir el archivo `jobs/<name>.md` a mano mediante `resourceP
|
|
|
114
114
|
|
|
115
115
|
Las automatizaciones comparten todos los campos del [recurring-jobs frontmatter table](/docs/recurring-jobs#frontmatter). Estos campos adicionales controlan los desencadenadores de eventos, las condiciones y el modo de ejecución:
|
|
116
116
|
|
|
117
|
-
| Campo | Tipo
|
|
118
|
-
| ------------- |
|
|
119
|
-
| `triggerType` | `"schedule"` \| `"event"`
|
|
120
|
-
| `event` | cadena
|
|
121
|
-
| `condition` | cadena
|
|
122
|
-
| `mode` | `"agentic"`
|
|
123
|
-
| `domain` | cadena
|
|
117
|
+
| Campo | Tipo | Predeterminado | Descripción |
|
|
118
|
+
| ------------- | ------------------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
119
|
+
| `triggerType` | `"schedule"` \| `"event"` | `"schedule"` | Cómo se activa la automatización |
|
|
120
|
+
| `event` | cadena | _(opcional)_ | Nombre del evento al que suscribirse (solo activadores de eventos) |
|
|
121
|
+
| `condition` | cadena | _(opcional)_ | Condición del lenguaje natural evaluada antes del envío |
|
|
122
|
+
| `mode` | `"agentic"` | `"agentic"` | Bucle de agente completo (el único modo compatible). `"deterministic"` fue eliminado: nunca se implementó, y las automatizaciones que lo configuraban nunca se ejecutaban. |
|
|
123
|
+
| `domain` | cadena | _(opcional)_ | Etiqueta de agrupación (correo, calendario, clips, etc.) |
|
|
124
124
|
|
|
125
125
|
Para un desencadenador de evento, `schedule` es `""` (vacío); para un desencadenador de programación, lleva la expresión cron. El despachador también escribe los mismos campos administrados `lastRun` / `lastStatus` / `lastError` que escribe el programador, además de un estado `"skipped"` cuando una condición se evalúa como falsa.
|
|
126
126
|
|
|
@@ -163,7 +163,13 @@ Añade una route `/response-insights` con `useActionQuery("list-response-insight
|
|
|
163
163
|
/>
|
|
164
164
|
</WireframeBlock>
|
|
165
165
|
|
|
166
|
-
|
|
166
|
+
## 6. Deja que el agent navegue {#agent-navigation}
|
|
167
|
+
|
|
168
|
+
La Chat template incluye las actions `view-screen` y `navigate`. Amplíalas a medida que tu app crece:
|
|
169
|
+
|
|
170
|
+
- `view-screen` debería leer el application state y devolver la route actual, el insight seleccionado, los filtros activos y cualquier contexto de página compacto que el agent necesite.
|
|
171
|
+
- `navigate` debería escribir una route same-origin como `/response-insights` cuando el agent decida que el usuario debe inspeccionar el resultado visualmente.
|
|
172
|
+
- Los resultados de una action pueden incluir enlaces como `href: "/response-insights"` para que el chat ofrezca un botón explícito "Abrir insights de respuestas".
|
|
167
173
|
|
|
168
174
|
Cuando el chat de página completa abra una página de app, usa `AgentChatSurface`, `AgentSidebar`, `useAgentChatHomeHandoff`, `useAgentChatHomeHandoffLinks` y `chatViewTransition` desde [Agent Surfaces](/docs/agent-surfaces#rich-chat) para deslizar el chat al panel lateral sin perder el thread.
|
|
169
175
|
|