claude-code-workflow 6.3.4 → 6.3.6
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/.claude/agents/issue-plan-agent.md +859 -0
- package/.claude/agents/issue-queue-agent.md +702 -0
- package/.claude/commands/issue/execute.md +453 -0
- package/.claude/commands/issue/manage.md +865 -0
- package/.claude/commands/issue/new.md +484 -0
- package/.claude/commands/issue/plan.md +421 -0
- package/.claude/commands/issue/queue.md +354 -0
- package/.claude/commands/{clean.md → workflow/clean.md} +5 -5
- package/.claude/commands/workflow/docs/analyze.md +1467 -0
- package/.claude/commands/workflow/docs/copyright.md +1265 -0
- package/.claude/commands/workflow/execute.md +0 -1
- package/.claude/commands/workflow/tools/conflict-resolution.md +76 -240
- package/.claude/commands/workflow/tools/context-gather.md +0 -2
- package/.claude/commands/workflow/tools/task-generate-agent.md +81 -8
- package/.claude/commands/workflow/tools/task-generate-tdd.md +0 -9
- package/.claude/commands/workflow/tools/test-context-gather.md +2 -3
- package/.claude/commands/workflow/tools/test-task-generate.md +0 -2
- package/.claude/skills/_shared/mermaid-utils.md +584 -0
- package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +0 -2
- package/.claude/skills/command-guide/reference/commands/workflow/execute.md +1 -1
- package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +1 -2
- package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +1 -8
- package/.claude/skills/command-guide/reference/commands/workflow/tools/test-context-gather.md +1 -4
- package/.claude/skills/command-guide/reference/commands/workflow/tools/test-task-generate.md +0 -2
- package/.claude/skills/copyright-docs/SKILL.md +132 -0
- package/.claude/skills/copyright-docs/phases/01-metadata-collection.md +78 -0
- package/.claude/skills/copyright-docs/phases/01.5-project-exploration.md +150 -0
- package/.claude/skills/copyright-docs/phases/02-deep-analysis.md +664 -0
- package/.claude/skills/copyright-docs/phases/02.5-consolidation.md +192 -0
- package/.claude/skills/copyright-docs/phases/04-document-assembly.md +261 -0
- package/.claude/skills/copyright-docs/phases/05-compliance-refinement.md +192 -0
- package/.claude/skills/copyright-docs/specs/cpcc-requirements.md +121 -0
- package/.claude/skills/copyright-docs/templates/agent-base.md +200 -0
- package/.claude/skills/project-analyze/SKILL.md +162 -0
- package/.claude/skills/project-analyze/phases/01-requirements-discovery.md +79 -0
- package/.claude/skills/project-analyze/phases/02-project-exploration.md +176 -0
- package/.claude/skills/project-analyze/phases/03-deep-analysis.md +854 -0
- package/.claude/skills/project-analyze/phases/03.5-consolidation.md +233 -0
- package/.claude/skills/project-analyze/phases/04-report-generation.md +217 -0
- package/.claude/skills/project-analyze/phases/05-iterative-refinement.md +124 -0
- package/.claude/skills/project-analyze/specs/quality-standards.md +115 -0
- package/.claude/skills/project-analyze/specs/writing-style.md +152 -0
- package/.claude/workflows/cli-templates/schemas/conflict-resolution-schema.json +79 -65
- package/.claude/workflows/cli-templates/schemas/issue-task-jsonl-schema.json +136 -0
- package/.claude/workflows/cli-templates/schemas/issues-jsonl-schema.json +74 -0
- package/.claude/workflows/cli-templates/schemas/queue-schema.json +136 -0
- package/.claude/workflows/cli-templates/schemas/registry-schema.json +94 -0
- package/.claude/workflows/cli-templates/schemas/solution-schema.json +120 -0
- package/.claude/workflows/cli-templates/schemas/solutions-jsonl-schema.json +125 -0
- package/.codex/prompts/issue-execute.md +266 -0
- package/README.md +11 -1
- package/ccw/dist/cli.d.ts.map +1 -1
- package/ccw/dist/cli.js +25 -0
- package/ccw/dist/cli.js.map +1 -1
- package/ccw/dist/commands/cli.d.ts.map +1 -1
- package/ccw/dist/commands/cli.js +46 -8
- package/ccw/dist/commands/cli.js.map +1 -1
- package/ccw/dist/commands/issue.d.ts +21 -0
- package/ccw/dist/commands/issue.d.ts.map +1 -0
- package/ccw/dist/commands/issue.js +895 -0
- package/ccw/dist/commands/issue.js.map +1 -0
- package/ccw/dist/core/dashboard-generator-patch.js +1 -0
- package/ccw/dist/core/dashboard-generator-patch.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +2 -2
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/issue-routes.d.ts +34 -0
- package/ccw/dist/core/routes/issue-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/issue-routes.js +487 -0
- package/ccw/dist/core/routes/issue-routes.js.map +1 -0
- package/ccw/dist/core/server.d.ts.map +1 -1
- package/ccw/dist/core/server.js +17 -2
- package/ccw/dist/core/server.js.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.d.ts +7 -3
- package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.js +31 -17
- package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
- package/ccw/dist/tools/smart-search.d.ts +25 -0
- package/ccw/dist/tools/smart-search.d.ts.map +1 -1
- package/ccw/dist/tools/smart-search.js +121 -17
- package/ccw/dist/tools/smart-search.js.map +1 -1
- package/ccw/src/cli.ts +26 -0
- package/ccw/src/commands/cli.ts +49 -7
- package/ccw/src/commands/issue.ts +1184 -0
- package/ccw/src/core/dashboard-generator-patch.ts +1 -0
- package/ccw/src/core/routes/cli-routes.ts +3 -3
- package/ccw/src/core/routes/issue-routes.ts +559 -0
- package/ccw/src/core/server.ts +17 -2
- package/ccw/src/templates/dashboard-css/32-issue-manager.css +2544 -0
- package/ccw/src/templates/dashboard-css/33-cli-stream-viewer.css +467 -0
- package/ccw/src/templates/dashboard-js/components/cli-history.js +40 -13
- package/ccw/src/templates/dashboard-js/components/cli-status.js +26 -2
- package/ccw/src/templates/dashboard-js/components/cli-stream-viewer.js +461 -0
- package/ccw/src/templates/dashboard-js/components/navigation.js +8 -0
- package/ccw/src/templates/dashboard-js/components/notifications.js +16 -0
- package/ccw/src/templates/dashboard-js/i18n.js +290 -2
- package/ccw/src/templates/dashboard-js/views/cli-manager.js +5 -0
- package/ccw/src/templates/dashboard-js/views/history.js +19 -4
- package/ccw/src/templates/dashboard-js/views/hook-manager.js +11 -5
- package/ccw/src/templates/dashboard-js/views/issue-manager.js +1546 -0
- package/ccw/src/templates/dashboard.html +55 -0
- package/ccw/src/tools/claude-cli-tools.ts +37 -20
- package/ccw/src/tools/smart-search.ts +157 -16
- package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/config.py +5 -0
- package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/hybrid_search.py +144 -11
- package/codex-lens/src/codexlens/search/ranking.py +267 -1
- package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/chunker.py +55 -10
- package/package.json +2 -2
|
@@ -39,7 +39,21 @@ const i18n = {
|
|
|
39
39
|
'header.refreshWorkspace': 'Refresh workspace',
|
|
40
40
|
'header.toggleTheme': 'Toggle theme',
|
|
41
41
|
'header.language': 'Language',
|
|
42
|
-
|
|
42
|
+
'header.cliStream': 'CLI Stream Viewer',
|
|
43
|
+
|
|
44
|
+
// CLI Stream Viewer
|
|
45
|
+
'cliStream.title': 'CLI Stream',
|
|
46
|
+
'cliStream.clearCompleted': 'Clear Completed',
|
|
47
|
+
'cliStream.noStreams': 'No active CLI executions',
|
|
48
|
+
'cliStream.noStreamsHint': 'Start a CLI command to see streaming output',
|
|
49
|
+
'cliStream.running': 'Running',
|
|
50
|
+
'cliStream.completed': 'Completed',
|
|
51
|
+
'cliStream.error': 'Error',
|
|
52
|
+
'cliStream.autoScroll': 'Auto-scroll',
|
|
53
|
+
'cliStream.close': 'Close',
|
|
54
|
+
'cliStream.cannotCloseRunning': 'Cannot close running execution',
|
|
55
|
+
'cliStream.lines': 'lines',
|
|
56
|
+
|
|
43
57
|
// Sidebar - Project section
|
|
44
58
|
'nav.project': 'Project',
|
|
45
59
|
'nav.overview': 'Overview',
|
|
@@ -1711,6 +1725,136 @@ const i18n = {
|
|
|
1711
1725
|
'coreMemory.belongsToClusters': 'Belongs to Clusters',
|
|
1712
1726
|
'coreMemory.relationsError': 'Failed to load relations',
|
|
1713
1727
|
|
|
1728
|
+
// Issue Manager
|
|
1729
|
+
'nav.issues': 'Issues',
|
|
1730
|
+
'nav.issueManager': 'Manager',
|
|
1731
|
+
'title.issueManager': 'Issue Manager',
|
|
1732
|
+
// issues.* keys (used by issue-manager.js)
|
|
1733
|
+
'issues.title': 'Issue Manager',
|
|
1734
|
+
'issues.description': 'Manage issues, solutions, and execution queue',
|
|
1735
|
+
'issues.viewIssues': 'Issues',
|
|
1736
|
+
'issues.viewQueue': 'Queue',
|
|
1737
|
+
'issues.filterStatus': 'Status',
|
|
1738
|
+
'issues.filterAll': 'All',
|
|
1739
|
+
'issues.noIssues': 'No issues found',
|
|
1740
|
+
'issues.createHint': 'Click "Create" to add your first issue',
|
|
1741
|
+
'issues.priority': 'Priority',
|
|
1742
|
+
'issues.tasks': 'tasks',
|
|
1743
|
+
'issues.solutions': 'solutions',
|
|
1744
|
+
'issues.boundSolution': 'Bound',
|
|
1745
|
+
'issues.queueEmpty': 'Queue is empty',
|
|
1746
|
+
'issues.reorderHint': 'Drag items within a group to reorder',
|
|
1747
|
+
'issues.parallelGroup': 'Parallel',
|
|
1748
|
+
'issues.sequentialGroup': 'Sequential',
|
|
1749
|
+
'issues.dependsOn': 'Depends on',
|
|
1750
|
+
// Create & Search
|
|
1751
|
+
'issues.create': 'Create',
|
|
1752
|
+
'issues.createTitle': 'Create New Issue',
|
|
1753
|
+
'issues.issueId': 'Issue ID',
|
|
1754
|
+
'issues.issueTitle': 'Title',
|
|
1755
|
+
'issues.issueContext': 'Context',
|
|
1756
|
+
'issues.issuePriority': 'Priority',
|
|
1757
|
+
'issues.titlePlaceholder': 'Brief description of the issue',
|
|
1758
|
+
'issues.contextPlaceholder': 'Detailed description, requirements, etc.',
|
|
1759
|
+
'issues.priorityLowest': 'Lowest',
|
|
1760
|
+
'issues.priorityLow': 'Low',
|
|
1761
|
+
'issues.priorityMedium': 'Medium',
|
|
1762
|
+
'issues.priorityHigh': 'High',
|
|
1763
|
+
'issues.priorityCritical': 'Critical',
|
|
1764
|
+
'issues.searchPlaceholder': 'Search issues...',
|
|
1765
|
+
'issues.showing': 'Showing',
|
|
1766
|
+
'issues.of': 'of',
|
|
1767
|
+
'issues.issues': 'issues',
|
|
1768
|
+
'issues.tryDifferentFilter': 'Try adjusting your search or filters',
|
|
1769
|
+
'issues.createFirst': 'Create First Issue',
|
|
1770
|
+
'issues.idRequired': 'Issue ID is required',
|
|
1771
|
+
'issues.titleRequired': 'Title is required',
|
|
1772
|
+
'issues.created': 'Issue created successfully',
|
|
1773
|
+
'issues.confirmDelete': 'Are you sure you want to delete this issue?',
|
|
1774
|
+
'issues.deleted': 'Issue deleted',
|
|
1775
|
+
'issues.idAutoGenerated': 'Auto-generated',
|
|
1776
|
+
'issues.regenerateId': 'Regenerate ID',
|
|
1777
|
+
// Solution detail
|
|
1778
|
+
'issues.solutionDetail': 'Solution Details',
|
|
1779
|
+
'issues.bind': 'Bind',
|
|
1780
|
+
'issues.unbind': 'Unbind',
|
|
1781
|
+
'issues.bound': 'Bound',
|
|
1782
|
+
'issues.totalTasks': 'Total Tasks',
|
|
1783
|
+
'issues.bindStatus': 'Bind Status',
|
|
1784
|
+
'issues.createdAt': 'Created',
|
|
1785
|
+
'issues.taskList': 'Task List',
|
|
1786
|
+
'issues.noTasks': 'No tasks in this solution',
|
|
1787
|
+
'issues.noSolutions': 'No solutions',
|
|
1788
|
+
'issues.viewJson': 'View Raw JSON',
|
|
1789
|
+
'issues.scope': 'Scope',
|
|
1790
|
+
'issues.modificationPoints': 'Modification Points',
|
|
1791
|
+
'issues.implementationSteps': 'Implementation Steps',
|
|
1792
|
+
'issues.acceptanceCriteria': 'Acceptance Criteria',
|
|
1793
|
+
'issues.dependencies': 'Dependencies',
|
|
1794
|
+
'issues.solutionBound': 'Solution bound successfully',
|
|
1795
|
+
'issues.solutionUnbound': 'Solution unbound',
|
|
1796
|
+
// Queue operations
|
|
1797
|
+
'issues.queueEmptyHint': 'Generate execution queue from bound solutions',
|
|
1798
|
+
'issues.createQueue': 'Create Queue',
|
|
1799
|
+
'issues.regenerate': 'Regenerate',
|
|
1800
|
+
'issues.regenerateQueue': 'Regenerate Queue',
|
|
1801
|
+
'issues.refreshQueue': 'Refresh',
|
|
1802
|
+
'issues.executionGroups': 'groups',
|
|
1803
|
+
'issues.totalItems': 'items',
|
|
1804
|
+
'issues.queueRefreshed': 'Queue refreshed',
|
|
1805
|
+
'issues.confirmCreateQueue': 'This will execute /issue:queue command via Claude Code CLI to generate execution queue from bound solutions.\n\nContinue?',
|
|
1806
|
+
'issues.creatingQueue': 'Creating execution queue...',
|
|
1807
|
+
'issues.queueExecutionStarted': 'Queue generation started',
|
|
1808
|
+
'issues.queueCreated': 'Queue created successfully',
|
|
1809
|
+
'issues.queueCreationFailed': 'Queue creation failed',
|
|
1810
|
+
'issues.queueCommandHint': 'Run one of the following commands in your terminal to generate the execution queue from bound solutions:',
|
|
1811
|
+
'issues.queueCommandInfo': 'After running the command, click "Refresh" to see the updated queue.',
|
|
1812
|
+
'issues.alternative': 'Alternative',
|
|
1813
|
+
'issues.refreshAfter': 'Refresh Queue',
|
|
1814
|
+
// issue.* keys (legacy)
|
|
1815
|
+
'issue.viewIssues': 'Issues',
|
|
1816
|
+
'issue.viewQueue': 'Queue',
|
|
1817
|
+
'issue.filterAll': 'All',
|
|
1818
|
+
'issue.filterStatus': 'Status',
|
|
1819
|
+
'issue.filterPriority': 'Priority',
|
|
1820
|
+
'issue.noIssues': 'No issues found',
|
|
1821
|
+
'issue.noIssuesHint': 'Issues will appear here when created via /issue:plan command',
|
|
1822
|
+
'issue.noQueue': 'No tasks in queue',
|
|
1823
|
+
'issue.noQueueHint': 'Run /issue:queue to form execution queue from bound solutions',
|
|
1824
|
+
'issue.tasks': 'tasks',
|
|
1825
|
+
'issue.solutions': 'solutions',
|
|
1826
|
+
'issue.parallel': 'Parallel',
|
|
1827
|
+
'issue.sequential': 'Sequential',
|
|
1828
|
+
'issue.status.registered': 'Registered',
|
|
1829
|
+
'issue.status.planned': 'Planned',
|
|
1830
|
+
'issue.status.queued': 'Queued',
|
|
1831
|
+
'issue.status.executing': 'Executing',
|
|
1832
|
+
'issue.status.completed': 'Completed',
|
|
1833
|
+
'issue.status.failed': 'Failed',
|
|
1834
|
+
'issue.priority.critical': 'Critical',
|
|
1835
|
+
'issue.priority.high': 'High',
|
|
1836
|
+
'issue.priority.medium': 'Medium',
|
|
1837
|
+
'issue.priority.low': 'Low',
|
|
1838
|
+
'issue.detail.context': 'Context',
|
|
1839
|
+
'issue.detail.solutions': 'Solutions',
|
|
1840
|
+
'issue.detail.tasks': 'Tasks',
|
|
1841
|
+
'issue.detail.noSolutions': 'No solutions available',
|
|
1842
|
+
'issue.detail.noTasks': 'No tasks available',
|
|
1843
|
+
'issue.detail.bound': 'Bound',
|
|
1844
|
+
'issue.detail.modificationPoints': 'Modification Points',
|
|
1845
|
+
'issue.detail.implementation': 'Implementation Steps',
|
|
1846
|
+
'issue.detail.acceptance': 'Acceptance Criteria',
|
|
1847
|
+
'issue.queue.reordered': 'Queue reordered',
|
|
1848
|
+
'issue.queue.reorderFailed': 'Failed to reorder queue',
|
|
1849
|
+
'issue.saved': 'Issue saved',
|
|
1850
|
+
'issue.saveFailed': 'Failed to save issue',
|
|
1851
|
+
'issue.taskUpdated': 'Task updated',
|
|
1852
|
+
'issue.taskUpdateFailed': 'Failed to update task',
|
|
1853
|
+
'issue.conflicts': 'Conflicts',
|
|
1854
|
+
'issue.noConflicts': 'No conflicts detected',
|
|
1855
|
+
'issue.conflict.resolved': 'Resolved',
|
|
1856
|
+
'issue.conflict.pending': 'Pending',
|
|
1857
|
+
|
|
1714
1858
|
// Common additions
|
|
1715
1859
|
'common.copyId': 'Copy ID',
|
|
1716
1860
|
'common.copied': 'Copied!',
|
|
@@ -1748,7 +1892,21 @@ const i18n = {
|
|
|
1748
1892
|
'header.refreshWorkspace': '刷新工作区',
|
|
1749
1893
|
'header.toggleTheme': '切换主题',
|
|
1750
1894
|
'header.language': '语言',
|
|
1751
|
-
|
|
1895
|
+
'header.cliStream': 'CLI 流式输出',
|
|
1896
|
+
|
|
1897
|
+
// CLI Stream Viewer
|
|
1898
|
+
'cliStream.title': 'CLI 流式输出',
|
|
1899
|
+
'cliStream.clearCompleted': '清除已完成',
|
|
1900
|
+
'cliStream.noStreams': '没有活动的 CLI 执行',
|
|
1901
|
+
'cliStream.noStreamsHint': '启动 CLI 命令以查看流式输出',
|
|
1902
|
+
'cliStream.running': '运行中',
|
|
1903
|
+
'cliStream.completed': '已完成',
|
|
1904
|
+
'cliStream.error': '错误',
|
|
1905
|
+
'cliStream.autoScroll': '自动滚动',
|
|
1906
|
+
'cliStream.close': '关闭',
|
|
1907
|
+
'cliStream.cannotCloseRunning': '无法关闭运行中的执行',
|
|
1908
|
+
'cliStream.lines': '行',
|
|
1909
|
+
|
|
1752
1910
|
// Sidebar - Project section
|
|
1753
1911
|
'nav.project': '项目',
|
|
1754
1912
|
'nav.overview': '概览',
|
|
@@ -3429,6 +3587,136 @@ const i18n = {
|
|
|
3429
3587
|
'coreMemory.belongsToClusters': '所属聚类',
|
|
3430
3588
|
'coreMemory.relationsError': '加载关联失败',
|
|
3431
3589
|
|
|
3590
|
+
// Issue Manager
|
|
3591
|
+
'nav.issues': '议题',
|
|
3592
|
+
'nav.issueManager': '管理器',
|
|
3593
|
+
'title.issueManager': '议题管理器',
|
|
3594
|
+
// issues.* keys (used by issue-manager.js)
|
|
3595
|
+
'issues.title': '议题管理器',
|
|
3596
|
+
'issues.description': '管理议题、解决方案和执行队列',
|
|
3597
|
+
'issues.viewIssues': '议题',
|
|
3598
|
+
'issues.viewQueue': '队列',
|
|
3599
|
+
'issues.filterStatus': '状态',
|
|
3600
|
+
'issues.filterAll': '全部',
|
|
3601
|
+
'issues.noIssues': '暂无议题',
|
|
3602
|
+
'issues.createHint': '点击"创建"添加您的第一个议题',
|
|
3603
|
+
'issues.priority': '优先级',
|
|
3604
|
+
'issues.tasks': '任务',
|
|
3605
|
+
'issues.solutions': '解决方案',
|
|
3606
|
+
'issues.boundSolution': '已绑定',
|
|
3607
|
+
'issues.queueEmpty': '队列为空',
|
|
3608
|
+
'issues.reorderHint': '在组内拖拽项目以重新排序',
|
|
3609
|
+
'issues.parallelGroup': '并行',
|
|
3610
|
+
'issues.sequentialGroup': '顺序',
|
|
3611
|
+
'issues.dependsOn': '依赖于',
|
|
3612
|
+
// Create & Search
|
|
3613
|
+
'issues.create': '创建',
|
|
3614
|
+
'issues.createTitle': '创建新议题',
|
|
3615
|
+
'issues.issueId': '议题ID',
|
|
3616
|
+
'issues.issueTitle': '标题',
|
|
3617
|
+
'issues.issueContext': '上下文',
|
|
3618
|
+
'issues.issuePriority': '优先级',
|
|
3619
|
+
'issues.titlePlaceholder': '简要描述议题',
|
|
3620
|
+
'issues.contextPlaceholder': '详细描述、需求等',
|
|
3621
|
+
'issues.priorityLowest': '最低',
|
|
3622
|
+
'issues.priorityLow': '低',
|
|
3623
|
+
'issues.priorityMedium': '中',
|
|
3624
|
+
'issues.priorityHigh': '高',
|
|
3625
|
+
'issues.priorityCritical': '紧急',
|
|
3626
|
+
'issues.searchPlaceholder': '搜索议题...',
|
|
3627
|
+
'issues.showing': '显示',
|
|
3628
|
+
'issues.of': '共',
|
|
3629
|
+
'issues.issues': '条议题',
|
|
3630
|
+
'issues.tryDifferentFilter': '尝试调整搜索或筛选条件',
|
|
3631
|
+
'issues.createFirst': '创建第一个议题',
|
|
3632
|
+
'issues.idRequired': '议题ID为必填',
|
|
3633
|
+
'issues.titleRequired': '标题为必填',
|
|
3634
|
+
'issues.created': '议题创建成功',
|
|
3635
|
+
'issues.confirmDelete': '确定要删除此议题吗?',
|
|
3636
|
+
'issues.deleted': '议题已删除',
|
|
3637
|
+
'issues.idAutoGenerated': '自动生成',
|
|
3638
|
+
'issues.regenerateId': '重新生成ID',
|
|
3639
|
+
// Solution detail
|
|
3640
|
+
'issues.solutionDetail': '解决方案详情',
|
|
3641
|
+
'issues.bind': '绑定',
|
|
3642
|
+
'issues.unbind': '解绑',
|
|
3643
|
+
'issues.bound': '已绑定',
|
|
3644
|
+
'issues.totalTasks': '任务总数',
|
|
3645
|
+
'issues.bindStatus': '绑定状态',
|
|
3646
|
+
'issues.createdAt': '创建时间',
|
|
3647
|
+
'issues.taskList': '任务列表',
|
|
3648
|
+
'issues.noTasks': '此解决方案无任务',
|
|
3649
|
+
'issues.noSolutions': '暂无解决方案',
|
|
3650
|
+
'issues.viewJson': '查看原始JSON',
|
|
3651
|
+
'issues.scope': '作用域',
|
|
3652
|
+
'issues.modificationPoints': '修改点',
|
|
3653
|
+
'issues.implementationSteps': '实现步骤',
|
|
3654
|
+
'issues.acceptanceCriteria': '验收标准',
|
|
3655
|
+
'issues.dependencies': '依赖项',
|
|
3656
|
+
'issues.solutionBound': '解决方案已绑定',
|
|
3657
|
+
'issues.solutionUnbound': '解决方案已解绑',
|
|
3658
|
+
// Queue operations
|
|
3659
|
+
'issues.queueEmptyHint': '从绑定的解决方案生成执行队列',
|
|
3660
|
+
'issues.createQueue': '创建队列',
|
|
3661
|
+
'issues.regenerate': '重新生成',
|
|
3662
|
+
'issues.regenerateQueue': '重新生成队列',
|
|
3663
|
+
'issues.refreshQueue': '刷新',
|
|
3664
|
+
'issues.executionGroups': '个执行组',
|
|
3665
|
+
'issues.totalItems': '个任务',
|
|
3666
|
+
'issues.queueRefreshed': '队列已刷新',
|
|
3667
|
+
'issues.confirmCreateQueue': '这将通过 Claude Code CLI 执行 /issue:queue 命令,从绑定的解决方案生成执行队列。\n\n是否继续?',
|
|
3668
|
+
'issues.creatingQueue': '正在创建执行队列...',
|
|
3669
|
+
'issues.queueExecutionStarted': '队列生成已启动',
|
|
3670
|
+
'issues.queueCreated': '队列创建成功',
|
|
3671
|
+
'issues.queueCreationFailed': '队列创建失败',
|
|
3672
|
+
'issues.queueCommandHint': '在终端中运行以下命令之一,从绑定的解决方案生成执行队列:',
|
|
3673
|
+
'issues.queueCommandInfo': '运行命令后,点击"刷新"查看更新后的队列。',
|
|
3674
|
+
'issues.alternative': '或者',
|
|
3675
|
+
'issues.refreshAfter': '刷新队列',
|
|
3676
|
+
// issue.* keys (legacy)
|
|
3677
|
+
'issue.viewIssues': '议题',
|
|
3678
|
+
'issue.viewQueue': '队列',
|
|
3679
|
+
'issue.filterAll': '全部',
|
|
3680
|
+
'issue.filterStatus': '状态',
|
|
3681
|
+
'issue.filterPriority': '优先级',
|
|
3682
|
+
'issue.noIssues': '暂无议题',
|
|
3683
|
+
'issue.noIssuesHint': '通过 /issue:plan 命令创建的议题将显示在此处',
|
|
3684
|
+
'issue.noQueue': '队列中暂无任务',
|
|
3685
|
+
'issue.noQueueHint': '运行 /issue:queue 从绑定的解决方案生成执行队列',
|
|
3686
|
+
'issue.tasks': '任务',
|
|
3687
|
+
'issue.solutions': '解决方案',
|
|
3688
|
+
'issue.parallel': '并行',
|
|
3689
|
+
'issue.sequential': '顺序',
|
|
3690
|
+
'issue.status.registered': '已注册',
|
|
3691
|
+
'issue.status.planned': '已规划',
|
|
3692
|
+
'issue.status.queued': '已入队',
|
|
3693
|
+
'issue.status.executing': '执行中',
|
|
3694
|
+
'issue.status.completed': '已完成',
|
|
3695
|
+
'issue.status.failed': '失败',
|
|
3696
|
+
'issue.priority.critical': '紧急',
|
|
3697
|
+
'issue.priority.high': '高',
|
|
3698
|
+
'issue.priority.medium': '中',
|
|
3699
|
+
'issue.priority.low': '低',
|
|
3700
|
+
'issue.detail.context': '上下文',
|
|
3701
|
+
'issue.detail.solutions': '解决方案',
|
|
3702
|
+
'issue.detail.tasks': '任务',
|
|
3703
|
+
'issue.detail.noSolutions': '暂无解决方案',
|
|
3704
|
+
'issue.detail.noTasks': '暂无任务',
|
|
3705
|
+
'issue.detail.bound': '已绑定',
|
|
3706
|
+
'issue.detail.modificationPoints': '修改点',
|
|
3707
|
+
'issue.detail.implementation': '实现步骤',
|
|
3708
|
+
'issue.detail.acceptance': '验收标准',
|
|
3709
|
+
'issue.queue.reordered': '队列已重排',
|
|
3710
|
+
'issue.queue.reorderFailed': '队列重排失败',
|
|
3711
|
+
'issue.saved': '议题已保存',
|
|
3712
|
+
'issue.saveFailed': '保存议题失败',
|
|
3713
|
+
'issue.taskUpdated': '任务已更新',
|
|
3714
|
+
'issue.taskUpdateFailed': '更新任务失败',
|
|
3715
|
+
'issue.conflicts': '冲突',
|
|
3716
|
+
'issue.noConflicts': '未检测到冲突',
|
|
3717
|
+
'issue.conflict.resolved': '已解决',
|
|
3718
|
+
'issue.conflict.pending': '待处理',
|
|
3719
|
+
|
|
3432
3720
|
// Common additions
|
|
3433
3721
|
'common.copyId': '复制 ID',
|
|
3434
3722
|
'common.copied': '已复制!',
|
|
@@ -996,9 +996,14 @@ function renderCliSettingsSection() {
|
|
|
996
996
|
'<select class="cli-setting-select" onchange="setCodeIndexMcpProvider(this.value)">' +
|
|
997
997
|
'<option value="codexlens"' + (codeIndexMcpProvider === 'codexlens' ? ' selected' : '') + '>CodexLens</option>' +
|
|
998
998
|
'<option value="ace"' + (codeIndexMcpProvider === 'ace' ? ' selected' : '') + '>ACE (Augment)</option>' +
|
|
999
|
+
'<option value="none"' + (codeIndexMcpProvider === 'none' ? ' selected' : '') + '>None (Built-in)</option>' +
|
|
999
1000
|
'</select>' +
|
|
1000
1001
|
'</div>' +
|
|
1001
1002
|
'<p class="cli-setting-desc">' + t('cli.codeIndexMcpDesc') + '</p>' +
|
|
1003
|
+
'<p class="cli-setting-desc text-xs text-muted-foreground">' +
|
|
1004
|
+
'<i data-lucide="file-text" class="w-3 h-3 inline-block mr-1"></i>' +
|
|
1005
|
+
'Current: <code class="bg-muted px-1 rounded">' + getContextToolsFileName(codeIndexMcpProvider) + '</code>' +
|
|
1006
|
+
'</p>' +
|
|
1002
1007
|
'</div>' +
|
|
1003
1008
|
'</div>';
|
|
1004
1009
|
|
|
@@ -69,8 +69,10 @@ async function renderCliHistoryView() {
|
|
|
69
69
|
'</div>'
|
|
70
70
|
: '';
|
|
71
71
|
|
|
72
|
+
// Normalize sourceDir: convert backslashes to forward slashes for safe onclick handling
|
|
73
|
+
var normalizedSourceDir = (exec.sourceDir || '').replace(/\\/g, '/');
|
|
72
74
|
historyHtml += '<div class="history-item' + (isSelected ? ' history-item-selected' : '') + '" ' +
|
|
73
|
-
'onclick="' + (isMultiSelectMode ? 'toggleExecutionSelection(\'' + exec.id + '\')' : 'showExecutionDetail(\'' + exec.id +
|
|
75
|
+
'onclick="' + (isMultiSelectMode ? 'toggleExecutionSelection(\'' + exec.id + '\')' : 'showExecutionDetail(\'' + exec.id + '\', \'' + normalizedSourceDir.replace(/'/g, "\\'") + '\')') + '">' +
|
|
74
76
|
checkboxHtml +
|
|
75
77
|
'<div class="history-item-main">' +
|
|
76
78
|
'<div class="history-item-header">' +
|
|
@@ -87,14 +89,17 @@ async function renderCliHistoryView() {
|
|
|
87
89
|
'<div class="history-item-meta">' +
|
|
88
90
|
'<span class="history-time"><i data-lucide="clock" class="w-3 h-3"></i> ' + timeAgo + '</span>' +
|
|
89
91
|
'<span class="history-duration"><i data-lucide="timer" class="w-3 h-3"></i> ' + duration + '</span>' +
|
|
90
|
-
'<span class="history-id"><i data-lucide="hash" class="w-3 h-3"></i> ' + exec.id.split('-')
|
|
92
|
+
'<span class="history-id" title="' + exec.id + '"><i data-lucide="hash" class="w-3 h-3"></i> ' + exec.id.substring(0, 13) + '...' + exec.id.split('-').pop() + '</span>' +
|
|
91
93
|
'</div>' +
|
|
92
94
|
'</div>' +
|
|
93
95
|
'<div class="history-item-actions">' +
|
|
94
|
-
'<button class="btn-icon" onclick="event.stopPropagation();
|
|
96
|
+
'<button class="btn-icon" onclick="event.stopPropagation(); copyExecutionId(\'' + exec.id + '\')" title="Copy ID">' +
|
|
97
|
+
'<i data-lucide="copy" class="w-4 h-4"></i>' +
|
|
98
|
+
'</button>' +
|
|
99
|
+
'<button class="btn-icon" onclick="event.stopPropagation(); showExecutionDetail(\'' + exec.id + '\', \'' + normalizedSourceDir.replace(/'/g, "\\'") + '\')" title="View Details">' +
|
|
95
100
|
'<i data-lucide="eye" class="w-4 h-4"></i>' +
|
|
96
101
|
'</button>' +
|
|
97
|
-
'<button class="btn-icon btn-danger" onclick="event.stopPropagation(); confirmDeleteExecution(\'' + exec.id +
|
|
102
|
+
'<button class="btn-icon btn-danger" onclick="event.stopPropagation(); confirmDeleteExecution(\'' + exec.id + '\', \'' + normalizedSourceDir.replace(/'/g, "\\'") + '\')" title="Delete">' +
|
|
98
103
|
'<i data-lucide="trash-2" class="w-4 h-4"></i>' +
|
|
99
104
|
'</button>' +
|
|
100
105
|
'</div>' +
|
|
@@ -179,6 +184,16 @@ async function renderCliHistoryView() {
|
|
|
179
184
|
}
|
|
180
185
|
|
|
181
186
|
// ========== Actions ==========
|
|
187
|
+
async function copyExecutionId(executionId) {
|
|
188
|
+
try {
|
|
189
|
+
await navigator.clipboard.writeText(executionId);
|
|
190
|
+
showRefreshToast('ID copied: ' + executionId, 'success');
|
|
191
|
+
} catch (err) {
|
|
192
|
+
console.error('Failed to copy ID:', err);
|
|
193
|
+
showRefreshToast('Failed to copy ID', 'error');
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
182
197
|
async function filterCliHistoryView(tool) {
|
|
183
198
|
cliHistoryFilter = tool || null;
|
|
184
199
|
await loadCliHistory();
|
|
@@ -168,16 +168,22 @@ async function loadAvailableSkills() {
|
|
|
168
168
|
if (!response.ok) throw new Error('Failed to load skills');
|
|
169
169
|
const data = await response.json();
|
|
170
170
|
|
|
171
|
+
// Combine project and user skills (API returns { projectSkills: [], userSkills: [] })
|
|
172
|
+
const allSkills = [
|
|
173
|
+
...(data.projectSkills || []).map(s => ({ ...s, scope: 'project' })),
|
|
174
|
+
...(data.userSkills || []).map(s => ({ ...s, scope: 'user' }))
|
|
175
|
+
];
|
|
176
|
+
|
|
171
177
|
const container = document.getElementById('skill-discovery-skill-context');
|
|
172
|
-
if (container
|
|
173
|
-
if (
|
|
178
|
+
if (container) {
|
|
179
|
+
if (allSkills.length === 0) {
|
|
174
180
|
container.innerHTML = `
|
|
175
181
|
<span class="font-mono bg-muted px-1.5 py-0.5 rounded">${t('hook.wizard.availableSkills')}</span>
|
|
176
182
|
<span class="text-muted-foreground ml-2">${t('hook.wizard.noSkillsFound').split('.')[0]}</span>
|
|
177
183
|
`;
|
|
178
184
|
} else {
|
|
179
|
-
const skillBadges =
|
|
180
|
-
<span class="px-2 py-0.5 bg-emerald-500/10 text-emerald-500 rounded" title="${escapeHtml(skill.description)}">${escapeHtml(skill.name)}</span>
|
|
185
|
+
const skillBadges = allSkills.map(skill => `
|
|
186
|
+
<span class="px-2 py-0.5 bg-emerald-500/10 text-emerald-500 rounded" title="${escapeHtml(skill.description || '')}">${escapeHtml(skill.name)}</span>
|
|
181
187
|
`).join('');
|
|
182
188
|
container.innerHTML = `
|
|
183
189
|
<span class="font-mono bg-muted px-1.5 py-0.5 rounded">${t('hook.wizard.availableSkills')}</span>
|
|
@@ -187,7 +193,7 @@ async function loadAvailableSkills() {
|
|
|
187
193
|
}
|
|
188
194
|
|
|
189
195
|
// Store skills for wizard use
|
|
190
|
-
window.availableSkills =
|
|
196
|
+
window.availableSkills = allSkills;
|
|
191
197
|
} catch (err) {
|
|
192
198
|
console.error('Failed to load skills:', err);
|
|
193
199
|
const container = document.getElementById('skill-discovery-skill-context');
|