@blokjs/runner 0.2.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 (307) hide show
  1. package/dist/Blok.d.ts +19 -0
  2. package/dist/Blok.js +184 -0
  3. package/dist/Blok.js.map +1 -0
  4. package/dist/BlokResponse.d.ts +16 -0
  5. package/dist/BlokResponse.js +28 -0
  6. package/dist/BlokResponse.js.map +1 -0
  7. package/dist/Configuration.d.ts +37 -0
  8. package/dist/Configuration.js +248 -0
  9. package/dist/Configuration.js.map +1 -0
  10. package/dist/ConfigurationResolver.d.ts +7 -0
  11. package/dist/ConfigurationResolver.js +15 -0
  12. package/dist/ConfigurationResolver.js.map +1 -0
  13. package/dist/DefaultLogger.d.ts +65 -0
  14. package/dist/DefaultLogger.js +101 -0
  15. package/dist/DefaultLogger.js.map +1 -0
  16. package/dist/LocalStorage.d.ts +7 -0
  17. package/dist/LocalStorage.js +56 -0
  18. package/dist/LocalStorage.js.map +1 -0
  19. package/dist/MemoryUsage.d.ts +22 -0
  20. package/dist/MemoryUsage.js +83 -0
  21. package/dist/MemoryUsage.js.map +1 -0
  22. package/dist/NodeMap.d.ts +7 -0
  23. package/dist/NodeMap.js +13 -0
  24. package/dist/NodeMap.js.map +1 -0
  25. package/dist/ResolverBase.d.ts +8 -0
  26. package/dist/ResolverBase.js +18 -0
  27. package/dist/ResolverBase.js.map +1 -0
  28. package/dist/Runner.d.ts +25 -0
  29. package/dist/Runner.js +32 -0
  30. package/dist/Runner.js.map +1 -0
  31. package/dist/RunnerNode.d.ts +9 -0
  32. package/dist/RunnerNode.js +8 -0
  33. package/dist/RunnerNode.js.map +1 -0
  34. package/dist/RunnerNodeBase.d.ts +4 -0
  35. package/dist/RunnerNodeBase.js +3 -0
  36. package/dist/RunnerNodeBase.js.map +1 -0
  37. package/dist/RunnerSteps.d.ts +14 -0
  38. package/dist/RunnerSteps.js +110 -0
  39. package/dist/RunnerSteps.js.map +1 -0
  40. package/dist/RuntimeAdapterNode.d.ts +19 -0
  41. package/dist/RuntimeAdapterNode.js +87 -0
  42. package/dist/RuntimeAdapterNode.js.map +1 -0
  43. package/dist/RuntimeRegistry.d.ts +61 -0
  44. package/dist/RuntimeRegistry.js +87 -0
  45. package/dist/RuntimeRegistry.js.map +1 -0
  46. package/dist/TriggerBase.d.ts +119 -0
  47. package/dist/TriggerBase.js +413 -0
  48. package/dist/TriggerBase.js.map +1 -0
  49. package/dist/adapters/BunRuntimeAdapter.d.ts +38 -0
  50. package/dist/adapters/BunRuntimeAdapter.js +169 -0
  51. package/dist/adapters/BunRuntimeAdapter.js.map +1 -0
  52. package/dist/adapters/DockerRuntimeAdapter.d.ts +85 -0
  53. package/dist/adapters/DockerRuntimeAdapter.js +298 -0
  54. package/dist/adapters/DockerRuntimeAdapter.js.map +1 -0
  55. package/dist/adapters/HttpRuntimeAdapter.d.ts +58 -0
  56. package/dist/adapters/HttpRuntimeAdapter.js +152 -0
  57. package/dist/adapters/HttpRuntimeAdapter.js.map +1 -0
  58. package/dist/adapters/NodeJsRuntimeAdapter.d.ts +23 -0
  59. package/dist/adapters/NodeJsRuntimeAdapter.js +67 -0
  60. package/dist/adapters/NodeJsRuntimeAdapter.js.map +1 -0
  61. package/dist/adapters/RuntimeAdapter.d.ts +42 -0
  62. package/dist/adapters/RuntimeAdapter.js +2 -0
  63. package/dist/adapters/RuntimeAdapter.js.map +1 -0
  64. package/dist/adapters/WasmRuntimeAdapter.d.ts +69 -0
  65. package/dist/adapters/WasmRuntimeAdapter.js +279 -0
  66. package/dist/adapters/WasmRuntimeAdapter.js.map +1 -0
  67. package/dist/cache/NodeResultCache.d.ts +286 -0
  68. package/dist/cache/NodeResultCache.js +499 -0
  69. package/dist/cache/NodeResultCache.js.map +1 -0
  70. package/dist/cache/index.d.ts +1 -0
  71. package/dist/cache/index.js +2 -0
  72. package/dist/cache/index.js.map +1 -0
  73. package/dist/cost/CostEstimator.d.ts +57 -0
  74. package/dist/cost/CostEstimator.js +171 -0
  75. package/dist/cost/CostEstimator.js.map +1 -0
  76. package/dist/cost/index.d.ts +4 -0
  77. package/dist/cost/index.js +3 -0
  78. package/dist/cost/index.js.map +1 -0
  79. package/dist/cost/pricing.d.ts +24 -0
  80. package/dist/cost/pricing.js +169 -0
  81. package/dist/cost/pricing.js.map +1 -0
  82. package/dist/defineNode.d.ts +155 -0
  83. package/dist/defineNode.js +191 -0
  84. package/dist/defineNode.js.map +1 -0
  85. package/dist/graphql/GraphQLSchemaGenerator.d.ts +129 -0
  86. package/dist/graphql/GraphQLSchemaGenerator.js +425 -0
  87. package/dist/graphql/GraphQLSchemaGenerator.js.map +1 -0
  88. package/dist/hmr/FileWatcher.d.ts +62 -0
  89. package/dist/hmr/FileWatcher.js +185 -0
  90. package/dist/hmr/FileWatcher.js.map +1 -0
  91. package/dist/hmr/HmrDevConsole.d.ts +13 -0
  92. package/dist/hmr/HmrDevConsole.js +46 -0
  93. package/dist/hmr/HmrDevConsole.js.map +1 -0
  94. package/dist/hmr/HotReloadManager.d.ts +84 -0
  95. package/dist/hmr/HotReloadManager.js +195 -0
  96. package/dist/hmr/HotReloadManager.js.map +1 -0
  97. package/dist/hmr/index.d.ts +39 -0
  98. package/dist/hmr/index.js +38 -0
  99. package/dist/hmr/index.js.map +1 -0
  100. package/dist/index.d.ts +107 -0
  101. package/dist/index.js +107 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/integrations/APMIntegration.d.ts +141 -0
  104. package/dist/integrations/APMIntegration.js +212 -0
  105. package/dist/integrations/APMIntegration.js.map +1 -0
  106. package/dist/integrations/AzureMonitorIntegration.d.ts +118 -0
  107. package/dist/integrations/AzureMonitorIntegration.js +254 -0
  108. package/dist/integrations/AzureMonitorIntegration.js.map +1 -0
  109. package/dist/integrations/CloudWatchIntegration.d.ts +135 -0
  110. package/dist/integrations/CloudWatchIntegration.js +293 -0
  111. package/dist/integrations/CloudWatchIntegration.js.map +1 -0
  112. package/dist/integrations/SentryIntegration.d.ts +153 -0
  113. package/dist/integrations/SentryIntegration.js +200 -0
  114. package/dist/integrations/SentryIntegration.js.map +1 -0
  115. package/dist/integrations/index.d.ts +19 -0
  116. package/dist/integrations/index.js +16 -0
  117. package/dist/integrations/index.js.map +1 -0
  118. package/dist/marketplace/RuntimeAutoScaler.d.ts +148 -0
  119. package/dist/marketplace/RuntimeAutoScaler.js +366 -0
  120. package/dist/marketplace/RuntimeAutoScaler.js.map +1 -0
  121. package/dist/marketplace/RuntimeCatalog.d.ts +174 -0
  122. package/dist/marketplace/RuntimeCatalog.js +339 -0
  123. package/dist/marketplace/RuntimeCatalog.js.map +1 -0
  124. package/dist/marketplace/RuntimeDiscovery.d.ts +86 -0
  125. package/dist/marketplace/RuntimeDiscovery.js +219 -0
  126. package/dist/marketplace/RuntimeDiscovery.js.map +1 -0
  127. package/dist/marketplace/RuntimeHealthMonitor.d.ts +100 -0
  128. package/dist/marketplace/RuntimeHealthMonitor.js +241 -0
  129. package/dist/marketplace/RuntimeHealthMonitor.js.map +1 -0
  130. package/dist/marketplace/RuntimeMetricsDashboard.d.ts +113 -0
  131. package/dist/marketplace/RuntimeMetricsDashboard.js +293 -0
  132. package/dist/marketplace/RuntimeMetricsDashboard.js.map +1 -0
  133. package/dist/monitoring/CircuitBreaker.d.ts +107 -0
  134. package/dist/monitoring/CircuitBreaker.js +238 -0
  135. package/dist/monitoring/CircuitBreaker.js.map +1 -0
  136. package/dist/monitoring/DistributedTracer.d.ts +125 -0
  137. package/dist/monitoring/DistributedTracer.js +230 -0
  138. package/dist/monitoring/DistributedTracer.js.map +1 -0
  139. package/dist/monitoring/HealthCheck.d.ts +54 -0
  140. package/dist/monitoring/HealthCheck.js +102 -0
  141. package/dist/monitoring/HealthCheck.js.map +1 -0
  142. package/dist/monitoring/PerformanceProfiler.d.ts +63 -0
  143. package/dist/monitoring/PerformanceProfiler.js +229 -0
  144. package/dist/monitoring/PerformanceProfiler.js.map +1 -0
  145. package/dist/monitoring/PrometheusBootstrap.d.ts +30 -0
  146. package/dist/monitoring/PrometheusBootstrap.js +71 -0
  147. package/dist/monitoring/PrometheusBootstrap.js.map +1 -0
  148. package/dist/monitoring/PrometheusMetricsBridge.d.ts +60 -0
  149. package/dist/monitoring/PrometheusMetricsBridge.js +216 -0
  150. package/dist/monitoring/PrometheusMetricsBridge.js.map +1 -0
  151. package/dist/monitoring/RateLimiter.d.ts +58 -0
  152. package/dist/monitoring/RateLimiter.js +128 -0
  153. package/dist/monitoring/RateLimiter.js.map +1 -0
  154. package/dist/monitoring/StructuredLogger.d.ts +131 -0
  155. package/dist/monitoring/StructuredLogger.js +207 -0
  156. package/dist/monitoring/StructuredLogger.js.map +1 -0
  157. package/dist/monitoring/TracingBootstrap.d.ts +69 -0
  158. package/dist/monitoring/TracingBootstrap.js +129 -0
  159. package/dist/monitoring/TracingBootstrap.js.map +1 -0
  160. package/dist/monitoring/TriggerMetricsCollector.d.ts +94 -0
  161. package/dist/monitoring/TriggerMetricsCollector.js +174 -0
  162. package/dist/monitoring/TriggerMetricsCollector.js.map +1 -0
  163. package/dist/monitoring/index.d.ts +9 -0
  164. package/dist/monitoring/index.js +10 -0
  165. package/dist/monitoring/index.js.map +1 -0
  166. package/dist/openapi/OpenAPIGenerator.d.ts +192 -0
  167. package/dist/openapi/OpenAPIGenerator.js +373 -0
  168. package/dist/openapi/OpenAPIGenerator.js.map +1 -0
  169. package/dist/openapi/index.d.ts +20 -0
  170. package/dist/openapi/index.js +20 -0
  171. package/dist/openapi/index.js.map +1 -0
  172. package/dist/security/ABAC.d.ts +224 -0
  173. package/dist/security/ABAC.js +380 -0
  174. package/dist/security/ABAC.js.map +1 -0
  175. package/dist/security/AuditLogger.d.ts +242 -0
  176. package/dist/security/AuditLogger.js +317 -0
  177. package/dist/security/AuditLogger.js.map +1 -0
  178. package/dist/security/AuthMiddleware.d.ts +163 -0
  179. package/dist/security/AuthMiddleware.js +274 -0
  180. package/dist/security/AuthMiddleware.js.map +1 -0
  181. package/dist/security/EncryptionAtRest.d.ts +206 -0
  182. package/dist/security/EncryptionAtRest.js +236 -0
  183. package/dist/security/EncryptionAtRest.js.map +1 -0
  184. package/dist/security/OAuthProvider.d.ts +334 -0
  185. package/dist/security/OAuthProvider.js +719 -0
  186. package/dist/security/OAuthProvider.js.map +1 -0
  187. package/dist/security/PIIDetector.d.ts +233 -0
  188. package/dist/security/PIIDetector.js +354 -0
  189. package/dist/security/PIIDetector.js.map +1 -0
  190. package/dist/security/RBAC.d.ts +143 -0
  191. package/dist/security/RBAC.js +285 -0
  192. package/dist/security/RBAC.js.map +1 -0
  193. package/dist/security/SecretManager.d.ts +652 -0
  194. package/dist/security/SecretManager.js +1146 -0
  195. package/dist/security/SecretManager.js.map +1 -0
  196. package/dist/security/TLSConfig.d.ts +305 -0
  197. package/dist/security/TLSConfig.js +550 -0
  198. package/dist/security/TLSConfig.js.map +1 -0
  199. package/dist/security/index.d.ts +79 -0
  200. package/dist/security/index.js +80 -0
  201. package/dist/security/index.js.map +1 -0
  202. package/dist/testing/TestHarness.d.ts +189 -0
  203. package/dist/testing/TestHarness.js +272 -0
  204. package/dist/testing/TestHarness.js.map +1 -0
  205. package/dist/testing/TestLogger.d.ts +103 -0
  206. package/dist/testing/TestLogger.js +153 -0
  207. package/dist/testing/TestLogger.js.map +1 -0
  208. package/dist/testing/WorkflowTestRunner.d.ts +172 -0
  209. package/dist/testing/WorkflowTestRunner.js +355 -0
  210. package/dist/testing/WorkflowTestRunner.js.map +1 -0
  211. package/dist/testing/index.d.ts +21 -0
  212. package/dist/testing/index.js +22 -0
  213. package/dist/testing/index.js.map +1 -0
  214. package/dist/tracing/InMemoryRunStore.d.ts +44 -0
  215. package/dist/tracing/InMemoryRunStore.js +341 -0
  216. package/dist/tracing/InMemoryRunStore.js.map +1 -0
  217. package/dist/tracing/PostgresRunStore.d.ts +82 -0
  218. package/dist/tracing/PostgresRunStore.js +640 -0
  219. package/dist/tracing/PostgresRunStore.js.map +1 -0
  220. package/dist/tracing/RunStore.d.ts +38 -0
  221. package/dist/tracing/RunStore.js +2 -0
  222. package/dist/tracing/RunStore.js.map +1 -0
  223. package/dist/tracing/RunTracker.d.ts +75 -0
  224. package/dist/tracing/RunTracker.js +374 -0
  225. package/dist/tracing/RunTracker.js.map +1 -0
  226. package/dist/tracing/SqliteRunStore.d.ts +53 -0
  227. package/dist/tracing/SqliteRunStore.js +703 -0
  228. package/dist/tracing/SqliteRunStore.js.map +1 -0
  229. package/dist/tracing/TraceRouter.d.ts +47 -0
  230. package/dist/tracing/TraceRouter.js +904 -0
  231. package/dist/tracing/TraceRouter.js.map +1 -0
  232. package/dist/tracing/TracingLogger.d.ts +21 -0
  233. package/dist/tracing/TracingLogger.js +62 -0
  234. package/dist/tracing/TracingLogger.js.map +1 -0
  235. package/dist/tracing/createStore.d.ts +30 -0
  236. package/dist/tracing/createStore.js +75 -0
  237. package/dist/tracing/createStore.js.map +1 -0
  238. package/dist/tracing/index.d.ts +13 -0
  239. package/dist/tracing/index.js +9 -0
  240. package/dist/tracing/index.js.map +1 -0
  241. package/dist/tracing/sanitize.d.ts +7 -0
  242. package/dist/tracing/sanitize.js +95 -0
  243. package/dist/tracing/sanitize.js.map +1 -0
  244. package/dist/tracing/types.d.ts +178 -0
  245. package/dist/tracing/types.js +3 -0
  246. package/dist/tracing/types.js.map +1 -0
  247. package/dist/types/Average.d.ts +11 -0
  248. package/dist/types/Average.js +2 -0
  249. package/dist/types/Average.js.map +1 -0
  250. package/dist/types/Condition.d.ts +8 -0
  251. package/dist/types/Condition.js +2 -0
  252. package/dist/types/Condition.js.map +1 -0
  253. package/dist/types/Conditions.d.ts +5 -0
  254. package/dist/types/Conditions.js +2 -0
  255. package/dist/types/Conditions.js.map +1 -0
  256. package/dist/types/Config.d.ts +12 -0
  257. package/dist/types/Config.js +2 -0
  258. package/dist/types/Config.js.map +1 -0
  259. package/dist/types/Flow.d.ts +5 -0
  260. package/dist/types/Flow.js +2 -0
  261. package/dist/types/Flow.js.map +1 -0
  262. package/dist/types/GlobalOptions.d.ts +11 -0
  263. package/dist/types/GlobalOptions.js +2 -0
  264. package/dist/types/GlobalOptions.js.map +1 -0
  265. package/dist/types/Inputs.d.ts +5 -0
  266. package/dist/types/Inputs.js +2 -0
  267. package/dist/types/Inputs.js.map +1 -0
  268. package/dist/types/JsonLikeObject.d.ts +3 -0
  269. package/dist/types/JsonLikeObject.js +2 -0
  270. package/dist/types/JsonLikeObject.js.map +1 -0
  271. package/dist/types/Mapper.d.ts +5 -0
  272. package/dist/types/Mapper.js +2 -0
  273. package/dist/types/Mapper.js.map +1 -0
  274. package/dist/types/Node.d.ts +10 -0
  275. package/dist/types/Node.js +2 -0
  276. package/dist/types/Node.js.map +1 -0
  277. package/dist/types/ParamsDictionary.d.ts +3 -0
  278. package/dist/types/ParamsDictionary.js +2 -0
  279. package/dist/types/ParamsDictionary.js.map +1 -0
  280. package/dist/types/Properties.d.ts +5 -0
  281. package/dist/types/Properties.js +2 -0
  282. package/dist/types/Properties.js.map +1 -0
  283. package/dist/types/Targets.d.ts +5 -0
  284. package/dist/types/Targets.js +2 -0
  285. package/dist/types/Targets.js.map +1 -0
  286. package/dist/types/Trigger.d.ts +5 -0
  287. package/dist/types/Trigger.js +2 -0
  288. package/dist/types/Trigger.js.map +1 -0
  289. package/dist/types/TriggerHttp.d.ts +7 -0
  290. package/dist/types/TriggerHttp.js +2 -0
  291. package/dist/types/TriggerHttp.js.map +1 -0
  292. package/dist/types/TriggerResponse.d.ts +6 -0
  293. package/dist/types/TriggerResponse.js +2 -0
  294. package/dist/types/TriggerResponse.js.map +1 -0
  295. package/dist/types/Triggers.d.ts +5 -0
  296. package/dist/types/Triggers.js +2 -0
  297. package/dist/types/Triggers.js.map +1 -0
  298. package/dist/types/TryCatch.d.ts +6 -0
  299. package/dist/types/TryCatch.js +2 -0
  300. package/dist/types/TryCatch.js.map +1 -0
  301. package/dist/visualization/NodeDependencyGraph.d.ts +76 -0
  302. package/dist/visualization/NodeDependencyGraph.js +418 -0
  303. package/dist/visualization/NodeDependencyGraph.js.map +1 -0
  304. package/dist/visualization/WorkflowVisualizer.d.ts +144 -0
  305. package/dist/visualization/WorkflowVisualizer.js +446 -0
  306. package/dist/visualization/WorkflowVisualizer.js.map +1 -0
  307. package/package.json +95 -0
@@ -0,0 +1,38 @@
1
+ import type { Dashboard, MetricsResult, NodeRun, RunEvent, RunQuery, TraceLogEntry, WorkflowRun, WorkflowSummary } from "./types";
2
+ /**
3
+ * Storage abstraction for trace data.
4
+ *
5
+ * All methods are synchronous — both the in-memory and better-sqlite3
6
+ * backends are inherently synchronous. A future async variant can be
7
+ * added for PostgreSQL / Prisma without changing this interface.
8
+ */
9
+ export interface RunStore {
10
+ saveRun(run: WorkflowRun): void;
11
+ updateRun(runId: string, updates: Partial<WorkflowRun>): void;
12
+ saveNodeRun(nodeRun: NodeRun): void;
13
+ updateNodeRun(nodeRunId: string, updates: Partial<NodeRun>): void;
14
+ saveEvent(event: RunEvent): void;
15
+ saveLog(entry: TraceLogEntry): void;
16
+ getRun(runId: string): WorkflowRun | undefined;
17
+ getRuns(opts?: RunQuery): {
18
+ runs: WorkflowRun[];
19
+ total: number;
20
+ };
21
+ getNodeRuns(runId: string): NodeRun[];
22
+ getNodeRun(nodeRunId: string): NodeRun | undefined;
23
+ getEvents(runId: string, since?: number): RunEvent[];
24
+ getLogs(runId: string, nodeId?: string): TraceLogEntry[];
25
+ getWorkflowSummaries(): WorkflowSummary[];
26
+ getAllTags(): string[];
27
+ getActiveRunCount(): number;
28
+ getMetrics(workflow?: string): MetricsResult;
29
+ saveDashboard(dashboard: Dashboard): void;
30
+ getDashboard(dashboardId: string): Dashboard | undefined;
31
+ listDashboards(): Dashboard[];
32
+ deleteDashboard(dashboardId: string): boolean;
33
+ updateDashboard(dashboardId: string, updates: Partial<Dashboard>): void;
34
+ clearAll(): number;
35
+ deleteRunsBefore(timestamp: number): number;
36
+ evictOldRuns(maxRuns: number): void;
37
+ close(): void;
38
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RunStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunStore.js","sourceRoot":"","sources":["../../src/tracing/RunStore.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { EventEmitter } from "node:events";
2
+ import type { RunStore } from "./RunStore";
3
+ import type { Dashboard, MetricsResult, NodeRun, RunEvent, StartNodeOptions, StartRunOptions, TraceLogEntry, WorkflowRun, WorkflowRunStatus, WorkflowSummary } from "./types";
4
+ /** Webhook registration for run event notifications. */
5
+ export interface Webhook {
6
+ id: string;
7
+ url: string;
8
+ events: string[];
9
+ secret?: string;
10
+ createdAt: number;
11
+ active: boolean;
12
+ lastTriggeredAt?: number;
13
+ lastStatus?: number;
14
+ failCount: number;
15
+ }
16
+ export declare class RunTracker extends EventEmitter {
17
+ private store;
18
+ private maxRuns;
19
+ private enabled;
20
+ private webhooks;
21
+ private static instance;
22
+ constructor(maxRuns?: number, store?: RunStore);
23
+ static getInstance(): RunTracker;
24
+ static resetInstance(): void;
25
+ /** The underlying store for direct access if needed. */
26
+ getStore(): RunStore;
27
+ /** Fast path: skip all work when tracing is disabled */
28
+ get active(): boolean;
29
+ startRun(opts: StartRunOptions): WorkflowRun;
30
+ completeRun(runId: string, data?: unknown): void;
31
+ failRun(runId: string, error: Error): void;
32
+ startNode(runId: string, opts: StartNodeOptions): NodeRun;
33
+ completeNode(nodeRunId: string, outputs?: unknown, nodeMetrics?: NodeRun["metrics"]): void;
34
+ failNode(nodeRunId: string, error: Error): void;
35
+ skipNode(runId: string, nodeName: string, stepIndex: number, reason?: string): void;
36
+ addLog(entry: Omit<TraceLogEntry, "id" | "timestamp">): void;
37
+ trackVarsUpdate(runId: string, nodeName: string, nodeId: string | undefined, vars: Record<string, unknown>): void;
38
+ getRun(runId: string): WorkflowRun | undefined;
39
+ getRuns(opts?: {
40
+ workflow?: string;
41
+ status?: WorkflowRunStatus;
42
+ tags?: string[];
43
+ limit?: number;
44
+ offset?: number;
45
+ sort?: "asc" | "desc";
46
+ }): {
47
+ runs: WorkflowRun[];
48
+ total: number;
49
+ };
50
+ getNodeRuns(runId: string): NodeRun[];
51
+ getNodeRun(nodeRunId: string): NodeRun | undefined;
52
+ getEvents(runId: string, since?: number): RunEvent[];
53
+ getLogs(runId: string, nodeId?: string): TraceLogEntry[];
54
+ getWorkflowSummaries(): WorkflowSummary[];
55
+ addTag(runId: string, tag: string): boolean;
56
+ removeTag(runId: string, tag: string): boolean;
57
+ getAllTags(): string[];
58
+ getMetrics(workflow?: string): MetricsResult;
59
+ getActiveRunCount(): number;
60
+ clearAll(): number;
61
+ saveDashboard(dashboard: Dashboard): void;
62
+ getDashboard(dashboardId: string): Dashboard | undefined;
63
+ listDashboards(): Dashboard[];
64
+ deleteDashboard(dashboardId: string): boolean;
65
+ updateDashboard(dashboardId: string, updates: Partial<Dashboard>): void;
66
+ registerWebhook(opts: {
67
+ url: string;
68
+ events: string[];
69
+ secret?: string;
70
+ }): Webhook;
71
+ removeWebhook(id: string): boolean;
72
+ getWebhooks(): Webhook[];
73
+ private emitEvent;
74
+ private fireWebhooks;
75
+ }
@@ -0,0 +1,374 @@
1
+ import crypto from "node:crypto";
2
+ import { EventEmitter } from "node:events";
3
+ import http from "node:http";
4
+ import https from "node:https";
5
+ import { v4 as uuid } from "uuid";
6
+ import { InMemoryRunStore } from "./InMemoryRunStore";
7
+ import { createStore } from "./createStore";
8
+ export class RunTracker extends EventEmitter {
9
+ store;
10
+ maxRuns;
11
+ enabled;
12
+ webhooks = new Map();
13
+ static instance = null;
14
+ constructor(maxRuns, store) {
15
+ super();
16
+ this.setMaxListeners(100);
17
+ this.maxRuns = maxRuns ?? Number.parseInt(process.env.BLOK_TRACE_MAX_RUNS || "1000", 10);
18
+ this.enabled = process.env.BLOK_TRACE_ENABLED !== "false";
19
+ this.store = store ?? new InMemoryRunStore();
20
+ }
21
+ static getInstance() {
22
+ if (!RunTracker.instance) {
23
+ const store = createStore();
24
+ RunTracker.instance = new RunTracker(undefined, store);
25
+ }
26
+ return RunTracker.instance;
27
+ }
28
+ static resetInstance() {
29
+ if (RunTracker.instance) {
30
+ RunTracker.instance.store.close();
31
+ }
32
+ RunTracker.instance = null;
33
+ }
34
+ /** The underlying store for direct access if needed. */
35
+ getStore() {
36
+ return this.store;
37
+ }
38
+ /** Fast path: skip all work when tracing is disabled */
39
+ get active() {
40
+ return this.enabled;
41
+ }
42
+ // === Workflow Lifecycle ===
43
+ startRun(opts) {
44
+ const run = {
45
+ id: `run_${uuid().replace(/-/g, "").slice(0, 12)}`,
46
+ workflowName: opts.workflowName,
47
+ workflowPath: opts.workflowPath,
48
+ triggerType: opts.triggerType,
49
+ triggerSummary: opts.triggerSummary,
50
+ status: "running",
51
+ startedAt: Date.now(),
52
+ nodeCount: opts.nodeCount,
53
+ completedNodes: 0,
54
+ tags: opts.tags,
55
+ metadata: opts.metadata,
56
+ };
57
+ this.store.saveRun(run);
58
+ this.emitEvent(run.id, run.workflowName, "RUN_STARTED", undefined, undefined, {
59
+ workflowName: run.workflowName,
60
+ triggerType: run.triggerType,
61
+ triggerSummary: run.triggerSummary,
62
+ nodeCount: run.nodeCount,
63
+ });
64
+ this.store.evictOldRuns(this.maxRuns);
65
+ return run;
66
+ }
67
+ completeRun(runId, data) {
68
+ const run = this.store.getRun(runId);
69
+ if (!run)
70
+ return;
71
+ const finishedAt = Date.now();
72
+ const durationMs = finishedAt - run.startedAt;
73
+ this.store.updateRun(runId, {
74
+ status: "completed",
75
+ finishedAt,
76
+ durationMs,
77
+ });
78
+ this.emitEvent(runId, run.workflowName, "RUN_COMPLETED", undefined, undefined, {
79
+ durationMs,
80
+ completedNodes: run.completedNodes,
81
+ data,
82
+ });
83
+ }
84
+ failRun(runId, error) {
85
+ const run = this.store.getRun(runId);
86
+ if (!run)
87
+ return;
88
+ const finishedAt = Date.now();
89
+ const durationMs = finishedAt - run.startedAt;
90
+ this.store.updateRun(runId, {
91
+ status: "failed",
92
+ finishedAt,
93
+ durationMs,
94
+ error: {
95
+ message: error.message,
96
+ stack: error.stack,
97
+ },
98
+ });
99
+ this.emitEvent(runId, run.workflowName, "RUN_FAILED", undefined, undefined, {
100
+ durationMs,
101
+ error: { message: error.message, stack: error.stack },
102
+ });
103
+ }
104
+ // === Node Lifecycle ===
105
+ startNode(runId, opts) {
106
+ const nodeRun = {
107
+ id: `node_${uuid().replace(/-/g, "").slice(0, 12)}`,
108
+ runId,
109
+ nodeName: opts.nodeName,
110
+ nodeType: opts.nodeType,
111
+ runtimeKind: opts.runtimeKind,
112
+ status: "running",
113
+ startedAt: Date.now(),
114
+ inputs: opts.inputs,
115
+ parentNodeId: opts.parentNodeId,
116
+ depth: opts.depth,
117
+ stepIndex: opts.stepIndex,
118
+ };
119
+ this.store.saveNodeRun(nodeRun);
120
+ const run = this.store.getRun(runId);
121
+ this.emitEvent(runId, run?.workflowName || "", "NODE_STARTED", opts.nodeName, nodeRun.id, {
122
+ nodeType: opts.nodeType,
123
+ runtimeKind: opts.runtimeKind,
124
+ stepIndex: opts.stepIndex,
125
+ depth: opts.depth,
126
+ });
127
+ return nodeRun;
128
+ }
129
+ completeNode(nodeRunId, outputs, nodeMetrics) {
130
+ const nodeRun = this.store.getNodeRun(nodeRunId);
131
+ if (!nodeRun)
132
+ return;
133
+ const finishedAt = Date.now();
134
+ const durationMs = finishedAt - nodeRun.startedAt;
135
+ this.store.updateNodeRun(nodeRunId, {
136
+ status: "completed",
137
+ finishedAt,
138
+ durationMs,
139
+ outputs,
140
+ metrics: nodeMetrics,
141
+ });
142
+ const run = this.store.getRun(nodeRun.runId);
143
+ if (run) {
144
+ this.store.updateRun(nodeRun.runId, {
145
+ completedNodes: run.completedNodes + 1,
146
+ });
147
+ }
148
+ this.emitEvent(nodeRun.runId, run?.workflowName || "", "NODE_COMPLETED", nodeRun.nodeName, nodeRunId, {
149
+ durationMs,
150
+ metrics: nodeMetrics,
151
+ });
152
+ }
153
+ failNode(nodeRunId, error) {
154
+ const nodeRun = this.store.getNodeRun(nodeRunId);
155
+ if (!nodeRun)
156
+ return;
157
+ const finishedAt = Date.now();
158
+ const durationMs = finishedAt - nodeRun.startedAt;
159
+ this.store.updateNodeRun(nodeRunId, {
160
+ status: "failed",
161
+ finishedAt,
162
+ durationMs,
163
+ error: {
164
+ message: error.message,
165
+ stack: error.stack,
166
+ },
167
+ });
168
+ const run = this.store.getRun(nodeRun.runId);
169
+ this.emitEvent(nodeRun.runId, run?.workflowName || "", "NODE_FAILED", nodeRun.nodeName, nodeRunId, {
170
+ durationMs,
171
+ error: { message: error.message, stack: error.stack },
172
+ });
173
+ }
174
+ skipNode(runId, nodeName, stepIndex, reason) {
175
+ const run = this.store.getRun(runId);
176
+ this.emitEvent(runId, run?.workflowName || "", "NODE_SKIPPED", nodeName, undefined, {
177
+ reason,
178
+ stepIndex,
179
+ });
180
+ }
181
+ // === Logging ===
182
+ addLog(entry) {
183
+ const log = {
184
+ id: `log_${uuid().replace(/-/g, "").slice(0, 12)}`,
185
+ ...entry,
186
+ timestamp: Date.now(),
187
+ };
188
+ this.store.saveLog(log);
189
+ const run = this.store.getRun(entry.runId);
190
+ this.emitEvent(entry.runId, run?.workflowName || "", "LOG_ENTRY", entry.nodeName, entry.nodeId, {
191
+ level: entry.level,
192
+ message: entry.message,
193
+ data: entry.data,
194
+ });
195
+ }
196
+ // === Vars Updated ===
197
+ trackVarsUpdate(runId, nodeName, nodeId, vars) {
198
+ const run = this.store.getRun(runId);
199
+ this.emitEvent(runId, run?.workflowName || "", "VARS_UPDATED", nodeName, nodeId, { vars });
200
+ }
201
+ // === Queries (delegated to store) ===
202
+ getRun(runId) {
203
+ return this.store.getRun(runId);
204
+ }
205
+ getRuns(opts) {
206
+ return this.store.getRuns(opts);
207
+ }
208
+ getNodeRuns(runId) {
209
+ return this.store.getNodeRuns(runId);
210
+ }
211
+ getNodeRun(nodeRunId) {
212
+ return this.store.getNodeRun(nodeRunId);
213
+ }
214
+ getEvents(runId, since) {
215
+ return this.store.getEvents(runId, since);
216
+ }
217
+ getLogs(runId, nodeId) {
218
+ return this.store.getLogs(runId, nodeId);
219
+ }
220
+ // === Metadata (delegated to store) ===
221
+ getWorkflowSummaries() {
222
+ return this.store.getWorkflowSummaries();
223
+ }
224
+ // === Tags ===
225
+ addTag(runId, tag) {
226
+ const run = this.store.getRun(runId);
227
+ if (!run)
228
+ return false;
229
+ const tags = run.tags || [];
230
+ if (tags.includes(tag))
231
+ return false;
232
+ tags.push(tag);
233
+ this.store.updateRun(runId, { tags });
234
+ return true;
235
+ }
236
+ removeTag(runId, tag) {
237
+ const run = this.store.getRun(runId);
238
+ if (!run || !run.tags)
239
+ return false;
240
+ const idx = run.tags.indexOf(tag);
241
+ if (idx === -1)
242
+ return false;
243
+ const tags = [...run.tags];
244
+ tags.splice(idx, 1);
245
+ this.store.updateRun(runId, { tags });
246
+ return true;
247
+ }
248
+ getAllTags() {
249
+ return this.store.getAllTags();
250
+ }
251
+ // === Metrics Aggregation (delegated to store) ===
252
+ getMetrics(workflow) {
253
+ return this.store.getMetrics(workflow);
254
+ }
255
+ // === Utility ===
256
+ getActiveRunCount() {
257
+ return this.store.getActiveRunCount();
258
+ }
259
+ clearAll() {
260
+ return this.store.clearAll();
261
+ }
262
+ // === Dashboards (delegated to store) ===
263
+ saveDashboard(dashboard) {
264
+ this.store.saveDashboard(dashboard);
265
+ }
266
+ getDashboard(dashboardId) {
267
+ return this.store.getDashboard(dashboardId);
268
+ }
269
+ listDashboards() {
270
+ return this.store.listDashboards();
271
+ }
272
+ deleteDashboard(dashboardId) {
273
+ return this.store.deleteDashboard(dashboardId);
274
+ }
275
+ updateDashboard(dashboardId, updates) {
276
+ this.store.updateDashboard(dashboardId, updates);
277
+ }
278
+ // === Webhooks ===
279
+ registerWebhook(opts) {
280
+ const webhook = {
281
+ id: `wh_${uuid().replace(/-/g, "").slice(0, 12)}`,
282
+ url: opts.url,
283
+ events: opts.events,
284
+ secret: opts.secret,
285
+ createdAt: Date.now(),
286
+ active: true,
287
+ failCount: 0,
288
+ };
289
+ this.webhooks.set(webhook.id, webhook);
290
+ return webhook;
291
+ }
292
+ removeWebhook(id) {
293
+ return this.webhooks.delete(id);
294
+ }
295
+ getWebhooks() {
296
+ return Array.from(this.webhooks.values());
297
+ }
298
+ // === Internal ===
299
+ emitEvent(runId, workflowName, type, nodeName, nodeId, payload) {
300
+ const event = {
301
+ id: `evt_${uuid().replace(/-/g, "").slice(0, 12)}`,
302
+ type,
303
+ runId,
304
+ workflowName,
305
+ timestamp: Date.now(),
306
+ nodeName,
307
+ nodeId,
308
+ payload,
309
+ };
310
+ this.store.saveEvent(event);
311
+ this.emit("event", event);
312
+ this.emit(type, event);
313
+ // Fire webhooks for relevant events
314
+ this.fireWebhooks(event);
315
+ }
316
+ fireWebhooks(event) {
317
+ const eventMap = {
318
+ RUN_STARTED: "run.started",
319
+ RUN_COMPLETED: "run.completed",
320
+ RUN_FAILED: "run.failed",
321
+ };
322
+ const webhookEvent = eventMap[event.type];
323
+ if (!webhookEvent)
324
+ return;
325
+ for (const webhook of this.webhooks.values()) {
326
+ if (!webhook.active)
327
+ continue;
328
+ if (!webhook.events.includes(webhookEvent))
329
+ continue;
330
+ const body = JSON.stringify({
331
+ event: webhookEvent,
332
+ timestamp: event.timestamp,
333
+ run: this.store.getRun(event.runId),
334
+ webhookId: webhook.id,
335
+ });
336
+ const headers = { "Content-Type": "application/json" };
337
+ if (webhook.secret) {
338
+ headers["X-Blok-Signature"] = crypto.createHmac("sha256", webhook.secret).update(body).digest("hex");
339
+ }
340
+ // Fire-and-forget HTTP POST
341
+ const parsed = new URL(webhook.url);
342
+ const client = parsed.protocol === "https:" ? https : http;
343
+ const req = client.request({
344
+ hostname: parsed.hostname,
345
+ port: parsed.port,
346
+ path: parsed.pathname + parsed.search,
347
+ method: "POST",
348
+ headers,
349
+ timeout: 5000,
350
+ }, (res) => {
351
+ webhook.lastTriggeredAt = Date.now();
352
+ webhook.lastStatus = res.statusCode;
353
+ if (res.statusCode && res.statusCode >= 400) {
354
+ webhook.failCount++;
355
+ if (webhook.failCount >= 10)
356
+ webhook.active = false;
357
+ }
358
+ else {
359
+ webhook.failCount = 0;
360
+ }
361
+ res.resume(); // consume body
362
+ });
363
+ req.on("error", () => {
364
+ webhook.lastTriggeredAt = Date.now();
365
+ webhook.failCount++;
366
+ if (webhook.failCount >= 10)
367
+ webhook.active = false;
368
+ });
369
+ req.write(body);
370
+ req.end();
371
+ }
372
+ }
373
+ }
374
+ //# sourceMappingURL=RunTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunTracker.js","sourceRoot":"","sources":["../../src/tracing/RunTracker.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA4B5C,MAAM,OAAO,UAAW,SAAQ,YAAY;IACnC,KAAK,CAAW;IAChB,OAAO,CAAS;IAChB,OAAO,CAAU;IACjB,QAAQ,GAAyB,IAAI,GAAG,EAAE,CAAC;IAE3C,MAAM,CAAC,QAAQ,GAAsB,IAAI,CAAC;IAElD,YAAY,OAAgB,EAAE,KAAgB;QAC7C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,OAAO,CAAC;QAC1D,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,gBAAgB,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,WAAW;QACjB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;YAC5B,UAAU,CAAC,QAAQ,GAAG,IAAI,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,aAAa;QACnB,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACzB,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnC,CAAC;QACD,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,wDAAwD;IACxD,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,wDAAwD;IACxD,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,6BAA6B;IAE7B,QAAQ,CAAC,IAAqB;QAC7B,MAAM,GAAG,GAAgB;YACxB,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YAClD,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,cAAc,EAAE,CAAC;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACvB,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAExB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE;YAC7E,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,SAAS,EAAE,GAAG,CAAC,SAAS;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,IAAc;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC;QAE9C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;YAC3B,MAAM,EAAE,WAAW;YACnB,UAAU;YACV,UAAU;SACV,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE;YAC9E,UAAU;YACV,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,IAAI;SACJ,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,KAAY;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC;QAE9C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;YAC3B,MAAM,EAAE,QAAQ;YAChB,UAAU;YACV,UAAU;YACV,KAAK,EAAE;gBACN,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;aAClB;SACD,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE;YAC3E,UAAU;YACV,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;SACrD,CAAC,CAAC;IACJ,CAAC;IAED,yBAAyB;IAEzB,SAAS,CAAC,KAAa,EAAE,IAAsB;QAC9C,MAAM,OAAO,GAAY;YACxB,EAAE,EAAE,QAAQ,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YACnD,KAAK;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;SACzB,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,IAAI,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE;YACzF,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;SACjB,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,YAAY,CAAC,SAAiB,EAAE,OAAiB,EAAE,WAAgC;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;QAElD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE;YACnC,MAAM,EAAE,WAAW;YACnB,UAAU;YACV,UAAU;YACV,OAAO;YACP,OAAO,EAAE,WAAW;SACpB,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,GAAG,EAAE,CAAC;YACT,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE;gBACnC,cAAc,EAAE,GAAG,CAAC,cAAc,GAAG,CAAC;aACtC,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,IAAI,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE;YACrG,UAAU;YACV,OAAO,EAAE,WAAW;SACpB,CAAC,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,SAAiB,EAAE,KAAY;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;QAElD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE;YACnC,MAAM,EAAE,QAAQ;YAChB,UAAU;YACV,UAAU;YACV,KAAK,EAAE;gBACN,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;aAClB;SACD,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,IAAI,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE;YAClG,UAAU;YACV,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;SACrD,CAAC,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,KAAa,EAAE,QAAgB,EAAE,SAAiB,EAAE,MAAe;QAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,IAAI,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE;YACnF,MAAM;YACN,SAAS;SACT,CAAC,CAAC;IACJ,CAAC;IAED,kBAAkB;IAElB,MAAM,CAAC,KAA8C;QACpD,MAAM,GAAG,GAAkB;YAC1B,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YAClD,GAAG,KAAK;YACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACrB,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAExB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE;YAC/F,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;SAChB,CAAC,CAAC;IACJ,CAAC;IAED,uBAAuB;IAEvB,eAAe,CAAC,KAAa,EAAE,QAAgB,EAAE,MAA0B,EAAE,IAA6B;QACzG,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,IAAI,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,uCAAuC;IAEvC,MAAM,CAAC,KAAa;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,IAOP;QACA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,WAAW,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,UAAU,CAAC,SAAiB;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,SAAS,CAAC,KAAa,EAAE,KAAc;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,MAAe;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,wCAAwC;IAExC,oBAAoB;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;IAC1C,CAAC;IAED,eAAe;IAEf,MAAM,CAAC,KAAa,EAAE,GAAW;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,SAAS,CAAC,KAAa,EAAE,GAAW;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACpC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7B,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,UAAU;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAED,mDAAmD;IAEnD,UAAU,CAAC,QAAiB;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,kBAAkB;IAElB,iBAAiB;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;IACvC,CAAC;IAED,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,0CAA0C;IAE1C,aAAa,CAAC,SAAoB;QACjC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,YAAY,CAAC,WAAmB;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;IACpC,CAAC;IAED,eAAe,CAAC,WAAmB;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC;IAED,eAAe,CAAC,WAAmB,EAAE,OAA2B;QAC/D,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,mBAAmB;IAEnB,eAAe,CAAC,IAAwD;QACvE,MAAM,OAAO,GAAY;YACxB,EAAE,EAAE,MAAM,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YACjD,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,CAAC;SACZ,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,aAAa,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,WAAW;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,mBAAmB;IAEX,SAAS,CAChB,KAAa,EACb,YAAoB,EACpB,IAAkB,EAClB,QAAiB,EACjB,MAAe,EACf,OAAiB;QAEjB,MAAM,KAAK,GAAa;YACvB,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YAClD,IAAI;YACJ,KAAK;YACL,YAAY;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,QAAQ;YACR,MAAM;YACN,OAAO;SACP,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEvB,oCAAoC;QACpC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAEO,YAAY,CAAC,KAAe;QACnC,MAAM,QAAQ,GAA2B;YACxC,WAAW,EAAE,aAAa;YAC1B,aAAa,EAAE,eAAe;YAC9B,UAAU,EAAE,YAAY;SACxB,CAAC;QACF,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY;YAAE,OAAO;QAE1B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,SAAS;YAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAAE,SAAS;YAErD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,YAAY;gBACnB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;gBACnC,SAAS,EAAE,OAAO,CAAC,EAAE;aACrB,CAAC,CAAC;YAEH,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;YAC/E,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtG,CAAC;YAED,4BAA4B;YAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YAE3D,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CACzB;gBACC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM;gBACrC,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,OAAO,EAAE,IAAI;aACb,EACD,CAAC,GAAG,EAAE,EAAE;gBACP,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACrC,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;gBACpC,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;oBAC7C,OAAO,CAAC,SAAS,EAAE,CAAC;oBACpB,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE;wBAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;gBACrD,CAAC;qBAAM,CAAC;oBACP,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;gBACvB,CAAC;gBACD,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,eAAe;YAC9B,CAAC,CACD,CAAC;YAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACrC,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE;oBAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChB,GAAG,CAAC,GAAG,EAAE,CAAC;QACX,CAAC;IACF,CAAC"}
@@ -0,0 +1,53 @@
1
+ import type { RunStore } from "./RunStore";
2
+ import type { Dashboard, MetricsResult, NodeRun, RunEvent, RunQuery, TraceLogEntry, WorkflowRun, WorkflowSummary } from "./types";
3
+ /**
4
+ * SQLite-backed RunStore supporting both bun:sqlite and better-sqlite3.
5
+ *
6
+ * When running under Bun, uses the built-in bun:sqlite module for
7
+ * optimal performance. Falls back to better-sqlite3 under Node.js.
8
+ *
9
+ * Provides persistent trace storage that survives process restarts.
10
+ * All operations are synchronous.
11
+ *
12
+ * Schema is auto-migrated on construction via a versioned migration system.
13
+ */
14
+ export declare class SqliteRunStore implements RunStore {
15
+ private db;
16
+ private stmts;
17
+ constructor(dbPath?: string);
18
+ private migrate;
19
+ private stmt;
20
+ saveRun(run: WorkflowRun): void;
21
+ updateRun(runId: string, updates: Partial<WorkflowRun>): void;
22
+ saveNodeRun(nodeRun: NodeRun): void;
23
+ updateNodeRun(nodeRunId: string, updates: Partial<NodeRun>): void;
24
+ saveEvent(event: RunEvent): void;
25
+ saveLog(entry: TraceLogEntry): void;
26
+ getRun(runId: string): WorkflowRun | undefined;
27
+ getRuns(opts?: RunQuery): {
28
+ runs: WorkflowRun[];
29
+ total: number;
30
+ };
31
+ getNodeRuns(runId: string): NodeRun[];
32
+ getNodeRun(nodeRunId: string): NodeRun | undefined;
33
+ getEvents(runId: string, since?: number): RunEvent[];
34
+ getLogs(runId: string, nodeId?: string): TraceLogEntry[];
35
+ getWorkflowSummaries(): WorkflowSummary[];
36
+ getAllTags(): string[];
37
+ getActiveRunCount(): number;
38
+ getMetrics(workflow?: string): MetricsResult;
39
+ saveDashboard(dashboard: Dashboard): void;
40
+ getDashboard(dashboardId: string): Dashboard | undefined;
41
+ listDashboards(): Dashboard[];
42
+ deleteDashboard(dashboardId: string): boolean;
43
+ updateDashboard(dashboardId: string, updates: Partial<Dashboard>): void;
44
+ clearAll(): number;
45
+ deleteRunsBefore(timestamp: number): number;
46
+ evictOldRuns(maxRuns: number): void;
47
+ close(): void;
48
+ private rowToRun;
49
+ private rowToNodeRun;
50
+ private rowToEvent;
51
+ private rowToLog;
52
+ private rowToDashboard;
53
+ }