@adonis-agora/durable 0.1.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 (316) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -0
  3. package/dist/assets/dashboard.html +446 -0
  4. package/dist/commands/main.d.ts +15 -0
  5. package/dist/commands/main.d.ts.map +1 -0
  6. package/dist/commands/main.js +15 -0
  7. package/dist/commands/main.js.map +1 -0
  8. package/dist/commands/retry.d.ts +16 -0
  9. package/dist/commands/retry.d.ts.map +1 -0
  10. package/dist/commands/retry.js +34 -0
  11. package/dist/commands/retry.js.map +1 -0
  12. package/dist/commands/runs.d.ts +17 -0
  13. package/dist/commands/runs.d.ts.map +1 -0
  14. package/dist/commands/runs.js +40 -0
  15. package/dist/commands/runs.js.map +1 -0
  16. package/dist/commands/work.d.ts +18 -0
  17. package/dist/commands/work.d.ts.map +1 -0
  18. package/dist/commands/work.js +58 -0
  19. package/dist/commands/work.js.map +1 -0
  20. package/dist/configure.d.ts +15 -0
  21. package/dist/configure.d.ts.map +1 -0
  22. package/dist/configure.js +26 -0
  23. package/dist/configure.js.map +1 -0
  24. package/dist/providers/dashboard_provider.d.ts +27 -0
  25. package/dist/providers/dashboard_provider.d.ts.map +1 -0
  26. package/dist/providers/dashboard_provider.js +94 -0
  27. package/dist/providers/dashboard_provider.js.map +1 -0
  28. package/dist/providers/durable_provider.d.ts +36 -0
  29. package/dist/providers/durable_provider.d.ts.map +1 -0
  30. package/dist/providers/durable_provider.js +113 -0
  31. package/dist/providers/durable_provider.js.map +1 -0
  32. package/dist/src/admission-redis/index.d.ts +2 -0
  33. package/dist/src/admission-redis/index.d.ts.map +1 -0
  34. package/dist/src/admission-redis/index.js +2 -0
  35. package/dist/src/admission-redis/index.js.map +1 -0
  36. package/dist/src/admission-redis/redis-admission-backend.d.ts +83 -0
  37. package/dist/src/admission-redis/redis-admission-backend.d.ts.map +1 -0
  38. package/dist/src/admission-redis/redis-admission-backend.js +200 -0
  39. package/dist/src/admission-redis/redis-admission-backend.js.map +1 -0
  40. package/dist/src/admission.d.ts +49 -0
  41. package/dist/src/admission.d.ts.map +1 -0
  42. package/dist/src/admission.js +30 -0
  43. package/dist/src/admission.js.map +1 -0
  44. package/dist/src/backoff.d.ts +5 -0
  45. package/dist/src/backoff.d.ts.map +1 -0
  46. package/dist/src/backoff.js +11 -0
  47. package/dist/src/backoff.js.map +1 -0
  48. package/dist/src/checkpoints.d.ts +42 -0
  49. package/dist/src/checkpoints.d.ts.map +1 -0
  50. package/dist/src/checkpoints.js +57 -0
  51. package/dist/src/checkpoints.js.map +1 -0
  52. package/dist/src/codec-state-store.d.ts +60 -0
  53. package/dist/src/codec-state-store.d.ts.map +1 -0
  54. package/dist/src/codec-state-store.js +129 -0
  55. package/dist/src/codec-state-store.js.map +1 -0
  56. package/dist/src/commands/index.d.ts +3 -0
  57. package/dist/src/commands/index.d.ts.map +1 -0
  58. package/dist/src/commands/index.js +3 -0
  59. package/dist/src/commands/index.js.map +1 -0
  60. package/dist/src/commands/runs.d.ts +24 -0
  61. package/dist/src/commands/runs.d.ts.map +1 -0
  62. package/dist/src/commands/runs.js +39 -0
  63. package/dist/src/commands/runs.js.map +1 -0
  64. package/dist/src/commands/worker.d.ts +61 -0
  65. package/dist/src/commands/worker.d.ts.map +1 -0
  66. package/dist/src/commands/worker.js +74 -0
  67. package/dist/src/commands/worker.js.map +1 -0
  68. package/dist/src/completion.d.ts +15 -0
  69. package/dist/src/completion.d.ts.map +1 -0
  70. package/dist/src/completion.js +10 -0
  71. package/dist/src/completion.js.map +1 -0
  72. package/dist/src/dashboard/define_config.d.ts +48 -0
  73. package/dist/src/dashboard/define_config.d.ts.map +1 -0
  74. package/dist/src/dashboard/define_config.js +57 -0
  75. package/dist/src/dashboard/define_config.js.map +1 -0
  76. package/dist/src/dashboard/handlers.d.ts +47 -0
  77. package/dist/src/dashboard/handlers.d.ts.map +1 -0
  78. package/dist/src/dashboard/handlers.js +163 -0
  79. package/dist/src/dashboard/handlers.js.map +1 -0
  80. package/dist/src/dashboard/html.d.ts +7 -0
  81. package/dist/src/dashboard/html.d.ts.map +1 -0
  82. package/dist/src/dashboard/html.js +24 -0
  83. package/dist/src/dashboard/html.js.map +1 -0
  84. package/dist/src/dashboard/index.d.ts +8 -0
  85. package/dist/src/dashboard/index.d.ts.map +1 -0
  86. package/dist/src/dashboard/index.js +6 -0
  87. package/dist/src/dashboard/index.js.map +1 -0
  88. package/dist/src/define_config.d.ts +72 -0
  89. package/dist/src/define_config.d.ts.map +1 -0
  90. package/dist/src/define_config.js +8 -0
  91. package/dist/src/define_config.js.map +1 -0
  92. package/dist/src/diagnostics-bridge.d.ts +22 -0
  93. package/dist/src/diagnostics-bridge.d.ts.map +1 -0
  94. package/dist/src/diagnostics-bridge.js +25 -0
  95. package/dist/src/diagnostics-bridge.js.map +1 -0
  96. package/dist/src/duration.d.ts +6 -0
  97. package/dist/src/duration.d.ts.map +1 -0
  98. package/dist/src/duration.js +39 -0
  99. package/dist/src/duration.js.map +1 -0
  100. package/dist/src/engine.d.ts +583 -0
  101. package/dist/src/engine.d.ts.map +1 -0
  102. package/dist/src/engine.js +1894 -0
  103. package/dist/src/engine.js.map +1 -0
  104. package/dist/src/entities.d.ts +44 -0
  105. package/dist/src/entities.d.ts.map +1 -0
  106. package/dist/src/entities.js +64 -0
  107. package/dist/src/entities.js.map +1 -0
  108. package/dist/src/errors.d.ts +68 -0
  109. package/dist/src/errors.d.ts.map +1 -0
  110. package/dist/src/errors.js +102 -0
  111. package/dist/src/errors.js.map +1 -0
  112. package/dist/src/event-accumulators.d.ts +39 -0
  113. package/dist/src/event-accumulators.d.ts.map +1 -0
  114. package/dist/src/event-accumulators.js +70 -0
  115. package/dist/src/event-accumulators.js.map +1 -0
  116. package/dist/src/events.d.ts +9 -0
  117. package/dist/src/events.d.ts.map +1 -0
  118. package/dist/src/events.js +35 -0
  119. package/dist/src/events.js.map +1 -0
  120. package/dist/src/index.d.ts +36 -0
  121. package/dist/src/index.d.ts.map +1 -0
  122. package/dist/src/index.js +37 -0
  123. package/dist/src/index.js.map +1 -0
  124. package/dist/src/interfaces.d.ts +909 -0
  125. package/dist/src/interfaces.d.ts.map +1 -0
  126. package/dist/src/interfaces.js +2 -0
  127. package/dist/src/interfaces.js.map +1 -0
  128. package/dist/src/metrics.d.ts +44 -0
  129. package/dist/src/metrics.d.ts.map +1 -0
  130. package/dist/src/metrics.js +78 -0
  131. package/dist/src/metrics.js.map +1 -0
  132. package/dist/src/otel/durable-metrics.d.ts +42 -0
  133. package/dist/src/otel/durable-metrics.d.ts.map +1 -0
  134. package/dist/src/otel/durable-metrics.js +75 -0
  135. package/dist/src/otel/durable-metrics.js.map +1 -0
  136. package/dist/src/otel/durable-otel.d.ts +20 -0
  137. package/dist/src/otel/durable-otel.d.ts.map +1 -0
  138. package/dist/src/otel/durable-otel.js +74 -0
  139. package/dist/src/otel/durable-otel.js.map +1 -0
  140. package/dist/src/otel/index.d.ts +4 -0
  141. package/dist/src/otel/index.d.ts.map +1 -0
  142. package/dist/src/otel/index.js +4 -0
  143. package/dist/src/otel/index.js.map +1 -0
  144. package/dist/src/otel/traceparent.d.ts +17 -0
  145. package/dist/src/otel/traceparent.d.ts.map +1 -0
  146. package/dist/src/otel/traceparent.js +21 -0
  147. package/dist/src/otel/traceparent.js.map +1 -0
  148. package/dist/src/pollers.d.ts +33 -0
  149. package/dist/src/pollers.d.ts.map +1 -0
  150. package/dist/src/pollers.js +76 -0
  151. package/dist/src/pollers.js.map +1 -0
  152. package/dist/src/protocol.d.ts +17 -0
  153. package/dist/src/protocol.d.ts.map +1 -0
  154. package/dist/src/protocol.js +47 -0
  155. package/dist/src/protocol.js.map +1 -0
  156. package/dist/src/queue.d.ts +113 -0
  157. package/dist/src/queue.d.ts.map +1 -0
  158. package/dist/src/queue.js +128 -0
  159. package/dist/src/queue.js.map +1 -0
  160. package/dist/src/remote-step-factory.d.ts +15 -0
  161. package/dist/src/remote-step-factory.d.ts.map +1 -0
  162. package/dist/src/remote-step-factory.js +12 -0
  163. package/dist/src/remote-step-factory.js.map +1 -0
  164. package/dist/src/remote-workflow-executor.d.ts +24 -0
  165. package/dist/src/remote-workflow-executor.d.ts.map +1 -0
  166. package/dist/src/remote-workflow-executor.js +70 -0
  167. package/dist/src/remote-workflow-executor.js.map +1 -0
  168. package/dist/src/scheduler.d.ts +67 -0
  169. package/dist/src/scheduler.d.ts.map +1 -0
  170. package/dist/src/scheduler.js +111 -0
  171. package/dist/src/scheduler.js.map +1 -0
  172. package/dist/src/search-attributes.d.ts +48 -0
  173. package/dist/src/search-attributes.d.ts.map +1 -0
  174. package/dist/src/search-attributes.js +98 -0
  175. package/dist/src/search-attributes.js.map +1 -0
  176. package/dist/src/singleton-gate.d.ts +44 -0
  177. package/dist/src/singleton-gate.d.ts.map +1 -0
  178. package/dist/src/singleton-gate.js +90 -0
  179. package/dist/src/singleton-gate.js.map +1 -0
  180. package/dist/src/step-logger.d.ts +9 -0
  181. package/dist/src/step-logger.d.ts.map +1 -0
  182. package/dist/src/step-logger.js +89 -0
  183. package/dist/src/step-logger.js.map +1 -0
  184. package/dist/src/stores/factory.d.ts +42 -0
  185. package/dist/src/stores/factory.d.ts.map +1 -0
  186. package/dist/src/stores/factory.js +29 -0
  187. package/dist/src/stores/factory.js.map +1 -0
  188. package/dist/src/stores/lucid-helpers.d.ts +11 -0
  189. package/dist/src/stores/lucid-helpers.d.ts.map +1 -0
  190. package/dist/src/stores/lucid-helpers.js +38 -0
  191. package/dist/src/stores/lucid-helpers.js.map +1 -0
  192. package/dist/src/stores/lucid-mappers.d.ts +58 -0
  193. package/dist/src/stores/lucid-mappers.d.ts.map +1 -0
  194. package/dist/src/stores/lucid-mappers.js +174 -0
  195. package/dist/src/stores/lucid-mappers.js.map +1 -0
  196. package/dist/src/stores/lucid-schema.d.ts +28 -0
  197. package/dist/src/stores/lucid-schema.d.ts.map +1 -0
  198. package/dist/src/stores/lucid-schema.js +115 -0
  199. package/dist/src/stores/lucid-schema.js.map +1 -0
  200. package/dist/src/stores/lucid.d.ts +69 -0
  201. package/dist/src/stores/lucid.d.ts.map +1 -0
  202. package/dist/src/stores/lucid.js +342 -0
  203. package/dist/src/stores/lucid.js.map +1 -0
  204. package/dist/src/telescope/dashboard.d.ts +15 -0
  205. package/dist/src/telescope/dashboard.d.ts.map +1 -0
  206. package/dist/src/telescope/dashboard.js +113 -0
  207. package/dist/src/telescope/dashboard.js.map +1 -0
  208. package/dist/src/telescope/data-providers.d.ts +20 -0
  209. package/dist/src/telescope/data-providers.d.ts.map +1 -0
  210. package/dist/src/telescope/data-providers.js +322 -0
  211. package/dist/src/telescope/data-providers.js.map +1 -0
  212. package/dist/src/telescope/extension.d.ts +22 -0
  213. package/dist/src/telescope/extension.d.ts.map +1 -0
  214. package/dist/src/telescope/extension.js +38 -0
  215. package/dist/src/telescope/extension.js.map +1 -0
  216. package/dist/src/telescope/index.d.ts +5 -0
  217. package/dist/src/telescope/index.d.ts.map +1 -0
  218. package/dist/src/telescope/index.js +4 -0
  219. package/dist/src/telescope/index.js.map +1 -0
  220. package/dist/src/telescope/telescope-sdk.d.ts +123 -0
  221. package/dist/src/telescope/telescope-sdk.d.ts.map +1 -0
  222. package/dist/src/telescope/telescope-sdk.js +12 -0
  223. package/dist/src/telescope/telescope-sdk.js.map +1 -0
  224. package/dist/src/test-helpers.d.ts +11 -0
  225. package/dist/src/test-helpers.d.ts.map +1 -0
  226. package/dist/src/test-helpers.js +12 -0
  227. package/dist/src/test-helpers.js.map +1 -0
  228. package/dist/src/testing/in-memory-state-store.d.ts +64 -0
  229. package/dist/src/testing/in-memory-state-store.d.ts.map +1 -0
  230. package/dist/src/testing/in-memory-state-store.js +259 -0
  231. package/dist/src/testing/in-memory-state-store.js.map +1 -0
  232. package/dist/src/testing/in-memory-transport.d.ts +25 -0
  233. package/dist/src/testing/in-memory-transport.d.ts.map +1 -0
  234. package/dist/src/testing/in-memory-transport.js +49 -0
  235. package/dist/src/testing/in-memory-transport.js.map +1 -0
  236. package/dist/src/testing-kit/admission-backend-conformance.d.ts +18 -0
  237. package/dist/src/testing-kit/admission-backend-conformance.d.ts.map +1 -0
  238. package/dist/src/testing-kit/admission-backend-conformance.js +81 -0
  239. package/dist/src/testing-kit/admission-backend-conformance.js.map +1 -0
  240. package/dist/src/testing-kit/assertions.d.ts +10 -0
  241. package/dist/src/testing-kit/assertions.d.ts.map +1 -0
  242. package/dist/src/testing-kit/assertions.js +41 -0
  243. package/dist/src/testing-kit/assertions.js.map +1 -0
  244. package/dist/src/testing-kit/harness.d.ts +28 -0
  245. package/dist/src/testing-kit/harness.d.ts.map +1 -0
  246. package/dist/src/testing-kit/harness.js +42 -0
  247. package/dist/src/testing-kit/harness.js.map +1 -0
  248. package/dist/src/testing-kit/index.d.ts +8 -0
  249. package/dist/src/testing-kit/index.d.ts.map +1 -0
  250. package/dist/src/testing-kit/index.js +8 -0
  251. package/dist/src/testing-kit/index.js.map +1 -0
  252. package/dist/src/testing-kit/replay.d.ts +22 -0
  253. package/dist/src/testing-kit/replay.d.ts.map +1 -0
  254. package/dist/src/testing-kit/replay.js +38 -0
  255. package/dist/src/testing-kit/replay.js.map +1 -0
  256. package/dist/src/testing-kit/state-store-conformance.d.ts +51 -0
  257. package/dist/src/testing-kit/state-store-conformance.d.ts.map +1 -0
  258. package/dist/src/testing-kit/state-store-conformance.js +430 -0
  259. package/dist/src/testing-kit/state-store-conformance.js.map +1 -0
  260. package/dist/src/testing-kit/steps.d.ts +5 -0
  261. package/dist/src/testing-kit/steps.d.ts.map +1 -0
  262. package/dist/src/testing-kit/steps.js +15 -0
  263. package/dist/src/testing-kit/steps.js.map +1 -0
  264. package/dist/src/testing-kit/transport-conformance.d.ts +16 -0
  265. package/dist/src/testing-kit/transport-conformance.d.ts.map +1 -0
  266. package/dist/src/testing-kit/transport-conformance.js +64 -0
  267. package/dist/src/testing-kit/transport-conformance.js.map +1 -0
  268. package/dist/src/tokens.d.ts +18 -0
  269. package/dist/src/tokens.d.ts.map +1 -0
  270. package/dist/src/tokens.js +18 -0
  271. package/dist/src/tokens.js.map +1 -0
  272. package/dist/src/transport-pool.d.ts +30 -0
  273. package/dist/src/transport-pool.d.ts.map +1 -0
  274. package/dist/src/transport-pool.js +82 -0
  275. package/dist/src/transport-pool.js.map +1 -0
  276. package/dist/src/transports/db-helpers.d.ts +10 -0
  277. package/dist/src/transports/db-helpers.d.ts.map +1 -0
  278. package/dist/src/transports/db-helpers.js +33 -0
  279. package/dist/src/transports/db-helpers.js.map +1 -0
  280. package/dist/src/transports/db-schema.d.ts +28 -0
  281. package/dist/src/transports/db-schema.d.ts.map +1 -0
  282. package/dist/src/transports/db-schema.js +98 -0
  283. package/dist/src/transports/db-schema.js.map +1 -0
  284. package/dist/src/transports/db.d.ts +81 -0
  285. package/dist/src/transports/db.d.ts.map +1 -0
  286. package/dist/src/transports/db.js +340 -0
  287. package/dist/src/transports/db.js.map +1 -0
  288. package/dist/src/transports/factory.d.ts +79 -0
  289. package/dist/src/transports/factory.d.ts.map +1 -0
  290. package/dist/src/transports/factory.js +57 -0
  291. package/dist/src/transports/factory.js.map +1 -0
  292. package/dist/src/transports/queue-mock-adapter.d.ts +39 -0
  293. package/dist/src/transports/queue-mock-adapter.d.ts.map +1 -0
  294. package/dist/src/transports/queue-mock-adapter.js +86 -0
  295. package/dist/src/transports/queue-mock-adapter.js.map +1 -0
  296. package/dist/src/transports/queue.d.ts +84 -0
  297. package/dist/src/transports/queue.d.ts.map +1 -0
  298. package/dist/src/transports/queue.js +210 -0
  299. package/dist/src/transports/queue.js.map +1 -0
  300. package/dist/src/workflow-ctx.d.ts +64 -0
  301. package/dist/src/workflow-ctx.d.ts.map +1 -0
  302. package/dist/src/workflow-ctx.js +457 -0
  303. package/dist/src/workflow-ctx.js.map +1 -0
  304. package/dist/src/workflow-ref.d.ts +34 -0
  305. package/dist/src/workflow-ref.d.ts.map +1 -0
  306. package/dist/src/workflow-ref.js +28 -0
  307. package/dist/src/workflow-ref.js.map +1 -0
  308. package/dist/stubs/config/durable.stub +49 -0
  309. package/dist/stubs/config/durable_dashboard.stub +17 -0
  310. package/dist/stubs/database/migrations/create_durable_tables.stub +87 -0
  311. package/dist/stubs/database/migrations/create_durable_transport_tables.stub +75 -0
  312. package/dist/stubs/main.d.ts +3 -0
  313. package/dist/stubs/main.d.ts.map +1 -0
  314. package/dist/stubs/main.js +4 -0
  315. package/dist/stubs/main.js.map +1 -0
  316. package/package.json +154 -0
@@ -0,0 +1,322 @@
1
+ import { WorkflowEngine } from '../index.js';
2
+ /**
3
+ * The durable "Workflows" dashboard data providers. Two sources:
4
+ * - ENGINE-backed (state / recentFailures / workerHealth / stateBreakdown): query the live
5
+ * `WorkflowEngine` read API (resolved from the container), so they reflect the source of truth.
6
+ * - ENTRY-backed (timeseries / duration / runsOverTime / successRate / throughput): aggregate the
7
+ * `agora:durable:*` lifecycle events the generic diagnostics watcher captured into Telescope
8
+ * (recorded as `type: 'diagnostic'`, `tag: 'lib:durable'`), so they are the rolling history.
9
+ *
10
+ * No durable-specific watcher is needed: the `@adonis-agora/durable` provider already bridges engine events
11
+ * onto the diagnostics bus, and Telescope's generic watcher records them.
12
+ */
13
+ const STATE_CAP = 10_000;
14
+ /** Resolve the live durable engine from the host container. */
15
+ function engineOf(ctx) {
16
+ return ctx.container.make(WorkflowEngine);
17
+ }
18
+ /** Fetch captured `agora:durable:*` lifecycle entries from Telescope storage (newest-first). */
19
+ async function fetchEntries(ctx, limit = 5_000) {
20
+ return ctx.store.list({ type: 'diagnostic', tag: 'lib:durable', limit });
21
+ }
22
+ const contentOf = (e) => (e.content ?? {});
23
+ /** Compute the p-th percentile of a SORTED array. */
24
+ function percentile(sorted, p) {
25
+ if (sorted.length === 0)
26
+ return 0;
27
+ const idx = Math.min(sorted.length - 1, Math.ceil((p / 100) * sorted.length) - 1);
28
+ return sorted[Math.max(0, idx)] ?? 0;
29
+ }
30
+ /** Split entries into current `(now-window, now]` and previous `(now-2window, now-window]` windows. */
31
+ function splitWindows(entries, windowMs, now) {
32
+ const start = now - windowMs;
33
+ const prevStart = start - windowMs;
34
+ const at = (e) => (e.createdAt ? +new Date(e.createdAt) : 0);
35
+ return {
36
+ current: entries.filter((e) => at(e) > start && at(e) <= now),
37
+ previous: entries.filter((e) => at(e) > prevStart && at(e) <= start),
38
+ };
39
+ }
40
+ /** Success rate (completed / (completed+failed)) for a list of entries; 1 when no data. */
41
+ function successRateOf(entries) {
42
+ let completed = 0;
43
+ let failed = 0;
44
+ for (const e of entries) {
45
+ const event = contentOf(e).event;
46
+ if (event === 'run.completed')
47
+ completed += 1;
48
+ else if (event === 'run.failed')
49
+ failed += 1;
50
+ }
51
+ const total = completed + failed;
52
+ return total === 0 ? 1 : completed / total;
53
+ }
54
+ // ─── engine-backed ──────────────────────────────────────────────────────────
55
+ /** A current-state count from the engine. `query.status` selects which (default 'dead'). */
56
+ export function durableStateProvider() {
57
+ return {
58
+ name: 'durable.state',
59
+ async resolve(query, ctx) {
60
+ const engine = await engineOf(ctx);
61
+ const status = query?.status ?? 'dead';
62
+ const runs = await engine.listRuns({ status, limit: STATE_CAP });
63
+ return { value: runs.length };
64
+ },
65
+ };
66
+ }
67
+ /** Recent failed + dead runs as table rows (newest first), bounded by `query.windowMs` (default 24h). */
68
+ export function durableRecentFailuresProvider() {
69
+ return {
70
+ name: 'durable.recentFailures',
71
+ async resolve(query, ctx) {
72
+ const engine = await engineOf(ctx);
73
+ const limit = Math.min(200, Math.max(10, Number(query?.limit ?? 50)));
74
+ const windowMs = query?.windowMs === undefined ? 24 * 60 * 60 * 1000 : Number(query.windowMs);
75
+ const cutoff = windowMs > 0 ? Date.now() - windowMs : 0;
76
+ const [failed, dead] = await Promise.all([
77
+ engine.listRuns({ status: 'failed', limit }),
78
+ engine.listRuns({ status: 'dead', limit }),
79
+ ]);
80
+ const rows = [...failed, ...dead]
81
+ .filter((r) => +new Date(r.updatedAt) >= cutoff)
82
+ .sort((a, b) => +new Date(b.updatedAt) - +new Date(a.updatedAt))
83
+ .slice(0, limit)
84
+ .map((r) => ({
85
+ updatedAt: `${new Date(r.updatedAt).toISOString().replace('T', ' ').slice(0, 16)}Z`,
86
+ workflow: r.workflow,
87
+ runId: r.id,
88
+ error: r.error?.message ?? '',
89
+ }));
90
+ return { rows };
91
+ },
92
+ };
93
+ }
94
+ /** Per-group worker health from the engine; `query.metric: 'starvedCount'` returns a stat. */
95
+ export function durableWorkerHealthProvider() {
96
+ return {
97
+ name: 'durable.workerHealth',
98
+ async resolve(query, ctx) {
99
+ const engine = await engineOf(ctx);
100
+ const health = await engine.workerHealth();
101
+ const isStarved = (g) => g.depth > 0 && g.liveWorkers.length === 0;
102
+ if (query?.metric === 'starvedCount') {
103
+ return { value: health.filter(isStarved).length };
104
+ }
105
+ const rows = health
106
+ .slice()
107
+ .sort((a, b) => Number(isStarved(b)) - Number(isStarved(a)) || b.depth - a.depth)
108
+ .map((g) => ({
109
+ group: g.group,
110
+ queued: g.depth,
111
+ liveWorkers: g.liveWorkers.length,
112
+ status: isStarved(g) ? 'STARVED' : 'ok',
113
+ }));
114
+ return { rows };
115
+ },
116
+ };
117
+ }
118
+ const STATE_BREAKDOWN_PALETTE = ['#34d399', '#fbbf24', '#f87171', '#38bdf8', '#a78bfa'];
119
+ const STATE_BREAKDOWN_STATUSES = ['running', 'pending', 'completed', 'failed', 'dead'];
120
+ /** Pie/donut segments: a count per status from the engine. */
121
+ export function durableStateBreakdownProvider() {
122
+ return {
123
+ name: 'durable.stateBreakdown',
124
+ async resolve(_query, ctx) {
125
+ const engine = await engineOf(ctx);
126
+ const counts = await Promise.all(STATE_BREAKDOWN_STATUSES.map((status) => engine.listRuns({ status, limit: STATE_CAP }).then((runs) => runs.length)));
127
+ const segments = STATE_BREAKDOWN_STATUSES.map((label, i) => ({
128
+ label,
129
+ value: counts[i],
130
+ color: STATE_BREAKDOWN_PALETTE[i],
131
+ }));
132
+ return { segments };
133
+ },
134
+ };
135
+ }
136
+ // ─── entry-backed (captured diagnostics history) ──────────────────────────────
137
+ /** Rollups from captured run.* entries. `query.metric`: successRate | failed | total | topFailures. */
138
+ export function durableTimeseriesProvider() {
139
+ return {
140
+ name: 'durable.timeseries',
141
+ async resolve(query, ctx) {
142
+ const limit = Math.min(5_000, Math.max(100, Number(query?.limit ?? 2_000)));
143
+ const entries = await fetchEntries(ctx, limit);
144
+ let completed = 0;
145
+ let failed = 0;
146
+ const failByWorkflow = new Map();
147
+ for (const e of entries) {
148
+ const c = contentOf(e);
149
+ if (c.event === 'run.completed')
150
+ completed += 1;
151
+ else if (c.event === 'run.failed') {
152
+ failed += 1;
153
+ const wf = c.payload?.workflow ?? 'unknown';
154
+ failByWorkflow.set(wf, (failByWorkflow.get(wf) ?? 0) + 1);
155
+ }
156
+ }
157
+ const total = completed + failed;
158
+ const metric = query?.metric ?? 'successRate';
159
+ if (metric === 'successRate')
160
+ return { value: total === 0 ? 1 : completed / total };
161
+ if (metric === 'failed')
162
+ return { value: failed };
163
+ if (metric === 'total')
164
+ return { value: total };
165
+ if (metric === 'topFailures') {
166
+ const items = [...failByWorkflow.entries()]
167
+ .map(([label, value]) => ({ label, value }))
168
+ .sort((a, b) => b.value - a.value);
169
+ return { items };
170
+ }
171
+ return { value: total };
172
+ },
173
+ };
174
+ }
175
+ /** Duration percentiles + a ~8-bucket histogram, from `payload.durationMs` (or run.started pairing). */
176
+ export function durableDurationProvider() {
177
+ return {
178
+ name: 'durable.duration',
179
+ async resolve(query, ctx) {
180
+ const entries = await fetchEntries(ctx);
181
+ const startedAt = new Map();
182
+ for (const e of entries) {
183
+ const c = contentOf(e);
184
+ if (c.event === 'run.started' && c.payload?.runId && e.createdAt) {
185
+ startedAt.set(c.payload.runId, +new Date(e.createdAt));
186
+ }
187
+ }
188
+ const durs = [];
189
+ for (const e of entries) {
190
+ const c = contentOf(e);
191
+ if (c.event === 'run.completed' || c.event === 'run.failed') {
192
+ if (typeof c.payload?.durationMs === 'number') {
193
+ durs.push(c.payload.durationMs);
194
+ }
195
+ else if (c.payload?.runId) {
196
+ const start = startedAt.get(c.payload.runId);
197
+ const end = e.createdAt ? +new Date(e.createdAt) : undefined;
198
+ if (start !== undefined && end !== undefined && end >= start)
199
+ durs.push(end - start);
200
+ }
201
+ }
202
+ }
203
+ durs.sort((a, b) => a - b);
204
+ const p50 = percentile(durs, 50);
205
+ const p95 = percentile(durs, 95);
206
+ const p99 = percentile(durs, 99);
207
+ const metric = query?.metric;
208
+ if (metric === 'p50')
209
+ return { value: p50 };
210
+ if (metric === 'p95')
211
+ return { value: p95 };
212
+ if (metric === 'p99')
213
+ return { value: p99 };
214
+ const max = durs.at(-1) ?? 0;
215
+ const bucketCount = 8;
216
+ const size = Math.max(1, Math.ceil((max + 1) / bucketCount));
217
+ const buckets = Array.from({ length: bucketCount }, (_, i) => ({
218
+ label: `${Math.round((i * size) / 100) / 10}s`,
219
+ count: 0,
220
+ }));
221
+ for (const d of durs) {
222
+ const bucket = buckets[Math.min(bucketCount - 1, Math.floor(d / size))];
223
+ if (bucket)
224
+ bucket.count += 1;
225
+ }
226
+ return { buckets, p50, p95, p99 };
227
+ },
228
+ };
229
+ }
230
+ /** `done`/`failed` counts bucketed into `query.buckets ?? 24` equal time buckets. */
231
+ export function durableRunsOverTimeProvider() {
232
+ return {
233
+ name: 'durable.runsOverTime',
234
+ async resolve(query, ctx) {
235
+ const entries = await fetchEntries(ctx);
236
+ const n = Math.max(1, Number(query?.buckets ?? 24));
237
+ const now = Date.now();
238
+ let minT = now;
239
+ for (const e of entries) {
240
+ if (e.createdAt)
241
+ minT = Math.min(minT, +new Date(e.createdAt));
242
+ }
243
+ const span = Math.max(now - minT, 1);
244
+ const bucketSize = span / n;
245
+ const rows = Array.from({ length: n }, (_, i) => ({
246
+ label: new Date(minT + i * bucketSize).toISOString().slice(11, 16),
247
+ done: 0,
248
+ failed: 0,
249
+ }));
250
+ for (const e of entries) {
251
+ const event = contentOf(e).event;
252
+ if (event !== 'run.completed' && event !== 'run.failed')
253
+ continue;
254
+ const t = e.createdAt ? +new Date(e.createdAt) : 0;
255
+ const row = rows[Math.min(n - 1, Math.floor((t - minT) / bucketSize))];
256
+ if (row) {
257
+ if (event === 'run.completed')
258
+ row.done += 1;
259
+ else
260
+ row.failed += 1;
261
+ }
262
+ }
263
+ return { rows };
264
+ },
265
+ };
266
+ }
267
+ /** Success rate over `query.windowMs` (default 24h), with `delta` vs the prior window + an 8-pt spark. */
268
+ export function durableSuccessRateProvider() {
269
+ return {
270
+ name: 'durable.successRate',
271
+ async resolve(query, ctx) {
272
+ const entries = await fetchEntries(ctx);
273
+ const windowMs = Number(query?.windowMs ?? 24 * 60 * 60 * 1000);
274
+ const now = Date.now();
275
+ const { current, previous } = splitWindows(entries, windowMs, now);
276
+ const value = successRateOf(current);
277
+ const delta = previous.length > 0 ? value - successRateOf(previous) : undefined;
278
+ const sparkBuckets = 8;
279
+ const bucketSize = windowMs / sparkBuckets;
280
+ const sparkStart = now - windowMs;
281
+ const spark = Array.from({ length: sparkBuckets }, (_, i) => {
282
+ const bStart = sparkStart + i * bucketSize;
283
+ const bEntries = current.filter((e) => {
284
+ const t = e.createdAt ? +new Date(e.createdAt) : 0;
285
+ return t > bStart && t <= bStart + bucketSize;
286
+ });
287
+ return successRateOf(bEntries);
288
+ });
289
+ return delta === undefined ? { value, spark } : { value, delta, spark };
290
+ },
291
+ };
292
+ }
293
+ /** Completed runs per hour over `query.windowMs` (default 24h), with `delta` + an 8-pt spark. */
294
+ export function durableThroughputProvider() {
295
+ return {
296
+ name: 'durable.throughput',
297
+ async resolve(query, ctx) {
298
+ const entries = await fetchEntries(ctx);
299
+ const windowMs = Number(query?.windowMs ?? 24 * 60 * 60 * 1000);
300
+ const now = Date.now();
301
+ const { current, previous } = splitWindows(entries, windowMs, now);
302
+ const countCompleted = (es) => es.filter((e) => contentOf(e).event === 'run.completed').length;
303
+ const windowHours = windowMs / (60 * 60 * 1000);
304
+ const value = countCompleted(current) / windowHours;
305
+ const delta = previous.length > 0 ? value - countCompleted(previous) / windowHours : undefined;
306
+ const sparkBuckets = 8;
307
+ const bucketSize = windowMs / sparkBuckets;
308
+ const bucketHours = bucketSize / (60 * 60 * 1000);
309
+ const sparkStart = now - windowMs;
310
+ const spark = Array.from({ length: sparkBuckets }, (_, i) => {
311
+ const bStart = sparkStart + i * bucketSize;
312
+ const bEntries = current.filter((e) => {
313
+ const t = e.createdAt ? +new Date(e.createdAt) : 0;
314
+ return t > bStart && t <= bStart + bucketSize;
315
+ });
316
+ return countCompleted(bEntries) / bucketHours;
317
+ });
318
+ return delta === undefined ? { value, spark } : { value, delta, spark };
319
+ },
320
+ };
321
+ }
322
+ //# sourceMappingURL=data-providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-providers.js","sourceRoot":"","sources":["../../../src/telescope/data-providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type DurableDashboardOptions } from './dashboard.js';
2
+ import type { TelescopeExtension } from './telescope-sdk.js';
3
+ /**
4
+ * The first-class `@adonis-agora/telescope` extension for `@adonis-agora/durable`: a "Workflows" health dashboard
5
+ * (golden signals) plus the data providers it binds to. Wire it into `config/telescope.ts`:
6
+ *
7
+ * ```ts
8
+ * import { defineConfig } from '@adonis-agora/telescope'
9
+ * import { durableTelescopeExtension } from '@adonis-agora/durable/telescope'
10
+ *
11
+ * export default defineConfig({ extensions: [durableTelescopeExtension()] })
12
+ * ```
13
+ *
14
+ * No watcher is contributed — the `@adonis-agora/durable` provider already bridges engine events onto the
15
+ * diagnostics bus, and Telescope's generic diagnostics watcher records them; the entry-backed
16
+ * providers read those `tag: 'lib:durable'` entries, the rest query the live engine.
17
+ *
18
+ * The returned object structurally satisfies `@adonis-agora/telescope`'s `TelescopeExtension` (it is not
19
+ * imported — see `telescope-sdk.ts` for why).
20
+ */
21
+ export declare function durableTelescopeExtension(opts?: DurableDashboardOptions): TelescopeExtension;
22
+ //# sourceMappingURL=extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../src/telescope/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,uBAAuB,EAAoB,MAAM,gBAAgB,CAAC;AAYhF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,GAAE,uBAA4B,GAAG,kBAAkB,CAgBhG"}
@@ -0,0 +1,38 @@
1
+ import { durableDashboard } from './dashboard.js';
2
+ import { durableDurationProvider, durableRecentFailuresProvider, durableRunsOverTimeProvider, durableStateBreakdownProvider, durableStateProvider, durableSuccessRateProvider, durableThroughputProvider, durableTimeseriesProvider, durableWorkerHealthProvider, } from './data-providers.js';
3
+ /**
4
+ * The first-class `@adonis-agora/telescope` extension for `@adonis-agora/durable`: a "Workflows" health dashboard
5
+ * (golden signals) plus the data providers it binds to. Wire it into `config/telescope.ts`:
6
+ *
7
+ * ```ts
8
+ * import { defineConfig } from '@adonis-agora/telescope'
9
+ * import { durableTelescopeExtension } from '@adonis-agora/durable/telescope'
10
+ *
11
+ * export default defineConfig({ extensions: [durableTelescopeExtension()] })
12
+ * ```
13
+ *
14
+ * No watcher is contributed — the `@adonis-agora/durable` provider already bridges engine events onto the
15
+ * diagnostics bus, and Telescope's generic diagnostics watcher records them; the entry-backed
16
+ * providers read those `tag: 'lib:durable'` entries, the rest query the live engine.
17
+ *
18
+ * The returned object structurally satisfies `@adonis-agora/telescope`'s `TelescopeExtension` (it is not
19
+ * imported — see `telescope-sdk.ts` for why).
20
+ */
21
+ export function durableTelescopeExtension(opts = {}) {
22
+ return {
23
+ name: 'durable',
24
+ dashboards: () => [durableDashboard(opts)],
25
+ dataProviders: () => [
26
+ durableStateProvider(),
27
+ durableTimeseriesProvider(),
28
+ durableRecentFailuresProvider(),
29
+ durableWorkerHealthProvider(),
30
+ durableDurationProvider(),
31
+ durableRunsOverTimeProvider(),
32
+ durableSuccessRateProvider(),
33
+ durableThroughputProvider(),
34
+ durableStateBreakdownProvider(),
35
+ ],
36
+ };
37
+ }
38
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../src/telescope/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,2BAA2B,EAC3B,6BAA6B,EAC7B,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAG7B;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAgC,EAAE;IAC1E,OAAO;QACL,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC1C,aAAa,EAAE,GAAG,EAAE,CAAC;YACnB,oBAAoB,EAAE;YACtB,yBAAyB,EAAE;YAC3B,6BAA6B,EAAE;YAC/B,2BAA2B,EAAE;YAC7B,uBAAuB,EAAE;YACzB,2BAA2B,EAAE;YAC7B,0BAA0B,EAAE;YAC5B,yBAAyB,EAAE;YAC3B,6BAA6B,EAAE;SAChC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { type DurableDashboardOptions, durableDashboard } from './dashboard.js';
2
+ export { durableTelescopeExtension } from './extension.js';
3
+ export { durableDurationProvider, durableRecentFailuresProvider, durableRunsOverTimeProvider, durableStateBreakdownProvider, durableStateProvider, durableSuccessRateProvider, durableThroughputProvider, durableTimeseriesProvider, durableWorkerHealthProvider, } from './data-providers.js';
4
+ export type { ContainerLike, DataProvider, ExtensionContext, TelescopeExtension, TelescopeStoreLike, } from './telescope-sdk.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/telescope/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,2BAA2B,EAC3B,6BAA6B,EAC7B,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { durableDashboard } from './dashboard.js';
2
+ export { durableTelescopeExtension } from './extension.js';
3
+ export { durableDurationProvider, durableRecentFailuresProvider, durableRunsOverTimeProvider, durableStateBreakdownProvider, durableStateProvider, durableSuccessRateProvider, durableThroughputProvider, durableTimeseriesProvider, durableWorkerHealthProvider, } from './data-providers.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/telescope/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,2BAA2B,EAC3B,6BAA6B,EAC7B,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * A local, structural mirror of the `@adonis-agora/telescope` extension SDK contract.
3
+ *
4
+ * We deliberately do NOT import `@adonis-agora/telescope` — it lives in a separate repo, so a workspace
5
+ * dependency would not resolve (the same cross-repo decoupling `@adonis-agora/telescope` itself uses to read
6
+ * `@adonis-agora/diagnostics` without importing it). Instead we declare the same shapes here; the exported
7
+ * extension object structurally satisfies `@adonis-agora/telescope`'s `TelescopeExtension` when an app wires
8
+ * it into `config/telescope.ts` (where both packages are installed). Keep these in lockstep with
9
+ * `@adonis-agora/telescope`'s `extension/types.ts`.
10
+ */
11
+ /** The slice of a telescope entry the data providers read. */
12
+ export interface TelescopeEntryLike {
13
+ content?: unknown;
14
+ createdAt?: Date;
15
+ }
16
+ /** The slice of the telescope store the data providers read (a subset of `TelescopeStore`). */
17
+ export interface TelescopeStoreLike {
18
+ list(query?: {
19
+ type?: string;
20
+ tag?: string;
21
+ limit?: number;
22
+ }): Promise<TelescopeEntryLike[]>;
23
+ }
24
+ /** The slice of the AdonisJS container an extension uses to resolve host services. */
25
+ export interface ContainerLike {
26
+ make<T>(token: unknown): Promise<T>;
27
+ }
28
+ /** Read-only context handed to every extension hook (mirror of `@adonis-agora/telescope`'s). */
29
+ export interface ExtensionContext {
30
+ readonly store: TelescopeStoreLike;
31
+ readonly container: ContainerLike;
32
+ readonly config: unknown;
33
+ }
34
+ export interface ExtensionEntryType {
35
+ id: string;
36
+ label: string;
37
+ dot: string;
38
+ }
39
+ export interface PanelThresholds {
40
+ warn: number;
41
+ bad: number;
42
+ direction: 'up-bad' | 'down-bad';
43
+ }
44
+ export interface DashboardSection {
45
+ title?: string;
46
+ cols?: 2 | 3 | 4;
47
+ panels: Panel[];
48
+ }
49
+ export interface DashboardSpec {
50
+ id: string;
51
+ label: string;
52
+ navGroup?: string;
53
+ panels: Panel[];
54
+ sections?: DashboardSection[];
55
+ }
56
+ export interface DataBinding {
57
+ provider: string;
58
+ query?: Record<string, unknown>;
59
+ }
60
+ export interface LinkSpec {
61
+ href: string;
62
+ external?: boolean;
63
+ }
64
+ export interface Column {
65
+ key: string;
66
+ label: string;
67
+ link?: LinkSpec;
68
+ }
69
+ export type Panel = {
70
+ kind: 'stat';
71
+ title: string;
72
+ data: DataBinding;
73
+ format?: 'number' | 'percent' | 'duration' | 'rate';
74
+ accent?: string;
75
+ spark?: boolean;
76
+ thresholds?: PanelThresholds;
77
+ } | {
78
+ kind: 'timeseries';
79
+ title: string;
80
+ data: DataBinding;
81
+ series: string[];
82
+ style?: 'area' | 'stacked';
83
+ } | {
84
+ kind: 'topN';
85
+ title: string;
86
+ data: DataBinding;
87
+ limit?: number;
88
+ } | {
89
+ kind: 'table';
90
+ title: string;
91
+ data: DataBinding;
92
+ columns: Column[];
93
+ } | {
94
+ kind: 'distribution';
95
+ title: string;
96
+ data: DataBinding;
97
+ markers?: Array<'p50' | 'p95' | 'p99'>;
98
+ format?: 'duration' | 'number';
99
+ } | {
100
+ kind: 'gauge';
101
+ title: string;
102
+ data: DataBinding;
103
+ min?: number;
104
+ max?: number;
105
+ format?: 'number' | 'percent' | 'duration' | 'rate';
106
+ thresholds?: PanelThresholds;
107
+ } | {
108
+ kind: 'breakdown';
109
+ title: string;
110
+ data: DataBinding;
111
+ style?: 'donut' | 'bar';
112
+ };
113
+ export interface DataProvider {
114
+ name: string;
115
+ resolve(query: Record<string, unknown> | undefined, ctx: ExtensionContext): Promise<unknown>;
116
+ }
117
+ export interface TelescopeExtension {
118
+ name: string;
119
+ entryTypes?(ctx: ExtensionContext): ExtensionEntryType[];
120
+ dashboards?(ctx: ExtensionContext): DashboardSpec[];
121
+ dataProviders?(ctx: ExtensionContext): DataProvider[];
122
+ }
123
+ //# sourceMappingURL=telescope-sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telescope-sdk.d.ts","sourceRoot":"","sources":["../../../src/telescope/telescope-sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * A local, structural mirror of the `@adonis-agora/telescope` extension SDK contract.
3
+ *
4
+ * We deliberately do NOT import `@adonis-agora/telescope` — it lives in a separate repo, so a workspace
5
+ * dependency would not resolve (the same cross-repo decoupling `@adonis-agora/telescope` itself uses to read
6
+ * `@adonis-agora/diagnostics` without importing it). Instead we declare the same shapes here; the exported
7
+ * extension object structurally satisfies `@adonis-agora/telescope`'s `TelescopeExtension` when an app wires
8
+ * it into `config/telescope.ts` (where both packages are installed). Keep these in lockstep with
9
+ * `@adonis-agora/telescope`'s `extension/types.ts`.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=telescope-sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telescope-sdk.js","sourceRoot":"","sources":["../../../src/telescope/telescope-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,11 @@
1
+ import type { StartOptions, WorkflowEngine } from './engine.js';
2
+ import type { RunResult } from './interfaces.js';
3
+ import type { WorkflowRef } from './workflow-ref.js';
4
+ /**
5
+ * Test helper: enqueue a run and wait for it to settle (terminal or suspended). `engine.start` now
6
+ * only enqueues (dispatch model), so this restores the old synchronous-result shape for assertions —
7
+ * `const r = await startRun(engine, wf, input, id)`. Not for production use; production pairs `start`
8
+ * with `waitForRun` (or a worker) explicitly.
9
+ */
10
+ export declare function startRun(engine: WorkflowEngine, workflow: WorkflowRef, input: unknown, runId: string, opts?: StartOptions): Promise<RunResult>;
11
+ //# sourceMappingURL=test-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../src/test-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,SAAS,CAAC,CAIpB"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Test helper: enqueue a run and wait for it to settle (terminal or suspended). `engine.start` now
3
+ * only enqueues (dispatch model), so this restores the old synchronous-result shape for assertions —
4
+ * `const r = await startRun(engine, wf, input, id)`. Not for production use; production pairs `start`
5
+ * with `waitForRun` (or a worker) explicitly.
6
+ */
7
+ export function startRun(engine, workflow, input, runId, opts) {
8
+ // `start` is overloaded per ref kind (class | string); a `WorkflowRef` union fits neither overload,
9
+ // and this is a thin test helper, so resolve to the string overload (engine handles both at runtime).
10
+ return engine.start(workflow, input, runId, opts).then(() => engine.waitForRun(runId));
11
+ }
12
+ //# sourceMappingURL=test-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../src/test-helpers.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CACtB,MAAsB,EACtB,QAAqB,EACrB,KAAc,EACd,KAAa,EACb,IAAmB;IAEnB,oGAAoG;IACpG,sGAAsG;IACtG,OAAO,MAAM,CAAC,KAAK,CAAC,QAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACnG,CAAC"}