@aitne/dashboard 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +5 -1
- package/.next/build-manifest.json +3 -3
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/diagnostics/route-bundle-stats.json +450 -356
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +96 -0
- package/.next/routes-manifest.json +24 -0
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +15 -15
- package/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/activity/page.js.nft.json +1 -1
- package/.next/server/app/activity/page_client-reference-manifest.js +1 -1
- package/.next/server/app/activity.html +1 -1
- package/.next/server/app/activity.rsc +19 -19
- package/.next/server/app/activity.segments/_full.segment.rsc +19 -19
- package/.next/server/app/activity.segments/_head.segment.rsc +4 -4
- package/.next/server/app/activity.segments/_index.segment.rsc +10 -10
- package/.next/server/app/activity.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/activity.segments/activity/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/activity.segments/activity.segment.rsc +4 -4
- package/.next/server/app/analytics/page.js.nft.json +1 -1
- package/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
- package/.next/server/app/analytics.html +1 -1
- package/.next/server/app/analytics.rsc +19 -19
- package/.next/server/app/analytics.segments/_full.segment.rsc +19 -19
- package/.next/server/app/analytics.segments/_head.segment.rsc +4 -4
- package/.next/server/app/analytics.segments/_index.segment.rsc +10 -10
- package/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/analytics.segments/analytics/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/analytics.segments/analytics.segment.rsc +4 -4
- package/.next/server/app/api/[...path]/route.js +1 -1
- package/.next/server/app/api/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +17 -17
- package/.next/server/app/chat.segments/_full.segment.rsc +17 -17
- package/.next/server/app/chat.segments/_head.segment.rsc +4 -4
- package/.next/server/app/chat.segments/_index.segment.rsc +10 -10
- package/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/chat.segments/chat.segment.rsc +3 -3
- package/.next/server/app/connections/calendar/page.js.nft.json +1 -1
- package/.next/server/app/connections/calendar/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/calendar.html +1 -1
- package/.next/server/app/connections/calendar.rsc +18 -18
- package/.next/server/app/connections/calendar.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/calendar.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/calendar.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/calendar.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/calendar.segments/connections/calendar/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/calendar.segments/connections/calendar.segment.rsc +3 -3
- package/.next/server/app/connections/calendar.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/journal/page.js.nft.json +1 -1
- package/.next/server/app/connections/journal/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/journal.html +1 -1
- package/.next/server/app/connections/journal.rsc +16 -16
- package/.next/server/app/connections/journal.segments/_full.segment.rsc +16 -16
- package/.next/server/app/connections/journal.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/journal.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/journal.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/journal.segments/connections/journal/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/connections/journal.segments/connections/journal.segment.rsc +3 -3
- package/.next/server/app/connections/journal.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge/page.js.nft.json +1 -1
- package/.next/server/app/connections/knowledge/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/knowledge.html +1 -1
- package/.next/server/app/connections/knowledge.rsc +18 -18
- package/.next/server/app/connections/knowledge.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/knowledge.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/knowledge.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/knowledge.segments/connections/knowledge/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge.segments/connections/knowledge.segment.rsc +3 -3
- package/.next/server/app/connections/knowledge.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/mail/page.js.nft.json +1 -1
- package/.next/server/app/connections/mail/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/mail.html +1 -1
- package/.next/server/app/connections/mail.rsc +18 -18
- package/.next/server/app/connections/mail.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/mail.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/mail.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/mail.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/mail.segments/connections/mail/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/mail.segments/connections/mail.segment.rsc +3 -3
- package/.next/server/app/connections/mail.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/mcp/page.js.nft.json +1 -1
- package/.next/server/app/connections/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/mcp.html +1 -1
- package/.next/server/app/connections/mcp.rsc +18 -18
- package/.next/server/app/connections/mcp.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/mcp.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/mcp.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/mcp.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/mcp.segments/connections/mcp/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/mcp.segments/connections/mcp.segment.rsc +3 -3
- package/.next/server/app/connections/mcp.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/messaging/page.js.nft.json +1 -1
- package/.next/server/app/connections/messaging/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/messaging.html +1 -1
- package/.next/server/app/connections/messaging.rsc +18 -18
- package/.next/server/app/connections/messaging.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/messaging.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/messaging.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/messaging.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/messaging.segments/connections/messaging/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/messaging.segments/connections/messaging.segment.rsc +3 -3
- package/.next/server/app/connections/messaging.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/page.js.nft.json +1 -1
- package/.next/server/app/connections/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/repositories/page.js.nft.json +1 -1
- package/.next/server/app/connections/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/repositories.html +1 -1
- package/.next/server/app/connections/repositories.rsc +18 -18
- package/.next/server/app/connections/repositories.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/repositories.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/repositories.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/repositories.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/repositories.segments/connections/repositories/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/repositories.segments/connections/repositories.segment.rsc +3 -3
- package/.next/server/app/connections/repositories.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/routines/page.js.nft.json +1 -1
- package/.next/server/app/connections/routines/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/routines.html +1 -1
- package/.next/server/app/connections/routines.rsc +16 -16
- package/.next/server/app/connections/routines.segments/_full.segment.rsc +16 -16
- package/.next/server/app/connections/routines.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/routines.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/routines.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/routines.segments/connections/routines/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/connections/routines.segments/connections/routines.segment.rsc +3 -3
- package/.next/server/app/connections/routines.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections.html +1 -1
- package/.next/server/app/connections.rsc +16 -16
- package/.next/server/app/connections.segments/_full.segment.rsc +16 -16
- package/.next/server/app/connections.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections.segments/connections/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/connections.segments/connections.segment.rsc +4 -4
- package/.next/server/app/conversations/[id]/page.js.nft.json +1 -1
- package/.next/server/app/conversations/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/conversations/page.js.nft.json +1 -1
- package/.next/server/app/conversations/page_client-reference-manifest.js +1 -1
- package/.next/server/app/conversations.html +1 -1
- package/.next/server/app/conversations.rsc +15 -15
- package/.next/server/app/conversations.segments/_full.segment.rsc +15 -15
- package/.next/server/app/conversations.segments/_head.segment.rsc +4 -4
- package/.next/server/app/conversations.segments/_index.segment.rsc +10 -10
- package/.next/server/app/conversations.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/conversations.segments/conversations/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/conversations.segments/conversations.segment.rsc +3 -3
- package/.next/server/app/docs/[[...slug]]/page.js.nft.json +1 -1
- package/.next/server/app/docs/[[...slug]]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/finance/page.js.nft.json +1 -1
- package/.next/server/app/finance/page_client-reference-manifest.js +1 -1
- package/.next/server/app/finance.html +1 -1
- package/.next/server/app/finance.rsc +17 -17
- package/.next/server/app/finance.segments/_full.segment.rsc +17 -17
- package/.next/server/app/finance.segments/_head.segment.rsc +4 -4
- package/.next/server/app/finance.segments/_index.segment.rsc +10 -10
- package/.next/server/app/finance.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/finance.segments/finance/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/finance.segments/finance.segment.rsc +3 -3
- package/.next/server/app/git/page.js.nft.json +1 -1
- package/.next/server/app/git/page_client-reference-manifest.js +1 -1
- package/.next/server/app/git.html +1 -1
- package/.next/server/app/git.rsc +17 -17
- package/.next/server/app/git.segments/_full.segment.rsc +17 -17
- package/.next/server/app/git.segments/_head.segment.rsc +4 -4
- package/.next/server/app/git.segments/_index.segment.rsc +10 -10
- package/.next/server/app/git.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/git.segments/git/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/git.segments/git.segment.rsc +3 -3
- package/.next/server/app/health/page.js.nft.json +1 -1
- package/.next/server/app/health/page_client-reference-manifest.js +1 -1
- package/.next/server/app/health.html +1 -1
- package/.next/server/app/health.rsc +17 -17
- package/.next/server/app/health.segments/_full.segment.rsc +17 -17
- package/.next/server/app/health.segments/_head.segment.rsc +4 -4
- package/.next/server/app/health.segments/_index.segment.rsc +10 -10
- package/.next/server/app/health.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/health.segments/health/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/health.segments/health.segment.rsc +3 -3
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +17 -17
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +17 -17
- package/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/server/app/index.segments/_index.segment.rsc +10 -10
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/knowledge/page.js.nft.json +1 -1
- package/.next/server/app/knowledge/page_client-reference-manifest.js +1 -1
- package/.next/server/app/knowledge.html +1 -1
- package/.next/server/app/knowledge.rsc +18 -18
- package/.next/server/app/knowledge.segments/_full.segment.rsc +18 -18
- package/.next/server/app/knowledge.segments/_head.segment.rsc +4 -4
- package/.next/server/app/knowledge.segments/_index.segment.rsc +10 -10
- package/.next/server/app/knowledge.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/knowledge.segments/knowledge/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/knowledge.segments/knowledge.segment.rsc +4 -4
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/reading/page.js.nft.json +1 -1
- package/.next/server/app/reading/page_client-reference-manifest.js +1 -1
- package/.next/server/app/reading.html +1 -1
- package/.next/server/app/reading.rsc +17 -17
- package/.next/server/app/reading.segments/_full.segment.rsc +17 -17
- package/.next/server/app/reading.segments/_head.segment.rsc +4 -4
- package/.next/server/app/reading.segments/_index.segment.rsc +10 -10
- package/.next/server/app/reading.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/reading.segments/reading/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/reading.segments/reading.segment.rsc +3 -3
- package/.next/server/app/schedule/page.js.nft.json +1 -1
- package/.next/server/app/schedule/page_client-reference-manifest.js +1 -1
- package/.next/server/app/schedule.html +1 -1
- package/.next/server/app/schedule.rsc +17 -17
- package/.next/server/app/schedule.segments/_full.segment.rsc +17 -17
- package/.next/server/app/schedule.segments/_head.segment.rsc +4 -4
- package/.next/server/app/schedule.segments/_index.segment.rsc +10 -10
- package/.next/server/app/schedule.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/schedule.segments/schedule/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/schedule.segments/schedule.segment.rsc +3 -3
- package/.next/server/app/settings/advanced/page.js.nft.json +1 -1
- package/.next/server/app/settings/advanced/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/advanced.html +1 -1
- package/.next/server/app/settings/advanced.rsc +18 -18
- package/.next/server/app/settings/advanced.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/advanced.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/advanced.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/advanced.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/advanced.segments/settings/advanced/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/advanced.segments/settings/advanced.segment.rsc +3 -3
- package/.next/server/app/settings/advanced.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/backends/page.js.nft.json +1 -1
- package/.next/server/app/settings/backends/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/backends.html +1 -1
- package/.next/server/app/settings/backends.rsc +16 -16
- package/.next/server/app/settings/backends.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/backends.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/backends.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/backends.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/backends.segments/settings/backends/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/backends.segments/settings/backends.segment.rsc +3 -3
- package/.next/server/app/settings/backends.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/commands/page.js.nft.json +1 -1
- package/.next/server/app/settings/commands/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/commands.html +1 -1
- package/.next/server/app/settings/commands.rsc +18 -18
- package/.next/server/app/settings/commands.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/commands.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/commands.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/commands.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/commands.segments/settings/commands/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/commands.segments/settings/commands.segment.rsc +3 -3
- package/.next/server/app/settings/commands.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/connections/page.js.nft.json +1 -1
- package/.next/server/app/settings/connections/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/connections.html +1 -1
- package/.next/server/app/settings/connections.rsc +16 -16
- package/.next/server/app/settings/connections.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/connections.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/connections.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/connections.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/connections.segments/settings/connections/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/connections.segments/settings/connections.segment.rsc +3 -3
- package/.next/server/app/settings/connections.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/journal/page.js.nft.json +1 -1
- package/.next/server/app/settings/journal/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/journal.html +1 -1
- package/.next/server/app/settings/journal.rsc +18 -18
- package/.next/server/app/settings/journal.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/journal.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/journal.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/journal.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/journal.segments/settings/journal/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/journal.segments/settings/journal.segment.rsc +3 -3
- package/.next/server/app/settings/journal.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/management/page.js.nft.json +1 -1
- package/.next/server/app/settings/management/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/management.html +1 -1
- package/.next/server/app/settings/management.rsc +18 -18
- package/.next/server/app/settings/management.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/management.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/management.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/management.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/management.segments/settings/management/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/management.segments/settings/management.segment.rsc +3 -3
- package/.next/server/app/settings/management.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/messaging/page.js.nft.json +1 -1
- package/.next/server/app/settings/messaging/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/messaging.html +1 -1
- package/.next/server/app/settings/messaging.rsc +16 -16
- package/.next/server/app/settings/messaging.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/messaging.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/messaging.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/messaging.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/messaging.segments/settings/messaging/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/messaging.segments/settings/messaging.segment.rsc +3 -3
- package/.next/server/app/settings/messaging.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/models/page.js.nft.json +1 -1
- package/.next/server/app/settings/models/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/models.html +1 -1
- package/.next/server/app/settings/models.rsc +18 -18
- package/.next/server/app/settings/models.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/models.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/models.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/models.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/models.segments/settings/models/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/models.segments/settings/models.segment.rsc +3 -3
- package/.next/server/app/settings/models.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/processes/page.js.nft.json +1 -1
- package/.next/server/app/settings/processes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/processes.html +1 -1
- package/.next/server/app/settings/processes.rsc +16 -16
- package/.next/server/app/settings/processes.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/processes.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/processes.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/processes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/processes.segments/settings/processes/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/processes.segments/settings/processes.segment.rsc +3 -3
- package/.next/server/app/settings/processes.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/routines/page.js.nft.json +1 -1
- package/.next/server/app/settings/routines/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/routines.html +1 -1
- package/.next/server/app/settings/routines.rsc +18 -18
- package/.next/server/app/settings/routines.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/routines.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/routines.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/routines.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/routines.segments/settings/routines/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/routines.segments/settings/routines.segment.rsc +3 -3
- package/.next/server/app/settings/routines.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/schedule/page.js.nft.json +1 -1
- package/.next/server/app/settings/schedule/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/schedule.html +1 -1
- package/.next/server/app/settings/schedule.rsc +18 -18
- package/.next/server/app/settings/schedule.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/schedule.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/schedule.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/schedule.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/schedule.segments/settings/schedule/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/schedule.segments/settings/schedule.segment.rsc +3 -3
- package/.next/server/app/settings/schedule.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning/page.js.nft.json +1 -1
- package/.next/server/app/settings/self-learning/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/self-learning.html +1 -1
- package/.next/server/app/settings/self-learning.rsc +18 -18
- package/.next/server/app/settings/self-learning.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/self-learning.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/self-learning.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/self-learning.segments/settings/self-learning/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning.segments/settings/self-learning.segment.rsc +3 -3
- package/.next/server/app/settings/self-learning.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/wiki/page/app-paths-manifest.json +3 -0
- package/.next/server/app/settings/wiki/page/build-manifest.json +18 -0
- package/.next/server/app/settings/wiki/page/next-font-manifest.json +6 -0
- package/.next/server/app/settings/wiki/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/settings/wiki/page/server-reference-manifest.json +4 -0
- package/.next/server/app/settings/wiki/page.js +16 -0
- package/.next/server/app/settings/wiki/page.js.map +5 -0
- package/.next/server/app/settings/wiki/page.js.nft.json +1 -0
- package/.next/server/app/settings/wiki/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings/wiki/timeline/page/app-paths-manifest.json +3 -0
- package/.next/server/app/settings/wiki/timeline/page/build-manifest.json +18 -0
- package/.next/server/app/settings/wiki/timeline/page/next-font-manifest.json +6 -0
- package/.next/server/app/settings/wiki/timeline/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/settings/wiki/timeline/page/server-reference-manifest.json +4 -0
- package/.next/server/app/settings/wiki/timeline/page.js +17 -0
- package/.next/server/app/settings/wiki/timeline/page.js.map +5 -0
- package/.next/server/app/settings/wiki/timeline/page.js.nft.json +1 -0
- package/.next/server/app/settings/wiki/timeline/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings/wiki/timeline.html +1 -0
- package/.next/server/app/settings/wiki/timeline.meta +17 -0
- package/.next/server/app/settings/wiki/timeline.rsc +24 -0
- package/.next/server/app/settings/wiki/timeline.segments/_full.segment.rsc +24 -0
- package/.next/server/app/settings/wiki/timeline.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/wiki/timeline.segments/_index.segment.rsc +11 -0
- package/.next/server/app/settings/wiki/timeline.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki/timeline/__PAGE__.segment.rsc +6 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki/timeline.segment.rsc +5 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki.segment.rsc +5 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings.segment.rsc +5 -0
- package/.next/server/app/settings/wiki.html +1 -0
- package/.next/server/app/settings/wiki.meta +16 -0
- package/.next/server/app/settings/wiki.rsc +27 -0
- package/.next/server/app/settings/wiki.segments/_full.segment.rsc +27 -0
- package/.next/server/app/settings/wiki.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/wiki.segments/_index.segment.rsc +11 -0
- package/.next/server/app/settings/wiki.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/settings/wiki.segments/settings/wiki/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/settings/wiki.segments/settings/wiki.segment.rsc +5 -0
- package/.next/server/app/settings/wiki.segments/settings.segment.rsc +5 -0
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +18 -18
- package/.next/server/app/settings.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings.segments/settings.segment.rsc +4 -4
- package/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/server/app/setup.html +1 -1
- package/.next/server/app/setup.rsc +17 -17
- package/.next/server/app/setup.segments/_full.segment.rsc +17 -17
- package/.next/server/app/setup.segments/_head.segment.rsc +4 -4
- package/.next/server/app/setup.segments/_index.segment.rsc +10 -10
- package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/setup.segments/setup.segment.rsc +3 -3
- package/.next/server/app/trip/page.js.nft.json +1 -1
- package/.next/server/app/trip/page_client-reference-manifest.js +1 -1
- package/.next/server/app/trip.html +1 -1
- package/.next/server/app/trip.rsc +17 -17
- package/.next/server/app/trip.segments/_full.segment.rsc +17 -17
- package/.next/server/app/trip.segments/_head.segment.rsc +4 -4
- package/.next/server/app/trip.segments/_index.segment.rsc +10 -10
- package/.next/server/app/trip.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/trip.segments/trip/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/trip.segments/trip.segment.rsc +3 -3
- package/.next/server/app/wiki/page/app-paths-manifest.json +3 -0
- package/.next/server/app/wiki/page/build-manifest.json +18 -0
- package/.next/server/app/wiki/page/next-font-manifest.json +6 -0
- package/.next/server/app/wiki/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/wiki/page/server-reference-manifest.json +4 -0
- package/.next/server/app/wiki/page.js +15 -0
- package/.next/server/app/wiki/page.js.map +5 -0
- package/.next/server/app/wiki/page.js.nft.json +1 -0
- package/.next/server/app/wiki/page_client-reference-manifest.js +3 -0
- package/.next/server/app/wiki/timeline/page/app-paths-manifest.json +3 -0
- package/.next/server/app/wiki/timeline/page/build-manifest.json +18 -0
- package/.next/server/app/wiki/timeline/page/next-font-manifest.json +6 -0
- package/.next/server/app/wiki/timeline/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/wiki/timeline/page/server-reference-manifest.json +4 -0
- package/.next/server/app/wiki/timeline/page.js +15 -0
- package/.next/server/app/wiki/timeline/page.js.map +5 -0
- package/.next/server/app/wiki/timeline/page.js.nft.json +1 -0
- package/.next/server/app/wiki/timeline/page_client-reference-manifest.js +3 -0
- package/.next/server/app/wiki/timeline.html +1 -0
- package/.next/server/app/wiki/timeline.meta +16 -0
- package/.next/server/app/wiki/timeline.rsc +26 -0
- package/.next/server/app/wiki/timeline.segments/_full.segment.rsc +26 -0
- package/.next/server/app/wiki/timeline.segments/_head.segment.rsc +6 -0
- package/.next/server/app/wiki/timeline.segments/_index.segment.rsc +11 -0
- package/.next/server/app/wiki/timeline.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/wiki/timeline.segments/wiki/timeline/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/wiki/timeline.segments/wiki/timeline.segment.rsc +5 -0
- package/.next/server/app/wiki/timeline.segments/wiki.segment.rsc +5 -0
- package/.next/server/app/wiki.html +1 -0
- package/.next/server/app/wiki.meta +15 -0
- package/.next/server/app/wiki.rsc +26 -0
- package/.next/server/app/wiki.segments/_full.segment.rsc +26 -0
- package/.next/server/app/wiki.segments/_head.segment.rsc +6 -0
- package/.next/server/app/wiki.segments/_index.segment.rsc +11 -0
- package/.next/server/app/wiki.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/wiki.segments/wiki/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/wiki.segments/wiki.segment.rsc +5 -0
- package/.next/server/app-paths-manifest.json +5 -1
- package/.next/server/chunks/0z~i_next_dist_esm_build_templates_app-route_0o_o_hp.js +1 -1
- package/.next/server/chunks/0z~i_next_dist_esm_build_templates_app-route_0o_o_hp.js.map +1 -1
- package/.next/server/chunks/{[root-of-the-server]__00gp8gz._.js → [root-of-the-server]__01knfi.._.js} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0-0wgko._.js → [root-of-the-server]__08_s4yo._.js} +2 -2
- package/.next/server/chunks/ssr/0juq_dashboard__next-internal_server_app_settings_wiki_timeline_page_actions_0czqn6z.js +3 -0
- package/.next/server/chunks/ssr/0juq_dashboard__next-internal_server_app_settings_wiki_timeline_page_actions_0czqn6z.js.map +1 -0
- package/.next/server/chunks/ssr/0mzu_lucide-react_dist_esm_icons_zap_115-27i.js +3 -0
- package/.next/server/chunks/ssr/0mzu_lucide-react_dist_esm_icons_zap_115-27i.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0k3x-na.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0k3x-na.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0km22.v.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0km22.v.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0vui1gx.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0vui1gx.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_11h319t.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_11h319t.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__007ymqm._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__007ymqm._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00vjce2._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00vjce2._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__07pkvm3._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__07pkvm3._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dfuz7_._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dfuz7_._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__117dw_l._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__117dw_l._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-3uzu1._.js +3 -0
- package/.next/server/chunks/ssr/_0-3uzu1._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-6jgyg._.js +3 -0
- package/.next/server/chunks/ssr/_0-6jgyg._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-fv_sr._.js +1 -1
- package/.next/server/chunks/ssr/_0-fv_sr._.js.map +1 -1
- package/.next/server/chunks/ssr/_0.7pki~._.js +3 -0
- package/.next/server/chunks/ssr/_0.7pki~._.js.map +1 -0
- package/.next/server/chunks/ssr/_02s86rg._.js +3 -0
- package/.next/server/chunks/ssr/_02s86rg._.js.map +1 -0
- package/.next/server/chunks/ssr/_03bq.de._.js +3 -0
- package/.next/server/chunks/ssr/_03bq.de._.js.map +1 -0
- package/.next/server/chunks/ssr/_03u6ja0._.js +3 -0
- package/.next/server/chunks/ssr/_03u6ja0._.js.map +1 -0
- package/.next/server/chunks/ssr/_04-.z69._.js +3 -0
- package/.next/server/chunks/ssr/_04-.z69._.js.map +1 -0
- package/.next/server/chunks/ssr/_05rlac0._.js +3 -0
- package/.next/server/chunks/ssr/_05rlac0._.js.map +1 -0
- package/.next/server/chunks/ssr/_05xysbw._.js +3 -0
- package/.next/server/chunks/ssr/_05xysbw._.js.map +1 -0
- package/.next/server/chunks/ssr/_09e_66m._.js +3 -0
- package/.next/server/chunks/ssr/_09e_66m._.js.map +1 -0
- package/.next/server/chunks/ssr/_0_bnan9._.js +3 -0
- package/.next/server/chunks/ssr/_0_bnan9._.js.map +1 -0
- package/.next/server/chunks/ssr/_0b00io4._.js +3 -0
- package/.next/server/chunks/ssr/_0b00io4._.js.map +1 -0
- package/.next/server/chunks/ssr/_0es_2i2._.js +3 -0
- package/.next/server/chunks/ssr/_0es_2i2._.js.map +1 -0
- package/.next/server/chunks/ssr/_0g7_r5i._.js +3 -0
- package/.next/server/chunks/ssr/_0g7_r5i._.js.map +1 -0
- package/.next/server/chunks/ssr/_0hojxqy._.js +1 -1
- package/.next/server/chunks/ssr/_0hojxqy._.js.map +1 -1
- package/.next/server/chunks/ssr/_0ifb9jm._.js +3 -0
- package/.next/server/chunks/ssr/_0ifb9jm._.js.map +1 -0
- package/.next/server/chunks/ssr/_0jl_-u5._.js +3 -0
- package/.next/server/chunks/ssr/_0jl_-u5._.js.map +1 -0
- package/.next/server/chunks/ssr/_0lfuvjg._.js +3 -0
- package/.next/server/chunks/ssr/_0lfuvjg._.js.map +1 -0
- package/.next/server/chunks/ssr/{_0jm~wn-._.js → _0mp7n5i._.js} +2 -2
- package/.next/server/chunks/ssr/{_0jm~wn-._.js.map → _0mp7n5i._.js.map} +1 -1
- package/.next/server/chunks/ssr/_0powsoh._.js +3 -0
- package/.next/server/chunks/ssr/_0powsoh._.js.map +1 -0
- package/.next/server/chunks/ssr/_0q34y9l._.js +3 -0
- package/.next/server/chunks/ssr/_0q34y9l._.js.map +1 -0
- package/.next/server/chunks/ssr/_0q4rpi-._.js +5 -0
- package/.next/server/chunks/ssr/_0q4rpi-._.js.map +1 -0
- package/.next/server/chunks/ssr/_0rc-7d4._.js +3 -0
- package/.next/server/chunks/ssr/_0rc-7d4._.js.map +1 -0
- package/.next/server/chunks/ssr/_0tjsh16._.js +3 -0
- package/.next/server/chunks/ssr/_0tjsh16._.js.map +1 -0
- package/.next/server/chunks/ssr/_0tl98en._.js +1 -1
- package/.next/server/chunks/ssr/_0tl98en._.js.map +1 -1
- package/.next/server/chunks/ssr/{_0._ysx3._.js → _0v_6ros._.js} +2 -2
- package/.next/server/chunks/ssr/_0v_6ros._.js.map +1 -0
- package/.next/server/chunks/ssr/_0vncjim._.js +3 -0
- package/.next/server/chunks/ssr/_0vncjim._.js.map +1 -0
- package/.next/server/chunks/ssr/_0vx-jgf._.js +3 -0
- package/.next/server/chunks/ssr/_0vx-jgf._.js.map +1 -0
- package/.next/server/chunks/ssr/_0w1ez1p._.js +3 -0
- package/.next/server/chunks/ssr/_0w1ez1p._.js.map +1 -0
- package/.next/server/chunks/ssr/_0yl49yk._.js +3 -0
- package/.next/server/chunks/ssr/_0yl49yk._.js.map +1 -0
- package/.next/server/chunks/ssr/_0z1ah9x._.js +1 -1
- package/.next/server/chunks/ssr/_0z1ah9x._.js.map +1 -1
- package/.next/server/chunks/ssr/_0z9ikwn._.js +3 -0
- package/.next/server/chunks/ssr/_0z9ikwn._.js.map +1 -0
- package/.next/server/chunks/ssr/_0z_cp12._.js +3 -0
- package/.next/server/chunks/ssr/_0z_cp12._.js.map +1 -0
- package/.next/server/chunks/ssr/_10hvwg5._.js +3 -0
- package/.next/server/chunks/ssr/_10hvwg5._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_settings_wiki_page_actions_12d~w9l.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_settings_wiki_page_actions_12d~w9l.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_page_actions_026bi.d.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_page_actions_026bi.d.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_timeline_page_actions_06jb4gg.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_timeline_page_actions_06jb4gg.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0bx940s._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0bx940s._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0fo7nqq._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0fo7nqq._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0uxs9-.._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_0uxs9-.._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_activity_page_tsx_08yep46._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_activity_page_tsx_08yep46._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_connections_repositories_page_tsx_08y6paq._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_connections_repositories_page_tsx_08y6paq._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_git_page_tsx_0ah19-6._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_git_page_tsx_0ah19-6._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_schedule_page_tsx_0znc404._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_schedule_page_tsx_0znc404._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_models_page_tsx_0djsx88._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_models_page_tsx_0djsx88._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_schedule_page_tsx_0b8zr2l._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_schedule_page_tsx_0b8zr2l._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_wiki_page_tsx_0..1tkb._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_wiki_page_tsx_0..1tkb._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_app_setup_page_tsx_06k3via._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_setup_page_tsx_06k3via._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_components_connections_slack-card_tsx_0mahejj._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_components_connections_slack-card_tsx_0mahejj._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_components_settings_backend-settings_tsx_0i-tp_u._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_components_settings_backend-settings_tsx_0i-tp_u._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_shared_dist_index_0kuvow-.js +1 -1
- package/.next/server/chunks/ssr/packages_shared_dist_index_0kuvow-.js.map +1 -1
- package/.next/server/middleware/middleware-manifest.json +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/middleware-manifest.json +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/01yix41q.0970.js +1 -0
- package/.next/static/chunks/02qjylw4yp63l.js +1 -0
- package/.next/static/chunks/06y2ddf5x9x_4.js +1 -0
- package/.next/static/chunks/{0ztl~44vjnpe1.js → 08ie9t4zn6n4-.js} +1 -1
- package/.next/static/chunks/091khs5zza4_4.js +1 -0
- package/.next/static/chunks/{0~_56pt8wsmeo.js → 0abhg-m1-acdb.js} +1 -1
- package/.next/static/chunks/0ae.1upy09t--.js +1 -0
- package/.next/static/chunks/0bvcd~k.vfro8.js +1 -0
- package/.next/static/chunks/{0g6.0r0i-wyeg.js → 0eqm47_oikj36.js} +1 -1
- package/.next/static/chunks/0fqugh~hv4my1.js +1 -0
- package/.next/static/chunks/0has04tc4mrik.js +1 -0
- package/.next/static/chunks/0huynm-qbj26k.js +1 -0
- package/.next/static/chunks/0ibq4zul6305p.js +1 -0
- package/.next/static/chunks/0jm_e6e6n~rdn.js +1 -0
- package/.next/static/chunks/0k0.4cksmybb2.js +1 -0
- package/.next/static/chunks/0l07yrtw3fxp5.js +1 -0
- package/.next/static/chunks/0nhqu-sq045x7.js +1 -0
- package/.next/static/chunks/0op3oc-if6n5-.js +3 -0
- package/.next/static/chunks/0p34n6.st3s~1.js +1 -0
- package/.next/static/chunks/0r8nosw42e2m9.js +1 -0
- package/.next/static/chunks/0shx3_mxukfhr.js +1 -0
- package/.next/static/chunks/0thm~t5g5adz1.js +1 -0
- package/.next/static/chunks/0thyr1cngc-j..css +1 -0
- package/.next/static/chunks/0ttdb_354lh4t.js +1 -0
- package/.next/static/chunks/0v..ut2v38yep.js +1 -0
- package/.next/static/chunks/{17npklzvg8-~3.js → 0vhj0k-zy6jhh.js} +1 -1
- package/.next/static/chunks/0wdx410~0~gmn.js +1 -0
- package/.next/static/chunks/0y3ptqa0bbi-h.js +1 -0
- package/.next/static/chunks/{0zbxi2grjtx.c.js → 0zx_~u_zxg_7e.js} +1 -1
- package/.next/static/chunks/{0f3kjzb~5zhc~.js → 10pq~97vgkzro.js} +1 -1
- package/.next/static/chunks/11hlk6.h1of0y.js +1 -0
- package/.next/static/chunks/13w_6v~nprp8j.js +11 -0
- package/.next/static/chunks/14-kkni6ecqaw.js +1 -0
- package/.next/static/chunks/{148a9fv~bo0gq.js → 1555iv~_t.1lp.js} +1 -1
- package/.next/static/chunks/{04bbme2th8s1_.js → 15ec5~pa1pv_z.js} +1 -1
- package/.next/static/chunks/15vc-857cdedi.js +1 -0
- package/.next/static/chunks/16zgco6hwlr-n.js +1 -0
- package/.next/types/routes.d.ts +5 -1
- package/.next/types/validator.ts +36 -0
- package/package.json +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__02idks~._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__02idks~._.js.map +0 -1
- package/.next/server/chunks/ssr/_0-8__9s._.js +0 -3
- package/.next/server/chunks/ssr/_0-8__9s._.js.map +0 -1
- package/.next/server/chunks/ssr/_0._ysx3._.js.map +0 -1
- package/.next/server/chunks/ssr/_0.h-tj4._.js +0 -3
- package/.next/server/chunks/ssr/_0.h-tj4._.js.map +0 -1
- package/.next/server/chunks/ssr/_02g4o18._.js +0 -3
- package/.next/server/chunks/ssr/_02g4o18._.js.map +0 -1
- package/.next/server/chunks/ssr/_0463dg_._.js +0 -3
- package/.next/server/chunks/ssr/_0463dg_._.js.map +0 -1
- package/.next/server/chunks/ssr/_04a42pa._.js +0 -3
- package/.next/server/chunks/ssr/_04a42pa._.js.map +0 -1
- package/.next/server/chunks/ssr/_04kt9.8._.js +0 -3
- package/.next/server/chunks/ssr/_04kt9.8._.js.map +0 -1
- package/.next/server/chunks/ssr/_052zlig._.js +0 -3
- package/.next/server/chunks/ssr/_052zlig._.js.map +0 -1
- package/.next/server/chunks/ssr/_060itkv._.js +0 -3
- package/.next/server/chunks/ssr/_060itkv._.js.map +0 -1
- package/.next/server/chunks/ssr/_07p0n9g._.js +0 -3
- package/.next/server/chunks/ssr/_07p0n9g._.js.map +0 -1
- package/.next/server/chunks/ssr/_08mbdt1._.js +0 -3
- package/.next/server/chunks/ssr/_08mbdt1._.js.map +0 -1
- package/.next/server/chunks/ssr/_08r_qwd._.js +0 -3
- package/.next/server/chunks/ssr/_08r_qwd._.js.map +0 -1
- package/.next/server/chunks/ssr/_08xk3kp._.js +0 -3
- package/.next/server/chunks/ssr/_08xk3kp._.js.map +0 -1
- package/.next/server/chunks/ssr/_0938p.1._.js +0 -3
- package/.next/server/chunks/ssr/_0938p.1._.js.map +0 -1
- package/.next/server/chunks/ssr/_0afdsbz._.js +0 -3
- package/.next/server/chunks/ssr/_0afdsbz._.js.map +0 -1
- package/.next/server/chunks/ssr/_0ff5qav._.js +0 -3
- package/.next/server/chunks/ssr/_0ff5qav._.js.map +0 -1
- package/.next/server/chunks/ssr/_0gp8d.p._.js +0 -3
- package/.next/server/chunks/ssr/_0gp8d.p._.js.map +0 -1
- package/.next/server/chunks/ssr/_0k2j6-t._.js +0 -3
- package/.next/server/chunks/ssr/_0k2j6-t._.js.map +0 -1
- package/.next/server/chunks/ssr/_0mix09j._.js +0 -3
- package/.next/server/chunks/ssr/_0mix09j._.js.map +0 -1
- package/.next/server/chunks/ssr/_0mk7dqt._.js +0 -3
- package/.next/server/chunks/ssr/_0mk7dqt._.js.map +0 -1
- package/.next/server/chunks/ssr/_0n168uk._.js +0 -3
- package/.next/server/chunks/ssr/_0n168uk._.js.map +0 -1
- package/.next/server/chunks/ssr/_0nwg6lo._.js +0 -3
- package/.next/server/chunks/ssr/_0nwg6lo._.js.map +0 -1
- package/.next/server/chunks/ssr/_0pwd-nz._.js +0 -3
- package/.next/server/chunks/ssr/_0pwd-nz._.js.map +0 -1
- package/.next/server/chunks/ssr/_0rspzax._.js +0 -3
- package/.next/server/chunks/ssr/_0rspzax._.js.map +0 -1
- package/.next/server/chunks/ssr/_0t-2u_i._.js +0 -3
- package/.next/server/chunks/ssr/_0t-2u_i._.js.map +0 -1
- package/.next/server/chunks/ssr/_0vn5_62._.js +0 -5
- package/.next/server/chunks/ssr/_0vn5_62._.js.map +0 -1
- package/.next/server/chunks/ssr/_0yiz~s5._.js +0 -3
- package/.next/server/chunks/ssr/_0yiz~s5._.js.map +0 -1
- package/.next/server/chunks/ssr/_0~4ta0s._.js +0 -3
- package/.next/server/chunks/ssr/_0~4ta0s._.js.map +0 -1
- package/.next/server/chunks/ssr/_0~5r_8s._.js +0 -3
- package/.next/server/chunks/ssr/_0~5r_8s._.js.map +0 -1
- package/.next/server/chunks/ssr/_115_o9h._.js +0 -3
- package/.next/server/chunks/ssr/_115_o9h._.js.map +0 -1
- package/.next/server/chunks/ssr/_13mk_9n._.js +0 -3
- package/.next/server/chunks/ssr/_13mk_9n._.js.map +0 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_07.4ogy._.js +0 -3
- package/.next/server/chunks/ssr/packages_dashboard_src_07.4ogy._.js.map +0 -1
- package/.next/static/chunks/00p2fat~wl7uz.js +0 -1
- package/.next/static/chunks/07aksg8x5r0d9.js +0 -1
- package/.next/static/chunks/082cjr-p4ubw7.js +0 -1
- package/.next/static/chunks/09hewwcw-ts34.js +0 -1
- package/.next/static/chunks/09j~fmfefj03i.js +0 -1
- package/.next/static/chunks/0adfy5uyh_8c8.js +0 -1
- package/.next/static/chunks/0agoryx~xvt31.js +0 -1
- package/.next/static/chunks/0aoci_z-c0ele.css +0 -1
- package/.next/static/chunks/0atsym5j2dgzw.js +0 -1
- package/.next/static/chunks/0b3tta7tnnbur.js +0 -1
- package/.next/static/chunks/0d02.lqlwe9a_.js +0 -1
- package/.next/static/chunks/0eqyosc.qae5n.js +0 -1
- package/.next/static/chunks/0kkrrex6qm68-.js +0 -1
- package/.next/static/chunks/0lfxqap3b6sar.js +0 -11
- package/.next/static/chunks/0ord2b6oqi.3g.js +0 -1
- package/.next/static/chunks/0rh-ee9ky1ybq.js +0 -1
- package/.next/static/chunks/0t5v~o90gn66f.js +0 -1
- package/.next/static/chunks/0vaymprggmdwi.js +0 -3
- package/.next/static/chunks/0x2vder5-rzy3.js +0 -1
- package/.next/static/chunks/0yk64vsbmwqd8.js +0 -1
- package/.next/static/chunks/0yvzj34_7s6kb.js +0 -1
- package/.next/static/chunks/104za._t2qmr8.js +0 -1
- package/.next/static/chunks/13pe2-ed6nel..js +0 -1
- package/.next/static/chunks/13zn61okwjlyn.js +0 -1
- package/.next/static/chunks/153hm0-366-at.js +0 -1
- package/.next/static/chunks/16k3_-6f7kx97.js +0 -1
- package/.next/static/chunks/18904zqns5ncn.js +0 -1
- package/.next/trace +0 -2
- package/.next/trace-build +0 -1
- /package/.next/server/chunks/{[root-of-the-server]__00gp8gz._.js.map → [root-of-the-server]__01knfi.._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0-0wgko._.js.map → [root-of-the-server]__08_s4yo._.js.map} +0 -0
- /package/.next/static/{CDXVH-99b-ZdHz0Rd9pr_ → lsV2FU1YUtwJPmeiim7tk}/_buildManifest.js +0 -0
- /package/.next/static/{CDXVH-99b-ZdHz0Rd9pr_ → lsV2FU1YUtwJPmeiim7tk}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{CDXVH-99b-ZdHz0Rd9pr_ → lsV2FU1YUtwJPmeiim7tk}/_ssgManifest.js +0 -0
package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_wiki_page_tsx_0..1tkb._.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/dashboard/src/components/settings/wiki-vault-path-picker.tsx","../../../../../../packages/dashboard/src/app/settings/wiki/page.tsx","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/database.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/copy.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/archive-restore.ts","../../../../../../packages/dashboard/src/components/settings/vault-path-picker.logic.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useRef } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { Loader2 } from \"lucide-react\";\nimport { DirectoryPickerField } from \"@/components/directory-picker-field\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { ApiError, api } from \"@/lib/api-client\";\nimport {\n summariseProbe,\n type ProbeResult,\n type ProbeSummary,\n} from \"./vault-path-picker.logic\";\n\n/**\n * Wiki-specific path picker.\n *\n * Composes the project's standard `DirectoryPickerField` (which opens\n * the OS-native folder dialog through `/api/system/pick-directory`)\n * with a `/api/fs/probe` call that validates the chosen path against\n * the wiki-specific collision matrix:\n * - overlaps with the primary vault, external Obsidian vault, or\n * daemon dataDir → save-blocking error\n * - not-yet-writable parent → warning (\"will be created\")\n * - existing `.obsidian/` marker → info (\"Obsidian vault detected\")\n * - existing 10_raw/20_wiki/90_meta layout → info (\"you will be\n * prompted to Adopt or Migrate after saving\", per §7)\n *\n * The probe is modelled as `useQuery` (not a manual useEffect) so the\n * effect-only state-setting rule stays happy and consecutive renders\n * with the same path reuse the result. `onValidatedChange` is captured\n * through a ref so a caller that passes a fresh closure each render\n * does not retrigger the notify-effect — without that guard, the\n * effect deps shift every render and the parent's setState turns into\n * a loop. The notify-effect therefore only fires when the probe\n * settles or the chosen path actually changes.\n */\nexport function WikiVaultPathPicker({\n value,\n onChange,\n onValidatedChange,\n defaultPath,\n disabled,\n id,\n}: {\n value: string;\n onChange: (next: string) => void;\n /**\n * Called after each probe completes. The settings page uses this to\n * disable the save button when `summary.canConfirm` is false.\n */\n onValidatedChange?: (path: string, summary: ProbeSummary) => void;\n defaultPath?: string;\n disabled?: boolean;\n id?: string;\n}) {\n const trimmed = value.trim();\n const probeQuery = useQuery<ProbeResult, ApiError>({\n queryKey: [\"fs-probe\", trimmed],\n enabled: trimmed.length > 0,\n // Stale time is tight — the probe must re-run when the user picks\n // a different path, but consecutive renders with the same path\n // should reuse the result.\n staleTime: 30 * 1000,\n retry: false,\n queryFn: () =>\n api.get<ProbeResult>(\"/fs/probe\", { params: { path: trimmed } }),\n });\n\n // Memoise the unified probe result so its identity is stable across\n // renders while the query data/error references don't change. The\n // probe route returns a structured 400 body for validation\n // rejections; we surface that body's message rather than the bare\n // ApiError text.\n const probe: ProbeResult | null = useMemo(() => {\n if (probeQuery.data) return probeQuery.data;\n if (probeQuery.error) {\n const body =\n typeof probeQuery.error.body === \"object\" && probeQuery.error.body !== null\n ? (probeQuery.error.body as Record<string, unknown>)\n : null;\n return {\n ok: false,\n path: trimmed,\n exists: false,\n isDir: false,\n writable: false,\n collision: null,\n collisionMessage: null,\n hasObsidianStructure: false,\n existingWiki: null,\n error: typeof body?.error === \"string\" ? body.error : \"request_failed\",\n message:\n typeof body?.message === \"string\"\n ? body.message\n : probeQuery.error.message,\n };\n }\n return null;\n }, [probeQuery.data, probeQuery.error, trimmed]);\n\n const summary: ProbeSummary = useMemo(() => summariseProbe(probe), [probe]);\n\n // Ref-captured callback. Avoids forcing every parent to wrap their\n // handler in `useCallback`; a fresh closure each parent render is\n // harmless because the notify-effect below does not depend on it.\n // The ref is updated in a no-deps effect (runs after every render)\n // so it always holds the latest closure by the time the notify-\n // effect — declared below — fires. Effect declaration order is\n // guaranteed in React, so the ref write completes before the\n // notify-effect runs.\n const onValidatedChangeRef = useRef(onValidatedChange);\n useEffect(() => {\n onValidatedChangeRef.current = onValidatedChange;\n });\n\n // Notify the parent only when the probe verdict actually changes.\n // Deps are query-data refs (React Query keeps them stable while\n // nothing changes) plus the primitive path string — no fresh\n // closures, no fresh object literals.\n useEffect(() => {\n const cb = onValidatedChangeRef.current;\n if (!cb) return;\n if (trimmed.length === 0) {\n cb(\"\", summary);\n return;\n }\n // Wait until the query has settled before declaring a verdict.\n if (!probeQuery.isFetched && !probeQuery.isError) return;\n cb(trimmed, summary);\n }, [trimmed, summary, probeQuery.isFetched, probeQuery.isError]);\n\n const showSummary = trimmed.length > 0 && (probeQuery.isFetched || probeQuery.isError);\n const variantBySeverity: Record<NonNullable<typeof summary.severity>, \"error\" | \"warning\" | \"info\"> = {\n error: \"error\",\n warning: \"warning\",\n info: \"info\",\n };\n\n return (\n <div className=\"space-y-2\">\n <DirectoryPickerField\n id={id}\n value={value}\n onChange={onChange}\n title=\"Choose external wiki vault\"\n placeholder=\"/Users/you/Obsidian/Wiki\"\n defaultPath={defaultPath}\n disabled={disabled}\n />\n {probeQuery.isFetching && (\n <p\n className=\"flex items-center gap-1 text-xs text-muted-foreground\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <Loader2 className=\"h-3 w-3 animate-spin\" aria-hidden=\"true\" />\n Validating path…\n </p>\n )}\n {showSummary && summary.severity && (\n <Alert variant={variantBySeverity[summary.severity]}>\n <ul className=\"list-disc pl-4 space-y-0.5\">\n {summary.lines.map((line) => (\n <li key={line}>{line}</li>\n ))}\n </ul>\n </Alert>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport Link from \"next/link\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport {\n AlertTriangle,\n ArchiveRestore,\n ArrowRight,\n ChevronDown,\n Copy,\n Database,\n FolderOpen,\n History,\n Loader2,\n RotateCcw,\n Save,\n Trash2,\n} from \"lucide-react\";\nimport { ApiError, api } from \"@/lib/api-client\";\nimport type { WikiWorkspace, WikiWorkspacesResponse } from \"@/lib/api-types\";\nimport { BackendSettingsSection } from \"@/components/settings/backend-settings\";\nimport { SettingsToast } from \"@/components/settings/settings-navigation\";\nimport { WikiVaultPathPicker } from \"@/components/settings/wiki-vault-path-picker\";\nimport type { ProbeSummary } from \"@/components/settings/vault-path-picker.logic\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\";\nimport { Input } from \"@/components/ui/input\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/ui/select\";\nimport { useSaveConfig } from \"@/lib/hooks/use-save-config\";\nimport { formatCurrency } from \"@/lib/utils\";\n\nconst WIKI_PROCESS_KEYS = [\n \"wiki.ingest_url\",\n \"wiki.compile\",\n \"wiki.ask\",\n \"wiki.lint\",\n \"wiki.trace\",\n \"wiki.connect\",\n] as const;\n\nconst WIKI_LANGUAGE_OPTIONS: Array<{ tag: string; label: string }> = [\n { tag: \"en\", label: \"English\" },\n { tag: \"ja\", label: \"Japanese\" },\n { tag: \"zh\", label: \"Chinese\" },\n { tag: \"es\", label: \"Español (Spanish)\" },\n { tag: \"fr\", label: \"Français (French)\" },\n { tag: \"de\", label: \"Deutsch (German)\" },\n { tag: \"pt\", label: \"Português (Portuguese)\" },\n { tag: \"ko\", label: \"한국어 (Korean)\" },\n { tag: \"__custom__\", label: \"Other (BCP-47 tag…)\" },\n];\n\nconst WIKI_LANGUAGE_TAG_RE = /^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})?$/;\n\ninterface WikiDraft {\n language: string;\n dispatchMode: \"parallel\" | \"serial\";\n concurrencyCap: number;\n dmAgentWriteEnabled: boolean;\n bridgeEnabled: boolean;\n bridgeMeasurementOnly: boolean;\n bridgeMinConfidence: number;\n fullCompileApprovalThresholdUsd: number;\n writeStrategy: \"fs\" | \"cli\" | \"auto\";\n gitPreCompileEnabled: boolean;\n}\n\ninterface EstimateResponse {\n workspace: string;\n estimate: {\n rawCount: number;\n estimatedInputTokens: number;\n unitCostUsdPerKToken: number;\n optimisticUsd: number;\n expectedUsd: number;\n pessimisticUsd: number;\n thresholdUsd: number;\n exceedsThreshold: boolean;\n method?: \"flat-heuristic\" | \"per-file-chars\";\n perFile?: Array<{ path: string; charCount: number; estimatedTokens: number }>;\n };\n}\n\nfunction toDraft(workspace: WikiWorkspace): WikiDraft {\n return {\n language: workspace.language,\n dispatchMode: workspace.dispatchMode,\n concurrencyCap: workspace.concurrencyCap,\n dmAgentWriteEnabled: workspace.dmAgentWriteEnabled,\n bridgeEnabled: workspace.bridgeEnabled,\n bridgeMeasurementOnly: workspace.bridgeMeasurementOnly,\n bridgeMinConfidence: workspace.bridgeMinConfidence,\n fullCompileApprovalThresholdUsd: workspace.fullCompileApprovalThresholdUsd,\n writeStrategy: workspace.writeStrategy,\n gitPreCompileEnabled: workspace.gitPreCompileEnabled,\n };\n}\n\nfunction draftsEqual(a: WikiDraft, b: WikiDraft): boolean {\n return (\n a.language === b.language\n && a.dispatchMode === b.dispatchMode\n && a.concurrencyCap === b.concurrencyCap\n && a.dmAgentWriteEnabled === b.dmAgentWriteEnabled\n && a.bridgeEnabled === b.bridgeEnabled\n && a.bridgeMeasurementOnly === b.bridgeMeasurementOnly\n && a.bridgeMinConfidence === b.bridgeMinConfidence\n && a.fullCompileApprovalThresholdUsd === b.fullCompileApprovalThresholdUsd\n && a.writeStrategy === b.writeStrategy\n && a.gitPreCompileEnabled === b.gitPreCompileEnabled\n );\n}\n\nfunction formatApiError(error: unknown): string {\n if (error instanceof ApiError) return error.message;\n return error instanceof Error ? error.message : \"Request failed\";\n}\n\nfunction formatTimestamp(iso: string | null): string {\n if (!iso) return \"—\";\n try {\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return iso;\n return d.toLocaleString();\n } catch {\n return iso;\n }\n}\n\nfunction WikiLanguageField({\n value,\n onChange,\n}: {\n value: string;\n onChange: (next: string) => void;\n}) {\n const isKnown = WIKI_LANGUAGE_OPTIONS.some(\n (opt) => opt.tag === value && opt.tag !== \"__custom__\",\n );\n const [modeOverride, setModeOverride] = useState<string | null>(null);\n const mode = modeOverride ?? (isKnown ? value : \"__custom__\");\n const customInvalid =\n mode === \"__custom__\"\n && value.trim().length > 0\n && !WIKI_LANGUAGE_TAG_RE.test(value.trim());\n\n const handleModeChange = (next: string) => {\n if (next === \"__custom__\") {\n setModeOverride(\"__custom__\");\n return;\n }\n setModeOverride(null);\n onChange(next);\n };\n\n return (\n <div className=\"space-y-2\">\n <Select value={mode} onValueChange={handleModeChange}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {WIKI_LANGUAGE_OPTIONS.map((lang) => (\n <SelectItem key={lang.tag} value={lang.tag}>\n {lang.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {mode === \"__custom__\" && (\n <div className=\"space-y-1\">\n <Input\n value={value}\n onChange={(event) => onChange(event.target.value)}\n placeholder=\"e.g. zh-Hans or pt-BR\"\n />\n {customInvalid && (\n <p className=\"text-xs text-red-500\">\n Use a BCP-47 tag like <code>en-US</code> or <code>zh-Hans</code>.\n </p>\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction CopyButton({ text }: { text: string }) {\n const [copied, setCopied] = useState(false);\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 px-2 text-xs\"\n onClick={async () => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 1200);\n } catch {\n // clipboard unavailable — fall through silently\n }\n }}\n >\n <Copy className=\"h-3 w-3\" />\n {copied ? \"Copied\" : \"Copy\"}\n </Button>\n );\n}\n\nfunction PageHeader() {\n return (\n <div>\n <h1 className=\"text-2xl font-semibold text-foreground\">Wiki</h1>\n <p className=\"mt-1 max-w-3xl text-sm text-muted-foreground\">\n Long-form personal knowledge base. <code>!ingest</code> captures\n sources, <code>!compile</code> turns them into wiki pages, and{\" \"}\n <code>!ask</code> / <code>!trace</code> / <code>!connect</code> produce\n answers and timelines.\n </p>\n </div>\n );\n}\n\nexport default function WikiSettingsPage() {\n const queryClient = useQueryClient();\n const { toast, showToast } = useSaveConfig();\n const { data, isLoading, error } = useQuery({\n queryKey: [\"wiki-workspaces\"],\n queryFn: () => api.get<WikiWorkspacesResponse>(\"/wiki/workspaces\"),\n });\n const activeWorkspace = data?.workspaces.find((item) => item.active) ?? null;\n const archivedWorkspace = !activeWorkspace\n ? (data?.workspaces.find((item) => !item.active) ?? null)\n : null;\n const workspace = activeWorkspace ?? archivedWorkspace;\n\n const [draft, setDraft] = useState<WikiDraft | null>(null);\n const [externalPath, setExternalPath] = useState(\"\");\n const [externalProbeSummary, setExternalProbeSummary] = useState<\n ProbeSummary | null\n >(null);\n const [advancedOpen, setAdvancedOpen] = useState(false);\n\n useEffect(() => {\n if (workspace) setDraft(toDraft(workspace));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [workspace?.id]);\n\n const baseline = useMemo(() => (workspace ? toDraft(workspace) : null), [workspace]);\n const isDirty = !!(draft && baseline && !draftsEqual(draft, baseline));\n\n const estimate = useQuery({\n queryKey: [\"wiki-estimate\", activeWorkspace?.name],\n enabled: !!activeWorkspace,\n queryFn: () =>\n api.get<EstimateResponse>(`/wiki/${activeWorkspace!.name}/estimate`, {\n headers: { \"x-process-key\": \"wiki.compile\" },\n }),\n });\n\n const saveMutation = useMutation({\n mutationFn: async () => {\n if (!workspace || !draft) return null;\n return api.patch<{ workspace: WikiWorkspace }>(\n `/wiki/workspaces/${workspace.name}`,\n draft,\n );\n },\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey: [\"wiki-workspaces\"] });\n showToast(\"success\", \"Wiki settings saved\");\n },\n onError: (err) => showToast(\"error\", formatApiError(err)),\n });\n\n const enableInternalMutation = useMutation({\n mutationFn: () =>\n api.post<{ workspace: WikiWorkspace }>(\"/wiki/workspaces\", {\n kind: \"internal\",\n }),\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey: [\"wiki-workspaces\"] });\n showToast(\"success\", \"Internal wiki enabled\");\n },\n onError: (err) => showToast(\"error\", formatApiError(err)),\n });\n\n const enableExternalMutation = useMutation({\n mutationFn: async () => {\n const probed = await api.post<{\n ok: boolean;\n error?: string;\n message?: string;\n validation: { resolvedPath?: string };\n probe: { kind: \"empty\" | \"partial\" | \"wiki\" };\n }>(\"/wiki/workspaces/probe\", { rootPath: externalPath });\n if (!probed.ok) {\n throw new ApiError(400, {\n message: probed.message ?? \"External path failed validation.\",\n });\n }\n return api.post<{ workspace: WikiWorkspace }>(\"/wiki/workspaces\", {\n kind: \"external\",\n rootPath: probed.validation.resolvedPath ?? externalPath,\n });\n },\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey: [\"wiki-workspaces\"] });\n showToast(\"success\", \"External wiki created\");\n },\n onError: (err) => showToast(\"error\", formatApiError(err)),\n });\n\n const reactivateMutation = useMutation({\n mutationFn: () => {\n if (!workspace) throw new Error(\"No workspace to re-activate\");\n return api.patch<{ workspace: WikiWorkspace }>(\n `/wiki/workspaces/${workspace.name}`,\n { active: true },\n );\n },\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey: [\"wiki-workspaces\"] });\n showToast(\"success\", \"Wiki re-activated\");\n },\n onError: (err) => showToast(\"error\", formatApiError(err)),\n });\n\n const archiveMutation = useMutation({\n mutationFn: () => api.post<{ ok: true }>(`/wiki/workspaces/${workspace?.name}/archive`),\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey: [\"wiki-workspaces\"] });\n showToast(\"success\", \"Wiki archived\");\n },\n onError: (err) => showToast(\"error\", formatApiError(err)),\n });\n\n const deleteMutation = useMutation({\n mutationFn: () => api.delete<{ ok: true; rootPathPreserved: string }>(\n `/wiki/workspaces/${workspace?.name}`,\n ),\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey: [\"wiki-workspaces\"] });\n showToast(\"success\", \"Wiki workspace removed (files preserved on disk)\");\n },\n onError: (err) => showToast(\"error\", formatApiError(err)),\n });\n\n if (isLoading) {\n return (\n <>\n <PageHeader />\n <Card>\n <div className=\"flex items-center gap-2 p-4 text-sm text-muted-foreground\">\n <Loader2 className=\"h-4 w-4 animate-spin\" /> Loading wiki…\n </div>\n </Card>\n </>\n );\n }\n\n if (error) {\n return (\n <>\n <PageHeader />\n <Alert variant=\"error\">\n {error instanceof Error ? error.message : \"Failed to load wiki settings.\"}\n </Alert>\n </>\n );\n }\n\n // ---- EMPTY STATE: no workspace at all -------------------------------------\n if (!workspace) {\n return (\n <>\n <PageHeader />\n <SettingsToast toast={toast} />\n <EmptyState\n defaultInternalRoot={data?.defaultInternalRoot}\n externalPath={externalPath}\n setExternalPath={setExternalPath}\n probeSummary={externalProbeSummary}\n onProbeChange={(_path, summary) => setExternalProbeSummary(summary)}\n enableInternalPending={enableInternalMutation.isPending}\n enableExternalPending={enableExternalMutation.isPending}\n onEnableInternal={() => enableInternalMutation.mutate()}\n onEnableExternal={() => enableExternalMutation.mutate()}\n />\n </>\n );\n }\n\n // ---- ARCHIVED STATE: workspace exists but inactive ------------------------\n if (!workspace.active) {\n return (\n <>\n <PageHeader />\n <SettingsToast toast={toast} />\n <ArchivedState\n workspace={workspace}\n reactivatePending={reactivateMutation.isPending}\n deletePending={deleteMutation.isPending}\n onReactivate={() => reactivateMutation.mutate()}\n onDelete={() => {\n if (\n window.confirm(\n \"Delete this wiki workspace registration?\\n\\nThe folder on disk is preserved — only the daemon's record is removed.\",\n )\n ) {\n deleteMutation.mutate();\n }\n }}\n />\n </>\n );\n }\n\n // ---- ACTIVE STATE ----------------------------------------------------------\n if (!draft) return null;\n\n const isExternal = workspace.kind === \"external\";\n const showGitToggle = isExternal && workspace.isGitRepo === true;\n const totalSevenDayCost = workspace.recentCosts.reduce(\n (sum, row) => sum + Number(row.totalCostUsd ?? 0),\n 0,\n );\n\n return (\n <>\n <PageHeader />\n <SettingsToast toast={toast} />\n\n <WorkspaceOverviewCard\n workspace={workspace}\n sevenDayCost={totalSevenDayCost}\n />\n\n {estimate.data?.estimate && estimate.data.estimate.rawCount > 0 && (\n <EstimateBanner data={estimate.data.estimate} />\n )}\n\n <GeneralSettingsCard draft={draft} setDraft={setDraft} />\n\n <BridgeSettingsCard\n draft={draft}\n setDraft={setDraft}\n bridgeStats={workspace.bridgeStats}\n />\n\n <CompilationSettingsCard\n draft={draft}\n setDraft={setDraft}\n isExternal={isExternal}\n showGitToggle={showGitToggle}\n />\n\n <BackendSettingsSection\n onToast={showToast}\n sections={[\"processes\"]}\n processKeys={WIKI_PROCESS_KEYS}\n title=\"Commands & models\"\n description=\"Pick the backend, model, turn limit, and per-run budget for each wiki command.\"\n />\n\n <Collapsible open={advancedOpen} onOpenChange={setAdvancedOpen}>\n <Card>\n <CollapsibleTrigger className=\"flex w-full items-center justify-between text-left\">\n <div>\n <CardTitle>Advanced</CardTitle>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n External URL fetch policy, backend-specific notes.\n </p>\n </div>\n <ChevronDown\n className={`h-5 w-5 text-muted-foreground transition-transform ${advancedOpen ? \"rotate-180\" : \"\"}`}\n />\n </CollapsibleTrigger>\n <CollapsibleContent className=\"mt-4\">\n <ExternalFetchPolicy />\n </CollapsibleContent>\n </Card>\n </Collapsible>\n\n <DangerZone\n workspaceName={workspace.name}\n archivePending={archiveMutation.isPending}\n deletePending={deleteMutation.isPending}\n onArchive={() => {\n if (\n window.confirm(\n \"Archive this wiki workspace?\\n\\nWiki commands will stop working until you re-activate it. Files on disk are kept.\",\n )\n ) {\n archiveMutation.mutate();\n }\n }}\n onDelete={() => {\n if (\n window.confirm(\n \"Permanently remove this workspace registration?\\n\\nThe folder on disk is preserved — only the daemon's record is deleted.\",\n )\n ) {\n deleteMutation.mutate();\n }\n }}\n />\n\n {isDirty && (\n <SaveBar\n saving={saveMutation.isPending}\n onSave={() => saveMutation.mutate()}\n onDiscard={() => setDraft(baseline)}\n />\n )}\n </>\n );\n}\n\n// ============================================================================\n// Empty state — no workspace at all\n// ============================================================================\n\nfunction EmptyState({\n defaultInternalRoot,\n externalPath,\n setExternalPath,\n probeSummary,\n onProbeChange,\n enableInternalPending,\n enableExternalPending,\n onEnableInternal,\n onEnableExternal,\n}: {\n defaultInternalRoot: string | undefined;\n externalPath: string;\n setExternalPath: (v: string) => void;\n probeSummary: ProbeSummary | null;\n onProbeChange: (path: string, summary: ProbeSummary) => void;\n enableInternalPending: boolean;\n enableExternalPending: boolean;\n onEnableInternal: () => void;\n onEnableExternal: () => void;\n}) {\n return (\n <>\n <Card>\n <CardHeader className=\"items-start\">\n <div>\n <CardTitle>Set up your wiki</CardTitle>\n <p className=\"mt-1 max-w-3xl text-sm text-muted-foreground\">\n Pick where the wiki lives. You can switch later by archiving\n and re-enabling.\n </p>\n </div>\n </CardHeader>\n\n <div className=\"grid gap-3 md:grid-cols-2\">\n {/* Internal option */}\n <div className=\"flex flex-col gap-3 rounded-lg border border-border bg-card p-4\">\n <div className=\"flex items-center gap-2\">\n <Database className=\"h-5 w-5 text-foreground\" />\n <h3 className=\"text-base font-semibold\">Internal</h3>\n <Badge variant=\"blue\">Recommended</Badge>\n </div>\n <p className=\"text-sm text-muted-foreground\">\n Managed by Aitne in its data directory. Nothing to set up.\n </p>\n <ul className=\"space-y-1 text-xs text-muted-foreground\">\n <li>• Path: <code className=\"break-all\">{defaultInternalRoot ?? \"~/.personal-agent/wiki\"}</code></li>\n <li>• Schema is seeded automatically</li>\n <li>• Best for: starting fresh, no Obsidian vault yet</li>\n </ul>\n <Button\n className=\"mt-auto\"\n onClick={onEnableInternal}\n disabled={enableInternalPending}\n >\n {enableInternalPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <ArrowRight className=\"h-4 w-4\" />}\n Enable internal wiki\n </Button>\n </div>\n\n {/* External option */}\n <div className=\"flex flex-col gap-3 rounded-lg border border-border bg-card p-4\">\n <div className=\"flex items-center gap-2\">\n <FolderOpen className=\"h-5 w-5 text-foreground\" />\n <h3 className=\"text-base font-semibold\">Existing Obsidian vault</h3>\n <Badge variant=\"purple\">External</Badge>\n </div>\n <p className=\"text-sm text-muted-foreground\">\n Point Aitne at a folder you already own. The wiki layout is\n detected and migrated on demand.\n </p>\n <ul className=\"space-y-1 text-xs text-muted-foreground\">\n <li>• Path must exist and be writable</li>\n <li>• Cannot overlap your primary vault or Aitne’s data dir</li>\n <li>• Best for: continuing an existing Obsidian knowledge base</li>\n </ul>\n <WikiVaultPathPicker\n value={externalPath}\n onChange={setExternalPath}\n onValidatedChange={onProbeChange}\n defaultPath={defaultInternalRoot}\n />\n <Button\n className=\"mt-auto\"\n variant=\"secondary\"\n onClick={onEnableExternal}\n disabled={\n !externalPath\n || enableExternalPending\n || probeSummary?.canConfirm === false\n }\n >\n {enableExternalPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <ArrowRight className=\"h-4 w-4\" />}\n Use this folder\n </Button>\n </div>\n </div>\n </Card>\n\n <Collapsible>\n <Card>\n <CollapsibleTrigger className=\"flex w-full items-center justify-between text-left\">\n <div>\n <CardTitle className=\"text-base\">What changes when wiki is on?</CardTitle>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n A small per-turn permission widening so <code>!ingest</code> can\n reach the internet.\n </p>\n </div>\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n </CollapsibleTrigger>\n <CollapsibleContent className=\"mt-3\">\n <ExternalFetchPolicy />\n </CollapsibleContent>\n </Card>\n </Collapsible>\n </>\n );\n}\n\n// ============================================================================\n// Archived state — workspace exists but inactive (the bug that started this)\n// ============================================================================\n\nfunction ArchivedState({\n workspace,\n reactivatePending,\n deletePending,\n onReactivate,\n onDelete,\n}: {\n workspace: WikiWorkspace;\n reactivatePending: boolean;\n deletePending: boolean;\n onReactivate: () => void;\n onDelete: () => void;\n}) {\n return (\n <Card>\n <CardHeader className=\"items-start\">\n <div className=\"flex items-start gap-3\">\n <div className=\"rounded-full bg-amber-100 p-2 dark:bg-amber-950/60\">\n <AlertTriangle className=\"h-5 w-5 text-amber-600 dark:text-amber-500\" />\n </div>\n <div>\n <CardTitle>This wiki is archived</CardTitle>\n <p className=\"mt-1 max-w-3xl text-sm text-muted-foreground\">\n The workspace <code>{workspace.name}</code> still exists on disk\n but wiki commands (<code>!ingest</code>, <code>!compile</code>,{\" \"}\n <code>!ask</code>) won’t run until you re-activate it.\n </p>\n </div>\n </div>\n </CardHeader>\n\n <dl className=\"grid gap-3 rounded-lg border border-border bg-muted/40 p-3 text-sm sm:grid-cols-2\">\n <div>\n <dt className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n Mode\n </dt>\n <dd className=\"text-foreground\">\n <Badge variant={workspace.kind === \"external\" ? \"purple\" : \"blue\"}>\n {workspace.kind === \"external\" ? \"External\" : \"Internal\"}\n </Badge>\n </dd>\n </div>\n <div>\n <dt className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n Root path\n </dt>\n <dd className=\"break-all font-mono text-xs text-foreground\">\n {workspace.rootPath}\n </dd>\n </div>\n <div>\n <dt className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n Wiki pages\n </dt>\n <dd className=\"text-foreground\">{workspace.stats.wikiCount}</dd>\n </div>\n <div>\n <dt className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n Last activity\n </dt>\n <dd className=\"text-foreground\">\n {formatTimestamp(workspace.lastCompileAt ?? workspace.lastIngestAt)}\n </dd>\n </div>\n </dl>\n\n <div className=\"mt-4 flex flex-wrap gap-2\">\n <Button onClick={onReactivate} disabled={reactivatePending}>\n {reactivatePending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <ArchiveRestore className=\"h-4 w-4\" />\n )}\n Re-activate wiki\n </Button>\n <Button\n variant=\"outline\"\n onClick={onDelete}\n disabled={deletePending}\n className=\"text-red-600 hover:bg-red-50 hover:text-red-700 dark:hover:bg-red-950/40\"\n >\n <Trash2 className=\"h-4 w-4\" />\n Remove registration\n </Button>\n </div>\n <p className=\"mt-3 text-xs text-muted-foreground\">\n Removing the registration is non-destructive — the folder on disk is\n preserved.\n </p>\n </Card>\n );\n}\n\n// ============================================================================\n// Active state — workspace overview header\n// ============================================================================\n\nfunction WorkspaceOverviewCard({\n workspace,\n sevenDayCost,\n}: {\n workspace: WikiWorkspace;\n sevenDayCost: number;\n}) {\n const isExternal = workspace.kind === \"external\";\n return (\n <Card>\n <CardHeader className=\"items-start\">\n <div className=\"flex w-full flex-col gap-3 lg:flex-row lg:items-start lg:justify-between\">\n <div className=\"space-y-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <CardTitle>{workspace.name}</CardTitle>\n <Badge variant={isExternal ? \"purple\" : \"blue\"}>\n {isExternal ? \"External\" : \"Internal\"}\n </Badge>\n <Badge variant=\"gray\">{workspace.language}</Badge>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <code className=\"break-all text-xs text-muted-foreground\">\n {workspace.rootPath}\n </code>\n <CopyButton text={workspace.rootPath} />\n </div>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button asChild variant=\"outline\" size=\"sm\">\n <Link href=\"/wiki\">Browse wiki</Link>\n </Button>\n <Button asChild variant=\"outline\" size=\"sm\">\n <Link href=\"/wiki/timeline\">\n <History className=\"h-4 w-4\" /> Timeline & health\n </Link>\n </Button>\n </div>\n </div>\n </CardHeader>\n\n <dl className=\"grid gap-3 border-t border-border pt-3 text-sm sm:grid-cols-4\">\n <Stat label=\"Raw notes\" value={workspace.stats.rawCount} />\n <Stat label=\"Wiki pages\" value={workspace.stats.wikiCount} />\n <Stat label=\"Outputs\" value={workspace.stats.outputCount} />\n <Stat label=\"7-day cost\" value={formatCurrency(sevenDayCost)} />\n </dl>\n </Card>\n );\n}\n\nfunction Stat({ label, value }: { label: string; value: string | number }) {\n return (\n <div>\n <dt className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {label}\n </dt>\n <dd className=\"mt-0.5 text-base font-semibold text-foreground\">{value}</dd>\n </div>\n );\n}\n\n// ============================================================================\n// Estimate banner\n// ============================================================================\n\nfunction EstimateBanner({ data }: { data: EstimateResponse[\"estimate\"] }) {\n return (\n <Alert variant={data.exceedsThreshold ? \"error\" : \"info\"}>\n <p className=\"text-sm\">\n <strong><code>!compile full</code> cost estimate:</strong>{\" \"}\n ${data.optimisticUsd.toFixed(2)}–${data.pessimisticUsd.toFixed(2)}{\" \"}\n (expected ${data.expectedUsd.toFixed(2)}) from {data.rawCount}{\" \"}\n raw note{data.rawCount === 1 ? \"\" : \"s\"}.{\" \"}\n {data.exceedsThreshold\n ? <>Above the ${data.thresholdUsd.toFixed(2)} threshold — will require dashboard approval.</>\n : <>Under the per-workspace threshold; will run autonomously.</>}\n </p>\n {data.method === \"per-file-chars\" && data.perFile && data.perFile.length > 0 && (\n <details className=\"mt-2 text-xs text-muted-foreground\">\n <summary className=\"cursor-pointer\">\n Top {data.perFile.length} raw notes by estimated cost\n </summary>\n <ul className=\"mt-1 space-y-0.5 font-mono\">\n {data.perFile.map((file) => (\n <li key={file.path}>\n {file.path} — {file.estimatedTokens.toLocaleString()} tokens\n {\" \"}({file.charCount.toLocaleString()} chars)\n </li>\n ))}\n </ul>\n </details>\n )}\n </Alert>\n );\n}\n\n// ============================================================================\n// Settings: General\n// ============================================================================\n\nfunction GeneralSettingsCard({\n draft,\n setDraft,\n}: {\n draft: WikiDraft;\n setDraft: (next: WikiDraft) => void;\n}) {\n return (\n <Card>\n <CardHeader className=\"items-start\">\n <div>\n <CardTitle>General</CardTitle>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n Language new pages are written in, and how multi-URL ingests are dispatched.\n </p>\n </div>\n </CardHeader>\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Field\n label=\"Writing language\"\n hint=\"Independent of your profile language. Existing pages are not rewritten.\"\n >\n <WikiLanguageField\n value={draft.language}\n onChange={(next) => setDraft({ ...draft, language: next })}\n />\n </Field>\n <Field\n label=\"Dispatch mode\"\n hint=\"Parallel ingests multiple URLs concurrently. Serial runs one at a time.\"\n >\n <Select\n value={draft.dispatchMode}\n onValueChange={(value) =>\n setDraft({ ...draft, dispatchMode: value as WikiDraft[\"dispatchMode\"] })\n }\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"parallel\">Parallel</SelectItem>\n <SelectItem value=\"serial\">Serial</SelectItem>\n </SelectContent>\n </Select>\n </Field>\n <Field\n label={\n <span className=\"flex items-center gap-2\">\n Concurrency cap\n <span className=\"inline-flex min-w-[2rem] justify-center rounded-md border border-border bg-muted px-1.5 py-0.5 text-xs font-medium text-foreground\">\n {draft.concurrencyCap}\n </span>\n </span>\n }\n hint={\n draft.dispatchMode === \"serial\"\n ? \"Disabled — set Dispatch mode to Parallel to use this.\"\n : \"Maximum simultaneous !ingest sessions.\"\n }\n >\n <input\n type=\"range\"\n min={1}\n max={10}\n step={1}\n value={draft.concurrencyCap}\n onChange={(event) =>\n setDraft({\n ...draft,\n concurrencyCap: Math.max(1, Math.min(10, Number(event.target.value) || 1)),\n })\n }\n aria-label=\"Per-URL concurrency cap\"\n className=\"h-2 w-full cursor-pointer appearance-none rounded-lg bg-muted accent-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n disabled={draft.dispatchMode === \"serial\"}\n />\n <div className=\"mt-1 flex justify-between text-xs text-muted-foreground\">\n <span>1</span>\n <span>5</span>\n <span>10</span>\n </div>\n </Field>\n </div>\n </Card>\n );\n}\n\n// ============================================================================\n// Settings: Bridge (DM → wiki capture)\n// ============================================================================\n\nfunction BridgeSettingsCard({\n draft,\n setDraft,\n bridgeStats,\n}: {\n draft: WikiDraft;\n setDraft: (next: WikiDraft) => void;\n bridgeStats: WikiWorkspace[\"bridgeStats\"];\n}) {\n const bridgeActive = draft.bridgeEnabled && draft.dmAgentWriteEnabled;\n return (\n <Card>\n <CardHeader className=\"items-start\">\n <div className=\"flex w-full items-start justify-between gap-2\">\n <div>\n <CardTitle>Capture insights from chat</CardTitle>\n <p className=\"mt-1 max-w-3xl text-sm text-muted-foreground\">\n When you and Aitne hit something worth keeping in a DM, the\n agent can drop a draft into <code>10_raw/bridge-*.md</code> for\n you to refine later. Two switches must both be on for anything\n to be written.\n </p>\n </div>\n <Badge variant={bridgeActive && !draft.bridgeMeasurementOnly ? \"blue\" : \"gray\"}>\n {!draft.bridgeEnabled || !draft.dmAgentWriteEnabled\n ? \"Off\"\n : draft.bridgeMeasurementOnly\n ? \"Observing\"\n : \"Writing\"}\n </Badge>\n </div>\n </CardHeader>\n\n <div className=\"space-y-3\">\n <Toggle\n checked={draft.bridgeEnabled}\n onChange={(v) => setDraft({ ...draft, bridgeEnabled: v })}\n label=\"Detect bridge candidates\"\n hint=\"The agent watches DM turns for ideas that look wiki-worthy.\"\n />\n <Toggle\n checked={draft.dmAgentWriteEnabled}\n onChange={(v) => setDraft({ ...draft, dmAgentWriteEnabled: v })}\n label=\"Let the agent write drafts\"\n hint=\"Required for any file to actually land. Without this, candidates are only logged.\"\n disabled={!draft.bridgeEnabled}\n />\n <Toggle\n checked={draft.bridgeMeasurementOnly}\n onChange={(v) => setDraft({ ...draft, bridgeMeasurementOnly: v })}\n label=\"Observation mode (don't write yet)\"\n hint=\"Recommended for the first 1-2 weeks: log candidates only so you can review precision before opening the write gate.\"\n disabled={!draft.bridgeEnabled}\n />\n <Field\n label=\"Minimum confidence\"\n hint=\"The agent's own confidence threshold (0–1). Lower = more drafts, more noise. Higher = fewer drafts, higher signal.\"\n >\n <Input\n type=\"number\"\n min={0}\n max={1}\n step=\"0.05\"\n value={draft.bridgeMinConfidence}\n onChange={(event) =>\n setDraft({\n ...draft,\n bridgeMinConfidence: Math.min(1, Math.max(0, Number(event.target.value) || 0)),\n })\n }\n className=\"max-w-[8rem]\"\n disabled={!draft.bridgeEnabled}\n />\n </Field>\n\n {bridgeStats && (\n <div className=\"rounded-lg border border-border bg-muted/40 p-3 text-xs text-muted-foreground\">\n <div className=\"grid gap-2 sm:grid-cols-3\">\n <span>{bridgeStats.written} files written</span>\n <span>{bridgeStats.candidates} candidates logged</span>\n <span>{bridgeStats.deduplicated} dedup hits</span>\n </div>\n {bridgeStats.lastDetectedAt && (\n <p className=\"mt-1.5\">Last activity: {formatTimestamp(bridgeStats.lastDetectedAt)}</p>\n )}\n </div>\n )}\n </div>\n </Card>\n );\n}\n\n// ============================================================================\n// Settings: Compilation\n// ============================================================================\n\nfunction CompilationSettingsCard({\n draft,\n setDraft,\n isExternal,\n showGitToggle,\n}: {\n draft: WikiDraft;\n setDraft: (next: WikiDraft) => void;\n isExternal: boolean;\n showGitToggle: boolean;\n}) {\n return (\n <Card>\n <CardHeader className=\"items-start\">\n <div>\n <CardTitle>Compilation & writes</CardTitle>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n How <code>!compile</code> handles large jobs and writes back to disk.\n </p>\n </div>\n </CardHeader>\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Field\n label=\"Approval threshold for !compile full\"\n hint=\"If the estimated cost exceeds this, !compile full asks for dashboard approval instead of running autonomously.\"\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">$</span>\n <Input\n type=\"number\"\n min={0}\n step=\"0.01\"\n value={draft.fullCompileApprovalThresholdUsd}\n onChange={(event) =>\n setDraft({\n ...draft,\n fullCompileApprovalThresholdUsd: Number(event.target.value) || 0,\n })\n }\n />\n </div>\n </Field>\n\n {isExternal && (\n <Field\n label=\"Write strategy\"\n hint=\"iCloud-backed vaults need the Obsidian CLI to sync correctly. Auto probes on the first write.\"\n >\n <Select\n value={draft.writeStrategy}\n onValueChange={(value) =>\n setDraft({ ...draft, writeStrategy: value as WikiDraft[\"writeStrategy\"] })\n }\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"auto\">Auto (probe on first write)</SelectItem>\n <SelectItem value=\"fs\">Direct filesystem</SelectItem>\n <SelectItem value=\"cli\">Obsidian CLI (for iCloud vaults)</SelectItem>\n </SelectContent>\n </Select>\n </Field>\n )}\n\n {showGitToggle && (\n <div className=\"md:col-span-2\">\n <Toggle\n checked={draft.gitPreCompileEnabled}\n onChange={(v) => setDraft({ ...draft, gitPreCompileEnabled: v })}\n label=\"Auto-commit before !compile full\"\n hint=\"Stages and commits any pending changes so a full compile starts from a clean tree. Skipped if the tree is dirty in unexpected ways.\"\n />\n </div>\n )}\n </div>\n </Card>\n );\n}\n\n// ============================================================================\n// External fetch policy — rewritten in plain language\n// ============================================================================\n\nfunction ExternalFetchPolicy() {\n return (\n <div className=\"space-y-3 text-sm\">\n <p className=\"text-muted-foreground\">\n Only <code>wiki.ingest_url</code> sessions (one per URL passed to{\" \"}\n <code>!ingest</code>) are allowed to reach the internet.{\" \"}\n <code>wiki.compile</code> and <code>wiki.ask</code> read locally\n through the daemon and never touch external hosts.\n </p>\n <details className=\"rounded-lg border border-border bg-muted/40 p-3 text-xs\">\n <summary className=\"cursor-pointer font-medium text-foreground\">\n Per-backend details\n </summary>\n <ul className=\"mt-2 ml-4 list-disc space-y-1.5 text-muted-foreground\">\n <li>\n <strong className=\"text-foreground\">Claude</strong> — adds{\" \"}\n <code>WebFetch</code> to the per-turn allowed tools. The deny\n list and dontAsk permission mode still apply. If you customised{\" \"}\n <code>allowedToolsOverride</code>, include <code>WebFetch</code>{\" \"}\n yourself.\n </li>\n <li>\n <strong className=\"text-foreground\">Codex</strong> — no change\n needed. The workspace-write sandbox already reaches the network.\n </li>\n <li>\n <strong className=\"text-foreground\">Gemini</strong> — the strict\n admin policy flips just <code>web_fetch</code> to allow for this\n turn. Container sandbox + context-dir chokepoint stay intact.\n </li>\n <li>\n If a backend is globally in <code>allow</code> execution mode,\n the widening is a no-op.\n </li>\n </ul>\n </details>\n </div>\n );\n}\n\n// ============================================================================\n// Danger zone\n// ============================================================================\n\nfunction DangerZone({\n workspaceName,\n archivePending,\n deletePending,\n onArchive,\n onDelete,\n}: {\n workspaceName: string;\n archivePending: boolean;\n deletePending: boolean;\n onArchive: () => void;\n onDelete: () => void;\n}) {\n return (\n <Card className=\"border-red-200 dark:border-red-900/50\">\n <CardHeader className=\"items-start\">\n <div>\n <CardTitle className=\"text-red-700 dark:text-red-400\">Danger zone</CardTitle>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n Stop or remove the <code>{workspaceName}</code> wiki. Files on\n disk are kept in both cases.\n </p>\n </div>\n </CardHeader>\n <div className=\"grid gap-3 md:grid-cols-2\">\n <div className=\"rounded-lg border border-border p-3\">\n <h4 className=\"text-sm font-semibold text-foreground\">Archive</h4>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Pauses wiki commands. You can re-activate later from this page.\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n onClick={onArchive}\n disabled={archivePending}\n >\n {archivePending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : null}\n Archive workspace\n </Button>\n </div>\n <div className=\"rounded-lg border border-red-200 p-3 dark:border-red-900/50\">\n <h4 className=\"text-sm font-semibold text-red-700 dark:text-red-400\">Remove registration</h4>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Deletes the daemon’s record only. The folder on disk is\n preserved — re-add it later if you change your mind.\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3 text-red-600 hover:bg-red-50 hover:text-red-700 dark:hover:bg-red-950/40\"\n onClick={onDelete}\n disabled={deletePending}\n >\n {deletePending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Trash2 className=\"h-4 w-4\" />}\n Remove\n </Button>\n </div>\n </div>\n </Card>\n );\n}\n\n// ============================================================================\n// Save bar — sticky bottom, visible only when draft is dirty\n// ============================================================================\n\nfunction SaveBar({\n saving,\n onSave,\n onDiscard,\n}: {\n saving: boolean;\n onSave: () => void;\n onDiscard: () => void;\n}) {\n return (\n <div className=\"sticky bottom-4 z-10 mt-4 flex items-center justify-between gap-3 rounded-lg border border-border bg-background/95 px-4 py-3 shadow-lg backdrop-blur\">\n <p className=\"text-sm text-foreground\">You have unsaved changes.</p>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={onDiscard} disabled={saving}>\n <RotateCcw className=\"h-4 w-4\" />\n Discard\n </Button>\n <Button size=\"sm\" onClick={onSave} disabled={saving}>\n {saving ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Save className=\"h-4 w-4\" />}\n Save changes\n </Button>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Small primitives\n// ============================================================================\n\nfunction Field({\n label,\n hint,\n children,\n}: {\n label: React.ReactNode;\n hint?: React.ReactNode;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"space-y-1.5\">\n <p className=\"text-sm font-medium text-foreground\">{label}</p>\n {children}\n {hint && <p className=\"text-xs text-muted-foreground\">{hint}</p>}\n </div>\n );\n}\n\nfunction Toggle({\n checked,\n onChange,\n label,\n hint,\n disabled,\n}: {\n checked: boolean;\n onChange: (v: boolean) => void;\n label: string;\n hint?: string;\n disabled?: boolean;\n}) {\n return (\n <label\n className={`flex items-start gap-3 rounded-lg border border-border p-3 text-sm ${\n disabled ? \"opacity-50\" : \"cursor-pointer hover:bg-muted/40\"\n }`}\n >\n <input\n type=\"checkbox\"\n className=\"mt-0.5\"\n checked={checked}\n onChange={(event) => onChange(event.target.checked)}\n disabled={disabled}\n />\n <div className=\"space-y-0.5\">\n <p className=\"font-medium text-foreground\">{label}</p>\n {hint && <p className=\"text-xs text-muted-foreground\">{hint}</p>}\n </div>\n </label>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Database\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/database\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 Database = createLucideIcon('Database', [\n ['ellipse', { cx: '12', cy: '5', rx: '9', ry: '3', key: 'msslwz' }],\n ['path', { d: 'M3 5V19A9 3 0 0 0 21 19V5', key: '1wlel7' }],\n ['path', { d: 'M3 12A9 3 0 0 0 21 12', key: 'mv7ke4' }],\n]);\n\nexport default Database;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Copy\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/copy\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 Copy = createLucideIcon('Copy', [\n ['rect', { width: '14', height: '14', x: '8', y: '8', rx: '2', ry: '2', key: '17jyea' }],\n ['path', { d: 'M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2', key: 'zix9uf' }],\n]);\n\nexport default Copy;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ArchiveRestore\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/archive-restore\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 ArchiveRestore = createLucideIcon('ArchiveRestore', [\n ['rect', { width: '20', height: '5', x: '2', y: '3', rx: '1', key: '1wp1u1' }],\n ['path', { d: 'M4 8v11a2 2 0 0 0 2 2h2', key: 'tvwodi' }],\n ['path', { d: 'M20 8v11a2 2 0 0 1-2 2h-2', key: '1gkqxj' }],\n ['path', { d: 'm9 15 3-3 3 3', key: '1pd0qc' }],\n ['path', { d: 'M12 12v9', key: '192myk' }],\n]);\n\nexport default ArchiveRestore;\n","/**\n * Pure helpers for the WikiVaultPathPicker — kept separate from the\n * React component so probe-summary logic is unit-testable without\n * mounting a tree.\n *\n * Selection itself is delegated to `DirectoryPickerField`, which opens\n * the OS-native folder dialog (`osascript`, `powershell`, `zenity`/\n * `kdialog`/`yad`) via `/api/system/pick-directory`. This module owns\n * the post-selection validation surface: it translates `/api/fs/probe`\n * responses into severity-tagged banner lines.\n */\n\n/**\n * Human-readable label for a probe collision. The route returns a\n * structured `collision` code so the picker can map to localised text\n * and pick severity (error vs. warning); the original message from the\n * validator is surfaced as a tooltip when the code is `invalid`.\n */\nexport function describeCollision(\n collision: ProbeCollision | null,\n fallbackMessage: string | null,\n): { severity: \"error\" | \"warning\" | null; text: string } | null {\n if (collision === null) return null;\n switch (collision) {\n case \"primary_vault\":\n return {\n severity: \"error\",\n text: \"This path overlaps your primary memory vault. Pick a different directory.\",\n };\n case \"external_obsidian\":\n return {\n severity: \"error\",\n text: \"This path overlaps your external Obsidian vault. Pick a different directory.\",\n };\n case \"data_dir\":\n return {\n severity: \"error\",\n text: \"This path overlaps the daemon's data directory. Pick a different directory.\",\n };\n case \"other_wiki\":\n return {\n severity: \"error\",\n text: \"Another wiki workspace already lives here. Pick a different directory.\",\n };\n case \"system_path\":\n return {\n severity: \"error\",\n text: \"This path is under a system-managed location. Pick a directory inside your home folder.\",\n };\n case \"not_writable\":\n return {\n severity: \"warning\",\n text:\n \"This directory is not writable from the daemon. Aitne will fall back to the Obsidian CLI when it is running.\",\n };\n case \"invalid\":\n default:\n return {\n severity: \"error\",\n text: fallbackMessage ?? \"This path failed validation.\",\n };\n }\n}\n\n/**\n * Verdict shown next to the \"Use this directory\" button. Combines the\n * exists/writable/collision/existing-wiki signals from the probe into\n * one summary so the user does not have to read three banners.\n */\nexport function summariseProbe(probe: ProbeResult | null): ProbeSummary {\n if (!probe) {\n return { canConfirm: false, lines: [\"Pick a directory to validate.\"], severity: null };\n }\n if (!probe.ok) {\n return {\n canConfirm: false,\n lines: [probe.message ?? \"Path is invalid.\"],\n severity: \"error\",\n };\n }\n const lines: string[] = [];\n let severity: \"error\" | \"warning\" | \"info\" | null = null;\n if (probe.collision) {\n const desc = describeCollision(probe.collision, probe.collisionMessage);\n if (desc) {\n lines.push(desc.text);\n severity = desc.severity ?? severity;\n }\n }\n if (!probe.exists) {\n lines.push(\"Directory will be created on save.\");\n severity = severity ?? \"info\";\n } else if (!probe.isDir) {\n lines.push(\"Path exists but is not a directory.\");\n severity = \"error\";\n } else if (!probe.writable) {\n lines.push(\"Directory is not writable from the daemon (Obsidian CLI fallback applies).\");\n severity = severity ?? \"warning\";\n }\n if (probe.hasObsidianStructure) {\n lines.push(\"Detected an existing Obsidian vault (.obsidian directory present).\");\n severity = severity ?? \"info\";\n }\n if (probe.existingWiki) {\n lines.push(\n `Detected an existing LLM-Wiki layout (${probe.existingWiki.layers.join(\", \")}). You will be prompted to Adopt or Migrate after saving.`,\n );\n severity = severity ?? \"info\";\n }\n if (lines.length === 0) {\n lines.push(\"Directory is empty and writable. Ready to enable.\");\n severity = \"info\";\n }\n // `canConfirm` blocks the Use-this-directory button only on hard\n // errors: validation failed, exists-but-not-dir, or collision. A\n // warning (not_writable + Obsidian CLI fallback) still lets the user\n // proceed — the daemon resolves that case at runtime.\n const canConfirm = severity !== \"error\" && (probe.exists ? probe.isDir : true);\n return { canConfirm, lines, severity };\n}\n\nexport interface ProbeResult {\n ok: boolean;\n path: string;\n resolved?: string;\n exists: boolean;\n isDir: boolean;\n writable: boolean;\n collision: ProbeCollision | null;\n collisionMessage: string | null;\n hasObsidianStructure: boolean;\n existingWiki: {\n kind: string;\n layers: string[];\n taxonomyPresent: boolean;\n indexPresent: boolean;\n unexpectedSubdirectories: Array<{ layer: string; subdir: string }>;\n } | null;\n /** Populated when `ok` is false. */\n error?: string;\n message?: string;\n}\n\nexport interface ProbeSummary {\n canConfirm: boolean;\n lines: string[];\n severity: \"error\" | \"warning\" | \"info\" | null;\n}\n\nexport type ProbeCollision =\n | \"primary_vault\"\n | \"external_obsidian\"\n | \"data_dir\"\n | \"other_wiki\"\n | \"system_path\"\n | \"not_writable\"\n | \"invalid\";\n"],"names":[],"mappings":"wDCEA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,MAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,yBGQuB,CAAA,EAAA,EAAA,OAAA,EAAiB,IFAM,CAAA,YEAY,CAAA,8CACC,IAAK,IAAA,sBAChD,CAA2B,ADAgC,ADA9B,CCA8B,ADA9B,AEAF,CFAE,ACA8B,ACAhC,CFAE,AEAF,ADAgC,CCAhC,ADAgC,ADA9B,CEAF,ADAgC,ADA9B,CAAA,ACA8B,ACAhC,CAAA,ADAgC,ADA9B,CAAA,ACA8B,ACAhC,CDAgC,ADA9B,AEAF,CAAA,ADAgC,ADA9B,CEAF,ADAgC,ADA9B,CCA8B,ACAhC,AFAE,CEAF,ADAgC,ADA9B,CEAF,ADAgC,ADA9B,CEAF,ADAgC,ADA9B,CEAF,ADAgC,ADA9B,CCA8B,ADA9B,AEAF,CAAA,AFAE,ACA8B,CCAhC,ADAgC,ADA9B,CEAF,AFAE,ACA8B,CAAA,ACAhC,AFAE,CCA8B,ADA9B,AEAF,CDAgC,ACAhC,AFAE,CAAA,ACA8B,ACAhC,CAAA,ADAgC,ADA9B,gBEC1C,CAAA,AFAA,CEAA,AFAA,CEAA,AFAA,CEAA,AFAA,CEAA,AFAA,CEAQ,AFAA,CEAA,AFAA,mCEAuC,UAAU,CAAA,QACjD,CAAA,AAAE,EAAG,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAK,QAAA,CAAU,CAAA,CAAA,AAC9C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,AAAE,EAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAK,QAAA,CAAU,CAAA,CAC1C,CAAA,CAAA,AHdD,IAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,2BEQ8B,OAAQ,2DACoC,CAAA,CAAA,CAAA,CAAA,QAAK,CAAU,CAAA,CAAA,qEACd,CAAA,CAAA,CAAA,CAAA,AAAK,QAAA,CAAU,CAAA,GCFpF,EFAW,CEAX,CAAA,CAAA,CAAA,CAAA,OAAA,EFA4B,ECAI,CAAA,QDAQ,CAAA,AAC5C,CAAC,CEAA,ADAA,ADAA,CEAA,ADAA,ADAA,CEAA,ADAA,ADAA,CCAA,ADAA,AEAA,CDAA,ACAA,AFAA,CEAA,AFAA,ACAQ,CAAA,ACAA,AFAR,CEDuD,CAAA,CFC5C,CAAE,AEAH,AFAG,CEAH,AFAG,CEAH,ADAO,ADAJ,CCAI,ACAP,AFAO,CCAA,ADAM,CCAN,ADAM,CCAN,ADAM,CCAN,ADAM,CCAA,ADAA,CCAA,ACAQ,AFAR,CAAA,ACAA,ACAQ,CFAR,AAAI,AEAI,ADAR,CCAQ,ADAR,ADAS,CEAD,AFAC,CEAD,ADAA,ADAC,CAAA,CCAD,ACAA,CDAA,ADAC,AEAD,CFAK,ACAC,ACAN,IFAU,CCAI,ACAN,AFAE,CCAI,ACAN,AFAE,CAAI,CAAA,ACAA,GDAK,CEAE,AFAF,GAAK,oBAC7C,EAAA,4BAAgC,CEAF,ADAgC,ADA9B,CEAF,ADAgC,ADA9B,EAAK,CCAyB,CAAA,CAAA,CAAA,CAAA,CAAA,IDAf,CCAe,ADAf,CCAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,ADC9D,CCD8D,CAAA,ADC3D,CEA6B,AFAJ,ACDkC,CCC9B,AFAJ,CEAI,AFAJ,CAAA,AEAI,CFAJ,AEAI,CFAJ,AEAI,CAAA,AFAJ,CEAI,AFAJ,CAAA,AEAI,CAAA,AFAJ,CAAA,AEAI,CAAA,AFAJ,CEAI,AFAJ,CAAA,AEAI,CAAA,AFAJ,CEAI,AFAJ,CAAA,AEAI,CAAA,AFAJ,CAAA,AEAI,CAAA,AFAJ,CAAA,AEAI,CAAA,AFAJ,CEAI,AFAJ,CAAA,AEAI,CAAA,AFAJ,CEAI,AFAJ,CEAI,AFAJ,CAAK,CEAD,CAAA,CAAA,OFAW,CACvD,EDZD,IAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAcA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,ODjBA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OA+BO,SAAS,EAAoB,OAClC,CAAK,UACL,CAAQ,mBACR,CAAiB,aACjB,CAAW,UACX,CAAQ,IACR,CAAE,CAYH,EACC,IAAM,EAAU,EAAM,IAAI,GACpB,EAAa,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAwB,CACjD,SAAU,CAAC,WAAY,EAAQ,CAC/B,QAAS,EAAQ,MAAM,CAAG,EAI1B,UAAW,IACX,CADgB,KACT,GACP,QAAS,IACP,EAAA,GAAG,CAAC,GAAG,CAAc,YAAa,CAAE,OAAQ,CAAE,KAAM,CAAQ,CAAE,EAClE,GAOM,EAA4B,CAAA,EAAA,EAAA,OAAA,AAAO,EAAC,KACxC,GAAI,EAAW,IAAI,CAAE,OAAO,EAAW,IAAI,CAC3C,GAAI,EAAW,KAAK,CAAE,CACpB,IAAM,EAC6B,UAAjC,OAAO,EAAW,KAAK,CAAC,IAAI,EAA2C,OAA1B,EAAW,KAAK,CAAC,IAAI,CAC7D,EAAW,KAAK,CAAC,IAAI,CACtB,KACN,MAAO,CACL,GAAI,GACJ,KAAM,EACN,QAAQ,EACR,OAAO,EACP,UAAU,EACV,UAAW,KACX,iBAAkB,KAClB,qBAAsB,GACtB,aAAc,KACd,MAA8B,UAAvB,OAAO,GAAM,MAAqB,EAAK,KAAK,CAAG,iBACtD,QACE,AAAyB,iBAAlB,GAAM,QACT,EAAK,OAAO,CACZ,EAAW,KAAK,CAAC,OAAO,AAChC,CACF,CACA,OAAO,IACT,EAAG,CAAC,EAAW,IAAI,CAAE,EAAW,KAAK,CAAE,EAAQ,EAEzC,EAAwB,CAAA,EAAA,EAAA,OAAA,AAAO,EAAC,IAAM,CKhCvC,SAAS,AAAe,CAAyB,EACtD,GAAI,CAAC,EACH,KADU,CACH,CAAE,YAAY,EAAO,MAAO,CAAC,gCAAgC,CAAE,SAAU,IAAK,EAEvF,GAAI,CAAC,EAAM,EAAE,CACX,CADa,KACN,CACL,YAAY,EACZ,MAAO,CAAC,EAAM,OAAO,EAAI,mBAAmB,CAC5C,SAAU,OACZ,EAEF,IAAM,EAAkB,EAAE,CACtB,EAAgD,KACpD,GAAI,EAAM,SAAS,CAAE,CACnB,IAAM,EAjEH,AAiEU,SAjED,AACd,CAAgC,CAChC,CAA8B,EAE9B,GAAkB,OAAd,EAAoB,OAAO,KAC/B,OAAQ,GACN,IAAK,gBACH,MAAO,CACL,SAAU,QACV,KAAM,2EACR,CACF,KAAK,oBACH,MAAO,CACL,SAAU,QACV,KAAM,8EACR,CACF,KAAK,WACH,MAAO,CACL,SAAU,QACV,KAAM,6EACR,CACF,KAAK,aACH,MAAO,CACL,SAAU,QACV,KAAM,wEACR,CACF,KAAK,cACH,MAAO,CACL,SAAU,QACV,KAAM,yFACR,CACF,KAAK,eACH,MAAO,CACL,SAAU,UACV,KACE,8GACJ,CACF,KAAK,IAEH,MAAO,CACL,SAAU,QACV,KAAM,GAAmB,8BAC3B,CACJ,CACF,EAqBmC,EAAM,SAAS,CAAE,EAAM,gBAAgB,EAClE,IACF,EAAM,AADE,IACE,CAAC,EAAK,IAAI,EACpB,EAAW,EAAK,QAAQ,EAAI,EAEhC,CA8BA,OA7BK,EAAM,MAAM,CAGL,CAHO,CAGD,KAAK,CAGX,CAHa,CAGP,QAAQ,EAAE,CAC1B,EAAM,IAAI,CAAC,8EACX,EAAW,GAAY,YAJvB,EAAM,IAAI,CAAC,uCACX,EAAW,UAJX,EAAM,IAAI,CAAC,sCACX,EAAW,GAAY,QAQrB,EAAM,oBAAoB,EAAE,CAC9B,EAAM,IAAI,CAAC,sEACX,EAAW,GAAY,QAErB,EAAM,YAAY,EAAE,CACtB,EAAM,IAAI,CACR,CAAC,sCAAsC,EAAE,EAAM,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,yDAAyD,CAAC,EAE1I,EAAW,GAAY,QAEJ,GAAG,CAApB,EAAM,MAAM,GACd,EAAM,IAAI,CAAC,qDACX,EAAW,QAON,CAAE,WADuB,AAAb,WAAwB,IAAC,EAAM,MAAM,EAAG,EAAM,KAAK,AAAG,CAAI,EAAJ,KACpD,WAAO,CAAS,EACvC,ELlB6D,GAAQ,CAAC,EAAM,EAUpE,EAAuB,CAAA,EAAA,EAAA,MAAM,AAAN,EAAO,GACpC,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,EAAqB,OAAO,CAAG,CACjC,GAMA,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,IAAM,EAAK,EAAqB,OAAO,AACvC,AAAI,EAAC,IAAI,AACL,AAAmB,GAAG,GAAd,MAAM,CAChB,EAAG,GAAI,IAIL,AAAC,EAAW,SAAS,EAAK,EAAD,AAAY,OAAA,AAAO,EAAE,CAClD,EAAG,EAAS,GACd,EAAG,CAAC,EAAS,EAAS,EAAW,SAAS,CAAE,EAAW,OAAO,CAAC,EAE/D,IAAM,EAAc,EAAQ,MAAM,CAAG,GAAM,EAAD,CAAY,SAAS,EAAI,EAAW,OAAO,AAAP,EAO9E,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,oBAAoB,CAAA,CACnB,GAAI,EACJ,MAAO,EACP,SAAU,EACV,MAAM,6BACN,YAAY,2BACZ,YAAa,EACb,SAAU,IAEX,EAAW,UAAU,EACpB,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CACC,UAAU,wDACV,KAAK,SACL,YAAU,mBAEV,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAAC,UAAU,uBAAuB,cAAY,SAAS,sBAIlE,GAAe,EAAQ,QAAQ,EAC9B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QA5ByF,AA4BhF,CA3BpB,MAAO,QACP,QAAS,UACT,KAAM,MACR,CAwBuC,CAAC,EAAQ,QAAQ,CAAC,UACjD,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,sCACX,EAAQ,KAAK,CAAC,GAAG,CAAC,AAAC,GAClB,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,UAAe,GAAP,UAOvB,CCjJA,IAAA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAKA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAEA,IAAM,EAAoB,CACxB,kBACA,eACA,WACA,YACA,aACA,eACD,CAEK,EAA+D,CACnE,CAAE,IAAK,KAAM,MAAO,SAAU,EAC9B,CAAE,IAAK,KAAM,MAAO,UAAW,EAC/B,CAAE,IAAK,KAAM,MAAO,SAAU,EAC9B,CAAE,IAAK,KAAM,MAAO,mBAAoB,EACxC,CAAE,IAAK,KAAM,MAAO,mBAAoB,EACxC,CAAE,IAAK,KAAM,MAAO,kBAAmB,EACvC,CAAE,IAAK,KAAM,MAAO,wBAAyB,EAC7C,CAAE,IAAK,KAAM,MAAO,cAAe,EACnC,CAAE,IAAK,aAAc,MAAO,qBAAsB,EACnD,CAEK,EAAuB,qCA+B7B,SAAS,EAAQ,CAAwB,EACvC,MAAO,CACL,SAAU,EAAU,QAAQ,CAC5B,aAAc,EAAU,YAAY,CACpC,eAAgB,EAAU,cAAc,CACxC,oBAAqB,EAAU,mBAAmB,CAClD,cAAe,EAAU,aAAa,CACtC,sBAAuB,EAAU,qBAAqB,CACtD,oBAAqB,EAAU,mBAAmB,CAClD,gCAAiC,EAAU,+BAA+B,CAC1E,cAAe,EAAU,aAAa,CACtC,qBAAsB,EAAU,oBAAoB,AACtD,CACF,CAiBA,SAAS,EAAe,CAAc,SAChC,aAAiB,EAAA,QAAQ,EAAE,AACxB,OAD+B,MACd,AADoB,MACZ,CADmB,CACb,OAAO,CAAG,gBAClD,CAEA,SAAS,EAAgB,CAAkB,EACzC,GAAI,CAAC,EAAK,MAAO,IACjB,GAAI,CACF,IAAM,EAAI,IAAI,KAAK,GACnB,GAAI,OAAO,KAAK,CAAC,EAAE,OAAO,IAAK,OAAO,EACtC,OAAO,EAAE,cAAc,EACzB,CAAE,KAAM,CACN,OAAO,CACT,CACF,CAEA,SAAS,EAAkB,OACzB,CAAK,UACL,CAAQ,CAIT,EACC,IAAM,EAAU,EAAsB,IAAI,CACxC,AAAC,GAAQ,EAAI,GAAG,GAAK,GAAqB,eAAZ,EAAI,GAAG,EAEjC,CAAC,EAAc,EAAgB,CAAG,CAAA,EAAA,EAAA,QAAQ,AAAR,EAAwB,MAC1D,EAAO,IAAiB,EAAU,EAAQ,QAAnB,IAAmB,CAAY,CACtD,EACK,eAAT,GACG,EAAM,IAAI,GAAG,MAAM,CAAG,GACtB,CAAC,EAAqB,IAAI,CAAC,EAAM,IAAI,IAW1C,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CAAC,MAAO,EAAM,cAXA,AAAC,CAWc,GAVtC,AAAa,cAAc,CAAvB,EACF,EAAgB,eAGlB,EAAgB,MAChB,EAAS,GACX,YAKM,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,UACZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CAAA,KAEd,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,UACX,EAAsB,GAAG,CAAE,AAAD,GACzB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAgB,MAAO,EAAK,GAAG,UACvC,EAAK,KAAK,EADI,EAAK,GAAG,QAMrB,AAAT,kBACC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,MAAO,EACP,SAAU,AAAC,GAAU,EAAS,EAAM,MAAM,CAAC,KAAK,EAChD,YAAY,0BAEb,GACC,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,iCAAuB,yBACZ,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,UAAY,OAAI,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,YAAc,YAO9E,CAEA,SAAS,EAAW,MAAE,CAAI,CAAoB,EAC5C,GAAM,CAAC,EAAQ,EAAU,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,GAAC,GACrC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,QACR,KAAK,KACL,UAAU,mBACV,QAAS,UACP,GAAI,CACF,MAAM,UAAU,SAAS,CAAC,SAAS,CAAC,GACpC,GAAU,GACV,WAAW,IAAM,GAAU,GAAQ,KACrC,CAAE,KAAM,CAER,CACF,YAEA,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAK,UAAU,YACf,EAAS,SAAW,SAG3B,CAEA,SAAS,IACP,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,kDAAyC,SACvD,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,yDAA+C,sCACvB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,YAAc,sBAC9C,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,aAAe,mCAAiC,IAC/D,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,SAAW,MAAG,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,WAAa,MAAG,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,aAAe,uCAKvE,CA8SA,SAAS,EAAW,qBAClB,CAAmB,cACnB,CAAY,iBACZ,CAAe,cACf,CAAY,eACZ,CAAa,uBACb,CAAqB,uBACrB,CAAqB,kBACrB,CAAgB,kBAChB,CAAgB,CAWjB,EACC,MACE,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,IAAI,CAAA,WACH,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,UAAU,uBACpB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,UAAC,qBACX,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,wDAA+C,uFAOhE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sCAEb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,4EACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAS,UAAU,4BACpB,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,mCAA0B,aACxC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAQ,gBAAO,mBAExB,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,yCAAgC,+DAG7C,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAG,UAAU,oDACZ,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,WAAG,WAAQ,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,qBAAa,GAAuB,8BAChE,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,UAAG,qCACJ,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,UAAG,yDAEN,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,UAAU,UACV,QAAS,EACT,SAAU,YAET,EAAwB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAAC,UAAU,yBAA4B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,UAAU,YAAa,6BAM/G,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,4EACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,UAAU,4BACtB,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,mCAA0B,4BACxC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAQ,kBAAS,gBAE1B,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,yCAAgC,iGAI7C,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAG,UAAU,oDACZ,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,UAAG,sCACJ,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,UAAG,4DACJ,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,UAAG,kEAEN,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,MAAO,EACP,SAAU,EACV,kBAAmB,EACnB,YAAa,IAEf,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,UAAU,UACV,QAAQ,YACR,QAAS,EACT,SACE,CAAC,GACE,GACA,GAAc,cAAe,YAGjC,EAAwB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAAC,UAAU,yBAA4B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,UAAU,YAAa,8BAOnH,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,UACV,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,IAAI,CAAA,WACH,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,kBAAkB,CAAA,CAAC,UAAU,+DAC5B,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CAAC,UAAU,qBAAY,kCACjC,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,+CAAqC,2CACR,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,YAAc,iCAIhE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CAAC,UAAU,qCAEzB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,kBAAkB,CAAA,CAAC,UAAU,gBAC5B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,YAMb,CAMA,SAAS,EAAc,WACrB,CAAS,mBACT,CAAiB,eACjB,CAAa,cACb,CAAY,UACZ,CAAQ,CAOT,EACC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,IAAI,CAAA,WACH,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,UAAU,uBACpB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,mCACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,8DACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,CAAC,UAAU,iDAE3B,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,UAAC,0BACX,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,yDAA+C,iBAC5C,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAM,EAAU,IAAI,GAAQ,4CACxB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,YAAc,KAAE,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,aAAe,IAAE,IAChE,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,SAAW,mDAMzB,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAG,UAAU,8FACZ,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,6EAAoE,SAGlF,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,2BACZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAA4B,aAAnB,EAAU,IAAI,CAAkB,SAAW,gBACrC,aAAnB,EAAU,IAAI,CAAkB,WAAa,kBAIpD,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,6EAAoE,cAGlF,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,uDACX,EAAU,QAAQ,MAGvB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,6EAAoE,eAGlF,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,2BAAmB,EAAU,KAAK,CAAC,SAAS,MAE5D,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,6EAAoE,kBAGlF,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,2BACX,EAAgB,EAAU,aAAa,EAAI,EAAU,YAAY,UAKxE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sCACb,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CAAC,QAAS,EAAc,SAAU,YACtC,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAAC,UAAU,yBAEnB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAe,UAAU,YAC1B,sBAGJ,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,QAAS,EACT,SAAU,EACV,UAAU,qFAEV,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,UAAU,YAAY,4BAIlC,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,8CAAqC,sFAMxD,CAMA,SAAS,EAAsB,WAC7B,CAAS,cACT,CAAY,CAIb,EACC,IAAM,EAAgC,aAAnB,EAAU,IAAI,CACjC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,IAAI,CAAA,WACH,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,UAAU,uBACpB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,qFACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8CACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,UAAE,EAAU,IAAI,GAC1B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAS,EAAa,SAAW,gBACrC,EAAa,WAAa,aAE7B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAQ,gBAAQ,EAAU,QAAQ,MAE3C,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sCACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,mDACb,EAAU,QAAQ,GAErB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAW,KAAM,EAAU,QAAQ,SAGxC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,iCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,OAAO,CAAA,CAAA,EAAC,QAAQ,UAAU,KAAK,cACrC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAI,CAAA,CAAC,KAAK,iBAAQ,kBAErB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,OAAO,CAAA,CAAA,EAAC,QAAQ,UAAU,KAAK,cACrC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,OAAI,CAAA,CAAC,KAAK,2BACT,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAAC,UAAU,YAAY,iCAOzC,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAG,UAAU,0EACZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAK,MAAM,YAAY,MAAO,EAAU,KAAK,CAAC,QAAQ,GACvD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAK,MAAM,aAAa,MAAO,EAAU,KAAK,CAAC,SAAS,GACzD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAK,MAAM,UAAU,MAAO,EAAU,KAAK,CAAC,WAAW,GACxD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAK,MAAM,aAAa,MAAO,CAAA,EAAA,EAAA,cAAA,AAAc,EAAC,UAIvD,CAEA,SAAS,EAAK,CAAE,OAAK,OAAE,CAAK,CAA6C,EACvE,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,6EACX,IAEH,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,0DAAkD,MAGtE,CAMA,SAAS,EAAe,MAAE,CAAI,CAA0C,EACtE,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAS,EAAK,gBAAgB,CAAG,QAAU,iBAChD,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,oBACX,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,WAAO,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,kBAAoB,qBAAyB,IAAI,IAC7D,EAAK,aAAa,CAAC,OAAO,CAAC,GAAG,KAAG,EAAK,cAAc,CAAC,OAAO,CAAC,GAAI,IAAI,cAC3D,EAAK,WAAW,CAAC,OAAO,CAAC,GAAG,UAAQ,EAAK,QAAQ,CAAE,IAAI,WACxC,IAAlB,EAAK,QAAQ,CAAS,GAAK,IAAI,IAAE,IACzC,EAAK,gBAAgB,CAClB,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WAAE,cAAY,EAAK,YAAY,CAAC,OAAO,CAAC,GAAG,mDAC3C,CAAA,EAAA,EAAA,GAAA,EAAA,EAAA,QAAA,CAAA,UAAE,iEAES,mBAAhB,EAAK,MAAM,EAAyB,EAAK,OAAO,EAAI,EAAK,OAAO,CAAC,MAAM,CAAG,GACzE,CAAA,EAAA,EAAA,IAAA,EAAC,UAAA,CAAQ,UAAU,+CACjB,CAAA,EAAA,EAAA,IAAA,EAAC,UAAA,CAAQ,UAAU,2BAAiB,OAC7B,EAAK,OAAO,CAAC,MAAM,CAAC,kCAE3B,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,sCACX,EAAK,OAAO,CAAC,GAAG,CAAC,AAAC,GACjB,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,WACE,EAAK,IAAI,CAAC,MAAI,EAAK,eAAe,CAAC,cAAc,GAAG,UACpD,IAAI,IAAE,EAAK,SAAS,CAAC,cAAc,GAAG,YAFhC,EAAK,IAAI,UAUhC,CAMA,SAAS,EAAoB,OAC3B,CAAK,UACL,CAAQ,CAIT,EACC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,IAAI,CAAA,WACH,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,UAAU,uBACpB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,UAAC,YACX,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,8CAAqC,sFAKtD,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sCACb,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CACC,MAAM,mBACN,KAAK,mFAEL,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,MAAO,EAAM,QAAQ,CACrB,SAAU,AAAC,GAAS,EAAS,CAAE,GAAG,CAAK,CAAE,SAAU,CAAK,OAG5D,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CACC,MAAM,gBACN,KAAK,mFAEL,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,MAAO,EAAM,YAAY,CACzB,cAAe,AAAC,GACd,EAAS,CAAE,GAAG,CAAK,CAAE,aAAc,CAAmC,aAGxE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,UACZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CAAA,KAEd,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,aAAa,CAAA,WACZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,MAAM,oBAAW,aAC7B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,MAAM,kBAAS,mBAIjC,CAAA,EAAA,EAAA,IAAA,EAAC,GAAA,CACC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,oCAA0B,kBAExC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,8IACb,EAAM,cAAc,MAI3B,KACyB,WAAvB,EAAM,YAAY,CACd,wDACA,mDAGN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,KAAK,QACL,IAAK,EACL,IAAK,GACL,KAAM,EACN,MAAO,EAAM,cAAc,CAC3B,SAAU,AAAC,GACT,EAAS,CACP,GAAG,CAAK,CACR,eAAgB,KAAK,GAAG,CAAC,EAAG,KAAK,GAAG,CAAC,GAAI,OAAO,EAAM,MAAM,CAAC,KAAK,GAAK,GACzE,GAEF,aAAW,0BACX,UAAU,kIACV,SAAiC,WAAvB,EAAM,YAAY,GAE9B,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oEACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,MACN,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,MACN,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,kBAMlB,CAMA,SAAS,EAAmB,OAC1B,CAAK,UACL,CAAQ,aACR,CAAW,CAKZ,EACC,IAAM,EAAe,EAAM,aAAa,EAAI,EAAM,mBAAmB,CACrE,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,IAAI,CAAA,WACH,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,UAAU,uBACpB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,0DACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,UAAC,+BACX,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,yDAA+C,2FAE9B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,uBAAyB,2FAK/D,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAS,GAAgB,CAAC,EAAM,qBAAqB,CAAG,OAAS,gBACrE,AAAC,EAAM,aAAa,EAAK,EAAM,AAAP,mBAA0B,CAE/C,EAAM,qBAAqB,CACzB,YACA,UAHF,aAQV,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CACC,QAAS,EAAM,aAAa,CAC5B,SAAW,AAAD,GAAO,EAAS,CAAE,GAAG,CAAK,CAAE,cAAe,CAAE,GACvD,MAAM,2BACN,KAAK,gEAEP,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CACC,QAAS,EAAM,mBAAmB,CAClC,SAAU,AAAC,GAAM,EAAS,CAAE,GAAG,CAAK,CAAE,oBAAqB,CAAE,GAC7D,MAAM,6BACN,KAAK,oFACL,SAAU,CAAC,EAAM,aAAa,GAEhC,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CACC,QAAS,EAAM,qBAAqB,CACpC,SAAW,AAAD,GAAO,EAAS,CAAE,GAAG,CAAK,CAAE,sBAAuB,CAAE,GAC/D,MAAM,qCACN,KAAK,sHACL,SAAU,CAAC,EAAM,aAAa,GAEhC,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CACC,MAAM,qBACN,KAAK,8HAEL,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,KAAK,SACL,IAAK,EACL,IAAK,EACL,KAAK,OACL,MAAO,EAAM,mBAAmB,CAChC,SAAU,AAAC,GACT,EAAS,CACP,GAAG,CAAK,CACR,oBAAqB,KAAK,GAAG,CAAC,EAAG,KAAK,GAAG,CAAC,EAAG,OAAO,EAAM,MAAM,CAAC,KAAK,GAAK,GAC7E,GAEF,UAAU,eACV,SAAU,CAAC,EAAM,aAAa,KAIjC,GACC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,0FACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sCACb,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,WAAM,EAAY,OAAO,CAAC,oBAC3B,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,WAAM,EAAY,UAAU,CAAC,wBAC9B,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,WAAM,EAAY,YAAY,CAAC,oBAEjC,EAAY,cAAc,EACzB,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,mBAAS,kBAAgB,EAAgB,EAAY,cAAc,aAO9F,CAMA,SAAS,EAAwB,OAC/B,CAAK,UACL,CAAQ,YACR,CAAU,eACV,CAAa,CAMd,EACC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,IAAI,CAAA,WACH,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,UAAU,uBACpB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,UAAC,yBACX,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,+CAAqC,OAC5C,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,aAAe,uDAI/B,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sCACb,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CACC,MAAM,uCACN,KAAK,0HAEL,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,yCAAgC,MAChD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,KAAK,SACL,IAAK,EACL,KAAK,OACL,MAAO,EAAM,+BAA+B,CAC5C,SAAU,AAAC,GACT,EAAS,CACP,GAAG,CAAK,CACR,gCAAiC,OAAO,EAAM,MAAM,CAAC,KAAK,GAAK,CACjE,UAMP,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CACC,MAAM,iBACN,KAAK,yGAEL,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,MAAO,EAAM,aAAa,CAC1B,cAAe,AAAC,GACd,EAAS,CAAE,GAAG,CAAK,CAAE,cAAe,CAAoC,aAG1E,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,UACZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CAAA,KAEd,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,aAAa,CAAA,WACZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,MAAM,gBAAO,gCACzB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,MAAM,cAAK,sBACvB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,MAAM,eAAM,6CAM/B,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,yBACb,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CACC,QAAS,EAAM,oBAAoB,CACnC,SAAU,AAAC,GAAM,EAAS,CAAE,GAAG,CAAK,CAAE,qBAAsB,CAAE,GAC9D,MAAM,mCACN,KAAK,+IAOnB,CAMA,SAAS,IACP,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8BACb,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,kCAAwB,QAC9B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,oBAAsB,mCAAiC,IAClE,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,YAAc,uCAAqC,IACzD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,iBAAmB,QAAK,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,aAAe,sEAGrD,CAAA,EAAA,EAAA,IAAA,EAAC,UAAA,CAAQ,UAAU,oEACjB,CAAA,EAAA,EAAA,GAAA,EAAC,UAAA,CAAQ,UAAU,sDAA6C,wBAGhE,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAG,UAAU,kEACZ,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,UAAU,2BAAkB,WAAe,UAAQ,IAC3D,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,aAAe,2GAC2C,IAChE,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,yBAA2B,aAAU,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,aAAgB,IAAI,eAGvE,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,UAAU,2BAAkB,UAAc,mFAGpD,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,UAAU,2BAAkB,WAAe,yCAC3B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,cAAgB,sFAGhD,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,WAAG,+BAC0B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,UAAY,uDAO1D,CAMA,SAAS,EAAW,eAClB,CAAa,gBACb,CAAc,eACd,CAAa,WACb,CAAS,UACT,CAAQ,CAOT,EACC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,IAAI,CAAA,CAAC,UAAU,kDACd,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,UAAU,uBACpB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CAAC,UAAU,0CAAiC,gBACtD,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,+CAAqC,sBAC7B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAM,IAAqB,uDAKrD,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sCACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,gDACb,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,iDAAwC,YACtD,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,8CAAqC,oEAGlD,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KACL,UAAU,OACV,QAAS,EACT,SAAU,YAET,EAAiB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAAC,UAAU,yBAA4B,KAAK,0BAI1E,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,wEACb,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,gEAAuD,wBACrE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,8CAAqC,iHAIlD,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KACL,UAAU,gFACV,QAAS,EACT,SAAU,YAET,EAAgB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAAC,UAAU,yBAA4B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,UAAU,YAAa,oBAO3G,CAMA,SAAS,EAAQ,QACf,CAAM,QACN,CAAM,WACN,CAAS,CAKV,EACC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,iKACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,mCAA0B,8BACvC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,uBACb,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CAAC,QAAQ,UAAU,KAAK,KAAK,QAAS,EAAW,SAAU,YAChE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CAAC,UAAU,YAAY,aAGnC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CAAC,KAAK,KAAK,QAAS,EAAQ,SAAU,YAC1C,EAAS,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAAC,UAAU,yBAA4B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IAAI,CAAA,CAAC,UAAU,YAAa,uBAMhG,CAMA,SAAS,GAAM,OACb,CAAK,CACL,MAAI,UACJ,CAAQ,CAKT,EACC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,wBACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,+CAAuC,IACnD,EACA,GAAQ,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,yCAAiC,MAG7D,CAEA,SAAS,GAAO,SACd,CAAO,UACP,CAAQ,OACR,CAAK,MACL,CAAI,UACJ,CAAQ,CAOT,EACC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CACC,UAAW,CAAC,mEAAmE,EAC7E,EAAW,aAAe,mCAAA,CAC1B,WAEF,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,KAAK,WACL,UAAU,SACV,QAAS,EACT,SAAU,AAAC,GAAU,EAAS,EAAM,MAAM,CAAC,OAAO,EAClD,SAAU,IAEZ,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,wBACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,uCAA+B,IAC3C,GAAQ,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,yCAAiC,SAI/D,kBA7jCe,SAAS,EACtB,IAAM,EAAc,CAAA,EAAA,EAAA,cAAA,AAAc,IAC5B,CAAE,OAAK,WAAE,CAAS,CAAE,CAAG,CAAA,EAAA,EAAA,aAAA,AAAa,IACpC,MAAE,CAAI,WAAE,CAAS,OAAE,CAAK,CAAE,CAAG,CAAA,EAAA,EAAA,QAAQ,AAAR,EAAS,CAC1C,SAAU,CAAC,kBAAkB,CAC7B,QAAS,IAAM,EAAA,GAAG,CAAC,GAAG,CAAyB,mBACjD,GACM,EAAkB,GAAM,WAAW,KAAK,AAAC,GAAS,EAAK,MAAM,GAAK,KAClE,EAAoB,AAAC,EAEvB,KADC,GAAM,WAAW,KAAM,AAAD,GAAU,CAAC,EAAK,MAAM,GAAK,KAEhD,EAAY,GAAmB,EAE/B,CAAC,EAAO,EAAS,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAmB,MAC/C,CAAC,EAAc,EAAgB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,IAC3C,CAAC,EAAsB,EAAwB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAE9D,MACI,CAAC,EAAc,EAAgB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,GAAC,GAEjD,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACJ,GAAW,EAAS,EAAQ,GAElC,EAAG,CAAC,GAAW,GAAG,EAElB,IAAM,EAAW,CAAA,EAAA,EAAA,OAAA,AAAO,EAAC,IAAO,EAAY,EAAQ,GAAa,KAAO,CAAC,EAAU,EAC7E,EAAU,CAAC,CAAC,AAAC,IAAS,IAtJ1B,EAAE,MAsJoC,CAAC,CAtJ7B,GAAK,EAAE,QAAQ,EACtB,EAAE,YAAY,GAAK,EAAE,YAAY,EACjC,EAAE,cAAc,GAAK,EAAE,cAAc,EACrC,EAAE,mBAAmB,GAAK,EAAE,mBAAmB,EAC/C,EAAE,aAAa,GAAK,EAAE,aAAa,EACnC,AAiJgD,EAjJ9C,qBAAqB,GAAK,EAAE,qBAAqB,EACnD,EAAE,mBAAmB,GAAK,EAAE,mBAAmB,EAC/C,EAAE,+BAA+B,GAAK,AA+IiB,EA/If,+BAA+B,EACvE,EAAE,aAAa,GAAK,EAAE,aAAa,EACnC,EAAE,oBAAoB,GAAK,EAAE,oBAAA,AAAoB,CA6IM,CAAS,CAE/D,EAAW,CAAA,EAAA,EAAA,QAAQ,AAAR,EAAS,CACxB,SAAU,CAAC,gBAAiB,GAAiB,KAAK,CAClD,QAAS,CAAC,CAAC,EACX,QAAS,IACP,EAAA,GAAG,CAAC,GAAG,CAAmB,CAAC,MAAM,EAAE,EAAiB,IAAI,CAAC,SAAS,CAAC,CAAE,CACnE,QAAS,CAAE,gBAAiB,cAAe,CAC7C,EACJ,GAEM,EAAe,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,CAC/B,WAAY,SACV,AAAI,AAAC,GAAc,EACZ,EAAA,GADmB,AAChB,CAAC,EADO,GACF,CACd,CAAC,iBAAiB,EAAE,EAAU,IAAI,CAAA,CAAE,CACpC,GAH+B,KAMnC,UAAW,UACT,MAAM,EAAY,iBAAiB,CAAC,CAAE,SAAU,CAAC,kBAAkB,AAAC,GACpE,EAAU,UAAW,sBACvB,EACA,QAAS,AAAC,GAAQ,EAAU,QAAS,EAAe,GACtD,GAEM,EAAyB,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,CACzC,WAAY,IACV,EAAA,GAAG,CAAC,IAAI,CAA+B,mBAAoB,CACzD,KAAM,UACR,GACF,UAAW,UACT,MAAM,EAAY,iBAAiB,CAAC,CAAE,SAAU,CAAC,kBAAkB,AAAC,GACpE,EAAU,UAAW,wBACvB,EACA,QAAS,AAAC,GAAQ,EAAU,QAAS,EAAe,GACtD,GAEM,EAAyB,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,CACzC,WAAY,UACV,IAAM,EAAS,MAAM,EAAA,GAAG,CAAC,IAAI,CAM1B,yBAA0B,CAAE,SAAU,CAAa,GACtD,GAAI,CAAC,EAAO,EAAE,CACZ,CADc,KACR,IAAI,EAAA,QAAQ,CAAC,IAAK,CACtB,QAAS,EAAO,OAAO,EAAI,kCAC7B,GAEF,OAAO,EAAA,GAAG,CAAC,IAAI,CAA+B,mBAAoB,CAChE,KAAM,WACN,SAAU,EAAO,UAAU,CAAC,YAAY,EAAI,CAC9C,EACF,EACA,UAAW,UACT,MAAM,EAAY,iBAAiB,CAAC,CAAE,SAAU,CAAC,kBAAkB,AAAC,GACpE,EAAU,UAAW,wBACvB,EACA,QAAS,AAAC,GAAQ,EAAU,QAAS,EAAe,GACtD,GAEM,EAAqB,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,CACrC,WAAY,KACV,GAAI,CAAC,EAAW,MAAM,AAAI,MAAM,+BAChC,OAAO,EAAA,GAAG,CAAC,KAAK,CACd,CAAC,iBAAiB,EAAE,EAAU,IAAI,CAAA,CAAE,CACpC,CAAE,QAAQ,CAAK,EAEnB,EACA,UAAW,UACT,MAAM,EAAY,iBAAiB,CAAC,CAAE,SAAU,CAAC,kBAAkB,AAAC,GACpE,EAAU,UAAW,oBACvB,EACA,QAAS,AAAC,GAAQ,EAAU,QAAS,EAAe,GACtD,GAEM,EAAkB,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,CAClC,WAAY,IAAM,EAAA,GAAG,CAAC,IAAI,CAAe,CAAC,iBAAiB,EAAE,GAAW,KAAK,QAAQ,CAAC,EACtF,UAAW,UACT,MAAM,EAAY,iBAAiB,CAAC,CAAE,SAAU,CAAC,kBAAkB,AAAC,GACpE,EAAU,UAAW,gBACvB,EACA,QAAS,AAAC,GAAQ,EAAU,QAAS,EAAe,GACtD,GAEM,EAAiB,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,CACjC,WAAY,IAAM,EAAA,GAAG,CAAC,MAAM,CAC1B,CAAC,iBAAiB,EAAE,GAAW,KAAA,CAAM,EAEvC,UAAW,UACT,MAAM,EAAY,iBAAiB,CAAC,CAAE,SAAU,CAAC,kBAAkB,AAAC,GACpE,EAAU,UAAW,mDACvB,EACA,QAAS,AAAC,GAAQ,EAAU,QAAS,EAAe,GACtD,GAEA,GAAI,EACF,MACE,CAAA,EAFW,AAEX,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IAAI,CAAA,UACH,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sEACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAAC,UAAU,yBAAyB,yBAOtD,GAAI,EACF,KADS,CAEP,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAQ,iBACZ,aAAiB,MAAQ,EAAM,OAAO,CAAG,qCAOlD,GAAI,CAAC,EACH,MACE,CAAA,EAFY,AAEZ,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,CAAC,MAAO,IACtB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,oBAAqB,GAAM,oBAC3B,aAAc,EACd,gBAAiB,EACjB,aAAc,EACd,cAAe,CAAC,EAAO,IAAY,EAAwB,GAC3D,sBAAuB,EAAuB,SAAS,CACvD,sBAAuB,EAAuB,SAAS,CACvD,iBAAkB,IAAM,EAAuB,MAAM,GACrD,iBAAkB,IAAM,EAAuB,MAAM,QAO7D,GAAI,CAAC,EAAU,MAAM,CACnB,CADqB,KAEnB,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,CAAC,MAAO,IACtB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,UAAW,EACX,kBAAmB,EAAmB,SAAS,CAC/C,cAAe,EAAe,SAAS,CACvC,aAAc,IAAM,EAAmB,MAAM,GAC7C,SAAU,KAEN,OAAO,OAAO,CACZ,uHAEF,AACA,EAAe,MAAM,EAEzB,OAOR,GAAI,CAAC,EAAO,OAAO,KAEnB,IAAM,GAAa,AAAmB,eAAT,IAAI,CAC3B,GAAgB,KAAsC,IAAxB,EAAU,SAAS,CACjD,GAAoB,EAAU,WAAW,CAAC,MAAM,CACpD,CAAC,EAAK,IAAQ,EAAM,OAAO,EAAI,YAAY,EAAI,GAC/C,GAGF,MACE,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,CAAC,MAAO,IAEtB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,UAAW,EACX,aAAc,KAGf,EAAS,IAAI,EAAE,UAAY,EAAS,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAG,GAC5D,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAe,KAAM,EAAS,IAAI,CAAC,QAAQ,GAG9C,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAoB,MAAO,EAAO,SAAU,IAE7C,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,MAAO,EACP,SAAU,EACV,YAAa,EAAU,WAAW,GAGpC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,MAAO,EACP,SAAU,EACV,WAAY,GACZ,cAAe,KAGjB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,sBAAsB,CAAA,CACrB,QAAS,EACT,SAAU,CAAC,YAAY,CACvB,YAAa,EACb,MAAM,oBACN,YAAY,mFAGd,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CAAC,KAAM,EAAc,aAAc,WAC7C,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,IAAI,CAAA,WACH,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,kBAAkB,CAAA,CAAC,UAAU,+DAC5B,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,UAAC,aACX,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,8CAAqC,0DAIpD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CACV,UAAW,CAAC,mDAAmD,EAAE,EAAe,aAAe,GAAA,CAAI,MAGvG,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,kBAAkB,CAAA,CAAC,UAAU,gBAC5B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,UAKP,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,cAAe,EAAU,IAAI,CAC7B,eAAgB,EAAgB,SAAS,CACzC,cAAe,EAAe,SAAS,CACvC,UAAW,KAEP,OAAO,OAAO,CACZ,sHAEF,AACA,EAAgB,MAAM,EAE1B,EACA,SAAU,KAEN,OAAO,OAAO,CACZ,8HAEF,AACA,EAAe,MAAM,EAEzB,IAGD,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,OAAQ,EAAa,SAAS,CAC9B,OAAQ,IAAM,EAAa,MAAM,GACjC,UAAW,IAAM,EAAS,OAKpC","ignoreList":[2,3,4]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[37118,a=>{"use strict";var b=a.i(39752),c=a.i(34542),d=a.i(82508);a.i(70010);var e=a.i(85476),f=a.i(57988),g=a.i(45787),h=a.i(92241),i=a.i(21218),j=a.i(8212),k=a.i(47696),l=a.i(59974),m=a.i(54150),n=a.i(81130);let o=/^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})?$/,p=[{tag:"en",label:"English"},{tag:"ja",label:"日本語 (Japanese)"},{tag:"zh",label:"中文 (Chinese)"},{tag:"es",label:"Español (Spanish)"},{tag:"fr",label:"Français (French)"},{tag:"de",label:"Deutsch (German)"},{tag:"pt",label:"Português (Portuguese)"},{tag:"ko",label:"한국어 (Korean)"},{tag:"__custom__",label:"Other (enter BCP-47 tag…)"}],q=new Set(p.filter(a=>"__custom__"!==a.tag).map(a=>a.tag)),r=(0,a.i(5423).default)("SkipForward",[["polygon",{points:"5 4 15 12 5 20 5 4",key:"16p6eg"}],["line",{x1:"19",x2:"19",y1:"5",y2:"19",key:"futhcm"}]]);function s({title:a,description:c,children:d,onNext:e,onBack:h,skipLabel:j="Set Up Later",nextLabel:k="Next",nextDisabled:l=!1,hideNav:m=!1,maxWidth:n}){return(0,b.jsxs)("div",{className:`mx-auto ${n??"max-w-lg"} space-y-6 py-8`,children:[(0,b.jsxs)("div",{className:"space-y-2 text-center",children:[(0,b.jsx)("h2",{className:"text-xl font-semibold",children:a}),c&&(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:c})]}),d,!m&&(0,b.jsxs)("div",{className:"flex justify-between pt-4",children:[(0,b.jsxs)("div",{className:"flex gap-2",children:[h?(0,b.jsxs)(i.Button,{variant:"ghost",onClick:h,className:"gap-2 text-muted-foreground",children:[(0,b.jsx)(f.ArrowLeft,{className:"h-4 w-4"}),"Back"]}):null,j?(0,b.jsxs)(i.Button,{variant:"ghost",onClick:e,className:"gap-2 text-muted-foreground",children:[(0,b.jsx)(r,{className:"h-4 w-4"}),j]}):null,h||j?null:(0,b.jsx)("div",{})]}),(0,b.jsxs)(i.Button,{onClick:e,className:"gap-2",disabled:l,children:[k,(0,b.jsx)(g.ArrowRight,{className:"h-4 w-4"})]})]})]})}function t({agentDisplayName:a,onAgentDisplayNameChange:d,onNext:e}){let{data:f}=(0,m.useConfig)(),r=(0,n.useQueryClient)(),[u,v]=(0,c.useState)("en"),[w,x]=(0,c.useState)(""),[y,z]=(0,c.useState)(!1),[A,B]=(0,c.useState)(null),C=(0,c.useRef)(!1);(0,c.useEffect)(()=>{var b;if(C.current||!f)return;C.current=!0;let c="string"!=typeof(b=f.primaryLanguage)||0===b.length?{primary:"en",custom:""}:q.has(b)?{primary:b,custom:""}:{primary:"__custom__",custom:b};v(c.primary),x(c.custom),"string"==typeof f.agentDisplayName&&f.agentDisplayName.length>0&&0===a.length&&d(f.agentDisplayName)},[f,a,d]);let D="__custom__"===u?w.trim():u,E=function(a,b){if("__custom__"!==a)return!1;let c=b.trim();return 0!==c.length&&!o.test(c)}(u,w),F=function(a){if(a.saving)return!1;let b=a.agentDisplayName.trim();return 0!==b.length&&!(b.length>40)&&0!==a.resolvedLanguage.length&&!!o.test(a.resolvedLanguage)}({agentDisplayName:a,resolvedLanguage:D,saving:y}),G=async()=>{if(F){z(!0),B(null);try{var b;await l.api.patch("/config",{agentDisplayName:(b={agentDisplayName:a,resolvedLanguage:D}).agentDisplayName.trim(),primaryLanguage:b.resolvedLanguage}),await r.invalidateQueries({queryKey:["config"]}),e()}catch(a){if(a instanceof l.ApiError){let b=a.body;B(b?.message??a.message??"Failed to save basics")}else B(a instanceof Error?a.message:"Failed to save basics")}finally{z(!1)}}};return(0,b.jsxs)(s,{title:"Basics",description:"Tell your agent what to call itself and which language to think in.",onNext:e,hideNav:!0,children:[(0,b.jsxs)("div",{className:"w-full max-w-sm mx-auto space-y-6 rounded-xl border border-border bg-card p-5 text-left",children:[(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)("label",{htmlFor:"agent-name",className:"text-sm font-medium text-foreground",children:"Agent name"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:"Shown in the dashboard and prepended to outbound messages."}),(0,b.jsx)(j.Input,{id:"agent-name",value:a,onChange:a=>d(a.target.value),placeholder:"Aitne",maxLength:40})]}),(0,b.jsxs)("div",{className:"space-y-2 border-t border-border pt-4",children:[(0,b.jsx)("label",{className:"text-sm font-medium text-foreground",children:"Primary language"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:"Controls user-facing prose (profile, daily journal, weekly / monthly reviews). System files stay in English."}),(0,b.jsxs)(k.Select,{value:u,onValueChange:v,children:[(0,b.jsx)(k.SelectTrigger,{children:(0,b.jsx)(k.SelectValue,{})}),(0,b.jsx)(k.SelectContent,{children:p.map(a=>(0,b.jsx)(k.SelectItem,{value:a.tag,children:a.label},a.tag))})]}),"__custom__"===u&&(0,b.jsx)(j.Input,{value:w,onChange:a=>x(a.target.value),placeholder:"e.g. zh-Hans",className:"mt-2"}),E&&(0,b.jsxs)("p",{className:"text-xs text-destructive",children:["Use a BCP-47 tag like ",(0,b.jsx)("code",{children:"en-US"})," or ",(0,b.jsx)("code",{children:"zh-Hans"}),"."]})]})]}),A&&(0,b.jsx)("p",{className:"text-sm text-red-600 dark:text-red-400 text-center",children:A}),(0,b.jsx)("div",{className:"flex justify-center gap-3 pt-4",children:(0,b.jsx)(i.Button,{size:"lg",onClick:G,disabled:!F,className:"gap-2",children:y?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(h.Loader2,{className:"h-4 w-4 animate-spin"}),"Saving…"]}):(0,b.jsxs)(b.Fragment,{children:["Continue",(0,b.jsx)(g.ArrowRight,{className:"h-4 w-4"})]})})})]})}var u=a.i(19512),v=a.i(91534),w=a.i(48558),x=a.i(66135);function y({onNext:a,onBack:c,pendingVaultMode:d,onPendingVaultModeChange:e,pendingVaultPath:g,onPendingVaultPathChange:h}){var j,k;let l,{data:n}=(0,m.useConfig)(),o=n?.contextDir??"",p="obsidian"===d?0===(l=(j={path:g,dataDir:o}).path.trim()).length?"empty":(0,x.isClientAbsolutePath)(l)?j.dataDir.length>0&&(0,x.isClientPathInsideOrEqual)(j.dataDir,l)?"overlaps_data_dir":null:"not_absolute":null,q=!(k={vaultMode:d,pathIssue:p,saving:!1}).saving&&("plain"===k.vaultMode||null===k.pathIssue);return(0,b.jsxs)(s,{title:"Vault",description:"Where should your agent store its memory? Obsidian users can pick an existing vault.",onNext:a,hideNav:!0,children:[(0,b.jsxs)("div",{className:"w-full max-w-xl mx-auto space-y-5 rounded-xl border border-border bg-card p-5 text-left",children:[(0,b.jsx)("div",{className:"grid grid-cols-1 gap-2",children:["plain","obsidian"].map(a=>(0,b.jsxs)("button",{type:"button",onClick:()=>e(a),className:(0,w.cn)("rounded-md border px-3 py-2 text-left text-sm transition-colors",d===a?"border-primary bg-primary/10 text-foreground":"border-border bg-background text-muted-foreground hover:border-primary/50"),children:[(0,b.jsx)("span",{className:"block font-medium",children:"plain"===a?"Plain markdown":"Obsidian"}),(0,b.jsx)("span",{className:"block text-xs text-muted-foreground",children:"plain"===a?"Stored at ~/.personal-agent/context. Only this app reads + writes.":"Use an existing Obsidian vault as the agent's working directory."})]},a))}),"obsidian"===d&&(0,b.jsxs)("div",{className:"space-y-2 border-t border-border pt-4",children:[(0,b.jsx)("label",{htmlFor:"primary-vault-path",className:"text-sm font-medium text-foreground",children:"Vault path"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:"Pick an existing folder. Cloud-sync directories (iCloud, Dropbox, OneDrive, Google Drive) work; local SSDs are faster. The folder stays untouched until you reach the final step."}),(0,b.jsx)(v.DirectoryPickerField,{id:"primary-vault-path",value:g,onChange:h,title:"Choose primary vault directory",placeholder:"Choose a folder for the primary vault",defaultPath:n?.primaryVaultPath||void 0}),p&&"empty"!==p&&(0,b.jsx)("p",{className:"text-xs text-destructive",children:function(a){switch(a){case"empty":return"Pick a directory for the agent's primary vault.";case"not_absolute":return"Use an absolute path (for example `/Users/me/Vault`, `~/Vault`, or `C:\\Vault`).";case"overlaps_data_dir":return"Path overlaps the agent's data directory; choose a separate location."}}(p)})]})]}),(0,b.jsxs)("div",{className:"flex justify-center gap-3 pt-4",children:[c&&(0,b.jsxs)(i.Button,{variant:"ghost",onClick:c,className:"gap-2",children:[(0,b.jsx)(f.ArrowLeft,{className:"h-4 w-4"}),"Back"]}),(0,b.jsxs)(i.Button,{size:"lg",onClick:a,disabled:!q,className:"gap-2",children:[(0,b.jsx)(u.FolderSymlink,{className:"h-4 w-4"}),"Continue"]})]})]})}var z=a.i(32307),A=a.i(78019),B=a.i(50891),C=a.i(26206),D=a.i(57216),E=a.i(40091),F=a.i(74794),G=a.i(74358),H=a.i(89021),I=a.i(34549),J=a.i(81831),K=a.i(16611);let L=["claude","codex","gemini"];function M({onNext:a,onBack:d}){let{data:e,refetch:j}=(0,F.useBackends)(),k=(0,n.useQueryClient)(),[m,o]=(0,c.useState)("claude"),[p,q]=(0,c.useState)("safe"),[r,t]=(0,c.useState)(K.EMPTY_OVERRIDES),[u,v]=(0,c.useState)(!1),[w,x]=(0,c.useState)(!1),[y,z]=(0,c.useState)(null),[A,B]=(0,c.useState)(null),[C,D]=(0,c.useState)({claude:{status:"idle"},codex:{status:"idle"},gemini:{status:"idle"}}),O=(0,c.useCallback)(a=>{o(a)},[]),P=(0,c.useCallback)(async a=>{D(b=>({...b,[a]:{status:"checking"}}));try{let b=await l.api.post(`/backends/${a}/verify-install`);if(await j(),b.ok)D(c=>({...c,[a]:{status:"ok",version:b.version}}));else{let c=b.cliInstalled?b.timedOut?`${b.cliCommand} --version timed out`:b.stderr.trim()||b.stdout.trim()||"CLI failed to run":`${b.cliCommand} not found on PATH`;D(b=>({...b,[a]:{status:"error",error:c}}))}}catch(b){D(c=>({...c,[a]:{status:"error",error:b instanceof Error?b.message:"Verify install failed"}}))}},[j]),Q=(0,I.isContinueEligible)({mainBackend:m});async function R(){if(m){if(null!==A){B(null),a();return}x(!0),z(null);try{let a=await l.api.put("/backends/main",{backendId:m});await k.invalidateQueries({queryKey:["backends"]}),await k.invalidateQueries({queryKey:["integrations"]}),await k.invalidateQueries({queryKey:["health"]}),await k.invalidateQueries({queryKey:["agent-actions","native_unbound"]});let b=(0,K.buildSetupModePayload)(p,r);b&&(await l.api.post("/setup/mode",b),await k.invalidateQueries({queryKey:["config"]}));let c=a?.nativeUnbound??[];if(c.length>0){let a=c.map(a=>a.key).join(", ");B(`${c.length} native integration${1===c.length?"":"s"} (${a}) were bound to a different backend and are now disabled. Re-configure them on /settings/integrations after the wizard completes.`),x(!1);return}}catch(a){z(a instanceof l.ApiError||a instanceof Error?a.message:"Failed to apply default presets"),x(!1);return}a()}}return(0,b.jsxs)(s,{title:"AI Backend",description:"Pick the main backend, install its CLI, and (optionally) save a provider API key. You can skip the key setup and configure it later from Settings → Backends.",onNext:a,hideNav:!0,maxWidth:"max-w-4xl",children:[(0,b.jsx)(J.SubscriptionAuthWarning,{}),(0,b.jsxs)("div",{className:"space-y-4",children:[L.map(a=>{let c=e?.backends.find(b=>b.id===a);return(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)(H.BackendCard,{backendId:a,mode:"wizard",isMain:m===a,authStatus:c?.authStatus??"unknown",authStatusDetail:c?.authDetail??null,authFirstExpiredAt:c?.authFirstExpiredAt??null,authLastSuccessAt:c?.authLastSuccessAt??null,authNotificationCount:c?.authNotificationCount??0,cliInstalled:c?.cliInstalled??!0,enabled:c?.enabled??!0,webSearchEnabled:c?.webSearchEnabled??!1,webSearchSupported:c?.webSearchSupported??!1,permissionMode:null,installCheck:C[a],onCliInstalled:()=>{j()},onVerifyInstall:()=>{P(a)}}),(0,b.jsx)(G.BackendApiKeyPanel,{backendId:a})]},a)}),(0,b.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-4",children:[(0,b.jsx)("h3",{className:"text-sm font-semibold text-foreground",children:"Main backend"}),(0,b.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:"The main backend runs every configurable process by default."}),(0,b.jsx)("div",{className:"mt-3 flex flex-wrap gap-3",children:L.map(a=>{let c=m===a;return(0,b.jsxs)("label",{className:`flex flex-1 min-w-[180px] items-start gap-2 rounded-md border px-3 py-2 text-sm transition-colors ${c?"border-primary bg-primary/10":"border-border hover:border-foreground/30"}`,children:[(0,b.jsx)("input",{type:"radio",name:"main-backend",className:"mt-1",checked:c,onChange:()=>O(a)}),(0,b.jsx)("span",{className:"font-medium",children:E.BACKEND_PROVIDER_SHORT[a]})]},a)})})]})]}),(0,b.jsx)(N,{topMode:p,overrides:r,advancedOpen:u,onTopModeChange:q,onOverridesChange:t,onAdvancedOpenChange:v}),y&&(0,b.jsx)("p",{className:"text-sm text-destructive text-center",children:y}),A&&(0,b.jsx)("p",{className:"rounded-md border border-amber-300/60 bg-amber-50/60 px-3 py-2 text-xs text-amber-900 dark:border-amber-700/50 dark:bg-amber-950/30 dark:text-amber-100",role:"status",children:A}),(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 pt-2",children:[d?(0,b.jsxs)(i.Button,{variant:"ghost",onClick:d,className:"gap-2",children:[(0,b.jsx)(f.ArrowLeft,{className:"h-4 w-4"}),"Back"]}):(0,b.jsx)("div",{}),(0,b.jsx)(i.Button,{onClick:()=>void R(),disabled:!Q||w,children:w?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(h.Loader2,{className:"mr-2 h-4 w-4 animate-spin"}),"Applying defaults…"]}):A?(0,b.jsxs)(b.Fragment,{children:["Acknowledge & continue ",(0,b.jsx)(g.ArrowRight,{className:"ml-2 h-4 w-4"})]}):(0,b.jsxs)(b.Fragment,{children:["Next ",(0,b.jsx)(g.ArrowRight,{className:"ml-2 h-4 w-4"})]})})]})]})}function N({topMode:a,overrides:c,advancedOpen:d,onTopModeChange:e,onOverridesChange:f,onAdvancedOpenChange:g}){let h=(0,K.hasDivergentOverride)(a,c);return(0,b.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-4 space-y-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"text-sm font-semibold text-foreground",children:"Execution permissions"}),(0,b.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:"Pick how freely the agent may run shell, file, and tool commands. Dangerous operations — recursive deletes, privilege escalation, and secret-file reads — remain blocked in both modes."})]}),(0,b.jsxs)("div",{className:"grid gap-2 sm:grid-cols-2",children:[(0,b.jsx)(O,{icon:(0,b.jsx)(B.ShieldCheck,{className:"h-4 w-4"}),title:"Safe",badge:"Recommended",selected:"safe"===a,onSelect:()=>e("safe"),children:"Strict permission checks, asks for confirmation before side-effectful actions."}),(0,b.jsx)(O,{icon:(0,b.jsx)(C.Unlock,{className:"h-4 w-4"}),title:"Allow",selected:"allow"===a,onSelect:()=>e("allow"),children:"Runs with the skills, plugins, and MCP servers installed in your CLI harness."})]}),(0,b.jsxs)(D.Collapsible,{open:d,onOpenChange:g,children:[(0,b.jsx)(D.CollapsibleTrigger,{asChild:!0,children:(0,b.jsxs)("button",{type:"button",className:"flex w-full items-center justify-between rounded-md border border-border bg-background px-3 py-2 text-left text-xs text-muted-foreground hover:bg-muted/40",children:[(0,b.jsxs)("span",{className:"flex items-center gap-2",children:[(0,b.jsx)(A.ChevronDown,{className:(0,w.cn)("h-3.5 w-3.5 transition-transform",d&&"rotate-180")}),"Per-backend overrides",h&&(0,b.jsx)("span",{className:"rounded bg-amber-500/15 px-1.5 py-0.5 text-[10px] font-medium text-amber-700 dark:text-amber-300",children:"mixed"})]}),(0,b.jsx)("span",{className:"text-[11px]",children:d?"Hide":"Show"})]})}),(0,b.jsx)(D.CollapsibleContent,{className:"mt-2 space-y-2 rounded-md border border-border bg-background p-3",children:["claude","codex","gemini"].map(d=>(0,b.jsx)(P,{backend:d,topMode:a,override:c[d],onChange:a=>f(b=>({...b,[d]:a}))},d))})]})]})}function O({icon:a,title:c,badge:d,selected:e,onSelect:f,children:g}){return(0,b.jsxs)("button",{type:"button",onClick:f,className:(0,w.cn)("block w-full rounded-md border p-3 text-left transition-colors",e?"border-primary bg-primary/10 shadow-sm":"border-border bg-background hover:border-foreground/30"),children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-sm font-semibold text-foreground",children:[a,c,d&&(0,b.jsx)("span",{className:"rounded bg-primary/15 px-1.5 py-0.5 text-[10px] font-medium text-primary",children:d})]}),(0,b.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:g})]})}function P({backend:a,topMode:c,override:d,onChange:e}){let f=d??c;return(0,b.jsxs)("div",{className:"rounded-md border border-border/60 px-3 py-2",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{className:"text-sm",children:[(0,b.jsxs)("div",{className:"font-medium text-foreground",children:[E.BACKEND_PROVIDER_LABELS[a],(0,b.jsxs)("span",{className:"ml-1 text-xs text-muted-foreground",children:["(",E.BACKEND_PROVIDER_SHORT[a],")"]})]}),(0,b.jsxs)("div",{className:"text-[11px] text-muted-foreground",children:["runs as: ",f]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1 text-xs",children:[(0,b.jsx)(Q,{active:null===d,label:"Follow",onClick:()=>e(null)}),(0,b.jsx)(Q,{active:"safe"===d,label:"Safe",onClick:()=>e("safe")}),(0,b.jsx)(Q,{active:"allow"===d,label:"Allow",onClick:()=>e("allow")})]})]}),"codex"===a&&"allow"===f&&(0,b.jsxs)("p",{className:"mt-2 flex items-start gap-1.5 text-[11px] text-amber-700 dark:text-amber-300",children:[(0,b.jsx)(z.AlertTriangle,{className:"mt-0.5 h-3 w-3 shrink-0"}),(0,b.jsx)("span",{children:"Codex Allow runs sandbox-off; the daemon's absolute-block layer cannot intercept destructive shell commands for Codex."})]})]})}function Q({active:a,label:c,onClick:d}){return(0,b.jsx)("button",{type:"button",onClick:d,className:(0,w.cn)("rounded-md border px-2 py-1 transition-colors",a?"border-primary bg-primary/10 text-foreground":"border-border text-muted-foreground hover:border-foreground/30"),children:c})}var R=a.i(47278),S=a.i(54283),T=a.i(14445),U=a.i(3251),V=a.i(36581),W=a.i(40410),X=a.i(7117);function Y({onNext:a,onBack:c}){let d=(0,X.useMailAccounts)(),e=(0,X.useMailProviders)(),f=(0,W.useHealth)(),g=d.data?.accounts??[],h=e.data?.enabledKinds??[],i=function(a){let b={gmail:[],outlook:[],yahoo:[],icloud:[]};for(let c of a)b[c.kind].push(c);return b}(g),j=f.data?.integrationModes?.gmail?.mode??"disabled";return(0,b.jsxs)(s,{title:"Mail",description:"Hook up the mail accounts your agent should watch. Skip any you don't use — you can configure them later from Settings → Mail.",onNext:a,onBack:c,skipLabel:"Skip",maxWidth:"max-w-2xl",children:[(0,b.jsx)(V.IntegrationCard,{integrationKey:"gmail",gmailAccountCount:i.gmail.length}),(0,b.jsx)(R.GmailCard,{accounts:i.gmail,enabledKinds:h,hideExternalGoogleLink:!0}),"direct"===j&&(0,b.jsx)(U.GoogleCard,{}),(0,b.jsx)(V.IntegrationCard,{integrationKey:"outlook_mail"}),(0,b.jsx)(S.OutlookCard,{accounts:i.outlook,enabledKinds:h}),(0,b.jsx)(T.ImapCard,{kind:"yahoo",accounts:i.yahoo,enabledKinds:h}),(0,b.jsx)(T.ImapCard,{kind:"icloud",accounts:i.icloud,enabledKinds:h})]})}function Z({onNext:a,onBack:c}){let d=(0,W.useHealth)(),e=d.data?.integrationModes?.google_calendar?.mode??"disabled";return(0,b.jsx)(s,{title:"Calendar",description:"Pick the calendars your agent should follow. Skip if you don't use one.",onNext:a,onBack:c,skipLabel:"Skip",nextLabel:"Continue",children:(0,b.jsxs)("div",{className:"w-full max-w-2xl mx-auto space-y-4",children:[(0,b.jsx)(V.IntegrationCard,{integrationKey:"google_calendar"}),"direct"===e&&(0,b.jsx)(U.GoogleCard,{}),(0,b.jsx)(V.IntegrationCard,{integrationKey:"outlook_calendar"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground text-center",children:"Outlook Calendar shares OAuth with Outlook Mail — if you connect Mail first, Calendar reads succeed without a second consent screen. Apple Calendar can be configured later under Settings → Connections."})]})})}function $({onNext:a,onBack:d}){var e,g;let j,{data:k}=(0,m.useConfig)(),o=(0,n.useQueryClient)(),[p,q]=(0,c.useState)(""),[r,t]=(0,c.useState)(!0),[w,y]=(0,c.useState)(!1),[z,A]=(0,c.useState)(null),B=(0,c.useRef)(!1);(0,c.useEffect)(()=>{!B.current&&k&&(B.current=!0,"string"==typeof k.externalObsidianVaultPath&&k.externalObsidianVaultPath.length>0&&q(k.externalObsidianVaultPath),"boolean"==typeof k.externalObsidianWatch&&t(k.externalObsidianWatch))},[k]);let C=0===p.trim().length?null:0===(j=(e={path:p,dataDir:k?.contextDir??"",primaryVaultPath:k?.primaryVaultPath??null}).path.trim()).length?"empty":(0,x.isClientAbsolutePath)(j)?e.dataDir.length>0&&(0,x.isClientPathInsideOrEqual)(e.dataDir,j)?"overlaps_data_dir":e.primaryVaultPath&&(0,x.isClientPathInsideOrEqual)(e.primaryVaultPath,j)?"overlaps_primary_vault":null:"not_absolute",D=!(g={pathIssue:C,saving:w}).saving&&(null===g.pathIssue||"empty"===g.pathIssue),E=async()=>{if(D){y(!0),A(null);try{var b;let c;await l.api.patch("/config",(c=(b={externalObsidianVaultPath:p,externalObsidianWatch:r}).externalObsidianVaultPath.trim(),{externalObsidianVaultPath:0===c.length?null:c,externalObsidianWatch:b.externalObsidianWatch})),await o.invalidateQueries({queryKey:["config"]}),a()}catch(a){if(a instanceof l.ApiError){let b=a.body;A(b?.message??a.message??"Failed to save Note settings")}else A(a instanceof Error?a.message:"Failed to save Note settings")}finally{y(!1)}}};return(0,b.jsxs)(s,{title:"Note",description:"Where do you keep your own notes? Skip if you don't use either.",onNext:a,hideNav:!0,children:[(0,b.jsxs)("div",{className:"w-full max-w-2xl mx-auto space-y-6",children:[(0,b.jsx)(V.IntegrationCard,{integrationKey:"notion"}),(0,b.jsxs)("div",{className:"rounded-xl border border-border bg-card p-5 text-left space-y-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"text-sm font-semibold text-foreground",children:"Obsidian (your personal vault)"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:"This is separate from the agent’s working vault — point us at the vault YOU use for your own notes. The agent reads + appends there via the Obsidian skill."})]}),(0,b.jsx)(v.DirectoryPickerField,{id:"external-obsidian-vault-path",value:p,onChange:q,title:"Choose your personal Obsidian vault",placeholder:"Skip if you don't use Obsidian",disabled:w}),C&&"empty"!==C&&(0,b.jsx)("p",{className:"text-xs text-destructive",children:function(a){switch(a){case"empty":return"Pick a path or leave the field blank to skip.";case"not_absolute":return"Use an absolute path (for example `/Users/me/Vault`, `~/Vault`, or `C:\\Vault`).";case"overlaps_data_dir":return"Path overlaps the agent's data directory; choose a separate location.";case"overlaps_primary_vault":return"Path overlaps the agent's primary vault; choose a separate location."}}(C)}),(0,b.jsxs)("label",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,b.jsx)("input",{type:"checkbox",checked:r,onChange:a=>t(a.currentTarget.checked),className:"h-4 w-4 rounded border-border text-primary focus:ring-primary"}),"Watch this vault for changes (default ON)"]}),(0,b.jsx)("p",{className:"text-[11px] text-muted-foreground",children:"Disabling watching keeps the path readable through the Obsidian skill but stops the file-change observer — useful for very large vaults that produce noisy events."})]}),z&&(0,b.jsx)("p",{className:"text-sm text-red-600 dark:text-red-400 text-center",children:z})]}),(0,b.jsxs)("div",{className:"flex justify-center gap-3 pt-4",children:[d&&(0,b.jsxs)(i.Button,{variant:"ghost",onClick:d,className:"gap-2",children:[(0,b.jsx)(f.ArrowLeft,{className:"h-4 w-4"}),"Back"]}),(0,b.jsx)(i.Button,{variant:"ghost",onClick:a,children:"Skip"}),(0,b.jsx)(i.Button,{size:"lg",onClick:E,disabled:!D,className:"gap-2",children:w?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(h.Loader2,{className:"h-4 w-4 animate-spin"}),"Saving…"]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(u.FolderSymlink,{className:"h-4 w-4"}),"Continue"]})})]})]})}var _=a.i(75068),aa=a.i(7325),ab=a.i(42097),ac=a.i(22696),ad=a.i(34389);function ae({onNext:a,onBack:c}){return(0,b.jsx)(s,{title:"Messaging Channels",description:"Connect the apps you use to communicate with your agent. You can set up any combination — configure only the ones you need.",onNext:a,onBack:c,skipLabel:"Skip",maxWidth:"max-w-2xl",children:(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsx)(_.SlackCard,{}),(0,b.jsx)(aa.TelegramCard,{}),(0,b.jsx)(ab.DiscordCard,{}),(0,b.jsx)(ac.WhatsAppCard,{}),(0,b.jsx)(ad.DestinationSelector,{})]})})}var af=a.i(303),ag=a.i(52597),ah=a.i(70642),ai=a.i(99201),aj=a.i(1041),ak=a.i(29629),al=a.i(7037),am=a.i(95024),an=a.i(6465);function ao(a){}function ap(){}function aq({mode:a,agentDisplayName:d,onComplete:f,onBack:g,pendingVaultMode:j,pendingVaultPath:k}){let{data:o}=(0,m.useConfig)(),{messages:p,restoredMessages:q,setRestoredMessages:r,streaming:s,toolProgress:t,sessionInfo:u,sendMessage:v}=(0,af.useChat)({disableHistory:!0}),w=(0,c.useMemo)(()=>[...q,...p],[q,p]),x=(0,n.useQueryClient)(),y=(0,c.useRef)(null),z=(0,c.useRef)(!1),A=(0,c.useRef)(!1),[B,C]=(0,c.useState)(null),[D,E]=(0,c.useState)(!1),[F,G]=(0,c.useState)(""),[H,I]=(0,c.useState)(!1),[J,K]=(0,c.useState)(!1),[L,M]=(0,c.useState)(null),[N,O]=(0,c.useState)(null),[P,Q]=(0,c.useState)(0),[R,S]=(0,c.useState)("update"===a),[T,U]=(0,c.useState)(!1),[V,W]=(0,c.useState)(null),[X,Y]=(0,c.useState)(0),[Z,$]=(0,c.useState)(""),[_,aa]=(0,c.useState)(!1),[ab,ac]=(0,c.useState)(!1),ad="initial"===a?(0,e.normalizeAgentDisplayName)(d):o?.agentDisplayName??e.DEFAULT_AGENT_DISPLAY_NAME;(0,c.useEffect)(()=>{if(0===w.length)return;let a=w[w.length-1];("assistant"===a.role||"error"===a.role)&&K(!1)},[w]),(0,c.useEffect)(()=>{if(!J)return;let a=setTimeout(()=>K(!1),12e4);return()=>clearTimeout(a)},[J]);let ae=J||s;(0,c.useEffect)(()=>{let a=y.current;a&&(a.scrollTop=a.scrollHeight)},[w.length,t]),(0,c.useEffect)(()=>{var b;if("initial"!==a||R||A.current||V||!o)return;let c=function(a){if("plain"===a.pendingMode)return"obsidian"===a.currentMode?{kind:"migrate",mode:"plain",path:""}:{kind:"no_migration_needed"};let b=a.pendingPath.trim();return 0===b.length?{kind:"no_migration_needed"}:"obsidian"!==a.currentMode||a.currentPath!==b?{kind:"migrate",mode:"obsidian",path:b}:{kind:"no_migration_needed"}}({pendingMode:j??"plain",pendingPath:k??"",currentMode:"obsidian"===o.vaultMode?"obsidian":"plain",currentPath:o.primaryVaultPath??null});"no_migration_needed"===c.kind?S(!0):(A.current=!0,U(!0),W(null),l.api.post("/setup/migrate-context","plain"===(b={vaultMode:c.mode,primaryVaultPath:c.path}).vaultMode?{targetVaultMode:"plain",conflictPolicy:"abort"}:{targetVaultMode:"obsidian",targetVaultPath:b.primaryVaultPath.trim(),conflictPolicy:"abort"}).then(async()=>{await x.invalidateQueries({queryKey:["config"]}),await x.invalidateQueries({queryKey:["health"]}),S(!0)}).catch(a=>{a instanceof l.ApiError?W(a.body??{}):W({error:"internal_error",message:a instanceof Error?a.message:"Unexpected error."})}).finally(()=>{A.current=!1,U(!1)}))},[a,R,V,o,j,k,x,X]),(0,c.useEffect)(()=>{if(z.current||!u?.channelId||!R)return;let b={},c=b.setupSessionMode===a&&"number"==typeof b.setupSessionId&&b.setupSessionId>0&&u.sessionId===b.setupSessionId?b.setupSessionId:null;if(null!==c){z.current=!0,(0,af.fetchSessionMessages)(c).then(a=>{r(a)}).catch(a=>{console.warn("[setup] failed to refetch resumed session history",a)});return}z.current=!0,M(null),K(!0),l.api.post("/setup/start",{channelId:u.channelId,mode:a,..."initial"===a?{agentDisplayName:ad}:{}}).catch(a=>{z.current=!1,M(a instanceof Error?a.message:"Failed to start setup"),K(!1)})},[u?.channelId,u?.sessionId,a,ad,P,R,r]),(0,c.useEffect)(()=>{"number"==typeof u?.sessionId&&ao({setupSessionId:u.sessionId,setupSessionMode:a})},[a,u?.sessionId]),(0,c.useEffect)(()=>{if(!s)for(let a=w.length-1;a>=0;a--){let b=w[a];if("assistant"!==b.role)continue;let c=function(a){let b=a.match(/```management-rules\n([\s\S]*?)```/);return b?b[1].trim():null}(b.content);c&&(C(c),D||G(c));let d=function(a){let b=a.match(/```character\n([\s\S]*?)```/);return b?b[1].trim():null}(b.content);if(null===d||ab||($(d),aa(!0)),c||null!==d)break}},[w,s,D,ab]),(0,c.useEffect)(()=>{B&&!_&&($(o?.character??""),aa(!0))},[B,_,o?.character]);let ar=(0,c.useCallback)(async()=>{let b=D?F:B;if(!b)return;let c=Z.trim();if((0,an.isCharacterOverCap)(c))return void O("Character exceeds the 1000-character cap.");I(!0),O(null);try{let d=o?.character??"";_&&c!==d&&await l.api.patch("/config",{character:c}),await l.api.post("/setup/save-rules",{content:b,..."initial"===a?{agentDisplayName:ad}:{},..."number"==typeof u?.sessionId?{sessionId:u.sessionId}:{}}),x.setQueryData(["setup-status"],{needsSetup:!1,completedAt:new Date().toISOString()}),x.invalidateQueries({queryKey:["config"]}),x.invalidateQueries({queryKey:["health"]}),ap(),f()}catch(a){O(a instanceof Error?a.message:"Failed to save rules")}finally{I(!1)}},[D,F,B,Z,_,o?.character,x,f,a,ad,u?.sessionId]),as=(0,c.useCallback)(a=>{v(a),K(!0)},[v]),at=(0,c.useCallback)(a=>{v(a),K(!0)},[v]),au=[...w].reverse().find(a=>"assistant"===a.role),av=au&&!ae?function(a){let b=[];for(let c of a.split("\n")){let a=c.match(/^- \*\*(.+?)\*\*/);a&&b.push(a[1])}return b.length>=2&&b.length<=8?b:[]}(au.content):[];return(0,b.jsxs)("div",{className:"mx-auto flex h-full w-full max-w-4xl flex-col",children:[(0,b.jsxs)("div",{className:"space-y-1 px-4 pt-4 text-center",children:[(0,b.jsx)("h2",{className:"text-xl font-semibold",children:"initial"===a?"Customize Your Rules":"Update Management Rules"}),(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:"initial"===a?"Answer a few more questions and the agent will generate your management rules.":"Review the current rules and let us know what you'd like to change."})]}),T&&(0,b.jsx)(ak.Alert,{className:"mx-4 mt-4 rounded-lg px-4 py-3 text-sm",children:(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)(h.Loader2,{className:"h-4 w-4 animate-spin"}),(0,b.jsx)("span",{children:"Setting up your vault…"})]})}),V&&!T&&(0,b.jsx)(ak.Alert,{variant:"error",className:"mx-4 mt-4 rounded-lg px-4 py-3 text-sm",children:(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3 w-full",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium",children:"Could not set up your vault"}),(0,b.jsx)("p",{className:"mt-0.5",children:V.message})]}),(0,b.jsxs)("div",{className:"flex shrink-0 gap-2",children:[g&&(0,b.jsx)(i.Button,{size:"sm",variant:"ghost",onClick:g,children:"Back"}),(0,b.jsx)(i.Button,{size:"sm",variant:"outline",onClick:()=>{W(null),Y(a=>a+1)},children:"Retry"})]})]})}),L&&(0,b.jsx)(ak.Alert,{variant:"error",className:"mx-4 mt-4 rounded-lg px-4 py-3 text-sm",children:(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 w-full",children:[(0,b.jsx)("span",{children:L}),(0,b.jsx)(i.Button,{size:"sm",variant:"outline",onClick:()=>Q(a=>a+1),children:"Retry"})]})}),(0,b.jsx)(aj.ScrollArea,{ref:y,className:"flex-1 px-4 py-4",children:(0,b.jsxs)("div",{className:"space-y-4",children:[w.map(a=>(0,b.jsx)(ag.MessageBubble,{message:"assistant"===a.role?{...a,content:a.content.replace(/```management-rules\n[\s\S]*?```/g,"_(management rules preview shown below ↓)_").replace(/```character\n[\s\S]*?```/g,"_(character preview shown below ↓)_").trim()}:a,assistantLabel:ad},a.id)),(0,b.jsx)(ah.ToolProgress,{items:t}),ae&&(0,b.jsx)("div",{className:"flex justify-start",children:(0,b.jsx)("span",{className:"inline-block h-5 w-1 animate-pulse rounded-full bg-foreground"})}),0===w.length&&!ae&&!L&&!T&&!V&&(0,b.jsx)("div",{className:"flex flex-col items-center justify-center py-16 text-muted-foreground",children:(0,b.jsx)("p",{className:"text-sm",children:"Preparing setup..."})})]})}),av.length>0&&!B&&(0,b.jsx)("div",{className:"flex flex-wrap gap-2 border-t border-border bg-muted/30 px-4 py-3",children:av.map(a=>(0,b.jsx)(i.Button,{size:"sm",variant:"outline",onClick:()=>as(a),disabled:ae,className:"text-xs",children:a},a))}),B&&(0,b.jsxs)("div",{className:"border-t border-border bg-muted/30 px-4 py-4 space-y-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("h3",{className:"text-sm font-medium",children:"Management Rules Preview"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsxs)(i.Button,{size:"sm",variant:"ghost",onClick:()=>{D&&G(B),E(!D)},className:"gap-1 text-xs",children:[(0,b.jsx)(al.Pencil,{className:"h-3 w-3"}),D?"Cancel":"Edit"]}),(0,b.jsx)(i.Button,{size:"sm",onClick:ar,disabled:H||(0,an.isCharacterOverCap)(Z),className:"gap-1",children:H?"Saving...":(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(am.Save,{className:"h-3.5 w-3.5"}),"Save & Finish"]})})]})]}),N&&(0,b.jsx)(ak.Alert,{variant:"error",children:N}),D?(0,b.jsx)("textarea",{value:F,onChange:a=>G(a.target.value),className:"w-full rounded-md border border-input bg-background p-3 font-mono text-xs leading-relaxed focus:outline-none focus:ring-2 focus:ring-ring",rows:16}):(0,b.jsx)("pre",{className:"max-h-96 overflow-auto rounded-md border border-border bg-background p-3 text-xs leading-relaxed",children:B}),(0,b.jsxs)("div",{className:"space-y-2 border-t border-border/60 pt-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"text-sm font-medium",children:"Character"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:"How the agent should talk to you — tone, language, formality. Applies across every session and backend. Leave blank to skip."})]}),(0,b.jsx)(an.CharacterEditor,{value:Z,onChange:a=>{$(a),ac(!0),_||aa(!0)},disabled:H,rows:4})]})]}),!H&&(0,b.jsx)(ai.ChatInput,{onSend:at,disabled:ae||0===w.length})]})}var ar=a.i(82687),as=a.i(45952);function at({mode:a,agentDisplayName:c}){let e=(0,d.useRouter)();return(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-8 py-16 text-center",children:[(0,b.jsx)("div",{className:"rounded-full bg-emerald-100 p-6 dark:bg-emerald-950",children:(0,b.jsx)(ar.CheckCircle2,{className:"h-12 w-12 text-emerald-600 dark:text-emerald-400"})}),(0,b.jsxs)("div",{className:"max-w-md space-y-3",children:[(0,b.jsx)("h1",{className:"text-2xl font-bold text-foreground",children:"initial"===a?"Setup Complete":"Rules Updated"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"initial"===a?`${c} is ready to manage your schedule and tasks.`:"Management Rules have been updated. Changes take effect immediately."})]}),(0,b.jsxs)("div",{className:"flex gap-3",children:[(0,b.jsxs)(i.Button,{variant:"outline",onClick:()=>e.push("/memory"),className:"gap-2",children:[(0,b.jsx)(as.FileText,{className:"h-4 w-4"}),"View Management Rules"]}),(0,b.jsxs)(i.Button,{onClick:()=>e.push("/"),className:"gap-2",children:["Go to Overview",(0,b.jsx)(g.ArrowRight,{className:"h-4 w-4"})]})]})]})}let au=["basics","vault","backend","mail","calendar","note","messaging","rules","complete"],av={basics:"Basics",vault:"Vault",backend:"AI Backend",mail:"Mail",calendar:"Calendar",note:"Note",messaging:"Messaging",rules:"Rules",complete:"Done"};function aw(){var a;let f="update"===(0,d.useSearchParams)().get("mode")?"update":"initial",{data:g}=(0,m.useConfig)(),[h,i]=(0,c.useState)(()=>"update"===f?"rules":(void 0)??"basics"),[j,k]=(0,c.useState)(()=>"update"===f?e.DEFAULT_AGENT_DISPLAY_NAME:(void 0)??""),[l,n]=(0,c.useState)(()=>"initial"===f?(void 0)??null:null),o=(a=g?.vaultMode,null!==l?l:"obsidian"===a?"obsidian":"plain"),[p,q]=(0,c.useState)(()=>"initial"===f?(void 0)??"":"");(0,c.useEffect)(()=>{"update"!==f&&ao({step:h,agentDisplayName:j,modeOverride:l,pendingVaultPath:p||null})},[f,h,j,l,p]),(0,c.useEffect)(()=>{"complete"===h&&ap()},[h]);let r=(0,c.useRef)(null);(0,c.useEffect)(()=>{r.current?.scrollTo(0,0)},[h]);let s=(0,c.useMemo)(()=>(function(a=au){return[...a]})(),[]),u=()=>{let a=s.indexOf(h);a<s.length-1&&i(s[a+1])},v=s.indexOf(h),x="initial"===f&&v>0&&"complete"!==h?()=>i(s[v-1]):void 0;return(0,b.jsxs)("div",{className:"flex h-full flex-col",children:["initial"===f&&"complete"!==h&&(0,b.jsx)("div",{className:"flex items-center justify-center gap-1 border-b border-border bg-muted/30 px-4 py-3",children:s.filter(a=>"complete"!==a).map((a,c)=>{let d=s.indexOf(a),e=a===h,f=d<v;return(0,b.jsxs)("div",{className:"flex items-center gap-1",children:[c>0&&(0,b.jsx)("div",{className:(0,w.cn)("h-px w-6",f?"bg-primary":"bg-border")}),(0,b.jsxs)("div",{className:(0,w.cn)("flex items-center gap-1.5 rounded-full px-3 py-1 text-xs font-medium transition-colors",e?"bg-primary text-primary-foreground":f?"bg-primary/10 text-primary":"text-muted-foreground"),children:[(0,b.jsx)("span",{className:(0,w.cn)("flex h-5 w-5 items-center justify-center rounded-full text-[10px]",e?"bg-primary-foreground/20":f?"bg-primary/20":"bg-muted"),children:f?"✓":c+1}),av[a]]})]},a)})}),(0,b.jsxs)("div",{ref:r,className:"flex-1 overflow-y-auto",children:["basics"===h&&(0,b.jsx)(t,{agentDisplayName:j,onAgentDisplayNameChange:k,onNext:u}),"vault"===h&&(0,b.jsx)(y,{onNext:u,onBack:x,pendingVaultMode:o,onPendingVaultModeChange:a=>{n(a)},pendingVaultPath:p,onPendingVaultPathChange:q}),"backend"===h&&(0,b.jsx)(M,{onNext:u,onBack:x}),"mail"===h&&(0,b.jsx)(Y,{onNext:u,onBack:x}),"calendar"===h&&(0,b.jsx)(Z,{onNext:u,onBack:x}),"note"===h&&(0,b.jsx)($,{onNext:u,onBack:x}),"messaging"===h&&(0,b.jsx)(ae,{onNext:u,onBack:x}),"rules"===h&&(0,b.jsx)(aq,{mode:f,agentDisplayName:j,onComplete:()=>i("complete"),onBack:x,pendingVaultMode:o,pendingVaultPath:p}),"complete"===h&&(0,b.jsx)(at,{mode:f,agentDisplayName:j||e.DEFAULT_AGENT_DISPLAY_NAME})]})]})}a.s(["default",0,function(){return(0,b.jsx)(c.Suspense,{children:(0,b.jsx)(aw,{})})}],37118)}];
|
|
1
|
+
module.exports=[37118,a=>{"use strict";var b=a.i(39752),c=a.i(34542),d=a.i(82508);a.i(70010);var e=a.i(85476),f=a.i(57988),g=a.i(45787),h=a.i(92241),i=a.i(21218),j=a.i(8212),k=a.i(47696),l=a.i(59974),m=a.i(54150),n=a.i(81130);let o=/^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})?$/,p=[{tag:"en",label:"English"},{tag:"ja",label:"日本語 (Japanese)"},{tag:"zh",label:"中文 (Chinese)"},{tag:"es",label:"Español (Spanish)"},{tag:"fr",label:"Français (French)"},{tag:"de",label:"Deutsch (German)"},{tag:"pt",label:"Português (Portuguese)"},{tag:"ko",label:"한국어 (Korean)"},{tag:"__custom__",label:"Other (enter BCP-47 tag…)"}],q=new Set(p.filter(a=>"__custom__"!==a.tag).map(a=>a.tag)),r=(0,a.i(5423).default)("SkipForward",[["polygon",{points:"5 4 15 12 5 20 5 4",key:"16p6eg"}],["line",{x1:"19",x2:"19",y1:"5",y2:"19",key:"futhcm"}]]);function s({title:a,description:c,children:d,onNext:e,onBack:h,skipLabel:j="Set Up Later",nextLabel:k="Next",nextDisabled:l=!1,hideNav:m=!1,maxWidth:n}){return(0,b.jsxs)("div",{className:`mx-auto ${n??"max-w-lg"} space-y-6 py-8`,children:[(0,b.jsxs)("div",{className:"space-y-2 text-center",children:[(0,b.jsx)("h2",{className:"text-xl font-semibold",children:a}),c&&(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:c})]}),d,!m&&(0,b.jsxs)("div",{className:"flex justify-between pt-4",children:[(0,b.jsxs)("div",{className:"flex gap-2",children:[h?(0,b.jsxs)(i.Button,{variant:"ghost",onClick:h,className:"gap-2 text-muted-foreground",children:[(0,b.jsx)(f.ArrowLeft,{className:"h-4 w-4"}),"Back"]}):null,j?(0,b.jsxs)(i.Button,{variant:"ghost",onClick:e,className:"gap-2 text-muted-foreground",children:[(0,b.jsx)(r,{className:"h-4 w-4"}),j]}):null,h||j?null:(0,b.jsx)("div",{})]}),(0,b.jsxs)(i.Button,{onClick:e,className:"gap-2",disabled:l,children:[k,(0,b.jsx)(g.ArrowRight,{className:"h-4 w-4"})]})]})]})}function t({agentDisplayName:a,onAgentDisplayNameChange:d,onNext:e}){let{data:f}=(0,m.useConfig)(),r=(0,n.useQueryClient)(),[u,v]=(0,c.useState)("en"),[w,x]=(0,c.useState)(""),[y,z]=(0,c.useState)(!1),[A,B]=(0,c.useState)(null),C=(0,c.useRef)(!1);(0,c.useEffect)(()=>{var b;if(C.current||!f)return;C.current=!0;let c="string"!=typeof(b=f.primaryLanguage)||0===b.length?{primary:"en",custom:""}:q.has(b)?{primary:b,custom:""}:{primary:"__custom__",custom:b};v(c.primary),x(c.custom),"string"==typeof f.agentDisplayName&&f.agentDisplayName.length>0&&0===a.length&&d(f.agentDisplayName)},[f,a,d]);let D="__custom__"===u?w.trim():u,E=function(a,b){if("__custom__"!==a)return!1;let c=b.trim();return 0!==c.length&&!o.test(c)}(u,w),F=function(a){if(a.saving)return!1;let b=a.agentDisplayName.trim();return 0!==b.length&&!(b.length>40)&&0!==a.resolvedLanguage.length&&!!o.test(a.resolvedLanguage)}({agentDisplayName:a,resolvedLanguage:D,saving:y}),G=async()=>{if(F){z(!0),B(null);try{var b;await l.api.patch("/config",{agentDisplayName:(b={agentDisplayName:a,resolvedLanguage:D}).agentDisplayName.trim(),primaryLanguage:b.resolvedLanguage}),await r.invalidateQueries({queryKey:["config"]}),e()}catch(a){if(a instanceof l.ApiError){let b=a.body;B(b?.message??a.message??"Failed to save basics")}else B(a instanceof Error?a.message:"Failed to save basics")}finally{z(!1)}}};return(0,b.jsxs)(s,{title:"Basics",description:"Tell your agent what to call itself and which language to think in.",onNext:e,hideNav:!0,children:[(0,b.jsxs)("div",{className:"w-full max-w-sm mx-auto space-y-6 rounded-xl border border-border bg-card p-5 text-left",children:[(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)("label",{htmlFor:"agent-name",className:"text-sm font-medium text-foreground",children:"Agent name"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:"Shown in the dashboard and prepended to outbound messages."}),(0,b.jsx)(j.Input,{id:"agent-name",value:a,onChange:a=>d(a.target.value),placeholder:"Aitne",maxLength:40})]}),(0,b.jsxs)("div",{className:"space-y-2 border-t border-border pt-4",children:[(0,b.jsx)("label",{className:"text-sm font-medium text-foreground",children:"Primary language"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:"Controls user-facing prose (profile, daily journal, weekly / monthly reviews). System files stay in English."}),(0,b.jsxs)(k.Select,{value:u,onValueChange:v,children:[(0,b.jsx)(k.SelectTrigger,{children:(0,b.jsx)(k.SelectValue,{})}),(0,b.jsx)(k.SelectContent,{children:p.map(a=>(0,b.jsx)(k.SelectItem,{value:a.tag,children:a.label},a.tag))})]}),"__custom__"===u&&(0,b.jsx)(j.Input,{value:w,onChange:a=>x(a.target.value),placeholder:"e.g. zh-Hans",className:"mt-2"}),E&&(0,b.jsxs)("p",{className:"text-xs text-destructive",children:["Use a BCP-47 tag like ",(0,b.jsx)("code",{children:"en-US"})," or ",(0,b.jsx)("code",{children:"zh-Hans"}),"."]})]})]}),A&&(0,b.jsx)("p",{className:"text-sm text-red-600 dark:text-red-400 text-center",children:A}),(0,b.jsx)("div",{className:"flex justify-center gap-3 pt-4",children:(0,b.jsx)(i.Button,{size:"lg",onClick:G,disabled:!F,className:"gap-2",children:y?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(h.Loader2,{className:"h-4 w-4 animate-spin"}),"Saving…"]}):(0,b.jsxs)(b.Fragment,{children:["Continue",(0,b.jsx)(g.ArrowRight,{className:"h-4 w-4"})]})})})]})}var u=a.i(19512),v=a.i(91534),w=a.i(48558),x=a.i(66135);function y({onNext:a,onBack:c,pendingVaultMode:d,onPendingVaultModeChange:e,pendingVaultPath:g,onPendingVaultPathChange:h}){var j,k;let l,{data:n}=(0,m.useConfig)(),o=n?.contextDir??"",p="obsidian"===d?0===(l=(j={path:g,dataDir:o}).path.trim()).length?"empty":(0,x.isClientAbsolutePath)(l)?j.dataDir.length>0&&(0,x.isClientPathInsideOrEqual)(j.dataDir,l)?"overlaps_data_dir":null:"not_absolute":null,q=!(k={vaultMode:d,pathIssue:p,saving:!1}).saving&&("plain"===k.vaultMode||null===k.pathIssue);return(0,b.jsxs)(s,{title:"Vault",description:"Where should your agent store its memory? Obsidian users can pick an existing vault.",onNext:a,hideNav:!0,children:[(0,b.jsxs)("div",{className:"w-full max-w-xl mx-auto space-y-5 rounded-xl border border-border bg-card p-5 text-left",children:[(0,b.jsx)("div",{className:"grid grid-cols-1 gap-2",children:["plain","obsidian"].map(a=>(0,b.jsxs)("button",{type:"button",onClick:()=>e(a),className:(0,w.cn)("rounded-md border px-3 py-2 text-left text-sm transition-colors",d===a?"border-primary bg-primary/10 text-foreground":"border-border bg-background text-muted-foreground hover:border-primary/50"),children:[(0,b.jsx)("span",{className:"block font-medium",children:"plain"===a?"Plain markdown":"Obsidian"}),(0,b.jsx)("span",{className:"block text-xs text-muted-foreground",children:"plain"===a?"Stored at ~/.personal-agent/context. Only this app reads + writes.":"Use an existing Obsidian vault as the agent's working directory."})]},a))}),"obsidian"===d&&(0,b.jsxs)("div",{className:"space-y-2 border-t border-border pt-4",children:[(0,b.jsx)("label",{htmlFor:"primary-vault-path",className:"text-sm font-medium text-foreground",children:"Vault path"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:"Pick an existing folder. Cloud-sync directories (iCloud, Dropbox, OneDrive, Google Drive) work; local SSDs are faster. The folder stays untouched until you reach the final step."}),(0,b.jsx)(v.DirectoryPickerField,{id:"primary-vault-path",value:g,onChange:h,title:"Choose primary vault directory",placeholder:"Choose a folder for the primary vault",defaultPath:n?.primaryVaultPath||void 0}),p&&"empty"!==p&&(0,b.jsx)("p",{className:"text-xs text-destructive",children:function(a){switch(a){case"empty":return"Pick a directory for the agent's primary vault.";case"not_absolute":return"Use an absolute path (for example `/Users/me/Vault`, `~/Vault`, or `C:\\Vault`).";case"overlaps_data_dir":return"Path overlaps the agent's data directory; choose a separate location."}}(p)})]})]}),(0,b.jsxs)("div",{className:"flex justify-center gap-3 pt-4",children:[c&&(0,b.jsxs)(i.Button,{variant:"ghost",onClick:c,className:"gap-2",children:[(0,b.jsx)(f.ArrowLeft,{className:"h-4 w-4"}),"Back"]}),(0,b.jsxs)(i.Button,{size:"lg",onClick:a,disabled:!q,className:"gap-2",children:[(0,b.jsx)(u.FolderSymlink,{className:"h-4 w-4"}),"Continue"]})]})]})}var z=a.i(32307),A=a.i(78019),B=a.i(50891),C=a.i(26206),D=a.i(57216),E=a.i(40091),F=a.i(74794),G=a.i(74358),H=a.i(89021),I=a.i(34549),J=a.i(81831),K=a.i(16611);let L=["claude","codex","gemini"];function M({onNext:a,onBack:d}){let{data:e,refetch:j}=(0,F.useBackends)(),k=(0,n.useQueryClient)(),[m,o]=(0,c.useState)("claude"),[p,q]=(0,c.useState)("safe"),[r,t]=(0,c.useState)(K.EMPTY_OVERRIDES),[u,v]=(0,c.useState)(!1),[w,x]=(0,c.useState)(!1),[y,z]=(0,c.useState)(null),[A,B]=(0,c.useState)(null),[C,D]=(0,c.useState)({claude:{status:"idle"},codex:{status:"idle"},gemini:{status:"idle"}}),O=(0,c.useCallback)(a=>{o(a)},[]),P=(0,c.useCallback)(async a=>{D(b=>({...b,[a]:{status:"checking"}}));try{let b=await l.api.post(`/backends/${a}/verify-install`);if(await j(),b.ok)D(c=>({...c,[a]:{status:"ok",version:b.version}}));else{let c=b.cliInstalled?b.timedOut?`${b.cliCommand} --version timed out`:b.stderr.trim()||b.stdout.trim()||"CLI failed to run":`${b.cliCommand} not found on PATH`;D(b=>({...b,[a]:{status:"error",error:c}}))}}catch(b){D(c=>({...c,[a]:{status:"error",error:b instanceof Error?b.message:"Verify install failed"}}))}},[j]),Q=(0,I.isContinueEligible)({mainBackend:m});async function R(){if(m){if(null!==A){B(null),a();return}x(!0),z(null);try{let a=await l.api.put("/backends/main",{backendId:m});await k.invalidateQueries({queryKey:["backends"]}),await k.invalidateQueries({queryKey:["integrations"]}),await k.invalidateQueries({queryKey:["health"]}),await k.invalidateQueries({queryKey:["agent-actions","native_unbound"]});let b=(0,K.buildSetupModePayload)(p,r);b&&(await l.api.post("/setup/mode",b),await k.invalidateQueries({queryKey:["config"]}));let c=a?.nativeUnbound??[];if(c.length>0){let a=c.map(a=>a.key).join(", ");B(`${c.length} native integration${1===c.length?"":"s"} (${a}) were bound to a different backend and are now disabled. Re-configure them on /settings/integrations after the wizard completes.`),x(!1);return}}catch(a){z(a instanceof l.ApiError||a instanceof Error?a.message:"Failed to apply default presets"),x(!1);return}a()}}return(0,b.jsxs)(s,{title:"AI Backend",description:"Pick the main backend, install its CLI, and (optionally) save a provider API key. You can skip the key setup and configure it later from Settings → Backends.",onNext:a,hideNav:!0,maxWidth:"max-w-4xl",children:[(0,b.jsx)(J.SubscriptionAuthWarning,{}),(0,b.jsxs)("div",{className:"space-y-4",children:[L.map(a=>{let c=e?.backends.find(b=>b.id===a);return(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)(H.BackendCard,{backendId:a,mode:"wizard",isMain:m===a,authStatus:c?.authStatus??"unknown",authStatusDetail:c?.authDetail??null,authFirstExpiredAt:c?.authFirstExpiredAt??null,authLastSuccessAt:c?.authLastSuccessAt??null,authNotificationCount:c?.authNotificationCount??0,cliInstalled:c?.cliInstalled??!0,enabled:c?.enabled??!0,webSearchEnabled:c?.webSearchEnabled??!1,webSearchSupported:c?.webSearchSupported??!1,permissionMode:null,installCheck:C[a],onCliInstalled:()=>{j()},onVerifyInstall:()=>{P(a)}}),(0,b.jsx)(G.BackendApiKeyPanel,{backendId:a})]},a)}),(0,b.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-4",children:[(0,b.jsx)("h3",{className:"text-sm font-semibold text-foreground",children:"Main backend"}),(0,b.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:"The main backend runs every configurable process by default."}),(0,b.jsx)("div",{className:"mt-3 flex flex-wrap gap-3",children:L.map(a=>{let c=m===a;return(0,b.jsxs)("label",{className:`flex flex-1 min-w-[180px] items-start gap-2 rounded-md border px-3 py-2 text-sm transition-colors ${c?"border-primary bg-primary/10":"border-border hover:border-foreground/30"}`,children:[(0,b.jsx)("input",{type:"radio",name:"main-backend",className:"mt-1",checked:c,onChange:()=>O(a)}),(0,b.jsx)("span",{className:"font-medium",children:E.BACKEND_PROVIDER_SHORT[a]})]},a)})})]})]}),(0,b.jsx)(N,{topMode:p,overrides:r,advancedOpen:u,onTopModeChange:q,onOverridesChange:t,onAdvancedOpenChange:v}),y&&(0,b.jsx)("p",{className:"text-sm text-destructive text-center",children:y}),A&&(0,b.jsx)("p",{className:"rounded-md border border-amber-300/60 bg-amber-50/60 px-3 py-2 text-xs text-amber-900 dark:border-amber-700/50 dark:bg-amber-950/30 dark:text-amber-100",role:"status",children:A}),(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 pt-2",children:[d?(0,b.jsxs)(i.Button,{variant:"ghost",onClick:d,className:"gap-2",children:[(0,b.jsx)(f.ArrowLeft,{className:"h-4 w-4"}),"Back"]}):(0,b.jsx)("div",{}),(0,b.jsx)(i.Button,{onClick:()=>void R(),disabled:!Q||w,children:w?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(h.Loader2,{className:"mr-2 h-4 w-4 animate-spin"}),"Applying defaults…"]}):A?(0,b.jsxs)(b.Fragment,{children:["Acknowledge & continue ",(0,b.jsx)(g.ArrowRight,{className:"ml-2 h-4 w-4"})]}):(0,b.jsxs)(b.Fragment,{children:["Next ",(0,b.jsx)(g.ArrowRight,{className:"ml-2 h-4 w-4"})]})})]})]})}function N({topMode:a,overrides:c,advancedOpen:d,onTopModeChange:e,onOverridesChange:f,onAdvancedOpenChange:g}){let h=(0,K.hasDivergentOverride)(a,c);return(0,b.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-4 space-y-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"text-sm font-semibold text-foreground",children:"Execution permissions"}),(0,b.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:"Pick how freely the agent may run shell, file, and tool commands. Dangerous operations — recursive deletes, privilege escalation, and secret-file reads — remain blocked in both modes."})]}),(0,b.jsxs)("div",{className:"grid gap-2 sm:grid-cols-2",children:[(0,b.jsx)(O,{icon:(0,b.jsx)(B.ShieldCheck,{className:"h-4 w-4"}),title:"Safe",badge:"Recommended",selected:"safe"===a,onSelect:()=>e("safe"),children:"Strict permission checks, asks for confirmation before side-effectful actions."}),(0,b.jsx)(O,{icon:(0,b.jsx)(C.Unlock,{className:"h-4 w-4"}),title:"Allow",selected:"allow"===a,onSelect:()=>e("allow"),children:"Runs with the skills, plugins, and MCP servers installed in your CLI harness."})]}),(0,b.jsxs)(D.Collapsible,{open:d,onOpenChange:g,children:[(0,b.jsx)(D.CollapsibleTrigger,{asChild:!0,children:(0,b.jsxs)("button",{type:"button",className:"flex w-full items-center justify-between rounded-md border border-border bg-background px-3 py-2 text-left text-xs text-muted-foreground hover:bg-muted/40",children:[(0,b.jsxs)("span",{className:"flex items-center gap-2",children:[(0,b.jsx)(A.ChevronDown,{className:(0,w.cn)("h-3.5 w-3.5 transition-transform",d&&"rotate-180")}),"Per-backend overrides",h&&(0,b.jsx)("span",{className:"rounded bg-amber-500/15 px-1.5 py-0.5 text-[10px] font-medium text-amber-700 dark:text-amber-300",children:"mixed"})]}),(0,b.jsx)("span",{className:"text-[11px]",children:d?"Hide":"Show"})]})}),(0,b.jsx)(D.CollapsibleContent,{className:"mt-2 space-y-2 rounded-md border border-border bg-background p-3",children:["claude","codex","gemini"].map(d=>(0,b.jsx)(P,{backend:d,topMode:a,override:c[d],onChange:a=>f(b=>({...b,[d]:a}))},d))})]})]})}function O({icon:a,title:c,badge:d,selected:e,onSelect:f,children:g}){return(0,b.jsxs)("button",{type:"button",onClick:f,className:(0,w.cn)("block w-full rounded-md border p-3 text-left transition-colors",e?"border-primary bg-primary/10 shadow-sm":"border-border bg-background hover:border-foreground/30"),children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-sm font-semibold text-foreground",children:[a,c,d&&(0,b.jsx)("span",{className:"rounded bg-primary/15 px-1.5 py-0.5 text-[10px] font-medium text-primary",children:d})]}),(0,b.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:g})]})}function P({backend:a,topMode:c,override:d,onChange:e}){let f=d??c;return(0,b.jsxs)("div",{className:"rounded-md border border-border/60 px-3 py-2",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{className:"text-sm",children:[(0,b.jsxs)("div",{className:"font-medium text-foreground",children:[E.BACKEND_PROVIDER_LABELS[a],(0,b.jsxs)("span",{className:"ml-1 text-xs text-muted-foreground",children:["(",E.BACKEND_PROVIDER_SHORT[a],")"]})]}),(0,b.jsxs)("div",{className:"text-[11px] text-muted-foreground",children:["runs as: ",f]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1 text-xs",children:[(0,b.jsx)(Q,{active:null===d,label:"Follow",onClick:()=>e(null)}),(0,b.jsx)(Q,{active:"safe"===d,label:"Safe",onClick:()=>e("safe")}),(0,b.jsx)(Q,{active:"allow"===d,label:"Allow",onClick:()=>e("allow")})]})]}),"codex"===a&&"allow"===f&&(0,b.jsxs)("p",{className:"mt-2 flex items-start gap-1.5 text-[11px] text-amber-700 dark:text-amber-300",children:[(0,b.jsx)(z.AlertTriangle,{className:"mt-0.5 h-3 w-3 shrink-0"}),(0,b.jsx)("span",{children:"Codex Allow runs sandbox-off; the daemon's absolute-block layer cannot intercept destructive shell commands for Codex."})]})]})}function Q({active:a,label:c,onClick:d}){return(0,b.jsx)("button",{type:"button",onClick:d,className:(0,w.cn)("rounded-md border px-2 py-1 transition-colors",a?"border-primary bg-primary/10 text-foreground":"border-border text-muted-foreground hover:border-foreground/30"),children:c})}var R=a.i(47278),S=a.i(54283),T=a.i(14445),U=a.i(3251),V=a.i(36581),W=a.i(40410),X=a.i(7117);function Y({onNext:a,onBack:c}){let d=(0,X.useMailAccounts)(),e=(0,X.useMailProviders)(),f=(0,W.useHealth)(),g=d.data?.accounts??[],h=e.data?.enabledKinds??[],i=function(a){let b={gmail:[],outlook:[],yahoo:[],icloud:[]};for(let c of a)b[c.kind].push(c);return b}(g),j=f.data?.integrationModes?.gmail?.mode??"disabled";return(0,b.jsxs)(s,{title:"Mail",description:"Hook up the mail accounts your agent should watch. Skip any you don't use — you can configure them later from Settings → Mail.",onNext:a,onBack:c,skipLabel:"Skip",maxWidth:"max-w-2xl",children:[(0,b.jsx)(V.IntegrationCard,{integrationKey:"gmail",gmailAccountCount:i.gmail.length}),(0,b.jsx)(R.GmailCard,{accounts:i.gmail,enabledKinds:h,hideExternalGoogleLink:!0}),"direct"===j&&(0,b.jsx)(U.GoogleCard,{}),(0,b.jsx)(V.IntegrationCard,{integrationKey:"outlook_mail"}),(0,b.jsx)(S.OutlookCard,{accounts:i.outlook,enabledKinds:h}),(0,b.jsx)(T.ImapCard,{kind:"yahoo",accounts:i.yahoo,enabledKinds:h}),(0,b.jsx)(T.ImapCard,{kind:"icloud",accounts:i.icloud,enabledKinds:h})]})}function Z({onNext:a,onBack:c}){let d=(0,W.useHealth)(),e=d.data?.integrationModes?.google_calendar?.mode??"disabled";return(0,b.jsx)(s,{title:"Calendar",description:"Pick the calendars your agent should follow. Skip if you don't use one.",onNext:a,onBack:c,skipLabel:"Skip",nextLabel:"Continue",children:(0,b.jsxs)("div",{className:"w-full max-w-2xl mx-auto space-y-4",children:[(0,b.jsx)(V.IntegrationCard,{integrationKey:"google_calendar"}),"direct"===e&&(0,b.jsx)(U.GoogleCard,{}),(0,b.jsx)(V.IntegrationCard,{integrationKey:"outlook_calendar"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground text-center",children:"Outlook Calendar shares OAuth with Outlook Mail — if you connect Mail first, Calendar reads succeed without a second consent screen. Apple Calendar can be configured later under Settings → Connections."})]})})}function $({onNext:a,onBack:d}){var e,g;let j,{data:k}=(0,m.useConfig)(),o=(0,n.useQueryClient)(),[p,q]=(0,c.useState)(""),[r,t]=(0,c.useState)(!0),[w,y]=(0,c.useState)(!1),[z,A]=(0,c.useState)(null),B=(0,c.useRef)(!1);(0,c.useEffect)(()=>{!B.current&&k&&(B.current=!0,"string"==typeof k.externalObsidianVaultPath&&k.externalObsidianVaultPath.length>0&&q(k.externalObsidianVaultPath),"boolean"==typeof k.externalObsidianWatch&&t(k.externalObsidianWatch))},[k]);let C=0===p.trim().length?null:0===(j=(e={path:p,dataDir:k?.contextDir??"",primaryVaultPath:k?.primaryVaultPath??null}).path.trim()).length?"empty":(0,x.isClientAbsolutePath)(j)?e.dataDir.length>0&&(0,x.isClientPathInsideOrEqual)(e.dataDir,j)?"overlaps_data_dir":e.primaryVaultPath&&(0,x.isClientPathInsideOrEqual)(e.primaryVaultPath,j)?"overlaps_primary_vault":null:"not_absolute",D=!(g={pathIssue:C,saving:w}).saving&&(null===g.pathIssue||"empty"===g.pathIssue),E=async()=>{if(D){y(!0),A(null);try{var b;let c;await l.api.patch("/config",(c=(b={externalObsidianVaultPath:p,externalObsidianWatch:r}).externalObsidianVaultPath.trim(),{externalObsidianVaultPath:0===c.length?null:c,externalObsidianWatch:b.externalObsidianWatch})),await o.invalidateQueries({queryKey:["config"]}),a()}catch(a){if(a instanceof l.ApiError){let b=a.body;A(b?.message??a.message??"Failed to save Note settings")}else A(a instanceof Error?a.message:"Failed to save Note settings")}finally{y(!1)}}};return(0,b.jsxs)(s,{title:"Note",description:"Where do you keep your own notes? Skip if you don't use either.",onNext:a,hideNav:!0,children:[(0,b.jsxs)("div",{className:"w-full max-w-2xl mx-auto space-y-6",children:[(0,b.jsx)(V.IntegrationCard,{integrationKey:"notion"}),(0,b.jsxs)("div",{className:"rounded-xl border border-border bg-card p-5 text-left space-y-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"text-sm font-semibold text-foreground",children:"Obsidian (your personal vault)"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:"This is separate from the agent’s working vault — point us at the vault YOU use for your own notes. The agent reads + appends there via the Obsidian skill."})]}),(0,b.jsx)(v.DirectoryPickerField,{id:"external-obsidian-vault-path",value:p,onChange:q,title:"Choose your personal Obsidian vault",placeholder:"Skip if you don't use Obsidian",disabled:w}),C&&"empty"!==C&&(0,b.jsx)("p",{className:"text-xs text-destructive",children:function(a){switch(a){case"empty":return"Pick a path or leave the field blank to skip.";case"not_absolute":return"Use an absolute path (for example `/Users/me/Vault`, `~/Vault`, or `C:\\Vault`).";case"overlaps_data_dir":return"Path overlaps the agent's data directory; choose a separate location.";case"overlaps_primary_vault":return"Path overlaps the agent's primary vault; choose a separate location."}}(C)}),(0,b.jsxs)("label",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,b.jsx)("input",{type:"checkbox",checked:r,onChange:a=>t(a.currentTarget.checked),className:"h-4 w-4 rounded border-border text-primary focus:ring-primary"}),"Watch this vault for changes (default ON)"]}),(0,b.jsx)("p",{className:"text-[11px] text-muted-foreground",children:"Disabling watching keeps the path readable through the Obsidian skill but stops the file-change observer — useful for very large vaults that produce noisy events."})]}),z&&(0,b.jsx)("p",{className:"text-sm text-red-600 dark:text-red-400 text-center",children:z})]}),(0,b.jsxs)("div",{className:"flex justify-center gap-3 pt-4",children:[d&&(0,b.jsxs)(i.Button,{variant:"ghost",onClick:d,className:"gap-2",children:[(0,b.jsx)(f.ArrowLeft,{className:"h-4 w-4"}),"Back"]}),(0,b.jsx)(i.Button,{variant:"ghost",onClick:a,children:"Skip"}),(0,b.jsx)(i.Button,{size:"lg",onClick:E,disabled:!D,className:"gap-2",children:w?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(h.Loader2,{className:"h-4 w-4 animate-spin"}),"Saving…"]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(u.FolderSymlink,{className:"h-4 w-4"}),"Continue"]})})]})]})}var _=a.i(75068),aa=a.i(7325),ab=a.i(42097),ac=a.i(22696),ad=a.i(34389);function ae({onNext:a,onBack:c}){return(0,b.jsx)(s,{title:"Messaging Channels",description:"Connect the apps you use to communicate with your agent. You can set up any combination — configure only the ones you need.",onNext:a,onBack:c,skipLabel:"Skip",maxWidth:"max-w-2xl",children:(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsx)(_.SlackCard,{}),(0,b.jsx)(aa.TelegramCard,{}),(0,b.jsx)(ab.DiscordCard,{}),(0,b.jsx)(ac.WhatsAppCard,{}),(0,b.jsx)(ad.DestinationSelector,{})]})})}var af=a.i(303),ag=a.i(52597),ah=a.i(70642),ai=a.i(99201),aj=a.i(1041),ak=a.i(29629),al=a.i(7037),am=a.i(95024),an=a.i(6465);function ao(a){}function ap(){}function aq({mode:a,agentDisplayName:d,onComplete:f,onBack:g,pendingVaultMode:j,pendingVaultPath:k}){let{data:o}=(0,m.useConfig)(),{messages:p,restoredMessages:q,setRestoredMessages:r,streaming:s,toolProgress:t,sessionInfo:u,sendMessage:v}=(0,af.useChat)({disableHistory:!0}),w=(0,c.useMemo)(()=>[...q,...p],[q,p]),x=(0,n.useQueryClient)(),y=(0,c.useRef)(null),z=(0,c.useRef)(!1),A=(0,c.useRef)(!1),[B,C]=(0,c.useState)(null),[D,E]=(0,c.useState)(!1),[F,G]=(0,c.useState)(""),[H,I]=(0,c.useState)(!1),[J,K]=(0,c.useState)(!1),[L,M]=(0,c.useState)(null),[N,O]=(0,c.useState)(null),[P,Q]=(0,c.useState)(0),R=(0,c.useRef)(s);(0,c.useEffect)(()=>{R.current=s},[s]);let[S,T]=(0,c.useState)("update"===a),[U,V]=(0,c.useState)(!1),[W,X]=(0,c.useState)(null),[Y,Z]=(0,c.useState)(0),[$,_]=(0,c.useState)(""),[aa,ab]=(0,c.useState)(!1),[ac,ad]=(0,c.useState)(!1),ae="initial"===a?(0,e.normalizeAgentDisplayName)(d):o?.agentDisplayName??e.DEFAULT_AGENT_DISPLAY_NAME;(0,c.useEffect)(()=>{if(0===w.length)return;let a=w[w.length-1];("assistant"===a.role||"error"===a.role)&&K(!1)},[w]),(0,c.useEffect)(()=>{if(!J)return;let a=setTimeout(()=>K(!1),12e4);return()=>clearTimeout(a)},[J]);let ar=J||s;(0,c.useEffect)(()=>{let a=y.current;a&&(a.scrollTop=a.scrollHeight)},[w.length,t]),(0,c.useEffect)(()=>{var b;if("initial"!==a||S||A.current||W||!o)return;let c=function(a){if("plain"===a.pendingMode)return"obsidian"===a.currentMode?{kind:"migrate",mode:"plain",path:""}:{kind:"no_migration_needed"};let b=a.pendingPath.trim();return 0===b.length?{kind:"no_migration_needed"}:"obsidian"!==a.currentMode||a.currentPath!==b?{kind:"migrate",mode:"obsidian",path:b}:{kind:"no_migration_needed"}}({pendingMode:j??"plain",pendingPath:k??"",currentMode:"obsidian"===o.vaultMode?"obsidian":"plain",currentPath:o.primaryVaultPath??null});"no_migration_needed"===c.kind?T(!0):(A.current=!0,V(!0),X(null),l.api.post("/setup/migrate-context","plain"===(b={vaultMode:c.mode,primaryVaultPath:c.path}).vaultMode?{targetVaultMode:"plain",conflictPolicy:"abort"}:{targetVaultMode:"obsidian",targetVaultPath:b.primaryVaultPath.trim(),conflictPolicy:"abort"}).then(async()=>{await x.invalidateQueries({queryKey:["config"]}),await x.invalidateQueries({queryKey:["health"]}),T(!0)}).catch(a=>{a instanceof l.ApiError?X(a.body??{}):X({error:"internal_error",message:a instanceof Error?a.message:"Unexpected error."})}).finally(()=>{A.current=!1,V(!1)}))},[a,S,W,o,j,k,x,Y]),(0,c.useEffect)(()=>{if(z.current||!u?.channelId||!S)return;let b={},c=b.setupSessionMode===a&&"number"==typeof b.setupSessionId&&b.setupSessionId>0&&u.sessionId===b.setupSessionId?b.setupSessionId:null;if(null!==c){z.current=!0,(0,af.fetchSessionMessages)(c).then(a=>{r(a)}).catch(a=>{console.warn("[setup] failed to refetch resumed session history",a)});return}z.current=!0,M(null),K(!0),l.api.post("/setup/start",{channelId:u.channelId,mode:a,..."initial"===a?{agentDisplayName:ae}:{}}).catch(a=>{z.current=!1,M(a instanceof Error?a.message:"Failed to start setup"),K(!1)})},[u?.channelId,u?.sessionId,a,ae,P,S,r]),(0,c.useEffect)(()=>{"number"==typeof u?.sessionId&&ao({setupSessionId:u.sessionId,setupSessionMode:a})},[a,u?.sessionId]),(0,c.useEffect)(()=>{for(let a=w.length-1;a>=0;a--){let b=w[a];if("assistant"!==b.role)continue;let c=function(a){let b=a.match(/```management-rules\n([\s\S]*?)```/);return b?b[1].trim():null}(b.content);c&&(C(c),D||G(c));let d=function(a){let b=a.match(/```character\n([\s\S]*?)```/);return b?b[1].trim():null}(b.content);if(null===d||ac||(_(d),ab(!0)),c||null!==d)break}},[w,D,ac]),(0,c.useEffect)(()=>{B&&!aa&&(_(o?.character??""),ab(!0))},[B,aa,o?.character]);let as=(0,c.useCallback)(async()=>{let b=D?F:B;if(!b)return;let c=$.trim();if((0,an.isCharacterOverCap)(c))return void O("Character exceeds the 1000-character cap.");I(!0),O(null);try{let d=Date.now()+15e3;for(;R.current&&Date.now()<d;)await new Promise(a=>setTimeout(a,100));let e=o?.character??"";aa&&c!==e&&await l.api.patch("/config",{character:c}),await l.api.post("/setup/save-rules",{content:b,..."initial"===a?{agentDisplayName:ae}:{},..."number"==typeof u?.sessionId?{sessionId:u.sessionId}:{}}),x.setQueryData(["setup-status"],{needsSetup:!1,completedAt:new Date().toISOString()}),x.invalidateQueries({queryKey:["config"]}),x.invalidateQueries({queryKey:["health"]}),ap(),f()}catch(a){O(a instanceof Error?a.message:"Failed to save rules")}finally{I(!1)}},[D,F,B,$,aa,o?.character,x,f,a,ae,u?.sessionId]),at=(0,c.useCallback)(a=>{v(a),K(!0)},[v]),au=(0,c.useCallback)(a=>{v(a),K(!0)},[v]),av=[...w].reverse().find(a=>"assistant"===a.role),aw=av&&!ar?function(a){let b=[];for(let c of a.split("\n")){let a=c.match(/^- \*\*(.+?)\*\*/);a&&b.push(a[1])}return b.length>=2&&b.length<=8?b:[]}(av.content):[];return(0,b.jsxs)("div",{className:"mx-auto flex h-full w-full max-w-4xl flex-col",children:[(0,b.jsxs)("div",{className:"space-y-1 px-4 pt-4 text-center",children:[(0,b.jsx)("h2",{className:"text-xl font-semibold",children:"initial"===a?"Customize Your Rules":"Update Management Rules"}),(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:"initial"===a?"Answer a few more questions and the agent will generate your management rules.":"Review the current rules and let us know what you'd like to change."})]}),U&&(0,b.jsx)(ak.Alert,{className:"mx-4 mt-4 rounded-lg px-4 py-3 text-sm",children:(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)(h.Loader2,{className:"h-4 w-4 animate-spin"}),(0,b.jsx)("span",{children:"Setting up your vault…"})]})}),W&&!U&&(0,b.jsx)(ak.Alert,{variant:"error",className:"mx-4 mt-4 rounded-lg px-4 py-3 text-sm",children:(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3 w-full",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium",children:"Could not set up your vault"}),(0,b.jsx)("p",{className:"mt-0.5",children:W.message})]}),(0,b.jsxs)("div",{className:"flex shrink-0 gap-2",children:[g&&(0,b.jsx)(i.Button,{size:"sm",variant:"ghost",onClick:g,children:"Back"}),(0,b.jsx)(i.Button,{size:"sm",variant:"outline",onClick:()=>{X(null),Z(a=>a+1)},children:"Retry"})]})]})}),L&&(0,b.jsx)(ak.Alert,{variant:"error",className:"mx-4 mt-4 rounded-lg px-4 py-3 text-sm",children:(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 w-full",children:[(0,b.jsx)("span",{children:L}),(0,b.jsx)(i.Button,{size:"sm",variant:"outline",onClick:()=>Q(a=>a+1),children:"Retry"})]})}),(0,b.jsx)(aj.ScrollArea,{ref:y,className:"flex-1 px-4 py-4",children:(0,b.jsxs)("div",{className:"space-y-4",children:[w.map(a=>(0,b.jsx)(ag.MessageBubble,{message:"assistant"===a.role?{...a,content:a.content.replace(/```management-rules\n[\s\S]*?```/g,"_(management rules preview shown below ↓)_").replace(/```character\n[\s\S]*?```/g,"_(character preview shown below ↓)_").trim()}:a,assistantLabel:ae},a.id)),(0,b.jsx)(ah.ToolProgress,{items:t}),ar&&(0,b.jsx)("div",{className:"flex justify-start",children:(0,b.jsx)("span",{className:"inline-block h-5 w-1 animate-pulse rounded-full bg-foreground"})}),0===w.length&&!ar&&!L&&!U&&!W&&(0,b.jsx)("div",{className:"flex flex-col items-center justify-center py-16 text-muted-foreground",children:(0,b.jsx)("p",{className:"text-sm",children:"Preparing setup..."})})]})}),aw.length>0&&!B&&(0,b.jsx)("div",{className:"flex flex-wrap gap-2 border-t border-border bg-muted/30 px-4 py-3",children:aw.map(a=>(0,b.jsx)(i.Button,{size:"sm",variant:"outline",onClick:()=>at(a),disabled:ar,className:"text-xs",children:a},a))}),B&&(0,b.jsxs)("div",{className:"border-t border-border bg-muted/30 px-4 py-4 space-y-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("h3",{className:"text-sm font-medium",children:"Management Rules Preview"}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[ar&&!H&&(0,b.jsxs)("span",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[(0,b.jsx)(h.Loader2,{className:"h-3 w-3 animate-spin"}),"Finalizing your profile…"]}),(0,b.jsxs)(i.Button,{size:"sm",variant:"ghost",onClick:()=>{D&&G(B),E(!D)},className:"gap-1 text-xs",children:[(0,b.jsx)(al.Pencil,{className:"h-3 w-3"}),D?"Cancel":"Edit"]}),(0,b.jsx)(i.Button,{size:"sm",onClick:as,disabled:H||(0,an.isCharacterOverCap)($),className:"gap-1",children:H?"Saving...":(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(am.Save,{className:"h-3.5 w-3.5"}),"Save & Finish"]})})]})]}),N&&(0,b.jsx)(ak.Alert,{variant:"error",children:N}),D?(0,b.jsx)("textarea",{value:F,onChange:a=>G(a.target.value),className:"w-full rounded-md border border-input bg-background p-3 font-mono text-xs leading-relaxed focus:outline-none focus:ring-2 focus:ring-ring",rows:16}):(0,b.jsx)("pre",{className:"max-h-96 overflow-auto rounded-md border border-border bg-background p-3 text-xs leading-relaxed",children:B}),(0,b.jsxs)("div",{className:"space-y-2 border-t border-border/60 pt-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"text-sm font-medium",children:"Character"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:"How the agent should talk to you — tone, language, formality. Applies across every session and backend. Leave blank to skip."})]}),(0,b.jsx)(an.CharacterEditor,{value:$,onChange:a=>{_(a),ad(!0),aa||ab(!0)},disabled:H,rows:4})]})]}),!H&&(0,b.jsx)(ai.ChatInput,{onSend:au,disabled:ar||0===w.length})]})}var ar=a.i(82687),as=a.i(45952);function at({mode:a,agentDisplayName:c}){let e=(0,d.useRouter)();return(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-8 py-16 text-center",children:[(0,b.jsx)("div",{className:"rounded-full bg-emerald-100 p-6 dark:bg-emerald-950",children:(0,b.jsx)(ar.CheckCircle2,{className:"h-12 w-12 text-emerald-600 dark:text-emerald-400"})}),(0,b.jsxs)("div",{className:"max-w-md space-y-3",children:[(0,b.jsx)("h1",{className:"text-2xl font-bold text-foreground",children:"initial"===a?"Setup Complete":"Rules Updated"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"initial"===a?`${c} is ready to manage your schedule and tasks.`:"Management Rules have been updated. Changes take effect immediately."})]}),(0,b.jsxs)("div",{className:"flex gap-3",children:[(0,b.jsxs)(i.Button,{variant:"outline",onClick:()=>e.push("/memory"),className:"gap-2",children:[(0,b.jsx)(as.FileText,{className:"h-4 w-4"}),"View Management Rules"]}),(0,b.jsxs)(i.Button,{onClick:()=>e.push("/"),className:"gap-2",children:["Go to Overview",(0,b.jsx)(g.ArrowRight,{className:"h-4 w-4"})]})]})]})}let au=["basics","vault","backend","mail","calendar","note","messaging","rules","complete"],av={basics:"Basics",vault:"Vault",backend:"AI Backend",mail:"Mail",calendar:"Calendar",note:"Note",messaging:"Messaging",rules:"Rules",complete:"Done"};function aw(){var a;let f="update"===(0,d.useSearchParams)().get("mode")?"update":"initial",{data:g}=(0,m.useConfig)(),[h,i]=(0,c.useState)(()=>"update"===f?"rules":(void 0)??"basics"),[j,k]=(0,c.useState)(()=>"update"===f?e.DEFAULT_AGENT_DISPLAY_NAME:(void 0)??""),[l,n]=(0,c.useState)(()=>"initial"===f?(void 0)??null:null),o=(a=g?.vaultMode,null!==l?l:"obsidian"===a?"obsidian":"plain"),[p,q]=(0,c.useState)(()=>"initial"===f?(void 0)??"":"");(0,c.useEffect)(()=>{"update"!==f&&ao({step:h,agentDisplayName:j,modeOverride:l,pendingVaultPath:p||null})},[f,h,j,l,p]),(0,c.useEffect)(()=>{"complete"===h&&ap()},[h]);let r=(0,c.useRef)(null);(0,c.useEffect)(()=>{r.current?.scrollTo(0,0)},[h]);let s=(0,c.useMemo)(()=>(function(a=au){return[...a]})(),[]),u=()=>{let a=s.indexOf(h);a<s.length-1&&i(s[a+1])},v=s.indexOf(h),x="initial"===f&&v>0&&"complete"!==h?()=>i(s[v-1]):void 0;return(0,b.jsxs)("div",{className:"flex h-full flex-col",children:["initial"===f&&"complete"!==h&&(0,b.jsx)("div",{className:"flex items-center justify-center gap-1 border-b border-border bg-muted/30 px-4 py-3",children:s.filter(a=>"complete"!==a).map((a,c)=>{let d=s.indexOf(a),e=a===h,f=d<v;return(0,b.jsxs)("div",{className:"flex items-center gap-1",children:[c>0&&(0,b.jsx)("div",{className:(0,w.cn)("h-px w-6",f?"bg-primary":"bg-border")}),(0,b.jsxs)("div",{className:(0,w.cn)("flex items-center gap-1.5 rounded-full px-3 py-1 text-xs font-medium transition-colors",e?"bg-primary text-primary-foreground":f?"bg-primary/10 text-primary":"text-muted-foreground"),children:[(0,b.jsx)("span",{className:(0,w.cn)("flex h-5 w-5 items-center justify-center rounded-full text-[10px]",e?"bg-primary-foreground/20":f?"bg-primary/20":"bg-muted"),children:f?"✓":c+1}),av[a]]})]},a)})}),(0,b.jsxs)("div",{ref:r,className:"flex-1 overflow-y-auto",children:["basics"===h&&(0,b.jsx)(t,{agentDisplayName:j,onAgentDisplayNameChange:k,onNext:u}),"vault"===h&&(0,b.jsx)(y,{onNext:u,onBack:x,pendingVaultMode:o,onPendingVaultModeChange:a=>{n(a)},pendingVaultPath:p,onPendingVaultPathChange:q}),"backend"===h&&(0,b.jsx)(M,{onNext:u,onBack:x}),"mail"===h&&(0,b.jsx)(Y,{onNext:u,onBack:x}),"calendar"===h&&(0,b.jsx)(Z,{onNext:u,onBack:x}),"note"===h&&(0,b.jsx)($,{onNext:u,onBack:x}),"messaging"===h&&(0,b.jsx)(ae,{onNext:u,onBack:x}),"rules"===h&&(0,b.jsx)(aq,{mode:f,agentDisplayName:j,onComplete:()=>i("complete"),onBack:x,pendingVaultMode:o,pendingVaultPath:p}),"complete"===h&&(0,b.jsx)(at,{mode:f,agentDisplayName:j||e.DEFAULT_AGENT_DISPLAY_NAME})]})]})}a.s(["default",0,function(){return(0,b.jsx)(c.Suspense,{children:(0,b.jsx)(aw,{})})}],37118)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=packages_dashboard_src_app_setup_page_tsx_06k3via._.js.map
|