@aalis/plugin-agent 0.16.0 → 0.17.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/helpers.d.ts +45 -26
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +120 -79
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1157 -1459
- package/dist/index.js.map +1 -1
- package/dist/locales/en.d.ts +58 -0
- package/dist/locales/en.d.ts.map +1 -0
- package/dist/locales/en.js +58 -0
- package/dist/locales/en.js.map +1 -0
- package/dist/prompt-assembly.d.ts +5 -5
- package/dist/prompt-assembly.d.ts.map +1 -1
- package/dist/prompt-assembly.js +24 -24
- package/dist/prompt-assembly.js.map +1 -1
- package/dist/session-queue.d.ts +86 -0
- package/dist/session-queue.d.ts.map +1 -0
- package/dist/session-queue.js +194 -0
- package/dist/session-queue.js.map +1 -0
- package/dist/texts.d.ts +115 -0
- package/dist/texts.d.ts.map +1 -0
- package/dist/texts.js +62 -0
- package/dist/texts.js.map +1 -0
- package/package.json +28 -21
package/dist/prompt-assembly.js
CHANGED
|
@@ -60,14 +60,12 @@ async function buildWithTimeout(logger, key, run, timeoutMs, parentSignal) {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
63
|
-
*
|
|
64
|
-
* 这类回合没有当前 user
|
|
63
|
+
* 是不是本轮指令块(proactive 任务块、宿主通知块、空闲开话题的提示)。
|
|
64
|
+
* 这类回合没有当前 user 消息,历史里却有旧 user 消息。
|
|
65
65
|
*/
|
|
66
|
-
function
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
return typeof injector === 'string' && DIRECTIVE_KINDS.includes(injector);
|
|
70
|
-
});
|
|
66
|
+
function isDirective(m) {
|
|
67
|
+
const injector = m.metadata?.injector;
|
|
68
|
+
return typeof injector === 'string' && DIRECTIVE_KINDS.includes(injector);
|
|
71
69
|
}
|
|
72
70
|
/** 各锚位在 messages 中的插入位置;返回 -1 = 本轮弃置该槽 */
|
|
73
71
|
function anchorInsertAt(anchor, messages) {
|
|
@@ -78,32 +76,33 @@ function anchorInsertAt(anchor, messages) {
|
|
|
78
76
|
}
|
|
79
77
|
case 'knowledge':
|
|
80
78
|
case 'context': {
|
|
81
|
-
// 头部 system
|
|
82
|
-
// context
|
|
83
|
-
|
|
79
|
+
// 头部 system 区末尾:第一条非 system 或第一条本轮块(易变块、指令块)之前,历史为空时
|
|
80
|
+
// 也落在本轮诸块之前。顺序靠 ANCHOR_ORDER 串行插入保证:knowledge 先落位,context 再
|
|
81
|
+
// 定位时自然排在其后。
|
|
82
|
+
const idx = messages.findIndex(m => m.role !== 'system' || m.metadata?.injector === VOLATILE_INJECTOR || isDirective(m));
|
|
84
83
|
return idx === -1 ? messages.length : idx;
|
|
85
84
|
}
|
|
86
85
|
case 'turn-context': {
|
|
87
86
|
// 每轮取材的背景材料:落在历史结束处(缓存断点之后)、当前轮诸块之前。
|
|
88
87
|
// 三级定位,取首个命中:
|
|
89
|
-
// 1.
|
|
90
|
-
// 消息,历史里却有旧 user 消息;若按「最后一条 user」定位会把材料 splice
|
|
91
|
-
// 进历史**内部**,既割裂转录又在 append-only 区制造新的缓存断点。
|
|
92
|
-
// 2. 易变块(persona-volatile)之前——普通轮的历史/当前轮分界线。
|
|
88
|
+
// 1. 易变块(persona-volatile)之前——普通轮与空闲开话题那一轮的历史/当前轮分界线。
|
|
93
89
|
// 材料在此刻事实(时间/状态)之前、focus 与 turn-hint 之前:焦点
|
|
94
|
-
//
|
|
95
|
-
//
|
|
90
|
+
// 指引与平台提示(「本轮上下文中的群聊历史记录」)保持先行语邻接,
|
|
91
|
+
// 不被整批材料隔断。
|
|
92
|
+
// 2. 指令块(proactive 任务块、宿主通知块)之前——这类回合没有易变块与
|
|
93
|
+
// 当前 user 消息,历史里却有旧 user 消息;若按「最后一条 user」定位会把
|
|
94
|
+
// 材料 splice 进历史**内部**,既割裂转录又在 append-only 区制造新的缓存断点。
|
|
96
95
|
// 3. 兜底:最后一条 user 之前;全列表无 user(空历史特殊形状)落尾。
|
|
97
96
|
//
|
|
98
97
|
// 注意 ANCHOR_ORDER 的「turn-context 先于 turn-hint」只在**同一次组装
|
|
99
98
|
// 内**成立:工具循环第二轮才物化的迟到材料按当轮规则重新定位,与首轮
|
|
100
99
|
// 已物化块的相对次序不保证。
|
|
101
|
-
const directive = directiveIndex(messages);
|
|
102
|
-
if (directive >= 0)
|
|
103
|
-
return directive;
|
|
104
100
|
const volatileIdx = messages.findIndex(m => m.metadata?.injector === VOLATILE_INJECTOR);
|
|
105
101
|
if (volatileIdx >= 0)
|
|
106
102
|
return volatileIdx;
|
|
103
|
+
const directive = messages.findIndex(isDirective);
|
|
104
|
+
if (directive >= 0)
|
|
105
|
+
return directive;
|
|
107
106
|
for (let i = messages.length - 1; i >= 0; i--) {
|
|
108
107
|
if (messages[i].role === 'user')
|
|
109
108
|
return i;
|
|
@@ -111,9 +110,9 @@ function anchorInsertAt(anchor, messages) {
|
|
|
111
110
|
return messages.length;
|
|
112
111
|
}
|
|
113
112
|
case 'turn-hint': {
|
|
114
|
-
// 指令块之前(理由同 turn-context 第
|
|
113
|
+
// 指令块之前(理由同 turn-context 第 2 级;同一次组装内 turn-context 已先落在它之前,
|
|
115
114
|
// hint 因此紧贴指令块);没有指令块时落在最后一条 user 之前
|
|
116
|
-
const directive =
|
|
115
|
+
const directive = messages.findIndex(isDirective);
|
|
117
116
|
if (directive >= 0)
|
|
118
117
|
return directive;
|
|
119
118
|
for (let i = messages.length - 1; i >= 0; i--) {
|
|
@@ -133,7 +132,9 @@ function anchorInsertAt(anchor, messages) {
|
|
|
133
132
|
* - 物化形态与旧手搓注入一致:`{role:'system', content, metadata:{injector: 全局键}}`,
|
|
134
133
|
* trim / token 统计 / WebUI 零改动。
|
|
135
134
|
*/
|
|
136
|
-
export async function assemblePromptContributions(caps, data,
|
|
135
|
+
export async function assemblePromptContributions(caps, data,
|
|
136
|
+
/** 这一轮的输入(视图的 inputs):不在回合里的估算(token:request 的快照)给空数组 */
|
|
137
|
+
inputs, opts) {
|
|
137
138
|
opts?.signal?.throwIfAborted();
|
|
138
139
|
const entries = caps.contributions.use.collect('agent:prompt');
|
|
139
140
|
if (entries.length === 0)
|
|
@@ -144,9 +145,8 @@ export async function assemblePromptContributions(caps, data, opts) {
|
|
|
144
145
|
return;
|
|
145
146
|
const view = {
|
|
146
147
|
sessionId: data.sessionId,
|
|
147
|
-
userId: data.userId,
|
|
148
148
|
platform: data.platform,
|
|
149
|
-
|
|
149
|
+
inputs,
|
|
150
150
|
dryRun: data.dryRun === true,
|
|
151
151
|
// 浅拷贝快照:build 是并行执行的,把活数组递进去,某个 build 若强转
|
|
152
152
|
// readonly 去 splice 会与其他 build 的读跨 await 竞态(旧串行中间件无此
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-assembly.js","sourceRoot":"","sources":["../src/prompt-assembly.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,mDAAmD;AACnD,EAAE;AACF,gEAAgE;AAChE,yCAAyC;AACzC,EAAE;AACF,4CAA4C;AAC5C,oDAAoD;AACpD,yCAAyC;AACzC,+CAA+C;AAC/C,mBAAmB;AACnB,+DAA+D;AAK/D,OAAO,EAAE,eAAe,EAAgB,MAAM,uBAAuB,CAAC;AAEtE,uDAAuD;AACvD,MAAM,YAAY,GAA4B,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;AAWhH;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAEpD;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAC7B,MAAc,EACd,GAAW,EACX,GAAqE,EACrE,SAAkB,EAClB,YAA0B;IAE1B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;IACrG,IAAI,KAAgD,CAAC;IACrD,IAAI,OAAiC,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACnD,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QACH,IAAI,SAAS,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAC/B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,UAAU,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,gCAAgC,SAAS,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;YACpG,CAAC,EAAE,SAAS,CAAC,CAAC;QAChB,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC1C,MAAM,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,EAAE,cAAc,EAAE,CAAC;QAC/B,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,oBAAoB,GAAG,UAAU,SAAS,oBAAoB,CAAC,CAAC;YAC5E,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,IAAI,KAAK,KAAK,SAAS;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,OAAO;YAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,
|
|
1
|
+
{"version":3,"file":"prompt-assembly.js","sourceRoot":"","sources":["../src/prompt-assembly.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { IncomingMessage } from '@aalis/schema-message';
|
|
2
|
+
/** 在跑的一轮 */
|
|
3
|
+
export interface Turn {
|
|
4
|
+
readonly sessionId: string;
|
|
5
|
+
readonly turnId: string;
|
|
6
|
+
readonly controller: AbortController;
|
|
7
|
+
/** 由真人消息开:只有这样的一轮收插进来的真人消息 */
|
|
8
|
+
readonly human: boolean;
|
|
9
|
+
/** 由排着的输入开(它们是上一轮进行期间到的) */
|
|
10
|
+
readonly queued: boolean;
|
|
11
|
+
/** 开轮的这一批,按入队先后 */
|
|
12
|
+
readonly batch: readonly IncomingMessage[];
|
|
13
|
+
/** 停下它的原因,只给日志 */
|
|
14
|
+
reason?: string;
|
|
15
|
+
/** 停下它的人:有人停时才有 */
|
|
16
|
+
stoppedBy?: StoppedBy;
|
|
17
|
+
}
|
|
18
|
+
/** 停下一轮的人,与入站的授权身份同一形状 */
|
|
19
|
+
export type StoppedBy = NonNullable<IncomingMessage['actor']>;
|
|
20
|
+
/** 一条输入交给通道之后去哪:开轮、待插入、排队,或放掉(已关闭时,要归档) */
|
|
21
|
+
export type Placement = {
|
|
22
|
+
route: 'open';
|
|
23
|
+
turn: Turn;
|
|
24
|
+
} | {
|
|
25
|
+
route: 'join' | 'queue';
|
|
26
|
+
ready: Promise<Turn | undefined>;
|
|
27
|
+
} | {
|
|
28
|
+
route: 'drop';
|
|
29
|
+
};
|
|
30
|
+
export declare class SessionQueues {
|
|
31
|
+
#private;
|
|
32
|
+
private readonly onWaiting;
|
|
33
|
+
constructor(onWaiting: (sessionId: string, waiting: readonly IncomingMessage[]) => void);
|
|
34
|
+
/**
|
|
35
|
+
* 按住这些会话(不给即全部会话),直到调用返回的函数:这期间要交给通道的输入在 {@link held} 等着,放开之后再交。清消息历史
|
|
36
|
+
* 用它:停下在跑的一轮到清完之间到的输入不开轮、不被清掉,清完照常处理
|
|
37
|
+
*/
|
|
38
|
+
hold(sessionIds?: readonly string[]): () => void;
|
|
39
|
+
/** 这个会话被按住时等到放开(几处同时按住的等到都放开);没按住的立即落定 */
|
|
40
|
+
held(sessionId: string): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* 交一条已过逐条处理的输入。已关闭时放掉(要归档);会话空闲时由这次调用开轮;在跑的一轮由真人消息开、还收输入,这条也是
|
|
43
|
+
* 真人消息时待插入;其余排队。待插入与排队的 ready 在它所在的一轮结束、或被放掉时交出 undefined,轮到它开轮时交出那一轮
|
|
44
|
+
*/
|
|
45
|
+
place(message: IncomingMessage): Placement;
|
|
46
|
+
/** 取这一轮待插入的输入(按入队先后),它们随之进了这一轮;不收输入时为空 */
|
|
47
|
+
take(turn: Turn): IncomingMessage[];
|
|
48
|
+
/** 这一轮不再收输入:还没插进去的转为排队,排在队首 */
|
|
49
|
+
close(turn: Turn): void;
|
|
50
|
+
/**
|
|
51
|
+
* 停下这个会话在跑的一轮(turnId 给了而对不上时什么也不停):它不再收输入,待插入的转为排队、之后到的排队,开下一轮;queued
|
|
52
|
+
* 为真时连同排队与待插入的一起放掉,archive 定放掉的要不要归档;by 是停下它的人。返回是否停下了在跑的一轮
|
|
53
|
+
*/
|
|
54
|
+
stop(sessionId: string, { turnId, queued, reason, by, archive, }: {
|
|
55
|
+
turnId?: string;
|
|
56
|
+
queued?: boolean;
|
|
57
|
+
reason?: string;
|
|
58
|
+
by?: StoppedBy;
|
|
59
|
+
archive: boolean;
|
|
60
|
+
}): boolean;
|
|
61
|
+
/** 这个会话在跑、还停得下的那一轮里的输入(开轮的与插进来的,按进入先后;排队与待插入的不算);没有这样的一轮时没有 */
|
|
62
|
+
inputs(sessionId: string): IncomingMessage[] | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* 这一轮收尾:不再收输入、不再停得下。返回这期间放掉的(按先后),agent 处理完一条(要归档的先归档)调它的 settle,处理
|
|
65
|
+
* 期间又放掉的下一次再取,取空了再 {@link release}
|
|
66
|
+
*/
|
|
67
|
+
drain(turn: Turn): Array<{
|
|
68
|
+
message: IncomingMessage;
|
|
69
|
+
archive: boolean;
|
|
70
|
+
settle: () => void;
|
|
71
|
+
}>;
|
|
72
|
+
/** 这一轮落定:进了这一轮的输入随之落定,取下一批开下一轮(交给这一批里入队最早那条的调用) */
|
|
73
|
+
release(turn: Turn): void;
|
|
74
|
+
/** 这个会话此刻在跑的那一轮落定时落定;没有在跑的立即落定 */
|
|
75
|
+
settled(sessionId: string): Promise<void>;
|
|
76
|
+
/** 停下这些会话在跑的一轮、放掉排队与待插入的,返回它们都落定的 Promise */
|
|
77
|
+
stopAll(sessionIds: readonly string[], options: {
|
|
78
|
+
archive: boolean;
|
|
79
|
+
reason: string;
|
|
80
|
+
}): Promise<void>;
|
|
81
|
+
/** 关闭(停机):之后入队的一律放掉;停下全部在跑的一轮、放掉全部排队项(都归档),返回它们都落定的 Promise */
|
|
82
|
+
shutdown(): Promise<void>;
|
|
83
|
+
/** 有在跑的一轮的会话(排着输入的会话一定有在跑的一轮:一轮落定时当场交出下一批) */
|
|
84
|
+
sessions(): string[];
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=session-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-queue.d.ts","sourceRoot":"","sources":["../src/session-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// session-queue.ts — 通道:每个会话同一时刻最多一轮在跑,新消息从不打断它
|
|
3
|
+
//
|
|
4
|
+
// 真人消息(不带 source)插进由真人消息开、还收输入的那一轮(这一轮在每次调用模型之前取走待插入的),插不进的排队;一轮结束
|
|
5
|
+
// 后取队首:队首是真人消息时队里的真人消息一起开下一轮,队首是带来源的注入时只开它。开下一轮的是这一批里入队最早那条的调用,
|
|
6
|
+
// 回合跑在它的异步上下文里(注入方据此认出自己那一轮),其余各条等这一轮结束。停一轮可以连同排队与待插入的一起放掉;放掉的
|
|
7
|
+
// 在这个会话在跑的一轮落定之后由 agent 按先后归档(要归档的才归档),agent 在一个会话里的写入因此不交错。一轮被停下即不再收
|
|
8
|
+
// 输入。关闭(停机)之后入队的以放掉落定(要归档)。按住的会话(清消息历史期间)要交给通道的输入等放开再交。等候的集合(排队
|
|
9
|
+
// 与待插入的)变了时报给 onWaiting。
|
|
10
|
+
// ============================================================
|
|
11
|
+
const bySeq = (a, b) => a.seq - b.seq;
|
|
12
|
+
export class SessionQueues {
|
|
13
|
+
onWaiting;
|
|
14
|
+
#channels = new Map();
|
|
15
|
+
/** 按住的范围:sessions 不给即全部会话,放开时 released 落定 */
|
|
16
|
+
#holds = new Set();
|
|
17
|
+
#seq = 0;
|
|
18
|
+
#closed = false;
|
|
19
|
+
constructor(onWaiting) {
|
|
20
|
+
this.onWaiting = onWaiting;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 按住这些会话(不给即全部会话),直到调用返回的函数:这期间要交给通道的输入在 {@link held} 等着,放开之后再交。清消息历史
|
|
24
|
+
* 用它:停下在跑的一轮到清完之间到的输入不开轮、不被清掉,清完照常处理
|
|
25
|
+
*/
|
|
26
|
+
hold(sessionIds) {
|
|
27
|
+
let release;
|
|
28
|
+
const hold = { sessions: sessionIds && new Set(sessionIds), released: new Promise(r => (release = r)) };
|
|
29
|
+
this.#holds.add(hold);
|
|
30
|
+
return () => {
|
|
31
|
+
this.#holds.delete(hold);
|
|
32
|
+
release();
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/** 这个会话被按住时等到放开(几处同时按住的等到都放开);没按住的立即落定 */
|
|
36
|
+
async held(sessionId) {
|
|
37
|
+
const covering = () => [...this.#holds].find(({ sessions }) => !sessions || sessions.has(sessionId));
|
|
38
|
+
for (let hold = covering(); hold; hold = covering())
|
|
39
|
+
await hold.released;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 交一条已过逐条处理的输入。已关闭时放掉(要归档);会话空闲时由这次调用开轮;在跑的一轮由真人消息开、还收输入,这条也是
|
|
43
|
+
* 真人消息时待插入;其余排队。待插入与排队的 ready 在它所在的一轮结束、或被放掉时交出 undefined,轮到它开轮时交出那一轮
|
|
44
|
+
*/
|
|
45
|
+
place(message) {
|
|
46
|
+
if (this.#closed)
|
|
47
|
+
return { route: 'drop' };
|
|
48
|
+
const channel = this.#channelOf(message.sessionId);
|
|
49
|
+
let wake;
|
|
50
|
+
const ready = new Promise(resolve => (wake = resolve));
|
|
51
|
+
const entry = { message, seq: ++this.#seq, wake };
|
|
52
|
+
const { running } = channel;
|
|
53
|
+
if (!running)
|
|
54
|
+
return { route: 'open', turn: this.#open(channel, [entry], false) };
|
|
55
|
+
const route = running.turn.human && running.accepting && !message.source ? 'join' : 'queue';
|
|
56
|
+
(route === 'join' ? channel.joining : channel.queue).push(entry);
|
|
57
|
+
this.#report(message.sessionId, channel);
|
|
58
|
+
return { route, ready };
|
|
59
|
+
}
|
|
60
|
+
/** 取这一轮待插入的输入(按入队先后),它们随之进了这一轮;不收输入时为空 */
|
|
61
|
+
take(turn) {
|
|
62
|
+
const channel = this.#channels.get(turn.sessionId);
|
|
63
|
+
const running = channel?.running;
|
|
64
|
+
if (!channel || running?.turn !== turn || !running.accepting || channel.joining.length === 0)
|
|
65
|
+
return [];
|
|
66
|
+
const taken = channel.joining.splice(0).sort(bySeq);
|
|
67
|
+
running.members.push(...taken);
|
|
68
|
+
this.#report(turn.sessionId, channel);
|
|
69
|
+
return taken.map(entry => entry.message);
|
|
70
|
+
}
|
|
71
|
+
/** 这一轮不再收输入:还没插进去的转为排队,排在队首 */
|
|
72
|
+
close(turn) {
|
|
73
|
+
const channel = this.#channels.get(turn.sessionId);
|
|
74
|
+
const running = channel?.running;
|
|
75
|
+
if (!channel || running?.turn !== turn || !running.accepting)
|
|
76
|
+
return;
|
|
77
|
+
running.accepting = false;
|
|
78
|
+
channel.queue.unshift(...channel.joining.splice(0).sort(bySeq));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 停下这个会话在跑的一轮(turnId 给了而对不上时什么也不停):它不再收输入,待插入的转为排队、之后到的排队,开下一轮;queued
|
|
82
|
+
* 为真时连同排队与待插入的一起放掉,archive 定放掉的要不要归档;by 是停下它的人。返回是否停下了在跑的一轮
|
|
83
|
+
*/
|
|
84
|
+
stop(sessionId, { turnId, queued, reason, by, archive, }) {
|
|
85
|
+
const channel = this.#channels.get(sessionId);
|
|
86
|
+
if (turnId !== undefined && channel?.running?.turn.turnId !== turnId)
|
|
87
|
+
return false;
|
|
88
|
+
const running = this.#stoppable(sessionId);
|
|
89
|
+
if (running) {
|
|
90
|
+
running.turn.reason = reason;
|
|
91
|
+
running.turn.stoppedBy = by;
|
|
92
|
+
running.turn.controller.abort();
|
|
93
|
+
this.close(running.turn);
|
|
94
|
+
}
|
|
95
|
+
if (queued && channel && channel.queue.length + channel.joining.length > 0) {
|
|
96
|
+
const waiting = [...channel.queue.splice(0), ...channel.joining.splice(0)].sort(bySeq);
|
|
97
|
+
channel.dropped.push(...waiting.map(entry => ({ entry, archive })));
|
|
98
|
+
this.#report(sessionId, channel);
|
|
99
|
+
}
|
|
100
|
+
return running !== undefined;
|
|
101
|
+
}
|
|
102
|
+
/** 这个会话在跑、还停得下的那一轮里的输入(开轮的与插进来的,按进入先后;排队与待插入的不算);没有这样的一轮时没有 */
|
|
103
|
+
inputs(sessionId) {
|
|
104
|
+
return this.#stoppable(sessionId)?.members.map(entry => entry.message);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* 这一轮收尾:不再收输入、不再停得下。返回这期间放掉的(按先后),agent 处理完一条(要归档的先归档)调它的 settle,处理
|
|
108
|
+
* 期间又放掉的下一次再取,取空了再 {@link release}
|
|
109
|
+
*/
|
|
110
|
+
drain(turn) {
|
|
111
|
+
const channel = this.#channels.get(turn.sessionId);
|
|
112
|
+
const running = channel?.running;
|
|
113
|
+
if (!channel || running?.turn !== turn)
|
|
114
|
+
return [];
|
|
115
|
+
this.close(turn);
|
|
116
|
+
running.ended = true;
|
|
117
|
+
return channel.dropped
|
|
118
|
+
.splice(0)
|
|
119
|
+
.map(({ entry, archive }) => ({ message: entry.message, archive, settle: () => entry.wake(undefined) }));
|
|
120
|
+
}
|
|
121
|
+
/** 这一轮落定:进了这一轮的输入随之落定,取下一批开下一轮(交给这一批里入队最早那条的调用) */
|
|
122
|
+
release(turn) {
|
|
123
|
+
const channel = this.#channels.get(turn.sessionId);
|
|
124
|
+
const running = channel?.running;
|
|
125
|
+
if (!channel || running?.turn !== turn)
|
|
126
|
+
return;
|
|
127
|
+
for (const entry of running.members)
|
|
128
|
+
entry.wake(undefined);
|
|
129
|
+
channel.running = undefined;
|
|
130
|
+
running.resolve();
|
|
131
|
+
const [head] = channel.queue;
|
|
132
|
+
if (!head) {
|
|
133
|
+
this.#channels.delete(turn.sessionId);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const batch = head.message.source ? [head] : channel.queue.filter(entry => !entry.message.source).sort(bySeq);
|
|
137
|
+
channel.queue = channel.queue.filter(entry => !batch.includes(entry));
|
|
138
|
+
const next = this.#open(channel, batch, true);
|
|
139
|
+
this.#report(turn.sessionId, channel);
|
|
140
|
+
batch[0].wake(next);
|
|
141
|
+
}
|
|
142
|
+
/** 这个会话此刻在跑的那一轮落定时落定;没有在跑的立即落定 */
|
|
143
|
+
settled(sessionId) {
|
|
144
|
+
return this.#channels.get(sessionId)?.running?.done ?? Promise.resolve();
|
|
145
|
+
}
|
|
146
|
+
/** 停下这些会话在跑的一轮、放掉排队与待插入的,返回它们都落定的 Promise */
|
|
147
|
+
stopAll(sessionIds, options) {
|
|
148
|
+
for (const sessionId of sessionIds)
|
|
149
|
+
this.stop(sessionId, { ...options, queued: true });
|
|
150
|
+
return Promise.all(sessionIds.map(sessionId => this.settled(sessionId))).then(() => undefined);
|
|
151
|
+
}
|
|
152
|
+
/** 关闭(停机):之后入队的一律放掉;停下全部在跑的一轮、放掉全部排队项(都归档),返回它们都落定的 Promise */
|
|
153
|
+
shutdown() {
|
|
154
|
+
this.#closed = true;
|
|
155
|
+
return this.stopAll(this.sessions(), { archive: true, reason: '停机' });
|
|
156
|
+
}
|
|
157
|
+
/** 有在跑的一轮的会话(排着输入的会话一定有在跑的一轮:一轮落定时当场交出下一批) */
|
|
158
|
+
sessions() {
|
|
159
|
+
return [...this.#channels.keys()];
|
|
160
|
+
}
|
|
161
|
+
/** 这个会话在跑、还没收尾也没被停下的那一轮 */
|
|
162
|
+
#stoppable(sessionId) {
|
|
163
|
+
const running = this.#channels.get(sessionId)?.running;
|
|
164
|
+
return running && !running.ended && !running.turn.controller.signal.aborted ? running : undefined;
|
|
165
|
+
}
|
|
166
|
+
#channelOf(sessionId) {
|
|
167
|
+
let channel = this.#channels.get(sessionId);
|
|
168
|
+
if (!channel) {
|
|
169
|
+
channel = { queue: [], joining: [], dropped: [] };
|
|
170
|
+
this.#channels.set(sessionId, channel);
|
|
171
|
+
}
|
|
172
|
+
return channel;
|
|
173
|
+
}
|
|
174
|
+
#open(channel, batch, queued) {
|
|
175
|
+
const [first] = batch;
|
|
176
|
+
const turn = {
|
|
177
|
+
sessionId: first.message.sessionId,
|
|
178
|
+
turnId: crypto.randomUUID(),
|
|
179
|
+
controller: new AbortController(),
|
|
180
|
+
human: !first.message.source,
|
|
181
|
+
queued,
|
|
182
|
+
batch: batch.map(entry => entry.message),
|
|
183
|
+
};
|
|
184
|
+
let resolve;
|
|
185
|
+
const done = new Promise(r => (resolve = r));
|
|
186
|
+
channel.running = { turn, members: [...batch], accepting: true, ended: false, done, resolve };
|
|
187
|
+
return turn;
|
|
188
|
+
}
|
|
189
|
+
/** 报这个会话等候的集合:排队与待插入的,按入队先后 */
|
|
190
|
+
#report(sessionId, channel) {
|
|
191
|
+
this.onWaiting(sessionId, [...channel.queue, ...channel.joining].sort(bySeq).map(entry => entry.message));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=session-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-queue.js","sourceRoot":"","sources":["../src/session-queue.ts"],"names":[],"mappings":"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"}
|
package/dist/texts.d.ts
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
declare const SOURCE: {
|
|
2
|
+
readonly displayName: "默认 Agent";
|
|
3
|
+
readonly systemPromptLabel: "行为准则提示词";
|
|
4
|
+
readonly systemPromptDescription: "定义 Agent 的行为准则。当人设插件存在时,身份描述由人设提供,此处仅作为行为指令追加。";
|
|
5
|
+
readonly memoryTokenBudgetLabel: "长期记忆预留 Token";
|
|
6
|
+
readonly memoryTokenBudgetDescription: "注入的系统消息(技能、摘要、记忆等)合计的 token 额度。只在裁掉历史后仍超预算时起作用:超出时按比例缩减,仍超就删除";
|
|
7
|
+
readonly promptBuildTimeoutMsLabel: "提示词贡献构建超时 (ms)";
|
|
8
|
+
readonly promptBuildTimeoutMsDescription: "组装提示词时等每一块内容的上限,超时的那块本轮不加入,其余照常。0 表示不设限。";
|
|
9
|
+
readonly toolResultMaxRatioLabel: "工具结果最大比例";
|
|
10
|
+
readonly toolResultMaxRatioDescription: "单条工具结果占上下文窗口的最大比例 (0~1),超出则截断。例如 0.15 表示 15%";
|
|
11
|
+
readonly trimThresholdRatioLabel: "裁剪触发比例";
|
|
12
|
+
readonly trimThresholdRatioDescription: "裁剪预算占上下文窗口的比例,再扣去最大输出与安全余量。默认 1.0 用满窗口,调低可提前裁剪。压缩时机在会话设置的「自动压缩线」与「历史条数上限」里调。";
|
|
13
|
+
readonly systemNotice: "[系统] {why}";
|
|
14
|
+
readonly turnError: "[错误] {error}";
|
|
15
|
+
readonly llmNoneErrored: "未找到任何具备 chat 能力的模型 —— 以下模型插件激活失败:{plugins, list}。可用 /doctor 查看原因(需要相应权限)。";
|
|
16
|
+
readonly llmNone: "未找到任何具备 chat 能力的模型 —— 请确认已安装并启用至少一个模型提供者插件(如 @aalis/plugin-llm-deepseek)。";
|
|
17
|
+
readonly llmNotFound: "配置指向的模型不存在:{wanted}。当前可用:{models, list}{more}。";
|
|
18
|
+
readonly llmMore: " 等 {count, number} 个(用 /model 查看全部)";
|
|
19
|
+
readonly llmUnresolved: "模型解析失败:能力过滤后有 {count, number} 个可用 entry,但解析时一个都没取到(服务可能正在装卸中,稍后重试)。";
|
|
20
|
+
readonly partHistory: "历史消息";
|
|
21
|
+
readonly partToolResults: "工具结果";
|
|
22
|
+
readonly partToolDefs: "工具定义";
|
|
23
|
+
readonly partPersona: "人设";
|
|
24
|
+
readonly partMemorySummary: "对话摘要";
|
|
25
|
+
readonly partMemoryVector: "向量记忆";
|
|
26
|
+
readonly partSkills: "技能";
|
|
27
|
+
readonly partPlatform: "平台提示";
|
|
28
|
+
readonly partSubtask: "子任务";
|
|
29
|
+
readonly partSystemOther: "其余系统提示";
|
|
30
|
+
readonly llmLabel: "模型";
|
|
31
|
+
readonly llmDescription: "这个会话用的对话模型。没设时跟随服务偏好:先看给本插件设的偏好,再看全局偏好,都没有时用第一个可用的对话模型";
|
|
32
|
+
readonly llmUnset: "跟随服务偏好";
|
|
33
|
+
readonly thinkLabel: "深度思考";
|
|
34
|
+
readonly thinkDescription: "可选的档位随所用的模型;没设或当前模型没有这一档时按模型的默认档";
|
|
35
|
+
readonly thinkUnset: "按模型的默认档";
|
|
36
|
+
readonly maxToolIterationsLabel: "最大工具迭代";
|
|
37
|
+
readonly maxToolIterationsDescription: "一轮里工具调用循环的最大次数;没设即不限,卡在工具调用里的一轮只能手动停下";
|
|
38
|
+
readonly maxToolIterationsUnset: "不限";
|
|
39
|
+
readonly historyLimitLabel: "历史条数上限";
|
|
40
|
+
readonly historyLimitDescription: "发给模型的会话历史最多这么多条,超过时丢掉最早的一半(会话历史本身保留);装了摘要插件时,到这个条数就压缩。0 表示不按条数,只按自动压缩线压缩";
|
|
41
|
+
readonly stopDescription: "停下本会话在跑的一轮;排着的消息照常开下一轮。参与这一轮的人和 owner 能停";
|
|
42
|
+
readonly stopped: "已停下这一轮";
|
|
43
|
+
readonly stopIdle: "没有在跑的一轮";
|
|
44
|
+
readonly stopDenied: "只有参与这一轮的人和 owner 能停";
|
|
45
|
+
readonly modelDescription: "列出/搜索可用对话模型。分页显示,-p 翻页;如 /model grok";
|
|
46
|
+
readonly personaDescription: "列出/搜索可用人设(分页,-p 翻页)";
|
|
47
|
+
readonly pageOptionDescription: "页码(默认 1)";
|
|
48
|
+
readonly modelsLabel: "可用模型";
|
|
49
|
+
readonly personasLabel: "可用人设";
|
|
50
|
+
readonly pagedNoMatch: "无匹配 \"{keyword}\" 的{label}";
|
|
51
|
+
readonly pagedNone: "(无{label})";
|
|
52
|
+
readonly pagedHeader: "{label}(共 {count, number} · 第 {page, number}/{pages, number} 页):";
|
|
53
|
+
readonly pagedHeaderMatching: "{label}(含\"{keyword}\" 共 {count, number} · 第 {page, number}/{pages, number} 页):";
|
|
54
|
+
readonly pagedHint: "—— 翻页:{command} -p {next} 搜索:{command} <关键词>";
|
|
55
|
+
readonly pagedHintMatching: "—— 翻页:{command} {keyword} -p {next}";
|
|
56
|
+
};
|
|
57
|
+
export type Source = typeof SOURCE;
|
|
58
|
+
export declare const t: import("@aalis/schema-i18n").TextFactory<{
|
|
59
|
+
readonly displayName: "默认 Agent";
|
|
60
|
+
readonly systemPromptLabel: "行为准则提示词";
|
|
61
|
+
readonly systemPromptDescription: "定义 Agent 的行为准则。当人设插件存在时,身份描述由人设提供,此处仅作为行为指令追加。";
|
|
62
|
+
readonly memoryTokenBudgetLabel: "长期记忆预留 Token";
|
|
63
|
+
readonly memoryTokenBudgetDescription: "注入的系统消息(技能、摘要、记忆等)合计的 token 额度。只在裁掉历史后仍超预算时起作用:超出时按比例缩减,仍超就删除";
|
|
64
|
+
readonly promptBuildTimeoutMsLabel: "提示词贡献构建超时 (ms)";
|
|
65
|
+
readonly promptBuildTimeoutMsDescription: "组装提示词时等每一块内容的上限,超时的那块本轮不加入,其余照常。0 表示不设限。";
|
|
66
|
+
readonly toolResultMaxRatioLabel: "工具结果最大比例";
|
|
67
|
+
readonly toolResultMaxRatioDescription: "单条工具结果占上下文窗口的最大比例 (0~1),超出则截断。例如 0.15 表示 15%";
|
|
68
|
+
readonly trimThresholdRatioLabel: "裁剪触发比例";
|
|
69
|
+
readonly trimThresholdRatioDescription: "裁剪预算占上下文窗口的比例,再扣去最大输出与安全余量。默认 1.0 用满窗口,调低可提前裁剪。压缩时机在会话设置的「自动压缩线」与「历史条数上限」里调。";
|
|
70
|
+
readonly systemNotice: "[系统] {why}";
|
|
71
|
+
readonly turnError: "[错误] {error}";
|
|
72
|
+
readonly llmNoneErrored: "未找到任何具备 chat 能力的模型 —— 以下模型插件激活失败:{plugins, list}。可用 /doctor 查看原因(需要相应权限)。";
|
|
73
|
+
readonly llmNone: "未找到任何具备 chat 能力的模型 —— 请确认已安装并启用至少一个模型提供者插件(如 @aalis/plugin-llm-deepseek)。";
|
|
74
|
+
readonly llmNotFound: "配置指向的模型不存在:{wanted}。当前可用:{models, list}{more}。";
|
|
75
|
+
readonly llmMore: " 等 {count, number} 个(用 /model 查看全部)";
|
|
76
|
+
readonly llmUnresolved: "模型解析失败:能力过滤后有 {count, number} 个可用 entry,但解析时一个都没取到(服务可能正在装卸中,稍后重试)。";
|
|
77
|
+
readonly partHistory: "历史消息";
|
|
78
|
+
readonly partToolResults: "工具结果";
|
|
79
|
+
readonly partToolDefs: "工具定义";
|
|
80
|
+
readonly partPersona: "人设";
|
|
81
|
+
readonly partMemorySummary: "对话摘要";
|
|
82
|
+
readonly partMemoryVector: "向量记忆";
|
|
83
|
+
readonly partSkills: "技能";
|
|
84
|
+
readonly partPlatform: "平台提示";
|
|
85
|
+
readonly partSubtask: "子任务";
|
|
86
|
+
readonly partSystemOther: "其余系统提示";
|
|
87
|
+
readonly llmLabel: "模型";
|
|
88
|
+
readonly llmDescription: "这个会话用的对话模型。没设时跟随服务偏好:先看给本插件设的偏好,再看全局偏好,都没有时用第一个可用的对话模型";
|
|
89
|
+
readonly llmUnset: "跟随服务偏好";
|
|
90
|
+
readonly thinkLabel: "深度思考";
|
|
91
|
+
readonly thinkDescription: "可选的档位随所用的模型;没设或当前模型没有这一档时按模型的默认档";
|
|
92
|
+
readonly thinkUnset: "按模型的默认档";
|
|
93
|
+
readonly maxToolIterationsLabel: "最大工具迭代";
|
|
94
|
+
readonly maxToolIterationsDescription: "一轮里工具调用循环的最大次数;没设即不限,卡在工具调用里的一轮只能手动停下";
|
|
95
|
+
readonly maxToolIterationsUnset: "不限";
|
|
96
|
+
readonly historyLimitLabel: "历史条数上限";
|
|
97
|
+
readonly historyLimitDescription: "发给模型的会话历史最多这么多条,超过时丢掉最早的一半(会话历史本身保留);装了摘要插件时,到这个条数就压缩。0 表示不按条数,只按自动压缩线压缩";
|
|
98
|
+
readonly stopDescription: "停下本会话在跑的一轮;排着的消息照常开下一轮。参与这一轮的人和 owner 能停";
|
|
99
|
+
readonly stopped: "已停下这一轮";
|
|
100
|
+
readonly stopIdle: "没有在跑的一轮";
|
|
101
|
+
readonly stopDenied: "只有参与这一轮的人和 owner 能停";
|
|
102
|
+
readonly modelDescription: "列出/搜索可用对话模型。分页显示,-p 翻页;如 /model grok";
|
|
103
|
+
readonly personaDescription: "列出/搜索可用人设(分页,-p 翻页)";
|
|
104
|
+
readonly pageOptionDescription: "页码(默认 1)";
|
|
105
|
+
readonly modelsLabel: "可用模型";
|
|
106
|
+
readonly personasLabel: "可用人设";
|
|
107
|
+
readonly pagedNoMatch: "无匹配 \"{keyword}\" 的{label}";
|
|
108
|
+
readonly pagedNone: "(无{label})";
|
|
109
|
+
readonly pagedHeader: "{label}(共 {count, number} · 第 {page, number}/{pages, number} 页):";
|
|
110
|
+
readonly pagedHeaderMatching: "{label}(含\"{keyword}\" 共 {count, number} · 第 {page, number}/{pages, number} 页):";
|
|
111
|
+
readonly pagedHint: "—— 翻页:{command} -p {next} 搜索:{command} <关键词>";
|
|
112
|
+
readonly pagedHintMatching: "—— 翻页:{command} {keyword} -p {next}";
|
|
113
|
+
}>;
|
|
114
|
+
export {};
|
|
115
|
+
//# sourceMappingURL=texts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texts.d.ts","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8DF,CAAC;AACX,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAEnC,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAiG,CAAC"}
|
package/dist/texts.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// 本插件自己的原文字典:显示名与配置项,发到会话里的「[系统]」「[错误]」与 LLM 解析失败的说明,用量拆分表的分项名,按会话
|
|
2
|
+
// 字段的称呼与说明,/stop 的说明与回复,/model 与 /persona 的说明与分页回复
|
|
3
|
+
import { defineTexts } from '@aalis/schema-i18n';
|
|
4
|
+
import en from './locales/en.js';
|
|
5
|
+
const SOURCE = {
|
|
6
|
+
displayName: '默认 Agent',
|
|
7
|
+
systemPromptLabel: '行为准则提示词',
|
|
8
|
+
systemPromptDescription: '定义 Agent 的行为准则。当人设插件存在时,身份描述由人设提供,此处仅作为行为指令追加。',
|
|
9
|
+
memoryTokenBudgetLabel: '长期记忆预留 Token',
|
|
10
|
+
memoryTokenBudgetDescription: '注入的系统消息(技能、摘要、记忆等)合计的 token 额度。只在裁掉历史后仍超预算时起作用:超出时按比例缩减,仍超就删除',
|
|
11
|
+
promptBuildTimeoutMsLabel: '提示词贡献构建超时 (ms)',
|
|
12
|
+
promptBuildTimeoutMsDescription: '组装提示词时等每一块内容的上限,超时的那块本轮不加入,其余照常。0 表示不设限。',
|
|
13
|
+
toolResultMaxRatioLabel: '工具结果最大比例',
|
|
14
|
+
toolResultMaxRatioDescription: '单条工具结果占上下文窗口的最大比例 (0~1),超出则截断。例如 0.15 表示 15%',
|
|
15
|
+
trimThresholdRatioLabel: '裁剪触发比例',
|
|
16
|
+
trimThresholdRatioDescription: '裁剪预算占上下文窗口的比例,再扣去最大输出与安全余量。默认 1.0 用满窗口,调低可提前裁剪。压缩时机在会话设置的「自动压缩线」与「历史条数上限」里调。',
|
|
17
|
+
systemNotice: '[系统] {why}',
|
|
18
|
+
turnError: '[错误] {error}',
|
|
19
|
+
llmNoneErrored: '未找到任何具备 chat 能力的模型 —— 以下模型插件激活失败:{plugins, list}。可用 /doctor 查看原因(需要相应权限)。',
|
|
20
|
+
llmNone: '未找到任何具备 chat 能力的模型 —— 请确认已安装并启用至少一个模型提供者插件(如 @aalis/plugin-llm-deepseek)。',
|
|
21
|
+
llmNotFound: '配置指向的模型不存在:{wanted}。当前可用:{models, list}{more}。',
|
|
22
|
+
llmMore: ' 等 {count, number} 个(用 /model 查看全部)',
|
|
23
|
+
llmUnresolved: '模型解析失败:能力过滤后有 {count, number} 个可用 entry,但解析时一个都没取到(服务可能正在装卸中,稍后重试)。',
|
|
24
|
+
partHistory: '历史消息',
|
|
25
|
+
partToolResults: '工具结果',
|
|
26
|
+
partToolDefs: '工具定义',
|
|
27
|
+
partPersona: '人设',
|
|
28
|
+
partMemorySummary: '对话摘要',
|
|
29
|
+
partMemoryVector: '向量记忆',
|
|
30
|
+
partSkills: '技能',
|
|
31
|
+
partPlatform: '平台提示',
|
|
32
|
+
partSubtask: '子任务',
|
|
33
|
+
partSystemOther: '其余系统提示',
|
|
34
|
+
llmLabel: '模型',
|
|
35
|
+
llmDescription: '这个会话用的对话模型。没设时跟随服务偏好:先看给本插件设的偏好,再看全局偏好,都没有时用第一个可用的对话模型',
|
|
36
|
+
llmUnset: '跟随服务偏好',
|
|
37
|
+
thinkLabel: '深度思考',
|
|
38
|
+
thinkDescription: '可选的档位随所用的模型;没设或当前模型没有这一档时按模型的默认档',
|
|
39
|
+
thinkUnset: '按模型的默认档',
|
|
40
|
+
maxToolIterationsLabel: '最大工具迭代',
|
|
41
|
+
maxToolIterationsDescription: '一轮里工具调用循环的最大次数;没设即不限,卡在工具调用里的一轮只能手动停下',
|
|
42
|
+
maxToolIterationsUnset: '不限',
|
|
43
|
+
historyLimitLabel: '历史条数上限',
|
|
44
|
+
historyLimitDescription: '发给模型的会话历史最多这么多条,超过时丢掉最早的一半(会话历史本身保留);装了摘要插件时,到这个条数就压缩。0 表示不按条数,只按自动压缩线压缩',
|
|
45
|
+
stopDescription: '停下本会话在跑的一轮;排着的消息照常开下一轮。参与这一轮的人和 owner 能停',
|
|
46
|
+
stopped: '已停下这一轮',
|
|
47
|
+
stopIdle: '没有在跑的一轮',
|
|
48
|
+
stopDenied: '只有参与这一轮的人和 owner 能停',
|
|
49
|
+
modelDescription: '列出/搜索可用对话模型。分页显示,-p 翻页;如 /model grok',
|
|
50
|
+
personaDescription: '列出/搜索可用人设(分页,-p 翻页)',
|
|
51
|
+
pageOptionDescription: '页码(默认 1)',
|
|
52
|
+
modelsLabel: '可用模型',
|
|
53
|
+
personasLabel: '可用人设',
|
|
54
|
+
pagedNoMatch: '无匹配 "{keyword}" 的{label}',
|
|
55
|
+
pagedNone: '(无{label})',
|
|
56
|
+
pagedHeader: '{label}(共 {count, number} · 第 {page, number}/{pages, number} 页):',
|
|
57
|
+
pagedHeaderMatching: '{label}(含"{keyword}" 共 {count, number} · 第 {page, number}/{pages, number} 页):',
|
|
58
|
+
pagedHint: '—— 翻页:{command} -p {next} 搜索:{command} <关键词>',
|
|
59
|
+
pagedHintMatching: '—— 翻页:{command} {keyword} -p {next}',
|
|
60
|
+
};
|
|
61
|
+
export const t = defineTexts({ ns: '@aalis/plugin-agent', language: 'zh-CN', source: SOURCE, locales: { en } });
|
|
62
|
+
//# sourceMappingURL=texts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texts.js","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,mDAAmD;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEjC,MAAM,MAAM,GAAG;IACb,WAAW,EAAE,UAAU;IACvB,iBAAiB,EAAE,SAAS;IAC5B,uBAAuB,EAAE,gDAAgD;IACzE,sBAAsB,EAAE,cAAc;IACtC,4BAA4B,EAC1B,+DAA+D;IACjE,yBAAyB,EAAE,gBAAgB;IAC3C,+BAA+B,EAAE,0CAA0C;IAC3E,uBAAuB,EAAE,UAAU;IACnC,6BAA6B,EAAE,8CAA8C;IAC7E,uBAAuB,EAAE,QAAQ;IACjC,6BAA6B,EAC3B,8EAA8E;IAChF,YAAY,EAAE,YAAY;IAC1B,SAAS,EAAE,cAAc;IACzB,cAAc,EACZ,2EAA2E;IAC7E,OAAO,EACL,2EAA2E;IAC7E,WAAW,EAAE,gDAAgD;IAC7D,OAAO,EAAE,qCAAqC;IAC9C,aAAa,EACX,qEAAqE;IACvE,WAAW,EAAE,MAAM;IACnB,eAAe,EAAE,MAAM;IACvB,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,IAAI;IACjB,iBAAiB,EAAE,MAAM;IACzB,gBAAgB,EAAE,MAAM;IACxB,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE,QAAQ;IACzB,QAAQ,EAAE,IAAI;IACd,cAAc,EACZ,wDAAwD;IAC1D,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,MAAM;IAClB,gBAAgB,EAAE,kCAAkC;IACpD,UAAU,EAAE,SAAS;IACrB,sBAAsB,EAAE,QAAQ;IAChC,4BAA4B,EAAE,uCAAuC;IACrE,sBAAsB,EAAE,IAAI;IAC5B,iBAAiB,EAAE,QAAQ;IAC3B,uBAAuB,EACrB,0EAA0E;IAC5E,eAAe,EAAE,0CAA0C;IAC3D,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,SAAS;IACnB,UAAU,EAAE,qBAAqB;IACjC,gBAAgB,EAAE,sCAAsC;IACxD,kBAAkB,EAAE,qBAAqB;IACzC,qBAAqB,EAAE,UAAU;IACjC,WAAW,EAAE,MAAM;IACnB,aAAa,EAAE,MAAM;IACrB,YAAY,EAAE,0BAA0B;IACxC,SAAS,EAAE,YAAY;IACvB,WAAW,EAAE,kEAAkE;IAC/E,mBAAmB,EAAE,+EAA+E;IACpG,SAAS,EAAE,8CAA8C;IACzD,iBAAiB,EAAE,qCAAqC;CAChD,CAAC;AAGX,MAAM,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,qBAAqB,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC"}
|