recoder-a2a-sdk 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 (59) hide show
  1. package/dist/audit-helpers.d.mts +209 -0
  2. package/dist/audit-helpers.d.ts +209 -0
  3. package/dist/audit-helpers.js +905 -0
  4. package/dist/audit-helpers.js.map +1 -0
  5. package/dist/audit-helpers.mjs +34 -0
  6. package/dist/audit-helpers.mjs.map +1 -0
  7. package/dist/chunk-7GY5FFBI.mjs +117 -0
  8. package/dist/chunk-7GY5FFBI.mjs.map +1 -0
  9. package/dist/chunk-AGD6G5N6.mjs +141 -0
  10. package/dist/chunk-AGD6G5N6.mjs.map +1 -0
  11. package/dist/chunk-BWCRJDUB.mjs +357 -0
  12. package/dist/chunk-BWCRJDUB.mjs.map +1 -0
  13. package/dist/chunk-DPFH2JIC.mjs +141 -0
  14. package/dist/chunk-DPFH2JIC.mjs.map +1 -0
  15. package/dist/chunk-EP2GHC3R.mjs +116 -0
  16. package/dist/chunk-EP2GHC3R.mjs.map +1 -0
  17. package/dist/chunk-JOZQDX7A.mjs +359 -0
  18. package/dist/chunk-JOZQDX7A.mjs.map +1 -0
  19. package/dist/chunk-MAA7JZ2Q.mjs +142 -0
  20. package/dist/chunk-MAA7JZ2Q.mjs.map +1 -0
  21. package/dist/chunk-QVOOBAUA.mjs +140 -0
  22. package/dist/chunk-QVOOBAUA.mjs.map +1 -0
  23. package/dist/chunk-T5GUBIFZ.mjs +358 -0
  24. package/dist/chunk-T5GUBIFZ.mjs.map +1 -0
  25. package/dist/chunk-WLNW7Y2H.mjs +636 -0
  26. package/dist/chunk-WLNW7Y2H.mjs.map +1 -0
  27. package/dist/chunk-XSELW6DU.mjs +356 -0
  28. package/dist/chunk-XSELW6DU.mjs.map +1 -0
  29. package/dist/envelope-builders.d.mts +189 -0
  30. package/dist/envelope-builders.d.ts +189 -0
  31. package/dist/envelope-builders.js +652 -0
  32. package/dist/envelope-builders.js.map +1 -0
  33. package/dist/envelope-builders.mjs +20 -0
  34. package/dist/envelope-builders.mjs.map +1 -0
  35. package/dist/error-mapping.d.mts +132 -0
  36. package/dist/error-mapping.d.ts +132 -0
  37. package/dist/error-mapping.js +642 -0
  38. package/dist/error-mapping.js.map +1 -0
  39. package/dist/error-mapping.mjs +16 -0
  40. package/dist/error-mapping.mjs.map +1 -0
  41. package/dist/index.d.mts +7 -0
  42. package/dist/index.d.ts +7 -0
  43. package/dist/index.js +1798 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/index.mjs +153 -0
  46. package/dist/index.mjs.map +1 -0
  47. package/dist/state-mapping.d.mts +139 -0
  48. package/dist/state-mapping.d.ts +139 -0
  49. package/dist/state-mapping.js +641 -0
  50. package/dist/state-mapping.js.map +1 -0
  51. package/dist/state-mapping.mjs +28 -0
  52. package/dist/state-mapping.mjs.map +1 -0
  53. package/dist/validation.d.mts +117 -0
  54. package/dist/validation.d.ts +117 -0
  55. package/dist/validation.js +850 -0
  56. package/dist/validation.js.map +1 -0
  57. package/dist/validation.mjs +22 -0
  58. package/dist/validation.mjs.map +1 -0
  59. package/package.json +18 -0
@@ -0,0 +1,358 @@
1
+ // src/audit-helpers.ts
2
+ import {
3
+ AuditEventTypeEnum,
4
+ AuditActorKindEnum,
5
+ AuditTargetKindEnum,
6
+ AuditSeverityEnum,
7
+ createAuditEvent
8
+ } from "@recoder/shared/a2a/schemas";
9
+ function agentActor(agentId, platform, name) {
10
+ return {
11
+ kind: AuditActorKindEnum.Agent,
12
+ id: agentId,
13
+ platform,
14
+ name
15
+ };
16
+ }
17
+ function connectorActor(connectorId, platform, name) {
18
+ return {
19
+ kind: AuditActorKindEnum.Connector,
20
+ id: connectorId,
21
+ platform,
22
+ name
23
+ };
24
+ }
25
+ function systemActor(systemId = "control-plane") {
26
+ return {
27
+ kind: AuditActorKindEnum.System,
28
+ id: systemId,
29
+ name: "A2A Control Plane"
30
+ };
31
+ }
32
+ function taskTarget(taskId) {
33
+ return {
34
+ kind: AuditTargetKindEnum.Task,
35
+ id: taskId
36
+ };
37
+ }
38
+ function connectorTarget(connectorId, name) {
39
+ return {
40
+ kind: AuditTargetKindEnum.Connector,
41
+ id: connectorId,
42
+ name
43
+ };
44
+ }
45
+ function emitTaskSubmitted(input) {
46
+ return createAuditEvent({
47
+ id: input.id,
48
+ event_type: AuditEventTypeEnum.TaskSubmitted,
49
+ severity: AuditSeverityEnum.Info,
50
+ actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),
51
+ target: taskTarget(input.task_id),
52
+ trace_id: input.trace_id,
53
+ workspace_id: input.workspace_id,
54
+ thread_id: input.thread_id,
55
+ task_id: input.task_id,
56
+ parent_event_id: input.parent_event_id,
57
+ metadata: input.metadata,
58
+ tags: input.tags,
59
+ now: input.now
60
+ });
61
+ }
62
+ function emitTaskStarted(input) {
63
+ return createAuditEvent({
64
+ id: input.id,
65
+ event_type: AuditEventTypeEnum.TaskStarted,
66
+ severity: AuditSeverityEnum.Info,
67
+ actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),
68
+ target: taskTarget(input.task_id),
69
+ trace_id: input.trace_id,
70
+ workspace_id: input.workspace_id,
71
+ thread_id: input.thread_id,
72
+ task_id: input.task_id,
73
+ parent_event_id: input.parent_event_id,
74
+ metadata: input.metadata,
75
+ tags: input.tags,
76
+ now: input.now
77
+ });
78
+ }
79
+ function emitTaskProgress(input) {
80
+ const metadata = { ...input.metadata };
81
+ if (input.progress_pct !== void 0) {
82
+ metadata.progress_pct = input.progress_pct;
83
+ }
84
+ return createAuditEvent({
85
+ id: input.id,
86
+ event_type: AuditEventTypeEnum.TaskProgress,
87
+ severity: AuditSeverityEnum.Info,
88
+ actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),
89
+ target: taskTarget(input.task_id),
90
+ trace_id: input.trace_id,
91
+ workspace_id: input.workspace_id,
92
+ thread_id: input.thread_id,
93
+ task_id: input.task_id,
94
+ parent_event_id: input.parent_event_id,
95
+ metadata,
96
+ tags: input.tags,
97
+ now: input.now
98
+ });
99
+ }
100
+ function emitTaskInputRequired(input) {
101
+ return createAuditEvent({
102
+ id: input.id,
103
+ event_type: AuditEventTypeEnum.TaskInputRequired,
104
+ severity: AuditSeverityEnum.Info,
105
+ actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),
106
+ target: taskTarget(input.task_id),
107
+ trace_id: input.trace_id,
108
+ workspace_id: input.workspace_id,
109
+ thread_id: input.thread_id,
110
+ task_id: input.task_id,
111
+ parent_event_id: input.parent_event_id,
112
+ metadata: input.metadata,
113
+ tags: input.tags,
114
+ now: input.now
115
+ });
116
+ }
117
+ function emitTaskCompleted(input) {
118
+ return createAuditEvent({
119
+ id: input.id,
120
+ event_type: AuditEventTypeEnum.TaskCompleted,
121
+ severity: AuditSeverityEnum.Info,
122
+ actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),
123
+ target: taskTarget(input.task_id),
124
+ trace_id: input.trace_id,
125
+ workspace_id: input.workspace_id,
126
+ thread_id: input.thread_id,
127
+ task_id: input.task_id,
128
+ parent_event_id: input.parent_event_id,
129
+ duration_ms: input.duration_ms,
130
+ metadata: input.metadata,
131
+ tags: input.tags,
132
+ now: input.now
133
+ });
134
+ }
135
+ function emitTaskFailed(input) {
136
+ const metadata = { ...input.metadata };
137
+ if (input.error_code) metadata.error_code = input.error_code;
138
+ if (input.error_message) metadata.error_message = input.error_message;
139
+ return createAuditEvent({
140
+ id: input.id,
141
+ event_type: AuditEventTypeEnum.TaskFailed,
142
+ severity: AuditSeverityEnum.Error,
143
+ actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),
144
+ target: taskTarget(input.task_id),
145
+ trace_id: input.trace_id,
146
+ workspace_id: input.workspace_id,
147
+ thread_id: input.thread_id,
148
+ task_id: input.task_id,
149
+ parent_event_id: input.parent_event_id,
150
+ duration_ms: input.duration_ms,
151
+ metadata,
152
+ tags: input.tags,
153
+ now: input.now
154
+ });
155
+ }
156
+ function emitTaskCancelled(input) {
157
+ const metadata = { ...input.metadata };
158
+ if (input.reason) metadata.cancellation_reason = input.reason;
159
+ return createAuditEvent({
160
+ id: input.id,
161
+ event_type: AuditEventTypeEnum.TaskCancelled,
162
+ severity: AuditSeverityEnum.Info,
163
+ actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),
164
+ target: taskTarget(input.task_id),
165
+ trace_id: input.trace_id,
166
+ workspace_id: input.workspace_id,
167
+ thread_id: input.thread_id,
168
+ task_id: input.task_id,
169
+ parent_event_id: input.parent_event_id,
170
+ metadata,
171
+ tags: input.tags,
172
+ now: input.now
173
+ });
174
+ }
175
+ function emitConnectorAttached(input) {
176
+ return createAuditEvent({
177
+ id: input.id,
178
+ event_type: AuditEventTypeEnum.ConnectorAttached,
179
+ severity: AuditSeverityEnum.Info,
180
+ actor: systemActor(),
181
+ target: connectorTarget(input.connector_id, input.connector_name),
182
+ trace_id: input.trace_id,
183
+ workspace_id: input.workspace_id,
184
+ thread_id: input.thread_id,
185
+ task_id: input.task_id,
186
+ parent_event_id: input.parent_event_id,
187
+ metadata: {
188
+ ...input.metadata,
189
+ connector_platform: input.connector_platform
190
+ },
191
+ tags: input.tags,
192
+ now: input.now
193
+ });
194
+ }
195
+ function emitConnectorHealth(input) {
196
+ return createAuditEvent({
197
+ id: input.id,
198
+ event_type: AuditEventTypeEnum.ConnectorHealth,
199
+ severity: input.healthy ? AuditSeverityEnum.Info : AuditSeverityEnum.Warning,
200
+ actor: connectorActor(input.connector_id, input.connector_platform, input.connector_name),
201
+ target: connectorTarget(input.connector_id, input.connector_name),
202
+ trace_id: input.trace_id,
203
+ workspace_id: input.workspace_id,
204
+ thread_id: input.thread_id,
205
+ task_id: input.task_id,
206
+ parent_event_id: input.parent_event_id,
207
+ metadata: {
208
+ ...input.metadata,
209
+ healthy: input.healthy,
210
+ ...input.latency_ms !== void 0 ? { latency_ms: input.latency_ms } : {}
211
+ },
212
+ tags: input.tags,
213
+ now: input.now
214
+ });
215
+ }
216
+ function emitConnectorError(input) {
217
+ return createAuditEvent({
218
+ id: input.id,
219
+ event_type: AuditEventTypeEnum.ConnectorError,
220
+ severity: AuditSeverityEnum.Error,
221
+ actor: connectorActor(input.connector_id, input.connector_platform, input.connector_name),
222
+ target: connectorTarget(input.connector_id, input.connector_name),
223
+ trace_id: input.trace_id,
224
+ workspace_id: input.workspace_id,
225
+ thread_id: input.thread_id,
226
+ task_id: input.task_id,
227
+ parent_event_id: input.parent_event_id,
228
+ metadata: {
229
+ ...input.metadata,
230
+ ...input.error_code ? { error_code: input.error_code } : {},
231
+ error_message: input.error_message
232
+ },
233
+ tags: input.tags,
234
+ now: input.now
235
+ });
236
+ }
237
+ function emitPolicyChecked(input) {
238
+ const policyContext = {
239
+ action: input.action,
240
+ rule: input.rule,
241
+ approved: input.approved,
242
+ reason: input.reason,
243
+ agent_id: input.agent_id
244
+ };
245
+ return createAuditEvent({
246
+ id: input.id,
247
+ event_type: AuditEventTypeEnum.PolicyChecked,
248
+ severity: AuditSeverityEnum.Info,
249
+ actor: systemActor("policy-engine"),
250
+ target: taskTarget(input.task_id),
251
+ trace_id: input.trace_id,
252
+ workspace_id: input.workspace_id,
253
+ thread_id: input.thread_id,
254
+ task_id: input.task_id,
255
+ parent_event_id: input.parent_event_id,
256
+ duration_ms: input.duration_ms,
257
+ policy: policyContext,
258
+ metadata: input.metadata,
259
+ tags: input.tags,
260
+ now: input.now
261
+ });
262
+ }
263
+ function emitPolicyApproved(input) {
264
+ return createAuditEvent({
265
+ id: input.id,
266
+ event_type: AuditEventTypeEnum.PolicyApproved,
267
+ severity: AuditSeverityEnum.Info,
268
+ actor: systemActor("policy-engine"),
269
+ target: taskTarget(input.task_id),
270
+ trace_id: input.trace_id,
271
+ workspace_id: input.workspace_id,
272
+ thread_id: input.thread_id,
273
+ task_id: input.task_id,
274
+ parent_event_id: input.parent_event_id,
275
+ duration_ms: input.duration_ms,
276
+ policy: {
277
+ action: input.action,
278
+ rule: input.rule,
279
+ approved: true,
280
+ reason: input.reason,
281
+ agent_id: input.agent_id
282
+ },
283
+ metadata: input.metadata,
284
+ tags: input.tags,
285
+ now: input.now
286
+ });
287
+ }
288
+ function emitPolicyDenied(input) {
289
+ return createAuditEvent({
290
+ id: input.id,
291
+ event_type: AuditEventTypeEnum.PolicyDenied,
292
+ severity: AuditSeverityEnum.Warning,
293
+ actor: systemActor("policy-engine"),
294
+ target: taskTarget(input.task_id),
295
+ trace_id: input.trace_id,
296
+ workspace_id: input.workspace_id,
297
+ thread_id: input.thread_id,
298
+ task_id: input.task_id,
299
+ parent_event_id: input.parent_event_id,
300
+ duration_ms: input.duration_ms,
301
+ policy: {
302
+ action: input.action,
303
+ rule: input.rule,
304
+ approved: false,
305
+ reason: input.reason,
306
+ agent_id: input.agent_id
307
+ },
308
+ metadata: input.metadata,
309
+ tags: input.tags,
310
+ now: input.now
311
+ });
312
+ }
313
+ var STATE_TO_EVENT_TYPE = {
314
+ submitted: AuditEventTypeEnum.TaskSubmitted,
315
+ working: AuditEventTypeEnum.TaskStarted,
316
+ "input-required": AuditEventTypeEnum.TaskInputRequired,
317
+ completed: AuditEventTypeEnum.TaskCompleted,
318
+ failed: AuditEventTypeEnum.TaskFailed,
319
+ cancelled: AuditEventTypeEnum.TaskCancelled
320
+ };
321
+ function emitAuditForTransition(input, newState) {
322
+ const eventType = STATE_TO_EVENT_TYPE[newState] ?? AuditEventTypeEnum.TaskProgress;
323
+ const severity = newState === "failed" ? AuditSeverityEnum.Error : newState === "cancelled" ? AuditSeverityEnum.Warning : AuditSeverityEnum.Info;
324
+ return createAuditEvent({
325
+ id: input.id,
326
+ event_type: eventType,
327
+ severity,
328
+ actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),
329
+ target: taskTarget(input.task_id),
330
+ trace_id: input.trace_id,
331
+ workspace_id: input.workspace_id,
332
+ thread_id: input.thread_id,
333
+ task_id: input.task_id,
334
+ parent_event_id: input.parent_event_id,
335
+ duration_ms: input.duration_ms,
336
+ metadata: input.metadata,
337
+ tags: input.tags,
338
+ now: input.now
339
+ });
340
+ }
341
+
342
+ export {
343
+ emitTaskSubmitted,
344
+ emitTaskStarted,
345
+ emitTaskProgress,
346
+ emitTaskInputRequired,
347
+ emitTaskCompleted,
348
+ emitTaskFailed,
349
+ emitTaskCancelled,
350
+ emitConnectorAttached,
351
+ emitConnectorHealth,
352
+ emitConnectorError,
353
+ emitPolicyChecked,
354
+ emitPolicyApproved,
355
+ emitPolicyDenied,
356
+ emitAuditForTransition
357
+ };
358
+ //# sourceMappingURL=chunk-T5GUBIFZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/audit-helpers.ts"],"sourcesContent":["/**\n * @module audit-helpers\n *\n * High-level audit event emitter helpers for common A2A operations.\n *\n * Instead of manually constructing `CreateAuditEventInput` objects for every\n * lifecycle event, adapter code can call these type-safe helper functions\n * which pre-fill the `event_type`, `actor`, `target`, and `severity` fields\n * for the most common scenarios.\n *\n * All helpers return an `AuditEvent` (not a side-effecting \"emit\"). The\n * caller is responsible for persisting or publishing the event through\n * the audit-log service transport layer.\n *\n * @example\n * ```ts\n * import { emitTaskSubmitted, emitConnectorInvoked } from '@recoder/a2a-sdk/audit-helpers';\n *\n * const evt = emitTaskSubmitted({\n * id: 'evt_01',\n * task_id: 'task_01',\n * workspace_id: 'ws_abc',\n * trace_id: '4bf92f3577b34da6a3ce929d0e0e4736',\n * actor_agent_id: 'agent-pm',\n * actor_platform: 'recoder_pm',\n * });\n * await auditLogService.persist(evt);\n * ```\n */\n\nimport {\n type AuditEvent,\n type AuditActor,\n type AuditTarget,\n type AuditSeverity,\n type AuditPolicyContext,\n AuditEventTypeEnum,\n AuditActorKindEnum,\n AuditTargetKindEnum,\n AuditSeverityEnum,\n createAuditEvent,\n} from '@recoder/shared/a2a/schemas';\n\nimport type { RecoderAgentPlatform } from '@recoder/shared/a2a';\n\n// ---------------------------------------------------------------------------\n// Common input base\n// ---------------------------------------------------------------------------\n\n/**\n * Common fields required by all audit event helpers.\n */\nexport interface AuditEventBase {\n /** Unique event ID. */\n id: string;\n /** Workspace ID. */\n workspace_id: string;\n /** Trace ID for correlation with the originating TaskEnvelope. */\n trace_id: string;\n /** Optional thread ID. */\n thread_id?: string;\n /** Optional parent event ID. */\n parent_event_id?: string;\n /** Optional additional metadata. */\n metadata?: Record<string, unknown>;\n /** Optional tags. */\n tags?: string[];\n /** Override the timestamp (defaults to now). */\n now?: string;\n}\n\n/**\n * Fields for task-scoped audit events.\n */\nexport interface TaskAuditEventInput extends AuditEventBase {\n /** The task ID that this event is about. */\n task_id: string;\n /** The actor agent ID. */\n actor_agent_id: string;\n /** The actor's platform. */\n actor_platform: RecoderAgentPlatform;\n /** Optional actor display name. */\n actor_name?: string;\n}\n\n/**\n * Fields for connector-scoped audit events.\n */\nexport interface ConnectorAuditEventInput extends AuditEventBase {\n /** The connector ID. */\n connector_id: string;\n /** The connector platform. */\n connector_platform: RecoderAgentPlatform;\n /** Optional task ID. */\n task_id?: string;\n /** Optional connector display name. */\n connector_name?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\nfunction agentActor(\n agentId: string,\n platform: RecoderAgentPlatform,\n name?: string,\n): AuditActor {\n return {\n kind: AuditActorKindEnum.Agent,\n id: agentId,\n platform,\n name,\n };\n}\n\nfunction connectorActor(\n connectorId: string,\n platform: RecoderAgentPlatform,\n name?: string,\n): AuditActor {\n return {\n kind: AuditActorKindEnum.Connector,\n id: connectorId,\n platform,\n name,\n };\n}\n\nfunction systemActor(systemId: string = 'control-plane'): AuditActor {\n return {\n kind: AuditActorKindEnum.System,\n id: systemId,\n name: 'A2A Control Plane',\n };\n}\n\nfunction taskTarget(taskId: string): AuditTarget {\n return {\n kind: AuditTargetKindEnum.Task,\n id: taskId,\n };\n}\n\nfunction connectorTarget(\n connectorId: string,\n name?: string,\n): AuditTarget {\n return {\n kind: AuditTargetKindEnum.Connector,\n id: connectorId,\n name,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Task lifecycle events\n// ---------------------------------------------------------------------------\n\n/**\n * Emit a `task.submitted` audit event.\n *\n * Call this when a new task envelope is created and submitted to the\n * control plane.\n */\nexport function emitTaskSubmitted(input: TaskAuditEventInput): AuditEvent {\n return createAuditEvent({\n id: input.id,\n event_type: AuditEventTypeEnum.TaskSubmitted,\n severity: AuditSeverityEnum.Info,\n actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),\n target: taskTarget(input.task_id),\n trace_id: input.trace_id,\n workspace_id: input.workspace_id,\n thread_id: input.thread_id,\n task_id: input.task_id,\n parent_event_id: input.parent_event_id,\n metadata: input.metadata,\n tags: input.tags,\n now: input.now,\n });\n}\n\n/**\n * Emit a `task.started` audit event.\n *\n * Call this when a task transitions from `submitted` to `working`.\n */\nexport function emitTaskStarted(input: TaskAuditEventInput): AuditEvent {\n return createAuditEvent({\n id: input.id,\n event_type: AuditEventTypeEnum.TaskStarted,\n severity: AuditSeverityEnum.Info,\n actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),\n target: taskTarget(input.task_id),\n trace_id: input.trace_id,\n workspace_id: input.workspace_id,\n thread_id: input.thread_id,\n task_id: input.task_id,\n parent_event_id: input.parent_event_id,\n metadata: input.metadata,\n tags: input.tags,\n now: input.now,\n });\n}\n\n/**\n * Emit a `task.progress` audit event.\n *\n * Call this for intermediate progress updates during task execution.\n */\nexport function emitTaskProgress(\n input: TaskAuditEventInput & { progress_pct?: number },\n): AuditEvent {\n const metadata = { ...input.metadata };\n if (input.progress_pct !== undefined) {\n metadata.progress_pct = input.progress_pct;\n }\n\n return createAuditEvent({\n id: input.id,\n event_type: AuditEventTypeEnum.TaskProgress,\n severity: AuditSeverityEnum.Info,\n actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),\n target: taskTarget(input.task_id),\n trace_id: input.trace_id,\n workspace_id: input.workspace_id,\n thread_id: input.thread_id,\n task_id: input.task_id,\n parent_event_id: input.parent_event_id,\n metadata,\n tags: input.tags,\n now: input.now,\n });\n}\n\n/**\n * Emit a `task.input_required` audit event.\n *\n * Call this when the assignee agent needs additional input.\n */\nexport function emitTaskInputRequired(input: TaskAuditEventInput): AuditEvent {\n return createAuditEvent({\n id: input.id,\n event_type: AuditEventTypeEnum.TaskInputRequired,\n severity: AuditSeverityEnum.Info,\n actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),\n target: taskTarget(input.task_id),\n trace_id: input.trace_id,\n workspace_id: input.workspace_id,\n thread_id: input.thread_id,\n task_id: input.task_id,\n parent_event_id: input.parent_event_id,\n metadata: input.metadata,\n tags: input.tags,\n now: input.now,\n });\n}\n\n/**\n * Emit a `task.completed` audit event.\n *\n * Call this when a task reaches the `completed` terminal state.\n */\nexport function emitTaskCompleted(\n input: TaskAuditEventInput & { duration_ms?: number },\n): AuditEvent {\n return createAuditEvent({\n id: input.id,\n event_type: AuditEventTypeEnum.TaskCompleted,\n severity: AuditSeverityEnum.Info,\n actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),\n target: taskTarget(input.task_id),\n trace_id: input.trace_id,\n workspace_id: input.workspace_id,\n thread_id: input.thread_id,\n task_id: input.task_id,\n parent_event_id: input.parent_event_id,\n duration_ms: input.duration_ms,\n metadata: input.metadata,\n tags: input.tags,\n now: input.now,\n });\n}\n\n/**\n * Emit a `task.failed` audit event.\n *\n * Call this when a task reaches the `failed` terminal state.\n */\nexport function emitTaskFailed(\n input: TaskAuditEventInput & {\n error_code?: string;\n error_message?: string;\n duration_ms?: number;\n },\n): AuditEvent {\n const metadata: Record<string, unknown> = { ...input.metadata };\n if (input.error_code) metadata.error_code = input.error_code;\n if (input.error_message) metadata.error_message = input.error_message;\n\n return createAuditEvent({\n id: input.id,\n event_type: AuditEventTypeEnum.TaskFailed,\n severity: AuditSeverityEnum.Error,\n actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),\n target: taskTarget(input.task_id),\n trace_id: input.trace_id,\n workspace_id: input.workspace_id,\n thread_id: input.thread_id,\n task_id: input.task_id,\n parent_event_id: input.parent_event_id,\n duration_ms: input.duration_ms,\n metadata,\n tags: input.tags,\n now: input.now,\n });\n}\n\n/**\n * Emit a `task.cancelled` audit event.\n *\n * Call this when a task is explicitly cancelled.\n */\nexport function emitTaskCancelled(\n input: TaskAuditEventInput & { reason?: string },\n): AuditEvent {\n const metadata: Record<string, unknown> = { ...input.metadata };\n if (input.reason) metadata.cancellation_reason = input.reason;\n\n return createAuditEvent({\n id: input.id,\n event_type: AuditEventTypeEnum.TaskCancelled,\n severity: AuditSeverityEnum.Info,\n actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),\n target: taskTarget(input.task_id),\n trace_id: input.trace_id,\n workspace_id: input.workspace_id,\n thread_id: input.thread_id,\n task_id: input.task_id,\n parent_event_id: input.parent_event_id,\n metadata,\n tags: input.tags,\n now: input.now,\n });\n}\n\n// ---------------------------------------------------------------------------\n// Connector events\n// ---------------------------------------------------------------------------\n\n/**\n * Emit a `connector.attached` audit event.\n *\n * Call this when a connector is attached to an agent for task execution.\n */\nexport function emitConnectorAttached(input: ConnectorAuditEventInput): AuditEvent {\n return createAuditEvent({\n id: input.id,\n event_type: AuditEventTypeEnum.ConnectorAttached,\n severity: AuditSeverityEnum.Info,\n actor: systemActor(),\n target: connectorTarget(input.connector_id, input.connector_name),\n trace_id: input.trace_id,\n workspace_id: input.workspace_id,\n thread_id: input.thread_id,\n task_id: input.task_id,\n parent_event_id: input.parent_event_id,\n metadata: {\n ...input.metadata,\n connector_platform: input.connector_platform,\n },\n tags: input.tags,\n now: input.now,\n });\n}\n\n/**\n * Emit a `connector.health` audit event.\n *\n * Call this when a connector emits a health check or diagnostic event.\n */\nexport function emitConnectorHealth(\n input: ConnectorAuditEventInput & {\n healthy: boolean;\n latency_ms?: number;\n },\n): AuditEvent {\n return createAuditEvent({\n id: input.id,\n event_type: AuditEventTypeEnum.ConnectorHealth,\n severity: input.healthy ? AuditSeverityEnum.Info : AuditSeverityEnum.Warning,\n actor: connectorActor(input.connector_id, input.connector_platform, input.connector_name),\n target: connectorTarget(input.connector_id, input.connector_name),\n trace_id: input.trace_id,\n workspace_id: input.workspace_id,\n thread_id: input.thread_id,\n task_id: input.task_id,\n parent_event_id: input.parent_event_id,\n metadata: {\n ...input.metadata,\n healthy: input.healthy,\n ...(input.latency_ms !== undefined ? { latency_ms: input.latency_ms } : {}),\n },\n tags: input.tags,\n now: input.now,\n });\n}\n\n/**\n * Emit a `connector.error` audit event.\n *\n * Call this when a connector encounters an error during task execution.\n */\nexport function emitConnectorError(\n input: ConnectorAuditEventInput & {\n error_code?: string;\n error_message: string;\n },\n): AuditEvent {\n return createAuditEvent({\n id: input.id,\n event_type: AuditEventTypeEnum.ConnectorError,\n severity: AuditSeverityEnum.Error,\n actor: connectorActor(input.connector_id, input.connector_platform, input.connector_name),\n target: connectorTarget(input.connector_id, input.connector_name),\n trace_id: input.trace_id,\n workspace_id: input.workspace_id,\n thread_id: input.thread_id,\n task_id: input.task_id,\n parent_event_id: input.parent_event_id,\n metadata: {\n ...input.metadata,\n ...(input.error_code ? { error_code: input.error_code } : {}),\n error_message: input.error_message,\n },\n tags: input.tags,\n now: input.now,\n });\n}\n\n// ---------------------------------------------------------------------------\n// Policy events\n// ---------------------------------------------------------------------------\n\n/**\n * Input for policy audit events.\n */\nexport interface PolicyAuditEventInput extends AuditEventBase {\n /** The task ID the policy was checked for. */\n task_id: string;\n /** The agent ID the policy was evaluated against. */\n agent_id: string;\n /** The policy action (e.g. 'file:write', 'bash:exec'). */\n action: string;\n /** The rule that was applied ('auto', 'prompt', 'deny'). */\n rule: string;\n /** Whether the action was approved. */\n approved: boolean;\n /** Human-readable reason for the decision. */\n reason: string;\n /** Duration of the policy check. */\n duration_ms?: number;\n}\n\n/**\n * Emit a `policy.checked` audit event.\n *\n * Call this after a policy evaluation completes.\n */\nexport function emitPolicyChecked(input: PolicyAuditEventInput): AuditEvent {\n const policyContext: AuditPolicyContext = {\n action: input.action,\n rule: input.rule,\n approved: input.approved,\n reason: input.reason,\n agent_id: input.agent_id,\n };\n\n return createAuditEvent({\n id: input.id,\n event_type: AuditEventTypeEnum.PolicyChecked,\n severity: AuditSeverityEnum.Info,\n actor: systemActor('policy-engine'),\n target: taskTarget(input.task_id),\n trace_id: input.trace_id,\n workspace_id: input.workspace_id,\n thread_id: input.thread_id,\n task_id: input.task_id,\n parent_event_id: input.parent_event_id,\n duration_ms: input.duration_ms,\n policy: policyContext,\n metadata: input.metadata,\n tags: input.tags,\n now: input.now,\n });\n}\n\n/**\n * Emit a `policy.approved` audit event.\n *\n * Convenience wrapper around `emitPolicyChecked` for approved actions.\n */\nexport function emitPolicyApproved(\n input: Omit<PolicyAuditEventInput, 'approved'>,\n): AuditEvent {\n return createAuditEvent({\n id: input.id,\n event_type: AuditEventTypeEnum.PolicyApproved,\n severity: AuditSeverityEnum.Info,\n actor: systemActor('policy-engine'),\n target: taskTarget(input.task_id),\n trace_id: input.trace_id,\n workspace_id: input.workspace_id,\n thread_id: input.thread_id,\n task_id: input.task_id,\n parent_event_id: input.parent_event_id,\n duration_ms: input.duration_ms,\n policy: {\n action: input.action,\n rule: input.rule,\n approved: true,\n reason: input.reason,\n agent_id: input.agent_id,\n },\n metadata: input.metadata,\n tags: input.tags,\n now: input.now,\n });\n}\n\n/**\n * Emit a `policy.denied` audit event.\n *\n * Convenience wrapper for denied actions.\n */\nexport function emitPolicyDenied(\n input: Omit<PolicyAuditEventInput, 'approved'>,\n): AuditEvent {\n return createAuditEvent({\n id: input.id,\n event_type: AuditEventTypeEnum.PolicyDenied,\n severity: AuditSeverityEnum.Warning,\n actor: systemActor('policy-engine'),\n target: taskTarget(input.task_id),\n trace_id: input.trace_id,\n workspace_id: input.workspace_id,\n thread_id: input.thread_id,\n task_id: input.task_id,\n parent_event_id: input.parent_event_id,\n duration_ms: input.duration_ms,\n policy: {\n action: input.action,\n rule: input.rule,\n approved: false,\n reason: input.reason,\n agent_id: input.agent_id,\n },\n metadata: input.metadata,\n tags: input.tags,\n now: input.now,\n });\n}\n\n// ---------------------------------------------------------------------------\n// Compound helper: emit audit event from envelope transition\n// ---------------------------------------------------------------------------\n\n/**\n * Mapping from canonical TaskState to the appropriate audit event emitter.\n * Used by `emitAuditForTransition` to automatically produce the right\n * event type when a task envelope transitions.\n */\nconst STATE_TO_EVENT_TYPE = {\n submitted: AuditEventTypeEnum.TaskSubmitted,\n working: AuditEventTypeEnum.TaskStarted,\n 'input-required': AuditEventTypeEnum.TaskInputRequired,\n completed: AuditEventTypeEnum.TaskCompleted,\n failed: AuditEventTypeEnum.TaskFailed,\n cancelled: AuditEventTypeEnum.TaskCancelled,\n} as const;\n\n/**\n * Automatically emit the correct audit event type for a task state\n * transition. This is the preferred method for adapter code that processes\n * state changes and wants to emit a matching audit event without manually\n * switching on the state.\n *\n * @param input - The task audit event input.\n * @param newState - The canonical state the task transitioned to.\n * @returns An `AuditEvent` with the correct event_type for the transition.\n */\nexport function emitAuditForTransition(\n input: TaskAuditEventInput & { duration_ms?: number },\n newState: string,\n): AuditEvent {\n const eventType =\n STATE_TO_EVENT_TYPE[newState as keyof typeof STATE_TO_EVENT_TYPE] ??\n AuditEventTypeEnum.TaskProgress;\n\n const severity =\n newState === 'failed'\n ? AuditSeverityEnum.Error\n : newState === 'cancelled'\n ? AuditSeverityEnum.Warning\n : AuditSeverityEnum.Info;\n\n return createAuditEvent({\n id: input.id,\n event_type: eventType,\n severity,\n actor: agentActor(input.actor_agent_id, input.actor_platform, input.actor_name),\n target: taskTarget(input.task_id),\n trace_id: input.trace_id,\n workspace_id: input.workspace_id,\n thread_id: input.thread_id,\n task_id: input.task_id,\n parent_event_id: input.parent_event_id,\n duration_ms: input.duration_ms,\n metadata: input.metadata,\n tags: input.tags,\n now: input.now,\n });\n}\n"],"mappings":"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","names":[]}