@aitne/dashboard 0.1.9 → 0.1.10
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 +1 -0
- package/.next/build-manifest.json +3 -3
- package/.next/diagnostics/route-bundle-stats.json +269 -295
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +24 -0
- package/.next/routes-manifest.json +6 -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 +28 -27
- package/.next/server/app/activity.segments/_full.segment.rsc +28 -27
- 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/agents/[slug]/executions/page.js.nft.json +1 -1
- package/.next/server/app/agents/[slug]/executions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/agents/[slug]/page.js.nft.json +1 -1
- package/.next/server/app/agents/[slug]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/agents/page.js.nft.json +1 -1
- package/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/.next/server/app/agents.html +1 -1
- package/.next/server/app/agents.rsc +17 -17
- package/.next/server/app/agents.segments/_full.segment.rsc +17 -17
- package/.next/server/app/agents.segments/_head.segment.rsc +4 -4
- package/.next/server/app/agents.segments/_index.segment.rsc +10 -10
- package/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/agents.segments/agents.segment.rsc +3 -3
- 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 +23 -24
- package/.next/server/app/analytics.segments/_full.segment.rsc +23 -24
- 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/browser-tasks/[id]/page.js.nft.json +1 -1
- package/.next/server/app/browser-tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/browser-tasks/page.js.nft.json +1 -1
- package/.next/server/app/browser-tasks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/browser-tasks.html +1 -1
- package/.next/server/app/browser-tasks.rsc +17 -17
- package/.next/server/app/browser-tasks.segments/_full.segment.rsc +17 -17
- package/.next/server/app/browser-tasks.segments/_head.segment.rsc +4 -4
- package/.next/server/app/browser-tasks.segments/_index.segment.rsc +10 -10
- package/.next/server/app/browser-tasks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/browser-tasks.segments/browser-tasks/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/browser-tasks.segments/browser-tasks.segment.rsc +3 -3
- 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/integrations/browser-history/page.js.nft.json +1 -1
- package/.next/server/app/settings/integrations/browser-history/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/integrations/browser-history-managed/b4/page.js.nft.json +1 -1
- package/.next/server/app/settings/integrations/browser-history-managed/b4/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/integrations/browser-history-managed/b4.html +1 -1
- package/.next/server/app/settings/integrations/browser-history-managed/b4.rsc +18 -18
- package/.next/server/app/settings/integrations/browser-history-managed/b4.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/integrations/browser-history-managed/b4.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/integrations/browser-history-managed/b4.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/integrations/browser-history-managed/b4.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/integrations/browser-history-managed/b4.segments/settings/integrations/browser-history-managed/b4/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/integrations/browser-history-managed/b4.segments/settings/integrations/browser-history-managed/b4.segment.rsc +3 -3
- package/.next/server/app/settings/integrations/browser-history-managed/b4.segments/settings/integrations/browser-history-managed.segment.rsc +3 -3
- package/.next/server/app/settings/integrations/browser-history-managed/b4.segments/settings/integrations.segment.rsc +3 -3
- package/.next/server/app/settings/integrations/browser-history-managed/b4.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/integrations/browser-history-managed/page.js.nft.json +1 -1
- package/.next/server/app/settings/integrations/browser-history-managed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/integrations/browser-history-managed.html +1 -1
- package/.next/server/app/settings/integrations/browser-history-managed.rsc +18 -18
- package/.next/server/app/settings/integrations/browser-history-managed.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/integrations/browser-history-managed.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/integrations/browser-history-managed.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/integrations/browser-history-managed.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/integrations/browser-history-managed.segments/settings/integrations/browser-history-managed/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/integrations/browser-history-managed.segments/settings/integrations/browser-history-managed.segment.rsc +3 -3
- package/.next/server/app/settings/integrations/browser-history-managed.segments/settings/integrations.segment.rsc +3 -3
- package/.next/server/app/settings/integrations/browser-history-managed.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/integrations/browser-history.html +1 -1
- package/.next/server/app/settings/integrations/browser-history.rsc +18 -18
- package/.next/server/app/settings/integrations/browser-history.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/integrations/browser-history.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/integrations/browser-history.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/integrations/browser-history.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/integrations/browser-history.segments/settings/integrations/browser-history/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/integrations/browser-history.segments/settings/integrations/browser-history.segment.rsc +3 -3
- package/.next/server/app/settings/integrations/browser-history.segments/settings/integrations.segment.rsc +3 -3
- package/.next/server/app/settings/integrations/browser-history.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/lessons/page/app-paths-manifest.json +3 -0
- package/.next/server/app/settings/lessons/page/build-manifest.json +18 -0
- package/.next/server/app/settings/lessons/page/next-font-manifest.json +6 -0
- package/.next/server/app/settings/lessons/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/settings/lessons/page/server-reference-manifest.json +4 -0
- package/.next/server/app/settings/lessons/page.js +16 -0
- package/.next/server/app/settings/lessons/page.js.nft.json +1 -0
- package/.next/server/app/settings/lessons/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings/lessons.html +1 -0
- package/.next/server/app/settings/lessons.meta +16 -0
- package/.next/server/app/settings/lessons.rsc +27 -0
- package/.next/server/app/settings/lessons.segments/_full.segment.rsc +27 -0
- package/.next/server/app/settings/lessons.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/lessons.segments/_index.segment.rsc +11 -0
- package/.next/server/app/settings/lessons.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/settings/lessons.segments/settings/lessons/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/settings/lessons.segments/settings/lessons.segment.rsc +5 -0
- package/.next/server/app/settings/lessons.segments/settings.segment.rsc +5 -0
- 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.js.nft.json +1 -1
- package/.next/server/app/settings/wiki/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/wiki/timeline/page.js.nft.json +1 -1
- package/.next/server/app/settings/wiki/timeline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/wiki/timeline.html +1 -1
- package/.next/server/app/settings/wiki/timeline.rsc +16 -16
- package/.next/server/app/settings/wiki/timeline.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/wiki/timeline.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/wiki/timeline.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/wiki/timeline.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki/timeline/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki/timeline.segment.rsc +3 -3
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki.segment.rsc +3 -3
- package/.next/server/app/settings/wiki/timeline.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/wiki.html +1 -1
- package/.next/server/app/settings/wiki.rsc +18 -18
- package/.next/server/app/settings/wiki.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/wiki.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/wiki.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/wiki.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/wiki.segments/settings/wiki/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/wiki.segments/settings/wiki.segment.rsc +3 -3
- package/.next/server/app/settings/wiki.segments/settings.segment.rsc +4 -4
- 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.js.nft.json +1 -1
- package/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
- package/.next/server/app/wiki/timeline/page.js.nft.json +1 -1
- package/.next/server/app/wiki/timeline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/wiki/timeline.html +1 -1
- package/.next/server/app/wiki/timeline.rsc +17 -17
- package/.next/server/app/wiki/timeline.segments/_full.segment.rsc +17 -17
- package/.next/server/app/wiki/timeline.segments/_head.segment.rsc +4 -4
- package/.next/server/app/wiki/timeline.segments/_index.segment.rsc +10 -10
- package/.next/server/app/wiki/timeline.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/wiki/timeline.segments/wiki/timeline/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/wiki/timeline.segments/wiki/timeline.segment.rsc +3 -3
- package/.next/server/app/wiki/timeline.segments/wiki.segment.rsc +3 -3
- package/.next/server/app/wiki.html +1 -1
- package/.next/server/app/wiki.rsc +17 -17
- package/.next/server/app/wiki.segments/_full.segment.rsc +17 -17
- package/.next/server/app/wiki.segments/_head.segment.rsc +4 -4
- package/.next/server/app/wiki.segments/_index.segment.rsc +10 -10
- package/.next/server/app/wiki.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/wiki.segments/wiki/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/wiki.segments/wiki.segment.rsc +3 -3
- package/.next/server/app-paths-manifest.json +1 -0
- package/.next/server/chunks/0z~i_next_dist_esm_build_templates_app-route_0o_o_hp.js +1 -1
- package/.next/server/chunks/ssr/0juq_dashboard__next-internal_server_app_settings_lessons_page_actions_0_yqadq.js +3 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0h7ji04.js +4 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__03yuq_v._.js +7 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0kvyeu1._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0znkqrs._.js +3 -0
- package/.next/server/chunks/ssr/{_0cvy_5o._.js → _00_--i0._.js} +2 -2
- package/.next/server/chunks/ssr/_00ej8j9._.js +3 -0
- package/.next/server/chunks/ssr/{_0n.cr_p._.js → _04jkn8c._.js} +2 -2
- package/.next/server/chunks/ssr/_09-o1vq._.js +3 -0
- package/.next/server/chunks/ssr/_0cccma-._.js +3 -0
- package/.next/server/chunks/ssr/{_0pigg8p._.js → _0evcd7w._.js} +2 -2
- package/.next/server/chunks/ssr/{_0klzava._.js → _0jrxrig._.js} +2 -2
- package/.next/server/chunks/ssr/_0nvpv18._.js +3 -0
- package/.next/server/chunks/ssr/{_0s4udmt._.js → _0o~hk.m._.js} +2 -2
- package/.next/server/chunks/ssr/_0pdbiu.._.js +9 -0
- package/.next/server/chunks/ssr/_0r25vcp._.js +3 -0
- package/.next/server/chunks/ssr/_0tf7hjz._.js +3 -0
- package/.next/server/chunks/ssr/_0xmdrbq._.js +3 -0
- package/.next/server/chunks/ssr/_0y-w3is._.js +3 -0
- package/.next/server/chunks/ssr/_0zz58.-._.js +1 -1
- package/.next/server/chunks/ssr/{_03qiunv._.js → _0~fi8o-._.js} +2 -2
- package/.next/server/chunks/ssr/_10s6iy.._.js +3 -0
- package/.next/server/chunks/ssr/{_03~tfh5._.js → _11pdc0s._.js} +2 -2
- package/.next/server/chunks/ssr/packages_dashboard_src_0uxs9-.._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_0z~3g5n._.js +3 -0
- package/.next/server/chunks/ssr/packages_shared_dist_index_0kuvow-.js +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/0-dw-4a8vg9m8.js +1 -0
- package/.next/static/chunks/0.za~0o8~5n1~.css +1 -0
- package/.next/static/chunks/0.~7m9beb0bmp.js +11 -0
- package/.next/static/chunks/{0ndazhatbfzo7.js → 02k085x_j4_bz.js} +1 -1
- package/.next/static/chunks/05xugzf8sfrxt.js +1 -0
- package/.next/static/chunks/073hnld9_qq5g.js +1 -0
- package/.next/static/chunks/{0ym9.va55pvtp.js → 0e3ds9mkx7.~v.js} +1 -1
- package/.next/static/chunks/{0m04i2v9cb~qe.js → 0fri59ogcsfbl.js} +1 -1
- package/.next/static/chunks/{0ytubabo8p3y0.js → 0j15hn~z~i56..js} +1 -1
- package/.next/static/chunks/{0z8eq-9fm5tni.js → 0mfem_s.3s4r-.js} +1 -1
- package/.next/static/chunks/{159r5abwjgz~a.js → 0t.xvj-t_vtrp.js} +1 -1
- package/.next/static/chunks/0vivqt8njmkpv.js +1 -0
- package/.next/static/chunks/{15pljj6~je.kw.js → 0v~gg~hn-8_k2.js} +1 -1
- package/.next/static/chunks/{0n6_wx41s~.c6.js → 0~7d6m~du_b.d.js} +1 -1
- package/.next/static/chunks/{17ncd9sikwfzz.js → 0~nct--xt2~bi.js} +1 -1
- package/.next/static/chunks/17b2~cmid8qeu.js +3 -0
- package/.next/static/chunks/{0105cq0xp5_hx.js → 17rcecfesskxn.js} +1 -1
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/package.json +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__0.tf.7i._.js +0 -7
- package/.next/server/chunks/ssr/[root-of-the-server]__0j8z8rh._.js +0 -3
- package/.next/server/chunks/ssr/_06pec-y._.js +0 -9
- package/.next/server/chunks/ssr/_07fm8yg._.js +0 -3
- package/.next/server/chunks/ssr/_0b--0p5._.js +0 -3
- package/.next/server/chunks/ssr/_0bz7.8y._.js +0 -3
- package/.next/server/chunks/ssr/_0erbggi._.js +0 -3
- package/.next/server/chunks/ssr/_0gp2p2l._.js +0 -3
- package/.next/server/chunks/ssr/_0jbimd_._.js +0 -3
- package/.next/server/chunks/ssr/_0nnu1fp._.js +0 -3
- package/.next/server/chunks/ssr/_0qu5la9._.js +0 -3
- package/.next/server/chunks/ssr/_0vn~fot._.js +0 -3
- package/.next/server/chunks/ssr/_0x._qd7._.js +0 -3
- package/.next/server/chunks/ssr/_0yh7rb_._.js +0 -3
- package/.next/static/chunks/01eo9jrlkjy03.js +0 -3
- package/.next/static/chunks/0_31fedlksujg.js +0 -1
- package/.next/static/chunks/0flms4gevti3_.js +0 -1
- package/.next/static/chunks/0mjh8s01-3c7z.css +0 -1
- package/.next/static/chunks/0obgpq3wenu4s.js +0 -11
- package/.next/static/chunks/0yh77irip2zjn.js +0 -1
- package/.next/static/chunks/1763zl5q3pn~0.js +0 -1
- /package/.next/static/{buq5uD5wcoRL2KUVTM1i7 → i_QR0WWkZFeICcOMbfuUs}/_buildManifest.js +0 -0
- /package/.next/static/{buq5uD5wcoRL2KUVTM1i7 → i_QR0WWkZFeICcOMbfuUs}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{buq5uD5wcoRL2KUVTM1i7 → i_QR0WWkZFeICcOMbfuUs}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,52387,e=>{"use strict";let t=(0,e.i(77379).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"}]]);e.s(["ExternalLink",0,t],52387)},7663,e=>{"use strict";let t=(0,e.i(77379).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"}]]);e.s(["Save",0,t],7663)},74490,e=>{"use strict";var t=e.i(54710),r=e.i(81471);let a=(0,e.i(94237).cva)("rounded-xl border p-5 shadow-[0_1px_3px_rgb(0_0_0/0.04)]",{variants:{tone:{default:"border-border bg-card",warning:"border-amber-200 bg-amber-50/50 dark:border-amber-900 dark:bg-amber-950/30",success:"border-emerald-200 bg-emerald-50/50 dark:border-emerald-900 dark:bg-emerald-950/30",error:"border-red-200 bg-red-50/50 dark:border-red-900 dark:bg-red-950/30"},interactive:{true:"transition-shadow duration-150 hover:shadow-[0_4px_6px_rgb(0_0_0/0.06)]",false:""}},defaultVariants:{tone:"default",interactive:!1}});e.s(["Card",0,function({className:e,tone:n,interactive:s,...i}){return(0,t.jsx)("div",{className:(0,r.cn)(a({tone:n,interactive:s}),e),...i})},"CardHeader",0,function({className:e,...a}){return(0,t.jsx)("div",{className:(0,r.cn)("mb-3 flex items-center justify-between",e),...a})},"CardStatLabel",0,function({className:e,...a}){return(0,t.jsx)("h3",{className:(0,r.cn)("text-sm font-medium text-muted-foreground",e),...a})},"CardTitle",0,function({className:e,...a}){return(0,t.jsx)("h3",{className:(0,r.cn)("text-lg font-semibold text-foreground",e),...a})},"CardValue",0,function({className:e,...a}){return(0,t.jsx)("div",{className:(0,r.cn)("text-3xl font-bold text-foreground",e),...a})}])},90925,e=>{"use strict";let t=(0,e.i(77379).default)("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);e.s(["Trash2",0,t],90925)},60168,e=>{"use strict";let t=(0,e.i(77379).default)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["Plus",0,t],60168)},21682,e=>{"use strict";let t=(0,e.i(77379).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"}]]);e.s(["Pencil",0,t],21682)},75750,e=>{"use strict";let t=(0,e.i(77379).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"}]]);e.s(["XCircle",0,t],75750)},2745,e=>{"use strict";let t=(0,e.i(77379).default)("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);e.s(["ShieldCheck",0,t],2745)},58436,e=>{"use strict";var t=e.i(54710),r=e.i(34416),a=e.i(55575),n=e.i(72740),s=e.i(20014),i=e.i(8652),l=e.i(66127),o=e.i(81471);e.s(["DirectoryPickerField",0,function({id:e,value:c,onChange:d,title:u,placeholder:h="Choose a folder...",defaultPath:m,disabled:p=!1,className:x,inputClassName:f,buttonLabel:g="Choose"}){let[b,v]=(0,r.useState)(!1),[y,w]=(0,r.useState)(null),j=async()=>{v(!0),w(null);try{let e=await (0,l.pickDirectoryFromDesktop)({title:u,defaultPath:c.trim()||m});e&&d(e)}catch(e){w(e instanceof Error?e.message:"Folder picker is unavailable.")}finally{v(!1)}};return(0,t.jsxs)("div",{className:(0,o.cn)("space-y-1",x),children:[(0,t.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row",children:[(0,t.jsx)(i.Input,{id:e,value:c,onChange:e=>{d(e.target.value),w(null)},placeholder:h,className:(0,o.cn)("font-mono text-sm",f),disabled:p||b}),(0,t.jsxs)(s.Button,{type:"button",variant:"outline",onClick:j,disabled:p||b,className:"shrink-0 gap-2",children:[b?(0,t.jsx)(n.Loader2,{className:"h-4 w-4 animate-spin"}):(0,t.jsx)(a.FolderOpen,{className:"h-4 w-4"}),b?"Opening...":g]})]}),y&&(0,t.jsx)("p",{className:"text-xs text-destructive",children:y})]})}])},13707,e=>{"use strict";var t=e.i(54710),r=e.i(34416),a=e.i(85565),n=e.i(90816),s=e.i(9413),i=e.i(22353),l=e.i(88248),o=e.i(75649),c=e.i(18731),d=e.i(27069),u=e.i(91967),h="ScrollArea",[m,p]=(0,s.createContextScope)(h),[x,f]=m(h),g=r.forwardRef((e,n)=>{let{__scopeScrollArea:s,type:l="hover",dir:c,scrollHideDelay:d=600,...u}=e,[h,m]=r.useState(null),[p,f]=r.useState(null),[g,b]=r.useState(null),[v,y]=r.useState(null),[w,j]=r.useState(null),[k,C]=r.useState(0),[N,S]=r.useState(0),[E,A]=r.useState(!1),[R,I]=r.useState(!1),T=(0,i.useComposedRefs)(n,e=>m(e)),D=(0,o.useDirection)(c);return(0,t.jsx)(x,{scope:s,type:l,dir:D,scrollHideDelay:d,scrollArea:h,viewport:p,onViewportChange:f,content:g,onContentChange:b,scrollbarX:v,onScrollbarXChange:y,scrollbarXEnabled:E,onScrollbarXEnabledChange:A,scrollbarY:w,onScrollbarYChange:j,scrollbarYEnabled:R,onScrollbarYEnabledChange:I,onCornerWidthChange:C,onCornerHeightChange:S,children:(0,t.jsx)(a.Primitive.div,{dir:D,...u,ref:T,style:{position:"relative","--radix-scroll-area-corner-width":k+"px","--radix-scroll-area-corner-height":N+"px",...e.style}})})});g.displayName=h;var b="ScrollAreaViewport",v=r.forwardRef((e,n)=>{let{__scopeScrollArea:s,children:l,nonce:o,...c}=e,d=f(b,s),u=r.useRef(null),h=(0,i.useComposedRefs)(n,u,d.onViewportChange);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:o}),(0,t.jsx)(a.Primitive.div,{"data-radix-scroll-area-viewport":"",...c,ref:h,style:{overflowX:d.scrollbarXEnabled?"scroll":"hidden",overflowY:d.scrollbarYEnabled?"scroll":"hidden",...e.style},children:(0,t.jsx)("div",{ref:d.onContentChange,style:{minWidth:"100%",display:"table"},children:l})})]})});v.displayName=b;var y="ScrollAreaScrollbar",w=r.forwardRef((e,a)=>{let{forceMount:n,...s}=e,i=f(y,e.__scopeScrollArea),{onScrollbarXEnabledChange:l,onScrollbarYEnabledChange:o}=i,c="horizontal"===e.orientation;return r.useEffect(()=>(c?l(!0):o(!0),()=>{c?l(!1):o(!1)}),[c,l,o]),"hover"===i.type?(0,t.jsx)(j,{...s,ref:a,forceMount:n}):"scroll"===i.type?(0,t.jsx)(k,{...s,ref:a,forceMount:n}):"auto"===i.type?(0,t.jsx)(C,{...s,ref:a,forceMount:n}):"always"===i.type?(0,t.jsx)(N,{...s,ref:a}):null});w.displayName=y;var j=r.forwardRef((e,a)=>{let{forceMount:s,...i}=e,l=f(y,e.__scopeScrollArea),[o,c]=r.useState(!1);return r.useEffect(()=>{let e=l.scrollArea,t=0;if(e){let r=()=>{window.clearTimeout(t),c(!0)},a=()=>{t=window.setTimeout(()=>c(!1),l.scrollHideDelay)};return e.addEventListener("pointerenter",r),e.addEventListener("pointerleave",a),()=>{window.clearTimeout(t),e.removeEventListener("pointerenter",r),e.removeEventListener("pointerleave",a)}}},[l.scrollArea,l.scrollHideDelay]),(0,t.jsx)(n.Presence,{present:s||o,children:(0,t.jsx)(C,{"data-state":o?"visible":"hidden",...i,ref:a})})}),k=r.forwardRef((e,a)=>{var s;let{forceMount:i,...l}=e,o=f(y,e.__scopeScrollArea),c="horizontal"===e.orientation,d=H(()=>m("SCROLL_END"),100),[h,m]=(s={hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}},r.useReducer((e,t)=>s[e][t]??e,"hidden"));return r.useEffect(()=>{if("idle"===h){let e=window.setTimeout(()=>m("HIDE"),o.scrollHideDelay);return()=>window.clearTimeout(e)}},[h,o.scrollHideDelay,m]),r.useEffect(()=>{let e=o.viewport,t=c?"scrollLeft":"scrollTop";if(e){let r=e[t],a=()=>{let a=e[t];r!==a&&(m("SCROLL"),d()),r=a};return e.addEventListener("scroll",a),()=>e.removeEventListener("scroll",a)}},[o.viewport,c,m,d]),(0,t.jsx)(n.Presence,{present:i||"hidden"!==h,children:(0,t.jsx)(N,{"data-state":"hidden"===h?"hidden":"visible",...l,ref:a,onPointerEnter:(0,u.composeEventHandlers)(e.onPointerEnter,()=>m("POINTER_ENTER")),onPointerLeave:(0,u.composeEventHandlers)(e.onPointerLeave,()=>m("POINTER_LEAVE"))})})}),C=r.forwardRef((e,a)=>{let s=f(y,e.__scopeScrollArea),{forceMount:i,...l}=e,[o,c]=r.useState(!1),d="horizontal"===e.orientation,u=H(()=>{if(s.viewport){let e=s.viewport.offsetWidth<s.viewport.scrollWidth,t=s.viewport.offsetHeight<s.viewport.scrollHeight;c(d?e:t)}},10);return U(s.viewport,u),U(s.content,u),(0,t.jsx)(n.Presence,{present:i||o,children:(0,t.jsx)(N,{"data-state":o?"visible":"hidden",...l,ref:a})})}),N=r.forwardRef((e,a)=>{let{orientation:n="vertical",...s}=e,i=f(y,e.__scopeScrollArea),l=r.useRef(null),o=r.useRef(0),[c,d]=r.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),u=_(c.viewport,c.content),h={...s,sizes:c,onSizesChange:d,hasThumb:!!(u>0&&u<1),onThumbChange:e=>l.current=e,onThumbPointerUp:()=>o.current=0,onThumbPointerDown:e=>o.current=e};function m(e,t){return function(e,t,r,a="ltr"){let n=B(r),s=t||n/2,i=r.scrollbar.paddingStart+s,l=r.scrollbar.size-r.scrollbar.paddingEnd-(n-s),o=r.content-r.viewport;return z([i,l],"ltr"===a?[0,o]:[-1*o,0])(e)}(e,o.current,c,t)}return"horizontal"===n?(0,t.jsx)(S,{...h,ref:a,onThumbPositionChange:()=>{if(i.viewport&&l.current){let e=q(i.viewport.scrollLeft,c,i.dir);l.current.style.transform=`translate3d(${e}px, 0, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollLeft=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollLeft=m(e,i.dir))}}):"vertical"===n?(0,t.jsx)(E,{...h,ref:a,onThumbPositionChange:()=>{if(i.viewport&&l.current){let e=q(i.viewport.scrollTop,c);l.current.style.transform=`translate3d(0, ${e}px, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollTop=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollTop=m(e))}}):null}),S=r.forwardRef((e,a)=>{let{sizes:n,onSizesChange:s,...l}=e,o=f(y,e.__scopeScrollArea),[c,d]=r.useState(),u=r.useRef(null),h=(0,i.useComposedRefs)(a,u,o.onScrollbarXChange);return r.useEffect(()=>{u.current&&d(getComputedStyle(u.current))},[u]),(0,t.jsx)(I,{"data-orientation":"horizontal",...l,ref:h,sizes:n,style:{bottom:0,left:"rtl"===o.dir?"var(--radix-scroll-area-corner-width)":0,right:"ltr"===o.dir?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":B(n)+"px",...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.x),onDragScroll:t=>e.onDragScroll(t.x),onWheelScroll:(t,r)=>{if(o.viewport){var a,n;let s=o.viewport.scrollLeft+t.deltaX;e.onWheelScroll(s),a=s,n=r,a>0&&a<n&&t.preventDefault()}},onResize:()=>{u.current&&o.viewport&&c&&s({content:o.viewport.scrollWidth,viewport:o.viewport.offsetWidth,scrollbar:{size:u.current.clientWidth,paddingStart:O(c.paddingLeft),paddingEnd:O(c.paddingRight)}})}})}),E=r.forwardRef((e,a)=>{let{sizes:n,onSizesChange:s,...l}=e,o=f(y,e.__scopeScrollArea),[c,d]=r.useState(),u=r.useRef(null),h=(0,i.useComposedRefs)(a,u,o.onScrollbarYChange);return r.useEffect(()=>{u.current&&d(getComputedStyle(u.current))},[u]),(0,t.jsx)(I,{"data-orientation":"vertical",...l,ref:h,sizes:n,style:{top:0,right:"ltr"===o.dir?0:void 0,left:"rtl"===o.dir?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":B(n)+"px",...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.y),onDragScroll:t=>e.onDragScroll(t.y),onWheelScroll:(t,r)=>{if(o.viewport){var a,n;let s=o.viewport.scrollTop+t.deltaY;e.onWheelScroll(s),a=s,n=r,a>0&&a<n&&t.preventDefault()}},onResize:()=>{u.current&&o.viewport&&c&&s({content:o.viewport.scrollHeight,viewport:o.viewport.offsetHeight,scrollbar:{size:u.current.clientHeight,paddingStart:O(c.paddingTop),paddingEnd:O(c.paddingBottom)}})}})}),[A,R]=m(y),I=r.forwardRef((e,n)=>{let{__scopeScrollArea:s,sizes:o,hasThumb:c,onThumbChange:d,onThumbPointerUp:h,onThumbPointerDown:m,onThumbPositionChange:p,onDragScroll:x,onWheelScroll:g,onResize:b,...v}=e,w=f(y,s),[j,k]=r.useState(null),C=(0,i.useComposedRefs)(n,e=>k(e)),N=r.useRef(null),S=r.useRef(""),E=w.viewport,R=o.content-o.viewport,I=(0,l.useCallbackRef)(g),T=(0,l.useCallbackRef)(p),D=H(b,10);function P(e){N.current&&x({x:e.clientX-N.current.left,y:e.clientY-N.current.top})}return r.useEffect(()=>{let e=e=>{let t=e.target;j?.contains(t)&&I(e,R)};return document.addEventListener("wheel",e,{passive:!1}),()=>document.removeEventListener("wheel",e,{passive:!1})},[E,j,R,I]),r.useEffect(T,[o,T]),U(j,D),U(w.content,D),(0,t.jsx)(A,{scope:s,scrollbar:j,hasThumb:c,onThumbChange:(0,l.useCallbackRef)(d),onThumbPointerUp:(0,l.useCallbackRef)(h),onThumbPositionChange:T,onThumbPointerDown:(0,l.useCallbackRef)(m),children:(0,t.jsx)(a.Primitive.div,{...v,ref:C,style:{position:"absolute",...v.style},onPointerDown:(0,u.composeEventHandlers)(e.onPointerDown,e=>{0===e.button&&(e.target.setPointerCapture(e.pointerId),N.current=j.getBoundingClientRect(),S.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",w.viewport&&(w.viewport.style.scrollBehavior="auto"),P(e))}),onPointerMove:(0,u.composeEventHandlers)(e.onPointerMove,P),onPointerUp:(0,u.composeEventHandlers)(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=S.current,w.viewport&&(w.viewport.style.scrollBehavior=""),N.current=null})})})}),T="ScrollAreaThumb",D=r.forwardRef((e,r)=>{let{forceMount:a,...s}=e,i=R(T,e.__scopeScrollArea);return(0,t.jsx)(n.Presence,{present:a||i.hasThumb,children:(0,t.jsx)(P,{ref:r,...s})})}),P=r.forwardRef((e,n)=>{let{__scopeScrollArea:s,style:l,...o}=e,c=f(T,s),d=R(T,s),{onThumbPositionChange:h}=d,m=(0,i.useComposedRefs)(n,e=>d.onThumbChange(e)),p=r.useRef(void 0),x=H(()=>{p.current&&(p.current(),p.current=void 0)},100);return r.useEffect(()=>{let e=c.viewport;if(e){let t=()=>{x(),p.current||(p.current=$(e,h),h())};return h(),e.addEventListener("scroll",t),()=>e.removeEventListener("scroll",t)}},[c.viewport,x,h]),(0,t.jsx)(a.Primitive.div,{"data-state":d.hasThumb?"visible":"hidden",...o,ref:m,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...l},onPointerDownCapture:(0,u.composeEventHandlers)(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),r=e.clientX-t.left,a=e.clientY-t.top;d.onThumbPointerDown({x:r,y:a})}),onPointerUp:(0,u.composeEventHandlers)(e.onPointerUp,d.onThumbPointerUp)})});D.displayName=T;var M="ScrollAreaCorner",L=r.forwardRef((e,r)=>{let a=f(M,e.__scopeScrollArea),n=!!(a.scrollbarX&&a.scrollbarY);return"scroll"!==a.type&&n?(0,t.jsx)(F,{...e,ref:r}):null});L.displayName=M;var F=r.forwardRef((e,n)=>{let{__scopeScrollArea:s,...i}=e,l=f(M,s),[o,c]=r.useState(0),[d,u]=r.useState(0),h=!!(o&&d);return U(l.scrollbarX,()=>{let e=l.scrollbarX?.offsetHeight||0;l.onCornerHeightChange(e),u(e)}),U(l.scrollbarY,()=>{let e=l.scrollbarY?.offsetWidth||0;l.onCornerWidthChange(e),c(e)}),h?(0,t.jsx)(a.Primitive.div,{...i,ref:n,style:{width:o,height:d,position:"absolute",right:"ltr"===l.dir?0:void 0,left:"rtl"===l.dir?0:void 0,bottom:0,...e.style}}):null});function O(e){return e?parseInt(e,10):0}function _(e,t){let r=e/t;return isNaN(r)?0:r}function B(e){let t=_(e.viewport,e.content),r=e.scrollbar.paddingStart+e.scrollbar.paddingEnd;return Math.max((e.scrollbar.size-r)*t,18)}function q(e,t,r="ltr"){let a=B(t),n=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,s=t.scrollbar.size-n,i=t.content-t.viewport,l=(0,d.clamp)(e,"ltr"===r?[0,i]:[-1*i,0]);return z([0,i],[0,s-a])(l)}function z(e,t){return r=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let a=(t[1]-t[0])/(e[1]-e[0]);return t[0]+a*(r-e[0])}}var $=(e,t=()=>{})=>{let r={left:e.scrollLeft,top:e.scrollTop},a=0;return!function n(){let s={left:e.scrollLeft,top:e.scrollTop},i=r.left!==s.left,l=r.top!==s.top;(i||l)&&t(),r=s,a=window.requestAnimationFrame(n)}(),()=>window.cancelAnimationFrame(a)};function H(e,t){let a=(0,l.useCallbackRef)(e),n=r.useRef(0);return r.useEffect(()=>()=>window.clearTimeout(n.current),[]),r.useCallback(()=>{window.clearTimeout(n.current),n.current=window.setTimeout(a,t)},[a,t])}function U(e,t){let r=(0,l.useCallbackRef)(t);(0,c.useLayoutEffect)(()=>{let t=0;if(e){let a=new ResizeObserver(()=>{cancelAnimationFrame(t),t=window.requestAnimationFrame(r)});return a.observe(e),()=>{window.cancelAnimationFrame(t),a.unobserve(e)}}},[e,r])}var W=e.i(81471);let G=(0,r.forwardRef)(({className:e,children:r,...a},n)=>(0,t.jsxs)(g,{className:(0,W.cn)("relative overflow-hidden",e),...a,children:[(0,t.jsx)(v,{ref:n,className:"h-full w-full rounded-[inherit]",children:r}),(0,t.jsx)(w,{orientation:"vertical",className:"flex h-full w-2.5 touch-none select-none border-l border-l-transparent p-[1px] transition-colors",children:(0,t.jsx)(D,{className:"relative flex-1 rounded-full bg-border"})}),(0,t.jsx)(w,{orientation:"horizontal",className:"flex h-2.5 w-full flex-col touch-none select-none border-t border-t-transparent p-[1px] transition-colors",children:(0,t.jsx)(D,{className:"relative flex-1 rounded-full bg-border"})}),(0,t.jsx)(L,{})]}));G.displayName="ScrollArea",e.s(["ScrollArea",0,G],13707)},12077,e=>{"use strict";let t=(0,e.i(77379).default)("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]);e.s(["Terminal",0,t],12077)},13451,e=>{"use strict";var t=e.i(34416),r=e.i(95486),a=e.i(65268);e.s(["useSaveConfig",0,function(){let e=(0,r.useQueryClient)(),[n,s]=(0,t.useState)(null),i=(0,t.useCallback)((e,t)=>{s({type:e,message:t}),setTimeout(()=>s(null),4e3)},[]),l=(0,t.useCallback)((e,t)=>{let r=Object.values(e.errors??{});r.length>0?i("warning",r.join(" ")):e.requiresRestart?.length>0?i("warning",`Updated. Restart daemon for: ${e.requiresRestart.join(", ")}`):i("success",t)},[i]),o=(0,t.useCallback)(async(t,r)=>{try{let n=await a.api.patch("/config",{[t]:r});e.invalidateQueries({queryKey:["config"]}),l(n,"Setting updated")}catch(e){throw i("error",`Failed to save: ${e instanceof Error?e.message:"Unknown error"}`),e}},[e,l,i]),c=(0,t.useCallback)(async t=>{try{let r=await a.api.patch("/config",t);e.invalidateQueries({queryKey:["config"]}),l(r,"Settings updated")}catch(e){throw i("error",`Failed to save: ${e instanceof Error?e.message:"Unknown error"}`),e}},[e,l,i]);return{toast:n,showToast:i,saveField:o,saveMultipleFields:c,patchConfig:(0,t.useCallback)(async t=>{let r=await a.api.patch("/config",t);return e.invalidateQueries({queryKey:["config"]}),r},[e])}}])},55575,e=>{"use strict";let t=(0,e.i(77379).default)("FolderOpen",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);e.s(["FolderOpen",0,t],55575)},66127,e=>{"use strict";var t=e.i(65268);async function r({title:e,defaultPath:a}){let n=await t.api.post("/system/pick-directory",{title:e,...a?{defaultPath:a}:{}});if("selected"===n.status&&n.path)return n.path;if("cancelled"===n.status)return null;throw Error(n.message??"Folder picker is unavailable.")}e.s(["pickDirectoryFromDesktop",0,r])},25795,e=>{"use strict";let t=(0,e.i(77379).default)("RotateCcw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);e.s(["RotateCcw",0,t],25795)},36413,e=>{"use strict";var t=e.i(34416);let r=(0,t.createContext)(null);e.s(["DirtyFieldsProvider",0,function({children:e}){let[a,n]=(0,t.useState)(()=>new Map),[s,i]=(0,t.useState)(0),l=(0,t.useCallback)((e,t,r)=>{n(a=>{if(void 0!==r&&(t===r||Array.isArray(t)&&Array.isArray(r)&&t.length===r.length&&t.every((e,t)=>e===r[t]))){if(!a.has(e))return a;let t=new Map(a);return t.delete(e),t}let n=new Map(a);return n.set(e,t),n})},[]),o=(0,t.useCallback)(e=>{n(t=>{if(!t.has(e))return t;let r=new Map(t);return r.delete(e),r})},[]),c=(0,t.useCallback)(e=>{0!==e.length&&n(t=>{if(!e.some(e=>t.has(e)))return t;let r=new Map(t);for(let t of e)r.delete(t);return r})},[]),d=(0,t.useCallback)(()=>{n(new Map),i(e=>e+1)},[]),u=a.size>0,h=a.size,m=(0,t.useMemo)(()=>({dirtyFields:a,setDirty:l,clearDirty:o,clearDirtyKeys:c,discardAll:d,discardGeneration:s,isDirty:u,dirtyCount:h}),[a,l,o,c,d,s,u,h]);return(0,t.createElement)(r.Provider,{value:m},e)},"useDirtyFields",0,function(){let e=(0,t.useContext)(r);if(!e)throw Error("useDirtyFields must be used inside DirtyFieldsProvider");let{setDirty:a,dirtyFields:n}=e,s=(0,t.useCallback)(e=>async(t,r)=>{let n=e[t];a(t,r,n)},[a]),i=(0,t.useCallback)((e,t)=>n.has(e)?n.get(e):t,[n]);return{...e,deferSaveFor:s,dv:i}},"useDiscardGeneration",0,function(){let e=(0,t.useContext)(r);return e?.discardGeneration??0}])},28444,e=>{"use strict";e.s(["RESTART_REQUIRED_KEY_TUPLE",0,["apiPort","externalObsidianVaultName","externalObsidianVaultPath","externalObsidianWatch","primaryVaultPath","primaryVaultName","slackOwnerUserId","telegramOwnerChatId","discordOwnerUserId","whatsappEnabled","whatsappOwnerPhone","whatsappAuthDir","notionDatabaseIds","gmailPollIntervalSeconds","delegatedProbeIntervalMinutes","gitPollIntervalSeconds","githubPollIntervalSeconds","voiceTranscriptionEnabled","observationSummarizerEnabled","observationSummarizerConcurrency","observationSummarizerMaxCallsPerMinute","observationSummarizerQueueLimit","observationSummarizerTimeoutMs"]])},82239,e=>{"use strict";var t=e.i(54710),r=e.i(25795),a=e.i(10628);e.s(["RestartRequiredBadge",0,function(){return(0,t.jsxs)(a.Tooltip,{children:[(0,t.jsx)(a.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded-sm bg-amber-100 px-1 py-0.5 text-[10px] font-medium text-amber-700 dark:bg-amber-900/40 dark:text-amber-300",children:[(0,t.jsx)(r.RotateCcw,{className:"h-2.5 w-2.5"}),"restart"]})}),(0,t.jsx)(a.TooltipContent,{side:"top",className:"max-w-[220px] text-xs",children:"Changing this value requires a daemon restart to take effect."})]})}])},49681,e=>{"use strict";var t=e.i(54710),r=e.i(7771),a=e.i(95486),n=e.i(8011),s=e.i(10628),i=e.i(81471);e.s(["DocsHelpInline",0,function({docId:e,anchor:l=null,label:o,className:c}){let d=(0,a.useQueryClient)(),u=o??"Help";return(0,t.jsx)(s.TooltipProvider,{delayDuration:300,children:(0,t.jsxs)(s.Tooltip,{children:[(0,t.jsx)(s.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",onClick:t=>{t.preventDefault(),t.stopPropagation(),(0,n.openDocsHelpSlideover)(d,{docId:e,anchor:l,autoFocusComposer:!1})},className:(0,i.cn)("inline-flex h-5 w-5 items-center justify-center rounded-full text-muted-foreground/70 transition hover:bg-accent hover:text-foreground",c),"aria-label":`Open help — ${u}`,"data-testid":"docs-help-inline",children:(0,t.jsx)(r.HelpCircle,{className:"h-3.5 w-3.5","aria-hidden":"true"})})}),(0,t.jsx)(s.TooltipContent,{side:"top",children:(0,t.jsx)("span",{children:u})})]})})}])},88,e=>{"use strict";var t=e.i(54710),r=e.i(34416),a=e.i(99758),n=e.i(55575),s=e.i(21682),i=e.i(60168),l=e.i(25795),o=e.i(90925),c=e.i(36451);e.i(18446);var d=e.i(28444),u=e.i(48467),h=e.i(20014),m=e.i(74490),p=e.i(8652),x=e.i(82239),f=e.i(49681),g=e.i(66127),b=e.i(36413);let v=new Set(d.RESTART_REQUIRED_KEY_TUPLE);function y(e){return null===e?"":String(e)}e.s(["ConfigSection",0,function({title:e,children:r,helpDocId:a,helpAnchor:n}){return(0,t.jsxs)(m.Card,{children:[(0,t.jsx)(m.CardHeader,{children:(0,t.jsxs)(m.CardTitle,{className:"flex items-center gap-1.5",children:[(0,t.jsx)("span",{children:e}),a&&(0,t.jsx)(f.DocsHelpInline,{docId:a,anchor:n??null,label:e})]})}),(0,t.jsx)("div",{className:"space-y-0.5 [&>p]:max-w-prose",children:r})]})},"EditableArrayField",0,function({label:e,values:a,configKey:s,variant:l="gray",placeholder:o="Add item...",directoryPicker:d,modified:m,onSave:f}){let b=v.has(s),[y,w]=(0,r.useState)(""),[j,k]=(0,r.useState)(!1),[C,N]=(0,r.useState)(null),S=async()=>{let e=y.trim();if(!(!e||a.includes(e))){k(!0),N(null);try{await f(s,[...a,e]),w("")}catch{}finally{k(!1)}}},E=async e=>{k(!0);try{await f(s,a.filter(t=>t!==e))}finally{k(!1)}},A=async()=>{if(d){k(!0),N(null);try{let e=await (0,g.pickDirectoryFromDesktop)({title:d.title,defaultPath:y.trim()||d.defaultPath});if(!e)return;if(a.includes(e)){w(e),N("That directory is already in the list.");return}await f(s,[...a,e]),w("")}catch(e){N(e instanceof Error?e.message:"Folder picker is unavailable.")}finally{k(!1)}}};return(0,t.jsxs)("div",{className:`py-2${m?" border-l-2 border-blue-500 pl-2 -ml-1 rounded":""}`,"data-config-key":s,children:[(0,t.jsxs)("p",{className:"text-sm text-muted-foreground mb-2 inline-flex items-center gap-1.5",children:[e,b&&(0,t.jsx)(x.RestartRequiredBadge,{}),m&&(0,t.jsx)("span",{className:"text-[10px] font-medium text-blue-600 dark:text-blue-400",children:"modified"})]}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-1.5 mb-2",children:[a.map(e=>(0,t.jsxs)(u.Badge,{variant:l,className:"gap-1 pr-1",children:[e,(0,t.jsx)("button",{onClick:()=>E(e),disabled:j,className:"ml-0.5 rounded-sm hover:bg-black/10 dark:hover:bg-white/10 p-0.5 transition-colors",children:(0,t.jsx)(c.X,{className:"h-3 w-3"})})]},e)),0===a.length&&(0,t.jsx)("span",{className:"text-xs text-muted-foreground italic",children:"No items"})]}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(p.Input,{value:y,onChange:e=>w(e.target.value),onKeyDown:e=>{"Enter"===e.key&&S()},placeholder:o,className:"max-w-[320px]",disabled:j}),d&&(0,t.jsxs)(h.Button,{size:"sm",variant:"outline",onClick:A,disabled:j,children:[(0,t.jsx)(n.FolderOpen,{className:"h-3.5 w-3.5 mr-1"}),d.buttonLabel??"Choose"]}),(0,t.jsxs)(h.Button,{size:"sm",variant:"outline",onClick:S,disabled:!y.trim()||j,children:[(0,t.jsx)(i.Plus,{className:"h-3.5 w-3.5 mr-1"}),"Add"]})]}),C&&(0,t.jsx)("p",{className:"mt-1 text-xs text-destructive",children:C})]})},"EditableBooleanField",0,function({label:e,value:a,configKey:n,description:s,modified:i,defaultValue:o,onSave:c}){let[d,u]=(0,r.useState)(!1),m=v.has(n),p=void 0!==o&&a===o,f=async()=>{u(!0);try{await c(n,!a)}finally{u(!1)}},g=async()=>{if(void 0!==o){u(!0);try{await c(n,o)}finally{u(!1)}}};return(0,t.jsx)("div",{className:`py-1.5 group${i?" border-l-2 border-blue-500 pl-2 -ml-1 rounded":""}`,"data-config-key":n,children:(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("p",{className:"text-sm text-muted-foreground inline-flex items-center gap-1.5",children:[e,m&&(0,t.jsx)(x.RestartRequiredBadge,{}),i&&(0,t.jsx)("span",{className:"text-[10px] font-medium text-blue-600 dark:text-blue-400",children:"modified"}),void 0!==o&&!p&&!i&&(0,t.jsxs)("button",{type:"button",onClick:g,className:"text-[10px] text-muted-foreground hover:text-foreground transition-colors inline-flex items-center gap-0.5 opacity-0 group-hover:opacity-100",children:[(0,t.jsx)(l.RotateCcw,{className:"h-2.5 w-2.5"}),"reset"]})]}),s&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:s})]}),(0,t.jsx)(h.Button,{variant:a?"default":"outline",size:"sm",onClick:f,disabled:d,children:a?"Enabled":"Disabled"})]})})},"EditableField",0,function({label:e,value:n,configKey:i,type:d="text",suffix:u,description:m,min:f,max:g,nullable:w=!1,emptyLabel:j="Not set",modified:k,defaultValue:C,onSave:N}){let S=v.has(i),[E,A]=(0,r.useState)(!1),[R,I]=(0,r.useState)(y(n)),[T,D]=(0,r.useState)(!1),[P,M]=(0,r.useState)(null),L=(0,r.useRef)(null),F=(0,b.useDiscardGeneration)(),O=(0,r.useRef)(F);(0,r.useEffect)(()=>{F!==O.current&&(O.current=F,A(!1),M(null))},[F]),(0,r.useEffect)(()=>{E&&L.current?.focus()},[E]),(0,r.useEffect)(()=>{E||I(y(n))},[n,E]);let _=void 0!==C&&n===C,B=async e=>{if(e.stopPropagation(),void 0!==C){D(!0);try{await N(i,C)}finally{D(!1)}}},q=async e=>{e.stopPropagation(),D(!0);try{await N(i,null)}finally{D(!1)}},z=async()=>{let e=R.trim(),t=w&&""===e?null:"number"===d?Number(R):R;if(t===n)return void A(!1);if(null!==t&&"number"===d&&(void 0!==f||void 0!==g)&&(void 0!==f&&t<f||void 0!==g&&t>g))return void M(`Must be ${f??""}–${g??""}`);M(null),D(!0);try{await N(i,t),A(!1)}catch{}finally{D(!1)}};return E?(0,t.jsxs)("div",{className:"py-1.5","data-config-key":i,children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)("span",{className:"text-sm text-muted-foreground shrink-0 min-w-[140px] inline-flex items-center gap-1.5",children:[e,S&&(0,t.jsx)(x.RestartRequiredBadge,{})]}),(0,t.jsx)(p.Input,{ref:L,type:d,value:R,onChange:e=>{I(e.target.value),M(null)},onKeyDown:e=>{"Enter"===e.key&&z(),"Escape"===e.key&&(I(y(n)),A(!1))},className:"max-w-[240px]",disabled:T,min:f,max:g}),u&&(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:u}),(0,t.jsx)(h.Button,{size:"sm",variant:"ghost",onClick:z,disabled:T,className:"h-7 w-7 p-0",children:(0,t.jsx)(a.Check,{className:"h-3.5 w-3.5"})}),(0,t.jsx)(h.Button,{size:"sm",variant:"ghost",onClick:()=>{I(y(n)),M(null),A(!1)},className:"h-7 w-7 p-0",children:(0,t.jsx)(c.X,{className:"h-3.5 w-3.5"})})]}),P&&(0,t.jsx)("p",{className:"text-xs text-destructive mt-1 ml-[148px]",children:P}),m&&!P&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground mt-1 ml-[148px]",children:m})]}):(0,t.jsxs)("div",{className:`py-1.5 group cursor-pointer rounded px-1 -mx-1 hover:bg-muted/50 transition-colors${k?" border-l-2 border-blue-500 pl-2":""}`,"data-config-key":i,onClick:()=>A(!0),children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("span",{className:"text-sm text-muted-foreground inline-flex items-center gap-1.5",children:[e,S&&(0,t.jsx)(x.RestartRequiredBadge,{})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[k&&(0,t.jsx)("span",{className:"text-[10px] font-medium text-blue-600 dark:text-blue-400",children:"modified"}),void 0!==C&&!_&&!k&&(0,t.jsxs)("button",{type:"button",onClick:B,className:"text-[10px] text-muted-foreground hover:text-foreground transition-colors inline-flex items-center gap-0.5 opacity-0 group-hover:opacity-100",children:[(0,t.jsx)(l.RotateCcw,{className:"h-2.5 w-2.5"}),"reset"]}),w&&null!==n&&!k&&(0,t.jsxs)("button",{type:"button",onClick:q,title:`Clear — sets ${e} to ${j}`,className:"text-[10px] text-muted-foreground hover:text-destructive transition-colors inline-flex items-center gap-0.5 opacity-0 group-hover:opacity-100",children:[(0,t.jsx)(o.Trash2,{className:"h-2.5 w-2.5"}),"clear"]}),(0,t.jsx)("span",{className:"text-sm font-medium text-foreground",children:null===n?j:"$"===u?`$${n}`:u?`${n} ${u}`:String(n)}),(0,t.jsx)(s.Pencil,{className:"h-3 w-3 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity"})]})]}),m&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:m})]})}])},76610,e=>{"use strict";let t=(0,e.i(77379).default)("KeyRound",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);e.s(["KeyRound",0,t],76610)},89883,e=>{"use strict";let t=(0,e.i(77379).default)("Mail",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}]]);e.s(["Mail",0,t],89883)},73550,e=>{"use strict";let t=(0,e.i(77379).default)("Hash",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]]);e.s(["Hash",0,t],73550)},78927,e=>{"use strict";let t=(0,e.i(77379).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"}]]);e.s(["Upload",0,t],78927)},88175,e=>{"use strict";let t=(0,e.i(77379).default)("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);e.s(["Download",0,t],88175)},20870,e=>{"use strict";var t=e.i(54710),r=e.i(48467),a=e.i(74490),n=e.i(81471);let s={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"}};e.s(["ConnectionCard",0,function({name:e,icon:i,status:l,error:o,metadata:c,children:d,className:u}){let h=s[l];return(0,t.jsxs)(a.Card,{tone:"connected"===l?"success":"error"===l?"error":"default",className:(0,n.cn)("relative",u),children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-muted-foreground",children:i}),(0,t.jsx)("h3",{className:"text-sm font-medium text-foreground",children:e})]}),(0,t.jsx)(r.Badge,{variant:h.variant,children:h.label})]}),o&&"connecting"!==l&&(0,t.jsx)("p",{className:"mb-2 text-xs text-red-600 dark:text-red-400",children:o}),c&&c.length>0&&(0,t.jsx)("div",{className:"mb-3 space-y-0.5",children:c.map(e=>(0,t.jsxs)("div",{className:"flex items-center justify-between text-xs",children:[(0,t.jsx)("span",{className:"text-muted-foreground",children:e.label}),(0,t.jsx)("span",{className:"text-foreground",children:e.value})]},e.label))}),d]})},"deriveConfiguredStatus",0,function(e){return e?"configured":"needs-setup"},"deriveIntegrationStatus",0,function(e){return e&&e.configured?e.error?"error":e.connected?"connected":"configured":"needs-setup"},"deriveMessagingStatus",0,function(e){return e&&"not_configured"!==e.runtimeState?"connecting"===e.runtimeState?"connecting":"error"===e.runtimeState?"error":"ok"===e.runtimeState?"connected":"configured":"needs-setup"},"messagingMetadata",0,function(e){if(e)return[{label:"Owner configured",value:e.ownerConfigured?"yes":"no"},{label:"Owner channel known",value:e.ownerChannelKnown?"yes":"no"},{label:"Reminder eligible",value:e.notificationEligible?"yes":"no"},{label:"Last inbound",value:e.lastInboundAt??"—"}]}])},67490,e=>{"use strict";var t=e.i(14260),r=e.i(57415),a=e.i(95486),n=e.i(65268);e.s(["useIntegrationProbeLive",0,function(){let e=(0,a.useQueryClient)();return(0,r.useMutation)({mutationFn:e=>{let{key:t}=e,r={};return"liveProbe"in e?(r.liveProbe=!0,e.backend&&(r.backend=e.backend)):(r.backend=e.backend,r.tools=e.tools),n.api.post(`/integrations/${t}/probe`,r)},onSuccess:(t,r)=>{e.invalidateQueries({queryKey:["integration-probe",r.key]}),e.invalidateQueries({queryKey:["health"]})}})},"useIntegrations",0,function(){return(0,t.useQuery)({queryKey:["integrations"],queryFn:()=>n.api.get("/integrations"),staleTime:3e4})},"useNativeUnboundActions",0,function(e={}){let r=e.sinceHours??168;return(0,t.useQuery)({queryKey:["agent-actions","native_unbound",r],queryFn:async()=>{let e=new URLSearchParams({since:new Date(Date.now()-60*r*6e4).toISOString(),limit:"50"});e.append("kind","integration.native_unbound");let t=await n.api.get(`/agent/actions?${e.toString()}`),a=[];for(let e of t.actions)if(e.detail)try{let t=JSON.parse(e.detail);if("string"!=typeof t.key)continue;a.push({id:e.id,key:t.key,priorNativeBackend:t.priorNativeBackend??null,newMainBackend:t.newMainBackend??null,priorDeniedTools:t.priorDeniedTools??[],startedAt:e.startedAt})}catch{continue}return a},staleTime:6e4})},"usePatchIntegration",0,function(){let e=(0,a.useQueryClient)();return(0,r.useMutation)({mutationFn:({key:e,body:t})=>n.api.patch(`/integrations/${e}`,t),onSuccess:()=>{e.invalidateQueries({queryKey:["integrations"]}),e.invalidateQueries({queryKey:["health"]})}})},"useProxyModels",0,function(e){return(0,t.useQuery)({queryKey:["proxy-models",e??null],queryFn:()=>n.api.get(`/integrations/proxy-models/${e}`),enabled:null!=e,staleTime:6e4})},"useRecentProxyCalls",0,function(e,r={}){let{limit:a,enabled:s=!0}=r;return(0,t.useQuery)({queryKey:["recent-proxy-calls",e,a??null],queryFn:()=>{let t=void 0!==a?`?limit=${a}`:"";return n.api.get(`/integrations/${e}/recent-proxy-calls${t}`)},enabled:s&&null!==e,staleTime:1e4})}])},59134,e=>{"use strict";let t=(0,e.i(77379).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"}]]);e.s(["RefreshCw",0,t],59134)},70986,e=>{"use strict";var t=e.i(34416),r=e.i(91967),a=e.i(9413),n=e.i(36567),s=e.i(18731),i=e.i(22353),l=e.i(85565),o=e.i(90816),c=e.i(11207),d=e.i(54710),u="Collapsible",[h,m]=(0,a.createContextScope)(u),[p,x]=h(u),f=t.forwardRef((e,r)=>{let{__scopeCollapsible:a,open:s,defaultOpen:i,disabled:o,onOpenChange:h,...m}=e,[x,f]=(0,n.useControllableState)({prop:s,defaultProp:i??!1,onChange:h,caller:u});return(0,d.jsx)(p,{scope:a,disabled:o,contentId:(0,c.useId)(),open:x,onOpenToggle:t.useCallback(()=>f(e=>!e),[f]),children:(0,d.jsx)(l.Primitive.div,{"data-state":j(x),"data-disabled":o?"":void 0,...m,ref:r})})});f.displayName=u;var g="CollapsibleTrigger",b=t.forwardRef((e,t)=>{let{__scopeCollapsible:a,...n}=e,s=x(g,a);return(0,d.jsx)(l.Primitive.button,{type:"button","aria-controls":s.contentId,"aria-expanded":s.open||!1,"data-state":j(s.open),"data-disabled":s.disabled?"":void 0,disabled:s.disabled,...n,ref:t,onClick:(0,r.composeEventHandlers)(e.onClick,s.onOpenToggle)})});b.displayName=g;var v="CollapsibleContent",y=t.forwardRef((e,t)=>{let{forceMount:r,...a}=e,n=x(v,e.__scopeCollapsible);return(0,d.jsx)(o.Presence,{present:r||n.open,children:({present:e})=>(0,d.jsx)(w,{...a,ref:t,present:e})})});y.displayName=v;var w=t.forwardRef((e,r)=>{let{__scopeCollapsible:a,present:n,children:o,...c}=e,u=x(v,a),[h,m]=t.useState(n),p=t.useRef(null),f=(0,i.useComposedRefs)(r,p),g=t.useRef(0),b=g.current,y=t.useRef(0),w=y.current,k=u.open||h,C=t.useRef(k),N=t.useRef(void 0);return t.useEffect(()=>{let e=requestAnimationFrame(()=>C.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,s.useLayoutEffect)(()=>{let e=p.current;if(e){N.current=N.current||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration="0s",e.style.animationName="none";let t=e.getBoundingClientRect();g.current=t.height,y.current=t.width,C.current||(e.style.transitionDuration=N.current.transitionDuration,e.style.animationName=N.current.animationName),m(n)}},[u.open,n]),(0,d.jsx)(l.Primitive.div,{"data-state":j(u.open),"data-disabled":u.disabled?"":void 0,id:u.contentId,hidden:!k,...c,ref:f,style:{"--radix-collapsible-content-height":b?`${b}px`:void 0,"--radix-collapsible-content-width":w?`${w}px`:void 0,...e.style},children:k&&o})});function j(e){return e?"open":"closed"}e.s(["Collapsible",0,f,"CollapsibleContent",0,y,"CollapsibleTrigger",0,b],70986)},76176,e=>{"use strict";e.i(18446);var t=e.i(38082);let r={claude:"Claude Code",codex:"OpenAI Codex",gemini:"Gemini CLI",opencode:"OpenCode"},a=new Set(["opencode"]);function n(e){return a.has(e)}let s={gemini:{badgeLabel:"Vendor deprecation",shortSuffix:" (deprecated)",reason:"Google announced Gemini CLI will stop serving free, Pro, and Ultra requests on 2026-06-18 in favor of Antigravity CLI. Standard / Enterprise licenses keep access. Avoid binding new processes to Gemini if you rely on consumer-tier auth."}},i={claude:"Claude",codex:"Codex",gemini:"Gemini",opencode:"OpenCode"},l={claude:["#7C2D12","#B54B2D","#E15B40","#F97316","#FDBA74"],codex:["#86198F","#A21CAF","#D946EF","#E879F9","#F5D0FE"],gemini:["#1E3A8A","#1D4ED8","#1C69FF","#60A5FA","#93C5FD"],opencode:["#7C2D12","#C2410C","#FF7300","#F59E0B","#FCD34D"]},o=["#6b7280","#9ca3af","#4b5563","#374151"],c={claude:"orange",codex:"pink",gemini:"blue",opencode:"orange"},d={"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 u(e){let t;if(!e)return[];try{t=JSON.parse(e)}catch{return[]}if(!t||"object"!=typeof t)return[];let r=[];for(let[e,a]of Object.entries(t))a&&"object"==typeof a&&r.push({modelId:e,inputTokens:"number"==typeof a.inputTokens?a.inputTokens:0,outputTokens:"number"==typeof a.outputTokens?a.outputTokens:0,costUsd:"number"==typeof a.costUsd?a.costUsd:0});return r.sort((e,t)=>t.costUsd-e.costUsd)}function h(e){if(!e)return null;let t=e.toLowerCase();return/^[a-z0-9_.-]+\/[a-z0-9_.-]+/.test(t)?"opencode":t.includes("claude")||t.includes("sonnet")||t.includes("opus")||t.includes("haiku")?"claude":t.includes("gemini")?"gemini":t.includes("gpt")||t.includes("codex")||t.includes("o3")||t.includes("o4")?"codex":null}e.s(["BACKEND_BADGE_VARIANTS",0,c,"BACKEND_COLORS",0,{claude:"#E15B40",codex:"#D946EF",gemini:"#1C69FF",opencode:"#FF7300"},"BACKEND_LABELS",0,r,"BACKEND_PROVIDER_LABELS",0,{claude:"Claude (Anthropic)",codex:"ChatGPT (OpenAI)",gemini:"Gemini (Google)",opencode:"OpenCode (sst/opencode)"},"BACKEND_PROVIDER_SHORT",0,{claude:"Claude",codex:"ChatGPT",gemini:"Gemini",opencode:"OpenCode"},"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.",opencode:"Lets the agent call the configured OpenCode provider's web-search tool when the OpenCode runtime is enabled."},"CHART_CATEGORY_PALETTE",0,["#3b82f6","#10b981","#f59e0b","#8b5cf6","#ec4899","#14b8a6","#f97316","#6366f1","#ef4444","#22c55e"],"UI_PREVIEW_ONLY_BADGE_SUFFIX",0," (coming soon)","UI_PREVIEW_ONLY_REASON",0,"Coming soon — OpenCode is wired internally but not yet ready for selection in this release. The card stays visible so you can see what is on the roadmap.","assignModelColors",0,function(e){let t=new Map;for(let r of e){if(!r)continue;let e=h(r)??"other",a=t.get(e)??[];a.push(r),t.set(e,a)}let r={};for(let[e,a]of t){a.sort((e,t)=>e.localeCompare(t));let t="other"===e?o:l[e],n=a.length;a.forEach((e,a)=>{let s;s=n>=t.length?a%t.length:1===n?Math.floor(t.length/2):Math.floor((a+.5)*t.length/n),r[e]=t[s]})}return r},"detectBackendFromModel",0,h,"formatModelName",0,function(e){return e?e.replace(/^[a-z0-9_.-]+\//i,"").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(e){if(!e)return"unknown";if("opus"===e)return"Opus";if("sonnet"===e)return"Sonnet";let t=e.replace(/^[a-z0-9_.-]+\//i,""),r=t.replace(/-\d{8,}$/,"").replace(/^claude-/,"").replace(/(\d+)-(\d+)(?![-\d])/g,"$1.$2").replace(/-/g," ");return t.startsWith("gpt-")&&(r=`GPT-${r.replace(/^gpt\s*/i,"")}`),t.startsWith("gemini-")&&(r=r.replace(/^gemini\s*/i,"Gemini ")),r.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()},"getBackendDeprecation",0,function(e){return s[e]??null},"getBackendLabel",0,function(e){return r[e]},"getBackendShortLabel",0,function(e){return i[e]},"getProcessGroup",0,function(e){return e.startsWith("wiki.")?"Wiki":e.startsWith("message.")||e.startsWith("dashboard.")?"Conversation":e.startsWith("routine.")?"Routines":e.startsWith("git.")||e.startsWith("github.")?"Git & GitHub":e.startsWith("calendar.")||"gmail_classify"===e?"Integrations":"Tasks"},"getProcessLabel",0,function(e){return d[e]??e},"isBackendSelectionDisabled",0,function(e){return!(0,t.isRuntimeAvailableBackendId)(e)||n(e)},"isUiPreviewOnlyBackend",0,n,"modelBadgeVariant",0,function(e){if(!e)return"gray";let t=h(e);return t?c[t]:"gray"},"parseModelUsage",0,u,"pickDisplayModel",0,function(e,t){let r=u(t);return r.length>0&&r[0]?r[0].modelId:e??null}])},99758,e=>{"use strict";let t=(0,e.i(77379).default)("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);e.s(["Check",0,t],99758)},24756,e=>{"use strict";var t=e.i(14260),r=e.i(65268);e.s(["useBackends",0,function(e){return(0,t.useQuery)({queryKey:["backends"],queryFn:()=>r.api.get("/backends"),enabled:e?.enabled??!0,staleTime:6e4})}])},40974,e=>{"use strict";let t=(0,e.i(77379).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"}]]);e.s(["Lock",0,t],40974)},18518,e=>{"use strict";let t=(0,e.i(77379).default)("ClipboardCopy",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2",key:"4jdomd"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v4",key:"3hqy98"}],["path",{d:"M21 14H11",key:"1bme5i"}],["path",{d:"m15 10-4 4 4 4",key:"5dvupr"}]]);e.s(["ClipboardCopy",0,t],18518)},62452,64387,58692,e=>{"use strict";let t=(0,e.i(77379).default)("FolderSymlink",[["path",{d:"M2 9V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h7",key:"x1c07l"}],["path",{d:"m8 16 3-3-3-3",key:"rlqrt1"}]]);function r(e){return/^[A-Za-z]:[\\/]/.test(e)||/^\\\\/.test(e)||/^\/\/[^/]+\/[^/]+/.test(e)||e.includes("\\")}function a(e,t){let r=e.trim().replace(/[\\/]+$/g,"");return t&&(r=r.replace(/[\\/]+/g,"/").toLowerCase()),r}e.s(["FolderSymlink",0,t],62452),e.s(["hasPathTraversalSegment",0,function(e){return e.trim().split(/[\\/]+/).some(e=>".."===e)},"isClientAbsolutePath",0,function(e){let t=e.trim();return t.startsWith("/")||t.startsWith("~/")||t.startsWith("~\\")||/^[A-Za-z]:[\\/]/.test(t)||/^\\\\[^\\/]+[\\/][^\\/]+/.test(t)||/^\/\/[^/]+\/[^/]+/.test(t)},"isClientPathInsideOrEqual",0,function(e,t){if(0===e.trim().length||0===t.trim().length)return!1;let n=r(e)||r(t),s=a(e,n),i=a(t,n);return i===s||i.startsWith(`${s}/`)}],64387);var n=e.i(54710),s=e.i(81471);e.s(["CHARACTER_MAX_LENGTH",0,1e3,"CharacterEditor",0,function({value:e,onChange:t,disabled:r=!1,placeholder:a,rows:i=6}){let l=e.length,o=l>1e3,c=1e3===l;return(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsx)("textarea",{"data-testid":"character-editor-textarea",className:"w-full rounded border border-input bg-background p-3 text-sm font-mono resize-y focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",style:{minHeight:`${24*i}px`},value:e,onChange:e=>t(e.target.value),disabled:r,placeholder:a??"How should the agent talk to you? E.g. 'Speak casually. Tight bullets, no emoji. Use plain language for technical terms.'"}),(0,n.jsx)("div",{className:"flex justify-end",children:(0,n.jsxs)("span",{"data-testid":"character-editor-counter","aria-live":"polite",className:(0,s.cn)("text-xs tabular-nums",o?"font-semibold text-destructive":c?"text-amber-600":"text-muted-foreground"),children:[l,"/",1e3]})})]})},"isCharacterOverCap",0,function(e){return e.length>1e3}],58692)},85090,e=>{"use strict";var t=e.i(54710),r=e.i(34416),a=e.i(95486),n=e.i(88423),s=e.i(75187),i=e.i(13451),l=e.i(65268),o=e.i(20014),c=e.i(79634),d=e.i(70986),u=e.i(16047),h=e.i(78927),m=e.i(59546),p=e.i(52387),x=e.i(81471),f=e.i(88),g=e.i(20870);function b({label:e,accept:a,onUpload:n,configured:s}){let[i,l]=(0,r.useState)(!1),[d,u]=(0,r.useState)(null),p=(0,r.useRef)(null),x=(0,r.useCallback)(async e=>{l(!0),u(null);try{await n(e),u({type:"success",fileName:e.name})}catch(e){u({type:"error",message:e instanceof Error?e.message:"Upload failed"})}finally{l(!1)}},[n]);return(0,t.jsxs)("div",{className:"space-y-1.5",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("input",{ref:p,type:"file",accept:a,className:"hidden",onChange:e=>{let t=e.target.files?.[0];t&&x(t),e.target.value=""}}),(0,t.jsxs)(o.Button,{size:"sm",variant:s?"outline":"default",onClick:()=>p.current?.click(),disabled:i,className:"text-xs",children:[(0,t.jsx)(h.Upload,{className:"h-3.5 w-3.5 mr-1"}),i?"Uploading...":e]}),s&&(0,t.jsx)(m.CheckCircle2,{className:"h-4 w-4 text-emerald-500"})]}),d&&(0,t.jsx)(c.Alert,{variant:"success"===d.type?"success":"error",children:"success"===d.type?(0,t.jsxs)("span",{className:"block break-all",title:d.fileName,children:[function(e,t=36){if(e.length<=t)return e;let r=Math.floor((t-1)/2);return`${e.slice(0,t-1-r)}…${e.slice(-r)}`}(d.fileName)," uploaded"]}):(0,t.jsx)("span",{className:"block break-all",children:d.message})})]})}function v(){return(0,t.jsxs)("svg",{className:"h-4 w-4",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,t.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,t.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,t.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,t.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"})]})}e.s(["GoogleCard",0,function(){let{data:e}=(0,n.useConfig)(),{data:h}=(0,s.useHealth)(),{toast:y,saveField:w}=(0,i.useSaveConfig)(),j=(0,a.useQueryClient)(),k=h?.integrations?.google,[C,N]=(0,r.useState)(!1),[S,E]=(0,r.useState)(null),A=(0,r.useRef)(null),R=e?.googleCalendarCredentialsConfigured??!1,I=e?.googleCalendarTokenConfigured??!1,T=e?.googleCredentialType==="service_account",D=async e=>{await l.api.upload("/config/upload/google-credentials",e),j.invalidateQueries({queryKey:["config"]}),j.invalidateQueries({queryKey:["health"]})};(0,r.useEffect)(()=>()=>{A.current&&clearInterval(A.current)},[]),(0,r.useEffect)(()=>{let e=e=>{e.origin.startsWith("http://localhost")&&e.data?.type==="google-auth-success"&&(A.current&&(clearInterval(A.current),A.current=null),N(!1),j.invalidateQueries({queryKey:["config"]}),j.invalidateQueries({queryKey:["health"]}))};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)},[j]);let P=async()=>{N(!0),E(null);try{let e=await l.api.post("/config/google-auth/start"),t=window.open(e.authUrl,"google-auth","width=600,height=700");if(!t){E("Popup blocked. Allow popups for this site and try again."),N(!1);return}A.current=setInterval(()=>{t.closed&&(A.current&&(clearInterval(A.current),A.current=null),N(!1),j.invalidateQueries({queryKey:["config"]}),j.invalidateQueries({queryKey:["health"]}))},1e3)}catch(e){E(e instanceof Error?e.message:"Failed to start authorization"),N(!1)}};if(!e||!h)return null;let M=k?.services?.calendar,L=k?.services?.gmail,F=C?"connecting":(0,g.deriveIntegrationStatus)(k);return(0,t.jsxs)(g.ConnectionCard,{name:"Google",icon:(0,t.jsx)(v,{}),status:F,error:k?.error,children:[k?.configured&&(0,t.jsxs)("div",{className:"flex gap-4 mb-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-xs",children:[(0,t.jsx)("span",{className:(0,x.cn)("inline-block h-2 w-2 rounded-full",M?.connected?"bg-emerald-500":"bg-gray-300 dark:bg-gray-600")}),(0,t.jsx)("span",{className:"text-muted-foreground",children:"Calendar"}),(0,t.jsx)("span",{className:M?.connected?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground",children:M?.connected?"Active":"Inactive"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-xs",children:[(0,t.jsx)("span",{className:(0,x.cn)("inline-block h-2 w-2 rounded-full",L?.connected?"bg-emerald-500":"bg-gray-300 dark:bg-gray-600")}),(0,t.jsx)("span",{className:"text-muted-foreground",children:"Gmail"}),(0,t.jsx)("span",{className:L?.connected?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground",children:L?.connected?"Active":"Not yet implemented"})]})]}),(0,t.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"1. Upload credentials"}),(0,t.jsx)(b,{label:"Credentials JSON",accept:".json,application/json",onUpload:D,configured:R})]}),!T&&(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"2. Authorize"}),(0,t.jsxs)(o.Button,{size:"sm",variant:I?"outline":"default",onClick:P,disabled:!R||C,className:"text-xs",children:[(0,t.jsx)(p.ExternalLink,{className:"h-3.5 w-3.5 mr-1"}),C?"Waiting...":I?"Re-authorize":"Authorize with Google"]}),I&&(0,t.jsx)(m.CheckCircle2,{className:"inline-block ml-2 h-4 w-4 text-emerald-500"}),S&&(0,t.jsx)(c.Alert,{variant:"error",className:"mt-1",children:S}),!R&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground mt-1",children:"Upload credentials first"})]})]}),!k?.connected&&R&&(T||I)&&(0,t.jsxs)(c.Alert,{variant:"warning",className:"mt-3",children:[T?"Service account configured.":"Authorized."," Restart the daemon to connect."]}),(0,t.jsxs)(d.Collapsible,{children:[(0,t.jsxs)(d.CollapsibleTrigger,{className:"flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground mt-3",children:["Advanced setup notes ",(0,t.jsx)(u.ChevronDown,{className:"h-3 w-3"})]}),(0,t.jsx)(d.CollapsibleContent,{children:(0,t.jsxs)("div",{className:"mt-2 rounded bg-muted/50 p-2 space-y-1 text-xs",children:[(0,t.jsx)("p",{className:"font-medium text-muted-foreground",children:"Secrets are stored in the macOS Keychain."}),(0,t.jsx)("p",{className:"text-muted-foreground",children:"Use the upload button above for credentials JSON, then complete OAuth in the browser."}),(0,t.jsx)("p",{className:"text-muted-foreground mt-1",children:"Same credentials are used for Calendar and Gmail (scopes: calendar, gmail.modify, gmail.send)."}),(0,t.jsx)("p",{className:"text-muted-foreground",children:'Calendar ID defaults to "primary" and can be changed below.'})]})})]}),k?.configured&&(0,t.jsxs)("div",{className:"mt-3 pt-3 border-t border-border",children:[y&&(0,t.jsx)(c.Alert,{variant:y.type,className:"mb-2",children:y.message}),(0,t.jsx)(f.EditableField,{label:"Calendar ID",value:e.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:w})]})]})}])},89480,33586,e=>{"use strict";var t=e.i(54710),r=e.i(34416),a=e.i(40807),n=e.i(12878),s=e.i(81471),i=e.i(79634),l=e.i(29086),o=e.i(77379);let c=(0,o.default)("Paperclip",[["path",{d:"M13.234 20.252 21 12.3",key:"1cbrk9"}],["path",{d:"m16 6-8.414 8.586a2 2 0 0 0 0 2.828 2 2 0 0 0 2.828 0l8.414-8.586a4 4 0 0 0 0-5.656 4 4 0 0 0-5.656 0l-8.415 8.585a6 6 0 1 0 8.486 8.486",key:"1pkts6"}]]);e.s(["Paperclip",0,c],33586);let d=(0,o.default)("FileImage",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["circle",{cx:"10",cy:"12",r:"2",key:"737tya"}],["path",{d:"m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22",key:"wt3hpn"}]]),u=(0,o.default)("FileSpreadsheet",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M8 13h2",key:"yr2amv"}],["path",{d:"M14 13h2",key:"un5t4a"}],["path",{d:"M8 17h2",key:"2yhykz"}],["path",{d:"M14 17h2",key:"10kma7"}]]);var h=e.i(52387);function m({mimeType:e,className:r}){return e.startsWith("image/")?(0,t.jsx)(d,{className:r}):"application/pdf"===e?(0,t.jsx)(l.FileText,{className:r}):e.includes("spreadsheet")||"text/csv"===e||e.includes("excel")?(0,t.jsx)(u,{className:r}):(0,t.jsx)(c,{className:r})}function p({id:e,alt:a}){let[n,s]=(0,r.useState)(null),[i,l]=(0,r.useState)(!1);return((0,r.useEffect)(()=>{let t=!1,r=null;return(async()=>{try{let a=await fetch(`/api/chat/attachments/${e}`);if(!a.ok)throw Error(`status ${a.status}`);let n=await a.blob();if(t)return;r=URL.createObjectURL(n),s(r)}catch{t||l(!0)}})(),()=>{t=!0,r&&URL.revokeObjectURL(r)}},[e]),i)?null:n?(0,t.jsx)("img",{src:n,alt:a,className:"max-h-64 max-w-full rounded-md border border-border"}):(0,t.jsx)("div",{className:"flex h-32 w-full max-w-xs items-center justify-center rounded-md border border-border bg-muted/20 text-xs text-muted-foreground",children:"loading…"})}function x({attachment:e,isOwn:r}){var a;let n=`/api/chat/attachments/${e.id}`,i=e.mimeType.startsWith("image/")&&"image/svg+xml"!==e.mimeType&&e.sizeBytes<2097152;return(0,t.jsxs)("div",{className:"space-y-1",children:[i&&(0,t.jsx)(p,{id:e.id,alt:e.originalFilename}),(0,t.jsxs)("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:(0,s.cn)("inline-flex items-center gap-2 rounded-md border px-2 py-1 text-xs hover:bg-muted/40",r?"border-primary-foreground/30 bg-primary-foreground/10 text-primary-foreground":"border-border bg-muted/30 text-foreground"),title:e.caption??e.originalFilename,children:[(0,t.jsx)(m,{mimeType:e.mimeType,className:"h-3 w-3 flex-shrink-0"}),(0,t.jsx)("span",{className:"max-w-[160px] truncate",children:e.originalFilename}),(0,t.jsx)("span",{className:"text-muted-foreground",children:(a=e.sizeBytes)<1024?`${a} B`:a<1048576?`${(a/1024).toFixed(0)} KB`:`${(a/1024/1024).toFixed(1)} MB`}),(0,t.jsx)(h.ExternalLink,{className:"h-3 w-3 flex-shrink-0 opacity-60"})]}),e.caption&&(0,t.jsx)("p",{className:"px-1 text-[10px] text-muted-foreground italic",children:e.caption})]})}function f({attachments:e,isOwn:r}){return 0===e.length?null:(0,t.jsx)("div",{className:"flex flex-col gap-2",children:e.map(e=>(0,t.jsx)(x,{attachment:e,isOwn:r},e.id))})}let g=[n.default],b={a:({children:e,href:r,...a})=>(0,t.jsx)("a",{href:r,target:"_blank",rel:"noopener noreferrer",...a,children:e})},v=(0,r.memo)(function({message:e,assistantLabel:r="Assistant"}){if("error"===e.role)return(0,t.jsx)(i.Alert,{variant:"error",className:"mx-auto max-w-md rounded-lg px-4 py-2 text-sm",children:e.content});let n="user"===e.role;return(0,t.jsx)("div",{className:(0,s.cn)("flex",n?"justify-end":"justify-start"),children:(0,t.jsxs)("div",{className:"max-w-[80%] space-y-1",children:[!n&&(0,t.jsx)("p",{className:"px-1 text-[11px] font-medium text-muted-foreground",children:r}),e.content&&(0,t.jsx)("div",{className:(0,s.cn)("rounded-2xl px-4 py-2.5 text-sm",n?"whitespace-pre-wrap rounded-br-md bg-primary text-primary-foreground [overflow-wrap:anywhere]":"markdown-body markdown-bubble rounded-bl-md border border-border bg-card text-foreground"),children:n?e.content:(0,t.jsx)(a.default,{remarkPlugins:g,components:b,children:e.content})}),e.attachments&&e.attachments.length>0&&(0,t.jsx)("div",{className:"px-1",children:(0,t.jsx)(f,{attachments:e.attachments,isOwn:n})}),!n&&e.meta&&(0,t.jsx)("p",{className:"px-1 text-[10px] text-muted-foreground/60",children:[e.meta.backend&&e.meta.model?`${e.meta.backend} \xb7 ${e.meta.model}`:e.meta.backend||e.meta.model,null!=e.meta.durationMs?`${(e.meta.durationMs/1e3).toFixed(1)}s`:null,null!=e.meta.costUsd?`$${e.meta.costUsd.toFixed(4)}`:null].filter(Boolean).join(" · ")})]})})});e.s(["MessageBubble",0,v],89480)},76,27779,e=>{"use strict";var t=e.i(34416),r=e.i(95486);function a({fetchedMessageCount:e,currentRestoredCount:t,currentLiveCount:r}){return e>0||t+r===0}function n(e){return`${e.role}\u0000${e.content}`}function s(e,t,r){let a=e.slice(-Math.max(t.length+4,4)),s=new Map;for(let e of a){let t=n(e);s.set(t,(s.get(t)??0)+1)}return t.filter(e=>{if("error"===e.role)return!0;if(e.id.startsWith("stream-")||e.timestamp.getTime()<=r)return!1;let t=n(e),a=s.get(t)??0;return!(a>0)||(s.set(t,a-1),!1)})}async function i(e,t){let r,a=t?.fetchImpl??fetch,n=[];for(;;){let s=await a(function(e,t){let r=new URLSearchParams({limit:String(200)});return void 0!==t&&r.set("before",String(t)),`/api/conversations/${e}/messages?${r.toString()}`}(e,r),{signal:t?.signal});if(!s.ok)throw Error(`Failed to load conversation ${e} history`);let i=await s.json();if(0===i.messages.length||(n.push(i.messages),!i.hasMore))break;let l=i.messages[0]?.id;if(!l||l===r)break;r=l}return n.reverse().flat()}e.s(["fetchConversationHistory",0,i],27779);var l=e.i(81471);let o="pa-chat-sessionId";function c(e){try{localStorage.setItem(o,String(e))}catch{}}function d(){try{localStorage.removeItem(o)}catch{}}async function u(e,t){return(await i(e,{signal:t})).filter(e=>"user"===e.role||"assistant"===e.role).map(e=>({id:`restored-${e.id}`,role:e.role,content:e.content,timestamp:(0,l.parseUtcDate)(e.timestamp),...e.attachments&&e.attachments.length>0?{attachments:e.attachments.map(e=>({id:e.id,originalFilename:e.originalFilename,mimeType:e.mimeType,sizeBytes:e.sizeBytes,direction:e.direction,...e.caption?{caption:e.caption}:{}}))}:{}}))}async function h(e){let t=new URLSearchParams({scope:"dashboard_chat",status:"active",limit:"1"}),r=await fetch(`/api/conversations?${t.toString()}`,{signal:e});if(!r.ok)throw Error("Failed to load active dashboard session");let a=await r.json(),n=a.conversations[0]?.id;return"number"==typeof n&&n>0?n:null}e.s(["fetchSessionMessages",0,u,"useChat",0,function({disableHistory:e=!1}={}){let n=(0,r.useQueryClient)(),[i,l]=(0,t.useState)([]),[m,p]=(0,t.useState)(!1),[x,f]=(0,t.useState)(!1),[g,b]=(0,t.useState)([]),[v,y]=(0,t.useState)(null),[w,j]=(0,t.useState)(!1),[k,C]=(0,t.useState)(0),[N,S]=(0,t.useState)([]),E=(0,t.useRef)(""),A=(0,t.useRef)(0),R=(0,t.useRef)(null),I=(0,t.useRef)(null),T=(0,t.useRef)([]),D=(0,t.useRef)([]),P=(0,t.useRef)(null),M=()=>`msg-${++A.current}`,L=(0,t.useCallback)((e,t)=>"string"==typeof e?.message?e.message:"string"==typeof e?.error?e.error:t,[]),F=(0,t.useCallback)(()=>{I.current&&(clearTimeout(I.current),I.current=null)},[]),O=(0,t.useCallback)(()=>{f(!0),F(),I.current=setTimeout(()=>{f(!1)},12e4)},[F]),_=(0,t.useCallback)(()=>{f(!1),F()},[F]),B=(0,t.useCallback)(e=>{"number"==typeof e?.resumeSessionId&&e.resumeSessionId>0?c(e.resumeSessionId):d(),E.current="",T.current=[],D.current=[],P.current=e?.resumeSessionId??null,_(),l([]),S([]),b([]),y(null),p(!1),j(!1),R.current&&(R.current.close(),R.current=null),C(e=>e+1)},[_]);(0,t.useEffect)(()=>{P.current=v?.sessionId??null},[v]),(0,t.useEffect)(()=>{T.current=i},[i]),(0,t.useEffect)(()=>{D.current=N},[N]),(0,t.useEffect)(()=>{let t=e?null:function(){try{let e=localStorage.getItem(o);if(!e)return null;let t=Number(e);return Number.isFinite(t)&&t>0?t:null}catch{return null}}(),r=new AbortController,n=new EventSource(t?`/api/chat/stream?sessionId=${t}`:"/api/chat/stream");R.current=n;let i=0;return e||h(r.signal).then(e=>{if(!e)return void d();c(e);let t=Date.now();return u(e,r.signal).then(e=>{a({fetchedMessageCount:e.length,currentRestoredCount:D.current.length,currentLiveCount:T.current.length})&&(S(e),l(r=>s(e,r,t)))})}).catch(()=>{}),n.onopen=()=>{i++,j(!0),i>1?console.debug("[chat] SSE reconnected"):console.debug("[chat] SSE connected")},n.onerror=()=>{j(!1),p(!1),_(),E.current="",console.warn("[chat] SSE connection lost — will auto-reconnect")},n.addEventListener("session_info",r=>{try{let n=JSON.parse(r.data),o="channelId"in n;y(e=>o?{...n}:{...e,...n}),!e&&("number"==typeof n.sessionId&&n.sessionId>0&&c(n.sessionId),t&&"channelId"in n&&!("sessionId"in n)&&d());let h=i>1,m="number"==typeof n.sessionId?n.sessionId:null;if(!e&&function({isInitialBinding:e,isReconnect:t,confirmedSessionId:r}){return null!==r&&(e||t)}({isInitialBinding:o,isReconnect:h,confirmedSessionId:m})&&null!==m){let e=Date.now();u(m).then(t=>{a({fetchedMessageCount:t.length,currentRestoredCount:D.current.length,currentLiveCount:T.current.length})&&(S(t),l(r=>s(t,r,e)))}).catch(()=>{})}}catch{}}),n.addEventListener("chat",e=>{try{let t=JSON.parse(e.data);l(e=>[...e,{id:M(),role:t.role,content:t.content,timestamp:new Date,...t.attachments&&t.attachments.length>0?{attachments:t.attachments.map(e=>({...e,direction:"outbound"}))}:{}}]),b([]),_()}catch{}}),n.addEventListener("chat_attachments",e=>{try{let{attachments:t}=JSON.parse(e.data);if(!Array.isArray(t)||0===t.length)return;l(e=>{for(let r=e.length-1;r>=0;r--)if("assistant"===e[r].role){let a=[...e];return a[r]={...a[r],attachments:t.map(e=>({...e,direction:"outbound"}))},a}return e})}catch{}}),n.addEventListener("chat_stream",e=>{try{let{chunk:t}=JSON.parse(e.data);p(!0),_(),E.current+=t,l(e=>{let t=e[e.length-1];return t?.role==="assistant"&&t.id.startsWith("stream-")?[...e.slice(0,-1),{...t,content:E.current}]:[...e,{id:`stream-${A.current}`,role:"assistant",content:E.current,timestamp:new Date}]})}catch{}}),n.addEventListener("stream_end",()=>{p(!1),E.current=""}),n.addEventListener("tool_progress",e=>{try{let t=JSON.parse(e.data);b(e=>{let r=e.findIndex(e=>e.tool===t.tool);if(r>=0){let a=[...e];return a[r]=t,a}return[...e,t]})}catch{}}),n.addEventListener("chat_meta",e=>{try{let t=JSON.parse(e.data);l(e=>{for(let r=e.length-1;r>=0;r--)if("assistant"===e[r].role){let a=[...e];return a[r]={...a[r],meta:t},a}return e});let r=P.current;if(r){let e=Date.now();u(r).then(t=>{a({fetchedMessageCount:t.length,currentRestoredCount:D.current.length,currentLiveCount:T.current.length})&&(S(t),l(r=>s(t,r,e)))}).catch(()=>{})}}catch{}}),n.addEventListener("chat_error",e=>{try{let{message:t}=JSON.parse(e.data);l(e=>[...e,{id:M(),role:"error",content:t,timestamp:new Date}]),p(!1),_()}catch{}}),n.addEventListener("ping",()=>{}),()=>{r.abort(),n.close(),R.current=null,j(!1),F()}},[_,F,k,e]);let q=(0,t.useCallback)(async(e,t)=>{if(v?.channelId){O(),l(r=>[...r,{id:M(),role:"user",content:e,timestamp:new Date,...t?.attachments&&t.attachments.length>0?{attachments:t.attachments.map(e=>({...e,direction:"inbound"}))}:{}}]);try{let r=await fetch("/api/chat/messages",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({channelId:v.channelId,content:e,...t?.requestedModel?{requestedModel:t.requestedModel}:{},...t?.requestedBackendId&&t?.requestedModelId?{requestedBackendId:t.requestedBackendId,requestedModelId:t.requestedModelId}:{},...t?.attachments&&t.attachments.length>0?{attachmentIds:t.attachments.map(e=>e.id)}:{}})});if(!r.ok){let e=await r.json().catch(()=>null);l(t=>[...t,{id:M(),role:"error",content:L(e,"send failed"),timestamp:new Date}]),_()}}catch(t){let e=t instanceof TypeError?t.message:String(t);console.error("[chat] POST /api/chat/messages failed:",e),l(t=>[...t,{id:M(),role:"error",content:`Failed to send message: ${e}`,timestamp:new Date}]),_()}}},[L,v,O,_]),z=(0,t.useCallback)(async()=>{if(v?.channelId)try{let e=await fetch("/api/chat/end-session",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({channelId:v.channelId})});if(!e.ok){let t=await e.json().catch(()=>null);l(e=>[...e,{id:M(),role:"error",content:L(t,"failed to end session"),timestamp:new Date}]);return}n.invalidateQueries({queryKey:["conversations"]}).catch(()=>{}),n.invalidateQueries({queryKey:["chat-current-binding"]}).catch(()=>{}),B()}catch(t){let e=t instanceof TypeError?t.message:String(t);console.error("[chat] POST /api/chat/end-session failed:",e),l(t=>[...t,{id:M(),role:"error",content:`Failed to end session: ${e}`,timestamp:new Date}])}},[L,n,B,v]),$=(0,t.useCallback)(async e=>{console.debug("[chat] continueSession()",{sessionId:e});try{let t=await fetch("/api/chat/continue-session",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:e})});if(!t.ok){let e=await t.json().catch(()=>null);return l(t=>[...t,{id:M(),role:"error",content:L(e,"failed to continue session"),timestamp:new Date}]),!1}let r=await t.json().catch(()=>null),a="number"==typeof r?.sessionId&&r.sessionId>0?r.sessionId:e;return n.invalidateQueries({queryKey:["conversations"]}).catch(()=>{}),n.invalidateQueries({queryKey:["chat-current-binding"]}).catch(()=>{}),B({resumeSessionId:a}),!0}catch(t){let e=t instanceof TypeError?t.message:String(t);return console.error("[chat] POST /api/chat/continue-session failed:",e),l(t=>[...t,{id:M(),role:"error",content:`Failed to continue session: ${e}`,timestamp:new Date}]),!1}},[L,n,B]),H=w&&!!v?.channelId;return{messages:i,setMessages:l,restoredMessages:N,setRestoredMessages:S,streaming:m,waiting:x,busy:x||m,toolProgress:g,sessionInfo:v,sendMessage:q,endSession:z,continueSession:$,connected:w,ready:H}}],76)},34098,e=>{"use strict";var t=e.i(54710),r=e.i(99758),a=e.i(72740);e.s(["ToolProgress",0,function({items:e}){return 0===e.length?null:(0,t.jsx)("div",{className:"flex flex-wrap gap-2 px-2",children:e.map(e=>{let n="done"===e.status||"completed"===e.status;return(0,t.jsxs)("div",{className:"flex items-center gap-1.5 rounded-md bg-muted px-2.5 py-1 text-xs text-muted-foreground",children:[n?(0,t.jsx)(r.Check,{className:"h-3 w-3 text-emerald-500"}):(0,t.jsx)(a.Loader2,{className:"h-3 w-3 animate-spin"}),(0,t.jsx)("span",{children:e.tool})]},e.tool)})})}])},53756,e=>{"use strict";var t=e.i(54710),r=e.i(34416);let a=(0,e.i(77379).default)("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);var n=e.i(72740),s=e.i(33586),i=e.i(36451),l=e.i(20014),o=e.i(81471);e.s(["ChatInput",0,function({onSend:e,disabled:c,disabledMessage:d,placeholder:u,className:h}){let[m,p]=(0,r.useState)(""),x=(0,r.useRef)(null),f=(0,r.useRef)(null),[g,b]=(0,r.useState)(!1),{pending:v,ready:y,uploading:w,addFiles:j,remove:k,clear:C,error:N}=function(){let[e,t]=(0,r.useState)([]),[a,n]=(0,r.useState)(null),s=(0,r.useRef)(new Map),i=(0,r.useCallback)((e,r)=>{t(t=>t.map(t=>t.clientId===e?{...t,...r}:t))},[]),l=(0,r.useCallback)((e,t=0)=>e.reduce((e,t)=>e+t.sizeBytes,0)+t,[]),o=(0,r.useCallback)(e=>{let r=s.current.get(e);r&&(r.abort(),s.current.delete(e)),t(t=>t.filter(t=>t.clientId!==e)),t(t=>{let r=t.find(t=>t.clientId===e);return r?.serverId&&fetch(`/api/chat/attachments/${r.serverId}`,{method:"DELETE"}).catch(()=>{}),t})},[]),c=(0,r.useCallback)(()=>{for(let e of s.current.values())e.abort();s.current.clear(),t([]),n(null)},[]),d=(0,r.useCallback)(e=>{let t=new XMLHttpRequest;s.current.set(e.clientId,t),t.open("POST","/api/chat/attachments"),t.upload.onprogress=t=>{t.lengthComputable&&i(e.clientId,{progress:Math.round(t.loaded/t.total*100)})},t.onload=()=>{if(s.current.delete(e.clientId),t.status>=200&&t.status<300)try{let r=JSON.parse(t.responseText);i(e.clientId,{serverId:r.id,mimeType:r.mimeType,progress:100,status:"uploaded"})}catch{i(e.clientId,{status:"error",error:"Malformed response from server"})}else{let r=`Upload failed (${t.status})`;try{let e=JSON.parse(t.responseText);e.message&&(r=e.message)}catch{}i(e.clientId,{status:"error",error:r})}},t.onerror=()=>{s.current.delete(e.clientId),i(e.clientId,{status:"error",error:"Network error during upload"})};let r=new FormData;r.append("file",e.file,e.file.name),t.send(r)},[i]),u=(0,r.useCallback)(e=>{n(null);let r=Array.from(e);0!==r.length&&t(e=>{if(e.filter(e=>"uploading"===e.status).length+r.length>5)return n("At most 5 concurrent uploads"),e;let t=l(e),a=[];for(let e of r){let r=e.type.startsWith("image/")?5242880:0x1900000;if(e.size>r){n(`"${e.name}" is ${(e.size/1024/1024).toFixed(1)} MB — over the ${(r/1024/1024).toFixed(0)} MB limit`);continue}if(t+e.size>0x6400000){n("Per-turn cap is 100 MB — skipping the rest");break}t+=e.size;let s={clientId:`pending-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,serverId:null,file:e,progress:0,status:"uploading",sizeBytes:e.size};a.push(s)}for(let e of a)queueMicrotask(()=>d(e));return[...e,...a]})},[l,d]),h=e.some(e=>"uploading"===e.status),m=e.filter(e=>"uploaded"===e.status&&null!==e.serverId).map(e=>({id:e.serverId,originalFilename:e.file.name,mimeType:e.mimeType??(e.file.type||"application/octet-stream"),sizeBytes:e.sizeBytes}));return{pending:e,ready:m,uploading:h,addFiles:u,remove:o,clear:c,error:a}}(),S=!c&&!w&&(m.trim().length>0||y.length>0),E=(0,r.useCallback)(()=>{S&&(e(m.trim(),y),p(""),C(),x.current&&(x.current.style.height="auto"))},[S,C,e,y,m]);return(0,r.useEffect)(()=>{let e=x.current;if(!e)return;let t=e=>{if(c)return;let t=e.clipboardData?.items;if(!t)return;let r=[];for(let e of t)if("file"===e.kind){let t=e.getAsFile();t&&r.push(t)}r.length>0&&(e.preventDefault(),j(r))};return e.addEventListener("paste",t),()=>e.removeEventListener("paste",t)},[j,c]),(0,t.jsxs)("div",{className:(0,o.cn)("border-t border-border bg-background px-4 pt-3 pb-4",g&&"bg-primary/5",h),onDragOver:e=>{c||(e.preventDefault(),b(!0))},onDragLeave:()=>b(!1),onDrop:e=>{if(e.preventDefault(),b(!1),c)return;let t=e.dataTransfer.files;t.length>0&&j(t)},children:[c&&(0,t.jsxs)("div",{className:"mb-2 flex items-center gap-1.5 text-xs text-muted-foreground",children:[(0,t.jsx)(n.Loader2,{className:"h-3 w-3 animate-spin"}),(0,t.jsx)("span",{children:d??"Agent is generating a response — please wait"})]}),v.length>0&&(0,t.jsx)("div",{className:"mb-2 flex flex-wrap gap-2",children:v.map(e=>{var r;return(0,t.jsxs)("div",{className:(0,o.cn)("flex items-center gap-2 rounded-md border px-2 py-1 text-xs","error"===e.status?"border-destructive/40 bg-destructive/5 text-destructive":"border-border bg-muted/40"),children:[(0,t.jsx)(s.Paperclip,{className:"h-3 w-3 flex-shrink-0"}),(0,t.jsx)("span",{className:"max-w-[160px] truncate",title:e.file.name,children:e.file.name}),(0,t.jsx)("span",{className:"text-muted-foreground",children:(r=e.sizeBytes)<1024?`${r} B`:r<1048576?`${(r/1024).toFixed(0)} KB`:`${(r/1024/1024).toFixed(1)} MB`}),"uploading"===e.status&&(0,t.jsxs)("span",{className:"text-muted-foreground",children:[e.progress,"%"]}),"error"===e.status&&e.error&&(0,t.jsx)("span",{className:"text-muted-foreground/80",title:e.error,children:"failed"}),(0,t.jsx)("button",{type:"button",onClick:()=>k(e.clientId),className:"ml-1 text-muted-foreground hover:text-foreground","aria-label":`Remove ${e.file.name}`,children:(0,t.jsx)(i.X,{className:"h-3 w-3"})})]},e.clientId)})}),N&&(0,t.jsx)("div",{className:"mb-2 text-xs text-destructive",role:"alert",children:N}),(0,t.jsxs)("div",{className:"flex items-end gap-2",children:[(0,t.jsx)("input",{ref:f,type:"file",multiple:!0,className:"hidden",onChange:e=>{var t;(t=e.target.files)&&0!==t.length&&j(t),e.target.value=""}}),(0,t.jsx)(l.Button,{type:"button",size:"icon",variant:"ghost",onClick:()=>f.current?.click(),disabled:c,"aria-label":"Attach files",title:"Attach files",children:(0,t.jsx)(s.Paperclip,{className:"h-4 w-4"})}),(0,t.jsx)("textarea",{ref:x,value:m,onChange:e=>p(e.target.value),onKeyDown:e=>{(e.metaKey||e.ctrlKey)&&"Enter"===e.key&&(e.preventDefault(),E())},onInput:()=>{let e=x.current;e&&(e.style.height="auto",e.style.height=`${Math.min(e.scrollHeight,200)}px`)},placeholder:u??(c?"Waiting for response…":"Message the agent..."),disabled:c,rows:1,className:"flex-1 resize-none rounded-lg border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50"}),(0,t.jsx)(l.Button,{size:"icon",onClick:E,disabled:!S,children:c||w?(0,t.jsx)(n.Loader2,{className:"h-4 w-4 animate-spin"}):(0,t.jsx)(a,{className:"h-4 w-4"})})]})]})}],53756)},86567,6423,86704,29472,e=>{"use strict";var t=e.i(54710),r=e.i(34416),a=e.i(45958),n=e.i(52387),s=e.i(20014),i=e.i(90826),l=e.i(81187),o=e.i(89883),c=e.i(90925),d=e.i(65268),u=e.i(8652),h=e.i(48467),m=e.i(79634),p=e.i(81471),x=e.i(14260),f=e.i(95486);function g(e,t){return(0,x.useQuery)({queryKey:["mail-health",e],queryFn:()=>d.api.get(`/mail/${encodeURIComponent(e)}/health`),refetchInterval:1e4,enabled:t})}function b(){let e=(0,f.useQueryClient)();return()=>{e.invalidateQueries({queryKey:["mail-providers"]}),e.invalidateQueries({queryKey:["mail-accounts"]}),e.invalidateQueries({queryKey:["mail-health"]})}}async function v(e,t,r){let a=new Set(e);r?a.add(t):a.delete(t);let n=["gmail","outlook","yahoo","icloud"].filter(e=>a.has(e));return await d.api.patch("/mail/providers",{enabledKinds:n}),n}e.s(["toggleProviderEnabled",0,v,"useInvalidateMail",0,b,"useMailAccountHealth",0,g,"useMailAccounts",0,function(){return(0,x.useQuery)({queryKey:["mail-accounts"],queryFn:()=>d.api.get("/mail/accounts"),refetchInterval:1e4})},"useMailProviders",0,function(){return(0,x.useQuery)({queryKey:["mail-providers"],queryFn:()=>d.api.get("/mail/providers"),refetchInterval:3e4})}],6423);let y={healthy:{variant:"green",label:"Healthy"},requires_consent:{variant:"amber",label:"Re-authenticate"},degraded:{variant:"red",label:"Degraded"}};function w({account:e,highlight:a=!1,hideActive:n=!1,hideHealth:l=!1,onReauthenticate:u,isLastOfKind:p=!1,onAfterRemove:x}){let f=(0,r.useRef)(null),v=(0,i.useConfirm)(),C=b(),[N,S]=(0,r.useState)(!1),[E,A]=(0,r.useState)(null);(0,r.useEffect)(()=>{a&&f.current&&f.current.scrollIntoView({behavior:"smooth",block:"center"})},[a]);let R=g(e.id,!l).data??null,I="yahoo"===e.kind||"icloud"===e.kind,[T,D]=(0,r.useState)(!1),P=async()=>{A(null),S(!0);try{await d.api.patch(`/mail/accounts/${encodeURIComponent(e.id)}`,{active:!e.active}),C()}catch(e){A(e instanceof Error?e.message:"Failed to update")}finally{S(!1)}},M=async()=>{if(await v({title:`Remove ${e.email}?`,description:"Local credentials are revoked and the account is removed from this app. The mailbox itself is untouched at the provider."+(p?" This is the last account of its kind, so the provider will also be disabled — re-authenticate and toggle Enable to bring it back.":""),confirmLabel:"Remove",variant:"destructive"})){A(null),S(!0);try{await d.api.delete(`/mail/accounts/${encodeURIComponent(e.id)}`),x&&await x(),C()}catch(e){A(e instanceof Error?e.message:"Failed to remove")}finally{S(!1)}}},L=y[e.authStatus],F=l||!e.idleEnabled?null:R?.idleFallbackUntilUtc?{label:"polling (IDLE down)",variant:"amber"}:{label:"IDLE",variant:"green"};return(0,t.jsxs)("div",{ref:f,id:`account-${e.id}`,className:"rounded-md border p-3 transition-colors "+(a?"border-amber-400 ring-1 ring-amber-300/60":"border-border"),children:[(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)(o.Mail,{className:"mt-0.5 h-4 w-4 shrink-0 text-muted-foreground"}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-foreground truncate",children:e.email}),e.label&&(0,t.jsxs)("span",{className:"text-xs text-muted-foreground",children:["(",e.label,")"]}),(0,t.jsx)(h.Badge,{variant:L.variant,children:L.label}),F&&(0,t.jsx)(h.Badge,{variant:F.variant,children:F.label})]}),!l&&(0,t.jsx)(k,{health:R})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 shrink-0",children:[!n&&(0,t.jsxs)("label",{className:"flex items-center gap-1 text-xs cursor-pointer select-none",children:[(0,t.jsx)("input",{type:"checkbox",checked:e.active,disabled:N,onChange:()=>void P(),className:"h-3.5 w-3.5 rounded border-border"}),"Active"]}),"requires_consent"===e.authStatus&&(I?(0,t.jsx)(s.Button,{size:"sm",variant:"outline",disabled:N,onClick:()=>D(e=>!e),className:"h-7 text-xs px-2",children:T?"Cancel":"Re-authenticate"}):u&&(0,t.jsx)(s.Button,{size:"sm",variant:"outline",disabled:N,onClick:()=>void u(),className:"h-7 text-xs px-2",children:"Re-authenticate"})),(0,t.jsx)(s.Button,{size:"sm",variant:"outline",onClick:()=>void M(),disabled:N,className:"h-7 px-2",title:"Remove account",children:(0,t.jsx)(c.Trash2,{className:"h-3.5 w-3.5"})})]})]}),E&&(0,t.jsx)(m.Alert,{variant:"error",className:"mt-2",children:E}),I&&T&&(0,t.jsx)(j,{accountId:e.id,onSuccess:()=>{D(!1),C()}})]})}function j({accountId:e,onSuccess:a}){let[n,i]=(0,r.useState)(""),[l,o]=(0,r.useState)(!1),[c,h]=(0,r.useState)(null),p=async()=>{o(!0),h(null);try{await d.api.post(`/config/mail/app-password/${encodeURIComponent(e)}/refresh`,{appPassword:n.trim()}),i(""),a()}catch(e){h(e instanceof Error?e.message:"Failed to refresh")}finally{o(!1)}};return(0,t.jsxs)("div",{className:"mt-2 rounded-md border border-amber-200 bg-amber-50/50 p-3 dark:border-amber-900 dark:bg-amber-950/30 space-y-2",children:[(0,t.jsx)("p",{className:"text-xs text-foreground",children:"Generate a new app password at the provider, paste it here, and the daemon will swap it in place — the polling cursor and account ID stay intact."}),(0,t.jsx)(u.Input,{type:"password",value:n,onChange:e=>i(e.target.value),placeholder:"paste new app password",className:"h-8 text-xs"}),(0,t.jsx)("div",{className:"flex gap-2",children:(0,t.jsx)(s.Button,{size:"sm",onClick:()=>void p(),disabled:l||0===n.trim().length,className:"h-7 text-xs px-3",children:l?"Verifying…":"Update password"})}),c&&(0,t.jsx)(m.Alert,{variant:"error",children:c})]})}function k({health:e}){if(!e)return(0,t.jsx)("p",{className:"mt-1 text-[11px] text-muted-foreground",children:"Waiting for first poll…"});let r=e.lastPollAtUtc,a=null!=r&&Date.now()-(0,p.parseUtcDate)(r).getTime()>9e5;return(0,t.jsxs)("div",{className:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px] text-muted-foreground",children:[(0,t.jsxs)("span",{children:["last poll:"," ",r?(0,t.jsxs)("span",{title:(0,p.formatAbsoluteTime)(r),className:a?"text-amber-600 dark:text-amber-400":void 0,children:[(0,p.formatRelativeTime)(r),a?" · stale":""]}):(0,t.jsx)("span",{children:"never"})]}),e.consecutiveErrorCount>0&&(0,t.jsxs)("span",{className:"text-amber-600 dark:text-amber-400",children:[e.consecutiveErrorCount," consecutive errors"]}),e.lastError&&(0,t.jsxs)("span",{className:"flex items-center gap-1 text-red-600 dark:text-red-400 max-w-full truncate",title:e.lastError,children:[(0,t.jsx)(l.AlertTriangle,{className:"h-3 w-3 shrink-0"}),e.lastError]})]})}var C=e.i(74490),N=e.i(57628);let S={"not-connected":{variant:"gray",label:"Not connected"},"needs-setup":{variant:"gray",label:"Needs setup"},disabled:{variant:"amber",label:"Ready to enable"},enabled:{variant:"green",label:"Enabled"},attention:{variant:"red",label:"Needs attention"}};function E(e){return e.accounts.some(e=>"healthy"!==e.authStatus)?"attention":0===e.accounts.length?e.awaitingProviderSetup?"needs-setup":"not-connected":e.enabled?"enabled":"disabled"}function A(e){let r=S[e.status],a="attention"===e.status?"warning":"enabled"===e.status?"success":"default";return(0,t.jsxs)(C.Card,{tone:a,children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,t.jsx)(o.Mail,{className:"h-4 w-4 text-muted-foreground shrink-0"}),(0,t.jsx)("h3",{className:"text-base font-semibold text-foreground truncate",children:e.name})]}),(0,t.jsx)(h.Badge,{variant:r.variant,children:r.label})]}),(0,t.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:e.description}),(0,t.jsx)("div",{className:"mt-3 space-y-3",children:e.setupSection}),e.accountsSection&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(N.Separator,{className:"my-4"}),(0,t.jsx)("h4",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground mb-2",children:"Authenticated accounts"}),(0,t.jsx)("div",{className:"space-y-2",children:e.accountsSection})]}),(0,t.jsx)(N.Separator,{className:"my-4"}),(0,t.jsx)(R,{toggle:e.enableToggle})]})}function R({toggle:e}){let[a,n]=(0,r.useState)(null),s=async t=>{n(null);try{await e.onChange(t)}catch(e){n(e instanceof Error?e.message:"Failed to update")}};return(0,t.jsxs)("div",{children:[(0,t.jsxs)("label",{className:"flex items-center gap-2 text-sm select-none "+(e.disabled||e.busy?"cursor-not-allowed opacity-60":"cursor-pointer"),title:e.disabled?e.disabledReason:void 0,children:[(0,t.jsx)("input",{type:"checkbox",checked:e.enabled,disabled:e.disabled||e.busy,onChange:e=>void s(e.target.checked),className:"h-4 w-4 rounded border-border"}),(0,t.jsx)("span",{className:"font-medium text-foreground",children:"Enable for the agent"}),e.busy&&(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:"saving…"})]}),e.disabled&&e.disabledReason&&(0,t.jsx)("p",{className:"mt-1 ml-6 text-xs text-muted-foreground",children:e.disabledReason}),!e.disabled&&e.explainer&&(0,t.jsx)("p",{className:"mt-1 ml-6 text-xs text-muted-foreground",children:e.explainer}),a&&(0,t.jsx)(m.Alert,{variant:"error",className:"mt-2",children:a})]})}e.s(["GmailCard",0,function({accounts:e,enabledKinds:l,focusAccountId:o,hideExternalGoogleLink:c=!1}){let d=b(),u=(0,i.useConfirm)(),[h,m]=(0,r.useState)(!1),p=l.includes("gmail"),x=E({accounts:e,enabled:p}),f=async e=>{if(e||await u({title:"Disable Gmail for the agent?",description:"This stops the unified mail poller from observing Gmail — receipts, travel bookings, and Kindle highlights will not be classified until you re-enable Gmail. Tokens stay in the keychain and the integration resumes the moment you flip the switch back on.",confirmLabel:"Disable Gmail",variant:"destructive"})){m(!0);try{await v(l,"gmail",e),d()}finally{m(!1)}}};return(0,t.jsx)(A,{name:"Gmail / Google Workspace",description:(0,t.jsx)(t.Fragment,{children:"Authenticated through your existing Google connection (it is shared with Calendar). Manage Google OAuth on the Connections page."}),status:x,setupSection:0===e.length?(0,t.jsxs)("div",{className:"rounded-md border border-dashed border-border p-3 text-xs",children:[(0,t.jsx)("p",{className:"text-foreground font-medium mb-1",children:"No Gmail account connected yet."}),(0,t.jsx)("p",{className:"text-muted-foreground mb-2",children:c?"Switch the Mode above to Direct and complete the Google connection step on this page — the daemon detects your Gmail address from the OAuth response and registers it here.":"Authenticate Google in Connections — the daemon detects your Gmail address from the OAuth response and registers it here."}),!c&&(0,t.jsx)(a.default,{href:"/connections/calendar#google",children:(0,t.jsxs)(s.Button,{size:"sm",variant:"outline",className:"h-7 text-xs px-3",children:["Open Google connection",(0,t.jsx)(n.ExternalLink,{className:"ml-1 h-3 w-3"})]})})]}):c?null:(0,t.jsxs)("p",{className:"text-xs text-muted-foreground",children:["Re-authentication, scope changes, or revoking access live on the"," ",(0,t.jsx)(a.default,{href:"/connections/calendar#google",className:"underline underline-offset-2",children:"Google connection card"}),"."]}),accountsSection:e.length>0?e.map(r=>(0,t.jsx)(w,{account:r,highlight:o===r.id,hideActive:!0,hideHealth:!0,isLastOfKind:1===e.length,onAfterRemove:async()=>{1===e.length&&p&&await v(l,"gmail",!1)}},r.id)):void 0,enableToggle:{enabled:p,disabled:0===e.length,disabledReason:0===e.length?"Connect a Google account first.":void 0,busy:h,onChange:f,explainer:"When enabled, the legacy Gmail poller observes your inbox and the agent can read, draft, and send messages."}})}],86567),e.i(18446);var I=e.i(49445);function T({index:e,title:r,completed:a=!1,disabled:n=!1,children:s}){return(0,t.jsxs)("div",{className:"rounded-md border border-dashed p-3 "+(n?"border-border opacity-50":a?"border-emerald-300 dark:border-emerald-800":"border-border"),children:[(0,t.jsxs)("p",{className:"text-xs font-semibold text-foreground mb-2",children:["Step ",e,": ",r,a&&(0,t.jsx)("span",{className:"ml-2 text-emerald-600 dark:text-emerald-400",children:"✓"})]}),s]})}e.s(["OutlookCard",0,function({accounts:e,enabledKinds:a,focusAccountId:l}){let o=b(),c=(0,i.useConfirm)(),h=a.includes("outlook"),p=(0,x.useQuery)({queryKey:["outlook-client-config"],queryFn:()=>d.api.get("/config/mail/outlook/client-config"),staleTime:3e4}),f=p.data?.configured===!0,g=E({accounts:e,enabled:h,awaitingProviderSetup:!f}),[y,j]=(0,r.useState)(!1),[k,C]=(0,r.useState)(""),[N,S]=(0,r.useState)("common"),[R,D]=(0,r.useState)(""),[P,M]=(0,r.useState)(!1),[L,F]=(0,r.useState)(null),[O,_]=(0,r.useState)(null),[B,q]=(0,r.useState)(null),[z,$]=(0,r.useState)(!1),H=async e=>{$(!0);try{await v(a,"outlook",e),o()}finally{$(!1)}},U=async()=>{M(!0),F(null);try{await d.api.put("/config/mail/outlook/client-config",{clientId:k.trim(),tenant:N.trim()||"common"}),await p.refetch(),j(!1)}catch(e){F(e instanceof Error?e.message:"Failed to save client config")}finally{M(!1)}},W=async()=>{if(await c({title:"Reset Azure app registration?",description:"Existing Outlook accounts keep working until their tokens expire. You'll need to re-enter the client ID before adding new accounts.",confirmLabel:"Reset",variant:"destructive"})){M(!0),F(null);try{await d.api.delete("/config/mail/outlook/client-config"),await p.refetch()}catch(e){F(e instanceof Error?e.message:"Failed to reset")}finally{M(!1)}}},G=async()=>{if(await c({title:"Open Microsoft sign-in?",description:"The daemon will open your browser to sign in to Microsoft. macOS or Windows may show a one-time firewall prompt — accept it so the loopback callback can complete.",confirmLabel:"Continue"})){M(!0),F(null),_(null);try{await d.api.post("/mail/accounts",{kind:"outlook",label:R.trim()||void 0}),_("Outlook account authenticated. Toggle the switch below to start using it."),D(""),o()}catch(e){F(e instanceof Error?e.message:"OAuth failed")}finally{M(!1)}}},K=async()=>{M(!0),F(null),_(null),q(null);try{let e=await fetch("/api/mail/accounts/device-code",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({kind:"outlook",label:R.trim()||void 0})});if(!e.ok||!e.body)throw Error(`HTTP ${e.status}`);let t=e.body.getReader(),r=new TextDecoder,a="";for(;;){let{value:e,done:n}=await t.read();if(n)break;let s=(a+=r.decode(e,{stream:!0})).split("\n\n");for(let e of(a=s.pop()??"",s)){let t=e.split("\n"),r="",a="";for(let e of t)e.startsWith("event:")&&(r=e.slice(6).trim()),e.startsWith("data:")&&(a+=e.slice(5).trim());if(r){if("prompt"===r)q(JSON.parse(a));else if("completed"===r)_("Outlook account authenticated. Toggle the switch below to start using it."),q(null),D(""),o();else if("failed"===r){let e=JSON.parse(a);throw Error(e.message??"device-code failed")}}}}}catch(e){F(e instanceof Error?e.message:"Device-code OAuth failed"),q(null)}finally{M(!1)}},Q=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(T,{index:1,title:"Register an Azure app (one-time)",completed:f,children:[!f&&!y&&(0,t.jsxs)("div",{className:"space-y-3 text-xs",children:[(0,t.jsxs)("p",{className:"text-muted-foreground",children:["One-time setup: you'll tell Microsoft that the ",I.APP_NAME,"daemon on your computer is allowed to read and send mail on your behalf. Follow every sub-step — two of them are easy to miss and will make sign-in fail with ",(0,t.jsx)("code",{children:"server_error"})," later."]}),(0,t.jsxs)("ol",{className:"list-decimal list-outside pl-4 space-y-2 text-muted-foreground",children:[(0,t.jsxs)("li",{children:["Open the"," ",(0,t.jsxs)("a",{href:"https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade",target:"_blank",rel:"noreferrer",className:"underline inline-flex items-center gap-0.5",children:["Azure portal — App registrations"," ",(0,t.jsx)(n.ExternalLink,{className:"h-3 w-3"})]}),". Sign in with the Microsoft account you want the agent to use."]}),(0,t.jsxs)("li",{children:["Click ",(0,t.jsx)("strong",{children:"+ New registration"})," at the top of the page."]}),(0,t.jsxs)("li",{children:["Fill in the form:",(0,t.jsxs)("ul",{className:"list-disc list-outside pl-4 mt-1 space-y-1",children:[(0,t.jsxs)("li",{children:[(0,t.jsx)("strong",{children:"Name"}),": anything, e.g. ",(0,t.jsx)("code",{children:I.APP_NAME}),"."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("strong",{children:"Supported account types"}),": pick"," ",(0,t.jsx)("em",{children:"Accounts in any organizational directory (Any Microsoft Entra ID tenant – Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)"}),"."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("strong",{children:"Redirect URI"}),": in the left-hand dropdown choose ",(0,t.jsx)("code",{children:"Public client/native (mobile & desktop)"})," ",(0,t.jsx)("strong",{children:"— not"})," ",(0,t.jsx)("code",{children:"Web"}),". Then type"," ",(0,t.jsx)("code",{children:"http://127.0.0.1/callback"})," in the box on the right."]})]}),(0,t.jsxs)("p",{className:"mt-1 rounded-md border border-amber-400/60 bg-amber-400/10 px-2 py-1 text-amber-700 dark:text-amber-300",children:["⚠ Trap #1: if you leave ",(0,t.jsx)("code",{children:"Web"})," selected, Microsoft will later return ",(0,t.jsx)("code",{children:"Authorization failed: server_error"}),". Use the Public client/native option."]})]}),(0,t.jsxs)("li",{children:["Click ",(0,t.jsx)("strong",{children:"Register"})," at the bottom of the form."]}),(0,t.jsxs)("li",{children:["You'll land on the ",(0,t.jsx)("em",{children:"Overview"})," page. Copy the value labelled ",(0,t.jsx)("strong",{children:"Application (client) ID"}),"— you'll paste it into the form below in a moment."]}),(0,t.jsxs)("li",{children:["In the left sidebar click ",(0,t.jsx)("strong",{children:"Authentication"}),". Scroll to the very bottom, find ",(0,t.jsx)("em",{children:"Advanced settings"})," →"," ",(0,t.jsx)("strong",{children:"Allow public client flows"}),", flip the toggle to"," ",(0,t.jsx)("strong",{children:"Yes"}),", then click ",(0,t.jsx)("strong",{children:"Save"})," at the top of the page.",(0,t.jsxs)("p",{className:"mt-1 rounded-md border border-amber-400/60 bg-amber-400/10 px-2 py-1 text-amber-700 dark:text-amber-300",children:["⚠ Trap #2: this toggle is off by default. Without it sign-in also fails with ",(0,t.jsx)("code",{children:"server_error"}),"."]})]}),(0,t.jsxs)("li",{children:["In the left sidebar click ",(0,t.jsx)("strong",{children:"API permissions"})," →"," ",(0,t.jsx)("strong",{children:"+ Add a permission"})," →"," ",(0,t.jsx)("strong",{children:"Microsoft Graph"})," →"," ",(0,t.jsx)("strong",{children:"Delegated permissions"}),". Use the search box to find and tick each of:",(0,t.jsxs)("ul",{className:"list-disc list-outside pl-4 mt-1",children:[(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"offline_access"})}),(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"User.Read"})}),(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"Mail.ReadWrite"})}),(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"Mail.Send"})})]}),"Then click ",(0,t.jsx)("strong",{children:"Add permissions"})," at the bottom."]}),(0,t.jsxs)("li",{children:["(Work/school tenant only) If your org requires admin consent for these scopes, click ",(0,t.jsx)("strong",{children:"Grant admin consent"}),". Personal Microsoft accounts don't need this step."]}),(0,t.jsxs)("li",{children:["Come back here and click ",(0,t.jsx)("strong",{children:"I have a client ID"}),". Paste the Application (client) ID you copied in step 5; leave Tenant as ",(0,t.jsx)("code",{children:"common"})," unless your admin told you otherwise."]})]}),(0,t.jsx)(s.Button,{size:"sm",variant:"outline",onClick:()=>j(!0),className:"h-7 text-xs px-3",children:"I have a client ID"})]}),y&&(0,t.jsxs)("div",{className:"space-y-2 rounded-md border border-border p-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:"outlook-client-id",children:"Application (client) ID"}),(0,t.jsx)(u.Input,{id:"outlook-client-id",value:k,onChange:e=>C(e.target.value),placeholder:"00000000-0000-0000-0000-000000000000",className:"h-8 text-xs"})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:"outlook-tenant",children:["Tenant (default ",(0,t.jsx)("code",{children:"common"}),")"]}),(0,t.jsx)(u.Input,{id:"outlook-tenant",value:N,onChange:e=>S(e.target.value),placeholder:"common / organizations / <tenant-guid>",className:"h-8 text-xs"})]}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(s.Button,{size:"sm",variant:"outline",onClick:()=>void U(),disabled:P||0===k.trim().length,className:"h-7 text-xs px-3",children:P?"Saving…":"Save"}),(0,t.jsx)(s.Button,{size:"sm",variant:"outline",onClick:()=>j(!1),disabled:P,className:"h-7 text-xs px-3",children:"Cancel"})]})]}),f&&!y&&(0,t.jsxs)("div",{className:"text-xs text-muted-foreground",children:["Application ID:"," ",(0,t.jsx)("code",{className:"font-mono",children:p.data?.clientId})," ","(tenant ",(0,t.jsx)("code",{children:p.data?.tenant}),")."," ",(0,t.jsx)("button",{type:"button",className:"underline",onClick:()=>void W(),disabled:P,children:"reset"})]})]}),(0,t.jsx)(T,{index:2,title:"Authenticate an Outlook account",disabled:!f,children:f?(0,t.jsxs)("div",{className:"space-y-2 rounded-md border border-border p-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:"outlook-label",children:"Label (optional)"}),(0,t.jsx)(u.Input,{id:"outlook-label",value:R,onChange:e=>D(e.target.value),placeholder:"work, personal, …",className:"h-8 text-xs"})]}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,t.jsx)(s.Button,{size:"sm",onClick:()=>void G(),disabled:P,className:"h-7 text-xs px-3",children:P?"Waiting for consent…":"Authenticate (browser)"}),(0,t.jsx)(s.Button,{size:"sm",variant:"outline",onClick:()=>void K(),disabled:P,className:"h-7 text-xs px-3",title:"Use if the daemon runs headless (SSH / WSL)",children:"Authenticate (device code)"})]}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:"The browser flow may trigger a one-time macOS / Windows firewall prompt — accept it so the loopback callback can complete."})]}):(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:"Save the client ID first."})}),B&&(0,t.jsx)(m.Alert,{variant:"warning",children:(0,t.jsxs)("div",{className:"text-xs",children:["Visit"," ",(0,t.jsx)("a",{href:B.verificationUri,target:"_blank",rel:"noreferrer",className:"underline",children:B.verificationUri})," ","and enter code"," ",(0,t.jsx)("code",{className:"font-mono",children:B.userCode}),". Expires in ",Math.round(B.expiresIn/60)," min."]})}),O&&(0,t.jsx)(m.Alert,{variant:"success",children:O}),L&&(0,t.jsx)(m.Alert,{variant:"error",children:L})]});return(0,t.jsx)(A,{name:"Outlook / Microsoft 365",description:(0,t.jsx)(t.Fragment,{children:"One-time Azure app registration, then connect as many Outlook / outlook.com / Microsoft 365 accounts as you need."}),status:g,setupSection:Q,accountsSection:e.length>0?e.map(r=>(0,t.jsx)(w,{account:r,highlight:l===r.id,onReauthenticate:()=>void G(),isLastOfKind:1===e.length,onAfterRemove:async()=>{1===e.length&&h&&await v(a,"outlook",!1)}},r.id)):void 0,enableToggle:{enabled:h,disabled:0===e.length,disabledReason:0===e.length?"Authenticate an Outlook account first.":void 0,busy:z,onChange:H,explainer:"When enabled, the agent observes your Outlook inbox via Microsoft Graph and can read, draft, and send messages."}})}],86704);let D={yahoo:{name:"Yahoo Mail",description:"App-password login over IMAP/SMTP. Generate the password in Yahoo Account Security, paste it once, and the daemon stores it in the OS keychain.",setupUrl:"https://login.yahoo.com/account/security",setupLabel:"Yahoo Account Security",passwordLabel:"Yahoo app password",defaultDomain:"yahoo.com",prerequisite:"Yahoo requires two-step verification on the account before it lets you create app passwords. If you haven't enabled it yet, turn it on first from the same Account Security page.",passwordSteps:[(0,t.jsxs)(t.Fragment,{children:["Open the"," ",(0,t.jsx)("strong",{children:"Yahoo Account Security"})," page and sign in with the Yahoo account you want to connect."]}),(0,t.jsxs)(t.Fragment,{children:["Scroll to ",(0,t.jsx)("strong",{children:"Other ways to sign in"})," and click"," ",(0,t.jsx)("strong",{children:"Generate and manage app passwords"}),". (If the link is missing, enable two-step verification first.)"]}),(0,t.jsxs)(t.Fragment,{children:["In the ",(0,t.jsx)("em",{children:"App name"})," field type ",(0,t.jsx)("code",{children:I.APP_NAME})," (any name works; this is just a label Yahoo shows in your account), then click ",(0,t.jsx)("strong",{children:"Generate password"}),"."]}),(0,t.jsxs)(t.Fragment,{children:["Yahoo shows a 16-character password with spaces. Copy it exactly as shown — ",(0,t.jsx)("strong",{children:"do not type it by hand"}),". Spaces are part of the password."]}),(0,t.jsx)(t.Fragment,{children:"Paste it into the password field below, then click Authenticate."})],passwordHint:"16 characters from Yahoo, spaces included. Do not retype — paste."},icloud:{name:"iCloud Mail",description:"App-specific-password login over IMAP/SMTP. Create the password in Apple Account → Sign-In and Security, paste it once, and the daemon stores it in the OS keychain.",setupUrl:"https://account.apple.com",setupLabel:"Apple Account",passwordLabel:"Apple app-specific password",defaultDomain:"icloud.com",prerequisite:"Apple only allows app-specific passwords on Apple IDs that have two-factor authentication turned on. If your Apple ID doesn't have 2FA yet, enable it first at appleid.apple.com.",passwordSteps:[(0,t.jsxs)(t.Fragment,{children:["Open ",(0,t.jsx)("strong",{children:"Apple Account"})," and sign in with the Apple ID whose iCloud mailbox you want to connect."]}),(0,t.jsxs)(t.Fragment,{children:["In the left sidebar click ",(0,t.jsx)("strong",{children:"Sign-In and Security"}),", then click ",(0,t.jsx)("strong",{children:"App-Specific Passwords"}),"."]}),(0,t.jsxs)(t.Fragment,{children:["Click ",(0,t.jsx)("strong",{children:"+ Generate an app-specific password"}),". Apple may ask you to re-enter your Apple ID password."]}),(0,t.jsxs)(t.Fragment,{children:["In the label field type ",(0,t.jsx)("code",{children:I.APP_NAME})," (any name works), then click ",(0,t.jsx)("strong",{children:"Create"}),"."]}),(0,t.jsxs)(t.Fragment,{children:["Apple shows a 19-character password in the form"," ",(0,t.jsx)("code",{children:"xxxx-xxxx-xxxx-xxxx"}),". Copy it exactly —"," ",(0,t.jsx)("strong",{children:"the dashes are required"}),"."]}),(0,t.jsx)(t.Fragment,{children:"Paste it into the password field below, then click Authenticate."})],passwordHint:"Format: xxxx-xxxx-xxxx-xxxx. Dashes are required — paste, don't retype."}};e.s(["ImapCard",0,function({kind:e,accounts:a,enabledKinds:i,focusAccountId:l}){let o=b(),c=D[e],h=i.includes(e),p=E({accounts:a,enabled:h}),[x,f]=(0,r.useState)(""),[g,y]=(0,r.useState)(""),[j,k]=(0,r.useState)(""),[C,N]=(0,r.useState)(!1),[S,R]=(0,r.useState)(null),[I,T]=(0,r.useState)(null),[P,M]=(0,r.useState)(!1),L=async t=>{M(!0);try{await v(i,e,t),o()}finally{M(!1)}},F=async()=>{N(!0),R(null),T(null);try{await d.api.post("/config/mail/app-password",{kind:e,email:`${x.trim()}@${c.defaultDomain}`,appPassword:g.trim(),label:j.trim()||void 0}),T(`${c.name} authenticated. Toggle the switch below to start using it.`),f(""),y(""),k(""),o()}catch(e){R(e instanceof Error?e.message:"Failed to connect")}finally{N(!1)}},O=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"rounded-md border border-dashed border-border p-3 text-xs space-y-2",children:[(0,t.jsx)("p",{className:"text-foreground font-medium",children:"Step 1: Generate an app password"}),(0,t.jsxs)("p",{className:"text-muted-foreground",children:[c.prerequisite," ",(0,t.jsxs)("a",{href:c.setupUrl,target:"_blank",rel:"noreferrer",className:"underline inline-flex items-center gap-0.5",children:["Open ",c.setupLabel," ",(0,t.jsx)(n.ExternalLink,{className:"h-3 w-3"})]}),"."]}),(0,t.jsx)("ol",{className:"list-decimal list-outside pl-4 space-y-1 text-muted-foreground",children:c.passwordSteps.map((e,r)=>(0,t.jsx)("li",{children:e},r))})]}),(0,t.jsxs)("div",{className:"rounded-md border border-border p-3 space-y-2",children:[(0,t.jsx)("p",{className:"text-xs font-semibold text-foreground",children:"Step 2: Authenticate the account"}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:`${e}-email`,children:"Account email"}),(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(u.Input,{id:`${e}-email`,value:x,onChange:e=>f(e.target.value),placeholder:"username",className:"h-8 text-xs rounded-r-none"}),(0,t.jsxs)("span",{className:"inline-flex h-8 items-center rounded-r-md border border-l-0 border-input bg-muted px-3 text-xs text-muted-foreground select-none",children:["@",c.defaultDomain]})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:`${e}-app-password`,children:c.passwordLabel}),(0,t.jsx)(u.Input,{id:`${e}-app-password`,type:"password",value:g,onChange:e=>y(e.target.value),placeholder:"paste generated password",className:"h-8 text-xs"}),(0,t.jsx)("p",{className:"mt-1 text-[11px] text-muted-foreground",children:c.passwordHint})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:`${e}-label`,children:"Label (optional)"}),(0,t.jsx)(u.Input,{id:`${e}-label`,value:j,onChange:e=>k(e.target.value),placeholder:"personal, family, …",className:"h-8 text-xs"})]}),(0,t.jsx)(s.Button,{size:"sm",onClick:()=>void F(),disabled:C||0===x.trim().length||0===g.trim().length,className:"h-7 text-xs px-3",children:C?"Authenticating…":"Authenticate"})]}),I&&(0,t.jsx)(m.Alert,{variant:"success",children:I}),S&&(0,t.jsx)(m.Alert,{variant:"error",children:S})]});return(0,t.jsx)(A,{name:c.name,description:c.description,status:p,setupSection:O,accountsSection:a.length>0?a.map(r=>(0,t.jsx)(w,{account:r,highlight:l===r.id,isLastOfKind:1===a.length,onAfterRemove:async()=>{1===a.length&&h&&await v(i,e,!1)}},r.id)):void 0,enableToggle:{enabled:h,disabled:0===a.length,disabledReason:0===a.length?`Authenticate a ${c.name} account first.`:void 0,busy:P,onChange:L,explainer:`When enabled, the agent observes your ${c.name} inbox via IMAP IDLE and can read, draft, and send messages.`}})}],29472)}]);
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,52387,e=>{"use strict";let t=(0,e.i(77379).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"}]]);e.s(["ExternalLink",0,t],52387)},75750,e=>{"use strict";let t=(0,e.i(77379).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"}]]);e.s(["XCircle",0,t],75750)},2745,e=>{"use strict";let t=(0,e.i(77379).default)("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);e.s(["ShieldCheck",0,t],2745)},58436,e=>{"use strict";var t=e.i(54710),r=e.i(34416),a=e.i(55575),n=e.i(72740),s=e.i(20014),i=e.i(8652),l=e.i(66127),o=e.i(81471);e.s(["DirectoryPickerField",0,function({id:e,value:c,onChange:d,title:u,placeholder:h="Choose a folder...",defaultPath:m,disabled:p=!1,className:x,inputClassName:f,buttonLabel:g="Choose"}){let[b,v]=(0,r.useState)(!1),[y,w]=(0,r.useState)(null),j=async()=>{v(!0),w(null);try{let e=await (0,l.pickDirectoryFromDesktop)({title:u,defaultPath:c.trim()||m});e&&d(e)}catch(e){w(e instanceof Error?e.message:"Folder picker is unavailable.")}finally{v(!1)}};return(0,t.jsxs)("div",{className:(0,o.cn)("space-y-1",x),children:[(0,t.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row",children:[(0,t.jsx)(i.Input,{id:e,value:c,onChange:e=>{d(e.target.value),w(null)},placeholder:h,className:(0,o.cn)("font-mono text-sm",f),disabled:p||b}),(0,t.jsxs)(s.Button,{type:"button",variant:"outline",onClick:j,disabled:p||b,className:"shrink-0 gap-2",children:[b?(0,t.jsx)(n.Loader2,{className:"h-4 w-4 animate-spin"}):(0,t.jsx)(a.FolderOpen,{className:"h-4 w-4"}),b?"Opening...":g]})]}),y&&(0,t.jsx)("p",{className:"text-xs text-destructive",children:y})]})}])},7663,e=>{"use strict";let t=(0,e.i(77379).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"}]]);e.s(["Save",0,t],7663)},24756,e=>{"use strict";var t=e.i(14260),r=e.i(65268);e.s(["useBackends",0,function(e){return(0,t.useQuery)({queryKey:["backends"],queryFn:()=>r.api.get("/backends"),enabled:e?.enabled??!0,staleTime:6e4})}])},70986,e=>{"use strict";var t=e.i(34416),r=e.i(91967),a=e.i(9413),n=e.i(36567),s=e.i(18731),i=e.i(22353),l=e.i(85565),o=e.i(90816),c=e.i(11207),d=e.i(54710),u="Collapsible",[h,m]=(0,a.createContextScope)(u),[p,x]=h(u),f=t.forwardRef((e,r)=>{let{__scopeCollapsible:a,open:s,defaultOpen:i,disabled:o,onOpenChange:h,...m}=e,[x,f]=(0,n.useControllableState)({prop:s,defaultProp:i??!1,onChange:h,caller:u});return(0,d.jsx)(p,{scope:a,disabled:o,contentId:(0,c.useId)(),open:x,onOpenToggle:t.useCallback(()=>f(e=>!e),[f]),children:(0,d.jsx)(l.Primitive.div,{"data-state":j(x),"data-disabled":o?"":void 0,...m,ref:r})})});f.displayName=u;var g="CollapsibleTrigger",b=t.forwardRef((e,t)=>{let{__scopeCollapsible:a,...n}=e,s=x(g,a);return(0,d.jsx)(l.Primitive.button,{type:"button","aria-controls":s.contentId,"aria-expanded":s.open||!1,"data-state":j(s.open),"data-disabled":s.disabled?"":void 0,disabled:s.disabled,...n,ref:t,onClick:(0,r.composeEventHandlers)(e.onClick,s.onOpenToggle)})});b.displayName=g;var v="CollapsibleContent",y=t.forwardRef((e,t)=>{let{forceMount:r,...a}=e,n=x(v,e.__scopeCollapsible);return(0,d.jsx)(o.Presence,{present:r||n.open,children:({present:e})=>(0,d.jsx)(w,{...a,ref:t,present:e})})});y.displayName=v;var w=t.forwardRef((e,r)=>{let{__scopeCollapsible:a,present:n,children:o,...c}=e,u=x(v,a),[h,m]=t.useState(n),p=t.useRef(null),f=(0,i.useComposedRefs)(r,p),g=t.useRef(0),b=g.current,y=t.useRef(0),w=y.current,k=u.open||h,C=t.useRef(k),N=t.useRef(void 0);return t.useEffect(()=>{let e=requestAnimationFrame(()=>C.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,s.useLayoutEffect)(()=>{let e=p.current;if(e){N.current=N.current||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration="0s",e.style.animationName="none";let t=e.getBoundingClientRect();g.current=t.height,y.current=t.width,C.current||(e.style.transitionDuration=N.current.transitionDuration,e.style.animationName=N.current.animationName),m(n)}},[u.open,n]),(0,d.jsx)(l.Primitive.div,{"data-state":j(u.open),"data-disabled":u.disabled?"":void 0,id:u.contentId,hidden:!k,...c,ref:f,style:{"--radix-collapsible-content-height":b?`${b}px`:void 0,"--radix-collapsible-content-width":w?`${w}px`:void 0,...e.style},children:k&&o})});function j(e){return e?"open":"closed"}e.s(["Collapsible",0,f,"CollapsibleContent",0,y,"CollapsibleTrigger",0,b],70986)},76176,e=>{"use strict";e.i(18446);var t=e.i(38082);let r={claude:"Claude Code",codex:"OpenAI Codex",gemini:"Gemini CLI",opencode:"OpenCode"},a=new Set(["opencode"]);function n(e){return a.has(e)}let s={gemini:{badgeLabel:"Vendor deprecation",shortSuffix:" (deprecated)",reason:"Google announced Gemini CLI will stop serving free, Pro, and Ultra requests on 2026-06-18 in favor of Antigravity CLI. Standard / Enterprise licenses keep access. Avoid binding new processes to Gemini if you rely on consumer-tier auth."}},i={claude:"Claude",codex:"Codex",gemini:"Gemini",opencode:"OpenCode"},l={claude:["#7C2D12","#B54B2D","#E15B40","#F97316","#FDBA74"],codex:["#86198F","#A21CAF","#D946EF","#E879F9","#F5D0FE"],gemini:["#1E3A8A","#1D4ED8","#1C69FF","#60A5FA","#93C5FD"],opencode:["#7C2D12","#C2410C","#FF7300","#F59E0B","#FCD34D"]},o=["#6b7280","#9ca3af","#4b5563","#374151"],c={claude:"orange",codex:"pink",gemini:"blue",opencode:"orange"},d={"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 u(e){let t;if(!e)return[];try{t=JSON.parse(e)}catch{return[]}if(!t||"object"!=typeof t)return[];let r=[];for(let[e,a]of Object.entries(t))a&&"object"==typeof a&&r.push({modelId:e,inputTokens:"number"==typeof a.inputTokens?a.inputTokens:0,outputTokens:"number"==typeof a.outputTokens?a.outputTokens:0,costUsd:"number"==typeof a.costUsd?a.costUsd:0});return r.sort((e,t)=>t.costUsd-e.costUsd)}function h(e){if(!e)return null;let t=e.toLowerCase();return/^[a-z0-9_.-]+\/[a-z0-9_.-]+/.test(t)?"opencode":t.includes("claude")||t.includes("sonnet")||t.includes("opus")||t.includes("haiku")?"claude":t.includes("gemini")?"gemini":t.includes("gpt")||t.includes("codex")||t.includes("o3")||t.includes("o4")?"codex":null}e.s(["BACKEND_BADGE_VARIANTS",0,c,"BACKEND_COLORS",0,{claude:"#E15B40",codex:"#D946EF",gemini:"#1C69FF",opencode:"#FF7300"},"BACKEND_LABELS",0,r,"BACKEND_PROVIDER_LABELS",0,{claude:"Claude (Anthropic)",codex:"ChatGPT (OpenAI)",gemini:"Gemini (Google)",opencode:"OpenCode (sst/opencode)"},"BACKEND_PROVIDER_SHORT",0,{claude:"Claude",codex:"ChatGPT",gemini:"Gemini",opencode:"OpenCode"},"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.",opencode:"Lets the agent call the configured OpenCode provider's web-search tool when the OpenCode runtime is enabled."},"CHART_CATEGORY_PALETTE",0,["#3b82f6","#10b981","#f59e0b","#8b5cf6","#ec4899","#14b8a6","#f97316","#6366f1","#ef4444","#22c55e"],"UI_PREVIEW_ONLY_BADGE_SUFFIX",0," (coming soon)","UI_PREVIEW_ONLY_REASON",0,"Coming soon — OpenCode is wired internally but not yet ready for selection in this release. The card stays visible so you can see what is on the roadmap.","assignModelColors",0,function(e){let t=new Map;for(let r of e){if(!r)continue;let e=h(r)??"other",a=t.get(e)??[];a.push(r),t.set(e,a)}let r={};for(let[e,a]of t){a.sort((e,t)=>e.localeCompare(t));let t="other"===e?o:l[e],n=a.length;a.forEach((e,a)=>{let s;s=n>=t.length?a%t.length:1===n?Math.floor(t.length/2):Math.floor((a+.5)*t.length/n),r[e]=t[s]})}return r},"detectBackendFromModel",0,h,"formatModelName",0,function(e){return e?e.replace(/^[a-z0-9_.-]+\//i,"").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(e){if(!e)return"unknown";if("opus"===e)return"Opus";if("sonnet"===e)return"Sonnet";let t=e.replace(/^[a-z0-9_.-]+\//i,""),r=t.replace(/-\d{8,}$/,"").replace(/^claude-/,"").replace(/(\d+)-(\d+)(?![-\d])/g,"$1.$2").replace(/-/g," ");return t.startsWith("gpt-")&&(r=`GPT-${r.replace(/^gpt\s*/i,"")}`),t.startsWith("gemini-")&&(r=r.replace(/^gemini\s*/i,"Gemini ")),r.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()},"getBackendDeprecation",0,function(e){return s[e]??null},"getBackendLabel",0,function(e){return r[e]},"getBackendShortLabel",0,function(e){return i[e]},"getProcessGroup",0,function(e){return e.startsWith("wiki.")?"Wiki":e.startsWith("message.")||e.startsWith("dashboard.")?"Conversation":e.startsWith("routine.")?"Routines":e.startsWith("git.")||e.startsWith("github.")?"Git & GitHub":e.startsWith("calendar.")||"gmail_classify"===e?"Integrations":"Tasks"},"getProcessLabel",0,function(e){return d[e]??e},"isBackendSelectionDisabled",0,function(e){return!(0,t.isRuntimeAvailableBackendId)(e)||n(e)},"isUiPreviewOnlyBackend",0,n,"modelBadgeVariant",0,function(e){if(!e)return"gray";let t=h(e);return t?c[t]:"gray"},"parseModelUsage",0,u,"pickDisplayModel",0,function(e,t){let r=u(t);return r.length>0&&r[0]?r[0].modelId:e??null}])},59134,e=>{"use strict";let t=(0,e.i(77379).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"}]]);e.s(["RefreshCw",0,t],59134)},13707,e=>{"use strict";var t=e.i(54710),r=e.i(34416),a=e.i(85565),n=e.i(90816),s=e.i(9413),i=e.i(22353),l=e.i(88248),o=e.i(75649),c=e.i(18731),d=e.i(27069),u=e.i(91967),h="ScrollArea",[m,p]=(0,s.createContextScope)(h),[x,f]=m(h),g=r.forwardRef((e,n)=>{let{__scopeScrollArea:s,type:l="hover",dir:c,scrollHideDelay:d=600,...u}=e,[h,m]=r.useState(null),[p,f]=r.useState(null),[g,b]=r.useState(null),[v,y]=r.useState(null),[w,j]=r.useState(null),[k,C]=r.useState(0),[N,S]=r.useState(0),[E,A]=r.useState(!1),[R,I]=r.useState(!1),T=(0,i.useComposedRefs)(n,e=>m(e)),D=(0,o.useDirection)(c);return(0,t.jsx)(x,{scope:s,type:l,dir:D,scrollHideDelay:d,scrollArea:h,viewport:p,onViewportChange:f,content:g,onContentChange:b,scrollbarX:v,onScrollbarXChange:y,scrollbarXEnabled:E,onScrollbarXEnabledChange:A,scrollbarY:w,onScrollbarYChange:j,scrollbarYEnabled:R,onScrollbarYEnabledChange:I,onCornerWidthChange:C,onCornerHeightChange:S,children:(0,t.jsx)(a.Primitive.div,{dir:D,...u,ref:T,style:{position:"relative","--radix-scroll-area-corner-width":k+"px","--radix-scroll-area-corner-height":N+"px",...e.style}})})});g.displayName=h;var b="ScrollAreaViewport",v=r.forwardRef((e,n)=>{let{__scopeScrollArea:s,children:l,nonce:o,...c}=e,d=f(b,s),u=r.useRef(null),h=(0,i.useComposedRefs)(n,u,d.onViewportChange);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:o}),(0,t.jsx)(a.Primitive.div,{"data-radix-scroll-area-viewport":"",...c,ref:h,style:{overflowX:d.scrollbarXEnabled?"scroll":"hidden",overflowY:d.scrollbarYEnabled?"scroll":"hidden",...e.style},children:(0,t.jsx)("div",{ref:d.onContentChange,style:{minWidth:"100%",display:"table"},children:l})})]})});v.displayName=b;var y="ScrollAreaScrollbar",w=r.forwardRef((e,a)=>{let{forceMount:n,...s}=e,i=f(y,e.__scopeScrollArea),{onScrollbarXEnabledChange:l,onScrollbarYEnabledChange:o}=i,c="horizontal"===e.orientation;return r.useEffect(()=>(c?l(!0):o(!0),()=>{c?l(!1):o(!1)}),[c,l,o]),"hover"===i.type?(0,t.jsx)(j,{...s,ref:a,forceMount:n}):"scroll"===i.type?(0,t.jsx)(k,{...s,ref:a,forceMount:n}):"auto"===i.type?(0,t.jsx)(C,{...s,ref:a,forceMount:n}):"always"===i.type?(0,t.jsx)(N,{...s,ref:a}):null});w.displayName=y;var j=r.forwardRef((e,a)=>{let{forceMount:s,...i}=e,l=f(y,e.__scopeScrollArea),[o,c]=r.useState(!1);return r.useEffect(()=>{let e=l.scrollArea,t=0;if(e){let r=()=>{window.clearTimeout(t),c(!0)},a=()=>{t=window.setTimeout(()=>c(!1),l.scrollHideDelay)};return e.addEventListener("pointerenter",r),e.addEventListener("pointerleave",a),()=>{window.clearTimeout(t),e.removeEventListener("pointerenter",r),e.removeEventListener("pointerleave",a)}}},[l.scrollArea,l.scrollHideDelay]),(0,t.jsx)(n.Presence,{present:s||o,children:(0,t.jsx)(C,{"data-state":o?"visible":"hidden",...i,ref:a})})}),k=r.forwardRef((e,a)=>{var s;let{forceMount:i,...l}=e,o=f(y,e.__scopeScrollArea),c="horizontal"===e.orientation,d=H(()=>m("SCROLL_END"),100),[h,m]=(s={hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}},r.useReducer((e,t)=>s[e][t]??e,"hidden"));return r.useEffect(()=>{if("idle"===h){let e=window.setTimeout(()=>m("HIDE"),o.scrollHideDelay);return()=>window.clearTimeout(e)}},[h,o.scrollHideDelay,m]),r.useEffect(()=>{let e=o.viewport,t=c?"scrollLeft":"scrollTop";if(e){let r=e[t],a=()=>{let a=e[t];r!==a&&(m("SCROLL"),d()),r=a};return e.addEventListener("scroll",a),()=>e.removeEventListener("scroll",a)}},[o.viewport,c,m,d]),(0,t.jsx)(n.Presence,{present:i||"hidden"!==h,children:(0,t.jsx)(N,{"data-state":"hidden"===h?"hidden":"visible",...l,ref:a,onPointerEnter:(0,u.composeEventHandlers)(e.onPointerEnter,()=>m("POINTER_ENTER")),onPointerLeave:(0,u.composeEventHandlers)(e.onPointerLeave,()=>m("POINTER_LEAVE"))})})}),C=r.forwardRef((e,a)=>{let s=f(y,e.__scopeScrollArea),{forceMount:i,...l}=e,[o,c]=r.useState(!1),d="horizontal"===e.orientation,u=H(()=>{if(s.viewport){let e=s.viewport.offsetWidth<s.viewport.scrollWidth,t=s.viewport.offsetHeight<s.viewport.scrollHeight;c(d?e:t)}},10);return U(s.viewport,u),U(s.content,u),(0,t.jsx)(n.Presence,{present:i||o,children:(0,t.jsx)(N,{"data-state":o?"visible":"hidden",...l,ref:a})})}),N=r.forwardRef((e,a)=>{let{orientation:n="vertical",...s}=e,i=f(y,e.__scopeScrollArea),l=r.useRef(null),o=r.useRef(0),[c,d]=r.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),u=_(c.viewport,c.content),h={...s,sizes:c,onSizesChange:d,hasThumb:!!(u>0&&u<1),onThumbChange:e=>l.current=e,onThumbPointerUp:()=>o.current=0,onThumbPointerDown:e=>o.current=e};function m(e,t){return function(e,t,r,a="ltr"){let n=B(r),s=t||n/2,i=r.scrollbar.paddingStart+s,l=r.scrollbar.size-r.scrollbar.paddingEnd-(n-s),o=r.content-r.viewport;return z([i,l],"ltr"===a?[0,o]:[-1*o,0])(e)}(e,o.current,c,t)}return"horizontal"===n?(0,t.jsx)(S,{...h,ref:a,onThumbPositionChange:()=>{if(i.viewport&&l.current){let e=q(i.viewport.scrollLeft,c,i.dir);l.current.style.transform=`translate3d(${e}px, 0, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollLeft=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollLeft=m(e,i.dir))}}):"vertical"===n?(0,t.jsx)(E,{...h,ref:a,onThumbPositionChange:()=>{if(i.viewport&&l.current){let e=q(i.viewport.scrollTop,c);l.current.style.transform=`translate3d(0, ${e}px, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollTop=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollTop=m(e))}}):null}),S=r.forwardRef((e,a)=>{let{sizes:n,onSizesChange:s,...l}=e,o=f(y,e.__scopeScrollArea),[c,d]=r.useState(),u=r.useRef(null),h=(0,i.useComposedRefs)(a,u,o.onScrollbarXChange);return r.useEffect(()=>{u.current&&d(getComputedStyle(u.current))},[u]),(0,t.jsx)(I,{"data-orientation":"horizontal",...l,ref:h,sizes:n,style:{bottom:0,left:"rtl"===o.dir?"var(--radix-scroll-area-corner-width)":0,right:"ltr"===o.dir?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":B(n)+"px",...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.x),onDragScroll:t=>e.onDragScroll(t.x),onWheelScroll:(t,r)=>{if(o.viewport){var a,n;let s=o.viewport.scrollLeft+t.deltaX;e.onWheelScroll(s),a=s,n=r,a>0&&a<n&&t.preventDefault()}},onResize:()=>{u.current&&o.viewport&&c&&s({content:o.viewport.scrollWidth,viewport:o.viewport.offsetWidth,scrollbar:{size:u.current.clientWidth,paddingStart:O(c.paddingLeft),paddingEnd:O(c.paddingRight)}})}})}),E=r.forwardRef((e,a)=>{let{sizes:n,onSizesChange:s,...l}=e,o=f(y,e.__scopeScrollArea),[c,d]=r.useState(),u=r.useRef(null),h=(0,i.useComposedRefs)(a,u,o.onScrollbarYChange);return r.useEffect(()=>{u.current&&d(getComputedStyle(u.current))},[u]),(0,t.jsx)(I,{"data-orientation":"vertical",...l,ref:h,sizes:n,style:{top:0,right:"ltr"===o.dir?0:void 0,left:"rtl"===o.dir?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":B(n)+"px",...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.y),onDragScroll:t=>e.onDragScroll(t.y),onWheelScroll:(t,r)=>{if(o.viewport){var a,n;let s=o.viewport.scrollTop+t.deltaY;e.onWheelScroll(s),a=s,n=r,a>0&&a<n&&t.preventDefault()}},onResize:()=>{u.current&&o.viewport&&c&&s({content:o.viewport.scrollHeight,viewport:o.viewport.offsetHeight,scrollbar:{size:u.current.clientHeight,paddingStart:O(c.paddingTop),paddingEnd:O(c.paddingBottom)}})}})}),[A,R]=m(y),I=r.forwardRef((e,n)=>{let{__scopeScrollArea:s,sizes:o,hasThumb:c,onThumbChange:d,onThumbPointerUp:h,onThumbPointerDown:m,onThumbPositionChange:p,onDragScroll:x,onWheelScroll:g,onResize:b,...v}=e,w=f(y,s),[j,k]=r.useState(null),C=(0,i.useComposedRefs)(n,e=>k(e)),N=r.useRef(null),S=r.useRef(""),E=w.viewport,R=o.content-o.viewport,I=(0,l.useCallbackRef)(g),T=(0,l.useCallbackRef)(p),D=H(b,10);function P(e){N.current&&x({x:e.clientX-N.current.left,y:e.clientY-N.current.top})}return r.useEffect(()=>{let e=e=>{let t=e.target;j?.contains(t)&&I(e,R)};return document.addEventListener("wheel",e,{passive:!1}),()=>document.removeEventListener("wheel",e,{passive:!1})},[E,j,R,I]),r.useEffect(T,[o,T]),U(j,D),U(w.content,D),(0,t.jsx)(A,{scope:s,scrollbar:j,hasThumb:c,onThumbChange:(0,l.useCallbackRef)(d),onThumbPointerUp:(0,l.useCallbackRef)(h),onThumbPositionChange:T,onThumbPointerDown:(0,l.useCallbackRef)(m),children:(0,t.jsx)(a.Primitive.div,{...v,ref:C,style:{position:"absolute",...v.style},onPointerDown:(0,u.composeEventHandlers)(e.onPointerDown,e=>{0===e.button&&(e.target.setPointerCapture(e.pointerId),N.current=j.getBoundingClientRect(),S.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",w.viewport&&(w.viewport.style.scrollBehavior="auto"),P(e))}),onPointerMove:(0,u.composeEventHandlers)(e.onPointerMove,P),onPointerUp:(0,u.composeEventHandlers)(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=S.current,w.viewport&&(w.viewport.style.scrollBehavior=""),N.current=null})})})}),T="ScrollAreaThumb",D=r.forwardRef((e,r)=>{let{forceMount:a,...s}=e,i=R(T,e.__scopeScrollArea);return(0,t.jsx)(n.Presence,{present:a||i.hasThumb,children:(0,t.jsx)(P,{ref:r,...s})})}),P=r.forwardRef((e,n)=>{let{__scopeScrollArea:s,style:l,...o}=e,c=f(T,s),d=R(T,s),{onThumbPositionChange:h}=d,m=(0,i.useComposedRefs)(n,e=>d.onThumbChange(e)),p=r.useRef(void 0),x=H(()=>{p.current&&(p.current(),p.current=void 0)},100);return r.useEffect(()=>{let e=c.viewport;if(e){let t=()=>{x(),p.current||(p.current=$(e,h),h())};return h(),e.addEventListener("scroll",t),()=>e.removeEventListener("scroll",t)}},[c.viewport,x,h]),(0,t.jsx)(a.Primitive.div,{"data-state":d.hasThumb?"visible":"hidden",...o,ref:m,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...l},onPointerDownCapture:(0,u.composeEventHandlers)(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),r=e.clientX-t.left,a=e.clientY-t.top;d.onThumbPointerDown({x:r,y:a})}),onPointerUp:(0,u.composeEventHandlers)(e.onPointerUp,d.onThumbPointerUp)})});D.displayName=T;var M="ScrollAreaCorner",L=r.forwardRef((e,r)=>{let a=f(M,e.__scopeScrollArea),n=!!(a.scrollbarX&&a.scrollbarY);return"scroll"!==a.type&&n?(0,t.jsx)(F,{...e,ref:r}):null});L.displayName=M;var F=r.forwardRef((e,n)=>{let{__scopeScrollArea:s,...i}=e,l=f(M,s),[o,c]=r.useState(0),[d,u]=r.useState(0),h=!!(o&&d);return U(l.scrollbarX,()=>{let e=l.scrollbarX?.offsetHeight||0;l.onCornerHeightChange(e),u(e)}),U(l.scrollbarY,()=>{let e=l.scrollbarY?.offsetWidth||0;l.onCornerWidthChange(e),c(e)}),h?(0,t.jsx)(a.Primitive.div,{...i,ref:n,style:{width:o,height:d,position:"absolute",right:"ltr"===l.dir?0:void 0,left:"rtl"===l.dir?0:void 0,bottom:0,...e.style}}):null});function O(e){return e?parseInt(e,10):0}function _(e,t){let r=e/t;return isNaN(r)?0:r}function B(e){let t=_(e.viewport,e.content),r=e.scrollbar.paddingStart+e.scrollbar.paddingEnd;return Math.max((e.scrollbar.size-r)*t,18)}function q(e,t,r="ltr"){let a=B(t),n=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,s=t.scrollbar.size-n,i=t.content-t.viewport,l=(0,d.clamp)(e,"ltr"===r?[0,i]:[-1*i,0]);return z([0,i],[0,s-a])(l)}function z(e,t){return r=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let a=(t[1]-t[0])/(e[1]-e[0]);return t[0]+a*(r-e[0])}}var $=(e,t=()=>{})=>{let r={left:e.scrollLeft,top:e.scrollTop},a=0;return!function n(){let s={left:e.scrollLeft,top:e.scrollTop},i=r.left!==s.left,l=r.top!==s.top;(i||l)&&t(),r=s,a=window.requestAnimationFrame(n)}(),()=>window.cancelAnimationFrame(a)};function H(e,t){let a=(0,l.useCallbackRef)(e),n=r.useRef(0);return r.useEffect(()=>()=>window.clearTimeout(n.current),[]),r.useCallback(()=>{window.clearTimeout(n.current),n.current=window.setTimeout(a,t)},[a,t])}function U(e,t){let r=(0,l.useCallbackRef)(t);(0,c.useLayoutEffect)(()=>{let t=0;if(e){let a=new ResizeObserver(()=>{cancelAnimationFrame(t),t=window.requestAnimationFrame(r)});return a.observe(e),()=>{window.cancelAnimationFrame(t),a.unobserve(e)}}},[e,r])}var W=e.i(81471);let G=(0,r.forwardRef)(({className:e,children:r,...a},n)=>(0,t.jsxs)(g,{className:(0,W.cn)("relative overflow-hidden",e),...a,children:[(0,t.jsx)(v,{ref:n,className:"h-full w-full rounded-[inherit]",children:r}),(0,t.jsx)(w,{orientation:"vertical",className:"flex h-full w-2.5 touch-none select-none border-l border-l-transparent p-[1px] transition-colors",children:(0,t.jsx)(D,{className:"relative flex-1 rounded-full bg-border"})}),(0,t.jsx)(w,{orientation:"horizontal",className:"flex h-2.5 w-full flex-col touch-none select-none border-t border-t-transparent p-[1px] transition-colors",children:(0,t.jsx)(D,{className:"relative flex-1 rounded-full bg-border"})}),(0,t.jsx)(L,{})]}));G.displayName="ScrollArea",e.s(["ScrollArea",0,G],13707)},36413,e=>{"use strict";var t=e.i(34416);let r=(0,t.createContext)(null);e.s(["DirtyFieldsProvider",0,function({children:e}){let[a,n]=(0,t.useState)(()=>new Map),[s,i]=(0,t.useState)(0),l=(0,t.useCallback)((e,t,r)=>{n(a=>{if(void 0!==r&&(t===r||Array.isArray(t)&&Array.isArray(r)&&t.length===r.length&&t.every((e,t)=>e===r[t]))){if(!a.has(e))return a;let t=new Map(a);return t.delete(e),t}let n=new Map(a);return n.set(e,t),n})},[]),o=(0,t.useCallback)(e=>{n(t=>{if(!t.has(e))return t;let r=new Map(t);return r.delete(e),r})},[]),c=(0,t.useCallback)(e=>{0!==e.length&&n(t=>{if(!e.some(e=>t.has(e)))return t;let r=new Map(t);for(let t of e)r.delete(t);return r})},[]),d=(0,t.useCallback)(()=>{n(new Map),i(e=>e+1)},[]),u=a.size>0,h=a.size,m=(0,t.useMemo)(()=>({dirtyFields:a,setDirty:l,clearDirty:o,clearDirtyKeys:c,discardAll:d,discardGeneration:s,isDirty:u,dirtyCount:h}),[a,l,o,c,d,s,u,h]);return(0,t.createElement)(r.Provider,{value:m},e)},"useDirtyFields",0,function(){let e=(0,t.useContext)(r);if(!e)throw Error("useDirtyFields must be used inside DirtyFieldsProvider");let{setDirty:a,dirtyFields:n}=e,s=(0,t.useCallback)(e=>async(t,r)=>{let n=e[t];a(t,r,n)},[a]),i=(0,t.useCallback)((e,t)=>n.has(e)?n.get(e):t,[n]);return{...e,deferSaveFor:s,dv:i}},"useDiscardGeneration",0,function(){let e=(0,t.useContext)(r);return e?.discardGeneration??0}])},28444,e=>{"use strict";e.s(["RESTART_REQUIRED_KEY_TUPLE",0,["apiPort","externalObsidianVaultName","externalObsidianVaultPath","externalObsidianWatch","primaryVaultPath","primaryVaultName","slackOwnerUserId","telegramOwnerChatId","discordOwnerUserId","whatsappEnabled","whatsappOwnerPhone","whatsappAuthDir","notionDatabaseIds","gmailPollIntervalSeconds","delegatedProbeIntervalMinutes","gitPollIntervalSeconds","githubPollIntervalSeconds","voiceTranscriptionEnabled","observationSummarizerEnabled","observationSummarizerConcurrency","observationSummarizerMaxCallsPerMinute","observationSummarizerQueueLimit","observationSummarizerTimeoutMs"]])},74490,e=>{"use strict";var t=e.i(54710),r=e.i(81471);let a=(0,e.i(94237).cva)("rounded-xl border p-5 shadow-[0_1px_3px_rgb(0_0_0/0.04)]",{variants:{tone:{default:"border-border bg-card",warning:"border-amber-200 bg-amber-50/50 dark:border-amber-900 dark:bg-amber-950/30",success:"border-emerald-200 bg-emerald-50/50 dark:border-emerald-900 dark:bg-emerald-950/30",error:"border-red-200 bg-red-50/50 dark:border-red-900 dark:bg-red-950/30"},interactive:{true:"transition-shadow duration-150 hover:shadow-[0_4px_6px_rgb(0_0_0/0.06)]",false:""}},defaultVariants:{tone:"default",interactive:!1}});e.s(["Card",0,function({className:e,tone:n,interactive:s,...i}){return(0,t.jsx)("div",{className:(0,r.cn)(a({tone:n,interactive:s}),e),...i})},"CardHeader",0,function({className:e,...a}){return(0,t.jsx)("div",{className:(0,r.cn)("mb-3 flex items-center justify-between",e),...a})},"CardStatLabel",0,function({className:e,...a}){return(0,t.jsx)("h3",{className:(0,r.cn)("text-sm font-medium text-muted-foreground",e),...a})},"CardTitle",0,function({className:e,...a}){return(0,t.jsx)("h3",{className:(0,r.cn)("text-lg font-semibold text-foreground",e),...a})},"CardValue",0,function({className:e,...a}){return(0,t.jsx)("div",{className:(0,r.cn)("text-3xl font-bold text-foreground",e),...a})}])},90925,e=>{"use strict";let t=(0,e.i(77379).default)("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);e.s(["Trash2",0,t],90925)},60168,e=>{"use strict";let t=(0,e.i(77379).default)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["Plus",0,t],60168)},99758,e=>{"use strict";let t=(0,e.i(77379).default)("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);e.s(["Check",0,t],99758)},21682,e=>{"use strict";let t=(0,e.i(77379).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"}]]);e.s(["Pencil",0,t],21682)},55575,e=>{"use strict";let t=(0,e.i(77379).default)("FolderOpen",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);e.s(["FolderOpen",0,t],55575)},66127,e=>{"use strict";var t=e.i(65268);async function r({title:e,defaultPath:a}){let n=await t.api.post("/system/pick-directory",{title:e,...a?{defaultPath:a}:{}});if("selected"===n.status&&n.path)return n.path;if("cancelled"===n.status)return null;throw Error(n.message??"Folder picker is unavailable.")}e.s(["pickDirectoryFromDesktop",0,r])},25795,e=>{"use strict";let t=(0,e.i(77379).default)("RotateCcw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);e.s(["RotateCcw",0,t],25795)},82239,e=>{"use strict";var t=e.i(54710),r=e.i(25795),a=e.i(10628);e.s(["RestartRequiredBadge",0,function(){return(0,t.jsxs)(a.Tooltip,{children:[(0,t.jsx)(a.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded-sm bg-amber-100 px-1 py-0.5 text-[10px] font-medium text-amber-700 dark:bg-amber-900/40 dark:text-amber-300",children:[(0,t.jsx)(r.RotateCcw,{className:"h-2.5 w-2.5"}),"restart"]})}),(0,t.jsx)(a.TooltipContent,{side:"top",className:"max-w-[220px] text-xs",children:"Changing this value requires a daemon restart to take effect."})]})}])},49681,e=>{"use strict";var t=e.i(54710),r=e.i(7771),a=e.i(95486),n=e.i(8011),s=e.i(10628),i=e.i(81471);e.s(["DocsHelpInline",0,function({docId:e,anchor:l=null,label:o,className:c}){let d=(0,a.useQueryClient)(),u=o??"Help";return(0,t.jsx)(s.TooltipProvider,{delayDuration:300,children:(0,t.jsxs)(s.Tooltip,{children:[(0,t.jsx)(s.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",onClick:t=>{t.preventDefault(),t.stopPropagation(),(0,n.openDocsHelpSlideover)(d,{docId:e,anchor:l,autoFocusComposer:!1})},className:(0,i.cn)("inline-flex h-5 w-5 items-center justify-center rounded-full text-muted-foreground/70 transition hover:bg-accent hover:text-foreground",c),"aria-label":`Open help — ${u}`,"data-testid":"docs-help-inline",children:(0,t.jsx)(r.HelpCircle,{className:"h-3.5 w-3.5","aria-hidden":"true"})})}),(0,t.jsx)(s.TooltipContent,{side:"top",children:(0,t.jsx)("span",{children:u})})]})})}])},88,e=>{"use strict";var t=e.i(54710),r=e.i(34416),a=e.i(99758),n=e.i(55575),s=e.i(21682),i=e.i(60168),l=e.i(25795),o=e.i(90925),c=e.i(36451);e.i(18446);var d=e.i(28444),u=e.i(48467),h=e.i(20014),m=e.i(74490),p=e.i(8652),x=e.i(82239),f=e.i(49681),g=e.i(66127),b=e.i(36413);let v=new Set(d.RESTART_REQUIRED_KEY_TUPLE);function y(e){return null===e?"":String(e)}e.s(["ConfigSection",0,function({title:e,children:r,helpDocId:a,helpAnchor:n}){return(0,t.jsxs)(m.Card,{children:[(0,t.jsx)(m.CardHeader,{children:(0,t.jsxs)(m.CardTitle,{className:"flex items-center gap-1.5",children:[(0,t.jsx)("span",{children:e}),a&&(0,t.jsx)(f.DocsHelpInline,{docId:a,anchor:n??null,label:e})]})}),(0,t.jsx)("div",{className:"space-y-0.5 [&>p]:max-w-prose",children:r})]})},"EditableArrayField",0,function({label:e,values:a,configKey:s,variant:l="gray",placeholder:o="Add item...",directoryPicker:d,modified:m,onSave:f}){let b=v.has(s),[y,w]=(0,r.useState)(""),[j,k]=(0,r.useState)(!1),[C,N]=(0,r.useState)(null),S=async()=>{let e=y.trim();if(!(!e||a.includes(e))){k(!0),N(null);try{await f(s,[...a,e]),w("")}catch{}finally{k(!1)}}},E=async e=>{k(!0);try{await f(s,a.filter(t=>t!==e))}finally{k(!1)}},A=async()=>{if(d){k(!0),N(null);try{let e=await (0,g.pickDirectoryFromDesktop)({title:d.title,defaultPath:y.trim()||d.defaultPath});if(!e)return;if(a.includes(e)){w(e),N("That directory is already in the list.");return}await f(s,[...a,e]),w("")}catch(e){N(e instanceof Error?e.message:"Folder picker is unavailable.")}finally{k(!1)}}};return(0,t.jsxs)("div",{className:`py-2${m?" border-l-2 border-blue-500 pl-2 -ml-1 rounded":""}`,"data-config-key":s,children:[(0,t.jsxs)("p",{className:"text-sm text-muted-foreground mb-2 inline-flex items-center gap-1.5",children:[e,b&&(0,t.jsx)(x.RestartRequiredBadge,{}),m&&(0,t.jsx)("span",{className:"text-[10px] font-medium text-blue-600 dark:text-blue-400",children:"modified"})]}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-1.5 mb-2",children:[a.map(e=>(0,t.jsxs)(u.Badge,{variant:l,className:"gap-1 pr-1",children:[e,(0,t.jsx)("button",{onClick:()=>E(e),disabled:j,className:"ml-0.5 rounded-sm hover:bg-black/10 dark:hover:bg-white/10 p-0.5 transition-colors",children:(0,t.jsx)(c.X,{className:"h-3 w-3"})})]},e)),0===a.length&&(0,t.jsx)("span",{className:"text-xs text-muted-foreground italic",children:"No items"})]}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(p.Input,{value:y,onChange:e=>w(e.target.value),onKeyDown:e=>{"Enter"===e.key&&S()},placeholder:o,className:"max-w-[320px]",disabled:j}),d&&(0,t.jsxs)(h.Button,{size:"sm",variant:"outline",onClick:A,disabled:j,children:[(0,t.jsx)(n.FolderOpen,{className:"h-3.5 w-3.5 mr-1"}),d.buttonLabel??"Choose"]}),(0,t.jsxs)(h.Button,{size:"sm",variant:"outline",onClick:S,disabled:!y.trim()||j,children:[(0,t.jsx)(i.Plus,{className:"h-3.5 w-3.5 mr-1"}),"Add"]})]}),C&&(0,t.jsx)("p",{className:"mt-1 text-xs text-destructive",children:C})]})},"EditableBooleanField",0,function({label:e,value:a,configKey:n,description:s,modified:i,defaultValue:o,onSave:c}){let[d,u]=(0,r.useState)(!1),m=v.has(n),p=void 0!==o&&a===o,f=async()=>{u(!0);try{await c(n,!a)}finally{u(!1)}},g=async()=>{if(void 0!==o){u(!0);try{await c(n,o)}finally{u(!1)}}};return(0,t.jsx)("div",{className:`py-1.5 group${i?" border-l-2 border-blue-500 pl-2 -ml-1 rounded":""}`,"data-config-key":n,children:(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("p",{className:"text-sm text-muted-foreground inline-flex items-center gap-1.5",children:[e,m&&(0,t.jsx)(x.RestartRequiredBadge,{}),i&&(0,t.jsx)("span",{className:"text-[10px] font-medium text-blue-600 dark:text-blue-400",children:"modified"}),void 0!==o&&!p&&!i&&(0,t.jsxs)("button",{type:"button",onClick:g,className:"text-[10px] text-muted-foreground hover:text-foreground transition-colors inline-flex items-center gap-0.5 opacity-0 group-hover:opacity-100",children:[(0,t.jsx)(l.RotateCcw,{className:"h-2.5 w-2.5"}),"reset"]})]}),s&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:s})]}),(0,t.jsx)(h.Button,{variant:a?"default":"outline",size:"sm",onClick:f,disabled:d,children:a?"Enabled":"Disabled"})]})})},"EditableField",0,function({label:e,value:n,configKey:i,type:d="text",suffix:u,description:m,min:f,max:g,nullable:w=!1,emptyLabel:j="Not set",modified:k,defaultValue:C,onSave:N}){let S=v.has(i),[E,A]=(0,r.useState)(!1),[R,I]=(0,r.useState)(y(n)),[T,D]=(0,r.useState)(!1),[P,M]=(0,r.useState)(null),L=(0,r.useRef)(null),F=(0,b.useDiscardGeneration)(),O=(0,r.useRef)(F);(0,r.useEffect)(()=>{F!==O.current&&(O.current=F,A(!1),M(null))},[F]),(0,r.useEffect)(()=>{E&&L.current?.focus()},[E]),(0,r.useEffect)(()=>{E||I(y(n))},[n,E]);let _=void 0!==C&&n===C,B=async e=>{if(e.stopPropagation(),void 0!==C){D(!0);try{await N(i,C)}finally{D(!1)}}},q=async e=>{e.stopPropagation(),D(!0);try{await N(i,null)}finally{D(!1)}},z=async()=>{let e=R.trim(),t=w&&""===e?null:"number"===d?Number(R):R;if(t===n)return void A(!1);if(null!==t&&"number"===d&&(void 0!==f||void 0!==g)&&(void 0!==f&&t<f||void 0!==g&&t>g))return void M(`Must be ${f??""}–${g??""}`);M(null),D(!0);try{await N(i,t),A(!1)}catch{}finally{D(!1)}};return E?(0,t.jsxs)("div",{className:"py-1.5","data-config-key":i,children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)("span",{className:"text-sm text-muted-foreground shrink-0 min-w-[140px] inline-flex items-center gap-1.5",children:[e,S&&(0,t.jsx)(x.RestartRequiredBadge,{})]}),(0,t.jsx)(p.Input,{ref:L,type:d,value:R,onChange:e=>{I(e.target.value),M(null)},onKeyDown:e=>{"Enter"===e.key&&z(),"Escape"===e.key&&(I(y(n)),A(!1))},className:"max-w-[240px]",disabled:T,min:f,max:g}),u&&(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:u}),(0,t.jsx)(h.Button,{size:"sm",variant:"ghost",onClick:z,disabled:T,className:"h-7 w-7 p-0",children:(0,t.jsx)(a.Check,{className:"h-3.5 w-3.5"})}),(0,t.jsx)(h.Button,{size:"sm",variant:"ghost",onClick:()=>{I(y(n)),M(null),A(!1)},className:"h-7 w-7 p-0",children:(0,t.jsx)(c.X,{className:"h-3.5 w-3.5"})})]}),P&&(0,t.jsx)("p",{className:"text-xs text-destructive mt-1 ml-[148px]",children:P}),m&&!P&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground mt-1 ml-[148px]",children:m})]}):(0,t.jsxs)("div",{className:`py-1.5 group cursor-pointer rounded px-1 -mx-1 hover:bg-muted/50 transition-colors${k?" border-l-2 border-blue-500 pl-2":""}`,"data-config-key":i,onClick:()=>A(!0),children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("span",{className:"text-sm text-muted-foreground inline-flex items-center gap-1.5",children:[e,S&&(0,t.jsx)(x.RestartRequiredBadge,{})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[k&&(0,t.jsx)("span",{className:"text-[10px] font-medium text-blue-600 dark:text-blue-400",children:"modified"}),void 0!==C&&!_&&!k&&(0,t.jsxs)("button",{type:"button",onClick:B,className:"text-[10px] text-muted-foreground hover:text-foreground transition-colors inline-flex items-center gap-0.5 opacity-0 group-hover:opacity-100",children:[(0,t.jsx)(l.RotateCcw,{className:"h-2.5 w-2.5"}),"reset"]}),w&&null!==n&&!k&&(0,t.jsxs)("button",{type:"button",onClick:q,title:`Clear — sets ${e} to ${j}`,className:"text-[10px] text-muted-foreground hover:text-destructive transition-colors inline-flex items-center gap-0.5 opacity-0 group-hover:opacity-100",children:[(0,t.jsx)(o.Trash2,{className:"h-2.5 w-2.5"}),"clear"]}),(0,t.jsx)("span",{className:"text-sm font-medium text-foreground",children:null===n?j:"$"===u?`$${n}`:u?`${n} ${u}`:String(n)}),(0,t.jsx)(s.Pencil,{className:"h-3 w-3 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity"})]})]}),m&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:m})]})}])},12077,e=>{"use strict";let t=(0,e.i(77379).default)("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]);e.s(["Terminal",0,t],12077)},13451,e=>{"use strict";var t=e.i(34416),r=e.i(95486),a=e.i(65268);e.s(["useSaveConfig",0,function(){let e=(0,r.useQueryClient)(),[n,s]=(0,t.useState)(null),i=(0,t.useCallback)((e,t)=>{s({type:e,message:t}),setTimeout(()=>s(null),4e3)},[]),l=(0,t.useCallback)((e,t)=>{let r=Object.values(e.errors??{});r.length>0?i("warning",r.join(" ")):e.requiresRestart?.length>0?i("warning",`Updated. Restart daemon for: ${e.requiresRestart.join(", ")}`):i("success",t)},[i]),o=(0,t.useCallback)(async(t,r)=>{try{let n=await a.api.patch("/config",{[t]:r});e.invalidateQueries({queryKey:["config"]}),l(n,"Setting updated")}catch(e){throw i("error",`Failed to save: ${e instanceof Error?e.message:"Unknown error"}`),e}},[e,l,i]),c=(0,t.useCallback)(async t=>{try{let r=await a.api.patch("/config",t);e.invalidateQueries({queryKey:["config"]}),l(r,"Settings updated")}catch(e){throw i("error",`Failed to save: ${e instanceof Error?e.message:"Unknown error"}`),e}},[e,l,i]);return{toast:n,showToast:i,saveField:o,saveMultipleFields:c,patchConfig:(0,t.useCallback)(async t=>{let r=await a.api.patch("/config",t);return e.invalidateQueries({queryKey:["config"]}),r},[e])}}])},76610,e=>{"use strict";let t=(0,e.i(77379).default)("KeyRound",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);e.s(["KeyRound",0,t],76610)},78927,e=>{"use strict";let t=(0,e.i(77379).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"}]]);e.s(["Upload",0,t],78927)},73550,e=>{"use strict";let t=(0,e.i(77379).default)("Hash",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]]);e.s(["Hash",0,t],73550)},89883,e=>{"use strict";let t=(0,e.i(77379).default)("Mail",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}]]);e.s(["Mail",0,t],89883)},88175,e=>{"use strict";let t=(0,e.i(77379).default)("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);e.s(["Download",0,t],88175)},20870,e=>{"use strict";var t=e.i(54710),r=e.i(48467),a=e.i(74490),n=e.i(81471);let s={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"}};e.s(["ConnectionCard",0,function({name:e,icon:i,status:l,error:o,metadata:c,children:d,className:u}){let h=s[l];return(0,t.jsxs)(a.Card,{tone:"connected"===l?"success":"error"===l?"error":"default",className:(0,n.cn)("relative",u),children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-muted-foreground",children:i}),(0,t.jsx)("h3",{className:"text-sm font-medium text-foreground",children:e})]}),(0,t.jsx)(r.Badge,{variant:h.variant,children:h.label})]}),o&&"connecting"!==l&&(0,t.jsx)("p",{className:"mb-2 text-xs text-red-600 dark:text-red-400",children:o}),c&&c.length>0&&(0,t.jsx)("div",{className:"mb-3 space-y-0.5",children:c.map(e=>(0,t.jsxs)("div",{className:"flex items-center justify-between text-xs",children:[(0,t.jsx)("span",{className:"text-muted-foreground",children:e.label}),(0,t.jsx)("span",{className:"text-foreground",children:e.value})]},e.label))}),d]})},"deriveConfiguredStatus",0,function(e){return e?"configured":"needs-setup"},"deriveIntegrationStatus",0,function(e){return e&&e.configured?e.error?"error":e.connected?"connected":"configured":"needs-setup"},"deriveMessagingStatus",0,function(e){return e&&"not_configured"!==e.runtimeState?"connecting"===e.runtimeState?"connecting":"error"===e.runtimeState?"error":"ok"===e.runtimeState?"connected":"configured":"needs-setup"},"messagingMetadata",0,function(e){if(e)return[{label:"Owner configured",value:e.ownerConfigured?"yes":"no"},{label:"Owner channel known",value:e.ownerChannelKnown?"yes":"no"},{label:"Reminder eligible",value:e.notificationEligible?"yes":"no"},{label:"Last inbound",value:e.lastInboundAt??"—"}]}])},40974,e=>{"use strict";let t=(0,e.i(77379).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"}]]);e.s(["Lock",0,t],40974)},67490,e=>{"use strict";var t=e.i(14260),r=e.i(57415),a=e.i(95486),n=e.i(65268);e.s(["useIntegrationProbeLive",0,function(){let e=(0,a.useQueryClient)();return(0,r.useMutation)({mutationFn:e=>{let{key:t}=e,r={};return"liveProbe"in e?(r.liveProbe=!0,e.backend&&(r.backend=e.backend)):(r.backend=e.backend,r.tools=e.tools),n.api.post(`/integrations/${t}/probe`,r)},onSuccess:(t,r)=>{e.invalidateQueries({queryKey:["integration-probe",r.key]}),e.invalidateQueries({queryKey:["health"]})}})},"useIntegrations",0,function(){return(0,t.useQuery)({queryKey:["integrations"],queryFn:()=>n.api.get("/integrations"),staleTime:3e4})},"useNativeUnboundActions",0,function(e={}){let r=e.sinceHours??168;return(0,t.useQuery)({queryKey:["agent-actions","native_unbound",r],queryFn:async()=>{let e=new URLSearchParams({since:new Date(Date.now()-60*r*6e4).toISOString(),limit:"50"});e.append("kind","integration.native_unbound");let t=await n.api.get(`/agent/actions?${e.toString()}`),a=[];for(let e of t.actions)if(e.detail)try{let t=JSON.parse(e.detail);if("string"!=typeof t.key)continue;a.push({id:e.id,key:t.key,priorNativeBackend:t.priorNativeBackend??null,newMainBackend:t.newMainBackend??null,priorDeniedTools:t.priorDeniedTools??[],startedAt:e.startedAt})}catch{continue}return a},staleTime:6e4})},"usePatchIntegration",0,function(){let e=(0,a.useQueryClient)();return(0,r.useMutation)({mutationFn:({key:e,body:t})=>n.api.patch(`/integrations/${e}`,t),onSuccess:()=>{e.invalidateQueries({queryKey:["integrations"]}),e.invalidateQueries({queryKey:["health"]})}})},"useProxyModels",0,function(e){return(0,t.useQuery)({queryKey:["proxy-models",e??null],queryFn:()=>n.api.get(`/integrations/proxy-models/${e}`),enabled:null!=e,staleTime:6e4})},"useRecentProxyCalls",0,function(e,r={}){let{limit:a,enabled:s=!0}=r;return(0,t.useQuery)({queryKey:["recent-proxy-calls",e,a??null],queryFn:()=>{let t=void 0!==a?`?limit=${a}`:"";return n.api.get(`/integrations/${e}/recent-proxy-calls${t}`)},enabled:s&&null!==e,staleTime:1e4})}])},18518,e=>{"use strict";let t=(0,e.i(77379).default)("ClipboardCopy",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2",key:"4jdomd"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v4",key:"3hqy98"}],["path",{d:"M21 14H11",key:"1bme5i"}],["path",{d:"m15 10-4 4 4 4",key:"5dvupr"}]]);e.s(["ClipboardCopy",0,t],18518)},62452,64387,58692,e=>{"use strict";let t=(0,e.i(77379).default)("FolderSymlink",[["path",{d:"M2 9V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h7",key:"x1c07l"}],["path",{d:"m8 16 3-3-3-3",key:"rlqrt1"}]]);function r(e){return/^[A-Za-z]:[\\/]/.test(e)||/^\\\\/.test(e)||/^\/\/[^/]+\/[^/]+/.test(e)||e.includes("\\")}function a(e,t){let r=e.trim().replace(/[\\/]+$/g,"");return t&&(r=r.replace(/[\\/]+/g,"/").toLowerCase()),r}e.s(["FolderSymlink",0,t],62452),e.s(["hasPathTraversalSegment",0,function(e){return e.trim().split(/[\\/]+/).some(e=>".."===e)},"isClientAbsolutePath",0,function(e){let t=e.trim();return t.startsWith("/")||t.startsWith("~/")||t.startsWith("~\\")||/^[A-Za-z]:[\\/]/.test(t)||/^\\\\[^\\/]+[\\/][^\\/]+/.test(t)||/^\/\/[^/]+\/[^/]+/.test(t)},"isClientPathInsideOrEqual",0,function(e,t){if(0===e.trim().length||0===t.trim().length)return!1;let n=r(e)||r(t),s=a(e,n),i=a(t,n);return i===s||i.startsWith(`${s}/`)}],64387);var n=e.i(54710),s=e.i(81471);e.s(["CHARACTER_MAX_LENGTH",0,1e3,"CharacterEditor",0,function({value:e,onChange:t,disabled:r=!1,placeholder:a,rows:i=6}){let l=e.length,o=l>1e3,c=1e3===l;return(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsx)("textarea",{"data-testid":"character-editor-textarea",className:"w-full rounded border border-input bg-background p-3 text-sm font-mono resize-y focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",style:{minHeight:`${24*i}px`},value:e,onChange:e=>t(e.target.value),disabled:r,placeholder:a??"How should the agent talk to you? E.g. 'Speak casually. Tight bullets, no emoji. Use plain language for technical terms.'"}),(0,n.jsx)("div",{className:"flex justify-end",children:(0,n.jsxs)("span",{"data-testid":"character-editor-counter","aria-live":"polite",className:(0,s.cn)("text-xs tabular-nums",o?"font-semibold text-destructive":c?"text-amber-600":"text-muted-foreground"),children:[l,"/",1e3]})})]})},"isCharacterOverCap",0,function(e){return e.length>1e3}],58692)},85090,e=>{"use strict";var t=e.i(54710),r=e.i(34416),a=e.i(95486),n=e.i(88423),s=e.i(75187),i=e.i(13451),l=e.i(65268),o=e.i(20014),c=e.i(79634),d=e.i(70986),u=e.i(16047),h=e.i(78927),m=e.i(59546),p=e.i(52387),x=e.i(81471),f=e.i(88),g=e.i(20870);function b({label:e,accept:a,onUpload:n,configured:s}){let[i,l]=(0,r.useState)(!1),[d,u]=(0,r.useState)(null),p=(0,r.useRef)(null),x=(0,r.useCallback)(async e=>{l(!0),u(null);try{await n(e),u({type:"success",fileName:e.name})}catch(e){u({type:"error",message:e instanceof Error?e.message:"Upload failed"})}finally{l(!1)}},[n]);return(0,t.jsxs)("div",{className:"space-y-1.5",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("input",{ref:p,type:"file",accept:a,className:"hidden",onChange:e=>{let t=e.target.files?.[0];t&&x(t),e.target.value=""}}),(0,t.jsxs)(o.Button,{size:"sm",variant:s?"outline":"default",onClick:()=>p.current?.click(),disabled:i,className:"text-xs",children:[(0,t.jsx)(h.Upload,{className:"h-3.5 w-3.5 mr-1"}),i?"Uploading...":e]}),s&&(0,t.jsx)(m.CheckCircle2,{className:"h-4 w-4 text-emerald-500"})]}),d&&(0,t.jsx)(c.Alert,{variant:"success"===d.type?"success":"error",children:"success"===d.type?(0,t.jsxs)("span",{className:"block break-all",title:d.fileName,children:[function(e,t=36){if(e.length<=t)return e;let r=Math.floor((t-1)/2);return`${e.slice(0,t-1-r)}…${e.slice(-r)}`}(d.fileName)," uploaded"]}):(0,t.jsx)("span",{className:"block break-all",children:d.message})})]})}function v(){return(0,t.jsxs)("svg",{className:"h-4 w-4",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,t.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,t.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,t.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,t.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"})]})}e.s(["GoogleCard",0,function(){let{data:e}=(0,n.useConfig)(),{data:h}=(0,s.useHealth)(),{toast:y,saveField:w}=(0,i.useSaveConfig)(),j=(0,a.useQueryClient)(),k=h?.integrations?.google,[C,N]=(0,r.useState)(!1),[S,E]=(0,r.useState)(null),A=(0,r.useRef)(null),R=e?.googleCalendarCredentialsConfigured??!1,I=e?.googleCalendarTokenConfigured??!1,T=e?.googleCredentialType==="service_account",D=async e=>{await l.api.upload("/config/upload/google-credentials",e),j.invalidateQueries({queryKey:["config"]}),j.invalidateQueries({queryKey:["health"]})};(0,r.useEffect)(()=>()=>{A.current&&clearInterval(A.current)},[]),(0,r.useEffect)(()=>{let e=e=>{e.origin.startsWith("http://localhost")&&e.data?.type==="google-auth-success"&&(A.current&&(clearInterval(A.current),A.current=null),N(!1),j.invalidateQueries({queryKey:["config"]}),j.invalidateQueries({queryKey:["health"]}))};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)},[j]);let P=async()=>{N(!0),E(null);try{let e=await l.api.post("/config/google-auth/start"),t=window.open(e.authUrl,"google-auth","width=600,height=700");if(!t){E("Popup blocked. Allow popups for this site and try again."),N(!1);return}A.current=setInterval(()=>{t.closed&&(A.current&&(clearInterval(A.current),A.current=null),N(!1),j.invalidateQueries({queryKey:["config"]}),j.invalidateQueries({queryKey:["health"]}))},1e3)}catch(e){E(e instanceof Error?e.message:"Failed to start authorization"),N(!1)}};if(!e||!h)return null;let M=k?.services?.calendar,L=k?.services?.gmail,F=C?"connecting":(0,g.deriveIntegrationStatus)(k);return(0,t.jsxs)(g.ConnectionCard,{name:"Google",icon:(0,t.jsx)(v,{}),status:F,error:k?.error,children:[k?.configured&&(0,t.jsxs)("div",{className:"flex gap-4 mb-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-xs",children:[(0,t.jsx)("span",{className:(0,x.cn)("inline-block h-2 w-2 rounded-full",M?.connected?"bg-emerald-500":"bg-gray-300 dark:bg-gray-600")}),(0,t.jsx)("span",{className:"text-muted-foreground",children:"Calendar"}),(0,t.jsx)("span",{className:M?.connected?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground",children:M?.connected?"Active":"Inactive"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-xs",children:[(0,t.jsx)("span",{className:(0,x.cn)("inline-block h-2 w-2 rounded-full",L?.connected?"bg-emerald-500":"bg-gray-300 dark:bg-gray-600")}),(0,t.jsx)("span",{className:"text-muted-foreground",children:"Gmail"}),(0,t.jsx)("span",{className:L?.connected?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground",children:L?.connected?"Active":"Not yet implemented"})]})]}),(0,t.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"1. Upload credentials"}),(0,t.jsx)(b,{label:"Credentials JSON",accept:".json,application/json",onUpload:D,configured:R})]}),!T&&(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"2. Authorize"}),(0,t.jsxs)(o.Button,{size:"sm",variant:I?"outline":"default",onClick:P,disabled:!R||C,className:"text-xs",children:[(0,t.jsx)(p.ExternalLink,{className:"h-3.5 w-3.5 mr-1"}),C?"Waiting...":I?"Re-authorize":"Authorize with Google"]}),I&&(0,t.jsx)(m.CheckCircle2,{className:"inline-block ml-2 h-4 w-4 text-emerald-500"}),S&&(0,t.jsx)(c.Alert,{variant:"error",className:"mt-1",children:S}),!R&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground mt-1",children:"Upload credentials first"})]})]}),!k?.connected&&R&&(T||I)&&(0,t.jsxs)(c.Alert,{variant:"warning",className:"mt-3",children:[T?"Service account configured.":"Authorized."," Restart the daemon to connect."]}),(0,t.jsxs)(d.Collapsible,{children:[(0,t.jsxs)(d.CollapsibleTrigger,{className:"flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground mt-3",children:["Advanced setup notes ",(0,t.jsx)(u.ChevronDown,{className:"h-3 w-3"})]}),(0,t.jsx)(d.CollapsibleContent,{children:(0,t.jsxs)("div",{className:"mt-2 rounded bg-muted/50 p-2 space-y-1 text-xs",children:[(0,t.jsx)("p",{className:"font-medium text-muted-foreground",children:"Secrets are stored in the macOS Keychain."}),(0,t.jsx)("p",{className:"text-muted-foreground",children:"Use the upload button above for credentials JSON, then complete OAuth in the browser."}),(0,t.jsx)("p",{className:"text-muted-foreground mt-1",children:"Same credentials are used for Calendar and Gmail (scopes: calendar, gmail.modify, gmail.send)."}),(0,t.jsx)("p",{className:"text-muted-foreground",children:'Calendar ID defaults to "primary" and can be changed below.'})]})})]}),k?.configured&&(0,t.jsxs)("div",{className:"mt-3 pt-3 border-t border-border",children:[y&&(0,t.jsx)(c.Alert,{variant:y.type,className:"mb-2",children:y.message}),(0,t.jsx)(f.EditableField,{label:"Calendar ID",value:e.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:w})]})]})}])},89480,33586,e=>{"use strict";var t=e.i(54710),r=e.i(34416),a=e.i(40807),n=e.i(12878),s=e.i(81471),i=e.i(79634),l=e.i(29086),o=e.i(77379);let c=(0,o.default)("Paperclip",[["path",{d:"M13.234 20.252 21 12.3",key:"1cbrk9"}],["path",{d:"m16 6-8.414 8.586a2 2 0 0 0 0 2.828 2 2 0 0 0 2.828 0l8.414-8.586a4 4 0 0 0 0-5.656 4 4 0 0 0-5.656 0l-8.415 8.585a6 6 0 1 0 8.486 8.486",key:"1pkts6"}]]);e.s(["Paperclip",0,c],33586);let d=(0,o.default)("FileImage",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["circle",{cx:"10",cy:"12",r:"2",key:"737tya"}],["path",{d:"m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22",key:"wt3hpn"}]]),u=(0,o.default)("FileSpreadsheet",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M8 13h2",key:"yr2amv"}],["path",{d:"M14 13h2",key:"un5t4a"}],["path",{d:"M8 17h2",key:"2yhykz"}],["path",{d:"M14 17h2",key:"10kma7"}]]);var h=e.i(52387);function m({mimeType:e,className:r}){return e.startsWith("image/")?(0,t.jsx)(d,{className:r}):"application/pdf"===e?(0,t.jsx)(l.FileText,{className:r}):e.includes("spreadsheet")||"text/csv"===e||e.includes("excel")?(0,t.jsx)(u,{className:r}):(0,t.jsx)(c,{className:r})}function p({id:e,alt:a}){let[n,s]=(0,r.useState)(null),[i,l]=(0,r.useState)(!1);return((0,r.useEffect)(()=>{let t=!1,r=null;return(async()=>{try{let a=await fetch(`/api/chat/attachments/${e}`);if(!a.ok)throw Error(`status ${a.status}`);let n=await a.blob();if(t)return;r=URL.createObjectURL(n),s(r)}catch{t||l(!0)}})(),()=>{t=!0,r&&URL.revokeObjectURL(r)}},[e]),i)?null:n?(0,t.jsx)("img",{src:n,alt:a,className:"max-h-64 max-w-full rounded-md border border-border"}):(0,t.jsx)("div",{className:"flex h-32 w-full max-w-xs items-center justify-center rounded-md border border-border bg-muted/20 text-xs text-muted-foreground",children:"loading…"})}function x({attachment:e,isOwn:r}){var a;let n=`/api/chat/attachments/${e.id}`,i=e.mimeType.startsWith("image/")&&"image/svg+xml"!==e.mimeType&&e.sizeBytes<2097152;return(0,t.jsxs)("div",{className:"space-y-1",children:[i&&(0,t.jsx)(p,{id:e.id,alt:e.originalFilename}),(0,t.jsxs)("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:(0,s.cn)("inline-flex items-center gap-2 rounded-md border px-2 py-1 text-xs hover:bg-muted/40",r?"border-primary-foreground/30 bg-primary-foreground/10 text-primary-foreground":"border-border bg-muted/30 text-foreground"),title:e.caption??e.originalFilename,children:[(0,t.jsx)(m,{mimeType:e.mimeType,className:"h-3 w-3 flex-shrink-0"}),(0,t.jsx)("span",{className:"max-w-[160px] truncate",children:e.originalFilename}),(0,t.jsx)("span",{className:"text-muted-foreground",children:(a=e.sizeBytes)<1024?`${a} B`:a<1048576?`${(a/1024).toFixed(0)} KB`:`${(a/1024/1024).toFixed(1)} MB`}),(0,t.jsx)(h.ExternalLink,{className:"h-3 w-3 flex-shrink-0 opacity-60"})]}),e.caption&&(0,t.jsx)("p",{className:"px-1 text-[10px] text-muted-foreground italic",children:e.caption})]})}function f({attachments:e,isOwn:r}){return 0===e.length?null:(0,t.jsx)("div",{className:"flex flex-col gap-2",children:e.map(e=>(0,t.jsx)(x,{attachment:e,isOwn:r},e.id))})}let g=[n.default],b={a:({children:e,href:r,...a})=>(0,t.jsx)("a",{href:r,target:"_blank",rel:"noopener noreferrer",...a,children:e})},v=(0,r.memo)(function({message:e,assistantLabel:r="Assistant"}){if("error"===e.role)return(0,t.jsx)(i.Alert,{variant:"error",className:"mx-auto max-w-md rounded-lg px-4 py-2 text-sm",children:e.content});let n="user"===e.role;return(0,t.jsx)("div",{className:(0,s.cn)("flex",n?"justify-end":"justify-start"),children:(0,t.jsxs)("div",{className:"max-w-[80%] space-y-1",children:[!n&&(0,t.jsx)("p",{className:"px-1 text-[11px] font-medium text-muted-foreground",children:r}),e.content&&(0,t.jsx)("div",{className:(0,s.cn)("rounded-2xl px-4 py-2.5 text-sm",n?"whitespace-pre-wrap rounded-br-md bg-primary text-primary-foreground [overflow-wrap:anywhere]":"markdown-body markdown-bubble rounded-bl-md border border-border bg-card text-foreground"),children:n?e.content:(0,t.jsx)(a.default,{remarkPlugins:g,components:b,children:e.content})}),e.attachments&&e.attachments.length>0&&(0,t.jsx)("div",{className:"px-1",children:(0,t.jsx)(f,{attachments:e.attachments,isOwn:n})}),!n&&e.meta&&(0,t.jsx)("p",{className:"px-1 text-[10px] text-muted-foreground/60",children:[e.meta.backend&&e.meta.model?`${e.meta.backend} \xb7 ${e.meta.model}`:e.meta.backend||e.meta.model,null!=e.meta.durationMs?`${(e.meta.durationMs/1e3).toFixed(1)}s`:null,null!=e.meta.costUsd?`$${e.meta.costUsd.toFixed(4)}`:null].filter(Boolean).join(" · ")})]})})});e.s(["MessageBubble",0,v],89480)},76,27779,e=>{"use strict";var t=e.i(34416),r=e.i(95486);function a({fetchedMessageCount:e,currentRestoredCount:t,currentLiveCount:r}){return e>0||t+r===0}function n(e){return`${e.role}\u0000${e.content}`}function s(e,t,r){let a=e.slice(-Math.max(t.length+4,4)),s=new Map;for(let e of a){let t=n(e);s.set(t,(s.get(t)??0)+1)}return t.filter(e=>{if("error"===e.role)return!0;if(e.id.startsWith("stream-")||e.timestamp.getTime()<=r)return!1;let t=n(e),a=s.get(t)??0;return!(a>0)||(s.set(t,a-1),!1)})}async function i(e,t){let r,a=t?.fetchImpl??fetch,n=[];for(;;){let s=await a(function(e,t){let r=new URLSearchParams({limit:String(200)});return void 0!==t&&r.set("before",String(t)),`/api/conversations/${e}/messages?${r.toString()}`}(e,r),{signal:t?.signal});if(!s.ok)throw Error(`Failed to load conversation ${e} history`);let i=await s.json();if(0===i.messages.length||(n.push(i.messages),!i.hasMore))break;let l=i.messages[0]?.id;if(!l||l===r)break;r=l}return n.reverse().flat()}e.s(["fetchConversationHistory",0,i],27779);var l=e.i(81471);let o="pa-chat-sessionId";function c(e){try{localStorage.setItem(o,String(e))}catch{}}function d(){try{localStorage.removeItem(o)}catch{}}async function u(e,t){return(await i(e,{signal:t})).filter(e=>"user"===e.role||"assistant"===e.role).map(e=>({id:`restored-${e.id}`,role:e.role,content:e.content,timestamp:(0,l.parseUtcDate)(e.timestamp),...e.attachments&&e.attachments.length>0?{attachments:e.attachments.map(e=>({id:e.id,originalFilename:e.originalFilename,mimeType:e.mimeType,sizeBytes:e.sizeBytes,direction:e.direction,...e.caption?{caption:e.caption}:{}}))}:{}}))}async function h(e){let t=new URLSearchParams({scope:"dashboard_chat",status:"active",limit:"1"}),r=await fetch(`/api/conversations?${t.toString()}`,{signal:e});if(!r.ok)throw Error("Failed to load active dashboard session");let a=await r.json(),n=a.conversations[0]?.id;return"number"==typeof n&&n>0?n:null}e.s(["fetchSessionMessages",0,u,"useChat",0,function({disableHistory:e=!1}={}){let n=(0,r.useQueryClient)(),[i,l]=(0,t.useState)([]),[m,p]=(0,t.useState)(!1),[x,f]=(0,t.useState)(!1),[g,b]=(0,t.useState)([]),[v,y]=(0,t.useState)(null),[w,j]=(0,t.useState)(!1),[k,C]=(0,t.useState)(0),[N,S]=(0,t.useState)([]),E=(0,t.useRef)(""),A=(0,t.useRef)(0),R=(0,t.useRef)(null),I=(0,t.useRef)(null),T=(0,t.useRef)([]),D=(0,t.useRef)([]),P=(0,t.useRef)(null),M=()=>`msg-${++A.current}`,L=(0,t.useCallback)((e,t)=>"string"==typeof e?.message?e.message:"string"==typeof e?.error?e.error:t,[]),F=(0,t.useCallback)(()=>{I.current&&(clearTimeout(I.current),I.current=null)},[]),O=(0,t.useCallback)(()=>{f(!0),F(),I.current=setTimeout(()=>{f(!1)},12e4)},[F]),_=(0,t.useCallback)(()=>{f(!1),F()},[F]),B=(0,t.useCallback)(e=>{"number"==typeof e?.resumeSessionId&&e.resumeSessionId>0?c(e.resumeSessionId):d(),E.current="",T.current=[],D.current=[],P.current=e?.resumeSessionId??null,_(),l([]),S([]),b([]),y(null),p(!1),j(!1),R.current&&(R.current.close(),R.current=null),C(e=>e+1)},[_]);(0,t.useEffect)(()=>{P.current=v?.sessionId??null},[v]),(0,t.useEffect)(()=>{T.current=i},[i]),(0,t.useEffect)(()=>{D.current=N},[N]),(0,t.useEffect)(()=>{let t=e?null:function(){try{let e=localStorage.getItem(o);if(!e)return null;let t=Number(e);return Number.isFinite(t)&&t>0?t:null}catch{return null}}(),r=new AbortController,n=new EventSource(t?`/api/chat/stream?sessionId=${t}`:"/api/chat/stream");R.current=n;let i=0;return e||h(r.signal).then(e=>{if(!e)return void d();c(e);let t=Date.now();return u(e,r.signal).then(e=>{a({fetchedMessageCount:e.length,currentRestoredCount:D.current.length,currentLiveCount:T.current.length})&&(S(e),l(r=>s(e,r,t)))})}).catch(()=>{}),n.onopen=()=>{i++,j(!0),i>1?console.debug("[chat] SSE reconnected"):console.debug("[chat] SSE connected")},n.onerror=()=>{j(!1),p(!1),_(),E.current="",console.warn("[chat] SSE connection lost — will auto-reconnect")},n.addEventListener("session_info",r=>{try{let n=JSON.parse(r.data),o="channelId"in n;y(e=>o?{...n}:{...e,...n}),!e&&("number"==typeof n.sessionId&&n.sessionId>0&&c(n.sessionId),t&&"channelId"in n&&!("sessionId"in n)&&d());let h=i>1,m="number"==typeof n.sessionId?n.sessionId:null;if(!e&&function({isInitialBinding:e,isReconnect:t,confirmedSessionId:r}){return null!==r&&(e||t)}({isInitialBinding:o,isReconnect:h,confirmedSessionId:m})&&null!==m){let e=Date.now();u(m).then(t=>{a({fetchedMessageCount:t.length,currentRestoredCount:D.current.length,currentLiveCount:T.current.length})&&(S(t),l(r=>s(t,r,e)))}).catch(()=>{})}}catch{}}),n.addEventListener("chat",e=>{try{let t=JSON.parse(e.data);l(e=>[...e,{id:M(),role:t.role,content:t.content,timestamp:new Date,...t.attachments&&t.attachments.length>0?{attachments:t.attachments.map(e=>({...e,direction:"outbound"}))}:{}}]),b([]),_()}catch{}}),n.addEventListener("chat_attachments",e=>{try{let{attachments:t}=JSON.parse(e.data);if(!Array.isArray(t)||0===t.length)return;l(e=>{for(let r=e.length-1;r>=0;r--)if("assistant"===e[r].role){let a=[...e];return a[r]={...a[r],attachments:t.map(e=>({...e,direction:"outbound"}))},a}return e})}catch{}}),n.addEventListener("chat_stream",e=>{try{let{chunk:t}=JSON.parse(e.data);p(!0),_(),E.current+=t,l(e=>{let t=e[e.length-1];return t?.role==="assistant"&&t.id.startsWith("stream-")?[...e.slice(0,-1),{...t,content:E.current}]:[...e,{id:`stream-${A.current}`,role:"assistant",content:E.current,timestamp:new Date}]})}catch{}}),n.addEventListener("stream_end",()=>{p(!1),E.current=""}),n.addEventListener("tool_progress",e=>{try{let t=JSON.parse(e.data);b(e=>{let r=e.findIndex(e=>e.tool===t.tool);if(r>=0){let a=[...e];return a[r]=t,a}return[...e,t]})}catch{}}),n.addEventListener("chat_meta",e=>{try{let t=JSON.parse(e.data);l(e=>{for(let r=e.length-1;r>=0;r--)if("assistant"===e[r].role){let a=[...e];return a[r]={...a[r],meta:t},a}return e});let r=P.current;if(r){let e=Date.now();u(r).then(t=>{a({fetchedMessageCount:t.length,currentRestoredCount:D.current.length,currentLiveCount:T.current.length})&&(S(t),l(r=>s(t,r,e)))}).catch(()=>{})}}catch{}}),n.addEventListener("chat_error",e=>{try{let{message:t}=JSON.parse(e.data);l(e=>[...e,{id:M(),role:"error",content:t,timestamp:new Date}]),p(!1),_()}catch{}}),n.addEventListener("ping",()=>{}),()=>{r.abort(),n.close(),R.current=null,j(!1),F()}},[_,F,k,e]);let q=(0,t.useCallback)(async(e,t)=>{if(v?.channelId){O(),l(r=>[...r,{id:M(),role:"user",content:e,timestamp:new Date,...t?.attachments&&t.attachments.length>0?{attachments:t.attachments.map(e=>({...e,direction:"inbound"}))}:{}}]);try{let r=await fetch("/api/chat/messages",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({channelId:v.channelId,content:e,...t?.requestedModel?{requestedModel:t.requestedModel}:{},...t?.requestedBackendId&&t?.requestedModelId?{requestedBackendId:t.requestedBackendId,requestedModelId:t.requestedModelId}:{},...t?.attachments&&t.attachments.length>0?{attachmentIds:t.attachments.map(e=>e.id)}:{}})});if(!r.ok){let e=await r.json().catch(()=>null);l(t=>[...t,{id:M(),role:"error",content:L(e,"send failed"),timestamp:new Date}]),_()}}catch(t){let e=t instanceof TypeError?t.message:String(t);console.error("[chat] POST /api/chat/messages failed:",e),l(t=>[...t,{id:M(),role:"error",content:`Failed to send message: ${e}`,timestamp:new Date}]),_()}}},[L,v,O,_]),z=(0,t.useCallback)(async()=>{if(v?.channelId)try{let e=await fetch("/api/chat/end-session",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({channelId:v.channelId})});if(!e.ok){let t=await e.json().catch(()=>null);l(e=>[...e,{id:M(),role:"error",content:L(t,"failed to end session"),timestamp:new Date}]);return}n.invalidateQueries({queryKey:["conversations"]}).catch(()=>{}),n.invalidateQueries({queryKey:["chat-current-binding"]}).catch(()=>{}),B()}catch(t){let e=t instanceof TypeError?t.message:String(t);console.error("[chat] POST /api/chat/end-session failed:",e),l(t=>[...t,{id:M(),role:"error",content:`Failed to end session: ${e}`,timestamp:new Date}])}},[L,n,B,v]),$=(0,t.useCallback)(async e=>{console.debug("[chat] continueSession()",{sessionId:e});try{let t=await fetch("/api/chat/continue-session",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:e})});if(!t.ok){let e=await t.json().catch(()=>null);return l(t=>[...t,{id:M(),role:"error",content:L(e,"failed to continue session"),timestamp:new Date}]),!1}let r=await t.json().catch(()=>null),a="number"==typeof r?.sessionId&&r.sessionId>0?r.sessionId:e;return n.invalidateQueries({queryKey:["conversations"]}).catch(()=>{}),n.invalidateQueries({queryKey:["chat-current-binding"]}).catch(()=>{}),B({resumeSessionId:a}),!0}catch(t){let e=t instanceof TypeError?t.message:String(t);return console.error("[chat] POST /api/chat/continue-session failed:",e),l(t=>[...t,{id:M(),role:"error",content:`Failed to continue session: ${e}`,timestamp:new Date}]),!1}},[L,n,B]),H=w&&!!v?.channelId;return{messages:i,setMessages:l,restoredMessages:N,setRestoredMessages:S,streaming:m,waiting:x,busy:x||m,toolProgress:g,sessionInfo:v,sendMessage:q,endSession:z,continueSession:$,connected:w,ready:H}}],76)},34098,e=>{"use strict";var t=e.i(54710),r=e.i(99758),a=e.i(72740);e.s(["ToolProgress",0,function({items:e}){return 0===e.length?null:(0,t.jsx)("div",{className:"flex flex-wrap gap-2 px-2",children:e.map(e=>{let n="done"===e.status||"completed"===e.status;return(0,t.jsxs)("div",{className:"flex items-center gap-1.5 rounded-md bg-muted px-2.5 py-1 text-xs text-muted-foreground",children:[n?(0,t.jsx)(r.Check,{className:"h-3 w-3 text-emerald-500"}):(0,t.jsx)(a.Loader2,{className:"h-3 w-3 animate-spin"}),(0,t.jsx)("span",{children:e.tool})]},e.tool)})})}])},53756,e=>{"use strict";var t=e.i(54710),r=e.i(34416);let a=(0,e.i(77379).default)("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);var n=e.i(72740),s=e.i(33586),i=e.i(36451),l=e.i(20014),o=e.i(81471);e.s(["ChatInput",0,function({onSend:e,disabled:c,disabledMessage:d,placeholder:u,className:h}){let[m,p]=(0,r.useState)(""),x=(0,r.useRef)(null),f=(0,r.useRef)(null),[g,b]=(0,r.useState)(!1),{pending:v,ready:y,uploading:w,addFiles:j,remove:k,clear:C,error:N}=function(){let[e,t]=(0,r.useState)([]),[a,n]=(0,r.useState)(null),s=(0,r.useRef)(new Map),i=(0,r.useCallback)((e,r)=>{t(t=>t.map(t=>t.clientId===e?{...t,...r}:t))},[]),l=(0,r.useCallback)((e,t=0)=>e.reduce((e,t)=>e+t.sizeBytes,0)+t,[]),o=(0,r.useCallback)(e=>{let r=s.current.get(e);r&&(r.abort(),s.current.delete(e)),t(t=>t.filter(t=>t.clientId!==e)),t(t=>{let r=t.find(t=>t.clientId===e);return r?.serverId&&fetch(`/api/chat/attachments/${r.serverId}`,{method:"DELETE"}).catch(()=>{}),t})},[]),c=(0,r.useCallback)(()=>{for(let e of s.current.values())e.abort();s.current.clear(),t([]),n(null)},[]),d=(0,r.useCallback)(e=>{let t=new XMLHttpRequest;s.current.set(e.clientId,t),t.open("POST","/api/chat/attachments"),t.upload.onprogress=t=>{t.lengthComputable&&i(e.clientId,{progress:Math.round(t.loaded/t.total*100)})},t.onload=()=>{if(s.current.delete(e.clientId),t.status>=200&&t.status<300)try{let r=JSON.parse(t.responseText);i(e.clientId,{serverId:r.id,mimeType:r.mimeType,progress:100,status:"uploaded"})}catch{i(e.clientId,{status:"error",error:"Malformed response from server"})}else{let r=`Upload failed (${t.status})`;try{let e=JSON.parse(t.responseText);e.message&&(r=e.message)}catch{}i(e.clientId,{status:"error",error:r})}},t.onerror=()=>{s.current.delete(e.clientId),i(e.clientId,{status:"error",error:"Network error during upload"})};let r=new FormData;r.append("file",e.file,e.file.name),t.send(r)},[i]),u=(0,r.useCallback)(e=>{n(null);let r=Array.from(e);0!==r.length&&t(e=>{if(e.filter(e=>"uploading"===e.status).length+r.length>5)return n("At most 5 concurrent uploads"),e;let t=l(e),a=[];for(let e of r){let r=e.type.startsWith("image/")?5242880:0x1900000;if(e.size>r){n(`"${e.name}" is ${(e.size/1024/1024).toFixed(1)} MB — over the ${(r/1024/1024).toFixed(0)} MB limit`);continue}if(t+e.size>0x6400000){n("Per-turn cap is 100 MB — skipping the rest");break}t+=e.size;let s={clientId:`pending-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,serverId:null,file:e,progress:0,status:"uploading",sizeBytes:e.size};a.push(s)}for(let e of a)queueMicrotask(()=>d(e));return[...e,...a]})},[l,d]),h=e.some(e=>"uploading"===e.status),m=e.filter(e=>"uploaded"===e.status&&null!==e.serverId).map(e=>({id:e.serverId,originalFilename:e.file.name,mimeType:e.mimeType??(e.file.type||"application/octet-stream"),sizeBytes:e.sizeBytes}));return{pending:e,ready:m,uploading:h,addFiles:u,remove:o,clear:c,error:a}}(),S=!c&&!w&&(m.trim().length>0||y.length>0),E=(0,r.useCallback)(()=>{S&&(e(m.trim(),y),p(""),C(),x.current&&(x.current.style.height="auto"))},[S,C,e,y,m]);return(0,r.useEffect)(()=>{let e=x.current;if(!e)return;let t=e=>{if(c)return;let t=e.clipboardData?.items;if(!t)return;let r=[];for(let e of t)if("file"===e.kind){let t=e.getAsFile();t&&r.push(t)}r.length>0&&(e.preventDefault(),j(r))};return e.addEventListener("paste",t),()=>e.removeEventListener("paste",t)},[j,c]),(0,t.jsxs)("div",{className:(0,o.cn)("border-t border-border bg-background px-4 pt-3 pb-4",g&&"bg-primary/5",h),onDragOver:e=>{c||(e.preventDefault(),b(!0))},onDragLeave:()=>b(!1),onDrop:e=>{if(e.preventDefault(),b(!1),c)return;let t=e.dataTransfer.files;t.length>0&&j(t)},children:[c&&(0,t.jsxs)("div",{className:"mb-2 flex items-center gap-1.5 text-xs text-muted-foreground",children:[(0,t.jsx)(n.Loader2,{className:"h-3 w-3 animate-spin"}),(0,t.jsx)("span",{children:d??"Agent is generating a response — please wait"})]}),v.length>0&&(0,t.jsx)("div",{className:"mb-2 flex flex-wrap gap-2",children:v.map(e=>{var r;return(0,t.jsxs)("div",{className:(0,o.cn)("flex items-center gap-2 rounded-md border px-2 py-1 text-xs","error"===e.status?"border-destructive/40 bg-destructive/5 text-destructive":"border-border bg-muted/40"),children:[(0,t.jsx)(s.Paperclip,{className:"h-3 w-3 flex-shrink-0"}),(0,t.jsx)("span",{className:"max-w-[160px] truncate",title:e.file.name,children:e.file.name}),(0,t.jsx)("span",{className:"text-muted-foreground",children:(r=e.sizeBytes)<1024?`${r} B`:r<1048576?`${(r/1024).toFixed(0)} KB`:`${(r/1024/1024).toFixed(1)} MB`}),"uploading"===e.status&&(0,t.jsxs)("span",{className:"text-muted-foreground",children:[e.progress,"%"]}),"error"===e.status&&e.error&&(0,t.jsx)("span",{className:"text-muted-foreground/80",title:e.error,children:"failed"}),(0,t.jsx)("button",{type:"button",onClick:()=>k(e.clientId),className:"ml-1 text-muted-foreground hover:text-foreground","aria-label":`Remove ${e.file.name}`,children:(0,t.jsx)(i.X,{className:"h-3 w-3"})})]},e.clientId)})}),N&&(0,t.jsx)("div",{className:"mb-2 text-xs text-destructive",role:"alert",children:N}),(0,t.jsxs)("div",{className:"flex items-end gap-2",children:[(0,t.jsx)("input",{ref:f,type:"file",multiple:!0,className:"hidden",onChange:e=>{var t;(t=e.target.files)&&0!==t.length&&j(t),e.target.value=""}}),(0,t.jsx)(l.Button,{type:"button",size:"icon",variant:"ghost",onClick:()=>f.current?.click(),disabled:c,"aria-label":"Attach files",title:"Attach files",children:(0,t.jsx)(s.Paperclip,{className:"h-4 w-4"})}),(0,t.jsx)("textarea",{ref:x,value:m,onChange:e=>p(e.target.value),onKeyDown:e=>{(e.metaKey||e.ctrlKey)&&"Enter"===e.key&&(e.preventDefault(),E())},onInput:()=>{let e=x.current;e&&(e.style.height="auto",e.style.height=`${Math.min(e.scrollHeight,200)}px`)},placeholder:u??(c?"Waiting for response…":"Message the agent..."),disabled:c,rows:1,className:"flex-1 resize-none rounded-lg border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50"}),(0,t.jsx)(l.Button,{size:"icon",onClick:E,disabled:!S,children:c||w?(0,t.jsx)(n.Loader2,{className:"h-4 w-4 animate-spin"}):(0,t.jsx)(a,{className:"h-4 w-4"})})]})]})}],53756)},86567,6423,86704,29472,e=>{"use strict";var t=e.i(54710),r=e.i(34416),a=e.i(45958),n=e.i(52387),s=e.i(20014),i=e.i(90826),l=e.i(81187),o=e.i(89883),c=e.i(90925),d=e.i(65268),u=e.i(8652),h=e.i(48467),m=e.i(79634),p=e.i(81471),x=e.i(14260),f=e.i(95486);function g(e,t){return(0,x.useQuery)({queryKey:["mail-health",e],queryFn:()=>d.api.get(`/mail/${encodeURIComponent(e)}/health`),refetchInterval:1e4,enabled:t})}function b(){let e=(0,f.useQueryClient)();return()=>{e.invalidateQueries({queryKey:["mail-providers"]}),e.invalidateQueries({queryKey:["mail-accounts"]}),e.invalidateQueries({queryKey:["mail-health"]})}}async function v(e,t,r){let a=new Set(e);r?a.add(t):a.delete(t);let n=["gmail","outlook","yahoo","icloud"].filter(e=>a.has(e));return await d.api.patch("/mail/providers",{enabledKinds:n}),n}e.s(["toggleProviderEnabled",0,v,"useInvalidateMail",0,b,"useMailAccountHealth",0,g,"useMailAccounts",0,function(){return(0,x.useQuery)({queryKey:["mail-accounts"],queryFn:()=>d.api.get("/mail/accounts"),refetchInterval:1e4})},"useMailProviders",0,function(){return(0,x.useQuery)({queryKey:["mail-providers"],queryFn:()=>d.api.get("/mail/providers"),refetchInterval:3e4})}],6423);let y={healthy:{variant:"green",label:"Healthy"},requires_consent:{variant:"amber",label:"Re-authenticate"},degraded:{variant:"red",label:"Degraded"}};function w({account:e,highlight:a=!1,hideActive:n=!1,hideHealth:l=!1,onReauthenticate:u,isLastOfKind:p=!1,onAfterRemove:x}){let f=(0,r.useRef)(null),v=(0,i.useConfirm)(),C=b(),[N,S]=(0,r.useState)(!1),[E,A]=(0,r.useState)(null);(0,r.useEffect)(()=>{a&&f.current&&f.current.scrollIntoView({behavior:"smooth",block:"center"})},[a]);let R=g(e.id,!l).data??null,I="yahoo"===e.kind||"icloud"===e.kind,[T,D]=(0,r.useState)(!1),P=async()=>{A(null),S(!0);try{await d.api.patch(`/mail/accounts/${encodeURIComponent(e.id)}`,{active:!e.active}),C()}catch(e){A(e instanceof Error?e.message:"Failed to update")}finally{S(!1)}},M=async()=>{if(await v({title:`Remove ${e.email}?`,description:"Local credentials are revoked and the account is removed from this app. The mailbox itself is untouched at the provider."+(p?" This is the last account of its kind, so the provider will also be disabled — re-authenticate and toggle Enable to bring it back.":""),confirmLabel:"Remove",variant:"destructive"})){A(null),S(!0);try{await d.api.delete(`/mail/accounts/${encodeURIComponent(e.id)}`),x&&await x(),C()}catch(e){A(e instanceof Error?e.message:"Failed to remove")}finally{S(!1)}}},L=y[e.authStatus],F=l||!e.idleEnabled?null:R?.idleFallbackUntilUtc?{label:"polling (IDLE down)",variant:"amber"}:{label:"IDLE",variant:"green"};return(0,t.jsxs)("div",{ref:f,id:`account-${e.id}`,className:"rounded-md border p-3 transition-colors "+(a?"border-amber-400 ring-1 ring-amber-300/60":"border-border"),children:[(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)(o.Mail,{className:"mt-0.5 h-4 w-4 shrink-0 text-muted-foreground"}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-foreground truncate",children:e.email}),e.label&&(0,t.jsxs)("span",{className:"text-xs text-muted-foreground",children:["(",e.label,")"]}),(0,t.jsx)(h.Badge,{variant:L.variant,children:L.label}),F&&(0,t.jsx)(h.Badge,{variant:F.variant,children:F.label})]}),!l&&(0,t.jsx)(k,{health:R})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 shrink-0",children:[!n&&(0,t.jsxs)("label",{className:"flex items-center gap-1 text-xs cursor-pointer select-none",children:[(0,t.jsx)("input",{type:"checkbox",checked:e.active,disabled:N,onChange:()=>void P(),className:"h-3.5 w-3.5 rounded border-border"}),"Active"]}),"requires_consent"===e.authStatus&&(I?(0,t.jsx)(s.Button,{size:"sm",variant:"outline",disabled:N,onClick:()=>D(e=>!e),className:"h-7 text-xs px-2",children:T?"Cancel":"Re-authenticate"}):u&&(0,t.jsx)(s.Button,{size:"sm",variant:"outline",disabled:N,onClick:()=>void u(),className:"h-7 text-xs px-2",children:"Re-authenticate"})),(0,t.jsx)(s.Button,{size:"sm",variant:"outline",onClick:()=>void M(),disabled:N,className:"h-7 px-2",title:"Remove account",children:(0,t.jsx)(c.Trash2,{className:"h-3.5 w-3.5"})})]})]}),E&&(0,t.jsx)(m.Alert,{variant:"error",className:"mt-2",children:E}),I&&T&&(0,t.jsx)(j,{accountId:e.id,onSuccess:()=>{D(!1),C()}})]})}function j({accountId:e,onSuccess:a}){let[n,i]=(0,r.useState)(""),[l,o]=(0,r.useState)(!1),[c,h]=(0,r.useState)(null),p=async()=>{o(!0),h(null);try{await d.api.post(`/config/mail/app-password/${encodeURIComponent(e)}/refresh`,{appPassword:n.trim()}),i(""),a()}catch(e){h(e instanceof Error?e.message:"Failed to refresh")}finally{o(!1)}};return(0,t.jsxs)("div",{className:"mt-2 rounded-md border border-amber-200 bg-amber-50/50 p-3 dark:border-amber-900 dark:bg-amber-950/30 space-y-2",children:[(0,t.jsx)("p",{className:"text-xs text-foreground",children:"Generate a new app password at the provider, paste it here, and the daemon will swap it in place — the polling cursor and account ID stay intact."}),(0,t.jsx)(u.Input,{type:"password",value:n,onChange:e=>i(e.target.value),placeholder:"paste new app password",className:"h-8 text-xs"}),(0,t.jsx)("div",{className:"flex gap-2",children:(0,t.jsx)(s.Button,{size:"sm",onClick:()=>void p(),disabled:l||0===n.trim().length,className:"h-7 text-xs px-3",children:l?"Verifying…":"Update password"})}),c&&(0,t.jsx)(m.Alert,{variant:"error",children:c})]})}function k({health:e}){if(!e)return(0,t.jsx)("p",{className:"mt-1 text-[11px] text-muted-foreground",children:"Waiting for first poll…"});let r=e.lastPollAtUtc,a=null!=r&&Date.now()-(0,p.parseUtcDate)(r).getTime()>9e5;return(0,t.jsxs)("div",{className:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px] text-muted-foreground",children:[(0,t.jsxs)("span",{children:["last poll:"," ",r?(0,t.jsxs)("span",{title:(0,p.formatAbsoluteTime)(r),className:a?"text-amber-600 dark:text-amber-400":void 0,children:[(0,p.formatRelativeTime)(r),a?" · stale":""]}):(0,t.jsx)("span",{children:"never"})]}),e.consecutiveErrorCount>0&&(0,t.jsxs)("span",{className:"text-amber-600 dark:text-amber-400",children:[e.consecutiveErrorCount," consecutive errors"]}),e.lastError&&(0,t.jsxs)("span",{className:"flex items-center gap-1 text-red-600 dark:text-red-400 max-w-full truncate",title:e.lastError,children:[(0,t.jsx)(l.AlertTriangle,{className:"h-3 w-3 shrink-0"}),e.lastError]})]})}var C=e.i(74490),N=e.i(57628);let S={"not-connected":{variant:"gray",label:"Not connected"},"needs-setup":{variant:"gray",label:"Needs setup"},disabled:{variant:"amber",label:"Ready to enable"},enabled:{variant:"green",label:"Enabled"},attention:{variant:"red",label:"Needs attention"}};function E(e){return e.accounts.some(e=>"healthy"!==e.authStatus)?"attention":0===e.accounts.length?e.awaitingProviderSetup?"needs-setup":"not-connected":e.enabled?"enabled":"disabled"}function A(e){let r=S[e.status],a="attention"===e.status?"warning":"enabled"===e.status?"success":"default";return(0,t.jsxs)(C.Card,{tone:a,children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,t.jsx)(o.Mail,{className:"h-4 w-4 text-muted-foreground shrink-0"}),(0,t.jsx)("h3",{className:"text-base font-semibold text-foreground truncate",children:e.name})]}),(0,t.jsx)(h.Badge,{variant:r.variant,children:r.label})]}),(0,t.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:e.description}),(0,t.jsx)("div",{className:"mt-3 space-y-3",children:e.setupSection}),e.accountsSection&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(N.Separator,{className:"my-4"}),(0,t.jsx)("h4",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground mb-2",children:"Authenticated accounts"}),(0,t.jsx)("div",{className:"space-y-2",children:e.accountsSection})]}),(0,t.jsx)(N.Separator,{className:"my-4"}),(0,t.jsx)(R,{toggle:e.enableToggle})]})}function R({toggle:e}){let[a,n]=(0,r.useState)(null),s=async t=>{n(null);try{await e.onChange(t)}catch(e){n(e instanceof Error?e.message:"Failed to update")}};return(0,t.jsxs)("div",{children:[(0,t.jsxs)("label",{className:"flex items-center gap-2 text-sm select-none "+(e.disabled||e.busy?"cursor-not-allowed opacity-60":"cursor-pointer"),title:e.disabled?e.disabledReason:void 0,children:[(0,t.jsx)("input",{type:"checkbox",checked:e.enabled,disabled:e.disabled||e.busy,onChange:e=>void s(e.target.checked),className:"h-4 w-4 rounded border-border"}),(0,t.jsx)("span",{className:"font-medium text-foreground",children:"Enable for the agent"}),e.busy&&(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:"saving…"})]}),e.disabled&&e.disabledReason&&(0,t.jsx)("p",{className:"mt-1 ml-6 text-xs text-muted-foreground",children:e.disabledReason}),!e.disabled&&e.explainer&&(0,t.jsx)("p",{className:"mt-1 ml-6 text-xs text-muted-foreground",children:e.explainer}),a&&(0,t.jsx)(m.Alert,{variant:"error",className:"mt-2",children:a})]})}e.s(["GmailCard",0,function({accounts:e,enabledKinds:l,focusAccountId:o,hideExternalGoogleLink:c=!1}){let d=b(),u=(0,i.useConfirm)(),[h,m]=(0,r.useState)(!1),p=l.includes("gmail"),x=E({accounts:e,enabled:p}),f=async e=>{if(e||await u({title:"Disable Gmail for the agent?",description:"This stops the unified mail poller from observing Gmail — receipts, travel bookings, and Kindle highlights will not be classified until you re-enable Gmail. Tokens stay in the keychain and the integration resumes the moment you flip the switch back on.",confirmLabel:"Disable Gmail",variant:"destructive"})){m(!0);try{await v(l,"gmail",e),d()}finally{m(!1)}}};return(0,t.jsx)(A,{name:"Gmail / Google Workspace",description:(0,t.jsx)(t.Fragment,{children:"Authenticated through your existing Google connection (it is shared with Calendar). Manage Google OAuth on the Connections page."}),status:x,setupSection:0===e.length?(0,t.jsxs)("div",{className:"rounded-md border border-dashed border-border p-3 text-xs",children:[(0,t.jsx)("p",{className:"text-foreground font-medium mb-1",children:"No Gmail account connected yet."}),(0,t.jsx)("p",{className:"text-muted-foreground mb-2",children:c?"Switch the Mode above to Direct and complete the Google connection step on this page — the daemon detects your Gmail address from the OAuth response and registers it here.":"Authenticate Google in Connections — the daemon detects your Gmail address from the OAuth response and registers it here."}),!c&&(0,t.jsx)(a.default,{href:"/connections/calendar#google",children:(0,t.jsxs)(s.Button,{size:"sm",variant:"outline",className:"h-7 text-xs px-3",children:["Open Google connection",(0,t.jsx)(n.ExternalLink,{className:"ml-1 h-3 w-3"})]})})]}):c?null:(0,t.jsxs)("p",{className:"text-xs text-muted-foreground",children:["Re-authentication, scope changes, or revoking access live on the"," ",(0,t.jsx)(a.default,{href:"/connections/calendar#google",className:"underline underline-offset-2",children:"Google connection card"}),"."]}),accountsSection:e.length>0?e.map(r=>(0,t.jsx)(w,{account:r,highlight:o===r.id,hideActive:!0,hideHealth:!0,isLastOfKind:1===e.length,onAfterRemove:async()=>{1===e.length&&p&&await v(l,"gmail",!1)}},r.id)):void 0,enableToggle:{enabled:p,disabled:0===e.length,disabledReason:0===e.length?"Connect a Google account first.":void 0,busy:h,onChange:f,explainer:"When enabled, the legacy Gmail poller observes your inbox and the agent can read, draft, and send messages."}})}],86567),e.i(18446);var I=e.i(49445);function T({index:e,title:r,completed:a=!1,disabled:n=!1,children:s}){return(0,t.jsxs)("div",{className:"rounded-md border border-dashed p-3 "+(n?"border-border opacity-50":a?"border-emerald-300 dark:border-emerald-800":"border-border"),children:[(0,t.jsxs)("p",{className:"text-xs font-semibold text-foreground mb-2",children:["Step ",e,": ",r,a&&(0,t.jsx)("span",{className:"ml-2 text-emerald-600 dark:text-emerald-400",children:"✓"})]}),s]})}e.s(["OutlookCard",0,function({accounts:e,enabledKinds:a,focusAccountId:l}){let o=b(),c=(0,i.useConfirm)(),h=a.includes("outlook"),p=(0,x.useQuery)({queryKey:["outlook-client-config"],queryFn:()=>d.api.get("/config/mail/outlook/client-config"),staleTime:3e4}),f=p.data?.configured===!0,g=E({accounts:e,enabled:h,awaitingProviderSetup:!f}),[y,j]=(0,r.useState)(!1),[k,C]=(0,r.useState)(""),[N,S]=(0,r.useState)("common"),[R,D]=(0,r.useState)(""),[P,M]=(0,r.useState)(!1),[L,F]=(0,r.useState)(null),[O,_]=(0,r.useState)(null),[B,q]=(0,r.useState)(null),[z,$]=(0,r.useState)(!1),H=async e=>{$(!0);try{await v(a,"outlook",e),o()}finally{$(!1)}},U=async()=>{M(!0),F(null);try{await d.api.put("/config/mail/outlook/client-config",{clientId:k.trim(),tenant:N.trim()||"common"}),await p.refetch(),j(!1)}catch(e){F(e instanceof Error?e.message:"Failed to save client config")}finally{M(!1)}},W=async()=>{if(await c({title:"Reset Azure app registration?",description:"Existing Outlook accounts keep working until their tokens expire. You'll need to re-enter the client ID before adding new accounts.",confirmLabel:"Reset",variant:"destructive"})){M(!0),F(null);try{await d.api.delete("/config/mail/outlook/client-config"),await p.refetch()}catch(e){F(e instanceof Error?e.message:"Failed to reset")}finally{M(!1)}}},G=async()=>{if(await c({title:"Open Microsoft sign-in?",description:"The daemon will open your browser to sign in to Microsoft. macOS or Windows may show a one-time firewall prompt — accept it so the loopback callback can complete.",confirmLabel:"Continue"})){M(!0),F(null),_(null);try{await d.api.post("/mail/accounts",{kind:"outlook",label:R.trim()||void 0}),_("Outlook account authenticated. Toggle the switch below to start using it."),D(""),o()}catch(e){F(e instanceof Error?e.message:"OAuth failed")}finally{M(!1)}}},K=async()=>{M(!0),F(null),_(null),q(null);try{let e=await fetch("/api/mail/accounts/device-code",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({kind:"outlook",label:R.trim()||void 0})});if(!e.ok||!e.body)throw Error(`HTTP ${e.status}`);let t=e.body.getReader(),r=new TextDecoder,a="";for(;;){let{value:e,done:n}=await t.read();if(n)break;let s=(a+=r.decode(e,{stream:!0})).split("\n\n");for(let e of(a=s.pop()??"",s)){let t=e.split("\n"),r="",a="";for(let e of t)e.startsWith("event:")&&(r=e.slice(6).trim()),e.startsWith("data:")&&(a+=e.slice(5).trim());if(r){if("prompt"===r)q(JSON.parse(a));else if("completed"===r)_("Outlook account authenticated. Toggle the switch below to start using it."),q(null),D(""),o();else if("failed"===r){let e=JSON.parse(a);throw Error(e.message??"device-code failed")}}}}}catch(e){F(e instanceof Error?e.message:"Device-code OAuth failed"),q(null)}finally{M(!1)}},Q=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(T,{index:1,title:"Register an Azure app (one-time)",completed:f,children:[!f&&!y&&(0,t.jsxs)("div",{className:"space-y-3 text-xs",children:[(0,t.jsxs)("p",{className:"text-muted-foreground",children:["One-time setup: you'll tell Microsoft that the ",I.APP_NAME,"daemon on your computer is allowed to read and send mail on your behalf. Follow every sub-step — two of them are easy to miss and will make sign-in fail with ",(0,t.jsx)("code",{children:"server_error"})," later."]}),(0,t.jsxs)("ol",{className:"list-decimal list-outside pl-4 space-y-2 text-muted-foreground",children:[(0,t.jsxs)("li",{children:["Open the"," ",(0,t.jsxs)("a",{href:"https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade",target:"_blank",rel:"noreferrer",className:"underline inline-flex items-center gap-0.5",children:["Azure portal — App registrations"," ",(0,t.jsx)(n.ExternalLink,{className:"h-3 w-3"})]}),". Sign in with the Microsoft account you want the agent to use."]}),(0,t.jsxs)("li",{children:["Click ",(0,t.jsx)("strong",{children:"+ New registration"})," at the top of the page."]}),(0,t.jsxs)("li",{children:["Fill in the form:",(0,t.jsxs)("ul",{className:"list-disc list-outside pl-4 mt-1 space-y-1",children:[(0,t.jsxs)("li",{children:[(0,t.jsx)("strong",{children:"Name"}),": anything, e.g. ",(0,t.jsx)("code",{children:I.APP_NAME}),"."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("strong",{children:"Supported account types"}),": pick"," ",(0,t.jsx)("em",{children:"Accounts in any organizational directory (Any Microsoft Entra ID tenant – Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)"}),"."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("strong",{children:"Redirect URI"}),": in the left-hand dropdown choose ",(0,t.jsx)("code",{children:"Public client/native (mobile & desktop)"})," ",(0,t.jsx)("strong",{children:"— not"})," ",(0,t.jsx)("code",{children:"Web"}),". Then type"," ",(0,t.jsx)("code",{children:"http://127.0.0.1/callback"})," in the box on the right."]})]}),(0,t.jsxs)("p",{className:"mt-1 rounded-md border border-amber-400/60 bg-amber-400/10 px-2 py-1 text-amber-700 dark:text-amber-300",children:["⚠ Trap #1: if you leave ",(0,t.jsx)("code",{children:"Web"})," selected, Microsoft will later return ",(0,t.jsx)("code",{children:"Authorization failed: server_error"}),". Use the Public client/native option."]})]}),(0,t.jsxs)("li",{children:["Click ",(0,t.jsx)("strong",{children:"Register"})," at the bottom of the form."]}),(0,t.jsxs)("li",{children:["You'll land on the ",(0,t.jsx)("em",{children:"Overview"})," page. Copy the value labelled ",(0,t.jsx)("strong",{children:"Application (client) ID"}),"— you'll paste it into the form below in a moment."]}),(0,t.jsxs)("li",{children:["In the left sidebar click ",(0,t.jsx)("strong",{children:"Authentication"}),". Scroll to the very bottom, find ",(0,t.jsx)("em",{children:"Advanced settings"})," →"," ",(0,t.jsx)("strong",{children:"Allow public client flows"}),", flip the toggle to"," ",(0,t.jsx)("strong",{children:"Yes"}),", then click ",(0,t.jsx)("strong",{children:"Save"})," at the top of the page.",(0,t.jsxs)("p",{className:"mt-1 rounded-md border border-amber-400/60 bg-amber-400/10 px-2 py-1 text-amber-700 dark:text-amber-300",children:["⚠ Trap #2: this toggle is off by default. Without it sign-in also fails with ",(0,t.jsx)("code",{children:"server_error"}),"."]})]}),(0,t.jsxs)("li",{children:["In the left sidebar click ",(0,t.jsx)("strong",{children:"API permissions"})," →"," ",(0,t.jsx)("strong",{children:"+ Add a permission"})," →"," ",(0,t.jsx)("strong",{children:"Microsoft Graph"})," →"," ",(0,t.jsx)("strong",{children:"Delegated permissions"}),". Use the search box to find and tick each of:",(0,t.jsxs)("ul",{className:"list-disc list-outside pl-4 mt-1",children:[(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"offline_access"})}),(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"User.Read"})}),(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"Mail.ReadWrite"})}),(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"Mail.Send"})})]}),"Then click ",(0,t.jsx)("strong",{children:"Add permissions"})," at the bottom."]}),(0,t.jsxs)("li",{children:["(Work/school tenant only) If your org requires admin consent for these scopes, click ",(0,t.jsx)("strong",{children:"Grant admin consent"}),". Personal Microsoft accounts don't need this step."]}),(0,t.jsxs)("li",{children:["Come back here and click ",(0,t.jsx)("strong",{children:"I have a client ID"}),". Paste the Application (client) ID you copied in step 5; leave Tenant as ",(0,t.jsx)("code",{children:"common"})," unless your admin told you otherwise."]})]}),(0,t.jsx)(s.Button,{size:"sm",variant:"outline",onClick:()=>j(!0),className:"h-7 text-xs px-3",children:"I have a client ID"})]}),y&&(0,t.jsxs)("div",{className:"space-y-2 rounded-md border border-border p-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:"outlook-client-id",children:"Application (client) ID"}),(0,t.jsx)(u.Input,{id:"outlook-client-id",value:k,onChange:e=>C(e.target.value),placeholder:"00000000-0000-0000-0000-000000000000",className:"h-8 text-xs"})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:"outlook-tenant",children:["Tenant (default ",(0,t.jsx)("code",{children:"common"}),")"]}),(0,t.jsx)(u.Input,{id:"outlook-tenant",value:N,onChange:e=>S(e.target.value),placeholder:"common / organizations / <tenant-guid>",className:"h-8 text-xs"})]}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(s.Button,{size:"sm",variant:"outline",onClick:()=>void U(),disabled:P||0===k.trim().length,className:"h-7 text-xs px-3",children:P?"Saving…":"Save"}),(0,t.jsx)(s.Button,{size:"sm",variant:"outline",onClick:()=>j(!1),disabled:P,className:"h-7 text-xs px-3",children:"Cancel"})]})]}),f&&!y&&(0,t.jsxs)("div",{className:"text-xs text-muted-foreground",children:["Application ID:"," ",(0,t.jsx)("code",{className:"font-mono",children:p.data?.clientId})," ","(tenant ",(0,t.jsx)("code",{children:p.data?.tenant}),")."," ",(0,t.jsx)("button",{type:"button",className:"underline",onClick:()=>void W(),disabled:P,children:"reset"})]})]}),(0,t.jsx)(T,{index:2,title:"Authenticate an Outlook account",disabled:!f,children:f?(0,t.jsxs)("div",{className:"space-y-2 rounded-md border border-border p-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:"outlook-label",children:"Label (optional)"}),(0,t.jsx)(u.Input,{id:"outlook-label",value:R,onChange:e=>D(e.target.value),placeholder:"work, personal, …",className:"h-8 text-xs"})]}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,t.jsx)(s.Button,{size:"sm",onClick:()=>void G(),disabled:P,className:"h-7 text-xs px-3",children:P?"Waiting for consent…":"Authenticate (browser)"}),(0,t.jsx)(s.Button,{size:"sm",variant:"outline",onClick:()=>void K(),disabled:P,className:"h-7 text-xs px-3",title:"Use if the daemon runs headless (SSH / WSL)",children:"Authenticate (device code)"})]}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:"The browser flow may trigger a one-time macOS / Windows firewall prompt — accept it so the loopback callback can complete."})]}):(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:"Save the client ID first."})}),B&&(0,t.jsx)(m.Alert,{variant:"warning",children:(0,t.jsxs)("div",{className:"text-xs",children:["Visit"," ",(0,t.jsx)("a",{href:B.verificationUri,target:"_blank",rel:"noreferrer",className:"underline",children:B.verificationUri})," ","and enter code"," ",(0,t.jsx)("code",{className:"font-mono",children:B.userCode}),". Expires in ",Math.round(B.expiresIn/60)," min."]})}),O&&(0,t.jsx)(m.Alert,{variant:"success",children:O}),L&&(0,t.jsx)(m.Alert,{variant:"error",children:L})]});return(0,t.jsx)(A,{name:"Outlook / Microsoft 365",description:(0,t.jsx)(t.Fragment,{children:"One-time Azure app registration, then connect as many Outlook / outlook.com / Microsoft 365 accounts as you need."}),status:g,setupSection:Q,accountsSection:e.length>0?e.map(r=>(0,t.jsx)(w,{account:r,highlight:l===r.id,onReauthenticate:()=>void G(),isLastOfKind:1===e.length,onAfterRemove:async()=>{1===e.length&&h&&await v(a,"outlook",!1)}},r.id)):void 0,enableToggle:{enabled:h,disabled:0===e.length,disabledReason:0===e.length?"Authenticate an Outlook account first.":void 0,busy:z,onChange:H,explainer:"When enabled, the agent observes your Outlook inbox via Microsoft Graph and can read, draft, and send messages."}})}],86704);let D={yahoo:{name:"Yahoo Mail",description:"App-password login over IMAP/SMTP. Generate the password in Yahoo Account Security, paste it once, and the daemon stores it in the OS keychain.",setupUrl:"https://login.yahoo.com/account/security",setupLabel:"Yahoo Account Security",passwordLabel:"Yahoo app password",defaultDomain:"yahoo.com",prerequisite:"Yahoo requires two-step verification on the account before it lets you create app passwords. If you haven't enabled it yet, turn it on first from the same Account Security page.",passwordSteps:[(0,t.jsxs)(t.Fragment,{children:["Open the"," ",(0,t.jsx)("strong",{children:"Yahoo Account Security"})," page and sign in with the Yahoo account you want to connect."]}),(0,t.jsxs)(t.Fragment,{children:["Scroll to ",(0,t.jsx)("strong",{children:"Other ways to sign in"})," and click"," ",(0,t.jsx)("strong",{children:"Generate and manage app passwords"}),". (If the link is missing, enable two-step verification first.)"]}),(0,t.jsxs)(t.Fragment,{children:["In the ",(0,t.jsx)("em",{children:"App name"})," field type ",(0,t.jsx)("code",{children:I.APP_NAME})," (any name works; this is just a label Yahoo shows in your account), then click ",(0,t.jsx)("strong",{children:"Generate password"}),"."]}),(0,t.jsxs)(t.Fragment,{children:["Yahoo shows a 16-character password with spaces. Copy it exactly as shown — ",(0,t.jsx)("strong",{children:"do not type it by hand"}),". Spaces are part of the password."]}),(0,t.jsx)(t.Fragment,{children:"Paste it into the password field below, then click Authenticate."})],passwordHint:"16 characters from Yahoo, spaces included. Do not retype — paste."},icloud:{name:"iCloud Mail",description:"App-specific-password login over IMAP/SMTP. Create the password in Apple Account → Sign-In and Security, paste it once, and the daemon stores it in the OS keychain.",setupUrl:"https://account.apple.com",setupLabel:"Apple Account",passwordLabel:"Apple app-specific password",defaultDomain:"icloud.com",prerequisite:"Apple only allows app-specific passwords on Apple IDs that have two-factor authentication turned on. If your Apple ID doesn't have 2FA yet, enable it first at appleid.apple.com.",passwordSteps:[(0,t.jsxs)(t.Fragment,{children:["Open ",(0,t.jsx)("strong",{children:"Apple Account"})," and sign in with the Apple ID whose iCloud mailbox you want to connect."]}),(0,t.jsxs)(t.Fragment,{children:["In the left sidebar click ",(0,t.jsx)("strong",{children:"Sign-In and Security"}),", then click ",(0,t.jsx)("strong",{children:"App-Specific Passwords"}),"."]}),(0,t.jsxs)(t.Fragment,{children:["Click ",(0,t.jsx)("strong",{children:"+ Generate an app-specific password"}),". Apple may ask you to re-enter your Apple ID password."]}),(0,t.jsxs)(t.Fragment,{children:["In the label field type ",(0,t.jsx)("code",{children:I.APP_NAME})," (any name works), then click ",(0,t.jsx)("strong",{children:"Create"}),"."]}),(0,t.jsxs)(t.Fragment,{children:["Apple shows a 19-character password in the form"," ",(0,t.jsx)("code",{children:"xxxx-xxxx-xxxx-xxxx"}),". Copy it exactly —"," ",(0,t.jsx)("strong",{children:"the dashes are required"}),"."]}),(0,t.jsx)(t.Fragment,{children:"Paste it into the password field below, then click Authenticate."})],passwordHint:"Format: xxxx-xxxx-xxxx-xxxx. Dashes are required — paste, don't retype."}};e.s(["ImapCard",0,function({kind:e,accounts:a,enabledKinds:i,focusAccountId:l}){let o=b(),c=D[e],h=i.includes(e),p=E({accounts:a,enabled:h}),[x,f]=(0,r.useState)(""),[g,y]=(0,r.useState)(""),[j,k]=(0,r.useState)(""),[C,N]=(0,r.useState)(!1),[S,R]=(0,r.useState)(null),[I,T]=(0,r.useState)(null),[P,M]=(0,r.useState)(!1),L=async t=>{M(!0);try{await v(i,e,t),o()}finally{M(!1)}},F=async()=>{N(!0),R(null),T(null);try{await d.api.post("/config/mail/app-password",{kind:e,email:`${x.trim()}@${c.defaultDomain}`,appPassword:g.trim(),label:j.trim()||void 0}),T(`${c.name} authenticated. Toggle the switch below to start using it.`),f(""),y(""),k(""),o()}catch(e){R(e instanceof Error?e.message:"Failed to connect")}finally{N(!1)}},O=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"rounded-md border border-dashed border-border p-3 text-xs space-y-2",children:[(0,t.jsx)("p",{className:"text-foreground font-medium",children:"Step 1: Generate an app password"}),(0,t.jsxs)("p",{className:"text-muted-foreground",children:[c.prerequisite," ",(0,t.jsxs)("a",{href:c.setupUrl,target:"_blank",rel:"noreferrer",className:"underline inline-flex items-center gap-0.5",children:["Open ",c.setupLabel," ",(0,t.jsx)(n.ExternalLink,{className:"h-3 w-3"})]}),"."]}),(0,t.jsx)("ol",{className:"list-decimal list-outside pl-4 space-y-1 text-muted-foreground",children:c.passwordSteps.map((e,r)=>(0,t.jsx)("li",{children:e},r))})]}),(0,t.jsxs)("div",{className:"rounded-md border border-border p-3 space-y-2",children:[(0,t.jsx)("p",{className:"text-xs font-semibold text-foreground",children:"Step 2: Authenticate the account"}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:`${e}-email`,children:"Account email"}),(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(u.Input,{id:`${e}-email`,value:x,onChange:e=>f(e.target.value),placeholder:"username",className:"h-8 text-xs rounded-r-none"}),(0,t.jsxs)("span",{className:"inline-flex h-8 items-center rounded-r-md border border-l-0 border-input bg-muted px-3 text-xs text-muted-foreground select-none",children:["@",c.defaultDomain]})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:`${e}-app-password`,children:c.passwordLabel}),(0,t.jsx)(u.Input,{id:`${e}-app-password`,type:"password",value:g,onChange:e=>y(e.target.value),placeholder:"paste generated password",className:"h-8 text-xs"}),(0,t.jsx)("p",{className:"mt-1 text-[11px] text-muted-foreground",children:c.passwordHint})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:`${e}-label`,children:"Label (optional)"}),(0,t.jsx)(u.Input,{id:`${e}-label`,value:j,onChange:e=>k(e.target.value),placeholder:"personal, family, …",className:"h-8 text-xs"})]}),(0,t.jsx)(s.Button,{size:"sm",onClick:()=>void F(),disabled:C||0===x.trim().length||0===g.trim().length,className:"h-7 text-xs px-3",children:C?"Authenticating…":"Authenticate"})]}),I&&(0,t.jsx)(m.Alert,{variant:"success",children:I}),S&&(0,t.jsx)(m.Alert,{variant:"error",children:S})]});return(0,t.jsx)(A,{name:c.name,description:c.description,status:p,setupSection:O,accountsSection:a.length>0?a.map(r=>(0,t.jsx)(w,{account:r,highlight:l===r.id,isLastOfKind:1===a.length,onAfterRemove:async()=>{1===a.length&&h&&await v(i,e,!1)}},r.id)):void 0,enableToggle:{enabled:h,disabled:0===a.length,disabledReason:0===a.length?`Authenticate a ${c.name} account first.`:void 0,busy:P,onChange:L,explainer:`When enabled, the agent observes your ${c.name} inbox via IMAP IDLE and can read, draft, and send messages.`}})}],29472)}]);
|