@henlii/pidance 0.2.28 → 0.2.29
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 +10 -9
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +8 -0
- package/.next/server/app/_global-error/page.js +3 -3
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +2 -2
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +3 -3
- package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- 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 +2 -2
- package/.next/server/app/api/about/route.js +1 -1
- package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
- package/.next/server/app/api/agent/[id]/events/route.js +2 -2
- package/.next/server/app/api/agent/[id]/route.js +1 -1
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/agent/running/events/route.js +1 -1
- package/.next/server/app/api/agent/running/route.js +1 -1
- package/.next/server/app/api/agent/submissions/[submissionId]/route.js +1 -0
- package/.next/server/app/api/agent/submissions/[submissionId]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/agent-settings/route.js +2 -2
- package/.next/server/app/api/attachments/route.js +1 -1
- package/.next/server/app/api/auth/all-providers/route.js +1 -1
- package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
- package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
- package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
- package/.next/server/app/api/auth/providers/route.js +1 -1
- package/.next/server/app/api/auth/ui-session/route.js +1 -1
- package/.next/server/app/api/auth/ui-sessions/[id]/route.js +1 -1
- package/.next/server/app/api/auth/ui-sessions/route.js +1 -1
- package/.next/server/app/api/cwd/browse/route.js +1 -1
- package/.next/server/app/api/cwd/validate/route.js +1 -1
- package/.next/server/app/api/default-cwd/route.js +1 -1
- package/.next/server/app/api/file-index/route.js +1 -1
- package/.next/server/app/api/files/[...path]/route.js +1 -1
- package/.next/server/app/api/git/diff/route.js +1 -1
- package/.next/server/app/api/git/status/route.js +1 -1
- package/.next/server/app/api/home/route.js +1 -1
- package/.next/server/app/api/message-media/route.js +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/models-config/raw/route.js +1 -1
- package/.next/server/app/api/models-config/route.js +1 -1
- package/.next/server/app/api/models-config/test/route.js +1 -1
- package/.next/server/app/api/plugins/route.js +1 -1
- package/.next/server/app/api/plugins/search/route.js +1 -1
- package/.next/server/app/api/plugins/updates/route.js +1 -1
- package/.next/server/app/api/preferences/route.js +1 -1
- package/.next/server/app/api/project-assets/route.js +2 -2
- package/.next/server/app/api/prompts/route.js +1 -1
- package/.next/server/app/api/pty/route.js +2 -2
- package/.next/server/app/api/sessions/[id]/archive/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/command-entry/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/info/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/outline/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/tool-results/[toolCallId]/route.js +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/sessions/search/route.js +1 -1
- package/.next/server/app/api/settings/raw/route.js +2 -2
- package/.next/server/app/api/settings/remote/route.js +1 -1
- package/.next/server/app/api/skills/check/route.js +1 -1
- package/.next/server/app/api/skills/install/route.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/search/route.js +1 -1
- package/.next/server/app/api/skills/update/route.js +1 -1
- package/.next/server/app/api/subagent-runs/route.js +1 -1
- package/.next/server/app/api/update/apply/route.js +2 -2
- package/.next/server/app/api/update/check/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/icon.png/route.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +5 -5
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/index.segments/_full.segment.rsc +5 -5
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/page.js +15 -15
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +10 -9
- package/.next/server/chunks/188.js +1 -1
- package/.next/server/chunks/2356.js +2 -0
- package/.next/server/chunks/3379.js +1 -1
- package/.next/server/chunks/5274.js +1 -1
- package/.next/server/chunks/5304.js +2 -2
- package/.next/server/chunks/5582.js +1 -1
- package/.next/server/chunks/7594.js +3 -3
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/{Ni2HugOTDE44QzNWaiTkR → LtiVeS4MNenlNgRDmSFem}/_buildManifest.js +1 -1
- package/.next/static/chunks/9780-160be85d8ccc52df.js +1 -0
- package/.next/static/chunks/app/_global-error/page-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/about/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/bash-output/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/events/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/agent/new/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/agent/running/events/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/agent/running/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/agent/submissions/[submissionId]/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/agent-settings/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/attachments/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/auth/all-providers/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/auth/api-key/[provider]/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/auth/login/[provider]/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/[provider]/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/auth/providers/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/auth/ui-session/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/auth/ui-sessions/[id]/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/auth/ui-sessions/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/cwd/browse/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/cwd/validate/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/default-cwd/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/file-index/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/files/[...path]/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/git/diff/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/git/status/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/home/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/message-media/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/models/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/models-config/raw/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/models-config/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/models-config/test/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/plugins/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/plugins/search/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/plugins/updates/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/preferences/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/project-assets/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/prompts/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/pty/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/archive/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/command-entry/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/context/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/export/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/info/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/outline/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/state/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/tool-results/[toolCallId]/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/sessions/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/sessions/search/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/settings/raw/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/settings/remote/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/skills/check/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/skills/install/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/skills/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/skills/search/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/skills/update/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/subagent-runs/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/update/apply/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/update/check/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/app/page-6337d5a7b240fecc.js +25 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-3154b10ff0f29211.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-3154b10ff0f29211.js +1 -0
- package/.next/static/css/4e6a21bd31d3e021.css +1 -0
- package/README.en.md +19 -15
- package/README.md +17 -13
- package/README.zh-CN.md +11 -204
- package/package.json +2 -2
- package/.next/static/chunks/9780-4b76db8fbfb345c2.js +0 -1
- package/.next/static/chunks/app/_global-error/page-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/about/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/bash-output/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/events/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/agent/new/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/agent/running/events/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/agent/running/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/agent-settings/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/attachments/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/auth/all-providers/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/auth/api-key/[provider]/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/auth/login/[provider]/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/[provider]/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/auth/providers/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/auth/ui-session/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/auth/ui-sessions/[id]/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/auth/ui-sessions/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/cwd/browse/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/cwd/validate/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/default-cwd/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/file-index/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/files/[...path]/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/git/diff/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/git/status/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/home/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/message-media/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/models/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/models-config/raw/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/models-config/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/models-config/test/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/plugins/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/plugins/search/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/plugins/updates/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/preferences/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/project-assets/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/prompts/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/pty/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/archive/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/command-entry/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/context/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/export/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/info/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/outline/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/state/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/tool-results/[toolCallId]/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/sessions/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/sessions/search/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/settings/raw/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/settings/remote/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/skills/check/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/skills/install/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/skills/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/skills/search/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/skills/update/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/subagent-runs/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/update/apply/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/update/check/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/app/page-354e6fd7f7df840b.js +0 -25
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-005f7c16c8d63642.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-005f7c16c8d63642.js +0 -1
- package/.next/static/css/1c6fd1229e5153db.css +0 -1
- /package/.next/static/{Ni2HugOTDE44QzNWaiTkR → LtiVeS4MNenlNgRDmSFem}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[552,796,885,976,1004,1097,1273,1541,2053,2138,2504,2718,2835,2837,3032,3059,3432,3507,3851,3943,3955,4016,4037,4133,4428,4459,4629,4896,5221,5403,5408,5418,5907,6061,6132,6444,6450,6709,6801,6819,6849,6919,6988,7032,7067,7074,7198,7483,7769,7812,7837,7851,8156,8167,8197,8390,8429,8658,8743,8933,9043,9156,9258,9293,9560,9742,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[552,796,885,976,1004,1097,1273,1541,2053,2138,2504,2718,2835,2837,3032,3059,3432,3507,3851,3943,3955,4016,4037,4133,4428,4459,4629,4896,5221,5403,5408,5418,5907,6061,6132,6444,6450,6709,6801,6819,6849,6919,6988,7032,7067,7074,7198,7483,7769,7812,7837,7851,8156,8167,8197,8390,8429,8658,8743,8933,9043,9156,9258,9293,9560,9742,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[552,796,885,976,1004,1097,1273,1541,2053,2138,2504,2718,2835,2837,3032,3059,3432,3507,3851,3943,3955,4016,4037,4133,4428,4459,4629,4896,5221,5403,5408,5418,5907,6061,6132,6444,6450,6709,6801,6819,6849,6919,6988,7032,7067,7074,7198,7483,7769,7812,7837,7851,8156,8167,8197,8390,8429,8658,8743,8933,9043,9156,9258,9293,9560,9742,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-3154b10ff0f29211.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[552,796,885,976,1004,1097,1273,1541,2053,2138,2504,2718,2835,2837,3032,3059,3432,3507,3851,3943,3955,4016,4037,4133,4428,4459,4629,4896,5221,5403,5408,5418,5907,6061,6132,6444,6450,6709,6801,6819,6849,6919,6988,7032,7067,7074,7198,7483,7769,7812,7837,7851,8156,8167,8197,8390,8429,8658,8743,8933,9043,9156,9258,9293,9560,9742,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-text-muted:var(--text-muted);--color-status-running:var(--status-running)}}@layer base{*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden}.absolute,.sr-only{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.z-50{z-index:50}.row-0{grid-row:0}.row-399{grid-row:399}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.h-1{height:calc(var(--spacing) * 1)}.h-\[720px\]{height:720px}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-\[720px\]{width:720px}.w-full{width:100%}.max-w-\[760px\]{max-width:760px}.flex-1{flex:1}.\!shrink{flex-shrink:1!important}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[drop-ripple_2\.4s_ease-out_infinite_backwards\]{animation:drop-ripple 2.4s ease-out infinite backwards}.animate-\[drop-zone-in_0\.15s_ease_both\]{animation:drop-zone-in .15s both}.animate-\[pulse_1\.5s_ease-in-out_infinite\]{animation:pulse 1.5s ease-in-out infinite}.animate-spin{animation:var(--animate-spin)}.resize{resize:both}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e+38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[color-mix\(in_srgb\,var\(--accent\)_50\%\,transparent\)\]{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.border-\[color-mix\(in_srgb\,var\(--accent\)_50\%\,transparent\)\]{border-color:color-mix(in srgb,var(--accent) 50%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--accent\)_6\%\,transparent\)\]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[color-mix\(in_srgb\,var\(--accent\)_6\%\,transparent\)\]{background-color:color-mix(in srgb,var(--accent) 6%,transparent)}}.bg-status-running{background-color:var(--color-status-running)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[13px\]{font-size:13px}.break-all{word-break:break-all}.text-\[var\(--error-text\)\]{color:var(--error-text)}.text-text-muted{color:var(--color-text-muted)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal}.ordinal,.tabular-nums{font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.\[pidance\:err\]{pidance:err}.\[scrollbar-width\:none\]{scrollbar-width:none}@media (min-width:520px){.min-\[520px\]\:flex{display:flex}}@media (min-width:40rem){.sm\:inline{display:inline}}}:root{color-scheme:light;--bg:#fdfcfa;--bg-panel:#f7f6f4;--bg-elevated:#fff;--bg-hover:#0000000d;--bg-selected:#b350172b;--bg-subtle:#f4f3f1;--border:#e5e1de;--border-strong:#cbc7c2;--text:#393a34;--text-muted:#5c5c54;--text-dim:#797970;--accent:#b35017;--accent-hover:#9a4310;--accent-foreground:#fff;--user-bg:#f7f2ee;--assistant-bg:#fdfcfa;--tool-bg:#efeeec80;--code-bg:#f4f3f1;--status-running:#b35017;--status-waiting:#c99700;--status-unread:#2d72c4;--status-success:#5f8d3d;--status-warning:#8d6c15;--status-danger:#b7493f;--status-success-bg:#5f8d3d14;--status-success-border:#5f8d3d59;--status-success-foreground:#fff;--status-warning-bg:#8d6c1514;--status-warning-border:#8d6c1566;--status-danger-bg:#b7493f12;--status-danger-border:#b7493f66;--error-text:#a43d35;--diff-added-text:#47752b;--diff-added-bg:#5f8d3d17;--diff-added-border:#5f8d3d99;--diff-removed-text:#a43d35;--diff-removed-bg:#b7493f17;--diff-removed-border:#b7493f99;--diff-hunk-bg:#2d72c41f;--live-indicator-glow:0 0 6px #5f8d3d99;--warning:var(--status-warning);--danger:var(--status-danger);--success:var(--status-success);--focus:#b35017;--focus-ring:#b3501755;--overlay:#39393420;--disabled-opacity:.48;--shadow-float:0 18px 50px #39393424;--shadow-input:0 1px 2px #39393412,0 0 0 1px #ffffff80 inset;--radius-xs:4px;--radius-sm:6px;--radius-md:9px;--radius-lg:13px;--radius-pill:999px}html.dark{color-scheme:dark;--bg:#120f0e;--bg-panel:#171615;--bg-elevated:#1c1a18;--bg-hover:#ffffff12;--bg-selected:#b9a5992b;--bg-subtle:#171616;--border:#242323;--border-strong:#504e4c;--text:#c9c5ba;--text-muted:#8f8b81;--text-dim:#77736b;--accent:#da7c47;--accent-hover:#eb8c57;--accent-foreground:#120f0e;--user-bg:#25170e;--assistant-bg:#120f0e;--tool-bg:#120f0e80;--code-bg:#0e0c0b;--status-running:#da7c47;--status-waiting:#eab308;--status-unread:#479fe6;--status-success:#76ad4f;--status-warning:#c67f13;--status-danger:#da5b4a;--status-success-bg:#76ad4f1f;--status-success-border:#76ad4f70;--status-success-foreground:#120f0e;--status-warning-bg:#c67f131f;--status-warning-border:#c67f1370;--status-danger-bg:#da5b4a1f;--status-danger-border:#da5b4a7a;--error-text:#ed7665;--diff-added-text:#8bc766;--diff-added-bg:#76ad4f1f;--diff-added-border:#76ad4fb3;--diff-removed-text:#ed7665;--diff-removed-bg:#da5b4a24;--diff-removed-border:#da5b4ab3;--diff-hunk-bg:#479fe624;--live-indicator-glow:0 0 6px #76ad4fb3;--warning:var(--status-warning);--danger:var(--status-danger);--success:var(--status-success);--focus:#da7c47;--focus-ring:#da7c4755;--overlay:#0009;--disabled-opacity:.48;--shadow-float:0 20px 60px #00000070;--shadow-input:0 1px 2px #00000040,0 0 0 1px #ffffff08 inset}html[data-theme-style=fusion]{--bg:#fbfcfd;--bg-panel:#f3f6f7;--bg-elevated:#fff;--bg-hover:#163b4d0a;--bg-selected:#2e6f9520;--bg-subtle:#eef2f3;--border:#dce4e6;--border-strong:#bdcbd0;--text:#263439;--text-muted:#607077;--text-dim:#819096;--accent:#286e98;--accent-hover:#1e5c82;--accent-foreground:#fff;--user-bg:#eaf2f7;--assistant-bg:#fbfcfd;--tool-bg:#f0f5f4;--code-bg:#172126;--status-running:#27836e;--status-waiting:#cf9f1d;--status-unread:#286e98;--status-success:#49805d;--status-warning:#9a6a1a;--status-danger:#b34f58;--status-success-bg:#49805d14;--status-success-border:#49805d59;--status-success-foreground:#fff;--status-warning-bg:#9a6a1a14;--status-warning-border:#9a6a1a66;--status-danger-bg:#b34f5812;--status-danger-border:#b34f5866;--error-text:#a23f49;--diff-added-text:#39704d;--diff-added-bg:#49805d17;--diff-added-border:#49805d99;--diff-removed-text:#a23f49;--diff-removed-bg:#b34f5817;--diff-removed-border:#b34f5899;--diff-hunk-bg:#286e981f;--live-indicator-glow:0 0 6px #49805d99;--focus:#286e98;--focus-ring:#286e9844;--overlay:#18343d30;--shadow-float:0 18px 48px #163b4d20;--shadow-input:0 1px 2px #163b4d12,0 0 0 1px #fff inset}html.dark[data-theme-style=fusion]{--bg:#101719;--bg-panel:#141d20;--bg-elevated:#192428;--bg-hover:#d8edf212;--bg-selected:#6ba7c426;--bg-subtle:#172124;--border:#263337;--border-strong:#46585e;--text:#ced8d8;--text-muted:#8d9c9e;--text-dim:#708084;--accent:#69a7ca;--accent-hover:#7fb8d6;--accent-foreground:#0f1719;--user-bg:#162832;--assistant-bg:#101719;--tool-bg:#121d1f;--code-bg:#0b1113;--status-running:#5eb39b;--status-waiting:#ecc94b;--status-unread:#69a7ca;--status-success:#79ad78;--status-warning:#d0a356;--status-danger:#dd777e;--status-success-bg:#79ad781f;--status-success-border:#79ad7870;--status-success-foreground:#101719;--status-warning-bg:#d0a3561f;--status-warning-border:#d0a35670;--status-danger-bg:#dd777e1f;--status-danger-border:#dd777e7a;--error-text:#ed8f95;--diff-added-text:#91c590;--diff-added-bg:#79ad781f;--diff-added-border:#79ad78b3;--diff-removed-text:#ed8f95;--diff-removed-bg:#dd777e24;--diff-removed-border:#dd777eb3;--diff-hunk-bg:#69a7ca24;--live-indicator-glow:0 0 6px #79ad78b3;--focus:#69a7ca;--focus-ring:#69a7ca55;--overlay:#0009;--shadow-float:0 20px 60px #0006;--shadow-input:0 1px 2px #0000003d,0 0 0 1px #ffffff08 inset}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2}*{box-sizing:border-box}body,html{background:var(--bg);height:100%;color:var(--text);overscroll-behavior:none;margin:0;padding:0;font-family:Aptos,Segoe UI Variable,Noto Sans SC,-apple-system,BlinkMacSystemFont,sans-serif;font-size:14px}body{height:100dvh}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}:root{--font-mono:var(--font-noto-mono),"JetBrains Mono","Fira Code","Consolas",ui-monospace,"PingFang SC","Microsoft YaHei",monospace}code,pre{font-family:var(--font-mono)}.chat-selectable,.compaction-file-list,.markdown-code-block,.markdown-code-body,code,pre{-webkit-user-select:text;user-select:text;-webkit-touch-callout:default}.markdown-body{color:var(--text);word-break:break-word;font-size:14px;line-height:1.72}.markdown-body.markdown-body--extension{font-size:inherit;color:inherit;line-height:1.5}.markdown-body.markdown-body--extension p{margin:0 0 4px}.markdown-body.markdown-body--extension p:last-child{margin-bottom:0}.markdown-body.markdown-body--extension h1,.markdown-body.markdown-body--extension h2,.markdown-body.markdown-body--extension h3,.markdown-body.markdown-body--extension h4,.markdown-body.markdown-body--extension h5,.markdown-body.markdown-body--extension h6{margin:0 0 4px;font-size:1em;font-weight:650;line-height:1.35}.markdown-body.markdown-body--extension ol,.markdown-body.markdown-body--extension ul{margin:2px 0 4px}.markdown-body p{margin:0 0 8px}.markdown-body p:last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{color:var(--text);letter-spacing:0;margin:10px 0 5px;font-weight:600;line-height:1.35}.markdown-body h1{font-size:1.16em}.markdown-body h2{font-size:1.08em}.markdown-body h3{color:var(--text);font-size:.98em}@supports (color:color-mix(in lab,red,red)){.markdown-body h3{color:color-mix(in srgb,var(--text) 88%,var(--text-muted))}}.markdown-body ol,.markdown-body ul{margin:5px 0 8px;padding-left:22px;list-style-position:outside}.markdown-body li{margin:3px 0;padding-left:2px}.markdown-body ul>li{list-style-type:disc}.markdown-body ol>li{list-style-type:decimal}.markdown-body li>p{margin:0}.markdown-body li::marker{color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body li::marker{color:color-mix(in srgb,var(--accent) 72%,var(--text-muted))}}.markdown-body li::marker{font-weight:600}.markdown-body strong{color:var(--text)}@supports (color:color-mix(in lab,red,red)){.markdown-body strong{color:color-mix(in srgb,var(--text) 88%,var(--accent))}}.markdown-body strong{font-weight:700}.markdown-body em{color:var(--text-muted)}.markdown-body a{color:var(--accent);text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body a{-webkit-text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent);text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent)}}.markdown-body a:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.markdown-body .markdown-inline-code{background:var(--bg-subtle);color:var(--text);font-family:var(--font-mono);box-shadow:inset 0 0 0 1px var(--border);border-radius:5px;padding:1px 5px;font-size:.92em}@supports (color:color-mix(in lab,red,red)){.markdown-body .markdown-inline-code{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border) 70%,transparent)}}.markdown-body .contains-task-list{padding-left:0;list-style:none}.markdown-body .task-list-item{padding-left:25px;display:block;position:relative}.markdown-body .task-list-item::marker{content:""}.markdown-body .task-list-item>input[type=checkbox],.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child{appearance:none;border:1px solid var(--border);background:var(--bg);border-radius:4px;place-content:center;width:14px;height:14px;margin:0;display:inline-grid;position:absolute;top:.35em;left:0}.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{border-color:color-mix(in srgb,var(--accent) 55%,var(--border))}}.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{background:color-mix(in srgb,var(--accent) 10%,var(--bg))}}.markdown-body .task-list-item>input[type=checkbox]:checked:before,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked:before{content:"";border:solid var(--accent);border-width:0 1.5px 1.5px 0;width:4px;height:8px;transform:rotate(45deg)translateY(-1px)}.markdown-body blockquote{border-left:3px solid var(--border)}@supports (color:color-mix(in lab,red,red)){.markdown-body blockquote{border-left:3px solid color-mix(in srgb,var(--border) 75%,var(--text-muted))}}.markdown-body blockquote{background:var(--bg-subtle);color:var(--text-muted);border-radius:0 6px 6px 0;margin:6px 0;padding:6px 11px}.markdown-table-wrap{border:1px solid var(--border);border-radius:var(--radius-md);-webkit-touch-callout:default;width:100%;margin:8px 0}.markdown-table-scroll,.markdown-table-wrap{cursor:text;-webkit-user-select:text;user-select:text}.markdown-table-scroll{overflow:visible}.markdown-table-row{border-bottom:1px solid var(--border);align-items:stretch;font-size:13px;display:grid}.markdown-table-body .markdown-table-row:last-child{border-bottom:0}.markdown-table-td,.markdown-table-th{text-align:left;cursor:text;overflow-wrap:anywhere;word-break:break-word;-webkit-user-select:text;user-select:text;-webkit-touch-callout:default;min-width:0;padding:6px 10px}.markdown-table-th{background:var(--bg-panel);color:var(--text)}@supports (color:color-mix(in lab,red,red)){.markdown-table-th{color:color-mix(in srgb,var(--text) 88%,var(--text-muted))}}.markdown-table-th{font-weight:650}.markdown-table-body .markdown-table-row:nth-child(2n) .markdown-table-td{background:var(--bg-subtle)}.markdown-body hr{background:linear-gradient(90deg,transparent,var(--border),transparent);border:none;height:1px;margin:12px 0}.markdown-body .katex-display{margin:.6em 0;padding:2px 0;overflow:auto hidden}.markdown-body .katex{font-size:1.05em}.markdown-user-message p{white-space:pre-wrap}.markdown-custom-message{line-height:1.32}.markdown-custom-message p{margin:0}.markdown-custom-message h1,.markdown-custom-message h2,.markdown-custom-message h3,.markdown-custom-message h4,.markdown-custom-message h5,.markdown-custom-message h6{margin:4px 0 2px;line-height:1.18}.markdown-custom-message ol,.markdown-custom-message ul{margin:2px 0 3px}.markdown-custom-message li{margin:0}.markdown-custom-message blockquote{margin:3px 0;padding:4px 8px}.markdown-custom-message .markdown-code-block,.markdown-custom-message .markdown-table-wrap{margin:4px 0}.markdown-compaction-message{line-height:1.5}.markdown-compaction-message p{margin:0 0 7px}.markdown-compaction-message h1,.markdown-compaction-message h2,.markdown-compaction-message h3,.markdown-compaction-message h4,.markdown-compaction-message h5,.markdown-compaction-message h6{margin:8px 0 3px;line-height:1.25}.markdown-compaction-message ol,.markdown-compaction-message ul{margin:4px 0 8px}.markdown-compaction-message li{margin:2px 0}.markdown-compaction-message .markdown-code-block,.markdown-compaction-message .markdown-table-wrap{margin:6px 0}.compaction-file-details{border-top:1px solid var(--border);color:var(--text-muted);margin-top:10px;padding-top:8px;font-size:12px}.compaction-file-details summary{cursor:pointer;font-weight:600;line-height:1.4}.compaction-file-section{margin-top:8px}.compaction-file-title{color:var(--text);margin-bottom:4px;font-size:11px;font-weight:650}.compaction-file-list{overscroll-behavior:auto;touch-action:auto;border:1px solid var(--border);background:var(--bg-panel);max-height:180px;font-family:var(--font-mono);border-radius:6px;margin:0;padding:7px 8px;font-size:11px;line-height:1.45;list-style:none;overflow:auto}.compaction-file-list li{overflow-wrap:anywhere}.compaction-file-list li+li{margin-top:3px}.markdown-code-block{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--code-bg);box-shadow:none;margin:6px 0;position:relative;overflow:hidden}.markdown-code-body{overscroll-behavior:auto;touch-action:auto;max-height:min(320px,45vh);overflow:auto}@media (max-width:640px){.markdown-code-body{max-height:min(240px,32vh)}}.markdown-code-header{background:var(--bg-panel);padding:5px 10px}@supports (color:color-mix(in lab,red,red)){.markdown-code-header{background:color-mix(in srgb,var(--bg-panel) 88%,var(--code-bg))}}.markdown-code-header{border-bottom:1px solid var(--border);color:var(--text-dim);justify-content:space-between;align-items:center;gap:8px;font-size:11px;display:flex}.markdown-code-lang{color:var(--text-muted);font-family:var(--font-mono);font-weight:650}.markdown-code-actions{align-items:center;gap:6px;display:flex}.markdown-code-action{border:1px solid var(--border);background:var(--bg);color:var(--text-muted);cursor:pointer;font:inherit;border-radius:5px;padding:2px 7px;font-size:11px;line-height:1.25}.markdown-code-action:hover:not(:disabled){color:var(--text);border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.markdown-code-action:hover:not(:disabled){border-color:color-mix(in srgb,var(--border) 70%,var(--text-muted))}}.markdown-code-action:disabled{color:var(--text-dim);cursor:not-allowed;opacity:var(--disabled-opacity)}.chat-input-shell:focus-within{border-color:var(--focus)!important;box-shadow:var(--shadow-input),0 0 0 3px var(--focus-ring)!important}@supports (color:color-mix(in lab,red,red)){.chat-input-shell:focus-within{box-shadow:var(--shadow-input),0 0 0 3px color-mix(in srgb,var(--focus-ring) 72%,transparent)!important}}.markdown-code-action.is-active{background:var(--bg-selected);color:var(--text)}.mermaid-block{background:var(--bg);padding:12px;overflow-x:auto}@supports (color:color-mix(in lab,red,red)){.mermaid-block{background:color-mix(in srgb,var(--bg) 92%,var(--bg-panel))}}.mermaid-block svg{max-width:none;display:block}.mermaid-block-loading{min-height:120px}.mermaid-block-error{color:var(--text-muted);font-family:var(--font-mono);font-size:12px}.file-viewer-toolbar{min-height:35px}.file-viewer-path{flex:auto;min-width:48px}.file-viewer-meta{text-overflow:ellipsis;flex:0 auto;min-width:0;overflow:hidden}.file-viewer-controls{gap:6px}.file-viewer-action-slot{flex:0 0 24px;justify-content:center;align-items:center;width:24px;height:24px;display:flex}.file-viewer-mode-switch{border:1px solid var(--border);border-radius:5px;height:24px;display:flex;overflow:hidden}.file-viewer-mode-button{border:0;border-left:1px solid var(--border);height:22px;font:inherit;letter-spacing:0;cursor:pointer;white-space:nowrap;padding:0 8px;font-size:11px;font-weight:500}.file-viewer-mode-button:first-child{border-left:0}.file-viewer-mode-button:hover{filter:brightness(1.08)}.file-viewer-icon-button{box-sizing:border-box;border:1px solid var(--border);width:24px;height:24px;flex:0 0 24px}.file-viewer-icon-button:hover{color:var(--text);background:var(--bg-hover)!important}.file-viewer-icon-button:focus-visible,.file-viewer-mode-button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (max-width:640px){.file-viewer-meta{display:none}}@media (max-width:380px){.file-viewer-toolbar{gap:6px!important;padding-inline:8px!important}.file-viewer-mode-button{padding-inline:6px}}.markdown-file-preview h1{font-size:1.8em}.markdown-file-preview h2{font-size:1.4em}.markdown-file-preview h3{font-size:1.15em}.markdown-file-preview p{margin:0 0 12px}.markdown-file-preview pre{border:1px solid var(--border);border-radius:6px;margin:12px 0;padding:12px 16px;font-size:13px;overflow-x:auto}.markdown-file-preview code,.markdown-file-preview pre{background:var(--bg-panel);font-family:var(--font-mono)}.markdown-file-preview code{border-radius:3px;padding:1px 5px;font-size:.9em}.markdown-file-preview pre code{background:0 0;padding:0}.markdown-body span.linenumber,span.linenumber{color:var(--text-dim)!important;font-style:normal!important}@keyframes drop-zone-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes drop-icon-float{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}@keyframes drop-ring-pulse{0%,to{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}@keyframes drop-ripple{0%{opacity:.6;transform:scale(0)}to{opacity:0;transform:scale(1)}}@keyframes blink{0%,to{opacity:1}50%{opacity:.3}}@keyframes spin{to{transform:rotate(1turn)}}@keyframes sidebar-running-spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}@keyframes notice-shelf-in{0%{opacity:0;transform:translateY(-6px)scale(.995)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes notice-shelf-out{0%{opacity:1;transform:translateY(0)scale(1)}to{opacity:0;transform:translateY(-5px)scale(.995)}}@media (prefers-reduced-motion:reduce){.notice-shelf-item{animation-duration:.001ms!important}}.chat-jump-bottom{z-index:45;border:1px solid var(--border);background:var(--bg-panel);width:32px;height:32px;color:var(--text-muted);cursor:pointer;opacity:0;pointer-events:none;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:opacity .15s,transform .15s,background-color .15s,color .15s;display:flex;position:absolute;bottom:14px;left:50%;transform:translate(-50%)translateY(6px)scale(.92);box-shadow:0 1px 2px #0f172a0f,0 8px 24px -12px #0f172a2e}.chat-jump-bottom.is-visible{opacity:1;pointer-events:auto;transform:translate(-50%)translateY(0)scale(1)}.chat-jump-bottom:hover{background:var(--bg-hover);color:var(--text)}@media (prefers-reduced-motion:reduce){.chat-jump-bottom,.chat-jump-bottom.is-visible{transition:opacity .001ms;transform:translate(-50%)}}@keyframes saved-pop{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--status-success) 55%,transparent);transform:scale(1)}40%{box-shadow:0 0 0 6px color-mix(in srgb,var(--status-success) 25%,transparent);transform:scale(1.08)}to{transform:scale(1);box-shadow:0 0 #0000}}@keyframes saved-check-draw{0%{stroke-dashoffset:18px;opacity:0}to{stroke-dashoffset:0;opacity:1}}@media (min-width:641px){.sidebar-overlay-backdrop{display:none!important}.sidebar-container{transition:width .2s,min-width .2s;position:relative;overflow:hidden}.sidebar-container.sidebar-dragging{transition:none}.sidebar-container.sidebar-open{width:var(--sidebar-width,260px);min-width:var(--sidebar-width,260px)}.sidebar-container.sidebar-closed{width:0;min-width:0;border-right:none!important}.sidebar-inner{width:var(--sidebar-width,260px);min-width:var(--sidebar-width,260px)}}.sidebar-inner{flex-direction:column;flex:auto;min-width:0;height:100%;min-height:0;display:flex}.sidebar-resize-handle{cursor:col-resize;z-index:10;touch-action:none;width:5px;position:absolute;top:0;bottom:0;right:0}.sidebar-resize-handle.dragging,.sidebar-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.sidebar-resize-handle.dragging,.sidebar-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}.sidebar-resize-handle:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (max-width:640px){.sidebar-resize-handle{display:none}}.sidebar-pagination-btn{height:22px;color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:center;gap:4px;padding:0 8px;font-size:11px;transition:background .12s,color .12s;display:inline-flex}.sidebar-pagination-btn:hover{background:var(--bg-hover);color:var(--text)}.sidebar-pagination-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (min-width:641px){.workspace-container{flex-shrink:0;transition:width .2s,min-width .2s;overflow:hidden}.workspace-container.workspace-dragging{transition:none}.workspace-container.workspace-closed{border-left:none!important}}@media (max-width:640px){.chat-stats-center{display:none!important}.sidebar-container{width:280px;max-width:85vw;transition:transform .25s,box-shadow .25s;top:0;bottom:0;left:0;position:fixed!important}.sidebar-container.sidebar-open{transform:translate(0);box-shadow:4px 0 20px #00000026}.sidebar-container.sidebar-closed{box-shadow:none;transform:translate(-100%)}.workspace-container{transition:transform .25s,box-shadow .25s;top:0;bottom:0;right:0;width:100%!important;min-width:0!important;position:fixed!important}.workspace-container.workspace-open{transform:translate(0);box-shadow:-4px 0 20px #00000026}.workspace-container.workspace-closed{box-shadow:none;transform:translate(100%);border-left:none!important}.workspace-container>.workspace-inner{width:100%!important;min-width:0!important}}.sidebar-icon-btn{width:24px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:inline-flex}.sidebar-icon-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.sidebar-icon-btn:active:not(:disabled){background:var(--bg-selected)}.sidebar-icon-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.sidebar-icon-btn:disabled{color:var(--text-dim)}@media (hover:hover) and (pointer:fine){.sidebar-indent-indicator{opacity:0;pointer-events:none}.sidebar-row:focus-within>.sidebar-indent-indicator,.sidebar-row:hover>.sidebar-indent-indicator{opacity:1;pointer-events:auto}.sidebar-row:focus-within .sidebar-indicator-icon,.sidebar-row:hover .sidebar-indicator-icon{opacity:0;pointer-events:none}}@media (hover:none),(pointer:coarse){.sidebar-indent-indicator{opacity:1;pointer-events:auto}.sidebar-indicator-icon{opacity:0;pointer-events:none}}.sidebar-chevron-always{opacity:1;pointer-events:auto}.sidebar-indicator-icon{transition:opacity .12s}.extension-card-btn{border:1px solid var(--border);background:var(--bg);height:26px;color:var(--text-muted);font:inherit;cursor:pointer;border-radius:6px;align-items:center;gap:5px;padding:0 12px;font-size:12px;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.extension-card-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.extension-card-btn:disabled{cursor:not-allowed;opacity:.55}.guide-selectors{flex-wrap:wrap;align-items:center;gap:4px;margin-bottom:10px;display:flex}.guide-selector{background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:5px;height:28px;padding:0 6px;transition:background .12s,border-color .12s;display:inline-flex}.guide-selector:hover{background:var(--bg-hover)}.guide-selector:focus-within{background:var(--bg-hover);border-color:var(--accent)}.guide-selector-icon{color:var(--text-dim);flex-shrink:0}.guide-select{width:160px;min-width:0;max-width:160px;color:var(--text);font:inherit;cursor:pointer;text-overflow:ellipsis;background:0 0;border:none;outline:none;font-size:12.5px}.guide-select:disabled{color:var(--text-dim);cursor:default}.guide-new-worktree-btn{width:18px;height:18px;color:var(--text-dim);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:5px;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:inline-flex}.guide-new-worktree-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.guide-new-worktree-btn:disabled{cursor:default;opacity:.5}.guide-worktree-form{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.guide-worktree-input{border:1px solid var(--border);background:var(--bg-panel);min-width:160px;max-width:260px;height:28px;color:var(--text);font:inherit;border-radius:6px;outline:none;padding:0 8px;font-size:12.5px}.guide-worktree-input:focus{border-color:var(--accent)}.guide-worktree-error{color:var(--danger,#e5484d);font-size:11px}@media (max-width:640px){.guide-selectors{flex-wrap:nowrap}.guide-selector{flex:1;min-width:0}.guide-select{width:100%;max-width:none}.guide-new-worktree-btn{flex-shrink:0}}.sidebar-icon-btn--active,.sidebar-icon-btn--active:hover:not(:disabled){background:var(--bg-selected);color:var(--accent)}.sidebar-icon-btn--danger:hover:not(:disabled){background:var(--status-danger-bg);color:var(--status-danger)}.sidebar-icon-btn--done,.sidebar-icon-btn--done:hover:not(:disabled){background:var(--status-success)}@supports (color:color-mix(in lab,red,red)){.sidebar-icon-btn--done,.sidebar-icon-btn--done:hover:not(:disabled){background:color-mix(in srgb,var(--status-success) 18%,transparent)}}.sidebar-icon-btn--done,.sidebar-icon-btn--done:hover:not(:disabled){color:var(--status-success)}.sidebar-row .sidebar-icon-btn--hover{opacity:0}.sidebar-row .sidebar-icon-btn--hover:focus-visible,.sidebar-row:focus-within .sidebar-icon-btn--hover,.sidebar-row:hover .sidebar-icon-btn--hover{opacity:1}@media (max-width:640px){.sidebar-toolbar{gap:12px!important}}.settings-layout{height:min(72dvh,660px);min-height:0;display:flex}.settings-nav-list{flex-direction:column;gap:2px;padding:10px 8px;display:flex}.settings-nav-item{border-radius:var(--radius-sm);width:100%;color:var(--text-muted);text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;font-size:13px;font-weight:400;transition:background .12s,color .12s;display:flex;position:relative}.settings-nav-item:hover{background:var(--bg-hover);color:var(--text)}.settings-nav-item.is-active{background:var(--bg-selected);color:var(--text);font-weight:600}.settings-nav-item.is-active:before{border-radius:var(--radius-pill);background:var(--accent);content:"";width:2px;position:absolute;top:7px;bottom:7px;left:3px}.settings-content-pane,.settings-scroll-region{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.settings-content-pane{background:var(--bg);overflow:hidden}.settings-scroll-region{scrollbar-gutter:stable;overflow-y:auto}.settings-page-content{width:min(100%,700px);padding:24px 28px 32px}.settings-choice{margin-bottom:26px}.settings-segmented-control{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-panel);width:fit-content;max-width:100%;box-shadow:var(--shadow-input);gap:2px;padding:3px;display:flex}.settings-segmented-option{border-radius:var(--radius-sm);min-width:96px;height:32px;color:var(--text-muted);white-space:nowrap;cursor:pointer;background:0 0;border:none;padding:0 14px;font-size:12.5px;transition:background .12s,color .12s,box-shadow .12s}.settings-segmented-option:hover{color:var(--text)}.settings-segmented-option.is-active{background:var(--bg-elevated);color:var(--text);box-shadow:0 1px 3px var(--text)}@supports (color:color-mix(in lab,red,red)){.settings-segmented-option.is-active{box-shadow:0 1px 3px color-mix(in srgb,var(--text) 12%,transparent)}}.settings-segmented-option.is-active{font-weight:600}.settings-empty-state{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:10px;height:100%;padding:32px 24px;display:flex}.app-top-bar{height:36px}.app-top-bar,.workspace-header{border-bottom:1px solid var(--border);background:var(--bg-panel);flex-shrink:0;align-items:center;display:flex}.workspace-header{gap:4px;height:40px;padding:0 8px 0 12px}.changes-panel{border-left:1px solid var(--border);background:var(--bg-panel);flex-direction:column;flex-shrink:0;align-self:stretch;min-width:0;height:100%;min-height:0;display:flex;position:relative;overflow:hidden}.changes-panel>.changes-panel{border-left:none;flex:auto;height:100%;min-height:0;width:100%!important;min-width:0!important}.changes-panel-content{flex:1;grid-template-rows:minmax(120px,36%) minmax(0,1fr);min-height:0;display:grid}.changes-panel-diff,.changes-panel-list{min-height:0;overflow:auto}.changes-panel-list{border-bottom:1px solid var(--border)}.changes-panel-hint{color:var(--text-dim);padding:18px 14px;font-size:11.5px;line-height:1.5}.changes-panel-hint.is-error{color:var(--status-danger)}.changes-panel-resize-handle{z-index:10;cursor:col-resize;touch-action:none;width:6px;position:absolute;top:0;bottom:0;left:-3px}.changes-panel-resize-handle.dragging,.changes-panel-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.changes-panel-resize-handle.dragging,.changes-panel-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}.secondary-panel-inner{flex-direction:column;width:100%;min-width:0;height:100%;min-height:0;display:flex;overflow:hidden}.secondary-panel-tabs{flex:none;min-width:0;min-height:0}.secondary-panel-body{flex-direction:column;flex:auto;min-width:0;min-height:0;display:flex;overflow:hidden}.workspace-navigation-rail{border-left:1px solid var(--border);background:var(--bg);flex-direction:column;align-items:center;gap:4px;padding:8px 0;display:flex}.workspace-resize-handle{cursor:col-resize;z-index:10;touch-action:none;width:5px;position:absolute;top:0;bottom:0;left:0}.workspace-resize-handle.dragging,.workspace-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.workspace-resize-handle.dragging,.workspace-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}@media (max-width:640px){.workspace-resize-handle{display:none}}.file-row-actions{background:var(--bg-panel);border:1px solid var(--border);opacity:0;visibility:hidden;border-radius:6px;align-items:center;gap:2px;padding:1px;transition:opacity .12s,visibility .12s;display:flex;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.file-row{border-radius:var(--radius-xs);transition:background .12s}.file-row:focus-within,.file-row:hover{background:var(--bg-hover)}.file-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.file-row-actions:has([data-menu-open=true]),.file-row:focus-within .file-row-actions,.file-row:hover .file-row-actions{opacity:1;visibility:visible}.file-row-action-btn{width:24px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;padding:0;text-decoration:none;transition:background .12s,color .12s;display:inline-flex}.file-row-action-btn:hover{background:var(--bg-hover);color:var(--text)}.file-row-action-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (pointer:coarse){.file-row-actions{opacity:1;visibility:visible}.file-row .file-row-badge{display:none}}.git-file-row{cursor:pointer;width:100%;height:26px;color:var(--text);text-align:left;border-radius:var(--radius-xs);background:0 0;border:none;align-items:center;gap:6px;padding:0 8px;font-size:12px;transition:background .12s,color .12s;display:flex}.git-file-row:hover{background:var(--bg-hover)}.git-file-row.is-selected{background:var(--bg-selected);color:var(--text)}@media (max-width:640px){.changes-panel{display:none!important}}.git-file-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (hover:none),(pointer:coarse){.sidebar-row .sidebar-icon-btn--hover{opacity:1}.sidebar-icon-btn{width:28px;height:28px;position:relative}.sidebar-icon-btn:after{content:"";position:absolute;inset:-4px -2px}}@media (max-width:640px){.app-top-bar{height:44px}.app-top-bar>button:not(.app-top-bar-stats){width:44px!important;height:44px!important}.app-top-bar-stats{min-width:0;max-width:min(48vw,168px);overflow:hidden;gap:4px!important;height:44px!important;padding:0 8px!important}.app-top-bar-stats>span{text-overflow:ellipsis;min-width:0;overflow:hidden}.workspace-header{height:44px;padding-right:6px}.workspace-header .sidebar-icon-btn,.workspace-navigation-rail .sidebar-icon-btn{width:36px;height:36px}.workspace-navigation-rail{gap:8px;padding-top:8px}.settings-layout{height:min(78dvh,680px)}.settings-nav-list{padding:10px}.settings-page-content{padding:20px 16px 28px}.settings-segmented-control{width:100%;overflow-x:auto}.settings-segmented-option{flex:1 0 auto;min-width:0;height:40px}.chat-input-shell{padding:9px 8px 9px 12px!important}.chat-input-shell button{min-height:40px}.file-row{min-height:44px}.file-row>svg{width:12px;height:12px}.file-row-icon svg{width:18px;height:18px}.file-row-action-btn{width:32px;height:32px}}.sidebar-row .sidebar-icon-btn--hover.sidebar-icon-btn--active{opacity:1}@media (hover:none),(pointer:coarse){.sidebar-chevron-btn:after{content:"";position:absolute;inset:-5px -3px}}.file-viewer-toolbar{min-width:0}.file-viewer-path{text-overflow:ellipsis;white-space:nowrap;min-width:72px;overflow:hidden}.file-viewer-meta{white-space:nowrap;flex-shrink:0}.file-viewer-controls{flex-shrink:0;align-items:center;gap:3px;margin-left:auto;display:flex}.file-viewer-icon-button{width:26px;height:26px;color:var(--text-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:5px;flex:none;justify-content:center;align-items:center;padding:0;text-decoration:none;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.file-viewer-icon-button:hover:not(:disabled),.file-viewer-icon-button[data-active=true]{color:var(--text);background:var(--bg-selected);border-color:var(--border)}.file-viewer-icon-button.is-save:not(:disabled){color:var(--accent)}.file-close-confirm__button:focus-visible,.file-editor-notice button:focus-visible,.file-viewer-icon-button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.file-viewer-icon-button:disabled{opacity:.34;cursor:not-allowed}.file-viewer-toolbar-separator{background:var(--border);flex:none;width:1px;height:16px;margin:0 2px}.file-viewer-live-indicator{border-radius:50%;flex:none;width:6px;height:6px}.file-source-editor{box-sizing:border-box;resize:none;background:var(--bg);width:100%;min-width:max-content;height:100%;min-height:0;color:var(--text);caret-color:var(--accent);font-family:var(--font-mono);tab-size:2;white-space:pre;border:0;outline:0;flex:auto;margin:0;padding:14px 18px;font-size:13px;line-height:1.6;display:block;overflow:auto}.file-source-editor.is-wrapped{white-space:pre-wrap;overflow-wrap:anywhere;min-width:100%}.file-close-confirm,.file-editor-notice{border-bottom:1px solid var(--border);background:var(--accent);align-items:center;gap:10px;min-height:34px;padding:5px 10px 5px 12px;display:flex}@supports (color:color-mix(in lab,red,red)){.file-close-confirm,.file-editor-notice{background:color-mix(in srgb,var(--accent) 7%,var(--bg-panel))}}.file-close-confirm,.file-editor-notice{color:var(--text-muted);flex:none;font-size:11.5px}.file-editor-notice.is-warning{background:var(--status-warning)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-warning{background:color-mix(in srgb,var(--status-warning) 10%,var(--bg-panel))}}.file-editor-notice.is-warning{color:var(--status-warning)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-warning{color:color-mix(in srgb,var(--status-warning) 72%,var(--text))}}.file-editor-notice.is-error{background:var(--status-danger)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-error{background:color-mix(in srgb,var(--status-danger) 9%,var(--bg-panel))}}.file-editor-notice.is-error{color:var(--status-danger)}.file-editor-notice.is-success{background:var(--status-success)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-success{background:color-mix(in srgb,var(--status-success) 8%,var(--bg-panel))}}.file-editor-notice.is-success{color:var(--status-success)}.file-editor-notice__actions{align-items:center;gap:5px;margin-left:auto;display:flex}.file-close-confirm__button,.file-editor-notice button{border:1px solid var(--border);background:var(--bg);min-height:24px;color:var(--text-muted);font:inherit;cursor:pointer;white-space:nowrap;border-radius:5px;padding:2px 8px}.file-close-confirm__button:hover,.file-editor-notice button:hover{color:var(--text);background:var(--bg-hover)}.file-close-confirm__button.is-danger,.file-editor-notice button.is-danger{color:var(--status-danger);border-color:var(--status-danger)}@supports (color:color-mix(in lab,red,red)){.file-close-confirm__button.is-danger,.file-editor-notice button.is-danger{border-color:color-mix(in srgb,var(--status-danger) 35%,var(--border))}}.file-close-confirm{background:var(--status-warning);min-height:36px}@supports (color:color-mix(in lab,red,red)){.file-close-confirm{background:color-mix(in srgb,var(--status-warning) 7%,var(--bg-panel))}}.file-close-confirm__message{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-right:auto;overflow:hidden}.file-close-confirm__button{align-items:center;gap:5px;display:inline-flex}.file-tab-dirty-dot{background:var(--accent);width:8px;height:8px;box-shadow:0 0 0 2px var(--accent);border-radius:50%}@supports (color:color-mix(in lab,red,red)){.file-tab-dirty-dot{box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 12%,transparent)}}.file-save-spinner,.file-tab-dirty-dot.is-saving{animation:file-editor-pulse .9s ease-in-out infinite alternate}.file-save-spinner{border:2px solid var(--accent);width:11px;height:11px}@supports (color:color-mix(in lab,red,red)){.file-save-spinner{border:2px solid color-mix(in srgb,var(--accent) 28%,transparent)}}.file-save-spinner{border-top-color:var(--accent);border-radius:50%;animation-name:file-editor-spin;animation-duration:.65s;animation-timing-function:linear;animation-iteration-count:infinite}.file-viewer-context-label{z-index:2;border-bottom:1px solid var(--border);background:var(--bg-panel);color:var(--text-dim);padding:5px 12px;font-size:10.5px;position:sticky;top:0}@keyframes file-editor-spin{to{transform:rotate(1turn)}}@keyframes file-editor-pulse{to{opacity:.45}}@media (max-width:640px){.file-viewer-toolbar{gap:6px!important;padding-left:8px!important;padding-right:0!important}.file-viewer-meta{display:none}.file-viewer-controls{scrollbar-width:none;max-width:68vw;padding-right:8px;overflow-x:auto}.file-viewer-controls::-webkit-scrollbar{display:none}.file-close-confirm,.file-editor-notice{flex-wrap:wrap;align-items:flex-start}.file-editor-notice__actions{width:100%;margin-left:0}.file-close-confirm__message{flex-basis:100%;width:100%}.file-close-confirm__button span{display:none}.file-close-confirm__button{justify-content:center;width:28px;padding:0}.file-source-editor{padding:12px}}@media (prefers-reduced-motion:reduce){.file-save-spinner,.file-tab-dirty-dot.is-saving{animation:none}}.pidance-terminal-surface{background:var(--bg)}.pidance-terminal-xterm{min-width:0;min-height:0}.pidance-terminal-xterm .xterm{height:100%}.pidance-terminal-xterm .xterm-viewport{background:0 0!important}.pidance-terminal-xterm .xterm-screen{background:0 0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
|
package/README.en.md
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
<p>
|
|
5
5
|
<a href="./README.md">简体中文</a> ·
|
|
6
6
|
<a href="https://github.com/henlii/pidance/issues">Issues</a> ·
|
|
7
|
-
<a href="./docs/
|
|
7
|
+
<a href="./docs/README.md">Documentation</a>
|
|
8
8
|
</p>
|
|
9
9
|
</div>
|
|
10
10
|
|
|
11
11
|
Pidance is an open-source web client for the [Pi](https://github.com/badlogic/pi-mono) coding agent. It reads local Pi session files directly and preserves Pi SDK session and runtime semantics, bringing live chat, project files, Git, worktrees, subagents, and configuration into one browser workspace. Pi remains the source of truth for data and execution semantics; Pidance provides a clearer and more complete interface.
|
|
12
12
|
|
|
13
|
-
> Current version: `0.2.
|
|
13
|
+
> Current version: `0.2.29` · npm package: `@henlii/pidance` · CLI: `pidance`
|
|
14
14
|
|
|
15
15
|
## Preview
|
|
16
16
|
|
|
@@ -32,7 +32,7 @@ Pidance is an open-source web client for the [Pi](https://github.com/badlogic/pi
|
|
|
32
32
|
- **Pi ecosystem integration**: inspect synchronous and asynchronous subagent run status, interact with generic extension UI cards, and view read-only projections of structured todos.
|
|
33
33
|
- **Central configuration**: manage provider authentication, API keys, models and model tests, session defaults, skills, plugins, and project trust.
|
|
34
34
|
- **Polished interface**: responsive desktop/mobile layouts, a command palette, session minimap, completion sound, English and Chinese, plus Light / Dark / System themes.
|
|
35
|
-
- **
|
|
35
|
+
- **Access protection**: Host/CSRF guards, login authentication, and mandatory passwords for non-loopback CLI listeners. Agent and file access are for trusted operators; there is no project-directory sandbox. See [security boundaries](./docs/security.md).
|
|
36
36
|
|
|
37
37
|
## Quick start
|
|
38
38
|
|
|
@@ -60,11 +60,11 @@ pidance -p 8080 -H 127.0.0.1
|
|
|
60
60
|
pidance --no-open
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
`PORT` and `PIDANCE_NO_OPEN=1` are also supported. Pidance reads `~/.pi/agent` by default; set `PI_CODING_AGENT_DIR` to use another Pi agent directory.
|
|
63
|
+
`PORT` and `PIDANCE_NO_OPEN=1` are also supported. The port can be configured in **Settings → General → Service and remote access** (default 31415; restart required). Pidance reads `~/.pi/agent` by default; set `PI_CODING_AGENT_DIR` to use another Pi agent directory.
|
|
64
64
|
|
|
65
65
|
### Remote or LAN access
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
The CLI binds to `127.0.0.1` by default. In **Settings → General → Service and remote access**, set a password and enable remote access to listen on `0.0.0.0` after a restart. Alternatively, configure it explicitly below. Listening on a non-loopback address requires a password; the CLI refuses to start without one:
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
70
|
PIDANCE_PASSWORD='use-a-strong-password' pidance --hostname 0.0.0.0
|
|
@@ -86,7 +86,7 @@ pidance
|
|
|
86
86
|
|
|
87
87
|
```bash
|
|
88
88
|
npm install
|
|
89
|
-
npm run dev #
|
|
89
|
+
npm run dev # standalone source development server: 127.0.0.1:31416, output .next
|
|
90
90
|
npm run check # typecheck + lint + unit tests
|
|
91
91
|
```
|
|
92
92
|
|
|
@@ -99,18 +99,17 @@ npm run test:browser # browser regression (needs a running instance; de
|
|
|
99
99
|
|
|
100
100
|
Do **not** run `npm run build` or `next build` during everyday development: it writes to `.next/` and can disrupt the development server. Production builds belong in an isolated release checkout through `npm run release:check`.
|
|
101
101
|
|
|
102
|
-
|
|
103
|
-
`.agents/skills/pidance-development/scripts/local-deploy.mjs restart`, with artifacts isolated in `.next-public`. Do not mix formal-service and working-tree processes, data directories, or build artifacts.
|
|
102
|
+
Development convention: **31415 is reserved for the stable installation; the working tree uses 31416**. Continuous testing writes `.next-public`; standalone dev writes `.next`. `npm run dev` now targets 127.0.0.1:31416 (same port as the continuous deployment — do not run both). See the [development guide](./docs/development.md) for test isolation and multi-client checks.
|
|
104
103
|
|
|
105
104
|
## Release process
|
|
106
105
|
|
|
107
|
-
|
|
106
|
+
Before releasing, run `npm run check`, prepare the version and bilingual release notes, then explicitly commit and push an annotated tag. Tag CI builds in isolation, audits before and after packing, publishes through npm OIDC, and creates the GitHub Release. npm and GitHub must use the same accepted tgz and SHA-256. The local candidate script does not change versions, tag, push, or publish.
|
|
108
107
|
|
|
109
108
|
See [docs/release.md](./docs/release.md) for the complete procedure.
|
|
110
109
|
|
|
111
110
|
## Architecture
|
|
112
111
|
|
|
113
|
-
Pidance is a Pi Web mode adapter: the main Agent runs the in-process Pi SDK (`AgentSessionRuntime`). See [#20](https://github.com/henlii/pidance/issues/20)
|
|
112
|
+
Pidance is a Pi Web mode adapter: the main Agent runs the in-process Pi SDK (`AgentSessionRuntime`). See the [architecture guide](./docs/architecture.md) for current responsibilities and interaction flows; [#20](https://github.com/henlii/pidance/issues/20) records the earlier migration specification.
|
|
114
113
|
|
|
115
114
|
```text
|
|
116
115
|
Browser / Route Handlers
|
|
@@ -134,17 +133,22 @@ Pi AgentSessionRuntime
|
|
|
134
133
|
```
|
|
135
134
|
|
|
136
135
|
- **Read-only browsing** parses Pi `.jsonl` sessions without creating an AgentSession; scanners and caches never write JSONL.
|
|
137
|
-
- **
|
|
136
|
+
- **Write operations or explicit wake requests** create or reuse an SDK session host when needed; SSE only observes an existing Host.
|
|
138
137
|
- Pi owns agent lifecycle, session replacement, resources, and JSONL/tree semantics. Pidance owns product use cases, the live registry, Web event projection, and UI adapters.
|
|
139
|
-
-
|
|
140
|
-
- File
|
|
138
|
+
- One-way dependencies and single-writer ownership are maintenance constraints, not a claim of complete concurrency safety. See the [known lifecycle, queue, cancellation, and recovery risks](./docs/architecture-review-2026-09-15.md).
|
|
139
|
+
- File access is currently not restricted to project roots. Authenticated users must be trusted with the local Agent and file capabilities.
|
|
141
140
|
|
|
142
141
|
## Documentation
|
|
143
142
|
|
|
143
|
+
Start with the [documentation index](./docs/README.md). Detailed maintainer guides are currently in Chinese.
|
|
144
|
+
|
|
145
|
+
- [Architecture](./docs/architecture.md) · [Static review](./docs/architecture-review-2026-09-15.md)
|
|
146
|
+
- [Development](./docs/development.md) · [Security](./docs/security.md)
|
|
147
|
+
- [Windows desktop shell](./desktop/README.md) · [Version history](./docs/release-notes/README.md)
|
|
144
148
|
- [Git worktrees](./docs/worktrees.md)
|
|
145
149
|
- [Release and package auditing](./docs/release.md)
|
|
146
|
-
- [
|
|
147
|
-
- [Theme
|
|
150
|
+
- [Historical interface prototypes](./docs/ui-redesign/README.md)
|
|
151
|
+
- [Theme token design reference](./docs/ui-redesign/theme-tokens.md)
|
|
148
152
|
|
|
149
153
|
## Upstream and license
|
|
150
154
|
|
package/README.md
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
<p>
|
|
5
5
|
<a href="./README.en.md">English</a> ·
|
|
6
6
|
<a href="https://github.com/henlii/pidance/issues">问题反馈</a> ·
|
|
7
|
-
<a href="./docs/
|
|
7
|
+
<a href="./docs/README.md">文档导航</a>
|
|
8
8
|
</p>
|
|
9
9
|
</div>
|
|
10
10
|
|
|
11
11
|
Pidance 是面向 [Pi](https://github.com/badlogic/pi-mono) coding agent 的开源 Web 客户端。它直接读取本机 Pi 会话文件,并沿用 Pi SDK 的会话与运行时语义,把实时对话、项目文件、Git、工作树、子代理和配置管理汇集到一个浏览器工作区。Pi 仍是数据与执行语义的事实来源;Pidance 负责提供更清晰、更完整的操作界面。
|
|
12
12
|
|
|
13
|
-
> 当前版本:`0.2.
|
|
13
|
+
> 当前版本:`0.2.29` · npm 包:`@henlii/pidance` · CLI:`pidance`
|
|
14
14
|
|
|
15
15
|
## 界面预览
|
|
16
16
|
|
|
@@ -32,7 +32,7 @@ Pidance 是面向 [Pi](https://github.com/badlogic/pi-mono) coding agent 的开
|
|
|
32
32
|
- **Pi 生态集成**:展示同步与异步子代理运行状态、通用扩展 UI 卡片与交互,以及结构化 Todos 的只读投影。
|
|
33
33
|
- **集中配置**:管理供应商认证、API Key、模型与测试、会话默认值、技能、插件和项目信任。
|
|
34
34
|
- **精心打磨的界面**:响应式桌面/移动布局、命令面板、会话 minimap、完成提示音、中英双语,以及 Light / Dark / System 主题。
|
|
35
|
-
-
|
|
35
|
+
- **访问防护**:Host/CSRF 检查与登录认证;CLI 非回环监听必须配置密码。文件与 Agent 能力面向可信操作者,不提供项目目录沙箱,见[安全边界](./docs/security.md)。
|
|
36
36
|
|
|
37
37
|
## 快速开始
|
|
38
38
|
|
|
@@ -89,7 +89,7 @@ pidance
|
|
|
89
89
|
|
|
90
90
|
```bash
|
|
91
91
|
npm install
|
|
92
|
-
npm run dev #
|
|
92
|
+
npm run dev # 独立源码开发服务:127.0.0.1:31416,输出 .next
|
|
93
93
|
npm run check # typecheck + lint + 单元测试
|
|
94
94
|
```
|
|
95
95
|
|
|
@@ -102,19 +102,18 @@ npm run test:browser # 浏览器回归(需已运行的实例,默认
|
|
|
102
102
|
|
|
103
103
|
日常开发**不要**执行 `npm run build` 或 `next build`:它会写入 `.next/` 并干扰开发服务。正式构建只在隔离发布 checkout 中通过 `npm run release:check` 执行。
|
|
104
104
|
|
|
105
|
-
|
|
106
|
-
`.agents/skills/pidance-development/scripts/local-deploy.mjs restart` 部署到 `.next-public`。勿混用正式服务与工作区的进程、数据目录和构建产物。
|
|
105
|
+
开发约定:**31415 保留给稳定安装版,工作区使用 31416**;持续测试输出到 `.next-public`,独立 dev 输出到 `.next`。`npm run dev` 已指向 127.0.0.1:31416(与持续部署同端口,不要同时运行)。测试数据与多端要求见[开发指南](./docs/development.md)。
|
|
107
106
|
|
|
108
107
|
## 发布
|
|
109
108
|
|
|
110
|
-
|
|
109
|
+
发布前完成 `npm run check`、版本与双语发布记录,显式提交并推送 annotated tag。tag CI 在隔离根构建、前后审计、打包,并通过 npm OIDC 发布及创建 GitHub Release。npm 与 Release 必须使用同一已验收 tgz 和 SHA-256;本地候选脚本不改版本、tag、push 或 publish。
|
|
111
110
|
|
|
112
111
|
完整步骤见 [docs/release.md](./docs/release.md)。
|
|
113
112
|
|
|
114
113
|
## 架构概览
|
|
115
114
|
|
|
116
115
|
Pidance 是 Pi 的 Web mode adapter:主 Agent 使用同进程 Pi SDK(`AgentSessionRuntime`)。
|
|
117
|
-
|
|
116
|
+
当前职责、交互链路与源码入口见[架构说明](./docs/architecture.md);既有迁移规格见 [#20](https://github.com/henlii/pidance/issues/20)。
|
|
118
117
|
|
|
119
118
|
```text
|
|
120
119
|
浏览器 / Route Handlers
|
|
@@ -138,17 +137,22 @@ Pi AgentSessionRuntime
|
|
|
138
137
|
```
|
|
139
138
|
|
|
140
139
|
- **只读浏览**直接解析 Pi `.jsonl` 会话,不创建 AgentSession;快扫和缓存不得写 JSONL。
|
|
141
|
-
-
|
|
140
|
+
- **写操作或显式 wake**按需创建或复用 SDK session host;SSE 本身只观察已有 Host。
|
|
142
141
|
- Pi SDK 拥有 Agent、会话替换、资源和 JSONL/tree 语义;Pidance 只拥有产品用例、live registry、Web 事件与 UI 适配。
|
|
143
|
-
-
|
|
144
|
-
-
|
|
142
|
+
- 单向依赖与单写者是维护约束;目前仍有销毁、队列、停止和恢复方面的[已知架构风险](./docs/architecture-review-2026-09-15.md),不应把目标约束当作完整并发保证。
|
|
143
|
+
- 文件访问当前不限制在项目根目录;已认证使用者应视为拥有本机 Agent 与文件能力的可信操作者。
|
|
145
144
|
|
|
146
145
|
## 文档
|
|
147
146
|
|
|
147
|
+
完整入口:[文档导航](./docs/README.md)。
|
|
148
|
+
|
|
149
|
+
- [架构与会话交互](./docs/architecture.md) · [静态审查](./docs/architecture-review-2026-09-15.md)
|
|
150
|
+
- [开发与验证](./docs/development.md) · [安全边界](./docs/security.md)
|
|
151
|
+
- [Windows 桌面壳](./desktop/README.md) · [版本变更](./docs/release-notes/README.md)
|
|
148
152
|
- [Git worktree 使用说明](./docs/worktrees.zh-CN.md)
|
|
149
153
|
- [发布与制品审计](./docs/release.md)
|
|
150
|
-
- [
|
|
151
|
-
- [主题 Token](./docs/ui-redesign/theme-tokens.md)
|
|
154
|
+
- [历史界面设计稿](./docs/ui-redesign/README.md)
|
|
155
|
+
- [主题 Token 设计参考](./docs/ui-redesign/theme-tokens.md)
|
|
152
156
|
|
|
153
157
|
## 上游与许可
|
|
154
158
|
|
package/README.zh-CN.md
CHANGED
|
@@ -1,207 +1,14 @@
|
|
|
1
|
-
# Pidance
|
|
1
|
+
# Pidance(简体中文)
|
|
2
2
|
|
|
3
|
-
[
|
|
3
|
+
中文产品说明已统一到 [README.md](./README.md)。本文件保留旧链接兼容,不再维护重复的功能、安装和架构说明。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
- [中文首页](./README.md)
|
|
6
|
+
- [English](./README.en.md)
|
|
7
|
+
- [完整文档导航](./docs/README.md)
|
|
8
|
+
- [架构与会话交互](./docs/architecture.md)
|
|
9
|
+
- [开发与验证](./docs/development.md)
|
|
10
|
+
- [安全与数据边界](./docs/security.md)
|
|
11
|
+
- [Worktree 使用说明](./docs/worktrees.zh-CN.md)
|
|
12
|
+
- [发布与制品审计](./docs/release.md)
|
|
6
13
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-

|
|
10
|
-
|
|
11
|
-
*样例数据产品预览:会话侧边栏、包含工具卡片的对话区与文件工作区。图中内容均为示意样例数据,并非真实运行会话。*
|
|
12
|
-
|
|
13
|
-
## 路线图
|
|
14
|
-
|
|
15
|
-
路线图、实施进度和验收标准统一记录在各阶段 tracking Issue 中:
|
|
16
|
-
|
|
17
|
-
- [第一阶段:架构 seam 与 OpenChamber 风格产品改造](https://github.com/henlii/pidance/issues/1)
|
|
18
|
-
- [第二阶段:补齐 Pi 生态高价值盲区(待办镜像、会话全文搜索、subagent 结果卡片、项目信任)](https://github.com/henlii/pidance/issues/2)
|
|
19
|
-
- [第三阶段:Pi 扩展生态可观测性与 Agent 默认值设置](https://github.com/henlii/pidance/issues/3)
|
|
20
|
-
- [第四阶段:辅助信息面与低频能力(统计、结果浏览、克隆、模板、版本)](https://github.com/henlii/pidance/issues/4)
|
|
21
|
-
|
|
22
|
-
## Upstream / 上游来源
|
|
23
|
-
|
|
24
|
-
Pidance 源自 [agegr/pi-web](https://github.com/agegr/pi-web),遵循 MIT License;底层运行时来自 [badlogic/pi-mono](https://github.com/badlogic/pi-mono)。项目保留 Pi 的会话文件格式与运行时语义,现有 Pi 数据仍是事实来源。上游版权和派生作品说明保留在 [LICENSE](./LICENSE) 中。
|
|
25
|
-
|
|
26
|
-
## 快速开始
|
|
27
|
-
|
|
28
|
-
**无需安装,直接运行:**
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
npx @henlii/pidance@latest
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
**或全局安装后使用:**
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
npm install -g @henlii/pidance
|
|
38
|
-
pidance
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
启动后打开 [http://localhost:31415](http://localhost:31415)。命令行版本会在服务就绪后尝试自动打开浏览器。
|
|
42
|
-
|
|
43
|
-
**可选参数:**
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
pidance --port 8080 # 自定义端口
|
|
47
|
-
pidance --hostname 127.0.0.1 # 仅本机访问
|
|
48
|
-
pidance -p 8080 -H 127.0.0.1 # 组合使用
|
|
49
|
-
pidance --no-open # 不自动打开浏览器
|
|
50
|
-
|
|
51
|
-
PORT=8080 pidance # 也支持环境变量
|
|
52
|
-
PIDANCE_NO_OPEN=1 pidance # 不自动打开浏览器(适用于后台服务或开机自启)
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## HTTP 代理
|
|
56
|
-
|
|
57
|
-
Pidance 的服务端模型请求和 API 请求会读取标准的 `HTTP_PROXY`、`HTTPS_PROXY` 和 `NO_PROXY` 环境变量。
|
|
58
|
-
|
|
59
|
-
macOS 或 Linux:
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
HTTP_PROXY=http://127.0.0.1:7890 \
|
|
63
|
-
HTTPS_PROXY=http://127.0.0.1:7890 \
|
|
64
|
-
NO_PROXY=localhost,127.0.0.1 \
|
|
65
|
-
npx @henlii/pidance@latest
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
Windows PowerShell:
|
|
69
|
-
|
|
70
|
-
```powershell
|
|
71
|
-
$env:HTTP_PROXY = "http://127.0.0.1:7890"
|
|
72
|
-
$env:HTTPS_PROXY = "http://127.0.0.1:7890"
|
|
73
|
-
$env:NO_PROXY = "localhost,127.0.0.1"
|
|
74
|
-
npx @henlii/pidance@latest
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
## 功能介绍
|
|
78
|
-
|
|
79
|
-
- **把历史工作接回来**:打开网页就能按项目找到以前的 pi 对话,不必在终端里翻文件或记住会话路径。
|
|
80
|
-
- **放心试不同方向**:可以从某条历史消息重新开始,也可以复制出一条独立的新路线,探索方案时不怕弄乱原来的对话。
|
|
81
|
-
- **跨分支工作**:在侧边栏切换 Git worktree,让新会话和 Explorer 跟随你选择的 checkout。
|
|
82
|
-
- **边聊边看项目文件**:左侧浏览项目文件,右侧打开源码、文档、图片、音频和 PDF;文件变化会自动刷新,适合边让 agent 改边检查结果。
|
|
83
|
-
- **随时掌握会话状态**:在顶部就能看到上下文占用、花费、压缩结果和系统提示,长会话不再像黑箱。
|
|
84
|
-
- **少离开当前界面**:模型、登录/API key、模型测试和技能开关都能在网页里处理,配置 agent 时不用在多个工具之间来回切换。
|
|
85
|
-
|
|
86
|
-
## 注意事项
|
|
87
|
-
|
|
88
|
-
- **数据目录**:默认读取 `~/.pi/agent/sessions` 下的会话文件。可通过环境变量 `PI_CODING_AGENT_DIR` 指定其他 pi agent 目录。
|
|
89
|
-
- **会话文件**:路径形如 `~/.pi/agent/sessions/<编码后的工作目录>/<时间戳>_<uuid>.jsonl`。
|
|
90
|
-
- **模型配置**:Models 面板读写 pi agent 目录下的 `models.json`,模型列表和默认模型由 pi 的配置解析得到。
|
|
91
|
-
- **文件访问**:文件浏览和预览面向当前选择的项目目录,以及会话中已出现过的工作目录。
|
|
92
|
-
- **Git worktree**:什么时候显示切换器、新建目录在哪里、删除会影响什么,见 [Pidance 里的 Worktree](./docs/worktrees.zh-CN.md)。
|
|
93
|
-
- **Fork 与会话内分支不同**:Fork 会创建新的 `.jsonl` 文件;“Edit from here” 是同一会话文件里的分支。
|
|
94
|
-
|
|
95
|
-
## 开发
|
|
96
|
-
|
|
97
|
-
```bash
|
|
98
|
-
npm install
|
|
99
|
-
npm run dev # 非 Windows 源码开发入口;Windows 的 31415 使用正式服务制品
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
Windows 开发约定:**31415 固定使用正式服务制品**;工作区源码的持续测试使用 **31416**,通过
|
|
103
|
-
`.agents/skills/pidance-development/scripts/local-deploy.mjs restart` 部署到 `.next-public`。勿混用正式服务与工作区的进程、数据目录和构建产物。
|
|
104
|
-
|
|
105
|
-
常用检查:
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
node_modules/.bin/tsc --noEmit
|
|
109
|
-
npm run lint
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
开发时不要运行 `next build` / `npm run build`,它会写入 `.next/`,容易影响正在运行的 dev server。发布流程再执行构建。
|
|
113
|
-
|
|
114
|
-
## 架构
|
|
115
|
-
|
|
116
|
-
Pidance 是 Pi 的 Web mode adapter:主 Agent 使用同进程 Pi SDK(`AgentSessionRuntime`)。完整实施规格与验收见 [#20](https://github.com/henlii/pidance/issues/20)。
|
|
117
|
-
|
|
118
|
-
```text
|
|
119
|
-
浏览器 / Route Handlers
|
|
120
|
-
│
|
|
121
|
-
▼
|
|
122
|
-
SessionService ───────▶ 只读会话投影与缓存
|
|
123
|
-
│
|
|
124
|
-
▼
|
|
125
|
-
LiveSessionRegistry
|
|
126
|
-
│
|
|
127
|
-
▼
|
|
128
|
-
SdkSessionHost ───────▶ Web Extension UI Adapter
|
|
129
|
-
│
|
|
130
|
-
▼
|
|
131
|
-
Pi AgentSessionRuntime
|
|
132
|
-
├─ AgentSession
|
|
133
|
-
├─ AgentSessionServices
|
|
134
|
-
└─ SessionManager
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
Pi SDK 拥有 Agent、会话替换、资源和 JSONL/tree 语义;Pidance 只拥有产品用例、live registry、Web 事件与 UI 适配。`~/.pi/agent/sessions/*.jsonl` 始终是 Pi 会话事实来源,快扫与缓存只读。
|
|
138
|
-
|
|
139
|
-
## 项目结构
|
|
140
|
-
|
|
141
|
-
```
|
|
142
|
-
app/
|
|
143
|
-
api/
|
|
144
|
-
agent/ # 创建/驱动 AgentSession,提供 SSE 事件流和 bash 输出
|
|
145
|
-
auth/ # OAuth 和 API key 管理
|
|
146
|
-
cwd/validate/ # 自定义工作目录校验
|
|
147
|
-
default-cwd/ # 获取 pi 默认工作目录
|
|
148
|
-
files/ # 文件列表、读取、预览、搜索、上传和 watch
|
|
149
|
-
file-index/ # 项目文件索引和 @ 提及搜索
|
|
150
|
-
git/ # 当前项目的 Git diff 和 status
|
|
151
|
-
home/ # 当前用户 home 目录
|
|
152
|
-
models/ # 可用模型、默认模型、thinking levels
|
|
153
|
-
models-config/ # 读写 models.json、测试模型
|
|
154
|
-
plugins/ # package 插件管理
|
|
155
|
-
sessions/ # 会话读取、重命名、自动命名、删除、上下文、状态、延迟 thinking 和 HTML 导出
|
|
156
|
-
skills/ # skills 列表、搜索、安装、更新、检查和启停
|
|
157
|
-
worktrees/ # Git worktree 列表、新建和删除
|
|
158
|
-
components/
|
|
159
|
-
AppShell.tsx # 主布局、URL 状态、顶部面板、文件标签
|
|
160
|
-
SessionSidebar.tsx # 项目选择、会话树、Explorer
|
|
161
|
-
ChatWindow.tsx # 消息区、SSE、拖拽图片、minimap
|
|
162
|
-
ChatInput.tsx # 输入栏、模型/工具/thinking/compact/slash controls
|
|
163
|
-
MessageView.tsx # 消息、thinking、tool call/result 渲染
|
|
164
|
-
ModelsConfig.tsx # 模型和认证配置面板
|
|
165
|
-
SkillsConfig.tsx # 技能管理面板
|
|
166
|
-
FileExplorer.tsx # 文件树
|
|
167
|
-
FileViewer.tsx # 源码、diff、图片、音频、PDF、DOCX 预览
|
|
168
|
-
lib/
|
|
169
|
-
api-types.ts # API 请求和响应的共享类型
|
|
170
|
-
ansi.ts # 终端输出的 ANSI 转义序列处理
|
|
171
|
-
bash-output.ts # bash 命令输出的格式化和解析
|
|
172
|
-
custom-ui-terminal.ts # 自定义 UI 输出的终端适配器
|
|
173
|
-
git-changes.ts # Git diff/变更收集
|
|
174
|
-
git-status.ts # Git status 收集和规范化
|
|
175
|
-
git-types.ts # Git 数据共享类型
|
|
176
|
-
http-dispatcher.ts # 服务端 fetch 的 HTTP(S) 代理配置
|
|
177
|
-
live-session-registry.ts # 目标:live registry、启动锁、running 和 idle
|
|
178
|
-
sdk-session-host.ts # 目标:同进程 Pi SDK host 与事件/状态投影
|
|
179
|
-
web-extension-ui.ts # 目标:Pi ExtensionUIContext 到 Web UI
|
|
180
|
-
rpc-manager.ts # 迁移期 legacy:外部 RPC registry/factory
|
|
181
|
-
pi-runtime/ # 迁移期 legacy:外部进程/协议/runtime slot
|
|
182
|
-
session-file.ts # 迁移期 legacy:自研 JSONL tree reader/writer
|
|
183
|
-
session-reader.ts # 解析 .jsonl 会话文件和分支上下文
|
|
184
|
-
session-file-references.ts # 会话引用文件的检查
|
|
185
|
-
normalize.ts # 规范化 toolCall 字段名
|
|
186
|
-
file-access.ts # 文件读取安全边界和允许的根目录
|
|
187
|
-
file-fuzzy.ts # 文件模糊搜索工具
|
|
188
|
-
file-upload.ts # 文件上传校验和冲突处理
|
|
189
|
-
file-paths.ts # 文件路径编码/相对路径工具
|
|
190
|
-
models-cache.ts # 模型列表和默认值缓存
|
|
191
|
-
session-title.ts # 会话标题和自动命名工具
|
|
192
|
-
skill-updates.ts # 技能更新操作
|
|
193
|
-
skill-lock.ts # 技能更新锁
|
|
194
|
-
terminal-input.ts # 终端输入处理
|
|
195
|
-
worktree.ts # 项目/worktree 解析和 Git 操作
|
|
196
|
-
markdown.ts # Markdown/Mermaid/KaTeX 插件配置
|
|
197
|
-
pi-types.ts # pi 相关类型
|
|
198
|
-
hooks/
|
|
199
|
-
useAgentSession.ts # 会话加载、发送命令、SSE 状态机
|
|
200
|
-
useAudio.ts # 完成提示音
|
|
201
|
-
useDragDrop.ts # 图片拖拽
|
|
202
|
-
useKeyboardShortcuts.ts # 键盘快捷键处理
|
|
203
|
-
useTheme.ts # 主题切换
|
|
204
|
-
bin/
|
|
205
|
-
pidance.js # npm CLI 入口(仅 pidance;pi-web 归上游)
|
|
206
|
-
instrumentation.ts # 初始化服务端 HTTP dispatcher
|
|
207
|
-
```
|
|
14
|
+
旧版首页中的阶段规划链接保留在[文档导航的历史资料](./docs/README.md#历史资料)。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@henlii/pidance",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.29",
|
|
4
4
|
"description": "Pidance:面向 Pi coding agent 的开源 Web 客户端",
|
|
5
5
|
"homepage": "https://github.com/henlii/pidance#readme",
|
|
6
6
|
"repository": {
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"!.next/server/next-font-manifest.js"
|
|
43
43
|
],
|
|
44
44
|
"scripts": {
|
|
45
|
-
"dev": "next dev -p
|
|
45
|
+
"dev": "next dev --turbopack -H 127.0.0.1 -p 31416",
|
|
46
46
|
"build": "next build --webpack",
|
|
47
47
|
"start": "node bin/pidance.js",
|
|
48
48
|
"lint": "eslint .",
|