convex-effect-workflows 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 (190) hide show
  1. package/README.md +107 -0
  2. package/dist/client/ConvexCtx.d.ts +12 -0
  3. package/dist/client/ConvexCtx.d.ts.map +1 -0
  4. package/dist/client/ConvexCtx.js +6 -0
  5. package/dist/client/ConvexCtx.js.map +1 -0
  6. package/dist/client/ConvexLogger.d.ts +7 -0
  7. package/dist/client/ConvexLogger.d.ts.map +1 -0
  8. package/dist/client/ConvexLogger.js +39 -0
  9. package/dist/client/ConvexLogger.js.map +1 -0
  10. package/dist/client/ConvexTracer.d.ts +7 -0
  11. package/dist/client/ConvexTracer.d.ts.map +1 -0
  12. package/dist/client/ConvexTracer.js +60 -0
  13. package/dist/client/ConvexTracer.js.map +1 -0
  14. package/dist/client/ConvexWorkflowEngine.d.ts +308 -0
  15. package/dist/client/ConvexWorkflowEngine.d.ts.map +1 -0
  16. package/dist/client/ConvexWorkflowEngine.js +88 -0
  17. package/dist/client/ConvexWorkflowEngine.js.map +1 -0
  18. package/dist/client/activityWorker.d.ts +23 -0
  19. package/dist/client/activityWorker.d.ts.map +1 -0
  20. package/dist/client/activityWorker.js +41 -0
  21. package/dist/client/activityWorker.js.map +1 -0
  22. package/dist/client/boundaries.d.ts +27 -0
  23. package/dist/client/boundaries.d.ts.map +1 -0
  24. package/dist/client/boundaries.js +17 -0
  25. package/dist/client/boundaries.js.map +1 -0
  26. package/dist/client/encoded.d.ts +22 -0
  27. package/dist/client/encoded.d.ts.map +1 -0
  28. package/dist/client/encoded.js +276 -0
  29. package/dist/client/encoded.js.map +1 -0
  30. package/dist/client/index.d.ts +13 -0
  31. package/dist/client/index.d.ts.map +1 -0
  32. package/dist/client/index.js +11 -0
  33. package/dist/client/index.js.map +1 -0
  34. package/dist/client/registry.d.ts +17 -0
  35. package/dist/client/registry.d.ts.map +1 -0
  36. package/dist/client/registry.js +21 -0
  37. package/dist/client/registry.js.map +1 -0
  38. package/dist/client/runner.d.ts +27 -0
  39. package/dist/client/runner.d.ts.map +1 -0
  40. package/dist/client/runner.js +90 -0
  41. package/dist/client/runner.js.map +1 -0
  42. package/dist/client/runtime.d.ts +10 -0
  43. package/dist/client/runtime.d.ts.map +1 -0
  44. package/dist/client/runtime.js +15 -0
  45. package/dist/client/runtime.js.map +1 -0
  46. package/dist/component/_generated/api.d.ts +148 -0
  47. package/dist/component/_generated/api.d.ts.map +1 -0
  48. package/dist/component/_generated/api.js +31 -0
  49. package/dist/component/_generated/api.js.map +1 -0
  50. package/dist/component/_generated/component.d.ts +921 -0
  51. package/dist/component/_generated/component.d.ts.map +1 -0
  52. package/dist/component/_generated/component.js +11 -0
  53. package/dist/component/_generated/component.js.map +1 -0
  54. package/dist/component/_generated/dataModel.d.ts +46 -0
  55. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  56. package/dist/component/_generated/dataModel.js +11 -0
  57. package/dist/component/_generated/dataModel.js.map +1 -0
  58. package/dist/component/_generated/server.d.ts +121 -0
  59. package/dist/component/_generated/server.d.ts.map +1 -0
  60. package/dist/component/_generated/server.js +78 -0
  61. package/dist/component/_generated/server.js.map +1 -0
  62. package/dist/component/activityCompletions.d.ts +27 -0
  63. package/dist/component/activityCompletions.d.ts.map +1 -0
  64. package/dist/component/activityCompletions.js +70 -0
  65. package/dist/component/activityCompletions.js.map +1 -0
  66. package/dist/component/boundaries.d.ts +20 -0
  67. package/dist/component/boundaries.d.ts.map +1 -0
  68. package/dist/component/boundaries.js +17 -0
  69. package/dist/component/boundaries.js.map +1 -0
  70. package/dist/component/cleanup.d.ts +11 -0
  71. package/dist/component/cleanup.d.ts.map +1 -0
  72. package/dist/component/cleanup.js +163 -0
  73. package/dist/component/cleanup.js.map +1 -0
  74. package/dist/component/clocks.d.ts +12 -0
  75. package/dist/component/clocks.d.ts.map +1 -0
  76. package/dist/component/clocks.js +26 -0
  77. package/dist/component/clocks.js.map +1 -0
  78. package/dist/component/config.d.ts +25 -0
  79. package/dist/component/config.d.ts.map +1 -0
  80. package/dist/component/config.js +110 -0
  81. package/dist/component/config.js.map +1 -0
  82. package/dist/component/convex.config.d.ts +3 -0
  83. package/dist/component/convex.config.d.ts.map +1 -0
  84. package/dist/component/convex.config.js +6 -0
  85. package/dist/component/convex.config.js.map +1 -0
  86. package/dist/component/dashboard.d.ts +268 -0
  87. package/dist/component/dashboard.d.ts.map +1 -0
  88. package/dist/component/dashboard.js +622 -0
  89. package/dist/component/dashboard.js.map +1 -0
  90. package/dist/component/deferreds.d.ts +31 -0
  91. package/dist/component/deferreds.d.ts.map +1 -0
  92. package/dist/component/deferreds.js +138 -0
  93. package/dist/component/deferreds.js.map +1 -0
  94. package/dist/component/executions.d.ts +77 -0
  95. package/dist/component/executions.d.ts.map +1 -0
  96. package/dist/component/executions.js +186 -0
  97. package/dist/component/executions.js.map +1 -0
  98. package/dist/component/journalSteps.d.ts +261 -0
  99. package/dist/component/journalSteps.d.ts.map +1 -0
  100. package/dist/component/journalSteps.js +203 -0
  101. package/dist/component/journalSteps.js.map +1 -0
  102. package/dist/component/logs.d.ts +68 -0
  103. package/dist/component/logs.d.ts.map +1 -0
  104. package/dist/component/logs.js +123 -0
  105. package/dist/component/logs.js.map +1 -0
  106. package/dist/component/onComplete.d.ts +31 -0
  107. package/dist/component/onComplete.d.ts.map +1 -0
  108. package/dist/component/onComplete.js +146 -0
  109. package/dist/component/onComplete.js.map +1 -0
  110. package/dist/component/payloads.d.ts +26 -0
  111. package/dist/component/payloads.d.ts.map +1 -0
  112. package/dist/component/payloads.js +57 -0
  113. package/dist/component/payloads.js.map +1 -0
  114. package/dist/component/queries.d.ts +2 -0
  115. package/dist/component/queries.d.ts.map +1 -0
  116. package/dist/component/queries.js +2 -0
  117. package/dist/component/queries.js.map +1 -0
  118. package/dist/component/runner.d.ts +31 -0
  119. package/dist/component/runner.d.ts.map +1 -0
  120. package/dist/component/runner.js +87 -0
  121. package/dist/component/runner.js.map +1 -0
  122. package/dist/component/schema.d.ts +282 -0
  123. package/dist/component/schema.d.ts.map +1 -0
  124. package/dist/component/schema.js +119 -0
  125. package/dist/component/schema.js.map +1 -0
  126. package/dist/component/spans.d.ts +105 -0
  127. package/dist/component/spans.d.ts.map +1 -0
  128. package/dist/component/spans.js +190 -0
  129. package/dist/component/spans.js.map +1 -0
  130. package/dist/component/utils.d.ts +15 -0
  131. package/dist/component/utils.d.ts.map +1 -0
  132. package/dist/component/utils.js +53 -0
  133. package/dist/component/utils.js.map +1 -0
  134. package/dist/shared/constants.d.ts +12 -0
  135. package/dist/shared/constants.d.ts.map +1 -0
  136. package/dist/shared/constants.js +12 -0
  137. package/dist/shared/constants.js.map +1 -0
  138. package/dist/shared/validators.d.ts +69 -0
  139. package/dist/shared/validators.d.ts.map +1 -0
  140. package/dist/shared/validators.js +30 -0
  141. package/dist/shared/validators.js.map +1 -0
  142. package/package.json +74 -0
  143. package/src/client/ConvexCtx.ts +21 -0
  144. package/src/client/ConvexLogger.ts +52 -0
  145. package/src/client/ConvexTracer.ts +75 -0
  146. package/src/client/ConvexWorkflowEngine.test.ts +124 -0
  147. package/src/client/ConvexWorkflowEngine.ts +209 -0
  148. package/src/client/activityWorker.ts +62 -0
  149. package/src/client/boundaries.test.ts +83 -0
  150. package/src/client/boundaries.ts +79 -0
  151. package/src/client/encoded.lifecycle.test.ts +336 -0
  152. package/src/client/encoded.test.ts +153 -0
  153. package/src/client/encoded.ts +484 -0
  154. package/src/client/index.ts +47 -0
  155. package/src/client/registry.ts +35 -0
  156. package/src/client/runner.ts +165 -0
  157. package/src/client/runtime.ts +30 -0
  158. package/src/component/_generated/api.ts +179 -0
  159. package/src/component/_generated/component.ts +1216 -0
  160. package/src/component/_generated/dataModel.ts +60 -0
  161. package/src/component/_generated/server.ts +156 -0
  162. package/src/component/activityCompletions.ts +73 -0
  163. package/src/component/boundaries.ts +55 -0
  164. package/src/component/cleanup.test.ts +219 -0
  165. package/src/component/cleanup.ts +218 -0
  166. package/src/component/clocks.ts +26 -0
  167. package/src/component/config.test.ts +159 -0
  168. package/src/component/config.ts +145 -0
  169. package/src/component/convex.config.ts +7 -0
  170. package/src/component/core.test.ts +829 -0
  171. package/src/component/dashboard.scaling.test.ts +268 -0
  172. package/src/component/dashboard.ts +743 -0
  173. package/src/component/deferreds.ts +162 -0
  174. package/src/component/executions.ts +225 -0
  175. package/src/component/journalSteps.ts +252 -0
  176. package/src/component/logs.ts +152 -0
  177. package/src/component/onComplete.ts +170 -0
  178. package/src/component/payloads.ts +83 -0
  179. package/src/component/queries.ts +8 -0
  180. package/src/component/runner.ts +122 -0
  181. package/src/component/schema.ts +155 -0
  182. package/src/component/setup.test.ts +15 -0
  183. package/src/component/spans.ts +241 -0
  184. package/src/component/utils.test.ts +32 -0
  185. package/src/component/utils.ts +73 -0
  186. package/src/shared/constants.test.ts +14 -0
  187. package/src/shared/constants.ts +15 -0
  188. package/src/shared/validators.ts +98 -0
  189. package/src/test.d.ts +8 -0
  190. package/src/test.ts +17 -0
@@ -0,0 +1,163 @@
1
+ import { v } from "convex/values";
2
+ import { mutation } from "./_generated/server.js";
3
+ import { DEFAULT_RETENTION_DAYS } from "../shared/constants.js";
4
+ import { scheduleCleanupOldExecutions } from "./boundaries.js";
5
+ const TERMINAL_STATUSES = ["completed", "failed", "interrupted"];
6
+ function clamp(value, min, max) {
7
+ return Math.max(min, Math.min(value, max));
8
+ }
9
+ function assertPositiveInteger(value, field) {
10
+ if (value === undefined) {
11
+ return;
12
+ }
13
+ if (!Number.isInteger(value) || value <= 0) {
14
+ throw new Error(`${field} must be a positive integer`);
15
+ }
16
+ }
17
+ async function resolveRetentionDays(ctx, requestedRetentionDays) {
18
+ if (requestedRetentionDays !== undefined) {
19
+ return requestedRetentionDays;
20
+ }
21
+ const config = await ctx.db
22
+ .query("config")
23
+ .withIndex("by_key", (q) => q.eq("key", "default"))
24
+ .unique();
25
+ return config?.retentionDays ?? DEFAULT_RETENTION_DAYS;
26
+ }
27
+ async function collectOldTerminalExecutions(ctx, cutoffTimestamp, fetchLimit) {
28
+ const collected = [];
29
+ for (const status of TERMINAL_STATUSES) {
30
+ if (collected.length >= fetchLimit) {
31
+ break;
32
+ }
33
+ const remaining = fetchLimit - collected.length;
34
+ const rows = await ctx.db
35
+ .query("executions")
36
+ .withIndex("by_status_started", (q) => q.eq("status", status).lt("startedAt", cutoffTimestamp))
37
+ .take(remaining);
38
+ collected.push(...rows);
39
+ }
40
+ collected.sort((a, b) => a.startedAt - b.startedAt);
41
+ return collected;
42
+ }
43
+ function collectExecutionPayloadRefs(execution, payloadIds) {
44
+ if (execution.payloadRef) {
45
+ payloadIds.add(execution.payloadRef);
46
+ }
47
+ if (execution.resultRef) {
48
+ payloadIds.add(execution.resultRef);
49
+ }
50
+ }
51
+ function collectJournalPayloadRefs(step, payloadIds) {
52
+ if (step.inputRef) {
53
+ payloadIds.add(step.inputRef);
54
+ }
55
+ if (step.runResult && step.runResult.kind !== "canceled" && step.runResult.valueRef) {
56
+ payloadIds.add(step.runResult.valueRef);
57
+ }
58
+ }
59
+ function collectSpanPayloadRefs(span, payloadIds) {
60
+ if (span.inputRef) {
61
+ payloadIds.add(span.inputRef);
62
+ }
63
+ if (span.outputRef) {
64
+ payloadIds.add(span.outputRef);
65
+ }
66
+ }
67
+ function collectDeferredPayloadRefs(deferred, payloadIds) {
68
+ if (deferred.exitRef) {
69
+ payloadIds.add(deferred.exitRef);
70
+ }
71
+ }
72
+ async function deleteExecutionArtifacts(ctx, execution) {
73
+ const payloadIds = new Set();
74
+ const workIds = new Set();
75
+ collectExecutionPayloadRefs(execution, payloadIds);
76
+ const journalSteps = await ctx.db
77
+ .query("journalSteps")
78
+ .withIndex("by_execution_step", (q) => q.eq("executionId", execution.executionId))
79
+ .collect();
80
+ for (const step of journalSteps) {
81
+ collectJournalPayloadRefs(step, payloadIds);
82
+ if (step.workId) {
83
+ workIds.add(step.workId);
84
+ }
85
+ await ctx.db.delete(step._id);
86
+ }
87
+ for (const workId of workIds) {
88
+ const completion = await ctx.db
89
+ .query("activityCompletions")
90
+ .withIndex("by_work_id", (q) => q.eq("workId", workId))
91
+ .unique();
92
+ if (completion) {
93
+ await ctx.db.delete(completion._id);
94
+ }
95
+ }
96
+ const spans = await ctx.db
97
+ .query("spans")
98
+ .withIndex("by_execution_start", (q) => q.eq("executionId", execution.executionId))
99
+ .collect();
100
+ for (const span of spans) {
101
+ collectSpanPayloadRefs(span, payloadIds);
102
+ await ctx.db.delete(span._id);
103
+ }
104
+ const logs = await ctx.db
105
+ .query("logs")
106
+ .withIndex("by_execution_time", (q) => q.eq("executionId", execution.executionId))
107
+ .collect();
108
+ for (const log of logs) {
109
+ await ctx.db.delete(log._id);
110
+ }
111
+ const deferreds = await ctx.db
112
+ .query("deferreds")
113
+ .withIndex("by_execution_name", (q) => q.eq("executionId", execution.executionId))
114
+ .collect();
115
+ for (const deferred of deferreds) {
116
+ collectDeferredPayloadRefs(deferred, payloadIds);
117
+ await ctx.db.delete(deferred._id);
118
+ }
119
+ for (const payloadId of payloadIds) {
120
+ const payload = await ctx.db.get(payloadId);
121
+ if (payload) {
122
+ await ctx.db.delete(payload._id);
123
+ }
124
+ }
125
+ await ctx.db.delete(execution._id);
126
+ }
127
+ /**
128
+ * Delete old terminal executions and all associated observability/state records.
129
+ */
130
+ export const cleanupOldExecutions = mutation({
131
+ args: {
132
+ retentionDays: v.optional(v.number()),
133
+ limit: v.optional(v.number()),
134
+ },
135
+ returns: v.object({
136
+ deletedCount: v.number(),
137
+ hasMore: v.boolean(),
138
+ }),
139
+ handler: async (ctx, args) => {
140
+ assertPositiveInteger(args.retentionDays, "retentionDays");
141
+ assertPositiveInteger(args.limit, "limit");
142
+ const retentionDays = await resolveRetentionDays(ctx, args.retentionDays);
143
+ const limit = clamp(args.limit ?? 50, 1, 200);
144
+ const cutoffTimestamp = Date.now() - retentionDays * 24 * 60 * 60 * 1000;
145
+ const fetched = await collectOldTerminalExecutions(ctx, cutoffTimestamp, limit + 1);
146
+ const targets = fetched.slice(0, limit);
147
+ const hasMore = fetched.length > limit;
148
+ for (const execution of targets) {
149
+ await deleteExecutionArtifacts(ctx, execution);
150
+ }
151
+ if (hasMore) {
152
+ await scheduleCleanupOldExecutions(ctx.scheduler, {
153
+ retentionDays,
154
+ limit,
155
+ });
156
+ }
157
+ return {
158
+ deletedCount: targets.length,
159
+ hasMore,
160
+ };
161
+ },
162
+ });
163
+ //# sourceMappingURL=cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/component/cleanup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Schedule a durable deferred completion wake-up.
3
+ *
4
+ * This models clock scheduling for workflow sleeps.
5
+ */
6
+ export declare const scheduleDeferredWake: import("convex/server").RegisteredMutation<"public", {
7
+ exit?: any;
8
+ executionId: string;
9
+ deferredName: string;
10
+ delayMs: number;
11
+ }, Promise<import("convex/values").GenericId<"_scheduled_functions">>>;
12
+ //# sourceMappingURL=clocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clocks.d.ts","sourceRoot":"","sources":["../../src/component/clocks.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;;sEAgB/B,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { v } from "convex/values";
2
+ import { mutation } from "./_generated/server.js";
3
+ import { scheduleDeferredDone } from "./boundaries.js";
4
+ /**
5
+ * Schedule a durable deferred completion wake-up.
6
+ *
7
+ * This models clock scheduling for workflow sleeps.
8
+ */
9
+ export const scheduleDeferredWake = mutation({
10
+ args: {
11
+ executionId: v.string(),
12
+ deferredName: v.string(),
13
+ delayMs: v.number(),
14
+ exit: v.optional(v.any()),
15
+ },
16
+ returns: v.id("_scheduled_functions"),
17
+ handler: async (ctx, args) => {
18
+ const delayMs = Math.max(0, args.delayMs);
19
+ return await scheduleDeferredDone(ctx.scheduler, delayMs, {
20
+ executionId: args.executionId,
21
+ deferredName: args.deferredName,
22
+ exit: args.exit ?? null,
23
+ });
24
+ },
25
+ });
26
+ //# sourceMappingURL=clocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clocks.js","sourceRoot":"","sources":["../../src/component/clocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC3C,IAAI,EAAE;QACJ,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;KAC1B;IACD,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,sBAAsB,CAAC;IACrC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,MAAM,oBAAoB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE;YACxD,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;SACxB,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { LogLevel } from "../shared/validators.js";
2
+ type ResolvedConfig = {
3
+ maxInlineBytes: number;
4
+ maxLogDataBytes: number;
5
+ maxSpanAttrBytes: number;
6
+ retentionDays: number;
7
+ defaultLogLevel: LogLevel;
8
+ };
9
+ /**
10
+ * Get the resolved configuration with defaults applied.
11
+ */
12
+ export declare const getConfig: import("convex/server").RegisteredQuery<"public", {}, Promise<ResolvedConfig>>;
13
+ /**
14
+ * Set configuration via partial update merge/upsert.
15
+ * All numeric values must be positive integers if provided.
16
+ */
17
+ export declare const setConfig: import("convex/server").RegisteredMutation<"public", {
18
+ retentionDays?: number | undefined;
19
+ defaultLogLevel?: "debug" | "info" | "warn" | "error" | undefined;
20
+ maxInlineBytes?: number | undefined;
21
+ maxLogDataBytes?: number | undefined;
22
+ maxSpanAttrBytes?: number | undefined;
23
+ }, Promise<ResolvedConfig>>;
24
+ export {};
25
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/component/config.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAKxD,KAAK,cAAc,GAAG;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,QAAQ,CAAC;CAC3B,CAAC;AA2CF;;GAEG;AACH,eAAO,MAAM,SAAS,gFAapB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,SAAS;;;;;;2BAsDpB,CAAC"}
@@ -0,0 +1,110 @@
1
+ import { v } from "convex/values";
2
+ import { mutation, query, } from "./_generated/server.js";
3
+ import { MAX_INLINE_PAYLOAD_BYTES, MAX_LOG_DATA_BYTES, MAX_SPAN_ATTR_BYTES, DEFAULT_RETENTION_DAYS, } from "../shared/constants.js";
4
+ import { vLogLevel } from "../shared/validators.js";
5
+ const DEFAULT_CONFIG = {
6
+ maxInlineBytes: MAX_INLINE_PAYLOAD_BYTES,
7
+ maxLogDataBytes: MAX_LOG_DATA_BYTES,
8
+ maxSpanAttrBytes: MAX_SPAN_ATTR_BYTES,
9
+ retentionDays: DEFAULT_RETENTION_DAYS,
10
+ defaultLogLevel: "info",
11
+ };
12
+ function validatePositiveInteger(value, fieldName) {
13
+ if (value !== undefined && value !== null) {
14
+ if (!Number.isInteger(value) || value <= 0) {
15
+ throw new Error(`${fieldName} must be a positive integer`);
16
+ }
17
+ }
18
+ }
19
+ async function getConfigDoc(ctx) {
20
+ return await ctx.db
21
+ .query("config")
22
+ .withIndex("by_key", (q) => q.eq("key", "default"))
23
+ .unique();
24
+ }
25
+ function resolveConfig(doc) {
26
+ if (!doc) {
27
+ return { ...DEFAULT_CONFIG };
28
+ }
29
+ return {
30
+ maxInlineBytes: doc.maxInlineBytes ?? DEFAULT_CONFIG.maxInlineBytes,
31
+ maxLogDataBytes: doc.maxLogDataBytes ?? DEFAULT_CONFIG.maxLogDataBytes,
32
+ maxSpanAttrBytes: doc.maxSpanAttrBytes ?? DEFAULT_CONFIG.maxSpanAttrBytes,
33
+ retentionDays: doc.retentionDays ?? DEFAULT_CONFIG.retentionDays,
34
+ defaultLogLevel: doc.defaultLogLevel ?? DEFAULT_CONFIG.defaultLogLevel,
35
+ };
36
+ }
37
+ /**
38
+ * Get the resolved configuration with defaults applied.
39
+ */
40
+ export const getConfig = query({
41
+ args: {},
42
+ returns: v.object({
43
+ maxInlineBytes: v.number(),
44
+ maxLogDataBytes: v.number(),
45
+ maxSpanAttrBytes: v.number(),
46
+ retentionDays: v.number(),
47
+ defaultLogLevel: vLogLevel,
48
+ }),
49
+ handler: async (ctx) => {
50
+ const doc = await getConfigDoc(ctx);
51
+ return resolveConfig(doc);
52
+ },
53
+ });
54
+ /**
55
+ * Set configuration via partial update merge/upsert.
56
+ * All numeric values must be positive integers if provided.
57
+ */
58
+ export const setConfig = mutation({
59
+ args: {
60
+ maxInlineBytes: v.optional(v.number()),
61
+ maxLogDataBytes: v.optional(v.number()),
62
+ maxSpanAttrBytes: v.optional(v.number()),
63
+ retentionDays: v.optional(v.number()),
64
+ defaultLogLevel: v.optional(vLogLevel),
65
+ },
66
+ returns: v.object({
67
+ maxInlineBytes: v.number(),
68
+ maxLogDataBytes: v.number(),
69
+ maxSpanAttrBytes: v.number(),
70
+ retentionDays: v.number(),
71
+ defaultLogLevel: vLogLevel,
72
+ }),
73
+ handler: async (ctx, args) => {
74
+ validatePositiveInteger(args.maxInlineBytes, "maxInlineBytes");
75
+ validatePositiveInteger(args.maxLogDataBytes, "maxLogDataBytes");
76
+ validatePositiveInteger(args.maxSpanAttrBytes, "maxSpanAttrBytes");
77
+ validatePositiveInteger(args.retentionDays, "retentionDays");
78
+ const existing = await getConfigDoc(ctx);
79
+ const patch = {};
80
+ if (args.maxInlineBytes !== undefined) {
81
+ patch.maxInlineBytes = args.maxInlineBytes;
82
+ }
83
+ if (args.maxLogDataBytes !== undefined) {
84
+ patch.maxLogDataBytes = args.maxLogDataBytes;
85
+ }
86
+ if (args.maxSpanAttrBytes !== undefined) {
87
+ patch.maxSpanAttrBytes = args.maxSpanAttrBytes;
88
+ }
89
+ if (args.retentionDays !== undefined) {
90
+ patch.retentionDays = args.retentionDays;
91
+ }
92
+ if (args.defaultLogLevel !== undefined) {
93
+ patch.defaultLogLevel = args.defaultLogLevel;
94
+ }
95
+ if (existing) {
96
+ if (Object.keys(patch).length > 0) {
97
+ await ctx.db.patch(existing._id, patch);
98
+ }
99
+ }
100
+ else {
101
+ await ctx.db.insert("config", {
102
+ key: "default",
103
+ ...patch,
104
+ });
105
+ }
106
+ const updated = await getConfigDoc(ctx);
107
+ return resolveConfig(updated);
108
+ },
109
+ });
110
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/component/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare const component: import("convex/server").ComponentDefinition<any>;
2
+ export default component;
3
+ //# sourceMappingURL=convex.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convex.config.d.ts","sourceRoot":"","sources":["../../src/component/convex.config.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,SAAS,kDAAqC,CAAC;AAGrD,eAAe,SAAS,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { defineComponent } from "convex/server";
2
+ import workpool from "@convex-dev/workpool/convex.config";
3
+ const component = defineComponent("effectWorkflows");
4
+ component.use(workpool);
5
+ export default component;
6
+ //# sourceMappingURL=convex.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convex.config.js","sourceRoot":"","sources":["../../src/component/convex.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,QAAQ,MAAM,oCAAoC,CAAC;AAE1D,MAAM,SAAS,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;AACrD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAExB,eAAe,SAAS,CAAC"}
@@ -0,0 +1,268 @@
1
+ export declare const listExecutions: import("convex/server").RegisteredQuery<"public", {
2
+ limit?: number | undefined;
3
+ startedAfter?: number | undefined;
4
+ startedBefore?: number | undefined;
5
+ workflowName?: string | undefined;
6
+ order?: "asc" | "desc" | undefined;
7
+ cursorExecutionId?: string | undefined;
8
+ cursorStartedAt?: number | undefined;
9
+ status?: "pending" | "running" | "suspended" | "completed" | "failed" | "interrupted" | undefined;
10
+ tenantId?: string | undefined;
11
+ }, Promise<{
12
+ page: {
13
+ _id: import("convex/values").GenericId<"executions">;
14
+ _creationTime: number;
15
+ error?: string | undefined;
16
+ tenantId?: string | undefined;
17
+ parentExecutionId?: string | undefined;
18
+ runnerHandle?: string | undefined;
19
+ payloadRef?: import("convex/values").GenericId<"payloads"> | undefined;
20
+ payloadPreview?: any;
21
+ resultKind?: "success" | "failure" | undefined;
22
+ resultRef?: import("convex/values").GenericId<"payloads"> | undefined;
23
+ resultPreview?: any;
24
+ completedAt?: number | undefined;
25
+ lastResumedAt?: number | undefined;
26
+ lastSuspendedAt?: number | undefined;
27
+ executionId: string;
28
+ workflowName: string;
29
+ status: "pending" | "running" | "suspended" | "completed" | "failed" | "interrupted";
30
+ generation: number;
31
+ traceId: string;
32
+ startedAt: number;
33
+ payloadSize: number;
34
+ }[];
35
+ cursor: {
36
+ startedAt: number;
37
+ executionId: string;
38
+ } | null;
39
+ isDone: boolean;
40
+ }>>;
41
+ export declare const getExecution: import("convex/server").RegisteredQuery<"public", {
42
+ executionId: string;
43
+ }, Promise<{
44
+ execution: {
45
+ _id: import("convex/values").GenericId<"executions">;
46
+ _creationTime: number;
47
+ error?: string | undefined;
48
+ tenantId?: string | undefined;
49
+ parentExecutionId?: string | undefined;
50
+ runnerHandle?: string | undefined;
51
+ payloadRef?: import("convex/values").GenericId<"payloads"> | undefined;
52
+ payloadPreview?: any;
53
+ resultKind?: "success" | "failure" | undefined;
54
+ resultRef?: import("convex/values").GenericId<"payloads"> | undefined;
55
+ resultPreview?: any;
56
+ completedAt?: number | undefined;
57
+ lastResumedAt?: number | undefined;
58
+ lastSuspendedAt?: number | undefined;
59
+ executionId: string;
60
+ workflowName: string;
61
+ status: "pending" | "running" | "suspended" | "completed" | "failed" | "interrupted";
62
+ generation: number;
63
+ traceId: string;
64
+ startedAt: number;
65
+ payloadSize: number;
66
+ };
67
+ steps: {
68
+ _id: import("convex/values").GenericId<"journalSteps">;
69
+ _creationTime: number;
70
+ workId?: string | undefined;
71
+ spanId?: string | undefined;
72
+ attempt?: number | undefined;
73
+ runResult?: {
74
+ valueRef?: import("convex/values").GenericId<"payloads"> | undefined;
75
+ valuePreview?: any;
76
+ kind: "success";
77
+ } | {
78
+ valueRef?: import("convex/values").GenericId<"payloads"> | undefined;
79
+ valuePreview?: any;
80
+ error: string;
81
+ kind: "failed";
82
+ } | {
83
+ kind: "canceled";
84
+ } | undefined;
85
+ resumeToken?: string | undefined;
86
+ completedAt?: number | undefined;
87
+ inputRef?: import("convex/values").GenericId<"payloads"> | undefined;
88
+ inputPreview?: any;
89
+ executionId: string;
90
+ stepNumber: number;
91
+ kind: "activity" | "system" | "deferred" | "clock" | "nestedWorkflow";
92
+ state: "suspended" | "completed" | "failed" | "started" | "canceled";
93
+ startedAt: number;
94
+ name: string;
95
+ signature: {
96
+ attempt?: number | undefined;
97
+ scheduleMeta?: any;
98
+ schemaVersion?: number | undefined;
99
+ kind: "activity" | "system" | "deferred" | "clock" | "nestedWorkflow";
100
+ opName: string;
101
+ };
102
+ inputSize: number;
103
+ }[];
104
+ spans: {
105
+ _id: import("convex/values").GenericId<"spans">;
106
+ _creationTime: number;
107
+ stepNumber?: number | undefined;
108
+ error?: string | undefined;
109
+ attempt?: number | undefined;
110
+ attributes?: any;
111
+ parentSpanId?: string | undefined;
112
+ endTime?: number | undefined;
113
+ inputRef?: import("convex/values").GenericId<"payloads"> | undefined;
114
+ inputPreview?: any;
115
+ inputSize?: number | undefined;
116
+ outputRef?: import("convex/values").GenericId<"payloads"> | undefined;
117
+ outputPreview?: any;
118
+ outputSize?: number | undefined;
119
+ executionId: string;
120
+ spanId: string;
121
+ status: "started" | "ended";
122
+ kind: "workflow" | "activity" | "system" | "deferred" | "clock";
123
+ traceId: string;
124
+ name: string;
125
+ startTime: number;
126
+ }[];
127
+ logs: {
128
+ _id: import("convex/values").GenericId<"logs">;
129
+ _creationTime: number;
130
+ stepNumber?: number | undefined;
131
+ spanId?: string | undefined;
132
+ traceId?: string | undefined;
133
+ data?: any;
134
+ executionId: string;
135
+ level: "debug" | "info" | "warn" | "error";
136
+ source: "workflow" | "activity" | "engine" | "system";
137
+ message: string;
138
+ timestamp: number;
139
+ }[];
140
+ } | null>>;
141
+ export declare const listExecutionSteps: import("convex/server").RegisteredQuery<"public", {
142
+ limit?: number | undefined;
143
+ afterStepNumber?: number | undefined;
144
+ state?: "suspended" | "completed" | "failed" | "started" | "canceled" | undefined;
145
+ executionId: string;
146
+ }, Promise<{
147
+ page: {
148
+ _id: import("convex/values").GenericId<"journalSteps">;
149
+ _creationTime: number;
150
+ workId?: string | undefined;
151
+ spanId?: string | undefined;
152
+ attempt?: number | undefined;
153
+ runResult?: {
154
+ valueRef?: import("convex/values").GenericId<"payloads"> | undefined;
155
+ valuePreview?: any;
156
+ kind: "success";
157
+ } | {
158
+ valueRef?: import("convex/values").GenericId<"payloads"> | undefined;
159
+ valuePreview?: any;
160
+ error: string;
161
+ kind: "failed";
162
+ } | {
163
+ kind: "canceled";
164
+ } | undefined;
165
+ resumeToken?: string | undefined;
166
+ completedAt?: number | undefined;
167
+ inputRef?: import("convex/values").GenericId<"payloads"> | undefined;
168
+ inputPreview?: any;
169
+ executionId: string;
170
+ stepNumber: number;
171
+ kind: "activity" | "system" | "deferred" | "clock" | "nestedWorkflow";
172
+ state: "suspended" | "completed" | "failed" | "started" | "canceled";
173
+ startedAt: number;
174
+ name: string;
175
+ signature: {
176
+ attempt?: number | undefined;
177
+ scheduleMeta?: any;
178
+ schemaVersion?: number | undefined;
179
+ kind: "activity" | "system" | "deferred" | "clock" | "nestedWorkflow";
180
+ opName: string;
181
+ };
182
+ inputSize: number;
183
+ }[];
184
+ cursor: number | null;
185
+ isDone: boolean;
186
+ }>>;
187
+ export declare const listExecutionSpans: import("convex/server").RegisteredQuery<"public", {
188
+ limit?: number | undefined;
189
+ status?: "started" | "ended" | undefined;
190
+ afterSpanId?: string | undefined;
191
+ afterStartTime?: number | undefined;
192
+ kind?: "workflow" | "activity" | "system" | "deferred" | "clock" | undefined;
193
+ executionId: string;
194
+ }, Promise<{
195
+ page: {
196
+ _id: import("convex/values").GenericId<"spans">;
197
+ _creationTime: number;
198
+ stepNumber?: number | undefined;
199
+ error?: string | undefined;
200
+ attempt?: number | undefined;
201
+ attributes?: any;
202
+ parentSpanId?: string | undefined;
203
+ endTime?: number | undefined;
204
+ inputRef?: import("convex/values").GenericId<"payloads"> | undefined;
205
+ inputPreview?: any;
206
+ inputSize?: number | undefined;
207
+ outputRef?: import("convex/values").GenericId<"payloads"> | undefined;
208
+ outputPreview?: any;
209
+ outputSize?: number | undefined;
210
+ executionId: string;
211
+ spanId: string;
212
+ status: "started" | "ended";
213
+ kind: "workflow" | "activity" | "system" | "deferred" | "clock";
214
+ traceId: string;
215
+ name: string;
216
+ startTime: number;
217
+ }[];
218
+ cursor: {
219
+ startTime: number;
220
+ spanId: import("convex/values").GenericId<"spans">;
221
+ } | null;
222
+ isDone: boolean;
223
+ }>>;
224
+ export declare const listExecutionLogs: import("convex/server").RegisteredQuery<"public", {
225
+ limit?: number | undefined;
226
+ afterLogId?: string | undefined;
227
+ afterTimestamp?: number | undefined;
228
+ level?: "debug" | "info" | "warn" | "error" | undefined;
229
+ order?: "asc" | "desc" | undefined;
230
+ source?: "workflow" | "activity" | "engine" | "system" | undefined;
231
+ spanId?: string | undefined;
232
+ executionId: string;
233
+ }, Promise<{
234
+ page: {
235
+ _id: import("convex/values").GenericId<"logs">;
236
+ _creationTime: number;
237
+ stepNumber?: number | undefined;
238
+ spanId?: string | undefined;
239
+ traceId?: string | undefined;
240
+ data?: any;
241
+ executionId: string;
242
+ level: "debug" | "info" | "warn" | "error";
243
+ source: "workflow" | "activity" | "engine" | "system";
244
+ message: string;
245
+ timestamp: number;
246
+ }[];
247
+ cursor: {
248
+ timestamp: number;
249
+ logId: import("convex/values").GenericId<"logs">;
250
+ } | null;
251
+ isDone: boolean;
252
+ }>>;
253
+ export declare const executionMetrics: import("convex/server").RegisteredQuery<"public", {
254
+ startedAfter?: number | undefined;
255
+ startedBefore?: number | undefined;
256
+ workflowName?: string | undefined;
257
+ }, Promise<{
258
+ total: number;
259
+ completed: number;
260
+ failed: number;
261
+ interrupted: number;
262
+ active: number;
263
+ successRate: number;
264
+ avgDurationMs: number;
265
+ p50DurationMs: number;
266
+ p95DurationMs: number;
267
+ }>>;
268
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/component/dashboard.ts"],"names":[],"mappings":"AAyXA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEzB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAyCvB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqC7B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyD7B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiF5B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;GA2E3B,CAAC"}