@mc1global/opencode-jarvis 0.1.1 → 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.
- package/dist/application/agent-registry/dtos.d.ts +66 -0
- package/dist/application/agent-registry/dtos.d.ts.map +1 -0
- package/dist/application/agent-registry/dtos.js +11 -0
- package/dist/application/agent-registry/dtos.js.map +1 -0
- package/dist/application/agent-registry/use-cases.d.ts +39 -0
- package/dist/application/agent-registry/use-cases.d.ts.map +1 -0
- package/dist/application/agent-registry/use-cases.js +222 -0
- package/dist/application/agent-registry/use-cases.js.map +1 -0
- package/dist/application/azure-sync/dtos.d.ts +210 -0
- package/dist/application/azure-sync/dtos.d.ts.map +1 -0
- package/dist/application/azure-sync/dtos.js +11 -0
- package/dist/application/azure-sync/dtos.js.map +1 -0
- package/dist/application/azure-sync/field-builders.d.ts +54 -0
- package/dist/application/azure-sync/field-builders.d.ts.map +1 -0
- package/dist/application/azure-sync/field-builders.js +166 -0
- package/dist/application/azure-sync/field-builders.js.map +1 -0
- package/dist/application/azure-sync/index.d.ts +16 -0
- package/dist/application/azure-sync/index.d.ts.map +1 -0
- package/dist/application/azure-sync/index.js +10 -0
- package/dist/application/azure-sync/index.js.map +1 -0
- package/dist/application/azure-sync/pr-use-cases.d.ts +39 -0
- package/dist/application/azure-sync/pr-use-cases.d.ts.map +1 -0
- package/dist/application/azure-sync/pr-use-cases.js +192 -0
- package/dist/application/azure-sync/pr-use-cases.js.map +1 -0
- package/dist/application/azure-sync/pull-use-cases.d.ts +43 -0
- package/dist/application/azure-sync/pull-use-cases.d.ts.map +1 -0
- package/dist/application/azure-sync/pull-use-cases.js +322 -0
- package/dist/application/azure-sync/pull-use-cases.js.map +1 -0
- package/dist/application/azure-sync/push-use-cases.d.ts +53 -0
- package/dist/application/azure-sync/push-use-cases.d.ts.map +1 -0
- package/dist/application/azure-sync/push-use-cases.js +341 -0
- package/dist/application/azure-sync/push-use-cases.js.map +1 -0
- package/dist/application/azure-sync/reverse-field-builder.d.ts +52 -0
- package/dist/application/azure-sync/reverse-field-builder.d.ts.map +1 -0
- package/dist/application/azure-sync/reverse-field-builder.js +130 -0
- package/dist/application/azure-sync/reverse-field-builder.js.map +1 -0
- package/dist/application/azure-sync/task-push-use-cases.d.ts +68 -0
- package/dist/application/azure-sync/task-push-use-cases.d.ts.map +1 -0
- package/dist/application/azure-sync/task-push-use-cases.js +162 -0
- package/dist/application/azure-sync/task-push-use-cases.js.map +1 -0
- package/dist/application/config/config-service.d.ts +64 -0
- package/dist/application/config/config-service.d.ts.map +1 -0
- package/dist/application/config/config-service.js +110 -0
- package/dist/application/config/config-service.js.map +1 -0
- package/dist/application/config/index.d.ts +5 -0
- package/dist/application/config/index.d.ts.map +1 -0
- package/dist/application/config/index.js +5 -0
- package/dist/application/config/index.js.map +1 -0
- package/dist/application/kanban/board-use-cases.d.ts.map +1 -1
- package/dist/application/kanban/board-use-cases.js +14 -0
- package/dist/application/kanban/board-use-cases.js.map +1 -1
- package/dist/application/kanban/card-use-cases.d.ts +21 -2
- package/dist/application/kanban/card-use-cases.d.ts.map +1 -1
- package/dist/application/kanban/card-use-cases.js +180 -1
- package/dist/application/kanban/card-use-cases.js.map +1 -1
- package/dist/application/kanban/dtos.d.ts +59 -0
- package/dist/application/kanban/dtos.d.ts.map +1 -1
- package/dist/application/mcp/index.d.ts +10 -0
- package/dist/application/mcp/index.d.ts.map +1 -0
- package/dist/application/mcp/index.js +8 -0
- package/dist/application/mcp/index.js.map +1 -0
- package/dist/application/mcp/middleware.d.ts +91 -0
- package/dist/application/mcp/middleware.d.ts.map +1 -0
- package/dist/application/mcp/middleware.js +84 -0
- package/dist/application/mcp/middleware.js.map +1 -0
- package/dist/application/mcp/tool-adapter.d.ts +72 -0
- package/dist/application/mcp/tool-adapter.d.ts.map +1 -0
- package/dist/application/mcp/tool-adapter.js +132 -0
- package/dist/application/mcp/tool-adapter.js.map +1 -0
- package/dist/application/pipeline/dtos.d.ts +135 -0
- package/dist/application/pipeline/dtos.d.ts.map +1 -0
- package/dist/application/pipeline/dtos.js +11 -0
- package/dist/application/pipeline/dtos.js.map +1 -0
- package/dist/application/pipeline/index.d.ts +8 -0
- package/dist/application/pipeline/index.d.ts.map +1 -0
- package/dist/application/pipeline/index.js +7 -0
- package/dist/application/pipeline/index.js.map +1 -0
- package/dist/application/pipeline/use-cases.d.ts +67 -0
- package/dist/application/pipeline/use-cases.d.ts.map +1 -0
- package/dist/application/pipeline/use-cases.js +413 -0
- package/dist/application/pipeline/use-cases.js.map +1 -0
- package/dist/application/rag/use-cases.d.ts +3 -0
- package/dist/application/rag/use-cases.d.ts.map +1 -1
- package/dist/application/rag/use-cases.js +112 -34
- package/dist/application/rag/use-cases.js.map +1 -1
- package/dist/domain/agent-registry/entities.d.ts +68 -0
- package/dist/domain/agent-registry/entities.d.ts.map +1 -0
- package/dist/domain/agent-registry/entities.js +177 -0
- package/dist/domain/agent-registry/entities.js.map +1 -0
- package/dist/domain/agent-registry/repositories.d.ts +56 -0
- package/dist/domain/agent-registry/repositories.d.ts.map +1 -0
- package/dist/domain/agent-registry/repositories.js +12 -0
- package/dist/domain/agent-registry/repositories.js.map +1 -0
- package/dist/domain/agent-registry/services.d.ts +87 -0
- package/dist/domain/agent-registry/services.d.ts.map +1 -0
- package/dist/domain/agent-registry/services.js +188 -0
- package/dist/domain/agent-registry/services.js.map +1 -0
- package/dist/domain/agent-registry/value-objects.d.ts +145 -0
- package/dist/domain/agent-registry/value-objects.d.ts.map +1 -0
- package/dist/domain/agent-registry/value-objects.js +339 -0
- package/dist/domain/agent-registry/value-objects.js.map +1 -0
- package/dist/domain/azure-sync/entities.d.ts +165 -0
- package/dist/domain/azure-sync/entities.d.ts.map +1 -0
- package/dist/domain/azure-sync/entities.js +203 -0
- package/dist/domain/azure-sync/entities.js.map +1 -0
- package/dist/domain/azure-sync/index.d.ts +16 -0
- package/dist/domain/azure-sync/index.d.ts.map +1 -0
- package/dist/domain/azure-sync/index.js +14 -0
- package/dist/domain/azure-sync/index.js.map +1 -0
- package/dist/domain/azure-sync/ports.d.ts +117 -0
- package/dist/domain/azure-sync/ports.d.ts.map +1 -0
- package/dist/domain/azure-sync/ports.js +13 -0
- package/dist/domain/azure-sync/ports.js.map +1 -0
- package/dist/domain/azure-sync/repositories.d.ts +53 -0
- package/dist/domain/azure-sync/repositories.d.ts.map +1 -0
- package/dist/domain/azure-sync/repositories.js +11 -0
- package/dist/domain/azure-sync/repositories.js.map +1 -0
- package/dist/domain/azure-sync/services.d.ts +107 -0
- package/dist/domain/azure-sync/services.d.ts.map +1 -0
- package/dist/domain/azure-sync/services.js +316 -0
- package/dist/domain/azure-sync/services.js.map +1 -0
- package/dist/domain/azure-sync/value-objects.d.ts +129 -0
- package/dist/domain/azure-sync/value-objects.d.ts.map +1 -0
- package/dist/domain/azure-sync/value-objects.js +343 -0
- package/dist/domain/azure-sync/value-objects.js.map +1 -0
- package/dist/domain/config/index.d.ts +9 -0
- package/dist/domain/config/index.d.ts.map +1 -0
- package/dist/domain/config/index.js +7 -0
- package/dist/domain/config/index.js.map +1 -0
- package/dist/domain/config/repositories.d.ts +36 -0
- package/dist/domain/config/repositories.d.ts.map +1 -0
- package/dist/domain/config/repositories.js +12 -0
- package/dist/domain/config/repositories.js.map +1 -0
- package/dist/domain/config/value-objects.d.ts +112 -0
- package/dist/domain/config/value-objects.d.ts.map +1 -0
- package/dist/domain/config/value-objects.js +93 -0
- package/dist/domain/config/value-objects.js.map +1 -0
- package/dist/domain/governance/policies.d.ts.map +1 -1
- package/dist/domain/governance/policies.js +70 -0
- package/dist/domain/governance/policies.js.map +1 -1
- package/dist/domain/kanban/entities.d.ts +67 -15
- package/dist/domain/kanban/entities.d.ts.map +1 -1
- package/dist/domain/kanban/entities.js +177 -14
- package/dist/domain/kanban/entities.js.map +1 -1
- package/dist/domain/kanban/grooming.d.ts +27 -7
- package/dist/domain/kanban/grooming.d.ts.map +1 -1
- package/dist/domain/kanban/grooming.js +50 -12
- package/dist/domain/kanban/grooming.js.map +1 -1
- package/dist/domain/kanban/services.d.ts +16 -2
- package/dist/domain/kanban/services.d.ts.map +1 -1
- package/dist/domain/kanban/services.js +29 -2
- package/dist/domain/kanban/services.js.map +1 -1
- package/dist/domain/kanban/value-objects.d.ts +48 -0
- package/dist/domain/kanban/value-objects.d.ts.map +1 -1
- package/dist/domain/kanban/value-objects.js +53 -0
- package/dist/domain/kanban/value-objects.js.map +1 -1
- package/dist/domain/pipeline/gate.d.ts +75 -0
- package/dist/domain/pipeline/gate.d.ts.map +1 -0
- package/dist/domain/pipeline/gate.js +158 -0
- package/dist/domain/pipeline/gate.js.map +1 -0
- package/dist/domain/pipeline/index.d.ts +13 -0
- package/dist/domain/pipeline/index.d.ts.map +1 -0
- package/dist/domain/pipeline/index.js +14 -0
- package/dist/domain/pipeline/index.js.map +1 -0
- package/dist/domain/pipeline/pipeline.d.ts +99 -0
- package/dist/domain/pipeline/pipeline.d.ts.map +1 -0
- package/dist/domain/pipeline/pipeline.js +257 -0
- package/dist/domain/pipeline/pipeline.js.map +1 -0
- package/dist/domain/pipeline/ports.d.ts +120 -0
- package/dist/domain/pipeline/ports.d.ts.map +1 -0
- package/dist/domain/pipeline/ports.js +12 -0
- package/dist/domain/pipeline/ports.js.map +1 -0
- package/dist/domain/pipeline/repositories.d.ts +66 -0
- package/dist/domain/pipeline/repositories.d.ts.map +1 -0
- package/dist/domain/pipeline/repositories.js +11 -0
- package/dist/domain/pipeline/repositories.js.map +1 -0
- package/dist/domain/pipeline/services.d.ts +77 -0
- package/dist/domain/pipeline/services.d.ts.map +1 -0
- package/dist/domain/pipeline/services.js +156 -0
- package/dist/domain/pipeline/services.js.map +1 -0
- package/dist/domain/pipeline/value-objects.d.ts +117 -0
- package/dist/domain/pipeline/value-objects.d.ts.map +1 -0
- package/dist/domain/pipeline/value-objects.js +313 -0
- package/dist/domain/pipeline/value-objects.js.map +1 -0
- package/dist/domain/rag/value-objects.d.ts +9 -2
- package/dist/domain/rag/value-objects.d.ts.map +1 -1
- package/dist/domain/rag/value-objects.js +8 -2
- package/dist/domain/rag/value-objects.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +113 -75
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/agent-registry/agent-profile-repository.d.ts +29 -0
- package/dist/infrastructure/agent-registry/agent-profile-repository.d.ts.map +1 -0
- package/dist/infrastructure/agent-registry/agent-profile-repository.js +109 -0
- package/dist/infrastructure/agent-registry/agent-profile-repository.js.map +1 -0
- package/dist/infrastructure/agent-registry/agent-session-adapter.d.ts +28 -0
- package/dist/infrastructure/agent-registry/agent-session-adapter.d.ts.map +1 -0
- package/dist/infrastructure/agent-registry/agent-session-adapter.js +61 -0
- package/dist/infrastructure/agent-registry/agent-session-adapter.js.map +1 -0
- package/dist/infrastructure/agent-registry/built-in-profiles.d.ts +19 -0
- package/dist/infrastructure/agent-registry/built-in-profiles.d.ts.map +1 -0
- package/dist/infrastructure/agent-registry/built-in-profiles.js +210 -0
- package/dist/infrastructure/agent-registry/built-in-profiles.js.map +1 -0
- package/dist/infrastructure/azure-sync/azure-auth.d.ts +40 -0
- package/dist/infrastructure/azure-sync/azure-auth.d.ts.map +1 -0
- package/dist/infrastructure/azure-sync/azure-auth.js +94 -0
- package/dist/infrastructure/azure-sync/azure-auth.js.map +1 -0
- package/dist/infrastructure/azure-sync/azure-devops-client.d.ts +43 -0
- package/dist/infrastructure/azure-sync/azure-devops-client.d.ts.map +1 -0
- package/dist/infrastructure/azure-sync/azure-devops-client.js +296 -0
- package/dist/infrastructure/azure-sync/azure-devops-client.js.map +1 -0
- package/dist/infrastructure/azure-sync/index.d.ts +9 -0
- package/dist/infrastructure/azure-sync/index.d.ts.map +1 -0
- package/dist/infrastructure/azure-sync/index.js +12 -0
- package/dist/infrastructure/azure-sync/index.js.map +1 -0
- package/dist/infrastructure/azure-sync/sqlite-sync-repository.d.ts +39 -0
- package/dist/infrastructure/azure-sync/sqlite-sync-repository.d.ts.map +1 -0
- package/dist/infrastructure/azure-sync/sqlite-sync-repository.js +202 -0
- package/dist/infrastructure/azure-sync/sqlite-sync-repository.js.map +1 -0
- package/dist/infrastructure/config/index.d.ts +5 -0
- package/dist/infrastructure/config/index.d.ts.map +1 -0
- package/dist/infrastructure/config/index.js +5 -0
- package/dist/infrastructure/config/index.js.map +1 -0
- package/dist/infrastructure/config/yaml-config-repository.d.ts +22 -0
- package/dist/infrastructure/config/yaml-config-repository.d.ts.map +1 -0
- package/dist/infrastructure/config/yaml-config-repository.js +68 -0
- package/dist/infrastructure/config/yaml-config-repository.js.map +1 -0
- package/dist/infrastructure/domain-map/llm-prompt-factory.d.ts +21 -0
- package/dist/infrastructure/domain-map/llm-prompt-factory.d.ts.map +1 -0
- package/dist/infrastructure/domain-map/llm-prompt-factory.js +49 -0
- package/dist/infrastructure/domain-map/llm-prompt-factory.js.map +1 -0
- package/dist/infrastructure/kanban/card-repository.d.ts +6 -0
- package/dist/infrastructure/kanban/card-repository.d.ts.map +1 -1
- package/dist/infrastructure/kanban/card-repository.js +79 -7
- package/dist/infrastructure/kanban/card-repository.js.map +1 -1
- package/dist/infrastructure/pipeline/dagger-adapter.d.ts +50 -0
- package/dist/infrastructure/pipeline/dagger-adapter.d.ts.map +1 -0
- package/dist/infrastructure/pipeline/dagger-adapter.js +153 -0
- package/dist/infrastructure/pipeline/dagger-adapter.js.map +1 -0
- package/dist/infrastructure/pipeline/dagger-scaffold-generator.d.ts +35 -0
- package/dist/infrastructure/pipeline/dagger-scaffold-generator.d.ts.map +1 -0
- package/dist/infrastructure/pipeline/dagger-scaffold-generator.js +132 -0
- package/dist/infrastructure/pipeline/dagger-scaffold-generator.js.map +1 -0
- package/dist/infrastructure/pipeline/index.d.ts +20 -0
- package/dist/infrastructure/pipeline/index.d.ts.map +1 -0
- package/dist/infrastructure/pipeline/index.js +19 -0
- package/dist/infrastructure/pipeline/index.js.map +1 -0
- package/dist/infrastructure/pipeline/pipeline-template-registry.d.ts +23 -0
- package/dist/infrastructure/pipeline/pipeline-template-registry.d.ts.map +1 -0
- package/dist/infrastructure/pipeline/pipeline-template-registry.js +63 -0
- package/dist/infrastructure/pipeline/pipeline-template-registry.js.map +1 -0
- package/dist/infrastructure/pipeline/scaffold-templates-extra.d.ts +17 -0
- package/dist/infrastructure/pipeline/scaffold-templates-extra.d.ts.map +1 -0
- package/dist/infrastructure/pipeline/scaffold-templates-extra.js +467 -0
- package/dist/infrastructure/pipeline/scaffold-templates-extra.js.map +1 -0
- package/dist/infrastructure/pipeline/scaffold-templates.d.ts +23 -0
- package/dist/infrastructure/pipeline/scaffold-templates.d.ts.map +1 -0
- package/dist/infrastructure/pipeline/scaffold-templates.js +476 -0
- package/dist/infrastructure/pipeline/scaffold-templates.js.map +1 -0
- package/dist/infrastructure/pipeline/sqlite-pipeline-repository.d.ts +32 -0
- package/dist/infrastructure/pipeline/sqlite-pipeline-repository.d.ts.map +1 -0
- package/dist/infrastructure/pipeline/sqlite-pipeline-repository.js +197 -0
- package/dist/infrastructure/pipeline/sqlite-pipeline-repository.js.map +1 -0
- package/dist/mcp-server.d.ts +3 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +300 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/tools/agent-registry-tools.d.ts +11 -0
- package/dist/tools/agent-registry-tools.d.ts.map +1 -0
- package/dist/tools/agent-registry-tools.js +208 -0
- package/dist/tools/agent-registry-tools.js.map +1 -0
- package/dist/tools/azure-sync-tools.d.ts +15 -0
- package/dist/tools/azure-sync-tools.d.ts.map +1 -0
- package/dist/tools/azure-sync-tools.js +332 -0
- package/dist/tools/azure-sync-tools.js.map +1 -0
- package/dist/tools/kanban-card-tools.d.ts.map +1 -1
- package/dist/tools/kanban-card-tools.js +41 -16
- package/dist/tools/kanban-card-tools.js.map +1 -1
- package/dist/tools/kanban-gate-tools.d.ts +7 -0
- package/dist/tools/kanban-gate-tools.d.ts.map +1 -0
- package/dist/tools/kanban-gate-tools.js +106 -0
- package/dist/tools/kanban-gate-tools.js.map +1 -0
- package/dist/tools/kanban-grooming-tools.d.ts +7 -0
- package/dist/tools/kanban-grooming-tools.d.ts.map +1 -0
- package/dist/tools/kanban-grooming-tools.js +180 -0
- package/dist/tools/kanban-grooming-tools.js.map +1 -0
- package/dist/tools/pipeline-tools.d.ts +15 -0
- package/dist/tools/pipeline-tools.d.ts.map +1 -0
- package/dist/tools/pipeline-tools.js +424 -0
- package/dist/tools/pipeline-tools.js.map +1 -0
- package/package.json +7 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-builders.d.ts","sourceRoot":"","sources":["../../../src/application/azure-sync/field-builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,0CAA0C,CAAC;AAElG,OAAO,EAAE,WAAW,EAAgB,MAAM,qCAAqC,CAAC;AAIhF,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,kBAAkB,EAAE,SAAS;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAC9E,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAED,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAYD;;;GAGG;AACH,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAErD,6CAA6C;IAC7C,eAAe,CACb,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,eAAe,GACzB,SAAS,eAAe,EAAE;IAsB7B,kDAAkD;IAClD,eAAe,CACb,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,eAAe,GACxB,SAAS,eAAe,EAAE;IA4C7B,iFAAiF;IACjF,eAAe,CACb,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,eAAe,GACxB,SAAS,eAAe,EAAE;IA2B7B,OAAO,CAAC,sBAAsB;IA4C9B,OAAO,CAAC,iBAAiB;CA2B1B"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure Sync Application — Field Builders
|
|
3
|
+
*
|
|
4
|
+
* Builds Azure DevOps work item patch operations from local entity data.
|
|
5
|
+
* Handles template-aware field mapping for different process templates.
|
|
6
|
+
*
|
|
7
|
+
* SOLID: SRP — field building/mapping only
|
|
8
|
+
* DDD: Application-layer transformation between local and Azure representations
|
|
9
|
+
*/
|
|
10
|
+
import { TASK_STATE_FOR_MET } from "../../domain/azure-sync/value-objects.js";
|
|
11
|
+
import { FieldMapper, AZURE_FIELDS } from "../../domain/azure-sync/services.js";
|
|
12
|
+
// ─── Priority Map ─────────────────────────────────────────────────────────────
|
|
13
|
+
const PRIORITY_MAP = {
|
|
14
|
+
high: 1,
|
|
15
|
+
medium: 2,
|
|
16
|
+
low: 3,
|
|
17
|
+
};
|
|
18
|
+
// ─── Field Builder ────────────────────────────────────────────────────────────
|
|
19
|
+
/**
|
|
20
|
+
* Builds Azure DevOps work item patch operations from local entities.
|
|
21
|
+
* Template-aware: adapts field placement based on process template capabilities.
|
|
22
|
+
*/
|
|
23
|
+
export class AzureFieldBuilder {
|
|
24
|
+
fieldMapper;
|
|
25
|
+
constructor(fieldMapper) {
|
|
26
|
+
this.fieldMapper = fieldMapper;
|
|
27
|
+
}
|
|
28
|
+
/** Build patch ops for an epic work item. */
|
|
29
|
+
buildEpicFields(epic, _template) {
|
|
30
|
+
const fields = [
|
|
31
|
+
{ op: "add", path: `/fields/${AZURE_FIELDS.TITLE}`, value: epic.title },
|
|
32
|
+
];
|
|
33
|
+
if (epic.description !== undefined) {
|
|
34
|
+
fields.push({
|
|
35
|
+
op: "add",
|
|
36
|
+
path: `/fields/${AZURE_FIELDS.DESCRIPTION}`,
|
|
37
|
+
value: epic.description,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const prio = PRIORITY_MAP[epic.priority];
|
|
41
|
+
if (prio !== undefined) {
|
|
42
|
+
fields.push({
|
|
43
|
+
op: "add",
|
|
44
|
+
path: `/fields/${AZURE_FIELDS.PRIORITY}`,
|
|
45
|
+
value: prio,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return fields;
|
|
49
|
+
}
|
|
50
|
+
/** Build patch ops for a card/issue work item. */
|
|
51
|
+
buildCardFields(card, template) {
|
|
52
|
+
const fields = [
|
|
53
|
+
{ op: "add", path: `/fields/${AZURE_FIELDS.TITLE}`, value: card.title },
|
|
54
|
+
];
|
|
55
|
+
// State mapping
|
|
56
|
+
const azureState = this.fieldMapper.mapStateToAzure(template, card.status);
|
|
57
|
+
fields.push({
|
|
58
|
+
op: "add",
|
|
59
|
+
path: `/fields/${AZURE_FIELDS.STATE}`,
|
|
60
|
+
value: azureState,
|
|
61
|
+
});
|
|
62
|
+
// Priority
|
|
63
|
+
const prio = PRIORITY_MAP[card.priority];
|
|
64
|
+
if (prio !== undefined) {
|
|
65
|
+
fields.push({
|
|
66
|
+
op: "add",
|
|
67
|
+
path: `/fields/${AZURE_FIELDS.PRIORITY}`,
|
|
68
|
+
value: prio,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
// Description + AC (template-aware)
|
|
72
|
+
this.appendDescriptionAndAc(fields, card, template);
|
|
73
|
+
// Story points (template-aware)
|
|
74
|
+
this.appendStoryPoints(fields, card, template);
|
|
75
|
+
// Iteration path (sprint assignment)
|
|
76
|
+
if (card.iterationPath !== undefined) {
|
|
77
|
+
fields.push({
|
|
78
|
+
op: "add",
|
|
79
|
+
path: `/fields/${AZURE_FIELDS.ITERATION_PATH}`,
|
|
80
|
+
value: card.iterationPath,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return fields;
|
|
84
|
+
}
|
|
85
|
+
/** Build patch ops for a Task work item derived from an acceptance criterion. */
|
|
86
|
+
buildTaskFields(task, template) {
|
|
87
|
+
const fields = [
|
|
88
|
+
{ op: "add", path: `/fields/${AZURE_FIELDS.TITLE}`, value: task.title },
|
|
89
|
+
];
|
|
90
|
+
// Task state: met=true → done state, met=false → todo state
|
|
91
|
+
const taskStates = TASK_STATE_FOR_MET[template];
|
|
92
|
+
fields.push({
|
|
93
|
+
op: "add",
|
|
94
|
+
path: `/fields/${AZURE_FIELDS.STATE}`,
|
|
95
|
+
value: task.met ? taskStates.done : taskStates.todo,
|
|
96
|
+
});
|
|
97
|
+
// Iteration path (inherit from parent card)
|
|
98
|
+
if (task.iterationPath !== undefined) {
|
|
99
|
+
fields.push({
|
|
100
|
+
op: "add",
|
|
101
|
+
path: `/fields/${AZURE_FIELDS.ITERATION_PATH}`,
|
|
102
|
+
value: task.iterationPath,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return fields;
|
|
106
|
+
}
|
|
107
|
+
// ── Private Helpers ─────────────────────────────────────────────
|
|
108
|
+
appendDescriptionAndAc(fields, card, template) {
|
|
109
|
+
const acTexts = card.acceptanceCriteria.map((ac) => `${ac.met ? "[x]" : "[ ]"} ${ac.description}`);
|
|
110
|
+
const mappings = this.fieldMapper.getFieldMappings(template);
|
|
111
|
+
const acMapping = mappings.find((m) => m.localField === "acceptanceCriteria");
|
|
112
|
+
if (acMapping && acMapping.fallback === "description") {
|
|
113
|
+
// Basic/CMMI: embed AC in description
|
|
114
|
+
const desc = card.description ?? "";
|
|
115
|
+
const html = this.fieldMapper.buildAcceptanceCriteriaHtml(desc, acTexts);
|
|
116
|
+
fields.push({
|
|
117
|
+
op: "add",
|
|
118
|
+
path: `/fields/${AZURE_FIELDS.DESCRIPTION}`,
|
|
119
|
+
value: html,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
// Agile/Scrum: separate fields
|
|
124
|
+
if (card.description !== undefined) {
|
|
125
|
+
fields.push({
|
|
126
|
+
op: "add",
|
|
127
|
+
path: `/fields/${AZURE_FIELDS.DESCRIPTION}`,
|
|
128
|
+
value: card.description,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
if (acTexts.length > 0 && acMapping) {
|
|
132
|
+
const acHtml = acTexts
|
|
133
|
+
.map((t) => `<li>${t}</li>`)
|
|
134
|
+
.join("");
|
|
135
|
+
fields.push({
|
|
136
|
+
op: "add",
|
|
137
|
+
path: `/fields/${acMapping.azureField}`,
|
|
138
|
+
value: `<ul>${acHtml}</ul>`,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
appendStoryPoints(fields, card, template) {
|
|
144
|
+
const mappings = this.fieldMapper.getFieldMappings(template);
|
|
145
|
+
const spMapping = mappings.find((m) => m.localField === "storyPoints");
|
|
146
|
+
if (card.storyPoints !== undefined && spMapping) {
|
|
147
|
+
if (spMapping.fallback === "tag") {
|
|
148
|
+
// Basic/CMMI: add SP as tag
|
|
149
|
+
fields.push({
|
|
150
|
+
op: "add",
|
|
151
|
+
path: `/fields/${AZURE_FIELDS.TAGS}`,
|
|
152
|
+
value: this.fieldMapper.buildStoryPointsTag(card.storyPoints, ""),
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// Agile/Scrum: native field
|
|
157
|
+
fields.push({
|
|
158
|
+
op: "add",
|
|
159
|
+
path: `/fields/${spMapping.azureField}`,
|
|
160
|
+
value: card.storyPoints,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=field-builders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-builders.js","sourceRoot":"","sources":["../../../src/application/azure-sync/field-builders.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure Sync Application — Barrel Export
|
|
3
|
+
*/
|
|
4
|
+
export { AzureSyncUseCases } from "./push-use-cases.js";
|
|
5
|
+
export type { AzureSyncDeps } from "./push-use-cases.js";
|
|
6
|
+
export { AzureSyncPullUseCases } from "./pull-use-cases.js";
|
|
7
|
+
export { AzurePrUseCases } from "./pr-use-cases.js";
|
|
8
|
+
export type { AzurePrDeps } from "./pr-use-cases.js";
|
|
9
|
+
export { AzureFieldBuilder } from "./field-builders.js";
|
|
10
|
+
export { ReverseFieldBuilder } from "./reverse-field-builder.js";
|
|
11
|
+
export { TaskPushUseCases, buildTaskLocalId, parseTaskLocalId } from "./task-push-use-cases.js";
|
|
12
|
+
export type { CardForTaskPush, TaskPushDeps, TaskPushResult } from "./task-push-use-cases.js";
|
|
13
|
+
export type { EpicFieldInput, CardFieldInput, TaskFieldInput } from "./field-builders.js";
|
|
14
|
+
export type { ExtractedCardData, ExtractedEpicData } from "./reverse-field-builder.js";
|
|
15
|
+
export type { DiscoverRequest, DiscoverResponse, PushRequest, PushResponse, PullRequest, PullResponse, BidiSyncRequest, BidiSyncResponse, SyncStatusRequest, SyncStatusResponse, ConfigStatusResponse, CreatePrRequest, PrResponse, PrReviewerInfo, ListPrRequest, ListPrResponse, CommentRequest, CommentResponse, } from "./dtos.js";
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/application/azure-sync/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAChG,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC9F,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1F,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACvF,YAAY,EACV,eAAe,EAAE,gBAAgB,EACjC,WAAW,EAAE,YAAY,EACzB,WAAW,EAAE,YAAY,EACzB,eAAe,EAAE,gBAAgB,EACjC,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAC3D,eAAe,EAAE,UAAU,EAAE,cAAc,EAC3C,aAAa,EAAE,cAAc,EAC7B,cAAc,EAAE,eAAe,GAChC,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure Sync Application — Barrel Export
|
|
3
|
+
*/
|
|
4
|
+
export { AzureSyncUseCases } from "./push-use-cases.js";
|
|
5
|
+
export { AzureSyncPullUseCases } from "./pull-use-cases.js";
|
|
6
|
+
export { AzurePrUseCases } from "./pr-use-cases.js";
|
|
7
|
+
export { AzureFieldBuilder } from "./field-builders.js";
|
|
8
|
+
export { ReverseFieldBuilder } from "./reverse-field-builder.js";
|
|
9
|
+
export { TaskPushUseCases, buildTaskLocalId, parseTaskLocalId } from "./task-push-use-cases.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/application/azure-sync/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure Sync Application — PR & Comment Use Cases
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates Pull Request creation, listing, and structured
|
|
5
|
+
* work item comment generation for Azure DevOps integration.
|
|
6
|
+
*
|
|
7
|
+
* SOLID: SRP — PR and comment operations only
|
|
8
|
+
* SOLID: DIP — depends on AzureDevOpsPort abstraction
|
|
9
|
+
* DDD: Application layer use cases with DTO boundaries
|
|
10
|
+
*/
|
|
11
|
+
import type { Result } from "../../domain/shared/value-objects.js";
|
|
12
|
+
import type { AzureDevOpsPort } from "../../domain/azure-sync/ports.js";
|
|
13
|
+
import type { ConfigService } from "../config/config-service.js";
|
|
14
|
+
import type { CreatePrRequest, PrResponse, ListPrRequest, ListPrResponse, CommentRequest, CommentResponse, PushResponse } from "./dtos.js";
|
|
15
|
+
/** Dependencies for PR use cases. */
|
|
16
|
+
export interface AzurePrDeps {
|
|
17
|
+
readonly azureClient: AzureDevOpsPort;
|
|
18
|
+
readonly configService: ConfigService;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Application use cases for Azure DevOps Pull Requests and structured comments.
|
|
22
|
+
* Handles PR CRUD and comment generation from sync results.
|
|
23
|
+
*/
|
|
24
|
+
export declare class AzurePrUseCases {
|
|
25
|
+
private readonly deps;
|
|
26
|
+
constructor(deps: AzurePrDeps);
|
|
27
|
+
/** Create a Pull Request in Azure Repos. */
|
|
28
|
+
createPr(req: CreatePrRequest): Promise<Result<PrResponse>>;
|
|
29
|
+
/** List Pull Requests, or get a single PR by ID. */
|
|
30
|
+
listPrs(req: ListPrRequest): Promise<Result<ListPrResponse>>;
|
|
31
|
+
/** Post a structured comment on an Azure work item. */
|
|
32
|
+
postComment(req: CommentRequest): Promise<Result<CommentResponse>>;
|
|
33
|
+
/**
|
|
34
|
+
* Post auto-comments on all work items that were pushed.
|
|
35
|
+
* Creates a brief sync summary comment on each pushed work item.
|
|
36
|
+
*/
|
|
37
|
+
autoCommentOnPush(org: string, project: string, pushResult: PushResponse): Promise<readonly CommentResponse[]>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=pr-use-cases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-use-cases.d.ts","sourceRoot":"","sources":["../../../src/application/azure-sync/pr-use-cases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,kCAAkC,CAAC;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EAEV,aAAa,EACb,cAAc,EACd,cAAc,EACd,eAAe,EACf,YAAY,EACb,MAAM,WAAW,CAAC;AAInB,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC;AAID;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;gBAEvB,IAAI,EAAE,WAAW;IAM7B,4CAA4C;IACtC,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IA2BjE,oDAAoD;IAC9C,OAAO,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAqClE,uDAAuD;IACjD,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAwBxE;;;OAGG;IACG,iBAAiB,CACrB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,YAAY,GACvB,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;CAqBvC"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure Sync Application — PR & Comment Use Cases
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates Pull Request creation, listing, and structured
|
|
5
|
+
* work item comment generation for Azure DevOps integration.
|
|
6
|
+
*
|
|
7
|
+
* SOLID: SRP — PR and comment operations only
|
|
8
|
+
* SOLID: DIP — depends on AzureDevOpsPort abstraction
|
|
9
|
+
* DDD: Application layer use cases with DTO boundaries
|
|
10
|
+
*/
|
|
11
|
+
import { ok } from "../../domain/shared/value-objects.js";
|
|
12
|
+
// ── PR Use Cases ──────────────────────────────────────────────────────────────
|
|
13
|
+
/**
|
|
14
|
+
* Application use cases for Azure DevOps Pull Requests and structured comments.
|
|
15
|
+
* Handles PR CRUD and comment generation from sync results.
|
|
16
|
+
*/
|
|
17
|
+
export class AzurePrUseCases {
|
|
18
|
+
deps;
|
|
19
|
+
constructor(deps) {
|
|
20
|
+
this.deps = deps;
|
|
21
|
+
}
|
|
22
|
+
// ── Pull Request Operations ───────────────────────────────────────
|
|
23
|
+
/** Create a Pull Request in Azure Repos. */
|
|
24
|
+
async createPr(req) {
|
|
25
|
+
const targetBranch = req.targetBranch ?? "refs/heads/main";
|
|
26
|
+
const sourceBranch = req.sourceBranch.startsWith("refs/")
|
|
27
|
+
? req.sourceBranch
|
|
28
|
+
: `refs/heads/${req.sourceBranch}`;
|
|
29
|
+
const target = targetBranch.startsWith("refs/")
|
|
30
|
+
? targetBranch
|
|
31
|
+
: `refs/heads/${targetBranch}`;
|
|
32
|
+
const result = await this.deps.azureClient.createPullRequest(req.org, req.project, req.repository, {
|
|
33
|
+
title: req.title,
|
|
34
|
+
description: req.description,
|
|
35
|
+
sourceRefName: sourceBranch,
|
|
36
|
+
targetRefName: target,
|
|
37
|
+
...(req.workItemIds !== undefined ? { workItemIds: req.workItemIds } : {}),
|
|
38
|
+
...(req.reviewers !== undefined ? { reviewers: req.reviewers } : {}),
|
|
39
|
+
});
|
|
40
|
+
if (!result.success)
|
|
41
|
+
return result;
|
|
42
|
+
return ok(mapPrToResponse(result.data));
|
|
43
|
+
}
|
|
44
|
+
/** List Pull Requests, or get a single PR by ID. */
|
|
45
|
+
async listPrs(req) {
|
|
46
|
+
// Single PR by ID
|
|
47
|
+
if (req.pullRequestId !== undefined) {
|
|
48
|
+
const result = await this.deps.azureClient.getPullRequest(req.org, req.project, req.repository, req.pullRequestId);
|
|
49
|
+
if (!result.success)
|
|
50
|
+
return result;
|
|
51
|
+
const pr = mapPrToResponse(result.data);
|
|
52
|
+
return ok({
|
|
53
|
+
pullRequests: [pr],
|
|
54
|
+
summary: `PR #${pr.pullRequestId}: ${pr.title} [${pr.status}]`,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
// List PRs by status
|
|
58
|
+
const status = normalizeStatusFilter(req.status);
|
|
59
|
+
const result = await this.deps.azureClient.listPullRequests(req.org, req.project, req.repository, status, req.top);
|
|
60
|
+
if (!result.success)
|
|
61
|
+
return result;
|
|
62
|
+
const prs = result.data.map(mapPrToResponse);
|
|
63
|
+
return ok({
|
|
64
|
+
pullRequests: prs,
|
|
65
|
+
summary: `Found ${prs.length} pull request(s) [${status}]`,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// ── Structured Comments ───────────────────────────────────────────
|
|
69
|
+
/** Post a structured comment on an Azure work item. */
|
|
70
|
+
async postComment(req) {
|
|
71
|
+
const html = buildCommentHtml(req);
|
|
72
|
+
const result = await this.deps.azureClient.addComment(req.org, req.project, req.workItemId, html);
|
|
73
|
+
if (!result.success) {
|
|
74
|
+
return ok({
|
|
75
|
+
workItemId: req.workItemId,
|
|
76
|
+
success: false,
|
|
77
|
+
error: result.error,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return ok({
|
|
81
|
+
workItemId: req.workItemId,
|
|
82
|
+
success: true,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Post auto-comments on all work items that were pushed.
|
|
87
|
+
* Creates a brief sync summary comment on each pushed work item.
|
|
88
|
+
*/
|
|
89
|
+
async autoCommentOnPush(org, project, pushResult) {
|
|
90
|
+
const results = [];
|
|
91
|
+
for (const item of pushResult.pushed) {
|
|
92
|
+
const comment = await this.postComment({
|
|
93
|
+
org,
|
|
94
|
+
project,
|
|
95
|
+
workItemId: item.azureWorkItemId,
|
|
96
|
+
commentType: "push-summary",
|
|
97
|
+
pushSummary: pushResult,
|
|
98
|
+
});
|
|
99
|
+
results.push(comment.success
|
|
100
|
+
? comment.data
|
|
101
|
+
: { workItemId: item.azureWorkItemId, success: false, error: comment.error });
|
|
102
|
+
}
|
|
103
|
+
return results;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
107
|
+
/** Map domain AzurePullRequest to PrResponse DTO. */
|
|
108
|
+
function mapPrToResponse(pr) {
|
|
109
|
+
return {
|
|
110
|
+
pullRequestId: pr.pullRequestId,
|
|
111
|
+
title: pr.title,
|
|
112
|
+
description: pr.description,
|
|
113
|
+
status: pr.status,
|
|
114
|
+
sourceBranch: pr.sourceRefName.replace("refs/heads/", ""),
|
|
115
|
+
targetBranch: pr.targetRefName.replace("refs/heads/", ""),
|
|
116
|
+
createdBy: pr.createdBy,
|
|
117
|
+
creationDate: pr.creationDate,
|
|
118
|
+
mergeStatus: pr.mergeStatus,
|
|
119
|
+
url: pr.url,
|
|
120
|
+
workItemIds: pr.workItemIds,
|
|
121
|
+
reviewers: pr.reviewers.map(mapReviewer),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/** Map reviewer vote number to human-readable label. */
|
|
125
|
+
function mapReviewer(r) {
|
|
126
|
+
const voteLabels = {
|
|
127
|
+
10: "Approved",
|
|
128
|
+
5: "Approved with suggestions",
|
|
129
|
+
0: "No vote",
|
|
130
|
+
[-5]: "Waiting for author",
|
|
131
|
+
[-10]: "Rejected",
|
|
132
|
+
};
|
|
133
|
+
return {
|
|
134
|
+
displayName: r.displayName,
|
|
135
|
+
uniqueName: r.uniqueName,
|
|
136
|
+
vote: r.vote,
|
|
137
|
+
voteLabel: voteLabels[r.vote] ?? `Vote: ${r.vote}`,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
function normalizeStatusFilter(status) {
|
|
141
|
+
if (status === undefined)
|
|
142
|
+
return "active";
|
|
143
|
+
const lower = status.toLowerCase();
|
|
144
|
+
if (lower === "abandoned")
|
|
145
|
+
return "abandoned";
|
|
146
|
+
if (lower === "completed")
|
|
147
|
+
return "completed";
|
|
148
|
+
if (lower === "all")
|
|
149
|
+
return "all";
|
|
150
|
+
return "active";
|
|
151
|
+
}
|
|
152
|
+
// ── Comment HTML Builder ─────────────────────────────────────────────────────
|
|
153
|
+
/** Build structured HTML comment based on comment type. */
|
|
154
|
+
function buildCommentHtml(req) {
|
|
155
|
+
switch (req.commentType) {
|
|
156
|
+
case "push-summary":
|
|
157
|
+
return buildPushSummaryHtml(req.pushSummary);
|
|
158
|
+
case "pr-link":
|
|
159
|
+
return buildPrLinkHtml(req.prUrl, req.prTitle);
|
|
160
|
+
case "custom":
|
|
161
|
+
return req.customText ?? "";
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/** Build HTML for a push operation summary. */
|
|
165
|
+
function buildPushSummaryHtml(pushSummary) {
|
|
166
|
+
if (pushSummary === undefined)
|
|
167
|
+
return "<p><strong>JARVIS Sync</strong>: Push completed.</p>";
|
|
168
|
+
const lines = [
|
|
169
|
+
"<h3>JARVIS Sync — Push Summary</h3>",
|
|
170
|
+
`<p>${pushSummary.summary}</p>`,
|
|
171
|
+
];
|
|
172
|
+
if (pushSummary.pushed.length > 0) {
|
|
173
|
+
lines.push("<ul>");
|
|
174
|
+
for (const item of pushSummary.pushed) {
|
|
175
|
+
const icon = item.action === "created" ? "+" : "~";
|
|
176
|
+
lines.push(`<li>${icon} ${item.localId} "${item.localTitle}" → #${item.azureWorkItemId}</li>`);
|
|
177
|
+
}
|
|
178
|
+
lines.push("</ul>");
|
|
179
|
+
}
|
|
180
|
+
if (pushSummary.errors.length > 0) {
|
|
181
|
+
lines.push(`<p><strong>Errors</strong>: ${pushSummary.errors.length}</p>`);
|
|
182
|
+
}
|
|
183
|
+
return lines.join("\n");
|
|
184
|
+
}
|
|
185
|
+
/** Build HTML for a PR link comment. */
|
|
186
|
+
function buildPrLinkHtml(prUrl, prTitle) {
|
|
187
|
+
if (prUrl === undefined)
|
|
188
|
+
return "<p><strong>JARVIS</strong>: PR created.</p>";
|
|
189
|
+
const title = prTitle ?? "Pull Request";
|
|
190
|
+
return `<p><strong>JARVIS</strong>: PR created — <a href="${prUrl}">${title}</a></p>`;
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=pr-use-cases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-use-cases.js","sourceRoot":"","sources":["../../../src/application/azure-sync/pr-use-cases.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure Sync Application — Pull & Bidirectional Use Cases
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates pull (Azure → local) and bidirectional sync operations.
|
|
5
|
+
* Fetches Azure work items, reverse-maps fields, creates/updates local
|
|
6
|
+
* entities via kanban use cases, and resolves conflicts.
|
|
7
|
+
*
|
|
8
|
+
* SOLID: SRP — pull orchestration only
|
|
9
|
+
* SOLID: DIP — depends on interfaces (ports, repositories, use cases)
|
|
10
|
+
* DDD: Application service coordinating bounded contexts
|
|
11
|
+
*/
|
|
12
|
+
import type { Result } from "../../domain/shared/value-objects.js";
|
|
13
|
+
import type { AzureSyncDeps } from "./push-use-cases.js";
|
|
14
|
+
import type { AzureSyncUseCases } from "./push-use-cases.js";
|
|
15
|
+
import type { PullRequest, PullResponse, BidiSyncRequest, BidiSyncResponse, SyncStatusRequest, SyncStatusResponse } from "./dtos.js";
|
|
16
|
+
/**
|
|
17
|
+
* Orchestrates pull and bidirectional sync operations.
|
|
18
|
+
* Fetches Azure work items and creates/updates local kanban entities.
|
|
19
|
+
*/
|
|
20
|
+
export declare class AzureSyncPullUseCases {
|
|
21
|
+
private readonly deps;
|
|
22
|
+
private readonly pushUseCases;
|
|
23
|
+
private readonly fieldMapper;
|
|
24
|
+
private readonly reverseBuilder;
|
|
25
|
+
private readonly conflictResolver;
|
|
26
|
+
constructor(deps: AzureSyncDeps, pushUseCases: AzureSyncUseCases);
|
|
27
|
+
/** Pull work items from Azure and create/update local entities. */
|
|
28
|
+
pull(req: PullRequest): Promise<Result<PullResponse>>;
|
|
29
|
+
/** Push local changes then pull Azure changes in one operation. */
|
|
30
|
+
bidiSync(req: BidiSyncRequest): Promise<Result<BidiSyncResponse>>;
|
|
31
|
+
/** Enhanced sync status that also detects unmapped Azure items. */
|
|
32
|
+
enhancedSyncStatus(req: SyncStatusRequest): Promise<Result<SyncStatusResponse>>;
|
|
33
|
+
private pullEpics;
|
|
34
|
+
private pullCards;
|
|
35
|
+
private handleMappedCard;
|
|
36
|
+
private createLocalCard;
|
|
37
|
+
private updateLocalCard;
|
|
38
|
+
private createLocalEpic;
|
|
39
|
+
private createPullMapping;
|
|
40
|
+
private logSync;
|
|
41
|
+
private findUnmappedAzureItems;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=pull-use-cases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull-use-cases.d.ts","sourceRoot":"","sources":["../../../src/application/azure-sync/pull-use-cases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAQnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EACV,WAAW,EAAE,YAAY,EAEzB,eAAe,EAAE,gBAAgB,EACjC,iBAAiB,EAAE,kBAAkB,EACtC,MAAM,WAAW,CAAC;AAInB;;;GAGG;AACH,qBAAa,qBAAqB;IAM9B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAN/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;IAC5E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0B;gBAGxC,IAAI,EAAE,aAAa,EACnB,YAAY,EAAE,iBAAiB;IAKlD,mEAAmE;IAC7D,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IA6B3D,mEAAmE;IAC7D,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IA8BvE,mEAAmE;IAC7D,kBAAkB,CACtB,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAsBxB,SAAS;YA2CT,SAAS;YAkDT,gBAAgB;YAkChB,eAAe;YAgDf,eAAe;YA8Cf,eAAe;YAgCf,iBAAiB;YAwBjB,OAAO;YAsBP,sBAAsB;CAgCrC"}
|