@aitne/dashboard 0.1.4 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +5 -1
- package/.next/build-manifest.json +3 -3
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/diagnostics/route-bundle-stats.json +450 -356
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +96 -0
- package/.next/routes-manifest.json +24 -0
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +15 -15
- package/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/activity/page.js.nft.json +1 -1
- package/.next/server/app/activity/page_client-reference-manifest.js +1 -1
- package/.next/server/app/activity.html +1 -1
- package/.next/server/app/activity.rsc +19 -19
- package/.next/server/app/activity.segments/_full.segment.rsc +19 -19
- package/.next/server/app/activity.segments/_head.segment.rsc +4 -4
- package/.next/server/app/activity.segments/_index.segment.rsc +10 -10
- package/.next/server/app/activity.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/activity.segments/activity/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/activity.segments/activity.segment.rsc +4 -4
- package/.next/server/app/analytics/page.js.nft.json +1 -1
- package/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
- package/.next/server/app/analytics.html +1 -1
- package/.next/server/app/analytics.rsc +19 -19
- package/.next/server/app/analytics.segments/_full.segment.rsc +19 -19
- package/.next/server/app/analytics.segments/_head.segment.rsc +4 -4
- package/.next/server/app/analytics.segments/_index.segment.rsc +10 -10
- package/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/analytics.segments/analytics/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/analytics.segments/analytics.segment.rsc +4 -4
- package/.next/server/app/api/[...path]/route.js +1 -1
- package/.next/server/app/api/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +17 -17
- package/.next/server/app/chat.segments/_full.segment.rsc +17 -17
- package/.next/server/app/chat.segments/_head.segment.rsc +4 -4
- package/.next/server/app/chat.segments/_index.segment.rsc +10 -10
- package/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/chat.segments/chat.segment.rsc +3 -3
- package/.next/server/app/connections/calendar/page.js.nft.json +1 -1
- package/.next/server/app/connections/calendar/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/calendar.html +1 -1
- package/.next/server/app/connections/calendar.rsc +18 -18
- package/.next/server/app/connections/calendar.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/calendar.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/calendar.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/calendar.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/calendar.segments/connections/calendar/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/calendar.segments/connections/calendar.segment.rsc +3 -3
- package/.next/server/app/connections/calendar.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/journal/page.js.nft.json +1 -1
- package/.next/server/app/connections/journal/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/journal.html +1 -1
- package/.next/server/app/connections/journal.rsc +16 -16
- package/.next/server/app/connections/journal.segments/_full.segment.rsc +16 -16
- package/.next/server/app/connections/journal.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/journal.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/journal.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/journal.segments/connections/journal/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/connections/journal.segments/connections/journal.segment.rsc +3 -3
- package/.next/server/app/connections/journal.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge/page.js.nft.json +1 -1
- package/.next/server/app/connections/knowledge/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/knowledge.html +1 -1
- package/.next/server/app/connections/knowledge.rsc +18 -18
- package/.next/server/app/connections/knowledge.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/knowledge.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/knowledge.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/knowledge.segments/connections/knowledge/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge.segments/connections/knowledge.segment.rsc +3 -3
- package/.next/server/app/connections/knowledge.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/mail/page.js.nft.json +1 -1
- package/.next/server/app/connections/mail/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/mail.html +1 -1
- package/.next/server/app/connections/mail.rsc +18 -18
- package/.next/server/app/connections/mail.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/mail.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/mail.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/mail.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/mail.segments/connections/mail/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/mail.segments/connections/mail.segment.rsc +3 -3
- package/.next/server/app/connections/mail.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/mcp/page.js.nft.json +1 -1
- package/.next/server/app/connections/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/mcp.html +1 -1
- package/.next/server/app/connections/mcp.rsc +18 -18
- package/.next/server/app/connections/mcp.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/mcp.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/mcp.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/mcp.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/mcp.segments/connections/mcp/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/mcp.segments/connections/mcp.segment.rsc +3 -3
- package/.next/server/app/connections/mcp.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/messaging/page.js.nft.json +1 -1
- package/.next/server/app/connections/messaging/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/messaging.html +1 -1
- package/.next/server/app/connections/messaging.rsc +18 -18
- package/.next/server/app/connections/messaging.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/messaging.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/messaging.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/messaging.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/messaging.segments/connections/messaging/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/messaging.segments/connections/messaging.segment.rsc +3 -3
- package/.next/server/app/connections/messaging.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/page.js.nft.json +1 -1
- package/.next/server/app/connections/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/repositories/page.js.nft.json +1 -1
- package/.next/server/app/connections/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/repositories.html +1 -1
- package/.next/server/app/connections/repositories.rsc +18 -18
- package/.next/server/app/connections/repositories.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/repositories.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/repositories.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/repositories.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/repositories.segments/connections/repositories/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/repositories.segments/connections/repositories.segment.rsc +3 -3
- package/.next/server/app/connections/repositories.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/routines/page.js.nft.json +1 -1
- package/.next/server/app/connections/routines/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/routines.html +1 -1
- package/.next/server/app/connections/routines.rsc +16 -16
- package/.next/server/app/connections/routines.segments/_full.segment.rsc +16 -16
- package/.next/server/app/connections/routines.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/routines.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/routines.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/routines.segments/connections/routines/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/connections/routines.segments/connections/routines.segment.rsc +3 -3
- package/.next/server/app/connections/routines.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections.html +1 -1
- package/.next/server/app/connections.rsc +16 -16
- package/.next/server/app/connections.segments/_full.segment.rsc +16 -16
- package/.next/server/app/connections.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections.segments/connections/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/connections.segments/connections.segment.rsc +4 -4
- package/.next/server/app/conversations/[id]/page.js.nft.json +1 -1
- package/.next/server/app/conversations/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/conversations/page.js.nft.json +1 -1
- package/.next/server/app/conversations/page_client-reference-manifest.js +1 -1
- package/.next/server/app/conversations.html +1 -1
- package/.next/server/app/conversations.rsc +15 -15
- package/.next/server/app/conversations.segments/_full.segment.rsc +15 -15
- package/.next/server/app/conversations.segments/_head.segment.rsc +4 -4
- package/.next/server/app/conversations.segments/_index.segment.rsc +10 -10
- package/.next/server/app/conversations.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/conversations.segments/conversations/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/conversations.segments/conversations.segment.rsc +3 -3
- package/.next/server/app/docs/[[...slug]]/page.js.nft.json +1 -1
- package/.next/server/app/docs/[[...slug]]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/finance/page.js.nft.json +1 -1
- package/.next/server/app/finance/page_client-reference-manifest.js +1 -1
- package/.next/server/app/finance.html +1 -1
- package/.next/server/app/finance.rsc +17 -17
- package/.next/server/app/finance.segments/_full.segment.rsc +17 -17
- package/.next/server/app/finance.segments/_head.segment.rsc +4 -4
- package/.next/server/app/finance.segments/_index.segment.rsc +10 -10
- package/.next/server/app/finance.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/finance.segments/finance/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/finance.segments/finance.segment.rsc +3 -3
- package/.next/server/app/git/page.js.nft.json +1 -1
- package/.next/server/app/git/page_client-reference-manifest.js +1 -1
- package/.next/server/app/git.html +1 -1
- package/.next/server/app/git.rsc +17 -17
- package/.next/server/app/git.segments/_full.segment.rsc +17 -17
- package/.next/server/app/git.segments/_head.segment.rsc +4 -4
- package/.next/server/app/git.segments/_index.segment.rsc +10 -10
- package/.next/server/app/git.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/git.segments/git/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/git.segments/git.segment.rsc +3 -3
- package/.next/server/app/health/page.js.nft.json +1 -1
- package/.next/server/app/health/page_client-reference-manifest.js +1 -1
- package/.next/server/app/health.html +1 -1
- package/.next/server/app/health.rsc +17 -17
- package/.next/server/app/health.segments/_full.segment.rsc +17 -17
- package/.next/server/app/health.segments/_head.segment.rsc +4 -4
- package/.next/server/app/health.segments/_index.segment.rsc +10 -10
- package/.next/server/app/health.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/health.segments/health/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/health.segments/health.segment.rsc +3 -3
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +17 -17
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +17 -17
- package/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/server/app/index.segments/_index.segment.rsc +10 -10
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/knowledge/page.js.nft.json +1 -1
- package/.next/server/app/knowledge/page_client-reference-manifest.js +1 -1
- package/.next/server/app/knowledge.html +1 -1
- package/.next/server/app/knowledge.rsc +18 -18
- package/.next/server/app/knowledge.segments/_full.segment.rsc +18 -18
- package/.next/server/app/knowledge.segments/_head.segment.rsc +4 -4
- package/.next/server/app/knowledge.segments/_index.segment.rsc +10 -10
- package/.next/server/app/knowledge.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/knowledge.segments/knowledge/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/knowledge.segments/knowledge.segment.rsc +4 -4
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/reading/page.js.nft.json +1 -1
- package/.next/server/app/reading/page_client-reference-manifest.js +1 -1
- package/.next/server/app/reading.html +1 -1
- package/.next/server/app/reading.rsc +17 -17
- package/.next/server/app/reading.segments/_full.segment.rsc +17 -17
- package/.next/server/app/reading.segments/_head.segment.rsc +4 -4
- package/.next/server/app/reading.segments/_index.segment.rsc +10 -10
- package/.next/server/app/reading.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/reading.segments/reading/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/reading.segments/reading.segment.rsc +3 -3
- package/.next/server/app/schedule/page.js.nft.json +1 -1
- package/.next/server/app/schedule/page_client-reference-manifest.js +1 -1
- package/.next/server/app/schedule.html +1 -1
- package/.next/server/app/schedule.rsc +17 -17
- package/.next/server/app/schedule.segments/_full.segment.rsc +17 -17
- package/.next/server/app/schedule.segments/_head.segment.rsc +4 -4
- package/.next/server/app/schedule.segments/_index.segment.rsc +10 -10
- package/.next/server/app/schedule.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/schedule.segments/schedule/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/schedule.segments/schedule.segment.rsc +3 -3
- package/.next/server/app/settings/advanced/page.js.nft.json +1 -1
- package/.next/server/app/settings/advanced/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/advanced.html +1 -1
- package/.next/server/app/settings/advanced.rsc +18 -18
- package/.next/server/app/settings/advanced.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/advanced.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/advanced.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/advanced.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/advanced.segments/settings/advanced/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/advanced.segments/settings/advanced.segment.rsc +3 -3
- package/.next/server/app/settings/advanced.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/backends/page.js.nft.json +1 -1
- package/.next/server/app/settings/backends/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/backends.html +1 -1
- package/.next/server/app/settings/backends.rsc +16 -16
- package/.next/server/app/settings/backends.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/backends.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/backends.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/backends.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/backends.segments/settings/backends/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/backends.segments/settings/backends.segment.rsc +3 -3
- package/.next/server/app/settings/backends.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/commands/page.js.nft.json +1 -1
- package/.next/server/app/settings/commands/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/commands.html +1 -1
- package/.next/server/app/settings/commands.rsc +18 -18
- package/.next/server/app/settings/commands.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/commands.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/commands.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/commands.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/commands.segments/settings/commands/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/commands.segments/settings/commands.segment.rsc +3 -3
- package/.next/server/app/settings/commands.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/connections/page.js.nft.json +1 -1
- package/.next/server/app/settings/connections/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/connections.html +1 -1
- package/.next/server/app/settings/connections.rsc +16 -16
- package/.next/server/app/settings/connections.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/connections.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/connections.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/connections.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/connections.segments/settings/connections/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/connections.segments/settings/connections.segment.rsc +3 -3
- package/.next/server/app/settings/connections.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/journal/page.js.nft.json +1 -1
- package/.next/server/app/settings/journal/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/journal.html +1 -1
- package/.next/server/app/settings/journal.rsc +18 -18
- package/.next/server/app/settings/journal.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/journal.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/journal.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/journal.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/journal.segments/settings/journal/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/journal.segments/settings/journal.segment.rsc +3 -3
- package/.next/server/app/settings/journal.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/management/page.js.nft.json +1 -1
- package/.next/server/app/settings/management/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/management.html +1 -1
- package/.next/server/app/settings/management.rsc +18 -18
- package/.next/server/app/settings/management.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/management.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/management.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/management.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/management.segments/settings/management/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/management.segments/settings/management.segment.rsc +3 -3
- package/.next/server/app/settings/management.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/messaging/page.js.nft.json +1 -1
- package/.next/server/app/settings/messaging/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/messaging.html +1 -1
- package/.next/server/app/settings/messaging.rsc +16 -16
- package/.next/server/app/settings/messaging.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/messaging.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/messaging.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/messaging.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/messaging.segments/settings/messaging/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/messaging.segments/settings/messaging.segment.rsc +3 -3
- package/.next/server/app/settings/messaging.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/models/page.js.nft.json +1 -1
- package/.next/server/app/settings/models/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/models.html +1 -1
- package/.next/server/app/settings/models.rsc +18 -18
- package/.next/server/app/settings/models.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/models.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/models.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/models.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/models.segments/settings/models/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/models.segments/settings/models.segment.rsc +3 -3
- package/.next/server/app/settings/models.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/processes/page.js.nft.json +1 -1
- package/.next/server/app/settings/processes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/processes.html +1 -1
- package/.next/server/app/settings/processes.rsc +16 -16
- package/.next/server/app/settings/processes.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/processes.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/processes.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/processes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/processes.segments/settings/processes/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/processes.segments/settings/processes.segment.rsc +3 -3
- package/.next/server/app/settings/processes.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/routines/page.js.nft.json +1 -1
- package/.next/server/app/settings/routines/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/routines.html +1 -1
- package/.next/server/app/settings/routines.rsc +18 -18
- package/.next/server/app/settings/routines.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/routines.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/routines.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/routines.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/routines.segments/settings/routines/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/routines.segments/settings/routines.segment.rsc +3 -3
- package/.next/server/app/settings/routines.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/schedule/page.js.nft.json +1 -1
- package/.next/server/app/settings/schedule/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/schedule.html +1 -1
- package/.next/server/app/settings/schedule.rsc +18 -18
- package/.next/server/app/settings/schedule.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/schedule.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/schedule.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/schedule.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/schedule.segments/settings/schedule/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/schedule.segments/settings/schedule.segment.rsc +3 -3
- package/.next/server/app/settings/schedule.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning/page.js.nft.json +1 -1
- package/.next/server/app/settings/self-learning/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/self-learning.html +1 -1
- package/.next/server/app/settings/self-learning.rsc +18 -18
- package/.next/server/app/settings/self-learning.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/self-learning.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/self-learning.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/self-learning.segments/settings/self-learning/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning.segments/settings/self-learning.segment.rsc +3 -3
- package/.next/server/app/settings/self-learning.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/wiki/page/app-paths-manifest.json +3 -0
- package/.next/server/app/settings/wiki/page/build-manifest.json +18 -0
- package/.next/server/app/settings/wiki/page/next-font-manifest.json +6 -0
- package/.next/server/app/settings/wiki/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/settings/wiki/page/server-reference-manifest.json +4 -0
- package/.next/server/app/settings/wiki/page.js +16 -0
- package/.next/server/app/settings/wiki/page.js.map +5 -0
- package/.next/server/app/settings/wiki/page.js.nft.json +1 -0
- package/.next/server/app/settings/wiki/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings/wiki/timeline/page/app-paths-manifest.json +3 -0
- package/.next/server/app/settings/wiki/timeline/page/build-manifest.json +18 -0
- package/.next/server/app/settings/wiki/timeline/page/next-font-manifest.json +6 -0
- package/.next/server/app/settings/wiki/timeline/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/settings/wiki/timeline/page/server-reference-manifest.json +4 -0
- package/.next/server/app/settings/wiki/timeline/page.js +17 -0
- package/.next/server/app/settings/wiki/timeline/page.js.map +5 -0
- package/.next/server/app/settings/wiki/timeline/page.js.nft.json +1 -0
- package/.next/server/app/settings/wiki/timeline/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings/wiki/timeline.html +1 -0
- package/.next/server/app/settings/wiki/timeline.meta +17 -0
- package/.next/server/app/settings/wiki/timeline.rsc +24 -0
- package/.next/server/app/settings/wiki/timeline.segments/_full.segment.rsc +24 -0
- package/.next/server/app/settings/wiki/timeline.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/wiki/timeline.segments/_index.segment.rsc +11 -0
- package/.next/server/app/settings/wiki/timeline.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki/timeline/__PAGE__.segment.rsc +6 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki/timeline.segment.rsc +5 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki.segment.rsc +5 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings.segment.rsc +5 -0
- package/.next/server/app/settings/wiki.html +1 -0
- package/.next/server/app/settings/wiki.meta +16 -0
- package/.next/server/app/settings/wiki.rsc +27 -0
- package/.next/server/app/settings/wiki.segments/_full.segment.rsc +27 -0
- package/.next/server/app/settings/wiki.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/wiki.segments/_index.segment.rsc +11 -0
- package/.next/server/app/settings/wiki.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/settings/wiki.segments/settings/wiki/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/settings/wiki.segments/settings/wiki.segment.rsc +5 -0
- package/.next/server/app/settings/wiki.segments/settings.segment.rsc +5 -0
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +18 -18
- package/.next/server/app/settings.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings.segments/settings.segment.rsc +4 -4
- package/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/server/app/setup.html +1 -1
- package/.next/server/app/setup.rsc +17 -17
- package/.next/server/app/setup.segments/_full.segment.rsc +17 -17
- package/.next/server/app/setup.segments/_head.segment.rsc +4 -4
- package/.next/server/app/setup.segments/_index.segment.rsc +10 -10
- package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/setup.segments/setup.segment.rsc +3 -3
- package/.next/server/app/trip/page.js.nft.json +1 -1
- package/.next/server/app/trip/page_client-reference-manifest.js +1 -1
- package/.next/server/app/trip.html +1 -1
- package/.next/server/app/trip.rsc +17 -17
- package/.next/server/app/trip.segments/_full.segment.rsc +17 -17
- package/.next/server/app/trip.segments/_head.segment.rsc +4 -4
- package/.next/server/app/trip.segments/_index.segment.rsc +10 -10
- package/.next/server/app/trip.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/trip.segments/trip/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/trip.segments/trip.segment.rsc +3 -3
- package/.next/server/app/wiki/page/app-paths-manifest.json +3 -0
- package/.next/server/app/wiki/page/build-manifest.json +18 -0
- package/.next/server/app/wiki/page/next-font-manifest.json +6 -0
- package/.next/server/app/wiki/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/wiki/page/server-reference-manifest.json +4 -0
- package/.next/server/app/wiki/page.js +15 -0
- package/.next/server/app/wiki/page.js.map +5 -0
- package/.next/server/app/wiki/page.js.nft.json +1 -0
- package/.next/server/app/wiki/page_client-reference-manifest.js +3 -0
- package/.next/server/app/wiki/timeline/page/app-paths-manifest.json +3 -0
- package/.next/server/app/wiki/timeline/page/build-manifest.json +18 -0
- package/.next/server/app/wiki/timeline/page/next-font-manifest.json +6 -0
- package/.next/server/app/wiki/timeline/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/wiki/timeline/page/server-reference-manifest.json +4 -0
- package/.next/server/app/wiki/timeline/page.js +15 -0
- package/.next/server/app/wiki/timeline/page.js.map +5 -0
- package/.next/server/app/wiki/timeline/page.js.nft.json +1 -0
- package/.next/server/app/wiki/timeline/page_client-reference-manifest.js +3 -0
- package/.next/server/app/wiki/timeline.html +1 -0
- package/.next/server/app/wiki/timeline.meta +16 -0
- package/.next/server/app/wiki/timeline.rsc +26 -0
- package/.next/server/app/wiki/timeline.segments/_full.segment.rsc +26 -0
- package/.next/server/app/wiki/timeline.segments/_head.segment.rsc +6 -0
- package/.next/server/app/wiki/timeline.segments/_index.segment.rsc +11 -0
- package/.next/server/app/wiki/timeline.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/wiki/timeline.segments/wiki/timeline/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/wiki/timeline.segments/wiki/timeline.segment.rsc +5 -0
- package/.next/server/app/wiki/timeline.segments/wiki.segment.rsc +5 -0
- package/.next/server/app/wiki.html +1 -0
- package/.next/server/app/wiki.meta +15 -0
- package/.next/server/app/wiki.rsc +26 -0
- package/.next/server/app/wiki.segments/_full.segment.rsc +26 -0
- package/.next/server/app/wiki.segments/_head.segment.rsc +6 -0
- package/.next/server/app/wiki.segments/_index.segment.rsc +11 -0
- package/.next/server/app/wiki.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/wiki.segments/wiki/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/wiki.segments/wiki.segment.rsc +5 -0
- package/.next/server/app-paths-manifest.json +5 -1
- package/.next/server/chunks/0z~i_next_dist_esm_build_templates_app-route_0o_o_hp.js +1 -1
- package/.next/server/chunks/0z~i_next_dist_esm_build_templates_app-route_0o_o_hp.js.map +1 -1
- package/.next/server/chunks/{[root-of-the-server]__00gp8gz._.js → [root-of-the-server]__01knfi.._.js} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0-0wgko._.js → [root-of-the-server]__08_s4yo._.js} +2 -2
- package/.next/server/chunks/ssr/0juq_dashboard__next-internal_server_app_settings_wiki_timeline_page_actions_0czqn6z.js +3 -0
- package/.next/server/chunks/ssr/0juq_dashboard__next-internal_server_app_settings_wiki_timeline_page_actions_0czqn6z.js.map +1 -0
- package/.next/server/chunks/ssr/0mzu_lucide-react_dist_esm_icons_zap_115-27i.js +3 -0
- package/.next/server/chunks/ssr/0mzu_lucide-react_dist_esm_icons_zap_115-27i.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0k3x-na.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0k3x-na.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0km22.v.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0km22.v.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0vui1gx.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0vui1gx.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_11h319t.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_11h319t.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__007ymqm._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__007ymqm._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00vjce2._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00vjce2._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__07pkvm3._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__07pkvm3._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dfuz7_._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dfuz7_._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__117dw_l._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__117dw_l._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-3uzu1._.js +3 -0
- package/.next/server/chunks/ssr/_0-3uzu1._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-6jgyg._.js +3 -0
- package/.next/server/chunks/ssr/_0-6jgyg._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-fv_sr._.js +1 -1
- package/.next/server/chunks/ssr/_0-fv_sr._.js.map +1 -1
- package/.next/server/chunks/ssr/_0.7pki~._.js +3 -0
- package/.next/server/chunks/ssr/_0.7pki~._.js.map +1 -0
- package/.next/server/chunks/ssr/_02s86rg._.js +3 -0
- package/.next/server/chunks/ssr/_02s86rg._.js.map +1 -0
- package/.next/server/chunks/ssr/_03bq.de._.js +3 -0
- package/.next/server/chunks/ssr/_03bq.de._.js.map +1 -0
- package/.next/server/chunks/ssr/_03u6ja0._.js +3 -0
- package/.next/server/chunks/ssr/_03u6ja0._.js.map +1 -0
- package/.next/server/chunks/ssr/_04-.z69._.js +3 -0
- package/.next/server/chunks/ssr/_04-.z69._.js.map +1 -0
- package/.next/server/chunks/ssr/_05rlac0._.js +3 -0
- package/.next/server/chunks/ssr/_05rlac0._.js.map +1 -0
- package/.next/server/chunks/ssr/_05xysbw._.js +3 -0
- package/.next/server/chunks/ssr/_05xysbw._.js.map +1 -0
- package/.next/server/chunks/ssr/_09e_66m._.js +3 -0
- package/.next/server/chunks/ssr/_09e_66m._.js.map +1 -0
- package/.next/server/chunks/ssr/_0_bnan9._.js +3 -0
- package/.next/server/chunks/ssr/_0_bnan9._.js.map +1 -0
- package/.next/server/chunks/ssr/_0b00io4._.js +3 -0
- package/.next/server/chunks/ssr/_0b00io4._.js.map +1 -0
- package/.next/server/chunks/ssr/_0es_2i2._.js +3 -0
- package/.next/server/chunks/ssr/_0es_2i2._.js.map +1 -0
- package/.next/server/chunks/ssr/_0g7_r5i._.js +3 -0
- package/.next/server/chunks/ssr/_0g7_r5i._.js.map +1 -0
- package/.next/server/chunks/ssr/_0hojxqy._.js +1 -1
- package/.next/server/chunks/ssr/_0hojxqy._.js.map +1 -1
- package/.next/server/chunks/ssr/_0ifb9jm._.js +3 -0
- package/.next/server/chunks/ssr/_0ifb9jm._.js.map +1 -0
- package/.next/server/chunks/ssr/_0jl_-u5._.js +3 -0
- package/.next/server/chunks/ssr/_0jl_-u5._.js.map +1 -0
- package/.next/server/chunks/ssr/_0lfuvjg._.js +3 -0
- package/.next/server/chunks/ssr/_0lfuvjg._.js.map +1 -0
- package/.next/server/chunks/ssr/{_0jm~wn-._.js → _0mp7n5i._.js} +2 -2
- package/.next/server/chunks/ssr/{_0jm~wn-._.js.map → _0mp7n5i._.js.map} +1 -1
- package/.next/server/chunks/ssr/_0powsoh._.js +3 -0
- package/.next/server/chunks/ssr/_0powsoh._.js.map +1 -0
- package/.next/server/chunks/ssr/_0q34y9l._.js +3 -0
- package/.next/server/chunks/ssr/_0q34y9l._.js.map +1 -0
- package/.next/server/chunks/ssr/_0q4rpi-._.js +5 -0
- package/.next/server/chunks/ssr/_0q4rpi-._.js.map +1 -0
- package/.next/server/chunks/ssr/_0rc-7d4._.js +3 -0
- package/.next/server/chunks/ssr/_0rc-7d4._.js.map +1 -0
- package/.next/server/chunks/ssr/_0tjsh16._.js +3 -0
- package/.next/server/chunks/ssr/_0tjsh16._.js.map +1 -0
- package/.next/server/chunks/ssr/_0tl98en._.js +1 -1
- package/.next/server/chunks/ssr/_0tl98en._.js.map +1 -1
- package/.next/server/chunks/ssr/{_0._ysx3._.js → _0v_6ros._.js} +2 -2
- package/.next/server/chunks/ssr/_0v_6ros._.js.map +1 -0
- package/.next/server/chunks/ssr/_0vncjim._.js +3 -0
- package/.next/server/chunks/ssr/_0vncjim._.js.map +1 -0
- package/.next/server/chunks/ssr/_0vx-jgf._.js +3 -0
- package/.next/server/chunks/ssr/_0vx-jgf._.js.map +1 -0
- package/.next/server/chunks/ssr/_0w1ez1p._.js +3 -0
- package/.next/server/chunks/ssr/_0w1ez1p._.js.map +1 -0
- package/.next/server/chunks/ssr/_0yl49yk._.js +3 -0
- package/.next/server/chunks/ssr/_0yl49yk._.js.map +1 -0
- package/.next/server/chunks/ssr/_0z1ah9x._.js +1 -1
- package/.next/server/chunks/ssr/_0z1ah9x._.js.map +1 -1
- package/.next/server/chunks/ssr/_0z9ikwn._.js +3 -0
- package/.next/server/chunks/ssr/_0z9ikwn._.js.map +1 -0
- package/.next/server/chunks/ssr/_0z_cp12._.js +3 -0
- package/.next/server/chunks/ssr/_0z_cp12._.js.map +1 -0
- package/.next/server/chunks/ssr/_10hvwg5._.js +3 -0
- package/.next/server/chunks/ssr/_10hvwg5._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_settings_wiki_page_actions_12d~w9l.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_settings_wiki_page_actions_12d~w9l.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_page_actions_026bi.d.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_page_actions_026bi.d.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_timeline_page_actions_06jb4gg.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_timeline_page_actions_06jb4gg.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0bx940s._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0bx940s._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0fo7nqq._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0fo7nqq._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0uxs9-.._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_0uxs9-.._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_activity_page_tsx_08yep46._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_activity_page_tsx_08yep46._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_connections_repositories_page_tsx_08y6paq._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_connections_repositories_page_tsx_08y6paq._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_git_page_tsx_0ah19-6._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_git_page_tsx_0ah19-6._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_schedule_page_tsx_0znc404._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_schedule_page_tsx_0znc404._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_models_page_tsx_0djsx88._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_models_page_tsx_0djsx88._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_schedule_page_tsx_0b8zr2l._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_schedule_page_tsx_0b8zr2l._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_wiki_page_tsx_0..1tkb._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_wiki_page_tsx_0..1tkb._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_app_setup_page_tsx_06k3via._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_setup_page_tsx_06k3via._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_components_connections_slack-card_tsx_0mahejj._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_components_connections_slack-card_tsx_0mahejj._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_components_settings_backend-settings_tsx_0i-tp_u._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_components_settings_backend-settings_tsx_0i-tp_u._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_shared_dist_index_0kuvow-.js +1 -1
- package/.next/server/chunks/ssr/packages_shared_dist_index_0kuvow-.js.map +1 -1
- package/.next/server/middleware/middleware-manifest.json +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/middleware-manifest.json +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/01yix41q.0970.js +1 -0
- package/.next/static/chunks/02qjylw4yp63l.js +1 -0
- package/.next/static/chunks/06y2ddf5x9x_4.js +1 -0
- package/.next/static/chunks/{0ztl~44vjnpe1.js → 08ie9t4zn6n4-.js} +1 -1
- package/.next/static/chunks/091khs5zza4_4.js +1 -0
- package/.next/static/chunks/{0~_56pt8wsmeo.js → 0abhg-m1-acdb.js} +1 -1
- package/.next/static/chunks/0ae.1upy09t--.js +1 -0
- package/.next/static/chunks/0bvcd~k.vfro8.js +1 -0
- package/.next/static/chunks/{0g6.0r0i-wyeg.js → 0eqm47_oikj36.js} +1 -1
- package/.next/static/chunks/0fqugh~hv4my1.js +1 -0
- package/.next/static/chunks/0has04tc4mrik.js +1 -0
- package/.next/static/chunks/0huynm-qbj26k.js +1 -0
- package/.next/static/chunks/0ibq4zul6305p.js +1 -0
- package/.next/static/chunks/0jm_e6e6n~rdn.js +1 -0
- package/.next/static/chunks/0k0.4cksmybb2.js +1 -0
- package/.next/static/chunks/0l07yrtw3fxp5.js +1 -0
- package/.next/static/chunks/0nhqu-sq045x7.js +1 -0
- package/.next/static/chunks/0op3oc-if6n5-.js +3 -0
- package/.next/static/chunks/0p34n6.st3s~1.js +1 -0
- package/.next/static/chunks/0r8nosw42e2m9.js +1 -0
- package/.next/static/chunks/0shx3_mxukfhr.js +1 -0
- package/.next/static/chunks/0thm~t5g5adz1.js +1 -0
- package/.next/static/chunks/0thyr1cngc-j..css +1 -0
- package/.next/static/chunks/0ttdb_354lh4t.js +1 -0
- package/.next/static/chunks/0v..ut2v38yep.js +1 -0
- package/.next/static/chunks/{17npklzvg8-~3.js → 0vhj0k-zy6jhh.js} +1 -1
- package/.next/static/chunks/0wdx410~0~gmn.js +1 -0
- package/.next/static/chunks/0y3ptqa0bbi-h.js +1 -0
- package/.next/static/chunks/{0zbxi2grjtx.c.js → 0zx_~u_zxg_7e.js} +1 -1
- package/.next/static/chunks/{0f3kjzb~5zhc~.js → 10pq~97vgkzro.js} +1 -1
- package/.next/static/chunks/11hlk6.h1of0y.js +1 -0
- package/.next/static/chunks/13w_6v~nprp8j.js +11 -0
- package/.next/static/chunks/14-kkni6ecqaw.js +1 -0
- package/.next/static/chunks/{148a9fv~bo0gq.js → 1555iv~_t.1lp.js} +1 -1
- package/.next/static/chunks/{04bbme2th8s1_.js → 15ec5~pa1pv_z.js} +1 -1
- package/.next/static/chunks/15vc-857cdedi.js +1 -0
- package/.next/static/chunks/16zgco6hwlr-n.js +1 -0
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/.next/types/routes.d.ts +5 -1
- package/.next/types/validator.ts +36 -0
- package/package.json +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__02idks~._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__02idks~._.js.map +0 -1
- package/.next/server/chunks/ssr/_0-8__9s._.js +0 -3
- package/.next/server/chunks/ssr/_0-8__9s._.js.map +0 -1
- package/.next/server/chunks/ssr/_0._ysx3._.js.map +0 -1
- package/.next/server/chunks/ssr/_0.h-tj4._.js +0 -3
- package/.next/server/chunks/ssr/_0.h-tj4._.js.map +0 -1
- package/.next/server/chunks/ssr/_02g4o18._.js +0 -3
- package/.next/server/chunks/ssr/_02g4o18._.js.map +0 -1
- package/.next/server/chunks/ssr/_0463dg_._.js +0 -3
- package/.next/server/chunks/ssr/_0463dg_._.js.map +0 -1
- package/.next/server/chunks/ssr/_04a42pa._.js +0 -3
- package/.next/server/chunks/ssr/_04a42pa._.js.map +0 -1
- package/.next/server/chunks/ssr/_04kt9.8._.js +0 -3
- package/.next/server/chunks/ssr/_04kt9.8._.js.map +0 -1
- package/.next/server/chunks/ssr/_052zlig._.js +0 -3
- package/.next/server/chunks/ssr/_052zlig._.js.map +0 -1
- package/.next/server/chunks/ssr/_060itkv._.js +0 -3
- package/.next/server/chunks/ssr/_060itkv._.js.map +0 -1
- package/.next/server/chunks/ssr/_07p0n9g._.js +0 -3
- package/.next/server/chunks/ssr/_07p0n9g._.js.map +0 -1
- package/.next/server/chunks/ssr/_08mbdt1._.js +0 -3
- package/.next/server/chunks/ssr/_08mbdt1._.js.map +0 -1
- package/.next/server/chunks/ssr/_08r_qwd._.js +0 -3
- package/.next/server/chunks/ssr/_08r_qwd._.js.map +0 -1
- package/.next/server/chunks/ssr/_08xk3kp._.js +0 -3
- package/.next/server/chunks/ssr/_08xk3kp._.js.map +0 -1
- package/.next/server/chunks/ssr/_0938p.1._.js +0 -3
- package/.next/server/chunks/ssr/_0938p.1._.js.map +0 -1
- package/.next/server/chunks/ssr/_0afdsbz._.js +0 -3
- package/.next/server/chunks/ssr/_0afdsbz._.js.map +0 -1
- package/.next/server/chunks/ssr/_0ff5qav._.js +0 -3
- package/.next/server/chunks/ssr/_0ff5qav._.js.map +0 -1
- package/.next/server/chunks/ssr/_0gp8d.p._.js +0 -3
- package/.next/server/chunks/ssr/_0gp8d.p._.js.map +0 -1
- package/.next/server/chunks/ssr/_0k2j6-t._.js +0 -3
- package/.next/server/chunks/ssr/_0k2j6-t._.js.map +0 -1
- package/.next/server/chunks/ssr/_0mix09j._.js +0 -3
- package/.next/server/chunks/ssr/_0mix09j._.js.map +0 -1
- package/.next/server/chunks/ssr/_0mk7dqt._.js +0 -3
- package/.next/server/chunks/ssr/_0mk7dqt._.js.map +0 -1
- package/.next/server/chunks/ssr/_0n168uk._.js +0 -3
- package/.next/server/chunks/ssr/_0n168uk._.js.map +0 -1
- package/.next/server/chunks/ssr/_0nwg6lo._.js +0 -3
- package/.next/server/chunks/ssr/_0nwg6lo._.js.map +0 -1
- package/.next/server/chunks/ssr/_0pwd-nz._.js +0 -3
- package/.next/server/chunks/ssr/_0pwd-nz._.js.map +0 -1
- package/.next/server/chunks/ssr/_0rspzax._.js +0 -3
- package/.next/server/chunks/ssr/_0rspzax._.js.map +0 -1
- package/.next/server/chunks/ssr/_0t-2u_i._.js +0 -3
- package/.next/server/chunks/ssr/_0t-2u_i._.js.map +0 -1
- package/.next/server/chunks/ssr/_0vn5_62._.js +0 -5
- package/.next/server/chunks/ssr/_0vn5_62._.js.map +0 -1
- package/.next/server/chunks/ssr/_0yiz~s5._.js +0 -3
- package/.next/server/chunks/ssr/_0yiz~s5._.js.map +0 -1
- package/.next/server/chunks/ssr/_0~4ta0s._.js +0 -3
- package/.next/server/chunks/ssr/_0~4ta0s._.js.map +0 -1
- package/.next/server/chunks/ssr/_0~5r_8s._.js +0 -3
- package/.next/server/chunks/ssr/_0~5r_8s._.js.map +0 -1
- package/.next/server/chunks/ssr/_115_o9h._.js +0 -3
- package/.next/server/chunks/ssr/_115_o9h._.js.map +0 -1
- package/.next/server/chunks/ssr/_13mk_9n._.js +0 -3
- package/.next/server/chunks/ssr/_13mk_9n._.js.map +0 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_07.4ogy._.js +0 -3
- package/.next/server/chunks/ssr/packages_dashboard_src_07.4ogy._.js.map +0 -1
- package/.next/static/chunks/00p2fat~wl7uz.js +0 -1
- package/.next/static/chunks/07aksg8x5r0d9.js +0 -1
- package/.next/static/chunks/082cjr-p4ubw7.js +0 -1
- package/.next/static/chunks/09hewwcw-ts34.js +0 -1
- package/.next/static/chunks/09j~fmfefj03i.js +0 -1
- package/.next/static/chunks/0adfy5uyh_8c8.js +0 -1
- package/.next/static/chunks/0agoryx~xvt31.js +0 -1
- package/.next/static/chunks/0aoci_z-c0ele.css +0 -1
- package/.next/static/chunks/0atsym5j2dgzw.js +0 -1
- package/.next/static/chunks/0b3tta7tnnbur.js +0 -1
- package/.next/static/chunks/0d02.lqlwe9a_.js +0 -1
- package/.next/static/chunks/0eqyosc.qae5n.js +0 -1
- package/.next/static/chunks/0kkrrex6qm68-.js +0 -1
- package/.next/static/chunks/0lfxqap3b6sar.js +0 -11
- package/.next/static/chunks/0ord2b6oqi.3g.js +0 -1
- package/.next/static/chunks/0rh-ee9ky1ybq.js +0 -1
- package/.next/static/chunks/0t5v~o90gn66f.js +0 -1
- package/.next/static/chunks/0vaymprggmdwi.js +0 -3
- package/.next/static/chunks/0x2vder5-rzy3.js +0 -1
- package/.next/static/chunks/0yk64vsbmwqd8.js +0 -1
- package/.next/static/chunks/0yvzj34_7s6kb.js +0 -1
- package/.next/static/chunks/104za._t2qmr8.js +0 -1
- package/.next/static/chunks/13pe2-ed6nel..js +0 -1
- package/.next/static/chunks/13zn61okwjlyn.js +0 -1
- package/.next/static/chunks/153hm0-366-at.js +0 -1
- package/.next/static/chunks/16k3_-6f7kx97.js +0 -1
- package/.next/static/chunks/18904zqns5ncn.js +0 -1
- /package/.next/server/chunks/{[root-of-the-server]__00gp8gz._.js.map → [root-of-the-server]__01knfi.._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0-0wgko._.js.map → [root-of-the-server]__08_s4yo._.js.map} +0 -0
- /package/.next/static/{CDXVH-99b-ZdHz0Rd9pr_ → lsV2FU1YUtwJPmeiim7tk}/_buildManifest.js +0 -0
- /package/.next/static/{CDXVH-99b-ZdHz0Rd9pr_ → lsV2FU1YUtwJPmeiim7tk}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{CDXVH-99b-ZdHz0Rd9pr_ → lsV2FU1YUtwJPmeiim7tk}/_ssgManifest.js +0 -0
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[82070,a=>{"use strict";a.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"]])},92379,a=>{"use strict";var b=a.i(34542);let c=(0,b.createContext)(null);a.s(["DirtyFieldsProvider",0,function({children:a}){let[d,e]=(0,b.useState)(()=>new Map),[f,g]=(0,b.useState)(0),h=(0,b.useCallback)((a,b,c)=>{e(d=>{if(void 0!==c&&(b===c||Array.isArray(b)&&Array.isArray(c)&&b.length===c.length&&b.every((a,b)=>a===c[b]))){if(!d.has(a))return d;let b=new Map(d);return b.delete(a),b}let e=new Map(d);return e.set(a,b),e})},[]),i=(0,b.useCallback)(a=>{e(b=>{if(!b.has(a))return b;let c=new Map(b);return c.delete(a),c})},[]),j=(0,b.useCallback)(a=>{0!==a.length&&e(b=>{if(!a.some(a=>b.has(a)))return b;let c=new Map(b);for(let b of a)c.delete(b);return c})},[]),k=(0,b.useCallback)(()=>{e(new Map),g(a=>a+1)},[]),l=d.size>0,m=d.size,n=(0,b.useMemo)(()=>({dirtyFields:d,setDirty:h,clearDirty:i,clearDirtyKeys:j,discardAll:k,discardGeneration:f,isDirty:l,dirtyCount:m}),[d,h,i,j,k,f,l,m]);return(0,b.createElement)(c.Provider,{value:n},a)},"useDirtyFields",0,function(){let a=(0,b.useContext)(c);if(!a)throw Error("useDirtyFields must be used inside DirtyFieldsProvider");let{setDirty:d,dirtyFields:e}=a,f=(0,b.useCallback)(a=>async(b,c)=>{let e=a[b];d(b,c,e)},[d]),g=(0,b.useCallback)((a,b)=>e.has(a)?e.get(a):b,[e]);return{...a,deferSaveFor:f,dv:g}},"useDiscardGeneration",0,function(){let a=(0,b.useContext)(c);return a?.discardGeneration??0}])},11307,a=>{"use strict";let b=(0,a.i(5423).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"}]]);a.s(["FolderOpen",0,b],11307)},55406,a=>{"use strict";var b=a.i(59974);async function c({title:a,defaultPath:d}){let e=await b.api.post("/system/pick-directory",{title:a,...d?{defaultPath:d}:{}});if("selected"===e.status&&e.path)return e.path;if("cancelled"===e.status)return null;throw Error(e.message??"Folder picker is unavailable.")}a.s(["pickDirectoryFromDesktop",0,c])},70297,a=>{"use strict";let b=(0,a.i(5423).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"}]]);a.s(["RotateCcw",0,b],70297)},55958,a=>{"use strict";var b=a.i(39752),c=a.i(70297),d=a.i(869);a.s(["RestartRequiredBadge",0,function(){return(0,b.jsxs)(d.Tooltip,{children:[(0,b.jsx)(d.TooltipTrigger,{asChild:!0,children:(0,b.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,b.jsx)(c.RotateCcw,{className:"h-2.5 w-2.5"}),"restart"]})}),(0,b.jsx)(d.TooltipContent,{side:"top",className:"max-w-[220px] text-xs",children:"Changing this value requires a daemon restart to take effect."})]})}])},59809,a=>{"use strict";var b=a.i(39752),c=a.i(52938),d=a.i(81130),e=a.i(79668),f=a.i(869),g=a.i(48558);a.s(["DocsHelpInline",0,function({docId:a,anchor:h=null,label:i,className:j}){let k=(0,d.useQueryClient)(),l=i??"Help";return(0,b.jsx)(f.TooltipProvider,{delayDuration:300,children:(0,b.jsxs)(f.Tooltip,{children:[(0,b.jsx)(f.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",onClick:b=>{b.preventDefault(),b.stopPropagation(),(0,e.openDocsHelpSlideover)(k,{docId:a,anchor:h,autoFocusComposer:!1})},className:(0,g.cn)("inline-flex h-5 w-5 items-center justify-center rounded-full text-muted-foreground/70 transition hover:bg-accent hover:text-foreground",j),"aria-label":`Open help — ${l}`,"data-testid":"docs-help-inline",children:(0,b.jsx)(c.HelpCircle,{className:"h-3.5 w-3.5","aria-hidden":"true"})})}),(0,b.jsx)(f.TooltipContent,{side:"top",children:(0,b.jsx)("span",{children:l})})]})})}])},56295,a=>{"use strict";var b=a.i(39752),c=a.i(34542),d=a.i(54506),e=a.i(11307),f=a.i(7037),g=a.i(43179),h=a.i(70297),i=a.i(96336),j=a.i(85857);a.i(70010);var k=a.i(82070),l=a.i(7384),m=a.i(21218),n=a.i(30400),o=a.i(8212),p=a.i(55958),q=a.i(59809),r=a.i(55406),s=a.i(92379);let t=new Set(k.RESTART_REQUIRED_KEY_TUPLE);function u(a){return null===a?"":String(a)}a.s(["ConfigSection",0,function({title:a,children:c,helpDocId:d,helpAnchor:e}){return(0,b.jsxs)(n.Card,{children:[(0,b.jsx)(n.CardHeader,{children:(0,b.jsxs)(n.CardTitle,{className:"flex items-center gap-1.5",children:[(0,b.jsx)("span",{children:a}),d&&(0,b.jsx)(q.DocsHelpInline,{docId:d,anchor:e??null,label:a})]})}),(0,b.jsx)("div",{className:"space-y-0.5 [&>p]:max-w-prose",children:c})]})},"EditableArrayField",0,function({label:a,values:d,configKey:f,variant:h="gray",placeholder:i="Add item...",directoryPicker:k,modified:n,onSave:q}){let s=t.has(f),[u,v]=(0,c.useState)(""),[w,x]=(0,c.useState)(!1),[y,z]=(0,c.useState)(null),A=async()=>{let a=u.trim();if(!(!a||d.includes(a))){x(!0),z(null);try{await q(f,[...d,a]),v("")}catch{}finally{x(!1)}}},B=async a=>{x(!0);try{await q(f,d.filter(b=>b!==a))}finally{x(!1)}},C=async()=>{if(k){x(!0),z(null);try{let a=await (0,r.pickDirectoryFromDesktop)({title:k.title,defaultPath:u.trim()||k.defaultPath});if(!a)return;if(d.includes(a)){v(a),z("That directory is already in the list.");return}await q(f,[...d,a]),v("")}catch(a){z(a instanceof Error?a.message:"Folder picker is unavailable.")}finally{x(!1)}}};return(0,b.jsxs)("div",{className:`py-2${n?" border-l-2 border-blue-500 pl-2 -ml-1 rounded":""}`,"data-config-key":f,children:[(0,b.jsxs)("p",{className:"text-sm text-muted-foreground mb-2 inline-flex items-center gap-1.5",children:[a,s&&(0,b.jsx)(p.RestartRequiredBadge,{}),n&&(0,b.jsx)("span",{className:"text-[10px] font-medium text-blue-600 dark:text-blue-400",children:"modified"})]}),(0,b.jsxs)("div",{className:"flex flex-wrap gap-1.5 mb-2",children:[d.map(a=>(0,b.jsxs)(l.Badge,{variant:h,className:"gap-1 pr-1",children:[a,(0,b.jsx)("button",{onClick:()=>B(a),disabled:w,className:"ml-0.5 rounded-sm hover:bg-black/10 dark:hover:bg-white/10 p-0.5 transition-colors",children:(0,b.jsx)(j.X,{className:"h-3 w-3"})})]},a)),0===d.length&&(0,b.jsx)("span",{className:"text-xs text-muted-foreground italic",children:"No items"})]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(o.Input,{value:u,onChange:a=>v(a.target.value),onKeyDown:a=>{"Enter"===a.key&&A()},placeholder:i,className:"max-w-[320px]",disabled:w}),k&&(0,b.jsxs)(m.Button,{size:"sm",variant:"outline",onClick:C,disabled:w,children:[(0,b.jsx)(e.FolderOpen,{className:"h-3.5 w-3.5 mr-1"}),k.buttonLabel??"Choose"]}),(0,b.jsxs)(m.Button,{size:"sm",variant:"outline",onClick:A,disabled:!u.trim()||w,children:[(0,b.jsx)(g.Plus,{className:"h-3.5 w-3.5 mr-1"}),"Add"]})]}),y&&(0,b.jsx)("p",{className:"mt-1 text-xs text-destructive",children:y})]})},"EditableBooleanField",0,function({label:a,value:d,configKey:e,description:f,modified:g,defaultValue:i,onSave:j}){let[k,l]=(0,c.useState)(!1),n=t.has(e),o=void 0!==i&&d===i,q=async()=>{l(!0);try{await j(e,!d)}finally{l(!1)}},r=async()=>{if(void 0!==i){l(!0);try{await j(e,i)}finally{l(!1)}}};return(0,b.jsx)("div",{className:`py-1.5 group${g?" border-l-2 border-blue-500 pl-2 -ml-1 rounded":""}`,"data-config-key":e,children:(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("p",{className:"text-sm text-muted-foreground inline-flex items-center gap-1.5",children:[a,n&&(0,b.jsx)(p.RestartRequiredBadge,{}),g&&(0,b.jsx)("span",{className:"text-[10px] font-medium text-blue-600 dark:text-blue-400",children:"modified"}),void 0!==i&&!o&&!g&&(0,b.jsxs)("button",{type:"button",onClick:r,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,b.jsx)(h.RotateCcw,{className:"h-2.5 w-2.5"}),"reset"]})]}),f&&(0,b.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:f})]}),(0,b.jsx)(m.Button,{variant:d?"default":"outline",size:"sm",onClick:q,disabled:k,children:d?"Enabled":"Disabled"})]})})},"EditableField",0,function({label:a,value:e,configKey:g,type:k="text",suffix:l,description:n,min:q,max:r,nullable:v=!1,emptyLabel:w="Not set",modified:x,defaultValue:y,onSave:z}){let A=t.has(g),[B,C]=(0,c.useState)(!1),[D,E]=(0,c.useState)(u(e)),[F,G]=(0,c.useState)(!1),[H,I]=(0,c.useState)(null),J=(0,c.useRef)(null),K=(0,s.useDiscardGeneration)(),L=(0,c.useRef)(K);(0,c.useEffect)(()=>{K!==L.current&&(L.current=K,C(!1),I(null))},[K]),(0,c.useEffect)(()=>{B&&J.current?.focus()},[B]),(0,c.useEffect)(()=>{B||E(u(e))},[e,B]);let M=void 0!==y&&e===y,N=async a=>{if(a.stopPropagation(),void 0!==y){G(!0);try{await z(g,y)}finally{G(!1)}}},O=async a=>{a.stopPropagation(),G(!0);try{await z(g,null)}finally{G(!1)}},P=async()=>{let a=D.trim(),b=v&&""===a?null:"number"===k?Number(D):D;if(b===e)return void C(!1);if(null!==b&&"number"===k&&(void 0!==q||void 0!==r)&&(void 0!==q&&b<q||void 0!==r&&b>r))return void I(`Must be ${q??""}–${r??""}`);I(null),G(!0);try{await z(g,b),C(!1)}catch{}finally{G(!1)}};return B?(0,b.jsxs)("div",{className:"py-1.5","data-config-key":g,children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)("span",{className:"text-sm text-muted-foreground shrink-0 min-w-[140px] inline-flex items-center gap-1.5",children:[a,A&&(0,b.jsx)(p.RestartRequiredBadge,{})]}),(0,b.jsx)(o.Input,{ref:J,type:k,value:D,onChange:a=>{E(a.target.value),I(null)},onKeyDown:a=>{"Enter"===a.key&&P(),"Escape"===a.key&&(E(u(e)),C(!1))},className:"max-w-[240px]",disabled:F,min:q,max:r}),l&&(0,b.jsx)("span",{className:"text-xs text-muted-foreground",children:l}),(0,b.jsx)(m.Button,{size:"sm",variant:"ghost",onClick:P,disabled:F,className:"h-7 w-7 p-0",children:(0,b.jsx)(d.Check,{className:"h-3.5 w-3.5"})}),(0,b.jsx)(m.Button,{size:"sm",variant:"ghost",onClick:()=>{E(u(e)),I(null),C(!1)},className:"h-7 w-7 p-0",children:(0,b.jsx)(j.X,{className:"h-3.5 w-3.5"})})]}),H&&(0,b.jsx)("p",{className:"text-xs text-destructive mt-1 ml-[148px]",children:H}),n&&!H&&(0,b.jsx)("p",{className:"text-xs text-muted-foreground mt-1 ml-[148px]",children:n})]}):(0,b.jsxs)("div",{className:`py-1.5 group cursor-pointer rounded px-1 -mx-1 hover:bg-muted/50 transition-colors${x?" border-l-2 border-blue-500 pl-2":""}`,"data-config-key":g,onClick:()=>C(!0),children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("span",{className:"text-sm text-muted-foreground inline-flex items-center gap-1.5",children:[a,A&&(0,b.jsx)(p.RestartRequiredBadge,{})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[x&&(0,b.jsx)("span",{className:"text-[10px] font-medium text-blue-600 dark:text-blue-400",children:"modified"}),void 0!==y&&!M&&!x&&(0,b.jsxs)("button",{type:"button",onClick:N,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,b.jsx)(h.RotateCcw,{className:"h-2.5 w-2.5"}),"reset"]}),v&&null!==e&&!x&&(0,b.jsxs)("button",{type:"button",onClick:O,title:`Clear — sets ${a} to ${w}`,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,b.jsx)(i.Trash2,{className:"h-2.5 w-2.5"}),"clear"]}),(0,b.jsx)("span",{className:"text-sm font-medium text-foreground",children:null===e?w:"$"===l?`$${e}`:l?`${e} ${l}`:String(e)}),(0,b.jsx)(f.Pencil,{className:"h-3 w-3 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity"})]})]}),n&&(0,b.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:n})]})}])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=_13mk_9n._.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/shared/src/editable-config-keys.ts","../../../../../../packages/dashboard/src/lib/hooks/use-dirty-fields.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/folder-open.ts","../../../../../../packages/dashboard/src/lib/directory-picker.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/rotate-ccw.ts","../../../../../../packages/dashboard/src/components/settings/restart-required-badge.tsx","../../../../../../packages/dashboard/src/components/docs/docs-help-inline.tsx","../../../../../../packages/dashboard/src/components/settings/editors.tsx"],"sourcesContent":["/**\n * Canonical list of config keys editable via the dashboard PATCH /config endpoint.\n *\n * Both the daemon (env-writer.ts) and the dashboard (useSaveConfig) import from here\n * so the set of accepted keys is enforced at compile time in both packages.\n */\n\nexport const EDITABLE_RUNTIME_KEY_TUPLE = [\n \"advisorEnabled\", \"advisorModel\",\n \"maxConcurrentSessions\", \"maxReactiveSessions\", \"delegatedProxyMaxConcurrent\", \"executeTimeoutMinutes\",\n // DELEGATED-TASK-MODE-DESIGN.md §17 — task-mode kill switch / quotas /\n // defaults. The heavy enable flag is Approve-tier semantically, but is\n // editable here too so the user can flip it from the dashboard once\n // they confirm the cost class.\n \"delegatedTaskModeEnabled\", \"delegatedTaskMaxPerDay\",\n \"delegatedTaskDefaultMaxToolCalls\", \"delegatedTaskDefaultMaxBudgetUsd\",\n \"delegatedTaskDefaultTimeoutMs\", \"delegatedTaskHeavyEnabled\",\n // DELEGATED-TASK-MODE-DESIGN.md §13 Phase 3 — three independent\n // optimization kill switches. Each defaults off (cache, pool) or on\n // (structured output) per the design doc; flipping any one does not\n // affect the others. See runtime-settings.ts for the per-field rationale.\n \"delegatedTaskStructuredOutputEnabled\",\n \"delegatedTaskSubprocessPoolEnabled\", \"delegatedTaskSubprocessPoolTtlSeconds\",\n \"delegatedTaskCacheEnabled\", \"delegatedTaskCacheTtlSeconds\",\n \"delegatedTaskCacheMaxEntries\",\n \"agentDisplayName\",\n \"character\",\n \"sessionTimeoutDmMinutes\", \"sessionTimeoutChannelMinutes\", \"sessionTimeoutDashboardMinutes\",\n \"historyInjectionMaxMessages\", \"historyInjectionMaxTokens\",\n \"historyOtherSurfaceWindowMinutes\",\n \"dmStalenessStrict\",\n \"proactiveForwardChannelTimelineEnabled\",\n \"proactiveForwardForceFreshSession\",\n \"timezone\", \"dayBoundaryHour\", \"hourlyCheckEnabled\", \"hourlyCheckIntervalMinutes\",\n \"hourlyCheckActiveStartHour\", \"hourlyCheckActiveEndHour\", \"hourlyCheckMinObservations\",\n // cost-reduction-structural §B — three-stage gate knobs.\n \"hourlyCheckGateMode\", \"hourlyCheckStage2Enabled\", \"hourlyCheckHeartbeatHours\",\n \"hourlyCheckLowSignalPendingCeiling\",\n \"authProbeDisabled\", \"authPreflightFreshnessMs\",\n \"maxNotificationsPerHour\", \"maxNotificationsPerDay\",\n \"quietHoursStart\", \"quietHoursEnd\", \"batchIntervalMinutes\", \"primaryPlatform\",\n \"defaultNotificationPlatforms\",\n \"slackOwnerUserId\", \"telegramOwnerChatId\", \"discordOwnerUserId\",\n \"whatsappEnabled\", \"whatsappOwnerPhone\", \"whatsappAuthDir\",\n \"disallowedTools\", \"allowedToolsOverride\",\n \"claudeExecutionPermissionMode\",\n \"codexExecutionPermissionMode\",\n \"geminiExecutionPermissionMode\",\n \"externalObsidianVaultPath\", \"externalObsidianVaultName\",\n // SETUP-FLOW-REDESIGN-PLAN §6.3 — kill switch for the external-vault\n // branch of `ObsidianWatcher`. Editable so the Notes step's \"Watch for\n // changes\" checkbox round-trips through `PATCH /api/config`.\n \"externalObsidianWatch\",\n \"obsidianDebounceSeconds\",\n // Management Mode — primary-vault fields introduced by the management-mode\n // redesign. Editable via the settings dialog once Phase 2's migration API\n // lands; Phase 1 persists values if set but enters degraded mode if unset\n // while vaultMode === \"obsidian\".\n \"primaryVaultPath\", \"primaryVaultName\",\n // gitRepos / gitWatchedRepos / githubRepos removed at the unified-\n // repositories cutover (docs/design/appendices/unified-repositories.md);\n // their data lives in the `repositories` DB table now. `gitAccounts`\n // stays — it is 1:N over rows.\n \"gitAccounts\",\n \"googleCalendarId\", \"notionDatabaseIds\",\n \"schedulePollIntervalSeconds\",\n // SCHEDULED-DM-IMPLEMENTATION-PLAN §3.6.1 / §6.6.1 — max delay budget\n // for scheduled.dm gate-acquisition before the briefing is dropped.\n \"maxBriefingDelayMinutes\",\n \"gitPollIntervalSeconds\", \"gitPushOverdueMinutes\", \"gitProjectUpdateDebounceMinutes\",\n \"notionPollIntervalSeconds\", \"calendarPollIntervalSeconds\",\n \"gmailPollIntervalSeconds\",\n \"githubPollIntervalSeconds\",\n \"mcpAutoProbeIntervalMinutes\",\n \"delegatedProbeIntervalMinutes\",\n \"enabledMailProviders\",\n \"mailPollIntervalSeconds\",\n \"mailIdleEnabled\",\n \"mailIdleInstabilityThreshold\",\n \"mailIdleFallbackRecoveryMinutes\",\n \"mailMaxMessagesPerPoll\",\n \"mailAuthFailureRetryHours\",\n \"hourlyObservationCharBudget\",\n // cost-reduction-structural §A — observation summarizer knobs.\n \"observationSummarizerEnabled\",\n \"observationSummarizerConcurrency\",\n \"observationSummarizerMaxCallsPerMinute\",\n \"observationSummarizerQueueLimit\",\n \"observationSummarizerTimeoutMs\",\n \"vipMailSenders\",\n \"outlookDeltaPageSize\",\n \"outlookGraphConcurrency\",\n \"imapReconnectBaseMs\",\n \"imapReconnectMaxMs\",\n \"autonomousDailyCostCapUsd\",\n \"autonomousMonthlyCostCapUsd\",\n // B-007 — primary language + vault mode selected at setup, editable later\n \"primaryLanguage\",\n \"vaultMode\",\n // Voice transcription opt-in (docs/design/appendices/voice-transcription.md).\n // The dashboard's recommended path is POST /api/voice/install — that flow\n // downloads the Whisper weights with progress UI, persists the flag, and\n // triggers a daemon self-restart so the next inbound voice attachment\n // observes the model on disk. A direct PATCH here is technically accepted\n // (the env-writer plumbing needs to round-trip the key on read-back, and\n // the transcriber's getter picks up the new value live) but the model\n // weights would only download lazily on the FIRST audio attachment, with\n // no UI feedback. The RESTART_REQUIRED_KEY_TUPLE entry surfaces a badge\n // so an operator who PATCHes around the install flow is nudged to use it.\n \"voiceTranscriptionEnabled\",\n // Operator's primary spoken language for the post-auto-detect fallback.\n // The transcriber reads this through a getter (see VoiceTranscriber's\n // `primaryLanguage` option), so a runtime PATCH takes effect on the next\n // inbound audio attachment without a daemon restart — that's why this\n // key is editable at runtime AND deliberately absent from\n // RESTART_REQUIRED_KEY_TUPLE.\n \"voiceTranscriptionPrimaryLanguage\",\n] as const;\n\nexport const EDITABLE_BOOTSTRAP_KEY_TUPLE = [\n \"apiPort\",\n] as const;\n\nexport const RESTART_REQUIRED_KEY_TUPLE = [\n \"apiPort\",\n \"externalObsidianVaultName\", \"externalObsidianVaultPath\",\n // SETUP-FLOW-REDESIGN-PLAN §6.3 — the kill switch is read once at boot in\n // index.ts when ObsidianWatcher is registered; flipping it at runtime\n // updates the integrations.md Note Sources line (via applyConfigUpdates\n // chokepoint) but does NOT start/stop the live chokidar watcher. Surface\n // that honestly via the dashboard's restart-required badge — same posture\n // as `externalObsidianVaultPath` above, which has the same constraint.\n \"externalObsidianWatch\",\n \"primaryVaultPath\", \"primaryVaultName\",\n \"slackOwnerUserId\",\n \"telegramOwnerChatId\",\n \"discordOwnerUserId\",\n \"whatsappEnabled\", \"whatsappOwnerPhone\", \"whatsappAuthDir\",\n \"notionDatabaseIds\",\n \"gmailPollIntervalSeconds\",\n // DelegatedProbeObserver (DELEGATED-MODE-V2 §7.1) captures `intervalMs`\n // at construction time and registers a single setInterval — a hot PATCH\n // updates `config.delegatedProbeIntervalMinutes` but the timer keeps\n // firing on the old cadence until restart. Surface that honestly via\n // the dashboard's restart-required badge rather than silently ignoring\n // the change.\n \"delegatedProbeIntervalMinutes\",\n // GitWatcher / delegated Git cron / GitHubPoller capture their cadence in\n // constructors and bind it to timers. Runtime PATCH updates config storage,\n // but the live timers keep the old cadence until restart; flag honestly.\n \"gitPollIntervalSeconds\",\n \"githubPollIntervalSeconds\",\n // The transcriber itself reads `enabled` through a live getter when no\n // env override is set, so the flag flips immediately for inference\n // routing — no restart needed for that piece. The badge here exists\n // for a different reason: a bare PATCH from false → true does NOT\n // pre-download the Whisper weights, so the next inbound voice\n // attachment silently lazy-fetches them at inference time and the\n // first transcript is delayed by the full download (often tens of\n // seconds) with no UI feedback. The /api/voice/install path downloads\n // with progress + auto-restart; the badge nudges operators who bypass\n // it. (When `PA_VOICE_TRANSCRIPTION_ENABLED` IS set, the transcriber\n // binds at construction and the flag really does need a restart.)\n \"voiceTranscriptionEnabled\",\n // ObservationSummarizerWorker reads these constructor-time options once\n // at startup (cost-reduction-structural §A): the worker is registered\n // only when `observationSummarizerEnabled=true` at boot, and concurrency\n // / per-call timeout / rate limit / queue cap are captured by the\n // worker constructor and bound to the running drain loops. A runtime\n // PATCH updates `settings`/`AgentConfig` storage but does not re-create\n // the worker — flag honestly via the restart badge so an operator that\n // bumped the rate limit knows the change isn't live yet.\n \"observationSummarizerEnabled\",\n \"observationSummarizerConcurrency\",\n \"observationSummarizerMaxCallsPerMinute\",\n \"observationSummarizerQueueLimit\",\n \"observationSummarizerTimeoutMs\",\n] as const;\n\nexport type EditableRuntimeKey = (typeof EDITABLE_RUNTIME_KEY_TUPLE)[number];\nexport type EditableBootstrapKey = (typeof EDITABLE_BOOTSTRAP_KEY_TUPLE)[number];\nexport type EditableConfigKey = EditableRuntimeKey | EditableBootstrapKey;\nexport type RestartRequiredKey = (typeof RESTART_REQUIRED_KEY_TUPLE)[number];\n","\"use client\";\n\nimport {\n createContext,\n createElement,\n useCallback,\n useContext,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport type { EditableConfigKey } from \"@aitne/shared\";\nimport type { ConfigValue } from \"@/lib/hooks/use-save-config\";\n\n/** Deep-equal for ConfigValue (handles string[] by value). */\nfunction valuesEqual(a: ConfigValue, b: ConfigValue): boolean {\n if (a === b) return true;\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((v, i) => v === b[i]);\n }\n return false;\n}\n\ninterface DirtyFieldsContextValue {\n /** Map of keys with uncommitted draft values. */\n dirtyFields: Map<EditableConfigKey, ConfigValue>;\n /** Register (or update) a dirty value.\n * If `serverValue` is provided and matches `value`, the key is removed\n * from the dirty set instead (edit-back / toggle-back detection). */\n setDirty: (key: EditableConfigKey, value: ConfigValue, serverValue?: ConfigValue) => void;\n /** Remove a single key from the dirty set. */\n clearDirty: (key: EditableConfigKey) => void;\n /** Remove multiple keys from the dirty set. */\n clearDirtyKeys: (keys: EditableConfigKey[]) => void;\n /** Discard all uncommitted changes. */\n discardAll: () => void;\n /** Monotonically increasing counter — bumped on every discard so field\n * components can reset their local drafts via a key or effect. */\n discardGeneration: number;\n /** True when at least one field has an uncommitted change. */\n isDirty: boolean;\n /** Number of uncommitted fields. */\n dirtyCount: number;\n}\n\nconst DirtyFieldsContext = createContext<DirtyFieldsContextValue | null>(null);\n\n/**\n * Provides dirty-field tracking for batched settings save.\n * Mount once in the settings layout — consumed by `useDirtyFields()`.\n */\nexport function DirtyFieldsProvider({ children }: { children: ReactNode }) {\n const [dirtyFields, setDirtyFields] = useState<\n Map<EditableConfigKey, ConfigValue>\n >(() => new Map());\n const [discardGeneration, setDiscardGeneration] = useState(0);\n\n const setDirty = useCallback(\n (key: EditableConfigKey, value: ConfigValue, serverValue?: ConfigValue) => {\n setDirtyFields((prev) => {\n // If the new value matches the server value, remove from dirty\n // (edit-back / toggle-back detection).\n if (serverValue !== undefined && valuesEqual(value, serverValue)) {\n if (!prev.has(key)) return prev;\n const next = new Map(prev);\n next.delete(key);\n return next;\n }\n const next = new Map(prev);\n next.set(key, value);\n return next;\n });\n },\n [],\n );\n\n const clearDirty = useCallback((key: EditableConfigKey) => {\n setDirtyFields((prev) => {\n if (!prev.has(key)) return prev;\n const next = new Map(prev);\n next.delete(key);\n return next;\n });\n }, []);\n\n const clearDirtyKeys = useCallback((keys: EditableConfigKey[]) => {\n if (keys.length === 0) return;\n setDirtyFields((prev) => {\n if (!keys.some((k) => prev.has(k))) return prev;\n const next = new Map(prev);\n for (const key of keys) next.delete(key);\n return next;\n });\n }, []);\n\n const discardAll = useCallback(() => {\n setDirtyFields(new Map());\n setDiscardGeneration((g) => g + 1);\n }, []);\n\n const isDirty = dirtyFields.size > 0;\n const dirtyCount = dirtyFields.size;\n\n const value = useMemo<DirtyFieldsContextValue>(\n () => ({\n dirtyFields,\n setDirty,\n clearDirty,\n clearDirtyKeys,\n discardAll,\n discardGeneration,\n isDirty,\n dirtyCount,\n }),\n [dirtyFields, setDirty, clearDirty, clearDirtyKeys, discardAll, discardGeneration, isDirty, dirtyCount],\n );\n\n return createElement(DirtyFieldsContext.Provider, { value }, children);\n}\n\n/**\n * Returns the current discard generation counter, or 0 if outside a\n * DirtyFieldsProvider. Field components use this to reset local editing\n * state when the user clicks Discard in the save bar.\n */\nexport function useDiscardGeneration(): number {\n const ctx = useContext(DirtyFieldsContext);\n return ctx?.discardGeneration ?? 0;\n}\n\n/**\n * Access the dirty-fields context. Must be called inside `DirtyFieldsProvider`.\n *\n * Returns:\n * - `deferSaveFor(config)` — returns a `SaveFieldFn` with toggle-back detection\n * - `dv(key, serverValue)` — returns dirty value if it exists, else serverValue\n * - all raw context fields for the save bar\n */\nexport function useDirtyFields() {\n const ctx = useContext(DirtyFieldsContext);\n if (!ctx) {\n throw new Error(\"useDirtyFields must be used inside DirtyFieldsProvider\");\n }\n\n const { setDirty, dirtyFields } = ctx;\n\n /**\n * Returns a `SaveFieldFn` that compares against `serverConfig` to detect\n * toggle-back (editing a value back to the server value removes the dirty\n * entry instead of keeping a spurious one).\n *\n * The returned function is a new closure per call. Pages call this after\n * the `if (!config)` guard, so it cannot be wrapped in `useMemo` without\n * violating hooks rules. The allocation is negligible — field components\n * do not include `onSave` in any dependency array.\n */\n const deferSaveFor = useCallback(\n (serverConfig: object) => {\n return async (key: EditableConfigKey, value: ConfigValue) => {\n const serverValue = (serverConfig as Record<string, ConfigValue>)[key];\n setDirty(key, value, serverValue);\n };\n },\n [setDirty],\n );\n\n /** Return dirty value if it exists, else the server value. */\n const dv = useCallback(\n <T extends ConfigValue>(key: EditableConfigKey, serverValue: T): T => {\n if (dirtyFields.has(key)) {\n return dirtyFields.get(key) as T;\n }\n return serverValue;\n },\n [dirtyFields],\n );\n\n return {\n ...ctx,\n deferSaveFor,\n dv,\n };\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name FolderOpen\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/folder-open\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderOpen = createLucideIcon('FolderOpen', [\n [\n 'path',\n {\n 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',\n key: 'usdka0',\n },\n ],\n]);\n\nexport default FolderOpen;\n","import { api } from \"@/lib/api-client\";\nimport type { DirectoryPickerResponse } from \"@/lib/api-types\";\n\nexport async function pickDirectoryFromDesktop({\n title,\n defaultPath,\n}: {\n title: string;\n defaultPath?: string;\n}): Promise<string | null> {\n const response = await api.post<DirectoryPickerResponse>(\n \"/system/pick-directory\",\n {\n title,\n ...(defaultPath ? { defaultPath } : {}),\n },\n );\n\n if (response.status === \"selected\" && response.path) {\n return response.path;\n }\n if (response.status === \"cancelled\") {\n return null;\n }\n throw new Error(response.message ?? \"Folder picker is unavailable.\");\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name RotateCcw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/rotate-ccw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RotateCcw = createLucideIcon('RotateCcw', [\n ['path', { d: 'M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8', key: '1357e3' }],\n ['path', { d: 'M3 3v5h5', key: '1xhq8a' }],\n]);\n\nexport default RotateCcw;\n","\"use client\";\n\nimport { RotateCcw } from \"lucide-react\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\n\n/**\n * Inline badge shown next to field labels whose config key requires\n * a daemon restart after saving.\n */\nexport function RestartRequiredBadge() {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <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\">\n <RotateCcw className=\"h-2.5 w-2.5\" />\n restart\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\" className=\"max-w-[220px] text-xs\">\n Changing this value requires a daemon restart to take effect.\n </TooltipContent>\n </Tooltip>\n );\n}\n","\"use client\";\n\nimport { HelpCircle } from \"lucide-react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { openDocsHelpSlideover } from \"@/lib/docs/slideover-cache\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { cn } from \"@/lib/utils\";\n\ninterface DocsHelpInlineProps {\n /** Doc to load when the slide-over opens. */\n docId: string;\n /**\n * Optional slugified heading id to scroll to once the doc loads\n * (e.g. `what-it-does`). Lets a settings label deep-link into a\n * specific section of the relevant doc.\n */\n anchor?: string | null;\n /** Tooltip label. Falls back to `Help` for an icon-only affordance. */\n label?: string;\n /** Tightens spacing for inline use against a label or value. */\n className?: string;\n}\n\n/**\n * Small `?` icon for inline placement next to a settings label, an\n * empty-state title, or any other dense control where the global header\n * help button is too far away (DOCS_QA_DESIGN.md §8.4 E6, P5 polish).\n *\n * Reuses the `<DocsHelpSlideover>` mounted by `<LayoutShell>`; the\n * `?` icon is purely an opener that pushes a state update through the\n * shared `[\"docs-help-slideover\"]` cache cell.\n */\nexport function DocsHelpInline({\n docId,\n anchor = null,\n label,\n className,\n}: DocsHelpInlineProps) {\n const queryClient = useQueryClient();\n const tip = label ?? \"Help\";\n\n // Self-wrap in TooltipProvider so callers (including direct test\n // renders of a settings card) do not need to ship one. Radix supports\n // nesting; the global `<LayoutShell>` provider stays in effect.\n return (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n openDocsHelpSlideover(queryClient, {\n docId,\n anchor,\n autoFocusComposer: false,\n });\n }}\n className={cn(\n \"inline-flex h-5 w-5 items-center justify-center rounded-full text-muted-foreground/70 transition hover:bg-accent hover:text-foreground\",\n className,\n )}\n aria-label={`Open help — ${tip}`}\n data-testid=\"docs-help-inline\"\n >\n <HelpCircle className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <span>{tip}</span>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { Check, FolderOpen, Pencil, Plus, RotateCcw, Trash2, X } from \"lucide-react\";\nimport { RESTART_REQUIRED_KEY_TUPLE } from \"@aitne/shared\";\nimport type { EditableConfigKey } from \"@aitne/shared\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Input } from \"@/components/ui/input\";\nimport { RestartRequiredBadge } from \"@/components/settings/restart-required-badge\";\nimport { DocsHelpInline } from \"@/components/docs/docs-help-inline\";\nimport { pickDirectoryFromDesktop } from \"@/lib/directory-picker\";\nimport { useDiscardGeneration } from \"@/lib/hooks/use-dirty-fields\";\nimport type { SaveFieldFn } from \"@/lib/hooks/use-save-config\";\n\nconst RESTART_SET = new Set<string>(RESTART_REQUIRED_KEY_TUPLE);\n\ntype ScalarValue = string | number | null;\n\nfunction scalarToDraft(value: ScalarValue): string {\n return value === null ? \"\" : String(value);\n}\n\nexport function EditableField({\n label,\n value,\n configKey,\n type = \"text\",\n suffix,\n description,\n min,\n max,\n nullable = false,\n emptyLabel = \"Not set\",\n modified,\n defaultValue,\n onSave,\n}: {\n label: string;\n value: ScalarValue;\n configKey: EditableConfigKey;\n type?: \"text\" | \"number\";\n suffix?: string;\n description?: string;\n min?: number;\n max?: number;\n nullable?: boolean;\n emptyLabel?: string;\n /** True when the displayed value differs from the server value. */\n modified?: boolean;\n /** Schema default — when provided and value differs, a \"reset\" link is shown. */\n defaultValue?: ScalarValue;\n onSave: SaveFieldFn;\n}) {\n const showRestart = RESTART_SET.has(configKey);\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState(scalarToDraft(value));\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Close editing mode when the user clicks Discard in the save bar.\n const discardGen = useDiscardGeneration();\n const prevDiscardGen = useRef(discardGen);\n useEffect(() => {\n if (discardGen !== prevDiscardGen.current) {\n prevDiscardGen.current = discardGen;\n setEditing(false);\n setError(null);\n }\n }, [discardGen]);\n\n useEffect(() => {\n if (editing) inputRef.current?.focus();\n }, [editing]);\n\n useEffect(() => {\n if (!editing) setDraft(scalarToDraft(value));\n }, [value, editing]);\n\n const isDefault = defaultValue !== undefined && value === defaultValue;\n\n const handleReset = async (e: React.MouseEvent) => {\n e.stopPropagation();\n if (defaultValue === undefined) return;\n setSaving(true);\n try {\n await onSave(configKey, defaultValue);\n } finally {\n setSaving(false);\n }\n };\n\n const handleClear = async (e: React.MouseEvent) => {\n e.stopPropagation();\n setSaving(true);\n try {\n await onSave(configKey, null);\n } finally {\n setSaving(false);\n }\n };\n\n const handleSave = async () => {\n const trimmedDraft = draft.trim();\n const val: ScalarValue = nullable && trimmedDraft === \"\"\n ? null\n : type === \"number\"\n ? Number(draft)\n : draft;\n if (val === value) {\n setEditing(false);\n return;\n }\n if (val !== null && type === \"number\" && (min !== undefined || max !== undefined)) {\n const n = val as number;\n if ((min !== undefined && n < min) || (max !== undefined && n > max)) {\n setError(`Must be ${min ?? \"\"}–${max ?? \"\"}`);\n return;\n }\n }\n setError(null);\n setSaving(true);\n try {\n await onSave(configKey, val);\n setEditing(false);\n } catch {\n // parent handles\n } finally {\n setSaving(false);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") handleSave();\n if (e.key === \"Escape\") {\n setDraft(scalarToDraft(value));\n setEditing(false);\n }\n };\n\n if (editing) {\n return (\n <div className=\"py-1.5\" data-config-key={configKey}>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground shrink-0 min-w-[140px] inline-flex items-center gap-1.5\">\n {label}\n {showRestart && <RestartRequiredBadge />}\n </span>\n <Input\n ref={inputRef}\n type={type}\n value={draft}\n onChange={(e) => {\n setDraft(e.target.value);\n setError(null);\n }}\n onKeyDown={handleKeyDown}\n className=\"max-w-[240px]\"\n disabled={saving}\n min={min}\n max={max}\n />\n {suffix && (\n <span className=\"text-xs text-muted-foreground\">{suffix}</span>\n )}\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={handleSave}\n disabled={saving}\n className=\"h-7 w-7 p-0\"\n >\n <Check className=\"h-3.5 w-3.5\" />\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => {\n setDraft(scalarToDraft(value));\n setError(null);\n setEditing(false);\n }}\n className=\"h-7 w-7 p-0\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n {error && (\n <p className=\"text-xs text-destructive mt-1 ml-[148px]\">{error}</p>\n )}\n {description && !error && (\n <p className=\"text-xs text-muted-foreground mt-1 ml-[148px]\">\n {description}\n </p>\n )}\n </div>\n );\n }\n\n return (\n <div\n className={`py-1.5 group cursor-pointer rounded px-1 -mx-1 hover:bg-muted/50 transition-colors${modified ? \" border-l-2 border-blue-500 pl-2\" : \"\"}`}\n data-config-key={configKey}\n onClick={() => setEditing(true)}\n >\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground inline-flex items-center gap-1.5\">\n {label}\n {showRestart && <RestartRequiredBadge />}\n </span>\n <div className=\"flex items-center gap-1.5\">\n {modified && (\n <span className=\"text-[10px] font-medium text-blue-600 dark:text-blue-400\">\n modified\n </span>\n )}\n {defaultValue !== undefined && !isDefault && !modified && (\n <button\n type=\"button\"\n onClick={handleReset}\n className=\"text-[10px] text-muted-foreground hover:text-foreground transition-colors inline-flex items-center gap-0.5 opacity-0 group-hover:opacity-100\"\n >\n <RotateCcw className=\"h-2.5 w-2.5\" />\n reset\n </button>\n )}\n {nullable && value !== null && !modified && (\n <button\n type=\"button\"\n onClick={handleClear}\n title={`Clear — sets ${label} to ${emptyLabel}`}\n className=\"text-[10px] text-muted-foreground hover:text-destructive transition-colors inline-flex items-center gap-0.5 opacity-0 group-hover:opacity-100\"\n >\n <Trash2 className=\"h-2.5 w-2.5\" />\n clear\n </button>\n )}\n <span className=\"text-sm font-medium text-foreground\">\n {value === null\n ? emptyLabel\n : suffix === \"$\"\n ? `$${value}`\n : suffix\n ? `${value} ${suffix}`\n : String(value)}\n </span>\n <Pencil className=\"h-3 w-3 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity\" />\n </div>\n </div>\n {description && (\n <p className=\"text-xs text-muted-foreground mt-0.5\">{description}</p>\n )}\n </div>\n );\n}\n\nexport function EditableBooleanField({\n label,\n value,\n configKey,\n description,\n modified,\n defaultValue,\n onSave,\n}: {\n label: string;\n value: boolean;\n configKey: EditableConfigKey;\n description?: string;\n /** True when the displayed value differs from the server value. */\n modified?: boolean;\n /** Schema default — when provided and value differs, a \"reset\" link is shown. */\n defaultValue?: boolean;\n onSave: SaveFieldFn;\n}) {\n const [saving, setSaving] = useState(false);\n const showRestart = RESTART_SET.has(configKey);\n const isDefault = defaultValue !== undefined && value === defaultValue;\n\n const handleToggle = async () => {\n setSaving(true);\n try {\n await onSave(configKey, !value);\n } finally {\n setSaving(false);\n }\n };\n\n const handleReset = async () => {\n if (defaultValue === undefined) return;\n setSaving(true);\n try {\n await onSave(configKey, defaultValue);\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <div className={`py-1.5 group${modified ? \" border-l-2 border-blue-500 pl-2 -ml-1 rounded\" : \"\"}`} data-config-key={configKey}>\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm text-muted-foreground inline-flex items-center gap-1.5\">\n {label}\n {showRestart && <RestartRequiredBadge />}\n {modified && (\n <span className=\"text-[10px] font-medium text-blue-600 dark:text-blue-400\">\n modified\n </span>\n )}\n {defaultValue !== undefined && !isDefault && !modified && (\n <button\n type=\"button\"\n onClick={handleReset}\n className=\"text-[10px] text-muted-foreground hover:text-foreground transition-colors inline-flex items-center gap-0.5 opacity-0 group-hover:opacity-100\"\n >\n <RotateCcw className=\"h-2.5 w-2.5\" />\n reset\n </button>\n )}\n </p>\n {description && (\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n {description}\n </p>\n )}\n </div>\n <Button\n variant={value ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={handleToggle}\n disabled={saving}\n >\n {value ? \"Enabled\" : \"Disabled\"}\n </Button>\n </div>\n </div>\n );\n}\n\nexport function EditableArrayField({\n label,\n values,\n configKey,\n variant = \"gray\",\n placeholder = \"Add item...\",\n directoryPicker,\n modified,\n onSave,\n}: {\n label: string;\n values: string[];\n configKey: EditableConfigKey;\n variant?: \"red\" | \"green\" | \"gray\";\n placeholder?: string;\n directoryPicker?: {\n title: string;\n buttonLabel?: string;\n defaultPath?: string;\n };\n /** True when the displayed values differ from the server values. */\n modified?: boolean;\n onSave: SaveFieldFn;\n}) {\n const showRestart = RESTART_SET.has(configKey);\n const [newItem, setNewItem] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [pickerError, setPickerError] = useState<string | null>(null);\n\n const handleAdd = async () => {\n const trimmed = newItem.trim();\n if (!trimmed || values.includes(trimmed)) return;\n setSaving(true);\n setPickerError(null);\n try {\n await onSave(configKey, [...values, trimmed]);\n setNewItem(\"\");\n } catch {\n // parent handles\n } finally {\n setSaving(false);\n }\n };\n\n const handleRemove = async (item: string) => {\n setSaving(true);\n try {\n await onSave(\n configKey,\n values.filter((v) => v !== item),\n );\n } finally {\n setSaving(false);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") handleAdd();\n };\n\n const handlePickDirectory = async () => {\n if (!directoryPicker) return;\n setSaving(true);\n setPickerError(null);\n try {\n const selected = await pickDirectoryFromDesktop({\n title: directoryPicker.title,\n defaultPath: newItem.trim() || directoryPicker.defaultPath,\n });\n if (!selected) return;\n if (values.includes(selected)) {\n setNewItem(selected);\n setPickerError(\"That directory is already in the list.\");\n return;\n }\n await onSave(configKey, [...values, selected]);\n setNewItem(\"\");\n } catch (err) {\n setPickerError(\n err instanceof Error ? err.message : \"Folder picker is unavailable.\",\n );\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <div className={`py-2${modified ? \" border-l-2 border-blue-500 pl-2 -ml-1 rounded\" : \"\"}`} data-config-key={configKey}>\n <p className=\"text-sm text-muted-foreground mb-2 inline-flex items-center gap-1.5\">\n {label}\n {showRestart && <RestartRequiredBadge />}\n {modified && (\n <span className=\"text-[10px] font-medium text-blue-600 dark:text-blue-400\">\n modified\n </span>\n )}\n </p>\n <div className=\"flex flex-wrap gap-1.5 mb-2\">\n {values.map((v) => (\n <Badge key={v} variant={variant} className=\"gap-1 pr-1\">\n {v}\n <button\n onClick={() => handleRemove(v)}\n disabled={saving}\n className=\"ml-0.5 rounded-sm hover:bg-black/10 dark:hover:bg-white/10 p-0.5 transition-colors\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </Badge>\n ))}\n {values.length === 0 && (\n <span className=\"text-xs text-muted-foreground italic\">No items</span>\n )}\n </div>\n <div className=\"flex gap-2\">\n <Input\n value={newItem}\n onChange={(e) => setNewItem(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className=\"max-w-[320px]\"\n disabled={saving}\n />\n {directoryPicker && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={handlePickDirectory}\n disabled={saving}\n >\n <FolderOpen className=\"h-3.5 w-3.5 mr-1\" />\n {directoryPicker.buttonLabel ?? \"Choose\"}\n </Button>\n )}\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={handleAdd}\n disabled={!newItem.trim() || saving}\n >\n <Plus className=\"h-3.5 w-3.5 mr-1\" />\n Add\n </Button>\n </div>\n {pickerError && (\n <p className=\"mt-1 text-xs text-destructive\">{pickerError}</p>\n )}\n </div>\n );\n}\n\nexport function ConfigSection({\n title,\n children,\n helpDocId,\n helpAnchor,\n}: {\n title: string;\n children: React.ReactNode;\n /**\n * When set, render a small `?` icon next to the section title that\n * opens the docs help slide-over scoped to this doc. Used to give\n * deep-link affordances on confusing settings groups without dragging\n * an icon onto every individual field (DOCS_QA_DESIGN.md §8.4 E6).\n */\n helpDocId?: string;\n helpAnchor?: string;\n}) {\n return (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-1.5\">\n <span>{title}</span>\n {helpDocId && (\n <DocsHelpInline\n docId={helpDocId}\n anchor={helpAnchor ?? null}\n label={title}\n />\n )}\n </CardTitle>\n </CardHeader>\n <div className=\"space-y-0.5 [&>p]:max-w-prose\">{children}</div>\n </Card>\n );\n}\n"],"names":["valuesEqual","a","b","Array","isArray","length","every","v","i","DirtyFieldsContext","DirtyFieldsProvider","children","dirtyFields","setDirtyFields","Map","discardGeneration","setDiscardGeneration","setDirty","key","value","serverValue","prev","undefined","has","next","delete","set","clearDirty","clearDirtyKeys","keys","some","k","discardAll","g","isDirty","size","dirtyCount","Provider","useDiscardGeneration","ctx","useDirtyFields","Error","deferSaveFor","serverConfig","dv","get","pickDirectoryFromDesktop","title","defaultPath","response","post","status","path","message","RestartRequiredBadge","asChild","className","side","DocsHelpInline","docId","anchor","label","queryClient","tip","delayDuration","type","onClick","e","preventDefault","stopPropagation","autoFocusComposer","RESTART_SET","Set","scalarToDraft","String","EditableField","configKey","suffix","description","min","max","nullable","emptyLabel","modified","defaultValue","onSave","showRestart","editing","setEditing","draft","setDraft","saving","setSaving","error","setError","inputRef","discardGen","prevDiscardGen","current","focus","isDefault","handleReset","handleClear","handleSave","trimmedDraft","trim","val","Number","n","handleKeyDown","ref","onChange","target","onKeyDown","disabled","variant","EditableBooleanField","handleToggle","EditableArrayField","values","placeholder","directoryPicker","newItem","setNewItem","pickerError","setPickerError","handleAdd","trimmed","includes","handleRemove","item","filter","handlePickDirectory","selected","err","map","buttonLabel","ConfigSection","helpDocId","helpAnchor"],"mappings":"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","ignoreList":[2,4]}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[7437,a=>{"use strict";var b=a.i(8753),c=a.i(62588),d=a.i(81130),e=a.i(59974);class f extends Error{conflict;constructor(a){super("context_conflict"),this.conflict=a,this.name="ContextConflictError"}}a.s(["ContextConflictError",0,f,"useContextFile",0,function(a,b){return(0,c.useQuery)({queryKey:["context",a],queryFn:()=>e.api.get(`/context/${a}`),enabled:!!a&&b?.enabled!==!1,refetchOnWindowFocus:b?.enabled!==!1})},"useContextList",0,function(a){return(0,c.useQuery)({queryKey:["context-list",a],queryFn:()=>e.api.get(`/context/list/${a}`)})},"useDeleteContextFile",0,function(){let a=(0,d.useQueryClient)();return(0,b.useMutation)({mutationFn:async({path:a})=>e.api.delete(`/context/${a}`),onSuccess:(b,{path:c})=>{a.removeQueries({queryKey:["context",c]}),a.invalidateQueries({queryKey:["snapshots",c]});let d=c.includes("/")?c.split("/")[0]:null;d&&a.invalidateQueries({queryKey:["context-list",d]}),c.startsWith("routines/custom/")&&a.invalidateQueries({queryKey:["context-list","routines"]})}})},"useUpdateContextFile",0,function(){let a=(0,d.useQueryClient)();return(0,b.useMutation)({mutationFn:async({path:a,content:b,expectedMtime:c})=>{try{return await e.api.put(`/context/${a}`,{content:b,...void 0!==c?{expectedMtime:c}:{}})}catch(a){if(a instanceof e.ApiError&&409===a.status&&a.body?.error==="conflict"){let b=a.body;throw new f({currentMtime:b.currentMtime??"",currentContent:b.currentContent??""})}throw a}},onSuccess:(b,{path:c,content:d})=>{a.setQueryData(["context",c],a=>a?{...a,content:d,lastModified:b.lastModified}:{content:d,lastModified:b.lastModified,editable:!0}),a.invalidateQueries({queryKey:["snapshots",c]});let e=c.includes("/")?c.split("/")[0]:null;e&&a.invalidateQueries({queryKey:["context-list",e]})}})}])},69481,a=>{"use strict";var b=a.i(39752),c=a.i(32307),d=a.i(21218),e=a.i(48558);a.s(["FileConflictBanner",0,function({onReload:a,onOverwrite:f,isPending:g=!1,reloadLabel:h="Reload latest",className:i}){return(0,b.jsxs)("div",{role:"alert","aria-live":"assertive",className:(0,e.cn)("rounded-md border border-amber-500/50 bg-amber-500/10 p-3 text-xs",i),children:[(0,b.jsxs)("div",{className:"mb-2 flex items-center gap-2 font-semibold text-amber-900 dark:text-amber-200",children:[(0,b.jsx)(c.AlertTriangle,{className:"h-3.5 w-3.5"}),"File was modified by another process"]}),(0,b.jsx)("p",{className:"mb-3 text-amber-900/90 dark:text-amber-100/90",children:"The agent or another tab wrote to this file after you started editing. Your unsaved draft is preserved — choose how to proceed."}),(0,b.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,b.jsx)(d.Button,{size:"sm",variant:"outline",onClick:a,disabled:g,className:"h-7",children:h}),(0,b.jsx)(d.Button,{size:"sm",variant:"destructive",onClick:f,disabled:g,className:"h-7",children:g?"Overwriting…":"Overwrite with my edits"})]})]})}])},7368,a=>{"use strict";var b=a.i(39752),c=a.i(34542),d=a.i(59974),e=a.i(7437),f=a.i(21218),g=a.i(30400),h=a.i(9306),i=a.i(69481),j=a.i(48558);let k=[{key:"format",label:"Journal Format",path:"rules/journal-format",description:"Controls how the agent writes daily/YYYY-MM-DD.md during the 04:00 morning routine. Edit the sections, voice, or required frontmatter here; changes take effect on the next synthesis run."},{key:"export",label:"Journal Export",path:"rules/journal-export",description:"Injected into the morning-routine prompt alongside Journal Format. Use this to pin redaction rules, exclude sections, or record inclusion constraints the agent should honour when writing the daily journal — the rules apply in every synthesis run regardless of whether an external export pipeline is configured."}];function l({file:a}){let c=(0,e.useContextFile)(a.path);return c.isLoading?(0,b.jsx)(g.Card,{className:"p-4",children:(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:"Loading…"})}):c.error||!c.data?404===c.error?.status?(0,b.jsx)(g.Card,{className:"p-4",children:(0,b.jsxs)("p",{className:"text-sm text-muted-foreground",children:[(0,b.jsxs)("code",{children:[a.path,".md"]})," does not exist yet. It is created by the setup wizard or by running a clean reinstall from Advanced → Danger Zone."]})}):(0,b.jsx)(g.Card,{className:"p-4",children:(0,b.jsxs)("p",{className:"text-sm text-destructive",children:["Failed to load ",a.path,".md:"," ",c.error?.message??"unknown error"]})}):(0,b.jsx)(m,{file:a,initial:c.data,editable:!1!==c.data.editable},a.path)}function m({file:a,initial:h,editable:k}){let[l,n]=(0,c.useState)(h.content),[o,p]=(0,c.useState)({content:h.content,mtime:h.lastModified}),[q,r]=(0,c.useState)(null),[s,t]=(0,c.useState)(null),[u,v]=(0,c.useState)(null),w=(0,e.useUpdateContextFile)(),x=l!==o.content;(0,c.useEffect)(()=>{if(!x)return;let a=a=>{a.preventDefault(),a.returnValue=""};return window.addEventListener("beforeunload",a),()=>window.removeEventListener("beforeunload",a)},[x]);let y=async b=>{t(null);try{let c=await w.mutateAsync({path:a.path,content:l,expectedMtime:b});p({content:l,mtime:c.lastModified}),v(null),r("Saved."),window.setTimeout(()=>r(null),2500)}catch(a){a instanceof e.ContextConflictError?v({mtime:a.conflict.currentMtime,content:a.conflict.currentContent}):(d.ApiError,t(a.message))}},z=()=>y(o.mtime);return(0,b.jsxs)(g.Card,{className:"flex flex-col gap-3 p-4",children:[(0,b.jsxs)(g.CardHeader,{className:"flex flex-row items-start justify-between gap-4 p-0 pb-0",children:[(0,b.jsxs)("div",{className:"flex-1",children:[(0,b.jsxs)(g.CardTitle,{className:"text-sm font-semibold",children:[a.path,".md"]}),(0,b.jsx)("p",{className:"pt-1 text-xs text-muted-foreground max-w-prose",children:a.description}),(0,b.jsxs)("p",{className:"pt-1 text-[11px] text-muted-foreground",children:["Last modified: ",(0,j.formatAbsoluteTime)(o.mtime)]})]}),(0,b.jsx)(f.Button,{type:"button",size:"sm",onClick:z,disabled:!x||!k||w.isPending||null!==u,children:w.isPending?"Saving…":"Save"})]}),u&&(0,b.jsx)(i.FileConflictBanner,{onReload:()=>{u&&(n(u.content),p({content:u.content,mtime:u.mtime}),v(null),t(null))},onOverwrite:()=>{u&&y(u.mtime)},isPending:w.isPending}),(0,b.jsx)("textarea",{value:l,onChange:a=>n(a.target.value),onKeyDown:a=>{(a.metaKey||a.ctrlKey)&&"s"===a.key.toLowerCase()&&(a.preventDefault(),x&&k&&!w.isPending&&z())},disabled:!k,spellCheck:!1,className:"min-h-[540px] w-full resize-y rounded-md border border-border bg-muted/30 p-3 font-mono text-xs leading-relaxed focus:outline-none focus:ring-2 focus:ring-ring"}),q&&(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:q}),s&&(0,b.jsx)("p",{className:"text-xs text-destructive",children:s})]})}a.s(["default",0,function(){let[a,d]=(0,c.useState)("format");return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-2xl font-semibold text-foreground",children:"Journal"}),(0,b.jsx)("p",{className:"mt-1 max-w-3xl text-sm text-muted-foreground",children:"Rule files the 04:00 morning routine reads when synthesising the daily journal. Both Format and Export are injected into the morning-routine prompt; Export is the place to record redaction and inclusion rules the agent should follow every synthesis run."})]}),(0,b.jsxs)(h.Tabs,{value:a,onValueChange:a=>d(a),children:[(0,b.jsx)(h.TabsList,{children:k.map(a=>(0,b.jsx)(h.TabsTrigger,{value:a.key,children:a.label},a.key))}),k.map(a=>(0,b.jsx)(h.TabsContent,{value:a.key,forceMount:!0,className:"pt-3 data-[state=inactive]:hidden",children:(0,b.jsx)(l,{file:a})},a.key))]})]})}])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=packages_dashboard_src_07.4ogy._.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/dashboard/src/lib/hooks/use-context.ts","../../../../../../packages/dashboard/src/components/shared/file-conflict-banner.tsx","../../../../../../packages/dashboard/src/app/settings/journal/page.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { api, ApiError } from \"@/lib/api-client\";\nimport type { ContextFileResponse, ContextListResponse } from \"@/lib/api-types\";\n\n/**\n * Read a context file. While the user is actively editing we set\n * `enabled=false` to suppress background refetches that would otherwise\n * race the editor's draft baseline (window-focus refetches, polling, etc.)\n * and silently corrupt the optimistic-concurrency check.\n */\nexport function useContextFile(path: string | null, options?: { enabled?: boolean }) {\n return useQuery({\n queryKey: [\"context\", path],\n queryFn: () => api.get<ContextFileResponse>(`/context/${path}`),\n enabled: !!path && options?.enabled !== false,\n refetchOnWindowFocus: options?.enabled !== false,\n });\n}\n\nexport function useContextList(dir: string) {\n return useQuery({\n queryKey: [\"context-list\", dir],\n queryFn: () => api.get<ContextListResponse>(`/context/list/${dir}`),\n });\n}\n\ninterface ContextPutResponse {\n status: \"updated\";\n snapshotId: number;\n lastModified: string;\n}\n\nexport interface ContextConflict {\n currentMtime: string;\n currentContent: string;\n}\n\n/**\n * Thrown when a PUT to /context/* returns 409 with `error: \"conflict\"`.\n * Carries the current on-disk state so the UI can render a conflict\n * resolution dialog without re-fetching.\n */\nexport class ContextConflictError extends Error {\n constructor(public readonly conflict: ContextConflict) {\n super(\"context_conflict\");\n this.name = \"ContextConflictError\";\n }\n}\n\n/**\n * Full-replace write with optimistic concurrency control.\n *\n * The client always sends `expectedMtime` (captured at edit-start) so the\n * daemon can detect when another writer (the agent itself, another tab,\n * etc.) has modified the file in the meantime. On mismatch the server\n * returns 409 + the current state, which we surface as a typed\n * `ContextConflictError` for the page to handle.\n *\n * The backend records a snapshot of the previous content before\n * overwriting, so even a forced overwrite is recoverable from the\n * Snapshots panel.\n */\nexport function useUpdateContextFile() {\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async ({\n path,\n content,\n expectedMtime,\n }: {\n path: string;\n content: string;\n expectedMtime?: string;\n }) => {\n try {\n return await api.put<ContextPutResponse>(`/context/${path}`, {\n content,\n ...(expectedMtime !== undefined ? { expectedMtime } : {}),\n });\n } catch (err) {\n if (\n err instanceof ApiError &&\n err.status === 409 &&\n (err.body as Record<string, unknown> | null)?.error === \"conflict\"\n ) {\n const body = err.body as {\n currentMtime?: string;\n currentContent?: string;\n };\n throw new ContextConflictError({\n currentMtime: body.currentMtime ?? \"\",\n currentContent: body.currentContent ?? \"\",\n });\n }\n throw err;\n }\n },\n onSuccess: (data, { path, content }) => {\n // Seed the cache directly instead of invalidating-and-refetching.\n // If we only invalidated, an immediate re-edit could read the old\n // cached content during the refetch window. Writing the new content\n // synchronously eliminates that race entirely.\n qc.setQueryData<ContextFileResponse>([\"context\", path], (prev) =>\n prev\n ? { ...prev, content, lastModified: data.lastModified }\n : { content, lastModified: data.lastModified, editable: true },\n );\n qc.invalidateQueries({ queryKey: [\"snapshots\", path] });\n // A directory listing's lastModified timestamps may shift after a write\n const dir = path.includes(\"/\") ? path.split(\"/\")[0] : null;\n if (dir) qc.invalidateQueries({ queryKey: [\"context-list\", dir] });\n },\n });\n}\n\n/**\n * Delete a context file. Currently the daemon only exposes DELETE for\n * `routines/custom/*` (B-007 §5.8 Q3) — other paths return 403.\n */\nexport function useDeleteContextFile() {\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async ({ path }: { path: string }) =>\n api.delete<{ status: \"deleted\"; snapshotId: number }>(`/context/${path}`),\n onSuccess: (_data, { path }) => {\n qc.removeQueries({ queryKey: [\"context\", path] });\n qc.invalidateQueries({ queryKey: [\"snapshots\", path] });\n // Custom routine deletes can change two listings: the custom/ parent\n // and the top-level routines/ directory. Invalidate both so the tree\n // view on the routines page stays fresh.\n const dir = path.includes(\"/\") ? path.split(\"/\")[0] : null;\n if (dir) qc.invalidateQueries({ queryKey: [\"context-list\", dir] });\n if (path.startsWith(\"routines/custom/\")) {\n qc.invalidateQueries({ queryKey: [\"context-list\", \"routines\"] });\n }\n },\n });\n}\n","import { AlertTriangle } from \"lucide-react\";\nimport { Button } from \"@/components/ui/button\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Conflict banner shown when an editor (journal, mcp rules, context-files)\n * detects that the underlying MD file was overwritten between load and save.\n *\n * The same UI used to be inlined in three places verbatim — same icon, copy,\n * button layout — diverging only in the \"Reload\" button label and the\n * concrete handlers. Centralizing it keeps the optimistic-concurrency UX\n * consistent across editors.\n *\n * `role=\"alert\"` + `aria-live=\"assertive\"` so screen readers announce the\n * conflict immediately when it appears (the banner only renders in response\n * to a 409 the user just triggered with Save). The original inline copies\n * had no a11y attributes — adding them here is a net improvement.\n */\nexport interface FileConflictBannerProps {\n onReload: () => void;\n onOverwrite: () => void;\n isPending?: boolean;\n /** Override for the reload button label. Defaults to \"Reload latest\". */\n reloadLabel?: string;\n className?: string;\n}\n\nexport function FileConflictBanner({\n onReload,\n onOverwrite,\n isPending = false,\n reloadLabel = \"Reload latest\",\n className,\n}: FileConflictBannerProps) {\n return (\n <div\n role=\"alert\"\n aria-live=\"assertive\"\n className={cn(\n \"rounded-md border border-amber-500/50 bg-amber-500/10 p-3 text-xs\",\n className,\n )}\n >\n <div className=\"mb-2 flex items-center gap-2 font-semibold text-amber-900 dark:text-amber-200\">\n <AlertTriangle className=\"h-3.5 w-3.5\" />\n File was modified by another process\n </div>\n <p className=\"mb-3 text-amber-900/90 dark:text-amber-100/90\">\n The agent or another tab wrote to this file after you started editing.\n Your unsaved draft is preserved — choose how to proceed.\n </p>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={onReload}\n disabled={isPending}\n className=\"h-7\"\n >\n {reloadLabel}\n </Button>\n <Button\n size=\"sm\"\n variant=\"destructive\"\n onClick={onOverwrite}\n disabled={isPending}\n className=\"h-7\"\n >\n {isPending ? \"Overwriting…\" : \"Overwrite with my edits\"}\n </Button>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { ApiError } from \"@/lib/api-client\";\nimport type { ContextFileResponse } from \"@/lib/api-types\";\nimport {\n ContextConflictError,\n useContextFile,\n useUpdateContextFile,\n} from \"@/lib/hooks/use-context\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { FileConflictBanner } from \"@/components/shared/file-conflict-banner\";\nimport { formatAbsoluteTime } from \"@/lib/utils\";\n\n/**\n * B-007 §5.9 + §9 (B-005) — co-edit the two natural-language rule files that\n * drive the 04:00 daily journal synthesis:\n *\n * - `rules/journal-format.md` defines the format template (sections, voice,\n * frontmatter). The morning routine reads it when writing\n * `daily/YYYY-MM-DD.md`.\n * - `rules/journal-export.md` defines inclusion / exclusion / redaction for\n * the B-005 external export (if opted-in).\n *\n * Both files are user-editable prose. Saves go through `PUT /api/context/`\n * with optimistic concurrency via `expectedMtime`.\n */\n\ntype FileKind = \"format\" | \"export\";\n\ninterface JournalFile {\n key: FileKind;\n label: string;\n path: string;\n description: string;\n}\n\nconst FILES: JournalFile[] = [\n {\n key: \"format\",\n label: \"Journal Format\",\n path: \"rules/journal-format\",\n description:\n \"Controls how the agent writes daily/YYYY-MM-DD.md during the 04:00 morning routine. Edit the sections, voice, or required frontmatter here; changes take effect on the next synthesis run.\",\n },\n {\n key: \"export\",\n label: \"Journal Export\",\n path: \"rules/journal-export\",\n description:\n \"Injected into the morning-routine prompt alongside Journal Format. Use this to pin redaction rules, exclude sections, or record inclusion constraints the agent should honour when writing the daily journal — the rules apply in every synthesis run regardless of whether an external export pipeline is configured.\",\n },\n];\n\nexport default function JournalSettingsPage() {\n const [tab, setTab] = useState<FileKind>(\"format\");\n\n return (\n <>\n <div>\n <h1 className=\"text-2xl font-semibold text-foreground\">Journal</h1>\n <p className=\"mt-1 max-w-3xl text-sm text-muted-foreground\">\n Rule files the 04:00 morning routine reads when synthesising the\n daily journal. Both Format and Export are injected into the\n morning-routine prompt; Export is the place to record redaction\n and inclusion rules the agent should follow every synthesis run.\n </p>\n </div>\n\n <Tabs value={tab} onValueChange={(v) => setTab(v as FileKind)}>\n <TabsList>\n {FILES.map((f) => (\n <TabsTrigger key={f.key} value={f.key}>\n {f.label}\n </TabsTrigger>\n ))}\n </TabsList>\n {FILES.map((f) => (\n // `forceMount` keeps the inactive panel in the DOM (Radix hides it\n // via `hidden`). Without it the draft for the non-visible tab\n // would be lost silently on every switch.\n <TabsContent\n key={f.key}\n value={f.key}\n forceMount\n className=\"pt-3 data-[state=inactive]:hidden\"\n >\n <JournalFileEditor file={f} />\n </TabsContent>\n ))}\n </Tabs>\n </>\n );\n}\n\nfunction JournalFileEditor({ file }: { file: JournalFile }) {\n const query = useContextFile(file.path);\n\n if (query.isLoading) {\n return (\n <Card className=\"p-4\">\n <p className=\"text-sm text-muted-foreground\">Loading…</p>\n </Card>\n );\n }\n\n if (query.error || !query.data) {\n const status = (query.error as ApiError | undefined)?.status;\n if (status === 404) {\n return (\n <Card className=\"p-4\">\n <p className=\"text-sm text-muted-foreground\">\n <code>{file.path}.md</code> does not exist yet. It is created by\n the setup wizard or by running a clean reinstall from Advanced →\n Danger Zone.\n </p>\n </Card>\n );\n }\n return (\n <Card className=\"p-4\">\n <p className=\"text-sm text-destructive\">\n Failed to load {file.path}.md:{\" \"}\n {(query.error as Error | undefined)?.message ?? \"unknown error\"}\n </p>\n </Card>\n );\n }\n\n return (\n <LoadedEditor\n key={file.path}\n file={file}\n initial={query.data}\n editable={query.data.editable !== false}\n />\n );\n}\n\nfunction LoadedEditor({\n file,\n initial,\n editable,\n}: {\n file: JournalFile;\n initial: ContextFileResponse;\n editable: boolean;\n}) {\n const [draft, setDraft] = useState(initial.content);\n const [baseline, setBaseline] = useState({\n content: initial.content,\n mtime: initial.lastModified,\n });\n const [toast, setToast] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [conflict, setConflict] = useState<{ mtime: string; content: string } | null>(\n null,\n );\n const update = useUpdateContextFile();\n\n const dirty = draft !== baseline.content;\n\n useEffect(() => {\n if (!dirty) return;\n const handler = (e: BeforeUnloadEvent) => {\n e.preventDefault();\n e.returnValue = \"\";\n };\n window.addEventListener(\"beforeunload\", handler);\n return () => window.removeEventListener(\"beforeunload\", handler);\n }, [dirty]);\n\n const performSave = async (expectedMtime: string) => {\n setError(null);\n try {\n const res = await update.mutateAsync({\n path: file.path,\n content: draft,\n expectedMtime,\n });\n setBaseline({ content: draft, mtime: res.lastModified });\n setConflict(null);\n setToast(\"Saved.\");\n window.setTimeout(() => setToast(null), 2500);\n } catch (err) {\n if (err instanceof ContextConflictError) {\n setConflict({\n mtime: err.conflict.currentMtime,\n content: err.conflict.currentContent,\n });\n } else if (err instanceof ApiError) {\n setError(err.message);\n } else {\n setError((err as Error).message);\n }\n }\n };\n\n const handleSave = () => performSave(baseline.mtime);\n const handleOverwrite = () => {\n if (!conflict) return;\n void performSave(conflict.mtime);\n };\n const handleReloadLatest = () => {\n if (!conflict) return;\n setDraft(conflict.content);\n setBaseline({ content: conflict.content, mtime: conflict.mtime });\n setConflict(null);\n setError(null);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === \"s\") {\n e.preventDefault();\n if (dirty && editable && !update.isPending) void handleSave();\n }\n };\n\n return (\n <Card className=\"flex flex-col gap-3 p-4\">\n <CardHeader className=\"flex flex-row items-start justify-between gap-4 p-0 pb-0\">\n <div className=\"flex-1\">\n <CardTitle className=\"text-sm font-semibold\">\n {file.path}.md\n </CardTitle>\n <p className=\"pt-1 text-xs text-muted-foreground max-w-prose\">\n {file.description}\n </p>\n <p className=\"pt-1 text-[11px] text-muted-foreground\">\n Last modified: {formatAbsoluteTime(baseline.mtime)}\n </p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={handleSave}\n disabled={!dirty || !editable || update.isPending || conflict !== null}\n >\n {update.isPending ? \"Saving…\" : \"Save\"}\n </Button>\n </CardHeader>\n\n {conflict && (\n <FileConflictBanner\n onReload={handleReloadLatest}\n onOverwrite={handleOverwrite}\n isPending={update.isPending}\n />\n )}\n\n <textarea\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={!editable}\n spellCheck={false}\n className=\"min-h-[540px] w-full resize-y rounded-md border border-border bg-muted/30 p-3 font-mono text-xs leading-relaxed focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n\n {toast && <p className=\"text-xs text-muted-foreground\">{toast}</p>}\n {error && <p className=\"text-xs text-destructive\">{error}</p>}\n </Card>\n );\n}\n"],"names":["useContextFile","path","options","queryKey","queryFn","get","enabled","refetchOnWindowFocus","useContextList","dir","ContextConflictError","Error","conflict","name","useUpdateContextFile","qc","mutationFn","content","expectedMtime","put","undefined","err","status","body","error","currentMtime","currentContent","onSuccess","data","setQueryData","prev","lastModified","editable","invalidateQueries","includes","split","useDeleteContextFile","delete","_data","removeQueries","startsWith","FileConflictBanner","onReload","onOverwrite","isPending","reloadLabel","className","role","size","variant","onClick","disabled","FILES","key","label","description","JournalSettingsPage","tab","setTab","value","onValueChange","v","map","f","forceMount","JournalFileEditor","file","query","isLoading","message","LoadedEditor","initial","draft","setDraft","baseline","setBaseline","mtime","toast","setToast","setError","setConflict","update","dirty","handler","e","preventDefault","returnValue","window","addEventListener","removeEventListener","performSave","res","mutateAsync","setTimeout","handleSave","handleOverwrite","handleReloadLatest","handleKeyDown","metaKey","ctrlKey","toLowerCase","type","onChange","target","onKeyDown","spellCheck"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,13451,e=>{"use strict";var t=e.i(34416),a=e.i(95486),s=e.i(65268);e.s(["useSaveConfig",0,function(){let e=(0,a.useQueryClient)(),[n,r]=(0,t.useState)(null),i=(0,t.useCallback)((e,t)=>{r({type:e,message:t}),setTimeout(()=>r(null),4e3)},[]),l=(0,t.useCallback)((e,t)=>{let a=Object.values(e.errors??{});a.length>0?i("warning",a.join(" ")):e.requiresRestart?.length>0?i("warning",`Updated. Restart daemon for: ${e.requiresRestart.join(", ")}`):i("success",t)},[i]),o=(0,t.useCallback)(async(t,a)=>{try{let n=await s.api.patch("/config",{[t]:a});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 a=await s.api.patch("/config",t);e.invalidateQueries({queryKey:["config"]}),l(a,"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 a=await s.api.patch("/config",t);return e.invalidateQueries({queryKey:["config"]}),a},[e])}}])},58436,e=>{"use strict";var t=e.i(54710),a=e.i(34416),s=e.i(55575),n=e.i(72740),r=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:g,buttonLabel:f="Choose"}){let[b,y]=(0,a.useState)(!1),[v,j]=(0,a.useState)(null),w=async()=>{y(!0),j(null);try{let e=await (0,l.pickDirectoryFromDesktop)({title:u,defaultPath:c.trim()||m});e&&d(e)}catch(e){j(e instanceof Error?e.message:"Folder picker is unavailable.")}finally{y(!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),j(null)},placeholder:h,className:(0,o.cn)("font-mono text-sm",g),disabled:p||b}),(0,t.jsxs)(r.Button,{type:"button",variant:"outline",onClick:w,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)(s.FolderOpen,{className:"h-4 w-4"}),b?"Opening...":f]})]}),v&&(0,t.jsx)("p",{className:"text-xs text-destructive",children:v})]})}])},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"]])},36413,e=>{"use strict";var t=e.i(34416);let a=(0,t.createContext)(null);e.s(["DirtyFieldsProvider",0,function({children:e}){let[s,n]=(0,t.useState)(()=>new Map),[r,i]=(0,t.useState)(0),l=(0,t.useCallback)((e,t,a)=>{n(s=>{if(void 0!==a&&(t===a||Array.isArray(t)&&Array.isArray(a)&&t.length===a.length&&t.every((e,t)=>e===a[t]))){if(!s.has(e))return s;let t=new Map(s);return t.delete(e),t}let n=new Map(s);return n.set(e,t),n})},[]),o=(0,t.useCallback)(e=>{n(t=>{if(!t.has(e))return t;let a=new Map(t);return a.delete(e),a})},[]),c=(0,t.useCallback)(e=>{0!==e.length&&n(t=>{if(!e.some(e=>t.has(e)))return t;let a=new Map(t);for(let t of e)a.delete(t);return a})},[]),d=(0,t.useCallback)(()=>{n(new Map),i(e=>e+1)},[]),u=s.size>0,h=s.size,m=(0,t.useMemo)(()=>({dirtyFields:s,setDirty:l,clearDirty:o,clearDirtyKeys:c,discardAll:d,discardGeneration:r,isDirty:u,dirtyCount:h}),[s,l,o,c,d,r,u,h]);return(0,t.createElement)(a.Provider,{value:m},e)},"useDirtyFields",0,function(){let e=(0,t.useContext)(a);if(!e)throw Error("useDirtyFields must be used inside DirtyFieldsProvider");let{setDirty:s,dirtyFields:n}=e,r=(0,t.useCallback)(e=>async(t,a)=>{let n=e[t];s(t,a,n)},[s]),i=(0,t.useCallback)((e,t)=>n.has(e)?n.get(e):t,[n]);return{...e,deferSaveFor:r,dv:i}},"useDiscardGeneration",0,function(){let e=(0,t.useContext)(a);return e?.discardGeneration??0}])},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 a({title:e,defaultPath:s}){let n=await t.api.post("/system/pick-directory",{title:e,...s?{defaultPath:s}:{}});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,a])},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),a=e.i(25795),s=e.i(10628);e.s(["RestartRequiredBadge",0,function(){return(0,t.jsxs)(s.Tooltip,{children:[(0,t.jsx)(s.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)(a.RotateCcw,{className:"h-2.5 w-2.5"}),"restart"]})}),(0,t.jsx)(s.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),a=e.i(7771),s=e.i(95486),n=e.i(8011),r=e.i(10628),i=e.i(81471);e.s(["DocsHelpInline",0,function({docId:e,anchor:l=null,label:o,className:c}){let d=(0,s.useQueryClient)(),u=o??"Help";return(0,t.jsx)(r.TooltipProvider,{delayDuration:300,children:(0,t.jsxs)(r.Tooltip,{children:[(0,t.jsx)(r.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)(a.HelpCircle,{className:"h-3.5 w-3.5","aria-hidden":"true"})})}),(0,t.jsx)(r.TooltipContent,{side:"top",children:(0,t.jsx)("span",{children:u})})]})})}])},88,e=>{"use strict";var t=e.i(54710),a=e.i(34416),s=e.i(99758),n=e.i(55575),r=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),g=e.i(49681),f=e.i(66127),b=e.i(36413);let y=new Set(d.RESTART_REQUIRED_KEY_TUPLE);function v(e){return null===e?"":String(e)}e.s(["ConfigSection",0,function({title:e,children:a,helpDocId:s,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}),s&&(0,t.jsx)(g.DocsHelpInline,{docId:s,anchor:n??null,label:e})]})}),(0,t.jsx)("div",{className:"space-y-0.5 [&>p]:max-w-prose",children:a})]})},"EditableArrayField",0,function({label:e,values:s,configKey:r,variant:l="gray",placeholder:o="Add item...",directoryPicker:d,modified:m,onSave:g}){let b=y.has(r),[v,j]=(0,a.useState)(""),[w,k]=(0,a.useState)(!1),[N,C]=(0,a.useState)(null),S=async()=>{let e=v.trim();if(!(!e||s.includes(e))){k(!0),C(null);try{await g(r,[...s,e]),j("")}catch{}finally{k(!1)}}},A=async e=>{k(!0);try{await g(r,s.filter(t=>t!==e))}finally{k(!1)}},E=async()=>{if(d){k(!0),C(null);try{let e=await (0,f.pickDirectoryFromDesktop)({title:d.title,defaultPath:v.trim()||d.defaultPath});if(!e)return;if(s.includes(e)){j(e),C("That directory is already in the list.");return}await g(r,[...s,e]),j("")}catch(e){C(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":r,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:[s.map(e=>(0,t.jsxs)(u.Badge,{variant:l,className:"gap-1 pr-1",children:[e,(0,t.jsx)("button",{onClick:()=>A(e),disabled:w,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===s.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:v,onChange:e=>j(e.target.value),onKeyDown:e=>{"Enter"===e.key&&S()},placeholder:o,className:"max-w-[320px]",disabled:w}),d&&(0,t.jsxs)(h.Button,{size:"sm",variant:"outline",onClick:E,disabled:w,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:!v.trim()||w,children:[(0,t.jsx)(i.Plus,{className:"h-3.5 w-3.5 mr-1"}),"Add"]})]}),N&&(0,t.jsx)("p",{className:"mt-1 text-xs text-destructive",children:N})]})},"EditableBooleanField",0,function({label:e,value:s,configKey:n,description:r,modified:i,defaultValue:o,onSave:c}){let[d,u]=(0,a.useState)(!1),m=y.has(n),p=void 0!==o&&s===o,g=async()=>{u(!0);try{await c(n,!s)}finally{u(!1)}},f=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:f,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"]})]}),r&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:r})]}),(0,t.jsx)(h.Button,{variant:s?"default":"outline",size:"sm",onClick:g,disabled:d,children:s?"Enabled":"Disabled"})]})})},"EditableField",0,function({label:e,value:n,configKey:i,type:d="text",suffix:u,description:m,min:g,max:f,nullable:j=!1,emptyLabel:w="Not set",modified:k,defaultValue:N,onSave:C}){let S=y.has(i),[A,E]=(0,a.useState)(!1),[R,I]=(0,a.useState)(v(n)),[M,D]=(0,a.useState)(!1),[T,F]=(0,a.useState)(null),P=(0,a.useRef)(null),O=(0,b.useDiscardGeneration)(),L=(0,a.useRef)(O);(0,a.useEffect)(()=>{O!==L.current&&(L.current=O,E(!1),F(null))},[O]),(0,a.useEffect)(()=>{A&&P.current?.focus()},[A]),(0,a.useEffect)(()=>{A||I(v(n))},[n,A]);let _=void 0!==N&&n===N,q=async e=>{if(e.stopPropagation(),void 0!==N){D(!0);try{await C(i,N)}finally{D(!1)}}},B=async e=>{e.stopPropagation(),D(!0);try{await C(i,null)}finally{D(!1)}},G=async()=>{let e=R.trim(),t=j&&""===e?null:"number"===d?Number(R):R;if(t===n)return void E(!1);if(null!==t&&"number"===d&&(void 0!==g||void 0!==f)&&(void 0!==g&&t<g||void 0!==f&&t>f))return void F(`Must be ${g??""}–${f??""}`);F(null),D(!0);try{await C(i,t),E(!1)}catch{}finally{D(!1)}};return A?(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:P,type:d,value:R,onChange:e=>{I(e.target.value),F(null)},onKeyDown:e=>{"Enter"===e.key&&G(),"Escape"===e.key&&(I(v(n)),E(!1))},className:"max-w-[240px]",disabled:M,min:g,max:f}),u&&(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:u}),(0,t.jsx)(h.Button,{size:"sm",variant:"ghost",onClick:G,disabled:M,className:"h-7 w-7 p-0",children:(0,t.jsx)(s.Check,{className:"h-3.5 w-3.5"})}),(0,t.jsx)(h.Button,{size:"sm",variant:"ghost",onClick:()=>{I(v(n)),F(null),E(!1)},className:"h-7 w-7 p-0",children:(0,t.jsx)(c.X,{className:"h-3.5 w-3.5"})})]}),T&&(0,t.jsx)("p",{className:"text-xs text-destructive mt-1 ml-[148px]",children:T}),m&&!T&&(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:()=>E(!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!==N&&!_&&!k&&(0,t.jsxs)("button",{type:"button",onClick:q,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"]}),j&&null!==n&&!k&&(0,t.jsxs)("button",{type:"button",onClick:B,title:`Clear — sets ${e} to ${w}`,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?w:"$"===u?`$${n}`:u?`${n} ${u}`:String(n)}),(0,t.jsx)(r.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})]})}])},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)},20870,e=>{"use strict";var t=e.i(54710),a=e.i(48467),s=e.i(74490),n=e.i(81471);let r={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=r[l];return(0,t.jsxs)(s.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)(a.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??"—"}]}])},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)},76176,e=>{"use strict";let t={claude:"Claude Code",codex:"OpenAI Codex",gemini:"Gemini CLI"},a={claude:"Claude",codex:"Codex",gemini:"Gemini"},s={claude:["#7C2D12","#B54B2D","#E15B40","#F97316","#FDBA74"],codex:["#86198F","#A21CAF","#D946EF","#E879F9","#F5D0FE"],gemini:["#1E3A8A","#1D4ED8","#1C69FF","#60A5FA","#93C5FD"]},n=["#6b7280","#9ca3af","#4b5563","#374151"],r={claude:"orange",codex:"pink",gemini:"blue"},i={"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","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"};function l(e){let t;if(!e)return[];try{t=JSON.parse(e)}catch{return[]}if(!t||"object"!=typeof t)return[];let a=[];for(let[e,s]of Object.entries(t))s&&"object"==typeof s&&a.push({modelId:e,inputTokens:"number"==typeof s.inputTokens?s.inputTokens:0,outputTokens:"number"==typeof s.outputTokens?s.outputTokens:0,costUsd:"number"==typeof s.costUsd?s.costUsd:0});return a.sort((e,t)=>t.costUsd-e.costUsd)}function o(e){if(!e)return null;let t=e.toLowerCase();return 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,r,"BACKEND_COLORS",0,{claude:"#E15B40",codex:"#D946EF",gemini:"#1C69FF"},"BACKEND_LABELS",0,t,"BACKEND_PROVIDER_LABELS",0,{claude:"Claude (Anthropic)",codex:"ChatGPT (OpenAI)",gemini:"Gemini (Google)"},"BACKEND_PROVIDER_SHORT",0,{claude:"Claude",codex:"ChatGPT",gemini:"Gemini"},"CHART_CATEGORY_PALETTE",0,["#3b82f6","#10b981","#f59e0b","#8b5cf6","#ec4899","#14b8a6","#f97316","#6366f1","#ef4444","#22c55e"],"assignModelColors",0,function(e){let t=new Map;for(let a of e){if(!a)continue;let e=o(a)??"other",s=t.get(e)??[];s.push(a),t.set(e,s)}let a={};for(let[e,r]of t){r.sort((e,t)=>e.localeCompare(t));let t="other"===e?n:s[e],i=r.length;r.forEach((e,s)=>{let n;n=i>=t.length?s%t.length:1===i?Math.floor(t.length/2):Math.floor((s+.5)*t.length/i),a[e]=t[n]})}return a},"detectBackendFromModel",0,o,"formatModelName",0,function(e){return e?e.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(/-\d{8,}$/,"").replace(/^claude-/,"").replace(/(\d+)-(\d+)(?![-\d])/g,"$1.$2").replace(/-/g," ");return e.startsWith("gpt-")&&(t=`GPT-${t.replace(/^gpt\s*/i,"")}`),e.startsWith("gemini-")&&(t=t.replace(/^gemini\s*/i,"Gemini ")),t.replace(/\bopus\b/gi,"Opus").replace(/\bsonnet\b/gi,"Sonnet").replace(/\bhaiku\b/gi,"Haiku").replace(/\bpro\b/gi,"Pro").replace(/\bflash\b/gi,"Flash").replace(/\blite\b/gi,"Lite").replace(/\bmini\b/gi,"Mini").replace(/\s+/g," ").trim()},"getBackendLabel",0,function(e){return t[e]},"getBackendShortLabel",0,function(e){return a[e]},"getProcessLabel",0,function(e){return i[e]??e},"modelBadgeVariant",0,function(e){if(!e)return"gray";let t=o(e);return t?r[t]:"gray"},"parseModelUsage",0,l,"pickDisplayModel",0,function(e,t){let a=l(t);return a.length>0&&a[0]?a[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),a=e.i(65268);e.s(["useBackends",0,function(e){return(0,t.useQuery)({queryKey:["backends"],queryFn:()=>a.api.get("/backends"),enabled:e?.enabled??!0,staleTime:6e4})}])},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),a=e.i(81471);let s=(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:r,...i}){return(0,t.jsx)("div",{className:(0,a.cn)(s({tone:n,interactive:r}),e),...i})},"CardHeader",0,function({className:e,...s}){return(0,t.jsx)("div",{className:(0,a.cn)("mb-3 flex items-center justify-between",e),...s})},"CardStatLabel",0,function({className:e,...s}){return(0,t.jsx)("h3",{className:(0,a.cn)("text-sm font-medium text-muted-foreground",e),...s})},"CardTitle",0,function({className:e,...s}){return(0,t.jsx)("h3",{className:(0,a.cn)("text-lg font-semibold text-foreground",e),...s})},"CardValue",0,function({className:e,...s}){return(0,t.jsx)("div",{className:(0,a.cn)("text-3xl font-bold text-foreground",e),...s})}])},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)},70986,e=>{"use strict";var t=e.i(34416),a=e.i(91967),s=e.i(9413),n=e.i(36567),r=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,s.createContextScope)(u),[p,x]=h(u),g=t.forwardRef((e,a)=>{let{__scopeCollapsible:s,open:r,defaultOpen:i,disabled:o,onOpenChange:h,...m}=e,[x,g]=(0,n.useControllableState)({prop:r,defaultProp:i??!1,onChange:h,caller:u});return(0,d.jsx)(p,{scope:s,disabled:o,contentId:(0,c.useId)(),open:x,onOpenToggle:t.useCallback(()=>g(e=>!e),[g]),children:(0,d.jsx)(l.Primitive.div,{"data-state":w(x),"data-disabled":o?"":void 0,...m,ref:a})})});g.displayName=u;var f="CollapsibleTrigger",b=t.forwardRef((e,t)=>{let{__scopeCollapsible:s,...n}=e,r=x(f,s);return(0,d.jsx)(l.Primitive.button,{type:"button","aria-controls":r.contentId,"aria-expanded":r.open||!1,"data-state":w(r.open),"data-disabled":r.disabled?"":void 0,disabled:r.disabled,...n,ref:t,onClick:(0,a.composeEventHandlers)(e.onClick,r.onOpenToggle)})});b.displayName=f;var y="CollapsibleContent",v=t.forwardRef((e,t)=>{let{forceMount:a,...s}=e,n=x(y,e.__scopeCollapsible);return(0,d.jsx)(o.Presence,{present:a||n.open,children:({present:e})=>(0,d.jsx)(j,{...s,ref:t,present:e})})});v.displayName=y;var j=t.forwardRef((e,a)=>{let{__scopeCollapsible:s,present:n,children:o,...c}=e,u=x(y,s),[h,m]=t.useState(n),p=t.useRef(null),g=(0,i.useComposedRefs)(a,p),f=t.useRef(0),b=f.current,v=t.useRef(0),j=v.current,k=u.open||h,N=t.useRef(k),C=t.useRef(void 0);return t.useEffect(()=>{let e=requestAnimationFrame(()=>N.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,r.useLayoutEffect)(()=>{let e=p.current;if(e){C.current=C.current||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration="0s",e.style.animationName="none";let t=e.getBoundingClientRect();f.current=t.height,v.current=t.width,N.current||(e.style.transitionDuration=C.current.transitionDuration,e.style.animationName=C.current.animationName),m(n)}},[u.open,n]),(0,d.jsx)(l.Primitive.div,{"data-state":w(u.open),"data-disabled":u.disabled?"":void 0,id:u.contentId,hidden:!k,...c,ref:g,style:{"--radix-collapsible-content-height":b?`${b}px`:void 0,"--radix-collapsible-content-width":j?`${j}px`:void 0,...e.style},children:k&&o})});function w(e){return e?"open":"closed"}e.s(["Collapsible",0,g,"CollapsibleContent",0,v,"CollapsibleTrigger",0,b],70986)},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)},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)},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)},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)},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)},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)},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)},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)},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 a(e){return/^[A-Za-z]:[\\/]/.test(e)||/^\\\\/.test(e)||/^\/\/[^/]+\/[^/]+/.test(e)||e.includes("\\")}function s(e,t){let a=e.trim().replace(/[\\/]+$/g,"");return t&&(a=a.replace(/[\\/]+/g,"/").toLowerCase()),a}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=a(e)||a(t),r=s(e,n),i=s(t,n);return i===r||i.startsWith(`${r}/`)}],64387);var n=e.i(54710),r=e.i(81471);e.s(["CHARACTER_MAX_LENGTH",0,1e3,"CharacterEditor",0,function({value:e,onChange:t,disabled:a=!1,placeholder:s,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:a,placeholder:s??"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,r.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),a=e.i(34416),s=e.i(95486),n=e.i(88423),r=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),g=e.i(88),f=e.i(20870);function b({label:e,accept:s,onUpload:n,configured:r}){let[i,l]=(0,a.useState)(!1),[d,u]=(0,a.useState)(null),p=(0,a.useRef)(null),x=(0,a.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:s,className:"hidden",onChange:e=>{let t=e.target.files?.[0];t&&x(t),e.target.value=""}}),(0,t.jsxs)(o.Button,{size:"sm",variant:r?"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]}),r&&(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 a=Math.floor((t-1)/2);return`${e.slice(0,t-1-a)}…${e.slice(-a)}`}(d.fileName)," uploaded"]}):(0,t.jsx)("span",{className:"block break-all",children:d.message})})]})}function y(){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,r.useHealth)(),{toast:v,saveField:j}=(0,i.useSaveConfig)(),w=(0,s.useQueryClient)(),k=h?.integrations?.google,[N,C]=(0,a.useState)(!1),[S,A]=(0,a.useState)(null),E=(0,a.useRef)(null),R=e?.googleCalendarCredentialsConfigured??!1,I=e?.googleCalendarTokenConfigured??!1,M=e?.googleCredentialType==="service_account",D=async e=>{await l.api.upload("/config/upload/google-credentials",e),w.invalidateQueries({queryKey:["config"]}),w.invalidateQueries({queryKey:["health"]})};(0,a.useEffect)(()=>()=>{E.current&&clearInterval(E.current)},[]),(0,a.useEffect)(()=>{let e=e=>{e.origin.startsWith("http://localhost")&&e.data?.type==="google-auth-success"&&(E.current&&(clearInterval(E.current),E.current=null),C(!1),w.invalidateQueries({queryKey:["config"]}),w.invalidateQueries({queryKey:["health"]}))};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)},[w]);let T=async()=>{C(!0),A(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){A("Popup blocked. Allow popups for this site and try again."),C(!1);return}E.current=setInterval(()=>{t.closed&&(E.current&&(clearInterval(E.current),E.current=null),C(!1),w.invalidateQueries({queryKey:["config"]}),w.invalidateQueries({queryKey:["health"]}))},1e3)}catch(e){A(e instanceof Error?e.message:"Failed to start authorization"),C(!1)}};if(!e||!h)return null;let F=k?.services?.calendar,P=k?.services?.gmail,O=N?"connecting":(0,f.deriveIntegrationStatus)(k);return(0,t.jsxs)(f.ConnectionCard,{name:"Google",icon:(0,t.jsx)(y,{}),status:O,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",F?.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:F?.connected?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground",children:F?.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",P?.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:P?.connected?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground",children:P?.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})]}),!M&&(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:T,disabled:!R||N,className:"text-xs",children:[(0,t.jsx)(p.ExternalLink,{className:"h-3.5 w-3.5 mr-1"}),N?"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&&(M||I)&&(0,t.jsxs)(c.Alert,{variant:"warning",className:"mt-3",children:[M?"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:[v&&(0,t.jsx)(c.Alert,{variant:v.type,className:"mb-2",children:v.message}),(0,t.jsx)(g.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:j})]})]})}])},86567,6423,86704,29472,e=>{"use strict";var t=e.i(54710),a=e.i(34416),s=e.i(45958),n=e.i(52387),r=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),g=e.i(95486);function f(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,g.useQueryClient)();return()=>{e.invalidateQueries({queryKey:["mail-providers"]}),e.invalidateQueries({queryKey:["mail-accounts"]}),e.invalidateQueries({queryKey:["mail-health"]})}}async function y(e,t,a){let s=new Set(e);a?s.add(t):s.delete(t);let n=["gmail","outlook","yahoo","icloud"].filter(e=>s.has(e));return await d.api.patch("/mail/providers",{enabledKinds:n}),n}e.s(["toggleProviderEnabled",0,y,"useInvalidateMail",0,b,"useMailAccountHealth",0,f,"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 v={healthy:{variant:"green",label:"Healthy"},requires_consent:{variant:"amber",label:"Re-authenticate"},degraded:{variant:"red",label:"Degraded"}};function j({account:e,highlight:s=!1,hideActive:n=!1,hideHealth:l=!1,onReauthenticate:u,isLastOfKind:p=!1,onAfterRemove:x}){let g=(0,a.useRef)(null),y=(0,i.useConfirm)(),N=b(),[C,S]=(0,a.useState)(!1),[A,E]=(0,a.useState)(null);(0,a.useEffect)(()=>{s&&g.current&&g.current.scrollIntoView({behavior:"smooth",block:"center"})},[s]);let R=f(e.id,!l).data??null,I="yahoo"===e.kind||"icloud"===e.kind,[M,D]=(0,a.useState)(!1),T=async()=>{E(null),S(!0);try{await d.api.patch(`/mail/accounts/${encodeURIComponent(e.id)}`,{active:!e.active}),N()}catch(e){E(e instanceof Error?e.message:"Failed to update")}finally{S(!1)}},F=async()=>{if(await y({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"})){E(null),S(!0);try{await d.api.delete(`/mail/accounts/${encodeURIComponent(e.id)}`),x&&await x(),N()}catch(e){E(e instanceof Error?e.message:"Failed to remove")}finally{S(!1)}}},P=v[e.authStatus],O=l||!e.idleEnabled?null:R?.idleFallbackUntilUtc?{label:"polling (IDLE down)",variant:"amber"}:{label:"IDLE",variant:"green"};return(0,t.jsxs)("div",{ref:g,id:`account-${e.id}`,className:"rounded-md border p-3 transition-colors "+(s?"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:P.variant,children:P.label}),O&&(0,t.jsx)(h.Badge,{variant:O.variant,children:O.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:C,onChange:()=>void T(),className:"h-3.5 w-3.5 rounded border-border"}),"Active"]}),"requires_consent"===e.authStatus&&(I?(0,t.jsx)(r.Button,{size:"sm",variant:"outline",disabled:C,onClick:()=>D(e=>!e),className:"h-7 text-xs px-2",children:M?"Cancel":"Re-authenticate"}):u&&(0,t.jsx)(r.Button,{size:"sm",variant:"outline",disabled:C,onClick:()=>void u(),className:"h-7 text-xs px-2",children:"Re-authenticate"})),(0,t.jsx)(r.Button,{size:"sm",variant:"outline",onClick:()=>void F(),disabled:C,className:"h-7 px-2",title:"Remove account",children:(0,t.jsx)(c.Trash2,{className:"h-3.5 w-3.5"})})]})]}),A&&(0,t.jsx)(m.Alert,{variant:"error",className:"mt-2",children:A}),I&&M&&(0,t.jsx)(w,{accountId:e.id,onSuccess:()=>{D(!1),N()}})]})}function w({accountId:e,onSuccess:s}){let[n,i]=(0,a.useState)(""),[l,o]=(0,a.useState)(!1),[c,h]=(0,a.useState)(null),p=async()=>{o(!0),h(null);try{await d.api.post(`/config/mail/app-password/${encodeURIComponent(e)}/refresh`,{appPassword:n.trim()}),i(""),s()}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)(r.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 a=e.lastPollAtUtc,s=null!=a&&Date.now()-(0,p.parseUtcDate)(a).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:"," ",a?(0,t.jsxs)("span",{title:(0,p.formatAbsoluteTime)(a),className:s?"text-amber-600 dark:text-amber-400":void 0,children:[(0,p.formatRelativeTime)(a),s?" · 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 N=e.i(74490),C=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 A(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 E(e){let a=S[e.status],s="attention"===e.status?"warning":"enabled"===e.status?"success":"default";return(0,t.jsxs)(N.Card,{tone:s,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:a.variant,children:a.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)(C.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)(C.Separator,{className:"my-4"}),(0,t.jsx)(R,{toggle:e.enableToggle})]})}function R({toggle:e}){let[s,n]=(0,a.useState)(null),r=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 r(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}),s&&(0,t.jsx)(m.Alert,{variant:"error",className:"mt-2",children:s})]})}e.s(["GmailCard",0,function({accounts:e,enabledKinds:l,focusAccountId:o,hideExternalGoogleLink:c=!1}){let d=b(),u=(0,i.useConfirm)(),[h,m]=(0,a.useState)(!1),p=l.includes("gmail"),x=A({accounts:e,enabled:p}),g=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 y(l,"gmail",e),d()}finally{m(!1)}}};return(0,t.jsx)(E,{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)(s.default,{href:"/connections/calendar#google",children:(0,t.jsxs)(r.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)(s.default,{href:"/connections/calendar#google",className:"underline underline-offset-2",children:"Google connection card"}),"."]}),accountsSection:e.length>0?e.map(a=>(0,t.jsx)(j,{account:a,highlight:o===a.id,hideActive:!0,hideHealth:!0,isLastOfKind:1===e.length,onAfterRemove:async()=>{1===e.length&&p&&await y(l,"gmail",!1)}},a.id)):void 0,enableToggle:{enabled:p,disabled:0===e.length,disabledReason:0===e.length?"Connect a Google account first.":void 0,busy:h,onChange:g,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 M({index:e,title:a,completed:s=!1,disabled:n=!1,children:r}){return(0,t.jsxs)("div",{className:"rounded-md border border-dashed p-3 "+(n?"border-border opacity-50":s?"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,": ",a,s&&(0,t.jsx)("span",{className:"ml-2 text-emerald-600 dark:text-emerald-400",children:"✓"})]}),r]})}e.s(["OutlookCard",0,function({accounts:e,enabledKinds:s,focusAccountId:l}){let o=b(),c=(0,i.useConfirm)(),h=s.includes("outlook"),p=(0,x.useQuery)({queryKey:["outlook-client-config"],queryFn:()=>d.api.get("/config/mail/outlook/client-config"),staleTime:3e4}),g=p.data?.configured===!0,f=A({accounts:e,enabled:h,awaitingProviderSetup:!g}),[v,w]=(0,a.useState)(!1),[k,N]=(0,a.useState)(""),[C,S]=(0,a.useState)("common"),[R,D]=(0,a.useState)(""),[T,F]=(0,a.useState)(!1),[P,O]=(0,a.useState)(null),[L,_]=(0,a.useState)(null),[q,B]=(0,a.useState)(null),[G,z]=(0,a.useState)(!1),U=async e=>{z(!0);try{await y(s,"outlook",e),o()}finally{z(!1)}},H=async()=>{F(!0),O(null);try{await d.api.put("/config/mail/outlook/client-config",{clientId:k.trim(),tenant:C.trim()||"common"}),await p.refetch(),w(!1)}catch(e){O(e instanceof Error?e.message:"Failed to save client config")}finally{F(!1)}},$=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"})){F(!0),O(null);try{await d.api.delete("/config/mail/outlook/client-config"),await p.refetch()}catch(e){O(e instanceof Error?e.message:"Failed to reset")}finally{F(!1)}}},K=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"})){F(!0),O(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){O(e instanceof Error?e.message:"OAuth failed")}finally{F(!1)}}},W=async()=>{F(!0),O(null),_(null),B(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(),a=new TextDecoder,s="";for(;;){let{value:e,done:n}=await t.read();if(n)break;let r=(s+=a.decode(e,{stream:!0})).split("\n\n");for(let e of(s=r.pop()??"",r)){let t=e.split("\n"),a="",s="";for(let e of t)e.startsWith("event:")&&(a=e.slice(6).trim()),e.startsWith("data:")&&(s+=e.slice(5).trim());if(a){if("prompt"===a)B(JSON.parse(s));else if("completed"===a)_("Outlook account authenticated. Toggle the switch below to start using it."),B(null),D(""),o();else if("failed"===a){let e=JSON.parse(s);throw Error(e.message??"device-code failed")}}}}}catch(e){O(e instanceof Error?e.message:"Device-code OAuth failed"),B(null)}finally{F(!1)}},Q=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(M,{index:1,title:"Register an Azure app (one-time)",completed:g,children:[!g&&!v&&(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)(r.Button,{size:"sm",variant:"outline",onClick:()=>w(!0),className:"h-7 text-xs px-3",children:"I have a client ID"})]}),v&&(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=>N(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:C,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)(r.Button,{size:"sm",variant:"outline",onClick:()=>void H(),disabled:T||0===k.trim().length,className:"h-7 text-xs px-3",children:T?"Saving…":"Save"}),(0,t.jsx)(r.Button,{size:"sm",variant:"outline",onClick:()=>w(!1),disabled:T,className:"h-7 text-xs px-3",children:"Cancel"})]})]}),g&&!v&&(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 $(),disabled:T,children:"reset"})]})]}),(0,t.jsx)(M,{index:2,title:"Authenticate an Outlook account",disabled:!g,children:g?(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)(r.Button,{size:"sm",onClick:()=>void K(),disabled:T,className:"h-7 text-xs px-3",children:T?"Waiting for consent…":"Authenticate (browser)"}),(0,t.jsx)(r.Button,{size:"sm",variant:"outline",onClick:()=>void W(),disabled:T,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."})}),q&&(0,t.jsx)(m.Alert,{variant:"warning",children:(0,t.jsxs)("div",{className:"text-xs",children:["Visit"," ",(0,t.jsx)("a",{href:q.verificationUri,target:"_blank",rel:"noreferrer",className:"underline",children:q.verificationUri})," ","and enter code"," ",(0,t.jsx)("code",{className:"font-mono",children:q.userCode}),". Expires in ",Math.round(q.expiresIn/60)," min."]})}),L&&(0,t.jsx)(m.Alert,{variant:"success",children:L}),P&&(0,t.jsx)(m.Alert,{variant:"error",children:P})]});return(0,t.jsx)(E,{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:f,setupSection:Q,accountsSection:e.length>0?e.map(a=>(0,t.jsx)(j,{account:a,highlight:l===a.id,onReauthenticate:()=>void K(),isLastOfKind:1===e.length,onAfterRemove:async()=>{1===e.length&&h&&await y(s,"outlook",!1)}},a.id)):void 0,enableToggle:{enabled:h,disabled:0===e.length,disabledReason:0===e.length?"Authenticate an Outlook account first.":void 0,busy:G,onChange:U,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:s,enabledKinds:i,focusAccountId:l}){let o=b(),c=D[e],h=i.includes(e),p=A({accounts:s,enabled:h}),[x,g]=(0,a.useState)(""),[f,v]=(0,a.useState)(""),[w,k]=(0,a.useState)(""),[N,C]=(0,a.useState)(!1),[S,R]=(0,a.useState)(null),[I,M]=(0,a.useState)(null),[T,F]=(0,a.useState)(!1),P=async t=>{F(!0);try{await y(i,e,t),o()}finally{F(!1)}},O=async()=>{C(!0),R(null),M(null);try{await d.api.post("/config/mail/app-password",{kind:e,email:`${x.trim()}@${c.defaultDomain}`,appPassword:f.trim(),label:w.trim()||void 0}),M(`${c.name} authenticated. Toggle the switch below to start using it.`),g(""),v(""),k(""),o()}catch(e){R(e instanceof Error?e.message:"Failed to connect")}finally{C(!1)}},L=(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,a)=>(0,t.jsx)("li",{children:e},a))})]}),(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=>g(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:f,onChange:e=>v(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:w,onChange:e=>k(e.target.value),placeholder:"personal, family, …",className:"h-8 text-xs"})]}),(0,t.jsx)(r.Button,{size:"sm",onClick:()=>void O(),disabled:N||0===x.trim().length||0===f.trim().length,className:"h-7 text-xs px-3",children:N?"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)(E,{name:c.name,description:c.description,status:p,setupSection:L,accountsSection:s.length>0?s.map(a=>(0,t.jsx)(j,{account:a,highlight:l===a.id,isLastOfKind:1===s.length,onAfterRemove:async()=>{1===s.length&&h&&await y(i,e,!1)}},a.id)):void 0,enableToggle:{enabled:h,disabled:0===s.length,disabledReason:0===s.length?`Authenticate a ${c.name} account first.`:void 0,busy:T,onChange:P,explainer:`When enabled, the agent observes your ${c.name} inbox via IMAP IDLE and can read, draft, and send messages.`}})}],29472)}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,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)},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)},75540,e=>{"use strict";var t=e.i(46437),r=e.i(49457),a=class extends t.QueryObserver{constructor(e,t){super(e,t)}bindMethods(){super.bindMethods(),this.fetchNextPage=this.fetchNextPage.bind(this),this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(e){super.setOptions({...e,behavior:(0,r.infiniteQueryBehavior)()})}getOptimisticResult(e){return e.behavior=(0,r.infiniteQueryBehavior)(),super.getOptimisticResult(e)}fetchNextPage(e){return this.fetch({...e,meta:{fetchMore:{direction:"forward"}}})}fetchPreviousPage(e){return this.fetch({...e,meta:{fetchMore:{direction:"backward"}}})}createResult(e,t){let{state:a}=e,n=super.createResult(e,t),{isFetching:s,isRefetching:i,isError:o,isRefetchError:u}=n,d=a.fetchMeta?.fetchMore?.direction,l=o&&"forward"===d,c=s&&"forward"===d,f=o&&"backward"===d,m=s&&"backward"===d;return{...n,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:(0,r.hasNextPage)(t,a.data),hasPreviousPage:(0,r.hasPreviousPage)(t,a.data),isFetchNextPageError:l,isFetchingNextPage:c,isFetchPreviousPageError:f,isFetchingPreviousPage:m,isRefetchError:u&&!l&&!f,isRefetching:i&&!c&&!m}}},n=e.i(98757);e.s(["useInfiniteQuery",0,function(e,t){return(0,n.useBaseQuery)(e,a,t)}],75540)},50862,e=>{"use strict";var t=e.i(54710),r=e.i(81471);e.s(["EmptyState",0,function({icon:e,title:a,description:n,className:s,children:i}){return(0,t.jsxs)("div",{className:(0,r.cn)("flex flex-col items-center justify-center py-16 text-muted-foreground",s),children:[(0,t.jsx)(e,{className:"mb-3 h-10 w-10 opacity-40"}),(0,t.jsx)("p",{className:"text-sm font-medium",children:a}),n&&(0,t.jsx)("p",{className:"mt-1 max-w-prose text-xs text-muted-foreground/70",children:n}),i]})}])},49785,e=>{"use strict";var t=e.i(54710),r=e.i(63991),a=e.i(72740),n=e.i(20014),s=e.i(81471);function i(){return(0,t.jsx)("div",{className:"flex items-center justify-center py-16",children:(0,t.jsx)(a.Loader2,{className:"h-6 w-6 animate-spin text-muted-foreground"})})}function o({error:e,onRetry:a}){return(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center gap-3 py-16",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 text-destructive",children:[(0,t.jsx)(r.AlertCircle,{className:"h-5 w-5"}),(0,t.jsx)("p",{className:"text-sm font-medium",children:"Failed to load data"})]}),e?.message&&(0,t.jsx)("p",{className:"max-w-md text-center text-xs text-muted-foreground",children:e.message}),a&&(0,t.jsx)(n.Button,{variant:"outline",size:"sm",onClick:a,children:"Retry"})]})}e.s(["CardSkeleton",0,function({count:e=3}){return(0,t.jsx)("div",{className:(0,s.cn)("grid gap-4",e<=2?"grid-cols-1 md:grid-cols-2":4===e?"grid-cols-2 md:grid-cols-4":"grid-cols-1 md:grid-cols-3"),children:Array.from({length:e}).map((e,r)=>(0,t.jsx)("div",{className:"h-28 animate-pulse rounded-xl border border-border bg-muted/30"},r))})},"QueryResult",0,function({isLoading:e,isError:r,error:a,onRetry:n,skeleton:u,className:d,children:l}){return e?(0,t.jsx)("div",{className:(0,s.cn)(d),children:u??(0,t.jsx)(i,{})}):r?(0,t.jsx)("div",{className:(0,s.cn)(d),children:(0,t.jsx)(o,{error:a,onRetry:n})}):(0,t.jsx)(t.Fragment,{children:l})},"TableSkeleton",0,function({rows:e=5}){return(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("div",{className:"h-10 animate-pulse rounded-lg bg-muted/40"}),Array.from({length:e}).map((e,r)=>(0,t.jsx)("div",{className:"h-12 animate-pulse rounded-lg bg-muted/20"},r))]})}])},26406,e=>{"use strict";var t=e.i(54710),r=e.i(34416),a=e.i(91967),n=e.i(9413),s=e.i(87099),i=e.i(22353),o=e.i(11207),u=e.i(85565),d=e.i(88248),l=e.i(36567),c=e.i(75649),f="rovingFocusGroup.onEntryFocus",m={bubbles:!1,cancelable:!0},v="RovingFocusGroup",[g,h,p]=(0,s.createCollection)(v),[y,x]=(0,n.createContextScope)(v,[p]),[b,k]=y(v),w=r.forwardRef((e,r)=>(0,t.jsx)(g.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,t.jsx)(g.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,t.jsx)(j,{...e,ref:r})})}));w.displayName=v;var j=r.forwardRef((e,n)=>{let{__scopeRovingFocusGroup:s,orientation:o,loop:g=!1,dir:p,currentTabStopId:y,defaultCurrentTabStopId:x,onCurrentTabStopIdChange:k,onEntryFocus:w,preventScrollOnEntryFocus:j=!1,...P}=e,N=r.useRef(null),T=(0,i.useComposedRefs)(n,N),R=(0,c.useDirection)(p),[M,F]=(0,l.useControllableState)({prop:y,defaultProp:x??null,onChange:k,caller:v}),[K,Q]=r.useState(!1),E=(0,d.useCallbackRef)(w),q=h(s),I=r.useRef(!1),[S,A]=r.useState(0);return r.useEffect(()=>{let e=N.current;if(e)return e.addEventListener(f,E),()=>e.removeEventListener(f,E)},[E]),(0,t.jsx)(b,{scope:s,orientation:o,dir:R,loop:g,currentTabStopId:M,onItemFocus:r.useCallback(e=>F(e),[F]),onItemShiftTab:r.useCallback(()=>Q(!0),[]),onFocusableItemAdd:r.useCallback(()=>A(e=>e+1),[]),onFocusableItemRemove:r.useCallback(()=>A(e=>e-1),[]),children:(0,t.jsx)(u.Primitive.div,{tabIndex:K||0===S?-1:0,"data-orientation":o,...P,ref:T,style:{outline:"none",...e.style},onMouseDown:(0,a.composeEventHandlers)(e.onMouseDown,()=>{I.current=!0}),onFocus:(0,a.composeEventHandlers)(e.onFocus,e=>{let t=!I.current;if(e.target===e.currentTarget&&t&&!K){let t=new CustomEvent(f,m);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=q().filter(e=>e.focusable);C([e.find(e=>e.active),e.find(e=>e.id===M),...e].filter(Boolean).map(e=>e.ref.current),j)}}I.current=!1}),onBlur:(0,a.composeEventHandlers)(e.onBlur,()=>Q(!1))})})}),P="RovingFocusGroupItem",N=r.forwardRef((e,n)=>{let{__scopeRovingFocusGroup:s,focusable:i=!0,active:d=!1,tabStopId:l,children:c,...f}=e,m=(0,o.useId)(),v=l||m,p=k(P,s),y=p.currentTabStopId===v,x=h(s),{onFocusableItemAdd:b,onFocusableItemRemove:w,currentTabStopId:j}=p;return r.useEffect(()=>{if(i)return b(),()=>w()},[i,b,w]),(0,t.jsx)(g.ItemSlot,{scope:s,id:v,focusable:i,active:d,children:(0,t.jsx)(u.Primitive.span,{tabIndex:y?0:-1,"data-orientation":p.orientation,...f,ref:n,onMouseDown:(0,a.composeEventHandlers)(e.onMouseDown,e=>{i?p.onItemFocus(v):e.preventDefault()}),onFocus:(0,a.composeEventHandlers)(e.onFocus,()=>p.onItemFocus(v)),onKeyDown:(0,a.composeEventHandlers)(e.onKeyDown,e=>{if("Tab"===e.key&&e.shiftKey)return void p.onItemShiftTab();if(e.target!==e.currentTarget)return;let t=function(e,t,r){var a;let n=(a=e.key,"rtl"!==r?a:"ArrowLeft"===a?"ArrowRight":"ArrowRight"===a?"ArrowLeft":a);if(!("vertical"===t&&["ArrowLeft","ArrowRight"].includes(n))&&!("horizontal"===t&&["ArrowUp","ArrowDown"].includes(n)))return T[n]}(e,p.orientation,p.dir);if(void 0!==t){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=x().filter(e=>e.focusable).map(e=>e.ref.current);if("last"===t)n.reverse();else if("prev"===t||"next"===t){var r,a;"prev"===t&&n.reverse();let s=n.indexOf(e.currentTarget);n=p.loop?(r=n,a=s+1,r.map((e,t)=>r[(a+t)%r.length])):n.slice(s+1)}setTimeout(()=>C(n))}}),children:"function"==typeof c?c({isCurrentTabStop:y,hasTabStop:null!=j}):c})})});N.displayName=P;var T={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function C(e,t=!1){let r=document.activeElement;for(let a of e)if(a===r||(a.focus({preventScroll:t}),document.activeElement!==r))return}var R=e.i(90816),M="Tabs",[F,K]=(0,n.createContextScope)(M,[x]),Q=x(),[E,q]=F(M),I=r.forwardRef((e,r)=>{let{__scopeTabs:a,value:n,onValueChange:s,defaultValue:i,orientation:d="horizontal",dir:f,activationMode:m="automatic",...v}=e,g=(0,c.useDirection)(f),[h,p]=(0,l.useControllableState)({prop:n,onChange:s,defaultProp:i??"",caller:M});return(0,t.jsx)(E,{scope:a,baseId:(0,o.useId)(),value:h,onValueChange:p,orientation:d,dir:g,activationMode:m,children:(0,t.jsx)(u.Primitive.div,{dir:g,"data-orientation":d,...v,ref:r})})});I.displayName=M;var S="TabsList",A=r.forwardRef((e,r)=>{let{__scopeTabs:a,loop:n=!0,...s}=e,i=q(S,a),o=Q(a);return(0,t.jsx)(w,{asChild:!0,...o,orientation:i.orientation,dir:i.dir,loop:n,children:(0,t.jsx)(u.Primitive.div,{role:"tablist","aria-orientation":i.orientation,...s,ref:r})})});A.displayName=S;var D="TabsTrigger",_=r.forwardRef((e,r)=>{let{__scopeTabs:n,value:s,disabled:i=!1,...o}=e,d=q(D,n),l=Q(n),c=$(d.baseId,s),f=B(d.baseId,s),m=s===d.value;return(0,t.jsx)(N,{asChild:!0,...l,focusable:!i,active:m,children:(0,t.jsx)(u.Primitive.button,{type:"button",role:"tab","aria-selected":m,"aria-controls":f,"data-state":m?"active":"inactive","data-disabled":i?"":void 0,disabled:i,id:c,...o,ref:r,onMouseDown:(0,a.composeEventHandlers)(e.onMouseDown,e=>{i||0!==e.button||!1!==e.ctrlKey?e.preventDefault():d.onValueChange(s)}),onKeyDown:(0,a.composeEventHandlers)(e.onKeyDown,e=>{[" ","Enter"].includes(e.key)&&d.onValueChange(s)}),onFocus:(0,a.composeEventHandlers)(e.onFocus,()=>{let e="manual"!==d.activationMode;m||i||!e||d.onValueChange(s)})})})});_.displayName=D;var H="TabsContent",L=r.forwardRef((e,a)=>{let{__scopeTabs:n,value:s,forceMount:i,children:o,...d}=e,l=q(H,n),c=$(l.baseId,s),f=B(l.baseId,s),m=s===l.value,v=r.useRef(m);return r.useEffect(()=>{let e=requestAnimationFrame(()=>v.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,t.jsx)(R.Presence,{present:i||m,children:({present:r})=>(0,t.jsx)(u.Primitive.div,{"data-state":m?"active":"inactive","data-orientation":l.orientation,role:"tabpanel","aria-labelledby":c,hidden:!r,id:f,tabIndex:0,...d,ref:a,style:{...e.style,animationDuration:v.current?"0s":void 0},children:r&&o})})});function $(e,t){return`${e}-trigger-${t}`}function B(e,t){return`${e}-content-${t}`}L.displayName=H;var O=e.i(81471);e.s(["Tabs",0,I,"TabsContent",0,function({className:e,...r}){return(0,t.jsx)(L,{className:(0,O.cn)("mt-2 ring-offset-background focus-visible:outline-none",e),...r})},"TabsList",0,function({className:e,...r}){return(0,t.jsx)(A,{className:(0,O.cn)("inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",e),...r})},"TabsTrigger",0,function({className:e,...r}){return(0,t.jsx)(_,{className:(0,O.cn)("inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",e),...r})}],26406)},90780,e=>{"use strict";let t=(0,e.i(77379).default)("Pen",[["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"}]]);e.s(["Edit2",0,t],90780)},26928,e=>{"use strict";var t=e.i(75540),r=e.i(57415),a=e.i(14260),n=e.i(95486),s=e.i(65268);let i=["managed-tasks"],o=["management-history"];function u(e){e.invalidateQueries({queryKey:i}),e.invalidateQueries({queryKey:o}),e.invalidateQueries({queryKey:["managed-task"]}),e.invalidateQueries({queryKey:["recurring-schedules"]}),e.invalidateQueries({queryKey:["schedule-list"]}),e.invalidateQueries({queryKey:["schedule-next"]})}e.s(["useDeleteManagedTask",0,function(){let e=(0,n.useQueryClient)();return(0,r.useMutation)({mutationFn:e=>s.api.delete(`/managed-tasks/${e}`),onSuccess:()=>u(e)})},"useManagedTask",0,function(e){return(0,a.useQuery)({queryKey:["managed-task",e],queryFn:()=>s.api.get(`/managed-tasks/${e}`),enabled:!!e,staleTime:15e3})},"useManagedTaskRuns",0,function(e,t=25){return(0,a.useQuery)({queryKey:["managed-task-runs",e,t],queryFn:()=>s.api.get(`/managed-tasks/${e}/runs`,{limit:t}),enabled:!!e,staleTime:15e3})},"useManagedTasks",0,function(){return(0,a.useQuery)({queryKey:i,queryFn:()=>s.api.get("/managed-tasks"),staleTime:3e4})},"useManagementHistory",0,function(e=50){return(0,t.useInfiniteQuery)({queryKey:[...o,e],queryFn:({pageParam:t})=>s.api.get("/management-history",{limit:e,...t?{before_id:t}:{}}),initialPageParam:void 0,getNextPageParam:e=>e.nextCursor??void 0,staleTime:15e3})},"useRenameManagedTaskApp",0,function(){let e=(0,n.useQueryClient)();return(0,r.useMutation)({mutationFn:({id:e,newApp:t})=>s.api.post(`/managed-tasks/${e}/rename-app`,{newApp:t}),onSuccess:(t,r)=>{u(e),e.invalidateQueries({queryKey:["managed-task-runs",r.id]}),e.invalidateQueries({queryKey:["entities"]}),e.invalidateQueries({queryKey:["entities-by-source"]})}})},"useRunManagedTaskNow",0,function(){let e=(0,n.useQueryClient)();return(0,r.useMutation)({mutationFn:({id:e,reason:t})=>s.api.post(`/managed-tasks/${e}/run-now`,{reason:t}),onSuccess:(t,r)=>{e.invalidateQueries({queryKey:o}),e.invalidateQueries({queryKey:["managed-task-runs",r.id]}),e.invalidateQueries({queryKey:["schedule-list"]})}})},"useUpdateManagedTask",0,function(){let e=(0,n.useQueryClient)();return(0,r.useMutation)({mutationFn:({id:e,...t})=>s.api.patch(`/managed-tasks/${e}`,t),onSuccess:(t,r)=>{u(e),e.invalidateQueries({queryKey:["managed-task-runs",r.id]})}})}])}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,74490,e=>{"use strict";var t=e.i(54710),r=e.i(81471);let n=(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:a,interactive:i,...s}){return(0,t.jsx)("div",{className:(0,r.cn)(n({tone:a,interactive:i}),e),...s})},"CardHeader",0,function({className:e,...n}){return(0,t.jsx)("div",{className:(0,r.cn)("mb-3 flex items-center justify-between",e),...n})},"CardStatLabel",0,function({className:e,...n}){return(0,t.jsx)("h3",{className:(0,r.cn)("text-sm font-medium text-muted-foreground",e),...n})},"CardTitle",0,function({className:e,...n}){return(0,t.jsx)("h3",{className:(0,r.cn)("text-lg font-semibold text-foreground",e),...n})},"CardValue",0,function({className:e,...n}){return(0,t.jsx)("div",{className:(0,r.cn)("text-3xl font-bold text-foreground",e),...n})}])},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)},76176,e=>{"use strict";let t={claude:"Claude Code",codex:"OpenAI Codex",gemini:"Gemini CLI"},r={claude:"Claude",codex:"Codex",gemini:"Gemini"},n={claude:["#7C2D12","#B54B2D","#E15B40","#F97316","#FDBA74"],codex:["#86198F","#A21CAF","#D946EF","#E879F9","#F5D0FE"],gemini:["#1E3A8A","#1D4ED8","#1C69FF","#60A5FA","#93C5FD"]},a=["#6b7280","#9ca3af","#4b5563","#374151"],i={claude:"orange",codex:"pink",gemini:"blue"},s={"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","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"};function o(e){let t;if(!e)return[];try{t=JSON.parse(e)}catch{return[]}if(!t||"object"!=typeof t)return[];let r=[];for(let[e,n]of Object.entries(t))n&&"object"==typeof n&&r.push({modelId:e,inputTokens:"number"==typeof n.inputTokens?n.inputTokens:0,outputTokens:"number"==typeof n.outputTokens?n.outputTokens:0,costUsd:"number"==typeof n.costUsd?n.costUsd:0});return r.sort((e,t)=>t.costUsd-e.costUsd)}function l(e){if(!e)return null;let t=e.toLowerCase();return 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,i,"BACKEND_COLORS",0,{claude:"#E15B40",codex:"#D946EF",gemini:"#1C69FF"},"BACKEND_LABELS",0,t,"BACKEND_PROVIDER_LABELS",0,{claude:"Claude (Anthropic)",codex:"ChatGPT (OpenAI)",gemini:"Gemini (Google)"},"BACKEND_PROVIDER_SHORT",0,{claude:"Claude",codex:"ChatGPT",gemini:"Gemini"},"CHART_CATEGORY_PALETTE",0,["#3b82f6","#10b981","#f59e0b","#8b5cf6","#ec4899","#14b8a6","#f97316","#6366f1","#ef4444","#22c55e"],"assignModelColors",0,function(e){let t=new Map;for(let r of e){if(!r)continue;let e=l(r)??"other",n=t.get(e)??[];n.push(r),t.set(e,n)}let r={};for(let[e,i]of t){i.sort((e,t)=>e.localeCompare(t));let t="other"===e?a:n[e],s=i.length;i.forEach((e,n)=>{let a;a=s>=t.length?n%t.length:1===s?Math.floor(t.length/2):Math.floor((n+.5)*t.length/s),r[e]=t[a]})}return r},"detectBackendFromModel",0,l,"formatModelName",0,function(e){return e?e.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(/-\d{8,}$/,"").replace(/^claude-/,"").replace(/(\d+)-(\d+)(?![-\d])/g,"$1.$2").replace(/-/g," ");return e.startsWith("gpt-")&&(t=`GPT-${t.replace(/^gpt\s*/i,"")}`),e.startsWith("gemini-")&&(t=t.replace(/^gemini\s*/i,"Gemini ")),t.replace(/\bopus\b/gi,"Opus").replace(/\bsonnet\b/gi,"Sonnet").replace(/\bhaiku\b/gi,"Haiku").replace(/\bpro\b/gi,"Pro").replace(/\bflash\b/gi,"Flash").replace(/\blite\b/gi,"Lite").replace(/\bmini\b/gi,"Mini").replace(/\s+/g," ").trim()},"getBackendLabel",0,function(e){return t[e]},"getBackendShortLabel",0,function(e){return r[e]},"getProcessLabel",0,function(e){return s[e]??e},"modelBadgeVariant",0,function(e){if(!e)return"gray";let t=l(e);return t?i[t]:"gray"},"parseModelUsage",0,o,"pickDisplayModel",0,function(e,t){let r=o(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)},75540,e=>{"use strict";var t=e.i(46437),r=e.i(49457),n=class extends t.QueryObserver{constructor(e,t){super(e,t)}bindMethods(){super.bindMethods(),this.fetchNextPage=this.fetchNextPage.bind(this),this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(e){super.setOptions({...e,behavior:(0,r.infiniteQueryBehavior)()})}getOptimisticResult(e){return e.behavior=(0,r.infiniteQueryBehavior)(),super.getOptimisticResult(e)}fetchNextPage(e){return this.fetch({...e,meta:{fetchMore:{direction:"forward"}}})}fetchPreviousPage(e){return this.fetch({...e,meta:{fetchMore:{direction:"backward"}}})}createResult(e,t){let{state:n}=e,a=super.createResult(e,t),{isFetching:i,isRefetching:s,isError:o,isRefetchError:l}=a,u=n.fetchMeta?.fetchMore?.direction,c=o&&"forward"===u,d=i&&"forward"===u,f=o&&"backward"===u,m=i&&"backward"===u;return{...a,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:(0,r.hasNextPage)(t,n.data),hasPreviousPage:(0,r.hasPreviousPage)(t,n.data),isFetchNextPageError:c,isFetchingNextPage:d,isFetchPreviousPageError:f,isFetchingPreviousPage:m,isRefetchError:l&&!c&&!f,isRefetching:s&&!d&&!m}}},a=e.i(98757);e.s(["useInfiniteQuery",0,function(e,t){return(0,a.useBaseQuery)(e,n,t)}],75540)},50862,e=>{"use strict";var t=e.i(54710),r=e.i(81471);e.s(["EmptyState",0,function({icon:e,title:n,description:a,className:i,children:s}){return(0,t.jsxs)("div",{className:(0,r.cn)("flex flex-col items-center justify-center py-16 text-muted-foreground",i),children:[(0,t.jsx)(e,{className:"mb-3 h-10 w-10 opacity-40"}),(0,t.jsx)("p",{className:"text-sm font-medium",children:n}),a&&(0,t.jsx)("p",{className:"mt-1 max-w-prose text-xs text-muted-foreground/70",children:a}),s]})}])},49785,e=>{"use strict";var t=e.i(54710),r=e.i(63991),n=e.i(72740),a=e.i(20014),i=e.i(81471);function s(){return(0,t.jsx)("div",{className:"flex items-center justify-center py-16",children:(0,t.jsx)(n.Loader2,{className:"h-6 w-6 animate-spin text-muted-foreground"})})}function o({error:e,onRetry:n}){return(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center gap-3 py-16",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 text-destructive",children:[(0,t.jsx)(r.AlertCircle,{className:"h-5 w-5"}),(0,t.jsx)("p",{className:"text-sm font-medium",children:"Failed to load data"})]}),e?.message&&(0,t.jsx)("p",{className:"max-w-md text-center text-xs text-muted-foreground",children:e.message}),n&&(0,t.jsx)(a.Button,{variant:"outline",size:"sm",onClick:n,children:"Retry"})]})}e.s(["CardSkeleton",0,function({count:e=3}){return(0,t.jsx)("div",{className:(0,i.cn)("grid gap-4",e<=2?"grid-cols-1 md:grid-cols-2":4===e?"grid-cols-2 md:grid-cols-4":"grid-cols-1 md:grid-cols-3"),children:Array.from({length:e}).map((e,r)=>(0,t.jsx)("div",{className:"h-28 animate-pulse rounded-xl border border-border bg-muted/30"},r))})},"QueryResult",0,function({isLoading:e,isError:r,error:n,onRetry:a,skeleton:l,className:u,children:c}){return e?(0,t.jsx)("div",{className:(0,i.cn)(u),children:l??(0,t.jsx)(s,{})}):r?(0,t.jsx)("div",{className:(0,i.cn)(u),children:(0,t.jsx)(o,{error:n,onRetry:a})}):(0,t.jsx)(t.Fragment,{children:c})},"TableSkeleton",0,function({rows:e=5}){return(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("div",{className:"h-10 animate-pulse rounded-lg bg-muted/40"}),Array.from({length:e}).map((e,r)=>(0,t.jsx)("div",{className:"h-12 animate-pulse rounded-lg bg-muted/20"},r))]})}])},26406,e=>{"use strict";var t=e.i(54710),r=e.i(34416),n=e.i(91967),a=e.i(9413),i=e.i(87099),s=e.i(22353),o=e.i(11207),l=e.i(85565),u=e.i(88248),c=e.i(36567),d=e.i(75649),f="rovingFocusGroup.onEntryFocus",m={bubbles:!1,cancelable:!0},g="RovingFocusGroup",[p,h,b]=(0,i.createCollection)(g),[v,x]=(0,a.createContextScope)(g,[b]),[y,w]=v(g),C=r.forwardRef((e,r)=>(0,t.jsx)(p.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,t.jsx)(p.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,t.jsx)(k,{...e,ref:r})})}));C.displayName=g;var k=r.forwardRef((e,a)=>{let{__scopeRovingFocusGroup:i,orientation:o,loop:p=!1,dir:b,currentTabStopId:v,defaultCurrentTabStopId:x,onCurrentTabStopIdChange:w,onEntryFocus:C,preventScrollOnEntryFocus:k=!1,...j}=e,N=r.useRef(null),R=(0,s.useComposedRefs)(a,N),P=(0,d.useDirection)(b),[T,A]=(0,c.useControllableState)({prop:v,defaultProp:x??null,onChange:w,caller:g}),[F,D]=r.useState(!1),M=(0,u.useCallbackRef)(C),S=h(i),I=r.useRef(!1),[_,B]=r.useState(0);return r.useEffect(()=>{let e=N.current;if(e)return e.addEventListener(f,M),()=>e.removeEventListener(f,M)},[M]),(0,t.jsx)(y,{scope:i,orientation:o,dir:P,loop:p,currentTabStopId:T,onItemFocus:r.useCallback(e=>A(e),[A]),onItemShiftTab:r.useCallback(()=>D(!0),[]),onFocusableItemAdd:r.useCallback(()=>B(e=>e+1),[]),onFocusableItemRemove:r.useCallback(()=>B(e=>e-1),[]),children:(0,t.jsx)(l.Primitive.div,{tabIndex:F||0===_?-1:0,"data-orientation":o,...j,ref:R,style:{outline:"none",...e.style},onMouseDown:(0,n.composeEventHandlers)(e.onMouseDown,()=>{I.current=!0}),onFocus:(0,n.composeEventHandlers)(e.onFocus,e=>{let t=!I.current;if(e.target===e.currentTarget&&t&&!F){let t=new CustomEvent(f,m);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=S().filter(e=>e.focusable);E([e.find(e=>e.active),e.find(e=>e.id===T),...e].filter(Boolean).map(e=>e.ref.current),k)}}I.current=!1}),onBlur:(0,n.composeEventHandlers)(e.onBlur,()=>D(!1))})})}),j="RovingFocusGroupItem",N=r.forwardRef((e,a)=>{let{__scopeRovingFocusGroup:i,focusable:s=!0,active:u=!1,tabStopId:c,children:d,...f}=e,m=(0,o.useId)(),g=c||m,b=w(j,i),v=b.currentTabStopId===g,x=h(i),{onFocusableItemAdd:y,onFocusableItemRemove:C,currentTabStopId:k}=b;return r.useEffect(()=>{if(s)return y(),()=>C()},[s,y,C]),(0,t.jsx)(p.ItemSlot,{scope:i,id:g,focusable:s,active:u,children:(0,t.jsx)(l.Primitive.span,{tabIndex:v?0:-1,"data-orientation":b.orientation,...f,ref:a,onMouseDown:(0,n.composeEventHandlers)(e.onMouseDown,e=>{s?b.onItemFocus(g):e.preventDefault()}),onFocus:(0,n.composeEventHandlers)(e.onFocus,()=>b.onItemFocus(g)),onKeyDown:(0,n.composeEventHandlers)(e.onKeyDown,e=>{if("Tab"===e.key&&e.shiftKey)return void b.onItemShiftTab();if(e.target!==e.currentTarget)return;let t=function(e,t,r){var n;let a=(n=e.key,"rtl"!==r?n:"ArrowLeft"===n?"ArrowRight":"ArrowRight"===n?"ArrowLeft":n);if(!("vertical"===t&&["ArrowLeft","ArrowRight"].includes(a))&&!("horizontal"===t&&["ArrowUp","ArrowDown"].includes(a)))return R[a]}(e,b.orientation,b.dir);if(void 0!==t){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let a=x().filter(e=>e.focusable).map(e=>e.ref.current);if("last"===t)a.reverse();else if("prev"===t||"next"===t){var r,n;"prev"===t&&a.reverse();let i=a.indexOf(e.currentTarget);a=b.loop?(r=a,n=i+1,r.map((e,t)=>r[(n+t)%r.length])):a.slice(i+1)}setTimeout(()=>E(a))}}),children:"function"==typeof d?d({isCurrentTabStop:v,hasTabStop:null!=k}):d})})});N.displayName=j;var R={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function E(e,t=!1){let r=document.activeElement;for(let n of e)if(n===r||(n.focus({preventScroll:t}),document.activeElement!==r))return}var P=e.i(90816),T="Tabs",[A,F]=(0,a.createContextScope)(T,[x]),D=x(),[M,S]=A(T),I=r.forwardRef((e,r)=>{let{__scopeTabs:n,value:a,onValueChange:i,defaultValue:s,orientation:u="horizontal",dir:f,activationMode:m="automatic",...g}=e,p=(0,d.useDirection)(f),[h,b]=(0,c.useControllableState)({prop:a,onChange:i,defaultProp:s??"",caller:T});return(0,t.jsx)(M,{scope:n,baseId:(0,o.useId)(),value:h,onValueChange:b,orientation:u,dir:p,activationMode:m,children:(0,t.jsx)(l.Primitive.div,{dir:p,"data-orientation":u,...g,ref:r})})});I.displayName=T;var _="TabsList",B=r.forwardRef((e,r)=>{let{__scopeTabs:n,loop:a=!0,...i}=e,s=S(_,n),o=D(n);return(0,t.jsx)(C,{asChild:!0,...o,orientation:s.orientation,dir:s.dir,loop:a,children:(0,t.jsx)(l.Primitive.div,{role:"tablist","aria-orientation":s.orientation,...i,ref:r})})});B.displayName=_;var L="TabsTrigger",G=r.forwardRef((e,r)=>{let{__scopeTabs:a,value:i,disabled:s=!1,...o}=e,u=S(L,a),c=D(a),d=K(u.baseId,i),f=U(u.baseId,i),m=i===u.value;return(0,t.jsx)(N,{asChild:!0,...c,focusable:!s,active:m,children:(0,t.jsx)(l.Primitive.button,{type:"button",role:"tab","aria-selected":m,"aria-controls":f,"data-state":m?"active":"inactive","data-disabled":s?"":void 0,disabled:s,id:d,...o,ref:r,onMouseDown:(0,n.composeEventHandlers)(e.onMouseDown,e=>{s||0!==e.button||!1!==e.ctrlKey?e.preventDefault():u.onValueChange(i)}),onKeyDown:(0,n.composeEventHandlers)(e.onKeyDown,e=>{[" ","Enter"].includes(e.key)&&u.onValueChange(i)}),onFocus:(0,n.composeEventHandlers)(e.onFocus,()=>{let e="manual"!==u.activationMode;m||s||!e||u.onValueChange(i)})})})});G.displayName=L;var H="TabsContent",O=r.forwardRef((e,n)=>{let{__scopeTabs:a,value:i,forceMount:s,children:o,...u}=e,c=S(H,a),d=K(c.baseId,i),f=U(c.baseId,i),m=i===c.value,g=r.useRef(m);return r.useEffect(()=>{let e=requestAnimationFrame(()=>g.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,t.jsx)(P.Presence,{present:s||m,children:({present:r})=>(0,t.jsx)(l.Primitive.div,{"data-state":m?"active":"inactive","data-orientation":c.orientation,role:"tabpanel","aria-labelledby":d,hidden:!r,id:f,tabIndex:0,...u,ref:n,style:{...e.style,animationDuration:g.current?"0s":void 0},children:r&&o})})});function K(e,t){return`${e}-trigger-${t}`}function U(e,t){return`${e}-content-${t}`}O.displayName=H;var V=e.i(81471);e.s(["Tabs",0,I,"TabsContent",0,function({className:e,...r}){return(0,t.jsx)(O,{className:(0,V.cn)("mt-2 ring-offset-background focus-visible:outline-none",e),...r})},"TabsList",0,function({className:e,...r}){return(0,t.jsx)(B,{className:(0,V.cn)("inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",e),...r})},"TabsTrigger",0,function({className:e,...r}){return(0,t.jsx)(G,{className:(0,V.cn)("inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",e),...r})}],26406)},90780,e=>{"use strict";let t=(0,e.i(77379).default)("Pen",[["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"}]]);e.s(["Edit2",0,t],90780)},71816,49214,e=>{"use strict";var t=e.i(34416),r=e.i(95486),n=e.i(65268);e.s(["useRegenerate",0,function(){let[e,a]=(0,t.useState)(null),[i,s]=(0,t.useState)("idle"),[o,l]=(0,t.useState)(null),u=(0,r.useQueryClient)(),c=(0,t.useRef)(null),d=(0,t.useRef)(null),f=(0,t.useRef)(0);(0,t.useEffect)(()=>()=>{c.current&&clearInterval(c.current)},[]);let m=(0,t.useCallback)(()=>{c.current&&(clearInterval(c.current),c.current=null)},[]);return{regenerate:(0,t.useCallback)(async e=>{if("triggered"===i||"running"===i)return;a(e),s("triggered"),l(null),f.current=Date.now();let t=await n.api.get(`/context/${e}`).catch(()=>null);d.current=t?.lastModified??null;try{await n.api.post("/agent/regenerate",{target:e}),s("running"),c.current=setInterval(async()=>{if(Date.now()-f.current>3e5){m(),s("error"),l("Timeout — agent may still be processing");return}try{let t=await n.api.get(`/context/${e}`);(null===d.current||t.lastModified!==d.current)&&(m(),s("done"),u.invalidateQueries({queryKey:["context",e]}),u.invalidateQueries({queryKey:["calendar"]}),setTimeout(()=>{s("idle"),a(null)},5e3))}catch{}},3e3)}catch(e){s("error"),l(e instanceof Error?e.message:"Failed to trigger")}},[i,u,m]),target:e,status:i,error:o,dismiss:(0,t.useCallback)(()=>{m(),s("idle"),a(null),l(null)},[m])}}],71816);var a=e.i(54710),i=e.i(20014),s=e.i(81471),o=e.i(59134),l=e.i(99758),u=e.i(63991),c=e.i(72740);e.s(["RegenerateButton",0,function({target:e,label:t,currentTarget:r,status:n,error:d,onRegenerate:f,onDismiss:m,variant:g="outline",size:p="sm",className:h}){let b=r===e;return b&&"done"===n?(0,a.jsxs)(i.Button,{variant:g,size:p,className:(0,s.cn)("text-emerald-600 dark:text-emerald-400",h),onClick:m,children:[(0,a.jsx)(l.Check,{className:"h-3.5 w-3.5 mr-1.5"}),"Updated"]}):b&&"error"===n?(0,a.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,a.jsxs)(i.Button,{variant:g,size:p,className:(0,s.cn)("text-red-600 dark:text-red-400",h),onClick:m,children:[(0,a.jsx)(u.AlertCircle,{className:"h-3.5 w-3.5 mr-1.5"}),"Failed"]}),d&&(0,a.jsx)("span",{className:"text-xs text-red-600 dark:text-red-400 max-w-48 truncate",children:d})]}):(0,a.jsxs)(i.Button,{variant:g,size:p,onClick:()=>f(e),disabled:"triggered"===n||"running"===n,className:h,children:[b&&"idle"!==n?(0,a.jsx)(c.Loader2,{className:"h-3.5 w-3.5 mr-1.5 animate-spin"}):(0,a.jsx)(o.RefreshCw,{className:"h-3.5 w-3.5 mr-1.5"}),b&&"triggered"===n?"Triggering...":b&&"running"===n?"Running...":t]})}],49214)},42455,e=>{"use strict";var t=e.i(14260),r=e.i(65268);e.s(["useScheduleNext",0,function(){return(0,t.useQuery)({queryKey:["schedule-next"],queryFn:()=>r.api.get("/schedule/next"),refetchInterval:3e4})}])}]);
|