claude-code-workflow 6.2.9 → 6.3.0
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 +16 -1
- package/.claude/workflows/cli-templates/protocols/analysis-protocol.md +11 -4
- package/.claude/workflows/cli-templates/protocols/write-protocol.md +10 -75
- package/.claude/workflows/cli-tools-usage.md +14 -24
- package/.codex/AGENTS.md +51 -1
- package/.codex/prompts/compact.md +378 -0
- package/.gemini/GEMINI.md +57 -20
- package/ccw/dist/cli.d.ts.map +1 -1
- package/ccw/dist/cli.js +3 -1
- package/ccw/dist/cli.js.map +1 -1
- package/ccw/dist/commands/cli.d.ts +2 -0
- package/ccw/dist/commands/cli.d.ts.map +1 -1
- package/ccw/dist/commands/cli.js +129 -8
- package/ccw/dist/commands/cli.js.map +1 -1
- package/ccw/dist/commands/hook.d.ts.map +1 -1
- package/ccw/dist/commands/hook.js +3 -2
- package/ccw/dist/commands/hook.js.map +1 -1
- package/ccw/dist/config/litellm-api-config-manager.d.ts +180 -0
- package/ccw/dist/config/litellm-api-config-manager.d.ts.map +1 -0
- package/ccw/dist/config/litellm-api-config-manager.js +770 -0
- package/ccw/dist/config/litellm-api-config-manager.js.map +1 -0
- package/ccw/dist/config/provider-models.d.ts +73 -0
- package/ccw/dist/config/provider-models.d.ts.map +1 -0
- package/ccw/dist/config/provider-models.js +172 -0
- package/ccw/dist/config/provider-models.js.map +1 -0
- package/ccw/dist/core/cache-manager.d.ts.map +1 -1
- package/ccw/dist/core/cache-manager.js +3 -5
- package/ccw/dist/core/cache-manager.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/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +169 -0
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/codexlens-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/codexlens-routes.js +234 -18
- package/ccw/dist/core/routes/codexlens-routes.js.map +1 -1
- package/ccw/dist/core/routes/hooks-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/hooks-routes.js +30 -32
- package/ccw/dist/core/routes/hooks-routes.js.map +1 -1
- package/ccw/dist/core/routes/litellm-api-routes.d.ts +21 -0
- package/ccw/dist/core/routes/litellm-api-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/litellm-api-routes.js +780 -0
- package/ccw/dist/core/routes/litellm-api-routes.js.map +1 -0
- package/ccw/dist/core/routes/litellm-routes.d.ts +20 -0
- package/ccw/dist/core/routes/litellm-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/litellm-routes.js +85 -0
- package/ccw/dist/core/routes/litellm-routes.js.map +1 -0
- package/ccw/dist/core/routes/mcp-routes.js +2 -2
- package/ccw/dist/core/routes/mcp-routes.js.map +1 -1
- package/ccw/dist/core/routes/status-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/status-routes.js +39 -0
- package/ccw/dist/core/routes/status-routes.js.map +1 -1
- package/ccw/dist/core/server.d.ts.map +1 -1
- package/ccw/dist/core/server.js +15 -1
- package/ccw/dist/core/server.js.map +1 -1
- package/ccw/dist/mcp-server/index.js +1 -1
- package/ccw/dist/mcp-server/index.js.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.d.ts +82 -0
- package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -0
- package/ccw/dist/tools/claude-cli-tools.js +216 -0
- package/ccw/dist/tools/claude-cli-tools.js.map +1 -0
- package/ccw/dist/tools/cli-executor.d.ts.map +1 -1
- package/ccw/dist/tools/cli-executor.js +76 -14
- package/ccw/dist/tools/cli-executor.js.map +1 -1
- package/ccw/dist/tools/codex-lens.d.ts +9 -2
- package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
- package/ccw/dist/tools/codex-lens.js +114 -9
- package/ccw/dist/tools/codex-lens.js.map +1 -1
- package/ccw/dist/tools/context-cache-store.d.ts +136 -0
- package/ccw/dist/tools/context-cache-store.d.ts.map +1 -0
- package/ccw/dist/tools/context-cache-store.js +256 -0
- package/ccw/dist/tools/context-cache-store.js.map +1 -0
- package/ccw/dist/tools/context-cache.d.ts +56 -0
- package/ccw/dist/tools/context-cache.d.ts.map +1 -0
- package/ccw/dist/tools/context-cache.js +294 -0
- package/ccw/dist/tools/context-cache.js.map +1 -0
- package/ccw/dist/tools/core-memory.d.ts.map +1 -1
- package/ccw/dist/tools/core-memory.js +33 -19
- package/ccw/dist/tools/core-memory.js.map +1 -1
- package/ccw/dist/tools/index.d.ts.map +1 -1
- package/ccw/dist/tools/index.js +2 -0
- package/ccw/dist/tools/index.js.map +1 -1
- package/ccw/dist/tools/litellm-client.d.ts +85 -0
- package/ccw/dist/tools/litellm-client.d.ts.map +1 -0
- package/ccw/dist/tools/litellm-client.js +188 -0
- package/ccw/dist/tools/litellm-client.js.map +1 -0
- package/ccw/dist/tools/litellm-executor.d.ts +34 -0
- package/ccw/dist/tools/litellm-executor.d.ts.map +1 -0
- package/ccw/dist/tools/litellm-executor.js +192 -0
- package/ccw/dist/tools/litellm-executor.js.map +1 -0
- package/ccw/dist/tools/pattern-parser.d.ts +55 -0
- package/ccw/dist/tools/pattern-parser.d.ts.map +1 -0
- package/ccw/dist/tools/pattern-parser.js +237 -0
- package/ccw/dist/tools/pattern-parser.js.map +1 -0
- package/ccw/dist/tools/smart-search.d.ts +1 -0
- package/ccw/dist/tools/smart-search.d.ts.map +1 -1
- package/ccw/dist/tools/smart-search.js +117 -41
- package/ccw/dist/tools/smart-search.js.map +1 -1
- package/ccw/dist/types/litellm-api-config.d.ts +294 -0
- package/ccw/dist/types/litellm-api-config.d.ts.map +1 -0
- package/ccw/dist/types/litellm-api-config.js +8 -0
- package/ccw/dist/types/litellm-api-config.js.map +1 -0
- package/ccw/src/cli.ts +3 -1
- package/ccw/src/commands/cli.ts +153 -9
- package/ccw/src/commands/hook.ts +3 -2
- package/ccw/src/config/.litellm-api-config-manager.ts.2025-12-23T11-57-43-727Z.bak +441 -0
- package/ccw/src/config/litellm-api-config-manager.ts +1012 -0
- package/ccw/src/config/provider-models.ts +222 -0
- package/ccw/src/core/cache-manager.ts +292 -294
- package/ccw/src/core/dashboard-generator.ts +3 -1
- package/ccw/src/core/routes/cli-routes.ts +192 -0
- package/ccw/src/core/routes/codexlens-routes.ts +241 -19
- package/ccw/src/core/routes/hooks-routes.ts +399 -405
- package/ccw/src/core/routes/litellm-api-routes.ts +930 -0
- package/ccw/src/core/routes/litellm-routes.ts +107 -0
- package/ccw/src/core/routes/mcp-routes.ts +1271 -1271
- package/ccw/src/core/routes/status-routes.ts +51 -0
- package/ccw/src/core/server.ts +15 -1
- package/ccw/src/mcp-server/index.ts +1 -1
- package/ccw/src/templates/dashboard-css/12-cli-legacy.css +44 -0
- package/ccw/src/templates/dashboard-css/31-api-settings.css +2265 -0
- package/ccw/src/templates/dashboard-js/components/cli-history.js +15 -8
- package/ccw/src/templates/dashboard-js/components/cli-status.js +323 -9
- package/ccw/src/templates/dashboard-js/components/navigation.js +329 -313
- package/ccw/src/templates/dashboard-js/i18n.js +583 -1
- package/ccw/src/templates/dashboard-js/views/api-settings.js +3362 -0
- package/ccw/src/templates/dashboard-js/views/cli-manager.js +199 -24
- package/ccw/src/templates/dashboard-js/views/codexlens-manager.js +1265 -27
- package/ccw/src/templates/dashboard.html +840 -831
- package/ccw/src/tools/claude-cli-tools.ts +300 -0
- package/ccw/src/tools/cli-executor.ts +83 -14
- package/ccw/src/tools/codex-lens.ts +146 -9
- package/ccw/src/tools/context-cache-store.ts +368 -0
- package/ccw/src/tools/context-cache.ts +393 -0
- package/ccw/src/tools/core-memory.ts +33 -19
- package/ccw/src/tools/index.ts +2 -0
- package/ccw/src/tools/litellm-client.ts +246 -0
- package/ccw/src/tools/litellm-executor.ts +241 -0
- package/ccw/src/tools/pattern-parser.ts +329 -0
- package/ccw/src/tools/smart-search.ts +142 -41
- package/ccw/src/types/litellm-api-config.ts +402 -0
- package/ccw-litellm/README.md +180 -0
- package/ccw-litellm/pyproject.toml +35 -0
- package/ccw-litellm/src/ccw_litellm/__init__.py +47 -0
- package/ccw-litellm/src/ccw_litellm/__pycache__/__init__.cpython-313.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/__pycache__/cli.cpython-313.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/cli.py +108 -0
- package/ccw-litellm/src/ccw_litellm/clients/__init__.py +12 -0
- package/ccw-litellm/src/ccw_litellm/clients/__pycache__/__init__.cpython-313.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-313.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-313.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/clients/litellm_embedder.py +251 -0
- package/ccw-litellm/src/ccw_litellm/clients/litellm_llm.py +165 -0
- package/ccw-litellm/src/ccw_litellm/config/__init__.py +22 -0
- package/ccw-litellm/src/ccw_litellm/config/__pycache__/__init__.cpython-313.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-313.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-313.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/config/loader.py +316 -0
- package/ccw-litellm/src/ccw_litellm/config/models.py +130 -0
- package/ccw-litellm/src/ccw_litellm/interfaces/__init__.py +14 -0
- package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/__init__.cpython-313.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/embedder.cpython-313.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/llm.cpython-313.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/interfaces/embedder.py +52 -0
- package/ccw-litellm/src/ccw_litellm/interfaces/llm.py +45 -0
- package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/commands.py +360 -22
- package/codex-lens/src/codexlens/cli/embedding_manager.py +660 -56
- package/codex-lens/src/codexlens/cli/model_manager.py +31 -18
- package/codex-lens/src/codexlens/cli/output.py +12 -1
- package/codex-lens/src/codexlens/config.py +93 -0
- package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-313.pyc +0 -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/chain_search.py +6 -2
- package/codex-lens/src/codexlens/search/hybrid_search.py +44 -21
- package/codex-lens/src/codexlens/search/ranking.py +1 -1
- package/codex-lens/src/codexlens/semantic/__init__.py +42 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/base.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/base.py +61 -0
- package/codex-lens/src/codexlens/semantic/chunker.py +43 -20
- package/codex-lens/src/codexlens/semantic/embedder.py +60 -13
- package/codex-lens/src/codexlens/semantic/factory.py +98 -0
- package/codex-lens/src/codexlens/semantic/gpu_support.py +225 -3
- package/codex-lens/src/codexlens/semantic/litellm_embedder.py +144 -0
- package/codex-lens/src/codexlens/semantic/rotational_embedder.py +434 -0
- package/codex-lens/src/codexlens/semantic/vector_store.py +33 -8
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_004_dual_fts.cpython-313.pyc +0 -0
- package/package.json +3 -1
- package/.codex/prompts.zip +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"litellm-client.d.ts","sourceRoot":"","sources":["../../src/tools/litellm-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QACN,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,GAAE,aAAkB;IAMtC;;OAEG;YACW,aAAa;IAkD3B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC;IAezC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;IAK/B;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,MAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;IAsB/E;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IASvE;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,GAAE,MAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;CAgB9F;AAKD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,aAAa,CAKtE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO9D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAU/D"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LiteLLM Client - Bridge between CCW and ccw-litellm Python package
|
|
3
|
+
* Provides LLM chat and embedding capabilities via spawned Python process
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Chat completions with multiple models
|
|
7
|
+
* - Text embeddings generation
|
|
8
|
+
* - Configuration management
|
|
9
|
+
* - JSON protocol communication
|
|
10
|
+
*/
|
|
11
|
+
import { spawn } from 'child_process';
|
|
12
|
+
export class LiteLLMClient {
|
|
13
|
+
pythonPath;
|
|
14
|
+
configPath;
|
|
15
|
+
timeout;
|
|
16
|
+
constructor(config = {}) {
|
|
17
|
+
this.pythonPath = config.pythonPath || 'python';
|
|
18
|
+
this.configPath = config.configPath;
|
|
19
|
+
this.timeout = config.timeout || 60000;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Execute Python ccw-litellm command
|
|
23
|
+
*/
|
|
24
|
+
async executePython(args, options = {}) {
|
|
25
|
+
const timeout = options.timeout || this.timeout;
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
const proc = spawn(this.pythonPath, ['-m', 'ccw_litellm.cli', ...args], {
|
|
28
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
29
|
+
env: { ...process.env }
|
|
30
|
+
});
|
|
31
|
+
let stdout = '';
|
|
32
|
+
let stderr = '';
|
|
33
|
+
let timedOut = false;
|
|
34
|
+
// Set up timeout
|
|
35
|
+
const timeoutId = setTimeout(() => {
|
|
36
|
+
timedOut = true;
|
|
37
|
+
proc.kill('SIGTERM');
|
|
38
|
+
reject(new Error(`Command timed out after ${timeout}ms`));
|
|
39
|
+
}, timeout);
|
|
40
|
+
proc.stdout.on('data', (data) => {
|
|
41
|
+
stdout += data.toString();
|
|
42
|
+
});
|
|
43
|
+
proc.stderr.on('data', (data) => {
|
|
44
|
+
stderr += data.toString();
|
|
45
|
+
});
|
|
46
|
+
proc.on('error', (error) => {
|
|
47
|
+
clearTimeout(timeoutId);
|
|
48
|
+
reject(new Error(`Failed to spawn Python process: ${error.message}`));
|
|
49
|
+
});
|
|
50
|
+
proc.on('close', (code) => {
|
|
51
|
+
clearTimeout(timeoutId);
|
|
52
|
+
if (timedOut) {
|
|
53
|
+
return; // Already rejected
|
|
54
|
+
}
|
|
55
|
+
if (code === 0) {
|
|
56
|
+
resolve(stdout.trim());
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
const errorMsg = stderr.trim() || `Process exited with code ${code}`;
|
|
60
|
+
reject(new Error(errorMsg));
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Check if ccw-litellm is available
|
|
67
|
+
*/
|
|
68
|
+
async isAvailable() {
|
|
69
|
+
try {
|
|
70
|
+
await this.executePython(['version'], { timeout: 5000 });
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get status information
|
|
79
|
+
*/
|
|
80
|
+
async getStatus() {
|
|
81
|
+
try {
|
|
82
|
+
const output = await this.executePython(['version'], { timeout: 5000 });
|
|
83
|
+
return {
|
|
84
|
+
available: true,
|
|
85
|
+
version: output.trim()
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
return {
|
|
90
|
+
available: false,
|
|
91
|
+
error: error.message
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get current configuration
|
|
97
|
+
*/
|
|
98
|
+
async getConfig() {
|
|
99
|
+
const output = await this.executePython(['config', '--json']);
|
|
100
|
+
return JSON.parse(output);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Generate embeddings for texts
|
|
104
|
+
*/
|
|
105
|
+
async embed(texts, model = 'default') {
|
|
106
|
+
if (!texts || texts.length === 0) {
|
|
107
|
+
throw new Error('texts array cannot be empty');
|
|
108
|
+
}
|
|
109
|
+
const args = ['embed', '--model', model, '--output', 'json'];
|
|
110
|
+
// Add texts as arguments
|
|
111
|
+
for (const text of texts) {
|
|
112
|
+
args.push(text);
|
|
113
|
+
}
|
|
114
|
+
const output = await this.executePython(args, { timeout: this.timeout * 2 });
|
|
115
|
+
const vectors = JSON.parse(output);
|
|
116
|
+
return {
|
|
117
|
+
vectors,
|
|
118
|
+
dimensions: vectors[0]?.length || 0,
|
|
119
|
+
model
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Chat with LLM
|
|
124
|
+
*/
|
|
125
|
+
async chat(message, model = 'default') {
|
|
126
|
+
if (!message) {
|
|
127
|
+
throw new Error('message cannot be empty');
|
|
128
|
+
}
|
|
129
|
+
const args = ['chat', '--model', model, message];
|
|
130
|
+
return this.executePython(args, { timeout: this.timeout * 2 });
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Multi-turn chat with messages array
|
|
134
|
+
*/
|
|
135
|
+
async chatMessages(messages, model = 'default') {
|
|
136
|
+
if (!messages || messages.length === 0) {
|
|
137
|
+
throw new Error('messages array cannot be empty');
|
|
138
|
+
}
|
|
139
|
+
// For now, just use the last user message
|
|
140
|
+
// TODO: Implement full message history support in ccw-litellm
|
|
141
|
+
const lastMessage = messages[messages.length - 1];
|
|
142
|
+
const content = await this.chat(lastMessage.content, model);
|
|
143
|
+
return {
|
|
144
|
+
content,
|
|
145
|
+
model,
|
|
146
|
+
usage: undefined // TODO: Add usage tracking
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Singleton instance
|
|
151
|
+
let _client = null;
|
|
152
|
+
/**
|
|
153
|
+
* Get or create singleton LiteLLM client
|
|
154
|
+
*/
|
|
155
|
+
export function getLiteLLMClient(config) {
|
|
156
|
+
if (!_client) {
|
|
157
|
+
_client = new LiteLLMClient(config);
|
|
158
|
+
}
|
|
159
|
+
return _client;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if LiteLLM is available
|
|
163
|
+
*/
|
|
164
|
+
export async function checkLiteLLMAvailable() {
|
|
165
|
+
try {
|
|
166
|
+
const client = getLiteLLMClient();
|
|
167
|
+
return await client.isAvailable();
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Get LiteLLM status
|
|
175
|
+
*/
|
|
176
|
+
export async function getLiteLLMStatus() {
|
|
177
|
+
try {
|
|
178
|
+
const client = getLiteLLMClient();
|
|
179
|
+
return await client.getStatus();
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
return {
|
|
183
|
+
available: false,
|
|
184
|
+
error: error.message
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=litellm-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"litellm-client.js","sourceRoot":"","sources":["../../src/tools/litellm-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LiteLLM Executor - Execute LiteLLM endpoints with context caching
|
|
3
|
+
* Integrates with context-cache for file packing and LiteLLM client for API calls
|
|
4
|
+
*/
|
|
5
|
+
export interface LiteLLMExecutionOptions {
|
|
6
|
+
prompt: string;
|
|
7
|
+
endpointId: string;
|
|
8
|
+
baseDir: string;
|
|
9
|
+
cwd?: string;
|
|
10
|
+
includeDirs?: string[];
|
|
11
|
+
enableCache?: boolean;
|
|
12
|
+
onOutput?: (data: {
|
|
13
|
+
type: string;
|
|
14
|
+
data: string;
|
|
15
|
+
}) => void;
|
|
16
|
+
}
|
|
17
|
+
export interface LiteLLMExecutionResult {
|
|
18
|
+
success: boolean;
|
|
19
|
+
output: string;
|
|
20
|
+
model: string;
|
|
21
|
+
provider: string;
|
|
22
|
+
cacheUsed: boolean;
|
|
23
|
+
cachedFiles?: string[];
|
|
24
|
+
error?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Extract @patterns from prompt text
|
|
28
|
+
*/
|
|
29
|
+
export declare function extractPatterns(prompt: string): string[];
|
|
30
|
+
/**
|
|
31
|
+
* Execute LiteLLM endpoint with optional context caching
|
|
32
|
+
*/
|
|
33
|
+
export declare function executeLiteLLMEndpoint(options: LiteLLMExecutionOptions): Promise<LiteLLMExecutionResult>;
|
|
34
|
+
//# sourceMappingURL=litellm-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"litellm-executor.d.ts","sourceRoot":"","sources":["../../src/tools/litellm-executor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC3D;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CASxD;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CA+JjC"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LiteLLM Executor - Execute LiteLLM endpoints with context caching
|
|
3
|
+
* Integrates with context-cache for file packing and LiteLLM client for API calls
|
|
4
|
+
*/
|
|
5
|
+
import { getLiteLLMClient } from './litellm-client.js';
|
|
6
|
+
import { handler as contextCacheHandler } from './context-cache.js';
|
|
7
|
+
import { findEndpointById, getProviderWithResolvedEnvVars, } from '../config/litellm-api-config-manager.js';
|
|
8
|
+
/**
|
|
9
|
+
* Extract @patterns from prompt text
|
|
10
|
+
*/
|
|
11
|
+
export function extractPatterns(prompt) {
|
|
12
|
+
// Match @path patterns: @src/**/*.ts, @CLAUDE.md, @../shared/**/*
|
|
13
|
+
const regex = /@([^\s]+)/g;
|
|
14
|
+
const patterns = [];
|
|
15
|
+
let match;
|
|
16
|
+
while ((match = regex.exec(prompt)) !== null) {
|
|
17
|
+
patterns.push('@' + match[1]);
|
|
18
|
+
}
|
|
19
|
+
return patterns;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Execute LiteLLM endpoint with optional context caching
|
|
23
|
+
*/
|
|
24
|
+
export async function executeLiteLLMEndpoint(options) {
|
|
25
|
+
const { prompt, endpointId, baseDir, cwd, includeDirs, enableCache, onOutput } = options;
|
|
26
|
+
// 1. Find endpoint configuration
|
|
27
|
+
const endpoint = findEndpointById(baseDir, endpointId);
|
|
28
|
+
if (!endpoint) {
|
|
29
|
+
return {
|
|
30
|
+
success: false,
|
|
31
|
+
output: '',
|
|
32
|
+
model: '',
|
|
33
|
+
provider: '',
|
|
34
|
+
cacheUsed: false,
|
|
35
|
+
error: `Endpoint not found: ${endpointId}`,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// 2. Get provider with resolved env vars
|
|
39
|
+
const provider = getProviderWithResolvedEnvVars(baseDir, endpoint.providerId);
|
|
40
|
+
if (!provider) {
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
output: '',
|
|
44
|
+
model: '',
|
|
45
|
+
provider: '',
|
|
46
|
+
cacheUsed: false,
|
|
47
|
+
error: `Provider not found: ${endpoint.providerId}`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// Verify API key is available
|
|
51
|
+
if (!provider.resolvedApiKey) {
|
|
52
|
+
return {
|
|
53
|
+
success: false,
|
|
54
|
+
output: '',
|
|
55
|
+
model: endpoint.model,
|
|
56
|
+
provider: provider.type,
|
|
57
|
+
cacheUsed: false,
|
|
58
|
+
error: `API key not configured for provider: ${provider.name}`,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// 3. Process context cache if enabled
|
|
62
|
+
let finalPrompt = prompt;
|
|
63
|
+
let cacheUsed = false;
|
|
64
|
+
let cachedFiles = [];
|
|
65
|
+
const shouldCache = enableCache ?? endpoint.cacheStrategy.enabled;
|
|
66
|
+
if (shouldCache) {
|
|
67
|
+
const patterns = extractPatterns(prompt);
|
|
68
|
+
if (patterns.length > 0) {
|
|
69
|
+
if (onOutput) {
|
|
70
|
+
onOutput({ type: 'stderr', data: `[Context cache: Found ${patterns.length} @patterns]\n` });
|
|
71
|
+
}
|
|
72
|
+
// Pack files into cache
|
|
73
|
+
const packResult = await contextCacheHandler({
|
|
74
|
+
operation: 'pack',
|
|
75
|
+
patterns,
|
|
76
|
+
cwd: cwd || process.cwd(),
|
|
77
|
+
include_dirs: includeDirs,
|
|
78
|
+
ttl: endpoint.cacheStrategy.ttlMinutes * 60 * 1000,
|
|
79
|
+
max_file_size: endpoint.cacheStrategy.maxSizeKB * 1024,
|
|
80
|
+
});
|
|
81
|
+
if (packResult.success && packResult.result) {
|
|
82
|
+
const pack = packResult.result;
|
|
83
|
+
if (onOutput) {
|
|
84
|
+
onOutput({
|
|
85
|
+
type: 'stderr',
|
|
86
|
+
data: `[Context cache: Packed ${pack.files_packed} files, ${pack.total_bytes} bytes]\n`,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// Read cached content
|
|
90
|
+
const readResult = await contextCacheHandler({
|
|
91
|
+
operation: 'read',
|
|
92
|
+
session_id: pack.session_id,
|
|
93
|
+
limit: endpoint.cacheStrategy.maxSizeKB * 1024,
|
|
94
|
+
});
|
|
95
|
+
if (readResult.success && readResult.result) {
|
|
96
|
+
const read = readResult.result;
|
|
97
|
+
// Prepend cached content to prompt
|
|
98
|
+
finalPrompt = `${read.content}\n\n---\n\n${prompt}`;
|
|
99
|
+
cacheUsed = true;
|
|
100
|
+
cachedFiles = pack.files_packed ? Array(pack.files_packed).fill('...') : [];
|
|
101
|
+
if (onOutput) {
|
|
102
|
+
onOutput({ type: 'stderr', data: `[Context cache: Applied to prompt]\n` });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else if (packResult.error) {
|
|
107
|
+
if (onOutput) {
|
|
108
|
+
onOutput({ type: 'stderr', data: `[Context cache warning: ${packResult.error}]\n` });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// 4. Call LiteLLM
|
|
114
|
+
try {
|
|
115
|
+
if (onOutput) {
|
|
116
|
+
onOutput({
|
|
117
|
+
type: 'stderr',
|
|
118
|
+
data: `[LiteLLM: Calling ${provider.type}/${endpoint.model}]\n`,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
const client = getLiteLLMClient({
|
|
122
|
+
pythonPath: 'python',
|
|
123
|
+
timeout: 120000, // 2 minutes
|
|
124
|
+
});
|
|
125
|
+
// Configure provider credentials via environment
|
|
126
|
+
// LiteLLM uses standard env vars like OPENAI_API_KEY, ANTHROPIC_API_KEY
|
|
127
|
+
const envVarName = getProviderEnvVarName(provider.type);
|
|
128
|
+
if (envVarName) {
|
|
129
|
+
process.env[envVarName] = provider.resolvedApiKey;
|
|
130
|
+
}
|
|
131
|
+
// Set base URL if custom
|
|
132
|
+
if (provider.apiBase) {
|
|
133
|
+
const baseUrlEnvVar = getProviderBaseUrlEnvVarName(provider.type);
|
|
134
|
+
if (baseUrlEnvVar) {
|
|
135
|
+
process.env[baseUrlEnvVar] = provider.apiBase;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Use litellm-client to call chat
|
|
139
|
+
const response = await client.chat(finalPrompt, endpoint.model);
|
|
140
|
+
if (onOutput) {
|
|
141
|
+
onOutput({ type: 'stdout', data: response });
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
success: true,
|
|
145
|
+
output: response,
|
|
146
|
+
model: endpoint.model,
|
|
147
|
+
provider: provider.type,
|
|
148
|
+
cacheUsed,
|
|
149
|
+
cachedFiles,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
const errorMsg = error.message;
|
|
154
|
+
if (onOutput) {
|
|
155
|
+
onOutput({ type: 'stderr', data: `[LiteLLM error: ${errorMsg}]\n` });
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
success: false,
|
|
159
|
+
output: '',
|
|
160
|
+
model: endpoint.model,
|
|
161
|
+
provider: provider.type,
|
|
162
|
+
cacheUsed,
|
|
163
|
+
error: errorMsg,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get environment variable name for provider API key
|
|
169
|
+
*/
|
|
170
|
+
function getProviderEnvVarName(providerType) {
|
|
171
|
+
const envVarMap = {
|
|
172
|
+
openai: 'OPENAI_API_KEY',
|
|
173
|
+
anthropic: 'ANTHROPIC_API_KEY',
|
|
174
|
+
google: 'GOOGLE_API_KEY',
|
|
175
|
+
azure: 'AZURE_API_KEY',
|
|
176
|
+
mistral: 'MISTRAL_API_KEY',
|
|
177
|
+
deepseek: 'DEEPSEEK_API_KEY',
|
|
178
|
+
};
|
|
179
|
+
return envVarMap[providerType] || null;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get environment variable name for provider base URL
|
|
183
|
+
*/
|
|
184
|
+
function getProviderBaseUrlEnvVarName(providerType) {
|
|
185
|
+
const envVarMap = {
|
|
186
|
+
openai: 'OPENAI_API_BASE',
|
|
187
|
+
anthropic: 'ANTHROPIC_API_BASE',
|
|
188
|
+
azure: 'AZURE_API_BASE',
|
|
189
|
+
};
|
|
190
|
+
return envVarMap[providerType] || null;
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=litellm-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"litellm-executor.js","sourceRoot":"","sources":["../../src/tools/litellm-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern Parser - Parse @expression patterns to file lists
|
|
3
|
+
* Supports glob patterns like @src/**.ts, @CLAUDE.md, @../shared/**
|
|
4
|
+
*/
|
|
5
|
+
/** Result of parsing @patterns */
|
|
6
|
+
export interface PatternParseResult {
|
|
7
|
+
files: string[];
|
|
8
|
+
patterns: string[];
|
|
9
|
+
errors: string[];
|
|
10
|
+
stats: {
|
|
11
|
+
total_files: number;
|
|
12
|
+
total_patterns: number;
|
|
13
|
+
matched_patterns: number;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/** Options for pattern parsing */
|
|
17
|
+
export interface PatternParseOptions {
|
|
18
|
+
cwd?: string;
|
|
19
|
+
includeDirs?: string[];
|
|
20
|
+
ignore?: string[];
|
|
21
|
+
maxFiles?: number;
|
|
22
|
+
followSymlinks?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Parse @expressions and return matched files
|
|
26
|
+
*/
|
|
27
|
+
export declare function parsePatterns(patterns: string[], options?: PatternParseOptions): Promise<PatternParseResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Pack files into a single content string with metadata headers
|
|
30
|
+
*/
|
|
31
|
+
export declare function packFiles(files: string[], options?: {
|
|
32
|
+
includeMetadata?: boolean;
|
|
33
|
+
separator?: string;
|
|
34
|
+
maxFileSize?: number;
|
|
35
|
+
}): Promise<{
|
|
36
|
+
content: string;
|
|
37
|
+
packedFiles: string[];
|
|
38
|
+
skippedFiles: string[];
|
|
39
|
+
totalBytes: number;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Parse patterns and pack files in one call
|
|
43
|
+
*/
|
|
44
|
+
export declare function parseAndPack(patterns: string[], options?: PatternParseOptions & {
|
|
45
|
+
includeMetadata?: boolean;
|
|
46
|
+
separator?: string;
|
|
47
|
+
maxFileSize?: number;
|
|
48
|
+
}): Promise<{
|
|
49
|
+
content: string;
|
|
50
|
+
parseResult: PatternParseResult;
|
|
51
|
+
packedFiles: string[];
|
|
52
|
+
skippedFiles: string[];
|
|
53
|
+
totalBytes: number;
|
|
54
|
+
}>;
|
|
55
|
+
//# sourceMappingURL=pattern-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-parser.d.ts","sourceRoot":"","sources":["../../src/tools/pattern-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,kCAAkC;AAClC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,kCAAkC;AAClC,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA4DD;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAqI7B;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE;IACP,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,OAAO,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAkDD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,GAAE,mBAAmB,GAAG;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,OAAO,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,kBAAkB,CAAC;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAgBD"}
|