claude-code-workflow 7.2.27 → 7.2.28
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/.ccw/specs/architecture-constraints.md +5 -0
- package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +140 -0
- package/.claude/skills/investigate/SKILL.md +110 -0
- package/.claude/skills/investigate/phases/01-root-cause-investigation.md +132 -0
- package/.claude/skills/investigate/phases/02-pattern-analysis.md +126 -0
- package/.claude/skills/investigate/phases/03-hypothesis-testing.md +177 -0
- package/.claude/skills/investigate/phases/04-implementation.md +139 -0
- package/.claude/skills/investigate/phases/05-verification-report.md +153 -0
- package/.claude/skills/investigate/specs/debug-report-format.md +226 -0
- package/.claude/skills/investigate/specs/iron-law.md +101 -0
- package/.claude/skills/security-audit/SKILL.md +125 -0
- package/.claude/skills/security-audit/phases/01-supply-chain-scan.md +139 -0
- package/.claude/skills/security-audit/phases/02-owasp-review.md +156 -0
- package/.claude/skills/security-audit/phases/03-threat-modeling.md +180 -0
- package/.claude/skills/security-audit/phases/04-report-tracking.md +177 -0
- package/.claude/skills/security-audit/specs/owasp-checklist.md +442 -0
- package/.claude/skills/security-audit/specs/scoring-gates.md +141 -0
- package/.claude/skills/ship/SKILL.md +105 -0
- package/.claude/skills/ship/phases/01-preflight-checks.md +121 -0
- package/.claude/skills/ship/phases/02-code-review.md +137 -0
- package/.claude/skills/ship/phases/03-version-bump.md +171 -0
- package/.claude/skills/ship/phases/04-changelog-commit.md +167 -0
- package/.claude/skills/ship/phases/05-pr-creation.md +163 -0
- package/.claude/skills/skill-generator/templates/sequential-phase.md +10 -0
- package/.claude/skills/skill-generator/templates/skill-md.md +4 -0
- package/.claude/skills/team-interactive-craft/SKILL.md +127 -0
- package/.claude/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.claude/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +192 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +183 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/role.md +166 -0
- package/.claude/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.claude/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.claude/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.claude/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.claude/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.claude/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.claude/skills/team-motion-design/SKILL.md +129 -0
- package/.claude/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.claude/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/dispatch.md +203 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/monitor.md +184 -0
- package/.claude/skills/team-motion-design/roles/coordinator/role.md +167 -0
- package/.claude/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.claude/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.claude/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.claude/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.claude/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.claude/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.claude/skills/team-motion-design/specs/team-config.json +99 -0
- package/.claude/skills/team-ui-polish/SKILL.md +127 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +194 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/monitor.md +180 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/role.md +170 -0
- package/.claude/skills/team-ui-polish/roles/diagnostician/role.md +160 -0
- package/.claude/skills/team-ui-polish/roles/optimizer/role.md +225 -0
- package/.claude/skills/team-ui-polish/roles/scanner/role.md +356 -0
- package/.claude/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.claude/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.claude/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.claude/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.claude/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.claude/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.claude/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.claude/skills/team-uidesign/SKILL.md +6 -1
- package/.claude/skills/team-uidesign/roles/designer/role.md +28 -4
- package/.claude/skills/team-uidesign/roles/implementer/role.md +25 -3
- package/.claude/skills/team-uidesign/roles/researcher/role.md +21 -2
- package/.claude/skills/team-uidesign/roles/reviewer/role.md +19 -17
- package/.claude/skills/team-uidesign/specs/anti-patterns.md +211 -0
- package/.claude/skills/team-uidesign/specs/design-standards.md +329 -0
- package/.claude/skills/team-uidesign/specs/scoring-guide.md +114 -0
- package/.claude/skills/team-uidesign/specs/team-config.json +1 -1
- package/.claude/skills/team-uidesign/specs/ux-writing.md +86 -0
- package/.claude/skills/team-ux-improve/SKILL.md +3 -0
- package/.claude/skills/team-ux-improve/roles/designer/role.md +30 -0
- package/.claude/skills/team-ux-improve/roles/diagnoser/role.md +16 -1
- package/.claude/skills/team-ux-improve/roles/scanner/role.md +43 -1
- package/.claude/skills/team-ux-improve/specs/anti-patterns.md +103 -0
- package/.claude/skills/team-ux-improve/specs/design-standards.md +54 -0
- package/.claude/skills/team-ux-improve/specs/heuristics.md +88 -0
- package/.claude/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +40 -8
- package/.claude/skills/team-ux-improve/wisdom/patterns/state-management.md +32 -12
- package/.claude/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +35 -11
- package/.claude/skills/team-ux-improve/wisdom/principles/general-ux.md +36 -9
- package/.claude/skills/team-visual-a11y/SKILL.md +143 -0
- package/.claude/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +250 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +204 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/role.md +169 -0
- package/.claude/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.claude/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.claude/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.claude/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.claude/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.claude/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.claude/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.claude/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.claude/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.claude/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/.codex/skills/investigate/agents/investigator.md +392 -0
- package/.codex/skills/investigate/orchestrator.md +362 -0
- package/.codex/skills/investigate/phases/01-root-cause-investigation.md +212 -0
- package/.codex/skills/investigate/phases/02-pattern-analysis.md +181 -0
- package/.codex/skills/investigate/phases/03-hypothesis-testing.md +214 -0
- package/.codex/skills/investigate/phases/04-implementation.md +195 -0
- package/.codex/skills/investigate/phases/05-verification-report.md +240 -0
- package/.codex/skills/security-audit/agents/security-auditor.md +341 -0
- package/.codex/skills/security-audit/orchestrator.md +384 -0
- package/.codex/skills/security-audit/phases/01-supply-chain-scan.md +226 -0
- package/.codex/skills/security-audit/phases/02-owasp-review.md +232 -0
- package/.codex/skills/security-audit/phases/03-threat-modeling.md +249 -0
- package/.codex/skills/security-audit/phases/04-report-tracking.md +300 -0
- package/.codex/skills/ship/agents/ship-operator.md +318 -0
- package/.codex/skills/ship/orchestrator.md +426 -0
- package/.codex/skills/ship/phases/01-preflight-checks.md +198 -0
- package/.codex/skills/ship/phases/02-code-review.md +228 -0
- package/.codex/skills/ship/phases/03-version-bump.md +259 -0
- package/.codex/skills/ship/phases/04-changelog-commit.md +263 -0
- package/.codex/skills/ship/phases/05-pr-creation.md +280 -0
- package/.codex/skills/team-interactive-craft/SKILL.md +220 -0
- package/.codex/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.codex/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +162 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +233 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/role.md +209 -0
- package/.codex/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.codex/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.codex/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.codex/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.codex/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.codex/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.codex/skills/team-motion-design/SKILL.md +222 -0
- package/.codex/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.codex/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/dispatch.md +168 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/monitor.md +242 -0
- package/.codex/skills/team-motion-design/roles/coordinator/role.md +210 -0
- package/.codex/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.codex/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.codex/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.codex/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.codex/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.codex/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.codex/skills/team-motion-design/specs/team-config.json +99 -0
- package/.codex/skills/team-ui-polish/SKILL.md +218 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +167 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/monitor.md +230 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-ui-polish/roles/diagnostician/role.md +164 -0
- package/.codex/skills/team-ui-polish/roles/optimizer/role.md +229 -0
- package/.codex/skills/team-ui-polish/roles/scanner/role.md +360 -0
- package/.codex/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.codex/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.codex/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.codex/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.codex/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.codex/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.codex/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.codex/skills/team-visual-a11y/SKILL.md +319 -0
- package/.codex/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +188 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +281 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.codex/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.codex/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.codex/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.codex/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.codex/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.codex/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.codex/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.codex/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.codex/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/README.md +8 -0
- package/ccw/dist/core/hooks/hook-templates.d.ts.map +1 -1
- package/ccw/dist/core/hooks/hook-templates.js +114 -1
- package/ccw/dist/core/hooks/hook-templates.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +34 -0
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/system-routes.js +2 -2
- package/ccw/dist/core/routes/system-routes.js.map +1 -1
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js → AlertDialog-BjP1ydDR.js} +2 -2
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-BjP1ydDR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-CAX3xqMf.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-CAX3xqMf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-CtWlmztq.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-CtWlmztq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-hR4a-eLX.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-hR4a-eLX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-DzNPkFN9.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-DzNPkFN9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BPEGN4TT.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BPEGN4TT.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cf0r2RHY.js} +2 -2
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cf0r2RHY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DEm1rJ4h.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DEm1rJ4h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-BpeWw8HO.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-BpeWw8HO.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-BEsmh2vF.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-BEsmh2vF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-B30SFdtU.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-B30SFdtU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-BVvMpg1O.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-BVvMpg1O.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-CL73dHbh.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-CL73dHbh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-BL-28lMZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-BL-28lMZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BzZDciHZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BzZDciHZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-CDp6-d8P.js} +2 -2
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-CDp6-d8P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-fZY_7O9n.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-fZY_7O9n.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-4LJeC9bq.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-4LJeC9bq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-Bpigrbhw.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-Bpigrbhw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-BP0zJc1R.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-BP0zJc1R.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-CSt2oVKQ.js} +2 -2
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-CSt2oVKQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-B-xaMA0w.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-B-xaMA0w.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-CJqo_7DY.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-CJqo_7DY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-ibZeQA-Y.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-ibZeQA-Y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-DgJ4ctPQ.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-DgJ4ctPQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-Cit0Yq0D.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-Cit0Yq0D.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-Ce1HDIK0.js} +2 -2
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-Ce1HDIK0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-J1KikNrk.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-J1KikNrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CdBjTmth.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CdBjTmth.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-B9ZK7LvX.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-B9ZK7LvX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-CW_nS5UR.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-CW_nS5UR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SettingsPage-BPDbXPSM.js → SettingsPage-B2PYzSoO.js} +35 -35
- package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +1 -0
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js → SkillsManagerPage-CTnWrrwp.js} +2 -2
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js.map → SkillsManagerPage-CTnWrrwp.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DJpi9XQL.js} +2 -2
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DJpi9XQL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-Ac6Ov7uy.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-Ac6Ov7uy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-DZAAspqR.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-DZAAspqR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-BJkwfhIZ.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-BJkwfhIZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-BJgjxBgb.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-BJgjxBgb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-D1WekoOy.js} +2 -2
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-D1WekoOy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-DxemgIhF.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-DxemgIhF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-CjS83f1V.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-CjS83f1V.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-B5PUcn8I.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-B5PUcn8I.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-DCc9aPbb.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-DCc9aPbb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-DOwFtzak.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-DOwFtzak.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-96qH3aFh.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-96qH3aFh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CCxSuil1.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CCxSuil1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-CZNSJFdq.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-CZNSJFdq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-h8xtvw2_.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-h8xtvw2_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-D3NY0bm6.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-D3NY0bm6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-Cy2vkc8p.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-Cy2vkc8p.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-Bzq3U1Mx.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-Bzq3U1Mx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-DwuwPDPi.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-DwuwPDPi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-q9g-bknU.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-q9g-bknU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-CL6vb42J.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-CL6vb42J.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-BkrcQBly.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-BkrcQBly.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-BQbwyNeV.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-BQbwyNeV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-x5_7DrN7.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-x5_7DrN7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-DTyWXwzf.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-DTyWXwzf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-80O0kJO7.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-80O0kJO7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-DDlN2Bwa.js} +2 -2
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-DDlN2Bwa.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-B9A3Hnrk.js} +2 -2
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-B9A3Hnrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-Bs80iCX0.js} +2 -2
- package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-Bs80iCX0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index-mbeo62f8.js} +2 -2
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index-mbeo62f8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-rLgoBCfV.js} +3 -3
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-rLgoBCfV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-C1niOWJx.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-C1niOWJx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-BTmI7SUg.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-BTmI7SUg.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CB9HKeuZ.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CB9HKeuZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-koEYiemK.js} +2 -2
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-koEYiemK.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-v2_GaLdC.js} +2 -2
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-v2_GaLdC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BQNfAqG_.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BQNfAqG_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-Dzq5LGg9.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-Dzq5LGg9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CtkoJXcz.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CtkoJXcz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-CH3smL37.js} +2 -2
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-CH3smL37.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CZ0aL_yF.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CZ0aL_yF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-F2A_J4l6.js} +2 -2
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-F2A_J4l6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-Byxot0YU.js} +2 -2
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-Byxot0YU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-JjqhUkpw.js} +2 -2
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-JjqhUkpw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2--SuN9rAt.js} +2 -2
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2--SuN9rAt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-BbngGB2h.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-BbngGB2h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-CgrHgZSl.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-CgrHgZSl.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-BU3TQr7Z.js} +2 -2
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-BU3TQr7Z.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CKs7nnn3.js} +2 -2
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CKs7nnn3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-DW5tsDW6.js} +2 -2
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-DW5tsDW6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-BHm7w3ON.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-BHm7w3ON.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-DYR7PWwt.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-DYR7PWwt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-D0TVgQD_.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-D0TVgQD_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-DfY8mAP8.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-DfY8mAP8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-CGusDp0F.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-CGusDp0F.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-CIwh0fF1.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-CIwh0fF1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-FMyFv39K.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-FMyFv39K.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-B2qhsoTb.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-B2qhsoTb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-cxKXMBm3.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-cxKXMBm3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-B-xUT_z-.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-B-xUT_z-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-DZV_3lPr.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-DZV_3lPr.js.map} +1 -1
- package/ccw/frontend/dist/index.html +1 -1
- package/package.json +105 -105
- package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{O as a,u as d,j as e,aP as n,c as s}from"./index-
|
|
1
|
+
import{O as a,u as d,j as e,aP as n,c as s}from"./index-rLgoBCfV.js";import{C as i}from"./cpu-CZNSJFdq.js";/**
|
|
2
2
|
* @license lucide-react v0.460.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
5
5
|
* See the LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/const c=a("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);function u({currentMode:r,onModeChange:t}){const{formatMessage:o}=d();return e.jsxs("div",{className:"inline-flex items-center rounded-full border border-border bg-muted/50 p-0.5",children:[e.jsxs("button",{onClick:()=>t("claude"),className:s("inline-flex items-center gap-1.5 rounded-full px-3 py-1 text-xs font-medium transition-all",r==="claude"?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:[e.jsx(n,{className:"w-3.5 h-3.5"}),o({id:"mcp.mode.claude"})]}),e.jsxs("button",{onClick:()=>t("codex"),className:s("inline-flex items-center gap-1.5 rounded-full px-3 py-1 text-xs font-medium transition-all",r==="codex"?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:[e.jsx(i,{className:"w-3.5 h-3.5"}),o({id:"mcp.mode.codex"})]})]})}export{u as C,c as L};
|
|
7
|
-
//# sourceMappingURL=CliModeToggle-
|
|
7
|
+
//# sourceMappingURL=CliModeToggle-hR4a-eLX.js.map
|
package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-hR4a-eLX.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CliModeToggle-
|
|
1
|
+
{"version":3,"file":"CliModeToggle-hR4a-eLX.js","sources":["../../../../node_modules/lucide-react/dist/esm/icons/lock.js","../../src/components/mcp/CliModeToggle.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Lock = createLucideIcon(\"Lock\", [\n [\"rect\", { width: \"18\", height: \"11\", x: \"3\", y: \"11\", rx: \"2\", ry: \"2\", key: \"1w4ew1\" }],\n [\"path\", { d: \"M7 11V7a5 5 0 0 1 10 0v4\", key: \"fwvmzm\" }]\n]);\n\nexport { Lock as default };\n//# sourceMappingURL=lock.js.map\n","// ========================================\r\n// CLI Mode Toggle Component\r\n// ========================================\r\n// Compact badge-style toggle between Claude and Codex CLI modes\r\n\r\nimport { useIntl } from 'react-intl';\r\nimport { Terminal, Cpu } from 'lucide-react';\r\nimport { cn } from '@/lib/utils';\r\n\r\n// ========== Types ==========\r\n\r\nexport type CliMode = 'claude' | 'codex';\r\n\r\nexport interface CliModeToggleProps {\r\n currentMode: CliMode;\r\n onModeChange: (mode: CliMode) => void;\r\n codexConfigPath?: string;\r\n}\r\n\r\n// ========== Component ==========\r\n\r\nexport function CliModeToggle({\r\n currentMode,\r\n onModeChange,\r\n}: CliModeToggleProps) {\r\n const { formatMessage } = useIntl();\r\n\r\n return (\r\n <div className=\"inline-flex items-center rounded-full border border-border bg-muted/50 p-0.5\">\r\n <button\r\n onClick={() => onModeChange('claude')}\r\n className={cn(\r\n 'inline-flex items-center gap-1.5 rounded-full px-3 py-1 text-xs font-medium transition-all',\r\n currentMode === 'claude'\r\n ? 'bg-primary text-primary-foreground shadow-sm'\r\n : 'text-muted-foreground hover:text-foreground'\r\n )}\r\n >\r\n <Terminal className=\"w-3.5 h-3.5\" />\r\n {formatMessage({ id: 'mcp.mode.claude' })}\r\n </button>\r\n <button\r\n onClick={() => onModeChange('codex')}\r\n className={cn(\r\n 'inline-flex items-center gap-1.5 rounded-full px-3 py-1 text-xs font-medium transition-all',\r\n currentMode === 'codex'\r\n ? 'bg-primary text-primary-foreground shadow-sm'\r\n : 'text-muted-foreground hover:text-foreground'\r\n )}\r\n >\r\n <Cpu className=\"w-3.5 h-3.5\" />\r\n {formatMessage({ id: 'mcp.mode.codex' })}\r\n </button>\r\n </div>\r\n );\r\n}\r\n\r\nexport default CliModeToggle;\r\n"],"names":["Lock","createLucideIcon","CliModeToggle","currentMode","onModeChange","formatMessage","useIntl","jsxs","cn","jsx","Terminal","Cpu"],"mappings":"2GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAOC,EAAiB,OAAQ,CACpC,CAAC,OAAQ,CAAE,MAAO,KAAM,OAAQ,KAAM,EAAG,IAAK,EAAG,KAAM,GAAI,IAAK,GAAI,IAAK,IAAK,SAAU,EACxF,CAAC,OAAQ,CAAE,EAAG,2BAA4B,IAAK,QAAQ,CAAE,CAC3D,CAAC,ECSM,SAASC,EAAc,CAC5B,YAAAC,EACA,aAAAC,CACF,EAAuB,CACrB,KAAM,CAAE,cAAAC,CAAA,EAAkBC,EAAA,EAE1B,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,+EACb,SAAA,CAAAA,EAAAA,KAAC,SAAA,CACC,QAAS,IAAMH,EAAa,QAAQ,EACpC,UAAWI,EACT,6FACAL,IAAgB,SACZ,+CACA,6CAAA,EAGN,SAAA,CAAAM,EAAAA,IAACC,EAAA,CAAS,UAAU,aAAA,CAAc,EACjCL,EAAc,CAAE,GAAI,iBAAA,CAAmB,CAAA,CAAA,CAAA,EAE1CE,EAAAA,KAAC,SAAA,CACC,QAAS,IAAMH,EAAa,OAAO,EACnC,UAAWI,EACT,6FACAL,IAAgB,QACZ,+CACA,6CAAA,EAGN,SAAA,CAAAM,EAAAA,IAACE,EAAA,CAAI,UAAU,aAAA,CAAc,EAC5BN,EAAc,CAAE,GAAI,gBAAA,CAAkB,CAAA,CAAA,CAAA,CACzC,EACF,CAEJ","x_google_ignoreList":[0]}
|
package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-DzNPkFN9.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as R,bs as k,r as t,eh as M,ei as B,j as e,B as x,cO as A,e as L,am as O,C as y,I as P,c as T}from"./index-
|
|
2
|
-
//# sourceMappingURL=CliSessionSharePage-
|
|
1
|
+
import{u as R,bs as k,r as t,eh as M,ei as B,j as e,B as x,cO as A,e as L,am as O,C as y,I as P,c as T}from"./index-rLgoBCfV.js";function U(n,d){const c=`/api/cli-sessions/${encodeURIComponent(n)}/stream`,o=new URLSearchParams({shareToken:d,includeBuffer:"1"});return`${c}?${o.toString()}`}function I(){const{formatMessage:n}=R(),[d]=k(),c=d.get("sessionKey")??"",o=d.get("shareToken")??"",l=t.useMemo(()=>typeof window<"u"?window.location.href:"",[]),[v,i]=t.useState("idle"),[j,b]=t.useState(null),u=t.useRef(null),m=t.useRef(null),p=t.useRef(null);t.useEffect(()=>{if(!u.current||m.current)return;const s=new M.Terminal({convertEol:!0,cursorBlink:!1,disableStdin:!0,fontFamily:'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace',fontSize:12,scrollback:1e4}),r=new B.FitAddon;return s.loadAddon(r),s.open(u.current),r.fit(),m.current=s,p.current=r,()=>{try{s.dispose()}finally{m.current=null,p.current=null}}},[]),t.useEffect(()=>{const s=u.current,r=p.current;if(!s||!r)return;const a=new ResizeObserver(()=>r.fit());return a.observe(s),()=>a.disconnect()},[]),t.useEffect(()=>{const s=m.current;if(!s)return;if(!c||!o){i("error"),b(n({id:"issues.terminal.share.missingParams"}));return}b(null),i("connecting");const r=U(c,o),a=new EventSource(r);let f=!1;const S=g=>{try{const h=JSON.parse(g.data);s.reset(),s.clear(),s.write(h.buffer||""),f=!0,i("connected")}catch{}},E=g=>{try{const h=JSON.parse(g.data);typeof h.data=="string"&&s.write(h.data),f||(f=!0,i("connected"))}catch{}},C=()=>{i(f?"reconnecting":"connecting")};return a.addEventListener("buffer",S),a.addEventListener("output",E),a.onerror=C,()=>{try{a.close()}catch{}}},[n,c,o]);const w=t.useMemo(()=>{switch(v){case"connected":return e.jsx(x,{variant:"success",children:n({id:"issues.terminal.share.connected"})});case"reconnecting":case"connecting":return e.jsx(x,{variant:"secondary",children:n({id:"issues.terminal.share.connecting"})});case"error":return e.jsx(x,{variant:"destructive",children:n({id:"issues.terminal.share.error"})});default:return e.jsx(x,{variant:"secondary",children:"—"})}},[v,n]),N=async()=>{if(l)try{await navigator.clipboard.writeText(l)}catch{}};return e.jsx("div",{className:"min-h-screen bg-background p-6",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(A,{className:"w-5 h-5 text-muted-foreground"}),e.jsx("h1",{className:"text-lg font-semibold text-foreground truncate",children:n({id:"issues.terminal.share.pageTitle"})}),w]}),e.jsx("div",{className:"mt-1 text-xs text-muted-foreground font-mono truncate",children:c||"—"})]}),e.jsx("div",{className:"flex items-center gap-2 shrink-0",children:e.jsxs(L,{variant:"outline",onClick:N,disabled:!l,children:[e.jsx(O,{className:"w-4 h-4 mr-2"}),n({id:"common.actions.copy"})]})})]}),j&&e.jsx(y,{className:"p-4 border-destructive/50 bg-destructive/5",children:e.jsx("div",{className:"text-sm text-destructive",children:j})}),e.jsxs(y,{className:"p-3 space-y-2",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:n({id:"issues.terminal.share.linkLabel"})}),e.jsx(P,{value:l,readOnly:!0})]}),e.jsx("div",{className:T("rounded-md border border-border bg-black/90 overflow-hidden"),children:e.jsx("div",{ref:u,className:"h-[70vh] w-full"})})]})})}export{I as CliSessionSharePage,I as default};
|
|
2
|
+
//# sourceMappingURL=CliSessionSharePage-DzNPkFN9.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CliSessionSharePage-7cYtX6FT.js","sources":["../../src/pages/CliSessionSharePage.tsx"],"sourcesContent":["// ========================================\n// CLI Session Share Page\n// ========================================\n// Read-only viewer for a PTY-backed CLI session using SSE + shareToken.\n\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { useSearchParams } from 'react-router-dom';\nimport { Terminal as XTerm } from 'xterm';\nimport { FitAddon } from 'xterm-addon-fit';\nimport { Copy, Monitor } from 'lucide-react';\nimport { Button } from '@/components/ui/Button';\nimport { Card } from '@/components/ui/Card';\nimport { Badge } from '@/components/ui/Badge';\nimport { Input } from '@/components/ui/Input';\nimport { cn } from '@/lib/utils';\n\ntype ConnectionState = 'idle' | 'connecting' | 'connected' | 'reconnecting' | 'error';\n\nfunction buildStreamUrl(sessionKey: string, shareToken: string): string {\n const apiPath = `/api/cli-sessions/${encodeURIComponent(sessionKey)}/stream`;\n const params = new URLSearchParams({\n shareToken,\n includeBuffer: '1',\n });\n return `${apiPath}?${params.toString()}`;\n}\n\nexport function CliSessionSharePage() {\n const { formatMessage } = useIntl();\n const [searchParams] = useSearchParams();\n\n const sessionKey = searchParams.get('sessionKey') ?? '';\n const shareToken = searchParams.get('shareToken') ?? '';\n\n const shareUrl = useMemo(() => (typeof window !== 'undefined' ? window.location.href : ''), []);\n\n const [connection, setConnection] = useState<ConnectionState>('idle');\n const [error, setError] = useState<string | null>(null);\n\n const terminalHostRef = useRef<HTMLDivElement | null>(null);\n const xtermRef = useRef<XTerm | null>(null);\n const fitAddonRef = useRef<FitAddon | null>(null);\n\n // Init xterm\n useEffect(() => {\n if (!terminalHostRef.current) return;\n if (xtermRef.current) return;\n\n const term = new XTerm({\n convertEol: true,\n cursorBlink: false,\n disableStdin: true,\n fontFamily:\n 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace',\n fontSize: 12,\n scrollback: 10_000,\n });\n const fitAddon = new FitAddon();\n term.loadAddon(fitAddon);\n term.open(terminalHostRef.current);\n fitAddon.fit();\n\n xtermRef.current = term;\n fitAddonRef.current = fitAddon;\n\n return () => {\n try {\n term.dispose();\n } finally {\n xtermRef.current = null;\n fitAddonRef.current = null;\n }\n };\n }, []);\n\n // Resize observer -> fit\n useEffect(() => {\n const host = terminalHostRef.current;\n const fitAddon = fitAddonRef.current;\n if (!host || !fitAddon) return;\n\n const ro = new ResizeObserver(() => fitAddon.fit());\n ro.observe(host);\n return () => ro.disconnect();\n }, []);\n\n // Connect SSE\n useEffect(() => {\n const term = xtermRef.current;\n if (!term) return;\n\n if (!sessionKey || !shareToken) {\n setConnection('error');\n setError(formatMessage({ id: 'issues.terminal.share.missingParams' }));\n return;\n }\n\n setError(null);\n setConnection('connecting');\n\n const streamUrl = buildStreamUrl(sessionKey, shareToken);\n const es = new EventSource(streamUrl);\n\n let hasConnected = false;\n\n const onBuffer = (event: MessageEvent) => {\n try {\n const payload = JSON.parse(event.data) as { buffer?: string };\n term.reset();\n term.clear();\n term.write(payload.buffer || '');\n hasConnected = true;\n setConnection('connected');\n } catch {\n // ignore parse errors\n }\n };\n\n const onOutput = (event: MessageEvent) => {\n try {\n const payload = JSON.parse(event.data) as { data?: string };\n if (typeof payload.data === 'string') {\n term.write(payload.data);\n }\n if (!hasConnected) {\n hasConnected = true;\n setConnection('connected');\n }\n } catch {\n // ignore parse errors\n }\n };\n\n const onError = () => {\n setConnection(hasConnected ? 'reconnecting' : 'connecting');\n };\n\n es.addEventListener('buffer', onBuffer as any);\n es.addEventListener('output', onOutput as any);\n es.onerror = onError;\n\n return () => {\n try {\n es.close();\n } catch {\n // ignore\n }\n };\n }, [formatMessage, sessionKey, shareToken]);\n\n const connectionBadge = useMemo(() => {\n switch (connection) {\n case 'connected':\n return <Badge variant=\"success\">{formatMessage({ id: 'issues.terminal.share.connected' })}</Badge>;\n case 'reconnecting':\n case 'connecting':\n return <Badge variant=\"secondary\">{formatMessage({ id: 'issues.terminal.share.connecting' })}</Badge>;\n case 'error':\n return <Badge variant=\"destructive\">{formatMessage({ id: 'issues.terminal.share.error' })}</Badge>;\n default:\n return <Badge variant=\"secondary\">—</Badge>;\n }\n }, [connection, formatMessage]);\n\n const handleCopyLink = async () => {\n if (!shareUrl) return;\n try {\n await navigator.clipboard.writeText(shareUrl);\n } catch {\n // ignore\n }\n };\n\n return (\n <div className=\"min-h-screen bg-background p-6\">\n <div className=\"max-w-5xl mx-auto space-y-4\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <Monitor className=\"w-5 h-5 text-muted-foreground\" />\n <h1 className=\"text-lg font-semibold text-foreground truncate\">\n {formatMessage({ id: 'issues.terminal.share.pageTitle' })}\n </h1>\n {connectionBadge}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground font-mono truncate\">\n {sessionKey || '—'}\n </div>\n </div>\n\n <div className=\"flex items-center gap-2 shrink-0\">\n <Button variant=\"outline\" onClick={handleCopyLink} disabled={!shareUrl}>\n <Copy className=\"w-4 h-4 mr-2\" />\n {formatMessage({ id: 'common.actions.copy' })}\n </Button>\n </div>\n </div>\n\n {error && (\n <Card className=\"p-4 border-destructive/50 bg-destructive/5\">\n <div className=\"text-sm text-destructive\">{error}</div>\n </Card>\n )}\n\n <Card className=\"p-3 space-y-2\">\n <div className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'issues.terminal.share.linkLabel' })}</div>\n <Input value={shareUrl} readOnly />\n </Card>\n\n <div className={cn('rounded-md border border-border bg-black/90 overflow-hidden')}>\n <div ref={terminalHostRef} className=\"h-[70vh] w-full\" />\n </div>\n </div>\n </div>\n );\n}\n\nexport default CliSessionSharePage;\n"],"names":["buildStreamUrl","sessionKey","shareToken","apiPath","params","CliSessionSharePage","formatMessage","useIntl","searchParams","useSearchParams","shareUrl","useMemo","connection","setConnection","useState","error","setError","terminalHostRef","useRef","xtermRef","fitAddonRef","useEffect","term","XTerm","fitAddon","FitAddon","host","ro","streamUrl","es","hasConnected","onBuffer","event","payload","onOutput","onError","connectionBadge","jsx","Badge","handleCopyLink","jsxs","Monitor","Button","Copy","Card","Input","cn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CliSessionSharePage-DzNPkFN9.js","sources":["../../src/pages/CliSessionSharePage.tsx"],"sourcesContent":["// ========================================\n// CLI Session Share Page\n// ========================================\n// Read-only viewer for a PTY-backed CLI session using SSE + shareToken.\n\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { useSearchParams } from 'react-router-dom';\nimport { Terminal as XTerm } from 'xterm';\nimport { FitAddon } from 'xterm-addon-fit';\nimport { Copy, Monitor } from 'lucide-react';\nimport { Button } from '@/components/ui/Button';\nimport { Card } from '@/components/ui/Card';\nimport { Badge } from '@/components/ui/Badge';\nimport { Input } from '@/components/ui/Input';\nimport { cn } from '@/lib/utils';\n\ntype ConnectionState = 'idle' | 'connecting' | 'connected' | 'reconnecting' | 'error';\n\nfunction buildStreamUrl(sessionKey: string, shareToken: string): string {\n const apiPath = `/api/cli-sessions/${encodeURIComponent(sessionKey)}/stream`;\n const params = new URLSearchParams({\n shareToken,\n includeBuffer: '1',\n });\n return `${apiPath}?${params.toString()}`;\n}\n\nexport function CliSessionSharePage() {\n const { formatMessage } = useIntl();\n const [searchParams] = useSearchParams();\n\n const sessionKey = searchParams.get('sessionKey') ?? '';\n const shareToken = searchParams.get('shareToken') ?? '';\n\n const shareUrl = useMemo(() => (typeof window !== 'undefined' ? window.location.href : ''), []);\n\n const [connection, setConnection] = useState<ConnectionState>('idle');\n const [error, setError] = useState<string | null>(null);\n\n const terminalHostRef = useRef<HTMLDivElement | null>(null);\n const xtermRef = useRef<XTerm | null>(null);\n const fitAddonRef = useRef<FitAddon | null>(null);\n\n // Init xterm\n useEffect(() => {\n if (!terminalHostRef.current) return;\n if (xtermRef.current) return;\n\n const term = new XTerm({\n convertEol: true,\n cursorBlink: false,\n disableStdin: true,\n fontFamily:\n 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace',\n fontSize: 12,\n scrollback: 10_000,\n });\n const fitAddon = new FitAddon();\n term.loadAddon(fitAddon);\n term.open(terminalHostRef.current);\n fitAddon.fit();\n\n xtermRef.current = term;\n fitAddonRef.current = fitAddon;\n\n return () => {\n try {\n term.dispose();\n } finally {\n xtermRef.current = null;\n fitAddonRef.current = null;\n }\n };\n }, []);\n\n // Resize observer -> fit\n useEffect(() => {\n const host = terminalHostRef.current;\n const fitAddon = fitAddonRef.current;\n if (!host || !fitAddon) return;\n\n const ro = new ResizeObserver(() => fitAddon.fit());\n ro.observe(host);\n return () => ro.disconnect();\n }, []);\n\n // Connect SSE\n useEffect(() => {\n const term = xtermRef.current;\n if (!term) return;\n\n if (!sessionKey || !shareToken) {\n setConnection('error');\n setError(formatMessage({ id: 'issues.terminal.share.missingParams' }));\n return;\n }\n\n setError(null);\n setConnection('connecting');\n\n const streamUrl = buildStreamUrl(sessionKey, shareToken);\n const es = new EventSource(streamUrl);\n\n let hasConnected = false;\n\n const onBuffer = (event: MessageEvent) => {\n try {\n const payload = JSON.parse(event.data) as { buffer?: string };\n term.reset();\n term.clear();\n term.write(payload.buffer || '');\n hasConnected = true;\n setConnection('connected');\n } catch {\n // ignore parse errors\n }\n };\n\n const onOutput = (event: MessageEvent) => {\n try {\n const payload = JSON.parse(event.data) as { data?: string };\n if (typeof payload.data === 'string') {\n term.write(payload.data);\n }\n if (!hasConnected) {\n hasConnected = true;\n setConnection('connected');\n }\n } catch {\n // ignore parse errors\n }\n };\n\n const onError = () => {\n setConnection(hasConnected ? 'reconnecting' : 'connecting');\n };\n\n es.addEventListener('buffer', onBuffer as any);\n es.addEventListener('output', onOutput as any);\n es.onerror = onError;\n\n return () => {\n try {\n es.close();\n } catch {\n // ignore\n }\n };\n }, [formatMessage, sessionKey, shareToken]);\n\n const connectionBadge = useMemo(() => {\n switch (connection) {\n case 'connected':\n return <Badge variant=\"success\">{formatMessage({ id: 'issues.terminal.share.connected' })}</Badge>;\n case 'reconnecting':\n case 'connecting':\n return <Badge variant=\"secondary\">{formatMessage({ id: 'issues.terminal.share.connecting' })}</Badge>;\n case 'error':\n return <Badge variant=\"destructive\">{formatMessage({ id: 'issues.terminal.share.error' })}</Badge>;\n default:\n return <Badge variant=\"secondary\">—</Badge>;\n }\n }, [connection, formatMessage]);\n\n const handleCopyLink = async () => {\n if (!shareUrl) return;\n try {\n await navigator.clipboard.writeText(shareUrl);\n } catch {\n // ignore\n }\n };\n\n return (\n <div className=\"min-h-screen bg-background p-6\">\n <div className=\"max-w-5xl mx-auto space-y-4\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <Monitor className=\"w-5 h-5 text-muted-foreground\" />\n <h1 className=\"text-lg font-semibold text-foreground truncate\">\n {formatMessage({ id: 'issues.terminal.share.pageTitle' })}\n </h1>\n {connectionBadge}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground font-mono truncate\">\n {sessionKey || '—'}\n </div>\n </div>\n\n <div className=\"flex items-center gap-2 shrink-0\">\n <Button variant=\"outline\" onClick={handleCopyLink} disabled={!shareUrl}>\n <Copy className=\"w-4 h-4 mr-2\" />\n {formatMessage({ id: 'common.actions.copy' })}\n </Button>\n </div>\n </div>\n\n {error && (\n <Card className=\"p-4 border-destructive/50 bg-destructive/5\">\n <div className=\"text-sm text-destructive\">{error}</div>\n </Card>\n )}\n\n <Card className=\"p-3 space-y-2\">\n <div className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'issues.terminal.share.linkLabel' })}</div>\n <Input value={shareUrl} readOnly />\n </Card>\n\n <div className={cn('rounded-md border border-border bg-black/90 overflow-hidden')}>\n <div ref={terminalHostRef} className=\"h-[70vh] w-full\" />\n </div>\n </div>\n </div>\n );\n}\n\nexport default CliSessionSharePage;\n"],"names":["buildStreamUrl","sessionKey","shareToken","apiPath","params","CliSessionSharePage","formatMessage","useIntl","searchParams","useSearchParams","shareUrl","useMemo","connection","setConnection","useState","error","setError","terminalHostRef","useRef","xtermRef","fitAddonRef","useEffect","term","XTerm","fitAddon","FitAddon","host","ro","streamUrl","es","hasConnected","onBuffer","event","payload","onOutput","onError","connectionBadge","jsx","Badge","handleCopyLink","jsxs","Monitor","Button","Copy","Card","Input","cn"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{O as z,u as S,r as a,e6 as L,e7 as N,j as e,x as q,e8 as H,e as G,a7 as J,c as b,y as K,z as Q,A as Y,b as W,I as X,aP as M,K as me,k as he,N as R,l as Z,e9 as E,D as ee,d as te,f as se,g as A,h as re,X as ae,ea as fe,eb as ne,ec as ge,ed as F,b7 as pe,ee as _,n as be,J as je,ef as we,cN as ve,ap as Ne,v as ye,bs as ke,eg as Ce}from"./index-
|
|
1
|
+
import{O as z,u as S,r as a,e6 as L,e7 as N,j as e,x as q,e8 as H,e as G,a7 as J,c as b,y as K,z as Q,A as Y,b as W,I as X,aP as M,K as me,k as he,N as R,l as Z,e9 as E,D as ee,d as te,f as se,g as A,h as re,X as ae,ea as fe,eb as ne,ec as ge,ed as F,b7 as pe,ee as _,n as be,J as je,ef as we,cN as ve,ap as Ne,v as ye,bs as ke,eg as Ce}from"./index-rLgoBCfV.js";import{S as Me,a as Se,V as U,C as Te,R as De}from"./style-CKs7nnn3.js";import{M as Ve}from"./index-B9A3Hnrk.js";import{L as Ee}from"./layout-grid-C1niOWJx.js";import{M as Pe,a as Oe}from"./minimize-2-CtkoJXcz.js";import"./braces-96qH3aFh.js";import"./index-mbeo62f8.js";/**
|
|
2
2
|
* @license lucide-react v0.460.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -19,4 +19,4 @@ import{O as z,u as S,r as a,e6 as L,e7 as N,j as e,x as q,e8 as H,e as G,a7 as J
|
|
|
19
19
|
* This source code is licensed under the ISC license.
|
|
20
20
|
* See the LICENSE file in the root directory of this source tree.
|
|
21
21
|
*/const B=z("Pin",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]]),ze={running:{icon:R,color:"text-indigo-500",label:"Running"},completed:{icon:he,color:"text-emerald-500",label:"Completed"},error:{icon:me,color:"text-rose-500",label:"Error"}};function $e(t){const s=Date.now()-t;return s<6e4?"Just now":s<36e5?`${Math.floor(s/6e4)}m ago`:s<864e5?`${Math.floor(s/36e5)}h ago`:new Date(t).toLocaleDateString()}function oe(t,r){return`${r.tool}-${r.mode}`}function Re({executionId:t,execution:r,onSelect:s}){const d=ze[r.status],o=d.icon;return e.jsxs("button",{onClick:s,className:b("w-full flex items-center gap-3 p-3 rounded-lg","border border-border/50 bg-muted/30","hover:bg-muted/50 hover:border-border","transition-all duration-150","text-left"),children:[e.jsx("div",{className:"flex items-center justify-center w-8 h-8 rounded-md bg-primary/10",children:e.jsx(M,{className:"h-4 w-4 text-primary"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium text-sm text-foreground truncate",children:oe(t,r)}),e.jsx(o,{className:b("h-3.5 w-3.5 shrink-0",d.color,r.status==="running"&&"animate-spin")})]}),e.jsx("div",{className:"flex items-center gap-2 mt-0.5",children:e.jsx("span",{className:"text-xs text-muted-foreground truncate",children:t})})]}),e.jsxs("div",{className:"flex items-center gap-1 text-xs text-muted-foreground shrink-0",children:[e.jsx(Z,{className:"h-3 w-3"}),e.jsx("span",{children:$e(r.startTime)})]})]})}function Fe({paneId:t,className:r}){const{formatMessage:s}=S(),[d,o]=a.useState(!1),[i,u]=a.useState(""),m=L(n=>n.executions),j=N(n=>n.addTab),p=N(n=>n.panes),w=a.useMemo(()=>{const n=p[t];return n?new Set(n.tabs.map(l=>l.executionId)):new Set},[p,t]),y=a.useMemo(()=>{const l=Object.entries(m).filter(([f,x])=>{if(!i)return!0;const C=i.toLowerCase();return f.toLowerCase().includes(C)||x.tool.toLowerCase().includes(C)||x.mode.toLowerCase().includes(C)});return l.sort((f,x)=>x[1].startTime-f[1].startTime),l},[m,i]),h=a.useCallback((n,l)=>{const f=oe(n,l);j(t,n,f),o(!1),u("")},[t,j]),g=Object.keys(m).length,v=y.filter(([n])=>!w.has(n)).length;return e.jsxs(q,{open:d,onOpenChange:o,children:[e.jsx(H,{asChild:!0,children:e.jsx(G,{variant:"ghost",size:"icon",className:b("h-6 w-6 shrink-0",r),"aria-label":s({id:"cliViewer.tabs.addTab",defaultMessage:"Add tab"}),children:e.jsx(J,{className:"h-4 w-4"})})}),e.jsxs(K,{className:"sm:max-w-md",children:[e.jsx(Q,{children:e.jsx(Y,{children:s({id:"cliViewer.picker.selectExecution",defaultMessage:"Select Execution"})})}),e.jsxs("div",{className:"relative",children:[e.jsx(W,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground"}),e.jsx(X,{placeholder:s({id:"cliViewer.picker.searchExecutions",defaultMessage:"Search executions..."}),value:i,onChange:n=>u(n.target.value),className:"pl-9"})]}),e.jsx("div",{className:"max-h-[300px] overflow-y-auto space-y-2",children:y.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center py-8 text-center",children:[e.jsx(M,{className:"h-8 w-8 text-muted-foreground mb-2"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:s(g===0?{id:"cliViewer.picker.noExecutions",defaultMessage:"No executions available"}:{id:"cliViewer.picker.noMatchingExecutions",defaultMessage:"No matching executions"})})]}):y.map(([n,l])=>{const f=w.has(n);return e.jsxs("div",{className:"relative",children:[e.jsx(Re,{executionId:n,execution:l,onSelect:()=>h(n,l)}),f&&e.jsx("div",{className:"absolute inset-0 bg-background/60 rounded-lg flex items-center justify-center",children:e.jsx("span",{className:"text-xs text-muted-foreground bg-muted px-2 py-1 rounded",children:s({id:"cliViewer.picker.alreadyOpen",defaultMessage:"Already open"})})})]},n)})}),g>0&&e.jsx("div",{className:"text-xs text-muted-foreground text-center pt-2 border-t border-border/50",children:s({id:"cliViewer.picker.executionCount",defaultMessage:"{available} of {total} executions available"},{available:v,total:g})})]})]})}const _e={idle:"bg-slate-400 dark:bg-slate-500"},O="application/x-cli-viewer-tab";function Ue({tab:t,paneId:r,isActive:s,onSelect:d,onClose:o,onTogglePin:i}){const[u,m]=a.useState(!1),[j,p]=a.useState(!1),w=N(x=>x.moveTab),y=E(),h=a.useMemo(()=>t.title.split("-")[0]||t.title,[t.title]),g=a.useCallback(x=>{const C={tabId:t.id,sourcePaneId:r};x.dataTransfer.setData(O,JSON.stringify(C)),x.dataTransfer.effectAllowed="move",m(!0)},[t.id,r]),v=a.useCallback(()=>{m(!1)},[]),n=a.useCallback(x=>{x.dataTransfer.types.includes(O)&&(x.preventDefault(),x.dataTransfer.dropEffect="move",p(!0))},[]),l=a.useCallback(()=>{p(!1)},[]),f=a.useCallback(x=>{x.preventDefault(),p(!1);const C=x.dataTransfer.getData(O);if(C)try{const T=JSON.parse(C),{tabId:D,sourcePaneId:V}=T;if(D===t.id)return;const c=y[r];if(!c)return;const k=c.tabs.findIndex(P=>P.id===t.id);if(k===-1)return;w(V,D,r,k)}catch(T){console.error("[TabBar] Failed to parse drag data:",T)}},[t.id,r,y,w]);return e.jsxs("div",{role:"tab",tabIndex:0,draggable:!t.isPinned,onDragStart:g,onDragEnd:v,onDragOver:n,onDragLeave:l,onDrop:f,onClick:d,onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),d())},className:b("group relative flex items-center gap-1.5 px-2.5 py-1.5 rounded-md text-xs","border border-border/50 shrink-0 min-w-0 max-w-[160px]","transition-all duration-150 select-none",s?"bg-slate-100 dark:bg-slate-800 border-slate-300 dark:border-slate-600 shadow-sm":"bg-muted/30 hover:bg-muted/50 border-border/30",t.isPinned&&"border-amber-500/50",u&&"opacity-50 cursor-grabbing",j&&"border-primary border-dashed bg-primary/10",!t.isPinned&&"cursor-grab"),title:t.title,children:[e.jsx("span",{className:b("w-1.5 h-1.5 rounded-full shrink-0",_e.idle)}),e.jsx("span",{className:"font-medium text-[11px] truncate",children:h}),t.isPinned&&e.jsx(B,{className:"h-2.5 w-2.5 text-amber-500 shrink-0"}),e.jsxs("div",{className:"flex items-center gap-0.5 ml-auto opacity-0 group-hover:opacity-100 transition-opacity",children:[e.jsx("button",{onClick:i,className:"p-0.5 rounded hover:bg-primary/10 transition-colors","aria-label":t.isPinned?"Unpin tab":"Pin tab",children:t.isPinned?e.jsx(Ie,{className:"h-2.5 w-2.5 text-amber-500"}):e.jsx(B,{className:"h-2.5 w-2.5 text-muted-foreground hover:text-amber-500"})}),!t.isPinned&&e.jsx("button",{onClick:o,className:"p-0.5 rounded hover:bg-rose-500/20 transition-colors","aria-label":"Close tab",children:e.jsx(ae,{className:"h-2.5 w-2.5 text-rose-600 dark:text-rose-400"})})]})]})}function Be({paneId:t,className:r}){const{formatMessage:s}=S(),[d,o]=a.useState(!1),u=E()[t],m=N(c=>c.setActiveTab),j=N(c=>c.removeTab),p=N(c=>c.togglePinTab),w=N(c=>c.addPane),y=N(c=>c.removePane),h=N(c=>c.moveTab),g=a.useCallback(c=>{m(t,c)},[t,m]),v=a.useCallback((c,k)=>{c.stopPropagation(),j(t,k)},[t,j]),n=a.useCallback((c,k)=>{c.stopPropagation(),p(k)},[p]),l=a.useCallback(()=>{w(t,"horizontal")},[t,w]),f=a.useCallback(()=>{w(t,"vertical")},[t,w]),x=a.useCallback(()=>{y(t)},[t,y]),C=a.useCallback(c=>{c.dataTransfer.types.includes(O)&&(c.preventDefault(),c.dataTransfer.dropEffect="move",o(!0))},[]),T=a.useCallback(c=>{c.currentTarget.contains(c.relatedTarget)||o(!1)},[]),D=a.useCallback(c=>{c.preventDefault(),o(!1);const k=c.dataTransfer.getData(O);if(k)try{const P=JSON.parse(k),{tabId:de,sourcePaneId:ue}=P,xe=(u==null?void 0:u.tabs.length)||0;h(ue,de,t,xe)}catch(P){console.error("[TabBar] Failed to parse drag data:",P)}},[t,u,h]),V=a.useMemo(()=>u?[...u.tabs].sort((c,k)=>c.isPinned!==k.isPinned?c.isPinned?-1:1:c.order-k.order):[],[u]);return u?e.jsxs("div",{className:b("flex items-center gap-1 px-2 py-1.5","bg-muted/30 border-b border-border/50","overflow-x-auto scrollbar-thin scrollbar-thumb-muted scrollbar-track-transparent",r),children:[e.jsx("div",{onDragOver:C,onDragLeave:T,onDrop:D,className:b("flex items-center gap-1 flex-1 min-w-0 overflow-x-auto",d&&"bg-primary/5 border border-primary border-dashed rounded"),children:V.length===0?e.jsx("span",{className:"text-xs text-muted-foreground px-2",children:s({id:"cliViewer.tabs.noTabs",defaultMessage:"No tabs open"})}):V.map(c=>e.jsx(Ue,{tab:c,paneId:t,isActive:u.activeTabId===c.id,onSelect:()=>g(c.id),onClose:k=>v(k,c.id),onTogglePin:k=>n(k,c.id)},c.id))}),e.jsx(Fe,{paneId:t}),e.jsxs(ee,{children:[e.jsx(te,{asChild:!0,children:e.jsx(G,{variant:"ghost",size:"icon",className:"h-6 w-6 shrink-0","aria-label":"Pane actions",children:e.jsx(Le,{className:"h-4 w-4"})})}),e.jsxs(se,{align:"end",className:"w-48",children:[e.jsxs(A,{onClick:l,children:[e.jsx(Me,{className:"h-4 w-4 mr-2"}),s({id:"cliViewer.paneActions.splitHorizontal",defaultMessage:"Split Horizontal"})]}),e.jsxs(A,{onClick:f,children:[e.jsx(Se,{className:"h-4 w-4 mr-2"}),s({id:"cliViewer.paneActions.splitVertical",defaultMessage:"Split Vertical"})]}),e.jsx(re,{}),e.jsxs(A,{onClick:x,className:"text-rose-600 dark:text-rose-400",children:[e.jsx(ae,{className:"h-4 w-4 mr-2"}),s({id:"cliViewer.paneActions.closePane",defaultMessage:"Close Pane"})]})]})]})]}):null}function qe(){const{formatMessage:t}=S();return e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center text-muted-foreground gap-4",children:[e.jsx(M,{className:"h-12 w-12 opacity-30"}),e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"text-sm font-medium",children:t({id:"cliViewer.noActiveTab",defaultMessage:"No active tab"})}),e.jsx("p",{className:"text-xs mt-1",children:t({id:"cliViewer.selectOrCreate",defaultMessage:"Select a tab or start a new CLI execution"})})]})]})}function He({executionId:t}){const{formatMessage:r}=S();return e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center text-muted-foreground gap-4",children:[e.jsx(M,{className:"h-12 w-12 opacity-30"}),e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"text-sm font-medium",children:r({id:"cliViewer.executionNotFound",defaultMessage:"Execution not found"})}),e.jsx("p",{className:"text-xs mt-1 font-mono opacity-50",children:t})]})]})}function Ge(){const{formatMessage:t}=S();return e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center text-muted-foreground gap-4",children:[e.jsx(R,{className:"h-8 w-8 animate-spin opacity-50"}),e.jsx("div",{className:"text-center",children:e.jsx("p",{className:"text-sm",children:t({id:"cliViewer.syncingExecution",defaultMessage:"Syncing execution data..."})})})]})}function Je({line:t}){const r={stdout:"text-foreground",stderr:"text-rose-600 dark:text-rose-400 bg-rose-500/5",thought:"text-blue-600 dark:text-blue-400 italic bg-blue-500/5",system:"text-amber-600 dark:text-amber-400 bg-amber-500/5",metadata:"text-muted-foreground text-xs",tool_call:"text-emerald-600 dark:text-emerald-400 bg-emerald-500/5 font-mono"};return e.jsx("div",{className:b("px-3 py-1 text-sm","border-l-2 border-transparent",r[t.type]||"text-foreground",t.type==="stderr"&&"border-l-rose-500",t.type==="thought"&&"border-l-blue-500",t.type==="system"&&"border-l-amber-500",t.type==="tool_call"&&"border-l-emerald-500"),children:t.type==="thought"||t.type==="tool_call"?e.jsx(Ve,{content:t.content,format:"markdown"}):e.jsx("pre",{className:"whitespace-pre-wrap break-words font-mono text-xs",children:t.content})})}function Ke({execution:t,executionId:r}){const{formatMessage:s}=S();return!t.output||t.output.length===0?e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center text-muted-foreground gap-4",children:[e.jsx(M,{className:"h-12 w-12 opacity-30"}),e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"text-sm",children:t.status==="running"?s({id:"cliViewer.waitingForOutput",defaultMessage:"Waiting for output..."}):s({id:"cliViewer.noOutput",defaultMessage:"No output"})}),t.status==="running"&&e.jsx(R,{className:"h-4 w-4 animate-spin mt-2 mx-auto opacity-50"})]})]}):e.jsx(ge,{autoScroll:t.status==="running",showScrollButton:!0,children:e.jsx("div",{className:"py-2",children:t.output.map((d,o)=>e.jsx(Je,{line:d},`${r}-line-${o}`))})})}function Qe({paneId:t,className:r}){const s=N(m=>fe(m,t)),d=L(m=>m.executions),{isLoading:o}=ne(!0),i=a.useMemo(()=>s!=null&&s.executionId&&d[s.executionId]||null,[s==null?void 0:s.executionId,d]),u=a.useMemo(()=>s?!i&&o?e.jsx(Ge,{}):i?e.jsx(Ke,{execution:i,executionId:s.executionId}):e.jsx(He,{executionId:s.executionId}):e.jsx(qe,{}),[s,i,o]);return e.jsx("div",{className:b("flex-1 min-h-0 flex flex-col overflow-hidden","bg-background",r),children:u})}function ie({paneId:t,className:r}){const d=E()[t],o=F(),i=N(j=>j.setFocusedPane),u=o===t,m=a.useCallback(()=>{u||i(t)},[u,t,i]);return d?e.jsxs("div",{className:b("h-full flex flex-col","bg-card dark:bg-surface-900","border border-border/50","rounded-sm overflow-hidden",u&&"ring-1 ring-primary/50",r),onClick:m,role:"region","aria-label":`CLI Viewer Pane ${t}`,children:[e.jsx(Be,{paneId:t}),e.jsx(Qe,{paneId:t})]}):e.jsx("div",{className:b("h-full flex items-center justify-center",r),children:e.jsx("span",{className:"text-muted-foreground text-sm",children:"Pane not found"})})}function $({className:t}){const{formatMessage:r}=S();return e.jsx("div",{className:b("h-full flex flex-col items-center justify-center","bg-card dark:bg-surface-900","text-muted-foreground",t),children:e.jsxs("div",{className:"flex flex-col items-center gap-6 max-w-md text-center p-8",children:[e.jsxs("div",{className:"relative",children:[e.jsx(M,{className:"h-16 w-16 opacity-20"}),e.jsx("div",{className:"absolute -bottom-1 -right-1 bg-primary/10 rounded-full p-1.5",children:e.jsx(pe,{className:"h-4 w-4 text-primary"})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-semibold text-foreground mb-2",children:r({id:"cliViewer.emptyState.title",defaultMessage:"CLI Viewer"})}),e.jsx("p",{className:"text-sm",children:r({id:"cliViewer.emptyState.description",defaultMessage:"Start a CLI execution to see the output here."})})]}),e.jsxs("div",{className:"flex flex-col gap-3 text-xs",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Ae,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{children:r({id:"cliViewer.emptyState.hint1",defaultMessage:'Use "ccw cli" command to start an execution'})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(M,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{children:r({id:"cliViewer.emptyState.hint2",defaultMessage:"Active executions will appear as tabs"})})]})]})]})})}function I(t){return typeof t=="string"}function le({group:t,minSize:r,onSizeChange:s}){const d=E(),o=a.useMemo(()=>t.children.filter(i=>I(i)?d[i]!==void 0:!0),[t.children,d]);return o.length===0?e.jsx($,{}):e.jsx(U,{vertical:t.direction==="vertical",defaultSizes:t.sizes,onChange:s,className:"h-full",children:o.map((i,u)=>e.jsx(U.Pane,{minSize:r,children:I(i)?e.jsx(ie,{paneId:i}):e.jsx(le,{group:i,minSize:r,onSizeChange:s})},I(i)?i:`group-${u}`))})}function Ye({className:t}){const r=_(),s=E(),d=a.useRef(!1),o=a.useRef(r.sizes);a.useEffect(()=>{d.current||(o.current=r.sizes)},[r.sizes]);const i=a.useCallback(m=>{o.current&&m.length===o.current.length&&m.every((j,p)=>Math.abs(j-o.current[p])<.1)||(d.current=!0,o.current=m,N.getState().setLayout(j=>({...j,sizes:m})),queueMicrotask(()=>{d.current=!1}))},[]),u=a.useMemo(()=>{if(!r.children||r.children.length===0)return e.jsx($,{});if(r.children.length===1&&I(r.children[0])){const m=r.children[0];return s[m]?e.jsx(ie,{paneId:m}):e.jsx($,{})}return e.jsx(le,{group:r,minSize:200,onSizeChange:i})},[r,s,i]);return e.jsx("div",{className:b("h-full w-full overflow-hidden","bg-background",t),children:u})}const We=[{id:"single",icon:we,labelId:"cliViewer.layout.single"},{id:"split-h",icon:Te,labelId:"cliViewer.layout.splitH"},{id:"split-v",icon:De,labelId:"cliViewer.layout.splitV"},{id:"grid-2x2",icon:Ee,labelId:"cliViewer.layout.grid"}],Xe="split-h",ce={running:{color:"bg-blue-500 animate-pulse"},completed:{color:"bg-green-500"},error:{color:"bg-red-500"}};function Ze(t){const r=t.children.length;if(r===0||r===1)return"single";if(r===2){if(!t.children.some(o=>typeof o!="string"))return t.direction==="horizontal"?"split-h":"split-v";if(t.children.every(o=>typeof o!="string"))return"grid-2x2"}return t.direction==="horizontal"?"split-h":"split-v"}function et(t){const s=Date.now()-t;return s<6e4?"Just now":s<36e5?`${Math.floor(s/6e4)}m ago`:s<864e5?`${Math.floor(s/36e5)}h ago`:new Date(t).toLocaleDateString()}function tt({isFullscreen:t,onToggleFullscreen:r}){const{formatMessage:s}=S(),d=be(),o=_(),i=F(),{initializeDefaultLayout:u,reset:m,addTab:j}=N(),p=L(l=>l.executions),w=a.useMemo(()=>Ze(o),[o]),y=a.useMemo(()=>Object.keys(p).length,[p]),h=a.useMemo(()=>Object.values(p).filter(l=>l.status==="running").length,[p]),g=a.useCallback(()=>{d(-1)},[d]),v=a.useCallback(l=>{u(l)},[u]),n=a.useCallback(()=>{m(),u(Xe)},[m,u]);return e.jsxs("div",{className:"flex items-center gap-1 px-2 h-[40px] border-b border-border bg-muted/30 shrink-0",children:[e.jsx("button",{onClick:g,className:b("p-1.5 rounded transition-colors","text-muted-foreground hover:text-foreground hover:bg-muted"),title:s({id:"cliViewer.toolbar.back",defaultMessage:"Back"}),children:e.jsx(je,{className:"w-3.5 h-3.5"})}),e.jsx("div",{className:"w-px h-5 bg-border mx-1"}),We.map(l=>{const f=w===l.id;return e.jsx("button",{onClick:()=>v(l.id),className:b("p-1.5 rounded transition-colors",f?"bg-primary/10 text-primary":"text-muted-foreground hover:text-foreground hover:bg-muted"),title:s({id:l.labelId}),children:e.jsx(l.icon,{className:"w-3.5 h-3.5"})},l.id)}),e.jsx("div",{className:"w-px h-5 bg-border mx-1"}),e.jsx(st,{focusedPaneId:i}),e.jsx("div",{className:"w-px h-5 bg-border mx-1"}),e.jsx("button",{onClick:n,className:b("p-1.5 rounded transition-colors","text-muted-foreground hover:text-foreground hover:bg-muted"),title:s({id:"cliViewer.toolbar.clearAll"}),children:e.jsx(ve,{className:"w-3.5 h-3.5"})}),e.jsxs("div",{className:"flex items-center gap-1 ml-auto",children:[e.jsxs(ee,{children:[e.jsx(te,{asChild:!0,children:e.jsxs("button",{className:b("flex items-center gap-1.5 px-2.5 py-1.5 rounded-md text-xs transition-colors","text-muted-foreground hover:text-foreground hover:bg-muted"),children:[e.jsx(M,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:h>0?`${h} ${s({id:"cliViewer.toolbar.running",defaultMessage:"running"})}`:`${y} ${s({id:"cliViewer.toolbar.executions",defaultMessage:"executions"})}`}),h>0&&e.jsx("span",{className:"w-2 h-2 rounded-full bg-green-500 animate-pulse"}),e.jsx(Ne,{className:"w-3 h-3"})]})}),e.jsxs(se,{align:"end",sideOffset:4,children:[e.jsx(ye,{children:s({id:"cliViewer.toolbar.executionsList",defaultMessage:"Recent Executions"})}),e.jsx(re,{}),Object.entries(p).length===0?e.jsx("div",{className:"px-2 py-4 text-center text-xs text-muted-foreground",children:s({id:"cliViewer.picker.noExecutions",defaultMessage:"No executions available"})}):Object.entries(p).sort((l,f)=>f[1].startTime-l[1].startTime).slice(0,10).map(([l,f])=>e.jsxs(A,{className:"flex items-center gap-2 text-xs",onClick:()=>{if(i){const x=`${f.tool}-${f.mode}`;j(i,l,x)}},children:[e.jsx("span",{className:b("w-2 h-2 rounded-full shrink-0",ce[f.status].color)}),e.jsx("span",{className:"truncate flex-1",children:f.tool}),e.jsx("span",{className:"text-muted-foreground",children:f.mode})]},l))]})]}),e.jsx("div",{className:"w-px h-5 bg-border mx-1"}),e.jsx("button",{onClick:r,className:b("p-1.5 rounded transition-colors",t?"bg-primary/10 text-primary":"text-muted-foreground hover:text-foreground hover:bg-muted"),title:s(t?{id:"cliViewer.toolbar.exitFullscreen",defaultMessage:"Exit Fullscreen"}:{id:"cliViewer.toolbar.fullscreen",defaultMessage:"Fullscreen"}),children:t?e.jsx(Pe,{className:"w-3.5 h-3.5"}):e.jsx(Oe,{className:"w-3.5 h-3.5"})}),e.jsx("span",{className:"text-xs text-muted-foreground font-medium ml-2",children:s({id:"cliViewer.page.title"})})]})]})}function st({focusedPaneId:t}){const{formatMessage:r}=S(),[s,d]=a.useState(!1),[o,i]=a.useState(""),u=L(h=>h.executions),m=N(h=>h.panes),j=N(h=>h.addTab),p=a.useMemo(()=>{if(!t)return new Set;const h=m[t];return h?new Set(h.tabs.map(g=>g.executionId)):new Set},[m,t]),w=a.useMemo(()=>{const g=Object.entries(u).filter(([v,n])=>{if(!o)return!0;const l=o.toLowerCase();return v.toLowerCase().includes(l)||n.tool.toLowerCase().includes(l)||n.mode.toLowerCase().includes(l)});return g.sort((v,n)=>n[1].startTime-v[1].startTime),g},[u,o]),y=a.useCallback((h,g,v)=>{t&&(j(t,h,`${g}-${v}`),d(!1),i(""))},[t,j]);return t?e.jsxs(q,{open:s,onOpenChange:d,children:[e.jsx(H,{asChild:!0,children:e.jsxs("button",{className:b("flex items-center gap-1.5 px-2.5 py-1.5 rounded-md text-xs transition-colors","text-muted-foreground hover:text-foreground hover:bg-muted"),children:[e.jsx(J,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:r({id:"cliViewer.toolbar.addExecution",defaultMessage:"Add"})})]})}),e.jsxs(K,{className:"sm:max-w-md",children:[e.jsx(Q,{children:e.jsx(Y,{children:r({id:"cliViewer.picker.selectExecution",defaultMessage:"Select Execution"})})}),e.jsxs("div",{className:"relative",children:[e.jsx(W,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground"}),e.jsx(X,{placeholder:r({id:"cliViewer.picker.searchExecutions",defaultMessage:"Search executions..."}),value:o,onChange:h=>i(h.target.value),className:"pl-9"})]}),e.jsx("div",{className:"max-h-[300px] overflow-y-auto space-y-2",children:w.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center py-8 text-center",children:[e.jsx(M,{className:"h-8 w-8 text-muted-foreground mb-2"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:Object.keys(u).length===0?r({id:"cliViewer.picker.noExecutions",defaultMessage:"No executions available"}):r({id:"cliViewer.picker.noMatchingExecutions",defaultMessage:"No matching executions"})})]}):w.map(([h,g])=>{const v=p.has(h);return e.jsxs("div",{className:"relative",children:[e.jsxs("button",{onClick:()=>y(h,g.tool,g.mode),disabled:v,className:b("w-full flex items-center gap-3 p-3 rounded-lg","border border-border/50 bg-muted/30","hover:bg-muted/50 hover:border-border","transition-all duration-150","text-left",v&&"opacity-50 cursor-not-allowed"),children:[e.jsx("div",{className:"flex items-center justify-center w-8 h-8 rounded-md bg-primary/10",children:e.jsx(M,{className:"h-4 w-4 text-primary"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:"font-medium text-sm text-foreground truncate",children:[g.tool,"-",g.mode]}),e.jsx("span",{className:b("w-2 h-2 rounded-full shrink-0",ce[g.status].color)})]}),e.jsx("span",{className:"text-xs text-muted-foreground truncate",children:h})]}),e.jsxs("div",{className:"flex items-center gap-1 text-xs text-muted-foreground shrink-0",children:[e.jsx(Z,{className:"h-3 w-3"}),e.jsx("span",{children:et(g.startTime)})]})]}),v&&e.jsx("div",{className:"absolute inset-0 bg-background/60 rounded-lg flex items-center justify-center",children:e.jsx("span",{className:"text-xs text-muted-foreground bg-muted px-2 py-1 rounded",children:r({id:"cliViewer.picker.alreadyOpen",defaultMessage:"Already open"})})})]},h)})})]})]}):null}function rt(t,r){const s=new Set(Object.keys(r));return Object.entries(t).flatMap(([d,o])=>o.tabs.filter(i=>!s.has(i.executionId)).map(i=>({paneId:d,tabId:i.id,executionId:i.executionId})))}const at="split-h";function nt(t){let r=0;const s=d=>{for(const o of d)typeof o=="string"?r++:s(o.children)};return s(t.children),r}function mt(){const[t,r]=ke(),[s,d]=a.useState(!1),o=_(),i=E(),u=F(),{initializeDefaultLayout:m,addTab:j,removeTab:p}=N(),w=L(n=>n.executions),{isLoading:y,isFetching:h}=ne(!0);Ce();const g=a.useRef(new Set);a.useEffect(()=>{Object.values(i).flatMap(l=>l.tabs.map(f=>f.executionId)).forEach(l=>g.current.add(l))},[]),a.useEffect(()=>{const n=Object.keys(i);if(n.length===0)return;const l=N.getState().addTab,f=Object.keys(w).filter(x=>!g.current.has(x));f.length!==0&&f.forEach((x,C)=>{g.current.add(x);const T=w[x],D=T.tool.split("-")[0],V=n[C%n.length];l(V,x,`${D} (${T.mode})`)})},[w,i]),a.useEffect(()=>{if(y||h)return;const n=rt(i,w);n.length!==0&&n.forEach(({paneId:l,tabId:f,executionId:x})=>{g.current.delete(x),p(l,f)})},[w,h,y,i,p]),a.useEffect(()=>{nt(o)===0&&m(at)},[o,m]),a.useEffect(()=>{const n=t.get("executionId");n&&u&&(j(u,n,`Execution ${n.slice(0,8)}`),r(l=>{const f=new URLSearchParams(l);return f.delete("executionId"),f}))},[t,u,j,r]);const v=()=>{d(n=>!n)};return e.jsxs("div",{className:"h-full flex flex-col",children:[e.jsx(tt,{isFullscreen:s,onToggleFullscreen:v}),e.jsx("div",{className:"flex-1 min-h-0 bg-background",children:e.jsx(Ye,{})})]})}export{mt as CliViewerPage,mt as default};
|
|
22
|
-
//# sourceMappingURL=CliViewerPage-
|
|
22
|
+
//# sourceMappingURL=CliViewerPage-BPEGN4TT.js.map
|