@aeolus-fleet/gateway 0.36.1 → 0.36.2
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/active-ships.d.ts +8 -0
- package/dist/adapters/fleet/active-ships.js +22 -0
- package/dist/adapters/fleet/active-ships.js.map +1 -0
- package/dist/adapters/fleet/every-listed-ship.d.ts +21 -0
- package/dist/adapters/fleet/every-listed-ship.js +28 -0
- package/dist/adapters/fleet/every-listed-ship.js.map +1 -0
- package/dist/adapters/fleet/fleet-ships.d.ts +1 -3
- package/dist/adapters/fleet/fleet-ships.js +5 -22
- package/dist/adapters/fleet/fleet-ships.js.map +1 -1
- package/dist/adapters/fleet/rest-fleet-door.js +40 -6
- package/dist/adapters/fleet/rest-fleet-door.js.map +1 -1
- package/dist/adapters/http/party-sign-in-routes.d.ts +7 -0
- package/dist/adapters/http/party-sign-in-routes.js +18 -0
- package/dist/adapters/http/party-sign-in-routes.js.map +1 -1
- package/dist/adapters/http/person-tools.js +3 -2
- package/dist/adapters/http/person-tools.js.map +1 -1
- package/dist/adapters/http/slack-routes.d.ts +2 -0
- package/dist/adapters/http/slack-routes.js +12 -4
- package/dist/adapters/http/slack-routes.js.map +1 -1
- package/dist/adapters/mcp/mcp-servers.d.ts +8 -2
- package/dist/adapters/mcp/mcp-servers.js +8 -4
- package/dist/adapters/mcp/mcp-servers.js.map +1 -1
- package/dist/adapters/prisma/basket-entries.js +4 -2
- package/dist/adapters/prisma/basket-entries.js.map +1 -1
- package/dist/adapters/prisma/connected-chats.d.ts +4 -0
- package/dist/adapters/prisma/connected-chats.js +21 -0
- package/dist/adapters/prisma/connected-chats.js.map +1 -0
- package/dist/adapters/prisma/fleet-forgetter.js +1 -1
- package/dist/adapters/prisma/fleet-forgetter.js.map +1 -1
- package/dist/adapters/prisma/generated/browser.d.ts +6 -1
- package/dist/adapters/prisma/generated/client.d.ts +6 -1
- package/dist/adapters/prisma/generated/internal/class.d.ts +11 -0
- package/dist/adapters/prisma/generated/internal/class.js +4 -4
- package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +95 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js +19 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +19 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +19 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
- package/dist/adapters/prisma/generated/models/BasketEntry.d.ts +114 -18
- package/dist/adapters/prisma/generated/models/ItemOutcome.d.ts +91 -1
- package/dist/adapters/prisma/generated/models/OpenedDelivery.d.ts +95 -2
- package/dist/adapters/prisma/generated/models/Party.d.ts +32 -1
- package/dist/adapters/prisma/generated/models/SlackLinkStep.d.ts +1005 -0
- package/dist/adapters/prisma/generated/models/SlackLinkStep.js +2 -0
- package/dist/adapters/prisma/generated/models/SlackLinkStep.js.map +1 -0
- package/dist/adapters/prisma/generated/models.d.ts +1 -0
- package/dist/adapters/prisma/item-outcomes.d.ts +6 -1
- package/dist/adapters/prisma/item-outcomes.js +19 -3
- package/dist/adapters/prisma/item-outcomes.js.map +1 -1
- package/dist/adapters/prisma/opened-deliveries.js +5 -0
- package/dist/adapters/prisma/opened-deliveries.js.map +1 -1
- package/dist/adapters/prisma/party-store.js +4 -1
- package/dist/adapters/prisma/party-store.js.map +1 -1
- package/dist/adapters/prisma/slack-link-steps.d.ts +8 -0
- package/dist/adapters/prisma/slack-link-steps.js +28 -0
- package/dist/adapters/prisma/slack-link-steps.js.map +1 -0
- package/dist/adapters/prisma/slack-posts.js +4 -3
- package/dist/adapters/prisma/slack-posts.js.map +1 -1
- package/dist/adapters/slack/slack-messages.d.ts +2 -0
- package/dist/adapters/slack/slack-messages.js +124 -18
- package/dist/adapters/slack/slack-messages.js.map +1 -1
- package/dist/adapters/trpc/router.d.ts +54 -2
- package/dist/adapters/trpc/router.js +25 -1
- package/dist/adapters/trpc/router.js.map +1 -1
- package/dist/app.js +39 -13
- package/dist/app.js.map +1 -1
- package/dist/core/mcp-out/grant-calls.js +1 -1
- package/dist/core/mcp-out/grant-calls.js.map +1 -1
- package/dist/core/mcp-out/hand-call.js +1 -1
- package/dist/core/mcp-out/hand-call.js.map +1 -1
- package/dist/core/mcp-out/keep-server-title.d.ts +13 -0
- package/dist/core/mcp-out/keep-server-title.js +14 -0
- package/dist/core/mcp-out/keep-server-title.js.map +1 -0
- package/dist/core/mcp-out/ports.d.ts +10 -0
- package/dist/core/parties/approve-party.js +1 -1
- package/dist/core/parties/approve-party.js.map +1 -1
- package/dist/core/parties/party.d.ts +2 -0
- package/dist/core/parties/party.js.map +1 -1
- package/dist/core/parties/ports.d.ts +5 -0
- package/dist/core/party-grants/listing-connection.js +2 -2
- package/dist/core/party-grants/listing-connection.js.map +1 -1
- package/dist/core/party-grants/tell-sign-in-needed.d.ts +2 -0
- package/dist/core/party-grants/tell-sign-in-needed.js +16 -4
- package/dist/core/party-grants/tell-sign-in-needed.js.map +1 -1
- package/dist/core/people/act-in-place.d.ts +42 -0
- package/dist/core/people/act-in-place.js +26 -0
- package/dist/core/people/act-in-place.js.map +1 -0
- package/dist/core/people/answer-delivery.js +13 -1
- package/dist/core/people/answer-delivery.js.map +1 -1
- package/dist/core/people/basket.d.ts +32 -10
- package/dist/core/people/basket.js +24 -6
- package/dist/core/people/basket.js.map +1 -1
- package/dist/core/people/count-basket.d.ts +4 -3
- package/dist/core/people/count-basket.js +9 -3
- package/dist/core/people/count-basket.js.map +1 -1
- package/dist/core/people/done-delivery.js +1 -1
- package/dist/core/people/done-delivery.js.map +1 -1
- package/dist/core/people/finish-own-step.js +2 -2
- package/dist/core/people/finish-own-step.js.map +1 -1
- package/dist/core/people/inbox-entry.d.ts +17 -1
- package/dist/core/people/inbox-entry.js +28 -1
- package/dist/core/people/inbox-entry.js.map +1 -1
- package/dist/core/people/item-job.d.ts +3 -1
- package/dist/core/people/item-job.js +5 -1
- package/dist/core/people/item-job.js.map +1 -1
- package/dist/core/people/item-outcome.d.ts +21 -2
- package/dist/core/people/item-outcome.js.map +1 -1
- package/dist/core/people/item-places.d.ts +26 -0
- package/dist/core/people/item-places.js +12 -0
- package/dist/core/people/item-places.js.map +1 -0
- package/dist/core/people/open-delivery.d.ts +6 -6
- package/dist/core/people/open-delivery.js +13 -10
- package/dist/core/people/open-delivery.js.map +1 -1
- package/dist/core/people/opened-of.d.ts +5 -1
- package/dist/core/people/opened-of.js +5 -1
- package/dist/core/people/opened-of.js.map +1 -1
- package/dist/core/people/ports.d.ts +40 -3
- package/dist/core/people/put-in-basket.d.ts +8 -6
- package/dist/core/people/put-in-basket.js +16 -5
- package/dist/core/people/put-in-basket.js.map +1 -1
- package/dist/core/people/read-basket.d.ts +8 -3
- package/dist/core/people/read-basket.js +8 -10
- package/dist/core/people/read-basket.js.map +1 -1
- package/dist/core/people/read-bridge-home.d.ts +39 -11
- package/dist/core/people/read-bridge-home.js +74 -12
- package/dist/core/people/read-bridge-home.js.map +1 -1
- package/dist/core/people/read-chats.d.ts +21 -0
- package/dist/core/people/read-chats.js +20 -0
- package/dist/core/people/read-chats.js.map +1 -0
- package/dist/core/people/read-inbox.d.ts +19 -9
- package/dist/core/people/read-inbox.js +57 -15
- package/dist/core/people/read-inbox.js.map +1 -1
- package/dist/core/people/read-record.d.ts +37 -11
- package/dist/core/people/read-record.js +44 -12
- package/dist/core/people/read-record.js.map +1 -1
- package/dist/core/people/read-send-to.d.ts +23 -0
- package/dist/core/people/read-send-to.js +37 -0
- package/dist/core/people/read-send-to.js.map +1 -0
- package/dist/core/people/read-your-fleet.d.ts +19 -0
- package/dist/core/people/read-your-fleet.js +22 -0
- package/dist/core/people/read-your-fleet.js.map +1 -0
- package/dist/core/people/remove-from-basket.d.ts +2 -1
- package/dist/core/people/remove-from-basket.js +4 -1
- package/dist/core/people/remove-from-basket.js.map +1 -1
- package/dist/core/people/routing.d.ts +13 -4
- package/dist/core/people/routing.js +14 -0
- package/dist/core/people/routing.js.map +1 -1
- package/dist/core/people/send-basket.d.ts +11 -7
- package/dist/core/people/send-basket.js +68 -11
- package/dist/core/people/send-basket.js.map +1 -1
- package/dist/core/people/send-message.d.ts +3 -1
- package/dist/core/people/send-message.js +9 -2
- package/dist/core/people/send-message.js.map +1 -1
- package/dist/core/people/send-stored-answers.d.ts +4 -3
- package/dist/core/people/send-stored-answers.js +62 -12
- package/dist/core/people/send-stored-answers.js.map +1 -1
- package/dist/core/people/stale-item.d.ts +40 -0
- package/dist/core/people/stale-item.js +36 -0
- package/dist/core/people/stale-item.js.map +1 -0
- package/dist/core/people/wake-person.d.ts +3 -1
- package/dist/core/people/wake-person.js +4 -2
- package/dist/core/people/wake-person.js.map +1 -1
- package/dist/core/people/your-fleet.d.ts +44 -0
- package/dist/core/people/your-fleet.js +64 -0
- package/dist/core/people/your-fleet.js.map +1 -0
- package/dist/core/slack/answer-in-slack.d.ts +15 -9
- package/dist/core/slack/answer-in-slack.js +43 -18
- package/dist/core/slack/answer-in-slack.js.map +1 -1
- package/dist/core/slack/ask-to-link-slack.d.ts +28 -0
- package/dist/core/slack/ask-to-link-slack.js +31 -0
- package/dist/core/slack/ask-to-link-slack.js.map +1 -0
- package/dist/core/slack/complete-link.d.ts +6 -1
- package/dist/core/slack/complete-link.js +6 -0
- package/dist/core/slack/complete-link.js.map +1 -1
- package/dist/core/slack/done-in-slack.d.ts +36 -0
- package/dist/core/slack/done-in-slack.js +63 -0
- package/dist/core/slack/done-in-slack.js.map +1 -0
- package/dist/core/slack/edit-slack-posts.d.ts +7 -5
- package/dist/core/slack/edit-slack-posts.js +13 -10
- package/dist/core/slack/edit-slack-posts.js.map +1 -1
- package/dist/core/slack/edited-post-of.d.ts +19 -0
- package/dist/core/slack/edited-post-of.js +77 -0
- package/dist/core/slack/edited-post-of.js.map +1 -0
- package/dist/core/slack/ports.d.ts +68 -10
- package/dist/core/slack/pressed-post-of.d.ts +9 -0
- package/dist/core/slack/pressed-post-of.js +18 -0
- package/dist/core/slack/pressed-post-of.js.map +1 -0
- package/dist/core/slack/read-slack-dropped-out.d.ts +23 -0
- package/dist/core/slack/read-slack-dropped-out.js +24 -0
- package/dist/core/slack/read-slack-dropped-out.js.map +1 -0
- package/dist/core/slack/read-slack-link.d.ts +4 -0
- package/dist/core/slack/read-slack-link.js +5 -0
- package/dist/core/slack/read-slack-link.js.map +1 -1
- package/dist/core/slack/show-in-slack.js +8 -7
- package/dist/core/slack/show-in-slack.js.map +1 -1
- package/dist/core/slack/slack-post-of.d.ts +24 -12
- package/dist/core/slack/slack-post-of.js +118 -37
- package/dist/core/slack/slack-post-of.js.map +1 -1
- package/dist/core/slack/slack-post.d.ts +13 -1
- package/dist/core/slack/slack-post.js +16 -1
- package/dist/core/slack/slack-post.js.map +1 -1
- package/dist/core/slack/slack-press.d.ts +1 -1
- package/dist/core/slack/slack-press.js +2 -1
- package/dist/core/slack/slack-press.js.map +1 -1
- package/package.json +2 -1
- package/src/adapters/prisma/migrations/20261104090000_basket_entries_note_alone/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261105090000_slack_link_steps/migration.sql +10 -0
- package/src/adapters/prisma/migrations/20261106090000_opened_deliveries_withdrawn_steps/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261107090000_opened_deliveries_step_link/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261107100000_opened_deliveries_opened_in/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261108090000_item_outcomes_note_and_seen/migration.sql +4 -0
- package/src/adapters/prisma/migrations/20261108090000_parties_display_name/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261109090000_basket_entries_option_label/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261109100000_basket_entries_sent/migration.sql +3 -0
- package/src/adapters/prisma/migrations/20261110090000_connected_chats_indexes/migration.sql +5 -0
- package/src/adapters/prisma/schema.prisma +41 -6
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +10 -8
- package/web/.next/build-manifest.json +114 -90
- package/web/.next/diagnostics/route-bundle-stats.json +264 -206
- package/web/.next/fallback-build-manifest.json +3 -3
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/routes-manifest.json +12 -0
- package/web/.next/server/app/(bridge)/bridge/basket/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/{(console) → (bridge)}/bridge/basket/page/build-manifest.json +4 -4
- package/web/.next/server/app/{(console) → (bridge)}/bridge/basket/page/next-font-manifest.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/basket/page/server-reference-manifest.json +105 -0
- package/web/.next/server/app/{(console)/bridge/settings/requests/[requestId] → (bridge)/bridge/basket}/page.js +14 -13
- package/web/.next/server/app/(bridge)/bridge/basket/page.js.nft.json +1 -0
- package/web/.next/server/app/(bridge)/bridge/basket/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(bridge)/bridge/changes/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(bridge)/bridge/changes/route.js +8 -0
- package/web/.next/server/app/{(console) → (bridge)}/bridge/changes/route.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/changes/route_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(bridge)/bridge/done/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/{(console) → (bridge)}/bridge/done/page/build-manifest.json +4 -4
- package/web/.next/server/app/{(console) → (bridge)}/bridge/done/page/next-font-manifest.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/done/page/server-reference-manifest.json +25 -0
- package/web/.next/server/app/{(console) → (bridge)}/bridge/done/page.js +15 -14
- package/web/.next/server/app/{(console) → (bridge)}/bridge/done/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/done/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(bridge)/bridge/fleet/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/{(console)/bridge/settings → (bridge)/bridge/fleet}/page/build-manifest.json +4 -4
- package/web/.next/server/app/{(console)/bridge/settings → (bridge)/bridge/fleet}/page/next-font-manifest.json +1 -1
- package/web/.next/server/app/{(console)/bridge/settings → (bridge)/bridge/fleet}/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/(bridge)/bridge/fleet/page.js +24 -0
- package/web/.next/server/app/{(console)/bridge/basket → (bridge)/bridge/fleet}/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/fleet/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(bridge)/bridge/focus/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(bridge)/bridge/focus/route.js +8 -0
- package/web/.next/server/app/{(console) → (bridge)}/bridge/focus/route.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/focus/route_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(bridge)/bridge/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/{(console) → (bridge)}/bridge/page/build-manifest.json +4 -4
- package/web/.next/server/app/{(console) → (bridge)}/bridge/page/next-font-manifest.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/page/server-reference-manifest.json +95 -0
- package/web/.next/server/app/{(console) → (bridge)}/bridge/page.js +16 -14
- package/web/.next/server/app/{(console) → (bridge)}/bridge/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(bridge)/bridge/settings/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(bridge)/bridge/settings/page/build-manifest.json +23 -0
- package/web/.next/server/app/(bridge)/bridge/settings/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/(bridge)/bridge/settings/page/server-reference-manifest.json +15 -0
- package/web/.next/server/app/{(console) → (bridge)}/bridge/settings/page.js +13 -12
- package/web/.next/server/app/{(console) → (bridge)}/bridge/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/settings/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(bridge)/bridge/settings/requests/[requestId]/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(bridge)/bridge/settings/requests/[requestId]/page/build-manifest.json +23 -0
- package/web/.next/server/app/(bridge)/bridge/settings/requests/[requestId]/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/{(console) → (bridge)}/bridge/settings/requests/[requestId]/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/(bridge)/bridge/settings/requests/[requestId]/page.js +26 -0
- package/web/.next/server/app/{(console) → (bridge)}/bridge/settings/requests/[requestId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/settings/requests/[requestId]/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(bridge)/bridge/settings/routing/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(bridge)/bridge/settings/routing/page/build-manifest.json +23 -0
- package/web/.next/server/app/(bridge)/bridge/settings/routing/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/(bridge)/bridge/settings/routing/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/{(console) → (bridge)}/bridge/settings/routing/page/server-reference-manifest.json +15 -15
- package/web/.next/server/app/{(console) → (bridge)}/bridge/settings/routing/page.js +15 -14
- package/web/.next/server/app/(bridge)/bridge/settings/routing/page.js.map +5 -0
- package/web/.next/server/app/{(console) → (bridge)}/bridge/settings/routing/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/settings/routing/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(bridge)/bridge/stay-aware/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(bridge)/bridge/stay-aware/page/build-manifest.json +23 -0
- package/web/.next/server/app/(bridge)/bridge/stay-aware/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/(bridge)/bridge/stay-aware/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/(bridge)/bridge/stay-aware/page/server-reference-manifest.json +95 -0
- package/web/.next/server/app/{(console)/bridge/basket → (bridge)/bridge/stay-aware}/page.js +15 -14
- package/web/.next/server/app/(bridge)/bridge/stay-aware/page.js.map +5 -0
- package/web/.next/server/app/(bridge)/bridge/stay-aware/page.js.nft.json +1 -0
- package/web/.next/server/app/(bridge)/bridge/stay-aware/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/gateway-off/page/build-manifest.json +4 -4
- package/web/.next/server/app/(console)/gateway-off/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/(console)/gateway-off/page.js +2 -2
- package/web/.next/server/app/(console)/gateway-off/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/gateway-off/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/meetings/[meetingId]/page/build-manifest.json +4 -4
- 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 +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page/server-reference-manifest.json +16 -16
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(console)/outside-parties/[name]/page/server-reference-manifest.json +8 -8
- package/web/.next/server/app/(console)/outside-parties/[name]/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/server-reference-manifest.json +16 -16
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(console)/outside-parties/add/page/server-reference-manifest.json +10 -10
- package/web/.next/server/app/(console)/outside-parties/add/page.js +2 -2
- 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/build-manifest.json +4 -4
- 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 +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/build-manifest.json +4 -4
- 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 +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/build-manifest.json +4 -4
- 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 +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)/parties/page/build-manifest.json +4 -4
- package/web/.next/server/app/(console)/parties/page/server-reference-manifest.json +7 -7
- package/web/.next/server/app/(console)/parties/page.js +2 -2
- package/web/.next/server/app/(console)/parties/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/sign-in/failed/page/build-manifest.json +4 -4
- 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 +2 -2
- 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/(console)/slack/disconnect/page/build-manifest.json +4 -4
- package/web/.next/server/app/(console)/slack/disconnect/page/server-reference-manifest.json +10 -10
- package/web/.next/server/app/(console)/slack/disconnect/page.js +2 -2
- package/web/.next/server/app/(console)/slack/disconnect/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/slack/disconnect/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/slack/expose/page/build-manifest.json +4 -4
- package/web/.next/server/app/(console)/slack/expose/page/server-reference-manifest.json +10 -10
- package/web/.next/server/app/(console)/slack/expose/page.js +2 -2
- package/web/.next/server/app/(console)/slack/expose/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/slack/expose/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/slack/link/route.js.nft.json +1 -1
- package/web/.next/server/app/(console)/slack/page/build-manifest.json +4 -4
- package/web/.next/server/app/(console)/slack/page/server-reference-manifest.json +10 -10
- package/web/.next/server/app/(console)/slack/page.js +2 -2
- package/web/.next/server/app/(console)/slack/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/slack/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/slack/remove/page/build-manifest.json +4 -4
- package/web/.next/server/app/(console)/slack/remove/page/server-reference-manifest.json +10 -10
- package/web/.next/server/app/(console)/slack/remove/page.js +4 -4
- package/web/.next/server/app/(console)/slack/remove/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/slack/remove/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error/page/build-manifest.json +4 -4
- package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/server/app/_global-error/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/build-manifest.json +4 -4
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js +2 -2
- 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/apple-icon.png/route.js.nft.json +1 -1
- package/web/.next/server/app/authorize/failed/page/build-manifest.json +4 -4
- package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/failed/page.js +3 -2
- package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/pick/page/build-manifest.json +4 -4
- package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/pick/page.js +7 -5
- 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/build-manifest.json +4 -4
- 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 +3 -2
- package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/icon.svg/route.js.nft.json +1 -1
- package/web/.next/server/app-paths-manifest.json +10 -8
- package/web/.next/server/chunks/0b9d__next-internal_server_app_(bridge)_bridge_changes_route_actions_0wd1c_8tnx6-f.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__1j0sdz18lzulo._.js +2 -2
- package/web/.next/server/chunks/[root-of-the-server]__1o2xxi_001xql._.js +2 -2
- package/web/.next/server/chunks/_0up_7s_05-7vm._.js +3 -0
- package/web/.next/server/chunks/_0up_7s_05-7vm._.js.map +1 -0
- package/web/.next/server/chunks/_0xw0b7avhvg75._.js +1 -1
- package/web/.next/server/chunks/_1w2t6c0hpdsrn._.js +1 -1
- package/web/.next/server/chunks/_1xaed_q500ez6._.js +3 -0
- package/web/.next/server/chunks/_1xaed_q500ez6._.js.map +1 -0
- package/web/.next/server/chunks/_20ne4s-e_jzxp._.js +1 -1
- package/web/.next/server/chunks/_20ne4s-e_jzxp._.js.map +1 -1
- package/web/.next/server/chunks/ssr/01fr_app_(bridge)_bridge_settings_requests_[requestId]_page_actions_0o8g7_xshtmem.js +3 -0
- package/web/.next/server/chunks/ssr/01fr_app_(bridge)_bridge_settings_requests_[requestId]_page_actions_0o8g7_xshtmem.js.map +1 -0
- package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_stay-aware_page_actions_1u0xo0v3y9c34.js +3 -0
- package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_stay-aware_page_actions_1u0xo0v3y9c34.js.map +1 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_bridge_settings_routing_page_actions_06_j7s24dy5ee.js +3 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_bridge_settings_routing_page_actions_06_j7s24dy5ee.js.map +1 -0
- 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/[root-of-the-server]__001xx3sm5ur-e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__001xx3sm5ur-e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__1yyaeeylnezpi._.js → [root-of-the-server]__04_bc8g0oe4jt._.js} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0a6a1yc_ac-qt._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0a8db18tyk__5._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0a8db18tyk__5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0e4l5gt01o04p._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0e4l5gt01o04p._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0gptrhg3mj4hs._.js +57 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0gptrhg3mj4hs._.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]__0kjcooo3pi4_k._.js +57 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0kjcooo3pi4_k._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rmg7huc074bf._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rmg7huc074bf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13v3maun347sn._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13v3maun347sn._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0gnfxe62edx95._.js → [root-of-the-server]__179upda-y7uap._.js} +1 -1
- 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]__1hgu6f5hpnykv._.js +57 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1hgu6f5hpnykv._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1j6n8jj7-5t6v._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1j6n8jj7-5t6v._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1qtzvez4cn5be._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1qtzvez4cn5be._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1ul9rrs2g66lm._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1ul9rrs2g66lm._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__20gvfqy33wcds._.js +57 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__20gvfqy33wcds._.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/_0cnpz5jm2_9xf._.js +3 -0
- package/web/.next/server/chunks/ssr/_0cnpz5jm2_9xf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0f7ucdt7bfmun._.js +3 -0
- package/web/.next/server/chunks/ssr/_0f7ucdt7bfmun._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js +1 -1
- package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0kk7op86em7z2._.js +3 -0
- package/web/.next/server/chunks/ssr/_0kk7op86em7z2._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0oekmfmigr0qv._.js +3 -0
- package/web/.next/server/chunks/ssr/_0oekmfmigr0qv._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0pirspvjp3ggl._.js +3 -0
- package/web/.next/server/chunks/ssr/_0pirspvjp3ggl._.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/_0v_x6k3ztfvx0._.js +3 -0
- package/web/.next/server/chunks/ssr/_0v_x6k3ztfvx0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0vid8-myyy-_4._.js +3 -0
- package/web/.next/server/chunks/ssr/_0vid8-myyy-_4._.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/_0y5eahpucp8g_._.js +3 -0
- package/web/.next/server/chunks/ssr/_0y5eahpucp8g_._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_13fbnlwrl24s3._.js +3 -0
- package/web/.next/server/chunks/ssr/_13fbnlwrl24s3._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_14k1oldo5chf8._.js +3 -0
- package/web/.next/server/chunks/ssr/_14k1oldo5chf8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_15whg3fd67b9x._.js +3 -0
- package/web/.next/server/chunks/ssr/_15whg3fd67b9x._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_17zzluh48wsdb._.js +3 -0
- package/web/.next/server/chunks/ssr/_17zzluh48wsdb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_18xv7kh7i655_._.js +3 -0
- package/web/.next/server/chunks/ssr/_18xv7kh7i655_._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js +1 -1
- package/web/.next/server/chunks/ssr/_1_ym4hwge_4r0._.js +3 -0
- package/web/.next/server/chunks/ssr/_1_ym4hwge_4r0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1a9wrl8uw7x-y._.js +3 -0
- package/web/.next/server/chunks/ssr/_1a9wrl8uw7x-y._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_1hmjvjuxx92vo._.js → _1airu8wwf7z1b._.js} +2 -2
- package/web/.next/server/chunks/ssr/_1airu8wwf7z1b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1e2o809f0ekry._.js +1 -1
- package/web/.next/server/chunks/ssr/{_0a_nsm-ye2r6v._.js → _1gbkqq8ra1nei._.js} +2 -2
- package/web/.next/server/chunks/ssr/_1gbkqq8ra1nei._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1i5zdy3tp2ykh._.js +3 -0
- package/web/.next/server/chunks/ssr/_1i5zdy3tp2ykh._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1i8ofnr1a5yle._.js +3 -0
- package/web/.next/server/chunks/ssr/_1i8ofnr1a5yle._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1iorutn_o9hja._.js +3 -0
- package/web/.next/server/chunks/ssr/_1iorutn_o9hja._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1kdx8a0j5cxyl._.js +3 -0
- package/web/.next/server/chunks/ssr/_1kdx8a0j5cxyl._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1mg5oon0wpocg._.js +3 -0
- package/web/.next/server/chunks/ssr/_1mg5oon0wpocg._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
- package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1pp0z5srqqqyl._.js +3 -0
- package/web/.next/server/chunks/ssr/_1pp0z5srqqqyl._.js.map +1 -0
- 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/_1rfpx4ze-3l8z._.js +3 -0
- package/web/.next/server/chunks/ssr/{web_features_0mi9a9pdzkdji._.js.map → _1rfpx4ze-3l8z._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_1t74yvog5g6g2._.js +3 -0
- package/web/.next/server/chunks/ssr/_1t74yvog5g6g2._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1ve-ao6odintc._.js +3 -0
- package/web/.next/server/chunks/ssr/_1ve-ao6odintc._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1xuikhitica6p._.js +3 -0
- package/web/.next/server/chunks/ssr/_1xuikhitica6p._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1zmd3armaxhyu._.js +4 -0
- package/web/.next/server/chunks/ssr/_1zmd3armaxhyu._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_0489ke-80obwd._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_0489ke-80obwd._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_0gpbs01t1c_a4._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_0gpbs01t1c_a4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_0ue_35q2cegwf._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_0ue_35q2cegwf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_0zgrzr0ui3gi8._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_0zgrzr0ui3gi8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_174jf4d4t_bo_._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_174jf4d4t_bo_._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_1qxtjrbc2-6xd._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_1qxtjrbc2-6xd._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_0t_cmi-llaq7g._.js +1 -1
- package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_0t_cmi-llaq7g._.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_app-switcher_08qq5-uxv7jii.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_app-switcher_08qq5-uxv7jii.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_class-names_1h5pbm2ucssiq.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_class-names_1h5pbm2ucssiq.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_0jlwmxa9rk8p_._.js +1 -1
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_0jlwmxa9rk8p_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_19e_nxxf4a88q._.js +1 -1
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_19e_nxxf4a88q._.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_react_1cvjxnw-b3pnv._.js +3 -0
- package/web/.next/server/chunks/ssr/{node_modules_@base-ui_react_1lbvjrzg8s2ox._.js.map → node_modules_@base-ui_react_1cvjxnw-b3pnv._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_react_toast_index_parts_mjs_20gwon7142aop._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_react_toast_index_parts_mjs_20gwon7142aop._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_bell_mjs_1sxms6d0wfxa2._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_bell_mjs_1sxms6d0wfxa2._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_search_mjs_047mxu6_po4kl._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_search_mjs_047mxu6_po4kl._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_08hq6z46rczo0._.js +2 -2
- package/web/.next/server/chunks/ssr/node_modules_next_dist_0janj0i6dqko7._.js +2 -2
- package/web/.next/server/chunks/ssr/node_modules_next_dist_0janj0i6dqko7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0g15rgn4n-oiz.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0g15rgn4n-oiz.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0hzwtyh-646p2.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0hzwtyh-646p2.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0mm8dt8tws1fz.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0mm8dt8tws1fz.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0tcy7phl8a4gj.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0tcy7phl8a4gj.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ynno0usi0bwx.js +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11x159_oszki3.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11x159_oszki3.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_128zox167vtjm.js +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_128zox167vtjm.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1dltrn6ii5dd6.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1dltrn6ii5dd6.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1hm1iu016c1fy.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1hm1iu016c1fy.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1zaoeyy4_vir_.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1zaoeyy4_vir_.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_0_peudz6-o69m._.js +3 -0
- package/web/.next/server/chunks/ssr/web_0_peudz6-o69m._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_0cxcy088wnfmw._.js +3 -0
- package/web/.next/server/chunks/ssr/web_0cxcy088wnfmw._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_0oz8bypfxh82g._.js +3 -0
- package/web/.next/server/chunks/ssr/web_0oz8bypfxh82g._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_0pk41f5m34jvi._.js +3 -0
- package/web/.next/server/chunks/ssr/web_0pk41f5m34jvi._.js.map +1 -0
- 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_1fi1x3y7rg7mf._.js +3 -0
- package/web/.next/server/chunks/ssr/web_1fi1x3y7rg7mf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_1irsulms62lzf._.js +3 -0
- package/web/.next/server/chunks/ssr/web_1irsulms62lzf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_1k2rrq-kr6f9k._.js +3 -0
- package/web/.next/server/chunks/ssr/web_1k2rrq-kr6f9k._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_1qvxzqmq4aw94._.js +3 -0
- package/web/.next/server/chunks/ssr/web_1qvxzqmq4aw94._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_basket_page_actions_0g7q_rc5nma1e.js +3 -0
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_basket_page_actions_0g7q_rc5nma1e.js.map +1 -0
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_done_page_actions_0kjm34arntdzv.js +3 -0
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_done_page_actions_0kjm34arntdzv.js.map +1 -0
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_page_actions_1ok64rg3edm_u.js +3 -0
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_page_actions_1ok64rg3edm_u.js.map +1 -0
- package/web/.next/server/chunks/ssr/{web_app_(console)_bridge_error_tsx_10gkrn3ey8162._.js → web_app_(bridge)_bridge_error_tsx_0-142o0iqsh3j._.js} +2 -2
- package/web/.next/server/chunks/ssr/web_app_(bridge)_bridge_error_tsx_0-142o0iqsh3j._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_app_(bridge)_bridge_error_tsx_1m86qyp1bl9pi._.js +3 -0
- package/web/.next/server/chunks/ssr/web_app_(bridge)_bridge_error_tsx_1m86qyp1bl9pi._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_app_(bridge)_bridge_fleet_page_tsx_0uvtx8hiy8g0n._.js +3 -0
- package/web/.next/server/chunks/ssr/web_app_(bridge)_bridge_fleet_page_tsx_0uvtx8hiy8g0n._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_app_(bridge)_bridge_settings_page_tsx_1z5yr8ss25q7n._.js +3 -0
- package/web/.next/server/chunks/ssr/web_app_(bridge)_bridge_settings_page_tsx_1z5yr8ss25q7n._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{web_features_0f6r-m-dq36vf._.js → web_features_025l9l6m2zkya._.js} +2 -2
- package/web/.next/server/chunks/ssr/{web_features_0f6r-m-dq36vf._.js.map → web_features_025l9l6m2zkya._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/web_features_05aos-xwnl3m_._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_05aos-xwnl3m_._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_0bwqcs9wjf4y8._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_0bwqcs9wjf4y8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{web_features_0d48z2epb6oie._.js → web_features_0f2pobf_t4wjt._.js} +2 -2
- package/web/.next/server/chunks/ssr/{web_features_0d48z2epb6oie._.js.map → web_features_0f2pobf_t4wjt._.js.map} +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_bridge_0w95y19yk5w14._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_bridge_0w95y19yk5w14._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_bridge_1mi9qlb-z5iwt._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_1mi9qlb-z5iwt._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_fleet_ui_fleet-numbers_tsx_0_afv4j248_w-._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_bridge_fleet_ui_fleet-numbers_tsx_0_afv4j248_w-._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_bridge_hooks_bridge-actions_ts_0h-_xm2rcb-ij._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_hooks_bridge-actions_ts_0h-_xm2rcb-ij._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_basket-panel_tsx_1qi_kzld0rfgs._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_basket-panel_tsx_1qi_kzld0rfgs._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_decision-panel_tsx_1mzsixgc8zuxc._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_decision-panel_tsx_1mzsixgc8zuxc._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_done-panel_tsx_1m844-qb1z9p_._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_done-panel_tsx_1m844-qb1z9p_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_home-panel_tsx_1cc5zdhxogl_2._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_home-panel_tsx_1cc5zdhxogl_2._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_ui_1y4g3fe75nqn5._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_ui_1y4g3fe75nqn5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_ui_item-row_tsx_0c_a8wjzwsr7j._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_bridge_ui_item-row_tsx_0c_a8wjzwsr7j._.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_0pe8cwpxe1egb._.js.map +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_paths_ts_0vbj9elyqekpp._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_outside-parties_paths_ts_0vbj9elyqekpp._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_slack_actions_ts_1l3yg9vl20_vu._.js +1 -1
- package/web/.next/server/chunks/web__next-internal_server_app_(bridge)_bridge_focus_route_actions_0fx2vmqfq23mq.js +3 -0
- package/web/.next/server/middleware-build-manifest.js +114 -90
- package/web/.next/server/next-font-manifest.js +1 -1
- package/web/.next/server/next-font-manifest.json +14 -6
- 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 +165 -103
- package/web/.next/static/chunks/{2z2auwx1s2mgl.js → 0k33n07zesv12.js} +1 -1
- package/web/.next/static/chunks/0ozz8jadgfdrx.js +1 -0
- package/web/.next/static/chunks/{1166rxt6h6ilq.js → 1c8q9h-van9r6.js} +1 -1
- package/web/.next/static/chunks/1nzfw6ajt5nf9.js +55 -0
- package/web/.next/static/chunks/1uhmdmkn5gsk2.js +1 -0
- package/web/.next/static/chunks/1v36iovy1f5cj.js +1 -0
- package/web/.next/static/chunks/1vhvy8bx4fxur.js +1 -0
- package/web/.next/static/chunks/1vhx_nu9nxo1v.js +1 -0
- package/web/.next/static/chunks/{3db90zxmny2y-.js → 23vvtbj-zoa_f.js} +1 -1
- package/web/.next/static/chunks/24vn5i6ojvl8l.js +1 -0
- package/web/.next/static/chunks/2dgbb29jkr_tu.js +1 -0
- package/web/.next/static/chunks/2ewacyhp73due.js +1 -0
- package/web/.next/static/chunks/2fimf0wcjnmpj.js +1 -0
- package/web/.next/static/chunks/2fk9ydkphmyna.js +1 -0
- package/web/.next/static/chunks/2l6hafvocw-rd.js +1 -0
- package/web/.next/static/chunks/2ld8_nap7g_uy.js +1 -0
- package/web/.next/static/chunks/2mpwg-t6pat39.js +1 -0
- package/web/.next/static/chunks/2pvcbql986wln.js +1 -0
- package/web/.next/static/chunks/2s1efgj6gxjgl.js +1 -0
- package/web/.next/static/chunks/2zlx-c_0x38uo.css +3 -0
- package/web/.next/static/chunks/34u_331hqync_.js +1 -0
- package/web/.next/static/chunks/39tst46ewpx_k.js +1 -0
- package/web/.next/static/chunks/{3x0p-z3zdrk_b.js → 3_bb0g4jkqn8q.js} +1 -1
- package/web/.next/static/chunks/3d5z1i-6yksxd.js +1 -0
- package/web/.next/static/chunks/3jq9vu8tr29j2.js +1 -0
- package/web/.next/static/chunks/3kenmp9pjwgf2.js +1 -0
- package/web/.next/static/chunks/3knqujtrdi225.js +1 -0
- package/web/.next/static/chunks/{0lzisjsmhlhjf.js → 3zhaqdsq15d1e.js} +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/types/routes.d.ts +3 -1
- package/web/.next/types/validator.ts +50 -16
- package/dist/core/people/stale-question.d.ts +0 -28
- package/dist/core/people/stale-question.js +0 -26
- package/dist/core/people/stale-question.js.map +0 -1
- package/web/.next/server/app/(console)/bridge/basket/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/(console)/bridge/basket/page/server-reference-manifest.json +0 -75
- package/web/.next/server/app/(console)/bridge/basket/page_client-reference-manifest.js +0 -3
- package/web/.next/server/app/(console)/bridge/changes/route/app-paths-manifest.json +0 -3
- package/web/.next/server/app/(console)/bridge/changes/route.js +0 -8
- package/web/.next/server/app/(console)/bridge/changes/route_client-reference-manifest.js +0 -3
- package/web/.next/server/app/(console)/bridge/done/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/(console)/bridge/done/page/server-reference-manifest.json +0 -75
- package/web/.next/server/app/(console)/bridge/done/page_client-reference-manifest.js +0 -3
- package/web/.next/server/app/(console)/bridge/focus/route/app-paths-manifest.json +0 -3
- package/web/.next/server/app/(console)/bridge/focus/route.js +0 -8
- package/web/.next/server/app/(console)/bridge/focus/route_client-reference-manifest.js +0 -3
- package/web/.next/server/app/(console)/bridge/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/(console)/bridge/page/server-reference-manifest.json +0 -65
- package/web/.next/server/app/(console)/bridge/page_client-reference-manifest.js +0 -3
- package/web/.next/server/app/(console)/bridge/settings/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/(console)/bridge/settings/page_client-reference-manifest.js +0 -3
- package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page/build-manifest.json +0 -23
- package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page/next-font-manifest.json +0 -11
- package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page_client-reference-manifest.js +0 -3
- package/web/.next/server/app/(console)/bridge/settings/routing/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/(console)/bridge/settings/routing/page/build-manifest.json +0 -23
- package/web/.next/server/app/(console)/bridge/settings/routing/page/next-font-manifest.json +0 -11
- package/web/.next/server/app/(console)/bridge/settings/routing/page_client-reference-manifest.js +0 -3
- package/web/.next/server/chunks/0b9d__next-internal_server_app_(console)_bridge_changes_route_actions_0hj8aqohz6bu6.js +0 -3
- package/web/.next/server/chunks/_05qgg3__4kdbm._.js +0 -3
- package/web/.next/server/chunks/_05qgg3__4kdbm._.js.map +0 -1
- package/web/.next/server/chunks/_1uap5tql2vvsb._.js +0 -3
- package/web/.next/server/chunks/_1uap5tql2vvsb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/01fr_app_(console)_bridge_settings_requests_[requestId]_page_actions_1au-p5lgnv5e-.js +0 -3
- package/web/.next/server/chunks/ssr/01fr_app_(console)_bridge_settings_requests_[requestId]_page_actions_1au-p5lgnv5e-.js.map +0 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_bridge_settings_routing_page_actions_136lm_jip4d_x.js +0 -3
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_bridge_settings_routing_page_actions_136lm_jip4d_x.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__00jy4lqrcvxvc._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__00jy4lqrcvxvc._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k-5_al3xk509._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k-5_al3xk509._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__18v7b5ga58a9n._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__18v7b5ga58a9n._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1nxy_j9eswr3i._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1nxy_j9eswr3i._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1rf344o33bmi4._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1rf344o33bmi4._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0a_nsm-ye2r6v._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0h-ua-y4p4u1p._.js +0 -3
- package/web/.next/server/chunks/ssr/_0h-ua-y4p4u1p._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_10-gn6g9yc63s._.js +0 -3
- package/web/.next/server/chunks/ssr/_10-gn6g9yc63s._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_12fsn_33ga-n0._.js +0 -3
- package/web/.next/server/chunks/ssr/_12fsn_33ga-n0._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_177fdczus39s7._.js +0 -3
- package/web/.next/server/chunks/ssr/_177fdczus39s7._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1hmjvjuxx92vo._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1jx41z6kmxtt0._.js +0 -3
- package/web/.next/server/chunks/ssr/_1jx41z6kmxtt0._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1q2s-hb67yjfb._.js +0 -3
- package/web/.next/server/chunks/ssr/_1q2s-hb67yjfb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1yi3j4a16uet-._.js +0 -3
- package/web/.next/server/chunks/ssr/_1yi3j4a16uet-._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_01oyodz1bs245._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_01oyodz1bs245._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_16d4um5s513wz._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_16d4um5s513wz._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_react_1lbvjrzg8s2ox._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_0hkpfqt9ne626._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_0hkpfqt9ne626._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_031g89sb4kgzn.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_031g89sb4kgzn.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_09rviehv6rh0n.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_09rviehv6rh0n.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ka8v6_fxug8r.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ka8v6_fxug8r.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1c8zekuy1gkch.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1c8zekuy1gkch.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1dhzng2nnu0m7.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1dhzng2nnu0m7.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1rya2ag3z4vug.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1rya2ag3z4vug.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_0i_1uraygw2ld._.js +0 -3
- package/web/.next/server/chunks/ssr/web_0i_1uraygw2ld._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_0wz4onhfbq359._.js +0 -3
- package/web/.next/server/chunks/ssr/web_0wz4onhfbq359._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_1-hlf1xzemd3-._.js +0 -3
- package/web/.next/server/chunks/ssr/web_1-hlf1xzemd3-._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_107a79_nx4jdd._.js +0 -3
- package/web/.next/server/chunks/ssr/web_107a79_nx4jdd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_127_b93avkwaq._.js +0 -3
- package/web/.next/server/chunks/ssr/web_127_b93avkwaq._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_basket_page_actions_102xk3g8eko_q.js +0 -3
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_basket_page_actions_102xk3g8eko_q.js.map +0 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_done_page_actions_0mm90xd2feta2.js +0 -3
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_done_page_actions_0mm90xd2feta2.js.map +0 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_page_actions_082880qz6xa5k.js +0 -3
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_page_actions_082880qz6xa5k.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_app_(console)_bridge_error_tsx_0ty_yk1robyaj._.js +0 -3
- package/web/.next/server/chunks/ssr/web_app_(console)_bridge_error_tsx_0ty_yk1robyaj._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_app_(console)_bridge_error_tsx_10gkrn3ey8162._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_app_(console)_bridge_settings_page_tsx_0xzphp7k9ge1u._.js +0 -3
- package/web/.next/server/chunks/ssr/web_app_(console)_bridge_settings_page_tsx_0xzphp7k9ge1u._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_0mi9a9pdzkdji._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_0s8erick0xk77._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_0s8erick0xk77._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_0wuo5bgp5tabn._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_0wuo5bgp5tabn._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_16cy3vmcijydk._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_16cy3vmcijydk._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_1iiqi6dhrst33._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_1iiqi6dhrst33._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_1n1hy3nwha2vi._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_1n1hy3nwha2vi._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_0-mhu0jaig2u3._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_bridge_0-mhu0jaig2u3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_0219fbfmsi68-._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_bridge_0219fbfmsi68-._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_11jndonu4o8fq._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_bridge_11jndonu4o8fq._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_0354e3wb0dzx1._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_bridge_state_0354e3wb0dzx1._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_live-refresh_tsx_1c1xk-oe0kllv._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_bridge_state_live-refresh_tsx_1c1xk-oe0kllv._.js.map +0 -1
- package/web/.next/server/chunks/web__next-internal_server_app_(console)_bridge_focus_route_actions_0syd_u8mgzdmi.js +0 -3
- package/web/.next/static/chunks/0az9upwm-8_q9.js +0 -1
- package/web/.next/static/chunks/0c1tqlbsvq1dj.js +0 -1
- package/web/.next/static/chunks/0fh11dkddwf_2.js +0 -1
- package/web/.next/static/chunks/0gbozvd_yh421.js +0 -1
- package/web/.next/static/chunks/0l9_oie6xi0kd.js +0 -1
- package/web/.next/static/chunks/0m512dxdcrv-b.js +0 -1
- package/web/.next/static/chunks/0zbcy0_3jemrv.js +0 -1
- package/web/.next/static/chunks/1485slb5zus5p.js +0 -1
- package/web/.next/static/chunks/180aowme095ds.js +0 -1
- package/web/.next/static/chunks/24olc0btcvn7q.js +0 -1
- package/web/.next/static/chunks/296w-74ry5lzk.js +0 -1
- package/web/.next/static/chunks/2gghdkr64z9f9.js +0 -1
- package/web/.next/static/chunks/2hoi73vy1wqpo.js +0 -1
- package/web/.next/static/chunks/2mtfca4qk_s34.js +0 -1
- package/web/.next/static/chunks/397zvdr6xr5pq.js +0 -1
- package/web/.next/static/chunks/3ow9h8hreko-p.css +0 -3
- package/web/.next/static/chunks/3pd8pele5x1o9.js +0 -1
- package/web/.next/static/chunks/3srfjz42u14tx.js +0 -1
- package/web/.next/static/chunks/3yq9jt4p_0uid.js +0 -1
- /package/web/.next/server/app/{(console) → (bridge)}/bridge/basket/page/react-loadable-manifest.json +0 -0
- /package/web/.next/server/app/{(console) → (bridge)}/bridge/basket/page.js.map +0 -0
- /package/web/.next/server/app/{(console) → (bridge)}/bridge/changes/route/build-manifest.json +0 -0
- /package/web/.next/server/app/{(console) → (bridge)}/bridge/changes/route/server-reference-manifest.json +0 -0
- /package/web/.next/server/app/{(console) → (bridge)}/bridge/changes/route.js.map +0 -0
- /package/web/.next/server/app/{(console) → (bridge)}/bridge/done/page/react-loadable-manifest.json +0 -0
- /package/web/.next/server/app/{(console) → (bridge)}/bridge/done/page.js.map +0 -0
- /package/web/.next/server/app/{(console)/bridge → (bridge)/bridge/fleet}/page/react-loadable-manifest.json +0 -0
- /package/web/.next/server/app/{(console)/bridge → (bridge)/bridge/fleet}/page.js.map +0 -0
- /package/web/.next/server/app/{(console) → (bridge)}/bridge/focus/route/build-manifest.json +0 -0
- /package/web/.next/server/app/{(console) → (bridge)}/bridge/focus/route/server-reference-manifest.json +0 -0
- /package/web/.next/server/app/{(console) → (bridge)}/bridge/focus/route.js.map +0 -0
- /package/web/.next/server/app/{(console)/bridge/settings → (bridge)/bridge}/page/react-loadable-manifest.json +0 -0
- /package/web/.next/server/app/{(console)/bridge/settings → (bridge)/bridge}/page.js.map +0 -0
- /package/web/.next/server/app/{(console)/bridge/settings/requests/[requestId] → (bridge)/bridge/settings}/page/react-loadable-manifest.json +0 -0
- /package/web/.next/server/app/{(console)/bridge/settings/requests/[requestId] → (bridge)/bridge/settings}/page.js.map +0 -0
- /package/web/.next/server/app/{(console)/bridge/settings/routing → (bridge)/bridge/settings/requests/[requestId]}/page/react-loadable-manifest.json +0 -0
- /package/web/.next/server/app/{(console)/bridge/settings/routing → (bridge)/bridge/settings/requests/[requestId]}/page.js.map +0 -0
- /package/web/.next/server/chunks/{0b9d__next-internal_server_app_(console)_bridge_changes_route_actions_0hj8aqohz6bu6.js.map → 0b9d__next-internal_server_app_(bridge)_bridge_changes_route_actions_0wd1c_8tnx6-f.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__1yyaeeylnezpi._.js.map → [root-of-the-server]__04_bc8g0oe4jt._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__0gnfxe62edx95._.js.map → [root-of-the-server]__179upda-y7uap._.js.map} +0 -0
- /package/web/.next/server/chunks/{web__next-internal_server_app_(console)_bridge_focus_route_actions_0syd_u8mgzdmi.js.map → web__next-internal_server_app_(bridge)_bridge_focus_route_actions_0fx2vmqfq23mq.js.map} +0 -0
- /package/web/.next/static/{CMppMkysNciqc8k4TWwia → 2O8_FQX7YN47L5_OxojXH}/_buildManifest.js +0 -0
- /package/web/.next/static/{CMppMkysNciqc8k4TWwia → 2O8_FQX7YN47L5_OxojXH}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{CMppMkysNciqc8k4TWwia → 2O8_FQX7YN47L5_OxojXH}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../web/features/forms/form-state.ts","../../../../../web/features/forms/ui/look.ts","../../../../../web/features/forms/ui/outcome.tsx","../../../../../web/features/forms/ui/owner-field.tsx","../../../../../web/features/forms/ui/submit-button.tsx","../../../../../web/features/outside-parties/paths.ts","../../../../../web/features/outside-party/scope-changes.ts"],"sourcesContent":["/**\n * What a page's form (a server action) answers the browser: nothing yet,\n * done with what changed, or refused with why, as the API said it. The\n * open network's warning asks for a confirm (interop I-3).\n */\nexport type FormState =\n | { kind: 'idle' }\n | { kind: 'done'; message: string }\n | { kind: 'refused'; message: string }\n | { kind: 'openNetwork'; message: string };\n\nexport const IDLE: FormState = { kind: 'idle' };\n\n/** A form's text field, empty when it was not sent. */\nexport function fieldOf(form: FormData, name: string): string {\n const value = form.get(name);\n return typeof value === 'string' ? value : '';\n}\n\n/** The form's fields as text, files left out. */\nexport function fieldsOf(form: FormData): Record<string, string> {\n return Object.fromEntries([...form.entries()].flatMap(([name, value]) => (typeof value === 'string' ? [[name, value]] : [])));\n}\n\n/** The fleet a page's form names: the page's own, sent in a hidden field. */\nexport const FLEET_FIELD = 'fleet';\n","/** The classes the pages share, on the design tokens: a card and the button kinds. */\nexport const CARD = 'rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm';\n\nconst BUTTON = 'inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60';\n\nexport const BUTTONS = {\n primary: `${BUTTON} bg-primary text-primary-foreground hover:bg-primary-hover`,\n secondary: `${BUTTON} border border-border bg-card hover:bg-accent`,\n destructive: `${BUTTON} bg-destructive text-destructive-foreground`,\n} as const;\n\nexport type ButtonKind = keyof typeof BUTTONS;\n\nexport const INPUT = 'h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code';\n\nexport const LABEL = 'grid gap-1';\n","import type { FormState } from '../form-state';\n\n/** How a form ended: what changed, or why it was refused. Nothing while it has not been sent. */\nexport function Outcome({ state, testId }: { state: FormState; testId?: string }) {\n switch (state.kind) {\n case 'idle':\n return null;\n case 'done':\n return (\n <p role=\"status\" data-testid={testId} className=\"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg\">\n {state.message}\n </p>\n );\n case 'refused':\n case 'openNetwork':\n return (\n <p role=\"alert\" data-testid={testId} className=\"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg\">\n {state.message}\n </p>\n );\n }\n}\n","import { INPUT, LABEL } from './look';\n\n/** A ship a party's owner may be picked from, by its name. */\nexport interface OwnerChoice {\n shipId: string;\n name: string;\n}\n\n/** The owner choices as a page read them, or why they could not be read. */\nexport type OwnerChoices = { isOk: true; value: OwnerChoice[] } | { isOk: false; refusal: string };\n\n/**\n * The owner of a party, picked by name from the ships the fleet takes as an\n * owner. The owner it has now stays a choice, though the fleet no longer\n * lists it, so saving leaves it as it is. Where the choices could not be\n * read, it says why, with nothing to pick.\n */\nexport function OwnerField({ choices, current, help, refusal }: { choices: readonly OwnerChoice[]; current: OwnerChoice | null; help: string; refusal?: string | undefined }) {\n const shown = current === null || choices.some((choice) => choice.shipId === current.shipId) ? choices : [current, ...choices];\n return (\n <label className={LABEL}>\n <span>Owner</span>\n <select className={INPUT} name=\"ownerShipId\" defaultValue={current?.shipId ?? ''} required data-testid=\"owner-field\">\n {current === null ? (\n <option value=\"\" disabled>\n Pick its owner\n </option>\n ) : null}\n {shown.map((choice) => (\n <option key={choice.shipId} value={choice.shipId}>\n {choice.name}\n </option>\n ))}\n </select>\n <span className=\"text-muted-foreground\">{refusal ?? help}</span>\n </label>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useFormStatus } from 'react-dom';\n\nimport { BUTTONS, type ButtonKind } from './look';\n\n/** A form's button: it says the form is on its way at once, and takes no second press meanwhile. */\nexport function SubmitButton({ children, pending, kind = 'primary', testId }: { children: ReactNode; pending: string; kind?: ButtonKind; testId?: string }) {\n const status = useFormStatus();\n return (\n <button type=\"submit\" className={BUTTONS[kind]} disabled={status.pending} aria-busy={status.pending} data-testid={testId}>\n {status.pending ? pending : children}\n </button>\n );\n}\n","/** The outside parties' pages. */\nexport const OUTSIDE_PARTIES_PATH = '/outside-parties';\n\nexport const ADD_SERVER_PATH = `${OUTSIDE_PARTIES_PATH}/add`;\n\nexport const ADD_A2A_CLIENT_PATH = `${OUTSIDE_PARTIES_PATH}/add-a2a-client`;\n\nexport const ADD_A2A_AGENT_PATH = `${OUTSIDE_PARTIES_PATH}/add-a2a-agent`;\n\n/** One outside party's page, or one of its own: changing it, retiring it. */\nexport function partyPath(name: string, action?: 'change' | 'retire'): string {\n return `${OUTSIDE_PARTIES_PATH}/${encodeURIComponent(name)}${action === undefined ? '' : `/${action}`}`;\n}\n","/**\n * What a party's change form asks of the API (decision 0056): only what\n * differs from the party as the fleet holds it. Scope rows it did not show\n * revoke nothing; the scopes every app ship gets, and those the actor does\n * not hold, are never changed.\n */\nimport { idSchema } from '@aeolus-fleet/common';\n\n/** The scopes every app ship gets (0046): shown locked on, and never changed. */\nexport const EVERY_APP_SHIP_SCOPES: readonly string[] = ['messages:send', 'messages:receive'];\n\n/** A form field that ticks a scope: `scope:<scope>`, one field per scope. */\nexport const SCOPE_FIELD_PREFIX = 'scope:';\n\n/** The field a change form sends when it shows the scope rows. */\nexport const SCOPES_SHOWN_FIELD = 'scopesShown';\n\nexport type Changes = { kind: 'changes'; ownerShipId?: string; grant: string[]; revoke: string[] } | { kind: 'refused'; message: string };\n\nexport function changesOf(party: { ownerShipId: string | null; scopes: readonly string[] | null }, sent: { form: Readonly<Record<string, string>>; scopes: readonly string[] }): Changes {\n const { form, scopes } = sent;\n const sentOwner = form.ownerShipId?.trim();\n let ownerShipId: string | undefined;\n if (sentOwner !== undefined && sentOwner !== party.ownerShipId) {\n const parsed = idSchema('ship').safeParse(sentOwner);\n if (!parsed.success) {\n return { kind: 'refused', message: \"The owner's ship id is not a ship id (shp_...)\" };\n }\n ownerShipId = parsed.data;\n }\n const owner = ownerShipId === undefined ? {} : { ownerShipId };\n const held = party.scopes;\n if (form[SCOPES_SHOWN_FIELD] !== 'true' || held === null) {\n return { kind: 'changes', ...owner, grant: [], revoke: [] };\n }\n const own = scopes.filter((scope) => !EVERY_APP_SHIP_SCOPES.includes(scope));\n const isTicked = (scope: string) => form[`${SCOPE_FIELD_PREFIX}${scope}`] !== undefined;\n return {\n kind: 'changes',\n ...owner,\n grant: own.filter((scope) => isTicked(scope) && !held.includes(scope)),\n revoke: own.filter((scope) => !isTicked(scope) && held.includes(scope)),\n };\n}\n"],"names":["IDLE","kind","fieldOf","form","name","value","get","fieldsOf","Object","fromEntries","entries","flatMap","FLEET_FIELD","CARD","BUTTON","BUTTONS","primary","secondary","destructive","INPUT","LABEL","Outcome","state","testId","role","className","message","OwnerField","choices","current","help","refusal","shown","some","choice","shipId","defaultValue","required","disabled","map","SubmitButton","children","pending","status","type","OUTSIDE_PARTIES_PATH","ADD_SERVER_PATH","ADD_A2A_CLIENT_PATH","ADD_A2A_AGENT_PATH","partyPath","action","encodeURIComponent","undefined","EVERY_APP_SHIP_SCOPES","SCOPE_FIELD_PREFIX","SCOPES_SHOWN_FIELD","changesOf","party","sent","scopes","sentOwner","ownerShipId","trim","parsed","idSchema","safeParse","success","data","owner","held","grant","revoke","own","filter","scope","includes","isTicked"],"mappings":"wDAyB2B,cAdI,CAAEC,KAAM,MAAO,eCR9C,IAAMa,EAAS,oGAEFC,EAAU,CACrBC,QAAS,CAAA,EAAGF,EAAO,0DAA0D,CAAC,CAC9EG,UAAW,CAAA,EAAGH,EAAO,6CAA6C,CAAC,CACnEI,YAAa,CAAA,EAAGJ,EAAO,2CAA2C,CAAC,AACrE,qBARoB,mFAYC,yFAEA,sDCZd,SAASO,AAAQ,OAAEC,CAAK,QAAEC,CAAM,CAAyC,EAC9E,OAAQD,EAAMrB,IAAI,EAChB,IAAK,OACH,OAAO,IACT,KAAK,OACH,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEuB,KAAK,SAAS,cAAaD,EAAQE,UAAU,2FAC7CH,EAAMI,OAAO,EAGpB,KAAK,UACL,IAAK,cACH,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEF,KAAK,QAAQ,cAAaD,EAAQE,UAAU,gHAC5CH,EAAMI,OAAO,EAGtB,CACF,gCCrBA,EAAA,EAAA,CAAA,CAAA,kBAiBO,SAASC,AAAW,SAAEC,CAAO,SAAEC,CAAO,MAAEC,CAAI,SAAEC,CAAO,CAAgH,EAC1K,IAAMC,EAAoB,OAAZH,GAAoBD,EAAQK,IAAI,CAAC,AAACC,GAAWA,EAAOC,MAAM,GAAKN,EAAQM,MAAM,EAAIP,EAAU,CAACC,KAAYD,EAAQ,CAC9H,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAMH,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,UACN,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAAOA,UAAW,EAAA,CAAK,CAAErB,KAAK,cAAcgC,aAAcP,GAASM,QAAU,GAAIE,QAAQ,CAAA,CAAA,EAAC,cAAY,wBACxF,OAAZR,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAOxB,MAAM,GAAGiC,QAAQ,CAAA,CAAA,WAAC,mBAGxB,KACHN,EAAMO,GAAG,CAAEL,AAAD,GACT,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAA2B7B,MAAO6B,EAAOC,MAAM,UAC7CD,EAAO9B,IAAI,EADD8B,EAAOC,MAAM,MAK9B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKV,UAAU,iCAAyBM,GAAWD,MAG1D,gCClCA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,kBAGO,SAASU,AAAa,UAAEC,CAAQ,SAAEC,CAAO,MAAEzC,EAAO,SAAS,CAAEsB,QAAM,CAAgF,EACxJ,IAAMoB,EAAS,CAAA,EAAA,EAAA,aAAA,AAAa,IAC5B,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAOC,KAAK,SAASnB,UAAW,EAAA,CAAO,CAACxB,EAAK,CAAEqC,SAAUK,EAAOD,OAAO,CAAE,YAAWC,EAAOD,OAAO,CAAE,cAAanB,WAC/GoB,EAAOD,OAAO,CAAGA,EAAUD,GAGlC,0BCLO,SAASQ,AAAU7C,CAAY,CAAE8C,CAA4B,EAClE,MAAO,GAAGL,iBAAwBM,IAAH,CAAC,cAAqB/C,KAAQ8C,KAAWE,MAAY,GAAK,CAAC,CAAC,EAAEF,EAAAA,CAAQ,EAAE,AACzG,0BCAkC"}
|
|
1
|
+
{"version":3,"sources":["../../../../../web/features/forms/form-state.ts","../../../../../web/features/forms/ui/look.ts","../../../../../web/features/forms/ui/outcome.tsx","../../../../../web/features/forms/ui/owner-field.tsx","../../../../../web/features/forms/ui/submit-button.tsx","../../../../../web/features/outside-parties/paths.ts","../../../../../web/features/outside-party/scope-changes.ts"],"sourcesContent":["/**\n * What a page's form (a server action) answers the browser: nothing yet,\n * done with what changed, or refused with why, as the API said it. The\n * open network's warning asks for a confirm (interop I-3).\n */\nexport type FormState =\n | { kind: 'idle' }\n | { kind: 'done'; message: string }\n | { kind: 'refused'; message: string }\n | { kind: 'openNetwork'; message: string };\n\nexport const IDLE: FormState = { kind: 'idle' };\n\n/** A form's text field, empty when it was not sent. */\nexport function fieldOf(form: FormData, name: string): string {\n const value = form.get(name);\n return typeof value === 'string' ? value : '';\n}\n\n/** The form's fields as text, files left out. */\nexport function fieldsOf(form: FormData): Record<string, string> {\n return Object.fromEntries([...form.entries()].flatMap(([name, value]) => (typeof value === 'string' ? [[name, value]] : [])));\n}\n\n/** The fleet a page's form names: the page's own, sent in a hidden field. */\nexport const FLEET_FIELD = 'fleet';\n","/** The classes the pages share, on the design tokens: a card and the button kinds. */\nexport const CARD = 'rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm';\n\nconst BUTTON = 'inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60';\n\nexport const BUTTONS = {\n primary: `${BUTTON} bg-primary text-primary-foreground hover:bg-primary-hover`,\n secondary: `${BUTTON} border border-border bg-card hover:bg-accent`,\n destructive: `${BUTTON} bg-destructive text-destructive-foreground`,\n} as const;\n\nexport type ButtonKind = keyof typeof BUTTONS;\n\nexport const INPUT = 'h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code';\n\nexport const LABEL = 'grid gap-1';\n","import type { FormState } from '../form-state';\n\n/** How a form ended: what changed, or why it was refused. Nothing while it has not been sent. */\nexport function Outcome({ state, testId }: { state: FormState; testId?: string }) {\n switch (state.kind) {\n case 'idle':\n return null;\n case 'done':\n return (\n <p role=\"status\" data-testid={testId} className=\"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg\">\n {state.message}\n </p>\n );\n case 'refused':\n case 'openNetwork':\n return (\n <p role=\"alert\" data-testid={testId} className=\"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg\">\n {state.message}\n </p>\n );\n }\n}\n","import { INPUT, LABEL } from './look';\n\n/** A ship a party's owner may be picked from, by its name. */\nexport interface OwnerChoice {\n shipId: string;\n name: string;\n}\n\n/** The owner choices as a page read them, or why they could not be read. */\nexport type OwnerChoices = { isOk: true; value: OwnerChoice[] } | { isOk: false; refusal: string };\n\n/**\n * The owner of a party, picked by name from the ships the fleet takes as an\n * owner. The owner it has now stays a choice, though the fleet no longer\n * lists it, so saving leaves it as it is. Where the choices could not be\n * read, it says why, with nothing to pick.\n */\nexport function OwnerField({ choices, current, help, refusal }: { choices: readonly OwnerChoice[]; current: OwnerChoice | null; help: string; refusal?: string | undefined }) {\n const shown = current === null || choices.some((choice) => choice.shipId === current.shipId) ? choices : [current, ...choices];\n return (\n <label className={LABEL}>\n <span>Owner</span>\n <select className={INPUT} name=\"ownerShipId\" defaultValue={current?.shipId ?? ''} required data-testid=\"owner-field\">\n {current === null ? (\n <option value=\"\" disabled>\n Pick its owner\n </option>\n ) : null}\n {shown.map((choice) => (\n <option key={choice.shipId} value={choice.shipId}>\n {choice.name}\n </option>\n ))}\n </select>\n <span className=\"text-muted-foreground\">{refusal ?? help}</span>\n </label>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useFormStatus } from 'react-dom';\n\nimport { BUTTONS, type ButtonKind } from './look';\n\n/** A form's button: it says the form is on its way at once, and takes no second press meanwhile. */\nexport function SubmitButton({ children, pending, kind = 'primary', testId }: { children: ReactNode; pending: string; kind?: ButtonKind; testId?: string }) {\n const status = useFormStatus();\n return (\n <button type=\"submit\" className={BUTTONS[kind]} disabled={status.pending} aria-busy={status.pending} data-testid={testId}>\n {status.pending ? pending : children}\n </button>\n );\n}\n","/** The outside parties' pages. */\nexport const OUTSIDE_PARTIES_PATH = '/outside-parties';\n\nexport const ADD_SERVER_PATH = `${OUTSIDE_PARTIES_PATH}/add`;\n\nexport const ADD_A2A_CLIENT_PATH = `${OUTSIDE_PARTIES_PATH}/add-a2a-client`;\n\nexport const ADD_A2A_AGENT_PATH = `${OUTSIDE_PARTIES_PATH}/add-a2a-agent`;\n\n/** One outside party's page, or one of its own: changing it, retiring it. */\nexport function partyPath(name: string, action?: 'change' | 'retire'): string {\n return `${OUTSIDE_PARTIES_PATH}/${encodeURIComponent(name)}${action === undefined ? '' : `/${action}`}`;\n}\n","/**\n * What a party's change form asks of the API (decision 0056): only what\n * differs from the party as the fleet holds it. Scope rows it did not show\n * revoke nothing; the scopes every app ship gets, and those the actor does\n * not hold, are never changed.\n */\nimport { idSchema } from '@aeolus-fleet/common';\n\n/** The scopes every app ship gets (0046): shown locked on, and never changed. */\nexport const EVERY_APP_SHIP_SCOPES: readonly string[] = ['messages:send', 'messages:receive'];\n\n/** A form field that ticks a scope: `scope:<scope>`, one field per scope. */\nexport const SCOPE_FIELD_PREFIX = 'scope:';\n\n/** The field a change form sends when it shows the scope rows. */\nexport const SCOPES_SHOWN_FIELD = 'scopesShown';\n\nexport type Changes = { kind: 'changes'; ownerShipId?: string; grant: string[]; revoke: string[] } | { kind: 'refused'; message: string };\n\nexport function changesOf(party: { ownerShipId: string | null; scopes: readonly string[] | null }, sent: { form: Readonly<Record<string, string>>; scopes: readonly string[] }): Changes {\n const { form, scopes } = sent;\n const sentOwner = form.ownerShipId?.trim();\n let ownerShipId: string | undefined;\n if (sentOwner !== undefined && sentOwner !== party.ownerShipId) {\n const parsed = idSchema('ship').safeParse(sentOwner);\n if (!parsed.success) {\n return { kind: 'refused', message: \"The owner's ship id is not a ship id (shp_...)\" };\n }\n ownerShipId = parsed.data;\n }\n const owner = ownerShipId === undefined ? {} : { ownerShipId };\n const held = party.scopes;\n if (form[SCOPES_SHOWN_FIELD] !== 'true' || held === null) {\n return { kind: 'changes', ...owner, grant: [], revoke: [] };\n }\n const own = scopes.filter((scope) => !EVERY_APP_SHIP_SCOPES.includes(scope));\n const isTicked = (scope: string) => form[`${SCOPE_FIELD_PREFIX}${scope}`] !== undefined;\n return {\n kind: 'changes',\n ...owner,\n grant: own.filter((scope) => isTicked(scope) && !held.includes(scope)),\n revoke: own.filter((scope) => !isTicked(scope) && held.includes(scope)),\n };\n}\n"],"names":["IDLE","kind","fieldOf","form","name","value","get","fieldsOf","Object","fromEntries","entries","flatMap","FLEET_FIELD","CARD","BUTTON","BUTTONS","primary","secondary","destructive","INPUT","LABEL","Outcome","state","testId","role","className","message","OwnerField","choices","current","help","refusal","shown","some","choice","shipId","defaultValue","required","disabled","map","SubmitButton","children","pending","status","type","OUTSIDE_PARTIES_PATH","ADD_SERVER_PATH","ADD_A2A_CLIENT_PATH","ADD_A2A_AGENT_PATH","partyPath","action","encodeURIComponent","undefined","EVERY_APP_SHIP_SCOPES","SCOPE_FIELD_PREFIX","SCOPES_SHOWN_FIELD","changesOf","party","sent","scopes","sentOwner","ownerShipId","trim","parsed","idSchema","safeParse","success","data","owner","held","grant","revoke","own","filter","scope","includes","isTicked"],"mappings":"wDAyB2B,cAdI,CAAEC,KAAM,MAAO,eCR9C,IAAMa,EAAS,oGAEFC,EAAU,CACrBC,QAAS,CAAA,EAAGF,EAAO,0DAA0D,CAAC,CAC9EG,UAAW,CAAA,EAAGH,EAAO,6CAA6C,CAAC,CACnEI,YAAa,CAAA,EAAGJ,EAAO,2CAA2C,CAAC,AACrE,qBARoB,mFAYC,yFAEA,sDCZd,SAASO,AAAQ,OAAEC,CAAK,QAAEC,CAAM,CAAyC,EAC9E,OAAQD,EAAMrB,IAAI,EAChB,IAAK,OACH,OAAO,IACT,KAAK,OACH,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEuB,KAAK,SAAS,cAAaD,EAAQE,UAAU,2FAC7CH,EAAMI,OAAO,EAGpB,KAAK,UACL,IAAK,cACH,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEF,KAAK,QAAQ,cAAaD,EAAQE,UAAU,gHAC5CH,EAAMI,OAAO,EAGtB,CACF,gCCrBA,EAAA,EAAA,CAAA,CAAA,kBAiBO,SAAoB,AAAXC,SAAaC,CAAO,CAAEC,SAAO,MAAEC,CAAI,SAAEC,CAAO,CAAgH,EAC1K,IAAMC,EAAoB,OAAZH,GAAoBD,EAAQK,IAAI,CAAC,AAACC,GAAWA,EAAOC,MAAM,GAAKN,EAAQM,MAAM,EAAIP,EAAU,CAACC,KAAYD,EAAQ,CAC9H,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAMH,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,UACN,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAAOA,UAAW,EAAA,CAAK,CAAErB,KAAK,cAAcgC,aAAcP,GAASM,QAAU,GAAIE,QAAQ,CAAA,CAAA,EAAC,cAAY,wBACxF,OAAZR,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAOxB,MAAM,GAAGiC,QAAQ,CAAA,CAAA,WAAC,mBAGxB,KACHN,EAAMO,GAAG,CAAC,AAACL,GACV,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAA2B7B,MAAO6B,EAAOC,MAAM,UAC7CD,EAAO9B,IAAI,EADD8B,EAAOC,MAAM,MAK9B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKV,UAAU,iCAAyBM,GAAWD,MAG1D,gCClCA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,kBAGO,SAAsB,AAAbU,UAAeC,CAAQ,SAAEC,CAAO,MAAEzC,EAAO,SAAS,QAAEsB,CAAM,CAAgF,EACxJ,IAAMoB,EAAS,CAAA,EAAA,EAAA,aAAa,AAAb,IACf,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAOC,KAAK,SAASnB,UAAW,EAAA,CAAO,CAACxB,EAAK,CAAEqC,SAAUK,EAAOD,OAAO,CAAE,YAAWC,EAAOD,OAAO,CAAE,cAAanB,WAC/GoB,EAAOD,OAAO,CAAGA,EAAUD,GAGlC,eCdO,IAAMI,EAAuB,sCAS7B,SAASI,AAAU7C,CAAY,CAAE8C,CAA4B,EAClE,MAAO,CAAA,EAAGL,EAAqB,CAAC,EAAEM,mBAAmB/C,GAAAA,OAAmBgD,IAAXF,EAAuB,GAAK,CAAC,CAAC,EAAEA,EAAAA,CAAQ,CAAA,CAAE,AACzG,0BCAkC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[96001,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(60224),f=a.i(88412),g=a.i(36855),h=a.i(35149),i=a.i(77237),j=a.i(64943),k=a.i(5050);let l=(0,k.createServerReference)("
|
|
1
|
+
module.exports=[96001,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(60224),f=a.i(88412),g=a.i(36855),h=a.i(35149),i=a.i(77237),j=a.i(64943),k=a.i(5050);let l=(0,k.createServerReference)("60c88975f4bb5ea3a94023db35c3a74b321bf1a6c7",k.callServer,void 0,k.findSourceMapURL,"addA2aAgent"),m={kind:"idle"};a.s(["A2aAgentForm",0,function({fleetId:a,requestId:k,owners:n,scopes:o}){let[p,q]=(0,c.useActionState)(l,m),r="refused"===p.kind?p.fields:{};return(0,b.jsxs)("form",{action:q,className:`${f.r} grid gap-3`,"data-testid":"add-a2a-agent-form",children:[(0,b.jsx)("input",{type:"hidden",name:d.H,value:a}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:k}),(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Add an A2A agent"}),(0,b.jsx)(g.f,{state:"refused"===p.kind?p:{kind:"idle"}}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Name, the proxy ship's"}),(0,b.jsx)("input",{className:f.w,name:"name",defaultValue:r.name??"",required:!0})]}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Card address"}),(0,b.jsx)("input",{className:f.w,type:"url",name:"cardUrl",defaultValue:r.cardUrl??"",placeholder:"https://agent.example.com/.well-known/agent-card.json",required:!0}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:"The gateway reads the card first: an agent whose card it cannot state is not added."})]}),(0,b.jsx)(e.f,{legend:"The agent's credential",fields:r,noneHelp:"The gateway sends no credential: for an agent that asks for none."}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Messages in flight at once"}),(0,b.jsx)("input",{className:f.w,type:"number",name:"concurrencyLimit",min:1,max:10,defaultValue:r.concurrencyLimit??"4"})]}),(0,b.jsx)(h.f,{choices:n.isOk?n.value:[],current:null,help:"A person ship or argo. It answers for this agent.",refusal:n.isOk?void 0:n.refusal}),0===o.length?null:(0,b.jsxs)("fieldset",{className:"grid gap-2",children:[(0,b.jsx)("legend",{className:"font-medium",children:"Scopes, beside sending and receiving"}),o.map(a=>(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"checkbox",name:`${j.f}${a}`,defaultChecked:void 0!==r[`${j.f}${a}`]}),(0,b.jsx)("span",{className:"font-mono text-code",children:a})]},a))]}),(0,b.jsx)("div",{children:(0,b.jsx)(i.f,{pending:"Reading the card…",children:"Add"})})]})}],96001)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../web/features/add-a2a-agent/ui/a2a-agent-form.tsx","../../../../../web/features/add-a2a-agent/data%
|
|
1
|
+
{"version":3,"sources":["../../../../../web/features/add-a2a-agent/ui/a2a-agent-form.tsx","../../../../../web/features/add-a2a-agent/data%3A78854d%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { useActionState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { CredentialFields } from '../../forms/ui/credential-fields';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { SCOPE_FIELD_PREFIX } from '../../outside-party/scope-changes';\nimport { addA2aAgent, type AddA2aAgentState } from '../actions';\n\nconst IDLE: AddA2aAgentState = { kind: 'idle' };\n\nconst CONCURRENCY_LIMIT_DEFAULT = '4';\n\n/** The form that adds an A2A agent: its name, card address, credential and calls at once, its owner and the approver's own scopes to tick. */\nexport function A2aAgentForm({ fleetId, requestId, owners, scopes }: { fleetId: string; requestId: string; owners: OwnerChoices; scopes: readonly string[] }) {\n const [state, action] = useActionState(addA2aAgent, IDLE);\n const fields = state.kind === 'refused' ? state.fields : {};\n return (\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-a2a-agent-form\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={requestId} />\n <h1 className=\"text-title font-semibold\">Add an A2A agent</h1>\n <Outcome state={state.kind === 'refused' ? state : { kind: 'idle' }} />\n <label className={LABEL}>\n <span>Name, the proxy ship's</span>\n <input className={INPUT} name=\"name\" defaultValue={fields.name ?? ''} required />\n </label>\n <label className={LABEL}>\n <span>Card address</span>\n <input className={INPUT} type=\"url\" name=\"cardUrl\" defaultValue={fields.cardUrl ?? ''} placeholder=\"https://agent.example.com/.well-known/agent-card.json\" required />\n <span className=\"text-caption text-muted-foreground\">The gateway reads the card first: an agent whose card it cannot state is not added.</span>\n </label>\n <CredentialFields legend=\"The agent's credential\" fields={fields} noneHelp=\"The gateway sends no credential: for an agent that asks for none.\" />\n <label className={LABEL}>\n <span>Messages in flight at once</span>\n <input className={INPUT} type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={fields.concurrencyLimit ?? CONCURRENCY_LIMIT_DEFAULT} />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this agent.\" refusal={owners.isOk ? undefined : owners.refusal} />\n {scopes.length === 0 ? null : (\n <fieldset className=\"grid gap-2\">\n <legend className=\"font-medium\">Scopes, beside sending and receiving</legend>\n {scopes.map((scope) => (\n <label key={scope} className=\"flex items-center gap-2\">\n <input type=\"checkbox\" name={`${SCOPE_FIELD_PREFIX}${scope}`} defaultChecked={fields[`${SCOPE_FIELD_PREFIX}${scope}`] !== undefined} />\n <span className=\"font-mono text-code\">{scope}</span>\n </label>\n ))}\n </fieldset>\n )}\n <div>\n <SubmitButton pending=\"Reading the card…\">Add</SubmitButton>\n </div>\n </form>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"60c88975f4bb5ea3a94023db35c3a74b321bf1a6c7\":{\"name\":\"addA2aAgent\"}},\"web/features/add-a2a-agent/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"60c88975f4bb5ea3a94023db35c3a74b321bf1a6c7\",callServer,void 0,findSourceMapURL,\"addA2aAgent\");export{$$RSC_SERVER_ACTION_0 as addA2aAgent};"],"names":["$$RSC_SERVER_ACTION_0"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[90344,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(25959),e=a.i(30587),f=a.i(88412),g=a.i(36855),h=a.i(35149),i=a.i(77237),j=a.i(48242),k=a.i(64943),l=a.i(5050);let m=(0,l.createServerReference)("
|
|
1
|
+
module.exports=[90344,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(25959),e=a.i(30587),f=a.i(88412),g=a.i(36855),h=a.i(35149),i=a.i(77237),j=a.i(48242),k=a.i(64943),l=a.i(5050);let m=(0,l.createServerReference)("60dd3078cbe91d8ce64f9486f55d78fc458e1a5104",l.callServer,void 0,l.findSourceMapURL,"addA2aClient"),n={kind:"idle"};function o({name:a,bearer:c,fleetId:e}){return(0,b.jsxs)("section",{className:`${f.r} grid gap-3`,"data-testid":"add-a2a-client-added",children:[(0,b.jsxs)("h2",{className:"text-section font-semibold",children:[a," is added"]}),(0,b.jsx)("p",{children:"Hand its client this bearer now. It is shown only once: the gateway keeps no copy it can show again."}),(0,b.jsx)("code",{className:"break-all rounded-md border border-border bg-background px-3 py-2 font-mono text-code","data-testid":"add-a2a-client-bearer",children:c}),(0,b.jsx)("p",{children:(0,b.jsx)("a",{href:(0,d.f)((0,j.N)(a),e),className:"text-primary hover:underline",children:"Its card addresses"})})]})}a.s(["A2aClientForm",0,function({fleetId:a,requestId:d,owners:j,scopes:l}){let[p,q]=(0,c.useActionState)(m,n);return"added"===p.kind?(0,b.jsx)(o,{name:p.name,bearer:p.bearer,fleetId:a}):(0,b.jsxs)("form",{action:q,className:`${f.r} grid gap-3`,"data-testid":"add-a2a-client-form",children:[(0,b.jsx)("input",{type:"hidden",name:e.H,value:a}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:d}),(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Add an A2A client"}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Name, the proxy ship's"}),(0,b.jsx)("input",{className:f.w,name:"name",required:!0})]}),(0,b.jsx)(h.f,{choices:j.isOk?j.value:[],current:null,help:"A person ship or argo. It answers for this client.",refusal:j.isOk?void 0:j.refusal}),0===l.length?null:(0,b.jsxs)("fieldset",{className:"grid gap-2",children:[(0,b.jsx)("legend",{className:"font-medium",children:"Scopes, beside sending and receiving"}),l.map(a=>(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"checkbox",name:`${k.f}${a}`}),(0,b.jsx)("span",{className:"font-mono text-code",children:a})]},a))]}),(0,b.jsx)("div",{children:(0,b.jsx)(i.f,{pending:"Adding…",children:"Add"})}),(0,b.jsx)(g.f,{state:"refused"===p.kind?p:{kind:"idle"}})]})}],90344)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../web/features/add-a2a-client/ui/a2a-client-form.tsx","../../../../../web/features/add-a2a-client/data%
|
|
1
|
+
{"version":3,"sources":["../../../../../web/features/add-a2a-client/ui/a2a-client-form.tsx","../../../../../web/features/add-a2a-client/data%3A4e8df0%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { useActionState } from 'react';\n\nimport { inFleet } from '../../../lib/gateway-api/page-account';\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { partyPath } from '../../outside-parties/paths';\nimport { SCOPE_FIELD_PREFIX } from '../../outside-party/scope-changes';\nimport { addA2aClient, type AddA2aClientState } from '../actions';\n\nconst IDLE: AddA2aClientState = { kind: 'idle' };\n\n/** The bearer, shown this once: the gateway keeps only its hash. */\nfunction Added({ name, bearer, fleetId }: { name: string; bearer: string; fleetId: string }) {\n return (\n <section className={`${CARD} grid gap-3`} data-testid=\"add-a2a-client-added\">\n <h2 className=\"text-section font-semibold\">{name} is added</h2>\n <p>Hand its client this bearer now. It is shown only once: the gateway keeps no copy it can show again.</p>\n <code className=\"break-all rounded-md border border-border bg-background px-3 py-2 font-mono text-code\" data-testid=\"add-a2a-client-bearer\">\n {bearer}\n </code>\n <p>\n <a href={inFleet(partyPath(name), fleetId)} className=\"text-primary hover:underline\">\n Its card addresses\n </a>\n </p>\n </section>\n );\n}\n\n/** The form that adds an A2A client: its name, owner and the approver's own scopes to tick; then its bearer. */\nexport function A2aClientForm({ fleetId, requestId, owners, scopes }: { fleetId: string; requestId: string; owners: OwnerChoices; scopes: readonly string[] }) {\n const [state, action] = useActionState(addA2aClient, IDLE);\n if (state.kind === 'added') {\n return <Added name={state.name} bearer={state.bearer} fleetId={fleetId} />;\n }\n return (\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-a2a-client-form\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={requestId} />\n <h1 className=\"text-title font-semibold\">Add an A2A client</h1>\n <label className={LABEL}>\n <span>Name, the proxy ship's</span>\n <input className={INPUT} name=\"name\" required />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this client.\" refusal={owners.isOk ? undefined : owners.refusal} />\n {scopes.length === 0 ? null : (\n <fieldset className=\"grid gap-2\">\n <legend className=\"font-medium\">Scopes, beside sending and receiving</legend>\n {scopes.map((scope) => (\n <label key={scope} className=\"flex items-center gap-2\">\n <input type=\"checkbox\" name={`${SCOPE_FIELD_PREFIX}${scope}`} />\n <span className=\"font-mono text-code\">{scope}</span>\n </label>\n ))}\n </fieldset>\n )}\n <div>\n <SubmitButton pending=\"Adding…\">Add</SubmitButton>\n </div>\n <Outcome state={state.kind === 'refused' ? state : { kind: 'idle' }} />\n </form>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"60dd3078cbe91d8ce64f9486f55d78fc458e1a5104\":{\"name\":\"addA2aClient\"}},\"web/features/add-a2a-client/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"60dd3078cbe91d8ce64f9486f55d78fc458e1a5104\",callServer,void 0,findSourceMapURL,\"addA2aClient\");export{$$RSC_SERVER_ACTION_0 as addA2aClient};"],"names":["$$RSC_SERVER_ACTION_0"],"mappings":"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"}
|
package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[29372,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(5050);let e=(0,d.createServerReference)("
|
|
1
|
+
module.exports=[29372,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(5050);let e=(0,d.createServerReference)("602f7232a780b82485e56bc404e0b0fb114de00421",d.callServer,void 0,d.findSourceMapURL,"approveServer"),f=(0,d.createServerReference)("600a240e08171e6a68dc94a1876e23000be89b5be6",d.callServer,void 0,d.findSourceMapURL,"checkServer");var g=a.i(30587),h=a.i(51636),i=a.i(60224),j=a.i(88412),k=a.i(77237);let l=["Address","Check","Owner"],m=["Address","Owner","Sign in"];var n=a.i(36855);function o({refusal:a}){return void 0===a?null:(0,b.jsx)(n.f,{state:{kind:"refused",message:a}})}function p({names:a,at:c}){return(0,b.jsx)("ol",{className:"flex gap-4",children:a.map((a,d)=>(0,b.jsxs)("li",{"aria-current":d===c?"step":void 0,className:d<=c?"font-medium":"text-muted-foreground",children:[d+1," ",a]},a))})}function q({state:a,action:d,fleetId:e}){let[f,n]=(0,c.useState)((0,h.G)(a.fields.credentialKind??"")),r=f===h.m.kind;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(p,{names:f===h.m.kind?m:l,at:0}),(0,b.jsxs)("form",{action:d,className:`${j.r} grid gap-3`,"data-testid":"add-server-address",children:[(0,b.jsx)("input",{type:"hidden",name:g.H,value:e}),(0,b.jsx)(o,{refusal:a.refusal}),(0,b.jsxs)("label",{className:j.z,children:[(0,b.jsx)("span",{children:"Streamable HTTP address"}),(0,b.jsx)("input",{className:j.w,type:"url",name:"url",defaultValue:a.fields.url??"",placeholder:"https://mcp.example.com/mcp",required:!0})]}),(0,b.jsx)(i.f,{legend:"The server's credential",fields:a.fields,noneHelp:"The gateway sends no credential: for a server reached only on a private network.",canEachPersonSignIn:!0,onKindChange:n}),(0,b.jsx)("div",{children:(0,b.jsx)(k.f,{pending:r?"Next…":"Checking the server…",testId:"add-server-check",children:r?"Next":"Check the server"})})]})]})}var r=a.i(35149),s=a.i(10020),t=a.i(47763);function u({tool:a,control:c,testId:d}){let{name:e,description:f,isReadOnly:g,isNew:h=!1}=a,i=void 0===f?"":f.split("\n").map(a=>a.trim()).find(a=>""!==a)??"",j=void 0!==f&&f.trim()!==i;return(0,b.jsxs)("li",{className:"grid gap-1 border-b border-border py-2 last:border-b-0","data-testid":d,children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[c,(0,b.jsx)("span",{className:"font-mono",children:e}),g?(0,b.jsx)(t.E,{children:"reads only"}):null,h?(0,b.jsx)(t.T,{tone:"attention",label:"New"}):null]}),""===i?null:j?(0,b.jsxs)("details",{className:"text-muted-foreground",children:[(0,b.jsx)("summary",{className:"cursor-pointer",children:i}),(0,b.jsx)("p",{className:"mt-1 whitespace-pre-line",children:f})]}):(0,b.jsx)("p",{className:"text-muted-foreground",children:i})]})}function v({tools:a,canSwitch:d}){let[e,f]=(0,c.useState)(new Set),g=a.length-e.size;return(0,b.jsxs)("section",{className:"grid gap-2","data-testid":"add-server-tools",children:[(0,b.jsxs)("h2",{className:"flex flex-wrap justify-between gap-2 text-section font-semibold",children:[(0,b.jsxs)("span",{children:["The server answers: ",a.length," ",1===a.length?"tool":"tools"]}),d?(0,b.jsxs)("span",{role:"status",className:"font-normal text-muted-foreground","data-testid":"add-server-tools-on",children:[g," of ",a.length," on"]}):null]}),(0,b.jsx)("p",{className:"text-muted-foreground",children:d?"The fleet may call only the tools switched on. A tool the server adds later starts off.":"Switching tools needs gateway:approve: every tool starts on, and an approver switches them on its page."}),(0,b.jsx)("ul",{className:"grid",children:a.map(a=>{let c=!e.has(a.name);return(0,b.jsx)(u,{tool:a,testId:"add-server-tool",control:d?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("input",{type:"hidden",name:"toolShown",value:a.name}),c?(0,b.jsx)("input",{type:"hidden",name:"toolOn",value:a.name}):null,(0,b.jsx)(s.f,{isOn:c,label:a.name,onClick:()=>{var b;b=a.name,f(a=>{let c=new Set(a);return c.delete(b)||c.add(b),c})}})]}):null},a.name)})})]})}let w=["url","credentialKind","token","clientId","clientSecret","issuer","scope"];function x({state:a,refused:d,action:e,onBack:f,fleetId:h,canSwitchTools:i}){let n,q="refused"===d.kind&&d.requestId===a.requestId,s=q?d.fields:a.fields,t=s.url??"",[u,y]=(0,c.useState)(s.name??function(a){if(!URL.canParse(a))return"";let{hostname:b}=new URL(a);return/^\d+(\.\d+){3}$/.test(b)||b.startsWith("[")?"":(b.split(".").filter(a=>"mcp"!==a&&"www"!==a)[0]??"").toLowerCase().replaceAll(/[^a-z0-9]+/g,"-").replaceAll(/^-+|-+$/g,"")}(t)),z=a.tools;return(0,b.jsxs)(b.Fragment,{children:[null===z?(0,b.jsx)(p,{names:m,at:1}):(0,b.jsx)(p,{names:l,at:2}),(0,b.jsxs)("form",{action:e,className:`${j.r} grid gap-3`,"data-testid":"add-server-owner",children:[null===z?null:(0,b.jsx)(v,{tools:z,canSwitch:i}),(0,b.jsx)("h2",{className:"text-section font-semibold",children:"Its owner"}),(0,b.jsx)(o,{refusal:q?d.message:void 0}),(0,b.jsx)("input",{type:"hidden",name:g.H,value:h}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:a.requestId}),w.map(a=>(0,b.jsx)("input",{type:"hidden",name:a,value:s[a]??""},a)),(0,b.jsx)("p",{className:"font-mono text-muted-foreground",children:t}),(0,b.jsxs)("label",{className:j.z,children:[(0,b.jsx)("span",{children:"Proxy ship's name"}),(0,b.jsx)("input",{className:j.w,type:"text",name:"name",value:u,onChange:a=>{y(a.target.value)},required:!0})]}),(0,b.jsx)(r.f,{choices:a.owners,current:a.owners.find(a=>a.shipId===s.ownerShipId)??null,help:"A person ship or argo. It answers for this server."}),(0,b.jsxs)("label",{className:j.z,children:[(0,b.jsx)("span",{children:"Calls at once"}),(0,b.jsx)("input",{className:j.w,type:"number",name:"concurrencyLimit",min:1,max:10,defaultValue:s.concurrencyLimit??"4"})]}),null===z?(0,b.jsx)("p",{className:"text-muted-foreground",children:"Its tools show once someone signs in."}):null,(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(k.f,{pending:null===z?"Checking the sign-in…":"Adding…",testId:"add-server-approve",children:""===(n=u.trim())?"Add as outside party":n.length>20?`Add ${n.slice(0,20)}…`:`Add ${n}`}),(0,b.jsx)("button",{type:"button",className:j.x.secondary,onClick:f,children:"Back to the address"})]})]})]})}var y=a.i(25959),z=a.i(48242),A=a.i(45006);function B({fleetId:a,name:d}){let[e,f]=(0,c.useActionState)(A.f,g.Q);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(p,{names:m,at:2}),(0,b.jsxs)("form",{action:f,className:`${j.r} grid gap-3`,"data-testid":"add-server-sign-in",children:[(0,b.jsx)(n.f,{state:{kind:"done",message:`${d} is added.`}}),(0,b.jsx)(n.f,{state:e}),(0,b.jsx)("input",{type:"hidden",name:g.H,value:a}),(0,b.jsx)("input",{type:"hidden",name:"name",value:d}),(0,b.jsxs)("p",{children:["Sign in to ",d," for yourself. Its tools show after the first sign-in."]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsxs)(k.f,{pending:`Opening ${d}…`,testId:"add-server-sign-in-start",children:["Sign in to ",d]}),(0,b.jsx)("a",{href:(0,y.f)((0,z.N)(d),a),className:j.x.secondary,children:"Later"})]})]})]})}a.s(["AddServer",0,function({fleetId:a,canSwitchTools:d}){let[g,h]=(0,c.useActionState)(f,{step:"address",fields:{}}),[i,j]=(0,c.useActionState)(e,{kind:"idle"}),[k,l]=(0,c.useState)(void 0),m="owner"===g.step&&k!==g.requestId?g:void 0;return(0,b.jsxs)("div",{className:"grid gap-4",children:[(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Add MCP server"}),"added"===i.kind?(0,b.jsx)(B,{fleetId:a,name:i.name}):void 0===m?(0,b.jsx)(q,{state:g,action:h,fleetId:a}):(0,b.jsx)(x,{state:m,refused:i,action:j,onBack:()=>{l(m.requestId)},fleetId:a,canSwitchTools:d})]})}],29372)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map
|
package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../web/features/add-server/ui/add-server.tsx","../../../../../web/features/add-server/data%3Af67749%20%3Ctext/javascript%3E","../../../../../web/features/add-server/data%3A2a803c%20%3Ctext/javascript%3E","../../../../../web/features/add-server/ui/address-step.tsx","../../../../../web/features/add-server/steps.ts","../../../../../web/features/add-server/ui/refused.tsx","../../../../../web/features/add-server/ui/steps.tsx","../../../../../web/features/add-server/ui/owner-step.tsx","../../../../../web/features/add-server/suggested-name.ts","../../../../../web/features/add-server/ui/tools-section.tsx","../../../../../web/features/add-server/tool-choice.ts","../../../../../web/features/outside-parties/ui/tool-row.tsx","../../../../../web/features/add-server/ui/sign-in-step.tsx"],"sourcesContent":["'use client';\n\nimport { useActionState, useState } from 'react';\n\nimport { approveServer, checkServer } from '../actions';\nimport { AddressStep } from './address-step';\nimport { OwnerStep } from './owner-step';\nimport { SignInStep } from './sign-in-step';\n\n/**\n * Adding an outside MCP server in three steps: its address and credential,\n * the gateway's check of the tools it answers with, then its owner. A server\n * where each person signs in is added unchecked, then the approver signs in\n * to it for themselves (M1, decision 0067). Each button says at once that its\n * step is on its way.\n */\nexport function AddServer({ fleetId, canSwitchTools }: { fleetId: string; canSwitchTools: boolean }) {\n const [checked, check] = useActionState(checkServer, { step: 'address', fields: {} });\n const [approved, approve] = useActionState(approveServer, { kind: 'idle' });\n // Going back shows the address step again, with what was sent, until the next check answers.\n const [backFrom, setBackFrom] = useState<string | undefined>(undefined);\n const owner = checked.step === 'owner' && backFrom !== checked.requestId ? checked : undefined;\n return (\n <div className=\"grid gap-4\">\n <h1 className=\"text-title font-semibold\">Add MCP server</h1>\n {approved.kind === 'added' ? (\n <SignInStep fleetId={fleetId} name={approved.name} />\n ) : owner === undefined ? (\n <AddressStep state={checked} action={check} fleetId={fleetId} />\n ) : (\n <OwnerStep state={owner} refused={approved} action={approve} onBack={() => { setBackFrom(owner.requestId); }} fleetId={fleetId} canSwitchTools={canSwitchTools} />\n )}\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"603c1c8bc58d771628bd6e97e00ea17b677893c09e\":{\"name\":\"approveServer\"}},\"web/features/add-server/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"603c1c8bc58d771628bd6e97e00ea17b677893c09e\",callServer,void 0,findSourceMapURL,\"approveServer\");export{$$RSC_SERVER_ACTION_1 as approveServer};","/* __next_internal_action_entry_do_not_use__ [{\"60d88dd4308d5d5dab2e7b91e11e99a312ec2cffe2\":{\"name\":\"checkServer\"}},\"web/features/add-server/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"60d88dd4308d5d5dab2e7b91e11e99a312ec2cffe2\",callServer,void 0,findSourceMapURL,\"checkServer\");export{$$RSC_SERVER_ACTION_0 as checkServer};","'use client';\n\nimport { useState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { addedCredentialKindOf, SIGN_IN_CREDENTIAL } from '../../forms/server-credential';\nimport { CredentialFields } from '../../forms/ui/credential-fields';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { stepsOf } from '../steps';\nimport { Refused } from './refused';\nimport { Steps } from './steps';\n\n/**\n * The first step: the server's address and its credential, with the check's\n * refusal where it was refused. A server where each person signs in goes on\n * to its owner with Next, unchecked; any other is checked first.\n */\nexport function AddressStep({ state, action, fleetId }: { state: { fields: Readonly<Record<string, string>>; refusal?: string | undefined }; action: (form: FormData) => void; fleetId: string }) {\n const [kind, setKind] = useState(addedCredentialKindOf(state.fields.credentialKind ?? ''));\n const isSignIn = kind === SIGN_IN_CREDENTIAL.kind;\n return (\n <>\n <Steps names={stepsOf(kind)} at={0} />\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-address\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <Refused refusal={state.refusal} />\n <label className={LABEL}>\n <span>Streamable HTTP address</span>\n <input className={INPUT} type=\"url\" name=\"url\" defaultValue={state.fields.url ?? ''} placeholder=\"https://mcp.example.com/mcp\" required />\n </label>\n <CredentialFields legend=\"The server's credential\" fields={state.fields} noneHelp=\"The gateway sends no credential: for a server reached only on a private network.\" canEachPersonSignIn onKindChange={setKind} />\n <div>\n <SubmitButton pending={isSignIn ? 'Next…' : 'Checking the server…'} testId=\"add-server-check\">\n {isSignIn ? 'Next' : 'Check the server'}\n </SubmitButton>\n </div>\n </form>\n </>\n );\n}\n","/**\n * The steps of adding a server, as M1 numbers them. A server where each\n * person signs in has no tools to check before someone signs in, so the\n * gateway checks its sign-in when it is added, and the approver's own sign-in\n * comes last (decision 0067, Q15).\n */\nimport { SIGN_IN_CREDENTIAL, type AddedCredentialKind } from '../forms/server-credential';\n\nexport const CHECKED_STEPS = ['Address', 'Check', 'Owner'] as const;\n\nexport const SIGN_IN_STEPS = ['Address', 'Owner', 'Sign in'] as const;\n\n/** The steps for a server with this credential. */\nexport function stepsOf(kind: AddedCredentialKind): typeof CHECKED_STEPS | typeof SIGN_IN_STEPS {\n return kind === SIGN_IN_CREDENTIAL.kind ? SIGN_IN_STEPS : CHECKED_STEPS;\n}\n","import { Outcome } from '../../forms/ui/outcome';\n\n/** Why the API refused a step, said on that step; nothing while it was not refused. */\nexport function Refused({ refusal }: { refusal: string | undefined }) {\n return refusal === undefined ? null : <Outcome state={{ kind: 'refused', message: refusal }} />;\n}\n","/** The steps of adding a server, as the design numbers them, the one at marked current. */\nexport function Steps({ names, at }: { names: readonly string[]; at: number }) {\n return (\n <ol className=\"flex gap-4\">\n {names.map((step, index) => (\n <li key={step} aria-current={index === at ? 'step' : undefined} className={index <= at ? 'font-medium' : 'text-muted-foreground'}>\n {index + 1} {step}\n </li>\n ))}\n </ol>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { BUTTONS, CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { OwnerField } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport type { AddServerState, ApproveState } from '../actions';\nimport { CHECKED_STEPS, SIGN_IN_STEPS } from '../steps';\nimport { addButtonLabel, suggestedName } from '../suggested-name';\nimport { Refused } from './refused';\nimport { Steps } from './steps';\nimport { ToolsSection } from './tools-section';\n\nconst CONCURRENCY_LIMIT_DEFAULT = '4';\n\n/** The credential fields, carried on from the address step to the owner step. */\nconst CARRIED_FIELDS = ['url', 'credentialKind', 'token', 'clientId', 'clientSecret', 'issuer', 'scope'] as const;\n\n/**\n * The step that names the server's proxy ship and its owner, below the tools\n * the check answered. A server where each person signs in has no tools to\n * show yet: Add checks its sign-in, and says a refusal in place.\n */\nexport function OwnerStep({ state, refused, action, onBack, fleetId, canSwitchTools }: { state: Extract<AddServerState, { step: 'owner' }>; refused: ApproveState; action: (form: FormData) => void; onBack: () => void; fleetId: string; canSwitchTools: boolean }) {\n // A refused approval of this check shows what the browser sent, and why.\n const isRefused = refused.kind === 'refused' && refused.requestId === state.requestId;\n const fields = isRefused ? refused.fields : state.fields;\n const url = fields.url ?? '';\n const [name, setName] = useState(fields.name ?? suggestedName(url));\n const tools = state.tools;\n return (\n <>\n {tools === null ? <Steps names={SIGN_IN_STEPS} at={1} /> : <Steps names={CHECKED_STEPS} at={2} />}\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-owner\">\n {tools === null ? null : <ToolsSection tools={tools} canSwitch={canSwitchTools} />}\n <h2 className=\"text-section font-semibold\">Its owner</h2>\n <Refused refusal={isRefused ? refused.message : undefined} />\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={state.requestId} />\n {CARRIED_FIELDS.map((field) => (\n <input key={field} type=\"hidden\" name={field} value={fields[field] ?? ''} />\n ))}\n <p className=\"font-mono text-muted-foreground\">{url}</p>\n <label className={LABEL}>\n <span>Proxy ship's name</span>\n <input className={INPUT} type=\"text\" name=\"name\" value={name} onChange={(event) => { setName(event.target.value); }} required />\n </label>\n <OwnerField choices={state.owners} current={state.owners.find((owner) => owner.shipId === fields.ownerShipId) ?? null} help=\"A person ship or argo. It answers for this server.\" />\n <label className={LABEL}>\n <span>Calls at once</span>\n <input className={INPUT} type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={fields.concurrencyLimit ?? CONCURRENCY_LIMIT_DEFAULT} />\n </label>\n {tools === null ? <p className=\"text-muted-foreground\">Its tools show once someone signs in.</p> : null}\n <div className=\"flex gap-2\">\n <SubmitButton pending={tools === null ? 'Checking the sign-in…' : 'Adding…'} testId=\"add-server-approve\">\n {addButtonLabel(name)}\n </SubmitButton>\n <button type=\"button\" className={BUTTONS.secondary} onClick={onBack}>\n Back to the address\n </button>\n </div>\n </form>\n </>\n );\n}\n","/** The most characters of the proxy ship's name the add button shows. */\nconst BUTTON_NAME_MAX_LENGTH = 20;\n\n/** A proxy ship's name offered from a server's address: its host's first name that says whose it is; none for an IP address, whose numbers say nothing of it. */\nexport function suggestedName(url: string): string {\n if (!URL.canParse(url)) {\n return '';\n }\n const { hostname } = new URL(url);\n // URL writes every IPv4 host as four numbers, and keeps an IPv6 host in its brackets; the browser runs this too, so no node:net.\n if (/^\\d+(\\.\\d+){3}$/.test(hostname) || hostname.startsWith('[')) {\n return '';\n }\n const labels = hostname.split('.').filter((label) => label !== 'mcp' && label !== 'www');\n return (labels[0] ?? '').toLowerCase().replaceAll(/[^a-z0-9]+/g, '-').replaceAll(/^-+|-+$/g, '');\n}\n\n/** The add button's words: the proxy ship's name as typed, cut at 20 characters, or the plain words while none is typed. */\nexport function addButtonLabel(name: string): string {\n const typed = name.trim();\n if (typed === '') {\n return 'Add as outside party';\n }\n return typed.length > BUTTON_NAME_MAX_LENGTH ? `Add ${typed.slice(0, BUTTON_NAME_MAX_LENGTH)}…` : `Add ${typed}`;\n}\n","'use client';\n\nimport { useState } from 'react';\n\nimport { Switch } from '../../forms/ui/switch';\nimport { ToolRow } from '../../outside-parties/ui/tool-row';\nimport type { CheckedTool } from '../actions';\nimport { TOOL_ON_FIELD, TOOL_SHOWN_FIELD } from '../tool-choice';\n\n/**\n * The tools the check answered, one row each. An approver switches each on\n * or off, all on to start; the fleet may call only those on (aeolus-fleet#1151).\n * Without gateway:approve they show without switches, and every tool starts on.\n */\nexport function ToolsSection({ tools, canSwitch }: { tools: CheckedTool[]; canSwitch: boolean }) {\n const [off, setOff] = useState<ReadonlySet<string>>(new Set());\n const onCount = tools.length - off.size;\n const flip = (name: string) => {\n setOff((current) => {\n const next = new Set(current);\n if (!next.delete(name)) {\n next.add(name);\n }\n return next;\n });\n };\n return (\n <section className=\"grid gap-2\" data-testid=\"add-server-tools\">\n <h2 className=\"flex flex-wrap justify-between gap-2 text-section font-semibold\">\n <span>\n The server answers: {tools.length} {tools.length === 1 ? 'tool' : 'tools'}\n </span>\n {canSwitch ? (\n <span role=\"status\" className=\"font-normal text-muted-foreground\" data-testid=\"add-server-tools-on\">\n {onCount} of {tools.length} on\n </span>\n ) : null}\n </h2>\n <p className=\"text-muted-foreground\">{canSwitch ? 'The fleet may call only the tools switched on. A tool the server adds later starts off.' : 'Switching tools needs gateway:approve: every tool starts on, and an approver switches them on its page.'}</p>\n <ul className=\"grid\">\n {tools.map((tool) => {\n const isOn = !off.has(tool.name);\n return (\n <ToolRow\n key={tool.name}\n tool={tool}\n testId=\"add-server-tool\"\n control={\n canSwitch ? (\n <>\n <input type=\"hidden\" name={TOOL_SHOWN_FIELD} value={tool.name} />\n {isOn ? <input type=\"hidden\" name={TOOL_ON_FIELD} value={tool.name} /> : null}\n <Switch isOn={isOn} label={tool.name} onClick={() => { flip(tool.name); }} />\n </>\n ) : null\n }\n />\n );\n })}\n </ul>\n </section>\n );\n}\n","/**\n * The tools an approver switched when adding a server (aeolus-fleet#1151):\n * each tool the check answered is sent as shown, and the ticked ones as on.\n */\n\n/** The field naming each tool whose switch the form showed. */\nexport const TOOL_SHOWN_FIELD = 'toolShown';\n\n/** The field naming each tool ticked on. */\nexport const TOOL_ON_FIELD = 'toolOn';\n\nfunction namesIn(form: FormData, field: string): string[] {\n return form.getAll(field).filter((value) => typeof value === 'string');\n}\n\n/** Each tool shown, on or off; none when the form showed no switch, so the server keeps every tool on. */\nexport function toolChoiceOf(form: FormData): { name: string; isOn: boolean }[] | undefined {\n const shown = namesIn(form, TOOL_SHOWN_FIELD);\n if (shown.length === 0) {\n return undefined;\n }\n const on = new Set(namesIn(form, TOOL_ON_FIELD));\n return shown.map((name) => ({ name, isOn: on.has(name) }));\n}\n\n/** A description's first line with words, as a tool's row shows it before it is opened. */\nexport function firstLineOf(description: string): string {\n return description.split('\\n').map((line) => line.trim()).find((line) => line !== '') ?? '';\n}\n","import type { ReactNode } from 'react';\n\nimport { firstLineOf } from '../../add-server/tool-choice';\nimport { StatusBadge, Tag } from './status-badge';\n\n/** A tool of an outside MCP server, as its row shows it. */\nexport interface ShownTool {\n name: string;\n description?: string | undefined;\n isReadOnly: boolean;\n isNew?: boolean;\n}\n\n/**\n * One tool in a list an approver scans (aeolus-fleet#1151): its switch, its\n * name, whether the server says it reads only, whether it is new, and its\n * description's first line, the whole description folded open on a click.\n */\nexport function ToolRow({ tool, control, testId }: { tool: ShownTool; control: ReactNode; testId?: string }) {\n const { name, description, isReadOnly, isNew = false } = tool;\n const firstLine = description === undefined ? '' : firstLineOf(description);\n const isFolded = description !== undefined && description.trim() !== firstLine;\n return (\n <li className=\"grid gap-1 border-b border-border py-2 last:border-b-0\" data-testid={testId}>\n <div className=\"flex flex-wrap items-center gap-2\">\n {control}\n <span className=\"font-mono\">{name}</span>\n {isReadOnly ? <Tag>reads only</Tag> : null}\n {isNew ? <StatusBadge tone=\"attention\" label=\"New\" /> : null}\n </div>\n {firstLine === '' ? null : isFolded ? (\n <details className=\"text-muted-foreground\">\n <summary className=\"cursor-pointer\">{firstLine}</summary>\n <p className=\"mt-1 whitespace-pre-line\">{description}</p>\n </details>\n ) : (\n <p className=\"text-muted-foreground\">{firstLine}</p>\n )}\n </li>\n );\n}\n","'use client';\n\nimport { useActionState } from 'react';\n\nimport { FLEET_FIELD, IDLE } from '../../forms/form-state';\nimport { BUTTONS, CARD } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { inFleet } from '../../../lib/gateway-api/page-account';\nimport { partyPath } from '../../outside-parties/paths';\nimport { signInToParty } from '../../outside-party/actions';\nimport { SIGN_IN_STEPS } from '../steps';\nimport { Steps } from './steps';\n\n/**\n * The last step of adding a server where each person signs in: the\n * approver signs in to it for themselves, and their sign-in reads its tools\n * (Q15). Later goes to its page, where they sign in when they choose.\n */\nexport function SignInStep({ fleetId, name }: { fleetId: string; name: string }) {\n const [refused, signIn] = useActionState(signInToParty, IDLE);\n return (\n <>\n <Steps names={SIGN_IN_STEPS} at={2} />\n <form action={signIn} className={`${CARD} grid gap-3`} data-testid=\"add-server-sign-in\">\n <Outcome state={{ kind: 'done', message: `${name} is added.` }} />\n <Outcome state={refused} />\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"name\" value={name} />\n <p>Sign in to {name} for yourself. Its tools show after the first sign-in.</p>\n <div className=\"flex gap-2\">\n <SubmitButton pending={`Opening ${name}…`} testId=\"add-server-sign-in-start\">\n Sign in to {name}\n </SubmitButton>\n <a href={inFleet(partyPath(name), fleetId)} className={BUTTONS.secondary}>\n Later\n </a>\n </div>\n </form>\n </>\n );\n}\n"],"names":["$$RSC_SERVER_ACTION_1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../web/features/add-server/ui/add-server.tsx","../../../../../web/features/add-server/data%3A07f9f0%20%3Ctext/javascript%3E","../../../../../web/features/add-server/data%3A6d8d2a%20%3Ctext/javascript%3E","../../../../../web/features/add-server/ui/address-step.tsx","../../../../../web/features/add-server/steps.ts","../../../../../web/features/add-server/ui/refused.tsx","../../../../../web/features/add-server/ui/steps.tsx","../../../../../web/features/add-server/ui/owner-step.tsx","../../../../../web/features/add-server/suggested-name.ts","../../../../../web/features/add-server/ui/tools-section.tsx","../../../../../web/features/add-server/tool-choice.ts","../../../../../web/features/outside-parties/ui/tool-row.tsx","../../../../../web/features/add-server/ui/sign-in-step.tsx"],"sourcesContent":["'use client';\n\nimport { useActionState, useState } from 'react';\n\nimport { approveServer, checkServer } from '../actions';\nimport { AddressStep } from './address-step';\nimport { OwnerStep } from './owner-step';\nimport { SignInStep } from './sign-in-step';\n\n/**\n * Adding an outside MCP server in three steps: its address and credential,\n * the gateway's check of the tools it answers with, then its owner. A server\n * where each person signs in is added unchecked, then the approver signs in\n * to it for themselves (M1, decision 0067). Each button says at once that its\n * step is on its way.\n */\nexport function AddServer({ fleetId, canSwitchTools }: { fleetId: string; canSwitchTools: boolean }) {\n const [checked, check] = useActionState(checkServer, { step: 'address', fields: {} });\n const [approved, approve] = useActionState(approveServer, { kind: 'idle' });\n // Going back shows the address step again, with what was sent, until the next check answers.\n const [backFrom, setBackFrom] = useState<string | undefined>(undefined);\n const owner = checked.step === 'owner' && backFrom !== checked.requestId ? checked : undefined;\n return (\n <div className=\"grid gap-4\">\n <h1 className=\"text-title font-semibold\">Add MCP server</h1>\n {approved.kind === 'added' ? (\n <SignInStep fleetId={fleetId} name={approved.name} />\n ) : owner === undefined ? (\n <AddressStep state={checked} action={check} fleetId={fleetId} />\n ) : (\n <OwnerStep state={owner} refused={approved} action={approve} onBack={() => { setBackFrom(owner.requestId); }} fleetId={fleetId} canSwitchTools={canSwitchTools} />\n )}\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"602f7232a780b82485e56bc404e0b0fb114de00421\":{\"name\":\"approveServer\"}},\"web/features/add-server/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"602f7232a780b82485e56bc404e0b0fb114de00421\",callServer,void 0,findSourceMapURL,\"approveServer\");export{$$RSC_SERVER_ACTION_1 as approveServer};","/* __next_internal_action_entry_do_not_use__ [{\"600a240e08171e6a68dc94a1876e23000be89b5be6\":{\"name\":\"checkServer\"}},\"web/features/add-server/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"600a240e08171e6a68dc94a1876e23000be89b5be6\",callServer,void 0,findSourceMapURL,\"checkServer\");export{$$RSC_SERVER_ACTION_0 as checkServer};","'use client';\n\nimport { useState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { addedCredentialKindOf, SIGN_IN_CREDENTIAL } from '../../forms/server-credential';\nimport { CredentialFields } from '../../forms/ui/credential-fields';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { stepsOf } from '../steps';\nimport { Refused } from './refused';\nimport { Steps } from './steps';\n\n/**\n * The first step: the server's address and its credential, with the check's\n * refusal where it was refused. A server where each person signs in goes on\n * to its owner with Next, unchecked; any other is checked first.\n */\nexport function AddressStep({ state, action, fleetId }: { state: { fields: Readonly<Record<string, string>>; refusal?: string | undefined }; action: (form: FormData) => void; fleetId: string }) {\n const [kind, setKind] = useState(addedCredentialKindOf(state.fields.credentialKind ?? ''));\n const isSignIn = kind === SIGN_IN_CREDENTIAL.kind;\n return (\n <>\n <Steps names={stepsOf(kind)} at={0} />\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-address\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <Refused refusal={state.refusal} />\n <label className={LABEL}>\n <span>Streamable HTTP address</span>\n <input className={INPUT} type=\"url\" name=\"url\" defaultValue={state.fields.url ?? ''} placeholder=\"https://mcp.example.com/mcp\" required />\n </label>\n <CredentialFields legend=\"The server's credential\" fields={state.fields} noneHelp=\"The gateway sends no credential: for a server reached only on a private network.\" canEachPersonSignIn onKindChange={setKind} />\n <div>\n <SubmitButton pending={isSignIn ? 'Next…' : 'Checking the server…'} testId=\"add-server-check\">\n {isSignIn ? 'Next' : 'Check the server'}\n </SubmitButton>\n </div>\n </form>\n </>\n );\n}\n","/**\n * The steps of adding a server, as M1 numbers them. A server where each\n * person signs in has no tools to check before someone signs in, so the\n * gateway checks its sign-in when it is added, and the approver's own sign-in\n * comes last (decision 0067, Q15).\n */\nimport { SIGN_IN_CREDENTIAL, type AddedCredentialKind } from '../forms/server-credential';\n\nexport const CHECKED_STEPS = ['Address', 'Check', 'Owner'] as const;\n\nexport const SIGN_IN_STEPS = ['Address', 'Owner', 'Sign in'] as const;\n\n/** The steps for a server with this credential. */\nexport function stepsOf(kind: AddedCredentialKind): typeof CHECKED_STEPS | typeof SIGN_IN_STEPS {\n return kind === SIGN_IN_CREDENTIAL.kind ? SIGN_IN_STEPS : CHECKED_STEPS;\n}\n","import { Outcome } from '../../forms/ui/outcome';\n\n/** Why the API refused a step, said on that step; nothing while it was not refused. */\nexport function Refused({ refusal }: { refusal: string | undefined }) {\n return refusal === undefined ? null : <Outcome state={{ kind: 'refused', message: refusal }} />;\n}\n","/** The steps of adding a server, as the design numbers them, the one at marked current. */\nexport function Steps({ names, at }: { names: readonly string[]; at: number }) {\n return (\n <ol className=\"flex gap-4\">\n {names.map((step, index) => (\n <li key={step} aria-current={index === at ? 'step' : undefined} className={index <= at ? 'font-medium' : 'text-muted-foreground'}>\n {index + 1} {step}\n </li>\n ))}\n </ol>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { BUTTONS, CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { OwnerField } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport type { AddServerState, ApproveState } from '../actions';\nimport { CHECKED_STEPS, SIGN_IN_STEPS } from '../steps';\nimport { addButtonLabel, suggestedName } from '../suggested-name';\nimport { Refused } from './refused';\nimport { Steps } from './steps';\nimport { ToolsSection } from './tools-section';\n\nconst CONCURRENCY_LIMIT_DEFAULT = '4';\n\n/** The credential fields, carried on from the address step to the owner step. */\nconst CARRIED_FIELDS = ['url', 'credentialKind', 'token', 'clientId', 'clientSecret', 'issuer', 'scope'] as const;\n\n/**\n * The step that names the server's proxy ship and its owner, below the tools\n * the check answered. A server where each person signs in has no tools to\n * show yet: Add checks its sign-in, and says a refusal in place.\n */\nexport function OwnerStep({ state, refused, action, onBack, fleetId, canSwitchTools }: { state: Extract<AddServerState, { step: 'owner' }>; refused: ApproveState; action: (form: FormData) => void; onBack: () => void; fleetId: string; canSwitchTools: boolean }) {\n // A refused approval of this check shows what the browser sent, and why.\n const isRefused = refused.kind === 'refused' && refused.requestId === state.requestId;\n const fields = isRefused ? refused.fields : state.fields;\n const url = fields.url ?? '';\n const [name, setName] = useState(fields.name ?? suggestedName(url));\n const tools = state.tools;\n return (\n <>\n {tools === null ? <Steps names={SIGN_IN_STEPS} at={1} /> : <Steps names={CHECKED_STEPS} at={2} />}\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-owner\">\n {tools === null ? null : <ToolsSection tools={tools} canSwitch={canSwitchTools} />}\n <h2 className=\"text-section font-semibold\">Its owner</h2>\n <Refused refusal={isRefused ? refused.message : undefined} />\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={state.requestId} />\n {CARRIED_FIELDS.map((field) => (\n <input key={field} type=\"hidden\" name={field} value={fields[field] ?? ''} />\n ))}\n <p className=\"font-mono text-muted-foreground\">{url}</p>\n <label className={LABEL}>\n <span>Proxy ship's name</span>\n <input className={INPUT} type=\"text\" name=\"name\" value={name} onChange={(event) => { setName(event.target.value); }} required />\n </label>\n <OwnerField choices={state.owners} current={state.owners.find((owner) => owner.shipId === fields.ownerShipId) ?? null} help=\"A person ship or argo. It answers for this server.\" />\n <label className={LABEL}>\n <span>Calls at once</span>\n <input className={INPUT} type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={fields.concurrencyLimit ?? CONCURRENCY_LIMIT_DEFAULT} />\n </label>\n {tools === null ? <p className=\"text-muted-foreground\">Its tools show once someone signs in.</p> : null}\n <div className=\"flex gap-2\">\n <SubmitButton pending={tools === null ? 'Checking the sign-in…' : 'Adding…'} testId=\"add-server-approve\">\n {addButtonLabel(name)}\n </SubmitButton>\n <button type=\"button\" className={BUTTONS.secondary} onClick={onBack}>\n Back to the address\n </button>\n </div>\n </form>\n </>\n );\n}\n","/** The most characters of the proxy ship's name the add button shows. */\nconst BUTTON_NAME_MAX_LENGTH = 20;\n\n/** A proxy ship's name offered from a server's address: its host's first name that says whose it is; none for an IP address, whose numbers say nothing of it. */\nexport function suggestedName(url: string): string {\n if (!URL.canParse(url)) {\n return '';\n }\n const { hostname } = new URL(url);\n // URL writes every IPv4 host as four numbers, and keeps an IPv6 host in its brackets; the browser runs this too, so no node:net.\n if (/^\\d+(\\.\\d+){3}$/.test(hostname) || hostname.startsWith('[')) {\n return '';\n }\n const labels = hostname.split('.').filter((label) => label !== 'mcp' && label !== 'www');\n return (labels[0] ?? '').toLowerCase().replaceAll(/[^a-z0-9]+/g, '-').replaceAll(/^-+|-+$/g, '');\n}\n\n/** The add button's words: the proxy ship's name as typed, cut at 20 characters, or the plain words while none is typed. */\nexport function addButtonLabel(name: string): string {\n const typed = name.trim();\n if (typed === '') {\n return 'Add as outside party';\n }\n return typed.length > BUTTON_NAME_MAX_LENGTH ? `Add ${typed.slice(0, BUTTON_NAME_MAX_LENGTH)}…` : `Add ${typed}`;\n}\n","'use client';\n\nimport { useState } from 'react';\n\nimport { Switch } from '../../forms/ui/switch';\nimport { ToolRow } from '../../outside-parties/ui/tool-row';\nimport type { CheckedTool } from '../actions';\nimport { TOOL_ON_FIELD, TOOL_SHOWN_FIELD } from '../tool-choice';\n\n/**\n * The tools the check answered, one row each. An approver switches each on\n * or off, all on to start; the fleet may call only those on (aeolus-fleet#1151).\n * Without gateway:approve they show without switches, and every tool starts on.\n */\nexport function ToolsSection({ tools, canSwitch }: { tools: CheckedTool[]; canSwitch: boolean }) {\n const [off, setOff] = useState<ReadonlySet<string>>(new Set());\n const onCount = tools.length - off.size;\n const flip = (name: string) => {\n setOff((current) => {\n const next = new Set(current);\n if (!next.delete(name)) {\n next.add(name);\n }\n return next;\n });\n };\n return (\n <section className=\"grid gap-2\" data-testid=\"add-server-tools\">\n <h2 className=\"flex flex-wrap justify-between gap-2 text-section font-semibold\">\n <span>\n The server answers: {tools.length} {tools.length === 1 ? 'tool' : 'tools'}\n </span>\n {canSwitch ? (\n <span role=\"status\" className=\"font-normal text-muted-foreground\" data-testid=\"add-server-tools-on\">\n {onCount} of {tools.length} on\n </span>\n ) : null}\n </h2>\n <p className=\"text-muted-foreground\">{canSwitch ? 'The fleet may call only the tools switched on. A tool the server adds later starts off.' : 'Switching tools needs gateway:approve: every tool starts on, and an approver switches them on its page.'}</p>\n <ul className=\"grid\">\n {tools.map((tool) => {\n const isOn = !off.has(tool.name);\n return (\n <ToolRow\n key={tool.name}\n tool={tool}\n testId=\"add-server-tool\"\n control={\n canSwitch ? (\n <>\n <input type=\"hidden\" name={TOOL_SHOWN_FIELD} value={tool.name} />\n {isOn ? <input type=\"hidden\" name={TOOL_ON_FIELD} value={tool.name} /> : null}\n <Switch isOn={isOn} label={tool.name} onClick={() => { flip(tool.name); }} />\n </>\n ) : null\n }\n />\n );\n })}\n </ul>\n </section>\n );\n}\n","/**\n * The tools an approver switched when adding a server (aeolus-fleet#1151):\n * each tool the check answered is sent as shown, and the ticked ones as on.\n */\n\n/** The field naming each tool whose switch the form showed. */\nexport const TOOL_SHOWN_FIELD = 'toolShown';\n\n/** The field naming each tool ticked on. */\nexport const TOOL_ON_FIELD = 'toolOn';\n\nfunction namesIn(form: FormData, field: string): string[] {\n return form.getAll(field).filter((value) => typeof value === 'string');\n}\n\n/** Each tool shown, on or off; none when the form showed no switch, so the server keeps every tool on. */\nexport function toolChoiceOf(form: FormData): { name: string; isOn: boolean }[] | undefined {\n const shown = namesIn(form, TOOL_SHOWN_FIELD);\n if (shown.length === 0) {\n return undefined;\n }\n const on = new Set(namesIn(form, TOOL_ON_FIELD));\n return shown.map((name) => ({ name, isOn: on.has(name) }));\n}\n\n/** A description's first line with words, as a tool's row shows it before it is opened. */\nexport function firstLineOf(description: string): string {\n return description.split('\\n').map((line) => line.trim()).find((line) => line !== '') ?? '';\n}\n","import type { ReactNode } from 'react';\n\nimport { firstLineOf } from '../../add-server/tool-choice';\nimport { StatusBadge, Tag } from './status-badge';\n\n/** A tool of an outside MCP server, as its row shows it. */\nexport interface ShownTool {\n name: string;\n description?: string | undefined;\n isReadOnly: boolean;\n isNew?: boolean;\n}\n\n/**\n * One tool in a list an approver scans (aeolus-fleet#1151): its switch, its\n * name, whether the server says it reads only, whether it is new, and its\n * description's first line, the whole description folded open on a click.\n */\nexport function ToolRow({ tool, control, testId }: { tool: ShownTool; control: ReactNode; testId?: string }) {\n const { name, description, isReadOnly, isNew = false } = tool;\n const firstLine = description === undefined ? '' : firstLineOf(description);\n const isFolded = description !== undefined && description.trim() !== firstLine;\n return (\n <li className=\"grid gap-1 border-b border-border py-2 last:border-b-0\" data-testid={testId}>\n <div className=\"flex flex-wrap items-center gap-2\">\n {control}\n <span className=\"font-mono\">{name}</span>\n {isReadOnly ? <Tag>reads only</Tag> : null}\n {isNew ? <StatusBadge tone=\"attention\" label=\"New\" /> : null}\n </div>\n {firstLine === '' ? null : isFolded ? (\n <details className=\"text-muted-foreground\">\n <summary className=\"cursor-pointer\">{firstLine}</summary>\n <p className=\"mt-1 whitespace-pre-line\">{description}</p>\n </details>\n ) : (\n <p className=\"text-muted-foreground\">{firstLine}</p>\n )}\n </li>\n );\n}\n","'use client';\n\nimport { useActionState } from 'react';\n\nimport { FLEET_FIELD, IDLE } from '../../forms/form-state';\nimport { BUTTONS, CARD } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { inFleet } from '../../../lib/gateway-api/page-account';\nimport { partyPath } from '../../outside-parties/paths';\nimport { signInToParty } from '../../outside-party/actions';\nimport { SIGN_IN_STEPS } from '../steps';\nimport { Steps } from './steps';\n\n/**\n * The last step of adding a server where each person signs in: the\n * approver signs in to it for themselves, and their sign-in reads its tools\n * (Q15). Later goes to its page, where they sign in when they choose.\n */\nexport function SignInStep({ fleetId, name }: { fleetId: string; name: string }) {\n const [refused, signIn] = useActionState(signInToParty, IDLE);\n return (\n <>\n <Steps names={SIGN_IN_STEPS} at={2} />\n <form action={signIn} className={`${CARD} grid gap-3`} data-testid=\"add-server-sign-in\">\n <Outcome state={{ kind: 'done', message: `${name} is added.` }} />\n <Outcome state={refused} />\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"name\" value={name} />\n <p>Sign in to {name} for yourself. Its tools show after the first sign-in.</p>\n <div className=\"flex gap-2\">\n <SubmitButton pending={`Opening ${name}…`} testId=\"add-server-sign-in-start\">\n Sign in to {name}\n </SubmitButton>\n <a href={inFleet(partyPath(name), fleetId)} className={BUTTONS.secondary}>\n Later\n </a>\n </div>\n </form>\n </>\n );\n}\n"],"names":["$$RSC_SERVER_ACTION_1"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
(()=>{"use strict";module.exports=[25335,48298,a=>{var b=a.i(5050);let c=(0,b.createServerReference)("402437ac0c9d46fa502dabec5228a952d7b3b27ed1",b.callServer,void 0,b.findSourceMapURL,"turnRoute");a.s(["f",0,c],25335);var d=a.i(83900),e=a.i(2550),f=a.i(9809),g=a.i(37149),h=a.i(62591),i=a.i(64831);let j={name:"message-circle-question-mark",size:24,node:[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],aliases:["message-circle-question"]};j.node;let k=(0,i.f)(j);var l=a.i(98238),m=a.i(86708);let n={decide:{Icon:e.f,tone:"text-tone-active-fg"},do:{Icon:f.f,tone:"text-tone-waiting-fg"},"stay-aware":{Icon:d.f,tone:"text-muted-foreground"},"everything-else":{Icon:k,tone:"text-muted-foreground"}},o=l.f,p={slack:g.f,chat:m.f,"web-push":d.f,email:h.f};a.s(["x",0,o,"c",0,n,"U",0,p],48298)},43801,a=>{var b=a.i(87924),c=a.i(72131),d=a.i(25335),e=a.i(5050);let f=(0,e.createServerReference)("407f924129760376461b283c0cb9547e08664ae1bb",e.callServer,void 0,e.findSourceMapURL,"unlinkSlack"),g=[[/Edg\//,"Edge"],[/Firefox\//,"Firefox"],[/Chrome\//,"Chrome"],[/Safari\//,"Safari"]],h=[[/iPhone|iPad/,"iOS"],[/Android/,"Android"],[/Mac OS X/,"macOS"],[/Windows/,"Windows"],[/Linux/,"Linux"]],i=(a,b)=>b.find(([b])=>b.test(a))?.[1],j=(0,e.createServerReference)("6004464d6d01803499a8638865f39d917b29db7cf2",e.callServer,void 0,e.findSourceMapURL,"turnOffWebPush"),k=(0,e.createServerReference)("60d16eee56d2a7c0d1b7a0da4bfe794349c6e4a56f",e.callServer,void 0,e.findSourceMapURL,"turnOnWebPush"),l="/wake-worker.js";async function m(){let a=await navigator.serviceWorker.getRegistration(l);return await a?.pushManager.getSubscription()??null}async function n(a){let b;if(await Notification.requestPermission()!=="granted")return{isOk:!1,message:"Your browser did not allow notifications from this site: allow them, then turn web push on again"};let c=await navigator.serviceWorker.register(l);return await navigator.serviceWorker.ready,{isOk:!0,value:await c.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:(b=atob(a.replaceAll("-","+").replaceAll("_","/")),Uint8Array.from(b,a=>a.charCodeAt(0)))})}}var o=a.i(99306),p=a.i(32043),q=a.i(10039),r=a.i(97024),s=a.i(64831);let t={name:"circle-pause",size:24,node:[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"10",x2:"10",y1:"15",y2:"9",key:"c1nkhi"}],["line",{x1:"14",x2:"14",y1:"15",y2:"9",key:"h65svq"}]],aliases:["pause-circle"]};t.node;let u=(0,s.f)(t);function v({place:a,name:c,Icon:d,card:e,children:f}){let g=e.state.isOk?r.f:u;return(0,b.jsxs)("div",{"data-testid":`bridge-place-${a}`,className:"flex flex-col gap-1.5 rounded-lg border border-border bg-card px-3 py-2.5",children:[(0,b.jsxs)("span",{className:"flex items-center gap-2 font-medium",children:[(0,b.jsx)(d,{"aria-hidden":!0,className:"size-4 shrink-0"}),c,(0,b.jsxs)("span",{"data-testid":`bridge-place-${a}-state`,className:`ml-auto inline-flex items-center gap-1 text-caption font-medium ${e.state.isOk?"text-tone-ok-fg":"text-muted-foreground"}`,children:[(0,b.jsx)(g,{"aria-hidden":!0,className:"size-3.5"}),e.state.label]})]}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:e.description}),void 0===f?null:(0,b.jsx)("span",{className:"mt-auto flex flex-col items-start gap-1.5",children:f})]})}var w=a.i(48298);function x({fleetId:a,slackLink:d}){let[e,g]=(0,c.useTransition)(),[h,i]=(0,c.useState)(),j=(0,o.H)(d);return(0,b.jsxs)(v,{place:"slack",name:o.k.slack,Icon:w.U.slack,card:j,children:["link"===j.action?(0,b.jsx)("a",{href:`/slack/link?${new URLSearchParams({fleet:a}).toString()}`,"data-testid":"bridge-slack-link",className:"inline-flex h-7 items-center rounded-md bg-primary px-2.5 text-caption font-medium text-primary-foreground hover:bg-primary-hover",children:"Link Slack"}):null,"unlink"===j.action?(0,b.jsx)(p.i,{size:"xs","data-testid":"bridge-slack-unlink",isPending:e,pendingLabel:"Unlinking...",onClick:()=>{i(void 0),g(async()=>{let b=await f(a);b.isOk||i(b.message)})},children:"Unlink"}):null,void 0===h?null:(0,b.jsx)(q.f,{message:h,isFailure:!0})]})}function y({fleetId:a,webPush:d}){let e=d?.browsers??[],{isTaken:f,ownEndpoint:l,working:r,failure:s,turnOn:t,remove:u}=function({fleetId:a,webPushKey:b}){let[d,e]=(0,c.useState)(!0),[f,l]=(0,c.useState)(),[o,p]=(0,c.useState)(),[q,r]=(0,c.useState)(),[,s]=(0,c.useTransition)();return(0,c.useEffect)(()=>{"serviceWorker"in navigator&&"PushManager"in window&&"Notification"in window?m().then(a=>{l(a?.endpoint)}):e(!1)},[]),{isTaken:d,ownEndpoint:f,working:o,failure:q,turnOn:()=>{null!==b&&(p("on"),r(void 0),s(async()=>{try{var c;let d,e,f=await n(b);if(!f.isOk)return void r(f.message);let j=function(a,b){let{endpoint:c,keys:d}=a,e=d?.p256dh,f=d?.auth;return void 0===c||void 0===e||void 0===f?void 0:{endpoint:c,keys:{p256dh:e,auth:f},browser:b}}(f.value.toJSON(),(c=navigator.userAgent,d=i(c,g),e=i(c,h),void 0===d?"A browser":void 0===e?d:`${d} on ${e}`));if(void 0===j)return void r("Your browser gave no push subscription: try again");let m=await k(a,j);m.isOk?l(j.endpoint):r(m.message)}catch{r("Your browser could not turn web push on: try again")}finally{p(void 0)}}))},remove:b=>{p(b),r(void 0),s(async()=>{b===f&&(await (await m())?.unsubscribe(),l(void 0));let c=await j(a,b);p(void 0),c.isOk||r(c.message)})}}}({fleetId:a,webPushKey:d?.publicKey??null}),x=(0,o.B)({isOffered:void 0!==d&&null!==d.publicKey,isTaken:f,ownEndpoint:l,browsers:e}),z=e.filter(({endpoint:a})=>"remove"!==x.action||a!==l);return(0,b.jsxs)(v,{place:"web-push",name:o.k["web-push"],Icon:w.U["web-push"],card:x,children:["remove"===x.action&&void 0!==l?(0,b.jsx)(p.i,{size:"xs","data-testid":"bridge-web-push-remove",isPending:r===l,pendingLabel:"Removing...",disabled:void 0!==r,onClick:()=>{u(l)},children:"Remove"}):null,"turnOn"===x.action?(0,b.jsx)(p.i,{size:"xs","data-testid":"bridge-web-push-on",isPending:"on"===r,pendingLabel:"Turning on...",disabled:void 0!==r,onClick:t,children:"Turn on"}):null,z.map(({endpoint:a,browser:c,isGone:d})=>(0,b.jsxs)("span",{"data-testid":"bridge-web-push-browser",className:"flex w-full items-center gap-2 text-caption text-muted-foreground",children:[(0,b.jsx)("span",{className:"min-w-0 flex-1",children:d?`${c}: no longer takes wakes`:`Also on in ${c}`}),(0,b.jsx)("button",{type:"button","data-testid":"bridge-web-push-remove-other",disabled:void 0!==r,onClick:()=>{u(a)},className:"underline hover:text-foreground disabled:opacity-50",children:r===a?"Removing...":"Remove"})]},a)),void 0===s?null:(0,b.jsx)(q.f,{message:s,isFailure:!0})]})}function z({fleetId:a,routing:e}){let[f,g]=(0,c.useTransition)(),[h,i]=(0,c.useState)(),j=(0,o.t)({isOffered:e.offered.email,isOnForAnyJob:e.jobs.some(({places:a})=>a.email)});return(0,b.jsxs)(v,{place:"email",name:o.k.email,Icon:w.U.email,card:j,children:["turnOn"===j.action||"turnOff"===j.action?(0,b.jsx)(p.i,{size:"xs","data-testid":"bridge-email-turn",isPending:f,pendingLabel:"turnOn"===j.action?"Turning on...":"Turning off...",onClick:()=>{var b;b="turnOn"===j.action,i(void 0),g(async()=>{for(let c of(0,o.T)(e,b)){let b=await (0,d.f)({fleet:a,...c});if(!b.isOk)return void i(b.message)}})},children:"turnOn"===j.action?"Turn on":"Turn off"}):null,void 0===h?null:(0,b.jsx)(q.f,{message:h,isFailure:!0})]})}a.s(["PlacesPanel",0,function({fleetId:a,routing:c,slackLink:d,chats:e,webPush:f}){return(0,b.jsxs)("section",{"aria-label":"The places",className:"grid gap-2.5 sm:grid-cols-2 lg:grid-cols-4",children:[(0,b.jsx)(x,{fleetId:a,slackLink:d}),(0,b.jsx)(v,{place:"chat",name:o.k.chat,Icon:w.U.chat,card:(0,o.g)(e)}),(0,b.jsx)(y,{fleetId:a,webPush:f}),(0,b.jsx)(z,{fleetId:a,routing:c})]})}],43801)},87952,a=>{var b=a.i(87924),c=a.i(97024),d=a.i(72131),e=a.i(25335),f=a.i(99306),g=a.i(10039),h=a.i(48298);function i({isOn:a,label:c,isDisabled:d,isBusy:e=!1,aside:f,testId:g,onTurn:h}){return(0,b.jsxs)("span",{className:"inline-flex items-center gap-2.5",children:[(0,b.jsx)("button",{type:"button",role:"switch","aria-checked":a,"aria-label":c,"aria-busy":e,disabled:d,"data-testid":g,onClick:h,className:"group inline-flex h-4 w-7 shrink-0 items-center rounded-full bg-input p-0.5 aria-checked:bg-primary disabled:cursor-not-allowed disabled:opacity-50",children:(0,b.jsx)("span",{"aria-hidden":!0,className:"size-3 rounded-full bg-card shadow-sm transition-transform group-aria-checked:translate-x-3"})}),void 0===f?null:(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:f})]})}let j="sm:grid sm:grid-cols-[1.6fr_repeat(5,1fr)] sm:items-center sm:gap-3";function k({toast:a}){return(0,b.jsxs)("div",{role:"status","data-testid":"bridge-routing-toast",className:"flex max-w-[720px] gap-3 rounded-lg border border-border bg-popover py-3.5 pr-3.5 pl-4 text-popover-foreground shadow-lg",children:[(0,b.jsx)(c.f,{"aria-hidden":!0,className:"mt-0.5 size-4 shrink-0 text-tone-ok-fg"}),(0,b.jsxs)("span",{className:"flex min-w-0 flex-1 flex-col gap-1",children:[(0,b.jsx)("span",{className:"font-medium",children:a.title}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:a.detail})]})]})}function l({name:a,children:c}){return(0,b.jsxs)("span",{className:"flex items-center justify-between sm:block",children:[(0,b.jsx)("span",{className:"sm:hidden",children:a}),c]})}a.s(["RoutingPanel",0,function({fleetId:a,routing:c,isSlackLinked:m,waitingByJob:n}){let[o,p]=(0,d.useTransition)(),[q,r]=(0,d.useState)(),[s,t]=(0,d.useState)(),[u,v]=(0,d.useState)();return(0,b.jsxs)("section",{className:"grid gap-3","aria-label":"Per job",children:[(0,b.jsxs)("div",{className:"grid gap-3 sm:gap-0 sm:overflow-hidden sm:rounded-lg sm:border sm:border-border sm:bg-card",children:[(0,b.jsxs)("div",{"aria-hidden":!0,className:`hidden min-h-8 bg-muted px-4 text-caption font-medium text-muted-foreground ${j}`,children:[(0,b.jsx)("span",{children:"Job"}),(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,b.jsx)(h.x,{className:"size-3.5"}),"Bridge"]}),f.N.map(a=>{let c=h.U[a];return(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,b.jsx)(c,{className:"size-3.5"}),f.k[a]]},a)})]}),c.jobs.map(({job:d,places:g})=>{let{Icon:k,tone:s}=h.c[d];return(0,b.jsxs)("div",{"data-testid":"bridge-routing-job",className:`flex flex-col gap-2 rounded-lg border border-border bg-card p-3 sm:min-h-[52px] sm:rounded-none sm:border-0 sm:border-t sm:px-4 sm:py-1.5 ${j}`,children:[(0,b.jsxs)("span",{className:"flex flex-col gap-0.5",children:[(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 font-semibold sm:font-medium",children:[(0,b.jsx)(k,{"aria-hidden":!0,className:`size-4 shrink-0 ${s}`}),f.I[d].name]}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground max-sm:hidden",children:f.I[d].holds})]}),(0,b.jsx)(l,{name:"Bridge",children:(0,b.jsx)(i,{isOn:!0,label:`Bridge for ${f.I[d].name}`,isDisabled:!0,aside:"Always",testId:`bridge-routing-${d}-bridge`})}),f.N.map(h=>{let j=g[h],k=`${d}-${h}`;return(0,b.jsx)(l,{name:f.k[h],children:(0,b.jsx)(i,{isOn:j,label:`${f.k[h]} for ${f.I[d].name}`,isDisabled:o||!j&&(!c.offered[h]||"slack"===h&&!m),isBusy:o&&q===k,..."everything-else"===d&&"slack"===h&&!j?{aside:"Bots only"}:{},testId:`bridge-routing-${k}`,onTurn:()=>{var b;b={job:d,place:h,isOn:!j,isChatOn:g.chat},t(void 0),v(void 0),r(`${b.job}-${b.place}`),p(async()=>{let{isChatOn:c,...d}=b,g=await (0,e.f)({fleet:a,...d});g.isOk?t((0,f.b)({...d,waiting:n[d.job],isChatOn:c})):v(g.message)})}})},h)})]},d)})]}),void 0===s?null:(0,b.jsx)(k,{toast:s}),void 0===u?null:(0,b.jsx)(g.f,{message:u,isFailure:!0}),(0,b.jsx)("p",{className:"text-caption text-muted-foreground max-sm:hidden",children:"While a Bridge page is open in focus, web push and email do not wake you. Slack still posts: you turned it on, and the views stay in step."})]})}],87952)}]})();
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=web_features_bridge_0w95y19yk5w14._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../web/features/bridge/ui/place-icons.tsx","../../../../../web/features/bridge/hooks/data%3A2f3335%20%3Ctext/javascript%3E","../../../../../node_modules/lucide-react/src/icons/message-circle-question-mark.ts","../../../../../web/features/bridge/hooks/data%3Af81039%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/data%3Ae31610%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/data%3A93bb16%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/use-web-push.ts","../../../../../web/features/bridge/ui/place-card.tsx","../../../../../web/features/bridge/state/places-panel.tsx","../../../../../web/features/bridge/hooks/slack-link-path.ts","../../../../../node_modules/lucide-react/src/icons/circle-pause.ts","../../../../../web/features/bridge/services/web-push.ts","../../../../../web/features/bridge/state/routing-panel.tsx","../../../../../web/features/bridge/ui/routing-switch.tsx"],"sourcesContent":["import { Bell, CircleQuestionMark, Hand, Hash, Mail, MessageCircleQuestionMark, Ship, Sparkles, type LucideIcon } from 'lucide-react';\n\nimport type { RoutedJob, RoutedPlace } from '../services/routing';\n\n/** Each job's icon in its tone, as the routing mockup draws it: Decide active, Do waiting, the others muted. */\nexport const JOB_ICONS: Readonly<Record<RoutedJob, { readonly Icon: LucideIcon; readonly tone: string }>> = {\n decide: { Icon: CircleQuestionMark, tone: 'text-tone-active-fg' },\n do: { Icon: Hand, tone: 'text-tone-waiting-fg' },\n 'stay-aware': { Icon: Bell, tone: 'text-muted-foreground' },\n 'everything-else': { Icon: MessageCircleQuestionMark, tone: 'text-muted-foreground' },\n};\n\n/** Bridge's icon, the mark of the sidebar. */\nexport const BRIDGE_ICON: LucideIcon = Ship;\n\n/** Each place's icon, as the routing mockup draws it. */\nexport const PLACE_ICONS: Readonly<Record<RoutedPlace, LucideIcon>> = { slack: Hash, chat: Sparkles, 'web-push': Bell, email: Mail };\n","/* __next_internal_action_entry_do_not_use__ [{\"402437ac0c9d46fa502dabec5228a952d7b3b27ed1\":{\"name\":\"turnRoute\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_10=/*#__PURE__*/createServerReference(\"402437ac0c9d46fa502dabec5228a952d7b3b27ed1\",callServer,void 0,findSourceMapURL,\"turnRoute\");export{$$RSC_SERVER_ACTION_10 as turnRoute};","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'message-circle-question-mark',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719',\n key: '1sd12s',\n },\n ],\n ['path', { d: 'M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3', key: '1u773s' }],\n ['path', { d: 'M12 17h.01', key: 'p32p05' }],\n ],\n aliases: ['message-circle-question'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name MessageCircleQuestionMark\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/message-circle-question-mark\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MessageCircleQuestionMark = createLucideIcon(__iconData);\n\nexport default MessageCircleQuestionMark;\n","/* __next_internal_action_entry_do_not_use__ [{\"6004464d6d01803499a8638865f39d917b29db7cf2\":{\"name\":\"turnOffWebPush\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_12=/*#__PURE__*/createServerReference(\"6004464d6d01803499a8638865f39d917b29db7cf2\",callServer,void 0,findSourceMapURL,\"turnOffWebPush\");export{$$RSC_SERVER_ACTION_12 as turnOffWebPush};","/* __next_internal_action_entry_do_not_use__ [{\"60d16eee56d2a7c0d1b7a0da4bfe794349c6e4a56f\":{\"name\":\"turnOnWebPush\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_11=/*#__PURE__*/createServerReference(\"60d16eee56d2a7c0d1b7a0da4bfe794349c6e4a56f\",callServer,void 0,findSourceMapURL,\"turnOnWebPush\");export{$$RSC_SERVER_ACTION_11 as turnOnWebPush};","/* __next_internal_action_entry_do_not_use__ [{\"407f924129760376461b283c0cb9547e08664ae1bb\":{\"name\":\"unlinkSlack\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_13=/*#__PURE__*/createServerReference(\"407f924129760376461b283c0cb9547e08664ae1bb\",callServer,void 0,findSourceMapURL,\"unlinkSlack\");export{$$RSC_SERVER_ACTION_13 as unlinkSlack};","'use client';\n\nimport { useEffect, useState, useTransition } from 'react';\n\nimport type { WakeChannels } from '../services/deliveries';\nimport { applicationServerKeyOf, browserNameOf, subscriptionInputOf } from '../services/web-push';\nimport { turnOffWebPush, turnOnWebPush } from './bridge-actions';\n\n/** The service worker that shows a wake and opens Bridge when it is pressed. */\nconst WORKER_PATH = '/wake-worker.js';\n\n/** Whether this browser takes web push at all. */\nfunction isPushTaken(): boolean {\n return 'serviceWorker' in navigator && 'PushManager' in window && 'Notification' in window;\n}\n\n/** This browser's own push subscription with the gateway's worker, if it has one. */\nasync function ownSubscription(): Promise<PushSubscription | null> {\n const registration = await navigator.serviceWorker.getRegistration(WORKER_PATH);\n return (await registration?.pushManager.getSubscription()) ?? null;\n}\n\n/** Asks the browser's permission, then subscribes it with the gateway's key: the subscription to send, or why there is none. */\nasync function subscribed(webPushKey: string): Promise<{ readonly isOk: true; readonly value: PushSubscription } | { readonly isOk: false; readonly message: string }> {\n if ((await Notification.requestPermission()) !== 'granted') {\n return { isOk: false, message: 'Your browser did not allow notifications from this site: allow them, then turn web push on again' };\n }\n const registration = await navigator.serviceWorker.register(WORKER_PATH);\n await navigator.serviceWorker.ready;\n return { isOk: true, value: await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: applicationServerKeyOf(webPushKey) }) };\n}\n\n/**\n * Web push in this browser (wake a person, W8): whether it takes web push,\n * its own subscription, turning it on, which asks the browser's permission\n * first, and removing a browser, this one or another.\n */\nexport function useWebPush({ fleetId, webPushKey }: { fleetId: string; webPushKey: string | null }) {\n const [isTaken, setIsTaken] = useState(true);\n const [ownEndpoint, setOwnEndpoint] = useState<string | undefined>();\n const [working, setWorking] = useState<string | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n\n useEffect(() => {\n if (!isPushTaken()) {\n setIsTaken(false);\n return;\n }\n void ownSubscription().then((own) => {\n setOwnEndpoint(own?.endpoint);\n });\n }, []);\n\n const turnOn = () => {\n if (webPushKey === null) {\n return;\n }\n setWorking('on');\n setFailure(undefined);\n startTransition(async () => {\n try {\n const subscription = await subscribed(webPushKey);\n if (!subscription.isOk) {\n setFailure(subscription.message);\n return;\n }\n const input = subscriptionInputOf(subscription.value.toJSON(), browserNameOf(navigator.userAgent));\n if (input === undefined) {\n setFailure('Your browser gave no push subscription: try again');\n return;\n }\n const outcome = await turnOnWebPush(fleetId, input);\n if (outcome.isOk) {\n setOwnEndpoint(input.endpoint);\n } else {\n setFailure(outcome.message);\n }\n } catch {\n setFailure('Your browser could not turn web push on: try again');\n } finally {\n setWorking(undefined);\n }\n });\n };\n\n const remove = (endpoint: string) => {\n setWorking(endpoint);\n setFailure(undefined);\n startTransition(async () => {\n if (endpoint === ownEndpoint) {\n await (await ownSubscription())?.unsubscribe();\n setOwnEndpoint(undefined);\n }\n const outcome = await turnOffWebPush(fleetId, endpoint);\n setWorking(undefined);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n return { isTaken, ownEndpoint, working, failure, turnOn, remove };\n}\n\nexport type WebPushBrowsers = WakeChannels['webPush']['browsers'];\n","import { CircleCheck, CirclePause, type LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport type { PlaceCard as PlaceCardState } from '../services/routing';\n\n/**\n * A place on top of Where things show (the routing mockup): its icon and\n * name, its state on the right, what it does, and its one action below.\n */\nexport function PlaceCard({ place, name, Icon, card, children }: { place: string; name: string; Icon: LucideIcon; card: PlaceCardState; children?: ReactNode }) {\n const StateIcon = card.state.isOk ? CircleCheck : CirclePause;\n return (\n <div data-testid={`bridge-place-${place}`} className=\"flex flex-col gap-1.5 rounded-lg border border-border bg-card px-3 py-2.5\">\n <span className=\"flex items-center gap-2 font-medium\">\n <Icon aria-hidden className=\"size-4 shrink-0\" />\n {name}\n <span data-testid={`bridge-place-${place}-state`} className={`ml-auto inline-flex items-center gap-1 text-caption font-medium ${card.state.isOk ? 'text-tone-ok-fg' : 'text-muted-foreground'}`}>\n <StateIcon aria-hidden className=\"size-3.5\" />\n {card.state.label}\n </span>\n </span>\n <span className=\"text-caption text-muted-foreground\">{card.description}</span>\n {children === undefined ? null : <span className=\"mt-auto flex flex-col items-start gap-1.5\">{children}</span>}\n </div>\n );\n}\n","'use client';\n\nimport { useState, useTransition } from 'react';\n\nimport { turnRoute, unlinkSlack } from '../hooks/bridge-actions';\nimport type { SlackLink } from '../hooks/read-bridge';\nimport { SLACK_LINK_PATH } from '../hooks/slack-link-path';\nimport { useWebPush } from '../hooks/use-web-push';\nimport type { WakeChannels } from '../services/deliveries';\nimport { chatCardOf, emailCardOf, emailTurnsOf, PLACE_NAMES, slackCardOf, webPushCardOf, type RoutingView } from '../services/routing';\nimport { ActionButton } from '../ui/action-button';\nimport { Notice } from '../ui/notice';\nimport { PlaceCard } from '../ui/place-card';\nimport { PLACE_ICONS } from '../ui/place-icons';\n\nfunction SlackPlace({ fleetId, slackLink }: { fleetId: string; slackLink: SlackLink | null }) {\n const [isUnlinking, startTransition] = useTransition();\n const [failure, setFailure] = useState<string | undefined>();\n const card = slackCardOf(slackLink);\n\n const unlink = () => {\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await unlinkSlack(fleetId);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n return (\n <PlaceCard place=\"slack\" name={PLACE_NAMES.slack} Icon={PLACE_ICONS.slack} card={card}>\n {card.action === 'link' ? (\n <a\n href={`${SLACK_LINK_PATH}?${new URLSearchParams({ fleet: fleetId }).toString()}`}\n data-testid=\"bridge-slack-link\"\n className=\"inline-flex h-7 items-center rounded-md bg-primary px-2.5 text-caption font-medium text-primary-foreground hover:bg-primary-hover\"\n >\n Link Slack\n </a>\n ) : null}\n {card.action === 'unlink' ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-slack-unlink\" isPending={isUnlinking} pendingLabel=\"Unlinking...\" onClick={unlink}>\n Unlink\n </ActionButton>\n ) : null}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </PlaceCard>\n );\n}\n\nfunction WebPushPlace({ fleetId, webPush }: { fleetId: string; webPush: WakeChannels['webPush'] | undefined }) {\n const browsers = webPush?.browsers ?? [];\n const { isTaken, ownEndpoint, working, failure, turnOn, remove } = useWebPush({ fleetId, webPushKey: webPush?.publicKey ?? null });\n const card = webPushCardOf({ isOffered: webPush !== undefined && webPush.publicKey !== null, isTaken, ownEndpoint, browsers });\n const others = browsers.filter(({ endpoint }) => card.action !== 'remove' || endpoint !== ownEndpoint);\n return (\n <PlaceCard place=\"web-push\" name={PLACE_NAMES['web-push']} Icon={PLACE_ICONS['web-push']} card={card}>\n {card.action === 'remove' && ownEndpoint !== undefined ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-web-push-remove\" isPending={working === ownEndpoint} pendingLabel=\"Removing...\" disabled={working !== undefined} onClick={() => { remove(ownEndpoint); }}>\n Remove\n </ActionButton>\n ) : null}\n {card.action === 'turnOn' ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-web-push-on\" isPending={working === 'on'} pendingLabel=\"Turning on...\" disabled={working !== undefined} onClick={turnOn}>\n Turn on\n </ActionButton>\n ) : null}\n {others.map(({ endpoint, browser, isGone }) => (\n <span key={endpoint} data-testid=\"bridge-web-push-browser\" className=\"flex w-full items-center gap-2 text-caption text-muted-foreground\">\n <span className=\"min-w-0 flex-1\">{isGone ? `${browser}: no longer takes wakes` : `Also on in ${browser}`}</span>\n <button type=\"button\" data-testid=\"bridge-web-push-remove-other\" disabled={working !== undefined} onClick={() => { remove(endpoint); }} className=\"underline hover:text-foreground disabled:opacity-50\">\n {working === endpoint ? 'Removing...' : 'Remove'}\n </button>\n </span>\n ))}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </PlaceCard>\n );\n}\n\nfunction EmailPlace({ fleetId, routing }: { fleetId: string; routing: RoutingView }) {\n const [isTurning, startTransition] = useTransition();\n const [failure, setFailure] = useState<string | undefined>();\n const card = emailCardOf({ isOffered: routing.offered.email, isOnForAnyJob: routing.jobs.some(({ places }) => places.email) });\n\n const turn = (isOn: boolean) => {\n setFailure(undefined);\n startTransition(async () => {\n for (const change of emailTurnsOf(routing, isOn)) {\n const outcome = await turnRoute({ fleet: fleetId, ...change });\n if (!outcome.isOk) {\n setFailure(outcome.message);\n return;\n }\n }\n });\n };\n\n return (\n <PlaceCard place=\"email\" name={PLACE_NAMES.email} Icon={PLACE_ICONS.email} card={card}>\n {card.action === 'turnOn' || card.action === 'turnOff' ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-email-turn\" isPending={isTurning} pendingLabel={card.action === 'turnOn' ? 'Turning on...' : 'Turning off...'} onClick={() => { turn(card.action === 'turnOn'); }}>\n {card.action === 'turnOn' ? 'Turn on' : 'Turn off'}\n </ActionButton>\n ) : null}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </PlaceCard>\n );\n}\n\n/**\n * The places on top of Where things show (Bridge, section 8; the routing\n * mockup), each with its state and its one action: Slack linked or not, the\n * chats connected through the gateway, web push in this browser, and email.\n */\nexport function PlacesPanel({\n fleetId,\n routing,\n slackLink,\n chats,\n webPush,\n}: {\n fleetId: string;\n routing: RoutingView;\n slackLink: SlackLink | null;\n chats: readonly string[];\n webPush: WakeChannels['webPush'] | undefined;\n}) {\n return (\n <section aria-label=\"The places\" className=\"grid gap-2.5 sm:grid-cols-2 lg:grid-cols-4\">\n <SlackPlace fleetId={fleetId} slackLink={slackLink} />\n <PlaceCard place=\"chat\" name={PLACE_NAMES.chat} Icon={PLACE_ICONS.chat} card={chatCardOf(chats)} />\n <WebPushPlace fleetId={fleetId} webPush={webPush} />\n <EmailPlace fleetId={fleetId} routing={routing} />\n </section>\n );\n}\n","/** Where Link Slack starts (gateway scopes 9.3): the button in Bridge's settings and the button in a bot's answer in Slack (src/core/slack/take-slack-event.ts). */\nexport const SLACK_LINK_PATH = '/slack/link';\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'circle-pause',\n size: 24,\n node: [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['line', { x1: '10', x2: '10', y1: '15', y2: '9', key: 'c1nkhi' }],\n ['line', { x1: '14', x2: '14', y1: '15', y2: '9', key: 'h65svq' }],\n ],\n aliases: ['pause-circle'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name CirclePause\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/circle-pause\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CirclePause = createLucideIcon(__iconData);\n\nexport default CirclePause;\n","/**\n * What the section of wakes of Bridge's settings works out in the browser (wake a\n * person, W8): the name a browser it turns web push on in is listed by, the\n * gateway's push key as the browser's push manager takes it, and the\n * subscription the browser sends the gateway.\n */\n\n/** A browser's push subscription as the gateway takes it, with the browser's name. */\nexport interface SubscriptionInput {\n readonly endpoint: string;\n readonly keys: { readonly p256dh: string; readonly auth: string };\n readonly browser: string;\n}\n\n/** The browsers and systems a name is made of, the first that matches counting: Edge and Chrome also say Safari, and Chrome says Chrome. */\nconst BROWSERS: readonly (readonly [RegExp, string])[] = [\n [/Edg\\//, 'Edge'],\n [/Firefox\\//, 'Firefox'],\n [/Chrome\\//, 'Chrome'],\n [/Safari\\//, 'Safari'],\n];\nconst SYSTEMS: readonly (readonly [RegExp, string])[] = [\n [/iPhone|iPad/, 'iOS'],\n [/Android/, 'Android'],\n [/Mac OS X/, 'macOS'],\n [/Windows/, 'Windows'],\n [/Linux/, 'Linux'],\n];\n\nconst firstOf = (userAgent: string, names: readonly (readonly [RegExp, string])[]): string | undefined => names.find(([pattern]) => pattern.test(userAgent))?.[1];\n\n/** The name a browser is listed by, such as Firefox on Linux, from its user agent. */\nexport function browserNameOf(userAgent: string): string {\n const browser = firstOf(userAgent, BROWSERS);\n const system = firstOf(userAgent, SYSTEMS);\n if (browser === undefined) {\n return 'A browser';\n }\n return system === undefined ? browser : `${browser} on ${system}`;\n}\n\n/** The bytes a base64url key stands for, as the browser's push manager takes the gateway's key. */\nexport function applicationServerKeyOf(key: string): Uint8Array<ArrayBuffer> {\n const binary = atob(key.replaceAll('-', '+').replaceAll('_', '/'));\n return Uint8Array.from(binary, (character) => character.charCodeAt(0));\n}\n\n/** The subscription to send, from the push manager's own, or none when it gave no endpoint or keys. */\nexport function subscriptionInputOf(subscription: { endpoint?: string; keys?: Record<string, string> }, browser: string): SubscriptionInput | undefined {\n const { endpoint, keys } = subscription;\n const p256dh = keys?.p256dh;\n const auth = keys?.auth;\n return endpoint === undefined || p256dh === undefined || auth === undefined ? undefined : { endpoint, keys: { p256dh, auth }, browser };\n}\n","'use client';\n\nimport { CircleCheck } from 'lucide-react';\nimport { useState, useTransition } from 'react';\n\nimport { turnRoute } from '../hooks/bridge-actions';\nimport { JOB_NAMES, PLACE_NAMES, ROUTED_PLACES, turnedToastOf, type RoutedJob, type RoutedPlace, type RoutingToast, type RoutingView, type WaitingByJob } from '../services/routing';\nimport { Notice } from '../ui/notice';\nimport { BRIDGE_ICON, JOB_ICONS, PLACE_ICONS } from '../ui/place-icons';\nimport { RoutingSwitch } from '../ui/routing-switch';\n\n/** Six columns on desktop: the job, Bridge, then each place. */\nconst ROW = 'sm:grid sm:grid-cols-[1.6fr_repeat(5,1fr)] sm:items-center sm:gap-3';\n\n/** The toast after a change (the routing mockup): what the place now shows. */\nfunction Toast({ toast }: { toast: RoutingToast }) {\n return (\n <div role=\"status\" data-testid=\"bridge-routing-toast\" className=\"flex max-w-[720px] gap-3 rounded-lg border border-border bg-popover py-3.5 pr-3.5 pl-4 text-popover-foreground shadow-lg\">\n <CircleCheck aria-hidden className=\"mt-0.5 size-4 shrink-0 text-tone-ok-fg\" />\n <span className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"font-medium\">{toast.title}</span>\n <span className=\"text-caption text-muted-foreground\">{toast.detail}</span>\n </span>\n </div>\n );\n}\n\n/** A place's cell: on desktop the switch in its column, on the phone a line with the place's name and the switch. */\nfunction PlaceCell({ name, children }: { name: string; children: React.ReactNode }) {\n return (\n <span className=\"flex items-center justify-between sm:block\">\n <span className=\"sm:hidden\">{name}</span>\n {children}\n </span>\n );\n}\n\n/**\n * Routing per job (Bridge, section 8; the routing mockup): per job, the\n * places that show it besides Bridge, which always does. A switch turns a\n * place on or off at once; the toast then says what it shows (CC20). A\n * place the gateway does not offer, or Slack before it is linked, cannot be\n * turned on; one on can always be turned off. On desktop a table, on the\n * phone a card per job.\n */\nexport function RoutingPanel({ fleetId, routing, isSlackLinked, waitingByJob }: { fleetId: string; routing: RoutingView; isSlackLinked: boolean; waitingByJob: WaitingByJob }) {\n const [isTurning, startTransition] = useTransition();\n const [turning, setTurning] = useState<string | undefined>();\n const [toast, setToast] = useState<RoutingToast | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const isUsable = (place: RoutedPlace): boolean => routing.offered[place] && (place !== 'slack' || isSlackLinked);\n\n const turn = (change: { job: RoutedJob; place: RoutedPlace; isOn: boolean; isChatOn: boolean }) => {\n setToast(undefined);\n setFailure(undefined);\n setTurning(`${change.job}-${change.place}`);\n startTransition(async () => {\n const { isChatOn, ...route } = change;\n const outcome = await turnRoute({ fleet: fleetId, ...route });\n if (outcome.isOk) {\n setToast(turnedToastOf({ ...route, waiting: waitingByJob[route.job], isChatOn }));\n } else {\n setFailure(outcome.message);\n }\n });\n };\n\n return (\n <section className=\"grid gap-3\" aria-label=\"Per job\">\n <div className=\"grid gap-3 sm:gap-0 sm:overflow-hidden sm:rounded-lg sm:border sm:border-border sm:bg-card\">\n <div aria-hidden className={`hidden min-h-8 bg-muted px-4 text-caption font-medium text-muted-foreground ${ROW}`}>\n <span>Job</span>\n <span className=\"inline-flex items-center gap-1.5\">\n <BRIDGE_ICON className=\"size-3.5\" />\n Bridge\n </span>\n {ROUTED_PLACES.map((place) => {\n const Icon = PLACE_ICONS[place];\n return (\n <span key={place} className=\"inline-flex items-center gap-1.5\">\n <Icon className=\"size-3.5\" />\n {PLACE_NAMES[place]}\n </span>\n );\n })}\n </div>\n {routing.jobs.map(({ job, places }) => {\n const { Icon, tone } = JOB_ICONS[job];\n return (\n <div\n key={job}\n data-testid=\"bridge-routing-job\"\n className={`flex flex-col gap-2 rounded-lg border border-border bg-card p-3 sm:min-h-[52px] sm:rounded-none sm:border-0 sm:border-t sm:px-4 sm:py-1.5 ${ROW}`}\n >\n <span className=\"flex flex-col gap-0.5\">\n <span className=\"inline-flex items-center gap-1.5 font-semibold sm:font-medium\">\n <Icon aria-hidden className={`size-4 shrink-0 ${tone}`} />\n {JOB_NAMES[job].name}\n </span>\n <span className=\"text-caption text-muted-foreground max-sm:hidden\">{JOB_NAMES[job].holds}</span>\n </span>\n <PlaceCell name=\"Bridge\">\n <RoutingSwitch isOn label={`Bridge for ${JOB_NAMES[job].name}`} isDisabled aside=\"Always\" testId={`bridge-routing-${job}-bridge`} />\n </PlaceCell>\n {ROUTED_PLACES.map((place) => {\n const isOn = places[place];\n const key = `${job}-${place}`;\n return (\n <PlaceCell key={place} name={PLACE_NAMES[place]}>\n <RoutingSwitch\n isOn={isOn}\n label={`${PLACE_NAMES[place]} for ${JOB_NAMES[job].name}`}\n isDisabled={isTurning || (!isOn && !isUsable(place))}\n isBusy={isTurning && turning === key}\n {...(job === 'everything-else' && place === 'slack' && !isOn ? { aside: 'Bots only' } : {})}\n testId={`bridge-routing-${key}`}\n onTurn={() => {\n turn({ job, place, isOn: !isOn, isChatOn: places.chat });\n }}\n />\n </PlaceCell>\n );\n })}\n </div>\n );\n })}\n </div>\n {toast === undefined ? null : <Toast toast={toast} />}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n <p className=\"text-caption text-muted-foreground max-sm:hidden\">While a Bridge page is open in focus, web push and email do not wake you. Slack still posts: you turned it on, and the views stay in step.</p>\n </section>\n );\n}\n","/**\n * A switch for one place of one job (the routing mockup): on or off, small;\n * Bridge's is on and cannot be turned, said beside it as Always; Slack's for\n * everything else, while off, says Bots only beside it.\n */\nexport function RoutingSwitch({\n isOn,\n label,\n isDisabled,\n isBusy = false,\n aside,\n testId,\n onTurn,\n}: {\n isOn: boolean;\n label: string;\n isDisabled: boolean;\n isBusy?: boolean;\n aside?: string;\n testId: string;\n onTurn?: () => void;\n}) {\n return (\n <span className=\"inline-flex items-center gap-2.5\">\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={isOn}\n aria-label={label}\n aria-busy={isBusy}\n disabled={isDisabled}\n data-testid={testId}\n onClick={onTurn}\n className=\"group inline-flex h-4 w-7 shrink-0 items-center rounded-full bg-input p-0.5 aria-checked:bg-primary disabled:cursor-not-allowed disabled:opacity-50\"\n >\n <span aria-hidden className=\"size-3 rounded-full bg-card shadow-sm transition-transform group-aria-checked:translate-x-3\" />\n </button>\n {aside === undefined ? null : <span className=\"text-caption text-muted-foreground\">{aside}</span>}\n </span>\n );\n}\n"],"names":["$$RSC_SERVER_ACTION_10","$$RSC_SERVER_ACTION_13","RoutingSwitch","isOn","label","isDisabled","isBusy","aside","testId","onTurn","className","type","role","disabled","onClick","undefined"],"mappings":"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","ignoreList":[2,10]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
(()=>{"use strict";module.exports=[29660,a=>{a.s(["H",0,"/bridge/basket","a",0,"/bridge/done","P",0,"/bridge","i",0,"/bridge/settings/routing","T",0,"/bridge/settings"])},94705,a=>{a.s(["_",0,["messages:send","messages:receive"],"T",0,function(a,b){switch(a.state){case"pending":let c;return(c=Math.ceil((Date.parse(a.expiresAt)-b.getTime())/864e5))<=1?{tone:"attention",label:"Last day"}:{tone:"waiting",label:`${String(c)} d left`};case"approving":return{tone:"active",label:"Approving"};case"approved":return{tone:"ok",label:"Approved"};case"denied":return{tone:"ended",label:"Denied"};case"expired":return{tone:"ended",label:"Expired"}}},"E",0,function(a){switch(a.subject.kind){case"client":return"MCP client";case"server":return"MCP server"}},"M",0,function(a){switch(a.subject.kind){case"client":return a.subject.clientName;case"server":return URL.canParse(a.subject.url)?new URL(a.subject.url).host:a.subject.url}}])},18734,a=>{var b=a.i(7997),c=a.i(94705);let d={waiting:"border-tone-waiting-border bg-tone-waiting-bg text-tone-waiting-fg",active:"border-tone-active-border bg-tone-active-bg text-tone-active-fg",ok:"border-tone-ok-border bg-tone-ok-bg text-tone-ok-fg",attention:"border-tone-attention-border bg-tone-attention-bg text-tone-attention-fg",ended:"border-tone-ended-border bg-tone-ended-bg text-tone-ended-fg"};function e({status:a}){return(0,b.jsx)("span",{className:`inline-flex shrink-0 items-center rounded-full border px-2 py-0.5 text-caption ${d[a.tone]}`,children:a.label})}function f({name:a}){return(0,b.jsx)("span",{"aria-hidden":"true",className:"inline-flex size-8 shrink-0 items-center justify-center rounded-md bg-secondary font-semibold text-secondary-foreground",children:a.slice(0,1).toUpperCase()})}function g({request:a,now:d}){let h=(0,c.M)(a);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(f,{name:h}),(0,b.jsxs)("span",{className:"flex min-w-0 flex-1 flex-col",children:[(0,b.jsx)("span",{className:"truncate",children:h}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:(0,c.E)(a)})]}),(0,b.jsx)(e,{status:(0,c.T)(a,d)})]})}a.s(["f",0,function({title:a,requests:c,now:d,hrefOf:e,currentId:f}){return(0,b.jsxs)("section",{className:"grid gap-2",children:[(0,b.jsxs)("h2",{className:"text-section font-semibold",children:[a," · ",c.length]}),c.map(a=>void 0===e?(0,b.jsx)("div",{className:"flex items-center gap-3 rounded-md border border-border bg-card p-3",children:(0,b.jsx)(g,{request:a,now:d})},a.requestId):(0,b.jsx)("a",{href:e(a),"aria-current":a.requestId===f?"true":void 0,"data-testid":"bridge-request",className:"flex items-center gap-3 rounded-md border border-border bg-card p-3 hover:bg-accent aria-[current=true]:border-ring",children:(0,b.jsx)(g,{request:a,now:d})},a.requestId))]})}],18734)}]})();
|
|
1
|
+
(()=>{"use strict";module.exports=[29660,a=>{a.s(["H",0,"/bridge/basket","a",0,"/bridge/done","P",0,"/bridge","i",0,"/bridge/settings/routing","T",0,"/bridge/settings","C",0,"/bridge/stay-aware"])},94705,a=>{a.s(["_",0,["messages:send","messages:receive"],"T",0,function(a,b){switch(a.state){case"pending":let c;return(c=Math.ceil((Date.parse(a.expiresAt)-b.getTime())/864e5))<=1?{tone:"attention",label:"Last day"}:{tone:"waiting",label:`${String(c)} d left`};case"approving":return{tone:"active",label:"Approving"};case"approved":return{tone:"ok",label:"Approved"};case"denied":return{tone:"ended",label:"Denied"};case"expired":return{tone:"ended",label:"Expired"}}},"E",0,function(a){switch(a.subject.kind){case"client":return"MCP client";case"server":return"MCP server"}},"M",0,function(a){switch(a.subject.kind){case"client":return a.subject.clientName;case"server":return URL.canParse(a.subject.url)?new URL(a.subject.url).host:a.subject.url}}])},18734,a=>{var b=a.i(7997),c=a.i(94705);let d={waiting:"border-tone-waiting-border bg-tone-waiting-bg text-tone-waiting-fg",active:"border-tone-active-border bg-tone-active-bg text-tone-active-fg",ok:"border-tone-ok-border bg-tone-ok-bg text-tone-ok-fg",attention:"border-tone-attention-border bg-tone-attention-bg text-tone-attention-fg",ended:"border-tone-ended-border bg-tone-ended-bg text-tone-ended-fg"};function e({status:a}){return(0,b.jsx)("span",{className:`inline-flex shrink-0 items-center rounded-full border px-2 py-0.5 text-caption ${d[a.tone]}`,children:a.label})}function f({name:a}){return(0,b.jsx)("span",{"aria-hidden":"true",className:"inline-flex size-8 shrink-0 items-center justify-center rounded-md bg-secondary font-semibold text-secondary-foreground",children:a.slice(0,1).toUpperCase()})}function g({request:a,now:d}){let h=(0,c.M)(a);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(f,{name:h}),(0,b.jsxs)("span",{className:"flex min-w-0 flex-1 flex-col",children:[(0,b.jsx)("span",{className:"truncate",children:h}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:(0,c.E)(a)})]}),(0,b.jsx)(e,{status:(0,c.T)(a,d)})]})}a.s(["f",0,function({title:a,requests:c,now:d,hrefOf:e,currentId:f}){return(0,b.jsxs)("section",{className:"grid gap-2",children:[(0,b.jsxs)("h2",{className:"text-section font-semibold",children:[a," · ",c.length]}),c.map(a=>void 0===e?(0,b.jsx)("div",{className:"flex items-center gap-3 rounded-md border border-border bg-card p-3",children:(0,b.jsx)(g,{request:a,now:d})},a.requestId):(0,b.jsx)("a",{href:e(a),"aria-current":a.requestId===f?"true":void 0,"data-testid":"bridge-request",className:"flex items-center gap-3 rounded-md border border-border bg-card p-3 hover:bg-accent aria-[current=true]:border-ring",children:(0,b.jsx)(g,{request:a,now:d})},a.requestId))]})}],18734)}]})();
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=web_features_bridge_1mi9qlb-z5iwt._.js.map
|