@ai-setting/roy-agent-core 1.7.85 → 1.7.89

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.
Files changed (148) hide show
  1. package/dist/config/index.js +7 -7
  2. package/dist/env/agent/agent-component.d.ts +1 -1
  3. package/dist/env/agent/agent-component.js +13 -12
  4. package/dist/env/agent/index.js +13 -12
  5. package/dist/env/agent/types.d.ts +14 -0
  6. package/dist/env/commands/index.js +7 -7
  7. package/dist/env/context/index.js +3 -3
  8. package/dist/env/debug/index.js +7 -7
  9. package/dist/env/error-reply.js +1 -1
  10. package/dist/env/event-source/event-source-handlers.d.ts +18 -2
  11. package/dist/env/event-source/event-source-handlers.js +26 -21
  12. package/dist/env/event-source/event-store.js +2 -2
  13. package/dist/env/event-source/index.js +25 -22
  14. package/dist/env/event-source/timer-handler.d.ts +98 -0
  15. package/dist/env/event-source/types.d.ts +53 -1
  16. package/dist/env/event-source/wecom-card-action-handler.d.ts +235 -3
  17. package/dist/env/event-source/wecom-card-builder.d.ts +207 -1
  18. package/dist/env/event-source/wecom-cli-handler.d.ts +25 -0
  19. package/dist/{shared/@ai-setting/roy-agent-core-vyr6svt6.js → env/event-source/wecom-respond-registry.js} +8 -6
  20. package/dist/env/event-source/wecom-session-card-sender.d.ts +135 -0
  21. package/dist/env/event-source/wecom-session-card-sender.js +153 -0
  22. package/dist/env/hook/index.js +5 -5
  23. package/dist/env/index.js +50 -45
  24. package/dist/env/llm/index.js +9 -8
  25. package/dist/env/log-trace/index.js +7 -7
  26. package/dist/env/log-trace/trace-filters.d.ts +6 -1
  27. package/dist/env/mcp/index.js +7 -7
  28. package/dist/env/memory/index.js +7 -7
  29. package/dist/env/plugin/index.js +7 -7
  30. package/dist/env/prompt/index.js +8 -8
  31. package/dist/env/prompt/prompts-index.d.ts +1 -1
  32. package/dist/env/session/group-session-link.d.ts +99 -0
  33. package/dist/env/session/index.js +11 -10
  34. package/dist/env/session/session-component.d.ts +89 -0
  35. package/dist/env/session/storage/index.js +5 -4
  36. package/dist/env/session/types.d.ts +10 -0
  37. package/dist/env/skill/index.js +7 -7
  38. package/dist/env/task/backend/index.d.ts +3 -0
  39. package/dist/env/task/backend/index.js +151 -3
  40. package/dist/env/task/backend/remote-task-port.d.ts +85 -0
  41. package/dist/env/task/backend/types.d.ts +5 -0
  42. package/dist/env/task/delegate/delegate-channel-hint.d.ts +39 -0
  43. package/dist/env/task/delegate/delegate-tool.d.ts +71 -6
  44. package/dist/env/task/delegate/delegate-tool.js +11 -9
  45. package/dist/env/task/delegate/index.js +8 -8
  46. package/dist/env/task/index.d.ts +1 -1
  47. package/dist/env/task/index.js +34 -18
  48. package/dist/env/task/mcp/index.js +4 -4
  49. package/dist/env/task/plugins/card-subject.d.ts +117 -0
  50. package/dist/env/task/plugins/index.js +19 -17
  51. package/dist/env/task/plugins/lark-card-action-handler.d.ts +261 -6
  52. package/dist/env/task/plugins/lark-card-patch-notifier.d.ts +501 -0
  53. package/dist/env/task/plugins/lark-card-patch-notifier.js +12 -2
  54. package/dist/env/task/plugins/lark-card-state-store.d.ts +60 -0
  55. package/dist/env/task/plugins/lark-cli-task-notify-plugin.d.ts +45 -0
  56. package/dist/env/task/plugins/sub-session-activity.d.ts +415 -0
  57. package/dist/env/task/plugins/wecom-session-card-store.d.ts +134 -0
  58. package/dist/env/task/plugins/wecom-session-card-store.js +23 -0
  59. package/dist/env/task/plugins/wecom-task-notify-plugin.d.ts +40 -0
  60. package/dist/env/task/storage/index.d.ts +1 -0
  61. package/dist/env/task/storage/index.js +24 -4
  62. package/dist/env/task/storage/migrations/006_add_task_owner.d.ts +24 -0
  63. package/dist/env/task/storage/remote-task-store.d.ts +186 -0
  64. package/dist/env/task/task-component.d.ts +7 -0
  65. package/dist/env/task/tools/index.js +4 -4
  66. package/dist/env/task/tools/task-types.d.ts +7 -0
  67. package/dist/env/task/types.d.ts +17 -0
  68. package/dist/env/tool/built-in/index.js +6 -4
  69. package/dist/env/tool/index.js +14 -10
  70. package/dist/env/tool/types.d.ts +25 -0
  71. package/dist/env/tool/validator.d.ts +8 -0
  72. package/dist/env/workflow/engine/index.js +12 -12
  73. package/dist/env/workflow/hooks/index.js +7 -7
  74. package/dist/env/workflow/index.js +24 -23
  75. package/dist/env/workflow/nodes/index.js +2 -2
  76. package/dist/env/workflow/plugins/index.js +10 -8
  77. package/dist/env/workflow/service/index.js +2 -2
  78. package/dist/env/workflow/storage/index.js +3 -3
  79. package/dist/env/workflow/tools/index.js +16 -15
  80. package/dist/env/workflow/utils/index.js +4 -4
  81. package/dist/index.d.ts +1 -1
  82. package/dist/index.js +71 -60
  83. package/dist/shared/@ai-setting/{roy-agent-core-q813vafd.js → roy-agent-core-05z35shp.js} +1 -1
  84. package/dist/shared/@ai-setting/{roy-agent-core-dc9zq75z.js → roy-agent-core-0crmsc12.js} +3 -3
  85. package/dist/shared/@ai-setting/{roy-agent-core-7dd0s3xb.js → roy-agent-core-0n1wwndq.js} +1027 -14
  86. package/dist/shared/@ai-setting/{roy-agent-core-cha0jc7n.js → roy-agent-core-0sbmdz8d.js} +137 -16
  87. package/dist/shared/@ai-setting/{roy-agent-core-87942bw4.js → roy-agent-core-1mhyh4c5.js} +1 -1
  88. package/dist/shared/@ai-setting/{roy-agent-core-v6vr6za7.js → roy-agent-core-1vv4fx15.js} +4 -4
  89. package/dist/shared/@ai-setting/{roy-agent-core-nwbfepba.js → roy-agent-core-3e040tc5.js} +1 -1
  90. package/dist/shared/@ai-setting/roy-agent-core-418zc9ha.js +288 -0
  91. package/dist/shared/@ai-setting/{roy-agent-core-qk9hd89p.js → roy-agent-core-49qcpqwg.js} +54 -19
  92. package/dist/shared/@ai-setting/{roy-agent-core-xf6z96qy.js → roy-agent-core-4b38m749.js} +818 -346
  93. package/dist/shared/@ai-setting/{roy-agent-core-r5wt1h3c.js → roy-agent-core-4fkxy2gv.js} +1 -1
  94. package/dist/shared/@ai-setting/{roy-agent-core-na18zwj0.js → roy-agent-core-4t3yskp8.js} +1 -1
  95. package/dist/shared/@ai-setting/{roy-agent-core-d1n4jbza.js → roy-agent-core-5dhvfgaw.js} +5 -5
  96. package/dist/shared/@ai-setting/{roy-agent-core-5pr4zp88.js → roy-agent-core-5kzhaap1.js} +1 -1
  97. package/dist/shared/@ai-setting/{roy-agent-core-qq96p0tj.js → roy-agent-core-5s2t8z00.js} +22 -1
  98. package/dist/shared/@ai-setting/{roy-agent-core-6rh8k6ba.js → roy-agent-core-6gj1hc5z.js} +7 -7
  99. package/dist/shared/@ai-setting/{roy-agent-core-g8htfwxj.js → roy-agent-core-7f10p7m2.js} +1 -1
  100. package/dist/shared/@ai-setting/{roy-agent-core-h21gngxf.js → roy-agent-core-7yh5wps0.js} +1 -1
  101. package/dist/shared/@ai-setting/{roy-agent-core-efkjyh69.js → roy-agent-core-9710zwwz.js} +1 -1
  102. package/dist/shared/@ai-setting/{roy-agent-core-rykf7c04.js → roy-agent-core-9c565frx.js} +1 -1
  103. package/dist/shared/@ai-setting/{roy-agent-core-vffccgf6.js → roy-agent-core-9cen1jvg.js} +18 -7
  104. package/dist/shared/@ai-setting/{roy-agent-core-fghc2m8z.js → roy-agent-core-aa8kv18f.js} +34 -2
  105. package/dist/shared/@ai-setting/roy-agent-core-age3qseb.js +177 -0
  106. package/dist/shared/@ai-setting/{roy-agent-core-7bpj859q.js → roy-agent-core-azyz78ky.js} +7 -7
  107. package/dist/shared/@ai-setting/{roy-agent-core-264qexac.js → roy-agent-core-b7h39vrc.js} +4 -4
  108. package/dist/shared/@ai-setting/{roy-agent-core-dqxec05w.js → roy-agent-core-bjtc9d35.js} +2 -2
  109. package/dist/shared/@ai-setting/roy-agent-core-c4ec7k0p.js +426 -0
  110. package/dist/shared/@ai-setting/{roy-agent-core-ddyk1rc0.js → roy-agent-core-cre2y2ct.js} +160 -4
  111. package/dist/shared/@ai-setting/{roy-agent-core-tr3ep81v.js → roy-agent-core-d6zdbgtc.js} +1 -1
  112. package/dist/shared/@ai-setting/{roy-agent-core-0qyrk5k0.js → roy-agent-core-ds6qzmf8.js} +14 -5
  113. package/dist/shared/@ai-setting/{roy-agent-core-p6ks90tb.js → roy-agent-core-dvec4nn2.js} +6 -6
  114. package/dist/shared/@ai-setting/{roy-agent-core-cgtq6427.js → roy-agent-core-e08bvpaq.js} +1 -1
  115. package/dist/shared/@ai-setting/{roy-agent-core-12n08pg5.js → roy-agent-core-e69qxdyy.js} +1 -1
  116. package/dist/shared/@ai-setting/{roy-agent-core-xcp8vwax.js → roy-agent-core-fepm835e.js} +2 -2
  117. package/dist/shared/@ai-setting/{roy-agent-core-6j02sbee.js → roy-agent-core-fhg03v43.js} +1 -1
  118. package/dist/shared/@ai-setting/{roy-agent-core-dvtg4sn0.js → roy-agent-core-g8yr733d.js} +1 -1
  119. package/dist/shared/@ai-setting/{roy-agent-core-m3vjepzz.js → roy-agent-core-h1e1fm9b.js} +38 -202
  120. package/dist/shared/@ai-setting/{roy-agent-core-c2gbt68e.js → roy-agent-core-h83zdsrq.js} +2 -2
  121. package/dist/shared/@ai-setting/{roy-agent-core-tk98f92b.js → roy-agent-core-k3gcvybs.js} +2 -2
  122. package/dist/shared/@ai-setting/{roy-agent-core-b31v3qpv.js → roy-agent-core-k3h8t4q1.js} +992 -212
  123. package/dist/shared/@ai-setting/{roy-agent-core-pgvcf91v.js → roy-agent-core-m39v7qpx.js} +2 -2
  124. package/dist/shared/@ai-setting/{roy-agent-core-ezvpreqz.js → roy-agent-core-m66ysky0.js} +54 -6
  125. package/dist/shared/@ai-setting/{roy-agent-core-begm7ytz.js → roy-agent-core-m7d1t3db.js} +3 -3
  126. package/dist/shared/@ai-setting/{roy-agent-core-tm1mxttk.js → roy-agent-core-mf5p38yf.js} +2 -2
  127. package/dist/shared/@ai-setting/{roy-agent-core-83bewqx8.js → roy-agent-core-mvh0td7p.js} +2 -2
  128. package/dist/shared/@ai-setting/{roy-agent-core-ze5cqpf2.js → roy-agent-core-mx855td4.js} +17 -38
  129. package/dist/shared/@ai-setting/{roy-agent-core-0dh8npnz.js → roy-agent-core-n197medr.js} +13 -13
  130. package/dist/shared/@ai-setting/{roy-agent-core-cmprygrp.js → roy-agent-core-nqkfkpf4.js} +4 -4
  131. package/dist/shared/@ai-setting/{roy-agent-core-7cbpmk4q.js → roy-agent-core-p31ftgq9.js} +1 -1
  132. package/dist/shared/@ai-setting/{roy-agent-core-1v4g0d4x.js → roy-agent-core-rm7seqwb.js} +1 -1
  133. package/dist/shared/@ai-setting/{roy-agent-core-ax9e9szb.js → roy-agent-core-smf94h73.js} +1 -1
  134. package/dist/shared/@ai-setting/{roy-agent-core-acj8ag08.js → roy-agent-core-tjnabyvq.js} +1 -1
  135. package/dist/shared/@ai-setting/{roy-agent-core-qqaak24r.js → roy-agent-core-tkpp1ba0.js} +1 -1
  136. package/dist/shared/@ai-setting/{roy-agent-core-dkrvmjsh.js → roy-agent-core-tpm1dd1g.js} +23 -15
  137. package/dist/shared/@ai-setting/{roy-agent-core-ed233k5z.js → roy-agent-core-v1n0106v.js} +1 -1
  138. package/dist/shared/@ai-setting/{roy-agent-core-zxz5fkwj.js → roy-agent-core-v6yshv0z.js} +1 -1
  139. package/dist/shared/@ai-setting/{roy-agent-core-mcy5apay.js → roy-agent-core-vf9sp6s3.js} +1 -1
  140. package/dist/shared/@ai-setting/{roy-agent-core-xvt7kf7p.js → roy-agent-core-w9ryeg2p.js} +3 -3
  141. package/dist/shared/@ai-setting/{roy-agent-core-es203w7p.js → roy-agent-core-wqs6yypq.js} +1 -1
  142. package/dist/shared/@ai-setting/roy-agent-core-wxrkcb17.js +56 -0
  143. package/dist/shared/@ai-setting/{roy-agent-core-0snm5hc5.js → roy-agent-core-y6shd91r.js} +1 -1
  144. package/dist/shared/@ai-setting/{roy-agent-core-9vxh6f8h.js → roy-agent-core-y7fqtzk2.js} +7 -7
  145. package/dist/shared/@ai-setting/{roy-agent-core-cpcd24n2.js → roy-agent-core-yet36q5k.js} +2 -2
  146. package/dist/shared/@ai-setting/{roy-agent-core-3fh1f7s7.js → roy-agent-core-yfpnkc4z.js} +5 -5
  147. package/dist/shared/@ai-setting/roy-agent-core-zhwcje5a.js +352 -0
  148. package/package.json +9 -1
@@ -4,7 +4,7 @@ import {
4
4
  ConfigSourceNotFoundError,
5
5
  FileSource,
6
6
  MemorySource
7
- } from "../shared/@ai-setting/roy-agent-core-zxz5fkwj.js";
7
+ } from "../shared/@ai-setting/roy-agent-core-v6yshv0z.js";
8
8
  import {
9
9
  EnvSource,
10
10
  parseJSONC,
@@ -24,12 +24,12 @@ import {
24
24
  } from "../shared/@ai-setting/roy-agent-core-2stt4rp5.js";
25
25
  import"../shared/@ai-setting/roy-agent-core-qxnbvgwe.js";
26
26
  import"../shared/@ai-setting/roy-agent-core-7hh0brvs.js";
27
- import"../shared/@ai-setting/roy-agent-core-pgvcf91v.js";
28
- import"../shared/@ai-setting/roy-agent-core-ax9e9szb.js";
29
- import"../shared/@ai-setting/roy-agent-core-cpcd24n2.js";
30
- import"../shared/@ai-setting/roy-agent-core-qqaak24r.js";
31
- import"../shared/@ai-setting/roy-agent-core-7cbpmk4q.js";
32
- import"../shared/@ai-setting/roy-agent-core-qq96p0tj.js";
27
+ import"../shared/@ai-setting/roy-agent-core-m39v7qpx.js";
28
+ import"../shared/@ai-setting/roy-agent-core-smf94h73.js";
29
+ import"../shared/@ai-setting/roy-agent-core-yet36q5k.js";
30
+ import"../shared/@ai-setting/roy-agent-core-tkpp1ba0.js";
31
+ import"../shared/@ai-setting/roy-agent-core-p31ftgq9.js";
32
+ import"../shared/@ai-setting/roy-agent-core-5s2t8z00.js";
33
33
  import"../shared/@ai-setting/roy-agent-core-7f7t9wwp.js";
34
34
  import"../shared/@ai-setting/roy-agent-core-85xyctnb.js";
35
35
  import"../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
@@ -202,7 +202,7 @@ export interface AgentComponentOptions {
202
202
  * @param agent 当前请求工具列表的 agent
203
203
  * @returns 过滤后的新数组(保留原数组的相对顺序)
204
204
  */
205
- export declare function filterToolsByAgent(tools: Tool[], agent: AgentInstance): Tool[];
205
+ export declare function filterToolsByAgent(tools: Tool[], agent: AgentInstance, extendTools?: string[]): Tool[];
206
206
  /**
207
207
  * 构建一次 Agent run 的 EnvContext(effectiveContext + 父级 ALS 继承)。
208
208
  *
@@ -7,26 +7,27 @@ import {
7
7
  filterToolsByAgent,
8
8
  parseToolList,
9
9
  toLLMMessage
10
- } from "../../shared/@ai-setting/roy-agent-core-dkrvmjsh.js";
11
- import"../../shared/@ai-setting/roy-agent-core-ze5cqpf2.js";
10
+ } from "../../shared/@ai-setting/roy-agent-core-tpm1dd1g.js";
11
+ import"../../shared/@ai-setting/roy-agent-core-mx855td4.js";
12
12
  import"../../shared/@ai-setting/roy-agent-core-jvv2h3d6.js";
13
- import"../../shared/@ai-setting/roy-agent-core-ed233k5z.js";
13
+ import"../../shared/@ai-setting/roy-agent-core-v1n0106v.js";
14
14
  import"../../shared/@ai-setting/roy-agent-core-qxnbvgwe.js";
15
- import"../../shared/@ai-setting/roy-agent-core-h21gngxf.js";
16
- import"../../shared/@ai-setting/roy-agent-core-0snm5hc5.js";
17
- import"../../shared/@ai-setting/roy-agent-core-fghc2m8z.js";
15
+ import"../../shared/@ai-setting/roy-agent-core-7yh5wps0.js";
16
+ import"../../shared/@ai-setting/roy-agent-core-y6shd91r.js";
17
+ import"../../shared/@ai-setting/roy-agent-core-aa8kv18f.js";
18
+ import"../../shared/@ai-setting/roy-agent-core-wxrkcb17.js";
18
19
  import"../../shared/@ai-setting/roy-agent-core-zjdzk1gg.js";
19
20
  import"../../shared/@ai-setting/roy-agent-core-c1v263jn.js";
20
21
  import"../../shared/@ai-setting/roy-agent-core-ntn32q7j.js";
21
22
  import"../../shared/@ai-setting/roy-agent-core-mkc3zshb.js";
22
23
  import"../../shared/@ai-setting/roy-agent-core-ctdhjv68.js";
23
24
  import"../../shared/@ai-setting/roy-agent-core-7hh0brvs.js";
24
- import"../../shared/@ai-setting/roy-agent-core-pgvcf91v.js";
25
- import"../../shared/@ai-setting/roy-agent-core-ax9e9szb.js";
26
- import"../../shared/@ai-setting/roy-agent-core-cpcd24n2.js";
27
- import"../../shared/@ai-setting/roy-agent-core-qqaak24r.js";
28
- import"../../shared/@ai-setting/roy-agent-core-7cbpmk4q.js";
29
- import"../../shared/@ai-setting/roy-agent-core-qq96p0tj.js";
25
+ import"../../shared/@ai-setting/roy-agent-core-m39v7qpx.js";
26
+ import"../../shared/@ai-setting/roy-agent-core-smf94h73.js";
27
+ import"../../shared/@ai-setting/roy-agent-core-yet36q5k.js";
28
+ import"../../shared/@ai-setting/roy-agent-core-tkpp1ba0.js";
29
+ import"../../shared/@ai-setting/roy-agent-core-p31ftgq9.js";
30
+ import"../../shared/@ai-setting/roy-agent-core-5s2t8z00.js";
30
31
  import"../../shared/@ai-setting/roy-agent-core-7f7t9wwp.js";
31
32
  import"../../shared/@ai-setting/roy-agent-core-85xyctnb.js";
32
33
  import"../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
@@ -4,26 +4,27 @@ import {
4
4
  import {
5
5
  AgentComponent,
6
6
  AgentComponentConfigSchema
7
- } from "../../shared/@ai-setting/roy-agent-core-dkrvmjsh.js";
8
- import"../../shared/@ai-setting/roy-agent-core-ze5cqpf2.js";
7
+ } from "../../shared/@ai-setting/roy-agent-core-tpm1dd1g.js";
8
+ import"../../shared/@ai-setting/roy-agent-core-mx855td4.js";
9
9
  import"../../shared/@ai-setting/roy-agent-core-jvv2h3d6.js";
10
- import"../../shared/@ai-setting/roy-agent-core-ed233k5z.js";
10
+ import"../../shared/@ai-setting/roy-agent-core-v1n0106v.js";
11
11
  import"../../shared/@ai-setting/roy-agent-core-qxnbvgwe.js";
12
- import"../../shared/@ai-setting/roy-agent-core-h21gngxf.js";
13
- import"../../shared/@ai-setting/roy-agent-core-0snm5hc5.js";
14
- import"../../shared/@ai-setting/roy-agent-core-fghc2m8z.js";
12
+ import"../../shared/@ai-setting/roy-agent-core-7yh5wps0.js";
13
+ import"../../shared/@ai-setting/roy-agent-core-y6shd91r.js";
14
+ import"../../shared/@ai-setting/roy-agent-core-aa8kv18f.js";
15
+ import"../../shared/@ai-setting/roy-agent-core-wxrkcb17.js";
15
16
  import"../../shared/@ai-setting/roy-agent-core-zjdzk1gg.js";
16
17
  import"../../shared/@ai-setting/roy-agent-core-c1v263jn.js";
17
18
  import"../../shared/@ai-setting/roy-agent-core-ntn32q7j.js";
18
19
  import"../../shared/@ai-setting/roy-agent-core-mkc3zshb.js";
19
20
  import"../../shared/@ai-setting/roy-agent-core-ctdhjv68.js";
20
21
  import"../../shared/@ai-setting/roy-agent-core-7hh0brvs.js";
21
- import"../../shared/@ai-setting/roy-agent-core-pgvcf91v.js";
22
- import"../../shared/@ai-setting/roy-agent-core-ax9e9szb.js";
23
- import"../../shared/@ai-setting/roy-agent-core-cpcd24n2.js";
24
- import"../../shared/@ai-setting/roy-agent-core-qqaak24r.js";
25
- import"../../shared/@ai-setting/roy-agent-core-7cbpmk4q.js";
26
- import"../../shared/@ai-setting/roy-agent-core-qq96p0tj.js";
22
+ import"../../shared/@ai-setting/roy-agent-core-m39v7qpx.js";
23
+ import"../../shared/@ai-setting/roy-agent-core-smf94h73.js";
24
+ import"../../shared/@ai-setting/roy-agent-core-yet36q5k.js";
25
+ import"../../shared/@ai-setting/roy-agent-core-tkpp1ba0.js";
26
+ import"../../shared/@ai-setting/roy-agent-core-p31ftgq9.js";
27
+ import"../../shared/@ai-setting/roy-agent-core-5s2t8z00.js";
27
28
  import"../../shared/@ai-setting/roy-agent-core-7f7t9wwp.js";
28
29
  import"../../shared/@ai-setting/roy-agent-core-85xyctnb.js";
29
30
  import"../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
@@ -145,6 +145,20 @@ export interface AgentContext {
145
145
  pluginEnabled?: Record<string, boolean>;
146
146
  /** 额外工具列表(上下文级别,会追加到可用工具列表末尾) */
147
147
  extraTools?: import("../tool/types").Tool[];
148
+ /**
149
+ * ★ Task #5333 — 放行的 channel-only 工具名单(会话渠道上下文)。
150
+ *
151
+ * 由事件源驱动的一轮对话注入(EventSourceConfig.extendTools →
152
+ * evt.metadata.extendTools → agentContext.extendTools)。
153
+ *
154
+ * `tool.metadata.channelOnly === true` 的工具只有名字出现在这里时才可见;
155
+ * 未标记 channelOnly 的工具完全不受影响。
156
+ *
157
+ * 典型:企微 ES 注入 `["wecom_respond"]`,于是处理企微事件的 agent
158
+ * (可能是 default)能看到 wecom_respond;而同名 default agent
159
+ * 在交互式 CLI / 飞书会话里看不到它。
160
+ */
161
+ extendTools?: string[];
148
162
  /** 是否将 ReAct 消息持久化到 session DB(默认 true)。
149
163
  * 设为 false 时,agent run 仍会读取 session history,但不会写入新消息。
150
164
  * 用于子 agent 复用父 session 的 history 但不污染 session DB。 */
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  CommandsComponent
3
- } from "../../shared/@ai-setting/roy-agent-core-g8htfwxj.js";
3
+ } from "../../shared/@ai-setting/roy-agent-core-7f10p7m2.js";
4
4
  import"../../shared/@ai-setting/roy-agent-core-7hh0brvs.js";
5
- import"../../shared/@ai-setting/roy-agent-core-pgvcf91v.js";
6
- import"../../shared/@ai-setting/roy-agent-core-ax9e9szb.js";
7
- import"../../shared/@ai-setting/roy-agent-core-cpcd24n2.js";
8
- import"../../shared/@ai-setting/roy-agent-core-qqaak24r.js";
9
- import"../../shared/@ai-setting/roy-agent-core-7cbpmk4q.js";
10
- import"../../shared/@ai-setting/roy-agent-core-qq96p0tj.js";
5
+ import"../../shared/@ai-setting/roy-agent-core-m39v7qpx.js";
6
+ import"../../shared/@ai-setting/roy-agent-core-smf94h73.js";
7
+ import"../../shared/@ai-setting/roy-agent-core-yet36q5k.js";
8
+ import"../../shared/@ai-setting/roy-agent-core-tkpp1ba0.js";
9
+ import"../../shared/@ai-setting/roy-agent-core-p31ftgq9.js";
10
+ import"../../shared/@ai-setting/roy-agent-core-5s2t8z00.js";
11
11
  import"../../shared/@ai-setting/roy-agent-core-7f7t9wwp.js";
12
12
  import"../../shared/@ai-setting/roy-agent-core-85xyctnb.js";
13
13
  import"../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  init_context
3
- } from "../../shared/@ai-setting/roy-agent-core-qqaak24r.js";
3
+ } from "../../shared/@ai-setting/roy-agent-core-tkpp1ba0.js";
4
4
  import {
5
5
  EVENT_ENV_PREFIX,
6
6
  createEnvContext,
@@ -24,8 +24,8 @@ import {
24
24
  runWithEnvContextAsync,
25
25
  serializeEventToEnv,
26
26
  setCurrentTaskId
27
- } from "../../shared/@ai-setting/roy-agent-core-7cbpmk4q.js";
28
- import"../../shared/@ai-setting/roy-agent-core-qq96p0tj.js";
27
+ } from "../../shared/@ai-setting/roy-agent-core-p31ftgq9.js";
28
+ import"../../shared/@ai-setting/roy-agent-core-5s2t8z00.js";
29
29
  import"../../shared/@ai-setting/roy-agent-core-7f7t9wwp.js";
30
30
  import"../../shared/@ai-setting/roy-agent-core-85xyctnb.js";
31
31
  import"../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
@@ -4,18 +4,18 @@ import {
4
4
  RegexParser,
5
5
  SpanBuilder,
6
6
  SpanDbReader
7
- } from "../../shared/@ai-setting/roy-agent-core-87942bw4.js";
7
+ } from "../../shared/@ai-setting/roy-agent-core-1mhyh4c5.js";
8
8
  import {
9
9
  ReplFormatter,
10
10
  TraceFormatter,
11
11
  TreeFormatter
12
12
  } from "../../shared/@ai-setting/roy-agent-core-rvv6ydff.js";
13
- import"../../shared/@ai-setting/roy-agent-core-pgvcf91v.js";
14
- import"../../shared/@ai-setting/roy-agent-core-ax9e9szb.js";
15
- import"../../shared/@ai-setting/roy-agent-core-cpcd24n2.js";
16
- import"../../shared/@ai-setting/roy-agent-core-qqaak24r.js";
17
- import"../../shared/@ai-setting/roy-agent-core-7cbpmk4q.js";
18
- import"../../shared/@ai-setting/roy-agent-core-qq96p0tj.js";
13
+ import"../../shared/@ai-setting/roy-agent-core-m39v7qpx.js";
14
+ import"../../shared/@ai-setting/roy-agent-core-smf94h73.js";
15
+ import"../../shared/@ai-setting/roy-agent-core-yet36q5k.js";
16
+ import"../../shared/@ai-setting/roy-agent-core-tkpp1ba0.js";
17
+ import"../../shared/@ai-setting/roy-agent-core-p31ftgq9.js";
18
+ import"../../shared/@ai-setting/roy-agent-core-5s2t8z00.js";
19
19
  import"../../shared/@ai-setting/roy-agent-core-7f7t9wwp.js";
20
20
  import"../../shared/@ai-setting/roy-agent-core-85xyctnb.js";
21
21
  import"../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
@@ -8,7 +8,7 @@ import {
8
8
  getFailureRuleIds,
9
9
  humanizeRetryAfter,
10
10
  notifyReactFailure
11
- } from "../shared/@ai-setting/roy-agent-core-rykf7c04.js";
11
+ } from "../shared/@ai-setting/roy-agent-core-9c565frx.js";
12
12
  import"../shared/@ai-setting/roy-agent-core-ntn32q7j.js";
13
13
  import"../shared/@ai-setting/roy-agent-core-m880qz3y.js";
14
14
  import"../shared/@ai-setting/roy-agent-core-7f7t9wwp.js";
@@ -9,6 +9,20 @@ import type { EventSourceConfig, EventSourceHandler, EventSourceInstance, EventS
9
9
  import { timerHandler } from "./timer-handler";
10
10
  import { bountyIMHandler } from "./bounty-im-handler";
11
11
  import { bountyCliHandler } from "./bounty-cli-handler";
12
+ /**
13
+ * ★ Task #5473:从原始 event 提取 agent 回复必需的精简字段。
14
+ *
15
+ * 保留:chat_id / message_id / sender_id / chat_type / content / mentions
16
+ * 删除:createTime / updateTime / type / event_id / timestamp / id /
17
+ * message_type / sender_type(及其他所有冗余栏位)
18
+ *
19
+ * 支持两种格式:
20
+ * - 简化格式(lark-cli consume):顶层 chat_id / message_id / sender_id
21
+ * - 嵌套格式(webhook):event.message.* / event.sender.sender_id.*
22
+ *
23
+ * 纯函数:不修改 rawEvent 本身(payload.rawEvent 仍持有完整原始 event)。
24
+ */
25
+ export declare function buildSlimRawData(rawEvent: unknown): Record<string, unknown>;
12
26
  /**
13
27
  * 构建 Lark `im.message.receive_v1` 事件推荐动作 prompt (Task #2185 / #4137 / #4242)
14
28
  *
@@ -55,6 +69,7 @@ export declare function buildLarkRecommendedAction(opts: {
55
69
  appId?: string;
56
70
  chatId?: string;
57
71
  messageId?: string;
72
+ senderId?: string;
58
73
  }): RecommendedAction;
59
74
  /**
60
75
  * 渠道静态规则章节标题(system prompt 与 lean 卡片互相指认的锚点)
@@ -71,9 +86,10 @@ export declare const LARK_CHANNEL_PROMPT_SECTION_TITLE = "\u2B50 \u98DE\u4E66\u5
71
86
  * 但「各加一节」式回归会立刻超。改动相关章节前先量长度,
72
87
  * 改完必须跑 lark-channel-system-prompt.test.ts (G) 组守护测试。
73
88
  * (历史:旧 action 模板 ~4486 → profile=tongzhuli 时 4745 → #5164 追加
74
- * 文档交付规范段后 4991 → #5212 追加引用上下文段后 5287。)
89
+ * 文档交付规范段后 4991 → #5212 追加引用上下文段后 5287 →
90
+ * #5472 关键 1 追加群聊 @ sender 可跑示例后 5808,预算 5300→5900。)
75
91
  */
76
- export declare const LARK_PROMPT_LENGTH_BUDGET = 5300;
92
+ export declare const LARK_PROMPT_LENGTH_BUDGET = 5900;
77
93
  /**
78
94
  * 构建飞书渠道级 system prompt(ES-M1 lean 模式核心)。
79
95
  *
@@ -6,6 +6,7 @@ import {
6
6
  bountyIMHandler,
7
7
  buildLarkChannelSystemPrompt,
8
8
  buildLarkRecommendedAction,
9
+ buildSlimRawData,
9
10
  builtInHandlers,
10
11
  extractCommandText,
11
12
  extractMetadata,
@@ -16,41 +17,44 @@ import {
16
17
  resolveLarkChannelSystemPrompt,
17
18
  timerHandler,
18
19
  wecomCliHandler
19
- } from "../../shared/@ai-setting/roy-agent-core-xf6z96qy.js";
20
+ } from "../../shared/@ai-setting/roy-agent-core-4b38m749.js";
20
21
  import"../../shared/@ai-setting/roy-agent-core-vx8zc847.js";
21
22
  import {
22
23
  cliCommandHandler
23
24
  } from "../../shared/@ai-setting/roy-agent-core-v0hf14bj.js";
24
- import"../../shared/@ai-setting/roy-agent-core-tm1mxttk.js";
25
+ import"../../shared/@ai-setting/roy-agent-core-age3qseb.js";
26
+ import"../../shared/@ai-setting/roy-agent-core-mf5p38yf.js";
25
27
  import"../../shared/@ai-setting/roy-agent-core-2stt4rp5.js";
26
- import"../../shared/@ai-setting/roy-agent-core-b31v3qpv.js";
27
- import"../../shared/@ai-setting/roy-agent-core-m3vjepzz.js";
28
- import"../../shared/@ai-setting/roy-agent-core-na18zwj0.js";
29
- import"../../shared/@ai-setting/roy-agent-core-9vxh6f8h.js";
30
- import"../../shared/@ai-setting/roy-agent-core-ezvpreqz.js";
28
+ import"../../shared/@ai-setting/roy-agent-core-k3h8t4q1.js";
29
+ import"../../shared/@ai-setting/roy-agent-core-h1e1fm9b.js";
30
+ import"../../shared/@ai-setting/roy-agent-core-c4ec7k0p.js";
31
+ import"../../shared/@ai-setting/roy-agent-core-4t3yskp8.js";
32
+ import"../../shared/@ai-setting/roy-agent-core-y7fqtzk2.js";
31
33
  import"../../shared/@ai-setting/roy-agent-core-1pg0fepg.js";
32
- import"../../shared/@ai-setting/roy-agent-core-tr3ep81v.js";
34
+ import"../../shared/@ai-setting/roy-agent-core-d6zdbgtc.js";
33
35
  import"../../shared/@ai-setting/roy-agent-core-m46fe3x4.js";
34
36
  import"../../shared/@ai-setting/roy-agent-core-4rtg69cn.js";
35
- import"../../shared/@ai-setting/roy-agent-core-d1n4jbza.js";
36
- import"../../shared/@ai-setting/roy-agent-core-7dd0s3xb.js";
37
- import"../../shared/@ai-setting/roy-agent-core-rykf7c04.js";
38
- import"../../shared/@ai-setting/roy-agent-core-c2gbt68e.js";
39
- import"../../shared/@ai-setting/roy-agent-core-1v4g0d4x.js";
40
- import"../../shared/@ai-setting/roy-agent-core-cgtq6427.js";
37
+ import"../../shared/@ai-setting/roy-agent-core-5dhvfgaw.js";
38
+ import"../../shared/@ai-setting/roy-agent-core-0n1wwndq.js";
39
+ import"../../shared/@ai-setting/roy-agent-core-418zc9ha.js";
40
+ import"../../shared/@ai-setting/roy-agent-core-m66ysky0.js";
41
+ import"../../shared/@ai-setting/roy-agent-core-9c565frx.js";
42
+ import"../../shared/@ai-setting/roy-agent-core-h83zdsrq.js";
43
+ import"../../shared/@ai-setting/roy-agent-core-rm7seqwb.js";
44
+ import"../../shared/@ai-setting/roy-agent-core-e08bvpaq.js";
41
45
  import"../../shared/@ai-setting/roy-agent-core-er070zjq.js";
42
- import"../../shared/@ai-setting/roy-agent-core-h21gngxf.js";
46
+ import"../../shared/@ai-setting/roy-agent-core-7yh5wps0.js";
43
47
  import"../../shared/@ai-setting/roy-agent-core-ntn32q7j.js";
44
48
  import"../../shared/@ai-setting/roy-agent-core-mkc3zshb.js";
45
49
  import"../../shared/@ai-setting/roy-agent-core-az13yzmc.js";
46
50
  import"../../shared/@ai-setting/roy-agent-core-m880qz3y.js";
47
51
  import"../../shared/@ai-setting/roy-agent-core-7hh0brvs.js";
48
- import"../../shared/@ai-setting/roy-agent-core-pgvcf91v.js";
49
- import"../../shared/@ai-setting/roy-agent-core-ax9e9szb.js";
50
- import"../../shared/@ai-setting/roy-agent-core-cpcd24n2.js";
51
- import"../../shared/@ai-setting/roy-agent-core-qqaak24r.js";
52
- import"../../shared/@ai-setting/roy-agent-core-7cbpmk4q.js";
53
- import"../../shared/@ai-setting/roy-agent-core-qq96p0tj.js";
52
+ import"../../shared/@ai-setting/roy-agent-core-m39v7qpx.js";
53
+ import"../../shared/@ai-setting/roy-agent-core-smf94h73.js";
54
+ import"../../shared/@ai-setting/roy-agent-core-yet36q5k.js";
55
+ import"../../shared/@ai-setting/roy-agent-core-tkpp1ba0.js";
56
+ import"../../shared/@ai-setting/roy-agent-core-p31ftgq9.js";
57
+ import"../../shared/@ai-setting/roy-agent-core-5s2t8z00.js";
54
58
  import"../../shared/@ai-setting/roy-agent-core-7f7t9wwp.js";
55
59
  import"../../shared/@ai-setting/roy-agent-core-85xyctnb.js";
56
60
  import"../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
@@ -66,6 +70,7 @@ export {
66
70
  extractCommandText,
67
71
  cliCommandHandler,
68
72
  builtInHandlers,
73
+ buildSlimRawData,
69
74
  buildLarkRecommendedAction,
70
75
  buildLarkChannelSystemPrompt,
71
76
  bountyIMHandler,
@@ -4,8 +4,8 @@ import {
4
4
  getSharedEventStore,
5
5
  resetSharedEventStore,
6
6
  setSharedEventStore
7
- } from "../../shared/@ai-setting/roy-agent-core-na18zwj0.js";
8
- import"../../shared/@ai-setting/roy-agent-core-qq96p0tj.js";
7
+ } from "../../shared/@ai-setting/roy-agent-core-4t3yskp8.js";
8
+ import"../../shared/@ai-setting/roy-agent-core-5s2t8z00.js";
9
9
  import"../../shared/@ai-setting/roy-agent-core-7f7t9wwp.js";
10
10
  import"../../shared/@ai-setting/roy-agent-core-85xyctnb.js";
11
11
  import"../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
@@ -1,7 +1,7 @@
1
1
  import"../../shared/@ai-setting/roy-agent-core-m1fgtnrc.js";
2
2
  import {
3
3
  EventSourceComponent
4
- } from "../../shared/@ai-setting/roy-agent-core-begm7ytz.js";
4
+ } from "../../shared/@ai-setting/roy-agent-core-m7d1t3db.js";
5
5
  import {
6
6
  BountyIMInstance,
7
7
  COMMAND_PREFIX,
@@ -56,7 +56,7 @@ import {
56
56
  translateCardActionToCommand,
57
57
  wecomCliHandler,
58
58
  writeFallbackModelList
59
- } from "../../shared/@ai-setting/roy-agent-core-xf6z96qy.js";
59
+ } from "../../shared/@ai-setting/roy-agent-core-4b38m749.js";
60
60
  import {
61
61
  BUILT_IN_EVENT_SOURCE_TYPES,
62
62
  BUILT_IN_EVENT_SOURCE_TYPE_LIST,
@@ -73,41 +73,44 @@ import {
73
73
  cliCommandHandler,
74
74
  parseCliSessionChatId
75
75
  } from "../../shared/@ai-setting/roy-agent-core-v0hf14bj.js";
76
- import"../../shared/@ai-setting/roy-agent-core-tm1mxttk.js";
76
+ import"../../shared/@ai-setting/roy-agent-core-age3qseb.js";
77
+ import"../../shared/@ai-setting/roy-agent-core-mf5p38yf.js";
77
78
  import"../../shared/@ai-setting/roy-agent-core-2stt4rp5.js";
78
- import"../../shared/@ai-setting/roy-agent-core-b31v3qpv.js";
79
- import"../../shared/@ai-setting/roy-agent-core-m3vjepzz.js";
79
+ import"../../shared/@ai-setting/roy-agent-core-k3h8t4q1.js";
80
+ import"../../shared/@ai-setting/roy-agent-core-h1e1fm9b.js";
81
+ import"../../shared/@ai-setting/roy-agent-core-c4ec7k0p.js";
80
82
  import {
81
83
  EventStoreImpl,
82
84
  getSharedEventStore,
83
85
  resetSharedEventStore,
84
86
  setSharedEventStore
85
- } from "../../shared/@ai-setting/roy-agent-core-na18zwj0.js";
86
- import"../../shared/@ai-setting/roy-agent-core-9vxh6f8h.js";
87
- import"../../shared/@ai-setting/roy-agent-core-ezvpreqz.js";
87
+ } from "../../shared/@ai-setting/roy-agent-core-4t3yskp8.js";
88
+ import"../../shared/@ai-setting/roy-agent-core-y7fqtzk2.js";
88
89
  import"../../shared/@ai-setting/roy-agent-core-1pg0fepg.js";
89
- import"../../shared/@ai-setting/roy-agent-core-tr3ep81v.js";
90
+ import"../../shared/@ai-setting/roy-agent-core-d6zdbgtc.js";
90
91
  import"../../shared/@ai-setting/roy-agent-core-m46fe3x4.js";
91
92
  import"../../shared/@ai-setting/roy-agent-core-4rtg69cn.js";
92
- import"../../shared/@ai-setting/roy-agent-core-d1n4jbza.js";
93
- import"../../shared/@ai-setting/roy-agent-core-7dd0s3xb.js";
94
- import"../../shared/@ai-setting/roy-agent-core-rykf7c04.js";
95
- import"../../shared/@ai-setting/roy-agent-core-c2gbt68e.js";
96
- import"../../shared/@ai-setting/roy-agent-core-1v4g0d4x.js";
97
- import"../../shared/@ai-setting/roy-agent-core-cgtq6427.js";
93
+ import"../../shared/@ai-setting/roy-agent-core-5dhvfgaw.js";
94
+ import"../../shared/@ai-setting/roy-agent-core-0n1wwndq.js";
95
+ import"../../shared/@ai-setting/roy-agent-core-418zc9ha.js";
96
+ import"../../shared/@ai-setting/roy-agent-core-m66ysky0.js";
97
+ import"../../shared/@ai-setting/roy-agent-core-9c565frx.js";
98
+ import"../../shared/@ai-setting/roy-agent-core-h83zdsrq.js";
99
+ import"../../shared/@ai-setting/roy-agent-core-rm7seqwb.js";
100
+ import"../../shared/@ai-setting/roy-agent-core-e08bvpaq.js";
98
101
  import"../../shared/@ai-setting/roy-agent-core-er070zjq.js";
99
- import"../../shared/@ai-setting/roy-agent-core-h21gngxf.js";
102
+ import"../../shared/@ai-setting/roy-agent-core-7yh5wps0.js";
100
103
  import"../../shared/@ai-setting/roy-agent-core-ntn32q7j.js";
101
104
  import"../../shared/@ai-setting/roy-agent-core-mkc3zshb.js";
102
105
  import"../../shared/@ai-setting/roy-agent-core-az13yzmc.js";
103
106
  import"../../shared/@ai-setting/roy-agent-core-m880qz3y.js";
104
107
  import"../../shared/@ai-setting/roy-agent-core-7hh0brvs.js";
105
- import"../../shared/@ai-setting/roy-agent-core-pgvcf91v.js";
106
- import"../../shared/@ai-setting/roy-agent-core-ax9e9szb.js";
107
- import"../../shared/@ai-setting/roy-agent-core-cpcd24n2.js";
108
- import"../../shared/@ai-setting/roy-agent-core-qqaak24r.js";
109
- import"../../shared/@ai-setting/roy-agent-core-7cbpmk4q.js";
110
- import"../../shared/@ai-setting/roy-agent-core-qq96p0tj.js";
108
+ import"../../shared/@ai-setting/roy-agent-core-m39v7qpx.js";
109
+ import"../../shared/@ai-setting/roy-agent-core-smf94h73.js";
110
+ import"../../shared/@ai-setting/roy-agent-core-yet36q5k.js";
111
+ import"../../shared/@ai-setting/roy-agent-core-tkpp1ba0.js";
112
+ import"../../shared/@ai-setting/roy-agent-core-p31ftgq9.js";
113
+ import"../../shared/@ai-setting/roy-agent-core-5s2t8z00.js";
111
114
  import"../../shared/@ai-setting/roy-agent-core-7f7t9wwp.js";
112
115
  import"../../shared/@ai-setting/roy-agent-core-85xyctnb.js";
113
116
  import"../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
@@ -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
  }