@agent-native/dispatch 0.0.0-beta-20260819155526
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 +146 -0
- package/dist/actions/apply-dream-proposal.d.ts +29 -0
- package/dist/actions/apply-dream-proposal.d.ts.map +1 -0
- package/dist/actions/apply-dream-proposal.js +11 -0
- package/dist/actions/apply-dream-proposal.js.map +1 -0
- package/dist/actions/approve-dispatch-change.d.ts +22 -0
- package/dist/actions/approve-dispatch-change.d.ts.map +1 -0
- package/dist/actions/approve-dispatch-change.js +11 -0
- package/dist/actions/approve-dispatch-change.js.map +1 -0
- package/dist/actions/approve-vault-request.d.ts +20 -0
- package/dist/actions/approve-vault-request.d.ts.map +1 -0
- package/dist/actions/approve-vault-request.js +16 -0
- package/dist/actions/approve-vault-request.js.map +1 -0
- package/dist/actions/archive-workspace-app.d.ts +7 -0
- package/dist/actions/archive-workspace-app.d.ts.map +1 -0
- package/dist/actions/archive-workspace-app.js +15 -0
- package/dist/actions/archive-workspace-app.js.map +1 -0
- package/dist/actions/ask_app.d.ts +29 -0
- package/dist/actions/ask_app.d.ts.map +1 -0
- package/dist/actions/ask_app.js +23 -0
- package/dist/actions/ask_app.js.map +1 -0
- package/dist/actions/ask_app_status.d.ts +27 -0
- package/dist/actions/ask_app_status.d.ts.map +1 -0
- package/dist/actions/ask_app_status.js +14 -0
- package/dist/actions/ask_app_status.js.map +1 -0
- package/dist/actions/connect-external-agent.d.ts +18 -0
- package/dist/actions/connect-external-agent.d.ts.map +1 -0
- package/dist/actions/connect-external-agent.js +68 -0
- package/dist/actions/connect-external-agent.js.map +1 -0
- package/dist/actions/create-browser-chat-session.d.ts +15 -0
- package/dist/actions/create-browser-chat-session.d.ts.map +1 -0
- package/dist/actions/create-browser-chat-session.js +75 -0
- package/dist/actions/create-browser-chat-session.js.map +1 -0
- package/dist/actions/create-dream-report.d.ts +59 -0
- package/dist/actions/create-dream-report.d.ts.map +1 -0
- package/dist/actions/create-dream-report.js +67 -0
- package/dist/actions/create-dream-report.js.map +1 -0
- package/dist/actions/create-link-token.d.ts +10 -0
- package/dist/actions/create-link-token.d.ts.map +1 -0
- package/dist/actions/create-link-token.js +11 -0
- package/dist/actions/create-link-token.js.map +1 -0
- package/dist/actions/create-pylon-ticket.d.ts +17 -0
- package/dist/actions/create-pylon-ticket.d.ts.map +1 -0
- package/dist/actions/create-pylon-ticket.js +95 -0
- package/dist/actions/create-pylon-ticket.js.map +1 -0
- package/dist/actions/create-vault-grant.d.ts +17 -0
- package/dist/actions/create-vault-grant.d.ts.map +1 -0
- package/dist/actions/create-vault-grant.js +14 -0
- package/dist/actions/create-vault-grant.js.map +1 -0
- package/dist/actions/create-vault-secret.d.ts +21 -0
- package/dist/actions/create-vault-secret.d.ts.map +1 -0
- package/dist/actions/create-vault-secret.js +26 -0
- package/dist/actions/create-vault-secret.js.map +1 -0
- package/dist/actions/create-workspace-resource-grant.d.ts +16 -0
- package/dist/actions/create-workspace-resource-grant.d.ts.map +1 -0
- package/dist/actions/create-workspace-resource-grant.js +14 -0
- package/dist/actions/create-workspace-resource-grant.js.map +1 -0
- package/dist/actions/create-workspace-resource.d.ts +40 -0
- package/dist/actions/create-workspace-resource.d.ts.map +1 -0
- package/dist/actions/create-workspace-resource.js +29 -0
- package/dist/actions/create-workspace-resource.js.map +1 -0
- package/dist/actions/create_embed_session.d.ts +13 -0
- package/dist/actions/create_embed_session.d.ts.map +1 -0
- package/dist/actions/create_embed_session.js +28 -0
- package/dist/actions/create_embed_session.js.map +1 -0
- package/dist/actions/create_workspace_app_embed_session.d.ts +19 -0
- package/dist/actions/create_workspace_app_embed_session.d.ts.map +1 -0
- package/dist/actions/create_workspace_app_embed_session.js +89 -0
- package/dist/actions/create_workspace_app_embed_session.js.map +1 -0
- package/dist/actions/delete-destination.d.ts +34 -0
- package/dist/actions/delete-destination.d.ts.map +1 -0
- package/dist/actions/delete-destination.js +11 -0
- package/dist/actions/delete-destination.js.map +1 -0
- package/dist/actions/delete-staged-dataset.d.ts +10 -0
- package/dist/actions/delete-staged-dataset.d.ts.map +1 -0
- package/dist/actions/delete-staged-dataset.js +8 -0
- package/dist/actions/delete-staged-dataset.js.map +1 -0
- package/dist/actions/delete-vault-secret.d.ts +17 -0
- package/dist/actions/delete-vault-secret.d.ts.map +1 -0
- package/dist/actions/delete-vault-secret.js +11 -0
- package/dist/actions/delete-vault-secret.js.map +1 -0
- package/dist/actions/delete-workspace-resource.d.ts +35 -0
- package/dist/actions/delete-workspace-resource.d.ts.map +1 -0
- package/dist/actions/delete-workspace-resource.js +11 -0
- package/dist/actions/delete-workspace-resource.js.map +1 -0
- package/dist/actions/deny-vault-request.d.ts +19 -0
- package/dist/actions/deny-vault-request.d.ts.map +1 -0
- package/dist/actions/deny-vault-request.js +12 -0
- package/dist/actions/deny-vault-request.js.map +1 -0
- package/dist/actions/ensure-dream-job.d.ts +33 -0
- package/dist/actions/ensure-dream-job.d.ts.map +1 -0
- package/dist/actions/ensure-dream-job.js +73 -0
- package/dist/actions/ensure-dream-job.js.map +1 -0
- package/dist/actions/get-agent-thread-debug.d.ts +72 -0
- package/dist/actions/get-agent-thread-debug.d.ts.map +1 -0
- package/dist/actions/get-agent-thread-debug.js +37 -0
- package/dist/actions/get-agent-thread-debug.js.map +1 -0
- package/dist/actions/get-app-creation-settings.d.ts +3 -0
- package/dist/actions/get-app-creation-settings.d.ts.map +1 -0
- package/dist/actions/get-app-creation-settings.js +10 -0
- package/dist/actions/get-app-creation-settings.js.map +1 -0
- package/dist/actions/get-dispatch-settings.d.ts +3 -0
- package/dist/actions/get-dispatch-settings.d.ts.map +1 -0
- package/dist/actions/get-dispatch-settings.js +10 -0
- package/dist/actions/get-dispatch-settings.js.map +1 -0
- package/dist/actions/get-dream-settings.d.ts +3 -0
- package/dist/actions/get-dream-settings.d.ts.map +1 -0
- package/dist/actions/get-dream-settings.js +11 -0
- package/dist/actions/get-dream-settings.js.map +1 -0
- package/dist/actions/get-dream.d.ts +48 -0
- package/dist/actions/get-dream.d.ts.map +1 -0
- package/dist/actions/get-dream.js +13 -0
- package/dist/actions/get-dream.js.map +1 -0
- package/dist/actions/get-vault-access-settings.d.ts +3 -0
- package/dist/actions/get-vault-access-settings.d.ts.map +1 -0
- package/dist/actions/get-vault-access-settings.js +10 -0
- package/dist/actions/get-vault-access-settings.js.map +1 -0
- package/dist/actions/get-workspace-info.d.ts +3 -0
- package/dist/actions/get-workspace-info.d.ts.map +1 -0
- package/dist/actions/get-workspace-info.js +10 -0
- package/dist/actions/get-workspace-info.js.map +1 -0
- package/dist/actions/get-workspace-resource-effective-context.d.ts +8 -0
- package/dist/actions/get-workspace-resource-effective-context.d.ts.map +1 -0
- package/dist/actions/get-workspace-resource-effective-context.js +27 -0
- package/dist/actions/get-workspace-resource-effective-context.js.map +1 -0
- package/dist/actions/grant-vault-secrets-to-app.d.ts +27 -0
- package/dist/actions/grant-vault-secrets-to-app.d.ts.map +1 -0
- package/dist/actions/grant-vault-secrets-to-app.js +19 -0
- package/dist/actions/grant-vault-secrets-to-app.js.map +1 -0
- package/dist/actions/grant-workspace-resources-to-app.d.ts +17 -0
- package/dist/actions/grant-workspace-resources-to-app.d.ts.map +1 -0
- package/dist/actions/grant-workspace-resources-to-app.js +15 -0
- package/dist/actions/grant-workspace-resources-to-app.js.map +1 -0
- package/dist/actions/import-agent-pack.d.ts +96 -0
- package/dist/actions/import-agent-pack.d.ts.map +1 -0
- package/dist/actions/import-agent-pack.js +116 -0
- package/dist/actions/import-agent-pack.js.map +1 -0
- package/dist/actions/import-agent.d.ts +60 -0
- package/dist/actions/import-agent.d.ts.map +1 -0
- package/dist/actions/import-agent.js +82 -0
- package/dist/actions/import-agent.js.map +1 -0
- package/dist/actions/index.d.ts +9 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +207 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/list-agent-pack.d.ts +36 -0
- package/dist/actions/list-agent-pack.d.ts.map +1 -0
- package/dist/actions/list-agent-pack.js +32 -0
- package/dist/actions/list-agent-pack.js.map +1 -0
- package/dist/actions/list-agent-run-failures.d.ts +65 -0
- package/dist/actions/list-agent-run-failures.d.ts.map +1 -0
- package/dist/actions/list-agent-run-failures.js +42 -0
- package/dist/actions/list-agent-run-failures.js.map +1 -0
- package/dist/actions/list-agent-thread-sources.d.ts +9 -0
- package/dist/actions/list-agent-thread-sources.d.ts.map +1 -0
- package/dist/actions/list-agent-thread-sources.js +11 -0
- package/dist/actions/list-agent-thread-sources.js.map +1 -0
- package/dist/actions/list-available-workspace-templates.d.ts +3 -0
- package/dist/actions/list-available-workspace-templates.d.ts.map +1 -0
- package/dist/actions/list-available-workspace-templates.js +10 -0
- package/dist/actions/list-available-workspace-templates.js.map +1 -0
- package/dist/actions/list-connected-agents.d.ts +14 -0
- package/dist/actions/list-connected-agents.d.ts.map +1 -0
- package/dist/actions/list-connected-agents.js +87 -0
- package/dist/actions/list-connected-agents.js.map +1 -0
- package/dist/actions/list-curated-workspace-templates.d.ts +3 -0
- package/dist/actions/list-curated-workspace-templates.d.ts.map +1 -0
- package/dist/actions/list-curated-workspace-templates.js +10 -0
- package/dist/actions/list-curated-workspace-templates.js.map +1 -0
- package/dist/actions/list-destinations.d.ts +15 -0
- package/dist/actions/list-destinations.d.ts.map +1 -0
- package/dist/actions/list-destinations.js +10 -0
- package/dist/actions/list-destinations.js.map +1 -0
- package/dist/actions/list-dispatch-approvals.d.ts +20 -0
- package/dist/actions/list-dispatch-approvals.d.ts.map +1 -0
- package/dist/actions/list-dispatch-approvals.js +10 -0
- package/dist/actions/list-dispatch-approvals.js.map +1 -0
- package/dist/actions/list-dispatch-audit.d.ts +16 -0
- package/dist/actions/list-dispatch-audit.d.ts.map +1 -0
- package/dist/actions/list-dispatch-audit.js +12 -0
- package/dist/actions/list-dispatch-audit.js.map +1 -0
- package/dist/actions/list-dispatch-overview.d.ts +61 -0
- package/dist/actions/list-dispatch-overview.d.ts.map +1 -0
- package/dist/actions/list-dispatch-overview.js +17 -0
- package/dist/actions/list-dispatch-overview.js.map +1 -0
- package/dist/actions/list-dispatch-usage-metrics.d.ts +7 -0
- package/dist/actions/list-dispatch-usage-metrics.d.ts.map +1 -0
- package/dist/actions/list-dispatch-usage-metrics.js +28 -0
- package/dist/actions/list-dispatch-usage-metrics.js.map +1 -0
- package/dist/actions/list-dream-candidates.d.ts +24 -0
- package/dist/actions/list-dream-candidates.d.ts.map +1 -0
- package/dist/actions/list-dream-candidates.js +68 -0
- package/dist/actions/list-dream-candidates.js.map +1 -0
- package/dist/actions/list-dreams.d.ts +29 -0
- package/dist/actions/list-dreams.d.ts.map +1 -0
- package/dist/actions/list-dreams.js +17 -0
- package/dist/actions/list-dreams.js.map +1 -0
- package/dist/actions/list-integrations-catalog.d.ts +3 -0
- package/dist/actions/list-integrations-catalog.d.ts.map +1 -0
- package/dist/actions/list-integrations-catalog.js +10 -0
- package/dist/actions/list-integrations-catalog.js.map +1 -0
- package/dist/actions/list-linked-identities.d.ts +29 -0
- package/dist/actions/list-linked-identities.d.ts.map +1 -0
- package/dist/actions/list-linked-identities.js +10 -0
- package/dist/actions/list-linked-identities.js.map +1 -0
- package/dist/actions/list-mcp-app-access.d.ts +14 -0
- package/dist/actions/list-mcp-app-access.d.ts.map +1 -0
- package/dist/actions/list-mcp-app-access.js +25 -0
- package/dist/actions/list-mcp-app-access.js.map +1 -0
- package/dist/actions/list-staged-datasets.d.ts +13 -0
- package/dist/actions/list-staged-datasets.d.ts.map +1 -0
- package/dist/actions/list-staged-datasets.js +8 -0
- package/dist/actions/list-staged-datasets.js.map +1 -0
- package/dist/actions/list-vault-audit.d.ts +16 -0
- package/dist/actions/list-vault-audit.d.ts.map +1 -0
- package/dist/actions/list-vault-audit.js +15 -0
- package/dist/actions/list-vault-audit.js.map +1 -0
- package/dist/actions/list-vault-grants.d.ts +17 -0
- package/dist/actions/list-vault-grants.d.ts.map +1 -0
- package/dist/actions/list-vault-grants.js +13 -0
- package/dist/actions/list-vault-grants.js.map +1 -0
- package/dist/actions/list-vault-requests.d.ts +18 -0
- package/dist/actions/list-vault-requests.d.ts.map +1 -0
- package/dist/actions/list-vault-requests.js +15 -0
- package/dist/actions/list-vault-requests.js.map +1 -0
- package/dist/actions/list-vault-secret-options.d.ts +9 -0
- package/dist/actions/list-vault-secret-options.d.ts.map +1 -0
- package/dist/actions/list-vault-secret-options.js +12 -0
- package/dist/actions/list-vault-secret-options.js.map +1 -0
- package/dist/actions/list-vault-secrets.d.ts +13 -0
- package/dist/actions/list-vault-secrets.d.ts.map +1 -0
- package/dist/actions/list-vault-secrets.js +25 -0
- package/dist/actions/list-vault-secrets.js.map +1 -0
- package/dist/actions/list-workspace-apps.d.ts +7 -0
- package/dist/actions/list-workspace-apps.d.ts.map +1 -0
- package/dist/actions/list-workspace-apps.js +31 -0
- package/dist/actions/list-workspace-apps.js.map +1 -0
- package/dist/actions/list-workspace-resource-grants.d.ts +16 -0
- package/dist/actions/list-workspace-resource-grants.d.ts.map +1 -0
- package/dist/actions/list-workspace-resource-grants.js +13 -0
- package/dist/actions/list-workspace-resource-grants.js.map +1 -0
- package/dist/actions/list-workspace-resource-options.d.ts +5 -0
- package/dist/actions/list-workspace-resource-options.d.ts.map +1 -0
- package/dist/actions/list-workspace-resource-options.js +22 -0
- package/dist/actions/list-workspace-resource-options.js.map +1 -0
- package/dist/actions/list-workspace-resources-for-app.d.ts +15 -0
- package/dist/actions/list-workspace-resources-for-app.d.ts.map +1 -0
- package/dist/actions/list-workspace-resources-for-app.js +12 -0
- package/dist/actions/list-workspace-resources-for-app.js.map +1 -0
- package/dist/actions/list-workspace-resources.d.ts +18 -0
- package/dist/actions/list-workspace-resources.d.ts.map +1 -0
- package/dist/actions/list-workspace-resources.js +22 -0
- package/dist/actions/list-workspace-resources.js.map +1 -0
- package/dist/actions/list_apps.d.ts +15 -0
- package/dist/actions/list_apps.d.ts.map +1 -0
- package/dist/actions/list_apps.js +34 -0
- package/dist/actions/list_apps.js.map +1 -0
- package/dist/actions/navigate.d.ts +23 -0
- package/dist/actions/navigate.d.ts.map +1 -0
- package/dist/actions/navigate.js +53 -0
- package/dist/actions/navigate.js.map +1 -0
- package/dist/actions/open_app.d.ts +20 -0
- package/dist/actions/open_app.d.ts.map +1 -0
- package/dist/actions/open_app.js +123 -0
- package/dist/actions/open_app.js.map +1 -0
- package/dist/actions/preview-dream-proposal.d.ts +43 -0
- package/dist/actions/preview-dream-proposal.d.ts.map +1 -0
- package/dist/actions/preview-dream-proposal.js +13 -0
- package/dist/actions/preview-dream-proposal.js.map +1 -0
- package/dist/actions/preview-workspace-resource-change.d.ts +8 -0
- package/dist/actions/preview-workspace-resource-change.d.ts.map +1 -0
- package/dist/actions/preview-workspace-resource-change.js +24 -0
- package/dist/actions/preview-workspace-resource-change.js.map +1 -0
- package/dist/actions/provider-api-catalog.d.ts +28 -0
- package/dist/actions/provider-api-catalog.d.ts.map +1 -0
- package/dist/actions/provider-api-catalog.js +8 -0
- package/dist/actions/provider-api-catalog.js.map +1 -0
- package/dist/actions/provider-api-docs.d.ts +41 -0
- package/dist/actions/provider-api-docs.d.ts.map +1 -0
- package/dist/actions/provider-api-docs.js +12 -0
- package/dist/actions/provider-api-docs.js.map +1 -0
- package/dist/actions/provider-api-register.d.ts +109 -0
- package/dist/actions/provider-api-register.d.ts.map +1 -0
- package/dist/actions/provider-api-register.js +33 -0
- package/dist/actions/provider-api-register.js.map +1 -0
- package/dist/actions/provider-api-request.d.ts +67 -0
- package/dist/actions/provider-api-request.d.ts.map +1 -0
- package/dist/actions/provider-api-request.js +13 -0
- package/dist/actions/provider-api-request.js.map +1 -0
- package/dist/actions/query-staged-dataset.d.ts +45 -0
- package/dist/actions/query-staged-dataset.d.ts.map +1 -0
- package/dist/actions/query-staged-dataset.js +8 -0
- package/dist/actions/query-staged-dataset.js.map +1 -0
- package/dist/actions/read-slack-thread-context.d.ts +29 -0
- package/dist/actions/read-slack-thread-context.d.ts.map +1 -0
- package/dist/actions/read-slack-thread-context.js +138 -0
- package/dist/actions/read-slack-thread-context.js.map +1 -0
- package/dist/actions/reject-dispatch-change.d.ts +23 -0
- package/dist/actions/reject-dispatch-change.d.ts.map +1 -0
- package/dist/actions/reject-dispatch-change.js +12 -0
- package/dist/actions/reject-dispatch-change.js.map +1 -0
- package/dist/actions/reject-dream-proposal.d.ts +27 -0
- package/dist/actions/reject-dream-proposal.d.ts.map +1 -0
- package/dist/actions/reject-dream-proposal.js +12 -0
- package/dist/actions/reject-dream-proposal.js.map +1 -0
- package/dist/actions/remix-workspace-template.d.ts +48 -0
- package/dist/actions/remix-workspace-template.d.ts.map +1 -0
- package/dist/actions/remix-workspace-template.js +79 -0
- package/dist/actions/remix-workspace-template.js.map +1 -0
- package/dist/actions/remove-pending-workspace-app.d.ts +7 -0
- package/dist/actions/remove-pending-workspace-app.d.ts.map +1 -0
- package/dist/actions/remove-pending-workspace-app.js +15 -0
- package/dist/actions/remove-pending-workspace-app.js.map +1 -0
- package/dist/actions/request-vault-secret.d.ts +20 -0
- package/dist/actions/request-vault-secret.d.ts.map +1 -0
- package/dist/actions/request-vault-secret.js +15 -0
- package/dist/actions/request-vault-secret.js.map +1 -0
- package/dist/actions/resolve-integration-source-context.d.ts +5 -0
- package/dist/actions/resolve-integration-source-context.d.ts.map +1 -0
- package/dist/actions/resolve-integration-source-context.js +30 -0
- package/dist/actions/resolve-integration-source-context.js.map +1 -0
- package/dist/actions/restore-starter-workspace-resources.d.ts +9 -0
- package/dist/actions/restore-starter-workspace-resources.d.ts.map +1 -0
- package/dist/actions/restore-starter-workspace-resources.js +14 -0
- package/dist/actions/restore-starter-workspace-resources.js.map +1 -0
- package/dist/actions/revoke-vault-grant.d.ts +16 -0
- package/dist/actions/revoke-vault-grant.d.ts.map +1 -0
- package/dist/actions/revoke-vault-grant.js +11 -0
- package/dist/actions/revoke-vault-grant.js.map +1 -0
- package/dist/actions/revoke-workspace-resource-grant.d.ts +15 -0
- package/dist/actions/revoke-workspace-resource-grant.d.ts.map +1 -0
- package/dist/actions/revoke-workspace-resource-grant.js +11 -0
- package/dist/actions/revoke-workspace-resource-grant.js.map +1 -0
- package/dist/actions/scaffold-workspace-app.d.ts +10 -0
- package/dist/actions/scaffold-workspace-app.d.ts.map +1 -0
- package/dist/actions/scaffold-workspace-app.js +41 -0
- package/dist/actions/scaffold-workspace-app.js.map +1 -0
- package/dist/actions/search-agent-threads.d.ts +32 -0
- package/dist/actions/search-agent-threads.d.ts.map +1 -0
- package/dist/actions/search-agent-threads.js +25 -0
- package/dist/actions/search-agent-threads.js.map +1 -0
- package/dist/actions/send-code-agent-remote-command.d.ts +34 -0
- package/dist/actions/send-code-agent-remote-command.d.ts.map +1 -0
- package/dist/actions/send-code-agent-remote-command.js +53 -0
- package/dist/actions/send-code-agent-remote-command.js.map +1 -0
- package/dist/actions/send-platform-message.d.ts +15 -0
- package/dist/actions/send-platform-message.d.ts.map +1 -0
- package/dist/actions/send-platform-message.js +96 -0
- package/dist/actions/send-platform-message.js.map +1 -0
- package/dist/actions/set-app-creation-settings.d.ts +5 -0
- package/dist/actions/set-app-creation-settings.d.ts.map +1 -0
- package/dist/actions/set-app-creation-settings.js +18 -0
- package/dist/actions/set-app-creation-settings.js.map +1 -0
- package/dist/actions/set-dispatch-approval-policy.d.ts +23 -0
- package/dist/actions/set-dispatch-approval-policy.d.ts.map +1 -0
- package/dist/actions/set-dispatch-approval-policy.js +19 -0
- package/dist/actions/set-dispatch-approval-policy.js.map +1 -0
- package/dist/actions/set-dream-settings.d.ts +17 -0
- package/dist/actions/set-dream-settings.d.ts.map +1 -0
- package/dist/actions/set-dream-settings.js +41 -0
- package/dist/actions/set-dream-settings.js.map +1 -0
- package/dist/actions/set-mcp-app-access.d.ts +17 -0
- package/dist/actions/set-mcp-app-access.d.ts.map +1 -0
- package/dist/actions/set-mcp-app-access.js +43 -0
- package/dist/actions/set-mcp-app-access.js.map +1 -0
- package/dist/actions/set-vault-access-settings.d.ts +5 -0
- package/dist/actions/set-vault-access-settings.d.ts.map +1 -0
- package/dist/actions/set-vault-access-settings.js +13 -0
- package/dist/actions/set-vault-access-settings.js.map +1 -0
- package/dist/actions/start-workspace-app-creation.d.ts +10 -0
- package/dist/actions/start-workspace-app-creation.d.ts.map +1 -0
- package/dist/actions/start-workspace-app-creation.js +43 -0
- package/dist/actions/start-workspace-app-creation.js.map +1 -0
- package/dist/actions/sync-vault-to-app.d.ts +32 -0
- package/dist/actions/sync-vault-to-app.d.ts.map +1 -0
- package/dist/actions/sync-vault-to-app.js +13 -0
- package/dist/actions/sync-vault-to-app.js.map +1 -0
- package/dist/actions/unarchive-workspace-app.d.ts +7 -0
- package/dist/actions/unarchive-workspace-app.d.ts.map +1 -0
- package/dist/actions/unarchive-workspace-app.js +15 -0
- package/dist/actions/unarchive-workspace-app.js.map +1 -0
- package/dist/actions/update-vault-secret.d.ts +22 -0
- package/dist/actions/update-vault-secret.d.ts.map +1 -0
- package/dist/actions/update-vault-secret.js +43 -0
- package/dist/actions/update-vault-secret.js.map +1 -0
- package/dist/actions/update-workspace-app-metadata.d.ts +7 -0
- package/dist/actions/update-workspace-app-metadata.d.ts.map +1 -0
- package/dist/actions/update-workspace-app-metadata.js +30 -0
- package/dist/actions/update-workspace-app-metadata.js.map +1 -0
- package/dist/actions/update-workspace-resource.d.ts +39 -0
- package/dist/actions/update-workspace-resource.d.ts.map +1 -0
- package/dist/actions/update-workspace-resource.js +18 -0
- package/dist/actions/update-workspace-resource.js.map +1 -0
- package/dist/actions/upsert-destination.d.ts +39 -0
- package/dist/actions/upsert-destination.d.ts.map +1 -0
- package/dist/actions/upsert-destination.js +26 -0
- package/dist/actions/upsert-destination.js.map +1 -0
- package/dist/actions/view-screen.d.ts +11 -0
- package/dist/actions/view-screen.d.ts.map +1 -0
- package/dist/actions/view-screen.js +332 -0
- package/dist/actions/view-screen.js.map +1 -0
- package/dist/client/transactional-emails.d.ts +57 -0
- package/dist/client/transactional-emails.d.ts.map +1 -0
- package/dist/client/transactional-emails.js +116 -0
- package/dist/client/transactional-emails.js.map +1 -0
- package/dist/components/action-query-error.d.ts +8 -0
- package/dist/components/action-query-error.d.ts.map +1 -0
- package/dist/components/action-query-error.js +10 -0
- package/dist/components/action-query-error.js.map +1 -0
- package/dist/components/admin-navigation.d.ts +16 -0
- package/dist/components/admin-navigation.d.ts.map +1 -0
- package/dist/components/admin-navigation.js +193 -0
- package/dist/components/admin-navigation.js.map +1 -0
- package/dist/components/agents-panel.d.ts +16 -0
- package/dist/components/agents-panel.d.ts.map +1 -0
- package/dist/components/agents-panel.js +133 -0
- package/dist/components/agents-panel.js.map +1 -0
- package/dist/components/app-icon.d.ts +10 -0
- package/dist/components/app-icon.d.ts.map +1 -0
- package/dist/components/app-icon.js +107 -0
- package/dist/components/app-icon.js.map +1 -0
- package/dist/components/app-keys-popover.d.ts +15 -0
- package/dist/components/app-keys-popover.d.ts.map +1 -0
- package/dist/components/app-keys-popover.js +115 -0
- package/dist/components/app-keys-popover.js.map +1 -0
- package/dist/components/app-list-row.d.ts +12 -0
- package/dist/components/app-list-row.d.ts.map +1 -0
- package/dist/components/app-list-row.js +11 -0
- package/dist/components/app-list-row.js.map +1 -0
- package/dist/components/app-open-actions.d.ts +2 -0
- package/dist/components/app-open-actions.d.ts.map +1 -0
- package/dist/components/app-open-actions.js +2 -0
- package/dist/components/app-open-actions.js.map +1 -0
- package/dist/components/app-row-settings.d.ts +6 -0
- package/dist/components/app-row-settings.d.ts.map +1 -0
- package/dist/components/app-row-settings.js +11 -0
- package/dist/components/app-row-settings.js.map +1 -0
- package/dist/components/approval-value-block.d.ts +7 -0
- package/dist/components/approval-value-block.d.ts.map +1 -0
- package/dist/components/approval-value-block.js +22 -0
- package/dist/components/approval-value-block.js.map +1 -0
- package/dist/components/automation-run-history-dialog.d.ts +9 -0
- package/dist/components/automation-run-history-dialog.d.ts.map +1 -0
- package/dist/components/automation-run-history-dialog.js +63 -0
- package/dist/components/automation-run-history-dialog.js.map +1 -0
- package/dist/components/connected-app-card.d.ts +6 -0
- package/dist/components/connected-app-card.d.ts.map +1 -0
- package/dist/components/connected-app-card.js +13 -0
- package/dist/components/connected-app-card.js.map +1 -0
- package/dist/components/create-app-popover.d.ts +29 -0
- package/dist/components/create-app-popover.d.ts.map +1 -0
- package/dist/components/create-app-popover.js +262 -0
- package/dist/components/create-app-popover.js.map +1 -0
- package/dist/components/dispatch-control-plane.d.ts +2 -0
- package/dist/components/dispatch-control-plane.d.ts.map +1 -0
- package/dist/components/dispatch-control-plane.js +114 -0
- package/dist/components/dispatch-control-plane.js.map +1 -0
- package/dist/components/dispatch-shell.d.ts +13 -0
- package/dist/components/dispatch-shell.d.ts.map +1 -0
- package/dist/components/dispatch-shell.js +21 -0
- package/dist/components/dispatch-shell.js.map +1 -0
- package/dist/components/docs-link.d.ts +16 -0
- package/dist/components/docs-link.d.ts.map +1 -0
- package/dist/components/docs-link.js +34 -0
- package/dist/components/docs-link.js.map +1 -0
- package/dist/components/index.d.ts +17 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +16 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/layout/Header.d.ts +5 -0
- package/dist/components/layout/Header.d.ts.map +1 -0
- package/dist/components/layout/Header.js +61 -0
- package/dist/components/layout/Header.js.map +1 -0
- package/dist/components/layout/HeaderActions.d.ts +2 -0
- package/dist/components/layout/HeaderActions.d.ts.map +1 -0
- package/dist/components/layout/HeaderActions.js +2 -0
- package/dist/components/layout/HeaderActions.js.map +1 -0
- package/dist/components/layout/Layout.d.ts +60 -0
- package/dist/components/layout/Layout.d.ts.map +1 -0
- package/dist/components/layout/Layout.js +1302 -0
- package/dist/components/layout/Layout.js.map +1 -0
- package/dist/components/layout/workspace-apps-rail.d.ts +5 -0
- package/dist/components/layout/workspace-apps-rail.d.ts.map +1 -0
- package/dist/components/layout/workspace-apps-rail.js +56 -0
- package/dist/components/layout/workspace-apps-rail.js.map +1 -0
- package/dist/components/messaging-setup-panel.d.ts +2 -0
- package/dist/components/messaging-setup-panel.d.ts.map +1 -0
- package/dist/components/messaging-setup-panel.js +414 -0
- package/dist/components/messaging-setup-panel.js.map +1 -0
- package/dist/components/other-apps-section.d.ts +33 -0
- package/dist/components/other-apps-section.d.ts.map +1 -0
- package/dist/components/other-apps-section.js +66 -0
- package/dist/components/other-apps-section.js.map +1 -0
- package/dist/components/simple-agents-panel.d.ts +12 -0
- package/dist/components/simple-agents-panel.d.ts.map +1 -0
- package/dist/components/simple-agents-panel.js +438 -0
- package/dist/components/simple-agents-panel.js.map +1 -0
- package/dist/components/task-queue-health.d.ts +2 -0
- package/dist/components/task-queue-health.d.ts.map +1 -0
- package/dist/components/task-queue-health.js +58 -0
- package/dist/components/task-queue-health.js.map +1 -0
- package/dist/components/transactional-email-activity.d.ts +24 -0
- package/dist/components/transactional-email-activity.d.ts.map +1 -0
- package/dist/components/transactional-email-activity.js +31 -0
- package/dist/components/transactional-email-activity.js.map +1 -0
- package/dist/components/transactional-email-metrics.d.ts +40 -0
- package/dist/components/transactional-email-metrics.d.ts.map +1 -0
- package/dist/components/transactional-email-metrics.js +44 -0
- package/dist/components/transactional-email-metrics.js.map +1 -0
- package/dist/components/transactional-email-preview.d.ts +7 -0
- package/dist/components/transactional-email-preview.d.ts.map +1 -0
- package/dist/components/transactional-email-preview.js +41 -0
- package/dist/components/transactional-email-preview.js.map +1 -0
- package/dist/components/ui/accordion.d.ts +8 -0
- package/dist/components/ui/accordion.d.ts.map +1 -0
- package/dist/components/ui/accordion.js +14 -0
- package/dist/components/ui/accordion.js.map +1 -0
- package/dist/components/ui/alert-dialog.d.ts +21 -0
- package/dist/components/ui/alert-dialog.d.ts.map +1 -0
- package/dist/components/ui/alert-dialog.js +27 -0
- package/dist/components/ui/alert-dialog.js.map +1 -0
- package/dist/components/ui/alert.d.ts +9 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/alert.js +23 -0
- package/dist/components/ui/alert.js.map +1 -0
- package/dist/components/ui/aspect-ratio.d.ts +4 -0
- package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
- package/dist/components/ui/aspect-ratio.js +4 -0
- package/dist/components/ui/aspect-ratio.js.map +1 -0
- package/dist/components/ui/avatar.d.ts +7 -0
- package/dist/components/ui/avatar.d.ts.map +1 -0
- package/dist/components/ui/avatar.js +12 -0
- package/dist/components/ui/avatar.js.map +1 -0
- package/dist/components/ui/badge.d.ts +10 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +21 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/breadcrumb.d.ts +20 -0
- package/dist/components/ui/breadcrumb.d.ts.map +1 -0
- package/dist/components/ui/breadcrumb.js +24 -0
- package/dist/components/ui/breadcrumb.js.map +1 -0
- package/dist/components/ui/button.d.ts +12 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +34 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/calendar.d.ts +9 -0
- package/dist/components/ui/calendar.d.ts.map +1 -0
- package/dist/components/ui/calendar.js +41 -0
- package/dist/components/ui/calendar.js.map +1 -0
- package/dist/components/ui/card.d.ts +9 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/card.js +17 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/carousel.d.ts +19 -0
- package/dist/components/ui/carousel.d.ts.map +1 -0
- package/dist/components/ui/carousel.js +99 -0
- package/dist/components/ui/carousel.js.map +1 -0
- package/dist/components/ui/chart.d.ts +80 -0
- package/dist/components/ui/chart.d.ts.map +1 -0
- package/dist/components/ui/chart.js +131 -0
- package/dist/components/ui/chart.js.map +1 -0
- package/dist/components/ui/checkbox.d.ts +5 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/checkbox.js +9 -0
- package/dist/components/ui/checkbox.js.map +1 -0
- package/dist/components/ui/collapsible.d.ts +6 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible.js +6 -0
- package/dist/components/ui/collapsible.js.map +1 -0
- package/dist/components/ui/command.d.ts +83 -0
- package/dist/components/ui/command.d.ts.map +1 -0
- package/dist/components/ui/command.js +29 -0
- package/dist/components/ui/command.js.map +1 -0
- package/dist/components/ui/context-menu.d.ts +28 -0
- package/dist/components/ui/context-menu.d.ts.map +1 -0
- package/dist/components/ui/context-menu.js +34 -0
- package/dist/components/ui/context-menu.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +2 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +2 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/drawer.d.ts +23 -0
- package/dist/components/ui/drawer.d.ts.map +1 -0
- package/dist/components/ui/drawer.js +23 -0
- package/dist/components/ui/drawer.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +2 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.js +2 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/form.d.ts +26 -0
- package/dist/components/ui/form.d.ts.map +1 -0
- package/dist/components/ui/form.js +63 -0
- package/dist/components/ui/form.js.map +1 -0
- package/dist/components/ui/hover-card.d.ts +7 -0
- package/dist/components/ui/hover-card.d.ts.map +1 -0
- package/dist/components/ui/hover-card.js +10 -0
- package/dist/components/ui/hover-card.js.map +1 -0
- package/dist/components/ui/input-otp.d.ts +35 -0
- package/dist/components/ui/input-otp.d.ts.map +1 -0
- package/dist/components/ui/input-otp.js +19 -0
- package/dist/components/ui/input-otp.js.map +1 -0
- package/dist/components/ui/input.d.ts +4 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +9 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/label.d.ts +6 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/label.js +10 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/menubar.d.ts +29 -0
- package/dist/components/ui/menubar.d.ts.map +1 -0
- package/dist/components/ui/menubar.js +41 -0
- package/dist/components/ui/menubar.js.map +1 -0
- package/dist/components/ui/navigation-menu.d.ts +13 -0
- package/dist/components/ui/navigation-menu.d.ts.map +1 -0
- package/dist/components/ui/navigation-menu.js +25 -0
- package/dist/components/ui/navigation-menu.js.map +1 -0
- package/dist/components/ui/pagination.d.ts +29 -0
- package/dist/components/ui/pagination.d.ts.map +1 -0
- package/dist/components/ui/pagination.js +24 -0
- package/dist/components/ui/pagination.js.map +1 -0
- package/dist/components/ui/popover.d.ts +8 -0
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/popover.js +11 -0
- package/dist/components/ui/popover.js.map +1 -0
- package/dist/components/ui/progress.d.ts +5 -0
- package/dist/components/ui/progress.d.ts.map +1 -0
- package/dist/components/ui/progress.js +8 -0
- package/dist/components/ui/progress.js.map +1 -0
- package/dist/components/ui/radio-group.d.ts +6 -0
- package/dist/components/ui/radio-group.d.ts.map +1 -0
- package/dist/components/ui/radio-group.js +15 -0
- package/dist/components/ui/radio-group.js.map +1 -0
- package/dist/components/ui/resizable.d.ts +8 -0
- package/dist/components/ui/resizable.d.ts.map +1 -0
- package/dist/components/ui/resizable.js +9 -0
- package/dist/components/ui/resizable.js.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +6 -0
- package/dist/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.js +12 -0
- package/dist/components/ui/scroll-area.js.map +1 -0
- package/dist/components/ui/select.d.ts +2 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/select.js +2 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/separator.d.ts +5 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/separator.js +8 -0
- package/dist/components/ui/separator.js.map +1 -0
- package/dist/components/ui/sheet.d.ts +26 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/sheet.js +37 -0
- package/dist/components/ui/sheet.js.map +1 -0
- package/dist/components/ui/sidebar.d.ts +67 -0
- package/dist/components/ui/sidebar.d.ts.map +1 -0
- package/dist/components/ui/sidebar.js +233 -0
- package/dist/components/ui/sidebar.js.map +1 -0
- package/dist/components/ui/skeleton.d.ts +3 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +7 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/components/ui/slider.d.ts +5 -0
- package/dist/components/ui/slider.d.ts.map +1 -0
- package/dist/components/ui/slider.js +8 -0
- package/dist/components/ui/slider.js.map +1 -0
- package/dist/components/ui/sonner.d.ts +5 -0
- package/dist/components/ui/sonner.d.ts.map +1 -0
- package/dist/components/ui/sonner.js +25 -0
- package/dist/components/ui/sonner.js.map +1 -0
- package/dist/components/ui/spinner.d.ts +3 -0
- package/dist/components/ui/spinner.d.ts.map +1 -0
- package/dist/components/ui/spinner.js +7 -0
- package/dist/components/ui/spinner.js.map +1 -0
- package/dist/components/ui/switch.d.ts +5 -0
- package/dist/components/ui/switch.d.ts.map +1 -0
- package/dist/components/ui/switch.js +8 -0
- package/dist/components/ui/switch.js.map +1 -0
- package/dist/components/ui/table.d.ts +11 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/table.js +21 -0
- package/dist/components/ui/table.js.map +1 -0
- package/dist/components/ui/tabs.d.ts +8 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs.js +13 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +6 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.js +9 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/toast.d.ts +16 -0
- package/dist/components/ui/toast.d.ts.map +1 -0
- package/dist/components/ui/toast.js +34 -0
- package/dist/components/ui/toast.js.map +1 -0
- package/dist/components/ui/toaster.d.ts +2 -0
- package/dist/components/ui/toaster.d.ts.map +1 -0
- package/dist/components/ui/toaster.js +10 -0
- package/dist/components/ui/toaster.js.map +1 -0
- package/dist/components/ui/toggle-group.d.ts +13 -0
- package/dist/components/ui/toggle-group.d.ts.map +1 -0
- package/dist/components/ui/toggle-group.js +21 -0
- package/dist/components/ui/toggle-group.js.map +1 -0
- package/dist/components/ui/toggle.d.ts +13 -0
- package/dist/components/ui/toggle.d.ts.map +1 -0
- package/dist/components/ui/toggle.js +26 -0
- package/dist/components/ui/toggle.js.map +1 -0
- package/dist/components/ui/tooltip.d.ts +8 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +11 -0
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/components/ui/use-toast.d.ts +3 -0
- package/dist/components/ui/use-toast.d.ts.map +1 -0
- package/dist/components/ui/use-toast.js +3 -0
- package/dist/components/ui/use-toast.js.map +1 -0
- package/dist/components/usage-alerts-panel.d.ts +11 -0
- package/dist/components/usage-alerts-panel.d.ts.map +1 -0
- package/dist/components/usage-alerts-panel.js +125 -0
- package/dist/components/usage-alerts-panel.js.map +1 -0
- package/dist/components/workspace-app-card.d.ts +8 -0
- package/dist/components/workspace-app-card.d.ts.map +1 -0
- package/dist/components/workspace-app-card.js +198 -0
- package/dist/components/workspace-app-card.js.map +1 -0
- package/dist/components/workspace-app-host.d.ts +50 -0
- package/dist/components/workspace-app-host.d.ts.map +1 -0
- package/dist/components/workspace-app-host.js +386 -0
- package/dist/components/workspace-app-host.js.map +1 -0
- package/dist/components/workspace-app-search.d.ts +10 -0
- package/dist/components/workspace-app-search.d.ts.map +1 -0
- package/dist/components/workspace-app-search.js +27 -0
- package/dist/components/workspace-app-search.js.map +1 -0
- package/dist/components/workspace-resource-effective-stack.d.ts +11 -0
- package/dist/components/workspace-resource-effective-stack.d.ts.map +1 -0
- package/dist/components/workspace-resource-effective-stack.js +65 -0
- package/dist/components/workspace-resource-effective-stack.js.map +1 -0
- package/dist/components/workspace-resource-impact-preview.d.ts +9 -0
- package/dist/components/workspace-resource-impact-preview.d.ts.map +1 -0
- package/dist/components/workspace-resource-impact-preview.js +44 -0
- package/dist/components/workspace-resource-impact-preview.js.map +1 -0
- package/dist/components/workspace-template-card.d.ts +58 -0
- package/dist/components/workspace-template-card.d.ts.map +1 -0
- package/dist/components/workspace-template-card.js +113 -0
- package/dist/components/workspace-template-card.js.map +1 -0
- package/dist/config.d.ts +40 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -0
- package/dist/db/index.d.ts +7 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +35 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrations.d.ts +3 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +250 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/schema.d.ts +3059 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +194 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/hooks/use-mobile.d.ts +2 -0
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/hooks/use-mobile.js +2 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/hooks/use-navigation-state.d.ts +25 -0
- package/dist/hooks/use-navigation-state.d.ts.map +1 -0
- package/dist/hooks/use-navigation-state.js +353 -0
- package/dist/hooks/use-navigation-state.js.map +1 -0
- package/dist/hooks/use-toast.d.ts +45 -0
- package/dist/hooks/use-toast.d.ts.map +1 -0
- package/dist/hooks/use-toast.js +127 -0
- package/dist/hooks/use-toast.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/agent-pack.d.ts +31 -0
- package/dist/lib/agent-pack.d.ts.map +1 -0
- package/dist/lib/agent-pack.js +149 -0
- package/dist/lib/agent-pack.js.map +1 -0
- package/dist/lib/automation-display.d.ts +22 -0
- package/dist/lib/automation-display.d.ts.map +1 -0
- package/dist/lib/automation-display.js +88 -0
- package/dist/lib/automation-display.js.map +1 -0
- package/dist/lib/automations.d.ts +32 -0
- package/dist/lib/automations.d.ts.map +1 -0
- package/dist/lib/automations.js +28 -0
- package/dist/lib/automations.js.map +1 -0
- package/dist/lib/browser-chat-bridge.d.ts +8 -0
- package/dist/lib/browser-chat-bridge.d.ts.map +1 -0
- package/dist/lib/browser-chat-bridge.js +48 -0
- package/dist/lib/browser-chat-bridge.js.map +1 -0
- package/dist/lib/browser-chat-protocol.d.ts +33 -0
- package/dist/lib/browser-chat-protocol.d.ts.map +1 -0
- package/dist/lib/browser-chat-protocol.js +82 -0
- package/dist/lib/browser-chat-protocol.js.map +1 -0
- package/dist/lib/catch-all-target.d.ts +17 -0
- package/dist/lib/catch-all-target.d.ts.map +1 -0
- package/dist/lib/catch-all-target.js +103 -0
- package/dist/lib/catch-all-target.js.map +1 -0
- package/dist/lib/embed-session-recovery.d.ts +3 -0
- package/dist/lib/embed-session-recovery.d.ts.map +1 -0
- package/dist/lib/embed-session-recovery.js +18 -0
- package/dist/lib/embed-session-recovery.js.map +1 -0
- package/dist/lib/other-apps.d.ts +16 -0
- package/dist/lib/other-apps.d.ts.map +1 -0
- package/dist/lib/other-apps.js +36 -0
- package/dist/lib/other-apps.js.map +1 -0
- package/dist/lib/overview-chat.d.ts +9 -0
- package/dist/lib/overview-chat.d.ts.map +1 -0
- package/dist/lib/overview-chat.js +16 -0
- package/dist/lib/overview-chat.js.map +1 -0
- package/dist/lib/simple-agent-profile.d.ts +36 -0
- package/dist/lib/simple-agent-profile.d.ts.map +1 -0
- package/dist/lib/simple-agent-profile.js +183 -0
- package/dist/lib/simple-agent-profile.js.map +1 -0
- package/dist/lib/task-queue.d.ts +19 -0
- package/dist/lib/task-queue.d.ts.map +1 -0
- package/dist/lib/task-queue.js +54 -0
- package/dist/lib/task-queue.js.map +1 -0
- package/dist/lib/thread-link-preview.d.ts +23 -0
- package/dist/lib/thread-link-preview.d.ts.map +1 -0
- package/dist/lib/thread-link-preview.js +150 -0
- package/dist/lib/thread-link-preview.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +6 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/workspace-app-layout.d.ts +19 -0
- package/dist/lib/workspace-app-layout.d.ts.map +1 -0
- package/dist/lib/workspace-app-layout.js +75 -0
- package/dist/lib/workspace-app-layout.js.map +1 -0
- package/dist/lib/workspace-apps.d.ts +72 -0
- package/dist/lib/workspace-apps.d.ts.map +1 -0
- package/dist/lib/workspace-apps.js +228 -0
- package/dist/lib/workspace-apps.js.map +1 -0
- package/dist/lib/workspace-apps.test.d.ts +2 -0
- package/dist/lib/workspace-apps.test.d.ts.map +1 -0
- package/dist/lib/workspace-apps.test.js +105 -0
- package/dist/lib/workspace-apps.test.js.map +1 -0
- package/dist/routes/index.d.ts +32 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +89 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/pages/$appId.d.ts +8 -0
- package/dist/routes/pages/$appId.d.ts.map +1 -0
- package/dist/routes/pages/$appId.js +126 -0
- package/dist/routes/pages/$appId.js.map +1 -0
- package/dist/routes/pages/_index.d.ts +22 -0
- package/dist/routes/pages/_index.d.ts.map +1 -0
- package/dist/routes/pages/_index.js +53 -0
- package/dist/routes/pages/_index.js.map +1 -0
- package/dist/routes/pages/_index.test.d.ts +2 -0
- package/dist/routes/pages/_index.test.d.ts.map +1 -0
- package/dist/routes/pages/_index.test.js +29 -0
- package/dist/routes/pages/_index.test.js.map +1 -0
- package/dist/routes/pages/admin._index.d.ts +5 -0
- package/dist/routes/pages/admin._index.d.ts.map +1 -0
- package/dist/routes/pages/admin._index.js +44 -0
- package/dist/routes/pages/admin._index.js.map +1 -0
- package/dist/routes/pages/admin.d.ts +5 -0
- package/dist/routes/pages/admin.d.ts.map +1 -0
- package/dist/routes/pages/admin.js +10 -0
- package/dist/routes/pages/admin.js.map +1 -0
- package/dist/routes/pages/agent-integrations.d.ts +5 -0
- package/dist/routes/pages/agent-integrations.d.ts.map +1 -0
- package/dist/routes/pages/agent-integrations.js +15 -0
- package/dist/routes/pages/agent-integrations.js.map +1 -0
- package/dist/routes/pages/agents.d.ts +5 -0
- package/dist/routes/pages/agents.d.ts.map +1 -0
- package/dist/routes/pages/agents.js +96 -0
- package/dist/routes/pages/agents.js.map +1 -0
- package/dist/routes/pages/approval.d.ts +5 -0
- package/dist/routes/pages/approval.d.ts.map +1 -0
- package/dist/routes/pages/approval.js +58 -0
- package/dist/routes/pages/approval.js.map +1 -0
- package/dist/routes/pages/approvals.d.ts +5 -0
- package/dist/routes/pages/approvals.d.ts.map +1 -0
- package/dist/routes/pages/approvals.js +55 -0
- package/dist/routes/pages/approvals.js.map +1 -0
- package/dist/routes/pages/apps.$appId.d.ts +6 -0
- package/dist/routes/pages/apps.$appId.d.ts.map +1 -0
- package/dist/routes/pages/apps.$appId.js +15 -0
- package/dist/routes/pages/apps.$appId.js.map +1 -0
- package/dist/routes/pages/apps.d.ts +5 -0
- package/dist/routes/pages/apps.d.ts.map +1 -0
- package/dist/routes/pages/apps.js +113 -0
- package/dist/routes/pages/apps.js.map +1 -0
- package/dist/routes/pages/audit.d.ts +5 -0
- package/dist/routes/pages/audit.d.ts.map +1 -0
- package/dist/routes/pages/audit.js +14 -0
- package/dist/routes/pages/audit.js.map +1 -0
- package/dist/routes/pages/automations.d.ts +5 -0
- package/dist/routes/pages/automations.d.ts.map +1 -0
- package/dist/routes/pages/automations.js +124 -0
- package/dist/routes/pages/automations.js.map +1 -0
- package/dist/routes/pages/browser-chat.d.ts +5 -0
- package/dist/routes/pages/browser-chat.d.ts.map +1 -0
- package/dist/routes/pages/browser-chat.js +43 -0
- package/dist/routes/pages/browser-chat.js.map +1 -0
- package/dist/routes/pages/browser-connect.d.ts +5 -0
- package/dist/routes/pages/browser-connect.d.ts.map +1 -0
- package/dist/routes/pages/browser-connect.js +72 -0
- package/dist/routes/pages/browser-connect.js.map +1 -0
- package/dist/routes/pages/chat.d.ts +5 -0
- package/dist/routes/pages/chat.d.ts.map +1 -0
- package/dist/routes/pages/chat.js +192 -0
- package/dist/routes/pages/chat.js.map +1 -0
- package/dist/routes/pages/destinations.d.ts +5 -0
- package/dist/routes/pages/destinations.d.ts.map +1 -0
- package/dist/routes/pages/destinations.js +96 -0
- package/dist/routes/pages/destinations.js.map +1 -0
- package/dist/routes/pages/dream-settings.d.ts +34 -0
- package/dist/routes/pages/dream-settings.d.ts.map +1 -0
- package/dist/routes/pages/dream-settings.js +68 -0
- package/dist/routes/pages/dream-settings.js.map +1 -0
- package/dist/routes/pages/dreams.d.ts +5 -0
- package/dist/routes/pages/dreams.d.ts.map +1 -0
- package/dist/routes/pages/dreams.js +455 -0
- package/dist/routes/pages/dreams.js.map +1 -0
- package/dist/routes/pages/extensions.$id.d.ts +5 -0
- package/dist/routes/pages/extensions.$id.d.ts.map +1 -0
- package/dist/routes/pages/extensions.$id.js +9 -0
- package/dist/routes/pages/extensions.$id.js.map +1 -0
- package/dist/routes/pages/extensions._index.d.ts +5 -0
- package/dist/routes/pages/extensions._index.d.ts.map +1 -0
- package/dist/routes/pages/extensions._index.js +9 -0
- package/dist/routes/pages/extensions._index.js.map +1 -0
- package/dist/routes/pages/identities.d.ts +5 -0
- package/dist/routes/pages/identities.d.ts.map +1 -0
- package/dist/routes/pages/identities.js +20 -0
- package/dist/routes/pages/identities.js.map +1 -0
- package/dist/routes/pages/integrations.d.ts +5 -0
- package/dist/routes/pages/integrations.d.ts.map +1 -0
- package/dist/routes/pages/integrations.js +196 -0
- package/dist/routes/pages/integrations.js.map +1 -0
- package/dist/routes/pages/messaging.d.ts +5 -0
- package/dist/routes/pages/messaging.d.ts.map +1 -0
- package/dist/routes/pages/messaging.js +10 -0
- package/dist/routes/pages/messaging.js.map +1 -0
- package/dist/routes/pages/metrics.d.ts +5 -0
- package/dist/routes/pages/metrics.d.ts.map +1 -0
- package/dist/routes/pages/metrics.js +305 -0
- package/dist/routes/pages/metrics.js.map +1 -0
- package/dist/routes/pages/new-app.d.ts +5 -0
- package/dist/routes/pages/new-app.d.ts.map +1 -0
- package/dist/routes/pages/new-app.js +12 -0
- package/dist/routes/pages/new-app.js.map +1 -0
- package/dist/routes/pages/operations.d.ts +5 -0
- package/dist/routes/pages/operations.d.ts.map +1 -0
- package/dist/routes/pages/operations.js +53 -0
- package/dist/routes/pages/operations.js.map +1 -0
- package/dist/routes/pages/overview.d.ts +18 -0
- package/dist/routes/pages/overview.d.ts.map +1 -0
- package/dist/routes/pages/overview.js +19 -0
- package/dist/routes/pages/overview.js.map +1 -0
- package/dist/routes/pages/settings.d.ts +5 -0
- package/dist/routes/pages/settings.d.ts.map +1 -0
- package/dist/routes/pages/settings.js +57 -0
- package/dist/routes/pages/settings.js.map +1 -0
- package/dist/routes/pages/team.d.ts +5 -0
- package/dist/routes/pages/team.d.ts.map +1 -0
- package/dist/routes/pages/team.js +9 -0
- package/dist/routes/pages/team.js.map +1 -0
- package/dist/routes/pages/thread-debug.d.ts +5 -0
- package/dist/routes/pages/thread-debug.d.ts.map +1 -0
- package/dist/routes/pages/thread-debug.js +563 -0
- package/dist/routes/pages/thread-debug.js.map +1 -0
- package/dist/routes/pages/tools.$id.d.ts +5 -0
- package/dist/routes/pages/tools.$id.d.ts.map +1 -0
- package/dist/routes/pages/tools.$id.js +9 -0
- package/dist/routes/pages/tools.$id.js.map +1 -0
- package/dist/routes/pages/tools._index.d.ts +5 -0
- package/dist/routes/pages/tools._index.d.ts.map +1 -0
- package/dist/routes/pages/tools._index.js +9 -0
- package/dist/routes/pages/tools._index.js.map +1 -0
- package/dist/routes/pages/transactional-email.$appId.$id.d.ts +5 -0
- package/dist/routes/pages/transactional-email.$appId.$id.d.ts.map +1 -0
- package/dist/routes/pages/transactional-email.$appId.$id.js +147 -0
- package/dist/routes/pages/transactional-email.$appId.$id.js.map +1 -0
- package/dist/routes/pages/transactional-email.d.ts +5 -0
- package/dist/routes/pages/transactional-email.d.ts.map +1 -0
- package/dist/routes/pages/transactional-email.js +143 -0
- package/dist/routes/pages/transactional-email.js.map +1 -0
- package/dist/routes/pages/vault.d.ts +5 -0
- package/dist/routes/pages/vault.d.ts.map +1 -0
- package/dist/routes/pages/vault.js +214 -0
- package/dist/routes/pages/vault.js.map +1 -0
- package/dist/routes/pages/workspace.d.ts +5 -0
- package/dist/routes/pages/workspace.d.ts.map +1 -0
- package/dist/routes/pages/workspace.js +336 -0
- package/dist/routes/pages/workspace.js.map +1 -0
- package/dist/server/index.d.ts +44 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +71 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/lib/agent-pack-store.d.ts +24 -0
- package/dist/server/lib/agent-pack-store.d.ts.map +1 -0
- package/dist/server/lib/agent-pack-store.js +22 -0
- package/dist/server/lib/agent-pack-store.js.map +1 -0
- package/dist/server/lib/app-creation-store.d.ts +164 -0
- package/dist/server/lib/app-creation-store.d.ts.map +1 -0
- package/dist/server/lib/app-creation-store.js +1975 -0
- package/dist/server/lib/app-creation-store.js.map +1 -0
- package/dist/server/lib/browser-extension-allowlist.d.ts +9 -0
- package/dist/server/lib/browser-extension-allowlist.d.ts.map +1 -0
- package/dist/server/lib/browser-extension-allowlist.js +39 -0
- package/dist/server/lib/browser-extension-allowlist.js.map +1 -0
- package/dist/server/lib/curated-workspace-templates.d.ts +22 -0
- package/dist/server/lib/curated-workspace-templates.d.ts.map +1 -0
- package/dist/server/lib/curated-workspace-templates.js +137 -0
- package/dist/server/lib/curated-workspace-templates.js.map +1 -0
- package/dist/server/lib/dispatch-integrations.d.ts +16 -0
- package/dist/server/lib/dispatch-integrations.d.ts.map +1 -0
- package/dist/server/lib/dispatch-integrations.js +411 -0
- package/dist/server/lib/dispatch-integrations.js.map +1 -0
- package/dist/server/lib/dispatch-remote-commands.d.ts +83 -0
- package/dist/server/lib/dispatch-remote-commands.d.ts.map +1 -0
- package/dist/server/lib/dispatch-remote-commands.js +256 -0
- package/dist/server/lib/dispatch-remote-commands.js.map +1 -0
- package/dist/server/lib/dispatch-routing.d.ts +6 -0
- package/dist/server/lib/dispatch-routing.d.ts.map +1 -0
- package/dist/server/lib/dispatch-routing.js +30 -0
- package/dist/server/lib/dispatch-routing.js.map +1 -0
- package/dist/server/lib/dispatch-store.d.ts +342 -0
- package/dist/server/lib/dispatch-store.d.ts.map +1 -0
- package/dist/server/lib/dispatch-store.js +725 -0
- package/dist/server/lib/dispatch-store.js.map +1 -0
- package/dist/server/lib/dreams-store.d.ts +398 -0
- package/dist/server/lib/dreams-store.d.ts.map +1 -0
- package/dist/server/lib/dreams-store.js +2330 -0
- package/dist/server/lib/dreams-store.js.map +1 -0
- package/dist/server/lib/env-config.d.ts +3 -0
- package/dist/server/lib/env-config.d.ts.map +1 -0
- package/dist/server/lib/env-config.js +98 -0
- package/dist/server/lib/env-config.js.map +1 -0
- package/dist/server/lib/mcp-access-store.d.ts +16 -0
- package/dist/server/lib/mcp-access-store.d.ts.map +1 -0
- package/dist/server/lib/mcp-access-store.js +92 -0
- package/dist/server/lib/mcp-access-store.js.map +1 -0
- package/dist/server/lib/mcp-gateway.d.ts +90 -0
- package/dist/server/lib/mcp-gateway.d.ts.map +1 -0
- package/dist/server/lib/mcp-gateway.js +1036 -0
- package/dist/server/lib/mcp-gateway.js.map +1 -0
- package/dist/server/lib/onboarding-steps.d.ts +12 -0
- package/dist/server/lib/onboarding-steps.d.ts.map +1 -0
- package/dist/server/lib/onboarding-steps.js +72 -0
- package/dist/server/lib/onboarding-steps.js.map +1 -0
- package/dist/server/lib/provider-api.d.ts +29 -0
- package/dist/server/lib/provider-api.d.ts.map +1 -0
- package/dist/server/lib/provider-api.js +49 -0
- package/dist/server/lib/provider-api.js.map +1 -0
- package/dist/server/lib/thread-debug-store.d.ts +194 -0
- package/dist/server/lib/thread-debug-store.d.ts.map +1 -0
- package/dist/server/lib/thread-debug-store.js +849 -0
- package/dist/server/lib/thread-debug-store.js.map +1 -0
- package/dist/server/lib/thread-link-preview.d.ts +3 -0
- package/dist/server/lib/thread-link-preview.d.ts.map +1 -0
- package/dist/server/lib/thread-link-preview.js +28 -0
- package/dist/server/lib/thread-link-preview.js.map +1 -0
- package/dist/server/lib/usage-metrics-store.d.ts +113 -0
- package/dist/server/lib/usage-metrics-store.d.ts.map +1 -0
- package/dist/server/lib/usage-metrics-store.js +580 -0
- package/dist/server/lib/usage-metrics-store.js.map +1 -0
- package/dist/server/lib/vault-boot-resync.d.ts +23 -0
- package/dist/server/lib/vault-boot-resync.d.ts.map +1 -0
- package/dist/server/lib/vault-boot-resync.js +44 -0
- package/dist/server/lib/vault-boot-resync.js.map +1 -0
- package/dist/server/lib/vault-store.d.ts +381 -0
- package/dist/server/lib/vault-store.d.ts.map +1 -0
- package/dist/server/lib/vault-store.js +1106 -0
- package/dist/server/lib/vault-store.js.map +1 -0
- package/dist/server/lib/workspace-app-action-auth.d.ts +9 -0
- package/dist/server/lib/workspace-app-action-auth.d.ts.map +1 -0
- package/dist/server/lib/workspace-app-action-auth.js +102 -0
- package/dist/server/lib/workspace-app-action-auth.js.map +1 -0
- package/dist/server/lib/workspace-app-chat-proxy.d.ts +52 -0
- package/dist/server/lib/workspace-app-chat-proxy.d.ts.map +1 -0
- package/dist/server/lib/workspace-app-chat-proxy.js +306 -0
- package/dist/server/lib/workspace-app-chat-proxy.js.map +1 -0
- package/dist/server/lib/workspace-resources-store.d.ts +372 -0
- package/dist/server/lib/workspace-resources-store.d.ts.map +1 -0
- package/dist/server/lib/workspace-resources-store.js +1000 -0
- package/dist/server/lib/workspace-resources-store.js.map +1 -0
- package/dist/server/plugins/agent-chat.d.ts +3 -0
- package/dist/server/plugins/agent-chat.d.ts.map +1 -0
- package/dist/server/plugins/agent-chat.js +94 -0
- package/dist/server/plugins/agent-chat.js.map +1 -0
- package/dist/server/plugins/auth.d.ts +9 -0
- package/dist/server/plugins/auth.d.ts.map +1 -0
- package/dist/server/plugins/auth.js +31 -0
- package/dist/server/plugins/auth.js.map +1 -0
- package/dist/server/plugins/core-routes.d.ts +4 -0
- package/dist/server/plugins/core-routes.d.ts.map +1 -0
- package/dist/server/plugins/core-routes.js +18 -0
- package/dist/server/plugins/core-routes.js.map +1 -0
- package/dist/server/plugins/db.d.ts +11 -0
- package/dist/server/plugins/db.d.ts.map +1 -0
- package/dist/server/plugins/db.js +18 -0
- package/dist/server/plugins/db.js.map +1 -0
- package/dist/server/plugins/integrations.d.ts +8 -0
- package/dist/server/plugins/integrations.d.ts.map +1 -0
- package/dist/server/plugins/integrations.js +72 -0
- package/dist/server/plugins/integrations.js.map +1 -0
- package/dist/shared/app-roles.d.ts +9 -0
- package/dist/shared/app-roles.d.ts.map +1 -0
- package/dist/shared/app-roles.js +7 -0
- package/dist/shared/app-roles.js.map +1 -0
- package/dist/shared/chat-first-pane.d.ts +8 -0
- package/dist/shared/chat-first-pane.d.ts.map +1 -0
- package/dist/shared/chat-first-pane.js +8 -0
- package/dist/shared/chat-first-pane.js.map +1 -0
- package/dist/shared/feature-flags.d.ts +8 -0
- package/dist/shared/feature-flags.d.ts.map +1 -0
- package/dist/shared/feature-flags.js +17 -0
- package/dist/shared/feature-flags.js.map +1 -0
- package/dist/shared/workspace-app-chat.d.ts +23 -0
- package/dist/shared/workspace-app-chat.d.ts.map +1 -0
- package/dist/shared/workspace-app-chat.js +45 -0
- package/dist/shared/workspace-app-chat.js.map +1 -0
- package/dist/shared/workspace-sso.d.ts +48 -0
- package/dist/shared/workspace-sso.d.ts.map +1 -0
- package/dist/shared/workspace-sso.js +142 -0
- package/dist/shared/workspace-sso.js.map +1 -0
- package/package.json +118 -0
- package/src/actions/apply-dream-proposal.ts +13 -0
- package/src/actions/approve-dispatch-change.ts +12 -0
- package/src/actions/approve-vault-request.ts +24 -0
- package/src/actions/archive-workspace-app.ts +17 -0
- package/src/actions/ask_app.ts +26 -0
- package/src/actions/ask_app_status.ts +16 -0
- package/src/actions/connect-external-agent.ts +92 -0
- package/src/actions/create-browser-chat-session.spec.ts +122 -0
- package/src/actions/create-browser-chat-session.ts +99 -0
- package/src/actions/create-dream-report.ts +77 -0
- package/src/actions/create-link-token.ts +13 -0
- package/src/actions/create-pylon-ticket.ts +111 -0
- package/src/actions/create-vault-grant.ts +16 -0
- package/src/actions/create-vault-secret.ts +28 -0
- package/src/actions/create-workspace-resource-grant.ts +16 -0
- package/src/actions/create-workspace-resource.ts +37 -0
- package/src/actions/create_embed_session.ts +30 -0
- package/src/actions/create_workspace_app_embed_session.spec.ts +122 -0
- package/src/actions/create_workspace_app_embed_session.ts +102 -0
- package/src/actions/delete-destination.ts +12 -0
- package/src/actions/delete-staged-dataset.ts +10 -0
- package/src/actions/delete-vault-secret.ts +13 -0
- package/src/actions/delete-workspace-resource.ts +13 -0
- package/src/actions/deny-vault-request.ts +13 -0
- package/src/actions/ensure-dream-job.ts +77 -0
- package/src/actions/get-agent-thread-debug.ts +41 -0
- package/src/actions/get-app-creation-settings.ts +12 -0
- package/src/actions/get-dispatch-settings.ts +11 -0
- package/src/actions/get-dream-settings.ts +13 -0
- package/src/actions/get-dream.ts +15 -0
- package/src/actions/get-vault-access-settings.ts +12 -0
- package/src/actions/get-workspace-info.ts +12 -0
- package/src/actions/get-workspace-resource-effective-context.ts +35 -0
- package/src/actions/grant-vault-secrets-to-app.ts +21 -0
- package/src/actions/grant-workspace-resources-to-app.ts +17 -0
- package/src/actions/import-agent-pack.ts +146 -0
- package/src/actions/import-agent.ts +102 -0
- package/src/actions/index.spec.ts +59 -0
- package/src/actions/index.ts +210 -0
- package/src/actions/list-agent-pack.ts +43 -0
- package/src/actions/list-agent-run-failures.ts +50 -0
- package/src/actions/list-agent-thread-sources.ts +13 -0
- package/src/actions/list-available-workspace-templates.ts +12 -0
- package/src/actions/list-connected-agents.spec.ts +73 -0
- package/src/actions/list-connected-agents.ts +112 -0
- package/src/actions/list-curated-workspace-templates.spec.ts +36 -0
- package/src/actions/list-curated-workspace-templates.ts +12 -0
- package/src/actions/list-destinations.ts +11 -0
- package/src/actions/list-dispatch-approvals.ts +11 -0
- package/src/actions/list-dispatch-audit.ts +13 -0
- package/src/actions/list-dispatch-overview.ts +19 -0
- package/src/actions/list-dispatch-usage-metrics.ts +30 -0
- package/src/actions/list-dream-candidates.ts +78 -0
- package/src/actions/list-dreams.ts +18 -0
- package/src/actions/list-integrations-catalog.ts +12 -0
- package/src/actions/list-linked-identities.ts +11 -0
- package/src/actions/list-mcp-app-access.ts +27 -0
- package/src/actions/list-staged-datasets.ts +10 -0
- package/src/actions/list-vault-audit.ts +17 -0
- package/src/actions/list-vault-grants.ts +15 -0
- package/src/actions/list-vault-requests.ts +17 -0
- package/src/actions/list-vault-secret-options.ts +14 -0
- package/src/actions/list-vault-secrets.ts +27 -0
- package/src/actions/list-workspace-apps.ts +33 -0
- package/src/actions/list-workspace-resource-grants.ts +15 -0
- package/src/actions/list-workspace-resource-options.ts +24 -0
- package/src/actions/list-workspace-resources-for-app.ts +14 -0
- package/src/actions/list-workspace-resources.ts +24 -0
- package/src/actions/list_apps.spec.ts +52 -0
- package/src/actions/list_apps.ts +36 -0
- package/src/actions/navigate.ts +53 -0
- package/src/actions/open_app.spec.ts +106 -0
- package/src/actions/open_app.ts +152 -0
- package/src/actions/preview-dream-proposal.ts +15 -0
- package/src/actions/preview-workspace-resource-change.ts +26 -0
- package/src/actions/provider-api-audit.spec.ts +51 -0
- package/src/actions/provider-api-catalog.ts +14 -0
- package/src/actions/provider-api-docs.ts +24 -0
- package/src/actions/provider-api-register.spec.ts +193 -0
- package/src/actions/provider-api-register.ts +35 -0
- package/src/actions/provider-api-request.ts +28 -0
- package/src/actions/query-staged-dataset.ts +10 -0
- package/src/actions/read-slack-thread-context.spec.ts +134 -0
- package/src/actions/read-slack-thread-context.ts +171 -0
- package/src/actions/reject-dispatch-change.ts +13 -0
- package/src/actions/reject-dream-proposal.ts +13 -0
- package/src/actions/remix-workspace-template.spec.ts +145 -0
- package/src/actions/remix-workspace-template.ts +106 -0
- package/src/actions/remove-pending-workspace-app.ts +17 -0
- package/src/actions/request-vault-secret.ts +17 -0
- package/src/actions/resolve-integration-source-context.spec.ts +78 -0
- package/src/actions/resolve-integration-source-context.ts +37 -0
- package/src/actions/restore-starter-workspace-resources.ts +18 -0
- package/src/actions/revoke-vault-grant.ts +12 -0
- package/src/actions/revoke-workspace-resource-grant.ts +16 -0
- package/src/actions/scaffold-workspace-app.spec.ts +33 -0
- package/src/actions/scaffold-workspace-app.ts +57 -0
- package/src/actions/search-agent-threads.ts +31 -0
- package/src/actions/send-code-agent-remote-command.ts +60 -0
- package/src/actions/send-platform-message.spec.ts +129 -0
- package/src/actions/send-platform-message.ts +150 -0
- package/src/actions/set-app-creation-settings.ts +22 -0
- package/src/actions/set-dispatch-approval-policy.ts +25 -0
- package/src/actions/set-dream-settings.spec.ts +81 -0
- package/src/actions/set-dream-settings.ts +45 -0
- package/src/actions/set-mcp-app-access.spec.ts +73 -0
- package/src/actions/set-mcp-app-access.ts +56 -0
- package/src/actions/set-vault-access-settings.ts +17 -0
- package/src/actions/start-workspace-app-creation.ts +55 -0
- package/src/actions/sync-vault-to-app.ts +15 -0
- package/src/actions/unarchive-workspace-app.ts +17 -0
- package/src/actions/update-vault-secret.ts +49 -0
- package/src/actions/update-workspace-app-metadata.ts +33 -0
- package/src/actions/update-workspace-resource.ts +20 -0
- package/src/actions/upsert-destination.ts +30 -0
- package/src/actions/view-screen.spec.ts +212 -0
- package/src/actions/view-screen.ts +398 -0
- package/src/client/transactional-emails.spec.ts +91 -0
- package/src/client/transactional-emails.ts +201 -0
- package/src/components/action-query-error.spec.tsx +56 -0
- package/src/components/action-query-error.tsx +32 -0
- package/src/components/admin-navigation.tsx +329 -0
- package/src/components/agents-panel.tsx +383 -0
- package/src/components/app-icon.spec.tsx +44 -0
- package/src/components/app-icon.tsx +177 -0
- package/src/components/app-keys-popover.spec.tsx +146 -0
- package/src/components/app-keys-popover.tsx +300 -0
- package/src/components/app-list-row.tsx +40 -0
- package/src/components/app-open-actions.tsx +5 -0
- package/src/components/app-row-settings.tsx +54 -0
- package/src/components/approval-value-block.spec.tsx +60 -0
- package/src/components/approval-value-block.tsx +33 -0
- package/src/components/automation-run-history-dialog.tsx +247 -0
- package/src/components/connected-app-card.tsx +39 -0
- package/src/components/create-app-popover.spec.tsx +376 -0
- package/src/components/create-app-popover.tsx +677 -0
- package/src/components/dispatch-control-plane.spec.tsx +344 -0
- package/src/components/dispatch-control-plane.tsx +416 -0
- package/src/components/dispatch-shell.tsx +59 -0
- package/src/components/docs-link.tsx +52 -0
- package/src/components/index.ts +21 -0
- package/src/components/layout/Header.tsx +100 -0
- package/src/components/layout/HeaderActions.tsx +1 -0
- package/src/components/layout/Layout.app-chat.spec.ts +31 -0
- package/src/components/layout/Layout.spec.tsx +549 -0
- package/src/components/layout/Layout.tsx +2532 -0
- package/src/components/layout/workspace-apps-rail.tsx +132 -0
- package/src/components/messaging-setup-panel.spec.tsx +261 -0
- package/src/components/messaging-setup-panel.tsx +1131 -0
- package/src/components/other-apps-section.tsx +223 -0
- package/src/components/simple-agents-panel.spec.tsx +153 -0
- package/src/components/simple-agents-panel.tsx +1311 -0
- package/src/components/task-queue-health.tsx +175 -0
- package/src/components/transactional-email-activity.tsx +102 -0
- package/src/components/transactional-email-metrics.tsx +127 -0
- package/src/components/transactional-email-preview.tsx +88 -0
- package/src/components/ui/accordion.tsx +56 -0
- package/src/components/ui/alert-dialog.tsx +139 -0
- package/src/components/ui/alert.tsx +59 -0
- package/src/components/ui/aspect-ratio.tsx +5 -0
- package/src/components/ui/avatar.tsx +48 -0
- package/src/components/ui/badge.tsx +37 -0
- package/src/components/ui/breadcrumb.tsx +115 -0
- package/src/components/ui/button.tsx +56 -0
- package/src/components/ui/calendar.tsx +68 -0
- package/src/components/ui/card.tsx +86 -0
- package/src/components/ui/carousel.tsx +260 -0
- package/src/components/ui/chart.tsx +375 -0
- package/src/components/ui/checkbox.tsx +28 -0
- package/src/components/ui/collapsible.tsx +9 -0
- package/src/components/ui/command.tsx +154 -0
- package/src/components/ui/context-menu.tsx +198 -0
- package/src/components/ui/dialog.tsx +1 -0
- package/src/components/ui/drawer.tsx +128 -0
- package/src/components/ui/dropdown-menu.tsx +1 -0
- package/src/components/ui/form.tsx +177 -0
- package/src/components/ui/hover-card.tsx +27 -0
- package/src/components/ui/input-otp.tsx +69 -0
- package/src/components/ui/input.tsx +22 -0
- package/src/components/ui/label.tsx +24 -0
- package/src/components/ui/menubar.tsx +235 -0
- package/src/components/ui/navigation-menu.tsx +128 -0
- package/src/components/ui/pagination.tsx +121 -0
- package/src/components/ui/popover.tsx +31 -0
- package/src/components/ui/progress.tsx +26 -0
- package/src/components/ui/radio-group.tsx +42 -0
- package/src/components/ui/resizable.tsx +43 -0
- package/src/components/ui/scroll-area.tsx +46 -0
- package/src/components/ui/select.tsx +1 -0
- package/src/components/ui/separator.tsx +29 -0
- package/src/components/ui/sheet.tsx +139 -0
- package/src/components/ui/sidebar.tsx +777 -0
- package/src/components/ui/skeleton.tsx +15 -0
- package/src/components/ui/slider.tsx +26 -0
- package/src/components/ui/sonner.tsx +58 -0
- package/src/components/ui/spinner.tsx +17 -0
- package/src/components/ui/switch.tsx +27 -0
- package/src/components/ui/table.tsx +117 -0
- package/src/components/ui/tabs.tsx +53 -0
- package/src/components/ui/textarea.tsx +23 -0
- package/src/components/ui/toast.tsx +127 -0
- package/src/components/ui/toaster.tsx +33 -0
- package/src/components/ui/toggle-group.tsx +59 -0
- package/src/components/ui/toggle.tsx +43 -0
- package/src/components/ui/tooltip.tsx +28 -0
- package/src/components/ui/use-toast.ts +3 -0
- package/src/components/usage-alerts-panel.tsx +445 -0
- package/src/components/workspace-app-card.spec.tsx +408 -0
- package/src/components/workspace-app-card.tsx +711 -0
- package/src/components/workspace-app-chat-rail.spec.tsx +182 -0
- package/src/components/workspace-app-host.spec.tsx +688 -0
- package/src/components/workspace-app-host.tsx +756 -0
- package/src/components/workspace-app-search.tsx +96 -0
- package/src/components/workspace-resource-effective-stack.spec.tsx +126 -0
- package/src/components/workspace-resource-effective-stack.tsx +159 -0
- package/src/components/workspace-resource-impact-preview.spec.tsx +148 -0
- package/src/components/workspace-resource-impact-preview.tsx +128 -0
- package/src/components/workspace-template-card.spec.tsx +228 -0
- package/src/components/workspace-template-card.tsx +363 -0
- package/src/config.ts +42 -0
- package/src/db/index.ts +40 -0
- package/src/db/migrations.spec.ts +84 -0
- package/src/db/migrations.ts +251 -0
- package/src/db/schema.ts +209 -0
- package/src/hooks/use-mobile.tsx +1 -0
- package/src/hooks/use-navigation-state.spec.ts +166 -0
- package/src/hooks/use-navigation-state.ts +400 -0
- package/src/hooks/use-toast.ts +188 -0
- package/src/index.ts +19 -0
- package/src/lib/agent-pack.spec.ts +47 -0
- package/src/lib/agent-pack.ts +226 -0
- package/src/lib/automation-display.spec.ts +149 -0
- package/src/lib/automation-display.ts +108 -0
- package/src/lib/automations.spec.ts +64 -0
- package/src/lib/automations.ts +66 -0
- package/src/lib/browser-chat-bridge.spec.ts +151 -0
- package/src/lib/browser-chat-bridge.ts +79 -0
- package/src/lib/browser-chat-protocol.spec.ts +113 -0
- package/src/lib/browser-chat-protocol.ts +124 -0
- package/src/lib/catch-all-target.spec.ts +156 -0
- package/src/lib/catch-all-target.ts +125 -0
- package/src/lib/embed-session-recovery.spec.ts +63 -0
- package/src/lib/embed-session-recovery.ts +26 -0
- package/src/lib/other-apps.spec.ts +133 -0
- package/src/lib/other-apps.ts +57 -0
- package/src/lib/overview-chat.spec.ts +51 -0
- package/src/lib/overview-chat.ts +29 -0
- package/src/lib/simple-agent-profile.spec.ts +77 -0
- package/src/lib/simple-agent-profile.ts +247 -0
- package/src/lib/task-queue.spec.ts +57 -0
- package/src/lib/task-queue.ts +72 -0
- package/src/lib/thread-link-preview.ts +160 -0
- package/src/lib/utils.ts +6 -0
- package/src/lib/workspace-app-layout.spec.ts +47 -0
- package/src/lib/workspace-app-layout.ts +121 -0
- package/src/lib/workspace-apps.spec.ts +175 -0
- package/src/lib/workspace-apps.test.ts +151 -0
- package/src/lib/workspace-apps.ts +306 -0
- package/src/routes/index.spec.ts +39 -0
- package/src/routes/index.ts +95 -0
- package/src/routes/pages/$appId.spec.tsx +115 -0
- package/src/routes/pages/$appId.tsx +240 -0
- package/src/routes/pages/_index.test.ts +34 -0
- package/src/routes/pages/_index.tsx +65 -0
- package/src/routes/pages/admin._index.tsx +107 -0
- package/src/routes/pages/admin.tsx +15 -0
- package/src/routes/pages/agent-integrations.tsx +24 -0
- package/src/routes/pages/agents.tsx +251 -0
- package/src/routes/pages/approval.tsx +301 -0
- package/src/routes/pages/approvals.tsx +198 -0
- package/src/routes/pages/apps.$appId.spec.tsx +66 -0
- package/src/routes/pages/apps.$appId.tsx +22 -0
- package/src/routes/pages/apps.tsx +431 -0
- package/src/routes/pages/audit.tsx +71 -0
- package/src/routes/pages/automations.tsx +363 -0
- package/src/routes/pages/browser-chat.spec.tsx +121 -0
- package/src/routes/pages/browser-chat.tsx +89 -0
- package/src/routes/pages/browser-connect.spec.tsx +137 -0
- package/src/routes/pages/browser-connect.tsx +143 -0
- package/src/routes/pages/chat.spec.tsx +183 -0
- package/src/routes/pages/chat.tsx +335 -0
- package/src/routes/pages/destinations.tsx +309 -0
- package/src/routes/pages/dream-settings.spec.ts +131 -0
- package/src/routes/pages/dream-settings.ts +103 -0
- package/src/routes/pages/dreams.tsx +1812 -0
- package/src/routes/pages/extensions.$id.tsx +9 -0
- package/src/routes/pages/extensions._index.tsx +9 -0
- package/src/routes/pages/identities.tsx +106 -0
- package/src/routes/pages/integrations.tsx +541 -0
- package/src/routes/pages/messaging.tsx +17 -0
- package/src/routes/pages/metrics.tsx +1135 -0
- package/src/routes/pages/new-app.tsx +20 -0
- package/src/routes/pages/operations.tsx +132 -0
- package/src/routes/pages/overview.tsx +22 -0
- package/src/routes/pages/settings.tsx +196 -0
- package/src/routes/pages/team.tsx +9 -0
- package/src/routes/pages/thread-debug.spec.tsx +370 -0
- package/src/routes/pages/thread-debug.tsx +1923 -0
- package/src/routes/pages/tools.$id.tsx +9 -0
- package/src/routes/pages/tools._index.tsx +9 -0
- package/src/routes/pages/transactional-email.$appId.$id.tsx +369 -0
- package/src/routes/pages/transactional-email.tsx +575 -0
- package/src/routes/pages/vault.tsx +978 -0
- package/src/routes/pages/workspace.tsx +1213 -0
- package/src/server/index.ts +86 -0
- package/src/server/lib/agent-pack-store.ts +35 -0
- package/src/server/lib/app-creation-store.spec.ts +1018 -0
- package/src/server/lib/app-creation-store.ts +2567 -0
- package/src/server/lib/approval-fencing.spec.ts +489 -0
- package/src/server/lib/browser-extension-allowlist.spec.ts +76 -0
- package/src/server/lib/browser-extension-allowlist.ts +58 -0
- package/src/server/lib/curated-workspace-templates.spec.ts +56 -0
- package/src/server/lib/curated-workspace-templates.ts +187 -0
- package/src/server/lib/dispatch-integrations.spec.ts +428 -0
- package/src/server/lib/dispatch-integrations.ts +528 -0
- package/src/server/lib/dispatch-remote-commands.spec.ts +168 -0
- package/src/server/lib/dispatch-remote-commands.ts +375 -0
- package/src/server/lib/dispatch-routing.spec.ts +44 -0
- package/src/server/lib/dispatch-routing.ts +42 -0
- package/src/server/lib/dispatch-store.ts +1008 -0
- package/src/server/lib/dreams-store.spec.ts +1492 -0
- package/src/server/lib/dreams-store.ts +3187 -0
- package/src/server/lib/env-config.ts +99 -0
- package/src/server/lib/mcp-access-store.spec.ts +171 -0
- package/src/server/lib/mcp-access-store.ts +138 -0
- package/src/server/lib/mcp-gateway.spec.ts +1583 -0
- package/src/server/lib/mcp-gateway.ts +1388 -0
- package/src/server/lib/onboarding-steps.ts +82 -0
- package/src/server/lib/provider-api.ts +69 -0
- package/src/server/lib/thread-debug-store.spec.ts +439 -0
- package/src/server/lib/thread-debug-store.ts +1170 -0
- package/src/server/lib/thread-link-preview.spec.ts +127 -0
- package/src/server/lib/thread-link-preview.ts +32 -0
- package/src/server/lib/usage-metrics-store.spec.ts +240 -0
- package/src/server/lib/usage-metrics-store.ts +879 -0
- package/src/server/lib/vault-boot-resync.spec.ts +68 -0
- package/src/server/lib/vault-boot-resync.ts +50 -0
- package/src/server/lib/vault-store.spec.ts +541 -0
- package/src/server/lib/vault-store.ts +1540 -0
- package/src/server/lib/workspace-app-action-auth.spec.ts +212 -0
- package/src/server/lib/workspace-app-action-auth.ts +122 -0
- package/src/server/lib/workspace-app-chat-proxy.spec.ts +322 -0
- package/src/server/lib/workspace-app-chat-proxy.ts +389 -0
- package/src/server/lib/workspace-resource-approval-lifecycle.spec.ts +227 -0
- package/src/server/lib/workspace-resources-store.spec.ts +1108 -0
- package/src/server/lib/workspace-resources-store.ts +1403 -0
- package/src/server/plugins/agent-chat.spec.ts +43 -0
- package/src/server/plugins/agent-chat.ts +99 -0
- package/src/server/plugins/auth.spec.ts +45 -0
- package/src/server/plugins/auth.ts +36 -0
- package/src/server/plugins/core-routes.ts +29 -0
- package/src/server/plugins/db.ts +20 -0
- package/src/server/plugins/integrations.ts +82 -0
- package/src/shared/app-roles.ts +8 -0
- package/src/shared/chat-first-pane.ts +7 -0
- package/src/shared/feature-flags.ts +20 -0
- package/src/shared/workspace-app-chat.ts +45 -0
- package/src/shared/workspace-sso.ts +173 -0
- package/src/styles/dispatch-css.spec.ts +87 -0
- package/src/styles/dispatch.css +146 -0
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useFormatters, useT } from "@agent-native/core/client/i18n";
|
|
3
|
+
import { disconnectManagedIntegrationInstallation, listManagedIntegrationBudgets, listManagedIntegrationInstallations, listManagedIntegrationScopes, listIntegrationEnvStatuses, listIntegrationStatuses, managedIntegrationOAuthUrl, managedSlackAgentManifestUrl, saveIntegrationEnvVars, saveManagedIntegrationBudget, saveManagedIntegrationScope, setIntegrationEnabled, setupIntegration, testManagedIntegrationInstallation, } from "@agent-native/core/client/integrations";
|
|
4
|
+
import { listBuiltInChannelIntegrations, } from "@agent-native/core/integrations";
|
|
5
|
+
import { IconBrandDiscord, IconBrandSlack, IconBrandTelegram, IconBrandTeams, IconBrandWhatsapp, IconCheck, IconChevronRight, IconCopy, IconExternalLink, IconFileDescription, IconInfoCircle, IconLoader2, IconMail, IconPlug, } from "@tabler/icons-react";
|
|
6
|
+
import { useEffect, useMemo, useState } from "react";
|
|
7
|
+
import { toast } from "sonner";
|
|
8
|
+
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "./ui/accordion.js";
|
|
9
|
+
import { Button } from "./ui/button.js";
|
|
10
|
+
import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "./ui/collapsible.js";
|
|
11
|
+
import { Input } from "./ui/input.js";
|
|
12
|
+
import { Skeleton } from "./ui/skeleton.js";
|
|
13
|
+
import { Switch } from "./ui/switch.js";
|
|
14
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "./ui/tooltip.js";
|
|
15
|
+
const CHANNELS = listBuiltInChannelIntegrations();
|
|
16
|
+
const PLATFORM_ICONS = {
|
|
17
|
+
slack: IconBrandSlack,
|
|
18
|
+
"microsoft-teams": IconBrandTeams,
|
|
19
|
+
discord: IconBrandDiscord,
|
|
20
|
+
telegram: IconBrandTelegram,
|
|
21
|
+
whatsapp: IconBrandWhatsapp,
|
|
22
|
+
email: IconMail,
|
|
23
|
+
};
|
|
24
|
+
function hasMissingRequiredCredentials(credentials, envStatusByKey) {
|
|
25
|
+
const alternatives = new Map();
|
|
26
|
+
for (const credential of credentials) {
|
|
27
|
+
if (!credential.required)
|
|
28
|
+
continue;
|
|
29
|
+
if (!credential.alternativeGroup) {
|
|
30
|
+
if (!envStatusByKey.get(credential.key)?.configured)
|
|
31
|
+
return true;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const group = alternatives.get(credential.alternativeGroup) ?? [];
|
|
35
|
+
alternatives.set(credential.alternativeGroup, [...group, credential]);
|
|
36
|
+
}
|
|
37
|
+
return [...alternatives.values()].some((group) => group.every((credential) => !envStatusByKey.get(credential.key)?.configured));
|
|
38
|
+
}
|
|
39
|
+
function HelpTooltip({ content }) {
|
|
40
|
+
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", className: "text-muted-foreground/60 hover:text-foreground cursor-pointer", children: _jsx(IconInfoCircle, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { side: "top", className: "max-w-64 text-xs leading-relaxed", children: content })] }));
|
|
41
|
+
}
|
|
42
|
+
function StatusPill({ tone, label, }) {
|
|
43
|
+
const toneClass = tone === "success"
|
|
44
|
+
? "bg-emerald-500/10 text-emerald-700 dark:text-emerald-300"
|
|
45
|
+
: tone === "warning"
|
|
46
|
+
? "bg-amber-500/10 text-amber-700 dark:text-amber-300"
|
|
47
|
+
: "bg-muted text-muted-foreground";
|
|
48
|
+
return (_jsx("span", { className: `inline-flex items-center rounded-full px-2 py-1 text-[11px] font-medium ${toneClass}`, children: label }));
|
|
49
|
+
}
|
|
50
|
+
function DisclosureSection({ title, summary, children, defaultOpen = false, }) {
|
|
51
|
+
return (_jsxs(Collapsible, { defaultOpen: defaultOpen, className: "border-t", children: [_jsxs(CollapsibleTrigger, { className: "group flex w-full cursor-pointer items-center justify-between gap-3 py-3 text-left", children: [_jsxs("span", { className: "min-w-0", children: [_jsx("span", { className: "block text-sm font-medium text-foreground", children: title }), summary ? (_jsx("span", { className: "mt-0.5 block truncate text-xs text-muted-foreground", children: summary })) : null] }), _jsx(IconChevronRight, { className: "h-4 w-4 shrink-0 text-muted-foreground transition-transform group-data-[state=open]:rotate-90" })] }), _jsx(CollapsibleContent, { className: "pb-3", children: children })] }));
|
|
52
|
+
}
|
|
53
|
+
/** Render a non-secret env value (e.g. EMAIL_AGENT_ADDRESS) as a copyable
|
|
54
|
+
* text block. We can't read the actual value from the backend (env-status
|
|
55
|
+
* only reports `configured: true|false`), so we offer a one-click reveal
|
|
56
|
+
* that hits a server endpoint, falling back to "saved" if the value is
|
|
57
|
+
* not exposed. For now we just render a "Saved — re-enter to change"
|
|
58
|
+
* placeholder; a future endpoint can return the actual value. */
|
|
59
|
+
function PublicValueReveal({ envKey: _envKey }) {
|
|
60
|
+
return (_jsx("div", { className: "rounded-md border bg-muted/20 px-3 py-2 text-xs text-muted-foreground", children: "Saved. Re-enter below to change." }));
|
|
61
|
+
}
|
|
62
|
+
function ConnectionStatus({ configured, enabled, }) {
|
|
63
|
+
if (enabled) {
|
|
64
|
+
return _jsx(StatusPill, { tone: "success", label: "Connected" });
|
|
65
|
+
}
|
|
66
|
+
if (configured) {
|
|
67
|
+
return _jsx(StatusPill, { tone: "warning", label: "Configured, not enabled" });
|
|
68
|
+
}
|
|
69
|
+
return _jsx(StatusPill, { tone: "neutral", label: "Not configured" });
|
|
70
|
+
}
|
|
71
|
+
export function MessagingSetupPanel() {
|
|
72
|
+
const t = useT();
|
|
73
|
+
const { formatDate } = useFormatters();
|
|
74
|
+
const [statuses, setStatuses] = useState([]);
|
|
75
|
+
const [loading, setLoading] = useState(true);
|
|
76
|
+
const [envStatuses, setEnvStatuses] = useState([]);
|
|
77
|
+
const [envLoading, setEnvLoading] = useState(true);
|
|
78
|
+
const [envValues, setEnvValues] = useState({});
|
|
79
|
+
const [savingKeysFor, setSavingKeysFor] = useState(null);
|
|
80
|
+
const [togglingPlatform, setTogglingPlatform] = useState(null);
|
|
81
|
+
const [setupPlatform, setSetupPlatform] = useState(null);
|
|
82
|
+
const [copiedWebhook, setCopiedWebhook] = useState(null);
|
|
83
|
+
const [installations, setInstallations] = useState([]);
|
|
84
|
+
const [installationAction, setInstallationAction] = useState(null);
|
|
85
|
+
const [scopes, setScopes] = useState([]);
|
|
86
|
+
const [budgets, setBudgets] = useState([]);
|
|
87
|
+
const [scopeBudget, setScopeBudget] = useState({});
|
|
88
|
+
const [savingScope, setSavingScope] = useState(null);
|
|
89
|
+
const refreshStatuses = async () => {
|
|
90
|
+
setLoading(true);
|
|
91
|
+
try {
|
|
92
|
+
setStatuses(await listIntegrationStatuses());
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
setLoading(false);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
let active = true;
|
|
100
|
+
listIntegrationStatuses()
|
|
101
|
+
.then((rows) => {
|
|
102
|
+
if (active) {
|
|
103
|
+
setStatuses(rows);
|
|
104
|
+
setLoading(false);
|
|
105
|
+
}
|
|
106
|
+
})
|
|
107
|
+
.catch(() => {
|
|
108
|
+
if (active)
|
|
109
|
+
setLoading(false);
|
|
110
|
+
});
|
|
111
|
+
return () => {
|
|
112
|
+
active = false;
|
|
113
|
+
};
|
|
114
|
+
}, []);
|
|
115
|
+
useEffect(() => {
|
|
116
|
+
let active = true;
|
|
117
|
+
listManagedIntegrationInstallations("slack")
|
|
118
|
+
.then((rows) => {
|
|
119
|
+
if (active)
|
|
120
|
+
setInstallations(rows);
|
|
121
|
+
})
|
|
122
|
+
.catch(() => { });
|
|
123
|
+
listManagedIntegrationScopes("slack")
|
|
124
|
+
.then((rows) => {
|
|
125
|
+
if (active)
|
|
126
|
+
setScopes(rows);
|
|
127
|
+
})
|
|
128
|
+
.catch(() => { });
|
|
129
|
+
listManagedIntegrationBudgets()
|
|
130
|
+
.then((rows) => {
|
|
131
|
+
if (active)
|
|
132
|
+
setBudgets(rows);
|
|
133
|
+
})
|
|
134
|
+
.catch(() => { });
|
|
135
|
+
return () => {
|
|
136
|
+
active = false;
|
|
137
|
+
};
|
|
138
|
+
}, []);
|
|
139
|
+
useEffect(() => {
|
|
140
|
+
let active = true;
|
|
141
|
+
listIntegrationEnvStatuses()
|
|
142
|
+
.then((rows) => {
|
|
143
|
+
if (active) {
|
|
144
|
+
setEnvStatuses(rows);
|
|
145
|
+
setEnvLoading(false);
|
|
146
|
+
}
|
|
147
|
+
})
|
|
148
|
+
.catch(() => {
|
|
149
|
+
if (active)
|
|
150
|
+
setEnvLoading(false);
|
|
151
|
+
});
|
|
152
|
+
return () => {
|
|
153
|
+
active = false;
|
|
154
|
+
};
|
|
155
|
+
}, []);
|
|
156
|
+
const envStatusByKey = useMemo(() => new Map(envStatuses.map((status) => [status.key, status])), [envStatuses]);
|
|
157
|
+
const statusByPlatform = useMemo(() => new Map(statuses.map((status) => [status.platform, status])), [statuses]);
|
|
158
|
+
const refreshEnvStatus = async () => {
|
|
159
|
+
setEnvLoading(true);
|
|
160
|
+
try {
|
|
161
|
+
setEnvStatuses(await listIntegrationEnvStatuses());
|
|
162
|
+
}
|
|
163
|
+
finally {
|
|
164
|
+
setEnvLoading(false);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
const saveEnvKeys = async (platform, keys) => {
|
|
168
|
+
const vars = keys
|
|
169
|
+
.map((key) => ({ key, value: envValues[key]?.trim() || "" }))
|
|
170
|
+
.filter((item) => item.value);
|
|
171
|
+
if (vars.length === 0) {
|
|
172
|
+
toast.error("Add the required credentials first.");
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
setSavingKeysFor(platform.id);
|
|
176
|
+
try {
|
|
177
|
+
await saveIntegrationEnvVars(vars);
|
|
178
|
+
toast.success(`${platform.name} credentials saved`);
|
|
179
|
+
setEnvValues((current) => {
|
|
180
|
+
const next = { ...current };
|
|
181
|
+
for (const key of keys)
|
|
182
|
+
delete next[key];
|
|
183
|
+
return next;
|
|
184
|
+
});
|
|
185
|
+
await refreshEnvStatus();
|
|
186
|
+
await refreshStatuses();
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
toast.error(error instanceof Error ? error.message : "Failed to save credentials");
|
|
190
|
+
}
|
|
191
|
+
finally {
|
|
192
|
+
setSavingKeysFor(null);
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
const togglePlatform = async (platform, enabled) => {
|
|
196
|
+
setTogglingPlatform(platform.id);
|
|
197
|
+
try {
|
|
198
|
+
await setIntegrationEnabled(platform.id, !enabled);
|
|
199
|
+
toast.success(enabled
|
|
200
|
+
? `${platform.name} disconnected`
|
|
201
|
+
: `${platform.name} connected`);
|
|
202
|
+
await refreshStatuses();
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
toast.error(error instanceof Error ? error.message : "Failed to update integration");
|
|
206
|
+
}
|
|
207
|
+
finally {
|
|
208
|
+
setTogglingPlatform(null);
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
const runSetup = async (platform) => {
|
|
212
|
+
setSetupPlatform(platform.id);
|
|
213
|
+
try {
|
|
214
|
+
await setupIntegration(platform.id);
|
|
215
|
+
toast.success(platform.id === "telegram"
|
|
216
|
+
? "Telegram webhook registered"
|
|
217
|
+
: `${platform.name} setup complete`);
|
|
218
|
+
await refreshStatuses();
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
toast.error(error instanceof Error
|
|
222
|
+
? error.message
|
|
223
|
+
: `Failed to set up ${platform.name}`);
|
|
224
|
+
}
|
|
225
|
+
finally {
|
|
226
|
+
setSetupPlatform(null);
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
const copyWebhook = async (webhookUrl) => {
|
|
230
|
+
await navigator.clipboard.writeText(webhookUrl);
|
|
231
|
+
setCopiedWebhook(webhookUrl);
|
|
232
|
+
toast.success("Webhook URL copied");
|
|
233
|
+
setTimeout(() => setCopiedWebhook(null), 1500);
|
|
234
|
+
};
|
|
235
|
+
const runInstallationAction = async (installation, action) => {
|
|
236
|
+
setInstallationAction(`${action}:${installation.id}`);
|
|
237
|
+
try {
|
|
238
|
+
await (action === "test"
|
|
239
|
+
? testManagedIntegrationInstallation(installation.id)
|
|
240
|
+
: disconnectManagedIntegrationInstallation(installation.id));
|
|
241
|
+
setInstallations(await listManagedIntegrationInstallations("slack"));
|
|
242
|
+
toast.success(action === "test"
|
|
243
|
+
? t("messaging.managed.connectionChecked")
|
|
244
|
+
: t("messaging.managed.workspaceDisconnected"));
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
toast.error(error instanceof Error
|
|
248
|
+
? error.message
|
|
249
|
+
: t("messaging.managed.actionFailed"));
|
|
250
|
+
}
|
|
251
|
+
finally {
|
|
252
|
+
setInstallationAction(null);
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
const updateScopePolicy = async (scope, policy) => {
|
|
256
|
+
setSavingScope(scope.id);
|
|
257
|
+
try {
|
|
258
|
+
await saveManagedIntegrationScope({
|
|
259
|
+
platform: scope.platform,
|
|
260
|
+
tenantId: scope.tenantId,
|
|
261
|
+
conversationId: scope.conversationId,
|
|
262
|
+
conversationType: scope.conversationType,
|
|
263
|
+
trust: scope.trust,
|
|
264
|
+
orgId: scope.orgId,
|
|
265
|
+
serviceOwnerEmail: scope.serviceOwnerEmail,
|
|
266
|
+
defaultModel: scope.defaultModel,
|
|
267
|
+
policy: { ...scope.policy, ...policy },
|
|
268
|
+
});
|
|
269
|
+
setScopes(await listManagedIntegrationScopes("slack"));
|
|
270
|
+
toast.success(t("messaging.managed.channelPolicyUpdated"));
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
toast.error(error instanceof Error
|
|
274
|
+
? error.message
|
|
275
|
+
: t("messaging.managed.policyUpdateFailed"));
|
|
276
|
+
}
|
|
277
|
+
finally {
|
|
278
|
+
setSavingScope(null);
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
const saveScopeBudget = async (scope) => {
|
|
282
|
+
const dollars = Number(scopeBudget[scope.id]);
|
|
283
|
+
if (!Number.isFinite(dollars) || dollars <= 0) {
|
|
284
|
+
toast.error(t("messaging.managed.positiveMonthlyBudget"));
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
setSavingScope(`budget:${scope.id}`);
|
|
288
|
+
try {
|
|
289
|
+
await saveManagedIntegrationBudget({
|
|
290
|
+
subject: {
|
|
291
|
+
type: "scope",
|
|
292
|
+
scope: {
|
|
293
|
+
platform: scope.platform,
|
|
294
|
+
tenantId: scope.tenantId,
|
|
295
|
+
conversationId: scope.conversationId,
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
period: "month",
|
|
299
|
+
limitMicros: Math.round(dollars * 1_000_000),
|
|
300
|
+
});
|
|
301
|
+
setBudgets(await listManagedIntegrationBudgets());
|
|
302
|
+
toast.success(t("messaging.managed.channelBudgetSaved"));
|
|
303
|
+
}
|
|
304
|
+
catch (error) {
|
|
305
|
+
toast.error(error instanceof Error
|
|
306
|
+
? error.message
|
|
307
|
+
: t("messaging.managed.budgetSaveFailed"));
|
|
308
|
+
}
|
|
309
|
+
finally {
|
|
310
|
+
setSavingScope(null);
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
return (_jsxs("div", { className: "space-y-4", children: [_jsx(Accordion, { type: "single", collapsible: true, className: "overflow-hidden rounded-2xl bg-card", children: CHANNELS.map((platform) => {
|
|
314
|
+
const status = statusByPlatform.get(platform.id);
|
|
315
|
+
const configured = !!status?.configured ||
|
|
316
|
+
(platform.id === "slack" &&
|
|
317
|
+
installations.some((installation) => installation.status === "connected"));
|
|
318
|
+
const enabled = !!status?.enabled;
|
|
319
|
+
const envKeys = platform.credentialRequirements;
|
|
320
|
+
const primaryEnvKeys = envKeys.filter((envKey) => envKey.key !== "SLACK_BOT_TOKEN");
|
|
321
|
+
const legacyEnvKeys = envKeys.filter((envKey) => envKey.key === "SLACK_BOT_TOKEN");
|
|
322
|
+
const missingRequiredCredentials = hasMissingRequiredCredentials(envKeys, envStatusByKey);
|
|
323
|
+
const configuredCredentialCount = envKeys.filter((envKey) => envStatusByKey.get(envKey.key)?.configured).length;
|
|
324
|
+
const credentialSummary = envLoading
|
|
325
|
+
? "Checking saved credentials"
|
|
326
|
+
: missingRequiredCredentials
|
|
327
|
+
? "Required credentials are missing"
|
|
328
|
+
: `${configuredCredentialCount} saved`;
|
|
329
|
+
const Icon = PLATFORM_ICONS[platform.iconKey] ?? IconPlug;
|
|
330
|
+
return (_jsxs(AccordionItem, { value: platform.id, className: "border-b last:border-b-0", children: [_jsx(AccordionTrigger, { className: "gap-3 px-4 text-left hover:no-underline", children: _jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [_jsx(Icon, { className: "h-5 w-5 shrink-0 text-muted-foreground" }), _jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("h3", { className: "text-base font-semibold text-foreground", children: platform.name }), _jsx(ConnectionStatus, { configured: configured, enabled: enabled })] }), _jsx("p", { className: "mt-1 truncate text-sm text-muted-foreground", children: platform.description })] })] }) }), _jsx(AccordionContent, { className: "px-4", children: _jsxs("div", { className: "border-t", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3 py-3", children: [_jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium text-foreground", children: enabled
|
|
331
|
+
? "Messages are flowing"
|
|
332
|
+
: configured
|
|
333
|
+
? "Ready to connect"
|
|
334
|
+
: "Finish setup to connect" }), _jsx("p", { className: "mt-0.5 text-xs text-muted-foreground", children: envLoading ? (_jsx(Skeleton, { className: "h-3 w-32" })) : (credentialSummary) })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [platform.id === "telegram" && configured ? (_jsx(Button, { variant: "outline", size: "sm", onClick: () => runSetup(platform), disabled: setupPlatform === platform.id, children: setupPlatform === platform.id ? (_jsxs(_Fragment, { children: [_jsx(IconLoader2, { className: "mr-2 h-4 w-4 animate-spin" }), "Setting up..."] })) : ("Set up webhook") })) : null, !configured && !enabled ? (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { tabIndex: 0, children: _jsx(Button, { size: "sm", disabled: true, children: "Enable" }) }) }), _jsx(TooltipContent, { children: "Save the required credentials first." })] })) : (_jsx(Button, { size: "sm", onClick: () => togglePlatform(platform, enabled), disabled: togglingPlatform === platform.id, children: togglingPlatform === platform.id ? (_jsxs(_Fragment, { children: [_jsx(IconLoader2, { className: "mr-2 h-4 w-4 animate-spin" }), "Saving..."] })) : enabled ? ("Disable") : ("Enable") }))] })] }), platform.id === "slack" ? (_jsx(DisclosureSection, { title: t("messaging.managed.title"), summary: installations.length
|
|
335
|
+
? `${installations.length} connected`
|
|
336
|
+
: "No workspaces connected yet", children: _jsxs("div", { className: "space-y-3", children: [_jsxs("p", { className: "text-xs text-muted-foreground", children: [t("messaging.managed.description"), " ", t("messaging.managed.agentManifestDescription")] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(Button, { asChild: true, variant: "outline", size: "sm", children: _jsxs("a", { href: managedSlackAgentManifestUrl(), children: [_jsx(IconFileDescription, { className: "mr-2 h-4 w-4" }), t("messaging.managed.agentManifest")] }) }), missingRequiredCredentials ? (_jsxs(Button, { size: "sm", disabled: true, children: [_jsx(IconBrandSlack, { className: "mr-2 h-4 w-4" }), t("messaging.managed.addToSlack")] })) : (_jsx(Button, { asChild: true, size: "sm", children: _jsxs("a", { href: managedIntegrationOAuthUrl("slack"), children: [_jsx(IconBrandSlack, { className: "mr-2 h-4 w-4" }), t("messaging.managed.addToSlack")] }) }))] }), missingRequiredCredentials ? (_jsx("p", { className: "text-xs text-amber-700 dark:text-amber-300", children: t("messaging.managed.requiredCredentials") })) : null, installations.length ? (_jsx("div", { className: "divide-y rounded-lg bg-muted/20 px-3", children: installations.map((installation) => (_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3 py-3", children: [_jsxs("div", { children: [_jsx("div", { className: "text-sm font-medium text-foreground", children: installation.teamName ||
|
|
337
|
+
installation.enterpriseName ||
|
|
338
|
+
installation.teamId ||
|
|
339
|
+
t("messaging.managed.workspaceFallback") }), _jsx("div", { className: "mt-0.5 text-xs text-muted-foreground", children: t("messaging.managed.scopesUpdated", {
|
|
340
|
+
count: installation.scopes.length,
|
|
341
|
+
date: formatDate(installation.updatedAt, {
|
|
342
|
+
dateStyle: "medium",
|
|
343
|
+
}),
|
|
344
|
+
}) })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(StatusPill, { tone: installation.health === "healthy"
|
|
345
|
+
? "success"
|
|
346
|
+
: installation.health === "degraded" ||
|
|
347
|
+
installation.health === "revoked"
|
|
348
|
+
? "warning"
|
|
349
|
+
: "neutral", label: t(`messaging.managed.health.${installation.health}`) }), _jsx(Button, { variant: "outline", size: "sm", onClick: () => runInstallationAction(installation, "test"), disabled: installationAction ===
|
|
350
|
+
`test:${installation.id}`, children: t("messaging.managed.test") }), _jsx(Button, { variant: "ghost", size: "sm", onClick: () => runInstallationAction(installation, "disconnect"), disabled: installationAction ===
|
|
351
|
+
`disconnect:${installation.id}`, children: t("messaging.managed.disconnect") })] })] }, installation.id))) })) : (_jsx("p", { className: "text-xs text-muted-foreground", children: t("messaging.managed.empty") }))] }) })) : null, platform.id === "slack" && scopes.length ? (_jsx(DisclosureSection, { title: t("messaging.managed.channelAccessTitle"), summary: `${scopes.length} channel${scopes.length === 1 ? "" : "s"}`, children: _jsxs("div", { className: "space-y-3", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: t("messaging.managed.channelAccessDescription") }), scopes.map((scope) => {
|
|
352
|
+
const subjectId = JSON.stringify([
|
|
353
|
+
scope.platform,
|
|
354
|
+
scope.tenantId,
|
|
355
|
+
scope.conversationId,
|
|
356
|
+
]);
|
|
357
|
+
const budget = budgets.find((item) => item.subjectType === "scope" &&
|
|
358
|
+
item.subjectId === subjectId &&
|
|
359
|
+
item.period === "month");
|
|
360
|
+
return (_jsxs(Collapsible, { className: "border-b last:border-b-0", children: [_jsxs(CollapsibleTrigger, { className: "group flex w-full cursor-pointer items-center justify-between gap-3 py-3 text-left", children: [_jsxs("span", { className: "min-w-0", children: [_jsx("span", { className: "block truncate font-mono text-xs text-foreground", children: scope.conversationId }), _jsx("span", { className: "mt-0.5 block text-xs text-muted-foreground", children: t("messaging.managed.isolatedIdentity", {
|
|
361
|
+
trust: t(`messaging.managed.trust.${scope.trust}`),
|
|
362
|
+
}) })] }), _jsxs("span", { className: "flex shrink-0 items-center gap-2", children: [_jsx(StatusPill, { tone: scope.trust === "trusted"
|
|
363
|
+
? "success"
|
|
364
|
+
: "warning", label: t(`messaging.managed.trust.${scope.trust}`) }), _jsx(IconChevronRight, { className: "h-4 w-4 text-muted-foreground transition-transform group-data-[state=open]:rotate-90" })] })] }), _jsxs(CollapsibleContent, { className: "pb-3", children: [_jsx("div", { className: "grid gap-2 sm:grid-cols-3", children: [
|
|
365
|
+
[
|
|
366
|
+
"requireMention",
|
|
367
|
+
t("messaging.managed.requireMention"),
|
|
368
|
+
],
|
|
369
|
+
[
|
|
370
|
+
"allowGuests",
|
|
371
|
+
t("messaging.managed.allowGuests"),
|
|
372
|
+
],
|
|
373
|
+
[
|
|
374
|
+
"allowExternalShared",
|
|
375
|
+
t("messaging.managed.allowSlackConnect"),
|
|
376
|
+
],
|
|
377
|
+
].map(([key, label]) => (_jsxs("label", { className: "flex items-center justify-between gap-2 rounded-md border px-2.5 py-2 text-xs", children: [label, _jsx(Switch, { checked: scope.policy[key], disabled: savingScope === scope.id, onCheckedChange: (checked) => updateScopePolicy(scope, {
|
|
378
|
+
[key]: checked,
|
|
379
|
+
}) })] }, key))) }), _jsxs("div", { className: "flex flex-wrap items-end gap-2", children: [_jsxs("div", { className: "min-w-40 flex-1 space-y-1", children: [_jsx("label", { className: "text-xs font-medium text-foreground", children: t("messaging.managed.monthlyBudgetUsd") }), _jsx(Input, { inputMode: "decimal", value: scopeBudget[scope.id] ??
|
|
380
|
+
(budget
|
|
381
|
+
? String(budget.limitMicros / 1_000_000)
|
|
382
|
+
: ""), onChange: (event) => setScopeBudget((current) => ({
|
|
383
|
+
...current,
|
|
384
|
+
[scope.id]: event.target.value,
|
|
385
|
+
})), placeholder: "25" })] }), _jsx(Button, { variant: "outline", onClick: () => saveScopeBudget(scope), disabled: savingScope === `budget:${scope.id}`, children: t("messaging.managed.saveBudget") })] })] })] }, scope.id));
|
|
386
|
+
})] }) })) : null, _jsx(DisclosureSection, { title: "Setup steps", summary: `${platform.setup.steps.length} step${platform.setup.steps.length === 1 ? "" : "s"}`, children: _jsx("ol", { className: "space-y-2 rounded-lg bg-muted/20 px-3 py-3 text-sm text-muted-foreground", children: platform.setup.steps.map((step, index) => (_jsxs("li", { className: "flex gap-2", children: [_jsxs("span", { className: "text-muted-foreground/60", children: [index + 1, "."] }), _jsx("span", { children: step })] }, step))) }) }), _jsxs(DisclosureSection, { title: "Credentials", summary: credentialSummary, children: [_jsx("div", { className: "space-y-3", children: primaryEnvKeys.map((envKey) => {
|
|
387
|
+
const envStatus = envStatusByKey.get(envKey.key);
|
|
388
|
+
const isConfigured = !!envStatus?.configured;
|
|
389
|
+
const helpText = envKey.helpText ?? envStatus?.helpText;
|
|
390
|
+
const label = envKey.label || envStatus?.label || envKey.key;
|
|
391
|
+
// Email agent address is not a secret — show it plainly
|
|
392
|
+
// so users can copy and share it.
|
|
393
|
+
const isPublicValue = envKey.key === "EMAIL_AGENT_ADDRESS";
|
|
394
|
+
return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsxs("label", { className: "text-xs font-medium text-foreground", children: [label, !envKey.required ? (_jsx("span", { className: "ml-1 text-muted-foreground", children: "(optional)" })) : null] }), helpText ? (_jsx(HelpTooltip, { content: helpText })) : null] }), isConfigured ? (_jsx(StatusPill, { tone: "success", label: "Saved" })) : (_jsx(StatusPill, { tone: "neutral", label: envKey.required ? "Missing" : "Not set" }))] }), isConfigured && isPublicValue ? (_jsx(PublicValueReveal, { envKey: envKey.key })) : !isConfigured ? (_jsx(Input, { type: isPublicValue ? "text" : "password", value: envValues[envKey.key] || "", onChange: (event) => setEnvValues((current) => ({
|
|
395
|
+
...current,
|
|
396
|
+
[envKey.key]: event.target.value,
|
|
397
|
+
})), placeholder: isPublicValue
|
|
398
|
+
? "agent@yourcompany.com"
|
|
399
|
+
: `Enter ${label}`, autoComplete: "off" })) : null] }, envKey.key));
|
|
400
|
+
}) }), legacyEnvKeys.length ? (_jsxs(Collapsible, { children: [_jsxs(CollapsibleTrigger, { className: "group flex w-full cursor-pointer items-center gap-1.5 text-xs font-medium text-muted-foreground hover:text-foreground", children: [_jsx(IconChevronRight, { className: "h-3.5 w-3.5 transition-transform group-data-[state=open]:rotate-90" }), _jsx("span", { children: legacyEnvKeys[0]?.label })] }), _jsx(CollapsibleContent, { children: _jsxs("div", { className: "mt-2 space-y-3 rounded-xl border border-amber-500/30 bg-amber-500/5 p-4", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: legacyEnvKeys[0]?.helpText }), legacyEnvKeys.map((envKey) => {
|
|
401
|
+
const envStatus = envStatusByKey.get(envKey.key);
|
|
402
|
+
const isConfigured = !!envStatus?.configured;
|
|
403
|
+
const helpText = envKey.helpText ?? envStatus?.helpText;
|
|
404
|
+
const label = envKey.label || envStatus?.label || envKey.key;
|
|
405
|
+
return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("label", { className: "text-xs font-medium text-foreground", children: label }), helpText ? (_jsx(HelpTooltip, { content: helpText })) : null] }), _jsx(StatusPill, { tone: isConfigured ? "success" : "neutral", label: isConfigured ? "Saved" : "Not set" })] }), !isConfigured ? (_jsx(Input, { type: "password", value: envValues[envKey.key] || "", onChange: (event) => setEnvValues((current) => ({
|
|
406
|
+
...current,
|
|
407
|
+
[envKey.key]: event.target.value,
|
|
408
|
+
})), placeholder: `Enter ${label}`, autoComplete: "off" })) : null] }, envKey.key));
|
|
409
|
+
}), legacyEnvKeys.some((envKey) => !envStatusByKey.get(envKey.key)?.configured) ? (_jsx(Button, { variant: "outline", onClick: () => saveEnvKeys(platform, legacyEnvKeys.map((envKey) => envKey.key)), disabled: savingKeysFor === platform.id, children: savingKeysFor === platform.id
|
|
410
|
+
? "Saving..."
|
|
411
|
+
: "Save credentials" })) : null] }) })] })) : null, missingRequiredCredentials ? (_jsx(Button, { variant: "outline", onClick: () => saveEnvKeys(platform, envKeys.map((k) => k.key)), disabled: savingKeysFor === platform.id, children: savingKeysFor === platform.id ? (_jsxs(_Fragment, { children: [_jsx(IconLoader2, { className: "mr-2 h-4 w-4 animate-spin" }), "Saving..."] })) : ("Save credentials") })) : null] }), status?.webhookUrl ? (_jsx(DisclosureSection, { title: "Webhook URL", summary: "Copy the endpoint for this channel", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("code", { className: "flex-1 truncate rounded-md bg-muted/30 px-3 py-2 text-xs text-foreground", children: status.webhookUrl }), _jsx(Button, { variant: "outline", size: "icon", onClick: () => copyWebhook(status.webhookUrl), "aria-label": `Copy ${platform.name} webhook URL`, children: copiedWebhook === status.webhookUrl ? (_jsx(IconCheck, { className: "h-4 w-4" })) : (_jsx(IconCopy, { className: "h-4 w-4" })) })] }) })) : null, _jsx(DisclosureSection, { title: "Resources", summary: "Documentation and external links", children: _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Button, { asChild: true, variant: "ghost", size: "sm", className: "px-0 text-xs text-muted-foreground hover:bg-transparent hover:text-foreground", children: _jsxs("a", { href: platform.documentation.href, target: "_blank", rel: "noreferrer", children: ["Docs", _jsx(IconExternalLink, { className: "ml-1 h-3 w-3" })] }) }), platform.documentation.externalHref ? (_jsx(Button, { asChild: true, variant: "ghost", size: "sm", className: "px-0 text-xs text-muted-foreground hover:bg-transparent hover:text-foreground", children: _jsxs("a", { href: platform.documentation.externalHref, target: "_blank", rel: "noreferrer", children: [platform.documentation.externalLabel ?? "Open", _jsx(IconExternalLink, { className: "ml-1 h-3 w-3" })] }) })) : null] }) })] }) })] }, platform.id));
|
|
412
|
+
}) }), loading ? (_jsxs("div", { className: "space-y-3 rounded-2xl border border-dashed px-4 py-6", children: [_jsx(Skeleton, { className: "h-4 w-40" }), _jsx(Skeleton, { className: "h-3 w-2/3 max-w-md" }), _jsx(Skeleton, { className: "h-9 w-full max-w-sm" })] })) : null] }));
|
|
413
|
+
}
|
|
414
|
+
//# sourceMappingURL=messaging-setup-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messaging-setup-panel.js","sourceRoot":"","sources":["../../src/components/messaging-setup-panel.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useFormatters, useT } from \"@agent-native/core/client/i18n\";\nimport {\n disconnectManagedIntegrationInstallation,\n listManagedIntegrationBudgets,\n listManagedIntegrationInstallations,\n listManagedIntegrationScopes,\n listIntegrationEnvStatuses,\n listIntegrationStatuses,\n managedIntegrationOAuthUrl,\n managedSlackAgentManifestUrl,\n saveIntegrationEnvVars,\n saveManagedIntegrationBudget,\n saveManagedIntegrationScope,\n setIntegrationEnabled,\n setupIntegration,\n testManagedIntegrationInstallation,\n type ClientIntegrationInstallation,\n type ClientIntegrationScope,\n type ClientIntegrationUsageBudget,\n type ClientIntegrationStatus,\n type IntegrationEnvStatus,\n} from \"@agent-native/core/client/integrations\";\nimport {\n listBuiltInChannelIntegrations,\n type IntegrationCatalogEntry,\n type IntegrationCredentialRequirement,\n} from \"@agent-native/core/integrations\";\nimport {\n IconBrandDiscord,\n IconBrandSlack,\n IconBrandTelegram,\n IconBrandTeams,\n IconBrandWhatsapp,\n IconCheck,\n IconChevronRight,\n IconCopy,\n IconExternalLink,\n IconFileDescription,\n IconInfoCircle,\n IconLoader2,\n IconMail,\n IconPlug,\n} from \"@tabler/icons-react\";\nimport { type ReactNode, useEffect, useMemo, useState } from \"react\";\nimport { toast } from \"sonner\";\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"./ui/accordion\";\nimport { Button } from \"./ui/button\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"./ui/collapsible\";\nimport { Input } from \"./ui/input\";\nimport { Skeleton } from \"./ui/skeleton\";\nimport { Switch } from \"./ui/switch\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"./ui/tooltip\";\n\nconst CHANNELS = listBuiltInChannelIntegrations();\n\nconst PLATFORM_ICONS: Partial<Record<string, typeof IconBrandSlack>> = {\n slack: IconBrandSlack,\n \"microsoft-teams\": IconBrandTeams,\n discord: IconBrandDiscord,\n telegram: IconBrandTelegram,\n whatsapp: IconBrandWhatsapp,\n email: IconMail,\n};\n\nfunction hasMissingRequiredCredentials(\n credentials: readonly IntegrationCredentialRequirement[],\n envStatusByKey: Map<string, IntegrationEnvStatus>,\n) {\n const alternatives = new Map<\n string,\n readonly IntegrationCredentialRequirement[]\n >();\n\n for (const credential of credentials) {\n if (!credential.required) continue;\n if (!credential.alternativeGroup) {\n if (!envStatusByKey.get(credential.key)?.configured) return true;\n continue;\n }\n const group = alternatives.get(credential.alternativeGroup) ?? [];\n alternatives.set(credential.alternativeGroup, [...group, credential]);\n }\n\n return [...alternatives.values()].some((group) =>\n group.every(\n (credential) => !envStatusByKey.get(credential.key)?.configured,\n ),\n );\n}\n\nfunction HelpTooltip({ content }: { content: string }) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className=\"text-muted-foreground/60 hover:text-foreground cursor-pointer\"\n >\n <IconInfoCircle className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\" className=\"max-w-64 text-xs leading-relaxed\">\n {content}\n </TooltipContent>\n </Tooltip>\n );\n}\n\nfunction StatusPill({\n tone,\n label,\n}: {\n tone: \"neutral\" | \"success\" | \"warning\";\n label: string;\n}) {\n const toneClass =\n tone === \"success\"\n ? \"bg-emerald-500/10 text-emerald-700 dark:text-emerald-300\"\n : tone === \"warning\"\n ? \"bg-amber-500/10 text-amber-700 dark:text-amber-300\"\n : \"bg-muted text-muted-foreground\";\n\n return (\n <span\n className={`inline-flex items-center rounded-full px-2 py-1 text-[11px] font-medium ${toneClass}`}\n >\n {label}\n </span>\n );\n}\n\nfunction DisclosureSection({\n title,\n summary,\n children,\n defaultOpen = false,\n}: {\n title: string;\n summary?: string;\n children: ReactNode;\n defaultOpen?: boolean;\n}) {\n return (\n <Collapsible defaultOpen={defaultOpen} className=\"border-t\">\n <CollapsibleTrigger className=\"group flex w-full cursor-pointer items-center justify-between gap-3 py-3 text-left\">\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium text-foreground\">\n {title}\n </span>\n {summary ? (\n <span className=\"mt-0.5 block truncate text-xs text-muted-foreground\">\n {summary}\n </span>\n ) : null}\n </span>\n <IconChevronRight className=\"h-4 w-4 shrink-0 text-muted-foreground transition-transform group-data-[state=open]:rotate-90\" />\n </CollapsibleTrigger>\n <CollapsibleContent className=\"pb-3\">{children}</CollapsibleContent>\n </Collapsible>\n );\n}\n\n/** Render a non-secret env value (e.g. EMAIL_AGENT_ADDRESS) as a copyable\n * text block. We can't read the actual value from the backend (env-status\n * only reports `configured: true|false`), so we offer a one-click reveal\n * that hits a server endpoint, falling back to \"saved\" if the value is\n * not exposed. For now we just render a \"Saved — re-enter to change\"\n * placeholder; a future endpoint can return the actual value. */\nfunction PublicValueReveal({ envKey: _envKey }: { envKey: string }) {\n return (\n <div className=\"rounded-md border bg-muted/20 px-3 py-2 text-xs text-muted-foreground\">\n Saved. Re-enter below to change.\n </div>\n );\n}\n\nfunction ConnectionStatus({\n configured,\n enabled,\n}: {\n configured: boolean;\n enabled: boolean;\n}) {\n if (enabled) {\n return <StatusPill tone=\"success\" label=\"Connected\" />;\n }\n if (configured) {\n return <StatusPill tone=\"warning\" label=\"Configured, not enabled\" />;\n }\n return <StatusPill tone=\"neutral\" label=\"Not configured\" />;\n}\n\nexport function MessagingSetupPanel() {\n const t = useT();\n const { formatDate } = useFormatters();\n const [statuses, setStatuses] = useState<ClientIntegrationStatus[]>([]);\n const [loading, setLoading] = useState(true);\n const [envStatuses, setEnvStatuses] = useState<IntegrationEnvStatus[]>([]);\n const [envLoading, setEnvLoading] = useState(true);\n const [envValues, setEnvValues] = useState<Record<string, string>>({});\n const [savingKeysFor, setSavingKeysFor] = useState<string | null>(null);\n const [togglingPlatform, setTogglingPlatform] = useState<string | null>(null);\n const [setupPlatform, setSetupPlatform] = useState<string | null>(null);\n const [copiedWebhook, setCopiedWebhook] = useState<string | null>(null);\n const [installations, setInstallations] = useState<\n ClientIntegrationInstallation[]\n >([]);\n const [installationAction, setInstallationAction] = useState<string | null>(\n null,\n );\n const [scopes, setScopes] = useState<ClientIntegrationScope[]>([]);\n const [budgets, setBudgets] = useState<ClientIntegrationUsageBudget[]>([]);\n const [scopeBudget, setScopeBudget] = useState<Record<string, string>>({});\n const [savingScope, setSavingScope] = useState<string | null>(null);\n\n const refreshStatuses = async () => {\n setLoading(true);\n try {\n setStatuses(await listIntegrationStatuses());\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n let active = true;\n listIntegrationStatuses()\n .then((rows) => {\n if (active) {\n setStatuses(rows);\n setLoading(false);\n }\n })\n .catch(() => {\n if (active) setLoading(false);\n });\n return () => {\n active = false;\n };\n }, []);\n\n useEffect(() => {\n let active = true;\n listManagedIntegrationInstallations(\"slack\")\n .then((rows) => {\n if (active) setInstallations(rows);\n })\n .catch(() => {});\n listManagedIntegrationScopes(\"slack\")\n .then((rows) => {\n if (active) setScopes(rows);\n })\n .catch(() => {});\n listManagedIntegrationBudgets()\n .then((rows) => {\n if (active) setBudgets(rows);\n })\n .catch(() => {});\n return () => {\n active = false;\n };\n }, []);\n\n useEffect(() => {\n let active = true;\n listIntegrationEnvStatuses()\n .then((rows) => {\n if (active) {\n setEnvStatuses(rows);\n setEnvLoading(false);\n }\n })\n .catch(() => {\n if (active) setEnvLoading(false);\n });\n return () => {\n active = false;\n };\n }, []);\n\n const envStatusByKey = useMemo(\n () => new Map(envStatuses.map((status) => [status.key, status])),\n [envStatuses],\n );\n const statusByPlatform = useMemo(\n () => new Map(statuses.map((status) => [status.platform, status])),\n [statuses],\n );\n\n const refreshEnvStatus = async () => {\n setEnvLoading(true);\n try {\n setEnvStatuses(await listIntegrationEnvStatuses());\n } finally {\n setEnvLoading(false);\n }\n };\n\n const saveEnvKeys = async (\n platform: IntegrationCatalogEntry,\n keys: string[],\n ) => {\n const vars = keys\n .map((key) => ({ key, value: envValues[key]?.trim() || \"\" }))\n .filter((item) => item.value);\n\n if (vars.length === 0) {\n toast.error(\"Add the required credentials first.\");\n return;\n }\n\n setSavingKeysFor(platform.id);\n try {\n await saveIntegrationEnvVars(vars);\n\n toast.success(`${platform.name} credentials saved`);\n setEnvValues((current) => {\n const next = { ...current };\n for (const key of keys) delete next[key];\n return next;\n });\n await refreshEnvStatus();\n await refreshStatuses();\n } catch (error) {\n toast.error(\n error instanceof Error ? error.message : \"Failed to save credentials\",\n );\n } finally {\n setSavingKeysFor(null);\n }\n };\n\n const togglePlatform = async (\n platform: IntegrationCatalogEntry,\n enabled: boolean,\n ) => {\n setTogglingPlatform(platform.id);\n try {\n await setIntegrationEnabled(platform.id, !enabled);\n toast.success(\n enabled\n ? `${platform.name} disconnected`\n : `${platform.name} connected`,\n );\n await refreshStatuses();\n } catch (error) {\n toast.error(\n error instanceof Error ? error.message : \"Failed to update integration\",\n );\n } finally {\n setTogglingPlatform(null);\n }\n };\n\n const runSetup = async (platform: IntegrationCatalogEntry) => {\n setSetupPlatform(platform.id);\n try {\n await setupIntegration(platform.id);\n toast.success(\n platform.id === \"telegram\"\n ? \"Telegram webhook registered\"\n : `${platform.name} setup complete`,\n );\n await refreshStatuses();\n } catch (error) {\n toast.error(\n error instanceof Error\n ? error.message\n : `Failed to set up ${platform.name}`,\n );\n } finally {\n setSetupPlatform(null);\n }\n };\n\n const copyWebhook = async (webhookUrl: string) => {\n await navigator.clipboard.writeText(webhookUrl);\n setCopiedWebhook(webhookUrl);\n toast.success(\"Webhook URL copied\");\n setTimeout(() => setCopiedWebhook(null), 1500);\n };\n\n const runInstallationAction = async (\n installation: ClientIntegrationInstallation,\n action: \"test\" | \"disconnect\",\n ) => {\n setInstallationAction(`${action}:${installation.id}`);\n try {\n await (action === \"test\"\n ? testManagedIntegrationInstallation(installation.id)\n : disconnectManagedIntegrationInstallation(installation.id));\n setInstallations(await listManagedIntegrationInstallations(\"slack\"));\n toast.success(\n action === \"test\"\n ? t(\"messaging.managed.connectionChecked\")\n : t(\"messaging.managed.workspaceDisconnected\"),\n );\n } catch (error) {\n toast.error(\n error instanceof Error\n ? error.message\n : t(\"messaging.managed.actionFailed\"),\n );\n } finally {\n setInstallationAction(null);\n }\n };\n\n const updateScopePolicy = async (\n scope: ClientIntegrationScope,\n policy: Partial<ClientIntegrationScope[\"policy\"]>,\n ) => {\n setSavingScope(scope.id);\n try {\n await saveManagedIntegrationScope({\n platform: scope.platform,\n tenantId: scope.tenantId,\n conversationId: scope.conversationId,\n conversationType: scope.conversationType,\n trust: scope.trust,\n orgId: scope.orgId,\n serviceOwnerEmail: scope.serviceOwnerEmail,\n defaultModel: scope.defaultModel,\n policy: { ...scope.policy, ...policy },\n });\n setScopes(await listManagedIntegrationScopes(\"slack\"));\n toast.success(t(\"messaging.managed.channelPolicyUpdated\"));\n } catch (error) {\n toast.error(\n error instanceof Error\n ? error.message\n : t(\"messaging.managed.policyUpdateFailed\"),\n );\n } finally {\n setSavingScope(null);\n }\n };\n\n const saveScopeBudget = async (scope: ClientIntegrationScope) => {\n const dollars = Number(scopeBudget[scope.id]);\n if (!Number.isFinite(dollars) || dollars <= 0) {\n toast.error(t(\"messaging.managed.positiveMonthlyBudget\"));\n return;\n }\n setSavingScope(`budget:${scope.id}`);\n try {\n await saveManagedIntegrationBudget({\n subject: {\n type: \"scope\",\n scope: {\n platform: scope.platform,\n tenantId: scope.tenantId,\n conversationId: scope.conversationId,\n },\n },\n period: \"month\",\n limitMicros: Math.round(dollars * 1_000_000),\n });\n setBudgets(await listManagedIntegrationBudgets());\n toast.success(t(\"messaging.managed.channelBudgetSaved\"));\n } catch (error) {\n toast.error(\n error instanceof Error\n ? error.message\n : t(\"messaging.managed.budgetSaveFailed\"),\n );\n } finally {\n setSavingScope(null);\n }\n };\n\n return (\n <div className=\"space-y-4\">\n <Accordion\n type=\"single\"\n collapsible\n className=\"overflow-hidden rounded-2xl bg-card\"\n >\n {CHANNELS.map((platform) => {\n const status = statusByPlatform.get(platform.id);\n const configured =\n !!status?.configured ||\n (platform.id === \"slack\" &&\n installations.some(\n (installation) => installation.status === \"connected\",\n ));\n const enabled = !!status?.enabled;\n const envKeys = platform.credentialRequirements;\n const primaryEnvKeys = envKeys.filter(\n (envKey) => envKey.key !== \"SLACK_BOT_TOKEN\",\n );\n const legacyEnvKeys = envKeys.filter(\n (envKey) => envKey.key === \"SLACK_BOT_TOKEN\",\n );\n const missingRequiredCredentials = hasMissingRequiredCredentials(\n envKeys,\n envStatusByKey,\n );\n const configuredCredentialCount = envKeys.filter(\n (envKey) => envStatusByKey.get(envKey.key)?.configured,\n ).length;\n const credentialSummary = envLoading\n ? \"Checking saved credentials\"\n : missingRequiredCredentials\n ? \"Required credentials are missing\"\n : `${configuredCredentialCount} saved`;\n const Icon = PLATFORM_ICONS[platform.iconKey] ?? IconPlug;\n\n return (\n <AccordionItem\n key={platform.id}\n value={platform.id}\n className=\"border-b last:border-b-0\"\n >\n <AccordionTrigger className=\"gap-3 px-4 text-left hover:no-underline\">\n <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n <Icon className=\"h-5 w-5 shrink-0 text-muted-foreground\" />\n <div className=\"min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <h3 className=\"text-base font-semibold text-foreground\">\n {platform.name}\n </h3>\n <ConnectionStatus\n configured={configured}\n enabled={enabled}\n />\n </div>\n <p className=\"mt-1 truncate text-sm text-muted-foreground\">\n {platform.description}\n </p>\n </div>\n </div>\n </AccordionTrigger>\n\n <AccordionContent className=\"px-4\">\n <div className=\"border-t\">\n <div className=\"flex flex-wrap items-center justify-between gap-3 py-3\">\n <div>\n <p className=\"text-sm font-medium text-foreground\">\n {enabled\n ? \"Messages are flowing\"\n : configured\n ? \"Ready to connect\"\n : \"Finish setup to connect\"}\n </p>\n <p className=\"mt-0.5 text-xs text-muted-foreground\">\n {envLoading ? (\n <Skeleton className=\"h-3 w-32\" />\n ) : (\n credentialSummary\n )}\n </p>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n {platform.id === \"telegram\" && configured ? (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => runSetup(platform)}\n disabled={setupPlatform === platform.id}\n >\n {setupPlatform === platform.id ? (\n <>\n <IconLoader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Setting up...\n </>\n ) : (\n \"Set up webhook\"\n )}\n </Button>\n ) : null}\n {!configured && !enabled ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <span tabIndex={0}>\n <Button size=\"sm\" disabled>\n Enable\n </Button>\n </span>\n </TooltipTrigger>\n <TooltipContent>\n Save the required credentials first.\n </TooltipContent>\n </Tooltip>\n ) : (\n <Button\n size=\"sm\"\n onClick={() => togglePlatform(platform, enabled)}\n disabled={togglingPlatform === platform.id}\n >\n {togglingPlatform === platform.id ? (\n <>\n <IconLoader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Saving...\n </>\n ) : enabled ? (\n \"Disable\"\n ) : (\n \"Enable\"\n )}\n </Button>\n )}\n </div>\n </div>\n\n {platform.id === \"slack\" ? (\n <DisclosureSection\n title={t(\"messaging.managed.title\")}\n summary={\n installations.length\n ? `${installations.length} connected`\n : \"No workspaces connected yet\"\n }\n >\n <div className=\"space-y-3\">\n <p className=\"text-xs text-muted-foreground\">\n {t(\"messaging.managed.description\")}{\" \"}\n {t(\"messaging.managed.agentManifestDescription\")}\n </p>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button asChild variant=\"outline\" size=\"sm\">\n <a href={managedSlackAgentManifestUrl()}>\n <IconFileDescription className=\"mr-2 h-4 w-4\" />\n {t(\"messaging.managed.agentManifest\")}\n </a>\n </Button>\n {missingRequiredCredentials ? (\n <Button size=\"sm\" disabled>\n <IconBrandSlack className=\"mr-2 h-4 w-4\" />\n {t(\"messaging.managed.addToSlack\")}\n </Button>\n ) : (\n <Button asChild size=\"sm\">\n <a href={managedIntegrationOAuthUrl(\"slack\")}>\n <IconBrandSlack className=\"mr-2 h-4 w-4\" />\n {t(\"messaging.managed.addToSlack\")}\n </a>\n </Button>\n )}\n </div>\n {missingRequiredCredentials ? (\n <p className=\"text-xs text-amber-700 dark:text-amber-300\">\n {t(\"messaging.managed.requiredCredentials\")}\n </p>\n ) : null}\n {installations.length ? (\n <div className=\"divide-y rounded-lg bg-muted/20 px-3\">\n {installations.map((installation) => (\n <div\n key={installation.id}\n className=\"flex flex-wrap items-center justify-between gap-3 py-3\"\n >\n <div>\n <div className=\"text-sm font-medium text-foreground\">\n {installation.teamName ||\n installation.enterpriseName ||\n installation.teamId ||\n t(\"messaging.managed.workspaceFallback\")}\n </div>\n <div className=\"mt-0.5 text-xs text-muted-foreground\">\n {t(\"messaging.managed.scopesUpdated\", {\n count: installation.scopes.length,\n date: formatDate(installation.updatedAt, {\n dateStyle: \"medium\",\n }),\n })}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <StatusPill\n tone={\n installation.health === \"healthy\"\n ? \"success\"\n : installation.health === \"degraded\" ||\n installation.health === \"revoked\"\n ? \"warning\"\n : \"neutral\"\n }\n label={t(\n `messaging.managed.health.${installation.health}`,\n )}\n />\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n runInstallationAction(\n installation,\n \"test\",\n )\n }\n disabled={\n installationAction ===\n `test:${installation.id}`\n }\n >\n {t(\"messaging.managed.test\")}\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() =>\n runInstallationAction(\n installation,\n \"disconnect\",\n )\n }\n disabled={\n installationAction ===\n `disconnect:${installation.id}`\n }\n >\n {t(\"messaging.managed.disconnect\")}\n </Button>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-xs text-muted-foreground\">\n {t(\"messaging.managed.empty\")}\n </p>\n )}\n </div>\n </DisclosureSection>\n ) : null}\n\n {platform.id === \"slack\" && scopes.length ? (\n <DisclosureSection\n title={t(\"messaging.managed.channelAccessTitle\")}\n summary={`${scopes.length} channel${scopes.length === 1 ? \"\" : \"s\"}`}\n >\n <div className=\"space-y-3\">\n <p className=\"text-xs text-muted-foreground\">\n {t(\"messaging.managed.channelAccessDescription\")}\n </p>\n {scopes.map((scope) => {\n const subjectId = JSON.stringify([\n scope.platform,\n scope.tenantId,\n scope.conversationId,\n ]);\n const budget = budgets.find(\n (item) =>\n item.subjectType === \"scope\" &&\n item.subjectId === subjectId &&\n item.period === \"month\",\n );\n return (\n <Collapsible\n key={scope.id}\n className=\"border-b last:border-b-0\"\n >\n <CollapsibleTrigger className=\"group flex w-full cursor-pointer items-center justify-between gap-3 py-3 text-left\">\n <span className=\"min-w-0\">\n <span className=\"block truncate font-mono text-xs text-foreground\">\n {scope.conversationId}\n </span>\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">\n {t(\"messaging.managed.isolatedIdentity\", {\n trust: t(\n `messaging.managed.trust.${scope.trust}`,\n ),\n })}\n </span>\n </span>\n <span className=\"flex shrink-0 items-center gap-2\">\n <StatusPill\n tone={\n scope.trust === \"trusted\"\n ? \"success\"\n : \"warning\"\n }\n label={t(\n `messaging.managed.trust.${scope.trust}`,\n )}\n />\n <IconChevronRight className=\"h-4 w-4 text-muted-foreground transition-transform group-data-[state=open]:rotate-90\" />\n </span>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"pb-3\">\n <div className=\"grid gap-2 sm:grid-cols-3\">\n {[\n [\n \"requireMention\",\n t(\"messaging.managed.requireMention\"),\n ],\n [\n \"allowGuests\",\n t(\"messaging.managed.allowGuests\"),\n ],\n [\n \"allowExternalShared\",\n t(\"messaging.managed.allowSlackConnect\"),\n ],\n ].map(([key, label]) => (\n <label\n key={key}\n className=\"flex items-center justify-between gap-2 rounded-md border px-2.5 py-2 text-xs\"\n >\n {label}\n <Switch\n checked={\n scope.policy[\n key as keyof ClientIntegrationScope[\"policy\"]\n ]\n }\n disabled={savingScope === scope.id}\n onCheckedChange={(checked) =>\n updateScopePolicy(scope, {\n [key]: checked,\n })\n }\n />\n </label>\n ))}\n </div>\n <div className=\"flex flex-wrap items-end gap-2\">\n <div className=\"min-w-40 flex-1 space-y-1\">\n <label className=\"text-xs font-medium text-foreground\">\n {t(\"messaging.managed.monthlyBudgetUsd\")}\n </label>\n <Input\n inputMode=\"decimal\"\n value={\n scopeBudget[scope.id] ??\n (budget\n ? String(\n budget.limitMicros / 1_000_000,\n )\n : \"\")\n }\n onChange={(event) =>\n setScopeBudget((current) => ({\n ...current,\n [scope.id]: event.target.value,\n }))\n }\n placeholder=\"25\"\n />\n </div>\n <Button\n variant=\"outline\"\n onClick={() => saveScopeBudget(scope)}\n disabled={\n savingScope === `budget:${scope.id}`\n }\n >\n {t(\"messaging.managed.saveBudget\")}\n </Button>\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n })}\n </div>\n </DisclosureSection>\n ) : null}\n\n <DisclosureSection\n title=\"Setup steps\"\n summary={`${platform.setup.steps.length} step${platform.setup.steps.length === 1 ? \"\" : \"s\"}`}\n >\n <ol className=\"space-y-2 rounded-lg bg-muted/20 px-3 py-3 text-sm text-muted-foreground\">\n {platform.setup.steps.map((step, index) => (\n <li key={step} className=\"flex gap-2\">\n <span className=\"text-muted-foreground/60\">\n {index + 1}.\n </span>\n <span>{step}</span>\n </li>\n ))}\n </ol>\n </DisclosureSection>\n\n <DisclosureSection\n title=\"Credentials\"\n summary={credentialSummary}\n >\n <div className=\"space-y-3\">\n {primaryEnvKeys.map((envKey) => {\n const envStatus = envStatusByKey.get(envKey.key);\n const isConfigured = !!envStatus?.configured;\n const helpText = envKey.helpText ?? envStatus?.helpText;\n const label =\n envKey.label || envStatus?.label || envKey.key;\n // Email agent address is not a secret — show it plainly\n // so users can copy and share it.\n const isPublicValue =\n envKey.key === \"EMAIL_AGENT_ADDRESS\";\n return (\n <div key={envKey.key} className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-1.5\">\n <label className=\"text-xs font-medium text-foreground\">\n {label}\n {!envKey.required ? (\n <span className=\"ml-1 text-muted-foreground\">\n (optional)\n </span>\n ) : null}\n </label>\n {helpText ? (\n <HelpTooltip content={helpText} />\n ) : null}\n </div>\n {isConfigured ? (\n <StatusPill tone=\"success\" label=\"Saved\" />\n ) : (\n <StatusPill\n tone=\"neutral\"\n label={\n envKey.required ? \"Missing\" : \"Not set\"\n }\n />\n )}\n </div>\n {isConfigured && isPublicValue ? (\n <PublicValueReveal envKey={envKey.key} />\n ) : !isConfigured ? (\n <Input\n type={isPublicValue ? \"text\" : \"password\"}\n value={envValues[envKey.key] || \"\"}\n onChange={(event) =>\n setEnvValues((current) => ({\n ...current,\n [envKey.key]: event.target.value,\n }))\n }\n placeholder={\n isPublicValue\n ? \"agent@yourcompany.com\"\n : `Enter ${label}`\n }\n autoComplete=\"off\"\n />\n ) : null}\n </div>\n );\n })}\n </div>\n {legacyEnvKeys.length ? (\n <Collapsible>\n <CollapsibleTrigger className=\"group flex w-full cursor-pointer items-center gap-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\">\n <IconChevronRight className=\"h-3.5 w-3.5 transition-transform group-data-[state=open]:rotate-90\" />\n <span>{legacyEnvKeys[0]?.label}</span>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"mt-2 space-y-3 rounded-xl border border-amber-500/30 bg-amber-500/5 p-4\">\n <p className=\"text-xs text-muted-foreground\">\n {legacyEnvKeys[0]?.helpText}\n </p>\n {legacyEnvKeys.map((envKey) => {\n const envStatus = envStatusByKey.get(envKey.key);\n const isConfigured = !!envStatus?.configured;\n const helpText =\n envKey.helpText ?? envStatus?.helpText;\n const label =\n envKey.label || envStatus?.label || envKey.key;\n return (\n <div key={envKey.key} className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-1.5\">\n <label className=\"text-xs font-medium text-foreground\">\n {label}\n </label>\n {helpText ? (\n <HelpTooltip content={helpText} />\n ) : null}\n </div>\n <StatusPill\n tone={\n isConfigured ? \"success\" : \"neutral\"\n }\n label={isConfigured ? \"Saved\" : \"Not set\"}\n />\n </div>\n {!isConfigured ? (\n <Input\n type=\"password\"\n value={envValues[envKey.key] || \"\"}\n onChange={(event) =>\n setEnvValues((current) => ({\n ...current,\n [envKey.key]: event.target.value,\n }))\n }\n placeholder={`Enter ${label}`}\n autoComplete=\"off\"\n />\n ) : null}\n </div>\n );\n })}\n {legacyEnvKeys.some(\n (envKey) =>\n !envStatusByKey.get(envKey.key)?.configured,\n ) ? (\n <Button\n variant=\"outline\"\n onClick={() =>\n saveEnvKeys(\n platform,\n legacyEnvKeys.map((envKey) => envKey.key),\n )\n }\n disabled={savingKeysFor === platform.id}\n >\n {savingKeysFor === platform.id\n ? \"Saving...\"\n : \"Save credentials\"}\n </Button>\n ) : null}\n </div>\n </CollapsibleContent>\n </Collapsible>\n ) : null}\n {missingRequiredCredentials ? (\n <Button\n variant=\"outline\"\n onClick={() =>\n saveEnvKeys(\n platform,\n envKeys.map((k) => k.key),\n )\n }\n disabled={savingKeysFor === platform.id}\n >\n {savingKeysFor === platform.id ? (\n <>\n <IconLoader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Saving...\n </>\n ) : (\n \"Save credentials\"\n )}\n </Button>\n ) : null}\n </DisclosureSection>\n\n {status?.webhookUrl ? (\n <DisclosureSection\n title=\"Webhook URL\"\n summary=\"Copy the endpoint for this channel\"\n >\n <div className=\"flex items-center gap-2\">\n <code className=\"flex-1 truncate rounded-md bg-muted/30 px-3 py-2 text-xs text-foreground\">\n {status.webhookUrl}\n </code>\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => copyWebhook(status.webhookUrl!)}\n aria-label={`Copy ${platform.name} webhook URL`}\n >\n {copiedWebhook === status.webhookUrl ? (\n <IconCheck className=\"h-4 w-4\" />\n ) : (\n <IconCopy className=\"h-4 w-4\" />\n )}\n </Button>\n </div>\n </DisclosureSection>\n ) : null}\n\n <DisclosureSection\n title=\"Resources\"\n summary=\"Documentation and external links\"\n >\n <div className=\"flex flex-wrap gap-2\">\n <Button\n asChild\n variant=\"ghost\"\n size=\"sm\"\n className=\"px-0 text-xs text-muted-foreground hover:bg-transparent hover:text-foreground\"\n >\n <a\n href={platform.documentation.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n Docs\n <IconExternalLink className=\"ml-1 h-3 w-3\" />\n </a>\n </Button>\n {platform.documentation.externalHref ? (\n <Button\n asChild\n variant=\"ghost\"\n size=\"sm\"\n className=\"px-0 text-xs text-muted-foreground hover:bg-transparent hover:text-foreground\"\n >\n <a\n href={platform.documentation.externalHref}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {platform.documentation.externalLabel ?? \"Open\"}\n <IconExternalLink className=\"ml-1 h-3 w-3\" />\n </a>\n </Button>\n ) : null}\n </div>\n </DisclosureSection>\n </div>\n </AccordionContent>\n </AccordionItem>\n );\n })}\n </Accordion>\n\n {loading ? (\n <div className=\"space-y-3 rounded-2xl border border-dashed px-4 py-6\">\n <Skeleton className=\"h-4 w-40\" />\n <Skeleton className=\"h-3 w-2/3 max-w-md\" />\n <Skeleton className=\"h-9 w-full max-w-sm\" />\n </div>\n ) : null}\n </div>\n );\n}\n"]}
|