claude-code-workflow 6.3.27 → 6.3.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/CLAUDE.md +7 -1
- package/.claude/agents/action-planning-agent.md +1 -0
- package/.claude/agents/cli-discuss-agent.md +391 -0
- package/.claude/agents/cli-execution-agent.md +2 -0
- package/.claude/agents/cli-explore-agent.md +2 -1
- package/.claude/agents/cli-lite-planning-agent.md +1 -0
- package/.claude/agents/cli-planning-agent.md +1 -0
- package/.claude/agents/code-developer.md +1 -0
- package/.claude/agents/conceptual-planning-agent.md +2 -0
- package/.claude/agents/context-search-agent.md +1 -0
- package/.claude/agents/debug-explore-agent.md +2 -0
- package/.claude/agents/doc-generator.md +1 -0
- package/.claude/agents/issue-plan-agent.md +2 -1
- package/.claude/agents/issue-queue-agent.md +2 -1
- package/.claude/agents/memory-bridge.md +2 -0
- package/.claude/agents/test-context-search-agent.md +2 -0
- package/.claude/agents/test-fix-agent.md +1 -0
- package/.claude/agents/ui-design-agent.md +2 -0
- package/.claude/agents/universal-executor.md +1 -0
- package/.claude/commands/issue/execute.md +269 -176
- package/.claude/commands/workflow/debug.md +6 -0
- package/.claude/commands/workflow/execute.md +4 -0
- package/.claude/commands/workflow/lite-execute.md +4 -0
- package/.claude/commands/workflow/lite-lite-lite.md +433 -0
- package/.claude/commands/workflow/multi-cli-plan.md +510 -0
- package/.claude/commands/workflow/review-fix.md +4 -0
- package/.claude/commands/workflow/test-cycle-execute.md +4 -0
- package/.claude/skills/ccw/SKILL.md +262 -372
- package/.claude/skills/ccw/command.json +547 -0
- package/.claude/skills/ccw-help/SKILL.md +46 -107
- package/.claude/skills/ccw-help/command.json +511 -0
- package/.claude/skills/skill-tuning/SKILL.md +303 -0
- package/.claude/skills/skill-tuning/phases/actions/action-abort.md +164 -0
- package/.claude/skills/skill-tuning/phases/actions/action-analyze-requirements.md +406 -0
- package/.claude/skills/skill-tuning/phases/actions/action-apply-fix.md +206 -0
- package/.claude/skills/skill-tuning/phases/actions/action-complete.md +195 -0
- package/.claude/skills/skill-tuning/phases/actions/action-diagnose-agent.md +317 -0
- package/.claude/skills/skill-tuning/phases/actions/action-diagnose-context.md +243 -0
- package/.claude/skills/skill-tuning/phases/actions/action-diagnose-dataflow.md +318 -0
- package/.claude/skills/skill-tuning/phases/actions/action-diagnose-docs.md +299 -0
- package/.claude/skills/skill-tuning/phases/actions/action-diagnose-memory.md +269 -0
- package/.claude/skills/skill-tuning/phases/actions/action-diagnose-token-consumption.md +200 -0
- package/.claude/skills/skill-tuning/phases/actions/action-gemini-analysis.md +322 -0
- package/.claude/skills/skill-tuning/phases/actions/action-generate-report.md +228 -0
- package/.claude/skills/skill-tuning/phases/actions/action-init.md +149 -0
- package/.claude/skills/skill-tuning/phases/actions/action-propose-fixes.md +317 -0
- package/.claude/skills/skill-tuning/phases/actions/action-verify.md +222 -0
- package/.claude/skills/skill-tuning/phases/orchestrator.md +377 -0
- package/.claude/skills/skill-tuning/phases/state-schema.md +378 -0
- package/.claude/skills/skill-tuning/specs/category-mappings.json +284 -0
- package/.claude/skills/skill-tuning/specs/dimension-mapping.md +212 -0
- package/.claude/skills/skill-tuning/specs/problem-taxonomy.md +318 -0
- package/.claude/skills/skill-tuning/specs/quality-gates.md +263 -0
- package/.claude/skills/skill-tuning/specs/skill-authoring-principles.md +189 -0
- package/.claude/skills/skill-tuning/specs/tuning-strategies.md +1537 -0
- package/.claude/skills/skill-tuning/templates/diagnosis-report.md +153 -0
- package/.claude/skills/skill-tuning/templates/fix-proposal.md +204 -0
- package/.claude/workflows/cli-templates/schemas/multi-cli-discussion-schema.json +421 -0
- package/.claude/workflows/cli-tools-usage.md +0 -41
- package/.codex/prompts/issue-execute.md +72 -12
- package/README.md +3 -0
- package/ccw/dist/core/data-aggregator.d.ts +2 -0
- package/ccw/dist/core/data-aggregator.d.ts.map +1 -1
- package/ccw/dist/core/data-aggregator.js +5 -2
- package/ccw/dist/core/data-aggregator.js.map +1 -1
- package/ccw/dist/core/lite-scanner.d.ts +2 -1
- package/ccw/dist/core/lite-scanner.d.ts.map +1 -1
- package/ccw/dist/core/lite-scanner.js +348 -6
- package/ccw/dist/core/lite-scanner.js.map +1 -1
- package/ccw/dist/core/routes/session-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/session-routes.js +166 -48
- package/ccw/dist/core/routes/session-routes.js.map +1 -1
- package/ccw/dist/core/routes/system-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/system-routes.js +87 -0
- package/ccw/dist/core/routes/system-routes.js.map +1 -1
- package/ccw/dist/core/server.js +2 -2
- package/ccw/dist/core/server.js.map +1 -1
- package/ccw/dist/tools/memory-update-queue.d.ts.map +1 -1
- package/ccw/dist/tools/memory-update-queue.js +5 -11
- package/ccw/dist/tools/memory-update-queue.js.map +1 -1
- package/ccw/scripts/IMPLEMENTATION-SUMMARY.md +226 -0
- package/ccw/scripts/QUICK-REFERENCE.md +135 -0
- package/ccw/scripts/README-memory-embedder.md +157 -0
- package/ccw/scripts/__pycache__/memory_embedder.cpython-313.pyc +0 -0
- package/ccw/scripts/__pycache__/test_memory_embedder.cpython-313-pytest-8.4.2.pyc +0 -0
- package/ccw/scripts/memory-embedder-example.ts +184 -0
- package/ccw/scripts/memory_embedder.py +428 -0
- package/ccw/scripts/test_memory_embedder.py +245 -0
- package/ccw/src/core/data-aggregator.ts +7 -2
- package/ccw/src/core/lite-scanner.ts +495 -6
- package/ccw/src/core/routes/session-routes.ts +201 -48
- package/ccw/src/core/routes/system-routes.ts +102 -0
- package/ccw/src/core/server.ts +2 -2
- package/ccw/src/templates/dashboard-css/01-base.css +8 -0
- package/ccw/src/templates/dashboard-css/02-session.css +81 -0
- package/ccw/src/templates/dashboard-css/03-tasks.css +5 -0
- package/ccw/src/templates/dashboard-css/04-lite-tasks.css +3071 -0
- package/ccw/src/templates/dashboard-css/21-cli-toolmgmt.css +157 -0
- package/ccw/src/templates/dashboard-css/32-issue-manager.css +23 -0
- package/ccw/src/templates/dashboard-js/components/cli-stream-viewer.js +38 -4
- package/ccw/src/templates/dashboard-js/components/hook-manager.js +68 -34
- package/ccw/src/templates/dashboard-js/components/navigation.js +24 -4
- package/ccw/src/templates/dashboard-js/i18n.js +278 -4
- package/ccw/src/templates/dashboard-js/views/api-settings.js +32 -0
- package/ccw/src/templates/dashboard-js/views/claude-manager.js +44 -3
- package/ccw/src/templates/dashboard-js/views/cli-manager.js +303 -31
- package/ccw/src/templates/dashboard-js/views/history.js +44 -6
- package/ccw/src/templates/dashboard-js/views/home.js +1 -0
- package/ccw/src/templates/dashboard-js/views/issue-manager.js +54 -7
- package/ccw/src/templates/dashboard-js/views/lite-tasks.js +2621 -4
- package/ccw/src/templates/dashboard.html +5 -0
- package/ccw/src/tools/memory-update-queue.js +5 -11
- package/package.json +2 -1
- package/.claude/skills/ccw/index/command-capabilities.json +0 -127
- package/.claude/skills/ccw/index/intent-rules.json +0 -136
- package/.claude/skills/ccw/index/workflow-chains.json +0 -451
- package/.claude/skills/ccw/phases/actions/bugfix.md +0 -218
- package/.claude/skills/ccw/phases/actions/coupled.md +0 -194
- package/.claude/skills/ccw/phases/actions/docs.md +0 -93
- package/.claude/skills/ccw/phases/actions/full.md +0 -154
- package/.claude/skills/ccw/phases/actions/issue.md +0 -201
- package/.claude/skills/ccw/phases/actions/rapid.md +0 -104
- package/.claude/skills/ccw/phases/actions/review-fix.md +0 -84
- package/.claude/skills/ccw/phases/actions/tdd.md +0 -66
- package/.claude/skills/ccw/phases/actions/ui.md +0 -79
- package/.claude/skills/ccw/phases/orchestrator.md +0 -435
- package/.claude/skills/ccw/specs/intent-classification.md +0 -336
- package/.claude/skills/ccw-help/index/all-agents.json +0 -82
- package/.claude/skills/ccw-help/index/all-commands.json +0 -882
- package/.claude/skills/ccw-help/index/by-category.json +0 -914
- package/.claude/skills/ccw-help/index/by-use-case.json +0 -896
- package/.claude/skills/ccw-help/index/command-relationships.json +0 -160
- package/.claude/skills/ccw-help/index/essential-commands.json +0 -112
|
@@ -83,7 +83,8 @@ const i18n = {
|
|
|
83
83
|
'nav.liteTasks': 'Lite Tasks',
|
|
84
84
|
'nav.litePlan': 'Lite Plan',
|
|
85
85
|
'nav.liteFix': 'Lite Fix',
|
|
86
|
-
|
|
86
|
+
'nav.multiCliPlan': 'Multi-CLI Plan',
|
|
87
|
+
|
|
87
88
|
// Sidebar - MCP section
|
|
88
89
|
'nav.mcpServers': 'MCP Servers',
|
|
89
90
|
'nav.manage': 'Manage',
|
|
@@ -119,9 +120,11 @@ const i18n = {
|
|
|
119
120
|
'title.cliHistory': 'CLI Execution History',
|
|
120
121
|
'title.litePlanSessions': 'Lite Plan Sessions',
|
|
121
122
|
'title.liteFixSessions': 'Lite Fix Sessions',
|
|
123
|
+
'title.multiCliPlanSessions': 'Multi-CLI Plan Sessions',
|
|
122
124
|
'title.liteTasks': 'Lite Tasks',
|
|
123
125
|
'title.sessionDetail': 'Session Detail',
|
|
124
126
|
'title.liteTaskDetail': 'Lite Task Detail',
|
|
127
|
+
'title.multiCliDetail': 'Multi-CLI Discussion Detail',
|
|
125
128
|
'title.hookManager': 'Hook Manager',
|
|
126
129
|
'title.memoryModule': 'Memory Module',
|
|
127
130
|
'title.promptHistory': 'Prompt History',
|
|
@@ -268,6 +271,15 @@ const i18n = {
|
|
|
268
271
|
'cli.envFilePlaceholder': 'Path to .env file (e.g., ~/.gemini-env or C:/Users/xxx/.env)',
|
|
269
272
|
'cli.envFileHint': 'Load environment variables (e.g., API keys) before CLI execution. Supports ~ for home directory.',
|
|
270
273
|
'cli.envFileBrowse': 'Browse',
|
|
274
|
+
'cli.envFilePathHint': 'Please verify or complete the file path (e.g., ~/.gemini-env)',
|
|
275
|
+
'cli.fileBrowser': 'File Browser',
|
|
276
|
+
'cli.fileBrowserSelect': 'Select',
|
|
277
|
+
'cli.fileBrowserCancel': 'Cancel',
|
|
278
|
+
'cli.fileBrowserUp': 'Parent Directory',
|
|
279
|
+
'cli.fileBrowserHome': 'Home',
|
|
280
|
+
'cli.fileBrowserShowHidden': 'Show hidden files',
|
|
281
|
+
'cli.fileBrowserApiError': 'Server restart required to enable file browser',
|
|
282
|
+
'cli.fileBrowserManualHint': 'Type the full path above and click Select (e.g., C:\\Users\\name\\.gemini)',
|
|
271
283
|
|
|
272
284
|
// CodexLens Configuration
|
|
273
285
|
'codexlens.config': 'CodexLens Configuration',
|
|
@@ -1095,6 +1107,8 @@ const i18n = {
|
|
|
1095
1107
|
'hook.wizard.memoryUpdateDesc': 'Queue-based CLAUDE.md updates with configurable threshold and timeout',
|
|
1096
1108
|
'hook.wizard.queueBasedUpdate': 'Queue-Based Update',
|
|
1097
1109
|
'hook.wizard.queueBasedUpdateDesc': 'Batch updates when threshold reached or timeout expires',
|
|
1110
|
+
'hook.wizard.cliTool': 'CLI Tool',
|
|
1111
|
+
'hook.wizard.cliToolDesc': 'CLI tool for CLAUDE.md generation',
|
|
1098
1112
|
'hook.wizard.thresholdPaths': 'Threshold (paths)',
|
|
1099
1113
|
'hook.wizard.thresholdPathsDesc': 'Number of paths to trigger batch update',
|
|
1100
1114
|
'hook.wizard.timeoutSeconds': 'Timeout (seconds)',
|
|
@@ -1195,7 +1209,130 @@ const i18n = {
|
|
|
1195
1209
|
'lite.diagnosisDetails': 'Diagnosis Details',
|
|
1196
1210
|
'lite.totalDiagnoses': 'Total Diagnoses:',
|
|
1197
1211
|
'lite.angles': 'Angles:',
|
|
1198
|
-
|
|
1212
|
+
'lite.multiCli': 'Multi-CLI',
|
|
1213
|
+
|
|
1214
|
+
// Multi-CLI Plan
|
|
1215
|
+
'multiCli.rounds': 'rounds',
|
|
1216
|
+
'multiCli.backToList': 'Back to Multi-CLI Plan',
|
|
1217
|
+
'multiCli.roundCount': 'Rounds',
|
|
1218
|
+
'multiCli.topic': 'Topic',
|
|
1219
|
+
'multiCli.tab.topic': 'Discussion Topic',
|
|
1220
|
+
'multiCli.tab.files': 'Related Files',
|
|
1221
|
+
'multiCli.tab.planning': 'Planning',
|
|
1222
|
+
'multiCli.tab.decision': 'Decision',
|
|
1223
|
+
'multiCli.tab.timeline': 'Timeline',
|
|
1224
|
+
'multiCli.tab.rounds': 'Rounds',
|
|
1225
|
+
'multiCli.tab.discussion': 'Discussion',
|
|
1226
|
+
'multiCli.tab.association': 'Association',
|
|
1227
|
+
'multiCli.scope': 'Scope',
|
|
1228
|
+
'multiCli.scope.included': 'Included',
|
|
1229
|
+
'multiCli.scope.excluded': 'Excluded',
|
|
1230
|
+
'multiCli.keyQuestions': 'Key Questions',
|
|
1231
|
+
'multiCli.fileTree': 'File Tree',
|
|
1232
|
+
'multiCli.impactSummary': 'Impact Summary',
|
|
1233
|
+
'multiCli.dependencies': 'Dependencies',
|
|
1234
|
+
'multiCli.functional': 'Functional Requirements',
|
|
1235
|
+
'multiCli.nonFunctional': 'Non-Functional Requirements',
|
|
1236
|
+
'multiCli.acceptanceCriteria': 'Acceptance Criteria',
|
|
1237
|
+
'multiCli.source': 'Source',
|
|
1238
|
+
'multiCli.confidence': 'Confidence',
|
|
1239
|
+
'multiCli.selectedSolution': 'Selected Solution',
|
|
1240
|
+
'multiCli.rejectedAlternatives': 'Rejected Alternatives',
|
|
1241
|
+
'multiCli.rejectionReason': 'Reason',
|
|
1242
|
+
'multiCli.pros': 'Pros',
|
|
1243
|
+
'multiCli.cons': 'Cons',
|
|
1244
|
+
'multiCli.effort': 'Effort',
|
|
1245
|
+
'multiCli.sources': 'Sources',
|
|
1246
|
+
'multiCli.currentRound': 'Current',
|
|
1247
|
+
'multiCli.singleRoundInfo': 'This is a single-round discussion. View other tabs for details.',
|
|
1248
|
+
'multiCli.noRoundData': 'No data for this round.',
|
|
1249
|
+
'multiCli.roundId': 'Round',
|
|
1250
|
+
'multiCli.timestamp': 'Time',
|
|
1251
|
+
'multiCli.duration': 'Duration',
|
|
1252
|
+
'multiCli.contributors': 'Contributors',
|
|
1253
|
+
'multiCli.convergence': 'Convergence',
|
|
1254
|
+
'multiCli.newInsights': 'New Insights',
|
|
1255
|
+
'multiCli.crossVerification': 'Cross-Verification',
|
|
1256
|
+
'multiCli.agreements': 'Agreements',
|
|
1257
|
+
'multiCli.disagreements': 'Disagreements',
|
|
1258
|
+
'multiCli.resolution': 'Resolution',
|
|
1259
|
+
'multiCli.empty.topic': 'No Discussion Topic',
|
|
1260
|
+
'multiCli.empty.topicText': 'No discussion topic data available for this session.',
|
|
1261
|
+
'multiCli.empty.files': 'No Related Files',
|
|
1262
|
+
'multiCli.empty.filesText': 'No file analysis data available for this session.',
|
|
1263
|
+
'multiCli.empty.planning': 'No Planning Data',
|
|
1264
|
+
'multiCli.empty.planningText': 'No planning requirements available for this session.',
|
|
1265
|
+
'multiCli.empty.decision': 'No Decision Yet',
|
|
1266
|
+
'multiCli.empty.decisionText': 'No decision has been made for this discussion yet.',
|
|
1267
|
+
'multiCli.empty.timeline': 'No Timeline Events',
|
|
1268
|
+
'multiCli.empty.timelineText': 'No decision timeline available for this session.',
|
|
1269
|
+
'multiCli.empty.association': 'No Association Data',
|
|
1270
|
+
'multiCli.empty.associationText': 'No context package or related files available for this session.',
|
|
1271
|
+
'multiCli.round': 'Round',
|
|
1272
|
+
'multiCli.solutionSummary': 'Solution Summary',
|
|
1273
|
+
'multiCli.feasibility': 'Feasibility',
|
|
1274
|
+
'multiCli.effort': 'Effort',
|
|
1275
|
+
'multiCli.risk': 'Risk',
|
|
1276
|
+
'multiCli.consensus': 'Consensus',
|
|
1277
|
+
'multiCli.resolvedConflicts': 'Resolved Conflicts',
|
|
1278
|
+
|
|
1279
|
+
// Toolbar
|
|
1280
|
+
'multiCli.toolbar.title': 'Task Navigator',
|
|
1281
|
+
'multiCli.toolbar.tasks': 'Tasks',
|
|
1282
|
+
'multiCli.toolbar.refresh': 'Refresh',
|
|
1283
|
+
'multiCli.toolbar.exportJson': 'Export JSON',
|
|
1284
|
+
'multiCli.toolbar.viewRaw': 'View Raw Data',
|
|
1285
|
+
'multiCli.toolbar.noTasks': 'No tasks available',
|
|
1286
|
+
'multiCli.toolbar.scrollToTask': 'Click to scroll to task',
|
|
1287
|
+
|
|
1288
|
+
// Context Tab
|
|
1289
|
+
'multiCli.context.taskDescription': 'Task Description',
|
|
1290
|
+
'multiCli.context.constraints': 'Constraints',
|
|
1291
|
+
'multiCli.context.focusPaths': 'Focus Paths',
|
|
1292
|
+
'multiCli.context.relevantFiles': 'Relevant Files',
|
|
1293
|
+
'multiCli.context.dependencies': 'Dependencies',
|
|
1294
|
+
'multiCli.context.conflictRisks': 'Conflict Risks',
|
|
1295
|
+
'multiCli.context.sessionId': 'Session ID',
|
|
1296
|
+
'multiCli.context.rawJson': 'Raw JSON',
|
|
1297
|
+
|
|
1298
|
+
// Summary Tab
|
|
1299
|
+
'multiCli.summary.title': 'Summary',
|
|
1300
|
+
'multiCli.summary.convergence': 'Convergence',
|
|
1301
|
+
'multiCli.summary.solutions': 'Solutions',
|
|
1302
|
+
'multiCli.summary.solution': 'Solution',
|
|
1303
|
+
|
|
1304
|
+
// Task Overview
|
|
1305
|
+
'multiCli.task.description': 'Description',
|
|
1306
|
+
'multiCli.task.keyPoint': 'Key Point',
|
|
1307
|
+
'multiCli.task.scope': 'Scope',
|
|
1308
|
+
'multiCli.task.dependencies': 'Dependencies',
|
|
1309
|
+
'multiCli.task.targetFiles': 'Target Files',
|
|
1310
|
+
'multiCli.task.acceptanceCriteria': 'Acceptance Criteria',
|
|
1311
|
+
'multiCli.task.reference': 'Reference',
|
|
1312
|
+
'multiCli.task.pattern': 'PATTERN',
|
|
1313
|
+
'multiCli.task.files': 'FILES',
|
|
1314
|
+
'multiCli.task.examples': 'EXAMPLES',
|
|
1315
|
+
'multiCli.task.noOverviewData': 'No overview data available',
|
|
1316
|
+
|
|
1317
|
+
// Task Implementation
|
|
1318
|
+
'multiCli.task.implementationSteps': 'Implementation Steps',
|
|
1319
|
+
'multiCli.task.modificationPoints': 'Modification Points',
|
|
1320
|
+
'multiCli.task.verification': 'Verification',
|
|
1321
|
+
'multiCli.task.noImplementationData': 'No implementation details available',
|
|
1322
|
+
'multiCli.task.noFilesSpecified': 'No files specified',
|
|
1323
|
+
|
|
1324
|
+
// Discussion Tab
|
|
1325
|
+
'multiCli.discussion.title': 'Discussion',
|
|
1326
|
+
'multiCli.discussion.discussionTopic': 'Discussion Topic',
|
|
1327
|
+
'multiCli.solutions': 'Solutions',
|
|
1328
|
+
'multiCli.decision': 'Decision',
|
|
1329
|
+
|
|
1330
|
+
// Plan
|
|
1331
|
+
'multiCli.plan.objective': 'Objective',
|
|
1332
|
+
'multiCli.plan.solution': 'Solution',
|
|
1333
|
+
'multiCli.plan.approach': 'Approach',
|
|
1334
|
+
'multiCli.plan.risk': 'risk',
|
|
1335
|
+
|
|
1199
1336
|
// Modals
|
|
1200
1337
|
'modal.contentPreview': 'Content Preview',
|
|
1201
1338
|
'modal.raw': 'Raw',
|
|
@@ -2257,7 +2394,8 @@ const i18n = {
|
|
|
2257
2394
|
'nav.liteTasks': '轻量任务',
|
|
2258
2395
|
'nav.litePlan': '轻量规划',
|
|
2259
2396
|
'nav.liteFix': '轻量修复',
|
|
2260
|
-
|
|
2397
|
+
'nav.multiCliPlan': '多CLI规划',
|
|
2398
|
+
|
|
2261
2399
|
// Sidebar - MCP section
|
|
2262
2400
|
'nav.mcpServers': 'MCP 服务器',
|
|
2263
2401
|
'nav.manage': '管理',
|
|
@@ -2293,9 +2431,11 @@ const i18n = {
|
|
|
2293
2431
|
'title.cliHistory': 'CLI 执行历史',
|
|
2294
2432
|
'title.litePlanSessions': '轻量规划会话',
|
|
2295
2433
|
'title.liteFixSessions': '轻量修复会话',
|
|
2434
|
+
'title.multiCliPlanSessions': '多CLI规划会话',
|
|
2296
2435
|
'title.liteTasks': '轻量任务',
|
|
2297
2436
|
'title.sessionDetail': '会话详情',
|
|
2298
2437
|
'title.liteTaskDetail': '轻量任务详情',
|
|
2438
|
+
'title.multiCliDetail': '多CLI讨论详情',
|
|
2299
2439
|
'title.hookManager': '钩子管理',
|
|
2300
2440
|
'title.memoryModule': '记忆模块',
|
|
2301
2441
|
'title.promptHistory': '提示历史',
|
|
@@ -2442,6 +2582,15 @@ const i18n = {
|
|
|
2442
2582
|
'cli.envFilePlaceholder': '.env 文件路径(如 ~/.gemini-env 或 C:/Users/xxx/.env)',
|
|
2443
2583
|
'cli.envFileHint': '在 CLI 执行前加载环境变量(如 API 密钥)。支持 ~ 表示用户目录。',
|
|
2444
2584
|
'cli.envFileBrowse': '浏览',
|
|
2585
|
+
'cli.envFilePathHint': '请确认或补全文件路径(如 ~/.gemini-env)',
|
|
2586
|
+
'cli.fileBrowser': '文件浏览器',
|
|
2587
|
+
'cli.fileBrowserSelect': '选择',
|
|
2588
|
+
'cli.fileBrowserCancel': '取消',
|
|
2589
|
+
'cli.fileBrowserUp': '上级目录',
|
|
2590
|
+
'cli.fileBrowserHome': '主目录',
|
|
2591
|
+
'cli.fileBrowserShowHidden': '显示隐藏文件',
|
|
2592
|
+
'cli.fileBrowserApiError': '需要重启服务器以启用文件浏览器',
|
|
2593
|
+
'cli.fileBrowserManualHint': '请在上方输入完整路径后点击选择(如 C:\\Users\\用户名\\.gemini)',
|
|
2445
2594
|
|
|
2446
2595
|
// CodexLens 配置
|
|
2447
2596
|
'codexlens.config': 'CodexLens 配置',
|
|
@@ -3248,6 +3397,8 @@ const i18n = {
|
|
|
3248
3397
|
'hook.wizard.memoryUpdateDesc': '基于队列的 CLAUDE.md 更新,支持阈值和超时配置',
|
|
3249
3398
|
'hook.wizard.queueBasedUpdate': '队列批量更新',
|
|
3250
3399
|
'hook.wizard.queueBasedUpdateDesc': '达到路径数量阈值或超时时批量更新',
|
|
3400
|
+
'hook.wizard.cliTool': 'CLI 工具',
|
|
3401
|
+
'hook.wizard.cliToolDesc': '用于生成 CLAUDE.md 的 CLI 工具',
|
|
3251
3402
|
'hook.wizard.thresholdPaths': '阈值(路径数)',
|
|
3252
3403
|
'hook.wizard.thresholdPathsDesc': '触发批量更新的路径数量',
|
|
3253
3404
|
'hook.wizard.timeoutSeconds': '超时(秒)',
|
|
@@ -3348,7 +3499,130 @@ const i18n = {
|
|
|
3348
3499
|
'lite.diagnosisDetails': '诊断详情',
|
|
3349
3500
|
'lite.totalDiagnoses': '总诊断数:',
|
|
3350
3501
|
'lite.angles': '分析角度:',
|
|
3351
|
-
|
|
3502
|
+
'lite.multiCli': '多CLI',
|
|
3503
|
+
|
|
3504
|
+
// Multi-CLI Plan
|
|
3505
|
+
'multiCli.rounds': '轮',
|
|
3506
|
+
'multiCli.backToList': '返回多CLI计划',
|
|
3507
|
+
'multiCli.roundCount': '轮数',
|
|
3508
|
+
'multiCli.topic': '主题',
|
|
3509
|
+
'multiCli.tab.topic': '讨论主题',
|
|
3510
|
+
'multiCli.tab.files': '相关文件',
|
|
3511
|
+
'multiCli.tab.planning': '规划',
|
|
3512
|
+
'multiCli.tab.decision': '决策',
|
|
3513
|
+
'multiCli.tab.timeline': '时间线',
|
|
3514
|
+
'multiCli.tab.rounds': '轮次',
|
|
3515
|
+
'multiCli.tab.discussion': '讨论',
|
|
3516
|
+
'multiCli.tab.association': '关联',
|
|
3517
|
+
'multiCli.scope': '范围',
|
|
3518
|
+
'multiCli.scope.included': '包含',
|
|
3519
|
+
'multiCli.scope.excluded': '排除',
|
|
3520
|
+
'multiCli.keyQuestions': '关键问题',
|
|
3521
|
+
'multiCli.fileTree': '文件树',
|
|
3522
|
+
'multiCli.impactSummary': '影响摘要',
|
|
3523
|
+
'multiCli.dependencies': '依赖关系',
|
|
3524
|
+
'multiCli.functional': '功能需求',
|
|
3525
|
+
'multiCli.nonFunctional': '非功能需求',
|
|
3526
|
+
'multiCli.acceptanceCriteria': '验收标准',
|
|
3527
|
+
'multiCli.source': '来源',
|
|
3528
|
+
'multiCli.confidence': '置信度',
|
|
3529
|
+
'multiCli.selectedSolution': '选定方案',
|
|
3530
|
+
'multiCli.rejectedAlternatives': '被拒绝的备选方案',
|
|
3531
|
+
'multiCli.rejectionReason': '原因',
|
|
3532
|
+
'multiCli.pros': '优点',
|
|
3533
|
+
'multiCli.cons': '缺点',
|
|
3534
|
+
'multiCli.effort': '工作量',
|
|
3535
|
+
'multiCli.sources': '来源',
|
|
3536
|
+
'multiCli.currentRound': '当前',
|
|
3537
|
+
'multiCli.singleRoundInfo': '这是单轮讨论。查看其他标签页获取详情。',
|
|
3538
|
+
'multiCli.noRoundData': '此轮无数据。',
|
|
3539
|
+
'multiCli.roundId': '轮次',
|
|
3540
|
+
'multiCli.timestamp': '时间',
|
|
3541
|
+
'multiCli.duration': '持续时间',
|
|
3542
|
+
'multiCli.contributors': '贡献者',
|
|
3543
|
+
'multiCli.convergence': '收敛度',
|
|
3544
|
+
'multiCli.newInsights': '新发现',
|
|
3545
|
+
'multiCli.crossVerification': '交叉验证',
|
|
3546
|
+
'multiCli.agreements': '一致意见',
|
|
3547
|
+
'multiCli.disagreements': '分歧',
|
|
3548
|
+
'multiCli.resolution': '决议',
|
|
3549
|
+
'multiCli.empty.topic': '无讨论主题',
|
|
3550
|
+
'multiCli.empty.topicText': '此会话无可用的讨论主题数据。',
|
|
3551
|
+
'multiCli.empty.files': '无相关文件',
|
|
3552
|
+
'multiCli.empty.filesText': '此会话无可用的文件分析数据。',
|
|
3553
|
+
'multiCli.empty.planning': '无规划数据',
|
|
3554
|
+
'multiCli.empty.planningText': '此会话无可用的规划需求。',
|
|
3555
|
+
'multiCli.empty.decision': '暂无决策',
|
|
3556
|
+
'multiCli.empty.decisionText': '此讨论尚未做出决策。',
|
|
3557
|
+
'multiCli.empty.timeline': '无时间线事件',
|
|
3558
|
+
'multiCli.empty.timelineText': '此会话无可用的决策时间线。',
|
|
3559
|
+
'multiCli.empty.association': '无关联数据',
|
|
3560
|
+
'multiCli.empty.associationText': '此会话无可用的上下文包或相关文件。',
|
|
3561
|
+
'multiCli.round': '轮次',
|
|
3562
|
+
'multiCli.solutionSummary': '方案摘要',
|
|
3563
|
+
'multiCli.feasibility': '可行性',
|
|
3564
|
+
'multiCli.effort': '工作量',
|
|
3565
|
+
'multiCli.risk': '风险',
|
|
3566
|
+
'multiCli.consensus': '共识',
|
|
3567
|
+
'multiCli.resolvedConflicts': '已解决冲突',
|
|
3568
|
+
|
|
3569
|
+
// Toolbar
|
|
3570
|
+
'multiCli.toolbar.title': '任务导航',
|
|
3571
|
+
'multiCli.toolbar.tasks': '任务列表',
|
|
3572
|
+
'multiCli.toolbar.refresh': '刷新',
|
|
3573
|
+
'multiCli.toolbar.exportJson': '导出JSON',
|
|
3574
|
+
'multiCli.toolbar.viewRaw': '查看原始数据',
|
|
3575
|
+
'multiCli.toolbar.noTasks': '暂无任务',
|
|
3576
|
+
'multiCli.toolbar.scrollToTask': '点击定位到任务',
|
|
3577
|
+
|
|
3578
|
+
// Context Tab
|
|
3579
|
+
'multiCli.context.taskDescription': '任务描述',
|
|
3580
|
+
'multiCli.context.constraints': '约束条件',
|
|
3581
|
+
'multiCli.context.focusPaths': '焦点路径',
|
|
3582
|
+
'multiCli.context.relevantFiles': '相关文件',
|
|
3583
|
+
'multiCli.context.dependencies': '依赖项',
|
|
3584
|
+
'multiCli.context.conflictRisks': '冲突风险',
|
|
3585
|
+
'multiCli.context.sessionId': '会话ID',
|
|
3586
|
+
'multiCli.context.rawJson': '原始JSON',
|
|
3587
|
+
|
|
3588
|
+
// Summary Tab
|
|
3589
|
+
'multiCli.summary.title': '摘要',
|
|
3590
|
+
'multiCli.summary.convergence': '收敛状态',
|
|
3591
|
+
'multiCli.summary.solutions': '解决方案',
|
|
3592
|
+
'multiCli.summary.solution': '方案',
|
|
3593
|
+
|
|
3594
|
+
// Task Overview
|
|
3595
|
+
'multiCli.task.description': '描述',
|
|
3596
|
+
'multiCli.task.keyPoint': '关键点',
|
|
3597
|
+
'multiCli.task.scope': '范围',
|
|
3598
|
+
'multiCli.task.dependencies': '依赖项',
|
|
3599
|
+
'multiCli.task.targetFiles': '目标文件',
|
|
3600
|
+
'multiCli.task.acceptanceCriteria': '验收标准',
|
|
3601
|
+
'multiCli.task.reference': '参考资料',
|
|
3602
|
+
'multiCli.task.pattern': '模式',
|
|
3603
|
+
'multiCli.task.files': '文件',
|
|
3604
|
+
'multiCli.task.examples': '示例',
|
|
3605
|
+
'multiCli.task.noOverviewData': '无概览数据',
|
|
3606
|
+
|
|
3607
|
+
// Task Implementation
|
|
3608
|
+
'multiCli.task.implementationSteps': '实现步骤',
|
|
3609
|
+
'multiCli.task.modificationPoints': '修改点',
|
|
3610
|
+
'multiCli.task.verification': '验证',
|
|
3611
|
+
'multiCli.task.noImplementationData': '无实现详情',
|
|
3612
|
+
'multiCli.task.noFilesSpecified': '未指定文件',
|
|
3613
|
+
|
|
3614
|
+
// Discussion Tab
|
|
3615
|
+
'multiCli.discussion.title': '讨论',
|
|
3616
|
+
'multiCli.discussion.discussionTopic': '讨论主题',
|
|
3617
|
+
'multiCli.solutions': '解决方案',
|
|
3618
|
+
'multiCli.decision': '决策',
|
|
3619
|
+
|
|
3620
|
+
// Plan
|
|
3621
|
+
'multiCli.plan.objective': '目标',
|
|
3622
|
+
'multiCli.plan.solution': '解决方案',
|
|
3623
|
+
'multiCli.plan.approach': '实现方式',
|
|
3624
|
+
'multiCli.plan.risk': '风险',
|
|
3625
|
+
|
|
3352
3626
|
// Modals
|
|
3353
3627
|
'modal.contentPreview': '内容预览',
|
|
3354
3628
|
'modal.raw': '原始',
|
|
@@ -216,6 +216,11 @@ async function saveCliSettingsEndpoint(data) {
|
|
|
216
216
|
const result = await response.json();
|
|
217
217
|
showRefreshToast(t('apiSettings.settingsSaved'), 'success');
|
|
218
218
|
|
|
219
|
+
// Invalidate cache to ensure fresh data on page refresh
|
|
220
|
+
if (window.cacheManager) {
|
|
221
|
+
window.cacheManager.invalidate('cli-wrapper-endpoints');
|
|
222
|
+
}
|
|
223
|
+
|
|
219
224
|
// Refresh data and re-render
|
|
220
225
|
await loadCliSettings(true);
|
|
221
226
|
renderCliSettingsList();
|
|
@@ -250,6 +255,11 @@ async function deleteCliSettingsEndpoint(endpointId) {
|
|
|
250
255
|
|
|
251
256
|
showRefreshToast(t('apiSettings.settingsDeleted'), 'success');
|
|
252
257
|
|
|
258
|
+
// Invalidate cache to ensure fresh data on page refresh
|
|
259
|
+
if (window.cacheManager) {
|
|
260
|
+
window.cacheManager.invalidate('cli-wrapper-endpoints');
|
|
261
|
+
}
|
|
262
|
+
|
|
253
263
|
// Refresh data and re-render
|
|
254
264
|
await loadCliSettings(true);
|
|
255
265
|
selectedCliSettingsId = null;
|
|
@@ -635,6 +645,11 @@ async function saveProvider() {
|
|
|
635
645
|
const result = await response.json();
|
|
636
646
|
showRefreshToast(t('apiSettings.providerSaved'), 'success');
|
|
637
647
|
|
|
648
|
+
// Invalidate cache to ensure fresh data on page refresh
|
|
649
|
+
if (window.cacheManager) {
|
|
650
|
+
window.cacheManager.invalidate('cli-litellm-endpoints');
|
|
651
|
+
}
|
|
652
|
+
|
|
638
653
|
closeProviderModal();
|
|
639
654
|
// Force refresh data after saving
|
|
640
655
|
apiSettingsData = null;
|
|
@@ -660,6 +675,12 @@ async function deleteProvider(providerId) {
|
|
|
660
675
|
if (!response.ok) throw new Error('Failed to delete provider');
|
|
661
676
|
|
|
662
677
|
showRefreshToast(t('apiSettings.providerDeleted'), 'success');
|
|
678
|
+
|
|
679
|
+
// Invalidate cache to ensure fresh data on page refresh
|
|
680
|
+
if (window.cacheManager) {
|
|
681
|
+
window.cacheManager.invalidate('cli-litellm-endpoints');
|
|
682
|
+
}
|
|
683
|
+
|
|
663
684
|
// Force refresh data after deleting
|
|
664
685
|
apiSettingsData = null;
|
|
665
686
|
await renderApiSettings();
|
|
@@ -998,6 +1019,11 @@ async function saveEndpoint() {
|
|
|
998
1019
|
const result = await response.json();
|
|
999
1020
|
showRefreshToast(t('apiSettings.endpointSaved'), 'success');
|
|
1000
1021
|
|
|
1022
|
+
// Invalidate cache to ensure fresh data on page refresh
|
|
1023
|
+
if (window.cacheManager) {
|
|
1024
|
+
window.cacheManager.invalidate('cli-litellm-endpoints');
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1001
1027
|
closeEndpointModal();
|
|
1002
1028
|
// Force refresh data after saving
|
|
1003
1029
|
apiSettingsData = null;
|
|
@@ -1023,6 +1049,12 @@ async function deleteEndpoint(endpointId) {
|
|
|
1023
1049
|
if (!response.ok) throw new Error('Failed to delete endpoint');
|
|
1024
1050
|
|
|
1025
1051
|
showRefreshToast(t('apiSettings.endpointDeleted'), 'success');
|
|
1052
|
+
|
|
1053
|
+
// Invalidate cache to ensure fresh data on page refresh
|
|
1054
|
+
if (window.cacheManager) {
|
|
1055
|
+
window.cacheManager.invalidate('cli-litellm-endpoints');
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1026
1058
|
// Force refresh data after deleting
|
|
1027
1059
|
apiSettingsData = null;
|
|
1028
1060
|
await renderApiSettings();
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
// CLAUDE.md Manager View
|
|
2
2
|
// Three-column layout: File Tree | Viewer/Editor | Metadata & Actions
|
|
3
3
|
|
|
4
|
+
// ========== Lifecycle Management ==========
|
|
5
|
+
var claudeManagerDestroy = null;
|
|
6
|
+
var createDialogOverlay = null; // Track create dialog overlay for cleanup
|
|
7
|
+
|
|
4
8
|
// ========== State Management ==========
|
|
5
9
|
var claudeFilesData = {
|
|
6
10
|
user: { main: null },
|
|
@@ -19,9 +23,15 @@ var fileTreeExpanded = {
|
|
|
19
23
|
var searchQuery = '';
|
|
20
24
|
var freshnessData = {}; // { [filePath]: FreshnessResult }
|
|
21
25
|
var freshnessSummary = null;
|
|
26
|
+
var searchKeyboardHandlerAdded = false;
|
|
22
27
|
|
|
23
28
|
// ========== Main Render Function ==========
|
|
24
29
|
async function renderClaudeManager() {
|
|
30
|
+
// Initialize lifecycle
|
|
31
|
+
if (typeof initClaudeManager === 'function') {
|
|
32
|
+
initClaudeManager();
|
|
33
|
+
}
|
|
34
|
+
|
|
25
35
|
var container = document.getElementById('mainContent');
|
|
26
36
|
if (!container) return;
|
|
27
37
|
|
|
@@ -749,9 +759,11 @@ function filterFileTree(query) {
|
|
|
749
759
|
renderFileTree();
|
|
750
760
|
|
|
751
761
|
// Add keyboard shortcut handler
|
|
752
|
-
if (query && !
|
|
753
|
-
|
|
754
|
-
|
|
762
|
+
if (query && !searchKeyboardHandlerAdded) {
|
|
763
|
+
(function() {
|
|
764
|
+
document.addEventListener('keydown', handleSearchKeyboard);
|
|
765
|
+
searchKeyboardHandlerAdded = true;
|
|
766
|
+
})();
|
|
755
767
|
}
|
|
756
768
|
}
|
|
757
769
|
|
|
@@ -796,6 +808,7 @@ function showCreateFileDialog() {
|
|
|
796
808
|
'</div>';
|
|
797
809
|
|
|
798
810
|
document.body.insertAdjacentHTML('beforeend', dialog);
|
|
811
|
+
createDialogOverlay = document.querySelector('.modal-overlay');
|
|
799
812
|
if (window.lucide) lucide.createIcons();
|
|
800
813
|
}
|
|
801
814
|
|
|
@@ -918,3 +931,31 @@ function updateClaudeBadge() {
|
|
|
918
931
|
badge.textContent = total;
|
|
919
932
|
}
|
|
920
933
|
}
|
|
934
|
+
|
|
935
|
+
// ========== Lifecycle Functions ==========
|
|
936
|
+
function destroyClaudeManager() {
|
|
937
|
+
// Remove search keyboard event listener if added
|
|
938
|
+
if (searchKeyboardHandlerAdded) {
|
|
939
|
+
document.removeEventListener('keydown', handleSearchKeyboard);
|
|
940
|
+
searchKeyboardHandlerAdded = false;
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
// Remove create dialog overlay if exists
|
|
944
|
+
if (createDialogOverlay) {
|
|
945
|
+
createDialogOverlay.remove();
|
|
946
|
+
createDialogOverlay = null;
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
// Reset view-specific state
|
|
950
|
+
selectedFile = null;
|
|
951
|
+
isEditMode = false;
|
|
952
|
+
isDirty = false;
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
// Expose init/destroy functions for lifecycle management
|
|
956
|
+
window.initClaudeManager = function() {
|
|
957
|
+
claudeManagerDestroy = destroyClaudeManager;
|
|
958
|
+
};
|
|
959
|
+
|
|
960
|
+
// Make destroyClaudeManager accessible globally as well
|
|
961
|
+
window.destroyClaudeManager = destroyClaudeManager;
|