@revisium/orchestrator 0.1.0-alpha.4 → 0.1.0-alpha.5

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 (337) hide show
  1. package/control-plane/bootstrap.config.json +1 -0
  2. package/control-plane/default-playbook/catalog/pipelines.json +289 -52
  3. package/control-plane/default-playbook/catalog/roles.json +9 -0
  4. package/control-plane/default-playbook/prompts/analyst.md +3 -1
  5. package/control-plane/default-playbook/prompts/reviewer.md +2 -2
  6. package/control-plane/default-playbook/prompts/triager.md +51 -0
  7. package/control-plane/default-playbook/prompts/watcher.md +2 -2
  8. package/dist/api/graphql-api/filters/graphql-validation-exception.filter.js +36 -0
  9. package/dist/api/graphql-api/filters/graphql-validation-exception.filter.js.map +1 -0
  10. package/dist/api/graphql-api/graphql-api.module.js +75 -0
  11. package/dist/api/graphql-api/graphql-api.module.js.map +1 -0
  12. package/dist/api/graphql-api/graphql-ws/constants.js +9 -0
  13. package/dist/api/graphql-api/graphql-ws/constants.js.map +1 -0
  14. package/dist/api/graphql-api/graphql-ws/pubsub.module.js +29 -0
  15. package/dist/api/graphql-api/graphql-ws/pubsub.module.js.map +1 -0
  16. package/dist/api/graphql-api/graphql-ws/run-progress-subscription-poller.service.js +101 -0
  17. package/dist/api/graphql-api/graphql-ws/run-progress-subscription-poller.service.js.map +1 -0
  18. package/dist/api/graphql-api/graphql-ws/subscription-bridge.service.js +115 -0
  19. package/dist/api/graphql-api/graphql-ws/subscription-bridge.service.js.map +1 -0
  20. package/dist/api/graphql-api/graphql-ws/subscription-mappers.js +85 -0
  21. package/dist/api/graphql-api/graphql-ws/subscription-mappers.js.map +1 -0
  22. package/dist/api/graphql-api/graphql-ws/ws.js +22 -0
  23. package/dist/api/graphql-api/graphql-ws/ws.js.map +1 -0
  24. package/dist/api/graphql-api/inbox/inbox-subscription.resolver.js +56 -0
  25. package/dist/api/graphql-api/inbox/inbox-subscription.resolver.js.map +1 -0
  26. package/dist/api/graphql-api/inbox/inbox.resolver.js +125 -0
  27. package/dist/api/graphql-api/inbox/inbox.resolver.js.map +1 -0
  28. package/dist/api/graphql-api/inbox/inputs/answer-question.input.js +33 -0
  29. package/dist/api/graphql-api/inbox/inputs/answer-question.input.js.map +1 -0
  30. package/dist/api/graphql-api/inbox/inputs/gate-decision.input.js +27 -0
  31. package/dist/api/graphql-api/inbox/inputs/gate-decision.input.js.map +1 -0
  32. package/dist/api/graphql-api/inbox/inputs/list-inbox.input.js +28 -0
  33. package/dist/api/graphql-api/inbox/inputs/list-inbox.input.js.map +1 -0
  34. package/dist/api/graphql-api/inbox/inputs/resolve-inbox-item.input.js +38 -0
  35. package/dist/api/graphql-api/inbox/inputs/resolve-inbox-item.input.js.map +1 -0
  36. package/dist/api/graphql-api/inbox/model/gate-risk.model.js +53 -0
  37. package/dist/api/graphql-api/inbox/model/gate-risk.model.js.map +1 -0
  38. package/dist/api/graphql-api/inbox/model/inbox-connection.model.js +16 -0
  39. package/dist/api/graphql-api/inbox/model/inbox-connection.model.js.map +1 -0
  40. package/dist/api/graphql-api/inbox/model/inbox-item.model.js +88 -0
  41. package/dist/api/graphql-api/inbox/model/inbox-item.model.js.map +1 -0
  42. package/dist/api/graphql-api/inbox/model/inbox-resolution.model.js +48 -0
  43. package/dist/api/graphql-api/inbox/model/inbox-resolution.model.js.map +1 -0
  44. package/dist/api/graphql-api/method/inputs/list-method.input.js +15 -0
  45. package/dist/api/graphql-api/method/inputs/list-method.input.js.map +1 -0
  46. package/dist/api/graphql-api/method/method.resolver.js +90 -0
  47. package/dist/api/graphql-api/method/method.resolver.js.map +1 -0
  48. package/dist/api/graphql-api/method/model/alternative-role-group.model.js +32 -0
  49. package/dist/api/graphql-api/method/model/alternative-role-group.model.js.map +1 -0
  50. package/dist/api/graphql-api/method/model/pipeline-connection.model.js +16 -0
  51. package/dist/api/graphql-api/method/model/pipeline-connection.model.js.map +1 -0
  52. package/dist/api/graphql-api/method/model/pipeline.model.js +69 -0
  53. package/dist/api/graphql-api/method/model/pipeline.model.js.map +1 -0
  54. package/dist/api/graphql-api/method/model/playbook-connection.model.js +16 -0
  55. package/dist/api/graphql-api/method/model/playbook-connection.model.js.map +1 -0
  56. package/dist/api/graphql-api/method/model/playbook.model.js +47 -0
  57. package/dist/api/graphql-api/method/model/playbook.model.js.map +1 -0
  58. package/dist/api/graphql-api/method/model/role-connection.model.js +16 -0
  59. package/dist/api/graphql-api/method/model/role-connection.model.js.map +1 -0
  60. package/dist/api/graphql-api/method/model/role.model.js +98 -0
  61. package/dist/api/graphql-api/method/model/role.model.js.map +1 -0
  62. package/dist/api/graphql-api/pr/inputs/pr-readiness.input.js +52 -0
  63. package/dist/api/graphql-api/pr/inputs/pr-readiness.input.js.map +1 -0
  64. package/dist/api/graphql-api/pr/model/pr-readiness.model.js +403 -0
  65. package/dist/api/graphql-api/pr/model/pr-readiness.model.js.map +1 -0
  66. package/dist/api/graphql-api/pr/pr.resolver.js +76 -0
  67. package/dist/api/graphql-api/pr/pr.resolver.js.map +1 -0
  68. package/dist/api/graphql-api/registerGraphqlEnums.js +4 -0
  69. package/dist/api/graphql-api/registerGraphqlEnums.js.map +1 -0
  70. package/dist/api/graphql-api/runs/inputs/create-run.input.js +63 -0
  71. package/dist/api/graphql-api/runs/inputs/create-run.input.js.map +1 -0
  72. package/dist/api/graphql-api/runs/inputs/get-run-attempts.input.js +32 -0
  73. package/dist/api/graphql-api/runs/inputs/get-run-attempts.input.js.map +1 -0
  74. package/dist/api/graphql-api/runs/inputs/get-run-events.input.js +28 -0
  75. package/dist/api/graphql-api/runs/inputs/get-run-events.input.js.map +1 -0
  76. package/dist/api/graphql-api/runs/inputs/list-runs.input.js +23 -0
  77. package/dist/api/graphql-api/runs/inputs/list-runs.input.js.map +1 -0
  78. package/dist/api/graphql-api/runs/inputs/simulate-route.input.js +43 -0
  79. package/dist/api/graphql-api/runs/inputs/simulate-route.input.js.map +1 -0
  80. package/dist/api/graphql-api/runs/model/create-run-result.model.js +53 -0
  81. package/dist/api/graphql-api/runs/model/create-run-result.model.js.map +1 -0
  82. package/dist/api/graphql-api/runs/model/run-attempt.model.js +114 -0
  83. package/dist/api/graphql-api/runs/model/run-attempt.model.js.map +1 -0
  84. package/dist/api/graphql-api/runs/model/run-connection.model.js +16 -0
  85. package/dist/api/graphql-api/runs/model/run-connection.model.js.map +1 -0
  86. package/dist/api/graphql-api/runs/model/run-cost.model.js +67 -0
  87. package/dist/api/graphql-api/runs/model/run-cost.model.js.map +1 -0
  88. package/dist/api/graphql-api/runs/model/run-digest.model.js +41 -0
  89. package/dist/api/graphql-api/runs/model/run-digest.model.js.map +1 -0
  90. package/dist/api/graphql-api/runs/model/run-event-connection.model.js +16 -0
  91. package/dist/api/graphql-api/runs/model/run-event-connection.model.js.map +1 -0
  92. package/dist/api/graphql-api/runs/model/run-event.model.js +58 -0
  93. package/dist/api/graphql-api/runs/model/run-event.model.js.map +1 -0
  94. package/dist/api/graphql-api/runs/model/run-progress.model.js +33 -0
  95. package/dist/api/graphql-api/runs/model/run-progress.model.js.map +1 -0
  96. package/dist/api/graphql-api/runs/model/run-workflow.model.js +287 -0
  97. package/dist/api/graphql-api/runs/model/run-workflow.model.js.map +1 -0
  98. package/dist/api/graphql-api/runs/model/run.model.js +57 -0
  99. package/dist/api/graphql-api/runs/model/run.model.js.map +1 -0
  100. package/dist/api/graphql-api/runs/model/usage.model.js +32 -0
  101. package/dist/api/graphql-api/runs/model/usage.model.js.map +1 -0
  102. package/dist/api/graphql-api/runs/run-digest.resolver.js +40 -0
  103. package/dist/api/graphql-api/runs/run-digest.resolver.js.map +1 -0
  104. package/dist/api/graphql-api/runs/run-events.resolver.js +45 -0
  105. package/dist/api/graphql-api/runs/run-events.resolver.js.map +1 -0
  106. package/dist/api/graphql-api/runs/run-progress.resolver.js +53 -0
  107. package/dist/api/graphql-api/runs/run-progress.resolver.js.map +1 -0
  108. package/dist/api/graphql-api/runs/runs-subscription.resolver.js +93 -0
  109. package/dist/api/graphql-api/runs/runs-subscription.resolver.js.map +1 -0
  110. package/dist/api/graphql-api/runs/runs.resolver.js +130 -0
  111. package/dist/api/graphql-api/runs/runs.resolver.js.map +1 -0
  112. package/dist/api/graphql-api/share/graphql-param-types.js +6 -0
  113. package/dist/api/graphql-api/share/graphql-param-types.js.map +1 -0
  114. package/dist/api/graphql-api/share/inputs/connection.input.js +27 -0
  115. package/dist/api/graphql-api/share/inputs/connection.input.js.map +1 -0
  116. package/dist/api/graphql-api/share/inputs/run-subscription.input.js +22 -0
  117. package/dist/api/graphql-api/share/inputs/run-subscription.input.js.map +1 -0
  118. package/dist/api/graphql-api/share/model/paginated.model.js +75 -0
  119. package/dist/api/graphql-api/share/model/paginated.model.js.map +1 -0
  120. package/dist/api/graphql-api/system/model/daemon-status.model.js +47 -0
  121. package/dist/api/graphql-api/system/model/daemon-status.model.js.map +1 -0
  122. package/dist/api/graphql-api/system/model/doctor-result.model.js +33 -0
  123. package/dist/api/graphql-api/system/model/doctor-result.model.js.map +1 -0
  124. package/dist/api/graphql-api/system/model/project.model.js +37 -0
  125. package/dist/api/graphql-api/system/model/project.model.js.map +1 -0
  126. package/dist/api/graphql-api/system/model/repository-context.model.js +70 -0
  127. package/dist/api/graphql-api/system/model/repository-context.model.js.map +1 -0
  128. package/dist/api/graphql-api/system/model/repository-validation.model.js +62 -0
  129. package/dist/api/graphql-api/system/model/repository-validation.model.js.map +1 -0
  130. package/dist/api/graphql-api/system/model/system-status.model.js +29 -0
  131. package/dist/api/graphql-api/system/model/system-status.model.js.map +1 -0
  132. package/dist/api/graphql-api/system/system.resolver.js +83 -0
  133. package/dist/api/graphql-api/system/system.resolver.js.map +1 -0
  134. package/dist/cli/commands/inbox.js +1 -1
  135. package/dist/cli/commands/inbox.js.map +1 -1
  136. package/dist/cli/commands/run.js +0 -2
  137. package/dist/cli/commands/run.js.map +1 -1
  138. package/dist/cli/commands/serve.js +26 -0
  139. package/dist/cli/commands/serve.js.map +1 -0
  140. package/dist/cli/program.js +2 -0
  141. package/dist/cli/program.js.map +1 -1
  142. package/dist/config.js +15 -0
  143. package/dist/config.js.map +1 -1
  144. package/dist/control-plane/change-notifications.js +35 -0
  145. package/dist/control-plane/change-notifications.js.map +1 -0
  146. package/dist/control-plane/data-access.js +10 -3
  147. package/dist/control-plane/data-access.js.map +1 -1
  148. package/dist/control-plane/inbox.js +5 -31
  149. package/dist/control-plane/inbox.js.map +1 -1
  150. package/dist/control-plane/index.js +1 -1
  151. package/dist/control-plane/index.js.map +1 -1
  152. package/dist/control-plane/resolve-cwd.js +76 -8
  153. package/dist/control-plane/resolve-cwd.js.map +1 -1
  154. package/dist/control-plane/steps.js +15 -349
  155. package/dist/control-plane/steps.js.map +1 -1
  156. package/dist/e2e/kit/agents.js +26 -3
  157. package/dist/e2e/kit/agents.js.map +1 -1
  158. package/dist/e2e/kit/assertions.js +37 -14
  159. package/dist/e2e/kit/assertions.js.map +1 -1
  160. package/dist/e2e/kit/drive.js +0 -4
  161. package/dist/e2e/kit/drive.js.map +1 -1
  162. package/dist/e2e/kit/fake-integrator.js +16 -1
  163. package/dist/e2e/kit/fake-integrator.js.map +1 -1
  164. package/dist/e2e/kit/gh-emulator.js +173 -10
  165. package/dist/e2e/kit/gh-emulator.js.map +1 -1
  166. package/dist/e2e/kit/git-target-repo.js +35 -3
  167. package/dist/e2e/kit/git-target-repo.js.map +1 -1
  168. package/dist/e2e/kit/harness.js +4 -2
  169. package/dist/e2e/kit/harness.js.map +1 -1
  170. package/dist/engine/dbos.module.js +2 -1
  171. package/dist/engine/dbos.module.js.map +1 -1
  172. package/dist/engine/dbos.service.js +69 -18
  173. package/dist/engine/dbos.service.js.map +1 -1
  174. package/dist/features/inbox/commands/handlers/inbox-command.handlers.js +80 -0
  175. package/dist/features/inbox/commands/handlers/inbox-command.handlers.js.map +1 -0
  176. package/dist/features/inbox/commands/impl/answer-question.command.js +7 -0
  177. package/dist/features/inbox/commands/impl/answer-question.command.js.map +1 -0
  178. package/dist/features/inbox/commands/impl/approve-gate.command.js +7 -0
  179. package/dist/features/inbox/commands/impl/approve-gate.command.js.map +1 -0
  180. package/dist/features/inbox/commands/impl/reject-gate.command.js +7 -0
  181. package/dist/features/inbox/commands/impl/reject-gate.command.js.map +1 -0
  182. package/dist/features/inbox/commands/impl/resolve-inbox-item.command.js +7 -0
  183. package/dist/features/inbox/commands/impl/resolve-inbox-item.command.js.map +1 -0
  184. package/dist/features/inbox/commands/index.js +8 -0
  185. package/dist/features/inbox/commands/index.js.map +1 -0
  186. package/dist/features/inbox/inbox-api.module.js +23 -0
  187. package/dist/features/inbox/inbox-api.module.js.map +1 -0
  188. package/dist/features/inbox/inbox-api.service.js +63 -0
  189. package/dist/features/inbox/inbox-api.service.js.map +1 -0
  190. package/dist/features/inbox/queries/handlers/inbox-query.handlers.js +111 -0
  191. package/dist/features/inbox/queries/handlers/inbox-query.handlers.js.map +1 -0
  192. package/dist/features/inbox/queries/impl/get-inbox-item.query.js +7 -0
  193. package/dist/features/inbox/queries/impl/get-inbox-item.query.js.map +1 -0
  194. package/dist/features/inbox/queries/impl/get-pending-decisions.query.js +7 -0
  195. package/dist/features/inbox/queries/impl/get-pending-decisions.query.js.map +1 -0
  196. package/dist/features/inbox/queries/impl/list-inbox.query.js +7 -0
  197. package/dist/features/inbox/queries/impl/list-inbox.query.js.map +1 -0
  198. package/dist/features/inbox/queries/impl/summarize-gate-risk.query.js +7 -0
  199. package/dist/features/inbox/queries/impl/summarize-gate-risk.query.js.map +1 -0
  200. package/dist/features/inbox/queries/index.js +8 -0
  201. package/dist/features/inbox/queries/index.js.map +1 -0
  202. package/dist/features/method/commands/index.js +2 -0
  203. package/dist/features/method/commands/index.js.map +1 -0
  204. package/dist/features/method/method-api.module.js +23 -0
  205. package/dist/features/method/method-api.module.js.map +1 -0
  206. package/dist/features/method/method-api.service.js +47 -0
  207. package/dist/features/method/method-api.service.js.map +1 -0
  208. package/dist/features/method/queries/handlers/method-query.handlers.js +115 -0
  209. package/dist/features/method/queries/handlers/method-query.handlers.js.map +1 -0
  210. package/dist/features/method/queries/impl/get-pipeline.query.js +7 -0
  211. package/dist/features/method/queries/impl/get-pipeline.query.js.map +1 -0
  212. package/dist/features/method/queries/impl/get-role.query.js +7 -0
  213. package/dist/features/method/queries/impl/get-role.query.js.map +1 -0
  214. package/dist/features/method/queries/impl/list-pipelines.query.js +7 -0
  215. package/dist/features/method/queries/impl/list-pipelines.query.js.map +1 -0
  216. package/dist/features/method/queries/impl/list-playbooks.query.js +7 -0
  217. package/dist/features/method/queries/impl/list-playbooks.query.js.map +1 -0
  218. package/dist/features/method/queries/impl/list-roles.query.js +7 -0
  219. package/dist/features/method/queries/impl/list-roles.query.js.map +1 -0
  220. package/dist/features/method/queries/index.js +9 -0
  221. package/dist/features/method/queries/index.js.map +1 -0
  222. package/dist/features/pr/commands/index.js +2 -0
  223. package/dist/features/pr/commands/index.js.map +1 -0
  224. package/dist/features/pr/pr-api.module.js +23 -0
  225. package/dist/features/pr/pr-api.module.js.map +1 -0
  226. package/dist/features/pr/pr-api.service.js +35 -0
  227. package/dist/features/pr/pr-api.service.js.map +1 -0
  228. package/dist/features/pr/queries/handlers/pr-query.handlers.js +48 -0
  229. package/dist/features/pr/queries/handlers/pr-query.handlers.js.map +1 -0
  230. package/dist/features/pr/queries/impl/get-pr-readiness.query.js +7 -0
  231. package/dist/features/pr/queries/impl/get-pr-readiness.query.js.map +1 -0
  232. package/dist/features/pr/queries/impl/list-pr-feedback.query.js +7 -0
  233. package/dist/features/pr/queries/impl/list-pr-feedback.query.js.map +1 -0
  234. package/dist/features/pr/queries/index.js +3 -0
  235. package/dist/features/pr/queries/index.js.map +1 -0
  236. package/dist/features/runs/commands/handlers/runs-command.handlers.js +32 -0
  237. package/dist/features/runs/commands/handlers/runs-command.handlers.js.map +1 -0
  238. package/dist/features/runs/commands/impl/create-run.command.js +7 -0
  239. package/dist/features/runs/commands/impl/create-run.command.js.map +1 -0
  240. package/dist/features/runs/commands/index.js +3 -0
  241. package/dist/features/runs/commands/index.js.map +1 -0
  242. package/dist/features/runs/queries/handlers/runs-query.handlers.js +224 -0
  243. package/dist/features/runs/queries/handlers/runs-query.handlers.js.map +1 -0
  244. package/dist/features/runs/queries/impl/get-run-attempts.query.js +7 -0
  245. package/dist/features/runs/queries/impl/get-run-attempts.query.js.map +1 -0
  246. package/dist/features/runs/queries/impl/get-run-digest.query.js +7 -0
  247. package/dist/features/runs/queries/impl/get-run-digest.query.js.map +1 -0
  248. package/dist/features/runs/queries/impl/get-run-events.query.js +7 -0
  249. package/dist/features/runs/queries/impl/get-run-events.query.js.map +1 -0
  250. package/dist/features/runs/queries/impl/get-run-progress.query.js +7 -0
  251. package/dist/features/runs/queries/impl/get-run-progress.query.js.map +1 -0
  252. package/dist/features/runs/queries/impl/get-run-workflow.query.js +7 -0
  253. package/dist/features/runs/queries/impl/get-run-workflow.query.js.map +1 -0
  254. package/dist/features/runs/queries/impl/get-run.query.js +7 -0
  255. package/dist/features/runs/queries/impl/get-run.query.js.map +1 -0
  256. package/dist/features/runs/queries/impl/list-runs.query.js +7 -0
  257. package/dist/features/runs/queries/impl/list-runs.query.js.map +1 -0
  258. package/dist/features/runs/queries/impl/simulate-route.query.js +7 -0
  259. package/dist/features/runs/queries/impl/simulate-route.query.js.map +1 -0
  260. package/dist/features/runs/queries/index.js +12 -0
  261. package/dist/features/runs/queries/index.js.map +1 -0
  262. package/dist/features/runs/runs-api.module.js +23 -0
  263. package/dist/features/runs/runs-api.module.js.map +1 -0
  264. package/dist/features/runs/runs-api.service.js +67 -0
  265. package/dist/features/runs/runs-api.service.js.map +1 -0
  266. package/dist/features/shared/connection.js +39 -0
  267. package/dist/features/shared/connection.js.map +1 -0
  268. package/dist/features/system/commands/index.js +2 -0
  269. package/dist/features/system/commands/index.js.map +1 -0
  270. package/dist/features/system/queries/handlers/system-query.handlers.js +96 -0
  271. package/dist/features/system/queries/handlers/system-query.handlers.js.map +1 -0
  272. package/dist/features/system/queries/impl/doctor.query.js +4 -0
  273. package/dist/features/system/queries/impl/doctor.query.js.map +1 -0
  274. package/dist/features/system/queries/impl/get-project.query.js +4 -0
  275. package/dist/features/system/queries/impl/get-project.query.js.map +1 -0
  276. package/dist/features/system/queries/impl/get-repository-context.query.js +7 -0
  277. package/dist/features/system/queries/impl/get-repository-context.query.js.map +1 -0
  278. package/dist/features/system/queries/impl/get-status.query.js +4 -0
  279. package/dist/features/system/queries/impl/get-status.query.js.map +1 -0
  280. package/dist/features/system/queries/impl/validate-repository.query.js +7 -0
  281. package/dist/features/system/queries/impl/validate-repository.query.js.map +1 -0
  282. package/dist/features/system/queries/index.js +9 -0
  283. package/dist/features/system/queries/index.js.map +1 -0
  284. package/dist/features/system/system-api.module.js +23 -0
  285. package/dist/features/system/system-api.module.js.map +1 -0
  286. package/dist/features/system/system-api.service.js +47 -0
  287. package/dist/features/system/system-api.service.js.map +1 -0
  288. package/dist/host/host.lifecycle.js +16 -3
  289. package/dist/host/host.lifecycle.js.map +1 -1
  290. package/dist/http/graphql-host.js +50 -0
  291. package/dist/http/graphql-host.js.map +1 -0
  292. package/dist/http/graphql-host.module.js +20 -0
  293. package/dist/http/graphql-host.module.js.map +1 -0
  294. package/dist/infrastructure/metrics/graphql/graphql-metrics.js +91 -0
  295. package/dist/infrastructure/metrics/graphql/graphql-metrics.js.map +1 -0
  296. package/dist/pipeline/await-human.js +8 -4
  297. package/dist/pipeline/await-human.js.map +1 -1
  298. package/dist/pipeline/data-driven-task.workflow.js +171 -22
  299. package/dist/pipeline/data-driven-task.workflow.js.map +1 -1
  300. package/dist/pipeline/data-driven-template.js +3 -3
  301. package/dist/pipeline/pipeline.module.js +1 -1
  302. package/dist/pipeline/pipeline.module.js.map +1 -1
  303. package/dist/pipeline/{develop-task.workflow.js → pipeline.service.js} +43 -11
  304. package/dist/pipeline/pipeline.service.js.map +1 -0
  305. package/dist/pipeline-core/kit/fixtures.js +94 -0
  306. package/dist/pipeline-core/kit/fixtures.js.map +1 -1
  307. package/dist/revisium/run.service.js +16 -7
  308. package/dist/revisium/run.service.js.map +1 -1
  309. package/dist/run/create-run.js +5 -31
  310. package/dist/run/create-run.js.map +1 -1
  311. package/dist/run/inspect-run.js +2 -29
  312. package/dist/run/inspect-run.js.map +1 -1
  313. package/dist/run/terminal-run-status.js +7 -30
  314. package/dist/run/terminal-run-status.js.map +1 -1
  315. package/dist/runners/claude-code.service.js +1 -0
  316. package/dist/runners/claude-code.service.js.map +1 -1
  317. package/dist/runners/integrator.js +241 -5
  318. package/dist/runners/integrator.js.map +1 -1
  319. package/dist/runners/runner.module.js +3 -1
  320. package/dist/runners/runner.module.js.map +1 -1
  321. package/dist/runners/worktree.service.js +63 -0
  322. package/dist/runners/worktree.service.js.map +1 -0
  323. package/dist/task-control-plane/task-control-plane-api.service.js +293 -3
  324. package/dist/task-control-plane/task-control-plane-api.service.js.map +1 -1
  325. package/dist/task-control-plane/task-control-plane.module.js +1 -2
  326. package/dist/task-control-plane/task-control-plane.module.js.map +1 -1
  327. package/dist/worker/claude-code-runner.js +13 -15
  328. package/dist/worker/claude-code-runner.js.map +1 -1
  329. package/dist/worker/git-worktree-manager.js +148 -0
  330. package/dist/worker/git-worktree-manager.js.map +1 -0
  331. package/dist/worker/result-envelope.js +41 -1
  332. package/dist/worker/result-envelope.js.map +1 -1
  333. package/dist/worker/runner.js.map +1 -1
  334. package/package.json +15 -7
  335. package/dist/pipeline/develop-task.workflow.js.map +0 -1
  336. package/dist/worker/worktree-manager.js +0 -7
  337. package/dist/worker/worktree-manager.js.map +0 -1
@@ -149,6 +149,7 @@
149
149
  "id": "steps",
150
150
  "schema": {
151
151
  "type": "object",
152
+ "description": "DEPRECATED/unused — runtime path retired (audit §3.1, #86); no live path writes or reads a steps row (DBOS owns progress). Table drop deferred — a schema drop on existing control-planes is riskier than retiring the writes; tracked in docs/roadmap.md → Post-MVP cleanup.",
152
153
  "additionalProperties": false,
153
154
  "properties": {
154
155
  "id": {
@@ -11,6 +11,7 @@
11
11
  "orchestrator",
12
12
  "analyst",
13
13
  "reviewer",
14
+ "triager",
14
15
  "developer",
15
16
  "integrator",
16
17
  "watcher"
@@ -36,7 +37,12 @@
36
37
  "approved",
37
38
  "clean",
38
39
  "blocker",
39
- "changes_requested"
40
+ "changes_requested",
41
+ "review_changes",
42
+ "ci_changes",
43
+ "fix",
44
+ "wontfix",
45
+ "question"
40
46
  ]
41
47
  },
42
48
  "nodes": {
@@ -47,8 +53,12 @@
47
53
  "next": "planReviewer",
48
54
  "onFailure": "abort",
49
55
  "resultSchema": "schema:plan",
50
- "produces": { "name": "plan" },
51
- "incrementCounters": ["planReviewLoop"]
56
+ "produces": {
57
+ "name": "plan"
58
+ },
59
+ "incrementCounters": [
60
+ "planReviewLoop"
61
+ ]
52
62
  },
53
63
  "planReviewer": {
54
64
  "id": "planReviewer",
@@ -57,22 +67,43 @@
57
67
  "next": "planReviewRouter",
58
68
  "onFailure": "abort",
59
69
  "resultSchema": "schema:reviewVerdict",
60
- "consumes": [{ "node": "analyst", "as": "plan" }]
70
+ "consumes": [
71
+ {
72
+ "node": "analyst",
73
+ "as": "plan"
74
+ }
75
+ ]
61
76
  },
62
77
  "planReviewRouter": {
63
78
  "id": "planReviewRouter",
64
79
  "kind": "choice",
65
80
  "branches": [
66
81
  {
67
- "when": { "op": "verdict.in", "value": ["approved", "clean"] },
82
+ "when": {
83
+ "op": "verdict.in",
84
+ "value": [
85
+ "approved",
86
+ "clean"
87
+ ]
88
+ },
68
89
  "goto": "planGate"
69
90
  },
70
91
  {
71
92
  "when": {
72
93
  "op": "all",
73
94
  "of": [
74
- { "op": "verdict.in", "value": ["blocker", "changes_requested"] },
75
- { "op": "counter.lt", "scope": "planReviewLoop", "value": 4 }
95
+ {
96
+ "op": "verdict.in",
97
+ "value": [
98
+ "blocker",
99
+ "changes_requested"
100
+ ]
101
+ },
102
+ {
103
+ "op": "counter.lt",
104
+ "scope": "planReviewLoop",
105
+ "value": 4
106
+ }
76
107
  ]
77
108
  },
78
109
  "goto": "analyst"
@@ -109,7 +140,12 @@
109
140
  "next": "codeReview",
110
141
  "onFailure": "abort",
111
142
  "resultSchema": "schema:change",
112
- "consumes": [{ "node": "analyst", "as": "plan" }]
143
+ "consumes": [
144
+ {
145
+ "node": "analyst",
146
+ "as": "plan"
147
+ }
148
+ ]
113
149
  },
114
150
  "codeReview": {
115
151
  "id": "codeReview",
@@ -173,7 +209,7 @@
173
209
  "id": "integrator",
174
210
  "kind": "script",
175
211
  "scriptRef": "script:integrator",
176
- "next": "watcherPost",
212
+ "next": "pollPr",
177
213
  "catch": [
178
214
  {
179
215
  "onError": "revo.ScriptBlocked",
@@ -187,70 +223,219 @@
187
223
  "onFailure": "route",
188
224
  "resultSchema": "schema:integration"
189
225
  },
190
- "watcherPost": {
191
- "id": "watcherPost",
192
- "kind": "agent",
193
- "roleRef": "role:watcher",
194
- "next": "watcherRouter",
195
- "onFailure": "abort",
196
- "resultSchema": "schema:watchVerdict"
226
+ "mergeGate": {
227
+ "id": "mergeGate",
228
+ "kind": "humanGate",
229
+ "reason": "merge-review",
230
+ "outcomes": [
231
+ "approved"
232
+ ],
233
+ "branches": [
234
+ {
235
+ "when": {
236
+ "op": "verdict.eq",
237
+ "value": "approved"
238
+ },
239
+ "goto": "confirmMerge"
240
+ },
241
+ {
242
+ "default": "blockedEnd"
243
+ }
244
+ ]
197
245
  },
198
- "watcherRouter": {
199
- "id": "watcherRouter",
246
+ "confirmMerge": {
247
+ "id": "confirmMerge",
248
+ "kind": "script",
249
+ "scriptRef": "script:confirmMerge",
250
+ "next": "mergedEnd",
251
+ "catch": [
252
+ {
253
+ "onError": "revo.ScriptBlocked",
254
+ "goto": "blockedEnd"
255
+ },
256
+ {
257
+ "onError": "revo.ScriptFailed",
258
+ "goto": "failedEnd"
259
+ }
260
+ ],
261
+ "onFailure": "route",
262
+ "resultSchema": "schema:integration"
263
+ },
264
+ "mergedEnd": {
265
+ "id": "mergedEnd",
266
+ "kind": "terminal",
267
+ "status": "succeeded"
268
+ },
269
+ "failedEnd": {
270
+ "id": "failedEnd",
271
+ "kind": "terminal",
272
+ "status": "failed"
273
+ },
274
+ "blockedEnd": {
275
+ "id": "blockedEnd",
276
+ "kind": "terminal",
277
+ "status": "blocked"
278
+ },
279
+ "pollPr": {
280
+ "id": "pollPr",
281
+ "kind": "script",
282
+ "scriptRef": "script:pollPr",
283
+ "next": "prRouter",
284
+ "onFailure": "route",
285
+ "resultSchema": "schema:prFeedback",
286
+ "produces": {
287
+ "name": "prFeedback"
288
+ },
289
+ "catch": [
290
+ {
291
+ "onError": "revo.ScriptBlocked",
292
+ "goto": "blockedEnd"
293
+ },
294
+ {
295
+ "onError": "revo.ScriptFailed",
296
+ "goto": "failedEnd"
297
+ }
298
+ ]
299
+ },
300
+ "prRouter": {
301
+ "id": "prRouter",
200
302
  "kind": "choice",
201
303
  "branches": [
202
304
  {
203
305
  "when": {
204
- "op": "verdict.in",
205
- "value": [
206
- "approved",
207
- "clean"
208
- ]
306
+ "op": "verdict.eq",
307
+ "value": "clean"
209
308
  },
210
309
  "goto": "mergeGate"
211
310
  },
311
+ {
312
+ "when": {
313
+ "op": "verdict.eq",
314
+ "value": "review_changes"
315
+ },
316
+ "goto": "triage"
317
+ },
212
318
  {
213
319
  "when": {
214
320
  "op": "all",
215
321
  "of": [
216
322
  {
217
- "op": "verdict.in",
218
- "value": [
219
- "blocker",
220
- "changes_requested"
221
- ]
323
+ "op": "verdict.eq",
324
+ "value": "ci_changes"
222
325
  },
223
326
  {
224
327
  "op": "counter.lt",
225
- "scope": "watcherLoop",
328
+ "scope": "ciLoop",
226
329
  "value": 3
227
330
  }
228
331
  ]
229
332
  },
230
- "goto": "watcherRework"
333
+ "goto": "ciRework"
231
334
  },
232
335
  {
233
336
  "default": "blockedEnd"
234
337
  }
235
338
  ]
236
339
  },
237
- "watcherRework": {
238
- "id": "watcherRework",
340
+ "ciRework": {
341
+ "id": "ciRework",
239
342
  "kind": "agent",
240
343
  "roleRef": "role:developer",
241
344
  "next": "integrator",
242
345
  "onFailure": "abort",
243
346
  "resultSchema": "schema:change",
244
347
  "incrementCounters": [
245
- "watcherLoop"
348
+ "ciLoop"
349
+ ],
350
+ "consumes": [
351
+ {
352
+ "node": "pollPr",
353
+ "as": "feedback"
354
+ }
246
355
  ]
247
356
  },
248
- "mergeGate": {
249
- "id": "mergeGate",
357
+ "triage": {
358
+ "id": "triage",
359
+ "kind": "agent",
360
+ "roleRef": "role:triager",
361
+ "next": "triageRouter",
362
+ "onFailure": "abort",
363
+ "resultSchema": "schema:triage",
364
+ "produces": {
365
+ "name": "triage"
366
+ },
367
+ "consumes": [
368
+ {
369
+ "node": "analyst",
370
+ "as": "plan",
371
+ "staleOk": true
372
+ },
373
+ {
374
+ "node": "pollPr",
375
+ "as": "feedback"
376
+ }
377
+ ]
378
+ },
379
+ "triageRouter": {
380
+ "id": "triageRouter",
381
+ "kind": "choice",
382
+ "branches": [
383
+ {
384
+ "when": {
385
+ "op": "all",
386
+ "of": [
387
+ {
388
+ "op": "verdict.eq",
389
+ "value": "question"
390
+ },
391
+ {
392
+ "op": "counter.lt",
393
+ "scope": "questionLoop",
394
+ "value": 3
395
+ }
396
+ ]
397
+ },
398
+ "goto": "questionGate"
399
+ },
400
+ {
401
+ "when": {
402
+ "op": "all",
403
+ "of": [
404
+ {
405
+ "op": "verdict.eq",
406
+ "value": "fix"
407
+ },
408
+ {
409
+ "op": "counter.lt",
410
+ "scope": "reviewLoop",
411
+ "value": 3
412
+ }
413
+ ]
414
+ },
415
+ "goto": "reviewRework"
416
+ },
417
+ {
418
+ "when": {
419
+ "op": "verdict.eq",
420
+ "value": "wontfix"
421
+ },
422
+ "goto": "respondThreads"
423
+ },
424
+ {
425
+ "default": "blockedEnd"
426
+ }
427
+ ]
428
+ },
429
+ "questionGate": {
430
+ "id": "questionGate",
250
431
  "kind": "humanGate",
251
- "reason": "merge-review",
432
+ "reason": "review-question",
252
433
  "outcomes": [
253
- "approved"
434
+ "approved",
435
+ "changes_requested"
436
+ ],
437
+ "incrementCounters": [
438
+ "questionLoop"
254
439
  ],
255
440
  "branches": [
256
441
  {
@@ -258,30 +443,74 @@
258
443
  "op": "verdict.eq",
259
444
  "value": "approved"
260
445
  },
261
- "goto": "mergedEnd"
446
+ "goto": "triage"
262
447
  },
263
448
  {
264
449
  "default": "blockedEnd"
265
450
  }
266
451
  ]
267
452
  },
268
- "mergedEnd": {
269
- "id": "mergedEnd",
270
- "kind": "terminal",
271
- "status": "succeeded"
453
+ "reviewRework": {
454
+ "id": "reviewRework",
455
+ "kind": "agent",
456
+ "roleRef": "role:developer",
457
+ "next": "reviewIntegrator",
458
+ "onFailure": "abort",
459
+ "resultSchema": "schema:change",
460
+ "incrementCounters": [
461
+ "reviewLoop"
462
+ ],
463
+ "consumes": [
464
+ {
465
+ "node": "triage",
466
+ "as": "triage"
467
+ }
468
+ ]
272
469
  },
273
- "failedEnd": {
274
- "id": "failedEnd",
275
- "kind": "terminal",
276
- "status": "failed"
470
+ "reviewIntegrator": {
471
+ "id": "reviewIntegrator",
472
+ "kind": "script",
473
+ "scriptRef": "script:integrator",
474
+ "next": "respondThreads",
475
+ "onFailure": "route",
476
+ "resultSchema": "schema:integration",
477
+ "catch": [
478
+ {
479
+ "onError": "revo.ScriptBlocked",
480
+ "goto": "blockedEnd"
481
+ },
482
+ {
483
+ "onError": "revo.ScriptFailed",
484
+ "goto": "failedEnd"
485
+ }
486
+ ]
277
487
  },
278
- "blockedEnd": {
279
- "id": "blockedEnd",
280
- "kind": "terminal",
281
- "status": "blocked"
488
+ "respondThreads": {
489
+ "id": "respondThreads",
490
+ "kind": "script",
491
+ "scriptRef": "script:respondThreads",
492
+ "next": "pollPr",
493
+ "onFailure": "route",
494
+ "resultSchema": "schema:respond",
495
+ "consumes": [
496
+ {
497
+ "node": "triage",
498
+ "as": "triage"
499
+ }
500
+ ],
501
+ "catch": [
502
+ {
503
+ "onError": "revo.ScriptBlocked",
504
+ "goto": "blockedEnd"
505
+ },
506
+ {
507
+ "onError": "revo.ScriptFailed",
508
+ "goto": "failedEnd"
509
+ }
510
+ ]
282
511
  }
283
512
  },
284
- "title": "Feature development — plan + merge gates, bounded code-review + watcher rework",
513
+ "title": "Feature development — plan + merge gates, bounded code-review rework, and a PR review-feedback loop (plan 0018)",
285
514
  "policy": {
286
515
  "conflicts": [
287
516
  [
@@ -300,7 +529,15 @@
300
529
  "cap": 3,
301
530
  "parent": null
302
531
  },
303
- "watcherLoop": {
532
+ "ciLoop": {
533
+ "cap": 3,
534
+ "parent": null
535
+ },
536
+ "reviewLoop": {
537
+ "cap": 3,
538
+ "parent": null
539
+ },
540
+ "questionLoop": {
304
541
  "cap": 3,
305
542
  "parent": null
306
543
  }
@@ -52,5 +52,14 @@
52
52
  "allowed_tools": ["Read", "Grep", "Glob", "Bash"],
53
53
  "default_model_level": "cheap",
54
54
  "runner_id": "claude-code"
55
+ },
56
+ {
57
+ "id": "triager",
58
+ "path": "prompts/triager.md",
59
+ "surface": "repo",
60
+ "rights": "read-only",
61
+ "allowed_tools": ["Read", "Grep", "Glob", "Bash"],
62
+ "default_model_level": "deep",
63
+ "runner_id": "claude-code"
55
64
  }
56
65
  ]
@@ -18,7 +18,9 @@ reviewer can check against. The plan is the artifact a human approves at the pla
18
18
 
19
19
  ## Output
20
20
 
21
- Emit a structured plan. End your output with a single clear verdict token:
21
+ Put the full ordered plan (problem, scope, files to change, steps, risks, verification) in the result
22
+ `output` — the plan reviewer and the developer receive it verbatim as their input. Set the `verdict` field
23
+ to EXACTLY one of:
22
24
 
23
25
  - `approved` — the task is well understood and the plan is ready for a developer.
24
26
  - `changes_requested` — the request is ambiguous or under-specified; explain what is missing.
@@ -19,10 +19,10 @@ are invoked in the pipeline.
19
19
 
20
20
  ## Output
21
21
 
22
- End your output with a single clear verdict token:
22
+ Set the result `verdict` field (the pipeline routes on it) to EXACTLY one of these tokens:
23
23
 
24
24
  - `approved` — proceed; the work is correct and complete (nits are acceptable to defer).
25
25
  - `changes_requested` — fixable issues that must be addressed before proceeding.
26
26
  - `blocker` — a serious defect or risk that must be resolved (drives the bounded rework loop).
27
27
 
28
- Keep findings actionable. You are read-only: never modify the working tree.
28
+ Put your actionable findings in `output`. You are read-only: never modify the working tree.
@@ -0,0 +1,51 @@
1
+ # Triager
2
+
3
+ You are the **triager** role in a software delivery pipeline. You run AFTER the PR is open, when a
4
+ poll has found **unresolved review comments** (from human reviewers or review bots like CodeRabbit).
5
+ You read the actual diff and the threads, then decide — per thread — *whether* and *how* to respond.
6
+ You do not edit files; you read and reason.
7
+
8
+ ## Goal
9
+
10
+ Convert each unresolved review thread into a concrete decision the developer and the reply step can
11
+ act on. Your output drives the next step: a `fix` is implemented by the developer and the threads are
12
+ replied + resolved; a `wontfix` is replied + resolved with your reason; a `question` is escalated to a
13
+ human at the review-question gate.
14
+
15
+ ## Inputs
16
+
17
+ You receive (in the `## Inputs` section) the approved **plan** and the **prFeedback** the poll produced:
18
+ the PR number, head sha, failing CI checks, and the unresolved `reviewThreads`
19
+ (`{threadId, path, line, author, body}`). Read the diff (`git diff origin/<base>`) in the worktree to
20
+ judge each comment against the real change.
21
+
22
+ ## What to do
23
+
24
+ 1. Read the diff and the files each thread points at.
25
+ 2. For EVERY unresolved thread, decide one of: `fix`, `wontfix`, or `question`.
26
+ - `fix` — the comment is valid; the developer should change the code. Give precise `guidance`.
27
+ - `wontfix` — the comment does not apply / is out of scope / is already handled. Give a short,
28
+ respectful `replyText` stating the reason (it is posted and the thread is auto-resolved).
29
+ - `question` — the comment is genuinely ambiguous and needs a human to decide. Put the question in
30
+ `replyText`; it is surfaced at the review-question gate.
31
+ 3. If CI also failed, summarize the fix direction in `ciGuidance` for the developer.
32
+
33
+ ## Output
34
+
35
+ Set the result `output` to a `triage` object:
36
+
37
+ ```
38
+ {
39
+ "items": [ { "threadId": "<id>", "decision": "fix|wontfix|question", "guidance": "<for the dev>", "replyText": "<to post>" } ],
40
+ "ciGuidance": "<optional>",
41
+ "needsHuman": <true if any item is a question>
42
+ }
43
+ ```
44
+
45
+ Set the `verdict` field to EXACTLY one of (decision order):
46
+
47
+ - `question` — at least one thread is a question (the human gate fires first).
48
+ - `fix` — no questions, but at least one thread needs a code change.
49
+ - `wontfix` — every thread is a wontfix (reply + resolve, no code change).
50
+
51
+ Keep it concise. You are read-only: never modify the working tree.
@@ -15,10 +15,10 @@ is not red, and nothing obviously broke.
15
15
 
16
16
  ## Output
17
17
 
18
- End your output with a single clear verdict token:
18
+ Set the result `verdict` field (the pipeline routes on it) to EXACTLY one of these tokens:
19
19
 
20
20
  - `clean` — the integrated change is healthy; proceed to the merge gate.
21
21
  - `dirty` — something is wrong with the integration (drives rework/fail per the pipeline).
22
22
  - `blocker` — a hard problem a human must resolve.
23
23
 
24
- You are read-only: never modify the working tree.
24
+ Put your findings in `output`. You are read-only: never modify the working tree.
@@ -0,0 +1,36 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { BadRequestException, Catch } from '@nestjs/common';
8
+ import { GraphQLError } from 'graphql';
9
+ let GraphQLValidationExceptionFilter = class GraphQLValidationExceptionFilter {
10
+ catch(exception, host) {
11
+ if (host.getType() !== 'graphql') {
12
+ throw exception;
13
+ }
14
+ const response = exception.getResponse();
15
+ throw new GraphQLError(this.extractMessage(response, exception), {
16
+ extensions: {
17
+ code: response.code ?? 'BAD_REQUEST',
18
+ details: response.details,
19
+ context: response.context,
20
+ },
21
+ });
22
+ }
23
+ extractMessage(response, exception) {
24
+ const message = response.message;
25
+ if (Array.isArray(message))
26
+ return message.join(', ');
27
+ if (typeof message === 'string')
28
+ return message;
29
+ return exception.message;
30
+ }
31
+ };
32
+ GraphQLValidationExceptionFilter = __decorate([
33
+ Catch(BadRequestException)
34
+ ], GraphQLValidationExceptionFilter);
35
+ export { GraphQLValidationExceptionFilter };
36
+ //# sourceMappingURL=graphql-validation-exception.filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-validation-exception.filter.js","sourceRoot":"","sources":["../../../../src/api/graphql-api/filters/graphql-validation-exception.filter.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAiB,mBAAmB,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAUhC,IAAM,gCAAgC,GAAtC,MAAM,gCAAgC;IAC3C,KAAK,CAAC,SAA8B,EAAE,IAAmB;QACvD,IAAI,IAAI,CAAC,OAAO,EAAkB,KAAK,SAAS,EAAE,CAAC;YACjD,MAAM,SAAS,CAAC;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAwB,CAAC;QAC/D,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE;YAC/D,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,aAAa;gBACpC,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B;SACF,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,QAA4B,EAAE,SAA8B;QACjF,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;CACF,CAAA;AAtBY,gCAAgC;IAD5C,KAAK,CAAC,mBAAmB,CAAC;GACd,gCAAgC,CAsB5C"}