@jesonliu/lark-claudecode-bridge 0.15.0 → 0.18.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/README.md +11 -5
- package/assets/web/css/main.css +111 -0
- package/assets/web/index.html +8 -1738
- package/assets/web/js/bootstrap.js +97 -0
- package/assets/web/js/core.js +73 -0
- package/assets/web/js/main.js +75 -0
- package/assets/web/js/pages/apps.js +206 -0
- package/assets/web/js/pages/claude.js +322 -0
- package/assets/web/js/pages/overview.js +214 -0
- package/assets/web/js/pages/permissions.js +109 -0
- package/assets/web/js/pages/plugins.js +285 -0
- package/assets/web/js/pages/slash.js +128 -0
- package/assets/web/js/pages/workspaces.js +100 -0
- package/assets/web/js/ui.js +123 -0
- package/config.example.yaml +3 -0
- package/dist/claude-profile.d.ts +20 -0
- package/dist/claude-profile.js +101 -0
- package/dist/claude-profile.js.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.js +22 -2
- package/dist/config.js.map +1 -1
- package/dist/executor/claude-executor.js +127 -13
- package/dist/executor/claude-executor.js.map +1 -1
- package/dist/executor/permission-gate.d.ts +4 -4
- package/dist/executor/permission-gate.js +13 -5
- package/dist/executor/permission-gate.js.map +1 -1
- package/dist/executor/plugin-discovery.d.ts +8 -3
- package/dist/executor/plugin-discovery.js +50 -18
- package/dist/executor/plugin-discovery.js.map +1 -1
- package/dist/executor/plugin-manager.js +3 -2
- package/dist/executor/plugin-manager.js.map +1 -1
- package/dist/gateway/card-builder.d.ts +22 -5
- package/dist/gateway/card-builder.js +106 -64
- package/dist/gateway/card-builder.js.map +1 -1
- package/dist/gateway/feishu-gateway.js +11 -1
- package/dist/gateway/feishu-gateway.js.map +1 -1
- package/dist/gateway/progress-card.d.ts +19 -1
- package/dist/gateway/progress-card.js +47 -3
- package/dist/gateway/progress-card.js.map +1 -1
- package/dist/index.js +61 -55
- package/dist/index.js.map +1 -1
- package/dist/session/commands.d.ts +3 -1
- package/dist/session/commands.js +15 -4
- package/dist/session/commands.js.map +1 -1
- package/dist/session/model-profile-command.d.ts +6 -0
- package/dist/session/model-profile-command.js +45 -0
- package/dist/session/model-profile-command.js.map +1 -0
- package/dist/session/triggers.js +9 -1
- package/dist/session/triggers.js.map +1 -1
- package/dist/types.d.ts +43 -4
- package/dist/web/server.js +68 -68
- package/dist/web/server.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// ============ 公共 UI 组件:保存条 / 目录选择弹层 / 右侧抽屉 ============
|
|
2
|
+
import { S, $, esc, toast, api, saveDoc, refresh, hooks } from './core.js';
|
|
3
|
+
|
|
4
|
+
/** 卡级保存行(页内表单卡通用):保存 = saveDoc 落盘;还原 = 重拉磁盘配置 */
|
|
5
|
+
export const saveBarHtml = (id) => `<div class="savebar" id="bar-${id}" style="display:none"><span class="state">有未保存的修改</span><span style="flex:1"></span><button class="btn" data-discard="${id}">还原</button><button class="btn primary" data-save="${id}">保存</button></div>`;
|
|
6
|
+
export const dirtyDotHtml = (id) => `<span class="dirty-dot" id="dirty-${id}">· 未保存</span>`;
|
|
7
|
+
export function bindSaveBar(el, id) {
|
|
8
|
+
el.querySelector(`[data-save="${id}"]`)?.addEventListener('click', () => void saveDoc());
|
|
9
|
+
el.querySelector(`[data-discard="${id}"]`)?.addEventListener('click', async () => {
|
|
10
|
+
await refresh();
|
|
11
|
+
toast('已还原为磁盘配置');
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// ============ 目录选择弹层(工作区路径等;数据源 GET /api/fs/dirs) ============
|
|
16
|
+
/** 后端返回的绝对路径 + 子目录名拼完整路径(Windows 反斜杠 / posix 正斜杠,按 base 自带分隔符判断) */
|
|
17
|
+
const joinPath = (base, name) => {
|
|
18
|
+
if (!base) return name;
|
|
19
|
+
const sepCh = base.includes('\\') ? '\\' : '/';
|
|
20
|
+
return base.replace(/[\\/]+$/, '') + sepCh + name;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* 打开目录浏览弹层:盘符/根层 → 逐级进入 → 「选择此目录」确定。
|
|
24
|
+
* resolve(选中的绝对路径) / resolve(null)(取消)。手输路径可直接跳转,
|
|
25
|
+
* 路径不存在等错误在弹层内联提示(不关层、可改可回退)。
|
|
26
|
+
*/
|
|
27
|
+
export function pickDirectory(initialPath) {
|
|
28
|
+
return new Promise((resolveP) => {
|
|
29
|
+
const mask = document.createElement('div');
|
|
30
|
+
mask.className = 'modal-mask';
|
|
31
|
+
mask.innerHTML = `
|
|
32
|
+
<div class="modal" role="dialog" aria-modal="true">
|
|
33
|
+
<h3 style="margin:0 0 10px">选择目录</h3>
|
|
34
|
+
<div class="row">
|
|
35
|
+
<input type="text" class="pd-jump" placeholder="输入或粘贴路径,回车前往">
|
|
36
|
+
<button class="btn pd-go" title="跳转到输入的路径">前往</button>
|
|
37
|
+
<button class="btn pd-up" title="返回上一级">⬆ 上级</button>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="hint pd-cur" style="margin:8px 0 0;word-break:break-all"></div>
|
|
40
|
+
<div class="dir-list"><div class="empty">加载中…</div></div>
|
|
41
|
+
<div class="savebar">
|
|
42
|
+
<span class="hint pd-note"></span><span style="flex:1"></span>
|
|
43
|
+
<button class="btn pd-cancel">取消</button>
|
|
44
|
+
<button class="btn primary pd-ok">选择此目录</button>
|
|
45
|
+
</div>
|
|
46
|
+
</div>`;
|
|
47
|
+
document.body.appendChild(mask);
|
|
48
|
+
const list = mask.querySelector('.dir-list');
|
|
49
|
+
const cur = mask.querySelector('.pd-cur');
|
|
50
|
+
const upBtn = mask.querySelector('.pd-up');
|
|
51
|
+
const okBtn = mask.querySelector('.pd-ok');
|
|
52
|
+
const note = mask.querySelector('.pd-note');
|
|
53
|
+
const jumpInput = mask.querySelector('.pd-jump');
|
|
54
|
+
let current = ''; // '' = 盘符/根层(此层不可作为选择结果)
|
|
55
|
+
let currentParent = null;
|
|
56
|
+
const close = (val) => { mask.remove(); resolveP(val); };
|
|
57
|
+
const render = (r) => {
|
|
58
|
+
current = r.path || '';
|
|
59
|
+
currentParent = r.parent;
|
|
60
|
+
cur.textContent = r.drives ? '此电脑(选择一个盘符)' : (r.path || '');
|
|
61
|
+
upBtn.hidden = !r.parent;
|
|
62
|
+
okBtn.disabled = !current;
|
|
63
|
+
note.textContent = r.error || '';
|
|
64
|
+
const items = r.drives
|
|
65
|
+
? r.drives.map((d) => ({ label: d, next: d }))
|
|
66
|
+
: (r.dirs || []).map((d) => ({ label: d, next: joinPath(current, d) }));
|
|
67
|
+
list.innerHTML = items.length
|
|
68
|
+
? items.map((it) => `<button data-next="${esc(it.next)}">📁 ${esc(it.label)}</button>`).join('')
|
|
69
|
+
: `<div class="empty">${r.error ? '(上述路径无法列出子目录)' : '(没有子目录)'}</div>`;
|
|
70
|
+
list.querySelectorAll('button[data-next]').forEach((b) => b.onclick = () => go(b.dataset.next));
|
|
71
|
+
};
|
|
72
|
+
const go = async (p) => {
|
|
73
|
+
list.innerHTML = '<div class="empty">加载中…</div>';
|
|
74
|
+
try { render(await api('GET', `/api/fs/dirs?p=${encodeURIComponent(p)}`)); }
|
|
75
|
+
catch (e) { list.innerHTML = `<div class="empty">加载失败:${esc(e.message)}</div>`; }
|
|
76
|
+
};
|
|
77
|
+
const jump = () => { const v = jumpInput.value.trim(); if (v) go(v); };
|
|
78
|
+
mask.querySelector('.pd-go').onclick = jump;
|
|
79
|
+
jumpInput.onkeydown = (e) => { if (e.key === 'Enter') { e.preventDefault(); jump(); } };
|
|
80
|
+
upBtn.onclick = () => { if (currentParent) go(currentParent); };
|
|
81
|
+
okBtn.onclick = () => { if (current) close(current); };
|
|
82
|
+
mask.querySelector('.pd-cancel').onclick = () => close(null);
|
|
83
|
+
mask.onclick = (e) => { if (e.target === mask) close(null); };
|
|
84
|
+
// 初始位置:现值路径存在则从它开始,否则停在盘符/根层(跳转框预填现值方便改错)
|
|
85
|
+
jumpInput.value = initialPath || '';
|
|
86
|
+
go(initialPath || '');
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// ============ 通用右侧抽屉(应用编辑 / 斜杆命令编辑 / 档案编辑共用) ============
|
|
91
|
+
let drawerOnMount = null;
|
|
92
|
+
let drawerSnap = null; // 抽屉打开前的 doc 快照(取消回滚用;远端 CRUD 抽屉不传 snap 则不回滚)
|
|
93
|
+
/** 打开抽屉:snap = 调用方在 mutate doc 之前拍的快照;onMount({body, foot}) 里绑定事件 */
|
|
94
|
+
export function openDrawer({ title, bodyHtml, footHtml, onMount, snap }) {
|
|
95
|
+
$('#drawerTitle').textContent = title;
|
|
96
|
+
$('#drawerBody').innerHTML = bodyHtml;
|
|
97
|
+
$('#drawerFoot').innerHTML = footHtml || '';
|
|
98
|
+
$('#drawerMask').hidden = false;
|
|
99
|
+
drawerSnap = snap ?? null;
|
|
100
|
+
drawerOnMount = onMount || null;
|
|
101
|
+
drawerOnMount?.({ body: $('#drawerBody'), foot: $('#drawerFoot') });
|
|
102
|
+
}
|
|
103
|
+
export function closeDrawer() {
|
|
104
|
+
if ($('#drawerMask').hidden) return;
|
|
105
|
+
$('#drawerMask').hidden = true;
|
|
106
|
+
drawerOnMount = null;
|
|
107
|
+
drawerSnap = null;
|
|
108
|
+
}
|
|
109
|
+
export const isDrawerOpen = () => !$('#drawerMask').hidden;
|
|
110
|
+
/** 抽屉取消:回滚到打开前快照(含「新增未保存」行一并撤销)并重渲染 */
|
|
111
|
+
export function cancelDrawer() {
|
|
112
|
+
if (drawerSnap) S.doc = JSON.parse(JSON.stringify(drawerSnap));
|
|
113
|
+
closeDrawer();
|
|
114
|
+
hooks.rerender();
|
|
115
|
+
}
|
|
116
|
+
// X / ESC / 点遮罩 = 取消:本地编辑抽屉(有快照)回滚未保存修改;远端 CRUD 抽屉直接关闭
|
|
117
|
+
const dismissDrawer = () => (drawerSnap ? cancelDrawer() : closeDrawer());
|
|
118
|
+
/** 抽屉全局监听一次性注册(main.js 启动时调用;模块顶层零副作用) */
|
|
119
|
+
export function initDrawer() {
|
|
120
|
+
$('#drawerClose').onclick = dismissDrawer;
|
|
121
|
+
$('#drawerMask').addEventListener('mousedown', (e) => { if (e.target === e.currentTarget) dismissDrawer(); });
|
|
122
|
+
document.addEventListener('keydown', (e) => { if (e.key === 'Escape') dismissDrawer(); });
|
|
123
|
+
}
|
package/config.example.yaml
CHANGED
|
@@ -85,3 +85,6 @@ concurrency: 3 # 全局并发上限(未单独配置的 app 沿
|
|
|
85
85
|
# icon: skill_outlined # 图标(可选,icon_key 列表见飞书文档)
|
|
86
86
|
# transcripts: # 对话落盘清理策略;缺省 = 永久保留
|
|
87
87
|
# retention_days: 90
|
|
88
|
+
# session: # 会话行为微调;缺省用内置默认
|
|
89
|
+
# context_remind_tokens: 150000 # 上下文超长提醒阈值(tokens,估算口径 = 最后一次回复的输入+缓存规模);
|
|
90
|
+
# # 超过才提示「建议 /new」;0 = 关闭提醒。改后下一条消息热生效
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ClaudeConfig, ClaudeProfile } from './types.js';
|
|
2
|
+
export type SwitchProfileResult = {
|
|
3
|
+
ok: true;
|
|
4
|
+
message: string;
|
|
5
|
+
name: string;
|
|
6
|
+
effectiveModel?: string;
|
|
7
|
+
} | {
|
|
8
|
+
ok: false;
|
|
9
|
+
status: 400 | 404 | 500;
|
|
10
|
+
error: string;
|
|
11
|
+
};
|
|
12
|
+
/** 顶层四字段整体替换(纯函数,单测友好):档案未配置的字段从顶层清除,保证切换干净 */
|
|
13
|
+
export declare function applyProfileToClaudeDoc(oldClaude: Record<string, unknown>, prof: ClaudeProfile, effModel?: string): Record<string, unknown>;
|
|
14
|
+
/** 档案是否为当前生效(进程内有凭证明文,可精确比较;web 前端脱敏模型才用尾 4 位近似) */
|
|
15
|
+
export declare function isProfileActive(claude: ClaudeConfig | undefined, p: ClaudeProfile): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* 切换当前生效档案:校验 → 保注释改写 claude 段顶层四字段 → 内存校验 → 原子写盘 →
|
|
18
|
+
* managed 模式立即同步托管 settings.json。configPath 可注入(测试),缺省用 CONFIG_PATH。
|
|
19
|
+
*/
|
|
20
|
+
export declare function switchProfile(configPath: string, name: string, modelOverride?: string): SwitchProfileResult;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// 厂商档案切换内核:配置页「设为当前」按钮(web/server.ts 的 /api/claude/use-profile)与
|
|
2
|
+
// 飞书端 /model-profile 命令共用的落盘逻辑。放在 web 层之外,避免 session → web 反向依赖。
|
|
3
|
+
// 语义(cc-switch 同款):档案仅是配置库,切换 = 把档案的凭证/base_url/模型整体拷贝到
|
|
4
|
+
// claude 段顶层四字段(互斥凭证同步清理),mode 与 profiles 原样保留;managed 模式下
|
|
5
|
+
// 立即重写托管目录 settings.json → 后续任务即生效,inherit 模式只更新顶层值暂不生效。
|
|
6
|
+
import { readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
7
|
+
import { parseDocument } from 'yaml';
|
|
8
|
+
import { loadConfig, parseConfigText } from './config.js';
|
|
9
|
+
import { initManagedClaudeDir } from './claude-config.js';
|
|
10
|
+
/** 顶层四字段整体替换(纯函数,单测友好):档案未配置的字段从顶层清除,保证切换干净 */
|
|
11
|
+
export function applyProfileToClaudeDoc(oldClaude, prof, effModel) {
|
|
12
|
+
const newClaude = { ...oldClaude };
|
|
13
|
+
if (prof.authToken) {
|
|
14
|
+
newClaude.auth_token = prof.authToken;
|
|
15
|
+
delete newClaude.api_key;
|
|
16
|
+
}
|
|
17
|
+
else if (prof.apiKey) {
|
|
18
|
+
newClaude.api_key = prof.apiKey;
|
|
19
|
+
delete newClaude.auth_token;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
delete newClaude.auth_token;
|
|
23
|
+
delete newClaude.api_key;
|
|
24
|
+
}
|
|
25
|
+
if (prof.baseUrl)
|
|
26
|
+
newClaude.base_url = prof.baseUrl;
|
|
27
|
+
else
|
|
28
|
+
delete newClaude.base_url;
|
|
29
|
+
if (effModel)
|
|
30
|
+
newClaude.model = effModel;
|
|
31
|
+
else
|
|
32
|
+
delete newClaude.model;
|
|
33
|
+
return newClaude;
|
|
34
|
+
}
|
|
35
|
+
/** 档案是否为当前生效(进程内有凭证明文,可精确比较;web 前端脱敏模型才用尾 4 位近似) */
|
|
36
|
+
export function isProfileActive(claude, p) {
|
|
37
|
+
if (!claude)
|
|
38
|
+
return false;
|
|
39
|
+
const tokenMatch = p.authToken ? claude.authToken === p.authToken
|
|
40
|
+
: p.apiKey ? claude.apiKey === p.apiKey
|
|
41
|
+
: !claude.authToken && !claude.apiKey;
|
|
42
|
+
return tokenMatch && (p.baseUrl ?? undefined) === claude.baseUrl;
|
|
43
|
+
}
|
|
44
|
+
/** 原子写(tmp + rename):与 web/server.ts 的 writeAtomic 同款实现,独立内联避免反向依赖 */
|
|
45
|
+
function writeAtomic(path, text) {
|
|
46
|
+
const tmp = `${path}.tmp-${process.pid}`;
|
|
47
|
+
writeFileSync(tmp, text, 'utf8');
|
|
48
|
+
renameSync(tmp, path);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 切换当前生效档案:校验 → 保注释改写 claude 段顶层四字段 → 内存校验 → 原子写盘 →
|
|
52
|
+
* managed 模式立即同步托管 settings.json。configPath 可注入(测试),缺省用 CONFIG_PATH。
|
|
53
|
+
*/
|
|
54
|
+
export function switchProfile(configPath, name, modelOverride) {
|
|
55
|
+
let config;
|
|
56
|
+
try {
|
|
57
|
+
config = loadConfig(configPath);
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
return { ok: false, status: 500, error: `配置加载失败:${e instanceof Error ? e.message : String(e)}` };
|
|
61
|
+
}
|
|
62
|
+
const prof = config.claude?.profiles?.find((p) => p.name === name);
|
|
63
|
+
if (!prof) {
|
|
64
|
+
return { ok: false, status: 404, error: `档案 "${name}" 不存在(新增/修改档案后须先保存再切换)` };
|
|
65
|
+
}
|
|
66
|
+
// 可选 model 覆盖(档案候选模型点选切换):须属于该档案 models 候选集或其默认模型,防手滑串档案
|
|
67
|
+
const model = modelOverride?.trim();
|
|
68
|
+
if (model) {
|
|
69
|
+
const candidates = new Set([...(prof.models ?? []), ...(prof.model ? [prof.model] : [])]);
|
|
70
|
+
if (!candidates.has(model)) {
|
|
71
|
+
return {
|
|
72
|
+
ok: false, status: 400,
|
|
73
|
+
error: `模型 "${model}" 不在档案 "${name}" 的候选模型中(${[...candidates].join('、') || '空'})`,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const effModel = model || prof.model;
|
|
78
|
+
const doc = parseDocument(readFileSync(configPath, 'utf8'));
|
|
79
|
+
const oldJs = doc.toJS();
|
|
80
|
+
const oldClaude = (oldJs.claude && typeof oldJs.claude === 'object' && !Array.isArray(oldJs.claude) ? oldJs.claude : {});
|
|
81
|
+
doc.set('claude', applyProfileToClaudeDoc(oldClaude, prof, effModel));
|
|
82
|
+
const text = doc.toString();
|
|
83
|
+
let after;
|
|
84
|
+
try {
|
|
85
|
+
after = parseConfigText(text, configPath);
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
return { ok: false, status: 400, error: e instanceof Error ? e.message : String(e) };
|
|
89
|
+
}
|
|
90
|
+
writeAtomic(configPath, text);
|
|
91
|
+
// managed 模式即时重写托管 settings.json(后续任务即生效);inherit 由提示说明
|
|
92
|
+
if (after.claude?.mode === 'managed')
|
|
93
|
+
initManagedClaudeDir(after);
|
|
94
|
+
return {
|
|
95
|
+
ok: true,
|
|
96
|
+
name,
|
|
97
|
+
...(effModel ? { effectiveModel: effModel } : {}),
|
|
98
|
+
message: `已切换到档案「${name}」${effModel ? `(模型 ${effModel})` : ''}${after.claude?.mode === 'managed' ? ',managed 模式下对后续任务即生效' : ',当前 inherit 模式:顶层值已更新,切到 managed 后生效'}`,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=claude-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-profile.js","sourceRoot":"","sources":["../src/claude-profile.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ import type { BridgeConfig, FeishuAppConfig } from './types.js';
|
|
|
2
2
|
/** LCB_CONFIG_DIR 环境变量可覆盖配置根目录(多租户分进程场景用;正常用户无须设置) */
|
|
3
3
|
export declare const CONFIG_DIR: string;
|
|
4
4
|
export declare const CONFIG_PATH: string;
|
|
5
|
+
/** 会话上下文超长提醒默认阈值(tokens):约 200k 窗口的 75%,估算口径见 SessionConfig 注释 */
|
|
6
|
+
export declare const DEFAULT_CONTEXT_REMIND_TOKENS = 150000;
|
|
5
7
|
/** 斜杠命令名合法性(飞书侧注册约束):1-32 位字母/数字/下划线/连字符。extra 解析与 Web 远端 create 端点共用 */
|
|
6
8
|
export declare const SLASH_COMMAND_RE: RegExp;
|
|
7
9
|
export declare function loadConfig(path?: string): BridgeConfig;
|
package/dist/config.js
CHANGED
|
@@ -5,6 +5,24 @@ import { parse } from 'yaml';
|
|
|
5
5
|
/** LCB_CONFIG_DIR 环境变量可覆盖配置根目录(多租户分进程场景用;正常用户无须设置) */
|
|
6
6
|
export const CONFIG_DIR = join(process.env.LCB_CONFIG_DIR ?? homedir(), '.lark-claudecode-bridge');
|
|
7
7
|
export const CONFIG_PATH = join(CONFIG_DIR, 'config.yaml');
|
|
8
|
+
/** 会话上下文超长提醒默认阈值(tokens):约 200k 窗口的 75%,估算口径见 SessionConfig 注释 */
|
|
9
|
+
export const DEFAULT_CONTEXT_REMIND_TOKENS = 150000;
|
|
10
|
+
/** 会话行为段(整体可选):context_remind_tokens 硬校验(非法值会让提醒永久误报/永不触发) */
|
|
11
|
+
function normalizeSession(doc) {
|
|
12
|
+
const raw = doc.session;
|
|
13
|
+
if (raw === undefined || raw === null)
|
|
14
|
+
return undefined;
|
|
15
|
+
if (typeof raw !== 'object')
|
|
16
|
+
throw new Error('session 必须为对象(含 context_remind_tokens),请检查 config.yaml');
|
|
17
|
+
const s = raw;
|
|
18
|
+
if (s.context_remind_tokens === undefined || s.context_remind_tokens === null)
|
|
19
|
+
return {};
|
|
20
|
+
const n = Number(s.context_remind_tokens);
|
|
21
|
+
if (!Number.isInteger(n) || n < 0 || n > 10_000_000) {
|
|
22
|
+
throw new Error(`session.context_remind_tokens 必须为 0-10000000 的整数(0 = 关闭提醒;当前值:${String(s.context_remind_tokens)}),请检查 config.yaml`);
|
|
23
|
+
}
|
|
24
|
+
return { contextRemindTokens: n };
|
|
25
|
+
}
|
|
8
26
|
/** 触发词规则校验:match/rewrite 必须非空(错误消息带定位),顺序保持(按序首个命中生效) */
|
|
9
27
|
function normalizeTriggers(raw, where) {
|
|
10
28
|
if (raw === undefined || raw === null)
|
|
@@ -18,9 +36,9 @@ function normalizeTriggers(raw, where) {
|
|
|
18
36
|
throw new Error(`${where} 的 triggers[${j}].match 不能为空`);
|
|
19
37
|
if (!rewrite)
|
|
20
38
|
throw new Error(`${where} 的 triggers[${j}].rewrite 不能为空`);
|
|
21
|
-
//
|
|
39
|
+
// 无占位符时斜杠形态命中会自动把用户参数追加到改写结果末尾(triggers.ts),warn 提示确认是否符合预期
|
|
22
40
|
if (!rewrite.includes('{text}') && !rewrite.includes('{args}')) {
|
|
23
|
-
console.warn(`[配置] ${where} 的 triggers[${j}].rewrite 不含 {text} / {args}
|
|
41
|
+
console.warn(`[配置] ${where} 的 triggers[${j}].rewrite 不含 {text} / {args} 占位符,斜杠命中时用户参数将自动追加在改写结果末尾(需精确控制位置请改用占位符)`);
|
|
24
42
|
}
|
|
25
43
|
return { match, rewrite };
|
|
26
44
|
});
|
|
@@ -403,6 +421,7 @@ export function parseConfigText(raw, pathForError = CONFIG_PATH) {
|
|
|
403
421
|
const server = normalizeServer(doc);
|
|
404
422
|
const claude = normalizeClaude(doc);
|
|
405
423
|
const slashCommands = normalizeSlashCommands(doc);
|
|
424
|
+
const session = normalizeSession(doc);
|
|
406
425
|
return {
|
|
407
426
|
apps,
|
|
408
427
|
workspaces,
|
|
@@ -415,6 +434,7 @@ export function parseConfigText(raw, pathForError = CONFIG_PATH) {
|
|
|
415
434
|
...section(server, 'server'),
|
|
416
435
|
...section(claude, 'claude'),
|
|
417
436
|
...section(slashCommands, 'slashCommands'),
|
|
437
|
+
...section(session, 'session'),
|
|
418
438
|
};
|
|
419
439
|
}
|
|
420
440
|
/** 热重载比较:任一 app 的凭证/名称/工作区/并发/配置目录/人格变化即视为需重启的变更(顺序敏感) */
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,22 @@ function summarizeToolInput(input) {
|
|
|
21
21
|
return input.pattern;
|
|
22
22
|
return JSON.stringify(input).slice(0, 100);
|
|
23
23
|
}
|
|
24
|
+
/** tool_result 失败内容的首行文本(兼容 string / blocks 数组形态):进度卡 ✘ 行的失败原因 */
|
|
25
|
+
function firstErrorLine(content) {
|
|
26
|
+
let text = '';
|
|
27
|
+
if (typeof content === 'string')
|
|
28
|
+
text = content;
|
|
29
|
+
else if (Array.isArray(content)) {
|
|
30
|
+
text = content
|
|
31
|
+
.map((b) => (b && typeof b === 'object' && 'text' in b && typeof b.text === 'string' ? b.text : ''))
|
|
32
|
+
.join(' ');
|
|
33
|
+
}
|
|
34
|
+
const line = text.split('\n').map((l) => l.trim()).find((l) => l.length > 0);
|
|
35
|
+
return line ? line.slice(0, 80) : undefined;
|
|
36
|
+
}
|
|
37
|
+
/** 等待后台任务期间的静默超时:超时仍无任何事件(CLI 异常/卡死)按已有信息收尾,防任务永久挂起。
|
|
38
|
+
* 正常路径无须走到——后台任务完成会唤醒主循环产生新事件,最终由 result/idle 信号收尾 */
|
|
39
|
+
const BG_WAIT_SILENCE_TIMEOUT_MS = 15 * 60 * 1000;
|
|
24
40
|
export async function runTask(prompt, opts, cb) {
|
|
25
41
|
// collector 按 cwd 过滤:只收集工作区内文件(plan mode 的计划文件写在 ~/.claude/plans/
|
|
26
42
|
// 等工作区外路径,不属于「本次修改/新增的文件」,不应进入收尾清单与文件追踪)
|
|
@@ -41,6 +57,9 @@ export async function runTask(prompt, opts, cb) {
|
|
|
41
57
|
settingSources: ['user', 'project'],
|
|
42
58
|
permissionMode: opts.permissionMode ?? 'default',
|
|
43
59
|
includePartialMessages: false,
|
|
60
|
+
// 转发子代理 text 块(默认只转发 tool_use/tool_result 心跳)——配合 parent_tool_use_id
|
|
61
|
+
// 区分主/子代理输出,飞书进度卡能看到子代理在做什么
|
|
62
|
+
forwardSubagentText: true,
|
|
44
63
|
...(opts.resumeSessionId ? { resume: opts.resumeSessionId } : {}),
|
|
45
64
|
...(opts.canUseTool
|
|
46
65
|
? {
|
|
@@ -68,12 +87,43 @@ export async function runTask(prompt, opts, cb) {
|
|
|
68
87
|
let finalText = '';
|
|
69
88
|
let sessionId = opts.resumeSessionId ?? '';
|
|
70
89
|
let turns = 0;
|
|
90
|
+
// 最后一次 result 的主循环用量:input+cache 三项之和 ≈ 当前上下文规模(超长提醒判定口径)。
|
|
91
|
+
// streaming 模式下每个 result 携带最近 turn 的用量,取最新值即可(不累加)
|
|
92
|
+
let usage;
|
|
93
|
+
// 后台任务在途集合(background_tasks_changed 为 level 信号,整组替换;ambient 杂务任务不计)。
|
|
94
|
+
// 主 turn result 到达时集合非空 → 不收尾挂起等待:进程一退后台子代理就被连带杀掉,
|
|
95
|
+
// 永远等不到完成通知——后台任务完成会唤醒 CLI 主循环自动续跑,新事件继续流出直到真正收尾
|
|
96
|
+
const bgTasks = new Map();
|
|
97
|
+
// 主 turn 终态已到但仍在等后台任务(true 期间静默超时看门狗生效)
|
|
98
|
+
let waitingBg = false;
|
|
99
|
+
let lastEventAt = Date.now();
|
|
71
100
|
// init 消息提取的会话清单(每 query 一次);数组字段全部 ?? [] 兜底——SDK 升级字段改名时清单为空但不崩
|
|
72
101
|
let inventory;
|
|
73
102
|
const toolNames = new Map(); // tool_use_id → 工具名(tool_result 块本身不带 name)
|
|
74
103
|
opts.onQuery?.(q);
|
|
104
|
+
// 等待后台任务期间的静默看门狗:pending 期间长时间无任何事件则按已有信息收尾。
|
|
105
|
+
// 经 q.return() 结束 for await(与收到 result 主动 return 走同一条清理路径)
|
|
106
|
+
const silenceWatch = setInterval(() => {
|
|
107
|
+
if (waitingBg && Date.now() - lastEventAt > BG_WAIT_SILENCE_TIMEOUT_MS) {
|
|
108
|
+
console.warn(`[executor] 等待后台任务静默超 ${Math.round(BG_WAIT_SILENCE_TIMEOUT_MS / 60000)} 分钟无事件,按已有结果收尾(后台任务: ${[...bgTasks.values()].map((t) => t.description).join(' / ')})`);
|
|
109
|
+
void q.return(undefined).catch(() => { });
|
|
110
|
+
}
|
|
111
|
+
}, 30_000);
|
|
112
|
+
silenceWatch.unref?.();
|
|
113
|
+
// 收尾(含 MCP 真实连接状态拉取):result 即收尾与 idle 权威收尾两条路径共用
|
|
114
|
+
const finalizeWithMcpPoll = async () => {
|
|
115
|
+
// 收尾前拉一次 MCP 真实连接状态(init 快照必为 pending,这是空闲期 /mcp 的数据源);
|
|
116
|
+
// try/catch 同时兜住同步异常(旧 mock/异常环境下方法缺失)与异步拒绝,绝不阻断收尾
|
|
117
|
+
try {
|
|
118
|
+
const statuses = await q.mcpServerStatus();
|
|
119
|
+
cb.onMcpStatus?.(statuses);
|
|
120
|
+
}
|
|
121
|
+
catch { /* 拉取失败:保留 init 快照 */ }
|
|
122
|
+
return finalize();
|
|
123
|
+
};
|
|
75
124
|
try {
|
|
76
125
|
for await (const message of q) {
|
|
126
|
+
lastEventAt = Date.now();
|
|
77
127
|
switch (message.type) {
|
|
78
128
|
case 'system': {
|
|
79
129
|
if (message.subtype === 'init') {
|
|
@@ -98,13 +148,61 @@ export async function runTask(prompt, opts, cb) {
|
|
|
98
148
|
: '🔄 运行中',
|
|
99
149
|
});
|
|
100
150
|
}
|
|
151
|
+
else if (message.subtype === 'background_tasks_changed') {
|
|
152
|
+
// 后台任务在途清单(level 信号):整组替换语义。ambient=true 的杂务任务
|
|
153
|
+
// (live-update watcher 等)不算用户可见工作,不计数避免状态行虚高
|
|
154
|
+
bgTasks.clear();
|
|
155
|
+
for (const t of message.tasks) {
|
|
156
|
+
if (!t.ambient)
|
|
157
|
+
bgTasks.set(t.task_id, { taskType: t.task_type, description: t.description });
|
|
158
|
+
}
|
|
159
|
+
if (waitingBg && bgTasks.size > 0) {
|
|
160
|
+
await cb.onProgress({ kind: 'status', content: `⏳ 等待 ${bgTasks.size} 个后台任务完成…` });
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else if (message.subtype === 'session_state_changed' && message.state === 'idle') {
|
|
164
|
+
// 权威 turn-over 信号:idle 在 heldBackResult flush 且后台任务续跑循环退出后触发。
|
|
165
|
+
// 主 turn result 已到 + 后台任务全部结束 → 真正收尾(后台任务若再唤醒主循环,
|
|
166
|
+
// 会先收到新的 assistant/result 事件并覆盖 finalText,idle 仍在最后)
|
|
167
|
+
if (waitingBg && bgTasks.size === 0) {
|
|
168
|
+
return await finalizeWithMcpPoll();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else if (message.subtype === 'task_started') {
|
|
172
|
+
const tag = message.subagent_type ? ` [${message.subagent_type}]` : '';
|
|
173
|
+
await cb.onProgress({
|
|
174
|
+
kind: 'status',
|
|
175
|
+
content: `${message.is_backgrounded ? '🤖 后台子代理启动' : '🤖 子代理启动'}${tag}: ${message.description}`,
|
|
176
|
+
});
|
|
177
|
+
// 子代理清单:进度卡独立区块展示每个子代理的运行状态(对齐 CLI 的 agent 进度显示)
|
|
178
|
+
await cb.onProgress({
|
|
179
|
+
kind: 'agent-start',
|
|
180
|
+
agent: { id: message.task_id, description: message.description, type: message.subagent_type ?? 'task' },
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
else if (message.subtype === 'task_notification') {
|
|
184
|
+
// 后台任务落定(completed/failed/stopped):summary 为任务自述结论
|
|
185
|
+
const label = message.status === 'completed' ? '✅ 后台任务完成' : message.status === 'failed' ? '❌ 后台任务失败' : '🛑 后台任务已停止';
|
|
186
|
+
await cb.onProgress({ kind: 'status', content: `${label}: ${message.summary}` });
|
|
187
|
+
await cb.onProgress({
|
|
188
|
+
kind: 'agent-settle',
|
|
189
|
+
id: message.task_id,
|
|
190
|
+
status: message.status === 'completed' ? 'done' : message.status === 'failed' ? 'failed' : 'stopped',
|
|
191
|
+
...(message.summary ? { summary: message.summary } : {}),
|
|
192
|
+
});
|
|
193
|
+
}
|
|
101
194
|
break;
|
|
102
195
|
}
|
|
103
196
|
case 'assistant': {
|
|
104
|
-
turns
|
|
197
|
+
// turns 只计主循环轮次:子代理消息(parent_tool_use_id 非空)混入会把单任务轮数
|
|
198
|
+
// 放大数倍(旧超长提醒误报的帮凶),兜底口径应以主循环为准
|
|
199
|
+
if (!message.parent_tool_use_id)
|
|
200
|
+
turns++;
|
|
105
201
|
for (const block of message.message.content) {
|
|
106
202
|
if (block.type === 'text') {
|
|
107
|
-
|
|
203
|
+
// 子代理文本加标识前缀(forwardSubagentText 转发),与主 Agent 输出在进度卡上区分
|
|
204
|
+
const prefix = message.parent_tool_use_id ? '🤖 ' : '';
|
|
205
|
+
await cb.onProgress({ kind: 'text', content: `${prefix}${block.text}` });
|
|
108
206
|
}
|
|
109
207
|
else if (block.type === 'tool_use') {
|
|
110
208
|
const input = (block.input ?? {});
|
|
@@ -122,7 +220,8 @@ export async function runTask(prompt, opts, cb) {
|
|
|
122
220
|
for (const block of content) {
|
|
123
221
|
if (block.type === 'tool_result') {
|
|
124
222
|
const name = toolNames.get(block.tool_use_id) ?? '';
|
|
125
|
-
|
|
223
|
+
const note = block.is_error ? firstErrorLine(block.content) : undefined;
|
|
224
|
+
await cb.onProgress({ kind: 'tool-result', content: name, ok: !block.is_error, ...(note ? { note } : {}) });
|
|
126
225
|
}
|
|
127
226
|
}
|
|
128
227
|
break;
|
|
@@ -134,19 +233,31 @@ export async function runTask(prompt, opts, cb) {
|
|
|
134
233
|
// 带出循环后统一抛出,消息格式与单轮模式 SDK throw 保持一致(index.ts catch 的 hint 依赖该格式)
|
|
135
234
|
else if (message.subtype.startsWith('error'))
|
|
136
235
|
resultErrorText = message.errors?.join('\n') || message.subtype;
|
|
236
|
+
// usage 提取(error result 可能缺字段,全部兜 0 不抛)
|
|
237
|
+
const u = message.usage;
|
|
238
|
+
if (u) {
|
|
239
|
+
usage = {
|
|
240
|
+
inputTokens: u.input_tokens ?? 0,
|
|
241
|
+
outputTokens: u.output_tokens ?? 0,
|
|
242
|
+
cacheCreationInputTokens: u.cache_creation_input_tokens ?? 0,
|
|
243
|
+
cacheReadInputTokens: u.cache_read_input_tokens ?? 0,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
137
246
|
if ('session_id' in message && typeof message.session_id === 'string')
|
|
138
247
|
sessionId = message.session_id;
|
|
139
|
-
//
|
|
140
|
-
|
|
248
|
+
// 主 turn 终态。后台任务仍在跑时不收尾:return 会触发 q.return() → SDK 清理子进程,
|
|
249
|
+
// 后台子代理被连带杀掉、完成通知永远收不到(旧版「主代理结束、子代理无声消失」根因)。
|
|
250
|
+
// 挂起继续 for await:后台任务完成会唤醒 CLI 主循环自动续跑(新的 assistant/result
|
|
251
|
+
// 事件照常流出,飞书端继续收到推送),直到 session_state_changed(idle) 或续跑 turn 的
|
|
252
|
+
// result 在 bgTasks 清空后到达才真正收尾。bgTasks 为空 = 无在途任务,维持旧行为立即收尾
|
|
253
|
+
//(CLI 不发 background_tasks_changed 事件时自然退化,不会比旧版更差)
|
|
141
254
|
if (message.subtype === 'success' || message.subtype.startsWith('error')) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
cb.onMcpStatus?.(statuses);
|
|
255
|
+
if (bgTasks.size > 0) {
|
|
256
|
+
waitingBg = true;
|
|
257
|
+
await cb.onProgress({ kind: 'status', content: `⏳ 主线回复完成,等待 ${bgTasks.size} 个后台任务…` });
|
|
258
|
+
break;
|
|
147
259
|
}
|
|
148
|
-
|
|
149
|
-
return finalize();
|
|
260
|
+
return await finalizeWithMcpPoll();
|
|
150
261
|
}
|
|
151
262
|
break;
|
|
152
263
|
}
|
|
@@ -163,6 +274,9 @@ export async function runTask(prompt, opts, cb) {
|
|
|
163
274
|
}
|
|
164
275
|
throw err;
|
|
165
276
|
}
|
|
277
|
+
finally {
|
|
278
|
+
clearInterval(silenceWatch);
|
|
279
|
+
}
|
|
166
280
|
return finalize();
|
|
167
281
|
function finalize() {
|
|
168
282
|
if (resultErrorText) {
|
|
@@ -172,7 +286,7 @@ export async function runTask(prompt, opts, cb) {
|
|
|
172
286
|
err.sessionId = sessionId || undefined;
|
|
173
287
|
throw err;
|
|
174
288
|
}
|
|
175
|
-
return { sessionId, finalText, producedFiles: collector.files(), turns, ...(inventory ? { inventory } : {}) };
|
|
289
|
+
return { sessionId, finalText, producedFiles: collector.files(), turns, ...(usage ? { usage } : {}), ...(inventory ? { inventory } : {}) };
|
|
176
290
|
}
|
|
177
291
|
}
|
|
178
292
|
//# sourceMappingURL=claude-executor.js.map
|