@revisium/orchestrator 0.2.0-alpha.2 → 0.2.0-alpha.4

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 (268) hide show
  1. package/README.md +3 -3
  2. package/control-plane/bootstrap.config.json +104 -550
  3. package/control-plane/default-playbook/catalog/pipelines.json +405 -1065
  4. package/control-plane/default-playbook/catalog/run-profiles.json +208 -0
  5. package/control-plane/default-playbook/package.json +1 -1
  6. package/control-plane/default-playbook/playbook.json +2 -1
  7. package/control-plane/default-playbook/prompts/developer.md +6 -6
  8. package/dist/__generated__/client/browser.js +18 -0
  9. package/dist/__generated__/client/browser.js.map +1 -0
  10. package/dist/__generated__/client/client.js +32 -0
  11. package/dist/__generated__/client/client.js.map +1 -0
  12. package/dist/__generated__/client/commonInputTypes.js +11 -0
  13. package/dist/__generated__/client/commonInputTypes.js.map +1 -0
  14. package/dist/__generated__/client/enums.js +19 -0
  15. package/dist/__generated__/client/enums.js.map +1 -0
  16. package/dist/__generated__/client/internal/class.js +53 -0
  17. package/dist/__generated__/client/internal/class.js.map +1 -0
  18. package/dist/__generated__/client/internal/prismaNamespace.js +451 -0
  19. package/dist/__generated__/client/internal/prismaNamespace.js.map +1 -0
  20. package/dist/__generated__/client/internal/prismaNamespaceBrowser.js +422 -0
  21. package/dist/__generated__/client/internal/prismaNamespaceBrowser.js.map +1 -0
  22. package/dist/__generated__/client/models/Branch.js +2 -0
  23. package/dist/__generated__/client/models/Branch.js.map +1 -0
  24. package/dist/__generated__/client/models/CostLedgerEntry.js +2 -0
  25. package/dist/__generated__/client/models/CostLedgerEntry.js.map +1 -0
  26. package/dist/__generated__/client/models/FileBlob.js +2 -0
  27. package/dist/__generated__/client/models/FileBlob.js.map +1 -0
  28. package/dist/__generated__/client/models/InboxItem.js +2 -0
  29. package/dist/__generated__/client/models/InboxItem.js.map +1 -0
  30. package/dist/__generated__/client/models/ProjectFileUsage.js +2 -0
  31. package/dist/__generated__/client/models/ProjectFileUsage.js.map +1 -0
  32. package/dist/__generated__/client/models/Revision.js +2 -0
  33. package/dist/__generated__/client/models/Revision.js.map +1 -0
  34. package/dist/__generated__/client/models/RevoProject.js +2 -0
  35. package/dist/__generated__/client/models/RevoProject.js.map +1 -0
  36. package/dist/__generated__/client/models/Row.js +2 -0
  37. package/dist/__generated__/client/models/Row.js.map +1 -0
  38. package/dist/__generated__/client/models/RunAttempt.js +2 -0
  39. package/dist/__generated__/client/models/RunAttempt.js.map +1 -0
  40. package/dist/__generated__/client/models/RunEvent.js +2 -0
  41. package/dist/__generated__/client/models/RunEvent.js.map +1 -0
  42. package/dist/__generated__/client/models/RunOutput.js +2 -0
  43. package/dist/__generated__/client/models/RunOutput.js.map +1 -0
  44. package/dist/__generated__/client/models/RunTask.js +2 -0
  45. package/dist/__generated__/client/models/RunTask.js.map +1 -0
  46. package/dist/__generated__/client/models/Table.js +2 -0
  47. package/dist/__generated__/client/models/Table.js.map +1 -0
  48. package/dist/__generated__/client/models/TableMigration.js +2 -0
  49. package/dist/__generated__/client/models/TableMigration.js.map +1 -0
  50. package/dist/__generated__/client/models/TaskRun.js +2 -0
  51. package/dist/__generated__/client/models/TaskRun.js.map +1 -0
  52. package/dist/__generated__/client/models.js +2 -0
  53. package/dist/__generated__/client/models.js.map +1 -0
  54. package/dist/api/graphql-api/graphql-ws/pubsub.module.js +2 -1
  55. package/dist/api/graphql-api/graphql-ws/pubsub.module.js.map +1 -1
  56. package/dist/api/graphql-api/graphql-ws/subscription-bridge.service.js +110 -28
  57. package/dist/api/graphql-api/graphql-ws/subscription-bridge.service.js.map +1 -1
  58. package/dist/api/graphql-api/graphql-ws/subscription-mappers.js +3 -1
  59. package/dist/api/graphql-api/graphql-ws/subscription-mappers.js.map +1 -1
  60. package/dist/api/graphql-api/inbox/inputs/resolve-gate.input.js +46 -0
  61. package/dist/api/graphql-api/inbox/inputs/resolve-gate.input.js.map +1 -1
  62. package/dist/api/graphql-api/pr/inputs/pr-readiness.input.js +6 -0
  63. package/dist/api/graphql-api/pr/inputs/pr-readiness.input.js.map +1 -1
  64. package/dist/api/graphql-api/registerGraphqlEnums.js +2 -0
  65. package/dist/api/graphql-api/registerGraphqlEnums.js.map +1 -1
  66. package/dist/api/graphql-api/runs/inputs/create-run.input.js +17 -0
  67. package/dist/api/graphql-api/runs/inputs/create-run.input.js.map +1 -1
  68. package/dist/api/graphql-api/runs/inputs/execution-profile.input.js +85 -0
  69. package/dist/api/graphql-api/runs/inputs/execution-profile.input.js.map +1 -0
  70. package/dist/api/graphql-api/runs/inputs/simulate-route.input.js +11 -0
  71. package/dist/api/graphql-api/runs/inputs/simulate-route.input.js.map +1 -1
  72. package/dist/api/graphql-api/runs/model/run-workflow.model.js +5 -0
  73. package/dist/api/graphql-api/runs/model/run-workflow.model.js.map +1 -1
  74. package/dist/api/graphql-api/share/model/issue-action.model.js +7 -0
  75. package/dist/api/graphql-api/share/model/issue-action.model.js.map +1 -0
  76. package/dist/cli/commands/doctor-report.js +1 -13
  77. package/dist/cli/commands/doctor-report.js.map +1 -1
  78. package/dist/cli/commands/lifecycle.js +50 -65
  79. package/dist/cli/commands/lifecycle.js.map +1 -1
  80. package/dist/cli/commands/{revisium-helpers.js → process-helpers.js} +1 -24
  81. package/dist/cli/commands/process-helpers.js.map +1 -0
  82. package/dist/config.js +17 -55
  83. package/dist/config.js.map +1 -1
  84. package/dist/control-plane/audit-validation-helpers.js +31 -0
  85. package/dist/control-plane/audit-validation-helpers.js.map +1 -0
  86. package/dist/control-plane/bootstrap-json-validator.js +65 -0
  87. package/dist/control-plane/bootstrap-json-validator.js.map +1 -0
  88. package/dist/control-plane/bootstrap.js +25 -38
  89. package/dist/control-plane/bootstrap.js.map +1 -1
  90. package/dist/control-plane/change-notifications.js +45 -14
  91. package/dist/control-plane/change-notifications.js.map +1 -1
  92. package/dist/control-plane/data-access.js +1 -106
  93. package/dist/control-plane/data-access.js.map +1 -1
  94. package/dist/control-plane/default-playbook-policy.js +499 -78
  95. package/dist/control-plane/default-playbook-policy.js.map +1 -1
  96. package/dist/control-plane/definitions.js +4 -5
  97. package/dist/control-plane/definitions.js.map +1 -1
  98. package/dist/control-plane/engine-transport.js +381 -0
  99. package/dist/control-plane/engine-transport.js.map +1 -0
  100. package/dist/control-plane/inbox.js +15 -7
  101. package/dist/control-plane/inbox.js.map +1 -1
  102. package/dist/control-plane/index.js +0 -1
  103. package/dist/control-plane/index.js.map +1 -1
  104. package/dist/control-plane/manual-adoption-audit.js +3 -24
  105. package/dist/control-plane/manual-adoption-audit.js.map +1 -1
  106. package/dist/control-plane/merge-override-audit.js +44 -0
  107. package/dist/control-plane/merge-override-audit.js.map +1 -0
  108. package/dist/control-plane/pipeline-coverage-registry.js +478 -0
  109. package/dist/control-plane/pipeline-coverage-registry.js.map +1 -0
  110. package/dist/control-plane/query-types.js +2 -0
  111. package/dist/control-plane/query-types.js.map +1 -0
  112. package/dist/control-plane/run-profiles.js +89 -0
  113. package/dist/control-plane/run-profiles.js.map +1 -0
  114. package/dist/control-plane/schema-migration.js +0 -35
  115. package/dist/control-plane/schema-migration.js.map +1 -1
  116. package/dist/control-plane/seed-default-playbook.js +2 -31
  117. package/dist/control-plane/seed-default-playbook.js.map +1 -1
  118. package/dist/control-plane/tables.js +8 -0
  119. package/dist/control-plane/tables.js.map +1 -1
  120. package/dist/control-plane/transport.js +16 -0
  121. package/dist/control-plane/transport.js.map +1 -0
  122. package/dist/control-plane/versioned-meaning.js +56 -14
  123. package/dist/control-plane/versioned-meaning.js.map +1 -1
  124. package/dist/e2e/kit/agents.js +60 -6
  125. package/dist/e2e/kit/agents.js.map +1 -1
  126. package/dist/e2e/kit/assertions.js +13 -1
  127. package/dist/e2e/kit/assertions.js.map +1 -1
  128. package/dist/e2e/kit/drive.js +46 -11
  129. package/dist/e2e/kit/drive.js.map +1 -1
  130. package/dist/e2e/kit/env.js +17 -1
  131. package/dist/e2e/kit/env.js.map +1 -1
  132. package/dist/e2e/kit/fake-integrator.js +25 -5
  133. package/dist/e2e/kit/fake-integrator.js.map +1 -1
  134. package/dist/e2e/kit/gh-emulator.js +172 -40
  135. package/dist/e2e/kit/gh-emulator.js.map +1 -1
  136. package/dist/e2e/kit/harness.js +44 -10
  137. package/dist/e2e/kit/harness.js.map +1 -1
  138. package/dist/e2e/kit/index.js +1 -0
  139. package/dist/e2e/kit/index.js.map +1 -1
  140. package/dist/e2e/kit/scenario.js +165 -0
  141. package/dist/e2e/kit/scenario.js.map +1 -0
  142. package/dist/e2e/kit/scenarios.js +12 -18
  143. package/dist/e2e/kit/scenarios.js.map +1 -1
  144. package/dist/engine/dbos.service.js +8 -1
  145. package/dist/engine/dbos.service.js.map +1 -1
  146. package/dist/features/inbox/commands/impl/resolve-gate.command.js.map +1 -1
  147. package/dist/features/pr/queries/impl/get-pr-readiness.query.js.map +1 -1
  148. package/dist/features/runs/commands/impl/create-run.command.js.map +1 -1
  149. package/dist/host/daemon.js +32 -8
  150. package/dist/host/daemon.js.map +1 -1
  151. package/dist/host/ensure-host.js +3 -3
  152. package/dist/host/ensure-host.js.map +1 -1
  153. package/dist/host/host-runtime.js.map +1 -1
  154. package/dist/host/host.lifecycle.js +3 -16
  155. package/dist/host/host.lifecycle.js.map +1 -1
  156. package/dist/http/graphql-host.js +17 -8
  157. package/dist/http/graphql-host.js.map +1 -1
  158. package/dist/mcp/mcp-capabilities.js +12 -11
  159. package/dist/mcp/mcp-capabilities.js.map +1 -1
  160. package/dist/mcp/mcp-facade.service.js +45 -5
  161. package/dist/mcp/mcp-facade.service.js.map +1 -1
  162. package/dist/mcp/mcp-tools.js +59 -5
  163. package/dist/mcp/mcp-tools.js.map +1 -1
  164. package/dist/mcp/monitoring-directive.js +43 -0
  165. package/dist/mcp/monitoring-directive.js.map +1 -0
  166. package/dist/pipeline/data-driven-task.workflow.js +393 -182
  167. package/dist/pipeline/data-driven-task.workflow.js.map +1 -1
  168. package/dist/pipeline/pipeline.service.js +27 -5
  169. package/dist/pipeline/pipeline.service.js.map +1 -1
  170. package/dist/pipeline/route-contract.js +123 -3
  171. package/dist/pipeline/route-contract.js.map +1 -1
  172. package/dist/pipeline-core/condition-scopes.js +15 -0
  173. package/dist/pipeline-core/condition-scopes.js.map +1 -0
  174. package/dist/pipeline-core/index.js +2 -0
  175. package/dist/pipeline-core/index.js.map +1 -1
  176. package/dist/pipeline-core/kit/fixtures.js +81 -44
  177. package/dist/pipeline-core/kit/fixtures.js.map +1 -1
  178. package/dist/pipeline-core/materialize.js +221 -0
  179. package/dist/pipeline-core/materialize.js.map +1 -0
  180. package/dist/pipeline-core/types.js +5 -0
  181. package/dist/pipeline-core/types.js.map +1 -1
  182. package/dist/pipeline-core/validate-loops.js +2 -15
  183. package/dist/pipeline-core/validate-loops.js.map +1 -1
  184. package/dist/pipeline-core/validate-resilience.js +257 -0
  185. package/dist/pipeline-core/validate-resilience.js.map +1 -0
  186. package/dist/pipeline-core/validate.js +2 -0
  187. package/dist/pipeline-core/validate.js.map +1 -1
  188. package/dist/playbook/catalog-loader.js +39 -2
  189. package/dist/playbook/catalog-loader.js.map +1 -1
  190. package/dist/playbook/catalog-schema-validator.js +438 -0
  191. package/dist/playbook/catalog-schema-validator.js.map +1 -0
  192. package/dist/playbook/import-mapper.js +41 -0
  193. package/dist/playbook/import-mapper.js.map +1 -1
  194. package/dist/playbook/manifest.js +5 -0
  195. package/dist/playbook/manifest.js.map +1 -1
  196. package/dist/playbook/playbook-installer.js +17 -1
  197. package/dist/playbook/playbook-installer.js.map +1 -1
  198. package/dist/poller/pr-readiness-core.js +280 -94
  199. package/dist/poller/pr-readiness-core.js.map +1 -1
  200. package/dist/poller/pr-readiness.js +2 -2
  201. package/dist/poller/pr-readiness.js.map +1 -1
  202. package/dist/revisium/inbox.service.js +8 -8
  203. package/dist/revisium/inbox.service.js.map +1 -1
  204. package/dist/revisium/playbooks.service.js +116 -21
  205. package/dist/revisium/playbooks.service.js.map +1 -1
  206. package/dist/revisium/revisium.module.js +8 -8
  207. package/dist/revisium/revisium.module.js.map +1 -1
  208. package/dist/revisium/roles.service.js +3 -1
  209. package/dist/revisium/roles.service.js.map +1 -1
  210. package/dist/revisium/run.service.js +9 -8
  211. package/dist/revisium/run.service.js.map +1 -1
  212. package/dist/revisium/tokens.js +0 -1
  213. package/dist/revisium/tokens.js.map +1 -1
  214. package/dist/run/create-run.js +1 -1
  215. package/dist/run/create-run.js.map +1 -1
  216. package/dist/run/inspect-run.js +32 -28
  217. package/dist/run/inspect-run.js.map +1 -1
  218. package/dist/run/issue-ref.js +97 -2
  219. package/dist/run/issue-ref.js.map +1 -1
  220. package/dist/run/prisma-runtime-data-access.js +619 -0
  221. package/dist/run/prisma-runtime-data-access.js.map +1 -0
  222. package/dist/run/run-outputs.js +39 -14
  223. package/dist/run/run-outputs.js.map +1 -1
  224. package/dist/run/terminal-run-status.js.map +1 -1
  225. package/dist/runners/integrator.js +657 -56
  226. package/dist/runners/integrator.js.map +1 -1
  227. package/dist/runners/worktree.service.js +10 -8
  228. package/dist/runners/worktree.service.js.map +1 -1
  229. package/dist/schema/ajv-errors.js +15 -0
  230. package/dist/schema/ajv-errors.js.map +1 -0
  231. package/dist/smoke/isolation.js +7 -16
  232. package/dist/smoke/isolation.js.map +1 -1
  233. package/dist/storage/ensure-storage.js +117 -0
  234. package/dist/storage/ensure-storage.js.map +1 -0
  235. package/dist/storage/revo-database.js +39 -0
  236. package/dist/storage/revo-database.js.map +1 -0
  237. package/dist/storage/revo-prisma.service.js +31 -0
  238. package/dist/storage/revo-prisma.service.js.map +1 -0
  239. package/dist/storage/revo-storage.module.js +18 -0
  240. package/dist/storage/revo-storage.module.js.map +1 -0
  241. package/dist/task-control-plane/pr-readiness.service.js +5 -2
  242. package/dist/task-control-plane/pr-readiness.service.js.map +1 -1
  243. package/dist/task-control-plane/run-watch.service.js +3 -6
  244. package/dist/task-control-plane/run-watch.service.js.map +1 -1
  245. package/dist/task-control-plane/task-control-plane-api.service.js +234 -43
  246. package/dist/task-control-plane/task-control-plane-api.service.js.map +1 -1
  247. package/dist/testing/runtime-data-access.js +175 -0
  248. package/dist/testing/runtime-data-access.js.map +1 -0
  249. package/dist/worker/build-context.js +178 -2
  250. package/dist/worker/build-context.js.map +1 -1
  251. package/dist/worker/claude-code-runner.js +22 -3
  252. package/dist/worker/claude-code-runner.js.map +1 -1
  253. package/dist/worker/codex-runner.js +6 -1
  254. package/dist/worker/codex-runner.js.map +1 -1
  255. package/package.json +20 -7
  256. package/prisma/migrations/20260707080500_initial_schema/migration.sql +259 -0
  257. package/prisma/migrations/20260707103000_prisma_runtime_tables/migration.sql +235 -0
  258. package/prisma/migrations/migration_lock.toml +3 -0
  259. package/prisma/schema.prisma +339 -0
  260. package/prisma.config.ts +11 -0
  261. package/dist/cli/commands/revisium-helpers.js.map +0 -1
  262. package/dist/control-plane/client-transport.js +0 -168
  263. package/dist/control-plane/client-transport.js.map +0 -1
  264. package/dist/engine/ensure-postgres.js +0 -46
  265. package/dist/engine/ensure-postgres.js.map +0 -1
  266. package/dist/host/ensure-revisium.js +0 -135
  267. package/dist/host/ensure-revisium.js.map +0 -1
  268. package/revisium.config.json +0 -10
@@ -0,0 +1,339 @@
1
+ generator client {
2
+ provider = "prisma-client"
3
+ output = "../src/__generated__/client"
4
+ moduleFormat = "cjs"
5
+ previewFeatures = ["fullTextSearchPostgres", "typedSql"]
6
+ }
7
+
8
+ datasource db {
9
+ provider = "postgresql"
10
+ }
11
+
12
+ enum RevoProjectKind {
13
+ USER
14
+ SYSTEM
15
+ }
16
+
17
+ enum RevoProjectStatus {
18
+ ACTIVE
19
+ ARCHIVED
20
+ DELETED
21
+ }
22
+
23
+ model RevoProject {
24
+ id String @id @default(cuid())
25
+ createdAt DateTime @default(now())
26
+ updatedAt DateTime @updatedAt
27
+ deletedAt DateTime?
28
+ kind RevoProjectKind @default(USER)
29
+ name String
30
+ slug String @unique
31
+ status RevoProjectStatus @default(ACTIVE)
32
+
33
+ revisiumBranches Branch[]
34
+ taskRuns TaskRun[]
35
+
36
+ @@index([status])
37
+ @@index([kind, status])
38
+ @@index([deletedAt])
39
+ }
40
+
41
+ model TaskRun {
42
+ id String @id
43
+ createdAt DateTime @default(now())
44
+ updatedAt DateTime @updatedAt
45
+ projectId String?
46
+ project RevoProject? @relation(fields: [projectId], references: [id], onDelete: Restrict)
47
+ title String
48
+ description String @default("")
49
+ status String
50
+ repos String[]
51
+ scope String @default("")
52
+ priority Int @default(0)
53
+ playbookId String @default("")
54
+ pipelineId String @default("")
55
+ params Json @default("{}")
56
+ routeDecision Json @default("{}")
57
+ executionProfile Json @default("{}")
58
+ createdBy String @default("")
59
+
60
+ tasks RunTask[]
61
+ events RunEvent[]
62
+ attempts RunAttempt[]
63
+ inbox InboxItem[]
64
+ outputs RunOutput[]
65
+ costItems CostLedgerEntry[]
66
+
67
+ @@index([projectId])
68
+ @@index([status])
69
+ @@index([playbookId, pipelineId])
70
+ @@index([createdAt])
71
+ }
72
+
73
+ model RunTask {
74
+ id String @id
75
+ createdAt DateTime @default(now())
76
+ updatedAt DateTime @updatedAt
77
+ runId String
78
+ run TaskRun @relation(fields: [runId], references: [id], onDelete: Cascade)
79
+ repoRef String @default("")
80
+ roleHint String @default("")
81
+ title String
82
+ status String
83
+ dependsOn String[]
84
+ scope String @default("")
85
+ priority Int @default(0)
86
+
87
+ @@index([runId])
88
+ @@index([status])
89
+ @@index([createdAt])
90
+ }
91
+
92
+ model RunEvent {
93
+ id String @id
94
+ createdAt DateTime @default(now())
95
+ sequence Int @default(autoincrement())
96
+ runId String
97
+ run TaskRun @relation(fields: [runId], references: [id], onDelete: Cascade)
98
+ taskId String @default("")
99
+ stepId String @default("")
100
+ type String
101
+ payload Json @default("{}")
102
+ actor String @default("")
103
+
104
+ @@unique([runId, sequence])
105
+ @@index([runId])
106
+ @@index([runId, createdAt])
107
+ @@index([runId, sequence])
108
+ @@index([type])
109
+ }
110
+
111
+ model RunAttempt {
112
+ id String @id
113
+ createdAt DateTime @default(now())
114
+ updatedAt DateTime @updatedAt
115
+ runId String
116
+ run TaskRun @relation(fields: [runId], references: [id], onDelete: Cascade)
117
+ stepId String
118
+ workerId String @default("")
119
+ attemptNo Int @default(0)
120
+ iteration Int @default(0)
121
+ status String
122
+ idempotencyKey String @default("")
123
+ modelProfile String @default("")
124
+ verdict String @default("")
125
+ inputTokens Int @default(0)
126
+ outputTokens Int @default(0)
127
+ costAmount Decimal @default(0) @db.Decimal(20, 12)
128
+ currency String @default("USD")
129
+ durationMs Int @default(0)
130
+ outputSummary String @default("")
131
+ artifactRef String @default("")
132
+ stdoutTail String @default("")
133
+ stderrTail String @default("")
134
+ lesson String @default("")
135
+ error String @default("")
136
+ startedAt DateTime @default(now())
137
+ finishedAt DateTime @default(now())
138
+
139
+ @@index([runId])
140
+ @@index([runId, stepId])
141
+ @@index([status])
142
+ }
143
+
144
+ model InboxItem {
145
+ id String @id
146
+ createdAt DateTime @default(now())
147
+ updatedAt DateTime @updatedAt
148
+ kind String
149
+ runId String?
150
+ run TaskRun? @relation(fields: [runId], references: [id], onDelete: Cascade)
151
+ taskId String @default("")
152
+ stepId String @default("")
153
+ projectId String @default("")
154
+ title String
155
+ context Json @default("{}")
156
+ options String[]
157
+ status String
158
+ answer Json?
159
+ resolvedBy String @default("")
160
+ resolvedAt DateTime?
161
+
162
+ @@index([runId])
163
+ @@index([status])
164
+ @@index([createdAt])
165
+ }
166
+
167
+ model RunOutput {
168
+ id String @id
169
+ createdAt DateTime @default(now())
170
+ runId String
171
+ run TaskRun @relation(fields: [runId], references: [id], onDelete: Cascade)
172
+ nodeId String
173
+ ordinal Int
174
+ name String
175
+ schemaRef String @default("")
176
+ payload Json @default("{}")
177
+ payloadRef String @default("")
178
+ attemptId String @default("")
179
+ producedAt DateTime @default(now())
180
+
181
+ @@unique([runId, nodeId, ordinal])
182
+ @@index([runId])
183
+ @@index([nodeId])
184
+ @@index([producedAt])
185
+ }
186
+
187
+ model CostLedgerEntry {
188
+ id String @id
189
+ createdAt DateTime @default(now())
190
+ runId String
191
+ run TaskRun @relation(fields: [runId], references: [id], onDelete: Cascade)
192
+ stepId String @default("")
193
+ attemptId String @default("")
194
+ modelProfile String @default("")
195
+ inputTokens Int @default(0)
196
+ outputTokens Int @default(0)
197
+ costAmount Decimal @default(0) @db.Decimal(20, 12)
198
+ currency String @default("USD")
199
+ recordedAt DateTime @default(now())
200
+
201
+ @@index([runId])
202
+ @@index([attemptId])
203
+ @@index([recordedAt])
204
+ }
205
+
206
+ model Branch {
207
+ id String @id
208
+ createdAt DateTime @default(now())
209
+ isRoot Boolean @default(false)
210
+ name String
211
+ projectId String
212
+ revoProject RevoProject @relation(fields: [projectId], references: [id], onDelete: Restrict)
213
+ revisions Revision[]
214
+
215
+ @@unique([name, projectId])
216
+ @@index([projectId])
217
+ }
218
+
219
+ model Revision {
220
+ id String @id
221
+ sequence Int @unique @default(autoincrement())
222
+ createdAt DateTime @default(now())
223
+ comment String @default("")
224
+ isHead Boolean @default(false)
225
+ isDraft Boolean @default(false)
226
+ isStart Boolean @default(false)
227
+ hasChanges Boolean @default(false)
228
+
229
+ branchId String
230
+ branch Branch @relation(fields: [branchId], references: [id], onDelete: Cascade)
231
+ parentId String?
232
+ parent Revision? @relation("parentRevision", fields: [parentId], references: [id], onDelete: SetNull)
233
+ children Revision[] @relation("parentRevision")
234
+ tables Table[]
235
+
236
+ @@index([branchId])
237
+ }
238
+
239
+ model Table {
240
+ versionId String @id
241
+ createdId String
242
+ id String
243
+
244
+ readonly Boolean @default(false)
245
+
246
+ createdAt DateTime @default(now())
247
+ updatedAt DateTime @default(now())
248
+
249
+ system Boolean @default(false)
250
+
251
+ revisions Revision[]
252
+ rows Row[]
253
+
254
+ @@index([id])
255
+ }
256
+
257
+ model Row {
258
+ versionId String @id
259
+ createdId String
260
+ id String
261
+
262
+ readonly Boolean @default(false)
263
+
264
+ createdAt DateTime @default(now())
265
+ updatedAt DateTime @default(now())
266
+ publishedAt DateTime @default(now())
267
+
268
+ data Json
269
+ meta Json @default("{}")
270
+ hash String
271
+ schemaHash String
272
+
273
+ tables Table[]
274
+ fileBlobs FileBlob[] @relation("FileBlobToRow")
275
+
276
+ @@index([data], type: Gin)
277
+ @@index([id])
278
+ @@index([hash])
279
+ @@index([schemaHash])
280
+ @@index([publishedAt])
281
+ }
282
+
283
+ model FileBlob {
284
+ id String @id @default(nanoid())
285
+ createdAt DateTime @default(now())
286
+ deletedAt DateTime?
287
+
288
+ projectId String
289
+ hash String
290
+ size BigInt
291
+
292
+ rows Row[] @relation("FileBlobToRow")
293
+
294
+ @@unique([projectId, hash])
295
+ @@index([projectId])
296
+ @@index([hash])
297
+ @@index([deletedAt])
298
+ }
299
+
300
+ model ProjectFileUsage {
301
+ projectId String @id
302
+ fileBytes BigInt @default(0)
303
+ updatedAt DateTime @updatedAt
304
+ }
305
+
306
+ model TableMigration {
307
+ id String @id @default(cuid())
308
+ revisionId String
309
+ tableId String
310
+ sourceTableVersionId String
311
+ shadowTableVersionId String?
312
+ status String @default("PENDING")
313
+ phase String @default("INIT")
314
+ patches Json
315
+ previousSchema Json
316
+ previousSchemaHash String
317
+ targetSchemaHash String
318
+ totalRows Int
319
+ copiedRows Int @default(0)
320
+ lastCopiedRowId String?
321
+ batchSize Int @default(1000)
322
+ currentBatch Int @default(0)
323
+ totalBatches Int @default(0)
324
+ createdAt DateTime @default(now())
325
+ startedAt DateTime?
326
+ completedAt DateTime?
327
+ lastProgressAt DateTime?
328
+ lockedBy String?
329
+ lockedAt DateTime?
330
+ heartbeatAt DateTime?
331
+ errorMessage String?
332
+ retryCount Int @default(0)
333
+ maxRetries Int @default(3)
334
+
335
+ @@unique([revisionId, tableId])
336
+ @@index([status])
337
+ @@index([lockedBy])
338
+ @@index([status, heartbeatAt])
339
+ }
@@ -0,0 +1,11 @@
1
+ import { defineConfig } from 'prisma/config';
2
+
3
+ export default defineConfig({
4
+ schema: 'prisma/schema.prisma',
5
+ migrations: {
6
+ path: 'prisma/migrations',
7
+ },
8
+ datasource: {
9
+ url: process.env['DATABASE_URL'],
10
+ },
11
+ });
@@ -1 +0,0 @@
1
- {"version":3,"file":"revisium-helpers.js","sourceRoot":"","sources":["../../../src/cli/commands/revisium-helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,UAAU,SAAS,CAAC,KAAyB,EAAE,QAAgB;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,SAAS,GAAG,OAAO;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpE,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;gBAAE,OAAO,IAAI,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;QACT,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,KAAa;IACnD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;QAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IAC/D,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,MAAsB;IAC1D,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;QACT,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,SAAiB;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC"}
@@ -1,168 +0,0 @@
1
- import { RevisiumClient, sdk } from '@revisium/client';
2
- import { baseUrl, getConfig, isAlive, isHealthy, readRuntime } from '../config.js';
3
- import { ControlPlaneError } from './errors.js';
4
- import { runtimeTables } from './tables.js';
5
- const REQUEST_TIMEOUT_MS = 15_000;
6
- export function withRequestTimeout(baseFetch, timeoutMs) {
7
- return (input, init) => {
8
- const timeout = AbortSignal.timeout(timeoutMs);
9
- const signal = init?.signal ? AbortSignal.any([init.signal, timeout]) : timeout;
10
- return baseFetch(input, { ...init, signal });
11
- };
12
- }
13
- export function makeRecoverableScopeResolver(loadScope) {
14
- let cachedScope;
15
- return {
16
- resolve() {
17
- cachedScope ??= loadScope().catch((error) => {
18
- cachedScope = undefined;
19
- throw error;
20
- });
21
- return cachedScope;
22
- },
23
- invalidate() {
24
- cachedScope = undefined;
25
- },
26
- };
27
- }
28
- function mapApiError(err, context) {
29
- if (err instanceof ControlPlaneError)
30
- return err;
31
- const apiErr = err;
32
- const status = apiErr.statusCode;
33
- const message = apiErr.message ?? String(err);
34
- if (status === 404) {
35
- return new ControlPlaneError('ROW_NOT_FOUND', `Row not found: ${context}`, { status, details: err });
36
- }
37
- if (status === 409 || (status === 400 && message.startsWith('Rows already exist:'))) {
38
- return new ControlPlaneError('ROW_CONFLICT', `Row conflict: ${context}`, { status, details: err });
39
- }
40
- if (status === 400 || status === 422) {
41
- return new ControlPlaneError('VALIDATION_FAILURE', `Validation failure: ${context}`, { status, details: err });
42
- }
43
- return new ControlPlaneError('HTTP_ERROR', `HTTP error ${status ?? 'unknown'}: ${context}: ${message}`, {
44
- status,
45
- details: err,
46
- });
47
- }
48
- function toTransportRow(row) {
49
- return {
50
- id: row.id,
51
- data: row.data,
52
- readonly: row.readonly,
53
- createdAt: row.createdAt,
54
- updatedAt: row.updatedAt,
55
- };
56
- }
57
- export function mapTransportListEdges(edges) {
58
- return edges.flatMap((edge) => edge.node ? [{ cursor: edge.cursor, node: toTransportRow(edge.node) }] : []);
59
- }
60
- export function extractMutationRow(result) {
61
- const row = result.data?.row;
62
- if (!row)
63
- throw new ControlPlaneError('HTTP_ERROR', 'Malformed response');
64
- return row;
65
- }
66
- async function getScope(mode) {
67
- const runtime = readRuntime();
68
- if (!runtime || !isAlive(runtime.pid) || !(await isHealthy(runtime.httpPort))) {
69
- throw new ControlPlaneError('DAEMON_NOT_RUNNING', 'Local Revisium daemon is not running or healthy');
70
- }
71
- const { org, project, branch } = getConfig();
72
- const revisiumClient = new RevisiumClient({ baseUrl: baseUrl(runtime.httpPort) });
73
- const clientInstance = revisiumClient.client;
74
- clientInstance.setConfig({ fetch: withRequestTimeout(globalThis.fetch, REQUEST_TIMEOUT_MS) });
75
- const result = mode === 'draft'
76
- ? await sdk.draftRevision({ client: clientInstance, path: { organizationId: org, projectName: project, branchName: branch } })
77
- : await sdk.headRevision({ client: clientInstance, path: { organizationId: org, projectName: project, branchName: branch } });
78
- if (result.error) {
79
- const err = result.error;
80
- if (err.statusCode === 404) {
81
- throw new ControlPlaneError('BOOTSTRAP_NOT_APPLIED', `Control-plane bootstrap is missing or not committed: ${org}/${project}/${branch}`, { status: 404, details: result.error });
82
- }
83
- throw mapApiError(result.error, `${org}/${project}/${branch}:${mode}`);
84
- }
85
- return { revisionId: result.data.id, client: clientInstance };
86
- }
87
- export function createClientTransport(mode) {
88
- const resolveScope = makeRecoverableScopeResolver(() => getScope(mode));
89
- async function withScopeRetry(operation, context) {
90
- const firstScope = await resolveScope.resolve();
91
- const first = await operation(firstScope);
92
- if (!first.error)
93
- return first.data;
94
- const err = first.error;
95
- if (mode === 'draft' && err.statusCode === 404) {
96
- resolveScope.invalidate();
97
- const secondScope = await resolveScope.resolve();
98
- const second = await operation(secondScope);
99
- if (!second.error)
100
- return second.data;
101
- throw mapApiError(second.error, context);
102
- }
103
- throw mapApiError(first.error, context);
104
- }
105
- async function assertReady() {
106
- let resultData;
107
- try {
108
- resultData = await withScopeRetry(({ revisionId, client }) => sdk.tables({ client, path: { revisionId }, query: { first: 100 } }), '/tables');
109
- }
110
- catch (error) {
111
- if (error instanceof ControlPlaneError && error.status === 404) {
112
- throw new ControlPlaneError('BOOTSTRAP_NOT_APPLIED', 'Control-plane bootstrap is missing or not committed', {
113
- status: 404,
114
- details: error.details,
115
- });
116
- }
117
- throw error;
118
- }
119
- const tableIds = new Set((resultData?.edges ?? []).flatMap((edge) => edge.node ? [edge.node.id] : []));
120
- const missing = runtimeTables.filter((t) => !tableIds.has(t));
121
- if (missing.length > 0) {
122
- throw new ControlPlaneError('BOOTSTRAP_NOT_APPLIED', 'Control-plane bootstrap is missing runtime tables', {
123
- details: { missing },
124
- });
125
- }
126
- }
127
- async function listRows(table, options) {
128
- const body = {
129
- first: options?.first ?? 100,
130
- after: options?.after,
131
- where: options?.where,
132
- orderBy: options?.orderBy,
133
- };
134
- const data = await withScopeRetry(({ revisionId, client }) => sdk.rows({ client, path: { revisionId, tableId: table }, body }), `${table}/rows`);
135
- const edges = mapTransportListEdges((data?.edges ?? []));
136
- return { edges };
137
- }
138
- async function getRow(table, rowId) {
139
- const data = await withScopeRetry(({ revisionId, client }) => sdk.row({ client, path: { revisionId, tableId: table, rowId } }), `${table}/${rowId}`);
140
- return toTransportRow(data);
141
- }
142
- async function createRow(table, rowId, data) {
143
- const resultData = await withScopeRetry(({ revisionId, client }) => sdk.createRow({
144
- client,
145
- path: { revisionId, tableId: table },
146
- body: { rowId, data: data },
147
- }), `${table}/${rowId}`);
148
- return toTransportRow(resultData.row);
149
- }
150
- async function updateRow(table, rowId, data) {
151
- const resultData = await withScopeRetry(({ revisionId, client }) => sdk.updateRow({
152
- client,
153
- path: { revisionId, tableId: table, rowId },
154
- body: { data: data },
155
- }), `${table}/${rowId}`);
156
- return toTransportRow(extractMutationRow({ data: resultData }));
157
- }
158
- async function patchRow(table, rowId, patches) {
159
- const resultData = await withScopeRetry(({ revisionId, client }) => sdk.patchRow({
160
- client,
161
- path: { revisionId, tableId: table, rowId },
162
- body: { patches: patches },
163
- }), `${table}/${rowId}`);
164
- return toTransportRow(extractMutationRow({ data: resultData }));
165
- }
166
- return { mode, assertReady, listRows, getRow, createRow, updateRow, patchRow, invalidate: () => resolveScope.invalidate() };
167
- }
168
- //# sourceMappingURL=client-transport.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-transport.js","sourceRoot":"","sources":["../../src/control-plane/client-transport.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- import pg from 'pg';
2
- import { PROFILES, resolveProfileName } from '../config.js';
3
- export function resolveDbosDbName() {
4
- const name = process.env['REVO_DBOS_DB'] ?? PROFILES[resolveProfileName()].dbosDb;
5
- if (!/^[a-z_][a-z0-9_]*$/i.test(name)) {
6
- throw new Error(`Invalid REVO_DBOS_DB '${name}': must be a SQL identifier (/^[a-z_][a-z0-9_]*$/i)`);
7
- }
8
- return name;
9
- }
10
- const MAINTENANCE_DB = 'postgres';
11
- const PG_SQLSTATE_DUPLICATE_DATABASE = '42P04';
12
- const DEFAULT_CREDS = {
13
- user: 'revisium',
14
- password: 'password',
15
- adminDb: MAINTENANCE_DB,
16
- };
17
- export async function ensurePostgres(pgPort, opts = {}, deps = {}) {
18
- const dbosDbName = resolveDbosDbName();
19
- const { user, password, adminDb } = { ...DEFAULT_CREDS, ...opts };
20
- const pgClientFactory = () => new pg.Client({ host: 'localhost', port: pgPort, user, password, database: adminDb });
21
- const createClient = deps.createClient ?? pgClientFactory;
22
- const client = createClient();
23
- try {
24
- await client.connect();
25
- const result = await client.query(`SELECT count(*)::text AS count FROM pg_database WHERE datname = $1`, [dbosDbName]);
26
- const exists = result.rows[0]?.count !== '0';
27
- if (!exists) {
28
- try {
29
- await client.query(`CREATE DATABASE ${dbosDbName}`);
30
- }
31
- catch (err) {
32
- if (err.code === PG_SQLSTATE_DUPLICATE_DATABASE) {
33
- return;
34
- }
35
- throw err;
36
- }
37
- }
38
- }
39
- finally {
40
- await client.end();
41
- }
42
- }
43
- export function dbosSystemDatabaseUrl(pgPort, user = 'revisium', password = 'password') {
44
- return `postgresql://${encodeURIComponent(user)}:${encodeURIComponent(password)}@localhost:${pgPort}/${resolveDbosDbName()}`;
45
- }
46
- //# sourceMappingURL=ensure-postgres.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ensure-postgres.js","sourceRoot":"","sources":["../../src/engine/ensure-postgres.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAM5D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC,MAAM,CAAC;IAClF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,qDAAqD,CAAC,CAAC;IACtG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AACD,MAAM,cAAc,GAAG,UAAU,CAAC;AAGlC,MAAM,8BAA8B,GAAG,OAAO,CAAC;AAQ/C,MAAM,aAAa,GAAwB;IACzC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,cAAc;CACxB,CAAC;AAoBF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,OAAqC,EAAE,EACvC,OAA2B,EAAE;IAE7B,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,IAAI,EAAE,CAAC;IAClE,MAAM,eAAe,GAAG,GAAe,EAAE,CACvC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAA0B,CAAC;IACjH,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,eAAe,CAAC;IAE1D,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B,oEAAoE,EACpE,CAAC,UAAU,CAAC,CACb,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,GAAG,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC;YACtD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAK,GAAyB,CAAC,IAAI,KAAK,8BAA8B,EAAE,CAAC;oBACvE,OAAO;gBACT,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AASD,MAAM,UAAU,qBAAqB,CACnC,MAAc,EACd,IAAI,GAAG,UAAU,EACjB,QAAQ,GAAG,UAAU;IAErB,OAAO,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,cAAc,MAAM,IAAI,iBAAiB,EAAE,EAAE,CAAC;AAC/H,CAAC"}