chatccc 0.2.246 → 0.2.248
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/README.md +2 -0
- package/config.sample.json +2 -1
- package/deepccc-agent/README.md +34 -34
- package/deepccc-agent/os-prompts/darwin.md +8 -8
- package/deepccc-agent/os-prompts/linux.md +8 -8
- package/deepccc-agent/os-prompts/win32.md +9 -9
- package/deepccc-agent/package-lock.json +2027 -2027
- package/deepccc-agent/package.json +65 -65
- package/deepccc-agent/src/__tests__/chat-session.test.ts +816 -741
- package/deepccc-agent/src/__tests__/config.test.ts +34 -34
- package/deepccc-agent/src/__tests__/permissions.test.ts +199 -199
- package/deepccc-agent/src/__tests__/privacy.test.ts +15 -15
- package/deepccc-agent/src/cli.ts +25 -25
- package/deepccc-agent/src/config.ts +101 -101
- package/deepccc-agent/src/index.ts +18 -5
- package/package.json +74 -74
- package/src/__tests__/builtin-chat-session.test.ts +532 -532
- package/src/__tests__/builtin-permissions.test.ts +219 -219
- package/src/__tests__/ccc-adapter.test.ts +194 -194
- package/src/__tests__/config-reload.test.ts +1 -1
- package/src/__tests__/config-utils.test.ts +40 -0
- package/src/__tests__/session-ccc-config.test.ts +21 -0
- package/src/__tests__/session.test.ts +369 -369
- package/src/__tests__/web-ui.test.ts +2 -0
- package/src/adapters/adapter-interface.ts +42 -42
- package/src/adapters/ccc-adapter.ts +150 -150
- package/src/config-utils.ts +37 -13
- package/src/config.ts +23 -13
- package/src/session.ts +2 -0
- package/src/web-ui.ts +33 -2
package/src/web-ui.ts
CHANGED
|
@@ -68,6 +68,9 @@ interface AppConfig {
|
|
|
68
68
|
DEEPSEEK_BASE_URL?: string;
|
|
69
69
|
model?: string;
|
|
70
70
|
alternativeModel?: string;
|
|
71
|
+
effort?: string;
|
|
72
|
+
/** 留空("")= 不 override,跟随 DeepCCC 内核配置(~/.deepccc/config.json 或 DEEPCCC_PROVIDER) */
|
|
73
|
+
provider?: "" | "openai" | "anthropic";
|
|
71
74
|
};
|
|
72
75
|
}
|
|
73
76
|
|
|
@@ -530,6 +533,9 @@ export function unflattenConfig(flat: Record<string, unknown>): Record<string, u
|
|
|
530
533
|
} else if (key === "CHATCCC_CCC_EFFORT") {
|
|
531
534
|
result.ccc = result.ccc || {};
|
|
532
535
|
(result.ccc as Record<string, unknown>).effort = val;
|
|
536
|
+
} else if (key === "CHATCCC_CCC_PROVIDER") {
|
|
537
|
+
result.ccc = result.ccc || {};
|
|
538
|
+
(result.ccc as Record<string, unknown>).provider = val;
|
|
533
539
|
} else if (key === "CHATCCC_CCC_ENABLED") {
|
|
534
540
|
result.ccc = result.ccc || {};
|
|
535
541
|
(result.ccc as Record<string, unknown>).enabled = val === true || val === "true";
|
|
@@ -921,6 +927,15 @@ header .badge{font-size:13px;padding:4px 12px;border-radius:12px;font-weight:500
|
|
|
921
927
|
<label>备选模型(选填)</label>
|
|
922
928
|
<input type="text" id="field-CHATCCC_CCC_ALTERNATIVE_MODEL" placeholder="加入 /model 列表,便于会话内切换">
|
|
923
929
|
</div>
|
|
930
|
+
<div class="form-group">
|
|
931
|
+
<label>API 协议(选填)</label>
|
|
932
|
+
<select id="field-CHATCCC_CCC_PROVIDER">
|
|
933
|
+
<option value="">跟随 DeepCCC 内核配置(默认)</option>
|
|
934
|
+
<option value="openai">openai - OpenAI 兼容协议</option>
|
|
935
|
+
<option value="anthropic">anthropic - Anthropic Messages 协议</option>
|
|
936
|
+
</select>
|
|
937
|
+
<div class="hint">与 Base URL 强相关:OpenAI 兼容端点选 openai;Anthropic Messages 端点选 anthropic。留空时使用 ~/.deepccc/config.json 或 DEEPCCC_PROVIDER 的值。</div>
|
|
938
|
+
</div>
|
|
924
939
|
<div class="form-group">
|
|
925
940
|
<label>Effort(推理强度,选填)</label>
|
|
926
941
|
<select id="field-CHATCCC_CCC_EFFORT">
|
|
@@ -1206,6 +1221,7 @@ header .badge{font-size:13px;padding:4px 12px;border-radius:12px;font-weight:500
|
|
|
1206
1221
|
<div class="section-detail">
|
|
1207
1222
|
<div class="config-row"><span class="key">API Key</span><span class="val" id="cfg-CCC_API_KEY">-</span></div>
|
|
1208
1223
|
<div class="config-row"><span class="key">Base URL</span><span class="val" id="cfg-CCC_BASE_URL">-</span></div>
|
|
1224
|
+
<div class="config-row"><span class="key">API 协议</span><span class="val" id="cfg-CCC_PROVIDER">-</span></div>
|
|
1209
1225
|
<div class="config-row"><span class="key">模型</span><span class="val" id="cfg-CCC_MODEL">-</span></div>
|
|
1210
1226
|
<div class="config-row"><span class="key">备选模型</span><span class="val" id="cfg-CCC_ALTERNATIVE_MODEL">-</span></div>
|
|
1211
1227
|
<label class="agent-default-row" style="margin-top:10px"><input type="checkbox" id="dash-default-ccc" onchange="setDashboardDefaultAgent('ccc', this.checked)"> 设为默认 Agent</label>
|
|
@@ -1258,7 +1274,7 @@ const AGENT_FIELDS = {
|
|
|
1258
1274
|
claude: ['CHATCCC_ANTHROPIC_MODEL','CHATCCC_ANTHROPIC_SUBAGENT_MODEL','CHATCCC_ANTHROPIC_EFFORT','CHATCCC_ANTHROPIC_API_KEY','CHATCCC_ANTHROPIC_BASE_URL','CHATCCC_ANTHROPIC_MAX_TURN'],
|
|
1259
1275
|
cursor: ['CHATCCC_CURSOR_PATH','CHATCCC_CURSOR_MODEL','CHATCCC_CURSOR_ALTERNATIVE_MODEL','CHATCCC_CURSOR_AVATAR_BATTERY_MODE','CHATCCC_CURSOR_ON_DEMAND_MONTHLY_BUDGET'],
|
|
1260
1276
|
codex: ['CHATCCC_CODEX_PATH','CHATCCC_CODEX_MODEL','CHATCCC_CODEX_ALTERNATIVE_MODEL','CHATCCC_CODEX_EFFORT','CHATCCC_CODEX_FAST_MODE'],
|
|
1261
|
-
ccc: ['CHATCCC_CCC_API_KEY','CHATCCC_CCC_BASE_URL','CHATCCC_CCC_MODEL','CHATCCC_CCC_ALTERNATIVE_MODEL','CHATCCC_CCC_EFFORT']
|
|
1277
|
+
ccc: ['CHATCCC_CCC_API_KEY','CHATCCC_CCC_BASE_URL','CHATCCC_CCC_MODEL','CHATCCC_CCC_ALTERNATIVE_MODEL','CHATCCC_CCC_EFFORT','CHATCCC_CCC_PROVIDER']
|
|
1262
1278
|
};
|
|
1263
1279
|
const FEISHU_FIELDS = ['CHATCCC_APP_ID','CHATCCC_APP_SECRET'];
|
|
1264
1280
|
const WEB_UI_FIELDS = ['CHATCCC_WEB_UI_OPEN_ON_START'];
|
|
@@ -1591,6 +1607,7 @@ function renderStep2() {
|
|
|
1591
1607
|
if (c.ccc) {
|
|
1592
1608
|
prefillNested('field-CHATCCC_CCC_API_KEY', c.ccc.DEEPSEEK_API_KEY);
|
|
1593
1609
|
prefillNested('field-CHATCCC_CCC_BASE_URL', c.ccc.DEEPSEEK_BASE_URL);
|
|
1610
|
+
prefillNested('field-CHATCCC_CCC_PROVIDER', c.ccc.provider);
|
|
1594
1611
|
prefillNested('field-CHATCCC_CCC_MODEL', c.ccc.model);
|
|
1595
1612
|
prefillNested('field-CHATCCC_CCC_ALTERNATIVE_MODEL', c.ccc.alternativeModel);
|
|
1596
1613
|
prefillNested('field-CHATCCC_CCC_EFFORT', c.ccc.effort);
|
|
@@ -1990,6 +2007,7 @@ function updateDashboardUI() {
|
|
|
1990
2007
|
document.getElementById('cfg-CODEX_FAST_MODE').textContent = c.codex && c.codex.fastMode === true ? '已启用' : '已禁用';
|
|
1991
2008
|
document.getElementById('cfg-CCC_API_KEY').textContent = (c.ccc && c.ccc.DEEPSEEK_API_KEY) ? '***已设置***' : '(留空)';
|
|
1992
2009
|
document.getElementById('cfg-CCC_BASE_URL').textContent = (c.ccc && c.ccc.DEEPSEEK_BASE_URL) || '(留空)';
|
|
2010
|
+
document.getElementById('cfg-CCC_PROVIDER').textContent = (c.ccc && c.ccc.provider) ? c.ccc.provider : '(跟随 DeepCCC 内核配置)';
|
|
1993
2011
|
document.getElementById('cfg-CCC_MODEL').textContent = (c.ccc && c.ccc.model) || '(留空)';
|
|
1994
2012
|
document.getElementById('cfg-CCC_ALTERNATIVE_MODEL').textContent = (c.ccc && c.ccc.alternativeModel) || '(留空)';
|
|
1995
2013
|
}
|
|
@@ -2067,13 +2085,15 @@ function editSection(section) {
|
|
|
2067
2085
|
'CHATCCC_CODEX_PATH': 'CLI 路径', 'CHATCCC_CODEX_MODEL': '模型', 'CHATCCC_CODEX_ALTERNATIVE_MODEL': '备选模型', 'CHATCCC_CODEX_EFFORT': 'Effort',
|
|
2068
2086
|
'CHATCCC_CODEX_FAST_MODE': 'Fast 模式',
|
|
2069
2087
|
'CHATCCC_CCC_API_KEY': 'API Key', 'CHATCCC_CCC_BASE_URL': 'Base URL',
|
|
2088
|
+
'CHATCCC_CCC_PROVIDER': 'API 协议(选填)',
|
|
2070
2089
|
'CHATCCC_CCC_MODEL': '模型', 'CHATCCC_CCC_ALTERNATIVE_MODEL': '备选模型', 'CHATCCC_CCC_EFFORT': 'Effort'
|
|
2071
2090
|
};
|
|
2072
2091
|
var hintMap = {
|
|
2073
2092
|
'CHATCCC_WEB_UI_OPEN_ON_START': '关闭后可继续手动访问 http://localhost:<端口>/;/restart、/update 和 Web UI 重启无论此项为何值都不会自动打开。',
|
|
2074
2093
|
'CHATCCC_CHROME_DEVTOOLS_ENABLED': '依赖:本机 Google Chrome;ChatGPT 订阅到期查询需要在该 CDP Chrome 中登录 ChatGPT。',
|
|
2075
2094
|
'CHATCCC_CHROME_DEVTOOLS_PORT': '默认 15166,健康检查端点为 http://127.0.0.1:15166/json/version。',
|
|
2076
|
-
'CHATCCC_CHROME_DEVTOOLS_PATH': '选填。留空时自动探测 Google Chrome。'
|
|
2095
|
+
'CHATCCC_CHROME_DEVTOOLS_PATH': '选填。留空时自动探测 Google Chrome。',
|
|
2096
|
+
'CHATCCC_CCC_PROVIDER': '与 Base URL 强相关:OpenAI 兼容端点选 openai;Anthropic Messages 端点选 anthropic。留空 = 跟随 DeepCCC 内核配置(~/.deepccc/config.json 或 DEEPCCC_PROVIDER),改动需重启 ChatCCC 生效。'
|
|
2077
2097
|
};
|
|
2078
2098
|
|
|
2079
2099
|
if (section === 'chromeDevtools') {
|
|
@@ -2115,6 +2135,7 @@ function editSection(section) {
|
|
|
2115
2135
|
} else if (section === 'ccc' && state.config.ccc) {
|
|
2116
2136
|
if (key === 'CHATCCC_CCC_API_KEY') val = state.config.ccc.DEEPSEEK_API_KEY || '';
|
|
2117
2137
|
else if (key === 'CHATCCC_CCC_BASE_URL') val = state.config.ccc.DEEPSEEK_BASE_URL || '';
|
|
2138
|
+
else if (key === 'CHATCCC_CCC_PROVIDER') val = state.config.ccc.provider || '';
|
|
2118
2139
|
else if (key === 'CHATCCC_CCC_MODEL') val = state.config.ccc.model || '';
|
|
2119
2140
|
else if (key === 'CHATCCC_CCC_ALTERNATIVE_MODEL') val = state.config.ccc.alternativeModel || '';
|
|
2120
2141
|
else if (key === 'CHATCCC_CCC_EFFORT') val = state.config.ccc.effort || '';
|
|
@@ -2134,6 +2155,16 @@ function editSection(section) {
|
|
|
2134
2155
|
html += '<option value="apiPercent"' + (modeVal === 'apiPercent' ? ' selected' : '') + '>API 使用比例</option>';
|
|
2135
2156
|
html += '<option value="onDemandUse"' + (modeVal === 'onDemandUse' ? ' selected' : '') + '>On demand use 金额</option>';
|
|
2136
2157
|
html += '</select></div>';
|
|
2158
|
+
} else if (key === 'CHATCCC_CCC_PROVIDER') {
|
|
2159
|
+
var providerVal = val || '';
|
|
2160
|
+
html += '<div class="form-group"><label>' + (labelMap[key] || key) + '</label>';
|
|
2161
|
+
html += '<select id="edit-' + key + '" style="width:100%;padding:8px 12px;border:1px solid #cbd5e1;border-radius:8px;font-size:14px;outline:none">';
|
|
2162
|
+
html += '<option value=""' + (providerVal === '' ? ' selected' : '') + '>跟随 DeepCCC 内核配置(默认)</option>';
|
|
2163
|
+
html += '<option value="openai"' + (providerVal === 'openai' ? ' selected' : '') + '>openai - OpenAI 兼容协议</option>';
|
|
2164
|
+
html += '<option value="anthropic"' + (providerVal === 'anthropic' ? ' selected' : '') + '>anthropic - Anthropic Messages 协议</option>';
|
|
2165
|
+
html += '</select>';
|
|
2166
|
+
if (hintMap[key]) html += '<div class="hint" style="margin-top:6px;line-height:1.5">' + hintMap[key] + '</div>';
|
|
2167
|
+
html += '</div>';
|
|
2137
2168
|
} else {
|
|
2138
2169
|
var rowId = key === 'CHATCCC_CURSOR_ON_DEMAND_MONTHLY_BUDGET'
|
|
2139
2170
|
? ' id="edit-cursor-on-demand-budget-row"'
|