@aitne/dashboard 0.1.4 → 0.1.6
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/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +5 -1
- package/.next/build-manifest.json +3 -3
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/diagnostics/route-bundle-stats.json +450 -356
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +96 -0
- package/.next/routes-manifest.json +24 -0
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +15 -15
- package/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/activity/page.js.nft.json +1 -1
- package/.next/server/app/activity/page_client-reference-manifest.js +1 -1
- package/.next/server/app/activity.html +1 -1
- package/.next/server/app/activity.rsc +19 -19
- package/.next/server/app/activity.segments/_full.segment.rsc +19 -19
- package/.next/server/app/activity.segments/_head.segment.rsc +4 -4
- package/.next/server/app/activity.segments/_index.segment.rsc +10 -10
- package/.next/server/app/activity.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/activity.segments/activity/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/activity.segments/activity.segment.rsc +4 -4
- package/.next/server/app/analytics/page.js.nft.json +1 -1
- package/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
- package/.next/server/app/analytics.html +1 -1
- package/.next/server/app/analytics.rsc +19 -19
- package/.next/server/app/analytics.segments/_full.segment.rsc +19 -19
- package/.next/server/app/analytics.segments/_head.segment.rsc +4 -4
- package/.next/server/app/analytics.segments/_index.segment.rsc +10 -10
- package/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/analytics.segments/analytics/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/analytics.segments/analytics.segment.rsc +4 -4
- package/.next/server/app/api/[...path]/route.js +1 -1
- package/.next/server/app/api/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +17 -17
- package/.next/server/app/chat.segments/_full.segment.rsc +17 -17
- package/.next/server/app/chat.segments/_head.segment.rsc +4 -4
- package/.next/server/app/chat.segments/_index.segment.rsc +10 -10
- package/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/chat.segments/chat.segment.rsc +3 -3
- package/.next/server/app/connections/calendar/page.js.nft.json +1 -1
- package/.next/server/app/connections/calendar/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/calendar.html +1 -1
- package/.next/server/app/connections/calendar.rsc +18 -18
- package/.next/server/app/connections/calendar.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/calendar.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/calendar.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/calendar.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/calendar.segments/connections/calendar/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/calendar.segments/connections/calendar.segment.rsc +3 -3
- package/.next/server/app/connections/calendar.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/journal/page.js.nft.json +1 -1
- package/.next/server/app/connections/journal/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/journal.html +1 -1
- package/.next/server/app/connections/journal.rsc +16 -16
- package/.next/server/app/connections/journal.segments/_full.segment.rsc +16 -16
- package/.next/server/app/connections/journal.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/journal.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/journal.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/journal.segments/connections/journal/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/connections/journal.segments/connections/journal.segment.rsc +3 -3
- package/.next/server/app/connections/journal.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge/page.js.nft.json +1 -1
- package/.next/server/app/connections/knowledge/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/knowledge.html +1 -1
- package/.next/server/app/connections/knowledge.rsc +18 -18
- package/.next/server/app/connections/knowledge.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/knowledge.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/knowledge.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/knowledge.segments/connections/knowledge/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge.segments/connections/knowledge.segment.rsc +3 -3
- package/.next/server/app/connections/knowledge.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/mail/page.js.nft.json +1 -1
- package/.next/server/app/connections/mail/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/mail.html +1 -1
- package/.next/server/app/connections/mail.rsc +18 -18
- package/.next/server/app/connections/mail.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/mail.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/mail.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/mail.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/mail.segments/connections/mail/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/mail.segments/connections/mail.segment.rsc +3 -3
- package/.next/server/app/connections/mail.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/mcp/page.js.nft.json +1 -1
- package/.next/server/app/connections/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/mcp.html +1 -1
- package/.next/server/app/connections/mcp.rsc +18 -18
- package/.next/server/app/connections/mcp.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/mcp.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/mcp.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/mcp.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/mcp.segments/connections/mcp/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/mcp.segments/connections/mcp.segment.rsc +3 -3
- package/.next/server/app/connections/mcp.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/messaging/page.js.nft.json +1 -1
- package/.next/server/app/connections/messaging/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/messaging.html +1 -1
- package/.next/server/app/connections/messaging.rsc +18 -18
- package/.next/server/app/connections/messaging.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/messaging.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/messaging.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/messaging.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/messaging.segments/connections/messaging/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/messaging.segments/connections/messaging.segment.rsc +3 -3
- package/.next/server/app/connections/messaging.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/page.js.nft.json +1 -1
- package/.next/server/app/connections/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/repositories/page.js.nft.json +1 -1
- package/.next/server/app/connections/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/repositories.html +1 -1
- package/.next/server/app/connections/repositories.rsc +18 -18
- package/.next/server/app/connections/repositories.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/repositories.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/repositories.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/repositories.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/repositories.segments/connections/repositories/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/repositories.segments/connections/repositories.segment.rsc +3 -3
- package/.next/server/app/connections/repositories.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/routines/page.js.nft.json +1 -1
- package/.next/server/app/connections/routines/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/routines.html +1 -1
- package/.next/server/app/connections/routines.rsc +16 -16
- package/.next/server/app/connections/routines.segments/_full.segment.rsc +16 -16
- package/.next/server/app/connections/routines.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/routines.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/routines.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/routines.segments/connections/routines/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/connections/routines.segments/connections/routines.segment.rsc +3 -3
- package/.next/server/app/connections/routines.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections.html +1 -1
- package/.next/server/app/connections.rsc +16 -16
- package/.next/server/app/connections.segments/_full.segment.rsc +16 -16
- package/.next/server/app/connections.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections.segments/connections/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/connections.segments/connections.segment.rsc +4 -4
- package/.next/server/app/conversations/[id]/page.js.nft.json +1 -1
- package/.next/server/app/conversations/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/conversations/page.js.nft.json +1 -1
- package/.next/server/app/conversations/page_client-reference-manifest.js +1 -1
- package/.next/server/app/conversations.html +1 -1
- package/.next/server/app/conversations.rsc +15 -15
- package/.next/server/app/conversations.segments/_full.segment.rsc +15 -15
- package/.next/server/app/conversations.segments/_head.segment.rsc +4 -4
- package/.next/server/app/conversations.segments/_index.segment.rsc +10 -10
- package/.next/server/app/conversations.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/conversations.segments/conversations/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/conversations.segments/conversations.segment.rsc +3 -3
- package/.next/server/app/docs/[[...slug]]/page.js.nft.json +1 -1
- package/.next/server/app/docs/[[...slug]]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/finance/page.js.nft.json +1 -1
- package/.next/server/app/finance/page_client-reference-manifest.js +1 -1
- package/.next/server/app/finance.html +1 -1
- package/.next/server/app/finance.rsc +17 -17
- package/.next/server/app/finance.segments/_full.segment.rsc +17 -17
- package/.next/server/app/finance.segments/_head.segment.rsc +4 -4
- package/.next/server/app/finance.segments/_index.segment.rsc +10 -10
- package/.next/server/app/finance.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/finance.segments/finance/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/finance.segments/finance.segment.rsc +3 -3
- package/.next/server/app/git/page.js.nft.json +1 -1
- package/.next/server/app/git/page_client-reference-manifest.js +1 -1
- package/.next/server/app/git.html +1 -1
- package/.next/server/app/git.rsc +17 -17
- package/.next/server/app/git.segments/_full.segment.rsc +17 -17
- package/.next/server/app/git.segments/_head.segment.rsc +4 -4
- package/.next/server/app/git.segments/_index.segment.rsc +10 -10
- package/.next/server/app/git.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/git.segments/git/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/git.segments/git.segment.rsc +3 -3
- package/.next/server/app/health/page.js.nft.json +1 -1
- package/.next/server/app/health/page_client-reference-manifest.js +1 -1
- package/.next/server/app/health.html +1 -1
- package/.next/server/app/health.rsc +17 -17
- package/.next/server/app/health.segments/_full.segment.rsc +17 -17
- package/.next/server/app/health.segments/_head.segment.rsc +4 -4
- package/.next/server/app/health.segments/_index.segment.rsc +10 -10
- package/.next/server/app/health.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/health.segments/health/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/health.segments/health.segment.rsc +3 -3
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +17 -17
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +17 -17
- package/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/server/app/index.segments/_index.segment.rsc +10 -10
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/knowledge/page.js.nft.json +1 -1
- package/.next/server/app/knowledge/page_client-reference-manifest.js +1 -1
- package/.next/server/app/knowledge.html +1 -1
- package/.next/server/app/knowledge.rsc +18 -18
- package/.next/server/app/knowledge.segments/_full.segment.rsc +18 -18
- package/.next/server/app/knowledge.segments/_head.segment.rsc +4 -4
- package/.next/server/app/knowledge.segments/_index.segment.rsc +10 -10
- package/.next/server/app/knowledge.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/knowledge.segments/knowledge/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/knowledge.segments/knowledge.segment.rsc +4 -4
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/reading/page.js.nft.json +1 -1
- package/.next/server/app/reading/page_client-reference-manifest.js +1 -1
- package/.next/server/app/reading.html +1 -1
- package/.next/server/app/reading.rsc +17 -17
- package/.next/server/app/reading.segments/_full.segment.rsc +17 -17
- package/.next/server/app/reading.segments/_head.segment.rsc +4 -4
- package/.next/server/app/reading.segments/_index.segment.rsc +10 -10
- package/.next/server/app/reading.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/reading.segments/reading/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/reading.segments/reading.segment.rsc +3 -3
- package/.next/server/app/schedule/page.js.nft.json +1 -1
- package/.next/server/app/schedule/page_client-reference-manifest.js +1 -1
- package/.next/server/app/schedule.html +1 -1
- package/.next/server/app/schedule.rsc +17 -17
- package/.next/server/app/schedule.segments/_full.segment.rsc +17 -17
- package/.next/server/app/schedule.segments/_head.segment.rsc +4 -4
- package/.next/server/app/schedule.segments/_index.segment.rsc +10 -10
- package/.next/server/app/schedule.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/schedule.segments/schedule/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/schedule.segments/schedule.segment.rsc +3 -3
- package/.next/server/app/settings/advanced/page.js.nft.json +1 -1
- package/.next/server/app/settings/advanced/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/advanced.html +1 -1
- package/.next/server/app/settings/advanced.rsc +18 -18
- package/.next/server/app/settings/advanced.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/advanced.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/advanced.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/advanced.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/advanced.segments/settings/advanced/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/advanced.segments/settings/advanced.segment.rsc +3 -3
- package/.next/server/app/settings/advanced.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/backends/page.js.nft.json +1 -1
- package/.next/server/app/settings/backends/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/backends.html +1 -1
- package/.next/server/app/settings/backends.rsc +16 -16
- package/.next/server/app/settings/backends.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/backends.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/backends.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/backends.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/backends.segments/settings/backends/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/backends.segments/settings/backends.segment.rsc +3 -3
- package/.next/server/app/settings/backends.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/commands/page.js.nft.json +1 -1
- package/.next/server/app/settings/commands/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/commands.html +1 -1
- package/.next/server/app/settings/commands.rsc +18 -18
- package/.next/server/app/settings/commands.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/commands.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/commands.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/commands.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/commands.segments/settings/commands/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/commands.segments/settings/commands.segment.rsc +3 -3
- package/.next/server/app/settings/commands.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/connections/page.js.nft.json +1 -1
- package/.next/server/app/settings/connections/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/connections.html +1 -1
- package/.next/server/app/settings/connections.rsc +16 -16
- package/.next/server/app/settings/connections.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/connections.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/connections.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/connections.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/connections.segments/settings/connections/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/connections.segments/settings/connections.segment.rsc +3 -3
- package/.next/server/app/settings/connections.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/journal/page.js.nft.json +1 -1
- package/.next/server/app/settings/journal/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/journal.html +1 -1
- package/.next/server/app/settings/journal.rsc +18 -18
- package/.next/server/app/settings/journal.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/journal.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/journal.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/journal.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/journal.segments/settings/journal/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/journal.segments/settings/journal.segment.rsc +3 -3
- package/.next/server/app/settings/journal.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/management/page.js.nft.json +1 -1
- package/.next/server/app/settings/management/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/management.html +1 -1
- package/.next/server/app/settings/management.rsc +18 -18
- package/.next/server/app/settings/management.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/management.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/management.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/management.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/management.segments/settings/management/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/management.segments/settings/management.segment.rsc +3 -3
- package/.next/server/app/settings/management.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/messaging/page.js.nft.json +1 -1
- package/.next/server/app/settings/messaging/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/messaging.html +1 -1
- package/.next/server/app/settings/messaging.rsc +16 -16
- package/.next/server/app/settings/messaging.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/messaging.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/messaging.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/messaging.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/messaging.segments/settings/messaging/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/messaging.segments/settings/messaging.segment.rsc +3 -3
- package/.next/server/app/settings/messaging.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/models/page.js.nft.json +1 -1
- package/.next/server/app/settings/models/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/models.html +1 -1
- package/.next/server/app/settings/models.rsc +18 -18
- package/.next/server/app/settings/models.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/models.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/models.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/models.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/models.segments/settings/models/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/models.segments/settings/models.segment.rsc +3 -3
- package/.next/server/app/settings/models.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/processes/page.js.nft.json +1 -1
- package/.next/server/app/settings/processes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/processes.html +1 -1
- package/.next/server/app/settings/processes.rsc +16 -16
- package/.next/server/app/settings/processes.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/processes.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/processes.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/processes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/processes.segments/settings/processes/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/processes.segments/settings/processes.segment.rsc +3 -3
- package/.next/server/app/settings/processes.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/routines/page.js.nft.json +1 -1
- package/.next/server/app/settings/routines/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/routines.html +1 -1
- package/.next/server/app/settings/routines.rsc +18 -18
- package/.next/server/app/settings/routines.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/routines.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/routines.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/routines.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/routines.segments/settings/routines/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/routines.segments/settings/routines.segment.rsc +3 -3
- package/.next/server/app/settings/routines.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/schedule/page.js.nft.json +1 -1
- package/.next/server/app/settings/schedule/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/schedule.html +1 -1
- package/.next/server/app/settings/schedule.rsc +18 -18
- package/.next/server/app/settings/schedule.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/schedule.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/schedule.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/schedule.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/schedule.segments/settings/schedule/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/schedule.segments/settings/schedule.segment.rsc +3 -3
- package/.next/server/app/settings/schedule.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning/page.js.nft.json +1 -1
- package/.next/server/app/settings/self-learning/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/self-learning.html +1 -1
- package/.next/server/app/settings/self-learning.rsc +18 -18
- package/.next/server/app/settings/self-learning.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/self-learning.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/self-learning.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/self-learning.segments/settings/self-learning/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning.segments/settings/self-learning.segment.rsc +3 -3
- package/.next/server/app/settings/self-learning.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/wiki/page/app-paths-manifest.json +3 -0
- package/.next/server/app/settings/wiki/page/build-manifest.json +18 -0
- package/.next/server/app/settings/wiki/page/next-font-manifest.json +6 -0
- package/.next/server/app/settings/wiki/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/settings/wiki/page/server-reference-manifest.json +4 -0
- package/.next/server/app/settings/wiki/page.js +16 -0
- package/.next/server/app/settings/wiki/page.js.map +5 -0
- package/.next/server/app/settings/wiki/page.js.nft.json +1 -0
- package/.next/server/app/settings/wiki/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings/wiki/timeline/page/app-paths-manifest.json +3 -0
- package/.next/server/app/settings/wiki/timeline/page/build-manifest.json +18 -0
- package/.next/server/app/settings/wiki/timeline/page/next-font-manifest.json +6 -0
- package/.next/server/app/settings/wiki/timeline/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/settings/wiki/timeline/page/server-reference-manifest.json +4 -0
- package/.next/server/app/settings/wiki/timeline/page.js +17 -0
- package/.next/server/app/settings/wiki/timeline/page.js.map +5 -0
- package/.next/server/app/settings/wiki/timeline/page.js.nft.json +1 -0
- package/.next/server/app/settings/wiki/timeline/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings/wiki/timeline.html +1 -0
- package/.next/server/app/settings/wiki/timeline.meta +17 -0
- package/.next/server/app/settings/wiki/timeline.rsc +24 -0
- package/.next/server/app/settings/wiki/timeline.segments/_full.segment.rsc +24 -0
- package/.next/server/app/settings/wiki/timeline.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/wiki/timeline.segments/_index.segment.rsc +11 -0
- package/.next/server/app/settings/wiki/timeline.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki/timeline/__PAGE__.segment.rsc +6 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki/timeline.segment.rsc +5 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki.segment.rsc +5 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings.segment.rsc +5 -0
- package/.next/server/app/settings/wiki.html +1 -0
- package/.next/server/app/settings/wiki.meta +16 -0
- package/.next/server/app/settings/wiki.rsc +27 -0
- package/.next/server/app/settings/wiki.segments/_full.segment.rsc +27 -0
- package/.next/server/app/settings/wiki.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/wiki.segments/_index.segment.rsc +11 -0
- package/.next/server/app/settings/wiki.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/settings/wiki.segments/settings/wiki/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/settings/wiki.segments/settings/wiki.segment.rsc +5 -0
- package/.next/server/app/settings/wiki.segments/settings.segment.rsc +5 -0
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +18 -18
- package/.next/server/app/settings.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings.segments/settings.segment.rsc +4 -4
- package/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/server/app/setup.html +1 -1
- package/.next/server/app/setup.rsc +17 -17
- package/.next/server/app/setup.segments/_full.segment.rsc +17 -17
- package/.next/server/app/setup.segments/_head.segment.rsc +4 -4
- package/.next/server/app/setup.segments/_index.segment.rsc +10 -10
- package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/setup.segments/setup.segment.rsc +3 -3
- package/.next/server/app/trip/page.js.nft.json +1 -1
- package/.next/server/app/trip/page_client-reference-manifest.js +1 -1
- package/.next/server/app/trip.html +1 -1
- package/.next/server/app/trip.rsc +17 -17
- package/.next/server/app/trip.segments/_full.segment.rsc +17 -17
- package/.next/server/app/trip.segments/_head.segment.rsc +4 -4
- package/.next/server/app/trip.segments/_index.segment.rsc +10 -10
- package/.next/server/app/trip.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/trip.segments/trip/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/trip.segments/trip.segment.rsc +3 -3
- package/.next/server/app/wiki/page/app-paths-manifest.json +3 -0
- package/.next/server/app/wiki/page/build-manifest.json +18 -0
- package/.next/server/app/wiki/page/next-font-manifest.json +6 -0
- package/.next/server/app/wiki/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/wiki/page/server-reference-manifest.json +4 -0
- package/.next/server/app/wiki/page.js +15 -0
- package/.next/server/app/wiki/page.js.map +5 -0
- package/.next/server/app/wiki/page.js.nft.json +1 -0
- package/.next/server/app/wiki/page_client-reference-manifest.js +3 -0
- package/.next/server/app/wiki/timeline/page/app-paths-manifest.json +3 -0
- package/.next/server/app/wiki/timeline/page/build-manifest.json +18 -0
- package/.next/server/app/wiki/timeline/page/next-font-manifest.json +6 -0
- package/.next/server/app/wiki/timeline/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/wiki/timeline/page/server-reference-manifest.json +4 -0
- package/.next/server/app/wiki/timeline/page.js +15 -0
- package/.next/server/app/wiki/timeline/page.js.map +5 -0
- package/.next/server/app/wiki/timeline/page.js.nft.json +1 -0
- package/.next/server/app/wiki/timeline/page_client-reference-manifest.js +3 -0
- package/.next/server/app/wiki/timeline.html +1 -0
- package/.next/server/app/wiki/timeline.meta +16 -0
- package/.next/server/app/wiki/timeline.rsc +26 -0
- package/.next/server/app/wiki/timeline.segments/_full.segment.rsc +26 -0
- package/.next/server/app/wiki/timeline.segments/_head.segment.rsc +6 -0
- package/.next/server/app/wiki/timeline.segments/_index.segment.rsc +11 -0
- package/.next/server/app/wiki/timeline.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/wiki/timeline.segments/wiki/timeline/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/wiki/timeline.segments/wiki/timeline.segment.rsc +5 -0
- package/.next/server/app/wiki/timeline.segments/wiki.segment.rsc +5 -0
- package/.next/server/app/wiki.html +1 -0
- package/.next/server/app/wiki.meta +15 -0
- package/.next/server/app/wiki.rsc +26 -0
- package/.next/server/app/wiki.segments/_full.segment.rsc +26 -0
- package/.next/server/app/wiki.segments/_head.segment.rsc +6 -0
- package/.next/server/app/wiki.segments/_index.segment.rsc +11 -0
- package/.next/server/app/wiki.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/wiki.segments/wiki/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/wiki.segments/wiki.segment.rsc +5 -0
- package/.next/server/app-paths-manifest.json +5 -1
- package/.next/server/chunks/0z~i_next_dist_esm_build_templates_app-route_0o_o_hp.js +1 -1
- package/.next/server/chunks/0z~i_next_dist_esm_build_templates_app-route_0o_o_hp.js.map +1 -1
- package/.next/server/chunks/{[root-of-the-server]__00gp8gz._.js → [root-of-the-server]__01knfi.._.js} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0-0wgko._.js → [root-of-the-server]__08_s4yo._.js} +2 -2
- package/.next/server/chunks/ssr/0juq_dashboard__next-internal_server_app_settings_wiki_timeline_page_actions_0czqn6z.js +3 -0
- package/.next/server/chunks/ssr/0juq_dashboard__next-internal_server_app_settings_wiki_timeline_page_actions_0czqn6z.js.map +1 -0
- package/.next/server/chunks/ssr/0mzu_lucide-react_dist_esm_icons_zap_115-27i.js +3 -0
- package/.next/server/chunks/ssr/0mzu_lucide-react_dist_esm_icons_zap_115-27i.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0k3x-na.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0k3x-na.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0km22.v.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0km22.v.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0vui1gx.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0vui1gx.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_11h319t.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_11h319t.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__007ymqm._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__007ymqm._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00vjce2._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00vjce2._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__07pkvm3._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__07pkvm3._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dfuz7_._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dfuz7_._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__117dw_l._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__117dw_l._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-3uzu1._.js +3 -0
- package/.next/server/chunks/ssr/_0-3uzu1._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-6jgyg._.js +3 -0
- package/.next/server/chunks/ssr/_0-6jgyg._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-fv_sr._.js +1 -1
- package/.next/server/chunks/ssr/_0-fv_sr._.js.map +1 -1
- package/.next/server/chunks/ssr/_0.7pki~._.js +3 -0
- package/.next/server/chunks/ssr/_0.7pki~._.js.map +1 -0
- package/.next/server/chunks/ssr/_02s86rg._.js +3 -0
- package/.next/server/chunks/ssr/_02s86rg._.js.map +1 -0
- package/.next/server/chunks/ssr/_03bq.de._.js +3 -0
- package/.next/server/chunks/ssr/_03bq.de._.js.map +1 -0
- package/.next/server/chunks/ssr/_03u6ja0._.js +3 -0
- package/.next/server/chunks/ssr/_03u6ja0._.js.map +1 -0
- package/.next/server/chunks/ssr/_04-.z69._.js +3 -0
- package/.next/server/chunks/ssr/_04-.z69._.js.map +1 -0
- package/.next/server/chunks/ssr/_05rlac0._.js +3 -0
- package/.next/server/chunks/ssr/_05rlac0._.js.map +1 -0
- package/.next/server/chunks/ssr/_05xysbw._.js +3 -0
- package/.next/server/chunks/ssr/_05xysbw._.js.map +1 -0
- package/.next/server/chunks/ssr/_09e_66m._.js +3 -0
- package/.next/server/chunks/ssr/_09e_66m._.js.map +1 -0
- package/.next/server/chunks/ssr/_0_bnan9._.js +3 -0
- package/.next/server/chunks/ssr/_0_bnan9._.js.map +1 -0
- package/.next/server/chunks/ssr/_0b00io4._.js +3 -0
- package/.next/server/chunks/ssr/_0b00io4._.js.map +1 -0
- package/.next/server/chunks/ssr/_0es_2i2._.js +3 -0
- package/.next/server/chunks/ssr/_0es_2i2._.js.map +1 -0
- package/.next/server/chunks/ssr/_0g7_r5i._.js +3 -0
- package/.next/server/chunks/ssr/_0g7_r5i._.js.map +1 -0
- package/.next/server/chunks/ssr/_0hojxqy._.js +1 -1
- package/.next/server/chunks/ssr/_0hojxqy._.js.map +1 -1
- package/.next/server/chunks/ssr/_0ifb9jm._.js +3 -0
- package/.next/server/chunks/ssr/_0ifb9jm._.js.map +1 -0
- package/.next/server/chunks/ssr/_0jl_-u5._.js +3 -0
- package/.next/server/chunks/ssr/_0jl_-u5._.js.map +1 -0
- package/.next/server/chunks/ssr/_0lfuvjg._.js +3 -0
- package/.next/server/chunks/ssr/_0lfuvjg._.js.map +1 -0
- package/.next/server/chunks/ssr/{_0jm~wn-._.js → _0mp7n5i._.js} +2 -2
- package/.next/server/chunks/ssr/{_0jm~wn-._.js.map → _0mp7n5i._.js.map} +1 -1
- package/.next/server/chunks/ssr/_0powsoh._.js +3 -0
- package/.next/server/chunks/ssr/_0powsoh._.js.map +1 -0
- package/.next/server/chunks/ssr/_0q34y9l._.js +3 -0
- package/.next/server/chunks/ssr/_0q34y9l._.js.map +1 -0
- package/.next/server/chunks/ssr/_0q4rpi-._.js +5 -0
- package/.next/server/chunks/ssr/_0q4rpi-._.js.map +1 -0
- package/.next/server/chunks/ssr/_0rc-7d4._.js +3 -0
- package/.next/server/chunks/ssr/_0rc-7d4._.js.map +1 -0
- package/.next/server/chunks/ssr/_0tjsh16._.js +3 -0
- package/.next/server/chunks/ssr/_0tjsh16._.js.map +1 -0
- package/.next/server/chunks/ssr/_0tl98en._.js +1 -1
- package/.next/server/chunks/ssr/_0tl98en._.js.map +1 -1
- package/.next/server/chunks/ssr/{_0._ysx3._.js → _0v_6ros._.js} +2 -2
- package/.next/server/chunks/ssr/_0v_6ros._.js.map +1 -0
- package/.next/server/chunks/ssr/_0vncjim._.js +3 -0
- package/.next/server/chunks/ssr/_0vncjim._.js.map +1 -0
- package/.next/server/chunks/ssr/_0vx-jgf._.js +3 -0
- package/.next/server/chunks/ssr/_0vx-jgf._.js.map +1 -0
- package/.next/server/chunks/ssr/_0w1ez1p._.js +3 -0
- package/.next/server/chunks/ssr/_0w1ez1p._.js.map +1 -0
- package/.next/server/chunks/ssr/_0yl49yk._.js +3 -0
- package/.next/server/chunks/ssr/_0yl49yk._.js.map +1 -0
- package/.next/server/chunks/ssr/_0z1ah9x._.js +1 -1
- package/.next/server/chunks/ssr/_0z1ah9x._.js.map +1 -1
- package/.next/server/chunks/ssr/_0z9ikwn._.js +3 -0
- package/.next/server/chunks/ssr/_0z9ikwn._.js.map +1 -0
- package/.next/server/chunks/ssr/_0z_cp12._.js +3 -0
- package/.next/server/chunks/ssr/_0z_cp12._.js.map +1 -0
- package/.next/server/chunks/ssr/_10hvwg5._.js +3 -0
- package/.next/server/chunks/ssr/_10hvwg5._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_settings_wiki_page_actions_12d~w9l.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_settings_wiki_page_actions_12d~w9l.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_page_actions_026bi.d.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_page_actions_026bi.d.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_timeline_page_actions_06jb4gg.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_timeline_page_actions_06jb4gg.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0bx940s._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0bx940s._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0fo7nqq._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0fo7nqq._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0uxs9-.._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_0uxs9-.._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_activity_page_tsx_08yep46._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_activity_page_tsx_08yep46._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_connections_repositories_page_tsx_08y6paq._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_connections_repositories_page_tsx_08y6paq._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_git_page_tsx_0ah19-6._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_git_page_tsx_0ah19-6._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_schedule_page_tsx_0znc404._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_schedule_page_tsx_0znc404._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_models_page_tsx_0djsx88._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_models_page_tsx_0djsx88._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_schedule_page_tsx_0b8zr2l._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_schedule_page_tsx_0b8zr2l._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_wiki_page_tsx_0..1tkb._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_wiki_page_tsx_0..1tkb._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_app_setup_page_tsx_06k3via._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_setup_page_tsx_06k3via._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_components_connections_slack-card_tsx_0mahejj._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_components_connections_slack-card_tsx_0mahejj._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_components_settings_backend-settings_tsx_0i-tp_u._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_components_settings_backend-settings_tsx_0i-tp_u._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_shared_dist_index_0kuvow-.js +1 -1
- package/.next/server/chunks/ssr/packages_shared_dist_index_0kuvow-.js.map +1 -1
- package/.next/server/middleware/middleware-manifest.json +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/middleware-manifest.json +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/01yix41q.0970.js +1 -0
- package/.next/static/chunks/02qjylw4yp63l.js +1 -0
- package/.next/static/chunks/06y2ddf5x9x_4.js +1 -0
- package/.next/static/chunks/{0ztl~44vjnpe1.js → 08ie9t4zn6n4-.js} +1 -1
- package/.next/static/chunks/091khs5zza4_4.js +1 -0
- package/.next/static/chunks/{0~_56pt8wsmeo.js → 0abhg-m1-acdb.js} +1 -1
- package/.next/static/chunks/0ae.1upy09t--.js +1 -0
- package/.next/static/chunks/0bvcd~k.vfro8.js +1 -0
- package/.next/static/chunks/{0g6.0r0i-wyeg.js → 0eqm47_oikj36.js} +1 -1
- package/.next/static/chunks/0fqugh~hv4my1.js +1 -0
- package/.next/static/chunks/0has04tc4mrik.js +1 -0
- package/.next/static/chunks/0huynm-qbj26k.js +1 -0
- package/.next/static/chunks/0ibq4zul6305p.js +1 -0
- package/.next/static/chunks/0jm_e6e6n~rdn.js +1 -0
- package/.next/static/chunks/0k0.4cksmybb2.js +1 -0
- package/.next/static/chunks/0l07yrtw3fxp5.js +1 -0
- package/.next/static/chunks/0nhqu-sq045x7.js +1 -0
- package/.next/static/chunks/0op3oc-if6n5-.js +3 -0
- package/.next/static/chunks/0p34n6.st3s~1.js +1 -0
- package/.next/static/chunks/0r8nosw42e2m9.js +1 -0
- package/.next/static/chunks/0shx3_mxukfhr.js +1 -0
- package/.next/static/chunks/0thm~t5g5adz1.js +1 -0
- package/.next/static/chunks/0thyr1cngc-j..css +1 -0
- package/.next/static/chunks/0ttdb_354lh4t.js +1 -0
- package/.next/static/chunks/0v..ut2v38yep.js +1 -0
- package/.next/static/chunks/{17npklzvg8-~3.js → 0vhj0k-zy6jhh.js} +1 -1
- package/.next/static/chunks/0wdx410~0~gmn.js +1 -0
- package/.next/static/chunks/0y3ptqa0bbi-h.js +1 -0
- package/.next/static/chunks/{0zbxi2grjtx.c.js → 0zx_~u_zxg_7e.js} +1 -1
- package/.next/static/chunks/{0f3kjzb~5zhc~.js → 10pq~97vgkzro.js} +1 -1
- package/.next/static/chunks/11hlk6.h1of0y.js +1 -0
- package/.next/static/chunks/13w_6v~nprp8j.js +11 -0
- package/.next/static/chunks/14-kkni6ecqaw.js +1 -0
- package/.next/static/chunks/{148a9fv~bo0gq.js → 1555iv~_t.1lp.js} +1 -1
- package/.next/static/chunks/{04bbme2th8s1_.js → 15ec5~pa1pv_z.js} +1 -1
- package/.next/static/chunks/15vc-857cdedi.js +1 -0
- package/.next/static/chunks/16zgco6hwlr-n.js +1 -0
- package/.next/types/routes.d.ts +5 -1
- package/.next/types/validator.ts +36 -0
- package/package.json +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__02idks~._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__02idks~._.js.map +0 -1
- package/.next/server/chunks/ssr/_0-8__9s._.js +0 -3
- package/.next/server/chunks/ssr/_0-8__9s._.js.map +0 -1
- package/.next/server/chunks/ssr/_0._ysx3._.js.map +0 -1
- package/.next/server/chunks/ssr/_0.h-tj4._.js +0 -3
- package/.next/server/chunks/ssr/_0.h-tj4._.js.map +0 -1
- package/.next/server/chunks/ssr/_02g4o18._.js +0 -3
- package/.next/server/chunks/ssr/_02g4o18._.js.map +0 -1
- package/.next/server/chunks/ssr/_0463dg_._.js +0 -3
- package/.next/server/chunks/ssr/_0463dg_._.js.map +0 -1
- package/.next/server/chunks/ssr/_04a42pa._.js +0 -3
- package/.next/server/chunks/ssr/_04a42pa._.js.map +0 -1
- package/.next/server/chunks/ssr/_04kt9.8._.js +0 -3
- package/.next/server/chunks/ssr/_04kt9.8._.js.map +0 -1
- package/.next/server/chunks/ssr/_052zlig._.js +0 -3
- package/.next/server/chunks/ssr/_052zlig._.js.map +0 -1
- package/.next/server/chunks/ssr/_060itkv._.js +0 -3
- package/.next/server/chunks/ssr/_060itkv._.js.map +0 -1
- package/.next/server/chunks/ssr/_07p0n9g._.js +0 -3
- package/.next/server/chunks/ssr/_07p0n9g._.js.map +0 -1
- package/.next/server/chunks/ssr/_08mbdt1._.js +0 -3
- package/.next/server/chunks/ssr/_08mbdt1._.js.map +0 -1
- package/.next/server/chunks/ssr/_08r_qwd._.js +0 -3
- package/.next/server/chunks/ssr/_08r_qwd._.js.map +0 -1
- package/.next/server/chunks/ssr/_08xk3kp._.js +0 -3
- package/.next/server/chunks/ssr/_08xk3kp._.js.map +0 -1
- package/.next/server/chunks/ssr/_0938p.1._.js +0 -3
- package/.next/server/chunks/ssr/_0938p.1._.js.map +0 -1
- package/.next/server/chunks/ssr/_0afdsbz._.js +0 -3
- package/.next/server/chunks/ssr/_0afdsbz._.js.map +0 -1
- package/.next/server/chunks/ssr/_0ff5qav._.js +0 -3
- package/.next/server/chunks/ssr/_0ff5qav._.js.map +0 -1
- package/.next/server/chunks/ssr/_0gp8d.p._.js +0 -3
- package/.next/server/chunks/ssr/_0gp8d.p._.js.map +0 -1
- package/.next/server/chunks/ssr/_0k2j6-t._.js +0 -3
- package/.next/server/chunks/ssr/_0k2j6-t._.js.map +0 -1
- package/.next/server/chunks/ssr/_0mix09j._.js +0 -3
- package/.next/server/chunks/ssr/_0mix09j._.js.map +0 -1
- package/.next/server/chunks/ssr/_0mk7dqt._.js +0 -3
- package/.next/server/chunks/ssr/_0mk7dqt._.js.map +0 -1
- package/.next/server/chunks/ssr/_0n168uk._.js +0 -3
- package/.next/server/chunks/ssr/_0n168uk._.js.map +0 -1
- package/.next/server/chunks/ssr/_0nwg6lo._.js +0 -3
- package/.next/server/chunks/ssr/_0nwg6lo._.js.map +0 -1
- package/.next/server/chunks/ssr/_0pwd-nz._.js +0 -3
- package/.next/server/chunks/ssr/_0pwd-nz._.js.map +0 -1
- package/.next/server/chunks/ssr/_0rspzax._.js +0 -3
- package/.next/server/chunks/ssr/_0rspzax._.js.map +0 -1
- package/.next/server/chunks/ssr/_0t-2u_i._.js +0 -3
- package/.next/server/chunks/ssr/_0t-2u_i._.js.map +0 -1
- package/.next/server/chunks/ssr/_0vn5_62._.js +0 -5
- package/.next/server/chunks/ssr/_0vn5_62._.js.map +0 -1
- package/.next/server/chunks/ssr/_0yiz~s5._.js +0 -3
- package/.next/server/chunks/ssr/_0yiz~s5._.js.map +0 -1
- package/.next/server/chunks/ssr/_0~4ta0s._.js +0 -3
- package/.next/server/chunks/ssr/_0~4ta0s._.js.map +0 -1
- package/.next/server/chunks/ssr/_0~5r_8s._.js +0 -3
- package/.next/server/chunks/ssr/_0~5r_8s._.js.map +0 -1
- package/.next/server/chunks/ssr/_115_o9h._.js +0 -3
- package/.next/server/chunks/ssr/_115_o9h._.js.map +0 -1
- package/.next/server/chunks/ssr/_13mk_9n._.js +0 -3
- package/.next/server/chunks/ssr/_13mk_9n._.js.map +0 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_07.4ogy._.js +0 -3
- package/.next/server/chunks/ssr/packages_dashboard_src_07.4ogy._.js.map +0 -1
- package/.next/static/chunks/00p2fat~wl7uz.js +0 -1
- package/.next/static/chunks/07aksg8x5r0d9.js +0 -1
- package/.next/static/chunks/082cjr-p4ubw7.js +0 -1
- package/.next/static/chunks/09hewwcw-ts34.js +0 -1
- package/.next/static/chunks/09j~fmfefj03i.js +0 -1
- package/.next/static/chunks/0adfy5uyh_8c8.js +0 -1
- package/.next/static/chunks/0agoryx~xvt31.js +0 -1
- package/.next/static/chunks/0aoci_z-c0ele.css +0 -1
- package/.next/static/chunks/0atsym5j2dgzw.js +0 -1
- package/.next/static/chunks/0b3tta7tnnbur.js +0 -1
- package/.next/static/chunks/0d02.lqlwe9a_.js +0 -1
- package/.next/static/chunks/0eqyosc.qae5n.js +0 -1
- package/.next/static/chunks/0kkrrex6qm68-.js +0 -1
- package/.next/static/chunks/0lfxqap3b6sar.js +0 -11
- package/.next/static/chunks/0ord2b6oqi.3g.js +0 -1
- package/.next/static/chunks/0rh-ee9ky1ybq.js +0 -1
- package/.next/static/chunks/0t5v~o90gn66f.js +0 -1
- package/.next/static/chunks/0vaymprggmdwi.js +0 -3
- package/.next/static/chunks/0x2vder5-rzy3.js +0 -1
- package/.next/static/chunks/0yk64vsbmwqd8.js +0 -1
- package/.next/static/chunks/0yvzj34_7s6kb.js +0 -1
- package/.next/static/chunks/104za._t2qmr8.js +0 -1
- package/.next/static/chunks/13pe2-ed6nel..js +0 -1
- package/.next/static/chunks/13zn61okwjlyn.js +0 -1
- package/.next/static/chunks/153hm0-366-at.js +0 -1
- package/.next/static/chunks/16k3_-6f7kx97.js +0 -1
- package/.next/static/chunks/18904zqns5ncn.js +0 -1
- package/.next/trace +0 -2
- package/.next/trace-build +0 -1
- /package/.next/server/chunks/{[root-of-the-server]__00gp8gz._.js.map → [root-of-the-server]__01knfi.._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0-0wgko._.js.map → [root-of-the-server]__08_s4yo._.js.map} +0 -0
- /package/.next/static/{CDXVH-99b-ZdHz0Rd9pr_ → lsV2FU1YUtwJPmeiim7tk}/_buildManifest.js +0 -0
- /package/.next/static/{CDXVH-99b-ZdHz0Rd9pr_ → lsV2FU1YUtwJPmeiim7tk}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{CDXVH-99b-ZdHz0Rd9pr_ → lsV2FU1YUtwJPmeiim7tk}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[82740,a=>{"use strict";let b=(0,a.i(5423).default)("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);a.s(["ExternalLink",0,b],82740)},78933,a=>{"use strict";var b=a.i(34542),c=a.i(81130),d=a.i(59974);a.s(["useSaveConfig",0,function(){let a=(0,c.useQueryClient)(),[e,f]=(0,b.useState)(null),g=(0,b.useCallback)((a,b)=>{f({type:a,message:b}),setTimeout(()=>f(null),4e3)},[]),h=(0,b.useCallback)((a,b)=>{let c=Object.values(a.errors??{});c.length>0?g("warning",c.join(" ")):a.requiresRestart?.length>0?g("warning",`Updated. Restart daemon for: ${a.requiresRestart.join(", ")}`):g("success",b)},[g]),i=(0,b.useCallback)(async(b,c)=>{try{let e=await d.api.patch("/config",{[b]:c});a.invalidateQueries({queryKey:["config"]}),h(e,"Setting updated")}catch(a){throw g("error",`Failed to save: ${a instanceof Error?a.message:"Unknown error"}`),a}},[a,h,g]),j=(0,b.useCallback)(async b=>{try{let c=await d.api.patch("/config",b);a.invalidateQueries({queryKey:["config"]}),h(c,"Settings updated")}catch(a){throw g("error",`Failed to save: ${a instanceof Error?a.message:"Unknown error"}`),a}},[a,h,g]);return{toast:e,showToast:g,saveField:i,saveMultipleFields:j,patchConfig:(0,b.useCallback)(async b=>{let c=await d.api.patch("/config",b);return a.invalidateQueries({queryKey:["config"]}),c},[a])}}])},86807,a=>{"use strict";var b=a.i(39752),c=a.i(48558);a.s(["ConnectionsSectionHeader",0,function({title:a,description:d,healthy:e,total:f,attention:g,actions:h}){let i=f>0&&e===f,j=f>0&&0===e;return(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsxs)("div",{className:"flex items-baseline justify-between gap-3",children:[(0,b.jsx)("h1",{className:"text-2xl font-semibold text-foreground",children:a}),(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[f>0&&(0,b.jsxs)("span",{className:(0,c.cn)("text-xs font-medium tabular-nums",i?"text-emerald-600 dark:text-emerald-400":j?"text-muted-foreground":"text-amber-600 dark:text-amber-400"),children:[e,"/",f," connected"]}),h]})]}),d&&(0,b.jsx)("p",{className:"max-w-3xl text-sm text-muted-foreground",children:d}),g&&(0,b.jsx)("p",{className:"text-xs text-amber-600 dark:text-amber-400",children:g})]})}])},95827,a=>{"use strict";var b=a.i(39752),c=a.i(7384),d=a.i(30400),e=a.i(48558);let f={connected:{variant:"green",label:"Connected"},configured:{variant:"amber",label:"Configured"},connecting:{variant:"amber",label:"Connecting…"},"needs-setup":{variant:"gray",label:"Not Configured"},error:{variant:"red",label:"Error"},disabled:{variant:"gray",label:"Disabled"}};a.s(["ConnectionCard",0,function({name:a,icon:g,status:h,error:i,metadata:j,children:k,className:l}){let m=f[h];return(0,b.jsxs)(d.Card,{tone:"connected"===h?"success":"error"===h?"error":"default",className:(0,e.cn)("relative",l),children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:g}),(0,b.jsx)("h3",{className:"text-sm font-medium text-foreground",children:a})]}),(0,b.jsx)(c.Badge,{variant:m.variant,children:m.label})]}),i&&"connecting"!==h&&(0,b.jsx)("p",{className:"mb-2 text-xs text-red-600 dark:text-red-400",children:i}),j&&j.length>0&&(0,b.jsx)("div",{className:"mb-3 space-y-0.5",children:j.map(a=>(0,b.jsxs)("div",{className:"flex items-center justify-between text-xs",children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:a.label}),(0,b.jsx)("span",{className:"text-foreground",children:a.value})]},a.label))}),k]})},"deriveConfiguredStatus",0,function(a){return a?"configured":"needs-setup"},"deriveIntegrationStatus",0,function(a){return a&&a.configured?a.error?"error":a.connected?"connected":"configured":"needs-setup"},"deriveMessagingStatus",0,function(a){return a&&"not_configured"!==a.runtimeState?"connecting"===a.runtimeState?"connecting":"error"===a.runtimeState?"error":"ok"===a.runtimeState?"connected":"configured":"needs-setup"},"messagingMetadata",0,function(a){if(a)return[{label:"Owner configured",value:a.ownerConfigured?"yes":"no"},{label:"Owner channel known",value:a.ownerChannelKnown?"yes":"no"},{label:"Reminder eligible",value:a.notificationEligible?"yes":"no"},{label:"Last inbound",value:a.lastInboundAt??"—"}]}])},8735,a=>{"use strict";let b=(0,a.i(5423).default)("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]]);a.s(["Upload",0,b],8735)},40091,a=>{"use strict";let b={claude:"Claude Code",codex:"OpenAI Codex",gemini:"Gemini CLI"},c={claude:"Claude",codex:"Codex",gemini:"Gemini"},d={claude:"orange",codex:"pink",gemini:"blue"},e={"routine.morning_routine":"Morning Routine","routine.evening_review":"Evening Review","routine.weekly_review":"Weekly Review","routine.monthly_review":"Monthly Review","routine.hourly_check":"Hourly Check","routine.roadmap_refresh":"Roadmap Refresh","message.dm":"Direct Messages","message.mention":"Mentions","dashboard.chat":"Dashboard Chat","agent.task":"Scheduled Tasks","calendar.change":"Calendar Events",gmail_classify:"Gmail Classification","github.pull_request.review_requested":"GitHub Review Requests","github.assigned":"GitHub Assignments","github.security_alert":"GitHub Security Alerts","github.workflow_run.failed":"GitHub CI Failures","wiki.ingest_url":"Wiki URL Ingest","wiki.compile":"Wiki Compile","wiki.ask":"Wiki Ask"};function f(a){let b;if(!a)return[];try{b=JSON.parse(a)}catch{return[]}if(!b||"object"!=typeof b)return[];let c=[];for(let[a,d]of Object.entries(b))d&&"object"==typeof d&&c.push({modelId:a,inputTokens:"number"==typeof d.inputTokens?d.inputTokens:0,outputTokens:"number"==typeof d.outputTokens?d.outputTokens:0,costUsd:"number"==typeof d.costUsd?d.costUsd:0});return c.sort((a,b)=>b.costUsd-a.costUsd)}function g(a){if(!a)return null;let b=a.toLowerCase();return b.includes("claude")||b.includes("sonnet")||b.includes("opus")||b.includes("haiku")?"claude":b.includes("gemini")?"gemini":b.includes("gpt")||b.includes("codex")||b.includes("o3")||b.includes("o4")?"codex":null}a.s(["BACKEND_BADGE_VARIANTS",0,d,"BACKEND_LABELS",0,b,"BACKEND_PROVIDER_LABELS",0,{claude:"Claude (Anthropic)",codex:"ChatGPT (OpenAI)",gemini:"Gemini (Google)"},"BACKEND_PROVIDER_SHORT",0,{claude:"Claude",codex:"ChatGPT",gemini:"Gemini"},"BACKEND_WEB_SEARCH_DESCRIPTIONS",0,{claude:"Lets the agent call Anthropic's built-in WebSearch tool.",codex:"Lets the agent call OpenAI's web_search tool. Works in safe (sandbox) mode — the tool runs at OpenAI, not as a local shell command.",gemini:"Lets the agent call Gemini's google_web_search tool."},"detectBackendFromModel",0,g,"formatModelName",0,function(a){return a?a.replace(/^claude-/,"Claude ").replace(/^gpt-/,"GPT-").replace(/^gemini-/,"Gemini ").replace(/-/g," ").replace(/\bpreview\b/gi,"(preview)").replace(/\bpro\b/gi,"Pro").replace(/\bflash\b/gi,"Flash").replace(/\blite\b/gi,"Lite").replace(/\bmini\b/gi,"Mini").replace(/\bcodex\b/gi,"Codex").replace(/\bopus\b/gi,"Opus").replace(/\bsonnet\b/gi,"Sonnet").replace(/\bhaiku\b/gi,"Haiku").replace(/\s+/g," ").trim():"Not set"},"formatShortModelName",0,function(a){if(!a)return"unknown";if("opus"===a)return"Opus";if("sonnet"===a)return"Sonnet";let b=a.replace(/-\d{8,}$/,"").replace(/^claude-/,"").replace(/(\d+)-(\d+)(?![-\d])/g,"$1.$2").replace(/-/g," ");return a.startsWith("gpt-")&&(b=`GPT-${b.replace(/^gpt\s*/i,"")}`),a.startsWith("gemini-")&&(b=b.replace(/^gemini\s*/i,"Gemini ")),b.replace(/\bopus\b/gi,"Opus").replace(/\bsonnet\b/gi,"Sonnet").replace(/\bhaiku\b/gi,"Haiku").replace(/\bpro\b/gi,"Pro").replace(/\bflash\b/gi,"Flash").replace(/\blite\b/gi,"Lite").replace(/\bmini\b/gi,"Mini").replace(/\s+/g," ").trim()},"getBackendLabel",0,function(a){return b[a]},"getBackendShortLabel",0,function(a){return c[a]},"getProcessGroup",0,function(a){return a.startsWith("wiki.")?"Wiki":a.startsWith("message.")||a.startsWith("dashboard.")?"Conversation":a.startsWith("routine.")?"Routines":a.startsWith("git.")||a.startsWith("github.")?"Git & GitHub":a.startsWith("calendar.")||"gmail_classify"===a?"Integrations":"Tasks"},"getProcessLabel",0,function(a){return e[a]??a},"modelBadgeVariant",0,function(a){if(!a)return"gray";let b=g(a);return b?d[b]:"gray"},"parseModelUsage",0,f,"pickDisplayModel",0,function(a,b){let c=f(b);return c.length>0&&c[0]?c[0].modelId:a??null}])},39293,a=>{"use strict";let b=(0,a.i(5423).default)("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);a.s(["RefreshCw",0,b],39293)},74794,a=>{"use strict";var b=a.i(62588),c=a.i(59974);a.s(["useBackends",0,function(a){return(0,b.useQuery)({queryKey:["backends"],queryFn:()=>c.api.get("/backends"),enabled:a?.enabled??!0,staleTime:6e4})}])},7037,a=>{"use strict";let b=(0,a.i(5423).default)("Pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);a.s(["Pencil",0,b],7037)},95024,a=>{"use strict";let b=(0,a.i(5423).default)("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);a.s(["Save",0,b],95024)},48033,a=>{"use strict";let b=(0,a.i(5423).default)("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);a.s(["Lock",0,b],48033)},7385,a=>{"use strict";let b=(0,a.i(5423).default)("CircleX",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);a.s(["XCircle",0,b],7385)},95097,a=>{"use strict";var b=a.i(62588),c=a.i(59974);a.s(["useProcessConfig",0,function(a){return(0,b.useQuery)({queryKey:["process-config"],queryFn:()=>c.api.get("/process-config"),enabled:a?.enabled??!0,staleTime:6e4})}])},80196,a=>{"use strict";let b=(0,a.i(5423).default)("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);a.s(["Bot",0,b],80196)},33165,a=>{"use strict";var b=a.i(39752),c=a.i(34542),d=a.i(81130),e=a.i(80196),f=a.i(92241),g=a.i(7037),h=a.i(95024),i=a.i(7385),j=a.i(30400),k=a.i(21218),l=a.i(7384),m=a.i(29629),n=a.i(47696),o=a.i(59974),p=a.i(74794),q=a.i(95097),r=a.i(40091);a.s(["ProcessModelCard",0,function({processKey:a,title:s="AI Model",description:t}){let u=(0,d.useQueryClient)(),{data:v}=(0,p.useBackends)(),{data:w}=(0,q.useProcessConfig)(),[x,y]=(0,c.useState)(!1),[z,A]=(0,c.useState)(null),[B,C]=(0,c.useState)(null),[D,E]=(0,c.useState)(!1),[F,G]=(0,c.useState)(null),H=w?.configs.find(b=>b.processKey===a),I=new Map((v?.backends??[]).map(a=>[a.id,a])),J=(v?.backends??[]).filter(a=>a.enabled);if(!v||!w||!H)return null;let K=I.get(H.mainBackend),L=K?.models.find(a=>a.modelId===H.mainModel)?.label??(0,r.formatModelName)(H.mainModel),M=z?I.get(z):null,N=M?.models??[];async function O(){if(z&&B){E(!0),G(null);try{await o.api.put(`/process-config/${a}`,{mainBackend:z,mainModel:B,fallbackBackend:H.fallbackBackend,fallbackModel:H.fallbackModel,maxTurns:H.maxTurns,maxBudgetUsd:H.maxBudgetUsd}),await u.invalidateQueries({queryKey:["process-config"]}),G({type:"success",message:"Saved"}),y(!1)}catch(b){let a=b instanceof o.ApiError?b.body:null;G({type:"error",message:"string"==typeof a?.error?a.error:b instanceof Error?b.message:"Save failed"})}finally{E(!1)}}}return(0,b.jsxs)(j.Card,{children:[(0,b.jsxs)(j.CardHeader,{children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(e.Bot,{className:"h-4 w-4 text-muted-foreground"}),(0,b.jsx)(j.CardTitle,{className:"text-base",children:s}),"user"===H.updatedBy&&(0,b.jsx)(l.Badge,{variant:"blue",className:"text-xs",children:"Custom"})]}),!x&&(0,b.jsxs)(k.Button,{variant:"ghost",size:"sm",onClick:function(){A(H.mainBackend),C(H.mainModel),G(null),y(!0)},className:"h-8",children:[(0,b.jsx)(g.Pencil,{className:"h-3.5 w-3.5"}),"Edit"]})]}),!x&&(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-sm",children:[(0,b.jsx)(l.Badge,{variant:r.BACKEND_BADGE_VARIANTS[H.mainBackend],children:(0,r.getBackendLabel)(H.mainBackend)}),(0,b.jsx)("span",{className:"text-muted-foreground",children:L}),(0,b.jsx)(l.Badge,{variant:"high"===H.defaultTier?"purple":"medium"===H.defaultTier?"blue":"default",className:"text-xs",children:H.defaultTier})]}),t&&(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:t})]}),x&&(0,b.jsxs)("div",{className:"mt-1 space-y-3",children:[(0,b.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,b.jsxs)("div",{className:"space-y-1.5",children:[(0,b.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"Backend"}),(0,b.jsxs)(n.Select,{value:z??"",onValueChange:a=>(function(a){var b,c;let d,e=I.get(a);if(!e)return;A(a);let f=(b=e.models,c=H.defaultTier,(d=b.filter(a=>a.tier===c)).length>0?d:b);C(f[0]?.modelId??e.models[0]?.modelId??"")})(a),children:[(0,b.jsx)(n.SelectTrigger,{children:(0,b.jsx)(n.SelectValue,{})}),(0,b.jsx)(n.SelectContent,{children:J.map(a=>(0,b.jsx)(n.SelectItem,{value:a.id,children:(0,r.getBackendLabel)(a.id)},a.id))})]})]}),(0,b.jsxs)("div",{className:"space-y-1.5",children:[(0,b.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"Model"}),(0,b.jsxs)(n.Select,{value:B??"",onValueChange:a=>C(a),children:[(0,b.jsx)(n.SelectTrigger,{children:(0,b.jsx)(n.SelectValue,{})}),(0,b.jsx)(n.SelectContent,{children:N.map(a=>(0,b.jsx)(n.SelectItem,{value:a.modelId,children:a.label},a.modelId))})]})]})]}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsxs)(k.Button,{variant:"outline",size:"sm",onClick:function(){y(!1),A(null),C(null)},disabled:D,children:[(0,b.jsx)(i.XCircle,{className:"h-3.5 w-3.5"}),"Cancel"]}),(0,b.jsxs)(k.Button,{size:"sm",onClick:()=>{O()},disabled:D||!B,children:[D?(0,b.jsx)(f.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(h.Save,{className:"h-3.5 w-3.5"}),"Save"]})]})]}),F&&(0,b.jsx)(m.Alert,{variant:"success"===F.type?"success":"error",className:"mt-3",children:F.message})]})}])},3251,a=>{"use strict";var b=a.i(39752),c=a.i(34542),d=a.i(81130),e=a.i(54150),f=a.i(40410),g=a.i(78933),h=a.i(59974),i=a.i(21218),j=a.i(29629),k=a.i(57216),l=a.i(78019),m=a.i(8735),n=a.i(82687),o=a.i(82740),p=a.i(48558),q=a.i(56295),r=a.i(95827);function s({label:a,accept:d,onUpload:e,configured:f}){let[g,h]=(0,c.useState)(!1),[k,l]=(0,c.useState)(null),o=(0,c.useRef)(null),p=(0,c.useCallback)(async a=>{h(!0),l(null);try{await e(a),l({type:"success",fileName:a.name})}catch(a){l({type:"error",message:a instanceof Error?a.message:"Upload failed"})}finally{h(!1)}},[e]);return(0,b.jsxs)("div",{className:"space-y-1.5",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{ref:o,type:"file",accept:d,className:"hidden",onChange:a=>{let b=a.target.files?.[0];b&&p(b),a.target.value=""}}),(0,b.jsxs)(i.Button,{size:"sm",variant:f?"outline":"default",onClick:()=>o.current?.click(),disabled:g,className:"text-xs",children:[(0,b.jsx)(m.Upload,{className:"h-3.5 w-3.5 mr-1"}),g?"Uploading...":a]}),f&&(0,b.jsx)(n.CheckCircle2,{className:"h-4 w-4 text-emerald-500"})]}),k&&(0,b.jsx)(j.Alert,{variant:"success"===k.type?"success":"error",children:"success"===k.type?(0,b.jsxs)("span",{className:"block break-all",title:k.fileName,children:[function(a,b=36){if(a.length<=b)return a;let c=Math.floor((b-1)/2);return`${a.slice(0,b-1-c)}…${a.slice(-c)}`}(k.fileName)," uploaded"]}):(0,b.jsx)("span",{className:"block break-all",children:k.message})})]})}function t(){return(0,b.jsxs)("svg",{className:"h-4 w-4",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,b.jsx)("path",{d:"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1Z",fill:"#4285F4"}),(0,b.jsx)("path",{d:"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23Z",fill:"#34A853"}),(0,b.jsx)("path",{d:"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18A10.96 10.96 0 0 0 1 12c0 1.77.42 3.45 1.18 4.93l3.66-2.84Z",fill:"#FBBC05"}),(0,b.jsx)("path",{d:"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53Z",fill:"#EA4335"})]})}a.s(["GoogleCard",0,function(){let{data:a}=(0,e.useConfig)(),{data:m}=(0,f.useHealth)(),{toast:u,saveField:v}=(0,g.useSaveConfig)(),w=(0,d.useQueryClient)(),x=m?.integrations?.google,[y,z]=(0,c.useState)(!1),[A,B]=(0,c.useState)(null),C=(0,c.useRef)(null),D=a?.googleCalendarCredentialsConfigured??!1,E=a?.googleCalendarTokenConfigured??!1,F=a?.googleCredentialType==="service_account",G=async a=>{await h.api.upload("/config/upload/google-credentials",a),w.invalidateQueries({queryKey:["config"]}),w.invalidateQueries({queryKey:["health"]})};(0,c.useEffect)(()=>()=>{C.current&&clearInterval(C.current)},[]),(0,c.useEffect)(()=>{let a=a=>{a.origin.startsWith("http://localhost")&&a.data?.type==="google-auth-success"&&(C.current&&(clearInterval(C.current),C.current=null),z(!1),w.invalidateQueries({queryKey:["config"]}),w.invalidateQueries({queryKey:["health"]}))};return window.addEventListener("message",a),()=>window.removeEventListener("message",a)},[w]);let H=async()=>{z(!0),B(null);try{let a=await h.api.post("/config/google-auth/start"),b=window.open(a.authUrl,"google-auth","width=600,height=700");if(!b){B("Popup blocked. Allow popups for this site and try again."),z(!1);return}C.current=setInterval(()=>{b.closed&&(C.current&&(clearInterval(C.current),C.current=null),z(!1),w.invalidateQueries({queryKey:["config"]}),w.invalidateQueries({queryKey:["health"]}))},1e3)}catch(a){B(a instanceof Error?a.message:"Failed to start authorization"),z(!1)}};if(!a||!m)return null;let I=x?.services?.calendar,J=x?.services?.gmail,K=y?"connecting":(0,r.deriveIntegrationStatus)(x);return(0,b.jsxs)(r.ConnectionCard,{name:"Google",icon:(0,b.jsx)(t,{}),status:K,error:x?.error,children:[x?.configured&&(0,b.jsxs)("div",{className:"flex gap-4 mb-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-1.5 text-xs",children:[(0,b.jsx)("span",{className:(0,p.cn)("inline-block h-2 w-2 rounded-full",I?.connected?"bg-emerald-500":"bg-gray-300 dark:bg-gray-600")}),(0,b.jsx)("span",{className:"text-muted-foreground",children:"Calendar"}),(0,b.jsx)("span",{className:I?.connected?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground",children:I?.connected?"Active":"Inactive"})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5 text-xs",children:[(0,b.jsx)("span",{className:(0,p.cn)("inline-block h-2 w-2 rounded-full",J?.connected?"bg-emerald-500":"bg-gray-300 dark:bg-gray-600")}),(0,b.jsx)("span",{className:"text-muted-foreground",children:"Gmail"}),(0,b.jsx)("span",{className:J?.connected?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground",children:J?.connected?"Active":"Not yet implemented"})]})]}),(0,b.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"1. Upload credentials"}),(0,b.jsx)(s,{label:"Credentials JSON",accept:".json,application/json",onUpload:G,configured:D})]}),!F&&(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"2. Authorize"}),(0,b.jsxs)(i.Button,{size:"sm",variant:E?"outline":"default",onClick:H,disabled:!D||y,className:"text-xs",children:[(0,b.jsx)(o.ExternalLink,{className:"h-3.5 w-3.5 mr-1"}),y?"Waiting...":E?"Re-authorize":"Authorize with Google"]}),E&&(0,b.jsx)(n.CheckCircle2,{className:"inline-block ml-2 h-4 w-4 text-emerald-500"}),A&&(0,b.jsx)(j.Alert,{variant:"error",className:"mt-1",children:A}),!D&&(0,b.jsx)("p",{className:"text-xs text-muted-foreground mt-1",children:"Upload credentials first"})]})]}),!x?.connected&&D&&(F||E)&&(0,b.jsxs)(j.Alert,{variant:"warning",className:"mt-3",children:[F?"Service account configured.":"Authorized."," Restart the daemon to connect."]}),(0,b.jsxs)(k.Collapsible,{children:[(0,b.jsxs)(k.CollapsibleTrigger,{className:"flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground mt-3",children:["Advanced setup notes ",(0,b.jsx)(l.ChevronDown,{className:"h-3 w-3"})]}),(0,b.jsx)(k.CollapsibleContent,{children:(0,b.jsxs)("div",{className:"mt-2 rounded bg-muted/50 p-2 space-y-1 text-xs",children:[(0,b.jsx)("p",{className:"font-medium text-muted-foreground",children:"Secrets are stored in the macOS Keychain."}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"Use the upload button above for credentials JSON, then complete OAuth in the browser."}),(0,b.jsx)("p",{className:"text-muted-foreground mt-1",children:"Same credentials are used for Calendar and Gmail (scopes: calendar, gmail.modify, gmail.send)."}),(0,b.jsx)("p",{className:"text-muted-foreground",children:'Calendar ID defaults to "primary" and can be changed below.'})]})})]}),x?.configured&&(0,b.jsxs)("div",{className:"mt-3 pt-3 border-t border-border",children:[u&&(0,b.jsx)(j.Alert,{variant:u.type,className:"mb-2",children:u.message}),(0,b.jsx)(q.EditableField,{label:"Calendar ID",value:a.googleCalendarId,configKey:"googleCalendarId",description:'Use "primary" for your main calendar, or paste a full calendar ID (e.g. abc123@group.calendar.google.com) for a secondary or shared calendar.',onSave:v})]})]})}])},29784,a=>{"use strict";var b=a.i(39752),c=a.i(54150),d=a.i(40410),e=a.i(34542),f=a.i(55609),g=a.i(82740),h=a.i(59974),i=a.i(28314),j=a.i(29629),k=a.i(7384),l=a.i(21218),m=a.i(30400),n=a.i(8212),o=a.i(23780);function p(){let a=(0,i.useConfirm)(),[c,d]=(0,e.useState)(null),[p,q]=(0,e.useState)([]),[r,s]=(0,e.useState)(null),[t,u]=(0,e.useState)(""),[v,w]=(0,e.useState)(""),[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(null),[B,C]=(0,e.useState)(null),D=(0,e.useCallback)(async()=>{try{let a=await h.api.get("/apple-calendar/status");if(d(a),a.available)try{let a=await h.api.get("/apple-calendar/calendars");q(a.calendars),s(null)}catch(a){q([]),s(a instanceof Error?a.message:"Failed to load calendars")}else q([]),s(null)}catch{d(null)}},[]);(0,e.useEffect)(()=>{D()},[D]);let E=async()=>{y(!0),A(null),C(null);try{let a=await h.api.post("/apple-calendar/credentials",{email:t.trim(),appPassword:v.trim()});C(`Connected as ${a.email}. ${a.calendars.length} calendar${1===a.calendars.length?"":"s"} discovered.`),u(""),w(""),await D()}catch(a){A(a instanceof h.ApiError||a instanceof Error?a.message:"Failed to connect")}finally{y(!1)}},F=async()=>{if(await a({title:"Disconnect Apple Calendar?",description:"The app-specific password will be removed from the OS keychain. The agent will no longer be able to read or write your iCloud calendar until you reconnect.",confirmLabel:"Disconnect"})){y(!0),A(null),C(null);try{await h.api.delete("/apple-calendar/credentials"),C("Apple Calendar disconnected."),await D()}catch(a){A(a instanceof Error?a.message:"Failed to disconnect")}finally{y(!1)}}},G=async a=>{y(!0),A(null);try{let b=await h.api.post("/apple-calendar/default-calendar",{calendarUrl:a});q(b.calendars)}catch(a){A(a instanceof Error?a.message:"Failed to set primary")}finally{y(!1)}},H=c?.available?"success":c?.configured?"warning":"default",I=c?.available?"Connected":c?.configured?"Auth issue":"Not connected",J=c?.available?"green":c?.configured?"amber":"gray";return(0,b.jsxs)(m.Card,{tone:H,children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,b.jsx)(f.Calendar,{className:"h-4 w-4 text-muted-foreground shrink-0"}),(0,b.jsx)("h3",{className:"text-base font-semibold text-foreground truncate",children:"Apple Calendar (iCloud)"})]}),(0,b.jsx)(k.Badge,{variant:J,children:I})]}),(0,b.jsx)("p",{className:"mt-1 text-sm text-muted-foreground",children:"Read and write events on the user's iCloud calendar over CalDAV. The daemon authenticates with an Apple-ID app-specific password — the same kind used by iCloud Mail — and stores it in the OS keychain."}),(0,b.jsx)(o.Separator,{className:"my-4"}),!c?.available&&(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsxs)("div",{className:"rounded-md border border-dashed border-border p-3 text-xs space-y-2",children:[(0,b.jsx)("p",{className:"text-foreground font-medium",children:"Step 1: Generate an app-specific password"}),(0,b.jsxs)("p",{className:"text-muted-foreground",children:["Apple only allows app-specific passwords on Apple IDs that have two-factor authentication turned on."," ",(0,b.jsxs)("a",{href:"https://account.apple.com",target:"_blank",rel:"noreferrer",className:"underline inline-flex items-center gap-0.5",children:["Open Apple Account ",(0,b.jsx)(g.ExternalLink,{className:"h-3 w-3"})]}),", then go to ",(0,b.jsx)("strong",{children:"Sign-In and Security"})," →"," ",(0,b.jsx)("strong",{children:"App-Specific Passwords"})," →"," ",(0,b.jsx)("strong",{children:"Generate an app-specific password"}),"."]}),(0,b.jsxs)("p",{className:"text-muted-foreground",children:["Apple shows a 19-character password in the form"," ",(0,b.jsx)("code",{children:"xxxx-xxxx-xxxx-xxxx"}),". Copy it exactly — the dashes are required."]})]}),(0,b.jsxs)("div",{className:"rounded-md border border-border p-3 space-y-2",children:[(0,b.jsx)("p",{className:"text-xs font-semibold text-foreground",children:"Step 2: Authenticate"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:"apple-cal-email",children:"Apple ID email"}),(0,b.jsx)(n.Input,{id:"apple-cal-email",value:t,onChange:a=>u(a.target.value),placeholder:"you@icloud.com",className:"h-8 text-xs",autoComplete:"username"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:"apple-cal-password",children:"App-specific password"}),(0,b.jsx)(n.Input,{id:"apple-cal-password",type:"password",value:v,onChange:a=>w(a.target.value),placeholder:"xxxx-xxxx-xxxx-xxxx",className:"h-8 text-xs",autoComplete:"current-password"}),(0,b.jsx)("p",{className:"mt-1 text-[11px] text-muted-foreground",children:"Format: xxxx-xxxx-xxxx-xxxx. Dashes are required — paste, don't retype."})]}),(0,b.jsx)(l.Button,{size:"sm",onClick:()=>void E(),disabled:x||0===t.trim().length||0===v.trim().length,className:"h-7 text-xs px-3",children:x?"Authenticating…":"Authenticate"})]})]}),c?.available&&0===p.length&&(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)(j.Alert,{variant:"warning",children:r?`Could not load the calendar list — ${r}. Try refreshing the page; if the error persists, disconnect and re-authenticate.`:"Connected, but no calendars are visible. iCloud may still be syncing — refresh in a moment."}),(0,b.jsx)(l.Button,{size:"sm",variant:"ghost",onClick:()=>void F(),disabled:x,className:"h-7 text-xs px-3 text-destructive",children:"Disconnect"})]}),c?.available&&p.length>0&&(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)("p",{className:"text-xs font-medium text-foreground",children:"Calendars"}),(0,b.jsx)("ul",{className:"rounded-md border border-border divide-y divide-border",children:p.map(a=>(0,b.jsxs)("li",{className:"flex items-center justify-between px-3 py-2 text-xs",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"font-medium truncate",children:a.summary}),a.description&&(0,b.jsx)("div",{className:"text-muted-foreground truncate",children:a.description})]}),a.primary?(0,b.jsx)(k.Badge,{variant:"green",children:"Primary"}):(0,b.jsx)(l.Button,{size:"sm",variant:"ghost",className:"h-6 text-[11px] px-2",disabled:x,onClick:()=>void G(a.id),children:"Set primary"})]},a.id))}),(0,b.jsx)(l.Button,{size:"sm",variant:"ghost",onClick:()=>void F(),disabled:x,className:"h-7 text-xs px-3 text-destructive",children:"Disconnect"})]}),B&&(0,b.jsx)(j.Alert,{variant:"success",className:"mt-3",children:B}),z&&(0,b.jsx)(j.Alert,{variant:"error",className:"mt-3",children:z})]})}var q=a.i(3251),r=a.i(36581);function s(){let{data:a}=(0,c.useConfig)(),{data:e}=(0,d.useHealth)();return a&&e?(0,b.jsx)(r.IntegrationCard,{integrationKey:"outlook_calendar"}):null}var t=a.i(33165),u=a.i(86807);a.s(["default",0,function(){let{data:a,isLoading:e}=(0,c.useConfig)(),{data:f,isLoading:g}=(0,d.useHealth)(),h=e||g,i=!h&&(!a||!f),j=f?.integrations?.google?.services?.calendar?.connected??!1,k=f?.integrationModes?.google_calendar?.mode==="delegated";return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(u.ConnectionsSectionHeader,{title:"Calendar",description:"Calendar providers — Google, Outlook, and Apple. Google + Outlook OAuth are shared with the matching Mail account; per-mailbox management lives under Mail.",healthy:+!!j,total:1}),i&&(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:"Daemon not connected. Start the daemon to configure calendar access."}),!h&&(0,b.jsxs)("div",{id:"google",className:"space-y-4",children:[(0,b.jsx)(r.IntegrationCard,{integrationKey:"google_calendar"}),(0,b.jsx)(q.GoogleCard,{}),!k&&(0,b.jsx)(t.ProcessModelCard,{processKey:"calendar.change",title:"Calendar Event Model",description:"Model used when the agent processes calendar change events. Light-tier is recommended — classification and scheduling are well within Sonnet / GPT-5.4 Mini capabilities."})]}),!h&&(0,b.jsx)("div",{id:"outlook",className:"space-y-4",children:(0,b.jsx)(s,{})}),!h&&(0,b.jsx)("div",{id:"apple",className:"space-y-4",children:(0,b.jsx)(p,{})})]})}],29784)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=_0-6jgyg._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/external-link.ts","../../../../../../packages/dashboard/src/lib/hooks/use-save-config.ts","../../../../../../packages/dashboard/src/components/connections/section-header.tsx","../../../../../../packages/dashboard/src/components/connections/connection-card.tsx","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/upload.ts","../../../../../../packages/dashboard/src/lib/backend-ui.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/refresh-cw.ts","../../../../../../packages/dashboard/src/lib/hooks/use-backends.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/pencil.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/save.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/lock.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/circle-x.ts","../../../../../../packages/dashboard/src/lib/hooks/use-process-config.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/bot.ts","../../../../../../packages/dashboard/src/components/connections/process-model-card.tsx","../../../../../../packages/dashboard/src/components/connections/google-card.tsx","../../../../../../packages/dashboard/src/app/connections/calendar/page.tsx","../../../../../../packages/dashboard/src/components/connections/apple-calendar-card.tsx","../../../../../../packages/dashboard/src/components/connections/outlook-calendar-card.tsx"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ExternalLink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/external-link\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 ExternalLink = createLucideIcon('ExternalLink', [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'M10 14 21 3', key: 'gplh6r' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6', key: 'a6xqqp' }],\n]);\n\nexport default ExternalLink;\n","\"use client\";\n\nimport { useCallback, useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\nimport type { ConfigUpdateResponse } from \"@/lib/api-types\";\nimport type { SettingsToastState } from \"@/components/settings/settings-navigation\";\nimport type { EditableConfigKey } from \"@aitne/shared\";\n\nexport type ConfigValue =\n | string\n | number\n | boolean\n | string[]\n | Record<string, unknown>[]\n | null;\n\nexport type SaveFieldFn = (\n key: EditableConfigKey,\n value: ConfigValue,\n) => Promise<void>;\n\nexport function useSaveConfig() {\n const queryClient = useQueryClient();\n const [toast, setToast] = useState<SettingsToastState | null>(null);\n\n const showToast = useCallback(\n (type: SettingsToastState[\"type\"], message: string) => {\n setToast({ type, message });\n setTimeout(() => setToast(null), 4000);\n },\n [],\n );\n\n const interpret = useCallback(\n (res: ConfigUpdateResponse, successMessage: string) => {\n const warnings = Object.values(res.errors ?? {});\n if (warnings.length > 0) {\n showToast(\"warning\", warnings.join(\" \"));\n } else if (res.requiresRestart?.length > 0) {\n showToast(\n \"warning\",\n `Updated. Restart daemon for: ${res.requiresRestart.join(\", \")}`,\n );\n } else {\n showToast(\"success\", successMessage);\n }\n },\n [showToast],\n );\n\n const saveField = useCallback(\n async (key: EditableConfigKey, value: ConfigValue) => {\n try {\n const res = await api.patch<ConfigUpdateResponse>(\"/config\", {\n [key]: value,\n });\n queryClient.invalidateQueries({ queryKey: [\"config\"] });\n interpret(res, \"Setting updated\");\n } catch (e) {\n showToast(\n \"error\",\n `Failed to save: ${e instanceof Error ? e.message : \"Unknown error\"}`,\n );\n throw e;\n }\n },\n [queryClient, interpret, showToast],\n );\n\n const saveMultipleFields = useCallback(\n async (updates: Partial<Record<EditableConfigKey, ConfigValue>>) => {\n try {\n const res = await api.patch<ConfigUpdateResponse>(\"/config\", updates);\n queryClient.invalidateQueries({ queryKey: [\"config\"] });\n interpret(res, \"Settings updated\");\n } catch (e) {\n showToast(\n \"error\",\n `Failed to save: ${e instanceof Error ? e.message : \"Unknown error\"}`,\n );\n throw e;\n }\n },\n [queryClient, interpret, showToast],\n );\n\n /**\n * Lower-level PATCH /config — makes the API call and invalidates queries\n * but does NOT show a toast. Used by SettingsSaveBar which handles its\n * own feedback.\n */\n const patchConfig = useCallback(\n async (updates: Partial<Record<EditableConfigKey, ConfigValue>>) => {\n const res = await api.patch<ConfigUpdateResponse>(\"/config\", updates);\n queryClient.invalidateQueries({ queryKey: [\"config\"] });\n return res;\n },\n [queryClient],\n );\n\n return { toast, showToast, saveField, saveMultipleFields, patchConfig };\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface ConnectionsSectionHeaderProps {\n title: string;\n description?: ReactNode;\n /** Number of entries that are live/healthy. */\n healthy: number;\n /** Total entries in this section. */\n total: number;\n /** Optional short note about the remainder, e.g. \"WhatsApp needs re-pairing\". */\n attention?: string | null;\n /** Optional right-aligned action element (e.g. an \"Add\" button). */\n actions?: ReactNode;\n}\n\nexport function ConnectionsSectionHeader({\n title,\n description,\n healthy,\n total,\n attention,\n actions,\n}: ConnectionsSectionHeaderProps) {\n const allHealthy = total > 0 && healthy === total;\n const noneHealthy = total > 0 && healthy === 0;\n\n return (\n <div className=\"space-y-1\">\n <div className=\"flex items-baseline justify-between gap-3\">\n <h1 className=\"text-2xl font-semibold text-foreground\">{title}</h1>\n <div className=\"flex items-center gap-3\">\n {total > 0 && (\n <span\n className={cn(\n \"text-xs font-medium tabular-nums\",\n allHealthy\n ? \"text-emerald-600 dark:text-emerald-400\"\n : noneHealthy\n ? \"text-muted-foreground\"\n : \"text-amber-600 dark:text-amber-400\",\n )}\n >\n {healthy}/{total} connected\n </span>\n )}\n {actions}\n </div>\n </div>\n {description && (\n <p className=\"max-w-3xl text-sm text-muted-foreground\">{description}</p>\n )}\n {attention && (\n <p className=\"text-xs text-amber-600 dark:text-amber-400\">\n {attention}\n </p>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Card } from \"@/components/ui/card\";\nimport { cn } from \"@/lib/utils\";\nimport type {\n IntegrationStatus as HealthIntegrationStatus,\n MessagingHealthStatus,\n} from \"@/lib/api-types\";\n\n// ── Status types ──\n\nexport type ConnectionStatus =\n | \"connected\"\n | \"configured\"\n | \"connecting\"\n | \"needs-setup\"\n | \"error\"\n | \"disabled\";\n\nconst STATUS_BADGE: Record<ConnectionStatus, { variant: \"green\" | \"red\" | \"gray\" | \"amber\"; label: string }> = {\n connected: { variant: \"green\", label: \"Connected\" },\n configured: { variant: \"amber\", label: \"Configured\" },\n connecting: { variant: \"amber\", label: \"Connecting…\" },\n \"needs-setup\": { variant: \"gray\", label: \"Not Configured\" },\n error: { variant: \"red\", label: \"Error\" },\n disabled: { variant: \"gray\", label: \"Disabled\" },\n};\n\nfunction cardTone(status: ConnectionStatus) {\n if (status === \"connected\") return \"success\" as const;\n if (status === \"error\") return \"error\" as const;\n return \"default\" as const;\n}\n\n// ── Status derivation helpers ──\n\n/** Derive card status from the health API's integration status object. */\nexport function deriveIntegrationStatus(\n s: HealthIntegrationStatus | undefined,\n): ConnectionStatus {\n if (!s) return \"needs-setup\";\n if (!s.configured) return \"needs-setup\";\n if (s.error) return \"error\";\n if (s.connected) return \"connected\";\n return \"configured\";\n}\n\n/** Derive card status from the health API's messaging status object. */\nexport function deriveMessagingStatus(\n s: MessagingHealthStatus | undefined,\n): ConnectionStatus {\n if (!s) return \"needs-setup\";\n if (s.runtimeState === \"not_configured\") return \"needs-setup\";\n if (s.runtimeState === \"connecting\") return \"connecting\";\n if (s.runtimeState === \"error\") return \"error\";\n if (s.runtimeState === \"ok\") return \"connected\";\n return \"configured\";\n}\n\n/** Derive card status from a simple boolean config flag (e.g. GitHub). */\nexport function deriveConfiguredStatus(configured: boolean): ConnectionStatus {\n return configured ? \"configured\" : \"needs-setup\";\n}\n\n/** Build the standard metadata lines for a messaging channel card. */\nexport function messagingMetadata(status: MessagingHealthStatus | undefined) {\n if (!status) return undefined;\n return [\n { label: \"Owner configured\", value: status.ownerConfigured ? \"yes\" : \"no\" },\n { label: \"Owner channel known\", value: status.ownerChannelKnown ? \"yes\" : \"no\" },\n { label: \"Reminder eligible\", value: status.notificationEligible ? \"yes\" : \"no\" },\n { label: \"Last inbound\", value: status.lastInboundAt ?? \"—\" },\n ];\n}\n\n// ── ConnectionCard component ──\n\nexport interface ConnectionCardProps {\n name: string;\n icon: ReactNode;\n status: ConnectionStatus;\n /** Error message from health API. */\n error?: string | null;\n /** Key-value metadata lines shown below the header. */\n metadata?: Array<{ label: string; value: string }>;\n /** Expandable config/setup content. */\n children?: ReactNode;\n className?: string;\n}\n\nexport function ConnectionCard({\n name,\n icon,\n status,\n error,\n metadata,\n children,\n className,\n}: ConnectionCardProps) {\n const badge = STATUS_BADGE[status];\n\n return (\n <Card tone={cardTone(status)} className={cn(\"relative\", className)}>\n {/* Header */}\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{icon}</span>\n <h3 className=\"text-sm font-medium text-foreground\">{name}</h3>\n </div>\n <Badge variant={badge.variant}>{badge.label}</Badge>\n </div>\n\n {/* Error from health API — suppressed during in-progress connecting state so\n transient auth/pairing messages don't render as red errors. */}\n {error && status !== \"connecting\" && (\n <p className=\"mb-2 text-xs text-red-600 dark:text-red-400\">{error}</p>\n )}\n\n {/* Metadata */}\n {metadata && metadata.length > 0 && (\n <div className=\"mb-3 space-y-0.5\">\n {metadata.map((m) => (\n <div key={m.label} className=\"flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">{m.label}</span>\n <span className=\"text-foreground\">{m.value}</span>\n </div>\n ))}\n </div>\n )}\n\n {/* Children */}\n {children}\n </Card>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Upload\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/upload\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 Upload = createLucideIcon('Upload', [\n ['path', { d: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4', key: 'ih7n3h' }],\n ['polyline', { points: '17 8 12 3 7 8', key: 't8dd8p' }],\n ['line', { x1: '12', x2: '12', y1: '3', y2: '15', key: 'widbto' }],\n]);\n\nexport default Upload;\n","import type { BackendId } from \"@aitne/shared\";\n\nexport const BACKEND_LABELS: Record<BackendId, string> = {\n claude: \"Claude Code\",\n codex: \"OpenAI Codex\",\n gemini: \"Gemini CLI\",\n};\n\nconst BACKEND_SHORT_LABELS: Record<BackendId, string> = {\n claude: \"Claude\",\n codex: \"Codex\",\n gemini: \"Gemini\",\n};\n\n/**\n * Provider-friendly labels for backend / API-key UIs. Users think in\n * terms of \"I have an Anthropic API key\", not \"I have a Claude Code\n * API key\" — so surfaces that name the upstream provider (setup\n * wizard backend step, /settings/models API-key panel) should prefer\n * this set over BACKEND_LABELS (which names the CLI product).\n */\nexport const BACKEND_PROVIDER_LABELS: Record<BackendId, string> = {\n claude: \"Claude (Anthropic)\",\n codex: \"ChatGPT (OpenAI)\",\n gemini: \"Gemini (Google)\",\n};\n\n/** Short provider name used in compact badges (e.g. \"ChatGPT\" not \"OpenAI Codex\"). */\nexport const BACKEND_PROVIDER_SHORT: Record<BackendId, string> = {\n claude: \"Claude\",\n codex: \"ChatGPT\",\n gemini: \"Gemini\",\n};\n\n/**\n * Per-backend description of the web-search toggle on `/settings/models`.\n * Each backend wires to a different upstream surface, so the hint names\n * that surface so the user knows what they are turning on.\n *\n * - Claude: SDK-native `WebSearch` tool, gated by allowedTools.\n * - Codex: OpenAI Responses-API `web_search` tool, enabled per-spawn via\n * `-c tools.web_search=true`. Works under the workspace-write sandbox\n * because the tool runs server-side at OpenAI — no sandbox bypass\n * required.\n * - Gemini: `google_web_search` tool, allowed via the per-session admin\n * policy TOML.\n */\nexport const BACKEND_WEB_SEARCH_DESCRIPTIONS: Record<BackendId, string> = {\n claude: \"Lets the agent call Anthropic's built-in WebSearch tool.\",\n codex:\n \"Lets the agent call OpenAI's web_search tool. Works in safe (sandbox) mode — the tool runs at OpenAI, not as a local shell command.\",\n gemini: \"Lets the agent call Gemini's google_web_search tool.\",\n};\n\n/**\n * Primary brand color per backend, chosen to match each vendor's actual\n * app-icon hue so charts read as \"that's the Claude backend\" at a glance.\n * - Claude — the warm red-orange of the Anthropic macOS icon.\n * - Codex (ChatGPT) — ChatGPT's icon is white, so we use a bright\n * pink-leaning fuchsia (slightly purple-tinted pink).\n * - Gemini — the vivid Google Blue anchoring the Gemini spark gradient.\n */\nexport const BACKEND_COLORS: Record<BackendId, string> = {\n claude: \"#E15B40\", // Anthropic app-icon red-orange\n codex: \"#D946EF\", // bright fuchsia (pink with purple tint)\n gemini: \"#1C69FF\", // vivid Google Blue\n};\n\n/**\n * A small palette of distinct shades per backend family. Used to\n * differentiate individual models within the same backend on charts\n * like the Model Breakdown pie — the eye can still group Claude/Codex/\n * Gemini by hue family, but each model gets its own readable shade.\n *\n * Each palette is ordered dark→light and contains the primary brand\n * color in the middle, so a single-model render picks the brand color\n * and small groups (2–4 models) get colors spread across the palette\n * via `assignModelColors` for maximum contrast.\n */\nexport const BACKEND_MODEL_PALETTES: Record<BackendId, string[]> = {\n // Anthropic red-orange / coral family.\n claude: [\"#7C2D12\", \"#B54B2D\", \"#E15B40\", \"#F97316\", \"#FDBA74\"],\n // OpenAI-ish pink-purple / fuchsia family.\n codex: [\"#86198F\", \"#A21CAF\", \"#D946EF\", \"#E879F9\", \"#F5D0FE\"],\n // Google blue family.\n gemini: [\"#1E3A8A\", \"#1D4ED8\", \"#1C69FF\", \"#60A5FA\", \"#93C5FD\"],\n};\n\nconst OTHER_MODEL_PALETTE = [\"#6b7280\", \"#9ca3af\", \"#4b5563\", \"#374151\"];\n\n/**\n * Qualitative palette for categorical charts (e.g. event-type breakdown)\n * where bars have no intrinsic backend affiliation but should be visually\n * distinguishable from each other.\n */\nexport const CHART_CATEGORY_PALETTE: string[] = [\n \"#3b82f6\", // blue\n \"#10b981\", // emerald\n \"#f59e0b\", // amber\n \"#8b5cf6\", // violet\n \"#ec4899\", // pink\n \"#14b8a6\", // teal\n \"#f97316\", // orange\n \"#6366f1\", // indigo\n \"#ef4444\", // red\n \"#22c55e\", // green\n];\n\nexport const BACKEND_BADGE_VARIANTS: Record<BackendId, \"orange\" | \"pink\" | \"blue\"> = {\n claude: \"orange\",\n codex: \"pink\",\n gemini: \"blue\",\n};\n\nconst PROCESS_LABELS: Record<string, string> = {\n \"routine.morning_routine\": \"Morning Routine\",\n \"routine.evening_review\": \"Evening Review\",\n \"routine.weekly_review\": \"Weekly Review\",\n \"routine.monthly_review\": \"Monthly Review\",\n \"routine.hourly_check\": \"Hourly Check\",\n \"routine.roadmap_refresh\": \"Roadmap Refresh\",\n \"message.dm\": \"Direct Messages\",\n \"message.mention\": \"Mentions\",\n \"dashboard.chat\": \"Dashboard Chat\",\n \"agent.task\": \"Scheduled Tasks\",\n \"calendar.change\": \"Calendar Events\",\n \"gmail_classify\": \"Gmail Classification\",\n \"github.pull_request.review_requested\": \"GitHub Review Requests\",\n \"github.assigned\": \"GitHub Assignments\",\n \"github.security_alert\": \"GitHub Security Alerts\",\n \"github.workflow_run.failed\": \"GitHub CI Failures\",\n \"wiki.ingest_url\": \"Wiki URL Ingest\",\n \"wiki.compile\": \"Wiki Compile\",\n \"wiki.ask\": \"Wiki Ask\",\n};\n\nexport function getBackendLabel(backendId: BackendId): string {\n return BACKEND_LABELS[backendId];\n}\n\nexport function getBackendShortLabel(backendId: BackendId): string {\n return BACKEND_SHORT_LABELS[backendId];\n}\n\nexport function getProcessLabel(processKey: string): string {\n return PROCESS_LABELS[processKey] ?? processKey;\n}\n\nexport function getProcessGroup(processKey: string): string {\n if (processKey.startsWith(\"wiki.\")) return \"Wiki\";\n if (processKey.startsWith(\"message.\") || processKey.startsWith(\"dashboard.\")) {\n return \"Conversation\";\n }\n if (processKey.startsWith(\"routine.\")) return \"Routines\";\n if (processKey.startsWith(\"git.\") || processKey.startsWith(\"github.\")) {\n return \"Git & GitHub\";\n }\n if (processKey.startsWith(\"calendar.\") || processKey === \"gmail_classify\") {\n return \"Integrations\";\n }\n return \"Tasks\";\n}\n\nexport function formatModelName(modelId: string | null | undefined): string {\n if (!modelId) return \"Not set\";\n\n return modelId\n .replace(/^claude-/, \"Claude \")\n .replace(/^gpt-/, \"GPT-\")\n .replace(/^gemini-/, \"Gemini \")\n .replace(/-/g, \" \")\n .replace(/\\bpreview\\b/gi, \"(preview)\")\n .replace(/\\bpro\\b/gi, \"Pro\")\n .replace(/\\bflash\\b/gi, \"Flash\")\n .replace(/\\blite\\b/gi, \"Lite\")\n .replace(/\\bmini\\b/gi, \"Mini\")\n .replace(/\\bcodex\\b/gi, \"Codex\")\n .replace(/\\bopus\\b/gi, \"Opus\")\n .replace(/\\bsonnet\\b/gi, \"Sonnet\")\n .replace(/\\bhaiku\\b/gi, \"Haiku\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\n/**\n * Compact model label for badge display (e.g. \"Opus 4.7\", \"GPT-5.5\").\n * Handles both legacy short forms (\"opus\") and full IDs (\"claude-opus-4-6\").\n */\nexport function formatShortModelName(modelId: string | null | undefined): string {\n if (!modelId) return \"unknown\";\n\n // Legacy short forms from old DB rows\n if (modelId === \"opus\") return \"Opus\";\n if (modelId === \"sonnet\") return \"Sonnet\";\n\n let s = modelId\n .replace(/-\\d{8,}$/, \"\") // drop date suffix (e.g. -20251001)\n .replace(/^claude-/, \"\") // \"claude-opus-4-6\" → \"opus-4-6\"\n .replace(/(\\d+)-(\\d+)(?![-\\d])/g, \"$1.$2\") // version: \"4-6\" → \"4.6\"\n .replace(/-/g, \" \"); // remaining dashes → spaces\n\n // Apply prefix branding after dashes are resolved\n if (modelId.startsWith(\"gpt-\")) s = `GPT-${s.replace(/^gpt\\s*/i, \"\")}`;\n if (modelId.startsWith(\"gemini-\")) s = s.replace(/^gemini\\s*/i, \"Gemini \");\n\n return s\n .replace(/\\bopus\\b/gi, \"Opus\")\n .replace(/\\bsonnet\\b/gi, \"Sonnet\")\n .replace(/\\bhaiku\\b/gi, \"Haiku\")\n .replace(/\\bpro\\b/gi, \"Pro\")\n .replace(/\\bflash\\b/gi, \"Flash\")\n .replace(/\\blite\\b/gi, \"Lite\")\n .replace(/\\bmini\\b/gi, \"Mini\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\n/** Badge variant for a model string, resolved via backend detection. */\nexport function modelBadgeVariant(modelId: string | null | undefined): \"orange\" | \"pink\" | \"blue\" | \"gray\" {\n if (!modelId) return \"gray\";\n const backend = detectBackendFromModel(modelId);\n return backend ? BACKEND_BADGE_VARIANTS[backend] : \"gray\";\n}\n\n/**\n * Parsed entry from `agent_actions.model_usage_json` — what the SDK actually\n * billed per underlying model. The SDK can silently route a request for one\n * model to a sibling (e.g. opus-4-7 → opus-4-6[1m]); this struct surfaces\n * that, so the dashboard can show the real model and matching cost.\n */\nexport interface BilledModelEntry {\n modelId: string;\n inputTokens: number;\n outputTokens: number;\n costUsd: number;\n}\n\n/**\n * Parse the JSON-encoded modelUsage map. Returns entries sorted by costUsd\n * desc so the dominant model is first (the one a single-row badge should\n * use). Returns an empty array on malformed input.\n */\nexport function parseModelUsage(json: string | null | undefined): BilledModelEntry[] {\n if (!json) return [];\n let raw: unknown;\n try {\n raw = JSON.parse(json);\n } catch {\n return [];\n }\n if (!raw || typeof raw !== \"object\") return [];\n\n const entries: BilledModelEntry[] = [];\n for (const [modelId, value] of Object.entries(raw)) {\n if (!value || typeof value !== \"object\") continue;\n const v = value as Record<string, unknown>;\n entries.push({\n modelId,\n inputTokens: typeof v.inputTokens === \"number\" ? v.inputTokens : 0,\n outputTokens: typeof v.outputTokens === \"number\" ? v.outputTokens : 0,\n costUsd: typeof v.costUsd === \"number\" ? v.costUsd : 0,\n });\n }\n return entries.sort((a, b) => b.costUsd - a.costUsd);\n}\n\n/**\n * Return the model id the dashboard should badge for a row. Prefers the\n * dominant entry from `model_usage_json` (the SDK-billed model — what\n * actually drove the cost). Falls back to `model_used` (the requested\n * model) when modelUsage is missing or empty.\n */\nexport function pickDisplayModel(\n modelUsed: string | null | undefined,\n modelUsageJson: string | null | undefined,\n): string | null {\n const entries = parseModelUsage(modelUsageJson);\n if (entries.length > 0 && entries[0]) {\n return entries[0].modelId;\n }\n return modelUsed ?? null;\n}\n\nexport function detectBackendFromModel(modelId: string): BackendId | null {\n if (!modelId) return null;\n const lower = modelId.toLowerCase();\n if (\n lower.includes(\"claude\") ||\n lower.includes(\"sonnet\") ||\n lower.includes(\"opus\") ||\n lower.includes(\"haiku\")\n ) {\n return \"claude\";\n }\n if (lower.includes(\"gemini\")) return \"gemini\";\n if (\n lower.includes(\"gpt\") ||\n lower.includes(\"codex\") ||\n lower.includes(\"o3\") ||\n lower.includes(\"o4\")\n ) {\n return \"codex\";\n }\n return null;\n}\n\n/**\n * Assign a distinct color to each model. Models are grouped by backend\n * and sorted by name for stable assignment across renders; within each\n * group, colors are spread across `BACKEND_MODEL_PALETTES` so that small\n * groups (e.g. 2 Claude models) use non-adjacent palette slots and read\n * as clearly different shades, rather than two neighbouring darks.\n *\n * - 1 model → the brand-color slot (palette midpoint)\n * - 2 models → slots at ~1/4 and ~3/4 of the palette (dark + light)\n * - 3 models → evenly spaced across the palette\n * - 4+ models → spread evenly, wrapping if the group exceeds the palette\n */\nexport function assignModelColors(models: string[]): Record<string, string> {\n const byBackend = new Map<BackendId | \"other\", string[]>();\n for (const model of models) {\n if (!model) continue;\n const backend = detectBackendFromModel(model) ?? \"other\";\n const bucket = byBackend.get(backend) ?? [];\n bucket.push(model);\n byBackend.set(backend, bucket);\n }\n\n const result: Record<string, string> = {};\n for (const [backend, list] of byBackend) {\n list.sort((a, b) => a.localeCompare(b));\n const palette =\n backend === \"other\" ? OTHER_MODEL_PALETTE : BACKEND_MODEL_PALETTES[backend];\n const n = list.length;\n list.forEach((model, i) => {\n let idx: number;\n if (n >= palette.length) {\n // Group larger than the palette — wrap around.\n idx = i % palette.length;\n } else if (n === 1) {\n // Single model → use the brand-color slot (palette midpoint).\n idx = Math.floor(palette.length / 2);\n } else {\n // Small group → spread across the palette so shades are distinct.\n idx = Math.floor(((i + 0.5) * palette.length) / n);\n }\n result[model] = palette[idx]!;\n });\n }\n return result;\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name RefreshCw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/refresh-cw\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 RefreshCw = createLucideIcon('RefreshCw', [\n ['path', { d: 'M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8', key: 'v9h5vc' }],\n ['path', { d: 'M21 3v5h-5', key: '1q7to0' }],\n ['path', { d: 'M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16', key: '3uifl3' }],\n ['path', { d: 'M8 16H3v5', key: '1cv678' }],\n]);\n\nexport default RefreshCw;\n","\"use client\";\n\nimport { useQuery } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\nimport type { BackendsResponse } from \"@/lib/api-types\";\n\nexport function useBackends(options?: { enabled?: boolean }) {\n return useQuery({\n queryKey: [\"backends\"],\n queryFn: () => api.get<BackendsResponse>(\"/backends\"),\n enabled: options?.enabled ?? true,\n staleTime: 60_000,\n });\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Pencil\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/pencil\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 Pencil = createLucideIcon('Pencil', [\n [\n 'path',\n {\n d: 'M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z',\n key: '1a8usu',\n },\n ],\n ['path', { d: 'm15 5 4 4', key: '1mk7zo' }],\n]);\n\nexport default Pencil;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Save\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/save\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 Save = createLucideIcon('Save', [\n [\n 'path',\n {\n d: 'M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z',\n key: '1c8476',\n },\n ],\n ['path', { d: 'M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7', key: '1ydtos' }],\n ['path', { d: 'M7 3v4a1 1 0 0 0 1 1h7', key: 't51u73' }],\n]);\n\nexport default Save;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Lock\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/lock\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 Lock = createLucideIcon('Lock', [\n ['rect', { width: '18', height: '11', x: '3', y: '11', rx: '2', ry: '2', key: '1w4ew1' }],\n ['path', { d: 'M7 11V7a5 5 0 0 1 10 0v4', key: 'fwvmzm' }],\n]);\n\nexport default Lock;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name CircleX\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/circle-x\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 CircleX = createLucideIcon('CircleX', [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'm15 9-6 6', key: '1uzhvr' }],\n ['path', { d: 'm9 9 6 6', key: 'z0biqf' }],\n]);\n\nexport default CircleX;\n","\"use client\";\n\nimport { useQuery } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\nimport type { ProcessConfigResponse } from \"@/lib/api-types\";\n\nexport function useProcessConfig(options?: { enabled?: boolean }) {\n return useQuery({\n queryKey: [\"process-config\"],\n queryFn: () => api.get<ProcessConfigResponse>(\"/process-config\"),\n enabled: options?.enabled ?? true,\n staleTime: 60_000,\n });\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Bot\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/bot\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 Bot = createLucideIcon('Bot', [\n ['path', { d: 'M12 8V4H8', key: 'hb8ula' }],\n ['rect', { width: '16', height: '12', x: '4', y: '8', rx: '2', key: 'enze0r' }],\n ['path', { d: 'M2 14h2', key: 'vft8re' }],\n ['path', { d: 'M20 14h2', key: '4cs60a' }],\n ['path', { d: 'M15 13v2', key: '1xurst' }],\n ['path', { d: 'M9 13v2', key: 'rq6x2g' }],\n]);\n\nexport default Bot;\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { Bot, Loader2, Pencil, Save, XCircle } from \"lucide-react\";\nimport type { BackendId, BackendModel } from \"@aitne/shared\";\nimport { Card, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Alert } from \"@/components/ui/alert\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\nimport { ApiError, api } from \"@/lib/api-client\";\nimport { useBackends } from \"@/lib/hooks/use-backends\";\nimport { useProcessConfig } from \"@/lib/hooks/use-process-config\";\nimport {\n BACKEND_BADGE_VARIANTS,\n formatModelName,\n getBackendLabel,\n} from \"@/lib/backend-ui\";\n\ninterface ProcessModelCardProps {\n processKey: string;\n title?: string;\n description?: string;\n}\n\nfunction getModelsForTier(models: BackendModel[], tier: \"lite\" | \"medium\" | \"high\"): BackendModel[] {\n const tierModels = models.filter((m) => m.tier === tier);\n return tierModels.length > 0 ? tierModels : models;\n}\n\nexport function ProcessModelCard({\n processKey,\n title = \"AI Model\",\n description,\n}: ProcessModelCardProps) {\n const queryClient = useQueryClient();\n const { data: backendsData } = useBackends();\n const { data: processConfigData } = useProcessConfig();\n\n const [editing, setEditing] = useState(false);\n const [draftBackend, setDraftBackend] = useState<BackendId | null>(null);\n const [draftModel, setDraftModel] = useState<string | null>(null);\n const [saving, setSaving] = useState(false);\n const [feedback, setFeedback] = useState<{\n type: \"success\" | \"error\";\n message: string;\n } | null>(null);\n\n const configOrUndef = processConfigData?.configs.find((c) => c.processKey === processKey);\n const backendMap = new Map((backendsData?.backends ?? []).map((b) => [b.id, b]));\n const enabledBackends = (backendsData?.backends ?? []).filter((b) => b.enabled);\n\n if (!backendsData || !processConfigData || !configOrUndef) {\n return null;\n }\n\n // Narrowed reference — TS tracks this as non-undefined after the guard above.\n const config = configOrUndef;\n\n const currentBackend = backendMap.get(config.mainBackend);\n const currentModelLabel =\n currentBackend?.models.find((m) => m.modelId === config.mainModel)?.label ??\n formatModelName(config.mainModel);\n\n const draftBackendData = draftBackend ? backendMap.get(draftBackend) : null;\n const availableModels = draftBackendData?.models ?? [];\n\n function beginEdit() {\n setDraftBackend(config.mainBackend);\n setDraftModel(config.mainModel);\n setFeedback(null);\n setEditing(true);\n }\n\n function cancelEdit() {\n setEditing(false);\n setDraftBackend(null);\n setDraftModel(null);\n }\n\n function handleBackendChange(nextId: BackendId) {\n const backend = backendMap.get(nextId);\n if (!backend) return;\n setDraftBackend(nextId);\n const tierModels = getModelsForTier(backend.models, config.defaultTier);\n setDraftModel(tierModels[0]?.modelId ?? backend.models[0]?.modelId ?? \"\");\n }\n\n async function save() {\n if (!draftBackend || !draftModel) return;\n setSaving(true);\n setFeedback(null);\n try {\n await api.put(`/process-config/${processKey}`, {\n mainBackend: draftBackend,\n mainModel: draftModel,\n fallbackBackend: config.fallbackBackend,\n fallbackModel: config.fallbackModel,\n maxTurns: config.maxTurns,\n maxBudgetUsd: config.maxBudgetUsd,\n });\n await queryClient.invalidateQueries({ queryKey: [\"process-config\"] });\n setFeedback({ type: \"success\", message: \"Saved\" });\n setEditing(false);\n } catch (err) {\n const body =\n err instanceof ApiError ? (err.body as Record<string, unknown> | null) : null;\n const message =\n typeof body?.error === \"string\"\n ? body.error\n : err instanceof Error\n ? err.message\n : \"Save failed\";\n setFeedback({ type: \"error\", message });\n } finally {\n setSaving(false);\n }\n }\n\n return (\n <Card>\n <CardHeader>\n <div className=\"flex items-center gap-2\">\n <Bot className=\"h-4 w-4 text-muted-foreground\" />\n <CardTitle className=\"text-base\">{title}</CardTitle>\n {config.updatedBy === \"user\" && (\n <Badge variant=\"blue\" className=\"text-xs\">\n Custom\n </Badge>\n )}\n </div>\n {!editing && (\n <Button variant=\"ghost\" size=\"sm\" onClick={beginEdit} className=\"h-8\">\n <Pencil className=\"h-3.5 w-3.5\" />\n Edit\n </Button>\n )}\n </CardHeader>\n\n {!editing && (\n <div className=\"space-y-2\">\n <div className=\"flex flex-wrap items-center gap-2 text-sm\">\n <Badge variant={BACKEND_BADGE_VARIANTS[config.mainBackend]}>\n {getBackendLabel(config.mainBackend)}\n </Badge>\n <span className=\"text-muted-foreground\">{currentModelLabel}</span>\n <Badge\n variant={\n config.defaultTier === \"high\"\n ? \"purple\"\n : config.defaultTier === \"medium\"\n ? \"blue\"\n : \"default\"\n }\n className=\"text-xs\"\n >\n {config.defaultTier}\n </Badge>\n </div>\n {description && (\n <p className=\"text-xs text-muted-foreground\">{description}</p>\n )}\n </div>\n )}\n\n {editing && (\n <div className=\"mt-1 space-y-3\">\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-medium text-muted-foreground\">Backend</p>\n <Select\n value={draftBackend ?? \"\"}\n onValueChange={(v) => handleBackendChange(v as BackendId)}\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {enabledBackends.map((b) => (\n <SelectItem key={b.id} value={b.id}>\n {getBackendLabel(b.id)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-medium text-muted-foreground\">Model</p>\n <Select\n value={draftModel ?? \"\"}\n onValueChange={(v) => setDraftModel(v)}\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {availableModels.map((m) => (\n <SelectItem key={m.modelId} value={m.modelId}>\n {m.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n <div className=\"flex justify-end gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={cancelEdit}\n disabled={saving}\n >\n <XCircle className=\"h-3.5 w-3.5\" />\n Cancel\n </Button>\n <Button\n size=\"sm\"\n onClick={() => { void save(); }}\n disabled={saving || !draftModel}\n >\n {saving ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Save className=\"h-3.5 w-3.5\" />\n )}\n Save\n </Button>\n </div>\n </div>\n )}\n\n {feedback && (\n <Alert\n variant={feedback.type === \"success\" ? \"success\" : \"error\"}\n className=\"mt-3\"\n >\n {feedback.message}\n </Alert>\n )}\n </Card>\n );\n}\n","\"use client\";\n\nimport { useState, useRef, useEffect, useCallback } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useConfig } from \"@/lib/hooks/use-config\";\nimport { useHealth } from \"@/lib/hooks/use-health\";\nimport { useSaveConfig } from \"@/lib/hooks/use-save-config\";\nimport { api } from \"@/lib/api-client\";\nimport { Button } from \"@/components/ui/button\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { Collapsible, CollapsibleTrigger, CollapsibleContent } from \"@/components/ui/collapsible\";\nimport { ChevronDown, Upload, CheckCircle2, ExternalLink } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\nimport { EditableField } from \"@/components/settings/editors\";\nimport type { FileUploadResponse, GoogleIntegrationStatus } from \"@/lib/api-types\";\nimport { ConnectionCard, deriveIntegrationStatus } from \"./connection-card\";\n\n// ── File Upload Button (local helper) ──\n\nfunction truncateMiddle(name: string, max = 36): string {\n if (name.length <= max) return name;\n const keepEnd = Math.floor((max - 1) / 2);\n const keepStart = max - 1 - keepEnd;\n return `${name.slice(0, keepStart)}…${name.slice(-keepEnd)}`;\n}\n\nfunction FileUploadButton({\n label,\n accept,\n onUpload,\n configured,\n}: {\n label: string;\n accept: string;\n onUpload: (file: File) => Promise<void>;\n configured: boolean;\n}) {\n const [uploading, setUploading] = useState(false);\n const [result, setResult] = useState<\n | { type: \"success\"; fileName: string }\n | { type: \"error\"; message: string }\n | null\n >(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleFile = useCallback(async (file: File) => {\n setUploading(true);\n setResult(null);\n try {\n await onUpload(file);\n setResult({ type: \"success\", fileName: file.name });\n } catch (e) {\n setResult({ type: \"error\", message: e instanceof Error ? e.message : \"Upload failed\" });\n } finally {\n setUploading(false);\n }\n }, [onUpload]);\n\n return (\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center gap-2\">\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n className=\"hidden\"\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) handleFile(file);\n e.target.value = \"\";\n }}\n />\n <Button\n size=\"sm\"\n variant={configured ? \"outline\" : \"default\"}\n onClick={() => inputRef.current?.click()}\n disabled={uploading}\n className=\"text-xs\"\n >\n <Upload className=\"h-3.5 w-3.5 mr-1\" />\n {uploading ? \"Uploading...\" : label}\n </Button>\n {configured && <CheckCircle2 className=\"h-4 w-4 text-emerald-500\" />}\n </div>\n {result && (\n <Alert variant={result.type === \"success\" ? \"success\" : \"error\"}>\n {result.type === \"success\" ? (\n <span className=\"block break-all\" title={result.fileName}>\n {truncateMiddle(result.fileName)} uploaded\n </span>\n ) : (\n <span className=\"block break-all\">{result.message}</span>\n )}\n </Alert>\n )}\n </div>\n );\n}\n\n// ── Google Calendar icon (inline SVG for the multicolor G) ──\n\nfunction GoogleIcon() {\n return (\n <svg className=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1Z\" fill=\"#4285F4\" />\n <path d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23Z\" fill=\"#34A853\" />\n <path d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18A10.96 10.96 0 0 0 1 12c0 1.77.42 3.45 1.18 4.93l3.66-2.84Z\" fill=\"#FBBC05\" />\n <path d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53Z\" fill=\"#EA4335\" />\n </svg>\n );\n}\n\nexport function GoogleCard() {\n const { data: config } = useConfig();\n const { data: health } = useHealth();\n const { toast, saveField } = useSaveConfig();\n const queryClient = useQueryClient();\n\n const gStatus: GoogleIntegrationStatus | undefined = health?.integrations?.google;\n\n const [authorizing, setAuthorizing] = useState(false);\n const [authError, setAuthError] = useState<string | null>(null);\n const pollRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n const credDone = config?.googleCalendarCredentialsConfigured ?? false;\n const tokenDone = config?.googleCalendarTokenConfigured ?? false;\n const isServiceAccount = config?.googleCredentialType === \"service_account\";\n\n const handleUploadCredentials = async (file: File) => {\n await api.upload<FileUploadResponse>(\"/config/upload/google-credentials\", file);\n queryClient.invalidateQueries({ queryKey: [\"config\"] });\n queryClient.invalidateQueries({ queryKey: [\"health\"] });\n };\n\n useEffect(() => {\n return () => {\n if (pollRef.current) clearInterval(pollRef.current);\n };\n }, []);\n\n useEffect(() => {\n const handler = (event: MessageEvent) => {\n if (!event.origin.startsWith(\"http://localhost\")) return;\n if (event.data?.type === \"google-auth-success\") {\n if (pollRef.current) { clearInterval(pollRef.current); pollRef.current = null; }\n setAuthorizing(false);\n queryClient.invalidateQueries({ queryKey: [\"config\"] });\n queryClient.invalidateQueries({ queryKey: [\"health\"] });\n }\n };\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, [queryClient]);\n\n const handleAuthorize = async () => {\n setAuthorizing(true);\n setAuthError(null);\n try {\n const res = await api.post<{ authUrl: string }>(\"/config/google-auth/start\");\n const popup = window.open(res.authUrl, \"google-auth\", \"width=600,height=700\");\n if (!popup) {\n setAuthError(\"Popup blocked. Allow popups for this site and try again.\");\n setAuthorizing(false);\n return;\n }\n pollRef.current = setInterval(() => {\n if (popup.closed) {\n if (pollRef.current) { clearInterval(pollRef.current); pollRef.current = null; }\n setAuthorizing(false);\n queryClient.invalidateQueries({ queryKey: [\"config\"] });\n queryClient.invalidateQueries({ queryKey: [\"health\"] });\n }\n }, 1000);\n } catch (e) {\n setAuthError(e instanceof Error ? e.message : \"Failed to start authorization\");\n setAuthorizing(false);\n }\n };\n\n if (!config || !health) return null;\n\n const calendarStatus = gStatus?.services?.calendar;\n const gmailStatus = gStatus?.services?.gmail;\n\n // While the user is actively completing the OAuth browser flow, display\n // the card as \"connecting\" rather than falling through to whatever the\n // health endpoint reports — the daemon can briefly look unconfigured /\n // errored during this window, and it's not a failure the user needs to see.\n const displayStatus = authorizing ? \"connecting\" : deriveIntegrationStatus(gStatus);\n\n return (\n <ConnectionCard\n name=\"Google\"\n icon={<GoogleIcon />}\n status={displayStatus}\n error={gStatus?.error}\n >\n {/* Service statuses */}\n {gStatus?.configured && (\n <div className=\"flex gap-4 mb-3\">\n <div className=\"flex items-center gap-1.5 text-xs\">\n <span className={cn(\n \"inline-block h-2 w-2 rounded-full\",\n calendarStatus?.connected ? \"bg-emerald-500\" : \"bg-gray-300 dark:bg-gray-600\",\n )} />\n <span className=\"text-muted-foreground\">Calendar</span>\n <span className={calendarStatus?.connected ? \"text-emerald-600 dark:text-emerald-400\" : \"text-muted-foreground\"}>\n {calendarStatus?.connected ? \"Active\" : \"Inactive\"}\n </span>\n </div>\n <div className=\"flex items-center gap-1.5 text-xs\">\n <span className={cn(\n \"inline-block h-2 w-2 rounded-full\",\n gmailStatus?.connected ? \"bg-emerald-500\" : \"bg-gray-300 dark:bg-gray-600\",\n )} />\n <span className=\"text-muted-foreground\">Gmail</span>\n <span className={gmailStatus?.connected ? \"text-emerald-600 dark:text-emerald-400\" : \"text-muted-foreground\"}>\n {gmailStatus?.connected ? \"Active\" : \"Not yet implemented\"}\n </span>\n </div>\n </div>\n )}\n\n {/* OAuth Setup Flow */}\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"space-y-1\">\n <p className=\"text-xs font-medium text-muted-foreground\">1. Upload credentials</p>\n <FileUploadButton\n label=\"Credentials JSON\"\n accept=\".json,application/json\"\n onUpload={handleUploadCredentials}\n configured={credDone}\n />\n </div>\n\n {!isServiceAccount && (\n <div className=\"space-y-1\">\n <p className=\"text-xs font-medium text-muted-foreground\">2. Authorize</p>\n <Button\n size=\"sm\"\n variant={tokenDone ? \"outline\" : \"default\"}\n onClick={handleAuthorize}\n disabled={!credDone || authorizing}\n className=\"text-xs\"\n >\n <ExternalLink className=\"h-3.5 w-3.5 mr-1\" />\n {authorizing ? \"Waiting...\" : tokenDone ? \"Re-authorize\" : \"Authorize with Google\"}\n </Button>\n {tokenDone && <CheckCircle2 className=\"inline-block ml-2 h-4 w-4 text-emerald-500\" />}\n {authError && (\n <Alert variant=\"error\" className=\"mt-1\">{authError}</Alert>\n )}\n {!credDone && (\n <p className=\"text-xs text-muted-foreground mt-1\">Upload credentials first</p>\n )}\n </div>\n )}\n </div>\n\n {!gStatus?.connected && credDone && (isServiceAccount || tokenDone) && (\n <Alert variant=\"warning\" className=\"mt-3\">\n {isServiceAccount ? \"Service account configured.\" : \"Authorized.\"} Restart the daemon to connect.\n </Alert>\n )}\n\n <Collapsible>\n <CollapsibleTrigger className=\"flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground mt-3\">\n Advanced setup notes <ChevronDown className=\"h-3 w-3\" />\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"mt-2 rounded bg-muted/50 p-2 space-y-1 text-xs\">\n <p className=\"font-medium text-muted-foreground\">Secrets are stored in the macOS Keychain.</p>\n <p className=\"text-muted-foreground\">\n Use the upload button above for credentials JSON, then complete OAuth in the browser.\n </p>\n <p className=\"text-muted-foreground mt-1\">\n Same credentials are used for Calendar and Gmail (scopes: calendar, gmail.modify, gmail.send).\n </p>\n <p className=\"text-muted-foreground\">\n Calendar ID defaults to "primary" and can be changed below.\n </p>\n </div>\n </CollapsibleContent>\n </Collapsible>\n\n {/* Calendar ID selector — which calendar within the authed account */}\n {gStatus?.configured && (\n <div className=\"mt-3 pt-3 border-t border-border\">\n {toast && <Alert variant={toast.type} className=\"mb-2\">{toast.message}</Alert>}\n <EditableField\n label=\"Calendar ID\"\n value={config.googleCalendarId}\n configKey=\"googleCalendarId\"\n description='Use \"primary\" for your main calendar, or paste a full calendar ID (e.g. abc123@group.calendar.google.com) for a secondary or shared calendar.'\n onSave={saveField}\n />\n </div>\n )}\n </ConnectionCard>\n );\n}\n","\"use client\";\n\nimport { useConfig } from \"@/lib/hooks/use-config\";\nimport { useHealth } from \"@/lib/hooks/use-health\";\n\nimport { AppleCalendarCard } from \"@/components/connections/apple-calendar-card\";\nimport { GoogleCard } from \"@/components/connections/google-card\";\nimport { IntegrationCard } from \"@/components/connections/integration-card\";\nimport { OutlookCalendarCard } from \"@/components/connections/outlook-calendar-card\";\nimport { ProcessModelCard } from \"@/components/connections/process-model-card\";\nimport { ConnectionsSectionHeader } from \"@/components/connections/section-header\";\n\nexport default function CalendarConnectionsPage() {\n const { data: config, isLoading: configLoading } = useConfig();\n const { data: health, isLoading: healthLoading } = useHealth();\n\n const loading = configLoading || healthLoading;\n const disconnected = !loading && (!config || !health);\n\n const calendarConnected =\n health?.integrations?.google?.services?.calendar?.connected ?? false;\n\n // The Calendar Event Model card binds the `calendar.change` ProcessKey,\n // which only fires from the daemon-side poller. In delegated mode the\n // poller is stopped and the picker becomes a misleading dead surface,\n // so we hide it. Mirrors the gate `calendar-preview.tsx` already uses\n // for the today's-events widget. Fail-open on undefined: show the card\n // until we can confirm the mode is delegated.\n const calendarDelegated =\n health?.integrationModes?.google_calendar?.mode === \"delegated\";\n\n return (\n <>\n <ConnectionsSectionHeader\n title=\"Calendar\"\n description=\"Calendar providers — Google, Outlook, and Apple. Google + Outlook OAuth are shared with the matching Mail account; per-mailbox management lives under Mail.\"\n healthy={calendarConnected ? 1 : 0}\n total={1}\n />\n\n {disconnected && (\n <p className=\"text-sm text-muted-foreground\">\n Daemon not connected. Start the daemon to configure calendar access.\n </p>\n )}\n\n {!loading && (\n <div id=\"google\" className=\"space-y-4\">\n <IntegrationCard integrationKey=\"google_calendar\" />\n <GoogleCard />\n {!calendarDelegated && (\n <ProcessModelCard\n processKey=\"calendar.change\"\n title=\"Calendar Event Model\"\n description=\"Model used when the agent processes calendar change events. Light-tier is recommended — classification and scheduling are well within Sonnet / GPT-5.4 Mini capabilities.\"\n />\n )}\n </div>\n )}\n\n {!loading && (\n <div id=\"outlook\" className=\"space-y-4\">\n <OutlookCalendarCard />\n </div>\n )}\n\n {!loading && (\n <div id=\"apple\" className=\"space-y-4\">\n <AppleCalendarCard />\n </div>\n )}\n </>\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport { Calendar, ExternalLink } from \"lucide-react\";\nimport { api, ApiError } from \"@/lib/api-client\";\nimport { useConfirm } from \"@/components/shared/confirm-dialog\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card } from \"@/components/ui/card\";\nimport { Input } from \"@/components/ui/input\";\nimport { Separator } from \"@/components/ui/separator\";\n\ninterface CalendarEntry {\n id: string;\n summary: string;\n description: string | null;\n primary: boolean;\n}\n\ninterface StatusResponse {\n configured: boolean;\n available: boolean;\n}\n\ninterface ConnectResponse {\n status: \"connected\";\n email: string;\n calendars: CalendarEntry[];\n}\n\n/**\n * Connection card for Apple Calendar (iCloud CalDAV). Mirrors the\n * iCloud Mail card's copy so users follow the same Apple ID app-specific\n * password flow they already know from Mail.\n *\n * The form posts to `POST /api/apple-calendar/credentials`, which validates\n * by attempting a CalDAV principal discovery against iCloud. On success the\n * daemon stores the credentials in the OS keychain and re-inits the\n * AppleCalendarService.\n */\nexport function AppleCalendarCard() {\n const confirm = useConfirm();\n const [status, setStatus] = useState<StatusResponse | null>(null);\n const [calendars, setCalendars] = useState<CalendarEntry[]>([]);\n const [calendarsError, setCalendarsError] = useState<string | null>(null);\n const [email, setEmail] = useState(\"\");\n const [appPassword, setAppPassword] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n\n const refresh = useCallback(async () => {\n try {\n const next = await api.get<StatusResponse>(\"/apple-calendar/status\");\n setStatus(next);\n if (next.available) {\n try {\n const list = await api.get<{ calendars: CalendarEntry[] }>(\n \"/apple-calendar/calendars\",\n );\n setCalendars(list.calendars);\n setCalendarsError(null);\n } catch (e) {\n // Surface the failure inline so the user sees an actionable\n // message instead of a quietly empty list under a \"Connected\"\n // badge — that combination previously looked like the account\n // was healthy but had no calendars at all.\n setCalendars([]);\n setCalendarsError(\n e instanceof Error ? e.message : \"Failed to load calendars\",\n );\n }\n } else {\n setCalendars([]);\n setCalendarsError(null);\n }\n } catch {\n setStatus(null);\n }\n }, []);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n const connect = async () => {\n setBusy(true);\n setError(null);\n setNotice(null);\n try {\n const res = await api.post<ConnectResponse>(\n \"/apple-calendar/credentials\",\n {\n email: email.trim(),\n appPassword: appPassword.trim(),\n },\n );\n setNotice(\n `Connected as ${res.email}. ${res.calendars.length} calendar${\n res.calendars.length === 1 ? \"\" : \"s\"\n } discovered.`,\n );\n setEmail(\"\");\n setAppPassword(\"\");\n await refresh();\n } catch (e) {\n const msg =\n e instanceof ApiError\n ? e.message\n : e instanceof Error\n ? e.message\n : \"Failed to connect\";\n setError(msg);\n } finally {\n setBusy(false);\n }\n };\n\n const disconnect = async () => {\n const ok = await confirm({\n title: \"Disconnect Apple Calendar?\",\n description:\n \"The app-specific password will be removed from the OS keychain. The agent will no longer be able to read or write your iCloud calendar until you reconnect.\",\n confirmLabel: \"Disconnect\",\n });\n if (!ok) return;\n setBusy(true);\n setError(null);\n setNotice(null);\n try {\n await api.delete(\"/apple-calendar/credentials\");\n setNotice(\"Apple Calendar disconnected.\");\n await refresh();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to disconnect\");\n } finally {\n setBusy(false);\n }\n };\n\n const setPrimary = async (calendarUrl: string) => {\n setBusy(true);\n setError(null);\n try {\n const res = await api.post<{ calendars: CalendarEntry[] }>(\n \"/apple-calendar/default-calendar\",\n { calendarUrl },\n );\n setCalendars(res.calendars);\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to set primary\");\n } finally {\n setBusy(false);\n }\n };\n\n const tone =\n status?.available\n ? \"success\"\n : status?.configured\n ? \"warning\"\n : \"default\";\n\n const badgeText = status?.available\n ? \"Connected\"\n : status?.configured\n ? \"Auth issue\"\n : \"Not connected\";\n\n const badgeVariant = status?.available\n ? \"green\"\n : status?.configured\n ? \"amber\"\n : \"gray\";\n\n return (\n <Card tone={tone}>\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex items-center gap-2 min-w-0\">\n <Calendar className=\"h-4 w-4 text-muted-foreground shrink-0\" />\n <h3 className=\"text-base font-semibold text-foreground truncate\">\n Apple Calendar (iCloud)\n </h3>\n </div>\n <Badge variant={badgeVariant}>\n {badgeText}\n </Badge>\n </div>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n Read and write events on the user's iCloud calendar over CalDAV.\n The daemon authenticates with an Apple-ID app-specific password —\n the same kind used by iCloud Mail — and stores it in the OS\n keychain.\n </p>\n\n <Separator className=\"my-4\" />\n\n {!status?.available && (\n <div className=\"space-y-3\">\n <div className=\"rounded-md border border-dashed border-border p-3 text-xs space-y-2\">\n <p className=\"text-foreground font-medium\">\n Step 1: Generate an app-specific password\n </p>\n <p className=\"text-muted-foreground\">\n Apple only allows app-specific passwords on Apple IDs that have\n two-factor authentication turned on.{\" \"}\n <a\n href=\"https://account.apple.com\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"underline inline-flex items-center gap-0.5\"\n >\n Open Apple Account <ExternalLink className=\"h-3 w-3\" />\n </a>\n , then go to <strong>Sign-In and Security</strong> →{\" \"}\n <strong>App-Specific Passwords</strong> →{\" \"}\n <strong>Generate an app-specific password</strong>.\n </p>\n <p className=\"text-muted-foreground\">\n Apple shows a 19-character password in the form{\" \"}\n <code>xxxx-xxxx-xxxx-xxxx</code>. Copy it exactly — the dashes\n are required.\n </p>\n </div>\n\n <div className=\"rounded-md border border-border p-3 space-y-2\">\n <p className=\"text-xs font-semibold text-foreground\">\n Step 2: Authenticate\n </p>\n <div>\n <label\n className=\"block text-xs text-muted-foreground mb-1\"\n htmlFor=\"apple-cal-email\"\n >\n Apple ID email\n </label>\n <Input\n id=\"apple-cal-email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@icloud.com\"\n className=\"h-8 text-xs\"\n autoComplete=\"username\"\n />\n </div>\n <div>\n <label\n className=\"block text-xs text-muted-foreground mb-1\"\n htmlFor=\"apple-cal-password\"\n >\n App-specific password\n </label>\n <Input\n id=\"apple-cal-password\"\n type=\"password\"\n value={appPassword}\n onChange={(e) => setAppPassword(e.target.value)}\n placeholder=\"xxxx-xxxx-xxxx-xxxx\"\n className=\"h-8 text-xs\"\n autoComplete=\"current-password\"\n />\n <p className=\"mt-1 text-[11px] text-muted-foreground\">\n Format: xxxx-xxxx-xxxx-xxxx. Dashes are required — paste,\n don't retype.\n </p>\n </div>\n <Button\n size=\"sm\"\n onClick={() => void connect()}\n disabled={busy || email.trim().length === 0 || appPassword.trim().length === 0}\n className=\"h-7 text-xs px-3\"\n >\n {busy ? \"Authenticating…\" : \"Authenticate\"}\n </Button>\n </div>\n </div>\n )}\n\n {status?.available && calendars.length === 0 && (\n <div className=\"space-y-2\">\n <Alert variant=\"warning\">\n {calendarsError\n ? `Could not load the calendar list — ${calendarsError}. Try refreshing the page; if the error persists, disconnect and re-authenticate.`\n : \"Connected, but no calendars are visible. iCloud may still be syncing — refresh in a moment.\"}\n </Alert>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => void disconnect()}\n disabled={busy}\n className=\"h-7 text-xs px-3 text-destructive\"\n >\n Disconnect\n </Button>\n </div>\n )}\n\n {status?.available && calendars.length > 0 && (\n <div className=\"space-y-2\">\n <p className=\"text-xs font-medium text-foreground\">Calendars</p>\n <ul className=\"rounded-md border border-border divide-y divide-border\">\n {calendars.map((cal) => (\n <li\n key={cal.id}\n className=\"flex items-center justify-between px-3 py-2 text-xs\"\n >\n <div className=\"min-w-0\">\n <div className=\"font-medium truncate\">{cal.summary}</div>\n {cal.description && (\n <div className=\"text-muted-foreground truncate\">\n {cal.description}\n </div>\n )}\n </div>\n {cal.primary ? (\n <Badge variant=\"green\">Primary</Badge>\n ) : (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-6 text-[11px] px-2\"\n disabled={busy}\n onClick={() => void setPrimary(cal.id)}\n >\n Set primary\n </Button>\n )}\n </li>\n ))}\n </ul>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => void disconnect()}\n disabled={busy}\n className=\"h-7 text-xs px-3 text-destructive\"\n >\n Disconnect\n </Button>\n </div>\n )}\n\n {notice && <Alert variant=\"success\" className=\"mt-3\">{notice}</Alert>}\n {error && <Alert variant=\"error\" className=\"mt-3\">{error}</Alert>}\n </Card>\n );\n}\n","\"use client\";\n\nimport { useConfig } from \"@/lib/hooks/use-config\";\nimport { useHealth } from \"@/lib/hooks/use-health\";\nimport { IntegrationCard } from \"@/components/connections/integration-card\";\n\n/**\n * Outlook Calendar connection card (SETUP-FLOW-REDESIGN-PLAN §5.5 / §8).\n *\n * Thin wrapper around the registry-driven `IntegrationCard` keyed on\n * `outlook_calendar`. The descriptor's `supportedModes: [\"direct\",\n * \"delegated\", \"native\", \"disabled\"]` surfaces every mode. Microsoft\n * does not ship a hosted Outlook MCP connector for Claude / Codex /\n * Gemini, so `userManagedConnector: true` instructs the card to render\n * the \"register an Outlook MCP on the chosen backend\" notice instead of\n * a feature matrix for both delegated and native — see\n * INTEGRATION_NATIVE_MODE_DESIGN.md §5.3 (2026-05 amendment).\n *\n * Auth state is shared with Outlook Mail via the MSAL cache key\n * `mail:outlook:<accountId>` — the surrounding card surfaces the\n * shared-token status in the standard health pill, so no Outlook-\n * specific code path is needed here. When Outlook Mail is configured\n * direct + authenticated, calendar reads succeed immediately.\n */\nexport function OutlookCalendarCard() {\n const { data: config } = useConfig();\n const { data: health } = useHealth();\n // Match the rest of the connections page: skip rendering until config\n // and health load so the page does not flash an empty Outlook frame.\n if (!config || !health) return null;\n return <IntegrationCard integrationKey=\"outlook_calendar\" />;\n}\n"],"names":["useSaveConfig","queryClient","toast","setToast","showToast","type","message","setTimeout","interpret","res","successMessage","warnings","Object","values","errors","length","join","requiresRestart","saveField","key","value","patch","invalidateQueries","queryKey","e","Error","saveMultipleFields","updates","patchConfig","ConnectionsSectionHeader","title","description","healthy","total","attention","actions","allHealthy","noneHealthy","className","STATUS_BADGE","connected","variant","label","configured","connecting","error","disabled","cardTone","status","deriveIntegrationStatus","s","deriveMessagingStatus","runtimeState","deriveConfiguredStatus","messagingMetadata","undefined","ownerConfigured","ownerChannelKnown","notificationEligible","lastInboundAt","ConnectionCard","name","icon","metadata","children","badge","tone","map","m","BACKEND_LABELS","claude","codex","gemini","BACKEND_SHORT_LABELS","BACKEND_PROVIDER_LABELS","BACKEND_PROVIDER_SHORT","BACKEND_WEB_SEARCH_DESCRIPTIONS","BACKEND_COLORS","BACKEND_MODEL_PALETTES","OTHER_MODEL_PALETTE","CHART_CATEGORY_PALETTE","BACKEND_BADGE_VARIANTS","PROCESS_LABELS","getBackendLabel","backendId","getBackendShortLabel","getProcessLabel","processKey","getProcessGroup","startsWith","formatModelName","modelId","replace","trim","formatShortModelName","modelBadgeVariant","backend","detectBackendFromModel","parseModelUsage","json","raw","JSON","parse","entries","v","push","inputTokens","outputTokens","costUsd","sort","a","b","pickDisplayModel","modelUsed","modelUsageJson","lower","toLowerCase","includes","assignModelColors","models","byBackend","Map","model","bucket","get","set","result","list","localeCompare","palette","n","forEach","i","idx","Math","floor","useBackends","options","queryFn","enabled","staleTime","useProcessConfig","getModelsForTier","tier","tierModels","filter","ProcessModelCard","data","backendsData","processConfigData","editing","setEditing","draftBackend","setDraftBackend","draftModel","setDraftModel","saving","setSaving","feedback","setFeedback","configOrUndef","configs","find","c","backendMap","backends","id","enabledBackends","config","currentBackend","mainBackend","currentModelLabel","mainModel","draftBackendData","availableModels","beginEdit","cancelEdit","handleBackendChange","nextId","defaultTier","save","put","fallbackBackend","fallbackModel","maxTurns","maxBudgetUsd","err","body","updatedBy","size","onClick","onValueChange","truncateMiddle","max","keepEnd","keepStart","slice","FileUploadButton","accept","onUpload","uploading","setUploading","setResult","inputRef","handleFile","file","fileName","ref","onChange","target","files","current","click","GoogleIcon","viewBox","fill","xmlns","d","GoogleCard","health","gStatus","integrations","google","authorizing","setAuthorizing","authError","setAuthError","pollRef","credDone","googleCalendarCredentialsConfigured","tokenDone","googleCalendarTokenConfigured","isServiceAccount","googleCredentialType","handleUploadCredentials","upload","clearInterval","handler","event","origin","window","addEventListener","removeEventListener","handleAuthorize","post","popup","open","authUrl","setInterval","closed","calendarStatus","services","calendar","gmailStatus","gmail","displayStatus","googleCalendarId","configKey","onSave","AppleCalendarCard","confirm","setStatus","calendars","setCalendars","calendarsError","setCalendarsError","email","setEmail","appPassword","setAppPassword","busy","setBusy","setError","notice","setNotice","refresh","next","available","connect","msg","disconnect","ok","confirmLabel","delete","setPrimary","calendarUrl","badgeText","badgeVariant","href","rel","htmlFor","placeholder","autoComplete","cal","summary","primary"],"mappings":"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","ignoreList":[0,4,6,8,9,10,11,13]}
|