@aeolus-fleet/gateway 0.29.2 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -3
- package/dist/adapters/a2a/a2a-agents.d.ts +6 -0
- package/dist/adapters/a2a/a2a-agents.js +238 -0
- package/dist/adapters/a2a/a2a-agents.js.map +1 -0
- package/dist/adapters/a2a/agent-cards.d.ts +4 -0
- package/dist/adapters/a2a/agent-cards.js +90 -0
- package/dist/adapters/a2a/agent-cards.js.map +1 -0
- package/dist/adapters/crypto/agent-keys.d.ts +3 -0
- package/dist/adapters/crypto/agent-keys.js +13 -0
- package/dist/adapters/crypto/agent-keys.js.map +1 -0
- package/dist/adapters/crypto/call-keys.js +2 -0
- package/dist/adapters/crypto/call-keys.js.map +1 -1
- package/dist/adapters/fleet/core-version.d.ts +1 -1
- package/dist/adapters/fleet/core-version.js +1 -1
- package/dist/adapters/fleet/fleet-ships.d.ts +3 -1
- package/dist/adapters/fleet/fleet-ships.js +19 -10
- package/dist/adapters/fleet/fleet-ships.js.map +1 -1
- package/dist/adapters/fleet/rest-fleet-door.d.ts +4 -2
- package/dist/adapters/fleet/rest-fleet-door.js +65 -6
- package/dist/adapters/fleet/rest-fleet-door.js.map +1 -1
- package/dist/adapters/http/a2a-cards.d.ts +24 -0
- package/dist/adapters/http/a2a-cards.js +62 -0
- package/dist/adapters/http/a2a-cards.js.map +1 -0
- package/dist/adapters/http/a2a-endpoint.d.ts +28 -0
- package/dist/adapters/http/a2a-endpoint.js +424 -0
- package/dist/adapters/http/a2a-endpoint.js.map +1 -0
- package/dist/adapters/http/a2a-streams.d.ts +28 -0
- package/dist/adapters/http/a2a-streams.js +74 -0
- package/dist/adapters/http/a2a-streams.js.map +1 -0
- package/dist/adapters/http/a2a-tasks.d.ts +18 -0
- package/dist/adapters/http/a2a-tasks.js +117 -0
- package/dist/adapters/http/a2a-tasks.js.map +1 -0
- package/dist/adapters/http/front-door.js +8 -4
- package/dist/adapters/http/front-door.js.map +1 -1
- package/dist/adapters/http/live.d.ts +3 -1
- package/dist/adapters/http/live.js +6 -2
- package/dist/adapters/http/live.js.map +1 -1
- package/dist/adapters/http/oauth-routes.d.ts +1 -1
- package/dist/adapters/http/oauth-routes.js +16 -3
- package/dist/adapters/http/oauth-routes.js.map +1 -1
- package/dist/adapters/http/person-tools.d.ts +4 -7
- package/dist/adapters/http/person-tools.js +75 -10
- package/dist/adapters/http/person-tools.js.map +1 -1
- package/dist/adapters/mcp/mcp-servers.js +2 -0
- package/dist/adapters/mcp/mcp-servers.js.map +1 -1
- package/dist/adapters/pagasae/email-channel.d.ts +8 -0
- package/dist/adapters/pagasae/email-channel.js +37 -0
- package/dist/adapters/pagasae/email-channel.js.map +1 -0
- package/dist/adapters/pagasae/pagasae-client.js +6 -2
- package/dist/adapters/pagasae/pagasae-client.js.map +1 -1
- package/dist/adapters/prisma/agent-calls.d.ts +3 -0
- package/dist/adapters/prisma/agent-calls.js +49 -0
- package/dist/adapters/prisma/agent-calls.js.map +1 -0
- package/dist/adapters/prisma/changes.d.ts +17 -8
- package/dist/adapters/prisma/changes.js +18 -5
- package/dist/adapters/prisma/changes.js.map +1 -1
- package/dist/adapters/prisma/client-calls.d.ts +1 -1
- package/dist/adapters/prisma/client-calls.js +83 -21
- package/dist/adapters/prisma/client-calls.js.map +1 -1
- package/dist/adapters/prisma/email-channels.d.ts +4 -0
- package/dist/adapters/prisma/email-channels.js +14 -0
- package/dist/adapters/prisma/email-channels.js.map +1 -0
- package/dist/adapters/prisma/fleet-forgetter.d.ts +1 -1
- package/dist/adapters/prisma/fleet-forgetter.js +2 -2
- package/dist/adapters/prisma/fleet-forgetter.js.map +1 -1
- package/dist/adapters/prisma/focused-pages.d.ts +4 -0
- package/dist/adapters/prisma/focused-pages.js +13 -0
- package/dist/adapters/prisma/focused-pages.js.map +1 -0
- package/dist/adapters/prisma/generated/browser.d.ts +45 -0
- package/dist/adapters/prisma/generated/client.d.ts +45 -0
- package/dist/adapters/prisma/generated/commonInputTypes.d.ts +54 -54
- package/dist/adapters/prisma/generated/internal/class.d.ts +99 -0
- package/dist/adapters/prisma/generated/internal/class.js +4 -4
- package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +783 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js +101 -3
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +107 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +101 -3
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
- package/dist/adapters/prisma/generated/models/A2aAgentCall.d.ts +1203 -0
- package/dist/adapters/prisma/generated/models/A2aAgentCall.js +2 -0
- package/dist/adapters/prisma/generated/models/A2aAgentCall.js.map +1 -0
- package/dist/adapters/prisma/generated/models/A2aAgentReply.d.ts +1003 -0
- package/dist/adapters/prisma/generated/models/A2aAgentReply.js +2 -0
- package/dist/adapters/prisma/generated/models/A2aAgentReply.js.map +1 -0
- package/dist/adapters/prisma/generated/models/A2aPush.d.ts +1413 -0
- package/dist/adapters/prisma/generated/models/A2aPush.js +2 -0
- package/dist/adapters/prisma/generated/models/A2aPush.js.map +1 -0
- package/dist/adapters/prisma/generated/models/A2aPushConfig.d.ts +1322 -0
- package/dist/adapters/prisma/generated/models/A2aPushConfig.js +2 -0
- package/dist/adapters/prisma/generated/models/A2aPushConfig.js.map +1 -0
- package/dist/adapters/prisma/generated/models/A2aTask.d.ts +1002 -0
- package/dist/adapters/prisma/generated/models/A2aTask.js +2 -0
- package/dist/adapters/prisma/generated/models/A2aTask.js.map +1 -0
- package/dist/adapters/prisma/generated/models/ClientCall.d.ts +136 -15
- package/dist/adapters/prisma/generated/models/ClientCallReply.d.ts +0 -7
- package/dist/adapters/prisma/generated/models/EmailChannel.d.ts +946 -0
- package/dist/adapters/prisma/generated/models/EmailChannel.js +2 -0
- package/dist/adapters/prisma/generated/models/EmailChannel.js.map +1 -0
- package/dist/adapters/prisma/generated/models/FocusedPage.d.ts +974 -0
- package/dist/adapters/prisma/generated/models/FocusedPage.js +2 -0
- package/dist/adapters/prisma/generated/models/FocusedPage.js.map +1 -0
- package/dist/adapters/prisma/generated/models/IssuedToken.d.ts +47 -41
- package/dist/adapters/prisma/generated/models/OAuthClient.d.ts +32 -8
- package/dist/adapters/prisma/generated/models/Party.d.ts +90 -3
- package/dist/adapters/prisma/generated/models/WakeSent.d.ts +975 -0
- package/dist/adapters/prisma/generated/models/WakeSent.js +2 -0
- package/dist/adapters/prisma/generated/models/WakeSent.js.map +1 -0
- package/dist/adapters/prisma/generated/models/WebPushSubscription.d.ts +1115 -0
- package/dist/adapters/prisma/generated/models/WebPushSubscription.js +2 -0
- package/dist/adapters/prisma/generated/models/WebPushSubscription.js.map +1 -0
- package/dist/adapters/prisma/generated/models.d.ts +9 -0
- package/dist/adapters/prisma/oauth-stores.js +3 -2
- package/dist/adapters/prisma/oauth-stores.js.map +1 -1
- package/dist/adapters/prisma/party-store.js +35 -6
- package/dist/adapters/prisma/party-store.js.map +1 -1
- package/dist/adapters/prisma/person-crews.js +9 -0
- package/dist/adapters/prisma/person-crews.js.map +1 -1
- package/dist/adapters/prisma/push-store.d.ts +3 -0
- package/dist/adapters/prisma/push-store.js +102 -0
- package/dist/adapters/prisma/push-store.js.map +1 -0
- package/dist/adapters/prisma/waiter-locks.d.ts +4 -0
- package/dist/adapters/prisma/waiter-locks.js +72 -0
- package/dist/adapters/prisma/waiter-locks.js.map +1 -0
- package/dist/adapters/prisma/wakes-sent.d.ts +4 -0
- package/dist/adapters/prisma/wakes-sent.js +10 -0
- package/dist/adapters/prisma/wakes-sent.js.map +1 -0
- package/dist/adapters/prisma/web-push-subscriptions.d.ts +3 -0
- package/dist/adapters/prisma/web-push-subscriptions.js +33 -0
- package/dist/adapters/prisma/web-push-subscriptions.js.map +1 -0
- package/dist/adapters/trpc/router.d.ts +460 -9
- package/dist/adapters/trpc/router.js +269 -13
- package/dist/adapters/trpc/router.js.map +1 -1
- package/dist/adapters/web-push/web-push.d.ts +9 -0
- package/dist/adapters/web-push/web-push.js +70 -0
- package/dist/adapters/web-push/web-push.js.map +1 -0
- package/dist/adapters/webhooks/allowed-lookup.d.ts +14 -0
- package/dist/adapters/webhooks/allowed-lookup.js +28 -0
- package/dist/adapters/webhooks/allowed-lookup.js.map +1 -0
- package/dist/adapters/webhooks/host-resolver.d.ts +3 -0
- package/dist/adapters/webhooks/host-resolver.js +13 -0
- package/dist/adapters/webhooks/host-resolver.js.map +1 -0
- package/dist/adapters/webhooks/webhook-poster.d.ts +6 -0
- package/dist/adapters/webhooks/webhook-poster.js +67 -0
- package/dist/adapters/webhooks/webhook-poster.js.map +1 -0
- package/dist/app.d.ts +12 -0
- package/dist/app.js +277 -14
- package/dist/app.js.map +1 -1
- package/dist/bin/aeolus-gateway.js +3 -0
- package/dist/bin/aeolus-gateway.js.map +1 -1
- package/dist/config.d.ts +14 -0
- package/dist/config.js +24 -0
- package/dist/config.js.map +1 -1
- package/dist/core/a2a-in/authenticate-a2a-client.d.ts +23 -0
- package/dist/core/a2a-in/authenticate-a2a-client.js +21 -0
- package/dist/core/a2a-in/authenticate-a2a-client.js.map +1 -0
- package/dist/core/a2a-in/deliver-pushes.d.ts +24 -0
- package/dist/core/a2a-in/deliver-pushes.js +48 -0
- package/dist/core/a2a-in/deliver-pushes.js.map +1 -0
- package/dist/core/a2a-in/find-reached-ship.d.ts +18 -0
- package/dist/core/a2a-in/find-reached-ship.js +20 -0
- package/dist/core/a2a-in/find-reached-ship.js.map +1 -0
- package/dist/core/a2a-in/follow-a2a-task.d.ts +25 -0
- package/dist/core/a2a-in/follow-a2a-task.js +23 -0
- package/dist/core/a2a-in/follow-a2a-task.js.map +1 -0
- package/dist/core/a2a-in/inbound-message.d.ts +30 -0
- package/dist/core/a2a-in/inbound-message.js +33 -0
- package/dist/core/a2a-in/inbound-message.js.map +1 -0
- package/dist/core/a2a-in/list-a2a-tasks.d.ts +18 -0
- package/dist/core/a2a-in/list-a2a-tasks.js +14 -0
- package/dist/core/a2a-in/list-a2a-tasks.js.map +1 -0
- package/dist/core/a2a-in/list-push-configs.d.ts +20 -0
- package/dist/core/a2a-in/list-push-configs.js +18 -0
- package/dist/core/a2a-in/list-push-configs.js.map +1 -0
- package/dist/core/a2a-in/list-reached-ships.d.ts +25 -0
- package/dist/core/a2a-in/list-reached-ships.js +22 -0
- package/dist/core/a2a-in/list-reached-ships.js.map +1 -0
- package/dist/core/a2a-in/notice-task-changes.d.ts +19 -0
- package/dist/core/a2a-in/notice-task-changes.js +17 -0
- package/dist/core/a2a-in/notice-task-changes.js.map +1 -0
- package/dist/core/a2a-in/ports.d.ts +124 -0
- package/dist/core/a2a-in/ports.js +2 -0
- package/dist/core/a2a-in/ports.js.map +1 -0
- package/dist/core/a2a-in/push-config-view.d.ts +8 -0
- package/dist/core/a2a-in/push-config-view.js +2 -0
- package/dist/core/a2a-in/push-config-view.js.map +1 -0
- package/dist/core/a2a-in/push-to-webhooks.d.ts +19 -0
- package/dist/core/a2a-in/push-to-webhooks.js +19 -0
- package/dist/core/a2a-in/push-to-webhooks.js.map +1 -0
- package/dist/core/a2a-in/read-a2a-task.d.ts +12 -0
- package/dist/core/a2a-in/read-a2a-task.js +11 -0
- package/dist/core/a2a-in/read-a2a-task.js.map +1 -0
- package/dist/core/a2a-in/read-push-config.d.ts +16 -0
- package/dist/core/a2a-in/read-push-config.js +14 -0
- package/dist/core/a2a-in/read-push-config.js.map +1 -0
- package/dist/core/a2a-in/remove-push-config.d.ts +15 -0
- package/dist/core/a2a-in/remove-push-config.js +13 -0
- package/dist/core/a2a-in/remove-push-config.js.map +1 -0
- package/dist/core/a2a-in/send-a2a-message.d.ts +34 -0
- package/dist/core/a2a-in/send-a2a-message.js +106 -0
- package/dist/core/a2a-in/send-a2a-message.js.map +1 -0
- package/dist/core/a2a-in/set-push-config.d.ts +30 -0
- package/dist/core/a2a-in/set-push-config.js +27 -0
- package/dist/core/a2a-in/set-push-config.js.map +1 -0
- package/dist/core/a2a-in/subscribe-to-a2a-task.d.ts +18 -0
- package/dist/core/a2a-in/subscribe-to-a2a-task.js +17 -0
- package/dist/core/a2a-in/subscribe-to-a2a-task.js.map +1 -0
- package/dist/core/a2a-in/task-view.d.ts +51 -0
- package/dist/core/a2a-in/task-view.js +49 -0
- package/dist/core/a2a-in/task-view.js.map +1 -0
- package/dist/core/a2a-in/webhook-address.d.ts +7 -0
- package/dist/core/a2a-in/webhook-address.js +17 -0
- package/dist/core/a2a-in/webhook-address.js.map +1 -0
- package/dist/core/a2a-in/webhook.d.ts +6 -0
- package/dist/core/a2a-in/webhook.js +80 -0
- package/dist/core/a2a-in/webhook.js.map +1 -0
- package/dist/core/a2a-out/agent-endpoint.d.ts +10 -0
- package/dist/core/a2a-out/agent-endpoint.js +10 -0
- package/dist/core/a2a-out/agent-endpoint.js.map +1 -0
- package/dist/core/a2a-out/agent-event.d.ts +41 -0
- package/dist/core/a2a-out/agent-event.js +64 -0
- package/dist/core/a2a-out/agent-event.js.map +1 -0
- package/dist/core/a2a-out/agent-message.d.ts +36 -0
- package/dist/core/a2a-out/agent-message.js +36 -0
- package/dist/core/a2a-out/agent-message.js.map +1 -0
- package/dist/core/a2a-out/agent-statement.d.ts +10 -0
- package/dist/core/a2a-out/agent-statement.js +45 -0
- package/dist/core/a2a-out/agent-statement.js.map +1 -0
- package/dist/core/a2a-out/follow-agent-task.d.ts +40 -0
- package/dist/core/a2a-out/follow-agent-task.js +125 -0
- package/dist/core/a2a-out/follow-agent-task.js.map +1 -0
- package/dist/core/a2a-out/hand-a2a-message.d.ts +36 -0
- package/dist/core/a2a-out/hand-a2a-message.js +132 -0
- package/dist/core/a2a-out/hand-a2a-message.js.map +1 -0
- package/dist/core/a2a-out/mark-a2a-agent.d.ts +24 -0
- package/dist/core/a2a-out/mark-a2a-agent.js +24 -0
- package/dist/core/a2a-out/mark-a2a-agent.js.map +1 -0
- package/dist/core/a2a-out/ports.d.ts +200 -0
- package/dist/core/a2a-out/ports.js +2 -0
- package/dist/core/a2a-out/ports.js.map +1 -0
- package/dist/core/a2a-out/read-agent-statement.d.ts +13 -0
- package/dist/core/a2a-out/read-agent-statement.js +13 -0
- package/dist/core/a2a-out/read-agent-statement.js.map +1 -0
- package/dist/core/a2a-out/run-a2a-agent.d.ts +26 -0
- package/dist/core/a2a-out/run-a2a-agent.js +46 -0
- package/dist/core/a2a-out/run-a2a-agent.js.map +1 -0
- package/dist/core/a2a-out/state-a2a-agent.d.ts +26 -0
- package/dist/core/a2a-out/state-a2a-agent.js +31 -0
- package/dist/core/a2a-out/state-a2a-agent.js.map +1 -0
- package/dist/core/mcp-in/call-tool.js +2 -0
- package/dist/core/mcp-in/call-tool.js.map +1 -1
- package/dist/core/mcp-in/client-call.d.ts +35 -4
- package/dist/core/mcp-in/client-call.js +57 -10
- package/dist/core/mcp-in/client-call.js.map +1 -1
- package/dist/core/mcp-in/collect-replies.d.ts +4 -3
- package/dist/core/mcp-in/collect-replies.js +4 -0
- package/dist/core/mcp-in/collect-replies.js.map +1 -1
- package/dist/core/mcp-in/ports.d.ts +52 -3
- package/dist/core/mcp-out/hand-call.d.ts +5 -1
- package/dist/core/mcp-out/hand-call.js +9 -1
- package/dist/core/mcp-out/hand-call.js.map +1 -1
- package/dist/core/mcp-out/run-party.d.ts +29 -7
- package/dist/core/mcp-out/run-party.js +14 -6
- package/dist/core/mcp-out/run-party.js.map +1 -1
- package/dist/core/mcp-out/state-party.d.ts +4 -2
- package/dist/core/mcp-out/state-party.js +10 -3
- package/dist/core/mcp-out/state-party.js.map +1 -1
- package/dist/core/mcp-out/statement.d.ts +2 -1
- package/dist/core/mcp-out/statement.js.map +1 -1
- package/dist/core/meetings/change-own-mic.d.ts +24 -0
- package/dist/core/meetings/change-own-mic.js +21 -0
- package/dist/core/meetings/change-own-mic.js.map +1 -0
- package/dist/core/meetings/mic-standing.d.ts +18 -0
- package/dist/core/meetings/mic-standing.js +11 -0
- package/dist/core/meetings/mic-standing.js.map +1 -0
- package/dist/core/meetings/ports.d.ts +70 -0
- package/dist/core/meetings/ports.js +2 -0
- package/dist/core/meetings/ports.js.map +1 -0
- package/dist/core/meetings/read-meeting.d.ts +30 -0
- package/dist/core/meetings/read-meeting.js +26 -0
- package/dist/core/meetings/read-meeting.js.map +1 -0
- package/dist/core/oauth/exchange-id-jag.d.ts +28 -0
- package/dist/core/oauth/exchange-id-jag.js +66 -0
- package/dist/core/oauth/exchange-id-jag.js.map +1 -0
- package/dist/core/oauth/exchange-token.d.ts +25 -11
- package/dist/core/oauth/exchange-token.js +50 -3
- package/dist/core/oauth/exchange-token.js.map +1 -1
- package/dist/core/oauth/ports.d.ts +17 -6
- package/dist/core/oauth/register-client.js +1 -1
- package/dist/core/oauth/register-client.js.map +1 -1
- package/dist/core/parties/add-a2a-agent.d.ts +34 -0
- package/dist/core/parties/add-a2a-agent.js +45 -0
- package/dist/core/parties/add-a2a-agent.js.map +1 -0
- package/dist/core/parties/add-a2a-client.d.ts +30 -0
- package/dist/core/parties/add-a2a-client.js +47 -0
- package/dist/core/parties/add-a2a-client.js.map +1 -0
- package/dist/core/parties/add-client-party.d.ts +38 -0
- package/dist/core/parties/add-client-party.js +40 -0
- package/dist/core/parties/add-client-party.js.map +1 -0
- package/dist/core/parties/approve-party.d.ts +43 -2
- package/dist/core/parties/approve-party.js +9 -5
- package/dist/core/parties/approve-party.js.map +1 -1
- package/dist/core/parties/approver.d.ts +7 -0
- package/dist/core/parties/approver.js +9 -0
- package/dist/core/parties/approver.js.map +1 -0
- package/dist/core/parties/check-server.d.ts +2 -1
- package/dist/core/parties/check-server.js +1 -1
- package/dist/core/parties/check-server.js.map +1 -1
- package/dist/core/parties/crew-party.d.ts +18 -4
- package/dist/core/parties/crew-party.js +36 -4
- package/dist/core/parties/crew-party.js.map +1 -1
- package/dist/core/parties/party.d.ts +23 -1
- package/dist/core/parties/party.js +17 -4
- package/dist/core/parties/party.js.map +1 -1
- package/dist/core/parties/ports.d.ts +16 -0
- package/dist/core/parties/read-party-tools.d.ts +4 -3
- package/dist/core/parties/read-party-tools.js +4 -2
- package/dist/core/parties/read-party-tools.js.map +1 -1
- package/dist/core/parties/shown-party.d.ts +8 -0
- package/dist/core/parties/shown-party.js +4 -0
- package/dist/core/parties/shown-party.js.map +1 -1
- package/dist/core/parties/switch-tool.d.ts +29 -0
- package/dist/core/parties/switch-tool.js +33 -0
- package/dist/core/parties/switch-tool.js.map +1 -0
- package/dist/core/parties/tool-switches.d.ts +27 -0
- package/dist/core/parties/tool-switches.js +17 -0
- package/dist/core/parties/tool-switches.js.map +1 -0
- package/dist/core/people/answer-delivery.d.ts +2 -1
- package/dist/core/people/answer-delivery.js.map +1 -1
- package/dist/core/people/done-delivery.d.ts +2 -1
- package/dist/core/people/done-delivery.js.map +1 -1
- package/dist/core/people/focus-page.d.ts +18 -0
- package/dist/core/people/focus-page.js +20 -0
- package/dist/core/people/focus-page.js.map +1 -0
- package/dist/core/people/inbox-entry.d.ts +2 -2
- package/dist/core/people/inbox-entry.js +9 -2
- package/dist/core/people/inbox-entry.js.map +1 -1
- package/dist/core/people/open-delivery.d.ts +6 -2
- package/dist/core/people/open-delivery.js +3 -1
- package/dist/core/people/open-delivery.js.map +1 -1
- package/dist/core/people/opened-of.d.ts +7 -2
- package/dist/core/people/opened-of.js +6 -1
- package/dist/core/people/opened-of.js.map +1 -1
- package/dist/core/people/person-crew.d.ts +2 -0
- package/dist/core/people/person-crew.js +6 -2
- package/dist/core/people/person-crew.js.map +1 -1
- package/dist/core/people/ports.d.ts +158 -5
- package/dist/core/people/read-wake-channels.d.ts +42 -0
- package/dist/core/people/read-wake-channels.js +21 -0
- package/dist/core/people/read-wake-channels.js.map +1 -0
- package/dist/core/people/turn-email-channel.d.ts +21 -0
- package/dist/core/people/turn-email-channel.js +22 -0
- package/dist/core/people/turn-email-channel.js.map +1 -0
- package/dist/core/people/turn-off-web-push.d.ts +13 -0
- package/dist/core/people/turn-off-web-push.js +14 -0
- package/dist/core/people/turn-off-web-push.js.map +1 -0
- package/dist/core/people/turn-on-web-push.d.ts +35 -0
- package/dist/core/people/turn-on-web-push.js +49 -0
- package/dist/core/people/turn-on-web-push.js.map +1 -0
- package/dist/core/people/wait-on-person-ship.d.ts +44 -0
- package/dist/core/people/wait-on-person-ship.js +92 -0
- package/dist/core/people/wait-on-person-ship.js.map +1 -0
- package/dist/core/people/wake-person.d.ts +40 -0
- package/dist/core/people/wake-person.js +74 -0
- package/dist/core/people/wake-person.js.map +1 -0
- package/dist/core/people/web-push-channel.d.ts +17 -0
- package/dist/core/people/web-push-channel.js +35 -0
- package/dist/core/people/web-push-channel.js.map +1 -0
- package/dist/core/requests/decide-request.d.ts +0 -2
- package/dist/core/requests/decide-request.js +3 -6
- package/dist/core/requests/decide-request.js.map +1 -1
- package/dist/core/requests/list-to-decide.js +1 -1
- package/dist/core/requests/list-to-decide.js.map +1 -1
- package/dist/core/shared/errors.d.ts +1 -1
- package/dist/core/shared/errors.js.map +1 -1
- package/dist/core/sign-in/ports.d.ts +13 -0
- package/dist/core/vault/credential.d.ts +6 -2
- package/dist/party-workers.d.ts +9 -1
- package/dist/party-workers.js +37 -5
- package/dist/party-workers.js.map +1 -1
- package/dist/person-waiters.d.ts +30 -0
- package/dist/person-waiters.js +89 -0
- package/dist/person-waiters.js.map +1 -0
- package/package.json +7 -3
- package/src/adapters/prisma/migrations/20261023120000_party_bearer_hash/migration.sql +4 -0
- package/src/adapters/prisma/migrations/20261023130000_client_credentials/migration.sql +5 -0
- package/src/adapters/prisma/migrations/20261023200000_a2a_tasks/migration.sql +20 -0
- package/src/adapters/prisma/migrations/20261023210000_tool_switches/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261024090000_a2a_pushes/migration.sql +37 -0
- package/src/adapters/prisma/migrations/20261024100000_party_is_repeatable/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261024110000_a2a_agent_calls/migration.sql +29 -0
- package/src/adapters/prisma/migrations/20261024115000_wakes/migration.sql +17 -0
- package/src/adapters/prisma/migrations/20261024120000_focused_pages/migration.sql +11 -0
- package/src/adapters/prisma/migrations/20261024130000_web_push_subscriptions/migration.sql +14 -0
- package/src/adapters/prisma/schema.prisma +159 -5
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +4 -0
- package/web/.next/build-manifest.json +39 -3
- package/web/.next/diagnostics/route-bundle-stats.json +91 -42
- package/web/.next/fallback-build-manifest.json +3 -3
- package/web/.next/next-minimal-server.js.nft.json +1 -1
- package/web/.next/next-server.js.nft.json +1 -1
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/routes-manifest.json +26 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page/build-manifest.json +23 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page/server-reference-manifest.json +35 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page.js +21 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.map +5 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.nft.json +1 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page/server-reference-manifest.json +24 -4
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js +10 -8
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/page/server-reference-manifest.json +22 -2
- package/web/.next/server/app/(console)/outside-parties/[name]/page.js +8 -5
- package/web/.next/server/app/(console)/outside-parties/[name]/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/server-reference-manifest.json +24 -4
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js +9 -6
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/add/page/server-reference-manifest.json +26 -6
- package/web/.next/server/app/(console)/outside-parties/add/page.js +10 -5
- package/web/.next/server/app/(console)/outside-parties/add/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/add/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/build-manifest.json +23 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/server-reference-manifest.json +25 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js +20 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.map +5 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.nft.json +1 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/build-manifest.json +23 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/server-reference-manifest.json +25 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js +21 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.map +5 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.nft.json +1 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/outside-parties/page/server-reference-manifest.json +2 -2
- package/web/.next/server/app/(console)/outside-parties/page.js +3 -3
- package/web/.next/server/app/(console)/outside-parties/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/overview/changes/route.js +3 -2
- package/web/.next/server/app/(console)/overview/changes/route.js.nft.json +1 -1
- package/web/.next/server/app/(console)/overview/focus/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/overview/focus/route/build-manifest.json +12 -0
- package/web/.next/server/app/(console)/overview/focus/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/(console)/overview/focus/route.js +7 -0
- package/web/.next/server/app/(console)/overview/focus/route.js.map +5 -0
- package/web/.next/server/app/(console)/overview/focus/route.js.nft.json +1 -0
- package/web/.next/server/app/(console)/overview/focus/route_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/overview/page/server-reference-manifest.json +34 -4
- package/web/.next/server/app/(console)/overview/page.js +5 -5
- package/web/.next/server/app/(console)/overview/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page/server-reference-manifest.json +2 -2
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js +2 -2
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/parties/page/server-reference-manifest.json +9 -9
- package/web/.next/server/app/(console)/parties/page.js +2 -2
- package/web/.next/server/app/(console)/parties/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/sign-in/failed/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/(console)/sign-in/failed/page.js +3 -3
- package/web/.next/server/app/(console)/sign-in/failed/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/sign-in/failed/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error/page.js +3 -3
- package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/server/app/_global-error.html +1 -1
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js +3 -3
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/failed/page.js +2 -2
- package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/pick/page.js +2 -2
- package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page.js +2 -2
- package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +4 -0
- package/web/.next/server/chunks/0b9d__next-internal_server_app_(console)_overview_focus_route_actions_10hgyjvv-6fus.js +3 -0
- package/web/.next/server/chunks/[externals]__0fgpzedhhntg9._.js +3 -0
- package/web/.next/server/chunks/[externals]__0fgpzedhhntg9._.js.map +1 -0
- package/web/.next/server/chunks/{[root-of-the-server]__0k8jiujb_0xtx._.js → [root-of-the-server]__0ykc8bq_c06a1._.js} +22 -22
- package/web/.next/server/chunks/[root-of-the-server]__0ykc8bq_c06a1._.js.map +1 -0
- package/web/.next/server/chunks/_04is-uopj3op9._.js +3 -0
- package/web/.next/server/chunks/_04is-uopj3op9._.js.map +1 -0
- package/web/.next/server/chunks/_1-fw4-pwzazl4._.js +3 -0
- package/web/.next/server/chunks/_1-fw4-pwzazl4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js +3 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js.map +1 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js +3 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js.map +1 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js +3 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js.map +1 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js +3 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js.map +1 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js +3 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js.map +1 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__12_to1hq55n1y._.js → [root-of-the-server]__0-og0bl8lr2xq._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__12_to1hq55n1y._.js.map → [root-of-the-server]__0-og0bl8lr2xq._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__00erqdm9cmhh7._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__00erqdm9cmhh7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07udzu2zwg_74._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__1yydhn6iokbm4._.js.map → [root-of-the-server]__07udzu2zwg_74._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__197il4swfpq1a._.js → [root-of-the-server]__0a68v9ynev4q6._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__197il4swfpq1a._.js.map → [root-of-the-server]__0a68v9ynev4q6._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0l2_dk9d4o01n._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__1vkw2kvzx6fpw._.js.map → [root-of-the-server]__0l2_dk9d4o01n._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0m57jyae0dn_7._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0m57jyae0dn_7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rr5u24i9tjyc._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__1imel8atfb770._.js.map → [root-of-the-server]__0rr5u24i9tjyc._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10y66e1xx8xiq._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10y66e1xx8xiq._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11w36a4le04vy._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11w36a4le04vy._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1gb-3dttuacyz._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1gb-3dttuacyz._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1k25lo5ka4mgd._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1k25lo5ka4mgd._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1m9atpy0vkbmj._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0dywrno7zb0r_._.js.map → [root-of-the-server]__1m9atpy0vkbmj._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1w5swo8gmjyx6._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__216xd8otb96uo._.js.map → [root-of-the-server]__1w5swo8gmjyx6._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1wl0vw-n8lbkn._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1yjb00o7x58xv._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1yjb00o7x58xv._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0-lfpqqlgfhzj._.js +3 -0
- package/web/.next/server/chunks/ssr/_0-lfpqqlgfhzj._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +1 -1
- package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js +2 -2
- package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0bhvvyz0q_0ja._.js +4 -0
- package/web/.next/server/chunks/ssr/_0bhvvyz0q_0ja._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js +1 -1
- package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +1 -1
- package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js +4 -0
- package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
- package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +1 -1
- package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules_1wdusod3fyk3s._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_1wdusod3fyk3s._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_08hq6z46rczo0._.js +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_20d8hq6wsqwh_.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_20d8hq6wsqwh_.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js +3 -0
- package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_09zipglxee7tv._.js +3 -0
- package/web/.next/server/chunks/ssr/web_09zipglxee7tv._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_0_jk9eione6lx._.js +3 -0
- package/web/.next/server/chunks/ssr/web_0_jk9eione6lx._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js +3 -0
- package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_1ga4pbv72m0ad._.js +1 -1
- package/web/.next/server/chunks/ssr/web_1ga4pbv72m0ad._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js +1 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_app_(console)_parties_page_tsx_0pp63ghly3eyp._.js +1 -1
- package/web/.next/server/chunks/ssr/web_app_(console)_parties_page_tsx_0pp63ghly3eyp._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_085cv0gogrxxf._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_085cv0gogrxxf._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_0ahlkugj7fu3n._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_0ahlkugj7fu3n._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_0i_kwiszuiqcp._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_0i_kwiszuiqcp._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_1--8ungjj--ht._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_1--8ungjj--ht._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_19v3mlx8c_h1-._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_19v3mlx8c_h1-._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_1k6q2m0sl54-8._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_1k6q2m0sl54-8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_1qq_ruz59ldc9._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_1qq_ruz59ldc9._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_forms_1d1jyea2jni9o._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_forms_1d1jyea2jni9o._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_forms_form-state_ts_2142hiopykfk1._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_forms_form-state_ts_2142hiopykfk1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_ui_20x5u9bhxeehi._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_outside-party_ui_20x5u9bhxeehi._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_overview_16dyz2ngvs14b._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_16dyz2ngvs14b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_ui_action-button_tsx_14-5f45xbzbi6._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_overview_ui_action-button_tsx_14-5f45xbzbi6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +39 -3
- package/web/.next/server/next-font-manifest.js +1 -1
- package/web/.next/server/next-font-manifest.json +12 -0
- package/web/.next/server/pages/500.html +1 -1
- package/web/.next/server/preview-props.json +3 -3
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +150 -24
- package/web/.next/static/chunks/183mifyxtyab5.css +3 -0
- package/web/.next/static/chunks/1bnlc-p1_cm01.js +1 -0
- package/web/.next/static/chunks/1juj2_tl8d16x.js +1 -0
- package/web/.next/static/chunks/1jvae6c-4jwji.js +1 -0
- package/web/.next/static/chunks/1pafc2gfswboo.js +1 -0
- package/web/.next/static/chunks/2-t4g6oq6tjkg.js +1 -0
- package/web/.next/static/chunks/21s2_ccrw90ok.js +1 -0
- package/web/.next/static/chunks/2hsi-sahla2aj.js +1 -0
- package/web/.next/static/chunks/2l27ty2dy2pb4.js +1 -0
- package/web/.next/static/chunks/2n2qsek2y94y5.js +1 -0
- package/web/.next/static/chunks/3o8h4o3utbvgc.js +1 -0
- package/web/.next/static/chunks/3tss77vu57zju.js +1 -0
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/types/routes.d.ts +6 -2
- package/web/.next/types/validator.ts +61 -0
- package/web/public/wake-worker.js +17 -0
- package/web/.next/server/chunks/[externals]__12s2uxrv8n30f._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__0k8jiujb_0xtx._.js.map +0 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_10eg3jn_qq_u_.js +0 -3
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_10eg3jn_qq_u_.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0-liudmjwlqmo._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0-liudmjwlqmo._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0dywrno7zb0r_._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0hosi33y5xecr._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0hosi33y5xecr._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k-sy-ven9f2f._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k-sy-ven9f2f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1imel8atfb770._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1rmy72sai5-kh._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1rmy72sai5-kh._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1vkw2kvzx6fpw._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1yydhn6iokbm4._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1yyfc4xf3xa-s._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1yyfc4xf3xa-s._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__216xd8otb96uo._.js +0 -3
- package/web/.next/server/chunks/ssr/_080ao10j8x4km._.js +0 -4
- package/web/.next/server/chunks/ssr/_080ao10j8x4km._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1gb_kwx9jg1et._.js +0 -4
- package/web/.next/server/chunks/ssr/_1gb_kwx9jg1et._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1ulh8nd8_yv_3._.js +0 -4
- package/web/.next/server/chunks/ssr/_1ulh8nd8_yv_3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_compiled_@opentelemetry_api_index_1oy1nwhip-98t.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_compiled_@opentelemetry_api_index_1oy1nwhip-98t.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_06ue1l1ujajps._.js +0 -3
- package/web/.next/server/chunks/ssr/web_06ue1l1ujajps._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_1_rm1ivvp726s._.js +0 -3
- package/web/.next/server/chunks/ssr/web_1_rm1ivvp726s._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_0k3zd1eymtkgq._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_0k3zd1eymtkgq._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_forms_03k1kg82ux_ee._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_forms_03k1kg82ux_ee._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_forms_1-88lvs4ivi73._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_forms_1-88lvs4ivi73._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_forms_15gausi3cpweg._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_forms_15gausi3cpweg._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_ui_outside-party_tsx_06a94oekz1ckq._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_outside-party_ui_outside-party_tsx_06a94oekz1ckq._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_overview_state_inbox-panel_tsx_03hlegjsc27sb._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_overview_state_inbox-panel_tsx_03hlegjsc27sb._.js.map +0 -1
- package/web/.next/static/chunks/1l1gmjf-hz7u_.css +0 -3
- package/web/.next/static/chunks/1ma7v1viiz247.js +0 -1
- package/web/.next/static/chunks/1tfvu44eel7g5.js +0 -1
- package/web/.next/static/chunks/2bg4wnfhuftsq.js +0 -1
- package/web/.next/static/chunks/2yplpvvjibfqw.js +0 -1
- package/web/.next/static/chunks/34syicr_5c5u1.js +0 -1
- package/web/.next/static/chunks/43zbq11isnos4.js +0 -1
- /package/web/.next/server/chunks/{[externals]__12s2uxrv8n30f._.js.map → 0b9d__next-internal_server_app_(console)_overview_focus_route_actions_10hgyjvv-6fus.js.map} +0 -0
- /package/web/.next/static/{ESz77-eaR5ViaU4LRqo0i → 3whgLnRJ9iJe_25h6KGzQ}/_buildManifest.js +0 -0
- /package/web/.next/static/{ESz77-eaR5ViaU4LRqo0i → 3whgLnRJ9iJe_25h6KGzQ}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{ESz77-eaR5ViaU4LRqo0i → 3whgLnRJ9iJe_25h6KGzQ}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { readAgentStatement } from '../a2a-out/read-agent-statement.js';
|
|
2
|
+
import { refuse } from '../shared/errors.js';
|
|
3
|
+
import { APPROVING_SCOPE, EVERY_APP_SHIP_SCOPES, scopeNotHeld } from './approver.js';
|
|
4
|
+
import { A2A_AGENT_SHIP_TYPE, approved, UNCOMMISSIONED } from './approve-party.js';
|
|
5
|
+
/**
|
|
6
|
+
* Use case: an actor holding gateway:approve adds an outside A2A agent by
|
|
7
|
+
* its card address (slice 5). The gateway reads the card first: one that
|
|
8
|
+
* does not answer, is no AgentCard or makes no valid statement is not
|
|
9
|
+
* added, and nothing is commissioned. Then it commissions and crews an
|
|
10
|
+
* `a2a-agent` proxy ship with the owner and only scopes the approver holds,
|
|
11
|
+
* as every approval does, keeps the credential in the vault, and writes the
|
|
12
|
+
* card's domain as the fact it checked. The agent is repeatable, A2A's
|
|
13
|
+
* default (A9). Its statement is written once its worker starts.
|
|
14
|
+
*/
|
|
15
|
+
export function createAddA2aAgent(deps) {
|
|
16
|
+
return async ({ actor, requestId, name, cardUrl, credential, concurrencyLimit, ownerShipId, scopes }) => {
|
|
17
|
+
if (!actor.scopes.includes(APPROVING_SCOPE)) {
|
|
18
|
+
return refuse('NOT_AN_APPROVER', `Adding an outside A2A agent needs ${APPROVING_SCOPE}`);
|
|
19
|
+
}
|
|
20
|
+
const notHeld = scopeNotHeld(actor, scopes);
|
|
21
|
+
if (notHeld !== undefined) {
|
|
22
|
+
return refuse('SCOPE_NOT_HELD', `You may grant only scopes you hold: not ${notHeld}`);
|
|
23
|
+
}
|
|
24
|
+
const { fleetId } = actor;
|
|
25
|
+
if (!(await deps.servesOutsideParties(fleetId))) {
|
|
26
|
+
return refuse('OUTSIDE_PARTIES_OFF', "This fleet's outside parties are off: turn them on first");
|
|
27
|
+
}
|
|
28
|
+
const statement = await readAgentStatement(deps, { name, cardUrl, isRepeatable: true });
|
|
29
|
+
if (!statement.isOk) {
|
|
30
|
+
return statement;
|
|
31
|
+
}
|
|
32
|
+
const granted = scopes.filter((scope) => !EVERY_APP_SHIP_SCOPES.has(scope));
|
|
33
|
+
const requestHash = deps.hasher.hash(JSON.stringify([requestId, name, cardUrl, credential, concurrencyLimit, ownerShipId, granted]));
|
|
34
|
+
return approved(deps, {
|
|
35
|
+
fleetId,
|
|
36
|
+
type: A2A_AGENT_SHIP_TYPE,
|
|
37
|
+
scopes: granted,
|
|
38
|
+
requestHash,
|
|
39
|
+
owner: ownerShipId,
|
|
40
|
+
party: ({ approvedAt }) => ({ fleetId, name, kind: 'a2aAgent', cardUrl, credential, concurrencyLimit, isRepeatable: true, ...UNCOMMISSIONED, requestId, requestHash, approvedAt }),
|
|
41
|
+
isOwn: (earlier) => earlier.kind === 'a2aAgent',
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=add-a2a-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-a2a-agent.js","sourceRoot":"","sources":["../../../src/core/parties/add-a2a-agent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAG/D,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAA+C,MAAM,oBAAoB,CAAC;AAiBhI;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA8D;IAC9F,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE;QACtG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,iBAAiB,EAAE,qCAAqC,eAAe,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,gBAAgB,EAAE,2CAA2C,OAAO,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,qBAAqB,EAAE,0DAA0D,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACxF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACrI,OAAO,QAAQ,CAAgB,IAAI,EAAE;YACnC,OAAO;YACP,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,OAAO;YACf,WAAW;YACX,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;YAClL,KAAK,EAAE,CAAC,OAAO,EAA4B,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU;SAC1E,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { Actor } from '../actors/authenticate-actor.js';
|
|
3
|
+
import type { OAuthSecrets } from '../oauth/ports.js';
|
|
4
|
+
import { type DomainError } from '../shared/errors.js';
|
|
5
|
+
import { type Result } from '../shared/result.js';
|
|
6
|
+
import { type ApprovalDeps, type ApprovePartyRefusal } from './approve-party.js';
|
|
7
|
+
import type { ShownParty } from './shown-party.js';
|
|
8
|
+
export type AddA2aClientRefusal = ApprovePartyRefusal | DomainError<'NOT_AN_APPROVER' | 'SCOPE_NOT_HELD'>;
|
|
9
|
+
export type AddA2aClient = (input: {
|
|
10
|
+
actor: Actor;
|
|
11
|
+
requestId: string;
|
|
12
|
+
name: string;
|
|
13
|
+
ownerShipId: ShipId;
|
|
14
|
+
scopes: readonly string[];
|
|
15
|
+
}) => Promise<Result<{
|
|
16
|
+
party: ShownParty;
|
|
17
|
+
bearer: string;
|
|
18
|
+
}, AddA2aClientRefusal>>;
|
|
19
|
+
/**
|
|
20
|
+
* Use case: an actor holding gateway:approve adds an outside A2A client
|
|
21
|
+
* (decision 0060). An A2A client is a machine with no browser, so nobody
|
|
22
|
+
* requests it: the approver names it, its owner and its scopes, only ones
|
|
23
|
+
* it holds. The gateway commissions and crews an `a2a-client` proxy ship as
|
|
24
|
+
* every approval does, then shows a new bearer once and keeps only its
|
|
25
|
+
* hash. The same request again, after an answer that was lost, shows a new
|
|
26
|
+
* bearer in place of the first, so the approver is never left without one.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createAddA2aClient(deps: ApprovalDeps & {
|
|
29
|
+
secrets: Pick<OAuthSecrets, 'newSecret' | 'hashOf'>;
|
|
30
|
+
}): AddA2aClient;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { APPROVING_SCOPE, EVERY_APP_SHIP_SCOPES, scopeNotHeld } from './approver.js';
|
|
4
|
+
import { A2A_CLIENT_SHIP_TYPE, approved, UNCOMMISSIONED } from './approve-party.js';
|
|
5
|
+
/**
|
|
6
|
+
* Use case: an actor holding gateway:approve adds an outside A2A client
|
|
7
|
+
* (decision 0060). An A2A client is a machine with no browser, so nobody
|
|
8
|
+
* requests it: the approver names it, its owner and its scopes, only ones
|
|
9
|
+
* it holds. The gateway commissions and crews an `a2a-client` proxy ship as
|
|
10
|
+
* every approval does, then shows a new bearer once and keeps only its
|
|
11
|
+
* hash. The same request again, after an answer that was lost, shows a new
|
|
12
|
+
* bearer in place of the first, so the approver is never left without one.
|
|
13
|
+
*/
|
|
14
|
+
export function createAddA2aClient(deps) {
|
|
15
|
+
return async ({ actor, requestId, name, ownerShipId, scopes }) => {
|
|
16
|
+
if (!actor.scopes.includes(APPROVING_SCOPE)) {
|
|
17
|
+
return refuse('NOT_AN_APPROVER', `Adding an outside A2A client needs ${APPROVING_SCOPE}`);
|
|
18
|
+
}
|
|
19
|
+
const notHeld = scopeNotHeld(actor, scopes);
|
|
20
|
+
if (notHeld !== undefined) {
|
|
21
|
+
return refuse('SCOPE_NOT_HELD', `You may grant only scopes you hold: not ${notHeld}`);
|
|
22
|
+
}
|
|
23
|
+
const granted = scopes.filter((scope) => !EVERY_APP_SHIP_SCOPES.has(scope));
|
|
24
|
+
const { fleetId } = actor;
|
|
25
|
+
const requestHash = deps.hasher.hash(JSON.stringify([requestId, name, ownerShipId, granted]));
|
|
26
|
+
const party = await approved(deps, {
|
|
27
|
+
fleetId,
|
|
28
|
+
type: A2A_CLIENT_SHIP_TYPE,
|
|
29
|
+
scopes: granted,
|
|
30
|
+
requestHash,
|
|
31
|
+
owner: ownerShipId,
|
|
32
|
+
party: ({ approvedAt }) => ({ fleetId, name, kind: 'a2aClient', bearerHash: null, ...UNCOMMISSIONED, requestId, requestHash, approvedAt }),
|
|
33
|
+
isOwn: (earlier) => earlier.kind === 'a2aClient',
|
|
34
|
+
});
|
|
35
|
+
if (!party.isOk) {
|
|
36
|
+
return party;
|
|
37
|
+
}
|
|
38
|
+
const kept = await deps.parties.find(fleetId, name);
|
|
39
|
+
if (kept?.kind !== 'a2aClient') {
|
|
40
|
+
return refuse('PARTY_EXISTS', `A party named ${name} was approved already`);
|
|
41
|
+
}
|
|
42
|
+
const bearer = deps.secrets.newSecret();
|
|
43
|
+
await deps.parties.save({ ...kept, bearerHash: deps.secrets.hashOf(bearer) });
|
|
44
|
+
return ok({ party: party.value, bearer });
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=add-a2a-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-a2a-client.js","sourceRoot":"","sources":["../../../src/core/parties/add-a2a-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,cAAc,EAA+C,MAAM,oBAAoB,CAAC;AAcjI;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA4E;IAC7G,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE;QAC/D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,eAAe,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,gBAAgB,EAAE,2CAA2C,OAAO,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAiB,IAAI,EAAE;YACjD,OAAO;YACP,IAAI,EAAE,oBAAoB;YAC1B,MAAM,EAAE,OAAO;YACf,WAAW;YACX,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;YAC1I,KAAK,EAAE,CAAC,OAAO,EAA6B,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;SAC5E,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,IAAI,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,cAAc,EAAE,iBAAiB,IAAI,uBAAuB,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9E,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { Actor } from '../actors/authenticate-actor.js';
|
|
3
|
+
import type { OAuthClients, OAuthSecrets } from '../oauth/ports.js';
|
|
4
|
+
import { type DomainError } from '../shared/errors.js';
|
|
5
|
+
import { type Result } from '../shared/result.js';
|
|
6
|
+
import type { ApproveClientParty, ApprovePartyRefusal } from './approve-party.js';
|
|
7
|
+
import type { PartyStore } from './ports.js';
|
|
8
|
+
import type { ShownParty } from './shown-party.js';
|
|
9
|
+
export type AddClientPartyRefusal = DomainError<'NOT_AN_APPROVER' | 'SCOPE_NOT_HELD' | 'CLIENT_HAS_PARTY'> | ApprovePartyRefusal;
|
|
10
|
+
/** A client party as its approver reads it once: its client id, and its secret only when this call crewed its proxy ship. */
|
|
11
|
+
export interface AddedClientParty {
|
|
12
|
+
readonly party: ShownParty;
|
|
13
|
+
readonly clientId: string;
|
|
14
|
+
readonly clientSecret: string | null;
|
|
15
|
+
}
|
|
16
|
+
export type AddClientParty = (input: {
|
|
17
|
+
actor: Actor;
|
|
18
|
+
requestId: string;
|
|
19
|
+
name: string;
|
|
20
|
+
ownerShipId: ShipId;
|
|
21
|
+
scopes: readonly string[];
|
|
22
|
+
}) => Promise<Result<AddedClientParty, AddClientPartyRefusal>>;
|
|
23
|
+
/**
|
|
24
|
+
* Use case: an actor holding gateway:approve adds a client party with no
|
|
25
|
+
* human at the authorize step (vendor platforms V4): its name, its owner and
|
|
26
|
+
* scopes, only scopes it holds. The gateway commissions and crews its
|
|
27
|
+
* mcp-client proxy ship as for any client party, the same request again
|
|
28
|
+
* picking up where the last one stopped. Its OAuth client signs in by client
|
|
29
|
+
* credentials, with no redirect URI. Its secret is answered once, when this
|
|
30
|
+
* call crews the proxy ship, and kept only as its hash; a party left
|
|
31
|
+
* awaiting crew gets its secret when parties.crew crews it.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createAddClientParty(deps: {
|
|
34
|
+
parties: Pick<PartyStore, 'find'>;
|
|
35
|
+
approveClientParty: ApproveClientParty;
|
|
36
|
+
clients: OAuthClients;
|
|
37
|
+
secrets: OAuthSecrets;
|
|
38
|
+
}): AddClientParty;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { APPROVING_SCOPE, EVERY_APP_SHIP_SCOPES, scopeNotHeld } from './approver.js';
|
|
4
|
+
/**
|
|
5
|
+
* Use case: an actor holding gateway:approve adds a client party with no
|
|
6
|
+
* human at the authorize step (vendor platforms V4): its name, its owner and
|
|
7
|
+
* scopes, only scopes it holds. The gateway commissions and crews its
|
|
8
|
+
* mcp-client proxy ship as for any client party, the same request again
|
|
9
|
+
* picking up where the last one stopped. Its OAuth client signs in by client
|
|
10
|
+
* credentials, with no redirect URI. Its secret is answered once, when this
|
|
11
|
+
* call crews the proxy ship, and kept only as its hash; a party left
|
|
12
|
+
* awaiting crew gets its secret when parties.crew crews it.
|
|
13
|
+
*/
|
|
14
|
+
export function createAddClientParty(deps) {
|
|
15
|
+
return async ({ actor, requestId, name, ownerShipId, scopes }) => {
|
|
16
|
+
if (!actor.scopes.includes(APPROVING_SCOPE)) {
|
|
17
|
+
return refuse('NOT_AN_APPROVER', `Adding a client party needs ${APPROVING_SCOPE}`);
|
|
18
|
+
}
|
|
19
|
+
const notHeld = scopeNotHeld(actor, scopes);
|
|
20
|
+
if (notHeld !== undefined) {
|
|
21
|
+
return refuse('SCOPE_NOT_HELD', `You may grant only scopes you hold: not ${notHeld}`);
|
|
22
|
+
}
|
|
23
|
+
const earlier = await deps.parties.find(actor.fleetId, name);
|
|
24
|
+
// The same request again keeps its client id; a new one is told apart by its request id.
|
|
25
|
+
const clientId = earlier?.kind === 'mcpClient' ? earlier.clientId : `client-${deps.secrets.newSecret()}`;
|
|
26
|
+
const granted = scopes.filter((scope) => !EVERY_APP_SHIP_SCOPES.has(scope));
|
|
27
|
+
const approved = await deps.approveClientParty({ operatorFleetId: actor.fleetId, requestId, name, clientId, ownerShipId, scopes: granted });
|
|
28
|
+
if (!approved.isOk) {
|
|
29
|
+
return approved;
|
|
30
|
+
}
|
|
31
|
+
const party = approved.value;
|
|
32
|
+
if (earlier?.state === 'crewed') {
|
|
33
|
+
return ok({ party, clientId, clientSecret: null });
|
|
34
|
+
}
|
|
35
|
+
const clientSecret = party.state === 'crewed' ? deps.secrets.newSecret() : null;
|
|
36
|
+
await deps.clients.save({ clientId, fleetId: actor.fleetId, name, redirectUris: [], secretHash: clientSecret === null ? null : deps.secrets.hashOf(clientSecret), grant: 'clientCredentials' });
|
|
37
|
+
return ok({ party, clientId, clientSecret });
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=add-client-party.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-client-party.js","sourceRoot":"","sources":["../../../src/core/parties/add-client-party.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAerF;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAKpC;IACC,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE;QAC/D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,iBAAiB,EAAE,+BAA+B,eAAe,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,gBAAgB,EAAE,2CAA2C,OAAO,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC7D,yFAAyF;QACzF,MAAM,QAAQ,GAAG,OAAO,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QACzG,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5I,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,IAAI,OAAO,EAAE,KAAK,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAChM,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -5,12 +5,18 @@ import type { Clock } from '../shared/clock.js';
|
|
|
5
5
|
import { type DomainError } from '../shared/errors.js';
|
|
6
6
|
import { type Result } from '../shared/result.js';
|
|
7
7
|
import type { McpServerCredential } from '../vault/credential.js';
|
|
8
|
+
import { type Party } from './party.js';
|
|
8
9
|
import type { PartyStore, ProxyShipDoor } from './ports.js';
|
|
9
10
|
import { type ShownParty } from './shown-party.js';
|
|
11
|
+
import type { ToolSwitches } from './tool-switches.js';
|
|
10
12
|
/** The type of every outside MCP server's proxy ship. */
|
|
11
13
|
export declare const MCP_SERVER_SHIP_TYPE = "mcp-server";
|
|
12
14
|
/** The type of every outside MCP client's proxy ship. */
|
|
13
15
|
export declare const MCP_CLIENT_SHIP_TYPE = "mcp-client";
|
|
16
|
+
/** The type of every outside A2A client's proxy ship (decision 0060). */
|
|
17
|
+
export declare const A2A_CLIENT_SHIP_TYPE = "a2a-client";
|
|
18
|
+
/** The type of every outside A2A agent's proxy ship (slice 5). */
|
|
19
|
+
export declare const A2A_AGENT_SHIP_TYPE = "a2a-agent";
|
|
14
20
|
export type ApprovePartyRefusal = DomainError<'OUTSIDE_PARTIES_OFF' | 'NOT_CONNECTED' | 'PARTY_EXISTS' | 'COMMISSION_REFUSED' | 'FLEET_UNAVAILABLE'>;
|
|
15
21
|
export type ApproveParty = (input: {
|
|
16
22
|
operatorFleetId: FleetId;
|
|
@@ -22,6 +28,8 @@ export type ApproveParty = (input: {
|
|
|
22
28
|
/** The scopes granted its proxy ship beside the ones every app ship gets (decision 0046). */
|
|
23
29
|
scopes: readonly string[];
|
|
24
30
|
concurrencyLimit: number;
|
|
31
|
+
/** The tools the approver switched on and off; none chosen means every tool the server lists at its first statement is on. */
|
|
32
|
+
toolSwitches: ToolSwitches | null;
|
|
25
33
|
}) => Promise<Result<ShownParty, ApprovePartyRefusal>>;
|
|
26
34
|
export type ApproveClientParty = (input: {
|
|
27
35
|
operatorFleetId: FleetId;
|
|
@@ -31,7 +39,7 @@ export type ApproveClientParty = (input: {
|
|
|
31
39
|
ownerShipId: ShipId;
|
|
32
40
|
scopes: readonly string[];
|
|
33
41
|
}) => Promise<Result<ShownParty, ApprovePartyRefusal | DomainError<'CLIENT_HAS_PARTY'>>>;
|
|
34
|
-
interface ApprovalDeps {
|
|
42
|
+
export interface ApprovalDeps {
|
|
35
43
|
connections: ConnectionStore;
|
|
36
44
|
parties: PartyStore;
|
|
37
45
|
door: ProxyShipDoor;
|
|
@@ -40,6 +48,40 @@ interface ApprovalDeps {
|
|
|
40
48
|
servesOutsideParties: (fleetId: FleetId) => Promise<boolean>;
|
|
41
49
|
clock: Clock;
|
|
42
50
|
}
|
|
51
|
+
/** What one approval asks for: the party it keeps, as it is before its proxy ship is commissioned, under its request's hash. */
|
|
52
|
+
export interface Approval<P extends Party> {
|
|
53
|
+
fleetId: FleetId;
|
|
54
|
+
type: string;
|
|
55
|
+
/** The owner the approver picked: named at the commission, then the fleet's alone (decision 0056). */
|
|
56
|
+
owner: ShipId;
|
|
57
|
+
scopes: readonly string[];
|
|
58
|
+
requestHash: string;
|
|
59
|
+
party: (fields: {
|
|
60
|
+
approvedAt: Date;
|
|
61
|
+
}) => P;
|
|
62
|
+
/** Whether a party kept under the name is this approval's own kind, so a repeat finds it. */
|
|
63
|
+
isOwn: (earlier: Party) => earlier is P;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The approval flow every party shares (interop I-5). The gateway, as its
|
|
67
|
+
* own ship, commissions the party's app proxy ship owned by the owner argo
|
|
68
|
+
* picked (decisions 0044, 0045), under argo's request id as the idempotency
|
|
69
|
+
* key, then crews it with its secret and keeps the crew token. Each step is
|
|
70
|
+
* kept before the next, so the same approval again picks up where a crash or
|
|
71
|
+
* a fleet that did not answer left it, and commissions no second ship. A
|
|
72
|
+
* commission the fleet stored but whose answer was lost leaves the ship
|
|
73
|
+
* awaiting crew: its secret was shown once. A refused commission keeps
|
|
74
|
+
* nothing, so argo may approve again. While the fleet's outside parties are
|
|
75
|
+
* off, nothing is approved (interop I-3).
|
|
76
|
+
*/
|
|
77
|
+
export declare function approved<P extends Party>(deps: ApprovalDeps, approval: Approval<P>): Promise<Result<ShownParty, ApprovePartyRefusal>>;
|
|
78
|
+
/** What a party is before its proxy ship is commissioned. */
|
|
79
|
+
export declare const UNCOMMISSIONED: {
|
|
80
|
+
readonly state: "commissioning";
|
|
81
|
+
readonly proxyShipId: null;
|
|
82
|
+
readonly secret: null;
|
|
83
|
+
readonly crewToken: null;
|
|
84
|
+
};
|
|
43
85
|
/**
|
|
44
86
|
* Use case: argo approves an outside MCP server as a party of its fleet: the
|
|
45
87
|
* gateway commissions and crews its proxy ship, and keeps the server's
|
|
@@ -52,4 +94,3 @@ export declare function createApproveParty(deps: ApprovalDeps): ApproveParty;
|
|
|
52
94
|
* the client then calls the fleet as. One party per client in a fleet.
|
|
53
95
|
*/
|
|
54
96
|
export declare function createApproveClientParty(deps: ApprovalDeps): ApproveClientParty;
|
|
55
|
-
export {};
|
|
@@ -6,6 +6,10 @@ import { shownPartyOf } from './shown-party.js';
|
|
|
6
6
|
export const MCP_SERVER_SHIP_TYPE = 'mcp-server';
|
|
7
7
|
/** The type of every outside MCP client's proxy ship. */
|
|
8
8
|
export const MCP_CLIENT_SHIP_TYPE = 'mcp-client';
|
|
9
|
+
/** The type of every outside A2A client's proxy ship (decision 0060). */
|
|
10
|
+
export const A2A_CLIENT_SHIP_TYPE = 'a2a-client';
|
|
11
|
+
/** The type of every outside A2A agent's proxy ship (slice 5). */
|
|
12
|
+
export const A2A_AGENT_SHIP_TYPE = 'a2a-agent';
|
|
9
13
|
/**
|
|
10
14
|
* The approval flow every party shares (interop I-5). The gateway, as its
|
|
11
15
|
* own ship, commissions the party's app proxy ship owned by the owner argo
|
|
@@ -18,7 +22,7 @@ export const MCP_CLIENT_SHIP_TYPE = 'mcp-client';
|
|
|
18
22
|
* nothing, so argo may approve again. While the fleet's outside parties are
|
|
19
23
|
* off, nothing is approved (interop I-3).
|
|
20
24
|
*/
|
|
21
|
-
async function approved(deps, approval) {
|
|
25
|
+
export async function approved(deps, approval) {
|
|
22
26
|
/**
|
|
23
27
|
* The crewed party, once the gateway wrote what it checked about it
|
|
24
28
|
* (decision 0059). A fact the fleet refuses takes nothing from the
|
|
@@ -79,7 +83,7 @@ async function approved(deps, approval) {
|
|
|
79
83
|
return secret === null ? ok(shownPartyOf(awaiting)) : crewed({ ...awaiting, proxyShipId: shipId, secret }, gateway.crewToken);
|
|
80
84
|
}
|
|
81
85
|
/** What a party is before its proxy ship is commissioned. */
|
|
82
|
-
const UNCOMMISSIONED = { state: 'commissioning', proxyShipId: null, secret: null, crewToken: null };
|
|
86
|
+
export const UNCOMMISSIONED = { state: 'commissioning', proxyShipId: null, secret: null, crewToken: null };
|
|
83
87
|
/**
|
|
84
88
|
* Use case: argo approves an outside MCP server as a party of its fleet: the
|
|
85
89
|
* gateway commissions and crews its proxy ship, and keeps the server's
|
|
@@ -87,15 +91,15 @@ const UNCOMMISSIONED = { state: 'commissioning', proxyShipId: null, secret: null
|
|
|
87
91
|
*/
|
|
88
92
|
export function createApproveParty(deps) {
|
|
89
93
|
return (input) => {
|
|
90
|
-
const { operatorFleetId: fleetId, requestId, name, url, credential, ownerShipId, scopes, concurrencyLimit } = input;
|
|
91
|
-
const requestHash = deps.hasher.hash(JSON.stringify([requestId, name, url, credential, ownerShipId, scopes, concurrencyLimit]));
|
|
94
|
+
const { operatorFleetId: fleetId, requestId, name, url, credential, ownerShipId, scopes, concurrencyLimit, toolSwitches } = input;
|
|
95
|
+
const requestHash = deps.hasher.hash(JSON.stringify([requestId, name, url, credential, ownerShipId, scopes, concurrencyLimit, toolSwitches === null ? null : [...toolSwitches]]));
|
|
92
96
|
return approved(deps, {
|
|
93
97
|
fleetId,
|
|
94
98
|
type: MCP_SERVER_SHIP_TYPE,
|
|
95
99
|
scopes,
|
|
96
100
|
requestHash,
|
|
97
101
|
owner: ownerShipId,
|
|
98
|
-
party: ({ approvedAt }) => ({ fleetId, name, kind: 'mcpServer', url, credential, concurrencyLimit, ...UNCOMMISSIONED, requestId, requestHash, approvedAt }),
|
|
102
|
+
party: ({ approvedAt }) => ({ fleetId, name, kind: 'mcpServer', url, credential, concurrencyLimit, toolSwitches, ...UNCOMMISSIONED, requestId, requestHash, approvedAt }),
|
|
99
103
|
isOwn: (earlier) => earlier.kind === 'mcpServer',
|
|
100
104
|
});
|
|
101
105
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approve-party.js","sourceRoot":"","sources":["../../../src/core/parties/approve-party.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAwD,MAAM,YAAY,CAAC;AAEnG,OAAO,EAAE,YAAY,EAAmB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"approve-party.js","sourceRoot":"","sources":["../../../src/core/parties/approve-party.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAwD,MAAM,YAAY,CAAC;AAEnG,OAAO,EAAE,YAAY,EAAmB,MAAM,kBAAkB,CAAC;AAGjE,yDAAyD;AACzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEjD,yDAAyD;AACzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEjD,yEAAyE;AACzE,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEjD,kEAAkE;AAClE,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAkD/C;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAkB,IAAkB,EAAE,QAAqB;IACvF;;;;;OAKG;IACH,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAQ,EAAE,gBAAwB,EAAoD,EAAE;QAC9G,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,KAAK,EAAE,KAAkD,EAAE,gBAAwB,EAAoD,EAAE;QACtJ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACjG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACrB,OAAO,MAAM,CAAC,mBAAmB,EAAE,0DAA0D,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3H,CAAC;QACD,MAAM,IAAI,GAAM,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACnG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;IAC7B,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,qBAAqB,EAAE,0DAA0D,CAAC,CAAC;IACnG,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,MAAM,CAAC,eAAe,EAAE,uEAAuE,CAAC,CAAC;IAC1G,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1F,OAAO,MAAM,CAAC,cAAc,EAAE,iBAAiB,KAAK,CAAC,IAAI,uBAAuB,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,KAAK,GAAM,OAAO,IAAI,KAAK,CAAC;IAClC,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACxD,OAAO,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE/B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACtM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAC9C,OAAO,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/G,CAAC;QACD,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC,oBAAoB,EAAE,qCAAqC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC;IAC9C,MAAM,QAAQ,GAAM,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACrF,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;AAChI,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAW,CAAC;AAEpH;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAkB;IACnD,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;QAClI,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAClL,OAAO,QAAQ,CAAiB,IAAI,EAAE;YACpC,OAAO;YACP,IAAI,EAAE,oBAAoB;YAC1B,MAAM;YACN,WAAW;YACX,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;YACzK,KAAK,EAAE,CAAC,OAAO,EAA6B,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;SAC5E,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAkB;IACzD,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QAC3F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChE,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,kBAAkB,EAAE,4BAA4B,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACvG,OAAO,QAAQ,CAAiB,IAAI,EAAE;YACpC,OAAO;YACP,IAAI,EAAE,oBAAoB;YAC1B,MAAM;YACN,WAAW;YACX,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;YAClI,KAAK,EAAE,CAAC,OAAO,EAA6B,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;SAC5E,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Actor } from '../actors/authenticate-actor.js';
|
|
2
|
+
/** The scope the gateway declares for approving outside parties (decision 0056). */
|
|
3
|
+
export declare const APPROVING_SCOPE = "gateway:approve";
|
|
4
|
+
/** The scopes every app ship gets (decision 0046), so an approver need not hold them to grant them. */
|
|
5
|
+
export declare const EVERY_APP_SHIP_SCOPES: ReadonlySet<string>;
|
|
6
|
+
/** The first scope an approver grants a party but does not hold itself, if any: an approver grants only scopes it holds. */
|
|
7
|
+
export declare function scopeNotHeld(approver: Actor, scopes: readonly string[]): string | undefined;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** The scope the gateway declares for approving outside parties (decision 0056). */
|
|
2
|
+
export const APPROVING_SCOPE = 'gateway:approve';
|
|
3
|
+
/** The scopes every app ship gets (decision 0046), so an approver need not hold them to grant them. */
|
|
4
|
+
export const EVERY_APP_SHIP_SCOPES = new Set(['messages:send', 'messages:receive']);
|
|
5
|
+
/** The first scope an approver grants a party but does not hold itself, if any: an approver grants only scopes it holds. */
|
|
6
|
+
export function scopeNotHeld(approver, scopes) {
|
|
7
|
+
return scopes.find((scope) => !EVERY_APP_SHIP_SCOPES.has(scope) && !approver.scopes.includes(scope));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=approver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approver.js","sourceRoot":"","sources":["../../../src/core/parties/approver.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEjD,uGAAuG;AACvG,MAAM,CAAC,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAEzG,4HAA4H;AAC5H,MAAM,UAAU,YAAY,CAAC,QAAe,EAAE,MAAyB;IACrE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACvG,CAAC"}
|
|
@@ -2,10 +2,11 @@ import type { FleetId } from '@aeolus-fleet/common';
|
|
|
2
2
|
import type { McpServerConnection, McpServers } from '../mcp-out/ports.js';
|
|
3
3
|
import { type DomainError } from '../shared/errors.js';
|
|
4
4
|
import { type Result } from '../shared/result.js';
|
|
5
|
-
/** A tool as the check shows it: its name,
|
|
5
|
+
/** A tool as the check shows it: its name, its short description when the server gives one, and whether the server says it reads only. */
|
|
6
6
|
export interface CheckedTool {
|
|
7
7
|
name: string;
|
|
8
8
|
description?: string;
|
|
9
|
+
isReadOnly: boolean;
|
|
9
10
|
}
|
|
10
11
|
export type CheckServer = (input: {
|
|
11
12
|
fleetId: FleetId;
|
|
@@ -15,7 +15,7 @@ export function createCheckServer(deps) {
|
|
|
15
15
|
if (!listed.isOk) {
|
|
16
16
|
return refuse('SERVER_UNREACHABLE', `The MCP server could not be listed: ${listed.error.reason}`);
|
|
17
17
|
}
|
|
18
|
-
return ok({ tools: listed.value.map(({ name, description }) => ({ name, ...(description === undefined ? {} : { description }) })) });
|
|
18
|
+
return ok({ tools: listed.value.map(({ name, description, annotations }) => ({ name, ...(description === undefined ? {} : { description }), isReadOnly: annotations?.readOnlyHint === true })) });
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
21
|
//# sourceMappingURL=check-server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-server.js","sourceRoot":"","sources":["../../../src/core/parties/check-server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"check-server.js","sourceRoot":"","sources":["../../../src/core/parties/check-server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAWtD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA2F;IAC3H,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE;QAC5C,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,qBAAqB,EAAE,0DAA0D,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,oBAAoB,EAAE,uCAAuC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACpG,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACpM,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,21 +1,35 @@
|
|
|
1
1
|
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { FleetDoor } from '../connection/ports.js';
|
|
3
|
+
import type { IssuedTokens, OAuthClients, OAuthSecrets } from '../oauth/ports.js';
|
|
2
4
|
import { type DomainError } from '../shared/errors.js';
|
|
3
5
|
import { type Result } from '../shared/result.js';
|
|
4
6
|
import { type ShownParty } from './shown-party.js';
|
|
5
7
|
import type { PartyStore, ProxyShipDoor } from './ports.js';
|
|
8
|
+
/** A party crewed again, with its new client secret, answered once, where its client signs in by client credentials. */
|
|
9
|
+
export interface CrewedParty {
|
|
10
|
+
readonly party: ShownParty;
|
|
11
|
+
readonly clientSecret: string | null;
|
|
12
|
+
}
|
|
6
13
|
export type CrewParty = (input: {
|
|
7
14
|
operatorFleetId: FleetId;
|
|
8
15
|
name: string;
|
|
9
16
|
secret: string;
|
|
10
|
-
}) => Promise<Result<
|
|
17
|
+
}) => Promise<Result<CrewedParty, DomainError<'NO_SUCH_PARTY' | 'NOT_AWAITING_CREW' | 'SECRET_REFUSED' | 'FLEET_UNAVAILABLE'>>>;
|
|
11
18
|
/**
|
|
12
19
|
* Use case: argo hands over a new secret for a party's proxy ship that awaits
|
|
13
20
|
* crew, taken from a new starting prompt in the console: the commission's
|
|
14
21
|
* answer was lost, and its secret with it, and the gateway's ship may not ask
|
|
15
|
-
* for a new one (orchestrator-1 on aeolus-fleet#876, Q6)
|
|
16
|
-
*
|
|
22
|
+
* for a new one (orchestrator-1 on aeolus-fleet#876, Q6); or its crew was
|
|
23
|
+
* released, which the fleet tells by no longer taking the party's crew token
|
|
24
|
+
* (vendor platforms V8). The gateway crews the same ship with it and keeps
|
|
25
|
+
* the crew token; the secret is never kept. A client that signs in by client
|
|
26
|
+
* credentials gets a new client secret, answered once, in place of the old
|
|
27
|
+
* one, and the tokens the old one gave are revoked.
|
|
17
28
|
*/
|
|
18
29
|
export declare function createCrewParty(deps: {
|
|
19
30
|
parties: PartyStore;
|
|
20
|
-
door: ProxyShipDoor
|
|
31
|
+
door: ProxyShipDoor & Pick<FleetDoor, 'whoami'>;
|
|
32
|
+
clients: OAuthClients;
|
|
33
|
+
secrets: OAuthSecrets;
|
|
34
|
+
tokens: Pick<IssuedTokens, 'revokeParty'>;
|
|
21
35
|
}): CrewParty;
|
|
@@ -1,20 +1,52 @@
|
|
|
1
1
|
import { refuse } from '../shared/errors.js';
|
|
2
2
|
import { ok } from '../shared/result.js';
|
|
3
3
|
import { shownPartyOf } from './shown-party.js';
|
|
4
|
+
/** The fleet's codes for a crew token it no longer takes: the ship's crew was released. */
|
|
5
|
+
const CREW_ENDED = new Set(['LEASE_ENDED', 'UNAUTHORIZED']);
|
|
4
6
|
/**
|
|
5
7
|
* Use case: argo hands over a new secret for a party's proxy ship that awaits
|
|
6
8
|
* crew, taken from a new starting prompt in the console: the commission's
|
|
7
9
|
* answer was lost, and its secret with it, and the gateway's ship may not ask
|
|
8
|
-
* for a new one (orchestrator-1 on aeolus-fleet#876, Q6)
|
|
9
|
-
*
|
|
10
|
+
* for a new one (orchestrator-1 on aeolus-fleet#876, Q6); or its crew was
|
|
11
|
+
* released, which the fleet tells by no longer taking the party's crew token
|
|
12
|
+
* (vendor platforms V8). The gateway crews the same ship with it and keeps
|
|
13
|
+
* the crew token; the secret is never kept. A client that signs in by client
|
|
14
|
+
* credentials gets a new client secret, answered once, in place of the old
|
|
15
|
+
* one, and the tokens the old one gave are revoked.
|
|
10
16
|
*/
|
|
11
17
|
export function createCrewParty(deps) {
|
|
18
|
+
/** Whether the ship awaits crew: never crewed by the gateway, or the fleet no longer takes its crew token. */
|
|
19
|
+
const isAwaitingCrew = async (party) => {
|
|
20
|
+
if (party.state !== 'crewed' || party.crewToken === null) {
|
|
21
|
+
return ok(party.state === 'awaitingCrew');
|
|
22
|
+
}
|
|
23
|
+
const who = await deps.door.whoami(party.crewToken);
|
|
24
|
+
if (!who.isOk && who.error.code === 'UNAVAILABLE') {
|
|
25
|
+
return refuse('FLEET_UNAVAILABLE', `The fleet did not answer: ${who.error.message}`);
|
|
26
|
+
}
|
|
27
|
+
return ok(!who.isOk && CREW_ENDED.has(who.error.code));
|
|
28
|
+
};
|
|
29
|
+
/** The client's new secret, if it signs in by client credentials, kept only as its hash. */
|
|
30
|
+
const newClientSecret = async (party) => {
|
|
31
|
+
const client = party.kind === 'mcpClient' ? await deps.clients.find(party.clientId) : undefined;
|
|
32
|
+
if (client?.grant !== 'clientCredentials') {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const clientSecret = deps.secrets.newSecret();
|
|
36
|
+
await deps.clients.save({ ...client, secretHash: deps.secrets.hashOf(clientSecret) });
|
|
37
|
+
await deps.tokens.revokeParty(party.fleetId, party.name);
|
|
38
|
+
return clientSecret;
|
|
39
|
+
};
|
|
12
40
|
return async ({ operatorFleetId, name, secret }) => {
|
|
13
41
|
const party = await deps.parties.find(operatorFleetId, name);
|
|
14
42
|
if (!party) {
|
|
15
43
|
return refuse('NO_SUCH_PARTY', `No party named ${name}`);
|
|
16
44
|
}
|
|
17
|
-
|
|
45
|
+
const awaiting = await isAwaitingCrew(party);
|
|
46
|
+
if (!awaiting.isOk) {
|
|
47
|
+
return awaiting;
|
|
48
|
+
}
|
|
49
|
+
if (!awaiting.value || party.proxyShipId === null) {
|
|
18
50
|
return refuse('NOT_AWAITING_CREW', `The proxy ship of ${name} does not await crew`);
|
|
19
51
|
}
|
|
20
52
|
const registered = await deps.door.register({ shipId: party.proxyShipId, secret });
|
|
@@ -23,7 +55,7 @@ export function createCrewParty(deps) {
|
|
|
23
55
|
}
|
|
24
56
|
const crewed = { ...party, state: 'crewed', secret: null, crewToken: registered.value.crewToken };
|
|
25
57
|
await deps.parties.save(crewed);
|
|
26
|
-
return ok(shownPartyOf(crewed));
|
|
58
|
+
return ok({ party: shownPartyOf(crewed), clientSecret: await newClientSecret(crewed) });
|
|
27
59
|
};
|
|
28
60
|
}
|
|
29
61
|
//# sourceMappingURL=crew-party.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crew-party.js","sourceRoot":"","sources":["../../../src/core/parties/crew-party.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"crew-party.js","sourceRoot":"","sources":["../../../src/core/parties/crew-party.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { FleetId, ShipId, VerifiedFact } from '@aeolus-fleet/common';
|
|
2
2
|
import type { McpServerCredential } from '../vault/credential.js';
|
|
3
|
+
import type { ToolSwitches } from './tool-switches.js';
|
|
3
4
|
/**
|
|
4
5
|
* Where an approved party's proxy ship stands (interop I-5):
|
|
5
6
|
* - commissioning: argo approved it; the gateway has not seen the fleet commission its ship yet;
|
|
@@ -34,6 +35,8 @@ export interface McpServerParty extends PartyBase {
|
|
|
34
35
|
readonly credential: McpServerCredential;
|
|
35
36
|
/** The most calls the gateway has in flight to the server at once. */
|
|
36
37
|
readonly concurrencyLimit: number;
|
|
38
|
+
/** Which of its tools the fleet may call; none kept yet means every tool it lists (aeolus-fleet#1151). */
|
|
39
|
+
readonly toolSwitches: ToolSwitches | null;
|
|
37
40
|
}
|
|
38
41
|
/** An outside MCP client argo approved at /authorize: it calls fleet ships as its proxy ship (MCP in). */
|
|
39
42
|
export interface McpClientParty extends PartyBase {
|
|
@@ -41,12 +44,31 @@ export interface McpClientParty extends PartyBase {
|
|
|
41
44
|
/** Its OAuth client id: pre-registered, or its metadata document's URL. */
|
|
42
45
|
readonly clientId: string;
|
|
43
46
|
}
|
|
44
|
-
|
|
47
|
+
/** An outside A2A client an approver added (decision 0060): it calls fleet ships as its proxy ship, with the bearer it was shown once (A2A in). */
|
|
48
|
+
export interface A2aClientParty extends PartyBase {
|
|
49
|
+
readonly kind: 'a2aClient';
|
|
50
|
+
/** The hash of the bearer it was shown, which names it on every call; none until one is shown. */
|
|
51
|
+
readonly bearerHash: string | null;
|
|
52
|
+
}
|
|
53
|
+
/** An outside A2A agent an approver added by its card address (slice 5): fleet ships send it messages through its proxy ship (A2A out). */
|
|
54
|
+
export interface A2aAgentParty extends PartyBase {
|
|
55
|
+
readonly kind: 'a2aAgent';
|
|
56
|
+
/** Where its public card is read. */
|
|
57
|
+
readonly cardUrl: string;
|
|
58
|
+
readonly credential: McpServerCredential;
|
|
59
|
+
/** The most messages the gateway has in flight to the agent at once. */
|
|
60
|
+
readonly concurrencyLimit: number;
|
|
61
|
+
/** Whether a message that died before the agent confirmed it may be handed again: A2A's default, until an approver marks it not (A9). */
|
|
62
|
+
readonly isRepeatable: boolean;
|
|
63
|
+
}
|
|
64
|
+
export type Party = McpServerParty | McpClientParty | A2aClientParty | A2aAgentParty;
|
|
45
65
|
/**
|
|
46
66
|
* What the gateway checked about the party behind a proxy ship (decision
|
|
47
67
|
* 0059): the host it reached an MCP server at over TLS, and the domain of the
|
|
48
68
|
* metadata document it read an MCP client's id from over TLS. A client argo
|
|
49
69
|
* registered has no document, and an address without TLS proves no host.
|
|
70
|
+
* The domain an A2A agent's card was read from over TLS. The gateway checks
|
|
71
|
+
* nothing about an A2A client: an approver names it.
|
|
50
72
|
*/
|
|
51
73
|
export declare function verifiedFactsOf(party: Party): VerifiedFact[];
|
|
52
74
|
export {};
|