forgebadger 0.1.0 → 0.1.1
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/README.md +26 -23
- package/dist/commands/doctor.d.ts +2 -1
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/start.d.ts +3 -2
- package/dist/commands/start.js +5 -4
- package/dist/commands/start.js.map +1 -1
- package/dist/gateway/src/config/env.d.ts +5 -0
- package/dist/gateway/src/config/env.js +6 -0
- package/dist/gateway/src/config/env.js.map +1 -1
- package/dist/gateway/src/routes/copilot.js +0 -6
- package/dist/gateway/src/routes/copilot.js.map +1 -1
- package/dist/gateway/src/routes/sessions.js +5 -2
- package/dist/gateway/src/routes/sessions.js.map +1 -1
- package/dist/gateway/src/runtime/start-gateway.js +4 -1
- package/dist/gateway/src/runtime/start-gateway.js.map +1 -1
- package/dist/gateway/src/server.d.ts +2 -0
- package/dist/gateway/src/server.js +8 -0
- package/dist/gateway/src/server.js.map +1 -1
- package/dist/gateway/src/services/adapter-autonomy.d.ts +5 -2
- package/dist/gateway/src/services/adapter-autonomy.js +19 -1
- package/dist/gateway/src/services/adapter-autonomy.js.map +1 -1
- package/dist/gateway/src/services/agent/dispatch-supervisor.d.ts +23 -0
- package/dist/gateway/src/services/agent/dispatch-supervisor.js +56 -0
- package/dist/gateway/src/services/agent/dispatch-supervisor.js.map +1 -0
- package/dist/gateway/src/services/agent/skills/copilot-skills.js +17 -16
- package/dist/gateway/src/services/agent/skills/copilot-skills.js.map +1 -1
- package/dist/gateway/src/services/agent/tool-availability.js +0 -2
- package/dist/gateway/src/services/agent/tool-availability.js.map +1 -1
- package/dist/gateway/src/services/agent/tools/platform-coverage.js +5 -2
- package/dist/gateway/src/services/agent/tools/platform-coverage.js.map +1 -1
- package/dist/gateway/src/services/agent/tools/platform-management.js +2 -1
- package/dist/gateway/src/services/agent/tools/platform-management.js.map +1 -1
- package/dist/gateway/src/services/agent/tools/project-manager.js +10 -0
- package/dist/gateway/src/services/agent/tools/project-manager.js.map +1 -1
- package/dist/gateway/src/services/mcp/mcp-server.js +5 -2
- package/dist/gateway/src/services/mcp/mcp-server.js.map +1 -1
- package/dist/gateway/src/services/platform-commands/catalog.d.ts +10 -0
- package/dist/gateway/src/services/platform-commands/catalog.js +82 -12
- package/dist/gateway/src/services/platform-commands/catalog.js.map +1 -1
- package/dist/gateway/src/services/platform-commands/session-commands.d.ts +18 -1
- package/dist/gateway/src/services/platform-commands/session-commands.js +4 -0
- package/dist/gateway/src/services/platform-commands/session-commands.js.map +1 -1
- package/dist/gateway/src/services/platform-commands/tool-commands.js +1 -1
- package/dist/gateway/src/services/platform-commands/tool-commands.js.map +1 -1
- package/dist/gateway/src/services/project-manager/management.d.ts +1 -1
- package/dist/gateway/src/services/project-manager/management.js +2 -1
- package/dist/gateway/src/services/project-manager/management.js.map +1 -1
- package/dist/gateway/src/services/project-manager/task-packets.d.ts +4 -0
- package/dist/gateway/src/services/project-manager/task-packets.js +14 -0
- package/dist/gateway/src/services/project-manager/task-packets.js.map +1 -1
- package/dist/runtime/dependency-check.d.ts +3 -1
- package/dist/runtime/dependency-check.js +31 -5
- package/dist/runtime/dependency-check.js.map +1 -1
- package/dist/web/standalone/packages/web/.next/BUILD_ID +1 -1
- package/dist/web/standalone/packages/web/.next/build-manifest.json +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/cli-config/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/cli-config/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/copilot/automations/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/copilot/automations/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/copilot/channels/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/copilot/channels/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/copilot/extensions/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/copilot/extensions/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/copilot/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/copilot/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/copilot/settings/access/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/copilot/settings/access/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/copilot/settings/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/copilot/settings/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/copilot/tasks/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/copilot/tasks/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/history/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/history/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/members/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/members/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/models/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/models/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/notifications/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/notifications/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/projects/[id]/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/projects/[id]/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/projects/import/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/projects/import/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/projects/new/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/projects/new/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/projects/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/sessions/[id]/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/sessions/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/sessions/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/settings/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/skills/install/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/skills/install/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/skills/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/skills/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/teams/[teamId]/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/teams/[teamId]/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/teams/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/teams/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/templates/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/templates/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/usage/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/usage/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/workspaces/[projectId]/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/workspaces/[projectId]/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/workspaces/page/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/(dashboard)/workspaces/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/_not-found.rsc +11 -11
- package/dist/web/standalone/packages/web/.next/server/app/_not-found.segments/_full.segment.rsc +11 -11
- package/dist/web/standalone/packages/web/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/_not-found.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/cli-config.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/cli-config.rsc +13 -13
- package/dist/web/standalone/packages/web/.next/server/app/cli-config.segments/!KGRhc2hib2FyZCk/cli-config/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/cli-config.segments/!KGRhc2hib2FyZCk/cli-config.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/cli-config.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/cli-config.segments/_full.segment.rsc +13 -13
- package/dist/web/standalone/packages/web/.next/server/app/cli-config.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/cli-config.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/cli-config.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/copilot/automations.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/copilot/automations.rsc +15 -15
- package/dist/web/standalone/packages/web/.next/server/app/copilot/automations.segments/!KGRhc2hib2FyZCk/copilot/automations/__PAGE__.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/automations.segments/!KGRhc2hib2FyZCk/copilot/automations.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/automations.segments/!KGRhc2hib2FyZCk/copilot.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/automations.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/copilot/automations.segments/_full.segment.rsc +15 -15
- package/dist/web/standalone/packages/web/.next/server/app/copilot/automations.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/copilot/automations.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/copilot/automations.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/copilot/channels.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/copilot/channels.rsc +15 -15
- package/dist/web/standalone/packages/web/.next/server/app/copilot/channels.segments/!KGRhc2hib2FyZCk/copilot/channels/__PAGE__.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/channels.segments/!KGRhc2hib2FyZCk/copilot/channels.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/channels.segments/!KGRhc2hib2FyZCk/copilot.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/channels.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/copilot/channels.segments/_full.segment.rsc +15 -15
- package/dist/web/standalone/packages/web/.next/server/app/copilot/channels.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/copilot/channels.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/copilot/channels.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/copilot/extensions.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/copilot/extensions.rsc +15 -15
- package/dist/web/standalone/packages/web/.next/server/app/copilot/extensions.segments/!KGRhc2hib2FyZCk/copilot/extensions/__PAGE__.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/extensions.segments/!KGRhc2hib2FyZCk/copilot/extensions.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/extensions.segments/!KGRhc2hib2FyZCk/copilot.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/extensions.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/copilot/extensions.segments/_full.segment.rsc +15 -15
- package/dist/web/standalone/packages/web/.next/server/app/copilot/extensions.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/copilot/extensions.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/copilot/extensions.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings/access.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings/access.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings/access.segments/!KGRhc2hib2FyZCk/copilot/settings/access/__PAGE__.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings/access.segments/!KGRhc2hib2FyZCk/copilot/settings/access.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings/access.segments/!KGRhc2hib2FyZCk/copilot/settings.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings/access.segments/!KGRhc2hib2FyZCk/copilot.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings/access.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings/access.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings/access.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings/access.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings/access.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings.rsc +15 -15
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings.segments/!KGRhc2hib2FyZCk/copilot/settings/__PAGE__.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings.segments/!KGRhc2hib2FyZCk/copilot/settings.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings.segments/!KGRhc2hib2FyZCk/copilot.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings.segments/_full.segment.rsc +15 -15
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/copilot/settings.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/copilot.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/copilot.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/copilot.segments/!KGRhc2hib2FyZCk/copilot/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/copilot.segments/!KGRhc2hib2FyZCk/copilot.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/copilot.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/copilot.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/copilot.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/copilot.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/copilot.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/forgot-password.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/forgot-password.rsc +13 -13
- package/dist/web/standalone/packages/web/.next/server/app/forgot-password.segments/_full.segment.rsc +13 -13
- package/dist/web/standalone/packages/web/.next/server/app/forgot-password.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/forgot-password.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/forgot-password.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/forgot-password.segments/forgot-password/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/forgot-password.segments/forgot-password.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/history.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/history.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/history.segments/!KGRhc2hib2FyZCk/history/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/history.segments/!KGRhc2hib2FyZCk/history.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/history.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/history.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/history.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/history.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/history.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/index.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/index.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/index.segments/!KGRhc2hib2FyZCk/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/index.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/index.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/index.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/join/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/join.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/join.rsc +12 -12
- package/dist/web/standalone/packages/web/.next/server/app/join.segments/_full.segment.rsc +12 -12
- package/dist/web/standalone/packages/web/.next/server/app/join.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/join.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/join.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/join.segments/join/__PAGE__.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/join.segments/join.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/login.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/login.rsc +13 -13
- package/dist/web/standalone/packages/web/.next/server/app/login.segments/_full.segment.rsc +13 -13
- package/dist/web/standalone/packages/web/.next/server/app/login.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/login.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/login.segments/login.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/members.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/members.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/members.segments/!KGRhc2hib2FyZCk/members/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/members.segments/!KGRhc2hib2FyZCk/members.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/members.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/members.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/members.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/members.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/members.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/models.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/models.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/models.segments/!KGRhc2hib2FyZCk/models/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/models.segments/!KGRhc2hib2FyZCk/models.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/models.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/models.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/models.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/models.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/models.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/notifications.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/notifications.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/notifications.segments/!KGRhc2hib2FyZCk/notifications/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/notifications.segments/!KGRhc2hib2FyZCk/notifications.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/notifications.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/notifications.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/notifications.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/notifications.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/notifications.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/projects/import.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/projects/import.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/projects/import.segments/!KGRhc2hib2FyZCk/projects/import/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/projects/import.segments/!KGRhc2hib2FyZCk/projects/import.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/projects/import.segments/!KGRhc2hib2FyZCk/projects.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/projects/import.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/projects/import.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/projects/import.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/projects/import.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/projects/import.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/projects/new.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/projects/new.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/projects/new.segments/!KGRhc2hib2FyZCk/projects/new/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/projects/new.segments/!KGRhc2hib2FyZCk/projects/new.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/projects/new.segments/!KGRhc2hib2FyZCk/projects.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/projects/new.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/projects/new.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/projects/new.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/projects/new.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/projects/new.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/projects.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/projects.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk/projects/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk/projects.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/projects.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/projects.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/projects.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/register/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/register.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/register.rsc +13 -13
- package/dist/web/standalone/packages/web/.next/server/app/register.segments/_full.segment.rsc +13 -13
- package/dist/web/standalone/packages/web/.next/server/app/register.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/register.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/register.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/register.segments/register/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/register.segments/register.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/sessions.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/sessions.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk/sessions/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk/sessions.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/sessions.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/sessions.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/sessions.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/sessions.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/settings.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/settings.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/settings.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/settings.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/skills/install.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/skills/install.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/skills/install.segments/!KGRhc2hib2FyZCk/skills/install/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/skills/install.segments/!KGRhc2hib2FyZCk/skills/install.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/skills/install.segments/!KGRhc2hib2FyZCk/skills.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/skills/install.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/skills/install.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/skills/install.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/skills/install.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/skills/install.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/skills.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/skills.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk/skills/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk/skills.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/skills.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/skills.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/skills.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/skills.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/teams.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/teams.rsc +13 -13
- package/dist/web/standalone/packages/web/.next/server/app/teams.segments/!KGRhc2hib2FyZCk/teams/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/teams.segments/!KGRhc2hib2FyZCk/teams.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/teams.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/teams.segments/_full.segment.rsc +13 -13
- package/dist/web/standalone/packages/web/.next/server/app/teams.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/teams.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/teams.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/templates.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/templates.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/templates.segments/!KGRhc2hib2FyZCk/templates/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/templates.segments/!KGRhc2hib2FyZCk/templates.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/templates.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/templates.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/templates.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/templates.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/templates.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/usage.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/usage.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/usage.segments/!KGRhc2hib2FyZCk/usage/__PAGE__.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/usage.segments/!KGRhc2hib2FyZCk/usage.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/usage.segments/_full.segment.rsc +16 -16
- package/dist/web/standalone/packages/web/.next/server/app/usage.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/usage.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/usage.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/workspaces.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/app/workspaces.rsc +13 -13
- package/dist/web/standalone/packages/web/.next/server/app/workspaces.segments/!KGRhc2hib2FyZCk/workspaces/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/app/workspaces.segments/!KGRhc2hib2FyZCk/workspaces.segment.rsc +3 -3
- package/dist/web/standalone/packages/web/.next/server/app/workspaces.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
- package/dist/web/standalone/packages/web/.next/server/app/workspaces.segments/_full.segment.rsc +13 -13
- package/dist/web/standalone/packages/web/.next/server/app/workspaces.segments/_head.segment.rsc +4 -4
- package/dist/web/standalone/packages/web/.next/server/app/workspaces.segments/_index.segment.rsc +6 -6
- package/dist/web/standalone/packages/web/.next/server/app/workspaces.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__05uxdhs._.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__0e0am7z._.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/chunks/ssr/_0f6qxtj._.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/chunks/ssr/_0h3beoe._.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/chunks/ssr/_0x1-w0e._.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_0euki8~._.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_app_(dashboard)_page_tsx_04lc303._.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_components_copilot_0mvr-eu._.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_components_copilot_CopilotChannelsPage_tsx_10jdmdv._.js +1 -1
- package/dist/web/standalone/packages/web/.next/server/middleware-build-manifest.js +3 -3
- package/dist/web/standalone/packages/web/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/packages/web/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/packages/web/.next/static/chunks/01qswe5yw6zti.js +1 -0
- package/dist/web/standalone/packages/web/.next/static/chunks/{0om1z.zeag-a7.js → 05mebsn5x~f7z.js} +1 -1
- package/dist/web/standalone/packages/web/.next/static/chunks/05pjsamrc9hw8.css +1 -0
- package/dist/web/standalone/packages/web/.next/static/chunks/08i6pyfaut9bg.js +1 -0
- package/dist/web/standalone/packages/web/.next/static/chunks/0a812oghcxixr.js +1 -0
- package/dist/web/standalone/packages/web/.next/static/chunks/{0c11igjuiagib.js → 0bihh5ze2~z1f.js} +1 -1
- package/dist/web/standalone/packages/web/.next/static/chunks/0cnz9fv.au4.r.js +1 -0
- package/dist/web/standalone/packages/web/.next/static/chunks/0h73tv8xwqxqw.js +1 -0
- package/dist/web/standalone/packages/web/.next/static/chunks/{17hy0ddp_si9n.js → 0mx93hpu5af8p.js} +1 -1
- package/dist/web/standalone/packages/web/.next/static/chunks/0vxu682behxa7.js +1 -0
- package/dist/web/standalone/packages/web/.next/static/chunks/0wel25michro~.js +1 -0
- package/dist/web/standalone/packages/web/.next/static/chunks/13ehygx5durlz.js +1 -0
- package/docs/README.zh-CN.md +15 -15
- package/docs/README.zh-TW.md +15 -15
- package/package.json +2 -2
- package/dist/web/standalone/packages/web/.next/static/chunks/0-xefkkbz5sms.js +0 -1
- package/dist/web/standalone/packages/web/.next/static/chunks/0-~0vw7n16dl5.js +0 -1
- package/dist/web/standalone/packages/web/.next/static/chunks/0.dinxntqfai9.js +0 -1
- package/dist/web/standalone/packages/web/.next/static/chunks/09wc9dfimci6a.js +0 -1
- package/dist/web/standalone/packages/web/.next/static/chunks/0d7lv09enxqxk.js +0 -1
- package/dist/web/standalone/packages/web/.next/static/chunks/0ek9hith8j-xs.js +0 -1
- package/dist/web/standalone/packages/web/.next/static/chunks/0g477-voyum5d.css +0 -1
- package/dist/web/standalone/packages/web/.next/static/chunks/0ub4kcycb_b...js +0 -1
- package/dist/web/standalone/packages/web/.next/static/chunks/0v8tskw4xza79.js +0 -1
- /package/dist/web/standalone/packages/web/.next/static/{UoUlLp6otXSsVrQmrFF4Z → lcO9z98BJ26kFzrqXH-ot}/_buildManifest.js +0 -0
- /package/dist/web/standalone/packages/web/.next/static/{UoUlLp6otXSsVrQmrFF4Z → lcO9z98BJ26kFzrqXH-ot}/_clientMiddlewareManifest.js +0 -0
- /package/dist/web/standalone/packages/web/.next/static/{UoUlLp6otXSsVrQmrFF4Z → lcO9z98BJ26kFzrqXH-ot}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,35887,e=>{"use strict";var t=e.i(66499),o=e.i(79923);let s=["zh-CN","zh-TW","en"],a={"zh-CN":{"workspace.runtimeUpgrade":"当前 Session Server 无法确认 CLI 进程已退出,暂不能启动新的受管执行。请等待现有 CLI 全部正常结束后升级 Session Server,再安全启动团队执行。已有终端仍可连接,请勿强制终止其他成员的会话。","workspace.stopSourceCli":"交付前,请先停止源项目的所有活动终端。","workspace.operationActive":"交付操作正在进行,暂时无法审核或合并。","workspace.operationInterrupted":"上次交付操作已中断,确认结果后才能继续。","workspace.operationRecoveryHint":"进程和 Git 状态确认前,安全关闭或恢复也可能仍需等待。请刷新查看进度。","workspace.policyChanged":"执行策略已变化,请加载最新版本后再保存;其他表单草稿会保留。","workspace.reloadPolicy":"加载最新执行策略","workspace.historicalReceipt":"历史验证记录","workspace.errorPlatform":"当前平台暂不支持受管验证。请在 macOS 或 Linux 执行;Windows 进程生命周期支持尚待验证。","workspace.errorUnresolved":"尚未确认旧验证进程已经停止。工作树保持锁定,请运维者完成进程清理后再恢复。","workspace.errorWait":"已有交付操作正在进行。请等待完成,刷新后再重试。","workspace.errorRecovery":"上次交付操作需要恢复。请刷新并检查尝试状态,再创建恢复尝试或安全关闭。","workspace.errorProcessRecovery":"验证进程中断后尚待清理。请项目所有者安全停止尝试,再刷新并恢复。","workspace.errorStale":"任务或代码已变化,请刷新并检查最新版本。","workspace.errorAccess":"当前项目角色无权执行此操作。请刷新或联系所有者调整权限。","workspace.errorStopPending":"执行尚未停止。请等待后重试停止或归档操作。","workspace.errorMemberRole":"调整成员角色前,请先撤销该成员的正在执行的尝试。","workspace.changeRole":"调整角色","workspace.unavailable":"工作树无法访问。可恢复目录、创建恢复尝试或安全关闭;当前无法验证或整合。","workspace.assignedReviewer":"任务已指定审核人,请由该审核人记录验收决定。","workspace.event.review_recorded":"记录审核决定","workspace.event.project_archived":"归档项目","workspace.staleReceipt":"已过期,此记录与当前任务或提交不匹配","workspace.archive":"归档项目","workspace.archiveHint":"停止项目执行并归档项目。保留交付历史,项目将从有效工作区列表移除。必须先完成尚未结束的进程停止。","workspace.stopCliHint":"审核或合并前请先停止私有 CLI。","workspace.criteriaRequired":"请先为任务补充至少一条验收条件,再进行验证。","workspace.assignedElsewhere":"任务已分配给其他开发者。请先调整负责人,再准备你的开发尝试。","workspace.event.policy_updated":"更新执行策略","workspace.event.execution_disabled":"已禁用托管执行","workspace.event.member_added":"更新成员角色","workspace.event.member_revoked":"撤销成员权限","workspace.event.task_created":"创建任务","workspace.event.task_updated":"更新任务","workspace.event.comment":"添加评论","workspace.event.workspace_prepared":"准备独立开发尝试","workspace.event.delivery_links_updated":"更新交付链接","workspace.event.workspace_closed":"关闭开发尝试","workspace.event.delivery_integrated":"整合交付","workspace.event.delivery_reviewed":"审核交付","workspace.event.verification_completed":"完成验证","workspace.title":"开发任务","workspace.subtitle":"个人与共享项目,从任务到验证交付。","workspace.empty":"暂无可访问项目。创建或导入项目即可开始。","workspace.retry":"刷新后重试","workspace.error":"操作失败。请先刷新确认最新状态,再重试。","workspace.owner":"所有者","workspace.developer":"开发者","workspace.reviewer":"审核者","workspace.viewer":"查看者","workspace.tasks":"任务","workspace.newTask":"新建任务","workspace.noTasks":"暂无任务。先定义一个小改动和验收条件。","workspace.taskTitle":"任务标题","workspace.criteria":"验收条件(每行一条)","workspace.assignee":"负责人","workspace.reviewAssignee":"审核人","workspace.unassigned":"未分配","workspace.editTask":"编辑任务","workspace.members":"项目成员","workspace.email":"已注册账号邮箱","workspace.role":"项目角色","workspace.memberHint":"开发者可创建任务和执行代码;审核者可评论和验收;查看者仅可阅读。终端保持私有。","workspace.revokeHint":"立即撤销访问权限并停止正在执行的进程。未完成的停止会保留记录,允许重试。","workspace.revoke":"撤销权限","workspace.revoked":"已撤销访问权限。待停止进程数:","workspace.noExecution":"本项目未启用托管执行。","workspace.noVerification":"自动验证已移除。请在任务中记录测试结果;已有验证记录保留如下。","workspace.comments":"讨论","workspace.noComments":"暂无评论。","workspace.comment":"添加评论","workspace.post":"发表评论","workspace.runs":"开发尝试","workspace.noRuns":"暂无开发尝试。所有者或开发者可准备独立工作树和私有 CLI 会话。","workspace.prepare":"准备独立开发尝试","workspace.privateHint":"在私有 CLI 终端中开发,其他成员仅查看共享的任务材料。","workspace.terminal":"打开私有终端","workspace.refresh":"刷新","workspace.changes":"变更文件","workspace.noChanges":"暂无变更文件。","workspace.commit":"当前提交","workspace.dirty":"存在未提交改动,请先提交再审核或合并。","workspace.clean":"工作树干净","workspace.verification":"验证记录","workspace.noReceipts":"暂无验证记录。","workspace.unknownHint":"历史执行结果未知,请检查状态并完成待处理的清理;系统不会重新执行。","workspace.preview":"预览链接","workspace.pr":"Pull request 链接","workspace.linksHint":"链接由操作者提供,不代表 CI 已验证。localhost 链接会在查看者自己的电脑打开。","workspace.invalidUrl":"请使用不包含账号或密码的 http(s) 链接。","workspace.review":"交付审核","workspace.reviewNote":"审核说明","workspace.accept":"接受此提交","workspace.requestChanges":"退回修改","workspace.noReviews":"暂无审核决定。","workspace.reviewHint":"验收需要当前提交的通过记录。团队开发者不能验收自己的开发尝试。","workspace.integrate":"整合已接受的提交","workspace.integrateHint":"仅所有者可操作:请先停止私有 CLI。源工作区必须干净,且能从记录的基线快进。","workspace.recover":"创建恢复尝试","workspace.recoverHint":"从记录的基线提交新建独立尝试,保留原工作树及其改动。","workspace.close":"安全关闭尝试","workspace.closeHint":"停止执行,仅移除干净的工作树,不会强制删除未提交改动。","workspace.handoff":"导出交接文档","workspace.handoffText":"交接文档","workspace.activity":"项目动态","workspace.noActivity":"暂无项目动态。","workspace.readOnly":"你对此项目只有查看权限。","workspace.saved":"已保存","workspace.busy":"处理中…","workspace.provisioning":"准备中","workspace.ready":"就绪","workspace.failed":"失败","workspace.revoking":"撤权中","workspace.closed":"已关闭","workspace.integrated":"已整合","workspace.running":"执行中","workspace.passed":"通过","workspace.unknown":"未知","workspace.accepted":"已接受","workspace.changes_requested":"需修改","workspace.todo":"待处理","workspace.in_progress":"进行中","workspace.blocked":"受阻","workspace.ready_for_review":"待审核","workspace.done":"已完成","workspace.cancelled":"已取消","workspace.memberState":"成员状态","workspace.active":"有效","workspace.revokedState":"已撤销","workspace.confirm":"确认","workspace.cancel":"取消","membersHub.intro":"在此管理成员、邀请、角色及项目权限。","membersHub.accounts":"账号管理","membersHub.collaboration":"成员与邀请","membersHub.projects":"项目权限","membersHub.administration":"归属与交接","membersHub.selectProject":"选择项目,管理成员及其开发、评审权限。","membersHub.noProjects":"暂无可访问的项目。","membersHub.selectTeam":"成员分组","membersHub.createGroup":"新建成员分组","teams.revise":"修订交接","teams.reviseHint":"请选择当前有效的接任人并核对修订计划。离职成员仍保持撤权;保存后须另行继续停止与交接。","teams.confirmRevision":"确认修订交接","teams.reloadImpact":"重新加载当前影响","teams.targetChanged":"接任人已不符合条件,请修订计划选择当前有效成员后再继续。","teams.switchAccount":"使用其他账号登录","delivery.title":"PR 标题","delivery.headMismatch":"已推送的远端 HEAD 与选定提交不一致,请推送正确分支并刷新后重试。","delivery.baseMismatch":"远端基础分支已变化,请同步最新源代码,再验证和审核新的开发尝试。","delivery.prRejected":"GitHub 拒绝了请求,请检查仓库访问权、令牌权限及分支名后重试。","delivery.prMismatch":"无法验证 GitHub 响应或匹配的 PR,请先检查仓库再发起请求。","delivery.currentReceipt":"创建 PR 前请验证当前干净的提交。","delivery.git":"Git 交付","delivery.reconcile":"同步源项目最新提交","delivery.reconcileHint":"在源项目最新提交上创建新工作区,并合并本次选定提交。保留旧工作区及未提交文件,新结果须重新验证和审核。","delivery.reconcileConfirm":"停止旧执行并仅合并以下已提交改动,不复制未提交修改;若有冲突,请在新私人终端解决。","delivery.conflicts":"仍有合并冲突。请在新私人终端解决以下文件并提交,再重新验证和申请审核。","delivery.draftPr":"创建 GitHub 草稿 PR","delivery.prHint":"请先自行推送分支:远端 HEAD 必须匹配已验证提交,远端基础分支须匹配本次开发的基础提交。此操作创建草稿 PR,不会推送代码。远端 PR 分支后续可变,不是不可变验收证据。","delivery.repository":"GitHub 仓库(owner/repo)","delivery.head":"已推送的开发分支","delivery.base":"远端基础分支","delivery.token":"GitHub 令牌(仅本次请求使用)","delivery.secure":"当前页面与 Gateway 均须使用本机回环或 HTTPS 才能提交凭证,请使用文档中的 SSH 转发配置。","delivery.confirmPr":"使用此精确已验证提交,在指定的外部 GitHub 仓库创建草稿 PR。","delivery.prUncertain":"远端响应不确定或仍在处理中。请重新输入令牌,保持仓库和分支不变后重试查找原请求;不要另行手动创建重复 PR。","teams.title":"团队","teams.empty":"暂无团队。","teams.create":"创建团队","teams.name":"团队名称","teams.owner":"所有者","teams.admin":"团队管理员","teams.member":"成员","teams.active":"有效","teams.leaving":"正在离职 · 权限已撤销","teams.left":"已离职","teams.closing":"关闭中","teams.closed":"已关闭","teams.members":"团队成员","teams.role":"团队角色","teams.scope":"团队管理权限不授予私人终端或个人项目访问权。开发和审核权限须单独分配。","teams.invitations":"团队邀请","teams.invite":"创建邀请","teams.email":"邮箱","teams.hours":"有效小时数","teams.pending":"待接受","teams.used":"已使用","teams.revoked":"已撤销","teams.expired":"已过期","teams.expires":"到期时间","teams.revoke":"撤销邀请","teams.copy":"复制链接","teams.copied":"已复制","teams.copyFailed":"复制失败,请选中链接手动复制。","teams.oneTime":"请立即复制单次邀请链接,离开页面后不会再次显示。请自行通过可信渠道发送,平台不会发送邮件。","teams.noInvites":"暂无邀请。","teams.projects":"团队项目","teams.noProjects":"暂无归属团队的项目。","teams.enroll":"将自己的项目纳入团队","teams.enrollHint":"此操作明确授予团队管理员管理该项目的权限;开发、审核和私人执行仍分别授权。","teams.noCandidates":"没有符合条件的个人项目。只有当前项目所有者可纳入尚未归属团队的项目。","teams.select":"请选择…","teams.openProject":"打开项目及权限","teams.transferProject":"转移项目所有权","teams.newOwner":"新所有者","teams.transfer":"转移团队所有权","teams.transferHint":"所选有效成员将成为所有者,你将保留团队管理员角色。","teams.close":"关闭团队","teams.closeHint":"关闭团队前,请归档所有团队项目并完成待处理的执行停止。","teams.confirm":"确认","teams.offboard":"离职与交接","teams.leave":"退出团队","teams.impact":"离职影响","teams.handoffHint":"为每个受影响项目明确选择所有者和任务分配。保留已有工作树、分支和交付作者,私人终端不会转交。","teams.assignee":"接任执行者","teams.reviewer":"接任审核者","teams.unassign":"清空分配","teams.preview":"生成交接预览","teams.planConfirm":"确认此交接计划","teams.planNotice":"请核对以下选择。确认后立即撤权,受影响执行全部停止后才完成交接。预览 10 分钟后过期。","teams.stopping":"权限已撤销,执行停止与交接仍待完成。","teams.completed":"交接已完成。","teams.resume":"继续待完成的交接","teams.pendingStops":"待停止数","teams.planId":"交接计划 ID","teams.loadPlan":"加载交接计划","teams.noImpact":"没有受影响的项目,仍将撤销团队成员权限。","teams.join":"加入团队","teams.joinIntro":"邀请仅适用于指定邮箱,请确认团队后接受。","teams.missingInvite":"当前标签页没有邀请,请打开团队管理员提供的完整链接。","teams.signInJoin":"登录后接受邀请","teams.registerJoin":"创建账户并加入","teams.registrationOff":"新账号注册已关闭,已有匹配账号仍可登录加入。","teams.signedIn":"当前登录账号","teams.forgetInvite":"清除此邀请","teams.accountInvites":"账号注册邀请","teams.accountScope":"系统管理员仅管理全站账号,不自动取得私人项目权限。团队邀请请前往团队页面管理。","teams.accountInviteHint":"这些邀请码用于邀请制注册。普通注册仍需本机恢复密钥;远程团队成员请使用团队邀请。","teams.inviteCode":"注册邀请码(如需要)","teams.reset":"重置账号密码","teams.resetHint":"此操作使该账号的登录会话与已认证连接失效,但不会停止运行中的原生 CLI 进程。若要撤销执行权限,请禁用账号或执行团队离职。","teams.resetDone":"密码已重置,账号登录已撤销。","teams.error":"请求失败,请重试。","teams.retry":"重试","teams.stale":"数据或交接预览已变化,请刷新并核对新的预览。","teams.denied":"你已无权执行此操作。","teams.invalidInvite":"邀请无效、已过期、已撤销或已使用,请联系管理员获取新链接。","teams.emailMismatch":"请使用邀请指定的邮箱登录。","teams.ownerRequired":"退出前请先转移团队所有权。","teams.externalMembers":"纳入团队前,请先处理项目中不属于此团队的成员。","teams.stopPending":"执行仍在运行或停止中,请等待后重试此操作。","teams.locked":"执行操作尚未确认结束,请保留计划并由宿主机操作员处理后继续。","teams.notFound":"团队或账号不存在,或已不可访问。","task.artifactStale":"关联产物已不匹配当前任务要求。请根据新要求生成新的产物;不能刷新历史关联来代替重新执行。","task.artifacts":"Copilot 产物摘要","task.artifactHint":"仅向项目成员分享文件数量、检查数量和产物摘要值,不分享私人提示词、路径、差异或输出;关联不会标记任务完成、验证代码、验收交付或合并改动。","task.shareSummary":"我同意向项目成员分享此产物摘要","task.linkArtifact":"关联摘要","task.artifactCandidate":"我已完成的 Copilot 产物","task.noArtifacts":"尚无关联的 Copilot 摘要。","task.noCandidates":"你的账号在此项目中暂无可关联的已结束 Copilot 产物。","task.snapshotCurrent":"匹配当时的任务要求和产物摘要值,不代表代码验证通过","task.snapshotStale":"历史摘要:任务要求或产物已变更","task.filesChecks":"文件数 / 通过检查数 / 总检查数","task.openPrivate":"查看我的私人 Copilot 任务","task.manualDone":"手工完成仅表示计划状态,不代表已验证交付。验证与审核回执在下方单独展示。","dashboard.activationDelivery":"验证并交付首个改动","dashboard.activationDeliveryReady":"你已完成一次经过验证、审核并安全整合的实际交付。","dashboard.activationDeliveryMissing":"在项目的开发任务中创建任务,完成代码提交、验证、审核和整合。","dashboard.activationStartDelivery":"开始一次交付","dashboard.activationContinueDelivery":"继续开发与交付","dashboard.activationOptional":"可选","auth.brandTagline":"本地优先的 AI 编程 IDE 控制平台","auth.languageLabel":"语言","auth.loginTitle":"登录","auth.loginDescription":"连接到本机 ForgeBadger 控制台。","auth.email":"电子邮箱","auth.password":"密码","auth.emailInvalid":"请输入有效的邮箱地址","auth.passwordRequired":"请输入密码","auth.forgotPassword":"忘记密码?","auth.passwordResetSuccess":"密码已重置,请使用新密码登录。","auth.loginFailed":"登录失败,请检查邮箱和密码。","auth.signingIn":"登录中...","auth.signIn":"登录","auth.noAccount":"还没有账户?","auth.register":"注册","auth.registerTitle":"创建账户","auth.registerDescription":"使用本机恢复密钥创建 ForgeBadger 账户。","auth.registrationInstructions":"从 ~/.forgebadger/account-recovery.key 复制密钥。该密钥只用于验证本机所有者,注册成功后不会轮换。","auth.confirmPassword":"确认密码","auth.registrationConfirmPasswordRequired":"请再次输入密码","auth.registrationFailed":"注册失败,请稍后重试。","auth.registrationInvalidCredentials":"恢复密钥无效。","auth.registrationUnavailable":"当前环境不允许注册,或注册已关闭。","auth.registrationRateLimited":"注册尝试次数过多,请稍后再试。","auth.emailAlreadyRegistered":"该邮箱已注册。","auth.creatingAccount":"正在创建账户...","auth.createAccount":"创建账户","auth.alreadyHaveAccount":"已有账户?","auth.resetTitle":"重置密码","auth.resetDescription":"使用本机恢复密钥找回 ForgeBadger 账户。","auth.recoveryInstructions":"从 ~/.forgebadger/account-recovery.key 复制密钥。若使用自定义状态目录或迁移安装,请以 Gateway 启动日志中的路径为准。","auth.recoveryKey":"恢复密钥","auth.recoveryKeyRequired":"请输入恢复密钥","auth.newPassword":"新密码","auth.passwordMinLength":"密码至少需要 8 个字符","auth.confirmNewPassword":"确认新密码","auth.confirmPasswordRequired":"请再次输入新密码","auth.passwordsDoNotMatch":"两次输入的密码不一致","auth.resetFailed":"密码重置失败,请稍后重试。","auth.resetInvalidCredentials":"邮箱或恢复密钥无效。","auth.resetLocalOnly":"密码恢复只能在运行 ForgeBadger 的本机进行。","auth.resetRateLimited":"尝试次数过多,请稍后再试。","auth.resetUnavailable":"密码恢复暂不可用。","auth.resetting":"重置中...","auth.resetPassword":"重置密码","auth.resetCompleteHint":"重置成功后恢复密钥会自动轮换,你需要使用新密码正常登录。","auth.backToSignIn":"返回登录","common.actions":"操作","common.add":"添加","common.aiTool":"AI 工具","common.all":"全部","common.back":"返回","common.cancel":"取消","common.close":"关闭","common.connect":"连接","common.delete":"删除","common.description":"描述","common.enabled":"启用","common.disabled":"关闭","common.import":"导入","common.loading":"加载中...","common.name":"名称","common.open":"打开","common.path":"路径","common.project":"项目","common.save":"保存","common.status":"状态","common.stop":"停止","common.start":"启动","common.visibility":"可见性","visibility.all":"全部可见性","visibility.filter":"可见性过滤","visibility.private":"私有","visibility.shared":"共享","visibility.admin":"管理员","visibility.privateDescription":"仅当前所有者可管理和查看。","visibility.sharedDescription":"本地实例内所有用户可查看,只有所有者可修改或删除。","visibility.adminDescription":"管理员可见;普通用户只能看到自己拥有的管理员项。","nav.dashboard":"控制台","nav.projects":"项目","nav.sessions":"会话","nav.copilot":"Copilot","copilot.conversations":"对话","copilot.newConversation":"新建对话","copilot.untitled":"未命名对话","copilot.noConversations":"还没有对话,点击「新建对话」开始。","copilot.empty":"和 Copilot 聊聊吧 —— 它可以查看你的项目、会话和组合进度,并帮你跟踪目标。","copilot.projectContext":"项目上下文","copilot.noProject":"未指定项目","copilot.projectLoadError":"项目列表加载失败","copilot.placeholder":"输入消息……","copilot.send":"发送","copilot.sendError":"发送失败,请检查 Gateway 服务。","copilot.loadError":"加载失败,请检查 Gateway 服务。","copilot.approvalRequired":"需要批准","copilot.approve":"批准","copilot.reject":"拒绝","copilot.search":"搜索对话…","copilot.rename":"重命名","copilot.deleteConversation":"删除对话","copilot.deleteConversationConfirm":"删除该对话?不可撤销。","copilot.running":"Copilot 正在思考…","copilot.stop":"停止","copilot.retry":"重试","copilot.scrollDown":"回到底部","copilot.toolCall":"调用工具","copilot.toolResult":"工具结果","copilot.welcomeTitle":"你好,我是 Copilot","copilot.welcomeSubtitle":"我可以查看你的项目、会话和组合进度,帮你跟踪目标、执行审批后的操作。","copilot.suggestion1":"项目整体进展如何?","copilot.suggestion2":"现在有哪些会话在运行?","copilot.suggestion3":"帮我规划下一个迭代","copilot.settings":"Copilot 设置","copilot.settingsBack":"返回对话","copilot.settingsDescription":"管理 Copilot 运行时、记忆、自动化和扩展入口。","copilot.memoryTitle":"记忆","copilot.memoryDescription":"Copilot 记住的全局事实、偏好与决策。写入由模型工具完成,这里用于查看与清理。","copilot.memoryEmpty":"暂无记忆条目。","copilot.overviewRuntime":"运行时状态","copilot.runtimeOnline":"在线","copilot.toolsEnabledCount":"{enabled}/{total} 已启用","copilot.runtimeTitle":"运行时","copilot.runtimeDescription":"Copilot 由 ForgeBadger Gateway 原生编排,不依赖外部 Harness 服务。","copilot.nativeRuntime":"Gateway 原生","copilot.followSystemDefault":"跟随系统默认","copilot.edit":"编辑","copilot.editPrompt":"编辑消息(删除该消息及之后所有内容并重新运行)","copilot.editSubmit":"保存并重新运行","copilot.editCancel":"取消","copilot.editFailed":"编辑失败,请重试。","copilot.thinking":"思考过程","copilot.thinkingCount":"思考过程 · {chars} 字","copilot.capabilities":"可用工具","copilot.capabilitiesEmpty":"暂无可用工具","copilot.capabilitiesLoadError":"工具列表加载失败。","copilot.capabilitiesToggleError":"工具开关更新失败,请重试。","copilot.playbooksTitle":"Copilot 操作手册","copilot.playbooksEmpty":"暂无操作手册","copilot.playbooksManage":"管理操作手册","copilot.playbooksDescription":"操作手册指导 Copilot 组合平台工具,拥有独立开关。CLI Skills 在 Skills 页单独安装和管理。","copilot.playbooksEnabledCount":"{enabled}/{total} 当前可用","copilot.playbooksLoadError":"操作手册加载失败,请重试。","copilot.playbooksToggleError":"操作手册开关更新失败,请重试。","copilot.playbooksSaveError":"操作手册保存失败。请重试;如版本已更新,请重新打开编辑器核对后保存。","copilot.playbookDisabled":"已停用","copilot.playbookReviewRequired":"自定义正文已保留,需核对当前版本后保存才能使用。","copilot.playbookRequiredTools":"依赖工具","copilot.playbookEdit":"编辑 / 核对正文","copilot.playbookContent":"操作手册正文","copilot.playbookReviewHelp":"保存表示已核对当前版本和依赖工具。修改仅作用于 Copilot;项目授权对话只使用未经修改的内置手册。","copilot.playbookSave":"保存并确认版本","copilot.playbooksRetry":"重试","copilot.toolUnavailable":"当前不可用","copilot.toolAuthorization":"有效授权或逐项审批","copilot.toolDesc.list_projects":"列出当前用户的项目(名称、路径、状态与 AI 工具)。","copilot.toolDesc.get_project":"按 id 获取单个项目的完整详情。","copilot.toolDesc.create_project":"创建项目,需要有效授权或逐项审批。","copilot.toolDesc.list_sessions":"列出用户的 AI CLI 会话及状态、适配器与所属项目。","copilot.toolDesc.get_session":"按 id 获取单个会话的状态与详情。","copilot.toolDesc.list_work_items":"列出项目的开发工作项(组合任务)。","copilot.toolDesc.get_work_item":"按 id 获取组合工作项详情。","copilot.toolDesc.search_memory":"按关键词检索 Copilot 的分区记忆(全局、项目或会话)。","copilot.toolDesc.list_memory":"列出某个范围内的 Copilot 记忆条目。","copilot.toolDesc.get_usage_summary":"获取使用统计:会话时长与估算费用(按适配器/项目/模型,全量),以及 token 消耗汇总;可选 days 限定 token 统计为最近 N 天。","copilot.toolDesc.get_session_output":"读取存活 CLI 会话的最近终端输出,用于检查进展或完成情况。","copilot.toolDesc.list_playbooks":"列出当前可用的 Copilot Skills(内置 Playbook 与导入文件包)、稳定 ID 和当前修订,受开关、兼容性及工具依赖约束。","copilot.toolDesc.load_playbook":"按稳定 ID 加载 Copilot Skill 的指引、修订和资源路径。读取 Skill 不会授予工具执行权限。","copilot.toolDesc.read_skill_resource":"按 Skill 和修订 ID 读取文件包内的 UTF-8 参考文件;不访问主机文件系统,不执行脚本。","copilot.toolDesc.dispatch_task_to_session":"当前不可用:CLI 适配器仅支持手动执行,无法通过开启工具或审批解除此限制。","copilot.toolDesc.pm_list_task_packets":"列出某项目的 PM 任务包——开发队列,含每项的提示词、验收标准、验证预期、关联会话与队列状态。","copilot.toolDesc.pm_get_task_packet":"按工作项 id 获取单个 PM 任务包:完整提示词、验收标准、验证预期、证据要求、运行时适配器与关联会话状态。","copilot.toolDesc.pm_prepare_task_packet":"准备任务包并关联 CLI 会话,不启动 CLI 或提交提示词;由用户在终端手动执行。需要有效授权或逐项审批。","copilot.toolDesc.write_memory":"写入持久记忆条目(事实、偏好、决策或项目笔记)。","copilot.currentModel":"当前模型","copilot.toolsSearch":"搜索工具…","copilot.toolsSearchEmpty":"没有匹配的工具。","copilot.toolGroupOperate":"操作类","copilot.toolGroupRead":"只读","copilot.toggleConversations":"切换会话列表","copilot.robotExpand":"展开全屏","copilot.robotSuggestion1":"我的项目状态如何?","copilot.robotSuggestion2":"列出进行中的会话","copilot.automationsTitle":"定时自动化","copilot.automationsDescription":"创建按计划自动运行的 Copilot 任务,结果投递到会话与通知。","copilot.automationsManage":"管理自动化","copilot.automationsList":"自动化","copilot.automationsCreate":"新建","copilot.automationsPrompt":"任务提示词","copilot.automationsSchedule":"调度类型","copilot.automationsExpression":"表达式","copilot.automationsSave":"创建","copilot.automationsCreateFailed":"创建失败,请检查输入。","copilot.automationsEmpty":"暂无自动化,点击「新建」创建。","copilot.automationsDeleteConfirm":"删除该自动化?不可撤销。","copilot.automationsRunNow":"立即运行","copilot.automationsPause":"暂停","copilot.automationsEnable":"启用","copilot.automationsSuggestions":"推荐自动化","copilot.automationsAccept":"接受","copilot.automationsDismiss":"忽略","nav.skills":"Skill","nav.templates":"模板","nav.models":"模型服务","nav.usage":"使用统计","nav.members":"成员","nav.history":"历史","nav.settings":"设置","nav.notifications":"通知","nav.guest":"访客","nav.logout":"退出登录","common.edit":"编辑","common.saving":"保存中...","nav.groupWorkspace":"工作区","nav.groupResources":"资源","nav.groupSystem":"系统","nav.collapseSidebar":"收起侧边栏","nav.expandSidebar":"展开侧边栏","cliConfig.configRoot":"配置目录","cliConfig.mainConfigFile":"主配置文件","cliConfig.loadFailed":"加载 CLI 配置失败","cliConfig.providers":"模型服务商","cliConfig.hasKey":"已配置","cliConfig.noKey":"未配置","cliConfig.defaultModel":"默认模型","cliConfig.commonFields":"常用字段","cliConfig.fieldNotSet":"未设置","cliConfig.rawEditor":"全局配置编辑","cliConfig.fileMissing":"不存在","cliConfig.saved":"已保存","cliConfig.saveFailed":"保存失败","cliConfig.editRawFile":"编辑","cliConfig.rawFileContentUnavailable":"无法读取文件内容;仍可点击编辑直接写入新内容。","cliConfig.loadFieldValuesFailed":"读取配置值失败","cliConfig.configMetadata":"配置元数据","commandPalette.title":"命令面板","commandPalette.description":"快速跳转页面或执行常用控制台动作。","commandPalette.placeholder":"搜索页面或动作","commandPalette.noResults":"没有匹配命令","commandPalette.navigation":"导航","commandPalette.actions":"动作","commandPalette.showSidebar":"显示侧边栏","commandPalette.hideSidebar":"隐藏侧边栏","dashboard.title":"控制台","dashboard.subtitle":"项目、会话与本地 AI CLI 运行环境一览。","dashboard.viewAll":"查看全部","dashboard.noSessions":"暂无会话。","dashboard.recentSessions":"最近会话","dashboard.systemStatus":"系统状态","dashboard.adaptersHealth":"AI CLI","dashboard.adaptersHealthReady":"{count} 个本机 CLI 可用","dashboard.statusLoading":"检测中…","dashboard.runningNow":"{count} 个运行中","dashboard.emptySessionsDescription":"从项目创建第一条会话,在浏览器中直接驱动本机 AI CLI。","dashboard.dependenciesHealth":"依赖检查","dashboard.dependenciesHealthDescription":"本机 AI CLI 与终端依赖状态。","dashboard.dependenciesHealthLoading":"正在读取本机 AI CLI 与终端依赖状态。","dashboard.dependenciesHealthUnavailable":"无法读取依赖状态,请打开设置重新检测。","dashboard.runtimeRemediation.openSettings":"打开设置","dashboard.terminalRuntime.ready":"内置终端服务可用,可在 Gateway 重启后重新连接会话。","dashboard.terminalRuntime.unavailable":"内置终端服务不可用,请查看 Gateway 日志并重新检测。","dashboard.firstRunTitle":"开始首次开发前的准备","dashboard.firstRunDescription":"确认终端运行时、CLI 适配器与项目就绪后,即可在项目的开发任务中开始第一次交付。","dashboard.firstRunDependencies":"依赖","dashboard.firstRunProject":"项目","dashboard.firstRunSession":"会话","dashboard.firstRunReady":"已就绪","dashboard.firstRunBlocked":"需处理","dashboard.firstRunProjectReady":"已创建项目,可进入项目详情启动会话。","dashboard.firstRunProjectMissing":"先创建或导入一个本地项目。","dashboard.firstRunSessionReady":"已有会话记录,可继续连接或启动。","dashboard.firstRunSessionMissing":"依赖和项目就绪后,从项目详情创建第一条会话。","dashboard.firstRunOpenProject":"打开项目","dashboard.activationRuntime":"终端运行时","dashboard.activationAdapter":"CLI 适配器","dashboard.activationProject":"项目","dashboard.activationSession":"终端准备","dashboard.activationRuntimeLoading":"正在检测终端持久化运行时。","dashboard.activationRuntimeUnavailable":"无法读取终端运行时状态,请打开设置重新检测。","dashboard.activationAdapterLoading":"正在检测本机 Claude Code、OpenCode、Codex CLI 和 Kimi Code。","dashboard.activationAdapterUnavailable":"无法读取 CLI 适配器状态,请打开设置重新检测。","dashboard.activationAdapterReady":"至少一个本机 AI CLI 可用于启动会话。","dashboard.activationAdapterMissing":"未发现可启动的本机 AI CLI,请安装或启用 Claude Code、OpenCode、Codex 或 Kimi Code。","dashboard.activationOpenSettings":"打开设置","dashboard.activationDismiss":"不再显示","dashboard.activationStartSession":"启动首条会话","dashboard.activationContinueSession":"继续会话","runtimeSetup.readyTitle":"终端运行时已就绪","runtimeSetup.readyDescription":"内置终端服务独立托管 CLI 进程,浏览器断线或 Gateway 重启后可重新连接。","runtimeSetup.unavailableTitle":"无法读取终端运行时状态","runtimeSetup.unavailableDescription":"请检查 Gateway 日志和内置终端服务状态,然后重新检测;终端服务退出后原 CLI 进程无法恢复。","dashboard.configHealth":"项目配置","dashboard.configHealthDescription":"项目和模板可用于配置生成。","dashboard.modelHealth":"模型服务","dashboard.modelHealthDescription":"至少一个模型可供会话选择。","dashboard.credentialHealth":"凭据","dashboard.credentialHealthDescription":"已保存可加密注入的 API Key。","dashboard.sessionHealth":"会话","dashboard.sessionHealthDescription":"至少已有一个 CLI 会话记录。","dashboard.skillHealth":"Skill","dashboard.skillHealthDescription":"已配置可启用的 Skill。","notifications.title":"通知","notifications.subtitle":"查看各个 Code CLI 的权限、完成、中断、失败和会话通知。","notifications.emptyTitle":"暂无通知","notifications.emptyDescription":"会话状态变化和各个 Code CLI 的关键事件会显示在这里。","notifications.unread":"未读","notifications.markAllRead":"全部标记已读","notifications.viewAll":"查看全部","notifications.clearAll":"清空","notifications.sessionCreated":"会话已创建","notifications.sessionStatusChanged":"会话状态变化","notifications.sessionDeleted":"会话已删除","notifications.claudeNotification":"Claude Code 通知","notifications.claudePermissionRequest":"Claude Code 权限申请","notifications.opencodePermissionRequest":"OpenCode 权限申请","notifications.codexPermissionRequest":"Codex 权限申请","notifications.kimiPermissionRequest":"Kimi Code 权限申请","notifications.piPermissionRequest":"PI 权限申请","notifications.cliNotification":"Code CLI 通知","notifications.taskCompleted":"任务已完成","notifications.taskInterrupted":"任务已中断","notifications.taskFailed":"任务失败","notifications.copilotAutomationCompleted":"Copilot 自动化已完成","notifications.sessionEnded":"会话已结束","notifications.projectContext":"项目","notifications.sessionContext":"会话","notifications.cliContext":"CLI","notifications.openSession":"打开会话","notifications.claudePermissionDenied":"Claude Code 权限被拒绝","notifications.opencodePermissionDenied":"OpenCode 权限被拒绝","notifications.codexPermissionDenied":"Codex 权限被拒绝","notifications.kimiPermissionDenied":"Kimi Code 权限被拒绝","notifications.piPermissionDenied":"PI 权限被拒绝","notifications.applyProviderSucceeded":"服务商应用成功","notifications.applyProviderFailed":"服务商应用失败","notifications.modelSyncSucceeded":"模型同步成功","notifications.modelSyncFailed":"模型同步失败","notifications.tabAll":"全部","notifications.tabSessionEvents":"会话事件","notifications.tabAppActions":"应用操作","notifications.viewDetails":"查看详情","notifications.noUnread":"暂无未读通知","snapshots.title":"历史快照","snapshots.subtitle":"查看 Gateway 保存的会话快照和结构化历史,不保存终端滚屏内容。","snapshots.loading":"正在加载历史快照...","snapshots.emptyTitle":"暂无快照","snapshots.emptyDescription":"会话启动后会生成快照记录。","snapshots.session":"会话","snapshots.runtimeSessionName":"终端持久化会话","snapshots.model":"模型","snapshots.agent":"Agent","snapshots.configVersion":"配置版本","snapshots.createdAt":"创建时间","snapshots.filters":"筛选","snapshots.allProjects":"全部项目","snapshots.allSessions":"全部会话","snapshots.viewSession":"查看会话","snapshots.viewProject":"查看项目","snapshots.restore":"恢复快照","snapshots.restoring":"恢复中...","snapshots.restoreConfirm":"将根据此快照恢复会话;如果原终端持久化会话不存在,会用快照元数据重新创建。确定继续?","snapshots.noTerminalHistory":"快照只保存会话元数据;terminal scrollback 仍保留在平台终端持久化运行时中。","usage.title":"使用统计","usage.subtitle":"从各 AI CLI 的本地数据采集的真实 token 用量,不含费用估算。","usage.loading":"正在加载使用统计...","usage.emptyTitle":"暂无使用数据","usage.emptyDescription":"点击“同步”从 Claude Code 与 OpenCode 采集 token 用量。","usage.totalTokens":"Token 总数","usage.totalInput":"输入","usage.totalOutput":"输出","usage.totalCacheRead":"缓存读取","usage.totalCacheWrite":"缓存写入","usage.totalReasoning":"推理","usage.cacheHitRate":"命中缓存率","usage.cacheHitRateHint":"缓存读取 ÷ (未缓存输入 + 缓存写入 + 缓存读取)","usage.requests":"请求数","usage.sync":"同步","usage.syncing":"同步中...","usage.syncDone":"已同步","usage.syncFailed":"同步失败","usage.byAdapter":"按适配器","usage.byProject":"按项目","usage.byModel":"按模型","usage.group":"分组","usage.input":"输入","usage.output":"输出","usage.cacheRead":"缓存读","usage.cacheWrite":"缓存写","usage.reasoning":"推理","usage.total":"总计","usage.dailyTrend":"每日 Token 趋势","usage.last30Days":"最近 30 天","usage.activityTitle":"项目活跃度(按日)","usage.unassigned":"未指定","members.title":"成员","members.subtitle":"管理本地 ForgeBadger 实例中的用户角色和状态。","members.loading":"正在加载成员...","members.emptyTitle":"暂无成员","members.emptyDescription":"注册用户会显示在这里。","members.role":"角色","members.status":"状态","members.admin":"管理员","members.user":"用户","members.active":"启用","members.disabled":"停用","members.save":"保存","members.saving":"保存中...","members.selfManaged":"当前账号","members.updateFailed":"更新成员失败","members.accessDeniedTitle":"需要管理员权限","members.accessDeniedDescription":"只有管理员可以查看和修改成员角色。","skills.title":"Skill","skills.subtitle":"为你的 Agent 启用或停用 Skill。","skills.install":"安装 Skill","skills.installSubtitle":"从本地、ClawHub 或 GitHub 来源安装 Skill。","skills.loading":"正在加载 Skill...","skills.emptyTitle":"暂无 Skill","skills.emptyDescription":"添加后 Skill 会显示在这里。","skills.source":"来源","skills.sourceAll":"全部来源","skills.sourceFilter":"来源过滤","skills.sourceCatalog":"来源目录","skills.selectSource":"选择来源","skills.installSource":"安装来源","skills.installSkill":"安装 Skill","skills.installing":"安装中...","skills.installSuccess":"Skill 已安装","skills.installFailed":"安装 Skill 失败","skills.sourceLocal":"本地","skills.sourceClawHub":"ClawHub","skills.sourceGitHub":"GitHub","skills.enabled":"启用","skills.enabledForProject":"项目启用","skills.version":"版本","skills.content":"内容","skills.createSkill":"创建 Skill","skills.editSkill":"编辑 Skill","skills.saveSkill":"保存 Skill","skills.saving":"保存中...","skills.required":"Skill 名称和内容不能为空","skills.saveFailed":"保存 Skill 失败","skills.deleteConfirm":"确定删除此 Skill?","skills.preview":"预览","skills.previewEmpty":"暂无可预览内容","skills.remoteUrl":"远程 Skill URL","skills.previewSource":"预览远程 Skill","skills.previewingSource":"预览中...","skills.remotePreviewTitle":"远程预览","skills.remotePreviewProvenance":"来源","skills.installedDisabledHint":"远程和目录安装的 Skill 默认禁用,需要安装后显式启用。","skills.quickCreateTemplates":"快速创建模板","skills.templatesDescription":"选择模板会预填名称、描述、版本和 SKILL.md 内容,保存前仍可编辑。","skills.applyTemplate":"应用模板","skills.syncLocal":"重新扫描本地 Skill","skills.discoveredLocal":"发现本地 Skill","skills.discoveryRoots":"扫描目录","skills.discoveryHint":"本地 Skill 默认只扫描 Claude Code 与 Agents 的 skills 目录;如需覆盖目录,请检查 Gateway 启动环境中的 FORGEBADGER_SKILL_DIRS、CLAUDE_CONFIG_DIR 和 AGENTS_HOME。","skills.resourcePackage":"UTF-8 资源包","skills.markdownOnly":"仅 Markdown(不含配套资源)","skills.packagesRejected":"以下资源包因包含不支持、超限或不安全的资源而被跳过。","skills.localSyncSummary":"新增 / 更新 / 删除 / 跳过","skills.catalogInstall":"从目录安装 Skill","skills.catalogInstallDescription":"将远程目录中的 Skill 包安装为当前用户的 Skill。","skills.catalogEmpty":"暂无可安装的 Skill 目录项。请先刷新 Skill 目录。","skills.installCatalogItem":"安装目录 Skill","models.title":"模型服务","models.subtitle":"管理 AI 模型与服务商。","models.providerCenterSubtitle":"管理 Claude Code / OpenCode / Codex / Kimi Code 的服务商、API Key、模型与 CLI 配置应用。","models.apiFormatAnthropic":"Anthropic","models.apiFormatOpenai":"OpenAI","models.apiFormatOpenaiCompatible":"OpenAI 兼容","models.apiFormatGoogle":"Google","models.apiFormatBedrock":"AWS Bedrock","models.apiFormatLocal":"本地","models.apiFormatHintAnthropic":"Anthropic 原生协议(Claude 模型)","models.apiFormatHintOpenai":"OpenAI 官方协议","models.apiFormatHintOpenaiCompatible":"兼容 OpenAI 协议的第三方端点","models.apiFormatHintGoogle":"Google Gemini 协议","models.apiFormatHintBedrock":"AWS Bedrock 托管模型","models.apiFormatHintLocal":"本地推理端点","models.authTypeApiKey":"API Key","models.authTypeBearerToken":"Bearer Token","models.authTypeOauth":"OAuth","models.authTypeNone":"无需认证","models.authTypeHintApiKey":"使用服务商 API Key 认证","models.authTypeHintBearerToken":"使用 Bearer Token 认证","models.authTypeHintOauth":"OAuth 授权","models.authTypeHintNone":"无需凭据(本地或内网端点)","models.customCapabilitiesPlaceholder":"其他能力,逗号分隔","models.syncRequiresCredential":"需要先有可用凭据","models.diagnosticsTab":"诊断","models.cliStatusTitle":"CLI 生效状态","models.cliStatusDescription":"各 CLI 全局配置当前生效的服务商与模型。","models.cliStatusActiveHere":"生效中","models.cliStatusNoModel":"未记录模型","models.cliStatusNotConfigured":"未配置","models.cliStatusStale":"配置已被外部修改","models.cliStatusApply":"应用","models.cliStatusViewConfig":"查看配置","models.cliStatusApplyUnsupported":"当前服务商不支持该 CLI","models.cliStatusCliMissing":"未安装该 CLI","models.cliStatusCheckFailed":"检测失败","models.cliStatusLoadFailed":"无法读取 CLI 生效状态。","models.applyAdvancedOptions":"高级选项","models.applyChangeSummary":"查看变更摘要","models.balanceLoading":"正在查询余额…","models.balanceNotQueried":"尚未查询余额","models.cliConfigSection":"CLI 配置文件","models.cliConfigSectionDescription":"查看各 CLI 的全局配置文件状态,编辑原始内容。","models.cliConfigAdminOnly":"配置文件编辑需要管理员权限。","models.providers":"服务商","models.providersDescription":"已配置的服务商 Profile。","models.addProvider":"添加服务商","models.addProviderDescription":"从预设快速填充或手动填写服务商连接信息;保存 API Key 后会立即从服务商同步可用模型。","models.editProvider":"编辑服务商","models.editProviderDescription":"修改服务商连接信息与支持的 CLI;模型与凭证请在下方标签页管理。","models.providerKeyLocked":"创建后不可修改。","models.adapterNotSupported":"该服务商不支持","models.presets":"预设服务商","models.presetsDescription":"点击预设自动填充连接信息;预设只包含端点和认证方式,模型列表始终从服务商实时同步。","models.searchProviderPlaceholder":"搜索预设服务商","models.noPresetMatches":"没有匹配的预设,可直接在下方手动填写。","models.authType":"认证方式","models.openaiBaseUrl":"OpenAI 兼容地址","models.anthropicBaseUrl":"Anthropic 地址","models.baseUrlRequired":"至少填写一个 Base URL(OpenAI 兼容地址或 Anthropic 地址)。","models.allowPlaintextHttp":"信任明文 HTTP 端点(该地址使用 http://)","models.allowPlaintextHttpHint":"开启后允许向该 http:// 地址发送凭据。所有地址/域名安全校验仍然生效,仅放行协议限制。","models.supportedAdapters":"支持的 CLI","models.setupCredentialOptionalHint":"可选。填写后保存凭据并立即同步模型;也可以稍后在服务商详情中补充。","models.modelSyncFailed":"模型同步失败","models.emptyWorkspaceTitle":"尚未配置服务商","models.searchConfiguredProviders":"搜索已配置服务商","models.catalogMatches":"匹配","models.emptyProviders":"暂无服务商,请手动添加一个服务商。","models.providerProfile":"Provider Profile","models.providerProfileDescription":"Provider 是模型和凭据的唯一配置源。","models.providerCreated":"服务商已创建","models.providerDeleted":"服务商已删除","models.deleteProviderTitle":"删除服务商","models.deleteProviderWarning":"删除后,该服务商的模型与 API Key 也将一并移除。","models.deleteModelTitle":"删除模型","models.deleteModelWarning":"删除后该模型将不再可用,正在使用它的会话和代理需要先切换模型。","models.deleteCredentialTitle":"删除 API Key","models.deleting":"删除中...","models.modelUnit":"个模型","models.providerKey":"服务商 Key","models.apiFormat":"API 格式","models.applyTargets":"支持目标","models.applyScope":"应用到","models.region":"区域","models.productType":"产品类型","models.productTypePaygApi":"按量 API","models.productTypeCodingPlan":"Coding Plan","models.productTypeTokenPlan":"Token Plan","models.productTypeSubscription":"订阅","models.productTypeLocal":"本地","models.noProviderSelected":"请选择一个服务商。","models.credentials":"API Key","models.credentialsDescription":"只需要填写服务商 API Key;密钥加密保存,页面和 preview 不回显明文。","models.credentialLabel":"API Key 名称","models.defaultCredentialLabel":"默认 API Key","models.apiKeyPlaceholder":"粘贴服务商 API Key","models.saveAndSyncModels":"保存并同步模型","models.noCredentialRequired":"此服务商不需要 API Key。","models.saveCredential":"保存凭据","models.credentialSaved":"凭据已保存","models.credentialRotated":"凭据已轮换","models.credentialDeleted":"凭据已删除","models.credentialRevoked":"凭据已撤销","models.credentialRequired":"请选择凭据","models.rotateSelectedCredential":"轮换选中凭据","models.deleteCredential":"删除凭据","models.deleteCredentialConfirm":"确定删除此凭据?","models.emptyCredentials":"暂无凭据,可继续使用主机环境变量。","models.unnamedCredential":"未命名凭据","models.modelsWorkspace":"模型","models.modelsWorkspaceDescription":"保存凭据后可从服务商同步模型;手动模型编辑仅用于高级调整。","models.modelProfileSaved":"模型 Profile 已保存","models.modelRequired":"请选择模型","models.newModel":"新模型","models.syncProviderModels":"同步模型","models.syncProviderModelsDescription":"从服务商的真实接口刷新模型列表。","models.checkBalance":"查询余额","models.balanceNotSupported":"该服务商不支持余额查询","models.balanceCheckFailed":"余额查询失败","models.balanceEmpty":"未返回余额数据","models.balanceResetsAt":"重置时间","models.balanceUnavailable":"暂不可用","models.modelSyncComplete":"模型已从服务商同步","models.modelSyncNoChanges":"模型已是最新","models.emptyModelsForProvider":"此服务商暂无模型。保存凭据后同步模型,或手动添加模型 ID。","models.noModelsAvailable":"暂无可用模型","models.capabilities":"能力标签","models.contextWindow":"上下文长度","models.contextWindowPlaceholder":"例如 131072","models.contextWindowHint":"Kimi Code 要求自定义模型必须填写上下文长度(tokens)。留空则应用时默认使用 256k。","models.projectPath":"项目路径","models.applyConfig":"应用配置","models.applyToCli":"应用到 CLI","models.applyToCliDescription":"把当前服务商、模型和凭据写入所选 CLI 的原生全局配置文件。","models.roleMapping":"模型角色映射","models.roleMappingDescription":"未设置的角色跟随主模型;Sonnet/Opus/Haiku 对应 Claude Code 的别名固定,Fable/Subagent 为可选高级槽位。","models.followPrimaryModel":"跟随主模型","models.reasoningEffort":"推理强度(model_reasoning_effort)","models.reasoningEffortDefault":"默认(不写入)","models.opencodeApplyHint":"将把该服务商及全部已同步模型加入 OpenCode 配置;当前模型在 OpenCode 内选择。","models.applyToCliDefaultModel":"默认模型","models.applyToCliPiHint":"该服务商的全部启用模型都会写入 models.json;此处仅选择 pi 的启动默认模型,之后可在 pi 内用 /model 切换。","models.applyToCliNoCredential":"不注入凭据(使用主机环境)","models.applyToCliSuccess":"已应用到 {targetPath}","models.applyToCliRollbackHint":"写入前已创建加密备份,可通过 CLI 配置接口回滚。","models.applyToCliFailed":"应用失败","models.applyPreviewFailed":"预览生成失败","models.applyTargetPath":"目标文件","models.applyingToCli":"应用中…","models.claudeRouteBanner":"该服务商仅配置 OpenAI 协议地址,未配置 Anthropic 地址;需开启网关路由后应用到 Claude Code。","models.claudeRouteBannerDescription":"开启后 Claude Code 将连接 Gateway 的本机端点,真实 API Key 不会写入 Claude 配置文件。","models.claudeRouteEnableAndApply":"开启路由并应用","models.claudeRouteApply":"应用(经网关路由)","models.claudeRouteEnabledHint":"网关路由已开启,Claude Code 将连接 {gatewayUrl}","models.claudeRouteUnsupported":"此协议格式暂不支持 Claude Code 网关路由","models.claudeRouteBadge":"Claude 经网关路由","models.providerRequired":"请选择服务商","models.providerApplyDisabled":"Provider apply disabled","models.providerApplyEnabled":"Provider apply enabled","models.sdkInstalled":"已安装","models.sdkMissing":"未安装","models.loading":"正在加载模型...","models.emptyTitle":"暂无模型","models.emptyDescription":"配置后模型会显示在这里。","models.provider":"服务商","models.default":"默认","models.catalog":"模型目录","models.catalogDescription":"维护 Provider、API Key、模型和 CLI 配置应用。","models.advancedModelEditor":"高级:手动编辑模型","models.providerGroup":"服务商分组","models.modelId":"模型 ID","models.endpoint":"端点","models.addModel":"添加模型","models.saveModel":"保存模型","models.saving":"保存中...","models.created":"模型已添加","models.updated":"模型已更新","models.defaultUpdated":"默认模型已更新","models.deleted":"模型已删除","models.apiKeys":"API Key","models.apiKeysDescription":"密钥仅提交给 Gateway 加密保存。","models.apiKey":"API Key","models.addApiKey":"添加 API Key","models.apiKeyCreated":"API Key 已添加","models.apiKeyRotated":"API Key 已轮换","models.apiKeyDeleted":"API Key 已删除","models.configuredModels":"已配置模型","models.configuredModelsDescription":"会话创建时可选择这些模型。","models.failedLoad":"加载模型失败","models.storedKeys":"已存储密钥","models.storedKeysDescription":"密钥值始终以掩码显示。","models.loadingApiKeys":"正在加载 API Key...","models.failedLoadApiKeys":"加载 API Key 失败","models.emptyApiKeysTitle":"暂无 API Key","models.emptyApiKeysDescription":"添加密钥后可用于存储凭据模式。","models.editModel":"编辑模型","models.setDefault":"设为默认","models.checkHealth":"检查健康","models.healthReady":"可用","models.healthReadyDescription":"模型配置可用于创建会话。","models.healthNeedsAttention":"需处理","models.healthNeedsAttentionDescription":"请检查服务商、模型 ID 或状态。","models.checkEndpoint":"检查端点","models.endpointTest":"端点测速","models.endpointTestDescription":"检测服务商端点的可达性与延迟。","models.checkingEndpoint":"检查端点中...","models.endpointHealthy":"端点可达","models.endpointFailed":"端点不可达","models.deleteModel":"删除模型","models.deleteModelConfirm":"确定删除此模型记录?","models.rotate":"轮换","models.rotateApiKey":"轮换 API Key","models.deleteApiKey":"删除 API Key","models.deleteApiKeyConfirm":"确定删除此 API Key?","templates.title":"模板","templates.subtitle":"浏览并管理项目模板。","templates.loading":"正在加载模板...","templates.emptyTitle":"暂无模板","templates.emptyDescription":"添加后模板会显示在这里。","templates.builtin":"内置","templates.adapter":"适配器","templates.createCustom":"创建自定义模板","templates.creating":"创建中...","templates.created":"模板已创建","templates.cloned":"模板已克隆","templates.saved":"模板已保存","templates.saving":"保存中...","templates.deleted":"模板已删除","templates.exported":"模板已导出","templates.imported":"模板已导入","templates.available":"可用模板","templates.availableDescription":"内置模板只读,可克隆后编辑。","templates.governedTitle":"治理中的模板","templates.seedTitle":"仅作初始化种子的模板","templates.selectTemplate":"选择模板","templates.noTracking":"不跟踪模板","templates.editorDescription":"编辑自定义模板文件,变量会在项目应用时渲染。","templates.cloneName":"克隆名称","templates.clone":"克隆","templates.filePath":"文件路径","templates.fileContent":"文件内容","templates.loadFile":"载入文件","templates.save":"保存模板","templates.deleteConfirm":"确定删除此自定义模板?","templates.importExport":"导入 / 导出","templates.importExportDescription":"使用 JSON 模板包在环境之间迁移模板。","templates.packageJson":"模板包 JSON","templates.export":"导出","templates.import":"导入","templates.versionHistory":"版本历史","templates.restore":"回滚","templates.restoring":"回滚中...","templates.restored":"模板已回滚","templates.restoreConfirm":"确定将当前模板回滚到这个历史版本?当前状态会先保存为新的历史记录。","templates.noVersions":"暂无历史版本","templates.catalogInstall":"从目录安装","templates.catalogInstallDescription":"将远程目录中的模板包导入为当前用户的自定义模板。","templates.catalogEmpty":"暂无可安装模板。请先刷新模板目录。","templates.catalogInstalled":"目录模板已安装","templates.install":"安装","templates.installing":"安装中...","templates.extract":"沉淀模板","templates.extractTitle":"沉淀为模板","templates.extractDescription":"读取该项目当前的 AI CLI 配置(根指令文件与适配器配置目录),提取为一个可复用的新模板。","templates.extractBind":"同时让该项目跟踪新模板","templates.extracting":"提取中...","templates.extractFailed":"提取失败","templates.extractedFiles":"已提取的文件","templates.skippedFiles":"跳过的文件","templates.gitImport":"从 Git 仓库导入","templates.gitImportDescription":"导入公开 Git 仓库中的指令文件与适配器配置目录,沉淀为可复用的模板。","templates.gitImportUrl":"仓库地址","templates.gitImportBranch":"分支(可选)","templates.gitImporting":"导入中...","templates.gitImported":"Git 仓库模板已导入","projects.title":"项目","projects.subtitle":"管理你的 AI 编程项目。","projects.new":"新建项目","projects.create":"创建项目","projects.import":"导入项目","projects.newSubtitle":"创建一个用于 AI 辅助开发的新项目。","projects.details":"项目详情","projects.optionalDescription":"可选描述","projects.loading":"正在加载项目...","projects.emptyTitle":"暂无项目","projects.emptyDescription":"创建第一个项目开始使用。","projects.back":"返回项目列表","projects.loadingOne":"正在加载项目...","projects.notFound":"项目不存在。","projects.generateConfig":"生成配置","projects.previewConfig":"预览配置","projects.applyConfig":"应用配置","projects.configPreview":"配置预览","projects.previewFiles":"将写入文件","projects.conflicts":"冲突","projects.noConflicts":"未发现冲突","projects.conflictDecision":"冲突处理","projects.skip":"跳过","projects.overwrite":"覆盖","projects.blocked":"已阻塞","projects.configNeedsReviewTitle":"配置需要处理","projects.configNeedsReviewDescription":"项目已导入,但自动配置生成未完成。请预览配置并处理冲突后再应用。","projects.configPreviewDescription":"检查配置只会生成预览,不会修改项目文件。已有配置默认建议跳过;只有你明确选择覆盖时才会写入模板生成内容。","projects.existingHash":"现有","projects.incomingHash":"生成","projects.reviewConfig":"检查配置","projects.generating":"生成中...","projects.newSession":"新建会话","projects.creating":"创建中...","projects.failedGenerateConfig":"生成配置失败","projects.failedCreateSession":"创建会话失败","projects.failedCreateProject":"创建项目失败","projects.noSessions":"此项目暂无会话。","projects.projectManager":"项目经理","projects.projectManagerLoading":"正在加载项目经理状态...","projects.devTasks":"开发任务","projects.devTasksDescription":"从目标到交付:按阶段推进工作项,以证据闭环验收。","projects.devTasksRefresh":"刷新开发任务","projects.projectManagerStages":"开发阶段","projects.projectManagerPipelineTitle":"开发流水线","projects.projectManagerPipelineDescription":"按阶段从左到右推进,工作项随流程流转。","projects.projectManagerStageBacklog":"待办池","projects.projectManagerStageEmptyTitle":"尚未创建开发阶段","projects.projectManagerStageEmptyBody":"使用 SDLC 模板一键创建标准开发流程(需求分析 → 架构设计 → 编码实现 → 测试验证 → 发布交付),或手动新建阶段。","projects.projectManagerStageSeedTemplate":"使用 SDLC 模板","projects.projectManagerStageCreate":"新建阶段","projects.projectManagerStageName":"阶段名称","projects.projectManagerStageNameRequired":"阶段名称不能为空","projects.projectManagerStageDescription":"阶段描述(可选)","projects.projectManagerStageRename":"重命名","projects.projectManagerStageDelete":"删除阶段","projects.projectManagerStageDeleteConfirm":"删除后,该阶段下的工作项将移回待办池。","projects.projectManagerStageMoveLeft":"左移","projects.projectManagerStageMoveRight":"右移","projects.projectManagerStageLaneEmpty":"将工作项移入此阶段","projects.projectManagerStageAssign":"所属阶段","projects.projectManagerStageStatusActive":"活跃","projects.projectManagerStageStatusCompleted":"已完成","projects.projectManagerStageStatusArchived":"已归档","projects.projectManagerStageMutationError":"阶段操作失败","projects.projectManagerDependencies":"依赖关系","projects.projectManagerDependencyBlockedBy":"阻塞于","projects.projectManagerDependencyBlocking":"阻塞了","projects.projectManagerDependencyAdd":"添加前置阻塞","projects.projectManagerDependencyAddPlaceholder":"选择前置工作项...","projects.projectManagerDependencyNone":"无依赖","projects.projectManagerDependencyMutationError":"依赖操作失败","projects.projectManagerLinkedSession":"关联会话","projects.projectManagerEventStageCreated":"阶段已创建","projects.projectManagerEventStageUpdated":"阶段已更新","projects.projectManagerEventStageDeleted":"阶段已删除","projects.projectManagerEventDependencyAdded":"依赖已添加","projects.projectManagerEventDependencyRemoved":"依赖已移除","projects.projectManagerNoGoalTitle":"暂无项目目标","projects.projectManagerNoGoalBody":"设定项目目标,让任务执行有据可依。","projects.projectManagerNoWorkItemsTitle":"暂无工作项","projects.projectManagerNoWorkItemsBody":"创建工作项后会显示在这里。","projects.projectManagerLoadFailed":"无法加载项目经理状态。请刷新或检查 Gateway 可用性。","projects.projectManagerNotFound":"此项目没有找到项目经理状态。","projects.projectManagerDisabledActionHint":"管理项目目标、工作项和台账状态。","projects.projectManagerGoal":"项目目标","projects.projectManagerEditGoal":"编辑目标","projects.projectManagerSaveGoal":"保存目标","projects.projectManagerCancel":"取消","projects.projectManagerGoalSummary":"摘要","projects.projectManagerGoalStatus":"目标状态","projects.projectManagerGoalMutationError":"无法保存项目目标。","projects.projectManagerGoalSummaryRequired":"目标摘要不能为空。","projects.projectManagerTextListHint":"每行一项。","projects.projectManagerWorkItems":"工作项","projects.projectManagerBoard":"看板","projects.projectManagerTable":"表格","projects.projectManagerTaskQueue":"任务队列","projects.projectManagerTaskQueueDescription":"任务包按执行队列状态分组,可直接启动关联会话。","projects.projectManagerTaskQueueLoading":"正在加载任务队列...","projects.projectManagerTaskQueueLoadError":"无法加载任务队列。","projects.projectManagerTaskQueueEmptyTitle":"暂无任务包","projects.projectManagerTaskQueueEmptyBody":"创建工作项后会生成可分发的任务包。","projects.projectManagerTaskQueueEmptyColumn":"此列暂无任务包","projects.projectManagerTaskQueuePlanned":"待规划","projects.projectManagerTaskQueueRunning":"执行中","projects.projectManagerTaskQueueWaitingForReview":"待验收","projects.projectManagerTaskQueueBlocked":"阻塞","projects.projectManagerTaskQueueCompleted":"已完成","projects.projectManagerTaskQueueCancelled":"已取消","projects.projectManagerCreateWorkItem":"创建工作项","projects.projectManagerCreateWorkItemBody":"新任务将从待办开始;证据可在任务详情或验收时补充。","projects.projectManagerEditWorkItem":"编辑工作项","projects.projectManagerEditWorkItemBody":"只能编辑标题、描述、优先级和验收标准。状态和证据仍通过独立操作处理。","projects.projectManagerSaveWorkItem":"保存工作项","projects.projectManagerUpdateWorkItemError":"无法更新工作项。","projects.projectManagerDeleteWorkItem":"删除工作项","projects.projectManagerDeleteWorkItemBody":"删除后工作项会从当前列表移除,但台账会保留安全删除标记。","projects.projectManagerDeleteWorkItemError":"无法删除工作项。","projects.projectManagerViewDetails":"查看详情","projects.projectManagerWorkItemDetail":"工作项详情","projects.projectManagerFilterByStatus":"按状态筛选","projects.projectManagerSearchPlaceholder":"按标题搜索工作项...","projects.projectManagerAllStatuses":"全部状态","projects.projectManagerBatchActions":"批量操作","projects.projectManagerBatchTargetStatus":"批量目标状态","projects.projectManagerBatchStatusError":"无法批量更新工作项状态。","projects.projectManagerBatchStatusSelectionRequired":"请先选择工作项。","projects.projectManagerBatchStatusTargetRequired":"请选择可用的目标状态。","projects.projectManagerBoardEmptyColumn":"暂无工作项","projects.projectManagerClearSelection":"清空选择","projects.projectManagerMoveSelected":"移动已选择","projects.projectManagerNoBatchTargets":"所选工作项没有共同可达的目标状态。","projects.projectManagerSelectWorkItem":"选择工作项","projects.projectManagerSelected":"已选择","projects.projectManagerWorkItemTitle":"标题","projects.projectManagerWorkItemTitleRequired":"工作项标题不能为空。","projects.projectManagerWorkItemDescription":"描述","projects.projectManagerCreateWorkItemError":"无法创建工作项。","projects.projectManagerAttachEvidence":"附加证据","projects.projectManagerEvidenceReferenceHint":"证据引用是指针。请勿粘贴原始终端转录、飞书正文、模型提供商载荷或密钥。","projects.projectManagerEvidenceKindRequired":"证据类型不能为空。","projects.projectManagerEvidenceReferenceRequired":"请填写引用或路径。","projects.projectManagerEvidenceUnsafeValue":"请使用短引用或路径,不要粘贴原始输出或密钥。","projects.projectManagerEvidenceAttachError":"无法附加证据引用。","projects.projectManagerEvidenceReferenceType":"引用类型","projects.projectManagerEvidenceTypeCustom":"自定义","projects.projectManagerEvidenceTypeFilePath":"File path","projects.projectManagerEvidenceTypeTerminalSnapshot":"Terminal snapshot","projects.projectManagerEvidenceTypeSession":"Session","projects.projectManagerEvidenceSessionId":"Session ID","projects.projectManagerEvidencePathRequired":"请填写文件路径。","projects.projectManagerEvidenceSessionRequired":"请填写 Session ID。","projects.projectManagerTerminalSnapshotMarkerHint":"只保存 terminal snapshot 标记和 Session ID,不保存终端滚屏内容。","projects.projectManagerTaskPacket":"任务包","projects.projectManagerTaskPacketRuntimeAdapter":"CLI","projects.projectManagerTaskPacketRuntimeTemplate":"模板","projects.projectManagerTaskPacketStatus":"状态","projects.projectManagerTaskPacketReady":"可启动","projects.projectManagerTaskPacketBlockedNoSession":"待关联会话","projects.projectManagerTaskPacketBlockedInactiveSession":"关联会话未运行","projects.projectManagerTaskPacketLinkedSession":"关联会话","projects.projectManagerTaskPacketPrompt":"提示词","projects.projectManagerTaskPacketExpectedVerification":"预期验证","projects.projectManagerTaskPacketEvidenceRequirements":"证据要求","projects.projectManagerTaskPacketOpenSession":"打开关联会话","projects.projectManagerTaskPacketSelectSession":"选择会话","projects.projectManagerTaskPacketNoSessions":"无可关联会话","projects.projectManagerTaskPacketLinkSession":"关联会话","projects.projectManagerTaskPacketQuickStart":"创建会话","projects.projectManagerTaskPacketStart":"创建任务会话","projects.projectManagerTaskPacketSelectCli":"选择 Code CLI","projects.projectManagerTaskPacketSelectCliDescription":"为该任务选择用于执行的 Code CLI,创建后会话将挂载到工作项。","projects.projectManagerTaskPacketNoCliAvailable":"未检测到可用的 Code CLI,请先安装或在设置中启用。","projects.projectManagerTaskPacketStarting":"正在创建...","projects.projectManagerTaskPacketLoadError":"无法加载任务包。","projects.projectManagerTaskPacketLinkError":"无法关联会话。","projects.projectManagerTaskPacketStartError":"无法创建任务会话。","projects.projectManagerTaskPacketSessionRequired":"请选择会话。","projects.projectManagerTaskPacketUnavailable":"暂无任务包。","projects.projectManagerFilterEmptyTitle":"此状态下暂无工作项","projects.projectManagerFilterEmptyBody":"尝试切换状态筛选,或创建新的工作项。","projects.projectManagerRefKind":"类型","projects.projectManagerRefLabel":"标签","projects.projectManagerRefId":"引用","projects.projectManagerChangeStatus":"变更状态","projects.projectManagerDoneReasonTitle":"需要完成原因","projects.projectManagerDoneReasonBody":"请记录所选任务的手动完成原因。这不代表已验证、验收或交付。","projects.projectManagerDoneReasonLabel":"手动完成原因","projects.projectManagerDoneReasonRequired":"请填写手动完成原因。","projects.projectManagerConfirmStatusChange":"确认变更","projects.projectManagerStatusMutationError":"无法更新工作项状态。","projects.projectManagerLedger":"台账","projects.projectManagerLedgerRefresh":"刷新台账","projects.projectManagerLedgerToggle":"展开或收起台账","projects.projectManagerLedgerFilterAll":"全部","projects.projectManagerLedgerFilterStatusChanges":"状态变更","projects.projectManagerLedgerFilterEvidence":"证据","projects.projectManagerLedgerFilterManualCompletion":"手动完成","projects.projectManagerLedgerFilterBlockers":"阻塞","projects.projectManagerLoadMoreLedger":"加载更多台账事件","projects.projectManagerLedgerLoadFailed":"无法加载台账事件。","projects.projectManagerLedgerFilteredEmptyTitle":"当前筛选下暂无事件","projects.projectManagerLedgerFilteredEmptyBody":"加载更多事件,或切换筛选条件。","projects.projectManagerLedgerManualCompletionNote":"已记录无证据引用的完成动作。","projects.projectManagerLedgerBlockerRecordedNote":"仅显示阻塞安全标记,不显示原始阻塞详情。","projects.projectManagerLedgerBlockerResolvedNote":"仅显示阻塞解决标记,不显示原始阻塞详情。","projects.projectManagerConstraints":"约束","projects.projectManagerAcceptanceCriteria":"验收标准","projects.projectManagerEvidenceRefs":"证据","projects.projectManagerTraceRun":"运行","projects.projectManagerTraceAction":"操作","projects.projectManagerTraceEvidence":"证据","projects.projectManagerTraceSession":"会话","projects.projectManagerTraceLedger":"台账","projects.projectManagerTraceActionType":"操作类型","projects.projectManagerTraceTarget":"目标","projects.projectManagerTraceEvidenceRefs":"证据","projects.projectManagerTraceApproval":"审批","projects.projectManagerTraceExecution":"执行","projects.projectManagerPriority":"优先级","projects.projectManagerPriorityHigh":"高优先级","projects.projectManagerPriorityMedium":"中优先级","projects.projectManagerPriorityLow":"低优先级","projects.projectManagerUpdated":"更新","projects.projectManagerCreated":"创建","projects.projectManagerEvent":"事件","projects.projectManagerNoLedgerTitle":"暂无台账事件","projects.projectManagerNoLedgerBody":"项目经理事件会在后续工作流中显示。","projects.projectManagerStatusTodo":"待办","projects.projectManagerStatusInProgress":"进行中","projects.projectManagerStatusBlocked":"阻塞","projects.projectManagerStatusReadyForReview":"待评审","projects.projectManagerStatusDone":"完成","projects.projectManagerStatusCancelled":"已取消","projects.projectManagerStatusActive":"活跃","projects.projectManagerStatusUnknown":"未知","projects.projectManagerEventGoalUpdated":"目标已更新","projects.projectManagerEventWorkItemCreated":"工作项已创建","projects.projectManagerEventWorkItemUpdated":"工作项已更新","projects.projectManagerEventWorkItemDeleted":"工作项已删除","projects.projectManagerEventWorkItemStatusChanged":"工作项状态已变更","projects.projectManagerEventEvidenceAttached":"证据已附加","projects.projectManagerEventBlockerRecorded":"阻塞已记录","projects.projectManagerEventBlockerResolved":"阻塞已解决","projects.projectManagerEventFeishuReferenceLinked":"飞书引用已关联","projects.projectManagerEventNextStepProposed":"下一步已提出","projects.projectManagerEventManualCompletionRecorded":"手动完成已记录","projects.skillsComingSoon":"Skill 管理即将开放。","projects.model":"模型","projects.action":"操作","projects.deleteRecord":"删除记录","projects.deleting":"删除中...","projects.deleteFailed":"删除项目失败","projects.deleteConfirm":"只删除 ForgeBadger 中的项目记录,不会删除服务器目录。确定继续?","projects.importTitle":"导入项目","projects.importSubtitle":"导入已有项目目录,用于 AI 辅助开发。","projects.importStepPath":"步骤 1:选择目录","projects.importStepScan":"步骤 2:检查扫描结果","projects.importStepConfirm":"步骤 3:配置并导入","projects.directoryPath":"目录路径","projects.pathRequired":"必须填写路径","projects.browseDirectory":"选择目录","projects.scanDirectory":"扫描目录","projects.scanning":"扫描中...","projects.validDirectory":"找到有效目录","projects.pathNotDirectory":"路径存在但不是目录","projects.directoryNotFound":"目录不存在","projects.validDirectoryRequired":"请输入有效目录路径后继续。","projects.projectName":"项目名称","projects.importing":"导入中...","projects.failedScan":"扫描目录失败","projects.failedImport":"导入项目失败","projects.moreActions":"更多操作","projects.configSyncTitle":"模板同步","projects.sessionsSummary":"共 {total} 个会话 · {running} 个运行中","projects.loadingRuntimeCli":"正在检测 CLI...","projects.selectRuntimeCli":"选择 Runtime CLI","projects.runtimeUnavailable":"未安装","projects.runtimeCheckFailed":"检测失败","projects.runtimeLaunchDisabled":"不可启动","projects.noLaunchableRuntimeCli":"未检测到可启动的本地 CLI,无法新建会话。","projects.runtimeCliRecoveryDescription":"请确认本机 claude、opencode 或 codex 命令可用,并满足终端持久化运行时条件。","projects.runtimeBlockedByTerminalTitle":"先修复终端运行时","projects.runtimeBlockedByTerminalDescription":"当前 CLI 命令检测完成,但会话启动仍被终端运行时阻塞。","projects.openSettings":"打开设置","projects.template":"模板","projects.credentialMode":"凭据模式","projects.authenticationMethod":"认证方式","projects.hostEnvironmentHint":"沿用 CLI 当前主机环境与全局配置,不注入额外模型配置。","projects.launchSessionDescription":"选择要启动的 Code CLI;会话沿用该 CLI 的主机环境与全局配置。","projects.storedCredential":"存储的 API Key","projects.storedCredentialDescription":"使用 ForgeBadger 加密保存的 API Key,并在启动会话时注入给对应 CLI。","projects.apiKey":"API Key","projects.noModel":"不指定模型","projects.noApiKey":"未选择 API Key","projects.checkCompliance":"检查合规","projects.checkingCompliance":"检查中...","projects.configCompliance":"配置合规","projects.compliant":"合规","projects.needsAttention":"需要处理","projects.totalFiles":"总文件","projects.missingFiles":"缺失","projects.identicalFiles":"一致","projects.staleFiles":"过期","projects.unsafeFiles":"不安全","projects.requiresDecision":"需要处理的文件","projects.failedCompliance":"配置合规检查失败","projects.stopTrackingTemplate":"停止跟踪模板","projects.stopTrackingConfirm":"停止跟踪该模板?项目文件不会被修改,仅解除平台层的跟踪关系。","projects.unbinding":"解除中…","projects.untrackedConfigTitle":"独立配置","projects.untrackedConfigDescription":"该项目未跟踪任何模板,项目内配置即为唯一真相。","projects.untrackedConfigHint":"如需重新跟踪模板,可在模板管理中对齐并应用。","projects.aiConfig":"AI 配置","projects.gitTab":"Git","projects.gitBranches":"Git 分支","projects.gitNewBranch":"新建分支","projects.gitNewBranchTitle":"新建分支","projects.gitNewBranchDesc":"从当前 HEAD 创建新分支并切换过去。","projects.gitBranchNamePlaceholder":"分支名,如 feature/login","projects.gitSwitchConfirmTitle":"切换分支","projects.gitSwitchConfirmDesc":"切换到分支 {branch}?","projects.gitSwitchSuccess":"已切换到分支 {branch}","projects.gitSwitchFailed":"切换分支失败","projects.gitCreateSuccess":"已创建并切换到分支 {branch}","projects.gitWorkingTreeDirty":"工作区有 {count} 个未提交变更,请先提交或清理后再切换分支。","projects.gitBranchCurrent":"当前","projects.gitNoBranches":"暂无本地分支","projects.gitLoadFailed":"Git 分支加载失败","projects.filesTab":"文件","projects.graphTab":"图谱","projects.graphFiles":"文件","projects.graphSymbols":"符号","projects.graphRelations":"关系","projects.graphIndexState":"索引状态","projects.graphNotInitTitle":"该项目尚未初始化 CodeGraph","projects.graphNotInitDesc":"在项目根目录执行 codegraph init 生成代码图谱索引后,即可在此查看文件依赖、符号调用与影响面分析。","projects.graphSchemaUnsupported":"检测到的 CodeGraph 索引版本不受支持,请升级本机 codegraph 并重新索引该项目。","projects.graphUnavailable":"代码图谱暂不可用,请稍后重试。","projects.graphSearchPlaceholder":"搜索符号…","projects.graphNoResults":"无匹配符号","projects.graphCallers":"被调用","projects.graphCallees":"调用","projects.graphImpact":"影响面","projects.graphTruncated":"已按关联度裁剪部分文件以保持渲染性能","projects.graphBackToFiles":"返回文件视图","projects.graphHint":"「符号」指代码里有名字的实体:函数、类、方法、接口、常量、路由等。搜索符号可查看调用关系;点击节点会在「文件」页打开对应源码。切换到「改动影响面」可分析当前 git 变更的波及范围。","projects.graphViewFiles":"文件视图","projects.graphViewAffected":"改动影响面","projects.graphAffectedAnalyze":"分析影响面","projects.graphAffectedAnalyzing":"分析中…","projects.graphAffectedLoadingGit":"正在读取 git 变更…","projects.graphAffectedNoGit":"该项目不是 git 仓库,无法分析变更影响面。","projects.graphAffectedNoChanges":"当前没有未提交的 git 变更。","projects.graphAffectedChangedCount":"个变更文件","projects.graphAffectedSeeded":"个直接涉及的符号","projects.graphAffectedTouched":"个受波及的符号","projects.workspace":"工作区","projects.workspaceRefresh":"刷新工作区","projects.workspaceRootPending":"等待项目根目录...","projects.workspaceNoProject":"暂无关联项目。","projects.workspaceLoading":"正在读取项目文件...","projects.workspaceLoadFailed":"工作区加载失败","projects.workspaceEmpty":"暂无可展示文件。","projects.workspaceSelectFile":"从左侧选择文件查看内容","projects.workspaceFileLoadFailed":"文件读取失败","projects.workspaceFileEmpty":"文件内容为空。","projects.workspaceBinaryFile":"二进制文件不可预览。","projects.workspaceTruncated":"已截断","projects.workspaceSearchPlaceholder":"搜索文件名…","projects.workspaceSearchNoResults":"无匹配文件","projects.workspaceTreeTruncated":"目录内容过多,仅显示前 500 条","projects.workspaceFileTruncated":"文件过大,仅显示前 64 KB","projects.workspaceBreadcrumb":"文件路径","projects.workspaceLineNumbers":"行号","projects.workspaceOpenViewer":"打开文件查看器","projects.workspaceCloseViewer":"关闭查看器","projects.workspaceEditFile":"编辑文件","projects.workspaceSaveFile":"保存","projects.workspaceCancelEdit":"取消编辑","projects.workspaceSavingFile":"保存中...","projects.workspaceFileSaved":"文件已保存","projects.workspaceFileSaveFailed":"文件保存失败","projects.workspaceFileTooLargeToEdit":"文件过大,无法在线编辑","projects.projectConfigFiles":"项目配置文件","projects.noConfigFiles":"暂无项目配置文件。","projects.configExists":"存在","projects.configMissing":"缺失","projects.selectConfigFile":"选择配置文件","projects.editFile":"编辑","projects.previewFile":"预览","projects.savingConfig":"保存中...","projects.failedSaveConfig":"保存配置失败","projects.globalConfigReadOnly":"全局配置(只读)","projects.noGlobalConfig":"未检测到全局配置文件。","projects.noGlobalConfigContent":"无内容或文件过大。","projects.skillInheritedEnabled":"继承全局:启用","projects.skillInheritedDisabled":"继承全局:关闭","projects.skillProjectEnabled":"项目覆盖:启用","projects.skillProjectDisabled":"项目覆盖:关闭","projects.order":"顺序","sessions.title":"会话","sessions.subtitle":"按项目查看所有 AI CLI 会话。","sessions.columnStats":"运行中 {running} · 共 {total}","sessions.noInputRecord":"尚无输入记录 · 打开终端后自动记录","sessions.showEmptyProjects":"显示空项目","sessions.columnEmpty":"暂无会话","sessions.moreTasks":"+{count} 更多","sessions.openProject":"进入项目","sessions.cliFilter":"按 CLI 筛选","sessions.resetColumnOrder":"重置列顺序","sessions.viewToggle":"切换视图","sessions.viewBoard":"看板视图","sessions.viewList":"列表视图","sessions.resizeColumn":"调整列宽","sessions.dragColumn":"拖拽排序项目列","sessions.loading":"正在加载会话...","sessions.emptyTitle":"暂无会话","sessions.emptyDescription":"从项目页面创建会话后会显示在这里。","sessions.createFromProject":"从项目创建会话","sessions.createProject":"创建项目","sessions.chooseProjectTitle":"选择项目","sessions.chooseProjectDescription":"选择一个项目以创建新会话。","sessions.chooseProjectEmpty":"还没有项目,先创建一个吧。","sessions.emptyReadyDescription":"点击右上角新建会话,选择一个项目即可开始。","sessions.runtimeBlockedDescription":"会话列表为空不是项目问题;当前终端运行时还未就绪。","sessions.project":"项目","sessions.running":"运行中","sessions.stopped":"已停止","sessions.error":"错误","sessions.deleteLabel":"删除会话","sessions.searchPlaceholder":"搜索会话、项目或工具","sessions.statusFilter":"状态过滤","sessions.statusAll":"全部状态","sessions.noMatchesTitle":"没有匹配的会话","sessions.noMatchesDescription":"调整搜索关键词或状态过滤后重试。","sessions.groupedByProject":"按项目分组","sessions.unknownProject":"未关联项目","sessions.back":"会话","sessions.preparing":"正在准备终端连接...","sessions.cannotOpen":"无法打开终端","sessions.startFailed":"启动会话失败","sessions.stopFailed":"停止会话失败","sessions.deleteFailed":"删除会话失败","sessions.returnToList":"返回会话列表并使用连接按钮。","sessions.backToSessions":"返回会话","sessions.openSettings":"打开设置","sessions.activity":"活动","sessions.noActivity":"暂无活动记录","sessions.stopping":"停止中...","sessions.focusMode":"专注模式","sessions.exitFocusMode":"退出专注","sessions.closeTab":"关闭会话标签","sessions.sessionExitedTabClosed":"会话已退出,标签页已自动关闭","sessions.openSessionList":"打开会话列表","sessions.overflowTabs":"更多会话标签","sessions.gitChanges":"Git 变更","sessions.gitWorkingTree":"工作区变更","sessions.gitCommits":"最近提交","sessions.gitNoChanges":"工作区干净,没有未提交的变更","sessions.gitNotRepo":"当前项目不是 Git 仓库","sessions.gitLoadFailed":"Git 信息加载失败","sessions.gitRefresh":"刷新 Git 状态","sessions.providerQuota":"模型限额","sessions.providerQuotaEmpty":"尚未从模型中心应用供应商到当前 CLI","sessions.providerQuotaUnsupported":"该供应商暂不支持额度查询","sessions.providerQuotaRefresh":"刷新限额","sessions.providerQuotaLoadFailed":"限额信息加载失败","sessions.providerQuotaResetAt":"重置时间","sessions.providerQuotaCheckedAt":"更新于","sessions.providerQuotaUsed":"已用","sessions.providerQuotaRemaining":"剩余","sessions.gitDiffTitle":"变更内容","sessions.gitDiffUntracked":"新文件内容(未跟踪)","sessions.gitDiffLoading":"加载中…","sessions.gitDiffEmpty":"该文件当前没有差异内容","sessions.snapshotHistory":"快照历史","sessions.taskPacketHandoff":"任务包交接","sessions.taskPacketHandoffDescription":"此会话已关联 Project Manager 任务包。请手动复制需要的上下文到 CLI;ForgeBadger 不会自动写入终端。","sessions.taskPacketLoading":"正在检查关联任务包...","sessions.taskPacketLoadFailed":"无法加载关联任务包。","sessions.taskPacketWorkItem":"工作项","sessions.taskPacketRuntime":"运行时","sessions.taskPacketLinkedSession":"关联会话","sessions.taskPacketPrompt":"提示词","sessions.taskPacketAcceptanceCriteria":"验收标准","sessions.taskPacketExpectedVerification":"预期验证","sessions.taskPacketEvidenceRequirements":"证据要求","sessions.taskPacketNoItems":"暂无条目。","sessions.taskPacketOpenWorkItem":"打开工作项详情","sessions.taskPacketQueuePlanned":"待规划","sessions.taskPacketQueueRunning":"执行中","sessions.taskPacketQueueWaitingForReview":"待验收","sessions.taskPacketQueueBlocked":"阻塞","sessions.taskPacketQueueCompleted":"已完成","sessions.taskPacketQueueCancelled":"已取消","sessions.handoffExport":"Markdown 交接包","sessions.handoffExportDescription":"填写人工备注后生成可复制到 GitHub、PR 或飞书的 Markdown。生成前会阻断明显密钥、占位符和原始终端转储。","sessions.handoffOperatorNotes":"操作备注","sessions.handoffVerificationNotes":"验证备注","sessions.handoffOpenReviewItems":"待评审事项","sessions.handoffAuditBlocked":"交接包审计未通过","sessions.handoffAuditOperatorNotesRequired":"操作备注不能为空。","sessions.handoffAuditVerificationNotesRequired":"验证备注不能为空。","sessions.handoffAuditSecretLikeValue":"内容包含疑似密钥、token 或密码。","sessions.handoffAuditPlaceholderText":"内容包含 TODO/TBD/FIXME 等占位符。","sessions.handoffAuditRawTerminalDump":"内容疑似包含原始终端转储或 shell prompt。","sessions.handoffMarkdownReady":"Markdown 已生成,可复制使用。","sessions.handoffCopy":"复制 Markdown","sessions.handoffCopied":"已复制","sessions.handoffCopyFailed":"复制失败,请手动复制文本。","sessions.handoffDownload":"下载 Markdown","terminal.missingCredentials":"缺少终端凭据。请从控制台会话列表打开此会话。","terminal.connectionLost":"连接已断开","terminal.reconnect":"重新连接","terminal.reconnecting":"正在重新连接","terminal.backToBottom":"回到底部","terminal.historyOutput":"历史输出","terminal.historyRefresh":"刷新","terminal.historyEmpty":"暂无输出记录","terminal.historyLoadFailed":"历史输出加载失败","settings.title":"设置","settings.subtitle":"配置控制台偏好与安全默认项。","settings.language":"语言","settings.theme":"主题","settings.themeDescription":"选择界面的品牌强调色,立即生效并保存在本机。","settings.themeCyan":"蓝青","settings.themeOrange":"橙","settings.themeViolet":"紫","settings.themeEmerald":"翠绿","settings.themeBlue":"蓝","settings.themeRose":"玫红","settings.themeAmber":"琥珀","settings.languageDescription":"选择此浏览器中的控制台语言偏好。","settings.pet":"宠物选择","settings.petDescription":"选择控制台中的宠物,偏好保存在当前浏览器。","settings.petRobot":"机器人","settings.petRobotDescription":"会眨眼、走路和坐着打字的编程伙伴。","settings.petSelected":"已选用","settings.petSaved":"宠物选择已保存。","settings.petSaveFailed":"无法保存宠物选择,请检查浏览器是否允许本地存储。","settings.console":"控制台","settings.consoleDescription":"终端会话与仪表盘的本地工作流偏好。","settings.autoReconnect":"自动重连终端","settings.autoReconnectDescription":"WebSocket 短暂断开时保持浏览器自动重新连接。","settings.showStoppedSessions":"显示已停止会话","settings.showStoppedSessionsDescription":"在会话表格中保留已完成或已停止的会话。","settings.browserNotifications":"浏览器通知","settings.browserNotificationsDescription":"各个 Code CLI 发起权限申请、完成、中断或失败时显示系统通知。","settings.browserNotificationsDenied":"浏览器已拒绝通知权限,请在浏览器站点设置中重新开启。","settings.securityBaseline":"安全基线","settings.securityDescription":"本地 Gateway 当前启用的安全控制。","settings.diagnostics":"诊断导出","settings.diagnosticsDescription":"生成本地已脱敏诊断 JSON,便于试用反馈和问题复现。","settings.diagnosticsExport":"导出诊断 JSON","settings.diagnosticsExporting":"正在导出...","settings.diagnosticsExported":"诊断文件已下载,请在分享前再次检查是否包含敏感信息。","settings.diagnosticsExportFailed":"导出失败,请检查登录状态和 Gateway 日志。","settings.diagnosticsNotice":"诊断不会自动上传;分享前请勿包含 token、API Key 或无关项目秘密。","settings.jwtAuth":"JWT 认证","settings.tenantIsolation":"租户隔离","settings.apiKeyEncryption":"API Key 加密","settings.terminalPersistence":"终端持久化","settings.notDetected":"未检测","settings.enabled":"已启用","settings.secretsNotice":"密钥由 Gateway 加载,不会暴露在页面标记中。","settings.adapters":"Adapter 发现","settings.adaptersDescription":"检测本机 AI CLI 命令和终端运行时;只有命令与终端持久化运行时条件都满足时才能启动会话。","settings.claudeRoute":"Claude Code 协议路由","settings.claudeRouteDescription":"仅未配置 Anthropic 地址的 OpenAI 协议服务商需要路由,经本网关的 /v1/messages 转发,真实 API Key 不会写入 Claude 配置文件。已配置 Anthropic 地址的服务商直接接入 Claude Code。","settings.claudeRouteStateEnabled":"路由已开启","settings.claudeRouteStateDisabled":"路由已关闭","settings.claudeRouteAssignmentLabel":"当前路由服务商","settings.claudeRouteNoAssignment":"尚未应用","settings.claudeRouteGatewayDown":"Gateway 未运行时,Claude Code 无法访问路由模型。","settings.claudeRouteUpdateFailed":"更新路由状态失败","settings.claudeRouteLoadFailed":"加载路由状态失败","settings.mcp":"MCP 接入","settings.mcpDescription":"外部 AI 客户端(Claude Code、MCP Inspector 等)通过本网关的 /mcp 端点调用平台工具。","settings.mcpStateEnabled":"服务已启用","settings.mcpStateDisabled":"服务未启用","settings.mcpEndpoint":"端点","settings.mcpDisabledHint":"MCP 服务未启用。在 Gateway 的 .env 中设置以下变量后重启生效:","settings.mcpName":"名称","settings.mcpScopeRead":"只读","settings.mcpScopeOperate":"可操作","settings.mcpScopeOperateHelp":"「可操作」允许客户端执行写操作(以所有者身份内联批准);安全策略标记为高风险的操作仍会被拒绝。","settings.mcpCreate":"创建令牌","settings.mcpCopy":"复制","settings.mcpLoadFailed":"加载 MCP 状态失败,请重试。","settings.mcpEmpty":"尚未创建访问令牌。","settings.mcpLastUsed":"最近使用","settings.mcpNeverUsed":"从未使用","settings.mcpRevoked":"已吊销","settings.mcpRevoke":"吊销","settings.mcpRevokeConfirm":"确认吊销此令牌?持有它的客户端将立即失去访问权限。","settings.mcpCreateFailed":"创建令牌失败,请重试。","settings.mcpRevokeFailed":"吊销令牌失败,请重试。","settings.mcpClose":"关闭","settings.mcpCopied":"已复制到剪贴板","settings.mcpCopyFailed":"复制失败,请手动复制。","settings.mcpConnectHelp":"接入示例(将 <TOKEN> 替换为你创建的令牌):","settings.mcpConnectCli":"Claude Code CLI","settings.mcpConnectJson":"MCP 客户端 JSON 配置","settings.mcpPlaintextTitle":"访问令牌已创建","settings.mcpPlaintextWarning":"明文令牌只显示这一次,关闭后无法再次查看。请立即复制并妥善保存。","settings.mcpTokenPlaceholder":"<TOKEN>","settings.available":"命令可用","settings.missing":"命令缺失","settings.supported":"已支持","settings.prototype":"原型","settings.launchEnabled":"会话可启动","settings.launchDisabled":"会话不可启动","settings.discoveryLoading":"正在检测 Adapter...","settings.dependenciesLoading":"正在检测终端运行时...","settings.dependenciesLoadFailed":"终端运行时检测失败","settings.discoveryLoadFailed":"Adapter 发现加载失败","settings.discoveryLoadFailedDescription":"会话启动依赖本机 claude、opencode 或 codex 命令,以及终端持久化运行时条件。","settings.discoveryRetry":"重新检测","settings.discoveryRefresh":"重新检测","settings.discoveryRefreshing":"检测中...","settings.adapterReadinessNotice":"会话启动就绪度取决于本机 CLI 命令、launchEnabled 状态和终端持久化运行时条件。","settings.terminalRuntimeReadiness":"终端运行时","settings.launchReady":"可启动","settings.launchBlocked":"阻塞","settings.auditHistory":"审计历史","settings.auditDescription":"最近的模板恢复和配置同步记录。","settings.auditLoading":"正在加载审计记录...","settings.auditEmpty":"暂无审计记录。","settings.account.title":"账号与安全","settings.account.description":"修改登录密码,管理已登录的设备与会话。","settings.account.currentPassword":"当前密码","settings.account.newPassword":"新密码","settings.account.confirmPassword":"确认新密码","settings.account.passwordHint":"修改密码后会吊销所有已登录设备的会话,需要重新登录。","settings.account.passwordSubmit":"修改密码","settings.account.passwordChanging":"提交中...","settings.account.passwordChanged":"密码已修改,正在跳转到登录页...","settings.account.passwordChangeFailed":"修改密码失败,请稍后重试。","settings.account.passwordTooShort":"新密码至少需要 8 个字符。","settings.account.passwordMismatch":"两次输入的新密码不一致。","settings.account.devicesTitle":"我的设备","settings.account.devicesDescription":"当前账号的活跃登录会话。","settings.account.devicesLoading":"正在加载登录设备...","settings.account.devicesLoadFailed":"加载登录设备失败。","settings.account.devicesEmpty":"暂无活跃会话记录。","settings.account.revoke":"吊销","settings.account.revoking":"吊销中...","settings.account.revokeOthers":"退出其他设备","settings.account.currentDevice":"当前设备","settings.account.unknownDevice":"未知设备","settings.account.lastActive":"最近活跃","settings.account.signedInAt":"登录于"},"zh-TW":{"workspace.runtimeUpgrade":"目前 Session Server 無法確認 CLI 處理程序已退出,暫時無法啟動新的受管執行。請等待現有 CLI 全部正常結束後升級 Session Server,再安全啟動團隊執行。既有終端仍可連線,請勿強制終止其他成員的工作階段。","workspace.stopSourceCli":"交付前,請先停止來源專案的所有活動終端。","workspace.operationActive":"交付操作正在進行,暫時無法審核或合併。","workspace.operationInterrupted":"上次交付操作已中斷,確認結果後才能繼續。","workspace.operationRecoveryHint":"處理程序和 Git 狀態確認前,安全關閉或恢復也可能仍需等待。請重新整理查看進度。","workspace.policyChanged":"執行策略已變更,請載入最新版本後再儲存;其他表單草稿會保留。","workspace.reloadPolicy":"載入最新執行策略","workspace.historicalReceipt":"歷史驗證記錄","workspace.errorPlatform":"目前平台暫不支援受管驗證。請在 macOS 或 Linux 執行;Windows 處理程序生命週期支援尚待驗證。","workspace.errorUnresolved":"尚未確認舊驗證處理程序已停止。工作樹保持鎖定,請維運者完成處理程序清理後再恢復。","workspace.errorWait":"已有交付操作正在進行。請等待完成,重新整理後再重試。","workspace.errorRecovery":"上次交付操作需要恢復。請重新整理並檢查嘗試狀態,再建立恢復嘗試或安全關閉。","workspace.errorProcessRecovery":"驗證處理程序中斷後尚待清理。請專案所有者安全停止嘗試,再重新整理並恢復。","workspace.errorStale":"任務或程式碼已變更,請重新整理並檢查最新版本。","workspace.errorAccess":"目前專案角色無權執行此操作。請重新整理或聯絡所有者調整權限。","workspace.errorStopPending":"執行尚未停止。請等待後重試停止或歸檔操作。","workspace.errorMemberRole":"調整成員角色前,請先撤銷該成員正在執行的嘗試。","workspace.changeRole":"調整角色","workspace.unavailable":"工作樹無法存取。可恢復目錄、建立恢復嘗試或安全關閉;目前無法驗證或整合。","workspace.assignedReviewer":"任務已指定審核人,請由該審核人記錄驗收決定。","workspace.event.review_recorded":"記錄審核決定","workspace.event.project_archived":"歸檔專案","workspace.staleReceipt":"已過期,此記錄與當前任務或提交不符","workspace.archive":"歸檔專案","workspace.archiveHint":"停止專案執行並歸檔專案。保留交付歷史,專案將從有效工作區列表移除。必須先完成尚未結束的處理程序停止。","workspace.stopCliHint":"審核或合併前請先停止私有 CLI。","workspace.criteriaRequired":"請先為任務補充至少一條驗收條件,再進行驗證。","workspace.assignedElsewhere":"任務已分配給其他開發者。請先調整负責人,再準備你的開發嘗試。","workspace.event.policy_updated":"更新執行策略","workspace.event.execution_disabled":"已停用託管執行","workspace.event.member_added":"更新成員角色","workspace.event.member_revoked":"撤銷成員權限","workspace.event.task_created":"建立任務","workspace.event.task_updated":"更新任務","workspace.event.comment":"新增評論","workspace.event.workspace_prepared":"準備獨立開發嘗試","workspace.event.delivery_links_updated":"更新交付連結","workspace.event.workspace_closed":"關閉開發嘗試","workspace.event.delivery_integrated":"整合交付","workspace.event.delivery_reviewed":"審核交付","workspace.event.verification_completed":"完成驗證","workspace.title":"開發任務","workspace.subtitle":"個人與共享專案,從任務到驗證交付。","workspace.empty":"暫無可訪問專案。建立或匯入專案即可開始。","workspace.retry":"重新整理後重試","workspace.error":"操作失敗。請先重新整理確認最新狀態,再重試。","workspace.owner":"所有者","workspace.developer":"開發者","workspace.reviewer":"審核者","workspace.viewer":"查看者","workspace.tasks":"任務","workspace.newTask":"建立任務","workspace.noTasks":"暫無任務。先定義一個小改動和驗收條件。","workspace.taskTitle":"任務標題","workspace.criteria":"驗收條件(每行一條)","workspace.assignee":"负責人","workspace.reviewAssignee":"審核人","workspace.unassigned":"未分配","workspace.editTask":"編輯任務","workspace.members":"專案成員","workspace.email":"已注冊帳號電子郵件","workspace.role":"專案角色","workspace.memberHint":"開發者可建立任務和執行程式碼;審核者可評論和驗收;查看者僅可閱讀。終端保持私有。","workspace.revokeHint":"立即撤銷訪問權限並停止正在執行的處理程序。未完成的停止會保留記錄,允許重試。","workspace.revoke":"撤銷權限","workspace.revoked":"已撤銷訪問權限。待停止處理程序數:","workspace.noExecution":"本專案未啟用託管執行。","workspace.noVerification":"自動驗證已移除。請在任務中記錄測試結果;既有驗證記錄保留如下。","workspace.comments":"討論","workspace.noComments":"暫無評論。","workspace.comment":"新增評論","workspace.post":"發表評論","workspace.runs":"開發嘗試","workspace.noRuns":"暫無開發嘗試。擁有者或開發者可準備獨立工作樹和私有 CLI 會話。","workspace.prepare":"準備獨立開發嘗試","workspace.privateHint":"在私有 CLI 終端中開發,其他成員僅查看共享的任務材料。","workspace.terminal":"打開私有終端","workspace.refresh":"重新整理","workspace.changes":"變更檔案","workspace.noChanges":"暫無變更檔案。","workspace.commit":"當前提交","workspace.dirty":"存在未提交改動,請先提交再審核或合併。","workspace.clean":"工作樹乾淨","workspace.verification":"驗證記錄","workspace.noReceipts":"暫無驗證記錄。","workspace.unknownHint":"歷史執行結果未知,請檢查狀態並完成待處理的清理;系統不會重新執行。","workspace.preview":"預覽連結","workspace.pr":"Pull request 連結","workspace.linksHint":"連結由操作者提供,不代表 CI 已驗證。localhost 連結會在查看者自己的電腦打開。","workspace.invalidUrl":"請使用不包含帳號或密碼的 http(s) 連結。","workspace.review":"交付審核","workspace.reviewNote":"審核說明","workspace.accept":"接受此提交","workspace.requestChanges":"退回修改","workspace.noReviews":"暫無審核決定。","workspace.reviewHint":"驗收需要當前提交的通過記錄。團隊開發者不能驗收自己的開發嘗試。","workspace.integrate":"整合已接受的提交","workspace.integrateHint":"僅所有者可操作:請先停止私有 CLI。源工作區必須乾淨,且能從記錄的基線快進。","workspace.recover":"建立恢復嘗試","workspace.recoverHint":"從記錄的基線提交建立獨立嘗試,保留原工作樹及其改動。","workspace.close":"安全關閉嘗試","workspace.closeHint":"停止執行,僅移除乾淨的工作樹,不會強制刪除未提交改動。","workspace.handoff":"匯出交接文檔","workspace.handoffText":"交接文檔","workspace.activity":"專案動態","workspace.noActivity":"暫無專案動態。","workspace.readOnly":"你對此專案只有查看權限。","workspace.saved":"已儲存","workspace.busy":"處理中…","workspace.provisioning":"準備中","workspace.ready":"就緒","workspace.failed":"失敗","workspace.revoking":"撤權中","workspace.closed":"已關閉","workspace.integrated":"已整合","workspace.running":"執行中","workspace.passed":"通過","workspace.unknown":"未知","workspace.accepted":"已接受","workspace.changes_requested":"需修改","workspace.todo":"待處理","workspace.in_progress":"進行中","workspace.blocked":"受阻","workspace.ready_for_review":"待審核","workspace.done":"已完成","workspace.cancelled":"已取消","workspace.memberState":"成員狀態","workspace.active":"有效","workspace.revokedState":"已撤銷","workspace.confirm":"確認","workspace.cancel":"取消","membersHub.intro":"在此管理成員、邀請、角色及專案權限。","membersHub.accounts":"帳號管理","membersHub.collaboration":"成員與邀請","membersHub.projects":"專案權限","membersHub.administration":"歸屬與交接","membersHub.selectProject":"選擇專案,管理成員及其開發、審核權限。","membersHub.noProjects":"暫無可存取的專案。","membersHub.selectTeam":"成員分組","membersHub.createGroup":"新增成員分組","teams.revise":"修訂交接","teams.reviseHint":"請選擇目前有效的接任人並核對修訂計畫。離職成員仍保持撤權;儲存後須另行繼續停止及交接。","teams.confirmRevision":"確認修訂交接","teams.reloadImpact":"重新載入目前影響","teams.targetChanged":"接任人已不符合條件,請修訂計畫選擇目前有效成員後再繼續。","teams.switchAccount":"使用其他帳號登入","delivery.title":"PR 標題","delivery.headMismatch":"已推送的遠端 HEAD 與選定提交不一致,請推送正確分支並重新整理後重試。","delivery.baseMismatch":"遠端基礎分支已變更,請同步最新原始碼,再驗證及審核新的開發嘗試。","delivery.prRejected":"GitHub 拒絕了請求,請檢查儲存庫存取權、權杖權限及分支名稱後重試。","delivery.prMismatch":"無法驗證 GitHub 回應或符合的 PR,請先檢查儲存庫再發起請求。","delivery.currentReceipt":"建立 PR 前請驗證目前乾淨的提交。","delivery.git":"Git 交付","delivery.reconcile":"同步來源專案最新提交","delivery.reconcileHint":"在來源專案最新提交上建立新工作區,並合併本次選定提交。保留舊工作區及未提交檔案,新結果須重新驗證及審核。","delivery.reconcileConfirm":"停止舊執行並僅合併以下已提交變更,不複製未提交修改;若有衝突,請在新私人終端解決。","delivery.conflicts":"仍有合併衝突。請在新私人終端解決以下檔案並提交,再重新驗證及申請審核。","delivery.draftPr":"建立 GitHub 草稿 PR","delivery.prHint":"請先自行推送分支:遠端 HEAD 必須符合已驗證提交,遠端基礎分支須符合本次開發的基礎提交。此操作建立草稿 PR,不會推送程式碼。遠端 PR 分支後續可變,並非不可變驗收證據。","delivery.repository":"GitHub 儲存庫(owner/repo)","delivery.head":"已推送的開發分支","delivery.base":"遠端基礎分支","delivery.token":"GitHub 權杖(僅此次請求使用)","delivery.secure":"目前頁面與 Gateway 均須使用本機回環或 HTTPS 才能提交憑證,請使用文件中的 SSH 轉送設定。","delivery.confirmPr":"使用此精確已驗證提交,在指定的外部 GitHub 儲存庫建立草稿 PR。","delivery.prUncertain":"遠端回應不確定或仍在處理中。請重新輸入權杖,保持儲存庫及分支不變後重試查找原請求;不要另行手動建立重複 PR。","teams.title":"團隊","teams.empty":"暫無團隊。","teams.create":"建立團隊","teams.name":"團隊名稱","teams.owner":"擁有者","teams.admin":"團隊管理員","teams.member":"成員","teams.active":"有效","teams.leaving":"正在離職 · 權限已撤銷","teams.left":"已離職","teams.closing":"關閉中","teams.closed":"已關閉","teams.members":"團隊成員","teams.role":"團隊角色","teams.scope":"團隊管理權限不授予私人終端或個人專案存取權。開發及審核權限須另行分配。","teams.invitations":"團隊邀請","teams.invite":"建立邀請","teams.email":"電子郵件","teams.hours":"有效小時數","teams.pending":"待接受","teams.used":"已使用","teams.revoked":"已撤銷","teams.expired":"已過期","teams.expires":"到期時間","teams.revoke":"撤銷邀請","teams.copy":"複製連結","teams.copied":"已複製","teams.copyFailed":"複製失敗,請選取連結手動複製。","teams.oneTime":"請立即複製單次邀請連結,離開頁面後不會再次顯示。請自行透過可信管道傳送,平台不會寄送郵件。","teams.noInvites":"暫無邀請。","teams.projects":"團隊專案","teams.noProjects":"暫無歸屬團隊的專案。","teams.enroll":"將自己的專案納入團隊","teams.enrollHint":"此操作明確授予團隊管理員管理此專案的權限;開發、審核及私人執行仍分別授權。","teams.noCandidates":"沒有符合條件的個人專案。只有目前專案擁有者可納入尚未歸屬團隊的專案。","teams.select":"請選擇…","teams.openProject":"開啟專案及權限","teams.transferProject":"轉移專案擁有權","teams.newOwner":"新擁有者","teams.transfer":"轉移團隊擁有權","teams.transferHint":"所選有效成員將成為擁有者,你將保留團隊管理員角色。","teams.close":"關閉團隊","teams.closeHint":"關閉團隊前,請封存所有團隊專案並完成待處理的執行停止。","teams.confirm":"確認","teams.offboard":"離職與交接","teams.leave":"退出團隊","teams.impact":"離職影響","teams.handoffHint":"為每個受影響專案明確選擇擁有者及任務分配。保留既有工作樹、分支和交付作者,私人終端不會轉交。","teams.assignee":"接任執行者","teams.reviewer":"接任審核者","teams.unassign":"清空指派","teams.preview":"產生交接預覽","teams.planConfirm":"確認此交接計畫","teams.planNotice":"請核對以下選擇。確認後立即撤權,受影響執行全部停止後才完成交接。預覽 10 分鐘後到期。","teams.stopping":"權限已撤銷,執行停止與交接仍待完成。","teams.completed":"交接已完成。","teams.resume":"繼續待完成的交接","teams.pendingStops":"待停止數","teams.planId":"交接計畫 ID","teams.loadPlan":"載入交接計畫","teams.noImpact":"沒有受影響的專案,仍將撤銷團隊成員權限。","teams.join":"加入團隊","teams.joinIntro":"邀請僅適用於指定電子郵件,請確認團隊後接受。","teams.missingInvite":"目前分頁沒有邀請,請開啟團隊管理員提供的完整連結。","teams.signInJoin":"登入後接受邀請","teams.registerJoin":"建立帳戶並加入","teams.registrationOff":"新帳號註冊已關閉,既有符合帳號仍可登入加入。","teams.signedIn":"目前登入帳號","teams.forgetInvite":"清除此邀請","teams.accountInvites":"帳號註冊邀請","teams.accountScope":"系統管理員僅管理全站帳號,不會自動取得私人專案權限。團隊邀請請前往團隊頁面管理。","teams.accountInviteHint":"這些邀請碼用於邀請制註冊。一般註冊仍需本機復原金鑰;遠端團隊成員請使用團隊邀請。","teams.inviteCode":"註冊邀請碼(如需要)","teams.reset":"重設帳號密碼","teams.resetHint":"此操作使該帳號的登入階段與已驗證連線失效,但不會停止執行中的原生 CLI 程序。若要撤銷執行權限,請停用帳號或執行團隊離職。","teams.resetDone":"密碼已重設,帳號登入已撤銷。","teams.error":"請求失敗,請重試。","teams.retry":"重試","teams.stale":"資料或交接預覽已變更,請重新整理並核對新預覽。","teams.denied":"你已無權執行此操作。","teams.invalidInvite":"邀請無效、已到期、已撤銷或已使用,請聯絡管理員取得新連結。","teams.emailMismatch":"請使用邀請指定的電子郵件登入。","teams.ownerRequired":"退出前請先轉移團隊擁有權。","teams.externalMembers":"納入團隊前,請先處理專案中不屬於此團隊的成員。","teams.stopPending":"執行仍在運作或停止中,請等待後重試此操作。","teams.locked":"執行操作尚未確認結束,請保留計畫並由主機操作員處理後繼續。","teams.notFound":"團隊或帳號不存在,或已無法存取。","task.artifactStale":"關聯產物已不符合目前任務要求。請依新要求產生新的產物;不能重新整理歷史關聯來取代重新執行。","task.artifacts":"Copilot 產物摘要","task.artifactHint":"僅向專案成員分享檔案數量、檢查數量和產物摘要值,不分享私人提示詞、路徑、差異或輸出;關聯不會標記任務完成、驗證程式碼、驗收交付或合併變更。","task.shareSummary":"我同意向專案成員分享此產物摘要","task.linkArtifact":"關聯摘要","task.artifactCandidate":"我已完成的 Copilot 產物","task.noArtifacts":"尚無關聯的 Copilot 摘要。","task.noCandidates":"你的帳號在此專案中暫無可關聯的已結束 Copilot 產物。","task.snapshotCurrent":"符合當時的任務要求和產物摘要值,不代表程式碼驗證通過","task.snapshotStale":"歷史摘要:任務要求或產物已變更","task.filesChecks":"檔案數 / 通過檢查數 / 總檢查數","task.openPrivate":"查看我的私人 Copilot 任務","task.manualDone":"手動完成僅表示計畫狀態,不代表已驗證交付。驗證與審核回執在下方分別展示。","dashboard.activationDelivery":"驗證並交付首個改動","dashboard.activationDeliveryReady":"你已完成一次經過驗證、審核並安全整合的實際交付。","dashboard.activationDeliveryMissing":"在專案的開發任務中建立任務,完成程式碼提交、驗證、審核和整合。","dashboard.activationStartDelivery":"開始一次交付","dashboard.activationContinueDelivery":"繼續開發與交付","dashboard.activationOptional":"選用","auth.brandTagline":"本機優先的 AI 程式設計 IDE 控制平台","auth.languageLabel":"語言","auth.loginTitle":"登入","auth.loginDescription":"連線到本機 ForgeBadger 控制台。","auth.email":"電子郵件","auth.password":"密碼","auth.emailInvalid":"請輸入有效的電子郵件地址","auth.passwordRequired":"請輸入密碼","auth.forgotPassword":"忘記密碼?","auth.passwordResetSuccess":"密碼已重設,請使用新密碼登入。","auth.loginFailed":"登入失敗,請檢查電子郵件和密碼。","auth.signingIn":"登入中...","auth.signIn":"登入","auth.noAccount":"還沒有帳號?","auth.register":"註冊","auth.registerTitle":"建立帳號","auth.registerDescription":"使用本機復原密鑰建立 ForgeBadger 帳號。","auth.registrationInstructions":"從 ~/.forgebadger/account-recovery.key 複製密鑰。此密鑰只用於驗證本機擁有者,註冊成功後不會輪換。","auth.confirmPassword":"確認密碼","auth.registrationConfirmPasswordRequired":"請再次輸入密碼","auth.registrationFailed":"註冊失敗,請稍後再試。","auth.registrationInvalidCredentials":"復原密鑰無效。","auth.registrationUnavailable":"目前環境不允許註冊,或註冊已關閉。","auth.registrationRateLimited":"註冊嘗試次數過多,請稍後再試。","auth.emailAlreadyRegistered":"此電子郵件已註冊。","auth.creatingAccount":"正在建立帳號...","auth.createAccount":"建立帳號","auth.alreadyHaveAccount":"已有帳號?","auth.resetTitle":"重設密碼","auth.resetDescription":"使用本機復原密鑰找回 ForgeBadger 帳號。","auth.recoveryInstructions":"從 ~/.forgebadger/account-recovery.key 複製密鑰。若使用自訂狀態目錄或遷移安裝,請以 Gateway 啟動日誌中的路徑為準。","auth.recoveryKey":"復原密鑰","auth.recoveryKeyRequired":"請輸入復原密鑰","auth.newPassword":"新密碼","auth.passwordMinLength":"密碼至少需要 8 個字元","auth.confirmNewPassword":"確認新密碼","auth.confirmPasswordRequired":"請再次輸入新密碼","auth.passwordsDoNotMatch":"兩次輸入的密碼不一致","auth.resetFailed":"密碼重設失敗,請稍後再試。","auth.resetInvalidCredentials":"電子郵件或復原密鑰無效。","auth.resetLocalOnly":"密碼復原只能在執行 ForgeBadger 的本機進行。","auth.resetRateLimited":"嘗試次數過多,請稍後再試。","auth.resetUnavailable":"密碼復原暫時無法使用。","auth.resetting":"重設中...","auth.resetPassword":"重設密碼","auth.resetCompleteHint":"重設成功後復原密鑰會自動輪換,你需要使用新密碼正常登入。","auth.backToSignIn":"返回登入","common.actions":"操作","common.add":"新增","common.aiTool":"AI 工具","common.all":"全部","common.back":"返回","common.cancel":"取消","common.close":"關閉","common.connect":"連線","common.delete":"刪除","common.description":"描述","common.enabled":"啟用","common.disabled":"關閉","common.import":"匯入","common.loading":"載入中...","common.name":"名稱","common.open":"開啟","common.path":"路徑","common.project":"專案","common.save":"儲存","common.status":"狀態","common.stop":"停止","common.start":"啟動","common.visibility":"可見性","visibility.all":"全部可見性","visibility.filter":"可見性篩選","visibility.private":"私有","visibility.shared":"共享","visibility.admin":"管理員","visibility.privateDescription":"僅目前擁有者可管理和查看。","visibility.sharedDescription":"本地實例內所有使用者可查看,只有擁有者可修改或刪除。","visibility.adminDescription":"管理員可見;普通使用者只能看到自己擁有的管理員項。","nav.dashboard":"控制台","nav.projects":"專案","nav.sessions":"會話","nav.copilot":"Copilot","copilot.conversations":"對話","copilot.newConversation":"新對話","copilot.untitled":"未命名對話","copilot.noConversations":"尚無對話,點擊「新對話」開始。","copilot.empty":"和 Copilot 聊聊吧 —— 它可以查看你的專案、工作階段與組合進度,並協助你追蹤目標。","copilot.projectContext":"專案上下文","copilot.noProject":"未指定專案","copilot.projectLoadError":"專案清單載入失敗","copilot.placeholder":"輸入訊息……","copilot.send":"傳送","copilot.sendError":"傳送失敗,請檢查 Gateway 服務。","copilot.loadError":"載入失敗,請檢查 Gateway 服務。","copilot.approvalRequired":"需要核准","copilot.approve":"核准","copilot.reject":"拒絕","copilot.search":"搜尋對話…","copilot.rename":"重新命名","copilot.deleteConversation":"刪除對話","copilot.deleteConversationConfirm":"刪除此對話?無法復原。","copilot.running":"Copilot 正在思考…","copilot.stop":"停止","copilot.retry":"重試","copilot.scrollDown":"回到底部","copilot.toolCall":"呼叫工具","copilot.toolResult":"工具結果","copilot.welcomeTitle":"你好,我是 Copilot","copilot.welcomeSubtitle":"我可以檢視你的專案、工作階段與組合進度,協助你追蹤目標、執行核准後的操作。","copilot.suggestion1":"專案整體進展如何?","copilot.suggestion2":"目前有哪些工作階段在執行?","copilot.suggestion3":"幫我規劃下一個迭代","copilot.settings":"Copilot 設定","copilot.settingsBack":"返回對話","copilot.settingsDescription":"管理 Copilot 執行環境、記憶、自動化和擴充入口。","copilot.memoryTitle":"記憶","copilot.memoryDescription":"Copilot 記住的全域事實、偏好與決策。寫入由模型工具完成,這裡用於檢視與清理。","copilot.memoryEmpty":"尚無記憶條目。","copilot.overviewRuntime":"執行環境狀態","copilot.runtimeOnline":"線上","copilot.toolsEnabledCount":"{enabled}/{total} 已啟用","copilot.runtimeTitle":"執行環境","copilot.runtimeDescription":"Copilot 由 ForgeBadger Gateway 原生編排,不依賴外部 Harness 服務。","copilot.nativeRuntime":"Gateway 原生","copilot.followSystemDefault":"跟隨系統預設","copilot.edit":"編輯","copilot.editPrompt":"編輯訊息(刪除該訊息及之後所有內容並重新執行)","copilot.editSubmit":"儲存並重新執行","copilot.editCancel":"取消","copilot.editFailed":"編輯失敗,請重試。","copilot.thinking":"思考過程","copilot.thinkingCount":"思考過程 · {chars} 字","copilot.capabilities":"可用工具","copilot.capabilitiesEmpty":"暫無可用工具","copilot.capabilitiesLoadError":"工具列表載入失敗。","copilot.capabilitiesToggleError":"工具開關更新失敗,請重試。","copilot.playbooksTitle":"Copilot 操作手冊","copilot.playbooksEmpty":"暫無操作手冊","copilot.playbooksManage":"管理操作手冊","copilot.playbooksDescription":"操作手冊指導 Copilot 組合平台工具,擁有獨立開關。CLI Skills 在 Skills 頁單獨安裝和管理。","copilot.playbooksEnabledCount":"{enabled}/{total} 目前可用","copilot.playbooksLoadError":"操作手冊載入失敗,請重試。","copilot.playbooksToggleError":"操作手冊開關更新失敗,請重試。","copilot.playbooksSaveError":"操作手冊儲存失敗。請重試;如版本已更新,請重新開啟編輯器核對後儲存。","copilot.playbookDisabled":"已停用","copilot.playbookReviewRequired":"自訂正文已保留,需核對目前版本後儲存才能使用。","copilot.playbookRequiredTools":"依賴工具","copilot.playbookEdit":"編輯 / 核對正文","copilot.playbookContent":"操作手冊正文","copilot.playbookReviewHelp":"儲存表示已核對目前版本和依賴工具。修改僅作用於 Copilot;專案授權對話只使用未經修改的內建手冊。","copilot.playbookSave":"儲存並確認版本","copilot.playbooksRetry":"重試","copilot.toolUnavailable":"目前不可用","copilot.toolAuthorization":"有效授權或逐項審核","copilot.toolDesc.list_projects":"列出目前使用者的專案(名稱、路徑、狀態與 AI 工具)。","copilot.toolDesc.get_project":"依 id 取得單一專案的完整詳情。","copilot.toolDesc.create_project":"建立專案,需要有效授權或逐項審核。","copilot.toolDesc.list_sessions":"列出使用者的 AI CLI 工作階段及狀態、介接器與所屬專案。","copilot.toolDesc.get_session":"依 id 取得單一工作階段的狀態與詳情。","copilot.toolDesc.list_work_items":"列出專案的開發工作項目(組合任務)。","copilot.toolDesc.get_work_item":"依 id 取得組合工作項目詳情。","copilot.toolDesc.search_memory":"以關鍵字搜尋 Copilot 的分區記憶(全域、專案或工作階段)。","copilot.toolDesc.list_memory":"列出某個範圍內的 Copilot 記憶條目。","copilot.toolDesc.get_usage_summary":"取得用量統計:工作階段時長與估算費用(依介接器/專案/模型,全量),以及 token 消耗彙總;可選 days 限定 token 統計為最近 N 天。","copilot.toolDesc.get_session_output":"讀取存活 CLI 工作階段的最近終端輸出,用於檢查進展或完成情況。","copilot.toolDesc.list_playbooks":"列出目前可用的 Copilot Skills(內建 Playbook 與匯入檔案包)、穩定 ID 和目前修訂,受開關、相容性及工具依賴約束。","copilot.toolDesc.load_playbook":"依穩定 ID 載入 Copilot Skill 的指引、修訂和資源路徑。讀取 Skill 不會授予工具執行權限。","copilot.toolDesc.read_skill_resource":"依 Skill 和修訂 ID 讀取檔案包內的 UTF-8 參考檔案;不存取主機檔案系統,不執行指令碼。","copilot.toolDesc.dispatch_task_to_session":"目前不可用:CLI 介接器僅支援手動執行,無法透過開啟工具或審核解除此限制。","copilot.toolDesc.pm_list_task_packets":"列出某專案的 PM 任務包——開發佇列,含每項的提示詞、驗收標準、驗證預期、關聯工作階段與佇列狀態。","copilot.toolDesc.pm_get_task_packet":"依工作項目 id 取得單個 PM 任務包:完整提示詞、驗收標準、驗證預期、證據要求、執行時介接器與關聯工作階段狀態。","copilot.toolDesc.pm_prepare_task_packet":"準備任務包並關聯 CLI 工作階段,不啟動 CLI 或提交提示詞;由使用者在終端手動執行。需要有效授權或逐項審核。","copilot.toolDesc.write_memory":"寫入持久記憶條目(事實、偏好、決策或專案筆記)。","copilot.currentModel":"目前模型","copilot.toolsSearch":"搜尋工具…","copilot.toolsSearchEmpty":"沒有相符的工具。","copilot.toolGroupOperate":"操作類","copilot.toolGroupRead":"唯讀","copilot.toggleConversations":"切換對話列表","copilot.robotExpand":"展開全螢幕","copilot.robotSuggestion1":"我的專案狀態如何?","copilot.robotSuggestion2":"列出進行中的工作階段","copilot.automationsTitle":"定時自動化","copilot.automationsDescription":"建立按計畫自動執行的 Copilot 任務,結果投遞到工作階段與通知。","copilot.automationsManage":"管理自動化","copilot.automationsList":"自動化","copilot.automationsCreate":"新建","copilot.automationsPrompt":"任務提示詞","copilot.automationsSchedule":"排程類型","copilot.automationsExpression":"運算式","copilot.automationsSave":"建立","copilot.automationsCreateFailed":"建立失敗,請檢查輸入。","copilot.automationsEmpty":"尚無自動化,點擊「新建」建立。","copilot.automationsDeleteConfirm":"刪除此自動化?無法復原。","copilot.automationsRunNow":"立即執行","copilot.automationsPause":"暫停","copilot.automationsEnable":"啟用","copilot.automationsSuggestions":"推薦自動化","copilot.automationsAccept":"接受","copilot.automationsDismiss":"忽略","nav.skills":"Skill","nav.templates":"範本","nav.models":"模型服務","nav.usage":"使用統計","nav.members":"成員","nav.history":"歷史","nav.settings":"設定","nav.notifications":"通知","nav.guest":"訪客","nav.logout":"登出","common.edit":"編輯","common.saving":"儲存中...","nav.groupWorkspace":"工作區","nav.groupResources":"資源","nav.groupSystem":"系統","nav.collapseSidebar":"收合側邊欄","nav.expandSidebar":"展開側邊欄","cliConfig.configRoot":"設定目錄","cliConfig.mainConfigFile":"主設定檔","cliConfig.loadFailed":"載入 CLI 設定失敗","cliConfig.providers":"模型服務商","cliConfig.hasKey":"已設定","cliConfig.noKey":"未設定","cliConfig.defaultModel":"預設模型","cliConfig.commonFields":"常用欄位","cliConfig.fieldNotSet":"未設定","cliConfig.rawEditor":"全域設定編輯","cliConfig.fileMissing":"不存在","cliConfig.saved":"已儲存","cliConfig.saveFailed":"儲存失敗","cliConfig.editRawFile":"編輯","cliConfig.rawFileContentUnavailable":"無法讀取檔案內容;仍可點擊編輯直接寫入新內容。","cliConfig.loadFieldValuesFailed":"讀取設定值失敗","cliConfig.configMetadata":"設定中繼資料","commandPalette.title":"命令面板","commandPalette.description":"快速跳轉頁面或執行常用控制台動作。","commandPalette.placeholder":"搜尋頁面或動作","commandPalette.noResults":"沒有符合命令","commandPalette.navigation":"導覽","commandPalette.actions":"動作","commandPalette.showSidebar":"顯示側邊欄","commandPalette.hideSidebar":"隱藏側邊欄","dashboard.title":"控制台","dashboard.subtitle":"專案、會話與本機 AI CLI 執行環境一覽。","dashboard.viewAll":"查看全部","dashboard.noSessions":"尚無會話。","dashboard.recentSessions":"最近會話","dashboard.systemStatus":"系統狀態","dashboard.adaptersHealth":"AI CLI","dashboard.adaptersHealthReady":"{count} 個本機 CLI 可用","dashboard.statusLoading":"偵測中…","dashboard.runningNow":"{count} 個執行中","dashboard.emptySessionsDescription":"從專案建立第一條會話,在瀏覽器中直接驅動本機 AI CLI。","dashboard.dependenciesHealth":"依賴檢查","dashboard.dependenciesHealthDescription":"本機 AI CLI 與終端依賴狀態。","dashboard.dependenciesHealthLoading":"正在讀取本機 AI CLI 與終端依賴狀態。","dashboard.dependenciesHealthUnavailable":"無法讀取依賴狀態,請開啟設定重新偵測。","dashboard.runtimeRemediation.openSettings":"開啟設定","dashboard.terminalRuntime.ready":"內建終端服務可用,可在 Gateway 重啟後重新連線會話。","dashboard.terminalRuntime.unavailable":"內建終端服務無法使用,請查看 Gateway 日誌並重新偵測。","dashboard.firstRunTitle":"開始首次開發前的準備","dashboard.firstRunDescription":"確認終端執行環境、CLI 適配器與專案就緒後,即可在專案的開發任務中開始第一次交付。","dashboard.firstRunDependencies":"依賴","dashboard.firstRunProject":"專案","dashboard.firstRunSession":"會話","dashboard.firstRunReady":"已就緒","dashboard.firstRunBlocked":"需處理","dashboard.firstRunProjectReady":"已建立專案,可進入專案詳情啟動會話。","dashboard.firstRunProjectMissing":"先建立或匯入一個本機專案。","dashboard.firstRunSessionReady":"已有會話記錄,可繼續連線或啟動。","dashboard.firstRunSessionMissing":"依賴和專案就緒後,從專案詳情建立第一條會話。","dashboard.firstRunOpenProject":"開啟專案","dashboard.activationRuntime":"終端執行環境","dashboard.activationAdapter":"CLI 適配器","dashboard.activationProject":"專案","dashboard.activationSession":"終端準備","dashboard.activationRuntimeLoading":"正在偵測終端持久化執行環境。","dashboard.activationRuntimeUnavailable":"無法讀取終端執行環境狀態,請開啟設定重新偵測。","dashboard.activationAdapterLoading":"正在偵測本機 Claude Code、OpenCode、Codex CLI 和 Kimi Code。","dashboard.activationAdapterUnavailable":"無法讀取 CLI 適配器狀態,請開啟設定重新偵測。","dashboard.activationAdapterReady":"至少一個本機 AI CLI 可用於啟動會話。","dashboard.activationAdapterMissing":"未發現可啟動的本機 AI CLI,請安裝或啟用 Claude Code、OpenCode、Codex 或 Kimi Code。","dashboard.activationOpenSettings":"開啟設定","dashboard.activationDismiss":"不再顯示","dashboard.activationStartSession":"啟動第一條會話","dashboard.activationContinueSession":"繼續會話","runtimeSetup.readyTitle":"終端執行環境已就緒","runtimeSetup.readyDescription":"內建終端服務獨立託管 CLI 程序,瀏覽器斷線或 Gateway 重啟後可重新連線。","runtimeSetup.unavailableTitle":"無法讀取終端執行環境狀態","runtimeSetup.unavailableDescription":"請檢查 Gateway 日誌與內建終端服務狀態,然後重新偵測;終端服務退出後原 CLI 程序無法還原。","dashboard.configHealth":"專案設定","dashboard.configHealthDescription":"專案與範本可用於產生設定。","dashboard.modelHealth":"模型服務","dashboard.modelHealthDescription":"至少一個模型可供會話選擇。","dashboard.credentialHealth":"憑據","dashboard.credentialHealthDescription":"已儲存可加密注入的 API Key。","dashboard.sessionHealth":"會話","dashboard.sessionHealthDescription":"至少已有一個 CLI 會話記錄。","dashboard.skillHealth":"Skill","dashboard.skillHealthDescription":"已設定可啟用的 Skill。","notifications.title":"通知","notifications.subtitle":"查看各個 Code CLI 的權限、完成、中斷、失敗和會話通知。","notifications.emptyTitle":"暫無通知","notifications.emptyDescription":"會話狀態變化和各個 Code CLI 的關鍵事件會顯示在這裡。","notifications.unread":"未讀","notifications.markAllRead":"全部標記已讀","notifications.viewAll":"查看全部","notifications.clearAll":"清空","notifications.sessionCreated":"會話已建立","notifications.sessionStatusChanged":"會話狀態變化","notifications.sessionDeleted":"會話已刪除","notifications.claudeNotification":"Claude Code 通知","notifications.claudePermissionRequest":"Claude Code 權限申請","notifications.opencodePermissionRequest":"OpenCode 權限申請","notifications.codexPermissionRequest":"Codex 權限申請","notifications.kimiPermissionRequest":"Kimi Code 權限申請","notifications.piPermissionRequest":"PI 權限申請","notifications.cliNotification":"Code CLI 通知","notifications.taskCompleted":"任務已完成","notifications.taskInterrupted":"任務已中斷","notifications.taskFailed":"任務失敗","notifications.copilotAutomationCompleted":"Copilot 自動化已完成","notifications.sessionEnded":"會話已結束","notifications.projectContext":"專案","notifications.sessionContext":"會話","notifications.cliContext":"CLI","notifications.openSession":"開啟會話","notifications.claudePermissionDenied":"Claude Code 權限被拒絕","notifications.opencodePermissionDenied":"OpenCode 權限被拒絕","notifications.codexPermissionDenied":"Codex 權限被拒絕","notifications.kimiPermissionDenied":"Kimi Code 權限被拒絕","notifications.piPermissionDenied":"PI 權限被拒絕","notifications.applyProviderSucceeded":"服務商套用成功","notifications.applyProviderFailed":"服務商套用失敗","notifications.modelSyncSucceeded":"模型同步成功","notifications.modelSyncFailed":"模型同步失敗","notifications.tabAll":"全部","notifications.tabSessionEvents":"會話事件","notifications.tabAppActions":"應用操作","notifications.viewDetails":"查看詳情","notifications.noUnread":"暫無未讀通知","snapshots.title":"歷史快照","snapshots.subtitle":"查看 Gateway 保存的會話快照和結構化歷史,不保存終端滾屏內容。","snapshots.loading":"正在載入歷史快照...","snapshots.emptyTitle":"暫無快照","snapshots.emptyDescription":"會話啟動後會產生快照記錄。","snapshots.session":"會話","snapshots.runtimeSessionName":"終端持久化會話","snapshots.model":"模型","snapshots.agent":"Agent","snapshots.configVersion":"設定版本","snapshots.createdAt":"建立時間","snapshots.filters":"篩選","snapshots.allProjects":"全部專案","snapshots.allSessions":"全部會話","snapshots.viewSession":"查看會話","snapshots.viewProject":"查看專案","snapshots.restore":"還原快照","snapshots.restoring":"還原中...","snapshots.restoreConfirm":"將根據此快照還原會話;如果原終端持久化會話不存在,會用快照中繼資料重新建立。確定繼續?","snapshots.noTerminalHistory":"快照只保存會話中繼資料;terminal scrollback 仍保留在平台終端持久化執行環境中。","usage.title":"使用統計","usage.subtitle":"從各 AI CLI 的本地資料採集的真實 token 用量,不含費用估算。","usage.loading":"正在載入使用統計...","usage.emptyTitle":"暫無使用資料","usage.emptyDescription":"點擊「同步」從 Claude Code 與 OpenCode 採集 token 用量。","usage.totalTokens":"Token 總數","usage.totalInput":"輸入","usage.totalOutput":"輸出","usage.totalCacheRead":"快取讀取","usage.totalCacheWrite":"快取寫入","usage.totalReasoning":"推理","usage.cacheHitRate":"命中快取率","usage.cacheHitRateHint":"快取讀取 ÷ (未快取輸入 + 快取寫入 + 快取讀取)","usage.requests":"請求數","usage.sync":"同步","usage.syncing":"同步中...","usage.syncDone":"已同步","usage.syncFailed":"同步失敗","usage.byAdapter":"按 Adapter","usage.byProject":"按專案","usage.byModel":"按模型","usage.group":"分組","usage.input":"輸入","usage.output":"輸出","usage.cacheRead":"快取讀","usage.cacheWrite":"快取寫","usage.reasoning":"推理","usage.total":"總計","usage.dailyTrend":"每日 Token 趨勢","usage.last30Days":"最近 30 天","usage.activityTitle":"專案活躍度(按日)","usage.unassigned":"未指定","members.title":"成員","members.subtitle":"管理本機 ForgeBadger 實例中的使用者角色和狀態。","members.loading":"正在載入成員...","members.emptyTitle":"尚無成員","members.emptyDescription":"註冊使用者會顯示在這裡。","members.role":"角色","members.status":"狀態","members.admin":"管理員","members.user":"使用者","members.active":"啟用","members.disabled":"停用","members.save":"儲存","members.saving":"儲存中...","members.selfManaged":"目前帳號","members.updateFailed":"更新成員失敗","members.accessDeniedTitle":"需要管理員權限","members.accessDeniedDescription":"只有管理員可以查看和修改成員角色。","skills.title":"Skill","skills.subtitle":"為你的 Agent 啟用或停用 Skill。","skills.install":"安裝 Skill","skills.installSubtitle":"從本地、ClawHub 或 GitHub 來源安裝 Skill。","skills.loading":"正在載入 Skill...","skills.emptyTitle":"尚無 Skill","skills.emptyDescription":"新增後 Skill 會顯示在這裡。","skills.source":"來源","skills.sourceAll":"全部來源","skills.sourceFilter":"來源篩選","skills.sourceCatalog":"來源目錄","skills.selectSource":"選擇來源","skills.installSource":"安裝來源","skills.installSkill":"安裝 Skill","skills.installing":"安裝中...","skills.installSuccess":"Skill 已安裝","skills.installFailed":"安裝 Skill 失敗","skills.sourceLocal":"本地","skills.sourceClawHub":"ClawHub","skills.sourceGitHub":"GitHub","skills.enabled":"啟用","skills.enabledForProject":"專案啟用","skills.version":"版本","skills.content":"內容","skills.createSkill":"建立 Skill","skills.editSkill":"編輯 Skill","skills.saveSkill":"儲存 Skill","skills.saving":"儲存中...","skills.required":"Skill 名稱與內容不可為空","skills.saveFailed":"儲存 Skill 失敗","skills.deleteConfirm":"確定刪除此 Skill?","skills.preview":"預覽","skills.previewEmpty":"暫無可預覽內容","skills.remoteUrl":"遠端 Skill URL","skills.previewSource":"預覽遠端 Skill","skills.previewingSource":"預覽中...","skills.remotePreviewTitle":"遠端預覽","skills.remotePreviewProvenance":"來源","skills.installedDisabledHint":"遠端與目錄安裝的 Skill 預設停用,需要安裝後明確啟用。","skills.quickCreateTemplates":"快速建立模板","skills.templatesDescription":"選擇模板會預填名稱、描述、版本與 SKILL.md 內容,儲存前仍可編輯。","skills.applyTemplate":"套用模板","skills.syncLocal":"重新掃描本地 Skill","skills.discoveredLocal":"發現本地 Skill","skills.discoveryRoots":"掃描目錄","skills.discoveryHint":"本地 Skill 預設只掃描 Claude Code 與 Agents 的 skills 目錄;如需覆蓋目錄,請檢查 Gateway 啟動環境中的 FORGEBADGER_SKILL_DIRS、CLAUDE_CONFIG_DIR 與 AGENTS_HOME。","skills.resourcePackage":"UTF-8 資源包","skills.markdownOnly":"僅 Markdown(不含配套資源)","skills.packagesRejected":"以下資源包因包含不支援、超限或不安全的資源而被略過。","skills.localSyncSummary":"新增 / 更新 / 刪除 / 略過","skills.catalogInstall":"從目錄安裝 Skill","skills.catalogInstallDescription":"將遠端目錄中的 Skill 包安裝為目前使用者的 Skill。","skills.catalogEmpty":"暫無可安裝的 Skill 目錄項。請先刷新 Skill 目錄。","skills.installCatalogItem":"安裝目錄 Skill","models.title":"模型服務","models.subtitle":"管理 AI 模型與供應商。","models.providerCenterSubtitle":"管理 Claude Code / OpenCode / Codex / Kimi Code 的服務商、API Key、模型與 CLI 設定套用。","models.apiFormatAnthropic":"Anthropic","models.apiFormatOpenai":"OpenAI","models.apiFormatOpenaiCompatible":"OpenAI 相容","models.apiFormatGoogle":"Google","models.apiFormatBedrock":"AWS Bedrock","models.apiFormatLocal":"本地","models.apiFormatHintAnthropic":"Anthropic 原生協議(Claude 模型)","models.apiFormatHintOpenai":"OpenAI 官方協議","models.apiFormatHintOpenaiCompatible":"相容 OpenAI 協議的第三方端點","models.apiFormatHintGoogle":"Google Gemini 協議","models.apiFormatHintBedrock":"AWS Bedrock 託管模型","models.apiFormatHintLocal":"本地推理端點","models.authTypeApiKey":"API Key","models.authTypeBearerToken":"Bearer Token","models.authTypeOauth":"OAuth","models.authTypeNone":"無需認證","models.authTypeHintApiKey":"使用服務商 API Key 認證","models.authTypeHintBearerToken":"使用 Bearer Token 認證","models.authTypeHintOauth":"OAuth 授權","models.authTypeHintNone":"無需憑據(本地或內網端點)","models.customCapabilitiesPlaceholder":"其他能力,以逗號分隔","models.syncRequiresCredential":"需要先有可用憑據","models.diagnosticsTab":"診斷","models.cliStatusTitle":"CLI 生效狀態","models.cliStatusDescription":"各 CLI 全域設定目前生效的服務商與模型。","models.cliStatusActiveHere":"生效中","models.cliStatusNoModel":"未記錄模型","models.cliStatusNotConfigured":"未設定","models.cliStatusStale":"設定已被外部修改","models.cliStatusApply":"套用","models.cliStatusViewConfig":"檢視設定","models.cliStatusApplyUnsupported":"目前服務商不支援該 CLI","models.cliStatusCliMissing":"未安裝該 CLI","models.cliStatusCheckFailed":"檢測失敗","models.cliStatusLoadFailed":"無法讀取 CLI 生效狀態。","models.applyAdvancedOptions":"進階選項","models.applyChangeSummary":"檢視變更摘要","models.balanceLoading":"正在查詢餘額…","models.balanceNotQueried":"尚未查詢餘額","models.cliConfigSection":"CLI 設定檔","models.cliConfigSectionDescription":"查看各 CLI 的全域設定檔狀態,編輯原始內容。","models.cliConfigAdminOnly":"設定檔編輯需要管理員權限。","models.providers":"供應商","models.providersDescription":"已設定的供應商 Profile。","models.addProvider":"新增服務商","models.addProviderDescription":"從預設快速填入或手動填寫供應商連線資訊;儲存 API Key 後會立即從供應商同步可用模型。","models.editProvider":"編輯服務商","models.editProviderDescription":"修改供應商連線資訊與支援的 CLI;模型與憑證請在下方分頁管理。","models.providerKeyLocked":"建立後不可修改。","models.adapterNotSupported":"該供應商不支援","models.presets":"預設供應商","models.presetsDescription":"點擊預設自動填入連線資訊;預設只包含端點和驗證方式,模型列表一律從供應商即時同步。","models.searchProviderPlaceholder":"搜尋預設供應商","models.noPresetMatches":"沒有符合的預設,可直接在下方手動填寫。","models.authType":"驗證方式","models.openaiBaseUrl":"OpenAI 相容地址","models.anthropicBaseUrl":"Anthropic 地址","models.baseUrlRequired":"至少填寫一個 Base URL(OpenAI 相容地址或 Anthropic 地址)。","models.allowPlaintextHttp":"信任明文 HTTP 端點(該地址使用 http://)","models.allowPlaintextHttpHint":"開啟後允許向該 http:// 地址傳送憑證。所有地址/網域名稱安全校驗仍然生效,僅放協定限制。","models.supportedAdapters":"支援的 CLI","models.setupCredentialOptionalHint":"選填。填寫後儲存憑據並立即同步模型;也可以稍後在供應商詳情中補充。","models.modelSyncFailed":"模型同步失敗","models.emptyWorkspaceTitle":"尚未設定供應商","models.searchConfiguredProviders":"搜尋已設定供應商","models.catalogMatches":"符合","models.emptyProviders":"尚無供應商,請手動新增一個供應商。","models.providerProfile":"Provider Profile","models.providerProfileDescription":"Provider 是模型和憑據的唯一設定源。","models.providerCreated":"供應商已建立","models.providerDeleted":"供應商已刪除","models.deleteProviderTitle":"刪除供應商","models.deleteProviderWarning":"刪除後,該供應商的模型與 API Key 也將一併移除。","models.deleteModelTitle":"刪除模型","models.deleteModelWarning":"刪除後該模型將不再可用,正在使用它的會話和代理需要先切換模型。","models.deleteCredentialTitle":"刪除 API Key","models.deleting":"刪除中...","models.modelUnit":"個模型","models.providerKey":"供應商 Key","models.apiFormat":"API 格式","models.applyTargets":"支援目標","models.applyScope":"套用到","models.region":"區域","models.productType":"產品類型","models.productTypePaygApi":"按量 API","models.productTypeCodingPlan":"Coding Plan","models.productTypeTokenPlan":"Token Plan","models.productTypeSubscription":"訂閱","models.productTypeLocal":"本機","models.noProviderSelected":"請選擇一個供應商。","models.credentials":"API Key","models.credentialsDescription":"只需要填寫供應商 API Key;密鑰加密保存,頁面和 preview 不回顯明文。","models.credentialLabel":"API Key 名稱","models.defaultCredentialLabel":"預設 API Key","models.apiKeyPlaceholder":"貼上供應商 API Key","models.saveAndSyncModels":"儲存並同步模型","models.noCredentialRequired":"此供應商不需要 API Key。","models.saveCredential":"儲存憑據","models.credentialSaved":"憑據已儲存","models.credentialRotated":"憑據已輪換","models.credentialDeleted":"憑據已刪除","models.credentialRevoked":"憑據已撤銷","models.credentialRequired":"請選擇憑據","models.rotateSelectedCredential":"輪換選中憑據","models.deleteCredential":"刪除憑據","models.deleteCredentialConfirm":"確定刪除此憑據?","models.emptyCredentials":"尚無憑據,可繼續使用主機環境變數。","models.unnamedCredential":"未命名憑據","models.modelsWorkspace":"模型","models.modelsWorkspaceDescription":"儲存憑據後可從供應商同步模型;手動模型編輯僅用於進階調整。","models.modelProfileSaved":"模型 Profile 已儲存","models.modelRequired":"請選擇模型","models.newModel":"新模型","models.syncProviderModels":"同步模型","models.syncProviderModelsDescription":"從供應商的真實介面刷新模型列表。","models.checkBalance":"查詢餘額","models.balanceNotSupported":"該供應商不支援餘額查詢","models.balanceCheckFailed":"餘額查詢失敗","models.balanceEmpty":"未回傳餘額資料","models.balanceResetsAt":"重置時間","models.balanceUnavailable":"暫不可用","models.modelSyncComplete":"模型已從供應商同步","models.modelSyncNoChanges":"模型已是最新","models.emptyModelsForProvider":"此供應商尚無模型。儲存憑據後同步模型,或手動新增模型 ID。","models.noModelsAvailable":"暫無可用模型","models.capabilities":"能力標籤","models.contextWindow":"上下文長度","models.contextWindowPlaceholder":"例如 131072","models.contextWindowHint":"Kimi Code 要求自訂模型必須填寫上下文長度(tokens)。留空則套用時預設使用 256k。","models.projectPath":"專案路徑","models.applyConfig":"套用設定","models.applyToCli":"套用到 CLI","models.applyToCliDescription":"把目前供應商、模型和憑據寫入所選 CLI 的原生全域設定檔。","models.roleMapping":"模型角色對應","models.roleMappingDescription":"未設定的角色跟隨主模型;Sonnet/Opus/Haiku 對應 Claude Code 的別名固定,Fable/Subagent 為可選進階槽位。","models.followPrimaryModel":"跟隨主模型","models.reasoningEffort":"推理強度(model_reasoning_effort)","models.reasoningEffortDefault":"預設(不寫入)","models.opencodeApplyHint":"將把該服務商及全部已同步模型加入 OpenCode 設定;目前模型在 OpenCode 內選擇。","models.applyToCliDefaultModel":"預設模型","models.applyToCliPiHint":"該服務商的全部啟用模型都會寫入 models.json;此處僅選擇 pi 的啟動預設模型,之後可在 pi 內用 /model 切換。","models.applyToCliNoCredential":"不注入憑據(使用主機環境)","models.applyToCliSuccess":"已套用到 {targetPath}","models.applyToCliRollbackHint":"寫入前已建立加密備份,可透過 CLI 設定介面回復。","models.applyToCliFailed":"套用失敗","models.applyPreviewFailed":"預覽產生失敗","models.applyTargetPath":"目標檔案","models.applyingToCli":"套用中…","models.claudeRouteBanner":"此供應商僅設定 OpenAI 協定位址,未設定 Anthropic 位址;需開啟閘道路由後套用至 Claude Code。","models.claudeRouteBannerDescription":"開啟後 Claude Code 將連接 Gateway 的本機端點,真實 API Key 不會寫入 Claude 設定檔。","models.claudeRouteEnableAndApply":"開啟路由並套用","models.claudeRouteApply":"套用(經閘道路由)","models.claudeRouteEnabledHint":"閘道路由已開啟,Claude Code 將連接 {gatewayUrl}","models.claudeRouteUnsupported":"此協定格式暫不支援 Claude Code 閘道路由","models.claudeRouteBadge":"Claude 經閘道路由","models.providerRequired":"請選擇供應商","models.providerApplyDisabled":"Provider apply disabled","models.providerApplyEnabled":"Provider apply enabled","models.sdkInstalled":"已安裝","models.sdkMissing":"未安裝","models.loading":"正在載入模型...","models.emptyTitle":"尚無模型","models.emptyDescription":"設定後模型會顯示在這裡。","models.provider":"供應商","models.default":"預設","models.catalog":"模型目錄","models.catalogDescription":"維護 Provider、API Key、模型和 CLI 設定套用。","models.advancedModelEditor":"進階:手動編輯模型","models.providerGroup":"供應商分組","models.modelId":"模型 ID","models.endpoint":"端點","models.addModel":"新增模型","models.saveModel":"儲存模型","models.saving":"儲存中...","models.created":"模型已新增","models.updated":"模型已更新","models.defaultUpdated":"預設模型已更新","models.deleted":"模型已刪除","models.apiKeys":"API Key","models.apiKeysDescription":"密鑰只提交給 Gateway 加密保存。","models.apiKey":"API Key","models.addApiKey":"新增 API Key","models.apiKeyCreated":"API Key 已新增","models.apiKeyRotated":"API Key 已輪換","models.apiKeyDeleted":"API Key 已刪除","models.configuredModels":"已設定模型","models.configuredModelsDescription":"建立會話時可選擇這些模型。","models.failedLoad":"載入模型失敗","models.storedKeys":"已儲存密鑰","models.storedKeysDescription":"密鑰值一律以遮罩顯示。","models.loadingApiKeys":"正在載入 API Key...","models.failedLoadApiKeys":"載入 API Key 失敗","models.emptyApiKeysTitle":"尚無 API Key","models.emptyApiKeysDescription":"新增密鑰後可用於儲存憑證模式。","models.editModel":"編輯模型","models.setDefault":"設為預設","models.checkHealth":"檢查健康","models.healthReady":"可用","models.healthReadyDescription":"模型設定可用於建立會話。","models.healthNeedsAttention":"需處理","models.healthNeedsAttentionDescription":"請檢查供應商、模型 ID 或狀態。","models.checkEndpoint":"檢查端點","models.endpointTest":"端點測速","models.endpointTestDescription":"檢測供應商端點的可達性與延遲。","models.checkingEndpoint":"檢查端點中...","models.endpointHealthy":"端點可達","models.endpointFailed":"端點不可達","models.deleteModel":"刪除模型","models.deleteModelConfirm":"確定刪除此模型記錄?","models.rotate":"輪換","models.rotateApiKey":"輪換 API Key","models.deleteApiKey":"刪除 API Key","models.deleteApiKeyConfirm":"確定刪除此 API Key?","templates.title":"範本","templates.subtitle":"瀏覽並管理專案範本。","templates.loading":"正在載入範本...","templates.emptyTitle":"尚無範本","templates.emptyDescription":"新增後範本會顯示在這裡。","templates.builtin":"內建","templates.adapter":"適配器","templates.createCustom":"建立自訂範本","templates.creating":"建立中...","templates.created":"範本已建立","templates.cloned":"範本已複製","templates.saved":"範本已儲存","templates.saving":"儲存中...","templates.deleted":"範本已刪除","templates.exported":"範本已匯出","templates.imported":"範本已匯入","templates.available":"可用範本","templates.availableDescription":"內建範本唯讀,可複製後編輯。","templates.governedTitle":"治理中的範本","templates.seedTitle":"僅作初始化種子的範本","templates.selectTemplate":"選擇範本","templates.noTracking":"不追蹤範本","templates.editorDescription":"編輯自訂範本檔案,變數會在套用專案時渲染。","templates.cloneName":"複製名稱","templates.clone":"複製","templates.filePath":"檔案路徑","templates.fileContent":"檔案內容","templates.loadFile":"載入檔案","templates.save":"儲存範本","templates.deleteConfirm":"確定刪除此自訂範本?","templates.importExport":"匯入 / 匯出","templates.importExportDescription":"使用 JSON 範本包在環境之間遷移範本。","templates.packageJson":"範本包 JSON","templates.export":"匯出","templates.import":"匯入","templates.versionHistory":"版本歷史","templates.restore":"回滾","templates.restoring":"回滾中...","templates.restored":"範本已回滾","templates.restoreConfirm":"確定將目前範本回滾到這個歷史版本?目前狀態會先儲存為新的歷史記錄。","templates.noVersions":"暫無歷史版本","templates.catalogInstall":"從目錄安裝","templates.catalogInstallDescription":"將遠端目錄中的範本包匯入為目前使用者的自訂範本。","templates.catalogEmpty":"暫無可安裝範本。請先重新整理範本目錄。","templates.catalogInstalled":"目錄範本已安裝","templates.install":"安裝","templates.installing":"安裝中...","templates.extract":"沉澱範本","templates.extractTitle":"沉澱為範本","templates.extractDescription":"讀取該專案目前的 AI CLI 設定(根指令檔案與適配器設定目錄),提取為一個可複用的新範本。","templates.extractBind":"同時讓該專案追蹤新範本","templates.extracting":"提取中...","templates.extractFailed":"提取失敗","templates.extractedFiles":"已提取的檔案","templates.skippedFiles":"跳過的檔案","templates.gitImport":"從 Git 倉庫匯入","templates.gitImportDescription":"匯入公開 Git 倉庫中的指令檔案與適配器設定目錄,沉澱為可複用的範本。","templates.gitImportUrl":"倉庫位址","templates.gitImportBranch":"分支(選填)","templates.gitImporting":"匯入中...","templates.gitImported":"Git 倉庫範本已匯入","projects.title":"專案","projects.subtitle":"管理你的 AI 程式設計專案。","projects.new":"新增專案","projects.create":"建立專案","projects.import":"匯入專案","projects.newSubtitle":"建立一個用於 AI 輔助開發的新專案。","projects.details":"專案詳情","projects.optionalDescription":"可選描述","projects.loading":"正在載入專案...","projects.emptyTitle":"尚無專案","projects.emptyDescription":"建立第一個專案開始使用。","projects.back":"返回專案列表","projects.loadingOne":"正在載入專案...","projects.notFound":"找不到專案。","projects.generateConfig":"產生設定","projects.previewConfig":"預覽設定","projects.applyConfig":"套用設定","projects.configPreview":"設定預覽","projects.previewFiles":"將寫入檔案","projects.conflicts":"衝突","projects.noConflicts":"未發現衝突","projects.conflictDecision":"衝突處理","projects.skip":"跳過","projects.overwrite":"覆蓋","projects.blocked":"已阻塞","projects.configNeedsReviewTitle":"設定需要處理","projects.configNeedsReviewDescription":"專案已匯入,但自動設定產生尚未完成。請預覽設定並處理衝突後再套用。","projects.configPreviewDescription":"檢查設定只會產生預覽,不會修改專案檔案。既有設定預設建議跳過;只有你明確選擇覆蓋時才會寫入範本產生內容。","projects.existingHash":"現有","projects.incomingHash":"產生","projects.reviewConfig":"檢查設定","projects.generating":"產生中...","projects.newSession":"新增會話","projects.creating":"建立中...","projects.failedGenerateConfig":"產生設定失敗","projects.failedCreateSession":"建立會話失敗","projects.failedCreateProject":"建立專案失敗","projects.noSessions":"此專案尚無會話。","projects.projectManager":"專案經理","projects.projectManagerLoading":"正在載入專案經理狀態...","projects.devTasks":"開發任務","projects.devTasksDescription":"從目標到交付:依階段推進工作項,以證據閉環驗收。","projects.devTasksRefresh":"重新整理開發任務","projects.projectManagerStages":"開發階段","projects.projectManagerPipelineTitle":"開發流水線","projects.projectManagerPipelineDescription":"依階段由左至右推進,工作項隨流程流轉。","projects.projectManagerStageBacklog":"待辦池","projects.projectManagerStageEmptyTitle":"尚未建立開發階段","projects.projectManagerStageEmptyBody":"使用 SDLC 範本一鍵建立標準開發流程(需求分析 → 架構設計 → 編碼實現 → 測試驗證 → 發布交付),或手動新增階段。","projects.projectManagerStageSeedTemplate":"使用 SDLC 範本","projects.projectManagerStageCreate":"新增階段","projects.projectManagerStageName":"階段名稱","projects.projectManagerStageNameRequired":"階段名稱不可為空","projects.projectManagerStageDescription":"階段描述(可選)","projects.projectManagerStageRename":"重新命名","projects.projectManagerStageDelete":"刪除階段","projects.projectManagerStageDeleteConfirm":"刪除後,此階段下的工作項目將移回待辦池。","projects.projectManagerStageMoveLeft":"左移","projects.projectManagerStageMoveRight":"右移","projects.projectManagerStageLaneEmpty":"將工作項移入此階段","projects.projectManagerStageAssign":"所屬階段","projects.projectManagerStageStatusActive":"活躍","projects.projectManagerStageStatusCompleted":"已完成","projects.projectManagerStageStatusArchived":"已歸檔","projects.projectManagerStageMutationError":"階段操作失敗","projects.projectManagerDependencies":"相依關係","projects.projectManagerDependencyBlockedBy":"阻塞於","projects.projectManagerDependencyBlocking":"阻塞了","projects.projectManagerDependencyAdd":"新增前置阻塞","projects.projectManagerDependencyAddPlaceholder":"選擇前置工作項目...","projects.projectManagerDependencyNone":"無相依關係","projects.projectManagerDependencyMutationError":"相依操作失敗","projects.projectManagerLinkedSession":"關聯會話","projects.projectManagerEventStageCreated":"階段已建立","projects.projectManagerEventStageUpdated":"階段已更新","projects.projectManagerEventStageDeleted":"階段已刪除","projects.projectManagerEventDependencyAdded":"相依已新增","projects.projectManagerEventDependencyRemoved":"相依已移除","projects.projectManagerNoGoalTitle":"尚無專案目標","projects.projectManagerNoGoalBody":"設定專案目標,讓任務執行有據可依。","projects.projectManagerNoWorkItemsTitle":"尚無工作項","projects.projectManagerNoWorkItemsBody":"建立工作項後會顯示在這裡。","projects.projectManagerLoadFailed":"無法載入專案經理狀態。請重新整理或檢查 Gateway 可用性。","projects.projectManagerNotFound":"此專案找不到專案經理狀態。","projects.projectManagerDisabledActionHint":"管理專案目標、工作項和台帳狀態。","projects.projectManagerGoal":"專案目標","projects.projectManagerEditGoal":"編輯目標","projects.projectManagerSaveGoal":"儲存目標","projects.projectManagerCancel":"取消","projects.projectManagerGoalSummary":"摘要","projects.projectManagerGoalStatus":"目標狀態","projects.projectManagerGoalMutationError":"無法儲存專案目標。","projects.projectManagerGoalSummaryRequired":"目標摘要不能為空。","projects.projectManagerTextListHint":"每行一項。","projects.projectManagerWorkItems":"工作項","projects.projectManagerBoard":"看板","projects.projectManagerTable":"表格","projects.projectManagerTaskQueue":"任務隊列","projects.projectManagerTaskQueueDescription":"任務包依執行隊列狀態分組,可直接啟動關聯會話。","projects.projectManagerTaskQueueLoading":"正在載入任務隊列...","projects.projectManagerTaskQueueLoadError":"無法載入任務隊列。","projects.projectManagerTaskQueueEmptyTitle":"暫無任務包","projects.projectManagerTaskQueueEmptyBody":"建立工作項後會產生可分發的任務包。","projects.projectManagerTaskQueueEmptyColumn":"此欄暫無任務包","projects.projectManagerTaskQueuePlanned":"待規劃","projects.projectManagerTaskQueueRunning":"執行中","projects.projectManagerTaskQueueWaitingForReview":"待驗收","projects.projectManagerTaskQueueBlocked":"阻塞","projects.projectManagerTaskQueueCompleted":"已完成","projects.projectManagerTaskQueueCancelled":"已取消","projects.projectManagerCreateWorkItem":"建立工作項","projects.projectManagerCreateWorkItemBody":"新任務將從待辦開始;證據可在任務詳情或驗收時補充。","projects.projectManagerEditWorkItem":"編輯工作項","projects.projectManagerEditWorkItemBody":"只能編輯標題、描述、優先級和驗收標準。狀態和證據仍透過獨立操作處理。","projects.projectManagerSaveWorkItem":"儲存工作項","projects.projectManagerUpdateWorkItemError":"無法更新工作項。","projects.projectManagerDeleteWorkItem":"刪除工作項","projects.projectManagerDeleteWorkItemBody":"刪除後工作項會從目前列表移除,但台帳會保留安全刪除標記。","projects.projectManagerDeleteWorkItemError":"無法刪除工作項。","projects.projectManagerViewDetails":"查看詳情","projects.projectManagerWorkItemDetail":"工作項詳情","projects.projectManagerFilterByStatus":"依狀態篩選","projects.projectManagerSearchPlaceholder":"依標題搜尋工作項...","projects.projectManagerAllStatuses":"全部狀態","projects.projectManagerBatchActions":"批量操作","projects.projectManagerBatchTargetStatus":"批量目標狀態","projects.projectManagerBatchStatusError":"無法批量更新工作項狀態。","projects.projectManagerBatchStatusSelectionRequired":"請先選擇工作項。","projects.projectManagerBatchStatusTargetRequired":"請選擇可用的目標狀態。","projects.projectManagerBoardEmptyColumn":"尚無工作項","projects.projectManagerClearSelection":"清空選擇","projects.projectManagerMoveSelected":"移動已選擇","projects.projectManagerNoBatchTargets":"所選工作項沒有共同可達的目標狀態。","projects.projectManagerSelectWorkItem":"選擇工作項","projects.projectManagerSelected":"已選擇","projects.projectManagerWorkItemTitle":"標題","projects.projectManagerWorkItemTitleRequired":"工作項標題不能為空。","projects.projectManagerWorkItemDescription":"描述","projects.projectManagerCreateWorkItemError":"無法建立工作項。","projects.projectManagerAttachEvidence":"附加證據","projects.projectManagerEvidenceReferenceHint":"證據引用是指標。請勿貼上原始終端轉錄、飛書正文、模型提供商載荷或密鑰。","projects.projectManagerEvidenceKindRequired":"證據類型不能為空。","projects.projectManagerEvidenceReferenceRequired":"請填寫引用或路徑。","projects.projectManagerEvidenceUnsafeValue":"請使用短引用或路徑,不要貼上原始輸出或密鑰。","projects.projectManagerEvidenceAttachError":"無法附加證據引用。","projects.projectManagerEvidenceReferenceType":"引用類型","projects.projectManagerEvidenceTypeCustom":"自訂","projects.projectManagerEvidenceTypeFilePath":"File path","projects.projectManagerEvidenceTypeTerminalSnapshot":"Terminal snapshot","projects.projectManagerEvidenceTypeSession":"Session","projects.projectManagerEvidenceSessionId":"Session ID","projects.projectManagerEvidencePathRequired":"請填寫檔案路徑。","projects.projectManagerEvidenceSessionRequired":"請填寫 Session ID。","projects.projectManagerTerminalSnapshotMarkerHint":"只保存 terminal snapshot 標記和 Session ID,不保存終端滾屏內容。","projects.projectManagerTaskPacket":"任務包","projects.projectManagerTaskPacketRuntimeAdapter":"CLI","projects.projectManagerTaskPacketRuntimeTemplate":"模板","projects.projectManagerTaskPacketStatus":"狀態","projects.projectManagerTaskPacketReady":"可啟動","projects.projectManagerTaskPacketBlockedNoSession":"待關聯會話","projects.projectManagerTaskPacketBlockedInactiveSession":"關聯會話未運行","projects.projectManagerTaskPacketLinkedSession":"關聯會話","projects.projectManagerTaskPacketPrompt":"提示詞","projects.projectManagerTaskPacketExpectedVerification":"預期驗證","projects.projectManagerTaskPacketEvidenceRequirements":"證據要求","projects.projectManagerTaskPacketOpenSession":"打開關聯會話","projects.projectManagerTaskPacketSelectSession":"選擇會話","projects.projectManagerTaskPacketNoSessions":"無可關聯會話","projects.projectManagerTaskPacketLinkSession":"關聯會話","projects.projectManagerTaskPacketQuickStart":"建立會話","projects.projectManagerTaskPacketStart":"建立任務會話","projects.projectManagerTaskPacketSelectCli":"選擇 Code CLI","projects.projectManagerTaskPacketSelectCliDescription":"為該任務選擇用於執行的 Code CLI,建立後會話將掛載到工作項。","projects.projectManagerTaskPacketNoCliAvailable":"未偵測到可用的 Code CLI,請先安裝或在設定中啟用。","projects.projectManagerTaskPacketStarting":"正在建立...","projects.projectManagerTaskPacketLoadError":"無法載入任務包。","projects.projectManagerTaskPacketLinkError":"無法關聯會話。","projects.projectManagerTaskPacketStartError":"無法建立任務會話。","projects.projectManagerTaskPacketSessionRequired":"請選擇會話。","projects.projectManagerTaskPacketUnavailable":"暫無任務包。","projects.projectManagerFilterEmptyTitle":"此狀態下尚無工作項","projects.projectManagerFilterEmptyBody":"嘗試切換狀態篩選,或建立新的工作項。","projects.projectManagerRefKind":"類型","projects.projectManagerRefLabel":"標籤","projects.projectManagerRefId":"引用","projects.projectManagerChangeStatus":"變更狀態","projects.projectManagerDoneReasonTitle":"需要完成原因","projects.projectManagerDoneReasonBody":"請記錄所選任務的手動完成原因。這不代表已驗證、驗收或交付。","projects.projectManagerDoneReasonLabel":"手動完成原因","projects.projectManagerDoneReasonRequired":"請填寫手動完成原因。","projects.projectManagerConfirmStatusChange":"確認變更","projects.projectManagerStatusMutationError":"無法更新工作項狀態。","projects.projectManagerLedger":"台帳","projects.projectManagerLedgerRefresh":"重新整理台帳","projects.projectManagerLedgerToggle":"展開或收合台帳","projects.projectManagerLedgerFilterAll":"全部","projects.projectManagerLedgerFilterStatusChanges":"狀態變更","projects.projectManagerLedgerFilterEvidence":"證據","projects.projectManagerLedgerFilterManualCompletion":"手動完成","projects.projectManagerLedgerFilterBlockers":"阻塞","projects.projectManagerLoadMoreLedger":"載入更多台帳事件","projects.projectManagerLedgerLoadFailed":"無法載入台帳事件。","projects.projectManagerLedgerFilteredEmptyTitle":"目前篩選下尚無事件","projects.projectManagerLedgerFilteredEmptyBody":"載入更多事件,或切換篩選條件。","projects.projectManagerLedgerManualCompletionNote":"已記錄無證據引用的完成動作。","projects.projectManagerLedgerBlockerRecordedNote":"僅顯示阻塞安全標記,不顯示原始阻塞詳情。","projects.projectManagerLedgerBlockerResolvedNote":"僅顯示阻塞解決標記,不顯示原始阻塞詳情。","projects.projectManagerConstraints":"約束","projects.projectManagerAcceptanceCriteria":"驗收標準","projects.projectManagerEvidenceRefs":"證據","projects.projectManagerTraceRun":"執行","projects.projectManagerTraceAction":"操作","projects.projectManagerTraceEvidence":"證據","projects.projectManagerTraceSession":"會話","projects.projectManagerTraceLedger":"台帳","projects.projectManagerTraceActionType":"操作類型","projects.projectManagerTraceTarget":"目標","projects.projectManagerTraceEvidenceRefs":"證據","projects.projectManagerTraceApproval":"審批","projects.projectManagerTraceExecution":"執行結果","projects.projectManagerPriority":"優先級","projects.projectManagerPriorityHigh":"高優先級","projects.projectManagerPriorityMedium":"中優先級","projects.projectManagerPriorityLow":"低優先級","projects.projectManagerUpdated":"更新","projects.projectManagerCreated":"建立","projects.projectManagerEvent":"事件","projects.projectManagerNoLedgerTitle":"尚無台帳事件","projects.projectManagerNoLedgerBody":"專案經理事件會在後續工作流程中顯示。","projects.projectManagerStatusTodo":"待辦","projects.projectManagerStatusInProgress":"進行中","projects.projectManagerStatusBlocked":"阻塞","projects.projectManagerStatusReadyForReview":"待評審","projects.projectManagerStatusDone":"完成","projects.projectManagerStatusCancelled":"已取消","projects.projectManagerStatusActive":"活躍","projects.projectManagerStatusUnknown":"未知","projects.projectManagerEventGoalUpdated":"目標已更新","projects.projectManagerEventWorkItemCreated":"工作項已建立","projects.projectManagerEventWorkItemUpdated":"工作項已更新","projects.projectManagerEventWorkItemDeleted":"工作項已刪除","projects.projectManagerEventWorkItemStatusChanged":"工作項狀態已變更","projects.projectManagerEventEvidenceAttached":"證據已附加","projects.projectManagerEventBlockerRecorded":"阻塞已記錄","projects.projectManagerEventBlockerResolved":"阻塞已解決","projects.projectManagerEventFeishuReferenceLinked":"飛書引用已關聯","projects.projectManagerEventNextStepProposed":"下一步已提出","projects.projectManagerEventManualCompletionRecorded":"手動完成已記錄","projects.skillsComingSoon":"Skill 管理即將開放。","projects.model":"模型","projects.action":"操作","projects.deleteRecord":"刪除記錄","projects.deleting":"刪除中...","projects.deleteFailed":"刪除專案失敗","projects.deleteConfirm":"只刪除 ForgeBadger 中的專案記錄,不會刪除伺服器目錄。確定繼續?","projects.importTitle":"匯入專案","projects.importSubtitle":"匯入既有專案目錄,用於 AI 輔助開發。","projects.importStepPath":"步驟 1:選擇目錄","projects.importStepScan":"步驟 2:檢查掃描結果","projects.importStepConfirm":"步驟 3:設定並匯入","projects.directoryPath":"目錄路徑","projects.pathRequired":"必須填寫路徑","projects.browseDirectory":"選擇目錄","projects.scanDirectory":"掃描目錄","projects.scanning":"掃描中...","projects.validDirectory":"找到有效目錄","projects.pathNotDirectory":"路徑存在但不是目錄","projects.directoryNotFound":"目錄不存在","projects.validDirectoryRequired":"請輸入有效目錄路徑後繼續。","projects.projectName":"專案名稱","projects.importing":"匯入中...","projects.failedScan":"掃描目錄失敗","projects.failedImport":"匯入專案失敗","projects.moreActions":"更多操作","projects.configSyncTitle":"範本同步","projects.sessionsSummary":"共 {total} 個會話 · {running} 個執行中","projects.loadingRuntimeCli":"正在偵測 CLI...","projects.selectRuntimeCli":"選擇 Runtime CLI","projects.runtimeUnavailable":"未安裝","projects.runtimeCheckFailed":"檢測失敗","projects.runtimeLaunchDisabled":"不可啟動","projects.noLaunchableRuntimeCli":"未偵測到可啟動的本機 CLI,無法新增會話。","projects.runtimeCliRecoveryDescription":"請確認本機 claude、opencode 或 codex 指令可用,並符合終端持久化執行環境條件。","projects.runtimeBlockedByTerminalTitle":"先修復終端執行環境","projects.runtimeBlockedByTerminalDescription":"目前 CLI 指令偵測完成,但會話啟動仍被終端執行環境阻塞。","projects.openSettings":"開啟設定","projects.template":"範本","projects.credentialMode":"憑證模式","projects.authenticationMethod":"認證方式","projects.hostEnvironmentHint":"沿用 CLI 的主機環境與全域設定,不注入額外模型設定。","projects.launchSessionDescription":"選擇要啟動的 Code CLI;工作階段沿用該 CLI 的主機環境與全域設定。","projects.storedCredential":"儲存的 API Key","projects.storedCredentialDescription":"使用 ForgeBadger 加密儲存的 API Key,並在啟動會話時注入給對應 CLI。","projects.apiKey":"API Key","projects.noModel":"不指定模型","projects.noApiKey":"未選擇 API Key","projects.checkCompliance":"檢查合規","projects.checkingCompliance":"檢查中...","projects.configCompliance":"設定合規","projects.compliant":"合規","projects.needsAttention":"需要處理","projects.totalFiles":"總檔案","projects.missingFiles":"缺失","projects.identicalFiles":"一致","projects.staleFiles":"過期","projects.unsafeFiles":"不安全","projects.requiresDecision":"需要處理的檔案","projects.failedCompliance":"設定合規檢查失敗","projects.stopTrackingTemplate":"停止追蹤模板","projects.stopTrackingConfirm":"停止追蹤該模板?專案檔案不會被修改,僅解除平台層的追蹤關係。","projects.unbinding":"解除中…","projects.untrackedConfigTitle":"獨立配置","projects.untrackedConfigDescription":"該專案未追蹤任何範本,專案內的設定即為唯一真相。","projects.untrackedConfigHint":"如需重新追蹤範本,可在範本管理中對齊並套用。","projects.aiConfig":"AI 設定","projects.gitTab":"Git","projects.gitBranches":"Git 分支","projects.gitNewBranch":"新建分支","projects.gitNewBranchTitle":"新建分支","projects.gitNewBranchDesc":"從當前 HEAD 建立新分支並切換過去。","projects.gitBranchNamePlaceholder":"分支名,如 feature/login","projects.gitSwitchConfirmTitle":"切換分支","projects.gitSwitchConfirmDesc":"切換到分支 {branch}?","projects.gitSwitchSuccess":"已切換到分支 {branch}","projects.gitSwitchFailed":"切換分支失敗","projects.gitCreateSuccess":"已建立並切換到分支 {branch}","projects.gitWorkingTreeDirty":"工作區有 {count} 個未提交變更,請先提交或清理後再切換分支。","projects.gitBranchCurrent":"當前","projects.gitNoBranches":"暫無本地分支","projects.gitLoadFailed":"Git 分支載入失敗","projects.filesTab":"檔案","projects.graphTab":"圖譜","projects.graphFiles":"檔案","projects.graphSymbols":"符號","projects.graphRelations":"關係","projects.graphIndexState":"索引狀態","projects.graphNotInitTitle":"該專案尚未初始化 CodeGraph","projects.graphNotInitDesc":"在專案根目錄執行 codegraph init 產生程式碼圖譜索引後,即可在此查看檔案依賴、符號呼叫與影響面分析。","projects.graphSchemaUnsupported":"偵測到的 CodeGraph 索引版本不支援,請升級本機 codegraph 並重新索引該專案。","projects.graphUnavailable":"程式碼圖譜暫不可用,請稍後重試。","projects.graphSearchPlaceholder":"搜尋符號…","projects.graphNoResults":"無符合符號","projects.graphCallers":"被呼叫","projects.graphCallees":"呼叫","projects.graphImpact":"影響面","projects.graphTruncated":"已按關聯度裁剪部分檔案以保持渲染效能","projects.graphBackToFiles":"返回檔案視圖","projects.graphHint":"「符號」指程式碼裡有名字的實體:函式、類別、方法、介面、常數、路由等。搜尋符號可查看呼叫關係;點擊節點會在「檔案」頁開啟對應原始碼。切換到「改動影響面」可分析當前 git 變更的波及範圍。","projects.graphViewFiles":"檔案視圖","projects.graphViewAffected":"改動影響面","projects.graphAffectedAnalyze":"分析影響面","projects.graphAffectedAnalyzing":"分析中…","projects.graphAffectedLoadingGit":"正在讀取 git 變更…","projects.graphAffectedNoGit":"該專案不是 git 儲存庫,無法分析變更影響面。","projects.graphAffectedNoChanges":"目前沒有未提交的 git 變更。","projects.graphAffectedChangedCount":"個變更檔案","projects.graphAffectedSeeded":"個直接涉及的符號","projects.graphAffectedTouched":"個受波及的符號","projects.workspace":"工作區","projects.workspaceRefresh":"重新整理工作區","projects.workspaceRootPending":"等待專案根目錄...","projects.workspaceNoProject":"尚無關聯專案。","projects.workspaceLoading":"正在讀取專案檔案...","projects.workspaceLoadFailed":"工作區載入失敗","projects.workspaceEmpty":"暫無可顯示檔案。","projects.workspaceSelectFile":"從左側選擇檔案查看內容","projects.workspaceFileLoadFailed":"檔案讀取失敗","projects.workspaceFileEmpty":"檔案內容為空。","projects.workspaceBinaryFile":"二進位檔案不可預覽。","projects.workspaceTruncated":"已截斷","projects.workspaceSearchPlaceholder":"搜尋檔名…","projects.workspaceSearchNoResults":"無匹配檔案","projects.workspaceTreeTruncated":"目錄內容過多,僅顯示前 500 條","projects.workspaceFileTruncated":"檔案過大,僅顯示前 64 KB","projects.workspaceBreadcrumb":"檔案路徑","projects.workspaceLineNumbers":"行號","projects.workspaceOpenViewer":"開啟檔案檢視器","projects.workspaceCloseViewer":"關閉檢視器","projects.workspaceEditFile":"編輯檔案","projects.workspaceSaveFile":"儲存","projects.workspaceCancelEdit":"取消編輯","projects.workspaceSavingFile":"儲存中...","projects.workspaceFileSaved":"檔案已儲存","projects.workspaceFileSaveFailed":"檔案儲存失敗","projects.workspaceFileTooLargeToEdit":"檔案過大,無法線上編輯","projects.projectConfigFiles":"專案設定檔","projects.noConfigFiles":"尚無專案設定檔。","projects.configExists":"存在","projects.configMissing":"缺失","projects.selectConfigFile":"選擇設定檔","projects.editFile":"編輯","projects.previewFile":"預覽","projects.savingConfig":"儲存中...","projects.failedSaveConfig":"儲存設定失敗","projects.globalConfigReadOnly":"全域設定(唯讀)","projects.noGlobalConfig":"未偵測到全域設定檔。","projects.noGlobalConfigContent":"無內容或檔案過大。","projects.skillInheritedEnabled":"繼承全域:啟用","projects.skillInheritedDisabled":"繼承全域:關閉","projects.skillProjectEnabled":"專案覆蓋:啟用","projects.skillProjectDisabled":"專案覆蓋:關閉","projects.order":"順序","sessions.title":"會話","sessions.subtitle":"按專案檢視所有 AI CLI 會話。","sessions.columnStats":"執行中 {running} · 共 {total}","sessions.noInputRecord":"尚無輸入記錄 · 開啟終端後自動記錄","sessions.showEmptyProjects":"顯示空專案","sessions.columnEmpty":"暫無會話","sessions.moreTasks":"+{count} 更多","sessions.openProject":"進入專案","sessions.cliFilter":"依 CLI 篩選","sessions.resetColumnOrder":"重設欄順序","sessions.viewToggle":"切換檢視","sessions.viewBoard":"看板檢視","sessions.viewList":"列表檢視","sessions.resizeColumn":"調整欄寬","sessions.dragColumn":"拖曳排序專案欄","sessions.loading":"正在載入會話...","sessions.emptyTitle":"尚無會話","sessions.emptyDescription":"從專案頁面建立會話後會顯示在這裡。","sessions.createFromProject":"從專案建立會話","sessions.createProject":"建立專案","sessions.chooseProjectTitle":"選擇專案","sessions.chooseProjectDescription":"選擇一個專案以建立新會話。","sessions.chooseProjectEmpty":"還沒有專案,先建立一個吧。","sessions.emptyReadyDescription":"點擊右上角新增會話,選擇一個專案即可開始。","sessions.runtimeBlockedDescription":"會話列表為空不是專案問題;目前終端執行環境尚未就緒。","sessions.project":"專案","sessions.running":"執行中","sessions.stopped":"已停止","sessions.error":"錯誤","sessions.deleteLabel":"刪除會話","sessions.searchPlaceholder":"搜尋會話、專案或工具","sessions.statusFilter":"狀態篩選","sessions.statusAll":"全部狀態","sessions.noMatchesTitle":"沒有符合的會話","sessions.noMatchesDescription":"調整搜尋關鍵字或狀態篩選後重試。","sessions.groupedByProject":"按專案分組","sessions.unknownProject":"未關聯專案","sessions.back":"會話","sessions.preparing":"正在準備終端連線...","sessions.cannotOpen":"無法開啟終端","sessions.startFailed":"啟動會話失敗","sessions.stopFailed":"停止會話失敗","sessions.deleteFailed":"刪除會話失敗","sessions.returnToList":"返回會話列表並使用連線按鈕。","sessions.backToSessions":"返回會話","sessions.openSettings":"開啟設定","sessions.activity":"活動","sessions.noActivity":"暫無活動記錄","sessions.stopping":"停止中...","sessions.focusMode":"專注模式","sessions.exitFocusMode":"退出專注","sessions.closeTab":"關閉會話標籤","sessions.sessionExitedTabClosed":"會話已退出,標籤頁已自動關閉","sessions.openSessionList":"開啟會話列表","sessions.overflowTabs":"更多會話標籤","sessions.gitChanges":"Git 變更","sessions.gitWorkingTree":"工作區變更","sessions.gitCommits":"最近提交","sessions.gitNoChanges":"工作區乾淨,沒有未提交的變更","sessions.gitNotRepo":"目前專案不是 Git 倉庫","sessions.gitLoadFailed":"Git 資訊載入失敗","sessions.gitRefresh":"重新整理 Git 狀態","sessions.providerQuota":"模型限額","sessions.providerQuotaEmpty":"尚未從模型中心套用供應商到目前 CLI","sessions.providerQuotaUnsupported":"該供應商暫不支援額度查詢","sessions.providerQuotaRefresh":"重新整理限額","sessions.providerQuotaLoadFailed":"限額資訊載入失敗","sessions.providerQuotaResetAt":"重置時間","sessions.providerQuotaCheckedAt":"更新於","sessions.providerQuotaUsed":"已用","sessions.providerQuotaRemaining":"剩餘","sessions.gitDiffTitle":"變更內容","sessions.gitDiffUntracked":"新檔案內容(未追蹤)","sessions.gitDiffLoading":"載入中…","sessions.gitDiffEmpty":"該檔案目前沒有差異內容","sessions.snapshotHistory":"快照歷史","sessions.taskPacketHandoff":"任務包交接","sessions.taskPacketHandoffDescription":"此會話已關聯 Project Manager 任務包。請手動複製需要的上下文到 CLI;ForgeBadger 不會自動寫入終端。","sessions.taskPacketLoading":"正在檢查關聯任務包...","sessions.taskPacketLoadFailed":"無法載入關聯任務包。","sessions.taskPacketWorkItem":"工作項","sessions.taskPacketRuntime":"執行環境","sessions.taskPacketLinkedSession":"關聯會話","sessions.taskPacketPrompt":"提示詞","sessions.taskPacketAcceptanceCriteria":"驗收標準","sessions.taskPacketExpectedVerification":"預期驗證","sessions.taskPacketEvidenceRequirements":"證據要求","sessions.taskPacketNoItems":"暫無條目。","sessions.taskPacketOpenWorkItem":"開啟工作項詳情","sessions.taskPacketQueuePlanned":"待規劃","sessions.taskPacketQueueRunning":"執行中","sessions.taskPacketQueueWaitingForReview":"待驗收","sessions.taskPacketQueueBlocked":"阻塞","sessions.taskPacketQueueCompleted":"已完成","sessions.taskPacketQueueCancelled":"已取消","sessions.handoffExport":"Markdown 交接包","sessions.handoffExportDescription":"填寫人工備註後產生可複製到 GitHub、PR 或飛書的 Markdown。產生前會阻斷明顯密鑰、佔位符和原始終端轉儲。","sessions.handoffOperatorNotes":"操作備註","sessions.handoffVerificationNotes":"驗證備註","sessions.handoffOpenReviewItems":"待評審事項","sessions.handoffAuditBlocked":"交接包審計未通過","sessions.handoffAuditOperatorNotesRequired":"操作備註不能為空。","sessions.handoffAuditVerificationNotesRequired":"驗證備註不能為空。","sessions.handoffAuditSecretLikeValue":"內容包含疑似密鑰、token 或密碼。","sessions.handoffAuditPlaceholderText":"內容包含 TODO/TBD/FIXME 等佔位符。","sessions.handoffAuditRawTerminalDump":"內容疑似包含原始終端轉儲或 shell prompt。","sessions.handoffMarkdownReady":"Markdown 已產生,可複製使用。","sessions.handoffCopy":"複製 Markdown","sessions.handoffCopied":"已複製","sessions.handoffCopyFailed":"複製失敗,請手動複製文字。","sessions.handoffDownload":"下載 Markdown","terminal.missingCredentials":"缺少終端憑證。請從控制台會話列表開啟此會話。","terminal.connectionLost":"連線已中斷","terminal.reconnect":"重新連線","terminal.reconnecting":"正在重新連線","terminal.backToBottom":"回到底部","terminal.historyOutput":"歷史輸出","terminal.historyRefresh":"重新整理","terminal.historyEmpty":"暫無輸出記錄","terminal.historyLoadFailed":"歷史輸出載入失敗","settings.title":"設定","settings.subtitle":"設定控制台偏好與安全預設值。","settings.language":"語言","settings.theme":"主題","settings.themeDescription":"選擇介面的品牌強調色,立即生效並儲存在本機。","settings.themeCyan":"藍青","settings.themeOrange":"橙","settings.themeViolet":"紫","settings.themeEmerald":"翠綠","settings.themeBlue":"藍","settings.themeRose":"玫紅","settings.themeAmber":"琥珀","settings.languageDescription":"選擇此瀏覽器中的控制台語言偏好。","settings.pet":"寵物選擇","settings.petDescription":"選擇控制台中的寵物,偏好儲存在目前瀏覽器。","settings.petRobot":"機器人","settings.petRobotDescription":"會眨眼、走路和坐著打字的程式設計夥伴。","settings.petSelected":"已選用","settings.petSaved":"寵物選擇已儲存。","settings.petSaveFailed":"無法儲存寵物選擇,請檢查瀏覽器是否允許本機儲存。","settings.console":"控制台","settings.consoleDescription":"終端會話與儀表板的本地工作流偏好。","settings.autoReconnect":"自動重連終端","settings.autoReconnectDescription":"WebSocket 短暫中斷時保持瀏覽器自動重新連線。","settings.showStoppedSessions":"顯示已停止會話","settings.showStoppedSessionsDescription":"在會話表格中保留已完成或已停止的會話。","settings.browserNotifications":"瀏覽器通知","settings.browserNotificationsDescription":"各個 Code CLI 發起權限申請、完成、中斷或失敗時顯示系統通知。","settings.browserNotificationsDenied":"瀏覽器已拒絕通知權限,請在瀏覽器網站設定中重新開啟。","settings.securityBaseline":"安全基線","settings.securityDescription":"本地 Gateway 目前啟用的安全控制。","settings.diagnostics":"診斷匯出","settings.diagnosticsDescription":"產生本地已遮蔽診斷 JSON,便於試用回饋和問題重現。","settings.diagnosticsExport":"匯出診斷 JSON","settings.diagnosticsExporting":"正在匯出...","settings.diagnosticsExported":"診斷檔案已下載,分享前請再次檢查是否包含敏感資訊。","settings.diagnosticsExportFailed":"匯出失敗,請檢查登入狀態和 Gateway 日誌。","settings.diagnosticsNotice":"診斷不會自動上傳;分享前請勿包含 token、API Key 或無關專案秘密。","settings.jwtAuth":"JWT 驗證","settings.tenantIsolation":"租戶隔離","settings.apiKeyEncryption":"API Key 加密","settings.terminalPersistence":"終端持久化","settings.notDetected":"未偵測","settings.enabled":"已啟用","settings.secretsNotice":"密鑰由 Gateway 載入,不會暴露在頁面標記中。","settings.adapters":"Adapter 偵測","settings.adaptersDescription":"檢測本機 AI CLI 指令與終端執行環境;只有指令與終端持久化執行環境條件都符合時才能啟動會話。","settings.claudeRoute":"Claude Code 協定路由","settings.claudeRouteDescription":"僅未設定 Anthropic 位址的 OpenAI 協定供應商需要路由,經本閘道的 /v1/messages 轉發,真實 API Key 不會寫入 Claude 設定檔。已設定 Anthropic 位址的供應商直接連接 Claude Code。","settings.claudeRouteStateEnabled":"路由已開啟","settings.claudeRouteStateDisabled":"路由已關閉","settings.claudeRouteAssignmentLabel":"目前路由供應商","settings.claudeRouteNoAssignment":"尚未套用","settings.claudeRouteGatewayDown":"Gateway 未運行時,Claude Code 無法存取路由模型。","settings.claudeRouteUpdateFailed":"更新路由狀態失敗","settings.claudeRouteLoadFailed":"載入路由狀態失敗","settings.mcp":"MCP 接入","settings.mcpDescription":"外部 AI 用戶端(Claude Code、MCP Inspector 等)透過本閘道的 /mcp 端點呼叫平台工具。","settings.mcpStateEnabled":"服務已啟用","settings.mcpStateDisabled":"服務未啟用","settings.mcpEndpoint":"端點","settings.mcpDisabledHint":"MCP 服務未啟用。在 Gateway 的 .env 中設定以下變數後重新啟動生效:","settings.mcpName":"名稱","settings.mcpScopeRead":"唯讀","settings.mcpScopeOperate":"可操作","settings.mcpScopeOperateHelp":"「可操作」允許用戶端執行寫操作(以擁有者身份內聯核准);安全策略標記為高風險的操作仍會被拒絕。","settings.mcpCreate":"建立憑證","settings.mcpCopy":"複製","settings.mcpLoadFailed":"載入 MCP 狀態失敗,請重試。","settings.mcpEmpty":"尚未建立存取憑證。","settings.mcpLastUsed":"最近使用","settings.mcpNeverUsed":"從未使用","settings.mcpRevoked":"已撤銷","settings.mcpRevoke":"撤銷","settings.mcpRevokeConfirm":"確認撤銷此憑證?持有它的用戶端將立即失去存取權限。","settings.mcpCreateFailed":"建立憑證失敗,請重試。","settings.mcpRevokeFailed":"撤銷憑證失敗,請重試。","settings.mcpClose":"關閉","settings.mcpCopied":"已複製到剪貼簿","settings.mcpCopyFailed":"複製失敗,請手動複製。","settings.mcpConnectHelp":"接入範例(將 <TOKEN> 取代為你建立的憑證):","settings.mcpConnectCli":"Claude Code CLI","settings.mcpConnectJson":"MCP 用戶端 JSON 設定","settings.mcpPlaintextTitle":"存取憑證已建立","settings.mcpPlaintextWarning":"明文憑證只顯示這一次,關閉後無法再次查看。請立即複製並妥善保存。","settings.mcpTokenPlaceholder":"<TOKEN>","settings.available":"指令可用","settings.missing":"指令缺失","settings.supported":"已支援","settings.prototype":"原型","settings.launchEnabled":"會話可啟動","settings.launchDisabled":"會話不可啟動","settings.discoveryLoading":"正在偵測 Adapter...","settings.dependenciesLoading":"正在偵測終端執行環境...","settings.dependenciesLoadFailed":"終端執行環境偵測失敗","settings.discoveryLoadFailed":"Adapter 偵測載入失敗","settings.discoveryLoadFailedDescription":"會話啟動依賴本機 claude、opencode 或 codex 指令,以及終端持久化執行環境條件。","settings.discoveryRetry":"重新偵測","settings.discoveryRefresh":"重新偵測","settings.discoveryRefreshing":"偵測中...","settings.adapterReadinessNotice":"會話啟動就緒度取決於本機 CLI 指令、launchEnabled 狀態和終端持久化執行環境條件。","settings.terminalRuntimeReadiness":"終端執行環境","settings.launchReady":"可啟動","settings.launchBlocked":"阻塞","settings.auditHistory":"審計歷史","settings.auditDescription":"最近的模板還原和配置同步記錄。","settings.auditLoading":"正在載入審計記錄...","settings.auditEmpty":"暫無審計記錄。","settings.account.title":"帳號與安全","settings.account.description":"修改登入密碼,管理已登入的裝置與工作階段。","settings.account.currentPassword":"目前密碼","settings.account.newPassword":"新密碼","settings.account.confirmPassword":"確認新密碼","settings.account.passwordHint":"修改密碼後會吊銷所有已登入裝置的工作階段,需要重新登入。","settings.account.passwordSubmit":"修改密碼","settings.account.passwordChanging":"提交中...","settings.account.passwordChanged":"密碼已修改,正在跳轉到登入頁...","settings.account.passwordChangeFailed":"修改密碼失敗,請稍後重試。","settings.account.passwordTooShort":"新密碼至少需要 8 個字元。","settings.account.passwordMismatch":"兩次輸入的新密碼不一致。","settings.account.devicesTitle":"我的裝置","settings.account.devicesDescription":"目前帳號的活躍登入工作階段。","settings.account.devicesLoading":"正在載入登入裝置...","settings.account.devicesLoadFailed":"載入登入裝置失敗。","settings.account.devicesEmpty":"暫無活躍工作階段記錄。","settings.account.revoke":"吊銷","settings.account.revoking":"吊銷中...","settings.account.revokeOthers":"登出其他裝置","settings.account.currentDevice":"目前裝置","settings.account.unknownDevice":"未知裝置","settings.account.lastActive":"最近活躍","settings.account.signedInAt":"登入於"},en:{"workspace.runtimeUpgrade":"This Session Server cannot confirm that CLI processes have exited. New managed execution is unavailable. After all existing CLI sessions have finished normally, upgrade Session Server to start team execution safely. Existing terminal connections remain available; do not force-stop other members’ sessions.","workspace.stopSourceCli":"Stop all active terminals for the source project before delivery.","workspace.operationActive":"A delivery operation is in progress. Review and integration are temporarily unavailable.","workspace.operationInterrupted":"The previous delivery operation was interrupted. Its outcome must be confirmed before continuing.","workspace.operationRecoveryHint":"Safe close or recovery may remain pending until process and Git state are confirmed. Refresh to check progress.","workspace.policyChanged":"The execution policy changed. Reload its latest revision before saving; other form drafts are preserved.","workspace.reloadPolicy":"Reload execution policy","workspace.historicalReceipt":"Historical verification record","workspace.errorPlatform":"Managed verification is not supported on this platform yet. Run it on macOS or Linux; Windows process lifecycle support still needs verification.","workspace.errorUnresolved":"The previous verification process has not been confirmed stopped. The worktree stays locked; ask the operator to complete process cleanup before recovery.","workspace.errorWait":"Another delivery operation is in progress. Wait for it to finish, then refresh before retrying.","workspace.errorRecovery":"A previous delivery operation needs recovery. Refresh and inspect the attempt, then create a recovery attempt or close it safely.","workspace.errorProcessRecovery":"A verification process needs cleanup after interruption. Ask the project owner to stop the attempt safely, then refresh and recover.","workspace.errorStale":"The task or code changed. Refresh and review the latest version.","workspace.errorAccess":"Your current project role does not allow this operation. Refresh or ask the owner to update access.","workspace.errorStopPending":"Execution has not stopped yet. Wait, then retry the stop or archive action.","workspace.errorMemberRole":"Revoke the member’s active execution before changing their role.","workspace.changeRole":"Change role","workspace.unavailable":"The worktree is unavailable. Restore the directory, create a recovery attempt, or close the attempt safely. Verification and integration are unavailable.","workspace.assignedReviewer":"This task has an assigned reviewer. That reviewer must record the decision.","workspace.event.review_recorded":"Review decision recorded","workspace.event.project_archived":"Project archived","workspace.staleReceipt":"Outdated — this record no longer matches the current task or commit","workspace.archive":"Archive project","workspace.archiveHint":"Stop project execution and archive the project. Delivery history is retained; the project leaves the active project list. Pending stops must finish before archival.","workspace.stopCliHint":"Stop the private CLI before review or integration.","workspace.criteriaRequired":"Add at least one acceptance criterion to the task before verification.","workspace.assignedElsewhere":"This task is assigned to another developer. Ask for reassignment before preparing your attempt.","workspace.event.policy_updated":"Execution policy updated","workspace.event.execution_disabled":"Managed execution disabled","workspace.event.member_added":"Member role updated","workspace.event.member_revoked":"Member access revoked","workspace.event.task_created":"Task created","workspace.event.task_updated":"Task updated","workspace.event.comment":"Comment added","workspace.event.workspace_prepared":"Isolated attempt prepared","workspace.event.delivery_links_updated":"Delivery links updated","workspace.event.workspace_closed":"Attempt closed","workspace.event.delivery_integrated":"Delivery integrated","workspace.event.delivery_reviewed":"Delivery reviewed","workspace.event.verification_completed":"Verification completed","workspace.title":"Development tasks","workspace.subtitle":"Personal and shared projects, from task to verified delivery.","workspace.empty":"No accessible projects yet. Create or import a project to begin.","workspace.retry":"Refresh and retry","workspace.error":"The operation failed. Refresh to check the latest state before retrying.","workspace.owner":"Owner","workspace.developer":"Developer","workspace.reviewer":"Reviewer","workspace.viewer":"Viewer","workspace.tasks":"Tasks","workspace.newTask":"New task","workspace.noTasks":"No tasks yet. Define a small change and its acceptance criteria.","workspace.taskTitle":"Task title","workspace.criteria":"Acceptance criteria (one per line)","workspace.assignee":"Assignee","workspace.reviewAssignee":"Reviewer","workspace.unassigned":"Unassigned","workspace.editTask":"Edit task","workspace.members":"Project members","workspace.email":"Registered account email","workspace.role":"Project role","workspace.memberHint":"Developers create tasks and execute code; reviewers comment and accept deliveries; viewers can only read. Terminals remain private.","workspace.revokeHint":"Access is denied immediately and active execution is stopped. Any pending stops remain visible and can be retried.","workspace.revoke":"Revoke access","workspace.revoked":"Access revoked. Pending process stops:","workspace.noExecution":"Managed execution is disabled for this project.","workspace.noVerification":"Automatic verification has been retired. Record test results in the task; existing receipts remain available below.","workspace.comments":"Discussion","workspace.noComments":"No comments yet.","workspace.comment":"Add a comment","workspace.post":"Post comment","workspace.runs":"Development attempts","workspace.noRuns":"No attempts yet. An owner or developer can prepare an isolated worktree and private CLI session.","workspace.prepare":"Prepare isolated attempt","workspace.privateHint":"Develop in the private CLI terminal. Other members see shared task artifacts only.","workspace.terminal":"Open private terminal","workspace.refresh":"Refresh","workspace.changes":"Changed files","workspace.noChanges":"No changed files.","workspace.commit":"Current commit","workspace.dirty":"Uncommitted changes — commit before review or integration.","workspace.clean":"Working tree is clean","workspace.verification":"Verification receipts","workspace.noReceipts":"No verification receipts yet.","workspace.unknownHint":"Outcome unknown. Inspect the historical state and complete any pending cleanup; execution is never replayed.","workspace.preview":"Preview URL","workspace.pr":"Pull request URL","workspace.linksHint":"Operator-supplied links, not verified CI status. A localhost URL opens on the viewer's computer.","workspace.invalidUrl":"Use an http(s) URL without embedded credentials.","workspace.review":"Delivery review","workspace.reviewNote":"Review note","workspace.accept":"Accept this commit","workspace.requestChanges":"Request changes","workspace.noReviews":"No review decisions yet.","workspace.reviewHint":"Acceptance requires a current passing receipt. Team executors cannot approve their own attempt.","workspace.integrate":"Integrate accepted commit","workspace.integrateHint":"Owner only: stop the private CLI first. Integration requires a clean source checkout and a fast-forward from the recorded base.","workspace.recover":"Create recovery attempt","workspace.recoverHint":"Creates a new isolated attempt from the recorded base commit. The existing worktree and its changes are retained.","workspace.close":"Close attempt safely","workspace.closeHint":"Stops execution and removes only a clean worktree. Dirty changes are never forcibly removed.","workspace.handoff":"Export handoff","workspace.handoffText":"Handoff document","workspace.activity":"Project activity","workspace.noActivity":"No project activity yet.","workspace.readOnly":"You have read-only access to this project.","workspace.saved":"Saved","workspace.busy":"Working…","workspace.provisioning":"Preparing","workspace.ready":"Ready","workspace.failed":"Failed","workspace.revoking":"Revoking","workspace.closed":"Closed","workspace.integrated":"Integrated","workspace.running":"Running","workspace.passed":"Passed","workspace.unknown":"Unknown","workspace.accepted":"Accepted","workspace.changes_requested":"Changes requested","workspace.todo":"To do","workspace.in_progress":"In progress","workspace.blocked":"Blocked","workspace.ready_for_review":"Ready for review","workspace.done":"Done","workspace.cancelled":"Cancelled","workspace.memberState":"Membership state","workspace.active":"Active","workspace.revokedState":"Revoked","workspace.confirm":"Confirm","workspace.cancel":"Cancel","membersHub.intro":"Manage accounts, invitations and project access in one place.","membersHub.accounts":"Accounts","membersHub.collaboration":"Members and invitations","membersHub.projects":"Project access","membersHub.administration":"Ownership and lifecycle","membersHub.selectProject":"Select a project to manage its members and permissions.","membersHub.noProjects":"No accessible projects.","membersHub.selectTeam":"Member group","membersHub.createGroup":"Create a member group","teams.revise":"Revise handoff","teams.reviseHint":"Choose current eligible replacements and review the changed plan. Access stays revoked. Saving changes does not resume execution cleanup; resume separately after saving.","teams.confirmRevision":"Confirm handoff revision","teams.reloadImpact":"Reload current impact","teams.targetChanged":"A replacement is no longer eligible. Revise this plan with current eligible members before resuming.","teams.switchAccount":"Sign in with another account","delivery.title":"PR title","delivery.headMismatch":"The pushed remote head differs from the selected commit. Push the intended branch and refresh before retrying.","delivery.baseMismatch":"The remote base has moved. Reconcile against the latest source, then verify and review the new attempt.","delivery.prRejected":"GitHub rejected the request. Check repository access, token permissions and branch names before retrying.","delivery.prMismatch":"The GitHub response or matching PR could not be verified. Inspect the repository before another request.","delivery.currentReceipt":"Verify the current clean commit before creating a PR.","delivery.git":"Git delivery","delivery.reconcile":"Reconcile with latest source","delivery.reconcileHint":"Prepare a new workspace on the latest source commit and merge this attempt’s selected commit. Existing uncommitted files and the old workspace are preserved. Verify and review the new result again.","delivery.reconcileConfirm":"Stop the old execution and reconcile only the committed changes shown below. Uncommitted changes are not copied; resolve any conflicts in the new private terminal.","delivery.conflicts":"Merge conflicts remain. Resolve these paths in the new private terminal, commit, then verify and request review again.","delivery.draftPr":"Create draft GitHub PR","delivery.prHint":"Push the branch yourself first. Its remote HEAD must match this verified commit, and the remote base must match this attempt’s base. This action creates a draft PR; it does not push code. Remote PR branches can change later and are not immutable acceptance evidence.","delivery.repository":"GitHub repository (owner/repo)","delivery.head":"Already-pushed head branch","delivery.base":"Remote base branch","delivery.token":"GitHub token (used only for this request)","delivery.secure":"Credentials require loopback or HTTPS for both this page and the Gateway. Use the documented SSH forwarding setup.","delivery.confirmPr":"Create a draft PR on the specified external GitHub repository using this exact verified commit.","delivery.prUncertain":"The remote response is uncertain or pending. Re-enter the token and retry with the same repository and branches to look up the existing request; do not create another PR manually.","teams.title":"Teams","teams.empty":"No teams yet.","teams.create":"Create team","teams.name":"Team name","teams.owner":"Owner","teams.admin":"Team administrator","teams.member":"Member","teams.active":"Active","teams.leaving":"Leaving · access revoked","teams.left":"Left","teams.closing":"Closing","teams.closed":"Closed","teams.members":"Team members","teams.role":"Team role","teams.scope":"Team administration does not grant access to private terminals or personal projects. Project development and review permissions are assigned separately.","teams.invitations":"Team invitations","teams.invite":"Create invitation","teams.email":"Email","teams.hours":"Expires in hours","teams.pending":"Pending","teams.used":"Used","teams.revoked":"Revoked","teams.expired":"Expired","teams.expires":"Expires","teams.revoke":"Revoke invitation","teams.copy":"Copy link","teams.copied":"Copied","teams.copyFailed":"Copy failed. Select and copy the link manually.","teams.oneTime":"Copy this one-time link now. It will not be shown again after leaving this page. Send it yourself through a trusted channel; no email is sent.","teams.noInvites":"No invitations.","teams.projects":"Team projects","teams.noProjects":"No enrolled projects.","teams.enroll":"Enroll own project","teams.enrollHint":"This explicitly grants team administrators management authority over this project. Development, review and private execution remain separately controlled.","teams.noCandidates":"No eligible personal projects. Only the current project owner may enroll an unassociated project.","teams.select":"Select…","teams.openProject":"Open project and permissions","teams.transferProject":"Transfer project ownership","teams.newOwner":"New owner","teams.transfer":"Transfer team ownership","teams.transferHint":"The selected active member becomes the owner. You remain a team administrator.","teams.close":"Close team","teams.closeHint":"Archive all team projects and complete pending execution stops before closing the team.","teams.confirm":"Confirm","teams.offboard":"Offboard / hand off","teams.leave":"Leave team","teams.impact":"Departure impact","teams.handoffHint":"Choose ownership and task assignments for every affected project. Existing worktrees, branches and delivery authorship are preserved; private terminals are never transferred.","teams.assignee":"Replacement assignee","teams.reviewer":"Replacement reviewer","teams.unassign":"Clear assignment","teams.preview":"Prepare handoff preview","teams.planConfirm":"Confirm this handoff plan","teams.planNotice":"Review the selections below. Confirmation immediately revokes access; handoff finishes only after affected execution has stopped. This preview expires in 10 minutes.","teams.stopping":"Access revoked. Execution stopping and handoff are still pending.","teams.completed":"Handoff completed.","teams.resume":"Resume pending handoff","teams.pendingStops":"Pending stops","teams.planId":"Handoff plan ID","teams.loadPlan":"Load handoff plan","teams.noImpact":"No affected projects. Membership access will still be revoked.","teams.join":"Join team","teams.joinIntro":"An invitation grants membership only to its intended email address. Confirm the team before accepting.","teams.missingInvite":"No invitation in this tab. Open the complete link supplied by your team administrator.","teams.signInJoin":"Sign in to accept","teams.registerJoin":"Create account and join","teams.registrationOff":"New account registration is disabled. Existing matching accounts can still sign in and join.","teams.signedIn":"Signed in as","teams.forgetInvite":"Discard this invitation","teams.accountInvites":"Account registration invitations","teams.accountScope":"System administrators manage instance accounts, not private projects. Team invitations are managed on the Teams page.","teams.accountInviteHint":"These codes satisfy invitation-only registration. Ordinary registration still requires the local recovery key. Use team invitations for invited remote members.","teams.inviteCode":"Registration invitation code (if required)","teams.reset":"Reset account password","teams.resetHint":"This invalidates the account’s logins and authenticated sockets. Running native CLI processes are not stopped; use account disable or team offboarding for execution revocation.","teams.resetDone":"Password reset; account logins revoked.","teams.error":"Request failed. Please retry.","teams.retry":"Retry","teams.stale":"The data or handoff preview changed. Refresh and review a new preview.","teams.denied":"You no longer have permission for this operation.","teams.invalidInvite":"This invitation is invalid, expired, revoked or already used. Ask an administrator for a new link.","teams.emailMismatch":"Sign in with the email address specified by this invitation.","teams.ownerRequired":"Transfer team ownership before leaving.","teams.externalMembers":"Resolve existing project members outside this team before enrollment.","teams.stopPending":"Execution is still active or stopping. Wait, then retry this operation.","teams.locked":"An execution operation remains unresolved. Keep this plan and ask the host operator to resolve it before resuming.","teams.notFound":"Team or account not found or no longer accessible.","task.artifactStale":"The linked artifact no longer matches the task requirements. Generate a new artifact for the current requirements; this historical link cannot be refreshed.","task.artifacts":"Copilot artifact summaries","task.artifactHint":"Share only file/check counts and the artifact digest with this project's members. This does not share private prompts, paths, diffs or output, mark the task done, verify code, accept delivery or merge changes.","task.shareSummary":"I agree to share this artifact summary with project members","task.linkArtifact":"Link summary","task.artifactCandidate":"Your completed Copilot artifact","task.noArtifacts":"No linked Copilot summaries.","task.noCandidates":"No completed Copilot artifacts available from your account in this project.","task.snapshotCurrent":"Matches the captured task requirements and artifact digest; not code verification","task.snapshotStale":"Historical summary — task requirements or the artifact have changed","task.filesChecks":"Files / passed checks / total checks","task.openPrivate":"Open your private Copilot task","task.manualDone":"Manual completion is a planning status, not verified delivery. Verification and review receipts are shown separately below.","dashboard.activationDelivery":"Verify and deliver your first change","dashboard.activationDeliveryReady":"You have completed a verified, reviewed and safely integrated delivery.","dashboard.activationDeliveryMissing":"Create a workspace task, commit changes, verify, review and integrate the result.","dashboard.activationStartDelivery":"Start a delivery","dashboard.activationContinueDelivery":"Continue developing and delivering","dashboard.activationOptional":"Optional","auth.brandTagline":"Local-first AI programming IDE control platform","auth.languageLabel":"Language","auth.loginTitle":"Sign in","auth.loginDescription":"Connect to your local ForgeBadger console.","auth.email":"Email","auth.password":"Password","auth.emailInvalid":"Enter a valid email address","auth.passwordRequired":"Password is required","auth.forgotPassword":"Forgot password?","auth.passwordResetSuccess":"Password reset. Sign in with your new password.","auth.loginFailed":"Sign-in failed. Check your email and password.","auth.signingIn":"Signing in...","auth.signIn":"Sign in","auth.noAccount":"Don't have an account?","auth.register":"Register","auth.registerTitle":"Create account","auth.registerDescription":"Create a ForgeBadger account with the local recovery key.","auth.registrationInstructions":"Copy the key from ~/.forgebadger/account-recovery.key. It verifies local ownership and does not rotate after registration.","auth.confirmPassword":"Confirm password","auth.registrationConfirmPasswordRequired":"Confirm your password","auth.registrationFailed":"Registration failed. Try again later.","auth.registrationInvalidCredentials":"The recovery key is invalid.","auth.registrationUnavailable":"Registration is not available from this environment or is disabled.","auth.registrationRateLimited":"Too many registration attempts. Try again later.","auth.emailAlreadyRegistered":"This email is already registered.","auth.creatingAccount":"Creating account...","auth.createAccount":"Create account","auth.alreadyHaveAccount":"Already have an account?","auth.resetTitle":"Reset password","auth.resetDescription":"Recover a local ForgeBadger account with the host recovery key.","auth.recoveryInstructions":"Copy the key from ~/.forgebadger/account-recovery.key. If you use a custom state directory or a migrated legacy install, use the path shown in the Gateway startup log.","auth.recoveryKey":"Recovery key","auth.recoveryKeyRequired":"Recovery key is required","auth.newPassword":"New password","auth.passwordMinLength":"Password must be at least 8 characters","auth.confirmNewPassword":"Confirm new password","auth.confirmPasswordRequired":"Confirm your new password","auth.passwordsDoNotMatch":"Passwords do not match","auth.resetFailed":"Password reset failed. Try again later.","auth.resetInvalidCredentials":"The email or recovery key is invalid.","auth.resetLocalOnly":"Password recovery is only available on the host running ForgeBadger.","auth.resetRateLimited":"Too many attempts. Try again later.","auth.resetUnavailable":"Password recovery is temporarily unavailable.","auth.resetting":"Resetting...","auth.resetPassword":"Reset password","auth.resetCompleteHint":"The recovery key rotates after a successful reset. Sign in normally with your new password.","auth.backToSignIn":"Back to sign in","common.actions":"Actions","common.add":"Add","common.aiTool":"AI Tool","common.all":"All","common.back":"Back","common.cancel":"Cancel","common.close":"Close","common.connect":"Connect","common.delete":"Delete","common.description":"Description","common.enabled":"Enabled","common.disabled":"Disabled","common.import":"Import","common.loading":"Loading...","common.name":"Name","common.open":"Open","common.path":"Path","common.project":"Project","common.save":"Save","common.status":"Status","common.stop":"Stop","common.start":"Start","common.visibility":"Visibility","visibility.all":"All visibility","visibility.filter":"Visibility filter","visibility.private":"Private","visibility.shared":"Shared","visibility.admin":"Admin","visibility.privateDescription":"Only the current owner can manage and view it.","visibility.sharedDescription":"Visible to all users on this local instance; only the owner can mutate or delete it.","visibility.adminDescription":"Visible to admins; regular users only see admin items they own.","nav.dashboard":"Dashboard","nav.projects":"Projects","nav.sessions":"Sessions","nav.copilot":"Copilot","copilot.conversations":"Conversations","copilot.newConversation":"New conversation","copilot.untitled":"Untitled conversation","copilot.noConversations":"No conversations yet. Start one with “New conversation”.","copilot.empty":"Chat with Copilot — it can inspect your projects and sessions, and help track goals.","copilot.projectContext":"Project context","copilot.noProject":"No project selected","copilot.projectLoadError":"Could not load projects","copilot.placeholder":"Type a message…","copilot.send":"Send","copilot.sendError":"Failed to send. Check that the Gateway is running.","copilot.loadError":"Failed to load. Check that the Gateway is running.","copilot.approvalRequired":"Approval required","copilot.approve":"Approve","copilot.reject":"Reject","copilot.search":"Search conversations…","copilot.rename":"Rename","copilot.deleteConversation":"Delete conversation","copilot.deleteConversationConfirm":"Delete this conversation? This cannot be undone.","copilot.running":"Copilot is thinking…","copilot.stop":"Stop","copilot.retry":"Retry","copilot.scrollDown":"Back to bottom","copilot.toolCall":"Tool call","copilot.toolResult":"Tool result","copilot.welcomeTitle":"Hi, I'm Copilot","copilot.welcomeSubtitle":"I can inspect your projects and sessions, track goals, and run approved actions.","copilot.suggestion1":"How is overall project progress?","copilot.suggestion2":"Which sessions are running now?","copilot.suggestion3":"Help me plan the next iteration","copilot.settings":"Copilot settings","copilot.settingsBack":"Back to chat","copilot.settingsDescription":"Manage the Copilot runtime, memory, automations, and extensions.","copilot.memoryTitle":"Memory","copilot.memoryDescription":"Global facts, preferences, and decisions the Copilot remembers. Writing is done by the model's tools; use this to review and prune.","copilot.memoryEmpty":"No memory entries yet.","copilot.overviewRuntime":"Runtime status","copilot.runtimeOnline":"Online","copilot.toolsEnabledCount":"{enabled}/{total} enabled","copilot.runtimeTitle":"Runtime","copilot.runtimeDescription":"Copilot is orchestrated natively by the ForgeBadger Gateway with no external Harness service.","copilot.nativeRuntime":"Gateway native","copilot.followSystemDefault":"Follow system default","copilot.edit":"Edit","copilot.editPrompt":"Edit message (drops the message and everything after it, then reruns the turn)","copilot.editSubmit":"Save & rerun","copilot.editCancel":"Cancel","copilot.editFailed":"Edit failed. Please try again.","copilot.thinking":"Reasoning","copilot.thinkingCount":"Reasoning · {chars} chars","copilot.capabilities":"Available tools","copilot.capabilitiesEmpty":"No tools available.","copilot.capabilitiesLoadError":"Failed to load the tool list.","copilot.capabilitiesToggleError":"Failed to update the tool switch. Please retry.","copilot.playbooksTitle":"Copilot playbooks","copilot.playbooksEmpty":"No playbooks","copilot.playbooksManage":"Manage playbooks","copilot.playbooksDescription":"Playbooks guide Copilot through platform tools and have independent switches. Install and manage CLI Skills separately on the Skills page.","copilot.playbooksEnabledCount":"{enabled}/{total} currently available","copilot.playbooksLoadError":"Failed to load playbooks. Please retry.","copilot.playbooksToggleError":"Failed to update the playbook switch. Please retry.","copilot.playbooksSaveError":"Failed to save the playbook. Retry, or reopen the editor to review an updated version.","copilot.playbookDisabled":"Disabled","copilot.playbookReviewRequired":"Custom content preserved. Review and save against the current version before use.","copilot.playbookRequiredTools":"Required tools","copilot.playbookEdit":"Edit / review content","copilot.playbookContent":"Playbook content","copilot.playbookReviewHelp":"Saving confirms review against the current version and required tools. Edits apply only to Copilot; grant-bound conversations use unmodified bundled playbooks only.","copilot.playbookSave":"Save and confirm version","copilot.playbooksRetry":"Retry","copilot.toolUnavailable":"Currently unavailable","copilot.toolAuthorization":"Matching grant or exact approval","copilot.toolDesc.list_projects":"List the user's projects with name, path, status, and AI tool.","copilot.toolDesc.get_project":"Get a single project by id with full detail.","copilot.toolDesc.create_project":"Create a project with a matching grant or exact approval.","copilot.toolDesc.list_sessions":"List the user's AI CLI sessions with status, adapter, and project.","copilot.toolDesc.get_session":"Get a single session by id with status and details.","copilot.toolDesc.search_memory":"Search Copilot's scoped memory (global, project, or session) by keyword.","copilot.toolDesc.list_memory":"List Copilot's memory entries in a scope.","copilot.toolDesc.get_usage_summary":"Get usage statistics: session duration and estimated cost by adapter/project/model (all time), plus token consumption totals and top buckets. Optional 'days' limits the token statistics to the last N days.","copilot.toolDesc.get_session_output":"Read recent terminal output from a live CLI session to inspect progress or completion.","copilot.toolDesc.list_playbooks":"List available Copilot Skills (built-in Playbooks and imported packages), stable IDs and revisions, filtered by switches, compatibility, and required tools.","copilot.toolDesc.load_playbook":"Load a Copilot Skill by stable ID with instructions, revision, and resource paths. Reading a Skill does not grant tool execution authority.","copilot.toolDesc.read_skill_resource":"Read a UTF-8 reference file from a Skill package pinned to its revision. Does not access the host filesystem or execute scripts.","copilot.toolDesc.dispatch_task_to_session":"Currently unavailable: CLI adapters support manual execution only. Enabling the tool or approving an action does not remove this restriction.","copilot.toolDesc.pm_list_task_packets":"List the Project Manager task packets for a project — the development queue with per-item prompt, acceptance criteria, verification expectations, linked session, and queue status (planned/running/waiting_for_review/blocked/completed/cancelled).","copilot.toolDesc.pm_get_task_packet":"Get one Project Manager task packet by work item id: full prompt, acceptance criteria, expected verification, evidence requirements, runtime adapter, and linked-session status.","copilot.toolDesc.pm_prepare_task_packet":"Prepare a task packet and linked CLI session without launching the CLI or submitting a prompt. Execution is manual in the terminal. Requires a matching grant or exact approval.","copilot.toolDesc.write_memory":"Record a durable memory entry (fact, preference, decision, or project note).","copilot.currentModel":"Model","copilot.toolsSearch":"Search tools…","copilot.toolsSearchEmpty":"No matching tools.","copilot.toolGroupOperate":"Operate","copilot.toolGroupRead":"Read-only","copilot.toggleConversations":"Toggle conversation list","copilot.robotExpand":"Open in full console","copilot.robotSuggestion1":"How are my projects doing?","copilot.robotSuggestion2":"List running sessions","copilot.automationsTitle":"Scheduled automations","copilot.automationsDescription":"Create Copilot tasks that run on a schedule and deliver results to your conversation and notifications.","copilot.automationsManage":"Manage automations","copilot.automationsList":"Automations","copilot.automationsCreate":"New","copilot.automationsPrompt":"Task prompt","copilot.automationsSchedule":"Schedule type","copilot.automationsExpression":"Expression","copilot.automationsSave":"Create","copilot.automationsCreateFailed":"Creation failed; check your input.","copilot.automationsEmpty":'No automations yet. Click "New" to create one.',"copilot.automationsDeleteConfirm":"Delete this automation? This cannot be undone.","copilot.automationsRunNow":"Run now","copilot.automationsPause":"Pause","copilot.automationsEnable":"Enable","copilot.automationsSuggestions":"Suggested automations","copilot.automationsAccept":"Accept","copilot.automationsDismiss":"Dismiss","nav.skills":"Skills","nav.templates":"Templates","nav.models":"Model Providers","nav.usage":"Usage","nav.members":"Members","nav.history":"History","nav.settings":"Settings","nav.notifications":"Notifications","nav.guest":"Guest","nav.logout":"Log out","common.edit":"Edit","common.saving":"Saving...","nav.groupWorkspace":"Workspace","nav.groupResources":"Resources","nav.groupSystem":"System","nav.collapseSidebar":"Collapse sidebar","nav.expandSidebar":"Expand sidebar","cliConfig.configRoot":"Config directory","cliConfig.mainConfigFile":"Main config file","cliConfig.loadFailed":"Failed to load CLI config","cliConfig.providers":"Model Providers","cliConfig.hasKey":"Configured","cliConfig.noKey":"Not configured","cliConfig.defaultModel":"Default model","cliConfig.commonFields":"Common fields","cliConfig.fieldNotSet":"Not set","cliConfig.rawEditor":"Raw config editor","cliConfig.fileMissing":"missing","cliConfig.saved":"Saved","cliConfig.saveFailed":"Save failed","cliConfig.editRawFile":"Edit","cliConfig.rawFileContentUnavailable":"File content is unavailable; you can still click Edit and write new content.","cliConfig.loadFieldValuesFailed":"Failed to load config values","cliConfig.configMetadata":"Config metadata","commandPalette.title":"Command palette","commandPalette.description":"Jump to a page or run a common console action.","commandPalette.placeholder":"Search pages or actions","commandPalette.noResults":"No matching commands","commandPalette.navigation":"Navigation","commandPalette.actions":"Actions","commandPalette.showSidebar":"Show sidebar","commandPalette.hideSidebar":"Hide sidebar","dashboard.title":"Dashboard","dashboard.subtitle":"Projects, sessions, and your local AI CLI runtime at a glance.","dashboard.viewAll":"View all","dashboard.noSessions":"No sessions yet.","dashboard.recentSessions":"Recent sessions","dashboard.systemStatus":"System status","dashboard.adaptersHealth":"AI CLIs","dashboard.adaptersHealthReady":"{count} local CLIs available","dashboard.statusLoading":"Checking…","dashboard.runningNow":"{count} running","dashboard.emptySessionsDescription":"Create your first session from a project and drive local AI CLIs right in the browser.","dashboard.dependenciesHealth":"Dependencies","dashboard.dependenciesHealthDescription":"Local AI CLI and terminal dependencies.","dashboard.dependenciesHealthLoading":"Reading local AI CLI and terminal dependency status.","dashboard.dependenciesHealthUnavailable":"Dependency status is unavailable. Open Settings and retry discovery.","dashboard.runtimeRemediation.openSettings":"Open Settings","dashboard.terminalRuntime.ready":"The built-in terminal service is ready; sessions reconnect after Gateway restarts.","dashboard.terminalRuntime.unavailable":"The built-in terminal service is unavailable. Check Gateway logs and retry discovery.","dashboard.firstRunTitle":"Get ready for your first delivery","dashboard.firstRunDescription":"Once the terminal runtime, a CLI adapter, and a project are ready, start your first delivery from the project's development tasks.","dashboard.firstRunDependencies":"Dependencies","dashboard.firstRunProject":"Project","dashboard.firstRunSession":"Session","dashboard.firstRunReady":"Ready","dashboard.firstRunBlocked":"Needs attention","dashboard.firstRunProjectReady":"A project exists. Open it to launch a session.","dashboard.firstRunProjectMissing":"Create or import a local project first.","dashboard.firstRunSessionReady":"A session record exists. Continue or restart it.","dashboard.firstRunSessionMissing":"After dependencies and project setup are ready, create the first session from the project page.","dashboard.firstRunOpenProject":"Open project","dashboard.activationRuntime":"Terminal runtime","dashboard.activationAdapter":"CLI adapter","dashboard.activationProject":"Project","dashboard.activationSession":"Terminal preparation","dashboard.activationRuntimeLoading":"Checking the terminal persistence runtime.","dashboard.activationRuntimeUnavailable":"Terminal runtime status is unavailable. Open Settings and retry discovery.","dashboard.activationAdapterLoading":"Checking local Claude Code, OpenCode, Codex, and Kimi Code CLIs.","dashboard.activationAdapterUnavailable":"CLI adapter status is unavailable. Open Settings and retry discovery.","dashboard.activationAdapterReady":"At least one local AI CLI can launch sessions.","dashboard.activationAdapterMissing":"No launchable local AI CLI was found. Install or enable Claude Code, OpenCode, Codex, or Kimi Code.","dashboard.activationOpenSettings":"Open Settings","dashboard.activationDismiss":"Don't show again","dashboard.activationStartSession":"Start first session","dashboard.activationContinueSession":"Continue session","runtimeSetup.readyTitle":"Terminal runtime is ready","runtimeSetup.readyDescription":"The built-in terminal service hosts CLI processes independently, allowing reconnection after browser disconnects or Gateway restarts.","runtimeSetup.unavailableTitle":"Terminal runtime status is unavailable","runtimeSetup.unavailableDescription":"Check Gateway logs and built-in terminal service status, then retry discovery. CLI processes cannot be recovered after the terminal service exits.","dashboard.configHealth":"Project Config","dashboard.configHealthDescription":"Projects and templates can generate config.","dashboard.modelHealth":"Model Providers","dashboard.modelHealthDescription":"At least one model is available for sessions.","dashboard.credentialHealth":"Credentials","dashboard.credentialHealthDescription":"Encrypted API keys are saved for injection.","dashboard.sessionHealth":"Sessions","dashboard.sessionHealthDescription":"At least one CLI session has been created.","dashboard.skillHealth":"Skills","dashboard.skillHealthDescription":"Skills are ready for project enablement.","notifications.title":"Notifications","notifications.subtitle":"Review permission, completion, interruption, failure, and session notifications from every Code CLI.","notifications.emptyTitle":"No notifications yet","notifications.emptyDescription":"Session status changes and important events from every Code CLI will appear here.","notifications.unread":"Unread","notifications.markAllRead":"Mark all read","notifications.viewAll":"View all","notifications.clearAll":"Clear all","notifications.sessionCreated":"Session created","notifications.sessionStatusChanged":"Session status changed","notifications.sessionDeleted":"Session deleted","notifications.claudeNotification":"Claude Code notification","notifications.claudePermissionRequest":"Claude Code permission request","notifications.opencodePermissionRequest":"OpenCode permission request","notifications.codexPermissionRequest":"Codex permission request","notifications.kimiPermissionRequest":"Kimi Code permission request","notifications.piPermissionRequest":"PI permission request","notifications.cliNotification":"Code CLI notification","notifications.taskCompleted":"Task completed","notifications.taskInterrupted":"Task interrupted","notifications.taskFailed":"Task failed","notifications.copilotAutomationCompleted":"Copilot automation completed","notifications.sessionEnded":"Session ended","notifications.projectContext":"Project","notifications.sessionContext":"Session","notifications.cliContext":"CLI","notifications.openSession":"Open session","notifications.claudePermissionDenied":"Claude Code permission denied","notifications.opencodePermissionDenied":"OpenCode permission denied","notifications.codexPermissionDenied":"Codex permission denied","notifications.kimiPermissionDenied":"Kimi Code permission denied","notifications.piPermissionDenied":"PI permission denied","notifications.applyProviderSucceeded":"Provider applied successfully","notifications.applyProviderFailed":"Failed to apply provider","notifications.modelSyncSucceeded":"Models synced successfully","notifications.modelSyncFailed":"Model sync failed","notifications.tabAll":"All","notifications.tabSessionEvents":"Session events","notifications.tabAppActions":"App actions","notifications.viewDetails":"View details","notifications.noUnread":"No unread notifications","snapshots.title":"History Snapshots","snapshots.subtitle":"Review Gateway-saved session snapshots and structured history without storing terminal scrollback.","snapshots.loading":"Loading history snapshots...","snapshots.emptyTitle":"No snapshots yet","snapshots.emptyDescription":"Snapshots are created after sessions start.","snapshots.session":"Session","snapshots.runtimeSessionName":"Terminal persistence session","snapshots.model":"Model","snapshots.agent":"Agent","snapshots.configVersion":"Config version","snapshots.createdAt":"Created","snapshots.filters":"Filters","snapshots.allProjects":"All projects","snapshots.allSessions":"All sessions","snapshots.viewSession":"View session","snapshots.viewProject":"View project","snapshots.restore":"Restore snapshot","snapshots.restoring":"Restoring...","snapshots.restoreConfirm":"Restore the session from this snapshot. If the original terminal persistence session is unavailable, ForgeBadger will recreate it from snapshot metadata. Continue?","snapshots.noTerminalHistory":"Snapshots store session metadata only; terminal scrollback remains in the platform terminal persistence runtime.","usage.title":"Usage","usage.subtitle":"Real token usage collected from each AI CLI's local data. No cost estimates.","usage.loading":"Loading usage analytics...","usage.emptyTitle":"No usage yet","usage.emptyDescription":"Click Sync to collect token usage from Claude Code and OpenCode.","usage.totalTokens":"Total tokens","usage.totalInput":"Input","usage.totalOutput":"Output","usage.totalCacheRead":"Cache read","usage.totalCacheWrite":"Cache write","usage.totalReasoning":"Reasoning","usage.cacheHitRate":"Cache hit rate","usage.cacheHitRateHint":"cache reads ÷ (uncached input + cache write + cache read)","usage.requests":"Requests","usage.sync":"Sync","usage.syncing":"Syncing...","usage.syncDone":"Synced","usage.syncFailed":"Sync failed","usage.byAdapter":"By adapter","usage.byProject":"By project","usage.byModel":"By model","usage.group":"Group","usage.input":"Input","usage.output":"Output","usage.cacheRead":"Cache read","usage.cacheWrite":"Cache write","usage.reasoning":"Reasoning","usage.total":"Total","usage.dailyTrend":"Daily token trend","usage.last30Days":"Last 30 days","usage.activityTitle":"Project activity (by day)","usage.unassigned":"Unassigned","members.title":"Members","members.subtitle":"Manage user roles and status for this local ForgeBadger instance.","members.loading":"Loading members...","members.emptyTitle":"No members yet","members.emptyDescription":"Registered users will appear here.","members.role":"Role","members.status":"Status","members.admin":"Admin","members.user":"User","members.active":"Active","members.disabled":"Disabled","members.save":"Save","members.saving":"Saving...","members.selfManaged":"Current account","members.updateFailed":"Failed to update member","members.accessDeniedTitle":"Admin access required","members.accessDeniedDescription":"Only admins can view and modify member roles.","skills.title":"Skills","skills.subtitle":"Enable or disable skills for your agents.","skills.install":"Install Skill","skills.installSubtitle":"Install a Skill from Local, ClawHub, or GitHub sources.","skills.loading":"Loading skills...","skills.emptyTitle":"No skills yet","skills.emptyDescription":"Skills will appear here once added.","skills.source":"Source","skills.sourceAll":"All sources","skills.sourceFilter":"Source filter","skills.sourceCatalog":"Source catalog","skills.selectSource":"Select source","skills.installSource":"Install source","skills.installSkill":"Install Skill","skills.installing":"Installing...","skills.installSuccess":"Skill installed","skills.installFailed":"Failed to install Skill","skills.sourceLocal":"Local","skills.sourceClawHub":"ClawHub","skills.sourceGitHub":"GitHub","skills.enabled":"Enabled","skills.enabledForProject":"Enabled for project","skills.version":"Version","skills.content":"Content","skills.createSkill":"Create Skill","skills.editSkill":"Edit Skill","skills.saveSkill":"Save Skill","skills.saving":"Saving...","skills.required":"Skill name and content are required","skills.saveFailed":"Failed to save Skill","skills.deleteConfirm":"Delete this Skill?","skills.preview":"Preview","skills.previewEmpty":"Nothing to preview yet","skills.remoteUrl":"Remote Skill URL","skills.previewSource":"Preview Remote Skill","skills.previewingSource":"Previewing...","skills.remotePreviewTitle":"Remote preview","skills.remotePreviewProvenance":"Source","skills.installedDisabledHint":"Remote and catalog Skills are installed disabled by default and must be enabled explicitly.","skills.quickCreateTemplates":"Quick-create templates","skills.templatesDescription":"Choosing a template prefills the name, description, version, and SKILL.md content. You can still edit before saving.","skills.applyTemplate":"Apply template","skills.syncLocal":"Rescan local Skills","skills.discoveredLocal":"Discovered local Skills","skills.discoveryRoots":"Scan roots","skills.discoveryHint":"Local Skill discovery scans only Claude Code and Agents skills directories by default; to override directories, check the Gateway startup environment for FORGEBADGER_SKILL_DIRS, CLAUDE_CONFIG_DIR, and AGENTS_HOME.","skills.resourcePackage":"UTF-8 resource package","skills.markdownOnly":"Markdown only (no supporting resources)","skills.packagesRejected":"These packages were skipped because they contain unsupported, oversized, or unsafe resources.","skills.localSyncSummary":"Created / updated / deleted / skipped","skills.catalogInstall":"Install Skill From Catalog","skills.catalogInstallDescription":"Install a remote catalog Skill package as a Skill owned by this user.","skills.catalogEmpty":"No installable Skill catalog items. Refresh a Skill catalog first.","skills.installCatalogItem":"Install catalog Skill","models.title":"Model Providers","models.subtitle":"Manage AI models and providers.","models.providerCenterSubtitle":"Manage providers, API keys, models, and CLI config apply for Claude Code, OpenCode, Codex, and Kimi Code.","models.apiFormatAnthropic":"Anthropic","models.apiFormatOpenai":"OpenAI","models.apiFormatOpenaiCompatible":"OpenAI-compatible","models.apiFormatGoogle":"Google","models.apiFormatBedrock":"AWS Bedrock","models.apiFormatLocal":"Local","models.apiFormatHintAnthropic":"Native Anthropic protocol (Claude models)","models.apiFormatHintOpenai":"Official OpenAI protocol","models.apiFormatHintOpenaiCompatible":"Third-party endpoint compatible with the OpenAI protocol","models.apiFormatHintGoogle":"Google Gemini protocol","models.apiFormatHintBedrock":"Models hosted on AWS Bedrock","models.apiFormatHintLocal":"Local inference endpoint","models.authTypeApiKey":"API Key","models.authTypeBearerToken":"Bearer Token","models.authTypeOauth":"OAuth","models.authTypeNone":"No auth","models.authTypeHintApiKey":"Authenticate with the provider API key","models.authTypeHintBearerToken":"Authenticate with a bearer token","models.authTypeHintOauth":"OAuth authorization","models.authTypeHintNone":"No credential required (local or internal endpoint)","models.customCapabilitiesPlaceholder":"Other capabilities, comma-separated","models.syncRequiresCredential":"Requires an active credential first","models.diagnosticsTab":"Diagnostics","models.cliStatusTitle":"CLI Applied Status","models.cliStatusDescription":"The provider and model currently in effect in each CLI's global config.","models.cliStatusActiveHere":"Active","models.cliStatusNoModel":"No model recorded","models.cliStatusNotConfigured":"Not configured","models.cliStatusStale":"Config modified externally","models.cliStatusApply":"Apply","models.cliStatusViewConfig":"View config","models.cliStatusApplyUnsupported":"This provider does not support this CLI","models.cliStatusCliMissing":"CLI not installed","models.cliStatusCheckFailed":"detection failed","models.cliStatusLoadFailed":"Could not load the CLI applied status.","models.applyAdvancedOptions":"Advanced options","models.applyChangeSummary":"View change summary","models.balanceLoading":"Checking balance…","models.balanceNotQueried":"Balance not queried yet","models.cliConfigSection":"CLI Config Files","models.cliConfigSectionDescription":"View each CLI's global config file status and edit raw content.","models.cliConfigAdminOnly":"Config file editing requires admin permission.","models.providers":"Providers","models.providersDescription":"Configured provider profiles.","models.addProvider":"Add provider","models.addProviderDescription":"Quick-fill from a preset or enter the provider connection details manually; after saving an API key, available models are synced from the provider immediately.","models.editProvider":"Edit provider","models.editProviderDescription":"Change the provider connection details and supported CLIs; manage models and credentials in the tabs below.","models.providerKeyLocked":"Cannot be changed after creation.","models.adapterNotSupported":"not supported by this provider","models.presets":"Provider presets","models.presetsDescription":"Click a preset to prefill the connection details. Presets only carry endpoints and auth settings — the model list is always synced live from the provider.","models.searchProviderPlaceholder":"Search provider presets","models.noPresetMatches":"No matching presets. Fill in the form below manually.","models.authType":"Auth type","models.openaiBaseUrl":"OpenAI-compatible base URL","models.anthropicBaseUrl":"Anthropic base URL","models.baseUrlRequired":"Fill in at least one base URL (OpenAI-compatible or Anthropic).","models.allowPlaintextHttp":"Trust plaintext HTTP endpoint (this address uses http://)","models.allowPlaintextHttpHint":"When enabled, credentials may be sent to this http:// address. All address/hostname safety checks still apply; only the protocol restriction is relaxed.","models.supportedAdapters":"Supported CLIs","models.setupCredentialOptionalHint":"Optional. When filled, the credential is saved and models are synced immediately; you can also add it later from the provider details.","models.modelSyncFailed":"Model sync failed","models.emptyWorkspaceTitle":"No provider configured","models.searchConfiguredProviders":"Search configured providers","models.catalogMatches":"matches","models.emptyProviders":"No providers yet. Add one manually.","models.providerProfile":"Provider Profile","models.providerProfileDescription":"Provider is the source of truth for models and credentials.","models.providerCreated":"Provider created","models.providerDeleted":"Provider deleted","models.deleteProviderTitle":"Delete provider","models.deleteProviderWarning":"Deleting the provider also removes its models and API keys.","models.deleteModelTitle":"Delete model","models.deleteModelWarning":"The model will no longer be available. Sessions and agents using it should switch to another model first.","models.deleteCredentialTitle":"Delete API key","models.deleting":"Deleting...","models.modelUnit":"models","models.providerKey":"Provider Key","models.apiFormat":"API Format","models.applyTargets":"Supported targets","models.applyScope":"Apply to","models.region":"Region","models.productType":"Product type","models.productTypePaygApi":"Pay-as-you-go API","models.productTypeCodingPlan":"Coding Plan","models.productTypeTokenPlan":"Token Plan","models.productTypeSubscription":"Subscription","models.productTypeLocal":"Local","models.noProviderSelected":"Select a provider.","models.credentials":"API Keys","models.credentialsDescription":"Paste the provider API key only; secrets are encrypted and never echoed in preview.","models.credentialLabel":"Credential name","models.defaultCredentialLabel":"Default API key","models.apiKeyPlaceholder":"Paste provider API key","models.saveAndSyncModels":"Save and sync models","models.noCredentialRequired":"This provider does not require an API key.","models.saveCredential":"Save credential","models.credentialSaved":"Credential saved","models.credentialRotated":"Credential rotated","models.credentialDeleted":"Credential deleted","models.credentialRevoked":"Credential revoked","models.credentialRequired":"Select a credential","models.rotateSelectedCredential":"Rotate selected credential","models.deleteCredential":"Delete credential","models.deleteCredentialConfirm":"Delete this credential?","models.emptyCredentials":"No credentials yet. Host environment can still be used.","models.unnamedCredential":"Unnamed credential","models.modelsWorkspace":"Models","models.modelsWorkspaceDescription":"Sync models from the provider after saving a credential; manual model editing is for advanced adjustments.","models.modelProfileSaved":"Model profile saved","models.modelRequired":"Select a model","models.newModel":"New model","models.syncProviderModels":"Sync models","models.syncProviderModelsDescription":"Refresh the model list from the provider's live endpoint.","models.checkBalance":"Check balance","models.balanceNotSupported":"This provider does not support balance checks","models.balanceCheckFailed":"Balance check failed","models.balanceEmpty":"No balance data returned","models.balanceResetsAt":"Resets at","models.balanceUnavailable":"Unavailable","models.modelSyncComplete":"Models synced from provider","models.modelSyncNoChanges":"Models already up to date","models.emptyModelsForProvider":"This provider has no models yet. Save a credential and sync models, or add a model ID manually.","models.noModelsAvailable":"No models available","models.capabilities":"Capabilities","models.contextWindow":"Context window","models.contextWindowPlaceholder":"e.g. 131072","models.contextWindowHint":"Kimi Code requires a context window (tokens) for custom models. Leave blank to default to 256k when applied.","models.projectPath":"Project path","models.applyConfig":"Apply config","models.applyToCli":"Apply to CLI","models.applyToCliDescription":"Write the current provider, model, and credential into the selected CLI's native global config file.","models.roleMapping":"Model role mapping","models.roleMappingDescription":"Unset roles follow the primary model; Sonnet/Opus/Haiku pin the Claude Code aliases, Fable/Subagent are optional advanced slots.","models.followPrimaryModel":"Follow primary model","models.reasoningEffort":"Reasoning effort (model_reasoning_effort)","models.reasoningEffortDefault":"Default (not written)","models.opencodeApplyHint":"Adds this provider and all synced models to the OpenCode config; the active model is selected inside OpenCode.","models.applyToCliDefaultModel":"Default model","models.applyToCliPiHint":"All active models of this provider are written to models.json; this selection only picks pi's startup default and can be changed later with /model.","models.applyToCliNoCredential":"No credential (use host environment)","models.applyToCliSuccess":"Applied to {targetPath}","models.applyToCliRollbackHint":"An encrypted backup was created before writing; you can roll back through the CLI config API.","models.applyToCliFailed":"Apply failed","models.applyPreviewFailed":"Failed to generate preview","models.applyTargetPath":"Target file","models.applyingToCli":"Applying…","models.claudeRouteBanner":"This provider has only an OpenAI endpoint and no Anthropic endpoint. Enable the Gateway route to apply it to Claude Code.","models.claudeRouteBannerDescription":"Once enabled, Claude Code connects to the Gateway's local endpoint and the real API key is never written into the Claude config.","models.claudeRouteEnableAndApply":"Enable route & apply","models.claudeRouteApply":"Apply (via Gateway route)","models.claudeRouteEnabledHint":"Gateway route is enabled; Claude Code will connect to {gatewayUrl}","models.claudeRouteUnsupported":"This protocol format does not support the Claude Code Gateway route yet","models.claudeRouteBadge":"Claude via Gateway route","models.providerRequired":"Select a provider","models.providerApplyDisabled":"Provider apply disabled","models.providerApplyEnabled":"Provider apply enabled","models.sdkInstalled":"installed","models.sdkMissing":"missing","models.loading":"Loading models...","models.emptyTitle":"No models yet","models.emptyDescription":"Models will appear here once configured.","models.provider":"Provider","models.default":"Default","models.catalog":"Model Catalog","models.catalogDescription":"Manage providers, API keys, models, and CLI config apply.","models.advancedModelEditor":"Advanced: edit models manually","models.providerGroup":"Provider group","models.modelId":"Model ID","models.endpoint":"Endpoint","models.addModel":"Add Model","models.saveModel":"Save Model","models.saving":"Saving...","models.created":"Model added","models.updated":"Model updated","models.defaultUpdated":"Default model updated","models.deleted":"Model deleted","models.apiKeys":"API Keys","models.apiKeysDescription":"Keys are submitted only to the Gateway for encrypted storage.","models.apiKey":"API Key","models.addApiKey":"Add API Key","models.apiKeyCreated":"API key added","models.apiKeyRotated":"API key rotated","models.apiKeyDeleted":"API key deleted","models.configuredModels":"Configured Models","models.configuredModelsDescription":"These models can be selected when creating sessions.","models.failedLoad":"Failed to load models","models.storedKeys":"Stored Keys","models.storedKeysDescription":"Key values are always masked.","models.loadingApiKeys":"Loading API keys...","models.failedLoadApiKeys":"Failed to load API keys","models.emptyApiKeysTitle":"No API keys yet","models.emptyApiKeysDescription":"Stored credentials become available after adding a key.","models.editModel":"Edit model","models.setDefault":"Set default","models.checkHealth":"Check health","models.healthReady":"Ready","models.healthReadyDescription":"Model configuration can be used to create sessions.","models.healthNeedsAttention":"Needs attention","models.healthNeedsAttentionDescription":"Check provider, model ID, or status.","models.checkEndpoint":"Check endpoint","models.endpointTest":"Endpoint speed test","models.endpointTestDescription":"Check provider endpoint reachability and latency.","models.checkingEndpoint":"Checking endpoint...","models.endpointHealthy":"Endpoint reachable","models.endpointFailed":"Endpoint unreachable","models.deleteModel":"Delete model","models.deleteModelConfirm":"Delete this model record?","models.rotate":"Rotate","models.rotateApiKey":"Rotate API key","models.deleteApiKey":"Delete API key","models.deleteApiKeyConfirm":"Delete this API key?","templates.title":"Templates","templates.subtitle":"Browse and manage project templates.","templates.loading":"Loading templates...","templates.emptyTitle":"No templates yet","templates.emptyDescription":"Templates will appear here once added.","templates.builtin":"Built-in","templates.adapter":"Adapter","templates.createCustom":"Create Custom Template","templates.creating":"Creating...","templates.created":"Template created","templates.cloned":"Template cloned","templates.saved":"Template saved","templates.saving":"Saving...","templates.deleted":"Template deleted","templates.exported":"Template exported","templates.imported":"Template imported","templates.available":"Available Templates","templates.availableDescription":"Built-in templates are read-only. Clone to edit.","templates.governedTitle":"Templates in Use","templates.seedTitle":"Seed-only Templates","templates.selectTemplate":"Select a template","templates.noTracking":"No template","templates.editorDescription":"Edit custom template files. Variables render during project apply.","templates.cloneName":"Clone name","templates.clone":"Clone","templates.filePath":"File Path","templates.fileContent":"File content","templates.loadFile":"Load File","templates.save":"Save Template","templates.deleteConfirm":"Delete this custom template?","templates.importExport":"Import / Export","templates.importExportDescription":"Move templates between environments with JSON template packages.","templates.packageJson":"Template package JSON","templates.export":"Export","templates.import":"Import","templates.versionHistory":"Version history","templates.restore":"Restore","templates.restoring":"Restoring...","templates.restored":"Template restored","templates.restoreConfirm":"Restore the current template to this version? The current state is saved as a new history entry first.","templates.noVersions":"No version history yet","templates.catalogInstall":"Install From Catalog","templates.catalogInstallDescription":"Import remote catalog template packages as custom templates for this user.","templates.catalogEmpty":"No installable templates. Refresh a template catalog first.","templates.catalogInstalled":"Catalog template installed","templates.install":"Install","templates.installing":"Installing...","templates.extract":"Extract from Project","templates.extractTitle":"Extract Template from Project","templates.extractDescription":"Reads this project's current AI CLI config (root instruction files and the adapter config directory) and captures it as a reusable new template.","templates.extractBind":"Bind this project to the new template","templates.extracting":"Extracting...","templates.extractFailed":"Extraction failed","templates.extractedFiles":"Extracted files","templates.skippedFiles":"Skipped files","templates.gitImport":"Import From Git","templates.gitImportDescription":"Import instruction files and adapter config directories from a public Git repository as a reusable template.","templates.gitImportUrl":"Repository URL","templates.gitImportBranch":"Branch (optional)","templates.gitImporting":"Importing...","templates.gitImported":"Git repository template imported","projects.title":"Projects","projects.subtitle":"Manage your AI programming projects.","projects.new":"New Project","projects.create":"Create Project","projects.import":"Import Project","projects.newSubtitle":"Set up a new project for AI-assisted development.","projects.details":"Project Details","projects.optionalDescription":"Optional description","projects.loading":"Loading projects...","projects.emptyTitle":"No projects yet","projects.emptyDescription":"Create your first project to get started.","projects.back":"Back to Projects","projects.loadingOne":"Loading project...","projects.notFound":"Project not found.","projects.generateConfig":"Generate Config","projects.previewConfig":"Preview Config","projects.applyConfig":"Apply Config","projects.configPreview":"Config Preview","projects.previewFiles":"Files to write","projects.conflicts":"Conflicts","projects.noConflicts":"No conflicts","projects.conflictDecision":"Conflict decision","projects.skip":"Skip","projects.overwrite":"Overwrite","projects.blocked":"Blocked","projects.configNeedsReviewTitle":"Config needs review","projects.configNeedsReviewDescription":"The project was imported, but automatic config generation did not finish. Preview config, resolve conflicts, then apply it.","projects.configPreviewDescription":"Review Config only generates a preview and does not modify project files. Existing files default to skip; template content is written only when you explicitly choose overwrite.","projects.existingHash":"Existing","projects.incomingHash":"Generated","projects.reviewConfig":"Review Config","projects.generating":"Generating...","projects.newSession":"New Session","projects.creating":"Creating...","projects.failedGenerateConfig":"Failed to generate config","projects.failedCreateSession":"Failed to create session","projects.failedCreateProject":"Failed to create project","projects.noSessions":"No sessions for this project yet.","projects.projectManager":"Project Manager","projects.projectManagerLoading":"Loading project manager state...","projects.devTasks":"Dev Tasks","projects.devTasksDescription":"From goal to delivery: move work items through stages and close the loop with evidence.","projects.devTasksRefresh":"Refresh dev tasks","projects.projectManagerStages":"Development stages","projects.projectManagerPipelineTitle":"Delivery pipeline","projects.projectManagerPipelineDescription":"Stages flow left to right; work items move along the pipeline.","projects.projectManagerStageBacklog":"Backlog","projects.projectManagerStageEmptyTitle":"No development stages yet","projects.projectManagerStageEmptyBody":"Seed the standard SDLC flow (requirements → architecture → implementation → testing → release) with one click, or create a stage manually.","projects.projectManagerStageSeedTemplate":"Use SDLC template","projects.projectManagerStageCreate":"New stage","projects.projectManagerStageName":"Stage name","projects.projectManagerStageNameRequired":"Stage name is required","projects.projectManagerStageDescription":"Stage description (optional)","projects.projectManagerStageRename":"Rename","projects.projectManagerStageDelete":"Delete stage","projects.projectManagerStageDeleteConfirm":"Work items in this stage move back to the backlog.","projects.projectManagerStageMoveLeft":"Move left","projects.projectManagerStageMoveRight":"Move right","projects.projectManagerStageLaneEmpty":"Move work items into this stage","projects.projectManagerStageAssign":"Stage","projects.projectManagerStageStatusActive":"Active","projects.projectManagerStageStatusCompleted":"Completed","projects.projectManagerStageStatusArchived":"Archived","projects.projectManagerStageMutationError":"Stage operation failed","projects.projectManagerDependencies":"Dependencies","projects.projectManagerDependencyBlockedBy":"Blocked by","projects.projectManagerDependencyBlocking":"Blocking","projects.projectManagerDependencyAdd":"Add blocker","projects.projectManagerDependencyAddPlaceholder":"Select a blocking work item...","projects.projectManagerDependencyNone":"No dependencies","projects.projectManagerDependencyMutationError":"Dependency operation failed","projects.projectManagerLinkedSession":"Linked session","projects.projectManagerEventStageCreated":"Stage created","projects.projectManagerEventStageUpdated":"Stage updated","projects.projectManagerEventStageDeleted":"Stage deleted","projects.projectManagerEventDependencyAdded":"Dependency added","projects.projectManagerEventDependencyRemoved":"Dependency removed","projects.projectManagerNoGoalTitle":"No project goal yet","projects.projectManagerNoGoalBody":"Set a project goal so execution stays grounded.","projects.projectManagerNoWorkItemsTitle":"No work items yet","projects.projectManagerNoWorkItemsBody":"Created work items will appear here.","projects.projectManagerLoadFailed":"Could not load project manager state. Refresh or check Gateway availability.","projects.projectManagerNotFound":"Project manager state was not found for this project.","projects.projectManagerDisabledActionHint":"Manage project goals, work items, and ledger state.","projects.projectManagerGoal":"Goal","projects.projectManagerEditGoal":"Edit goal","projects.projectManagerSaveGoal":"Save goal","projects.projectManagerCancel":"Cancel","projects.projectManagerGoalSummary":"Summary","projects.projectManagerGoalStatus":"Goal status","projects.projectManagerGoalMutationError":"Could not save project goal.","projects.projectManagerGoalSummaryRequired":"Goal summary is required.","projects.projectManagerTextListHint":"One item per line.","projects.projectManagerWorkItems":"Work items","projects.projectManagerBoard":"Board","projects.projectManagerTable":"Table","projects.projectManagerTaskQueue":"Task queue","projects.projectManagerTaskQueueDescription":"Task packets are grouped by queue status; start linked sessions directly.","projects.projectManagerTaskQueueLoading":"Loading task queue...","projects.projectManagerTaskQueueLoadError":"Could not load task queue.","projects.projectManagerTaskQueueEmptyTitle":"No task packets yet","projects.projectManagerTaskQueueEmptyBody":"Create work items to generate dispatchable task packets.","projects.projectManagerTaskQueueEmptyColumn":"No task packets in this column","projects.projectManagerTaskQueuePlanned":"Planned","projects.projectManagerTaskQueueRunning":"Running","projects.projectManagerTaskQueueWaitingForReview":"Waiting for review","projects.projectManagerTaskQueueBlocked":"Blocked","projects.projectManagerTaskQueueCompleted":"Completed","projects.projectManagerTaskQueueCancelled":"Cancelled","projects.projectManagerCreateWorkItem":"Create work item","projects.projectManagerCreateWorkItemBody":"New work items start in Todo; add evidence from the work item details or during review.","projects.projectManagerEditWorkItem":"Edit work item","projects.projectManagerEditWorkItemBody":"Edit title, description, priority, and acceptance criteria only. Status and evidence use separate actions.","projects.projectManagerSaveWorkItem":"Save work item","projects.projectManagerUpdateWorkItemError":"Could not update work item.","projects.projectManagerDeleteWorkItem":"Delete work item","projects.projectManagerDeleteWorkItemBody":"The work item will be removed from the active list, while the ledger keeps a safe deletion marker.","projects.projectManagerDeleteWorkItemError":"Could not delete work item.","projects.projectManagerViewDetails":"View details","projects.projectManagerWorkItemDetail":"Work item details","projects.projectManagerFilterByStatus":"Filter by status","projects.projectManagerSearchPlaceholder":"Search work items by title...","projects.projectManagerAllStatuses":"All statuses","projects.projectManagerBatchActions":"Batch actions","projects.projectManagerBatchTargetStatus":"Batch target status","projects.projectManagerBatchStatusError":"Could not update selected work item statuses.","projects.projectManagerBatchStatusSelectionRequired":"Select at least one work item.","projects.projectManagerBatchStatusTargetRequired":"Choose an available target status.","projects.projectManagerBoardEmptyColumn":"No work items yet","projects.projectManagerClearSelection":"Clear selection","projects.projectManagerMoveSelected":"Move selected","projects.projectManagerNoBatchTargets":"Selected work items do not share an allowed target status.","projects.projectManagerSelectWorkItem":"Select work item","projects.projectManagerSelected":"Selected","projects.projectManagerWorkItemTitle":"Title","projects.projectManagerWorkItemTitleRequired":"Work item title is required.","projects.projectManagerWorkItemDescription":"Description","projects.projectManagerCreateWorkItemError":"Could not create work item.","projects.projectManagerAttachEvidence":"Attach evidence","projects.projectManagerEvidenceReferenceHint":"Evidence references are pointers. Do not paste raw terminal transcripts, Feishu message bodies, provider payloads, or secrets.","projects.projectManagerEvidenceKindRequired":"Evidence kind is required.","projects.projectManagerEvidenceReferenceRequired":"Add a reference or path.","projects.projectManagerEvidenceUnsafeValue":"Use a short reference or path, not raw output or secrets.","projects.projectManagerEvidenceAttachError":"Could not attach evidence reference.","projects.projectManagerEvidenceReferenceType":"Reference type","projects.projectManagerEvidenceTypeCustom":"Custom","projects.projectManagerEvidenceTypeFilePath":"File path","projects.projectManagerEvidenceTypeTerminalSnapshot":"Terminal snapshot","projects.projectManagerEvidenceTypeSession":"Session","projects.projectManagerEvidenceSessionId":"Session ID","projects.projectManagerEvidencePathRequired":"Add a file path.","projects.projectManagerEvidenceSessionRequired":"Add a Session ID.","projects.projectManagerTerminalSnapshotMarkerHint":"Only a terminal snapshot marker and Session ID are saved; terminal scrollback is not stored.","projects.projectManagerTaskPacket":"Task packet","projects.projectManagerTaskPacketRuntimeAdapter":"CLI","projects.projectManagerTaskPacketRuntimeTemplate":"Template","projects.projectManagerTaskPacketStatus":"Status","projects.projectManagerTaskPacketReady":"Ready","projects.projectManagerTaskPacketBlockedNoSession":"Needs linked session","projects.projectManagerTaskPacketBlockedInactiveSession":"Linked session is not running","projects.projectManagerTaskPacketLinkedSession":"Linked session","projects.projectManagerTaskPacketPrompt":"Prompt","projects.projectManagerTaskPacketExpectedVerification":"Expected verification","projects.projectManagerTaskPacketEvidenceRequirements":"Evidence requirements","projects.projectManagerTaskPacketOpenSession":"Open linked session","projects.projectManagerTaskPacketSelectSession":"Select session","projects.projectManagerTaskPacketNoSessions":"No linkable sessions","projects.projectManagerTaskPacketLinkSession":"Link session","projects.projectManagerTaskPacketQuickStart":"Create session","projects.projectManagerTaskPacketStart":"Create task session","projects.projectManagerTaskPacketSelectCli":"Select a Code CLI","projects.projectManagerTaskPacketSelectCliDescription":"Pick the Code CLI that will run this task; the created session attaches to the work item.","projects.projectManagerTaskPacketNoCliAvailable":"No launchable Code CLI detected. Install one or enable it in settings.","projects.projectManagerTaskPacketStarting":"Creating...","projects.projectManagerTaskPacketLoadError":"Could not load task packet.","projects.projectManagerTaskPacketLinkError":"Could not link session.","projects.projectManagerTaskPacketStartError":"Could not create task session.","projects.projectManagerTaskPacketSessionRequired":"Select a session.","projects.projectManagerTaskPacketUnavailable":"No task packet available.","projects.projectManagerFilterEmptyTitle":"No work items match this status","projects.projectManagerFilterEmptyBody":"Try a different status filter or create a new work item.","projects.projectManagerRefKind":"Kind","projects.projectManagerRefLabel":"Label","projects.projectManagerRefId":"Reference","projects.projectManagerChangeStatus":"Change status","projects.projectManagerDoneReasonTitle":"Completion reason required","projects.projectManagerDoneReasonBody":"Record why the selected tasks are manually complete. This does not verify, accept or integrate delivery.","projects.projectManagerDoneReasonLabel":"Manual completion reason","projects.projectManagerDoneReasonRequired":"Enter a manual completion reason.","projects.projectManagerConfirmStatusChange":"Confirm status change","projects.projectManagerStatusMutationError":"Could not update work item status.","projects.projectManagerLedger":"Ledger","projects.projectManagerLedgerRefresh":"Refresh ledger","projects.projectManagerLedgerToggle":"Toggle ledger","projects.projectManagerLedgerFilterAll":"All","projects.projectManagerLedgerFilterStatusChanges":"Status changes","projects.projectManagerLedgerFilterEvidence":"Evidence","projects.projectManagerLedgerFilterManualCompletion":"Manual completion","projects.projectManagerLedgerFilterBlockers":"Blockers","projects.projectManagerLoadMoreLedger":"Load more ledger events","projects.projectManagerLedgerLoadFailed":"Could not load ledger events.","projects.projectManagerLedgerFilteredEmptyTitle":"No matching loaded events","projects.projectManagerLedgerFilteredEmptyBody":"Load more events or switch filters.","projects.projectManagerLedgerManualCompletionNote":"Completion was recorded without an evidence reference.","projects.projectManagerLedgerBlockerRecordedNote":"Blocker marker only; raw blocker details are not displayed.","projects.projectManagerLedgerBlockerResolvedNote":"Blocker resolution marker only; raw blocker details are not displayed.","projects.projectManagerConstraints":"Constraints","projects.projectManagerAcceptanceCriteria":"Acceptance criteria","projects.projectManagerEvidenceRefs":"Evidence","projects.projectManagerTraceRun":"Run","projects.projectManagerTraceAction":"Action","projects.projectManagerTraceEvidence":"Evidence","projects.projectManagerTraceSession":"Session","projects.projectManagerTraceLedger":"Ledger","projects.projectManagerTraceActionType":"Action type","projects.projectManagerTraceTarget":"Target","projects.projectManagerTraceEvidenceRefs":"Evidence refs","projects.projectManagerTraceApproval":"Approval","projects.projectManagerTraceExecution":"Execution","projects.projectManagerPriority":"Priority","projects.projectManagerPriorityHigh":"High priority","projects.projectManagerPriorityMedium":"Medium priority","projects.projectManagerPriorityLow":"Low priority","projects.projectManagerUpdated":"Updated","projects.projectManagerCreated":"Created","projects.projectManagerEvent":"Event","projects.projectManagerNoLedgerTitle":"No ledger events yet","projects.projectManagerNoLedgerBody":"Project manager events will appear in later workflow phases.","projects.projectManagerStatusTodo":"Todo","projects.projectManagerStatusInProgress":"In progress","projects.projectManagerStatusBlocked":"Blocked","projects.projectManagerStatusReadyForReview":"Ready for review","projects.projectManagerStatusDone":"Done","projects.projectManagerStatusCancelled":"Cancelled","projects.projectManagerStatusActive":"Active","projects.projectManagerStatusUnknown":"Unknown","projects.projectManagerEventGoalUpdated":"Goal updated","projects.projectManagerEventWorkItemCreated":"Work item created","projects.projectManagerEventWorkItemUpdated":"Work item updated","projects.projectManagerEventWorkItemDeleted":"Work item deleted","projects.projectManagerEventWorkItemStatusChanged":"Work item status changed","projects.projectManagerEventEvidenceAttached":"Evidence attached","projects.projectManagerEventBlockerRecorded":"Blocker recorded","projects.projectManagerEventBlockerResolved":"Blocker resolved","projects.projectManagerEventFeishuReferenceLinked":"Feishu reference linked","projects.projectManagerEventNextStepProposed":"Next step proposed","projects.projectManagerEventManualCompletionRecorded":"Manual completion recorded","projects.skillsComingSoon":"Skills management coming soon.","projects.model":"Model","projects.action":"Action","projects.deleteRecord":"Delete Record","projects.deleting":"Deleting...","projects.deleteFailed":"Failed to delete project","projects.deleteConfirm":"Only the ForgeBadger project record will be deleted. The server directory will not be removed. Continue?","projects.importTitle":"Import Project","projects.importSubtitle":"Import an existing project directory for AI-assisted development.","projects.importStepPath":"Step 1: Select Directory","projects.importStepScan":"Step 2: Review Scan Results","projects.importStepConfirm":"Step 3: Configure & Import","projects.directoryPath":"Directory Path","projects.pathRequired":"Path is required","projects.browseDirectory":"Browse","projects.scanDirectory":"Scan Directory","projects.scanning":"Scanning...","projects.validDirectory":"Valid directory found","projects.pathNotDirectory":"Path exists but is not a directory","projects.directoryNotFound":"Directory not found","projects.validDirectoryRequired":"Please enter a valid directory path to continue.","projects.projectName":"Project Name","projects.importing":"Importing...","projects.failedScan":"Failed to scan directory","projects.failedImport":"Failed to import project","projects.moreActions":"More actions","projects.configSyncTitle":"Template sync","projects.sessionsSummary":"{total} sessions · {running} running","projects.loadingRuntimeCli":"Detecting CLIs...","projects.selectRuntimeCli":"Select Runtime CLI","projects.runtimeUnavailable":"not installed","projects.runtimeCheckFailed":"detection failed","projects.runtimeLaunchDisabled":"launch disabled","projects.noLaunchableRuntimeCli":"No launchable local CLI was detected, so new sessions are disabled.","projects.runtimeCliRecoveryDescription":"Confirm the local claude, opencode, or codex command is available and the terminal persistence runtime requirements are met.","projects.runtimeBlockedByTerminalTitle":"Fix terminal runtime first","projects.runtimeBlockedByTerminalDescription":"CLI command discovery completed, but session launch is still blocked by the terminal runtime.","projects.openSettings":"Open Settings","projects.template":"Template","projects.credentialMode":"Credential Mode","projects.authenticationMethod":"Authentication Method","projects.hostEnvironmentHint":"Use the CLI's host environment and global config without extra model injection.","projects.launchSessionDescription":"Choose the Code CLI to launch; the session uses that CLI's host environment and global config.","projects.storedCredential":"Stored API Key","projects.storedCredentialDescription":"Use an API key encrypted by ForgeBadger and inject it into the matching CLI when the session starts.","projects.apiKey":"API Key","projects.noModel":"No model","projects.noApiKey":"No API key selected","projects.checkCompliance":"Check Compliance","projects.checkingCompliance":"Checking...","projects.configCompliance":"Config Compliance","projects.compliant":"Compliant","projects.needsAttention":"Needs Attention","projects.totalFiles":"Total Files","projects.missingFiles":"Missing","projects.identicalFiles":"Identical","projects.staleFiles":"Stale","projects.unsafeFiles":"Unsafe","projects.requiresDecision":"Files Requiring Decisions","projects.failedCompliance":"Failed to check config compliance","projects.stopTrackingTemplate":"Stop tracking template","projects.stopTrackingConfirm":"Stop tracking this template? Project files will not be modified — only the platform-level tracking is removed.","projects.unbinding":"Stopping…","projects.untrackedConfigTitle":"Independent Config","projects.untrackedConfigDescription":"This project is not tracking any template. The config files inside the project are the single source of truth.","projects.untrackedConfigHint":"To track a template again, align and apply it from the template management page.","projects.aiConfig":"AI Config","projects.gitTab":"Git","projects.gitBranches":"Git branches","projects.gitNewBranch":"New branch","projects.gitNewBranchTitle":"New branch","projects.gitNewBranchDesc":"Create a new branch from the current HEAD and switch to it.","projects.gitBranchNamePlaceholder":"Branch name, e.g. feature/login","projects.gitSwitchConfirmTitle":"Switch branch","projects.gitSwitchConfirmDesc":"Switch to branch {branch}?","projects.gitSwitchSuccess":"Switched to branch {branch}","projects.gitSwitchFailed":"Failed to switch branch","projects.gitCreateSuccess":"Created and switched to branch {branch}","projects.gitWorkingTreeDirty":"The working tree has {count} uncommitted change(s). Commit or clean them before switching branches.","projects.gitBranchCurrent":"current","projects.gitNoBranches":"No local branches yet","projects.gitLoadFailed":"Failed to load git branches","projects.filesTab":"Files","projects.graphTab":"Graph","projects.graphFiles":"Files","projects.graphSymbols":"Symbols","projects.graphRelations":"Relations","projects.graphIndexState":"Index state","projects.graphNotInitTitle":"CodeGraph is not initialized for this project","projects.graphNotInitDesc":"Run `codegraph init` in the project root to build the code graph index, then explore file dependencies, symbol calls, and impact analysis here.","projects.graphSchemaUnsupported":"The detected CodeGraph index schema is unsupported. Upgrade the local codegraph CLI and re-index this project.","projects.graphUnavailable":"The project graph is temporarily unavailable. Try again later.","projects.graphSearchPlaceholder":"Search symbols…","projects.graphNoResults":"No matching symbols","projects.graphCallers":"Callers","projects.graphCallees":"Callees","projects.graphImpact":"Impact","projects.graphTruncated":"Some files were pruned by relevance to keep rendering fast","projects.graphBackToFiles":"Back to file view","projects.graphHint":'A "symbol" is any named entity in your code: functions, classes, methods, interfaces, constants, routes. Search symbols to inspect call relationships; click a node to open its source in the Files tab. Switch to Change impact to analyze the blast radius of your current git changes.',"projects.graphViewFiles":"File view","projects.graphViewAffected":"Change impact","projects.graphAffectedAnalyze":"Analyze impact","projects.graphAffectedAnalyzing":"Analyzing…","projects.graphAffectedLoadingGit":"Reading git changes…","projects.graphAffectedNoGit":"This project is not a git repository; change impact analysis is unavailable.","projects.graphAffectedNoChanges":"No uncommitted git changes right now.","projects.graphAffectedChangedCount":"changed files","projects.graphAffectedSeeded":"directly touched symbols","projects.graphAffectedTouched":"symbols in blast radius","projects.workspace":"Workspace","projects.workspaceRefresh":"Refresh workspace","projects.workspaceRootPending":"Waiting for project root...","projects.workspaceNoProject":"No linked project.","projects.workspaceLoading":"Reading project files...","projects.workspaceLoadFailed":"Workspace failed to load","projects.workspaceEmpty":"No files to display.","projects.workspaceSelectFile":"Select a file on the left to view its content","projects.workspaceFileLoadFailed":"File failed to load","projects.workspaceFileEmpty":"File is empty.","projects.workspaceBinaryFile":"Binary files cannot be previewed.","projects.workspaceTruncated":"Truncated","projects.workspaceSearchPlaceholder":"Search files…","projects.workspaceSearchNoResults":"No matching files","projects.workspaceTreeTruncated":"Too many entries; showing the first 500","projects.workspaceFileTruncated":"File too large; showing the first 64 KB","projects.workspaceBreadcrumb":"File path","projects.workspaceLineNumbers":"Line numbers","projects.workspaceOpenViewer":"Open file viewer","projects.workspaceCloseViewer":"Close viewer","projects.workspaceEditFile":"Edit file","projects.workspaceSaveFile":"Save","projects.workspaceCancelEdit":"Cancel editing","projects.workspaceSavingFile":"Saving...","projects.workspaceFileSaved":"File saved","projects.workspaceFileSaveFailed":"Failed to save file","projects.workspaceFileTooLargeToEdit":"File too large to edit online","projects.projectConfigFiles":"Project Config Files","projects.noConfigFiles":"No project config files yet.","projects.configExists":"Exists","projects.configMissing":"Missing","projects.selectConfigFile":"Select a config file","projects.editFile":"Edit","projects.previewFile":"Preview","projects.savingConfig":"Saving...","projects.failedSaveConfig":"Failed to save config","projects.globalConfigReadOnly":"Global Config (Read-only)","projects.noGlobalConfig":"No global config files detected.","projects.noGlobalConfigContent":"No content or file too large.","projects.skillInheritedEnabled":"Inherited globally: enabled","projects.skillInheritedDisabled":"Inherited globally: disabled","projects.skillProjectEnabled":"Project override: enabled","projects.skillProjectDisabled":"Project override: disabled","projects.order":"Order","sessions.title":"Sessions","sessions.subtitle":"View all AI CLI sessions by project.","sessions.columnStats":"Running {running} · {total} total","sessions.noInputRecord":"No input yet · recorded automatically once you open the terminal","sessions.showEmptyProjects":"Show empty projects","sessions.columnEmpty":"No sessions","sessions.moreTasks":"+{count} more","sessions.openProject":"Open project","sessions.cliFilter":"Filter by CLI","sessions.resetColumnOrder":"Reset column order","sessions.viewToggle":"Toggle view","sessions.viewBoard":"Board view","sessions.viewList":"List view","sessions.resizeColumn":"Resize column width","sessions.dragColumn":"Drag to reorder project column","sessions.loading":"Loading sessions...","sessions.emptyTitle":"No sessions yet","sessions.emptyDescription":"Create a session from a project page to get started.","sessions.createFromProject":"Create from project","sessions.createProject":"Create project","sessions.chooseProjectTitle":"Choose a project","sessions.chooseProjectDescription":"Select a project to create a new session.","sessions.chooseProjectEmpty":"No projects yet — create one to get started.","sessions.emptyReadyDescription":"Click New Session and pick a project to get started.","sessions.runtimeBlockedDescription":"The empty session list is not a project issue; the terminal runtime is not ready yet.","sessions.project":"Project","sessions.running":"Running","sessions.stopped":"Stopped","sessions.error":"Error","sessions.deleteLabel":"Delete session","sessions.searchPlaceholder":"Search sessions, projects, or tools","sessions.statusFilter":"Status filter","sessions.statusAll":"All statuses","sessions.noMatchesTitle":"No matching sessions","sessions.noMatchesDescription":"Adjust the search query or status filter and try again.","sessions.groupedByProject":"Grouped by project","sessions.unknownProject":"Unlinked project","sessions.back":"Sessions","sessions.preparing":"Preparing terminal connection...","sessions.cannotOpen":"Cannot open terminal","sessions.startFailed":"Failed to start session","sessions.stopFailed":"Failed to stop session","sessions.deleteFailed":"Failed to delete session","sessions.returnToList":"Return to the session list and use Connect.","sessions.backToSessions":"Back to Sessions","sessions.openSettings":"Open Settings","sessions.activity":"Activity","sessions.noActivity":"No activity yet","sessions.stopping":"Stopping...","sessions.focusMode":"Focus mode","sessions.exitFocusMode":"Exit focus","sessions.closeTab":"Close session tab","sessions.sessionExitedTabClosed":"Session exited; tab closed automatically","sessions.openSessionList":"Open session list","sessions.overflowTabs":"More session tabs","sessions.gitChanges":"Git changes","sessions.gitWorkingTree":"Working tree","sessions.gitCommits":"Recent commits","sessions.gitNoChanges":"Working tree clean, nothing to commit","sessions.gitNotRepo":"This project is not a git repository","sessions.gitLoadFailed":"Failed to load git info","sessions.gitRefresh":"Refresh git status","sessions.providerQuota":"Provider quota","sessions.providerQuotaEmpty":"No provider applied to this CLI from Model Center yet","sessions.providerQuotaUnsupported":"Quota query is not supported for this provider","sessions.providerQuotaRefresh":"Refresh quota","sessions.providerQuotaLoadFailed":"Failed to load quota info","sessions.providerQuotaResetAt":"Resets at","sessions.providerQuotaCheckedAt":"Updated","sessions.providerQuotaUsed":"Used","sessions.providerQuotaRemaining":"Remaining","sessions.gitDiffTitle":"Changes","sessions.gitDiffUntracked":"New file content (untracked)","sessions.gitDiffLoading":"Loading…","sessions.gitDiffEmpty":"No diff for this file","sessions.snapshotHistory":"Snapshot history","sessions.taskPacketHandoff":"Task packet handoff","sessions.taskPacketHandoffDescription":"This session is linked to a Project Manager task packet. Copy context into the CLI manually; ForgeBadger does not write to the terminal automatically.","sessions.taskPacketLoading":"Checking linked task packet...","sessions.taskPacketLoadFailed":"Could not load the linked task packet.","sessions.taskPacketWorkItem":"Work item","sessions.taskPacketRuntime":"Runtime","sessions.taskPacketLinkedSession":"Linked session","sessions.taskPacketPrompt":"Prompt","sessions.taskPacketAcceptanceCriteria":"Acceptance criteria","sessions.taskPacketExpectedVerification":"Expected verification","sessions.taskPacketEvidenceRequirements":"Evidence requirements","sessions.taskPacketNoItems":"No items.","sessions.taskPacketOpenWorkItem":"Open work item details","sessions.taskPacketQueuePlanned":"Planned","sessions.taskPacketQueueRunning":"Running","sessions.taskPacketQueueWaitingForReview":"Waiting for review","sessions.taskPacketQueueBlocked":"Blocked","sessions.taskPacketQueueCompleted":"Completed","sessions.taskPacketQueueCancelled":"Cancelled","sessions.handoffExport":"Markdown handoff pack","sessions.handoffExportDescription":"Add human-authored notes to generate Markdown suitable for GitHub, PR, or Feishu follow-up. The audit blocks obvious secrets, placeholders, and raw terminal dumps before export.","sessions.handoffOperatorNotes":"Operator notes","sessions.handoffVerificationNotes":"Verification notes","sessions.handoffOpenReviewItems":"Open review items","sessions.handoffAuditBlocked":"Handoff pack audit failed","sessions.handoffAuditOperatorNotesRequired":"Operator notes are required.","sessions.handoffAuditVerificationNotesRequired":"Verification notes are required.","sessions.handoffAuditSecretLikeValue":"Content contains a possible secret, token, or password.","sessions.handoffAuditPlaceholderText":"Content contains TODO/TBD/FIXME-style placeholder text.","sessions.handoffAuditRawTerminalDump":"Content looks like a raw terminal dump or shell prompt.","sessions.handoffMarkdownReady":"Markdown is ready to copy.","sessions.handoffCopy":"Copy Markdown","sessions.handoffCopied":"Copied","sessions.handoffCopyFailed":"Could not copy Markdown. Copy the text manually.","sessions.handoffDownload":"Download Markdown","terminal.missingCredentials":"Terminal credentials are missing. Open this session from the console session list.","terminal.connectionLost":"Connection lost","terminal.reconnect":"Reconnect","terminal.reconnecting":"Reconnecting","terminal.backToBottom":"Back to bottom","terminal.historyOutput":"Output history","terminal.historyRefresh":"Refresh","terminal.historyEmpty":"No output yet","terminal.historyLoadFailed":"Failed to load output history","settings.title":"Settings","settings.subtitle":"Configure console preferences and security defaults.","settings.language":"Language","settings.theme":"Theme","settings.themeDescription":"Pick the brand accent color. Applies instantly and is stored on this device.","settings.themeCyan":"Cyan","settings.themeOrange":"Orange","settings.themeViolet":"Violet","settings.themeEmerald":"Emerald","settings.themeBlue":"Blue","settings.themeRose":"Rose","settings.themeAmber":"Amber","settings.languageDescription":"Choose the console language preference for this browser.","settings.pet":"Pet selection","settings.petDescription":"Choose your console companion. Your preference is saved in this browser.","settings.petRobot":"Robot","settings.petRobotDescription":"A coding companion that blinks, walks, and types.","settings.petSelected":"Selected","settings.petSaved":"Pet selection saved.","settings.petSaveFailed":"Could not save your pet selection. Check whether browser storage is allowed.","settings.console":"Console","settings.consoleDescription":"Local workflow preferences for terminal sessions and dashboards.","settings.autoReconnect":"Reconnect terminal automatically","settings.autoReconnectDescription":"Keep the browser attached when transient WebSocket disconnects happen.","settings.showStoppedSessions":"Show stopped sessions","settings.showStoppedSessionsDescription":"Keep completed or stopped sessions visible in the session table.","settings.browserNotifications":"Browser notifications","settings.browserNotificationsDescription":"Show system notifications when any Code CLI requests permission, completes, is interrupted, or fails.","settings.browserNotificationsDenied":"Browser notification permission is denied. Re-enable it in browser site settings.","settings.securityBaseline":"Security Baseline","settings.securityDescription":"Gateway security controls currently enforced by the local service.","settings.diagnostics":"Diagnostics Export","settings.diagnosticsDescription":"Generate a local redacted diagnostics JSON for trial feedback and reproduction.","settings.diagnosticsExport":"Export diagnostics JSON","settings.diagnosticsExporting":"Exporting...","settings.diagnosticsExported":"Diagnostics file downloaded. Review it again before sharing.","settings.diagnosticsExportFailed":"Export failed. Check login state and Gateway logs.","settings.diagnosticsNotice":"Diagnostics are not uploaded automatically; do not share tokens, API keys, or unrelated project secrets.","settings.jwtAuth":"JWT authentication","settings.tenantIsolation":"Tenant isolation","settings.apiKeyEncryption":"API key encryption","settings.terminalPersistence":"Terminal persistence","settings.notDetected":"Not detected","settings.enabled":"Enabled","settings.secretsNotice":"Secrets are loaded by the Gateway and are not exposed in page markup.","settings.adapters":"Adapter Discovery","settings.adaptersDescription":"Checks local AI CLI commands and the terminal runtime; sessions can launch only when the command and terminal persistence runtime requirements are both satisfied.","settings.claudeRoute":"Claude Code protocol routing","settings.claudeRouteDescription":"Only OpenAI providers without an Anthropic endpoint need routing through this Gateway's /v1/messages, keeping the real API key out of the Claude config. Providers with an Anthropic endpoint connect directly to Claude Code.","settings.claudeRouteStateEnabled":"Routing enabled","settings.claudeRouteStateDisabled":"Routing disabled","settings.claudeRouteAssignmentLabel":"Routed provider","settings.claudeRouteNoAssignment":"None applied yet","settings.claudeRouteGatewayDown":"While the Gateway is not running, routed models are unreachable from Claude Code.","settings.claudeRouteUpdateFailed":"Failed to update the route state","settings.claudeRouteLoadFailed":"Failed to load the route state","settings.mcp":"MCP integration","settings.mcpDescription":"External AI clients (Claude Code, MCP Inspector, ...) call platform tools through this Gateway's /mcp endpoint.","settings.mcpStateEnabled":"Service enabled","settings.mcpStateDisabled":"Service disabled","settings.mcpEndpoint":"Endpoint","settings.mcpDisabledHint":"The MCP service is disabled. Set the following variable in the Gateway's .env and restart for it to take effect:","settings.mcpName":"Name","settings.mcpScopeRead":"Read-only","settings.mcpScopeOperate":"Operate","settings.mcpScopeOperateHelp":"Operate lets clients perform write actions (approved inline with owner authority); operations the security policy marks as high-risk are still refused.","settings.mcpCreate":"Create token","settings.mcpCopy":"Copy","settings.mcpLoadFailed":"Failed to load the MCP status. Please retry.","settings.mcpEmpty":"No access tokens created yet.","settings.mcpLastUsed":"Last used","settings.mcpNeverUsed":"Never used","settings.mcpRevoked":"Revoked","settings.mcpRevoke":"Revoke","settings.mcpRevokeConfirm":"Revoke this token? Any client holding it loses access immediately.","settings.mcpCreateFailed":"Failed to create the token. Please retry.","settings.mcpRevokeFailed":"Failed to revoke the token. Please retry.","settings.mcpClose":"Close","settings.mcpCopied":"Copied to clipboard","settings.mcpCopyFailed":"Copy failed. Please copy manually.","settings.mcpConnectHelp":"Connection examples (replace <TOKEN> with the token you created):","settings.mcpConnectCli":"Claude Code CLI","settings.mcpConnectJson":"MCP client JSON config","settings.mcpPlaintextTitle":"Access token created","settings.mcpPlaintextWarning":"The plaintext token is shown only this once. It cannot be retrieved again after you close this dialog. Copy and store it now.","settings.mcpTokenPlaceholder":"<TOKEN>","settings.available":"Command available","settings.missing":"Command missing","settings.supported":"Supported","settings.prototype":"Prototype","settings.launchEnabled":"Session launch enabled","settings.launchDisabled":"Session launch disabled","settings.discoveryLoading":"Checking adapters...","settings.dependenciesLoading":"Checking terminal runtime...","settings.dependenciesLoadFailed":"Terminal runtime discovery failed","settings.discoveryLoadFailed":"Adapter discovery failed to load","settings.discoveryLoadFailedDescription":"Session launch depends on the local claude, opencode, or codex command plus terminal persistence runtime requirements.","settings.discoveryRetry":"Retry discovery","settings.discoveryRefresh":"Refresh discovery","settings.discoveryRefreshing":"Refreshing...","settings.adapterReadinessNotice":"Session launch readiness depends on the local CLI command, launchEnabled status, and terminal persistence runtime requirements.","settings.terminalRuntimeReadiness":"Terminal runtime","settings.launchReady":"Launch ready","settings.launchBlocked":"Blocked","settings.auditHistory":"Audit History","settings.auditDescription":"Recent template restores and config sync records.","settings.auditLoading":"Loading audit logs...","settings.auditEmpty":"No audit logs yet.","settings.account.title":"Account & Security","settings.account.description":"Change your sign-in password and manage signed-in devices.","settings.account.currentPassword":"Current password","settings.account.newPassword":"New password","settings.account.confirmPassword":"Confirm new password","settings.account.passwordHint":"Changing the password signs out every device; you will need to sign in again.","settings.account.passwordSubmit":"Change password","settings.account.passwordChanging":"Submitting...","settings.account.passwordChanged":"Password changed, redirecting to sign-in...","settings.account.passwordChangeFailed":"Failed to change the password. Please try again.","settings.account.passwordTooShort":"The new password must be at least 8 characters.","settings.account.passwordMismatch":"The new passwords do not match.","settings.account.devicesTitle":"My devices","settings.account.devicesDescription":"Active sign-in sessions for this account.","settings.account.devicesLoading":"Loading signed-in devices...","settings.account.devicesLoadFailed":"Failed to load signed-in devices.","settings.account.devicesEmpty":"No active sessions recorded.","settings.account.revoke":"Revoke","settings.account.revoking":"Revoking...","settings.account.revokeOthers":"Sign out other devices","settings.account.currentDevice":"This device","settings.account.unknownDevice":"Unknown device","settings.account.lastActive":"Last active","settings.account.signedInAt":"Signed in"}},i="forgebadger-language",r=(0,o.createContext)(null);e.s(["LanguageProvider",0,function({children:e}){let[n,c]=(0,o.useState)("zh-CN");(0,o.useEffect)(()=>{var e;let t=(e=window.localStorage.getItem(i),s.includes(e)?e:"zh-CN");c(t),document.documentElement.lang=t},[]);let l=e=>{c(e),window.localStorage.setItem(i,e),document.documentElement.lang=e},p=(0,o.useMemo)(()=>({language:n,setLanguage:l,t:e=>a[n][e]??a.en[e]??e}),[n]);return(0,t.jsx)(r.Provider,{value:p,children:e})},"useLanguage",0,function(){let e=(0,o.useContext)(r);if(!e)throw Error("useLanguage must be used within LanguageProvider");return e}],35887)},47721,37122,14698,e=>{"use strict";let t="forgebadger.token",o="forgebadger.user";function s(){return localStorage.getItem(t)}function a(){localStorage.removeItem(t)}function i(){localStorage.removeItem(o)}e.s(["clearToken",0,a,"clearUser",0,i,"getToken",0,s,"getUser",0,function(){let e=localStorage.getItem(o);if(!e)return null;try{return JSON.parse(e)}catch{return null}},"isAuthenticated",0,function(){return!!s()},"logout",0,function(){a(),i()},"setToken",0,function(e){localStorage.setItem(t,e)},"setUser",0,function(e){localStorage.setItem(o,JSON.stringify(e))}],37122);var r=e.i(92251);function n(e){let t=e?.trim();return t&&t.length>0?t:void 0}function c(){{let e=n(window.__FORGEBADGER_RUNTIME__?.gatewayBaseUrl);if(e)return e}return n(r.default.env.NEXT_PUBLIC_GATEWAY_URL)??"http://127.0.0.1:48731"}e.s(["getGatewayBaseUrl",0,c],14698),c();class l extends Error{status;details;constructor(e,t,o){super(e),this.status=t,this.details=o,this.name="GatewayApiError"}}function p(e){let t=c().replace(/\/+$/,"");return`${t}${e.startsWith("/")?e:`/${e}`}`}async function d(e,t={}){let o=s(),{request:a,cleanup:i}=g(t,o),r=await fetch(p(e),a).catch(k).finally(i),n=await j(r);if(!r.ok)throw h(e,null!==o,r.status),y(r,n);if(!n)throw new l("API request failed",r.status);if(0!==n.code)throw v(n,r.status);return n.data}async function m(e,t={}){let o=s(),{request:a,cleanup:i}=g(t,o),r=await fetch(p(e),a).catch(k).finally(i),n=await j(r);if(!r.ok)throw h(e,null!==o,r.status),y(r,n);if(!n)throw new l("API request failed",r.status);if(0!==n.code)throw v(n,r.status);return n}function g(e,t){let{timeoutMs:o=3e4,...s}=e,a=s.signal?void 0:new AbortController,i=a?setTimeout(()=>a.abort(),o):void 0;return{request:{...s,signal:s.signal??a?.signal,headers:{"Content-Type":"application/json",...t?{Authorization:`Bearer ${t}`}:{},...s.headers}},cleanup:()=>{i&&clearTimeout(i)}}}let u=["/api/v1/auth/team-invitations/","/api/v1/auth/login","/api/v1/auth/register","/api/v1/auth/logout","/api/v1/auth/change-password","/api/v1/auth/reset-password"];function h(e,t,o){if(401!==o||!t||u.some(t=>e.startsWith(t))||(a(),i(),window.location.pathname.startsWith("/login")))return;let s=window.location.pathname+window.location.search;window.location.href=`/login?next=${encodeURIComponent(s)}`}function k(e){if(e instanceof DOMException&&"AbortError"===e.name)throw new l("Gateway request timed out. Check that the Gateway service is running.");throw e}async function j(e){try{return await e.json()}catch{return null}}function y(e,t){var o;return t&&(0!==(o=t).code||o.message||o.details)?v(t,e.status):new l(`Gateway request failed with HTTP ${e.status}`,e.status)}function v(e,t){return new l(e.message||"API request failed",t,e.details)}async function f(e,t){return m("/api/v1/auth/login",{method:"POST",body:JSON.stringify({email:e,password:t})})}async function C(e,t,o,s){return m("/api/v1/auth/register",{method:"POST",body:JSON.stringify({email:e,password:t,recoveryKey:o,...s?{inviteCode:s}:{}})})}async function w(){return m("/api/v1/auth/me",{method:"GET"})}async function b(){return d("/api/v1/auth/sessions")}async function S(e){return d(`/api/v1/auth/sessions/${encodeURIComponent(e)}`,{method:"DELETE"})}async function P(){return d("/api/v1/auth/sessions",{method:"DELETE"})}async function M(e,t){return d("/api/v1/auth/change-password",{method:"POST",body:JSON.stringify({currentPassword:e,newPassword:t})})}async function T(e){return d("/api/v1/auth/reset-password",{method:"POST",body:JSON.stringify(e)})}async function R(){return d("/api/v1/gate-a/dependencies",{cache:"no-store"})}async function I(){return(await d("/api/v1/integrations/feishu/account",{cache:"no-store"})).account}async function D(e){return(await d("/api/v1/integrations/feishu/account",{method:"PUT",body:JSON.stringify(e)})).account}async function A(){return(await d("/api/v1/integrations/feishu/health",{cache:"no-store"})).health}async function L(){await d("/api/v1/integrations/feishu/emergency-stop",{method:"POST",body:"{}"})}async function E(){return d("/api/v1/dashboard/summary")}async function F(){return d("/api/v1/admin/users")}async function N(e,t){return d(`/api/v1/admin/users/${e}`,{method:"PATCH",body:JSON.stringify(t)})}async function O(e={}){let t=new URLSearchParams;e.category&&t.set("category",e.category);let o=t.toString(),s=await d(`/api/v1/notifications${o?`?${o}`:""}`);return{notifications:(s.notifications??[]).map(H),unreadCount:s.unreadCount??0}}function H(e){let t=e.payload?.status,o=e.payload?.action;return{...e,category:e.category??"session_event",status:"success"===t||"error"===t?t:void 0,action:"string"==typeof o&&o.length>0?o:void 0}}async function B(e={}){let t=new URLSearchParams;e.resourceType&&t.set("resourceType",e.resourceType),e.resourceId&&t.set("resourceId",e.resourceId),void 0!==e.limit&&t.set("limit",String(e.limit)),e.action&&t.set("action",e.action);let o=t.toString();return d(`/api/v1/audit-logs${o?`?${o}`:""}`)}async function x(){return d("/api/v1/diagnostics/export")}async function G(e={}){let t=new URLSearchParams;e.sessionId&&t.set("sessionId",e.sessionId),e.projectId&&t.set("projectId",e.projectId),e.types&&e.types.length>0&&t.set("type",e.types.join(",")),void 0!==e.limit&&t.set("limit",String(e.limit));let o=t.toString();return d(`/api/v1/activities${o?`?${o}`:""}`)}async function U(e={}){let t=new URLSearchParams;e.sessionId&&t.set("sessionId",e.sessionId),e.projectId&&t.set("projectId",e.projectId);let o=t.toString();return d(`/api/v1/snapshots${o?`?${o}`:""}`)}async function K(e){return d(`/api/v1/snapshots/${e}/restore`,{method:"POST"})}async function q(e={}){let t=new URLSearchParams;e.from&&t.set("from",e.from),e.to&&t.set("to",e.to);let o=t.toString();return d(`/api/v1/usage/token-summary${o?`?${o}`:""}`)}async function W(e={}){let t=new URLSearchParams;e.from&&t.set("from",e.from),e.to&&t.set("to",e.to);let o=t.toString();return d(`/api/v1/usage/project-activity${o?`?${o}`:""}`)}async function _(){return d("/api/v1/usage/sync",{method:"POST"})}async function $(e){return d(`/api/v1/notifications/${e}/read`,{method:"POST"})}async function J(){return d("/api/v1/notifications/read-all",{method:"POST"})}async function Q(){return d("/api/v1/notifications",{method:"DELETE"})}async function V(){return d("/api/v1/adapters/discovery")}function z(e){return e.available&&e.launchEnabled}function Y(e,t){return`/api/v1/projects/${encodeURIComponent(e)}/project-manager${t}`}function X(e,t){return`/api/v1/projects/${encodeURIComponent(e)}/workspace${t}`}async function Z(){return d("/api/v1/projects")}async function ee(e){return d("/api/v1/projects",{method:"POST",body:JSON.stringify(e)})}async function et(e){return d(`/api/v1/projects/${e}`)}async function eo(e,t){return d(`/api/v1/projects/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(void 0===t?{}:{templateId:t})})}async function es(e,t){return d(`/api/v1/projects/${encodeURIComponent(e)}/templates`,{method:"POST",body:JSON.stringify(t)})}function ea(e){return e?`?aiTool=${encodeURIComponent(e)}`:""}async function ei(e,t){return d(`/api/v1/projects/${encodeURIComponent(e)}/ai-config${ea(t)}`)}async function er(e,t){return d(`/api/v1/projects/${encodeURIComponent(e)}/ai-config/global${ea(t)}`)}function en(e,t=""){return`/api/v1/cli-config/${encodeURIComponent(e)}${t}`}async function ec(e){let{snapshot:t}=await d(en(e));return t}async function el(e,t){let o=new URLSearchParams({path:t}),{file:s}=await d(`${en(e,"/file")}?${o.toString()}`);return s}async function ep(e,t,o){let{snapshot:s}=await d(en(e,"/file"),{method:"PUT",body:JSON.stringify({path:t,content:o})});return s}async function ed(e){return d(en(e,"/fields"))}async function em(e){return d(en(e,"/field-values"))}async function eg(e,t){let{preview:o}=await d(en(e,"/apply-provider/preview"),{method:"POST",body:JSON.stringify(t)});return o}async function eu(e,t){let{result:o}=await d(en(e,"/apply-provider"),{method:"POST",body:JSON.stringify(t)});return o}async function eh(){let{routing:e}=await d("/api/v1/cli-config/routing/claude");return e}async function ek(e){let{routing:t}=await d("/api/v1/cli-config/routing/claude",{method:"PUT",body:JSON.stringify({enabled:e})});return t}async function ej(){return d("/api/v1/mcp")}async function ey(){return d("/api/v1/mcp/tokens")}async function ev(e){return d("/api/v1/mcp/tokens",{method:"POST",body:JSON.stringify(e)})}async function ef(e){return d(`/api/v1/mcp/tokens/${encodeURIComponent(e)}`,{method:"DELETE"})}async function eC(e,t={}){let o=new URLSearchParams;t.path&&o.set("path",t.path),void 0!==t.depth&&o.set("depth",String(t.depth)),void 0!==t.limit&&o.set("limit",String(t.limit));let s=o.toString();return d(X(e,`/tree${s?`?${s}`:""}`))}async function ew(e,t){let o=new URLSearchParams({path:t});return d(X(e,`/file?${o.toString()}`))}async function eb(e,t,o){return d(X(e,"/file"),{method:"PUT",body:JSON.stringify({path:t,content:o})})}function eS(e,t){return`/api/v1/projects/${encodeURIComponent(e)}/graph${t}`}async function eP(e){return d(eS(e,"/overview"))}async function eM(e,t){let o=new URLSearchParams({q:t.q});return t.kind&&o.set("kind",t.kind),void 0!==t.limit&&o.set("limit",String(t.limit)),d(eS(e,`/search?${o.toString()}`))}async function eT(e,t){return d(eS(e,`/symbols/${encodeURIComponent(t)}`))}async function eR(e,t,o){let s=void 0!==o?`?depth=${o}`:"";return d(eS(e,`/symbols/${encodeURIComponent(t)}/impact${s}`))}async function eI(e,t){let o=void 0!==t?`?limit=${t}`:"";return d(eS(e,`/file-graph${o}`))}async function eD(e,t,o){return d(eS(e,"/affected"),{method:"POST",body:JSON.stringify({paths:t,...void 0!==o?{depth:o}:{}})})}async function eA(e){let{git:t}=await d(`/api/v1/projects/${encodeURIComponent(e)}/git-changes`);return t}async function eL(e,t,o={}){let s=new URLSearchParams({path:t});o.untracked&&s.set("untracked","1");let{file:a}=await d(`/api/v1/projects/${encodeURIComponent(e)}/git-diff?${s.toString()}`);return a}async function eE(e){let{git:t}=await d(`/api/v1/projects/${encodeURIComponent(e)}/git-branches`);return t}async function eF(e,t){return d(`/api/v1/projects/${encodeURIComponent(e)}/git-checkout`,{method:"POST",body:JSON.stringify({branch:t.branch,...t.create?{create:!0}:{}})})}async function eN(e,t,o,s){return d(`/api/v1/projects/${encodeURIComponent(e)}/ai-config/files`,{method:"PUT",body:JSON.stringify({relativePath:t,content:o,...s?{aiTool:s}:{}})})}async function eO(e){return d(Y(e,"/goal"))}async function eH(e,t){return d(Y(e,"/goal"),{method:"PUT",body:JSON.stringify(t)})}async function eB(e,t={}){let o=new URLSearchParams;t.status&&o.set("status",t.status),void 0!==t.limit&&o.set("limit",String(t.limit));let s=o.toString();return d(Y(e,`/work-items${s?`?${s}`:""}`))}async function ex(e,t){return d(Y(e,"/work-items"),{method:"POST",body:JSON.stringify(t)})}async function eG(e,t,o){return d(Y(e,`/work-items/${encodeURIComponent(t)}`),{method:"PATCH",body:JSON.stringify(o)})}async function eU(e,t,o){return d(Y(e,`/work-items/${encodeURIComponent(t)}/status`),{method:"PATCH",body:JSON.stringify(o)})}async function eK(e,t){return d(Y(e,"/work-items/batch/status"),{method:"POST",body:JSON.stringify(t)})}async function eq(e,t,o){return d(Y(e,`/work-items/${encodeURIComponent(t)}/evidence`),{method:"POST",body:JSON.stringify(o)})}async function eW(e,t,o){return d(Y(e,`/work-items/${encodeURIComponent(t)}`),{method:"DELETE",body:JSON.stringify(o)})}async function e_(e,t={}){let o=new URLSearchParams;void 0!==t.limit&&o.set("limit",String(t.limit));let s=o.toString();return d(Y(e,`/task-packets${s?`?${s}`:""}`))}async function e$(e,t){return d(Y(e,`/work-items/${encodeURIComponent(t)}/task-packet`))}async function eJ(e,t,o){return d(Y(e,`/work-items/${encodeURIComponent(t)}/task-packet/session-link`),{method:"POST",body:JSON.stringify(o)})}async function eQ(e,t,o={}){return d(Y(e,`/work-items/${encodeURIComponent(t)}/task-packet/start`),{method:"POST",body:JSON.stringify(o)})}async function eV(e,t={}){let o=new URLSearchParams;t.eventType&&o.set("eventType",t.eventType),void 0!==t.limit&&o.set("limit",String(t.limit));let s=o.toString();return d(Y(e,`/ledger${s?`?${s}`:""}`))}async function ez(e){return d(Y(e,"/stages"))}async function eY(e,t){return d(Y(e,"/stages"),{method:"POST",body:JSON.stringify(t)})}async function eX(e){return d(Y(e,"/stages/seed-template"),{method:"POST"})}async function eZ(e,t){return d(Y(e,"/stages/reorder"),{method:"POST",body:JSON.stringify({stageIds:t})})}async function e0(e,t,o){return d(Y(e,`/stages/${encodeURIComponent(t)}`),{method:"PATCH",body:JSON.stringify(o)})}async function e1(e,t){return d(Y(e,`/stages/${encodeURIComponent(t)}`),{method:"DELETE"})}async function e2(e){return d(Y(e,"/work-item-links"))}async function e3(e,t,o,s){return d(Y(e,`/work-items/${encodeURIComponent(t)}/dependencies`),{method:"POST",body:JSON.stringify({blockerWorkItemId:o,expectedRevision:s})})}async function e8(e,t,o,s){return d(Y(e,`/work-items/${encodeURIComponent(t)}/dependencies/${encodeURIComponent(o)}`),{method:"DELETE",body:JSON.stringify({expectedRevision:s})})}async function e7(e){return d(`/api/v1/projects/${e}`,{method:"DELETE"})}async function e4(e={}){let t=new URLSearchParams;e.projectId&&t.set("projectId",e.projectId);let o=t.toString();return d(`/api/v1/sessions${o?`?${o}`:""}`)}async function e6(){return d("/api/v1/sessions/board")}async function e5(e,t){return d(`/api/v1/sessions/${e}/last-prompt`,{method:"PUT",body:JSON.stringify({prompt:t})})}async function e9(e){return d("/api/v1/sessions",{method:"POST",body:JSON.stringify(e)})}async function te(e){return d(`/api/v1/sessions/${e}`)}async function tt(e){return d(`/api/v1/sessions/${e}/start`,{method:"POST"})}async function to(e){return d(`/api/v1/sessions/${e}/stop`,{method:"POST"})}async function ts(e){return d(`/api/v1/sessions/${e}`,{method:"DELETE"})}async function ta(e){return d(`/api/v1/sessions/${e}/connect`,{method:"POST"})}async function ti(){return d("/api/v1/skills")}async function tr(){return d("/api/v1/skills/local-sync",{method:"POST"})}async function tn(){return d("/api/v1/skills/sources")}async function tc(){return d("/api/v1/skills/templates")}async function tl(){return d("/api/v1/catalog/items")}async function tp(e){return d(`/api/v1/catalog/items/${encodeURIComponent(e)}/install`,{method:"POST"})}async function td(e){return d(`/api/v1/catalog/items/${encodeURIComponent(e)}/install`,{method:"POST"})}async function tm(e){return d("/api/v1/skills",{method:"POST",body:JSON.stringify(e)})}async function tg(e){return d("/api/v1/skills/install",{method:"POST",body:JSON.stringify(e)})}async function tu(e){return d("/api/v1/skills/install/preview",{method:"POST",body:JSON.stringify(e)})}async function th(e,t){return d(`/api/v1/skills/${e}`,{method:"PUT",body:JSON.stringify(t)})}async function tk(e){return d(`/api/v1/skills/${e}`,{method:"DELETE"})}async function tj(e,t){return d(`/api/v1/skills/${e}/toggle`,{method:"POST",body:JSON.stringify({enabled:t})})}async function ty(e){return d(`/api/v1/projects/${e}/skills`)}async function tv(e,t,o){return d(`/api/v1/projects/${e}/skills/${t}`,{method:"POST",body:JSON.stringify({enabled:o})})}async function tf(e){return d("/api/v1/projects/scan",{method:"POST",body:JSON.stringify({path:e})})}async function tC(e){return d("/api/v1/projects/import",{method:"POST",body:JSON.stringify({path:e.path,name:e.name,templateId:e.templateId})})}async function tw(){return d("/api/v1/system/desktop")}async function tb(){return d("/api/v1/system/select-directory",{method:"POST"})}async function tS(){return d("/api/v1/templates")}async function tP(e){return d(`/api/v1/templates/${e}`)}async function tM(e){return d("/api/v1/templates",{method:"POST",body:JSON.stringify(e)})}async function tT(e,t){return d(`/api/v1/templates/${e}/clone`,{method:"POST",body:JSON.stringify({name:t})})}async function tR(e){return d(`/api/v1/templates/${e}/export`)}async function tI(e){return d("/api/v1/templates/import",{method:"POST",body:JSON.stringify({templatePackage:e})})}async function tD(e){return d("/api/v1/templates/import/git",{method:"POST",body:JSON.stringify(e)})}async function tA(e){return d(`/api/v1/templates/${e}/versions`)}async function tL(e,t){return d(`/api/v1/templates/${e}/versions/${t}/restore`,{method:"POST"})}async function tE(e,t){return d(`/api/v1/templates/${e}`,{method:"PUT",body:JSON.stringify(t)})}async function tF(e,t,o){return d(`/api/v1/templates/${e}/files/${t}`,{method:"PUT",body:JSON.stringify({content:o})})}async function tN(e){return d(`/api/v1/templates/${e}`,{method:"DELETE"})}async function tO(){return d("/api/v1/model-providers")}async function tH(e){return d("/api/v1/model-providers",{method:"POST",body:JSON.stringify(e)})}async function tB(e,t){return d(`/api/v1/model-providers/${e}`,{method:"PATCH",body:JSON.stringify(t)})}async function tx(e){return d(`/api/v1/model-providers/${e}`,{method:"DELETE"})}async function tG(e,t){return d(`/api/v1/model-providers/${e}/credentials`,{method:"POST",body:JSON.stringify(t)})}async function tU(e,t,o){return d(`/api/v1/model-providers/${e}/credentials/${t}/rotate`,{method:"POST",body:JSON.stringify(o)})}async function tK(e,t){return d(`/api/v1/model-providers/${e}/credentials/${t}`,{method:"DELETE"})}async function tq(e,t){return d(`/api/v1/model-providers/${e}/models`,{method:"POST",body:JSON.stringify(t)})}async function tW(e,t,o){return d(`/api/v1/model-providers/${e}/models/${t}`,{method:"PATCH",body:JSON.stringify(o)})}async function t_(e,t){return d(`/api/v1/model-providers/${e}/models/${t}/set-default`,{method:"POST"})}async function t$(e,t){return d(`/api/v1/model-providers/${e}/models/${t}`,{method:"DELETE"})}async function tJ(e,t={}){return d(`/api/v1/model-providers/${e}/models/sync`,{method:"POST",body:JSON.stringify(t)})}async function tQ(e,t={}){return d(`/api/v1/model-providers/${e}/balance`,{method:"POST",body:JSON.stringify(t)})}async function tV(e){return d(`/api/v1/model-providers/applied/${encodeURIComponent(e)}`)}async function tz(){return d("/api/v1/model-providers/applied")}async function tY(e,t={}){return d(`/api/v1/model-providers/${e}/test`,{method:"POST",body:JSON.stringify(t)})}async function tX(e,t,o="host_environment"){return d(`/api/v1/projects/${encodeURIComponent(e)}/config/sync/preview`,{method:"POST",body:JSON.stringify({credentialMode:o,...t?{templateId:t}:{}})})}async function tZ(e,t={}){let o=new URLSearchParams;t.templateId&&o.set("templateId",t.templateId),t.credentialMode&&o.set("credentialMode",t.credentialMode);let s=o.toString();return d(`/api/v1/projects/${encodeURIComponent(e)}/config/compliance${s?`?${s}`:""}`)}async function t0(e,t={},o,s="host_environment"){return d(`/api/v1/projects/${encodeURIComponent(e)}/config/sync/apply`,{method:"POST",body:JSON.stringify({credentialMode:s,...o?{templateId:o}:{},...Object.keys(t).length>0?{decisions:t}:{}})})}async function t1(e,t={}){let o=new URLSearchParams;t.projectIds&&t.projectIds.length>0&&o.set("projectIds",t.projectIds.join(","));let s=o.toString();return d(`/api/v1/templates/${encodeURIComponent(e)}/usage${s?`?${s}`:""}`)}async function t2(e,t={}){return d(`/api/v1/templates/${encodeURIComponent(e)}/sync/preview`,{method:"POST",body:JSON.stringify({...t.projectIds?{projectIds:t.projectIds}:{},...t.credentialMode?{credentialMode:t.credentialMode}:{}})})}async function t3(e,t={}){return d(`/api/v1/templates/${encodeURIComponent(e)}/sync/apply`,{method:"POST",body:JSON.stringify({...t.projectIds?{projectIds:t.projectIds}:{},...t.decisions&&Object.keys(t.decisions).length>0?{decisions:t.decisions}:{},...t.credentialMode?{credentialMode:t.credentialMode}:{}})})}e.s(["GatewayApiError",0,l,"addProjectManagerWorkItemDependency",0,e3,"applyCliConfigToAdapter",0,eu,"applyConfigSync",0,t0,"applyTemplateSync",0,t3,"attachProjectManagerWorkItemEvidence",0,eq,"batchUpdateProjectManagerWorkItemStatuses",0,eK,"changePassword",0,M,"checkProviderBalance",0,tQ,"checkoutProjectGitBranch",0,eF,"chooseDefaultRuntimeAdapter",0,function(e,t){let o=e.find(e=>e.id===t);return o&&z(o)?o.id:e.find(z)?.id},"clearServerNotifications",0,Q,"cloneTemplate",0,tT,"connectSession",0,ta,"createMcpToken",0,ev,"createModelProvider",0,tH,"createProject",0,ee,"createProjectManagerStage",0,eY,"createProjectManagerWorkItem",0,ex,"createProviderCredential",0,tG,"createProviderModel",0,tq,"createSession",0,e9,"createSkill",0,tm,"createTemplate",0,tM,"defaultConfigConflictDecisions",0,function(e){return Object.fromEntries(e.filter(e=>e.allowedActions.includes("skip")).map(e=>[e.relativePath,"skip"]))},"deleteModelProvider",0,tx,"deleteProject",0,e7,"deleteProjectManagerStage",0,e1,"deleteProjectManagerWorkItem",0,eW,"deleteProviderCredential",0,tK,"deleteProviderModel",0,t$,"deleteSession",0,ts,"deleteSkill",0,tk,"deleteTemplate",0,tN,"discoverAdapters",0,V,"emergencyStopFeishu",0,L,"exportDiagnostics",0,x,"exportTemplate",0,tR,"extractProjectTemplate",0,es,"fetchEnvelope",0,m,"fetchJson",0,d,"getAppliedProviderForAdapter",0,tV,"getAppliedProviders",0,tz,"getClaudeRoute",0,eh,"getCliConfig",0,ec,"getCliConfigFieldValues",0,em,"getCliConfigFields",0,ed,"getCliConfigFile",0,el,"getConfigCompliance",0,tZ,"getDashboardSummary",0,E,"getDependencies",0,R,"getDesktopCapabilities",0,tw,"getFeishuChannelAccount",0,I,"getFeishuConnectionHealth",0,A,"getGlobalAiConfig",0,er,"getMcpStatus",0,ej,"getMe",0,w,"getProject",0,et,"getProjectActivity",0,W,"getProjectAiConfig",0,ei,"getProjectGitBranches",0,eE,"getProjectGitChanges",0,eA,"getProjectGitFileDiff",0,eL,"getProjectGraphAffected",0,eD,"getProjectGraphFileGraph",0,eI,"getProjectGraphImpact",0,eR,"getProjectGraphOverview",0,eP,"getProjectGraphSymbolDetail",0,eT,"getProjectManagerGoal",0,eO,"getProjectManagerTaskPacket",0,e$,"getProjectWorkspaceFile",0,ew,"getProjectWorkspaceTree",0,eC,"getSession",0,te,"getSessionBoard",0,e6,"getTemplate",0,tP,"getTemplateUsage",0,t1,"getTokenUsageSummary",0,q,"importProject",0,tC,"importTemplate",0,tI,"importTemplateFromGit",0,tD,"installCatalogSkill",0,td,"installCatalogTemplate",0,tp,"installSkill",0,tg,"isAdapterLaunchable",0,z,"linkProjectManagerTaskPacketSession",0,eJ,"listActivities",0,G,"listAdminUsers",0,F,"listAuditLogs",0,B,"listAuthSessions",0,b,"listCatalogItems",0,tl,"listMcpTokens",0,ey,"listModelProviders",0,tO,"listNotifications",0,O,"listProjectManagerLedger",0,eV,"listProjectManagerStages",0,ez,"listProjectManagerTaskPackets",0,e_,"listProjectManagerWorkItemLinks",0,e2,"listProjectManagerWorkItems",0,eB,"listProjectSkills",0,ty,"listProjects",0,Z,"listSessions",0,e4,"listSkillSources",0,tn,"listSkillTemplates",0,tc,"listSkills",0,ti,"listSnapshots",0,U,"listTemplateVersions",0,tA,"listTemplates",0,tS,"login",0,f,"markAllNotificationsRead",0,J,"markNotificationRead",0,$,"mcpStatusKey",0,["mcp-status"],"mcpTokensKey",0,["mcp-tokens"],"previewCliConfigApply",0,eg,"previewConfigSync",0,tX,"previewSkillSource",0,tu,"previewTemplateSync",0,t2,"putProjectWorkspaceFile",0,eb,"register",0,C,"removeProjectManagerWorkItemDependency",0,e8,"reorderProjectManagerStages",0,eZ,"resetPassword",0,T,"restoreSnapshot",0,K,"restoreTemplateVersion",0,tL,"revokeAuthSession",0,S,"revokeMcpToken",0,ef,"revokeOtherAuthSessions",0,P,"rotateProviderCredential",0,tU,"saveFeishuChannelAccount",0,D,"scanProject",0,tf,"searchProjectGraphSymbols",0,eM,"seedProjectManagerStageTemplate",0,eX,"selectNativeDirectory",0,tb,"setClaudeRoute",0,ek,"setDefaultProviderModel",0,t_,"setProjectSkill",0,tv,"startProjectManagerTaskPacket",0,eQ,"startSession",0,tt,"stopSession",0,to,"syncLocalSkills",0,tr,"syncProviderModels",0,tJ,"syncUsageTokens",0,_,"testModelProviderEndpoint",0,tY,"toggleSkill",0,tj,"updateAdminUser",0,N,"updateModelProvider",0,tB,"updateProjectAiConfigFile",0,eN,"updateProjectManagerGoal",0,eH,"updateProjectManagerStage",0,e0,"updateProjectManagerWorkItem",0,eG,"updateProjectManagerWorkItemStatus",0,eU,"updateProjectTemplate",0,eo,"updateProviderModel",0,tW,"updateSessionLastPrompt",0,e5,"updateSkill",0,th,"updateTemplate",0,tE,"updateTemplateFile",0,tF,"writeCliConfigFile",0,ep],47721)}]);
|