@aeolus-fleet/gateway 0.31.0 → 0.32.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/fleet/core-version.d.ts +1 -1
- package/dist/adapters/fleet/core-version.js +1 -1
- package/dist/adapters/fleet/proxy-ships-as-actor.js +5 -1
- package/dist/adapters/fleet/proxy-ships-as-actor.js.map +1 -1
- package/dist/adapters/fleet/rest-fleet-door.js +15 -6
- package/dist/adapters/fleet/rest-fleet-door.js.map +1 -1
- package/dist/adapters/http/mcp-endpoint.js +1 -1
- package/dist/adapters/http/mcp-endpoint.js.map +1 -1
- package/dist/adapters/http/person-tools.js +1 -1
- package/dist/adapters/http/person-tools.js.map +1 -1
- package/dist/adapters/pagasae/email-channel.js +4 -2
- package/dist/adapters/pagasae/email-channel.js.map +1 -1
- package/dist/adapters/prisma/generated/commonInputTypes.d.ts +50 -50
- 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 +2 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js +2 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +2 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +2 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
- package/dist/adapters/prisma/generated/models/A2aPush.d.ts +0 -7
- package/dist/adapters/prisma/generated/models/Party.d.ts +70 -1
- package/dist/adapters/prisma/scope-requirements.d.ts +10 -0
- package/dist/adapters/prisma/scope-requirements.js +37 -0
- package/dist/adapters/prisma/scope-requirements.js.map +1 -0
- package/dist/adapters/trpc/router.d.ts +91 -8
- package/dist/adapters/trpc/router.js +98 -11
- package/dist/adapters/trpc/router.js.map +1 -1
- package/dist/app.js +34 -9
- package/dist/app.js.map +1 -1
- package/dist/core/a2a-out/agent-event.d.ts +1 -1
- package/dist/core/a2a-out/agent-event.js +2 -2
- package/dist/core/a2a-out/agent-event.js.map +1 -1
- package/dist/core/a2a-out/agent-statement.d.ts +2 -1
- package/dist/core/a2a-out/agent-statement.js +5 -2
- package/dist/core/a2a-out/agent-statement.js.map +1 -1
- package/dist/core/a2a-out/hand-a2a-message.d.ts +7 -2
- package/dist/core/a2a-out/hand-a2a-message.js +15 -1
- package/dist/core/a2a-out/hand-a2a-message.js.map +1 -1
- package/dist/core/a2a-out/read-agent-statement.d.ts +1 -0
- package/dist/core/a2a-out/read-agent-statement.js +1 -1
- package/dist/core/a2a-out/read-agent-statement.js.map +1 -1
- package/dist/core/a2a-out/state-a2a-agent.d.ts +3 -2
- package/dist/core/a2a-out/state-a2a-agent.js +3 -2
- package/dist/core/a2a-out/state-a2a-agent.js.map +1 -1
- package/dist/core/account-sign-in/account-in-view.d.ts +10 -1
- package/dist/core/account-sign-in/account-in-view.js +17 -4
- package/dist/core/account-sign-in/account-in-view.js.map +1 -1
- package/dist/core/connection/ports.d.ts +8 -0
- package/dist/core/mcp-out/hand-call.d.ts +6 -2
- package/dist/core/mcp-out/hand-call.js +14 -1
- package/dist/core/mcp-out/hand-call.js.map +1 -1
- package/dist/core/mcp-out/state-party.d.ts +3 -2
- package/dist/core/mcp-out/state-party.js +2 -2
- package/dist/core/mcp-out/state-party.js.map +1 -1
- package/dist/core/mcp-out/statement.d.ts +16 -0
- package/dist/core/mcp-out/statement.js +10 -3
- package/dist/core/mcp-out/statement.js.map +1 -1
- package/dist/core/operator/ports.d.ts +4 -4
- package/dist/core/parties/add-a2a-agent.js +1 -1
- package/dist/core/parties/add-a2a-agent.js.map +1 -1
- package/dist/core/parties/check-approving.d.ts +36 -0
- package/dist/core/parties/check-approving.js +48 -0
- package/dist/core/parties/check-approving.js.map +1 -0
- package/dist/core/parties/check-required-scopes.d.ts +34 -0
- package/dist/core/parties/check-required-scopes.js +27 -0
- package/dist/core/parties/check-required-scopes.js.map +1 -0
- package/dist/core/parties/ports.d.ts +21 -0
- package/dist/core/parties/read-listed-scopes.d.ts +17 -0
- package/dist/core/parties/read-listed-scopes.js +23 -0
- package/dist/core/parties/read-listed-scopes.js.map +1 -0
- package/dist/core/parties/read-scope-requirements.d.ts +18 -0
- package/dist/core/parties/read-scope-requirements.js +17 -0
- package/dist/core/parties/read-scope-requirements.js.map +1 -0
- package/dist/core/parties/scope-requirements.d.ts +34 -0
- package/dist/core/parties/scope-requirements.js +37 -0
- package/dist/core/parties/scope-requirements.js.map +1 -0
- package/dist/core/parties/set-scope-requirements.d.ts +45 -0
- package/dist/core/parties/set-scope-requirements.js +48 -0
- package/dist/core/parties/set-scope-requirements.js.map +1 -0
- package/dist/core/parties/switch-tools.d.ts +39 -0
- package/dist/core/parties/switch-tools.js +38 -0
- package/dist/core/parties/switch-tools.js.map +1 -0
- package/dist/core/parties/tool-switches.d.ts +4 -2
- package/dist/core/parties/tool-switches.js +2 -1
- package/dist/core/parties/tool-switches.js.map +1 -1
- package/dist/core/people/ports.d.ts +4 -2
- package/dist/core/people/wake-person.d.ts +22 -10
- package/dist/core/people/wake-person.js +88 -20
- package/dist/core/people/wake-person.js.map +1 -1
- package/dist/core/people/web-push-channel.js +1 -1
- package/dist/core/people/web-push-channel.js.map +1 -1
- package/dist/core/shared/errors.d.ts +1 -1
- package/dist/core/shared/errors.js.map +1 -1
- package/package.json +3 -3
- package/src/adapters/prisma/migrations/20261025140000_scope_requirements/migration.sql +3 -0
- package/src/adapters/prisma/schema.prisma +69 -65
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +1 -0
- package/web/.next/build-manifest.json +15 -3
- package/web/.next/diagnostics/route-bundle-stats.json +113 -77
- package/web/.next/fallback-build-manifest.json +3 -3
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/routes-manifest.json +6 -0
- package/web/.next/server/app/(console)/gateway-off/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/gateway-off/page/build-manifest.json +23 -0
- package/web/.next/server/app/(console)/gateway-off/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/(console)/gateway-off/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/(console)/gateway-off/page/server-reference-manifest.json +15 -0
- package/web/.next/server/app/(console)/gateway-off/page.js +19 -0
- package/web/.next/server/app/(console)/gateway-off/page.js.map +5 -0
- package/web/.next/server/app/(console)/gateway-off/page.js.nft.json +1 -0
- package/web/.next/server/app/(console)/gateway-off/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/meetings/[meetingId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page/server-reference-manifest.json +17 -7
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js +4 -4
- 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 +15 -5
- package/web/.next/server/app/(console)/outside-parties/[name]/page.js +4 -4
- 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 +17 -7
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js +4 -4
- 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 +17 -7
- package/web/.next/server/app/(console)/outside-parties/add/page.js +3 -4
- 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/server-reference-manifest.json +2 -2
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/server-reference-manifest.json +2 -2
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page_client-reference-manifest.js +1 -1
- 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.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.nft.json +1 -1
- package/web/.next/server/app/(console)/overview/focus/route.js.nft.json +1 -1
- package/web/.next/server/app/(console)/overview/page/server-reference-manifest.json +7 -7
- 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.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 +7 -7
- 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.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.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.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.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.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.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 +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__0ykc8bq_c06a1._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0ykc8bq_c06a1._.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js.map +1 -1
- 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]__0-og0bl8lr2xq._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0-og0bl8lr2xq._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__00q22dte1g2ww._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__00q22dte1g2ww._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rr5u24i9tjyc._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1-c9wugbbwsp3._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1-c9wugbbwsp3._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__11w36a4le04vy._.js → [root-of-the-server]__1dc6okf5os70a._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1dc6okf5os70a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js +1 -1
- package/web/.next/server/chunks/ssr/_0-lfpqqlgfhzj._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_00dg5cvqofspn._.js +3 -0
- package/web/.next/server/chunks/ssr/_00dg5cvqofspn._.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/_0_kakdt7lb6z-._.js +3 -0
- package/web/.next/server/chunks/ssr/_0_kakdt7lb6z-._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0bhvvyz0q_0ja._.js +1 -1
- package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js +4 -0
- package/web/.next/server/chunks/ssr/_0ka_9elusb800._.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/_0w2ptjht34s6t._.js +3 -0
- package/web/.next/server/chunks/ssr/_0w2ptjht34s6t._.js.map +1 -0
- 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/_12fsn_33ga-n0._.js +1 -1
- package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js +1 -1
- 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/_1uuy6gkkhq6bx._.js +3 -0
- package/web/.next/server/chunks/ssr/_1uuy6gkkhq6bx._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1y1ovmdhl9_ml._.js +3 -0
- package/web/.next/server/chunks/ssr/_1y1ovmdhl9_ml._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_07sxnbglqc5q9._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_07sxnbglqc5q9._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_0_cxkn6vujxay._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_0_cxkn6vujxay._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_0qlo87g8tugr4._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_0qlo87g8tugr4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_15ceu3jhtifcw._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_15ceu3jhtifcw._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_1jvz31plyg2f-._.js +1 -1
- package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_1jvz31plyg2f-._.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_react_utils_FloatingPortalLite_mjs_1uzc1ezeugtex._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_react_utils_FloatingPortalLite_mjs_1uzc1ezeugtex._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1s46s8vlfx01v.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1s46s8vlfx01v.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_0v-7sowo0hupw._.js +1 -1
- package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js +1 -1
- package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_1wcpaty_bz55q._.js +3 -0
- package/web/.next/server/chunks/ssr/web_1wcpaty_bz55q._.js.map +1 -0
- 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_features_0ahlkugj7fu3n._.js → web_features_0xbnkk4hfgr9v._.js} +2 -2
- package/web/.next/server/chunks/ssr/{web_features_0ahlkugj7fu3n._.js.map → web_features_0xbnkk4hfgr9v._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/web_features_10xz3ojtvfi7h._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_10xz3ojtvfi7h._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map +1 -1
- 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_1u0akr22eh_x_._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_forms_1u0akr22eh_x_._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_frame_0pe8cwpxe1egb._.js +1 -1
- 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 +1 -1
- package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js.map +1 -1
- 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_0_9c27knfvw7u._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_outside-party_0_9c27knfvw7u._.js.map +1 -0
- 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_overview_0udx5lm8igils._.js +3 -0
- package/web/.next/server/chunks/ssr/{web_features_overview_16dyz2ngvs14b._.js.map → web_features_overview_0udx5lm8igils._.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_state_1wuk95dw2_whp._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js.map +1 -1
- 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 → web_features_overview_ui_10mb24kjiffea._.js} +2 -2
- package/web/.next/server/chunks/ssr/{web_features_overview_ui_action-button_tsx_14-5f45xbzbi6._.js.map → web_features_overview_ui_10mb24kjiffea._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
- package/web/.next/server/middleware-build-manifest.js +15 -3
- package/web/.next/server/next-font-manifest.js +1 -1
- package/web/.next/server/next-font-manifest.json +4 -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 +55 -29
- package/web/.next/static/chunks/0coxy5zad812a.js +1 -0
- package/web/.next/static/chunks/{2hsi-sahla2aj.js → 0u_4xjk1j74g3.js} +1 -1
- package/web/.next/static/chunks/0v9r_hyyubykq.js +1 -0
- package/web/.next/static/chunks/0zesq1ng-v3s6.js +1 -0
- package/web/.next/static/chunks/10wzmy096av_5.css +3 -0
- package/web/.next/static/chunks/{1juj2_tl8d16x.js → 12c3qjvto3m0f.js} +1 -1
- package/web/.next/static/chunks/1ahn4kx4ld-rc.js +1 -0
- package/web/.next/static/chunks/{21s2_ccrw90ok.js → 1xrn7oqwd48vi.js} +1 -1
- package/web/.next/static/chunks/{3o8h4o3utbvgc.js → 20n2z_lok8v0f.js} +1 -1
- package/web/.next/static/chunks/2cd4e71s711ad.js +1 -0
- package/web/.next/static/chunks/{1pafc2gfswboo.js → 2ew9kpu2kohk4.js} +1 -1
- package/web/.next/static/chunks/2i3ydqqupow_x.js +1 -0
- package/web/.next/static/chunks/2riya89_i0je8.js +1 -0
- package/web/.next/static/chunks/3_pwm8b3mf4mf.js +1 -0
- package/web/.next/static/chunks/{2x00o45pdbkok.js → 3x_8doukmdfpu.js} +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/types/routes.d.ts +2 -1
- package/web/.next/types/validator.ts +17 -0
- package/dist/core/parties/switch-tool.d.ts +0 -29
- package/dist/core/parties/switch-tool.js +0 -33
- package/dist/core/parties/switch-tool.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0m57jyae0dn_7._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0m57jyae0dn_7._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11w36a4le04vy._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1k25lo5ka4mgd._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1k25lo5ka4mgd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1yjb00o7x58xv._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1yjb00o7x58xv._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_0cyjln1rocvt5._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_0cyjln1rocvt5._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_1ins1z8o_qrka._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_1ins1z8o_qrka._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_0i_kwiszuiqcp._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_0i_kwiszuiqcp._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_1--8ungjj--ht._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_1--8ungjj--ht._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_1qq_ruz59ldc9._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_1qq_ruz59ldc9._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_forms_form-state_ts_2142hiopykfk1._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_forms_form-state_ts_2142hiopykfk1._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_ui_20x5u9bhxeehi._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_outside-party_ui_20x5u9bhxeehi._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_overview_16dyz2ngvs14b._.js +0 -3
- package/web/.next/static/chunks/183mifyxtyab5.css +0 -3
- package/web/.next/static/chunks/1bnlc-p1_cm01.js +0 -1
- package/web/.next/static/chunks/1ca21kggixrjz.js +0 -1
- package/web/.next/static/chunks/2-t4g6oq6tjkg.js +0 -1
- package/web/.next/static/chunks/2l27ty2dy2pb4.js +0 -1
- package/web/.next/static/chunks/2n2qsek2y94y5.js +0 -1
- package/web/.next/static/chunks/3tss77vu57zju.js +0 -1
- /package/web/.next/static/{3whgLnRJ9iJe_25h6KGzQ → wnr2MrrQvcto8MOm16D8r}/_buildManifest.js +0 -0
- /package/web/.next/static/{3whgLnRJ9iJe_25h6KGzQ → wnr2MrrQvcto8MOm16D8r}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{3whgLnRJ9iJe_25h6KGzQ → wnr2MrrQvcto8MOm16D8r}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PAYLOAD_MAX_BYTES, payloadBytes } from '@aeolus-fleet/common';
|
|
2
|
+
import { scopesNeeded } from '../parties/scope-requirements.js';
|
|
2
3
|
import { isToolOn, TOOL_NOT_ENABLED } from '../parties/tool-switches.js';
|
|
3
4
|
import { toolCalledBy, toolInputType, toolResultType } from './content-types.js';
|
|
4
5
|
/** The channel the gateway hands a proxy ship's delivery through: its outside MCP server (interop 5.1). */
|
|
@@ -51,7 +52,8 @@ function notACallReply(party, delivery) {
|
|
|
51
52
|
* nothing. A call that died unanswered is handed again only where argo
|
|
52
53
|
* marked its tool repeatable; otherwise it is reported not handled. A call
|
|
53
54
|
* to a tool not switched on is answered an error and reaches no server
|
|
54
|
-
* (aeolus-fleet#1151)
|
|
55
|
+
* (aeolus-fleet#1151); so is a call from a ship that lacks a scope the
|
|
56
|
+
* tool needs (design gateway-scopes, 4.2).
|
|
55
57
|
*/
|
|
56
58
|
export function createHandCall(deps) {
|
|
57
59
|
return async ({ party, delivery }) => {
|
|
@@ -100,6 +102,17 @@ export function createHandCall(deps) {
|
|
|
100
102
|
if (!isToolOn(now?.kind === 'mcpServer' ? now.toolSwitches : party.toolSwitches, tool)) {
|
|
101
103
|
return finish(resultReply(delivery, { tool, result: errorResult(TOOL_NOT_ENABLED) }));
|
|
102
104
|
}
|
|
105
|
+
// The requirements and the sender's scopes as they are now, at hand-over: either may change while a call waits.
|
|
106
|
+
const needed = scopesNeeded(await deps.requirements.find(party.fleetId, party.name), tool);
|
|
107
|
+
const checked = await deps.checkScopes({ fleetId: party.fleetId, senderShipId: delivery.senderShipId, needing: tool, needed });
|
|
108
|
+
switch (checked.kind) {
|
|
109
|
+
case 'unread':
|
|
110
|
+
return AGAIN;
|
|
111
|
+
case 'lacks':
|
|
112
|
+
return finish(resultReply(delivery, { tool, result: errorResult(checked.message) }));
|
|
113
|
+
case 'holds':
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
103
116
|
const handed = await deps.crew.handed(crewToken, { deliveryId: delivery.deliveryId, handOverNumber: (delivery.handOverNumber ?? 0) + 1, channel: MCP_CHANNEL });
|
|
104
117
|
if (!handed.isOk) {
|
|
105
118
|
return AGAIN;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hand-call.js","sourceRoot":"","sources":["../../../src/core/mcp-out/hand-call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAA8D,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"hand-call.js","sourceRoot":"","sources":["../../../src/core/mcp-out/hand-call.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
2
|
import type { FleetRefusal } from '../connection/ports.js';
|
|
3
|
-
import type { PartyStore } from '../parties/ports.js';
|
|
3
|
+
import type { PartyStore, ScopeRequirementsStore } from '../parties/ports.js';
|
|
4
4
|
import { type DomainError } from '../shared/errors.js';
|
|
5
5
|
import { type Result } from '../shared/result.js';
|
|
6
6
|
import type { McpServers } from './ports.js';
|
|
@@ -28,7 +28,7 @@ export type StateParty = (input: {
|
|
|
28
28
|
/**
|
|
29
29
|
* Use case: the gateway states what a party's proxy ship offers, as its
|
|
30
30
|
* crew: the tools its server lists now that are switched on, with argo's
|
|
31
|
-
* marks. The whole statement replaces the one before, so a tool the server
|
|
31
|
+
* marks and the scopes each tool needs now. The whole statement replaces the one before, so a tool the server
|
|
32
32
|
* dropped or an approver switched off is gone. A party with no switches kept
|
|
33
33
|
* keeps every tool it lists on first (aeolus-fleet#1151).
|
|
34
34
|
*/
|
|
@@ -37,5 +37,6 @@ export declare function createStateParty(deps: {
|
|
|
37
37
|
servers: McpServers;
|
|
38
38
|
door: StatementDoor;
|
|
39
39
|
marks: ToolMarks;
|
|
40
|
+
requirements: ScopeRequirementsStore;
|
|
40
41
|
timing: CallTiming;
|
|
41
42
|
}): StateParty;
|
|
@@ -5,7 +5,7 @@ import { statementOf } from './statement.js';
|
|
|
5
5
|
/**
|
|
6
6
|
* Use case: the gateway states what a party's proxy ship offers, as its
|
|
7
7
|
* crew: the tools its server lists now that are switched on, with argo's
|
|
8
|
-
* marks. The whole statement replaces the one before, so a tool the server
|
|
8
|
+
* marks and the scopes each tool needs now. The whole statement replaces the one before, so a tool the server
|
|
9
9
|
* dropped or an approver switched off is gone. A party with no switches kept
|
|
10
10
|
* keeps every tool it lists on first (aeolus-fleet#1151).
|
|
11
11
|
*/
|
|
@@ -26,7 +26,7 @@ export function createStateParty(deps) {
|
|
|
26
26
|
await deps.parties.switchTools({ fleetId, name }, { listed: listed.value.map((tool) => tool.name), switched: new Map() });
|
|
27
27
|
}
|
|
28
28
|
const tools = listed.value.filter((tool) => isToolOn(party.toolSwitches, tool.name));
|
|
29
|
-
const statement = statementOf({ partyName: name, tools, repeatable: await deps.marks.repeatable(fleetId, name), timing: deps.timing });
|
|
29
|
+
const statement = statementOf({ partyName: name, tools, repeatable: await deps.marks.repeatable(fleetId, name), timing: deps.timing, requirements: await deps.requirements.find(fleetId, name) });
|
|
30
30
|
const stated = await deps.door.setStatement(party.crewToken, statement);
|
|
31
31
|
if (!stated.isOk) {
|
|
32
32
|
return refuse('STATEMENT_REFUSED', `The fleet refused the statement: ${stated.error.message}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-party.js","sourceRoot":"","sources":["../../../src/core/mcp-out/state-party.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAmC,MAAM,gBAAgB,CAAC;AAkB9E;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"state-party.js","sourceRoot":"","sources":["../../../src/core/mcp-out/state-party.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAmC,MAAM,gBAAgB,CAAC;AAkB9E;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAmJ;IAClL,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,MAAM,CAAC,eAAe,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YACzD,OAAO,MAAM,CAAC,YAAY,EAAE,+CAA+C,IAAI,MAAM,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,oBAAoB,EAAE,qBAAqB,IAAI,yBAAyB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/G,CAAC;QACD,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5H,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrF,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAClM,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3F,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A proxy ship's statement (decision 0047), written from its outside MCP
|
|
3
|
+
* server's `tools/list`: each tool is one capability, with MCP's fields as
|
|
4
|
+
* the server states them (decision 0048), the content types that call it
|
|
5
|
+
* and carry its result, argo's repeatable mark (interop 5.2), the
|
|
6
|
+
* gateway's own wait and deadline for a call (interop 3.4, 5.3), and the
|
|
7
|
+
* scopes a calling ship needs (gateway scopes P1).
|
|
8
|
+
*/
|
|
9
|
+
import { type ScopeRequirements } from '../parties/scope-requirements.js';
|
|
1
10
|
import type { OutsideTool, ToolAnnotations } from './ports.js';
|
|
2
11
|
export interface Capability {
|
|
3
12
|
readonly name: string;
|
|
@@ -15,6 +24,8 @@ export interface Capability {
|
|
|
15
24
|
readonly deadlineMs: number;
|
|
16
25
|
/** argo's mark that a call may be handed again when it died unanswered; the server's hints never set it. */
|
|
17
26
|
readonly repeatable?: true;
|
|
27
|
+
/** The scopes a calling ship must hold, every one, so it sees them before it calls (gateway scopes P1); none when it needs none. */
|
|
28
|
+
readonly scopes?: readonly string[];
|
|
18
29
|
}
|
|
19
30
|
export interface Statement {
|
|
20
31
|
readonly summary: string;
|
|
@@ -25,6 +36,10 @@ export interface CallTiming {
|
|
|
25
36
|
readonly waitMs: number;
|
|
26
37
|
readonly deadlineMs: number;
|
|
27
38
|
}
|
|
39
|
+
/** The scopes field of a capability: stated only when a calling ship needs any. */
|
|
40
|
+
export declare function scopesFieldOf(scopes: readonly string[]): {
|
|
41
|
+
scopes?: readonly string[];
|
|
42
|
+
};
|
|
28
43
|
/**
|
|
29
44
|
* The statement of a party's proxy ship. Its summary names the party only:
|
|
30
45
|
* the server's URL and credential stay in the gateway (NAT both ways).
|
|
@@ -34,4 +49,5 @@ export declare function statementOf(input: {
|
|
|
34
49
|
tools: readonly OutsideTool[];
|
|
35
50
|
repeatable: ReadonlySet<string>;
|
|
36
51
|
timing: CallTiming;
|
|
52
|
+
requirements: ScopeRequirements;
|
|
37
53
|
}): Statement;
|
|
@@ -2,10 +2,16 @@
|
|
|
2
2
|
* A proxy ship's statement (decision 0047), written from its outside MCP
|
|
3
3
|
* server's `tools/list`: each tool is one capability, with MCP's fields as
|
|
4
4
|
* the server states them (decision 0048), the content types that call it
|
|
5
|
-
* and carry its result, argo's repeatable mark (interop 5.2),
|
|
6
|
-
* gateway's own wait and deadline for a call (interop 3.4, 5.3)
|
|
5
|
+
* and carry its result, argo's repeatable mark (interop 5.2), the
|
|
6
|
+
* gateway's own wait and deadline for a call (interop 3.4, 5.3), and the
|
|
7
|
+
* scopes a calling ship needs (gateway scopes P1).
|
|
7
8
|
*/
|
|
9
|
+
import { scopesNeeded } from '../parties/scope-requirements.js';
|
|
8
10
|
import { toolInputType, toolResultType } from './content-types.js';
|
|
11
|
+
/** The scopes field of a capability: stated only when a calling ship needs any. */
|
|
12
|
+
export function scopesFieldOf(scopes) {
|
|
13
|
+
return scopes.length === 0 ? {} : { scopes };
|
|
14
|
+
}
|
|
9
15
|
function capabilityOf(tool, marked) {
|
|
10
16
|
return {
|
|
11
17
|
name: tool.name,
|
|
@@ -19,6 +25,7 @@ function capabilityOf(tool, marked) {
|
|
|
19
25
|
...(marked.isRepeatable ? { repeatable: true } : {}),
|
|
20
26
|
waitMs: marked.timing.waitMs,
|
|
21
27
|
deadlineMs: marked.timing.deadlineMs,
|
|
28
|
+
...scopesFieldOf(marked.scopes),
|
|
22
29
|
};
|
|
23
30
|
}
|
|
24
31
|
/**
|
|
@@ -28,7 +35,7 @@ function capabilityOf(tool, marked) {
|
|
|
28
35
|
export function statementOf(input) {
|
|
29
36
|
return {
|
|
30
37
|
summary: `${input.partyName}, an outside MCP server reached through the Aeolus gateway. Each capability is one of its tools: send its input type with the tool arguments as a JSON object, and the reply carries the tool result.`,
|
|
31
|
-
capabilities: input.tools.map((tool) => capabilityOf(tool, { isRepeatable: input.repeatable.has(tool.name), timing: input.timing })),
|
|
38
|
+
capabilities: input.tools.map((tool) => capabilityOf(tool, { isRepeatable: input.repeatable.has(tool.name), timing: input.timing, scopes: scopesNeeded(input.requirements, tool.name) })),
|
|
32
39
|
};
|
|
33
40
|
}
|
|
34
41
|
//# sourceMappingURL=statement.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statement.js","sourceRoot":"","sources":["../../../src/core/mcp-out/statement.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"statement.js","sourceRoot":"","sources":["../../../src/core/mcp-out/statement.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAA0B,MAAM,kCAAkC,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAmCnE,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,MAAyB;IACrD,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,YAAY,CAAC,IAAiB,EAAE,MAAgF;IACvH,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5E,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/E,UAAU,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,WAAW,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5E,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;QAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;QACpC,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;KAChC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAiJ;IAC3K,OAAO;QACL,OAAO,EAAE,GAAG,KAAK,CAAC,SAAS,uMAAuM;QAClO,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC1L,CAAC;AACJ,CAAC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import type { FleetId,
|
|
1
|
+
import type { FleetId, ScopeName } from '@aeolus-fleet/common';
|
|
2
2
|
import type { FleetRefusal } from '../connection/ports.js';
|
|
3
3
|
import type { Result } from '../shared/result.js';
|
|
4
|
-
/** A signed-in console session: argo's or a viewer's, with its ship's scopes, or an account's, with its account token's. */
|
|
4
|
+
/** A signed-in console session: argo's or a viewer's, with its ship's scopes, or an account's, with its account token's; the fleet's own scopes among them (gateway scopes 4.1). */
|
|
5
5
|
export type ConsoleSession = {
|
|
6
6
|
fleetId: FleetId;
|
|
7
7
|
kind: 'operator' | 'viewer';
|
|
8
|
-
scopes: readonly
|
|
8
|
+
scopes: readonly ScopeName[];
|
|
9
9
|
} | {
|
|
10
10
|
fleetId: FleetId;
|
|
11
11
|
kind: 'account';
|
|
12
12
|
accountId: string;
|
|
13
|
-
scopes: readonly
|
|
13
|
+
scopes: readonly ScopeName[];
|
|
14
14
|
};
|
|
15
15
|
/**
|
|
16
16
|
* Outbound port: asks the fleet whose a forwarded console session cookie is
|
|
@@ -25,7 +25,7 @@ export function createAddA2aAgent(deps) {
|
|
|
25
25
|
if (!(await deps.servesOutsideParties(fleetId))) {
|
|
26
26
|
return refuse('OUTSIDE_PARTIES_OFF', "This fleet's outside parties are off: turn them on first");
|
|
27
27
|
}
|
|
28
|
-
const statement = await readAgentStatement(deps, { name, cardUrl, isRepeatable: true });
|
|
28
|
+
const statement = await readAgentStatement(deps, { name, cardUrl, isRepeatable: true, scopes: [] });
|
|
29
29
|
if (!statement.isOk) {
|
|
30
30
|
return statement;
|
|
31
31
|
}
|
|
@@ -1 +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;
|
|
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,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACpG,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,36 @@
|
|
|
1
|
+
import type { Actor } from '../actors/authenticate-actor.js';
|
|
2
|
+
import type { ActorCredential, CredentialOf } from '../actors/credential-of.js';
|
|
3
|
+
import type { ConnectionStore, GatewayCrew } from '../connection/ports.js';
|
|
4
|
+
import { type DomainError } from '../shared/errors.js';
|
|
5
|
+
import { type Result } from '../shared/result.js';
|
|
6
|
+
import type { A2aAgentParty, McpServerParty } from './party.js';
|
|
7
|
+
import type { PartyStore, ProxyShipsAsActor } from './ports.js';
|
|
8
|
+
export type ApprovingRefusal = DomainError<'NOT_AN_APPROVER' | 'NO_SUCH_PARTY' | 'PARTY_NOT_COMMISSIONED' | 'NOT_CONNECTED' | 'FLEET_UNAVAILABLE' | 'NOT_REACHABLE'>;
|
|
9
|
+
export type CheckApproving = (input: {
|
|
10
|
+
actor: Actor;
|
|
11
|
+
as: ActorCredential;
|
|
12
|
+
name: string;
|
|
13
|
+
}) => Promise<Result<undefined, ApprovingRefusal>>;
|
|
14
|
+
interface ApprovingDeps {
|
|
15
|
+
parties: PartyStore;
|
|
16
|
+
connections: Pick<ConnectionStore, 'find'>;
|
|
17
|
+
fleet: Pick<ProxyShipsAsActor, 'checkManage'>;
|
|
18
|
+
credentialOf: CredentialOf;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The outside MCP server or A2A agent an actor approves, with the gateway's
|
|
22
|
+
* connection: the actor holds gateway:approve, and the fleet, asked as the
|
|
23
|
+
* actor, answers that it manages the party's proxy ship (A2). The fleet
|
|
24
|
+
* records a refusal.
|
|
25
|
+
*/
|
|
26
|
+
export declare function approvedParty(deps: ApprovingDeps, { actor, as, name }: Parameters<CheckApproving>[0]): Promise<Result<{
|
|
27
|
+
party: McpServerParty | A2aAgentParty;
|
|
28
|
+
gateway: GatewayCrew;
|
|
29
|
+
}, ApprovingRefusal>>;
|
|
30
|
+
/**
|
|
31
|
+
* Use case: whether an actor approves an outside MCP server or A2A agent
|
|
32
|
+
* (gateway scopes 4.3): the party's page shows its controls only then, and
|
|
33
|
+
* the same table read-only otherwise.
|
|
34
|
+
*/
|
|
35
|
+
export declare function createCheckApproving(deps: ApprovingDeps): CheckApproving;
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { APPROVING_SCOPE } from './approver.js';
|
|
4
|
+
/**
|
|
5
|
+
* The outside MCP server or A2A agent an actor approves, with the gateway's
|
|
6
|
+
* connection: the actor holds gateway:approve, and the fleet, asked as the
|
|
7
|
+
* actor, answers that it manages the party's proxy ship (A2). The fleet
|
|
8
|
+
* records a refusal.
|
|
9
|
+
*/
|
|
10
|
+
export async function approvedParty(deps, { actor, as, name }) {
|
|
11
|
+
if (!actor.scopes.includes(APPROVING_SCOPE)) {
|
|
12
|
+
return refuse('NOT_AN_APPROVER', `Setting the scopes an outside party needs takes ${APPROVING_SCOPE}`);
|
|
13
|
+
}
|
|
14
|
+
const party = await deps.parties.find(actor.fleetId, name);
|
|
15
|
+
if (party?.kind !== 'mcpServer' && party?.kind !== 'a2aAgent') {
|
|
16
|
+
return refuse('NO_SUCH_PARTY', `There is no outside MCP server or A2A agent ${name}`);
|
|
17
|
+
}
|
|
18
|
+
if (party.proxyShipId === null) {
|
|
19
|
+
return refuse('PARTY_NOT_COMMISSIONED', `${name}'s proxy ship is not commissioned yet`);
|
|
20
|
+
}
|
|
21
|
+
const gateway = await deps.connections.find(actor.fleetId);
|
|
22
|
+
if (gateway === undefined) {
|
|
23
|
+
return refuse('NOT_CONNECTED', 'The gateway is not connected to the fleet');
|
|
24
|
+
}
|
|
25
|
+
const credential = await deps.credentialOf(actor, as);
|
|
26
|
+
if (!credential.isOk) {
|
|
27
|
+
return credential;
|
|
28
|
+
}
|
|
29
|
+
const managed = await deps.fleet.checkManage(credential.value, { shipId: party.proxyShipId });
|
|
30
|
+
if (!managed.isOk) {
|
|
31
|
+
return managed.error.code === 'UNAVAILABLE'
|
|
32
|
+
? refuse('FLEET_UNAVAILABLE', `The fleet did not say whether you manage ${name}: ${managed.error.message}`)
|
|
33
|
+
: refuse('NOT_REACHABLE', managed.error.message);
|
|
34
|
+
}
|
|
35
|
+
return ok({ party, gateway });
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Use case: whether an actor approves an outside MCP server or A2A agent
|
|
39
|
+
* (gateway scopes 4.3): the party's page shows its controls only then, and
|
|
40
|
+
* the same table read-only otherwise.
|
|
41
|
+
*/
|
|
42
|
+
export function createCheckApproving(deps) {
|
|
43
|
+
return async (input) => {
|
|
44
|
+
const approved = await approvedParty(deps, input);
|
|
45
|
+
return approved.isOk ? ok(undefined) : approved;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=check-approving.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-approving.js","sourceRoot":"","sources":["../../../src/core/parties/check-approving.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAehD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAmB,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAiC;IACzG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,iBAAiB,EAAE,mDAAmD,eAAe,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3D,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9D,OAAO,MAAM,CAAC,eAAe,EAAE,+CAA+C,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,wBAAwB,EAAE,GAAG,IAAI,uCAAuC,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,eAAe,EAAE,2CAA2C,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACrB,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9F,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa;YACzC,CAAC,CAAC,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAC3G,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAmB;IACtD,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClD,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { FleetId, ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { ConnectionStore, FleetDoor } from '../connection/ports.js';
|
|
3
|
+
/**
|
|
4
|
+
* How checking a call's scopes ended:
|
|
5
|
+
* - holds: the calling ship holds every needed scope, so the call goes on;
|
|
6
|
+
* - lacks: it does not, and the message names what is missing (P2);
|
|
7
|
+
* - unread: core did not answer the read, so the call waits and is tried again, never made unchecked.
|
|
8
|
+
*/
|
|
9
|
+
export type ScopeCheck = {
|
|
10
|
+
readonly kind: 'holds';
|
|
11
|
+
} | {
|
|
12
|
+
readonly kind: 'lacks';
|
|
13
|
+
readonly message: string;
|
|
14
|
+
} | {
|
|
15
|
+
readonly kind: 'unread';
|
|
16
|
+
};
|
|
17
|
+
export type CheckRequiredScopes = (call: {
|
|
18
|
+
fleetId: FleetId;
|
|
19
|
+
senderShipId: ShipId;
|
|
20
|
+
needing: string;
|
|
21
|
+
needed: readonly string[];
|
|
22
|
+
}) => Promise<ScopeCheck>;
|
|
23
|
+
/**
|
|
24
|
+
* Use case: whether the ship calling an outside party holds every scope the
|
|
25
|
+
* call needs (design gateway-scopes, 4.2). The gateway reads the ship's
|
|
26
|
+
* scopes from core as its own ship, on the calling ship's behalf so its read
|
|
27
|
+
* reach holds it, on every call and never from the message (decision 0057):
|
|
28
|
+
* a scope revoked holds at the next call (0046). A call that needs nothing
|
|
29
|
+
* reads nothing.
|
|
30
|
+
*/
|
|
31
|
+
export declare function createCheckRequiredScopes(deps: {
|
|
32
|
+
connections: Pick<ConnectionStore, 'find'>;
|
|
33
|
+
door: Pick<FleetDoor, 'getShip'>;
|
|
34
|
+
}): CheckRequiredScopes;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { lackingScopesMessage, scopesLacking } from './scope-requirements.js';
|
|
2
|
+
/**
|
|
3
|
+
* Use case: whether the ship calling an outside party holds every scope the
|
|
4
|
+
* call needs (design gateway-scopes, 4.2). The gateway reads the ship's
|
|
5
|
+
* scopes from core as its own ship, on the calling ship's behalf so its read
|
|
6
|
+
* reach holds it, on every call and never from the message (decision 0057):
|
|
7
|
+
* a scope revoked holds at the next call (0046). A call that needs nothing
|
|
8
|
+
* reads nothing.
|
|
9
|
+
*/
|
|
10
|
+
export function createCheckRequiredScopes(deps) {
|
|
11
|
+
return async ({ fleetId, senderShipId, needing, needed }) => {
|
|
12
|
+
if (needed.length === 0) {
|
|
13
|
+
return { kind: 'holds' };
|
|
14
|
+
}
|
|
15
|
+
const gateway = await deps.connections.find(fleetId);
|
|
16
|
+
if (gateway === undefined) {
|
|
17
|
+
return { kind: 'unread' };
|
|
18
|
+
}
|
|
19
|
+
const ship = await deps.door.getShip(gateway.crewToken, { shipId: senderShipId, onBehalfOf: senderShipId });
|
|
20
|
+
if (!ship.isOk) {
|
|
21
|
+
return { kind: 'unread' };
|
|
22
|
+
}
|
|
23
|
+
const lacking = scopesLacking(needed, ship.value.scopes);
|
|
24
|
+
return lacking.length === 0 ? { kind: 'holds' } : { kind: 'lacks', message: lackingScopesMessage({ needing, lacking, shipName: ship.value.name }) };
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=check-required-scopes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-required-scopes.js","sourceRoot":"","sources":["../../../src/core/parties/check-required-scopes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAY9E;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAsF;IAC9H,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5B,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;QAC5G,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5B,CAAC;QACD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;IACtJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -3,6 +3,7 @@ import type { ActorCredential } from '../actors/credential-of.js';
|
|
|
3
3
|
import type { FleetRefusal } from '../connection/ports.js';
|
|
4
4
|
import type { Result } from '../shared/result.js';
|
|
5
5
|
import type { Party } from './party.js';
|
|
6
|
+
import type { ScopeRequirements, ScopeRequirementsChange } from './scope-requirements.js';
|
|
6
7
|
import type { FromFleet } from './shown-party.js';
|
|
7
8
|
import type { ToolSwitches } from './tool-switches.js';
|
|
8
9
|
/** Outbound port: the parties argo approved, one per proxy ship name in a fleet. */
|
|
@@ -29,6 +30,22 @@ export interface PartyStore {
|
|
|
29
30
|
}): Promise<void>;
|
|
30
31
|
remove(fleetId: FleetId, name: string): Promise<void>;
|
|
31
32
|
}
|
|
33
|
+
/** Outbound port: each party's required scopes (design gateway-scopes, 4.2), kept with the party and gone with it. */
|
|
34
|
+
export interface ScopeRequirementsStore {
|
|
35
|
+
/** The party's requirements as they are now; none set yet is version 0, needing nothing. */
|
|
36
|
+
find(fleetId: FleetId, party: string): Promise<ScopeRequirements>;
|
|
37
|
+
/**
|
|
38
|
+
* Makes the change, all at once and only while the requirements are still
|
|
39
|
+
* at the version named: the requirements after, at the next version; none
|
|
40
|
+
* once another change moved them on.
|
|
41
|
+
*/
|
|
42
|
+
change(party: {
|
|
43
|
+
fleetId: FleetId;
|
|
44
|
+
name: string;
|
|
45
|
+
}, change: ScopeRequirementsChange & {
|
|
46
|
+
version: number;
|
|
47
|
+
}): Promise<ScopeRequirements | undefined>;
|
|
48
|
+
}
|
|
32
49
|
/** Outbound port: the fleet's calls the gateway makes for a party's proxy ship. */
|
|
33
50
|
export interface ProxyShipDoor {
|
|
34
51
|
/**
|
|
@@ -79,6 +96,10 @@ export interface ProxyShipsAsActor {
|
|
|
79
96
|
}): Promise<Result<{
|
|
80
97
|
scopes: string[];
|
|
81
98
|
}, FleetRefusal>>;
|
|
99
|
+
/** Whether the actor manages the proxy ship now (fleet.checkManage, no scope): OK, or the fleet's refusal, which it records. */
|
|
100
|
+
checkManage(as: ActorCredential, ship: {
|
|
101
|
+
shipId: ShipId;
|
|
102
|
+
}): Promise<Result<undefined, FleetRefusal>>;
|
|
82
103
|
}
|
|
83
104
|
/** Outbound port: what the fleet holds for a proxy ship, read as the actor (fleet:read): its name, owner and scopes, only its name outside the actor's read reach. */
|
|
84
105
|
export interface ProxyShipReads {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Actor } from '../actors/authenticate-actor.js';
|
|
2
|
+
import type { ConnectionStore, FleetDoor, ListedScope } from '../connection/ports.js';
|
|
3
|
+
import { type DomainError } from '../shared/errors.js';
|
|
4
|
+
import { type Result } from '../shared/result.js';
|
|
5
|
+
export type ReadListedScopes = (input: {
|
|
6
|
+
actor: Actor;
|
|
7
|
+
}) => Promise<Result<ListedScope[], DomainError<'NOT_AN_APPROVER' | 'NOT_CONNECTED' | 'FLEET_UNAVAILABLE'>>>;
|
|
8
|
+
/**
|
|
9
|
+
* Use case: the scopes an approver may require of a calling ship (gateway
|
|
10
|
+
* scopes 4.3), every one the fleet lists now with its description, read as
|
|
11
|
+
* the gateway's ship as the change itself checks them. Only an approver
|
|
12
|
+
* picks them, so only an approver reads them.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createReadListedScopes(deps: {
|
|
15
|
+
connections: Pick<ConnectionStore, 'find'>;
|
|
16
|
+
door: Pick<FleetDoor, 'listScopes'>;
|
|
17
|
+
}): ReadListedScopes;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { APPROVING_SCOPE } from './approver.js';
|
|
4
|
+
/**
|
|
5
|
+
* Use case: the scopes an approver may require of a calling ship (gateway
|
|
6
|
+
* scopes 4.3), every one the fleet lists now with its description, read as
|
|
7
|
+
* the gateway's ship as the change itself checks them. Only an approver
|
|
8
|
+
* picks them, so only an approver reads them.
|
|
9
|
+
*/
|
|
10
|
+
export function createReadListedScopes(deps) {
|
|
11
|
+
return async ({ actor }) => {
|
|
12
|
+
if (!actor.scopes.includes(APPROVING_SCOPE)) {
|
|
13
|
+
return refuse('NOT_AN_APPROVER', `Reading the scopes to require takes ${APPROVING_SCOPE}`);
|
|
14
|
+
}
|
|
15
|
+
const gateway = await deps.connections.find(actor.fleetId);
|
|
16
|
+
if (gateway === undefined) {
|
|
17
|
+
return refuse('NOT_CONNECTED', 'The gateway is not connected to the fleet');
|
|
18
|
+
}
|
|
19
|
+
const listed = await deps.door.listScopes(gateway.crewToken);
|
|
20
|
+
return listed.isOk ? ok(listed.value) : refuse('FLEET_UNAVAILABLE', `The fleet did not say which scopes it lists: ${listed.error.message}`);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=read-listed-scopes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-listed-scopes.js","sourceRoot":"","sources":["../../../src/core/parties/read-listed-scopes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIhD;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAyF;IAC9H,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,iBAAiB,EAAE,uCAAuC,eAAe,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,eAAe,EAAE,2CAA2C,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7D,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,EAAE,gDAAgD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9I,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
|
+
import { type DomainError } from '../shared/errors.js';
|
|
3
|
+
import { type Result } from '../shared/result.js';
|
|
4
|
+
import type { PartyStore, ScopeRequirementsStore } from './ports.js';
|
|
5
|
+
import type { ScopeRequirements } from './scope-requirements.js';
|
|
6
|
+
export type ReadScopeRequirements = (input: {
|
|
7
|
+
fleetId: FleetId;
|
|
8
|
+
name: string;
|
|
9
|
+
}) => Promise<Result<ScopeRequirements, DomainError<'NO_SUCH_PARTY'>>>;
|
|
10
|
+
/**
|
|
11
|
+
* Use case: which scopes an outside MCP server or A2A agent needs, and the
|
|
12
|
+
* version an approver changes them on (design gateway-scopes, 4.2). Anyone
|
|
13
|
+
* in the fleet reads them, as its tools are read.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createReadScopeRequirements(deps: {
|
|
16
|
+
parties: PartyStore;
|
|
17
|
+
requirements: ScopeRequirementsStore;
|
|
18
|
+
}): ReadScopeRequirements;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
/**
|
|
4
|
+
* Use case: which scopes an outside MCP server or A2A agent needs, and the
|
|
5
|
+
* version an approver changes them on (design gateway-scopes, 4.2). Anyone
|
|
6
|
+
* in the fleet reads them, as its tools are read.
|
|
7
|
+
*/
|
|
8
|
+
export function createReadScopeRequirements(deps) {
|
|
9
|
+
return async ({ fleetId, name }) => {
|
|
10
|
+
const party = await deps.parties.find(fleetId, name);
|
|
11
|
+
if (party?.kind !== 'mcpServer' && party?.kind !== 'a2aAgent') {
|
|
12
|
+
return refuse('NO_SUCH_PARTY', `There is no outside MCP server or A2A agent ${name}`);
|
|
13
|
+
}
|
|
14
|
+
return ok(await deps.requirements.find(fleetId, name));
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=read-scope-requirements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-scope-requirements.js","sourceRoot":"","sources":["../../../src/core/parties/read-scope-requirements.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAMtD;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAmE;IAC7G,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9D,OAAO,MAAM,CAAC,eAAe,EAAE,+CAA+C,IAAI,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which scopes a calling ship must hold to use an outside party (design
|
|
3
|
+
* gateway-scopes, 4.2): a set for the party as a whole, and for an outside
|
|
4
|
+
* MCP server a set per tool. A tool needs both sets, every scope in them
|
|
5
|
+
* (A5). A scope says what a ship may do; which party it reaches stays the
|
|
6
|
+
* network rules' (L1). Kept by scope text and tool name, never by a ship.
|
|
7
|
+
*/
|
|
8
|
+
/** A party's required scopes, and the version they were changed to last, so two approvers never overwrite each other unseen. */
|
|
9
|
+
export interface ScopeRequirements {
|
|
10
|
+
readonly version: number;
|
|
11
|
+
/** What every call to the party needs; an A2A agent has only this set, as its messages name no tool (L26). */
|
|
12
|
+
readonly party: readonly string[];
|
|
13
|
+
/** What each tool needs beside the party's set, by tool name; a tool not named needs only the party's. */
|
|
14
|
+
readonly tools: ReadonlyMap<string, readonly string[]>;
|
|
15
|
+
}
|
|
16
|
+
/** A party with nothing required: every call needs only to reach it. */
|
|
17
|
+
export declare const NO_SCOPE_REQUIREMENTS: ScopeRequirements;
|
|
18
|
+
/** A change to a party's requirements: its own set when given, and each tool's set given, an empty one dropping the tool's. */
|
|
19
|
+
export interface ScopeRequirementsChange {
|
|
20
|
+
readonly party?: readonly string[];
|
|
21
|
+
readonly tools: ReadonlyMap<string, readonly string[]>;
|
|
22
|
+
}
|
|
23
|
+
/** The requirements after a change, at the next version. */
|
|
24
|
+
export declare function changedRequirements(kept: ScopeRequirements, change: ScopeRequirementsChange): ScopeRequirements;
|
|
25
|
+
/** Every scope a call needs: the party's set and the tool's own, each once; a party called as a whole (no tool) needs its set alone. */
|
|
26
|
+
export declare function scopesNeeded(requirements: ScopeRequirements, tool: string | null): string[];
|
|
27
|
+
/** The needed scopes the calling ship does not hold. */
|
|
28
|
+
export declare function scopesLacking(needed: readonly string[], held: readonly string[]): string[];
|
|
29
|
+
/** A refusal naming what is missing (P2): "update_lead needs crm:write-leads, which lead-scout does not hold". */
|
|
30
|
+
export declare function lackingScopesMessage(refused: {
|
|
31
|
+
needing: string;
|
|
32
|
+
lacking: readonly string[];
|
|
33
|
+
shipName: string;
|
|
34
|
+
}): string;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which scopes a calling ship must hold to use an outside party (design
|
|
3
|
+
* gateway-scopes, 4.2): a set for the party as a whole, and for an outside
|
|
4
|
+
* MCP server a set per tool. A tool needs both sets, every scope in them
|
|
5
|
+
* (A5). A scope says what a ship may do; which party it reaches stays the
|
|
6
|
+
* network rules' (L1). Kept by scope text and tool name, never by a ship.
|
|
7
|
+
*/
|
|
8
|
+
/** A party with nothing required: every call needs only to reach it. */
|
|
9
|
+
export const NO_SCOPE_REQUIREMENTS = { version: 0, party: [], tools: new Map() };
|
|
10
|
+
/** The requirements after a change, at the next version. */
|
|
11
|
+
export function changedRequirements(kept, change) {
|
|
12
|
+
const tools = new Map(kept.tools);
|
|
13
|
+
for (const [tool, scopes] of change.tools) {
|
|
14
|
+
if (scopes.length === 0) {
|
|
15
|
+
tools.delete(tool);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
tools.set(tool, scopes);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return { version: kept.version + 1, party: change.party ?? kept.party, tools };
|
|
22
|
+
}
|
|
23
|
+
/** Every scope a call needs: the party's set and the tool's own, each once; a party called as a whole (no tool) needs its set alone. */
|
|
24
|
+
export function scopesNeeded(requirements, tool) {
|
|
25
|
+
const own = tool === null ? [] : (requirements.tools.get(tool) ?? []);
|
|
26
|
+
return [...new Set([...requirements.party, ...own])];
|
|
27
|
+
}
|
|
28
|
+
/** The needed scopes the calling ship does not hold. */
|
|
29
|
+
export function scopesLacking(needed, held) {
|
|
30
|
+
return needed.filter((scope) => !held.includes(scope));
|
|
31
|
+
}
|
|
32
|
+
/** A refusal naming what is missing (P2): "update_lead needs crm:write-leads, which lead-scout does not hold". */
|
|
33
|
+
export function lackingScopesMessage(refused) {
|
|
34
|
+
const scopes = refused.lacking.length === 1 ? refused.lacking.join('') : `${refused.lacking.slice(0, -1).join(', ')} and ${refused.lacking.at(-1) ?? ''}`;
|
|
35
|
+
return `${refused.needing} needs ${scopes}, which ${refused.shipName} does not hold`;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=scope-requirements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-requirements.js","sourceRoot":"","sources":["../../../src/core/parties/scope-requirements.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,wEAAwE;AACxE,MAAM,CAAC,MAAM,qBAAqB,GAAsB,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAQpG,4DAA4D;AAC5D,MAAM,UAAU,mBAAmB,CAAC,IAAuB,EAAE,MAA+B;IAC1F,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;AACjF,CAAC;AAED,wIAAwI;AACxI,MAAM,UAAU,YAAY,CAAC,YAA+B,EAAE,IAAmB;IAC/E,MAAM,GAAG,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,aAAa,CAAC,MAAyB,EAAE,IAAuB;IAC9E,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,kHAAkH;AAClH,MAAM,UAAU,oBAAoB,CAAC,OAA0E;IAC7G,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IAC1J,OAAO,GAAG,OAAO,CAAC,OAAO,UAAU,MAAM,WAAW,OAAO,CAAC,QAAQ,gBAAgB,CAAC;AACvF,CAAC"}
|