devchain-cli 0.22.0 → 0.23.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 (241) hide show
  1. package/dist/drizzle/0077_familiar_morbius.sql +6 -0
  2. package/dist/drizzle/0078_preserve_legacy_connection_ownership.sql +180 -0
  3. package/dist/drizzle/0079_premium_forgotten_one.sql +18 -0
  4. package/dist/drizzle/0080_lethal_thunderbolt_ross.sql +49 -0
  5. package/dist/drizzle/0081_early_kronos.sql +58 -0
  6. package/dist/drizzle/0082_huge_black_queen.sql +14 -0
  7. package/dist/drizzle/meta/0077_snapshot.json +6957 -0
  8. package/dist/drizzle/meta/0078_snapshot.json +6957 -0
  9. package/dist/drizzle/meta/0079_snapshot.json +7093 -0
  10. package/dist/drizzle/meta/0080_snapshot.json +7241 -0
  11. package/dist/drizzle/meta/0081_snapshot.json +7482 -0
  12. package/dist/drizzle/meta/0082_snapshot.json +7571 -0
  13. package/dist/drizzle/meta/_journal.json +42 -0
  14. package/dist/node_modules/@devchain/shared/tsconfig.tsbuildinfo +1 -1
  15. package/dist/server/common/errors/error-types.d.ts +7 -0
  16. package/dist/server/common/errors/error-types.js +7 -1
  17. package/dist/server/common/errors/error-types.js.map +1 -1
  18. package/dist/server/modules/epic-time/controllers/agent-time-buffer.controller.d.ts +8 -0
  19. package/dist/server/modules/epic-time/controllers/agent-time-buffer.controller.js +67 -0
  20. package/dist/server/modules/epic-time/controllers/agent-time-buffer.controller.js.map +1 -0
  21. package/dist/server/modules/epic-time/controllers/external-estimate-log.controller.d.ts +12 -0
  22. package/dist/server/modules/epic-time/controllers/external-estimate-log.controller.js +322 -0
  23. package/dist/server/modules/epic-time/controllers/external-estimate-log.controller.js.map +1 -0
  24. package/dist/server/modules/epic-time/epic-time.module.js +14 -4
  25. package/dist/server/modules/epic-time/epic-time.module.js.map +1 -1
  26. package/dist/server/modules/epic-time/models/epic-time-daily-allocator.d.ts +30 -0
  27. package/dist/server/modules/epic-time/models/epic-time-daily-allocator.js +125 -0
  28. package/dist/server/modules/epic-time/models/epic-time-daily-allocator.js.map +1 -0
  29. package/dist/server/modules/epic-time/models/epic-time-local-day.d.ts +9 -0
  30. package/dist/server/modules/epic-time/models/epic-time-local-day.js +164 -0
  31. package/dist/server/modules/epic-time/models/epic-time-local-day.js.map +1 -0
  32. package/dist/server/modules/epic-time/models/epic-time.models.d.ts +138 -0
  33. package/dist/server/modules/epic-time/models/epic-time.models.js +2 -0
  34. package/dist/server/modules/epic-time/models/epic-time.models.js.map +1 -1
  35. package/dist/server/modules/epic-time/services/agent-time-accounting.service.d.ts +1 -0
  36. package/dist/server/modules/epic-time/services/agent-time-accounting.service.js +31 -8
  37. package/dist/server/modules/epic-time/services/agent-time-accounting.service.js.map +1 -1
  38. package/dist/server/modules/epic-time/services/epic-estimate-logging.service.d.ts +37 -0
  39. package/dist/server/modules/epic-time/services/epic-estimate-logging.service.js +716 -0
  40. package/dist/server/modules/epic-time/services/epic-estimate-logging.service.js.map +1 -0
  41. package/dist/server/modules/epic-time/services/epic-time.service.d.ts +12 -3
  42. package/dist/server/modules/epic-time/services/epic-time.service.js +155 -69
  43. package/dist/server/modules/epic-time/services/epic-time.service.js.map +1 -1
  44. package/dist/server/modules/epic-time/services/epic-time.store.d.ts +29 -3
  45. package/dist/server/modules/epic-time/services/epic-time.store.js +524 -40
  46. package/dist/server/modules/epic-time/services/epic-time.store.js.map +1 -1
  47. package/dist/server/modules/epics/controllers/epics.controller.d.ts +10 -1
  48. package/dist/server/modules/epics/controllers/epics.controller.js +108 -2
  49. package/dist/server/modules/epics/controllers/epics.controller.js.map +1 -1
  50. package/dist/server/modules/epics/epics.module.js +8 -2
  51. package/dist/server/modules/epics/epics.module.js.map +1 -1
  52. package/dist/server/modules/epics/models/epic-relations.models.d.ts +34 -0
  53. package/dist/server/modules/epics/models/epic-relations.models.js +16 -0
  54. package/dist/server/modules/epics/models/epic-relations.models.js.map +1 -0
  55. package/dist/server/modules/epics/services/epic-relation-target-resolver.d.ts +8 -0
  56. package/dist/server/modules/epics/services/epic-relation-target-resolver.js +37 -0
  57. package/dist/server/modules/epics/services/epic-relation-target-resolver.js.map +1 -0
  58. package/dist/server/modules/epics/services/epic-relations.service.d.ts +52 -0
  59. package/dist/server/modules/epics/services/epic-relations.service.js +135 -0
  60. package/dist/server/modules/epics/services/epic-relations.service.js.map +1 -0
  61. package/dist/server/modules/epics/services/epics.service.d.ts +9 -2
  62. package/dist/server/modules/epics/services/epics.service.js +115 -11
  63. package/dist/server/modules/epics/services/epics.service.js.map +1 -1
  64. package/dist/server/modules/events/catalog/broadcast-registry.js +16 -0
  65. package/dist/server/modules/events/catalog/broadcast-registry.js.map +1 -1
  66. package/dist/server/modules/events/catalog/epic.relations.invalidated.d.ts +12 -0
  67. package/dist/server/modules/events/catalog/epic.relations.invalidated.js +13 -0
  68. package/dist/server/modules/events/catalog/epic.relations.invalidated.js.map +1 -0
  69. package/dist/server/modules/events/catalog/epic.time.scope.invalidated.d.ts +12 -0
  70. package/dist/server/modules/events/catalog/epic.time.scope.invalidated.js +13 -0
  71. package/dist/server/modules/events/catalog/epic.time.scope.invalidated.js.map +1 -0
  72. package/dist/server/modules/events/catalog/index.d.ts +27 -4
  73. package/dist/server/modules/events/catalog/index.js +6 -0
  74. package/dist/server/modules/events/catalog/index.js.map +1 -1
  75. package/dist/server/modules/events/catalog/integration.connection.created.d.ts +4 -1
  76. package/dist/server/modules/events/catalog/integration.connection.created.js +5 -2
  77. package/dist/server/modules/events/catalog/integration.connection.created.js.map +1 -1
  78. package/dist/server/modules/events/catalog/integration.connection.deleted.d.ts +4 -1
  79. package/dist/server/modules/events/catalog/integration.connection.deleted.js +5 -2
  80. package/dist/server/modules/events/catalog/integration.connection.deleted.js.map +1 -1
  81. package/dist/server/modules/events/catalog/integration.connection.legacy.d.ts +85 -0
  82. package/dist/server/modules/events/catalog/integration.connection.legacy.js +41 -0
  83. package/dist/server/modules/events/catalog/integration.connection.legacy.js.map +1 -0
  84. package/dist/server/modules/events/catalog/integration.connection.updated.d.ts +4 -1
  85. package/dist/server/modules/events/catalog/integration.connection.updated.js +5 -2
  86. package/dist/server/modules/events/catalog/integration.connection.updated.js.map +1 -1
  87. package/dist/server/modules/events/services/committed-event-replay.d.ts +10 -0
  88. package/dist/server/modules/events/services/committed-event-replay.js +30 -0
  89. package/dist/server/modules/events/services/committed-event-replay.js.map +1 -0
  90. package/dist/server/modules/events/services/committed-event.store.d.ts +1 -0
  91. package/dist/server/modules/events/services/committed-event.store.js +12 -7
  92. package/dist/server/modules/events/services/committed-event.store.js.map +1 -1
  93. package/dist/server/modules/events/services/durable-event-registry.service.d.ts +9 -2
  94. package/dist/server/modules/events/services/durable-event-registry.service.js.map +1 -1
  95. package/dist/server/modules/external-integrations/adapters/clickup-external-task.provider.d.ts +7 -0
  96. package/dist/server/modules/external-integrations/adapters/clickup-external-task.provider.js +158 -50
  97. package/dist/server/modules/external-integrations/adapters/clickup-external-task.provider.js.map +1 -1
  98. package/dist/server/modules/external-integrations/adapters/jira-external-task.provider.d.ts +4 -0
  99. package/dist/server/modules/external-integrations/adapters/jira-external-task.provider.js +73 -33
  100. package/dist/server/modules/external-integrations/adapters/jira-external-task.provider.js.map +1 -1
  101. package/dist/server/modules/external-integrations/connections/integration-connections.controller.d.ts +6 -3
  102. package/dist/server/modules/external-integrations/connections/integration-connections.controller.js +67 -12
  103. package/dist/server/modules/external-integrations/connections/integration-connections.controller.js.map +1 -1
  104. package/dist/server/modules/external-integrations/connections/integration-connections.service.d.ts +35 -3
  105. package/dist/server/modules/external-integrations/connections/integration-connections.service.js +178 -17
  106. package/dist/server/modules/external-integrations/connections/integration-connections.service.js.map +1 -1
  107. package/dist/server/modules/external-integrations/connections/managed-subtask-sync.controller.d.ts +6 -3
  108. package/dist/server/modules/external-integrations/connections/managed-subtask-sync.controller.js +51 -11
  109. package/dist/server/modules/external-integrations/connections/managed-subtask-sync.controller.js.map +1 -1
  110. package/dist/server/modules/external-integrations/external-integrations.module.js +6 -1
  111. package/dist/server/modules/external-integrations/external-integrations.module.js.map +1 -1
  112. package/dist/server/modules/external-integrations/models/external-edit-session.models.d.ts +1 -0
  113. package/dist/server/modules/external-integrations/models/external-provider.models.d.ts +6 -2
  114. package/dist/server/modules/external-integrations/models/external-provider.models.js +2 -3
  115. package/dist/server/modules/external-integrations/models/external-provider.models.js.map +1 -1
  116. package/dist/server/modules/external-integrations/models/external-time-mutation.models.d.ts +33 -2
  117. package/dist/server/modules/external-integrations/models/external-time-mutation.models.js +14 -0
  118. package/dist/server/modules/external-integrations/models/external-time-mutation.models.js.map +1 -1
  119. package/dist/server/modules/external-integrations/my-work/external-edit-session.service.d.ts +10 -9
  120. package/dist/server/modules/external-integrations/my-work/external-edit-session.service.js +81 -46
  121. package/dist/server/modules/external-integrations/my-work/external-edit-session.service.js.map +1 -1
  122. package/dist/server/modules/external-integrations/my-work/external-my-work.controller.d.ts +22 -20
  123. package/dist/server/modules/external-integrations/my-work/external-my-work.controller.js +136 -64
  124. package/dist/server/modules/external-integrations/my-work/external-my-work.controller.js.map +1 -1
  125. package/dist/server/modules/external-integrations/my-work/external-my-work.openapi.d.ts +7 -0
  126. package/dist/server/modules/external-integrations/my-work/external-my-work.openapi.js +289 -4
  127. package/dist/server/modules/external-integrations/my-work/external-my-work.openapi.js.map +1 -1
  128. package/dist/server/modules/external-integrations/my-work/external-my-work.service.d.ts +12 -7
  129. package/dist/server/modules/external-integrations/my-work/external-my-work.service.js +114 -54
  130. package/dist/server/modules/external-integrations/my-work/external-my-work.service.js.map +1 -1
  131. package/dist/server/modules/external-integrations/my-work/external-time-mutation.service.d.ts +19 -6
  132. package/dist/server/modules/external-integrations/my-work/external-time-mutation.service.js +346 -46
  133. package/dist/server/modules/external-integrations/my-work/external-time-mutation.service.js.map +1 -1
  134. package/dist/server/modules/external-integrations/sessions/external-edit-session.store.d.ts +2 -1
  135. package/dist/server/modules/external-integrations/sessions/external-edit-session.store.js +3 -2
  136. package/dist/server/modules/external-integrations/sessions/external-edit-session.store.js.map +1 -1
  137. package/dist/server/modules/external-integrations/sessions/external-time-mutation.store.d.ts +6 -1
  138. package/dist/server/modules/external-integrations/sessions/external-time-mutation.store.js +19 -0
  139. package/dist/server/modules/external-integrations/sessions/external-time-mutation.store.js.map +1 -1
  140. package/dist/server/modules/external-integrations/sessions/provider-operation-gate.d.ts +15 -2
  141. package/dist/server/modules/external-integrations/sessions/provider-operation-gate.js +33 -6
  142. package/dist/server/modules/external-integrations/sessions/provider-operation-gate.js.map +1 -1
  143. package/dist/server/modules/external-integrations/subscribers/external-subtask-sync.subscriber.d.ts +13 -6
  144. package/dist/server/modules/external-integrations/subscribers/external-subtask-sync.subscriber.js +212 -75
  145. package/dist/server/modules/external-integrations/subscribers/external-subtask-sync.subscriber.js.map +1 -1
  146. package/dist/server/modules/external-integrations/subscribers/managed-subtask-content.d.ts +13 -4
  147. package/dist/server/modules/external-integrations/subscribers/managed-subtask-content.js +98 -0
  148. package/dist/server/modules/external-integrations/subscribers/managed-subtask-content.js.map +1 -1
  149. package/dist/server/modules/external-integrations/subscribers/managed-subtask-sync-health.service.d.ts +10 -4
  150. package/dist/server/modules/external-integrations/subscribers/managed-subtask-sync-health.service.js +57 -18
  151. package/dist/server/modules/external-integrations/subscribers/managed-subtask-sync-health.service.js.map +1 -1
  152. package/dist/server/modules/mcp/dtos/mcp.dto.d.ts +139 -0
  153. package/dist/server/modules/mcp/dtos/mcp.dto.js +41 -1
  154. package/dist/server/modules/mcp/dtos/mcp.dto.js.map +1 -1
  155. package/dist/server/modules/mcp/services/handlers/epic-context.d.ts +2 -0
  156. package/dist/server/modules/mcp/services/handlers/epic-tools.d.ts +4 -0
  157. package/dist/server/modules/mcp/services/handlers/epic-tools.js +275 -0
  158. package/dist/server/modules/mcp/services/handlers/epic-tools.js.map +1 -1
  159. package/dist/server/modules/mcp/services/mcp-tool-binding.registry.d.ts +2 -1
  160. package/dist/server/modules/mcp/services/mcp-tool-binding.registry.js +13 -8
  161. package/dist/server/modules/mcp/services/mcp-tool-binding.registry.js.map +1 -1
  162. package/dist/server/modules/mcp/services/testing/mcp-tool-binding-registry.fixture.d.ts +1 -1
  163. package/dist/server/modules/mcp/services/testing/mcp-tool-binding-registry.fixture.js +1 -1
  164. package/dist/server/modules/mcp/services/testing/mcp-tool-binding-registry.fixture.js.map +1 -1
  165. package/dist/server/modules/mcp/tool-descriptors/binding-types.d.ts +2 -0
  166. package/dist/server/modules/mcp/tool-descriptors/binding-types.js.map +1 -1
  167. package/dist/server/modules/mcp/tool-descriptors/epic.bindings.js +6 -0
  168. package/dist/server/modules/mcp/tool-descriptors/epic.bindings.js.map +1 -1
  169. package/dist/server/modules/mcp/tool-descriptors/epic.metadata.js +132 -0
  170. package/dist/server/modules/mcp/tool-descriptors/epic.metadata.js.map +1 -1
  171. package/dist/server/modules/projects/controllers/projects.controller.js +1 -4
  172. package/dist/server/modules/projects/controllers/projects.controller.js.map +1 -1
  173. package/dist/server/modules/projects/projects.module.js +2 -0
  174. package/dist/server/modules/projects/projects.module.js.map +1 -1
  175. package/dist/server/modules/projects/services/projects.service.d.ts +4 -1
  176. package/dist/server/modules/projects/services/projects.service.js +23 -2
  177. package/dist/server/modules/projects/services/projects.service.js.map +1 -1
  178. package/dist/server/modules/providers/adapters/claude.adapter.d.ts +4 -2
  179. package/dist/server/modules/providers/adapters/claude.adapter.js +31 -0
  180. package/dist/server/modules/providers/adapters/claude.adapter.js.map +1 -1
  181. package/dist/server/modules/providers/services/provider-mcp-ensure.service.d.ts +7 -0
  182. package/dist/server/modules/providers/services/provider-mcp-ensure.service.js +69 -4
  183. package/dist/server/modules/providers/services/provider-mcp-ensure.service.js.map +1 -1
  184. package/dist/server/modules/session-reader/data/pricing.json +452 -56
  185. package/dist/server/modules/session-reader/services/session-reader.service.d.ts +2 -0
  186. package/dist/server/modules/session-reader/services/session-reader.service.js +85 -9
  187. package/dist/server/modules/session-reader/services/session-reader.service.js.map +1 -1
  188. package/dist/server/modules/session-reader/services/transcript-path-validator.service.js +8 -2
  189. package/dist/server/modules/session-reader/services/transcript-path-validator.service.js.map +1 -1
  190. package/dist/server/modules/session-reader/services/transcript-watcher.service.js +44 -17
  191. package/dist/server/modules/session-reader/services/transcript-watcher.service.js.map +1 -1
  192. package/dist/server/modules/sessions/services/session-runtime/__test-utils__/pipeline-harness.d.ts +1 -0
  193. package/dist/server/modules/sessions/services/session-runtime/__test-utils__/pipeline-harness.js +1 -0
  194. package/dist/server/modules/sessions/services/session-runtime/__test-utils__/pipeline-harness.js.map +1 -1
  195. package/dist/server/modules/sessions/services/session-runtime/session-launch-pipeline.service.js +11 -1
  196. package/dist/server/modules/sessions/services/session-runtime/session-launch-pipeline.service.js.map +1 -1
  197. package/dist/server/modules/sessions/utils/claude-config.d.ts +4 -1
  198. package/dist/server/modules/sessions/utils/claude-config.js +265 -60
  199. package/dist/server/modules/sessions/utils/claude-config.js.map +1 -1
  200. package/dist/server/modules/storage/db/schema.d.ts +1109 -98
  201. package/dist/server/modules/storage/db/schema.js +141 -3
  202. package/dist/server/modules/storage/db/schema.js.map +1 -1
  203. package/dist/server/modules/storage/db/sqlite-json.d.ts +1 -0
  204. package/dist/server/modules/storage/db/sqlite-json.js +4 -0
  205. package/dist/server/modules/storage/db/sqlite-json.js.map +1 -1
  206. package/dist/server/modules/storage/interfaces/storage.interface.d.ts +58 -10
  207. package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
  208. package/dist/server/modules/storage/local/delegates/epic.delegate.d.ts +30 -5
  209. package/dist/server/modules/storage/local/delegates/epic.delegate.js +718 -14
  210. package/dist/server/modules/storage/local/delegates/epic.delegate.js.map +1 -1
  211. package/dist/server/modules/storage/local/delegates/external-estimate-log.delegate.d.ts +52 -0
  212. package/dist/server/modules/storage/local/delegates/external-estimate-log.delegate.js +659 -0
  213. package/dist/server/modules/storage/local/delegates/external-estimate-log.delegate.js.map +1 -0
  214. package/dist/server/modules/storage/local/delegates/external-managed-subtask.delegate.d.ts +2 -1
  215. package/dist/server/modules/storage/local/delegates/external-managed-subtask.delegate.js +17 -4
  216. package/dist/server/modules/storage/local/delegates/external-managed-subtask.delegate.js.map +1 -1
  217. package/dist/server/modules/storage/local/delegates/integration.delegate.d.ts +23 -8
  218. package/dist/server/modules/storage/local/delegates/integration.delegate.js +238 -52
  219. package/dist/server/modules/storage/local/delegates/integration.delegate.js.map +1 -1
  220. package/dist/server/modules/storage/local/delegates/project.delegate.d.ts +2 -0
  221. package/dist/server/modules/storage/local/delegates/project.delegate.js +180 -130
  222. package/dist/server/modules/storage/local/delegates/project.delegate.js.map +1 -1
  223. package/dist/server/modules/storage/local/local-storage.service.d.ts +45 -10
  224. package/dist/server/modules/storage/local/local-storage.service.js +99 -15
  225. package/dist/server/modules/storage/local/local-storage.service.js.map +1 -1
  226. package/dist/server/modules/storage/models/domain.models.d.ts +170 -0
  227. package/dist/server/modules/storage/models/domain.models.js +9 -0
  228. package/dist/server/modules/storage/models/domain.models.js.map +1 -1
  229. package/dist/server/templates/teams-dev.json +311 -301
  230. package/dist/server/tsconfig.tsbuildinfo +1 -1
  231. package/dist/server/ui/assets/{ExternalRichEditor-DMtnZIMZ.js → ExternalRichEditor-BG9SopK8.js} +1 -1
  232. package/dist/server/ui/assets/{ReviewDetailPage-BmyiM5IR.js → ReviewDetailPage-DNo7Qx3m.js} +1 -1
  233. package/dist/server/ui/assets/{ReviewsPage-CQ87BMwT.js → ReviewsPage-Cay-IObR.js} +1 -1
  234. package/dist/server/ui/assets/index-C1Fdqua-.js +1197 -0
  235. package/dist/server/ui/assets/index-CV8ydm7w.css +32 -0
  236. package/dist/server/ui/assets/{useReviewSubscription-DjbEUzt4.js → useReviewSubscription-sAAfh4k9.js} +1 -1
  237. package/dist/server/ui/index.html +2 -2
  238. package/dist/templates/teams-dev.json +311 -301
  239. package/package.json +19 -2
  240. package/dist/server/ui/assets/index-BX6Yze-A.js +0 -1177
  241. package/dist/server/ui/assets/index-qoQEv_u4.css +0 -32
@@ -0,0 +1,6 @@
1
+ DROP INDEX `integration_connections_provider_unique`;--> statement-breakpoint
2
+ ALTER TABLE `integration_connections` ADD `project_id` text REFERENCES projects(id) ON DELETE CASCADE;--> statement-breakpoint
3
+ ALTER TABLE `integration_connections` ADD `legacy_source_connection_id` text;--> statement-breakpoint
4
+ CREATE UNIQUE INDEX `integration_connections_legacy_provider_unique` ON `integration_connections` (`provider`) WHERE "integration_connections"."project_id" IS NULL;--> statement-breakpoint
5
+ CREATE INDEX `integration_connections_project_id_idx` ON `integration_connections` (`project_id`);--> statement-breakpoint
6
+ CREATE UNIQUE INDEX `integration_connections_project_provider_unique` ON `integration_connections` (`project_id`,`provider`);
@@ -0,0 +1,180 @@
1
+ CREATE TABLE `__integration_connection_project_evidence` (
2
+ `source_connection_id` text NOT NULL,
3
+ `project_id` text NOT NULL,
4
+ PRIMARY KEY (`source_connection_id`, `project_id`)
5
+ );--> statement-breakpoint
6
+ INSERT OR IGNORE INTO `__integration_connection_project_evidence`
7
+ (`source_connection_id`, `project_id`)
8
+ SELECT connection.`id`, epic.`project_id`
9
+ FROM `integration_connections` connection
10
+ INNER JOIN `external_task_links` task_link
11
+ ON task_link.`connection_id` = connection.`id`
12
+ AND task_link.`provider` = connection.`provider`
13
+ INNER JOIN `epics` epic ON epic.`id` = task_link.`epic_id`
14
+ WHERE connection.`project_id` IS NULL;--> statement-breakpoint
15
+ INSERT OR IGNORE INTO `__integration_connection_project_evidence`
16
+ (`source_connection_id`, `project_id`)
17
+ SELECT connection.`id`, child_epic.`project_id`
18
+ FROM `integration_connections` connection
19
+ INNER JOIN `external_managed_subtask_links` managed_link
20
+ ON managed_link.`connection_id_snapshot` = connection.`id`
21
+ AND managed_link.`provider` = connection.`provider`
22
+ INNER JOIN `epics` child_epic ON child_epic.`id` = managed_link.`epic_id`
23
+ WHERE connection.`project_id` IS NULL;--> statement-breakpoint
24
+ INSERT OR IGNORE INTO `__integration_connection_project_evidence`
25
+ (`source_connection_id`, `project_id`)
26
+ SELECT connection.`id`, parent_epic.`project_id`
27
+ FROM `integration_connections` connection
28
+ INNER JOIN `external_managed_subtask_links` managed_link
29
+ ON managed_link.`connection_id_snapshot` = connection.`id`
30
+ AND managed_link.`provider` = connection.`provider`
31
+ INNER JOIN `external_task_links` parent_source
32
+ ON parent_source.`id` = managed_link.`parent_source_link_id_snapshot`
33
+ AND parent_source.`provider` = managed_link.`provider`
34
+ INNER JOIN `epics` parent_epic ON parent_epic.`id` = parent_source.`epic_id`
35
+ WHERE connection.`project_id` IS NULL
36
+ AND NOT EXISTS (
37
+ SELECT 1 FROM `epics` child_epic WHERE child_epic.`id` = managed_link.`epic_id`
38
+ );--> statement-breakpoint
39
+ INSERT OR IGNORE INTO `__integration_connection_project_evidence`
40
+ (`source_connection_id`, `project_id`)
41
+ SELECT connection.`id`, project.`id`
42
+ FROM `integration_connections` connection
43
+ INNER JOIN `projects` project ON project.`is_template` = 0
44
+ WHERE connection.`project_id` IS NULL
45
+ AND NOT EXISTS (
46
+ SELECT 1
47
+ FROM `__integration_connection_project_evidence` evidence
48
+ WHERE evidence.`source_connection_id` = connection.`id`
49
+ )
50
+ AND (SELECT COUNT(*) FROM `projects` WHERE `is_template` = 0) = 1;--> statement-breakpoint
51
+ CREATE TABLE `__integration_connection_project_map` (
52
+ `source_connection_id` text NOT NULL,
53
+ `project_id` text NOT NULL,
54
+ `target_connection_id` text PRIMARY KEY NOT NULL,
55
+ UNIQUE (`source_connection_id`, `project_id`)
56
+ );--> statement-breakpoint
57
+ INSERT INTO `__integration_connection_project_map`
58
+ (`source_connection_id`, `project_id`, `target_connection_id`)
59
+ WITH RECURSIVE
60
+ ordered_evidence AS (
61
+ SELECT evidence.`source_connection_id`, evidence.`project_id`,
62
+ row_number() OVER (
63
+ ORDER BY evidence.`source_connection_id`, evidence.`project_id`
64
+ ) AS `ordinal`
65
+ FROM `__integration_connection_project_evidence` evidence
66
+ ),
67
+ candidate_numbers(`value`) AS (
68
+ SELECT 1
69
+ UNION ALL
70
+ SELECT `value` + 1
71
+ FROM candidate_numbers
72
+ WHERE `value` <
73
+ (SELECT COUNT(*) FROM `__integration_connection_project_evidence`) +
74
+ (SELECT COUNT(*) FROM `integration_connections`)
75
+ ),
76
+ available_ids AS (
77
+ SELECT
78
+ 'dc000000-0000-4000-8000-' || printf('%012x', candidate_numbers.`value`) AS `id`,
79
+ row_number() OVER (ORDER BY candidate_numbers.`value`) AS `ordinal`
80
+ FROM candidate_numbers
81
+ WHERE NOT EXISTS (
82
+ SELECT 1
83
+ FROM `integration_connections` existing
84
+ WHERE existing.`id` =
85
+ 'dc000000-0000-4000-8000-' || printf('%012x', candidate_numbers.`value`)
86
+ )
87
+ )
88
+ SELECT ordered_evidence.`source_connection_id`, ordered_evidence.`project_id`, available_ids.`id`
89
+ FROM ordered_evidence
90
+ INNER JOIN available_ids ON available_ids.`ordinal` = ordered_evidence.`ordinal`
91
+ ORDER BY ordered_evidence.`ordinal`;--> statement-breakpoint
92
+ INSERT INTO `integration_connections` (
93
+ `id`, `project_id`, `provider`, `legacy_source_connection_id`,
94
+ `credential_ciphertext`, `generation`, `subtask_sync_enabled`,
95
+ `sync_setting_revision`, `created_at`, `updated_at`
96
+ )
97
+ SELECT project_map.`target_connection_id`, project_map.`project_id`, source.`provider`, source.`id`,
98
+ source.`credential_ciphertext`, source.`generation`, source.`subtask_sync_enabled`,
99
+ source.`sync_setting_revision`, source.`created_at`, source.`updated_at`
100
+ FROM `__integration_connection_project_map` project_map
101
+ INNER JOIN `integration_connections` source
102
+ ON source.`id` = project_map.`source_connection_id`
103
+ ORDER BY project_map.`source_connection_id`, project_map.`project_id`;--> statement-breakpoint
104
+ UPDATE `external_task_links`
105
+ SET `connection_id` = (
106
+ SELECT project_map.`target_connection_id`
107
+ FROM `__integration_connection_project_map` project_map
108
+ INNER JOIN `epics` epic ON epic.`id` = `external_task_links`.`epic_id`
109
+ INNER JOIN `integration_connections` target
110
+ ON target.`id` = project_map.`target_connection_id`
111
+ AND target.`provider` = `external_task_links`.`provider`
112
+ WHERE project_map.`source_connection_id` = `external_task_links`.`connection_id`
113
+ AND project_map.`project_id` = epic.`project_id`
114
+ )
115
+ WHERE EXISTS (
116
+ SELECT 1
117
+ FROM `__integration_connection_project_map` project_map
118
+ INNER JOIN `epics` epic ON epic.`id` = `external_task_links`.`epic_id`
119
+ INNER JOIN `integration_connections` target
120
+ ON target.`id` = project_map.`target_connection_id`
121
+ AND target.`provider` = `external_task_links`.`provider`
122
+ WHERE project_map.`source_connection_id` = `external_task_links`.`connection_id`
123
+ AND project_map.`project_id` = epic.`project_id`
124
+ );--> statement-breakpoint
125
+ UPDATE `external_managed_subtask_links`
126
+ SET `connection_id_snapshot` = (
127
+ SELECT project_map.`target_connection_id`
128
+ FROM `__integration_connection_project_map` project_map
129
+ INNER JOIN `integration_connections` target
130
+ ON target.`id` = project_map.`target_connection_id`
131
+ AND target.`provider` = `external_managed_subtask_links`.`provider`
132
+ WHERE project_map.`source_connection_id` = `external_managed_subtask_links`.`connection_id_snapshot`
133
+ AND project_map.`project_id` = COALESCE(
134
+ (SELECT child_epic.`project_id`
135
+ FROM `epics` child_epic
136
+ WHERE child_epic.`id` = `external_managed_subtask_links`.`epic_id`),
137
+ (SELECT parent_epic.`project_id`
138
+ FROM `external_task_links` parent_source
139
+ INNER JOIN `epics` parent_epic ON parent_epic.`id` = parent_source.`epic_id`
140
+ WHERE parent_source.`id` = `external_managed_subtask_links`.`parent_source_link_id_snapshot`
141
+ AND parent_source.`provider` = `external_managed_subtask_links`.`provider`)
142
+ )
143
+ )
144
+ WHERE EXISTS (
145
+ SELECT 1
146
+ FROM `__integration_connection_project_map` project_map
147
+ INNER JOIN `integration_connections` target
148
+ ON target.`id` = project_map.`target_connection_id`
149
+ AND target.`provider` = `external_managed_subtask_links`.`provider`
150
+ WHERE project_map.`source_connection_id` = `external_managed_subtask_links`.`connection_id_snapshot`
151
+ AND project_map.`project_id` = COALESCE(
152
+ (SELECT child_epic.`project_id`
153
+ FROM `epics` child_epic
154
+ WHERE child_epic.`id` = `external_managed_subtask_links`.`epic_id`),
155
+ (SELECT parent_epic.`project_id`
156
+ FROM `external_task_links` parent_source
157
+ INNER JOIN `epics` parent_epic ON parent_epic.`id` = parent_source.`epic_id`
158
+ WHERE parent_source.`id` = `external_managed_subtask_links`.`parent_source_link_id_snapshot`
159
+ AND parent_source.`provider` = `external_managed_subtask_links`.`provider`)
160
+ )
161
+ );--> statement-breakpoint
162
+ DELETE FROM `integration_connections`
163
+ WHERE `project_id` IS NULL
164
+ AND EXISTS (
165
+ SELECT 1
166
+ FROM `__integration_connection_project_map` project_map
167
+ WHERE project_map.`source_connection_id` = `integration_connections`.`id`
168
+ )
169
+ AND NOT EXISTS (
170
+ SELECT 1
171
+ FROM `external_task_links` task_link
172
+ WHERE task_link.`connection_id` = `integration_connections`.`id`
173
+ )
174
+ AND NOT EXISTS (
175
+ SELECT 1
176
+ FROM `external_managed_subtask_links` managed_link
177
+ WHERE managed_link.`connection_id_snapshot` = `integration_connections`.`id`
178
+ );--> statement-breakpoint
179
+ DROP TABLE `__integration_connection_project_map`;--> statement-breakpoint
180
+ DROP TABLE `__integration_connection_project_evidence`;
@@ -0,0 +1,18 @@
1
+ CREATE TABLE `epic_relations` (
2
+ `id` text PRIMARY KEY NOT NULL,
3
+ `left_epic_id` text NOT NULL,
4
+ `right_epic_id` text NOT NULL,
5
+ `type` text NOT NULL,
6
+ `direction` text NOT NULL,
7
+ `created_by` text,
8
+ `created_by_agent_id` text,
9
+ `created_at` text NOT NULL,
10
+ `updated_at` text NOT NULL,
11
+ FOREIGN KEY (`left_epic_id`) REFERENCES `epics`(`id`) ON UPDATE no action ON DELETE cascade,
12
+ FOREIGN KEY (`right_epic_id`) REFERENCES `epics`(`id`) ON UPDATE no action ON DELETE cascade,
13
+ FOREIGN KEY (`created_by_agent_id`) REFERENCES `agents`(`id`) ON UPDATE no action ON DELETE set null
14
+ );
15
+ --> statement-breakpoint
16
+ CREATE UNIQUE INDEX `epic_relations_pair_idx` ON `epic_relations` (`left_epic_id`,`right_epic_id`);--> statement-breakpoint
17
+ CREATE INDEX `epic_relations_right_epic_id_idx` ON `epic_relations` (`right_epic_id`);--> statement-breakpoint
18
+ CREATE INDEX `epics_project_id_idx` ON `epics` (`project_id`);
@@ -0,0 +1,49 @@
1
+ CREATE TABLE `external_estimate_log_states` (
2
+ `provider` text NOT NULL,
3
+ `remote_scope_key` text NOT NULL,
4
+ `remote_task_id` text NOT NULL,
5
+ `logged_minutes` integer DEFAULT 0 NOT NULL,
6
+ `revision` integer DEFAULT 1 NOT NULL,
7
+ `pending_operation_id` text,
8
+ `pending_delta_minutes` integer,
9
+ `pending_estimate_total_minutes` integer,
10
+ `pending_started_at` text,
11
+ `pending_connection_id` text,
12
+ `pending_connection_generation` integer,
13
+ `pending_phase` text,
14
+ `pending_resolution` text,
15
+ `created_at` text NOT NULL,
16
+ `updated_at` text NOT NULL,
17
+ CONSTRAINT "external_estimate_log_states_logged_minutes_check" CHECK("external_estimate_log_states"."logged_minutes" >= 0),
18
+ CONSTRAINT "external_estimate_log_states_revision_check" CHECK("external_estimate_log_states"."revision" >= 1),
19
+ CONSTRAINT "external_estimate_log_states_pending_complete_check" CHECK((
20
+ "external_estimate_log_states"."pending_operation_id" IS NULL
21
+ AND "external_estimate_log_states"."pending_delta_minutes" IS NULL
22
+ AND "external_estimate_log_states"."pending_estimate_total_minutes" IS NULL
23
+ AND "external_estimate_log_states"."pending_started_at" IS NULL
24
+ AND "external_estimate_log_states"."pending_connection_id" IS NULL
25
+ AND "external_estimate_log_states"."pending_connection_generation" IS NULL
26
+ AND "external_estimate_log_states"."pending_phase" IS NULL
27
+ AND "external_estimate_log_states"."pending_resolution" IS NULL
28
+ ) OR (
29
+ "external_estimate_log_states"."pending_operation_id" IS NOT NULL
30
+ AND "external_estimate_log_states"."pending_delta_minutes" IS NOT NULL
31
+ AND "external_estimate_log_states"."pending_delta_minutes" > 0
32
+ AND "external_estimate_log_states"."pending_delta_minutes" * 60000 <= 604800000
33
+ AND "external_estimate_log_states"."pending_estimate_total_minutes" IS NOT NULL
34
+ AND "external_estimate_log_states"."pending_estimate_total_minutes" >= 0
35
+ AND "external_estimate_log_states"."pending_started_at" IS NOT NULL
36
+ AND "external_estimate_log_states"."pending_connection_id" IS NOT NULL
37
+ AND "external_estimate_log_states"."pending_connection_generation" IS NOT NULL
38
+ AND "external_estimate_log_states"."pending_connection_generation" >= 1
39
+ AND "external_estimate_log_states"."pending_phase" IS NOT NULL
40
+ AND "external_estimate_log_states"."pending_phase" IN ('prepared', 'outcome_unknown')
41
+ AND (
42
+ "external_estimate_log_states"."pending_resolution" IS NULL
43
+ OR "external_estimate_log_states"."pending_resolution" IN ('logged', 'not_logged')
44
+ )
45
+ ))
46
+ );
47
+ --> statement-breakpoint
48
+ CREATE UNIQUE INDEX `external_estimate_log_states_remote_identity_idx` ON `external_estimate_log_states` (`provider`,`remote_scope_key`,`remote_task_id`);--> statement-breakpoint
49
+ CREATE UNIQUE INDEX `external_estimate_log_states_pending_operation_idx` ON `external_estimate_log_states` (`pending_operation_id`) WHERE "external_estimate_log_states"."pending_operation_id" IS NOT NULL;
@@ -0,0 +1,58 @@
1
+ CREATE TABLE `epic_time_team_batch_event_barriers` (
2
+ `team_batch_id` text NOT NULL,
3
+ `committed_event_id` text NOT NULL,
4
+ `created_at` text NOT NULL,
5
+ PRIMARY KEY(`team_batch_id`, `committed_event_id`),
6
+ FOREIGN KEY (`team_batch_id`) REFERENCES `epic_time_team_batches`(`id`) ON UPDATE no action ON DELETE cascade,
7
+ FOREIGN KEY (`committed_event_id`) REFERENCES `events`(`id`) ON UPDATE no action ON DELETE cascade
8
+ );
9
+ --> statement-breakpoint
10
+ CREATE INDEX `epic_time_team_barriers_event_idx` ON `epic_time_team_batch_event_barriers` (`committed_event_id`);--> statement-breakpoint
11
+ CREATE TABLE `epic_time_team_batches` (
12
+ `id` text PRIMARY KEY NOT NULL,
13
+ `project_id` text NOT NULL,
14
+ `team_id_snapshot` text NOT NULL,
15
+ `team_name_snapshot` text NOT NULL,
16
+ `lead_agent_id_snapshot` text NOT NULL,
17
+ `lead_agent_name_snapshot` text NOT NULL,
18
+ `started_at` text NOT NULL,
19
+ `sealed_at` text,
20
+ `created_at` text NOT NULL,
21
+ `updated_at` text NOT NULL,
22
+ FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON UPDATE no action ON DELETE cascade
23
+ );
24
+ --> statement-breakpoint
25
+ CREATE UNIQUE INDEX `epic_time_team_batches_open_unique` ON `epic_time_team_batches` (`project_id`,`team_id_snapshot`) WHERE "epic_time_team_batches"."sealed_at" IS NULL;--> statement-breakpoint
26
+ CREATE INDEX `epic_time_team_batches_project_sealed_idx` ON `epic_time_team_batches` (`project_id`,`sealed_at`,`started_at`);--> statement-breakpoint
27
+ PRAGMA foreign_keys=OFF;--> statement-breakpoint
28
+ CREATE TABLE `__new_epic_time_segments` (
29
+ `id` text PRIMARY KEY NOT NULL,
30
+ `project_id` text NOT NULL,
31
+ `epic_id` text,
32
+ `team_batch_id` text,
33
+ `attribution_source` text DEFAULT 'direct' NOT NULL,
34
+ `team_id_snapshot` text,
35
+ `team_name_snapshot` text,
36
+ `session_id_snapshot` text NOT NULL,
37
+ `agent_id_snapshot` text NOT NULL,
38
+ `agent_name_snapshot` text NOT NULL,
39
+ `started_at` text NOT NULL,
40
+ `last_activity_at` text NOT NULL,
41
+ `closed_at` text,
42
+ `duration_ms` integer DEFAULT 0 NOT NULL,
43
+ `created_at` text NOT NULL,
44
+ `updated_at` text NOT NULL,
45
+ FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON UPDATE no action ON DELETE cascade,
46
+ FOREIGN KEY (`epic_id`) REFERENCES `epics`(`id`) ON UPDATE no action ON DELETE cascade,
47
+ FOREIGN KEY (`team_batch_id`) REFERENCES `epic_time_team_batches`(`id`) ON UPDATE no action ON DELETE set null,
48
+ CONSTRAINT "epic_time_segments_attribution_source_check" CHECK("__new_epic_time_segments"."attribution_source" IN ('direct', 'team'))
49
+ );
50
+ --> statement-breakpoint
51
+ INSERT INTO `__new_epic_time_segments`("id", "project_id", "epic_id", "team_batch_id", "attribution_source", "team_id_snapshot", "team_name_snapshot", "session_id_snapshot", "agent_id_snapshot", "agent_name_snapshot", "started_at", "last_activity_at", "closed_at", "duration_ms", "created_at", "updated_at") SELECT "id", "project_id", "epic_id", NULL, 'direct', NULL, NULL, "session_id_snapshot", "agent_id_snapshot", "agent_name_snapshot", "started_at", "last_activity_at", "closed_at", "duration_ms", "created_at", "updated_at" FROM `epic_time_segments`;--> statement-breakpoint
52
+ DROP TABLE `epic_time_segments`;--> statement-breakpoint
53
+ ALTER TABLE `__new_epic_time_segments` RENAME TO `epic_time_segments`;--> statement-breakpoint
54
+ PRAGMA foreign_keys=ON;--> statement-breakpoint
55
+ CREATE UNIQUE INDEX `epic_time_segments_open_session_unique` ON `epic_time_segments` (`session_id_snapshot`) WHERE "epic_time_segments"."closed_at" IS NULL;--> statement-breakpoint
56
+ CREATE INDEX `epic_time_segments_project_epic_closed_idx` ON `epic_time_segments` (`project_id`,`epic_id`,`closed_at`,`last_activity_at`);--> statement-breakpoint
57
+ CREATE INDEX `epic_time_segments_project_agent_idx` ON `epic_time_segments` (`project_id`,`agent_id_snapshot`,`last_activity_at`);--> statement-breakpoint
58
+ CREATE INDEX `epic_time_segments_team_batch_idx` ON `epic_time_segments` (`team_batch_id`);
@@ -0,0 +1,14 @@
1
+ CREATE TABLE `external_estimate_log_days` (
2
+ `provider` text NOT NULL,
3
+ `remote_scope_key` text NOT NULL,
4
+ `remote_task_id` text NOT NULL,
5
+ `activity_date` text NOT NULL,
6
+ `logged_minutes` integer DEFAULT 0 NOT NULL,
7
+ `created_at` text NOT NULL,
8
+ `updated_at` text NOT NULL,
9
+ PRIMARY KEY(`provider`, `remote_scope_key`, `remote_task_id`, `activity_date`),
10
+ CONSTRAINT "external_estimate_log_days_logged_minutes_check" CHECK("external_estimate_log_days"."logged_minutes" >= 0)
11
+ );
12
+ --> statement-breakpoint
13
+ ALTER TABLE `external_estimate_log_states` ADD `aggregation_time_zone` text;--> statement-breakpoint
14
+ ALTER TABLE `external_estimate_log_states` ADD `pending_activity_date` text;