@specforge/mcp 3.0.7 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/cli/commands/index.d.ts +2 -0
  2. package/dist/cli/commands/index.d.ts.map +1 -1
  3. package/dist/cli/commands/index.js +2 -0
  4. package/dist/cli/commands/index.js.map +1 -1
  5. package/dist/cli/commands/init.d.ts.map +1 -1
  6. package/dist/cli/commands/init.js +184 -2
  7. package/dist/cli/commands/init.js.map +1 -1
  8. package/dist/cli/commands/init.types.d.ts +37 -0
  9. package/dist/cli/commands/init.types.d.ts.map +1 -1
  10. package/dist/cli/commands/init.types.js +18 -0
  11. package/dist/cli/commands/init.types.js.map +1 -1
  12. package/dist/cli/commands/plan.d.ts +18 -0
  13. package/dist/cli/commands/plan.d.ts.map +1 -0
  14. package/dist/cli/commands/plan.js +154 -0
  15. package/dist/cli/commands/plan.js.map +1 -0
  16. package/dist/cli/commands/plan.types.d.ts +60 -0
  17. package/dist/cli/commands/plan.types.d.ts.map +1 -0
  18. package/dist/cli/commands/plan.types.js +8 -0
  19. package/dist/cli/commands/plan.types.js.map +1 -0
  20. package/dist/cli/commands/spec-activate.d.ts +29 -0
  21. package/dist/cli/commands/spec-activate.d.ts.map +1 -0
  22. package/dist/cli/commands/spec-activate.js +155 -0
  23. package/dist/cli/commands/spec-activate.js.map +1 -0
  24. package/dist/cli/commands/spec-activate.types.d.ts +24 -0
  25. package/dist/cli/commands/spec-activate.types.d.ts.map +1 -0
  26. package/dist/cli/commands/spec-activate.types.js +8 -0
  27. package/dist/cli/commands/spec-activate.types.js.map +1 -0
  28. package/dist/cli/commands/status.d.ts.map +1 -1
  29. package/dist/cli/commands/status.js +89 -1
  30. package/dist/cli/commands/status.js.map +1 -1
  31. package/dist/cli/commands/status.types.d.ts +2 -0
  32. package/dist/cli/commands/status.types.d.ts.map +1 -1
  33. package/dist/cli/commands/status.types.js.map +1 -1
  34. package/dist/cli/config/agent-teams.types.d.ts +194 -0
  35. package/dist/cli/config/agent-teams.types.d.ts.map +1 -0
  36. package/dist/cli/config/agent-teams.types.js +36 -0
  37. package/dist/cli/config/agent-teams.types.js.map +1 -0
  38. package/dist/cli/config/index.d.ts +2 -0
  39. package/dist/cli/config/index.d.ts.map +1 -1
  40. package/dist/cli/config/index.js +2 -0
  41. package/dist/cli/config/index.js.map +1 -1
  42. package/dist/cli/config/loader.d.ts +36 -2
  43. package/dist/cli/config/loader.d.ts.map +1 -1
  44. package/dist/cli/config/loader.js +65 -0
  45. package/dist/cli/config/loader.js.map +1 -1
  46. package/dist/cli/config/validation.d.ts +69 -0
  47. package/dist/cli/config/validation.d.ts.map +1 -0
  48. package/dist/cli/config/validation.js +295 -0
  49. package/dist/cli/config/validation.js.map +1 -0
  50. package/dist/cli/config/writer.d.ts +39 -0
  51. package/dist/cli/config/writer.d.ts.map +1 -1
  52. package/dist/cli/config/writer.js +58 -0
  53. package/dist/cli/config/writer.js.map +1 -1
  54. package/dist/cli/index.d.ts.map +1 -1
  55. package/dist/cli/index.js +5 -1
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/lib/index.d.ts +3 -0
  58. package/dist/lib/index.d.ts.map +1 -1
  59. package/dist/lib/index.js +3 -0
  60. package/dist/lib/index.js.map +1 -1
  61. package/dist/lib/monorepo-detector.d.ts +31 -0
  62. package/dist/lib/monorepo-detector.d.ts.map +1 -0
  63. package/dist/lib/monorepo-detector.js +271 -0
  64. package/dist/lib/monorepo-detector.js.map +1 -0
  65. package/dist/lib/prompt-generator.d.ts +65 -0
  66. package/dist/lib/prompt-generator.d.ts.map +1 -0
  67. package/dist/lib/prompt-generator.js +172 -0
  68. package/dist/lib/prompt-generator.js.map +1 -0
  69. package/dist/lib/strategy-analyzer.d.ts +59 -0
  70. package/dist/lib/strategy-analyzer.d.ts.map +1 -0
  71. package/dist/lib/strategy-analyzer.js +137 -0
  72. package/dist/lib/strategy-analyzer.js.map +1 -0
  73. package/dist/tools/core/context-helper.d.ts +22 -0
  74. package/dist/tools/core/context-helper.d.ts.map +1 -1
  75. package/dist/tools/core/context-helper.js +37 -1
  76. package/dist/tools/core/context-helper.js.map +1 -1
  77. package/dist/tools/core/workspace-files.d.ts +49 -0
  78. package/dist/tools/core/workspace-files.d.ts.map +1 -0
  79. package/dist/tools/core/workspace-files.js +259 -0
  80. package/dist/tools/core/workspace-files.js.map +1 -0
  81. package/dist/tools/index.d.ts.map +1 -1
  82. package/dist/tools/index.js +147 -0
  83. package/dist/tools/index.js.map +1 -1
  84. package/package.json +3 -2
  85. package/src/cli/templates/agents/content/core/sfag-implementer.ts +113 -0
  86. package/src/cli/templates/agents/content/core/sfag-orchestrator.ts +107 -0
  87. package/src/cli/templates/agents/content/core/sfag-spec-creator.ts +126 -0
  88. package/src/cli/templates/agents/content/core/sfag-ticket-implementer.ts +132 -0
  89. package/src/cli/templates/agents/content/research/sfag-package-researcher.ts +153 -0
  90. package/src/cli/templates/agents/content/task-type/sfag-api-implementer.ts +132 -0
  91. package/src/cli/templates/agents/content/task-type/sfag-docs-writer.ts +183 -0
  92. package/src/cli/templates/agents/content/task-type/sfag-frontend-builder.ts +141 -0
  93. package/src/cli/templates/agents/content/task-type/sfag-infra-architect.ts +149 -0
  94. package/src/cli/templates/agents/content/task-type/sfag-schema-designer.ts +132 -0
  95. package/src/cli/templates/agents/content/task-type/sfag-test-writer.ts +171 -0
  96. package/src/cli/templates/agents/index.ts +74 -0
  97. package/src/cli/templates/commands.ts +179 -0
  98. package/src/cli/templates/content/sf-autonomous.ts +78 -0
  99. package/src/cli/templates/content/sf-blockers.ts +68 -0
  100. package/src/cli/templates/content/sf-commit.ts +78 -0
  101. package/src/cli/templates/content/sf-context.ts +64 -0
  102. package/src/cli/templates/content/sf-create-epics.ts +129 -0
  103. package/src/cli/templates/content/sf-create-spec.ts +136 -0
  104. package/src/cli/templates/content/sf-create-tickets.ts +148 -0
  105. package/src/cli/templates/content/sf-epic.ts +69 -0
  106. package/src/cli/templates/content/sf-help.ts +61 -0
  107. package/src/cli/templates/content/sf-import.ts +88 -0
  108. package/src/cli/templates/content/sf-init.ts +61 -0
  109. package/src/cli/templates/content/sf-next.ts +67 -0
  110. package/src/cli/templates/content/sf-reset.ts +78 -0
  111. package/src/cli/templates/content/sf-review.ts +67 -0
  112. package/src/cli/templates/content/sf-search.ts +64 -0
  113. package/src/cli/templates/content/sf-status.ts +67 -0
  114. package/src/cli/templates/content/sf-ticket.ts +76 -0
  115. package/src/cli/templates/content/sf-validate.ts +78 -0
  116. package/src/cli/templates/index.ts +16 -0
  117. package/src/cli/templates/skills/specforge-conventions.md +109 -0
  118. package/src/cli/templates/skills/specforge-orchestrator.md +401 -0
  119. package/src/cli/templates/skills/specforge-validator.md +122 -0
  120. package/src/cli/templates/skills/specforge-worker.md +378 -0
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Agent Teams Configuration Types
3
+ *
4
+ * Defines interfaces for the Agent Teams integration sections
5
+ * of the .specforge.json configuration file. These extend the
6
+ * existing ProjectConfig without breaking backward compatibility.
7
+ *
8
+ * @see docs/agent-teams/blueprints/04-config-schema.md
9
+ */
10
+ import type { ProjectConfig } from './types.js';
11
+ /**
12
+ * Execution strategy for Agent Teams.
13
+ *
14
+ * - `auto` – Analyzer picks based on spec structure (default)
15
+ * - `single` – Sequential, one worker at a time (<=3 tickets, no epic deps)
16
+ * - `parallel` – All epic teams run concurrently (independent epics)
17
+ * - `phased` – Epics run in dependency-ordered phases (cross-epic deps)
18
+ */
19
+ export type AgentTeamsStrategy = 'auto' | 'single' | 'parallel' | 'phased';
20
+ /**
21
+ * Behavior when a worker encounters a blocker.
22
+ *
23
+ * - `pause` – Stop the worker and wait for manual intervention
24
+ * - `skip` – Skip the blocked ticket and move to the next one
25
+ * - `ask` – Prompt the user for a decision (default)
26
+ */
27
+ export type EscalationPolicy = 'pause' | 'skip' | 'ask';
28
+ /**
29
+ * Supported monorepo tools for workspace detection.
30
+ */
31
+ export type MonorepoTool = 'turborepo' | 'nx' | 'lerna' | 'pnpm' | 'npm';
32
+ /**
33
+ * Currently active specification for Agent Teams implementation.
34
+ *
35
+ * Set automatically by `sf spec activate`. Tells Agent Teams
36
+ * which specification to work on.
37
+ */
38
+ export interface ActiveSpecification {
39
+ /** SpecForge specification UUID */
40
+ id: string;
41
+ /** Human-readable spec title (for display) */
42
+ title: string;
43
+ /**
44
+ * ISO 8601 timestamp of activation.
45
+ * Set automatically by `sf spec activate`.
46
+ */
47
+ activatedAt: string;
48
+ }
49
+ /**
50
+ * A discovered workspace package within a monorepo.
51
+ */
52
+ export interface WorkspaceEntry {
53
+ /** Package name from package.json */
54
+ name: string;
55
+ /** Relative path from root (e.g., "packages/api") */
56
+ path: string;
57
+ /** Internal workspace dependency names */
58
+ dependencies: string[];
59
+ }
60
+ /**
61
+ * Monorepo detection results and workspace layout.
62
+ *
63
+ * Populated automatically by the monorepo detector.
64
+ * Used by Agent Teams to scope workers to specific workspaces.
65
+ */
66
+ export interface MonorepoConfig {
67
+ /** Whether a monorepo was auto-detected */
68
+ detected: boolean;
69
+ /**
70
+ * Detected monorepo tool.
71
+ * @default null
72
+ */
73
+ tool: MonorepoTool | null;
74
+ /**
75
+ * Discovered workspace packages.
76
+ * @default []
77
+ */
78
+ workspaces: WorkspaceEntry[];
79
+ /**
80
+ * Absolute path to monorepo root.
81
+ * @default "."
82
+ */
83
+ rootDir: string;
84
+ }
85
+ /**
86
+ * Validation commands that can override spec-level validation.
87
+ */
88
+ export interface ValidationCommands {
89
+ /** Test command (e.g., "cd mcp && npm test") */
90
+ test?: string;
91
+ /** Lint command (e.g., "cd mcp && npm run lint") */
92
+ lint?: string;
93
+ /** Type check command (e.g., "cd mcp && npx tsc --noEmit") */
94
+ typeCheck?: string;
95
+ /** Build command (e.g., "cd mcp && npm run build") */
96
+ build?: string;
97
+ }
98
+ /**
99
+ * Agent Teams execution settings.
100
+ *
101
+ * Controls how Agent Teams orchestrate spec implementation.
102
+ * All fields are optional — sensible defaults are applied.
103
+ */
104
+ export interface AgentTeamsConfig {
105
+ /**
106
+ * Master toggle for Agent Teams.
107
+ * @default false
108
+ */
109
+ enabled?: boolean;
110
+ /**
111
+ * Execution strategy selection.
112
+ * @default "auto"
113
+ */
114
+ strategy?: AgentTeamsStrategy;
115
+ /**
116
+ * Maximum number of concurrent worker teams (1-10).
117
+ * @default 3
118
+ */
119
+ maxParallelTeams?: number;
120
+ /**
121
+ * Token budget per worker (10000-200000).
122
+ * @default 50000
123
+ */
124
+ maxTokensPerWorker?: number;
125
+ /**
126
+ * Git branch naming prefix.
127
+ * @default "ticket/"
128
+ */
129
+ branchPrefix?: string;
130
+ /**
131
+ * Branch name template. Must contain `{prefix}` placeholder.
132
+ * @default "{prefix}E{epic}-T{ticket}-{slug}"
133
+ */
134
+ branchPattern?: string;
135
+ /**
136
+ * Whether to auto-run validation after each ticket.
137
+ * @default true
138
+ */
139
+ autoValidate?: boolean;
140
+ /**
141
+ * Override spec-level validation commands.
142
+ * When omitted, inherits from the specification's validationCommands.
143
+ */
144
+ validationCommands?: ValidationCommands;
145
+ /**
146
+ * Per-worker timeout in minutes (5-60).
147
+ * @default 15
148
+ */
149
+ timeoutMinutes?: number;
150
+ /**
151
+ * Behavior when a worker encounters a blocker.
152
+ * @default "ask"
153
+ */
154
+ escalationPolicy?: EscalationPolicy;
155
+ }
156
+ /**
157
+ * Extended .specforge.json configuration with Agent Teams support.
158
+ *
159
+ * Extends the existing {@link ProjectConfig} with optional sections
160
+ * for Agent Teams integration. All new fields are optional to maintain
161
+ * full backward compatibility with existing config files.
162
+ */
163
+ export interface SpecforgeJsonConfig extends ProjectConfig {
164
+ /** Currently active specification for implementation */
165
+ activeSpecification?: ActiveSpecification;
166
+ /** Monorepo detection results and workspace layout */
167
+ monorepo?: MonorepoConfig;
168
+ /** Agent Teams execution settings */
169
+ agentTeams?: AgentTeamsConfig;
170
+ }
171
+ /**
172
+ * Default values for AgentTeamsConfig fields.
173
+ */
174
+ export declare const AGENT_TEAMS_DEFAULTS: {
175
+ readonly enabled: false;
176
+ readonly strategy: AgentTeamsStrategy;
177
+ readonly maxParallelTeams: 3;
178
+ readonly maxTokensPerWorker: 50000;
179
+ readonly branchPrefix: "ticket/";
180
+ readonly branchPattern: "{prefix}E{epic}-T{ticket}-{slug}";
181
+ readonly autoValidate: true;
182
+ readonly timeoutMinutes: 15;
183
+ readonly escalationPolicy: EscalationPolicy;
184
+ };
185
+ /**
186
+ * Default values for MonorepoConfig fields.
187
+ */
188
+ export declare const MONOREPO_DEFAULTS: {
189
+ readonly detected: false;
190
+ readonly tool: null;
191
+ readonly workspaces: WorkspaceEntry[];
192
+ readonly rootDir: ".";
193
+ };
194
+ //# sourceMappingURL=agent-teams.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-teams.types.d.ts","sourceRoot":"","sources":["../../../src/cli/config/agent-teams.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAMhD;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE3E;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAMzE;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,EAAE,EAAE,MAAM,CAAC;IAEX,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IAEb,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IAEb,0CAA0C;IAC1C,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAE1B;;;OAGG;IACH,UAAU,EAAE,cAAc,EAAE,CAAC;IAE7B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAE9B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAExC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAE1C,sDAAsD;IACtD,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B,qCAAqC;IACrC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAMD;;GAEG;AACH,eAAO,MAAM,oBAAoB;;uBAEX,kBAAkB;;;;;;;+BAOX,gBAAgB;CACnC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;yBAGV,cAAc,EAAE;;CAE1B,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Agent Teams Configuration Types
3
+ *
4
+ * Defines interfaces for the Agent Teams integration sections
5
+ * of the .specforge.json configuration file. These extend the
6
+ * existing ProjectConfig without breaking backward compatibility.
7
+ *
8
+ * @see docs/agent-teams/blueprints/04-config-schema.md
9
+ */
10
+ // ---------------------------------------------------------------------------
11
+ // Defaults
12
+ // ---------------------------------------------------------------------------
13
+ /**
14
+ * Default values for AgentTeamsConfig fields.
15
+ */
16
+ export const AGENT_TEAMS_DEFAULTS = {
17
+ enabled: false,
18
+ strategy: 'auto',
19
+ maxParallelTeams: 3,
20
+ maxTokensPerWorker: 50000,
21
+ branchPrefix: 'ticket/',
22
+ branchPattern: '{prefix}E{epic}-T{ticket}-{slug}',
23
+ autoValidate: true,
24
+ timeoutMinutes: 15,
25
+ escalationPolicy: 'ask',
26
+ };
27
+ /**
28
+ * Default values for MonorepoConfig fields.
29
+ */
30
+ export const MONOREPO_DEFAULTS = {
31
+ detected: false,
32
+ tool: null,
33
+ workspaces: [],
34
+ rootDir: '.',
35
+ };
36
+ //# sourceMappingURL=agent-teams.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-teams.types.js","sourceRoot":"","sources":["../../../src/cli/config/agent-teams.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA0NH,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,MAA4B;IACtC,gBAAgB,EAAE,CAAC;IACnB,kBAAkB,EAAE,KAAK;IACzB,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,kCAAkC;IACjD,YAAY,EAAE,IAAI;IAClB,cAAc,EAAE,EAAE;IAClB,gBAAgB,EAAE,KAAyB;CACnC,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,EAAE,KAAK;IACf,IAAI,EAAE,IAAI;IACV,UAAU,EAAE,EAAsB;IAClC,OAAO,EAAE,GAAG;CACJ,CAAC"}
@@ -5,6 +5,8 @@
5
5
  * for the SpecForge CLI.
6
6
  */
7
7
  export * from './types.js';
8
+ export * from './agent-teams.types.js';
9
+ export * from './validation.js';
8
10
  export * from './paths.js';
9
11
  export * from './loader.js';
10
12
  export * from './writer.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
@@ -5,6 +5,8 @@
5
5
  * for the SpecForge CLI.
6
6
  */
7
7
  export * from './types.js';
8
+ export * from './agent-teams.types.js';
9
+ export * from './validation.js';
8
10
  export * from './paths.js';
9
11
  export * from './loader.js';
10
12
  export * from './writer.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
@@ -7,7 +7,14 @@
7
7
  * 3. Global config (~/.specforge/config.json)
8
8
  * 4. Default values (lowest)
9
9
  */
10
- import { GlobalConfig, ProjectConfig, ResolvedConfig } from './types.js';
10
+ import { GlobalConfig, ResolvedConfig } from './types.js';
11
+ import type { SpecforgeJsonConfig, ActiveSpecification, MonorepoConfig, AgentTeamsConfig } from './agent-teams.types.js';
12
+ /**
13
+ * AgentTeamsConfig with all defaults applied (all fields required).
14
+ */
15
+ export type ResolvedAgentTeamsConfig = Required<Omit<AgentTeamsConfig, 'validationCommands'>> & {
16
+ validationCommands?: AgentTeamsConfig['validationCommands'];
17
+ };
11
18
  /**
12
19
  * Load global configuration from ~/.specforge/config.json
13
20
  *
@@ -37,7 +44,7 @@ export declare function loadGlobalConfig(): GlobalConfig;
37
44
  * }
38
45
  * ```
39
46
  */
40
- export declare function loadProjectConfig(): ProjectConfig | null;
47
+ export declare function loadProjectConfig(): SpecforgeJsonConfig | null;
41
48
  /**
42
49
  * Resolve final configuration from all sources
43
50
  *
@@ -95,4 +102,31 @@ export declare function getProjectId(): string | null;
95
102
  * @returns Specification ID or null
96
103
  */
97
104
  export declare function getSpecificationId(): string | null;
105
+ /**
106
+ * Get Agent Teams config with defaults merged.
107
+ *
108
+ * Always returns a fully-resolved config object — never null.
109
+ * Partial configs are merged with defaults via spread operator.
110
+ *
111
+ * @param config - Parsed project config (or null for all defaults)
112
+ * @returns Resolved Agent Teams config with all defaults applied
113
+ */
114
+ export declare function getAgentTeamsConfig(config: SpecforgeJsonConfig | null): ResolvedAgentTeamsConfig;
115
+ /**
116
+ * Get the active specification from config.
117
+ *
118
+ * @param config - Parsed project config
119
+ * @returns ActiveSpecification if set, null otherwise
120
+ */
121
+ export declare function getActiveSpecification(config: SpecforgeJsonConfig | null): ActiveSpecification | null;
122
+ /**
123
+ * Get monorepo config with defaults merged.
124
+ *
125
+ * Returns null if the monorepo section is not present at all.
126
+ * If present (even partially), merges with defaults.
127
+ *
128
+ * @param config - Parsed project config
129
+ * @returns MonorepoConfig with defaults applied, or null if section absent
130
+ */
131
+ export declare function getMonorepoConfig(config: SpecforgeJsonConfig | null): MonorepoConfig | null;
98
132
  //# sourceMappingURL=loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/cli/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,cAAc,EAKf,MAAM,YAAY,CAAC;AAMpB;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CA2B/C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,GAAG,IAAI,CA0BxD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,IAAI,cAAc,CA0E9C;AASD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAGzC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAG5C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAGlD"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/cli/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,YAAY,EACZ,cAAc,EAKf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAchC;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,GAAG;IAC9F,kBAAkB,CAAC,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;CAC7D,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CA2B/C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,IAAI,mBAAmB,GAAG,IAAI,CAiC9D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,IAAI,cAAc,CA0E9C;AASD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAGzC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAG5C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAGlD;AAMD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,GAAG,wBAAwB,CAchG;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,GAAG,mBAAmB,GAAG,IAAI,CAErG;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,GAAG,cAAc,GAAG,IAAI,CAY3F"}
@@ -9,7 +9,9 @@
9
9
  */
10
10
  import fs from 'node:fs';
11
11
  import { CONFIG_DEFAULTS, CONFIG_ENV_VARS, } from './types.js';
12
+ import { AGENT_TEAMS_DEFAULTS, MONOREPO_DEFAULTS, } from './agent-teams.types.js';
12
13
  import { getGlobalConfigPath, findProjectConfigPath, } from './paths.js';
14
+ import { validateSpecforgeJson, formatValidationErrors, } from './validation.js';
13
15
  /**
14
16
  * Load global configuration from ~/.specforge/config.json
15
17
  *
@@ -77,6 +79,12 @@ export function loadProjectConfig() {
77
79
  console.warn(`Warning: ${configPath} is not a valid config object`);
78
80
  return null;
79
81
  }
82
+ // Validate Agent Teams config sections
83
+ const validation = validateSpecforgeJson(parsed);
84
+ if (!validation.valid) {
85
+ const lines = formatValidationErrors(validation.errors);
86
+ console.warn(`Warning: Invalid config in ${configPath}:\n${lines.join('\n')}`);
87
+ }
80
88
  return parsed;
81
89
  }
82
90
  catch (error) {
@@ -234,4 +242,61 @@ export function getSpecificationId() {
234
242
  const config = resolveConfig();
235
243
  return config.specificationId;
236
244
  }
245
+ // ---------------------------------------------------------------------------
246
+ // Agent Teams config helpers
247
+ // ---------------------------------------------------------------------------
248
+ /**
249
+ * Get Agent Teams config with defaults merged.
250
+ *
251
+ * Always returns a fully-resolved config object — never null.
252
+ * Partial configs are merged with defaults via spread operator.
253
+ *
254
+ * @param config - Parsed project config (or null for all defaults)
255
+ * @returns Resolved Agent Teams config with all defaults applied
256
+ */
257
+ export function getAgentTeamsConfig(config) {
258
+ const partial = config?.agentTeams;
259
+ return {
260
+ enabled: partial?.enabled ?? AGENT_TEAMS_DEFAULTS.enabled,
261
+ strategy: partial?.strategy ?? AGENT_TEAMS_DEFAULTS.strategy,
262
+ maxParallelTeams: partial?.maxParallelTeams ?? AGENT_TEAMS_DEFAULTS.maxParallelTeams,
263
+ maxTokensPerWorker: partial?.maxTokensPerWorker ?? AGENT_TEAMS_DEFAULTS.maxTokensPerWorker,
264
+ branchPrefix: partial?.branchPrefix ?? AGENT_TEAMS_DEFAULTS.branchPrefix,
265
+ branchPattern: partial?.branchPattern ?? AGENT_TEAMS_DEFAULTS.branchPattern,
266
+ autoValidate: partial?.autoValidate ?? AGENT_TEAMS_DEFAULTS.autoValidate,
267
+ timeoutMinutes: partial?.timeoutMinutes ?? AGENT_TEAMS_DEFAULTS.timeoutMinutes,
268
+ escalationPolicy: partial?.escalationPolicy ?? AGENT_TEAMS_DEFAULTS.escalationPolicy,
269
+ ...(partial?.validationCommands ? { validationCommands: partial.validationCommands } : {}),
270
+ };
271
+ }
272
+ /**
273
+ * Get the active specification from config.
274
+ *
275
+ * @param config - Parsed project config
276
+ * @returns ActiveSpecification if set, null otherwise
277
+ */
278
+ export function getActiveSpecification(config) {
279
+ return config?.activeSpecification ?? null;
280
+ }
281
+ /**
282
+ * Get monorepo config with defaults merged.
283
+ *
284
+ * Returns null if the monorepo section is not present at all.
285
+ * If present (even partially), merges with defaults.
286
+ *
287
+ * @param config - Parsed project config
288
+ * @returns MonorepoConfig with defaults applied, or null if section absent
289
+ */
290
+ export function getMonorepoConfig(config) {
291
+ const partial = config?.monorepo;
292
+ if (!partial) {
293
+ return null;
294
+ }
295
+ return {
296
+ detected: partial.detected ?? MONOREPO_DEFAULTS.detected,
297
+ tool: partial.tool ?? MONOREPO_DEFAULTS.tool,
298
+ workspaces: partial.workspaces ?? [...MONOREPO_DEFAULTS.workspaces],
299
+ rootDir: partial.rootDir ?? MONOREPO_DEFAULTS.rootDir,
300
+ };
301
+ }
237
302
  //# sourceMappingURL=loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/cli/config/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/cli/config/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Config Schema Validation
3
+ *
4
+ * Validates the extended .specforge.json configuration schema.
5
+ * Each section is validated independently — absent sections are
6
+ * considered valid (all sections are optional).
7
+ *
8
+ * Uses manual validation (no external libs) to match existing patterns.
9
+ */
10
+ /**
11
+ * A single validation error with field path and expected values.
12
+ */
13
+ export interface ValidationError {
14
+ /** Dot-separated field path (e.g., "agentTeams.strategy") */
15
+ field: string;
16
+ /** Human-readable error message including expected values */
17
+ message: string;
18
+ /** The actual value that failed validation */
19
+ value: unknown;
20
+ }
21
+ /**
22
+ * Result of a validation operation.
23
+ */
24
+ export interface ValidationResult {
25
+ /** Whether all validations passed */
26
+ valid: boolean;
27
+ /** List of validation errors (empty when valid) */
28
+ errors: ValidationError[];
29
+ }
30
+ /**
31
+ * Validate the `agentTeams` config section.
32
+ *
33
+ * Returns valid:true if the section is absent/undefined.
34
+ * Only validates fields that are present (all are optional).
35
+ */
36
+ export declare function validateAgentTeamsConfig(config: unknown): ValidationResult;
37
+ /**
38
+ * Validate the `activeSpecification` config section.
39
+ *
40
+ * Returns valid:true if the section is absent/undefined.
41
+ * When present, `id`, `title`, and `activatedAt` are required.
42
+ */
43
+ export declare function validateActiveSpecification(config: unknown): ValidationResult;
44
+ /**
45
+ * Validate the `monorepo` config section.
46
+ *
47
+ * Returns valid:true if the section is absent/undefined.
48
+ * Validates tool enum, workspaces array structure, and path formats.
49
+ */
50
+ export declare function validateMonorepoConfig(config: unknown): ValidationResult;
51
+ /**
52
+ * Validate the entire .specforge.json config for Agent Teams sections.
53
+ *
54
+ * Orchestrates sub-validators and aggregates all errors.
55
+ * Only validates the new Agent Teams sections — existing ProjectConfig
56
+ * fields are validated elsewhere.
57
+ *
58
+ * @param config - Raw parsed JSON object from .specforge.json
59
+ * @returns Combined validation result from all sections
60
+ */
61
+ export declare function validateSpecforgeJson(config: unknown): ValidationResult;
62
+ /**
63
+ * Format validation errors into human-readable lines.
64
+ *
65
+ * @param errors - Array of validation errors
66
+ * @returns Formatted error strings, one per line
67
+ */
68
+ export declare function formatValidationErrors(errors: ValidationError[]): string[];
69
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/cli/config/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qCAAqC;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,mDAAmD;IACnD,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AA6DD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CA2E1E;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CA0C7E;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAkExE;AAMD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAiBvE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CAK1E"}