claude-code-workflow 6.3.48 → 6.3.49
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 +6 -8
- package/.claude/agents/action-planning-agent.md +28 -45
- package/.claude/agents/cli-lite-planning-agent.md +93 -1
- package/.claude/agents/code-developer.md +144 -27
- package/.claude/commands/ccw-coordinator.md +175 -21
- package/.claude/commands/ccw-debug.md +832 -0
- package/.claude/commands/ccw.md +90 -9
- package/.claude/commands/cli/cli-init.md +1 -0
- package/.claude/commands/issue/convert-to-plan.md +718 -0
- package/.claude/commands/issue/from-brainstorm.md +382 -0
- package/.claude/commands/memory/tips.md +332 -0
- package/.claude/commands/workflow/analyze-with-file.md +804 -0
- package/.claude/commands/workflow/brainstorm/auto-parallel.md +18 -43
- package/.claude/commands/workflow/brainstorm/role-analysis.md +705 -0
- package/.claude/commands/workflow/brainstorm-with-file.md +1153 -0
- package/.claude/commands/workflow/debug-with-file.md +7 -5
- package/.claude/commands/workflow/execute.md +6 -4
- package/.claude/commands/workflow/lite-plan.md +2 -2
- package/.claude/commands/workflow/plan-verify.md +162 -327
- package/.claude/commands/workflow/plan.md +162 -26
- package/.claude/commands/workflow/replan.md +78 -2
- package/.claude/commands/workflow/{review-fix.md → review-cycle-fix.md} +6 -6
- package/.claude/commands/workflow/review-module-cycle.md +2 -2
- package/.claude/commands/workflow/review-session-cycle.md +2 -2
- package/.claude/commands/workflow/tools/conflict-resolution.md +16 -26
- package/.claude/commands/workflow/tools/context-gather.md +81 -118
- package/.claude/commands/workflow/tools/task-generate-agent.md +94 -10
- package/.claude/skills/ccw-help/command.json +4 -4
- package/.claude/skills/lite-skill-generator/SKILL.md +650 -0
- package/.claude/skills/lite-skill-generator/templates/simple-skill.md +68 -0
- package/.claude/skills/lite-skill-generator/templates/style-guide.md +64 -0
- package/.claude/skills/skill-generator/SKILL.md +277 -85
- package/.claude/skills/skill-generator/phases/01-requirements-discovery.md +4 -15
- package/.claude/skills/skill-generator/phases/02-structure-generation.md +72 -17
- package/.claude/skills/skill-generator/phases/03-phase-generation.md +218 -51
- package/.claude/skills/skill-generator/phases/04-specs-templates.md +111 -41
- package/.claude/skills/skill-generator/phases/05-validation.md +139 -56
- package/.claude/skills/skill-generator/templates/autonomous-action.md +78 -268
- package/.claude/skills/skill-generator/templates/autonomous-orchestrator.md +14 -0
- package/.claude/skills/skill-generator/templates/code-analysis-action.md +12 -0
- package/.claude/skills/skill-generator/templates/llm-action.md +12 -0
- package/.claude/skills/skill-generator/templates/script-template.md +368 -0
- package/.claude/skills/skill-generator/templates/sequential-phase.md +14 -0
- package/.claude/skills/skill-generator/templates/skill-md.md +14 -0
- package/.claude/skills/skill-tuning/SKILL.md +130 -266
- package/.claude/skills/skill-tuning/phases/orchestrator.md +95 -283
- package/.claude/skills/skill-tuning/specs/problem-taxonomy.md +90 -198
- package/.claude/skills/skill-tuning/specs/tuning-strategies.md +193 -1345
- package/.claude/workflows/cli-templates/schemas/plan-verify-agent-schema.json +47 -0
- package/.claude/workflows/cli-templates/schemas/verify-json-schema.json +158 -0
- package/.claude/workflows/cli-tools-usage.md +1 -1
- package/.codex/AGENTS.md +1 -3
- package/.codex/prompts/analyze-with-file.md +607 -0
- package/.codex/prompts/brainstorm-to-cycle.md +455 -0
- package/.codex/prompts/brainstorm-with-file.md +933 -0
- package/.codex/prompts/debug-with-file.md +15 -20
- package/.codex/skills/ccw-cli-tools/SKILL.md +559 -0
- package/ccw/dist/commands/cli.d.ts.map +1 -1
- package/ccw/dist/commands/cli.js +29 -5
- package/ccw/dist/commands/cli.js.map +1 -1
- package/ccw/dist/commands/issue.d.ts +2 -0
- package/ccw/dist/commands/issue.d.ts.map +1 -1
- package/ccw/dist/commands/issue.js +62 -20
- package/ccw/dist/commands/issue.js.map +1 -1
- package/ccw/dist/config/litellm-api-config-manager.d.ts.map +1 -1
- package/ccw/dist/config/litellm-api-config-manager.js +5 -3
- package/ccw/dist/config/litellm-api-config-manager.js.map +1 -1
- package/ccw/dist/config/litellm-provider-models.d.ts +73 -0
- package/ccw/dist/config/litellm-provider-models.d.ts.map +1 -0
- package/ccw/dist/config/litellm-provider-models.js +172 -0
- package/ccw/dist/config/litellm-provider-models.js.map +1 -0
- package/ccw/dist/config/provider-models.d.ts +25 -51
- package/ccw/dist/config/provider-models.d.ts.map +1 -1
- package/ccw/dist/config/provider-models.js +84 -149
- package/ccw/dist/config/provider-models.js.map +1 -1
- package/ccw/dist/config/storage-paths.d.ts.map +1 -1
- package/ccw/dist/config/storage-paths.js +23 -5
- package/ccw/dist/config/storage-paths.js.map +1 -1
- package/ccw/dist/core/auth/csrf-middleware.js +3 -3
- package/ccw/dist/core/auth/csrf-middleware.js.map +1 -1
- package/ccw/dist/core/dashboard-generator.d.ts.map +1 -1
- package/ccw/dist/core/dashboard-generator.js +3 -1
- package/ccw/dist/core/dashboard-generator.js.map +1 -1
- package/ccw/dist/core/routes/claude-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/claude-routes.js +206 -14
- package/ccw/dist/core/routes/claude-routes.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/commands-routes.d.ts +7 -0
- package/ccw/dist/core/routes/commands-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/commands-routes.js +480 -0
- package/ccw/dist/core/routes/commands-routes.js.map +1 -0
- package/ccw/dist/core/routes/model-routes.d.ts +11 -0
- package/ccw/dist/core/routes/model-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/model-routes.js +112 -0
- package/ccw/dist/core/routes/model-routes.js.map +1 -0
- package/ccw/dist/core/routes/nav-status-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/nav-status-routes.js +84 -1
- package/ccw/dist/core/routes/nav-status-routes.js.map +1 -1
- package/ccw/dist/core/routes/provider-routes.d.ts +11 -0
- package/ccw/dist/core/routes/provider-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/provider-routes.js +67 -0
- package/ccw/dist/core/routes/provider-routes.js.map +1 -0
- package/ccw/dist/core/routes/skills-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/skills-routes.js +219 -7
- package/ccw/dist/core/routes/skills-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 +58 -6
- package/ccw/dist/core/routes/system-routes.js.map +1 -1
- package/ccw/dist/core/server.d.ts.map +1 -1
- package/ccw/dist/core/server.js +13 -0
- package/ccw/dist/core/server.js.map +1 -1
- package/ccw/dist/mcp-server/index.js +2 -2
- package/ccw/dist/mcp-server/index.js.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.d.ts +48 -11
- package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.js +146 -50
- package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
- package/ccw/dist/tools/cli-config-manager.d.ts +1 -13
- package/ccw/dist/tools/cli-config-manager.d.ts.map +1 -1
- package/ccw/dist/tools/cli-config-manager.js +3 -27
- package/ccw/dist/tools/cli-config-manager.js.map +1 -1
- package/ccw/dist/tools/cli-executor-core.d.ts.map +1 -1
- package/ccw/dist/tools/cli-executor-core.js +7 -2
- package/ccw/dist/tools/cli-executor-core.js.map +1 -1
- package/ccw/dist/tools/cli-executor-state.d.ts.map +1 -1
- package/ccw/dist/tools/cli-history-store.d.ts +11 -0
- package/ccw/dist/tools/cli-history-store.d.ts.map +1 -1
- package/ccw/dist/tools/cli-history-store.js +82 -2
- package/ccw/dist/tools/cli-history-store.js.map +1 -1
- package/ccw/dist/tools/command-registry.d.ts +7 -0
- package/ccw/dist/tools/command-registry.d.ts.map +1 -1
- package/ccw/dist/tools/command-registry.js +14 -1
- package/ccw/dist/tools/command-registry.js.map +1 -1
- package/ccw/dist/tools/generate-module-docs.d.ts.map +1 -1
- package/ccw/dist/tools/generate-module-docs.js +11 -7
- package/ccw/dist/tools/generate-module-docs.js.map +1 -1
- package/ccw/dist/tools/litellm-executor.d.ts +1 -0
- package/ccw/dist/tools/litellm-executor.d.ts.map +1 -1
- package/ccw/dist/tools/litellm-executor.js +11 -9
- package/ccw/dist/tools/litellm-executor.js.map +1 -1
- package/ccw/dist/types/skill-types.d.ts +97 -0
- package/ccw/dist/types/skill-types.d.ts.map +1 -0
- package/ccw/dist/types/skill-types.js +6 -0
- package/ccw/dist/types/skill-types.js.map +1 -0
- package/ccw/src/commands/cli.ts +36 -5
- package/ccw/src/commands/issue.ts +81 -26
- package/ccw/src/config/litellm-api-config-manager.ts +5 -3
- package/ccw/src/config/litellm-provider-models.ts +222 -0
- package/ccw/src/config/provider-models.ts +91 -190
- package/ccw/src/config/storage-paths.ts +20 -5
- package/ccw/src/core/auth/csrf-middleware.ts +3 -3
- package/ccw/src/core/dashboard-generator.ts +3 -1
- package/ccw/src/core/routes/claude-routes.ts +233 -15
- package/ccw/src/core/routes/cli-routes.ts +2 -3
- package/ccw/src/core/routes/commands-routes.ts +620 -0
- package/ccw/src/core/routes/nav-status-routes.ts +95 -1
- package/ccw/src/core/routes/provider-routes.ts +78 -0
- package/ccw/src/core/routes/skills-routes.ts +266 -45
- package/ccw/src/core/routes/system-routes.ts +102 -50
- package/ccw/src/core/server.ts +13 -0
- package/ccw/src/mcp-server/index.ts +2 -2
- package/ccw/src/templates/dashboard-css/18-cli-settings.css +35 -0
- package/ccw/src/templates/dashboard-css/37-commands.css +193 -0
- package/ccw/src/templates/dashboard-js/components/navigation.js +4 -0
- package/ccw/src/templates/dashboard-js/i18n.js +116 -0
- package/ccw/src/templates/dashboard-js/views/cli-manager.js +249 -4
- package/ccw/src/templates/dashboard-js/views/commands-manager.js +503 -0
- package/ccw/src/templates/dashboard-js/views/issue-manager.js +7 -7
- package/ccw/src/templates/dashboard-js/views/mcp-manager.js +2 -7
- package/ccw/src/templates/dashboard-js/views/skills-manager.js +164 -23
- package/ccw/src/templates/dashboard.html +7 -0
- package/ccw/src/tools/claude-cli-tools.ts +170 -56
- package/ccw/src/tools/cli-config-manager.ts +2 -33
- package/ccw/src/tools/cli-executor-core.ts +8 -2
- package/ccw/src/tools/cli-history-store.ts +92 -2
- package/ccw/src/tools/command-registry.ts +16 -1
- package/ccw/src/tools/generate-module-docs.ts +11 -7
- package/ccw/src/tools/litellm-executor.ts +13 -9
- package/ccw/src/types/skill-types.ts +99 -0
- package/package.json +1 -1
- package/.claude/commands/enhance-prompt.md +0 -93
- package/.claude/commands/memory/code-map-memory.md +0 -687
- package/.claude/commands/memory/docs.md +0 -615
- package/.claude/commands/memory/load-skill-memory.md +0 -182
- package/.claude/commands/memory/skill-memory.md +0 -525
- package/.claude/commands/memory/swagger-docs.md +0 -773
- package/.claude/commands/memory/tech-research-rules.md +0 -310
- package/.claude/commands/memory/workflow-skill-memory.md +0 -517
- package/.claude/commands/task/breakdown.md +0 -208
- package/.claude/commands/task/create.md +0 -152
- package/.claude/commands/task/execute.md +0 -270
- package/.claude/commands/task/replan.md +0 -441
- package/.claude/commands/version.md +0 -254
- package/.claude/commands/workflow/action-plan-verify.md +0 -485
- package/.claude/commands/workflow/brainstorm/api-designer.md +0 -587
- package/.claude/commands/workflow/brainstorm/data-architect.md +0 -220
- package/.claude/commands/workflow/brainstorm/product-manager.md +0 -200
- package/.claude/commands/workflow/brainstorm/product-owner.md +0 -200
- package/.claude/commands/workflow/brainstorm/scrum-master.md +0 -200
- package/.claude/commands/workflow/brainstorm/subject-matter-expert.md +0 -200
- package/.claude/commands/workflow/brainstorm/system-architect.md +0 -389
- package/.claude/commands/workflow/brainstorm/ui-designer.md +0 -221
- package/.claude/commands/workflow/brainstorm/ux-expert.md +0 -221
- package/.claude/commands/workflow/debug.md +0 -331
- package/.claude/commands/workflow/develop-with-file.md +0 -1044
- package/.claude/skills/ccw-loop/README.md +0 -303
- package/.claude/skills/skill-generator/templates/script-bash.md +0 -277
- package/.claude/skills/skill-generator/templates/script-python.md +0 -198
- package/.codex/prompts/debug.md +0 -318
- package/ccw/src/core/routes/mcp-routes.ts.backup +0 -549
|
@@ -1,222 +1,123 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* CLI Tool Model Reference Library
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* System reference for available models per CLI tool provider.
|
|
5
|
+
* This is a read-only reference, NOT user configuration.
|
|
6
|
+
* User configuration is managed via tools.{tool}.primaryModel/secondaryModel in cli-tools.json
|
|
6
7
|
*/
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Model information metadata
|
|
12
|
-
*/
|
|
13
|
-
export interface ModelInfo {
|
|
14
|
-
/** Model identifier (used in API calls) */
|
|
9
|
+
export interface ProviderModelInfo {
|
|
15
10
|
id: string;
|
|
16
|
-
|
|
17
|
-
/** Human-readable display name */
|
|
18
11
|
name: string;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
/** Whether this model supports prompt caching */
|
|
24
|
-
supportsCaching: boolean;
|
|
12
|
+
capabilities?: string[];
|
|
13
|
+
contextWindow?: number;
|
|
14
|
+
deprecated?: boolean;
|
|
25
15
|
}
|
|
26
16
|
|
|
27
|
-
|
|
28
|
-
* Embedding model information metadata
|
|
29
|
-
*/
|
|
30
|
-
export interface EmbeddingModelInfo {
|
|
31
|
-
/** Model identifier (used in API calls) */
|
|
32
|
-
id: string;
|
|
33
|
-
|
|
34
|
-
/** Human-readable display name */
|
|
17
|
+
export interface ProviderInfo {
|
|
35
18
|
name: string;
|
|
36
|
-
|
|
37
|
-
/** Embedding dimensions */
|
|
38
|
-
dimensions: number;
|
|
39
|
-
|
|
40
|
-
/** Maximum input tokens */
|
|
41
|
-
maxTokens: number;
|
|
42
|
-
|
|
43
|
-
/** Provider identifier */
|
|
44
|
-
provider: string;
|
|
19
|
+
models: ProviderModelInfo[];
|
|
45
20
|
}
|
|
46
21
|
|
|
47
|
-
|
|
48
22
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* Note: Most providers use OpenAI-compatible format
|
|
23
|
+
* System reference for CLI tool models
|
|
24
|
+
* Maps provider names to their available models
|
|
52
25
|
*/
|
|
53
|
-
export const PROVIDER_MODELS: Record<
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
id: '
|
|
58
|
-
|
|
59
|
-
contextWindow:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
id: '
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
id: '
|
|
76
|
-
name: '
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
id: '
|
|
88
|
-
name: '
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
name: '
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
id: '
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
id: 'claude-3-5-sonnet-20241022',
|
|
110
|
-
name: 'Claude 3.5 Sonnet',
|
|
111
|
-
contextWindow: 200000,
|
|
112
|
-
supportsCaching: true
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
id: 'claude-3-5-haiku-20241022',
|
|
116
|
-
name: 'Claude 3.5 Haiku',
|
|
117
|
-
contextWindow: 200000,
|
|
118
|
-
supportsCaching: true
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
id: 'claude-3-opus-20240229',
|
|
122
|
-
name: 'Claude 3 Opus',
|
|
123
|
-
contextWindow: 200000,
|
|
124
|
-
supportsCaching: false
|
|
125
|
-
}
|
|
126
|
-
],
|
|
127
|
-
|
|
128
|
-
// Custom format
|
|
129
|
-
custom: [
|
|
130
|
-
{
|
|
131
|
-
id: 'custom-model',
|
|
132
|
-
name: 'Custom Model',
|
|
133
|
-
contextWindow: 128000,
|
|
134
|
-
supportsCaching: false
|
|
135
|
-
}
|
|
136
|
-
]
|
|
137
|
-
};
|
|
26
|
+
export const PROVIDER_MODELS: Record<string, ProviderInfo> = {
|
|
27
|
+
google: {
|
|
28
|
+
name: 'Google AI',
|
|
29
|
+
models: [
|
|
30
|
+
{ id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro', capabilities: ['text', 'vision', 'code'], contextWindow: 1000000 },
|
|
31
|
+
{ id: 'gemini-2.5-flash', name: 'Gemini 2.5 Flash', capabilities: ['text', 'code'], contextWindow: 1000000 },
|
|
32
|
+
{ id: 'gemini-2.0-flash', name: 'Gemini 2.0 Flash', capabilities: ['text'], contextWindow: 1000000 },
|
|
33
|
+
{ id: 'gemini-1.5-pro', name: 'Gemini 1.5 Pro', capabilities: ['text', 'vision'], contextWindow: 2000000 },
|
|
34
|
+
{ id: 'gemini-1.5-flash', name: 'Gemini 1.5 Flash', capabilities: ['text'], contextWindow: 1000000 }
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
qwen: {
|
|
38
|
+
name: 'Qwen',
|
|
39
|
+
models: [
|
|
40
|
+
{ id: 'coder-model', name: 'Qwen Coder', capabilities: ['code'] },
|
|
41
|
+
{ id: 'vision-model', name: 'Qwen Vision', capabilities: ['vision'] },
|
|
42
|
+
{ id: 'qwen2.5-coder-32b', name: 'Qwen 2.5 Coder 32B', capabilities: ['code'] }
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
openai: {
|
|
46
|
+
name: 'OpenAI',
|
|
47
|
+
models: [
|
|
48
|
+
{ id: 'gpt-5.2', name: 'GPT-5.2', capabilities: ['text', 'code'] },
|
|
49
|
+
{ id: 'gpt-4.1', name: 'GPT-4.1', capabilities: ['text', 'code'] },
|
|
50
|
+
{ id: 'o4-mini', name: 'O4 Mini', capabilities: ['text'] },
|
|
51
|
+
{ id: 'o3', name: 'O3', capabilities: ['text'] }
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
anthropic: {
|
|
55
|
+
name: 'Anthropic',
|
|
56
|
+
models: [
|
|
57
|
+
{ id: 'sonnet', name: 'Claude Sonnet', capabilities: ['text', 'code'] },
|
|
58
|
+
{ id: 'opus', name: 'Claude Opus', capabilities: ['text', 'code', 'vision'] },
|
|
59
|
+
{ id: 'haiku', name: 'Claude Haiku', capabilities: ['text'] },
|
|
60
|
+
{ id: 'claude-sonnet-4-5-20250929', name: 'Claude 4.5 Sonnet (2025-09-29)', capabilities: ['text', 'code'] },
|
|
61
|
+
{ id: 'claude-opus-4-5-20251101', name: 'Claude 4.5 Opus (2025-11-01)', capabilities: ['text', 'code', 'vision'] }
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
litellm: {
|
|
65
|
+
name: 'LiteLLM Aggregator',
|
|
66
|
+
models: [
|
|
67
|
+
{ id: 'opencode/glm-4.7-free', name: 'GLM-4.7 Free', capabilities: ['text'] },
|
|
68
|
+
{ id: 'opencode/gpt-5-nano', name: 'GPT-5 Nano', capabilities: ['text'] },
|
|
69
|
+
{ id: 'opencode/grok-code', name: 'Grok Code', capabilities: ['code'] },
|
|
70
|
+
{ id: 'opencode/minimax-m2.1-free', name: 'MiniMax M2.1 Free', capabilities: ['text'] },
|
|
71
|
+
{ id: 'anthropic/claude-sonnet-4-20250514', name: 'Claude Sonnet 4 (via LiteLLM)', capabilities: ['text'] },
|
|
72
|
+
{ id: 'anthropic/claude-opus-4-20250514', name: 'Claude Opus 4 (via LiteLLM)', capabilities: ['text'] },
|
|
73
|
+
{ id: 'openai/gpt-4.1', name: 'GPT-4.1 (via LiteLLM)', capabilities: ['text'] },
|
|
74
|
+
{ id: 'openai/o3', name: 'O3 (via LiteLLM)', capabilities: ['text'] },
|
|
75
|
+
{ id: 'google/gemini-2.5-pro', name: 'Gemini 2.5 Pro (via LiteLLM)', capabilities: ['text'] },
|
|
76
|
+
{ id: 'google/gemini-2.5-flash', name: 'Gemini 2.5 Flash (via LiteLLM)', capabilities: ['text'] }
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
} as const;
|
|
138
80
|
|
|
139
81
|
/**
|
|
140
82
|
* Get models for a specific provider
|
|
141
|
-
* @param
|
|
83
|
+
* @param provider - Provider name (e.g., 'google', 'qwen', 'openai', 'anthropic', 'litellm')
|
|
142
84
|
* @returns Array of model information
|
|
143
85
|
*/
|
|
144
|
-
export function
|
|
145
|
-
return PROVIDER_MODELS[
|
|
86
|
+
export function getProviderModels(provider: string): ProviderModelInfo[] {
|
|
87
|
+
return PROVIDER_MODELS[provider]?.models || [];
|
|
146
88
|
}
|
|
147
89
|
|
|
148
90
|
/**
|
|
149
|
-
*
|
|
150
|
-
*
|
|
91
|
+
* Get all provider names
|
|
92
|
+
* @returns Array of provider names
|
|
151
93
|
*/
|
|
152
|
-
export
|
|
153
|
-
|
|
154
|
-
openai: [
|
|
155
|
-
{
|
|
156
|
-
id: 'text-embedding-3-small',
|
|
157
|
-
name: 'Text Embedding 3 Small',
|
|
158
|
-
dimensions: 1536,
|
|
159
|
-
maxTokens: 8191,
|
|
160
|
-
provider: 'openai'
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
id: 'text-embedding-3-large',
|
|
164
|
-
name: 'Text Embedding 3 Large',
|
|
165
|
-
dimensions: 3072,
|
|
166
|
-
maxTokens: 8191,
|
|
167
|
-
provider: 'openai'
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
id: 'text-embedding-ada-002',
|
|
171
|
-
name: 'Ada 002',
|
|
172
|
-
dimensions: 1536,
|
|
173
|
-
maxTokens: 8191,
|
|
174
|
-
provider: 'openai'
|
|
175
|
-
}
|
|
176
|
-
],
|
|
177
|
-
|
|
178
|
-
// Anthropic doesn't have embedding models
|
|
179
|
-
anthropic: [],
|
|
180
|
-
|
|
181
|
-
// Custom embedding models
|
|
182
|
-
custom: [
|
|
183
|
-
{
|
|
184
|
-
id: 'custom-embedding',
|
|
185
|
-
name: 'Custom Embedding',
|
|
186
|
-
dimensions: 1536,
|
|
187
|
-
maxTokens: 8192,
|
|
188
|
-
provider: 'custom'
|
|
189
|
-
}
|
|
190
|
-
]
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* Get embedding models for a specific provider
|
|
195
|
-
* @param providerType - Provider type to get embedding models for
|
|
196
|
-
* @returns Array of embedding model information
|
|
197
|
-
*/
|
|
198
|
-
export function getEmbeddingModelsForProvider(providerType: ProviderType): EmbeddingModelInfo[] {
|
|
199
|
-
return EMBEDDING_MODELS[providerType] || [];
|
|
94
|
+
export function getAllProviders(): string[] {
|
|
95
|
+
return Object.keys(PROVIDER_MODELS);
|
|
200
96
|
}
|
|
201
97
|
|
|
202
|
-
|
|
203
98
|
/**
|
|
204
|
-
*
|
|
205
|
-
* @param
|
|
206
|
-
* @param modelId - Model identifier
|
|
99
|
+
* Find model information across all providers
|
|
100
|
+
* @param modelId - Model identifier to search for
|
|
207
101
|
* @returns Model information or undefined if not found
|
|
208
102
|
*/
|
|
209
|
-
export function
|
|
210
|
-
const
|
|
211
|
-
|
|
103
|
+
export function findModelInfo(modelId: string): ProviderModelInfo | undefined {
|
|
104
|
+
for (const provider of Object.values(PROVIDER_MODELS)) {
|
|
105
|
+
const model = provider.models.find(m => m.id === modelId);
|
|
106
|
+
if (model) return model;
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
212
109
|
}
|
|
213
110
|
|
|
214
111
|
/**
|
|
215
|
-
*
|
|
216
|
-
* @param
|
|
217
|
-
* @
|
|
218
|
-
* @returns true if model is valid for provider
|
|
112
|
+
* Get provider name for a model ID
|
|
113
|
+
* @param modelId - Model identifier
|
|
114
|
+
* @returns Provider name or undefined if not found
|
|
219
115
|
*/
|
|
220
|
-
export function
|
|
221
|
-
|
|
116
|
+
export function getProviderForModel(modelId: string): string | undefined {
|
|
117
|
+
for (const [providerId, provider] of Object.entries(PROVIDER_MODELS)) {
|
|
118
|
+
if (provider.models.some(m => m.id === modelId)) {
|
|
119
|
+
return providerId;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return undefined;
|
|
222
123
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { homedir } from 'os';
|
|
9
9
|
import { join, resolve, dirname, relative, sep } from 'path';
|
|
10
10
|
import { createHash } from 'crypto';
|
|
11
|
-
import { existsSync, mkdirSync, renameSync, rmSync, readdirSync } from 'fs';
|
|
11
|
+
import { existsSync, mkdirSync, renameSync, rmSync, readdirSync, cpSync } from 'fs';
|
|
12
12
|
import { readdir } from 'fs/promises';
|
|
13
13
|
|
|
14
14
|
// Environment variable override for custom storage location
|
|
@@ -211,14 +211,29 @@ function migrateToHierarchical(legacyDir: string, targetDir: string): void {
|
|
|
211
211
|
const target = join(targetDir, subDir);
|
|
212
212
|
|
|
213
213
|
if (existsSync(source)) {
|
|
214
|
-
//
|
|
214
|
+
// Try atomic rename first (fastest, same filesystem)
|
|
215
215
|
try {
|
|
216
216
|
renameSync(source, target);
|
|
217
217
|
console.log(` ✓ 迁移 ${subDir}`);
|
|
218
218
|
} catch (error: any) {
|
|
219
|
-
// If rename fails (cross-filesystem), fallback to copy-delete
|
|
220
|
-
|
|
221
|
-
|
|
219
|
+
// If rename fails (EPERM, cross-filesystem, etc.), fallback to copy-delete
|
|
220
|
+
if (error.code === 'EPERM' || error.code === 'EXDEV' || error.code === 'EBUSY') {
|
|
221
|
+
try {
|
|
222
|
+
console.log(` ⚠️ rename 失败,使用 copy-delete 方式迁移 ${subDir}...`);
|
|
223
|
+
cpSync(source, target, { recursive: true, force: true });
|
|
224
|
+
// Verify copy succeeded before deleting source
|
|
225
|
+
if (existsSync(target)) {
|
|
226
|
+
rmSync(source, { recursive: true, force: true });
|
|
227
|
+
console.log(` ✓ 迁移 ${subDir} (copy-delete)`);
|
|
228
|
+
} else {
|
|
229
|
+
throw new Error('复制失败:目标目录不存在');
|
|
230
|
+
}
|
|
231
|
+
} catch (copyError: any) {
|
|
232
|
+
throw new Error(`无法迁移 ${subDir}: ${copyError.message}`);
|
|
233
|
+
}
|
|
234
|
+
} else {
|
|
235
|
+
throw new Error(`无法迁移 ${subDir}: ${error.message}`);
|
|
236
|
+
}
|
|
222
237
|
}
|
|
223
238
|
}
|
|
224
239
|
}
|
|
@@ -113,9 +113,9 @@ export async function csrfValidation(ctx: CsrfMiddlewareContext): Promise<boolea
|
|
|
113
113
|
const { pathname, req, res } = ctx;
|
|
114
114
|
|
|
115
115
|
if (!pathname.startsWith('/api/')) return true;
|
|
116
|
-
// CSRF is
|
|
117
|
-
// Set
|
|
118
|
-
if (
|
|
116
|
+
// CSRF is enabled by default for security.
|
|
117
|
+
// Set CCW_DISABLE_CSRF=1 to disable CSRF protection for local development.
|
|
118
|
+
if (envFlagEnabled('CCW_DISABLE_CSRF')) return true;
|
|
119
119
|
|
|
120
120
|
const method = (req.method || 'GET').toUpperCase();
|
|
121
121
|
if (!['POST', 'PUT', 'PATCH', 'DELETE'].includes(method)) return true;
|
|
@@ -102,7 +102,8 @@ const MODULE_CSS_FILES = [
|
|
|
102
102
|
'32-issue-manager.css',
|
|
103
103
|
'33-cli-stream-viewer.css',
|
|
104
104
|
'34-discovery.css',
|
|
105
|
-
'36-loop-monitor.css'
|
|
105
|
+
'36-loop-monitor.css',
|
|
106
|
+
'37-commands.css'
|
|
106
107
|
];
|
|
107
108
|
|
|
108
109
|
const MODULE_FILES = [
|
|
@@ -151,6 +152,7 @@ const MODULE_FILES = [
|
|
|
151
152
|
'views/prompt-history.js',
|
|
152
153
|
'views/skills-manager.js',
|
|
153
154
|
'views/rules-manager.js',
|
|
155
|
+
'views/commands-manager.js',
|
|
154
156
|
'views/claude-manager.js',
|
|
155
157
|
'views/api-settings.js',
|
|
156
158
|
'views/issue-manager.js',
|