viba-cli 0.37.0 → 0.39.0
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 +18 -0
- package/.next/build-manifest.json +7 -6
- package/.next/fallback-build-manifest.json +2 -2
- package/.next/prerender-manifest.json +123 -3
- package/.next/routes-manifest.json +108 -0
- package/.next/server/app/_global-error/page/build-manifest.json +5 -4
- package/.next/server/app/_global-error/page.js +1 -1
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +2 -2
- 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/build-manifest.json +5 -4
- package/.next/server/app/_not-found/page.js +2 -2
- 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 +2 -2
- package/.next/server/app/_not-found.rsc +18 -16
- package/.next/server/app/_not-found.segments/_full.segment.rsc +18 -16
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +6 -4
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -2
- package/.next/server/app/api/component-source/resolve/route.js +1 -1
- package/.next/server/app/api/component-source/resolve/route.js.nft.json +1 -1
- package/.next/server/app/api/credentials/github/repos/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/credentials/github/repos/route/build-manifest.json +11 -0
- package/.next/server/app/api/credentials/github/repos/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/credentials/github/repos/route.js +8 -0
- package/.next/server/app/api/credentials/github/repos/route.js.map +5 -0
- package/.next/server/app/api/credentials/github/repos/route.js.nft.json +1 -0
- package/.next/server/app/api/credentials/github/repos/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/credentials/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/credentials/route/build-manifest.json +11 -0
- package/.next/server/app/api/credentials/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/credentials/route.js +8 -0
- package/.next/server/app/api/credentials/route.js.map +5 -0
- package/.next/server/app/api/credentials/route.js.nft.json +1 -0
- package/.next/server/app/api/credentials/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/custom-scripts/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/custom-scripts/route/build-manifest.json +11 -0
- package/.next/server/app/api/custom-scripts/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/custom-scripts/route.js +10 -0
- package/.next/server/app/api/custom-scripts/route.js.map +5 -0
- package/.next/server/app/api/custom-scripts/route.js.nft.json +1 -0
- package/.next/server/app/api/custom-scripts/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/file-thumbnail/route.js +1 -1
- package/.next/server/app/api/file-thumbnail/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/open/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/fs/open/route/build-manifest.json +11 -0
- package/.next/server/app/api/fs/open/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/fs/open/route.js +8 -0
- package/.next/server/app/api/fs/open/route.js.map +5 -0
- package/.next/server/app/api/fs/open/route.js.nft.json +1 -0
- package/.next/server/app/api/fs/open/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/fs/open-terminal/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/fs/open-terminal/route/build-manifest.json +11 -0
- package/.next/server/app/api/fs/open-terminal/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/fs/open-terminal/route.js +8 -0
- package/.next/server/app/api/fs/open-terminal/route.js.map +5 -0
- package/.next/server/app/api/fs/open-terminal/route.js.nft.json +1 -0
- package/.next/server/app/api/fs/open-terminal/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/git/action/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/git/action/route/build-manifest.json +11 -0
- package/.next/server/app/api/git/action/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/git/action/route.js +10 -0
- package/.next/server/app/api/git/action/route.js.map +5 -0
- package/.next/server/app/api/git/action/route.js.nft.json +1 -0
- package/.next/server/app/api/git/action/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/git/branches/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/git/branches/route/build-manifest.json +11 -0
- package/.next/server/app/api/git/branches/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/git/branches/route.js +10 -0
- package/.next/server/app/api/git/branches/route.js.map +5 -0
- package/.next/server/app/api/git/branches/route.js.nft.json +1 -0
- package/.next/server/app/api/git/branches/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/git/diff/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/git/diff/route/build-manifest.json +11 -0
- package/.next/server/app/api/git/diff/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/git/diff/route.js +9 -0
- package/.next/server/app/api/git/diff/route.js.map +5 -0
- package/.next/server/app/api/git/diff/route.js.nft.json +1 -0
- package/.next/server/app/api/git/diff/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/git/log/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/git/log/route/build-manifest.json +11 -0
- package/.next/server/app/api/git/log/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/git/log/route.js +10 -0
- package/.next/server/app/api/git/log/route.js.map +5 -0
- package/.next/server/app/api/git/log/route.js.nft.json +1 -0
- package/.next/server/app/api/git/log/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/git/status/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/git/status/route/build-manifest.json +11 -0
- package/.next/server/app/api/git/status/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/git/status/route.js +10 -0
- package/.next/server/app/api/git/status/route.js.map +5 -0
- package/.next/server/app/api/git/status/route.js.nft.json +1 -0
- package/.next/server/app/api/git/status/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/preview-proxy/start/route.js +2 -2
- package/.next/server/app/api/preview-proxy/start/route.js.nft.json +1 -1
- package/.next/server/app/api/repos/clone/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/repos/clone/route/build-manifest.json +11 -0
- package/.next/server/app/api/repos/clone/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/repos/clone/route.js +9 -0
- package/.next/server/app/api/repos/clone/route.js.map +5 -0
- package/.next/server/app/api/repos/clone/route.js.nft.json +1 -0
- package/.next/server/app/api/repos/clone/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/repos/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/repos/route/build-manifest.json +11 -0
- package/.next/server/app/api/repos/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/repos/route.js +9 -0
- package/.next/server/app/api/repos/route.js.map +5 -0
- package/.next/server/app/api/repos/route.js.nft.json +1 -0
- package/.next/server/app/api/repos/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/settings/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/settings/route/build-manifest.json +11 -0
- package/.next/server/app/api/settings/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/settings/route.js +8 -0
- package/.next/server/app/api/settings/route.js.map +5 -0
- package/.next/server/app/api/settings/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/route_client-reference-manifest.js +2 -0
- package/.next/server/app/credentials/page/build-manifest.json +5 -4
- package/.next/server/app/credentials/page/server-reference-manifest.json +7 -7
- package/.next/server/app/credentials/page.js +4 -3
- package/.next/server/app/credentials/page.js.nft.json +1 -1
- package/.next/server/app/credentials/page_client-reference-manifest.js +1 -1
- package/.next/server/app/credentials.html +2 -2
- package/.next/server/app/credentials.rsc +22 -20
- package/.next/server/app/credentials.segments/_full.segment.rsc +22 -20
- package/.next/server/app/credentials.segments/_head.segment.rsc +1 -1
- package/.next/server/app/credentials.segments/_index.segment.rsc +6 -4
- package/.next/server/app/credentials.segments/_tree.segment.rsc +3 -2
- package/.next/server/app/credentials.segments/credentials/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/credentials.segments/credentials.segment.rsc +1 -1
- package/.next/server/app/git/changes/page/app-paths-manifest.json +3 -0
- package/.next/server/app/git/changes/page/build-manifest.json +18 -0
- package/.next/server/app/git/changes/page/next-font-manifest.json +11 -0
- package/.next/server/app/git/changes/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/git/changes/page/server-reference-manifest.json +4 -0
- package/.next/server/app/git/changes/page.js +18 -0
- package/.next/server/app/git/changes/page.js.map +5 -0
- package/.next/server/app/git/changes/page.js.nft.json +1 -0
- package/.next/server/app/git/changes/page_client-reference-manifest.js +2 -0
- package/.next/server/app/git/changes.html +54 -0
- package/.next/server/app/git/changes.meta +16 -0
- package/.next/server/app/git/changes.rsc +83 -0
- package/.next/server/app/git/changes.segments/_full.segment.rsc +83 -0
- package/.next/server/app/git/changes.segments/_head.segment.rsc +6 -0
- package/.next/server/app/git/changes.segments/_index.segment.rsc +61 -0
- package/.next/server/app/git/changes.segments/_tree.segment.rsc +7 -0
- package/.next/server/app/git/changes.segments/git/changes/__PAGE__.segment.rsc +10 -0
- package/.next/server/app/git/changes.segments/git/changes.segment.rsc +4 -0
- package/.next/server/app/git/changes.segments/git.segment.rsc +7 -0
- package/.next/server/app/git/custom-scripts/page/app-paths-manifest.json +3 -0
- package/.next/server/app/git/custom-scripts/page/build-manifest.json +18 -0
- package/.next/server/app/git/custom-scripts/page/next-font-manifest.json +11 -0
- package/.next/server/app/git/custom-scripts/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/git/custom-scripts/page/server-reference-manifest.json +4 -0
- package/.next/server/app/git/custom-scripts/page.js +18 -0
- package/.next/server/app/git/custom-scripts/page.js.map +5 -0
- package/.next/server/app/git/custom-scripts/page.js.nft.json +1 -0
- package/.next/server/app/git/custom-scripts/page_client-reference-manifest.js +2 -0
- package/.next/server/app/git/custom-scripts.html +54 -0
- package/.next/server/app/git/custom-scripts.meta +16 -0
- package/.next/server/app/git/custom-scripts.rsc +82 -0
- package/.next/server/app/git/custom-scripts.segments/_full.segment.rsc +82 -0
- package/.next/server/app/git/custom-scripts.segments/_head.segment.rsc +6 -0
- package/.next/server/app/git/custom-scripts.segments/_index.segment.rsc +61 -0
- package/.next/server/app/git/custom-scripts.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/git/custom-scripts.segments/git/custom-scripts/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/git/custom-scripts.segments/git/custom-scripts.segment.rsc +4 -0
- package/.next/server/app/git/custom-scripts.segments/git.segment.rsc +7 -0
- package/.next/server/app/git/history/page/app-paths-manifest.json +3 -0
- package/.next/server/app/git/history/page/build-manifest.json +18 -0
- package/.next/server/app/git/history/page/next-font-manifest.json +11 -0
- package/.next/server/app/git/history/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/git/history/page/server-reference-manifest.json +4 -0
- package/.next/server/app/git/history/page.js +18 -0
- package/.next/server/app/git/history/page.js.map +5 -0
- package/.next/server/app/git/history/page.js.nft.json +1 -0
- package/.next/server/app/git/history/page_client-reference-manifest.js +2 -0
- package/.next/server/app/git/history.html +54 -0
- package/.next/server/app/git/history.meta +16 -0
- package/.next/server/app/git/history.rsc +83 -0
- package/.next/server/app/git/history.segments/_full.segment.rsc +83 -0
- package/.next/server/app/git/history.segments/_head.segment.rsc +6 -0
- package/.next/server/app/git/history.segments/_index.segment.rsc +61 -0
- package/.next/server/app/git/history.segments/_tree.segment.rsc +7 -0
- package/.next/server/app/git/history.segments/git/history/__PAGE__.segment.rsc +10 -0
- package/.next/server/app/git/history.segments/git/history.segment.rsc +4 -0
- package/.next/server/app/git/history.segments/git.segment.rsc +7 -0
- package/.next/server/app/git/page/app-paths-manifest.json +3 -0
- package/.next/server/app/git/page/build-manifest.json +18 -0
- package/.next/server/app/git/page/next-font-manifest.json +11 -0
- package/.next/server/app/git/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/git/page/server-reference-manifest.json +4 -0
- package/.next/server/app/git/page.js +18 -0
- package/.next/server/app/git/page.js.map +5 -0
- package/.next/server/app/git/page.js.nft.json +1 -0
- package/.next/server/app/git/page_client-reference-manifest.js +2 -0
- package/.next/server/app/git/stashes/page/app-paths-manifest.json +3 -0
- package/.next/server/app/git/stashes/page/build-manifest.json +18 -0
- package/.next/server/app/git/stashes/page/next-font-manifest.json +11 -0
- package/.next/server/app/git/stashes/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/git/stashes/page/server-reference-manifest.json +4 -0
- package/.next/server/app/git/stashes/page.js +18 -0
- package/.next/server/app/git/stashes/page.js.map +5 -0
- package/.next/server/app/git/stashes/page.js.nft.json +1 -0
- package/.next/server/app/git/stashes/page_client-reference-manifest.js +2 -0
- package/.next/server/app/git/stashes.html +54 -0
- package/.next/server/app/git/stashes.meta +16 -0
- package/.next/server/app/git/stashes.rsc +83 -0
- package/.next/server/app/git/stashes.segments/_full.segment.rsc +83 -0
- package/.next/server/app/git/stashes.segments/_head.segment.rsc +6 -0
- package/.next/server/app/git/stashes.segments/_index.segment.rsc +61 -0
- package/.next/server/app/git/stashes.segments/_tree.segment.rsc +7 -0
- package/.next/server/app/git/stashes.segments/git/stashes/__PAGE__.segment.rsc +10 -0
- package/.next/server/app/git/stashes.segments/git/stashes.segment.rsc +4 -0
- package/.next/server/app/git/stashes.segments/git.segment.rsc +7 -0
- package/.next/server/app/git.html +54 -0
- package/.next/server/app/git.meta +15 -0
- package/.next/server/app/git.rsc +82 -0
- package/.next/server/app/git.segments/_full.segment.rsc +82 -0
- package/.next/server/app/git.segments/_head.segment.rsc +6 -0
- package/.next/server/app/git.segments/_index.segment.rsc +61 -0
- package/.next/server/app/git.segments/_tree.segment.rsc +7 -0
- package/.next/server/app/git.segments/git/__PAGE__.segment.rsc +10 -0
- package/.next/server/app/git.segments/git.segment.rsc +7 -0
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +21 -19
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/index.segments/_full.segment.rsc +21 -19
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +6 -4
- package/.next/server/app/index.segments/_tree.segment.rsc +3 -2
- package/.next/server/app/new/page/build-manifest.json +5 -4
- package/.next/server/app/new/page/server-reference-manifest.json +29 -29
- package/.next/server/app/new/page.js +5 -5
- package/.next/server/app/new/page.js.nft.json +1 -1
- package/.next/server/app/new/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page/build-manifest.json +5 -4
- package/.next/server/app/page/server-reference-manifest.json +29 -29
- package/.next/server/app/page.js +5 -5
- 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/session/[sessionId]/page/build-manifest.json +5 -4
- package/.next/server/app/session/[sessionId]/page/server-reference-manifest.json +19 -19
- package/.next/server/app/session/[sessionId]/page.js +4 -4
- package/.next/server/app/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/server/app/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +18 -0
- package/.next/server/chunks/[externals]__7ece43c5._.js +3 -0
- package/.next/server/chunks/[externals]_keytar_23140f5c._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__01a6baa7._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__01a6baa7._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__187f37c1._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__187f37c1._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1bf60374._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1bf60374._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__2dcb1454._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__2dcb1454._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__3ffc9919._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__3ffc9919._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__462092c0._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__462092c0._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__597e4f2f._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__597e4f2f._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__7324fe0b._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__7324fe0b._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__7f2f8f49._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__7f2f8f49._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__85af257a._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__85af257a._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__8de57231._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__8de57231._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__9af2c9bf._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__9af2c9bf._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__a0cc36ad._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__a0cc36ad._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__afea2116._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__afea2116._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__b17e6c62._.js +7 -0
- package/.next/server/chunks/[root-of-the-server]__b17e6c62._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__c2ff0bd8._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__c2ff0bd8._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__ceda8fbc._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__ceda8fbc._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__e1b60268._.js +519 -0
- package/.next/server/chunks/[root-of-the-server]__e1b60268._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__ed7be8e0._.js → [root-of-the-server]__e993c1a5._.js} +2 -2
- package/.next/server/chunks/_next-internal_server_app_api_credentials_github_repos_route_actions_29e1f39a.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_credentials_github_repos_route_actions_29e1f39a.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_credentials_route_actions_ec24437f.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_credentials_route_actions_ec24437f.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_custom-scripts_route_actions_895ba0fd.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_custom-scripts_route_actions_895ba0fd.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_fs_open-terminal_route_actions_e2201c01.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_fs_open-terminal_route_actions_e2201c01.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_fs_open_route_actions_140e2d00.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_fs_open_route_actions_140e2d00.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_git_action_route_actions_696a03a1.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_git_action_route_actions_696a03a1.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_git_branches_route_actions_716a58c0.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_git_branches_route_actions_716a58c0.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_git_diff_route_actions_7bd2d341.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_git_diff_route_actions_7bd2d341.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_git_log_route_actions_1660bf04.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_git_log_route_actions_1660bf04.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_git_status_route_actions_71f3da53.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_git_status_route_actions_71f3da53.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_repos_clone_route_actions_ef268146.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_repos_clone_route_actions_ef268146.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_repos_route_actions_cd76e461.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_repos_route_actions_cd76e461.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_settings_route_actions_a476013b.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_settings_route_actions_a476013b.js.map +1 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0002606b.js +3 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0002606b.js.map +1 -0
- package/.next/server/chunks/node_modules_zod_v4_classic_external_fa90cebf.js +39 -0
- package/.next/server/chunks/node_modules_zod_v4_classic_external_fa90cebf.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__05b3451a._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__05b3451a._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__59834c63._.js → [root-of-the-server]__05e6fb4c._.js} +3 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__05e6fb4c._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__4c388861._.js → [root-of-the-server]__2798aa4d._.js} +3 -3
- package/.next/server/chunks/ssr/{[root-of-the-server]__4c388861._.js.map → [root-of-the-server]__2798aa4d._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__2c252246._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__2c252246._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__3cd44871._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__3cd44871._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__46af1502._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__46af1502._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__52b5581b._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__52b5581b._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__5be652da._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__9f8d4cf6._.js.map → [root-of-the-server]__5be652da._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__5e499636._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__5e499636._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__6afa74ac._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__6afa74ac._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__79a7a15d._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__79a7a15d._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__96a8b4aa._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__012c2bdd._.js.map → [root-of-the-server]__96a8b4aa._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__9a619a34._.js +56 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__9a619a34._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__ab761bdf._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__ab761bdf._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__b77b4157._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__b77b4157._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__d45abc45._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__d45abc45._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__e86a1b81._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__7cd07782._.js.map → [root-of-the-server]__e86a1b81._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__e8b7f48a._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__e8b7f48a._.js.map +1 -0
- package/.next/server/chunks/ssr/_439918bb._.js +3 -0
- package/.next/server/chunks/ssr/_439918bb._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__0522f852._.js → _476e86d1._.js} +3 -3
- package/.next/server/chunks/ssr/_476e86d1._.js.map +1 -0
- package/.next/server/chunks/ssr/_4a66db4a._.js +3 -0
- package/.next/server/chunks/ssr/_4a66db4a._.js.map +1 -0
- package/.next/server/chunks/ssr/_4d07d45e._.js +3 -0
- package/.next/server/chunks/ssr/_4d07d45e._.js.map +1 -0
- package/.next/server/chunks/ssr/_5147763c._.js +3 -0
- package/.next/server/chunks/ssr/_5147763c._.js.map +1 -0
- package/.next/server/chunks/ssr/_57f63a65._.js +3 -0
- package/.next/server/chunks/ssr/_57f63a65._.js.map +1 -0
- package/.next/server/chunks/ssr/_707e5fab._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__9201693f._.js.map → _707e5fab._.js.map} +1 -1
- package/.next/server/chunks/ssr/_85a742de._.js +4 -0
- package/.next/server/chunks/ssr/_85a742de._.js.map +1 -0
- package/.next/server/chunks/ssr/_8d41d1fd._.js +3 -0
- package/.next/server/chunks/ssr/_8d41d1fd._.js.map +1 -0
- package/.next/server/chunks/ssr/_9493de08._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__352d2b3c._.js.map → _9493de08._.js.map} +1 -1
- package/.next/server/chunks/ssr/_9769f5e5._.js +4 -0
- package/.next/server/chunks/ssr/_9769f5e5._.js.map +1 -0
- package/.next/server/chunks/ssr/_9a7bd3c8._.js +3 -0
- package/.next/server/chunks/ssr/_9a7bd3c8._.js.map +1 -0
- package/.next/server/chunks/ssr/_a7a8132a._.js +4 -0
- package/.next/server/chunks/ssr/_a7a8132a._.js.map +1 -0
- package/.next/server/chunks/ssr/_df00ee4d._.js +4 -0
- package/.next/server/chunks/ssr/_df00ee4d._.js.map +1 -0
- package/.next/server/chunks/ssr/_fc027e1f._.js +4 -0
- package/.next/server/chunks/ssr/_fc027e1f._.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_git_changes_page_actions_6b75ad0c.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_git_changes_page_actions_6b75ad0c.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_git_custom-scripts_page_actions_c3e2453e.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_git_custom-scripts_page_actions_c3e2453e.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_git_history_page_actions_9e9b26bc.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_git_history_page_actions_9e9b26bc.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_git_page_actions_511f286b.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_git_page_actions_511f286b.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_git_stashes_page_actions_44843274.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_git_stashes_page_actions_44843274.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_3e692bb2._.js +5 -0
- package/.next/server/chunks/ssr/node_modules_3e692bb2._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_50fa454f._.js +5 -0
- package/.next/server/chunks/ssr/node_modules_50fa454f._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_8e38eac2._.js +5 -0
- package/.next/server/chunks/ssr/node_modules_8e38eac2._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_bf7b09f8._.js +5 -0
- package/.next/server/chunks/ssr/node_modules_bf7b09f8._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_5999d873._.js → node_modules_cf1f3d2c._.js} +2 -4
- package/.next/server/chunks/ssr/node_modules_cf1f3d2c._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0ff44e32._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0ff44e32._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_f6fd30d1._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_f6fd30d1._.js.map +1 -0
- package/.next/server/chunks/ssr/src_408d74ba._.js +3 -0
- package/.next/server/chunks/ssr/src_408d74ba._.js.map +1 -0
- package/.next/server/chunks/ssr/src_49325427._.js +3 -0
- package/.next/server/chunks/ssr/src_49325427._.js.map +1 -0
- package/.next/server/chunks/ssr/src_91238eaa._.js +3 -0
- package/.next/server/chunks/ssr/src_91238eaa._.js.map +1 -0
- package/.next/server/chunks/ssr/src_9994126b._.js +3 -0
- package/.next/server/chunks/ssr/src_9994126b._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_credentials_page_tsx_63d8d34a._.js +1 -1
- package/.next/server/chunks/ssr/src_app_credentials_page_tsx_63d8d34a._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_git_changes_page_tsx_f6dc28dc._.js +5 -0
- package/.next/server/chunks/ssr/src_app_git_changes_page_tsx_f6dc28dc._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_providers_tsx_2ae5be81._.js +3 -0
- package/.next/server/chunks/ssr/src_app_providers_tsx_2ae5be81._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_session_[sessionId]_SessionPageClient_tsx_dab490d7._.js +1 -1
- package/.next/server/chunks/ssr/src_app_session_[sessionId]_SessionPageClient_tsx_dab490d7._.js.map +1 -1
- package/.next/server/chunks/ssr/src_components_GitRepoSelector_tsx_05c81afa._.js +3 -3
- package/.next/server/chunks/ssr/src_components_GitRepoSelector_tsx_05c81afa._.js.map +1 -1
- package/.next/server/chunks/ssr/src_components_git_029e6e6f._.js +3 -0
- package/.next/server/chunks/ssr/src_components_git_029e6e6f._.js.map +1 -0
- package/.next/server/chunks/ssr/src_components_git_grouped-diff-viewer_tsx_41b8ab60._.js +20 -0
- package/.next/server/chunks/ssr/src_components_git_grouped-diff-viewer_tsx_41b8ab60._.js.map +1 -0
- package/.next/server/chunks/ssr/src_components_git_history-view_tsx_fd62126a._.js +10 -0
- package/.next/server/chunks/ssr/src_components_git_history-view_tsx_fd62126a._.js.map +1 -0
- package/.next/server/chunks/ssr/src_db5b513b._.js +3 -0
- package/.next/server/chunks/ssr/src_db5b513b._.js.map +1 -0
- package/.next/server/functions-config-manifest.json +3 -0
- package/.next/server/middleware-build-manifest.js +5 -4
- package/.next/server/next-font-manifest.js +1 -1
- package/.next/server/next-font-manifest.json +20 -0
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +2 -2
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +48 -48
- package/.next/static/chunks/068649e8eb29b8d9.js +2 -0
- package/.next/static/chunks/0ce2e7006253186a.js +9 -0
- package/.next/static/chunks/0f9834bd2f6f4c6e.js +3 -0
- package/.next/static/chunks/1958a10518af04a4.js +1 -0
- package/.next/static/chunks/3205a3bbc11c3146.css +1 -0
- package/.next/static/chunks/369aa92811a706db.js +3 -0
- package/.next/static/chunks/4aab1f3ea2ed1aef.js +1 -0
- package/.next/static/chunks/4cabe8a0df24e6d1.js +1 -0
- package/.next/static/chunks/5d6988fe9dd191e1.js +1 -0
- package/.next/static/chunks/5e0dada5236f9065.js +8 -0
- package/.next/static/chunks/73b3e447914a757b.js +1 -0
- package/.next/static/chunks/73c13373731456db.js +1 -0
- package/.next/static/chunks/76c064224d953678.js +4 -0
- package/.next/static/chunks/977137e155012c13.js +1 -0
- package/.next/static/chunks/b18cc1247b979318.js +1 -0
- package/.next/static/chunks/b4077ef0304a2ff4.js +18 -0
- package/.next/static/chunks/b926978a88c43bac.js +3 -0
- package/.next/static/chunks/c1a983df0a5e5f3a.css +1 -0
- package/.next/static/chunks/c7c82526da1ea165.js +1 -0
- package/.next/static/chunks/d09578ecf3b80b9d.js +3 -0
- package/.next/static/chunks/d85a06040ea88b62.js +1 -0
- package/.next/static/chunks/f7914ab5db08b8dd.js +3 -0
- package/.next/static/chunks/fa9e48c3aa7e4365.js +1 -0
- package/.next/static/chunks/turbopack-e9cbd31f7b697763.js +4 -0
- package/package.json +4 -1
- package/.next/server/chunks/[externals]__6f5f63a1._.js +0 -3
- package/.next/server/chunks/[externals]__ad3eabe7._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1368fab8._.js +0 -519
- package/.next/server/chunks/[root-of-the-server]__1368fab8._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__012c2bdd._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__03608b11._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__03608b11._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0522f852._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__11fa4345._.js +0 -56
- package/.next/server/chunks/ssr/[root-of-the-server]__11fa4345._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__352d2b3c._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__59834c63._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__5afb130a._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__5afb130a._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__7cd07782._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__90f3f366._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__90f3f366._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__9201693f._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__9f8d4cf6._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__addaed13._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__addaed13._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__ebb382fb._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__ebb382fb._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__f493cc72._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__f493cc72._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__f56dd853._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__f56dd853._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__ff79e2be._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__ff79e2be._.js.map +0 -1
- package/.next/server/chunks/ssr/_7ce14682._.js +0 -3
- package/.next/server/chunks/ssr/_7ce14682._.js.map +0 -1
- package/.next/server/chunks/ssr/_c4899d4c._.js +0 -3
- package/.next/server/chunks/ssr/_c4899d4c._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_04e0be7d._.js +0 -8
- package/.next/server/chunks/ssr/node_modules_04e0be7d._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_358ee037._.js +0 -8
- package/.next/server/chunks/ssr/node_modules_358ee037._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_5999d873._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_a8dcdfed._.js +0 -8
- package/.next/server/chunks/ssr/node_modules_a8dcdfed._.js.map +0 -1
- package/.next/static/chunks/0b5678df432c3623.js +0 -4
- package/.next/static/chunks/0dfa5be743492ce2.js +0 -2
- package/.next/static/chunks/1084ea77114042eb.css +0 -1
- package/.next/static/chunks/2f4149693b1e0875.js +0 -3
- package/.next/static/chunks/3856bc9dcb46c1fd.js +0 -3
- package/.next/static/chunks/a4f4322edc25e6b4.js +0 -3
- package/.next/static/chunks/a5ee8f49aed07f5b.js +0 -9
- package/.next/static/chunks/b77fa77a013ad38a.js +0 -1
- package/.next/static/chunks/cfb8404eba3fd259.js +0 -1
- package/.next/static/chunks/f10df459d17d0aff.js +0 -3
- package/.next/static/chunks/turbopack-18722873613a4289.js +0 -4
- /package/.next/server/chunks/{[externals]__6f5f63a1._.js.map → [externals]__7ece43c5._.js.map} +0 -0
- /package/.next/server/chunks/{[externals]__ad3eabe7._.js.map → [externals]_keytar_23140f5c._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__ed7be8e0._.js.map → [root-of-the-server]__e993c1a5._.js.map} +0 -0
- /package/.next/static/{qoMjwwKLHSCKURVHnc41W → gMV0bFe8zKqVaStUpkI04}/_buildManifest.js +0 -0
- /package/.next/static/{qoMjwwKLHSCKURVHnc41W → gMV0bFe8zKqVaStUpkI04}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{qoMjwwKLHSCKURVHnc41W → gMV0bFe8zKqVaStUpkI04}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[39018,20601,a=>{"use strict";var b=a.i(5050);let c=(0,b.createServerReference)("00f8d9271ab0088f183a1494ee1e57a9c9bf395836",b.callServer,void 0,b.findSourceMapURL,"getConfig");a.s(["getConfig",()=>c],39018);let d=(0,b.createServerReference)("40839453baab94a23bf39433a552dbe7f519a44449",b.callServer,void 0,b.findSourceMapURL,"updateConfig");a.s(["updateConfig",()=>d],20601)},52495,10948,a=>{"use strict";var b=a.i(70106);let c=(0,b.default)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);a.s(["ExternalLink",()=>c],52495);let d=(0,b.default)("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);a.s(["GitBranch",()=>d],10948)},5784,a=>{"use strict";let b=(0,a.i(70106).default)("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);a.s(["ChevronDown",()=>b],5784)},15618,a=>{"use strict";let b=(0,a.i(70106).default)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);a.s(["Plus",()=>b],15618)},210,a=>{"use strict";let b=(0,a.i(70106).default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);a.s(["ArrowLeft",()=>b],210)},33508,a=>{"use strict";let b=(0,a.i(70106).default)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);a.s(["X",()=>b],33508)},93105,a=>{"use strict";var b=a.i(5050);let c=(0,b.createServerReference)("003f59d9b072ba439a66065346d259ab83d25d897d",b.callServer,void 0,b.findSourceMapURL,"getHomeDirectory");a.s(["getHomeDirectory",()=>c])},41317,71300,92106,4720,a=>{"use strict";var b=a.i(5050);let c=(0,b.createServerReference)("40cd192901c59313dcda53d8937596378060397f11",b.callServer,void 0,b.findSourceMapURL,"listPathEntries");a.s(["listPathEntries",()=>c],41317);let d=(0,b.createServerReference)("7f8d431455c1da2fbe5358c50ae9b8c5259dd93aca",b.callServer,void 0,b.findSourceMapURL,"saveAttachments");a.s(["saveAttachments",()=>d],71300);var e=a.i(70106);let f=(0,e.default)("clipboard",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}]]);a.s(["Clipboard",()=>f],92106);let g=(0,e.default)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);a.s(["FileText",()=>g],4720)},92596,a=>{"use strict";let b=(0,a.i(70106).default)("folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);a.s(["Folder",()=>b],92596)},996,60087,67329,1239,58988,a=>{"use strict";var b=a.i(70106);let c=(0,b.default)("grid-2x2",[["path",{d:"M12 3v18",key:"108xh3"}],["path",{d:"M3 12h18",key:"1i2n21"}],["rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",key:"h1oib"}]]);a.s(["Grid2x2",()=>c],996);let d=(0,b.default)("house",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"r6nss1"}]]);a.s(["House",()=>d],60087);let e=(0,b.default)("list",[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]]);a.s(["List",()=>e],67329);let f=(0,b.default)("pin",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]]);a.s(["Pin",()=>f],1239);let g=(0,b.default)("pin-off",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89",key:"znwnzq"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11",key:"c9qhm2"}]]);a.s(["PinOff",()=>g],58988)},11431,94659,a=>{"use strict";function b(a){return a&&a.replace(/\\/g,"/").split("/").filter(Boolean).pop()||""}function c(a){if(!a)return"";let b=a.replace(/\\/g,"/"),c=b.length>1&&b.endsWith("/")?b.slice(0,-1):b,d=c.lastIndexOf("/");return -1===d?a.includes(":")&&a.length<=3?b:".":0===d?"/":a.includes(":")&&2===d?c.substring(0,3):c.substring(0,d)}function d(a){return/^[a-zA-Z]:[\\/]/.test(a)}a.s(["getBaseName",()=>b,"getDirName",()=>c,"isWindowsAbsolutePath",()=>d],11431);var e=a.i(72131);function f({enabled:a=!0,onConfirm:b,onDismiss:c,canConfirm:d=!0}){(0,e.useEffect)(()=>{if(!a)return;let e=a=>{if("Escape"===a.key){a.preventDefault(),c();return}"Enter"!==a.key||!b||!d||a.defaultPrevented||a.metaKey||a.ctrlKey||a.altKey||a.shiftKey||(a=>{if(!(a instanceof HTMLElement))return!1;let b=a.tagName.toUpperCase();return"INPUT"===b||"TEXTAREA"===b||"SELECT"===b||a.isContentEditable})(a.target)||(a.preventDefault(),b())};return window.addEventListener("keydown",e),()=>{window.removeEventListener("keydown",e)}},[a,b,c,d])}a.s(["useDialogKeyboardShortcuts",()=>f],94659)},64724,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(71987),e=a.i(93105),f=a.i(41317),g=a.i(71300),h=a.i(39018),i=a.i(20601),j=a.i(210),k=a.i(92106),l=a.i(4720),m=a.i(92596),n=a.i(996),o=a.i(60087),p=a.i(67329),q=a.i(1239),r=a.i(58988),s=a.i(11431),t=a.i(94659);let u="viba:session-file-browser:view-mode";function v({initialPath:a,worktreePath:v,onConfirm:w,onCancel:x,onPathChange:y}){let z=(0,c.useMemo)(()=>new Set([".png",".jpg",".jpeg",".gif",".webp",".bmp",".svg",".ico",".avif"]),[]),[A,B]=(0,c.useState)(""),[C,D]=(0,c.useState)([]),[E,F]=(0,c.useState)(!1),[G,H]=(0,c.useState)(null),[I,J]=(0,c.useState)(""),[K,L]=(0,c.useState)([]),[M,N]=(0,c.useState)(null),[O,P]=(0,c.useState)("list"),[Q,R]=(0,c.useState)(!1),[S,T]=(0,c.useState)({}),[U,V]=(0,c.useState)([]);(0,c.useEffect)(()=>{let b=!0;return(async()=>{try{let c=await (0,e.getHomeDirectory)();if(!b)return;J(c),a||B(c)}catch(a){console.error("Failed to resolve home directory:",a)}a&&b&&B(a)})(),()=>{b=!1}},[a]),(0,c.useEffect)(()=>{let a=!0;return(async()=>{try{let b=await (0,h.getConfig)();if(!a)return;let c=Array.isArray(b.pinnedFolderShortcuts)?b.pinnedFolderShortcuts.filter(a=>"string"==typeof a&&a.trim().length>0):[];V(Array.from(new Set(c)))}catch(a){console.error("Failed to load pinned folder shortcuts:",a)}})(),()=>{a=!1}},[]),(0,c.useEffect)(()=>{try{let a=localStorage.getItem(u);("list"===a||"grid"===a)&&P(a)}catch{}finally{R(!0)}},[]),(0,c.useEffect)(()=>{if(Q)try{localStorage.setItem(u,O)}catch{}},[Q,O]),(0,c.useEffect)(()=>{A&&(async()=>{F(!0),H(null);try{let a=await (0,f.listPathEntries)(A);D(a)}catch(a){console.error("Failed to list files:",a),H("Failed to load directory contents")}finally{F(!1)}})()},[A]),(0,c.useEffect)(()=>{A&&y?.(A)},[A,y]),(0,c.useEffect)(()=>{L([]),N(null),T({})},[A]);let W=(0,c.useMemo)(()=>new Set(K),[K]),X=(a,b,c)=>{if(a.isDirectory)return void B(a.path);let d=c.metaKey||c.ctrlKey;if(c.shiftKey&&null!==M){let a=Math.min(M,b),c=Math.max(M,b);L(C.slice(a,c+1).filter(a=>!a.isDirectory).map(a=>a.path));return}if(d){L(b=>b.includes(a.path)?b.filter(b=>b!==a.path):[...b,a.path]),N(b);return}L([a.path]),N(b)},Y=async()=>{if(H(null),!v)return void H("Cannot paste: Session worktree path is missing.");try{if(F(!0),!navigator.clipboard||!navigator.clipboard.read)throw Error("Clipboard API not supported in this browser");let a=await navigator.clipboard.read(),b=new FormData,c=!1;for(let d of a)for(let a of d.types)if(a.startsWith("image/")){let e=await d.getType(a),f=a.split("/")[1]||"png",g=`pasted-image-${Date.now()}.${f}`,h=new File([e],g,{type:a});b.append(g,h),c=!0;break}if(c){let a=await (0,g.saveAttachments)(v,b);if(a&&a.length>0)return void await w(a);H("Failed to save pasted files.")}else try{let a=await navigator.clipboard.readText();a&&a.trim().startsWith("/")?H("No file content found in clipboard. Copy an image or file first."):H("No file content found in clipboard.")}catch{H("No file content found in clipboard.")}}catch(b){let a=b instanceof Error?b.message:String(b);console.error("Paste error:",b),H(`Failed to read from clipboard: ${a}`)}finally{F(!1)}},Z=async a=>{V(a);try{await (0,i.updateConfig)({pinnedFolderShortcuts:a})}catch(a){console.error("Failed to save pinned folder shortcuts:",a),H("Failed to save pinned shortcuts")}},$=async a=>{(H(null),U.includes(a))?await Z(U.filter(b=>b!==a)):await Z([...U,a])},_=(0,c.useCallback)(async()=>{0!==K.length&&await w(K)},[w,K]);return(0,t.useDialogKeyboardShortcuts)({onConfirm:_,onDismiss:x,canConfirm:K.length>0}),(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm p-4",children:(0,b.jsxs)("div",{className:"bg-base-200 rounded-lg shadow-xl w-full max-w-5xl h-[82vh] flex flex-col",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between p-4 border-b border-base-300",children:[(0,b.jsxs)("h2",{className:"text-xl font-bold flex items-center gap-2",children:[(0,b.jsx)(m.Folder,{className:"w-5 h-5"}),"Browse Files"]}),(0,b.jsx)("button",{onClick:x,className:"btn btn-sm btn-ghost btn-circle",title:"Close file browser",children:"✕"})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 p-3 bg-base-300",children:[(0,b.jsx)("button",{onClick:()=>{let a=(0,s.getDirName)(A);a&&a!==A&&B(a)},className:"btn btn-sm btn-square btn-ghost",title:"Go Up",disabled:"/"===A||!A,children:(0,b.jsx)(j.ArrowLeft,{className:"w-4 h-4"})}),(0,b.jsxs)("button",{onClick:()=>{I&&A!==I&&B(I)},className:"btn btn-sm btn-ghost gap-1",title:I?`Go to Home Folder (${I})`:"Go to Home Folder",disabled:!I||A===I,children:[(0,b.jsx)(o.House,{className:"w-4 h-4"}),"Home"]}),(0,b.jsx)("div",{className:"flex-1 overflow-x-auto whitespace-nowrap px-2 font-mono text-sm",children:A}),(0,b.jsxs)("div",{className:"join",children:[(0,b.jsx)("button",{type:"button",onClick:()=>P("list"),className:`btn btn-sm join-item ${"list"===O?"btn-active":"btn-ghost"}`,title:"List view",children:(0,b.jsx)(p.List,{className:"w-4 h-4"})}),(0,b.jsx)("button",{type:"button",onClick:()=>P("grid"),className:`btn btn-sm join-item ${"grid"===O?"btn-active":"btn-ghost"}`,title:"Grid view",children:(0,b.jsx)(n.Grid2x2,{className:"w-4 h-4"})})]}),(0,b.jsxs)("button",{onClick:_,className:"btn btn-sm btn-primary gap-2",disabled:0===K.length,title:"Insert selected absolute paths",children:["Insert (",K.length,")"]}),(0,b.jsx)("div",{className:"w-[1px] h-6 bg-base-content/10 mx-1"}),(0,b.jsxs)("button",{onClick:Y,className:"btn btn-sm btn-ghost gap-2",title:"Paste file/image from clipboard",disabled:!v,children:[(0,b.jsx)(k.Clipboard,{className:"w-4 h-4"}),"Paste"]})]}),U.length>0&&(0,b.jsx)("div",{className:"px-3 py-2 border-b border-base-300 bg-base-200/50",children:(0,b.jsx)("div",{className:"flex items-center gap-2 overflow-x-auto",children:U.map(a=>{let c=a===A,d=a.split(/[\\/]/).filter(Boolean).pop()||a;return(0,b.jsxs)("div",{className:"join shrink-0",children:[(0,b.jsxs)("button",{type:"button",className:`btn btn-xs join-item ${c?"btn-primary":"btn-ghost"}`,onClick:()=>B(a),title:a,children:[(0,b.jsx)(m.Folder,{className:"w-3 h-3"}),d]}),(0,b.jsx)("button",{type:"button",className:"btn btn-xs btn-ghost join-item",onClick:()=>void $(a),title:`Unpin ${a}`,children:(0,b.jsx)(r.PinOff,{className:"w-3 h-3"})})]},a)})})}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto p-2",children:E?(0,b.jsx)("div",{className:"flex justify-center items-center h-full",children:(0,b.jsx)("span",{className:"loading loading-spinner loading-lg"})}):G?(0,b.jsx)("div",{className:"alert alert-error",children:G}):0===C.length?(0,b.jsx)("div",{className:"text-center text-base-content/50 mt-10",children:"Empty directory"}):"list"===O?(0,b.jsx)("div",{className:"grid grid-cols-1 gap-1",children:C.map((a,c)=>{let d=W.has(a.path);return(0,b.jsxs)("div",{className:`flex items-center justify-between p-2 rounded-md cursor-pointer transition-colors border ${d?"bg-primary text-primary-content border-primary":"hover:bg-base-100 border-transparent"}`,onClick:b=>X(a,c,b),title:a.path,children:[(0,b.jsxs)("div",{className:"flex items-center gap-3 overflow-hidden",children:[a.isDirectory?(0,b.jsx)(m.Folder,{className:"w-5 h-5 shrink-0"}):(0,b.jsx)(l.FileText,{className:"w-5 h-5 shrink-0"}),(0,b.jsx)("span",{className:"truncate",children:a.name})]}),(0,b.jsx)("span",{className:"text-[10px] opacity-70 shrink-0",children:a.isDirectory?(0,b.jsx)("button",{type:"button",className:"btn btn-ghost btn-xs h-6 min-h-6",onClick:b=>{b.stopPropagation(),$(a.path)},title:U.includes(a.path)?"Unpin folder":"Pin folder",children:(0,b.jsx)(q.Pin,{className:`w-3 h-3 ${U.includes(a.path)?"fill-current":""}`})}):"file"})]},a.path)})}):(0,b.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-3",children:C.map((a,c)=>{var e;let f,g=W.has(a.path),h=!a.isDirectory&&-1!==(f=(e=a.name).lastIndexOf("."))&&z.has(e.slice(f).toLowerCase()),i=`/api/file-thumbnail?path=${encodeURIComponent(a.path)}`;return(0,b.jsxs)("button",{type:"button",className:`rounded-lg border text-left overflow-hidden transition-colors ${g?"border-primary bg-primary/15":"border-base-300 hover:bg-base-100"}`,onClick:b=>X(a,c,b),title:a.path,children:[(0,b.jsxs)("div",{className:"aspect-square bg-base-300 flex items-center justify-center overflow-hidden relative",children:[h&&!S[a.path]?(0,b.jsx)(d.default,{src:i,alt:a.name,fill:!0,sizes:"(max-width: 768px) 50vw, (max-width: 1024px) 25vw, 20vw",className:"object-cover",unoptimized:!0,onError:()=>T(b=>({...b,[a.path]:!0}))}):a.isDirectory?(0,b.jsx)(m.Folder,{className:"w-10 h-10 opacity-80"}):(0,b.jsx)(l.FileText,{className:"w-10 h-10 opacity-80"}),a.isDirectory&&(0,b.jsx)("button",{type:"button",className:`absolute top-1 right-1 btn btn-xs btn-circle ${U.includes(a.path)?"btn-primary":"btn-ghost bg-base-100/70"}`,onClick:b=>{b.stopPropagation(),$(a.path)},title:U.includes(a.path)?"Unpin folder":"Pin folder",children:(0,b.jsx)(q.Pin,{className:`w-3 h-3 ${U.includes(a.path)?"fill-current":""}`})})]}),(0,b.jsxs)("div",{className:"px-2 py-2",children:[(0,b.jsx)("div",{className:"truncate text-sm font-medium",title:a.name,children:a.name}),(0,b.jsx)("div",{className:"text-[10px] opacity-70",children:a.isDirectory?"folder":h?"image":"file"})]})]},a.path)})})}),(0,b.jsx)("div",{className:"p-3 border-t border-base-300 text-xs text-base-content/60 text-center",children:"Click: single select. Cmd/Ctrl+Click: multi-select. Shift+Click: range select. Click a folder to open it."})]})})}a.s(["default",()=>v])},12627,a=>{"use strict";function b(){}a.s(["SESSIONS_UPDATED_EVENT",0,"viba:sessions-updated","SESSIONS_UPDATED_STORAGE_KEY",0,"viba:sessions-updated-at","notifySessionsUpdated",()=>b])},27257,a=>{"use strict";var b=a.i(5050);let c=(0,b.createServerReference)("7f4e2d8cbfea83c90a943b7d1ad26051afd667020b",b.callServer,void 0,b.findSourceMapURL,"startTtydProcess");a.s(["startTtydProcess",()=>c])}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=_439918bb._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/app/actions/data%3A168de2%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A2cc4f8%20%3Ctext/javascript%3E","../../../../node_modules/lucide-react/src/icons/git-branch.ts","../../../../node_modules/lucide-react/src/icons/external-link.ts","../../../../node_modules/lucide-react/src/icons/chevron-down.ts","../../../../node_modules/lucide-react/src/icons/plus.ts","../../../../node_modules/lucide-react/src/icons/arrow-left.ts","../../../../node_modules/lucide-react/src/icons/x.ts","../../../../src/app/actions/data%3A4480d8%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A38db3b%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A1a8c3e%20%3Ctext/javascript%3E","../../../../node_modules/lucide-react/src/icons/file-text.ts","../../../../node_modules/lucide-react/src/icons/clipboard.ts","../../../../node_modules/lucide-react/src/icons/folder.ts","../../../../node_modules/lucide-react/src/icons/pin-off.ts","../../../../node_modules/lucide-react/src/icons/grid-2x2.ts","../../../../node_modules/lucide-react/src/icons/house.ts","../../../../node_modules/lucide-react/src/icons/list.ts","../../../../node_modules/lucide-react/src/icons/pin.ts","../../../../src/lib/path.ts","../../../../src/hooks/useDialogKeyboardShortcuts.ts","../../../../src/components/SessionFileBrowser.tsx","../../../../src/lib/session-updates.ts","../../../../src/app/actions/data%3A05eb96%20%3Ctext/javascript%3E"],"sourcesContent":["/* __next_internal_action_entry_do_not_use__ [{\"00f8d9271ab0088f183a1494ee1e57a9c9bf395836\":\"getConfig\"},\"src/app/actions/config.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"00f8d9271ab0088f183a1494ee1e57a9c9bf395836\",callServer,void 0,findSourceMapURL,\"getConfig\");export{$$RSC_SERVER_ACTION_0 as getConfig};","/* __next_internal_action_entry_do_not_use__ [{\"40839453baab94a23bf39433a552dbe7f519a44449\":\"updateConfig\"},\"src/app/actions/config.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_2=/*#__PURE__*/createServerReference(\"40839453baab94a23bf39433a552dbe7f519a44449\",callServer,void 0,findSourceMapURL,\"updateConfig\");export{$$RSC_SERVER_ACTION_2 as updateConfig};","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['line', { x1: '6', x2: '6', y1: '3', y2: '15', key: '17qcm7' }],\n ['circle', { cx: '18', cy: '6', r: '3', key: '1h7g24' }],\n ['circle', { cx: '6', cy: '18', r: '3', key: 'fqmcym' }],\n ['path', { d: 'M18 9a9 9 0 0 1-9 9', key: 'n2h4wq' }],\n];\n\n/**\n * @component @name GitBranch\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/git-branch\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 GitBranch = createLucideIcon('git-branch', __iconNode);\n\nexport default GitBranch;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'M10 14 21 3', key: 'gplh6r' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6', key: 'a6xqqp' }],\n];\n\n/**\n * @component @name ExternalLink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/external-link\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 ExternalLink = createLucideIcon('external-link', __iconNode);\n\nexport default ExternalLink;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]];\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevron-down\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 ChevronDown = createLucideIcon('chevron-down', __iconNode);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'M12 5v14', key: 's699le' }],\n];\n\n/**\n * @component @name Plus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/plus\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 Plus = createLucideIcon('plus', __iconNode);\n\nexport default Plus;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm12 19-7-7 7-7', key: '1l729n' }],\n ['path', { d: 'M19 12H5', key: 'x3x0zl' }],\n];\n\n/**\n * @component @name ArrowLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-left\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 ArrowLeft = createLucideIcon('arrow-left', __iconNode);\n\nexport default ArrowLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/x\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 X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","/* __next_internal_action_entry_do_not_use__ [{\"003f59d9b072ba439a66065346d259ab83d25d897d\":\"getHomeDirectory\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"003f59d9b072ba439a66065346d259ab83d25d897d\",callServer,void 0,findSourceMapURL,\"getHomeDirectory\");export{$$RSC_SERVER_ACTION_0 as getHomeDirectory};","/* __next_internal_action_entry_do_not_use__ [{\"7f8d431455c1da2fbe5358c50ae9b8c5259dd93aca\":\"saveAttachments\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_19=/*#__PURE__*/createServerReference(\"7f8d431455c1da2fbe5358c50ae9b8c5259dd93aca\",callServer,void 0,findSourceMapURL,\"saveAttachments\");export{$$RSC_SERVER_ACTION_19 as saveAttachments};","/* __next_internal_action_entry_do_not_use__ [{\"40cd192901c59313dcda53d8937596378060397f11\":\"listPathEntries\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"40cd192901c59313dcda53d8937596378060397f11\",callServer,void 0,findSourceMapURL,\"listPathEntries\");export{$$RSC_SERVER_ACTION_1 as listPathEntries};","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'M10 9H8', key: 'b1mrlr' }],\n ['path', { d: 'M16 13H8', key: 't4e002' }],\n ['path', { d: 'M16 17H8', key: 'z1uh3a' }],\n];\n\n/**\n * @component @name FileText\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/file-text\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileText = createLucideIcon('file-text', __iconNode);\n\nexport default FileText;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '8', height: '4', x: '8', y: '2', rx: '1', ry: '1', key: 'tgr4d6' }],\n [\n 'path',\n {\n d: 'M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2',\n key: '116196',\n },\n ],\n];\n\n/**\n * @component @name Clipboard\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/clipboard\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 Clipboard = createLucideIcon('clipboard', __iconNode);\n\nexport default Clipboard;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z',\n key: '1kt360',\n },\n ],\n];\n\n/**\n * @component @name Folder\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/folder\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 Folder = createLucideIcon('folder', __iconNode);\n\nexport default Folder;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 17v5', key: 'bb1du9' }],\n ['path', { d: 'M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89', key: 'znwnzq' }],\n ['path', { d: 'm2 2 20 20', key: '1ooewy' }],\n [\n 'path',\n {\n d: 'M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11',\n key: 'c9qhm2',\n },\n ],\n];\n\n/**\n * @component @name PinOff\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/pin-off\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 PinOff = createLucideIcon('pin-off', __iconNode);\n\nexport default PinOff;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 3v18', key: '108xh3' }],\n ['path', { d: 'M3 12h18', key: '1i2n21' }],\n ['rect', { x: '3', y: '3', width: '18', height: '18', rx: '2', key: 'h1oib' }],\n];\n\n/**\n * @component @name Grid2x2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/grid-2x2\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 Grid2x2 = createLucideIcon('grid-2x2', __iconNode);\n\nexport default Grid2x2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8', key: '5wwlr5' }],\n [\n 'path',\n {\n d: 'M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z',\n key: 'r6nss1',\n },\n ],\n];\n\n/**\n * @component @name House\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/house\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 House = createLucideIcon('house', __iconNode);\n\nexport default House;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M3 5h.01', key: '18ugdj' }],\n ['path', { d: 'M3 12h.01', key: 'nlz23k' }],\n ['path', { d: 'M3 19h.01', key: 'noohij' }],\n ['path', { d: 'M8 5h13', key: '1pao27' }],\n ['path', { d: 'M8 12h13', key: '1za7za' }],\n ['path', { d: 'M8 19h13', key: 'm83p4d' }],\n];\n\n/**\n * @component @name List\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/list\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst List = createLucideIcon('list', __iconNode);\n\nexport default List;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 17v5', key: 'bb1du9' }],\n [\n 'path',\n {\n d: 'M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z',\n key: '1nkz8b',\n },\n ],\n];\n\n/**\n * @component @name Pin\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/pin\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 Pin = createLucideIcon('pin', __iconNode);\n\nexport default Pin;\n","export function getBaseName(path: string): string {\n if (!path) return '';\n // Support both Windows (\\) and POSIX (/) separators\n // Using a simpler approach to avoid regex escaping issues in some environments\n const normalized = path.replace(/\\\\/g, '/');\n const parts = normalized.split('/');\n // Filter out empty strings which can happen with trailing slashes or absolute paths\n return parts.filter(Boolean).pop() || '';\n}\n\nexport function getDirName(path: string): string {\n if (!path) return '';\n \n // Normalize separators to / for easier processing\n const normalized = path.replace(/\\\\/g, '/');\n \n // Remove trailing slash if it exists (but not if it's the root '/')\n const withoutTrailing = (normalized.length > 1 && normalized.endsWith('/')) \n ? normalized.slice(0, -1) \n : normalized;\n \n const lastIdx = withoutTrailing.lastIndexOf('/');\n \n if (lastIdx === -1) {\n // No separator found. Could be a relative path or a Windows drive root like \"C:\"\n // For \"C:\\\" or \"C:\", we return the normalized version (C:/ or C:)\n if (path.includes(':') && path.length <= 3) return normalized;\n return '.';\n }\n \n if (lastIdx === 0) return '/';\n \n // On Windows, if we're at \"C:/\", lastIdx might be 2.\n if (path.includes(':') && lastIdx === 2) {\n return withoutTrailing.substring(0, 3); // \"C:/\"\n }\n \n return withoutTrailing.substring(0, lastIdx);\n}\n\nexport function isWindowsAbsolutePath(value: string): boolean {\n return /^[a-zA-Z]:[\\\\/]/.test(value);\n}\n","import { useEffect } from 'react';\n\ntype UseDialogKeyboardShortcutsOptions = {\n enabled?: boolean;\n onConfirm?: () => void | Promise<unknown>;\n onDismiss: () => void;\n canConfirm?: boolean;\n};\n\nconst isEditableTarget = (target: EventTarget | null): boolean => {\n if (!(target instanceof HTMLElement)) return false;\n const tagName = target.tagName.toUpperCase();\n return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT' || target.isContentEditable;\n};\n\nexport function useDialogKeyboardShortcuts({\n enabled = true,\n onConfirm,\n onDismiss,\n canConfirm = true,\n}: UseDialogKeyboardShortcutsOptions) {\n useEffect(() => {\n if (!enabled) return;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n onDismiss();\n return;\n }\n\n if (event.key !== 'Enter') return;\n if (!onConfirm || !canConfirm) return;\n if (event.defaultPrevented) return;\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n if (isEditableTarget(event.target)) return;\n\n event.preventDefault();\n void onConfirm();\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [enabled, onConfirm, onDismiss, canConfirm]);\n}\n","'use client';\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Image from 'next/image';\nimport { getHomeDirectory, listPathEntries, saveAttachments } from '@/app/actions/git';\nimport { getConfig, updateConfig } from '@/app/actions/config';\nimport { ArrowLeft, Clipboard, FileText, Folder, Grid2x2, House, List, Pin, PinOff } from 'lucide-react';\nimport { getDirName } from '@/lib/path';\nimport { useDialogKeyboardShortcuts } from '@/hooks/useDialogKeyboardShortcuts';\n\nconst VIEW_MODE_STORAGE_KEY = 'viba:session-file-browser:view-mode';\n\ntype FileSystemItem = {\n name: string;\n path: string;\n isDirectory: boolean;\n isGitRepo: boolean;\n};\n\ninterface SessionFileBrowserProps {\n initialPath?: string;\n worktreePath?: string;\n onConfirm: (paths: string[]) => void | Promise<void>;\n onCancel: () => void;\n onPathChange?: (path: string) => void;\n}\n\nexport default function SessionFileBrowser({\n initialPath,\n worktreePath,\n onConfirm,\n onCancel,\n onPathChange,\n}: SessionFileBrowserProps) {\n const imageExtensions = useMemo(\n () => new Set(['.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp', '.svg', '.ico', '.avif']),\n []\n );\n const [currentPath, setCurrentPath] = useState('');\n const [items, setItems] = useState<FileSystemItem[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [homePath, setHomePath] = useState('');\n const [selectedPaths, setSelectedPaths] = useState<string[]>([]);\n const [anchorIndex, setAnchorIndex] = useState<number | null>(null);\n const [viewMode, setViewMode] = useState<'list' | 'grid'>('list');\n const [hasLoadedViewMode, setHasLoadedViewMode] = useState(false);\n const [brokenThumbnails, setBrokenThumbnails] = useState<Record<string, boolean>>({});\n const [pinnedFolderShortcuts, setPinnedFolderShortcuts] = useState<string[]>([]);\n\n useEffect(() => {\n let isMounted = true;\n\n const init = async () => {\n try {\n const home = await getHomeDirectory();\n if (!isMounted) return;\n setHomePath(home);\n if (!initialPath) {\n setCurrentPath(home);\n }\n } catch (err) {\n console.error('Failed to resolve home directory:', err);\n }\n\n if (initialPath && isMounted) {\n setCurrentPath(initialPath);\n }\n };\n\n void init();\n\n return () => {\n isMounted = false;\n };\n }, [initialPath]);\n\n useEffect(() => {\n let isMounted = true;\n\n const loadPinnedFolderShortcuts = async () => {\n try {\n const config = await getConfig();\n if (!isMounted) return;\n const pinned = Array.isArray(config.pinnedFolderShortcuts)\n ? config.pinnedFolderShortcuts.filter((item): item is string => typeof item === 'string' && item.trim().length > 0)\n : [];\n setPinnedFolderShortcuts(Array.from(new Set(pinned)));\n } catch (err) {\n console.error('Failed to load pinned folder shortcuts:', err);\n }\n };\n\n void loadPinnedFolderShortcuts();\n\n return () => {\n isMounted = false;\n };\n }, []);\n\n useEffect(() => {\n try {\n const savedViewMode = localStorage.getItem(VIEW_MODE_STORAGE_KEY);\n if (savedViewMode === 'list' || savedViewMode === 'grid') {\n setViewMode(savedViewMode);\n }\n } catch {\n // Ignore localStorage failures.\n } finally {\n setHasLoadedViewMode(true);\n }\n }, []);\n\n useEffect(() => {\n if (!hasLoadedViewMode) return;\n try {\n localStorage.setItem(VIEW_MODE_STORAGE_KEY, viewMode);\n } catch {\n // Ignore localStorage failures.\n }\n }, [hasLoadedViewMode, viewMode]);\n\n useEffect(() => {\n if (!currentPath) return;\n\n const fetchItems = async () => {\n setLoading(true);\n setError(null);\n try {\n const entries = await listPathEntries(currentPath);\n setItems(entries);\n } catch (err) {\n console.error('Failed to list files:', err);\n setError('Failed to load directory contents');\n } finally {\n setLoading(false);\n }\n };\n\n void fetchItems();\n }, [currentPath]);\n\n useEffect(() => {\n if (!currentPath) return;\n onPathChange?.(currentPath);\n }, [currentPath, onPathChange]);\n\n useEffect(() => {\n setSelectedPaths([]);\n setAnchorIndex(null);\n setBrokenThumbnails({});\n }, [currentPath]);\n\n const selectedSet = useMemo(() => new Set(selectedPaths), [selectedPaths]);\n const isImageFile = (fileName: string) => {\n const dotIndex = fileName.lastIndexOf('.');\n if (dotIndex === -1) return false;\n return imageExtensions.has(fileName.slice(dotIndex).toLowerCase());\n };\n\n const handleGoUp = () => {\n const parent = getDirName(currentPath);\n if (parent && parent !== currentPath) {\n setCurrentPath(parent);\n }\n };\n\n const handleGoHome = () => {\n if (!homePath || currentPath === homePath) return;\n setCurrentPath(homePath);\n };\n\n const handleItemClick = (item: FileSystemItem, index: number, e: React.MouseEvent<HTMLElement>) => {\n if (item.isDirectory) {\n setCurrentPath(item.path);\n return;\n }\n\n const isMetaMulti = e.metaKey || e.ctrlKey;\n\n if (e.shiftKey && anchorIndex !== null) {\n const start = Math.min(anchorIndex, index);\n const end = Math.max(anchorIndex, index);\n const range = items\n .slice(start, end + 1)\n .filter((entry) => !entry.isDirectory)\n .map((entry) => entry.path);\n setSelectedPaths(range);\n return;\n }\n\n if (isMetaMulti) {\n setSelectedPaths((prev) =>\n prev.includes(item.path)\n ? prev.filter((path) => path !== item.path)\n : [...prev, item.path]\n );\n setAnchorIndex(index);\n return;\n }\n\n setSelectedPaths([item.path]);\n setAnchorIndex(index);\n };\n\n const handlePaste = async () => {\n setError(null);\n if (!worktreePath) {\n setError(\"Cannot paste: Session worktree path is missing.\");\n return;\n }\n\n try {\n setLoading(true);\n \n if (!navigator.clipboard || !navigator.clipboard.read) {\n throw new Error(\"Clipboard API not supported in this browser\");\n }\n\n // Request clipboard access\n const clipboardItems = await navigator.clipboard.read();\n const formData = new FormData();\n let hasFiles = false;\n\n for (const item of clipboardItems) {\n // Look for image types or other file types\n // We iterate through available types in the item\n for (const type of item.types) {\n // Prioritize images\n if (type.startsWith('image/')) {\n const blob = await item.getType(type);\n const ext = type.split('/')[1] || 'png';\n const filename = `pasted-image-${Date.now()}.${ext}`;\n const file = new File([blob], filename, { type });\n formData.append(filename, file); // Use filename as key\n hasFiles = true;\n break; // Found an image representation, stop checking other types for this item\n } else if (type === 'text/plain') {\n // For now, ignore plain text unless we want to save it as a text file.\n // If user copies text, they can paste directly into terminal. \n // This feature is \"pasting file\".\n }\n }\n }\n\n if (hasFiles) {\n const savedPaths = await saveAttachments(worktreePath, formData);\n if (savedPaths && savedPaths.length > 0) {\n // Determine what to do with saved paths.\n // Option 1: auto-insert them (call onConfirm).\n // Option 2: select them in the browser (might be hard if they are in a different dir).\n // Option 3: just call onConfirm because the user clicked \"Paste\" to insert.\n await onConfirm(savedPaths);\n return;\n } else {\n setError(\"Failed to save pasted files.\");\n }\n } else {\n // No files found, maybe check for text path?\n try {\n const text = await navigator.clipboard.readText();\n if (text && text.trim().startsWith('/')) {\n // Check if it's a valid path? \n // Maybe just suggest it?\n // For now, let's just error if no files found.\n setError(\"No file content found in clipboard. Copy an image or file first.\");\n } else {\n setError(\"No file content found in clipboard.\");\n }\n } catch {\n setError(\"No file content found in clipboard.\");\n }\n }\n\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n console.error('Paste error:', err);\n setError(`Failed to read from clipboard: ${message}`);\n } finally {\n setLoading(false);\n }\n };\n\n const savePinnedFolderShortcuts = async (nextShortcuts: string[]) => {\n setPinnedFolderShortcuts(nextShortcuts);\n try {\n await updateConfig({ pinnedFolderShortcuts: nextShortcuts });\n } catch (err) {\n console.error('Failed to save pinned folder shortcuts:', err);\n setError('Failed to save pinned shortcuts');\n }\n };\n\n const handleTogglePinFolder = async (folderPath: string) => {\n setError(null);\n const alreadyPinned = pinnedFolderShortcuts.includes(folderPath);\n if (alreadyPinned) {\n await savePinnedFolderShortcuts(pinnedFolderShortcuts.filter((path) => path !== folderPath));\n return;\n }\n await savePinnedFolderShortcuts([...pinnedFolderShortcuts, folderPath]);\n };\n\n const handleConfirm = useCallback(async () => {\n if (selectedPaths.length === 0) return;\n await onConfirm(selectedPaths);\n }, [onConfirm, selectedPaths]);\n\n useDialogKeyboardShortcuts({\n onConfirm: handleConfirm,\n onDismiss: onCancel,\n canConfirm: selectedPaths.length > 0,\n });\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm p-4\">\n <div className=\"bg-base-200 rounded-lg shadow-xl w-full max-w-5xl h-[82vh] flex flex-col\">\n <div className=\"flex items-center justify-between p-4 border-b border-base-300\">\n <h2 className=\"text-xl font-bold flex items-center gap-2\">\n <Folder className=\"w-5 h-5\" />\n Browse Files\n </h2>\n <button onClick={onCancel} className=\"btn btn-sm btn-ghost btn-circle\" title=\"Close file browser\">\n ✕\n </button>\n </div>\n\n <div className=\"flex items-center gap-2 p-3 bg-base-300\">\n <button\n onClick={handleGoUp}\n className=\"btn btn-sm btn-square btn-ghost\"\n title=\"Go Up\"\n disabled={currentPath === '/' || !currentPath}\n >\n <ArrowLeft className=\"w-4 h-4\" />\n </button>\n <button\n onClick={handleGoHome}\n className=\"btn btn-sm btn-ghost gap-1\"\n title={homePath ? `Go to Home Folder (${homePath})` : 'Go to Home Folder'}\n disabled={!homePath || currentPath === homePath}\n >\n <House className=\"w-4 h-4\" />\n Home\n </button>\n <div className=\"flex-1 overflow-x-auto whitespace-nowrap px-2 font-mono text-sm\">\n {currentPath}\n </div>\n <div className=\"join\">\n <button\n type=\"button\"\n onClick={() => setViewMode('list')}\n className={`btn btn-sm join-item ${viewMode === 'list' ? 'btn-active' : 'btn-ghost'}`}\n title=\"List view\"\n >\n <List className=\"w-4 h-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => setViewMode('grid')}\n className={`btn btn-sm join-item ${viewMode === 'grid' ? 'btn-active' : 'btn-ghost'}`}\n title=\"Grid view\"\n >\n <Grid2x2 className=\"w-4 h-4\" />\n </button>\n </div>\n <button\n onClick={handleConfirm}\n className=\"btn btn-sm btn-primary gap-2\"\n disabled={selectedPaths.length === 0}\n title=\"Insert selected absolute paths\"\n >\n Insert ({selectedPaths.length})\n </button>\n \n <div className=\"w-[1px] h-6 bg-base-content/10 mx-1\"></div>\n\n <button\n onClick={handlePaste}\n className=\"btn btn-sm btn-ghost gap-2\"\n title=\"Paste file/image from clipboard\"\n disabled={!worktreePath}\n >\n <Clipboard className=\"w-4 h-4\" />\n Paste\n </button>\n </div>\n {pinnedFolderShortcuts.length > 0 && (\n <div className=\"px-3 py-2 border-b border-base-300 bg-base-200/50\">\n <div className=\"flex items-center gap-2 overflow-x-auto\">\n {pinnedFolderShortcuts.map((folderPath) => {\n const isCurrent = folderPath === currentPath;\n const label = folderPath.split(/[\\\\/]/).filter(Boolean).pop() || folderPath;\n return (\n <div key={folderPath} className=\"join shrink-0\">\n <button\n type=\"button\"\n className={`btn btn-xs join-item ${isCurrent ? 'btn-primary' : 'btn-ghost'}`}\n onClick={() => setCurrentPath(folderPath)}\n title={folderPath}\n >\n <Folder className=\"w-3 h-3\" />\n {label}\n </button>\n <button\n type=\"button\"\n className=\"btn btn-xs btn-ghost join-item\"\n onClick={() => void handleTogglePinFolder(folderPath)}\n title={`Unpin ${folderPath}`}\n >\n <PinOff className=\"w-3 h-3\" />\n </button>\n </div>\n );\n })}\n </div>\n </div>\n )}\n\n <div className=\"flex-1 overflow-y-auto p-2\">\n {loading ? (\n <div className=\"flex justify-center items-center h-full\">\n <span className=\"loading loading-spinner loading-lg\"></span>\n </div>\n ) : error ? (\n <div className=\"alert alert-error\">{error}</div>\n ) : items.length === 0 ? (\n <div className=\"text-center text-base-content/50 mt-10\">Empty directory</div>\n ) : viewMode === 'list' ? (\n <div className=\"grid grid-cols-1 gap-1\">\n {items.map((item, index) => {\n const isSelected = selectedSet.has(item.path);\n return (\n <div\n key={item.path}\n className={`flex items-center justify-between p-2 rounded-md cursor-pointer transition-colors border ${isSelected\n ? 'bg-primary text-primary-content border-primary'\n : 'hover:bg-base-100 border-transparent'\n }`}\n onClick={(e) => handleItemClick(item, index, e)}\n title={item.path}\n >\n <div className=\"flex items-center gap-3 overflow-hidden\">\n {item.isDirectory ? (\n <Folder className=\"w-5 h-5 shrink-0\" />\n ) : (\n <FileText className=\"w-5 h-5 shrink-0\" />\n )}\n <span className=\"truncate\">{item.name}</span>\n </div>\n <span className=\"text-[10px] opacity-70 shrink-0\">\n {item.isDirectory ? (\n <button\n type=\"button\"\n className=\"btn btn-ghost btn-xs h-6 min-h-6\"\n onClick={(e) => {\n e.stopPropagation();\n void handleTogglePinFolder(item.path);\n }}\n title={pinnedFolderShortcuts.includes(item.path) ? 'Unpin folder' : 'Pin folder'}\n >\n <Pin className={`w-3 h-3 ${pinnedFolderShortcuts.includes(item.path) ? 'fill-current' : ''}`} />\n </button>\n ) : 'file'}\n </span>\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-3\">\n {items.map((item, index) => {\n const isSelected = selectedSet.has(item.path);\n const isImage = !item.isDirectory && isImageFile(item.name);\n const thumbnailUrl = `/api/file-thumbnail?path=${encodeURIComponent(item.path)}`;\n\n return (\n <button\n key={item.path}\n type=\"button\"\n className={`rounded-lg border text-left overflow-hidden transition-colors ${isSelected\n ? 'border-primary bg-primary/15'\n : 'border-base-300 hover:bg-base-100'\n }`}\n onClick={(e) => handleItemClick(item, index, e)}\n title={item.path}\n >\n <div className=\"aspect-square bg-base-300 flex items-center justify-center overflow-hidden relative\">\n {isImage && !brokenThumbnails[item.path] ? (\n <Image\n src={thumbnailUrl}\n alt={item.name}\n fill\n sizes=\"(max-width: 768px) 50vw, (max-width: 1024px) 25vw, 20vw\"\n className=\"object-cover\"\n unoptimized\n onError={() =>\n setBrokenThumbnails((prev) => ({ ...prev, [item.path]: true }))\n }\n />\n ) : item.isDirectory ? (\n <Folder className=\"w-10 h-10 opacity-80\" />\n ) : (\n <FileText className=\"w-10 h-10 opacity-80\" />\n )}\n {item.isDirectory && (\n <button\n type=\"button\"\n className={`absolute top-1 right-1 btn btn-xs btn-circle ${pinnedFolderShortcuts.includes(item.path) ? 'btn-primary' : 'btn-ghost bg-base-100/70'}`}\n onClick={(e) => {\n e.stopPropagation();\n void handleTogglePinFolder(item.path);\n }}\n title={pinnedFolderShortcuts.includes(item.path) ? 'Unpin folder' : 'Pin folder'}\n >\n <Pin className={`w-3 h-3 ${pinnedFolderShortcuts.includes(item.path) ? 'fill-current' : ''}`} />\n </button>\n )}\n </div>\n <div className=\"px-2 py-2\">\n <div className=\"truncate text-sm font-medium\" title={item.name}>{item.name}</div>\n <div className=\"text-[10px] opacity-70\">\n {item.isDirectory ? 'folder' : isImage ? 'image' : 'file'}\n </div>\n </div>\n </button>\n );\n })}\n </div>\n )}\n </div>\n\n <div className=\"p-3 border-t border-base-300 text-xs text-base-content/60 text-center\">\n Click: single select. Cmd/Ctrl+Click: multi-select. Shift+Click: range select.\n Click a folder to open it.\n </div>\n </div>\n </div>\n );\n}\n","export const SESSIONS_UPDATED_STORAGE_KEY = 'viba:sessions-updated-at';\nexport const SESSIONS_UPDATED_EVENT = 'viba:sessions-updated';\n\nexport function notifySessionsUpdated(): void {\n if (typeof window === 'undefined') return;\n\n try {\n localStorage.setItem(SESSIONS_UPDATED_STORAGE_KEY, new Date().toISOString());\n } catch {\n // Ignore localStorage failures (private mode, quota, etc.)\n }\n\n window.dispatchEvent(new CustomEvent(SESSIONS_UPDATED_EVENT));\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"7f4e2d8cbfea83c90a943b7d1ad26051afd667020b\":\"startTtydProcess\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_10=/*#__PURE__*/createServerReference(\"7f4e2d8cbfea83c90a943b7d1ad26051afd667020b\",callServer,void 0,findSourceMapURL,\"startTtydProcess\");export{$$RSC_SERVER_ACTION_10 as startTtydProcess};"],"names":[],"mappings":"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AA,CAAA,CAAA,oECGL,CAAE,AAAF,EAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAW,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,YAC1B,CCAP,AHYO,ACZP,ACAO,CFYA,ACZP,ACAO,ACAP,CFAA,ACAO,ACAP,AHYO,CEZA,ADAP,ADYO,AGZP,CFAA,ADYO,AGZP,ADAO,CFYA,AGZP,ADAO,ADAP,CEAA,ADAO,ADAP,ADYO,CGZP,AHYO,AEZA,ADAP,CEAA,AHYO,AEZA,ADAP,CAAA,AEAA,AHYO,AEZA,CAAA,AFYA,AGZP,AFAA,cCAkC,uBACf,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,mCCgB/B,CAAA,EAAA,EAAA,OAAA,EAAiB,OAAO,CFAL,AEAK,CFAL,AEAK,CAAA,6CAjB3B,CDAN,ACAM,AFAA,AFAL,4MICE,CDAH,CAAA,CAAA,ACAG,AFAA,CEAA,ADAH,ADAG,qCFkBN,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAS,CAAT,AAAS,CAAT,AAAS,CAAT,AAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAiB,CAAjB,AAAiB,CAAjB,AAAiB,CAAjB,AAAiB,CAAjB,AAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CCxBzB,CDwBoC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAvBrC,AAuBqC,CAvBrC,AIAA,AHAA,AEAA,ADAA,CFAA,AGAA,ACAA,AHAA,ACAA,CCAA,ADAA,AEAA,AJAA,ACAA,CEAA,AHAA,AIAA,AHAA,ACAA,CEAA,AJAA,ACAA,ACAA,ACAA,CCAA,AJAA,AGAA,AFAA,ACAA,CAAA,ADAA,AEAA,ACAA,AJAA,CCAA,AEAA,ADAA,AEAA,AJAA,CIAA,AHAA,AEAA,ADAA,AFAA,CAAA,AGAA,ADAA,ADAA,AGAA,CDAA,ADAA,ADAA,AGAA,AJAA,AAAY,CGAA,ACAA,AHAA,ACAZ,AFAY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","ignoreList":[2,3,4,5,6,7,11,12,13,14,15,16,17,18]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[
|
|
2
|
-
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},66085,a=>{"use strict";var b=a.i(24868),c=a.i(46786),d=a.i(14747);let e="viba-agent-api-credentials",f=["codex"],g=null,h=null,i=!1;function j(a){return f.includes(a)}function k(){return h?`Secure credential storage is unavailable: ${h}`:"Secure credential storage is unavailable in this runtime."}async function l(){return g||(g=a.A(45581).then(a=>a.default??a).catch(a=>(h=a instanceof Error?a.message:String(a),i||(i=!0,console.warn(`[agent-api-credentials] ${k()}`)),null))),g}async function m(){let a=await l();if(!a)throw Error(k());return a}function n(a){return`agent-api-${a}`}function o(a){return a.keytarAccount||n(a.agent)}function p(a){return{agent:a.agent,apiProxy:a.apiProxy,createdAt:a.createdAt,updatedAt:a.updatedAt}}function q(a){return!!a&&"object"==typeof a&&"string"==typeof a.agent&&!!j(a.agent)&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt&&(void 0===a.apiProxy||"string"==typeof a.apiProxy)&&(void 0===a.keytarAccount||"string"==typeof a.keytarAccount)}async function r(){let a=d.default.join(c.default.homedir(),".viba");return await b.default.mkdir(a,{recursive:!0}),d.default.join(a,"agent-api-configs.json")}async function s(a){let c=await r();await b.default.writeFile(c,JSON.stringify(a,null,2),"utf-8")}async function t(){let a=await r();try{let c=await b.default.readFile(a,"utf-8"),d=JSON.parse(c);if(Array.isArray(d))return d.filter(q);if(!d||"object"!=typeof d)return[];let e=Object.entries(d).filter(([a])=>j(a)).map(([a,b])=>b&&"object"==typeof b?void 0===b.agent?{...b,agent:a}:b:null).filter(q);return e.length>0&&await s(e),e}catch(a){if(a?.code==="ENOENT")return[];return console.error("Failed to parse agent API credential metadata:",a),[]}}async function u(){return(await t()).map(p).sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt))}async function v(a,b,c){let d,f;if(!j(a))return{success:!1,error:`Unsupported agent: ${a}`};let g=b.trim();if(!g)return{success:!1,error:"API key is required."};try{d=function(a){let b=a.trim();if(b){try{new URL(b)}catch{throw Error("API proxy must be a valid URL.")}return b}}(c)}catch(a){return{success:!1,error:a.message}}try{f=await m()}catch(a){return{success:!1,error:a.message}}let h=await t(),i=new Date().toISOString(),k=h.findIndex(b=>b.agent===a),l=k>=0?o(h[k]):n(a);if(await f.setPassword(e,l,g),k>=0){let a=h[k];h[k]={...a,apiProxy:d,updatedAt:i,keytarAccount:l}}else h.push({agent:a,apiProxy:d,createdAt:i,updatedAt:i,keytarAccount:l});await s(h);let q=h.find(b=>b.agent===a);return q?{success:!0,credential:p(q)}:{success:!1,error:"Failed to persist agent API credential."}}async function w(a){if(!j(a))return{success:!1,error:`Unsupported agent: ${a}`};let b=await t(),c=b.findIndex(b=>b.agent===a);if(-1===c)return{success:!1,error:"Agent API credential not found."};let[d]=b.splice(c,1);await s(b);let f=await l();return f&&await f.deletePassword(e,o(d)),{success:!0}}async function x(a){if(!j(a))return null;let b=(await t()).find(b=>b.agent===a);if(!b)return null;let c=await l();if(!c)return null;let d=await c.getPassword(e,o(b));return d?{agent:b.agent,apiKey:d,apiProxy:b.apiProxy}:null}a.s(["createOrUpdateAgentApiCredential",()=>v,"deleteAgentApiCredential",()=>w,"getAgentApiCredentialSecret",()=>x,"getAllAgentApiCredentials",()=>u])},70798,a=>{"use strict";var b=a.i(24868),c=a.i(46786),d=a.i(14747);let e="viba-git-credentials",f=null,g=null,h=!1;function i(){return g?`Secure credential storage is unavailable: ${g}`:"Secure credential storage is unavailable in this runtime."}async function j(){return f||(f=a.A(45581).then(a=>a.default??a).catch(a=>(g=a instanceof Error?a.message:String(a),h||(h=!0,console.warn(`[credentials] ${i()}`)),null))),f}async function k(){let a=await j();if(!a)throw Error(i());return a}function l(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function m(a){return a.trim().replace(/\/$/,"")}function n(a){return`credential-${a}`}function o(a){return`credential-${a}`}function p(a){return a.keytarAccount||n(a.id)}function q(a){return"gitlab"===a.type?{id:a.id,type:"gitlab",username:a.username,serverUrl:a.serverUrl||"https://gitlab.com",createdAt:a.createdAt,updatedAt:a.updatedAt}:{id:a.id,type:"github",username:a.username,createdAt:a.createdAt,updatedAt:a.updatedAt}}async function r(){let a=d.default.join(c.default.homedir(),".viba");return await b.default.mkdir(a,{recursive:!0}),d.default.join(a,"credentials.json")}function s(a,b){return!!a&&"object"==typeof a&&a.type===b&&"string"==typeof a.username&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt&&("gitlab"!==b||"string"==typeof a.serverUrl)}function t(a){return!!a&&"object"==typeof a&&"string"==typeof a.id&&!!a.id.trim()&&("github"===a.type||"gitlab"===a.type)&&"string"==typeof a.username&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt&&(void 0===a.keytarAccount||"string"==typeof a.keytarAccount)&&("gitlab"!==a.type||"string"==typeof a.serverUrl)}async function u(a){let c=await r();await b.default.writeFile(c,JSON.stringify(a,null,2),"utf-8")}async function v(){let a=await r();try{let c=await b.default.readFile(a,"utf-8"),d=JSON.parse(c);if(Array.isArray(d))return d.filter(t);if(!d||"object"!=typeof d)return[];let e=[];if(s(d.github,"github")){let a=d.github;e.push({id:l(),type:"github",username:a.username,createdAt:a.createdAt,updatedAt:a.updatedAt,keytarAccount:o("github")})}if(s(d.gitlab,"gitlab")){let a=d.gitlab;e.push({id:l(),type:"gitlab",username:a.username,serverUrl:a.serverUrl,createdAt:a.createdAt,updatedAt:a.updatedAt,keytarAccount:o("gitlab")})}return e.length>0&&await u(e),e}catch(a){if(a?.code==="ENOENT")return[];return console.error("Failed to parse credentials metadata:",a),[]}}async function w(){return(await v()).map(q).sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt))}async function x(a){let b=(await v()).find(b=>b.id===a);return b?q(b):null}async function y(a){let b=(await v()).find(b=>b.id===a);if(!b)return null;let c=await j();return c?c.getPassword(e,p(b)):null}async function z(a){try{let b=await fetch("https://api.github.com/user",{headers:{Authorization:`Bearer ${a}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});if(!b.ok){if(401===b.status)return{valid:!1,error:"Invalid or expired GitHub token."};return{valid:!1,error:`GitHub API returned ${b.status}.`}}let c=await b.json(),d="string"==typeof c?.login?c.login:null;if(!d)return{valid:!1,error:"GitHub API response did not include a username."};return{valid:!0,username:d}}catch(a){return{valid:!1,error:`Failed to verify GitHub token: ${a.message}`}}}async function A(a,b){try{let c=m(a),d=await fetch(`${c}/api/v4/user`,{headers:{"PRIVATE-TOKEN":b}});if(!d.ok){if(401===d.status)return{valid:!1,error:"Invalid or expired GitLab token."};return{valid:!1,error:`GitLab API returned ${d.status}.`}}let e=await d.json(),f="string"==typeof e?.username?e.username:null;if(!f)return{valid:!1,error:"GitLab API response did not include a username."};return{valid:!0,username:f}}catch(a){return{valid:!1,error:`Failed to verify GitLab token: ${a.message}`}}}async function B(a){let b,c=a.trim();if(!c)return{success:!1,error:"GitHub token is required."};try{b=await k()}catch(a){return{success:!1,error:a.message}}let d=await z(c);if(!d.valid||!d.username)return{success:!1,error:d.error||"Failed to verify GitHub token."};let f=await v();if(f.find(a=>"github"===a.type&&a.username===d.username))return{success:!1,error:`A GitHub credential for ${d.username} already exists.`};let g=l(),h=new Date().toISOString(),i=n(g);await b.setPassword(e,i,c);let j={id:g,type:"github",username:d.username,createdAt:h,updatedAt:h,keytarAccount:i};return f.push(j),await u(f),{success:!0,credential:{id:j.id,type:"github",username:j.username,createdAt:j.createdAt,updatedAt:j.updatedAt}}}async function C(a,b){let c,d=m(a),f=b.trim();if(!d)return{success:!1,error:"GitLab server URL is required."};try{new URL(d)}catch{return{success:!1,error:"GitLab server URL must be a valid URL."}}if(!f)return{success:!1,error:"GitLab token is required."};try{c=await k()}catch(a){return{success:!1,error:a.message}}let g=await A(d,f);if(!g.valid||!g.username)return{success:!1,error:g.error||"Failed to verify GitLab token."};let h=await v();if(h.find(a=>"gitlab"===a.type&&a.username===g.username&&a.serverUrl===d))return{success:!1,error:`A GitLab credential for ${g.username} on ${d} already exists.`};let i=l(),j=new Date().toISOString(),o=n(i);await c.setPassword(e,o,f);let p={id:i,type:"gitlab",username:g.username,serverUrl:d,createdAt:j,updatedAt:j,keytarAccount:o};return h.push(p),await u(h),{success:!0,credential:{id:p.id,type:"gitlab",username:p.username,serverUrl:p.serverUrl||d,createdAt:p.createdAt,updatedAt:p.updatedAt}}}async function D(a){let b=await v(),c=b.findIndex(b=>b.id===a);if(-1===c)return{success:!1,error:"Credential not found."};let d=b[c];b.splice(c,1),await u(b);let f=await j();return f&&await f.deletePassword(e,p(d)),{success:!0}}a.s(["createGitHubCredential",()=>B,"createGitLabCredential",()=>C,"deleteCredential",()=>D,"getAllCredentials",()=>w,"getCredentialById",()=>x,"getCredentialToken",()=>y])},37359,a=>{"use strict";var b=a.i(37936),c=a.i(70798),d=a.i(66085);async function e(){try{let a=await (0,c.getAllCredentials)();return{success:!0,credentials:a}}catch(a){return console.error("Failed to list credentials:",a),{success:!1,error:"Failed to load credentials."}}}async function f(a){let b=await (0,c.createGitHubCredential)(a);return b.success&&b.credential?{success:!0,credential:b.credential}:{success:!1,error:b.error||"Failed to save GitHub credential."}}async function g(a,b){let d=await (0,c.createGitLabCredential)(a,b);return d.success&&d.credential?{success:!0,credential:d.credential}:{success:!1,error:d.error||"Failed to save GitLab credential."}}async function h(){try{let a=await (0,d.getAllAgentApiCredentials)();return{success:!0,credentials:a}}catch(a){return console.error("Failed to list agent API credentials:",a),{success:!1,error:"Failed to load agent API credentials."}}}async function i(a,b,c){let e=await (0,d.createOrUpdateAgentApiCredential)(a,b,c);return e.success&&e.credential?{success:!0,credential:e.credential}:{success:!1,error:e.error||"Failed to save agent API credential."}}async function j(a){try{let b=await (0,c.deleteCredential)(a);if(!b.success)return{success:!1,error:b.error||"Failed to remove credential."};return{success:!0}}catch(a){return console.error("Failed to remove credential:",a),{success:!1,error:"Failed to remove credential."}}}async function k(a){try{let b=await (0,d.deleteAgentApiCredential)(a);if(!b.success)return{success:!1,error:b.error||"Failed to remove agent API credential."};return{success:!0}}catch(a){return console.error("Failed to remove agent API credential:",a),{success:!1,error:"Failed to remove agent API credential."}}}(0,a.i(13095).ensureServerEntryExports)([e,f,g,h,i,j,k]),(0,b.registerServerReference)(e,"00b8e61defc839f7f0caa3058b3e540a47a6ae775a",null),(0,b.registerServerReference)(f,"40b8f9d3358929e5e27e89239b78cbf430ebe36152",null),(0,b.registerServerReference)(g,"606b0008567600dac7b5d52fc52279f3d249969a79",null),(0,b.registerServerReference)(h,"00a804398f4b1e56ea556c75876f5d10ed7a1d3ae2",null),(0,b.registerServerReference)(i,"70121d2a500dd68bf95288b8f4c731abd8738af90a",null),(0,b.registerServerReference)(j,"40788d8f719ddaee4adf946788d566d092caf643c4",null),(0,b.registerServerReference)(k,"401ccdad137644781bb0cc644754cd1e07cc30c07a",null),a.s(["listAgentApiCredentials",()=>h,"listCredentials",()=>e,"removeAgentApiCredential",()=>k,"removeCredential",()=>j,"saveAgentApiCredential",()=>i,"saveGitHubCredential",()=>f,"saveGitLabCredential",()=>g])},98624,54569,a=>{"use strict";var b=a.i(37936),c=a.i(24868),d=a.i(46786),e=a.i(14747),f=a.i(4503),g=a.i(38642);let h=new Set([".git","node_modules",".next",".viba","dist","build","coverage"]);function i(){return global.repoResolutionCache||(global.repoResolutionCache=new Map),global.repoResolutionCache}function j(a,b){i().set(a.toLowerCase(),{repoPath:b,resolvedAt:Date.now()})}async function k(a){let b=i().get(a.toLowerCase());return b?Date.now()-b.resolvedAt>3e5?(i().delete(a.toLowerCase()),null):await l(b.repoPath)?b.repoPath:(i().delete(a.toLowerCase()),null):null}async function l(a){try{return await c.default.access(e.default.join(a,".git")),!0}catch{return!1}}async function m(a,b){let d=e.default.join(a,b);if(await l(d))return d;let f=[{dirPath:a,depth:0}],g=0,i=b.toLowerCase();for(let a=0;a<f.length;a+=1){let b,d=f[a];if((g+=1)>5e3)break;try{b=await c.default.readdir(d.dirPath,{withFileTypes:!0})}catch{continue}for(let a of b){if(!a.isDirectory()||function(a,b){let c=a.toLowerCase();return c!==b&&!!(h.has(c)||a.startsWith("."))}(a.name,i))continue;let b=e.default.join(d.dirPath,a.name);if(a.name.toLowerCase()===i&&await l(b))return b;d.depth+1<=5&&f.push({dirPath:b,depth:d.depth+1})}}return null}async function n(a){let b=a.trim();if(!b)return null;let c=await k(b);if(c)return c;let d=await (0,g.getConfig)();for(let a of d.recentRepos.filter(a=>e.default.basename(a).toLowerCase()===b.toLowerCase()))if(await l(a))return j(b,a),a;let f=[],h=new Set;for(let a of d.recentRepos){let b=e.default.dirname(a);h.has(b)||(h.add(b),f.push(b))}for(let a of(d.defaultRoot&&!h.has(d.defaultRoot)&&(h.add(d.defaultRoot),f.push(d.defaultRoot)),f)){let c=await m(a,b);if(c)return j(b,c),c}return null}var o=a.i(70798),p=a.i(46534),q=a.i(13095);async function r(a){try{let b=await n(a);return{success:!0,repoPath:b}}catch(a){return console.error("Failed to resolve repository by name:",a),{success:!1,repoPath:null,error:"Failed to search repositories. Please try again."}}}function s(a){if("gitlab"!==a.type)return null;try{return new URL(a.serverUrl).hostname.toLowerCase()}catch{return null}}async function t(a,b){let c=await (0,o.getAllCredentials)(),d=(0,p.detectGitRemoteProvider)(a,{gitlabHosts:c.flatMap(a=>{if("gitlab"!==a.type)return[];let b=s(a);return b?[b]:[]})}),e=(0,p.parseGitRemoteHost)(a);if(b){let a=await (0,o.getCredentialById)(b);if(!a)return{success:!1,error:"Selected credential was not found. Please choose another credential."};if("github"===d&&"github"!==a.type)return{success:!1,error:"Selected credential does not match this GitHub repository."};if("gitlab"===d&&"gitlab"!==a.type)return{success:!1,error:"Selected credential does not match this GitLab repository."};if("gitlab"===a.type&&e){let b=s(a);if(b&&b!==e)return{success:!1,error:`Selected GitLab credential targets ${b}, but this repository uses ${e}.`}}let c=await (0,o.getCredentialToken)(a.id);return c?{success:!0,credential:a,token:c}:{success:!1,error:"Could not load token for selected credential."}}if(!d)return{success:!0,credential:null,token:null};let f=function(a,b,c){if("github"===b)return a.find(a=>"github"===a.type)||null;if(c){let b=a.find(a=>"gitlab"===a.type&&s(a)===c);if(b)return b}return a.find(a=>"gitlab"===a.type)||null}(c,d,e);if(!f)return{success:!0,credential:null,token:null};let g=await (0,o.getCredentialToken)(f.id);return g?{success:!0,credential:f,token:g}:{success:!0,credential:null,token:null}}async function u(a,b){let g=a.trim();if(!g)return{success:!1,repoPath:null,error:"Please enter a remote repository URL."};let h=function(a){let b=a.trim();if(!b)return null;let c="";try{c=new URL(b).pathname}catch{let a=b.match(/^([^@]+@)?([^:]+):(.+)$/);c=a?a[3]:b}let d=c.replace(/\\/g,"/").replace(/\/+$/,"");if(!d)return null;let f=e.default.posix.basename(d);return f&&"."!==f&&".."!==f?(f.toLowerCase().endsWith(".git")&&(f=f.slice(0,-4)),f.replace(/[^a-zA-Z0-9._-]/g,"-").replace(/^-+/,"").replace(/-+$/,"")||null):null}(g);if(!h)return{success:!1,repoPath:null,error:"Could not determine repository name from URL."};let i=e.default.join(d.default.homedir(),".viba","repos");await c.default.mkdir(i,{recursive:!0});let j=e.default.join(i,h);try{return await c.default.access(j),{success:!1,repoPath:null,error:`Repository already exists at ${j}.`}}catch{}let k=await t(g,b);if(!k.success)return{success:!1,repoPath:null,error:k.error};let l=k.credential&&k.token?function(a,b,c){let d;try{d=new URL(a)}catch{return a}return"https:"!==d.protocol&&"http:"!==d.protocol?a:("github"===b.type?d.username="x-access-token":d.username="oauth2",d.password=c,d.toString())}(g,k.credential,k.token):g,m=(0,f.default)();try{if(await m.clone(l,j),l!==g){let a=(0,f.default)(j);await a.remote(["set-url","origin",g])}return{success:!0,repoPath:j}}catch(b){let a=function(a,b){let c=a;for(let a of b)a&&(c=c.replace(RegExp(a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),"***"));return c.replace(/:\/\/[^/\s@]+@/g,"://***@")}(b instanceof Error?b.message:String(b),[l,k.token??""]);try{await c.default.rm(j,{recursive:!0,force:!0})}catch{}return{success:!1,repoPath:null,error:a||"Failed to clone repository."}}}async function v(){let a=d.default.homedir(),b=e.default.join(a,".viba","drafts");try{await c.default.mkdir(b,{recursive:!0})}catch{}return b}async function w(a){try{let b=await v(),d=e.default.basename(a.id),f=e.default.join(b,`${d}.json`);return await c.default.writeFile(f,JSON.stringify(a,null,2),"utf-8"),{success:!0}}catch(a){return console.error("Failed to save draft:",a),{success:!1,error:"Failed to save draft"}}}async function x(a){try{let b=await v(),d=(await c.default.readdir(b)).filter(a=>a.endsWith(".json")).map(async a=>{try{let d=e.default.join(b,a),f=await c.default.readFile(d,"utf-8");return JSON.parse(f)}catch(b){return console.error(`Failed to parse draft file ${a}:`,b),null}}),f=(await Promise.all(d)).filter(a=>null!==a);if(a)return f.filter(b=>b.repoPath===a).sort((a,b)=>b.timestamp.localeCompare(a.timestamp));return f.sort((a,b)=>b.timestamp.localeCompare(a.timestamp))}catch(a){if("ENOENT"===a.code)return[];return console.error("Failed to list drafts:",a),[]}}async function y(a){try{let b=await v(),d=e.default.basename(a),f=e.default.join(b,`${d}.json`);return await c.default.rm(f,{force:!0}),{success:!0}}catch(a){return console.error("Failed to delete draft:",a),{success:!1,error:"Failed to delete draft"}}}(0,q.ensureServerEntryExports)([r,u]),(0,b.registerServerReference)(r,"40078496772745d07a206c9636088dc8d94b044691",null),(0,b.registerServerReference)(u,"60195d69a92ca7d0603a7bc2d321a387de7136b1d7",null),a.s(["cloneRemoteRepository",()=>u,"resolveRepositoryByName",()=>r],98624),(0,q.ensureServerEntryExports)([w,x,y]),(0,b.registerServerReference)(w,"407507e2a2c5b89065df3c382ca9c31adae264a920",null),(0,b.registerServerReference)(x,"402638a770ee194da35a8eaed89f801d682128055e",null),(0,b.registerServerReference)(y,"40c164f805b6faaf1b88d130c43bfff6d5bdfeec6a",null),a.s(["deleteDraft",()=>y,"listDrafts",()=>x,"saveDraft",()=>w],54569)}];
|
|
1
|
+
module.exports=[37936,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(11857)},13095,(a,b,c)=>{"use strict";function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
|
|
2
|
+
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},66085,a=>{"use strict";var b=a.i(24868),c=a.i(46786),d=a.i(14747);let e="viba-agent-api-credentials",f=["codex"],g=null,h=null,i=!1;function j(a){return f.includes(a)}function k(){return h?`Secure credential storage is unavailable: ${h}`:"Secure credential storage is unavailable in this runtime."}async function l(){return g||(g=a.A(45581).then(a=>a.default??a).catch(a=>(h=a instanceof Error?a.message:String(a),i||(i=!0,console.warn(`[agent-api-credentials] ${k()}`)),null))),g}async function m(){let a=await l();if(!a)throw Error(k());return a}function n(a){return`agent-api-${a}`}function o(a){return a.keytarAccount||n(a.agent)}function p(a){return{agent:a.agent,apiProxy:a.apiProxy,createdAt:a.createdAt,updatedAt:a.updatedAt}}function q(a){return!!a&&"object"==typeof a&&"string"==typeof a.agent&&!!j(a.agent)&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt&&(void 0===a.apiProxy||"string"==typeof a.apiProxy)&&(void 0===a.keytarAccount||"string"==typeof a.keytarAccount)}async function r(){let a=d.default.join(c.default.homedir(),".viba");return await b.default.mkdir(a,{recursive:!0}),d.default.join(a,"agent-api-configs.json")}async function s(a){let c=await r();await b.default.writeFile(c,JSON.stringify(a,null,2),"utf-8")}async function t(){let a=await r();try{let c=await b.default.readFile(a,"utf-8"),d=JSON.parse(c);if(Array.isArray(d))return d.filter(q);if(!d||"object"!=typeof d)return[];let e=Object.entries(d).filter(([a])=>j(a)).map(([a,b])=>b&&"object"==typeof b?void 0===b.agent?{...b,agent:a}:b:null).filter(q);return e.length>0&&await s(e),e}catch(a){if(a?.code==="ENOENT")return[];return console.error("Failed to parse agent API credential metadata:",a),[]}}async function u(){return(await t()).map(p).sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt))}async function v(a,b,c){let d,f;if(!j(a))return{success:!1,error:`Unsupported agent: ${a}`};let g=b.trim();if(!g)return{success:!1,error:"API key is required."};try{d=function(a){let b=a.trim();if(b){try{new URL(b)}catch{throw Error("API proxy must be a valid URL.")}return b}}(c)}catch(a){return{success:!1,error:a.message}}try{f=await m()}catch(a){return{success:!1,error:a.message}}let h=await t(),i=new Date().toISOString(),k=h.findIndex(b=>b.agent===a),l=k>=0?o(h[k]):n(a);if(await f.setPassword(e,l,g),k>=0){let a=h[k];h[k]={...a,apiProxy:d,updatedAt:i,keytarAccount:l}}else h.push({agent:a,apiProxy:d,createdAt:i,updatedAt:i,keytarAccount:l});await s(h);let q=h.find(b=>b.agent===a);return q?{success:!0,credential:p(q)}:{success:!1,error:"Failed to persist agent API credential."}}async function w(a){if(!j(a))return{success:!1,error:`Unsupported agent: ${a}`};let b=await t(),c=b.findIndex(b=>b.agent===a);if(-1===c)return{success:!1,error:"Agent API credential not found."};let[d]=b.splice(c,1);await s(b);let f=await l();return f&&await f.deletePassword(e,o(d)),{success:!0}}async function x(a){if(!j(a))return null;let b=(await t()).find(b=>b.agent===a);if(!b)return null;let c=await l();if(!c)return null;let d=await c.getPassword(e,o(b));return d?{agent:b.agent,apiKey:d,apiProxy:b.apiProxy}:null}a.s(["createOrUpdateAgentApiCredential",()=>v,"deleteAgentApiCredential",()=>w,"getAgentApiCredentialSecret",()=>x,"getAllAgentApiCredentials",()=>u])},70798,a=>{"use strict";var b=a.i(24868),c=a.i(46786),d=a.i(14747);let e="viba-git-credentials",f=null,g=null,h=!1;function i(){return g?`Secure credential storage is unavailable: ${g}`:"Secure credential storage is unavailable in this runtime."}async function j(){return f||(f=a.A(45581).then(a=>a.default??a).catch(a=>(g=a instanceof Error?a.message:String(a),h||(h=!0,console.warn(`[credentials] ${i()}`)),null))),f}async function k(){let a=await j();if(!a)throw Error(i());return a}function l(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function m(a){return a.trim().replace(/\/$/,"")}function n(a){return`credential-${a}`}function o(a){return`credential-${a}`}function p(a){return a.keytarAccount||n(a.id)}function q(a){return"gitlab"===a.type?{id:a.id,type:"gitlab",username:a.username,serverUrl:a.serverUrl||"https://gitlab.com",createdAt:a.createdAt,updatedAt:a.updatedAt}:{id:a.id,type:"github",username:a.username,createdAt:a.createdAt,updatedAt:a.updatedAt}}async function r(){let a=d.default.join(c.default.homedir(),".viba");return await b.default.mkdir(a,{recursive:!0}),d.default.join(a,"credentials.json")}function s(a,b){return!!a&&"object"==typeof a&&a.type===b&&"string"==typeof a.username&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt&&("gitlab"!==b||"string"==typeof a.serverUrl)}function t(a){return!!a&&"object"==typeof a&&"string"==typeof a.id&&!!a.id.trim()&&("github"===a.type||"gitlab"===a.type)&&"string"==typeof a.username&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt&&(void 0===a.keytarAccount||"string"==typeof a.keytarAccount)&&("gitlab"!==a.type||"string"==typeof a.serverUrl)}async function u(a){let c=await r();await b.default.writeFile(c,JSON.stringify(a,null,2),"utf-8")}async function v(){let a=await r();try{let c=await b.default.readFile(a,"utf-8"),d=JSON.parse(c);if(Array.isArray(d))return d.filter(t);if(!d||"object"!=typeof d)return[];let e=[];if(s(d.github,"github")){let a=d.github;e.push({id:l(),type:"github",username:a.username,createdAt:a.createdAt,updatedAt:a.updatedAt,keytarAccount:o("github")})}if(s(d.gitlab,"gitlab")){let a=d.gitlab;e.push({id:l(),type:"gitlab",username:a.username,serverUrl:a.serverUrl,createdAt:a.createdAt,updatedAt:a.updatedAt,keytarAccount:o("gitlab")})}return e.length>0&&await u(e),e}catch(a){if(a?.code==="ENOENT")return[];return console.error("Failed to parse credentials metadata:",a),[]}}async function w(){return(await v()).map(q).sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt))}async function x(a){let b=(await v()).find(b=>b.id===a);return b?q(b):null}async function y(a){let b=(await v()).find(b=>b.id===a);if(!b)return null;let c=await j();return c?c.getPassword(e,p(b)):null}async function z(a){try{let b=await fetch("https://api.github.com/user",{headers:{Authorization:`Bearer ${a}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});if(!b.ok){if(401===b.status)return{valid:!1,error:"Invalid or expired GitHub token."};return{valid:!1,error:`GitHub API returned ${b.status}.`}}let c=await b.json(),d="string"==typeof c?.login?c.login:null;if(!d)return{valid:!1,error:"GitHub API response did not include a username."};return{valid:!0,username:d}}catch(a){return{valid:!1,error:`Failed to verify GitHub token: ${a.message}`}}}async function A(a,b){try{let c=m(a),d=await fetch(`${c}/api/v4/user`,{headers:{"PRIVATE-TOKEN":b}});if(!d.ok){if(401===d.status)return{valid:!1,error:"Invalid or expired GitLab token."};return{valid:!1,error:`GitLab API returned ${d.status}.`}}let e=await d.json(),f="string"==typeof e?.username?e.username:null;if(!f)return{valid:!1,error:"GitLab API response did not include a username."};return{valid:!0,username:f}}catch(a){return{valid:!1,error:`Failed to verify GitLab token: ${a.message}`}}}async function B(a){let b,c=a.trim();if(!c)return{success:!1,error:"GitHub token is required."};try{b=await k()}catch(a){return{success:!1,error:a.message}}let d=await z(c);if(!d.valid||!d.username)return{success:!1,error:d.error||"Failed to verify GitHub token."};let f=await v();if(f.find(a=>"github"===a.type&&a.username===d.username))return{success:!1,error:`A GitHub credential for ${d.username} already exists.`};let g=l(),h=new Date().toISOString(),i=n(g);await b.setPassword(e,i,c);let j={id:g,type:"github",username:d.username,createdAt:h,updatedAt:h,keytarAccount:i};return f.push(j),await u(f),{success:!0,credential:{id:j.id,type:"github",username:j.username,createdAt:j.createdAt,updatedAt:j.updatedAt}}}async function C(a,b){let c,d=m(a),f=b.trim();if(!d)return{success:!1,error:"GitLab server URL is required."};try{new URL(d)}catch{return{success:!1,error:"GitLab server URL must be a valid URL."}}if(!f)return{success:!1,error:"GitLab token is required."};try{c=await k()}catch(a){return{success:!1,error:a.message}}let g=await A(d,f);if(!g.valid||!g.username)return{success:!1,error:g.error||"Failed to verify GitLab token."};let h=await v();if(h.find(a=>"gitlab"===a.type&&a.username===g.username&&a.serverUrl===d))return{success:!1,error:`A GitLab credential for ${g.username} on ${d} already exists.`};let i=l(),j=new Date().toISOString(),o=n(i);await c.setPassword(e,o,f);let p={id:i,type:"gitlab",username:g.username,serverUrl:d,createdAt:j,updatedAt:j,keytarAccount:o};return h.push(p),await u(h),{success:!0,credential:{id:p.id,type:"gitlab",username:p.username,serverUrl:p.serverUrl||d,createdAt:p.createdAt,updatedAt:p.updatedAt}}}async function D(a){let b=await v(),c=b.findIndex(b=>b.id===a);if(-1===c)return{success:!1,error:"Credential not found."};let d=b[c];b.splice(c,1),await u(b);let f=await j();return f&&await f.deletePassword(e,p(d)),{success:!0}}a.s(["createGitHubCredential",()=>B,"createGitLabCredential",()=>C,"deleteCredential",()=>D,"getAllCredentials",()=>w,"getCredentialById",()=>x,"getCredentialToken",()=>y])},37359,a=>{"use strict";var b=a.i(37936),c=a.i(70798),d=a.i(66085);async function e(){try{let a=await (0,c.getAllCredentials)();return{success:!0,credentials:a}}catch(a){return console.error("Failed to list credentials:",a),{success:!1,error:"Failed to load credentials."}}}async function f(a){let b=await (0,c.createGitHubCredential)(a);return b.success&&b.credential?{success:!0,credential:b.credential}:{success:!1,error:b.error||"Failed to save GitHub credential."}}async function g(a,b){let d=await (0,c.createGitLabCredential)(a,b);return d.success&&d.credential?{success:!0,credential:d.credential}:{success:!1,error:d.error||"Failed to save GitLab credential."}}async function h(){try{let a=await (0,d.getAllAgentApiCredentials)();return{success:!0,credentials:a}}catch(a){return console.error("Failed to list agent API credentials:",a),{success:!1,error:"Failed to load agent API credentials."}}}async function i(a,b,c){let e=await (0,d.createOrUpdateAgentApiCredential)(a,b,c);return e.success&&e.credential?{success:!0,credential:e.credential}:{success:!1,error:e.error||"Failed to save agent API credential."}}async function j(a){try{let b=await (0,c.deleteCredential)(a);if(!b.success)return{success:!1,error:b.error||"Failed to remove credential."};return{success:!0}}catch(a){return console.error("Failed to remove credential:",a),{success:!1,error:"Failed to remove credential."}}}async function k(a){try{let b=await (0,d.deleteAgentApiCredential)(a);if(!b.success)return{success:!1,error:b.error||"Failed to remove agent API credential."};return{success:!0}}catch(a){return console.error("Failed to remove agent API credential:",a),{success:!1,error:"Failed to remove agent API credential."}}}(0,a.i(13095).ensureServerEntryExports)([e,f,g,h,i,j,k]),(0,b.registerServerReference)(e,"0024cd8264923ac29ca23ec9b72eb8f41d4e4f5b3c",null),(0,b.registerServerReference)(f,"4051c0a28158f8a13e906979f4ce747a6742aec465",null),(0,b.registerServerReference)(g,"60a5c56e15d312abf810cd94da5c0d1ee2319b6d57",null),(0,b.registerServerReference)(h,"001b884a80812d1f61dbae458988c02181906ec73c",null),(0,b.registerServerReference)(i,"702c26c6b9bfd4c586d26c0ecfa3f8f7b5f4fe8e0e",null),(0,b.registerServerReference)(j,"4091a8490f9bd089a13eb2593806dc5116ab4cd96f",null),(0,b.registerServerReference)(k,"40011c9b66bdc21f5472590decf1be3cc9562cd1c5",null),a.s(["listAgentApiCredentials",()=>h,"listCredentials",()=>e,"removeAgentApiCredential",()=>k,"removeCredential",()=>j,"saveAgentApiCredential",()=>i,"saveGitHubCredential",()=>f,"saveGitLabCredential",()=>g])}];
|
|
3
3
|
|
|
4
|
-
//# sourceMappingURL
|
|
4
|
+
//# sourceMappingURL=_476e86d1._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/next/src/build/webpack/loaders/next-flight-loader/server-reference.ts","../../../../node_modules/next/src/build/webpack/loaders/next-flight-loader/action-validate.ts","../../../../src/lib/agent-api-credentials.ts","../../../../src/lib/credentials.ts","../../../../src/app/actions/credentials.ts"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nexport { registerServerReference } from 'react-server-dom-webpack/server'\n","// This function ensures that all the exported values are valid server actions,\n// during the runtime. By definition all actions are required to be async\n// functions, but here we can only check that they are functions.\nexport function ensureServerEntryExports(actions: any[]) {\n for (let i = 0; i < actions.length; i++) {\n const action = actions[i]\n if (typeof action !== 'function') {\n throw new Error(\n `A \"use server\" file can only export async functions, found ${typeof action}.\\nRead more: https://nextjs.org/docs/messages/invalid-use-server-value`\n )\n }\n }\n}\n","import fs from 'fs/promises';\nimport os from 'os';\nimport path from 'path';\n\nconst SERVICE_NAME = 'viba-agent-api-credentials';\nconst CONFIGS_FILE_NAME = 'agent-api-configs.json';\nconst SUPPORTED_AGENT_APIS = ['codex'] as const;\n\nexport type AgentApiCredentialAgent = typeof SUPPORTED_AGENT_APIS[number];\n\nexport interface AgentApiCredential {\n agent: AgentApiCredentialAgent;\n apiProxy?: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface AgentApiCredentialSecret {\n agent: AgentApiCredentialAgent;\n apiKey: string;\n apiProxy?: string;\n}\n\ntype AgentApiCredentialMetadata = {\n agent: AgentApiCredentialAgent;\n apiProxy?: string;\n createdAt: string;\n updatedAt: string;\n keytarAccount?: string;\n};\n\ntype KeytarModule = {\n getPassword(service: string, account: string): Promise<string | null>;\n setPassword(service: string, account: string, password: string): Promise<void>;\n deletePassword(service: string, account: string): Promise<boolean>;\n};\n\nlet keytarPromise: Promise<KeytarModule | null> | null = null;\nlet keytarUnavailableReason: string | null = null;\nlet didLogKeytarWarning = false;\n\nfunction isSupportedAgentApi(value: string): value is AgentApiCredentialAgent {\n return SUPPORTED_AGENT_APIS.includes(value as AgentApiCredentialAgent);\n}\n\nfunction keytarUnavailableMessage(): string {\n if (keytarUnavailableReason) {\n return `Secure credential storage is unavailable: ${keytarUnavailableReason}`;\n }\n return 'Secure credential storage is unavailable in this runtime.';\n}\n\nasync function loadKeytar(): Promise<KeytarModule | null> {\n if (!keytarPromise) {\n keytarPromise = import('keytar')\n .then((module) => (module.default ?? module) as KeytarModule)\n .catch((error: unknown) => {\n keytarUnavailableReason = error instanceof Error ? error.message : String(error);\n if (!didLogKeytarWarning) {\n didLogKeytarWarning = true;\n console.warn(`[agent-api-credentials] ${keytarUnavailableMessage()}`);\n }\n return null;\n });\n }\n\n return keytarPromise;\n}\n\nasync function requireKeytar(): Promise<KeytarModule> {\n const keytar = await loadKeytar();\n if (!keytar) {\n throw new Error(keytarUnavailableMessage());\n }\n return keytar;\n}\n\nfunction getDefaultKeytarAccount(agent: AgentApiCredentialAgent): string {\n return `agent-api-${agent}`;\n}\n\nfunction getKeytarAccountForMetadata(metadata: AgentApiCredentialMetadata): string {\n return metadata.keytarAccount || getDefaultKeytarAccount(metadata.agent);\n}\n\nfunction normalizeApiProxy(apiProxy: string): string | undefined {\n const trimmed = apiProxy.trim();\n if (!trimmed) return undefined;\n\n try {\n // Validate and persist as-entered once it is a valid URL.\n new URL(trimmed);\n } catch {\n throw new Error('API proxy must be a valid URL.');\n }\n\n return trimmed;\n}\n\nfunction toAgentApiCredential(metadata: AgentApiCredentialMetadata): AgentApiCredential {\n return {\n agent: metadata.agent,\n apiProxy: metadata.apiProxy,\n createdAt: metadata.createdAt,\n updatedAt: metadata.updatedAt,\n };\n}\n\nfunction isAgentApiCredentialMetadata(value: unknown): value is AgentApiCredentialMetadata {\n if (!value || typeof value !== 'object') return false;\n\n const candidate = value as Record<string, unknown>;\n if (typeof candidate.agent !== 'string' || !isSupportedAgentApi(candidate.agent)) return false;\n if (typeof candidate.createdAt !== 'string') return false;\n if (typeof candidate.updatedAt !== 'string') return false;\n if (candidate.apiProxy !== undefined && typeof candidate.apiProxy !== 'string') return false;\n if (candidate.keytarAccount !== undefined && typeof candidate.keytarAccount !== 'string') return false;\n\n return true;\n}\n\nasync function getConfigsFilePath(): Promise<string> {\n const vibaDir = path.join(os.homedir(), '.viba');\n await fs.mkdir(vibaDir, { recursive: true });\n return path.join(vibaDir, CONFIGS_FILE_NAME);\n}\n\nasync function writeAgentApiCredentialMetadata(metadata: AgentApiCredentialMetadata[]): Promise<void> {\n const configsFilePath = await getConfigsFilePath();\n await fs.writeFile(configsFilePath, JSON.stringify(metadata, null, 2), 'utf-8');\n}\n\nasync function readAgentApiCredentialMetadata(): Promise<AgentApiCredentialMetadata[]> {\n const configsFilePath = await getConfigsFilePath();\n\n try {\n const content = await fs.readFile(configsFilePath, 'utf-8');\n const parsed = JSON.parse(content) as unknown;\n\n if (Array.isArray(parsed)) {\n return parsed.filter(isAgentApiCredentialMetadata);\n }\n\n if (!parsed || typeof parsed !== 'object') {\n return [];\n }\n\n // Legacy map shape: { codex: { ... }, ... }\n const entries = Object.entries(parsed as Record<string, unknown>);\n const migrated = entries\n .filter(([agent]) => isSupportedAgentApi(agent))\n .map(([agent, value]) => {\n if (!value || typeof value !== 'object') return null;\n const candidate = value as Record<string, unknown>;\n if (candidate.agent === undefined) {\n return {\n ...candidate,\n agent,\n } as unknown;\n }\n return candidate;\n })\n .filter(isAgentApiCredentialMetadata);\n\n if (migrated.length > 0) {\n await writeAgentApiCredentialMetadata(migrated);\n }\n\n return migrated;\n } catch (error) {\n if ((error as NodeJS.ErrnoException)?.code === 'ENOENT') {\n return [];\n }\n\n console.error('Failed to parse agent API credential metadata:', error);\n return [];\n }\n}\n\nexport async function getAllAgentApiCredentials(): Promise<AgentApiCredential[]> {\n const metadata = await readAgentApiCredentialMetadata();\n return metadata\n .map(toAgentApiCredential)\n .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));\n}\n\nexport async function createOrUpdateAgentApiCredential(\n agent: AgentApiCredentialAgent,\n apiKey: string,\n apiProxy: string,\n): Promise<{ success: boolean; credential?: AgentApiCredential; error?: string }> {\n if (!isSupportedAgentApi(agent)) {\n return { success: false, error: `Unsupported agent: ${agent}` };\n }\n\n const trimmedApiKey = apiKey.trim();\n if (!trimmedApiKey) {\n return { success: false, error: 'API key is required.' };\n }\n\n let normalizedApiProxy: string | undefined;\n try {\n normalizedApiProxy = normalizeApiProxy(apiProxy);\n } catch (error) {\n return { success: false, error: (error as Error).message };\n }\n\n let keytar: KeytarModule;\n try {\n keytar = await requireKeytar();\n } catch (error) {\n return { success: false, error: (error as Error).message };\n }\n\n const metadata = await readAgentApiCredentialMetadata();\n const now = new Date().toISOString();\n const index = metadata.findIndex((credential) => credential.agent === agent);\n const keytarAccount = index >= 0\n ? getKeytarAccountForMetadata(metadata[index])\n : getDefaultKeytarAccount(agent);\n\n await keytar.setPassword(SERVICE_NAME, keytarAccount, trimmedApiKey);\n\n if (index >= 0) {\n const existing = metadata[index];\n metadata[index] = {\n ...existing,\n apiProxy: normalizedApiProxy,\n updatedAt: now,\n keytarAccount,\n };\n } else {\n metadata.push({\n agent,\n apiProxy: normalizedApiProxy,\n createdAt: now,\n updatedAt: now,\n keytarAccount,\n });\n }\n\n await writeAgentApiCredentialMetadata(metadata);\n\n const saved = metadata.find((credential) => credential.agent === agent);\n if (!saved) {\n return { success: false, error: 'Failed to persist agent API credential.' };\n }\n\n return { success: true, credential: toAgentApiCredential(saved) };\n}\n\nexport async function deleteAgentApiCredential(\n agent: AgentApiCredentialAgent,\n): Promise<{ success: boolean; error?: string }> {\n if (!isSupportedAgentApi(agent)) {\n return { success: false, error: `Unsupported agent: ${agent}` };\n }\n\n const metadata = await readAgentApiCredentialMetadata();\n const index = metadata.findIndex((credential) => credential.agent === agent);\n if (index === -1) {\n return { success: false, error: 'Agent API credential not found.' };\n }\n\n const [removed] = metadata.splice(index, 1);\n await writeAgentApiCredentialMetadata(metadata);\n\n const keytar = await loadKeytar();\n if (keytar) {\n await keytar.deletePassword(SERVICE_NAME, getKeytarAccountForMetadata(removed));\n }\n\n return { success: true };\n}\n\nexport async function getAgentApiCredentialSecret(\n agent: AgentApiCredentialAgent,\n): Promise<AgentApiCredentialSecret | null> {\n if (!isSupportedAgentApi(agent)) {\n return null;\n }\n\n const metadata = await readAgentApiCredentialMetadata();\n const found = metadata.find((credential) => credential.agent === agent);\n if (!found) {\n return null;\n }\n\n const keytar = await loadKeytar();\n if (!keytar) {\n return null;\n }\n\n const apiKey = await keytar.getPassword(SERVICE_NAME, getKeytarAccountForMetadata(found));\n if (!apiKey) {\n return null;\n }\n\n return {\n agent: found.agent,\n apiKey,\n apiProxy: found.apiProxy,\n };\n}\n","import fs from 'fs/promises';\nimport os from 'os';\nimport path from 'path';\n\nconst SERVICE_NAME = 'viba-git-credentials';\nconst CREDENTIALS_FILE_NAME = 'credentials.json';\n\nexport type CredentialType = 'github' | 'gitlab';\n\nexport interface BaseCredential {\n id: string;\n type: CredentialType;\n username: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface GitHubCredential extends BaseCredential {\n type: 'github';\n}\n\nexport interface GitLabCredential extends BaseCredential {\n type: 'gitlab';\n serverUrl: string;\n}\n\nexport type Credential = GitHubCredential | GitLabCredential;\n\ntype CredentialMetadata = {\n id: string;\n type: CredentialType;\n username: string;\n serverUrl?: string;\n createdAt: string;\n updatedAt: string;\n keytarAccount?: string;\n};\n\ntype LegacyCredentialMetadata = {\n type: CredentialType;\n username: string;\n serverUrl?: string;\n createdAt: string;\n updatedAt: string;\n};\n\ntype KeytarModule = {\n getPassword(service: string, account: string): Promise<string | null>;\n setPassword(service: string, account: string, password: string): Promise<void>;\n deletePassword(service: string, account: string): Promise<boolean>;\n};\n\nlet keytarPromise: Promise<KeytarModule | null> | null = null;\nlet keytarUnavailableReason: string | null = null;\nlet didLogKeytarWarning = false;\n\nfunction keytarUnavailableMessage(): string {\n if (keytarUnavailableReason) {\n return `Secure credential storage is unavailable: ${keytarUnavailableReason}`;\n }\n return 'Secure credential storage is unavailable in this runtime.';\n}\n\nasync function loadKeytar(): Promise<KeytarModule | null> {\n if (!keytarPromise) {\n keytarPromise = import('keytar')\n .then((module) => (module.default ?? module) as KeytarModule)\n .catch((error: unknown) => {\n keytarUnavailableReason = error instanceof Error ? error.message : String(error);\n if (!didLogKeytarWarning) {\n didLogKeytarWarning = true;\n console.warn(`[credentials] ${keytarUnavailableMessage()}`);\n }\n return null;\n });\n }\n\n return keytarPromise;\n}\n\nasync function requireKeytar(): Promise<KeytarModule> {\n const keytar = await loadKeytar();\n if (!keytar) {\n throw new Error(keytarUnavailableMessage());\n }\n return keytar;\n}\n\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n}\n\nfunction normalizeGitLabServerUrl(serverUrl: string): string {\n return serverUrl.trim().replace(/\\/$/, '');\n}\n\nfunction getDefaultKeytarAccount(id: string): string {\n return `credential-${id}`;\n}\n\nfunction getLegacyKeytarAccount(type: CredentialType): string {\n return `credential-${type}`;\n}\n\nfunction getKeytarAccountForMetadata(metadata: CredentialMetadata): string {\n return metadata.keytarAccount || getDefaultKeytarAccount(metadata.id);\n}\n\nfunction toCredential(metadata: CredentialMetadata): Credential {\n if (metadata.type === 'gitlab') {\n return {\n id: metadata.id,\n type: 'gitlab',\n username: metadata.username,\n serverUrl: metadata.serverUrl || 'https://gitlab.com',\n createdAt: metadata.createdAt,\n updatedAt: metadata.updatedAt,\n };\n }\n\n return {\n id: metadata.id,\n type: 'github',\n username: metadata.username,\n createdAt: metadata.createdAt,\n updatedAt: metadata.updatedAt,\n };\n}\n\nasync function getCredentialsFilePath(): Promise<string> {\n const vibaDir = path.join(os.homedir(), '.viba');\n await fs.mkdir(vibaDir, { recursive: true });\n return path.join(vibaDir, CREDENTIALS_FILE_NAME);\n}\n\nfunction isLegacyCredentialMetadata(value: unknown, expectedType: CredentialType): value is LegacyCredentialMetadata {\n if (!value || typeof value !== 'object') return false;\n\n const candidate = value as Record<string, unknown>;\n if (candidate.type !== expectedType) return false;\n if (typeof candidate.username !== 'string') return false;\n if (typeof candidate.createdAt !== 'string') return false;\n if (typeof candidate.updatedAt !== 'string') return false;\n\n if (expectedType === 'gitlab') {\n return typeof candidate.serverUrl === 'string';\n }\n\n return true;\n}\n\nfunction isCredentialMetadata(value: unknown): value is CredentialMetadata {\n if (!value || typeof value !== 'object') return false;\n\n const candidate = value as Record<string, unknown>;\n if (typeof candidate.id !== 'string' || !candidate.id.trim()) return false;\n if (candidate.type !== 'github' && candidate.type !== 'gitlab') return false;\n if (typeof candidate.username !== 'string') return false;\n if (typeof candidate.createdAt !== 'string') return false;\n if (typeof candidate.updatedAt !== 'string') return false;\n if (candidate.keytarAccount !== undefined && typeof candidate.keytarAccount !== 'string') return false;\n\n if (candidate.type === 'gitlab') {\n return typeof candidate.serverUrl === 'string';\n }\n\n return true;\n}\n\nasync function writeCredentialsMetadata(metadata: CredentialMetadata[]): Promise<void> {\n const credentialsFilePath = await getCredentialsFilePath();\n await fs.writeFile(credentialsFilePath, JSON.stringify(metadata, null, 2), 'utf-8');\n}\n\nasync function readCredentialsMetadata(): Promise<CredentialMetadata[]> {\n const credentialsFilePath = await getCredentialsFilePath();\n\n try {\n const content = await fs.readFile(credentialsFilePath, 'utf-8');\n const parsed = JSON.parse(content) as unknown;\n\n if (Array.isArray(parsed)) {\n return parsed.filter(isCredentialMetadata);\n }\n\n if (!parsed || typeof parsed !== 'object') {\n return [];\n }\n\n const legacyMapped = parsed as Record<string, unknown>;\n const migrated: CredentialMetadata[] = [];\n\n if (isLegacyCredentialMetadata(legacyMapped.github, 'github')) {\n const metadata = legacyMapped.github;\n migrated.push({\n id: generateId(),\n type: 'github',\n username: metadata.username,\n createdAt: metadata.createdAt,\n updatedAt: metadata.updatedAt,\n keytarAccount: getLegacyKeytarAccount('github'),\n });\n }\n\n if (isLegacyCredentialMetadata(legacyMapped.gitlab, 'gitlab')) {\n const metadata = legacyMapped.gitlab;\n migrated.push({\n id: generateId(),\n type: 'gitlab',\n username: metadata.username,\n serverUrl: metadata.serverUrl,\n createdAt: metadata.createdAt,\n updatedAt: metadata.updatedAt,\n keytarAccount: getLegacyKeytarAccount('gitlab'),\n });\n }\n\n if (migrated.length > 0) {\n await writeCredentialsMetadata(migrated);\n }\n\n return migrated;\n } catch (error) {\n if ((error as NodeJS.ErrnoException)?.code === 'ENOENT') {\n return [];\n }\n\n console.error('Failed to parse credentials metadata:', error);\n return [];\n }\n}\n\nexport async function getAllCredentials(): Promise<Credential[]> {\n const metadata = await readCredentialsMetadata();\n\n return metadata\n .map(toCredential)\n .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));\n}\n\nexport async function getCredentialById(id: string): Promise<Credential | null> {\n const metadata = await readCredentialsMetadata();\n const found = metadata.find((credential) => credential.id === id);\n return found ? toCredential(found) : null;\n}\n\nexport async function getCredentialToken(id: string): Promise<string | null> {\n const metadata = await readCredentialsMetadata();\n const found = metadata.find((credential) => credential.id === id);\n if (!found) {\n return null;\n }\n\n const keytar = await loadKeytar();\n if (!keytar) {\n return null;\n }\n\n return keytar.getPassword(SERVICE_NAME, getKeytarAccountForMetadata(found));\n}\n\nasync function verifyGitHubToken(token: string): Promise<{ valid: boolean; username?: string; error?: string }> {\n try {\n const response = await fetch('https://api.github.com/user', {\n headers: {\n Authorization: `Bearer ${token}`,\n Accept: 'application/vnd.github+json',\n 'X-GitHub-Api-Version': '2022-11-28',\n },\n });\n\n if (!response.ok) {\n if (response.status === 401) {\n return { valid: false, error: 'Invalid or expired GitHub token.' };\n }\n return { valid: false, error: `GitHub API returned ${response.status}.` };\n }\n\n const data = await response.json();\n const username = typeof data?.login === 'string' ? data.login : null;\n if (!username) {\n return { valid: false, error: 'GitHub API response did not include a username.' };\n }\n\n return { valid: true, username };\n } catch (error) {\n return { valid: false, error: `Failed to verify GitHub token: ${(error as Error).message}` };\n }\n}\n\nasync function verifyGitLabToken(serverUrl: string, token: string): Promise<{ valid: boolean; username?: string; error?: string }> {\n try {\n const normalizedUrl = normalizeGitLabServerUrl(serverUrl);\n const response = await fetch(`${normalizedUrl}/api/v4/user`, {\n headers: {\n 'PRIVATE-TOKEN': token,\n },\n });\n\n if (!response.ok) {\n if (response.status === 401) {\n return { valid: false, error: 'Invalid or expired GitLab token.' };\n }\n return { valid: false, error: `GitLab API returned ${response.status}.` };\n }\n\n const data = await response.json();\n const username = typeof data?.username === 'string' ? data.username : null;\n if (!username) {\n return { valid: false, error: 'GitLab API response did not include a username.' };\n }\n\n return { valid: true, username };\n } catch (error) {\n return { valid: false, error: `Failed to verify GitLab token: ${(error as Error).message}` };\n }\n}\n\nexport async function createGitHubCredential(token: string): Promise<{ success: boolean; credential?: GitHubCredential; error?: string }> {\n const trimmedToken = token.trim();\n if (!trimmedToken) {\n return { success: false, error: 'GitHub token is required.' };\n }\n\n let keytar: KeytarModule;\n try {\n keytar = await requireKeytar();\n } catch (error) {\n return { success: false, error: (error as Error).message };\n }\n\n const verification = await verifyGitHubToken(trimmedToken);\n if (!verification.valid || !verification.username) {\n return { success: false, error: verification.error || 'Failed to verify GitHub token.' };\n }\n\n const metadata = await readCredentialsMetadata();\n const duplicate = metadata.find((credential) => (\n credential.type === 'github'\n && credential.username === verification.username\n ));\n\n if (duplicate) {\n return { success: false, error: `A GitHub credential for ${verification.username} already exists.` };\n }\n\n const id = generateId();\n const now = new Date().toISOString();\n const keytarAccount = getDefaultKeytarAccount(id);\n\n await keytar.setPassword(SERVICE_NAME, keytarAccount, trimmedToken);\n\n const created: CredentialMetadata = {\n id,\n type: 'github',\n username: verification.username,\n createdAt: now,\n updatedAt: now,\n keytarAccount,\n };\n\n metadata.push(created);\n await writeCredentialsMetadata(metadata);\n\n return {\n success: true,\n credential: {\n id: created.id,\n type: 'github',\n username: created.username,\n createdAt: created.createdAt,\n updatedAt: created.updatedAt,\n },\n };\n}\n\nexport async function createGitLabCredential(\n serverUrl: string,\n token: string,\n): Promise<{ success: boolean; credential?: GitLabCredential; error?: string }> {\n const normalizedServerUrl = normalizeGitLabServerUrl(serverUrl);\n const trimmedToken = token.trim();\n\n if (!normalizedServerUrl) {\n return { success: false, error: 'GitLab server URL is required.' };\n }\n\n try {\n new URL(normalizedServerUrl);\n } catch {\n return { success: false, error: 'GitLab server URL must be a valid URL.' };\n }\n\n if (!trimmedToken) {\n return { success: false, error: 'GitLab token is required.' };\n }\n\n let keytar: KeytarModule;\n try {\n keytar = await requireKeytar();\n } catch (error) {\n return { success: false, error: (error as Error).message };\n }\n\n const verification = await verifyGitLabToken(normalizedServerUrl, trimmedToken);\n if (!verification.valid || !verification.username) {\n return { success: false, error: verification.error || 'Failed to verify GitLab token.' };\n }\n\n const metadata = await readCredentialsMetadata();\n const duplicate = metadata.find((credential) => (\n credential.type === 'gitlab'\n && credential.username === verification.username\n && credential.serverUrl === normalizedServerUrl\n ));\n\n if (duplicate) {\n return {\n success: false,\n error: `A GitLab credential for ${verification.username} on ${normalizedServerUrl} already exists.`,\n };\n }\n\n const id = generateId();\n const now = new Date().toISOString();\n const keytarAccount = getDefaultKeytarAccount(id);\n\n await keytar.setPassword(SERVICE_NAME, keytarAccount, trimmedToken);\n\n const created: CredentialMetadata = {\n id,\n type: 'gitlab',\n username: verification.username,\n serverUrl: normalizedServerUrl,\n createdAt: now,\n updatedAt: now,\n keytarAccount,\n };\n\n metadata.push(created);\n await writeCredentialsMetadata(metadata);\n\n return {\n success: true,\n credential: {\n id: created.id,\n type: 'gitlab',\n username: created.username,\n serverUrl: created.serverUrl || normalizedServerUrl,\n createdAt: created.createdAt,\n updatedAt: created.updatedAt,\n },\n };\n}\n\nexport async function deleteCredential(id: string): Promise<{ success: boolean; error?: string }> {\n const metadata = await readCredentialsMetadata();\n const index = metadata.findIndex((credential) => credential.id === id);\n\n if (index === -1) {\n return { success: false, error: 'Credential not found.' };\n }\n\n const credential = metadata[index];\n metadata.splice(index, 1);\n await writeCredentialsMetadata(metadata);\n\n const keytar = await loadKeytar();\n if (keytar) {\n await keytar.deletePassword(SERVICE_NAME, getKeytarAccountForMetadata(credential));\n }\n\n return { success: true };\n}\n\nexport async function updateCredential(id: string, token: string): Promise<{ success: boolean; credential?: Credential; error?: string }> {\n const trimmedToken = token.trim();\n if (!trimmedToken) {\n return { success: false, error: 'Token is required.' };\n }\n\n let keytar: KeytarModule;\n try {\n keytar = await requireKeytar();\n } catch (error) {\n return { success: false, error: (error as Error).message };\n }\n\n const metadata = await readCredentialsMetadata();\n const index = metadata.findIndex((c) => c.id === id);\n\n if (index === -1) {\n return { success: false, error: 'Credential not found' };\n }\n\n const existing = metadata[index];\n\n // Verify the new token\n let verification;\n if (existing.type === 'github') {\n verification = await verifyGitHubToken(trimmedToken);\n } else {\n verification = await verifyGitLabToken(existing.serverUrl || 'https://gitlab.com', trimmedToken);\n }\n\n if (!verification.valid || !verification.username) {\n return { success: false, error: verification.error || 'Failed to verify token' };\n }\n\n // Update token in keytar\n await keytar.setPassword(SERVICE_NAME, getKeytarAccountForMetadata(existing), trimmedToken);\n\n // Update metadata\n const now = new Date().toISOString();\n metadata[index] = {\n ...existing,\n username: verification.username,\n updatedAt: now,\n };\n await writeCredentialsMetadata(metadata);\n\n return {\n success: true,\n credential: toCredential(metadata[index]),\n };\n}\n\nexport async function findCredentialForRemote(remoteUrl: string): Promise<{ credential: Credential; token: string } | null> {\n const credentials = await getAllCredentials();\n\n // Check if it's a GitHub URL\n if (remoteUrl.includes('github.com')) {\n const githubCred = credentials.find((c) => c.type === 'github');\n if (githubCred) {\n const token = await getCredentialToken(githubCred.id);\n if (token) {\n return { credential: githubCred, token };\n }\n }\n }\n\n // Check GitLab servers\n for (const cred of credentials) {\n if (cred.type === 'gitlab') {\n // Extract host from remote URL\n let host: string;\n try {\n if (remoteUrl.startsWith('git@')) {\n // SSH URL: git@gitlab.com:user/repo.git\n host = remoteUrl.split('@')[1].split(':')[0];\n } else {\n // HTTP URL\n host = new URL(remoteUrl).host;\n }\n } catch {\n continue;\n }\n\n // Check if the credential's server URL matches\n const credHost = new URL(cred.serverUrl).host;\n if (host === credHost) {\n const token = await getCredentialToken(cred.id);\n if (token) {\n return { credential: cred, token };\n }\n }\n }\n }\n\n return null;\n}\n\n","'use server';\n\nimport {\n createGitHubCredential,\n createGitLabCredential,\n deleteCredential,\n getAllCredentials,\n} from '@/lib/credentials';\nimport type { Credential } from '@/lib/credentials';\nimport {\n createOrUpdateAgentApiCredential,\n deleteAgentApiCredential,\n getAllAgentApiCredentials,\n} from '@/lib/agent-api-credentials';\nimport type {\n AgentApiCredential,\n AgentApiCredentialAgent,\n} from '@/lib/agent-api-credentials';\n\ntype ListCredentialsResult =\n | { success: true; credentials: Credential[] }\n | { success: false; error: string };\n\nexport async function listCredentials(): Promise<ListCredentialsResult> {\n try {\n const credentials = await getAllCredentials();\n return { success: true, credentials };\n } catch (error) {\n console.error('Failed to list credentials:', error);\n return { success: false, error: 'Failed to load credentials.' };\n }\n}\n\ntype SaveCredentialResult =\n | { success: true; credential: Credential }\n | { success: false; error: string };\n\nexport async function saveGitHubCredential(token: string): Promise<SaveCredentialResult> {\n const result = await createGitHubCredential(token);\n if (!result.success || !result.credential) {\n return { success: false, error: result.error || 'Failed to save GitHub credential.' };\n }\n\n return { success: true, credential: result.credential };\n}\n\nexport async function saveGitLabCredential(serverUrl: string, token: string): Promise<SaveCredentialResult> {\n const result = await createGitLabCredential(serverUrl, token);\n if (!result.success || !result.credential) {\n return { success: false, error: result.error || 'Failed to save GitLab credential.' };\n }\n\n return { success: true, credential: result.credential };\n}\n\ntype ListAgentApiCredentialsResult =\n | { success: true; credentials: AgentApiCredential[] }\n | { success: false; error: string };\n\nexport async function listAgentApiCredentials(): Promise<ListAgentApiCredentialsResult> {\n try {\n const credentials = await getAllAgentApiCredentials();\n return { success: true, credentials };\n } catch (error) {\n console.error('Failed to list agent API credentials:', error);\n return { success: false, error: 'Failed to load agent API credentials.' };\n }\n}\n\ntype SaveAgentApiCredentialResult =\n | { success: true; credential: AgentApiCredential }\n | { success: false; error: string };\n\nexport async function saveAgentApiCredential(\n agent: AgentApiCredentialAgent,\n apiKey: string,\n apiProxy: string,\n): Promise<SaveAgentApiCredentialResult> {\n const result = await createOrUpdateAgentApiCredential(agent, apiKey, apiProxy);\n if (!result.success || !result.credential) {\n return { success: false, error: result.error || 'Failed to save agent API credential.' };\n }\n\n return { success: true, credential: result.credential };\n}\n\ntype RemoveCredentialResult =\n | { success: true }\n | { success: false; error: string };\n\nexport async function removeCredential(id: string): Promise<RemoveCredentialResult> {\n try {\n const result = await deleteCredential(id);\n if (!result.success) {\n return { success: false, error: result.error || 'Failed to remove credential.' };\n }\n\n return { success: true };\n } catch (error) {\n console.error('Failed to remove credential:', error);\n return { success: false, error: 'Failed to remove credential.' };\n }\n}\n\nexport async function removeAgentApiCredential(agent: AgentApiCredentialAgent): Promise<RemoveCredentialResult> {\n try {\n const result = await deleteAgentApiCredential(agent);\n if (!result.success) {\n return { success: false, error: result.error || 'Failed to remove agent API credential.' };\n }\n\n return { success: true };\n } catch (error) {\n console.error('Failed to remove agent API credential:', error);\n return { success: false, error: 'Failed to remove agent API credential.' };\n }\n}\n"],"names":["registerServerReference","ensureServerEntryExports","actions","i","length","action","Error"],"mappings":"6CAAoD,OAAA,cAAA,CAAA,EAAA,aAAA,oCAC3CA,0BAAAA,qCAAAA,EAAAA,uBAAuB,YAAQ,CAAA,CAAA,IAAA,iCCEjC,SAASC,EAAyBC,CAAc,EACrD,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAQE,MAAM,CAAED,IAAK,CACvC,IAAME,EAASH,CAAO,CAACC,EAAE,CACzB,GAAsB,YAAlB,AAA8B,OAAvBE,EACT,MAAM,OAAA,cAEL,CAFK,AAAIC,MACR,CAAC,2DAA2D,EAAE,OAAOD,EAAO;AAAA,oEAAuE,CAAC,EADhJ,oBAAA,OAAA,mBAAA,gBAAA,CAEN,EAEJ,CACF,0EATgBJ,2BAAAA,qCAAAA,6BCHhB,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAEA,IAAM,EAAe,6BAEf,EAAuB,CAAC,QAAQ,CA+BlC,EAAqD,KACrD,EAAyC,KACzC,GAAsB,EAE1B,SAAS,EAAoB,CAAa,EACxC,OAAO,EAAqB,QAAQ,CAAC,EACvC,CAEA,SAAS,WACP,AAAI,EACK,CAAC,sBADmB,oBACuB,EAAE,EAAA,CAAyB,CAExE,2DACT,CAEA,eAAe,IAcb,OAbK,AAAD,IACF,EAAgB,EAAA,CAAA,CAAA,KADE,EAEf,IAAI,CAAC,AAAC,GAAY,EAAO,OAAO,EAAI,GACpC,KAAK,CAAC,AAAC,IACN,EAA0B,aAAiB,MAAQ,EAAM,OAAO,CAAG,OAAO,GACrE,IACH,GAAsB,EACtB,QAAQ,IAFgB,AAEZ,CAAC,CAAC,wBAAwB,EAAE,IAAA,CAA4B,GAE/D,MACT,EAGG,CACT,CAEA,eAAe,IACb,IAAM,EAAS,MAAM,IACrB,GAAI,CAAC,EACH,MADW,AACL,AAAI,MAAM,KAElB,OAAO,CACT,CAEA,SAAS,EAAwB,CAA8B,EAC7D,MAAO,CAAC,UAAU,EAAE,EAAA,CAAO,AAC7B,CAEA,SAAS,EAA4B,CAAoC,EACvE,OAAO,EAAS,aAAa,EAAI,EAAwB,EAAS,KAAK,CACzE,CAgBA,SAAS,EAAqB,CAAoC,EAChE,MAAO,CACL,MAAO,EAAS,KAAK,CACrB,SAAU,EAAS,QAAQ,CAC3B,UAAW,EAAS,SAAS,CAC7B,UAAW,EAAS,SAAS,AAC/B,CACF,CAEA,SAAS,EAA6B,CAAc,QAClD,CAAI,CAAC,GAA0B,UAAjB,AAA2B,OAApB,AAA2B,GAGjB,UAA3B,OAAO,EAAU,KAAK,GAAiB,CAAC,EAAoB,EAAU,KAAK,GAC5C,AAD+C,OAAO,GAC5C,AAAzC,OAAgD,AAAzC,EAAU,SAAS,EACK,UAA/B,AAAyC,OAAlC,AAAyC,EAA/B,SAAS,QACH,IAAvB,EAAU,QAAQ,EAAgD,UAA9B,OAAO,EAAU,QAAQ,AAAK,GAAU,CAC5E,KAA4B,CADuD,KACzE,aAAa,EAAkB,AAAmC,iBAA5B,AALlC,EAK4C,aAAa,AAAK,CAGlF,CAEA,CAL4F,OAAO,OAKpF,IACb,IAAM,EAAU,EAAA,OAAI,CAAC,IAAI,CAAC,EAAA,OAAE,CAAC,OAAO,GAAI,SAExC,OADA,MAAM,EAAA,OAAE,CAAC,KAAK,CAAC,EAAS,CAAE,WAAW,CAAK,GACnC,EAAA,OAAI,CAAC,IAAI,CAAC,EAvHO,OAuHE,kBAC5B,CAEA,eAAe,EAAgC,CAAsC,EACnF,IAAM,EAAkB,MAAM,GAC9B,OAAM,EAAA,OAAE,CAAC,SAAS,CAAC,EAAiB,KAAK,SAAS,CAAC,EAAU,KAAM,GAAI,QACzE,CAEA,eAAe,IACb,IAAM,EAAkB,MAAM,IAE9B,GAAI,CACF,IAAM,EAAU,MAAM,EAAA,OAAE,CAAC,QAAQ,CAAC,EAAiB,SAC7C,EAAS,KAAK,KAAK,CAAC,GAE1B,GAAI,MAAM,OAAO,CAAC,GAChB,MADyB,CAClB,EAAO,MAAM,CAAC,GAGvB,GAAI,CAAC,GAAU,AAAkB,UAAU,OAArB,EACpB,MAAO,EAAE,CAKX,IAAM,EADU,AACC,OADM,OAAO,CAAC,GAE5B,MAAM,CAAC,CAAC,CAAC,EAAM,GAAK,EAAoB,IACxC,GAAG,CAAC,CAAC,CAAC,EAAO,EAAM,GAClB,AAAI,AAAC,GAA0B,UAAjB,AAA2B,OAApB,OAEG,IAApB,EAAU,KAAK,AAAgB,CAC1B,CAFS,IAGd,GAAG,IACH,CACF,EALgB,EAGF,AAJgC,MAUjD,MAAM,CAAC,GAMV,OAJI,EAAS,MAAM,CAAG,GACpB,AADuB,MACjB,EAAgC,GAGjC,CACT,CAAE,MAAO,EAAO,CACd,GAAK,GAAiC,OAAS,SAC7C,CADuD,KAChD,EAAE,CAIX,OADA,QAAQ,KAAK,CAAC,iDAAkD,GACzD,EAAE,AACX,CACF,CAEO,eAAe,IAEpB,MAAO,CADU,MAAM,GAAA,EAEpB,GAAG,CAAC,GACJ,IAAI,CAAC,CAAC,EAAG,IAAM,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE,SAAS,EACzD,CAEO,eAAe,EACpB,CAA8B,CAC9B,CAAc,CACd,CAAgB,MAWZ,EAOA,EAhBJ,GAAI,CAAC,EAAoB,GACvB,KAD+B,CACxB,CAAE,QAAS,GAAO,MAAO,CAAC,mBAAmB,EAAE,EAAA,CAAO,AAAC,EAGhE,IAAM,EAAgB,EAAO,IAAI,GACjC,GAAI,CAAC,EACH,MAAO,CAAE,MADS,GACA,EAAO,MAAO,sBAAuB,EAIzD,GAAI,CACF,EArHJ,AAqHyB,SArHhB,AAAkB,CAAgB,EACzC,IAAM,EAAU,EAAS,IAAI,GAC7B,GAAK,CAAD,EAEJ,GAAI,CAEF,EAJY,EAIR,IAAI,CAJW,CAKrB,CAAE,KAAM,CACN,MAAM,AAAI,MAAM,iCAClB,CAEA,OAAO,EACT,EAyG2C,EACzC,CAAE,MAAO,EAAO,CACd,MAAO,CAAE,SAAS,EAAO,MAAQ,EAAgB,OAAO,AAAC,CAC3D,CAGA,GAAI,CACF,EAAS,MAAM,GACjB,CAAE,MAAO,EAAO,CACd,MAAO,CAAE,SAAS,EAAO,MAAQ,EAAgB,OAAO,AAAC,CAC3D,CAEA,IAAM,EAAW,MAAM,IACjB,EAAM,IAAI,OAAO,WAAW,GAC5B,EAAQ,EAAS,SAAS,CAAE,AAAD,GAAgB,EAAW,KAAK,GAAK,GAChE,EAAgB,GAAS,EAC3B,EAA4B,CAAQ,CAAC,EAAM,EAC3C,EAAwB,GAI5B,GAFA,MAAM,EAAO,WAAW,CAAC,EAAc,EAAe,GAElD,GAAS,EAAG,CACd,IAAM,EAAW,CAAQ,CAAC,EAAM,CAChC,CAAQ,CAAC,EAAM,CAAG,CAChB,GAAG,CAAQ,CACX,SAAU,EACV,UAAW,gBACX,CACF,CACF,MACE,CADK,CACI,IAAI,CAAC,OACZ,EACA,SAAU,EACV,UAAW,EACX,UAAW,EACX,eACF,EAGF,OAAM,EAAgC,GAEtC,IAAM,EAAQ,EAAS,IAAI,CAAC,AAAC,GAAe,EAAW,KAAK,GAAK,UACjE,AAAK,EAIE,CAAE,CAJL,GAAQ,KAIM,EAAM,WAAY,EAAqB,EAAO,EAHvD,CAAE,SAAS,EAAO,MAAO,yCAA0C,CAI9E,CAEO,eAAe,EACpB,CAA8B,EAE9B,GAAI,CAAC,EAAoB,GACvB,KAD+B,CACxB,CAAE,SAAS,EAAO,MAAO,CAAC,mBAAmB,EAAE,EAAA,CAAO,AAAC,EAGhE,IAAM,EAAW,MAAM,IACjB,EAAQ,EAAS,SAAS,CAAC,AAAC,GAAe,EAAW,KAAK,GAAK,GACtE,GAAI,AAAU,CAAC,GAAG,GAChB,MAAO,CAAE,SAAS,EAAO,MAAO,iCAAkC,EAGpE,GAAM,CAAC,EAAQ,CAAG,EAAS,MAAM,CAAC,EAAO,EACzC,OAAM,EAAgC,GAEtC,IAAM,EAAS,MAAM,IAKrB,OAJI,GACF,KADU,CACJ,EAAO,cAAc,CAAC,EAAc,EAA4B,IAGjE,CAAE,SAAS,CAAK,CACzB,CAEO,eAAe,EACpB,CAA8B,EAE9B,GAAI,CAAC,EAAoB,GACvB,KAD+B,EACxB,KAIT,IAAM,EAAQ,CADG,MAAM,GAAA,EACA,IAAI,CAAC,AAAC,GAAe,EAAW,KAAK,GAAK,GACjE,GAAI,CAAC,EACH,KADU,EACH,KAGT,IAAM,EAAS,MAAM,IACrB,GAAI,CAAC,EACH,MADW,CACJ,KAGT,IAAM,EAAS,MAAM,EAAO,WAAW,CAAC,EAAc,EAA4B,WAC7E,AAAL,EAIO,CACL,CALE,IAAS,CAKJ,EAAM,KAAK,CAClB,SACA,SAAU,EAAM,QAAQ,AAC1B,EAPS,IAQX,gLC/SA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAEA,IAAM,EAAe,uBAgDjB,EAAqD,KACrD,EAAyC,KACzC,GAAsB,EAE1B,SAAS,WACP,AAAI,EACK,CAAC,sBADmB,oBACuB,EAAE,EAAA,CAAyB,CAExE,2DACT,CAEA,eAAe,IAcb,OAbI,AAAC,IACH,EAAgB,EAAA,CAAA,CAAA,KADE,EAEf,IAAI,CAAC,AAAC,GAAY,EAAO,OAAO,EAAI,GACpC,KAAK,CAAC,AAAC,IACN,EAA0B,aAAiB,MAAQ,EAAM,OAAO,CAAG,OAAO,GACrE,IACH,GAAsB,EACtB,QAAQ,IAAI,AAFY,CAEX,CAAC,cAAc,EAAE,IAAA,CAA4B,GAErD,MACT,EAGG,CACT,CAEA,eAAe,IACb,IAAM,EAAS,MAAM,IACrB,GAAI,CAAC,EACH,MADW,AACL,AAAI,MAAM,KAElB,OAAO,CACT,CAEA,SAAS,IACP,MAAO,CAAA,EAAG,KAAK,GAAG,GAAG,CAAC,EAAE,KAAK,MAAM,GAAG,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAG,GAAA,CAAI,AAClE,CAEA,SAAS,EAAyB,CAAiB,EACjD,OAAO,EAAU,IAAI,GAAG,OAAO,CAAC,MAAO,GACzC,CAEA,SAAS,EAAwB,CAAU,EACzC,MAAO,CAAC,WAAW,EAAE,EAAA,CAAI,AAC3B,CAEA,SAAS,EAAuB,CAAoB,EAClD,MAAO,CAAC,WAAW,EAAE,EAAA,CAAM,AAC7B,CAEA,SAAS,EAA4B,CAA4B,EAC/D,OAAO,EAAS,aAAa,EAAI,EAAwB,EAAS,EAAE,CACtE,CAEA,SAAS,EAAa,CAA4B,QAChD,AAAsB,UAAU,CAA5B,EAAS,IAAI,CACR,CACL,GAAI,EAAS,EAAE,CACf,KAAM,SACN,SAAU,EAAS,QAAQ,CAC3B,UAAW,EAAS,SAAS,EAAI,qBACjC,UAAW,EAAS,SAAS,CAC7B,UAAW,EAAS,SACtB,AAD+B,EAI1B,CACL,GAAI,EAAS,EAAE,CACf,KAAM,SACN,SAAU,EAAS,QAAQ,CAC3B,UAAW,EAAS,SAAS,CAC7B,UAAW,EAAS,SAAS,AAC/B,CACF,CAEA,eAAe,IACb,IAAM,EAAU,EAAA,OAAI,CAAC,IAAI,CAAC,EAAA,OAAE,CAAC,OAAO,GAAI,SAExC,OADA,MAAM,EAAA,OAAE,CAAC,KAAK,CAAC,EAAS,CAAE,WAAW,CAAK,GACnC,EAAA,OAAI,CAAC,IAAI,CAAC,EA/HW,OA+HF,YAC5B,CAEA,SAAS,EAA2B,CAAc,CAAE,CAA4B,QAC9E,CAAI,CAAC,GAA0B,UAAjB,AAA2B,OAAO,AAA3B,GAGjB,AADc,EACJ,IAAI,GAAK,GACW,UAA9B,AAAwC,CADP,MAC1B,AAAwC,CADP,CACvB,QAAQ,EACM,UAA/B,AAAyC,OAAO,AAAzC,EAAU,SAAS,EACK,UAA/B,AAAyC,OAAlC,AAAyC,EAA/B,SAAS,GAET,UAAU,CAA3B,GACoC,UAA/B,OAAO,EAAU,SAAS,CAIrC,CAEA,SAAS,EAAqB,CAAc,QAC1C,CAAI,CAAC,GAAS,AAAiB,UAAU,OAApB,AAA2B,GAGpB,UAAxB,OAAO,EAAU,EAAE,GAAiB,CAAC,EAAU,EAAE,CAAC,IAAI,IAAI,CACvC,MAD8C,KACjE,EAAU,IAAI,EAAoC,WAAnB,EAAU,IAAS,AAAL,GACf,AAD8B,OAAO,GAC3B,AAAxC,OAAO,AAAwC,EAA9B,QAAQ,EACzB,AAA+B,UAAU,OAAlC,AAAyC,EAA/B,SAAS,EACK,UAA/B,AAAyC,OAAO,AAAzC,EAAU,SAAS,QACE,IAA5B,EAAU,aAAa,EAAqD,UAAnC,OAAO,EAAU,aAAa,AAAK,GAAU,CAEnE,MAF0E,IAEhE,CAA7B,EAAU,IAAI,EACsB,UAA/B,OAAO,AATE,EASQ,SAAS,CAIrC,CAEA,eAAe,EAAyB,CAA8B,EACpE,IAAM,EAAsB,MAAM,GAClC,OAAM,EAAA,OAAE,CAAC,SAAS,CAAC,EAAqB,KAAK,SAAS,CAAC,EAAU,KAAM,GAAI,QAC7E,CAEA,eAAe,IACb,IAAM,EAAsB,MAAM,IAElC,GAAI,CACF,IAAM,EAAU,MAAM,EAAA,OAAE,CAAC,QAAQ,CAAC,EAAqB,SACjD,EAAS,KAAK,KAAK,CAAC,GAE1B,GAAI,MAAM,OAAO,CAAC,GAChB,MADyB,CAClB,EAAO,MAAM,CAAC,GAGvB,GAAI,CAAC,GAA4B,UAAU,AAA5B,OAAO,EACpB,MAAO,EAAE,CAIX,IAAM,EAAiC,EAAE,CAEzC,GAAI,EAA2B,EAAa,MAAM,CAAE,UAAW,CAC7D,IAAM,EAAW,EAAa,MAAM,CACpC,EAAS,IAAI,CAAC,CACZ,GAAI,IACJ,KAAM,SACN,SAAU,EAAS,QAAQ,CAC3B,UAAW,EAAS,SAAS,CAC7B,UAAW,EAAS,SAAS,CAC7B,cAAe,EAAuB,SACxC,EACF,CAEA,GAAI,EAA2B,EAAa,MAAM,CAAE,UAAW,CAC7D,IAAM,EAAW,AAhBE,EAgBW,MAAM,CACpC,EAAS,IAAI,CAAC,CACZ,GAAI,IACJ,KAAM,SACN,SAAU,EAAS,QAAQ,CAC3B,UAAW,EAAS,SAAS,CAC7B,UAAW,EAAS,SAAS,CAC7B,UAAW,EAAS,SAAS,CAC7B,cAAe,EAAuB,SACxC,EACF,CAMA,OAJI,EAAS,MAAM,CAAG,GAAG,AACvB,MAAM,EAAyB,GAG1B,CACT,CAAE,MAAO,EAAO,CACd,GAAK,GAAiC,OAAS,SAC7C,CADuD,KAChD,EAAE,CAIX,OADA,QAAQ,KAAK,CAAC,wCAAyC,GAChD,EAAE,AACX,CACF,CAEO,eAAe,IAGpB,MAAO,CAFU,MAAM,GAAA,EAGpB,GAAG,CAAC,GACJ,IAAI,CAAC,CAAC,EAAG,IAAM,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE,SAAS,EACzD,CAEO,eAAe,EAAkB,CAAU,EAEhD,IAAM,EAAQ,CADG,MAAM,GAAA,EACA,IAAI,CAAC,AAAC,GAAe,EAAW,EAAE,GAAK,GAC9D,OAAO,EAAQ,EAAa,GAAS,IACvC,CAEO,eAAe,EAAmB,CAAU,EAEjD,IAAM,EAAQ,CADG,MAAM,GAAA,EACA,IAAI,CAAC,AAAC,GAAe,EAAW,EAAE,GAAK,GAC9D,GAAI,CAAC,EACH,KADU,EACH,KAGT,IAAM,EAAS,MAAM,WACrB,AAAK,EAIE,EAJH,AAIU,IAJD,OAIY,CAAC,EAAc,EAA4B,IAH3D,IAIX,CAEA,eAAe,EAAkB,CAAa,EAC5C,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,8BAA+B,CAC1D,QAAS,CACP,cAAe,CAAC,OAAO,EAAE,EAAA,CAAO,CAChC,OAAQ,8BACR,uBAAwB,YAC1B,CACF,GAEA,GAAI,CAAC,EAAS,EAAE,CAAE,CAChB,GAAwB,KAAK,CAAzB,EAAS,MAAM,CACjB,MAAO,CAAE,OAAO,EAAO,MAAO,kCAAmC,EAEnE,MAAO,CAAE,OAAO,EAAO,MAAO,CAAC,oBAAoB,EAAE,EAAS,MAAM,CAAC,CAAC,CAAC,AAAC,CAC1E,CAEA,IAAM,EAAO,MAAM,EAAS,IAAI,GAC1B,EAAkC,UAAvB,OAAO,GAAM,MAAqB,EAAK,KAAK,CAAG,KAChE,GAAI,CAAC,EACH,MAAO,CAAE,CADI,MACG,EAAO,MAAO,iDAAkD,EAGlF,MAAO,CAAE,OAAO,WAAM,CAAS,CACjC,CAAE,MAAO,EAAO,CACd,MAAO,CAAE,MAAO,GAAO,MAAO,CAAC,+BAA+B,EAAG,EAAgB,OAAO,CAAA,CAAE,AAAC,CAC7F,CACF,CAEA,eAAe,EAAkB,CAAiB,CAAE,CAAa,EAC/D,GAAI,CACF,IAAM,EAAgB,EAAyB,GACzC,EAAW,MAAM,MAAM,CAAA,EAAG,EAAc,YAAY,CAAC,CAAE,CAC3D,QAAS,CACP,gBAAiB,CACnB,CACF,GAEA,GAAI,CAAC,EAAS,EAAE,CAAE,CAChB,GAAwB,KAAK,CAAzB,EAAS,MAAM,CACjB,MAAO,CAAE,OAAO,EAAO,MAAO,kCAAmC,EAEnE,MAAO,CAAE,OAAO,EAAO,MAAO,CAAC,oBAAoB,EAAE,EAAS,MAAM,CAAC,CAAC,CAAC,AAAC,CAC1E,CAEA,IAAM,EAAO,MAAM,EAAS,IAAI,GAC1B,EAAqC,UAA1B,OAAO,GAAM,SAAwB,EAAK,QAAQ,CAAG,KACtE,GAAI,CAAC,EACH,MAAO,CAAE,CADI,MACG,EAAO,MAAO,iDAAkD,EAGlF,MAAO,CAAE,OAAO,WAAM,CAAS,CACjC,CAAE,MAAO,EAAO,CACd,MAAO,CAAE,OAAO,EAAO,MAAO,CAAC,+BAA+B,EAAG,EAAgB,OAAO,CAAA,CAAE,AAAC,CAC7F,CACF,CAEO,eAAe,EAAuB,CAAa,EACxD,IAKI,EALE,EAAe,EAAM,IAAI,GAC/B,GAAI,CAAC,EACH,MAAO,CAAE,KADQ,IACC,EAAO,MAAO,2BAA4B,EAI9D,GAAI,CACF,EAAS,MAAM,GACjB,CAAE,MAAO,EAAO,CACd,MAAO,CAAE,SAAS,EAAO,MAAQ,EAAgB,OAAO,AAAC,CAC3D,CAEA,IAAM,EAAe,MAAM,EAAkB,GAC7C,GAAI,CAAC,EAAa,KAAK,EAAI,CAAC,EAAa,QAAQ,CAC/C,CADiD,KAC1C,CAAE,SAAS,EAAO,MAAO,EAAa,KAAK,EAAI,gCAAiC,EAGzF,IAAM,EAAW,MAAM,IAMvB,GALkB,CAKd,CALuB,IAAI,CAAC,AAAC,GAC/B,AAAoB,EAIP,WAJF,IAAI,EACZ,EAAW,QAAQ,GAAK,EAAa,QAAQ,EAIhD,MAAO,CAAE,SAAS,EAAO,MAAO,CAAC,wBAAwB,EAAE,EAAa,QAAQ,CAAC,gBAAgB,CAAE,AAAD,EAGpG,IAAM,EAAK,IACL,EAAM,IAAI,OAAO,WAAW,GAC5B,EAAgB,EAAwB,EAE9C,OAAM,EAAO,WAAW,CAAC,EAAc,EAAe,GAEtD,IAAM,EAA8B,IAClC,EACA,KAAM,SACN,SAAU,EAAa,QAAQ,CAC/B,UAAW,EACX,UAAW,gBACX,CACF,EAKA,OAHA,EAAS,IAAI,CAAC,GACd,MAAM,EAAyB,GAExB,CACL,SAAS,EACT,WAAY,CACV,GAAI,EAAQ,EAAE,CACd,KAAM,SACN,SAAU,EAAQ,QAAQ,CAC1B,UAAW,EAAQ,SAAS,CAC5B,UAAW,EAAQ,SACrB,AAD8B,CAEhC,CACF,CAEO,eAAe,EACpB,CAAiB,CACjB,CAAa,EAEb,IAiBI,EAjBE,EAAsB,EAAyB,GAC/C,EAAe,EAAM,IAAI,GAE/B,GAAI,CAAC,EACH,MAAO,CAAE,SAAS,EAAO,CADD,KACQ,gCAAiC,EAGnE,GAAI,CACF,IAAI,IAAI,EACV,CAAE,KAAM,CACN,MAAO,CAAE,SAAS,EAAO,MAAO,wCAAyC,CAC3E,CAEA,GAAI,CAAC,EACH,MAAO,CAAE,KADQ,IACC,EAAO,MAAO,2BAA4B,EAI9D,GAAI,CACF,EAAS,MAAM,GACjB,CAAE,MAAO,EAAO,CACd,MAAO,CAAE,QAAS,GAAO,MAAQ,EAAgB,OAAO,AAAC,CAC3D,CAEA,IAAM,EAAe,MAAM,EAAkB,EAAqB,GAClE,GAAI,CAAC,EAAa,KAAK,EAAI,CAAC,EAAa,QAAQ,CAC/C,CADiD,KAC1C,CAAE,SAAS,EAAO,MAAO,EAAa,KAAK,EAAI,gCAAiC,EAGzF,IAAM,EAAW,MAAM,IAOvB,GANkB,CAMd,CANuB,IAAI,CAAC,AAAC,GACX,EAKP,SALb,EAAW,IAAI,EACZ,EAAW,QAAQ,GAAK,EAAa,QAAQ,EAC7C,EAAW,SAAS,GAAK,GAI5B,MAAO,CACL,SAAS,EACT,MAAO,CAAC,wBAAwB,EAAE,EAAa,QAAQ,CAAC,IAAI,EAAE,EAAoB,gBAAgB,CAAC,AACrG,EAGF,IAAM,EAAK,IACL,EAAM,IAAI,OAAO,WAAW,GAC5B,EAAgB,EAAwB,EAE9C,OAAM,EAAO,WAAW,CAAC,EAAc,EAAe,GAEtD,IAAM,EAA8B,IAClC,EACA,KAAM,SACN,SAAU,EAAa,QAAQ,CAC/B,UAAW,EACX,UAAW,EACX,UAAW,EACX,eACF,EAKA,OAHA,EAAS,IAAI,CAAC,GACd,MAAM,EAAyB,GAExB,CACL,SAAS,EACT,WAAY,CACV,GAAI,EAAQ,EAAE,CACd,KAAM,SACN,SAAU,EAAQ,QAAQ,CAC1B,UAAW,EAAQ,SAAS,EAAI,EAChC,UAAW,EAAQ,SAAS,CAC5B,UAAW,EAAQ,SAAS,AAC9B,CACF,CACF,CAEO,eAAe,EAAiB,CAAU,EAC/C,IAAM,EAAW,MAAM,IACjB,EAAQ,EAAS,SAAS,CAAC,AAAC,GAAe,EAAW,EAAE,GAAK,GAEnE,GAAc,CAAC,GAAG,CAAd,EACF,MAAO,CAAE,SAAS,EAAO,MAAO,uBAAwB,EAG1D,IAAM,EAAa,CAAQ,CAAC,EAAM,CAClC,EAAS,MAAM,CAAC,EAAO,GACvB,MAAM,EAAyB,GAE/B,IAAM,EAAS,MAAM,IAKrB,OAJI,GACF,KADU,CACJ,EAAO,cAAc,CAAC,EAAc,EAA4B,IAGjE,CAAE,SAAS,CAAK,CACzB,uNCvdA,EAAA,EAAA,CAAA,CAAA,OAOA,EAAA,EAAA,CAAA,CAAA,OAcO,eAAe,IACpB,GAAI,CACF,IAAM,EAAc,MAAM,CAAA,EAAA,EAAA,iBAAA,AAAiB,IAC3C,MAAO,CAAE,SAAS,cAAM,CAAY,CACtC,CAAE,MAAO,EAAO,CAEd,OADA,QAAQ,KAAK,CAAC,8BAA+B,GACtC,CAAE,SAAS,EAAO,MAAO,6BAA8B,CAChE,CACF,CAMO,eAAe,EAAqB,CAAa,EACtD,IAAM,EAAS,MAAM,CAAA,EAAA,EAAA,sBAAA,AAAsB,EAAC,UAC5C,AAAI,AAAC,EAAO,OAAO,EAAK,EAAD,AAAQ,UAAU,CAIlC,CAJoC,AAIlC,SAAS,EAAM,WAAY,EAAO,UAAU,AAAC,EAH7C,CAAE,SAAS,EAAO,MAAO,EAAO,KAAK,EAAI,mCAAoC,CAIxF,CAEO,eAAe,EAAqB,CAAiB,CAAE,CAAa,EACzE,IAAM,EAAS,MAAM,CAAA,EAAA,EAAA,sBAAA,AAAsB,EAAC,EAAW,UAClD,AAAL,AAAI,EAAQ,OAAO,EAAK,EAAD,AAAQ,UAAU,CAIlC,CAJoC,AAIlC,SAAS,EAAM,WAAY,EAAO,UAAU,AAAC,EAH7C,CAAE,SAAS,EAAO,MAAO,EAAO,KAAK,EAAI,mCAAoC,CAIxF,CAMO,eAAe,IACpB,GAAI,CACF,IAAM,EAAc,MAAM,CAAA,EAAA,EAAA,yBAAA,AAAyB,IACnD,MAAO,CAAE,SAAS,cAAM,CAAY,CACtC,CAAE,MAAO,EAAO,CAEd,OADA,QAAQ,KAAK,CAAC,wCAAyC,GAChD,CAAE,SAAS,EAAO,MAAO,uCAAwC,CAC1E,CACF,CAMO,eAAe,EACpB,CAA8B,CAC9B,CAAc,CACd,CAAgB,EAEhB,IAAM,EAAS,MAAM,CAAA,EAAA,EAAA,gCAAA,AAAgC,EAAC,EAAO,EAAQ,UACjE,AAAC,AAAL,EAAY,OAAO,EAAK,EAAD,AAAQ,UAAU,CAIlC,CAAE,AAJkC,QAIzB,GAAM,WAAY,EAAO,UAAU,AAAC,EAH7C,CAAE,SAAS,EAAO,MAAO,EAAO,KAAK,EAAI,sCAAuC,CAI3F,CAMO,eAAe,EAAiB,CAAU,EAC/C,GAAI,CACF,IAAM,EAAS,MAAM,CAAA,EAAA,EAAA,gBAAA,AAAgB,EAAC,GACtC,GAAI,CAAC,EAAO,OAAO,CACjB,CADmB,KACZ,CAAE,SAAS,EAAO,MAAO,EAAO,KAAK,EAAI,8BAA+B,EAGjF,MAAO,CAAE,SAAS,CAAK,CACzB,CAAE,MAAO,EAAO,CAEd,OADA,QAAQ,KAAK,CAAC,+BAAgC,GACvC,CAAE,SAAS,EAAO,MAAO,8BAA+B,CACjE,CACF,CAEO,eAAe,EAAyB,CAA8B,EAC3E,GAAI,CACF,IAAM,EAAS,MAAM,CAAA,EAAA,EAAA,wBAAA,AAAwB,EAAC,GAC9C,GAAI,CAAC,EAAO,OAAO,CACjB,CADmB,KACZ,CAAE,SAAS,EAAO,MAAO,EAAO,KAAK,EAAI,wCAAyC,EAG3F,MAAO,CAAE,SAAS,CAAK,CACzB,CAAE,MAAO,EAAO,CAEd,OADA,QAAQ,KAAK,CAAC,yCAA0C,GACjD,CAAE,QAAS,GAAO,MAAO,wCAAyC,CAC3E,CACF,0CA7FsB,EAcA,EASA,EAaA,EAcA,EAiBA,EAcA,IAjFA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,MAcA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,MASA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,MAaA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,MAcA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,MAiBA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,MAcA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA","ignoreList":[0,1]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[15618,a=>{"use strict";let b=(0,a.i(70106).default)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);a.s(["Plus",()=>b],15618)},33508,a=>{"use strict";let b=(0,a.i(70106).default)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);a.s(["X",()=>b],33508)},5784,a=>{"use strict";let b=(0,a.i(70106).default)("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);a.s(["ChevronDown",()=>b],5784)},52495,10948,a=>{"use strict";var b=a.i(70106);let c=(0,b.default)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);a.s(["ExternalLink",()=>c],52495);let d=(0,b.default)("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);a.s(["GitBranch",()=>d],10948)},93105,a=>{"use strict";var b=a.i(5050);let c=(0,b.createServerReference)("003f59d9b072ba439a66065346d259ab83d25d897d",b.callServer,void 0,b.findSourceMapURL,"getHomeDirectory");a.s(["getHomeDirectory",()=>c])},92596,a=>{"use strict";let b=(0,a.i(70106).default)("folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);a.s(["Folder",()=>b],92596)},210,a=>{"use strict";let b=(0,a.i(70106).default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);a.s(["ArrowLeft",()=>b],210)},11431,94659,a=>{"use strict";function b(a){return a&&a.replace(/\\/g,"/").split("/").filter(Boolean).pop()||""}function c(a){if(!a)return"";let b=a.replace(/\\/g,"/"),c=b.length>1&&b.endsWith("/")?b.slice(0,-1):b,d=c.lastIndexOf("/");return -1===d?a.includes(":")&&a.length<=3?b:".":0===d?"/":a.includes(":")&&2===d?c.substring(0,3):c.substring(0,d)}function d(a){return/^[a-zA-Z]:[\\/]/.test(a)}a.s(["getBaseName",()=>b,"getDirName",()=>c,"isWindowsAbsolutePath",()=>d],11431);var e=a.i(72131);function f({enabled:a=!0,onConfirm:b,onDismiss:c,canConfirm:d=!0}){(0,e.useEffect)(()=>{if(!a)return;let e=a=>{if("Escape"===a.key){a.preventDefault(),c();return}"Enter"!==a.key||!b||!d||a.defaultPrevented||a.metaKey||a.ctrlKey||a.altKey||a.shiftKey||(a=>{if(!(a instanceof HTMLElement))return!1;let b=a.tagName.toUpperCase();return"INPUT"===b||"TEXTAREA"===b||"SELECT"===b||a.isContentEditable})(a.target)||(a.preventDefault(),b())};return window.addEventListener("keydown",e),()=>{window.removeEventListener("keydown",e)}},[a,b,c,d])}a.s(["useDialogKeyboardShortcuts",()=>f],94659)},27257,a=>{"use strict";var b=a.i(5050);let c=(0,b.createServerReference)("7f4e2d8cbfea83c90a943b7d1ad26051afd667020b",b.callServer,void 0,b.findSourceMapURL,"startTtydProcess");a.s(["startTtydProcess",()=>c])},39018,20601,a=>{"use strict";var b=a.i(5050);let c=(0,b.createServerReference)("00f8d9271ab0088f183a1494ee1e57a9c9bf395836",b.callServer,void 0,b.findSourceMapURL,"getConfig");a.s(["getConfig",()=>c],39018);let d=(0,b.createServerReference)("40839453baab94a23bf39433a552dbe7f519a44449",b.callServer,void 0,b.findSourceMapURL,"updateConfig");a.s(["updateConfig",()=>d],20601)},12627,a=>{"use strict";function b(){}a.s(["SESSIONS_UPDATED_EVENT",0,"viba:sessions-updated","SESSIONS_UPDATED_STORAGE_KEY",0,"viba:sessions-updated-at","notifySessionsUpdated",()=>b])},41317,71300,92106,4720,a=>{"use strict";var b=a.i(5050);let c=(0,b.createServerReference)("40cd192901c59313dcda53d8937596378060397f11",b.callServer,void 0,b.findSourceMapURL,"listPathEntries");a.s(["listPathEntries",()=>c],41317);let d=(0,b.createServerReference)("7f8d431455c1da2fbe5358c50ae9b8c5259dd93aca",b.callServer,void 0,b.findSourceMapURL,"saveAttachments");a.s(["saveAttachments",()=>d],71300);var e=a.i(70106);let f=(0,e.default)("clipboard",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}]]);a.s(["Clipboard",()=>f],92106);let g=(0,e.default)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);a.s(["FileText",()=>g],4720)},996,60087,67329,1239,58988,a=>{"use strict";var b=a.i(70106);let c=(0,b.default)("grid-2x2",[["path",{d:"M12 3v18",key:"108xh3"}],["path",{d:"M3 12h18",key:"1i2n21"}],["rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",key:"h1oib"}]]);a.s(["Grid2x2",()=>c],996);let d=(0,b.default)("house",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"r6nss1"}]]);a.s(["House",()=>d],60087);let e=(0,b.default)("list",[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]]);a.s(["List",()=>e],67329);let f=(0,b.default)("pin",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]]);a.s(["Pin",()=>f],1239);let g=(0,b.default)("pin-off",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89",key:"znwnzq"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11",key:"c9qhm2"}]]);a.s(["PinOff",()=>g],58988)},64724,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(71987),e=a.i(93105),f=a.i(41317),g=a.i(71300),h=a.i(39018),i=a.i(20601),j=a.i(210),k=a.i(92106),l=a.i(4720),m=a.i(92596),n=a.i(996),o=a.i(60087),p=a.i(67329),q=a.i(1239),r=a.i(58988),s=a.i(11431),t=a.i(94659);let u="viba:session-file-browser:view-mode";function v({initialPath:a,worktreePath:v,onConfirm:w,onCancel:x,onPathChange:y}){let z=(0,c.useMemo)(()=>new Set([".png",".jpg",".jpeg",".gif",".webp",".bmp",".svg",".ico",".avif"]),[]),[A,B]=(0,c.useState)(""),[C,D]=(0,c.useState)([]),[E,F]=(0,c.useState)(!1),[G,H]=(0,c.useState)(null),[I,J]=(0,c.useState)(""),[K,L]=(0,c.useState)([]),[M,N]=(0,c.useState)(null),[O,P]=(0,c.useState)("list"),[Q,R]=(0,c.useState)(!1),[S,T]=(0,c.useState)({}),[U,V]=(0,c.useState)([]);(0,c.useEffect)(()=>{let b=!0;return(async()=>{try{let c=await (0,e.getHomeDirectory)();if(!b)return;J(c),a||B(c)}catch(a){console.error("Failed to resolve home directory:",a)}a&&b&&B(a)})(),()=>{b=!1}},[a]),(0,c.useEffect)(()=>{let a=!0;return(async()=>{try{let b=await (0,h.getConfig)();if(!a)return;let c=Array.isArray(b.pinnedFolderShortcuts)?b.pinnedFolderShortcuts.filter(a=>"string"==typeof a&&a.trim().length>0):[];V(Array.from(new Set(c)))}catch(a){console.error("Failed to load pinned folder shortcuts:",a)}})(),()=>{a=!1}},[]),(0,c.useEffect)(()=>{try{let a=localStorage.getItem(u);("list"===a||"grid"===a)&&P(a)}catch{}finally{R(!0)}},[]),(0,c.useEffect)(()=>{if(Q)try{localStorage.setItem(u,O)}catch{}},[Q,O]),(0,c.useEffect)(()=>{A&&(async()=>{F(!0),H(null);try{let a=await (0,f.listPathEntries)(A);D(a)}catch(a){console.error("Failed to list files:",a),H("Failed to load directory contents")}finally{F(!1)}})()},[A]),(0,c.useEffect)(()=>{A&&y?.(A)},[A,y]),(0,c.useEffect)(()=>{L([]),N(null),T({})},[A]);let W=(0,c.useMemo)(()=>new Set(K),[K]),X=(a,b,c)=>{if(a.isDirectory)return void B(a.path);let d=c.metaKey||c.ctrlKey;if(c.shiftKey&&null!==M){let a=Math.min(M,b),c=Math.max(M,b);L(C.slice(a,c+1).filter(a=>!a.isDirectory).map(a=>a.path));return}if(d){L(b=>b.includes(a.path)?b.filter(b=>b!==a.path):[...b,a.path]),N(b);return}L([a.path]),N(b)},Y=async()=>{if(H(null),!v)return void H("Cannot paste: Session worktree path is missing.");try{if(F(!0),!navigator.clipboard||!navigator.clipboard.read)throw Error("Clipboard API not supported in this browser");let a=await navigator.clipboard.read(),b=new FormData,c=!1;for(let d of a)for(let a of d.types)if(a.startsWith("image/")){let e=await d.getType(a),f=a.split("/")[1]||"png",g=`pasted-image-${Date.now()}.${f}`,h=new File([e],g,{type:a});b.append(g,h),c=!0;break}if(c){let a=await (0,g.saveAttachments)(v,b);if(a&&a.length>0)return void await w(a);H("Failed to save pasted files.")}else try{let a=await navigator.clipboard.readText();a&&a.trim().startsWith("/")?H("No file content found in clipboard. Copy an image or file first."):H("No file content found in clipboard.")}catch{H("No file content found in clipboard.")}}catch(b){let a=b instanceof Error?b.message:String(b);console.error("Paste error:",b),H(`Failed to read from clipboard: ${a}`)}finally{F(!1)}},Z=async a=>{V(a);try{await (0,i.updateConfig)({pinnedFolderShortcuts:a})}catch(a){console.error("Failed to save pinned folder shortcuts:",a),H("Failed to save pinned shortcuts")}},$=async a=>{(H(null),U.includes(a))?await Z(U.filter(b=>b!==a)):await Z([...U,a])},_=(0,c.useCallback)(async()=>{0!==K.length&&await w(K)},[w,K]);return(0,t.useDialogKeyboardShortcuts)({onConfirm:_,onDismiss:x,canConfirm:K.length>0}),(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm p-4",children:(0,b.jsxs)("div",{className:"bg-base-200 rounded-lg shadow-xl w-full max-w-5xl h-[82vh] flex flex-col",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between p-4 border-b border-base-300",children:[(0,b.jsxs)("h2",{className:"text-xl font-bold flex items-center gap-2",children:[(0,b.jsx)(m.Folder,{className:"w-5 h-5"}),"Browse Files"]}),(0,b.jsx)("button",{onClick:x,className:"btn btn-sm btn-ghost btn-circle",title:"Close file browser",children:"✕"})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 p-3 bg-base-300",children:[(0,b.jsx)("button",{onClick:()=>{let a=(0,s.getDirName)(A);a&&a!==A&&B(a)},className:"btn btn-sm btn-square btn-ghost",title:"Go Up",disabled:"/"===A||!A,children:(0,b.jsx)(j.ArrowLeft,{className:"w-4 h-4"})}),(0,b.jsxs)("button",{onClick:()=>{I&&A!==I&&B(I)},className:"btn btn-sm btn-ghost gap-1",title:I?`Go to Home Folder (${I})`:"Go to Home Folder",disabled:!I||A===I,children:[(0,b.jsx)(o.House,{className:"w-4 h-4"}),"Home"]}),(0,b.jsx)("div",{className:"flex-1 overflow-x-auto whitespace-nowrap px-2 font-mono text-sm",children:A}),(0,b.jsxs)("div",{className:"join",children:[(0,b.jsx)("button",{type:"button",onClick:()=>P("list"),className:`btn btn-sm join-item ${"list"===O?"btn-active":"btn-ghost"}`,title:"List view",children:(0,b.jsx)(p.List,{className:"w-4 h-4"})}),(0,b.jsx)("button",{type:"button",onClick:()=>P("grid"),className:`btn btn-sm join-item ${"grid"===O?"btn-active":"btn-ghost"}`,title:"Grid view",children:(0,b.jsx)(n.Grid2x2,{className:"w-4 h-4"})})]}),(0,b.jsxs)("button",{onClick:_,className:"btn btn-sm btn-primary gap-2",disabled:0===K.length,title:"Insert selected absolute paths",children:["Insert (",K.length,")"]}),(0,b.jsx)("div",{className:"w-[1px] h-6 bg-base-content/10 mx-1"}),(0,b.jsxs)("button",{onClick:Y,className:"btn btn-sm btn-ghost gap-2",title:"Paste file/image from clipboard",disabled:!v,children:[(0,b.jsx)(k.Clipboard,{className:"w-4 h-4"}),"Paste"]})]}),U.length>0&&(0,b.jsx)("div",{className:"px-3 py-2 border-b border-base-300 bg-base-200/50",children:(0,b.jsx)("div",{className:"flex items-center gap-2 overflow-x-auto",children:U.map(a=>{let c=a===A,d=a.split(/[\\/]/).filter(Boolean).pop()||a;return(0,b.jsxs)("div",{className:"join shrink-0",children:[(0,b.jsxs)("button",{type:"button",className:`btn btn-xs join-item ${c?"btn-primary":"btn-ghost"}`,onClick:()=>B(a),title:a,children:[(0,b.jsx)(m.Folder,{className:"w-3 h-3"}),d]}),(0,b.jsx)("button",{type:"button",className:"btn btn-xs btn-ghost join-item",onClick:()=>void $(a),title:`Unpin ${a}`,children:(0,b.jsx)(r.PinOff,{className:"w-3 h-3"})})]},a)})})}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto p-2",children:E?(0,b.jsx)("div",{className:"flex justify-center items-center h-full",children:(0,b.jsx)("span",{className:"loading loading-spinner loading-lg"})}):G?(0,b.jsx)("div",{className:"alert alert-error",children:G}):0===C.length?(0,b.jsx)("div",{className:"text-center text-base-content/50 mt-10",children:"Empty directory"}):"list"===O?(0,b.jsx)("div",{className:"grid grid-cols-1 gap-1",children:C.map((a,c)=>{let d=W.has(a.path);return(0,b.jsxs)("div",{className:`flex items-center justify-between p-2 rounded-md cursor-pointer transition-colors border ${d?"bg-primary text-primary-content border-primary":"hover:bg-base-100 border-transparent"}`,onClick:b=>X(a,c,b),title:a.path,children:[(0,b.jsxs)("div",{className:"flex items-center gap-3 overflow-hidden",children:[a.isDirectory?(0,b.jsx)(m.Folder,{className:"w-5 h-5 shrink-0"}):(0,b.jsx)(l.FileText,{className:"w-5 h-5 shrink-0"}),(0,b.jsx)("span",{className:"truncate",children:a.name})]}),(0,b.jsx)("span",{className:"text-[10px] opacity-70 shrink-0",children:a.isDirectory?(0,b.jsx)("button",{type:"button",className:"btn btn-ghost btn-xs h-6 min-h-6",onClick:b=>{b.stopPropagation(),$(a.path)},title:U.includes(a.path)?"Unpin folder":"Pin folder",children:(0,b.jsx)(q.Pin,{className:`w-3 h-3 ${U.includes(a.path)?"fill-current":""}`})}):"file"})]},a.path)})}):(0,b.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-3",children:C.map((a,c)=>{var e;let f,g=W.has(a.path),h=!a.isDirectory&&-1!==(f=(e=a.name).lastIndexOf("."))&&z.has(e.slice(f).toLowerCase()),i=`/api/file-thumbnail?path=${encodeURIComponent(a.path)}`;return(0,b.jsxs)("button",{type:"button",className:`rounded-lg border text-left overflow-hidden transition-colors ${g?"border-primary bg-primary/15":"border-base-300 hover:bg-base-100"}`,onClick:b=>X(a,c,b),title:a.path,children:[(0,b.jsxs)("div",{className:"aspect-square bg-base-300 flex items-center justify-center overflow-hidden relative",children:[h&&!S[a.path]?(0,b.jsx)(d.default,{src:i,alt:a.name,fill:!0,sizes:"(max-width: 768px) 50vw, (max-width: 1024px) 25vw, 20vw",className:"object-cover",unoptimized:!0,onError:()=>T(b=>({...b,[a.path]:!0}))}):a.isDirectory?(0,b.jsx)(m.Folder,{className:"w-10 h-10 opacity-80"}):(0,b.jsx)(l.FileText,{className:"w-10 h-10 opacity-80"}),a.isDirectory&&(0,b.jsx)("button",{type:"button",className:`absolute top-1 right-1 btn btn-xs btn-circle ${U.includes(a.path)?"btn-primary":"btn-ghost bg-base-100/70"}`,onClick:b=>{b.stopPropagation(),$(a.path)},title:U.includes(a.path)?"Unpin folder":"Pin folder",children:(0,b.jsx)(q.Pin,{className:`w-3 h-3 ${U.includes(a.path)?"fill-current":""}`})})]}),(0,b.jsxs)("div",{className:"px-2 py-2",children:[(0,b.jsx)("div",{className:"truncate text-sm font-medium",title:a.name,children:a.name}),(0,b.jsx)("div",{className:"text-[10px] opacity-70",children:a.isDirectory?"folder":h?"image":"file"})]})]},a.path)})})}),(0,b.jsx)("div",{className:"p-3 border-t border-base-300 text-xs text-base-content/60 text-center",children:"Click: single select. Cmd/Ctrl+Click: multi-select. Shift+Click: range select. Click a folder to open it."})]})})}a.s(["default",()=>v])}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=_4a66db4a._.js.map
|