@ai-setting/roy-agent-core 1.7.77 → 1.7.88
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/config/config-protection.d.ts +89 -0
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.js +23 -7
- package/dist/env/agent/agent-component.d.ts +43 -22
- package/dist/env/agent/agent-component.js +13 -12
- package/dist/env/agent/index.js +13 -12
- package/dist/env/agent/types.d.ts +46 -12
- package/dist/env/commands/index.js +7 -7
- package/dist/env/context/index.js +3 -3
- package/dist/env/debug/index.js +7 -7
- package/dist/env/error-reply.d.ts +6 -0
- package/dist/env/error-reply.js +1 -1
- package/dist/env/event-source/bounty-im-handler.d.ts +8 -0
- package/dist/env/event-source/es-command.d.ts +39 -0
- package/dist/env/event-source/es-plugins.d.ts +68 -0
- package/dist/env/event-source/event-source-component.d.ts +15 -0
- package/dist/env/event-source/event-source-handlers.d.ts +84 -0
- package/dist/env/event-source/event-source-handlers.js +40 -23
- package/dist/env/event-source/event-store.js +2 -2
- package/dist/env/event-source/index.d.ts +5 -1
- package/dist/env/event-source/index.js +75 -23
- package/dist/env/event-source/timer-handler.d.ts +98 -0
- package/dist/env/event-source/types.d.ts +154 -2
- package/dist/env/event-source/wecom-card-action-handler.d.ts +373 -0
- package/dist/env/event-source/wecom-card-builder.d.ts +426 -0
- package/dist/env/event-source/wecom-cli-handler.d.ts +291 -0
- package/dist/env/event-source/wecom-cli-sender.d.ts +88 -0
- package/dist/env/event-source/wecom-media.d.ts +130 -0
- package/dist/env/event-source/wecom-respond-registry.d.ts +151 -0
- package/dist/env/event-source/wecom-respond-registry.js +33 -0
- package/dist/env/event-source/wecom-session-card-sender.d.ts +135 -0
- package/dist/env/event-source/wecom-session-card-sender.js +153 -0
- package/dist/env/event-source/wecom-ws-bridge.d.ts +213 -0
- package/dist/env/hook/index.js +5 -5
- package/dist/env/index.js +51 -45
- package/dist/env/llm/index.js +9 -8
- package/dist/env/log-trace/index.js +7 -7
- package/dist/env/log-trace/trace-filters.d.ts +6 -1
- package/dist/env/mcp/index.js +7 -7
- package/dist/env/memory/index.js +7 -7
- package/dist/env/plugin/index.js +7 -7
- package/dist/env/prompt/index.js +8 -8
- package/dist/env/prompt/prompts-index.d.ts +1 -1
- package/dist/env/session/group-session-link.d.ts +99 -0
- package/dist/env/session/index.js +11 -10
- package/dist/env/session/session-component.d.ts +89 -0
- package/dist/env/session/storage/index.js +5 -4
- package/dist/env/session/types.d.ts +10 -0
- package/dist/env/skill/index.js +7 -7
- package/dist/env/task/delegate/delegate-channel-hint.d.ts +39 -0
- package/dist/env/task/delegate/delegate-tool.d.ts +132 -7
- package/dist/env/task/delegate/delegate-tool.js +13 -9
- package/dist/env/task/delegate/index.js +8 -8
- package/dist/env/task/index.js +18 -18
- package/dist/env/task/mcp/index.js +4 -4
- package/dist/env/task/plugins/card-subject.d.ts +117 -0
- package/dist/env/task/plugins/index.d.ts +2 -0
- package/dist/env/task/plugins/index.js +39 -16
- package/dist/env/task/plugins/lark-card-action-handler.d.ts +261 -6
- package/dist/env/task/plugins/lark-card-patch-notifier.d.ts +542 -2
- package/dist/env/task/plugins/lark-card-patch-notifier.js +12 -2
- package/dist/env/task/plugins/lark-card-state-store.d.ts +60 -0
- package/dist/env/task/plugins/lark-cli-task-notify-plugin.d.ts +61 -0
- package/dist/env/task/plugins/sub-session-activity.d.ts +415 -0
- package/dist/env/task/plugins/wecom-card-state-store.d.ts +121 -0
- package/dist/env/task/plugins/wecom-session-card-store.d.ts +134 -0
- package/dist/env/task/plugins/wecom-session-card-store.js +23 -0
- package/dist/env/task/plugins/wecom-task-notify-plugin.d.ts +264 -0
- package/dist/env/task/storage/index.js +3 -3
- package/dist/env/task/tools/index.js +4 -4
- package/dist/env/tool/built-in/index.d.ts +2 -0
- package/dist/env/tool/built-in/index.js +9 -2
- package/dist/env/tool/index.js +14 -9
- package/dist/env/tool/types.d.ts +25 -0
- package/dist/env/tool/validator.d.ts +8 -0
- package/dist/env/workflow/engine/index.js +12 -12
- package/dist/env/workflow/hooks/index.js +7 -7
- package/dist/env/workflow/index.js +24 -23
- package/dist/env/workflow/nodes/index.js +2 -2
- package/dist/env/workflow/plugins/index.js +10 -8
- package/dist/env/workflow/service/index.js +2 -2
- package/dist/env/workflow/storage/index.js +3 -3
- package/dist/env/workflow/tools/index.js +16 -15
- package/dist/env/workflow/utils/index.js +4 -4
- package/dist/index.d.ts +1 -1
- package/dist/index.js +118 -62
- package/dist/shared/@ai-setting/{roy-agent-core-dc9zq75z.js → roy-agent-core-0crmsc12.js} +3 -3
- package/dist/shared/@ai-setting/{roy-agent-core-aa2j7bk9.js → roy-agent-core-0sbmdz8d.js} +171 -36
- package/dist/shared/@ai-setting/{roy-agent-core-87942bw4.js → roy-agent-core-1mhyh4c5.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-v6vr6za7.js → roy-agent-core-1vv4fx15.js} +4 -4
- package/dist/shared/@ai-setting/roy-agent-core-2stt4rp5.js +134 -0
- package/dist/shared/@ai-setting/{roy-agent-core-nwbfepba.js → roy-agent-core-3e040tc5.js} +1 -1
- package/dist/shared/@ai-setting/roy-agent-core-418zc9ha.js +288 -0
- package/dist/shared/@ai-setting/{roy-agent-core-r5wt1h3c.js → roy-agent-core-4fkxy2gv.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-na18zwj0.js → roy-agent-core-4t3yskp8.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-5pr4zp88.js → roy-agent-core-5kzhaap1.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-qq96p0tj.js → roy-agent-core-5s2t8z00.js} +22 -1
- package/dist/shared/@ai-setting/{roy-agent-core-6rh8k6ba.js → roy-agent-core-6gj1hc5z.js} +7 -7
- package/dist/shared/@ai-setting/{roy-agent-core-ezvpreqz.js → roy-agent-core-6k8mb7zx.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-g8htfwxj.js → roy-agent-core-7f10p7m2.js} +1 -1
- package/dist/shared/@ai-setting/roy-agent-core-7kvpc0w5.js +177 -0
- package/dist/shared/@ai-setting/{roy-agent-core-h21gngxf.js → roy-agent-core-7yh5wps0.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-efkjyh69.js → roy-agent-core-9710zwwz.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-6cy43nss.js → roy-agent-core-9c565frx.js} +49 -9
- package/dist/shared/@ai-setting/{roy-agent-core-fghc2m8z.js → roy-agent-core-aa8kv18f.js} +34 -2
- package/dist/shared/@ai-setting/{roy-agent-core-ew6qb5yx.js → roy-agent-core-an35dzbf.js} +6 -6
- package/dist/shared/@ai-setting/{roy-agent-core-mww0mnd9.js → roy-agent-core-azyz78ky.js} +7 -7
- package/dist/shared/@ai-setting/{roy-agent-core-264qexac.js → roy-agent-core-b7h39vrc.js} +4 -4
- package/dist/shared/@ai-setting/{roy-agent-core-dqxec05w.js → roy-agent-core-bjtc9d35.js} +2 -2
- package/dist/shared/@ai-setting/roy-agent-core-c4ec7k0p.js +426 -0
- package/dist/shared/@ai-setting/{roy-agent-core-ddyk1rc0.js → roy-agent-core-cre2y2ct.js} +160 -4
- package/dist/shared/@ai-setting/{roy-agent-core-tr3ep81v.js → roy-agent-core-d6zdbgtc.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-0qyrk5k0.js → roy-agent-core-ds6qzmf8.js} +14 -5
- package/dist/shared/@ai-setting/{roy-agent-core-cgtq6427.js → roy-agent-core-e08bvpaq.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-12n08pg5.js → roy-agent-core-e69qxdyy.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-rhtdspx6.js → roy-agent-core-fan8g0z1.js} +10 -10
- package/dist/shared/@ai-setting/{roy-agent-core-xcp8vwax.js → roy-agent-core-fepm835e.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-6j02sbee.js → roy-agent-core-fhg03v43.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-99nwgj84.js → roy-agent-core-fzw9xzm1.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-dvtg4sn0.js → roy-agent-core-g8yr733d.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-3gpygqcx.js → roy-agent-core-gr5h1dyr.js} +2753 -358
- package/dist/shared/@ai-setting/roy-agent-core-h1e1fm9b.js +380 -0
- package/dist/shared/@ai-setting/{roy-agent-core-c2gbt68e.js → roy-agent-core-h83zdsrq.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-8ez6mccb.js → roy-agent-core-k3gcvybs.js} +5 -1
- package/dist/shared/@ai-setting/{roy-agent-core-pgvcf91v.js → roy-agent-core-m39v7qpx.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-tm1mxttk.js → roy-agent-core-mf5p38yf.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-83bewqx8.js → roy-agent-core-mvh0td7p.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-v85n42ve.js → roy-agent-core-mx855td4.js} +17 -38
- package/dist/shared/@ai-setting/{roy-agent-core-v87njmq7.js → roy-agent-core-n197medr.js} +13 -13
- package/dist/shared/@ai-setting/{roy-agent-core-cmprygrp.js → roy-agent-core-nqkfkpf4.js} +4 -4
- package/dist/shared/@ai-setting/{roy-agent-core-7cbpmk4q.js → roy-agent-core-p31ftgq9.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-vffccgf6.js → roy-agent-core-qwd2dq5q.js} +10 -3
- package/dist/shared/@ai-setting/{roy-agent-core-rsn44n9y.js → roy-agent-core-ra66sf50.js} +2526 -942
- package/dist/shared/@ai-setting/{roy-agent-core-1v4g0d4x.js → roy-agent-core-rm7seqwb.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-w0qjeq2v.js → roy-agent-core-shb1qsyg.js} +1041 -18
- package/dist/shared/@ai-setting/{roy-agent-core-ax9e9szb.js → roy-agent-core-smf94h73.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-acj8ag08.js → roy-agent-core-tjnabyvq.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-qqaak24r.js → roy-agent-core-tkpp1ba0.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-9vhq7fvv.js → roy-agent-core-tpm1dd1g.js} +34 -88
- package/dist/shared/@ai-setting/{roy-agent-core-ed233k5z.js → roy-agent-core-v1n0106v.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-zxz5fkwj.js → roy-agent-core-v6yshv0z.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-mcy5apay.js → roy-agent-core-vf9sp6s3.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-q813vafd.js → roy-agent-core-vpcxv1ty.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-bxkjk7zx.js → roy-agent-core-vx8zc847.js} +4 -1
- package/dist/shared/@ai-setting/{roy-agent-core-xvt7kf7p.js → roy-agent-core-w9ryeg2p.js} +3 -3
- package/dist/shared/@ai-setting/{roy-agent-core-es203w7p.js → roy-agent-core-wqs6yypq.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-hd3n57zs.js → roy-agent-core-wr1qexzq.js} +5 -5
- package/dist/shared/@ai-setting/roy-agent-core-wxrkcb17.js +56 -0
- package/dist/shared/@ai-setting/{roy-agent-core-0snm5hc5.js → roy-agent-core-y6shd91r.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-9vxh6f8h.js → roy-agent-core-y7fqtzk2.js} +7 -7
- package/dist/shared/@ai-setting/{roy-agent-core-cpcd24n2.js → roy-agent-core-yet36q5k.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-3fh1f7s7.js → roy-agent-core-yfpnkc4z.js} +5 -5
- package/dist/shared/@ai-setting/{roy-agent-core-0v27y99n.js → roy-agent-core-yh68z1bg.js} +65 -4
- package/package.json +18 -1
- /package/dist/shared/@ai-setting/{roy-agent-core-b4x6x4k2.js → roy-agent-core-m1fgtnrc.js} +0 -0
|
@@ -25,6 +25,29 @@ export declare const DEFAULT_TIMER_INTERVAL_MS: number;
|
|
|
25
25
|
* 2. 便于测试时注入 mock
|
|
26
26
|
*/
|
|
27
27
|
export type GetRunningTasksFn = () => BackgroundTask[];
|
|
28
|
+
/**
|
|
29
|
+
* ★ Task #5409:tick 的两种触发模式(写进 `timer.tick.fire` span 的 mode 属性)
|
|
30
|
+
*/
|
|
31
|
+
export type TimerFireMode = "interval" | "schedule";
|
|
32
|
+
/**
|
|
33
|
+
* ★ Task #5409:tick 统计(跳过 / 触发计数)
|
|
34
|
+
*
|
|
35
|
+
* 为什么需要:修复后**空转 tick 不再留 trace**(原来每 30 秒一条 `timer.tick`,
|
|
36
|
+
* 每天约 2880 条无价值 span,全部 0ms)。代价是「被跳过的 tick」在 trace 里
|
|
37
|
+
* 不可见,无法再靠 `debug trace --list` 判断 timer 是否活着。
|
|
38
|
+
*
|
|
39
|
+
* 因此把可观测性改到**进程内计数器**:`getTickStats()` 可随时读取,
|
|
40
|
+
* 另外每次真正 fire 的 span 上会带 `skippedSinceLastFire` —— 一眼看出
|
|
41
|
+
* 「这个 timer 一直在跑,只是长期被 running 任务挡住」。
|
|
42
|
+
*/
|
|
43
|
+
export interface TimerTickStats {
|
|
44
|
+
/** 累计真正 fire(构建并投递 SelfReminder 事件)的次数 */
|
|
45
|
+
firedTicks: number;
|
|
46
|
+
/** 累计被跳过的 tick 次数(有 running 任务 / 抛错 / 时刻不命中 / 当日去重) */
|
|
47
|
+
skippedTicks: number;
|
|
48
|
+
/** 距离上次 fire 之间被跳过的 tick 次数(fire 后归零) */
|
|
49
|
+
skippedSinceLastFire: number;
|
|
50
|
+
}
|
|
28
51
|
/**
|
|
29
52
|
* 用于注入 BackgroundTaskManager 的 options key
|
|
30
53
|
*/
|
|
@@ -51,6 +74,29 @@ export interface TimerScheduleEntry {
|
|
|
51
74
|
label?: string;
|
|
52
75
|
sessionId?: string;
|
|
53
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* ★ Task #5409:`fireTick()` 的入参(object 形式,便于 paramFilter 取出全部字段)
|
|
79
|
+
*/
|
|
80
|
+
export interface TimerFireContext {
|
|
81
|
+
/** 触发模式 */
|
|
82
|
+
mode: TimerFireMode;
|
|
83
|
+
/** timer 事件源 id(`this.config.id`)—— paramFilter 拿不到 this,故显式传入 */
|
|
84
|
+
sourceId: string;
|
|
85
|
+
/** 距上次 fire 被跳过的 tick 次数 */
|
|
86
|
+
skippedSinceLastFire: number;
|
|
87
|
+
/** schedule 模式的命中项 */
|
|
88
|
+
entry?: TimerScheduleEntry;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* ★ Task #5409:构造 `timer.tick.fire` span 的属性(供 paramFilter 摊平到顶层)
|
|
92
|
+
*
|
|
93
|
+
* 出参键名就是 `debug trace` / `debug span` 里能直接看到的字段:
|
|
94
|
+
* - `mode`:interval / schedule
|
|
95
|
+
* - `sourceId`:timer 事件源 id(哪个 timer 触发的)
|
|
96
|
+
* - `skippedSinceLastFire`:距上次 fire 被跳过的 tick 次数
|
|
97
|
+
* - `scheduleTime` / `scheduleLabel`:schedule 模式的命中项
|
|
98
|
+
*/
|
|
99
|
+
export declare function buildFireSpanAttributes(ctx: TimerFireContext): Record<string, unknown>;
|
|
54
100
|
/**
|
|
55
101
|
* 校验 `HH:MM` 格式
|
|
56
102
|
*
|
|
@@ -100,6 +146,10 @@ export declare class TimerInstance implements EventSourceInstance {
|
|
|
100
146
|
private readonly skipWhenRunning;
|
|
101
147
|
/** 已触发标记:`YYYY-MM-DD#HH:MM` → true(当日去重) */
|
|
102
148
|
private readonly firedKeys;
|
|
149
|
+
/** ★ Task #5409:tick 统计(跳过/触发计数),替代原「每次都留 trace」的可观测性 */
|
|
150
|
+
private firedTicks;
|
|
151
|
+
private skippedTicks;
|
|
152
|
+
private skippedSinceLastFire;
|
|
103
153
|
/** 可注入时钟(测试用) */
|
|
104
154
|
private readonly now;
|
|
105
155
|
private status;
|
|
@@ -117,14 +167,54 @@ export declare class TimerInstance implements EventSourceInstance {
|
|
|
117
167
|
start(): Promise<void>;
|
|
118
168
|
stop(): Promise<void>;
|
|
119
169
|
getStatus(): EventSourceStatus;
|
|
170
|
+
/**
|
|
171
|
+
* ★ Task #5409:读取 tick 统计(跳过 / 触发计数)
|
|
172
|
+
*
|
|
173
|
+
* 修复后空转 tick 不再落 trace,用这个计数器保留「timer 还活着」的可观测性:
|
|
174
|
+
* - `firedTicks` 一直为 0 且 `skippedTicks` 持续增长 → 一直被 running 任务挡住
|
|
175
|
+
* - 两者都不再增长 → tick 本身可能没在跑(`getStatus()` 应为 running)
|
|
176
|
+
*/
|
|
177
|
+
getTickStats(): TimerTickStats;
|
|
120
178
|
onEvent(handler: EventSourceEventHandler): void;
|
|
121
179
|
offEvent(): void;
|
|
122
180
|
/**
|
|
123
181
|
* 定时器 tick 回调
|
|
124
182
|
*
|
|
125
183
|
* Rule-based 检查:有 status === "running" 的后台任务时跳过本次触发
|
|
184
|
+
*
|
|
185
|
+
* ★ Task #5409:**入口不再挂 `@TracedAs`**。
|
|
186
|
+
*
|
|
187
|
+
* 原来 `@TracedAs("timer.tick")` 在入口就建 span,于是「有 running 任务 →
|
|
188
|
+
* return」这种什么都没做的空转 tick 也会落一条 trace。生产实测每 30 秒一条、
|
|
189
|
+
* 全部 0ms/ok,每天约 2880 条,是 traces.db 膨胀的增量来源之一。
|
|
190
|
+
*
|
|
191
|
+
* 现在只有**真正 fire 了 SelfReminder 事件**才记一条 `timer.tick.fire`
|
|
192
|
+
* (见 `fireTick()`),跳过路径零 trace;跳过次数改由 `getTickStats()` 暴露。
|
|
126
193
|
*/
|
|
127
194
|
private tick;
|
|
195
|
+
/**
|
|
196
|
+
* ★ Task #5409:记录一次「被跳过」的 tick(零 trace)
|
|
197
|
+
*
|
|
198
|
+
* 可观测性走两条路:
|
|
199
|
+
* 1. 进程内计数器(`getTickStats()`)—— 供 `/status` 类排查直接读
|
|
200
|
+
* 2. 每累计 `SKIPPED_TICK_LOG_EVERY` 次打一条 debug 汇总日志 —— 供 app.log
|
|
201
|
+
* 确认 timer 仍在跑(`log_trace.logging.level=debug` 时可见)
|
|
202
|
+
*/
|
|
203
|
+
private recordSkip;
|
|
204
|
+
/**
|
|
205
|
+
* ★ Task #5409:真正 fire 一次的**唯一入口** —— 事件构建 + 投递 + 1 条 trace
|
|
206
|
+
*
|
|
207
|
+
* 命名 `timer.tick.fire`(而不是保留 `timer.tick`):trace 列表里一眼能看出
|
|
208
|
+
* 「这条 span 代表 timer 真的触发了」,不再是「tick 发生了但可能什么都没做」。
|
|
209
|
+
*
|
|
210
|
+
* span 属性(经 paramFilter 摊平到顶层):
|
|
211
|
+
* - `mode`:interval / schedule
|
|
212
|
+
* - `sourceId`:timer 事件源 id
|
|
213
|
+
* - `skippedSinceLastFire`:距上次 fire 被跳过的次数 —— 长期被 running 任务
|
|
214
|
+
* 挡住时这个数字会很大,是「空转但不留 trace」的可观测证据
|
|
215
|
+
* - `scheduleTime` / `scheduleLabel`:schedule 模式下的命中项
|
|
216
|
+
*/
|
|
217
|
+
private fireTick;
|
|
128
218
|
/**
|
|
129
219
|
* ★ Task #4815:schedule 模式 tick
|
|
130
220
|
*
|
|
@@ -135,6 +225,10 @@ export declare class TimerInstance implements EventSourceInstance {
|
|
|
135
225
|
* 4. schedule 模式默认**不**做 rule-based 跳过;
|
|
136
226
|
* 仅当 options.skipWhenRunning=true 时才检查后台任务
|
|
137
227
|
* 5. 命中 → 标记已触发 + 构建事件(prompt 取当次命中项)
|
|
228
|
+
*
|
|
229
|
+
* ★ Task #5409:入口不再挂 `@TracedAs`。只有真正命中并 fire 时才由
|
|
230
|
+
* `fireTick()` 落一条 `timer.tick.fire`(mode=schedule);未命中 / 当日已触发 /
|
|
231
|
+
* 被 running 任务挡住 / schedule 全项非法 → 零 trace,只累加 `skippedTicks`。
|
|
138
232
|
*/
|
|
139
233
|
private tickSchedule;
|
|
140
234
|
/**
|
|
@@ -157,6 +251,10 @@ export declare class TimerInstance implements EventSourceInstance {
|
|
|
157
251
|
* - metadata 注入 `scheduleLabel`(可选,便于下游识别是哪个时刻)
|
|
158
252
|
*
|
|
159
253
|
* @param entry 命中的 schedule 项;interval 模式不传
|
|
254
|
+
*
|
|
255
|
+
* ★ Task #5409:不再挂 `@TracedAs` —— 它只在 `fireTick()` 内部被调用一次,
|
|
256
|
+
* 且 fireTick 已经有 `timer.tick.fire` span。原来这里再加一个装饰器,
|
|
257
|
+
* 会让「一次 fire」落 2 条 span(实测 span 数交替 2/3 正是这个原因)。
|
|
160
258
|
*/
|
|
161
259
|
private buildSelfReminderEvent;
|
|
162
260
|
}
|
|
@@ -40,11 +40,22 @@ export declare const BUILT_IN_EVENT_SOURCE_TYPES: {
|
|
|
40
40
|
* 「CLI 没有 IM 通道,输出到 stdout」的 prompt(而不是套用飞书模板)。
|
|
41
41
|
*/
|
|
42
42
|
readonly CLI_COMMAND: "cli-command";
|
|
43
|
+
/**
|
|
44
|
+
* ★ Task #5142:企业微信(WeCom)也是一个事件源。
|
|
45
|
+
*
|
|
46
|
+
* 走企微官方 CLI `wecom-cli`(npm: `@wecom/cli`)。
|
|
47
|
+
*
|
|
48
|
+
* ⚠️ **必须是新类型名 `wecom-cli`,不能抄 `lark-cli`**:
|
|
49
|
+
* `getHandlerForEsType(esType)` 是 v2 notify prompt 的唯一分派 key,
|
|
50
|
+
* 抄成 lark-cli 会让 agent 拿到「用 lark-cli 发到 oc_xxx」的 prompt,
|
|
51
|
+
* 而企微根本没有 oc_xxx。
|
|
52
|
+
*/
|
|
53
|
+
readonly WECOM_CLI: "wecom-cli";
|
|
43
54
|
};
|
|
44
55
|
/**
|
|
45
56
|
* 内置事件源类型列表
|
|
46
57
|
*/
|
|
47
|
-
export declare const BUILT_IN_EVENT_SOURCE_TYPE_LIST: ("lark-cli" | "timer" | "bounty-im" | "cli-command")[];
|
|
58
|
+
export declare const BUILT_IN_EVENT_SOURCE_TYPE_LIST: ("lark-cli" | "timer" | "bounty-im" | "cli-command" | "wecom-cli")[];
|
|
48
59
|
/**
|
|
49
60
|
* HandleRuleConfig
|
|
50
61
|
*
|
|
@@ -123,6 +134,33 @@ export interface EventSourceConfig {
|
|
|
123
134
|
* 里手动开启,否则 consumer 能 ready 但永远收不到事件。
|
|
124
135
|
*/
|
|
125
136
|
eventKeys?: string[];
|
|
137
|
+
/**
|
|
138
|
+
* ★ Task #5360(补充需求 2026-11-11 20:54):是否推送「状态通知文本消息」。
|
|
139
|
+
*
|
|
140
|
+
* ## 背景
|
|
141
|
+
*
|
|
142
|
+
* 卡片化改造后,rule-based 直发的状态文本(`⏱️ 后台任务运行中 20m` /
|
|
143
|
+
* `✅ 已完成 36m`)默认下线,改由任务卡片承载。本开关是**逃生舱**:
|
|
144
|
+
* 保留旧的文本推送能力,用户想恢复时一行配置即可,不必 revert 代码。
|
|
145
|
+
*
|
|
146
|
+
* ## 取值
|
|
147
|
+
*
|
|
148
|
+
* - `false` / **缺省**(默认):不发状态通知文本 —— 全部走卡片
|
|
149
|
+
* - `true`:逐字恢复改造前的文本推送行为
|
|
150
|
+
*
|
|
151
|
+
* ## 边界(很重要,别扩大语义)
|
|
152
|
+
*
|
|
153
|
+
* - 只影响「状态通知文本」,**不影响卡片**(卡片是渠道独立插件,与本开关正交)
|
|
154
|
+
* - 不影响 `sink === "stdout"` 的 CLI 本地输出(本地没有卡片可发,
|
|
155
|
+
* 文本是唯一可见输出 —— 见 `shouldDeliverNoticeText` 的 stdout 例外)
|
|
156
|
+
* - 不影响卡片失败兜底 markdown 与失败回执(那是**降级/异常告知**,不是状态通知)
|
|
157
|
+
*
|
|
158
|
+
* ## 类型严格性
|
|
159
|
+
*
|
|
160
|
+
* 判定处一律用 `=== true`,所以手改 JSON 写出 `"true"`(字符串)/ `1` /
|
|
161
|
+
* `null` 都会被当成 `false` —— 防 YAML/手改造成的类型漂移。
|
|
162
|
+
*/
|
|
163
|
+
statusNotifications?: boolean;
|
|
126
164
|
/** 轮询间隔(毫秒,定时器用) */
|
|
127
165
|
interval?: number;
|
|
128
166
|
/** cron 表达式(定时器用) */
|
|
@@ -161,8 +199,52 @@ export interface EventSourceConfig {
|
|
|
161
199
|
*
|
|
162
200
|
* 内置 bounty-im handler 在 config.systemPrompt 未设置时使用默认 prompt;
|
|
163
201
|
* 用户可显式覆盖。
|
|
202
|
+
*
|
|
203
|
+
* ★ ES-M1(Task #5144):lark-cli 渠道在 lean 模式下,未配置本字段时
|
|
204
|
+
* 也会注入渠道静态 prompt(buildLarkChannelSystemPrompt),规则文本
|
|
205
|
+
* 前置到 system prompt;配置了则用户值在前 + 渠道 prompt 在后。
|
|
164
206
|
*/
|
|
165
207
|
systemPrompt?: string;
|
|
208
|
+
/**
|
|
209
|
+
* 渠道 prompt 模式(ES-M1,Task #5144;默认 "lean")
|
|
210
|
+
*
|
|
211
|
+
* - "lean"(默认):渠道静态回复规则(关键 0/1/2/3、30KB 上限、禁分段、
|
|
212
|
+
* --as bot、mktemp+jq 模板,~1566 tok)前置注入 system prompt;
|
|
213
|
+
* per-event recommendedAction 压缩为动态小卡片(action 一句话 +
|
|
214
|
+
* replyTo 四元组)。
|
|
215
|
+
* - "legacy":per-source 回退开关 —— 行为与旧版完全一致
|
|
216
|
+
* (recommendedAction 4.4KB 长模板、无渠道 systemPrompt 注入)。
|
|
217
|
+
*
|
|
218
|
+
* 用途:灰度期如果 sub-agent / 第三方 consumer 依赖
|
|
219
|
+
* `payload.message` 里 JSON 的长模板规则文本,可将该 source
|
|
220
|
+
* 回退为 legacy。
|
|
221
|
+
*/
|
|
222
|
+
channelPromptMode?: "legacy" | "lean";
|
|
223
|
+
/**
|
|
224
|
+
* ★ Task #5333 — 该事件源驱动的 agent 会话**额外注入**的工具名列表。
|
|
225
|
+
*
|
|
226
|
+
* 背景(用户 2026-11-11 16:54):「ES config 支持 extend tools ——
|
|
227
|
+
* 不同 ES 驱动的 agent 注入 tools 可不同。企微 ES 有特有工具
|
|
228
|
+
* (wecom_respond),不该配到 default agent。」
|
|
229
|
+
*
|
|
230
|
+
* 语义:
|
|
231
|
+
* - 只有 `tool.metadata.channelOnly === true` 的工具受本字段控制
|
|
232
|
+
* (未标记 channelOnly 的工具对所有 agent 本来就可见,无需声明)
|
|
233
|
+
* - 未配置本字段 → 不放行任何 channelOnly 工具
|
|
234
|
+
* - 配置后 → handler 把它写进 `evt.metadata.extendTools`,
|
|
235
|
+
* 经 run.ts / run-headless-dispatch.ts 透传到
|
|
236
|
+
* `AgentContext.extendTools`,最终由 ToolRegistry / AgentComponent
|
|
237
|
+
* 的可见性过滤放行
|
|
238
|
+
*
|
|
239
|
+
* 内置默认:`wecom-cli` handler 恒注入 `["wecom_respond"]`
|
|
240
|
+
* (企微唯一出站工具,不配也必须可见),用户的 config.extendTools
|
|
241
|
+
* 追加在后并去重。
|
|
242
|
+
*
|
|
243
|
+
* ```json
|
|
244
|
+
* { "type": "wecom-cli", "extendTools": ["my_extra_tool"] }
|
|
245
|
+
* ```
|
|
246
|
+
*/
|
|
247
|
+
extendTools?: string[];
|
|
166
248
|
/**
|
|
167
249
|
* Agent IM 地址(bounty-im 类型用,格式:agent-id@host)
|
|
168
250
|
*
|
|
@@ -244,6 +326,30 @@ export interface EventMetadata {
|
|
|
244
326
|
senderEmail?: string;
|
|
245
327
|
/** 租户 key */
|
|
246
328
|
tenantKey?: string;
|
|
329
|
+
/**
|
|
330
|
+
* ★ Task #5212:lark 引用消息上下文
|
|
331
|
+
*
|
|
332
|
+
* lark-cli `im.message.receive_v1` 事件的引用字段归一化:
|
|
333
|
+
* - rootId: 根消息 id(root_id)
|
|
334
|
+
* - parentId: 直接回复的父消息 id(reply_to / parent_id)
|
|
335
|
+
* - threadId: thread id(thread_id),仅 thread 场景存在
|
|
336
|
+
*
|
|
337
|
+
* 无任何引用字段(普通消息)时为 undefined。
|
|
338
|
+
* agent 据此知道当前消息是对哪条消息的回复。
|
|
339
|
+
*/
|
|
340
|
+
replyContext?: {
|
|
341
|
+
rootId?: string;
|
|
342
|
+
parentId?: string;
|
|
343
|
+
threadId?: string;
|
|
344
|
+
/**
|
|
345
|
+
* ★ Task #5251:企微引用内容(quote 内嵌原文归一文本)
|
|
346
|
+
*
|
|
347
|
+
* 企微长连接协议直接内嵌被引用内容(SDK BaseMessage.quote),
|
|
348
|
+
* 无被引用消息 id —— 因此企微侧只有 quotedText,
|
|
349
|
+
* 无 rootId/parentId/threadId(那些是 lark 侧字段)。
|
|
350
|
+
*/
|
|
351
|
+
quotedText?: string;
|
|
352
|
+
};
|
|
247
353
|
/**
|
|
248
354
|
* 事件源注入到 agent systemPrompt 的专属 prompt
|
|
249
355
|
*
|
|
@@ -262,6 +368,45 @@ export interface EventMetadata {
|
|
|
262
368
|
export interface RecommendedAction {
|
|
263
369
|
/** 动作描述 */
|
|
264
370
|
action: string;
|
|
371
|
+
/**
|
|
372
|
+
* ★ ES-M1(Task #5144):静态规则是否已前置到渠道 system prompt。
|
|
373
|
+
*
|
|
374
|
+
* lean 模式(默认)下 extractMetadata 会置 `true`:
|
|
375
|
+
* 规则文本(关键 0/1/2/3、30KB 上限、禁分段、--as bot、mktemp+jq
|
|
376
|
+
* 模板)不再出现在 `action` 里,而是注入了渠道 system prompt
|
|
377
|
+
* (EventMetadata.systemPrompt)。旧 consumer / 灰度观察者可据此
|
|
378
|
+
* 识别"卡片已瘦身"这一新形态。
|
|
379
|
+
*
|
|
380
|
+
* legacy 模式不设置该字段(保持旧版形态识别)。
|
|
381
|
+
*/
|
|
382
|
+
staticRulesInSystemPrompt?: true;
|
|
383
|
+
/**
|
|
384
|
+
* ★ Task #5212(DS review MAJOR-2):lark 引用消息上下文
|
|
385
|
+
*
|
|
386
|
+
* 当前消息「是对哪条消息的回复」的定位信息(rootId / parentId / threadId)。
|
|
387
|
+
*
|
|
388
|
+
* ⚠️ 为什么挂在 recommendedAction 而不是只挂 metadata:
|
|
389
|
+
* agent 实际收到的 user message = `payload.message` =
|
|
390
|
+
* `JSON.stringify({ rawData, recommendedAction, triggerEventId? })`
|
|
391
|
+
* —— **不含 metadata 键**。只写进 evt.metadata / evt.payload.metadata
|
|
392
|
+
* 的话,agent 读不到任何 parentId 值,需求(「让 agent LLM 看到是对某
|
|
393
|
+
* 消息 id 的回复」)无法闭环。
|
|
394
|
+
*
|
|
395
|
+
* 无引用字段(普通消息)时为 undefined(不产生空对象)。
|
|
396
|
+
*/
|
|
397
|
+
replyContext?: {
|
|
398
|
+
rootId?: string;
|
|
399
|
+
parentId?: string;
|
|
400
|
+
threadId?: string;
|
|
401
|
+
/**
|
|
402
|
+
* ★ Task #5251:企微引用内容(quote 内嵌原文归一文本)
|
|
403
|
+
*
|
|
404
|
+
* 企微长连接协议直接内嵌被引用内容(SDK BaseMessage.quote),
|
|
405
|
+
* 无被引用消息 id —— 因此企微侧只有 quotedText,
|
|
406
|
+
* 无 rootId/parentId/threadId(那些是 lark 侧字段)。
|
|
407
|
+
*/
|
|
408
|
+
quotedText?: string;
|
|
409
|
+
};
|
|
265
410
|
/** 回复目标(如果有) */
|
|
266
411
|
replyTo?: {
|
|
267
412
|
appId?: string;
|
|
@@ -346,6 +491,13 @@ export interface EventSourceEventPayload {
|
|
|
346
491
|
* 反查原始 chatId。
|
|
347
492
|
*/
|
|
348
493
|
triggerEventId?: string;
|
|
494
|
+
/**
|
|
495
|
+
* Task #5199:已落盘媒体文件的本地路径(image/file/video/voice)。
|
|
496
|
+
*
|
|
497
|
+
* WecomCliInstance.handleWsFrame 异步下载解密后写入;
|
|
498
|
+
* agent 用 understand_image(image_source=<path>) 读图。
|
|
499
|
+
*/
|
|
500
|
+
mediaFiles?: string[];
|
|
349
501
|
}
|
|
350
502
|
/**
|
|
351
503
|
* EventSource 事件
|
|
@@ -653,7 +805,7 @@ export interface BuildNotifyHandlePromptInput {
|
|
|
653
805
|
error?: string;
|
|
654
806
|
/**
|
|
655
807
|
* 子 session ID —— 超时 / 失败后如需**续跑**,主 agent 可直接
|
|
656
|
-
* `delegate_task(
|
|
808
|
+
* `delegate_task(sub_session_id="<此值>", ...)` 让子代理继承历史继续推进,
|
|
657
809
|
* 不必从零重来。
|
|
658
810
|
*/
|
|
659
811
|
subSessionId?: string;
|