@aitne/dashboard 0.1.4 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +5 -1
- package/.next/build-manifest.json +3 -3
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/diagnostics/route-bundle-stats.json +450 -356
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +96 -0
- package/.next/routes-manifest.json +24 -0
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +15 -15
- package/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/activity/page.js.nft.json +1 -1
- package/.next/server/app/activity/page_client-reference-manifest.js +1 -1
- package/.next/server/app/activity.html +1 -1
- package/.next/server/app/activity.rsc +19 -19
- package/.next/server/app/activity.segments/_full.segment.rsc +19 -19
- package/.next/server/app/activity.segments/_head.segment.rsc +4 -4
- package/.next/server/app/activity.segments/_index.segment.rsc +10 -10
- package/.next/server/app/activity.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/activity.segments/activity/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/activity.segments/activity.segment.rsc +4 -4
- package/.next/server/app/analytics/page.js.nft.json +1 -1
- package/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
- package/.next/server/app/analytics.html +1 -1
- package/.next/server/app/analytics.rsc +19 -19
- package/.next/server/app/analytics.segments/_full.segment.rsc +19 -19
- package/.next/server/app/analytics.segments/_head.segment.rsc +4 -4
- package/.next/server/app/analytics.segments/_index.segment.rsc +10 -10
- package/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/analytics.segments/analytics/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/analytics.segments/analytics.segment.rsc +4 -4
- package/.next/server/app/api/[...path]/route.js +1 -1
- package/.next/server/app/api/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +17 -17
- package/.next/server/app/chat.segments/_full.segment.rsc +17 -17
- package/.next/server/app/chat.segments/_head.segment.rsc +4 -4
- package/.next/server/app/chat.segments/_index.segment.rsc +10 -10
- package/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/chat.segments/chat.segment.rsc +3 -3
- package/.next/server/app/connections/calendar/page.js.nft.json +1 -1
- package/.next/server/app/connections/calendar/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/calendar.html +1 -1
- package/.next/server/app/connections/calendar.rsc +18 -18
- package/.next/server/app/connections/calendar.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/calendar.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/calendar.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/calendar.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/calendar.segments/connections/calendar/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/calendar.segments/connections/calendar.segment.rsc +3 -3
- package/.next/server/app/connections/calendar.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/journal/page.js.nft.json +1 -1
- package/.next/server/app/connections/journal/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/journal.html +1 -1
- package/.next/server/app/connections/journal.rsc +16 -16
- package/.next/server/app/connections/journal.segments/_full.segment.rsc +16 -16
- package/.next/server/app/connections/journal.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/journal.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/journal.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/journal.segments/connections/journal/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/connections/journal.segments/connections/journal.segment.rsc +3 -3
- package/.next/server/app/connections/journal.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge/page.js.nft.json +1 -1
- package/.next/server/app/connections/knowledge/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/knowledge.html +1 -1
- package/.next/server/app/connections/knowledge.rsc +18 -18
- package/.next/server/app/connections/knowledge.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/knowledge.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/knowledge.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/knowledge.segments/connections/knowledge/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge.segments/connections/knowledge.segment.rsc +3 -3
- package/.next/server/app/connections/knowledge.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/mail/page.js.nft.json +1 -1
- package/.next/server/app/connections/mail/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/mail.html +1 -1
- package/.next/server/app/connections/mail.rsc +18 -18
- package/.next/server/app/connections/mail.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/mail.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/mail.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/mail.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/mail.segments/connections/mail/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/mail.segments/connections/mail.segment.rsc +3 -3
- package/.next/server/app/connections/mail.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/mcp/page.js.nft.json +1 -1
- package/.next/server/app/connections/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/mcp.html +1 -1
- package/.next/server/app/connections/mcp.rsc +18 -18
- package/.next/server/app/connections/mcp.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/mcp.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/mcp.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/mcp.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/mcp.segments/connections/mcp/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/mcp.segments/connections/mcp.segment.rsc +3 -3
- package/.next/server/app/connections/mcp.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/messaging/page.js.nft.json +1 -1
- package/.next/server/app/connections/messaging/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/messaging.html +1 -1
- package/.next/server/app/connections/messaging.rsc +18 -18
- package/.next/server/app/connections/messaging.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/messaging.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/messaging.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/messaging.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/messaging.segments/connections/messaging/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/messaging.segments/connections/messaging.segment.rsc +3 -3
- package/.next/server/app/connections/messaging.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/page.js.nft.json +1 -1
- package/.next/server/app/connections/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/repositories/page.js.nft.json +1 -1
- package/.next/server/app/connections/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/repositories.html +1 -1
- package/.next/server/app/connections/repositories.rsc +18 -18
- package/.next/server/app/connections/repositories.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/repositories.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/repositories.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/repositories.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/repositories.segments/connections/repositories/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/repositories.segments/connections/repositories.segment.rsc +3 -3
- package/.next/server/app/connections/repositories.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/routines/page.js.nft.json +1 -1
- package/.next/server/app/connections/routines/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/routines.html +1 -1
- package/.next/server/app/connections/routines.rsc +16 -16
- package/.next/server/app/connections/routines.segments/_full.segment.rsc +16 -16
- package/.next/server/app/connections/routines.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/routines.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/routines.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/routines.segments/connections/routines/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/connections/routines.segments/connections/routines.segment.rsc +3 -3
- package/.next/server/app/connections/routines.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections.html +1 -1
- package/.next/server/app/connections.rsc +16 -16
- package/.next/server/app/connections.segments/_full.segment.rsc +16 -16
- package/.next/server/app/connections.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections.segments/connections/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/connections.segments/connections.segment.rsc +4 -4
- package/.next/server/app/conversations/[id]/page.js.nft.json +1 -1
- package/.next/server/app/conversations/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/conversations/page.js.nft.json +1 -1
- package/.next/server/app/conversations/page_client-reference-manifest.js +1 -1
- package/.next/server/app/conversations.html +1 -1
- package/.next/server/app/conversations.rsc +15 -15
- package/.next/server/app/conversations.segments/_full.segment.rsc +15 -15
- package/.next/server/app/conversations.segments/_head.segment.rsc +4 -4
- package/.next/server/app/conversations.segments/_index.segment.rsc +10 -10
- package/.next/server/app/conversations.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/conversations.segments/conversations/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/conversations.segments/conversations.segment.rsc +3 -3
- package/.next/server/app/docs/[[...slug]]/page.js.nft.json +1 -1
- package/.next/server/app/docs/[[...slug]]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/finance/page.js.nft.json +1 -1
- package/.next/server/app/finance/page_client-reference-manifest.js +1 -1
- package/.next/server/app/finance.html +1 -1
- package/.next/server/app/finance.rsc +17 -17
- package/.next/server/app/finance.segments/_full.segment.rsc +17 -17
- package/.next/server/app/finance.segments/_head.segment.rsc +4 -4
- package/.next/server/app/finance.segments/_index.segment.rsc +10 -10
- package/.next/server/app/finance.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/finance.segments/finance/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/finance.segments/finance.segment.rsc +3 -3
- package/.next/server/app/git/page.js.nft.json +1 -1
- package/.next/server/app/git/page_client-reference-manifest.js +1 -1
- package/.next/server/app/git.html +1 -1
- package/.next/server/app/git.rsc +17 -17
- package/.next/server/app/git.segments/_full.segment.rsc +17 -17
- package/.next/server/app/git.segments/_head.segment.rsc +4 -4
- package/.next/server/app/git.segments/_index.segment.rsc +10 -10
- package/.next/server/app/git.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/git.segments/git/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/git.segments/git.segment.rsc +3 -3
- package/.next/server/app/health/page.js.nft.json +1 -1
- package/.next/server/app/health/page_client-reference-manifest.js +1 -1
- package/.next/server/app/health.html +1 -1
- package/.next/server/app/health.rsc +17 -17
- package/.next/server/app/health.segments/_full.segment.rsc +17 -17
- package/.next/server/app/health.segments/_head.segment.rsc +4 -4
- package/.next/server/app/health.segments/_index.segment.rsc +10 -10
- package/.next/server/app/health.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/health.segments/health/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/health.segments/health.segment.rsc +3 -3
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +17 -17
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +17 -17
- package/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/server/app/index.segments/_index.segment.rsc +10 -10
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/knowledge/page.js.nft.json +1 -1
- package/.next/server/app/knowledge/page_client-reference-manifest.js +1 -1
- package/.next/server/app/knowledge.html +1 -1
- package/.next/server/app/knowledge.rsc +18 -18
- package/.next/server/app/knowledge.segments/_full.segment.rsc +18 -18
- package/.next/server/app/knowledge.segments/_head.segment.rsc +4 -4
- package/.next/server/app/knowledge.segments/_index.segment.rsc +10 -10
- package/.next/server/app/knowledge.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/knowledge.segments/knowledge/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/knowledge.segments/knowledge.segment.rsc +4 -4
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/reading/page.js.nft.json +1 -1
- package/.next/server/app/reading/page_client-reference-manifest.js +1 -1
- package/.next/server/app/reading.html +1 -1
- package/.next/server/app/reading.rsc +17 -17
- package/.next/server/app/reading.segments/_full.segment.rsc +17 -17
- package/.next/server/app/reading.segments/_head.segment.rsc +4 -4
- package/.next/server/app/reading.segments/_index.segment.rsc +10 -10
- package/.next/server/app/reading.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/reading.segments/reading/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/reading.segments/reading.segment.rsc +3 -3
- package/.next/server/app/schedule/page.js.nft.json +1 -1
- package/.next/server/app/schedule/page_client-reference-manifest.js +1 -1
- package/.next/server/app/schedule.html +1 -1
- package/.next/server/app/schedule.rsc +17 -17
- package/.next/server/app/schedule.segments/_full.segment.rsc +17 -17
- package/.next/server/app/schedule.segments/_head.segment.rsc +4 -4
- package/.next/server/app/schedule.segments/_index.segment.rsc +10 -10
- package/.next/server/app/schedule.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/schedule.segments/schedule/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/schedule.segments/schedule.segment.rsc +3 -3
- package/.next/server/app/settings/advanced/page.js.nft.json +1 -1
- package/.next/server/app/settings/advanced/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/advanced.html +1 -1
- package/.next/server/app/settings/advanced.rsc +18 -18
- package/.next/server/app/settings/advanced.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/advanced.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/advanced.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/advanced.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/advanced.segments/settings/advanced/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/advanced.segments/settings/advanced.segment.rsc +3 -3
- package/.next/server/app/settings/advanced.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/backends/page.js.nft.json +1 -1
- package/.next/server/app/settings/backends/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/backends.html +1 -1
- package/.next/server/app/settings/backends.rsc +16 -16
- package/.next/server/app/settings/backends.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/backends.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/backends.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/backends.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/backends.segments/settings/backends/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/backends.segments/settings/backends.segment.rsc +3 -3
- package/.next/server/app/settings/backends.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/commands/page.js.nft.json +1 -1
- package/.next/server/app/settings/commands/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/commands.html +1 -1
- package/.next/server/app/settings/commands.rsc +18 -18
- package/.next/server/app/settings/commands.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/commands.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/commands.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/commands.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/commands.segments/settings/commands/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/commands.segments/settings/commands.segment.rsc +3 -3
- package/.next/server/app/settings/commands.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/connections/page.js.nft.json +1 -1
- package/.next/server/app/settings/connections/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/connections.html +1 -1
- package/.next/server/app/settings/connections.rsc +16 -16
- package/.next/server/app/settings/connections.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/connections.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/connections.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/connections.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/connections.segments/settings/connections/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/connections.segments/settings/connections.segment.rsc +3 -3
- package/.next/server/app/settings/connections.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/journal/page.js.nft.json +1 -1
- package/.next/server/app/settings/journal/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/journal.html +1 -1
- package/.next/server/app/settings/journal.rsc +18 -18
- package/.next/server/app/settings/journal.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/journal.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/journal.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/journal.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/journal.segments/settings/journal/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/journal.segments/settings/journal.segment.rsc +3 -3
- package/.next/server/app/settings/journal.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/management/page.js.nft.json +1 -1
- package/.next/server/app/settings/management/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/management.html +1 -1
- package/.next/server/app/settings/management.rsc +18 -18
- package/.next/server/app/settings/management.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/management.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/management.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/management.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/management.segments/settings/management/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/management.segments/settings/management.segment.rsc +3 -3
- package/.next/server/app/settings/management.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/messaging/page.js.nft.json +1 -1
- package/.next/server/app/settings/messaging/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/messaging.html +1 -1
- package/.next/server/app/settings/messaging.rsc +16 -16
- package/.next/server/app/settings/messaging.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/messaging.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/messaging.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/messaging.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/messaging.segments/settings/messaging/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/messaging.segments/settings/messaging.segment.rsc +3 -3
- package/.next/server/app/settings/messaging.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/models/page.js.nft.json +1 -1
- package/.next/server/app/settings/models/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/models.html +1 -1
- package/.next/server/app/settings/models.rsc +18 -18
- package/.next/server/app/settings/models.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/models.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/models.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/models.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/models.segments/settings/models/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/models.segments/settings/models.segment.rsc +3 -3
- package/.next/server/app/settings/models.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/processes/page.js.nft.json +1 -1
- package/.next/server/app/settings/processes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/processes.html +1 -1
- package/.next/server/app/settings/processes.rsc +16 -16
- package/.next/server/app/settings/processes.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/processes.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/processes.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/processes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/processes.segments/settings/processes/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/processes.segments/settings/processes.segment.rsc +3 -3
- package/.next/server/app/settings/processes.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/routines/page.js.nft.json +1 -1
- package/.next/server/app/settings/routines/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/routines.html +1 -1
- package/.next/server/app/settings/routines.rsc +18 -18
- package/.next/server/app/settings/routines.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/routines.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/routines.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/routines.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/routines.segments/settings/routines/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/routines.segments/settings/routines.segment.rsc +3 -3
- package/.next/server/app/settings/routines.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/schedule/page.js.nft.json +1 -1
- package/.next/server/app/settings/schedule/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/schedule.html +1 -1
- package/.next/server/app/settings/schedule.rsc +18 -18
- package/.next/server/app/settings/schedule.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/schedule.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/schedule.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/schedule.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/schedule.segments/settings/schedule/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/schedule.segments/settings/schedule.segment.rsc +3 -3
- package/.next/server/app/settings/schedule.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning/page.js.nft.json +1 -1
- package/.next/server/app/settings/self-learning/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/self-learning.html +1 -1
- package/.next/server/app/settings/self-learning.rsc +18 -18
- package/.next/server/app/settings/self-learning.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/self-learning.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/self-learning.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/self-learning.segments/settings/self-learning/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning.segments/settings/self-learning.segment.rsc +3 -3
- package/.next/server/app/settings/self-learning.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/wiki/page/app-paths-manifest.json +3 -0
- package/.next/server/app/settings/wiki/page/build-manifest.json +18 -0
- package/.next/server/app/settings/wiki/page/next-font-manifest.json +6 -0
- package/.next/server/app/settings/wiki/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/settings/wiki/page/server-reference-manifest.json +4 -0
- package/.next/server/app/settings/wiki/page.js +16 -0
- package/.next/server/app/settings/wiki/page.js.map +5 -0
- package/.next/server/app/settings/wiki/page.js.nft.json +1 -0
- package/.next/server/app/settings/wiki/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings/wiki/timeline/page/app-paths-manifest.json +3 -0
- package/.next/server/app/settings/wiki/timeline/page/build-manifest.json +18 -0
- package/.next/server/app/settings/wiki/timeline/page/next-font-manifest.json +6 -0
- package/.next/server/app/settings/wiki/timeline/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/settings/wiki/timeline/page/server-reference-manifest.json +4 -0
- package/.next/server/app/settings/wiki/timeline/page.js +17 -0
- package/.next/server/app/settings/wiki/timeline/page.js.map +5 -0
- package/.next/server/app/settings/wiki/timeline/page.js.nft.json +1 -0
- package/.next/server/app/settings/wiki/timeline/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings/wiki/timeline.html +1 -0
- package/.next/server/app/settings/wiki/timeline.meta +17 -0
- package/.next/server/app/settings/wiki/timeline.rsc +24 -0
- package/.next/server/app/settings/wiki/timeline.segments/_full.segment.rsc +24 -0
- package/.next/server/app/settings/wiki/timeline.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/wiki/timeline.segments/_index.segment.rsc +11 -0
- package/.next/server/app/settings/wiki/timeline.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki/timeline/__PAGE__.segment.rsc +6 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki/timeline.segment.rsc +5 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki.segment.rsc +5 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings.segment.rsc +5 -0
- package/.next/server/app/settings/wiki.html +1 -0
- package/.next/server/app/settings/wiki.meta +16 -0
- package/.next/server/app/settings/wiki.rsc +27 -0
- package/.next/server/app/settings/wiki.segments/_full.segment.rsc +27 -0
- package/.next/server/app/settings/wiki.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/wiki.segments/_index.segment.rsc +11 -0
- package/.next/server/app/settings/wiki.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/settings/wiki.segments/settings/wiki/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/settings/wiki.segments/settings/wiki.segment.rsc +5 -0
- package/.next/server/app/settings/wiki.segments/settings.segment.rsc +5 -0
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +18 -18
- package/.next/server/app/settings.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings.segments/settings.segment.rsc +4 -4
- package/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/server/app/setup.html +1 -1
- package/.next/server/app/setup.rsc +17 -17
- package/.next/server/app/setup.segments/_full.segment.rsc +17 -17
- package/.next/server/app/setup.segments/_head.segment.rsc +4 -4
- package/.next/server/app/setup.segments/_index.segment.rsc +10 -10
- package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/setup.segments/setup.segment.rsc +3 -3
- package/.next/server/app/trip/page.js.nft.json +1 -1
- package/.next/server/app/trip/page_client-reference-manifest.js +1 -1
- package/.next/server/app/trip.html +1 -1
- package/.next/server/app/trip.rsc +17 -17
- package/.next/server/app/trip.segments/_full.segment.rsc +17 -17
- package/.next/server/app/trip.segments/_head.segment.rsc +4 -4
- package/.next/server/app/trip.segments/_index.segment.rsc +10 -10
- package/.next/server/app/trip.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/trip.segments/trip/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/trip.segments/trip.segment.rsc +3 -3
- package/.next/server/app/wiki/page/app-paths-manifest.json +3 -0
- package/.next/server/app/wiki/page/build-manifest.json +18 -0
- package/.next/server/app/wiki/page/next-font-manifest.json +6 -0
- package/.next/server/app/wiki/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/wiki/page/server-reference-manifest.json +4 -0
- package/.next/server/app/wiki/page.js +15 -0
- package/.next/server/app/wiki/page.js.map +5 -0
- package/.next/server/app/wiki/page.js.nft.json +1 -0
- package/.next/server/app/wiki/page_client-reference-manifest.js +3 -0
- package/.next/server/app/wiki/timeline/page/app-paths-manifest.json +3 -0
- package/.next/server/app/wiki/timeline/page/build-manifest.json +18 -0
- package/.next/server/app/wiki/timeline/page/next-font-manifest.json +6 -0
- package/.next/server/app/wiki/timeline/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/wiki/timeline/page/server-reference-manifest.json +4 -0
- package/.next/server/app/wiki/timeline/page.js +15 -0
- package/.next/server/app/wiki/timeline/page.js.map +5 -0
- package/.next/server/app/wiki/timeline/page.js.nft.json +1 -0
- package/.next/server/app/wiki/timeline/page_client-reference-manifest.js +3 -0
- package/.next/server/app/wiki/timeline.html +1 -0
- package/.next/server/app/wiki/timeline.meta +16 -0
- package/.next/server/app/wiki/timeline.rsc +26 -0
- package/.next/server/app/wiki/timeline.segments/_full.segment.rsc +26 -0
- package/.next/server/app/wiki/timeline.segments/_head.segment.rsc +6 -0
- package/.next/server/app/wiki/timeline.segments/_index.segment.rsc +11 -0
- package/.next/server/app/wiki/timeline.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/wiki/timeline.segments/wiki/timeline/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/wiki/timeline.segments/wiki/timeline.segment.rsc +5 -0
- package/.next/server/app/wiki/timeline.segments/wiki.segment.rsc +5 -0
- package/.next/server/app/wiki.html +1 -0
- package/.next/server/app/wiki.meta +15 -0
- package/.next/server/app/wiki.rsc +26 -0
- package/.next/server/app/wiki.segments/_full.segment.rsc +26 -0
- package/.next/server/app/wiki.segments/_head.segment.rsc +6 -0
- package/.next/server/app/wiki.segments/_index.segment.rsc +11 -0
- package/.next/server/app/wiki.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/wiki.segments/wiki/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/wiki.segments/wiki.segment.rsc +5 -0
- package/.next/server/app-paths-manifest.json +5 -1
- package/.next/server/chunks/0z~i_next_dist_esm_build_templates_app-route_0o_o_hp.js +1 -1
- package/.next/server/chunks/0z~i_next_dist_esm_build_templates_app-route_0o_o_hp.js.map +1 -1
- package/.next/server/chunks/{[root-of-the-server]__00gp8gz._.js → [root-of-the-server]__01knfi.._.js} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0-0wgko._.js → [root-of-the-server]__08_s4yo._.js} +2 -2
- package/.next/server/chunks/ssr/0juq_dashboard__next-internal_server_app_settings_wiki_timeline_page_actions_0czqn6z.js +3 -0
- package/.next/server/chunks/ssr/0juq_dashboard__next-internal_server_app_settings_wiki_timeline_page_actions_0czqn6z.js.map +1 -0
- package/.next/server/chunks/ssr/0mzu_lucide-react_dist_esm_icons_zap_115-27i.js +3 -0
- package/.next/server/chunks/ssr/0mzu_lucide-react_dist_esm_icons_zap_115-27i.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0k3x-na.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0k3x-na.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0km22.v.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0km22.v.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0vui1gx.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0vui1gx.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_11h319t.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_11h319t.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__007ymqm._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__007ymqm._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00vjce2._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00vjce2._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__07pkvm3._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__07pkvm3._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dfuz7_._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dfuz7_._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__117dw_l._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__117dw_l._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-3uzu1._.js +3 -0
- package/.next/server/chunks/ssr/_0-3uzu1._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-6jgyg._.js +3 -0
- package/.next/server/chunks/ssr/_0-6jgyg._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-fv_sr._.js +1 -1
- package/.next/server/chunks/ssr/_0-fv_sr._.js.map +1 -1
- package/.next/server/chunks/ssr/_0.7pki~._.js +3 -0
- package/.next/server/chunks/ssr/_0.7pki~._.js.map +1 -0
- package/.next/server/chunks/ssr/_02s86rg._.js +3 -0
- package/.next/server/chunks/ssr/_02s86rg._.js.map +1 -0
- package/.next/server/chunks/ssr/_03bq.de._.js +3 -0
- package/.next/server/chunks/ssr/_03bq.de._.js.map +1 -0
- package/.next/server/chunks/ssr/_03u6ja0._.js +3 -0
- package/.next/server/chunks/ssr/_03u6ja0._.js.map +1 -0
- package/.next/server/chunks/ssr/_04-.z69._.js +3 -0
- package/.next/server/chunks/ssr/_04-.z69._.js.map +1 -0
- package/.next/server/chunks/ssr/_05rlac0._.js +3 -0
- package/.next/server/chunks/ssr/_05rlac0._.js.map +1 -0
- package/.next/server/chunks/ssr/_05xysbw._.js +3 -0
- package/.next/server/chunks/ssr/_05xysbw._.js.map +1 -0
- package/.next/server/chunks/ssr/_09e_66m._.js +3 -0
- package/.next/server/chunks/ssr/_09e_66m._.js.map +1 -0
- package/.next/server/chunks/ssr/_0_bnan9._.js +3 -0
- package/.next/server/chunks/ssr/_0_bnan9._.js.map +1 -0
- package/.next/server/chunks/ssr/_0b00io4._.js +3 -0
- package/.next/server/chunks/ssr/_0b00io4._.js.map +1 -0
- package/.next/server/chunks/ssr/_0es_2i2._.js +3 -0
- package/.next/server/chunks/ssr/_0es_2i2._.js.map +1 -0
- package/.next/server/chunks/ssr/_0g7_r5i._.js +3 -0
- package/.next/server/chunks/ssr/_0g7_r5i._.js.map +1 -0
- package/.next/server/chunks/ssr/_0hojxqy._.js +1 -1
- package/.next/server/chunks/ssr/_0hojxqy._.js.map +1 -1
- package/.next/server/chunks/ssr/_0ifb9jm._.js +3 -0
- package/.next/server/chunks/ssr/_0ifb9jm._.js.map +1 -0
- package/.next/server/chunks/ssr/_0jl_-u5._.js +3 -0
- package/.next/server/chunks/ssr/_0jl_-u5._.js.map +1 -0
- package/.next/server/chunks/ssr/_0lfuvjg._.js +3 -0
- package/.next/server/chunks/ssr/_0lfuvjg._.js.map +1 -0
- package/.next/server/chunks/ssr/{_0jm~wn-._.js → _0mp7n5i._.js} +2 -2
- package/.next/server/chunks/ssr/{_0jm~wn-._.js.map → _0mp7n5i._.js.map} +1 -1
- package/.next/server/chunks/ssr/_0powsoh._.js +3 -0
- package/.next/server/chunks/ssr/_0powsoh._.js.map +1 -0
- package/.next/server/chunks/ssr/_0q34y9l._.js +3 -0
- package/.next/server/chunks/ssr/_0q34y9l._.js.map +1 -0
- package/.next/server/chunks/ssr/_0q4rpi-._.js +5 -0
- package/.next/server/chunks/ssr/_0q4rpi-._.js.map +1 -0
- package/.next/server/chunks/ssr/_0rc-7d4._.js +3 -0
- package/.next/server/chunks/ssr/_0rc-7d4._.js.map +1 -0
- package/.next/server/chunks/ssr/_0tjsh16._.js +3 -0
- package/.next/server/chunks/ssr/_0tjsh16._.js.map +1 -0
- package/.next/server/chunks/ssr/_0tl98en._.js +1 -1
- package/.next/server/chunks/ssr/_0tl98en._.js.map +1 -1
- package/.next/server/chunks/ssr/{_0._ysx3._.js → _0v_6ros._.js} +2 -2
- package/.next/server/chunks/ssr/_0v_6ros._.js.map +1 -0
- package/.next/server/chunks/ssr/_0vncjim._.js +3 -0
- package/.next/server/chunks/ssr/_0vncjim._.js.map +1 -0
- package/.next/server/chunks/ssr/_0vx-jgf._.js +3 -0
- package/.next/server/chunks/ssr/_0vx-jgf._.js.map +1 -0
- package/.next/server/chunks/ssr/_0w1ez1p._.js +3 -0
- package/.next/server/chunks/ssr/_0w1ez1p._.js.map +1 -0
- package/.next/server/chunks/ssr/_0yl49yk._.js +3 -0
- package/.next/server/chunks/ssr/_0yl49yk._.js.map +1 -0
- package/.next/server/chunks/ssr/_0z1ah9x._.js +1 -1
- package/.next/server/chunks/ssr/_0z1ah9x._.js.map +1 -1
- package/.next/server/chunks/ssr/_0z9ikwn._.js +3 -0
- package/.next/server/chunks/ssr/_0z9ikwn._.js.map +1 -0
- package/.next/server/chunks/ssr/_0z_cp12._.js +3 -0
- package/.next/server/chunks/ssr/_0z_cp12._.js.map +1 -0
- package/.next/server/chunks/ssr/_10hvwg5._.js +3 -0
- package/.next/server/chunks/ssr/_10hvwg5._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_settings_wiki_page_actions_12d~w9l.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_settings_wiki_page_actions_12d~w9l.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_page_actions_026bi.d.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_page_actions_026bi.d.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_timeline_page_actions_06jb4gg.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_timeline_page_actions_06jb4gg.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0bx940s._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0bx940s._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0fo7nqq._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0fo7nqq._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0uxs9-.._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_0uxs9-.._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_activity_page_tsx_08yep46._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_activity_page_tsx_08yep46._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_connections_repositories_page_tsx_08y6paq._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_connections_repositories_page_tsx_08y6paq._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_git_page_tsx_0ah19-6._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_git_page_tsx_0ah19-6._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_schedule_page_tsx_0znc404._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_schedule_page_tsx_0znc404._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_models_page_tsx_0djsx88._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_models_page_tsx_0djsx88._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_schedule_page_tsx_0b8zr2l._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_schedule_page_tsx_0b8zr2l._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_wiki_page_tsx_0..1tkb._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_wiki_page_tsx_0..1tkb._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_app_setup_page_tsx_06k3via._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_setup_page_tsx_06k3via._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_components_connections_slack-card_tsx_0mahejj._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_components_connections_slack-card_tsx_0mahejj._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_components_settings_backend-settings_tsx_0i-tp_u._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_components_settings_backend-settings_tsx_0i-tp_u._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_shared_dist_index_0kuvow-.js +1 -1
- package/.next/server/chunks/ssr/packages_shared_dist_index_0kuvow-.js.map +1 -1
- package/.next/server/middleware/middleware-manifest.json +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/middleware-manifest.json +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/01yix41q.0970.js +1 -0
- package/.next/static/chunks/02qjylw4yp63l.js +1 -0
- package/.next/static/chunks/06y2ddf5x9x_4.js +1 -0
- package/.next/static/chunks/{0ztl~44vjnpe1.js → 08ie9t4zn6n4-.js} +1 -1
- package/.next/static/chunks/091khs5zza4_4.js +1 -0
- package/.next/static/chunks/{0~_56pt8wsmeo.js → 0abhg-m1-acdb.js} +1 -1
- package/.next/static/chunks/0ae.1upy09t--.js +1 -0
- package/.next/static/chunks/0bvcd~k.vfro8.js +1 -0
- package/.next/static/chunks/{0g6.0r0i-wyeg.js → 0eqm47_oikj36.js} +1 -1
- package/.next/static/chunks/0fqugh~hv4my1.js +1 -0
- package/.next/static/chunks/0has04tc4mrik.js +1 -0
- package/.next/static/chunks/0huynm-qbj26k.js +1 -0
- package/.next/static/chunks/0ibq4zul6305p.js +1 -0
- package/.next/static/chunks/0jm_e6e6n~rdn.js +1 -0
- package/.next/static/chunks/0k0.4cksmybb2.js +1 -0
- package/.next/static/chunks/0l07yrtw3fxp5.js +1 -0
- package/.next/static/chunks/0nhqu-sq045x7.js +1 -0
- package/.next/static/chunks/0op3oc-if6n5-.js +3 -0
- package/.next/static/chunks/0p34n6.st3s~1.js +1 -0
- package/.next/static/chunks/0r8nosw42e2m9.js +1 -0
- package/.next/static/chunks/0shx3_mxukfhr.js +1 -0
- package/.next/static/chunks/0thm~t5g5adz1.js +1 -0
- package/.next/static/chunks/0thyr1cngc-j..css +1 -0
- package/.next/static/chunks/0ttdb_354lh4t.js +1 -0
- package/.next/static/chunks/0v..ut2v38yep.js +1 -0
- package/.next/static/chunks/{17npklzvg8-~3.js → 0vhj0k-zy6jhh.js} +1 -1
- package/.next/static/chunks/0wdx410~0~gmn.js +1 -0
- package/.next/static/chunks/0y3ptqa0bbi-h.js +1 -0
- package/.next/static/chunks/{0zbxi2grjtx.c.js → 0zx_~u_zxg_7e.js} +1 -1
- package/.next/static/chunks/{0f3kjzb~5zhc~.js → 10pq~97vgkzro.js} +1 -1
- package/.next/static/chunks/11hlk6.h1of0y.js +1 -0
- package/.next/static/chunks/13w_6v~nprp8j.js +11 -0
- package/.next/static/chunks/14-kkni6ecqaw.js +1 -0
- package/.next/static/chunks/{148a9fv~bo0gq.js → 1555iv~_t.1lp.js} +1 -1
- package/.next/static/chunks/{04bbme2th8s1_.js → 15ec5~pa1pv_z.js} +1 -1
- package/.next/static/chunks/15vc-857cdedi.js +1 -0
- package/.next/static/chunks/16zgco6hwlr-n.js +1 -0
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/.next/types/routes.d.ts +5 -1
- package/.next/types/validator.ts +36 -0
- package/package.json +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__02idks~._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__02idks~._.js.map +0 -1
- package/.next/server/chunks/ssr/_0-8__9s._.js +0 -3
- package/.next/server/chunks/ssr/_0-8__9s._.js.map +0 -1
- package/.next/server/chunks/ssr/_0._ysx3._.js.map +0 -1
- package/.next/server/chunks/ssr/_0.h-tj4._.js +0 -3
- package/.next/server/chunks/ssr/_0.h-tj4._.js.map +0 -1
- package/.next/server/chunks/ssr/_02g4o18._.js +0 -3
- package/.next/server/chunks/ssr/_02g4o18._.js.map +0 -1
- package/.next/server/chunks/ssr/_0463dg_._.js +0 -3
- package/.next/server/chunks/ssr/_0463dg_._.js.map +0 -1
- package/.next/server/chunks/ssr/_04a42pa._.js +0 -3
- package/.next/server/chunks/ssr/_04a42pa._.js.map +0 -1
- package/.next/server/chunks/ssr/_04kt9.8._.js +0 -3
- package/.next/server/chunks/ssr/_04kt9.8._.js.map +0 -1
- package/.next/server/chunks/ssr/_052zlig._.js +0 -3
- package/.next/server/chunks/ssr/_052zlig._.js.map +0 -1
- package/.next/server/chunks/ssr/_060itkv._.js +0 -3
- package/.next/server/chunks/ssr/_060itkv._.js.map +0 -1
- package/.next/server/chunks/ssr/_07p0n9g._.js +0 -3
- package/.next/server/chunks/ssr/_07p0n9g._.js.map +0 -1
- package/.next/server/chunks/ssr/_08mbdt1._.js +0 -3
- package/.next/server/chunks/ssr/_08mbdt1._.js.map +0 -1
- package/.next/server/chunks/ssr/_08r_qwd._.js +0 -3
- package/.next/server/chunks/ssr/_08r_qwd._.js.map +0 -1
- package/.next/server/chunks/ssr/_08xk3kp._.js +0 -3
- package/.next/server/chunks/ssr/_08xk3kp._.js.map +0 -1
- package/.next/server/chunks/ssr/_0938p.1._.js +0 -3
- package/.next/server/chunks/ssr/_0938p.1._.js.map +0 -1
- package/.next/server/chunks/ssr/_0afdsbz._.js +0 -3
- package/.next/server/chunks/ssr/_0afdsbz._.js.map +0 -1
- package/.next/server/chunks/ssr/_0ff5qav._.js +0 -3
- package/.next/server/chunks/ssr/_0ff5qav._.js.map +0 -1
- package/.next/server/chunks/ssr/_0gp8d.p._.js +0 -3
- package/.next/server/chunks/ssr/_0gp8d.p._.js.map +0 -1
- package/.next/server/chunks/ssr/_0k2j6-t._.js +0 -3
- package/.next/server/chunks/ssr/_0k2j6-t._.js.map +0 -1
- package/.next/server/chunks/ssr/_0mix09j._.js +0 -3
- package/.next/server/chunks/ssr/_0mix09j._.js.map +0 -1
- package/.next/server/chunks/ssr/_0mk7dqt._.js +0 -3
- package/.next/server/chunks/ssr/_0mk7dqt._.js.map +0 -1
- package/.next/server/chunks/ssr/_0n168uk._.js +0 -3
- package/.next/server/chunks/ssr/_0n168uk._.js.map +0 -1
- package/.next/server/chunks/ssr/_0nwg6lo._.js +0 -3
- package/.next/server/chunks/ssr/_0nwg6lo._.js.map +0 -1
- package/.next/server/chunks/ssr/_0pwd-nz._.js +0 -3
- package/.next/server/chunks/ssr/_0pwd-nz._.js.map +0 -1
- package/.next/server/chunks/ssr/_0rspzax._.js +0 -3
- package/.next/server/chunks/ssr/_0rspzax._.js.map +0 -1
- package/.next/server/chunks/ssr/_0t-2u_i._.js +0 -3
- package/.next/server/chunks/ssr/_0t-2u_i._.js.map +0 -1
- package/.next/server/chunks/ssr/_0vn5_62._.js +0 -5
- package/.next/server/chunks/ssr/_0vn5_62._.js.map +0 -1
- package/.next/server/chunks/ssr/_0yiz~s5._.js +0 -3
- package/.next/server/chunks/ssr/_0yiz~s5._.js.map +0 -1
- package/.next/server/chunks/ssr/_0~4ta0s._.js +0 -3
- package/.next/server/chunks/ssr/_0~4ta0s._.js.map +0 -1
- package/.next/server/chunks/ssr/_0~5r_8s._.js +0 -3
- package/.next/server/chunks/ssr/_0~5r_8s._.js.map +0 -1
- package/.next/server/chunks/ssr/_115_o9h._.js +0 -3
- package/.next/server/chunks/ssr/_115_o9h._.js.map +0 -1
- package/.next/server/chunks/ssr/_13mk_9n._.js +0 -3
- package/.next/server/chunks/ssr/_13mk_9n._.js.map +0 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_07.4ogy._.js +0 -3
- package/.next/server/chunks/ssr/packages_dashboard_src_07.4ogy._.js.map +0 -1
- package/.next/static/chunks/00p2fat~wl7uz.js +0 -1
- package/.next/static/chunks/07aksg8x5r0d9.js +0 -1
- package/.next/static/chunks/082cjr-p4ubw7.js +0 -1
- package/.next/static/chunks/09hewwcw-ts34.js +0 -1
- package/.next/static/chunks/09j~fmfefj03i.js +0 -1
- package/.next/static/chunks/0adfy5uyh_8c8.js +0 -1
- package/.next/static/chunks/0agoryx~xvt31.js +0 -1
- package/.next/static/chunks/0aoci_z-c0ele.css +0 -1
- package/.next/static/chunks/0atsym5j2dgzw.js +0 -1
- package/.next/static/chunks/0b3tta7tnnbur.js +0 -1
- package/.next/static/chunks/0d02.lqlwe9a_.js +0 -1
- package/.next/static/chunks/0eqyosc.qae5n.js +0 -1
- package/.next/static/chunks/0kkrrex6qm68-.js +0 -1
- package/.next/static/chunks/0lfxqap3b6sar.js +0 -11
- package/.next/static/chunks/0ord2b6oqi.3g.js +0 -1
- package/.next/static/chunks/0rh-ee9ky1ybq.js +0 -1
- package/.next/static/chunks/0t5v~o90gn66f.js +0 -1
- package/.next/static/chunks/0vaymprggmdwi.js +0 -3
- package/.next/static/chunks/0x2vder5-rzy3.js +0 -1
- package/.next/static/chunks/0yk64vsbmwqd8.js +0 -1
- package/.next/static/chunks/0yvzj34_7s6kb.js +0 -1
- package/.next/static/chunks/104za._t2qmr8.js +0 -1
- package/.next/static/chunks/13pe2-ed6nel..js +0 -1
- package/.next/static/chunks/13zn61okwjlyn.js +0 -1
- package/.next/static/chunks/153hm0-366-at.js +0 -1
- package/.next/static/chunks/16k3_-6f7kx97.js +0 -1
- package/.next/static/chunks/18904zqns5ncn.js +0 -1
- /package/.next/server/chunks/{[root-of-the-server]__00gp8gz._.js.map → [root-of-the-server]__01knfi.._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0-0wgko._.js.map → [root-of-the-server]__08_s4yo._.js.map} +0 -0
- /package/.next/static/{CDXVH-99b-ZdHz0Rd9pr_ → lsV2FU1YUtwJPmeiim7tk}/_buildManifest.js +0 -0
- /package/.next/static/{CDXVH-99b-ZdHz0Rd9pr_ → lsV2FU1YUtwJPmeiim7tk}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{CDXVH-99b-ZdHz0Rd9pr_ → lsV2FU1YUtwJPmeiim7tk}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/dashboard/src/lib/hooks/use-git-accounts.ts","../../../../../../packages/dashboard/src/components/connections/git-accounts-card.tsx","../../../../../../packages/dashboard/src/lib/hooks/use-git-templates.ts","../../../../../../packages/dashboard/src/components/connections/git-templates-card.tsx","../../../../../../packages/dashboard/src/lib/hooks/use-task-flows.ts","../../../../../../packages/dashboard/src/components/connections/task-flow-overrides-card.tsx","../../../../../../packages/dashboard/src/components/connections/repository-card.tsx","../../../../../../packages/dashboard/src/components/connections/add-repository-sheet.tsx","../../../../../../packages/dashboard/src/app/connections/repositories/page.tsx","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/unlink.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/file-type-2.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/file-pen.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/github.ts","../../../../../../packages/dashboard/src/components/connections/git-templates-card.logic.ts"],"sourcesContent":["\"use client\";\n\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\nimport type {\n GitAccountConfig,\n GitAccountsListEntry,\n} from \"@/lib/api-types\";\n\nconst QUERY_KEY = [\"git-accounts\"];\n\ninterface ListResponse {\n accounts: GitAccountsListEntry[];\n}\n\nexport function useGitAccounts() {\n return useQuery({\n queryKey: QUERY_KEY,\n queryFn: () => api.get<ListResponse>(\"/git-accounts\"),\n staleTime: 30_000,\n });\n}\n\nexport function useUpsertGitAccount() {\n const qc = useQueryClient();\n return useMutation({\n mutationFn: ({\n alias,\n payload,\n }: {\n alias: string;\n payload: GitAccountConfig & { token?: string };\n }) =>\n api.put<{ ok: boolean; alias: string }>(`/git-accounts/${alias}`, payload),\n onSuccess: () => {\n void qc.invalidateQueries({ queryKey: QUERY_KEY });\n // Also bust the config query so any consumer that reads\n // `config.gitAccounts` re-renders.\n void qc.invalidateQueries({ queryKey: [\"config\"] });\n },\n });\n}\n\nexport function useDeleteGitAccount() {\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (alias: string) =>\n api.delete<{ ok: boolean }>(`/git-accounts/${alias}`),\n onSuccess: () => {\n void qc.invalidateQueries({ queryKey: QUERY_KEY });\n void qc.invalidateQueries({ queryKey: [\"config\"] });\n },\n });\n}\n\nexport interface ProbeResponse {\n ok: boolean;\n login?: string;\n host?: string;\n reason?: string;\n}\n\nexport function useProbeGitAccount() {\n return useMutation({\n mutationFn: (alias: string) =>\n api.post<ProbeResponse>(`/git-accounts/${alias}/probe`, {}),\n });\n}\n","\"use client\";\n\n/**\n * Phase 5 (P5 §\"Multi-account remotes\") — manage named credentials the\n * Git/GitHub observers attach to per-repo polls. Two auth modes:\n *\n * • `gh-cli-profile` — reuse an existing `gh auth login` profile by\n * login name. The daemon resolves the token via\n * `gh auth token --user <ghProfile>` at call time, so token rotation\n * and SSO refresh continue to flow through `gh`.\n * • `pat-keychain` — paste a Personal Access Token. The daemon stores\n * it in the OS keychain at `git.account.<alias>` and never persists\n * it to disk.\n *\n * Direct mode only (see git-lifecycle-and-triggers.md Decision 4 §3) —\n * Delegated mode currently uses the default `gh` profile inside the\n * spawned backend session. That caveat is surfaced inline.\n */\n\nimport { useState } from \"react\";\nimport { KeyRound, Plus, ShieldCheck, X } from \"lucide-react\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { ConnectionCard, deriveConfiguredStatus } from \"./connection-card\";\nimport {\n useDeleteGitAccount,\n useGitAccounts,\n useProbeGitAccount,\n useUpsertGitAccount,\n} from \"@/lib/hooks/use-git-accounts\";\nimport type {\n GitAccountConfig,\n GitAccountsListEntry,\n} from \"@/lib/api-types\";\n\nconst ALIAS_PATTERN = /^[a-z0-9._-]+$/;\n\ninterface FormState {\n alias: string;\n type: GitAccountConfig[\"type\"];\n authMode: GitAccountConfig[\"authMode\"];\n ghProfile: string;\n host: string;\n token: string;\n}\n\nconst EMPTY_FORM: FormState = {\n alias: \"\",\n type: \"github\",\n authMode: \"gh-cli-profile\",\n ghProfile: \"\",\n host: \"github.com\",\n token: \"\",\n};\n\nexport function GitAccountsCard() {\n const list = useGitAccounts();\n const upsert = useUpsertGitAccount();\n const remove = useDeleteGitAccount();\n const probe = useProbeGitAccount();\n const [form, setForm] = useState<FormState>(EMPTY_FORM);\n const [error, setError] = useState<string | null>(null);\n const [probeMessages, setProbeMessages] = useState<Record<string, string>>({});\n\n const accounts = list.data?.accounts ?? [];\n\n const submit = async () => {\n setError(null);\n if (!ALIAS_PATTERN.test(form.alias)) {\n setError(\"Alias must use lowercase letters, digits, dot, dash, or underscore.\");\n return;\n }\n if (form.authMode === \"gh-cli-profile\" && !form.ghProfile.trim()) {\n setError(\"gh-cli-profile mode requires a gh login name.\");\n return;\n }\n if (form.authMode === \"pat-keychain\" && !form.token.trim()) {\n setError(\"PAT mode requires a token on first save.\");\n return;\n }\n try {\n await upsert.mutateAsync({\n alias: form.alias,\n payload: {\n type: form.type,\n authMode: form.authMode,\n host: form.host || \"github.com\",\n ...(form.authMode === \"gh-cli-profile\"\n ? { ghProfile: form.ghProfile }\n : {}),\n ...(form.token ? { token: form.token } : {}),\n },\n });\n setForm(EMPTY_FORM);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to save account.\");\n }\n };\n\n const onProbe = async (alias: string) => {\n setProbeMessages((prev) => ({ ...prev, [alias]: \"Probing…\" }));\n try {\n const result = await probe.mutateAsync(alias);\n const message = result.ok\n ? `OK — authenticated as ${result.login}`\n : `Probe failed: ${result.reason ?? \"unknown\"}`;\n setProbeMessages((prev) => ({ ...prev, [alias]: message }));\n } catch (err) {\n setProbeMessages((prev) => ({\n ...prev,\n [alias]: err instanceof Error ? err.message : \"Probe failed\",\n }));\n }\n };\n\n return (\n <ConnectionCard\n name=\"Git Accounts\"\n icon={<KeyRound className=\"h-4 w-4\" />}\n status={deriveConfiguredStatus(accounts.length > 0)}\n >\n <div className=\"mt-2 space-y-3\">\n <p className=\"text-xs text-muted-foreground\">\n Named credentials attached to watched repositories via{\" \"}\n <code className=\"rounded bg-muted px-1\">accountAlias</code>. Direct\n mode injects the resolved token per poll; Delegated mode currently\n uses the default <code>gh</code> profile.\n </p>\n\n {error && <Alert variant=\"error\">{error}</Alert>}\n\n <div className=\"space-y-2\">\n {accounts.length === 0 && (\n <p className=\"text-xs italic text-muted-foreground\">\n No accounts configured. Add one below.\n </p>\n )}\n {accounts.map((entry) => (\n <AccountRow\n key={entry.alias}\n entry={entry}\n onDelete={() => remove.mutate(entry.alias)}\n onProbe={() => onProbe(entry.alias)}\n probeMessage={probeMessages[entry.alias]}\n busy={remove.isPending || probe.isPending}\n />\n ))}\n </div>\n\n <div className=\"space-y-2 rounded border bg-background p-3\">\n <p className=\"text-xs font-medium\">Add account</p>\n <div className=\"flex flex-wrap gap-2\">\n <Input\n value={form.alias}\n onChange={(e) => setForm((f) => ({ ...f, alias: e.target.value }))}\n placeholder=\"alias (e.g. work-github)\"\n className=\"max-w-[200px]\"\n />\n <select\n value={form.authMode}\n onChange={(e) =>\n setForm((f) => ({\n ...f,\n authMode: e.target.value as FormState[\"authMode\"],\n }))\n }\n className=\"h-9 rounded border bg-background px-2 text-sm\"\n >\n <option value=\"gh-cli-profile\">gh CLI profile</option>\n <option value=\"pat-keychain\">Personal Access Token</option>\n </select>\n <Input\n value={form.host}\n onChange={(e) => setForm((f) => ({ ...f, host: e.target.value }))}\n placeholder=\"github.com\"\n className=\"max-w-[180px]\"\n />\n {form.authMode === \"gh-cli-profile\" ? (\n <Input\n value={form.ghProfile}\n onChange={(e) =>\n setForm((f) => ({ ...f, ghProfile: e.target.value }))\n }\n placeholder=\"gh login name (e.g. alice)\"\n className=\"max-w-[220px]\"\n />\n ) : (\n <Input\n type=\"password\"\n value={form.token}\n onChange={(e) => setForm((f) => ({ ...f, token: e.target.value }))}\n placeholder=\"ghp_… (PAT — never persisted to disk)\"\n className=\"max-w-[280px]\"\n />\n )}\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={submit}\n disabled={upsert.isPending || !form.alias.trim()}\n >\n <Plus className=\"mr-1 h-3.5 w-3.5\" />\n Save\n </Button>\n </div>\n </div>\n </div>\n </ConnectionCard>\n );\n}\n\nfunction AccountRow({\n entry,\n onDelete,\n onProbe,\n probeMessage,\n busy,\n}: {\n entry: GitAccountsListEntry;\n onDelete: () => void;\n onProbe: () => void;\n probeMessage?: string;\n busy: boolean;\n}) {\n return (\n <div className=\"flex flex-col gap-2 rounded border bg-background p-2 sm:flex-row sm:items-center\">\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-mono text-sm font-medium\">{entry.alias}</p>\n <div className=\"mt-1 flex flex-wrap items-center gap-1.5\">\n <Badge variant=\"gray\">{entry.host}</Badge>\n <Badge variant={entry.authMode === \"pat-keychain\" ? \"green\" : \"gray\"}>\n {entry.authMode}\n </Badge>\n {entry.ghProfile && (\n <Badge variant=\"gray\">user: {entry.ghProfile}</Badge>\n )}\n {entry.tokenStored === true && <Badge variant=\"green\">token stored</Badge>}\n {entry.tokenStored === false && (\n <Badge variant=\"red\">no token</Badge>\n )}\n </div>\n {probeMessage && (\n <p className=\"mt-1 text-xs text-muted-foreground\">{probeMessage}</p>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n <Button size=\"sm\" variant=\"ghost\" onClick={onProbe} disabled={busy}>\n <ShieldCheck className=\"mr-1 h-3.5 w-3.5\" />\n Probe\n </Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={onDelete} disabled={busy} className=\"h-8 w-8 p-0\">\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n );\n}\n\nexport default GitAccountsCard;\n","\"use client\";\n\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\n\nexport type GitTemplateKind = \"project\" | \"git-repo\";\n\nexport interface GitTemplateDetail {\n kind: GitTemplateKind;\n active: string;\n bundled: string;\n override: string | null;\n hasOverride: boolean;\n path: string;\n}\n\nconst TEMPLATE_KEY = (kind: GitTemplateKind) => [\"git-template\", kind];\nconst STATUS_KEY = [\"git-template\", \"retemplate-status\"] as const;\n\nexport function useGitTemplate(kind: GitTemplateKind) {\n return useQuery({\n queryKey: TEMPLATE_KEY(kind),\n queryFn: () =>\n api.get<GitTemplateDetail>(\n `/git/templates/${encodeURIComponent(kind)}`,\n ),\n staleTime: 5_000,\n });\n}\n\nexport function useSaveGitTemplate(kind: GitTemplateKind) {\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (content: string) =>\n api.put<{ ok: boolean; bytes: number; path: string }>(\n `/git/templates/${encodeURIComponent(kind)}`,\n { content },\n ),\n onSuccess: () => {\n void qc.invalidateQueries({ queryKey: TEMPLATE_KEY(kind) });\n },\n });\n}\n\nexport interface GitRetemplateApplyResponse {\n ok: true;\n kind: GitTemplateKind;\n scheduleId: number;\n correlationId: string;\n backupRoot: string;\n targets: Array<{\n slug: string;\n contextFile: string;\n backupRelPath: string;\n }>;\n}\n\nexport function useApplyGitTemplate(kind: GitTemplateKind) {\n const qc = useQueryClient();\n return useMutation({\n mutationFn: () =>\n api.post<GitRetemplateApplyResponse>(\n `/git/templates/${encodeURIComponent(kind)}/apply`,\n ),\n onSuccess: () => {\n void qc.invalidateQueries({ queryKey: STATUS_KEY });\n },\n });\n}\n\nexport type RetemplateFileStatus =\n | \"pending\"\n | \"started\"\n | \"completed\"\n | \"skipped\"\n | \"failed\"\n | \"rolled_back\";\n\nexport type RetemplateRunStatus = \"running\" | \"success\" | \"partial\" | \"failed\";\n\nexport interface RetemplateFileEntry {\n slug: string;\n contextPath: string;\n contextFile: string;\n backupRelPath: string;\n classification: \"project\" | \"repo-only\";\n status: RetemplateFileStatus;\n reason?: string;\n error?: string;\n beforeBytes?: number;\n afterBytes?: number;\n startedAt?: string;\n completedAt?: string;\n}\n\nexport interface RetemplateStatusRecord {\n scheduleId: number;\n correlationId: string;\n kind: GitTemplateKind;\n backupRoot: string;\n startedAt: string;\n finalizedAt?: string;\n finalStatus?: RetemplateRunStatus;\n files: Record<string, RetemplateFileEntry>;\n}\n\nexport function useRetemplateStatus() {\n return useQuery({\n queryKey: STATUS_KEY,\n queryFn: () =>\n api.get<{ status: RetemplateStatusRecord | null }>(\n \"/git/templates/retemplate/status\",\n ),\n // Live-refresh while a run is in flight; the dashboard renders the\n // status grid as it changes.\n refetchInterval: (query) => {\n const data = query.state.data as\n | { status: RetemplateStatusRecord | null }\n | undefined;\n const inFlight = data?.status && !data.status.finalizedAt;\n return inFlight ? 2_000 : false;\n },\n staleTime: 1_000,\n });\n}\n","\"use client\";\n\n/**\n * Phase 6 (git-lifecycle-and-triggers.md Decision 8) — owner-facing\n * editor for the project-doc and git-repo templates, plus the explicit\n * \"Apply current template to existing projects\" action.\n *\n * Scope:\n * • Two editors stacked: `project.md` and `git-repo.md`.\n * • A bundled column the dashboard renders read-only so the user can\n * diff against ship defaults and reset by clearing their override.\n * • An \"Apply\" button per editor that opens a warning sheet, confirms\n * the auto-backup, and POSTs to `/api/git/templates/<kind>/apply`.\n * • A live status grid that polls every 2s while a re-template run is\n * in flight (rolling back to idle once `finalizedAt` is set).\n *\n * Anything substantive lives in `git-templates-card.logic.ts` so it is\n * unit-testable without React.\n */\n\nimport { useMemo, useState } from \"react\";\nimport { FileType2, Loader2, Play, Save } from \"lucide-react\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n} from \"@/components/ui/sheet\";\nimport { ConnectionCard, deriveConfiguredStatus } from \"./connection-card\";\nimport {\n type GitRetemplateApplyResponse,\n type GitTemplateKind,\n useApplyGitTemplate,\n useGitTemplate,\n useRetemplateStatus,\n useSaveGitTemplate,\n} from \"@/lib/hooks/use-git-templates\";\nimport {\n buildApplyWarning,\n buildFileGridRows,\n gridStatusCounts,\n runHeadline,\n templateFileName,\n templateLabel,\n} from \"./git-templates-card.logic\";\n\nconst KIND_OPTIONS: GitTemplateKind[] = [\"project\", \"git-repo\"];\n\nexport function GitTemplatesCard() {\n const status = useRetemplateStatus();\n const record = status.data?.status ?? null;\n\n const headline = runHeadline(record);\n\n return (\n <ConnectionCard\n name=\"Project document templates\"\n icon={<FileType2 className=\"h-4 w-4\" />}\n status={deriveConfiguredStatus(true)}\n >\n <div className=\"mt-2 space-y-3\">\n <p className=\"text-xs text-muted-foreground\">\n Edit the templates the agent uses when it (re)writes\n {\" \"}<code className=\"rounded bg-muted px-1\">context/projects/<slug>.md</code>\n {\" \"}and{\" \"}\n <code className=\"rounded bg-muted px-1\">context/git-repos/<slug>.md</code>.\n Changes are forward-only — existing files keep their old shape until\n the next git lifecycle event touches them, or until you press\n “Apply” below to re-conform every existing file at once.\n </p>\n\n {headline && (\n <Alert\n variant={\n headline.tone === \"error\"\n ? \"error\"\n : headline.tone === \"warning\"\n ? \"warning\"\n : headline.tone === \"success\"\n ? \"success\"\n : \"info\"\n }\n >\n <div className=\"flex items-center justify-between gap-3\">\n <span>{headline.label}</span>\n {record && (\n <span className=\"text-xs font-mono text-muted-foreground\">\n {record.kind} · run #{record.scheduleId}\n </span>\n )}\n </div>\n </Alert>\n )}\n\n {KIND_OPTIONS.map((kind) => (\n <TemplateEditor key={kind} kind={kind} />\n ))}\n\n <RetemplateStatusGrid />\n </div>\n </ConnectionCard>\n );\n}\n\nfunction TemplateEditor({ kind }: { kind: GitTemplateKind }) {\n const detail = useGitTemplate(kind);\n const save = useSaveGitTemplate(kind);\n const apply = useApplyGitTemplate(kind);\n const [draft, setDraft] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [confirmOpen, setConfirmOpen] = useState(false);\n const [applyResult, setApplyResult] =\n useState<GitRetemplateApplyResponse | null>(null);\n\n const active = detail.data?.active ?? \"\";\n const bundled = detail.data?.bundled ?? \"\";\n const hasOverride = detail.data?.hasOverride ?? false;\n const draftActive = draft ?? active;\n const draftDirty = draft !== null && draft !== active;\n\n const onSave = async () => {\n if (draft === null) return;\n setError(null);\n try {\n await save.mutateAsync(draft);\n setDraft(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to save template\");\n }\n };\n\n const onResetToBundled = () => {\n setDraft(bundled);\n };\n\n const warning = buildApplyWarning(kind, 0); // count fills in once apply runs\n const onConfirmApply = async () => {\n setError(null);\n try {\n const result = await apply.mutateAsync();\n setApplyResult(result);\n setConfirmOpen(false);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to apply template\");\n }\n };\n\n return (\n <div className=\"rounded border bg-card p-3 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium\">{templateLabel(kind)}</span>\n {hasOverride && <Badge variant=\"green\">overridden</Badge>}\n </div>\n <span className=\"text-xs text-muted-foreground\">\n {templateFileName(kind)}\n </span>\n </div>\n\n {error && <Alert variant=\"error\">{error}</Alert>}\n\n <div className=\"grid gap-2 lg:grid-cols-2\">\n <div>\n <p className=\"mb-1 text-xs font-medium text-muted-foreground\">\n Bundled (read-only)\n </p>\n <textarea\n value={bundled}\n readOnly\n className=\"h-64 w-full resize-none rounded border bg-muted p-2 font-mono text-xs\"\n />\n </div>\n <div>\n <p className=\"mb-1 text-xs font-medium text-muted-foreground\">\n Active (edit and save)\n </p>\n <textarea\n value={draftActive}\n onChange={(e) => setDraft(e.target.value)}\n className=\"h-64 w-full resize-none rounded border bg-background p-2 font-mono text-xs\"\n spellCheck={false}\n disabled={detail.isLoading}\n />\n </div>\n </div>\n\n <div className=\"flex flex-wrap gap-2\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={onSave}\n disabled={!draftDirty || save.isPending}\n >\n <Save className=\"mr-1 h-3.5 w-3.5\" />\n Save template\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={onResetToBundled}\n disabled={detail.isLoading}\n >\n Reset to bundled\n </Button>\n <Button\n size=\"sm\"\n variant=\"default\"\n onClick={() => setConfirmOpen(true)}\n disabled={apply.isPending}\n >\n {apply.isPending ? (\n <Loader2 className=\"mr-1 h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Play className=\"mr-1 h-3.5 w-3.5\" />\n )}\n Apply current template to existing {kind === \"project\" ? \"projects\" : \"git-repos\"}\n </Button>\n </div>\n\n {applyResult && (\n <Alert variant=\"info\">\n <div className=\"space-y-1 text-xs\">\n <div>\n Re-template enqueued — schedule #{applyResult.scheduleId},\n {\" \"}{applyResult.targets.length} file(s) backed up.\n </div>\n <div className=\"font-mono text-muted-foreground break-all\">\n backup: {applyResult.backupRoot}\n </div>\n </div>\n </Alert>\n )}\n\n <Sheet open={confirmOpen} onOpenChange={setConfirmOpen}>\n <SheetContent side=\"right\" className=\"w-[480px] sm:w-[540px]\">\n <SheetHeader>\n <SheetTitle>{warning.title}</SheetTitle>\n </SheetHeader>\n <div className=\"mt-4 space-y-3 text-sm\">\n <ul className=\"list-disc space-y-1 pl-5\">\n {warning.bullets.map((b) => (\n <li key={b}>{b}</li>\n ))}\n </ul>\n <div className=\"flex gap-2 pt-2\">\n <Button\n size=\"sm\"\n onClick={onConfirmApply}\n disabled={apply.isPending}\n >\n {apply.isPending && (\n <Loader2 className=\"mr-1 h-3.5 w-3.5 animate-spin\" />\n )}\n {warning.acknowledge}\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setConfirmOpen(false)}\n >\n Cancel\n </Button>\n </div>\n </div>\n </SheetContent>\n </Sheet>\n </div>\n );\n}\n\nfunction RetemplateStatusGrid() {\n const status = useRetemplateStatus();\n const record = status.data?.status ?? null;\n const rows = useMemo(() => buildFileGridRows(record), [record]);\n const counts = useMemo(() => gridStatusCounts(rows), [rows]);\n\n if (!record) {\n return (\n <p className=\"text-xs text-muted-foreground\">\n No re-template runs recorded yet.\n </p>\n );\n }\n\n return (\n <div className=\"rounded border bg-card p-3 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium\">Last re-template run</span>\n <div className=\"flex flex-wrap gap-1 text-xs\">\n {Object.entries(counts).map(([status, count]) =>\n count > 0 ? (\n <Badge key={status} variant={badgeVariantForStatus(status)}>\n {status}: {count}\n </Badge>\n ) : null,\n )}\n </div>\n </div>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-xs\">\n <thead>\n <tr className=\"border-b text-left text-muted-foreground\">\n <th className=\"px-2 py-1\">Slug</th>\n <th className=\"px-2 py-1\">Status</th>\n <th className=\"px-2 py-1\">File</th>\n <th className=\"px-2 py-1\">Bytes Δ</th>\n <th className=\"px-2 py-1\">Note</th>\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => (\n <tr key={row.slug} className=\"border-b last:border-0\">\n <td className=\"px-2 py-1 font-mono\">{row.slug}</td>\n <td className=\"px-2 py-1\">\n <Badge variant={badgeVariantForStatus(row.status)}>\n {row.status}\n </Badge>\n </td>\n <td className=\"px-2 py-1 font-mono text-muted-foreground\">\n {row.contextFile}\n </td>\n <td className=\"px-2 py-1\">\n {row.bytesDelta === null\n ? \"—\"\n : row.bytesDelta >= 0\n ? `+${row.bytesDelta}`\n : `${row.bytesDelta}`}\n </td>\n <td className=\"px-2 py-1 text-muted-foreground\">\n {row.error ?? row.reason ?? \"\"}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n\nfunction badgeVariantForStatus(\n status: string,\n):\n | \"default\"\n | \"gray\"\n | \"green\"\n | \"amber\"\n | \"red\"\n | \"blue\" {\n switch (status) {\n case \"completed\":\n return \"green\";\n case \"skipped\":\n return \"gray\";\n case \"started\":\n case \"pending\":\n return \"blue\";\n case \"failed\":\n return \"red\";\n case \"rolled_back\":\n return \"amber\";\n default:\n return \"default\";\n }\n}\n\nexport default GitTemplatesCard;\n","\"use client\";\n\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\nimport type { TaskFlowListEntry } from \"@/lib/api-types\";\n\nconst LIST_KEY = [\"task-flows\"];\n\ninterface ListResponse {\n userDir: string | null;\n flows: TaskFlowListEntry[];\n}\n\nexport function useTaskFlows() {\n return useQuery({\n queryKey: LIST_KEY,\n queryFn: () => api.get<ListResponse>(\"/task-flows\"),\n staleTime: 30_000,\n });\n}\n\ninterface DetailResponse {\n key: string;\n bundled: string | null;\n override: string | null;\n hasOverride: boolean;\n}\n\nexport function useTaskFlowDetail(key: string | null) {\n return useQuery({\n queryKey: [\"task-flow\", key],\n queryFn: () =>\n key === null\n ? Promise.reject(new Error(\"no_key\"))\n : api.get<DetailResponse>(`/task-flows/${encodeURIComponent(key)}`),\n enabled: key !== null,\n staleTime: 5_000,\n });\n}\n\nexport function useUpsertTaskFlow() {\n const qc = useQueryClient();\n return useMutation({\n mutationFn: ({ key, content }: { key: string; content: string }) =>\n api.put<{ ok: boolean }>(`/task-flows/${encodeURIComponent(key)}`, {\n content,\n }),\n onSuccess: (_data, { key }) => {\n void qc.invalidateQueries({ queryKey: LIST_KEY });\n void qc.invalidateQueries({ queryKey: [\"task-flow\", key] });\n },\n });\n}\n\nexport function useDeleteTaskFlowOverride() {\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (key: string) =>\n api.delete<{ ok: boolean; removed: boolean }>(\n `/task-flows/${encodeURIComponent(key)}`,\n ),\n onSuccess: (_data, key) => {\n void qc.invalidateQueries({ queryKey: LIST_KEY });\n void qc.invalidateQueries({ queryKey: [\"task-flow\", key] });\n },\n });\n}\n","\"use client\";\n\n/**\n * Phase 5 (P5 §\"User-defined triggers\") — owner-facing editor for the\n * per-event task-flow override file at\n * `<dataDir>/task-flows/<key>.md`. The bundled body ships read-only on\n * the side; the owner edits the override on the right and saves to\n * `PUT /api/task-flows/<key>`. Resetting calls `DELETE` and lets the\n * dispatcher fall back to the bundled body.\n *\n * Scope: filtered to `git.*` and `github.*` keys here so the card\n * matches its host page (`/connections/repositories`). Other connections\n * pages can compose the same component with a different filter\n * predicate as they ship.\n */\n\nimport { useMemo, useState } from \"react\";\nimport { FilePen, RotateCcw, Save } from \"lucide-react\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { ConnectionCard, deriveConfiguredStatus } from \"./connection-card\";\nimport {\n useDeleteTaskFlowOverride,\n useTaskFlowDetail,\n useTaskFlows,\n useUpsertTaskFlow,\n} from \"@/lib/hooks/use-task-flows\";\n\nconst KEY_PREFIX_FILTERS = [\"git.\", \"github.\"];\n\nexport function TaskFlowOverridesCard() {\n const list = useTaskFlows();\n const flows = useMemo(() => {\n const all = list.data?.flows ?? [];\n return all.filter((f) =>\n KEY_PREFIX_FILTERS.some((prefix) => f.key.startsWith(prefix)),\n );\n }, [list.data]);\n\n // `null` until the user (or the implicit \"first key\" default below)\n // picks a row. Derivation in render avoids cascading setState-in-effect.\n const [explicitKey, setExplicitKey] = useState<string | null>(null);\n const selectedKey =\n explicitKey ?? (flows.length > 0 ? flows[0].key : null);\n\n const detail = useTaskFlowDetail(selectedKey);\n const upsert = useUpsertTaskFlow();\n const removeOverride = useDeleteTaskFlowOverride();\n\n // Draft state keyed on the active row. When the user switches keys we\n // remount the editor via the `key` prop instead of poking state from\n // an effect, so React's setState-in-effect lint stays clean.\n const [draftByKey, setDraftByKey] = useState<Record<string, string>>({});\n const [error, setError] = useState<string | null>(null);\n\n const draft = selectedKey\n ? (draftByKey[selectedKey]\n ?? detail.data?.override\n ?? detail.data?.bundled\n ?? \"\")\n : \"\";\n const setDraft = (next: string) => {\n if (!selectedKey) return;\n setDraftByKey((prev) => ({ ...prev, [selectedKey]: next }));\n };\n const draftDirty = selectedKey\n ? draftByKey[selectedKey] !== undefined\n && draftByKey[selectedKey] !== (detail.data?.override ?? \"\")\n : false;\n\n const overrideCount = flows.filter((f) => f.hasOverride).length;\n\n const onSave = async () => {\n if (!selectedKey) return;\n setError(null);\n try {\n await upsert.mutateAsync({ key: selectedKey, content: draft });\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to save override\");\n }\n };\n\n const onResetToBundled = async () => {\n if (!selectedKey) return;\n setError(null);\n try {\n await removeOverride.mutateAsync(selectedKey);\n // Drop the local-only draft so the textarea re-derives from the\n // newly-bundled state on the next render.\n setDraftByKey((prev) => {\n const next = { ...prev };\n delete next[selectedKey];\n return next;\n });\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to reset\");\n }\n };\n\n return (\n <ConnectionCard\n name=\"Task Flow Overrides\"\n icon={<FilePen className=\"h-4 w-4\" />}\n status={deriveConfiguredStatus(overrideCount > 0)}\n >\n <div className=\"mt-2 space-y-3\">\n <p className=\"text-xs text-muted-foreground\">\n Override the prompt body the dispatcher uses for a Git/GitHub\n event. The bundled body stays read-only on the left; your\n edits land at <code className=\"rounded bg-muted px-1\">~/.personal-agent/task-flows/<key>.md</code>\n {\" \"}and take effect on the next session. Resetting falls back to bundled.\n </p>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <select\n value={selectedKey ?? \"\"}\n onChange={(e) => setExplicitKey(e.target.value || null)}\n className=\"h-9 min-w-[260px] rounded border bg-background px-2 text-sm\"\n disabled={flows.length === 0}\n >\n {flows.length === 0 && <option value=\"\">No git.* / github.* keys</option>}\n {flows.map((f) => (\n <option key={f.key} value={f.key}>\n {f.key}\n {f.hasOverride ? \" ★\" : \"\"}\n </option>\n ))}\n </select>\n {detail.data?.hasOverride && <Badge variant=\"green\">overridden</Badge>}\n </div>\n\n {error && <Alert variant=\"error\">{error}</Alert>}\n\n <div className=\"grid gap-3 lg:grid-cols-2\">\n <div>\n <p className=\"mb-1 text-xs font-medium text-muted-foreground\">\n Bundled (read-only)\n </p>\n <textarea\n value={detail.data?.bundled ?? \"\"}\n readOnly\n className=\"h-72 w-full resize-none rounded border bg-muted p-2 font-mono text-xs\"\n />\n </div>\n <div>\n <p className=\"mb-1 text-xs font-medium text-muted-foreground\">\n Override (edit and save)\n </p>\n <textarea\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n className=\"h-72 w-full resize-none rounded border bg-background p-2 font-mono text-xs\"\n spellCheck={false}\n />\n </div>\n </div>\n\n <div className=\"flex gap-2\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={onSave}\n disabled={!selectedKey || upsert.isPending || !draftDirty}\n >\n <Save className=\"mr-1 h-3.5 w-3.5\" />\n Save override\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={onResetToBundled}\n disabled={\n !selectedKey\n || removeOverride.isPending\n || !detail.data?.hasOverride\n }\n >\n <RotateCcw className=\"mr-1 h-3.5 w-3.5\" />\n Reset to bundled\n </Button>\n </div>\n </div>\n </ConnectionCard>\n );\n}\n\nexport default TaskFlowOverridesCard;\n","\"use client\";\n\nimport { useState } from \"react\";\nimport Link from \"next/link\";\nimport {\n ArrowUpRight,\n FolderOpen,\n GitBranch,\n Github,\n Lock,\n Pencil,\n Plus,\n Trash2,\n Unlink,\n} from \"lucide-react\";\nimport { Card } from \"@/components/ui/card\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Sheet, SheetContent, SheetHeader, SheetTitle } from \"@/components/ui/sheet\";\nimport { useConfirm } from \"@/components/shared/confirm-dialog\";\nimport { DirectoryPickerField } from \"@/components/directory-picker-field\";\nimport {\n type RepositoryCategory,\n type RepositoryClassification,\n type RepositoryDTO,\n type RepositoryUpdateInput,\n repositoryDisplayName,\n repositoryHasGithub,\n repositoryHasLocal,\n useDeleteRepository,\n useLinkGithub,\n useLinkLocal,\n useUpdateRepository,\n} from \"@/lib/hooks/use-repositories\";\nimport { useGitAccounts } from \"@/lib/hooks/use-git-accounts\";\n\nconst FIELD_LABEL = \"text-[11px] font-medium uppercase tracking-wider text-muted-foreground\";\n\nconst CLASSIFICATIONS: RepositoryClassification[] = [\"project\", \"repo-only\"];\nconst CATEGORIES: RepositoryCategory[] = [\n \"work\",\n \"personal\",\n \"research\",\n \"client\",\n \"other\",\n];\n\nexport function RepositoryCard({ repo }: { repo: RepositoryDTO }) {\n const [editing, setEditing] = useState(false);\n const [linkingGithub, setLinkingGithub] = useState(false);\n const [linkingLocal, setLinkingLocal] = useState(false);\n const deleteMutation = useDeleteRepository();\n const updateMutation = useUpdateRepository();\n const confirm = useConfirm();\n\n const hasGithub = repositoryHasGithub(repo);\n const hasLocal = repositoryHasLocal(repo);\n const localOnly = repo.localOnly;\n\n const handleDelete = async () => {\n const ok = await confirm({\n title: `Delete ${repositoryDisplayName(repo)}?`,\n description:\n \"This removes the repository registration along with its triggers and management state. The local clone on disk is not touched.\",\n confirmLabel: \"Delete\",\n variant: \"destructive\",\n });\n if (!ok) return;\n await deleteMutation.mutateAsync(repo.id);\n };\n\n const toggleLocalOnly = async (next: boolean) => {\n if (next && hasGithub) {\n const ok = await confirm({\n title: \"Mark as local-only?\",\n description:\n \"This will clear the GitHub link. To keep both sides, leave 'local-only' off.\",\n confirmLabel: \"Mark local-only\",\n });\n if (!ok) return;\n await updateMutation.mutateAsync({\n id: repo.id,\n body: {\n localOnly: true,\n githubOwner: null,\n githubRepo: null,\n githubAccount: null,\n },\n });\n } else {\n await updateMutation.mutateAsync({\n id: repo.id,\n body: { localOnly: next },\n });\n }\n };\n\n const unlinkLocal = async () => {\n if (!hasGithub) {\n // Cannot leave the row with neither side; surface this as a confirm dialog\n // and refuse via the API (which returns the same error).\n await confirm({\n title: \"Cannot unlink the local clone\",\n description:\n \"This row has no GitHub side, so unlinking would leave it empty. Delete the repository instead.\",\n confirmLabel: \"OK\",\n });\n return;\n }\n const ok = await confirm({\n title: \"Unlink local clone?\",\n description: `The clone at ${repo.localPath} stays on disk; only the registration is detached.`,\n confirmLabel: \"Unlink\",\n });\n if (!ok) return;\n await updateMutation.mutateAsync({ id: repo.id, body: { localPath: null } });\n };\n\n const unlinkGithub = async () => {\n const ok = await confirm({\n title: \"Unlink GitHub remote?\",\n description: hasLocal\n ? \"The local clone stays registered.\"\n : \"This row has no local clone, so unlinking would leave it empty. Use 'Mark local-only' instead.\",\n confirmLabel: \"Unlink\",\n });\n if (!ok) return;\n if (!hasLocal) return;\n await updateMutation.mutateAsync({\n id: repo.id,\n body: { githubOwner: null, githubRepo: null, githubAccount: null },\n });\n };\n\n return (\n <Card>\n {/* Header */}\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <GitBranch className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"truncate text-sm font-medium text-foreground\">\n {repositoryDisplayName(repo)}\n </span>\n {localOnly && (\n <Badge variant=\"gray\" className=\"text-[10px]\">\n <Lock className=\"mr-1 h-3 w-3\" />\n local-only\n </Badge>\n )}\n <Badge variant={repo.classification === \"project\" ? \"green\" : \"gray\"}>\n {repo.classification}\n </Badge>\n <Badge variant=\"gray\">{repo.category}</Badge>\n </div>\n <p className=\"mt-1 truncate text-[11px] text-muted-foreground\">{repo.id}</p>\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setEditing(true)} title=\"Edit\">\n <Pencil className=\"h-3.5 w-3.5\" />\n </Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={handleDelete} title=\"Delete\">\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n\n {/* Body — two-column GitHub / Local layout */}\n <div className=\"mt-3 grid gap-3 md:grid-cols-2\">\n {/* GitHub side */}\n <div className=\"rounded-md border bg-background/40 p-3\">\n <div className=\"flex items-center gap-1.5 text-xs font-medium text-muted-foreground\">\n <Github className=\"h-3.5 w-3.5\" />\n GitHub\n </div>\n {hasGithub ? (\n <div className=\"mt-1 space-y-1 text-sm\">\n <p className=\"font-medium\">\n {repo.githubOwner}/{repo.githubRepo}\n </p>\n <p className=\"text-[11px] text-muted-foreground\">\n account: {repo.githubAccount ?? \"default\"}\n </p>\n {hasLocal && !localOnly && (\n <Button size=\"sm\" variant=\"ghost\" className=\"mt-1 h-7 px-1.5\" onClick={unlinkGithub}>\n <Unlink className=\"mr-1 h-3 w-3\" />\n Unlink\n </Button>\n )}\n </div>\n ) : localOnly ? (\n <p className=\"mt-2 text-xs text-muted-foreground\">\n Local-only — toggle off to enable GitHub linking.\n </p>\n ) : (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"mt-2 h-8\"\n onClick={() => setLinkingGithub(true)}\n >\n <Plus className=\"mr-1 h-3 w-3\" />\n Link GitHub remote\n </Button>\n )}\n </div>\n\n {/* Local clone side */}\n <div className=\"rounded-md border bg-background/40 p-3\">\n <div className=\"flex items-center gap-1.5 text-xs font-medium text-muted-foreground\">\n <FolderOpen className=\"h-3.5 w-3.5\" />\n Local clone\n </div>\n {hasLocal ? (\n <div className=\"mt-1 space-y-1 text-sm\">\n <p className=\"truncate font-medium\" title={repo.localPath ?? \"\"}>\n {repo.localPath}\n </p>\n <p className=\"text-[11px] text-muted-foreground\">\n slug: <span className=\"font-mono\">{repo.slug}</span>\n </p>\n {hasGithub && (\n <Button size=\"sm\" variant=\"ghost\" className=\"mt-1 h-7 px-1.5\" onClick={unlinkLocal}>\n <Unlink className=\"mr-1 h-3 w-3\" />\n Unlink\n </Button>\n )}\n </div>\n ) : (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"mt-2 h-8\"\n onClick={() => setLinkingLocal(true)}\n >\n <Plus className=\"mr-1 h-3 w-3\" />\n Link local clone\n </Button>\n )}\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"mt-3 flex items-center justify-between text-[11px] text-muted-foreground\">\n <label className=\"flex items-center gap-1.5\">\n <input\n type=\"checkbox\"\n checked={localOnly}\n disabled={updateMutation.isPending}\n onChange={(e) => void toggleLocalOnly(e.target.checked)}\n />\n Local-only repository\n </label>\n <Link\n href=\"/git\"\n className=\"flex items-center gap-1 text-foreground underline-offset-2 hover:underline\"\n >\n Configure polling & triggers in my life › git\n <ArrowUpRight className=\"h-3 w-3\" />\n </Link>\n </div>\n\n {editing && (\n <RepositoryEditSheet\n repo={repo}\n onClose={() => setEditing(false)}\n />\n )}\n {linkingGithub && (\n <LinkGithubSheet repo={repo} onClose={() => setLinkingGithub(false)} />\n )}\n {linkingLocal && (\n <LinkLocalSheet repo={repo} onClose={() => setLinkingLocal(false)} />\n )}\n </Card>\n );\n}\n\n// ── Edit metadata sheet ──\n\nfunction RepositoryEditSheet({\n repo,\n onClose,\n}: {\n repo: RepositoryDTO;\n onClose: () => void;\n}) {\n const update = useUpdateRepository();\n const [displayName, setDisplayName] = useState(repo.displayName ?? \"\");\n const [classification, setClassification] = useState<RepositoryClassification>(\n repo.classification,\n );\n const [category, setCategory] = useState<RepositoryCategory>(repo.category);\n const [error, setError] = useState<string | null>(null);\n\n const submit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError(null);\n try {\n const body: RepositoryUpdateInput = {\n displayName: displayName.trim() ? displayName.trim() : null,\n classification,\n category,\n };\n await update.mutateAsync({ id: repo.id, body });\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to save changes\");\n }\n };\n\n return (\n <Sheet open onOpenChange={(open) => !open && onClose()}>\n <SheetContent className=\"overflow-y-auto\">\n <SheetHeader>\n <SheetTitle>Edit repository metadata</SheetTitle>\n </SheetHeader>\n <form onSubmit={submit} className=\"mt-6 space-y-4\">\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Display name</label>\n <Input\n value={displayName}\n onChange={(e) => setDisplayName(e.target.value)}\n placeholder={repositoryDisplayName(repo)}\n />\n <p className=\"text-[11px] text-muted-foreground\">\n Optional — drives the slug used for context paths and dashboard deep-links.\n </p>\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Classification</label>\n <select\n value={classification}\n onChange={(e) =>\n setClassification(e.target.value as RepositoryClassification)\n }\n className=\"h-9 w-full rounded-md border bg-background px-2 text-sm\"\n >\n {CLASSIFICATIONS.map((c) => (\n <option key={c} value={c}>\n {c}\n </option>\n ))}\n </select>\n <p className=\"text-[11px] text-muted-foreground\">\n Project entries carry lifecycle phases in the overview MD; repo-only\n stays lightweight.\n </p>\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Category</label>\n <select\n value={category}\n onChange={(e) => setCategory(e.target.value as RepositoryCategory)}\n className=\"h-9 w-full rounded-md border bg-background px-2 text-sm\"\n >\n {CATEGORIES.map((c) => (\n <option key={c} value={c}>\n {c}\n </option>\n ))}\n </select>\n </div>\n {error && (\n <p className=\"rounded-md border border-red-200 bg-red-50/50 p-2 text-xs text-red-700 dark:border-red-900 dark:bg-red-950/30 dark:text-red-300\">\n {error}\n </p>\n )}\n <div className=\"flex items-center justify-end gap-2 border-t pt-4\">\n <Button type=\"button\" variant=\"ghost\" onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={update.isPending}>\n {update.isPending ? \"Saving…\" : \"Save\"}\n </Button>\n </div>\n </form>\n </SheetContent>\n </Sheet>\n );\n}\n\n// ── Link GitHub remote sheet ──\n\nfunction LinkGithubSheet({\n repo,\n onClose,\n}: {\n repo: RepositoryDTO;\n onClose: () => void;\n}) {\n const link = useLinkGithub();\n const { data: accounts } = useGitAccounts();\n const [owner, setOwner] = useState(\"\");\n const [name, setName] = useState(\"\");\n const [account, setAccount] = useState<string>(\"\");\n const [error, setError] = useState<string | null>(null);\n\n const submit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError(null);\n if (!owner.trim() || !name.trim()) {\n setError(\"owner and repo are required\");\n return;\n }\n try {\n await link.mutateAsync({\n id: repo.id,\n owner: owner.trim(),\n repo: name.trim(),\n account: account.trim() || undefined,\n });\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to link\");\n }\n };\n\n return (\n <Sheet open onOpenChange={(open) => !open && onClose()}>\n <SheetContent className=\"overflow-y-auto\">\n <SheetHeader>\n <SheetTitle>Link a GitHub remote</SheetTitle>\n </SheetHeader>\n <form onSubmit={submit} className=\"mt-6 space-y-4\">\n <p className=\"text-xs text-muted-foreground\">\n Personal accounts on github.com only. GHES is not in scope for v1.\n </p>\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Owner</label>\n <Input\n value={owner}\n onChange={(e) => setOwner(e.target.value)}\n placeholder=\"acme\"\n autoFocus\n />\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Repository</label>\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"widgets\"\n />\n </div>\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Account alias</label>\n <select\n value={account}\n onChange={(e) => setAccount(e.target.value)}\n className=\"h-9 w-full rounded-md border bg-background px-2 text-sm\"\n >\n <option value=\"\">default</option>\n {(accounts?.accounts ?? []).map((a) => (\n <option key={a.alias} value={a.alias}>\n {a.alias}\n </option>\n ))}\n </select>\n </div>\n {error && (\n <p className=\"rounded-md border border-red-200 bg-red-50/50 p-2 text-xs text-red-700 dark:border-red-900 dark:bg-red-950/30 dark:text-red-300\">\n {error}\n </p>\n )}\n <div className=\"flex items-center justify-end gap-2 border-t pt-4\">\n <Button type=\"button\" variant=\"ghost\" onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={link.isPending}>\n {link.isPending ? \"Linking…\" : \"Link\"}\n </Button>\n </div>\n </form>\n </SheetContent>\n </Sheet>\n );\n}\n\n// ── Link local clone sheet ──\n\nfunction LinkLocalSheet({\n repo,\n onClose,\n}: {\n repo: RepositoryDTO;\n onClose: () => void;\n}) {\n const link = useLinkLocal();\n const [path, setPath] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n\n const submit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError(null);\n if (!path.trim()) {\n setError(\"Local path is required\");\n return;\n }\n try {\n await link.mutateAsync({ id: repo.id, localPath: path.trim() });\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to link\");\n }\n };\n\n return (\n <Sheet open onOpenChange={(open) => !open && onClose()}>\n <SheetContent className=\"overflow-y-auto\">\n <SheetHeader>\n <SheetTitle>Link a local clone</SheetTitle>\n </SheetHeader>\n <form onSubmit={submit} className=\"mt-6 space-y-4\">\n <p className=\"text-xs text-muted-foreground\">\n Pick the directory of the local clone of this repository. The agent\n never inspects `.git/config` to suggest values — paths are\n user-supplied.\n </p>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Repository directory</label>\n <DirectoryPickerField\n value={path}\n onChange={setPath}\n title=\"Choose local clone directory\"\n />\n </div>\n {error && (\n <p className=\"rounded-md border border-red-200 bg-red-50/50 p-2 text-xs text-red-700 dark:border-red-900 dark:bg-red-950/30 dark:text-red-300\">\n {error}\n </p>\n )}\n <div className=\"flex items-center justify-end gap-2 border-t pt-4\">\n <Button type=\"button\" variant=\"ghost\" onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={link.isPending}>\n {link.isPending ? \"Linking…\" : \"Link\"}\n </Button>\n </div>\n </form>\n </SheetContent>\n </Sheet>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Sheet, SheetContent, SheetHeader, SheetTitle } from \"@/components/ui/sheet\";\nimport { DirectoryPickerField } from \"@/components/directory-picker-field\";\nimport { useGitAccounts } from \"@/lib/hooks/use-git-accounts\";\nimport {\n type RepositoryCategory,\n type RepositoryClassification,\n type RepositoryCreateInput,\n useCreateRepository,\n} from \"@/lib/hooks/use-repositories\";\n\nconst FIELD_LABEL =\n \"text-[11px] font-medium uppercase tracking-wider text-muted-foreground\";\nconst FIELD_HINT = \"text-[11px] leading-relaxed text-muted-foreground\";\nconst SECTION_TITLE =\n \"text-[11px] font-medium uppercase tracking-wider text-muted-foreground\";\n\ntype Mode = \"github\" | \"local\" | \"both\";\n\nconst MODE_OPTIONS: Array<{\n value: Mode;\n label: string;\n description: string;\n}> = [\n {\n value: \"both\",\n label: \"GitHub + local clone\",\n description:\n \"Recommended. Agent watches GitHub activity AND reads files from your local clone.\",\n },\n {\n value: \"github\",\n label: \"GitHub only\",\n description:\n \"Agent watches PRs, issues, and commits on GitHub. No access to source files.\",\n },\n {\n value: \"local\",\n label: \"Local folder only\",\n description:\n \"Agent watches a folder on this Mac. No GitHub remote — e.g. a private working directory.\",\n },\n];\n\nconst CLASSIFICATION_OPTIONS: Array<{\n value: RepositoryClassification;\n label: string;\n description: string;\n}> = [\n {\n value: \"repo-only\",\n label: \"Just track activity\",\n description:\n \"Lightweight. Agent logs commits, PRs, and issues. No long-form project document.\",\n },\n {\n value: \"project\",\n label: \"Treat as a project\",\n description:\n \"Agent maintains a rich project document with goals, decisions, and milestones in your context notes.\",\n },\n];\n\nconst CATEGORIES: RepositoryCategory[] = [\n \"work\",\n \"personal\",\n \"research\",\n \"client\",\n \"other\",\n];\n\nexport function AddRepositorySheet({ onClose }: { onClose: () => void }) {\n const create = useCreateRepository();\n const { data: accounts } = useGitAccounts();\n const [mode, setMode] = useState<Mode>(\"both\");\n const [owner, setOwner] = useState(\"\");\n const [name, setName] = useState(\"\");\n const [account, setAccount] = useState(\"\");\n const [path, setPath] = useState(\"\");\n const [localOnly, setLocalOnly] = useState(false);\n const [displayName, setDisplayName] = useState(\"\");\n const [classification, setClassification] =\n useState<RepositoryClassification>(\"repo-only\");\n const [category, setCategory] = useState<RepositoryCategory>(\"other\");\n const [error, setError] = useState<string | null>(null);\n\n const showGithubFields = mode === \"github\" || (mode === \"both\" && !localOnly);\n const showLocalFields = mode === \"local\" || mode === \"both\";\n const showLocalOnlyToggle = mode === \"local\";\n\n const submit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError(null);\n\n const body: RepositoryCreateInput = {\n classification,\n category,\n displayName: displayName.trim() ? displayName.trim() : undefined,\n };\n\n if (showGithubFields) {\n if (!owner.trim() || !name.trim()) {\n setError(\"GitHub owner and repository are required.\");\n return;\n }\n body.githubOwner = owner.trim();\n body.githubRepo = name.trim();\n if (account.trim()) body.githubAccount = account.trim();\n }\n if (showLocalFields) {\n if (!path.trim()) {\n setError(\"Local clone path is required.\");\n return;\n }\n body.localPath = path.trim();\n }\n if (mode === \"local\" && localOnly) {\n body.localOnly = true;\n }\n\n try {\n await create.mutateAsync(body);\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to add repository\");\n }\n };\n\n const accountList = accounts?.accounts ?? [];\n\n return (\n <Sheet open onOpenChange={(open) => !open && onClose()}>\n <SheetContent className=\"overflow-y-auto\">\n <SheetHeader>\n <SheetTitle>Add repository</SheetTitle>\n <p className=\"text-xs text-muted-foreground\">\n Tell the agent about a code repository to watch. It will track\n activity (commits, PRs, issues) and optionally maintain a project\n document in your context notes.\n </p>\n </SheetHeader>\n <form onSubmit={submit} className=\"mt-6 space-y-6\">\n <div className=\"space-y-2\">\n <label className={FIELD_LABEL}>Where does this repository live?</label>\n <div className=\"grid gap-2\">\n {MODE_OPTIONS.map((option) => {\n const selected = mode === option.value;\n return (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => setMode(option.value)}\n className={\n \"rounded-md border px-3 py-2 text-left transition-colors \" +\n (selected\n ? \"border-primary bg-primary/10\"\n : \"border-border hover:bg-accent\")\n }\n >\n <div\n className={\n \"text-sm font-medium \" +\n (selected ? \"text-primary\" : \"text-foreground\")\n }\n >\n {option.label}\n </div>\n <div className={FIELD_HINT + \" mt-0.5\"}>\n {option.description}\n </div>\n </button>\n );\n })}\n </div>\n </div>\n\n {showGithubFields && (\n <div className=\"space-y-3 rounded-md border bg-background/40 p-3\">\n <div className=\"space-y-1\">\n <p className={SECTION_TITLE}>GitHub remote</p>\n <p className={FIELD_HINT}>\n From the GitHub URL{\" \"}\n <code className=\"rounded bg-muted px-1 py-px text-[10px]\">\n github.com/acme/widgets\n </code>\n , the owner is <strong>acme</strong> and the repository is{\" \"}\n <strong>widgets</strong>.\n </p>\n </div>\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Owner (user or org)</label>\n <Input\n value={owner}\n onChange={(e) => setOwner(e.target.value)}\n placeholder=\"acme\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Repository name</label>\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"widgets\"\n />\n </div>\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>GitHub account to use</label>\n <select\n value={account}\n onChange={(e) => setAccount(e.target.value)}\n className=\"h-9 w-full rounded-md border bg-background px-2 text-sm\"\n >\n <option value=\"\">default</option>\n {accountList.map((a) => (\n <option key={a.alias} value={a.alias}>\n {a.alias}\n </option>\n ))}\n </select>\n <p className={FIELD_HINT}>\n Which set of GitHub credentials the agent should use to read\n this repo.{\" \"}\n {accountList.length === 0\n ? \"Only the default account is set up — manage more under Connections → GitHub accounts.\"\n : \"Manage accounts under Connections → GitHub accounts.\"}\n </p>\n </div>\n </div>\n )}\n\n {showLocalFields && (\n <div className=\"space-y-3 rounded-md border bg-background/40 p-3\">\n <div className=\"space-y-1\">\n <p className={SECTION_TITLE}>Local clone</p>\n <p className={FIELD_HINT}>\n Folder on this Mac where the repo is checked out. The agent\n reads source files, commits, and uncommitted changes from\n here.\n </p>\n </div>\n <DirectoryPickerField\n value={path}\n onChange={setPath}\n title=\"Choose local clone directory\"\n />\n {showLocalOnlyToggle && (\n <label className=\"flex items-start gap-2 text-xs text-muted-foreground\">\n <input\n type=\"checkbox\"\n checked={localOnly}\n onChange={(e) => setLocalOnly(e.target.checked)}\n className=\"mt-0.5\"\n />\n <span>\n This folder is not (and will never be) backed by a GitHub\n remote. Skip GitHub linking permanently.\n </span>\n </label>\n )}\n </div>\n )}\n\n <div className=\"space-y-3 rounded-md border bg-background/40 p-3\">\n <p className={SECTION_TITLE}>Naming & tracking</p>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Display name (optional)</label>\n <Input\n value={displayName}\n onChange={(e) => setDisplayName(e.target.value)}\n placeholder=\"Leave blank to use the repo or folder name\"\n />\n <p className={FIELD_HINT}>\n How this repository appears in the dashboard and in your\n context notes.\n </p>\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>How should the agent treat this?</label>\n <div className=\"grid gap-2\">\n {CLASSIFICATION_OPTIONS.map((option) => {\n const selected = classification === option.value;\n return (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => setClassification(option.value)}\n className={\n \"rounded-md border px-3 py-2 text-left transition-colors \" +\n (selected\n ? \"border-primary bg-primary/10\"\n : \"border-border hover:bg-accent\")\n }\n >\n <div\n className={\n \"text-sm font-medium \" +\n (selected ? \"text-primary\" : \"text-foreground\")\n }\n >\n {option.label}\n </div>\n <div className={FIELD_HINT + \" mt-0.5\"}>\n {option.description}\n </div>\n </button>\n );\n })}\n </div>\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Category (tag)</label>\n <select\n value={category}\n onChange={(e) =>\n setCategory(e.target.value as RepositoryCategory)\n }\n className=\"h-9 w-full rounded-md border bg-background px-2 text-sm\"\n >\n {CATEGORIES.map((c) => (\n <option key={c} value={c}>\n {c}\n </option>\n ))}\n </select>\n <p className={FIELD_HINT}>\n Used to group repositories in the dashboard. Pick whichever\n feels right.\n </p>\n </div>\n </div>\n\n {error && (\n <p className=\"rounded-md border border-red-200 bg-red-50/50 p-2 text-xs text-red-700 dark:border-red-900 dark:bg-red-950/30 dark:text-red-300\">\n {error}\n </p>\n )}\n\n <div className=\"flex items-center justify-end gap-2 border-t pt-4\">\n <Button type=\"button\" variant=\"ghost\" onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={create.isPending}>\n {create.isPending ? \"Adding…\" : \"Add repository\"}\n </Button>\n </div>\n </form>\n </SheetContent>\n </Sheet>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { GitBranch, Plus } from \"lucide-react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card } from \"@/components/ui/card\";\nimport { EmptyState } from \"@/components/shared/empty-state\";\nimport { ConnectionsSectionHeader } from \"@/components/connections/section-header\";\nimport { GitAccountsCard } from \"@/components/connections/git-accounts-card\";\nimport { GitTemplatesCard } from \"@/components/connections/git-templates-card\";\nimport { TaskFlowOverridesCard } from \"@/components/connections/task-flow-overrides-card\";\nimport { ProcessModelCard } from \"@/components/connections/process-model-card\";\nimport { IntegrationCard } from \"@/components/connections/integration-card\";\nimport { RepositoryCard } from \"@/components/connections/repository-card\";\nimport { AddRepositorySheet } from \"@/components/connections/add-repository-sheet\";\nimport { useRepositories } from \"@/lib/hooks/use-repositories\";\nimport { useHealth } from \"@/lib/hooks/use-health\";\n\nexport default function RepositoriesConnectionsPage() {\n const repos = useRepositories();\n const { data: health, isLoading: healthLoading } = useHealth();\n const [adding, setAdding] = useState(false);\n\n const items = repos.data?.repositories ?? [];\n const total = items.length;\n const githubLinked = items.filter(\n (r) => r.githubOwner && r.githubRepo,\n ).length;\n const localLinked = items.filter((r) => r.localPath).length;\n\n const loading = repos.isLoading || healthLoading;\n const disconnected = !loading && (!repos.data || !health);\n\n return (\n <>\n <ConnectionsSectionHeader\n title=\"Repositories\"\n description=\"Each repository pairs an optional GitHub remote and an optional local clone. Configure polling, triggers, and daily git management on the my life › git page.\"\n healthy={total > 0 ? 1 : 0}\n total={1}\n actions={\n <Button onClick={() => setAdding(true)}>\n <Plus className=\"h-4 w-4\" />\n Add repository\n </Button>\n }\n />\n\n {disconnected && (\n <p className=\"text-sm text-muted-foreground\">\n Daemon not connected. Start the daemon to manage repositories.\n </p>\n )}\n\n {!loading && (\n <div className=\"space-y-4\">\n <IntegrationCard integrationKey=\"git\" />\n <IntegrationCard integrationKey=\"github\" />\n\n {items.length === 0 ? (\n <EmptyState\n icon={GitBranch}\n title=\"No repositories registered\"\n description=\"Add a repository to start watching commits, polling GitHub events, and wiring per-repo triggers.\"\n >\n <Button className=\"mt-4\" onClick={() => setAdding(true)}>\n <Plus className=\"h-4 w-4\" />\n Add your first repository\n </Button>\n </EmptyState>\n ) : (\n <>\n <Card className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>\n {total} repositor{total === 1 ? \"y\" : \"ies\"} ·{\" \"}\n {githubLinked} with GitHub · {localLinked} with local clone\n </span>\n </Card>\n <div className=\"space-y-3\">\n {items.map((repo) => (\n <RepositoryCard key={repo.id} repo={repo} />\n ))}\n </div>\n </>\n )}\n\n <GitAccountsCard />\n <GitTemplatesCard />\n <TaskFlowOverridesCard />\n\n <ProcessModelCard\n processKey=\"git.project.init\"\n title=\"Git Project Init Model\"\n description=\"Generates the initial overview MD when daily git management is first enabled for a repository.\"\n />\n <ProcessModelCard\n processKey=\"git.project.update\"\n title=\"Git Project Update Model\"\n description=\"Runs the daily 24h scan that appends to journal MDs and curates overview sections.\"\n />\n <ProcessModelCard\n processKey=\"git.project.retemplate\"\n title=\"Git Project Re-template Model\"\n description=\"One-shot session that re-conforms existing project documents to the current template body.\"\n />\n </div>\n )}\n\n {adding && <AddRepositorySheet onClose={() => setAdding(false)} />}\n </>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Unlink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/unlink\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 Unlink = createLucideIcon('Unlink', [\n [\n 'path',\n {\n d: 'm18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71',\n key: 'yqzxt4',\n },\n ],\n [\n 'path',\n {\n d: 'm5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71',\n key: '4qinb0',\n },\n ],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '5', key: '1041cp' }],\n ['line', { x1: '2', x2: '5', y1: '8', y2: '8', key: '14m1p5' }],\n ['line', { x1: '16', x2: '16', y1: '19', y2: '22', key: 'rzdirn' }],\n ['line', { x1: '19', x2: '22', y1: '16', y2: '16', key: 'ox905f' }],\n]);\n\nexport default Unlink;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name FileType2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/file-type-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 FileType2 = createLucideIcon('FileType2', [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4', key: '1pf5j1' }],\n ['path', { d: 'M14 2v4a2 2 0 0 0 2 2h4', key: 'tnqrlb' }],\n ['path', { d: 'M2 13v-1h6v1', key: '1dh9dg' }],\n ['path', { d: 'M5 12v6', key: '150t9c' }],\n ['path', { d: 'M4 18h2', key: '1xrofg' }],\n]);\n\nexport default FileType2;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name FilePen\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/file-pen\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 FilePen = createLucideIcon('FilePen', [\n ['path', { d: 'M12.5 22H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v9.5', key: '1couwa' }],\n ['path', { d: 'M14 2v4a2 2 0 0 0 2 2h4', key: 'tnqrlb' }],\n [\n 'path',\n {\n d: 'M13.378 15.626a1 1 0 1 0-3.004-3.004l-5.01 5.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z',\n key: '1y4qbx',\n },\n ],\n]);\n\nexport default FilePen;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Github\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/github\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 * @deprecated Brand icons have been deprecated and are due to be removed, please refer to https://github.com/lucide-icons/lucide/issues/670. We recommend using https://simpleicons.org/?q=github instead. This icon will be removed in v1.0\n */\nconst Github = createLucideIcon('Github', [\n [\n 'path',\n {\n d: 'M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4',\n key: 'tonef',\n },\n ],\n ['path', { d: 'M9 18c-4.51 2-5-2-7-2', key: '9comsn' }],\n]);\n\nexport default Github;\n","import type {\n GitTemplateKind,\n RetemplateFileEntry,\n RetemplateFileStatus,\n RetemplateRunStatus,\n RetemplateStatusRecord,\n} from \"@/lib/hooks/use-git-templates\";\n\n/**\n * Pure logic for the Templates card so the multi-state grid + warning\n * copy can be unit-tested without React.\n */\n\nexport function templateLabel(kind: GitTemplateKind): string {\n return kind === \"project\"\n ? \"Project (projects/<slug>.md)\"\n : \"Repo-only (git-repos/<slug>.md)\";\n}\n\nexport function templateFileName(kind: GitTemplateKind): string {\n return kind === \"project\" ? \"project.md\" : \"git-repo.md\";\n}\n\nexport interface ApplyWarningCopy {\n title: string;\n bullets: string[];\n acknowledge: string;\n}\n\nexport function buildApplyWarning(\n kind: GitTemplateKind,\n targetCount: number,\n): ApplyWarningCopy {\n const label = templateLabel(kind);\n return {\n title: `Re-template ${targetCount} ${kind === \"project\" ? \"project\" : \"git-repo\"} document${targetCount === 1 ? \"\" : \"s\"}?`,\n bullets: [\n `${label} files will be re-conformed to the current template body.`,\n \"Re-templating may lose information or formatting that the new template does not represent. Files matching the previous schema's sections may have content moved, merged, or dropped depending on how the template changed.\",\n \"Every targeted file is auto-backed up before the run. The backup path is shown after you confirm.\",\n \"If a file's session aborts mid-write, the daemon restores it from backup automatically.\",\n ],\n acknowledge: \"Yes, apply the template\",\n };\n}\n\nexport interface FileGridRow {\n slug: string;\n contextFile: string;\n status: RetemplateFileStatus;\n reason: string | null;\n error: string | null;\n bytesDelta: number | null;\n startedAt: string | null;\n completedAt: string | null;\n}\n\nexport function buildFileGridRows(\n record: RetemplateStatusRecord | null,\n): FileGridRow[] {\n if (!record) return [];\n return Object.values(record.files)\n .map((entry: RetemplateFileEntry) => ({\n slug: entry.slug,\n contextFile: entry.contextFile,\n status: entry.status,\n reason: entry.reason ?? null,\n error: entry.error ?? null,\n bytesDelta:\n entry.beforeBytes !== undefined && entry.afterBytes !== undefined\n ? entry.afterBytes - entry.beforeBytes\n : null,\n startedAt: entry.startedAt ?? null,\n completedAt: entry.completedAt ?? null,\n }))\n .sort((a, b) => a.slug.localeCompare(b.slug));\n}\n\nexport function gridStatusCounts(\n rows: FileGridRow[],\n): Record<RetemplateFileStatus, number> {\n const counts: Record<RetemplateFileStatus, number> = {\n pending: 0,\n started: 0,\n completed: 0,\n skipped: 0,\n failed: 0,\n rolled_back: 0,\n };\n for (const row of rows) counts[row.status] += 1;\n return counts;\n}\n\nexport function runHeadline(\n record: RetemplateStatusRecord | null,\n): { label: string; tone: \"info\" | \"success\" | \"warning\" | \"error\" } | null {\n if (!record) return null;\n if (!record.finalizedAt) {\n return { label: \"Re-template in progress…\", tone: \"info\" };\n }\n switch (record.finalStatus as RetemplateRunStatus) {\n case \"success\":\n return { label: \"Re-template completed\", tone: \"success\" };\n case \"partial\":\n return { label: \"Re-template completed with rollbacks\", tone: \"warning\" };\n case \"failed\":\n return { label: \"Re-template failed\", tone: \"error\" };\n default:\n return { label: \"Re-template completed\", tone: \"success\" };\n }\n}\n"],"names":["QUERY_KEY","useGitAccounts","queryKey","queryFn","get","staleTime","qc","mutationFn","useUpsertGitAccount","alias","payload","onSuccess","put","invalidateQueries","useDeleteGitAccount","delete","useProbeGitAccount","post"],"mappings":"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","ignoreList":[9,10,11,12]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/dashboard/src/lib/hooks/use-git-accounts.ts","../../../../../../packages/dashboard/src/components/connections/git-accounts-card.tsx","../../../../../../packages/dashboard/src/lib/hooks/use-git-templates.ts","../../../../../../packages/dashboard/src/components/connections/git-templates-card.tsx","../../../../../../packages/dashboard/src/lib/hooks/use-task-flows.ts","../../../../../../packages/dashboard/src/components/connections/task-flow-overrides-card.tsx","../../../../../../packages/dashboard/src/components/connections/repository-card.tsx","../../../../../../packages/dashboard/src/components/connections/add-repository-sheet.tsx","../../../../../../packages/dashboard/src/app/connections/repositories/page.tsx","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/unlink.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/file-type-2.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/file-pen.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/github.ts","../../../../../../packages/dashboard/src/components/connections/git-templates-card.logic.ts"],"sourcesContent":["\"use client\";\n\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\nimport type {\n GitAccountConfig,\n GitAccountsListEntry,\n} from \"@/lib/api-types\";\n\nconst QUERY_KEY = [\"git-accounts\"];\n\ninterface ListResponse {\n accounts: GitAccountsListEntry[];\n}\n\nexport function useGitAccounts() {\n return useQuery({\n queryKey: QUERY_KEY,\n queryFn: () => api.get<ListResponse>(\"/git-accounts\"),\n staleTime: 30_000,\n });\n}\n\nexport function useUpsertGitAccount() {\n const qc = useQueryClient();\n return useMutation({\n mutationFn: ({\n alias,\n payload,\n }: {\n alias: string;\n payload: GitAccountConfig & { token?: string };\n }) =>\n api.put<{ ok: boolean; alias: string }>(`/git-accounts/${alias}`, payload),\n onSuccess: () => {\n void qc.invalidateQueries({ queryKey: QUERY_KEY });\n // Also bust the config query so any consumer that reads\n // `config.gitAccounts` re-renders.\n void qc.invalidateQueries({ queryKey: [\"config\"] });\n },\n });\n}\n\nexport function useDeleteGitAccount() {\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (alias: string) =>\n api.delete<{ ok: boolean }>(`/git-accounts/${alias}`),\n onSuccess: () => {\n void qc.invalidateQueries({ queryKey: QUERY_KEY });\n void qc.invalidateQueries({ queryKey: [\"config\"] });\n },\n });\n}\n\nexport interface ProbeResponse {\n ok: boolean;\n login?: string;\n host?: string;\n reason?: string;\n}\n\nexport function useProbeGitAccount() {\n return useMutation({\n mutationFn: (alias: string) =>\n api.post<ProbeResponse>(`/git-accounts/${alias}/probe`, {}),\n });\n}\n","\"use client\";\n\n/**\n * Phase 5 (P5 §\"Multi-account remotes\") — manage named credentials the\n * Git/GitHub observers attach to per-repo polls. Two auth modes:\n *\n * • `gh-cli-profile` — reuse an existing `gh auth login` profile by\n * login name. The daemon resolves the token via\n * `gh auth token --user <ghProfile>` at call time, so token rotation\n * and SSO refresh continue to flow through `gh`.\n * • `pat-keychain` — paste a Personal Access Token. The daemon stores\n * it in the OS keychain at `git.account.<alias>` and never persists\n * it to disk.\n *\n * Direct mode only (see git-lifecycle-and-triggers.md Decision 4 §3) —\n * Delegated mode currently uses the default `gh` profile inside the\n * spawned backend session. That caveat is surfaced inline.\n */\n\nimport { useState } from \"react\";\nimport { KeyRound, Plus, ShieldCheck, X } from \"lucide-react\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { ConnectionCard, deriveConfiguredStatus } from \"./connection-card\";\nimport {\n useDeleteGitAccount,\n useGitAccounts,\n useProbeGitAccount,\n useUpsertGitAccount,\n} from \"@/lib/hooks/use-git-accounts\";\nimport type {\n GitAccountConfig,\n GitAccountsListEntry,\n} from \"@/lib/api-types\";\n\nconst ALIAS_PATTERN = /^[a-z0-9._-]+$/;\n\ninterface FormState {\n alias: string;\n type: GitAccountConfig[\"type\"];\n authMode: GitAccountConfig[\"authMode\"];\n ghProfile: string;\n host: string;\n token: string;\n}\n\nconst EMPTY_FORM: FormState = {\n alias: \"\",\n type: \"github\",\n authMode: \"gh-cli-profile\",\n ghProfile: \"\",\n host: \"github.com\",\n token: \"\",\n};\n\nexport function GitAccountsCard() {\n const list = useGitAccounts();\n const upsert = useUpsertGitAccount();\n const remove = useDeleteGitAccount();\n const probe = useProbeGitAccount();\n const [form, setForm] = useState<FormState>(EMPTY_FORM);\n const [error, setError] = useState<string | null>(null);\n const [probeMessages, setProbeMessages] = useState<Record<string, string>>({});\n\n const accounts = list.data?.accounts ?? [];\n\n const submit = async () => {\n setError(null);\n if (!ALIAS_PATTERN.test(form.alias)) {\n setError(\"Alias must use lowercase letters, digits, dot, dash, or underscore.\");\n return;\n }\n if (form.authMode === \"gh-cli-profile\" && !form.ghProfile.trim()) {\n setError(\"gh-cli-profile mode requires a gh login name.\");\n return;\n }\n if (form.authMode === \"pat-keychain\" && !form.token.trim()) {\n setError(\"PAT mode requires a token on first save.\");\n return;\n }\n try {\n await upsert.mutateAsync({\n alias: form.alias,\n payload: {\n type: form.type,\n authMode: form.authMode,\n host: form.host || \"github.com\",\n ...(form.authMode === \"gh-cli-profile\"\n ? { ghProfile: form.ghProfile }\n : {}),\n ...(form.token ? { token: form.token } : {}),\n },\n });\n setForm(EMPTY_FORM);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to save account.\");\n }\n };\n\n const onProbe = async (alias: string) => {\n setProbeMessages((prev) => ({ ...prev, [alias]: \"Probing…\" }));\n try {\n const result = await probe.mutateAsync(alias);\n const message = result.ok\n ? `OK — authenticated as ${result.login}`\n : `Probe failed: ${result.reason ?? \"unknown\"}`;\n setProbeMessages((prev) => ({ ...prev, [alias]: message }));\n } catch (err) {\n setProbeMessages((prev) => ({\n ...prev,\n [alias]: err instanceof Error ? err.message : \"Probe failed\",\n }));\n }\n };\n\n return (\n <ConnectionCard\n name=\"Git Accounts\"\n icon={<KeyRound className=\"h-4 w-4\" />}\n status={deriveConfiguredStatus(accounts.length > 0)}\n >\n <div className=\"mt-2 space-y-3\">\n <p className=\"text-xs text-muted-foreground\">\n Named credentials attached to watched repositories via{\" \"}\n <code className=\"rounded bg-muted px-1\">accountAlias</code>. Direct\n mode injects the resolved token per poll; Delegated mode currently\n uses the default <code>gh</code> profile.\n </p>\n\n {error && <Alert variant=\"error\">{error}</Alert>}\n\n <div className=\"space-y-2\">\n {accounts.length === 0 && (\n <p className=\"text-xs italic text-muted-foreground\">\n No accounts configured. Add one below.\n </p>\n )}\n {accounts.map((entry) => (\n <AccountRow\n key={entry.alias}\n entry={entry}\n onDelete={() => remove.mutate(entry.alias)}\n onProbe={() => onProbe(entry.alias)}\n probeMessage={probeMessages[entry.alias]}\n busy={remove.isPending || probe.isPending}\n />\n ))}\n </div>\n\n <div className=\"space-y-2 rounded border bg-background p-3\">\n <p className=\"text-xs font-medium\">Add account</p>\n <div className=\"flex flex-wrap gap-2\">\n <Input\n value={form.alias}\n onChange={(e) => setForm((f) => ({ ...f, alias: e.target.value }))}\n placeholder=\"alias (e.g. work-github)\"\n className=\"max-w-[200px]\"\n />\n <select\n value={form.authMode}\n onChange={(e) =>\n setForm((f) => ({\n ...f,\n authMode: e.target.value as FormState[\"authMode\"],\n }))\n }\n className=\"h-9 rounded border bg-background px-2 text-sm\"\n >\n <option value=\"gh-cli-profile\">gh CLI profile</option>\n <option value=\"pat-keychain\">Personal Access Token</option>\n </select>\n <Input\n value={form.host}\n onChange={(e) => setForm((f) => ({ ...f, host: e.target.value }))}\n placeholder=\"github.com\"\n className=\"max-w-[180px]\"\n />\n {form.authMode === \"gh-cli-profile\" ? (\n <Input\n value={form.ghProfile}\n onChange={(e) =>\n setForm((f) => ({ ...f, ghProfile: e.target.value }))\n }\n placeholder=\"gh login name (e.g. alice)\"\n className=\"max-w-[220px]\"\n />\n ) : (\n <Input\n type=\"password\"\n value={form.token}\n onChange={(e) => setForm((f) => ({ ...f, token: e.target.value }))}\n placeholder=\"ghp_… (PAT — never persisted to disk)\"\n className=\"max-w-[280px]\"\n />\n )}\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={submit}\n disabled={upsert.isPending || !form.alias.trim()}\n >\n <Plus className=\"mr-1 h-3.5 w-3.5\" />\n Save\n </Button>\n </div>\n </div>\n </div>\n </ConnectionCard>\n );\n}\n\nfunction AccountRow({\n entry,\n onDelete,\n onProbe,\n probeMessage,\n busy,\n}: {\n entry: GitAccountsListEntry;\n onDelete: () => void;\n onProbe: () => void;\n probeMessage?: string;\n busy: boolean;\n}) {\n return (\n <div className=\"flex flex-col gap-2 rounded border bg-background p-2 sm:flex-row sm:items-center\">\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-mono text-sm font-medium\">{entry.alias}</p>\n <div className=\"mt-1 flex flex-wrap items-center gap-1.5\">\n <Badge variant=\"gray\">{entry.host}</Badge>\n <Badge variant={entry.authMode === \"pat-keychain\" ? \"green\" : \"gray\"}>\n {entry.authMode}\n </Badge>\n {entry.ghProfile && (\n <Badge variant=\"gray\">user: {entry.ghProfile}</Badge>\n )}\n {entry.tokenStored === true && <Badge variant=\"green\">token stored</Badge>}\n {entry.tokenStored === false && (\n <Badge variant=\"red\">no token</Badge>\n )}\n </div>\n {probeMessage && (\n <p className=\"mt-1 text-xs text-muted-foreground\">{probeMessage}</p>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n <Button size=\"sm\" variant=\"ghost\" onClick={onProbe} disabled={busy}>\n <ShieldCheck className=\"mr-1 h-3.5 w-3.5\" />\n Probe\n </Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={onDelete} disabled={busy} className=\"h-8 w-8 p-0\">\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n );\n}\n\nexport default GitAccountsCard;\n","\"use client\";\n\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\n\nexport type GitTemplateKind = \"project\" | \"git-repo\";\n\nexport interface GitTemplateDetail {\n kind: GitTemplateKind;\n active: string;\n bundled: string;\n override: string | null;\n hasOverride: boolean;\n path: string;\n}\n\nconst TEMPLATE_KEY = (kind: GitTemplateKind) => [\"git-template\", kind];\nconst STATUS_KEY = [\"git-template\", \"retemplate-status\"] as const;\n\nexport function useGitTemplate(kind: GitTemplateKind) {\n return useQuery({\n queryKey: TEMPLATE_KEY(kind),\n queryFn: () =>\n api.get<GitTemplateDetail>(\n `/git/templates/${encodeURIComponent(kind)}`,\n ),\n staleTime: 5_000,\n });\n}\n\nexport function useSaveGitTemplate(kind: GitTemplateKind) {\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (content: string) =>\n api.put<{ ok: boolean; bytes: number; path: string }>(\n `/git/templates/${encodeURIComponent(kind)}`,\n { content },\n ),\n onSuccess: () => {\n void qc.invalidateQueries({ queryKey: TEMPLATE_KEY(kind) });\n },\n });\n}\n\nexport interface GitRetemplateApplyResponse {\n ok: true;\n kind: GitTemplateKind;\n scheduleId: number;\n correlationId: string;\n backupRoot: string;\n targets: Array<{\n slug: string;\n contextFile: string;\n backupRelPath: string;\n }>;\n}\n\nexport function useApplyGitTemplate(kind: GitTemplateKind) {\n const qc = useQueryClient();\n return useMutation({\n mutationFn: () =>\n api.post<GitRetemplateApplyResponse>(\n `/git/templates/${encodeURIComponent(kind)}/apply`,\n ),\n onSuccess: () => {\n void qc.invalidateQueries({ queryKey: STATUS_KEY });\n },\n });\n}\n\nexport type RetemplateFileStatus =\n | \"pending\"\n | \"started\"\n | \"completed\"\n | \"skipped\"\n | \"failed\"\n | \"rolled_back\";\n\nexport type RetemplateRunStatus = \"running\" | \"success\" | \"partial\" | \"failed\";\n\nexport interface RetemplateFileEntry {\n slug: string;\n contextPath: string;\n contextFile: string;\n backupRelPath: string;\n classification: \"project\" | \"repo-only\";\n status: RetemplateFileStatus;\n reason?: string;\n error?: string;\n beforeBytes?: number;\n afterBytes?: number;\n startedAt?: string;\n completedAt?: string;\n}\n\nexport interface RetemplateStatusRecord {\n scheduleId: number;\n correlationId: string;\n kind: GitTemplateKind;\n backupRoot: string;\n startedAt: string;\n finalizedAt?: string;\n finalStatus?: RetemplateRunStatus;\n files: Record<string, RetemplateFileEntry>;\n}\n\nexport function useRetemplateStatus() {\n return useQuery({\n queryKey: STATUS_KEY,\n queryFn: () =>\n api.get<{ status: RetemplateStatusRecord | null }>(\n \"/git/templates/retemplate/status\",\n ),\n // Live-refresh while a run is in flight; the dashboard renders the\n // status grid as it changes.\n refetchInterval: (query) => {\n const data = query.state.data as\n | { status: RetemplateStatusRecord | null }\n | undefined;\n const inFlight = data?.status && !data.status.finalizedAt;\n return inFlight ? 2_000 : false;\n },\n staleTime: 1_000,\n });\n}\n","\"use client\";\n\n/**\n * Phase 6 (git-lifecycle-and-triggers.md Decision 8) — owner-facing\n * editor for the project-doc and git-repo templates, plus the explicit\n * \"Apply current template to existing projects\" action.\n *\n * Scope:\n * • Two editors stacked: `project.md` and `git-repo.md`.\n * • A bundled column the dashboard renders read-only so the user can\n * diff against ship defaults and reset by clearing their override.\n * • An \"Apply\" button per editor that opens a warning sheet, confirms\n * the auto-backup, and POSTs to `/api/git/templates/<kind>/apply`.\n * • A live status grid that polls every 2s while a re-template run is\n * in flight (rolling back to idle once `finalizedAt` is set).\n *\n * Anything substantive lives in `git-templates-card.logic.ts` so it is\n * unit-testable without React.\n */\n\nimport { useMemo, useState } from \"react\";\nimport { FileType2, Loader2, Play, Save } from \"lucide-react\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n} from \"@/components/ui/sheet\";\nimport { ConnectionCard, deriveConfiguredStatus } from \"./connection-card\";\nimport {\n type GitRetemplateApplyResponse,\n type GitTemplateKind,\n useApplyGitTemplate,\n useGitTemplate,\n useRetemplateStatus,\n useSaveGitTemplate,\n} from \"@/lib/hooks/use-git-templates\";\nimport {\n buildApplyWarning,\n buildFileGridRows,\n gridStatusCounts,\n runHeadline,\n templateFileName,\n templateLabel,\n} from \"./git-templates-card.logic\";\n\nconst KIND_OPTIONS: GitTemplateKind[] = [\"project\", \"git-repo\"];\n\nexport function GitTemplatesCard() {\n const status = useRetemplateStatus();\n const record = status.data?.status ?? null;\n\n const headline = runHeadline(record);\n\n return (\n <ConnectionCard\n name=\"Project document templates\"\n icon={<FileType2 className=\"h-4 w-4\" />}\n status={deriveConfiguredStatus(true)}\n >\n <div className=\"mt-2 space-y-3\">\n <p className=\"text-xs text-muted-foreground\">\n Edit the templates the agent uses when it (re)writes\n {\" \"}<code className=\"rounded bg-muted px-1\">context/projects/<slug>.md</code>\n {\" \"}and{\" \"}\n <code className=\"rounded bg-muted px-1\">context/git-repos/<slug>.md</code>.\n Changes are forward-only — existing files keep their old shape until\n the next git lifecycle event touches them, or until you press\n “Apply” below to re-conform every existing file at once.\n </p>\n\n {headline && (\n <Alert\n variant={\n headline.tone === \"error\"\n ? \"error\"\n : headline.tone === \"warning\"\n ? \"warning\"\n : headline.tone === \"success\"\n ? \"success\"\n : \"info\"\n }\n >\n <div className=\"flex items-center justify-between gap-3\">\n <span>{headline.label}</span>\n {record && (\n <span className=\"text-xs font-mono text-muted-foreground\">\n {record.kind} · run #{record.scheduleId}\n </span>\n )}\n </div>\n </Alert>\n )}\n\n {KIND_OPTIONS.map((kind) => (\n <TemplateEditor key={kind} kind={kind} />\n ))}\n\n <RetemplateStatusGrid />\n </div>\n </ConnectionCard>\n );\n}\n\nfunction TemplateEditor({ kind }: { kind: GitTemplateKind }) {\n const detail = useGitTemplate(kind);\n const save = useSaveGitTemplate(kind);\n const apply = useApplyGitTemplate(kind);\n const [draft, setDraft] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [confirmOpen, setConfirmOpen] = useState(false);\n const [applyResult, setApplyResult] =\n useState<GitRetemplateApplyResponse | null>(null);\n\n const active = detail.data?.active ?? \"\";\n const bundled = detail.data?.bundled ?? \"\";\n const hasOverride = detail.data?.hasOverride ?? false;\n const draftActive = draft ?? active;\n const draftDirty = draft !== null && draft !== active;\n\n const onSave = async () => {\n if (draft === null) return;\n setError(null);\n try {\n await save.mutateAsync(draft);\n setDraft(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to save template\");\n }\n };\n\n const onResetToBundled = () => {\n setDraft(bundled);\n };\n\n const warning = buildApplyWarning(kind, 0); // count fills in once apply runs\n const onConfirmApply = async () => {\n setError(null);\n try {\n const result = await apply.mutateAsync();\n setApplyResult(result);\n setConfirmOpen(false);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to apply template\");\n }\n };\n\n return (\n <div className=\"rounded border bg-card p-3 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium\">{templateLabel(kind)}</span>\n {hasOverride && <Badge variant=\"green\">overridden</Badge>}\n </div>\n <span className=\"text-xs text-muted-foreground\">\n {templateFileName(kind)}\n </span>\n </div>\n\n {error && <Alert variant=\"error\">{error}</Alert>}\n\n <div className=\"grid gap-2 lg:grid-cols-2\">\n <div>\n <p className=\"mb-1 text-xs font-medium text-muted-foreground\">\n Bundled (read-only)\n </p>\n <textarea\n value={bundled}\n readOnly\n className=\"h-64 w-full resize-none rounded border bg-muted p-2 font-mono text-xs\"\n />\n </div>\n <div>\n <p className=\"mb-1 text-xs font-medium text-muted-foreground\">\n Active (edit and save)\n </p>\n <textarea\n value={draftActive}\n onChange={(e) => setDraft(e.target.value)}\n className=\"h-64 w-full resize-none rounded border bg-background p-2 font-mono text-xs\"\n spellCheck={false}\n disabled={detail.isLoading}\n />\n </div>\n </div>\n\n <div className=\"flex flex-wrap gap-2\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={onSave}\n disabled={!draftDirty || save.isPending}\n >\n <Save className=\"mr-1 h-3.5 w-3.5\" />\n Save template\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={onResetToBundled}\n disabled={detail.isLoading}\n >\n Reset to bundled\n </Button>\n <Button\n size=\"sm\"\n variant=\"default\"\n onClick={() => setConfirmOpen(true)}\n disabled={apply.isPending}\n >\n {apply.isPending ? (\n <Loader2 className=\"mr-1 h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Play className=\"mr-1 h-3.5 w-3.5\" />\n )}\n Apply current template to existing {kind === \"project\" ? \"projects\" : \"git-repos\"}\n </Button>\n </div>\n\n {applyResult && (\n <Alert variant=\"info\">\n <div className=\"space-y-1 text-xs\">\n <div>\n Re-template enqueued — schedule #{applyResult.scheduleId},\n {\" \"}{applyResult.targets.length} file(s) backed up.\n </div>\n <div className=\"font-mono text-muted-foreground break-all\">\n backup: {applyResult.backupRoot}\n </div>\n </div>\n </Alert>\n )}\n\n <Sheet open={confirmOpen} onOpenChange={setConfirmOpen}>\n <SheetContent side=\"right\" className=\"w-[480px] sm:w-[540px]\">\n <SheetHeader>\n <SheetTitle>{warning.title}</SheetTitle>\n </SheetHeader>\n <div className=\"mt-4 space-y-3 text-sm\">\n <ul className=\"list-disc space-y-1 pl-5\">\n {warning.bullets.map((b) => (\n <li key={b}>{b}</li>\n ))}\n </ul>\n <div className=\"flex gap-2 pt-2\">\n <Button\n size=\"sm\"\n onClick={onConfirmApply}\n disabled={apply.isPending}\n >\n {apply.isPending && (\n <Loader2 className=\"mr-1 h-3.5 w-3.5 animate-spin\" />\n )}\n {warning.acknowledge}\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setConfirmOpen(false)}\n >\n Cancel\n </Button>\n </div>\n </div>\n </SheetContent>\n </Sheet>\n </div>\n );\n}\n\nfunction RetemplateStatusGrid() {\n const status = useRetemplateStatus();\n const record = status.data?.status ?? null;\n const rows = useMemo(() => buildFileGridRows(record), [record]);\n const counts = useMemo(() => gridStatusCounts(rows), [rows]);\n\n if (!record) {\n return (\n <p className=\"text-xs text-muted-foreground\">\n No re-template runs recorded yet.\n </p>\n );\n }\n\n return (\n <div className=\"rounded border bg-card p-3 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium\">Last re-template run</span>\n <div className=\"flex flex-wrap gap-1 text-xs\">\n {Object.entries(counts).map(([status, count]) =>\n count > 0 ? (\n <Badge key={status} variant={badgeVariantForStatus(status)}>\n {status}: {count}\n </Badge>\n ) : null,\n )}\n </div>\n </div>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-xs\">\n <thead>\n <tr className=\"border-b text-left text-muted-foreground\">\n <th className=\"px-2 py-1\">Slug</th>\n <th className=\"px-2 py-1\">Status</th>\n <th className=\"px-2 py-1\">File</th>\n <th className=\"px-2 py-1\">Bytes Δ</th>\n <th className=\"px-2 py-1\">Note</th>\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => (\n <tr key={row.slug} className=\"border-b last:border-0\">\n <td className=\"px-2 py-1 font-mono\">{row.slug}</td>\n <td className=\"px-2 py-1\">\n <Badge variant={badgeVariantForStatus(row.status)}>\n {row.status}\n </Badge>\n </td>\n <td className=\"px-2 py-1 font-mono text-muted-foreground\">\n {row.contextFile}\n </td>\n <td className=\"px-2 py-1\">\n {row.bytesDelta === null\n ? \"—\"\n : row.bytesDelta >= 0\n ? `+${row.bytesDelta}`\n : `${row.bytesDelta}`}\n </td>\n <td className=\"px-2 py-1 text-muted-foreground\">\n {row.error ?? row.reason ?? \"\"}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n\nfunction badgeVariantForStatus(\n status: string,\n):\n | \"default\"\n | \"gray\"\n | \"green\"\n | \"amber\"\n | \"red\"\n | \"blue\" {\n switch (status) {\n case \"completed\":\n return \"green\";\n case \"skipped\":\n return \"gray\";\n case \"started\":\n case \"pending\":\n return \"blue\";\n case \"failed\":\n return \"red\";\n case \"rolled_back\":\n return \"amber\";\n default:\n return \"default\";\n }\n}\n\nexport default GitTemplatesCard;\n","\"use client\";\n\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\nimport type { TaskFlowListEntry } from \"@/lib/api-types\";\n\nconst LIST_KEY = [\"task-flows\"];\n\ninterface ListResponse {\n userDir: string | null;\n flows: TaskFlowListEntry[];\n}\n\nexport function useTaskFlows() {\n return useQuery({\n queryKey: LIST_KEY,\n queryFn: () => api.get<ListResponse>(\"/task-flows\"),\n staleTime: 30_000,\n });\n}\n\ninterface DetailResponse {\n key: string;\n bundled: string | null;\n override: string | null;\n hasOverride: boolean;\n}\n\nexport function useTaskFlowDetail(key: string | null) {\n return useQuery({\n queryKey: [\"task-flow\", key],\n queryFn: () =>\n key === null\n ? Promise.reject(new Error(\"no_key\"))\n : api.get<DetailResponse>(`/task-flows/${encodeURIComponent(key)}`),\n enabled: key !== null,\n staleTime: 5_000,\n });\n}\n\nexport function useUpsertTaskFlow() {\n const qc = useQueryClient();\n return useMutation({\n mutationFn: ({ key, content }: { key: string; content: string }) =>\n api.put<{ ok: boolean }>(`/task-flows/${encodeURIComponent(key)}`, {\n content,\n }),\n onSuccess: (_data, { key }) => {\n void qc.invalidateQueries({ queryKey: LIST_KEY });\n void qc.invalidateQueries({ queryKey: [\"task-flow\", key] });\n },\n });\n}\n\nexport function useDeleteTaskFlowOverride() {\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (key: string) =>\n api.delete<{ ok: boolean; removed: boolean }>(\n `/task-flows/${encodeURIComponent(key)}`,\n ),\n onSuccess: (_data, key) => {\n void qc.invalidateQueries({ queryKey: LIST_KEY });\n void qc.invalidateQueries({ queryKey: [\"task-flow\", key] });\n },\n });\n}\n","\"use client\";\n\n/**\n * Phase 5 (P5 §\"User-defined triggers\") — owner-facing editor for the\n * per-event task-flow override file at\n * `<dataDir>/task-flows/<key>.md`. The bundled body ships read-only on\n * the side; the owner edits the override on the right and saves to\n * `PUT /api/task-flows/<key>`. Resetting calls `DELETE` and lets the\n * dispatcher fall back to the bundled body.\n *\n * Scope: filtered to `git.*` and `github.*` keys here so the card\n * matches its host page (`/connections/repositories`). Other connections\n * pages can compose the same component with a different filter\n * predicate as they ship.\n */\n\nimport { useMemo, useState } from \"react\";\nimport { FilePen, RotateCcw, Save } from \"lucide-react\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { ConnectionCard, deriveConfiguredStatus } from \"./connection-card\";\nimport {\n useDeleteTaskFlowOverride,\n useTaskFlowDetail,\n useTaskFlows,\n useUpsertTaskFlow,\n} from \"@/lib/hooks/use-task-flows\";\n\nconst KEY_PREFIX_FILTERS = [\"git.\", \"github.\"];\n\nexport function TaskFlowOverridesCard() {\n const list = useTaskFlows();\n const flows = useMemo(() => {\n const all = list.data?.flows ?? [];\n return all.filter((f) =>\n KEY_PREFIX_FILTERS.some((prefix) => f.key.startsWith(prefix)),\n );\n }, [list.data]);\n\n // `null` until the user (or the implicit \"first key\" default below)\n // picks a row. Derivation in render avoids cascading setState-in-effect.\n const [explicitKey, setExplicitKey] = useState<string | null>(null);\n const selectedKey =\n explicitKey ?? (flows.length > 0 ? flows[0].key : null);\n\n const detail = useTaskFlowDetail(selectedKey);\n const upsert = useUpsertTaskFlow();\n const removeOverride = useDeleteTaskFlowOverride();\n\n // Draft state keyed on the active row. When the user switches keys we\n // remount the editor via the `key` prop instead of poking state from\n // an effect, so React's setState-in-effect lint stays clean.\n const [draftByKey, setDraftByKey] = useState<Record<string, string>>({});\n const [error, setError] = useState<string | null>(null);\n\n const draft = selectedKey\n ? (draftByKey[selectedKey]\n ?? detail.data?.override\n ?? detail.data?.bundled\n ?? \"\")\n : \"\";\n const setDraft = (next: string) => {\n if (!selectedKey) return;\n setDraftByKey((prev) => ({ ...prev, [selectedKey]: next }));\n };\n const draftDirty = selectedKey\n ? draftByKey[selectedKey] !== undefined\n && draftByKey[selectedKey] !== (detail.data?.override ?? \"\")\n : false;\n\n const overrideCount = flows.filter((f) => f.hasOverride).length;\n\n const onSave = async () => {\n if (!selectedKey) return;\n setError(null);\n try {\n await upsert.mutateAsync({ key: selectedKey, content: draft });\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to save override\");\n }\n };\n\n const onResetToBundled = async () => {\n if (!selectedKey) return;\n setError(null);\n try {\n await removeOverride.mutateAsync(selectedKey);\n // Drop the local-only draft so the textarea re-derives from the\n // newly-bundled state on the next render.\n setDraftByKey((prev) => {\n const next = { ...prev };\n delete next[selectedKey];\n return next;\n });\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to reset\");\n }\n };\n\n return (\n <ConnectionCard\n name=\"Task Flow Overrides\"\n icon={<FilePen className=\"h-4 w-4\" />}\n status={deriveConfiguredStatus(overrideCount > 0)}\n >\n <div className=\"mt-2 space-y-3\">\n <p className=\"text-xs text-muted-foreground\">\n Override the prompt body the dispatcher uses for a Git/GitHub\n event. The bundled body stays read-only on the left; your\n edits land at <code className=\"rounded bg-muted px-1\">~/.personal-agent/task-flows/<key>.md</code>\n {\" \"}and take effect on the next session. Resetting falls back to bundled.\n </p>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <select\n value={selectedKey ?? \"\"}\n onChange={(e) => setExplicitKey(e.target.value || null)}\n className=\"h-9 min-w-[260px] rounded border bg-background px-2 text-sm\"\n disabled={flows.length === 0}\n >\n {flows.length === 0 && <option value=\"\">No git.* / github.* keys</option>}\n {flows.map((f) => (\n <option key={f.key} value={f.key}>\n {f.key}\n {f.hasOverride ? \" ★\" : \"\"}\n </option>\n ))}\n </select>\n {detail.data?.hasOverride && <Badge variant=\"green\">overridden</Badge>}\n </div>\n\n {error && <Alert variant=\"error\">{error}</Alert>}\n\n <div className=\"grid gap-3 lg:grid-cols-2\">\n <div>\n <p className=\"mb-1 text-xs font-medium text-muted-foreground\">\n Bundled (read-only)\n </p>\n <textarea\n value={detail.data?.bundled ?? \"\"}\n readOnly\n className=\"h-72 w-full resize-none rounded border bg-muted p-2 font-mono text-xs\"\n />\n </div>\n <div>\n <p className=\"mb-1 text-xs font-medium text-muted-foreground\">\n Override (edit and save)\n </p>\n <textarea\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n className=\"h-72 w-full resize-none rounded border bg-background p-2 font-mono text-xs\"\n spellCheck={false}\n />\n </div>\n </div>\n\n <div className=\"flex gap-2\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={onSave}\n disabled={!selectedKey || upsert.isPending || !draftDirty}\n >\n <Save className=\"mr-1 h-3.5 w-3.5\" />\n Save override\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={onResetToBundled}\n disabled={\n !selectedKey\n || removeOverride.isPending\n || !detail.data?.hasOverride\n }\n >\n <RotateCcw className=\"mr-1 h-3.5 w-3.5\" />\n Reset to bundled\n </Button>\n </div>\n </div>\n </ConnectionCard>\n );\n}\n\nexport default TaskFlowOverridesCard;\n","\"use client\";\n\nimport { useState } from \"react\";\nimport Link from \"next/link\";\nimport {\n ArrowUpRight,\n FolderOpen,\n GitBranch,\n Github,\n Lock,\n Pencil,\n Plus,\n Trash2,\n Unlink,\n} from \"lucide-react\";\nimport { Card } from \"@/components/ui/card\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Sheet, SheetContent, SheetHeader, SheetTitle } from \"@/components/ui/sheet\";\nimport { useConfirm } from \"@/components/shared/confirm-dialog\";\nimport { DirectoryPickerField } from \"@/components/directory-picker-field\";\nimport {\n type RepositoryCategory,\n type RepositoryClassification,\n type RepositoryDTO,\n type RepositoryUpdateInput,\n repositoryDisplayName,\n repositoryHasGithub,\n repositoryHasLocal,\n useDeleteRepository,\n useLinkGithub,\n useLinkLocal,\n useUpdateRepository,\n} from \"@/lib/hooks/use-repositories\";\nimport { useGitAccounts } from \"@/lib/hooks/use-git-accounts\";\n\nconst FIELD_LABEL = \"text-[11px] font-medium uppercase tracking-wider text-muted-foreground\";\n\nconst CLASSIFICATIONS: RepositoryClassification[] = [\"project\", \"repo-only\"];\nconst CATEGORIES: RepositoryCategory[] = [\n \"work\",\n \"personal\",\n \"research\",\n \"client\",\n \"other\",\n];\n\nexport function RepositoryCard({ repo }: { repo: RepositoryDTO }) {\n const [editing, setEditing] = useState(false);\n const [linkingGithub, setLinkingGithub] = useState(false);\n const [linkingLocal, setLinkingLocal] = useState(false);\n const deleteMutation = useDeleteRepository();\n const updateMutation = useUpdateRepository();\n const confirm = useConfirm();\n\n const hasGithub = repositoryHasGithub(repo);\n const hasLocal = repositoryHasLocal(repo);\n const localOnly = repo.localOnly;\n\n const handleDelete = async () => {\n const ok = await confirm({\n title: `Delete ${repositoryDisplayName(repo)}?`,\n description:\n \"This removes the repository registration along with its triggers and management state. The local clone on disk is not touched.\",\n confirmLabel: \"Delete\",\n variant: \"destructive\",\n });\n if (!ok) return;\n await deleteMutation.mutateAsync(repo.id);\n };\n\n const toggleLocalOnly = async (next: boolean) => {\n if (next && hasGithub) {\n const ok = await confirm({\n title: \"Mark as local-only?\",\n description:\n \"This will clear the GitHub link. To keep both sides, leave 'local-only' off.\",\n confirmLabel: \"Mark local-only\",\n });\n if (!ok) return;\n await updateMutation.mutateAsync({\n id: repo.id,\n body: {\n localOnly: true,\n githubOwner: null,\n githubRepo: null,\n githubAccount: null,\n },\n });\n } else {\n await updateMutation.mutateAsync({\n id: repo.id,\n body: { localOnly: next },\n });\n }\n };\n\n const unlinkLocal = async () => {\n if (!hasGithub) {\n // Cannot leave the row with neither side; surface this as a confirm dialog\n // and refuse via the API (which returns the same error).\n await confirm({\n title: \"Cannot unlink the local clone\",\n description:\n \"This row has no GitHub side, so unlinking would leave it empty. Delete the repository instead.\",\n confirmLabel: \"OK\",\n });\n return;\n }\n const ok = await confirm({\n title: \"Unlink local clone?\",\n description: `The clone at ${repo.localPath} stays on disk; only the registration is detached.`,\n confirmLabel: \"Unlink\",\n });\n if (!ok) return;\n await updateMutation.mutateAsync({ id: repo.id, body: { localPath: null } });\n };\n\n const unlinkGithub = async () => {\n const ok = await confirm({\n title: \"Unlink GitHub remote?\",\n description: hasLocal\n ? \"The local clone stays registered.\"\n : \"This row has no local clone, so unlinking would leave it empty. Use 'Mark local-only' instead.\",\n confirmLabel: \"Unlink\",\n });\n if (!ok) return;\n if (!hasLocal) return;\n await updateMutation.mutateAsync({\n id: repo.id,\n body: { githubOwner: null, githubRepo: null, githubAccount: null },\n });\n };\n\n return (\n <Card>\n {/* Header */}\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <GitBranch className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"truncate text-sm font-medium text-foreground\">\n {repositoryDisplayName(repo)}\n </span>\n {localOnly && (\n <Badge variant=\"gray\" className=\"text-[10px]\">\n <Lock className=\"mr-1 h-3 w-3\" />\n local-only\n </Badge>\n )}\n <Badge variant={repo.classification === \"project\" ? \"green\" : \"gray\"}>\n {repo.classification}\n </Badge>\n <Badge variant=\"gray\">{repo.category}</Badge>\n </div>\n <p className=\"mt-1 truncate text-[11px] text-muted-foreground\">{repo.id}</p>\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setEditing(true)} title=\"Edit\">\n <Pencil className=\"h-3.5 w-3.5\" />\n </Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={handleDelete} title=\"Delete\">\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n\n {/* Body — two-column GitHub / Local layout */}\n <div className=\"mt-3 grid gap-3 md:grid-cols-2\">\n {/* GitHub side */}\n <div className=\"rounded-md border bg-background/40 p-3\">\n <div className=\"flex items-center gap-1.5 text-xs font-medium text-muted-foreground\">\n <Github className=\"h-3.5 w-3.5\" />\n GitHub\n </div>\n {hasGithub ? (\n <div className=\"mt-1 space-y-1 text-sm\">\n <p className=\"font-medium\">\n {repo.githubOwner}/{repo.githubRepo}\n </p>\n <p className=\"text-[11px] text-muted-foreground\">\n account: {repo.githubAccount ?? \"default\"}\n </p>\n {hasLocal && !localOnly && (\n <Button size=\"sm\" variant=\"ghost\" className=\"mt-1 h-7 px-1.5\" onClick={unlinkGithub}>\n <Unlink className=\"mr-1 h-3 w-3\" />\n Unlink\n </Button>\n )}\n </div>\n ) : localOnly ? (\n <p className=\"mt-2 text-xs text-muted-foreground\">\n Local-only — toggle off to enable GitHub linking.\n </p>\n ) : (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"mt-2 h-8\"\n onClick={() => setLinkingGithub(true)}\n >\n <Plus className=\"mr-1 h-3 w-3\" />\n Link GitHub remote\n </Button>\n )}\n </div>\n\n {/* Local clone side */}\n <div className=\"rounded-md border bg-background/40 p-3\">\n <div className=\"flex items-center gap-1.5 text-xs font-medium text-muted-foreground\">\n <FolderOpen className=\"h-3.5 w-3.5\" />\n Local clone\n </div>\n {hasLocal ? (\n <div className=\"mt-1 space-y-1 text-sm\">\n <p className=\"truncate font-medium\" title={repo.localPath ?? \"\"}>\n {repo.localPath}\n </p>\n <p className=\"text-[11px] text-muted-foreground\">\n slug: <span className=\"font-mono\">{repo.slug}</span>\n </p>\n {hasGithub && (\n <Button size=\"sm\" variant=\"ghost\" className=\"mt-1 h-7 px-1.5\" onClick={unlinkLocal}>\n <Unlink className=\"mr-1 h-3 w-3\" />\n Unlink\n </Button>\n )}\n </div>\n ) : (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"mt-2 h-8\"\n onClick={() => setLinkingLocal(true)}\n >\n <Plus className=\"mr-1 h-3 w-3\" />\n Link local clone\n </Button>\n )}\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"mt-3 flex items-center justify-between text-[11px] text-muted-foreground\">\n <label className=\"flex items-center gap-1.5\">\n <input\n type=\"checkbox\"\n checked={localOnly}\n disabled={updateMutation.isPending}\n onChange={(e) => void toggleLocalOnly(e.target.checked)}\n />\n Local-only repository\n </label>\n <Link\n href=\"/git\"\n className=\"flex items-center gap-1 text-foreground underline-offset-2 hover:underline\"\n >\n Configure polling & triggers in my life › git\n <ArrowUpRight className=\"h-3 w-3\" />\n </Link>\n </div>\n\n <RepositoryEditSheet\n repo={repo}\n open={editing}\n onClose={() => setEditing(false)}\n />\n <LinkGithubSheet\n repo={repo}\n open={linkingGithub}\n onClose={() => setLinkingGithub(false)}\n />\n <LinkLocalSheet\n repo={repo}\n open={linkingLocal}\n onClose={() => setLinkingLocal(false)}\n />\n </Card>\n );\n}\n\n// ── Edit metadata sheet ──\n\n// Wrapper keeps the Sheet root mounted across open→closed so Radix can clear\n// its body pointer-events lock. Inner content is gated by `open` so form state\n// re-initializes each time the sheet is reopened.\nfunction RepositoryEditSheet({\n repo,\n open,\n onClose,\n}: {\n repo: RepositoryDTO;\n open: boolean;\n onClose: () => void;\n}) {\n return (\n <Sheet open={open} onOpenChange={(o) => !o && onClose()}>\n {open && <RepositoryEditSheetContent repo={repo} onClose={onClose} />}\n </Sheet>\n );\n}\n\nfunction RepositoryEditSheetContent({\n repo,\n onClose,\n}: {\n repo: RepositoryDTO;\n onClose: () => void;\n}) {\n const update = useUpdateRepository();\n const [displayName, setDisplayName] = useState(repo.displayName ?? \"\");\n const [classification, setClassification] = useState<RepositoryClassification>(\n repo.classification,\n );\n const [category, setCategory] = useState<RepositoryCategory>(repo.category);\n const [error, setError] = useState<string | null>(null);\n\n const submit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError(null);\n try {\n const body: RepositoryUpdateInput = {\n displayName: displayName.trim() ? displayName.trim() : null,\n classification,\n category,\n };\n await update.mutateAsync({ id: repo.id, body });\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to save changes\");\n }\n };\n\n return (\n <SheetContent className=\"overflow-y-auto\">\n <SheetHeader>\n <SheetTitle>Edit repository metadata</SheetTitle>\n </SheetHeader>\n <form onSubmit={submit} className=\"mt-6 space-y-4\">\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Display name</label>\n <Input\n value={displayName}\n onChange={(e) => setDisplayName(e.target.value)}\n placeholder={repositoryDisplayName(repo)}\n />\n <p className=\"text-[11px] text-muted-foreground\">\n Optional — drives the slug used for context paths and dashboard deep-links.\n </p>\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Classification</label>\n <select\n value={classification}\n onChange={(e) =>\n setClassification(e.target.value as RepositoryClassification)\n }\n className=\"h-9 w-full rounded-md border bg-background px-2 text-sm\"\n >\n {CLASSIFICATIONS.map((c) => (\n <option key={c} value={c}>\n {c}\n </option>\n ))}\n </select>\n <p className=\"text-[11px] text-muted-foreground\">\n Project entries carry lifecycle phases in the overview MD; repo-only\n stays lightweight.\n </p>\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Category</label>\n <select\n value={category}\n onChange={(e) => setCategory(e.target.value as RepositoryCategory)}\n className=\"h-9 w-full rounded-md border bg-background px-2 text-sm\"\n >\n {CATEGORIES.map((c) => (\n <option key={c} value={c}>\n {c}\n </option>\n ))}\n </select>\n </div>\n {error && (\n <p className=\"rounded-md border border-red-200 bg-red-50/50 p-2 text-xs text-red-700 dark:border-red-900 dark:bg-red-950/30 dark:text-red-300\">\n {error}\n </p>\n )}\n <div className=\"flex items-center justify-end gap-2 border-t pt-4\">\n <Button type=\"button\" variant=\"ghost\" onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={update.isPending}>\n {update.isPending ? \"Saving…\" : \"Save\"}\n </Button>\n </div>\n </form>\n </SheetContent>\n );\n}\n\n// ── Link GitHub remote sheet ──\n\nfunction LinkGithubSheet({\n repo,\n open,\n onClose,\n}: {\n repo: RepositoryDTO;\n open: boolean;\n onClose: () => void;\n}) {\n return (\n <Sheet open={open} onOpenChange={(o) => !o && onClose()}>\n {open && <LinkGithubSheetContent repo={repo} onClose={onClose} />}\n </Sheet>\n );\n}\n\nfunction LinkGithubSheetContent({\n repo,\n onClose,\n}: {\n repo: RepositoryDTO;\n onClose: () => void;\n}) {\n const link = useLinkGithub();\n const { data: accounts } = useGitAccounts();\n const [owner, setOwner] = useState(\"\");\n const [name, setName] = useState(\"\");\n const [account, setAccount] = useState<string>(\"\");\n const [error, setError] = useState<string | null>(null);\n\n const submit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError(null);\n if (!owner.trim() || !name.trim()) {\n setError(\"owner and repo are required\");\n return;\n }\n try {\n await link.mutateAsync({\n id: repo.id,\n owner: owner.trim(),\n repo: name.trim(),\n account: account.trim() || undefined,\n });\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to link\");\n }\n };\n\n return (\n <SheetContent className=\"overflow-y-auto\">\n <SheetHeader>\n <SheetTitle>Link a GitHub remote</SheetTitle>\n </SheetHeader>\n <form onSubmit={submit} className=\"mt-6 space-y-4\">\n <p className=\"text-xs text-muted-foreground\">\n Personal accounts on github.com only. GHES is not in scope for v1.\n </p>\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Owner</label>\n <Input\n value={owner}\n onChange={(e) => setOwner(e.target.value)}\n placeholder=\"acme\"\n autoFocus\n />\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Repository</label>\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"widgets\"\n />\n </div>\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Account alias</label>\n <select\n value={account}\n onChange={(e) => setAccount(e.target.value)}\n className=\"h-9 w-full rounded-md border bg-background px-2 text-sm\"\n >\n <option value=\"\">default</option>\n {(accounts?.accounts ?? []).map((a) => (\n <option key={a.alias} value={a.alias}>\n {a.alias}\n </option>\n ))}\n </select>\n </div>\n {error && (\n <p className=\"rounded-md border border-red-200 bg-red-50/50 p-2 text-xs text-red-700 dark:border-red-900 dark:bg-red-950/30 dark:text-red-300\">\n {error}\n </p>\n )}\n <div className=\"flex items-center justify-end gap-2 border-t pt-4\">\n <Button type=\"button\" variant=\"ghost\" onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={link.isPending}>\n {link.isPending ? \"Linking…\" : \"Link\"}\n </Button>\n </div>\n </form>\n </SheetContent>\n );\n}\n\n// ── Link local clone sheet ──\n\nfunction LinkLocalSheet({\n repo,\n open,\n onClose,\n}: {\n repo: RepositoryDTO;\n open: boolean;\n onClose: () => void;\n}) {\n return (\n <Sheet open={open} onOpenChange={(o) => !o && onClose()}>\n {open && <LinkLocalSheetContent repo={repo} onClose={onClose} />}\n </Sheet>\n );\n}\n\nfunction LinkLocalSheetContent({\n repo,\n onClose,\n}: {\n repo: RepositoryDTO;\n onClose: () => void;\n}) {\n const link = useLinkLocal();\n const [path, setPath] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n\n const submit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError(null);\n if (!path.trim()) {\n setError(\"Local path is required\");\n return;\n }\n try {\n await link.mutateAsync({ id: repo.id, localPath: path.trim() });\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to link\");\n }\n };\n\n return (\n <SheetContent className=\"overflow-y-auto\">\n <SheetHeader>\n <SheetTitle>Link a local clone</SheetTitle>\n </SheetHeader>\n <form onSubmit={submit} className=\"mt-6 space-y-4\">\n <p className=\"text-xs text-muted-foreground\">\n Pick the directory of the local clone of this repository. The agent\n never inspects `.git/config` to suggest values — paths are\n user-supplied.\n </p>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Repository directory</label>\n <DirectoryPickerField\n value={path}\n onChange={setPath}\n title=\"Choose local clone directory\"\n />\n </div>\n {error && (\n <p className=\"rounded-md border border-red-200 bg-red-50/50 p-2 text-xs text-red-700 dark:border-red-900 dark:bg-red-950/30 dark:text-red-300\">\n {error}\n </p>\n )}\n <div className=\"flex items-center justify-end gap-2 border-t pt-4\">\n <Button type=\"button\" variant=\"ghost\" onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={link.isPending}>\n {link.isPending ? \"Linking…\" : \"Link\"}\n </Button>\n </div>\n </form>\n </SheetContent>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Sheet, SheetContent, SheetHeader, SheetTitle } from \"@/components/ui/sheet\";\nimport { DirectoryPickerField } from \"@/components/directory-picker-field\";\nimport { useGitAccounts } from \"@/lib/hooks/use-git-accounts\";\nimport {\n type RepositoryCategory,\n type RepositoryClassification,\n type RepositoryCreateInput,\n useCreateRepository,\n} from \"@/lib/hooks/use-repositories\";\n\nconst FIELD_LABEL =\n \"text-[11px] font-medium uppercase tracking-wider text-muted-foreground\";\nconst FIELD_HINT = \"text-[11px] leading-relaxed text-muted-foreground\";\nconst SECTION_TITLE =\n \"text-[11px] font-medium uppercase tracking-wider text-muted-foreground\";\n\ntype Mode = \"github\" | \"local\" | \"both\";\n\nconst MODE_OPTIONS: Array<{\n value: Mode;\n label: string;\n description: string;\n}> = [\n {\n value: \"both\",\n label: \"GitHub + local clone\",\n description:\n \"Recommended. Agent watches GitHub activity AND reads files from your local clone.\",\n },\n {\n value: \"github\",\n label: \"GitHub only\",\n description:\n \"Agent watches PRs, issues, and commits on GitHub. No access to source files.\",\n },\n {\n value: \"local\",\n label: \"Local folder only\",\n description:\n \"Agent watches a folder on this Mac. No GitHub remote — e.g. a private working directory.\",\n },\n];\n\nconst CLASSIFICATION_OPTIONS: Array<{\n value: RepositoryClassification;\n label: string;\n description: string;\n}> = [\n {\n value: \"repo-only\",\n label: \"Just track activity\",\n description:\n \"Lightweight. Agent logs commits, PRs, and issues. No long-form project document.\",\n },\n {\n value: \"project\",\n label: \"Treat as a project\",\n description:\n \"Agent maintains a rich project document with goals, decisions, and milestones in your context notes.\",\n },\n];\n\nconst CATEGORIES: RepositoryCategory[] = [\n \"work\",\n \"personal\",\n \"research\",\n \"client\",\n \"other\",\n];\n\n// Wrapper keeps the Sheet root mounted across open→closed so Radix can clear\n// its body pointer-events lock. Inner content is gated by `open` so form state\n// re-initializes each time the sheet is reopened.\nexport function AddRepositorySheet({\n open,\n onClose,\n}: {\n open: boolean;\n onClose: () => void;\n}) {\n return (\n <Sheet open={open} onOpenChange={(o) => !o && onClose()}>\n {open && <AddRepositorySheetContent onClose={onClose} />}\n </Sheet>\n );\n}\n\nfunction AddRepositorySheetContent({ onClose }: { onClose: () => void }) {\n const create = useCreateRepository();\n const { data: accounts } = useGitAccounts();\n const [mode, setMode] = useState<Mode>(\"both\");\n const [owner, setOwner] = useState(\"\");\n const [name, setName] = useState(\"\");\n const [account, setAccount] = useState(\"\");\n const [path, setPath] = useState(\"\");\n const [localOnly, setLocalOnly] = useState(false);\n const [displayName, setDisplayName] = useState(\"\");\n const [classification, setClassification] =\n useState<RepositoryClassification>(\"repo-only\");\n const [category, setCategory] = useState<RepositoryCategory>(\"other\");\n const [error, setError] = useState<string | null>(null);\n\n const showGithubFields = mode === \"github\" || (mode === \"both\" && !localOnly);\n const showLocalFields = mode === \"local\" || mode === \"both\";\n const showLocalOnlyToggle = mode === \"local\";\n\n const submit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError(null);\n\n const body: RepositoryCreateInput = {\n classification,\n category,\n displayName: displayName.trim() ? displayName.trim() : undefined,\n };\n\n if (showGithubFields) {\n if (!owner.trim() || !name.trim()) {\n setError(\"GitHub owner and repository are required.\");\n return;\n }\n body.githubOwner = owner.trim();\n body.githubRepo = name.trim();\n if (account.trim()) body.githubAccount = account.trim();\n }\n if (showLocalFields) {\n if (!path.trim()) {\n setError(\"Local clone path is required.\");\n return;\n }\n body.localPath = path.trim();\n }\n if (mode === \"local\" && localOnly) {\n body.localOnly = true;\n }\n\n try {\n await create.mutateAsync(body);\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to add repository\");\n }\n };\n\n const accountList = accounts?.accounts ?? [];\n\n return (\n <SheetContent className=\"overflow-y-auto\">\n <SheetHeader>\n <SheetTitle>Add repository</SheetTitle>\n <p className=\"text-xs text-muted-foreground\">\n Tell the agent about a code repository to watch. It will track\n activity (commits, PRs, issues) and optionally maintain a project\n document in your context notes.\n </p>\n </SheetHeader>\n <form onSubmit={submit} className=\"mt-6 space-y-6\">\n <div className=\"space-y-2\">\n <label className={FIELD_LABEL}>Where does this repository live?</label>\n <div className=\"grid gap-2\">\n {MODE_OPTIONS.map((option) => {\n const selected = mode === option.value;\n return (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => setMode(option.value)}\n className={\n \"rounded-md border px-3 py-2 text-left transition-colors \" +\n (selected\n ? \"border-primary bg-primary/10\"\n : \"border-border hover:bg-accent\")\n }\n >\n <div\n className={\n \"text-sm font-medium \" +\n (selected ? \"text-primary\" : \"text-foreground\")\n }\n >\n {option.label}\n </div>\n <div className={FIELD_HINT + \" mt-0.5\"}>\n {option.description}\n </div>\n </button>\n );\n })}\n </div>\n </div>\n\n {showGithubFields && (\n <div className=\"space-y-3 rounded-md border bg-background/40 p-3\">\n <div className=\"space-y-1\">\n <p className={SECTION_TITLE}>GitHub remote</p>\n <p className={FIELD_HINT}>\n From the GitHub URL{\" \"}\n <code className=\"rounded bg-muted px-1 py-px text-[10px]\">\n github.com/acme/widgets\n </code>\n , the owner is <strong>acme</strong> and the repository is{\" \"}\n <strong>widgets</strong>.\n </p>\n </div>\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Owner (user or org)</label>\n <Input\n value={owner}\n onChange={(e) => setOwner(e.target.value)}\n placeholder=\"acme\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Repository name</label>\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"widgets\"\n />\n </div>\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>GitHub account to use</label>\n <select\n value={account}\n onChange={(e) => setAccount(e.target.value)}\n className=\"h-9 w-full rounded-md border bg-background px-2 text-sm\"\n >\n <option value=\"\">default</option>\n {accountList.map((a) => (\n <option key={a.alias} value={a.alias}>\n {a.alias}\n </option>\n ))}\n </select>\n <p className={FIELD_HINT}>\n Which set of GitHub credentials the agent should use to read\n this repo.{\" \"}\n {accountList.length === 0\n ? \"Only the default account is set up — manage more under Connections → GitHub accounts.\"\n : \"Manage accounts under Connections → GitHub accounts.\"}\n </p>\n </div>\n </div>\n )}\n\n {showLocalFields && (\n <div className=\"space-y-3 rounded-md border bg-background/40 p-3\">\n <div className=\"space-y-1\">\n <p className={SECTION_TITLE}>Local clone</p>\n <p className={FIELD_HINT}>\n Folder on this Mac where the repo is checked out. The agent\n reads source files, commits, and uncommitted changes from\n here.\n </p>\n </div>\n <DirectoryPickerField\n value={path}\n onChange={setPath}\n title=\"Choose local clone directory\"\n />\n {showLocalOnlyToggle && (\n <label className=\"flex items-start gap-2 text-xs text-muted-foreground\">\n <input\n type=\"checkbox\"\n checked={localOnly}\n onChange={(e) => setLocalOnly(e.target.checked)}\n className=\"mt-0.5\"\n />\n <span>\n This folder is not (and will never be) backed by a GitHub\n remote. Skip GitHub linking permanently.\n </span>\n </label>\n )}\n </div>\n )}\n\n <div className=\"space-y-3 rounded-md border bg-background/40 p-3\">\n <p className={SECTION_TITLE}>Naming & tracking</p>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Display name (optional)</label>\n <Input\n value={displayName}\n onChange={(e) => setDisplayName(e.target.value)}\n placeholder=\"Leave blank to use the repo or folder name\"\n />\n <p className={FIELD_HINT}>\n How this repository appears in the dashboard and in your\n context notes.\n </p>\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>How should the agent treat this?</label>\n <div className=\"grid gap-2\">\n {CLASSIFICATION_OPTIONS.map((option) => {\n const selected = classification === option.value;\n return (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => setClassification(option.value)}\n className={\n \"rounded-md border px-3 py-2 text-left transition-colors \" +\n (selected\n ? \"border-primary bg-primary/10\"\n : \"border-border hover:bg-accent\")\n }\n >\n <div\n className={\n \"text-sm font-medium \" +\n (selected ? \"text-primary\" : \"text-foreground\")\n }\n >\n {option.label}\n </div>\n <div className={FIELD_HINT + \" mt-0.5\"}>\n {option.description}\n </div>\n </button>\n );\n })}\n </div>\n </div>\n <div className=\"space-y-1.5\">\n <label className={FIELD_LABEL}>Category (tag)</label>\n <select\n value={category}\n onChange={(e) =>\n setCategory(e.target.value as RepositoryCategory)\n }\n className=\"h-9 w-full rounded-md border bg-background px-2 text-sm\"\n >\n {CATEGORIES.map((c) => (\n <option key={c} value={c}>\n {c}\n </option>\n ))}\n </select>\n <p className={FIELD_HINT}>\n Used to group repositories in the dashboard. Pick whichever\n feels right.\n </p>\n </div>\n </div>\n\n {error && (\n <p className=\"rounded-md border border-red-200 bg-red-50/50 p-2 text-xs text-red-700 dark:border-red-900 dark:bg-red-950/30 dark:text-red-300\">\n {error}\n </p>\n )}\n\n <div className=\"flex items-center justify-end gap-2 border-t pt-4\">\n <Button type=\"button\" variant=\"ghost\" onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={create.isPending}>\n {create.isPending ? \"Adding…\" : \"Add repository\"}\n </Button>\n </div>\n </form>\n </SheetContent>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { GitBranch, Plus } from \"lucide-react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card } from \"@/components/ui/card\";\nimport { EmptyState } from \"@/components/shared/empty-state\";\nimport { ConnectionsSectionHeader } from \"@/components/connections/section-header\";\nimport { GitAccountsCard } from \"@/components/connections/git-accounts-card\";\nimport { GitTemplatesCard } from \"@/components/connections/git-templates-card\";\nimport { TaskFlowOverridesCard } from \"@/components/connections/task-flow-overrides-card\";\nimport { ProcessModelCard } from \"@/components/connections/process-model-card\";\nimport { IntegrationCard } from \"@/components/connections/integration-card\";\nimport { RepositoryCard } from \"@/components/connections/repository-card\";\nimport { AddRepositorySheet } from \"@/components/connections/add-repository-sheet\";\nimport { useRepositories } from \"@/lib/hooks/use-repositories\";\nimport { useHealth } from \"@/lib/hooks/use-health\";\n\nexport default function RepositoriesConnectionsPage() {\n const repos = useRepositories();\n const { data: health, isLoading: healthLoading } = useHealth();\n const [adding, setAdding] = useState(false);\n\n const items = repos.data?.repositories ?? [];\n const total = items.length;\n const githubLinked = items.filter(\n (r) => r.githubOwner && r.githubRepo,\n ).length;\n const localLinked = items.filter((r) => r.localPath).length;\n\n const loading = repos.isLoading || healthLoading;\n const disconnected = !loading && (!repos.data || !health);\n\n return (\n <>\n <ConnectionsSectionHeader\n title=\"Repositories\"\n description=\"Each repository pairs an optional GitHub remote and an optional local clone. Configure polling, triggers, and daily git management on the my life › git page.\"\n healthy={total > 0 ? 1 : 0}\n total={1}\n actions={\n <Button onClick={() => setAdding(true)}>\n <Plus className=\"h-4 w-4\" />\n Add repository\n </Button>\n }\n />\n\n {disconnected && (\n <p className=\"text-sm text-muted-foreground\">\n Daemon not connected. Start the daemon to manage repositories.\n </p>\n )}\n\n {!loading && (\n <div className=\"space-y-4\">\n <IntegrationCard integrationKey=\"git\" />\n <IntegrationCard integrationKey=\"github\" />\n\n {items.length === 0 ? (\n <EmptyState\n icon={GitBranch}\n title=\"No repositories registered\"\n description=\"Add a repository to start watching commits, polling GitHub events, and wiring per-repo triggers.\"\n >\n <Button className=\"mt-4\" onClick={() => setAdding(true)}>\n <Plus className=\"h-4 w-4\" />\n Add your first repository\n </Button>\n </EmptyState>\n ) : (\n <>\n <Card className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>\n {total} repositor{total === 1 ? \"y\" : \"ies\"} ·{\" \"}\n {githubLinked} with GitHub · {localLinked} with local clone\n </span>\n </Card>\n <div className=\"space-y-3\">\n {items.map((repo) => (\n <RepositoryCard key={repo.id} repo={repo} />\n ))}\n </div>\n </>\n )}\n\n <GitAccountsCard />\n <GitTemplatesCard />\n <TaskFlowOverridesCard />\n\n <ProcessModelCard\n processKey=\"git.project.init\"\n title=\"Git Project Init Model\"\n description=\"Generates the initial overview MD when daily git management is first enabled for a repository.\"\n />\n <ProcessModelCard\n processKey=\"git.project.update\"\n title=\"Git Project Update Model\"\n description=\"Runs the daily 24h scan that appends to journal MDs and curates overview sections.\"\n />\n <ProcessModelCard\n processKey=\"git.project.retemplate\"\n title=\"Git Project Re-template Model\"\n description=\"One-shot session that re-conforms existing project documents to the current template body.\"\n />\n </div>\n )}\n\n <AddRepositorySheet open={adding} onClose={() => setAdding(false)} />\n </>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Unlink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/unlink\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 Unlink = createLucideIcon('Unlink', [\n [\n 'path',\n {\n d: 'm18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71',\n key: 'yqzxt4',\n },\n ],\n [\n 'path',\n {\n d: 'm5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71',\n key: '4qinb0',\n },\n ],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '5', key: '1041cp' }],\n ['line', { x1: '2', x2: '5', y1: '8', y2: '8', key: '14m1p5' }],\n ['line', { x1: '16', x2: '16', y1: '19', y2: '22', key: 'rzdirn' }],\n ['line', { x1: '19', x2: '22', y1: '16', y2: '16', key: 'ox905f' }],\n]);\n\nexport default Unlink;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name FileType2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/file-type-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 FileType2 = createLucideIcon('FileType2', [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4', key: '1pf5j1' }],\n ['path', { d: 'M14 2v4a2 2 0 0 0 2 2h4', key: 'tnqrlb' }],\n ['path', { d: 'M2 13v-1h6v1', key: '1dh9dg' }],\n ['path', { d: 'M5 12v6', key: '150t9c' }],\n ['path', { d: 'M4 18h2', key: '1xrofg' }],\n]);\n\nexport default FileType2;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name FilePen\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/file-pen\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 FilePen = createLucideIcon('FilePen', [\n ['path', { d: 'M12.5 22H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v9.5', key: '1couwa' }],\n ['path', { d: 'M14 2v4a2 2 0 0 0 2 2h4', key: 'tnqrlb' }],\n [\n 'path',\n {\n d: 'M13.378 15.626a1 1 0 1 0-3.004-3.004l-5.01 5.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z',\n key: '1y4qbx',\n },\n ],\n]);\n\nexport default FilePen;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Github\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/github\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 * @deprecated Brand icons have been deprecated and are due to be removed, please refer to https://github.com/lucide-icons/lucide/issues/670. We recommend using https://simpleicons.org/?q=github instead. This icon will be removed in v1.0\n */\nconst Github = createLucideIcon('Github', [\n [\n 'path',\n {\n d: 'M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4',\n key: 'tonef',\n },\n ],\n ['path', { d: 'M9 18c-4.51 2-5-2-7-2', key: '9comsn' }],\n]);\n\nexport default Github;\n","import type {\n GitTemplateKind,\n RetemplateFileEntry,\n RetemplateFileStatus,\n RetemplateRunStatus,\n RetemplateStatusRecord,\n} from \"@/lib/hooks/use-git-templates\";\n\n/**\n * Pure logic for the Templates card so the multi-state grid + warning\n * copy can be unit-tested without React.\n */\n\nexport function templateLabel(kind: GitTemplateKind): string {\n return kind === \"project\"\n ? \"Project (projects/<slug>.md)\"\n : \"Repo-only (git-repos/<slug>.md)\";\n}\n\nexport function templateFileName(kind: GitTemplateKind): string {\n return kind === \"project\" ? \"project.md\" : \"git-repo.md\";\n}\n\nexport interface ApplyWarningCopy {\n title: string;\n bullets: string[];\n acknowledge: string;\n}\n\nexport function buildApplyWarning(\n kind: GitTemplateKind,\n targetCount: number,\n): ApplyWarningCopy {\n const label = templateLabel(kind);\n return {\n title: `Re-template ${targetCount} ${kind === \"project\" ? \"project\" : \"git-repo\"} document${targetCount === 1 ? \"\" : \"s\"}?`,\n bullets: [\n `${label} files will be re-conformed to the current template body.`,\n \"Re-templating may lose information or formatting that the new template does not represent. Files matching the previous schema's sections may have content moved, merged, or dropped depending on how the template changed.\",\n \"Every targeted file is auto-backed up before the run. The backup path is shown after you confirm.\",\n \"If a file's session aborts mid-write, the daemon restores it from backup automatically.\",\n ],\n acknowledge: \"Yes, apply the template\",\n };\n}\n\nexport interface FileGridRow {\n slug: string;\n contextFile: string;\n status: RetemplateFileStatus;\n reason: string | null;\n error: string | null;\n bytesDelta: number | null;\n startedAt: string | null;\n completedAt: string | null;\n}\n\nexport function buildFileGridRows(\n record: RetemplateStatusRecord | null,\n): FileGridRow[] {\n if (!record) return [];\n return Object.values(record.files)\n .map((entry: RetemplateFileEntry) => ({\n slug: entry.slug,\n contextFile: entry.contextFile,\n status: entry.status,\n reason: entry.reason ?? null,\n error: entry.error ?? null,\n bytesDelta:\n entry.beforeBytes !== undefined && entry.afterBytes !== undefined\n ? entry.afterBytes - entry.beforeBytes\n : null,\n startedAt: entry.startedAt ?? null,\n completedAt: entry.completedAt ?? null,\n }))\n .sort((a, b) => a.slug.localeCompare(b.slug));\n}\n\nexport function gridStatusCounts(\n rows: FileGridRow[],\n): Record<RetemplateFileStatus, number> {\n const counts: Record<RetemplateFileStatus, number> = {\n pending: 0,\n started: 0,\n completed: 0,\n skipped: 0,\n failed: 0,\n rolled_back: 0,\n };\n for (const row of rows) counts[row.status] += 1;\n return counts;\n}\n\nexport function runHeadline(\n record: RetemplateStatusRecord | null,\n): { label: string; tone: \"info\" | \"success\" | \"warning\" | \"error\" } | null {\n if (!record) return null;\n if (!record.finalizedAt) {\n return { label: \"Re-template in progress…\", tone: \"info\" };\n }\n switch (record.finalStatus as RetemplateRunStatus) {\n case \"success\":\n return { label: \"Re-template completed\", tone: \"success\" };\n case \"partial\":\n return { label: \"Re-template completed with rollbacks\", tone: \"warning\" };\n case \"failed\":\n return { label: \"Re-template failed\", tone: \"error\" };\n default:\n return { label: \"Re-template completed\", tone: \"success\" };\n }\n}\n"],"names":["QUERY_KEY","useGitAccounts","queryKey","queryFn","get","staleTime","qc","mutationFn","useUpsertGitAccount","alias","payload","onSuccess","put","invalidateQueries","useDeleteGitAccount","delete","useProbeGitAccount","post"],"mappings":"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","ignoreList":[9,10,11,12]}
|