@aalis/plugin-cli 0.13.0 → 0.14.1
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/dist/chat-log.d.ts +28 -0
- package/dist/chat-log.d.ts.map +1 -0
- package/dist/chat-log.js +104 -0
- package/dist/chat-log.js.map +1 -0
- package/dist/fold.d.ts +34 -0
- package/dist/fold.d.ts.map +1 -0
- package/dist/fold.js +140 -0
- package/dist/fold.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +348 -229
- package/dist/index.js.map +1 -1
- package/dist/locales/en.d.ts +104 -0
- package/dist/locales/en.d.ts.map +1 -0
- package/dist/locales/en.js +104 -0
- package/dist/locales/en.js.map +1 -0
- package/dist/session-view.d.ts +64 -0
- package/dist/session-view.d.ts.map +1 -0
- package/dist/session-view.js +250 -0
- package/dist/session-view.js.map +1 -0
- package/dist/texts.d.ts +207 -0
- package/dist/texts.d.ts.map +1 -0
- package/dist/texts.js +108 -0
- package/dist/texts.js.map +1 -0
- package/package.json +20 -14
- package/dist/chat-buffer.d.ts +0 -24
- package/dist/chat-buffer.d.ts.map +0 -1
- package/dist/chat-buffer.js +0 -52
- package/dist/chat-buffer.js.map +0 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type Row } from './fold.js';
|
|
2
|
+
import type { TimelineItem } from './session-view.js';
|
|
3
|
+
/** 排好的一项:一段本地行,或一行(一个条目,或收起的一组) */
|
|
4
|
+
type Part = {
|
|
5
|
+
lines: string[];
|
|
6
|
+
} | {
|
|
7
|
+
row: Row;
|
|
8
|
+
};
|
|
9
|
+
export declare class ChatLog {
|
|
10
|
+
private readonly entries;
|
|
11
|
+
private readonly byId;
|
|
12
|
+
/** 还在跑的回合:回合条目还没带结局 */
|
|
13
|
+
private readonly open;
|
|
14
|
+
/** 追加一段本地行 */
|
|
15
|
+
append(lines: string[]): void;
|
|
16
|
+
/**
|
|
17
|
+
* 条目按 itemId 原地更新、新的接在后面;回合条目只记这一轮还在不在跑。交回它是不是刚有了字的回复(未读按它计,同一项的更新
|
|
18
|
+
* 不再计)
|
|
19
|
+
*/
|
|
20
|
+
upsert(item: TimelineItem): boolean;
|
|
21
|
+
/** 流式增量接在她的正文后面(聊天区只画她的正文);交回它是不是刚有了字的回复 */
|
|
22
|
+
delta(itemId: string, text: string): boolean;
|
|
23
|
+
/** 按到达先后排好的各项;taskRunning 是转到后台的调用的任务还在跑 */
|
|
24
|
+
layout(taskRunning: (taskId: string) => boolean): Part[];
|
|
25
|
+
private trim;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=chat-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-log.d.ts","sourceRoot":"","sources":["../src/chat-log.ts"],"names":[],"mappings":"AASA,OAAO,EAAc,KAAK,GAAG,EAAU,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOtD,mCAAmC;AACnC,KAAK,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,GAAG,CAAA;CAAE,CAAC;AA0B/C,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsC;IAC3D,uBAAuB;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAE1C,cAAc;IACd,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAK7B;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO;IAkBnC,4CAA4C;IAC5C,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ5C,4CAA4C;IAC5C,MAAM,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,EAAE;IAuBxD,OAAO,CAAC,IAAI;CAKb"}
|
package/dist/chat-log.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// ════════════════════════════════════════════════════════════
|
|
2
|
+
// 终端的聊天区:一张条目表,每项是一段本地行(欢迎行、指路、输入回显、指令回复与系统消息、附件说明、审批结算行),或会话协议的
|
|
3
|
+
// 一个时间线条目。条目按 itemId 原地更新,新的接在后面;超过上限从最早的裁。本地行在追加时就排成行,时间线条目的行在重绘时由
|
|
4
|
+
// 条目算出。
|
|
5
|
+
// 段与行只由时间线条目算,与 WebUI 时间线同一份输入:相邻、turnId 相同的条目成一段;一段是还在跑的这一轮的最后一段时,末尾那一组
|
|
6
|
+
// 不收。回合条目不画、不进表,只用来认这一轮还在不在跑:单独记,表裁头时还在跑的一轮不会因为回合条目被裁掉就当成收了尾。本地行
|
|
7
|
+
// 不切段,按到达先后插在行与行之间,落在收起的一组内部时排到这一组之后
|
|
8
|
+
// ════════════════════════════════════════════════════════════
|
|
9
|
+
import { rowsOf } from './fold.js';
|
|
10
|
+
/** 聊天区最多留这么多项 */
|
|
11
|
+
const MAX_ENTRIES = 300;
|
|
12
|
+
/** 有字的回复:未读按它计 */
|
|
13
|
+
const isReply = (item) => item.kind === 'agent-message' && item.text.trim() !== '';
|
|
14
|
+
/** 相邻、turnId 相同的条目成一段,逐段交出行;open 是还在跑的回合 */
|
|
15
|
+
function rowsIn(items, open, taskRunning) {
|
|
16
|
+
const runs = [];
|
|
17
|
+
for (const item of items) {
|
|
18
|
+
const last = runs.at(-1);
|
|
19
|
+
if (item.turnId !== undefined && last?.turnId === item.turnId)
|
|
20
|
+
last.items.push(item);
|
|
21
|
+
else
|
|
22
|
+
runs.push({ turnId: item.turnId, items: [item] });
|
|
23
|
+
}
|
|
24
|
+
/** 每个回合的最后一段 */
|
|
25
|
+
const lastOf = new Map(runs.flatMap((run, index) => (run.turnId === undefined ? [] : [[run.turnId, index]])));
|
|
26
|
+
return runs.flatMap((run, index) => rowsOf(run.items, run.turnId !== undefined && open.has(run.turnId) && lastOf.get(run.turnId) === index, taskRunning));
|
|
27
|
+
}
|
|
28
|
+
export class ChatLog {
|
|
29
|
+
entries = [];
|
|
30
|
+
byId = new Map();
|
|
31
|
+
/** 还在跑的回合:回合条目还没带结局 */
|
|
32
|
+
open = new Set();
|
|
33
|
+
/** 追加一段本地行 */
|
|
34
|
+
append(lines) {
|
|
35
|
+
this.entries.push({ lines });
|
|
36
|
+
this.trim();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 条目按 itemId 原地更新、新的接在后面;回合条目只记这一轮还在不在跑。交回它是不是刚有了字的回复(未读按它计,同一项的更新
|
|
40
|
+
* 不再计)
|
|
41
|
+
*/
|
|
42
|
+
upsert(item) {
|
|
43
|
+
if (item.kind === 'turn') {
|
|
44
|
+
if (item.outcome === undefined)
|
|
45
|
+
this.open.add(item.turnId);
|
|
46
|
+
else
|
|
47
|
+
this.open.delete(item.turnId);
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
const entry = this.byId.get(item.itemId);
|
|
51
|
+
const fresh = isReply(item) && !(entry && isReply(entry.item));
|
|
52
|
+
if (entry)
|
|
53
|
+
entry.item = item;
|
|
54
|
+
else {
|
|
55
|
+
const added = { item };
|
|
56
|
+
this.entries.push(added);
|
|
57
|
+
this.byId.set(item.itemId, added);
|
|
58
|
+
this.trim();
|
|
59
|
+
}
|
|
60
|
+
return fresh;
|
|
61
|
+
}
|
|
62
|
+
/** 流式增量接在她的正文后面(聊天区只画她的正文);交回它是不是刚有了字的回复 */
|
|
63
|
+
delta(itemId, text) {
|
|
64
|
+
const entry = this.byId.get(itemId);
|
|
65
|
+
if (entry?.item.kind !== 'agent-message')
|
|
66
|
+
return false;
|
|
67
|
+
const before = isReply(entry.item);
|
|
68
|
+
entry.item = { ...entry.item, text: entry.item.text + text };
|
|
69
|
+
return !before && isReply(entry.item);
|
|
70
|
+
}
|
|
71
|
+
/** 按到达先后排好的各项;taskRunning 是转到后台的调用的任务还在跑 */
|
|
72
|
+
layout(taskRunning) {
|
|
73
|
+
const position = new Map();
|
|
74
|
+
const items = [];
|
|
75
|
+
const locals = [];
|
|
76
|
+
this.entries.forEach((entry, at) => {
|
|
77
|
+
if ('lines' in entry)
|
|
78
|
+
locals.push({ at, lines: entry.lines });
|
|
79
|
+
else {
|
|
80
|
+
position.set(entry.item.itemId, at);
|
|
81
|
+
items.push(entry.item);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
const parts = [];
|
|
85
|
+
let next = 0;
|
|
86
|
+
for (const row of rowsIn(items, this.open, taskRunning)) {
|
|
87
|
+
// 一行从它第一个条目到达的位置算:先到的本地行排在它前面,后到的(含落在收起的一组内部的)排在它后面
|
|
88
|
+
const at = position.get(('group' in row ? row.group[0] : row.item).itemId);
|
|
89
|
+
for (; next < locals.length && locals[next].at < at; next++)
|
|
90
|
+
parts.push({ lines: locals[next].lines });
|
|
91
|
+
parts.push({ row });
|
|
92
|
+
}
|
|
93
|
+
for (; next < locals.length; next++)
|
|
94
|
+
parts.push({ lines: locals[next].lines });
|
|
95
|
+
return parts;
|
|
96
|
+
}
|
|
97
|
+
trim() {
|
|
98
|
+
for (const gone of this.entries.splice(0, this.entries.length - MAX_ENTRIES)) {
|
|
99
|
+
if ('item' in gone)
|
|
100
|
+
this.byId.delete(gone.item.itemId);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=chat-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-log.js","sourceRoot":"","sources":["../src/chat-log.ts"],"names":[],"mappings":"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"}
|
package/dist/fold.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type TextRef } from '@aalis/schema-i18n';
|
|
2
|
+
import type { TimelineItem } from './session-view.js';
|
|
3
|
+
type Item<K extends TimelineItem['kind']> = Extract<TimelineItem, {
|
|
4
|
+
kind: K;
|
|
5
|
+
}>;
|
|
6
|
+
export type ToolCallItem = Item<'tool-call'>;
|
|
7
|
+
type Process = ToolCallItem | Item<'reasoning'>;
|
|
8
|
+
/** 一段里的条目:回合条目不在段里 */
|
|
9
|
+
export type Entry = Exclude<TimelineItem, Item<'turn'>>;
|
|
10
|
+
/** 一段里的一项:一个条目,或收成一行的一组工具调用与夹着的思考 */
|
|
11
|
+
export type Row = {
|
|
12
|
+
item: Entry;
|
|
13
|
+
} | {
|
|
14
|
+
group: Process[];
|
|
15
|
+
};
|
|
16
|
+
/** 一段的各行;live 是这一段是还在跑的这一轮的最后一段 */
|
|
17
|
+
export declare function rowsOf(items: readonly Entry[], live: boolean, taskRunning: (taskId: string) => boolean): Row[];
|
|
18
|
+
/** 收起的一行:几个调用,各是什么种类 */
|
|
19
|
+
export declare function groupSummary(calls: readonly ToolCallItem[]): TextRef;
|
|
20
|
+
/**
|
|
21
|
+
* 聊天区实际用的语言:字典键 language 渲染出的译文,即本插件的字典此刻选中的那种(同 WebUI 的 pageLanguage);用时里的数字按它写,
|
|
22
|
+
* 与句子里的同类参数一致。译文不是合法的语言标签时按原文的语言
|
|
23
|
+
*/
|
|
24
|
+
export declare const languageOf: (render: (text: TextRef) => string) => string;
|
|
25
|
+
/** 工具调用的一行:做了什么(执行的命令、改的文件或工具名)与状态;language 是聊天区实际用的语言({@link languageOf}) */
|
|
26
|
+
export declare function toolLine(call: ToolCallItem, taskRunning: (taskId: string) => boolean, language: string): {
|
|
27
|
+
summary: TextRef;
|
|
28
|
+
status: {
|
|
29
|
+
text: TextRef;
|
|
30
|
+
tone?: "attention" | "danger";
|
|
31
|
+
} | undefined;
|
|
32
|
+
};
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=fold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fold.d.ts","sourceRoot":"","sources":["../src/fold.ts"],"names":[],"mappings":"AAWA,OAAO,EAAqC,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,KAAK,IAAI,CAAC,CAAC,SAAS,YAAY,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAC/E,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;AAE7C,KAAK,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;AAChD,sBAAsB;AACtB,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAExD,qCAAqC;AACrC,MAAM,MAAM,GAAG,GAAG;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC;AAqBzD,mCAAmC;AACnC,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,GAAG,GAAG,EAAE,CAmB9G;AASD,wBAAwB;AACxB,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAWpE;AAoDD;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,KAAG,MACiB,CAAC;AAEjF,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,EAAE,QAAQ,EAAE,MAAM;;;cA9B5F,OAAO;eAAS,WAAW,GAAG,QAAQ;;EA4ChD"}
|
package/dist/fold.js
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
// ════════════════════════════════════════════════════════════
|
|
2
|
+
// 终端聊天区里工具调用的画法:收起的规则,与工具调用的一行。
|
|
3
|
+
// 收起规则与 plugin-webui-client 的 workbench/fold.ts 是同一份(同名),终端这份按本包的 MIT 发布,两份由
|
|
4
|
+
// test/architecture/tool-call-fold-parity.test.ts 钉住;收起是界面的取舍,不进会话协议。规则:一段里连续到 COLLAPSE_FROM 个的
|
|
5
|
+
// 工具调用(夹着的思考一起)收成一行,按展示种类计数;其中有等审批、失败或还在跑的(含转到后台、后台任务还在跑的),或者是还在
|
|
6
|
+
// 跑的这一轮最后一段末尾那一组,不收,免得藏掉要看的东西。
|
|
7
|
+
// 工具调用的一行前半写做了什么(同 WebUI 工具卡的那一行,来自参数的文字经审批契约的清洗;终端按行画,换行与制表符也写成转义),
|
|
8
|
+
// 后半写状态,完成的写用时(与 WebUI 工具卡同一写法)
|
|
9
|
+
// ════════════════════════════════════════════════════════════
|
|
10
|
+
import { clipForCard, sanitizeForCard } from '@aalis/api-approval';
|
|
11
|
+
import { normalizeLanguages, resolveSource } from '@aalis/schema-i18n';
|
|
12
|
+
import { t } from './texts.js';
|
|
13
|
+
/** 连续这么多个工具调用收成一行 */
|
|
14
|
+
const COLLAPSE_FROM = 3;
|
|
15
|
+
/** 认得的展示:种类按加法扩展,会话服务比终端新时会发来认不出的种类,当没声明 */
|
|
16
|
+
function displayOf({ display }) {
|
|
17
|
+
return display?.kind === 'command' || display?.kind === 'file-change' ? display : undefined;
|
|
18
|
+
}
|
|
19
|
+
/** 等 owner 批准 */
|
|
20
|
+
const awaitingApproval = (call) => call.approvalId !== undefined && call.settlement === undefined;
|
|
21
|
+
/** 收起会藏掉要看的东西;taskRunning 是转到后台的调用的任务还在跑 */
|
|
22
|
+
const holding = (call, taskRunning) => awaitingApproval(call) ||
|
|
23
|
+
call.status === 'failed' ||
|
|
24
|
+
call.status === 'generating' ||
|
|
25
|
+
call.status === 'running' ||
|
|
26
|
+
(call.taskId !== undefined && taskRunning(call.taskId));
|
|
27
|
+
/** 一段的各行;live 是这一段是还在跑的这一轮的最后一段 */
|
|
28
|
+
export function rowsOf(items, live, taskRunning) {
|
|
29
|
+
const rows = [];
|
|
30
|
+
let run = [];
|
|
31
|
+
const flush = (atEnd) => {
|
|
32
|
+
const calls = run.filter(item => item.kind === 'tool-call');
|
|
33
|
+
const held = calls.some(call => holding(call, taskRunning));
|
|
34
|
+
if (calls.length >= COLLAPSE_FROM && !held && !(live && atEnd))
|
|
35
|
+
rows.push({ group: run });
|
|
36
|
+
else
|
|
37
|
+
rows.push(...run.map(item => ({ item })));
|
|
38
|
+
run = [];
|
|
39
|
+
};
|
|
40
|
+
for (const item of items) {
|
|
41
|
+
if (item.kind === 'tool-call' || item.kind === 'reasoning')
|
|
42
|
+
run.push(item);
|
|
43
|
+
else {
|
|
44
|
+
flush(false);
|
|
45
|
+
rows.push({ item });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
flush(true);
|
|
49
|
+
return rows;
|
|
50
|
+
}
|
|
51
|
+
const KIND_COUNTS = {
|
|
52
|
+
command: 'callKindCommand',
|
|
53
|
+
'file-change': 'callKindFileChange',
|
|
54
|
+
generic: 'callKindOther',
|
|
55
|
+
};
|
|
56
|
+
const kindOf = (call) => displayOf(call)?.kind ?? 'generic';
|
|
57
|
+
/** 收起的一行:几个调用,各是什么种类 */
|
|
58
|
+
export function groupSummary(calls) {
|
|
59
|
+
const counts = new Map();
|
|
60
|
+
for (const call of calls)
|
|
61
|
+
counts.set(kindOf(call), (counts.get(kindOf(call)) ?? 0) + 1);
|
|
62
|
+
const count = calls.length;
|
|
63
|
+
if (counts.size > 1) {
|
|
64
|
+
return t('callsMixed', { count, kinds: [...counts].map(([kind, n]) => t(KIND_COUNTS[kind], { count: n })) });
|
|
65
|
+
}
|
|
66
|
+
const [kind] = counts.keys();
|
|
67
|
+
if (kind === 'command')
|
|
68
|
+
return t('callsCommands', { count });
|
|
69
|
+
if (kind === 'file-change')
|
|
70
|
+
return t('callsFileChanges', { count });
|
|
71
|
+
return t('callsTools', { count });
|
|
72
|
+
}
|
|
73
|
+
/** 一行里命令最多显示这么多个字 */
|
|
74
|
+
const SUMMARY_LIMIT = 60;
|
|
75
|
+
/** 写到十分之一秒的数字格式,按语言 */
|
|
76
|
+
const tenths = new Map();
|
|
77
|
+
/** 用时:一分钟以内写到十分之一秒,数字按聊天区实际用的语言写,同 WebUI */
|
|
78
|
+
function durationOf(ms, language) {
|
|
79
|
+
if (ms < 60_000) {
|
|
80
|
+
let format = tenths.get(language);
|
|
81
|
+
if (!format) {
|
|
82
|
+
format = new Intl.NumberFormat(language, { minimumFractionDigits: 1, maximumFractionDigits: 1 });
|
|
83
|
+
tenths.set(language, format);
|
|
84
|
+
}
|
|
85
|
+
return t('durationSeconds', { seconds: format.format(ms / 1000) });
|
|
86
|
+
}
|
|
87
|
+
const seconds = Math.round(ms / 1000);
|
|
88
|
+
return t('durationMinutes', { minutes: Math.floor(seconds / 60), seconds: seconds % 60 });
|
|
89
|
+
}
|
|
90
|
+
/** 一行里的文字:审批契约的清洗保留换行与制表符,终端的一行装不下它们,同样写成 `\x0A` 的样子 */
|
|
91
|
+
const inline = (text) => text.replace(/[\n\t]/g, char => (char === '\n' ? '\\x0A' : '\\x09'));
|
|
92
|
+
/** 工具调用的状态:等审批的与失败的要醒目;完成的写用时,转到后台、任务还在跑的写明(这一组因此不收) */
|
|
93
|
+
function statusOf(call, taskRunning, language) {
|
|
94
|
+
if (awaitingApproval(call))
|
|
95
|
+
return { text: t('waitingApproval'), tone: 'attention' };
|
|
96
|
+
switch (call.status) {
|
|
97
|
+
case 'generating':
|
|
98
|
+
return { text: t('generating') };
|
|
99
|
+
case 'running':
|
|
100
|
+
return { text: t('running') };
|
|
101
|
+
case 'failed': {
|
|
102
|
+
const display = displayOf(call);
|
|
103
|
+
const code = display?.kind === 'command' ? display.exitCode : undefined;
|
|
104
|
+
return { text: code ? t('exitCode', { code }) : t('failed'), tone: 'danger' };
|
|
105
|
+
}
|
|
106
|
+
case 'aborted':
|
|
107
|
+
return { text: t('stopped') };
|
|
108
|
+
case 'denied':
|
|
109
|
+
return { text: t('denied') };
|
|
110
|
+
case 'completed':
|
|
111
|
+
if (call.taskId !== undefined && taskRunning(call.taskId))
|
|
112
|
+
return { text: t('backgroundRunning') };
|
|
113
|
+
return call.durationMs === undefined ? undefined : { text: durationOf(call.durationMs, language) };
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* 聊天区实际用的语言:字典键 language 渲染出的译文,即本插件的字典此刻选中的那种(同 WebUI 的 pageLanguage);用时里的数字按它写,
|
|
118
|
+
* 与句子里的同类参数一致。译文不是合法的语言标签时按原文的语言
|
|
119
|
+
*/
|
|
120
|
+
export const languageOf = (render) => normalizeLanguages([render(t('language'))])[0] ?? resolveSource(t('language'));
|
|
121
|
+
/** 工具调用的一行:做了什么(执行的命令、改的文件或工具名)与状态;language 是聊天区实际用的语言({@link languageOf}) */
|
|
122
|
+
export function toolLine(call, taskRunning, language) {
|
|
123
|
+
const display = displayOf(call);
|
|
124
|
+
let summary;
|
|
125
|
+
if (display?.kind === 'command') {
|
|
126
|
+
const { head, omitted, tail } = clipForCard(display.command.split('\n')[0], SUMMARY_LIMIT);
|
|
127
|
+
summary =
|
|
128
|
+
omitted === 0
|
|
129
|
+
? t('toolRun', { command: inline(head) })
|
|
130
|
+
: t('toolRunClipped', { head: inline(head), count: omitted, tail: inline(tail) });
|
|
131
|
+
}
|
|
132
|
+
else if (display?.kind === 'file-change') {
|
|
133
|
+
const path = inline(sanitizeForCard(display.path));
|
|
134
|
+
summary = display.removed === undefined ? t('toolWrite', { path }) : t('toolEdit', { path });
|
|
135
|
+
}
|
|
136
|
+
else
|
|
137
|
+
summary = t('toolCall', { tool: inline(sanitizeForCard(call.name)) });
|
|
138
|
+
return { summary, status: statusOf(call, taskRunning, language) };
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=fold.js.map
|
package/dist/fold.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fold.js","sourceRoot":"","sources":["../src/fold.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -27,7 +27,11 @@ declare const _default: import("@aalis/core").PluginDefinition<{
|
|
|
27
27
|
plugins: import("@aalis/core").OptionalUse<import("@aalis/core").PluginManagerService, import("@aalis/core").PluginManagerService>;
|
|
28
28
|
commands: import("@aalis/core").OptionalUse<import("@aalis/api-commands").CommandService, import("@aalis/api-commands").BoundCommands>;
|
|
29
29
|
/** 发出入站之前给配置的会话建档,创建来源写 cli 审批面的登记名 */
|
|
30
|
-
sessionManager: import("@aalis/core").OptionalUse<import("@aalis/api-session-manager").SessionManagerService, import("@aalis/api-session-manager").
|
|
30
|
+
sessionManager: import("@aalis/core").OptionalUse<import("@aalis/api-session-manager").SessionManagerService, import("@aalis/api-session-manager").SessionManagerService>;
|
|
31
|
+
/** 界面文字按全局层的语言显示;缺席时按原文 */
|
|
32
|
+
i18n: import("@aalis/core").OptionalUse<import("@aalis/api-i18n").I18nService, import("@aalis/api-i18n").I18nService>;
|
|
33
|
+
/** 聊天区她的输出取会话协议里本会话的条目;缺席时只写整条回复 */
|
|
34
|
+
sessionProtocol: import("@aalis/core").OptionalUse<import("@aalis/api-session-protocol").SessionProtocolService, import("@aalis/api-session-protocol").SessionProtocolService>;
|
|
31
35
|
}>;
|
|
32
36
|
export default _default;
|
|
33
37
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EAEL,KAAK,eAAe,EAIrB,MAAM,qBAAqB,CAAC;AA6B7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK7C,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,WAAW;QACnB,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACpC,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;KACtC;CACF;AAGD,eAAO,MAAM,GAAG,iEAAmC,CAAC;;;;;;;;;IA4DlD,qCAAqC;;;;;IAKrC,4CAA4C;;IAE5C,sCAAsC;;;IAGtC,uCAAuC;;IAEvC,2BAA2B;;IAE3B,oCAAoC;;;AAwBtC,wBAQG"}
|