agent-tower 0.7.2-beta.7 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +4 -1
- package/dist/app.js.map +1 -1
- package/dist/app.test.js +80 -1
- package/dist/app.test.js.map +1 -1
- package/dist/cli.js +4 -10
- package/dist/cli.js.map +1 -1
- package/dist/core/container.d.ts +8 -0
- package/dist/core/container.d.ts.map +1 -1
- package/dist/core/container.js +42 -0
- package/dist/core/container.js.map +1 -1
- package/dist/core/event-bus.d.ts +2 -0
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/executors/__tests__/image-utils.test.d.ts +2 -0
- package/dist/executors/__tests__/image-utils.test.d.ts.map +1 -0
- package/dist/executors/__tests__/image-utils.test.js +25 -0
- package/dist/executors/__tests__/image-utils.test.js.map +1 -0
- package/dist/executors/base.executor.d.ts +2 -0
- package/dist/executors/base.executor.d.ts.map +1 -1
- package/dist/executors/base.executor.js +6 -0
- package/dist/executors/base.executor.js.map +1 -1
- package/dist/executors/image-utils.d.ts.map +1 -1
- package/dist/executors/image-utils.js +10 -8
- package/dist/executors/image-utils.js.map +1 -1
- package/dist/git/git-cli.d.ts +2 -0
- package/dist/git/git-cli.d.ts.map +1 -1
- package/dist/git/git-cli.js +2 -0
- package/dist/git/git-cli.js.map +1 -1
- package/dist/git/worktree.manager.d.ts +2 -1
- package/dist/git/worktree.manager.d.ts.map +1 -1
- package/dist/git/worktree.manager.js +18 -12
- package/dist/git/worktree.manager.js.map +1 -1
- package/dist/index.js +16 -31
- package/dist/index.js.map +1 -1
- package/dist/mcp/http-client.d.ts +1 -0
- package/dist/mcp/http-client.d.ts.map +1 -1
- package/dist/mcp/http-client.js +3 -0
- package/dist/mcp/http-client.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +15 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/sessions.js +2 -2
- package/dist/mcp/tools/sessions.js.map +1 -1
- package/dist/mcp/tools/workspaces.d.ts.map +1 -1
- package/dist/mcp/tools/workspaces.js +2 -1
- package/dist/mcp/tools/workspaces.js.map +1 -1
- package/dist/middleware/access-auth.d.ts +1 -0
- package/dist/middleware/access-auth.d.ts.map +1 -1
- package/dist/middleware/access-auth.js +1 -1
- package/dist/middleware/access-auth.js.map +1 -1
- package/dist/output/__tests__/text-block-lifecycle.test.d.ts +2 -0
- package/dist/output/__tests__/text-block-lifecycle.test.d.ts.map +1 -0
- package/dist/output/__tests__/text-block-lifecycle.test.js +241 -0
- package/dist/output/__tests__/text-block-lifecycle.test.js.map +1 -0
- package/dist/output/claude-code-parser.d.ts +3 -0
- package/dist/output/claude-code-parser.d.ts.map +1 -1
- package/dist/output/claude-code-parser.js +58 -7
- package/dist/output/claude-code-parser.js.map +1 -1
- package/dist/output/codex-parser.d.ts.map +1 -1
- package/dist/output/codex-parser.js +4 -6
- package/dist/output/codex-parser.js.map +1 -1
- package/dist/output/cursor-agent-parser.d.ts.map +1 -1
- package/dist/output/cursor-agent-parser.js +4 -0
- package/dist/output/cursor-agent-parser.js.map +1 -1
- package/dist/output/gemini-parser.d.ts +18 -0
- package/dist/output/gemini-parser.d.ts.map +1 -0
- package/dist/output/gemini-parser.js +91 -0
- package/dist/output/gemini-parser.js.map +1 -0
- package/dist/output/msg-store.d.ts +6 -0
- package/dist/output/msg-store.d.ts.map +1 -1
- package/dist/output/msg-store.js +17 -0
- package/dist/output/msg-store.js.map +1 -1
- package/dist/output/text-block-tracker.d.ts +29 -0
- package/dist/output/text-block-tracker.d.ts.map +1 -0
- package/dist/output/text-block-tracker.js +149 -0
- package/dist/output/text-block-tracker.js.map +1 -0
- package/dist/output/types.d.ts +9 -0
- package/dist/output/types.d.ts.map +1 -1
- package/dist/output/types.js +0 -4
- package/dist/output/types.js.map +1 -1
- package/dist/routes/__tests__/sessions-runtime.test.js +3 -0
- package/dist/routes/__tests__/sessions-runtime.test.js.map +1 -1
- package/dist/routes/__tests__/team-run-translations.test.d.ts +2 -0
- package/dist/routes/__tests__/team-run-translations.test.d.ts.map +1 -0
- package/dist/routes/__tests__/team-run-translations.test.js +418 -0
- package/dist/routes/__tests__/team-run-translations.test.js.map +1 -0
- package/dist/routes/__tests__/translations.test.d.ts +2 -0
- package/dist/routes/__tests__/translations.test.d.ts.map +1 -0
- package/dist/routes/__tests__/translations.test.js +286 -0
- package/dist/routes/__tests__/translations.test.js.map +1 -0
- package/dist/routes/__tests__/workspaces.test.js +140 -0
- package/dist/routes/__tests__/workspaces.test.js.map +1 -1
- package/dist/routes/conversations.d.ts.map +1 -1
- package/dist/routes/conversations.js +19 -2
- package/dist/routes/conversations.js.map +1 -1
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +2 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/sessions.d.ts.map +1 -1
- package/dist/routes/sessions.js +32 -3
- package/dist/routes/sessions.js.map +1 -1
- package/dist/routes/team-runs.d.ts.map +1 -1
- package/dist/routes/team-runs.js +84 -15
- package/dist/routes/team-runs.js.map +1 -1
- package/dist/routes/translations.d.ts +4 -0
- package/dist/routes/translations.d.ts.map +1 -0
- package/dist/routes/translations.js +148 -0
- package/dist/routes/translations.js.map +1 -0
- package/dist/routes/user-input-origin.d.ts +4 -0
- package/dist/routes/user-input-origin.d.ts.map +1 -0
- package/dist/routes/user-input-origin.js +7 -0
- package/dist/routes/user-input-origin.js.map +1 -0
- package/dist/routes/workspaces.d.ts.map +1 -1
- package/dist/routes/workspaces.js +32 -2
- package/dist/routes/workspaces.js.map +1 -1
- package/dist/runtime/__tests__/acp-driver-lifecycle.test.js +2 -2
- package/dist/runtime/__tests__/acp-driver-lifecycle.test.js.map +1 -1
- package/dist/runtime/__tests__/acp-driver-submission.test.d.ts +2 -0
- package/dist/runtime/__tests__/acp-driver-submission.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/acp-driver-submission.test.js +88 -0
- package/dist/runtime/__tests__/acp-driver-submission.test.js.map +1 -0
- package/dist/runtime/__tests__/acp-history-reconciler.test.js +244 -0
- package/dist/runtime/__tests__/acp-history-reconciler.test.js.map +1 -1
- package/dist/runtime/__tests__/acp-projector.test.js +36 -0
- package/dist/runtime/__tests__/acp-projector.test.js.map +1 -1
- package/dist/runtime/__tests__/claude-cli-control.test.js +20 -0
- package/dist/runtime/__tests__/claude-cli-control.test.js.map +1 -1
- package/dist/runtime/__tests__/cli-driver-submission.test.d.ts +2 -0
- package/dist/runtime/__tests__/cli-driver-submission.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/cli-driver-submission.test.js +61 -0
- package/dist/runtime/__tests__/cli-driver-submission.test.js.map +1 -0
- package/dist/runtime/__tests__/codex-cli-control.test.js +25 -0
- package/dist/runtime/__tests__/codex-cli-control.test.js.map +1 -1
- package/dist/runtime/acp/acp-driver.js +38 -1
- package/dist/runtime/acp/acp-driver.js.map +1 -1
- package/dist/runtime/acp/history-reconciler.d.ts.map +1 -1
- package/dist/runtime/acp/history-reconciler.js +95 -36
- package/dist/runtime/acp/history-reconciler.js.map +1 -1
- package/dist/runtime/acp/projector.d.ts +5 -2
- package/dist/runtime/acp/projector.d.ts.map +1 -1
- package/dist/runtime/acp/projector.js +50 -23
- package/dist/runtime/acp/projector.js.map +1 -1
- package/dist/runtime/claude-cli-control.d.ts +4 -1
- package/dist/runtime/claude-cli-control.d.ts.map +1 -1
- package/dist/runtime/claude-cli-control.js +3 -1
- package/dist/runtime/claude-cli-control.js.map +1 -1
- package/dist/runtime/cli-driver.js +21 -7
- package/dist/runtime/cli-driver.js.map +1 -1
- package/dist/runtime/cli-parser.d.ts.map +1 -1
- package/dist/runtime/cli-parser.js +3 -0
- package/dist/runtime/cli-parser.js.map +1 -1
- package/dist/runtime/codex-cli-control.d.ts +4 -1
- package/dist/runtime/codex-cli-control.d.ts.map +1 -1
- package/dist/runtime/codex-cli-control.js +9 -6
- package/dist/runtime/codex-cli-control.js.map +1 -1
- package/dist/runtime/codex-cli-projector.d.ts +1 -1
- package/dist/runtime/codex-cli-projector.d.ts.map +1 -1
- package/dist/runtime/codex-cli-projector.js +4 -2
- package/dist/runtime/codex-cli-projector.js.map +1 -1
- package/dist/runtime/contracts.d.ts +15 -2
- package/dist/runtime/contracts.d.ts.map +1 -1
- package/dist/runtime/runtime-coordinator.d.ts.map +1 -1
- package/dist/runtime/runtime-coordinator.js +34 -1
- package/dist/runtime/runtime-coordinator.js.map +1 -1
- package/dist/services/__tests__/conflict-admission.test.d.ts +2 -0
- package/dist/services/__tests__/conflict-admission.test.d.ts.map +1 -0
- package/dist/services/__tests__/conflict-admission.test.js +37 -0
- package/dist/services/__tests__/conflict-admission.test.js.map +1 -0
- package/dist/services/__tests__/conflict-recovery-key.test.d.ts +2 -0
- package/dist/services/__tests__/conflict-recovery-key.test.d.ts.map +1 -0
- package/dist/services/__tests__/conflict-recovery-key.test.js +143 -0
- package/dist/services/__tests__/conflict-recovery-key.test.js.map +1 -0
- package/dist/services/__tests__/message-delivery.integration.test.d.ts +2 -0
- package/dist/services/__tests__/message-delivery.integration.test.d.ts.map +1 -0
- package/dist/services/__tests__/message-delivery.integration.test.js +1137 -0
- package/dist/services/__tests__/message-delivery.integration.test.js.map +1 -0
- package/dist/services/__tests__/review-team-user-counterexamples.test.d.ts +2 -0
- package/dist/services/__tests__/review-team-user-counterexamples.test.d.ts.map +1 -0
- package/dist/services/__tests__/review-team-user-counterexamples.test.js +200 -0
- package/dist/services/__tests__/review-team-user-counterexamples.test.js.map +1 -0
- package/dist/services/__tests__/session-manager.lifecycle.test.js +37 -0
- package/dist/services/__tests__/session-manager.lifecycle.test.js.map +1 -1
- package/dist/services/__tests__/session-manager.team-run.test.js +19 -2
- package/dist/services/__tests__/session-manager.team-run.test.js.map +1 -1
- package/dist/services/__tests__/team-initial-delivery.integration.test.d.ts +2 -0
- package/dist/services/__tests__/team-initial-delivery.integration.test.d.ts.map +1 -0
- package/dist/services/__tests__/team-initial-delivery.integration.test.js +469 -0
- package/dist/services/__tests__/team-initial-delivery.integration.test.js.map +1 -0
- package/dist/services/__tests__/team-reconciler.service.test.js +102 -101
- package/dist/services/__tests__/team-reconciler.service.test.js.map +1 -1
- package/dist/services/__tests__/team-room-delivery.test.d.ts +2 -0
- package/dist/services/__tests__/team-room-delivery.test.d.ts.map +1 -0
- package/dist/services/__tests__/team-room-delivery.test.js +670 -0
- package/dist/services/__tests__/team-room-delivery.test.js.map +1 -0
- package/dist/services/__tests__/team-user-delivery.integration.test.d.ts +2 -0
- package/dist/services/__tests__/team-user-delivery.integration.test.d.ts.map +1 -0
- package/dist/services/__tests__/team-user-delivery.integration.test.js +622 -0
- package/dist/services/__tests__/team-user-delivery.integration.test.js.map +1 -0
- package/dist/services/__tests__/translation-client.test.d.ts +2 -0
- package/dist/services/__tests__/translation-client.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-client.test.js +240 -0
- package/dist/services/__tests__/translation-client.test.js.map +1 -0
- package/dist/services/__tests__/translation-protection.test.d.ts +2 -0
- package/dist/services/__tests__/translation-protection.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-protection.test.js +156 -0
- package/dist/services/__tests__/translation-protection.test.js.map +1 -0
- package/dist/services/__tests__/translation-queue.test.d.ts +2 -0
- package/dist/services/__tests__/translation-queue.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-queue.test.js +277 -0
- package/dist/services/__tests__/translation-queue.test.js.map +1 -0
- package/dist/services/__tests__/translation-room-admission.test.d.ts +2 -0
- package/dist/services/__tests__/translation-room-admission.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-room-admission.test.js +371 -0
- package/dist/services/__tests__/translation-room-admission.test.js.map +1 -0
- package/dist/services/__tests__/translation-session-blocks.test.d.ts +2 -0
- package/dist/services/__tests__/translation-session-blocks.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-session-blocks.test.js +367 -0
- package/dist/services/__tests__/translation-session-blocks.test.js.map +1 -0
- package/dist/services/__tests__/translation-settings.service.test.d.ts +2 -0
- package/dist/services/__tests__/translation-settings.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-settings.service.test.js +154 -0
- package/dist/services/__tests__/translation-settings.service.test.js.map +1 -0
- package/dist/services/__tests__/translation.service.test.d.ts +2 -0
- package/dist/services/__tests__/translation.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation.service.test.js +480 -0
- package/dist/services/__tests__/translation.service.test.js.map +1 -0
- package/dist/services/access-auth.service.d.ts +1 -0
- package/dist/services/access-auth.service.d.ts.map +1 -1
- package/dist/services/access-auth.service.js +8 -0
- package/dist/services/access-auth.service.js.map +1 -1
- package/dist/services/attachment-context.d.ts +7 -1
- package/dist/services/attachment-context.d.ts.map +1 -1
- package/dist/services/attachment-context.js +23 -2
- package/dist/services/attachment-context.js.map +1 -1
- package/dist/services/conflict-admission.d.ts +37 -0
- package/dist/services/conflict-admission.d.ts.map +1 -0
- package/dist/services/conflict-admission.js +97 -0
- package/dist/services/conflict-admission.js.map +1 -0
- package/dist/services/conflict-resolution-context.d.ts +33 -0
- package/dist/services/conflict-resolution-context.d.ts.map +1 -0
- package/dist/services/conflict-resolution-context.js +434 -0
- package/dist/services/conflict-resolution-context.js.map +1 -0
- package/dist/services/message-delivery.service.d.ts +195 -0
- package/dist/services/message-delivery.service.d.ts.map +1 -0
- package/dist/services/message-delivery.service.js +956 -0
- package/dist/services/message-delivery.service.js.map +1 -0
- package/dist/services/project.service.d.ts +1 -1
- package/dist/services/session-manager.d.ts +94 -74
- package/dist/services/session-manager.d.ts.map +1 -1
- package/dist/services/session-manager.js +91 -17
- package/dist/services/session-manager.js.map +1 -1
- package/dist/services/task.service.d.ts +26 -20
- package/dist/services/task.service.d.ts.map +1 -1
- package/dist/services/task.service.js +9 -26
- package/dist/services/task.service.js.map +1 -1
- package/dist/services/team-room-delivery.d.ts +541 -0
- package/dist/services/team-room-delivery.d.ts.map +1 -0
- package/dist/services/team-room-delivery.js +123 -0
- package/dist/services/team-room-delivery.js.map +1 -0
- package/dist/services/team-run.service.d.ts +83 -0
- package/dist/services/team-run.service.d.ts.map +1 -1
- package/dist/services/team-run.service.js +207 -18
- package/dist/services/team-run.service.js.map +1 -1
- package/dist/services/team-scheduler.service.d.ts +3 -0
- package/dist/services/team-scheduler.service.d.ts.map +1 -1
- package/dist/services/team-scheduler.service.js +65 -11
- package/dist/services/team-scheduler.service.js.map +1 -1
- package/dist/services/team-task-input.d.ts +37 -0
- package/dist/services/team-task-input.d.ts.map +1 -0
- package/dist/services/team-task-input.js +98 -0
- package/dist/services/team-task-input.js.map +1 -0
- package/dist/services/team-task-input.service.d.ts +72 -0
- package/dist/services/team-task-input.service.d.ts.map +1 -0
- package/dist/services/team-task-input.service.js +205 -0
- package/dist/services/team-task-input.service.js.map +1 -0
- package/dist/services/translation-client.d.ts +31 -0
- package/dist/services/translation-client.d.ts.map +1 -0
- package/dist/services/translation-client.js +169 -0
- package/dist/services/translation-client.js.map +1 -0
- package/dist/services/translation-errors.d.ts +14 -0
- package/dist/services/translation-errors.d.ts.map +1 -0
- package/dist/services/translation-errors.js +16 -0
- package/dist/services/translation-errors.js.map +1 -0
- package/dist/services/translation-protection.d.ts +27 -0
- package/dist/services/translation-protection.d.ts.map +1 -0
- package/dist/services/translation-protection.js +547 -0
- package/dist/services/translation-protection.js.map +1 -0
- package/dist/services/translation-queue.d.ts +49 -0
- package/dist/services/translation-queue.d.ts.map +1 -0
- package/dist/services/translation-queue.js +211 -0
- package/dist/services/translation-queue.js.map +1 -0
- package/dist/services/translation-settings.service.d.ts +152 -0
- package/dist/services/translation-settings.service.d.ts.map +1 -0
- package/dist/services/translation-settings.service.js +174 -0
- package/dist/services/translation-settings.service.js.map +1 -0
- package/dist/services/translation.service.d.ts +168 -0
- package/dist/services/translation.service.d.ts.map +1 -0
- package/dist/services/translation.service.js +861 -0
- package/dist/services/translation.service.js.map +1 -0
- package/dist/services/workspace.service.d.ts +84 -93
- package/dist/services/workspace.service.d.ts.map +1 -1
- package/dist/services/workspace.service.js +69 -5
- package/dist/services/workspace.service.js.map +1 -1
- package/dist/socket/__tests__/socket-gateway.test.js +131 -1
- package/dist/socket/__tests__/socket-gateway.test.js.map +1 -1
- package/dist/socket/socket-gateway.d.ts +6 -0
- package/dist/socket/socket-gateway.d.ts.map +1 -1
- package/dist/socket/socket-gateway.js +312 -6
- package/dist/socket/socket-gateway.js.map +1 -1
- package/dist/utils/database-runtime.test.js +82 -5
- package/dist/utils/database-runtime.test.js.map +1 -1
- package/dist/utils/database-schema.d.ts +9 -0
- package/dist/utils/database-schema.d.ts.map +1 -0
- package/dist/utils/database-schema.js +434 -0
- package/dist/utils/database-schema.js.map +1 -0
- package/dist/utils/database-schema.test.d.ts +2 -0
- package/dist/utils/database-schema.test.d.ts.map +1 -0
- package/dist/utils/database-schema.test.js +359 -0
- package/dist/utils/database-schema.test.js.map +1 -0
- package/dist/utils/database-team-foundation.test.d.ts +2 -0
- package/dist/utils/database-team-foundation.test.d.ts.map +1 -0
- package/dist/utils/database-team-foundation.test.js +467 -0
- package/dist/utils/database-team-foundation.test.js.map +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +29 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/owned-child-process.test.js +6 -3
- package/dist/utils/owned-child-process.test.js.map +1 -1
- package/dist/utils/text-preview.d.ts +4 -0
- package/dist/utils/text-preview.d.ts.map +1 -0
- package/dist/utils/text-preview.js +21 -0
- package/dist/utils/text-preview.js.map +1 -0
- package/dist/web/assets/AgentDemoPage-BfXkNCdN.js +1 -0
- package/dist/web/assets/{AgentEnvironmentSettingsPage-SnxiaHvN.js → AgentEnvironmentSettingsPage-GHjKIWpb.js} +1 -1
- package/dist/web/assets/AttachmentPreview-CLN1lnLe.js +2 -0
- package/dist/web/assets/BranchSelect-Cofp8vYf.js +1 -0
- package/dist/web/assets/BrandLogo-BUimEX-9.js +1 -0
- package/dist/web/assets/ConversationPage-R7vNaOQv.js +1 -0
- package/dist/web/assets/CreateTaskInput-CasITF8y.js +1 -0
- package/dist/web/assets/{DemoPage-BHbnnZFF.js → DemoPage-DK-ikg1_.js} +3 -3
- package/dist/web/assets/DesignSystemPage-BhjNs2vP.js +12 -0
- package/dist/web/assets/EditableTaskTitle-BJ9Rxggf.js +70 -0
- package/dist/web/assets/{ExecutionPermissionSelector-DcC4IBOF.js → ExecutionPermissionSelector-B8befbxJ.js} +1 -1
- package/dist/web/assets/GeneralSettingsPage-RMN2al8I.js +1 -0
- package/dist/web/assets/{LoadingPreviewPage-dE_jyl19.js → LoadingPreviewPage-BDlf89rJ.js} +1 -1
- package/dist/web/assets/{McpSettingsPage-CIuQ4bvy.js → McpSettingsPage-CPNxFF67.js} +1 -1
- package/dist/web/assets/{MemberAvatar-BG0VDZKf.js → MemberAvatar-YVr_erAr.js} +1 -1
- package/dist/web/assets/MobileTaskDetail-QNUHMq7u.js +3 -0
- package/dist/web/assets/NotificationSettingsPage-BEyuyu3Z.js +1 -0
- package/dist/web/assets/ProfileSettingsPage-CHe4LlRp.js +3 -0
- package/dist/web/assets/ProjectKanbanPage-Bt_01giW.js +12 -0
- package/dist/web/assets/ProjectSettingsPage-cus6Ns97.js +2 -0
- package/dist/web/assets/{ProviderSettingsPage-DLq-GBxp.js → ProviderSettingsPage-DqA_B1Ey.js} +2 -2
- package/dist/web/assets/{SettingsMasterDetail-UfyoKAum.js → SettingsMasterDetail-DjWR9Sqk.js} +1 -1
- package/dist/web/assets/TaskDetail-rEXNe2h3.js +1 -0
- package/dist/web/assets/TeamSettingsPage-DwWROtW6.js +1 -0
- package/dist/web/assets/TranslationSettingsPage-Cod9c4Ug.js +1 -0
- package/dist/web/assets/arc-DEy33vTc.js +1 -0
- package/dist/web/assets/{architectureDiagram-3BPJPVTR-BCNj6ZWE.js → architectureDiagram-3BPJPVTR-Ky1D1LBk.js} +1 -1
- package/dist/web/assets/{at-sign-C4VhWike.js → at-sign-C48_y345.js} +1 -1
- package/dist/web/assets/{blockDiagram-GPEHLZMM-D1kmB9gz.js → blockDiagram-GPEHLZMM-BNgB7kNT.js} +1 -1
- package/dist/web/assets/{c4Diagram-AAUBKEIU-DbWKTkSe.js → c4Diagram-AAUBKEIU-4GMrPMgQ.js} +1 -1
- package/dist/web/assets/channel-DTP-syjA.js +1 -0
- package/dist/web/assets/check-BmiJ7qMY.js +1 -0
- package/dist/web/assets/chevron-down-3y5Aiolp.js +1 -0
- package/dist/web/assets/{chevron-up-DOkDFvIc.js → chevron-up-DqaYcjpq.js} +1 -1
- package/dist/web/assets/{chunk-2J33WTMH-B3TA0-LD.js → chunk-2J33WTMH-C439hRe_.js} +1 -1
- package/dist/web/assets/{chunk-4BX2VUAB-CvPTiBSV.js → chunk-4BX2VUAB-D8GK3M3t.js} +1 -1
- package/dist/web/assets/{chunk-55IACEB6-xGe9Fu9Z.js → chunk-55IACEB6-Dl4UhJ8X.js} +1 -1
- package/dist/web/assets/{chunk-727SXJPM-H8pz3amK.js → chunk-727SXJPM-BSEeayBq.js} +1 -1
- package/dist/web/assets/{chunk-AQP2D5EJ-BmYYNxcL.js → chunk-AQP2D5EJ-B6chbZfT.js} +1 -1
- package/dist/web/assets/{chunk-FMBD7UC4-BmOEsLTE.js → chunk-FMBD7UC4-DaLkiLdQ.js} +1 -1
- package/dist/web/assets/{chunk-ND2GUHAM-C5MfA0xc.js → chunk-ND2GUHAM-DeQwZAAT.js} +1 -1
- package/dist/web/assets/{chunk-QZHKN3VN-BcrGYZ7V.js → chunk-QZHKN3VN-CLRr4YRM.js} +1 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-CUKgurLa.js +1 -0
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-CUKgurLa.js +1 -0
- package/dist/web/assets/code-block-OCS4YCEC-CnoxUpOx.js +2 -0
- package/dist/web/assets/confirm-dialog-ltNBFYCs.js +1 -0
- package/dist/web/assets/content-DPQMfMae.js +2 -0
- package/dist/web/assets/{copy-CdzVE3kf.js → copy-HRMhTkIG.js} +1 -1
- package/dist/web/assets/{cose-bilkent-S5V4N54A-CLQ-m71G.js → cose-bilkent-S5V4N54A-C1UiYzfk.js} +1 -1
- package/dist/web/assets/cssMode-DkuSsGeg.js +1 -0
- package/dist/web/assets/{dagre-BM42HDAG-CmDqxOfn.js → dagre-BM42HDAG-CTJpBgye.js} +1 -1
- package/dist/web/assets/{diagram-2AECGRRQ-D-fSbEll.js → diagram-2AECGRRQ-Dj1_TEYp.js} +1 -1
- package/dist/web/assets/{diagram-5GNKFQAL-HPywThAf.js → diagram-5GNKFQAL-V-KUpwqh.js} +1 -1
- package/dist/web/assets/{diagram-KO2AKTUF-DAzLhllz.js → diagram-KO2AKTUF-CXG1ZIeX.js} +1 -1
- package/dist/web/assets/{diagram-LMA3HP47-DXYB9h8L.js → diagram-LMA3HP47-BZSJUwk9.js} +1 -1
- package/dist/web/assets/{diagram-OG6HWLK6-vv4kz4Zo.js → diagram-OG6HWLK6-CCr4gq4u.js} +1 -1
- package/dist/web/assets/dialog-CuFEdqLg.js +5 -0
- package/dist/web/assets/{erDiagram-TEJ5UH35-Cu6aVKAa.js → erDiagram-TEJ5UH35-Djtyzh6z.js} +1 -1
- package/dist/web/assets/{flowDiagram-I6XJVG4X-BKDe8WSQ.js → flowDiagram-I6XJVG4X-BmSVSiXJ.js} +1 -1
- package/dist/web/assets/{freemarker2-DI2giuAo.js → freemarker2-DdptX5f1.js} +2 -2
- package/dist/web/assets/{ganttDiagram-6RSMTGT7-DMVLzmAE.js → ganttDiagram-6RSMTGT7-r5vQX-b5.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PVQCEYII-vogzYdKn.js → gitGraphDiagram-PVQCEYII-Zj9aloh9.js} +1 -1
- package/dist/web/assets/{globe-Rnn-nKw-.js → globe-B9I-jHBB.js} +1 -1
- package/dist/web/assets/handlebars-B34f-LAf.js +1 -0
- package/dist/web/assets/hooks-BLxb16IA.js +1 -0
- package/dist/web/assets/html-CnvOQ63o.js +1 -0
- package/dist/web/assets/htmlMode-RdxZ8Svp.js +1 -0
- package/dist/web/assets/{icon-button-CuSuXgr_.js → icon-button-CYiKa-7C.js} +1 -1
- package/dist/web/assets/index-0XPZayUU.css +1 -0
- package/dist/web/assets/index-B1oVmCie.js +1 -0
- package/dist/web/assets/index-BJObbxud.js +122 -0
- package/dist/web/assets/index-Bhvt-E6d.js +41 -0
- package/dist/web/assets/index-BtUQYU5l.js +1 -0
- package/dist/web/assets/index-CThFsQNP.js +1 -0
- package/dist/web/assets/index-DZLnTISJ.js +1 -0
- package/dist/web/assets/index-DcOU2m2F.js +1 -0
- package/dist/web/assets/{index-CMjLMilU.js → index-Dk3bRQAK.js} +1 -1
- package/dist/web/assets/{index-B88xAivn.js → index-DkRy6eNX.js} +5 -5
- package/dist/web/assets/{infoDiagram-5YYISTIA-CEfSHkNq.js → infoDiagram-5YYISTIA-BHtVaxZx.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-BXKZuWtD.js → ishikawaDiagram-YF4QCWOH-BYmwjkbC.js} +5 -5
- package/dist/web/assets/javascript-BhombDEO.js +1 -0
- package/dist/web/assets/{journeyDiagram-JHISSGLW-wsOUYlu7.js → journeyDiagram-JHISSGLW-c8BBqqRS.js} +1 -1
- package/dist/web/assets/jsonMode-BJGOUeaV.js +7 -0
- package/dist/web/assets/{kanban-definition-UN3LZRKU-DNsuvOrU.js → kanban-definition-UN3LZRKU-D4Vr-oFT.js} +1 -1
- package/dist/web/assets/{kbd-B3m64lRd.js → kbd-C88ut3t9.js} +1 -1
- package/dist/web/assets/{key-round-DpYSyeDH.js → key-round-Cjbj2qNa.js} +1 -1
- package/dist/web/assets/{layers-CxqMQVmH.js → layers-eaHAVcc3.js} +1 -1
- package/dist/web/assets/{linear-BmmCZdOQ.js → linear-opi90s0L.js} +1 -1
- package/dist/web/assets/{link-DbSpzB1w.js → link-BSGb85gq.js} +1 -1
- package/dist/web/assets/liquid-Czy1WpPz.js +1 -0
- package/dist/web/assets/{lspLanguageFeatures-WhdC7zdf.js → lspLanguageFeatures-DWu2Ubf0.js} +1 -1
- package/dist/web/assets/mdx-DhXfoSnM.js +1 -0
- package/dist/web/assets/menu--sjyisSg.js +1 -0
- package/dist/web/assets/{mermaid-NOHMQCX5-DmKVQY9m.js → mermaid-NOHMQCX5-BSNbBj78.js} +71 -71
- package/dist/web/assets/{message-square-CfNb-MTd.js → message-square-BLEJN6p7.js} +1 -1
- package/dist/web/assets/{mindmap-definition-RKZ34NQL-0RzXjZ9G.js → mindmap-definition-RKZ34NQL-BN3ZjBh-.js} +1 -1
- package/dist/web/assets/{modal-Kpqn-nDO.js → modal-CSGOqphK.js} +1 -1
- package/dist/web/assets/{monaco-I1fXAMIt.js → monaco-BkuNyOkP.js} +3 -3
- package/dist/web/assets/{paperclip-BBrzKZQC.js → paperclip-CTNoXpUW.js} +1 -1
- package/dist/web/assets/{pencil-pzVKblxj.js → pencil-Cp70ZwtG.js} +1 -1
- package/dist/web/assets/{people-C6b3eeLq.js → people-DT78SebR.js} +1 -1
- package/dist/web/assets/{pieDiagram-4H26LBE5-Bcvzb8TW.js → pieDiagram-4H26LBE5-CfmFHpPI.js} +2 -2
- package/dist/web/assets/popover-BiVxGGgp.js +1 -0
- package/dist/web/assets/python-DIcQDjcf.js +1 -0
- package/dist/web/assets/{quadrantDiagram-W4KKPZXB-DwNhxMxj.js → quadrantDiagram-W4KKPZXB-CeaumJAa.js} +1 -1
- package/dist/web/assets/razor-DYK6Rxer.js +1 -0
- package/dist/web/assets/{requirementDiagram-4Y6WPE33-D2wSGYn2.js → requirementDiagram-4Y6WPE33-BWWCDXCE.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-5OEKKPKP-l3LLF--T.js → sankeyDiagram-5OEKKPKP-DAJut743.js} +1 -1
- package/dist/web/assets/search-DniD_AGC.js +1 -0
- package/dist/web/assets/search-field-CQLDXLeA.js +1 -0
- package/dist/web/assets/select-B5RYunTs.js +1 -0
- package/dist/web/assets/{select-DGwKE4l0.js → select-BPdJrr5M.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-3UESZ5HK-BAGsbTS_.js → sequenceDiagram-3UESZ5HK-CynjRGW4.js} +1 -1
- package/dist/web/assets/{server-BIPZ9Ka-.js → server-xswxWpKD.js} +1 -1
- package/dist/web/assets/stateDiagram-AJRCARHV-amAtpx9w.js +1 -0
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-V-lSceg1.js +1 -0
- package/dist/web/assets/{textarea-Bnfq7adW.js → textarea-BVyPl9rM.js} +1 -1
- package/dist/web/assets/{timeline-definition-PNZ67QCA-Dt-DcRrG.js → timeline-definition-PNZ67QCA-DZ9W7WlP.js} +1 -1
- package/dist/web/assets/toggles-QcIz43DP.js +1 -0
- package/dist/web/assets/tooltip-CPqGK_WZ.js +1 -0
- package/dist/web/assets/{track-B_K578io.js → track-Ckye0-tt.js} +1 -1
- package/dist/web/assets/{trash-2-ALAYDudv.js → trash-2-CvUJsbtT.js} +1 -1
- package/dist/web/assets/tsMode-c5x0d47n.js +11 -0
- package/dist/web/assets/typescript-i7eYblLt.js +1 -0
- package/dist/web/assets/{upload-D7hKT2VA.js → upload-CsXAmAun.js} +1 -1
- package/dist/web/assets/{use-profiles-Ncqxdw7S.js → use-profiles-DuXaBRju.js} +1 -1
- package/dist/web/assets/{use-projects-Dwy9AfAG.js → use-projects-Ddz0knyr.js} +1 -1
- package/dist/web/assets/{use-providers-BRyZjuBG.js → use-providers-Td1-gyrN.js} +1 -1
- package/dist/web/assets/use-translation-settings-NYM0lmBx.js +1 -0
- package/dist/web/assets/use-workspaces-CdJZLmGh.js +1 -0
- package/dist/web/assets/useNormalizedLogs--RbVywYa.js +1 -0
- package/dist/web/assets/useTokenUsage-DDXf7E4p.js +1 -0
- package/dist/web/assets/{vennDiagram-CIIHVFJN-Cr55FtiY.js → vennDiagram-CIIHVFJN-CB2Ubvy9.js} +1 -1
- package/dist/web/assets/{wardley-L42UT6IY-CtwMk9MJ.js → wardley-L42UT6IY-BXOkk77I.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-YWT4CUSO-BeyHmTu3.js → wardleyDiagram-YWT4CUSO-VA6ywdQQ.js} +1 -1
- package/dist/web/assets/xml-D2EGActB.js +1 -0
- package/dist/web/assets/{xychartDiagram-2RQKCTM6-9g34Lq8E.js → xychartDiagram-2RQKCTM6-FNcvDj5G.js} +1 -1
- package/dist/web/assets/yaml-jeiIZSL4.js +1 -0
- package/dist/web/index.html +2 -2
- package/node_modules/@agent-tower/shared/dist/index.d.ts +1 -0
- package/node_modules/@agent-tower/shared/dist/index.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/index.js +1 -0
- package/node_modules/@agent-tower/shared/dist/index.js.map +1 -1
- package/node_modules/@agent-tower/shared/dist/log-adapter.d.ts +11 -0
- package/node_modules/@agent-tower/shared/dist/log-adapter.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/log-adapter.js +2 -0
- package/node_modules/@agent-tower/shared/dist/log-adapter.js.map +1 -1
- package/node_modules/@agent-tower/shared/dist/socket/events.d.ts +5 -2
- package/node_modules/@agent-tower/shared/dist/socket/events.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/socket/events.js +2 -0
- package/node_modules/@agent-tower/shared/dist/socket/events.js.map +1 -1
- package/node_modules/@agent-tower/shared/dist/translation.d.ts +306 -0
- package/node_modules/@agent-tower/shared/dist/translation.d.ts.map +1 -0
- package/node_modules/@agent-tower/shared/dist/translation.js +8 -0
- package/node_modules/@agent-tower/shared/dist/translation.js.map +1 -0
- package/node_modules/@agent-tower/shared/dist/types.d.ts +23 -0
- package/node_modules/@agent-tower/shared/dist/types.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/prisma/migrations/20261016000000_add_translation_foundation/migration.sql +104 -0
- package/prisma/migrations/20261016010000_add_message_deliveries/migration.sql +158 -0
- package/prisma/migrations/20261019000000_add_room_translation_eligibility/migration.sql +3 -0
- package/prisma/migrations/20261019100000_add_team_delivery_foundation/migration.sql +217 -0
- package/prisma/schema.prisma +224 -0
- package/dist/web/assets/AgentDemoPage-CaR_Yk9_.js +0 -1
- package/dist/web/assets/BranchSelect-D-kqavDG.js +0 -1
- package/dist/web/assets/BrandLogo-CC1alVsd.js +0 -1
- package/dist/web/assets/ConversationPage-RWKLxe1j.js +0 -3
- package/dist/web/assets/CreateTaskInput-SHJ1YpRe.js +0 -1
- package/dist/web/assets/DesignSystemPage-ChCrzeKT.js +0 -12
- package/dist/web/assets/EditableTaskTitle-CGVeZUSt.js +0 -70
- package/dist/web/assets/GeneralSettingsPage-C_tkwpmF.js +0 -1
- package/dist/web/assets/MobileTaskDetail-DxE6ZDAS.js +0 -5
- package/dist/web/assets/NotificationSettingsPage-B-Ot2OMg.js +0 -1
- package/dist/web/assets/ProfileSettingsPage-Dn1lrjJr.js +0 -3
- package/dist/web/assets/ProjectKanbanPage-jcW8sA7x.js +0 -12
- package/dist/web/assets/ProjectSettingsPage-BFPty2eA.js +0 -2
- package/dist/web/assets/TaskDetail-a1jalILy.js +0 -3
- package/dist/web/assets/TeamSettingsPage-BxGc4W7K.js +0 -1
- package/dist/web/assets/arc-dhk0OSs5.js +0 -1
- package/dist/web/assets/channel-K0AG6Tl1.js +0 -1
- package/dist/web/assets/check-DYlb0A_N.js +0 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-BTJ44hwx.js +0 -1
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-BTJ44hwx.js +0 -1
- package/dist/web/assets/code-block-OCS4YCEC-DLPrDBDy.js +0 -2
- package/dist/web/assets/confirm-dialog-BRkrtULz.js +0 -1
- package/dist/web/assets/content-DPCGELMz.js +0 -2
- package/dist/web/assets/cssMode-ChMyv9Nj.js +0 -1
- package/dist/web/assets/dialog-B_vC5R4B.js +0 -5
- package/dist/web/assets/handlebars-B9tmKQPV.js +0 -1
- package/dist/web/assets/hooks-DK4m7-FN.js +0 -1
- package/dist/web/assets/html-B_E2U0g5.js +0 -1
- package/dist/web/assets/htmlMode-DRHM_Cwq.js +0 -1
- package/dist/web/assets/index-B6Lvy5Sr.js +0 -1
- package/dist/web/assets/index-BCV57B4O.js +0 -41
- package/dist/web/assets/index-CTG-4w90.js +0 -1
- package/dist/web/assets/index-Cz73HpYH.js +0 -122
- package/dist/web/assets/index-CzvAGoau.css +0 -1
- package/dist/web/assets/index-DENY_U7o.js +0 -1
- package/dist/web/assets/index-ZO2tqdha.js +0 -1
- package/dist/web/assets/javascript-ClWqjgn3.js +0 -1
- package/dist/web/assets/jsonMode-DVAoDfae.js +0 -7
- package/dist/web/assets/liquid-CZf3xdoq.js +0 -1
- package/dist/web/assets/mdx-xzVEPP01.js +0 -1
- package/dist/web/assets/menu-0A0v_lRV.js +0 -1
- package/dist/web/assets/popover-BYz89aiY.js +0 -1
- package/dist/web/assets/python-DL05HvW4.js +0 -1
- package/dist/web/assets/razor-BCZ3_uDf.js +0 -1
- package/dist/web/assets/search-field-B5czD2Pl.js +0 -1
- package/dist/web/assets/select-yem-xN9Z.js +0 -1
- package/dist/web/assets/stateDiagram-AJRCARHV-C0BHmXYX.js +0 -1
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-Be3UCkeQ.js +0 -1
- package/dist/web/assets/toggles-DxNDJZsN.js +0 -1
- package/dist/web/assets/tooltip-CHOgkFbE.js +0 -1
- package/dist/web/assets/tsMode-kXxq-Lw7.js +0 -11
- package/dist/web/assets/typescript-E3_QcT_u.js +0 -1
- package/dist/web/assets/use-attachments-CK7y5KsN.js +0 -2
- package/dist/web/assets/use-workspaces-BBbahdwU.js +0 -1
- package/dist/web/assets/useNormalizedLogs-CRHRedwp.js +0 -1
- package/dist/web/assets/useTokenUsage-YwiF0xnT.js +0 -1
- package/dist/web/assets/xml-DxKND8qX.js +0 -1
- package/dist/web/assets/yaml-BqpCqTY6.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{bd as B,a_ as M,be as U,u as z,r as S,j as p,n as T}from"./index-BJObbxud.js";import{C as Z}from"./chevron-down-3y5Aiolp.js";import{C as Y}from"./check-BmiJ7qMY.js";const q=["ASK","AUTO_SANDBOX","FULL_ACCESS"];function L(e){return q.includes(e)}function Se(e){const n=[],i=e.config??{},t=[],r=(a,c="INVALID_ENUM")=>{n.push({field:"executionPermission",code:c,message:a})};for(const a of["permissionMode","acpPermissionMode"])i[a]!==void 0&&(i[a]==="ASK"?t.push("ASK"):i[a]==="UNRESTRICTED"||i[a]==="AUTO_APPROVE"?t.push("FULL_ACCESS"):r(`${a} contains an invalid legacy permission mode`));const o=B(e.agentType)?.executionPermission.path;o&&i[o]!==void 0&&(typeof i[o]!="boolean"?r(`${o} must be true or false`,"INVALID_TYPE"):t.push(i[o]?"FULL_ACCESS":"ASK"));const s=e.executionPermission;s!==void 0&&!L(s)&&r("executionPermission must be ASK, AUTO_SANDBOX or FULL_ACCESS");const l=L(s)?s:t[0]??"ASK";return t.some(a=>a!==l)&&r("Legacy permission fields conflict with executionPermission","CONFLICT"),(e.executionPermissionReviewRequired||n.length===0&&s===void 0&&l==="ASK"&&e.agentType===M.CODEX)&&r("Legacy Codex permissions did not establish an explicit reviewer policy. Select an execution permission mode.","LEGACY_PERMISSION_REVIEW_REQUIRED"),{mode:l,diagnostics:n}}function _e(e,n){const i={...n};delete i.permissionMode,delete i.acpPermissionMode;const t=B(e)?.executionPermission.path;return t&&delete i[t],i}function G(e,n){let i=e.slice(0,n).split(/\r\n|\n|\r/g);return[i.length,i.pop().length+1]}function J(e,n,i){let t=e.split(/\r\n|\n|\r/g),r="",o=(Math.log10(n+1)|0)+1;for(let s=n-1;s<=n+1;s++){let l=t[s-1];l&&(r+=s.toString().padEnd(o," "),r+=": ",r+=l,r+=`
|
|
2
2
|
`,s===n&&(r+=" ".repeat(o+i+2),r+=`^
|
|
3
3
|
`))}return r}class m extends Error{line;column;codeblock;constructor(n,i){const[t,r]=G(i.toml,i.ptr),o=J(i.toml,t,r);super(`Invalid TOML document: ${n}
|
|
4
4
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as te,a as ne,d as le,e as ie,f as re,g as oe,h as ce,r as t,t as m,j as s,i as de,k as ue,l as A,m as G,B as p,I as z}from"./index-BJObbxud.js";import{S as U}from"./select-BPdJrr5M.js";import{T as me}from"./textarea-BVyPl9rM.js";import{S as pe}from"./toggles-QcIz43DP.js";import{u as ge}from"./use-providers-Td1-gyrN.js";import"./select-B5RYunTs.js";import"./menu-styles-DWynpVVz.js";import"./chevron-down-3y5Aiolp.js";import"./check-BmiJ7qMY.js";import"./index-DZLnTISJ.js";import"./index-Bhvt-E6d.js";import"./index-B1oVmCie.js";import"./index-CThFsQNP.js";import"./index-Dk3bRQAK.js";import"./index-BtUQYU5l.js";const fe=[{value:"zh-CN",label:"简体中文"},{value:"en",label:"English"}],N="__follow_task__",R=8;function W(P,y){return P instanceof Error?P.message:y}function Le(){const{locale:P,setLocale:y,t:e}=te(),{data:g}=ne(),{data:H}=ge(),{data:w}=le(),{data:r}=ie(),u=re(),i=oe(),S=ce(),[K,D]=t.useState(N),[E,k]=t.useState(""),[V,j]=t.useState(!1),[d,_]=t.useState(""),[o,L]=t.useState(""),[C,I]=t.useState(""),[M,f]=t.useState(!1),[q,h]=t.useState(!1),[b,l]=t.useState(null);t.useEffect(()=>{!g||!w||(D(g.commitMessageProviderId||N),k(g.commitMessagePrompt||w.prompt),j(!1))},[g,w]),t.useEffect(()=>{r&&(f(r.enabled),h(!1),l(null),_(""),L(""),I(""))},[r?.enabled]);const J=[{value:N,label:e("跟随任务")},...(H??[]).filter(a=>a.availability.type!=="NOT_FOUND").map(a=>({value:a.provider.id,label:a.provider.name}))],x=r?.enabled??!1,n=!x&&M?"enable":x&&!M?"disable":x&&q?"change":"idle",O=n!=="idle",Q=e(O?n==="disable"?"将关闭":n==="enable"?"将启用":"已启用":x?"已启用":"未启用"),X=t.useCallback(a=>{D(a);const v=a===N?null:a;u.mutate({commitMessageProviderId:v},{onError:()=>m.error(e("保存失败"))})},[u,e]),Y=t.useCallback(()=>{const a=E.trim()||null;u.mutate({commitMessagePrompt:a},{onSuccess:()=>{j(!1),m.success(e("已保存"))},onError:()=>m.error(e("保存失败"))})},[E,u,e]),c=t.useCallback(()=>{_(""),L(""),I("")},[]),Z=t.useCallback(()=>{f(r?.enabled??!1),h(!1),l(null),c()},[r?.enabled,c]),F=t.useCallback(a=>{if((a==="change"||a==="disable")&&!d)return l(e("请输入当前密码")),!1;if(a==="enable"||a==="change"){if(o.length<R)return l(e("密码至少需要 8 个字符")),!1;if(o!==C)return l(e("两次输入不一致")),!1}return l(null),!0},[C,d,o,e]),B=t.useCallback(()=>{if(n==="idle"||!F(n))return;const a=n==="disable"?{enabled:!1,currentPassword:d}:n==="enable"?{enabled:!0,newPassword:o}:{currentPassword:d,newPassword:o};i.mutate(a,{onSuccess:v=>{f(v.enabled),h(!1),l(null),c(),m.success(e(n==="disable"?"已关闭":"已保存"))},onError:v=>{const T=W(v,e("保存失败"));T.toLowerCase().includes("current password")?l(e("当前密码不正确")):T.toLowerCase().includes("at least 8")?l(e("密码至少需要 8 个字符")):l(T)}})},[n,c,d,o,e,i,F]),$=t.useCallback(a=>{!r||i.isPending||(f(a),h(!1),l(null),c())},[r,c,i.isPending]),ee=t.useCallback(()=>{S.mutate(void 0,{onSuccess:()=>m.success(e("已退出登录")),onError:a=>m.error(W(a,e("退出登录失败")))})},[S,e]),se=t.useCallback(a=>{a.preventDefault(),B()},[B]),ae=t.useCallback(()=>{!r||i.isPending||(f(!0),h(!0),l(null),c())},[r,c,i.isPending]);return s.jsxs(de,{children:[s.jsx(ue,{title:e("通用设置"),className:"mb-1"}),s.jsx("div",{className:"divide-y divide-border/60",children:s.jsx(A,{label:e("显示语言"),description:e("界面语言会保存到本地数据库,重启后继续生效。"),align:"center",children:s.jsx(U,{value:P,onChange:a=>y(a),options:fe})})}),s.jsx(G,{className:"mt-8 mb-1",children:e("访问安全")}),s.jsx("div",{className:"divide-y divide-border/60",children:s.jsx(A,{label:e("访问密码"),description:e("开启后,进入 Agent Tower 需要输入密码。"),controlWidth:"fixed",children:s.jsxs("div",{className:"space-y-3",children:[s.jsxs("div",{className:"flex items-center justify-between gap-3",children:[s.jsx("span",{className:"text-sm font-medium text-foreground",children:Q}),s.jsx(pe,{checked:M,onCheckedChange:$,disabled:!r||i.isPending,"aria-label":e("访问密码")})]}),x&&n==="idle"&&s.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:justify-end",children:[s.jsx(p,{type:"button",size:"sm",variant:"outline",className:"w-full sm:w-auto",onClick:ae,disabled:i.isPending,children:e("修改密码")}),s.jsx(p,{type:"button",size:"sm",variant:"ghost",className:"w-full sm:w-auto",onClick:ee,disabled:S.isPending,children:S.isPending?e("退出中..."):e("退出登录")})]}),O&&s.jsxs("form",{className:"space-y-2",onSubmit:se,children:[(n==="change"||n==="disable")&&s.jsx(z,{type:"password",autoComplete:"current-password",placeholder:e("当前密码"),value:d,onChange:a=>{_(a.target.value),l(null)},disabled:i.isPending,"aria-invalid":!!(b&&!d)}),(n==="enable"||n==="change")&&s.jsxs(s.Fragment,{children:[s.jsx(z,{type:"password",autoComplete:"new-password",placeholder:e(n==="enable"?"访问密码":"新密码"),value:o,onChange:a=>{L(a.target.value),l(null)},disabled:i.isPending,"aria-invalid":!!(b&&o.length<R)}),s.jsx(z,{type:"password",autoComplete:"new-password",placeholder:e("确认密码"),value:C,onChange:a=>{I(a.target.value),l(null)},disabled:i.isPending,"aria-invalid":!!(b&&o!==C)})]}),(n==="change"||n==="disable")&&s.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:e(n==="disable"?"关闭后不再要求访问密码。":"保存后其他已登录页面需要重新输入。")}),b&&s.jsx("p",{className:"text-xs text-destructive-ink",children:b}),s.jsxs("div",{className:"flex flex-col-reverse gap-2 pt-1 sm:flex-row sm:justify-end",children:[s.jsx(p,{type:"button",size:"sm",variant:"ghost",className:"w-full sm:w-auto",onClick:Z,disabled:i.isPending,children:e("取消")}),s.jsx(p,{type:"submit",size:"sm",className:"w-full sm:w-auto",disabled:i.isPending,children:i.isPending?e("保存中..."):e(n==="disable"?"关闭访问密码":"保存")})]})]})]})})}),s.jsx(G,{className:"mt-8 mb-1",children:e("Git Commit Message")}),s.jsxs("div",{className:"divide-y divide-border/60",children:[s.jsx(A,{label:e("Agent 渠道"),description:e('"跟随任务"表示使用当前任务所用的 Agent 渠道。选择具体渠道可使用更经济的模型。'),children:s.jsx(U,{value:K,onChange:X,options:J})}),s.jsx(A,{label:e("提示词模板"),description:e("自定义生成 commit message 的提示词。留空则使用内置默认模板。"),children:s.jsxs("div",{className:"space-y-2",children:[s.jsx(me,{value:E,onChange:a=>{k(a.target.value),j(!0)},rows:5,className:"font-mono resize-y"}),V&&s.jsxs("div",{className:"flex items-center justify-end gap-2",children:[s.jsx(p,{size:"sm",variant:"ghost",onClick:()=>{k(g?.commitMessagePrompt||w?.prompt||""),j(!1)},children:e("取消")}),s.jsx(p,{size:"sm",onClick:Y,disabled:u.isPending,children:u.isPending?e("保存中..."):e("保存")})]})]})})]})]})}export{Le as GeneralSettingsPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as f,r as o,L as u,j as e,R as h,X as b}from"./index-
|
|
1
|
+
import{u as f,r as o,L as u,j as e,R as h,X as b}from"./index-BJObbxud.js";function p(){const{t:s}=f(),[a,c]=o.useState(null),x=o.useRef(null),d=o.useRef(null),i=o.useRef(null),t=a?u.find(r=>r.id===a):null,l=o.useCallback(()=>{c(null)},[]);return o.useEffect(()=>{if(!t){i.current?.focus(),i.current=null;return}d.current?.focus();const r=n=>{if(n.key==="Escape"){n.preventDefault(),l();return}n.key==="Tab"&&(n.preventDefault(),d.current?.focus())};return document.addEventListener("keydown",r),()=>document.removeEventListener("keydown",r)},[t,l]),e.jsxs("div",{className:"min-h-screen bg-background",children:[e.jsx("style",{children:h}),e.jsx("header",{className:"border-b border-border px-6 py-4",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("h1",{className:"text-lg font-semibold text-foreground",children:"Loading Animation Preview"}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:s("10 个首屏加载动画候选 · 颜色遵循 Agent Tower 设计规范 · 点击卡片查看全屏效果")})]})}),e.jsxs("main",{className:"max-w-6xl mx-auto px-6 py-8",inert:t?!0:void 0,"aria-hidden":t?!0:void 0,children:[e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4",children:u.map((r,n)=>{const m=r.component;return e.jsxs("button",{onClick:g=>{i.current=g.currentTarget,c(r.id)},className:"group relative flex flex-col bg-card border border-border rounded-lg p-5 text-left transition-shadow hover:shadow-md focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none",children:[e.jsxs("span",{className:"absolute top-3 right-3 text-[11px] font-semibold text-muted-foreground/60 tabular-nums",children:["#",n+1]}),e.jsx("div",{className:"flex items-center justify-center h-28 mb-4",children:e.jsx(m,{})}),e.jsx("h3",{className:"text-sm font-semibold text-foreground mb-1",children:r.name}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:s(r.description)})]},r.id)})}),e.jsxs("div",{className:"mt-10 p-5 border border-border rounded-lg bg-muted/30",children:[e.jsx("h2",{className:"text-sm font-semibold text-foreground mb-2",children:s("设计推荐")}),e.jsxs("ul",{className:"text-xs text-muted-foreground space-y-1.5 leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-foreground",children:s("首选:Charcoal Breathe (#10)")})," — ",s("品牌感最强,Charcoal 色块+Tower 图标呼吸,用户对产品的第一印象即品牌本身。")]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-foreground",children:s("备选A:Tower Pulse (#1)")})," — ",s("品牌图标直接出现,脉冲节奏稳定,不浮夸,适合工作台场景。")]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-foreground",children:s("备选B:Terminal Cursor (#4)")})," — ",s("终端光标闪烁,贴合 Agent/终端协作的核心场景,开发者亲切感强。")]})]})]})]}),t&&e.jsxs("div",{ref:x,className:"fixed inset-0 z-50 flex items-center justify-center bg-background/95 backdrop-blur-sm",onClick:r=>{r.target===r.currentTarget&&l()},role:"dialog","aria-modal":"true","aria-label":s("全屏预览:{name}",{name:t.name}),children:[e.jsx("button",{ref:d,onClick:l,className:"absolute top-4 right-4 p-2 rounded-lg text-muted-foreground hover:text-foreground hover:bg-muted transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none","aria-label":s("关闭预览"),children:e.jsx(b,{size:20})}),e.jsxs("div",{className:"flex flex-col items-center gap-6",children:[e.jsx("div",{className:"scale-[2] origin-center",children:e.jsx(t.component,{})}),e.jsxs("div",{className:"text-center mt-4",children:[e.jsx("h3",{className:"text-base font-semibold text-foreground",children:t.name}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1 max-w-sm",children:s(t.description)})]}),e.jsx("span",{className:"text-xs text-muted-foreground/60 mt-2",children:s("按 Esc 或点击关闭按钮退出")})]})]})]})}export{p as LoadingPreviewPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as l,s as m,v as x,u,r as g,t as a,j as e,i as n,
|
|
1
|
+
import{o as l,s as m,v as x,u,r as g,t as a,j as e,i as n,Q as p,B as i,a9 as f}from"./index-BJObbxud.js";import{C as j}from"./copy-HRMhTkIG.js";import{S as b}from"./server-xswxWpKD.js";import{C as h}from"./check-BmiJ7qMY.js";function N(){return l({queryKey:m.system.mcpConfig,queryFn:()=>x.get("/system/mcp-config")})}function v({mode:s,label:t}){const r=s==="desktop-packaged";return e.jsx("span",{className:`inline-flex items-center rounded-md px-2 py-1 text-xs font-medium ${r?"bg-success/10 text-success-ink":"bg-warning/10 text-warning-ink"}`,children:t})}function M(){const{t:s}=u(),{data:t,isLoading:r,isError:d,refetch:o}=N(),c=g.useCallback(async()=>{if(t?.configJson)try{await navigator.clipboard.writeText(t.configJson),a.success(s("MCP 配置已复制"))}catch{a.error(s("复制 MCP 配置失败"))}},[t?.configJson,s]);return r?e.jsx(n,{children:e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx(p,{className:"h-5 w-5 animate-spin motion-reduce:[animation-duration:2.4s] text-muted-foreground"})})}):d||!t?e.jsxs(n,{children:[e.jsx("h2",{className:"mb-1 text-base font-semibold text-foreground",children:s("MCP 配置")}),e.jsx("div",{className:"mt-5 rounded-lg border border-destructive/25 bg-destructive/10 px-4 py-3 text-sm text-destructive-ink",children:s("MCP 配置加载失败")}),e.jsx(i,{className:"mt-4",size:"sm",variant:"outline",onClick:()=>{o()},children:s("重试")})]}):e.jsxs(n,{children:[e.jsxs("div",{className:"mb-5 flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-semibold text-foreground",children:s("MCP 配置")}),e.jsx("p",{className:"mt-1 text-[12px] leading-relaxed text-muted-foreground",children:s("复制下面的 JSON 到支持 MCP 的客户端配置中。桌面打包版使用 App 内置 runtime,不需要全局安装 agent-tower。")})]}),e.jsxs(i,{size:"sm",onClick:c,children:[e.jsx(j,{size:14}),s("复制配置")]})]}),e.jsxs("div",{className:"space-y-3 border-b border-border/60 pb-5",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(v,{mode:t.runtimeMode,label:t.runtimeMode==="desktop-packaged"?s("桌面打包 runtime"):s("工作区 runtime")}),e.jsx("span",{className:"text-[12px] text-muted-foreground",children:t.serverName})]}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsxs("div",{className:"rounded-lg border border-border/60 bg-muted/35 p-3",children:[e.jsxs("div",{className:"mb-1 flex items-center gap-1.5 text-xs font-medium text-muted-foreground",children:[e.jsx(f,{size:12}),"Command"]}),e.jsx("div",{className:"break-all font-mono text-[12px] leading-relaxed text-foreground",children:t.command})]}),e.jsxs("div",{className:"rounded-lg border border-border/60 bg-muted/35 p-3",children:[e.jsxs("div",{className:"mb-1 flex items-center gap-1.5 text-xs font-medium text-muted-foreground",children:[e.jsx(b,{size:12}),"Entry"]}),e.jsx("div",{className:"break-all font-mono text-[12px] leading-relaxed text-foreground",children:t.args.at(-1)??""})]})]})]}),e.jsxs("div",{className:"pt-5",children:[e.jsxs("div",{className:"mb-2 flex items-center justify-between",children:[e.jsx("label",{className:"text-[12px] font-medium text-foreground/70",children:"mcpServers JSON"}),t.runtimeMode==="desktop-packaged"&&e.jsxs("span",{className:"inline-flex items-center gap-1 text-xs text-success-ink",children:[e.jsx(h,{size:12}),s("无需全局 CLI")]})]}),e.jsx("textarea",{readOnly:!0,value:t.configJson,rows:14,className:"w-full resize-y rounded-lg border border-border bg-foreground/[0.025] px-3 py-3 font-mono text-[12px] leading-relaxed text-foreground outline-none"}),e.jsx("p",{className:"mt-2 text-xs leading-relaxed text-muted-foreground",children:s("当前版本只生成通用 MCP 配置,不会自动修改 Claude、Codex 或其他第三方客户端配置文件。")})]})]})}export{M as McpSettingsPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as m,j as c,n as f}from"./index-
|
|
1
|
+
import{r as m,j as c,n as f}from"./index-BJObbxud.js";import{A as u}from"./people-DT78SebR.js";function p(s){const t=s.trim();if(!t)return"?";const r=t.split(/\s+/).filter(Boolean);return r.length>=2?`${r[0][0]??""}${r[1][0]??""}`.toUpperCase():Array.from(t).slice(0,2).join("").toUpperCase()}function l(s){const t=s.trim();return/^#([0-9a-f]{3,8})$/i.test(t)||/^rgba?\(/i.test(t)||/^hsla?\(/i.test(t)}function i(s){const t=s.trim();return t.startsWith("/")||t.startsWith("http://")||t.startsWith("https://")||t.startsWith("data:image/")||t.startsWith("blob:")}function x(s,t){const r=s?.trim()??"";return!r||l(r)||i(r)?p(t):r.length<=2?r.toUpperCase():r.slice(0,2).toUpperCase()}function d({name:s,avatar:t,size:r,className:n}){const e=t?.trim()??"",o=m.useMemo(()=>{const a=x(e,s);return r==="xs"&&/[\u3400-\u9fff]/.test(a)?Array.from(a)[0]:a},[s,e,r]);return c.jsx(u,{name:s,src:e&&i(e)?e:void 0,initials:o,size:r,className:f(!r&&"size-7 text-[10px]",n)})}export{d as M};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{u as q,j as e,S as Q,r as n,ay as Te,n as Ae,v as Ls,s as Ye,az as Ie,ao as bt,q as vt,ai as jt,aj as yt,ak as Nt,aA as kt,al as Ct,am as wt,ap as It,an as W,w as Ss,B as Ke,at as As,au as St,Q as At,av as Tt,aw as ce,a2 as Rt}from"./index-BJObbxud.js";import{b as Ds,G as Ze,o as Pt,D as Ws,p as Et,q as Mt,u as Ot,r as Lt,g as Se,c as Dt,e as Wt,f as zt,a as Bt,h as Ft,W as Gt,C as qt,E as Ut,i as Vt,S as Ht,T as Ts,R as $t,j as Kt,l as Qt,s as _t,t as Xt,k as Yt,m as Zt,n as Jt}from"./EditableTaskTitle-BJ9Rxggf.js";import{u as en,a as Rs,Q as sn,s as tn}from"./mermaid-NOHMQCX5-BSNbBj78.js";import{u as nn,a as rn,R as on,P as an,T as ln}from"./useTokenUsage-DDXf7E4p.js";import{u as cn,a as dn,L as Ps,T as Es}from"./useNormalizedLogs--RbVywYa.js";import{g as un}from"./ExecutionPermissionSelector-B8befbxJ.js";import{u as mn,A as pn}from"./AttachmentPreview-CLN1lnLe.js";import{u as xn,a as fn,b as hn,d as gn,e as bn,S as Ms}from"./CreateTaskInput-CasITF8y.js";import{F as zs,H as Bs,a as Fs,C as vn,P as Qe}from"./content-DPQMfMae.js";import{C as Re}from"./chevron-down-3y5Aiolp.js";import{a as jn,b as yn,c as Nn}from"./use-workspaces-CdJZLmGh.js";import{u as kn}from"./use-providers-Td1-gyrN.js";import{D as Cn}from"./ProjectKanbanPage-Bt_01giW.js";import{M as Gs}from"./message-square-BLEJN6p7.js";import{T as wn}from"./trash-2-CvUJsbtT.js";import{P as In}from"./paperclip-CTNoXpUW.js";import"./use-translation-settings-NYM0lmBx.js";import"./MemberAvatar-YVr_erAr.js";import"./people-DT78SebR.js";import"./chevron-up-DqaYcjpq.js";import"./at-sign-C48_y345.js";import"./check-BmiJ7qMY.js";import"./tooltip-CPqGK_WZ.js";import"./kbd-C88ut3t9.js";import"./index-Bhvt-E6d.js";import"./index-B1oVmCie.js";import"./index-Dk3bRQAK.js";import"./BrandLogo-BUimEX-9.js";import"./hooks-BLxb16IA.js";import"./index-BtUQYU5l.js";import"./index-DZLnTISJ.js";import"./confirm-dialog-ltNBFYCs.js";import"./dialog-CuFEdqLg.js";import"./modal-CSGOqphK.js";import"./select-BPdJrr5M.js";import"./select-B5RYunTs.js";import"./menu-styles-DWynpVVz.js";import"./index-CThFsQNP.js";import"./layers-eaHAVcc3.js";import"./textarea-BVyPl9rM.js";import"./menu--sjyisSg.js";import"./server-xswxWpKD.js";import"./icon-button-CYiKa-7C.js";import"./search-field-CQLDXLeA.js";import"./popover-BiVxGGgp.js";import"./index-DcOU2m2F.js";import"./search-DniD_AGC.js";import"./upload-CsXAmAun.js";import"./use-projects-Ddz0knyr.js";import"./globe-B9I-jHBB.js";import"./BranchSelect-Cofp8vYf.js";import"./pencil-Cp70ZwtG.js";import"./copy-HRMhTkIG.js";import"./track-Ckye0-tt.js";function Sn(s){const o=s.split("/");return o[o.length-1]||s}function An(s){const o=s.lastIndexOf("/");return o>0?s.slice(0,o):""}function Tn({workingDir:s,filePath:o,type:l}){const{t:c}=q(),{data:v,isLoading:d,isError:g}=Pt(s,o,l);if(d)return e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-muted-foreground",children:[e.jsx(Q,{}),e.jsx("span",{className:"text-xs",children:c("Loading diff...")})]});if(g)return e.jsx("div",{className:"px-3 py-3 text-xs text-destructive-ink",children:c("Failed to load diff.")});const a=v?.diff||"";if(!a.trim())return e.jsx("div",{className:"px-3 py-3 text-xs text-muted-foreground",children:c("No diff content available.")});const h=a.split(`
|
|
2
|
+
`);return e.jsx("div",{className:"overflow-x-auto scrollbar-app-thin mx-3 mb-3 rounded-lg border border-border/60 bg-background py-1 font-mono text-xs leading-5",children:e.jsx("div",{className:"min-w-max",children:h.map((p,k)=>e.jsx(Ws,{line:p,lineNum:k+1},k))})})}function Rn({entry:s,type:o,workingDir:l}){const[c,v]=n.useState(!1),d=An(s.path);return e.jsxs("div",{children:[e.jsxs("button",{onClick:()=>v(g=>!g),className:Ae("flex items-center gap-2.5 w-full px-4 py-3 text-left active:bg-accent",c&&"bg-muted/50"),children:[e.jsx(zs,{status:s.status,size:"md"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("span",{className:"text-sm text-foreground truncate block",children:Sn(s.path)}),d&&e.jsx("span",{className:"text-[11px] text-muted-foreground truncate block",children:d})]}),e.jsx("span",{className:"text-muted-foreground shrink-0",children:c?e.jsx(Re,{size:14}):e.jsx(Te,{size:14})})]}),c&&e.jsx(Tn,{workingDir:l,filePath:s.path,type:o})]})}function Os({title:s,entries:o,type:l,workingDir:c,defaultOpen:v}){const{t:d}=q(),[g,a]=n.useState(v);return o.length===0?null:e.jsxs("div",{children:[e.jsxs("button",{onClick:()=>a(h=>!h),className:"flex items-center gap-2 w-full px-4 py-2.5 active:bg-accent",children:[e.jsx("span",{className:"text-muted-foreground",children:g?e.jsx(Re,{size:14}):e.jsx(Te,{size:14})}),e.jsx("span",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wider",children:d(s)}),e.jsx("span",{className:"text-[11px] tabular-nums bg-muted px-1.5 py-0.5 rounded text-muted-foreground",children:o.length})]}),g&&e.jsx("div",{className:"divide-y divide-border/60",children:o.map(h=>e.jsx(Rn,{entry:h,type:l,workingDir:c},`${l}:${h.path}`))})]})}function Pn({workingDir:s}){const{t:o}=q(),{data:l,isLoading:c,isError:v}=Ds(s);if(!s)return e.jsx("div",{className:"flex-1 flex items-center justify-center text-muted-foreground text-sm",children:o("No workspace selected.")});if(c)return e.jsxs("div",{className:"flex-1 flex items-center justify-center text-muted-foreground",children:[e.jsx(Q,{size:"md",className:"mr-2"}),e.jsx("span",{className:"text-sm",children:o("Loading changes...")})]});if(v)return e.jsx("div",{className:"flex-1 flex items-center justify-center text-destructive-ink text-sm",children:o("Failed to load changes.")});const d=l?.uncommitted||[],g=l?.committed||[];return d.length+g.length===0?e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center text-muted-foreground py-16",children:[e.jsx(Ze,{size:28,className:"mb-3"}),e.jsx("span",{className:"text-sm",children:o("No pending changes")})]}):e.jsxs("div",{className:"flex-1 overflow-y-auto scrollbar-app-thin overscroll-y-contain",children:[e.jsx(Os,{title:"Uncommitted",entries:d,type:"uncommitted",workingDir:s,defaultOpen:!0}),e.jsx(Os,{title:"Committed",entries:g,type:"committed",workingDir:s,defaultOpen:!1})]})}const _e=50;function En(s){const l=Math.floor(Date.now()/1e3)-s;return l<60?Ie("{count}s ago",{count:l}):l<3600?Ie("{count}m ago",{count:Math.floor(l/60)}):l<86400?Ie("{count}h ago",{count:Math.floor(l/3600)}):l<604800?Ie("{count}d ago",{count:Math.floor(l/86400)}):new Date(s*1e3).toLocaleDateString()}function Mn(s){const o=s.split("/");return o[o.length-1]||s}function On(s){const o=s.lastIndexOf("/");return o>0?s.slice(0,o):""}function Ln({workingDir:s,hash:o,filePath:l}){const{t:c}=q(),{data:v,isLoading:d,isError:g}=Mt(s,o,l);if(d)return e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-muted-foreground",children:[e.jsx(Q,{}),e.jsx("span",{className:"text-xs",children:c("Loading diff...")})]});if(g)return e.jsx("div",{className:"px-3 py-3 text-xs text-destructive-ink",children:c("Failed to load diff.")});const a=v?.diff||"";if(!a.trim())return e.jsx("div",{className:"px-3 py-3 text-xs text-muted-foreground",children:c("No diff content available.")});const h=a.split(`
|
|
3
|
+
`);return e.jsx("div",{className:"overflow-x-auto scrollbar-app-thin mx-3 mb-3 rounded-lg border border-border/60 bg-background py-1 font-mono text-xs leading-5",children:e.jsx("div",{className:"min-w-max",children:h.map((p,k)=>e.jsx(Ws,{line:p,lineNum:k+1},k))})})}function Dn({entry:s,workingDir:o,hash:l}){const[c,v]=n.useState(!1),d=On(s.path);return e.jsxs("div",{children:[e.jsxs("button",{onClick:()=>v(g=>!g),className:Ae("flex items-center gap-2.5 w-full px-4 py-2.5 text-left active:bg-accent",c&&"bg-muted/50"),children:[e.jsx(zs,{status:s.status,size:"md"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("span",{className:"text-sm text-foreground truncate block",children:Mn(s.path)}),d&&e.jsx("span",{className:"text-[11px] text-muted-foreground truncate block",children:d})]}),e.jsx("span",{className:"text-muted-foreground shrink-0",children:c?e.jsx(Re,{size:14}):e.jsx(Te,{size:14})})]}),c&&e.jsx(Ln,{workingDir:o,hash:l,filePath:s.path})]})}function Wn({commit:s,workingDir:o}){const{t:l}=q(),[c,v]=n.useState(!1),{data:d,isLoading:g}=Et(o,c?s.hash:null),a=d?.files||[];return e.jsxs("div",{children:[e.jsxs("button",{onClick:()=>v(h=>!h),className:Ae("flex items-start gap-3 w-full px-4 py-3 text-left active:bg-accent",c&&"bg-muted/50"),children:[e.jsx("div",{className:"flex flex-col items-center shrink-0 pt-0.5",children:e.jsx("div",{className:Ae("w-2.5 h-2.5 rounded-full shrink-0",c?"bg-info":"bg-foreground/15")})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-xs font-mono text-muted-foreground shrink-0",children:s.shortHash}),e.jsx("span",{className:"text-sm text-foreground truncate flex-1",children:s.message})]}),e.jsxs("div",{className:"flex items-center gap-2 mt-0.5",children:[e.jsx("span",{className:"text-xs text-muted-foreground truncate",children:s.author}),e.jsx("span",{className:"text-[11px] text-muted-foreground",children:En(s.timestamp)})]})]}),e.jsx("span",{className:"text-muted-foreground shrink-0 pt-0.5",children:c?e.jsx(Re,{size:14}):e.jsx(Te,{size:14})})]}),c&&e.jsxs("div",{className:"pl-4 border-l-2 border-border ml-[22px]",children:[s.body&&e.jsx("div",{className:"px-3 py-2 text-xs text-foreground/70 whitespace-pre-wrap leading-4",children:s.body}),g?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-3 text-muted-foreground",children:[e.jsx(Q,{}),e.jsx("span",{className:"text-xs",children:l("Loading files...")})]}):a.length===0?e.jsx("div",{className:"px-3 py-3 text-xs text-muted-foreground",children:l("No files changed")}):e.jsx("div",{className:"divide-y divide-border/60",children:a.map(h=>e.jsx(Dn,{entry:h,workingDir:o,hash:s.hash},h.path))})]})]})}function zn({workingDir:s}){const{t:o}=q(),{data:l,isLoading:c,isError:v,fetchNextPage:d,hasNextPage:g,isFetchingNextPage:a}=en({queryKey:Ye.git.log(s||""),queryFn:({pageParam:p=0})=>Ls.get("/git/log",{params:{workingDir:s||"",limit:String(_e),skip:String(p)}}),initialPageParam:0,getNextPageParam:(p,k)=>p.commits.length<_e?void 0:k.length*_e,enabled:!!s}),h=l?.pages.flatMap(p=>p.commits)||[];return s?c?e.jsxs("div",{className:"flex-1 flex items-center justify-center text-muted-foreground",children:[e.jsx(Q,{size:"md",className:"mr-2"}),e.jsx("span",{className:"text-sm",children:o("Loading history...")})]}):v?e.jsx("div",{className:"flex-1 flex items-center justify-center text-destructive-ink text-sm",children:o("Failed to load history.")}):h.length===0?e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center text-muted-foreground py-16",children:[e.jsx(Bs,{size:28,className:"mb-3"}),e.jsx("span",{className:"text-sm",children:o("No commit history")})]}):e.jsxs("div",{className:"flex-1 overflow-y-auto scrollbar-app-thin overscroll-y-contain",children:[e.jsx("div",{className:"divide-y divide-border/60",children:h.map(p=>e.jsx(Wn,{commit:p,workingDir:s},p.hash))}),g&&e.jsx("button",{type:"button",onClick:()=>d(),disabled:a,className:"w-full py-4 text-sm text-muted-foreground active:text-foreground/80 active:bg-accent flex items-center justify-center gap-2",children:a?e.jsxs(e.Fragment,{children:[e.jsx(Q,{})," ",o("Loading...")]}):o("Load more")})]}):e.jsx("div",{className:"flex-1 flex items-center justify-center text-muted-foreground text-sm",children:o("No workspace selected.")})}const Bn=Rt(),Fn=s=>s.includes("://")||s.startsWith("/api/")?s:s.startsWith("/")?`${Bn}/attachments/by-path?path=${encodeURIComponent(s)}`:s;function Gn({status:s}){const o={[ce.Running]:"bg-info",[ce.Review]:"bg-warning",[ce.Pending]:"bg-muted-foreground/60",[ce.Done]:"bg-success",[ce.Cancelled]:"bg-muted-foreground/60"};return e.jsx("span",{className:`w-2.5 h-2.5 rounded-full ${o[s]}`})}const qn=[{key:"chat",label:"Chat",icon:Gs},{key:"changes",label:"Changes",icon:Ze},{key:"history",label:"History",icon:Bs},{key:"workspace",label:"Workspace",icon:Fs}],Un=[{key:"chat",label:"Team room",icon:Gs},{key:"team-status",label:"Team Status",icon:kt},{key:"changes",label:"Changes",icon:Ze},{key:"workspace",label:"Workspace",icon:Fs}];function Vr({task:s,onBack:o,onDeleteTask:l,onTaskPriorityChange:c,isDeleting:v,autoStartState:d,onAutoStartRecovered:g}){const{t:a}=q(),h=bt(t=>t.setVisibleContext),[p,k]=n.useState("chat"),[R,de]=n.useState(""),[qs,ue]=n.useState(!1),[Us,Pe]=n.useState(!1),[Ee,Me]=n.useState(!1),[T,Oe]=n.useState(null),[_,U]=n.useState(void 0),Je=n.useRef(0),[Vs,Le]=n.useState(),De=n.useRef(null),We=n.useRef(null),X=n.useRef(null),es=n.useRef(null),{scrollRef:z,contentRef:ss,isAtBottom:ts,scrollToBottom:me,stopScroll:ns}=nn({resize:"smooth",initial:"instant"}),V=vt();n.useEffect(()=>{if(!Ee)return;const t=r=>{We.current&&!We.current.contains(r.target)&&Me(!1)};return document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)},[Ee]);const{data:i,isLoading:Hs}=jn(s.id),Y=Ot(s.id),rs=Y?.status==="completed"&&d?.status!=="failed"?null:d,ze=!!(rs||Y&&Y.status!=="completed"),{data:pe}=jt(s.id),{data:$s}=yt(pe?.id??""),os=Nt(pe?.id??""),x=pe??null,P=s.isGitRepo!==!1&&s.worktreeReady!==!1,Be=n.useMemo(()=>(x?Un:qn).filter(t=>P||t.key!=="changes"&&t.key!=="history"),[P,x]),Ks=pe===null,{data:Z,isLoading:Qs}=Ct(s.id,Ks),C=!!s.projectArchivedAt,as=!!s.projectRepoDeletedAt,Fe=a(as?"项目已删除,本地仓库文件也已清理。恢复项目并重新绑定仓库后才能继续操作。":"项目已删除。恢复项目后才能继续创建会话或修改任务。");n.useEffect(()=>{U(void 0),Oe(null),Le(void 0)},[s.id]),n.useEffect(()=>{x&&p==="history"&&k("chat"),!x&&p==="team-status"&&k("chat"),Be.some(t=>t.key===p)||k("chat")},[p,Be,x]);const B=n.useMemo(()=>Lt(i,x,_),[_,x,i]);n.useEffect(()=>{_&&!i?.some(t=>t.id===_)&&U(void 0)},[_,i]);const j=n.useMemo(()=>i?.find(t=>t.id===B),[B,i]),I=n.useMemo(()=>{if(i){if(j)return Se(j);for(const t of i)if(t.status==="ACTIVE"&&Se(t))return Se(t);return Se(i[0])}},[j,i]),S=j?.status===wt.ACTIVE?j.id:void 0,Ge=P&&Dt(j,x),J=j?.branchName??"",is=j?.commitMessage,ee=n.useMemo(()=>Wt(j,i,s?.mainBranch??""),[j,s?.mainBranch,i]),se=!!(Ge&&S&&I&&!C),{data:E,isLoading:_s}=yn(S??"",{enabled:se}),{data:ls}=Ds(I,{enabled:se}),Xs=ls?.committed?.length,te=zt((i??[]).map(t=>t.id),!x),{pendingConflictDetails:ne}=te,cs=!!ne;n.useEffect(()=>{const t=P&&(p==="changes"||p==="chat"&&se)?"changes":P&&p==="history"?"history":null;if(!S||!I||!t){h(null);return}return h({workspaceId:S,workingDir:I,tab:t}),()=>{h(null)}},[p,P,S,h,se,I]);const y=n.useMemo(()=>ne||(E?.conflictOp&&E.conflictedFiles.length>0?It({conflictOp:E.conflictOp,conflictedFiles:E.conflictedFiles,resolutionContextToken:E.resolutionContextToken,sourceWorkspaceId:S,sourceWorktreePath:j?.worktreePath,sourceBranch:J,targetBranch:ee}):ne),[E,ne,S,j?.worktreePath,J,ee]),ds=y?.targetWorkspaceId??S,Ys=y?.targetWorktreePath??j?.worktreePath,Zs=y?.sourceBranch??J,Js=y?.targetBranch??ee,et=j?.sessions??[],xe=n.useCallback(t=>{const r=t??y;r&&te.openDialog(r)},[y,te]),us=n.useCallback(()=>s?.id?V.invalidateQueries({queryKey:Ye.workspaces.list(s.id)}):Promise.resolve(),[s?.id,V]),qe=n.useCallback(async()=>V.fetchQuery({queryKey:Ye.tasks.body(s.id),queryFn:()=>Ls.get(`/tasks/${s.id}/body`)}),[V,s.id]),w=n.useMemo(()=>{if(!i)return null;const t=i.filter(f=>f.status==="ACTIVE"&&Array.isArray(f.sessions)).flatMap(f=>f.sessions??[]),r=f=>{const $=f.createdAt,K=f.endedAt??f.startedAt??$;if(!K)return 0;const we=Date.parse(K);return Number.isNaN(we)?0:we},u=f=>{const $=t.filter(K=>f.includes(K.status));return $.length===0?null:$.sort((K,we)=>r(we)-r(K))[0]??null},m=u([W.RUNNING])??u([W.PENDING])??u([W.COMPLETED,W.FAILED,W.CANCELLED]);if(m)return m;const D=i.filter(f=>(f.status==="ABANDONED"||f.status==="MERGED"||f.status==="HIBERNATED")&&Array.isArray(f.sessions)).flatMap(f=>f.sessions??[]).filter(f=>[W.COMPLETED,W.FAILED,W.CANCELLED].includes(f.status));return D.length===0?null:D.sort((f,$)=>r($)-r(f))[0]??null},[i]),b=w?.id??"",fe=x?T??"":b,st=n.useMemo(()=>{if(!T||!i)return null;for(const t of i){const r=t.sessions?.find(u=>u.id===T);if(r)return r}return null},[T,i]),Ue=n.useMemo(()=>{if(!T||!x?.invocations)return null;const t=x.invocations.filter(r=>r.sessionId===T);return t.length===0?null:t.sort((r,u)=>{const m=Date.parse(r.updatedAt??r.createdAt??""),A=Date.parse(u.updatedAt??u.createdAt??"");return(Number.isNaN(A)?0:A)-(Number.isNaN(m)?0:m)})[0]??null},[T,x?.invocations]),tt=n.useMemo(()=>!Ue?.memberId||!x?.members?null:x.members.find(t=>t.id===Ue.memberId)??null,[Ue?.memberId,x?.members]),N=T?st:w??null,M=N?.id,H=n.useMemo(()=>{if(N?.workspaceId)return N.workspaceId;if(!(!N||!i))return i.find(t=>t.sessions?.some(r=>r.id===N.id))?.id},[N,i]),he=n.useCallback((t,r)=>{const m=(r&&i?.some(A=>A.id===r)?r:void 0)??H??B??void 0;m&&U(m),Je.current+=1,Le({id:Je.current,source:t,workspaceId:m}),k("workspace")},[H,B,i]),Ve=n.useCallback((t,r)=>{he({kind:"web",url:t},r)},[he]),He=n.useCallback((t,r,u)=>{he({kind:"visualization",sessionId:t,file:r},u)},[he]),ms=n.useCallback(t=>{Ve(t,H)},[H,Ve]),ps=n.useCallback(t=>{M&&He(M,t,H)},[M,H,He]),{isActive:re,isCancelling:oe}=xn(M??"",N?.status),nt=n.useMemo(()=>!w||!i?!1:!i.some(r=>r.status==="ACTIVE"&&r.sessions?.some(u=>u.id===w.id)),[w,i]),{data:ge}=kn(),[xs,rt]=n.useState(null),be=xs?.sessionId===b?xs.providerId:w?.providerId??null,ve=w?un(ge,be):void 0,ot=n.useCallback(t=>{rt({sessionId:b,providerId:t})},[b]),F=fn({agentType:w?.agentType,workingDir:I,input:R,setInput:de,textareaRef:X,minHeight:40,maxHeight:140}),G=Bt({agentType:w?.agentType,workingDir:I,input:R,setInput:de,textareaRef:X,minHeight:40,maxHeight:140}),je=I&&j?j.id:void 0,O=hn(),fs=Nn(),L=gn(),{isConnected:hs,isLoadingSnapshot:gs,isOutputActive:bs,lastExitAt:vs,logs:ae,entries:at,attach:ye}=cn({sessionId:fe,sessionStatus:N?.status,sessionStartedAt:N?.startedAt??N?.createdAt,sessionEndedAt:N?.endedAt??(re?null:N?.updatedAt),onExit:n.useCallback(()=>{V.invalidateQueries({queryKey:["workspaces"]})},[V])}),{todos:Ne}=dn(at),{files:it,addFiles:ke,removeFile:lt,clear:js,getDoneAttachments:ys,hasFiles:ie,isUploading:Ce}=mn(),ct=n.useMemo(()=>Ft(N),[N?.tokenUsage]),Ns=rn(ae,ct);n.useEffect(()=>{fe&&hs&&ye()},[fe,hs,ye]);const ks=n.useRef(null);n.useEffect(()=>{if(ks.current!==s.id&&z.current){const t=z.current;requestAnimationFrame(()=>{t.scrollTop=t.scrollHeight})}ks.current=s.id},[s.id,z]);const $e=n.useRef(!1),Cs=n.useCallback(async()=>{if(!R.trim()&&!ie||!b||$e.current||L.isPending||oe||Ce||ve)return;$e.current=!0;const t=ys().map(u=>u.id),r=R.trim()||(t.length?" ":"");de(""),js(),X.current&&(X.current.style.height="40px"),O.mutate({id:b,message:r,attachmentIds:t,providerId:be??void 0},{onSuccess:()=>ye(),onSettled:()=>{$e.current=!1}})},[R,b,O,ye,ie,Ce,ys,js,be,ve,L.isPending,oe]),dt=n.useCallback(()=>{!b||L.isPending||L.mutate(b)},[b,L]),ut=n.useCallback(t=>os.mutateAsync(t),[os]),ws=n.useCallback(t=>{Oe(t),k("chat"),requestAnimationFrame(()=>{me()})},[me]),mt=n.useCallback(()=>{Oe(null)},[]),pt=n.useCallback(()=>{k("changes")},[]),Is=se&&S?e.jsx(Gt,{projectId:s?.projectId??"",workspaceId:S,branchName:J,targetBranch:ee,commitMessage:is,changes:ls,gitStatus:E,isGitStatusLoading:_s,canRunGitOperations:Ge,onOpenChanges:pt,onRefreshCommitMessage:us,onConflict:xe,className:"mb-2"}):null,xt=n.useCallback(t=>{const r=t.target.files;r&&r.length>0&&ke(Array.from(r)),t.target.value=""},[ke]),ft=n.useCallback(t=>{const r=t.clipboardData.items,u=[];for(const m of r)if(m.kind==="file"){const A=m.getAsFile();A&&u.push(A)}u.length>0&&(t.preventDefault(),ke(u))},[ke]),ht=n.useCallback(t=>{de(t.target.value);const r=t.target;r.style.height="auto",r.style.height=`${Math.max(40,Math.min(r.scrollHeight,140))}px`},[]),gt=n.useCallback(()=>{je&&fs.mutate({workspaceId:je})},[fs,je]),le=n.useRef(null);return n.useEffect(()=>{const t=window.visualViewport;if(!t)return;let r=!1;const u=()=>{le.current&&(le.current.style.height=`${t.height}px`,le.current.style.top=`${t.offsetTop}px`)},m=()=>u(),A=()=>{r||u()},D=()=>{r=!0},f=()=>{r=!1,requestAnimationFrame(u)};return t.addEventListener("resize",m),t.addEventListener("scroll",A),document.addEventListener("touchstart",D,{passive:!0}),document.addEventListener("touchend",f,{passive:!0}),document.addEventListener("touchcancel",f,{passive:!0}),()=>{t.removeEventListener("resize",m),t.removeEventListener("scroll",A),document.removeEventListener("touchstart",D),document.removeEventListener("touchend",f),document.removeEventListener("touchcancel",f)}},[]),n.useEffect(()=>{const t=le.current;if(!t)return;const r=u=>{let m=u.target;for(;m&&m!==t;){if(m.tagName==="TEXTAREA"){if(m.scrollHeight>m.clientHeight)return;m=m.parentElement;continue}const D=window.getComputedStyle(m).overflowY;if((D==="auto"||D==="scroll")&&m.scrollHeight>m.clientHeight)return;m=m.parentElement}u.preventDefault()};return t.addEventListener("touchmove",r,{passive:!1}),()=>t.removeEventListener("touchmove",r)},[]),e.jsxs("div",{ref:le,className:"fixed inset-x-0 top-0 flex flex-col h-dvh bg-background overflow-hidden overscroll-none",children:[!x&&e.jsx(qt,{recovery:te,onRecover:t=>{U(t.sourceWorkspaceId),xe(t)}}),e.jsxs("header",{className:"shrink-0 bg-background border-b border-border z-20",children:[e.jsxs("div",{className:"flex items-center h-11 px-2.5 gap-1.5",children:[e.jsx("button",{onClick:o,className:"p-1.5 -ml-0.5 text-foreground/70 active:text-foreground",children:e.jsx(Ss,{size:18})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx(Ut,{taskId:s.id,title:s.title,readOnly:C,titleClassName:"text-[13px] font-semibold text-foreground truncate leading-tight",compact:!0}),e.jsxs("div",{className:"flex min-w-0 items-center gap-1 text-xs text-muted-foreground leading-tight",children:[e.jsx("span",{className:`truncate font-medium ${s.projectColor}`,children:s.projectName}),s.projectArchivedAt&&e.jsx("span",{className:"rounded-full bg-muted px-1.5 py-0.5 text-xs font-medium text-muted-foreground",children:s.projectRepoDeletedAt?a("源码已删除"):a("已删除")}),e.jsx("span",{className:"text-muted-foreground",children:"/"}),e.jsx("span",{className:"font-mono truncate",children:s.branch})]})]}),e.jsx(Gn,{status:s.status}),e.jsx(bn,{value:s.priority,compact:!0,onChange:!C&&c?t=>c(s.id,t):void 0}),e.jsx("button",{onClick:gt,disabled:!je||C,className:"p-1.5 text-muted-foreground active:text-foreground disabled:opacity-30",children:e.jsx(vn,{size:16})}),l&&!C&&e.jsxs("div",{className:"relative",ref:We,children:[e.jsx("button",{onClick:()=>Me(t=>!t),className:"p-1.5 text-muted-foreground active:text-foreground","aria-label":"More actions",children:e.jsx(Vt,{size:16})}),Ee&&e.jsx("div",{className:"absolute right-0 top-full mt-1 w-40 bg-background rounded-lg border border-border shadow-popover z-50 py-1",children:e.jsxs("button",{onClick:()=>{Pe(!0),Me(!1)},className:"w-full flex items-center gap-2 px-3 py-2 text-sm text-destructive-ink active:bg-destructive/10",children:[e.jsx(wn,{size:15}),e.jsx("span",{children:a("删除任务")})]})})]})]}),e.jsx("div",{className:"flex border-t border-border/60",children:Be.map(({key:t,label:r,icon:u})=>e.jsxs("button",{onClick:()=>k(t),className:`flex min-w-0 flex-1 items-center justify-center gap-1 px-1 py-2 text-xs font-medium transition-colors ${p===t?"text-foreground border-b-2 border-foreground":"text-muted-foreground border-b-2 border-transparent"}`,children:[e.jsx(u,{size:13,className:"shrink-0"}),e.jsx("span",{className:"truncate",children:a(r)})]},t))})]}),p==="chat"&&(x?e.jsx("main",{className:"flex-1 min-h-0 overflow-hidden",children:T?e.jsxs("div",{className:"flex h-full min-h-0 flex-col bg-background",children:[e.jsxs("div",{className:"relative z-20 flex shrink-0 items-center justify-between gap-3 overflow-visible border-b border-border px-3 py-2.5",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-xs font-semibold text-foreground",children:a("Invocation details")}),e.jsx("div",{className:"truncate text-[11px] text-muted-foreground",children:T})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[e.jsx(Ht,{session:N,providers:ge,usage:Ns,compact:!0,providerIdFallback:tt?.providerId,agentTypeFallback:N?.agentType,tokenTooltipSide:"bottom"}),e.jsxs(Ke,{type:"button",size:"xs",variant:"ghost",className:"h-7 gap-1 rounded-lg border border-border bg-background/60 px-1.5 text-xs font-medium text-muted-foreground hover:border-foreground/20 hover:bg-accent hover:text-foreground active:bg-accent",onClick:mt,children:[e.jsx(Ss,{size:12}),e.jsx("span",{children:a("Team room")})]})]})]}),e.jsxs("div",{className:"relative flex-1 min-h-0",children:[e.jsx("div",{ref:z,className:"h-full overflow-y-auto overflow-x-hidden scrollbar-app-thin overscroll-y-contain px-3 pt-3 pb-2",children:e.jsxs("div",{ref:ss,children:[!x&&s&&e.jsx(Ts,{taskId:s.id}),gs?e.jsx(Xe,{label:a("Loading logs...")}):ae.length===0&&!b?e.jsx("div",{className:"text-muted-foreground text-center py-8 text-sm",children:a(re?"Waiting for agent output...":"No logs recorded for this session.")}):e.jsx(Ps,{children:e.jsx(Rs,{logs:ae,sessionId:M,downloadSessionId:M,isOutputActive:bs,lastExitAt:vs,onUserToggleDetails:ns,scrollElementRef:z,onOpenPreviewUrl:ms,onOpenVisualization:ps})})]})}),!ts&&e.jsxs("button",{onClick:()=>me(),className:"absolute bottom-2 left-1/2 -translate-x-1/2 z-10 flex items-center gap-1 px-2.5 py-1 bg-background/90 backdrop-blur-sm border border-border rounded-full shadow-raised text-xs text-foreground/70 active:bg-background transition-all","aria-label":a("Scroll to bottom"),children:[e.jsx(As,{size:12}),e.jsx("span",{children:a("回到底部")})]})]}),Ne.length>0&&e.jsx("div",{className:"px-3 pt-1.5 pb-0.5 bg-background shrink-0 border-t border-border/60",children:e.jsx(Es,{todos:Ne,compact:!0})})]}):e.jsx($t,{teamRun:x,messages:$s??x.messages??[],readOnly:C,readOnlyMessage:Fe,onSendMessage:ut,onViewInvocationSession:ws,changeSummaryBar:Is,compactComposer:!0,workingDir:I,onOpenPreviewUrl:Ve,onOpenVisualization:He})}):e.jsxs("div",{className:"flex-1 flex flex-col min-h-0",children:[e.jsxs("div",{className:"relative flex-1 min-h-0",children:[e.jsx("div",{ref:z,className:"h-full overflow-y-auto overflow-x-hidden scrollbar-app-thin overscroll-y-contain px-3 pt-3 pb-2",children:e.jsxs("div",{ref:ss,children:[!x&&s&&e.jsx(Ts,{taskId:s.id}),e.jsx("div",{className:"mb-3 pb-2 border-b border-border/60",children:Qs?e.jsx("p",{className:"text-[13px] text-muted-foreground italic",children:a("Loading...")}):Z?.body?e.jsx("div",{className:"text-[13px] text-muted-foreground leading-relaxed prose prose-sm max-w-none",children:e.jsx(sn,{urlTransform:Fn,components:tn,children:Z.body})}):e.jsx("p",{className:"text-[13px] text-muted-foreground italic",children:"No description"})}),!C&&e.jsx(Kt,{state:rs,setupProgress:Y,sessionStarted:!!w?.startedAt,onRetry:b&&d?.status==="failed"?async()=>{await qe(),ue(!0)}:void 0,compact:!0},s.id),Hs?(!ze||C)&&e.jsx(Xe,{label:"Loading..."}):b?gs?e.jsx(Xe,{label:"Loading logs..."}):ae.length===0&&!b?e.jsx("div",{className:"text-muted-foreground text-center py-8 text-sm",children:re?"Waiting for agent output...":"No logs recorded."}):e.jsx(Ps,{children:e.jsx(Rs,{logs:ae,sessionId:M,downloadSessionId:M,isOutputActive:bs,lastExitAt:vs,onUserToggleDetails:ns,scrollElementRef:z,onOpenPreviewUrl:ms,onOpenVisualization:ps})}):!ze||d?.status==="failed"||Y?.status==="failed"||C?e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-center",children:[(!ze||C)&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"w-12 h-12 bg-muted/50 rounded-xl border border-border/60 flex items-center justify-center mb-4",children:e.jsx(Qe,{size:20,className:"text-muted-foreground/70 ml-0.5"})}),e.jsx("h3",{className:"text-sm font-medium text-foreground mb-1",children:a("尚未启动 Agent")}),e.jsx("p",{className:"text-xs text-muted-foreground mb-5 max-w-[240px]",children:C?Fe:a("选择一个 Agent 来执行此任务")})]}),!C&&(!d||d.status==="failed")&&e.jsxs(Ke,{onClick:async()=>{await qe(),ue(!0)},disabled:!!(d&&d.status!=="failed"),children:[e.jsx(Qe,{size:16,className:"mr-1.5"}),d?.status==="failed"?a("重试启动 Agent"):a("启动 Agent")]})]}):null]})}),!ts&&e.jsxs("button",{onClick:()=>me(),className:"absolute bottom-2 left-1/2 -translate-x-1/2 z-10 flex items-center gap-1 px-2.5 py-1 bg-background/90 backdrop-blur-sm border border-border rounded-full shadow-raised text-xs text-foreground/70 active:bg-background transition-all","aria-label":"Scroll to bottom",children:[e.jsx(As,{size:12}),e.jsx("span",{children:a("回到底部")})]})]}),Ne.length>0&&e.jsx("div",{className:"px-3 pt-1.5 pb-0.5 bg-background shrink-0 border-t border-border/60",children:e.jsx(Es,{todos:Ne,compact:!0})}),C?e.jsx("div",{className:"px-3 py-2 bg-background shrink-0 border-t border-border/60",children:e.jsx("div",{className:"rounded-xl border border-border bg-muted/50 px-3 py-2 text-xs text-muted-foreground",children:Fe})}):nt?e.jsx("div",{className:"px-3 py-2 bg-background shrink-0 border-t border-border/60",children:e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border bg-muted/50 px-3 py-2",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:a("代码已合并,以上为历史沟通记录")}),e.jsxs(Ke,{size:"sm",onClick:async()=>{await qe(),ue(!0)},children:[e.jsx(Qe,{size:14,className:"mr-1.5"}),a("启动新 Agent")]})]})}):b&&e.jsxs("div",{className:"px-3 py-2 bg-background shrink-0 border-t border-border/60",children:[Is,e.jsx(on,{sessionId:fe||b,compact:!0}),e.jsxs("div",{ref:De,className:"relative bg-background rounded-xl border border-border shadow-raised focus-within:border-ring",children:[e.jsx(pn,{files:it,onRemove:lt}),e.jsx("textarea",{ref:X,value:R,onChange:ht,onPaste:ft,onKeyDown:t=>{G.handleKeyDown(t)||F.handleKeyDown(t)||t.key==="Enter"&&!t.shiftKey&&!t.repeat&&!t.nativeEvent.isComposing&&t.nativeEvent.keyCode!==229&&(t.preventDefault(),Cs())},rows:1,placeholder:re?"Message Agent...":"Continue conversation...",className:"w-full px-3 pt-2.5 pb-1 bg-transparent border-none focus:outline-none resize-none text-[15px] text-foreground placeholder:text-muted-foreground/70",style:{minHeight:40,maxHeight:140}}),e.jsx("input",{ref:es,type:"file",multiple:!0,className:"hidden",onChange:xt}),e.jsxs("div",{className:"flex items-center justify-between px-2 pb-1.5",children:[e.jsx("div",{className:"flex items-center gap-0.5",children:e.jsx("button",{onClick:()=>es.current?.click(),className:"p-1 text-muted-foreground active:text-foreground/70 rounded-lg",children:e.jsx(In,{size:15})})}),e.jsxs("div",{className:"flex items-center gap-1",children:[w&&ge&&e.jsx(an,{providers:ge,currentProviderId:be,agentType:w.agentType,runtimeType:w.runtimeType,onSelect:ot}),e.jsx(ln,{usage:Ns}),re&&!O.isPending&&!R.trim()&&!ie?e.jsx("button",{onClick:dt,disabled:L.isPending||oe,"aria-label":a("Stop"),className:"p-1.5 rounded-lg bg-destructive-ink text-white active:bg-destructive-ink/90 disabled:opacity-50",children:e.jsx(St,{size:12})}):e.jsx("button",{onClick:Cs,"aria-label":a(O.isPending?"发送中...":"Send"),"aria-busy":O.isPending,disabled:!R.trim()&&!ie||Ce||O.isPending||L.isPending||oe||!!ve,className:`p-1.5 rounded-lg transition-colors ${(R.trim()||ie)&&!Ce&&!O.isPending&&!L.isPending&&!oe&&!ve?"bg-primary text-primary-foreground active:bg-primary":"bg-transparent text-muted-foreground"}`,children:O.isPending?e.jsx(At,{size:15,className:"animate-spin"}):e.jsx(Tt,{size:15})})]})]})]}),e.jsx(Ms,{open:F.query!==null,anchorRef:De,commands:F.filteredCommands,selectedIndex:F.selectedIndex,query:F.query??"",hasCatalog:F.allCommands.length>0,compact:!0,onSelect:F.applyCommand}),e.jsx(Ms,{open:G.query!==null,anchorRef:De,commands:G.filteredSkills,selectedIndex:G.selectedIndex,query:G.query??"",hasCatalog:G.allSkills.length>0,title:"Skills",queryPrefix:"$",emptyCatalogMessage:"No skills catalog for this agent yet.",compact:!0,onSelect:G.applySkill})]})]})),p==="team-status"&&x&&e.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:e.jsx(Qt,{teamRun:x,workspaces:i,selectedWorkspaceId:B,onSelectWorkspace:U,onViewInvocationSession:ws})}),p==="changes"&&P&&e.jsxs("div",{className:"flex-1 flex flex-col min-h-0 overflow-hidden",children:[i&&i.length>1&&e.jsx("div",{className:"shrink-0 border-b border-border/60 bg-background px-3 py-2",children:e.jsx(_t,{workspaces:i,teamRun:x,selectedWorkspaceId:B,onSelectWorkspace:U,className:"w-full",buttonClassName:"w-full max-w-none min-w-0 justify-start"})}),Ge&&S&&e.jsx("div",{className:"shrink-0",children:e.jsx(Xt,{projectId:s.projectId,workspaceId:S,branchName:J,targetBranch:ee,commitMessage:is,committedFileCount:Xs,onRefreshCommitMessage:us,onConflict:xe,onResolveConflicts:()=>xe()})}),e.jsx(Pn,{workingDir:I})]}),p==="history"&&e.jsx("div",{className:"flex-1 flex flex-col min-h-0 overflow-hidden",children:e.jsx(zn,{workingDir:I})}),p==="workspace"&&e.jsx("div",{className:"flex-1 overflow-hidden",children:e.jsx(Yt,{sessionId:b||void 0,workspaceId:B,workingDir:I,projectId:s.projectId,className:"h-full",hideChanges:!0,gitAvailable:P,readOnly:C,repoDeleted:as,previewRequest:Vs,onPreviewRequestHandled:t=>{Le(r=>r?.id===t?void 0:r)}})}),!C&&e.jsx(Zt,{isOpen:qs,onClose:()=>ue(!1),taskId:s.id,projectId:s.projectId,taskTitle:Z?.title??s.title,taskDescription:Z?.body??"",taskPrompt:Z?.prompt,projectIsGitRepo:s.isGitRepo,projectWorktreeReady:s.worktreeReady,projectGitReason:s.reason,onStarted:()=>g?.(s.id)}),e.jsx(Cn,{isOpen:Us,onClose:()=>Pe(!1),onConfirm:()=>{l?.(s.id),Pe(!1)},taskId:s.id,taskTitle:s.title,workspaces:i,isLoading:v}),cs&&y&&ds&&e.jsx(Jt,{open:cs,onOpenChange:t=>{t||te.closeDialog()},workspaceId:ds,conflictOp:y.conflictOp,conflictedFiles:y.conflictedFiles,resolutionContextToken:y.resolutionContextToken,sourceBranch:Zs,targetBranch:Js,operation:E?.operation,worktreePath:Ys,mergeAborted:y.mergeAborted,mergeStrategy:y.mergeStrategy,sourceWorkspaceId:y.sourceWorkspaceId,targetWorkspaceId:y.targetWorkspaceId,sourceWorktreePath:y.sourceWorktreePath,targetWorktreePath:y.targetWorktreePath,sessions:et,currentSessionId:x?void 0:b,teamRunId:x?.id})]})}function Xe({label:s}){return e.jsxs("div",{className:"flex items-center justify-center py-12 gap-3 text-muted-foreground",children:[e.jsxs("svg",{className:"animate-spin motion-reduce:[animation-duration:2.4s] h-5 w-5",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"})]}),e.jsx("span",{className:"text-sm",children:s})]})}export{Vr as MobileTaskDetail};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as P,q as E,p as k,s as v,v as h,u as R,r as o,j as e,i as g,a3 as B,k as q,l as j,a4 as W,I as d,B as z,Q as L,a5 as A,a6 as Q,m as K,a7 as M}from"./index-BJObbxud.js";import{S as O}from"./select-BPdJrr5M.js";import{S as D}from"./toggles-QcIz43DP.js";import{M as H}from"./message-square-BLEJN6p7.js";import{L as G}from"./link-BSGb85gq.js";import"./select-B5RYunTs.js";import"./menu-styles-DWynpVVz.js";import"./chevron-down-3y5Aiolp.js";import"./check-BmiJ7qMY.js";import"./index-DZLnTISJ.js";import"./index-Bhvt-E6d.js";import"./index-B1oVmCie.js";import"./index-CThFsQNP.js";import"./index-Dk3bRQAK.js";import"./index-BtUQYU5l.js";function J(){return P({queryKey:v.notifications.settings,queryFn:()=>h.get("/notifications/settings")})}function V(){const t=E();return k({mutationFn:a=>h.put("/notifications/settings",a),onSuccess:()=>{t.invalidateQueries({queryKey:v.notifications.settings})}})}function X(){return k({mutationFn:t=>h.post("/notifications/test",t)})}function me(){const{t}=R(),{data:a,isLoading:T}=J(),l=V(),n=X(),N=[{value:"none",label:t("关闭")},{value:"feishu",label:t("飞书 Webhook")}],[i,p]=o.useState({webhookUrl:"",baseUrl:"",titleTemplate:"",bodyTemplate:""}),[m,x]=o.useState(!1),[f,r]=o.useState("idle"),u=o.useRef(void 0);if(o.useEffect(()=>{a&&!m&&p({webhookUrl:a.feishuWebhookUrl??"",baseUrl:a.thirdPartyBaseUrl??"",titleTemplate:a.taskInReviewTitleTemplate??"",bodyTemplate:a.taskInReviewBodyTemplate??""})},[a,m]),o.useEffect(()=>(n.isSuccess?(r("success"),u.current=setTimeout(()=>r("idle"),3e3)):n.isError&&(r("error"),u.current=setTimeout(()=>r("idle"),5e3)),()=>clearTimeout(u.current)),[n.isSuccess,n.isError]),T)return e.jsx(g,{children:e.jsx(B,{rows:3})});const y=a?.osNotificationEnabled??!0,b=a?.thirdPartyChannel??"none",c=(s,I)=>{p(F=>({...F,[s]:I})),x(!0)},S=s=>{l.mutate({osNotificationEnabled:s})},C=s=>{l.mutate({thirdPartyChannel:s})},U=()=>{l.mutate({feishuWebhookUrl:i.webhookUrl.trim()||null,thirdPartyBaseUrl:i.baseUrl.trim()||null,taskInReviewTitleTemplate:i.titleTemplate.trim()||"Agent Tower",taskInReviewBodyTemplate:i.bodyTemplate.trim()||t('✅ "{taskTitle}" 已完成,等待审查')},{onSuccess:()=>x(!1)})},w=()=>{i.webhookUrl.trim()&&n.mutate({channel:"feishu",webhookUrl:i.webhookUrl.trim(),baseUrl:i.baseUrl.trim()||void 0})};return e.jsxs(g,{children:[e.jsx(q,{title:t("通知设置"),className:"mb-1"}),e.jsxs("div",{className:"divide-y divide-border/60",children:[e.jsx(j,{icon:W,label:t("桌面通知"),description:t("任务完成时弹出系统通知"),align:"center",controlWidth:"auto",children:e.jsx(D,{checked:y,onCheckedChange:S,"aria-label":t("桌面通知")})}),e.jsxs("div",{className:"py-5",children:[e.jsx(j,{icon:H,label:t("第三方通知"),description:t("推送到外部渠道(飞书群机器人等)"),align:"center",className:"py-0",children:e.jsx(O,{value:b,onChange:s=>C(s),options:N})}),b==="feishu"&&e.jsxs("div",{className:"mt-4 space-y-4 sm:pl-11",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"feishu-webhook-url",className:"mb-1.5 block text-xs font-medium text-muted-foreground",children:"Webhook URL"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(d,{id:"feishu-webhook-url",value:i.webhookUrl,onChange:s=>c("webhookUrl",s.target.value),placeholder:"https://open.feishu.cn/open-apis/bot/v2/hook/...",className:"min-w-0 flex-1 font-mono"}),e.jsxs(z,{size:"sm",variant:"outline",onClick:w,disabled:!i.webhookUrl.trim()||n.isPending,className:"h-auto shrink-0",children:[n.isPending&&e.jsx(L,{size:12,className:"mr-1 animate-spin motion-reduce:animate-none"}),t("测试")]})]}),f==="success"&&e.jsxs("div",{role:"status",className:"mt-2 flex items-center gap-1.5 text-xs text-success-ink",children:[e.jsx(A,{size:12,"aria-hidden":"true"}),t("测试消息发送成功")]}),f==="error"&&e.jsxs("div",{role:"alert",className:"mt-2 flex items-center gap-1.5 text-xs text-destructive-ink",children:[e.jsx(Q,{size:12,"aria-hidden":"true"}),t("发送失败,请检查 Webhook 地址")]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"feishu-base-url",className:"mb-1.5 block text-xs font-medium text-muted-foreground",children:e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx(G,{size:11,"aria-hidden":"true"}),t("跳转地址")]})}),e.jsx(d,{id:"feishu-base-url",value:i.baseUrl,onChange:s=>c("baseUrl",s.target.value),placeholder:"http://localhost:5173",className:"font-mono"}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:t('通知卡片中的"查看任务"按钮跳转地址前缀')})]})]})]}),e.jsxs("div",{className:"py-5",children:[e.jsxs("div",{className:"mb-4",children:[e.jsx(K,{children:t("通知模板")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:t("支持变量: {taskTitle}, {taskId}, {projectId}, {projectName}, {status}",{taskTitle:"{taskTitle}",taskId:"{taskId}",projectId:"{projectId}",projectName:"{projectName}",status:"{status}"})})]}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"notification-title-template",className:"mb-1.5 block text-xs font-medium text-muted-foreground",children:t("标题")}),e.jsx(d,{id:"notification-title-template",value:i.titleTemplate,onChange:s=>c("titleTemplate",s.target.value),placeholder:"Agent Tower"})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"notification-body-template",className:"mb-1.5 block text-xs font-medium text-muted-foreground",children:t("内容")}),e.jsx(d,{id:"notification-body-template",value:i.bodyTemplate,onChange:s=>c("bodyTemplate",s.target.value),placeholder:t('✅ "{taskTitle}" 已完成,等待审查')})]})]})]})]}),m&&e.jsx(M,{saving:l.isPending,onSave:U})]})}export{me as NotificationSettingsPage};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{u as T,r as g,j as e,i as S,k as V,G,H as w,I as M,B as E,J as p,n as P}from"./index-BJObbxud.js";import{u as U,a as _,b as z,c as B}from"./use-profiles-DuXaBRju.js";import{M as F}from"./modal-CSGOqphK.js";import{C as $}from"./confirm-dialog-ltNBFYCs.js";import{T as R}from"./textarea-BVyPl9rM.js";import{L as H}from"./layers-eaHAVcc3.js";import{C as q}from"./chevron-down-3y5Aiolp.js";import{P as K,T as Q}from"./trash-2-CvUJsbtT.js";import{P as W}from"./pencil-Cp70ZwtG.js";import"./dialog-CuFEdqLg.js";import"./index-Bhvt-E6d.js";function X(t){const a=Object.entries(t);return a.length===0?"(empty)":a.map(([m,c])=>`${m}: ${JSON.stringify(c)}`).join(", ")}const y={CLAUDE_CODE:"Claude Code",GEMINI_CLI:"Gemini CLI",CURSOR_AGENT:"Cursor Agent"};function Y({agentType:t,variants:a,isBuiltIn:m,onEdit:c,onNew:h,onDelete:j}){const{t:n}=T(),[r,b]=g.useState(!0),u=Object.entries(a);return e.jsxs("div",{className:"overflow-hidden rounded-lg border border-border",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 bg-muted/40 px-4 py-3",children:[e.jsxs("button",{type:"button",onClick:()=>b(i=>!i),"aria-expanded":r,className:"flex items-center gap-3 rounded-md transition-opacity hover:opacity-80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",children:[e.jsx("h3",{className:"text-[13px] font-semibold text-foreground",children:y[t]??t}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[u.length," ",n("个变体")]}),e.jsx(q,{size:14,"aria-hidden":"true",className:P("text-muted-foreground transition-transform motion-reduce:transition-none",r&&"rotate-180")})]}),e.jsxs("button",{type:"button",onClick:h,className:"flex items-center gap-1 rounded-md px-2 py-1 text-xs text-muted-foreground transition-colors hover:bg-background hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",children:[e.jsx(K,{size:12,"aria-hidden":"true"}),n("新增")]})]}),r&&e.jsxs("div",{className:"divide-y divide-border/60",children:[u.map(([i,x])=>{const f=m(i);return e.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 transition-colors hover:bg-muted/40",children:[e.jsx("span",{className:P("inline-flex shrink-0 items-center rounded px-2 py-0.5 text-xs font-semibold",i==="DEFAULT"?"bg-primary/[0.06] text-primary":"bg-muted text-muted-foreground"),children:i}),e.jsx("span",{className:"min-w-0 flex-1 truncate font-mono text-xs text-muted-foreground",children:X(x)}),f&&e.jsx("span",{className:"shrink-0 text-xs font-medium text-muted-foreground",children:n("内置")}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[e.jsx("button",{onClick:()=>c(i,x),className:"flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",title:n("编辑"),"aria-label":n("编辑"),children:e.jsx(W,{size:12})}),!f&&e.jsx("button",{onClick:()=>j(i),className:"flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",title:n("删除"),"aria-label":n("删除"),children:e.jsx(Q,{size:12})})]})]},i)}),u.length===0&&e.jsx("div",{className:"px-4 py-4 text-center text-xs text-muted-foreground",children:n("暂无变体")})]})]})}function Z(){return e.jsxs("div",{role:"status","aria-label":"Loading",children:[e.jsx(p,{className:"h-7 w-36"}),e.jsx(p,{className:"mt-2 h-3.5 w-72 max-w-full"}),e.jsx("div",{className:"mt-5 space-y-3",children:Array.from({length:2}).map((t,a)=>e.jsxs("div",{className:"overflow-hidden rounded-lg border border-border",children:[e.jsxs("div",{className:"flex items-center gap-3 bg-muted/40 px-4 py-3",children:[e.jsx(p,{className:"h-4 w-28"}),e.jsx(p,{className:"h-3 w-14"})]}),e.jsx("div",{className:"divide-y divide-border/60",children:Array.from({length:2}).map((m,c)=>e.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5",children:[e.jsx(p,{className:"h-5 w-16 rounded"}),e.jsx(p,{className:"h-3.5 flex-1"})]},c))})]},a))})]})}function ue(){const{t}=T(),{data:a,isLoading:m}=U(),{data:c}=_(),h=z(),j=B(),[n,r]=g.useState(null),[b,u]=g.useState(""),[i,x]=g.useState(""),[f,v]=g.useState(""),[o,N]=g.useState(null),k=(s,l,d)=>{r({agentType:s,variant:l,config:d,isNew:!1}),x(l),u(JSON.stringify(d,null,2)),v("")},O=s=>{r({agentType:s,variant:"",config:{},isNew:!0}),x(""),u(`{
|
|
2
|
+
|
|
3
|
+
}`),v("")},D=()=>{if(!(!n||!i.trim()))try{const s=JSON.parse(b);v(""),h.mutate({agentType:n.agentType,variant:i.trim().toUpperCase(),config:s},{onSuccess:()=>r(null)})}catch{v(t("JSON 格式错误"))}},L=(s,l)=>{N({agentType:s,variant:l})},A=()=>{o&&j.mutate({agentType:o.agentType,variant:o.variant},{onSettled:()=>N(null)})},I=(s,l)=>!!c?.executors[s]?.[l];if(m)return e.jsx(S,{children:e.jsx(Z,{})});const C=a?.executors??{};return e.jsxs(S,{children:[e.jsx(V,{title:t("Profile 配置"),description:t("管理 Agent 执行器的配置变体。每个变体定义一组运行参数。"),className:"mb-4"}),e.jsx("div",{className:"space-y-3",children:Object.entries(C).map(([s,l])=>e.jsx(Y,{agentType:s,variants:l,isBuiltIn:d=>I(s,d),onEdit:(d,J)=>k(s,d,J),onNew:()=>O(s),onDelete:d=>L(s,d)},s))}),Object.keys(C).length===0&&e.jsx(G,{icon:H,message:t("暂无 Profile 配置")}),e.jsx(F,{isOpen:!!n,onClose:()=>r(null),title:n?.isNew?t("新增 Variant — {agentType}",{agentType:y[n.agentType]??n.agentType}):t("编辑 {variant}",{variant:n?.variant??""}),action:e.jsxs(e.Fragment,{children:[e.jsx(E,{variant:"outline",onClick:()=>r(null),children:t("取消")}),e.jsx(E,{onClick:D,disabled:h.isPending,children:h.isPending?t("保存中..."):t("保存")})]}),children:e.jsxs("div",{className:"space-y-4",children:[e.jsx(w,{label:t("Variant 名称"),htmlFor:"profile-variant-name",children:e.jsx(M,{id:"profile-variant-name",value:i,onChange:s=>x(s.target.value),disabled:!n?.isNew,placeholder:t("例如: CUSTOM"),className:"font-mono"})}),e.jsxs(w,{label:t("配置 (JSON)"),htmlFor:"profile-variant-json",children:[e.jsx(R,{id:"profile-variant-json",value:b,onChange:s=>{u(s.target.value),v("")},rows:6,className:"resize-none font-mono","aria-invalid":!!f}),f&&e.jsx("p",{role:"alert",className:"mt-1 text-xs text-destructive-ink",children:f})]})]})}),e.jsx($,{isOpen:o!==null,onClose:()=>{j.isPending||N(null)},onConfirm:A,title:t("删除 Profile Variant"),description:o?t('确定删除 "{name}"?此操作不可撤销。',{name:`${y[o.agentType]??o.agentType} / ${o.variant}`}):"",confirmText:t("删除"),cancelText:t("取消"),variant:"danger",isLoading:j.isPending})]})}export{ue as ProfileSettingsPage};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/TaskDetail-rEXNe2h3.js","assets/index-BJObbxud.js","assets/index-0XPZayUU.css","assets/mermaid-NOHMQCX5-BSNbBj78.js","assets/AttachmentPreview-CLN1lnLe.js","assets/tooltip-CPqGK_WZ.js","assets/kbd-C88ut3t9.js","assets/index-Bhvt-E6d.js","assets/index-B1oVmCie.js","assets/index-Dk3bRQAK.js","assets/use-translation-settings-NYM0lmBx.js","assets/copy-HRMhTkIG.js","assets/index-DcOU2m2F.js","assets/chevron-down-3y5Aiolp.js","assets/mermaid-NOHMQCX5-lI9o3AWT.css","assets/EditableTaskTitle-BJ9Rxggf.js","assets/use-providers-Td1-gyrN.js","assets/MemberAvatar-YVr_erAr.js","assets/people-DT78SebR.js","assets/chevron-up-DqaYcjpq.js","assets/at-sign-C48_y345.js","assets/paperclip-CTNoXpUW.js","assets/check-BmiJ7qMY.js","assets/useTokenUsage-DDXf7E4p.js","assets/CreateTaskInput-CasITF8y.js","assets/use-projects-Ddz0knyr.js","assets/BrandLogo-BUimEX-9.js","assets/hooks-BLxb16IA.js","assets/index-BtUQYU5l.js","assets/index-DZLnTISJ.js","assets/trash-2-CvUJsbtT.js","assets/ExecutionPermissionSelector-B8befbxJ.js","assets/menu--sjyisSg.js","assets/menu-styles-DWynpVVz.js","assets/confirm-dialog-ltNBFYCs.js","assets/dialog-CuFEdqLg.js","assets/modal-CSGOqphK.js","assets/select-BPdJrr5M.js","assets/select-B5RYunTs.js","assets/index-CThFsQNP.js","assets/layers-eaHAVcc3.js","assets/message-square-BLEJN6p7.js","assets/textarea-BVyPl9rM.js","assets/content-DPQMfMae.js","assets/search-field-CQLDXLeA.js","assets/popover-BiVxGGgp.js","assets/search-DniD_AGC.js","assets/server-xswxWpKD.js","assets/icon-button-CYiKa-7C.js","assets/use-workspaces-CdJZLmGh.js","assets/upload-CsXAmAun.js","assets/globe-B9I-jHBB.js","assets/BranchSelect-Cofp8vYf.js","assets/pencil-Cp70ZwtG.js","assets/EditableTaskTitle-DcpNTP1B.css","assets/useNormalizedLogs--RbVywYa.js","assets/track-Ckye0-tt.js","assets/MobileTaskDetail-QNUHMq7u.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{c as Yr,b7 as Hr,v as We,r as u,a8 as B,aC as ut,u as De,j as i,an as Rn,n as ie,ax as pt,ay as qr,aw as te,bl as It,bo as Xr,bk as Vr,bp as Jr,aK as ar,aO as Zr,aq as Je,bq as Te,a_ as Ee,o as es,q as $t,p as pn,s as ue,X as ts,S as ns,ab as rs,N as Ae,ag as At,aQ as ss,t as Le,br as os,af as is,bs as as,bt as ls,bu as cs,aM as kn,aN as jn,bv as lr}from"./index-BJObbxud.js";import{C as us}from"./confirm-dialog-ltNBFYCs.js";import{a as ds,F as fs}from"./use-workspaces-CdJZLmGh.js";import{h as Tn,i as hs,c as ms,C as An}from"./CreateTaskInput-CasITF8y.js";import{C as vt}from"./check-BmiJ7qMY.js";import{T as gs,P as ps}from"./trash-2-CvUJsbtT.js";import{S as cr}from"./search-DniD_AGC.js";import{F as vs,c as xs,P as bs,a as ys,b as ws,I as Cs}from"./popover-BiVxGGgp.js";import{S as Ss,B as Dn}from"./BrandLogo-BUimEX-9.js";import{M as Es}from"./message-square-BLEJN6p7.js";import{L as an}from"./layers-eaHAVcc3.js";import{e as Ns,a as Rs}from"./use-projects-Ddz0knyr.js";import{I as Vt}from"./icon-button-CYiKa-7C.js";import{C as Mn}from"./copy-HRMhTkIG.js";import{u as ks}from"./use-providers-Td1-gyrN.js";import{M as In}from"./modal-CSGOqphK.js";import{a as lt}from"./ExecutionPermissionSelector-B8befbxJ.js";import{C as js}from"./chevron-down-3y5Aiolp.js";const Ts=[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]],Pn=Yr("smartphone",Ts),Jt=new Map;async function As(e,t,n){const r=`tower:task-start:${e}:${JSON.stringify(t)}`;let o=Jt.get(r);if(!o)try{const h=sessionStorage.getItem(r);h&&(o=JSON.parse(h))}catch{}o??={creationId:Hr()},Jt.set(r,o);const l=()=>{try{sessionStorage.setItem(r,JSON.stringify(o))}catch{}};l(),o.workspace||(n.onStep?.("creating-workspace"),o.workspace=await n.createWorkspace(o.creationId),l()),o.session||(n.onStep?.("creating-session"),o.session=await We.post(`/workspaces/${o.workspace.id}/sessions`,{providerId:t.providerId,prompt:t.prompt,retryTask:t.retryTask,clientSubmissionId:o.creationId}),l()),n.onStep?.("starting-session"),await n.startSession(o.session.id),Jt.delete(r);try{sessionStorage.removeItem(r)}catch{}return{workspace:o.workspace,session:o.session}}const Kt=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Ze(e){const t=Object.prototype.toString.call(e);return t==="[object Window]"||t==="[object global]"}function vn(e){return"nodeType"in e}function ge(e){var t,n;return e?Ze(e)?e:vn(e)&&(t=(n=e.ownerDocument)==null?void 0:n.defaultView)!=null?t:window:window}function xn(e){const{Document:t}=ge(e);return e instanceof t}function wt(e){return Ze(e)?!1:e instanceof ge(e).HTMLElement}function ur(e){return e instanceof ge(e).SVGElement}function et(e){return e?Ze(e)?e.document:vn(e)?xn(e)?e:wt(e)||ur(e)?e.ownerDocument:document:document:document}const ze=Kt?u.useLayoutEffect:u.useEffect;function Gt(e){const t=u.useRef(e);return ze(()=>{t.current=e}),u.useCallback(function(){for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return t.current==null?void 0:t.current(...r)},[])}function Ds(){const e=u.useRef(null),t=u.useCallback((r,o)=>{e.current=setInterval(r,o)},[]),n=u.useCallback(()=>{e.current!==null&&(clearInterval(e.current),e.current=null)},[]);return[t,n]}function xt(e,t){t===void 0&&(t=[e]);const n=u.useRef(e);return ze(()=>{n.current!==e&&(n.current=e)},t),n}function Ct(e,t){const n=u.useRef();return u.useMemo(()=>{const r=e(n.current);return n.current=r,r},[...t])}function Pt(e){const t=Gt(e),n=u.useRef(null),r=u.useCallback(o=>{o!==n.current&&t?.(o,n.current),n.current=o},[]);return[n,r]}function Ot(e){const t=u.useRef();return u.useEffect(()=>{t.current=e},[e]),t.current}let Zt={};function Wt(e,t){return u.useMemo(()=>{if(t)return t;const n=Zt[e]==null?0:Zt[e]+1;return Zt[e]=n,e+"-"+n},[e,t])}function dr(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return r.reduce((l,h)=>{const f=Object.entries(h);for(const[s,a]of f){const c=l[s];c!=null&&(l[s]=c+e*a)}return l},{...t})}}const Ve=dr(1),Lt=dr(-1);function Ms(e){return"clientX"in e&&"clientY"in e}function bn(e){if(!e)return!1;const{KeyboardEvent:t}=ge(e.target);return t&&e instanceof t}function Is(e){if(!e)return!1;const{TouchEvent:t}=ge(e.target);return t&&e instanceof t}function zt(e){if(Is(e)){if(e.touches&&e.touches.length){const{clientX:t,clientY:n}=e.touches[0];return{x:t,y:n}}else if(e.changedTouches&&e.changedTouches.length){const{clientX:t,clientY:n}=e.changedTouches[0];return{x:t,y:n}}}return Ms(e)?{x:e.clientX,y:e.clientY}:null}const bt=Object.freeze({Translate:{toString(e){if(!e)return;const{x:t,y:n}=e;return"translate3d("+(t?Math.round(t):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(e){if(!e)return;const{scaleX:t,scaleY:n}=e;return"scaleX("+t+") scaleY("+n+")"}},Transform:{toString(e){if(e)return[bt.Translate.toString(e),bt.Scale.toString(e)].join(" ")}},Transition:{toString(e){let{property:t,duration:n,easing:r}=e;return t+" "+n+"ms "+r}}}),On="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function Ps(e){return e.matches(On)?e:e.querySelector(On)}const Os={display:"none"};function Ls(e){let{id:t,value:n}=e;return B.createElement("div",{id:t,style:Os},n)}function zs(e){let{id:t,announcement:n,ariaLiveType:r="assertive"}=e;const o={position:"fixed",top:0,left:0,width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"};return B.createElement("div",{id:t,style:o,role:"status","aria-live":r,"aria-atomic":!0},n)}function Fs(){const[e,t]=u.useState("");return{announce:u.useCallback(r=>{r!=null&&t(r)},[]),announcement:e}}const fr=u.createContext(null);function _s(e){const t=u.useContext(fr);u.useEffect(()=>{if(!t)throw new Error("useDndMonitor must be used within a children of <DndContext>");return t(e)},[e,t])}function Bs(){const[e]=u.useState(()=>new Set),t=u.useCallback(r=>(e.add(r),()=>e.delete(r)),[e]);return[u.useCallback(r=>{let{type:o,event:l}=r;e.forEach(h=>{var f;return(f=h[o])==null?void 0:f.call(h,l)})},[e]),t]}const Us={draggable:`
|
|
3
|
+
To pick up a draggable item, press the space bar.
|
|
4
|
+
While dragging, use the arrow keys to move the item.
|
|
5
|
+
Press space again to drop the item in its new position, or press escape to cancel.
|
|
6
|
+
`},$s={onDragStart(e){let{active:t}=e;return"Picked up draggable item "+t.id+"."},onDragOver(e){let{active:t,over:n}=e;return n?"Draggable item "+t.id+" was moved over droppable area "+n.id+".":"Draggable item "+t.id+" is no longer over a droppable area."},onDragEnd(e){let{active:t,over:n}=e;return n?"Draggable item "+t.id+" was dropped over droppable area "+n.id:"Draggable item "+t.id+" was dropped."},onDragCancel(e){let{active:t}=e;return"Dragging was cancelled. Draggable item "+t.id+" was dropped."}};function Ks(e){let{announcements:t=$s,container:n,hiddenTextDescribedById:r,screenReaderInstructions:o=Us}=e;const{announce:l,announcement:h}=Fs(),f=Wt("DndLiveRegion"),[s,a]=u.useState(!1);if(u.useEffect(()=>{a(!0)},[]),_s(u.useMemo(()=>({onDragStart(d){let{active:m}=d;l(t.onDragStart({active:m}))},onDragMove(d){let{active:m,over:p}=d;t.onDragMove&&l(t.onDragMove({active:m,over:p}))},onDragOver(d){let{active:m,over:p}=d;l(t.onDragOver({active:m,over:p}))},onDragEnd(d){let{active:m,over:p}=d;l(t.onDragEnd({active:m,over:p}))},onDragCancel(d){let{active:m,over:p}=d;l(t.onDragCancel({active:m,over:p}))}}),[l,t])),!s)return null;const c=B.createElement(B.Fragment,null,B.createElement(Ls,{id:r,value:o.draggable}),B.createElement(zs,{id:f,announcement:h}));return n?ut.createPortal(c,n):c}var le;(function(e){e.DragStart="dragStart",e.DragMove="dragMove",e.DragEnd="dragEnd",e.DragCancel="dragCancel",e.DragOver="dragOver",e.RegisterDroppable="registerDroppable",e.SetDroppableDisabled="setDroppableDisabled",e.UnregisterDroppable="unregisterDroppable"})(le||(le={}));function Ft(){}function Gs(e,t){return u.useMemo(()=>({sensor:e,options:t??{}}),[e,t])}function Ws(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return u.useMemo(()=>[...t].filter(r=>r!=null),[...t])}const Ne=Object.freeze({x:0,y:0});function Qs(e,t){const n=zt(e);if(!n)return"0 0";const r={x:(n.x-t.left)/t.width*100,y:(n.y-t.top)/t.height*100};return r.x+"% "+r.y+"%"}function Ys(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return r-n}function Hs(e,t){if(!e||e.length===0)return null;const[n]=e;return n[t]}function qs(e,t){const n=Math.max(t.top,e.top),r=Math.max(t.left,e.left),o=Math.min(t.left+t.width,e.left+e.width),l=Math.min(t.top+t.height,e.top+e.height),h=o-r,f=l-n;if(r<o&&n<l){const s=t.width*t.height,a=e.width*e.height,c=h*f,d=c/(s+a-c);return Number(d.toFixed(4))}return 0}const Xs=e=>{let{collisionRect:t,droppableRects:n,droppableContainers:r}=e;const o=[];for(const l of r){const{id:h}=l,f=n.get(h);if(f){const s=qs(f,t);s>0&&o.push({id:h,data:{droppableContainer:l,value:s}})}}return o.sort(Ys)};function Vs(e,t,n){return{...e,scaleX:t&&n?t.width/n.width:1,scaleY:t&&n?t.height/n.height:1}}function hr(e,t){return e&&t?{x:e.left-t.left,y:e.top-t.top}:Ne}function Js(e){return function(n){for(var r=arguments.length,o=new Array(r>1?r-1:0),l=1;l<r;l++)o[l-1]=arguments[l];return o.reduce((h,f)=>({...h,top:h.top+e*f.y,bottom:h.bottom+e*f.y,left:h.left+e*f.x,right:h.right+e*f.x}),{...n})}}const Zs=Js(1);function mr(e){if(e.startsWith("matrix3d(")){const t=e.slice(9,-1).split(/, /);return{x:+t[12],y:+t[13],scaleX:+t[0],scaleY:+t[5]}}else if(e.startsWith("matrix(")){const t=e.slice(7,-1).split(/, /);return{x:+t[4],y:+t[5],scaleX:+t[0],scaleY:+t[3]}}return null}function eo(e,t,n){const r=mr(t);if(!r)return e;const{scaleX:o,scaleY:l,x:h,y:f}=r,s=e.left-h-(1-o)*parseFloat(n),a=e.top-f-(1-l)*parseFloat(n.slice(n.indexOf(" ")+1)),c=o?e.width/o:e.width,d=l?e.height/l:e.height;return{width:c,height:d,top:a,right:s+c,bottom:a+d,left:s}}const to={ignoreTransform:!1};function St(e,t){t===void 0&&(t=to);let n=e.getBoundingClientRect();if(t.ignoreTransform){const{transform:a,transformOrigin:c}=ge(e).getComputedStyle(e);a&&(n=eo(n,a,c))}const{top:r,left:o,width:l,height:h,bottom:f,right:s}=n;return{top:r,left:o,width:l,height:h,bottom:f,right:s}}function Ln(e){return St(e,{ignoreTransform:!0})}function no(e){const t=e.innerWidth,n=e.innerHeight;return{top:0,left:0,right:t,bottom:n,width:t,height:n}}function ro(e,t){return t===void 0&&(t=ge(e).getComputedStyle(e)),t.position==="fixed"}function so(e,t){t===void 0&&(t=ge(e).getComputedStyle(e));const n=/(auto|scroll|overlay)/;return["overflow","overflowX","overflowY"].some(o=>{const l=t[o];return typeof l=="string"?n.test(l):!1})}function yn(e,t){const n=[];function r(o){if(t!=null&&n.length>=t||!o)return n;if(xn(o)&&o.scrollingElement!=null&&!n.includes(o.scrollingElement))return n.push(o.scrollingElement),n;if(!wt(o)||ur(o)||n.includes(o))return n;const l=ge(e).getComputedStyle(o);return o!==e&&so(o,l)&&n.push(o),ro(o,l)?n:r(o.parentNode)}return e?r(e):n}function gr(e){const[t]=yn(e,1);return t??null}function en(e){return!Kt||!e?null:Ze(e)?e:vn(e)?xn(e)||e===et(e).scrollingElement?window:wt(e)?e:null:null}function pr(e){return Ze(e)?e.scrollX:e.scrollLeft}function vr(e){return Ze(e)?e.scrollY:e.scrollTop}function ln(e){return{x:pr(e),y:vr(e)}}var de;(function(e){e[e.Forward=1]="Forward",e[e.Backward=-1]="Backward"})(de||(de={}));function xr(e){return!Kt||!e?!1:e===document.scrollingElement}function br(e){const t={x:0,y:0},n=xr(e)?{height:window.innerHeight,width:window.innerWidth}:{height:e.clientHeight,width:e.clientWidth},r={x:e.scrollWidth-n.width,y:e.scrollHeight-n.height},o=e.scrollTop<=t.y,l=e.scrollLeft<=t.x,h=e.scrollTop>=r.y,f=e.scrollLeft>=r.x;return{isTop:o,isLeft:l,isBottom:h,isRight:f,maxScroll:r,minScroll:t}}const oo={x:.2,y:.2};function io(e,t,n,r,o){let{top:l,left:h,right:f,bottom:s}=n;r===void 0&&(r=10),o===void 0&&(o=oo);const{isTop:a,isBottom:c,isLeft:d,isRight:m}=br(e),p={x:0,y:0},g={x:0,y:0},v={height:t.height*o.y,width:t.width*o.x};return!a&&l<=t.top+v.height?(p.y=de.Backward,g.y=r*Math.abs((t.top+v.height-l)/v.height)):!c&&s>=t.bottom-v.height&&(p.y=de.Forward,g.y=r*Math.abs((t.bottom-v.height-s)/v.height)),!m&&f>=t.right-v.width?(p.x=de.Forward,g.x=r*Math.abs((t.right-v.width-f)/v.width)):!d&&h<=t.left+v.width&&(p.x=de.Backward,g.x=r*Math.abs((t.left+v.width-h)/v.width)),{direction:p,speed:g}}function ao(e){if(e===document.scrollingElement){const{innerWidth:l,innerHeight:h}=window;return{top:0,left:0,right:l,bottom:h,width:l,height:h}}const{top:t,left:n,right:r,bottom:o}=e.getBoundingClientRect();return{top:t,left:n,right:r,bottom:o,width:e.clientWidth,height:e.clientHeight}}function yr(e){return e.reduce((t,n)=>Ve(t,ln(n)),Ne)}function lo(e){return e.reduce((t,n)=>t+pr(n),0)}function co(e){return e.reduce((t,n)=>t+vr(n),0)}function wr(e,t){if(t===void 0&&(t=St),!e)return;const{top:n,left:r,bottom:o,right:l}=t(e);gr(e)&&(o<=0||l<=0||n>=window.innerHeight||r>=window.innerWidth)&&e.scrollIntoView({block:"center",inline:"center"})}const uo=[["x",["left","right"],lo],["y",["top","bottom"],co]];class wn{constructor(t,n){this.rect=void 0,this.width=void 0,this.height=void 0,this.top=void 0,this.bottom=void 0,this.right=void 0,this.left=void 0;const r=yn(n),o=yr(r);this.rect={...t},this.width=t.width,this.height=t.height;for(const[l,h,f]of uo)for(const s of h)Object.defineProperty(this,s,{get:()=>{const a=f(r),c=o[l]-a;return this.rect[s]+c},enumerable:!0});Object.defineProperty(this,"rect",{enumerable:!1})}}class ht{constructor(t){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach(n=>{var r;return(r=this.target)==null?void 0:r.removeEventListener(...n)})},this.target=t}add(t,n,r){var o;(o=this.target)==null||o.addEventListener(t,n,r),this.listeners.push([t,n,r])}}function fo(e){const{EventTarget:t}=ge(e);return e instanceof t?e:et(e)}function tn(e,t){const n=Math.abs(e.x),r=Math.abs(e.y);return typeof t=="number"?Math.sqrt(n**2+r**2)>t:"x"in t&&"y"in t?n>t.x&&r>t.y:"x"in t?n>t.x:"y"in t?r>t.y:!1}var ye;(function(e){e.Click="click",e.DragStart="dragstart",e.Keydown="keydown",e.ContextMenu="contextmenu",e.Resize="resize",e.SelectionChange="selectionchange",e.VisibilityChange="visibilitychange"})(ye||(ye={}));function zn(e){e.preventDefault()}function ho(e){e.stopPropagation()}var V;(function(e){e.Space="Space",e.Down="ArrowDown",e.Right="ArrowRight",e.Left="ArrowLeft",e.Up="ArrowUp",e.Esc="Escape",e.Enter="Enter",e.Tab="Tab"})(V||(V={}));const Cr={start:[V.Space,V.Enter],cancel:[V.Esc],end:[V.Space,V.Enter,V.Tab]},mo=(e,t)=>{let{currentCoordinates:n}=t;switch(e.code){case V.Right:return{...n,x:n.x+25};case V.Left:return{...n,x:n.x-25};case V.Down:return{...n,y:n.y+25};case V.Up:return{...n,y:n.y-25}}};class Sr{constructor(t){this.props=void 0,this.autoScrollEnabled=!1,this.referenceCoordinates=void 0,this.listeners=void 0,this.windowListeners=void 0,this.props=t;const{event:{target:n}}=t;this.props=t,this.listeners=new ht(et(n)),this.windowListeners=new ht(ge(n)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(ye.Resize,this.handleCancel),this.windowListeners.add(ye.VisibilityChange,this.handleCancel),setTimeout(()=>this.listeners.add(ye.Keydown,this.handleKeyDown))}handleStart(){const{activeNode:t,onStart:n}=this.props,r=t.node.current;r&&wr(r),n(Ne)}handleKeyDown(t){if(bn(t)){const{active:n,context:r,options:o}=this.props,{keyboardCodes:l=Cr,coordinateGetter:h=mo,scrollBehavior:f="smooth"}=o,{code:s}=t;if(l.end.includes(s)){this.handleEnd(t);return}if(l.cancel.includes(s)){this.handleCancel(t);return}const{collisionRect:a}=r.current,c=a?{x:a.left,y:a.top}:Ne;this.referenceCoordinates||(this.referenceCoordinates=c);const d=h(t,{active:n,context:r.current,currentCoordinates:c});if(d){const m=Lt(d,c),p={x:0,y:0},{scrollableAncestors:g}=r.current;for(const v of g){const x=t.code,{isTop:S,isRight:b,isLeft:w,isBottom:N,maxScroll:R,minScroll:D}=br(v),T=ao(v),C={x:Math.min(x===V.Right?T.right-T.width/2:T.right,Math.max(x===V.Right?T.left:T.left+T.width/2,d.x)),y:Math.min(x===V.Down?T.bottom-T.height/2:T.bottom,Math.max(x===V.Down?T.top:T.top+T.height/2,d.y))},A=x===V.Right&&!b||x===V.Left&&!w,E=x===V.Down&&!N||x===V.Up&&!S;if(A&&C.x!==d.x){const M=v.scrollLeft+m.x,Q=x===V.Right&&M<=R.x||x===V.Left&&M>=D.x;if(Q&&!m.y){v.scrollTo({left:M,behavior:f});return}Q?p.x=v.scrollLeft-M:p.x=x===V.Right?v.scrollLeft-R.x:v.scrollLeft-D.x,p.x&&v.scrollBy({left:-p.x,behavior:f});break}else if(E&&C.y!==d.y){const M=v.scrollTop+m.y,Q=x===V.Down&&M<=R.y||x===V.Up&&M>=D.y;if(Q&&!m.x){v.scrollTo({top:M,behavior:f});return}Q?p.y=v.scrollTop-M:p.y=x===V.Down?v.scrollTop-R.y:v.scrollTop-D.y,p.y&&v.scrollBy({top:-p.y,behavior:f});break}}this.handleMove(t,Ve(Lt(d,this.referenceCoordinates),p))}}}handleMove(t,n){const{onMove:r}=this.props;t.preventDefault(),r(n)}handleEnd(t){const{onEnd:n}=this.props;t.preventDefault(),this.detach(),n()}handleCancel(t){const{onCancel:n}=this.props;t.preventDefault(),this.detach(),n()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}Sr.activators=[{eventName:"onKeyDown",handler:(e,t,n)=>{let{keyboardCodes:r=Cr,onActivation:o}=t,{active:l}=n;const{code:h}=e.nativeEvent;if(r.start.includes(h)){const f=l.activatorNode.current;return f&&e.target!==f?!1:(e.preventDefault(),o?.({event:e.nativeEvent}),!0)}return!1}}];function Fn(e){return!!(e&&"distance"in e)}function _n(e){return!!(e&&"delay"in e)}class Cn{constructor(t,n,r){var o;r===void 0&&(r=fo(t.event.target)),this.props=void 0,this.events=void 0,this.autoScrollEnabled=!0,this.document=void 0,this.activated=!1,this.initialCoordinates=void 0,this.timeoutId=null,this.listeners=void 0,this.documentListeners=void 0,this.windowListeners=void 0,this.props=t,this.events=n;const{event:l}=t,{target:h}=l;this.props=t,this.events=n,this.document=et(h),this.documentListeners=new ht(this.document),this.listeners=new ht(r),this.windowListeners=new ht(ge(h)),this.initialCoordinates=(o=zt(l))!=null?o:Ne,this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.removeTextSelection=this.removeTextSelection.bind(this),this.attach()}attach(){const{events:t,props:{options:{activationConstraint:n,bypassActivationConstraint:r}}}=this;if(this.listeners.add(t.move.name,this.handleMove,{passive:!1}),this.listeners.add(t.end.name,this.handleEnd),t.cancel&&this.listeners.add(t.cancel.name,this.handleCancel),this.windowListeners.add(ye.Resize,this.handleCancel),this.windowListeners.add(ye.DragStart,zn),this.windowListeners.add(ye.VisibilityChange,this.handleCancel),this.windowListeners.add(ye.ContextMenu,zn),this.documentListeners.add(ye.Keydown,this.handleKeydown),n){if(r!=null&&r({event:this.props.event,activeNode:this.props.activeNode,options:this.props.options}))return this.handleStart();if(_n(n)){this.timeoutId=setTimeout(this.handleStart,n.delay),this.handlePending(n);return}if(Fn(n)){this.handlePending(n);return}}this.handleStart()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll(),setTimeout(this.documentListeners.removeAll,50),this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handlePending(t,n){const{active:r,onPending:o}=this.props;o(r,t,this.initialCoordinates,n)}handleStart(){const{initialCoordinates:t}=this,{onStart:n}=this.props;t&&(this.activated=!0,this.documentListeners.add(ye.Click,ho,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(ye.SelectionChange,this.removeTextSelection),n(t))}handleMove(t){var n;const{activated:r,initialCoordinates:o,props:l}=this,{onMove:h,options:{activationConstraint:f}}=l;if(!o)return;const s=(n=zt(t))!=null?n:Ne,a=Lt(o,s);if(!r&&f){if(Fn(f)){if(f.tolerance!=null&&tn(a,f.tolerance))return this.handleCancel();if(tn(a,f.distance))return this.handleStart()}if(_n(f)&&tn(a,f.tolerance))return this.handleCancel();this.handlePending(f,a);return}t.cancelable&&t.preventDefault(),h(s)}handleEnd(){const{onAbort:t,onEnd:n}=this.props;this.detach(),this.activated||t(this.props.active),n()}handleCancel(){const{onAbort:t,onCancel:n}=this.props;this.detach(),this.activated||t(this.props.active),n()}handleKeydown(t){t.code===V.Esc&&this.handleCancel()}removeTextSelection(){var t;(t=this.document.getSelection())==null||t.removeAllRanges()}}const go={cancel:{name:"pointercancel"},move:{name:"pointermove"},end:{name:"pointerup"}};class Sn extends Cn{constructor(t){const{event:n}=t,r=et(n.target);super(t,go,r)}}Sn.activators=[{eventName:"onPointerDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return!n.isPrimary||n.button!==0?!1:(r?.({event:n}),!0)}}];const po={move:{name:"mousemove"},end:{name:"mouseup"}};var cn;(function(e){e[e.RightClick=2]="RightClick"})(cn||(cn={}));class vo extends Cn{constructor(t){super(t,po,et(t.event.target))}}vo.activators=[{eventName:"onMouseDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return n.button===cn.RightClick?!1:(r?.({event:n}),!0)}}];const nn={cancel:{name:"touchcancel"},move:{name:"touchmove"},end:{name:"touchend"}};class xo extends Cn{constructor(t){super(t,nn)}static setup(){return window.addEventListener(nn.move.name,t,{capture:!1,passive:!1}),function(){window.removeEventListener(nn.move.name,t)};function t(){}}}xo.activators=[{eventName:"onTouchStart",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;const{touches:o}=n;return o.length>1?!1:(r?.({event:n}),!0)}}];var mt;(function(e){e[e.Pointer=0]="Pointer",e[e.DraggableRect=1]="DraggableRect"})(mt||(mt={}));var _t;(function(e){e[e.TreeOrder=0]="TreeOrder",e[e.ReversedTreeOrder=1]="ReversedTreeOrder"})(_t||(_t={}));function bo(e){let{acceleration:t,activator:n=mt.Pointer,canScroll:r,draggingRect:o,enabled:l,interval:h=5,order:f=_t.TreeOrder,pointerCoordinates:s,scrollableAncestors:a,scrollableAncestorRects:c,delta:d,threshold:m}=e;const p=wo({delta:d,disabled:!l}),[g,v]=Ds(),x=u.useRef({x:0,y:0}),S=u.useRef({x:0,y:0}),b=u.useMemo(()=>{switch(n){case mt.Pointer:return s?{top:s.y,bottom:s.y,left:s.x,right:s.x}:null;case mt.DraggableRect:return o}},[n,o,s]),w=u.useRef(null),N=u.useCallback(()=>{const D=w.current;if(!D)return;const T=x.current.x*S.current.x,C=x.current.y*S.current.y;D.scrollBy(T,C)},[]),R=u.useMemo(()=>f===_t.TreeOrder?[...a].reverse():a,[f,a]);u.useEffect(()=>{if(!l||!a.length||!b){v();return}for(const D of R){if(r?.(D)===!1)continue;const T=a.indexOf(D),C=c[T];if(!C)continue;const{direction:A,speed:E}=io(D,C,b,t,m);for(const M of["x","y"])p[M][A[M]]||(E[M]=0,A[M]=0);if(E.x>0||E.y>0){v(),w.current=D,g(N,h),x.current=E,S.current=A;return}}x.current={x:0,y:0},S.current={x:0,y:0},v()},[t,N,r,v,l,h,JSON.stringify(b),JSON.stringify(p),g,a,R,c,JSON.stringify(m)])}const yo={x:{[de.Backward]:!1,[de.Forward]:!1},y:{[de.Backward]:!1,[de.Forward]:!1}};function wo(e){let{delta:t,disabled:n}=e;const r=Ot(t);return Ct(o=>{if(n||!r||!o)return yo;const l={x:Math.sign(t.x-r.x),y:Math.sign(t.y-r.y)};return{x:{[de.Backward]:o.x[de.Backward]||l.x===-1,[de.Forward]:o.x[de.Forward]||l.x===1},y:{[de.Backward]:o.y[de.Backward]||l.y===-1,[de.Forward]:o.y[de.Forward]||l.y===1}}},[n,t,r])}function Co(e,t){const n=t!=null?e.get(t):void 0,r=n?n.node.current:null;return Ct(o=>{var l;return t==null?null:(l=r??o)!=null?l:null},[r,t])}function So(e,t){return u.useMemo(()=>e.reduce((n,r)=>{const{sensor:o}=r,l=o.activators.map(h=>({eventName:h.eventName,handler:t(h.handler,r)}));return[...n,...l]},[]),[e,t])}var yt;(function(e){e[e.Always=0]="Always",e[e.BeforeDragging=1]="BeforeDragging",e[e.WhileDragging=2]="WhileDragging"})(yt||(yt={}));var un;(function(e){e.Optimized="optimized"})(un||(un={}));const Bn=new Map;function Eo(e,t){let{dragging:n,dependencies:r,config:o}=t;const[l,h]=u.useState(null),{frequency:f,measure:s,strategy:a}=o,c=u.useRef(e),d=x(),m=xt(d),p=u.useCallback(function(S){S===void 0&&(S=[]),!m.current&&h(b=>b===null?S:b.concat(S.filter(w=>!b.includes(w))))},[m]),g=u.useRef(null),v=Ct(S=>{if(d&&!n)return Bn;if(!S||S===Bn||c.current!==e||l!=null){const b=new Map;for(let w of e){if(!w)continue;if(l&&l.length>0&&!l.includes(w.id)&&w.rect.current){b.set(w.id,w.rect.current);continue}const N=w.node.current,R=N?new wn(s(N),N):null;w.rect.current=R,R&&b.set(w.id,R)}return b}return S},[e,l,n,d,s]);return u.useEffect(()=>{c.current=e},[e]),u.useEffect(()=>{d||p()},[n,d]),u.useEffect(()=>{l&&l.length>0&&h(null)},[JSON.stringify(l)]),u.useEffect(()=>{d||typeof f!="number"||g.current!==null||(g.current=setTimeout(()=>{p(),g.current=null},f))},[f,d,p,...r]),{droppableRects:v,measureDroppableContainers:p,measuringScheduled:l!=null};function x(){switch(a){case yt.Always:return!1;case yt.BeforeDragging:return n;default:return!n}}}function En(e,t){return Ct(n=>e?n||(typeof t=="function"?t(e):e):null,[t,e])}function No(e,t){return En(e,t)}function Ro(e){let{callback:t,disabled:n}=e;const r=Gt(t),o=u.useMemo(()=>{if(n||typeof window>"u"||typeof window.MutationObserver>"u")return;const{MutationObserver:l}=window;return new l(r)},[r,n]);return u.useEffect(()=>()=>o?.disconnect(),[o]),o}function Qt(e){let{callback:t,disabled:n}=e;const r=Gt(t),o=u.useMemo(()=>{if(n||typeof window>"u"||typeof window.ResizeObserver>"u")return;const{ResizeObserver:l}=window;return new l(r)},[n]);return u.useEffect(()=>()=>o?.disconnect(),[o]),o}function ko(e){return new wn(St(e),e)}function Un(e,t,n){t===void 0&&(t=ko);const[r,o]=u.useState(null);function l(){o(s=>{if(!e)return null;if(e.isConnected===!1){var a;return(a=s??n)!=null?a:null}const c=t(e);return JSON.stringify(s)===JSON.stringify(c)?s:c})}const h=Ro({callback(s){if(e)for(const a of s){const{type:c,target:d}=a;if(c==="childList"&&d instanceof HTMLElement&&d.contains(e)){l();break}}}}),f=Qt({callback:l});return ze(()=>{l(),e?(f?.observe(e),h?.observe(document.body,{childList:!0,subtree:!0})):(f?.disconnect(),h?.disconnect())},[e]),r}function jo(e){const t=En(e);return hr(e,t)}const $n=[];function To(e){const t=u.useRef(e),n=Ct(r=>e?r&&r!==$n&&e&&t.current&&e.parentNode===t.current.parentNode?r:yn(e):$n,[e]);return u.useEffect(()=>{t.current=e},[e]),n}function Ao(e){const[t,n]=u.useState(null),r=u.useRef(e),o=u.useCallback(l=>{const h=en(l.target);h&&n(f=>f?(f.set(h,ln(h)),new Map(f)):null)},[]);return u.useEffect(()=>{const l=r.current;if(e!==l){h(l);const f=e.map(s=>{const a=en(s);return a?(a.addEventListener("scroll",o,{passive:!0}),[a,ln(a)]):null}).filter(s=>s!=null);n(f.length?new Map(f):null),r.current=e}return()=>{h(e),h(l)};function h(f){f.forEach(s=>{const a=en(s);a?.removeEventListener("scroll",o)})}},[o,e]),u.useMemo(()=>e.length?t?Array.from(t.values()).reduce((l,h)=>Ve(l,h),Ne):yr(e):Ne,[e,t])}function Kn(e,t){t===void 0&&(t=[]);const n=u.useRef(null);return u.useEffect(()=>{n.current=null},t),u.useEffect(()=>{const r=e!==Ne;r&&!n.current&&(n.current=e),!r&&n.current&&(n.current=null)},[e]),n.current?Lt(e,n.current):Ne}function Do(e){u.useEffect(()=>{if(!Kt)return;const t=e.map(n=>{let{sensor:r}=n;return r.setup==null?void 0:r.setup()});return()=>{for(const n of t)n?.()}},e.map(t=>{let{sensor:n}=t;return n}))}function Mo(e,t){return u.useMemo(()=>e.reduce((n,r)=>{let{eventName:o,handler:l}=r;return n[o]=h=>{l(h,t)},n},{}),[e,t])}function Er(e){return u.useMemo(()=>e?no(e):null,[e])}const Gn=[];function Io(e,t){t===void 0&&(t=St);const[n]=e,r=Er(n?ge(n):null),[o,l]=u.useState(Gn);function h(){l(()=>e.length?e.map(s=>xr(s)?r:new wn(t(s),s)):Gn)}const f=Qt({callback:h});return ze(()=>{f?.disconnect(),h(),e.forEach(s=>f?.observe(s))},[e]),o}function Nr(e){if(!e)return null;if(e.children.length>1)return e;const t=e.children[0];return wt(t)?t:e}function Po(e){let{measure:t}=e;const[n,r]=u.useState(null),o=u.useCallback(a=>{for(const{target:c}of a)if(wt(c)){r(d=>{const m=t(c);return d?{...d,width:m.width,height:m.height}:m});break}},[t]),l=Qt({callback:o}),h=u.useCallback(a=>{const c=Nr(a);l?.disconnect(),c&&l?.observe(c),r(c?t(c):null)},[t,l]),[f,s]=Pt(h);return u.useMemo(()=>({nodeRef:f,rect:n,setRef:s}),[n,f,s])}const Oo=[{sensor:Sn,options:{}},{sensor:Sr,options:{}}],Lo={current:{}},Dt={draggable:{measure:Ln},droppable:{measure:Ln,strategy:yt.WhileDragging,frequency:un.Optimized},dragOverlay:{measure:St}};class gt extends Map{get(t){var n;return t!=null&&(n=super.get(t))!=null?n:void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter(t=>{let{disabled:n}=t;return!n})}getNodeFor(t){var n,r;return(n=(r=this.get(t))==null?void 0:r.node.current)!=null?n:void 0}}const zo={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new gt,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:Ft},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:Dt,measureDroppableContainers:Ft,windowRect:null,measuringScheduled:!1},Rr={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:Ft,draggableNodes:new Map,over:null,measureDroppableContainers:Ft},Et=u.createContext(Rr),kr=u.createContext(zo);function Fo(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:new Map,translate:{x:0,y:0}},droppable:{containers:new gt}}}function _o(e,t){switch(t.type){case le.DragStart:return{...e,draggable:{...e.draggable,initialCoordinates:t.initialCoordinates,active:t.active}};case le.DragMove:return e.draggable.active==null?e:{...e,draggable:{...e.draggable,translate:{x:t.coordinates.x-e.draggable.initialCoordinates.x,y:t.coordinates.y-e.draggable.initialCoordinates.y}}};case le.DragEnd:case le.DragCancel:return{...e,draggable:{...e.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case le.RegisterDroppable:{const{element:n}=t,{id:r}=n,o=new gt(e.droppable.containers);return o.set(r,n),{...e,droppable:{...e.droppable,containers:o}}}case le.SetDroppableDisabled:{const{id:n,key:r,disabled:o}=t,l=e.droppable.containers.get(n);if(!l||r!==l.key)return e;const h=new gt(e.droppable.containers);return h.set(n,{...l,disabled:o}),{...e,droppable:{...e.droppable,containers:h}}}case le.UnregisterDroppable:{const{id:n,key:r}=t,o=e.droppable.containers.get(n);if(!o||r!==o.key)return e;const l=new gt(e.droppable.containers);return l.delete(n),{...e,droppable:{...e.droppable,containers:l}}}default:return e}}function Bo(e){let{disabled:t}=e;const{active:n,activatorEvent:r,draggableNodes:o}=u.useContext(Et),l=Ot(r),h=Ot(n?.id);return u.useEffect(()=>{if(!t&&!r&&l&&h!=null){if(!bn(l)||document.activeElement===l.target)return;const f=o.get(h);if(!f)return;const{activatorNode:s,node:a}=f;if(!s.current&&!a.current)return;requestAnimationFrame(()=>{for(const c of[s.current,a.current]){if(!c)continue;const d=Ps(c);if(d){d.focus();break}}})}},[r,t,o,h,l]),null}function jr(e,t){let{transform:n,...r}=t;return e!=null&&e.length?e.reduce((o,l)=>l({transform:o,...r}),n):n}function Uo(e){return u.useMemo(()=>({draggable:{...Dt.draggable,...e?.draggable},droppable:{...Dt.droppable,...e?.droppable},dragOverlay:{...Dt.dragOverlay,...e?.dragOverlay}}),[e?.draggable,e?.droppable,e?.dragOverlay])}function $o(e){let{activeNode:t,measure:n,initialRect:r,config:o=!0}=e;const l=u.useRef(!1),{x:h,y:f}=typeof o=="boolean"?{x:o,y:o}:o;ze(()=>{if(!h&&!f||!t){l.current=!1;return}if(l.current||!r)return;const a=t?.node.current;if(!a||a.isConnected===!1)return;const c=n(a),d=hr(c,r);if(h||(d.x=0),f||(d.y=0),l.current=!0,Math.abs(d.x)>0||Math.abs(d.y)>0){const m=gr(a);m&&m.scrollBy({top:d.y,left:d.x})}},[t,h,f,r,n])}const Yt=u.createContext({...Ne,scaleX:1,scaleY:1});var Ge;(function(e){e[e.Uninitialized=0]="Uninitialized",e[e.Initializing=1]="Initializing",e[e.Initialized=2]="Initialized"})(Ge||(Ge={}));const Ko=u.memo(function(t){var n,r,o,l;let{id:h,accessibility:f,autoScroll:s=!0,children:a,sensors:c=Oo,collisionDetection:d=Xs,measuring:m,modifiers:p,...g}=t;const v=u.useReducer(_o,void 0,Fo),[x,S]=v,[b,w]=Bs(),[N,R]=u.useState(Ge.Uninitialized),D=N===Ge.Initialized,{draggable:{active:T,nodes:C,translate:A},droppable:{containers:E}}=x,M=T!=null?C.get(T):null,Q=u.useRef({initial:null,translated:null}),H=u.useMemo(()=>{var O;return T!=null?{id:T,data:(O=M?.data)!=null?O:Lo,rect:Q}:null},[T,M]),k=u.useRef(null),[L,Y]=u.useState(null),[U,I]=u.useState(null),z=xt(g,Object.values(g)),J=Wt("DndDescribedBy",h),re=u.useMemo(()=>E.getEnabled(),[E]),q=Uo(m),{droppableRects:he,measureDroppableContainers:j,measuringScheduled:K}=Eo(re,{dragging:D,dependencies:[A.x,A.y],config:q.droppable}),_=Co(C,T),Z=u.useMemo(()=>U?zt(U):null,[U]),G=P(),W=No(_,q.draggable.measure);$o({activeNode:T!=null?C.get(T):null,config:G.layoutShiftCompensation,initialRect:W,measure:q.draggable.measure});const se=Un(_,q.draggable.measure,W),pe=Un(_?_.parentElement:null),we=u.useRef({activatorEvent:null,active:null,activeNode:_,collisionRect:null,collisions:null,droppableRects:he,draggableNodes:C,draggingNode:null,draggingNodeRect:null,droppableContainers:E,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null}),Me=E.getNodeFor((n=we.current.over)==null?void 0:n.id),Ce=Po({measure:q.dragOverlay.measure}),Fe=(r=Ce.nodeRef.current)!=null?r:_,Se=D?(o=Ce.rect)!=null?o:se:null,Nt=!!(Ce.nodeRef.current&&Ce.rect),Qe=jo(Nt?null:se),tt=Er(Fe?ge(Fe):null),ve=To(D?Me??_:null),_e=Io(ve),Ye=jr(p,{transform:{x:A.x-Qe.x,y:A.y-Qe.y,scaleX:1,scaleY:1},activatorEvent:U,active:H,activeNodeRect:se,containerNodeRect:pe,draggingNodeRect:Se,over:we.current.over,overlayNodeRect:Ce.rect,scrollableAncestors:ve,scrollableAncestorRects:_e,windowRect:tt}),nt=Z?Ve(Z,A):null,rt=Ao(ve),Ie=Kn(rt),Rt=Kn(rt,[se]),Re=Ve(Ye,Ie),Pe=Se?Zs(Se,Ye):null,Be=H&&Pe?d({active:H,collisionRect:Pe,droppableRects:he,droppableContainers:re,pointerCoordinates:nt}):null,st=Hs(Be,"id"),[ke,kt]=u.useState(null),ot=Nt?Ye:Ve(Ye,Rt),Ue=Vs(ot,(l=ke?.rect)!=null?l:null,se),it=u.useRef(null),jt=u.useCallback((O,F)=>{let{sensor:ee,options:me}=F;if(k.current==null)return;const X=C.get(k.current);if(!X)return;const oe=O.nativeEvent,fe=new ee({active:k.current,activeNode:X,event:oe,options:me,context:we,onAbort(ae){if(!C.get(ae))return;const{onDragAbort:xe}=z.current,ce={id:ae};xe?.(ce),b({type:"onDragAbort",event:ce})},onPending(ae,je,xe,ce){if(!C.get(ae))return;const{onDragPending:$e}=z.current,Ke={id:ae,constraint:je,initialCoordinates:xe,offset:ce};$e?.(Ke),b({type:"onDragPending",event:Ke})},onStart(ae){const je=k.current;if(je==null)return;const xe=C.get(je);if(!xe)return;const{onDragStart:ce}=z.current,be={activatorEvent:oe,active:{id:je,data:xe.data,rect:Q}};ut.unstable_batchedUpdates(()=>{ce?.(be),R(Ge.Initializing),S({type:le.DragStart,initialCoordinates:ae,active:je}),b({type:"onDragStart",event:be}),Y(it.current),I(oe)})},onMove(ae){S({type:le.DragMove,coordinates:ae})},onEnd:Oe(le.DragEnd),onCancel:Oe(le.DragCancel)});it.current=fe;function Oe(ae){return async function(){const{active:xe,collisions:ce,over:be,scrollAdjustedTranslate:$e}=we.current;let Ke=null;if(xe&&$e){const{cancelDrop:at}=z.current;Ke={activatorEvent:oe,active:xe,collisions:ce,delta:$e,over:be},ae===le.DragEnd&&typeof at=="function"&&await Promise.resolve(at(Ke))&&(ae=le.DragCancel)}k.current=null,ut.unstable_batchedUpdates(()=>{S({type:ae}),R(Ge.Uninitialized),kt(null),Y(null),I(null),it.current=null;const at=ae===le.DragEnd?"onDragEnd":"onDragCancel";if(Ke){const Xt=z.current[at];Xt?.(Ke),b({type:at,event:Ke})}})}}},[C]),Ht=u.useCallback((O,F)=>(ee,me)=>{const X=ee.nativeEvent,oe=C.get(me);if(k.current!==null||!oe||X.dndKit||X.defaultPrevented)return;const fe={active:oe};O(ee,F.options,fe)===!0&&(X.dndKit={capturedBy:F.sensor},k.current=me,jt(ee,F))},[C,jt]),Tt=So(c,Ht);Do(c),ze(()=>{se&&N===Ge.Initializing&&R(Ge.Initialized)},[se,N]),u.useEffect(()=>{const{onDragMove:O}=z.current,{active:F,activatorEvent:ee,collisions:me,over:X}=we.current;if(!F||!ee)return;const oe={active:F,activatorEvent:ee,collisions:me,delta:{x:Re.x,y:Re.y},over:X};ut.unstable_batchedUpdates(()=>{O?.(oe),b({type:"onDragMove",event:oe})})},[Re.x,Re.y]),u.useEffect(()=>{const{active:O,activatorEvent:F,collisions:ee,droppableContainers:me,scrollAdjustedTranslate:X}=we.current;if(!O||k.current==null||!F||!X)return;const{onDragOver:oe}=z.current,fe=me.get(st),Oe=fe&&fe.rect.current?{id:fe.id,rect:fe.rect.current,data:fe.data,disabled:fe.disabled}:null,ae={active:O,activatorEvent:F,collisions:ee,delta:{x:X.x,y:X.y},over:Oe};ut.unstable_batchedUpdates(()=>{kt(Oe),oe?.(ae),b({type:"onDragOver",event:ae})})},[st]),ze(()=>{we.current={activatorEvent:U,active:H,activeNode:_,collisionRect:Pe,collisions:Be,droppableRects:he,draggableNodes:C,draggingNode:Fe,draggingNodeRect:Se,droppableContainers:E,over:ke,scrollableAncestors:ve,scrollAdjustedTranslate:Re},Q.current={initial:Se,translated:Pe}},[H,_,Be,Pe,C,Fe,Se,he,E,ke,ve,Re]),bo({...G,delta:A,draggingRect:Pe,pointerCoordinates:nt,scrollableAncestors:ve,scrollableAncestorRects:_e});const qt=u.useMemo(()=>({active:H,activeNode:_,activeNodeRect:se,activatorEvent:U,collisions:Be,containerNodeRect:pe,dragOverlay:Ce,draggableNodes:C,droppableContainers:E,droppableRects:he,over:ke,measureDroppableContainers:j,scrollableAncestors:ve,scrollableAncestorRects:_e,measuringConfiguration:q,measuringScheduled:K,windowRect:tt}),[H,_,se,U,Be,pe,Ce,C,E,he,ke,j,ve,_e,q,K,tt]),y=u.useMemo(()=>({activatorEvent:U,activators:Tt,active:H,activeNodeRect:se,ariaDescribedById:{draggable:J},dispatch:S,draggableNodes:C,over:ke,measureDroppableContainers:j}),[U,Tt,H,se,S,J,C,ke,j]);return B.createElement(fr.Provider,{value:w},B.createElement(Et.Provider,{value:y},B.createElement(kr.Provider,{value:qt},B.createElement(Yt.Provider,{value:Ue},a)),B.createElement(Bo,{disabled:f?.restoreFocus===!1})),B.createElement(Ks,{...f,hiddenTextDescribedById:J}));function P(){const O=L?.autoScrollEnabled===!1,F=typeof s=="object"?s.enabled===!1:s===!1,ee=D&&!O&&!F;return typeof s=="object"?{...s,enabled:ee}:{enabled:ee}}}),Go=u.createContext(null),Wn="button",Wo="Draggable";function Qo(e){let{id:t,data:n,disabled:r=!1,attributes:o}=e;const l=Wt(Wo),{activators:h,activatorEvent:f,active:s,activeNodeRect:a,ariaDescribedById:c,draggableNodes:d,over:m}=u.useContext(Et),{role:p=Wn,roleDescription:g="draggable",tabIndex:v=0}=o??{},x=s?.id===t,S=u.useContext(x?Yt:Go),[b,w]=Pt(),[N,R]=Pt(),D=Mo(h,t),T=xt(n);ze(()=>(d.set(t,{id:t,key:l,node:b,activatorNode:N,data:T}),()=>{const A=d.get(t);A&&A.key===l&&d.delete(t)}),[d,t]);const C=u.useMemo(()=>({role:p,tabIndex:v,"aria-disabled":r,"aria-pressed":x&&p===Wn?!0:void 0,"aria-roledescription":g,"aria-describedby":c.draggable}),[r,p,v,x,g,c.draggable]);return{active:s,activatorEvent:f,activeNodeRect:a,attributes:C,isDragging:x,listeners:r?void 0:D,node:b,over:m,setNodeRef:w,setActivatorNodeRef:R,transform:S}}function Yo(){return u.useContext(kr)}const Ho="Droppable",qo={timeout:25};function Xo(e){let{data:t,disabled:n=!1,id:r,resizeObserverConfig:o}=e;const l=Wt(Ho),{active:h,dispatch:f,over:s,measureDroppableContainers:a}=u.useContext(Et),c=u.useRef({disabled:n}),d=u.useRef(!1),m=u.useRef(null),p=u.useRef(null),{disabled:g,updateMeasurementsFor:v,timeout:x}={...qo,...o},S=xt(v??r),b=u.useCallback(()=>{if(!d.current){d.current=!0;return}p.current!=null&&clearTimeout(p.current),p.current=setTimeout(()=>{a(Array.isArray(S.current)?S.current:[S.current]),p.current=null},x)},[x]),w=Qt({callback:b,disabled:g||!h}),N=u.useCallback((C,A)=>{w&&(A&&(w.unobserve(A),d.current=!1),C&&w.observe(C))},[w]),[R,D]=Pt(N),T=xt(t);return u.useEffect(()=>{!w||!R.current||(w.disconnect(),d.current=!1,w.observe(R.current))},[R,w]),u.useEffect(()=>(f({type:le.RegisterDroppable,element:{id:r,key:l,disabled:n,node:R,rect:m,data:T}}),()=>f({type:le.UnregisterDroppable,key:l,id:r})),[r]),u.useEffect(()=>{n!==c.current.disabled&&(f({type:le.SetDroppableDisabled,id:r,key:l,disabled:n}),c.current.disabled=n)},[r,l,n,f]),{active:h,rect:m,isOver:s?.id===r,node:R,over:s,setNodeRef:D}}function Vo(e){let{animation:t,children:n}=e;const[r,o]=u.useState(null),[l,h]=u.useState(null),f=Ot(n);return!n&&!r&&f&&o(f),ze(()=>{if(!l)return;const s=r?.key,a=r?.props.id;if(s==null||a==null){o(null);return}Promise.resolve(t(a,l)).then(()=>{o(null)})},[t,r,l]),B.createElement(B.Fragment,null,n,r?u.cloneElement(r,{ref:h}):null)}const Jo={x:0,y:0,scaleX:1,scaleY:1};function Zo(e){let{children:t}=e;return B.createElement(Et.Provider,{value:Rr},B.createElement(Yt.Provider,{value:Jo},t))}const ei={position:"fixed",touchAction:"none"},ti=e=>bn(e)?"transform 250ms ease":void 0,ni=u.forwardRef((e,t)=>{let{as:n,activatorEvent:r,adjustScale:o,children:l,className:h,rect:f,style:s,transform:a,transition:c=ti}=e;if(!f)return null;const d=o?a:{...a,scaleX:1,scaleY:1},m={...ei,width:f.width,height:f.height,top:f.top,left:f.left,transform:bt.Transform.toString(d),transformOrigin:o&&r?Qs(r,f):void 0,transition:typeof c=="function"?c(r):c,...s};return B.createElement(n,{className:h,style:m,ref:t},l)}),ri=e=>t=>{let{active:n,dragOverlay:r}=t;const o={},{styles:l,className:h}=e;if(l!=null&&l.active)for(const[f,s]of Object.entries(l.active))s!==void 0&&(o[f]=n.node.style.getPropertyValue(f),n.node.style.setProperty(f,s));if(l!=null&&l.dragOverlay)for(const[f,s]of Object.entries(l.dragOverlay))s!==void 0&&r.node.style.setProperty(f,s);return h!=null&&h.active&&n.node.classList.add(h.active),h!=null&&h.dragOverlay&&r.node.classList.add(h.dragOverlay),function(){for(const[s,a]of Object.entries(o))n.node.style.setProperty(s,a);h!=null&&h.active&&n.node.classList.remove(h.active)}},si=e=>{let{transform:{initial:t,final:n}}=e;return[{transform:bt.Transform.toString(t)},{transform:bt.Transform.toString(n)}]},oi={duration:250,easing:"ease",keyframes:si,sideEffects:ri({styles:{active:{opacity:"0"}}})};function ii(e){let{config:t,draggableNodes:n,droppableContainers:r,measuringConfiguration:o}=e;return Gt((l,h)=>{if(t===null)return;const f=n.get(l);if(!f)return;const s=f.node.current;if(!s)return;const a=Nr(h);if(!a)return;const{transform:c}=ge(h).getComputedStyle(h),d=mr(c);if(!d)return;const m=typeof t=="function"?t:ai(t);return wr(s,o.draggable.measure),m({active:{id:l,data:f.data,node:s,rect:o.draggable.measure(s)},draggableNodes:n,dragOverlay:{node:h,rect:o.dragOverlay.measure(a)},droppableContainers:r,measuringConfiguration:o,transform:d})})}function ai(e){const{duration:t,easing:n,sideEffects:r,keyframes:o}={...oi,...e};return l=>{let{active:h,dragOverlay:f,transform:s,...a}=l;if(!t)return;const c={x:f.rect.left-h.rect.left,y:f.rect.top-h.rect.top},d={scaleX:s.scaleX!==1?h.rect.width*s.scaleX/f.rect.width:1,scaleY:s.scaleY!==1?h.rect.height*s.scaleY/f.rect.height:1},m={x:s.x-c.x,y:s.y-c.y,...d},p=o({...a,active:h,dragOverlay:f,transform:{initial:s,final:m}}),[g]=p,v=p[p.length-1];if(JSON.stringify(g)===JSON.stringify(v))return;const x=r?.({active:h,dragOverlay:f,...a}),S=f.node.animate(p,{duration:t,easing:n,fill:"forwards"});return new Promise(b=>{S.onfinish=()=>{x?.(),b()}})}}let Qn=0;function li(e){return u.useMemo(()=>{if(e!=null)return Qn++,Qn},[e])}const ci=B.memo(e=>{let{adjustScale:t=!1,children:n,dropAnimation:r,style:o,transition:l,modifiers:h,wrapperElement:f="div",className:s,zIndex:a=999}=e;const{activatorEvent:c,active:d,activeNodeRect:m,containerNodeRect:p,draggableNodes:g,droppableContainers:v,dragOverlay:x,over:S,measuringConfiguration:b,scrollableAncestors:w,scrollableAncestorRects:N,windowRect:R}=Yo(),D=u.useContext(Yt),T=li(d?.id),C=jr(h,{activatorEvent:c,active:d,activeNodeRect:m,containerNodeRect:p,draggingNodeRect:x.rect,over:S,overlayNodeRect:x.rect,scrollableAncestors:w,scrollableAncestorRects:N,transform:D,windowRect:R}),A=En(m),E=ii({config:r,draggableNodes:g,droppableContainers:v,measuringConfiguration:b}),M=A?x.setRef:void 0;return B.createElement(Zo,null,B.createElement(Vo,{animation:E},d&&T?B.createElement(ni,{key:T,id:d.id,ref:M,as:f,activatorEvent:c,adjustScale:t,className:s,transition:l,rect:A,style:{zIndex:a,...o},transform:C},n):null))}),Tr=768;function ui(e){const t=window.matchMedia(`(max-width: ${Tr-1}px)`);return t.addEventListener("change",e),()=>t.removeEventListener("change",e)}function di(){return window.innerWidth<Tr}function fi(){return!1}function Ar(){return u.useSyncExternalStore(ui,di,fi)}function hi(e,t){const n=[];if(!e||e.length===0)return n;const r=e.some(l=>l.status==="ACTIVE");return e.some(l=>l.sessions?.some(h=>h.status===Rn.RUNNING||h.status===Rn.PENDING))&&n.push(t("正在运行的 Agent 将被停止")),r&&(n.push(t("分支上未合并的变更将丢失")),n.push(t("关联的工作目录(worktree)将被清理"))),n}function mi({isOpen:e,onClose:t,onConfirm:n,taskId:r,taskTitle:o,workspaces:l,isLoading:h}){const{t:f}=De(),{data:s,isLoading:a}=ds(l===void 0&&e?r:""),c=l??s,d=l===void 0&&e&&a,m=u.useMemo(()=>hi(c,f),[c,f]);return i.jsx(us,{isOpen:e,onClose:t,onConfirm:n,title:f("删除任务"),description:i.jsxs(i.Fragment,{children:[i.jsx("p",{children:f("确认删除任务「{title}」?此操作不可撤销。",{title:o})}),d?i.jsx("p",{className:"mt-2 text-xs text-muted-foreground",children:f("加载中...")}):m.length>0?i.jsx("ul",{className:"mt-2 space-y-1",children:m.map((p,g)=>i.jsxs("li",{className:"flex items-start gap-1.5 text-warning-ink",children:[i.jsx("span",{className:"mt-1 shrink-0 w-1.5 h-1.5 rounded-full bg-warning"}),i.jsx("span",{children:p})]},g))}):null]}),confirmText:f("删除"),variant:"danger",isLoading:h||d})}const gi="flex w-full min-w-0 items-center gap-2.5 rounded-md px-2 text-sm pointer-coarse:text-[15px] text-left transition-[background-color,box-shadow,color] duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",pi="h-8 pointer-coarse:h-10";function dt(e){return ie(gi,pi,e?"bg-background text-foreground shadow-xs ring-1 ring-border/80":"text-foreground/80 hover:bg-accent hover:text-foreground active:bg-foreground/[0.06]")}const dn=60,fn=60*dn,rn=24*fn,Yn=new Map;function vi(e){let t=Yn.get(e);return t||(t={monthDay:new Intl.DateTimeFormat(e,{month:"numeric",day:"numeric"}),yearMonth:new Intl.DateTimeFormat(e,{year:"numeric",month:"numeric"})},Yn.set(e,t)),t}function xi(e,t,n){const r=new Date(e);if(!Number.isFinite(r.getTime()))return"—";const o=new Date,l=Math.max(0,Math.floor((o.getTime()-r.getTime())/1e3));if(l<dn)return t("now");if(l<fn)return t("{count}m",{count:Math.floor(l/dn)});if(l<rn)return t("{count}h",{count:Math.floor(l/fn)});if(l<7*rn)return t("{count}d",{count:Math.floor(l/rn)});const h=vi(n);return(r.getFullYear()===o.getFullYear()?h.monthDay:h.yearMonth).format(r)}let bi;function yi(e,t,n){const r=e.replace(/\s+/g," ").trim();if(n(r)<=t)return r;if(n("…")>t)return"";const o=typeof Intl.Segmenter>"u"?Array.from(r):Array.from((bi??=new Intl.Segmenter(void 0,{granularity:"grapheme"})).segment(r),f=>f.segment);let l=0,h=o.length;for(;l<h;){const f=Math.ceil((l+h)/2);n(`${o.slice(0,f).join("")}…`)<=t?l=f:h=f-1}return`${o.slice(0,l).join("")}…`}const ft=new Map,Mt=new Set;let He;function Hn(){for(const e of Mt)ft.get(e)?.(document.visibilityState!=="hidden")}function wi(e,t){if(typeof IntersectionObserver>"u")return()=>{};if(!He){const n=new IntersectionObserver(r=>{if(He===n)for(const o of r){const l=ft.get(o.target);if(!l)continue;const h=o.isIntersecting&&o.intersectionRatio>0;h?Mt.add(o.target):Mt.delete(o.target),l(h&&document.visibilityState!=="hidden")}});He=n,document.addEventListener("visibilitychange",Hn)}return ft.set(e,t),He.observe(e),()=>{ft.delete(e),Mt.delete(e),He?.unobserve(e),ft.size===0&&(He?.disconnect(),He=void 0,document.removeEventListener("visibilitychange",Hn))}}const hn=4200,qn=hn*.4,Ci=1e3/30;function Si(e){try{return e?.getContext("2d")??null}catch{return null}}function Ei({hostRef:e,text:t,variant:n,animate:r}){const o=u.useRef(null);return u.useLayoutEffect(()=>{const l=e.current,h=o.current,f=Si(h);if(!l||!h||!f)return;const s=l.closest(".task-row"),a=matchMedia("(prefers-reduced-motion: reduce)"),c=matchMedia("(hover: hover)");let d=0,m,p=0,g=0,v=0,x=0,S=0,b=0,w="",N="",R="",D=!1;function T(){cancelAnimationFrame(d),clearTimeout(m),d=0,m=void 0}function C(k){if(!(!f||!l)){if(f.clearRect(0,0,v,x),f.globalCompositeOperation="source-over",n==="project"){const L=f.createLinearGradient(b*.6,0,b*2.6,0);L.addColorStop(0,w),L.addColorStop(1,N),f.fillStyle=L}else f.fillStyle=w;if(f.fillText(R,0,S),n==="running"&&k<1){const L=(-1.5+1.5*k)*v,Y=f.createLinearGradient(L,0,L+v*2.5,0),U=I=>`rgba(0, 0, 0, ${I})`;Y.addColorStop(0,U(1)),Y.addColorStop(.4,U(1)),Y.addColorStop(.5,U(.4)),Y.addColorStop(.6,U(1)),Y.addColorStop(1,U(1)),f.globalCompositeOperation="destination-in",f.fillStyle=Y,f.fillRect(0,0,v,x),f.globalCompositeOperation="source-over"}l.dataset.gradientReady="true"}}function A(k){if(D)return;const L=(k-p)%hn;k-g>=Ci&&(C(Math.min(L/qn,1)),g=k),L>=qn?(C(1),m=setTimeout(()=>{d=requestAnimationFrame(A)},hn-L)):d=requestAnimationFrame(A)}function E(){if(T(),!l||!h||!f||D||(delete l.dataset.gradientReady,v=l.clientWidth,x=l.clientHeight,!v||!x))return;const k=getComputedStyle(l),L=Math.min(window.devicePixelRatio||1,3);h.width=Math.ceil(v*L),h.height=Math.ceil(x*L),f.setTransform(L,0,0,L,0,0),f.font=`${k.fontStyle} ${k.fontWeight} ${k.fontSize} ${k.fontFamily}`,f.textBaseline="alphabetic",b=Number.parseFloat(k.fontSize);const Y=f.measureText("Mg"),U=Y.fontBoundingBoxAscent??b*.8,I=Y.fontBoundingBoxDescent??b*.2;S=(x-U-I)/2+U,w=k.color,N=k.getPropertyValue("--muted-foreground").trim()||w,R=yi(t,v,J=>f.measureText(J).width);try{C(1)}catch{return}const z=a.matches||s?.matches(":focus-visible")||c.matches&&s?.matches(":hover");n==="running"&&r&&!z&&(p=performance.now(),g=0,d=requestAnimationFrame(A))}const M=typeof ResizeObserver>"u"?void 0:new ResizeObserver(E);M?.observe(l);const Q=new MutationObserver(E);Q.observe(document.documentElement,{attributes:!0,attributeFilter:["class","style"]}),Q.observe(l,{attributes:!0,attributeFilter:["class","style"]});const H=()=>{T(),delete l.dataset.gradientReady};h.addEventListener("contextlost",H),h.addEventListener("contextrestored",E),a.addEventListener("change",E),c.addEventListener("change",E);for(const k of["pointerenter","pointerleave","focus","blur"])s?.addEventListener(k,E);return window.addEventListener("resize",E),document.fonts?.addEventListener("loadingdone",E),E(),()=>{D=!0,T(),M?.disconnect(),Q.disconnect(),a.removeEventListener("change",E),c.removeEventListener("change",E);for(const k of["pointerenter","pointerleave","focus","blur"])s?.removeEventListener(k,E);window.removeEventListener("resize",E),document.fonts?.removeEventListener("loadingdone",E),h.removeEventListener("contextlost",H),h.removeEventListener("contextrestored",E),delete l.dataset.gradientReady,h.width=0,h.height=0}},[e,t,n,r]),i.jsx("canvas",{ref:o,className:"task-gradient-text__canvas","aria-hidden":"true"})}function Xn({text:e,variant:t,animate:n=!0,className:r}){const o=u.useRef(null),[l,h]=u.useState(!1);return u.useEffect(()=>{if(o.current)return wi(o.current,h)},[]),i.jsxs("span",{ref:o,className:ie("task-gradient-text",r),"data-text-effect":t,children:[i.jsx("span",{className:"task-gradient-text__text",children:e}),l&&i.jsx(Ei,{hostRef:o,text:e,variant:t,animate:n})]})}const Dr=u.createContext(null),Ni=3e4;function Ri(e=Ni){const[,t]=u.useState(0);u.useEffect(()=>{const n=setInterval(()=>t(r=>r+1),e);return()=>clearInterval(n)},[e])}function ki(e){const t=Jr(e,9,"..");if(t===e)return e;const n=t.slice(0,-2),r=n.search(/[-_.\s][^-_.\s]*$/);return`${r>=3?n.slice(0,r):n}..`}const sn="flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-[13px] text-foreground/80 transition-colors hover:bg-accent hover:text-foreground focus-visible:bg-accent focus-visible:outline-none",Vn="px-2 pb-1 pt-1.5 text-xs font-medium text-muted-foreground",Jn=i.jsx("div",{className:"-mx-1 my-1 h-px bg-border/60"});function ji({task:e,status:t,isSelected:n,project:r,showProject:o,onSelectTask:l,onTaskStatusChange:h,onDeleteTask:f,onTaskPriorityChange:s,disableDrag:a}){const{t:c,locale:d}=De(),m=u.useContext(Dr),p=u.useRef(null),g=!!e.projectArchivedAt,v=g||!!a,{attributes:x,listeners:S,setNodeRef:b,isDragging:w}=Qo({id:e.id,data:{task:e,fromStatus:t},disabled:v}),N=u.useCallback(I=>{p.current=I,b(I),m&&(I?m.registry.set(e.id,I):m.registry.delete(e.id))},[b,m,e.id]);u.useEffect(()=>()=>{m?.registry.delete(e.id)},[e.id,m]);const[R,D]=u.useState(null),[T,C]=u.useState(!1),A=u.useRef(null),E=u.useRef(null),M=u.useCallback(I=>{g||!h&&!f&&!s||(I.preventDefault(),D({x:I.clientX,y:I.clientY}))},[g,h,f,s]),Q=u.useCallback(()=>{E.current&&(clearTimeout(E.current),E.current=null)},[]),H=u.useCallback(I=>{if(!a||g||!h&&!f)return;const z=I.touches[0];if(!z)return;const{clientX:J,clientY:re}=z;E.current=setTimeout(()=>{E.current=null,D({x:J,y:re})},500)},[a,g,h,f]);u.useEffect(()=>{if(!R)return;const I=()=>D(null),z=re=>{A.current&&!A.current.contains(re.target)&&I()},J=re=>{re.key==="Escape"&&I()};return document.addEventListener("mousedown",z),document.addEventListener("touchstart",z),document.addEventListener("keydown",J),window.addEventListener("scroll",I,!0),window.addEventListener("resize",I),()=>{document.removeEventListener("mousedown",z),document.removeEventListener("touchstart",z),document.removeEventListener("keydown",J),window.removeEventListener("scroll",I,!0),window.removeEventListener("resize",I)}},[R]),u.useLayoutEffect(()=>{const I=A.current;if(!R||!I)return;const z=8;I.style.left=`${Math.max(z,Math.min(R.x,window.innerWidth-I.offsetWidth-z))}px`,I.style.top=`${Math.max(z,Math.min(R.y,window.innerHeight-I.offsetHeight-z))}px`},[R]);const k=r?r.name:void 0,L=o?r:void 0,Y=e.updatedAt?xi(e.updatedAt,c,d):null,{titleClass:U}=pt[t];return i.jsxs(i.Fragment,{children:[i.jsxs("button",{ref:N,type:"button",onClick:()=>l(e.id),onContextMenu:M,onTouchStart:H,onTouchEnd:Q,onTouchMove:Q,title:L?`${e.title} · ${L.name}`:e.title,"aria-label":k?`${e.title} — ${k}`:e.title,"aria-current":n||void 0,"data-sidebar-item":"",className:ie("task-row animate-task-enter",dt(n),w&&"opacity-30"),...v?{}:S,...v?{}:x,children:[t===te.Running?i.jsx(Xn,{text:e.title,variant:"running",animate:!n,className:ie("min-w-0 flex-1 truncate",U)}):i.jsx("span",{className:ie("min-w-0 flex-1 truncate",U),children:e.title}),e.priority!==void 0&&e.priority!==It.NORMAL&&i.jsx(Tn,{priority:e.priority}),e.projectArchivedAt&&i.jsx("span",{className:"inline-flex shrink-0 items-center rounded-full bg-foreground/[0.06] px-1.5 py-0.5 text-xs font-medium leading-none text-muted-foreground",children:e.projectRepoDeletedAt?c("源码已删除"):c("已删除")}),(Y||L)&&i.jsx("span",{className:"task-row-meta",children:i.jsxs("span",{className:"flex items-center gap-1",children:[L&&i.jsx("span",{className:"shrink-0 whitespace-nowrap rounded bg-foreground/[0.05] px-1 py-0.5 text-[10px] font-medium leading-none @max-[22rem]:hidden",children:i.jsx(Xn,{text:ki(L.name),variant:"project",className:L.color})}),Y&&i.jsx("span",{className:"shrink-0 text-[11px] tabular-nums text-muted-foreground",children:Y})]})})]}),R&&i.jsxs("div",{ref:A,role:"menu",className:"fixed z-[100] w-48 rounded-lg border border-border bg-popover p-1 shadow-popover shadow-black/5 animate-in fade-in zoom-in-95 duration-100",children:[h&&i.jsxs(i.Fragment,{children:[i.jsx("div",{className:Vn,children:c("Move to")}),Xr.filter(I=>I!==t).map(I=>{const{icon:z,label:J,accentClass:re}=pt[I];return i.jsxs("button",{type:"button",role:"menuitem",onClick:()=>{h(e.id,I),D(null)},className:sn,children:[i.jsx(z,{className:ie("size-3.5 shrink-0",re)}),i.jsx("span",{children:c(J)})]},I)})]}),s&&i.jsxs(i.Fragment,{children:[h&&Jn,i.jsx("div",{className:Vn,children:c("Priority")}),Vr.map(I=>{const z=(e.priority??It.NORMAL)===I.value;return i.jsxs("button",{type:"button",role:"menuitemradio","aria-checked":z,onClick:()=>{s(e.id,I.value),D(null)},className:sn,children:[i.jsx(Tn,{priority:I.value}),i.jsx("span",{className:"flex-1",children:c(I.label)}),z&&i.jsx(vt,{className:"size-3.5 shrink-0 text-foreground","aria-hidden":!0})]},I.value)})]}),f&&i.jsxs(i.Fragment,{children:[(h||s)&&Jn,i.jsxs("button",{type:"button",role:"menuitem",onClick:()=>{C(!0),D(null)},className:ie(sn,"text-destructive-ink hover:bg-destructive/10 hover:text-destructive-ink focus-visible:bg-destructive/10"),children:[i.jsx(gs,{className:"size-3.5 shrink-0","aria-hidden":!0}),i.jsx("span",{children:c("Delete Task")})]})]})]}),i.jsx(mi,{isOpen:T,onClose:()=>C(!1),onConfirm:()=>{f?.(e.id),C(!1)},taskId:e.id,taskTitle:e.title})]})}const Ti=u.memo(function({title:t,tasks:n,status:r,defaultOpen:o,selectedTaskId:l,onSelectTask:h,projects:f,showProject:s=!0,isDragging:a,dragFromStatus:c,onTaskStatusChange:d,onDeleteTask:m,onTaskPriorityChange:p,disableDrag:g}){const{t:v}=De(),[x,S]=u.useState(o);Ri();const b=n.length===0,w=a&&c===r,N=a&&c!==r,{setNodeRef:R,isOver:D}=Xo({id:`group-${r}`,data:{status:r}}),T=r===te.Review,C=v(t),{icon:A,accentClass:E}=pt[r],M=u.useId(),Q=a?w:x,H=Q&&!N&&!b;return i.jsxs("div",{className:H?"mb-4":"mb-2","data-task-group-status":r,children:[i.jsx("div",{className:"sticky top-0 z-10 bg-sidebar px-2",children:i.jsxs("button",{type:"button",onClick:()=>!a&&S(k=>!k),"aria-expanded":x,"data-sidebar-item":"",className:"group/header flex h-8 w-full items-center gap-1 rounded-md px-2 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 pointer-coarse:h-10 pointer-coarse:text-[15px]",children:[i.jsx(A,{className:ie("mr-1.5 size-4 shrink-0 -translate-y-px",E)}),i.jsx("span",{id:M,className:"truncate",children:C}),i.jsx(qr,{size:14,"aria-hidden":!0,className:ie("shrink-0 text-muted-foreground transition-transform duration-150 group-hover/header:text-muted-foreground",Q&&"rotate-90")}),T&&!b?i.jsx("span",{className:"ml-auto rounded-full bg-warning/15 px-1.5 text-xs font-semibold leading-5 tabular-nums text-warning-ink",children:n.length}):i.jsx("span",{className:"ml-auto text-xs tabular-nums text-muted-foreground",children:n.length})]})}),N&&i.jsx("div",{ref:R,className:ie("mx-2 mt-0.5 flex h-9 items-center justify-center rounded-md border border-dashed text-xs font-medium transition-colors duration-150",D?"border-foreground/30 bg-foreground/[0.04] text-foreground/80":"border-border bg-foreground/[0.02] text-muted-foreground"),children:D?v("Drop into {title}",{title:C}):v("Drop here")}),H&&i.jsx("div",{ref:w?void 0:R,role:"group","aria-labelledby":M,className:"mt-0.5 flex flex-col gap-px px-2",children:n.map(k=>{const L=l===k.id,Y=k.projectId?f.find(U=>U.id===k.projectId):void 0;return i.jsx(ji,{task:k,status:r,isSelected:L,project:Y,showProject:s,onSelectTask:h,onTaskStatusChange:k.projectArchivedAt?void 0:d,onDeleteTask:k.projectArchivedAt?void 0:m,onTaskPriorityChange:k.projectArchivedAt?void 0:p,disableDrag:g},k.id)})})]})}),Ai=12,Di=50;function Mi({isOpen:e,onClose:t,tasks:n,projects:r,onSelectTask:o}){const{t:l}=De(),[h,f]=u.useState(""),[s,a]=u.useState(0),c=u.useRef(null);u.useEffect(()=>{e&&(f(""),a(0))},[e]);const d=u.useMemo(()=>{const g=h.trim().toLowerCase();return g?n.filter(v=>v.title.toLowerCase().includes(g)).slice(0,Di):n.slice(0,Ai)},[n,h]);u.useEffect(()=>{a(0)},[h]),u.useEffect(()=>{c.current?.children[s]?.scrollIntoView({block:"nearest"})},[s]);const m=u.useCallback(g=>{o(g),t()},[o,t]),p=u.useCallback(g=>{if(g.key==="Escape")g.preventDefault(),t();else if(g.key==="ArrowDown")g.preventDefault(),a(v=>Math.min(v+1,d.length-1));else if(g.key==="ArrowUp")g.preventDefault(),a(v=>Math.max(v-1,0));else if(g.key==="Enter"&&!g.nativeEvent.isComposing){g.preventDefault();const v=d[s];v&&m(v.id)}},[t,d,s,m]);return e?i.jsxs("div",{className:"fixed inset-0 z-90",role:"dialog","aria-modal":"true",children:[i.jsx("div",{className:"absolute inset-0 bg-black/20",onClick:t}),i.jsxs("div",{className:"absolute left-1/2 top-[18vh] w-[min(560px,calc(100vw-2rem))] -translate-x-1/2 bg-popover rounded-xl border border-border shadow-popover overflow-hidden animate-in fade-in zoom-in-95 duration-100",children:[i.jsxs("div",{className:"flex items-center gap-2.5 px-4 border-b border-border/60",children:[i.jsx(cr,{size:15,className:"text-muted-foreground/70 shrink-0"}),i.jsx("input",{value:h,onChange:g=>f(g.target.value),onKeyDown:p,placeholder:l("Search tasks..."),"aria-label":l("Search tasks..."),autoFocus:!0,className:"flex-1 py-3 bg-transparent border-none focus:outline-none text-sm text-foreground placeholder-muted-foreground/60"})]}),d.length>0?i.jsxs(i.Fragment,{children:[!h.trim()&&i.jsx("div",{className:"px-4 pt-2.5 pb-1 text-xs font-medium text-muted-foreground",children:l("Recent tasks")}),i.jsx("div",{ref:c,className:"max-h-[46vh] overflow-y-auto scrollbar-app-thin pb-1.5 pt-0.5",children:d.map((g,v)=>{const x=r.find(w=>w.id===g.projectId),{icon:S,iconClass:b}=pt[g.status];return i.jsxs("button",{onClick:()=>m(g.id),onMouseEnter:()=>a(v),className:`w-full flex items-center gap-2.5 px-4 py-2 text-left transition-colors
|
|
7
|
+
${v===s?"bg-accent":""}`,children:[i.jsx(S,{className:`${b} size-4 shrink-0`}),i.jsx("span",{className:"flex-1 min-w-0 truncate text-sm text-foreground/90",title:g.title,children:g.title}),x&&i.jsx("span",{className:"shrink-0 max-w-[120px] truncate text-xs text-muted-foreground",children:x.name})]},g.id)})})]}):i.jsx("div",{className:"px-4 py-8 text-center text-sm text-muted-foreground",children:l("No matching tasks")})]})]}):null}const Ii=260,Pi=220;function Oi(e){const t={[te.Review]:[],[te.Running]:[],[te.Pending]:[],[te.Done]:[],[te.Cancelled]:[]};for(const n of e)t[n.status].push(n);return t[te.Review].sort((n,r)=>(r.priority??It.NORMAL)-(n.priority??It.NORMAL)),t}const Li=[{status:te.Review,title:"Review",defaultOpen:!0},{status:te.Running,title:"Running",defaultOpen:!0},{status:te.Pending,title:"Pending",defaultOpen:!1},{status:te.Done,title:"Done",defaultOpen:!1},{status:te.Cancelled,title:"Cancelled",defaultOpen:!1}];function zi(){return i.jsx("div",{className:"flex-1 overflow-hidden px-2 pt-3 motion-safe:animate-pulse","aria-hidden":!0,children:[3,4].map((e,t)=>i.jsxs("div",{className:"mb-4",children:[i.jsxs("div",{className:"flex h-8 items-center gap-2.5 px-2 pointer-coarse:h-10",children:[i.jsx("div",{className:"size-4 shrink-0 rounded-full bg-foreground/[0.06]"}),i.jsx("div",{className:"h-3 w-14 rounded-full bg-foreground/[0.06]"})]}),Array.from({length:e}).map((n,r)=>i.jsxs("div",{className:"flex h-8 items-center gap-2.5 px-2 pointer-coarse:h-10",children:[i.jsx("div",{className:"h-3 rounded-full bg-foreground/[0.06]",style:{width:`${64-(r+t)%3*14}%`}}),i.jsx("div",{className:"ml-auto h-2.5 w-8 shrink-0 rounded-full bg-foreground/[0.05]"})]},r))]},t))})}function Zn({tasks:e=[],projects:t=[],selectedTaskId:n,onSelectTask:r,filterProjectId:o,setFilterProjectId:l,width:h=320,onCreateTask:f,onCreateProject:s,isCreateActive:a,onTaskStatusChange:c,onDeleteTask:d,onTaskPriorityChange:m,isLoading:p=!1}){const{t:g}=De(),{preserveDesktopSearch:v}=ar(),x=Ar(),[S,b]=u.useState(null),[w,N]=u.useState(null),[R,D]=u.useState(!1),T=u.useRef(new Map),C=u.useRef(new Set),A=u.useRef(new Map),E=u.useMemo(()=>({registry:T.current}),[]),M=u.useCallback(j=>{j.remove(),C.current.delete(j)},[]),Q=o?e.filter(j=>j.projectId===o):e,H=u.useCallback((j,K)=>{const _=document.querySelector(`[data-task-group-status="${j}"]`);if(!_)return null;const G=(_.querySelector("button")??_).getBoundingClientRect();return G.width===0||G.height===0?null:new DOMRect(G.left,G.bottom+2,K.width,K.height)},[]),k=u.useCallback((j,K,_,Z=!1)=>{const G=document.createElement("div");G.setAttribute("aria-hidden","true"),G.innerHTML=_,G.querySelectorAll("[data-gradient-ready]").forEach(Me=>Me.removeAttribute("data-gradient-ready")),G.querySelectorAll(".task-gradient-text__canvas").forEach(Me=>Me.remove());const W=G.firstElementChild;W&&(W.style.cssText="",W.className=W.className.replace(/\bopacity-\S*/g,"").replace(/\banimate-task-enter\b/g,""),W.style.pointerEvents="none",W.style.width=`${j.width}px`,W.style.height=`${j.height}px`,W.style.margin="0",W.style.backgroundColor="var(--background)",W.style.borderRadius="0.5rem",W.style.boxShadow="var(--shadow-popover), 0 0 0 1px var(--border)",W.style.opacity="0.96",W.style.transition="none",W.setAttribute("tabindex","-1")),Object.assign(G.style,{position:"fixed",left:`${j.left}px`,top:`${j.top}px`,width:`${j.width}px`,height:`${j.height}px`,zIndex:"9999",pointerEvents:"none",overflow:"visible",transformOrigin:"top left",willChange:"transform, opacity"}),document.body.appendChild(G),C.current.add(G);const se=K.left-j.left,pe=K.top-j.top;G.animate([{transform:"translate(0, 0)",opacity:.96,offset:0},{transform:`translate(${se}px, ${pe}px)`,opacity:Z?.12:.96,offset:1}],{duration:Z?Pi:Ii,easing:"cubic-bezier(0.2, 0, 0, 1)",fill:"forwards"}).finished.then(()=>M(G),()=>M(G))},[M]);u.useLayoutEffect(()=>{const j=window.matchMedia("(prefers-reduced-motion: reduce)").matches,K=new Map;for(const _ of Q){const Z=T.current.get(_.id);if(!Z)continue;const G={status:_.status,rect:Z.getBoundingClientRect(),html:Z.outerHTML};if(K.set(_.id,G),j)continue;const W=A.current.get(_.id);if(!W||W.status===_.status)continue;const se=G.rect.left-W.rect.left,pe=G.rect.top-W.rect.top;Math.abs(se)<1&&Math.abs(pe)<1||k(W.rect,G.rect,W.html)}if(!j)for(const[_,Z]of A.current){if(K.has(_))continue;const G=Q.find(se=>se.id===_);if(!G||G.status===Z.status)continue;const W=H(G.status,Z.rect);W&&k(Z.rect,W,Z.html,!0)}A.current=K},[Q,k,H]),u.useEffect(()=>()=>{for(const j of C.current)j.remove();C.current.clear()},[]);const L=Ws(Gs(Sn,{activationConstraint:{distance:8}})),Y=u.useCallback(j=>{const K=j.active.data.current?.task,_=j.active.data.current?.fromStatus;K&&b(K),_&&N(_)},[]),U=u.useCallback(j=>{b(null),N(null);const{active:K,over:_}=j;if(!_)return;const Z=K.data.current?.task,G=K.data.current?.fromStatus,W=_.data.current?.status;!Z||!G||!W||Z.projectArchivedAt||G!==W&&c?.(Z.id,W)},[c]),J=!!!(o?t.find(j=>j.id===o)??null:null)?.archivedAt,re=Oi(Q),q=S?pt[S.status]:null,he=u.useCallback(j=>{if(j.key!=="ArrowDown"&&j.key!=="ArrowUp"||j.altKey||j.ctrlKey||j.metaKey||j.shiftKey)return;const K=Array.from(j.currentTarget.querySelectorAll("[data-sidebar-item]:not(:disabled)")),_=K.indexOf(j.target);_!==-1&&(j.preventDefault(),K[_+(j.key==="ArrowDown"?1:-1)]?.focus())},[]);return i.jsxs("div",{className:"@container h-full flex flex-col flex-shrink-0",style:{width:h},onKeyDown:he,children:[i.jsxs("div",{className:"px-2 pt-2 pb-1 flex flex-col gap-px flex-shrink-0",children:[s&&i.jsxs("button",{type:"button",onClick:s,"data-sidebar-item":"",className:dt(!1),children:[i.jsx(vs,{size:16,className:"shrink-0 text-muted-foreground"}),i.jsx("span",{className:"truncate",children:g("New Project")})]}),i.jsxs("button",{type:"button",onClick:f,disabled:!J,"aria-current":a||void 0,"data-sidebar-item":"",className:ie(dt(!!a),"disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:bg-transparent"),title:J?void 0:g("Deleted projects are read-only"),children:[i.jsx(Ss,{size:16,className:"shrink-0 text-muted-foreground"}),i.jsx("span",{className:"truncate",children:g("New Task")})]}),i.jsxs("button",{type:"button",onClick:()=>D(!0),"data-sidebar-item":"",className:dt(!1),children:[i.jsx(cr,{size:16,className:"shrink-0 text-muted-foreground"}),i.jsx("span",{className:"truncate",children:g("Search")})]}),i.jsxs(Zr,{to:v("/conversations"),"data-sidebar-item":"",className:dt(!1),children:[i.jsx(Es,{size:16,className:"shrink-0 text-muted-foreground"}),i.jsx("span",{className:"truncate",children:g("对话")})]})]}),p?i.jsx(zi,{}):Q.length===0?i.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center px-6 pb-[10vh] text-center select-none",children:[i.jsx(an,{size:36,"aria-hidden":"true",className:"text-muted-foreground/50 mb-3",strokeWidth:1.5}),i.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:g("No tasks")}),J&&f?i.jsx("button",{type:"button",onClick:f,className:"px-3.5 py-1.5 rounded-md bg-brand text-brand-foreground text-xs font-medium hover:bg-brand/90 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-offset-2",children:g("New Task")}):null]}):i.jsx(Dr.Provider,{value:E,children:i.jsxs(Ko,{sensors:L,onDragStart:Y,onDragEnd:U,children:[i.jsx("div",{className:"flex-1 overflow-y-auto scrollbar-app-thin scroll-pt-8 pointer-coarse:scroll-pt-10 relative",children:i.jsx("div",{className:"pt-3 pb-4",children:Li.map(({status:j,title:K,defaultOpen:_})=>i.jsx(Ti,{title:K,tasks:re[j],status:j,defaultOpen:_,selectedTaskId:n,onSelectTask:r,projects:t,showProject:!o,isDragging:S!==null,dragFromStatus:w,onTaskStatusChange:c,onDeleteTask:d,onTaskPriorityChange:m,disableDrag:x},j))})}),i.jsx(ci,{dropAnimation:null,children:S&&q?i.jsxs("div",{className:"flex h-8 w-fit max-w-[280px] items-center gap-2.5 rounded-md bg-background px-2 text-sm text-foreground shadow-overlay ring-1 ring-border/80",children:[i.jsx(q.icon,{className:ie("size-4 shrink-0",q.iconClass)}),i.jsx("span",{className:"truncate",title:S.title,children:S.title})]}):null})]})}),!p&&i.jsxs("div",{className:"h-9 px-4 flex flex-shrink-0 items-center justify-between border-t border-border/60 text-xs text-muted-foreground",children:[i.jsx("span",{className:"tabular-nums",children:g("{count} tasks",{count:Q.length})}),o?i.jsx("button",{type:"button",onClick:()=>l(null),className:"rounded-sm hover:text-foreground underline decoration-border underline-offset-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",children:g("Clear filter")}):null]}),i.jsx(Mi,{isOpen:R,onClose:()=>D(!1),tasks:Q,projects:t,onSelectTask:r})]})}function Nn(e){switch(e){case Te.TODO:return te.Pending;case Te.IN_PROGRESS:return te.Running;case Te.IN_REVIEW:return te.Review;case Te.DONE:return te.Done;case Te.CANCELLED:return te.Cancelled}}function Fi(e){switch(e){case te.Pending:return Te.TODO;case te.Running:return Te.IN_PROGRESS;case te.Review:return Te.IN_REVIEW;case te.Done:return Te.DONE;case te.Cancelled:return Te.CANCELLED}}function _i(e){switch(e){case Ee.CLAUDE_CODE:return"Claude Code";case Ee.GEMINI_CLI:return"Gemini CLI";case Ee.CURSOR_AGENT:return"Cursor Agent";case Ee.CODEX:return"Codex";case Ee.QWEN_CODE:return"Qwen Code";case Ee.KIRO_CLI:return"Kiro CLI";case Ee.OPENCODE:return"OpenCode";case Ee.PI_CODING_AGENT:return"Pi Coding Agent";case Ee.GROK_BUILD:return"Grok Build";case Ee.MINION_CODE:return"Minion Code";case Ee.DEEPSEEK_HERMES:return"DeepSeek Harness"}}const Bt=["text-indigo-600","text-emerald-600","text-rose-600","text-amber-600","text-cyan-600","text-violet-600","text-teal-600","text-pink-600"];function Mr(e,t){let n=0;for(let r=0;r<e.length;r++)n=(n<<5)-n+e.charCodeAt(r)|0;return Math.abs(n)%t}function Bi(e){return{id:e.id,name:e.name,color:e.color||Bt[Mr(e.name,Bt.length)],isGitRepo:e.isGitRepo,worktreeReady:e.worktreeReady,reason:e.reason,archivedAt:e.archivedAt??null,repoDeletedAt:e.repoDeletedAt??null}}function Ui(e,t){const n=e.preferredWorkspace?e.preferredWorkspace.workspaceKind===Je.MAIN_DIRECTORY?"Project directory":e.preferredWorkspace.branchName:"—";return{id:e.id,projectId:e.projectId,title:e.title,status:Nn(e.status),priority:e.priority,agent:e.latestAgentType?_i(e.latestAgentType):"—",branch:n,description:"",updatedAt:new Date(e.updatedAt).toISOString(),isGitRepo:t?.isGitRepo,worktreeReady:t?.worktreeReady,reason:t?.reason,projectArchivedAt:t?.archivedAt??null,projectRepoDeletedAt:t?.repoDeletedAt??null}}function $i(e,t){const n=e.preferredWorkspace?e.preferredWorkspace.workspaceKind===Je.MAIN_DIRECTORY?"Project directory":e.preferredWorkspace.branchName:"—";return{id:e.id,projectId:t.id,projectName:t.name,projectColor:t.color||Bt[Mr(t.name,Bt.length)],title:e.title,status:Nn(e.status),priority:e.priority,branch:n,mainBranch:t.mainBranch??"main",description:"",isGitRepo:t.isGitRepo,worktreeReady:t.worktreeReady,reason:t.reason,projectArchivedAt:t.archivedAt??null,projectRepoDeletedAt:t.repoDeletedAt??null}}var Ki=Object.defineProperty,Ut=Object.getOwnPropertySymbols,Ir=Object.prototype.hasOwnProperty,Pr=Object.prototype.propertyIsEnumerable,er=(e,t,n)=>t in e?Ki(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,mn=(e,t)=>{for(var n in t||(t={}))Ir.call(t,n)&&er(e,n,t[n]);if(Ut)for(var n of Ut(t))Pr.call(t,n)&&er(e,n,t[n]);return e},gn=(e,t)=>{var n={};for(var r in e)Ir.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Ut)for(var r of Ut(e))t.indexOf(r)<0&&Pr.call(e,r)&&(n[r]=e[r]);return n};var qe;(e=>{const t=class ${constructor(s,a,c,d){if(this.version=s,this.errorCorrectionLevel=a,this.modules=[],this.isFunction=[],s<$.MIN_VERSION||s>$.MAX_VERSION)throw new RangeError("Version value out of range");if(d<-1||d>7)throw new RangeError("Mask value out of range");this.size=s*4+17;let m=[];for(let g=0;g<this.size;g++)m.push(!1);for(let g=0;g<this.size;g++)this.modules.push(m.slice()),this.isFunction.push(m.slice());this.drawFunctionPatterns();const p=this.addEccAndInterleave(c);if(this.drawCodewords(p),d==-1){let g=1e9;for(let v=0;v<8;v++){this.applyMask(v),this.drawFormatBits(v);const x=this.getPenaltyScore();x<g&&(d=v,g=x),this.applyMask(v)}}o(0<=d&&d<=7),this.mask=d,this.applyMask(d),this.drawFormatBits(d),this.isFunction=[]}static encodeText(s,a){const c=e.QrSegment.makeSegments(s);return $.encodeSegments(c,a)}static encodeBinary(s,a){const c=e.QrSegment.makeBytes(s);return $.encodeSegments([c],a)}static encodeSegments(s,a,c=1,d=40,m=-1,p=!0){if(!($.MIN_VERSION<=c&&c<=d&&d<=$.MAX_VERSION)||m<-1||m>7)throw new RangeError("Invalid value");let g,v;for(g=c;;g++){const w=$.getNumDataCodewords(g,a)*8,N=h.getTotalBits(s,g);if(N<=w){v=N;break}if(g>=d)throw new RangeError("Data too long")}for(const w of[$.Ecc.MEDIUM,$.Ecc.QUARTILE,$.Ecc.HIGH])p&&v<=$.getNumDataCodewords(g,w)*8&&(a=w);let x=[];for(const w of s){n(w.mode.modeBits,4,x),n(w.numChars,w.mode.numCharCountBits(g),x);for(const N of w.getData())x.push(N)}o(x.length==v);const S=$.getNumDataCodewords(g,a)*8;o(x.length<=S),n(0,Math.min(4,S-x.length),x),n(0,(8-x.length%8)%8,x),o(x.length%8==0);for(let w=236;x.length<S;w^=253)n(w,8,x);let b=[];for(;b.length*8<x.length;)b.push(0);return x.forEach((w,N)=>b[N>>>3]|=w<<7-(N&7)),new $(g,a,b,m)}getModule(s,a){return 0<=s&&s<this.size&&0<=a&&a<this.size&&this.modules[a][s]}getModules(){return this.modules}drawFunctionPatterns(){for(let c=0;c<this.size;c++)this.setFunctionModule(6,c,c%2==0),this.setFunctionModule(c,6,c%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);const s=this.getAlignmentPatternPositions(),a=s.length;for(let c=0;c<a;c++)for(let d=0;d<a;d++)c==0&&d==0||c==0&&d==a-1||c==a-1&&d==0||this.drawAlignmentPattern(s[c],s[d]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(s){const a=this.errorCorrectionLevel.formatBits<<3|s;let c=a;for(let m=0;m<10;m++)c=c<<1^(c>>>9)*1335;const d=(a<<10|c)^21522;o(d>>>15==0);for(let m=0;m<=5;m++)this.setFunctionModule(8,m,r(d,m));this.setFunctionModule(8,7,r(d,6)),this.setFunctionModule(8,8,r(d,7)),this.setFunctionModule(7,8,r(d,8));for(let m=9;m<15;m++)this.setFunctionModule(14-m,8,r(d,m));for(let m=0;m<8;m++)this.setFunctionModule(this.size-1-m,8,r(d,m));for(let m=8;m<15;m++)this.setFunctionModule(8,this.size-15+m,r(d,m));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let s=this.version;for(let c=0;c<12;c++)s=s<<1^(s>>>11)*7973;const a=this.version<<12|s;o(a>>>18==0);for(let c=0;c<18;c++){const d=r(a,c),m=this.size-11+c%3,p=Math.floor(c/3);this.setFunctionModule(m,p,d),this.setFunctionModule(p,m,d)}}drawFinderPattern(s,a){for(let c=-4;c<=4;c++)for(let d=-4;d<=4;d++){const m=Math.max(Math.abs(d),Math.abs(c)),p=s+d,g=a+c;0<=p&&p<this.size&&0<=g&&g<this.size&&this.setFunctionModule(p,g,m!=2&&m!=4)}}drawAlignmentPattern(s,a){for(let c=-2;c<=2;c++)for(let d=-2;d<=2;d++)this.setFunctionModule(s+d,a+c,Math.max(Math.abs(d),Math.abs(c))!=1)}setFunctionModule(s,a,c){this.modules[a][s]=c,this.isFunction[a][s]=!0}addEccAndInterleave(s){const a=this.version,c=this.errorCorrectionLevel;if(s.length!=$.getNumDataCodewords(a,c))throw new RangeError("Invalid argument");const d=$.NUM_ERROR_CORRECTION_BLOCKS[c.ordinal][a],m=$.ECC_CODEWORDS_PER_BLOCK[c.ordinal][a],p=Math.floor($.getNumRawDataModules(a)/8),g=d-p%d,v=Math.floor(p/d);let x=[];const S=$.reedSolomonComputeDivisor(m);for(let w=0,N=0;w<d;w++){let R=s.slice(N,N+v-m+(w<g?0:1));N+=R.length;const D=$.reedSolomonComputeRemainder(R,S);w<g&&R.push(0),x.push(R.concat(D))}let b=[];for(let w=0;w<x[0].length;w++)x.forEach((N,R)=>{(w!=v-m||R>=g)&&b.push(N[w])});return o(b.length==p),b}drawCodewords(s){if(s.length!=Math.floor($.getNumRawDataModules(this.version)/8))throw new RangeError("Invalid argument");let a=0;for(let c=this.size-1;c>=1;c-=2){c==6&&(c=5);for(let d=0;d<this.size;d++)for(let m=0;m<2;m++){const p=c-m,v=(c+1&2)==0?this.size-1-d:d;!this.isFunction[v][p]&&a<s.length*8&&(this.modules[v][p]=r(s[a>>>3],7-(a&7)),a++)}}o(a==s.length*8)}applyMask(s){if(s<0||s>7)throw new RangeError("Mask value out of range");for(let a=0;a<this.size;a++)for(let c=0;c<this.size;c++){let d;switch(s){case 0:d=(c+a)%2==0;break;case 1:d=a%2==0;break;case 2:d=c%3==0;break;case 3:d=(c+a)%3==0;break;case 4:d=(Math.floor(c/3)+Math.floor(a/2))%2==0;break;case 5:d=c*a%2+c*a%3==0;break;case 6:d=(c*a%2+c*a%3)%2==0;break;case 7:d=((c+a)%2+c*a%3)%2==0;break;default:throw new Error("Unreachable")}!this.isFunction[a][c]&&d&&(this.modules[a][c]=!this.modules[a][c])}}getPenaltyScore(){let s=0;for(let m=0;m<this.size;m++){let p=!1,g=0,v=[0,0,0,0,0,0,0];for(let x=0;x<this.size;x++)this.modules[m][x]==p?(g++,g==5?s+=$.PENALTY_N1:g>5&&s++):(this.finderPenaltyAddHistory(g,v),p||(s+=this.finderPenaltyCountPatterns(v)*$.PENALTY_N3),p=this.modules[m][x],g=1);s+=this.finderPenaltyTerminateAndCount(p,g,v)*$.PENALTY_N3}for(let m=0;m<this.size;m++){let p=!1,g=0,v=[0,0,0,0,0,0,0];for(let x=0;x<this.size;x++)this.modules[x][m]==p?(g++,g==5?s+=$.PENALTY_N1:g>5&&s++):(this.finderPenaltyAddHistory(g,v),p||(s+=this.finderPenaltyCountPatterns(v)*$.PENALTY_N3),p=this.modules[x][m],g=1);s+=this.finderPenaltyTerminateAndCount(p,g,v)*$.PENALTY_N3}for(let m=0;m<this.size-1;m++)for(let p=0;p<this.size-1;p++){const g=this.modules[m][p];g==this.modules[m][p+1]&&g==this.modules[m+1][p]&&g==this.modules[m+1][p+1]&&(s+=$.PENALTY_N2)}let a=0;for(const m of this.modules)a=m.reduce((p,g)=>p+(g?1:0),a);const c=this.size*this.size,d=Math.ceil(Math.abs(a*20-c*10)/c)-1;return o(0<=d&&d<=9),s+=d*$.PENALTY_N4,o(0<=s&&s<=2568888),s}getAlignmentPatternPositions(){if(this.version==1)return[];{const s=Math.floor(this.version/7)+2,a=this.version==32?26:Math.ceil((this.version*4+4)/(s*2-2))*2;let c=[6];for(let d=this.size-7;c.length<s;d-=a)c.splice(1,0,d);return c}}static getNumRawDataModules(s){if(s<$.MIN_VERSION||s>$.MAX_VERSION)throw new RangeError("Version number out of range");let a=(16*s+128)*s+64;if(s>=2){const c=Math.floor(s/7)+2;a-=(25*c-10)*c-55,s>=7&&(a-=36)}return o(208<=a&&a<=29648),a}static getNumDataCodewords(s,a){return Math.floor($.getNumRawDataModules(s)/8)-$.ECC_CODEWORDS_PER_BLOCK[a.ordinal][s]*$.NUM_ERROR_CORRECTION_BLOCKS[a.ordinal][s]}static reedSolomonComputeDivisor(s){if(s<1||s>255)throw new RangeError("Degree out of range");let a=[];for(let d=0;d<s-1;d++)a.push(0);a.push(1);let c=1;for(let d=0;d<s;d++){for(let m=0;m<a.length;m++)a[m]=$.reedSolomonMultiply(a[m],c),m+1<a.length&&(a[m]^=a[m+1]);c=$.reedSolomonMultiply(c,2)}return a}static reedSolomonComputeRemainder(s,a){let c=a.map(d=>0);for(const d of s){const m=d^c.shift();c.push(0),a.forEach((p,g)=>c[g]^=$.reedSolomonMultiply(p,m))}return c}static reedSolomonMultiply(s,a){if(s>>>8||a>>>8)throw new RangeError("Byte out of range");let c=0;for(let d=7;d>=0;d--)c=c<<1^(c>>>7)*285,c^=(a>>>d&1)*s;return o(c>>>8==0),c}finderPenaltyCountPatterns(s){const a=s[1];o(a<=this.size*3);const c=a>0&&s[2]==a&&s[3]==a*3&&s[4]==a&&s[5]==a;return(c&&s[0]>=a*4&&s[6]>=a?1:0)+(c&&s[6]>=a*4&&s[0]>=a?1:0)}finderPenaltyTerminateAndCount(s,a,c){return s&&(this.finderPenaltyAddHistory(a,c),a=0),a+=this.size,this.finderPenaltyAddHistory(a,c),this.finderPenaltyCountPatterns(c)}finderPenaltyAddHistory(s,a){a[0]==0&&(s+=this.size),a.pop(),a.unshift(s)}};t.MIN_VERSION=1,t.MAX_VERSION=40,t.PENALTY_N1=3,t.PENALTY_N2=3,t.PENALTY_N3=40,t.PENALTY_N4=10,t.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],t.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],e.QrCode=t;function n(f,s,a){if(s<0||s>31||f>>>s)throw new RangeError("Value out of range");for(let c=s-1;c>=0;c--)a.push(f>>>c&1)}function r(f,s){return(f>>>s&1)!=0}function o(f){if(!f)throw new Error("Assertion error")}const l=class ne{constructor(s,a,c){if(this.mode=s,this.numChars=a,this.bitData=c,a<0)throw new RangeError("Invalid argument");this.bitData=c.slice()}static makeBytes(s){let a=[];for(const c of s)n(c,8,a);return new ne(ne.Mode.BYTE,s.length,a)}static makeNumeric(s){if(!ne.isNumeric(s))throw new RangeError("String contains non-numeric characters");let a=[];for(let c=0;c<s.length;){const d=Math.min(s.length-c,3);n(parseInt(s.substring(c,c+d),10),d*3+1,a),c+=d}return new ne(ne.Mode.NUMERIC,s.length,a)}static makeAlphanumeric(s){if(!ne.isAlphanumeric(s))throw new RangeError("String contains unencodable characters in alphanumeric mode");let a=[],c;for(c=0;c+2<=s.length;c+=2){let d=ne.ALPHANUMERIC_CHARSET.indexOf(s.charAt(c))*45;d+=ne.ALPHANUMERIC_CHARSET.indexOf(s.charAt(c+1)),n(d,11,a)}return c<s.length&&n(ne.ALPHANUMERIC_CHARSET.indexOf(s.charAt(c)),6,a),new ne(ne.Mode.ALPHANUMERIC,s.length,a)}static makeSegments(s){return s==""?[]:ne.isNumeric(s)?[ne.makeNumeric(s)]:ne.isAlphanumeric(s)?[ne.makeAlphanumeric(s)]:[ne.makeBytes(ne.toUtf8ByteArray(s))]}static makeEci(s){let a=[];if(s<0)throw new RangeError("ECI assignment value out of range");if(s<128)n(s,8,a);else if(s<16384)n(2,2,a),n(s,14,a);else if(s<1e6)n(6,3,a),n(s,21,a);else throw new RangeError("ECI assignment value out of range");return new ne(ne.Mode.ECI,0,a)}static isNumeric(s){return ne.NUMERIC_REGEX.test(s)}static isAlphanumeric(s){return ne.ALPHANUMERIC_REGEX.test(s)}getData(){return this.bitData.slice()}static getTotalBits(s,a){let c=0;for(const d of s){const m=d.mode.numCharCountBits(a);if(d.numChars>=1<<m)return 1/0;c+=4+m+d.bitData.length}return c}static toUtf8ByteArray(s){s=encodeURI(s);let a=[];for(let c=0;c<s.length;c++)s.charAt(c)!="%"?a.push(s.charCodeAt(c)):(a.push(parseInt(s.substring(c+1,c+3),16)),c+=2);return a}};l.NUMERIC_REGEX=/^[0-9]*$/,l.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,l.ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";let h=l;e.QrSegment=l})(qe||(qe={}));(e=>{(t=>{const n=class{constructor(o,l){this.ordinal=o,this.formatBits=l}};n.LOW=new n(0,1),n.MEDIUM=new n(1,0),n.QUARTILE=new n(2,3),n.HIGH=new n(3,2),t.Ecc=n})(e.QrCode||(e.QrCode={}))})(qe||(qe={}));(e=>{(t=>{const n=class{constructor(o,l){this.modeBits=o,this.numBitsCharCount=l}numCharCountBits(o){return this.numBitsCharCount[Math.floor((o+7)/17)]}};n.NUMERIC=new n(1,[10,12,14]),n.ALPHANUMERIC=new n(2,[9,11,13]),n.BYTE=new n(4,[8,16,16]),n.KANJI=new n(8,[8,10,12]),n.ECI=new n(7,[0,0,0]),t.Mode=n})(e.QrSegment||(e.QrSegment={}))})(qe||(qe={}));var Xe=qe;var Gi={L:Xe.QrCode.Ecc.LOW,M:Xe.QrCode.Ecc.MEDIUM,Q:Xe.QrCode.Ecc.QUARTILE,H:Xe.QrCode.Ecc.HIGH},Or=128,Lr="L",zr="#FFFFFF",Fr="#000000",_r=!1,Br=1,Wi=4,Qi=0,Yi=.1;function Ur(e,t=0){const n=[];return e.forEach(function(r,o){let l=null;r.forEach(function(h,f){if(!h&&l!==null){n.push(`M${l+t} ${o+t}h${f-l}v1H${l+t}z`),l=null;return}if(f===r.length-1){if(!h)return;l===null?n.push(`M${f+t},${o+t} h1v1H${f+t}z`):n.push(`M${l+t},${o+t} h${f+1-l}v1H${l+t}z`);return}h&&l===null&&(l=f)})}),n.join("")}function $r(e,t){return e.slice().map((n,r)=>r<t.y||r>=t.y+t.h?n:n.map((o,l)=>l<t.x||l>=t.x+t.w?o:!1))}function Hi(e,t,n,r){if(r==null)return null;const o=e.length+n*2,l=Math.floor(t*Yi),h=o/t,f=(r.width||l)*h,s=(r.height||l)*h,a=r.x==null?e.length/2-f/2:r.x*h,c=r.y==null?e.length/2-s/2:r.y*h,d=r.opacity==null?1:r.opacity;let m=null;if(r.excavate){let g=Math.floor(a),v=Math.floor(c),x=Math.ceil(f+a-g),S=Math.ceil(s+c-v);m={x:g,y:v,w:x,h:S}}const p=r.crossOrigin;return{x:a,y:c,h:s,w:f,excavation:m,opacity:d,crossOrigin:p}}function qi(e,t){return t!=null?Math.max(Math.floor(t),0):e?Wi:Qi}function Kr({value:e,level:t,minVersion:n,includeMargin:r,marginSize:o,imageSettings:l,size:h,boostLevel:f}){let s=B.useMemo(()=>{const g=(Array.isArray(e)?e:[e]).reduce((v,x)=>(v.push(...Xe.QrSegment.makeSegments(x)),v),[]);return Xe.QrCode.encodeSegments(g,Gi[t],n,void 0,void 0,f)},[e,t,n,f]);const{cells:a,margin:c,numCells:d,calculatedImageSettings:m}=B.useMemo(()=>{let p=s.getModules();const g=qi(r,o),v=p.length+g*2,x=Hi(p,h,g,l);return{cells:p,margin:g,numCells:v,calculatedImageSettings:x}},[s,h,l,r,o]);return{qrcode:s,margin:c,cells:a,numCells:d,calculatedImageSettings:m}}var Xi=(function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0})(),Vi=B.forwardRef(function(t,n){const r=t,{value:o,size:l=Or,level:h=Lr,bgColor:f=zr,fgColor:s=Fr,includeMargin:a=_r,minVersion:c=Br,boostLevel:d,marginSize:m,imageSettings:p}=r,v=gn(r,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","marginSize","imageSettings"]),{style:x}=v,S=gn(v,["style"]),b=p?.src,w=B.useRef(null),N=B.useRef(null),R=B.useCallback(k=>{w.current=k,typeof n=="function"?n(k):n&&(n.current=k)},[n]),[D,T]=B.useState(!1),{margin:C,cells:A,numCells:E,calculatedImageSettings:M}=Kr({value:o,level:h,minVersion:c,boostLevel:d,includeMargin:a,marginSize:m,imageSettings:p,size:l});B.useEffect(()=>{if(w.current!=null){const k=w.current,L=k.getContext("2d");if(!L)return;let Y=A;const U=N.current,I=M!=null&&U!==null&&U.complete&&U.naturalHeight!==0&&U.naturalWidth!==0;I&&M.excavation!=null&&(Y=$r(A,M.excavation));const z=window.devicePixelRatio||1;k.height=k.width=l*z;const J=l/E*z;L.scale(J,J),L.fillStyle=f,L.fillRect(0,0,E,E),L.fillStyle=s,Xi?L.fill(new Path2D(Ur(Y,C))):A.forEach(function(re,q){re.forEach(function(he,j){he&&L.fillRect(j+C,q+C,1,1)})}),M&&(L.globalAlpha=M.opacity),I&&L.drawImage(U,M.x+C,M.y+C,M.w,M.h)}}),B.useEffect(()=>{T(!1)},[b]);const Q=mn({height:l,width:l},x);let H=null;return b!=null&&(H=B.createElement("img",{src:b,key:b,style:{display:"none"},onLoad:()=>{T(!0)},ref:N,crossOrigin:M?.crossOrigin})),B.createElement(B.Fragment,null,B.createElement("canvas",mn({style:Q,height:l,width:l,ref:R,role:"img"},S)),H)});Vi.displayName="QRCodeCanvas";var Gr=B.forwardRef(function(t,n){const r=t,{value:o,size:l=Or,level:h=Lr,bgColor:f=zr,fgColor:s=Fr,includeMargin:a=_r,minVersion:c=Br,boostLevel:d,title:m,marginSize:p,imageSettings:g}=r,v=gn(r,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","title","marginSize","imageSettings"]),{margin:x,cells:S,numCells:b,calculatedImageSettings:w}=Kr({value:o,level:h,minVersion:c,boostLevel:d,includeMargin:a,marginSize:p,imageSettings:g,size:l});let N=S,R=null;g!=null&&w!=null&&(w.excavation!=null&&(N=$r(S,w.excavation)),R=B.createElement("image",{href:g.src,height:w.h,width:w.w,x:w.x+x,y:w.y+x,preserveAspectRatio:"none",opacity:w.opacity,crossOrigin:w.crossOrigin}));const D=Ur(N,x);return B.createElement("svg",mn({height:l,width:l,viewBox:`0 0 ${b} ${b}`,ref:n,role:"img"},v),!!m&&B.createElement("title",null,m),B.createElement("path",{fill:f,d:`M0,0 h${b}v${b}H0z`,shapeRendering:"crispEdges"}),B.createElement("path",{fill:s,d:D,shapeRendering:"crispEdges"}),R)});Gr.displayName="QRCodeSVG";function Wr(){return parseInt(window.location.port||(window.location.protocol==="https:"?"443":"80"),10)}function Ji(){return es({queryKey:ue.tunnel.status,queryFn:()=>We.get("/tunnel/status"),refetchInterval:e=>e.state.data?.running?5e3:!1})}function Zi(){const e=$t();return pn({mutationFn:()=>We.post("/tunnel/start",{port:Wr()}),onSuccess:()=>{e.invalidateQueries({queryKey:ue.tunnel.status})}})}function ea(){const e=$t();return pn({mutationFn:()=>We.post("/tunnel/regenerate",{port:Wr()}),onSuccess:()=>{e.invalidateQueries({queryKey:ue.tunnel.status})}})}function ta(){const e=$t();return pn({mutationFn:()=>We.post("/tunnel/stop"),onSuccess:()=>{e.invalidateQueries({queryKey:ue.tunnel.status})}})}function na(e){if(!e||e.status==="stopped")return{button:"text-muted-foreground hover:text-foreground hover:bg-accent",dot:"",label:"Use Agent Tower on your phone",icon:"idle"};switch(e.status){case"healthy":case"checking":return{button:"text-success-ink hover:bg-success/10",dot:"bg-success",label:e.status==="healthy"?"Tunnel healthy":"Checking tunnel health",icon:"ok"};case"degraded":case"localUnhealthy":case"linkReplaced":return{button:"text-warning-ink hover:bg-warning/10",dot:"bg-warning",label:"Tunnel needs attention",icon:"warn"};case"exited":case"error":return{button:"text-destructive-ink hover:bg-destructive/10",dot:"bg-destructive",label:"Tunnel unavailable",icon:"error"};case"starting":return{button:"text-warning-ink hover:bg-warning/10",dot:"bg-warning",label:"Tunnel starting",icon:"loading"}}}function ra(e){if(!e||e.status==="stopped")return"Tunnel is off";switch(e.status){case"healthy":return"Tunnel healthy";case"checking":return"Checking tunnel health";case"degraded":return"Observing original link";case"localUnhealthy":return"Local service unavailable";case"exited":return"Tunnel process exited";case"error":return"Tunnel error";case"linkReplaced":return"New link generated";case"starting":return"Tunnel starting"}}function sa(e){if(!e||e.status==="stopped")return"Start a temporary Quick Tunnel when you need to share this Agent Tower session.";switch(e.status){case"healthy":return"The Cloudflare tunnel is running and the local Agent Tower health check passed.";case"checking":return"The Cloudflare tunnel is running. Agent Tower is waiting for the first local health check.";case"degraded":return"The original public URL is currently unreachable. Agent Tower is watching for it to recover and will not generate a new link automatically.";case"localUnhealthy":return"The local Agent Tower target is not responding, so the tunnel cannot be considered healthy.";case"exited":return"The tunnel process has exited. The old Quick Tunnel link is unlikely to recover.";case"error":return"The tunnel reported an error. Check the diagnostics before generating a new link.";case"linkReplaced":return"A new Quick Tunnel link was generated. The old link and token are no longer valid.";case"starting":return"Agent Tower is asking Cloudflare Quick Tunnel for a temporary public URL."}}function tr(e){if(!e)return"Never";const t=new Date(e).getTime();if(!Number.isFinite(t))return e;const n=Math.max(0,Math.round((Date.now()-t)/1e3));if(n<60)return`${n}s ago`;const r=Math.round(n/60);if(r<60)return`${r}m ago`;const o=Math.round(r/60);return o<24?`${o}h ago`:`${Math.round(o/24)}d ago`}function ct(e){const t=e?.trim();return t||null}function oa(e){if(!e)return"";const t=[ct(e.lastLocalError),ct(e.lastRemoteError),ct(e.lastError)].filter(o=>o!==null),n=ct(e.lastProcessOutput),r=!!n&&(e.status==="error"||e.status==="exited"||!!ct(e.lastError));return n&&r&&t.push(n),t.join(`
|
|
8
|
+
`)}function nr(){const{t:e}=De(),{data:t}=Ji(),n=Zi(),r=ta(),o=ea(),[l,h]=u.useState(!1),[f,s]=u.useState(null),[a,c]=u.useState(!1),[d,m]=u.useState(!1),p=t?.status!==void 0&&t.status!=="stopped",g=n.isPending||t?.status==="starting",v=o.isPending,x=t?.shareableUrl,S=t?.token,b=na(t),w=ra(t),N=oa(t),R=t?.status==="healthy"||t?.status==="checking"?"text-success-ink":t?.status==="exited"||t?.status==="error"?"text-destructive-ink":"text-warning-ink",D=u.useCallback(()=>{n.mutate(void 0,{onSuccess:()=>h(!0)})},[n]),T=u.useCallback(()=>{x&&(navigator.clipboard.writeText(x),s("url"),setTimeout(()=>s(null),2e3))},[x]),C=u.useCallback(()=>{S&&(navigator.clipboard.writeText(S),s("token"),setTimeout(()=>s(null),2e3))},[S]),A=u.useCallback(()=>{r.mutate(),h(!1),c(!1),m(!1)},[r]),E=u.useCallback(()=>{o.mutate(void 0,{onSuccess:()=>{m(!1),h(!0)}})},[o]),M=i.jsx(xs,{asChild:!0,children:i.jsx(Vt,{size:"xs",label:e("Close"),className:"-mr-1 -mt-0.5 shrink-0",children:i.jsx(ts,{})})});return i.jsxs(bs,{open:l,onOpenChange:h,children:[i.jsxs("div",{className:"relative",children:[i.jsx(ys,{asChild:!0,children:i.jsx("button",{type:"button",disabled:g,className:ie("p-1.5 rounded-md transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring/60",b.button),title:e(b.label),"aria-label":e(b.label),children:g?i.jsx(ns,{size:"md"}):b.icon==="warn"?i.jsx(rs,{size:16}):i.jsx(Pn,{size:16})})}),p&&!g&&i.jsx("span",{className:`pointer-events-none absolute top-0.5 right-0.5 w-2 h-2 ${b.dot} rounded-full`})]}),i.jsx(ws,{align:"end",className:ie("max-w-[calc(100vw-1rem)]",p?"w-96":"w-80"),children:p?i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"mb-2 flex items-start justify-between gap-3",children:[i.jsxs("div",{children:[i.jsxs("span",{className:ie("flex items-center gap-1.5 text-xs font-medium",R),children:[i.jsx("span",{className:`inline-block w-1.5 h-1.5 ${b.dot} rounded-full`}),e(w)]}),i.jsx("p",{className:"mt-1 text-xs leading-relaxed text-muted-foreground",children:e(sa(t))})]}),M]}),S&&i.jsxs("div",{className:"mb-2 flex items-center gap-1.5 rounded-md bg-muted/50 px-2 py-1 text-xs text-foreground/80",children:[i.jsx(hs,{size:12}),i.jsx("span",{children:e("Token protected")})]}),x&&i.jsx("div",{className:"flex justify-center py-3",children:i.jsx(Gr,{value:x,size:160})}),x||t?.url?i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(Cs,{size:"sm",readOnly:!0,value:x??t?.url??"",onFocus:Q=>Q.target.select(),"aria-label":e("Copy shareable link"),className:"select-all text-xs"}),i.jsx(Vt,{size:"sm",label:e("Copy shareable link"),onClick:T,disabled:!x,children:f==="url"?i.jsx(vt,{className:"text-success"}):i.jsx(Mn,{})})]}):i.jsx("div",{className:"rounded-md border border-border bg-muted/50 px-2 py-1.5 text-xs text-muted-foreground",children:e("No tunnel link available")}),i.jsxs("div",{className:"mt-3 grid grid-cols-2 gap-2 text-xs",children:[i.jsxs("div",{className:"rounded-md border border-border px-2 py-1.5",children:[i.jsx("div",{className:"text-muted-foreground",children:e("Last checked")}),i.jsx("div",{className:"mt-0.5 text-foreground",children:tr(t?.lastCheckedAt)})]}),i.jsxs("div",{className:"rounded-md border border-border px-2 py-1.5",children:[i.jsx("div",{className:"text-muted-foreground",children:e("Last healthy")}),i.jsx("div",{className:"mt-0.5 text-foreground",children:tr(t?.lastHealthyAt)})]})]}),N&&i.jsx(At,{tone:"warning",size:"sm",className:"mt-2 max-h-28 overflow-auto",children:i.jsx("div",{className:"whitespace-pre-wrap break-words",children:N})}),t?.status==="degraded"&&i.jsx(At,{tone:"warning",size:"sm",className:"mt-2",children:e("Agent Tower is keeping the same URL and waiting for Cloudflare Quick Tunnel to recover.")}),t?.status==="linkReplaced"&&i.jsx(At,{tone:"warning",size:"sm",className:"mt-2",children:e("The previous tunnel link and token are no longer valid.")}),S&&i.jsxs("div",{className:"mt-2",children:[i.jsx("button",{type:"button",onClick:()=>c(!a),className:"rounded-sm text-xs text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",children:e(a?"Hide token":"Show token")}),a&&i.jsxs("div",{className:"mt-1 flex items-center gap-2",children:[i.jsx("code",{className:"flex-1 min-w-0 break-all rounded-md border border-border bg-muted/50 px-2 py-1.5 text-xs text-foreground/80",children:S}),i.jsx(Vt,{size:"sm",label:e("Copy token"),onClick:C,className:"shrink-0",children:f==="token"?i.jsx(vt,{className:"text-success"}):i.jsx(Mn,{})})]})]}),d?i.jsxs(At,{tone:"danger",size:"sm",className:"mt-3",children:[e("Generating a new link will invalidate the current link. People using the old URL must receive the new one."),i.jsxs("div",{className:"mt-2 flex gap-2",children:[i.jsx(Ae,{variant:"secondary",size:"xs",className:"flex-1",onClick:()=>m(!1),children:e("Cancel")}),i.jsx(Ae,{variant:"primary",tone:"danger",size:"xs",className:"flex-1",onClick:E,loading:v,children:e(v?"Generating...":"Regenerate link")})]})]}):i.jsxs(Ae,{variant:"ghost",size:"sm",block:!0,className:"mt-3",onClick:()=>m(!0),disabled:v||t?.canRegenerate===!1,children:[i.jsx(ss,{}),e("Regenerate link")]}),i.jsx(Ae,{variant:"ghost",tone:"danger",size:"sm",block:!0,className:"mt-1",onClick:A,loading:r.isPending,children:r.isPending?e("Stopping..."):e("Stop Tunnel")})]}):i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"flex items-start justify-between gap-3",children:[i.jsxs("div",{className:"flex items-start gap-2",children:[i.jsx("span",{className:"mt-0.5 flex size-7 shrink-0 items-center justify-center rounded-md bg-muted text-foreground/80",children:i.jsx(Pn,{size:16})}),i.jsxs("div",{children:[i.jsx("div",{className:"text-sm font-medium text-foreground",children:e("Use Agent Tower on your phone")}),i.jsx("p",{className:"mt-1 text-xs leading-relaxed text-muted-foreground",children:e("After enabling the tunnel, you can scan a QR code with your phone to visit this Agent Tower instance, assign tasks, and check agent status.")})]})]}),M]}),i.jsx(Ae,{variant:"primary",size:"sm",block:!0,className:"mt-3",onClick:D,loading:g,children:e(g?"Starting tunnel...":"Enable phone access")})]})})]})}function on({isOpen:e,onClose:t}){const{t:n}=De(),r=Ns(),[o,l]=u.useState(""),[h,f]=u.useState(""),[s,a]=u.useState(null),[c,d]=u.useState(!1),[m,p]=u.useState(!1),g=o.trim(),v=h.trim(),x=c||r.isPending,S=u.useMemo(()=>!!(g&&v&&!x),[g,v,x]),b=u.useCallback(()=>{l(""),f(""),a(null),p(!1)},[]),w=u.useCallback(()=>{x||(b(),t())},[x,t,b]);u.useEffect(()=>{e||b()},[e,b]);const N=u.useCallback(async C=>{try{await r.mutateAsync({name:g,repoPath:v,initEmptyRepo:C}),b(),t()}catch(A){const E=A instanceof Error?A.message:n("Failed to create project");a(E),Le.error(E)}},[r,t,b,n,g,v]),R=u.useCallback(async()=>{if(!(!g||!v||x)){a(null),d(!0);try{const C=await We.get("/filesystem/validate",{params:{path:v}});if(!C.valid){a(C.error??n("Selected path is not a valid directory"));return}if(C.isGitRepo){await N(!1);return}if(C.reason==="no_git"&&C.isEmpty){p(!0);return}if(C.reason==="no_git"){await N(!1);return}await N(!1)}catch(C){a(C instanceof Error?C.message:n("Could not check project path"))}finally{d(!1)}}},[N,x,n,g,v]),D=u.useCallback(()=>{p(!1),N(!1)},[N]),T=u.useCallback(()=>{p(!1),N(!0)},[N]);return i.jsxs(i.Fragment,{children:[i.jsx(In,{isOpen:e,onClose:w,title:n("Create New Project"),action:i.jsxs(i.Fragment,{children:[i.jsx(Ae,{onClick:w,disabled:x,children:n("Cancel")}),i.jsx(Ae,{variant:"primary",onClick:R,disabled:!S,children:c?n("Checking..."):r.isPending?n("Creating..."):n("Create Project")})]}),children:i.jsxs("div",{className:"space-y-4",children:[i.jsxs("div",{children:[i.jsx("label",{className:"block text-sm font-medium text-foreground/80 mb-1.5",children:n("Project Name")}),i.jsx("input",{type:"text",value:o,onChange:C=>l(C.target.value),placeholder:n("e.g., Agent Tower"),disabled:x,className:"w-full px-3 py-2 border border-border rounded-lg text-sm focus:outline-none focus:border-ring transition-colors disabled:bg-muted/50 disabled:text-muted-foreground",autoFocus:!0})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-sm font-medium text-foreground/80 mb-1.5",children:n("Project Path")}),i.jsx(fs,{value:h,onChange:f,validationMode:"directory"})]}),s&&i.jsx("p",{className:"text-xs text-destructive-ink leading-relaxed",children:s})]})}),i.jsx(In,{isOpen:m,onClose:()=>{r.isPending||p(!1)},title:n("Initialize Git repository?"),action:i.jsxs(i.Fragment,{children:[i.jsx(Ae,{onClick:()=>p(!1),disabled:r.isPending,children:n("Cancel")}),i.jsx(Ae,{onClick:D,disabled:r.isPending,children:n("Create Local Project")}),i.jsx(Ae,{variant:"primary",onClick:T,disabled:r.isPending,children:r.isPending?n("Creating..."):n("Initialize and Create")})]}),children:i.jsxs("div",{className:"space-y-3 text-sm text-foreground/70 leading-relaxed",children:[i.jsx("p",{children:n("This directory is empty and does not have Git version control yet. Agent Tower can initialize Git and create the initial commit before creating the project.")}),i.jsx("p",{children:n("You can also create it as a local project now. Local projects only support local Solo tasks until Git is initialized.")})]})})]})}function rr(e){if(!e)return 0;const t=Date.parse(e);return Number.isNaN(t)?0:t}function ia(e){return e.map((t,n)=>({project:t,index:n,activityTime:rr(t.lastActivityAt??t.createdAt),createdTime:rr(t.createdAt)})).sort((t,n)=>{const r=n.activityTime-t.activityTime;if(r!==0)return r;const o=n.createdTime-t.createdTime;return o!==0?o:t.index-n.index}).map(({project:t})=>t)}const Qr="providerLastUsedAt";function aa(){const e={};try{const t=localStorage.getItem(Qr),n=t?JSON.parse(t):{};if(n&&typeof n=="object"&&!Array.isArray(n))for(const[r,o]of Object.entries(n))typeof o=="number"&&Number.isFinite(o)&&o>0&&(e[r]=o)}catch{}try{const t=localStorage.getItem("lastSelectedProviderId");t&&Object.keys(e).length===0&&(e[t]=1)}catch{}return e}function la(e){try{localStorage.setItem(Qr,JSON.stringify(e))}catch{}}const ca=u.lazy(()=>lr(()=>import("./TaskDetail-rEXNe2h3.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56])).then(e=>({default:e.TaskDetail}))),ua=u.lazy(()=>lr(()=>import("./MobileTaskDetail-QNUHMq7u.js"),__vite__mapDeps([57,1,2,15,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56])).then(e=>({default:e.MobileTaskDetail})));function sr(){const{t:e}=De();return i.jsx("div",{role:"status",className:"flex flex-1 items-center justify-center bg-background p-4 text-sm text-muted-foreground",children:e("Loading...")})}function or({projects:e,filterProjectId:t,setFilterProjectId:n,onCreateProject:r,className:o}){const{t:l}=De(),[h,f]=u.useState(!1),s=e.filter(c=>!c.archivedAt),a=t?e.find(c=>c.id===t)??null:null;return i.jsxs("div",{className:ie("relative flex items-center min-w-0",o),children:[i.jsx("span",{className:"mx-1.5 text-muted-foreground select-none",children:"/"}),i.jsxs("button",{onClick:()=>f(c=>!c),className:"flex items-center gap-1.5 px-2 py-1 rounded-md text-sm text-foreground/90 hover:bg-accent transition-colors min-w-0",children:[a?i.jsx("span",{className:`w-2 h-2 rounded-full shrink-0 ${a.color.replace("text-","bg-")}`}):i.jsx(an,{size:13,className:"text-muted-foreground shrink-0"}),i.jsx("span",{className:"truncate max-w-[200px] font-medium",children:a?a.name:l("All Projects")}),i.jsx(js,{size:13,className:`text-muted-foreground/70 shrink-0 transition-transform duration-200 ${h?"rotate-180":""}`})]}),h?i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"fixed inset-0 z-30",onClick:()=>f(!1)}),i.jsxs("div",{className:"absolute left-4 top-full mt-1.5 w-60 bg-popover border border-border rounded-lg shadow-popover shadow-black/5 z-40 py-1 animate-in fade-in zoom-in-95 duration-100 origin-top-left",children:[i.jsxs("button",{onClick:()=>{n(null),f(!1)},className:"w-full text-left px-3 py-1.5 text-[13px] flex items-center gap-2 hover:bg-accent/50 transition-colors",children:[i.jsx(an,{size:13,className:"text-muted-foreground shrink-0"}),i.jsx("span",{className:`flex-1 truncate ${t===null?"text-foreground font-medium":"text-muted-foreground"}`,children:l("All Projects")}),t===null?i.jsx(vt,{size:14,className:"text-foreground shrink-0"}):null]}),i.jsx("div",{className:"h-px bg-border/60 my-1 mx-2"}),i.jsx("div",{className:"max-h-[40vh] overflow-y-auto scrollbar-app-thin",children:s.map(c=>{const d=t===c.id;return i.jsxs("button",{onClick:()=>{n(c.id),f(!1)},className:"w-full text-left px-3 py-1.5 text-[13px] flex items-center gap-2 hover:bg-accent/50 transition-colors",children:[i.jsx("span",{className:`w-2 h-2 rounded-full shrink-0 ${c.color.replace("text-","bg-")}`}),i.jsx("span",{className:`flex-1 truncate ${d?"text-foreground font-medium":"text-muted-foreground"}`,children:c.name}),d?i.jsx(vt,{size:14,className:"text-foreground shrink-0"}):null]},c.id)})}),i.jsx("div",{className:"h-px bg-border/60 my-1 mx-2"}),i.jsxs("button",{onClick:()=>{f(!1),r()},className:"w-full text-left px-3 py-1.5 text-[13px] flex items-center gap-2 text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors",children:[i.jsx(ps,{size:13}),i.jsx("span",{children:l("Create New Project...")})]})]})]}):null]})}const da=260,fa=600,ir=400,ha=100,ma=1e3;function ga(e){const t=e.workspaces?.find(r=>r.status==="ACTIVE")??e.workspaces?.[0],n=t?.sessions?.at(-1);return{id:e.id,projectId:e.projectId,title:e.titlePreview??e.title,status:e.status,priority:e.priority,...t?{preferredWorkspace:{...t.workspaceKind===Je.MAIN_DIRECTORY?{workspaceKind:Je.MAIN_DIRECTORY}:{},branchName:t.branchName}}:{},...n?{latestAgentType:n.agentType}:{},...e.workspaces?.some(r=>r.sessions?.some(o=>o.status==="RUNNING"||o.status==="PENDING"))?{hasRunningSession:!0}:{},updatedAt:e.updatedAt?new Date(e.updatedAt).getTime():Date.now()}}function pa(){const{t:e,locale:t}=De(),[n,r]=u.useState(null),[o,l]=u.useState(null),[h,f]=u.useState(ir),[s,a]=u.useState(!1),[c,d]=u.useState("idle"),[m,p]=u.useState({}),g=u.useRef(!1),v=u.useRef(0),x=u.useRef(ir),S=u.useRef(null),b=$t(),{data:w,isLoading:N}=ks(),[R,D]=u.useState(aa),{data:T,isLoading:C}=Rs({limit:ha}),A=u.useMemo(()=>T?.data??[],[T?.data]),E=o&&A.some(y=>y.id===o)?o:null,{data:M,isLoading:Q}=os({...E?{projectId:E}:{},limit:ma}),H=u.useMemo(()=>M?.data??[],[M?.data]),[k,L]=u.useState([]),Y=u.useMemo(()=>{if(k.length===0)return H;const y=new Set(H.map(P=>P.id));return[...k.filter(P=>!y.has(P.id)),...H]},[H,k]),[U,I]=u.useState(null),z=u.useMemo(()=>n&&Y.some(y=>y.id===n)?n:U&&n===U?U:null,[n,Y,U]);u.useEffect(()=>{U&&Y.some(y=>y.id===U)&&I(null)},[U,Y]),u.useEffect(()=>{if(k.length===0)return;const y=new Set(H.map(P=>P.id));k.some(P=>y.has(P.id))&&L(P=>P.filter(O=>!y.has(O.id)))},[H,k]);const J=u.useMemo(()=>ia(A),[A]),re=u.useMemo(()=>J.map(Bi),[J]),q=u.useMemo(()=>J.filter(y=>!y.archivedAt),[J]),he=u.useMemo(()=>w?[...w].sort((y,P)=>{const O=!lt(y),F=!lt(P);return O!==F?O?-1:1:(R[P.provider.id]??0)-(R[y.provider.id]??0)}):[],[w,R]),j=u.useMemo(()=>Y.map(y=>Ui(y,A.find(P=>P.id===y.projectId))),[A,Y]),K=u.useMemo(()=>{if(!z)return null;const y=Y.find(O=>O.id===z);if(!y)return null;const P=A.find(O=>O.id===y.projectId);if(!P){const O=y.preferredWorkspace?y.preferredWorkspace.workspaceKind===Je.MAIN_DIRECTORY?"Project directory":y.preferredWorkspace.branchName:"—";return{id:y.id,projectId:y.projectId,projectName:"Unknown",projectColor:"text-muted-foreground",title:y.title,status:Nn(y.status),priority:y.priority,branch:O,mainBranch:"main",description:"",isGitRepo:!1,worktreeReady:!1,reason:"NO_GIT",projectArchivedAt:null,projectRepoDeletedAt:null}}return $i(y,P)},[z,Y,A]),_=is(),Z=as(),G=ls(),W=cs(),se=ms(),pe=u.useCallback(y=>{const P=ga(y);L(O=>O.some(F=>F.id===y.id)?O.map(F=>F.id===y.id?P:F):[P,...O]),b.setQueryData(ue.tasks.detail(y.id),y),I(y.id),r(y.id)},[b]),we=u.useCallback((y,P,O)=>{const F=y.id,ee=[y.title,y.description].filter(Boolean).join(`
|
|
9
|
+
|
|
10
|
+
`),me=O===Je.WORKTREE?q.find(X=>X.id===y.projectId)?.setupScript??null:null;p(X=>({...X,[F]:{status:"creating-workspace",setupScript:me}})),(async()=>{try{await As(F,{providerId:P,prompt:ee,workspaceKind:O},{createWorkspace:X=>We.post(`/tasks/${F}/workspaces`,{clientSubmissionId:X,workspaceKind:O}),startSession:X=>se.mutateAsync(X),onStep:X=>p(oe=>({...oe,[F]:{status:X,setupScript:me}}))}),await b.invalidateQueries({queryKey:ue.workspaces.list(F)}),await b.invalidateQueries({queryKey:ue.workspaces.setupProgress(F)}),await b.invalidateQueries({queryKey:ue.tasks.all}),p(X=>{const{[F]:oe,...fe}=X;return fe})}catch(X){const oe=X instanceof Error?X.message:e("启动 Agent 失败");p(fe=>({...fe,[F]:{status:"failed",error:oe,setupScript:me}})),Le.error(e("任务已创建,但启动 Agent 失败,可在详情中重试")),b.invalidateQueries({queryKey:ue.workspaces.list(F)}),b.invalidateQueries({queryKey:ue.tasks.all})}})()},[q,b,se,e]),Me=u.useCallback(y=>{p(P=>{const{[y]:O,...F}=P;return F}),b.invalidateQueries({queryKey:ue.workspaces.list(y)}),b.invalidateQueries({queryKey:ue.tasks.all})},[b]),Ce=u.useCallback(y=>{Z.mutate(y,{onSuccess:()=>{z===y&&r(null),p(P=>{const{[y]:O,...F}=P;return F}),L(P=>P.filter(O=>O.id!==y)),b.invalidateQueries({queryKey:ue.tasks.all})},onError:()=>{Le.error(e("删除任务失败"))}})},[Z,z,b,e]),Fe=u.useCallback((y,P)=>{G.mutate({id:y,status:Fi(P)},{onError:()=>{Le.error(e("状态变更失败,该操作不被允许"))}})},[G,e]),Se=u.useCallback((y,P)=>{W.mutate({id:y,priority:P},{onError:()=>{Le.error(e("优先级变更失败"))}})},[W,e]),Nt=u.useCallback(y=>{y.preventDefault(),g.current=!0,v.current=y.clientX,x.current=h,document.body.style.cursor="col-resize",document.body.style.userSelect="none"},[h]);u.useEffect(()=>{const y=O=>{if(!g.current)return;const F=O.clientX-v.current,ee=Math.max(da,Math.min(fa,x.current+F));f(ee)},P=()=>{g.current&&(g.current=!1,document.body.style.cursor="",document.body.style.userSelect="")};return document.addEventListener("mousemove",y),document.addEventListener("mouseup",P),()=>{document.removeEventListener("mousemove",y),document.removeEventListener("mouseup",P)}},[]);const Qe=u.useCallback(()=>{a(!0)},[]),tt=u.useCallback(()=>{if(q.length===0){Le.error(e("没有可用项目,请先创建或恢复项目"));return}r(null)},[q,e]),ve=u.useCallback(()=>{a(!1)},[]),_e=u.useCallback(async y=>{const{title:P,description:O,projectId:F,providerId:ee,mode:me,workspaceMode:X,teamRunMode:oe,teamTemplateId:fe,memberPresetIds:Oe,attachmentLinks:ae,priority:je}=y,xe=[O,ae].filter(Boolean).join(`
|
|
11
|
+
|
|
12
|
+
`);let ce=null;try{if(d("creating-task"),ce=await We.post(`/projects/${F}/tasks`,{title:P,description:xe||void 0,priority:je}),localStorage.setItem("lastSelectedProjectId",F),me==="SOLO"&&ee){localStorage.setItem("lastSelectedProviderId",ee);const $e={...R,[ee]:Date.now()};la($e),D($e)}me==="TEAM"?(d("creating-teamrun"),await _.mutateAsync({taskId:ce.id,mode:oe,...fe?{teamTemplateId:fe}:{},...Oe.length>0?{memberPresetIds:Oe}:{}})):ee&&we(ce,ee,X),E&&F!==E&&l(null),pe(ce),d("idle"),b.invalidateQueries({queryKey:ue.tasks.all}),b.invalidateQueries({queryKey:ue.projects.all})}catch(be){if(d("idle"),ce&&me==="TEAM")pe(ce),b.invalidateQueries({queryKey:ue.tasks.all}),Le.error(be instanceof Error?be.message:e("TeamRun 创建失败,请检查团队配置后重试"));else if(ce)E&&F!==E&&l(null),pe(ce),b.invalidateQueries({queryKey:ue.tasks.all}),b.invalidateQueries({queryKey:ue.projects.all});else throw Le.error(be instanceof Error?be.message:e("Failed to create task")),be}},[_,we,b,e,E,pe,R]),Ye=C||Q,nt=u.useMemo(()=>q.map(y=>({id:y.id,name:y.name,color:re.find(P=>P.id===y.id)?.color,repoPath:y.repoPath,isGitRepo:y.isGitRepo,worktreeReady:y.worktreeReady,reason:y.reason})),[q,re]),rt=u.useMemo(()=>he.map(y=>{const P=lt(y);return{id:y.provider.id,name:y.provider.name,agentType:y.provider.agentType,available:!P,permissionMode:y.provider.executionPermission,reason:P}}),[he]),Ie=u.useMemo(()=>{if(E&&q.find(P=>P.id===E))return E;const y=localStorage.getItem("lastSelectedProjectId");return y&&q.find(P=>P.id===y)?y:q[0]?.id??""},[q,E]),[Rt,Re]=u.useState(Ie);u.useEffect(()=>{Re(Ie)},[Ie]);const Pe=u.useMemo(()=>q.find(y=>y.id===Rt)?.name??q.find(y=>y.id===Ie)?.name??e("Project"),[q,Rt,Ie,e]),Be=t==="zh-CN"?`你需要在 ${Pe} 中做点什么?`:`What do you need to do in ${Pe}?`,st=u.useMemo(()=>{const y=localStorage.getItem("lastSelectedProviderId");return y&&he.find(O=>O.provider.id===y&&!lt(O))?y:he.find(O=>!lt(O))?.provider.id??""},[he]),ke=Ar(),[kt,ot]=u.useState(!1),{usesIntegratedTitlebar:Ue,desktopPlatform:it,hasMacTrafficLights:jt}=ar(),Ht=Ue&&it==="win32",Tt=u.useCallback(()=>{if(q.length===0){Le.error(e("没有可用项目,请先创建或恢复项目"));return}ot(!0)},[q,e]),qt=u.useCallback(async y=>{await _e(y),ot(!1)},[_e]);return ke?kt?i.jsxs("div",{className:"flex flex-col h-dvh bg-background overflow-hidden text-sm",children:[i.jsx("header",{className:"h-12 border-b border-border/60 flex items-center px-4 shrink-0",children:i.jsx("button",{onClick:()=>ot(!1),className:"text-sm text-muted-foreground active:text-foreground",children:e("Cancel")})}),i.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center px-4 pb-[8vh]",children:[i.jsx("h1",{className:"max-w-full text-center text-[22px] font-medium tracking-tight leading-snug text-foreground mb-5 break-words",children:Be}),i.jsx(An,{projects:nt,providers:rt,isProvidersLoading:N,onSubmit:qt,defaultProjectId:Ie,defaultProviderId:st,onProjectChange:Re,createStep:c})]})]}):z&&K?i.jsxs(i.Fragment,{children:[i.jsx(u.Suspense,{fallback:i.jsx("div",{className:"flex h-dvh",children:i.jsx(sr,{})}),children:i.jsx(ua,{task:K,onBack:()=>r(null),onDeleteTask:K.projectArchivedAt?void 0:Ce,onTaskPriorityChange:K.projectArchivedAt?void 0:Se,isDeleting:Z.isPending,autoStartState:m[K.id]??null,onAutoStartRecovered:Me})}),i.jsx(on,{isOpen:s,onClose:ve})]}):i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"flex flex-col h-dvh bg-sidebar overflow-hidden text-sm",children:[i.jsxs("header",{className:"h-12 bg-sidebar flex items-center px-4 justify-between shrink-0 z-20",children:[i.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[i.jsx(Dn,{}),i.jsx(or,{projects:re,filterProjectId:E,setFilterProjectId:l,onCreateProject:Qe})]}),i.jsxs("div",{className:"flex items-center gap-1",children:[i.jsx(nr,{}),i.jsx("button",{onClick:()=>jn.getState().openSettings(),className:"p-1.5 text-muted-foreground active:text-foreground rounded-md",children:i.jsx(kn,{size:16})})]})]}),i.jsx(Zn,{tasks:j,projects:re,selectedTaskId:null,onSelectTask:r,filterProjectId:E,setFilterProjectId:l,width:"100%",onCreateTask:Tt,onCreateProject:Qe,onTaskStatusChange:Fe,onTaskPriorityChange:Se,isLoading:Ye&&j.length===0})]}),i.jsx(on,{isOpen:s,onClose:ve})]}):i.jsxs("div",{ref:S,className:"flex flex-col h-screen bg-sidebar overflow-hidden text-sm",children:[i.jsxs("header",{className:ie("h-12 bg-sidebar flex items-center px-4 justify-between flex-shrink-0 z-20 relative",Ue&&"app-region-drag",Ht&&"pr-[150px]"),children:[i.jsxs("div",{className:ie("flex items-center gap-2 min-w-0",jt&&"pl-[72px]"),children:[i.jsx(Dn,{}),i.jsx(or,{projects:re,filterProjectId:E,setFilterProjectId:l,onCreateProject:Qe,className:Ue?"app-region-no-drag":void 0})]}),i.jsxs("div",{className:ie("flex items-center gap-1",Ue&&"app-region-no-drag"),children:[i.jsx("div",{className:Ue?"app-region-no-drag":void 0,children:i.jsx(nr,{})}),i.jsx("button",{onClick:()=>jn.getState().openSettings(),className:ie("p-1.5 text-muted-foreground hover:text-foreground hover:bg-accent rounded-md transition-colors",Ue&&"app-region-no-drag"),children:i.jsx(kn,{size:16})})]})]}),i.jsxs("div",{className:"flex-1 flex overflow-hidden",children:[i.jsx(Zn,{tasks:j,projects:re,selectedTaskId:z,onSelectTask:r,filterProjectId:E,setFilterProjectId:l,width:h,onCreateTask:tt,onCreateProject:Qe,isCreateActive:!z,onTaskStatusChange:Fe,onDeleteTask:Ce,onTaskPriorityChange:Se,isLoading:Ye&&j.length===0}),i.jsx("div",{onMouseDown:Nt,className:"w-1 cursor-col-resize hover:bg-border active:bg-ring/40 transition-colors z-50 -ml-[2px] flex-shrink-0 h-full",title:e("Drag to resize")}),i.jsx("div",{className:"flex-1 flex min-w-0 mb-2 mr-2 rounded-xl border border-border/50 bg-background overflow-hidden",children:z&&K?i.jsx(u.Suspense,{fallback:i.jsx(sr,{}),children:i.jsx(ca,{task:K,onDeleteTask:K.projectArchivedAt?void 0:Ce,isDeleting:Z.isPending,onTaskStatusChange:K.projectArchivedAt?void 0:Fe,onTaskPriorityChange:K.projectArchivedAt?void 0:Se,autoStartState:m[K.id]??null,onAutoStartRecovered:Me})}):z&&!K?i.jsx("div",{className:"flex-1 flex items-center justify-center bg-background min-w-0",children:i.jsx("span",{className:"text-sm text-muted-foreground",children:e("Loading...")})}):i.jsx("div",{className:"flex-1 flex flex-col items-center justify-center bg-background min-w-0 px-8 pb-[10vh]",children:i.jsxs("div",{className:"w-full max-w-2xl flex flex-col items-center animate-[fadeInUp_0.5s_cubic-bezier(0.16,1,0.3,1)]",children:[i.jsx("h1",{className:"max-w-full text-center text-[26px] font-medium tracking-tight leading-snug text-foreground mb-6 break-words",children:Be}),i.jsx(An,{projects:nt,providers:rt,isProvidersLoading:N,onSubmit:_e,defaultProjectId:Ie,defaultProviderId:st,onProjectChange:Re,createStep:c})]})})})]}),i.jsx(on,{isOpen:s,onClose:ve})]})}const za=Object.freeze(Object.defineProperty({__proto__:null,ProjectKanbanPage:pa},Symbol.toStringTag,{value:"Module"}));export{mi as D,za as P,As as t};
|