openclaw-event-server-plugin 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +473 -0
  3. package/config.example.json +203 -0
  4. package/dist/broadcast/index.d.ts +3 -0
  5. package/dist/broadcast/index.d.ts.map +1 -0
  6. package/dist/broadcast/index.js +19 -0
  7. package/dist/broadcast/index.js.map +1 -0
  8. package/dist/broadcast/queue.d.ts +63 -0
  9. package/dist/broadcast/queue.d.ts.map +1 -0
  10. package/dist/broadcast/queue.js +259 -0
  11. package/dist/broadcast/queue.js.map +1 -0
  12. package/dist/broadcast/webhook.d.ts +30 -0
  13. package/dist/broadcast/webhook.d.ts.map +1 -0
  14. package/dist/broadcast/webhook.js +184 -0
  15. package/dist/broadcast/webhook.js.map +1 -0
  16. package/dist/broadcast/websocketServer.d.ts +90 -0
  17. package/dist/broadcast/websocketServer.d.ts.map +1 -0
  18. package/dist/broadcast/websocketServer.js +403 -0
  19. package/dist/broadcast/websocketServer.js.map +1 -0
  20. package/dist/config/config-types.d.ts +280 -0
  21. package/dist/config/config-types.d.ts.map +1 -0
  22. package/dist/config/config-types.js +3 -0
  23. package/dist/config/config-types.js.map +1 -0
  24. package/dist/config/default-config.d.ts +3 -0
  25. package/dist/config/default-config.d.ts.map +1 -0
  26. package/dist/config/default-config.js +136 -0
  27. package/dist/config/default-config.js.map +1 -0
  28. package/dist/config/env.d.ts +6 -0
  29. package/dist/config/env.d.ts.map +1 -0
  30. package/dist/config/env.js +160 -0
  31. package/dist/config/env.js.map +1 -0
  32. package/dist/config/event-types.d.ts +5 -0
  33. package/dist/config/event-types.d.ts.map +1 -0
  34. package/dist/config/event-types.js +54 -0
  35. package/dist/config/event-types.js.map +1 -0
  36. package/dist/config/handler.d.ts +9 -0
  37. package/dist/config/handler.d.ts.map +1 -0
  38. package/dist/config/handler.js +17 -0
  39. package/dist/config/handler.js.map +1 -0
  40. package/dist/config/helpers.d.ts +5 -0
  41. package/dist/config/helpers.d.ts.map +1 -0
  42. package/dist/config/helpers.js +40 -0
  43. package/dist/config/helpers.js.map +1 -0
  44. package/dist/config/index.d.ts +3 -0
  45. package/dist/config/index.d.ts.map +1 -0
  46. package/dist/config/index.js +19 -0
  47. package/dist/config/index.js.map +1 -0
  48. package/dist/config/merge.d.ts +6 -0
  49. package/dist/config/merge.d.ts.map +1 -0
  50. package/dist/config/merge.js +108 -0
  51. package/dist/config/merge.js.map +1 -0
  52. package/dist/config/schema-hook-bridge.d.ts +594 -0
  53. package/dist/config/schema-hook-bridge.d.ts.map +1 -0
  54. package/dist/config/schema-hook-bridge.js +423 -0
  55. package/dist/config/schema-hook-bridge.js.map +1 -0
  56. package/dist/config/schema.d.ts +915 -0
  57. package/dist/config/schema.d.ts.map +1 -0
  58. package/dist/config/schema.js +323 -0
  59. package/dist/config/schema.js.map +1 -0
  60. package/dist/config/types.d.ts +9 -0
  61. package/dist/config/types.d.ts.map +1 -0
  62. package/dist/config/types.js +28 -0
  63. package/dist/config/types.js.map +1 -0
  64. package/dist/config/validate-hook-bridge.d.ts +3 -0
  65. package/dist/config/validate-hook-bridge.d.ts.map +1 -0
  66. package/dist/config/validate-hook-bridge.js +246 -0
  67. package/dist/config/validate-hook-bridge.js.map +1 -0
  68. package/dist/config/validate.d.ts +17 -0
  69. package/dist/config/validate.d.ts.map +1 -0
  70. package/dist/config/validate.js +194 -0
  71. package/dist/config/validate.js.map +1 -0
  72. package/dist/events/index.d.ts +4 -0
  73. package/dist/events/index.d.ts.map +1 -0
  74. package/dist/events/index.js +20 -0
  75. package/dist/events/index.js.map +1 -0
  76. package/dist/events/redaction.d.ts +5 -0
  77. package/dist/events/redaction.d.ts.map +1 -0
  78. package/dist/events/redaction.js +46 -0
  79. package/dist/events/redaction.js.map +1 -0
  80. package/dist/events/signing.d.ts +8 -0
  81. package/dist/events/signing.d.ts.map +1 -0
  82. package/dist/events/signing.js +35 -0
  83. package/dist/events/signing.js.map +1 -0
  84. package/dist/events/types.d.ts +125 -0
  85. package/dist/events/types.d.ts.map +1 -0
  86. package/dist/events/types.js +9 -0
  87. package/dist/events/types.js.map +1 -0
  88. package/dist/hooks/agent-hooks.d.ts +59 -0
  89. package/dist/hooks/agent-hooks.d.ts.map +1 -0
  90. package/dist/hooks/agent-hooks.js +116 -0
  91. package/dist/hooks/agent-hooks.js.map +1 -0
  92. package/dist/hooks/command-hooks.d.ts +13 -0
  93. package/dist/hooks/command-hooks.d.ts.map +1 -0
  94. package/dist/hooks/command-hooks.js +26 -0
  95. package/dist/hooks/command-hooks.js.map +1 -0
  96. package/dist/hooks/event-factory.d.ts +21 -0
  97. package/dist/hooks/event-factory.d.ts.map +1 -0
  98. package/dist/hooks/event-factory.js +31 -0
  99. package/dist/hooks/event-factory.js.map +1 -0
  100. package/dist/hooks/gateway-hooks.d.ts +14 -0
  101. package/dist/hooks/gateway-hooks.d.ts.map +1 -0
  102. package/dist/hooks/gateway-hooks.js +43 -0
  103. package/dist/hooks/gateway-hooks.js.map +1 -0
  104. package/dist/hooks/index.d.ts +10 -0
  105. package/dist/hooks/index.d.ts.map +1 -0
  106. package/dist/hooks/index.js +26 -0
  107. package/dist/hooks/index.js.map +1 -0
  108. package/dist/hooks/message-hooks.d.ts +33 -0
  109. package/dist/hooks/message-hooks.d.ts.map +1 -0
  110. package/dist/hooks/message-hooks.js +208 -0
  111. package/dist/hooks/message-hooks.js.map +1 -0
  112. package/dist/hooks/session-hooks.d.ts +89 -0
  113. package/dist/hooks/session-hooks.d.ts.map +1 -0
  114. package/dist/hooks/session-hooks.js +253 -0
  115. package/dist/hooks/session-hooks.js.map +1 -0
  116. package/dist/hooks/status-reducer.d.ts +30 -0
  117. package/dist/hooks/status-reducer.d.ts.map +1 -0
  118. package/dist/hooks/status-reducer.js +157 -0
  119. package/dist/hooks/status-reducer.js.map +1 -0
  120. package/dist/hooks/subagent-hooks.d.ts +37 -0
  121. package/dist/hooks/subagent-hooks.d.ts.map +1 -0
  122. package/dist/hooks/subagent-hooks.js +79 -0
  123. package/dist/hooks/subagent-hooks.js.map +1 -0
  124. package/dist/hooks/subagent-tracker.d.ts +33 -0
  125. package/dist/hooks/subagent-tracker.d.ts.map +1 -0
  126. package/dist/hooks/subagent-tracker.js +73 -0
  127. package/dist/hooks/subagent-tracker.js.map +1 -0
  128. package/dist/hooks/tool-hooks.d.ts +132 -0
  129. package/dist/hooks/tool-hooks.d.ts.map +1 -0
  130. package/dist/hooks/tool-hooks.js +215 -0
  131. package/dist/hooks/tool-hooks.js.map +1 -0
  132. package/dist/index.d.ts +929 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +236 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/logging/event-file-logger.d.ts +21 -0
  137. package/dist/logging/event-file-logger.d.ts.map +1 -0
  138. package/dist/logging/event-file-logger.js +167 -0
  139. package/dist/logging/event-file-logger.js.map +1 -0
  140. package/dist/logging/index.d.ts +3 -0
  141. package/dist/logging/index.d.ts.map +1 -0
  142. package/dist/logging/index.js +19 -0
  143. package/dist/logging/index.js.map +1 -0
  144. package/dist/logging/runtime-logger.d.ts +12 -0
  145. package/dist/logging/runtime-logger.d.ts.map +1 -0
  146. package/dist/logging/runtime-logger.js +45 -0
  147. package/dist/logging/runtime-logger.js.map +1 -0
  148. package/dist/runtime/hook-bridge-actions.d.ts +9 -0
  149. package/dist/runtime/hook-bridge-actions.d.ts.map +1 -0
  150. package/dist/runtime/hook-bridge-actions.js +248 -0
  151. package/dist/runtime/hook-bridge-actions.js.map +1 -0
  152. package/dist/runtime/hook-bridge-dispatch-engine.d.ts +42 -0
  153. package/dist/runtime/hook-bridge-dispatch-engine.d.ts.map +1 -0
  154. package/dist/runtime/hook-bridge-dispatch-engine.js +233 -0
  155. package/dist/runtime/hook-bridge-dispatch-engine.js.map +1 -0
  156. package/dist/runtime/hook-bridge-tool-guard.d.ts +16 -0
  157. package/dist/runtime/hook-bridge-tool-guard.d.ts.map +1 -0
  158. package/dist/runtime/hook-bridge-tool-guard.js +236 -0
  159. package/dist/runtime/hook-bridge-tool-guard.js.map +1 -0
  160. package/dist/runtime/hook-bridge-utils.d.ts +11 -0
  161. package/dist/runtime/hook-bridge-utils.d.ts.map +1 -0
  162. package/dist/runtime/hook-bridge-utils.js +116 -0
  163. package/dist/runtime/hook-bridge-utils.js.map +1 -0
  164. package/dist/runtime/hook-bridge.d.ts +33 -0
  165. package/dist/runtime/hook-bridge.d.ts.map +1 -0
  166. package/dist/runtime/hook-bridge.js +359 -0
  167. package/dist/runtime/hook-bridge.js.map +1 -0
  168. package/dist/runtime/internal-handlers.d.ts +20 -0
  169. package/dist/runtime/internal-handlers.d.ts.map +1 -0
  170. package/dist/runtime/internal-handlers.js +225 -0
  171. package/dist/runtime/internal-handlers.js.map +1 -0
  172. package/dist/runtime/register-gateway-hooks.d.ts +4 -0
  173. package/dist/runtime/register-gateway-hooks.d.ts.map +1 -0
  174. package/dist/runtime/register-gateway-hooks.js +27 -0
  175. package/dist/runtime/register-gateway-hooks.js.map +1 -0
  176. package/dist/runtime/register-session-hooks.d.ts +4 -0
  177. package/dist/runtime/register-session-hooks.d.ts.map +1 -0
  178. package/dist/runtime/register-session-hooks.js +88 -0
  179. package/dist/runtime/register-session-hooks.js.map +1 -0
  180. package/dist/runtime/register-subagent-hooks.d.ts +4 -0
  181. package/dist/runtime/register-subagent-hooks.d.ts.map +1 -0
  182. package/dist/runtime/register-subagent-hooks.js +143 -0
  183. package/dist/runtime/register-subagent-hooks.js.map +1 -0
  184. package/dist/runtime/register-tool-hooks.d.ts +4 -0
  185. package/dist/runtime/register-tool-hooks.d.ts.map +1 -0
  186. package/dist/runtime/register-tool-hooks.js +348 -0
  187. package/dist/runtime/register-tool-hooks.js.map +1 -0
  188. package/dist/runtime/runtime-events.d.ts +14 -0
  189. package/dist/runtime/runtime-events.d.ts.map +1 -0
  190. package/dist/runtime/runtime-events.js +166 -0
  191. package/dist/runtime/runtime-events.js.map +1 -0
  192. package/dist/runtime/typed-hooks.d.ts +9 -0
  193. package/dist/runtime/typed-hooks.d.ts.map +1 -0
  194. package/dist/runtime/typed-hooks.js +14 -0
  195. package/dist/runtime/typed-hooks.js.map +1 -0
  196. package/dist/runtime/types.d.ts +91 -0
  197. package/dist/runtime/types.d.ts.map +1 -0
  198. package/dist/runtime/types.js +3 -0
  199. package/dist/runtime/types.js.map +1 -0
  200. package/dist/runtime/utils.d.ts +47 -0
  201. package/dist/runtime/utils.d.ts.map +1 -0
  202. package/dist/runtime/utils.js +166 -0
  203. package/dist/runtime/utils.js.map +1 -0
  204. package/dist/tools/replay-tool-guard.d.ts +3 -0
  205. package/dist/tools/replay-tool-guard.d.ts.map +1 -0
  206. package/dist/tools/replay-tool-guard.js +96 -0
  207. package/dist/tools/replay-tool-guard.js.map +1 -0
  208. package/openclaw.plugin.json +847 -0
  209. package/package.json +63 -0
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSubagentSpawningEvent = createSubagentSpawningEvent;
4
+ exports.createSubagentSpawnedEvent = createSubagentSpawnedEvent;
5
+ exports.createSubagentEndedEvent = createSubagentEndedEvent;
6
+ exports.createSubagentIdleEvent = createSubagentIdleEvent;
7
+ const event_factory_1 = require("./event-factory");
8
+ function createSubagentSpawningEvent(context) {
9
+ return (0, event_factory_1.createCanonicalEvent)({
10
+ type: 'subagent.spawning',
11
+ eventCategory: 'subagent',
12
+ eventName: 'subagent_spawning',
13
+ source: 'plugin-hook',
14
+ agentId: context.agentId,
15
+ sessionId: context.sessionId,
16
+ sessionKey: context.sessionKey,
17
+ runId: context.runId,
18
+ data: {
19
+ childSessionKey: context.childSessionKey,
20
+ ...(context.data ?? {}),
21
+ },
22
+ });
23
+ }
24
+ function createSubagentSpawnedEvent(context) {
25
+ return (0, event_factory_1.createCanonicalEvent)({
26
+ type: 'subagent.spawned',
27
+ eventCategory: 'subagent',
28
+ eventName: 'subagent_spawned',
29
+ source: 'plugin-hook',
30
+ agentId: context.agentId,
31
+ sessionId: context.sessionId,
32
+ sessionKey: context.sessionKey,
33
+ runId: context.runId,
34
+ data: {
35
+ childSessionKey: context.childSessionKey,
36
+ ...(context.data ?? {}),
37
+ },
38
+ });
39
+ }
40
+ function createSubagentEndedEvent(context) {
41
+ return (0, event_factory_1.createCanonicalEvent)({
42
+ type: 'subagent.ended',
43
+ eventCategory: 'subagent',
44
+ eventName: 'subagent_ended',
45
+ source: 'plugin-hook',
46
+ agentId: context.agentId,
47
+ sessionId: context.sessionId,
48
+ sessionKey: context.sessionKey,
49
+ runId: context.runId,
50
+ data: {
51
+ childSessionKey: context.childSessionKey,
52
+ ...(context.data ?? {}),
53
+ },
54
+ });
55
+ }
56
+ function createSubagentIdleEvent(context) {
57
+ return (0, event_factory_1.createCanonicalEvent)({
58
+ type: 'subagent.idle',
59
+ eventCategory: 'synthetic',
60
+ eventName: 'subagent.idle',
61
+ source: 'synthetic',
62
+ agentId: context.childAgentId ?? context.parentAgentId,
63
+ sessionId: context.parentSessionId,
64
+ sessionKey: context.parentSessionKey,
65
+ runId: context.runId,
66
+ data: {
67
+ subagentKey: context.childSessionKey,
68
+ parentAgentId: context.parentAgentId,
69
+ parentSessionId: context.parentSessionId,
70
+ parentSessionKey: context.parentSessionKey,
71
+ childAgentId: context.childAgentId,
72
+ childSessionKey: context.childSessionKey,
73
+ mode: context.mode,
74
+ idleForMs: context.idleForMs,
75
+ lastActiveAt: context.lastActiveAt,
76
+ },
77
+ });
78
+ }
79
+ //# sourceMappingURL=subagent-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-hooks.js","sourceRoot":"","sources":["../../src/hooks/subagent-hooks.ts"],"names":[],"mappings":";;AAGA,kEAsBC;AAED,gEAsBC;AAED,4DAsBC;AAED,0DAgCC;AA1GD,mDAAuD;AAEvD,SAAgB,2BAA2B,CAAC,OAO3C;IACC,OAAO,IAAA,oCAAoB,EAAC;QAC1B,IAAI,EAAE,mBAAmB;QACzB,aAAa,EAAE,UAAU;QACzB,SAAS,EAAE,mBAAmB;QAC9B,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE;YACJ,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;SACxB;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,0BAA0B,CAAC,OAO1C;IACC,OAAO,IAAA,oCAAoB,EAAC;QAC1B,IAAI,EAAE,kBAAkB;QACxB,aAAa,EAAE,UAAU;QACzB,SAAS,EAAE,kBAAkB;QAC7B,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE;YACJ,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;SACxB;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,wBAAwB,CAAC,OAOxC;IACC,OAAO,IAAA,oCAAoB,EAAC;QAC1B,IAAI,EAAE,gBAAgB;QACtB,aAAa,EAAE,UAAU;QACzB,SAAS,EAAE,gBAAgB;QAC3B,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE;YACJ,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;SACxB;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,uBAAuB,CAAC,OAUvC;IACC,OAAO,IAAA,oCAAoB,EAAC;QAC1B,IAAI,EAAE,eAAe;QACrB,aAAa,EAAE,WAAW;QAC1B,SAAS,EAAE,eAAe;QAC1B,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,aAAa;QACtD,SAAS,EAAE,OAAO,CAAC,eAAe;QAClC,UAAU,EAAE,OAAO,CAAC,gBAAgB;QACpC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE;YACJ,WAAW,EAAE,OAAO,CAAC,eAAe;YACpC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,33 @@
1
+ export type SubagentRecord = {
2
+ subagentKey: string;
3
+ childSessionKey: string;
4
+ parentAgentId?: string;
5
+ parentSessionId?: string;
6
+ parentSessionKey?: string;
7
+ childAgentId?: string;
8
+ runId?: string;
9
+ mode?: string;
10
+ spawnedAt: number;
11
+ lastActiveAt: number;
12
+ idleEmittedAt?: number;
13
+ endedAt?: number;
14
+ };
15
+ export declare class SubagentTracker {
16
+ private readonly byChildSessionKey;
17
+ registerSpawn(params: {
18
+ childSessionKey: string;
19
+ parentAgentId?: string;
20
+ parentSessionId?: string;
21
+ parentSessionKey?: string;
22
+ childAgentId?: string;
23
+ runId?: string;
24
+ mode?: string;
25
+ nowMs?: number;
26
+ }): SubagentRecord;
27
+ observeActivity(childSessionKey?: string, atMs?: number): void;
28
+ markEnded(childSessionKey?: string, atMs?: number): void;
29
+ getByChildSessionKey(childSessionKey?: string): SubagentRecord | undefined;
30
+ evaluateIdleTransitions(idleAfterMs: number, nowMs?: number): SubagentRecord[];
31
+ clear(): void;
32
+ }
33
+ //# sourceMappingURL=subagent-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-tracker.d.ts","sourceRoot":"","sources":["../../src/hooks/subagent-tracker.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA0C;IAE5E,aAAa,CAAC,MAAM,EAAE;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,cAAc;IAqBlB,eAAe,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAY9D,SAAS,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAWxD,oBAAoB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAO1E,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE;IAkB9E,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SubagentTracker = void 0;
4
+ class SubagentTracker {
5
+ byChildSessionKey = new Map();
6
+ registerSpawn(params) {
7
+ const now = params.nowMs ?? Date.now();
8
+ const current = this.byChildSessionKey.get(params.childSessionKey);
9
+ const merged = {
10
+ subagentKey: params.childSessionKey,
11
+ childSessionKey: params.childSessionKey,
12
+ parentAgentId: params.parentAgentId ?? current?.parentAgentId,
13
+ parentSessionId: params.parentSessionId ?? current?.parentSessionId,
14
+ parentSessionKey: params.parentSessionKey ?? current?.parentSessionKey,
15
+ childAgentId: params.childAgentId ?? current?.childAgentId,
16
+ runId: params.runId ?? current?.runId,
17
+ mode: params.mode ?? current?.mode,
18
+ spawnedAt: current?.spawnedAt ?? now,
19
+ lastActiveAt: now,
20
+ idleEmittedAt: undefined,
21
+ endedAt: undefined,
22
+ };
23
+ this.byChildSessionKey.set(params.childSessionKey, merged);
24
+ return merged;
25
+ }
26
+ observeActivity(childSessionKey, atMs) {
27
+ if (!childSessionKey) {
28
+ return;
29
+ }
30
+ const current = this.byChildSessionKey.get(childSessionKey);
31
+ if (!current || current.endedAt) {
32
+ return;
33
+ }
34
+ current.lastActiveAt = atMs ?? Date.now();
35
+ current.idleEmittedAt = undefined;
36
+ }
37
+ markEnded(childSessionKey, atMs) {
38
+ if (!childSessionKey) {
39
+ return;
40
+ }
41
+ const current = this.byChildSessionKey.get(childSessionKey);
42
+ if (!current) {
43
+ return;
44
+ }
45
+ current.endedAt = atMs ?? Date.now();
46
+ }
47
+ getByChildSessionKey(childSessionKey) {
48
+ if (!childSessionKey) {
49
+ return undefined;
50
+ }
51
+ return this.byChildSessionKey.get(childSessionKey);
52
+ }
53
+ evaluateIdleTransitions(idleAfterMs, nowMs) {
54
+ const now = nowMs ?? Date.now();
55
+ const transitions = [];
56
+ for (const record of this.byChildSessionKey.values()) {
57
+ if (record.endedAt !== undefined || record.idleEmittedAt !== undefined) {
58
+ continue;
59
+ }
60
+ if (now - record.lastActiveAt < idleAfterMs) {
61
+ continue;
62
+ }
63
+ record.idleEmittedAt = now;
64
+ transitions.push({ ...record });
65
+ }
66
+ return transitions;
67
+ }
68
+ clear() {
69
+ this.byChildSessionKey.clear();
70
+ }
71
+ }
72
+ exports.SubagentTracker = SubagentTracker;
73
+ //# sourceMappingURL=subagent-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-tracker.js","sourceRoot":"","sources":["../../src/hooks/subagent-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Tool event hooks implementation.
3
+ */
4
+ import { ToolEvent } from '../events/types';
5
+ /**
6
+ * Create a tool.called event
7
+ */
8
+ export declare function createToolCalledEvent(context: {
9
+ toolName: string;
10
+ params?: Record<string, unknown>;
11
+ agentId?: string;
12
+ parentAgentId?: string;
13
+ subagentKey?: string;
14
+ sessionId?: string;
15
+ sessionKey?: string;
16
+ parentSessionId?: string;
17
+ parentSessionKey?: string;
18
+ runId?: string;
19
+ toolCallId?: string;
20
+ correlationId?: string;
21
+ }): ToolEvent;
22
+ /**
23
+ * Create a tool.completed event
24
+ */
25
+ export declare function createToolCompletedEvent(context: {
26
+ toolName: string;
27
+ result?: unknown;
28
+ durationMs?: number;
29
+ agentId?: string;
30
+ parentAgentId?: string;
31
+ subagentKey?: string;
32
+ sessionId?: string;
33
+ sessionKey?: string;
34
+ parentSessionId?: string;
35
+ parentSessionKey?: string;
36
+ runId?: string;
37
+ toolCallId?: string;
38
+ correlationId?: string;
39
+ }): ToolEvent;
40
+ export declare function createToolGuardEvent(context: {
41
+ type: 'tool.guard.matched' | 'tool.guard.allowed' | 'tool.guard.blocked';
42
+ toolName: string;
43
+ params?: Record<string, unknown>;
44
+ blockReason?: string;
45
+ matchedRuleId?: string;
46
+ matchedActionId?: string;
47
+ decisionSource?: string;
48
+ agentId?: string;
49
+ parentAgentId?: string;
50
+ subagentKey?: string;
51
+ sessionId?: string;
52
+ sessionKey?: string;
53
+ parentSessionId?: string;
54
+ parentSessionKey?: string;
55
+ runId?: string;
56
+ toolCallId?: string;
57
+ correlationId?: string;
58
+ }): ToolEvent;
59
+ /**
60
+ * Create a tool.error event
61
+ */
62
+ export declare function createToolErrorEvent(context: {
63
+ toolName: string;
64
+ error: string;
65
+ stackTrace?: string;
66
+ params?: Record<string, unknown>;
67
+ agentId?: string;
68
+ parentAgentId?: string;
69
+ subagentKey?: string;
70
+ sessionId?: string;
71
+ sessionKey?: string;
72
+ parentSessionId?: string;
73
+ parentSessionKey?: string;
74
+ runId?: string;
75
+ toolCallId?: string;
76
+ correlationId?: string;
77
+ }): ToolEvent;
78
+ /**
79
+ * Create a tool.result_persist event
80
+ */
81
+ export declare function createToolResultPersistEvent(context: {
82
+ toolName?: string;
83
+ toolCallId?: string;
84
+ message?: unknown;
85
+ isSynthetic?: boolean;
86
+ agentId?: string;
87
+ parentAgentId?: string;
88
+ subagentKey?: string;
89
+ sessionId?: string;
90
+ sessionKey?: string;
91
+ parentSessionId?: string;
92
+ parentSessionKey?: string;
93
+ correlationId?: string;
94
+ }): ToolEvent;
95
+ /**
96
+ * Track tool call timing and correlation.
97
+ */
98
+ export declare class ToolCallTracker {
99
+ private activeCalls;
100
+ startCall(toolName: string, params?: Record<string, unknown>, context?: {
101
+ runId?: string;
102
+ toolCallId?: string;
103
+ sessionId?: string;
104
+ sessionKey?: string;
105
+ agentId?: string;
106
+ correlationId?: string;
107
+ }): string;
108
+ endCall(callId: string): {
109
+ durationMs: number;
110
+ toolName: string;
111
+ params?: Record<string, unknown>;
112
+ runId?: string;
113
+ toolCallId?: string;
114
+ sessionId?: string;
115
+ sessionKey?: string;
116
+ agentId?: string;
117
+ correlationId?: string;
118
+ } | null;
119
+ getCall(callId: string): {
120
+ toolName: string;
121
+ params?: Record<string, unknown>;
122
+ runId?: string;
123
+ toolCallId?: string;
124
+ sessionId?: string;
125
+ sessionKey?: string;
126
+ agentId?: string;
127
+ correlationId?: string;
128
+ } | null;
129
+ getActiveCallCount(): number;
130
+ clear(): void;
131
+ }
132
+ //# sourceMappingURL=tool-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-hooks.d.ts","sourceRoot":"","sources":["../../src/hooks/tool-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ /**
3
+ * Tool event hooks implementation.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ToolCallTracker = void 0;
7
+ exports.createToolCalledEvent = createToolCalledEvent;
8
+ exports.createToolCompletedEvent = createToolCompletedEvent;
9
+ exports.createToolGuardEvent = createToolGuardEvent;
10
+ exports.createToolErrorEvent = createToolErrorEvent;
11
+ exports.createToolResultPersistEvent = createToolResultPersistEvent;
12
+ const event_factory_1 = require("./event-factory");
13
+ const node_crypto_1 = require("node:crypto");
14
+ /**
15
+ * Create a tool.called event
16
+ */
17
+ function createToolCalledEvent(context) {
18
+ return (0, event_factory_1.createCanonicalEvent)({
19
+ type: 'tool.called',
20
+ eventCategory: 'tool',
21
+ eventName: 'before_tool_call',
22
+ source: 'plugin-hook',
23
+ agentId: context.agentId,
24
+ sessionId: context.sessionId,
25
+ sessionKey: context.sessionKey,
26
+ runId: context.runId,
27
+ toolCallId: context.toolCallId,
28
+ correlationId: context.correlationId,
29
+ data: {
30
+ toolName: context.toolName,
31
+ params: context.params,
32
+ agentId: context.agentId,
33
+ parentAgentId: context.parentAgentId,
34
+ subagentKey: context.subagentKey,
35
+ parentSessionId: context.parentSessionId,
36
+ parentSessionKey: context.parentSessionKey,
37
+ },
38
+ });
39
+ }
40
+ /**
41
+ * Create a tool.completed event
42
+ */
43
+ function createToolCompletedEvent(context) {
44
+ return (0, event_factory_1.createCanonicalEvent)({
45
+ type: 'tool.completed',
46
+ eventCategory: 'tool',
47
+ eventName: 'after_tool_call',
48
+ source: 'plugin-hook',
49
+ agentId: context.agentId,
50
+ sessionId: context.sessionId,
51
+ sessionKey: context.sessionKey,
52
+ runId: context.runId,
53
+ toolCallId: context.toolCallId,
54
+ correlationId: context.correlationId,
55
+ result: context.result,
56
+ data: {
57
+ toolName: context.toolName,
58
+ durationMs: context.durationMs,
59
+ agentId: context.agentId,
60
+ parentAgentId: context.parentAgentId,
61
+ subagentKey: context.subagentKey,
62
+ parentSessionId: context.parentSessionId,
63
+ parentSessionKey: context.parentSessionKey,
64
+ result: context.result,
65
+ },
66
+ });
67
+ }
68
+ function createToolGuardEvent(context) {
69
+ return (0, event_factory_1.createCanonicalEvent)({
70
+ type: context.type,
71
+ eventCategory: 'tool',
72
+ eventName: 'before_tool_call',
73
+ source: 'plugin-hook',
74
+ agentId: context.agentId,
75
+ sessionId: context.sessionId,
76
+ sessionKey: context.sessionKey,
77
+ runId: context.runId,
78
+ toolCallId: context.toolCallId,
79
+ correlationId: context.correlationId,
80
+ data: {
81
+ toolName: context.toolName,
82
+ params: context.params,
83
+ blockReason: context.blockReason,
84
+ matchedRuleId: context.matchedRuleId,
85
+ matchedActionId: context.matchedActionId,
86
+ decisionSource: context.decisionSource,
87
+ agentId: context.agentId,
88
+ parentAgentId: context.parentAgentId,
89
+ subagentKey: context.subagentKey,
90
+ parentSessionId: context.parentSessionId,
91
+ parentSessionKey: context.parentSessionKey,
92
+ },
93
+ });
94
+ }
95
+ /**
96
+ * Create a tool.error event
97
+ */
98
+ function createToolErrorEvent(context) {
99
+ return (0, event_factory_1.createCanonicalEvent)({
100
+ type: 'tool.error',
101
+ eventCategory: 'tool',
102
+ eventName: 'after_tool_call',
103
+ source: 'plugin-hook',
104
+ agentId: context.agentId,
105
+ sessionId: context.sessionId,
106
+ sessionKey: context.sessionKey,
107
+ runId: context.runId,
108
+ toolCallId: context.toolCallId,
109
+ correlationId: context.correlationId,
110
+ error: {
111
+ message: context.error,
112
+ stack: context.stackTrace,
113
+ kind: 'tool',
114
+ },
115
+ data: {
116
+ toolName: context.toolName,
117
+ params: context.params,
118
+ agentId: context.agentId,
119
+ parentAgentId: context.parentAgentId,
120
+ subagentKey: context.subagentKey,
121
+ parentSessionId: context.parentSessionId,
122
+ parentSessionKey: context.parentSessionKey,
123
+ error: context.error,
124
+ stackTrace: context.stackTrace,
125
+ },
126
+ });
127
+ }
128
+ /**
129
+ * Create a tool.result_persist event
130
+ */
131
+ function createToolResultPersistEvent(context) {
132
+ return (0, event_factory_1.createCanonicalEvent)({
133
+ type: 'tool.result_persist',
134
+ eventCategory: 'tool',
135
+ eventName: 'tool_result_persist',
136
+ source: 'plugin-hook',
137
+ agentId: context.agentId,
138
+ sessionId: context.sessionId,
139
+ sessionKey: context.sessionKey,
140
+ toolCallId: context.toolCallId,
141
+ correlationId: context.correlationId,
142
+ data: {
143
+ toolName: context.toolName,
144
+ toolCallId: context.toolCallId,
145
+ message: context.message,
146
+ isSynthetic: context.isSynthetic,
147
+ agentId: context.agentId,
148
+ parentAgentId: context.parentAgentId,
149
+ subagentKey: context.subagentKey,
150
+ parentSessionId: context.parentSessionId,
151
+ parentSessionKey: context.parentSessionKey,
152
+ },
153
+ });
154
+ }
155
+ /**
156
+ * Track tool call timing and correlation.
157
+ */
158
+ class ToolCallTracker {
159
+ activeCalls = new Map();
160
+ startCall(toolName, params, context) {
161
+ if (!toolName || typeof toolName !== 'string') {
162
+ throw new Error('Tool name must be a non-empty string');
163
+ }
164
+ const callId = context?.toolCallId ?? (0, node_crypto_1.randomUUID)();
165
+ this.activeCalls.set(callId, {
166
+ startTime: Date.now(),
167
+ toolName,
168
+ params,
169
+ ...context,
170
+ });
171
+ return callId;
172
+ }
173
+ endCall(callId) {
174
+ const call = this.activeCalls.get(callId);
175
+ if (!call) {
176
+ return null;
177
+ }
178
+ this.activeCalls.delete(callId);
179
+ return {
180
+ durationMs: Date.now() - call.startTime,
181
+ toolName: call.toolName,
182
+ params: call.params,
183
+ runId: call.runId,
184
+ toolCallId: call.toolCallId,
185
+ sessionId: call.sessionId,
186
+ sessionKey: call.sessionKey,
187
+ agentId: call.agentId,
188
+ correlationId: call.correlationId,
189
+ };
190
+ }
191
+ getCall(callId) {
192
+ const call = this.activeCalls.get(callId);
193
+ if (!call) {
194
+ return null;
195
+ }
196
+ return {
197
+ toolName: call.toolName,
198
+ params: call.params,
199
+ runId: call.runId,
200
+ toolCallId: call.toolCallId,
201
+ sessionId: call.sessionId,
202
+ sessionKey: call.sessionKey,
203
+ agentId: call.agentId,
204
+ correlationId: call.correlationId,
205
+ };
206
+ }
207
+ getActiveCallCount() {
208
+ return this.activeCalls.size;
209
+ }
210
+ clear() {
211
+ this.activeCalls.clear();
212
+ }
213
+ }
214
+ exports.ToolCallTracker = ToolCallTracker;
215
+ //# sourceMappingURL=tool-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-hooks.js","sourceRoot":"","sources":["../../src/hooks/tool-hooks.ts"],"names":[],"mappings":"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"}