@agent-native/dispatch 0.14.14 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +3 -0
  2. package/dist/actions/index.d.ts.map +1 -1
  3. package/dist/actions/index.js +4 -0
  4. package/dist/actions/index.js.map +1 -1
  5. package/dist/actions/list-curated-workspace-templates.d.ts +3 -0
  6. package/dist/actions/list-curated-workspace-templates.d.ts.map +1 -0
  7. package/dist/actions/list-curated-workspace-templates.js +10 -0
  8. package/dist/actions/list-curated-workspace-templates.js.map +1 -0
  9. package/dist/actions/remix-workspace-template.d.ts +60 -0
  10. package/dist/actions/remix-workspace-template.d.ts.map +1 -0
  11. package/dist/actions/remix-workspace-template.js +78 -0
  12. package/dist/actions/remix-workspace-template.js.map +1 -0
  13. package/dist/actions/upsert-destination.d.ts +12 -12
  14. package/dist/components/workspace-template-card.d.ts +52 -0
  15. package/dist/components/workspace-template-card.d.ts.map +1 -0
  16. package/dist/components/workspace-template-card.js +104 -0
  17. package/dist/components/workspace-template-card.js.map +1 -0
  18. package/dist/lib/other-apps.d.ts +14 -0
  19. package/dist/lib/other-apps.d.ts.map +1 -0
  20. package/dist/lib/other-apps.js +30 -0
  21. package/dist/lib/other-apps.js.map +1 -0
  22. package/dist/routes/pages/apps.d.ts.map +1 -1
  23. package/dist/routes/pages/apps.js +37 -2
  24. package/dist/routes/pages/apps.js.map +1 -1
  25. package/dist/server/lib/app-creation-store.d.ts +1 -0
  26. package/dist/server/lib/app-creation-store.d.ts.map +1 -1
  27. package/dist/server/lib/app-creation-store.js +1 -1
  28. package/dist/server/lib/app-creation-store.js.map +1 -1
  29. package/dist/server/lib/curated-workspace-templates.d.ts +22 -0
  30. package/dist/server/lib/curated-workspace-templates.d.ts.map +1 -0
  31. package/dist/server/lib/curated-workspace-templates.js +137 -0
  32. package/dist/server/lib/curated-workspace-templates.js.map +1 -0
  33. package/package.json +8 -2
  34. package/src/actions/index.ts +4 -0
  35. package/src/actions/list-curated-workspace-templates.spec.ts +36 -0
  36. package/src/actions/list-curated-workspace-templates.ts +12 -0
  37. package/src/actions/remix-workspace-template.spec.ts +116 -0
  38. package/src/actions/remix-workspace-template.ts +99 -0
  39. package/src/components/workspace-template-card.spec.tsx +174 -0
  40. package/src/components/workspace-template-card.tsx +361 -0
  41. package/src/lib/other-apps.spec.ts +76 -0
  42. package/src/lib/other-apps.ts +44 -0
  43. package/src/routes/pages/apps.tsx +165 -0
  44. package/src/server/lib/app-creation-store.ts +1 -1
  45. package/src/server/lib/curated-workspace-templates.spec.ts +56 -0
  46. package/src/server/lib/curated-workspace-templates.ts +187 -0
package/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # @agent-native/dispatch
2
2
 
3
+ Dispatch is the Agent-Native workspace control plane and a separate product.
4
+ It is not a Toolkit capability module.
5
+
3
6
  Workspace control plane for agent-native apps — vault, integrations,
4
7
  destinations, cross-app workspace resources, recurring "dream" report jobs,
5
8
  and cross-app delegation, shipped as a single drop-in package.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AA2F7D;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA0FvD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AA6F7D;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA4FvD,CAAC"}
@@ -31,6 +31,7 @@ import grantWorkspaceResourcesToApp from "./grant-workspace-resources-to-app.js"
31
31
  import listAgentThreadSources from "./list-agent-thread-sources.js";
32
32
  import listAvailableWorkspaceTemplates from "./list-available-workspace-templates.js";
33
33
  import listConnectedAgents from "./list-connected-agents.js";
34
+ import listCuratedWorkspaceTemplates from "./list-curated-workspace-templates.js";
34
35
  import listDestinations from "./list-destinations.js";
35
36
  import listDispatchApprovals from "./list-dispatch-approvals.js";
36
37
  import listDispatchAudit from "./list-dispatch-audit.js";
@@ -64,6 +65,7 @@ import providerApiRequest from "./provider-api-request.js";
64
65
  import queryStagedDataset from "./query-staged-dataset.js";
65
66
  import rejectDispatchChange from "./reject-dispatch-change.js";
66
67
  import rejectDreamProposal from "./reject-dream-proposal.js";
68
+ import remixWorkspaceTemplate from "./remix-workspace-template.js";
67
69
  import removePendingWorkspaceApp from "./remove-pending-workspace-app.js";
68
70
  import requestVaultSecret from "./request-vault-secret.js";
69
71
  import restoreStarterWorkspaceResources from "./restore-starter-workspace-resources.js";
@@ -124,6 +126,7 @@ export const dispatchActions = {
124
126
  "grant-vault-secrets-to-app": grantVaultSecretsToApp,
125
127
  "list-agent-thread-sources": listAgentThreadSources,
126
128
  "list-available-workspace-templates": listAvailableWorkspaceTemplates,
129
+ "list-curated-workspace-templates": listCuratedWorkspaceTemplates,
127
130
  "list-connected-agents": listConnectedAgents,
128
131
  "list-destinations": listDestinations,
129
132
  "list-dispatch-approvals": listDispatchApprovals,
@@ -160,6 +163,7 @@ export const dispatchActions = {
160
163
  "reject-dispatch-change": rejectDispatchChange,
161
164
  "reject-dream-proposal": rejectDreamProposal,
162
165
  "remove-pending-workspace-app": removePendingWorkspaceApp,
166
+ "remix-workspace-template": remixWorkspaceTemplate,
163
167
  "request-vault-secret": requestVaultSecret,
164
168
  "revoke-vault-grant": revokeVaultGrant,
165
169
  "revoke-workspace-resource-grant": revokeWorkspaceResourceGrant,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ActionEntry } from \"@agent-native/core/server\";\n\nimport applyDreamProposal from \"./apply-dream-proposal.js\";\nimport approveDispatchChange from \"./approve-dispatch-change.js\";\nimport approveVaultRequest from \"./approve-vault-request.js\";\nimport archiveWorkspaceApp from \"./archive-workspace-app.js\";\nimport askApp from \"./ask_app.js\";\nimport askAppStatus from \"./ask_app_status.js\";\nimport createDreamReport from \"./create-dream-report.js\";\nimport createLinkToken from \"./create-link-token.js\";\nimport createPylonTicket from \"./create-pylon-ticket.js\";\nimport createVaultGrant from \"./create-vault-grant.js\";\nimport createVaultSecret from \"./create-vault-secret.js\";\nimport createWorkspaceResourceGrant from \"./create-workspace-resource-grant.js\";\nimport createWorkspaceResource from \"./create-workspace-resource.js\";\nimport createEmbedSession from \"./create_embed_session.js\";\nimport deleteDestination from \"./delete-destination.js\";\nimport deleteStagedDataset from \"./delete-staged-dataset.js\";\nimport deleteVaultSecret from \"./delete-vault-secret.js\";\nimport deleteWorkspaceResource from \"./delete-workspace-resource.js\";\nimport denyVaultRequest from \"./deny-vault-request.js\";\nimport ensureDreamJob from \"./ensure-dream-job.js\";\nimport getAgentThreadDebug from \"./get-agent-thread-debug.js\";\nimport getAppCreationSettings from \"./get-app-creation-settings.js\";\nimport getDispatchSettings from \"./get-dispatch-settings.js\";\nimport getDreamSettings from \"./get-dream-settings.js\";\nimport getDream from \"./get-dream.js\";\nimport getVaultAccessSettings from \"./get-vault-access-settings.js\";\nimport getWorkspaceInfo from \"./get-workspace-info.js\";\nimport getWorkspaceResourceEffectiveContext from \"./get-workspace-resource-effective-context.js\";\nimport grantVaultSecretsToApp from \"./grant-vault-secrets-to-app.js\";\nimport grantWorkspaceResourcesToApp from \"./grant-workspace-resources-to-app.js\";\nimport listAgentThreadSources from \"./list-agent-thread-sources.js\";\nimport listAvailableWorkspaceTemplates from \"./list-available-workspace-templates.js\";\nimport listConnectedAgents from \"./list-connected-agents.js\";\nimport listDestinations from \"./list-destinations.js\";\nimport listDispatchApprovals from \"./list-dispatch-approvals.js\";\nimport listDispatchAudit from \"./list-dispatch-audit.js\";\nimport listDispatchOverview from \"./list-dispatch-overview.js\";\nimport listDispatchUsageMetrics from \"./list-dispatch-usage-metrics.js\";\nimport listDreamCandidates from \"./list-dream-candidates.js\";\nimport listDreams from \"./list-dreams.js\";\nimport listIntegrationsCatalog from \"./list-integrations-catalog.js\";\nimport listLinkedIdentities from \"./list-linked-identities.js\";\nimport listMcpAppAccess from \"./list-mcp-app-access.js\";\nimport listStagedDatasets from \"./list-staged-datasets.js\";\nimport listVaultAudit from \"./list-vault-audit.js\";\nimport listVaultGrants from \"./list-vault-grants.js\";\nimport listVaultRequests from \"./list-vault-requests.js\";\nimport listVaultSecretOptions from \"./list-vault-secret-options.js\";\nimport listVaultSecrets from \"./list-vault-secrets.js\";\nimport listWorkspaceApps from \"./list-workspace-apps.js\";\nimport listWorkspaceResourceGrants from \"./list-workspace-resource-grants.js\";\nimport listWorkspaceResourceOptions from \"./list-workspace-resource-options.js\";\nimport listWorkspaceResourcesForApp from \"./list-workspace-resources-for-app.js\";\nimport listWorkspaceResources from \"./list-workspace-resources.js\";\nimport listApps from \"./list_apps.js\";\nimport navigate from \"./navigate.js\";\nimport openApp from \"./open_app.js\";\nimport previewDreamProposal from \"./preview-dream-proposal.js\";\nimport previewWorkspaceResourceChange from \"./preview-workspace-resource-change.js\";\nimport providerApiCatalog from \"./provider-api-catalog.js\";\nimport providerApiDocs from \"./provider-api-docs.js\";\nimport providerApiRegister from \"./provider-api-register.js\";\nimport providerApiRequest from \"./provider-api-request.js\";\nimport queryStagedDataset from \"./query-staged-dataset.js\";\nimport rejectDispatchChange from \"./reject-dispatch-change.js\";\nimport rejectDreamProposal from \"./reject-dream-proposal.js\";\nimport removePendingWorkspaceApp from \"./remove-pending-workspace-app.js\";\nimport requestVaultSecret from \"./request-vault-secret.js\";\nimport restoreStarterWorkspaceResources from \"./restore-starter-workspace-resources.js\";\nimport revokeVaultGrant from \"./revoke-vault-grant.js\";\nimport revokeWorkspaceResourceGrant from \"./revoke-workspace-resource-grant.js\";\nimport scaffoldWorkspaceApp from \"./scaffold-workspace-app.js\";\nimport searchAgentThreads from \"./search-agent-threads.js\";\nimport sendCodeAgentRemoteCommand from \"./send-code-agent-remote-command.js\";\nimport sendPlatformMessage from \"./send-platform-message.js\";\nimport setAppCreationSettings from \"./set-app-creation-settings.js\";\nimport setDispatchApprovalPolicy from \"./set-dispatch-approval-policy.js\";\nimport setDreamSettings from \"./set-dream-settings.js\";\nimport setMcpAppAccess from \"./set-mcp-app-access.js\";\nimport setVaultAccessSettings from \"./set-vault-access-settings.js\";\nimport startWorkspaceAppCreation from \"./start-workspace-app-creation.js\";\nimport syncVaultToApp from \"./sync-vault-to-app.js\";\nimport unarchiveWorkspaceApp from \"./unarchive-workspace-app.js\";\nimport updateVaultSecret from \"./update-vault-secret.js\";\nimport updateWorkspaceAppMetadata from \"./update-workspace-app-metadata.js\";\nimport updateWorkspaceResource from \"./update-workspace-resource.js\";\nimport upsertDestination from \"./upsert-destination.js\";\nimport viewScreen from \"./view-screen.js\";\n\n/**\n * Dispatch's actions registered as a flat name→entry map. Imported by\n * `@agent-native/dispatch/server`'s side-effect block, which calls\n * `registerPackageActions(dispatchActions)` so the framework's action\n * loader picks them up.\n */\nexport const dispatchActions: Record<string, ActionEntry> = {\n \"approve-dispatch-change\": approveDispatchChange,\n \"approve-vault-request\": approveVaultRequest,\n \"archive-workspace-app\": archiveWorkspaceApp,\n ask_app: askApp,\n ask_app_status: askAppStatus,\n \"create-link-token\": createLinkToken,\n \"create-pylon-ticket\": createPylonTicket,\n \"create-vault-grant\": createVaultGrant,\n \"create-vault-secret\": createVaultSecret,\n \"create-workspace-resource-grant\": createWorkspaceResourceGrant,\n \"create-workspace-resource\": createWorkspaceResource,\n \"create-dream-report\": createDreamReport,\n create_embed_session: createEmbedSession,\n \"delete-staged-dataset\": deleteStagedDataset,\n \"delete-destination\": deleteDestination,\n \"delete-vault-secret\": deleteVaultSecret,\n \"delete-workspace-resource\": deleteWorkspaceResource,\n \"deny-vault-request\": denyVaultRequest,\n \"ensure-dream-job\": ensureDreamJob,\n \"get-app-creation-settings\": getAppCreationSettings,\n \"get-agent-thread-debug\": getAgentThreadDebug,\n \"get-dream\": getDream,\n \"get-dream-settings\": getDreamSettings,\n \"get-dispatch-settings\": getDispatchSettings,\n \"get-vault-access-settings\": getVaultAccessSettings,\n \"get-workspace-resource-effective-context\":\n getWorkspaceResourceEffectiveContext,\n \"get-workspace-info\": getWorkspaceInfo,\n \"grant-workspace-resources-to-app\": grantWorkspaceResourcesToApp,\n \"grant-vault-secrets-to-app\": grantVaultSecretsToApp,\n \"list-agent-thread-sources\": listAgentThreadSources,\n \"list-available-workspace-templates\": listAvailableWorkspaceTemplates,\n \"list-connected-agents\": listConnectedAgents,\n \"list-destinations\": listDestinations,\n \"list-dispatch-approvals\": listDispatchApprovals,\n \"list-dispatch-audit\": listDispatchAudit,\n \"list-dispatch-overview\": listDispatchOverview,\n \"list-dispatch-usage-metrics\": listDispatchUsageMetrics,\n \"list-dream-candidates\": listDreamCandidates,\n \"list-dreams\": listDreams,\n \"list-integrations-catalog\": listIntegrationsCatalog,\n \"list-linked-identities\": listLinkedIdentities,\n \"list-mcp-app-access\": listMcpAppAccess,\n list_apps: listApps,\n \"list-staged-datasets\": listStagedDatasets,\n \"list-vault-audit\": listVaultAudit,\n \"list-vault-grants\": listVaultGrants,\n \"list-vault-requests\": listVaultRequests,\n \"list-vault-secret-options\": listVaultSecretOptions,\n \"list-vault-secrets\": listVaultSecrets,\n \"list-workspace-apps\": listWorkspaceApps,\n \"list-workspace-resource-options\": listWorkspaceResourceOptions,\n \"list-workspace-resource-grants\": listWorkspaceResourceGrants,\n \"list-workspace-resources-for-app\": listWorkspaceResourcesForApp,\n \"list-workspace-resources\": listWorkspaceResources,\n navigate: navigate,\n open_app: openApp,\n \"apply-dream-proposal\": applyDreamProposal,\n \"preview-dream-proposal\": previewDreamProposal,\n \"preview-workspace-resource-change\": previewWorkspaceResourceChange,\n \"provider-api-catalog\": providerApiCatalog,\n \"provider-api-docs\": providerApiDocs,\n \"provider-api-register\": providerApiRegister,\n \"provider-api-request\": providerApiRequest,\n \"query-staged-dataset\": queryStagedDataset,\n \"reject-dispatch-change\": rejectDispatchChange,\n \"reject-dream-proposal\": rejectDreamProposal,\n \"remove-pending-workspace-app\": removePendingWorkspaceApp,\n \"request-vault-secret\": requestVaultSecret,\n \"revoke-vault-grant\": revokeVaultGrant,\n \"revoke-workspace-resource-grant\": revokeWorkspaceResourceGrant,\n \"restore-starter-workspace-resources\": restoreStarterWorkspaceResources,\n \"scaffold-workspace-app\": scaffoldWorkspaceApp,\n \"search-agent-threads\": searchAgentThreads,\n \"send-code-agent-remote-command\": sendCodeAgentRemoteCommand,\n \"send-platform-message\": sendPlatformMessage,\n \"set-app-creation-settings\": setAppCreationSettings,\n \"set-dispatch-approval-policy\": setDispatchApprovalPolicy,\n \"set-dream-settings\": setDreamSettings,\n \"set-mcp-app-access\": setMcpAppAccess,\n \"set-vault-access-settings\": setVaultAccessSettings,\n \"start-workspace-app-creation\": startWorkspaceAppCreation,\n \"sync-vault-to-app\": syncVaultToApp,\n \"unarchive-workspace-app\": unarchiveWorkspaceApp,\n \"update-workspace-app-metadata\": updateWorkspaceAppMetadata,\n \"update-vault-secret\": updateVaultSecret,\n \"update-workspace-resource\": updateWorkspaceResource,\n \"upsert-destination\": upsertDestination,\n \"view-screen\": viewScreen,\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ActionEntry } from \"@agent-native/core/server\";\n\nimport applyDreamProposal from \"./apply-dream-proposal.js\";\nimport approveDispatchChange from \"./approve-dispatch-change.js\";\nimport approveVaultRequest from \"./approve-vault-request.js\";\nimport archiveWorkspaceApp from \"./archive-workspace-app.js\";\nimport askApp from \"./ask_app.js\";\nimport askAppStatus from \"./ask_app_status.js\";\nimport createDreamReport from \"./create-dream-report.js\";\nimport createLinkToken from \"./create-link-token.js\";\nimport createPylonTicket from \"./create-pylon-ticket.js\";\nimport createVaultGrant from \"./create-vault-grant.js\";\nimport createVaultSecret from \"./create-vault-secret.js\";\nimport createWorkspaceResourceGrant from \"./create-workspace-resource-grant.js\";\nimport createWorkspaceResource from \"./create-workspace-resource.js\";\nimport createEmbedSession from \"./create_embed_session.js\";\nimport deleteDestination from \"./delete-destination.js\";\nimport deleteStagedDataset from \"./delete-staged-dataset.js\";\nimport deleteVaultSecret from \"./delete-vault-secret.js\";\nimport deleteWorkspaceResource from \"./delete-workspace-resource.js\";\nimport denyVaultRequest from \"./deny-vault-request.js\";\nimport ensureDreamJob from \"./ensure-dream-job.js\";\nimport getAgentThreadDebug from \"./get-agent-thread-debug.js\";\nimport getAppCreationSettings from \"./get-app-creation-settings.js\";\nimport getDispatchSettings from \"./get-dispatch-settings.js\";\nimport getDreamSettings from \"./get-dream-settings.js\";\nimport getDream from \"./get-dream.js\";\nimport getVaultAccessSettings from \"./get-vault-access-settings.js\";\nimport getWorkspaceInfo from \"./get-workspace-info.js\";\nimport getWorkspaceResourceEffectiveContext from \"./get-workspace-resource-effective-context.js\";\nimport grantVaultSecretsToApp from \"./grant-vault-secrets-to-app.js\";\nimport grantWorkspaceResourcesToApp from \"./grant-workspace-resources-to-app.js\";\nimport listAgentThreadSources from \"./list-agent-thread-sources.js\";\nimport listAvailableWorkspaceTemplates from \"./list-available-workspace-templates.js\";\nimport listConnectedAgents from \"./list-connected-agents.js\";\nimport listCuratedWorkspaceTemplates from \"./list-curated-workspace-templates.js\";\nimport listDestinations from \"./list-destinations.js\";\nimport listDispatchApprovals from \"./list-dispatch-approvals.js\";\nimport listDispatchAudit from \"./list-dispatch-audit.js\";\nimport listDispatchOverview from \"./list-dispatch-overview.js\";\nimport listDispatchUsageMetrics from \"./list-dispatch-usage-metrics.js\";\nimport listDreamCandidates from \"./list-dream-candidates.js\";\nimport listDreams from \"./list-dreams.js\";\nimport listIntegrationsCatalog from \"./list-integrations-catalog.js\";\nimport listLinkedIdentities from \"./list-linked-identities.js\";\nimport listMcpAppAccess from \"./list-mcp-app-access.js\";\nimport listStagedDatasets from \"./list-staged-datasets.js\";\nimport listVaultAudit from \"./list-vault-audit.js\";\nimport listVaultGrants from \"./list-vault-grants.js\";\nimport listVaultRequests from \"./list-vault-requests.js\";\nimport listVaultSecretOptions from \"./list-vault-secret-options.js\";\nimport listVaultSecrets from \"./list-vault-secrets.js\";\nimport listWorkspaceApps from \"./list-workspace-apps.js\";\nimport listWorkspaceResourceGrants from \"./list-workspace-resource-grants.js\";\nimport listWorkspaceResourceOptions from \"./list-workspace-resource-options.js\";\nimport listWorkspaceResourcesForApp from \"./list-workspace-resources-for-app.js\";\nimport listWorkspaceResources from \"./list-workspace-resources.js\";\nimport listApps from \"./list_apps.js\";\nimport navigate from \"./navigate.js\";\nimport openApp from \"./open_app.js\";\nimport previewDreamProposal from \"./preview-dream-proposal.js\";\nimport previewWorkspaceResourceChange from \"./preview-workspace-resource-change.js\";\nimport providerApiCatalog from \"./provider-api-catalog.js\";\nimport providerApiDocs from \"./provider-api-docs.js\";\nimport providerApiRegister from \"./provider-api-register.js\";\nimport providerApiRequest from \"./provider-api-request.js\";\nimport queryStagedDataset from \"./query-staged-dataset.js\";\nimport rejectDispatchChange from \"./reject-dispatch-change.js\";\nimport rejectDreamProposal from \"./reject-dream-proposal.js\";\nimport remixWorkspaceTemplate from \"./remix-workspace-template.js\";\nimport removePendingWorkspaceApp from \"./remove-pending-workspace-app.js\";\nimport requestVaultSecret from \"./request-vault-secret.js\";\nimport restoreStarterWorkspaceResources from \"./restore-starter-workspace-resources.js\";\nimport revokeVaultGrant from \"./revoke-vault-grant.js\";\nimport revokeWorkspaceResourceGrant from \"./revoke-workspace-resource-grant.js\";\nimport scaffoldWorkspaceApp from \"./scaffold-workspace-app.js\";\nimport searchAgentThreads from \"./search-agent-threads.js\";\nimport sendCodeAgentRemoteCommand from \"./send-code-agent-remote-command.js\";\nimport sendPlatformMessage from \"./send-platform-message.js\";\nimport setAppCreationSettings from \"./set-app-creation-settings.js\";\nimport setDispatchApprovalPolicy from \"./set-dispatch-approval-policy.js\";\nimport setDreamSettings from \"./set-dream-settings.js\";\nimport setMcpAppAccess from \"./set-mcp-app-access.js\";\nimport setVaultAccessSettings from \"./set-vault-access-settings.js\";\nimport startWorkspaceAppCreation from \"./start-workspace-app-creation.js\";\nimport syncVaultToApp from \"./sync-vault-to-app.js\";\nimport unarchiveWorkspaceApp from \"./unarchive-workspace-app.js\";\nimport updateVaultSecret from \"./update-vault-secret.js\";\nimport updateWorkspaceAppMetadata from \"./update-workspace-app-metadata.js\";\nimport updateWorkspaceResource from \"./update-workspace-resource.js\";\nimport upsertDestination from \"./upsert-destination.js\";\nimport viewScreen from \"./view-screen.js\";\n\n/**\n * Dispatch's actions registered as a flat name→entry map. Imported by\n * `@agent-native/dispatch/server`'s side-effect block, which calls\n * `registerPackageActions(dispatchActions)` so the framework's action\n * loader picks them up.\n */\nexport const dispatchActions: Record<string, ActionEntry> = {\n \"approve-dispatch-change\": approveDispatchChange,\n \"approve-vault-request\": approveVaultRequest,\n \"archive-workspace-app\": archiveWorkspaceApp,\n ask_app: askApp,\n ask_app_status: askAppStatus,\n \"create-link-token\": createLinkToken,\n \"create-pylon-ticket\": createPylonTicket,\n \"create-vault-grant\": createVaultGrant,\n \"create-vault-secret\": createVaultSecret,\n \"create-workspace-resource-grant\": createWorkspaceResourceGrant,\n \"create-workspace-resource\": createWorkspaceResource,\n \"create-dream-report\": createDreamReport,\n create_embed_session: createEmbedSession,\n \"delete-staged-dataset\": deleteStagedDataset,\n \"delete-destination\": deleteDestination,\n \"delete-vault-secret\": deleteVaultSecret,\n \"delete-workspace-resource\": deleteWorkspaceResource,\n \"deny-vault-request\": denyVaultRequest,\n \"ensure-dream-job\": ensureDreamJob,\n \"get-app-creation-settings\": getAppCreationSettings,\n \"get-agent-thread-debug\": getAgentThreadDebug,\n \"get-dream\": getDream,\n \"get-dream-settings\": getDreamSettings,\n \"get-dispatch-settings\": getDispatchSettings,\n \"get-vault-access-settings\": getVaultAccessSettings,\n \"get-workspace-resource-effective-context\":\n getWorkspaceResourceEffectiveContext,\n \"get-workspace-info\": getWorkspaceInfo,\n \"grant-workspace-resources-to-app\": grantWorkspaceResourcesToApp,\n \"grant-vault-secrets-to-app\": grantVaultSecretsToApp,\n \"list-agent-thread-sources\": listAgentThreadSources,\n \"list-available-workspace-templates\": listAvailableWorkspaceTemplates,\n \"list-curated-workspace-templates\": listCuratedWorkspaceTemplates,\n \"list-connected-agents\": listConnectedAgents,\n \"list-destinations\": listDestinations,\n \"list-dispatch-approvals\": listDispatchApprovals,\n \"list-dispatch-audit\": listDispatchAudit,\n \"list-dispatch-overview\": listDispatchOverview,\n \"list-dispatch-usage-metrics\": listDispatchUsageMetrics,\n \"list-dream-candidates\": listDreamCandidates,\n \"list-dreams\": listDreams,\n \"list-integrations-catalog\": listIntegrationsCatalog,\n \"list-linked-identities\": listLinkedIdentities,\n \"list-mcp-app-access\": listMcpAppAccess,\n list_apps: listApps,\n \"list-staged-datasets\": listStagedDatasets,\n \"list-vault-audit\": listVaultAudit,\n \"list-vault-grants\": listVaultGrants,\n \"list-vault-requests\": listVaultRequests,\n \"list-vault-secret-options\": listVaultSecretOptions,\n \"list-vault-secrets\": listVaultSecrets,\n \"list-workspace-apps\": listWorkspaceApps,\n \"list-workspace-resource-options\": listWorkspaceResourceOptions,\n \"list-workspace-resource-grants\": listWorkspaceResourceGrants,\n \"list-workspace-resources-for-app\": listWorkspaceResourcesForApp,\n \"list-workspace-resources\": listWorkspaceResources,\n navigate: navigate,\n open_app: openApp,\n \"apply-dream-proposal\": applyDreamProposal,\n \"preview-dream-proposal\": previewDreamProposal,\n \"preview-workspace-resource-change\": previewWorkspaceResourceChange,\n \"provider-api-catalog\": providerApiCatalog,\n \"provider-api-docs\": providerApiDocs,\n \"provider-api-register\": providerApiRegister,\n \"provider-api-request\": providerApiRequest,\n \"query-staged-dataset\": queryStagedDataset,\n \"reject-dispatch-change\": rejectDispatchChange,\n \"reject-dream-proposal\": rejectDreamProposal,\n \"remove-pending-workspace-app\": removePendingWorkspaceApp,\n \"remix-workspace-template\": remixWorkspaceTemplate,\n \"request-vault-secret\": requestVaultSecret,\n \"revoke-vault-grant\": revokeVaultGrant,\n \"revoke-workspace-resource-grant\": revokeWorkspaceResourceGrant,\n \"restore-starter-workspace-resources\": restoreStarterWorkspaceResources,\n \"scaffold-workspace-app\": scaffoldWorkspaceApp,\n \"search-agent-threads\": searchAgentThreads,\n \"send-code-agent-remote-command\": sendCodeAgentRemoteCommand,\n \"send-platform-message\": sendPlatformMessage,\n \"set-app-creation-settings\": setAppCreationSettings,\n \"set-dispatch-approval-policy\": setDispatchApprovalPolicy,\n \"set-dream-settings\": setDreamSettings,\n \"set-mcp-app-access\": setMcpAppAccess,\n \"set-vault-access-settings\": setVaultAccessSettings,\n \"start-workspace-app-creation\": startWorkspaceAppCreation,\n \"sync-vault-to-app\": syncVaultToApp,\n \"unarchive-workspace-app\": unarchiveWorkspaceApp,\n \"update-workspace-app-metadata\": updateWorkspaceAppMetadata,\n \"update-vault-secret\": updateVaultSecret,\n \"update-workspace-resource\": updateWorkspaceResource,\n \"upsert-destination\": upsertDestination,\n \"view-screen\": viewScreen,\n};\n"]}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("@agent-native/core").ActionDefinition<Record<string, never>, import("../server/lib/curated-workspace-templates.js").CuratedWorkspaceTemplateStatus[]>;
2
+ export default _default;
3
+ //# sourceMappingURL=list-curated-workspace-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-curated-workspace-templates.d.ts","sourceRoot":"","sources":["../../src/actions/list-curated-workspace-templates.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { defineAction } from "@agent-native/core";
2
+ import { z } from "zod";
3
+ import { listCuratedWorkspaceTemplates } from "../server/lib/curated-workspace-templates.js";
4
+ export default defineAction({
5
+ description: "List the curated first-party workspace templates available for private remixing. Returns stable template metadata, the product/live URL (not a public-demo claim), setup guidance, and whether each source template is already installed in the current workspace.",
6
+ schema: z.object({}),
7
+ http: { method: "GET" },
8
+ run: async () => listCuratedWorkspaceTemplates(),
9
+ });
10
+ //# sourceMappingURL=list-curated-workspace-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-curated-workspace-templates.js","sourceRoot":"","sources":["../../src/actions/list-curated-workspace-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAE7F,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,oQAAoQ;IACtQ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;IACvB,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,6BAA6B,EAAE;CACjD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core\";\nimport { z } from \"zod\";\n\nimport { listCuratedWorkspaceTemplates } from \"../server/lib/curated-workspace-templates.js\";\n\nexport default defineAction({\n description:\n \"List the curated first-party workspace templates available for private remixing. Returns stable template metadata, the product/live URL (not a public-demo claim), setup guidance, and whether each source template is already installed in the current workspace.\",\n schema: z.object({}),\n http: { method: \"GET\" },\n run: async () => listCuratedWorkspaceTemplates(),\n});\n"]}
@@ -0,0 +1,60 @@
1
+ declare const _default: import("@agent-native/core").ActionDefinition<{
2
+ templateId: string;
3
+ appId?: string | null | undefined;
4
+ description?: string | null | undefined;
5
+ }, {
6
+ appId: string;
7
+ template: string;
8
+ output: string;
9
+ sourceTemplate: import("../server/lib/curated-workspace-templates.js").CuratedWorkspaceTemplate;
10
+ } | {
11
+ mode: string;
12
+ appId: string;
13
+ message: string;
14
+ prompt?: undefined;
15
+ path?: undefined;
16
+ projectId?: undefined;
17
+ branchName?: undefined;
18
+ url?: undefined;
19
+ workspaceUrl?: undefined;
20
+ status?: undefined;
21
+ sourceTemplate: import("../server/lib/curated-workspace-templates.js").CuratedWorkspaceTemplate;
22
+ } | {
23
+ mode: string;
24
+ appId: string;
25
+ prompt: string;
26
+ message: string;
27
+ path?: undefined;
28
+ projectId?: undefined;
29
+ branchName?: undefined;
30
+ url?: undefined;
31
+ workspaceUrl?: undefined;
32
+ status?: undefined;
33
+ sourceTemplate: import("../server/lib/curated-workspace-templates.js").CuratedWorkspaceTemplate;
34
+ } | {
35
+ prompt?: undefined;
36
+ mode: string;
37
+ appId: string;
38
+ projectId: string;
39
+ message: string;
40
+ path?: undefined;
41
+ branchName?: undefined;
42
+ url?: undefined;
43
+ workspaceUrl?: undefined;
44
+ status?: undefined;
45
+ sourceTemplate: import("../server/lib/curated-workspace-templates.js").CuratedWorkspaceTemplate;
46
+ } | {
47
+ prompt?: undefined;
48
+ mode: string;
49
+ appId: string;
50
+ path: string;
51
+ projectId: string;
52
+ branchName: string;
53
+ url: string;
54
+ workspaceUrl: string | null;
55
+ status: string;
56
+ message: string;
57
+ sourceTemplate: import("../server/lib/curated-workspace-templates.js").CuratedWorkspaceTemplate;
58
+ }>;
59
+ export default _default;
60
+ //# sourceMappingURL=remix-workspace-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remix-workspace-template.d.ts","sourceRoot":"","sources":["../../src/actions/remix-workspace-template.ts"],"names":[],"mappings":""}
@@ -0,0 +1,78 @@
1
+ import { defineAction } from "@agent-native/core";
2
+ import { getWorkspaceAppIdValidationError } from "@agent-native/core/shared";
3
+ import { z } from "zod";
4
+ import { isLocalAppCreationRuntime, scaffoldWorkspaceAppFromTemplate, startWorkspaceAppCreation, } from "../server/lib/app-creation-store.js";
5
+ import { getCuratedWorkspaceTemplate } from "../server/lib/curated-workspace-templates.js";
6
+ import { recordAudit } from "../server/lib/dispatch-store.js";
7
+ function buildRemixPrompt(input) {
8
+ return [
9
+ "Create a private workspace remix of a curated first-party template.",
10
+ `Source template: ${input.templateName} (${input.templateId}).`,
11
+ "Recreate the source template's product shape and capabilities as an independent workspace app.",
12
+ "Never copy source-app data, records, user content, secrets, credentials, tokens, API keys, or private configuration.",
13
+ "Use empty or synthetic seed data only, keep the remix private to the current workspace, and do not create a public demo.",
14
+ `Setup note: ${input.setupNote}`,
15
+ input.description?.trim()
16
+ ? `Requested customization: ${input.description.trim()}`
17
+ : "Keep the first version close to the curated source template while preserving independent ownership.",
18
+ ].join(" ");
19
+ }
20
+ export default defineAction({
21
+ description: "Create a private, independent remix of one of Dispatch's curated first-party workspace templates. Valid templates are mail, calendar, analytics, slides, content, clips, brain, assets, forms, and design. The remix must not copy source-app data, secrets, credentials, or private configuration; local workspaces scaffold the template, while hosted workspaces start a Builder app-creation branch.",
22
+ schema: z.object({
23
+ templateId: z
24
+ .string()
25
+ .min(1)
26
+ .describe("Curated source template id: mail, calendar, analytics, slides, content, clips, brain, assets, forms, or design."),
27
+ appId: z
28
+ .string()
29
+ .max(64)
30
+ .optional()
31
+ .nullable()
32
+ .refine((appId) => !appId || !getWorkspaceAppIdValidationError(appId), {
33
+ message: "Use a non-reserved app id with lowercase letters, numbers, and hyphens.",
34
+ })
35
+ .describe("Optional target workspace app id. Defaults to <template>-remix so the source app remains independent."),
36
+ description: z
37
+ .string()
38
+ .max(500)
39
+ .optional()
40
+ .nullable()
41
+ .describe("Optional customization or purpose for the private remix."),
42
+ }),
43
+ run: async (input) => {
44
+ const sourceTemplate = getCuratedWorkspaceTemplate(input.templateId);
45
+ const appId = input.appId?.trim() || `${sourceTemplate.template}-remix`;
46
+ const result = isLocalAppCreationRuntime()
47
+ ? await scaffoldWorkspaceAppFromTemplate({
48
+ template: sourceTemplate.template,
49
+ appId,
50
+ })
51
+ : await startWorkspaceAppCreation({
52
+ prompt: buildRemixPrompt({
53
+ templateName: sourceTemplate.name,
54
+ templateId: sourceTemplate.template,
55
+ setupNote: sourceTemplate.setupNote,
56
+ description: input.description,
57
+ }),
58
+ appId,
59
+ description: input.description,
60
+ template: sourceTemplate.template,
61
+ });
62
+ await recordAudit({
63
+ action: "workspace-app.remix-requested",
64
+ targetType: "workspace-app",
65
+ targetId: appId,
66
+ summary: `Requested private remix of ${sourceTemplate.name}`,
67
+ metadata: {
68
+ sourceTemplate: sourceTemplate.template,
69
+ mode: result && typeof result === "object" && "mode" in result
70
+ ? result.mode
71
+ : "local",
72
+ descriptionConfigured: !!input.description?.trim(),
73
+ },
74
+ });
75
+ return { ...result, sourceTemplate };
76
+ },
77
+ });
78
+ //# sourceMappingURL=remix-workspace-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remix-workspace-template.js","sourceRoot":"","sources":["../../src/actions/remix-workspace-template.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineAction } from \"@agent-native/core\";\nimport { getWorkspaceAppIdValidationError } from \"@agent-native/core/shared\";\nimport { z } from \"zod\";\n\nimport {\n isLocalAppCreationRuntime,\n scaffoldWorkspaceAppFromTemplate,\n startWorkspaceAppCreation,\n} from \"../server/lib/app-creation-store.js\";\nimport { getCuratedWorkspaceTemplate } from \"../server/lib/curated-workspace-templates.js\";\nimport { recordAudit } from \"../server/lib/dispatch-store.js\";\n\nfunction buildRemixPrompt(input: {\n templateName: string;\n templateId: string;\n setupNote: string;\n description?: string | null;\n}): string {\n return [\n \"Create a private workspace remix of a curated first-party template.\",\n `Source template: ${input.templateName} (${input.templateId}).`,\n \"Recreate the source template's product shape and capabilities as an independent workspace app.\",\n \"Never copy source-app data, records, user content, secrets, credentials, tokens, API keys, or private configuration.\",\n \"Use empty or synthetic seed data only, keep the remix private to the current workspace, and do not create a public demo.\",\n `Setup note: ${input.setupNote}`,\n input.description?.trim()\n ? `Requested customization: ${input.description.trim()}`\n : \"Keep the first version close to the curated source template while preserving independent ownership.\",\n ].join(\" \");\n}\n\nexport default defineAction({\n description:\n \"Create a private, independent remix of one of Dispatch's curated first-party workspace templates. Valid templates are mail, calendar, analytics, slides, content, clips, brain, assets, forms, and design. The remix must not copy source-app data, secrets, credentials, or private configuration; local workspaces scaffold the template, while hosted workspaces start a Builder app-creation branch.\",\n schema: z.object({\n templateId: z\n .string()\n .min(1)\n .describe(\n \"Curated source template id: mail, calendar, analytics, slides, content, clips, brain, assets, forms, or design.\",\n ),\n appId: z\n .string()\n .max(64)\n .optional()\n .nullable()\n .refine((appId) => !appId || !getWorkspaceAppIdValidationError(appId), {\n message:\n \"Use a non-reserved app id with lowercase letters, numbers, and hyphens.\",\n })\n .describe(\n \"Optional target workspace app id. Defaults to <template>-remix so the source app remains independent.\",\n ),\n description: z\n .string()\n .max(500)\n .optional()\n .nullable()\n .describe(\"Optional customization or purpose for the private remix.\"),\n }),\n run: async (input) => {\n const sourceTemplate = getCuratedWorkspaceTemplate(input.templateId);\n const appId = input.appId?.trim() || `${sourceTemplate.template}-remix`;\n\n const result = isLocalAppCreationRuntime()\n ? await scaffoldWorkspaceAppFromTemplate({\n template: sourceTemplate.template,\n appId,\n })\n : await startWorkspaceAppCreation({\n prompt: buildRemixPrompt({\n templateName: sourceTemplate.name,\n templateId: sourceTemplate.template,\n setupNote: sourceTemplate.setupNote,\n description: input.description,\n }),\n appId,\n description: input.description,\n template: sourceTemplate.template,\n });\n\n await recordAudit({\n action: \"workspace-app.remix-requested\",\n targetType: \"workspace-app\",\n targetId: appId,\n summary: `Requested private remix of ${sourceTemplate.name}`,\n metadata: {\n sourceTemplate: sourceTemplate.template,\n mode:\n result && typeof result === \"object\" && \"mode\" in result\n ? result.mode\n : \"local\",\n descriptionConfigured: !!input.description?.trim(),\n },\n });\n\n return { ...result, sourceTemplate };\n },\n});\n"]}
@@ -6,6 +6,18 @@ declare const _default: import("@agent-native/core").ActionDefinition<{
6
6
  threadRef?: string | undefined;
7
7
  notes?: string | undefined;
8
8
  }, {
9
+ id: string;
10
+ ownerEmail: string;
11
+ orgId: string | null;
12
+ name: string;
13
+ platform: string;
14
+ destination: string;
15
+ threadRef: string | null;
16
+ notes: string | null;
17
+ createdBy: string;
18
+ createdAt: number;
19
+ updatedAt: number;
20
+ } | {
9
21
  id: string;
10
22
  ownerEmail: string;
11
23
  orgId: string | null;
@@ -22,18 +34,6 @@ declare const _default: import("@agent-native/core").ActionDefinition<{
22
34
  reviewedAt: number | null;
23
35
  createdAt: number;
24
36
  updatedAt: number;
25
- } | {
26
- id: string;
27
- ownerEmail: string;
28
- orgId: string | null;
29
- name: string;
30
- platform: string;
31
- destination: string;
32
- threadRef: string | null;
33
- notes: string | null;
34
- createdBy: string;
35
- createdAt: number;
36
- updatedAt: number;
37
37
  }>;
38
38
  export default _default;
39
39
  //# sourceMappingURL=upsert-destination.d.ts.map
@@ -0,0 +1,52 @@
1
+ import { type ReactNode } from "react";
2
+ export interface CuratedWorkspaceTemplate {
3
+ id?: string | null;
4
+ templateId?: string | null;
5
+ appId?: string | null;
6
+ name: string;
7
+ description?: string | null;
8
+ source?: string | null;
9
+ sourceDescription?: string | null;
10
+ integrationSetup?: string | null;
11
+ setupNote?: string | null;
12
+ installed?: boolean | null;
13
+ installedAppId?: string | null;
14
+ liveUrl?: string | null;
15
+ productUrl?: string | null;
16
+ }
17
+ export type CuratedWorkspaceTemplatesResult = CuratedWorkspaceTemplate[] | {
18
+ templates: CuratedWorkspaceTemplate[];
19
+ };
20
+ export interface WorkspaceTemplateLabels {
21
+ appId: string;
22
+ appIdDescription: string;
23
+ cancel: string;
24
+ integrationSetup: string;
25
+ installed: string;
26
+ remix: string;
27
+ remixing: string;
28
+ remixSuccess: string;
29
+ remixError: string;
30
+ appIdRequired: string;
31
+ source: string;
32
+ viewLiveApp: string;
33
+ }
34
+ export interface WorkspaceTemplateCardProps {
35
+ template: CuratedWorkspaceTemplate;
36
+ defaultAppId?: string;
37
+ labels?: Partial<WorkspaceTemplateLabels>;
38
+ className?: string;
39
+ onRemixSuccess?: (result: unknown, template: CuratedWorkspaceTemplate) => void;
40
+ }
41
+ export declare function WorkspaceTemplateCard({ template, defaultAppId, labels: labelOverrides, className, onRemixSuccess, }: WorkspaceTemplateCardProps): import("node_modules/@types/react").JSX.Element;
42
+ export interface WorkspaceTemplatesSectionProps {
43
+ templates: CuratedWorkspaceTemplatesResult;
44
+ title?: ReactNode;
45
+ defaultAppId?: string;
46
+ labels?: Partial<WorkspaceTemplateLabels>;
47
+ className?: string;
48
+ cardClassName?: string;
49
+ onRemixSuccess?: (result: unknown, template: CuratedWorkspaceTemplate) => void;
50
+ }
51
+ export declare function WorkspaceTemplatesSection({ templates: result, title, defaultAppId, labels, className, cardClassName, onRemixSuccess, }: WorkspaceTemplatesSectionProps): import("node_modules/@types/react").JSX.Element | null;
52
+ //# sourceMappingURL=workspace-template-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-template-card.d.ts","sourceRoot":"","sources":["../../src/components/workspace-template-card.tsx"],"names":[],"mappings":"AASA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AA4BrE,MAAM,WAAW,wBAAwB;IACvC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,+BAA+B,GACvC,wBAAwB,EAAE,GAC1B;IACE,SAAS,EAAE,wBAAwB,EAAE,CAAC;CACvC,CAAC;AAEN,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAiBD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,CACf,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,wBAAwB,KAC/B,IAAI,CAAC;CACX;AAsCD,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,YAAY,EACZ,MAAM,EAAE,cAAc,EACtB,SAAS,EACT,cAAc,GACf,EAAE,0BAA0B,mDAuK5B;AAED,MAAM,WAAW,8BAA8B;IAC7C,SAAS,EAAE,+BAA+B,CAAC;IAC3C,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,CACf,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,wBAAwB,KAC/B,IAAI,CAAC;CACX;AAQD,wBAAgB,yBAAyB,CAAC,EACxC,SAAS,EAAE,MAAM,EACjB,KAAK,EACL,YAAY,EACZ,MAAM,EACN,SAAS,EACT,aAAa,EACb,cAAc,GACf,EAAE,8BAA8B,0DAsBhC"}
@@ -0,0 +1,104 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useActionMutation } from "@agent-native/core/client";
3
+ import { IconArrowUpRight, IconCircleCheck, IconCopy, IconExternalLink, IconFileText, IconPlugConnected, } from "@tabler/icons-react";
4
+ import { useEffect, useMemo, useState } from "react";
5
+ import { toast } from "sonner";
6
+ import { cn } from "../lib/utils.js";
7
+ import { Alert, AlertDescription } from "./ui/alert.js";
8
+ import { Badge } from "./ui/badge.js";
9
+ import { Button } from "./ui/button.js";
10
+ import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "./ui/card.js";
11
+ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "./ui/dialog.js";
12
+ import { Input } from "./ui/input.js";
13
+ import { Label } from "./ui/label.js";
14
+ import { Spinner } from "./ui/spinner.js";
15
+ const DEFAULT_LABELS = {
16
+ appId: "App ID",
17
+ appIdDescription: "Choose the URL-safe id for the new workspace app.",
18
+ cancel: "Cancel",
19
+ integrationSetup: "Integration setup",
20
+ installed: "Installed",
21
+ remix: "Remix into workspace",
22
+ remixing: "Remixing…",
23
+ remixSuccess: "Template remixed into your workspace.",
24
+ remixError: "Could not remix this template",
25
+ appIdRequired: "App ID is required.",
26
+ source: "Source",
27
+ viewLiveApp: "View the live app",
28
+ };
29
+ function slugifyAppId(value) {
30
+ return (value
31
+ .trim()
32
+ .toLowerCase()
33
+ .replace(/[^a-z0-9]+/g, "-")
34
+ .replace(/^-+|-+$/g, "")
35
+ .slice(0, 48) || "new-app");
36
+ }
37
+ function templateIdFor(template) {
38
+ return template.templateId || template.id || template.appId || template.name;
39
+ }
40
+ function defaultAppIdFor(template, defaultAppId) {
41
+ if (defaultAppId)
42
+ return slugifyAppId(defaultAppId);
43
+ const sourceId = slugifyAppId(template.appId || template.name);
44
+ return `${sourceId}-remix`;
45
+ }
46
+ function stringifyError(error) {
47
+ if (error instanceof Error && error.message)
48
+ return error.message;
49
+ if (typeof error === "string")
50
+ return error;
51
+ return "Unknown error";
52
+ }
53
+ function mergeLabels(labels) {
54
+ return { ...DEFAULT_LABELS, ...labels };
55
+ }
56
+ export function WorkspaceTemplateCard({ template, defaultAppId, labels: labelOverrides, className, onRemixSuccess, }) {
57
+ const labels = useMemo(() => mergeLabels(labelOverrides), [labelOverrides]);
58
+ const [open, setOpen] = useState(false);
59
+ const [appId, setAppId] = useState(() => defaultAppIdFor(template, defaultAppId));
60
+ const isInstalled = Boolean(template.installed || template.installedAppId);
61
+ const liveUrl = template.liveUrl || template.productUrl;
62
+ const setupNote = template.integrationSetup || template.setupNote;
63
+ const remix = useActionMutation("remix-workspace-template", {
64
+ onSuccess: (result) => {
65
+ toast.success(labels.remixSuccess);
66
+ setOpen(false);
67
+ onRemixSuccess?.(result, template);
68
+ },
69
+ onError: (error) => toast.error(`${labels.remixError}: ${stringifyError(error)}`),
70
+ });
71
+ useEffect(() => {
72
+ if (open) {
73
+ setAppId(defaultAppIdFor(template, defaultAppId));
74
+ }
75
+ }, [defaultAppId, open, template]);
76
+ function submitRemix() {
77
+ const trimmedAppId = appId.trim();
78
+ if (!trimmedAppId) {
79
+ toast.error(labels.appIdRequired);
80
+ return;
81
+ }
82
+ remix.mutate({
83
+ templateId: templateIdFor(template),
84
+ appId: trimmedAppId,
85
+ });
86
+ }
87
+ return (_jsxs(Card, { className: cn("flex h-full flex-col border-border/60 bg-card/40 shadow-none transition-[background-color,border-color] hover:border-foreground/20 hover:bg-accent/15", className), children: [_jsx(CardHeader, { className: "gap-2 p-4", children: _jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "flex min-w-0 items-start gap-2.5", children: [_jsx("span", { className: "mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-md border border-border/70 bg-muted/40 text-muted-foreground", children: _jsx(IconFileText, { size: 16 }) }), _jsxs("div", { className: "min-w-0", children: [_jsx(CardTitle, { className: "truncate text-sm font-semibold", children: template.name }), template.source || template.sourceDescription ? (_jsxs(CardDescription, { className: "mt-1 truncate text-xs", children: [_jsxs("span", { className: "font-medium text-foreground/70", children: [labels.source, ":"] }), " ", template.sourceDescription || template.source] })) : null] })] }), isInstalled ? (_jsxs(Badge, { variant: "outline", className: "shrink-0 gap-1 border-primary/30 bg-primary/5 text-primary", children: [_jsx(IconCircleCheck, { size: 13 }), labels.installed] })) : null] }) }), _jsxs(CardContent, { className: "flex flex-1 flex-col gap-3 p-4 pt-0", children: [template.description ? (_jsx("p", { className: "line-clamp-3 text-[13px] leading-5 text-muted-foreground", children: template.description })) : null, setupNote ? (_jsxs(Alert, { className: "border-border/60 bg-muted/25 px-3 py-2 [&>svg]:left-3 [&>svg]:top-2.5", children: [_jsx(IconPlugConnected, { size: 15 }), _jsxs(AlertDescription, { className: "text-xs leading-5", children: [_jsxs("span", { className: "font-medium text-foreground/80", children: [labels.integrationSetup, ":"] }), " ", setupNote] })] })) : null] }), _jsxs(CardFooter, { className: "flex flex-wrap justify-between gap-2 p-4 pt-0", children: [liveUrl ? (_jsx(Button, { variant: "link", size: "sm", className: "h-8 px-0", asChild: true, children: _jsxs("a", { href: liveUrl, target: "_blank", rel: "noreferrer", children: [labels.viewLiveApp, _jsx(IconExternalLink, {})] }) })) : (_jsx("span", {})), _jsxs(Dialog, { open: open, onOpenChange: (nextOpen) => {
88
+ if (!remix.isPending)
89
+ setOpen(nextOpen);
90
+ }, children: [_jsx(DialogTrigger, { asChild: true, children: _jsxs(Button, { type: "button", size: "sm", children: [_jsx(IconCopy, {}), labels.remix] }) }), _jsxs(DialogContent, { className: "max-w-md", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: template.name }), _jsx(DialogDescription, { children: labels.appIdDescription })] }), _jsxs("form", { className: "flex flex-col gap-4", onSubmit: (event) => {
91
+ event.preventDefault();
92
+ submitRemix();
93
+ }, children: [_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { htmlFor: `workspace-template-app-id-${templateIdFor(template)}`, children: labels.appId }), _jsx(Input, { id: `workspace-template-app-id-${templateIdFor(template)}`, value: appId, autoComplete: "off", onChange: (event) => setAppId(event.target.value), disabled: remix.isPending })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "outline", onClick: () => setOpen(false), disabled: remix.isPending, children: labels.cancel }), _jsxs(Button, { type: "submit", disabled: remix.isPending, children: [remix.isPending ? _jsx(Spinner, {}) : _jsx(IconArrowUpRight, {}), remix.isPending ? labels.remixing : labels.remix] })] })] })] })] })] })] }));
94
+ }
95
+ function getTemplateItems(result) {
96
+ return Array.isArray(result) ? result : result.templates;
97
+ }
98
+ export function WorkspaceTemplatesSection({ templates: result, title, defaultAppId, labels, className, cardClassName, onRemixSuccess, }) {
99
+ const templates = getTemplateItems(result);
100
+ if (templates.length === 0)
101
+ return null;
102
+ return (_jsxs("section", { className: cn("flex flex-col gap-3", className), children: [title ? _jsx("div", { className: "text-sm font-semibold", children: title }) : null, _jsx("div", { className: "grid gap-3 md:grid-cols-2", children: templates.map((template) => (_jsx(WorkspaceTemplateCard, { template: template, defaultAppId: defaultAppId, labels: labels, className: cardClassName, onRemixSuccess: onRemixSuccess }, templateIdFor(template)))) })] }));
103
+ }
104
+ //# sourceMappingURL=workspace-template-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-template-card.js","sourceRoot":"","sources":["../../src/components/workspace-template-card.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EACL,IAAI,EACJ,WAAW,EACX,eAAe,EACf,UAAU,EACV,UAAU,EACV,SAAS,GACV,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAuCvC,MAAM,cAAc,GAA4B;IAC9C,KAAK,EAAE,QAAQ;IACf,gBAAgB,EAAE,mDAAmD;IACrE,MAAM,EAAE,QAAQ;IAChB,gBAAgB,EAAE,mBAAmB;IACrC,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,sBAAsB;IAC7B,QAAQ,EAAE,WAAW;IACrB,YAAY,EAAE,uCAAuC;IACrD,UAAU,EAAE,+BAA+B;IAC3C,aAAa,EAAE,qBAAqB;IACpC,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,mBAAmB;CACjC,CAAC;AAaF,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,CACL,KAAK;SACF,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAC7B,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,QAAkC;IACvD,OAAO,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC;AAC/E,CAAC;AAED,SAAS,eAAe,CACtB,QAAkC,EAClC,YAAqB;IAErB,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/D,OAAO,GAAG,QAAQ,QAAQ,CAAC;AAC7B,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IAClE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAClB,MAAyC;IAEzC,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EACpC,QAAQ,EACR,YAAY,EACZ,MAAM,EAAE,cAAc,EACtB,SAAS,EACT,cAAc,GACa;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CACtC,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CACxC,CAAC;IACF,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC;IACxD,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,SAAS,CAAC;IAClE,MAAM,KAAK,GAAG,iBAAiB,CAAC,0BAA0B,EAAE;QAC1D,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE;YACpB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,cAAc,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,UAAU,KAAK,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;KAChE,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,EAAE,CAAC;YACT,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEnC,SAAS,WAAW;QAClB,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QAED,KAAK,CAAC,MAAM,CAAC;YACX,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC;YACnC,KAAK,EAAE,YAAY;SACpB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CACL,MAAC,IAAI,IACH,SAAS,EAAE,EAAE,CACX,uJAAuJ,EACvJ,SAAS,CACV,aAED,KAAC,UAAU,IAAC,SAAS,EAAC,WAAW,YAC/B,eAAK,SAAS,EAAC,wCAAwC,aACrD,eAAK,SAAS,EAAC,kCAAkC,aAC/C,eAAM,SAAS,EAAC,8HAA8H,YAC5I,KAAC,YAAY,IAAC,IAAI,EAAE,EAAE,GAAI,GACrB,EACP,eAAK,SAAS,EAAC,SAAS,aACtB,KAAC,SAAS,IAAC,SAAS,EAAC,gCAAgC,YAClD,QAAQ,CAAC,IAAI,GACJ,EACX,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAC/C,MAAC,eAAe,IAAC,SAAS,EAAC,uBAAuB,aAChD,gBAAM,SAAS,EAAC,gCAAgC,aAC7C,MAAM,CAAC,MAAM,SACT,EAAC,GAAG,EACV,QAAQ,CAAC,iBAAiB,IAAI,QAAQ,CAAC,MAAM,IAC9B,CACnB,CAAC,CAAC,CAAC,IAAI,IACJ,IACF,EACL,WAAW,CAAC,CAAC,CAAC,CACb,MAAC,KAAK,IACJ,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,4DAA4D,aAEtE,KAAC,eAAe,IAAC,IAAI,EAAE,EAAE,GAAI,EAC5B,MAAM,CAAC,SAAS,IACX,CACT,CAAC,CAAC,CAAC,IAAI,IACJ,GACK,EAEb,MAAC,WAAW,IAAC,SAAS,EAAC,qCAAqC,aACzD,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CACtB,YAAG,SAAS,EAAC,0DAA0D,YACpE,QAAQ,CAAC,WAAW,GACnB,CACL,CAAC,CAAC,CAAC,IAAI,EAEP,SAAS,CAAC,CAAC,CAAC,CACX,MAAC,KAAK,IAAC,SAAS,EAAC,uEAAuE,aACtF,KAAC,iBAAiB,IAAC,IAAI,EAAE,EAAE,GAAI,EAC/B,MAAC,gBAAgB,IAAC,SAAS,EAAC,mBAAmB,aAC7C,gBAAM,SAAS,EAAC,gCAAgC,aAC7C,MAAM,CAAC,gBAAgB,SACnB,EAAC,GAAG,EACV,SAAS,IACO,IACb,CACT,CAAC,CAAC,CAAC,IAAI,IACI,EAEd,MAAC,UAAU,IAAC,SAAS,EAAC,+CAA+C,aAClE,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,MAAM,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,UAAU,EAAC,OAAO,kBAC3D,aAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,YAAY,aAC/C,MAAM,CAAC,WAAW,EACnB,KAAC,gBAAgB,KAAG,IAClB,GACG,CACV,CAAC,CAAC,CAAC,CACF,gBAAQ,CACT,EAED,MAAC,MAAM,IACL,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,CAAC,QAAQ,EAAE,EAAE;4BACzB,IAAI,CAAC,KAAK,CAAC,SAAS;gCAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;wBAC1C,CAAC,aAED,KAAC,aAAa,IAAC,OAAO,kBACpB,MAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,IAAI,aAC7B,KAAC,QAAQ,KAAG,EACX,MAAM,CAAC,KAAK,IACN,GACK,EAChB,MAAC,aAAa,IAAC,SAAS,EAAC,UAAU,aACjC,MAAC,YAAY,eACX,KAAC,WAAW,cAAE,QAAQ,CAAC,IAAI,GAAe,EAC1C,KAAC,iBAAiB,cAAE,MAAM,CAAC,gBAAgB,GAAqB,IACnD,EACf,gBACE,SAAS,EAAC,qBAAqB,EAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;4CAClB,KAAK,CAAC,cAAc,EAAE,CAAC;4CACvB,WAAW,EAAE,CAAC;wCAChB,CAAC,aAED,eAAK,SAAS,EAAC,qBAAqB,aAClC,KAAC,KAAK,IACJ,OAAO,EAAE,6BAA6B,aAAa,CAAC,QAAQ,CAAC,EAAE,YAE9D,MAAM,CAAC,KAAK,GACP,EACR,KAAC,KAAK,IACJ,EAAE,EAAE,6BAA6B,aAAa,CAAC,QAAQ,CAAC,EAAE,EAC1D,KAAK,EAAE,KAAK,EACZ,YAAY,EAAC,KAAK,EAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EACjD,QAAQ,EAAE,KAAK,CAAC,SAAS,GACzB,IACE,EACN,MAAC,YAAY,eACX,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,YAExB,MAAM,CAAC,MAAM,GACP,EACT,MAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,aAC5C,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAC,OAAO,KAAG,CAAC,CAAC,CAAC,KAAC,gBAAgB,KAAG,EACpD,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAC1C,IACI,IACV,IACO,IACT,IACE,IACR,CACR,CAAC;AACJ,CAAC;AAeD,SAAS,gBAAgB,CACvB,MAAuC;IAEvC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,EACxC,SAAS,EAAE,MAAM,EACjB,KAAK,EACL,YAAY,EACZ,MAAM,EACN,SAAS,EACT,aAAa,EACb,cAAc,GACiB;IAC/B,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE3C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,OAAO,CACL,mBAAS,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,aACrD,KAAK,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,uBAAuB,YAAE,KAAK,GAAO,CAAC,CAAC,CAAC,IAAI,EACpE,cAAK,SAAS,EAAC,2BAA2B,YACvC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAC3B,KAAC,qBAAqB,IAEpB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,aAAa,EACxB,cAAc,EAAE,cAAc,IALzB,aAAa,CAAC,QAAQ,CAAC,CAM5B,CACH,CAAC,GACE,IACE,CACX,CAAC;AACJ,CAAC","sourcesContent":["import { useActionMutation } from \"@agent-native/core/client\";\nimport {\n IconArrowUpRight,\n IconCircleCheck,\n IconCopy,\n IconExternalLink,\n IconFileText,\n IconPlugConnected,\n} from \"@tabler/icons-react\";\nimport { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { toast } from \"sonner\";\n\nimport { cn } from \"../lib/utils\";\nimport { Alert, AlertDescription } from \"./ui/alert\";\nimport { Badge } from \"./ui/badge\";\nimport { Button } from \"./ui/button\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"./ui/card\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"./ui/dialog\";\nimport { Input } from \"./ui/input\";\nimport { Label } from \"./ui/label\";\nimport { Spinner } from \"./ui/spinner\";\n\nexport interface CuratedWorkspaceTemplate {\n id?: string | null;\n templateId?: string | null;\n appId?: string | null;\n name: string;\n description?: string | null;\n source?: string | null;\n sourceDescription?: string | null;\n integrationSetup?: string | null;\n setupNote?: string | null;\n installed?: boolean | null;\n installedAppId?: string | null;\n liveUrl?: string | null;\n productUrl?: string | null;\n}\n\nexport type CuratedWorkspaceTemplatesResult =\n | CuratedWorkspaceTemplate[]\n | {\n templates: CuratedWorkspaceTemplate[];\n };\n\nexport interface WorkspaceTemplateLabels {\n appId: string;\n appIdDescription: string;\n cancel: string;\n integrationSetup: string;\n installed: string;\n remix: string;\n remixing: string;\n remixSuccess: string;\n remixError: string;\n appIdRequired: string;\n source: string;\n viewLiveApp: string;\n}\n\nconst DEFAULT_LABELS: WorkspaceTemplateLabels = {\n appId: \"App ID\",\n appIdDescription: \"Choose the URL-safe id for the new workspace app.\",\n cancel: \"Cancel\",\n integrationSetup: \"Integration setup\",\n installed: \"Installed\",\n remix: \"Remix into workspace\",\n remixing: \"Remixing…\",\n remixSuccess: \"Template remixed into your workspace.\",\n remixError: \"Could not remix this template\",\n appIdRequired: \"App ID is required.\",\n source: \"Source\",\n viewLiveApp: \"View the live app\",\n};\n\nexport interface WorkspaceTemplateCardProps {\n template: CuratedWorkspaceTemplate;\n defaultAppId?: string;\n labels?: Partial<WorkspaceTemplateLabels>;\n className?: string;\n onRemixSuccess?: (\n result: unknown,\n template: CuratedWorkspaceTemplate,\n ) => void;\n}\n\nfunction slugifyAppId(value: string): string {\n return (\n value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 48) || \"new-app\"\n );\n}\n\nfunction templateIdFor(template: CuratedWorkspaceTemplate): string {\n return template.templateId || template.id || template.appId || template.name;\n}\n\nfunction defaultAppIdFor(\n template: CuratedWorkspaceTemplate,\n defaultAppId?: string,\n): string {\n if (defaultAppId) return slugifyAppId(defaultAppId);\n const sourceId = slugifyAppId(template.appId || template.name);\n return `${sourceId}-remix`;\n}\n\nfunction stringifyError(error: unknown): string {\n if (error instanceof Error && error.message) return error.message;\n if (typeof error === \"string\") return error;\n return \"Unknown error\";\n}\n\nfunction mergeLabels(\n labels?: Partial<WorkspaceTemplateLabels>,\n): WorkspaceTemplateLabels {\n return { ...DEFAULT_LABELS, ...labels };\n}\n\nexport function WorkspaceTemplateCard({\n template,\n defaultAppId,\n labels: labelOverrides,\n className,\n onRemixSuccess,\n}: WorkspaceTemplateCardProps) {\n const labels = useMemo(() => mergeLabels(labelOverrides), [labelOverrides]);\n const [open, setOpen] = useState(false);\n const [appId, setAppId] = useState(() =>\n defaultAppIdFor(template, defaultAppId),\n );\n const isInstalled = Boolean(template.installed || template.installedAppId);\n const liveUrl = template.liveUrl || template.productUrl;\n const setupNote = template.integrationSetup || template.setupNote;\n const remix = useActionMutation(\"remix-workspace-template\", {\n onSuccess: (result) => {\n toast.success(labels.remixSuccess);\n setOpen(false);\n onRemixSuccess?.(result, template);\n },\n onError: (error) =>\n toast.error(`${labels.remixError}: ${stringifyError(error)}`),\n });\n\n useEffect(() => {\n if (open) {\n setAppId(defaultAppIdFor(template, defaultAppId));\n }\n }, [defaultAppId, open, template]);\n\n function submitRemix() {\n const trimmedAppId = appId.trim();\n if (!trimmedAppId) {\n toast.error(labels.appIdRequired);\n return;\n }\n\n remix.mutate({\n templateId: templateIdFor(template),\n appId: trimmedAppId,\n });\n }\n\n return (\n <Card\n className={cn(\n \"flex h-full flex-col border-border/60 bg-card/40 shadow-none transition-[background-color,border-color] hover:border-foreground/20 hover:bg-accent/15\",\n className,\n )}\n >\n <CardHeader className=\"gap-2 p-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex min-w-0 items-start gap-2.5\">\n <span className=\"mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-md border border-border/70 bg-muted/40 text-muted-foreground\">\n <IconFileText size={16} />\n </span>\n <div className=\"min-w-0\">\n <CardTitle className=\"truncate text-sm font-semibold\">\n {template.name}\n </CardTitle>\n {template.source || template.sourceDescription ? (\n <CardDescription className=\"mt-1 truncate text-xs\">\n <span className=\"font-medium text-foreground/70\">\n {labels.source}:\n </span>{\" \"}\n {template.sourceDescription || template.source}\n </CardDescription>\n ) : null}\n </div>\n </div>\n {isInstalled ? (\n <Badge\n variant=\"outline\"\n className=\"shrink-0 gap-1 border-primary/30 bg-primary/5 text-primary\"\n >\n <IconCircleCheck size={13} />\n {labels.installed}\n </Badge>\n ) : null}\n </div>\n </CardHeader>\n\n <CardContent className=\"flex flex-1 flex-col gap-3 p-4 pt-0\">\n {template.description ? (\n <p className=\"line-clamp-3 text-[13px] leading-5 text-muted-foreground\">\n {template.description}\n </p>\n ) : null}\n\n {setupNote ? (\n <Alert className=\"border-border/60 bg-muted/25 px-3 py-2 [&>svg]:left-3 [&>svg]:top-2.5\">\n <IconPlugConnected size={15} />\n <AlertDescription className=\"text-xs leading-5\">\n <span className=\"font-medium text-foreground/80\">\n {labels.integrationSetup}:\n </span>{\" \"}\n {setupNote}\n </AlertDescription>\n </Alert>\n ) : null}\n </CardContent>\n\n <CardFooter className=\"flex flex-wrap justify-between gap-2 p-4 pt-0\">\n {liveUrl ? (\n <Button variant=\"link\" size=\"sm\" className=\"h-8 px-0\" asChild>\n <a href={liveUrl} target=\"_blank\" rel=\"noreferrer\">\n {labels.viewLiveApp}\n <IconExternalLink />\n </a>\n </Button>\n ) : (\n <span />\n )}\n\n <Dialog\n open={open}\n onOpenChange={(nextOpen) => {\n if (!remix.isPending) setOpen(nextOpen);\n }}\n >\n <DialogTrigger asChild>\n <Button type=\"button\" size=\"sm\">\n <IconCopy />\n {labels.remix}\n </Button>\n </DialogTrigger>\n <DialogContent className=\"max-w-md\">\n <DialogHeader>\n <DialogTitle>{template.name}</DialogTitle>\n <DialogDescription>{labels.appIdDescription}</DialogDescription>\n </DialogHeader>\n <form\n className=\"flex flex-col gap-4\"\n onSubmit={(event) => {\n event.preventDefault();\n submitRemix();\n }}\n >\n <div className=\"flex flex-col gap-2\">\n <Label\n htmlFor={`workspace-template-app-id-${templateIdFor(template)}`}\n >\n {labels.appId}\n </Label>\n <Input\n id={`workspace-template-app-id-${templateIdFor(template)}`}\n value={appId}\n autoComplete=\"off\"\n onChange={(event) => setAppId(event.target.value)}\n disabled={remix.isPending}\n />\n </div>\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setOpen(false)}\n disabled={remix.isPending}\n >\n {labels.cancel}\n </Button>\n <Button type=\"submit\" disabled={remix.isPending}>\n {remix.isPending ? <Spinner /> : <IconArrowUpRight />}\n {remix.isPending ? labels.remixing : labels.remix}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n </CardFooter>\n </Card>\n );\n}\n\nexport interface WorkspaceTemplatesSectionProps {\n templates: CuratedWorkspaceTemplatesResult;\n title?: ReactNode;\n defaultAppId?: string;\n labels?: Partial<WorkspaceTemplateLabels>;\n className?: string;\n cardClassName?: string;\n onRemixSuccess?: (\n result: unknown,\n template: CuratedWorkspaceTemplate,\n ) => void;\n}\n\nfunction getTemplateItems(\n result: CuratedWorkspaceTemplatesResult,\n): CuratedWorkspaceTemplate[] {\n return Array.isArray(result) ? result : result.templates;\n}\n\nexport function WorkspaceTemplatesSection({\n templates: result,\n title,\n defaultAppId,\n labels,\n className,\n cardClassName,\n onRemixSuccess,\n}: WorkspaceTemplatesSectionProps) {\n const templates = getTemplateItems(result);\n\n if (templates.length === 0) return null;\n\n return (\n <section className={cn(\"flex flex-col gap-3\", className)}>\n {title ? <div className=\"text-sm font-semibold\">{title}</div> : null}\n <div className=\"grid gap-3 md:grid-cols-2\">\n {templates.map((template) => (\n <WorkspaceTemplateCard\n key={templateIdFor(template)}\n template={template}\n defaultAppId={defaultAppId}\n labels={labels}\n className={cardClassName}\n onRemixSuccess={onRemixSuccess}\n />\n ))}\n </div>\n </section>\n );\n}\n"]}
@@ -0,0 +1,14 @@
1
+ export interface ConnectedAppSummary {
2
+ id: string;
3
+ name: string;
4
+ description?: string;
5
+ url: string;
6
+ color?: string;
7
+ source?: "builtin" | "custom" | "workspace";
8
+ }
9
+ export interface WorkspaceAppId {
10
+ id: string;
11
+ isDispatch?: boolean;
12
+ }
13
+ export declare function filterOtherApps(connectedApps: ConnectedAppSummary[], workspaceApps: WorkspaceAppId[]): ConnectedAppSummary[];
14
+ //# sourceMappingURL=other-apps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"other-apps.d.ts","sourceRoot":"","sources":["../../src/lib/other-apps.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAWD,wBAAgB,eAAe,CAC7B,aAAa,EAAE,mBAAmB,EAAE,EACpC,aAAa,EAAE,cAAc,EAAE,GAC9B,mBAAmB,EAAE,CAiBvB"}
@@ -0,0 +1,30 @@
1
+ function isHttpUrl(value) {
2
+ try {
3
+ const url = new URL(value);
4
+ return url.protocol === "http:" || url.protocol === "https:";
5
+ }
6
+ catch {
7
+ return false;
8
+ }
9
+ }
10
+ export function filterOtherApps(connectedApps, workspaceApps) {
11
+ const workspaceAppIds = new Set([
12
+ "dispatch",
13
+ ...workspaceApps.map((app) => app.id.trim().toLowerCase()),
14
+ ]);
15
+ const seen = new Set();
16
+ return connectedApps
17
+ .filter((app) => {
18
+ const id = app.id.trim().toLowerCase();
19
+ if (!id || workspaceAppIds.has(id) || seen.has(id))
20
+ return false;
21
+ if (app.source === "workspace")
22
+ return false;
23
+ if (!isHttpUrl(app.url))
24
+ return false;
25
+ seen.add(id);
26
+ return true;
27
+ })
28
+ .sort((a, b) => a.name.localeCompare(b.name));
29
+ }
30
+ //# sourceMappingURL=other-apps.js.map