@aeolus-fleet/gateway 0.31.0 → 0.32.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/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 +9 -9
- 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/_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_0xnlgtw8bfqaa._.js +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_1_2m6l73qk7qw._.js +1 -1
- 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 +57 -31
- package/web/.next/static/chunks/10wzmy096av_5.css +3 -0
- package/web/.next/static/chunks/{21s2_ccrw90ok.js → 1ffk4chq_kmie.js} +1 -1
- package/web/.next/static/chunks/{3tss77vu57zju.js → 1nyfzf-d7kj96.js} +1 -1
- package/web/.next/static/chunks/202avng4-d5jq.js +1 -0
- package/web/.next/static/chunks/{1juj2_tl8d16x.js → 26kio8jl2dc6u.js} +1 -1
- package/web/.next/static/chunks/2cd4e71s711ad.js +1 -0
- package/web/.next/static/chunks/2i3ydqqupow_x.js +1 -0
- package/web/.next/static/chunks/2jvq5fses35mf.js +1 -0
- package/web/.next/static/chunks/2riya89_i0je8.js +1 -0
- package/web/.next/static/chunks/{3o8h4o3utbvgc.js → 2sx1mxv2u71xx.js} +1 -1
- package/web/.next/static/chunks/3_pwm8b3mf4mf.js +1 -0
- package/web/.next/static/chunks/{2hsi-sahla2aj.js → 3f3s544ovqebz.js} +1 -1
- package/web/.next/static/chunks/{2x00o45pdbkok.js → 3x_8doukmdfpu.js} +1 -1
- package/web/.next/static/chunks/{1pafc2gfswboo.js → 3yunex2p9do7t.js} +1 -1
- package/web/.next/static/chunks/{2n2qsek2y94y5.js → 40sj32h7okqjq.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/{3whgLnRJ9iJe_25h6KGzQ → JmnMsO8U6uK0nukLKdccI}/_buildManifest.js +0 -0
- /package/web/.next/static/{3whgLnRJ9iJe_25h6KGzQ → JmnMsO8U6uK0nukLKdccI}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{3whgLnRJ9iJe_25h6KGzQ → JmnMsO8U6uK0nukLKdccI}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { StateA2aAgent } from '../a2a-out/state-a2a-agent.js';
|
|
2
|
+
import type { Actor } from '../actors/authenticate-actor.js';
|
|
3
|
+
import type { ActorCredential, CredentialOf } from '../actors/credential-of.js';
|
|
4
|
+
import type { ConnectionStore, FleetDoor } from '../connection/ports.js';
|
|
5
|
+
import type { StateParty } from '../mcp-out/state-party.js';
|
|
6
|
+
import { type DomainError } from '../shared/errors.js';
|
|
7
|
+
import { type Result } from '../shared/result.js';
|
|
8
|
+
import type { PartyStore, ProxyShipsAsActor, ScopeRequirementsStore } from './ports.js';
|
|
9
|
+
import type { ScopeRequirements } from './scope-requirements.js';
|
|
10
|
+
export type SetScopeRequirementsRefusal = DomainError<'NOT_AN_APPROVER' | 'NO_SUCH_PARTY' | 'PARTY_NOT_COMMISSIONED' | 'NOT_REACHABLE' | 'NO_SUCH_TOOL' | 'NOT_CONNECTED' | 'FLEET_UNAVAILABLE' | 'SCOPE_NOT_LISTED' | 'CONFLICT'>;
|
|
11
|
+
export type SetScopeRequirements = (input: {
|
|
12
|
+
actor: Actor;
|
|
13
|
+
as: ActorCredential;
|
|
14
|
+
name: string;
|
|
15
|
+
/** The requirements' version the change was made on, as the approver read them. */
|
|
16
|
+
version: number;
|
|
17
|
+
party?: readonly string[];
|
|
18
|
+
tools: ReadonlyMap<string, readonly string[]>;
|
|
19
|
+
}) => Promise<Result<{
|
|
20
|
+
requirements: ScopeRequirements; /** Why the proxy ship's statement waits for its next one; none when the fleet sees the change now. */
|
|
21
|
+
statementRefusal: string | null;
|
|
22
|
+
}, SetScopeRequirementsRefusal>>;
|
|
23
|
+
/**
|
|
24
|
+
* Use case: an approver sets which scopes a calling ship needs (design
|
|
25
|
+
* gateway-scopes, 4.2, A2): for an outside MCP server the party's set and
|
|
26
|
+
* any tool's, for an outside A2A agent its set as a whole. The fleet, asked
|
|
27
|
+
* as the approver, must answer that it manages the proxy ship before
|
|
28
|
+
* anything changes, clearing included; it records a refusal. Every scope must
|
|
29
|
+
* be one the fleet lists now, core's, a plugin's or the fleet's own: any may
|
|
30
|
+
* be required (0016). The change is made only on the version the approver
|
|
31
|
+
* read, so two approvers never overwrite each other unseen. The change is
|
|
32
|
+
* kept first, so the check holds at once, then the proxy ship is stated
|
|
33
|
+
* anew with what each capability needs (P1); while it cannot be, the
|
|
34
|
+
* statement waits for its next one.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createSetScopeRequirements(deps: {
|
|
37
|
+
parties: PartyStore;
|
|
38
|
+
requirements: ScopeRequirementsStore;
|
|
39
|
+
connections: Pick<ConnectionStore, 'find'>;
|
|
40
|
+
door: Pick<FleetDoor, 'listScopes'>;
|
|
41
|
+
stateParty: StateParty;
|
|
42
|
+
stateA2aAgent: StateA2aAgent;
|
|
43
|
+
fleet: Pick<ProxyShipsAsActor, 'checkManage'>;
|
|
44
|
+
credentialOf: CredentialOf;
|
|
45
|
+
}): SetScopeRequirements;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { approvedParty } from './check-approving.js';
|
|
4
|
+
const unique = (scopes) => [...new Set(scopes)];
|
|
5
|
+
/**
|
|
6
|
+
* Use case: an approver sets which scopes a calling ship needs (design
|
|
7
|
+
* gateway-scopes, 4.2, A2): for an outside MCP server the party's set and
|
|
8
|
+
* any tool's, for an outside A2A agent its set as a whole. The fleet, asked
|
|
9
|
+
* as the approver, must answer that it manages the proxy ship before
|
|
10
|
+
* anything changes, clearing included; it records a refusal. Every scope must
|
|
11
|
+
* be one the fleet lists now, core's, a plugin's or the fleet's own: any may
|
|
12
|
+
* be required (0016). The change is made only on the version the approver
|
|
13
|
+
* read, so two approvers never overwrite each other unseen. The change is
|
|
14
|
+
* kept first, so the check holds at once, then the proxy ship is stated
|
|
15
|
+
* anew with what each capability needs (P1); while it cannot be, the
|
|
16
|
+
* statement waits for its next one.
|
|
17
|
+
*/
|
|
18
|
+
export function createSetScopeRequirements(deps) {
|
|
19
|
+
return async ({ actor, as, name, version, party, tools }) => {
|
|
20
|
+
const approved = await approvedParty(deps, { actor, as, name });
|
|
21
|
+
if (!approved.isOk) {
|
|
22
|
+
return approved;
|
|
23
|
+
}
|
|
24
|
+
const { party: kept, gateway } = approved.value;
|
|
25
|
+
if (kept.kind === 'a2aAgent' && tools.size > 0) {
|
|
26
|
+
return refuse('NO_SUCH_TOOL', `${name} is an outside A2A agent: its messages name no tool, so set the scopes it needs as a whole`);
|
|
27
|
+
}
|
|
28
|
+
const change = { ...(party === undefined ? {} : { party: unique(party) }), tools: new Map([...tools].map(([tool, scopes]) => [tool, unique(scopes)])) };
|
|
29
|
+
const required = unique([...(change.party ?? []), ...[...change.tools.values()].flat()]);
|
|
30
|
+
if (required.length > 0) {
|
|
31
|
+
const listed = await deps.door.listScopes(gateway.crewToken);
|
|
32
|
+
if (!listed.isOk) {
|
|
33
|
+
return refuse('FLEET_UNAVAILABLE', `The fleet did not say which scopes it lists: ${listed.error.message}`);
|
|
34
|
+
}
|
|
35
|
+
const unlisted = required.filter((scope) => !listed.value.some((each) => each.scope === scope));
|
|
36
|
+
if (unlisted.length > 0) {
|
|
37
|
+
return refuse('SCOPE_NOT_LISTED', `The fleet lists no scope ${unlisted.join(' or ')}: define it first, or pick a listed one`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const changed = await deps.requirements.change({ fleetId: actor.fleetId, name }, { ...change, version });
|
|
41
|
+
if (changed === undefined) {
|
|
42
|
+
return refuse('CONFLICT', 'The requirements changed since you opened this page');
|
|
43
|
+
}
|
|
44
|
+
const stated = await (kept.kind === 'mcpServer' ? deps.stateParty : deps.stateA2aAgent)({ fleetId: actor.fleetId, name });
|
|
45
|
+
return ok({ requirements: changed, statementRefusal: stated.isOk ? null : stated.error.message });
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=set-scope-requirements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-scope-requirements.js","sourceRoot":"","sources":["../../../src/core/parties/set-scope-requirements.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Actor } from '../actors/authenticate-actor.js';
|
|
2
|
+
import type { ActorCredential, CredentialOf } from '../actors/credential-of.js';
|
|
3
|
+
import type { ConnectionStore } from '../connection/ports.js';
|
|
4
|
+
import type { McpServers } from '../mcp-out/ports.js';
|
|
5
|
+
import type { StateParty } from '../mcp-out/state-party.js';
|
|
6
|
+
import { type DomainError } from '../shared/errors.js';
|
|
7
|
+
import { type Result } from '../shared/result.js';
|
|
8
|
+
import { type ApprovingRefusal } from './check-approving.js';
|
|
9
|
+
import type { PartyStore, ProxyShipsAsActor } from './ports.js';
|
|
10
|
+
export type SwitchToolsRefusal = ApprovingRefusal | DomainError<'SERVER_UNREACHABLE' | 'NO_SUCH_TOOL'>;
|
|
11
|
+
export type SwitchTools = (input: {
|
|
12
|
+
actor: Actor;
|
|
13
|
+
as: ActorCredential;
|
|
14
|
+
name: string;
|
|
15
|
+
tools: readonly string[];
|
|
16
|
+
isOn: boolean;
|
|
17
|
+
}) => Promise<Result<{
|
|
18
|
+
tools: string[];
|
|
19
|
+
isOn: boolean; /** Why the proxy ship's statement waits for its next one; none when the fleet sees the switches now. */
|
|
20
|
+
statementRefusal: string | null;
|
|
21
|
+
}, SwitchToolsRefusal>>;
|
|
22
|
+
/**
|
|
23
|
+
* Use case: an approver switches tools of an outside MCP server on or off
|
|
24
|
+
* (aeolus-fleet#1151), one or every one selected on its page (gateway scopes
|
|
25
|
+
* 4.3), for the party as a whole: every ship that may reach it reaches the
|
|
26
|
+
* same tools. The fleet, asked as the approver, must answer that it manages
|
|
27
|
+
* the proxy ship before anything changes (A2). The selection is kept in one change, all of it or none, so a
|
|
28
|
+
* call to a tool switched off is refused at once, then the proxy ship is
|
|
29
|
+
* stated anew once; while it cannot be, the switches wait for its next
|
|
30
|
+
* statement.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createSwitchTools(deps: {
|
|
33
|
+
parties: PartyStore;
|
|
34
|
+
servers: McpServers;
|
|
35
|
+
stateParty: StateParty;
|
|
36
|
+
connections: Pick<ConnectionStore, 'find'>;
|
|
37
|
+
fleet: Pick<ProxyShipsAsActor, 'checkManage'>;
|
|
38
|
+
credentialOf: CredentialOf;
|
|
39
|
+
}): SwitchTools;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { approvedParty } from './check-approving.js';
|
|
4
|
+
/**
|
|
5
|
+
* Use case: an approver switches tools of an outside MCP server on or off
|
|
6
|
+
* (aeolus-fleet#1151), one or every one selected on its page (gateway scopes
|
|
7
|
+
* 4.3), for the party as a whole: every ship that may reach it reaches the
|
|
8
|
+
* same tools. The fleet, asked as the approver, must answer that it manages
|
|
9
|
+
* the proxy ship before anything changes (A2). The selection is kept in one change, all of it or none, so a
|
|
10
|
+
* call to a tool switched off is refused at once, then the proxy ship is
|
|
11
|
+
* stated anew once; while it cannot be, the switches wait for its next
|
|
12
|
+
* statement.
|
|
13
|
+
*/
|
|
14
|
+
export function createSwitchTools(deps) {
|
|
15
|
+
return async ({ actor, as, name, tools, isOn }) => {
|
|
16
|
+
const approved = await approvedParty(deps, { actor, as, name });
|
|
17
|
+
if (!approved.isOk) {
|
|
18
|
+
return approved;
|
|
19
|
+
}
|
|
20
|
+
const { party } = approved.value;
|
|
21
|
+
if (party.kind !== 'mcpServer') {
|
|
22
|
+
return refuse('NO_SUCH_PARTY', `There is no outside MCP server ${name}`);
|
|
23
|
+
}
|
|
24
|
+
const listed = await deps.servers.listTools({ url: party.url, credential: party.credential });
|
|
25
|
+
if (!listed.isOk) {
|
|
26
|
+
return refuse('SERVER_UNREACHABLE', `The MCP server of ${name} could not be listed: ${listed.error.reason}`);
|
|
27
|
+
}
|
|
28
|
+
const names = listed.value.map((each) => each.name);
|
|
29
|
+
const unlisted = tools.filter((tool) => !names.includes(tool));
|
|
30
|
+
if (unlisted.length > 0) {
|
|
31
|
+
return refuse('NO_SUCH_TOOL', `The MCP server of ${name} lists no tool ${unlisted.join(' or ')} now`);
|
|
32
|
+
}
|
|
33
|
+
await deps.parties.switchTools({ fleetId: actor.fleetId, name }, { listed: names, switched: new Map(tools.map((tool) => [tool, isOn])) });
|
|
34
|
+
const stated = await deps.stateParty({ fleetId: actor.fleetId, name });
|
|
35
|
+
return ok({ tools: [...tools], isOn, statementRefusal: stated.isOk ? null : stated.error.message });
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=switch-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch-tools.js","sourceRoot":"","sources":["../../../src/core/parties/switch-tools.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAyB,MAAM,sBAAsB,CAAC;AAS5E;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAOjC;IACC,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;QAChD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,eAAe,EAAE,kCAAkC,IAAI,EAAE,CAAC,CAAC;QAC3E,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,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC,cAAc,EAAE,qBAAqB,IAAI,kBAAkB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1I,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACtG,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -16,8 +16,10 @@ export declare const TOOL_NOT_ENABLED = "tool not enabled for this party";
|
|
|
16
16
|
export interface SwitchedTool {
|
|
17
17
|
name: string;
|
|
18
18
|
description?: string;
|
|
19
|
-
/** Whether the server says the tool changes nothing
|
|
20
|
-
isReadOnly
|
|
19
|
+
/** Whether the server says the tool changes nothing, its readOnlyHint as it gives it: a hint, never trusted on its own; none when it says nothing. */
|
|
20
|
+
isReadOnly?: boolean;
|
|
21
|
+
/** Whether the server says the tool may destroy what it changes, its destructiveHint as it gives it; none when it says nothing. */
|
|
22
|
+
isDestructive?: boolean;
|
|
21
23
|
isOn: boolean;
|
|
22
24
|
isNew: boolean;
|
|
23
25
|
}
|
|
@@ -9,7 +9,8 @@ export function switchedToolsOf(listed, switches) {
|
|
|
9
9
|
return listed.map(({ name, description, annotations }) => ({
|
|
10
10
|
name,
|
|
11
11
|
...(description === undefined ? {} : { description }),
|
|
12
|
-
isReadOnly: annotations
|
|
12
|
+
...(annotations?.readOnlyHint === undefined ? {} : { isReadOnly: annotations.readOnlyHint }),
|
|
13
|
+
...(annotations?.destructiveHint === undefined ? {} : { isDestructive: annotations.destructiveHint }),
|
|
13
14
|
isOn: isToolOn(switches, name),
|
|
14
15
|
isNew: switches !== null && !switches.has(name),
|
|
15
16
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-switches.js","sourceRoot":"","sources":["../../../src/core/parties/tool-switches.ts"],"names":[],"mappings":"AAcA,8FAA8F;AAC9F,MAAM,CAAC,MAAM,gBAAgB,GAAG,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-switches.js","sourceRoot":"","sources":["../../../src/core/parties/tool-switches.ts"],"names":[],"mappings":"AAcA,8FAA8F;AAC9F,MAAM,CAAC,MAAM,gBAAgB,GAAG,iCAAiC,CAAC;AAclE,kGAAkG;AAClG,MAAM,UAAU,QAAQ,CAAC,QAA6B,EAAE,IAAY;IAClE,OAAO,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAC1D,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,eAAe,CAAC,MAA8B,EAAE,QAA6B;IAC3F,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QACzD,IAAI;QACJ,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACrD,GAAG,CAAC,WAAW,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC;QAC5F,GAAG,CAAC,WAAW,EAAE,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC;QACrG,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;QAC9B,KAAK,EAAE,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;KAChD,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -123,9 +123,10 @@ export interface PersonShipDoor {
|
|
|
123
123
|
}): Promise<Result<{
|
|
124
124
|
waiting: number;
|
|
125
125
|
}, FleetRefusal>>;
|
|
126
|
-
/** The ship's deliveries, up to max, its own held ones again first. */
|
|
126
|
+
/** The ship's deliveries, up to max, its own held ones again first; shouldSkipHanded leaves the handed ones out before the limit, so a new one is not shut out by held ones. */
|
|
127
127
|
pushReceive(crewToken: string, take: {
|
|
128
128
|
max: number;
|
|
129
|
+
shouldSkipHanded?: boolean;
|
|
129
130
|
}): Promise<Result<PushedPersonDelivery[], FleetRefusal>>;
|
|
130
131
|
/** Acknowledges a delivery the person opened: their own act confirms it (interop 5.1). */
|
|
131
132
|
ack(crewToken: string, deliveryId: DeliveryId): Promise<Result<undefined, FleetRefusal>>;
|
|
@@ -208,8 +209,9 @@ export interface WakeChannel {
|
|
|
208
209
|
readonly windowMs: number;
|
|
209
210
|
/** Whether the person turned it on (W8): nothing is on by default. */
|
|
210
211
|
isOn(ship: PersonShip): Promise<boolean>;
|
|
211
|
-
/** Sends the wake: whether it went out. */
|
|
212
|
+
/** Sends the wake: whether it went out. A refusal for good (refused) cannot be fixed by trying again; unavailable can succeed later. */
|
|
212
213
|
wake(ship: PersonShip): Promise<Result<undefined, {
|
|
214
|
+
kind: 'refused' | 'unavailable';
|
|
213
215
|
reason: string;
|
|
214
216
|
}>>;
|
|
215
217
|
}
|
|
@@ -1,40 +1,52 @@
|
|
|
1
|
-
import type { FleetRefusal } from
|
|
2
|
-
import type { Clock } from
|
|
3
|
-
import { type Result } from
|
|
4
|
-
import type { FocusedPages, PersonShip, PersonShipDoor, WakeChannel, WakesSent } from
|
|
1
|
+
import type { FleetRefusal } from "../connection/ports.js";
|
|
2
|
+
import type { Clock } from "../shared/clock.js";
|
|
3
|
+
import { type Result } from "../shared/result.js";
|
|
4
|
+
import type { FocusedPages, PersonShip, PersonShipDoor, WakeChannel, WakeChannelName, WakesSent } from "./ports.js";
|
|
5
5
|
/**
|
|
6
6
|
* What a wake came to: nothing left to wake (settled), a wake held back
|
|
7
7
|
* until the earliest window of a channel turned on ends (inWindow), or no
|
|
8
8
|
* channel sent it, so it is tried again (failed).
|
|
9
9
|
*/
|
|
10
10
|
export type WakeOutcome = {
|
|
11
|
-
readonly kind:
|
|
11
|
+
readonly kind: "settled";
|
|
12
12
|
} | {
|
|
13
|
-
readonly kind:
|
|
13
|
+
readonly kind: "inWindow";
|
|
14
14
|
readonly until: Date;
|
|
15
15
|
} | {
|
|
16
|
-
readonly kind:
|
|
16
|
+
readonly kind: "failed";
|
|
17
17
|
};
|
|
18
18
|
export type WakePerson = (ship: PersonShip, crewToken: string) => Promise<Result<WakeOutcome, FleetRefusal>>;
|
|
19
19
|
/**
|
|
20
20
|
* Use case: wakes a person for what waits on their person ship (wake a
|
|
21
21
|
* person, W3, W8). It takes the ship's deliveries with the gateway as their
|
|
22
|
-
* waker
|
|
22
|
+
* waker, leaving the handed ones out so ten held deliveries never shut a new
|
|
23
|
+
* one out; those never handed are fresh. Each channel the person turned on
|
|
23
24
|
* whose window has passed sends one wake for all of them; each fresh
|
|
24
25
|
* delivery is then handed no. 1, naming the first channel that went out, so
|
|
25
26
|
* a delivery is woken once. A wake held back by a window, or that no
|
|
26
27
|
* channel sent, hands nothing. Each channel's window is kept after the
|
|
27
28
|
* hand-overs, so a gateway that stopped in between wakes again: one wake
|
|
28
|
-
* more, nothing lost.
|
|
29
|
+
* more, nothing lost. A fresh delivery sent before a channel's last wake
|
|
30
|
+
* that is still inside its window is one that wake covers: a hand-over the
|
|
31
|
+
* fleet refused is made again through that channel, never with a second
|
|
32
|
+
* wake. A channel that refused the wake for good ends the attempt, which is
|
|
33
|
+
* told, as asking again cannot help; while another channel's wake fails and is
|
|
34
|
+
* tried again, that channel is not asked again. While a page of the person is in focus, the page
|
|
29
35
|
* shows what arrives (W6): each fresh delivery is handed through it and no
|
|
30
36
|
* wake goes out.
|
|
31
37
|
*/
|
|
32
38
|
export declare function createWakePerson(deps: {
|
|
33
|
-
door: Pick<PersonShipDoor,
|
|
39
|
+
door: Pick<PersonShipDoor, "pushReceive" | "handed">;
|
|
34
40
|
channels: readonly WakeChannel[];
|
|
35
41
|
wakesSent: WakesSent;
|
|
36
42
|
focused: FocusedPages;
|
|
37
43
|
/** How long a page counts in focus since it was last seen so. */
|
|
38
44
|
focusFreshMs: number;
|
|
39
45
|
clock: Clock;
|
|
46
|
+
/** Tells that a channel refused the wake for good, so the attempt ended. */
|
|
47
|
+
attemptEnded: (ended: {
|
|
48
|
+
ship: PersonShip;
|
|
49
|
+
channel: WakeChannelName;
|
|
50
|
+
reason: string;
|
|
51
|
+
}) => void;
|
|
40
52
|
}): WakePerson;
|
|
@@ -1,64 +1,125 @@
|
|
|
1
|
-
import { RECEIVE_MAX_UPPER_BOUND } from
|
|
2
|
-
import { err, ok } from
|
|
1
|
+
import { RECEIVE_MAX_UPPER_BOUND } from "@aeolus-fleet/common";
|
|
2
|
+
import { err, ok } from "../shared/result.js";
|
|
3
3
|
/**
|
|
4
4
|
* Use case: wakes a person for what waits on their person ship (wake a
|
|
5
5
|
* person, W3, W8). It takes the ship's deliveries with the gateway as their
|
|
6
|
-
* waker
|
|
6
|
+
* waker, leaving the handed ones out so ten held deliveries never shut a new
|
|
7
|
+
* one out; those never handed are fresh. Each channel the person turned on
|
|
7
8
|
* whose window has passed sends one wake for all of them; each fresh
|
|
8
9
|
* delivery is then handed no. 1, naming the first channel that went out, so
|
|
9
10
|
* a delivery is woken once. A wake held back by a window, or that no
|
|
10
11
|
* channel sent, hands nothing. Each channel's window is kept after the
|
|
11
12
|
* hand-overs, so a gateway that stopped in between wakes again: one wake
|
|
12
|
-
* more, nothing lost.
|
|
13
|
+
* more, nothing lost. A fresh delivery sent before a channel's last wake
|
|
14
|
+
* that is still inside its window is one that wake covers: a hand-over the
|
|
15
|
+
* fleet refused is made again through that channel, never with a second
|
|
16
|
+
* wake. A channel that refused the wake for good ends the attempt, which is
|
|
17
|
+
* told, as asking again cannot help; while another channel's wake fails and is
|
|
18
|
+
* tried again, that channel is not asked again. While a page of the person is in focus, the page
|
|
13
19
|
* shows what arrives (W6): each fresh delivery is handed through it and no
|
|
14
20
|
* wake goes out.
|
|
15
21
|
*/
|
|
16
22
|
export function createWakePerson(deps) {
|
|
17
|
-
|
|
23
|
+
/** Channels that refused for good during an attempt still failing, by person ship: a retry of that attempt does not ask them again. */
|
|
24
|
+
const refusedInAttempt = new Map();
|
|
25
|
+
const attemptKey = (ship) => `${ship.fleetId}/${ship.shipId}`;
|
|
26
|
+
const wakePerson = async (ship, crewToken) => {
|
|
18
27
|
/** Hands each fresh delivery no. 1 through the channel, up to the first refusal: that refusal, or none. */
|
|
19
28
|
const handEach = async (fresh, channel) => {
|
|
20
29
|
for (const { deliveryId } of fresh) {
|
|
21
|
-
const handed = await deps.door.handed(crewToken, {
|
|
30
|
+
const handed = await deps.door.handed(crewToken, {
|
|
31
|
+
deliveryId,
|
|
32
|
+
handOverNumber: 1,
|
|
33
|
+
channel,
|
|
34
|
+
});
|
|
22
35
|
if (!handed.isOk) {
|
|
23
36
|
return handed.error;
|
|
24
37
|
}
|
|
25
38
|
}
|
|
26
39
|
return undefined;
|
|
27
40
|
};
|
|
28
|
-
const taken = await deps.door.pushReceive(crewToken, {
|
|
41
|
+
const taken = await deps.door.pushReceive(crewToken, {
|
|
42
|
+
max: RECEIVE_MAX_UPPER_BOUND,
|
|
43
|
+
shouldSkipHanded: true,
|
|
44
|
+
});
|
|
29
45
|
if (!taken.isOk) {
|
|
30
46
|
return taken;
|
|
31
47
|
}
|
|
32
|
-
const
|
|
33
|
-
if (
|
|
34
|
-
return ok({ kind:
|
|
48
|
+
const allFresh = taken.value.filter(({ handOverNumber }) => handOverNumber === null);
|
|
49
|
+
if (allFresh.length === 0) {
|
|
50
|
+
return ok({ kind: "settled" });
|
|
35
51
|
}
|
|
36
52
|
if (await deps.focused.isAnyInFocus(ship, new Date(deps.clock.now().getTime() - deps.focusFreshMs))) {
|
|
37
|
-
const refused = await handEach(
|
|
38
|
-
return refused === undefined ? ok({ kind:
|
|
53
|
+
const refused = await handEach(allFresh, "page");
|
|
54
|
+
return refused === undefined ? ok({ kind: "settled" }) : err(refused);
|
|
39
55
|
}
|
|
40
|
-
const turnedOn = (await Promise.all(deps.channels.map(async (channel) => (
|
|
56
|
+
const turnedOn = (await Promise.all(deps.channels.map(async (channel) => (await channel.isOn(ship)) ? [channel] : []))).flat();
|
|
41
57
|
if (turnedOn.length === 0) {
|
|
42
|
-
return ok({ kind:
|
|
58
|
+
return ok({ kind: "settled" });
|
|
43
59
|
}
|
|
44
60
|
const now = deps.clock.now();
|
|
45
61
|
const windows = await Promise.all(turnedOn.map(async (channel) => {
|
|
46
62
|
const lastSentAt = await deps.wakesSent.lastSentAt(ship, channel.name);
|
|
47
|
-
return {
|
|
63
|
+
return {
|
|
64
|
+
channel,
|
|
65
|
+
lastSentAt,
|
|
66
|
+
endsAt: lastSentAt === undefined
|
|
67
|
+
? now
|
|
68
|
+
: new Date(lastSentAt.getTime() + channel.windowMs),
|
|
69
|
+
};
|
|
48
70
|
}));
|
|
49
|
-
|
|
71
|
+
// What a wake still inside its window covers was left unhanded by a refusal: hand it through that channel.
|
|
72
|
+
let fresh = allFresh;
|
|
73
|
+
for (const { channel, lastSentAt, endsAt } of windows) {
|
|
74
|
+
if (lastSentAt === undefined || endsAt.getTime() <= now.getTime()) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const covered = fresh.filter(({ sentAt }) => sentAt.getTime() <= lastSentAt.getTime());
|
|
78
|
+
const refused = await handEach(covered, channel.name);
|
|
79
|
+
if (refused !== undefined) {
|
|
80
|
+
return err(refused);
|
|
81
|
+
}
|
|
82
|
+
fresh = fresh.filter((delivery) => !covered.includes(delivery));
|
|
83
|
+
}
|
|
84
|
+
if (fresh.length === 0) {
|
|
85
|
+
return ok({ kind: "settled" });
|
|
86
|
+
}
|
|
87
|
+
const refusedBefore = refusedInAttempt.get(attemptKey(ship)) ?? new Set();
|
|
88
|
+
const due = windows
|
|
89
|
+
.filter(({ channel, endsAt }) => endsAt.getTime() <= now.getTime() && !refusedBefore.has(channel.name))
|
|
90
|
+
.map(({ channel }) => channel);
|
|
50
91
|
if (due.length === 0) {
|
|
51
|
-
|
|
92
|
+
const waiting = windows.filter(({ channel }) => !refusedBefore.has(channel.name));
|
|
93
|
+
return ok(waiting.length === 0
|
|
94
|
+
? { kind: "settled" }
|
|
95
|
+
: {
|
|
96
|
+
kind: "inWindow",
|
|
97
|
+
until: new Date(Math.min(...waiting.map(({ endsAt }) => endsAt.getTime()))),
|
|
98
|
+
});
|
|
52
99
|
}
|
|
53
100
|
const wentOut = [];
|
|
101
|
+
let isRetryable = false;
|
|
54
102
|
for (const channel of due) {
|
|
55
|
-
|
|
103
|
+
const woken = await channel.wake(ship);
|
|
104
|
+
if (woken.isOk) {
|
|
56
105
|
wentOut.push(channel.name);
|
|
57
106
|
}
|
|
107
|
+
else if (woken.error.kind === "refused") {
|
|
108
|
+
refusedBefore.add(channel.name);
|
|
109
|
+
refusedInAttempt.set(attemptKey(ship), refusedBefore);
|
|
110
|
+
deps.attemptEnded({
|
|
111
|
+
ship,
|
|
112
|
+
channel: channel.name,
|
|
113
|
+
reason: woken.error.reason,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
isRetryable = true;
|
|
118
|
+
}
|
|
58
119
|
}
|
|
59
120
|
const [firstOut] = wentOut;
|
|
60
121
|
if (firstOut === undefined) {
|
|
61
|
-
return ok({ kind:
|
|
122
|
+
return ok(isRetryable ? { kind: "failed" } : { kind: "settled" });
|
|
62
123
|
}
|
|
63
124
|
const refused = await handEach(fresh, firstOut);
|
|
64
125
|
// The window is kept only after the hand-overs: a gateway that stopped in between wakes again, as the design says. A refusal keeps it, so no second email follows at once.
|
|
@@ -68,7 +129,14 @@ export function createWakePerson(deps) {
|
|
|
68
129
|
if (refused !== undefined) {
|
|
69
130
|
return err(refused);
|
|
70
131
|
}
|
|
71
|
-
return ok({ kind:
|
|
132
|
+
return ok({ kind: "settled" });
|
|
133
|
+
};
|
|
134
|
+
return async (ship, crewToken) => {
|
|
135
|
+
const woken = await wakePerson(ship, crewToken);
|
|
136
|
+
if (!woken.isOk || woken.value.kind !== "failed") {
|
|
137
|
+
refusedInAttempt.delete(attemptKey(ship));
|
|
138
|
+
}
|
|
139
|
+
return woken;
|
|
72
140
|
};
|
|
73
141
|
}
|
|
74
142
|
//# sourceMappingURL=wake-person.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wake-person.js","sourceRoot":"","sources":["../../../src/core/people/wake-person.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAI/D,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"wake-person.js","sourceRoot":"","sources":["../../../src/core/people/wake-person.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ export function createWebPushChannel(deps) {
|
|
|
28
28
|
break;
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
-
return isTaken ? ok(undefined) : err({ reason: 'no push service took the wake' });
|
|
31
|
+
return isTaken ? ok(undefined) : err({ kind: 'unavailable', reason: 'no push service took the wake' });
|
|
32
32
|
},
|
|
33
33
|
};
|
|
34
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-push-channel.js","sourceRoot":"","sources":["../../../src/core/people/web-push-channel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAG9C;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAA4I;IAC/K,MAAM,WAAW,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAc,EAAkC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;IACxL,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;QAC1D,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACnB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,MAAM,YAAY,IAAI,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;gBACvG,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,MAAM;wBACT,OAAO,GAAG,IAAI,CAAC;wBACf,MAAM;oBACR,KAAK,MAAM;wBACT,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBACpI,MAAM;oBACR,KAAK,QAAQ;wBACX,MAAM;gBACV,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"web-push-channel.js","sourceRoot":"","sources":["../../../src/core/people/web-push-channel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAG9C;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAA4I;IAC/K,MAAM,WAAW,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAc,EAAkC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;IACxL,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;QAC1D,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACnB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,MAAM,YAAY,IAAI,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;gBACvG,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,MAAM;wBACT,OAAO,GAAG,IAAI,CAAC;wBACf,MAAM;oBACR,KAAK,MAAM;wBACT,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBACpI,MAAM;oBACR,KAAK,QAAQ;wBACX,MAAM;gBACV,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC;QACzG,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Err } from './result.js';
|
|
2
2
|
/** Every reason the gateway's core refuses a request. */
|
|
3
|
-
export type DomainErrorKind = 'ALREADY_CONNECTED' | 'SECRET_REFUSED' | 'OTHER_FLEET' | 'MISSING_SCOPES' | 'SCOPE_REFUSED' | 'NOT_THE_OPERATOR' | 'NOT_AN_ACTOR' | 'NOT_AN_APPROVER' | 'NO_SUCH_REQUEST' | 'ALREADY_DECIDED' | 'EXPIRED' | 'SCOPE_NOT_HELD' | 'SERVER_DETAILS_MISSING' | 'REQUEST_ID_USED' | 'FLEET_UNAVAILABLE' | 'NOT_CONNECTED' | 'PARTY_EXISTS' | 'COMMISSION_REFUSED' | 'NO_SUCH_PARTY' | 'NOT_AWAITING_CREW' | 'NOT_CREWED' | 'SERVER_UNREACHABLE' | 'STATEMENT_REFUSED' | 'INVALID_REDIRECT_URIS' | 'CLIENT_HAS_PARTY' | 'PARTY_NOT_CREWED' | 'NO_SUCH_TOOL' | 'INVALID_ARGUMENTS' | 'NOT_REACHABLE' | 'SEND_REFUSED' | 'NO_SUCH_CALL' | 'NOT_A_PERSON' | 'SIGNED_OUT' | 'NO_SUCH_DELIVERY' | 'NOT_A_NETWORKER' | 'OPEN_NETWORK' | 'OUTSIDE_PARTIES_OFF' | 'INVALID_SERVER_URL' | 'NOT_A_MANAGER' | 'RETIRE_REFUSED' | 'NOT_AN_ACCOUNT' | 'PARTY_NOT_COMMISSIONED' | 'CHANGE_REFUSED' | 'UNKNOWN_ALIAS' | 'PAYLOAD_TOO_LARGE' | 'TASK_NOT_FOUND' | 'TASK_TERMINAL' | 'WEBHOOK_REFUSED' | 'PUSH_CONFIG_NOT_FOUND' | 'CONTEXT_MISMATCH' | 'CARD_UNREACHABLE' | 'CARD_INVALID' | 'NOT_A_MESSAGE' | 'CHANNEL_NOT_OFFERED' | 'INVALID_SUBSCRIPTION' | 'NO_SUCH_MEETING' | 'MIC_REFUSED';
|
|
3
|
+
export type DomainErrorKind = 'ALREADY_CONNECTED' | 'SECRET_REFUSED' | 'OTHER_FLEET' | 'MISSING_SCOPES' | 'SCOPE_REFUSED' | 'NOT_THE_OPERATOR' | 'NOT_AN_ACTOR' | 'NOT_AN_APPROVER' | 'NO_SUCH_REQUEST' | 'ALREADY_DECIDED' | 'EXPIRED' | 'SCOPE_NOT_HELD' | 'SERVER_DETAILS_MISSING' | 'REQUEST_ID_USED' | 'FLEET_UNAVAILABLE' | 'NOT_CONNECTED' | 'PARTY_EXISTS' | 'COMMISSION_REFUSED' | 'NO_SUCH_PARTY' | 'NOT_AWAITING_CREW' | 'NOT_CREWED' | 'SERVER_UNREACHABLE' | 'STATEMENT_REFUSED' | 'INVALID_REDIRECT_URIS' | 'CLIENT_HAS_PARTY' | 'PARTY_NOT_CREWED' | 'NO_SUCH_TOOL' | 'INVALID_ARGUMENTS' | 'NOT_REACHABLE' | 'SEND_REFUSED' | 'NO_SUCH_CALL' | 'NOT_A_PERSON' | 'SIGNED_OUT' | 'NO_SUCH_DELIVERY' | 'NOT_A_NETWORKER' | 'OPEN_NETWORK' | 'OUTSIDE_PARTIES_OFF' | 'INVALID_SERVER_URL' | 'NOT_A_MANAGER' | 'RETIRE_REFUSED' | 'NOT_AN_ACCOUNT' | 'PARTY_NOT_COMMISSIONED' | 'CHANGE_REFUSED' | 'UNKNOWN_ALIAS' | 'PAYLOAD_TOO_LARGE' | 'TASK_NOT_FOUND' | 'TASK_TERMINAL' | 'WEBHOOK_REFUSED' | 'PUSH_CONFIG_NOT_FOUND' | 'CONTEXT_MISMATCH' | 'CARD_UNREACHABLE' | 'CARD_INVALID' | 'NOT_A_MESSAGE' | 'CHANNEL_NOT_OFFERED' | 'INVALID_SUBSCRIPTION' | 'NO_SUCH_MEETING' | 'MIC_REFUSED' | 'SCOPE_NOT_LISTED' | 'CONFLICT';
|
|
4
4
|
/** Why the core refused a request. Adapters map the kind to their own error shape; the message is safe to show. */
|
|
5
5
|
export interface DomainError<K extends DomainErrorKind = DomainErrorKind> {
|
|
6
6
|
readonly kind: K;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AAsE5C,qDAAqD;AACrD,MAAM,UAAU,MAAM,CAA4B,IAAO,EAAE,OAAe;IACxE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAChC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aeolus-fleet/gateway",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.32.0",
|
|
4
4
|
"description": "Aeolus gateway: outside MCP servers and clients join a fleet as ships, through one gateway beside core.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-agents",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@a2a-js/sdk": "1.3.0",
|
|
49
|
-
"@aeolus-fleet/common": "^0.
|
|
49
|
+
"@aeolus-fleet/common": "^0.32.0",
|
|
50
50
|
"@base-ui/react": "^1.9.0",
|
|
51
51
|
"@fastify/websocket": "^11.3.4",
|
|
52
52
|
"@modelcontextprotocol/client": "^2.3.1",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"zod": "^4.6.5"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
|
-
"@aeolus-fleet/core": "^0.
|
|
72
|
+
"@aeolus-fleet/core": "^0.32.0",
|
|
73
73
|
"@eslint/js": "^10.0.1",
|
|
74
74
|
"@modelcontextprotocol/ext-tasks": "0.2.2",
|
|
75
75
|
"@tailwindcss/postcss": "^4.3.3",
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
-- Gateway scopes (4.2): the scopes a calling ship needs, for the party as a whole and per tool, kept with the party, and the version they were last changed to.
|
|
2
|
+
ALTER TABLE "parties" ADD COLUMN "scope_requirements" JSONB;
|
|
3
|
+
ALTER TABLE "parties" ADD COLUMN "scope_requirements_version" INTEGER NOT NULL DEFAULT 0;
|