@codemation/host 0.5.1 → 0.7.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 (226) hide show
  1. package/CHANGELOG.md +465 -0
  2. package/LICENSE +1 -37
  3. package/dist/{ApiPaths-CLTHphYZ.js → ApiPaths-Dv1dcHu_.js} +4 -4
  4. package/dist/ApiPaths-Dv1dcHu_.js.map +1 -0
  5. package/dist/{AppConfigFactory-CvpFScwB.js → AppConfigFactory-Cx4qQvRk.js} +114 -53
  6. package/dist/AppConfigFactory-Cx4qQvRk.js.map +1 -0
  7. package/dist/{AppConfigFactory-LK76niPc.d.ts → AppConfigFactory-DnLoQ9Li.d.ts} +8527 -5549
  8. package/dist/{AppContainerFactory-BlLrm6_h.js → AppContainerFactory-DqKYCRNP.js} +7656 -2090
  9. package/dist/AppContainerFactory-DqKYCRNP.js.map +1 -0
  10. package/dist/{CodemationAppContext-CvWi5gey.d.ts → CodemationAppContext-CKVv9W9q.d.ts} +8 -4
  11. package/dist/{CodemationAuthoring.types-BuKNTDC1.d.ts → CodemationAuthoring.types-DA3G3s6d.d.ts} +25 -5
  12. package/dist/{CodemationAuthoring.types-DZl-sJaM.js → CodemationAuthoring.types-NGkBcmmT.js} +18 -6
  13. package/dist/CodemationAuthoring.types-NGkBcmmT.js.map +1 -0
  14. package/dist/{CodemationConfigNormalizer-CYdR0PR5.d.ts → CodemationConfigNormalizer-BAKjetJ6.d.ts} +3 -3
  15. package/dist/{CodemationConsumerConfigLoader-BeAUS144.js → CodemationConsumerConfigLoader-GYpBBvqE.js} +79 -10
  16. package/dist/CodemationConsumerConfigLoader-GYpBBvqE.js.map +1 -0
  17. package/dist/{CodemationConsumerConfigLoader-C3nAj9Bj.d.ts → CodemationConsumerConfigLoader-nxOqvv46.d.ts} +17 -2
  18. package/dist/{CodemationPluginListMerger-B-W5Fa_X.js → CodemationPluginListMerger-D1B1IEbt.js} +1 -1
  19. package/dist/{CodemationPluginListMerger-B-W5Fa_X.js.map → CodemationPluginListMerger-D1B1IEbt.js.map} +1 -1
  20. package/dist/{CodemationPluginListMerger-D-gwVwtw.d.ts → CodemationPluginListMerger-DKLAHT2b.d.ts} +123 -16
  21. package/dist/CodemationTsyringeTypeInfoRegistrar-Bj6FJYFz.js +97 -0
  22. package/dist/CodemationTsyringeTypeInfoRegistrar-Bj6FJYFz.js.map +1 -0
  23. package/dist/{CodemationWhitelabelConfig-CWbcyQqn.d.ts → CodemationWhitelabelConfig-Ca2mCUeC.d.ts} +2 -2
  24. package/dist/{CollectionContracts.types-DdpHft0i.d.ts → CollectionContracts.types-DDyFYT_D.d.ts} +1 -1
  25. package/dist/{CredentialContractsRegistry-D7mcPed2.d.ts → CredentialContractsRegistry-Bq2bq28t.d.ts} +2 -2
  26. package/dist/{CredentialServices-DdCEP2xt.d.ts → CredentialServices-Be2I60Th.d.ts} +65 -20
  27. package/dist/{CredentialServices-CgxwguAv.js → CredentialServices-Dk8yypeL.js} +310 -51
  28. package/dist/CredentialServices-Dk8yypeL.js.map +1 -0
  29. package/dist/InternalHonoApiRouteRegistrar-Ce1yxpnO.d.ts +17 -0
  30. package/dist/InternalPingRegistrar-DY3kSfxP.js +221 -0
  31. package/dist/InternalPingRegistrar-DY3kSfxP.js.map +1 -0
  32. package/dist/{ItemsInputNormalizer-D1WppVMU.d.ts → ItemsInputNormalizer-_RwIfRIQ.d.ts} +108 -25
  33. package/dist/{LogLevelPolicyFactory-CampWO0l.d.ts → LogLevelPolicyFactory-ewCHLDLn.d.ts} +2 -2
  34. package/dist/{PublicFrontendBootstrap-DzBgwOnG.d.ts → PublicFrontendBootstrap-Cev3qK46.d.ts} +9 -2
  35. package/dist/PublicFrontendBootstrapFactory-CY2FS-5g.d.ts +82 -0
  36. package/dist/{PublicFrontendBootstrapJsonCodec-Cl_DLRh0.d.ts → PublicFrontendBootstrapJsonCodec-CXG9Dxft.d.ts} +3 -3
  37. package/dist/{PublicFrontendBootstrapJsonCodec-DzqvA0uo.js → PublicFrontendBootstrapJsonCodec-CegIF_ne.js} +7 -2
  38. package/dist/PublicFrontendBootstrapJsonCodec-CegIF_ne.js.map +1 -0
  39. package/dist/ServerLoggerFactory-Ckk52S3w.js +223 -0
  40. package/dist/ServerLoggerFactory-Ckk52S3w.js.map +1 -0
  41. package/dist/{TelemetryContracts-BsOD_Y17.d.ts → TelemetryContracts-BtDx84Cp.d.ts} +13 -4
  42. package/dist/{WorkflowPolicyUiPresentationFactory-DNE5oAI6.d.ts → WorkflowPolicyUiPresentationFactory-6MyjCvBO.d.ts} +2 -2
  43. package/dist/{WorkflowPolicyUiPresentationFactory-DhPqQ9aB.js → WorkflowPolicyUiPresentationFactory-Bb-ae_Zh.js} +1 -1
  44. package/dist/{WorkflowPolicyUiPresentationFactory-DhPqQ9aB.js.map → WorkflowPolicyUiPresentationFactory-Bb-ae_Zh.js.map} +1 -1
  45. package/dist/{WorkflowViewContracts-0ZgsHQdp.d.ts → WorkflowViewContracts-B7aFQcIw.d.ts} +15 -1
  46. package/dist/authoring.d.ts +5 -5
  47. package/dist/authoring.js +1 -1
  48. package/dist/client.d.ts +4 -4
  49. package/dist/client.js +2 -2
  50. package/dist/consumer.d.ts +6 -6
  51. package/dist/consumer.js +2 -2
  52. package/dist/credentials.d.ts +6 -6
  53. package/dist/credentials.js +1 -1
  54. package/dist/devServerSidecar.d.ts +2 -2
  55. package/dist/devServerSidecar.js +1 -94
  56. package/dist/devServerSidecar.js.map +1 -1
  57. package/dist/dto.d.ts +6 -6
  58. package/dist/{index-BlGs9e9Q.d.ts → index-DilAYwnH.d.ts} +49 -3
  59. package/dist/index.d.ts +110 -21
  60. package/dist/index.js +15 -13
  61. package/dist/mapping.d.ts +2 -2
  62. package/dist/mapping.js +1 -1
  63. package/dist/nextServer.d.ts +43 -88
  64. package/dist/nextServer.js +9 -7
  65. package/dist/pairing.d.ts +93 -0
  66. package/dist/pairing.js +5 -0
  67. package/dist/pairing.types-snfZ_OzB.d.ts +19 -0
  68. package/dist/{persistenceServer-CpNFYa_q.js → persistenceServer-C-hH4z6l.js} +2 -2
  69. package/dist/{persistenceServer-CpNFYa_q.js.map → persistenceServer-C-hH4z6l.js.map} +1 -1
  70. package/dist/persistenceServer-CeTHtC6E.d.ts +30 -0
  71. package/dist/persistenceServer.d.ts +8 -8
  72. package/dist/persistenceServer.js +3 -3
  73. package/dist/{server-CQWdkT7t.d.ts → server-C4bS62rg.d.ts} +21 -6
  74. package/dist/{server-BK43OKxW.js → server-Y7kxwtCK.js} +7 -6
  75. package/dist/{server-BK43OKxW.js.map → server-Y7kxwtCK.js.map} +1 -1
  76. package/dist/server.d.ts +14 -14
  77. package/dist/server.js +13 -11
  78. package/package.json +29 -42
  79. package/prisma/migrations/20260507120000_execution_instance_child_run_id/migration.sql +5 -0
  80. package/prisma/migrations/20260519000000_workflow_audit_log/migration.sql +23 -0
  81. package/prisma/migrations/20260519100000_storage_growth_fixes/migration.sql +61 -0
  82. package/prisma/migrations.sqlite/20260507120000_execution_instance_child_run_id/migration.sql +5 -0
  83. package/prisma/migrations.sqlite/20260519000000_workflow_audit_log/migration.sql +21 -0
  84. package/prisma/migrations.sqlite/20260519100000_storage_growth_fixes/migration.sql +29 -0
  85. package/prisma/schema.postgresql.prisma +56 -17
  86. package/prisma/schema.sqlite.prisma +56 -17
  87. package/prisma-generated/prisma-postgresql-client/edge.js +35 -6
  88. package/prisma-generated/prisma-postgresql-client/index-browser.js +31 -2
  89. package/prisma-generated/prisma-postgresql-client/index.d.ts +8971 -5718
  90. package/prisma-generated/prisma-postgresql-client/index.js +35 -6
  91. package/prisma-generated/prisma-postgresql-client/package.json +1 -1
  92. package/prisma-generated/prisma-postgresql-client/schema.prisma +39 -0
  93. package/prisma-generated/prisma-sqlite-client/edge.js +35 -6
  94. package/prisma-generated/prisma-sqlite-client/index-browser.js +31 -2
  95. package/prisma-generated/prisma-sqlite-client/index.d.ts +8963 -5715
  96. package/prisma-generated/prisma-sqlite-client/index.js +35 -6
  97. package/prisma-generated/prisma-sqlite-client/package.json +1 -1
  98. package/prisma-generated/prisma-sqlite-client/schema.prisma +39 -0
  99. package/scripts/check-collections.mjs +18 -0
  100. package/scripts/generate-prisma-clients.mjs +20 -11
  101. package/src/application/WorkflowAuditLogPruneScheduler.ts +96 -0
  102. package/src/application/auth/AuthenticatedPrincipal.ts +4 -0
  103. package/src/application/commands/StartWorkflowRunCommandHandler.ts +4 -0
  104. package/src/application/contracts/WorkflowViewContracts.ts +11 -0
  105. package/src/application/contracts/WorkflowWebsocketMessage.ts +3 -1
  106. package/src/application/mapping/WorkflowDefinitionMapper.ts +44 -1
  107. package/src/application/runs/WorkflowRunRetentionPruneScheduler.ts +7 -1
  108. package/src/application/telemetry/OtelExecutionTelemetry.types.ts +5 -0
  109. package/src/application/telemetry/OtelExecutionTelemetryFactory.ts +4 -0
  110. package/src/application/telemetry/StoredTelemetrySpanScope.ts +6 -2
  111. package/src/application/telemetry/TelemetryRetentionTimestampFactory.ts +27 -17
  112. package/src/application/telemetry/TelemetrySpanPublisher.ts +11 -0
  113. package/src/application/websocket/TelemetrySpanWebsocketRelay.ts +31 -0
  114. package/src/applicationTokens.ts +20 -1
  115. package/src/audit/IAuditEmitter.ts +32 -0
  116. package/src/audit/PrismaWorkflowAuditLogRepository.ts +34 -0
  117. package/src/audit/WorkflowAuditLogWriter.ts +125 -0
  118. package/src/auth/managed/ManagedAuthConfig.ts +29 -0
  119. package/src/auth/managed/ManagedAuthMiddleware.ts +52 -0
  120. package/src/auth/managed/ManagedCorsMiddleware.ts +43 -0
  121. package/src/auth/managed/ManagedModeBootGuard.ts +27 -0
  122. package/src/auth/managed/index.ts +5 -0
  123. package/src/bootstrap/AppContainerFactory.ts +277 -29
  124. package/src/bootstrap/AppContainerLifecycle.ts +31 -0
  125. package/src/bootstrap/perf/BootTimer.ts +168 -0
  126. package/src/bootstrap/runtime/AppConfigFactory.ts +21 -65
  127. package/src/bootstrap/runtime/FrontendRuntime.ts +4 -1
  128. package/src/bootstrap/runtime/WorkerRuntime.ts +2 -1
  129. package/src/credentials/BrokerClient.ts +49 -0
  130. package/src/credentials/BrokerRefreshError.ts +12 -0
  131. package/src/credentials/BrokerRefreshInvalidGrantError.ts +13 -0
  132. package/src/credentials/ControlPlaneCatalogFetcher.ts +261 -0
  133. package/src/credentials/CredentialOAuth2MaterialReader.ts +136 -0
  134. package/src/credentials/InternalCredentialsListRegistrar.ts +48 -0
  135. package/src/credentials/InternalCredentialsPushRegistrar.ts +125 -0
  136. package/src/credentials/LocalOAuthFlowExecutor.ts +316 -0
  137. package/src/credentials/ManagedOAuthFlowExecutor.ts +94 -0
  138. package/src/credentials/ManagedOAuthRefreshInvalidGrantError.ts +13 -0
  139. package/src/credentials/catalogTypes.ts +4 -0
  140. package/src/credentials/refresh/CredentialDisconnectedError.ts +11 -0
  141. package/src/domain/credentials/CredentialBindingService.ts +54 -2
  142. package/src/domain/credentials/CredentialKeyRotatedError.ts +22 -0
  143. package/src/domain/credentials/CredentialSecretCipher.ts +68 -6
  144. package/src/domain/credentials/CredentialTypeRegistryImpl.ts +117 -10
  145. package/src/domain/credentials/OAuth2RedirectUriResolver.ts +79 -0
  146. package/src/domain/credentials/WorkflowCredentialNodeResolver.ts +14 -5
  147. package/src/domain/telemetry/TelemetryContracts.ts +7 -1
  148. package/src/domain/workflows/WorkflowActivationPreflight.ts +24 -1
  149. package/src/domain/workflows/WorkflowActivationPreflightRules.ts +40 -1
  150. package/src/index.ts +6 -0
  151. package/src/infrastructure/binary/LocalFilesystemBinaryStorageRegistry.ts +29 -1
  152. package/src/infrastructure/binary/S3BinaryStorage.ts +169 -0
  153. package/src/infrastructure/binary/S3BinaryStorageConfig.ts +17 -0
  154. package/src/infrastructure/config/CodemationPluginRegistrar.ts +3 -1
  155. package/src/infrastructure/persistence/CodemationDatabaseUrlParser.ts +41 -0
  156. package/src/infrastructure/persistence/InMemoryTelemetryArtifactStore.ts +8 -3
  157. package/src/infrastructure/persistence/InMemoryWorkflowRunRepository.ts +1 -0
  158. package/src/infrastructure/persistence/PrismaMigrationDeployer.ts +21 -13
  159. package/src/infrastructure/persistence/PrismaTelemetryArtifactStore.ts +43 -8
  160. package/src/infrastructure/persistence/PrismaWorkflowRunRepository.ts +33 -3
  161. package/src/infrastructure/persistence/PrismaWorkflowSnapshotRepository.ts +48 -0
  162. package/src/mcp/AgentMcpIntegrationImpl.ts +344 -0
  163. package/src/mcp/McpClientFactory.ts +29 -0
  164. package/src/mcp/McpConnectionPool.ts +184 -0
  165. package/src/mcp/McpConnectionPool.types.ts +12 -0
  166. package/src/mcp/McpServerCatalog.ts +104 -0
  167. package/src/mcp/index.ts +5 -0
  168. package/src/pairing/HmacRequestSigner.ts +32 -0
  169. package/src/pairing/IncomingHmacVerifier.ts +82 -0
  170. package/src/pairing/InternalHmacAuthMiddleware.ts +33 -0
  171. package/src/pairing/InternalPingRegistrar.ts +25 -0
  172. package/src/pairing/PairedFetch.ts +33 -0
  173. package/src/pairing/PairingConfigFactory.ts +35 -0
  174. package/src/pairing/PairingConfigToken.ts +6 -0
  175. package/src/pairing/index.ts +14 -0
  176. package/src/pairing/pairing.types.ts +18 -0
  177. package/src/pairing.ts +17 -0
  178. package/src/persistenceServer.ts +1 -0
  179. package/src/presentation/config/AppConfig.ts +7 -1
  180. package/src/presentation/config/CodemationAuthConfig.ts +1 -1
  181. package/src/presentation/config/CodemationAuthoring.types.ts +54 -5
  182. package/src/presentation/config/CodemationConfig.ts +3 -0
  183. package/src/presentation/config/CodemationConfigNormalizer.ts +39 -1
  184. package/src/presentation/config/CodemationPlugin.ts +2 -1
  185. package/src/presentation/frontend/CodemationFrontendAuthSnapshot.ts +5 -0
  186. package/src/presentation/frontend/CodemationFrontendAuthSnapshotFactory.ts +7 -1
  187. package/src/presentation/frontend/PublicFrontendBootstrap.ts +2 -0
  188. package/src/presentation/frontend/PublicFrontendBootstrapFactory.ts +5 -1
  189. package/src/presentation/frontend/PublicFrontendBootstrapJsonCodec.ts +4 -1
  190. package/src/presentation/http/ApiPaths.ts +4 -4
  191. package/src/presentation/http/ServerHttpErrorResponseFactory.ts +39 -2
  192. package/src/presentation/http/hono/CodemationHonoApiAppFactory.ts +33 -8
  193. package/src/presentation/http/hono/InternalHonoApiRouteRegistrar.ts +12 -0
  194. package/src/presentation/http/hono/registrars/ManagedMeHonoApiRouteRegistrar.ts +35 -0
  195. package/src/presentation/http/hono/registrars/OAuth2HonoApiRouteRegistrar.ts +2 -2
  196. package/src/presentation/http/routeHandlers/CredentialHttpRouteHandler.ts +28 -0
  197. package/src/presentation/http/routeHandlers/OAuth2HttpRouteHandlerFactory.ts +98 -41
  198. package/src/presentation/server/CodemationConsumerConfigLoader.ts +54 -7
  199. package/src/presentation/server/CodemationPluginDiscovery.ts +5 -0
  200. package/src/presentation/server/WorkflowDefinitionExportsResolver.ts +18 -0
  201. package/src/presentation/server/WorkflowModulePathFinder.ts +12 -1
  202. package/src/presentation/websocket/ManagedWebsocketAuthenticator.ts +50 -0
  203. package/src/presentation/websocket/WebsocketAuthenticator.types.ts +12 -0
  204. package/src/presentation/websocket/WorkflowWebsocketServer.ts +24 -3
  205. package/src/process/ExecaProcessRunner.ts +41 -0
  206. package/src/process/ProcessRunner.types.ts +39 -0
  207. package/src/server.ts +2 -0
  208. package/src/workflows/InternalWorkflowActivationRegistrar.ts +42 -0
  209. package/src/workflows/InternalWorkflowDetailRegistrar.ts +33 -0
  210. package/src/workflows/InternalWorkflowTestRunRegistrar.ts +91 -0
  211. package/src/workflows/InternalWorkflowsListRegistrar.ts +28 -0
  212. package/src/workflows/discovery/WorkflowDirectoryDiscoverer.ts +79 -0
  213. package/tsconfig.json +2 -0
  214. package/vitest.shared.ts +5 -0
  215. package/dist/ApiPaths-CLTHphYZ.js.map +0 -1
  216. package/dist/AppConfigFactory-CvpFScwB.js.map +0 -1
  217. package/dist/AppContainerFactory-BlLrm6_h.js.map +0 -1
  218. package/dist/CodemationAuthoring.types-DZl-sJaM.js.map +0 -1
  219. package/dist/CodemationConsumerConfigLoader-BeAUS144.js.map +0 -1
  220. package/dist/CredentialServices-CgxwguAv.js.map +0 -1
  221. package/dist/PublicFrontendBootstrapFactory-BMWqNM9a.d.ts +0 -45
  222. package/dist/PublicFrontendBootstrapJsonCodec-DzqvA0uo.js.map +0 -1
  223. package/dist/ServerLoggerFactory-BKSIh9Xv.js +0 -98
  224. package/dist/ServerLoggerFactory-BKSIh9Xv.js.map +0 -1
  225. package/dist/persistenceServer-CIVt3UOX.d.ts +0 -9
  226. package/src/domain/credentials/OAuth2ConnectServiceFactory.ts +0 -411
@@ -18,6 +18,7 @@ model Run {
18
18
  executionOptionsJson String? @map("execution_options_json")
19
19
  controlJson String? @map("control_json")
20
20
  workflowSnapshotJson String? @map("workflow_snapshot_json")
21
+ workflowSnapshotId String? @map("workflow_snapshot_id")
21
22
  policySnapshotJson String? @map("policy_snapshot_json")
22
23
  engineCountersJson String? @map("engine_counters_json")
23
24
  mutableStateJson String? @map("mutable_state_json")
@@ -33,9 +34,11 @@ model Run {
33
34
  slotProjection RunSlotProjection?
34
35
  testSuiteRun TestSuiteRun? @relation(fields: [testSuiteRunId], references: [id])
35
36
  testAssertions TestAssertion[]
37
+ workflowSnapshot WorkflowSnapshot? @relation(fields: [workflowSnapshotId], references: [id])
36
38
  @@index([workflowId, startedAt])
37
39
  @@index([workflowId, status, finishedAt])
38
40
  @@index([testSuiteRunId, testCaseIndex])
41
+ @@index([workflowSnapshotId])
39
42
  }
40
43
 
41
44
  model RunWorkItem {
@@ -105,6 +108,7 @@ model ExecutionInstance {
105
108
  iterationId String? @map("iteration_id")
106
109
  itemIndex Int? @map("item_index")
107
110
  parentInvocationId String? @map("parent_invocation_id")
111
+ childRunId String? @map("child_run_id")
108
112
 
109
113
  run Run @relation(fields: [runId], references: [runId], onDelete: Cascade)
110
114
 
@@ -257,24 +261,39 @@ model TelemetrySpan {
257
261
  @@index([retentionExpiresAt])
258
262
  }
259
263
 
264
+ model WorkflowSnapshot {
265
+ id String @id
266
+ workflowId String @map("workflow_id")
267
+ /// SHA-256 hex digest of snapshotJson — dedup key: same workflow content → one row.
268
+ snapshotHash String @map("snapshot_hash")
269
+ snapshotJson String @map("snapshot_json")
270
+ createdAt String @map("created_at")
271
+
272
+ runs Run[]
273
+
274
+ @@unique([workflowId, snapshotHash])
275
+ @@index([workflowId, snapshotHash])
276
+ }
277
+
260
278
  model TelemetryArtifact {
261
- artifactId String @id @map("artifact_id")
262
- traceId String @map("trace_id")
263
- spanId String @map("span_id")
264
- runId String @map("run_id")
265
- workflowId String @map("workflow_id")
266
- nodeId String? @map("node_id")
267
- activationId String? @map("activation_id")
268
- kind String
269
- contentType String @map("content_type")
270
- previewText String? @map("preview_text")
271
- previewJson String? @map("preview_json")
272
- payloadText String? @map("payload_text")
273
- payloadJson String? @map("payload_json")
274
- bytes Int?
275
- truncated Boolean?
276
- createdAt String @map("created_at")
277
- expiresAt String? @map("expires_at")
279
+ artifactId String @id @map("artifact_id")
280
+ traceId String @map("trace_id")
281
+ spanId String @map("span_id")
282
+ runId String @map("run_id")
283
+ workflowId String @map("workflow_id")
284
+ nodeId String? @map("node_id")
285
+ activationId String? @map("activation_id")
286
+ kind String
287
+ contentType String @map("content_type")
288
+ previewText String? @map("preview_text")
289
+ previewJson String? @map("preview_json")
290
+ payloadText String? @map("payload_text")
291
+ payloadJson String? @map("payload_json")
292
+ payloadStorageKey String? @map("payload_storage_key")
293
+ bytes Int?
294
+ truncated Boolean?
295
+ createdAt String @map("created_at")
296
+ expiresAt String? @map("expires_at")
278
297
  retentionExpiresAt String? @map("retention_expires_at")
279
298
 
280
299
  @@index([traceId, createdAt])
@@ -468,3 +487,23 @@ model VerificationToken {
468
487
  @@unique([identifier, token])
469
488
  @@map("codemation_auth_verification_token")
470
489
  }
490
+
491
+ model WorkflowAuditLog {
492
+ id String @id @map("id")
493
+ occurredAt DateTime @map("occurred_at")
494
+ actorUserId String @map("actor_user_id")
495
+ actorSessionId String? @map("actor_session_id")
496
+ action String @map("action")
497
+ resourceType String @map("resource_type")
498
+ resourceId String @map("resource_id")
499
+ outcome String @map("outcome")
500
+ errorCode String? @map("error_code")
501
+ correlationId String? @map("correlation_id")
502
+ workflowId String @map("workflow_id")
503
+ runId String? @map("run_id")
504
+ nodeId String? @map("node_id")
505
+
506
+ @@index([actorUserId, occurredAt])
507
+ @@index([workflowId, occurredAt])
508
+ @@map("workflow_audit_log")
509
+ }
@@ -18,6 +18,7 @@ model Run {
18
18
  executionOptionsJson String? @map("execution_options_json")
19
19
  controlJson String? @map("control_json")
20
20
  workflowSnapshotJson String? @map("workflow_snapshot_json")
21
+ workflowSnapshotId String? @map("workflow_snapshot_id")
21
22
  policySnapshotJson String? @map("policy_snapshot_json")
22
23
  engineCountersJson String? @map("engine_counters_json")
23
24
  mutableStateJson String? @map("mutable_state_json")
@@ -33,9 +34,11 @@ model Run {
33
34
  slotProjection RunSlotProjection?
34
35
  testSuiteRun TestSuiteRun? @relation(fields: [testSuiteRunId], references: [id])
35
36
  testAssertions TestAssertion[]
37
+ workflowSnapshot WorkflowSnapshot? @relation(fields: [workflowSnapshotId], references: [id])
36
38
  @@index([workflowId, startedAt])
37
39
  @@index([workflowId, status, finishedAt])
38
40
  @@index([testSuiteRunId, testCaseIndex])
41
+ @@index([workflowSnapshotId])
39
42
  }
40
43
 
41
44
  model RunWorkItem {
@@ -106,6 +109,7 @@ model ExecutionInstance {
106
109
  iterationId String? @map("iteration_id")
107
110
  itemIndex Int? @map("item_index")
108
111
  parentInvocationId String? @map("parent_invocation_id")
112
+ childRunId String? @map("child_run_id")
109
113
 
110
114
  run Run @relation(fields: [runId], references: [runId], onDelete: Cascade)
111
115
 
@@ -258,24 +262,39 @@ model TelemetrySpan {
258
262
  @@index([retentionExpiresAt])
259
263
  }
260
264
 
265
+ model WorkflowSnapshot {
266
+ id String @id
267
+ workflowId String @map("workflow_id")
268
+ /// SHA-256 hex digest of snapshotJson — dedup key: same workflow content → one row.
269
+ snapshotHash String @map("snapshot_hash")
270
+ snapshotJson String @map("snapshot_json")
271
+ createdAt String @map("created_at")
272
+
273
+ runs Run[]
274
+
275
+ @@unique([workflowId, snapshotHash])
276
+ @@index([workflowId, snapshotHash])
277
+ }
278
+
261
279
  model TelemetryArtifact {
262
- artifactId String @id @map("artifact_id")
263
- traceId String @map("trace_id")
264
- spanId String @map("span_id")
265
- runId String @map("run_id")
266
- workflowId String @map("workflow_id")
267
- nodeId String? @map("node_id")
268
- activationId String? @map("activation_id")
269
- kind String
270
- contentType String @map("content_type")
271
- previewText String? @map("preview_text")
272
- previewJson String? @map("preview_json")
273
- payloadText String? @map("payload_text")
274
- payloadJson String? @map("payload_json")
275
- bytes Int?
276
- truncated Boolean?
277
- createdAt String @map("created_at")
278
- expiresAt String? @map("expires_at")
280
+ artifactId String @id @map("artifact_id")
281
+ traceId String @map("trace_id")
282
+ spanId String @map("span_id")
283
+ runId String @map("run_id")
284
+ workflowId String @map("workflow_id")
285
+ nodeId String? @map("node_id")
286
+ activationId String? @map("activation_id")
287
+ kind String
288
+ contentType String @map("content_type")
289
+ previewText String? @map("preview_text")
290
+ previewJson String? @map("preview_json")
291
+ payloadText String? @map("payload_text")
292
+ payloadJson String? @map("payload_json")
293
+ payloadStorageKey String? @map("payload_storage_key")
294
+ bytes Int?
295
+ truncated Boolean?
296
+ createdAt String @map("created_at")
297
+ expiresAt String? @map("expires_at")
279
298
  retentionExpiresAt String? @map("retention_expires_at")
280
299
 
281
300
  @@index([traceId, createdAt])
@@ -468,3 +487,23 @@ model VerificationToken {
468
487
  @@unique([identifier, token])
469
488
  @@map("codemation_auth_verification_token")
470
489
  }
490
+
491
+ model WorkflowAuditLog {
492
+ id String @id @map("id")
493
+ occurredAt DateTime @map("occurred_at")
494
+ actorUserId String @map("actor_user_id")
495
+ actorSessionId String? @map("actor_session_id")
496
+ action String @map("action")
497
+ resourceType String @map("resource_type")
498
+ resourceId String @map("resource_id")
499
+ outcome String @map("outcome")
500
+ errorCode String? @map("error_code")
501
+ correlationId String? @map("correlation_id")
502
+ workflowId String @map("workflow_id")
503
+ runId String? @map("run_id")
504
+ nodeId String? @map("node_id")
505
+
506
+ @@index([actorUserId, occurredAt])
507
+ @@index([workflowId, occurredAt])
508
+ @@map("workflow_audit_log")
509
+ }