agentic-qe 1.8.4 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/.claude/skills/agentic-jujutsu/SKILL.md +645 -0
  2. package/CHANGELOG.md +394 -0
  3. package/README.md +86 -18
  4. package/dist/App.d.ts +5 -0
  5. package/dist/App.d.ts.map +1 -0
  6. package/dist/App.js +15 -0
  7. package/dist/App.js.map +1 -0
  8. package/dist/cli/commands/constitution.d.ts +34 -0
  9. package/dist/cli/commands/constitution.d.ts.map +1 -0
  10. package/dist/cli/commands/constitution.js +679 -0
  11. package/dist/cli/commands/constitution.js.map +1 -0
  12. package/dist/cli/commands/init.d.ts +8 -75
  13. package/dist/cli/commands/init.d.ts.map +1 -1
  14. package/dist/cli/commands/init.js +22 -2292
  15. package/dist/cli/commands/init.js.map +1 -1
  16. package/dist/cli/commands/learn/index.d.ts.map +1 -1
  17. package/dist/cli/commands/learn/index.js +3 -4
  18. package/dist/cli/commands/learn/index.js.map +1 -1
  19. package/dist/cli/commands/telemetry.d.ts +36 -0
  20. package/dist/cli/commands/telemetry.d.ts.map +1 -0
  21. package/dist/cli/commands/telemetry.js +364 -0
  22. package/dist/cli/commands/telemetry.js.map +1 -0
  23. package/dist/cli/index.js +66 -0
  24. package/dist/cli/index.js.map +1 -1
  25. package/dist/cli/init/agents.d.ts +22 -0
  26. package/dist/cli/init/agents.d.ts.map +1 -0
  27. package/dist/cli/init/agents.js +522 -0
  28. package/dist/cli/init/agents.js.map +1 -0
  29. package/dist/cli/init/bash-wrapper.d.ts +14 -0
  30. package/dist/cli/init/bash-wrapper.d.ts.map +1 -0
  31. package/dist/cli/init/bash-wrapper.js +47 -0
  32. package/dist/cli/init/bash-wrapper.js.map +1 -0
  33. package/dist/cli/init/claude-config.d.ts +24 -0
  34. package/dist/cli/init/claude-config.d.ts.map +1 -0
  35. package/dist/cli/init/claude-config.js +275 -0
  36. package/dist/cli/init/claude-config.js.map +1 -0
  37. package/dist/cli/init/claude-md.d.ts +19 -0
  38. package/dist/cli/init/claude-md.d.ts.map +1 -0
  39. package/dist/cli/init/claude-md.js +153 -0
  40. package/dist/cli/init/claude-md.js.map +1 -0
  41. package/dist/cli/init/commands.d.ts +6 -0
  42. package/dist/cli/init/commands.d.ts.map +1 -0
  43. package/dist/cli/init/commands.js +83 -0
  44. package/dist/cli/init/commands.js.map +1 -0
  45. package/dist/cli/init/database-init.d.ts +15 -0
  46. package/dist/cli/init/database-init.d.ts.map +1 -0
  47. package/dist/cli/init/database-init.js +203 -0
  48. package/dist/cli/init/database-init.js.map +1 -0
  49. package/dist/cli/init/directory-structure.d.ts +14 -0
  50. package/dist/cli/init/directory-structure.d.ts.map +1 -0
  51. package/dist/cli/init/directory-structure.js +91 -0
  52. package/dist/cli/init/directory-structure.js.map +1 -0
  53. package/dist/cli/init/documentation.d.ts +14 -0
  54. package/dist/cli/init/documentation.d.ts.map +1 -0
  55. package/dist/cli/init/documentation.js +195 -0
  56. package/dist/cli/init/documentation.js.map +1 -0
  57. package/dist/cli/init/fleet-config.d.ts +34 -0
  58. package/dist/cli/init/fleet-config.d.ts.map +1 -0
  59. package/dist/cli/init/fleet-config.js +269 -0
  60. package/dist/cli/init/fleet-config.js.map +1 -0
  61. package/dist/cli/init/helpers.d.ts +6 -0
  62. package/dist/cli/init/helpers.d.ts.map +1 -0
  63. package/dist/cli/init/helpers.js +94 -0
  64. package/dist/cli/init/helpers.js.map +1 -0
  65. package/dist/cli/init/index.d.ts +32 -0
  66. package/dist/cli/init/index.d.ts.map +1 -0
  67. package/dist/cli/init/index.js +294 -0
  68. package/dist/cli/init/index.js.map +1 -0
  69. package/dist/cli/init/skills.d.ts +6 -0
  70. package/dist/cli/init/skills.d.ts.map +1 -0
  71. package/dist/cli/init/skills.js +138 -0
  72. package/dist/cli/init/skills.js.map +1 -0
  73. package/dist/cli/init/utils/file-utils.d.ts +74 -0
  74. package/dist/cli/init/utils/file-utils.d.ts.map +1 -0
  75. package/dist/cli/init/utils/file-utils.js +187 -0
  76. package/dist/cli/init/utils/file-utils.js.map +1 -0
  77. package/dist/cli/init/utils/index.d.ts +18 -0
  78. package/dist/cli/init/utils/index.d.ts.map +1 -0
  79. package/dist/cli/init/utils/index.js +48 -0
  80. package/dist/cli/init/utils/index.js.map +1 -0
  81. package/dist/cli/init/utils/log-utils.d.ts +47 -0
  82. package/dist/cli/init/utils/log-utils.d.ts.map +1 -0
  83. package/dist/cli/init/utils/log-utils.js +68 -0
  84. package/dist/cli/init/utils/log-utils.js.map +1 -0
  85. package/dist/cli/init/utils/path-utils.d.ts +91 -0
  86. package/dist/cli/init/utils/path-utils.d.ts.map +1 -0
  87. package/dist/cli/init/utils/path-utils.js +208 -0
  88. package/dist/cli/init/utils/path-utils.js.map +1 -0
  89. package/dist/cli/init/utils/validation-utils.d.ts +44 -0
  90. package/dist/cli/init/utils/validation-utils.d.ts.map +1 -0
  91. package/dist/cli/init/utils/validation-utils.js +68 -0
  92. package/dist/cli/init/utils/validation-utils.js.map +1 -0
  93. package/dist/cli/init/utils.d.ts +183 -0
  94. package/dist/cli/init/utils.d.ts.map +1 -0
  95. package/dist/cli/init/utils.js +354 -0
  96. package/dist/cli/init/utils.js.map +1 -0
  97. package/dist/components/Dashboard/Dashboard.d.ts +4 -0
  98. package/dist/components/Dashboard/Dashboard.d.ts.map +1 -0
  99. package/dist/components/Dashboard/Dashboard.js +148 -0
  100. package/dist/components/Dashboard/Dashboard.js.map +1 -0
  101. package/dist/components/Dashboard/DashboardHeader.d.ts +4 -0
  102. package/dist/components/Dashboard/DashboardHeader.d.ts.map +1 -0
  103. package/dist/components/Dashboard/DashboardHeader.js +138 -0
  104. package/dist/components/Dashboard/DashboardHeader.js.map +1 -0
  105. package/dist/constitution/evaluators/ast-evaluator.d.ts +42 -0
  106. package/dist/constitution/evaluators/ast-evaluator.d.ts.map +1 -0
  107. package/dist/constitution/evaluators/ast-evaluator.js +303 -0
  108. package/dist/constitution/evaluators/ast-evaluator.js.map +1 -0
  109. package/dist/constitution/evaluators/base.d.ts +144 -0
  110. package/dist/constitution/evaluators/base.d.ts.map +1 -0
  111. package/dist/constitution/evaluators/base.js +144 -0
  112. package/dist/constitution/evaluators/base.js.map +1 -0
  113. package/dist/constitution/evaluators/index.d.ts +19 -0
  114. package/dist/constitution/evaluators/index.d.ts.map +1 -0
  115. package/dist/constitution/evaluators/index.js +56 -0
  116. package/dist/constitution/evaluators/index.js.map +1 -0
  117. package/dist/constitution/evaluators/metric-evaluator.d.ts +59 -0
  118. package/dist/constitution/evaluators/metric-evaluator.d.ts.map +1 -0
  119. package/dist/constitution/evaluators/metric-evaluator.js +195 -0
  120. package/dist/constitution/evaluators/metric-evaluator.js.map +1 -0
  121. package/dist/constitution/evaluators/pattern-evaluator.d.ts +66 -0
  122. package/dist/constitution/evaluators/pattern-evaluator.d.ts.map +1 -0
  123. package/dist/constitution/evaluators/pattern-evaluator.js +221 -0
  124. package/dist/constitution/evaluators/pattern-evaluator.js.map +1 -0
  125. package/dist/constitution/evaluators/semantic-evaluator.d.ts +68 -0
  126. package/dist/constitution/evaluators/semantic-evaluator.d.ts.map +1 -0
  127. package/dist/constitution/evaluators/semantic-evaluator.js +250 -0
  128. package/dist/constitution/evaluators/semantic-evaluator.js.map +1 -0
  129. package/dist/contexts/DashboardContext.d.ts +41 -0
  130. package/dist/contexts/DashboardContext.d.ts.map +1 -0
  131. package/dist/contexts/DashboardContext.js +187 -0
  132. package/dist/contexts/DashboardContext.js.map +1 -0
  133. package/dist/core/memory/SwarmMemoryManager.d.ts +40 -0
  134. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  135. package/dist/core/memory/SwarmMemoryManager.js +291 -120
  136. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  137. package/dist/hooks/useKeyboardShortcuts.d.ts +12 -0
  138. package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  139. package/dist/hooks/useKeyboardShortcuts.js +69 -0
  140. package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
  141. package/dist/telemetry/instrumentation/agent.d.ts +158 -0
  142. package/dist/telemetry/instrumentation/agent.d.ts.map +1 -0
  143. package/dist/telemetry/instrumentation/agent.js +372 -0
  144. package/dist/telemetry/instrumentation/agent.js.map +1 -0
  145. package/dist/telemetry/instrumentation/index.d.ts +24 -0
  146. package/dist/telemetry/instrumentation/index.d.ts.map +1 -0
  147. package/dist/telemetry/instrumentation/index.js +54 -0
  148. package/dist/telemetry/instrumentation/index.js.map +1 -0
  149. package/dist/telemetry/instrumentation/memory.d.ts +313 -0
  150. package/dist/telemetry/instrumentation/memory.d.ts.map +1 -0
  151. package/dist/telemetry/instrumentation/memory.js +552 -0
  152. package/dist/telemetry/instrumentation/memory.js.map +1 -0
  153. package/dist/telemetry/instrumentation/task.d.ts +146 -0
  154. package/dist/telemetry/instrumentation/task.d.ts.map +1 -0
  155. package/dist/telemetry/instrumentation/task.js +305 -0
  156. package/dist/telemetry/instrumentation/task.js.map +1 -0
  157. package/dist/telemetry/metrics/collectors/cost.d.ts +246 -0
  158. package/dist/telemetry/metrics/collectors/cost.d.ts.map +1 -0
  159. package/dist/telemetry/metrics/collectors/cost.js +526 -0
  160. package/dist/telemetry/metrics/collectors/cost.js.map +1 -0
  161. package/dist/telemetry/metrics/collectors/pricing-config.d.ts +87 -0
  162. package/dist/telemetry/metrics/collectors/pricing-config.d.ts.map +1 -0
  163. package/dist/telemetry/metrics/collectors/pricing-config.js +207 -0
  164. package/dist/telemetry/metrics/collectors/pricing-config.js.map +1 -0
  165. package/dist/telemetry/metrics/index.d.ts +4 -1
  166. package/dist/telemetry/metrics/index.d.ts.map +1 -1
  167. package/dist/telemetry/metrics/index.js +18 -2
  168. package/dist/telemetry/metrics/index.js.map +1 -1
  169. package/dist/telemetry/types.d.ts +1 -1
  170. package/dist/telemetry/types.d.ts.map +1 -1
  171. package/dist/visualization/api/RestEndpoints.d.ts +136 -0
  172. package/dist/visualization/api/RestEndpoints.d.ts.map +1 -0
  173. package/dist/visualization/api/RestEndpoints.js +428 -0
  174. package/dist/visualization/api/RestEndpoints.js.map +1 -0
  175. package/dist/visualization/api/WebSocketServer.d.ts +165 -0
  176. package/dist/visualization/api/WebSocketServer.d.ts.map +1 -0
  177. package/dist/visualization/api/WebSocketServer.js +518 -0
  178. package/dist/visualization/api/WebSocketServer.js.map +1 -0
  179. package/dist/visualization/core/DataTransformer.d.ts +89 -0
  180. package/dist/visualization/core/DataTransformer.d.ts.map +1 -0
  181. package/dist/visualization/core/DataTransformer.js +478 -0
  182. package/dist/visualization/core/DataTransformer.js.map +1 -0
  183. package/dist/visualization/index.d.ts +92 -0
  184. package/dist/visualization/index.d.ts.map +1 -0
  185. package/dist/visualization/index.js +121 -0
  186. package/dist/visualization/index.js.map +1 -0
  187. package/dist/visualization/types.d.ts +148 -0
  188. package/dist/visualization/types.d.ts.map +1 -0
  189. package/dist/visualization/types.js +7 -0
  190. package/dist/visualization/types.js.map +1 -0
  191. package/dist/voting/consensus.d.ts +87 -0
  192. package/dist/voting/consensus.d.ts.map +1 -0
  193. package/dist/voting/consensus.js +568 -0
  194. package/dist/voting/consensus.js.map +1 -0
  195. package/dist/voting/index.d.ts +12 -0
  196. package/dist/voting/index.d.ts.map +1 -0
  197. package/dist/voting/index.js +36 -0
  198. package/dist/voting/index.js.map +1 -0
  199. package/dist/voting/orchestrator.d.ts +65 -0
  200. package/dist/voting/orchestrator.d.ts.map +1 -0
  201. package/dist/voting/orchestrator.js +306 -0
  202. package/dist/voting/orchestrator.js.map +1 -0
  203. package/dist/voting/panel-assembly.d.ts +54 -0
  204. package/dist/voting/panel-assembly.d.ts.map +1 -0
  205. package/dist/voting/panel-assembly.js +192 -0
  206. package/dist/voting/panel-assembly.js.map +1 -0
  207. package/dist/voting/protocol.d.ts +119 -0
  208. package/dist/voting/protocol.d.ts.map +1 -0
  209. package/dist/voting/protocol.js +18 -0
  210. package/dist/voting/protocol.js.map +1 -0
  211. package/dist/voting/types.d.ts +125 -0
  212. package/dist/voting/types.d.ts.map +1 -0
  213. package/dist/voting/types.js +7 -0
  214. package/dist/voting/types.js.map +1 -0
  215. package/package.json +27 -2
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Task Instrumentation - OpenTelemetry spans for task lifecycle
3
+ *
4
+ * Provides comprehensive tracing for task orchestration, distribution,
5
+ * and execution across the agent fleet. Supports parent-child task
6
+ * relationships and distributed tracing.
7
+ *
8
+ * @module telemetry/instrumentation/task
9
+ */
10
+ import { Span, Context } from '@opentelemetry/api';
11
+ import { QEAttributes } from '../types';
12
+ import { QETask } from '../../types';
13
+ /**
14
+ * Task span configuration
15
+ */
16
+ export interface TaskSpanConfig {
17
+ /** Task to trace */
18
+ task: QETask;
19
+ /** Parent span context */
20
+ parentContext?: Context;
21
+ /** Additional QE-specific attributes */
22
+ qeAttributes?: Partial<QEAttributes>;
23
+ }
24
+ /**
25
+ * Task result metadata
26
+ */
27
+ export interface TaskResult {
28
+ /** Execution time in milliseconds */
29
+ executionTime?: number;
30
+ /** Tokens used by LLM */
31
+ tokensUsed?: number;
32
+ /** Cost in USD */
33
+ cost?: number;
34
+ /** Test framework used */
35
+ framework?: string;
36
+ /** Coverage percentage */
37
+ coverage?: number;
38
+ /** Quality score */
39
+ qualityScore?: number;
40
+ /** Additional metrics */
41
+ metrics?: Record<string, number>;
42
+ }
43
+ /**
44
+ * Task lifecycle span manager
45
+ *
46
+ * Manages OpenTelemetry spans for task orchestration and execution
47
+ * with support for hierarchical task relationships and distributed tracing.
48
+ */
49
+ export declare class TaskSpanManager {
50
+ private readonly tracer;
51
+ private activeSpans;
52
+ /**
53
+ * Start task orchestration span
54
+ *
55
+ * Records task distribution and coordination across the fleet.
56
+ *
57
+ * @param task - Task being orchestrated
58
+ * @param fleetId - Fleet identifier
59
+ * @param agentCount - Number of agents involved
60
+ * @returns Active span with context
61
+ */
62
+ startOrchestrationSpan(task: QETask, fleetId?: string, agentCount?: number): {
63
+ span: Span;
64
+ context: Context;
65
+ };
66
+ /**
67
+ * Complete task orchestration span
68
+ *
69
+ * @param taskId - Task identifier
70
+ * @param success - Whether orchestration was successful
71
+ * @param agentsAssigned - Number of agents assigned
72
+ * @param error - Error if orchestration failed
73
+ */
74
+ completeOrchestrationSpan(taskId: string, success: boolean, agentsAssigned?: number, error?: Error): void;
75
+ /**
76
+ * Start task execution span
77
+ *
78
+ * Records task execution with semantic attributes for task type,
79
+ * priority, and QE-specific metadata.
80
+ *
81
+ * @param config - Task span configuration
82
+ * @returns Active span with context
83
+ */
84
+ startExecutionSpan(config: TaskSpanConfig): {
85
+ span: Span;
86
+ context: Context;
87
+ };
88
+ /**
89
+ * Complete task execution span
90
+ *
91
+ * @param taskId - Task identifier
92
+ * @param success - Whether execution was successful
93
+ * @param result - Task execution result
94
+ * @param error - Error if execution failed
95
+ */
96
+ completeExecutionSpan(taskId: string, success: boolean, result?: TaskResult, error?: Error): void;
97
+ /**
98
+ * Record task status change
99
+ *
100
+ * @param taskId - Task identifier
101
+ * @param oldStatus - Previous status
102
+ * @param newStatus - New status
103
+ */
104
+ recordStatusChange(taskId: string, oldStatus: string, newStatus: string): void;
105
+ /**
106
+ * Record task retry
107
+ *
108
+ * @param taskId - Task identifier
109
+ * @param attempt - Retry attempt number
110
+ * @param reason - Reason for retry
111
+ */
112
+ recordRetry(taskId: string, attempt: number, reason?: string): void;
113
+ /**
114
+ * Record task cancellation
115
+ *
116
+ * @param taskId - Task identifier
117
+ * @param reason - Cancellation reason
118
+ */
119
+ recordCancellation(taskId: string, reason?: string): void;
120
+ /**
121
+ * Cleanup all active spans
122
+ */
123
+ cleanup(): void;
124
+ /**
125
+ * Build task semantic attributes
126
+ */
127
+ private buildTaskAttributes;
128
+ /**
129
+ * Get appropriate span name for task type
130
+ */
131
+ private getSpanNameForTaskType;
132
+ }
133
+ /**
134
+ * Global task span manager instance
135
+ */
136
+ export declare const taskSpanManager: TaskSpanManager;
137
+ /**
138
+ * Execute function within task span context
139
+ *
140
+ * @param task - Task being executed
141
+ * @param fn - Function to execute
142
+ * @param qeAttributes - QE-specific attributes
143
+ * @returns Function result
144
+ */
145
+ export declare function withTaskSpan<T>(task: QETask, fn: (context: Context) => Promise<T>, qeAttributes?: Partial<QEAttributes>): Promise<T>;
146
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/telemetry/instrumentation/task.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAkC,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEnF,OAAO,EAA8B,YAAY,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wCAAwC;IACxC,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,WAAW,CAA2B;IAE9C;;;;;;;;;OASG;IACH,sBAAsB,CACpB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAoBnC;;;;;;;OAOG;IACH,yBAAyB,CACvB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,cAAc,CAAC,EAAE,MAAM,EACvB,KAAK,CAAC,EAAE,KAAK,GACZ,IAAI;IA8BP;;;;;;;;OAQG;IACH,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IA0B5E;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,UAAU,EACnB,KAAK,CAAC,EAAE,KAAK,GACZ,IAAI;IAyDP;;;;;;OAMG;IACH,kBAAkB,CAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,IAAI;IAWP;;;;;;OAMG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAWnE;;;;;OAKG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAgBzD;;OAEG;IACH,OAAO,IAAI,IAAI;IAYf;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAW/B;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,iBAAwB,CAAC;AAErD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,EACpC,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GACnC,OAAO,CAAC,CAAC,CAAC,CAuBZ"}
@@ -0,0 +1,305 @@
1
+ "use strict";
2
+ /**
3
+ * Task Instrumentation - OpenTelemetry spans for task lifecycle
4
+ *
5
+ * Provides comprehensive tracing for task orchestration, distribution,
6
+ * and execution across the agent fleet. Supports parent-child task
7
+ * relationships and distributed tracing.
8
+ *
9
+ * @module telemetry/instrumentation/task
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.taskSpanManager = exports.TaskSpanManager = void 0;
13
+ exports.withTaskSpan = withTaskSpan;
14
+ const api_1 = require("@opentelemetry/api");
15
+ const bootstrap_1 = require("../bootstrap");
16
+ const types_1 = require("../types");
17
+ /**
18
+ * Task lifecycle span manager
19
+ *
20
+ * Manages OpenTelemetry spans for task orchestration and execution
21
+ * with support for hierarchical task relationships and distributed tracing.
22
+ */
23
+ class TaskSpanManager {
24
+ constructor() {
25
+ this.tracer = (0, bootstrap_1.getTracer)();
26
+ this.activeSpans = new Map();
27
+ }
28
+ /**
29
+ * Start task orchestration span
30
+ *
31
+ * Records task distribution and coordination across the fleet.
32
+ *
33
+ * @param task - Task being orchestrated
34
+ * @param fleetId - Fleet identifier
35
+ * @param agentCount - Number of agents involved
36
+ * @returns Active span with context
37
+ */
38
+ startOrchestrationSpan(task, fleetId, agentCount) {
39
+ const span = this.tracer.startSpan(types_1.SPAN_NAMES.FLEET_DISTRIBUTE_TASK, {
40
+ attributes: {
41
+ ...this.buildTaskAttributes(task),
42
+ ...(fleetId && { 'fleet.id': fleetId }),
43
+ ...(agentCount && { 'fleet.agent_count': agentCount }),
44
+ },
45
+ });
46
+ this.activeSpans.set(`orchestrate:${task.id}`, span);
47
+ span.addEvent('task.orchestration.started', {
48
+ 'task.id': task.id,
49
+ 'task.type': task.type,
50
+ });
51
+ const spanContext = api_1.trace.setSpan(api_1.context.active(), span);
52
+ return { span, context: spanContext };
53
+ }
54
+ /**
55
+ * Complete task orchestration span
56
+ *
57
+ * @param taskId - Task identifier
58
+ * @param success - Whether orchestration was successful
59
+ * @param agentsAssigned - Number of agents assigned
60
+ * @param error - Error if orchestration failed
61
+ */
62
+ completeOrchestrationSpan(taskId, success, agentsAssigned, error) {
63
+ const span = this.activeSpans.get(`orchestrate:${taskId}`);
64
+ if (!span) {
65
+ console.warn(`[TaskSpanManager] No orchestration span found for task ${taskId}`);
66
+ return;
67
+ }
68
+ if (agentsAssigned !== undefined) {
69
+ span.setAttribute('task.agents_assigned', agentsAssigned);
70
+ }
71
+ if (success) {
72
+ span.setStatus({ code: api_1.SpanStatusCode.OK });
73
+ span.addEvent('task.orchestration.completed', {
74
+ 'task.id': taskId,
75
+ });
76
+ }
77
+ else {
78
+ span.setStatus({
79
+ code: api_1.SpanStatusCode.ERROR,
80
+ message: error?.message || 'Task orchestration failed',
81
+ });
82
+ if (error) {
83
+ span.recordException(error);
84
+ }
85
+ }
86
+ span.end();
87
+ this.activeSpans.delete(`orchestrate:${taskId}`);
88
+ }
89
+ /**
90
+ * Start task execution span
91
+ *
92
+ * Records task execution with semantic attributes for task type,
93
+ * priority, and QE-specific metadata.
94
+ *
95
+ * @param config - Task span configuration
96
+ * @returns Active span with context
97
+ */
98
+ startExecutionSpan(config) {
99
+ const { task, parentContext, qeAttributes } = config;
100
+ const spanContext = parentContext || api_1.context.active();
101
+ const span = this.tracer.startSpan(this.getSpanNameForTaskType(task.type), {
102
+ attributes: {
103
+ ...this.buildTaskAttributes(task),
104
+ ...qeAttributes,
105
+ },
106
+ }, spanContext);
107
+ this.activeSpans.set(`execute:${task.id}`, span);
108
+ span.addEvent('task.execution.started', {
109
+ 'task.id': task.id,
110
+ 'task.type': task.type,
111
+ });
112
+ const execContext = api_1.trace.setSpan(api_1.context.active(), span);
113
+ return { span, context: execContext };
114
+ }
115
+ /**
116
+ * Complete task execution span
117
+ *
118
+ * @param taskId - Task identifier
119
+ * @param success - Whether execution was successful
120
+ * @param result - Task execution result
121
+ * @param error - Error if execution failed
122
+ */
123
+ completeExecutionSpan(taskId, success, result, error) {
124
+ const span = this.activeSpans.get(`execute:${taskId}`);
125
+ if (!span) {
126
+ console.warn(`[TaskSpanManager] No execution span found for task ${taskId}`);
127
+ return;
128
+ }
129
+ // Add result metrics
130
+ if (result) {
131
+ if (result.executionTime !== undefined) {
132
+ span.setAttribute('task.execution_time_ms', result.executionTime);
133
+ }
134
+ if (result.tokensUsed !== undefined) {
135
+ span.setAttribute('task.tokens_used', result.tokensUsed);
136
+ }
137
+ if (result.cost !== undefined) {
138
+ span.setAttribute('task.cost_usd', result.cost);
139
+ }
140
+ if (result.framework) {
141
+ span.setAttribute('qe.test_framework', result.framework);
142
+ }
143
+ if (result.coverage !== undefined) {
144
+ span.setAttribute('qe.coverage_percent', result.coverage);
145
+ }
146
+ if (result.qualityScore !== undefined) {
147
+ span.setAttribute('qe.quality_score', result.qualityScore);
148
+ }
149
+ if (result.metrics) {
150
+ for (const [key, value] of Object.entries(result.metrics)) {
151
+ span.setAttribute(`task.metric.${key}`, value);
152
+ }
153
+ }
154
+ }
155
+ if (success) {
156
+ span.setStatus({ code: api_1.SpanStatusCode.OK });
157
+ span.addEvent('task.execution.completed', {
158
+ 'task.id': taskId,
159
+ });
160
+ }
161
+ else {
162
+ span.setStatus({
163
+ code: api_1.SpanStatusCode.ERROR,
164
+ message: error?.message || 'Task execution failed',
165
+ });
166
+ if (error) {
167
+ span.recordException(error);
168
+ }
169
+ span.addEvent('task.execution.failed', {
170
+ 'task.id': taskId,
171
+ 'error.message': error?.message || 'Unknown error',
172
+ });
173
+ }
174
+ span.end();
175
+ this.activeSpans.delete(`execute:${taskId}`);
176
+ }
177
+ /**
178
+ * Record task status change
179
+ *
180
+ * @param taskId - Task identifier
181
+ * @param oldStatus - Previous status
182
+ * @param newStatus - New status
183
+ */
184
+ recordStatusChange(taskId, oldStatus, newStatus) {
185
+ const span = api_1.trace.getActiveSpan();
186
+ if (span) {
187
+ span.addEvent('task.status.changed', {
188
+ 'task.id': taskId,
189
+ 'task.status.old': oldStatus,
190
+ 'task.status.new': newStatus,
191
+ });
192
+ }
193
+ }
194
+ /**
195
+ * Record task retry
196
+ *
197
+ * @param taskId - Task identifier
198
+ * @param attempt - Retry attempt number
199
+ * @param reason - Reason for retry
200
+ */
201
+ recordRetry(taskId, attempt, reason) {
202
+ const span = api_1.trace.getActiveSpan();
203
+ if (span) {
204
+ span.addEvent('task.retry', {
205
+ 'task.id': taskId,
206
+ 'task.retry.attempt': attempt,
207
+ ...(reason && { 'task.retry.reason': reason }),
208
+ });
209
+ }
210
+ }
211
+ /**
212
+ * Record task cancellation
213
+ *
214
+ * @param taskId - Task identifier
215
+ * @param reason - Cancellation reason
216
+ */
217
+ recordCancellation(taskId, reason) {
218
+ const span = this.activeSpans.get(`execute:${taskId}`);
219
+ if (span) {
220
+ span.setStatus({
221
+ code: api_1.SpanStatusCode.ERROR,
222
+ message: reason || 'Task cancelled',
223
+ });
224
+ span.addEvent('task.cancelled', {
225
+ 'task.id': taskId,
226
+ ...(reason && { 'task.cancellation.reason': reason }),
227
+ });
228
+ span.end();
229
+ this.activeSpans.delete(`execute:${taskId}`);
230
+ }
231
+ }
232
+ /**
233
+ * Cleanup all active spans
234
+ */
235
+ cleanup() {
236
+ for (const [key, span] of this.activeSpans.entries()) {
237
+ console.warn(`[TaskSpanManager] Force-ending orphaned span: ${key}`);
238
+ span.setStatus({
239
+ code: api_1.SpanStatusCode.ERROR,
240
+ message: 'Span ended during cleanup',
241
+ });
242
+ span.end();
243
+ }
244
+ this.activeSpans.clear();
245
+ }
246
+ /**
247
+ * Build task semantic attributes
248
+ */
249
+ buildTaskAttributes(task) {
250
+ return {
251
+ 'task.id': task.id,
252
+ 'task.type': task.type,
253
+ 'task.status': task.status,
254
+ 'task.priority': task.priority,
255
+ 'task.parent_id': task.parentId || '',
256
+ };
257
+ }
258
+ /**
259
+ * Get appropriate span name for task type
260
+ */
261
+ getSpanNameForTaskType(taskType) {
262
+ const spanMap = {
263
+ 'unit-test': types_1.SPAN_NAMES.AGENT_GENERATE_TESTS,
264
+ 'integration-test': types_1.SPAN_NAMES.AGENT_GENERATE_TESTS,
265
+ 'coverage-analysis': types_1.SPAN_NAMES.AGENT_ANALYZE_COVERAGE,
266
+ 'quality-gate': types_1.SPAN_NAMES.AGENT_VALIDATE_QUALITY,
267
+ 'security-scan': types_1.SPAN_NAMES.AGENT_SCAN_SECURITY,
268
+ };
269
+ return spanMap[taskType] || types_1.SPAN_NAMES.AGENT_EXECUTE_TASK;
270
+ }
271
+ }
272
+ exports.TaskSpanManager = TaskSpanManager;
273
+ /**
274
+ * Global task span manager instance
275
+ */
276
+ exports.taskSpanManager = new TaskSpanManager();
277
+ /**
278
+ * Execute function within task span context
279
+ *
280
+ * @param task - Task being executed
281
+ * @param fn - Function to execute
282
+ * @param qeAttributes - QE-specific attributes
283
+ * @returns Function result
284
+ */
285
+ async function withTaskSpan(task, fn, qeAttributes) {
286
+ const { span, context: spanContext } = exports.taskSpanManager.startExecutionSpan({
287
+ task,
288
+ qeAttributes,
289
+ });
290
+ const startTime = Date.now();
291
+ try {
292
+ const result = await fn(spanContext);
293
+ const executionTime = Date.now() - startTime;
294
+ exports.taskSpanManager.completeExecutionSpan(task.id, true, {
295
+ executionTime,
296
+ });
297
+ return result;
298
+ }
299
+ catch (error) {
300
+ const executionTime = Date.now() - startTime;
301
+ exports.taskSpanManager.completeExecutionSpan(task.id, false, { executionTime }, error);
302
+ throw error;
303
+ }
304
+ }
305
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../../src/telemetry/instrumentation/task.ts"],"names":[],"mappings":"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"}