@mc1global/opencode-jarvis 0.1.1 → 0.3.1
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/hooks/event-handlers.d.ts +3 -0
- package/dist/hooks/event-handlers.d.ts.map +1 -1
- package/dist/hooks/event-handlers.js +4 -2
- package/dist/hooks/event-handlers.js.map +1 -1
- package/dist/hooks/logger.d.ts +46 -0
- package/dist/hooks/logger.d.ts.map +1 -0
- package/dist/hooks/logger.js +79 -0
- package/dist/hooks/logger.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +152 -108
- 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":"yaml-config-repository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/config/yaml-config-repository.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E;;;;;;GAMG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoC;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;gBAExB,QAAQ,EAAE,MAAM;IAM5B,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAIrD,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI5C,WAAW,IAAI,OAAO;IAMtB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;CA8BzB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YAML Configuration Repository
|
|
3
|
+
*
|
|
4
|
+
* Implements ConfigRepository by reading a single YAML file.
|
|
5
|
+
* Parses once on construction and caches the result.
|
|
6
|
+
* Returns undefined for missing sections — never throws.
|
|
7
|
+
*
|
|
8
|
+
* SOLID: SRP — YAML file reading only
|
|
9
|
+
* SOLID: DIP — implements domain-defined ConfigRepository interface
|
|
10
|
+
* DDD: Infrastructure adapter for config persistence
|
|
11
|
+
*/
|
|
12
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
13
|
+
import yaml from "js-yaml";
|
|
14
|
+
/**
|
|
15
|
+
* Reads configuration from a YAML file on disk.
|
|
16
|
+
*
|
|
17
|
+
* - Parses once at construction and caches
|
|
18
|
+
* - Missing or unreadable files produce an empty config (no throw)
|
|
19
|
+
* - Returns raw parsed data; type validation is the application layer's job
|
|
20
|
+
*/
|
|
21
|
+
export class YamlConfigRepository {
|
|
22
|
+
data;
|
|
23
|
+
available;
|
|
24
|
+
constructor(filePath) {
|
|
25
|
+
const result = YamlConfigRepository.parseFile(filePath);
|
|
26
|
+
this.data = result.data;
|
|
27
|
+
this.available = result.available;
|
|
28
|
+
}
|
|
29
|
+
loadContext(contextName) {
|
|
30
|
+
return this.data[contextName];
|
|
31
|
+
}
|
|
32
|
+
loadAll() {
|
|
33
|
+
return this.data;
|
|
34
|
+
}
|
|
35
|
+
isAvailable() {
|
|
36
|
+
return this.available;
|
|
37
|
+
}
|
|
38
|
+
// ── Private ──────────────────────────────────────────────────────
|
|
39
|
+
/**
|
|
40
|
+
* Parse a YAML file safely. Returns empty data if the file
|
|
41
|
+
* is missing, empty, or contains invalid YAML.
|
|
42
|
+
*/
|
|
43
|
+
static parseFile(filePath) {
|
|
44
|
+
if (!existsSync(filePath)) {
|
|
45
|
+
return { data: Object.freeze({}), available: false };
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const raw = readFileSync(filePath, "utf-8");
|
|
49
|
+
if (!raw.trim()) {
|
|
50
|
+
return { data: Object.freeze({}), available: true };
|
|
51
|
+
}
|
|
52
|
+
const parsed = yaml.load(raw);
|
|
53
|
+
// yaml.load can return scalar/array for non-object YAML
|
|
54
|
+
if (parsed === null || parsed === undefined || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
55
|
+
return { data: Object.freeze({}), available: true };
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
data: Object.freeze(parsed),
|
|
59
|
+
available: true,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Invalid YAML — treat as unavailable but don't crash
|
|
64
|
+
return { data: Object.freeze({}), available: false };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=yaml-config-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml-config-repository.js","sourceRoot":"","sources":["../../../src/infrastructure/config/yaml-config-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B;;;;;;GAMG;AACH,MAAM,OAAO,oBAAoB;IACd,IAAI,CAAoC;IACxC,SAAS,CAAU;IAEpC,YAAY,QAAgB;QAC1B,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACpC,CAAC;IAED,WAAW,CAAC,WAAmB;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,oEAAoE;IAEpE;;;OAGG;IACK,MAAM,CAAC,SAAS,CAAC,QAAgB;QAIvC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACvD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YACtD,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAE9B,wDAAwD;YACxD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnG,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YACtD,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAiC,CAAC;gBACtD,SAAS,EAAE,IAAI;aAChB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,sDAAsD;YACtD,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Prompt Factory
|
|
3
|
+
*
|
|
4
|
+
* Creates the PromptFn used by LlmSemanticAnalyzer for domain-map analysis.
|
|
5
|
+
* Delegates to OpenCode SDK session.prompt() — creates a temporary session,
|
|
6
|
+
* sends the analysis prompt, extracts text response, and cleans up.
|
|
7
|
+
*
|
|
8
|
+
* Extracted from index.ts to respect the 500-line limit.
|
|
9
|
+
*
|
|
10
|
+
* SOLID: SRP - LLM prompt delegation only
|
|
11
|
+
*/
|
|
12
|
+
import type { PluginInput } from "@opencode-ai/plugin";
|
|
13
|
+
import type { PromptFn } from "./llm-analyzer.js";
|
|
14
|
+
type OpencodeClient = PluginInput["client"];
|
|
15
|
+
/**
|
|
16
|
+
* Creates a PromptFn that delegates to the OpenCode SDK.
|
|
17
|
+
* Supports model override for cost-effective analysis.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createLlmPromptFn(client: OpencodeClient): PromptFn;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=llm-prompt-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-prompt-factory.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/domain-map/llm-prompt-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,KAAK,cAAc,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,CAqDlE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a PromptFn that delegates to the OpenCode SDK.
|
|
3
|
+
* Supports model override for cost-effective analysis.
|
|
4
|
+
*/
|
|
5
|
+
export function createLlmPromptFn(client) {
|
|
6
|
+
return async (prompt, model) => {
|
|
7
|
+
const createResult = await client.session.create({
|
|
8
|
+
body: { title: "[jarvis] domain-map-analysis" },
|
|
9
|
+
});
|
|
10
|
+
if (!createResult.data) {
|
|
11
|
+
throw new Error("Failed to create analysis session");
|
|
12
|
+
}
|
|
13
|
+
const sessionId = createResult.data.id;
|
|
14
|
+
try {
|
|
15
|
+
const promptResult = await client.session.prompt({
|
|
16
|
+
path: { id: sessionId },
|
|
17
|
+
body: {
|
|
18
|
+
system: "You are a Domain-Driven Design expert analyzing a codebase. " +
|
|
19
|
+
"Respond ONLY with valid JSON matching the schema in the prompt. " +
|
|
20
|
+
"Do not include markdown fences around the JSON. " +
|
|
21
|
+
"Do not use any tools.",
|
|
22
|
+
...(model !== undefined
|
|
23
|
+
? {
|
|
24
|
+
model: {
|
|
25
|
+
providerID: model.providerID,
|
|
26
|
+
modelID: model.modelID,
|
|
27
|
+
},
|
|
28
|
+
}
|
|
29
|
+
: {}),
|
|
30
|
+
parts: [{ type: "text", text: prompt }],
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
if (!promptResult.data) {
|
|
34
|
+
throw new Error("LLM analysis returned no data");
|
|
35
|
+
}
|
|
36
|
+
const textParts = promptResult.data.parts.filter((p) => p.type === "text");
|
|
37
|
+
if (textParts.length === 0) {
|
|
38
|
+
throw new Error("LLM analysis returned no text parts");
|
|
39
|
+
}
|
|
40
|
+
return textParts.map((p) => p.text).join("");
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
await client.session
|
|
44
|
+
.delete({ path: { id: sessionId } })
|
|
45
|
+
.catch(() => { });
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=llm-prompt-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-prompt-factory.js","sourceRoot":"","sources":["../../../src/infrastructure/domain-map/llm-prompt-factory.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACtD,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;QAC7B,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAC/C,IAAI,EAAE,EAAE,KAAK,EAAE,8BAA8B,EAAE;SAChD,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC/C,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;gBACvB,IAAI,EAAE;oBACJ,MAAM,EACJ,8DAA8D;wBAC9D,kEAAkE;wBAClE,kDAAkD;wBAClD,uBAAuB;oBACzB,GAAG,CAAC,KAAK,KAAK,SAAS;wBACrB,CAAC,CAAC;4BACE,KAAK,EAAE;gCACL,UAAU,EAAE,KAAK,CAAC,UAAU;gCAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;6BACvB;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;oBACP,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iBACjD;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAC9C,CACE,CAAC,EAID,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CACvB,CAAC;YACF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,OAAO;iBACjB,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC;iBACnC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -27,6 +27,11 @@ import { WorkspaceId } from "../../domain/shared/value-objects.js";
|
|
|
27
27
|
export declare class SqliteCardRepository implements CardRepository {
|
|
28
28
|
private readonly db;
|
|
29
29
|
constructor(db: SqliteAdapter);
|
|
30
|
+
/**
|
|
31
|
+
* Add gate_tasks and last_transition_at columns if they don't exist.
|
|
32
|
+
* Required for databases created before CD-007.
|
|
33
|
+
*/
|
|
34
|
+
private migrateGateTaskColumns;
|
|
30
35
|
save(card: Card): Promise<void>;
|
|
31
36
|
findById(id: CardId): Promise<Card | null>;
|
|
32
37
|
findByWorkspace(workspace: WorkspaceId, status?: CardStatus): Promise<readonly Card[]>;
|
|
@@ -36,6 +41,7 @@ export declare class SqliteCardRepository implements CardRepository {
|
|
|
36
41
|
countByStatus(workspace: WorkspaceId, status: CardStatus): Promise<number>;
|
|
37
42
|
nextSequence(workspace: WorkspaceId): Promise<number>;
|
|
38
43
|
delete(id: CardId): Promise<void>;
|
|
44
|
+
private parseCardIds;
|
|
39
45
|
private toDomain;
|
|
40
46
|
}
|
|
41
47
|
//# sourceMappingURL=card-repository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card-repository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/kanban/card-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAEvD,OAAO,EACL,MAAM,EACN,UAAU,EAEV,QAAQ,EACR,MAAM,
|
|
1
|
+
{"version":3,"file":"card-repository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/kanban/card-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAEvD,OAAO,EACL,MAAM,EACN,UAAU,EAEV,QAAQ,EACR,MAAM,EAEP,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAa,MAAM,sCAAsC,CAAC;AAmE9E;;;;;GAKG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,aAAa;IAK9C;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAmBxB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAyE/B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAQ1C,eAAe,CACnB,SAAS,EAAE,WAAW,EACtB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAmBrB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAU1D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAUpD,WAAW,CACf,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,WAAW,GACrB,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAUrB,aAAa,CACjB,SAAS,EAAE,WAAW,EACtB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,MAAM,CAAC;IASZ,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IASrD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,QAAQ;CA8DjB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Card } from "../../domain/kanban/entities.js";
|
|
2
|
-
import { CardId, CardStatus, Priority, SprintId, EpicId, } from "../../domain/kanban/value-objects.js";
|
|
2
|
+
import { CardId, CardStatus, Priority, SprintId, EpicId, ScopeDocPath, } from "../../domain/kanban/value-objects.js";
|
|
3
3
|
import { WorkspaceId, Timestamp } from "../../domain/shared/value-objects.js";
|
|
4
4
|
const SCHEMA_KEY = "kanban_cards";
|
|
5
5
|
const DDL = `
|
|
@@ -17,10 +17,16 @@ const DDL = `
|
|
|
17
17
|
acceptance_criteria TEXT NOT NULL DEFAULT '[]',
|
|
18
18
|
review_iterations INTEGER NOT NULL DEFAULT 0,
|
|
19
19
|
previous_status TEXT,
|
|
20
|
+
depends_on TEXT NOT NULL DEFAULT '[]',
|
|
21
|
+
blocked_by TEXT NOT NULL DEFAULT '[]',
|
|
22
|
+
scope_doc_path TEXT,
|
|
20
23
|
grooming_completed INTEGER NOT NULL DEFAULT 0,
|
|
21
24
|
created_at TEXT NOT NULL,
|
|
22
25
|
started_at TEXT,
|
|
23
|
-
completed_at TEXT
|
|
26
|
+
completed_at TEXT,
|
|
27
|
+
pipeline_id TEXT,
|
|
28
|
+
gate_tasks TEXT NOT NULL DEFAULT '[]',
|
|
29
|
+
last_transition_at TEXT
|
|
24
30
|
);
|
|
25
31
|
CREATE INDEX IF NOT EXISTS idx_cards_workspace ON cards(workspace);
|
|
26
32
|
CREATE INDEX IF NOT EXISTS idx_cards_status ON cards(status);
|
|
@@ -42,20 +48,46 @@ export class SqliteCardRepository {
|
|
|
42
48
|
constructor(db) {
|
|
43
49
|
this.db = db;
|
|
44
50
|
this.db.ensureSchema(SCHEMA_KEY, DDL);
|
|
51
|
+
this.migrateGateTaskColumns();
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Add gate_tasks and last_transition_at columns if they don't exist.
|
|
55
|
+
* Required for databases created before CD-007.
|
|
56
|
+
*/
|
|
57
|
+
migrateGateTaskColumns() {
|
|
58
|
+
try {
|
|
59
|
+
this.db.execute("ALTER TABLE cards ADD COLUMN gate_tasks TEXT NOT NULL DEFAULT '[]'", {});
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Column already exists — ignore
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
this.db.execute("ALTER TABLE cards ADD COLUMN last_transition_at TEXT", {});
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Column already exists — ignore
|
|
69
|
+
}
|
|
45
70
|
}
|
|
46
71
|
async save(card) {
|
|
47
72
|
const acJson = JSON.stringify(card.acceptanceCriteria);
|
|
73
|
+
const dependsOnJson = JSON.stringify(card.dependsOn.map((id) => id.value));
|
|
74
|
+
const blockedByJson = JSON.stringify(card.blockedBy.map((id) => id.value));
|
|
75
|
+
const gateTasksJson = JSON.stringify(card.gateTasks);
|
|
48
76
|
const sql = `
|
|
49
77
|
INSERT INTO cards (
|
|
50
78
|
id, workspace, title, status, priority, description,
|
|
51
79
|
epic_id, sprint_id, story_points, assigned_agent,
|
|
52
|
-
acceptance_criteria,
|
|
53
|
-
|
|
80
|
+
acceptance_criteria, depends_on, blocked_by, scope_doc_path,
|
|
81
|
+
review_iterations, previous_status,
|
|
82
|
+
grooming_completed, created_at, started_at, completed_at,
|
|
83
|
+
pipeline_id, gate_tasks, last_transition_at
|
|
54
84
|
) VALUES (
|
|
55
85
|
@id, @workspace, @title, @status, @priority, @description,
|
|
56
86
|
@epic_id, @sprint_id, @story_points, @assigned_agent,
|
|
57
|
-
@acceptance_criteria, @
|
|
58
|
-
@
|
|
87
|
+
@acceptance_criteria, @depends_on, @blocked_by, @scope_doc_path,
|
|
88
|
+
@review_iterations, @previous_status,
|
|
89
|
+
@grooming_completed, @created_at, @started_at, @completed_at,
|
|
90
|
+
@pipeline_id, @gate_tasks, @last_transition_at
|
|
59
91
|
)
|
|
60
92
|
ON CONFLICT(id) DO UPDATE SET
|
|
61
93
|
status = @status,
|
|
@@ -66,11 +98,17 @@ export class SqliteCardRepository {
|
|
|
66
98
|
story_points = @story_points,
|
|
67
99
|
assigned_agent = @assigned_agent,
|
|
68
100
|
acceptance_criteria = @acceptance_criteria,
|
|
101
|
+
depends_on = @depends_on,
|
|
102
|
+
blocked_by = @blocked_by,
|
|
103
|
+
scope_doc_path = @scope_doc_path,
|
|
69
104
|
review_iterations = @review_iterations,
|
|
70
105
|
previous_status = @previous_status,
|
|
71
106
|
grooming_completed = @grooming_completed,
|
|
72
107
|
started_at = @started_at,
|
|
73
|
-
completed_at = @completed_at
|
|
108
|
+
completed_at = @completed_at,
|
|
109
|
+
pipeline_id = @pipeline_id,
|
|
110
|
+
gate_tasks = @gate_tasks,
|
|
111
|
+
last_transition_at = @last_transition_at
|
|
74
112
|
`;
|
|
75
113
|
this.db.execute(sql, {
|
|
76
114
|
id: card.id.value,
|
|
@@ -84,12 +122,18 @@ export class SqliteCardRepository {
|
|
|
84
122
|
story_points: card.storyPoints ?? null,
|
|
85
123
|
assigned_agent: card.assignedAgent ?? null,
|
|
86
124
|
acceptance_criteria: acJson,
|
|
125
|
+
depends_on: dependsOnJson,
|
|
126
|
+
blocked_by: blockedByJson,
|
|
127
|
+
scope_doc_path: card.scopeDocPath?.value ?? null,
|
|
87
128
|
review_iterations: card.reviewIterations,
|
|
88
129
|
previous_status: card.previousStatus ?? null,
|
|
89
130
|
grooming_completed: card.groomingCompleted ? 1 : 0,
|
|
90
131
|
created_at: card.createdAt.toISO(),
|
|
91
132
|
started_at: card.startedAt?.toISO() ?? null,
|
|
92
133
|
completed_at: card.completedAt?.toISO() ?? null,
|
|
134
|
+
pipeline_id: card.pipelineId ?? null,
|
|
135
|
+
gate_tasks: gateTasksJson,
|
|
136
|
+
last_transition_at: card.lastTransitionAt?.toISO() ?? null,
|
|
93
137
|
});
|
|
94
138
|
}
|
|
95
139
|
async findById(id) {
|
|
@@ -140,6 +184,15 @@ export class SqliteCardRepository {
|
|
|
140
184
|
this.db.execute("DELETE FROM cards WHERE id = @id", { id: id.value });
|
|
141
185
|
}
|
|
142
186
|
// ── Mapping ─────────────────────────────────────────────────────
|
|
187
|
+
parseCardIds(json) {
|
|
188
|
+
try {
|
|
189
|
+
const arr = JSON.parse(json);
|
|
190
|
+
return arr.map((v) => CardId.from(v));
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
return [];
|
|
194
|
+
}
|
|
195
|
+
}
|
|
143
196
|
toDomain(row) {
|
|
144
197
|
let acceptanceCriteria = [];
|
|
145
198
|
try {
|
|
@@ -148,6 +201,13 @@ export class SqliteCardRepository {
|
|
|
148
201
|
catch {
|
|
149
202
|
acceptanceCriteria = [];
|
|
150
203
|
}
|
|
204
|
+
let gateTasks = [];
|
|
205
|
+
try {
|
|
206
|
+
gateTasks = JSON.parse(row.gate_tasks);
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
gateTasks = [];
|
|
210
|
+
}
|
|
151
211
|
const props = {
|
|
152
212
|
id: CardId.from(row.id),
|
|
153
213
|
workspace: WorkspaceId.from(row.workspace),
|
|
@@ -166,6 +226,11 @@ export class SqliteCardRepository {
|
|
|
166
226
|
? { assignedAgent: row.assigned_agent }
|
|
167
227
|
: {}),
|
|
168
228
|
acceptanceCriteria,
|
|
229
|
+
dependsOn: row.depends_on ? this.parseCardIds(row.depends_on) : [],
|
|
230
|
+
blockedBy: row.blocked_by ? this.parseCardIds(row.blocked_by) : [],
|
|
231
|
+
...(row.scope_doc_path !== null
|
|
232
|
+
? { scopeDocPath: ScopeDocPath.from(row.scope_doc_path) }
|
|
233
|
+
: {}),
|
|
169
234
|
reviewIterations: row.review_iterations,
|
|
170
235
|
...(row.previous_status !== null
|
|
171
236
|
? { previousStatus: row.previous_status }
|
|
@@ -178,6 +243,13 @@ export class SqliteCardRepository {
|
|
|
178
243
|
...(row.completed_at !== null
|
|
179
244
|
? { completedAt: Timestamp.fromISO(row.completed_at) }
|
|
180
245
|
: {}),
|
|
246
|
+
...(row.pipeline_id !== null
|
|
247
|
+
? { pipelineId: row.pipeline_id }
|
|
248
|
+
: {}),
|
|
249
|
+
gateTasks,
|
|
250
|
+
...(row.last_transition_at !== null
|
|
251
|
+
? { lastTransitionAt: Timestamp.fromISO(row.last_transition_at) }
|
|
252
|
+
: {}),
|
|
181
253
|
};
|
|
182
254
|
return Card.reconstitute(props);
|
|
183
255
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card-repository.js","sourceRoot":"","sources":["../../../src/infrastructure/kanban/card-repository.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAEvD,OAAO,EACL,MAAM,EACN,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,MAAM,
|
|
1
|
+
{"version":3,"file":"card-repository.js","sourceRoot":"","sources":["../../../src/infrastructure/kanban/card-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dagger CLI Adapter
|
|
3
|
+
*
|
|
4
|
+
* Infrastructure implementation of the DaggerPort domain interface.
|
|
5
|
+
* Wraps shell execution of the `dagger` CLI binary and container runtime
|
|
6
|
+
* detection (Docker, Apple Container).
|
|
7
|
+
*
|
|
8
|
+
* This phase delivers the adapter skeleton with runtime detection.
|
|
9
|
+
* Actual Dagger module templates come in CD-006/CD-007.
|
|
10
|
+
*
|
|
11
|
+
* SOLID: SRP — Dagger CLI interaction only
|
|
12
|
+
* SOLID: DIP — implements domain port interface
|
|
13
|
+
* SOLID: OCP — new runtime detectors can be added without modifying existing
|
|
14
|
+
*/
|
|
15
|
+
import type { DaggerPort, DaggerEnvironmentInfo, DaggerRunRequest, DaggerRunResult } from "../../domain/pipeline/ports.js";
|
|
16
|
+
import type { Result } from "../../domain/shared/value-objects.js";
|
|
17
|
+
/**
|
|
18
|
+
* Abstraction over shell command execution.
|
|
19
|
+
* Allows testing without real process spawning.
|
|
20
|
+
*/
|
|
21
|
+
export interface ShellExecutor {
|
|
22
|
+
exec(command: string, args: readonly string[], options: ShellExecOptions): Promise<ShellExecResult>;
|
|
23
|
+
}
|
|
24
|
+
export interface ShellExecOptions {
|
|
25
|
+
readonly cwd?: string;
|
|
26
|
+
readonly timeoutMs?: number;
|
|
27
|
+
readonly env?: Record<string, string>;
|
|
28
|
+
}
|
|
29
|
+
export interface ShellExecResult {
|
|
30
|
+
readonly stdout: string;
|
|
31
|
+
readonly stderr: string;
|
|
32
|
+
readonly exitCode: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Default shell executor using Node.js/Bun child_process.
|
|
36
|
+
* Spawns processes with timeout support.
|
|
37
|
+
*/
|
|
38
|
+
export declare class ChildProcessExecutor implements ShellExecutor {
|
|
39
|
+
exec(command: string, args: readonly string[], options: ShellExecOptions): Promise<ShellExecResult>;
|
|
40
|
+
}
|
|
41
|
+
export declare class DaggerCliAdapter implements DaggerPort {
|
|
42
|
+
private readonly shell;
|
|
43
|
+
constructor(shell?: ShellExecutor);
|
|
44
|
+
checkEnvironment(): Promise<DaggerEnvironmentInfo>;
|
|
45
|
+
run(request: DaggerRunRequest): Promise<Result<DaggerRunResult>>;
|
|
46
|
+
private buildRunArgs;
|
|
47
|
+
private parseDaggerVersion;
|
|
48
|
+
private detectContainerRuntime;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=dagger-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dagger-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/pipeline/dagger-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EACV,UAAU,EACV,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EAEhB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAKnE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CACF,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAID;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IAClD,IAAI,CACR,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC;CA0D5B;AAUD,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;gBAE1B,KAAK,CAAC,EAAE,aAAa;IAI3B,gBAAgB,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAwBlD,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IA2CtE,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,kBAAkB;YAMZ,sBAAsB;CAoCrC"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { ok, fail } from "../../domain/shared/value-objects.js";
|
|
2
|
+
// ─── Default Shell Executor (child_process) ──────────────────────────────────
|
|
3
|
+
/**
|
|
4
|
+
* Default shell executor using Node.js/Bun child_process.
|
|
5
|
+
* Spawns processes with timeout support.
|
|
6
|
+
*/
|
|
7
|
+
export class ChildProcessExecutor {
|
|
8
|
+
async exec(command, args, options) {
|
|
9
|
+
const { spawn } = await import("child_process");
|
|
10
|
+
return new Promise((resolve) => {
|
|
11
|
+
const child = spawn(command, [...args], {
|
|
12
|
+
cwd: options.cwd,
|
|
13
|
+
env: { ...process.env, ...options.env },
|
|
14
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
15
|
+
});
|
|
16
|
+
let stdout = "";
|
|
17
|
+
let stderr = "";
|
|
18
|
+
child.stdout.on("data", (data) => {
|
|
19
|
+
stdout += data.toString();
|
|
20
|
+
});
|
|
21
|
+
child.stderr.on("data", (data) => {
|
|
22
|
+
stderr += data.toString();
|
|
23
|
+
});
|
|
24
|
+
let timedOut = false;
|
|
25
|
+
let timer;
|
|
26
|
+
if (options.timeoutMs !== undefined && options.timeoutMs > 0) {
|
|
27
|
+
timer = setTimeout(() => {
|
|
28
|
+
timedOut = true;
|
|
29
|
+
child.kill("SIGTERM");
|
|
30
|
+
}, options.timeoutMs);
|
|
31
|
+
}
|
|
32
|
+
child.on("close", (code) => {
|
|
33
|
+
if (timer !== undefined)
|
|
34
|
+
clearTimeout(timer);
|
|
35
|
+
if (timedOut) {
|
|
36
|
+
resolve({
|
|
37
|
+
stdout,
|
|
38
|
+
stderr: stderr + "\n[TIMEOUT] Process killed after timeout",
|
|
39
|
+
exitCode: 124, // Standard timeout exit code
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
resolve({
|
|
44
|
+
stdout,
|
|
45
|
+
stderr,
|
|
46
|
+
exitCode: code ?? 1,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
child.on("error", (err) => {
|
|
51
|
+
if (timer !== undefined)
|
|
52
|
+
clearTimeout(timer);
|
|
53
|
+
resolve({
|
|
54
|
+
stdout: "",
|
|
55
|
+
stderr: err.message,
|
|
56
|
+
exitCode: 127, // Command not found
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// ─── Dagger Adapter ──────────────────────────────────────────────────────────
|
|
63
|
+
/** Default timeout for Dagger operations (5 minutes). */
|
|
64
|
+
const DEFAULT_TIMEOUT_MS = 300_000;
|
|
65
|
+
/** Default timeout for environment checks (10 seconds). */
|
|
66
|
+
const CHECK_TIMEOUT_MS = 10_000;
|
|
67
|
+
export class DaggerCliAdapter {
|
|
68
|
+
shell;
|
|
69
|
+
constructor(shell) {
|
|
70
|
+
this.shell = shell ?? new ChildProcessExecutor();
|
|
71
|
+
}
|
|
72
|
+
async checkEnvironment() {
|
|
73
|
+
// Check Dagger CLI
|
|
74
|
+
const daggerResult = await this.shell.exec("dagger", ["version"], { timeoutMs: CHECK_TIMEOUT_MS });
|
|
75
|
+
const daggerAvailable = daggerResult.exitCode === 0;
|
|
76
|
+
const daggerVersion = daggerAvailable
|
|
77
|
+
? this.parseDaggerVersion(daggerResult.stdout)
|
|
78
|
+
: undefined;
|
|
79
|
+
// Check container runtime
|
|
80
|
+
const runtime = await this.detectContainerRuntime();
|
|
81
|
+
return {
|
|
82
|
+
daggerAvailable,
|
|
83
|
+
...(daggerVersion !== undefined ? { daggerVersion } : {}),
|
|
84
|
+
...(runtime !== undefined ? { containerRuntime: runtime.type } : {}),
|
|
85
|
+
runtimeReady: runtime?.ready ?? false,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
async run(request) {
|
|
89
|
+
// Pre-flight: check Dagger availability
|
|
90
|
+
const envCheck = await this.checkEnvironment();
|
|
91
|
+
if (!envCheck.daggerAvailable) {
|
|
92
|
+
return fail("Dagger CLI is not installed or not accessible. " +
|
|
93
|
+
"Install from https://docs.dagger.io/install");
|
|
94
|
+
}
|
|
95
|
+
if (!envCheck.runtimeReady) {
|
|
96
|
+
return fail("No container runtime is available. " +
|
|
97
|
+
"Ensure Docker Desktop or compatible runtime is running.");
|
|
98
|
+
}
|
|
99
|
+
// Build command arguments
|
|
100
|
+
const args = this.buildRunArgs(request);
|
|
101
|
+
const timeoutMs = request.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
102
|
+
const startTime = Date.now();
|
|
103
|
+
const result = await this.shell.exec("dagger", args, {
|
|
104
|
+
cwd: request.moduleDir,
|
|
105
|
+
timeoutMs,
|
|
106
|
+
});
|
|
107
|
+
const durationMs = Date.now() - startTime;
|
|
108
|
+
const output = [result.stdout, result.stderr]
|
|
109
|
+
.filter((s) => s.length > 0)
|
|
110
|
+
.join("\n");
|
|
111
|
+
const runResult = {
|
|
112
|
+
success: result.exitCode === 0,
|
|
113
|
+
output,
|
|
114
|
+
exitCode: result.exitCode,
|
|
115
|
+
durationMs,
|
|
116
|
+
};
|
|
117
|
+
return ok(runResult);
|
|
118
|
+
}
|
|
119
|
+
// ─── Private Helpers ─────────────────────────────────────────────────
|
|
120
|
+
buildRunArgs(request) {
|
|
121
|
+
const args = ["call", request.functionName];
|
|
122
|
+
if (request.args) {
|
|
123
|
+
args.push(...request.args);
|
|
124
|
+
}
|
|
125
|
+
return args;
|
|
126
|
+
}
|
|
127
|
+
parseDaggerVersion(stdout) {
|
|
128
|
+
// Dagger version output format: "dagger v0.15.1 (registry.dagger.io/engine) ..."
|
|
129
|
+
const match = /v?(\d+\.\d+\.\d+)/.exec(stdout);
|
|
130
|
+
return match?.[1];
|
|
131
|
+
}
|
|
132
|
+
async detectContainerRuntime() {
|
|
133
|
+
// Try Docker first (most common)
|
|
134
|
+
const dockerResult = await this.shell.exec("docker", ["info", "--format", "{{.ServerVersion}}"], { timeoutMs: CHECK_TIMEOUT_MS });
|
|
135
|
+
if (dockerResult.exitCode === 0) {
|
|
136
|
+
return { type: "docker", ready: true };
|
|
137
|
+
}
|
|
138
|
+
// Docker installed but daemon not running
|
|
139
|
+
if (dockerResult.exitCode !== 127) {
|
|
140
|
+
return { type: "docker", ready: false };
|
|
141
|
+
}
|
|
142
|
+
// Try Apple Container (macOS Swift/Xcode workflows)
|
|
143
|
+
const containerResult = await this.shell.exec("container", ["--version"], { timeoutMs: CHECK_TIMEOUT_MS });
|
|
144
|
+
if (containerResult.exitCode === 0) {
|
|
145
|
+
return { type: "apple-container", ready: true };
|
|
146
|
+
}
|
|
147
|
+
if (containerResult.exitCode !== 127) {
|
|
148
|
+
return { type: "apple-container", ready: false };
|
|
149
|
+
}
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=dagger-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dagger-adapter.js","sourceRoot":"","sources":["../../../src/infrastructure/pipeline/dagger-adapter.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,sCAAsC,CAAC;AA4BhE,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAC/B,KAAK,CAAC,IAAI,CACR,OAAe,EACf,IAAuB,EACvB,OAAyB;QAEzB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAEhD,OAAO,IAAI,OAAO,CAAkB,CAAC,OAAO,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE;gBACtC,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;gBACvC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aAClC,CAAC,CAAC;YAEH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACvC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACvC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,KAAgD,CAAC;YAErD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBAC7D,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBACtB,QAAQ,GAAG,IAAI,CAAC;oBAChB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACxB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;YAED,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAmB,EAAE,EAAE;gBACxC,IAAI,KAAK,KAAK,SAAS;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC7C,IAAI,QAAQ,EAAE,CAAC;oBACb,OAAO,CAAC;wBACN,MAAM;wBACN,MAAM,EAAE,MAAM,GAAG,0CAA0C;wBAC3D,QAAQ,EAAE,GAAG,EAAE,6BAA6B;qBAC7C,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC;wBACN,MAAM;wBACN,MAAM;wBACN,QAAQ,EAAE,IAAI,IAAI,CAAC;qBACpB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;gBAC/B,IAAI,KAAK,KAAK,SAAS;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC7C,OAAO,CAAC;oBACN,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,GAAG,CAAC,OAAO;oBACnB,QAAQ,EAAE,GAAG,EAAE,oBAAoB;iBACpC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,gFAAgF;AAEhF,yDAAyD;AACzD,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC,2DAA2D;AAC3D,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,MAAM,OAAO,gBAAgB;IACV,KAAK,CAAgB;IAEtC,YAAY,KAAqB;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,oBAAoB,EAAE,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,mBAAmB;QACnB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CACxC,QAAQ,EACR,CAAC,SAAS,CAAC,EACX,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAChC,CAAC;QAEF,MAAM,eAAe,GAAG,YAAY,CAAC,QAAQ,KAAK,CAAC,CAAC;QACpD,MAAM,aAAa,GAAG,eAAe;YACnC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC;YAC9C,CAAC,CAAC,SAAS,CAAC;QAEd,0BAA0B;QAC1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAEpD,OAAO;YACL,eAAe;YACf,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,YAAY,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK;SACtC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAyB;QACjC,wCAAwC;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;YAC9B,OAAO,IAAI,CACT,iDAAiD;gBACjD,6CAA6C,CAC9C,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC3B,OAAO,IAAI,CACT,qCAAqC;gBACrC,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,0BAA0B;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;QAE1D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;YACnD,GAAG,EAAE,OAAO,CAAC,SAAS;YACtB,SAAS;SACV,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAE1C,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;aAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3B,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,SAAS,GAAoB;YACjC,OAAO,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC;YAC9B,MAAM;YACN,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU;SACX,CAAC;QAEF,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED,wEAAwE;IAEhE,YAAY,CAAC,OAAyB;QAC5C,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,kBAAkB,CAAC,MAAc;QACvC,iFAAiF;QACjF,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAEO,KAAK,CAAC,sBAAsB;QAGlC,iCAAiC;QACjC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CACxC,QAAQ,EACR,CAAC,MAAM,EAAE,UAAU,EAAE,oBAAoB,CAAC,EAC1C,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAChC,CAAC;QAEF,IAAI,YAAY,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzC,CAAC;QAED,0CAA0C;QAC1C,IAAI,YAAY,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;YAClC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1C,CAAC;QAED,oDAAoD;QACpD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAC3C,WAAW,EACX,CAAC,WAAW,CAAC,EACb,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAChC,CAAC;QAEF,IAAI,eAAe,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAClD,CAAC;QAED,IAAI,eAAe,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;YACrC,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACnD,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dagger Scaffold Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates Dagger module scaffold files for supported stack templates.
|
|
5
|
+
* Each stack produces a complete set of files (.dagger/dagger.json,
|
|
6
|
+
* .dagger/src/index.ts or .dagger/src/{name}/main.py) with real CI/CD
|
|
7
|
+
* functions that match the gate-to-function mapping in the template registry.
|
|
8
|
+
*
|
|
9
|
+
* Template source content is in scaffold-templates.ts (SRP split).
|
|
10
|
+
*
|
|
11
|
+
* SOLID: SRP — scaffold generation orchestration only
|
|
12
|
+
* SOLID: OCP — new stacks added by extending the generator map
|
|
13
|
+
* SOLID: DIP — implements domain ScaffoldPort interface
|
|
14
|
+
*/
|
|
15
|
+
import type { ScaffoldPort, ScaffoldOutput } from "../../domain/pipeline/ports.js";
|
|
16
|
+
/**
|
|
17
|
+
* Dagger scaffold generator for TypeScript and Python stacks.
|
|
18
|
+
*
|
|
19
|
+
* Generates complete Dagger module files with real CI/CD functions
|
|
20
|
+
* that match the gate-to-function mapping in the template registry.
|
|
21
|
+
* Function names use the stack prefix (e.g., "typescript-lib-lint"
|
|
22
|
+
* becomes "typescriptLibLint" in TS or "typescript_lib_lint" in Python).
|
|
23
|
+
*/
|
|
24
|
+
export declare class DaggerScaffoldGenerator implements ScaffoldPort {
|
|
25
|
+
/** Generate scaffold files for a supported stack. */
|
|
26
|
+
generate(stack: string): ScaffoldOutput | undefined;
|
|
27
|
+
/** List all stacks with scaffold support. */
|
|
28
|
+
supportedStacks(): readonly string[];
|
|
29
|
+
private buildScaffold;
|
|
30
|
+
private getSdk;
|
|
31
|
+
private generateFiles;
|
|
32
|
+
private getTypescriptSource;
|
|
33
|
+
private getPythonSource;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=dagger-scaffold-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dagger-scaffold-generator.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/pipeline/dagger-scaffold-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EAEf,MAAM,gCAAgC,CAAC;AAoDxC;;;;;;;GAOG;AACH,qBAAa,uBAAwB,YAAW,YAAY;IAC1D,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAOnD,6CAA6C;IAC7C,eAAe,IAAI,SAAS,MAAM,EAAE;IAMpC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,aAAa;IAmCrB,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,eAAe;CAUxB"}
|