@mc1global/opencode-jarvis 0.1.0 → 0.3.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 (295) hide show
  1. package/dist/application/agent-registry/dtos.d.ts +66 -0
  2. package/dist/application/agent-registry/dtos.d.ts.map +1 -0
  3. package/dist/application/agent-registry/dtos.js +11 -0
  4. package/dist/application/agent-registry/dtos.js.map +1 -0
  5. package/dist/application/agent-registry/use-cases.d.ts +39 -0
  6. package/dist/application/agent-registry/use-cases.d.ts.map +1 -0
  7. package/dist/application/agent-registry/use-cases.js +222 -0
  8. package/dist/application/agent-registry/use-cases.js.map +1 -0
  9. package/dist/application/azure-sync/dtos.d.ts +210 -0
  10. package/dist/application/azure-sync/dtos.d.ts.map +1 -0
  11. package/dist/application/azure-sync/dtos.js +11 -0
  12. package/dist/application/azure-sync/dtos.js.map +1 -0
  13. package/dist/application/azure-sync/field-builders.d.ts +54 -0
  14. package/dist/application/azure-sync/field-builders.d.ts.map +1 -0
  15. package/dist/application/azure-sync/field-builders.js +166 -0
  16. package/dist/application/azure-sync/field-builders.js.map +1 -0
  17. package/dist/application/azure-sync/index.d.ts +16 -0
  18. package/dist/application/azure-sync/index.d.ts.map +1 -0
  19. package/dist/application/azure-sync/index.js +10 -0
  20. package/dist/application/azure-sync/index.js.map +1 -0
  21. package/dist/application/azure-sync/pr-use-cases.d.ts +39 -0
  22. package/dist/application/azure-sync/pr-use-cases.d.ts.map +1 -0
  23. package/dist/application/azure-sync/pr-use-cases.js +192 -0
  24. package/dist/application/azure-sync/pr-use-cases.js.map +1 -0
  25. package/dist/application/azure-sync/pull-use-cases.d.ts +43 -0
  26. package/dist/application/azure-sync/pull-use-cases.d.ts.map +1 -0
  27. package/dist/application/azure-sync/pull-use-cases.js +322 -0
  28. package/dist/application/azure-sync/pull-use-cases.js.map +1 -0
  29. package/dist/application/azure-sync/push-use-cases.d.ts +53 -0
  30. package/dist/application/azure-sync/push-use-cases.d.ts.map +1 -0
  31. package/dist/application/azure-sync/push-use-cases.js +341 -0
  32. package/dist/application/azure-sync/push-use-cases.js.map +1 -0
  33. package/dist/application/azure-sync/reverse-field-builder.d.ts +52 -0
  34. package/dist/application/azure-sync/reverse-field-builder.d.ts.map +1 -0
  35. package/dist/application/azure-sync/reverse-field-builder.js +130 -0
  36. package/dist/application/azure-sync/reverse-field-builder.js.map +1 -0
  37. package/dist/application/azure-sync/task-push-use-cases.d.ts +68 -0
  38. package/dist/application/azure-sync/task-push-use-cases.d.ts.map +1 -0
  39. package/dist/application/azure-sync/task-push-use-cases.js +162 -0
  40. package/dist/application/azure-sync/task-push-use-cases.js.map +1 -0
  41. package/dist/application/config/config-service.d.ts +64 -0
  42. package/dist/application/config/config-service.d.ts.map +1 -0
  43. package/dist/application/config/config-service.js +110 -0
  44. package/dist/application/config/config-service.js.map +1 -0
  45. package/dist/application/config/index.d.ts +5 -0
  46. package/dist/application/config/index.d.ts.map +1 -0
  47. package/dist/application/config/index.js +5 -0
  48. package/dist/application/config/index.js.map +1 -0
  49. package/dist/application/kanban/board-use-cases.d.ts.map +1 -1
  50. package/dist/application/kanban/board-use-cases.js +14 -0
  51. package/dist/application/kanban/board-use-cases.js.map +1 -1
  52. package/dist/application/kanban/card-use-cases.d.ts +21 -2
  53. package/dist/application/kanban/card-use-cases.d.ts.map +1 -1
  54. package/dist/application/kanban/card-use-cases.js +180 -1
  55. package/dist/application/kanban/card-use-cases.js.map +1 -1
  56. package/dist/application/kanban/dtos.d.ts +59 -0
  57. package/dist/application/kanban/dtos.d.ts.map +1 -1
  58. package/dist/application/mcp/index.d.ts +10 -0
  59. package/dist/application/mcp/index.d.ts.map +1 -0
  60. package/dist/application/mcp/index.js +8 -0
  61. package/dist/application/mcp/index.js.map +1 -0
  62. package/dist/application/mcp/middleware.d.ts +91 -0
  63. package/dist/application/mcp/middleware.d.ts.map +1 -0
  64. package/dist/application/mcp/middleware.js +84 -0
  65. package/dist/application/mcp/middleware.js.map +1 -0
  66. package/dist/application/mcp/tool-adapter.d.ts +72 -0
  67. package/dist/application/mcp/tool-adapter.d.ts.map +1 -0
  68. package/dist/application/mcp/tool-adapter.js +132 -0
  69. package/dist/application/mcp/tool-adapter.js.map +1 -0
  70. package/dist/application/pipeline/dtos.d.ts +135 -0
  71. package/dist/application/pipeline/dtos.d.ts.map +1 -0
  72. package/dist/application/pipeline/dtos.js +11 -0
  73. package/dist/application/pipeline/dtos.js.map +1 -0
  74. package/dist/application/pipeline/index.d.ts +8 -0
  75. package/dist/application/pipeline/index.d.ts.map +1 -0
  76. package/dist/application/pipeline/index.js +7 -0
  77. package/dist/application/pipeline/index.js.map +1 -0
  78. package/dist/application/pipeline/use-cases.d.ts +67 -0
  79. package/dist/application/pipeline/use-cases.d.ts.map +1 -0
  80. package/dist/application/pipeline/use-cases.js +413 -0
  81. package/dist/application/pipeline/use-cases.js.map +1 -0
  82. package/dist/application/rag/use-cases.d.ts +3 -0
  83. package/dist/application/rag/use-cases.d.ts.map +1 -1
  84. package/dist/application/rag/use-cases.js +112 -34
  85. package/dist/application/rag/use-cases.js.map +1 -1
  86. package/dist/domain/agent-registry/entities.d.ts +68 -0
  87. package/dist/domain/agent-registry/entities.d.ts.map +1 -0
  88. package/dist/domain/agent-registry/entities.js +177 -0
  89. package/dist/domain/agent-registry/entities.js.map +1 -0
  90. package/dist/domain/agent-registry/repositories.d.ts +56 -0
  91. package/dist/domain/agent-registry/repositories.d.ts.map +1 -0
  92. package/dist/domain/agent-registry/repositories.js +12 -0
  93. package/dist/domain/agent-registry/repositories.js.map +1 -0
  94. package/dist/domain/agent-registry/services.d.ts +87 -0
  95. package/dist/domain/agent-registry/services.d.ts.map +1 -0
  96. package/dist/domain/agent-registry/services.js +188 -0
  97. package/dist/domain/agent-registry/services.js.map +1 -0
  98. package/dist/domain/agent-registry/value-objects.d.ts +145 -0
  99. package/dist/domain/agent-registry/value-objects.d.ts.map +1 -0
  100. package/dist/domain/agent-registry/value-objects.js +339 -0
  101. package/dist/domain/agent-registry/value-objects.js.map +1 -0
  102. package/dist/domain/azure-sync/entities.d.ts +165 -0
  103. package/dist/domain/azure-sync/entities.d.ts.map +1 -0
  104. package/dist/domain/azure-sync/entities.js +203 -0
  105. package/dist/domain/azure-sync/entities.js.map +1 -0
  106. package/dist/domain/azure-sync/index.d.ts +16 -0
  107. package/dist/domain/azure-sync/index.d.ts.map +1 -0
  108. package/dist/domain/azure-sync/index.js +14 -0
  109. package/dist/domain/azure-sync/index.js.map +1 -0
  110. package/dist/domain/azure-sync/ports.d.ts +117 -0
  111. package/dist/domain/azure-sync/ports.d.ts.map +1 -0
  112. package/dist/domain/azure-sync/ports.js +13 -0
  113. package/dist/domain/azure-sync/ports.js.map +1 -0
  114. package/dist/domain/azure-sync/repositories.d.ts +53 -0
  115. package/dist/domain/azure-sync/repositories.d.ts.map +1 -0
  116. package/dist/domain/azure-sync/repositories.js +11 -0
  117. package/dist/domain/azure-sync/repositories.js.map +1 -0
  118. package/dist/domain/azure-sync/services.d.ts +107 -0
  119. package/dist/domain/azure-sync/services.d.ts.map +1 -0
  120. package/dist/domain/azure-sync/services.js +316 -0
  121. package/dist/domain/azure-sync/services.js.map +1 -0
  122. package/dist/domain/azure-sync/value-objects.d.ts +129 -0
  123. package/dist/domain/azure-sync/value-objects.d.ts.map +1 -0
  124. package/dist/domain/azure-sync/value-objects.js +343 -0
  125. package/dist/domain/azure-sync/value-objects.js.map +1 -0
  126. package/dist/domain/config/index.d.ts +9 -0
  127. package/dist/domain/config/index.d.ts.map +1 -0
  128. package/dist/domain/config/index.js +7 -0
  129. package/dist/domain/config/index.js.map +1 -0
  130. package/dist/domain/config/repositories.d.ts +36 -0
  131. package/dist/domain/config/repositories.d.ts.map +1 -0
  132. package/dist/domain/config/repositories.js +12 -0
  133. package/dist/domain/config/repositories.js.map +1 -0
  134. package/dist/domain/config/value-objects.d.ts +112 -0
  135. package/dist/domain/config/value-objects.d.ts.map +1 -0
  136. package/dist/domain/config/value-objects.js +93 -0
  137. package/dist/domain/config/value-objects.js.map +1 -0
  138. package/dist/domain/governance/policies.d.ts.map +1 -1
  139. package/dist/domain/governance/policies.js +70 -0
  140. package/dist/domain/governance/policies.js.map +1 -1
  141. package/dist/domain/kanban/entities.d.ts +67 -15
  142. package/dist/domain/kanban/entities.d.ts.map +1 -1
  143. package/dist/domain/kanban/entities.js +177 -14
  144. package/dist/domain/kanban/entities.js.map +1 -1
  145. package/dist/domain/kanban/grooming.d.ts +27 -7
  146. package/dist/domain/kanban/grooming.d.ts.map +1 -1
  147. package/dist/domain/kanban/grooming.js +50 -12
  148. package/dist/domain/kanban/grooming.js.map +1 -1
  149. package/dist/domain/kanban/services.d.ts +16 -2
  150. package/dist/domain/kanban/services.d.ts.map +1 -1
  151. package/dist/domain/kanban/services.js +29 -2
  152. package/dist/domain/kanban/services.js.map +1 -1
  153. package/dist/domain/kanban/value-objects.d.ts +48 -0
  154. package/dist/domain/kanban/value-objects.d.ts.map +1 -1
  155. package/dist/domain/kanban/value-objects.js +53 -0
  156. package/dist/domain/kanban/value-objects.js.map +1 -1
  157. package/dist/domain/pipeline/gate.d.ts +75 -0
  158. package/dist/domain/pipeline/gate.d.ts.map +1 -0
  159. package/dist/domain/pipeline/gate.js +158 -0
  160. package/dist/domain/pipeline/gate.js.map +1 -0
  161. package/dist/domain/pipeline/index.d.ts +13 -0
  162. package/dist/domain/pipeline/index.d.ts.map +1 -0
  163. package/dist/domain/pipeline/index.js +14 -0
  164. package/dist/domain/pipeline/index.js.map +1 -0
  165. package/dist/domain/pipeline/pipeline.d.ts +99 -0
  166. package/dist/domain/pipeline/pipeline.d.ts.map +1 -0
  167. package/dist/domain/pipeline/pipeline.js +257 -0
  168. package/dist/domain/pipeline/pipeline.js.map +1 -0
  169. package/dist/domain/pipeline/ports.d.ts +120 -0
  170. package/dist/domain/pipeline/ports.d.ts.map +1 -0
  171. package/dist/domain/pipeline/ports.js +12 -0
  172. package/dist/domain/pipeline/ports.js.map +1 -0
  173. package/dist/domain/pipeline/repositories.d.ts +66 -0
  174. package/dist/domain/pipeline/repositories.d.ts.map +1 -0
  175. package/dist/domain/pipeline/repositories.js +11 -0
  176. package/dist/domain/pipeline/repositories.js.map +1 -0
  177. package/dist/domain/pipeline/services.d.ts +77 -0
  178. package/dist/domain/pipeline/services.d.ts.map +1 -0
  179. package/dist/domain/pipeline/services.js +156 -0
  180. package/dist/domain/pipeline/services.js.map +1 -0
  181. package/dist/domain/pipeline/value-objects.d.ts +117 -0
  182. package/dist/domain/pipeline/value-objects.d.ts.map +1 -0
  183. package/dist/domain/pipeline/value-objects.js +313 -0
  184. package/dist/domain/pipeline/value-objects.js.map +1 -0
  185. package/dist/domain/rag/value-objects.d.ts +9 -2
  186. package/dist/domain/rag/value-objects.d.ts.map +1 -1
  187. package/dist/domain/rag/value-objects.js +8 -2
  188. package/dist/domain/rag/value-objects.js.map +1 -1
  189. package/dist/index.d.ts.map +1 -1
  190. package/dist/index.js +113 -75
  191. package/dist/index.js.map +1 -1
  192. package/dist/infrastructure/agent-registry/agent-profile-repository.d.ts +29 -0
  193. package/dist/infrastructure/agent-registry/agent-profile-repository.d.ts.map +1 -0
  194. package/dist/infrastructure/agent-registry/agent-profile-repository.js +109 -0
  195. package/dist/infrastructure/agent-registry/agent-profile-repository.js.map +1 -0
  196. package/dist/infrastructure/agent-registry/agent-session-adapter.d.ts +28 -0
  197. package/dist/infrastructure/agent-registry/agent-session-adapter.d.ts.map +1 -0
  198. package/dist/infrastructure/agent-registry/agent-session-adapter.js +61 -0
  199. package/dist/infrastructure/agent-registry/agent-session-adapter.js.map +1 -0
  200. package/dist/infrastructure/agent-registry/built-in-profiles.d.ts +19 -0
  201. package/dist/infrastructure/agent-registry/built-in-profiles.d.ts.map +1 -0
  202. package/dist/infrastructure/agent-registry/built-in-profiles.js +210 -0
  203. package/dist/infrastructure/agent-registry/built-in-profiles.js.map +1 -0
  204. package/dist/infrastructure/azure-sync/azure-auth.d.ts +40 -0
  205. package/dist/infrastructure/azure-sync/azure-auth.d.ts.map +1 -0
  206. package/dist/infrastructure/azure-sync/azure-auth.js +94 -0
  207. package/dist/infrastructure/azure-sync/azure-auth.js.map +1 -0
  208. package/dist/infrastructure/azure-sync/azure-devops-client.d.ts +43 -0
  209. package/dist/infrastructure/azure-sync/azure-devops-client.d.ts.map +1 -0
  210. package/dist/infrastructure/azure-sync/azure-devops-client.js +296 -0
  211. package/dist/infrastructure/azure-sync/azure-devops-client.js.map +1 -0
  212. package/dist/infrastructure/azure-sync/index.d.ts +9 -0
  213. package/dist/infrastructure/azure-sync/index.d.ts.map +1 -0
  214. package/dist/infrastructure/azure-sync/index.js +12 -0
  215. package/dist/infrastructure/azure-sync/index.js.map +1 -0
  216. package/dist/infrastructure/azure-sync/sqlite-sync-repository.d.ts +39 -0
  217. package/dist/infrastructure/azure-sync/sqlite-sync-repository.d.ts.map +1 -0
  218. package/dist/infrastructure/azure-sync/sqlite-sync-repository.js +202 -0
  219. package/dist/infrastructure/azure-sync/sqlite-sync-repository.js.map +1 -0
  220. package/dist/infrastructure/config/index.d.ts +5 -0
  221. package/dist/infrastructure/config/index.d.ts.map +1 -0
  222. package/dist/infrastructure/config/index.js +5 -0
  223. package/dist/infrastructure/config/index.js.map +1 -0
  224. package/dist/infrastructure/config/yaml-config-repository.d.ts +22 -0
  225. package/dist/infrastructure/config/yaml-config-repository.d.ts.map +1 -0
  226. package/dist/infrastructure/config/yaml-config-repository.js +68 -0
  227. package/dist/infrastructure/config/yaml-config-repository.js.map +1 -0
  228. package/dist/infrastructure/database/sqlite-adapter.d.ts +13 -15
  229. package/dist/infrastructure/database/sqlite-adapter.d.ts.map +1 -1
  230. package/dist/infrastructure/database/sqlite-adapter.js +31 -17
  231. package/dist/infrastructure/database/sqlite-adapter.js.map +1 -1
  232. package/dist/infrastructure/domain-map/llm-prompt-factory.d.ts +21 -0
  233. package/dist/infrastructure/domain-map/llm-prompt-factory.d.ts.map +1 -0
  234. package/dist/infrastructure/domain-map/llm-prompt-factory.js +49 -0
  235. package/dist/infrastructure/domain-map/llm-prompt-factory.js.map +1 -0
  236. package/dist/infrastructure/kanban/card-repository.d.ts +6 -0
  237. package/dist/infrastructure/kanban/card-repository.d.ts.map +1 -1
  238. package/dist/infrastructure/kanban/card-repository.js +79 -7
  239. package/dist/infrastructure/kanban/card-repository.js.map +1 -1
  240. package/dist/infrastructure/pipeline/dagger-adapter.d.ts +50 -0
  241. package/dist/infrastructure/pipeline/dagger-adapter.d.ts.map +1 -0
  242. package/dist/infrastructure/pipeline/dagger-adapter.js +153 -0
  243. package/dist/infrastructure/pipeline/dagger-adapter.js.map +1 -0
  244. package/dist/infrastructure/pipeline/dagger-scaffold-generator.d.ts +35 -0
  245. package/dist/infrastructure/pipeline/dagger-scaffold-generator.d.ts.map +1 -0
  246. package/dist/infrastructure/pipeline/dagger-scaffold-generator.js +132 -0
  247. package/dist/infrastructure/pipeline/dagger-scaffold-generator.js.map +1 -0
  248. package/dist/infrastructure/pipeline/index.d.ts +20 -0
  249. package/dist/infrastructure/pipeline/index.d.ts.map +1 -0
  250. package/dist/infrastructure/pipeline/index.js +19 -0
  251. package/dist/infrastructure/pipeline/index.js.map +1 -0
  252. package/dist/infrastructure/pipeline/pipeline-template-registry.d.ts +23 -0
  253. package/dist/infrastructure/pipeline/pipeline-template-registry.d.ts.map +1 -0
  254. package/dist/infrastructure/pipeline/pipeline-template-registry.js +63 -0
  255. package/dist/infrastructure/pipeline/pipeline-template-registry.js.map +1 -0
  256. package/dist/infrastructure/pipeline/scaffold-templates-extra.d.ts +17 -0
  257. package/dist/infrastructure/pipeline/scaffold-templates-extra.d.ts.map +1 -0
  258. package/dist/infrastructure/pipeline/scaffold-templates-extra.js +467 -0
  259. package/dist/infrastructure/pipeline/scaffold-templates-extra.js.map +1 -0
  260. package/dist/infrastructure/pipeline/scaffold-templates.d.ts +23 -0
  261. package/dist/infrastructure/pipeline/scaffold-templates.d.ts.map +1 -0
  262. package/dist/infrastructure/pipeline/scaffold-templates.js +476 -0
  263. package/dist/infrastructure/pipeline/scaffold-templates.js.map +1 -0
  264. package/dist/infrastructure/pipeline/sqlite-pipeline-repository.d.ts +32 -0
  265. package/dist/infrastructure/pipeline/sqlite-pipeline-repository.d.ts.map +1 -0
  266. package/dist/infrastructure/pipeline/sqlite-pipeline-repository.js +197 -0
  267. package/dist/infrastructure/pipeline/sqlite-pipeline-repository.js.map +1 -0
  268. package/dist/mcp-server.d.ts +3 -0
  269. package/dist/mcp-server.d.ts.map +1 -0
  270. package/dist/mcp-server.js +300 -0
  271. package/dist/mcp-server.js.map +1 -0
  272. package/dist/tools/agent-registry-tools.d.ts +11 -0
  273. package/dist/tools/agent-registry-tools.d.ts.map +1 -0
  274. package/dist/tools/agent-registry-tools.js +208 -0
  275. package/dist/tools/agent-registry-tools.js.map +1 -0
  276. package/dist/tools/azure-sync-tools.d.ts +15 -0
  277. package/dist/tools/azure-sync-tools.d.ts.map +1 -0
  278. package/dist/tools/azure-sync-tools.js +332 -0
  279. package/dist/tools/azure-sync-tools.js.map +1 -0
  280. package/dist/tools/kanban-card-tools.d.ts.map +1 -1
  281. package/dist/tools/kanban-card-tools.js +41 -16
  282. package/dist/tools/kanban-card-tools.js.map +1 -1
  283. package/dist/tools/kanban-gate-tools.d.ts +7 -0
  284. package/dist/tools/kanban-gate-tools.d.ts.map +1 -0
  285. package/dist/tools/kanban-gate-tools.js +106 -0
  286. package/dist/tools/kanban-gate-tools.js.map +1 -0
  287. package/dist/tools/kanban-grooming-tools.d.ts +7 -0
  288. package/dist/tools/kanban-grooming-tools.d.ts.map +1 -0
  289. package/dist/tools/kanban-grooming-tools.js +180 -0
  290. package/dist/tools/kanban-grooming-tools.js.map +1 -0
  291. package/dist/tools/pipeline-tools.d.ts +15 -0
  292. package/dist/tools/pipeline-tools.d.ts.map +1 -0
  293. package/dist/tools/pipeline-tools.js +424 -0
  294. package/dist/tools/pipeline-tools.js.map +1 -0
  295. package/package.json +9 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../../src/domain/azure-sync/entities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Azure Sync Domain — Entities
3
+ *
4
+ * SyncMapping tracks the bidirectional relationship between local JARVIS
5
+ * entities and Azure DevOps work items. SyncLog records individual sync
6
+ * operations for auditability.
7
+ *
8
+ * SOLID: SRP — each entity manages its own state and invariants
9
+ * DDD: Entities with identity and lifecycle, mutable state with guards
10
+ */
11
+ // ─── SyncMapping Entity ───────────────────────────────────────────────────────
12
+ /**
13
+ * Tracks the mapping between a local JARVIS entity and an Azure DevOps work item.
14
+ * Maintains timestamps for conflict detection (last-write-wins with revision check).
15
+ */
16
+ export class SyncMapping {
17
+ _id;
18
+ _localId;
19
+ _localEntityType;
20
+ _azureWorkItemId;
21
+ _azureProject;
22
+ _azureOrg;
23
+ _processTemplate;
24
+ _syncDirection;
25
+ _createdAt;
26
+ _syncStatus;
27
+ _lastSyncedAt;
28
+ _localModifiedAt;
29
+ _azureModifiedAt;
30
+ _azureRevision;
31
+ constructor(_id, _localId, _localEntityType, _azureWorkItemId, _azureProject, _azureOrg, _processTemplate, syncStatus, lastSyncedAt, localModifiedAt, azureModifiedAt, _syncDirection, azureRevision, _createdAt) {
32
+ this._id = _id;
33
+ this._localId = _localId;
34
+ this._localEntityType = _localEntityType;
35
+ this._azureWorkItemId = _azureWorkItemId;
36
+ this._azureProject = _azureProject;
37
+ this._azureOrg = _azureOrg;
38
+ this._processTemplate = _processTemplate;
39
+ this._syncDirection = _syncDirection;
40
+ this._createdAt = _createdAt;
41
+ this._syncStatus = syncStatus;
42
+ this._lastSyncedAt = lastSyncedAt;
43
+ this._localModifiedAt = localModifiedAt;
44
+ this._azureModifiedAt = azureModifiedAt;
45
+ this._azureRevision = azureRevision;
46
+ }
47
+ // ── Factory Methods ───────────────────────────────────────────────
48
+ /** Create a new sync mapping for a freshly synced entity pair. */
49
+ static create(params) {
50
+ if (!params.localId.trim()) {
51
+ throw new Error("SyncMapping: localId cannot be empty");
52
+ }
53
+ if (!params.azureProject.trim()) {
54
+ throw new Error("SyncMapping: azureProject cannot be empty");
55
+ }
56
+ if (!params.azureOrg.trim()) {
57
+ throw new Error("SyncMapping: azureOrg cannot be empty");
58
+ }
59
+ return new SyncMapping(params.id, params.localId.trim(), params.localEntityType, params.azureWorkItemId, params.azureProject.trim(), params.azureOrg.trim(), params.processTemplate, "synced", params.now, params.now, params.now, params.syncDirection, params.azureRevision, params.now);
60
+ }
61
+ /** Reconstitute from persistence (no validation — data is trusted). */
62
+ static reconstitute(params) {
63
+ return new SyncMapping(params.id, params.localId, params.localEntityType, params.azureWorkItemId, params.azureProject, params.azureOrg, params.processTemplate, params.syncStatus, params.lastSyncedAt, params.localModifiedAt, params.azureModifiedAt, params.syncDirection, params.azureRevision, params.createdAt);
64
+ }
65
+ // ── Getters ───────────────────────────────────────────────────────
66
+ get id() { return this._id; }
67
+ get localId() { return this._localId; }
68
+ get localEntityType() { return this._localEntityType; }
69
+ get azureWorkItemId() { return this._azureWorkItemId; }
70
+ get azureProject() { return this._azureProject; }
71
+ get azureOrg() { return this._azureOrg; }
72
+ get processTemplate() { return this._processTemplate; }
73
+ get syncStatus() { return this._syncStatus; }
74
+ get lastSyncedAt() { return this._lastSyncedAt; }
75
+ get localModifiedAt() { return this._localModifiedAt; }
76
+ get azureModifiedAt() { return this._azureModifiedAt; }
77
+ get syncDirection() { return this._syncDirection; }
78
+ get azureRevision() { return this._azureRevision; }
79
+ get createdAt() { return this._createdAt; }
80
+ // ── State Mutations ───────────────────────────────────────────────
81
+ /** Mark as successfully synced with updated timestamps and revision. */
82
+ markSynced(now, azureRevision) {
83
+ this._syncStatus = "synced";
84
+ this._lastSyncedAt = now;
85
+ this._localModifiedAt = now;
86
+ this._azureModifiedAt = now;
87
+ this._azureRevision = azureRevision;
88
+ }
89
+ /** Mark that the local entity was modified (needs push). */
90
+ markLocalModified(at) {
91
+ this._localModifiedAt = at;
92
+ this._syncStatus = "stale";
93
+ }
94
+ /** Mark that the Azure work item was modified (needs pull). */
95
+ markAzureModified(at, azureRevision) {
96
+ this._azureModifiedAt = at;
97
+ this._azureRevision = azureRevision;
98
+ this._syncStatus = "stale";
99
+ }
100
+ /** Mark as having a conflict (both sides modified since last sync). */
101
+ markConflict() {
102
+ this._syncStatus = "conflict";
103
+ }
104
+ /** Mark as having an error during sync. */
105
+ markError() {
106
+ this._syncStatus = "error";
107
+ }
108
+ /**
109
+ * Detect if there is a conflict based on timestamps.
110
+ * A conflict exists when both local and Azure were modified after
111
+ * the last successful sync.
112
+ */
113
+ hasConflict() {
114
+ const lastSync = this._lastSyncedAt.value.getTime();
115
+ const localMod = this._localModifiedAt.value.getTime();
116
+ const azureMod = this._azureModifiedAt.value.getTime();
117
+ return localMod > lastSync && azureMod > lastSync;
118
+ }
119
+ /** Check if the local side was modified since last sync. */
120
+ isLocalNewer() {
121
+ return (this._localModifiedAt.value.getTime() >
122
+ this._lastSyncedAt.value.getTime());
123
+ }
124
+ /** Check if the Azure side was modified since last sync. */
125
+ isAzureNewer() {
126
+ return (this._azureModifiedAt.value.getTime() >
127
+ this._lastSyncedAt.value.getTime());
128
+ }
129
+ // ── Serialization ─────────────────────────────────────────────────
130
+ toProps() {
131
+ return {
132
+ id: this._id.value,
133
+ localId: this._localId,
134
+ localEntityType: this._localEntityType,
135
+ azureWorkItemId: this._azureWorkItemId.value,
136
+ azureProject: this._azureProject,
137
+ azureOrg: this._azureOrg,
138
+ processTemplate: this._processTemplate,
139
+ syncStatus: this._syncStatus,
140
+ lastSyncedAt: this._lastSyncedAt.toISO(),
141
+ localModifiedAt: this._localModifiedAt.toISO(),
142
+ azureModifiedAt: this._azureModifiedAt.toISO(),
143
+ syncDirection: this._syncDirection,
144
+ azureRevision: this._azureRevision,
145
+ createdAt: this._createdAt.toISO(),
146
+ };
147
+ }
148
+ }
149
+ // ─── Sync Log Status ──────────────────────────────────────────────────────────
150
+ export const SYNC_LOG_STATUSES = [
151
+ "success",
152
+ "failed",
153
+ "skipped",
154
+ "conflict",
155
+ ];
156
+ // ─── SyncLog Entity ───────────────────────────────────────────────────────────
157
+ /**
158
+ * Records an individual sync operation for auditability.
159
+ * Immutable after creation — log entries are never modified.
160
+ */
161
+ export class SyncLog {
162
+ _id;
163
+ _mappingId;
164
+ _direction;
165
+ _status;
166
+ _detail;
167
+ _timestamp;
168
+ constructor(_id, _mappingId, _direction, _status, _detail, _timestamp) {
169
+ this._id = _id;
170
+ this._mappingId = _mappingId;
171
+ this._direction = _direction;
172
+ this._status = _status;
173
+ this._detail = _detail;
174
+ this._timestamp = _timestamp;
175
+ }
176
+ /** Create a new sync log entry. */
177
+ static create(params) {
178
+ return new SyncLog(params.id, params.mappingId, params.direction, params.status, params.detail, params.timestamp);
179
+ }
180
+ /** Reconstitute from persistence. */
181
+ static reconstitute(params) {
182
+ return new SyncLog(params.id, params.mappingId, params.direction, params.status, params.detail, params.timestamp);
183
+ }
184
+ // ── Getters ───────────────────────────────────────────────────────
185
+ get id() { return this._id; }
186
+ get mappingId() { return this._mappingId; }
187
+ get direction() { return this._direction; }
188
+ get status() { return this._status; }
189
+ get detail() { return this._detail; }
190
+ get timestamp() { return this._timestamp; }
191
+ // ── Serialization ─────────────────────────────────────────────────
192
+ toProps() {
193
+ return {
194
+ id: this._id.value,
195
+ mappingId: this._mappingId.value,
196
+ direction: this._direction,
197
+ status: this._status,
198
+ detail: this._detail,
199
+ timestamp: this._timestamp.toISO(),
200
+ };
201
+ }
202
+ }
203
+ //# sourceMappingURL=entities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../../src/domain/azure-sync/entities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Azure Sync Domain — Barrel Export
3
+ *
4
+ * Public API for the azure-sync bounded context domain layer.
5
+ * Groups exports by category for clean import paths.
6
+ */
7
+ export { SyncMappingId, SyncLogId, AzureOrgUrl, WorkItemId, FieldMapping, PROCESS_TEMPLATES, WORK_ITEM_TYPES, SYNC_DIRECTIONS, SYNC_STATUSES, AZURE_STATES, LOCAL_KANBAN_STATES, LOCAL_TO_AZURE_STATE, AZURE_TO_LOCAL_STATE, LOCAL_TO_AZURE_TYPE, FIELD_FALLBACKS, AUTH_METHODS, LOCAL_ENTITY_TYPES, isValidProcessTemplate, isValidSyncDirection, isValidSyncStatus, isValidFieldFallback, isValidAuthMethod, isValidLocalEntityType, } from "./value-objects.js";
8
+ export type { ProcessTemplate, WorkItemType, SyncDirection, SyncStatus, LocalKanbanState, FieldFallback, AuthMethod, LocalEntityType, } from "./value-objects.js";
9
+ export { SyncMapping, SyncLog } from "./entities.js";
10
+ export { SYNC_LOG_STATUSES } from "./entities.js";
11
+ export type { SyncMappingProps, SyncLogProps, SyncLogStatus, } from "./entities.js";
12
+ export type { SyncMappingRepository, SyncLogRepository, } from "./repositories.js";
13
+ export { FieldMapper, ConflictResolver, AZURE_FIELDS, sanitizeIterationName } from "./services.js";
14
+ export type { ConflictResolution } from "./services.js";
15
+ export type { AzureDevOpsPort, AzureWorkItem, WorkItemPatchOp, WorkItemResult, AzureIteration, AzureProjectInfo, AzurePullRequest, PullRequestReviewer, CreatePullRequestInput, } from "./ports.js";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/azure-sync/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,aAAa,EACb,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,eAAe,CAAC;AAIvB,YAAY,EACV,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACnG,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAIxD,YAAY,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Azure Sync Domain — Barrel Export
3
+ *
4
+ * Public API for the azure-sync bounded context domain layer.
5
+ * Groups exports by category for clean import paths.
6
+ */
7
+ // ── Value Objects ────────────────────────────────────────────────────────────
8
+ export { SyncMappingId, SyncLogId, AzureOrgUrl, WorkItemId, FieldMapping, PROCESS_TEMPLATES, WORK_ITEM_TYPES, SYNC_DIRECTIONS, SYNC_STATUSES, AZURE_STATES, LOCAL_KANBAN_STATES, LOCAL_TO_AZURE_STATE, AZURE_TO_LOCAL_STATE, LOCAL_TO_AZURE_TYPE, FIELD_FALLBACKS, AUTH_METHODS, LOCAL_ENTITY_TYPES, isValidProcessTemplate, isValidSyncDirection, isValidSyncStatus, isValidFieldFallback, isValidAuthMethod, isValidLocalEntityType, } from "./value-objects.js";
9
+ // ── Entities ─────────────────────────────────────────────────────────────────
10
+ export { SyncMapping, SyncLog } from "./entities.js";
11
+ export { SYNC_LOG_STATUSES } from "./entities.js";
12
+ // ── Domain Services ──────────────────────────────────────────────────────────
13
+ export { FieldMapper, ConflictResolver, AZURE_FIELDS, sanitizeIterationName } from "./services.js";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/azure-sync/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,gFAAgF;AAEhF,OAAO,EACL,aAAa,EACb,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAa5B,gFAAgF;AAEhF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAelD,gFAAgF;AAEhF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Azure Sync Domain — Port Interfaces
3
+ *
4
+ * Hexagonal ports defining contracts for external systems.
5
+ * The Azure DevOps API client is an infrastructure concern;
6
+ * domain only defines what operations it needs.
7
+ *
8
+ * SOLID: DIP — domain defines contracts, infra implements
9
+ * SOLID: ISP — focused interfaces per capability
10
+ * DDD: Ports & Adapters pattern
11
+ */
12
+ import type { Result } from "../shared/value-objects.js";
13
+ import type { ProcessTemplate, WorkItemType, AuthMethod } from "./value-objects.js";
14
+ /** Represents a Pull Request in Azure Repos. */
15
+ export interface AzurePullRequest {
16
+ readonly pullRequestId: number;
17
+ readonly title: string;
18
+ readonly description: string;
19
+ readonly status: "active" | "abandoned" | "completed";
20
+ readonly sourceRefName: string;
21
+ readonly targetRefName: string;
22
+ readonly createdBy: string;
23
+ readonly creationDate: string;
24
+ readonly mergeStatus: string;
25
+ readonly url: string;
26
+ readonly workItemIds: readonly number[];
27
+ readonly reviewers: readonly PullRequestReviewer[];
28
+ }
29
+ /** Reviewer on a Pull Request. */
30
+ export interface PullRequestReviewer {
31
+ readonly displayName: string;
32
+ readonly uniqueName: string;
33
+ readonly vote: number;
34
+ }
35
+ /** Input for creating a Pull Request. */
36
+ export interface CreatePullRequestInput {
37
+ readonly title: string;
38
+ readonly description: string;
39
+ readonly sourceRefName: string;
40
+ readonly targetRefName: string;
41
+ readonly workItemIds?: readonly number[];
42
+ readonly reviewers?: readonly string[];
43
+ }
44
+ /** Minimal work item representation returned by Azure DevOps API. */
45
+ export interface AzureWorkItem {
46
+ readonly id: number;
47
+ readonly rev: number;
48
+ readonly fields: Record<string, unknown>;
49
+ readonly url: string;
50
+ }
51
+ /** Patch operation for updating a work item field. */
52
+ export interface WorkItemPatchOp {
53
+ readonly op: "add" | "replace" | "remove";
54
+ readonly path: string;
55
+ readonly value?: unknown;
56
+ }
57
+ /** Result of creating or updating a work item. */
58
+ export interface WorkItemResult {
59
+ readonly id: number;
60
+ readonly rev: number;
61
+ readonly url: string;
62
+ }
63
+ /** Azure DevOps iteration (sprint) representation. */
64
+ export interface AzureIteration {
65
+ readonly id: string;
66
+ readonly name: string;
67
+ readonly path: string;
68
+ readonly attributes?: {
69
+ readonly startDate?: string;
70
+ readonly finishDate?: string;
71
+ };
72
+ }
73
+ /** Azure DevOps project information. */
74
+ export interface AzureProjectInfo {
75
+ readonly id: string;
76
+ readonly name: string;
77
+ readonly description: string;
78
+ readonly processTemplate: ProcessTemplate;
79
+ readonly url: string;
80
+ }
81
+ /**
82
+ * Port interface for Azure DevOps REST API operations.
83
+ * Infrastructure implements this using fetch + az cli token or PAT.
84
+ */
85
+ export interface AzureDevOpsPort {
86
+ /** Get the current authentication method being used. */
87
+ readonly authMethod: AuthMethod;
88
+ /** Test connectivity to the Azure DevOps organization. */
89
+ testConnection(): Promise<Result<string>>;
90
+ /** Get project information including detected process template. */
91
+ getProjectInfo(org: string, project: string): Promise<Result<AzureProjectInfo>>;
92
+ /** Get a single work item by ID. */
93
+ getWorkItem(org: string, project: string, id: number): Promise<Result<AzureWorkItem>>;
94
+ /** List work items of a given type. */
95
+ listWorkItems(org: string, project: string, workItemType: WorkItemType, top?: number): Promise<Result<readonly AzureWorkItem[]>>;
96
+ /** Create a new work item. */
97
+ createWorkItem(org: string, project: string, workItemType: WorkItemType, fields: readonly WorkItemPatchOp[]): Promise<Result<WorkItemResult>>;
98
+ /** Update an existing work item. */
99
+ updateWorkItem(org: string, project: string, id: number, fields: readonly WorkItemPatchOp[]): Promise<Result<WorkItemResult>>;
100
+ /** List iterations (sprints) for a project. */
101
+ listIterations(org: string, project: string): Promise<Result<readonly AzureIteration[]>>;
102
+ /** Create a new iteration. */
103
+ createIteration(org: string, project: string, name: string, startDate?: string, finishDate?: string): Promise<Result<AzureIteration>>;
104
+ /** Register an iteration with the default team so it appears in the sprint dropdown. */
105
+ addIterationToTeam(org: string, project: string, iterationId: string): Promise<Result<void>>;
106
+ /** Add a parent-child relationship between work items. */
107
+ addParentLink(org: string, project: string, childId: number, parentId: number): Promise<Result<void>>;
108
+ /** Add a comment to a work item. */
109
+ addComment(org: string, project: string, workItemId: number, text: string): Promise<Result<void>>;
110
+ /** Create a pull request in Azure Repos. */
111
+ createPullRequest(org: string, project: string, repository: string, input: CreatePullRequestInput): Promise<Result<AzurePullRequest>>;
112
+ /** List pull requests for a repository. */
113
+ listPullRequests(org: string, project: string, repository: string, status?: "active" | "abandoned" | "completed" | "all", top?: number): Promise<Result<readonly AzurePullRequest[]>>;
114
+ /** Get a single pull request by ID. */
115
+ getPullRequest(org: string, project: string, repository: string, pullRequestId: number): Promise<Result<AzurePullRequest>>;
116
+ }
117
+ //# sourceMappingURL=ports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../../src/domain/azure-sync/ports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Azure Sync Domain — Port Interfaces
3
+ *
4
+ * Hexagonal ports defining contracts for external systems.
5
+ * The Azure DevOps API client is an infrastructure concern;
6
+ * domain only defines what operations it needs.
7
+ *
8
+ * SOLID: DIP — domain defines contracts, infra implements
9
+ * SOLID: ISP — focused interfaces per capability
10
+ * DDD: Ports & Adapters pattern
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../src/domain/azure-sync/ports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Azure Sync Domain — Repository Interfaces (Ports)
3
+ *
4
+ * Pure interfaces defining persistence contracts for sync mappings and logs.
5
+ * Implementations provided by infrastructure layer (DIP).
6
+ *
7
+ * SOLID: ISP — separate interfaces per aggregate, DIP — domain defines contracts
8
+ * DDD: Repository pattern — abstracts persistence behind domain-driven interface
9
+ */
10
+ import type { SyncMapping } from "./entities.js";
11
+ import type { SyncMappingId, SyncStatus, LocalEntityType } from "./value-objects.js";
12
+ import type { SyncLog, SyncLogStatus } from "./entities.js";
13
+ /**
14
+ * Repository for SyncMapping persistence.
15
+ * Each mapping links a local JARVIS entity to an Azure DevOps work item.
16
+ */
17
+ export interface SyncMappingRepository {
18
+ /** Persist a sync mapping (create or update). */
19
+ save(mapping: SyncMapping): Promise<void>;
20
+ /** Find a mapping by its ID. Returns undefined if not found. */
21
+ findById(id: SyncMappingId): Promise<SyncMapping | undefined>;
22
+ /** Find a mapping by local entity ID and type. */
23
+ findByLocalId(localId: string, entityType: LocalEntityType): Promise<SyncMapping | undefined>;
24
+ /** Find a mapping by Azure work item ID and project. */
25
+ findByAzureWorkItemId(workItemId: number, azureProject: string): Promise<SyncMapping | undefined>;
26
+ /** Find all mappings for a given Azure project. */
27
+ findByProject(azureProject: string): Promise<readonly SyncMapping[]>;
28
+ /** Find all mappings with a specific sync status. */
29
+ findByStatus(status: SyncStatus): Promise<readonly SyncMapping[]>;
30
+ /** Find all mappings for a local entity type. */
31
+ findByEntityType(entityType: LocalEntityType): Promise<readonly SyncMapping[]>;
32
+ /** Delete a mapping by ID. Returns true if found and deleted. */
33
+ delete(id: SyncMappingId): Promise<boolean>;
34
+ /** Get the next available sequence number for SyncMappingId generation. */
35
+ nextMappingSequence(): Promise<number>;
36
+ /** Get the next available sequence number for SyncLogId generation. */
37
+ nextLogSequence(): Promise<number>;
38
+ }
39
+ /**
40
+ * Repository for SyncLog persistence.
41
+ * Log entries are append-only for auditability.
42
+ */
43
+ export interface SyncLogRepository {
44
+ /** Append a sync log entry. */
45
+ append(log: SyncLog): Promise<void>;
46
+ /** Find log entries for a specific mapping, ordered by timestamp desc. */
47
+ findByMappingId(mappingId: SyncMappingId, limit?: number): Promise<readonly SyncLog[]>;
48
+ /** Find log entries by status, ordered by timestamp desc. */
49
+ findLogsByStatus(status: SyncLogStatus, limit?: number): Promise<readonly SyncLog[]>;
50
+ /** Find recent log entries across all mappings. */
51
+ findRecent(limit: number): Promise<readonly SyncLog[]>;
52
+ }
53
+ //# sourceMappingURL=repositories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositories.d.ts","sourceRoot":"","sources":["../../../src/domain/azure-sync/repositories.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE5D;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,iDAAiD;IACjD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,gEAAgE;IAChE,QAAQ,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAE9D,kDAAkD;IAClD,aAAa,CACX,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAEpC,wDAAwD;IACxD,qBAAqB,CACnB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAEpC,mDAAmD;IACnD,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;IAErE,qDAAqD;IACrD,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;IAElE,iDAAiD;IACjD,gBAAgB,CACd,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;IAEnC,iEAAiE;IACjE,MAAM,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5C,2EAA2E;IAC3E,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvC,uEAAuE;IACvE,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC,0EAA0E;IAC1E,eAAe,CACb,SAAS,EAAE,aAAa,EACxB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;IAE/B,6DAA6D;IAC7D,gBAAgB,CACd,MAAM,EAAE,aAAa,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;IAE/B,mDAAmD;IACnD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;CACxD"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Azure Sync Domain — Repository Interfaces (Ports)
3
+ *
4
+ * Pure interfaces defining persistence contracts for sync mappings and logs.
5
+ * Implementations provided by infrastructure layer (DIP).
6
+ *
7
+ * SOLID: ISP — separate interfaces per aggregate, DIP — domain defines contracts
8
+ * DDD: Repository pattern — abstracts persistence behind domain-driven interface
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=repositories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositories.js","sourceRoot":"","sources":["../../../src/domain/azure-sync/repositories.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Azure Sync Domain — Services
3
+ *
4
+ * FieldMapper adapts field mappings per Azure DevOps process template.
5
+ * ConflictResolver determines sync outcomes when both sides are modified.
6
+ *
7
+ * SOLID: SRP — each service has one responsibility
8
+ * SOLID: OCP — new templates added by extending mapping tables
9
+ * DDD: Domain services encapsulating logic that doesn't belong to entities
10
+ */
11
+ import type { SyncMapping } from "./entities.js";
12
+ import { FieldMapping } from "./value-objects.js";
13
+ import type { ProcessTemplate, LocalKanbanState, SyncDirection, WorkItemType } from "./value-objects.js";
14
+ /** Well-known Azure DevOps field reference names. */
15
+ export declare const AZURE_FIELDS: {
16
+ readonly TITLE: "System.Title";
17
+ readonly STATE: "System.State";
18
+ readonly DESCRIPTION: "System.Description";
19
+ readonly PRIORITY: "Microsoft.VSTS.Common.Priority";
20
+ readonly ITERATION_PATH: "System.IterationPath";
21
+ readonly AREA_PATH: "System.AreaPath";
22
+ readonly WORK_ITEM_TYPE: "System.WorkItemType";
23
+ readonly TAGS: "System.Tags";
24
+ readonly STORY_POINTS: "Microsoft.VSTS.Scheduling.StoryPoints";
25
+ readonly ACCEPTANCE_CRITERIA_HTML: "Microsoft.VSTS.Common.AcceptanceCriteria";
26
+ readonly EFFORT: "Microsoft.VSTS.Scheduling.Effort";
27
+ };
28
+ /**
29
+ * Produces field mappings adapted to the target Azure DevOps process template.
30
+ * Handles the differences between Basic, Agile, Scrum, and CMMI templates
31
+ * by selecting the correct Azure field reference or applying fallback strategies.
32
+ */
33
+ export declare class FieldMapper {
34
+ /**
35
+ * Get all field mappings for a given process template.
36
+ * Returns universal fields plus template-specific fields.
37
+ */
38
+ getFieldMappings(template: ProcessTemplate): readonly FieldMapping[];
39
+ /**
40
+ * Map a local kanban state to an Azure DevOps work item state.
41
+ * Returns the state string expected by Azure DevOps REST API.
42
+ */
43
+ mapStateToAzure(template: ProcessTemplate, localState: LocalKanbanState): string;
44
+ /**
45
+ * Map an Azure DevOps work item state to a local kanban state.
46
+ * Returns undefined if the Azure state is not recognized for this template.
47
+ */
48
+ mapStateFromAzure(template: ProcessTemplate, azureState: string): LocalKanbanState | undefined;
49
+ /**
50
+ * Get the Azure DevOps work item type for a local entity type.
51
+ * Returns the work item type string for the REST API.
52
+ */
53
+ mapWorkItemType(template: ProcessTemplate, localType: string): WorkItemType | undefined;
54
+ /**
55
+ * Build the Azure DevOps tag string for story points fallback.
56
+ * Used by Basic/CMMI templates that lack a native story points field.
57
+ * Format: "SP:N" appended to existing tags.
58
+ */
59
+ buildStoryPointsTag(points: number, existingTags: string): string;
60
+ /**
61
+ * Extract story points from an Azure DevOps tag string.
62
+ * Returns undefined if no SP tag is found.
63
+ */
64
+ extractStoryPointsFromTags(tags: string): number | undefined;
65
+ /**
66
+ * Build acceptance criteria HTML to embed in the Description field.
67
+ * Used by Basic/CMMI templates that lack a dedicated AC field.
68
+ */
69
+ buildAcceptanceCriteriaHtml(description: string, criteria: readonly string[]): string;
70
+ /**
71
+ * Extract acceptance criteria from Description HTML.
72
+ * Looks for the AC section appended by buildAcceptanceCriteriaHtml.
73
+ * Handles Azure DevOps HTML normalization (whitespace, self-closing tags).
74
+ */
75
+ extractAcceptanceCriteriaFromHtml(html: string): {
76
+ description: string;
77
+ criteria: readonly string[];
78
+ };
79
+ }
80
+ /** Outcome of a conflict resolution. */
81
+ export interface ConflictResolution {
82
+ readonly winner: "local" | "azure" | "skip";
83
+ readonly reason: string;
84
+ }
85
+ /**
86
+ * Resolves conflicts when both local and Azure sides have been modified
87
+ * since the last successful sync. Uses timestamp-based last-write-wins
88
+ * with revision checking.
89
+ */
90
+ export declare class ConflictResolver {
91
+ /**
92
+ * Determine the sync outcome for a mapping with potential conflicts.
93
+ *
94
+ * Strategy:
95
+ * 1. If only one side modified → that side wins (no conflict)
96
+ * 2. If both modified → last-write-wins based on timestamps
97
+ * 3. If timestamps equal → Azure wins (external source of truth)
98
+ */
99
+ resolve(mapping: SyncMapping, direction: SyncDirection): ConflictResolution;
100
+ private resolveConflict;
101
+ }
102
+ /**
103
+ * Sanitize a sprint name for use as an Azure DevOps iteration node name.
104
+ * Replaces invalid characters with dash, normalizes whitespace around dashes, trims.
105
+ */
106
+ export declare function sanitizeIterationName(name: string): string;
107
+ //# sourceMappingURL=services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/domain/azure-sync/services.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EACL,YAAY,EAIb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EAEb,YAAY,EACb,MAAM,oBAAoB,CAAC;AAI5B,qDAAqD;AACrD,eAAO,MAAM,YAAY;;;;;;;;;;;;CAcf,CAAC;AAwFX;;;;GAIG;AACH,qBAAa,WAAW;IACtB;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,YAAY,EAAE;IAUpE;;;OAGG;IACH,eAAe,CACb,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,gBAAgB,GAC3B,MAAM;IAKT;;;OAGG;IACH,iBAAiB,CACf,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,MAAM,GACjB,gBAAgB,GAAG,SAAS;IAK/B;;;OAGG;IACH,eAAe,CACb,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,MAAM,GAChB,YAAY,GAAG,SAAS;IAK3B;;;;OAIG;IACH,mBAAmB,CACjB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,MAAM;IAUT;;;OAGG;IACH,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQ5D;;;OAGG;IACH,2BAA2B,CACzB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,MAAM;IAWT;;;;OAIG;IACH,iCAAiC,CAC/B,IAAI,EAAE,MAAM,GACX;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE;CAyBxD;AAID,wCAAwC;AACxC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B;;;;;;;OAOG;IACH,OAAO,CACL,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,GACvB,kBAAkB;IAmCrB,OAAO,CAAC,eAAe;CAqCxB;AA4BD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO1D"}