@aitne/dashboard 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/diagnostics/route-bundle-stats.json +210 -247
- package/.next/fallback-build-manifest.json +3 -3
- 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 +14 -14
- package/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +9 -9
- 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 +1 -1
- 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 +27 -26
- package/.next/server/app/activity.segments/_full.segment.rsc +27 -26
- package/.next/server/app/activity.segments/_head.segment.rsc +4 -4
- package/.next/server/app/activity.segments/_index.segment.rsc +9 -9
- package/.next/server/app/activity.segments/_tree.segment.rsc +1 -1
- 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 +22 -23
- package/.next/server/app/analytics.segments/_full.segment.rsc +22 -23
- package/.next/server/app/analytics.segments/_head.segment.rsc +4 -4
- package/.next/server/app/analytics.segments/_index.segment.rsc +9 -9
- package/.next/server/app/analytics.segments/_tree.segment.rsc +1 -1
- 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 +16 -16
- package/.next/server/app/chat.segments/_full.segment.rsc +16 -16
- package/.next/server/app/chat.segments/_head.segment.rsc +4 -4
- package/.next/server/app/chat.segments/_index.segment.rsc +9 -9
- package/.next/server/app/chat.segments/_tree.segment.rsc +1 -1
- 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 +17 -17
- package/.next/server/app/connections/calendar.segments/_full.segment.rsc +17 -17
- package/.next/server/app/connections/calendar.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/calendar.segments/_index.segment.rsc +9 -9
- package/.next/server/app/connections/calendar.segments/_tree.segment.rsc +1 -1
- 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 +15 -15
- package/.next/server/app/connections/journal.segments/_full.segment.rsc +15 -15
- package/.next/server/app/connections/journal.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/journal.segments/_index.segment.rsc +9 -9
- package/.next/server/app/connections/journal.segments/_tree.segment.rsc +1 -1
- 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 +17 -17
- package/.next/server/app/connections/knowledge.segments/_full.segment.rsc +17 -17
- package/.next/server/app/connections/knowledge.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge.segments/_index.segment.rsc +9 -9
- package/.next/server/app/connections/knowledge.segments/_tree.segment.rsc +1 -1
- 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 +17 -17
- package/.next/server/app/connections/mail.segments/_full.segment.rsc +17 -17
- package/.next/server/app/connections/mail.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/mail.segments/_index.segment.rsc +9 -9
- package/.next/server/app/connections/mail.segments/_tree.segment.rsc +1 -1
- 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 +17 -17
- package/.next/server/app/connections/mcp.segments/_full.segment.rsc +17 -17
- package/.next/server/app/connections/mcp.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/mcp.segments/_index.segment.rsc +9 -9
- package/.next/server/app/connections/mcp.segments/_tree.segment.rsc +1 -1
- 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 +17 -17
- package/.next/server/app/connections/messaging.segments/_full.segment.rsc +17 -17
- package/.next/server/app/connections/messaging.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/messaging.segments/_index.segment.rsc +9 -9
- package/.next/server/app/connections/messaging.segments/_tree.segment.rsc +1 -1
- 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 +17 -17
- package/.next/server/app/connections/repositories.segments/_full.segment.rsc +17 -17
- package/.next/server/app/connections/repositories.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/repositories.segments/_index.segment.rsc +9 -9
- package/.next/server/app/connections/repositories.segments/_tree.segment.rsc +1 -1
- 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 +15 -15
- package/.next/server/app/connections/routines.segments/_full.segment.rsc +15 -15
- package/.next/server/app/connections/routines.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/routines.segments/_index.segment.rsc +9 -9
- package/.next/server/app/connections/routines.segments/_tree.segment.rsc +1 -1
- 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 +15 -15
- package/.next/server/app/connections.segments/_full.segment.rsc +15 -15
- package/.next/server/app/connections.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections.segments/_index.segment.rsc +9 -9
- package/.next/server/app/connections.segments/_tree.segment.rsc +1 -1
- 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 +14 -14
- package/.next/server/app/conversations.segments/_full.segment.rsc +14 -14
- package/.next/server/app/conversations.segments/_head.segment.rsc +4 -4
- package/.next/server/app/conversations.segments/_index.segment.rsc +9 -9
- package/.next/server/app/conversations.segments/_tree.segment.rsc +1 -1
- 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 +16 -16
- package/.next/server/app/finance.segments/_full.segment.rsc +16 -16
- package/.next/server/app/finance.segments/_head.segment.rsc +4 -4
- package/.next/server/app/finance.segments/_index.segment.rsc +9 -9
- package/.next/server/app/finance.segments/_tree.segment.rsc +1 -1
- 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 +16 -16
- package/.next/server/app/git.segments/_full.segment.rsc +16 -16
- package/.next/server/app/git.segments/_head.segment.rsc +4 -4
- package/.next/server/app/git.segments/_index.segment.rsc +9 -9
- package/.next/server/app/git.segments/_tree.segment.rsc +1 -1
- 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 +16 -16
- package/.next/server/app/health.segments/_full.segment.rsc +16 -16
- package/.next/server/app/health.segments/_head.segment.rsc +4 -4
- package/.next/server/app/health.segments/_index.segment.rsc +9 -9
- package/.next/server/app/health.segments/_tree.segment.rsc +1 -1
- 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 +16 -16
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +16 -16
- package/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/server/app/index.segments/_index.segment.rsc +9 -9
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- 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 +17 -17
- package/.next/server/app/knowledge.segments/_full.segment.rsc +17 -17
- package/.next/server/app/knowledge.segments/_head.segment.rsc +4 -4
- package/.next/server/app/knowledge.segments/_index.segment.rsc +9 -9
- package/.next/server/app/knowledge.segments/_tree.segment.rsc +1 -1
- 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 +16 -16
- package/.next/server/app/reading.segments/_full.segment.rsc +16 -16
- package/.next/server/app/reading.segments/_head.segment.rsc +4 -4
- package/.next/server/app/reading.segments/_index.segment.rsc +9 -9
- package/.next/server/app/reading.segments/_tree.segment.rsc +1 -1
- 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 +16 -16
- package/.next/server/app/schedule.segments/_full.segment.rsc +16 -16
- package/.next/server/app/schedule.segments/_head.segment.rsc +4 -4
- package/.next/server/app/schedule.segments/_index.segment.rsc +9 -9
- package/.next/server/app/schedule.segments/_tree.segment.rsc +1 -1
- 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 +17 -17
- package/.next/server/app/settings/advanced.segments/_full.segment.rsc +17 -17
- package/.next/server/app/settings/advanced.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/advanced.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings/advanced.segments/_tree.segment.rsc +1 -1
- 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 +15 -15
- package/.next/server/app/settings/backends.segments/_full.segment.rsc +15 -15
- package/.next/server/app/settings/backends.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/backends.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings/backends.segments/_tree.segment.rsc +1 -1
- 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 +17 -17
- package/.next/server/app/settings/commands.segments/_full.segment.rsc +17 -17
- package/.next/server/app/settings/commands.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/commands.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings/commands.segments/_tree.segment.rsc +1 -1
- 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 +15 -15
- package/.next/server/app/settings/connections.segments/_full.segment.rsc +15 -15
- package/.next/server/app/settings/connections.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/connections.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings/connections.segments/_tree.segment.rsc +1 -1
- 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 +17 -17
- package/.next/server/app/settings/journal.segments/_full.segment.rsc +17 -17
- package/.next/server/app/settings/journal.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/journal.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings/journal.segments/_tree.segment.rsc +1 -1
- 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 +17 -17
- package/.next/server/app/settings/management.segments/_full.segment.rsc +17 -17
- package/.next/server/app/settings/management.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/management.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings/management.segments/_tree.segment.rsc +1 -1
- 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 +15 -15
- package/.next/server/app/settings/messaging.segments/_full.segment.rsc +15 -15
- package/.next/server/app/settings/messaging.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/messaging.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings/messaging.segments/_tree.segment.rsc +1 -1
- 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 +17 -17
- package/.next/server/app/settings/models.segments/_full.segment.rsc +17 -17
- package/.next/server/app/settings/models.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/models.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings/models.segments/_tree.segment.rsc +1 -1
- 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 +15 -15
- package/.next/server/app/settings/processes.segments/_full.segment.rsc +15 -15
- package/.next/server/app/settings/processes.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/processes.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings/processes.segments/_tree.segment.rsc +1 -1
- 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 +17 -17
- package/.next/server/app/settings/routines.segments/_full.segment.rsc +17 -17
- package/.next/server/app/settings/routines.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/routines.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings/routines.segments/_tree.segment.rsc +1 -1
- 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 +17 -17
- package/.next/server/app/settings/schedule.segments/_full.segment.rsc +17 -17
- package/.next/server/app/settings/schedule.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/schedule.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings/schedule.segments/_tree.segment.rsc +1 -1
- 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 +17 -17
- package/.next/server/app/settings/self-learning.segments/_full.segment.rsc +17 -17
- package/.next/server/app/settings/self-learning.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings/self-learning.segments/_tree.segment.rsc +1 -1
- 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.html +1 -1
- package/.next/server/app/settings.rsc +17 -17
- package/.next/server/app/settings.segments/_full.segment.rsc +17 -17
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- 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 +16 -16
- package/.next/server/app/setup.segments/_full.segment.rsc +16 -16
- package/.next/server/app/setup.segments/_head.segment.rsc +4 -4
- package/.next/server/app/setup.segments/_index.segment.rsc +9 -9
- package/.next/server/app/setup.segments/_tree.segment.rsc +1 -1
- 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 +16 -16
- package/.next/server/app/trip.segments/_full.segment.rsc +16 -16
- package/.next/server/app/trip.segments/_head.segment.rsc +4 -4
- package/.next/server/app/trip.segments/_index.segment.rsc +9 -9
- package/.next/server/app/trip.segments/_tree.segment.rsc +1 -1
- 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/chunks/05w9_next_dist_esm_build_templates_app-route_0~eezk6.js +3 -3
- package/.next/server/chunks/05w9_next_dist_esm_build_templates_app-route_0~eezk6.js.map +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0j~awob._.js → [root-of-the-server]__0dwxuh7._.js} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__04-hp3j._.js → [root-of-the-server]__0k7lkv6._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__0t26ngg._.js → [root-of-the-server]__0ngitfo._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__0t26ngg._.js.map → [root-of-the-server]__0ngitfo._.js.map} +1 -1
- package/.next/server/chunks/ssr/{_0pvc7ao._.js → _0370l.6._.js} +2 -2
- package/.next/server/chunks/ssr/{_0pvc7ao._.js.map → _0370l.6._.js.map} +1 -1
- package/.next/server/chunks/ssr/_04kt9.8._.js +3 -0
- package/.next/server/chunks/ssr/_04kt9.8._.js.map +1 -0
- package/.next/server/chunks/ssr/_060itkv._.js +3 -0
- package/.next/server/chunks/ssr/_060itkv._.js.map +1 -0
- package/.next/server/chunks/ssr/{_0pydxc8._.js → _083cqy.._.js} +2 -2
- package/.next/server/chunks/ssr/_083cqy.._.js.map +1 -0
- package/.next/server/chunks/ssr/{_0lm8td~._.js → _08mbdt1._.js} +2 -2
- package/.next/server/chunks/ssr/_08mbdt1._.js.map +1 -0
- package/.next/server/chunks/ssr/_0938p.1._.js +3 -0
- package/.next/server/chunks/ssr/_0938p.1._.js.map +1 -0
- package/.next/server/chunks/ssr/_0ff5qav._.js +3 -0
- package/.next/server/chunks/ssr/_0ff5qav._.js.map +1 -0
- package/.next/server/chunks/ssr/_0g2e834._.js +3 -0
- package/.next/server/chunks/ssr/_0g2e834._.js.map +1 -0
- package/.next/server/chunks/ssr/_0gp8d.p._.js +3 -0
- package/.next/server/chunks/ssr/_0gp8d.p._.js.map +1 -0
- package/.next/server/chunks/ssr/_0k2j6-t._.js +3 -0
- package/.next/server/chunks/ssr/_0k2j6-t._.js.map +1 -0
- package/.next/server/chunks/ssr/_0kq5x2k._.js +3 -0
- package/.next/server/chunks/ssr/_0kq5x2k._.js.map +1 -0
- package/.next/server/chunks/ssr/_0mk7dqt._.js +3 -0
- package/.next/server/chunks/ssr/_0mk7dqt._.js.map +1 -0
- package/.next/server/chunks/ssr/_0qgn2wv._.js +3 -0
- package/.next/server/chunks/ssr/_0qgn2wv._.js.map +1 -0
- package/.next/server/chunks/ssr/_0t-2u_i._.js +3 -0
- package/.next/server/chunks/ssr/_0t-2u_i._.js.map +1 -0
- package/.next/server/chunks/ssr/_0vn5_62._.js +5 -0
- package/.next/server/chunks/ssr/_0vn5_62._.js.map +1 -0
- package/.next/server/chunks/ssr/{_01aim8_._.js → _0z1gdb3._.js} +2 -2
- package/.next/server/chunks/ssr/{_01aim8_._.js.map → _0z1gdb3._.js.map} +1 -1
- package/.next/server/chunks/ssr/_0~4ta0s._.js +3 -0
- package/.next/server/chunks/ssr/_0~4ta0s._.js.map +1 -0
- package/.next/server/chunks/ssr/_0~5r_8s._.js +3 -0
- package/.next/server/chunks/ssr/_0~5r_8s._.js.map +1 -0
- package/.next/server/chunks/ssr/_13mk_9n._.js.map +1 -1
- 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_settings_advanced_page_tsx_0o~_885._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_advanced_page_tsx_0o~_885._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_shared_dist_index_0kuvow-.js +2 -2
- 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/00qqwuw5id.21.js +1 -0
- package/.next/static/chunks/0_yam4jvco3~t.js +1 -0
- package/.next/static/chunks/{107sryfaib58g.js → 0kjwfju1fsjkk.js} +1 -1
- package/.next/static/chunks/0yt4prt55bas4.js +11 -0
- package/.next/static/chunks/{0v2k5twh.h_g2.js → 10_4_2h602xzk.js} +3 -3
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/package.json +11 -11
- package/.next/server/chunks/ssr/_0-v4eqm._.js +0 -3
- package/.next/server/chunks/ssr/_0-v4eqm._.js.map +0 -1
- package/.next/server/chunks/ssr/_03ay~a6._.js +0 -3
- package/.next/server/chunks/ssr/_03ay~a6._.js.map +0 -1
- package/.next/server/chunks/ssr/_05ul8c5._.js +0 -3
- package/.next/server/chunks/ssr/_05ul8c5._.js.map +0 -1
- package/.next/server/chunks/ssr/_0_1u-~q._.js +0 -3
- package/.next/server/chunks/ssr/_0_1u-~q._.js.map +0 -1
- package/.next/server/chunks/ssr/_0ax_-cr._.js +0 -3
- package/.next/server/chunks/ssr/_0ax_-cr._.js.map +0 -1
- package/.next/server/chunks/ssr/_0czapf~._.js +0 -3
- package/.next/server/chunks/ssr/_0czapf~._.js.map +0 -1
- package/.next/server/chunks/ssr/_0dlwb-j._.js +0 -3
- package/.next/server/chunks/ssr/_0dlwb-j._.js.map +0 -1
- package/.next/server/chunks/ssr/_0dvtdxd._.js +0 -3
- package/.next/server/chunks/ssr/_0dvtdxd._.js.map +0 -1
- package/.next/server/chunks/ssr/_0h-sc1p._.js +0 -3
- package/.next/server/chunks/ssr/_0h-sc1p._.js.map +0 -1
- package/.next/server/chunks/ssr/_0k_zx~4._.js +0 -3
- package/.next/server/chunks/ssr/_0k_zx~4._.js.map +0 -1
- package/.next/server/chunks/ssr/_0kqlqn5._.js +0 -5
- package/.next/server/chunks/ssr/_0kqlqn5._.js.map +0 -1
- package/.next/server/chunks/ssr/_0lm8td~._.js.map +0 -1
- package/.next/server/chunks/ssr/_0pydxc8._.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/static/chunks/07k3fjq54671q.js +0 -1
- package/.next/static/chunks/0o6q9amhembht.js +0 -1
- package/.next/static/chunks/0pbah5-djvzuh.js +0 -11
- package/.next/static/chunks/0sz8178y9b-~6.js +0 -1
- package/LICENSE +0 -21
- /package/.next/server/chunks/{[root-of-the-server]__0j~awob._.js.map → [root-of-the-server]__0dwxuh7._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__04-hp3j._.js.map → [root-of-the-server]__0k7lkv6._.js.map} +0 -0
- /package/.next/static/{BS7xnS8j09zEzTFQ8HuEd → BoJYg5-EvFL480WsH6xGD}/_buildManifest.js +0 -0
- /package/.next/static/{BS7xnS8j09zEzTFQ8HuEd → BoJYg5-EvFL480WsH6xGD}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{BS7xnS8j09zEzTFQ8HuEd → BoJYg5-EvFL480WsH6xGD}/_ssgManifest.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/dashboard/src/lib/hooks/use-save-config.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/save.ts","../../../../../../packages/dashboard/src/lib/hooks/use-process-config.ts","../../../../../../packages/dashboard/src/lib/hooks/use-dirty-fields.ts","../../../../../../packages/shared/src/editable-config-keys.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/terminal.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/book-text.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/repeat.ts","../../../../../../packages/dashboard/src/components/settings/settings-navigation.tsx","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/clipboard-list.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/cpu.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/sliders-horizontal.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/user.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/undo-2.ts","../../../../../../packages/shared/src/advisor-models.ts","../../../../../../packages/dashboard/src/components/settings/settings-shell.tsx","../../../../../../packages/dashboard/src/components/settings/haiku-advisor-warning.tsx","../../../../../../packages/dashboard/src/lib/hooks/use-advisor.ts","../../../../../../packages/dashboard/src/components/settings/save-bar.tsx","../../../../../../packages/dashboard/src/components/settings/settings-content.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\nimport type { ConfigUpdateResponse } from \"@/lib/api-types\";\nimport type { SettingsToastState } from \"@/components/settings/settings-navigation\";\nimport type { EditableConfigKey } from \"@aitne/shared\";\n\nexport type ConfigValue =\n | string\n | number\n | boolean\n | string[]\n | Record<string, unknown>[]\n | null;\n\nexport type SaveFieldFn = (\n key: EditableConfigKey,\n value: ConfigValue,\n) => Promise<void>;\n\nexport function useSaveConfig() {\n const queryClient = useQueryClient();\n const [toast, setToast] = useState<SettingsToastState | null>(null);\n\n const showToast = useCallback(\n (type: SettingsToastState[\"type\"], message: string) => {\n setToast({ type, message });\n setTimeout(() => setToast(null), 4000);\n },\n [],\n );\n\n const interpret = useCallback(\n (res: ConfigUpdateResponse, successMessage: string) => {\n const warnings = Object.values(res.errors ?? {});\n if (warnings.length > 0) {\n showToast(\"warning\", warnings.join(\" \"));\n } else if (res.requiresRestart?.length > 0) {\n showToast(\n \"warning\",\n `Updated. Restart daemon for: ${res.requiresRestart.join(\", \")}`,\n );\n } else {\n showToast(\"success\", successMessage);\n }\n },\n [showToast],\n );\n\n const saveField = useCallback(\n async (key: EditableConfigKey, value: ConfigValue) => {\n try {\n const res = await api.patch<ConfigUpdateResponse>(\"/config\", {\n [key]: value,\n });\n queryClient.invalidateQueries({ queryKey: [\"config\"] });\n interpret(res, \"Setting updated\");\n } catch (e) {\n showToast(\n \"error\",\n `Failed to save: ${e instanceof Error ? e.message : \"Unknown error\"}`,\n );\n throw e;\n }\n },\n [queryClient, interpret, showToast],\n );\n\n const saveMultipleFields = useCallback(\n async (updates: Partial<Record<EditableConfigKey, ConfigValue>>) => {\n try {\n const res = await api.patch<ConfigUpdateResponse>(\"/config\", updates);\n queryClient.invalidateQueries({ queryKey: [\"config\"] });\n interpret(res, \"Settings updated\");\n } catch (e) {\n showToast(\n \"error\",\n `Failed to save: ${e instanceof Error ? e.message : \"Unknown error\"}`,\n );\n throw e;\n }\n },\n [queryClient, interpret, showToast],\n );\n\n /**\n * Lower-level PATCH /config — makes the API call and invalidates queries\n * but does NOT show a toast. Used by SettingsSaveBar which handles its\n * own feedback.\n */\n const patchConfig = useCallback(\n async (updates: Partial<Record<EditableConfigKey, ConfigValue>>) => {\n const res = await api.patch<ConfigUpdateResponse>(\"/config\", updates);\n queryClient.invalidateQueries({ queryKey: [\"config\"] });\n return res;\n },\n [queryClient],\n );\n\n return { toast, showToast, saveField, saveMultipleFields, patchConfig };\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Save\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/save\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Save = createLucideIcon('Save', [\n [\n 'path',\n {\n d: 'M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z',\n key: '1c8476',\n },\n ],\n ['path', { d: 'M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7', key: '1ydtos' }],\n ['path', { d: 'M7 3v4a1 1 0 0 0 1 1h7', key: 't51u73' }],\n]);\n\nexport default Save;\n","\"use client\";\n\nimport { useQuery } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\nimport type { ProcessConfigResponse } from \"@/lib/api-types\";\n\nexport function useProcessConfig(options?: { enabled?: boolean }) {\n return useQuery({\n queryKey: [\"process-config\"],\n queryFn: () => api.get<ProcessConfigResponse>(\"/process-config\"),\n enabled: options?.enabled ?? true,\n staleTime: 60_000,\n });\n}\n","\"use client\";\n\nimport {\n createContext,\n createElement,\n useCallback,\n useContext,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport type { EditableConfigKey } from \"@aitne/shared\";\nimport type { ConfigValue } from \"@/lib/hooks/use-save-config\";\n\n/** Deep-equal for ConfigValue (handles string[] by value). */\nfunction valuesEqual(a: ConfigValue, b: ConfigValue): boolean {\n if (a === b) return true;\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((v, i) => v === b[i]);\n }\n return false;\n}\n\ninterface DirtyFieldsContextValue {\n /** Map of keys with uncommitted draft values. */\n dirtyFields: Map<EditableConfigKey, ConfigValue>;\n /** Register (or update) a dirty value.\n * If `serverValue` is provided and matches `value`, the key is removed\n * from the dirty set instead (edit-back / toggle-back detection). */\n setDirty: (key: EditableConfigKey, value: ConfigValue, serverValue?: ConfigValue) => void;\n /** Remove a single key from the dirty set. */\n clearDirty: (key: EditableConfigKey) => void;\n /** Remove multiple keys from the dirty set. */\n clearDirtyKeys: (keys: EditableConfigKey[]) => void;\n /** Discard all uncommitted changes. */\n discardAll: () => void;\n /** Monotonically increasing counter — bumped on every discard so field\n * components can reset their local drafts via a key or effect. */\n discardGeneration: number;\n /** True when at least one field has an uncommitted change. */\n isDirty: boolean;\n /** Number of uncommitted fields. */\n dirtyCount: number;\n}\n\nconst DirtyFieldsContext = createContext<DirtyFieldsContextValue | null>(null);\n\n/**\n * Provides dirty-field tracking for batched settings save.\n * Mount once in the settings layout — consumed by `useDirtyFields()`.\n */\nexport function DirtyFieldsProvider({ children }: { children: ReactNode }) {\n const [dirtyFields, setDirtyFields] = useState<\n Map<EditableConfigKey, ConfigValue>\n >(() => new Map());\n const [discardGeneration, setDiscardGeneration] = useState(0);\n\n const setDirty = useCallback(\n (key: EditableConfigKey, value: ConfigValue, serverValue?: ConfigValue) => {\n setDirtyFields((prev) => {\n // If the new value matches the server value, remove from dirty\n // (edit-back / toggle-back detection).\n if (serverValue !== undefined && valuesEqual(value, serverValue)) {\n if (!prev.has(key)) return prev;\n const next = new Map(prev);\n next.delete(key);\n return next;\n }\n const next = new Map(prev);\n next.set(key, value);\n return next;\n });\n },\n [],\n );\n\n const clearDirty = useCallback((key: EditableConfigKey) => {\n setDirtyFields((prev) => {\n if (!prev.has(key)) return prev;\n const next = new Map(prev);\n next.delete(key);\n return next;\n });\n }, []);\n\n const clearDirtyKeys = useCallback((keys: EditableConfigKey[]) => {\n if (keys.length === 0) return;\n setDirtyFields((prev) => {\n if (!keys.some((k) => prev.has(k))) return prev;\n const next = new Map(prev);\n for (const key of keys) next.delete(key);\n return next;\n });\n }, []);\n\n const discardAll = useCallback(() => {\n setDirtyFields(new Map());\n setDiscardGeneration((g) => g + 1);\n }, []);\n\n const isDirty = dirtyFields.size > 0;\n const dirtyCount = dirtyFields.size;\n\n const value = useMemo<DirtyFieldsContextValue>(\n () => ({\n dirtyFields,\n setDirty,\n clearDirty,\n clearDirtyKeys,\n discardAll,\n discardGeneration,\n isDirty,\n dirtyCount,\n }),\n [dirtyFields, setDirty, clearDirty, clearDirtyKeys, discardAll, discardGeneration, isDirty, dirtyCount],\n );\n\n return createElement(DirtyFieldsContext.Provider, { value }, children);\n}\n\n/**\n * Returns the current discard generation counter, or 0 if outside a\n * DirtyFieldsProvider. Field components use this to reset local editing\n * state when the user clicks Discard in the save bar.\n */\nexport function useDiscardGeneration(): number {\n const ctx = useContext(DirtyFieldsContext);\n return ctx?.discardGeneration ?? 0;\n}\n\n/**\n * Access the dirty-fields context. Must be called inside `DirtyFieldsProvider`.\n *\n * Returns:\n * - `deferSaveFor(config)` — returns a `SaveFieldFn` with toggle-back detection\n * - `dv(key, serverValue)` — returns dirty value if it exists, else serverValue\n * - all raw context fields for the save bar\n */\nexport function useDirtyFields() {\n const ctx = useContext(DirtyFieldsContext);\n if (!ctx) {\n throw new Error(\"useDirtyFields must be used inside DirtyFieldsProvider\");\n }\n\n const { setDirty, dirtyFields } = ctx;\n\n /**\n * Returns a `SaveFieldFn` that compares against `serverConfig` to detect\n * toggle-back (editing a value back to the server value removes the dirty\n * entry instead of keeping a spurious one).\n *\n * The returned function is a new closure per call. Pages call this after\n * the `if (!config)` guard, so it cannot be wrapped in `useMemo` without\n * violating hooks rules. The allocation is negligible — field components\n * do not include `onSave` in any dependency array.\n */\n const deferSaveFor = useCallback(\n (serverConfig: object) => {\n return async (key: EditableConfigKey, value: ConfigValue) => {\n const serverValue = (serverConfig as Record<string, ConfigValue>)[key];\n setDirty(key, value, serverValue);\n };\n },\n [setDirty],\n );\n\n /** Return dirty value if it exists, else the server value. */\n const dv = useCallback(\n <T extends ConfigValue>(key: EditableConfigKey, serverValue: T): T => {\n if (dirtyFields.has(key)) {\n return dirtyFields.get(key) as T;\n }\n return serverValue;\n },\n [dirtyFields],\n );\n\n return {\n ...ctx,\n deferSaveFor,\n dv,\n };\n}\n","/**\n * Canonical list of config keys editable via the dashboard PATCH /config endpoint.\n *\n * Both the daemon (env-writer.ts) and the dashboard (useSaveConfig) import from here\n * so the set of accepted keys is enforced at compile time in both packages.\n */\n\nexport const EDITABLE_RUNTIME_KEY_TUPLE = [\n \"advisorEnabled\", \"advisorModel\",\n \"maxConcurrentSessions\", \"maxReactiveSessions\", \"delegatedProxyMaxConcurrent\", \"executeTimeoutMinutes\",\n // DELEGATED-TASK-MODE-DESIGN.md §17 — task-mode kill switch / quotas /\n // defaults. The heavy enable flag is Approve-tier semantically, but is\n // editable here too so the user can flip it from the dashboard once\n // they confirm the cost class.\n \"delegatedTaskModeEnabled\", \"delegatedTaskMaxPerDay\",\n \"delegatedTaskDefaultMaxToolCalls\", \"delegatedTaskDefaultMaxBudgetUsd\",\n \"delegatedTaskDefaultTimeoutMs\", \"delegatedTaskHeavyEnabled\",\n // DELEGATED-TASK-MODE-DESIGN.md §13 Phase 3 — three independent\n // optimization kill switches. Each defaults off (cache, pool) or on\n // (structured output) per the design doc; flipping any one does not\n // affect the others. See runtime-settings.ts for the per-field rationale.\n \"delegatedTaskStructuredOutputEnabled\",\n \"delegatedTaskSubprocessPoolEnabled\", \"delegatedTaskSubprocessPoolTtlSeconds\",\n \"delegatedTaskCacheEnabled\", \"delegatedTaskCacheTtlSeconds\",\n \"delegatedTaskCacheMaxEntries\",\n \"agentDisplayName\",\n \"character\",\n \"sessionTimeoutDmMinutes\", \"sessionTimeoutChannelMinutes\", \"sessionTimeoutDashboardMinutes\",\n \"historyInjectionMaxMessages\", \"historyInjectionMaxTokens\",\n \"historyOtherSurfaceWindowMinutes\",\n \"dmStalenessStrict\",\n \"proactiveForwardChannelTimelineEnabled\",\n \"proactiveForwardForceFreshSession\",\n \"timezone\", \"dayBoundaryHour\", \"hourlyCheckEnabled\", \"hourlyCheckIntervalMinutes\",\n \"hourlyCheckActiveStartHour\", \"hourlyCheckActiveEndHour\", \"hourlyCheckMinObservations\",\n // cost-reduction-structural §B — three-stage gate knobs.\n \"hourlyCheckGateMode\", \"hourlyCheckStage2Enabled\", \"hourlyCheckHeartbeatHours\",\n \"hourlyCheckLowSignalPendingCeiling\",\n \"authProbeDisabled\", \"authPreflightFreshnessMs\",\n \"maxNotificationsPerHour\", \"maxNotificationsPerDay\",\n \"quietHoursStart\", \"quietHoursEnd\", \"batchIntervalMinutes\", \"primaryPlatform\",\n \"defaultNotificationPlatforms\",\n \"slackOwnerUserId\", \"telegramOwnerChatId\", \"discordOwnerUserId\",\n \"whatsappEnabled\", \"whatsappOwnerPhone\", \"whatsappAuthDir\",\n \"disallowedTools\", \"allowedToolsOverride\",\n \"claudeExecutionPermissionMode\",\n \"codexExecutionPermissionMode\",\n \"geminiExecutionPermissionMode\",\n \"externalObsidianVaultPath\", \"externalObsidianVaultName\",\n // SETUP-FLOW-REDESIGN-PLAN §6.3 — kill switch for the external-vault\n // branch of `ObsidianWatcher`. Editable so the Notes step's \"Watch for\n // changes\" checkbox round-trips through `PATCH /api/config`.\n \"externalObsidianWatch\",\n \"obsidianDebounceSeconds\",\n // Management Mode — primary-vault fields introduced by the management-mode\n // redesign. Editable via the settings dialog once Phase 2's migration API\n // lands; Phase 1 persists values if set but enters degraded mode if unset\n // while vaultMode === \"obsidian\".\n \"primaryVaultPath\", \"primaryVaultName\",\n // gitRepos / gitWatchedRepos / githubRepos removed at the unified-\n // repositories cutover (docs/design/appendices/unified-repositories.md);\n // their data lives in the `repositories` DB table now. `gitAccounts`\n // stays — it is 1:N over rows.\n \"gitAccounts\",\n \"googleCalendarId\", \"notionDatabaseIds\",\n \"schedulePollIntervalSeconds\",\n // SCHEDULED-DM-IMPLEMENTATION-PLAN §3.6.1 / §6.6.1 — max delay budget\n // for scheduled.dm gate-acquisition before the briefing is dropped.\n \"maxBriefingDelayMinutes\",\n \"gitPollIntervalSeconds\", \"gitPushOverdueMinutes\", \"gitProjectUpdateDebounceMinutes\",\n \"notionPollIntervalSeconds\", \"calendarPollIntervalSeconds\",\n \"gmailPollIntervalSeconds\",\n \"githubPollIntervalSeconds\",\n \"mcpAutoProbeIntervalMinutes\",\n \"delegatedProbeIntervalMinutes\",\n \"enabledMailProviders\",\n \"mailPollIntervalSeconds\",\n \"mailIdleEnabled\",\n \"mailIdleInstabilityThreshold\",\n \"mailIdleFallbackRecoveryMinutes\",\n \"mailMaxMessagesPerPoll\",\n \"mailAuthFailureRetryHours\",\n \"hourlyObservationCharBudget\",\n // cost-reduction-structural §A — observation summarizer knobs.\n \"observationSummarizerEnabled\",\n \"observationSummarizerConcurrency\",\n \"observationSummarizerMaxCallsPerMinute\",\n \"observationSummarizerQueueLimit\",\n \"observationSummarizerTimeoutMs\",\n \"vipMailSenders\",\n \"outlookDeltaPageSize\",\n \"outlookGraphConcurrency\",\n \"imapReconnectBaseMs\",\n \"imapReconnectMaxMs\",\n \"autonomousDailyCostCapUsd\",\n \"autonomousMonthlyCostCapUsd\",\n // B-007 — primary language + vault mode selected at setup, editable later\n \"primaryLanguage\",\n \"vaultMode\",\n // Voice transcription opt-in (docs/design/appendices/voice-transcription.md).\n // Direct PATCH is rejected by the voice route — the dashboard goes through\n // POST /api/voice/install so the model download + auto-restart happen\n // atomically. Listed here so the env-writer / settings-merge plumbing\n // accepts the key on read-back.\n \"voiceTranscriptionEnabled\",\n] as const;\n\nexport const EDITABLE_BOOTSTRAP_KEY_TUPLE = [\n \"apiPort\",\n] as const;\n\nexport const RESTART_REQUIRED_KEY_TUPLE = [\n \"apiPort\",\n \"externalObsidianVaultName\", \"externalObsidianVaultPath\",\n // SETUP-FLOW-REDESIGN-PLAN §6.3 — the kill switch is read once at boot in\n // index.ts when ObsidianWatcher is registered; flipping it at runtime\n // updates the integrations.md Note Sources line (via applyConfigUpdates\n // chokepoint) but does NOT start/stop the live chokidar watcher. Surface\n // that honestly via the dashboard's restart-required badge — same posture\n // as `externalObsidianVaultPath` above, which has the same constraint.\n \"externalObsidianWatch\",\n \"primaryVaultPath\", \"primaryVaultName\",\n \"slackOwnerUserId\",\n \"telegramOwnerChatId\",\n \"discordOwnerUserId\",\n \"whatsappEnabled\", \"whatsappOwnerPhone\", \"whatsappAuthDir\",\n \"notionDatabaseIds\",\n \"gmailPollIntervalSeconds\",\n // DelegatedProbeObserver (DELEGATED-MODE-V2 §7.1) captures `intervalMs`\n // at construction time and registers a single setInterval — a hot PATCH\n // updates `config.delegatedProbeIntervalMinutes` but the timer keeps\n // firing on the old cadence until restart. Surface that honestly via\n // the dashboard's restart-required badge rather than silently ignoring\n // the change.\n \"delegatedProbeIntervalMinutes\",\n // GitWatcher / delegated Git cron / GitHubPoller capture their cadence in\n // constructors and bind it to timers. Runtime PATCH updates config storage,\n // but the live timers keep the old cadence until restart; flag honestly.\n \"gitPollIntervalSeconds\",\n \"githubPollIntervalSeconds\",\n // VoiceTranscriber binds `enabled` at construction time in index.ts;\n // toggling the flag at runtime does not affect the live transcriber until\n // the daemon restarts. The /api/voice/install path triggers the restart\n // automatically, but flag a manual PATCH honestly via the dashboard badge.\n \"voiceTranscriptionEnabled\",\n // ObservationSummarizerWorker reads these constructor-time options once\n // at startup (cost-reduction-structural §A): the worker is registered\n // only when `observationSummarizerEnabled=true` at boot, and concurrency\n // / per-call timeout / rate limit / queue cap are captured by the\n // worker constructor and bound to the running drain loops. A runtime\n // PATCH updates `settings`/`AgentConfig` storage but does not re-create\n // the worker — flag honestly via the restart badge so an operator that\n // bumped the rate limit knows the change isn't live yet.\n \"observationSummarizerEnabled\",\n \"observationSummarizerConcurrency\",\n \"observationSummarizerMaxCallsPerMinute\",\n \"observationSummarizerQueueLimit\",\n \"observationSummarizerTimeoutMs\",\n] as const;\n\nexport type EditableRuntimeKey = (typeof EDITABLE_RUNTIME_KEY_TUPLE)[number];\nexport type EditableBootstrapKey = (typeof EDITABLE_BOOTSTRAP_KEY_TUPLE)[number];\nexport type EditableConfigKey = EditableRuntimeKey | EditableBootstrapKey;\nexport type RestartRequiredKey = (typeof RESTART_REQUIRED_KEY_TUPLE)[number];\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Terminal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/terminal\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 Terminal = createLucideIcon('Terminal', [\n ['polyline', { points: '4 17 10 11 4 5', key: 'akl6gq' }],\n ['line', { x1: '12', x2: '20', y1: '19', y2: '19', key: 'q2wloq' }],\n]);\n\nexport default Terminal;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name BookText\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/book-text\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 BookText = createLucideIcon('BookText', [\n [\n 'path',\n {\n d: 'M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20',\n key: 'k3hazp',\n },\n ],\n ['path', { d: 'M8 11h8', key: 'vwpz6n' }],\n ['path', { d: 'M8 7h6', key: '1f0q6e' }],\n]);\n\nexport default BookText;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Repeat\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/repeat\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 Repeat = createLucideIcon('Repeat', [\n ['path', { d: 'm17 2 4 4-4 4', key: 'nntrym' }],\n ['path', { d: 'M3 11v-1a4 4 0 0 1 4-4h14', key: '84bu3i' }],\n ['path', { d: 'm7 22-4-4 4-4', key: '1wqhfi' }],\n ['path', { d: 'M21 13v1a4 4 0 0 1-4 4H3', key: '1rx37r' }],\n]);\n\nexport default Repeat;\n","\"use client\";\n\nimport { useCallback } from \"react\";\nimport Link from \"next/link\";\nimport { usePathname } from \"next/navigation\";\nimport {\n User,\n Clock,\n Cpu,\n Terminal,\n BookText,\n SlidersHorizontal,\n Repeat,\n ClipboardList,\n Sparkles,\n type LucideIcon,\n} from \"lucide-react\";\nimport type { EditableConfigKey } from \"@aitne/shared\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { cn } from \"@/lib/utils\";\nimport { useDirtyFields } from \"@/lib/hooks/use-dirty-fields\";\n\nexport type SettingsToastState = {\n type: \"success\" | \"error\" | \"warning\" | \"info\";\n message: string;\n};\n\ntype NavItem = {\n href: string;\n label: string;\n icon: LucideIcon;\n description: string;\n};\n\nconst NAV_ITEMS: NavItem[] = [\n {\n href: \"/settings\",\n label: \"Profile\",\n icon: User,\n description: \"Identity and time axis\",\n },\n {\n href: \"/settings/schedule\",\n label: \"Schedule\",\n icon: Clock,\n description: \"Hourly check, quiet hours, notifications\",\n },\n {\n href: \"/settings/routines\",\n label: \"Routines\",\n icon: Repeat,\n description: \"Per-cadence check rulebooks and custom cron routines\",\n },\n {\n href: \"/settings/self-learning\",\n label: \"Self-learning\",\n icon: Sparkles,\n description: \"Knowledge-map skill curation (Preview)\",\n },\n {\n href: \"/settings/management\",\n label: \"Management\",\n icon: ClipboardList,\n description: \"Source-of-truth bindings and managed tasks\",\n },\n {\n href: \"/settings/journal\",\n label: \"Journal\",\n icon: BookText,\n description: \"Daily journal format template and export redaction rules\",\n },\n {\n href: \"/settings/models\",\n label: \"Models\",\n icon: Cpu,\n description: \"Backends, routing, execution limits\",\n },\n {\n href: \"/settings/commands\",\n label: \"Commands\",\n icon: Terminal,\n description: \"Messaging shortcuts and custom prompts\",\n },\n {\n href: \"/settings/advanced\",\n label: \"Advanced\",\n icon: SlidersHorizontal,\n description: \"Safety, infrastructure, danger zone\",\n },\n];\n\n/**\n * Maps each settings page path to the deferred-save config keys displayed\n * on that page. Used to show per-page dirty indicators in the sidebar.\n *\n * KEEP IN SYNC: when adding or removing an EditableField / EditableBooleanField /\n * EditableArrayField with `onSave={deferSave}` on a settings page, update\n * this mapping. Missing keys won't cause errors but the dirty dot won't\n * appear for that field's page. Extraneous keys are harmless (the field\n * would need to be in the dirty map, which only happens via actual edits).\n */\nconst PAGE_KEYS: Record<string, readonly EditableConfigKey[]> = {\n \"/settings\": [\n \"agentDisplayName\", \"character\",\n \"primaryLanguage\",\n // `vaultMode` / `primaryVaultPath` are migration-only — handled by\n // ManagementModeSection's dialog, not defer-save, so they don't\n // participate in the page dirty-dot indicator.\n ],\n \"/settings/schedule\": [\n \"timezone\", \"dayBoundaryHour\",\n \"hourlyCheckEnabled\", \"hourlyCheckIntervalMinutes\",\n \"hourlyCheckActiveStartHour\", \"hourlyCheckActiveEndHour\", \"hourlyCheckMinObservations\",\n \"maxNotificationsPerHour\", \"maxNotificationsPerDay\",\n \"quietHoursStart\", \"quietHoursEnd\", \"batchIntervalMinutes\",\n \"defaultNotificationPlatforms\", \"primaryPlatform\",\n ],\n \"/settings/models\": [\n \"maxConcurrentSessions\", \"maxReactiveSessions\", \"delegatedProxyMaxConcurrent\", \"executeTimeoutMinutes\",\n \"sessionTimeoutDmMinutes\", \"sessionTimeoutChannelMinutes\", \"sessionTimeoutDashboardMinutes\",\n \"autonomousDailyCostCapUsd\",\n \"autonomousMonthlyCostCapUsd\",\n // advisorEnabled / advisorModel are managed by BackendsAndPlansSection (own save flow, not deferred)\n ],\n \"/settings/advanced\": [\n \"disallowedTools\", \"allowedToolsOverride\",\n \"obsidianDebounceSeconds\", \"schedulePollIntervalSeconds\", \"gitPollIntervalSeconds\",\n \"notionPollIntervalSeconds\", \"calendarPollIntervalSeconds\", \"gmailPollIntervalSeconds\",\n \"historyInjectionMaxMessages\", \"historyInjectionMaxTokens\", \"dmStalenessStrict\",\n \"apiPort\",\n \"authProbeDisabled\", \"authPreflightFreshnessMs\",\n ],\n};\n\nexport function SettingsNavigation() {\n const pathname = usePathname();\n const { dirtyFields } = useDirtyFields();\n\n /** Count how many dirty keys belong to a given page. */\n const dirtyCountForPage = useCallback(\n (href: string): number => {\n const keys = PAGE_KEYS[href];\n if (!keys) return 0;\n return keys.filter((k) => dirtyFields.has(k)).length;\n },\n [dirtyFields],\n );\n\n return (\n <nav\n aria-label=\"Settings sections\"\n className=\"w-full md:w-60 md:shrink-0\"\n >\n <ul className=\"flex flex-row gap-1 overflow-x-auto md:flex-col md:gap-0.5\">\n {NAV_ITEMS.map((item) => {\n const active =\n item.href === \"/settings\"\n ? pathname === item.href\n : pathname.startsWith(item.href);\n const Icon = item.icon;\n const pageDirtyCount = dirtyCountForPage(item.href);\n\n return (\n <li key={item.href}>\n <Link\n href={item.href}\n aria-current={active ? \"page\" : undefined}\n className={cn(\n \"group flex items-center gap-3 whitespace-nowrap rounded-lg px-3 py-2 text-sm transition-colors md:whitespace-normal\",\n active\n ? \"bg-primary/10 text-primary font-medium\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n )}\n >\n <Icon className=\"h-4 w-4 shrink-0\" />\n <span className=\"flex-1\">\n <span className=\"block\">\n {item.label}\n {pageDirtyCount > 0 && (\n <span\n className=\"ml-1.5 inline-block h-2 w-2 rounded-full bg-blue-500\"\n title={`${pageDirtyCount} unsaved change${pageDirtyCount !== 1 ? \"s\" : \"\"}`}\n />\n )}\n </span>\n <span\n className={cn(\n \"hidden text-[11px] font-normal md:block\",\n active\n ? \"text-primary/70\"\n : \"text-muted-foreground/70 group-hover:text-muted-foreground\",\n )}\n >\n {item.description}\n </span>\n </span>\n </Link>\n </li>\n );\n })}\n </ul>\n <div className=\"hidden md:block mt-4 px-3\">\n <kbd className=\"text-[10px] text-muted-foreground/60 font-mono\">\n {\"⌘K\"}\n </kbd>\n <span className=\"text-[10px] text-muted-foreground/60 ml-1.5\">\n Search settings\n </span>\n </div>\n </nav>\n );\n}\n\nexport function SettingsToast({\n toast,\n}: {\n toast: SettingsToastState | null;\n}) {\n if (!toast) {\n return null;\n }\n\n return (\n <Alert variant={toast.type} className=\"rounded-lg px-4 py-2.5 text-sm\">\n {toast.message}\n </Alert>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ClipboardList\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/clipboard-list\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 ClipboardList = createLucideIcon('ClipboardList', [\n ['rect', { width: '8', height: '4', x: '8', y: '2', rx: '1', ry: '1', key: 'tgr4d6' }],\n [\n 'path',\n {\n d: 'M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2',\n key: '116196',\n },\n ],\n ['path', { d: 'M12 11h4', key: '1jrz19' }],\n ['path', { d: 'M12 16h4', key: 'n85exb' }],\n ['path', { d: 'M8 11h.01', key: '1dfujw' }],\n ['path', { d: 'M8 16h.01', key: '18s6g9' }],\n]);\n\nexport default ClipboardList;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Cpu\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/cpu\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 Cpu = createLucideIcon('Cpu', [\n ['rect', { width: '16', height: '16', x: '4', y: '4', rx: '2', key: '14l7u7' }],\n ['rect', { width: '6', height: '6', x: '9', y: '9', rx: '1', key: '5aljv4' }],\n ['path', { d: 'M15 2v2', key: '13l42r' }],\n ['path', { d: 'M15 20v2', key: '15mkzm' }],\n ['path', { d: 'M2 15h2', key: '1gxd5l' }],\n ['path', { d: 'M2 9h2', key: '1bbxkp' }],\n ['path', { d: 'M20 15h2', key: '19e6y8' }],\n ['path', { d: 'M20 9h2', key: '19tzq7' }],\n ['path', { d: 'M9 2v2', key: '165o2o' }],\n ['path', { d: 'M9 20v2', key: 'i2bqo8' }],\n]);\n\nexport default Cpu;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name SlidersHorizontal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/sliders-horizontal\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 SlidersHorizontal = createLucideIcon('SlidersHorizontal', [\n ['line', { x1: '21', x2: '14', y1: '4', y2: '4', key: 'obuewd' }],\n ['line', { x1: '10', x2: '3', y1: '4', y2: '4', key: '1q6298' }],\n ['line', { x1: '21', x2: '12', y1: '12', y2: '12', key: '1iu8h1' }],\n ['line', { x1: '8', x2: '3', y1: '12', y2: '12', key: 'ntss68' }],\n ['line', { x1: '21', x2: '16', y1: '20', y2: '20', key: '14d8ph' }],\n ['line', { x1: '12', x2: '3', y1: '20', y2: '20', key: 'm0wm8r' }],\n ['line', { x1: '14', x2: '14', y1: '2', y2: '6', key: '14e1ph' }],\n ['line', { x1: '8', x2: '8', y1: '10', y2: '14', key: '1i6ji0' }],\n ['line', { x1: '16', x2: '16', y1: '18', y2: '22', key: '1lctlv' }],\n]);\n\nexport default SlidersHorizontal;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name User\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/user\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 User = createLucideIcon('User', [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2', key: '975kel' }],\n ['circle', { cx: '12', cy: '7', r: '4', key: '17ys0d' }],\n]);\n\nexport default User;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Undo2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/undo-2\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 Undo2 = createLucideIcon('Undo2', [\n ['path', { d: 'M9 14 4 9l5-5', key: '102s5s' }],\n ['path', { d: 'M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11', key: 'f3b9sd' }],\n]);\n\nexport default Undo2;\n","/**\n * Advisor model allowlist — single source of truth for which Claude\n * model IDs the Claude Agent SDK accepts as the `advisor_20260301`\n * server-side tool.\n *\n * The SDK ships its own substring-based allowlist (`zR6` / `w88` in\n * SDK 0.2.98) that currently matches only `*opus-4-6` and\n * `*sonnet-4-6`. Opus 4.7 is the daemon's preferred heavy main model\n * but is silently rejected by the SDK's advisor path — see\n * `docs/advisor.md` §\"SDK compatibility\" and the auto-memory entry\n * `project_advisor_sdk_constraint`.\n *\n * Three places must agree on this allowlist:\n * 1. `packages/daemon/src/settings/runtime-settings.ts`\n * — runtime-config zod refine\n * 2. `packages/daemon/src/api/routes/backends.ts`\n * — `PUT /api/backends/advisor` body schema\n * 3. `packages/dashboard/src/components/settings/backends-and-plans-section.tsx`\n * — dropdown filter + form fallback default\n *\n * Update them by bumping this list. The first element is the canonical\n * default surfaced when no model has been picked yet (preserved from\n * the prior triple-hardcoded value).\n *\n * Tests intentionally hardcode these IDs as fixtures\n * (`docs/maintenance.md` §\"Adding a model\" \"Pitfalls\"). Don't alias\n * test fixtures to this constant — the fixture stability is the point.\n */\nexport const ADVISOR_ALLOWED_MODELS = [\n \"claude-sonnet-4-6\",\n \"claude-opus-4-6\",\n] as const;\n\nexport type AdvisorModel = (typeof ADVISOR_ALLOWED_MODELS)[number];\n\n/** Default advisor model surfaced in the dashboard when no value is set. */\nexport const DEFAULT_ADVISOR_MODEL: AdvisorModel = ADVISOR_ALLOWED_MODELS[0];\n\nexport function isAdvisorModel(value: unknown): value is AdvisorModel {\n return (\n typeof value === \"string\"\n && (ADVISOR_ALLOWED_MODELS as readonly string[]).includes(value)\n );\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { DirtyFieldsProvider } from \"@/lib/hooks/use-dirty-fields\";\nimport { SettingsNavigation } from \"@/components/settings/settings-navigation\";\nimport { SettingsContent } from \"@/components/settings/settings-content\";\n\n/**\n * Top-level client wrapper for the settings layout.\n * Provides DirtyFieldsProvider to both the sidebar (SettingsNavigation)\n * and the content area (SettingsContent + SaveBar).\n *\n * The Cmd+K palette is mounted globally by `<LayoutShell>` so the\n * \"Ask docs…\" action (DOCS_QA_DASHBOARD_DESIGN.md §9) is reachable\n * from every page, not just the settings tree.\n */\nexport function SettingsShell({ children }: { children: ReactNode }) {\n return (\n <DirtyFieldsProvider>\n <div className=\"mx-auto flex max-w-7xl flex-col gap-6 p-6 md:flex-row md:items-start md:gap-8\">\n <aside className=\"md:sticky md:top-6\">\n <SettingsNavigation />\n </aside>\n <SettingsContent>{children}</SettingsContent>\n </div>\n </DirtyFieldsProvider>\n );\n}\n","\"use client\";\n\nimport { AlertTriangle, Info } from \"lucide-react\";\nimport { ADVISOR_ALLOWED_MODELS } from \"@aitne/shared\";\nimport { ApiError } from \"@/lib/api-client\";\nimport { useAdvisor } from \"@/lib/hooks/use-advisor\";\nimport { useProcessConfig } from \"@/lib/hooks/use-process-config\";\n\n/**\n * SDK gate (`zR6` in `@anthropic-ai/claude-agent-sdk` cli.js): the advisor\n * tool is only registered when the base model id contains one of the\n * `ADVISOR_ALLOWED_MODELS` substrings (today: `sonnet-4-6`, `opus-4-6`).\n * Anything else — any Haiku variant, older Sonnet/Opus, future unnamed\n * variants — is rejected with a stderr log and the advisor call becomes a\n * silent no-op.\n *\n * Substrings are derived from the shared allowlist so a registry bump\n * cascades here without a dashboard edit.\n */\nconst ADVISOR_ALLOWED_SUBSTRINGS = ADVISOR_ALLOWED_MODELS.map((m) =>\n m.replace(/^claude-/, \"\").toLowerCase(),\n);\n\nfunction isAdvisorCompatibleBase(modelId: string): boolean {\n const lower = modelId.toLowerCase();\n return ADVISOR_ALLOWED_SUBSTRINGS.some((s) => lower.includes(s));\n}\n\n/**\n * Processes where skipping advisor materially hurts quality. Low-stakes\n * observer-style flows (`schedule.approaching`, `calendar.change`) don't\n * really benefit from advisor consultation, so incompatibility there is\n * not worth escalating into a loud warning.\n *\n * If advisor-incompatible bindings only exist on low-stakes processes we\n * surface an `info` (muted) note instead of a full yellow warning.\n */\nconst HIGH_STAKES_PROCESS_KEYS = new Set([\n \"message.dm\",\n \"message.mention\",\n \"dashboard.chat\",\n \"agent.task\",\n \"routine.morning_routine\",\n \"routine.evening_review\",\n \"routine.weekly_review\",\n \"routine.monthly_review\",\n \"routine.hourly_check\",\n]);\n\n/**\n * Surface the silent no-op trap where a process is pinned to a model the\n * Claude Agent SDK will reject as an advisor base (Haiku, older variants,\n * future unnamed models) AND advisor is enabled in `backend_global_defaults`.\n *\n * Uses TanStack Query (shared `queryKey`s with `useBackends` / `useProcessConfig`)\n * so an edit on the Models page invalidates and re-evaluates this warning\n * without a page refresh.\n */\nexport function HaikuAdvisorWarning() {\n const advisorQuery = useAdvisor();\n const processQuery = useProcessConfig();\n\n // Multi-backend tables not yet provisioned (503) → silently hide. This is\n // the only case we swallow; other errors are surfaced as a muted note so\n // the user isn't misled about advisor state.\n const isMultiBackendUnavailable =\n (advisorQuery.error instanceof ApiError\n && advisorQuery.error.status === 503)\n || (processQuery.error instanceof ApiError\n && processQuery.error.status === 503);\n\n if (isMultiBackendUnavailable) return null;\n if (advisorQuery.isLoading || processQuery.isLoading) return null;\n\n if (advisorQuery.error || processQuery.error) {\n // Non-503 failure — we can't evaluate the invariant, so tell the user\n // rather than silently hiding the warning surface.\n return (\n <div\n role=\"status\"\n className=\"flex items-start gap-3 rounded-lg border border-border bg-muted/30 p-3 text-xs text-muted-foreground\"\n >\n <Info className=\"mt-0.5 h-4 w-4 flex-shrink-0\" aria-hidden=\"true\" />\n <span>\n Advisor compatibility check unavailable. Refresh the page or check\n the daemon logs if you rely on the advisor tool.\n </span>\n </div>\n );\n }\n\n const advisor = advisorQuery.data;\n const processConfigs = processQuery.data?.configs ?? [];\n\n if (!advisor?.enabled) return null;\n\n const incompatibleRows = processConfigs.filter(\n (row) => !isAdvisorCompatibleBase(row.mainModel),\n );\n if (incompatibleRows.length === 0) return null;\n\n const highStakes = incompatibleRows.filter((row) =>\n HIGH_STAKES_PROCESS_KEYS.has(row.processKey),\n );\n const lowStakes = incompatibleRows.filter(\n (row) => !HIGH_STAKES_PROCESS_KEYS.has(row.processKey),\n );\n\n // High-stakes banner: yellow warning with action guidance.\n if (highStakes.length > 0) {\n return (\n <div\n role=\"alert\"\n className=\"flex items-start gap-3 rounded-lg border border-yellow-500/40 bg-yellow-500/10 p-4 text-sm\"\n >\n <AlertTriangle\n className=\"mt-0.5 h-5 w-5 flex-shrink-0 text-yellow-600\"\n aria-hidden=\"true\"\n />\n <div className=\"space-y-1 [&>p]:max-w-prose\">\n <p className=\"font-medium text-yellow-900 dark:text-yellow-100\">\n Advisor-incompatible models on high-stakes processes\n </p>\n <p className=\"text-yellow-900/80 dark:text-yellow-100/80\">\n Advisor is enabled on{\" \"}\n <code className=\"rounded bg-yellow-500/20 px-1 py-0.5\">\n {advisor.model ?? \"(unset)\"}\n </code>\n , but the Claude Agent SDK only registers the{\" \"}\n <code>advisor_20260301</code> tool on base models whose id\n contains{\" \"}\n {ADVISOR_ALLOWED_SUBSTRINGS.map((s, i) => (\n <span key={s}>\n {i > 0 && (i === ADVISOR_ALLOWED_SUBSTRINGS.length - 1\n ? \" or \"\n : \", \")}\n <code>{s}</code>\n </span>\n ))}\n . The following processes are pinned to incompatible models and\n will silently skip advisor calls:\n </p>\n <p className=\"text-yellow-900/80 dark:text-yellow-100/80\">\n {highStakes.map((row, idx) => (\n <span key={row.processKey}>\n {idx > 0 && \", \"}\n <code className=\"rounded bg-yellow-500/20 px-1 py-0.5\">\n {row.processKey}\n </code>\n {\" → \"}\n <code className=\"rounded bg-yellow-500/20 px-1 py-0.5\">\n {row.mainModel}\n </code>\n </span>\n ))}\n </p>\n <p className=\"text-yellow-900/70 dark:text-yellow-100/70\">\n Either switch these processes to a Sonnet/Opus model above,\n or disable advisor on{\" \"}\n <a className=\"underline\" href=\"/settings/models\">\n /settings/models\n </a>\n .\n </p>\n {lowStakes.length > 0 && (\n <p className=\"text-yellow-900/60 dark:text-yellow-100/60\">\n ({lowStakes.length} additional low-stakes process\n {lowStakes.length === 1 ? \"\" : \"es\"} also incompatible.)\n </p>\n )}\n </div>\n </div>\n );\n }\n\n // Only low-stakes processes are incompatible → muted info note (not alarm).\n return (\n <div\n role=\"status\"\n className=\"flex items-start gap-3 rounded-lg border border-border bg-muted/30 p-3 text-xs text-muted-foreground\"\n >\n <Info className=\"mt-0.5 h-4 w-4 flex-shrink-0\" aria-hidden=\"true\" />\n <span>\n {lowStakes.length} low-stakes process\n {lowStakes.length === 1 ? \"\" : \"es\"} pinned to an advisor-incompatible\n model. Advisor is skipped there — usually harmless. (\n {lowStakes.map((r) => r.processKey).join(\", \")})\n </span>\n </div>\n );\n}\n","\"use client\";\n\nimport { useQuery } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\n\nexport interface AdvisorResponse {\n enabled: boolean;\n model: string | null;\n}\n\nexport function useAdvisor(options?: { enabled?: boolean }) {\n return useQuery({\n queryKey: [\"backends\", \"advisor\"],\n queryFn: () => api.get<AdvisorResponse>(\"/backends/advisor\"),\n enabled: options?.enabled ?? true,\n staleTime: 60_000,\n retry: false,\n });\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Save, Undo2 } from \"lucide-react\";\nimport { RESTART_REQUIRED_KEY_TUPLE } from \"@aitne/shared\";\nimport type { EditableConfigKey } from \"@aitne/shared\";\nimport { Button } from \"@/components/ui/button\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { useConfirm } from \"@/components/shared/confirm-dialog\";\nimport { useDirtyFields } from \"@/lib/hooks/use-dirty-fields\";\nimport { useSaveConfig, type ConfigValue } from \"@/lib/hooks/use-save-config\";\n\nconst RESTART_SET = new Set<string>(RESTART_REQUIRED_KEY_TUPLE);\n\nfunction isRestartRequired(key: EditableConfigKey): boolean {\n return RESTART_SET.has(key);\n}\n\n/**\n * Warns the user when they try to close the tab or navigate away externally\n * with unsaved settings changes.\n */\nfunction useBeforeUnloadGuard(isDirty: boolean) {\n useEffect(() => {\n if (!isDirty) return;\n const handler = (e: BeforeUnloadEvent) => {\n e.preventDefault();\n };\n window.addEventListener(\"beforeunload\", handler);\n return () => window.removeEventListener(\"beforeunload\", handler);\n }, [isDirty]);\n}\n\n/**\n * Intercepts clicks on `<a>` elements that navigate away from /settings/*\n * (e.g. the main sidebar links to /chat, /activity). Shows a native confirm\n * dialog; if cancelled, prevents the navigation.\n *\n * Uses capture phase so it fires before Next.js's Link click handler.\n */\nfunction useClientNavigationGuard(isDirty: boolean) {\n useEffect(() => {\n if (!isDirty) return;\n const handler = (e: MouseEvent) => {\n // Walk up from click target to find the nearest <a>\n const anchor = (e.target as HTMLElement).closest?.(\"a\");\n if (!anchor) return;\n const href = anchor.getAttribute(\"href\");\n if (!href) return;\n // Only guard navigations AWAY from settings\n if (href.startsWith(\"/settings\")) return;\n // External links are handled by beforeunload\n if (href.startsWith(\"http\")) return;\n // This is an in-app navigation leaving settings — confirm\n const ok = window.confirm(\n \"You have unsaved settings changes. Leave without saving?\",\n );\n if (!ok) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n document.addEventListener(\"click\", handler, true); // capture phase\n return () => document.removeEventListener(\"click\", handler, true);\n }, [isDirty]);\n}\n\n/**\n * Sticky bar rendered at the bottom of the settings content area.\n * Visible only when at least one field has been modified but not yet saved.\n */\nexport function SettingsSaveBar() {\n const { dirtyFields, dirtyCount, isDirty, discardAll, clearDirtyKeys } = useDirtyFields();\n const { patchConfig } = useSaveConfig();\n const confirmDialog = useConfirm();\n useBeforeUnloadGuard(isDirty);\n useClientNavigationGuard(isDirty);\n const [saving, setSaving] = useState(false);\n const [feedback, setFeedback] = useState<{\n type: \"success\" | \"error\" | \"warning\";\n message: string;\n } | null>(null);\n\n if (!isDirty && !feedback) return null;\n\n const restartKeys = [...dirtyFields.keys()].filter(isRestartRequired);\n\n const handleSave = async () => {\n if (restartKeys.length > 0) {\n const ok = await confirmDialog({\n title: \"Daemon restart required\",\n description: `This change requires a daemon restart to take effect. The agent will be unavailable for ~5 seconds.\\n\\nAffected: ${restartKeys.join(\", \")}`,\n confirmLabel: \"Save & restart\",\n variant: \"destructive\",\n });\n if (!ok) return;\n }\n\n setSaving(true);\n setFeedback(null);\n try {\n const updates = Object.fromEntries(dirtyFields) as Partial<\n Record<EditableConfigKey, ConfigValue>\n >;\n const res = await patchConfig(updates);\n\n const errors = Object.values(res.errors ?? {});\n if (errors.length > 0) {\n // Partial success: clear the keys that did succeed, keep the failed ones dirty.\n const updatedKeys = (res.updated ?? []) as EditableConfigKey[];\n if (updatedKeys.length > 0) {\n clearDirtyKeys(updatedKeys);\n }\n setFeedback({ type: \"error\", message: errors.join(\" \") });\n } else if (res.requiresRestart?.length > 0) {\n setFeedback({\n type: \"warning\",\n message: `Saved. Restart daemon for: ${res.requiresRestart.join(\", \")}`,\n });\n discardAll();\n } else {\n setFeedback({ type: \"success\", message: \"All settings saved\" });\n discardAll();\n setTimeout(() => setFeedback(null), 3000);\n }\n } catch (e) {\n setFeedback({\n type: \"error\",\n message: `Save failed: ${e instanceof Error ? e.message : \"Unknown error\"}`,\n });\n } finally {\n setSaving(false);\n }\n };\n\n const handleDiscard = () => {\n discardAll();\n setFeedback(null);\n };\n\n return (\n <div className=\"sticky bottom-0 z-30 -mx-6 mt-6 border-t border-border bg-background/95 backdrop-blur-sm px-6 py-3\">\n {feedback && (\n <Alert variant={feedback.type} className=\"mb-3\">\n {feedback.message}\n </Alert>\n )}\n {isDirty && (\n <div className=\"flex items-center justify-between gap-4\">\n <p className=\"text-sm text-muted-foreground\">\n {dirtyCount} unsaved change{dirtyCount !== 1 ? \"s\" : \"\"}\n {restartKeys.length > 0 && (\n <span className=\"ml-1 text-amber-600 dark:text-amber-400\">\n (restart required)\n </span>\n )}\n </p>\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleDiscard}\n disabled={saving}\n >\n <Undo2 className=\"h-3.5 w-3.5 mr-1\" />\n Discard\n </Button>\n <Button size=\"sm\" onClick={handleSave} disabled={saving}>\n <Save className=\"h-3.5 w-3.5 mr-1\" />\n {saving ? \"Saving...\" : \"Save\"}\n </Button>\n </div>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { HaikuAdvisorWarning } from \"@/components/settings/haiku-advisor-warning\";\nimport { SettingsSaveBar } from \"@/components/settings/save-bar\";\n\n/**\n * Inner content area for the settings layout.\n * Renders HaikuAdvisorWarning, page content, and the sticky save bar.\n * Must be rendered inside DirtyFieldsProvider (mounted in SettingsShell).\n */\nexport function SettingsContent({ children }: { children: ReactNode }) {\n return (\n <div className=\"min-w-0 flex-1 space-y-6\">\n <HaikuAdvisorWarning />\n {children}\n <SettingsSaveBar />\n </div>\n );\n}\n"],"names":["useSaveConfig","queryClient","toast","setToast","showToast","type","message","setTimeout","interpret","res","successMessage","warnings","Object","values","errors","length","join","requiresRestart","saveField","key","value","patch","invalidateQueries","queryKey","e","Error","saveMultipleFields","updates","patchConfig","useProcessConfig","options","queryFn","get","enabled","staleTime","valuesEqual","a","b","Array","isArray","every","v","i","DirtyFieldsContext","DirtyFieldsProvider","children","dirtyFields","setDirtyFields","Map","discardGeneration","setDiscardGeneration","setDirty","serverValue","prev","undefined","has","next","delete","set","clearDirty","clearDirtyKeys","keys","some","k","discardAll","g","isDirty","size","dirtyCount","Provider","useDiscardGeneration","ctx","useDirtyFields","deferSaveFor","serverConfig","dv","useAdvisor","retry"],"mappings":"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EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,sCIS8B,IFAM,CAAA,EAAA,uGEEM,CDAD,ADAA,CAAA,ACAI,EAAA,WCC5C,EJXD,IAAA,EAAA,EAAA,CAAA,CAAA,0BEQ6B,MAAO,CEAE,AFAF,AAClC,CAAC,CCAA,ADAA,AEAA,AHAA,CEAA,ACAA,AHAA,ACAA,CCAA,AFAA,AGAA,AFAA,CAAA,ACAA,AFAA,AGAA,CAAA,AFAA,ACAA,AFAA,CGAQ,ADAR,ADAA,ADAQ,CEAR,ADAQ,AEAA,AHAA,yDCAqE,CAAA,ADAH,CAAA,CAAA,aCCzD,CEAD,ADAI,CCAJ,ADAI,eDAkB,aAAiB,CAAK,CAAA,CAAA,CAAA,IAAK,QAAA,CAAU,CAAA,CAAA,WAC9D,UAAW,CCAM,ADAN,CAAA,ACAM,CDAN,ACAM,CDAN,ACAM,sBDCjB,yBAA2B,8CAE9B,CCAA,AFAF,CAAA,AEAE,AFAF,uBCA8B,CCAC,ADAD,CCAC,CAAI,ODCjC,CCAA,CAAA,ADAG,WAAY,CCAK,ADAL,CCAK,ADAL,CCAK,ADAL,CAAA,ACAK,UDAU,CCAG,ADAH,WAC3B,UAAW,CCAI,ADAJ,CAAA,ACAI,CAAA,ADAJ,CAAK,CCAD,CAAI,6BDCT,IAAA,UAAe,uCFjBzC,IAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,gBGQ0B,EAAA,OAAA,EAAiB,WFAa,CAAA,QEAQ,CAAA,YAC/C,CAAM,ACAsC,AFAhD,ADAO,CGAyC,ADAtC,ADAV,ADAO,MEAO,CDAO,ACAD,ACA4B,AHApC,CCAS,AEA2B,AHApC,AEAQ,CDAC,AEA2B,AHApC,AEAQ,CAAA,ADAC,AEA2B,CHA5B,ACAC,AEA2B,ADA5B,yCAChB,CCAE,AFAN,ACAU,IAAA,CAAA,EAAI,CDAM,AEAJ,ADAG,GAAA,GAAA,WAAkB,CAAA,ADAI,AEAP,CDAG,ADAI,AEAP,CFAO,AEAP,ADAG,CAAA,mBACvC,CDAA,ACAE,GAAI,CDAU,ACAJ,CDAI,ACAJ,CDAI,ACAJ,CDAI,ACAJ,CAAA,ADAI,ACAJ,CDAI,ACAJ,CDAI,ACAJ,CAAA,ADAI,KCAM,EAAA,CAAI,CAAA,CAAA,CAAA,KAAU,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAK,AAAL,QAAK,CAAU,CAAA,CAAA,YACnD,CAAK,ADAM,CAAA,ACAN,CAAA,ADAM,CCAN,ADAM,GCAF,CDAE,ACAG,GAAA,CDAH,ECAO,CAAA,CAAA,CAAA,CAAM,CAAA,GAAA,KAAU,CAAA,CAAA,CAAA,CAAA,AAAK,QAAA,CAAU,CAAA,CAAA,yEAE3C,CDAG,ACAH,CDAG,ACAH,CAAI,CDAD,ACAM,CDAN,ACAM,CDAN,ACAM,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,KAAU,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,AAAK,QAAA,CAAU,CAAA,CAAA,4BAC9B,CAAA,CAAA,CAAK,CAAA,GAAI,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,AAAK,QAAA,CAAU,CAAA,CAAA,YACjD,CDAU,ACAL,CDAK,ACAL,CDAK,ACAL,CDAK,ACAL,CDAK,ACAL,CAAA,ADAK,CCAL,ADAK,OCAQ,CAAA,CAAA,CAAA,CAAM,CAAA,GAAI,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,AAAK,QAAA,CAAU,CAAA,CAAA,4BAC7B,CAAA,CAAA,MAAU,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,AAAK,QAAA,CAAU,CAAA,GHjBpE,IAAA,EAAA,EAAA,CAAA,CAAA,OCQM,CAAA,AEAA,ACAA,AFAA,CCAA,AFAA,ACAA,AEAA,CAAA,AHAA,AEAA,ADAA,CEAA,ADAA,ADAA,ADAA,AEAA,CCAA,AFAA,ADAA,AEAA,CAAA,CAAA,EFAgB,CEAhB,CAAA,CAAA,MAAA,EFAiC,gBAAiB,CAAA,KEAQ,CAAA,GFCnD,CEAA,ADAA,CAAA,ACAA,IFAO,CGAyC,ADAtC,AFAH,CGAyC,ADAtC,AFAH,EAAK,OAAQ,IAAK,CEAD,ACAwB,AHAvB,ACAJ,CDAO,IAAK,CGAe,ADAf,ADAH,ADAG,CAAG,CGAY,GHAP,CGAO,AFAL,ACAL,AFAO,EAAA,CCAF,AEAK,GHAE,CCAE,ADAF,AGAF,EHAE,IAAS,CAAA,CAAA,EAAK,CGAD,AHAC,OAAA,CAAU,CAAA,CAAA,CAEnF,CCAD,ACAA,AFAC,CCAD,ACAA,AFAC,CAAA,ACAD,ACAA,CFAC,ACAD,ACAA,CDAQ,ADAP,AEAD,CAAA,AFAC,ACAO,CDCP,CAAA,ACAD,ACAA,AFCG,CCDH,ACAA,ADCA,ACAA,AFAM,CCDN,ACAA,ADCA,ACAA,CADA,ADAA,CAAQ,ACAR,CDAQ,ACAR,4EFEQ,CEAE,AFAF,ACAA,ODCP,CEAD,ADAA,ADAC,CCAD,ACAA,CAAA,ADAA,CCAA,ADAA,ADEA,CEFA,ADAQ,ACER,ADAA,ADAA,CCFQ,ACAR,AAEA,ADAA,ADAA,CEAA,ADAA,ADAA,CEAA,AFAA,ACAA,CAAA,ADAA,AEAA,CDAQ,ADAA,AEAR,CAAA,ADAQ,ADAA,CEAE,ADAF,ADAA,AAAE,CEAA,CAAA,AFAG,WAAY,CCAF,ADAE,AEAK,CFAL,ACAF,ACAO,EFAA,EEAA,CAAI,OFAM,CAAA,AEAA,CAAI,AFC5C,CCAA,ADAA,CCAA,ADAA,CAAA,ACAA,CAAA,ADAA,CCAA,ADAA,CCAQ,ADAA,CCAA,ADAA,CCAA,ADAA,AAAE,EAAG,CCAW,ADAC,CCAD,ADAC,CCAD,ADAC,CAAA,ACAD,CDAC,ACAD,CAAA,ADAC,CCAD,ADAC,CAAA,ACAD,CAAA,ADAC,CCAD,ADAC,CAAA,CAAA,ACAD,CAAA,ADAC,CAAA,ACAD,CDAM,UAAU,CAAA,AACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,AAAE,EAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAK,QAAA,CAAU,CAAA,CAAA,AAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,AAAE,EAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAK,QAAA,CAAU,CAAA,CAC3C,CAAA,CAAA,ADrBD,IAAA,EAAA,EAAA,CAAA,CAAA,OAaA,EAAA,EAAA,CAAA,CAAA,OACA9B,EAAAA,EAAAA,CA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","ignoreList":[1,5,6,7,9,10,11,12,13]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/dashboard/src/components/ui/card.tsx","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/trash-2.ts","../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-direction%401.1.1_%40types%2Breact%4019.2.14_react%4019.2.4/node_modules/%40radix-ui/react-direction/src/direction.tsx","../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-collection%401.1.7_%40types%2Breact-dom%4019.2.3_%40types%2Breact%4019.2.14__%40types%2Br_161926fa2509d0b7370b60b8bb4eb8b0/node_modules/%40radix-ui/react-collection/src/collection-legacy.tsx","../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-collection%401.1.7_%40types%2Breact-dom%4019.2.3_%40types%2Breact%4019.2.14__%40types%2Br_161926fa2509d0b7370b60b8bb4eb8b0/node_modules/%40radix-ui/react-collection/src/collection.tsx","../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-collection%401.1.7_%40types%2Breact-dom%4019.2.3_%40types%2Breact%4019.2.14__%40types%2Br_161926fa2509d0b7370b60b8bb4eb8b0/node_modules/%40radix-ui/react-collection/src/ordered-dictionary.ts","../../../../../../node_modules/.pnpm/%40radix-ui%2Bnumber%401.1.1/node_modules/%40radix-ui/number/src/number.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/refresh-cw.ts","../../../../../../packages/dashboard/src/lib/backend-ui.ts"],"sourcesContent":["import { cn } from \"@/lib/utils\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport type { HTMLAttributes } from \"react\";\n\nconst cardVariants = cva(\n \"rounded-xl border p-5 shadow-[0_1px_3px_rgb(0_0_0/0.04)]\",\n {\n variants: {\n tone: {\n default: \"border-border bg-card\",\n warning:\n \"border-amber-200 bg-amber-50/50 dark:border-amber-900 dark:bg-amber-950/30\",\n success:\n \"border-emerald-200 bg-emerald-50/50 dark:border-emerald-900 dark:bg-emerald-950/30\",\n error:\n \"border-red-200 bg-red-50/50 dark:border-red-900 dark:bg-red-950/30\",\n },\n interactive: {\n true: \"transition-shadow duration-150 hover:shadow-[0_4px_6px_rgb(0_0_0/0.06)]\",\n false: \"\",\n },\n },\n defaultVariants: { tone: \"default\", interactive: false },\n },\n);\n\nexport interface CardProps\n extends HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {}\n\nexport function Card({ className, tone, interactive, ...props }: CardProps) {\n return (\n <div className={cn(cardVariants({ tone, interactive }), className)} {...props} />\n );\n}\n\nexport function CardHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"mb-3 flex items-center justify-between\", className)} {...props} />;\n}\n\nexport function CardTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>) {\n return (\n <h3\n className={cn(\"text-lg font-semibold text-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport function CardStatLabel({\n className,\n ...props\n}: HTMLAttributes<HTMLHeadingElement>) {\n return (\n <h3\n className={cn(\"text-sm font-medium text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport function CardValue({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"text-3xl font-bold text-foreground\", className)} {...props} />;\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Trash2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/trash-2\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 Trash2 = createLucideIcon('Trash2', [\n ['path', { d: 'M3 6h18', key: 'd0wm0j' }],\n ['path', { d: 'M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6', key: '4alrt4' }],\n ['path', { d: 'M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2', key: 'v07s0e' }],\n ['line', { x1: '10', x2: '10', y1: '11', y2: '17', key: '1uufr5' }],\n ['line', { x1: '14', x2: '14', y1: '11', y2: '17', key: 'xtxkd' }],\n]);\n\nexport default Trash2;\n","import * as React from 'react';\n\ntype Direction = 'ltr' | 'rtl';\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\n/* -------------------------------------------------------------------------------------------------\n * Direction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DirectionProviderProps {\n children?: React.ReactNode;\n dir: Direction;\n}\nconst DirectionProvider: React.FC<DirectionProviderProps> = (props) => {\n const { dir, children } = props;\n return <DirectionContext.Provider value={dir}>{children}</DirectionContext.Provider>;\n};\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useDirection(localDir?: Direction) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || 'ltr';\n}\n\nconst Provider = DirectionProvider;\n\nexport {\n useDirection,\n //\n Provider,\n //\n DirectionProvider,\n};\n","import React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createSlot, type Slot } from '@radix-ui/react-slot';\n\ntype SlotProps = React.ComponentPropsWithoutRef<typeof Slot>;\ntype CollectionElement = HTMLElement;\ninterface CollectionProps extends SlotProps {\n scope: any;\n}\n\n// We have resorted to returning slots directly rather than exposing primitives that can then\n// be slotted like `<CollectionItem as={Slot}>\u2026</CollectionItem>`.\n// This is because we encountered issues with generic types that cannot be statically analysed\n// due to creating them dynamically via createCollection.\n\nfunction createCollection<ItemElement extends HTMLElement, ItemData = {}>(name: string) {\n /* -----------------------------------------------------------------------------------------------\n * CollectionProvider\n * ---------------------------------------------------------------------------------------------*/\n\n const PROVIDER_NAME = name + 'CollectionProvider';\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n\n type ContextValue = {\n collectionRef: React.RefObject<CollectionElement | null>;\n itemMap: Map<\n React.RefObject<ItemElement | null>,\n { ref: React.RefObject<ItemElement | null> } & ItemData\n >;\n };\n\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext<ContextValue>(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: new Map() }\n );\n\n const CollectionProvider: React.FC<{ children?: React.ReactNode; scope: any }> = (props) => {\n const { scope, children } = props;\n const ref = React.useRef<CollectionElement>(null);\n const itemMap = React.useRef<ContextValue['itemMap']>(new Map()).current;\n return (\n <CollectionProviderImpl scope={scope} itemMap={itemMap} collectionRef={ref}>\n {children}\n </CollectionProviderImpl>\n );\n };\n\n CollectionProvider.displayName = PROVIDER_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionSlot\n * ---------------------------------------------------------------------------------------------*/\n\n const COLLECTION_SLOT_NAME = name + 'CollectionSlot';\n\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef<CollectionElement, CollectionProps>(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return <CollectionSlotImpl ref={composedRefs}>{children}</CollectionSlotImpl>;\n }\n );\n\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionItem\n * ---------------------------------------------------------------------------------------------*/\n\n const ITEM_SLOT_NAME = name + 'CollectionItemSlot';\n const ITEM_DATA_ATTR = 'data-radix-collection-item';\n\n type CollectionItemSlotProps = ItemData & {\n children: React.ReactNode;\n scope: any;\n };\n\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef<ItemElement, CollectionItemSlotProps>(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef<ItemElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...(itemData as unknown as ItemData) });\n return () => void context.itemMap.delete(ref);\n });\n\n return (\n <CollectionItemSlotImpl {...{ [ITEM_DATA_ATTR]: '' }} ref={composedRefs}>\n {children}\n </CollectionItemSlotImpl>\n );\n }\n );\n\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * useCollection\n * ---------------------------------------------------------------------------------------------*/\n\n function useCollection(scope: any) {\n const context = useCollectionContext(name + 'CollectionConsumer', scope);\n\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current!) - orderedNodes.indexOf(b.ref.current!)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n\n return getItems;\n }\n\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope,\n ] as const;\n}\n\nexport { createCollection };\nexport type { CollectionProps };\n","import React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createSlot, type Slot } from '@radix-ui/react-slot';\nimport type { EntryOf } from './ordered-dictionary';\nimport { OrderedDict } from './ordered-dictionary';\n\ntype SlotProps = React.ComponentPropsWithoutRef<typeof Slot>;\ntype CollectionElement = HTMLElement;\ninterface CollectionProps extends SlotProps {\n scope: any;\n}\n\ninterface BaseItemData {\n id?: string;\n}\n\ntype ItemDataWithElement<\n ItemData extends BaseItemData,\n ItemElement extends HTMLElement,\n> = ItemData & {\n element: ItemElement;\n};\n\ntype ItemMap<ItemElement extends HTMLElement, ItemData extends BaseItemData> = OrderedDict<\n ItemElement,\n ItemDataWithElement<ItemData, ItemElement>\n>;\n\nfunction createCollection<\n ItemElement extends HTMLElement,\n ItemData extends BaseItemData = BaseItemData,\n>(name: string) {\n /* -----------------------------------------------------------------------------------------------\n * CollectionProvider\n * ---------------------------------------------------------------------------------------------*/\n\n const PROVIDER_NAME = name + 'CollectionProvider';\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n\n type ContextValue = {\n collectionElement: CollectionElement | null;\n collectionRef: React.Ref<CollectionElement | null>;\n collectionRefObject: React.RefObject<CollectionElement | null>;\n itemMap: ItemMap<ItemElement, ItemData>;\n setItemMap: React.Dispatch<React.SetStateAction<ItemMap<ItemElement, ItemData>>>;\n };\n\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext<ContextValue>(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0,\n }\n );\n\n type CollectionState = [\n ItemMap: ItemMap<ItemElement, ItemData>,\n SetItemMap: React.Dispatch<React.SetStateAction<ItemMap<ItemElement, ItemData>>>,\n ];\n\n const CollectionProvider: React.FC<{\n children?: React.ReactNode;\n scope: any;\n state?: CollectionState;\n }> = ({ state, ...props }) => {\n return state ? (\n <CollectionProviderImpl {...props} state={state} />\n ) : (\n <CollectionInit {...props} />\n );\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n\n const CollectionInit: React.FC<{\n children?: React.ReactNode;\n scope: any;\n }> = (props) => {\n const state = useInitCollection();\n return <CollectionProviderImpl {...props} state={state} />;\n };\n CollectionInit.displayName = PROVIDER_NAME + 'Init';\n\n const CollectionProviderImpl: React.FC<{\n children?: React.ReactNode;\n scope: any;\n state: CollectionState;\n }> = (props) => {\n const { scope, children, state } = props;\n const ref = React.useRef<CollectionElement>(null);\n const [collectionElement, setCollectionElement] = React.useState<CollectionElement | null>(\n null\n );\n const composeRefs = useComposedRefs(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n\n React.useEffect(() => {\n if (!collectionElement) return;\n\n const observer = getChildListObserver(() => {\n // setItemMap((map) => {\n // const copy = new OrderedDict(map).toSorted(([, a], [, b]) =>\n // !a.element || !b.element ? 0 : isElementPreceding(a.element, b.element) ? -1 : 1\n // );\n // // check if the order has changed\n // let index = -1;\n // for (const entry of copy) {\n // index++;\n // const key = map.keyAt(index)!;\n // const [copyKey] = entry;\n // if (key !== copyKey) {\n // // order has changed!\n // return copy;\n // }\n // }\n // return map;\n // });\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true,\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n\n return (\n <CollectionContextProvider\n scope={scope}\n itemMap={itemMap}\n setItemMap={setItemMap}\n collectionRef={composeRefs}\n collectionRefObject={ref}\n collectionElement={collectionElement}\n >\n {children}\n </CollectionContextProvider>\n );\n };\n\n CollectionProviderImpl.displayName = PROVIDER_NAME + 'Impl';\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionSlot\n * ---------------------------------------------------------------------------------------------*/\n\n const COLLECTION_SLOT_NAME = name + 'CollectionSlot';\n\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef<CollectionElement, CollectionProps>(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return <CollectionSlotImpl ref={composedRefs}>{children}</CollectionSlotImpl>;\n }\n );\n\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionItem\n * ---------------------------------------------------------------------------------------------*/\n\n const ITEM_SLOT_NAME = name + 'CollectionItemSlot';\n const ITEM_DATA_ATTR = 'data-radix-collection-item';\n\n type CollectionItemSlotProps = ItemData & {\n children: React.ReactNode;\n scope: any;\n };\n\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef<ItemElement, CollectionItemSlotProps>(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef<ItemElement>(null);\n const [element, setElement] = React.useState<ItemElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n\n const { setItemMap } = context;\n\n const itemDataRef = React.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n\n React.useEffect(() => {\n const itemData = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n\n if (!map.has(element)) {\n map.set(element, { ...(itemData as unknown as ItemData), element });\n return map.toSorted(sortByDocumentPosition);\n }\n\n return map\n .set(element, { ...(itemData as unknown as ItemData), element })\n .toSorted(sortByDocumentPosition);\n });\n\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n\n return (\n <CollectionItemSlotImpl {...{ [ITEM_DATA_ATTR]: '' }} ref={composedRefs as any}>\n {children}\n </CollectionItemSlotImpl>\n );\n }\n );\n\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * useInitCollection\n * ---------------------------------------------------------------------------------------------*/\n\n function useInitCollection() {\n return React.useState<ItemMap<ItemElement, ItemData>>(new OrderedDict());\n }\n\n /* -----------------------------------------------------------------------------------------------\n * useCollection\n * ---------------------------------------------------------------------------------------------*/\n\n function useCollection(scope: any) {\n const { itemMap } = useCollectionContext(name + 'CollectionConsumer', scope);\n\n return itemMap;\n }\n\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection,\n };\n\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions,\n ] as const;\n}\n\nexport { createCollection };\nexport type { CollectionProps };\n\nfunction shallowEqual(a: any, b: any) {\n if (a === b) return true;\n if (typeof a !== 'object' || typeof b !== 'object') return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\n\nfunction isElementPreceding(a: Element, b: Element) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\n\nfunction sortByDocumentPosition<E extends HTMLElement, T extends BaseItemData>(\n a: EntryOf<ItemMap<E, T>>,\n b: EntryOf<ItemMap<E, T>>\n) {\n return !a[1].element || !b[1].element\n ? 0\n : isElementPreceding(a[1].element, b[1].element)\n ? -1\n : 1;\n}\n\nfunction getChildListObserver(callback: () => void) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList') {\n callback();\n return;\n }\n }\n });\n\n return observer;\n}\n","// Not a real member because it shouldn't be accessible, but the super class\n// calls `set` which needs to read the instanciation state, so it can't be a\n// private member.\nconst __instanciated = new WeakMap<OrderedDict<any, any>, boolean>();\nexport class OrderedDict<K, V> extends Map<K, V> {\n #keys: K[];\n\n constructor(iterable?: Iterable<readonly [K, V]> | null | undefined);\n constructor(entries?: readonly (readonly [K, V])[] | null) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n\n set(key: K, value: V) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n\n insert(index: number, key: K, value: V) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n\n if (safeIndex === this.size || (has && safeIndex === this.size - 1) || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n\n const size = this.size + (has ? 0 : 1);\n\n // If you insert at, say, -2, without this bit you'd replace the\n // second-to-last item and push the rest up one, which means the new item is\n // 3rd to last. This isn't very intuitive; inserting at -2 is more like\n // saying \"make this item the second to last\".\n if (relativeIndex < 0) {\n actualIndex++;\n }\n\n const keys = [...this.#keys];\n let nextValue: V | undefined;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i]!;\n if (keys[i] === key) {\n nextKey = keys[i + 1]!;\n }\n if (has) {\n // delete first to ensure that the item is moved to the end\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1]!;\n const currentValue = nextValue!;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n\n with(index: number, key: K, value: V) {\n const copy = new OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n\n before(key: K) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return undefined;\n }\n return this.entryAt(index);\n }\n\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key: K, newKey: K, value: V) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n\n after(key: K) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return undefined;\n }\n return this.entryAt(index);\n }\n\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key: K, newKey: K, value: V) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n\n first() {\n return this.entryAt(0);\n }\n\n last() {\n return this.entryAt(-1);\n }\n\n clear() {\n this.#keys = [];\n return super.clear();\n }\n\n delete(key: K) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n\n deleteAt(index: number) {\n const key = this.keyAt(index);\n if (key !== undefined) {\n return this.delete(key);\n }\n return false;\n }\n\n at(index: number) {\n const key = at(this.#keys, index);\n if (key !== undefined) {\n return this.get(key);\n }\n }\n\n entryAt(index: number): [K, V] | undefined {\n const key = at(this.#keys, index);\n if (key !== undefined) {\n return [key, this.get(key)!];\n }\n }\n\n indexOf(key: K) {\n return this.#keys.indexOf(key);\n }\n\n keyAt(index: number) {\n return at(this.#keys, index);\n }\n\n from(key: K, offset: number) {\n const index = this.indexOf(key);\n if (index === -1) {\n return undefined;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n\n keyFrom(key: K, offset: number) {\n const index = this.indexOf(key);\n if (index === -1) {\n return undefined;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n\n find(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => boolean,\n thisArg?: any\n ) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return undefined;\n }\n\n findIndex(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => boolean,\n thisArg?: any\n ) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n\n filter<KK extends K, VV extends V>(\n predicate: (entry: [K, V], index: number, dict: OrderedDict<K, V>) => entry is [KK, VV],\n thisArg?: any\n ): OrderedDict<KK, VV>;\n\n filter(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ): OrderedDict<K, V>;\n\n filter(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ) {\n const entries: Array<[K, V]> = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new OrderedDict(entries);\n }\n\n map<U>(\n callbackfn: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => U,\n thisArg?: any\n ): OrderedDict<K, U> {\n const entries: [K, U][] = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new OrderedDict(entries);\n }\n\n reduce(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V]\n ): [K, V];\n reduce(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V],\n initialValue: [K, V]\n ): [K, V];\n reduce<U>(\n callbackfn: (\n previousValue: U,\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n initialValue: U\n ): U;\n\n reduce<U>(\n ...args: [\n (\n previousValue: U,\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n U?,\n ]\n ) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0)!;\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry as any;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n\n reduceRight(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V]\n ): [K, V];\n reduceRight(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V],\n initialValue: [K, V]\n ): [K, V];\n reduceRight<U>(\n callbackfn: (\n previousValue: [K, V],\n currentValue: U,\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n initialValue: U\n ): U;\n\n reduceRight<U>(\n ...args: [\n (\n previousValue: U,\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n U?,\n ]\n ) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1)!;\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index)!;\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry as any;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n\n toSorted(compareFn?: (a: [K, V], b: [K, V]) => number): OrderedDict<K, V> {\n const entries = [...this.entries()].sort(compareFn);\n return new OrderedDict(entries);\n }\n\n toReversed(): OrderedDict<K, V> {\n const reversed = new OrderedDict<K, V>();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index)!;\n const element = this.get(key)!;\n reversed.set(key, element);\n }\n return reversed;\n }\n\n toSpliced(start: number, deleteCount?: number): OrderedDict<K, V>;\n toSpliced(start: number, deleteCount: number, ...items: [K, V][]): OrderedDict<K, V>;\n\n toSpliced(...args: [start: number, deleteCount: number, ...items: [K, V][]]) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new OrderedDict(entries);\n }\n\n slice(start?: number, end?: number) {\n const result = new OrderedDict<K, V>();\n let stop = this.size - 1;\n\n if (start === undefined) {\n return result;\n }\n\n if (start < 0) {\n start = start + this.size;\n }\n\n if (end !== undefined && end > 0) {\n stop = end - 1;\n }\n\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index)!;\n const element = this.get(key)!;\n result.set(key, element);\n }\n return result;\n }\n\n every(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n\n some(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n}\n\nexport type KeyOf<D extends OrderedDict<any, any>> =\n D extends OrderedDict<infer K, any> ? K : never;\nexport type ValueOf<D extends OrderedDict<any, any>> =\n D extends OrderedDict<any, infer V> ? V : never;\nexport type EntryOf<D extends OrderedDict<any, any>> = [KeyOf<D>, ValueOf<D>];\nexport type KeyFrom<E extends EntryOf<any>> = E[0];\nexport type ValueFrom<E extends EntryOf<any>> = E[1];\n\nfunction at<T>(array: ArrayLike<T>, index: number): T | undefined {\n if ('at' in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? undefined : array[actualIndex];\n}\n\nfunction toSafeIndex(array: ArrayLike<any>, index: number) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\n\nfunction toSafeInteger(number: number) {\n // eslint-disable-next-line no-self-compare\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n","function clamp(value: number, [min, max]: [number, number]): number {\n return Math.min(max, Math.max(min, value));\n}\n\nexport { clamp };\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name RefreshCw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/refresh-cw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RefreshCw = createLucideIcon('RefreshCw', [\n ['path', { d: 'M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8', key: 'v9h5vc' }],\n ['path', { d: 'M21 3v5h-5', key: '1q7to0' }],\n ['path', { d: 'M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16', key: '3uifl3' }],\n ['path', { d: 'M8 16H3v5', key: '1cv678' }],\n]);\n\nexport default RefreshCw;\n","import type { BackendId } from \"@aitne/shared\";\n\nexport const BACKEND_LABELS: Record<BackendId, string> = {\n claude: \"Claude Code\",\n codex: \"OpenAI Codex\",\n gemini: \"Gemini CLI\",\n};\n\nconst BACKEND_SHORT_LABELS: Record<BackendId, string> = {\n claude: \"Claude\",\n codex: \"Codex\",\n gemini: \"Gemini\",\n};\n\n/**\n * Provider-friendly labels for backend / API-key UIs. Users think in\n * terms of \"I have an Anthropic API key\", not \"I have a Claude Code\n * API key\" — so surfaces that name the upstream provider (setup\n * wizard backend step, /settings/models API-key panel) should prefer\n * this set over BACKEND_LABELS (which names the CLI product).\n */\nexport const BACKEND_PROVIDER_LABELS: Record<BackendId, string> = {\n claude: \"Claude (Anthropic)\",\n codex: \"ChatGPT (OpenAI)\",\n gemini: \"Gemini (Google)\",\n};\n\n/** Short provider name used in compact badges (e.g. \"ChatGPT\" not \"OpenAI Codex\"). */\nexport const BACKEND_PROVIDER_SHORT: Record<BackendId, string> = {\n claude: \"Claude\",\n codex: \"ChatGPT\",\n gemini: \"Gemini\",\n};\n\n/**\n * Primary brand color per backend, chosen to match each vendor's actual\n * app-icon hue so charts read as \"that's the Claude backend\" at a glance.\n * - Claude — the warm red-orange of the Anthropic macOS icon.\n * - Codex (ChatGPT) — ChatGPT's icon is white, so we use a bright\n * pink-leaning fuchsia (slightly purple-tinted pink).\n * - Gemini — the vivid Google Blue anchoring the Gemini spark gradient.\n */\nexport const BACKEND_COLORS: Record<BackendId, string> = {\n claude: \"#E15B40\", // Anthropic app-icon red-orange\n codex: \"#D946EF\", // bright fuchsia (pink with purple tint)\n gemini: \"#1C69FF\", // vivid Google Blue\n};\n\n/**\n * A small palette of distinct shades per backend family. Used to\n * differentiate individual models within the same backend on charts\n * like the Model Breakdown pie — the eye can still group Claude/Codex/\n * Gemini by hue family, but each model gets its own readable shade.\n *\n * Each palette is ordered dark→light and contains the primary brand\n * color in the middle, so a single-model render picks the brand color\n * and small groups (2–4 models) get colors spread across the palette\n * via `assignModelColors` for maximum contrast.\n */\nexport const BACKEND_MODEL_PALETTES: Record<BackendId, string[]> = {\n // Anthropic red-orange / coral family.\n claude: [\"#7C2D12\", \"#B54B2D\", \"#E15B40\", \"#F97316\", \"#FDBA74\"],\n // OpenAI-ish pink-purple / fuchsia family.\n codex: [\"#86198F\", \"#A21CAF\", \"#D946EF\", \"#E879F9\", \"#F5D0FE\"],\n // Google blue family.\n gemini: [\"#1E3A8A\", \"#1D4ED8\", \"#1C69FF\", \"#60A5FA\", \"#93C5FD\"],\n};\n\nconst OTHER_MODEL_PALETTE = [\"#6b7280\", \"#9ca3af\", \"#4b5563\", \"#374151\"];\n\n/**\n * Qualitative palette for categorical charts (e.g. event-type breakdown)\n * where bars have no intrinsic backend affiliation but should be visually\n * distinguishable from each other.\n */\nexport const CHART_CATEGORY_PALETTE: string[] = [\n \"#3b82f6\", // blue\n \"#10b981\", // emerald\n \"#f59e0b\", // amber\n \"#8b5cf6\", // violet\n \"#ec4899\", // pink\n \"#14b8a6\", // teal\n \"#f97316\", // orange\n \"#6366f1\", // indigo\n \"#ef4444\", // red\n \"#22c55e\", // green\n];\n\nexport const BACKEND_BADGE_VARIANTS: Record<BackendId, \"orange\" | \"pink\" | \"blue\"> = {\n claude: \"orange\",\n codex: \"pink\",\n gemini: \"blue\",\n};\n\nconst PROCESS_LABELS: Record<string, string> = {\n \"routine.morning_routine\": \"Morning Routine\",\n \"routine.evening_review\": \"Evening Review\",\n \"routine.weekly_review\": \"Weekly Review\",\n \"routine.monthly_review\": \"Monthly Review\",\n \"routine.hourly_check\": \"Hourly Check\",\n \"message.dm\": \"Direct Messages\",\n \"message.mention\": \"Mentions\",\n \"dashboard.chat\": \"Dashboard Chat\",\n \"agent.task\": \"Scheduled Tasks\",\n \"calendar.change\": \"Calendar Events\",\n \"gmail_classify\": \"Gmail Classification\",\n \"github.pull_request.review_requested\": \"GitHub Review Requests\",\n \"github.assigned\": \"GitHub Assignments\",\n \"github.security_alert\": \"GitHub Security Alerts\",\n \"github.workflow_run.failed\": \"GitHub CI Failures\",\n};\n\nexport function getBackendLabel(backendId: BackendId): string {\n return BACKEND_LABELS[backendId];\n}\n\nexport function getBackendShortLabel(backendId: BackendId): string {\n return BACKEND_SHORT_LABELS[backendId];\n}\n\nexport function getProcessLabel(processKey: string): string {\n return PROCESS_LABELS[processKey] ?? processKey;\n}\n\nexport function formatModelName(modelId: string | null | undefined): string {\n if (!modelId) return \"Not set\";\n\n return modelId\n .replace(/^claude-/, \"Claude \")\n .replace(/^gpt-/, \"GPT-\")\n .replace(/^gemini-/, \"Gemini \")\n .replace(/-/g, \" \")\n .replace(/\\bpreview\\b/gi, \"(preview)\")\n .replace(/\\bpro\\b/gi, \"Pro\")\n .replace(/\\bflash\\b/gi, \"Flash\")\n .replace(/\\blite\\b/gi, \"Lite\")\n .replace(/\\bmini\\b/gi, \"Mini\")\n .replace(/\\bcodex\\b/gi, \"Codex\")\n .replace(/\\bopus\\b/gi, \"Opus\")\n .replace(/\\bsonnet\\b/gi, \"Sonnet\")\n .replace(/\\bhaiku\\b/gi, \"Haiku\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\n/**\n * Compact model label for badge display (e.g. \"Opus 4.7\", \"GPT-5.5\").\n * Handles both legacy short forms (\"opus\") and full IDs (\"claude-opus-4-6\").\n */\nexport function formatShortModelName(modelId: string | null | undefined): string {\n if (!modelId) return \"unknown\";\n\n // Legacy short forms from old DB rows\n if (modelId === \"opus\") return \"Opus\";\n if (modelId === \"sonnet\") return \"Sonnet\";\n\n let s = modelId\n .replace(/-\\d{8,}$/, \"\") // drop date suffix (e.g. -20251001)\n .replace(/^claude-/, \"\") // \"claude-opus-4-6\" → \"opus-4-6\"\n .replace(/(\\d+)-(\\d+)(?![-\\d])/g, \"$1.$2\") // version: \"4-6\" → \"4.6\"\n .replace(/-/g, \" \"); // remaining dashes → spaces\n\n // Apply prefix branding after dashes are resolved\n if (modelId.startsWith(\"gpt-\")) s = `GPT-${s.replace(/^gpt\\s*/i, \"\")}`;\n if (modelId.startsWith(\"gemini-\")) s = s.replace(/^gemini\\s*/i, \"Gemini \");\n\n return s\n .replace(/\\bopus\\b/gi, \"Opus\")\n .replace(/\\bsonnet\\b/gi, \"Sonnet\")\n .replace(/\\bhaiku\\b/gi, \"Haiku\")\n .replace(/\\bpro\\b/gi, \"Pro\")\n .replace(/\\bflash\\b/gi, \"Flash\")\n .replace(/\\blite\\b/gi, \"Lite\")\n .replace(/\\bmini\\b/gi, \"Mini\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\n/** Badge variant for a model string, resolved via backend detection. */\nexport function modelBadgeVariant(modelId: string | null | undefined): \"orange\" | \"pink\" | \"blue\" | \"gray\" {\n if (!modelId) return \"gray\";\n const backend = detectBackendFromModel(modelId);\n return backend ? BACKEND_BADGE_VARIANTS[backend] : \"gray\";\n}\n\n/**\n * Parsed entry from `agent_actions.model_usage_json` — what the SDK actually\n * billed per underlying model. The SDK can silently route a request for one\n * model to a sibling (e.g. opus-4-7 → opus-4-6[1m]); this struct surfaces\n * that, so the dashboard can show the real model and matching cost.\n */\nexport interface BilledModelEntry {\n modelId: string;\n inputTokens: number;\n outputTokens: number;\n costUsd: number;\n}\n\n/**\n * Parse the JSON-encoded modelUsage map. Returns entries sorted by costUsd\n * desc so the dominant model is first (the one a single-row badge should\n * use). Returns an empty array on malformed input.\n */\nexport function parseModelUsage(json: string | null | undefined): BilledModelEntry[] {\n if (!json) return [];\n let raw: unknown;\n try {\n raw = JSON.parse(json);\n } catch {\n return [];\n }\n if (!raw || typeof raw !== \"object\") return [];\n\n const entries: BilledModelEntry[] = [];\n for (const [modelId, value] of Object.entries(raw)) {\n if (!value || typeof value !== \"object\") continue;\n const v = value as Record<string, unknown>;\n entries.push({\n modelId,\n inputTokens: typeof v.inputTokens === \"number\" ? v.inputTokens : 0,\n outputTokens: typeof v.outputTokens === \"number\" ? v.outputTokens : 0,\n costUsd: typeof v.costUsd === \"number\" ? v.costUsd : 0,\n });\n }\n return entries.sort((a, b) => b.costUsd - a.costUsd);\n}\n\n/**\n * Return the model id the dashboard should badge for a row. Prefers the\n * dominant entry from `model_usage_json` (the SDK-billed model — what\n * actually drove the cost). Falls back to `model_used` (the requested\n * model) when modelUsage is missing or empty.\n */\nexport function pickDisplayModel(\n modelUsed: string | null | undefined,\n modelUsageJson: string | null | undefined,\n): string | null {\n const entries = parseModelUsage(modelUsageJson);\n if (entries.length > 0 && entries[0]) {\n return entries[0].modelId;\n }\n return modelUsed ?? null;\n}\n\nexport function detectBackendFromModel(modelId: string): BackendId | null {\n if (!modelId) return null;\n const lower = modelId.toLowerCase();\n if (\n lower.includes(\"claude\") ||\n lower.includes(\"sonnet\") ||\n lower.includes(\"opus\") ||\n lower.includes(\"haiku\")\n ) {\n return \"claude\";\n }\n if (lower.includes(\"gemini\")) return \"gemini\";\n if (\n lower.includes(\"gpt\") ||\n lower.includes(\"codex\") ||\n lower.includes(\"o3\") ||\n lower.includes(\"o4\")\n ) {\n return \"codex\";\n }\n return null;\n}\n\n/**\n * Assign a distinct color to each model. Models are grouped by backend\n * and sorted by name for stable assignment across renders; within each\n * group, colors are spread across `BACKEND_MODEL_PALETTES` so that small\n * groups (e.g. 2 Claude models) use non-adjacent palette slots and read\n * as clearly different shades, rather than two neighbouring darks.\n *\n * - 1 model → the brand-color slot (palette midpoint)\n * - 2 models → slots at ~1/4 and ~3/4 of the palette (dark + light)\n * - 3 models → evenly spaced across the palette\n * - 4+ models → spread evenly, wrapping if the group exceeds the palette\n */\nexport function assignModelColors(models: string[]): Record<string, string> {\n const byBackend = new Map<BackendId | \"other\", string[]>();\n for (const model of models) {\n if (!model) continue;\n const backend = detectBackendFromModel(model) ?? \"other\";\n const bucket = byBackend.get(backend) ?? [];\n bucket.push(model);\n byBackend.set(backend, bucket);\n }\n\n const result: Record<string, string> = {};\n for (const [backend, list] of byBackend) {\n list.sort((a, b) => a.localeCompare(b));\n const palette =\n backend === \"other\" ? OTHER_MODEL_PALETTE : BACKEND_MODEL_PALETTES[backend];\n const n = list.length;\n list.forEach((model, i) => {\n let idx: number;\n if (n >= palette.length) {\n // Group larger than the palette — wrap around.\n idx = i % palette.length;\n } else if (n === 1) {\n // Single model → use the brand-color slot (palette midpoint).\n idx = Math.floor(palette.length / 2);\n } else {\n // Small group → spread across the palette so shades are distinct.\n idx = Math.floor(((i + 0.5) * palette.length) / n);\n }\n result[model] = palette[idx]!;\n });\n }\n return result;\n}\n"],"names":["cardVariants","variants","tone","default","warning","success","error","interactive","true","false","defaultVariants","Card","className","props","CardHeader","CardTitle","CardStatLabel","CardValue","React","createContextScope","useComposedRefs","createSlot","jsx","createCollection","itemData","BACKEND_LABELS","claude","codex","gemini","BACKEND_SHORT_LABELS","BACKEND_PROVIDER_LABELS","BACKEND_PROVIDER_SHORT","BACKEND_COLORS","BACKEND_MODEL_PALETTES","OTHER_MODEL_PALETTE","CHART_CATEGORY_PALETTE","BACKEND_BADGE_VARIANTS","PROCESS_LABELS","getBackendLabel","backendId","getBackendShortLabel","getProcessLabel","processKey","formatModelName","modelId","replace","trim","formatShortModelName","s","startsWith","modelBadgeVariant","backend","detectBackendFromModel","parseModelUsage","json","raw","JSON","parse","entries","value","Object","v","push","inputTokens","outputTokens","costUsd","sort","a","b","pickDisplayModel","modelUsed","modelUsageJson","length","lower","toLowerCase","includes","assignModelColors","models","byBackend","Map","model","bucket","get","set","result","list","localeCompare","palette","n","forEach","i","idx","Math","floor"],"mappings":"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","ignoreList":[1,7]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-direction%401.1.1_%40types%2Breact%4019.2.14_react%4019.2.4/node_modules/%40radix-ui/react-direction/src/direction.tsx","../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-collection%401.1.7_%40types%2Breact-dom%4019.2.3_%40types%2Breact%4019.2.14__%40types%2Br_161926fa2509d0b7370b60b8bb4eb8b0/node_modules/%40radix-ui/react-collection/src/collection-legacy.tsx","../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-collection%401.1.7_%40types%2Breact-dom%4019.2.3_%40types%2Breact%4019.2.14__%40types%2Br_161926fa2509d0b7370b60b8bb4eb8b0/node_modules/%40radix-ui/react-collection/src/collection.tsx","../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-collection%401.1.7_%40types%2Breact-dom%4019.2.3_%40types%2Breact%4019.2.14__%40types%2Br_161926fa2509d0b7370b60b8bb4eb8b0/node_modules/%40radix-ui/react-collection/src/ordered-dictionary.ts","../../../../../../node_modules/.pnpm/%40radix-ui%2Bnumber%401.1.1/node_modules/%40radix-ui/number/src/number.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/check.ts","../../../../../../packages/dashboard/src/components/directory-picker-field.tsx","../../../../../../packages/dashboard/src/components/settings/character-editor.tsx","../../../../../../packages/dashboard/src/lib/path-client.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/folder-symlink.ts"],"sourcesContent":["import * as React from 'react';\n\ntype Direction = 'ltr' | 'rtl';\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\n/* -------------------------------------------------------------------------------------------------\n * Direction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DirectionProviderProps {\n children?: React.ReactNode;\n dir: Direction;\n}\nconst DirectionProvider: React.FC<DirectionProviderProps> = (props) => {\n const { dir, children } = props;\n return <DirectionContext.Provider value={dir}>{children}</DirectionContext.Provider>;\n};\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useDirection(localDir?: Direction) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || 'ltr';\n}\n\nconst Provider = DirectionProvider;\n\nexport {\n useDirection,\n //\n Provider,\n //\n DirectionProvider,\n};\n","import React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createSlot, type Slot } from '@radix-ui/react-slot';\n\ntype SlotProps = React.ComponentPropsWithoutRef<typeof Slot>;\ntype CollectionElement = HTMLElement;\ninterface CollectionProps extends SlotProps {\n scope: any;\n}\n\n// We have resorted to returning slots directly rather than exposing primitives that can then\n// be slotted like `<CollectionItem as={Slot}>\u2026</CollectionItem>`.\n// This is because we encountered issues with generic types that cannot be statically analysed\n// due to creating them dynamically via createCollection.\n\nfunction createCollection<ItemElement extends HTMLElement, ItemData = {}>(name: string) {\n /* -----------------------------------------------------------------------------------------------\n * CollectionProvider\n * ---------------------------------------------------------------------------------------------*/\n\n const PROVIDER_NAME = name + 'CollectionProvider';\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n\n type ContextValue = {\n collectionRef: React.RefObject<CollectionElement | null>;\n itemMap: Map<\n React.RefObject<ItemElement | null>,\n { ref: React.RefObject<ItemElement | null> } & ItemData\n >;\n };\n\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext<ContextValue>(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: new Map() }\n );\n\n const CollectionProvider: React.FC<{ children?: React.ReactNode; scope: any }> = (props) => {\n const { scope, children } = props;\n const ref = React.useRef<CollectionElement>(null);\n const itemMap = React.useRef<ContextValue['itemMap']>(new Map()).current;\n return (\n <CollectionProviderImpl scope={scope} itemMap={itemMap} collectionRef={ref}>\n {children}\n </CollectionProviderImpl>\n );\n };\n\n CollectionProvider.displayName = PROVIDER_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionSlot\n * ---------------------------------------------------------------------------------------------*/\n\n const COLLECTION_SLOT_NAME = name + 'CollectionSlot';\n\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef<CollectionElement, CollectionProps>(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return <CollectionSlotImpl ref={composedRefs}>{children}</CollectionSlotImpl>;\n }\n );\n\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionItem\n * ---------------------------------------------------------------------------------------------*/\n\n const ITEM_SLOT_NAME = name + 'CollectionItemSlot';\n const ITEM_DATA_ATTR = 'data-radix-collection-item';\n\n type CollectionItemSlotProps = ItemData & {\n children: React.ReactNode;\n scope: any;\n };\n\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef<ItemElement, CollectionItemSlotProps>(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef<ItemElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...(itemData as unknown as ItemData) });\n return () => void context.itemMap.delete(ref);\n });\n\n return (\n <CollectionItemSlotImpl {...{ [ITEM_DATA_ATTR]: '' }} ref={composedRefs}>\n {children}\n </CollectionItemSlotImpl>\n );\n }\n );\n\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * useCollection\n * ---------------------------------------------------------------------------------------------*/\n\n function useCollection(scope: any) {\n const context = useCollectionContext(name + 'CollectionConsumer', scope);\n\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current!) - orderedNodes.indexOf(b.ref.current!)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n\n return getItems;\n }\n\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope,\n ] as const;\n}\n\nexport { createCollection };\nexport type { CollectionProps };\n","import React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createSlot, type Slot } from '@radix-ui/react-slot';\nimport type { EntryOf } from './ordered-dictionary';\nimport { OrderedDict } from './ordered-dictionary';\n\ntype SlotProps = React.ComponentPropsWithoutRef<typeof Slot>;\ntype CollectionElement = HTMLElement;\ninterface CollectionProps extends SlotProps {\n scope: any;\n}\n\ninterface BaseItemData {\n id?: string;\n}\n\ntype ItemDataWithElement<\n ItemData extends BaseItemData,\n ItemElement extends HTMLElement,\n> = ItemData & {\n element: ItemElement;\n};\n\ntype ItemMap<ItemElement extends HTMLElement, ItemData extends BaseItemData> = OrderedDict<\n ItemElement,\n ItemDataWithElement<ItemData, ItemElement>\n>;\n\nfunction createCollection<\n ItemElement extends HTMLElement,\n ItemData extends BaseItemData = BaseItemData,\n>(name: string) {\n /* -----------------------------------------------------------------------------------------------\n * CollectionProvider\n * ---------------------------------------------------------------------------------------------*/\n\n const PROVIDER_NAME = name + 'CollectionProvider';\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n\n type ContextValue = {\n collectionElement: CollectionElement | null;\n collectionRef: React.Ref<CollectionElement | null>;\n collectionRefObject: React.RefObject<CollectionElement | null>;\n itemMap: ItemMap<ItemElement, ItemData>;\n setItemMap: React.Dispatch<React.SetStateAction<ItemMap<ItemElement, ItemData>>>;\n };\n\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext<ContextValue>(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0,\n }\n );\n\n type CollectionState = [\n ItemMap: ItemMap<ItemElement, ItemData>,\n SetItemMap: React.Dispatch<React.SetStateAction<ItemMap<ItemElement, ItemData>>>,\n ];\n\n const CollectionProvider: React.FC<{\n children?: React.ReactNode;\n scope: any;\n state?: CollectionState;\n }> = ({ state, ...props }) => {\n return state ? (\n <CollectionProviderImpl {...props} state={state} />\n ) : (\n <CollectionInit {...props} />\n );\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n\n const CollectionInit: React.FC<{\n children?: React.ReactNode;\n scope: any;\n }> = (props) => {\n const state = useInitCollection();\n return <CollectionProviderImpl {...props} state={state} />;\n };\n CollectionInit.displayName = PROVIDER_NAME + 'Init';\n\n const CollectionProviderImpl: React.FC<{\n children?: React.ReactNode;\n scope: any;\n state: CollectionState;\n }> = (props) => {\n const { scope, children, state } = props;\n const ref = React.useRef<CollectionElement>(null);\n const [collectionElement, setCollectionElement] = React.useState<CollectionElement | null>(\n null\n );\n const composeRefs = useComposedRefs(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n\n React.useEffect(() => {\n if (!collectionElement) return;\n\n const observer = getChildListObserver(() => {\n // setItemMap((map) => {\n // const copy = new OrderedDict(map).toSorted(([, a], [, b]) =>\n // !a.element || !b.element ? 0 : isElementPreceding(a.element, b.element) ? -1 : 1\n // );\n // // check if the order has changed\n // let index = -1;\n // for (const entry of copy) {\n // index++;\n // const key = map.keyAt(index)!;\n // const [copyKey] = entry;\n // if (key !== copyKey) {\n // // order has changed!\n // return copy;\n // }\n // }\n // return map;\n // });\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true,\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n\n return (\n <CollectionContextProvider\n scope={scope}\n itemMap={itemMap}\n setItemMap={setItemMap}\n collectionRef={composeRefs}\n collectionRefObject={ref}\n collectionElement={collectionElement}\n >\n {children}\n </CollectionContextProvider>\n );\n };\n\n CollectionProviderImpl.displayName = PROVIDER_NAME + 'Impl';\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionSlot\n * ---------------------------------------------------------------------------------------------*/\n\n const COLLECTION_SLOT_NAME = name + 'CollectionSlot';\n\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef<CollectionElement, CollectionProps>(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return <CollectionSlotImpl ref={composedRefs}>{children}</CollectionSlotImpl>;\n }\n );\n\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionItem\n * ---------------------------------------------------------------------------------------------*/\n\n const ITEM_SLOT_NAME = name + 'CollectionItemSlot';\n const ITEM_DATA_ATTR = 'data-radix-collection-item';\n\n type CollectionItemSlotProps = ItemData & {\n children: React.ReactNode;\n scope: any;\n };\n\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef<ItemElement, CollectionItemSlotProps>(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef<ItemElement>(null);\n const [element, setElement] = React.useState<ItemElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n\n const { setItemMap } = context;\n\n const itemDataRef = React.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n\n React.useEffect(() => {\n const itemData = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n\n if (!map.has(element)) {\n map.set(element, { ...(itemData as unknown as ItemData), element });\n return map.toSorted(sortByDocumentPosition);\n }\n\n return map\n .set(element, { ...(itemData as unknown as ItemData), element })\n .toSorted(sortByDocumentPosition);\n });\n\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n\n return (\n <CollectionItemSlotImpl {...{ [ITEM_DATA_ATTR]: '' }} ref={composedRefs as any}>\n {children}\n </CollectionItemSlotImpl>\n );\n }\n );\n\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * useInitCollection\n * ---------------------------------------------------------------------------------------------*/\n\n function useInitCollection() {\n return React.useState<ItemMap<ItemElement, ItemData>>(new OrderedDict());\n }\n\n /* -----------------------------------------------------------------------------------------------\n * useCollection\n * ---------------------------------------------------------------------------------------------*/\n\n function useCollection(scope: any) {\n const { itemMap } = useCollectionContext(name + 'CollectionConsumer', scope);\n\n return itemMap;\n }\n\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection,\n };\n\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions,\n ] as const;\n}\n\nexport { createCollection };\nexport type { CollectionProps };\n\nfunction shallowEqual(a: any, b: any) {\n if (a === b) return true;\n if (typeof a !== 'object' || typeof b !== 'object') return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\n\nfunction isElementPreceding(a: Element, b: Element) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\n\nfunction sortByDocumentPosition<E extends HTMLElement, T extends BaseItemData>(\n a: EntryOf<ItemMap<E, T>>,\n b: EntryOf<ItemMap<E, T>>\n) {\n return !a[1].element || !b[1].element\n ? 0\n : isElementPreceding(a[1].element, b[1].element)\n ? -1\n : 1;\n}\n\nfunction getChildListObserver(callback: () => void) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList') {\n callback();\n return;\n }\n }\n });\n\n return observer;\n}\n","// Not a real member because it shouldn't be accessible, but the super class\n// calls `set` which needs to read the instanciation state, so it can't be a\n// private member.\nconst __instanciated = new WeakMap<OrderedDict<any, any>, boolean>();\nexport class OrderedDict<K, V> extends Map<K, V> {\n #keys: K[];\n\n constructor(iterable?: Iterable<readonly [K, V]> | null | undefined);\n constructor(entries?: readonly (readonly [K, V])[] | null) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n\n set(key: K, value: V) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n\n insert(index: number, key: K, value: V) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n\n if (safeIndex === this.size || (has && safeIndex === this.size - 1) || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n\n const size = this.size + (has ? 0 : 1);\n\n // If you insert at, say, -2, without this bit you'd replace the\n // second-to-last item and push the rest up one, which means the new item is\n // 3rd to last. This isn't very intuitive; inserting at -2 is more like\n // saying \"make this item the second to last\".\n if (relativeIndex < 0) {\n actualIndex++;\n }\n\n const keys = [...this.#keys];\n let nextValue: V | undefined;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i]!;\n if (keys[i] === key) {\n nextKey = keys[i + 1]!;\n }\n if (has) {\n // delete first to ensure that the item is moved to the end\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1]!;\n const currentValue = nextValue!;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n\n with(index: number, key: K, value: V) {\n const copy = new OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n\n before(key: K) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return undefined;\n }\n return this.entryAt(index);\n }\n\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key: K, newKey: K, value: V) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n\n after(key: K) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return undefined;\n }\n return this.entryAt(index);\n }\n\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key: K, newKey: K, value: V) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n\n first() {\n return this.entryAt(0);\n }\n\n last() {\n return this.entryAt(-1);\n }\n\n clear() {\n this.#keys = [];\n return super.clear();\n }\n\n delete(key: K) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n\n deleteAt(index: number) {\n const key = this.keyAt(index);\n if (key !== undefined) {\n return this.delete(key);\n }\n return false;\n }\n\n at(index: number) {\n const key = at(this.#keys, index);\n if (key !== undefined) {\n return this.get(key);\n }\n }\n\n entryAt(index: number): [K, V] | undefined {\n const key = at(this.#keys, index);\n if (key !== undefined) {\n return [key, this.get(key)!];\n }\n }\n\n indexOf(key: K) {\n return this.#keys.indexOf(key);\n }\n\n keyAt(index: number) {\n return at(this.#keys, index);\n }\n\n from(key: K, offset: number) {\n const index = this.indexOf(key);\n if (index === -1) {\n return undefined;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n\n keyFrom(key: K, offset: number) {\n const index = this.indexOf(key);\n if (index === -1) {\n return undefined;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n\n find(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => boolean,\n thisArg?: any\n ) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return undefined;\n }\n\n findIndex(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => boolean,\n thisArg?: any\n ) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n\n filter<KK extends K, VV extends V>(\n predicate: (entry: [K, V], index: number, dict: OrderedDict<K, V>) => entry is [KK, VV],\n thisArg?: any\n ): OrderedDict<KK, VV>;\n\n filter(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ): OrderedDict<K, V>;\n\n filter(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ) {\n const entries: Array<[K, V]> = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new OrderedDict(entries);\n }\n\n map<U>(\n callbackfn: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => U,\n thisArg?: any\n ): OrderedDict<K, U> {\n const entries: [K, U][] = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new OrderedDict(entries);\n }\n\n reduce(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V]\n ): [K, V];\n reduce(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V],\n initialValue: [K, V]\n ): [K, V];\n reduce<U>(\n callbackfn: (\n previousValue: U,\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n initialValue: U\n ): U;\n\n reduce<U>(\n ...args: [\n (\n previousValue: U,\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n U?,\n ]\n ) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0)!;\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry as any;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n\n reduceRight(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V]\n ): [K, V];\n reduceRight(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V],\n initialValue: [K, V]\n ): [K, V];\n reduceRight<U>(\n callbackfn: (\n previousValue: [K, V],\n currentValue: U,\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n initialValue: U\n ): U;\n\n reduceRight<U>(\n ...args: [\n (\n previousValue: U,\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n U?,\n ]\n ) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1)!;\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index)!;\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry as any;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n\n toSorted(compareFn?: (a: [K, V], b: [K, V]) => number): OrderedDict<K, V> {\n const entries = [...this.entries()].sort(compareFn);\n return new OrderedDict(entries);\n }\n\n toReversed(): OrderedDict<K, V> {\n const reversed = new OrderedDict<K, V>();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index)!;\n const element = this.get(key)!;\n reversed.set(key, element);\n }\n return reversed;\n }\n\n toSpliced(start: number, deleteCount?: number): OrderedDict<K, V>;\n toSpliced(start: number, deleteCount: number, ...items: [K, V][]): OrderedDict<K, V>;\n\n toSpliced(...args: [start: number, deleteCount: number, ...items: [K, V][]]) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new OrderedDict(entries);\n }\n\n slice(start?: number, end?: number) {\n const result = new OrderedDict<K, V>();\n let stop = this.size - 1;\n\n if (start === undefined) {\n return result;\n }\n\n if (start < 0) {\n start = start + this.size;\n }\n\n if (end !== undefined && end > 0) {\n stop = end - 1;\n }\n\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index)!;\n const element = this.get(key)!;\n result.set(key, element);\n }\n return result;\n }\n\n every(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n\n some(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n}\n\nexport type KeyOf<D extends OrderedDict<any, any>> =\n D extends OrderedDict<infer K, any> ? K : never;\nexport type ValueOf<D extends OrderedDict<any, any>> =\n D extends OrderedDict<any, infer V> ? V : never;\nexport type EntryOf<D extends OrderedDict<any, any>> = [KeyOf<D>, ValueOf<D>];\nexport type KeyFrom<E extends EntryOf<any>> = E[0];\nexport type ValueFrom<E extends EntryOf<any>> = E[1];\n\nfunction at<T>(array: ArrayLike<T>, index: number): T | undefined {\n if ('at' in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? undefined : array[actualIndex];\n}\n\nfunction toSafeIndex(array: ArrayLike<any>, index: number) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\n\nfunction toSafeInteger(number: number) {\n // eslint-disable-next-line no-self-compare\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n","function clamp(value: number, [min, max]: [number, number]): number {\n return Math.min(max, Math.max(min, value));\n}\n\nexport { clamp };\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/check\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 Check = createLucideIcon('Check', [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]]);\n\nexport default Check;\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { FolderOpen, Loader2 } from \"lucide-react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { pickDirectoryFromDesktop } from \"@/lib/directory-picker\";\nimport { cn } from \"@/lib/utils\";\n\nexport function DirectoryPickerField({\n id,\n value,\n onChange,\n title,\n placeholder = \"Choose a folder...\",\n defaultPath,\n disabled = false,\n className,\n inputClassName,\n buttonLabel = \"Choose\",\n}: {\n id?: string;\n value: string;\n onChange: (value: string) => void;\n title: string;\n placeholder?: string;\n defaultPath?: string;\n disabled?: boolean;\n className?: string;\n inputClassName?: string;\n buttonLabel?: string;\n}) {\n const [picking, setPicking] = useState(false);\n const [pickerError, setPickerError] = useState<string | null>(null);\n\n const handlePick = async () => {\n setPicking(true);\n setPickerError(null);\n try {\n const selected = await pickDirectoryFromDesktop({\n title,\n defaultPath: value.trim() || defaultPath,\n });\n if (selected) onChange(selected);\n } catch (err) {\n setPickerError(\n err instanceof Error ? err.message : \"Folder picker is unavailable.\",\n );\n } finally {\n setPicking(false);\n }\n };\n\n return (\n <div className={cn(\"space-y-1\", className)}>\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n <Input\n id={id}\n value={value}\n onChange={(e) => {\n onChange(e.target.value);\n setPickerError(null);\n }}\n placeholder={placeholder}\n className={cn(\"font-mono text-sm\", inputClassName)}\n disabled={disabled || picking}\n />\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handlePick}\n disabled={disabled || picking}\n className=\"shrink-0 gap-2\"\n >\n {picking ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <FolderOpen className=\"h-4 w-4\" />\n )}\n {picking ? \"Opening...\" : buttonLabel}\n </Button>\n </div>\n {pickerError && (\n <p className=\"text-xs text-destructive\">{pickerError}</p>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Hard cap on the `character` config value. Mirrors the Zod `.max(1000)`\n * refinement in `packages/daemon/src/settings/runtime-settings.ts` — the\n * server is the authority; the client counter is UX only. See\n * `docs/design/15-character.md` §15.3.\n */\nexport const CHARACTER_MAX_LENGTH = 1000;\n\ninterface CharacterEditorProps {\n value: string;\n onChange: (next: string) => void;\n disabled?: boolean;\n placeholder?: string;\n /** Minimum textarea height in rows. */\n rows?: number;\n}\n\n/**\n * Shared controlled textarea + live `{count}/1000` counter used by the\n * settings page and the setup wizard. Counter transitions:\n * - below cap: muted foreground\n * - at cap: amber\n * - over cap: destructive\n *\n * Consumers compute their own save-disabled flag from the value length\n * (exported via `isCharacterOverCap`) — the component itself is purely\n * a controlled input.\n */\nexport function CharacterEditor({\n value,\n onChange,\n disabled = false,\n placeholder,\n rows = 6,\n}: CharacterEditorProps) {\n const count = value.length;\n const overCap = count > CHARACTER_MAX_LENGTH;\n const atCap = count === CHARACTER_MAX_LENGTH;\n\n return (\n <div className=\"space-y-1\">\n <textarea\n data-testid=\"character-editor-textarea\"\n className=\"w-full rounded border border-input bg-background p-3 text-sm font-mono resize-y focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n style={{ minHeight: `${rows * 24}px` }}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n disabled={disabled}\n placeholder={\n placeholder ??\n \"How should the agent talk to you? E.g. 'Speak casually. Tight bullets, no emoji. Use plain language for technical terms.'\"\n }\n />\n <div className=\"flex justify-end\">\n <span\n data-testid=\"character-editor-counter\"\n aria-live=\"polite\"\n className={cn(\n \"text-xs tabular-nums\",\n overCap\n ? \"font-semibold text-destructive\"\n : atCap\n ? \"text-amber-600\"\n : \"text-muted-foreground\",\n )}\n >\n {count}/{CHARACTER_MAX_LENGTH}\n </span>\n </div>\n </div>\n );\n}\n\n/** True when the value exceeds the server-enforced cap. */\nexport function isCharacterOverCap(value: string): boolean {\n return value.length > CHARACTER_MAX_LENGTH;\n}\n","export function isClientAbsolutePath(path: string): boolean {\n const trimmed = path.trim();\n return trimmed.startsWith(\"/\")\n || trimmed.startsWith(\"~/\")\n || trimmed.startsWith(\"~\\\\\")\n || /^[A-Za-z]:[\\\\/]/.test(trimmed)\n || /^\\\\\\\\[^\\\\/]+[\\\\/][^\\\\/]+/.test(trimmed)\n || /^\\/\\/[^/]+\\/[^/]+/.test(trimmed);\n}\n\nexport function hasPathTraversalSegment(path: string): boolean {\n return path.trim().split(/[\\\\/]+/).some((seg) => seg === \"..\");\n}\n\nfunction looksWindowsPath(path: string): boolean {\n return /^[A-Za-z]:[\\\\/]/.test(path)\n || /^\\\\\\\\/.test(path)\n || /^\\/\\/[^/]+\\/[^/]+/.test(path)\n || path.includes(\"\\\\\");\n}\n\nfunction normalizeForCompare(path: string, windows: boolean): string {\n let normalized = path.trim().replace(/[\\\\/]+$/g, \"\");\n if (windows) {\n normalized = normalized.replace(/[\\\\/]+/g, \"/\").toLowerCase();\n }\n return normalized;\n}\n\nexport function isClientPathInsideOrEqual(parent: string, candidate: string): boolean {\n if (parent.trim().length === 0 || candidate.trim().length === 0) return false;\n const windows = looksWindowsPath(parent) || looksWindowsPath(candidate);\n const normalizedParent = normalizeForCompare(parent, windows);\n const normalizedCandidate = normalizeForCompare(candidate, windows);\n return normalizedCandidate === normalizedParent\n || normalizedCandidate.startsWith(`${normalizedParent}/`);\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name FolderSymlink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/folder-symlink\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 FolderSymlink = createLucideIcon('FolderSymlink', [\n [\n 'path',\n {\n d: 'M2 9V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h7',\n key: 'x1c07l',\n },\n ],\n ['path', { d: 'm8 16 3-3-3-3', key: 'rlqrt1' }],\n]);\n\nexport default FolderSymlink;\n"],"names":["React","createContextScope","useComposedRefs","createSlot","jsx","createCollection","itemData","DirectoryPickerField","id","value","onChange","title","placeholder","defaultPath","disabled","className","inputClassName","buttonLabel","picking","setPicking","pickerError","setPickerError","handlePick","selected","trim","err","Error","message","e","target","type","variant","onClick"],"mappings":"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","ignoreList":[5,9]}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[40091,a=>{"use strict";let b={claude:"Claude Code",codex:"OpenAI Codex",gemini:"Gemini CLI"},c={claude:"Claude",codex:"Codex",gemini:"Gemini"},d={claude:"orange",codex:"pink",gemini:"blue"},e={"routine.morning_routine":"Morning Routine","routine.evening_review":"Evening Review","routine.weekly_review":"Weekly Review","routine.monthly_review":"Monthly Review","routine.hourly_check":"Hourly Check","message.dm":"Direct Messages","message.mention":"Mentions","dashboard.chat":"Dashboard Chat","agent.task":"Scheduled Tasks","calendar.change":"Calendar Events",gmail_classify:"Gmail Classification","github.pull_request.review_requested":"GitHub Review Requests","github.assigned":"GitHub Assignments","github.security_alert":"GitHub Security Alerts","github.workflow_run.failed":"GitHub CI Failures"};function f(a){let b;if(!a)return[];try{b=JSON.parse(a)}catch{return[]}if(!b||"object"!=typeof b)return[];let c=[];for(let[a,d]of Object.entries(b))d&&"object"==typeof d&&c.push({modelId:a,inputTokens:"number"==typeof d.inputTokens?d.inputTokens:0,outputTokens:"number"==typeof d.outputTokens?d.outputTokens:0,costUsd:"number"==typeof d.costUsd?d.costUsd:0});return c.sort((a,b)=>b.costUsd-a.costUsd)}function g(a){if(!a)return null;let b=a.toLowerCase();return b.includes("claude")||b.includes("sonnet")||b.includes("opus")||b.includes("haiku")?"claude":b.includes("gemini")?"gemini":b.includes("gpt")||b.includes("codex")||b.includes("o3")||b.includes("o4")?"codex":null}a.s(["BACKEND_BADGE_VARIANTS",0,d,"BACKEND_LABELS",0,b,"BACKEND_PROVIDER_LABELS",0,{claude:"Claude (Anthropic)",codex:"ChatGPT (OpenAI)",gemini:"Gemini (Google)"},"BACKEND_PROVIDER_SHORT",0,{claude:"Claude",codex:"ChatGPT",gemini:"Gemini"},"detectBackendFromModel",0,g,"formatModelName",0,function(a){return a?a.replace(/^claude-/,"Claude ").replace(/^gpt-/,"GPT-").replace(/^gemini-/,"Gemini ").replace(/-/g," ").replace(/\bpreview\b/gi,"(preview)").replace(/\bpro\b/gi,"Pro").replace(/\bflash\b/gi,"Flash").replace(/\blite\b/gi,"Lite").replace(/\bmini\b/gi,"Mini").replace(/\bcodex\b/gi,"Codex").replace(/\bopus\b/gi,"Opus").replace(/\bsonnet\b/gi,"Sonnet").replace(/\bhaiku\b/gi,"Haiku").replace(/\s+/g," ").trim():"Not set"},"formatShortModelName",0,function(a){if(!a)return"unknown";if("opus"===a)return"Opus";if("sonnet"===a)return"Sonnet";let b=a.replace(/-\d{8,}$/,"").replace(/^claude-/,"").replace(/(\d+)-(\d+)(?![-\d])/g,"$1.$2").replace(/-/g," ");return a.startsWith("gpt-")&&(b=`GPT-${b.replace(/^gpt\s*/i,"")}`),a.startsWith("gemini-")&&(b=b.replace(/^gemini\s*/i,"Gemini ")),b.replace(/\bopus\b/gi,"Opus").replace(/\bsonnet\b/gi,"Sonnet").replace(/\bhaiku\b/gi,"Haiku").replace(/\bpro\b/gi,"Pro").replace(/\bflash\b/gi,"Flash").replace(/\blite\b/gi,"Lite").replace(/\bmini\b/gi,"Mini").replace(/\s+/g," ").trim()},"getBackendLabel",0,function(a){return b[a]},"getBackendShortLabel",0,function(a){return c[a]},"getProcessLabel",0,function(a){return e[a]??a},"modelBadgeVariant",0,function(a){if(!a)return"gray";let b=g(a);return b?d[b]:"gray"},"parseModelUsage",0,f,"pickDisplayModel",0,function(a,b){let c=f(b);return c.length>0&&c[0]?c[0].modelId:a??null}])},60380,a=>{"use strict";var b=a.i(76015);a.i(81673);var c=b.createContext(void 0);a.s(["useDirection",0,function(a){let d=b.useContext(c);return a||d||"ltr"}])},69471,a=>{"use strict";var b=a.i(76015),c=a.i(95819),d=a.i(80303),e=a.i(92274),f=a.i(81673),g=new WeakMap;function h(a,b){var c,d;let e,f,g;if("at"in Array.prototype)return Array.prototype.at.call(a,b);let h=(c=a,d=b,e=c.length,(g=(f=i(d))>=0?f:e+f)<0||g>=e?-1:g);return -1===h?void 0:a[h]}function i(a){return a!=a||0===a?0:Math.trunc(a)}(class a extends Map{#a;constructor(a){super(a),this.#a=[...super.keys()],g.set(this,!0)}set(a,b){return g.get(this)&&(this.has(a)?this.#a[this.#a.indexOf(a)]=a:this.#a.push(a)),super.set(a,b),this}insert(a,b,c){let d,e=this.has(b),f=this.#a.length,g=i(a),h=g>=0?g:f+g,j=h<0||h>=f?-1:h;if(j===this.size||e&&j===this.size-1||-1===j)return this.set(b,c),this;let k=this.size+ +!e;g<0&&h++;let l=[...this.#a],m=!1;for(let a=h;a<k;a++)if(h===a){let f=l[a];l[a]===b&&(f=l[a+1]),e&&this.delete(b),d=this.get(f),this.set(b,c)}else{m||l[a-1]!==b||(m=!0);let c=l[m?a:a-1],e=d;d=this.get(c),this.delete(c),this.set(c,e)}return this}with(b,c,d){let e=new a(this);return e.insert(b,c,d),e}before(a){let b=this.#a.indexOf(a)-1;if(!(b<0))return this.entryAt(b)}setBefore(a,b,c){let d=this.#a.indexOf(a);return -1===d?this:this.insert(d,b,c)}after(a){let b=this.#a.indexOf(a);if(-1!==(b=-1===b||b===this.size-1?-1:b+1))return this.entryAt(b)}setAfter(a,b,c){let d=this.#a.indexOf(a);return -1===d?this:this.insert(d+1,b,c)}first(){return this.entryAt(0)}last(){return this.entryAt(-1)}clear(){return this.#a=[],super.clear()}delete(a){let b=super.delete(a);return b&&this.#a.splice(this.#a.indexOf(a),1),b}deleteAt(a){let b=this.keyAt(a);return void 0!==b&&this.delete(b)}at(a){let b=h(this.#a,a);if(void 0!==b)return this.get(b)}entryAt(a){let b=h(this.#a,a);if(void 0!==b)return[b,this.get(b)]}indexOf(a){return this.#a.indexOf(a)}keyAt(a){return h(this.#a,a)}from(a,b){let c=this.indexOf(a);if(-1===c)return;let d=c+b;return d<0&&(d=0),d>=this.size&&(d=this.size-1),this.at(d)}keyFrom(a,b){let c=this.indexOf(a);if(-1===c)return;let d=c+b;return d<0&&(d=0),d>=this.size&&(d=this.size-1),this.keyAt(d)}find(a,b){let c=0;for(let d of this){if(Reflect.apply(a,b,[d,c,this]))return d;c++}}findIndex(a,b){let c=0;for(let d of this){if(Reflect.apply(a,b,[d,c,this]))return c;c++}return -1}filter(b,c){let d=[],e=0;for(let a of this)Reflect.apply(b,c,[a,e,this])&&d.push(a),e++;return new a(d)}map(b,c){let d=[],e=0;for(let a of this)d.push([a[0],Reflect.apply(b,c,[a,e,this])]),e++;return new a(d)}reduce(...a){let[b,c]=a,d=0,e=c??this.at(0);for(let c of this)e=0===d&&1===a.length?c:Reflect.apply(b,this,[e,c,d,this]),d++;return e}reduceRight(...a){let[b,c]=a,d=c??this.at(-1);for(let c=this.size-1;c>=0;c--){let e=this.at(c);d=c===this.size-1&&1===a.length?e:Reflect.apply(b,this,[d,e,c,this])}return d}toSorted(b){return new a([...this.entries()].sort(b))}toReversed(){let b=new a;for(let a=this.size-1;a>=0;a--){let c=this.keyAt(a),d=this.get(c);b.set(c,d)}return b}toSpliced(...b){let c=[...this.entries()];return c.splice(...b),new a(c)}slice(b,c){let d=new a,e=this.size-1;if(void 0===b)return d;b<0&&(b+=this.size),void 0!==c&&c>0&&(e=c-1);for(let a=b;a<=e;a++){let b=this.keyAt(a),c=this.get(b);d.set(b,c)}return d}every(a,b){let c=0;for(let d of this){if(!Reflect.apply(a,b,[d,c,this]))return!1;c++}return!0}some(a,b){let c=0;for(let d of this){if(Reflect.apply(a,b,[d,c,this]))return!0;c++}return!1}}),a.s(["createCollection",0,function(a){let g=a+"CollectionProvider",[h,i]=(0,c.createContextScope)(g),[j,k]=h(g,{collectionRef:{current:null},itemMap:new Map}),l=a=>{let{scope:c,children:d}=a,e=b.default.useRef(null),g=b.default.useRef(new Map).current;return(0,f.jsx)(j,{scope:c,itemMap:g,collectionRef:e,children:d})};l.displayName=g;let m=a+"CollectionSlot",n=(0,e.createSlot)(m),o=b.default.forwardRef((a,b)=>{let{scope:c,children:e}=a,g=k(m,c),h=(0,d.useComposedRefs)(b,g.collectionRef);return(0,f.jsx)(n,{ref:h,children:e})});o.displayName=m;let p=a+"CollectionItemSlot",q="data-radix-collection-item",r=(0,e.createSlot)(p),s=b.default.forwardRef((a,c)=>{let{scope:e,children:g,...h}=a,i=b.default.useRef(null),j=(0,d.useComposedRefs)(c,i),l=k(p,e);return b.default.useEffect(()=>(l.itemMap.set(i,{ref:i,...h}),()=>void l.itemMap.delete(i))),(0,f.jsx)(r,{...{[q]:""},ref:j,children:g})});return s.displayName=p,[{Provider:l,Slot:o,ItemSlot:s},function(c){let d=k(a+"CollectionConsumer",c);return b.default.useCallback(()=>{let a=d.collectionRef.current;if(!a)return[];let b=Array.from(a.querySelectorAll(`[${q}]`));return Array.from(d.itemMap.values()).sort((a,c)=>b.indexOf(a.ref.current)-b.indexOf(c.ref.current))},[d.collectionRef,d.itemMap])},i]}])},48972,a=>{"use strict";a.s(["clamp",0,function(a,[b,c]){return Math.min(c,Math.max(b,a))}])},96336,a=>{"use strict";let b=(0,a.i(5423).default)("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);a.s(["Trash2",0,b],96336)},43179,a=>{"use strict";let b=(0,a.i(5423).default)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);a.s(["Plus",0,b],43179)},54506,a=>{"use strict";let b=(0,a.i(5423).default)("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);a.s(["Check",0,b],54506)},74794,a=>{"use strict";var b=a.i(62588),c=a.i(59974);a.s(["useBackends",0,function(a){return(0,b.useQuery)({queryKey:["backends"],queryFn:()=>c.api.get("/backends"),enabled:a?.enabled??!0,staleTime:6e4})}])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=_115_o9h._.js.map
|