@agent-native/dispatch 0.40.43 → 0.40.44-nightly-20261029182928

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/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @agent-native/dispatch
2
2
 
3
+ ## 0.40.44-nightly-20261029182928
4
+
5
+ ### Patch Changes
6
+
7
+ - 568b298: Add an owner-only Builder backup status inspection that reports bounded metadata without downloading branch files.
8
+ - Updated dependencies [6eed332]
9
+ - Updated dependencies [d11cfc3]
10
+ - Updated dependencies [aa877cf]
11
+ - Updated dependencies [56b7564]
12
+ - Updated dependencies [568b298]
13
+ - Updated dependencies [39cb8ce]
14
+ - @agent-native/core@0.222.2-nightly-20261029182928
15
+ - @agent-native/toolkit@0.222.2-nightly-20261029182928
16
+
3
17
  ## 0.40.43
4
18
 
5
19
  ### Patch Changes
package/README.md CHANGED
@@ -119,6 +119,24 @@ import { Layout } from "@agent-native/dispatch/components";
119
119
 
120
120
  ## Verify a community template branch
121
121
 
122
+ When a branch verification fails, an organization owner or admin can call
123
+ `inspect-community-builder-backup` with only `branchName`. It reads bounded
124
+ backup and branch status metadata from the organization's saved Builder project
125
+ to show whether the backup is partial, valid, complete and current, whether the
126
+ branch is active, archived, deleted or unknown, and whether it is idle or has
127
+ unpushed changes. It only reads existing status metadata; it does not request a
128
+ backup, download a bundle, or verify app files.
129
+ `backupPartial` returns `missing` or `invalid` when the provider flag is absent
130
+ or malformed; it never coerces those cases to `false`.
131
+ An explicit provider `invalid`/`no-backup` status with no backup object is a
132
+ typed `status_no_backup` failure; other missing backup objects remain malformed
133
+ status failures.
134
+ `verificationPerformed` is always `false`. Use
135
+ `verify-curated-community-app` for the separate hash verification step.
136
+ The verifier requests a bundle-download URL and may refresh provider backup
137
+ state; this status action does not. Status metadata is diagnostic only and
138
+ never authorizes an install or a retry.
139
+
122
140
  Organization owners and admins can call `verify-curated-community-app` with
123
141
  `sourceId`, `appId`, and `branchName` to check an existing Builder branch in
124
142
  the organization's configured Builder project. Project selection and reviewed
@@ -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;AA6G7D,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA4GvD,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;AA8G7D,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA6GvD,CAAC"}
@@ -34,6 +34,7 @@ import grantVaultSecretsToApp from "./grant-vault-secrets-to-app.js";
34
34
  import grantWorkspaceResourcesToApp from "./grant-workspace-resources-to-app.js";
35
35
  import importAgentPack from "./import-agent-pack.js";
36
36
  import importAgent from "./import-agent.js";
37
+ import inspectCommunityBuilderBackup from "./inspect-community-builder-backup.js";
37
38
  import inspectConnectAgentCard from "./inspect-connect-agent-card.js";
38
39
  import installCuratedCommunityApp from "./install-curated-community-app.js";
39
40
  import listAgentPack from "./list-agent-pack.js";
@@ -170,6 +171,7 @@ export const dispatchActions = {
170
171
  "list-workspace-resources": listWorkspaceResources,
171
172
  "import-agent": importAgent,
172
173
  "inspect-connect-agent-card": inspectConnectAgentCard,
174
+ "inspect-community-builder-backup": inspectCommunityBuilderBackup,
173
175
  "import-agent-pack": importAgentPack,
174
176
  "install-curated-community-app": installCuratedCommunityApp,
175
177
  "list-agent-pack": listAgentPack,
@@ -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 claimWorkspaceAppOrganization from \"./claim-workspace-app-organization.js\";\nimport connectExternalAgent from \"./connect-external-agent.js\";\nimport createBrowserChatSession from \"./create-browser-chat-session.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 createWorkspaceAppEmbedSession from \"./create_workspace_app_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 importAgentPack from \"./import-agent-pack.js\";\nimport importAgent from \"./import-agent.js\";\nimport inspectConnectAgentCard from \"./inspect-connect-agent-card.js\";\nimport installCuratedCommunityApp from \"./install-curated-community-app.js\";\nimport listAgentPack from \"./list-agent-pack.js\";\nimport listAgentRunFailures from \"./list-agent-run-failures.js\";\nimport listAgentThreadSources from \"./list-agent-thread-sources.js\";\nimport listAvailableWorkspaceTemplates from \"./list-available-workspace-templates.js\";\nimport listConnectMarketplaceApps from \"./list-connect-marketplace-apps.js\";\nimport listConnectedAgents from \"./list-connected-agents.js\";\nimport listCuratedCommunityApps from \"./list-curated-community-apps.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 listWorkspaceConnections from \"./list-workspace-connections.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 readSlackThreadContext from \"./read-slack-thread-context.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 resolveIntegrationSourceContext from \"./resolve-integration-source-context.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 verifyCuratedCommunityApp from \"./verify-curated-community-app.js\";\nimport viewScreen from \"./view-screen.js\";\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 \"claim-workspace-app-organization\": claimWorkspaceAppOrganization,\n \"connect-external-agent\": connectExternalAgent,\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-browser-chat-session\": createBrowserChatSession,\n create_embed_session: createEmbedSession,\n \"create-workspace-app-embed-session\": createWorkspaceAppEmbedSession,\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-agent-run-failures\": listAgentRunFailures,\n \"list-available-workspace-templates\": listAvailableWorkspaceTemplates,\n \"list-curated-community-apps\": listCuratedCommunityApps,\n \"list-curated-workspace-templates\": listCuratedWorkspaceTemplates,\n \"list-connect-marketplace-apps\": listConnectMarketplaceApps,\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-connections\": listWorkspaceConnections,\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 \"import-agent\": importAgent,\n \"inspect-connect-agent-card\": inspectConnectAgentCard,\n \"import-agent-pack\": importAgentPack,\n \"install-curated-community-app\": installCuratedCommunityApp,\n \"list-agent-pack\": listAgentPack,\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 \"read-slack-thread-context\": readSlackThreadContext,\n \"reject-dispatch-change\": rejectDispatchChange,\n \"reject-dream-proposal\": rejectDreamProposal,\n \"remove-pending-workspace-app\": removePendingWorkspaceApp,\n \"resolve-integration-source-context\": resolveIntegrationSourceContext,\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 \"verify-curated-community-app\": verifyCuratedCommunityApp,\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 claimWorkspaceAppOrganization from \"./claim-workspace-app-organization.js\";\nimport connectExternalAgent from \"./connect-external-agent.js\";\nimport createBrowserChatSession from \"./create-browser-chat-session.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 createWorkspaceAppEmbedSession from \"./create_workspace_app_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 importAgentPack from \"./import-agent-pack.js\";\nimport importAgent from \"./import-agent.js\";\nimport inspectCommunityBuilderBackup from \"./inspect-community-builder-backup.js\";\nimport inspectConnectAgentCard from \"./inspect-connect-agent-card.js\";\nimport installCuratedCommunityApp from \"./install-curated-community-app.js\";\nimport listAgentPack from \"./list-agent-pack.js\";\nimport listAgentRunFailures from \"./list-agent-run-failures.js\";\nimport listAgentThreadSources from \"./list-agent-thread-sources.js\";\nimport listAvailableWorkspaceTemplates from \"./list-available-workspace-templates.js\";\nimport listConnectMarketplaceApps from \"./list-connect-marketplace-apps.js\";\nimport listConnectedAgents from \"./list-connected-agents.js\";\nimport listCuratedCommunityApps from \"./list-curated-community-apps.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 listWorkspaceConnections from \"./list-workspace-connections.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 readSlackThreadContext from \"./read-slack-thread-context.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 resolveIntegrationSourceContext from \"./resolve-integration-source-context.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 verifyCuratedCommunityApp from \"./verify-curated-community-app.js\";\nimport viewScreen from \"./view-screen.js\";\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 \"claim-workspace-app-organization\": claimWorkspaceAppOrganization,\n \"connect-external-agent\": connectExternalAgent,\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-browser-chat-session\": createBrowserChatSession,\n create_embed_session: createEmbedSession,\n \"create-workspace-app-embed-session\": createWorkspaceAppEmbedSession,\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-agent-run-failures\": listAgentRunFailures,\n \"list-available-workspace-templates\": listAvailableWorkspaceTemplates,\n \"list-curated-community-apps\": listCuratedCommunityApps,\n \"list-curated-workspace-templates\": listCuratedWorkspaceTemplates,\n \"list-connect-marketplace-apps\": listConnectMarketplaceApps,\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-connections\": listWorkspaceConnections,\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 \"import-agent\": importAgent,\n \"inspect-connect-agent-card\": inspectConnectAgentCard,\n \"inspect-community-builder-backup\": inspectCommunityBuilderBackup,\n \"import-agent-pack\": importAgentPack,\n \"install-curated-community-app\": installCuratedCommunityApp,\n \"list-agent-pack\": listAgentPack,\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 \"read-slack-thread-context\": readSlackThreadContext,\n \"reject-dispatch-change\": rejectDispatchChange,\n \"reject-dream-proposal\": rejectDreamProposal,\n \"remove-pending-workspace-app\": removePendingWorkspaceApp,\n \"resolve-integration-source-context\": resolveIntegrationSourceContext,\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 \"verify-curated-community-app\": verifyCuratedCommunityApp,\n \"view-screen\": viewScreen,\n};\n"]}
@@ -0,0 +1,15 @@
1
+ declare const _default: import("@agent-native/core/action").ActionDefinition<{
2
+ branchName: string;
3
+ }, {
4
+ branchName: string;
5
+ branchState: "active" | "archived" | "deleted" | "unknown";
6
+ backupPartial: "invalid" | "missing" | boolean;
7
+ backupValid: boolean;
8
+ backupComplete: boolean;
9
+ backupCurrent: boolean;
10
+ agentIdle: boolean;
11
+ hasUnpushedChanges: boolean;
12
+ verificationPerformed: false;
13
+ }>;
14
+ export default _default;
15
+ //# sourceMappingURL=inspect-community-builder-backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-community-builder-backup.d.ts","sourceRoot":"","sources":["../../src/actions/inspect-community-builder-backup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ import { defineAction } from "@agent-native/core/action";
2
+ import { z } from "zod";
3
+ import { communityInstallVerificationErrors, inspectCommunityBuilderBackup, } from "../server/lib/community-install-verification.js";
4
+ const resultSchema = z.object({
5
+ branchName: z.string(),
6
+ branchState: z
7
+ .enum(["active", "archived", "deleted", "unknown"])
8
+ .describe("Whether Builder reports the branch active, archived, deleted or unknown"),
9
+ backupPartial: z
10
+ .union([z.boolean(), z.literal("missing"), z.literal("invalid")])
11
+ .describe('Whether Builder marks the existing backup partial; "missing" or "invalid" means its flag could not be interpreted'),
12
+ backupValid: z
13
+ .boolean()
14
+ .describe("Whether Builder reports the backup state and outcome as valid"),
15
+ backupComplete: z
16
+ .boolean()
17
+ .describe("Whether Builder reports the backup status as completed"),
18
+ backupCurrent: z
19
+ .boolean()
20
+ .describe("Whether recorded commit and activity metadata match the branch"),
21
+ agentIdle: z
22
+ .boolean()
23
+ .describe("Whether Builder reports the branch agent idle"),
24
+ hasUnpushedChanges: z
25
+ .boolean()
26
+ .describe("Whether Builder reports unpushed branch changes"),
27
+ verificationPerformed: z
28
+ .literal(false)
29
+ .describe("Always false; this action does not verify branch file bytes"),
30
+ });
31
+ export default defineAction({
32
+ description: "Read existing backup metadata for a branch in the saved Builder project. Returns partial, valid, complete and current status plus idle and unpushed flags; it does not download files or verify a community app.",
33
+ schema: z.object({
34
+ branchName: z
35
+ .string()
36
+ .min(1)
37
+ .max(256)
38
+ .describe("Existing Builder branch name in the saved project"),
39
+ }),
40
+ outputSchema: resultSchema,
41
+ mcpOutputSchema: true,
42
+ http: { method: "GET" },
43
+ readOnly: true,
44
+ requiresAuth: true,
45
+ errors: communityInstallVerificationErrors,
46
+ run: async (input, context) => {
47
+ if (!context ||
48
+ context.caller === "a2a" ||
49
+ context.networkProtocol === "a2a" ||
50
+ context.caller === "automation" ||
51
+ context.caller === "mcp-widget" ||
52
+ context.caller === "mcp-widget-write") {
53
+ return communityInstallVerificationErrors.fail("A directly authenticated organization owner or admin is required to inspect a Builder branch backup.", "community_verification_identity_required", { statusCode: 403 });
54
+ }
55
+ return inspectCommunityBuilderBackup(input);
56
+ },
57
+ });
58
+ //# sourceMappingURL=inspect-community-builder-backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-community-builder-backup.js","sourceRoot":"","sources":["../../src/actions/inspect-community-builder-backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAyB,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,kCAAkC,EAClC,6BAA6B,GAC9B,MAAM,iDAAiD,CAAC;AAEzD,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,WAAW,EAAE,CAAC;SACX,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;SAClD,QAAQ,CACP,yEAAyE,CAC1E;IACH,aAAa,EAAE,CAAC;SACb,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;SAChE,QAAQ,CACP,mHAAmH,CACpH;IACH,WAAW,EAAE,CAAC;SACX,OAAO,EAAE;SACT,QAAQ,CAAC,+DAA+D,CAAC;IAC5E,cAAc,EAAE,CAAC;SACd,OAAO,EAAE;SACT,QAAQ,CAAC,wDAAwD,CAAC;IACrE,aAAa,EAAE,CAAC;SACb,OAAO,EAAE;SACT,QAAQ,CAAC,gEAAgE,CAAC;IAC7E,SAAS,EAAE,CAAC;SACT,OAAO,EAAE;SACT,QAAQ,CAAC,+CAA+C,CAAC;IAC5D,kBAAkB,EAAE,CAAC;SAClB,OAAO,EAAE;SACT,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,qBAAqB,EAAE,CAAC;SACrB,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,6DAA6D,CAAC;CAC3E,CAAC,CAAC;AAEH,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,kNAAkN;IACpN,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,CAAC,mDAAmD,CAAC;KACjE,CAAC;IACF,YAAY,EAAE,YAAY;IAC1B,eAAe,EAAE,IAAI;IACrB,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;IACvB,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,IAAI;IAClB,MAAM,EAAE,kCAAkC;IAC1C,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAA0B,EAAE,EAAE;QAC/C,IACE,CAAC,OAAO;YACR,OAAO,CAAC,MAAM,KAAK,KAAK;YACxB,OAAO,CAAC,eAAe,KAAK,KAAK;YACjC,OAAO,CAAC,MAAM,KAAK,YAAY;YAC/B,OAAO,CAAC,MAAM,KAAK,YAAY;YAC/B,OAAO,CAAC,MAAM,KAAK,kBAAkB,EACrC,CAAC;YACD,OAAO,kCAAkC,CAAC,IAAI,CAC5C,sGAAsG,EACtG,0CAA0C,EAC1C,EAAE,UAAU,EAAE,GAAG,EAAE,CACpB,CAAC;QACJ,CAAC;QACD,OAAO,6BAA6B,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;CACF,CAAC,CAAC","sourcesContent":["import { defineAction, type ActionRunContext } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport {\n communityInstallVerificationErrors,\n inspectCommunityBuilderBackup,\n} from \"../server/lib/community-install-verification.js\";\n\nconst resultSchema = z.object({\n branchName: z.string(),\n branchState: z\n .enum([\"active\", \"archived\", \"deleted\", \"unknown\"])\n .describe(\n \"Whether Builder reports the branch active, archived, deleted or unknown\",\n ),\n backupPartial: z\n .union([z.boolean(), z.literal(\"missing\"), z.literal(\"invalid\")])\n .describe(\n 'Whether Builder marks the existing backup partial; \"missing\" or \"invalid\" means its flag could not be interpreted',\n ),\n backupValid: z\n .boolean()\n .describe(\"Whether Builder reports the backup state and outcome as valid\"),\n backupComplete: z\n .boolean()\n .describe(\"Whether Builder reports the backup status as completed\"),\n backupCurrent: z\n .boolean()\n .describe(\"Whether recorded commit and activity metadata match the branch\"),\n agentIdle: z\n .boolean()\n .describe(\"Whether Builder reports the branch agent idle\"),\n hasUnpushedChanges: z\n .boolean()\n .describe(\"Whether Builder reports unpushed branch changes\"),\n verificationPerformed: z\n .literal(false)\n .describe(\"Always false; this action does not verify branch file bytes\"),\n});\n\nexport default defineAction({\n description:\n \"Read existing backup metadata for a branch in the saved Builder project. Returns partial, valid, complete and current status plus idle and unpushed flags; it does not download files or verify a community app.\",\n schema: z.object({\n branchName: z\n .string()\n .min(1)\n .max(256)\n .describe(\"Existing Builder branch name in the saved project\"),\n }),\n outputSchema: resultSchema,\n mcpOutputSchema: true,\n http: { method: \"GET\" },\n readOnly: true,\n requiresAuth: true,\n errors: communityInstallVerificationErrors,\n run: async (input, context?: ActionRunContext) => {\n if (\n !context ||\n context.caller === \"a2a\" ||\n context.networkProtocol === \"a2a\" ||\n context.caller === \"automation\" ||\n context.caller === \"mcp-widget\" ||\n context.caller === \"mcp-widget-write\"\n ) {\n return communityInstallVerificationErrors.fail(\n \"A directly authenticated organization owner or admin is required to inspect a Builder branch backup.\",\n \"community_verification_identity_required\",\n { statusCode: 403 },\n );\n }\n return inspectCommunityBuilderBackup(input);\n },\n});\n"]}
@@ -6,6 +6,18 @@ declare const _default: import("@agent-native/core/action").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/action").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
@@ -1,4 +1,17 @@
1
1
  export declare const communityInstallVerificationErrors: import("@agent-native/core/action").ActionErrors<"community_verification_app_id_invalid" | "community_verification_app_id_shadows_first_party" | "community_verification_branch_invalid" | "community_verification_catalog_invalid" | "community_verification_identity_required" | "community_verification_integrity_failed" | "community_verification_internal_error" | "community_verification_owner_required" | "community_verification_project_required" | "community_verification_project_unavailable" | "community_verification_readback_forbidden" | "community_verification_readback_unavailable" | "community_verification_readback_unverified" | "community_verification_role_unavailable" | "community_verification_source_unknown">;
2
+ export declare function inspectCommunityBuilderBackup(input: {
3
+ branchName: string;
4
+ }): Promise<{
5
+ branchState: "active" | "archived" | "deleted" | "unknown";
6
+ backupPartial: "invalid" | "missing" | boolean;
7
+ backupValid: boolean;
8
+ backupComplete: boolean;
9
+ backupCurrent: boolean;
10
+ agentIdle: boolean;
11
+ hasUnpushedChanges: boolean;
12
+ verificationPerformed: false;
13
+ branchName: string;
14
+ }>;
2
15
  export declare function verifyCuratedCommunityApp(input: {
3
16
  sourceId: string;
4
17
  appId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"community-install-verification.d.ts","sourceRoot":"","sources":["../../../src/server/lib/community-install-verification.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,kCAAkC,itBAgB9C,CAAC;AAkMF,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,wFA8FA"}
1
+ {"version":3,"file":"community-install-verification.d.ts","sourceRoot":"","sources":["../../../src/server/lib/community-install-verification.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,kCAAkC,itBAgB9C,CAAC;AAmMF,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,UAAU,EAAE,MAAM,CAAC;CACpB;;;;;;;;;;GA+BA;AAED,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,wFA8FA"}
@@ -1,5 +1,5 @@
1
1
  import { defineActionErrors } from "@agent-native/core/action";
2
- import { BuilderBranchFilesError, getRequestContext, readBuilderBranchFiles, readOrgMemberRole, } from "@agent-native/core/server";
2
+ import { BuilderBranchFilesError, getRequestContext, readBuilderBranchBackupStatus, readBuilderBranchFiles, readOrgMemberRole, } from "@agent-native/core/server";
3
3
  import { getWorkspaceAppIdValidationError, normalizeWorkspaceAppId, } from "@agent-native/core/shared";
4
4
  import { BUILTIN_AGENT_CATALOG_IDS, HIDDEN_FIRST_PARTY_AGENT_IDS, } from "@agent-native/core/shared/first-party-agents";
5
5
  import { getAppCreationSettings } from "./app-creation-store.js";
@@ -15,6 +15,7 @@ const READBACK_STAGES = new Set([
15
15
  "status_request",
16
16
  "status_shape",
17
17
  "status_binding",
18
+ "status_no_backup",
18
19
  "status_currentness",
19
20
  "post_read_status_request",
20
21
  "post_read_status_shape",
@@ -127,6 +128,30 @@ function failBranchReadback(error) {
127
128
  details: { readbackStage: readbackStage(error) },
128
129
  });
129
130
  }
131
+ export async function inspectCommunityBuilderBackup(input) {
132
+ const { orgId, ownerEmail } = requireHumanOrgOwner();
133
+ await requireOrganizationOwnerOrAdmin(orgId, ownerEmail);
134
+ const branchName = requireBranchName(input.branchName);
135
+ let settings;
136
+ try {
137
+ settings = await getAppCreationSettings();
138
+ }
139
+ catch {
140
+ verificationFail("The organization Builder project setting could not be read. Try again shortly.", "community_verification_project_unavailable", { statusCode: 503 });
141
+ }
142
+ const projectId = settings.savedBuilderProjectId?.trim();
143
+ if (!projectId || settings.builderProjectId !== projectId) {
144
+ verificationFail("Configure a Builder project for this organization before inspecting a branch backup.", "community_verification_project_required", { statusCode: 409 });
145
+ }
146
+ let status;
147
+ try {
148
+ status = await readBuilderBranchBackupStatus({ projectId, branchName });
149
+ }
150
+ catch (error) {
151
+ failBranchReadback(error);
152
+ }
153
+ return { branchName, ...status };
154
+ }
130
155
  export async function verifyCuratedCommunityApp(input) {
131
156
  const { orgId, ownerEmail } = requireHumanOrgOwner();
132
157
  await requireOrganizationOwnerOrAdmin(orgId, ownerEmail);
@@ -1 +1 @@
1
- {"version":3,"file":"community-install-verification.js","sourceRoot":"","sources":["../../../src/server/lib/community-install-verification.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineActionErrors } from \"@agent-native/core/action\";\nimport {\n BuilderBranchFilesError,\n getRequestContext,\n readBuilderBranchFiles,\n readOrgMemberRole,\n} from \"@agent-native/core/server\";\nimport {\n getWorkspaceAppIdValidationError,\n normalizeWorkspaceAppId,\n} from \"@agent-native/core/shared\";\nimport {\n BUILTIN_AGENT_CATALOG_IDS,\n HIDDEN_FIRST_PARTY_AGENT_IDS,\n} from \"@agent-native/core/shared/first-party-agents\";\n\nimport { getAppCreationSettings } from \"./app-creation-store.js\";\nimport { CURATED_COMMUNITY_APP_SOURCES } from \"./community-apps.js\";\nimport {\n CommunityInstallIntegrityError,\n verifyCommunityBranchFiles,\n} from \"./community-install-integrity.js\";\nimport { CURATED_WORKSPACE_TEMPLATES } from \"./curated-workspace-templates.js\";\nimport { currentOrgId, currentOwnerEmail } from \"./dispatch-store.js\";\n\nexport const communityInstallVerificationErrors = defineActionErrors(\n \"community_verification_identity_required\",\n \"community_verification_role_unavailable\",\n \"community_verification_owner_required\",\n \"community_verification_source_unknown\",\n \"community_verification_app_id_invalid\",\n \"community_verification_app_id_shadows_first_party\",\n \"community_verification_branch_invalid\",\n \"community_verification_project_required\",\n \"community_verification_project_unavailable\",\n \"community_verification_readback_unavailable\",\n \"community_verification_readback_forbidden\",\n \"community_verification_readback_unverified\",\n \"community_verification_integrity_failed\",\n \"community_verification_catalog_invalid\",\n \"community_verification_internal_error\",\n);\n\nfunction verificationFail(\n message: string,\n code: Parameters<typeof communityInstallVerificationErrors.fail>[1],\n options: { statusCode: number; details?: Record<string, unknown> },\n): never {\n return communityInstallVerificationErrors.fail(message, code, options);\n}\n\nconst READBACK_STAGES = new Set([\n \"status_request\",\n \"status_shape\",\n \"status_binding\",\n \"status_currentness\",\n \"post_read_status_request\",\n \"post_read_status_shape\",\n \"post_read_status_binding\",\n \"post_read_status_currentness\",\n \"download_url_request\",\n \"download_url_shape\",\n \"download_url_binding\",\n \"bundle_download\",\n \"bundle_read\",\n \"bundle_digest\",\n \"bundle_parse\",\n \"target_subtree_missing\",\n \"post_read_currentness\",\n \"app_integrity\",\n \"snapshot_ref\",\n]);\n\nfunction readbackStage(error: unknown): string {\n const stage =\n error && typeof error === \"object\"\n ? (error as { readbackStage?: unknown }).readbackStage\n : undefined;\n return typeof stage === \"string\" && READBACK_STAGES.has(stage)\n ? stage\n : \"unknown\";\n}\n\nfunction requireHumanOrgOwner(): { orgId: string; ownerEmail: string } {\n const context = getRequestContext();\n const orgId = currentOrgId();\n const contextEmail = context?.userEmail?.trim().toLowerCase();\n if (\n !context ||\n !context.authUserId?.trim() ||\n !contextEmail ||\n !orgId ||\n context.orgId !== orgId ||\n context.isSyntheticTraffic === true ||\n context.isIntegrationCaller === true ||\n context.integration !== undefined ||\n context.verifiedServiceIdentity !== undefined ||\n context.a2aIdentityAssurance !== undefined ||\n context.agentRunAnonymous === true ||\n context.authCapability !== undefined ||\n typeof context.identityAuthenticatedAtMs !== \"number\" ||\n !Number.isFinite(context.identityAuthenticatedAtMs) ||\n context.orgScope === \"personal\" ||\n /^integration@|@integration\\.local$/i.test(contextEmail)\n ) {\n verificationFail(\n \"Sign in directly to an organization as an owner or admin to verify a Builder community branch.\",\n \"community_verification_identity_required\",\n { statusCode: 403 },\n );\n }\n\n let ownerEmail: string;\n try {\n ownerEmail = currentOwnerEmail().trim().toLowerCase();\n } catch {\n verificationFail(\n \"An authenticated organization owner or admin is required.\",\n \"community_verification_identity_required\",\n { statusCode: 403 },\n );\n }\n if (!ownerEmail || ownerEmail !== contextEmail) {\n verificationFail(\n \"An authenticated organization owner or admin is required.\",\n \"community_verification_identity_required\",\n { statusCode: 403 },\n );\n }\n\n return { orgId, ownerEmail };\n}\n\nasync function requireOrganizationOwnerOrAdmin(\n orgId: string,\n ownerEmail: string,\n): Promise<void> {\n let role: string | null;\n try {\n role = await readOrgMemberRole(orgId, ownerEmail);\n } catch {\n verificationFail(\n \"Organization membership could not be verified. Try again shortly.\",\n \"community_verification_role_unavailable\",\n { statusCode: 503 },\n );\n }\n if (role !== \"owner\" && role !== \"admin\") {\n verificationFail(\n \"Only organization owners and admins can verify Builder community branches.\",\n \"community_verification_owner_required\",\n { statusCode: 403 },\n );\n }\n}\n\nfunction requireAppId(appIdInput: string): string {\n const appId = normalizeWorkspaceAppId(appIdInput);\n if (!appId || appId.length > 64 || getWorkspaceAppIdValidationError(appId)) {\n verificationFail(\n \"Choose a valid, non-reserved workspace app id.\",\n \"community_verification_app_id_invalid\",\n { statusCode: 400 },\n );\n }\n if (\n CURATED_WORKSPACE_TEMPLATES.some((template) => template.id === appId) ||\n BUILTIN_AGENT_CATALOG_IDS.includes(appId) ||\n HIDDEN_FIRST_PARTY_AGENT_IDS.has(appId)\n ) {\n verificationFail(\n \"Community apps cannot use a first-party template app id.\",\n \"community_verification_app_id_shadows_first_party\",\n { statusCode: 409 },\n );\n }\n return appId;\n}\n\nfunction requireBranchName(branchNameInput: string): string {\n const branchName = branchNameInput.trim();\n if (\n branchName !== branchNameInput ||\n branchName.length > 256 ||\n !branchName ||\n branchName\n .split(\"/\")\n .some(\n (part) =>\n !/^[A-Za-z0-9_.-]+$/.test(part) || part === \".\" || part === \"..\",\n )\n ) {\n verificationFail(\n \"Choose a valid Builder branch name.\",\n \"community_verification_branch_invalid\",\n { statusCode: 400 },\n );\n }\n return branchName;\n}\n\nfunction failBranchReadback(error: unknown): never {\n if (error instanceof BuilderBranchFilesError) {\n if (error.code === \"forbidden\" || error.code === \"not_connected\") {\n verificationFail(\n \"Builder project read access is missing or does not include this project.\",\n \"community_verification_readback_forbidden\",\n { statusCode: error.code === \"forbidden\" ? 403 : 409 },\n );\n }\n if (error.code === \"unverified\" || error.code === \"integrity_failed\") {\n verificationFail(\n \"Builder could not provide a complete, identity-bound branch snapshot.\",\n \"community_verification_readback_unverified\",\n { statusCode: 422, details: { readbackStage: readbackStage(error) } },\n );\n }\n if (error.code === \"invalid_request\") {\n verificationFail(\n \"Builder rejected the requested branch reference.\",\n \"community_verification_branch_invalid\",\n { statusCode: 400 },\n );\n }\n }\n verificationFail(\n \"Builder branch readback is unavailable. Try again later.\",\n \"community_verification_readback_unavailable\",\n {\n statusCode: 503,\n details: { readbackStage: readbackStage(error) },\n },\n );\n}\n\nexport async function verifyCuratedCommunityApp(input: {\n sourceId: string;\n appId: string;\n branchName: string;\n}) {\n const { orgId, ownerEmail } = requireHumanOrgOwner();\n await requireOrganizationOwnerOrAdmin(orgId, ownerEmail);\n\n const source = CURATED_COMMUNITY_APP_SOURCES.find(\n (candidate) => candidate.id === input.sourceId.trim(),\n );\n if (!source) {\n verificationFail(\n \"That community app is not in Dispatch's reviewed install catalog.\",\n \"community_verification_source_unknown\",\n { statusCode: 404 },\n );\n }\n\n const appId = requireAppId(input.appId);\n const branchName = requireBranchName(input.branchName);\n\n let settings: Awaited<ReturnType<typeof getAppCreationSettings>>;\n try {\n settings = await getAppCreationSettings();\n } catch {\n verificationFail(\n \"The organization Builder project setting could not be read. Try again later.\",\n \"community_verification_project_unavailable\",\n { statusCode: 503 },\n );\n }\n const projectId = settings.savedBuilderProjectId?.trim();\n if (!projectId || settings.builderProjectId !== projectId) {\n verificationFail(\n \"Configure a Builder project for this organization before verifying a branch.\",\n \"community_verification_project_required\",\n { statusCode: 409 },\n );\n }\n\n let snapshot: Awaited<ReturnType<typeof readBuilderBranchFiles>>;\n try {\n snapshot = await readBuilderBranchFiles({\n projectId,\n branchName,\n appPath: `apps/${appId}`,\n });\n } catch (error) {\n failBranchReadback(error);\n }\n\n try {\n return verifyCommunityBranchFiles(source, appId, snapshot, {\n projectId,\n branchName,\n });\n } catch (error) {\n if (!(error instanceof CommunityInstallIntegrityError)) {\n verificationFail(\n \"Community branch verification could not be completed.\",\n \"community_verification_internal_error\",\n { statusCode: 500 },\n );\n }\n\n switch (error.code) {\n case \"file_set_mismatch\":\n case \"file_mode_unsupported\":\n case \"file_too_large\":\n case \"total_too_large\":\n case \"blob_mismatch\":\n verificationFail(\n \"Builder branch files do not match the reviewed community template.\",\n \"community_verification_integrity_failed\",\n { statusCode: 422, details: { readbackStage: \"app_integrity\" } },\n );\n case \"ref_mismatch\":\n case \"invalid_snapshot\":\n verificationFail(\n \"Builder could not provide a complete, identity-bound branch snapshot.\",\n \"community_verification_readback_unverified\",\n { statusCode: 422, details: { readbackStage: \"snapshot_ref\" } },\n );\n case \"invalid_source\":\n verificationFail(\n \"The reviewed community catalog entry is invalid.\",\n \"community_verification_catalog_invalid\",\n { statusCode: 500 },\n );\n case \"invalid_target\":\n verificationFail(\n \"Community branch verification could not be completed.\",\n \"community_verification_internal_error\",\n { statusCode: 500 },\n );\n }\n }\n}\n"]}
1
+ {"version":3,"file":"community-install-verification.js","sourceRoot":"","sources":["../../../src/server/lib/community-install-verification.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineActionErrors } from \"@agent-native/core/action\";\nimport {\n BuilderBranchFilesError,\n getRequestContext,\n readBuilderBranchBackupStatus,\n readBuilderBranchFiles,\n readOrgMemberRole,\n} from \"@agent-native/core/server\";\nimport {\n getWorkspaceAppIdValidationError,\n normalizeWorkspaceAppId,\n} from \"@agent-native/core/shared\";\nimport {\n BUILTIN_AGENT_CATALOG_IDS,\n HIDDEN_FIRST_PARTY_AGENT_IDS,\n} from \"@agent-native/core/shared/first-party-agents\";\n\nimport { getAppCreationSettings } from \"./app-creation-store.js\";\nimport { CURATED_COMMUNITY_APP_SOURCES } from \"./community-apps.js\";\nimport {\n CommunityInstallIntegrityError,\n verifyCommunityBranchFiles,\n} from \"./community-install-integrity.js\";\nimport { CURATED_WORKSPACE_TEMPLATES } from \"./curated-workspace-templates.js\";\nimport { currentOrgId, currentOwnerEmail } from \"./dispatch-store.js\";\n\nexport const communityInstallVerificationErrors = defineActionErrors(\n \"community_verification_identity_required\",\n \"community_verification_role_unavailable\",\n \"community_verification_owner_required\",\n \"community_verification_source_unknown\",\n \"community_verification_app_id_invalid\",\n \"community_verification_app_id_shadows_first_party\",\n \"community_verification_branch_invalid\",\n \"community_verification_project_required\",\n \"community_verification_project_unavailable\",\n \"community_verification_readback_unavailable\",\n \"community_verification_readback_forbidden\",\n \"community_verification_readback_unverified\",\n \"community_verification_integrity_failed\",\n \"community_verification_catalog_invalid\",\n \"community_verification_internal_error\",\n);\n\nfunction verificationFail(\n message: string,\n code: Parameters<typeof communityInstallVerificationErrors.fail>[1],\n options: { statusCode: number; details?: Record<string, unknown> },\n): never {\n return communityInstallVerificationErrors.fail(message, code, options);\n}\n\nconst READBACK_STAGES = new Set([\n \"status_request\",\n \"status_shape\",\n \"status_binding\",\n \"status_no_backup\",\n \"status_currentness\",\n \"post_read_status_request\",\n \"post_read_status_shape\",\n \"post_read_status_binding\",\n \"post_read_status_currentness\",\n \"download_url_request\",\n \"download_url_shape\",\n \"download_url_binding\",\n \"bundle_download\",\n \"bundle_read\",\n \"bundle_digest\",\n \"bundle_parse\",\n \"target_subtree_missing\",\n \"post_read_currentness\",\n \"app_integrity\",\n \"snapshot_ref\",\n]);\n\nfunction readbackStage(error: unknown): string {\n const stage =\n error && typeof error === \"object\"\n ? (error as { readbackStage?: unknown }).readbackStage\n : undefined;\n return typeof stage === \"string\" && READBACK_STAGES.has(stage)\n ? stage\n : \"unknown\";\n}\n\nfunction requireHumanOrgOwner(): { orgId: string; ownerEmail: string } {\n const context = getRequestContext();\n const orgId = currentOrgId();\n const contextEmail = context?.userEmail?.trim().toLowerCase();\n if (\n !context ||\n !context.authUserId?.trim() ||\n !contextEmail ||\n !orgId ||\n context.orgId !== orgId ||\n context.isSyntheticTraffic === true ||\n context.isIntegrationCaller === true ||\n context.integration !== undefined ||\n context.verifiedServiceIdentity !== undefined ||\n context.a2aIdentityAssurance !== undefined ||\n context.agentRunAnonymous === true ||\n context.authCapability !== undefined ||\n typeof context.identityAuthenticatedAtMs !== \"number\" ||\n !Number.isFinite(context.identityAuthenticatedAtMs) ||\n context.orgScope === \"personal\" ||\n /^integration@|@integration\\.local$/i.test(contextEmail)\n ) {\n verificationFail(\n \"Sign in directly to an organization as an owner or admin to verify a Builder community branch.\",\n \"community_verification_identity_required\",\n { statusCode: 403 },\n );\n }\n\n let ownerEmail: string;\n try {\n ownerEmail = currentOwnerEmail().trim().toLowerCase();\n } catch {\n verificationFail(\n \"An authenticated organization owner or admin is required.\",\n \"community_verification_identity_required\",\n { statusCode: 403 },\n );\n }\n if (!ownerEmail || ownerEmail !== contextEmail) {\n verificationFail(\n \"An authenticated organization owner or admin is required.\",\n \"community_verification_identity_required\",\n { statusCode: 403 },\n );\n }\n\n return { orgId, ownerEmail };\n}\n\nasync function requireOrganizationOwnerOrAdmin(\n orgId: string,\n ownerEmail: string,\n): Promise<void> {\n let role: string | null;\n try {\n role = await readOrgMemberRole(orgId, ownerEmail);\n } catch {\n verificationFail(\n \"Organization membership could not be verified. Try again shortly.\",\n \"community_verification_role_unavailable\",\n { statusCode: 503 },\n );\n }\n if (role !== \"owner\" && role !== \"admin\") {\n verificationFail(\n \"Only organization owners and admins can verify Builder community branches.\",\n \"community_verification_owner_required\",\n { statusCode: 403 },\n );\n }\n}\n\nfunction requireAppId(appIdInput: string): string {\n const appId = normalizeWorkspaceAppId(appIdInput);\n if (!appId || appId.length > 64 || getWorkspaceAppIdValidationError(appId)) {\n verificationFail(\n \"Choose a valid, non-reserved workspace app id.\",\n \"community_verification_app_id_invalid\",\n { statusCode: 400 },\n );\n }\n if (\n CURATED_WORKSPACE_TEMPLATES.some((template) => template.id === appId) ||\n BUILTIN_AGENT_CATALOG_IDS.includes(appId) ||\n HIDDEN_FIRST_PARTY_AGENT_IDS.has(appId)\n ) {\n verificationFail(\n \"Community apps cannot use a first-party template app id.\",\n \"community_verification_app_id_shadows_first_party\",\n { statusCode: 409 },\n );\n }\n return appId;\n}\n\nfunction requireBranchName(branchNameInput: string): string {\n const branchName = branchNameInput.trim();\n if (\n branchName !== branchNameInput ||\n branchName.length > 256 ||\n !branchName ||\n branchName\n .split(\"/\")\n .some(\n (part) =>\n !/^[A-Za-z0-9_.-]+$/.test(part) || part === \".\" || part === \"..\",\n )\n ) {\n verificationFail(\n \"Choose a valid Builder branch name.\",\n \"community_verification_branch_invalid\",\n { statusCode: 400 },\n );\n }\n return branchName;\n}\n\nfunction failBranchReadback(error: unknown): never {\n if (error instanceof BuilderBranchFilesError) {\n if (error.code === \"forbidden\" || error.code === \"not_connected\") {\n verificationFail(\n \"Builder project read access is missing or does not include this project.\",\n \"community_verification_readback_forbidden\",\n { statusCode: error.code === \"forbidden\" ? 403 : 409 },\n );\n }\n if (error.code === \"unverified\" || error.code === \"integrity_failed\") {\n verificationFail(\n \"Builder could not provide a complete, identity-bound branch snapshot.\",\n \"community_verification_readback_unverified\",\n { statusCode: 422, details: { readbackStage: readbackStage(error) } },\n );\n }\n if (error.code === \"invalid_request\") {\n verificationFail(\n \"Builder rejected the requested branch reference.\",\n \"community_verification_branch_invalid\",\n { statusCode: 400 },\n );\n }\n }\n verificationFail(\n \"Builder branch readback is unavailable. Try again later.\",\n \"community_verification_readback_unavailable\",\n {\n statusCode: 503,\n details: { readbackStage: readbackStage(error) },\n },\n );\n}\n\nexport async function inspectCommunityBuilderBackup(input: {\n branchName: string;\n}) {\n const { orgId, ownerEmail } = requireHumanOrgOwner();\n await requireOrganizationOwnerOrAdmin(orgId, ownerEmail);\n\n const branchName = requireBranchName(input.branchName);\n let settings: Awaited<ReturnType<typeof getAppCreationSettings>>;\n try {\n settings = await getAppCreationSettings();\n } catch {\n verificationFail(\n \"The organization Builder project setting could not be read. Try again shortly.\",\n \"community_verification_project_unavailable\",\n { statusCode: 503 },\n );\n }\n const projectId = settings.savedBuilderProjectId?.trim();\n if (!projectId || settings.builderProjectId !== projectId) {\n verificationFail(\n \"Configure a Builder project for this organization before inspecting a branch backup.\",\n \"community_verification_project_required\",\n { statusCode: 409 },\n );\n }\n\n let status: Awaited<ReturnType<typeof readBuilderBranchBackupStatus>>;\n try {\n status = await readBuilderBranchBackupStatus({ projectId, branchName });\n } catch (error) {\n failBranchReadback(error);\n }\n return { branchName, ...status };\n}\n\nexport async function verifyCuratedCommunityApp(input: {\n sourceId: string;\n appId: string;\n branchName: string;\n}) {\n const { orgId, ownerEmail } = requireHumanOrgOwner();\n await requireOrganizationOwnerOrAdmin(orgId, ownerEmail);\n\n const source = CURATED_COMMUNITY_APP_SOURCES.find(\n (candidate) => candidate.id === input.sourceId.trim(),\n );\n if (!source) {\n verificationFail(\n \"That community app is not in Dispatch's reviewed install catalog.\",\n \"community_verification_source_unknown\",\n { statusCode: 404 },\n );\n }\n\n const appId = requireAppId(input.appId);\n const branchName = requireBranchName(input.branchName);\n\n let settings: Awaited<ReturnType<typeof getAppCreationSettings>>;\n try {\n settings = await getAppCreationSettings();\n } catch {\n verificationFail(\n \"The organization Builder project setting could not be read. Try again later.\",\n \"community_verification_project_unavailable\",\n { statusCode: 503 },\n );\n }\n const projectId = settings.savedBuilderProjectId?.trim();\n if (!projectId || settings.builderProjectId !== projectId) {\n verificationFail(\n \"Configure a Builder project for this organization before verifying a branch.\",\n \"community_verification_project_required\",\n { statusCode: 409 },\n );\n }\n\n let snapshot: Awaited<ReturnType<typeof readBuilderBranchFiles>>;\n try {\n snapshot = await readBuilderBranchFiles({\n projectId,\n branchName,\n appPath: `apps/${appId}`,\n });\n } catch (error) {\n failBranchReadback(error);\n }\n\n try {\n return verifyCommunityBranchFiles(source, appId, snapshot, {\n projectId,\n branchName,\n });\n } catch (error) {\n if (!(error instanceof CommunityInstallIntegrityError)) {\n verificationFail(\n \"Community branch verification could not be completed.\",\n \"community_verification_internal_error\",\n { statusCode: 500 },\n );\n }\n\n switch (error.code) {\n case \"file_set_mismatch\":\n case \"file_mode_unsupported\":\n case \"file_too_large\":\n case \"total_too_large\":\n case \"blob_mismatch\":\n verificationFail(\n \"Builder branch files do not match the reviewed community template.\",\n \"community_verification_integrity_failed\",\n { statusCode: 422, details: { readbackStage: \"app_integrity\" } },\n );\n case \"ref_mismatch\":\n case \"invalid_snapshot\":\n verificationFail(\n \"Builder could not provide a complete, identity-bound branch snapshot.\",\n \"community_verification_readback_unverified\",\n { statusCode: 422, details: { readbackStage: \"snapshot_ref\" } },\n );\n case \"invalid_source\":\n verificationFail(\n \"The reviewed community catalog entry is invalid.\",\n \"community_verification_catalog_invalid\",\n { statusCode: 500 },\n );\n case \"invalid_target\":\n verificationFail(\n \"Community branch verification could not be completed.\",\n \"community_verification_internal_error\",\n { statusCode: 500 },\n );\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/dispatch",
3
- "version": "0.40.43",
3
+ "version": "0.40.44-nightly-20261029182928",
4
4
  "description": "Dispatch — workspace control plane for agent-native apps. Vault, integrations, destinations, scheduled jobs, and cross-app delegation, shipped as a single drop-in package.",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -90,7 +90,7 @@
90
90
  "tailwind-merge": "^3.5.0",
91
91
  "vaul": "^1.1.2",
92
92
  "zod": "^4.3.6",
93
- "@agent-native/toolkit": "0.222.1"
93
+ "@agent-native/toolkit": "0.222.2-nightly-20261029182928"
94
94
  },
95
95
  "devDependencies": {
96
96
  "@react-router/dev": "^8.1.0",
@@ -104,10 +104,10 @@
104
104
  "typescript-7": "npm:typescript@^7.0.2",
105
105
  "vite": "8.1.0",
106
106
  "vitest": "^4.1.5",
107
- "@agent-native/core": "0.222.1"
107
+ "@agent-native/core": "0.222.2-nightly-20261029182928"
108
108
  },
109
109
  "peerDependencies": {
110
- "@agent-native/core": ">=0.222.0-0",
110
+ "@agent-native/core": "0.222.2-nightly-20261029182928",
111
111
  "react": ">=19.2.7",
112
112
  "react-dom": ">=19.2.7",
113
113
  "react-router": ">=8"
@@ -17,6 +17,10 @@ describe("dispatch action registry", () => {
17
17
  expect(dispatchActions).toHaveProperty("claim-workspace-app-organization");
18
18
  expect(dispatchActions).toHaveProperty("verify-curated-community-app");
19
19
  expect(dispatchActions["verify-curated-community-app"].readOnly).toBe(true);
20
+ expect(dispatchActions).toHaveProperty("inspect-community-builder-backup");
21
+ expect(dispatchActions["inspect-community-builder-backup"].readOnly).toBe(
22
+ true,
23
+ );
20
24
  expect(dispatchActions).toHaveProperty("open_app");
21
25
  expect(dispatchActions).toHaveProperty("create_embed_session");
22
26
  expect(dispatchActions.create_embed_session.mcpApp?.visibility).toEqual([
@@ -36,6 +36,7 @@ import grantVaultSecretsToApp from "./grant-vault-secrets-to-app.js";
36
36
  import grantWorkspaceResourcesToApp from "./grant-workspace-resources-to-app.js";
37
37
  import importAgentPack from "./import-agent-pack.js";
38
38
  import importAgent from "./import-agent.js";
39
+ import inspectCommunityBuilderBackup from "./inspect-community-builder-backup.js";
39
40
  import inspectConnectAgentCard from "./inspect-connect-agent-card.js";
40
41
  import installCuratedCommunityApp from "./install-curated-community-app.js";
41
42
  import listAgentPack from "./list-agent-pack.js";
@@ -174,6 +175,7 @@ export const dispatchActions: Record<string, ActionEntry> = {
174
175
  "list-workspace-resources": listWorkspaceResources,
175
176
  "import-agent": importAgent,
176
177
  "inspect-connect-agent-card": inspectConnectAgentCard,
178
+ "inspect-community-builder-backup": inspectCommunityBuilderBackup,
177
179
  "import-agent-pack": importAgentPack,
178
180
  "install-curated-community-app": installCuratedCommunityApp,
179
181
  "list-agent-pack": listAgentPack,
@@ -0,0 +1,98 @@
1
+ import { ActionContractError } from "@agent-native/core/action";
2
+ import { checkActionProperties } from "@agent-native/core/action-properties";
3
+ import { beforeEach, describe, expect, it, vi } from "vitest";
4
+
5
+ const inspectCommunityBuilderBackup = vi.hoisted(() => vi.fn());
6
+
7
+ vi.mock("../server/lib/community-install-verification.js", () => ({
8
+ communityInstallVerificationErrors: {
9
+ codes: ["community_verification_identity_required"],
10
+ fail: (
11
+ message: string,
12
+ errorCode: string,
13
+ options: { statusCode: number },
14
+ ) => {
15
+ throw new ActionContractError(message, {
16
+ errorCode,
17
+ statusCode: options.statusCode,
18
+ });
19
+ },
20
+ },
21
+ inspectCommunityBuilderBackup,
22
+ }));
23
+
24
+ import action from "./inspect-community-builder-backup.js";
25
+
26
+ const input = { branchName: "release/community-app" };
27
+
28
+ describe("inspect-community-builder-backup action", () => {
29
+ beforeEach(() => {
30
+ vi.clearAllMocks();
31
+ });
32
+
33
+ it("is a read-only GET action and returns status without verification", async () => {
34
+ const status = {
35
+ branchName: input.branchName,
36
+ branchState: "active" as const,
37
+ backupPartial: true,
38
+ backupValid: true,
39
+ backupComplete: true,
40
+ backupCurrent: true,
41
+ agentIdle: true,
42
+ hasUnpushedChanges: false,
43
+ verificationPerformed: false as const,
44
+ };
45
+ inspectCommunityBuilderBackup.mockResolvedValue(status);
46
+
47
+ await expect(action.run(input, { caller: "tool" })).resolves.toEqual(
48
+ status,
49
+ );
50
+ expect(action.readOnly).toBe(true);
51
+ expect(action.http).toEqual({ method: "GET" });
52
+ expect(inspectCommunityBuilderBackup).toHaveBeenCalledExactlyOnceWith(
53
+ input,
54
+ );
55
+ });
56
+
57
+ it("satisfies generated action input and output contracts", async () => {
58
+ inspectCommunityBuilderBackup.mockImplementation(
59
+ async ({ branchName }) => ({
60
+ branchName,
61
+ branchState: "archived" as const,
62
+ backupPartial: true,
63
+ backupValid: true,
64
+ backupComplete: true,
65
+ backupCurrent: false,
66
+ agentIdle: false,
67
+ hasUnpushedChanges: true,
68
+ verificationPerformed: false,
69
+ }),
70
+ );
71
+
72
+ await checkActionProperties(action, {
73
+ context: { caller: "tool" },
74
+ runs: 5,
75
+ seed: 19,
76
+ });
77
+ });
78
+
79
+ it.each([
80
+ ["A2A", { caller: "a2a" as const }],
81
+ [
82
+ "A2A protocol",
83
+ { caller: "tool" as const, networkProtocol: "a2a" as const },
84
+ ],
85
+ ["automation", { caller: "automation" as const }],
86
+ ["widget", { caller: "mcp-widget" as const }],
87
+ ["widget capability", { caller: "mcp-widget-write" as const }],
88
+ ])(
89
+ "rejects %s calls before Builder status inspection",
90
+ async (_name, context) => {
91
+ await expect(action.run(input, context)).rejects.toMatchObject({
92
+ errorCode: "community_verification_identity_required",
93
+ statusCode: 403,
94
+ });
95
+ expect(inspectCommunityBuilderBackup).not.toHaveBeenCalled();
96
+ },
97
+ );
98
+ });
@@ -0,0 +1,74 @@
1
+ import { defineAction, type ActionRunContext } from "@agent-native/core/action";
2
+ import { z } from "zod";
3
+
4
+ import {
5
+ communityInstallVerificationErrors,
6
+ inspectCommunityBuilderBackup,
7
+ } from "../server/lib/community-install-verification.js";
8
+
9
+ const resultSchema = z.object({
10
+ branchName: z.string(),
11
+ branchState: z
12
+ .enum(["active", "archived", "deleted", "unknown"])
13
+ .describe(
14
+ "Whether Builder reports the branch active, archived, deleted or unknown",
15
+ ),
16
+ backupPartial: z
17
+ .union([z.boolean(), z.literal("missing"), z.literal("invalid")])
18
+ .describe(
19
+ 'Whether Builder marks the existing backup partial; "missing" or "invalid" means its flag could not be interpreted',
20
+ ),
21
+ backupValid: z
22
+ .boolean()
23
+ .describe("Whether Builder reports the backup state and outcome as valid"),
24
+ backupComplete: z
25
+ .boolean()
26
+ .describe("Whether Builder reports the backup status as completed"),
27
+ backupCurrent: z
28
+ .boolean()
29
+ .describe("Whether recorded commit and activity metadata match the branch"),
30
+ agentIdle: z
31
+ .boolean()
32
+ .describe("Whether Builder reports the branch agent idle"),
33
+ hasUnpushedChanges: z
34
+ .boolean()
35
+ .describe("Whether Builder reports unpushed branch changes"),
36
+ verificationPerformed: z
37
+ .literal(false)
38
+ .describe("Always false; this action does not verify branch file bytes"),
39
+ });
40
+
41
+ export default defineAction({
42
+ description:
43
+ "Read existing backup metadata for a branch in the saved Builder project. Returns partial, valid, complete and current status plus idle and unpushed flags; it does not download files or verify a community app.",
44
+ schema: z.object({
45
+ branchName: z
46
+ .string()
47
+ .min(1)
48
+ .max(256)
49
+ .describe("Existing Builder branch name in the saved project"),
50
+ }),
51
+ outputSchema: resultSchema,
52
+ mcpOutputSchema: true,
53
+ http: { method: "GET" },
54
+ readOnly: true,
55
+ requiresAuth: true,
56
+ errors: communityInstallVerificationErrors,
57
+ run: async (input, context?: ActionRunContext) => {
58
+ if (
59
+ !context ||
60
+ context.caller === "a2a" ||
61
+ context.networkProtocol === "a2a" ||
62
+ context.caller === "automation" ||
63
+ context.caller === "mcp-widget" ||
64
+ context.caller === "mcp-widget-write"
65
+ ) {
66
+ return communityInstallVerificationErrors.fail(
67
+ "A directly authenticated organization owner or admin is required to inspect a Builder branch backup.",
68
+ "community_verification_identity_required",
69
+ { statusCode: 403 },
70
+ );
71
+ }
72
+ return inspectCommunityBuilderBackup(input);
73
+ },
74
+ });
@@ -32,6 +32,7 @@ const mocks = vi.hoisted(() => {
32
32
  | undefined,
33
33
  getAppCreationSettings: vi.fn(),
34
34
  readBuilderBranchFiles: vi.fn(),
35
+ readBuilderBranchBackupStatus: vi.fn(),
35
36
  readOrgMemberRole: vi.fn(),
36
37
  curatedSources: [
37
38
  {
@@ -59,6 +60,7 @@ vi.mock("@agent-native/core/server", () => ({
59
60
  BuilderBranchFilesError: mocks.BuilderBranchFilesError,
60
61
  getRequestContext: () => mocks.context,
61
62
  readBuilderBranchFiles: mocks.readBuilderBranchFiles,
63
+ readBuilderBranchBackupStatus: mocks.readBuilderBranchBackupStatus,
62
64
  readOrgMemberRole: mocks.readOrgMemberRole,
63
65
  }));
64
66
 
@@ -81,7 +83,10 @@ vi.mock("./dispatch-store.js", () => ({
81
83
 
82
84
  import { BuilderBranchFilesError } from "@agent-native/core/server";
83
85
 
84
- import { verifyCuratedCommunityApp } from "./community-install-verification.js";
86
+ import {
87
+ inspectCommunityBuilderBackup,
88
+ verifyCuratedCommunityApp,
89
+ } from "./community-install-verification.js";
85
90
 
86
91
  const content = new TextEncoder().encode("reviewed bytes\n");
87
92
  const baseSnapshot = {
@@ -127,6 +132,16 @@ describe("verifyCuratedCommunityApp", () => {
127
132
  savedBuilderProjectId: "builder-project-1",
128
133
  });
129
134
  mocks.readOrgMemberRole.mockResolvedValue("owner");
135
+ mocks.readBuilderBranchBackupStatus.mockResolvedValue({
136
+ branchState: "active",
137
+ backupPartial: false,
138
+ backupValid: true,
139
+ backupComplete: true,
140
+ backupCurrent: true,
141
+ agentIdle: true,
142
+ hasUnpushedChanges: false,
143
+ verificationPerformed: false,
144
+ });
130
145
  mocks.readBuilderBranchFiles.mockResolvedValue(baseSnapshot);
131
146
  });
132
147
 
@@ -176,6 +191,33 @@ describe("verifyCuratedCommunityApp", () => {
176
191
  expect(mocks.readBuilderBranchFiles).not.toHaveBeenCalled();
177
192
  });
178
193
 
194
+ it("denies non-owner members before inspecting backup metadata", async () => {
195
+ mocks.readOrgMemberRole.mockResolvedValueOnce("member");
196
+
197
+ await expect(
198
+ inspectCommunityBuilderBackup({ branchName: input.branchName }),
199
+ ).rejects.toMatchObject({
200
+ errorCode: "community_verification_owner_required",
201
+ });
202
+ expect(mocks.readBuilderBranchBackupStatus).not.toHaveBeenCalled();
203
+ });
204
+
205
+ it.each([
206
+ ["integration caller", { isIntegrationCaller: true }],
207
+ ["synthetic traffic", { isSyntheticTraffic: true }],
208
+ ["A2A identity", { a2aIdentityAssurance: "organization" as const }],
209
+ ])("denies %s before inspecting backup metadata", async (_name, override) => {
210
+ mocks.context = { ...authenticatedOwnerContext(), ...override };
211
+
212
+ await expect(
213
+ inspectCommunityBuilderBackup({ branchName: input.branchName }),
214
+ ).rejects.toMatchObject({
215
+ errorCode: "community_verification_identity_required",
216
+ });
217
+ expect(mocks.readOrgMemberRole).not.toHaveBeenCalled();
218
+ expect(mocks.readBuilderBranchBackupStatus).not.toHaveBeenCalled();
219
+ });
220
+
179
221
  it("denies non-owner members before reading Builder", async () => {
180
222
  mocks.readOrgMemberRole.mockResolvedValue("member");
181
223
 
@@ -195,6 +237,51 @@ describe("verifyCuratedCommunityApp", () => {
195
237
  expect(mocks.readBuilderBranchFiles).not.toHaveBeenCalled();
196
238
  });
197
239
 
240
+ it("inspects only bound backup status for the saved Builder project", async () => {
241
+ mocks.readBuilderBranchBackupStatus.mockResolvedValueOnce({
242
+ branchState: "active",
243
+ backupPartial: true,
244
+ backupValid: true,
245
+ backupComplete: true,
246
+ backupCurrent: false,
247
+ agentIdle: true,
248
+ hasUnpushedChanges: false,
249
+ verificationPerformed: false,
250
+ });
251
+
252
+ await expect(
253
+ inspectCommunityBuilderBackup({ branchName: input.branchName }),
254
+ ).resolves.toEqual({
255
+ branchName: input.branchName,
256
+ branchState: "active",
257
+ backupPartial: true,
258
+ backupValid: true,
259
+ backupComplete: true,
260
+ backupCurrent: false,
261
+ agentIdle: true,
262
+ hasUnpushedChanges: false,
263
+ verificationPerformed: false,
264
+ });
265
+ expect(mocks.readBuilderBranchBackupStatus).toHaveBeenCalledExactlyOnceWith(
266
+ { projectId: "builder-project-1", branchName: input.branchName },
267
+ );
268
+ expect(mocks.readBuilderBranchFiles).not.toHaveBeenCalled();
269
+ });
270
+
271
+ it("requires the explicitly saved Builder project for status inspection", async () => {
272
+ mocks.getAppCreationSettings.mockResolvedValueOnce({
273
+ builderProjectId: "deployment-project",
274
+ savedBuilderProjectId: null,
275
+ });
276
+
277
+ await expect(
278
+ inspectCommunityBuilderBackup({ branchName: input.branchName }),
279
+ ).rejects.toMatchObject({
280
+ errorCode: "community_verification_project_required",
281
+ });
282
+ expect(mocks.readBuilderBranchBackupStatus).not.toHaveBeenCalled();
283
+ });
284
+
198
285
  it.each([
199
286
  ["integration caller", { isIntegrationCaller: true }],
200
287
  ["integration context", { integration: { taskId: "task-1" } }],
@@ -305,6 +392,20 @@ describe("verifyCuratedCommunityApp", () => {
305
392
  });
306
393
  });
307
394
 
395
+ it("preserves a typed no-backup status failure for the inspection action", async () => {
396
+ mocks.readBuilderBranchBackupStatus.mockRejectedValueOnce(
397
+ new BuilderBranchFilesError("unverified", "status_no_backup"),
398
+ );
399
+
400
+ await expect(
401
+ inspectCommunityBuilderBackup({ branchName: input.branchName }),
402
+ ).rejects.toMatchObject({
403
+ errorCode: "community_verification_readback_unverified",
404
+ statusCode: 422,
405
+ details: { readbackStage: "status_no_backup" },
406
+ });
407
+ });
408
+
308
409
  it("keeps older and unrecognized Core diagnostics explicitly unknown", async () => {
309
410
  for (const error of [
310
411
  new BuilderBranchFilesError("unverified"),
@@ -2,6 +2,7 @@ import { defineActionErrors } from "@agent-native/core/action";
2
2
  import {
3
3
  BuilderBranchFilesError,
4
4
  getRequestContext,
5
+ readBuilderBranchBackupStatus,
5
6
  readBuilderBranchFiles,
6
7
  readOrgMemberRole,
7
8
  } from "@agent-native/core/server";
@@ -53,6 +54,7 @@ const READBACK_STAGES = new Set([
53
54
  "status_request",
54
55
  "status_shape",
55
56
  "status_binding",
57
+ "status_no_backup",
56
58
  "status_currentness",
57
59
  "post_read_status_request",
58
60
  "post_read_status_shape",
@@ -233,6 +235,41 @@ function failBranchReadback(error: unknown): never {
233
235
  );
234
236
  }
235
237
 
238
+ export async function inspectCommunityBuilderBackup(input: {
239
+ branchName: string;
240
+ }) {
241
+ const { orgId, ownerEmail } = requireHumanOrgOwner();
242
+ await requireOrganizationOwnerOrAdmin(orgId, ownerEmail);
243
+
244
+ const branchName = requireBranchName(input.branchName);
245
+ let settings: Awaited<ReturnType<typeof getAppCreationSettings>>;
246
+ try {
247
+ settings = await getAppCreationSettings();
248
+ } catch {
249
+ verificationFail(
250
+ "The organization Builder project setting could not be read. Try again shortly.",
251
+ "community_verification_project_unavailable",
252
+ { statusCode: 503 },
253
+ );
254
+ }
255
+ const projectId = settings.savedBuilderProjectId?.trim();
256
+ if (!projectId || settings.builderProjectId !== projectId) {
257
+ verificationFail(
258
+ "Configure a Builder project for this organization before inspecting a branch backup.",
259
+ "community_verification_project_required",
260
+ { statusCode: 409 },
261
+ );
262
+ }
263
+
264
+ let status: Awaited<ReturnType<typeof readBuilderBranchBackupStatus>>;
265
+ try {
266
+ status = await readBuilderBranchBackupStatus({ projectId, branchName });
267
+ } catch (error) {
268
+ failBranchReadback(error);
269
+ }
270
+ return { branchName, ...status };
271
+ }
272
+
236
273
  export async function verifyCuratedCommunityApp(input: {
237
274
  sourceId: string;
238
275
  appId: string;