@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.
- package/dist/cli/commands/index.d.ts +2 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +2 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +184 -2
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/init.types.d.ts +37 -0
- package/dist/cli/commands/init.types.d.ts.map +1 -1
- package/dist/cli/commands/init.types.js +18 -0
- package/dist/cli/commands/init.types.js.map +1 -1
- package/dist/cli/commands/plan.d.ts +18 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +154 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/plan.types.d.ts +60 -0
- package/dist/cli/commands/plan.types.d.ts.map +1 -0
- package/dist/cli/commands/plan.types.js +8 -0
- package/dist/cli/commands/plan.types.js.map +1 -0
- package/dist/cli/commands/spec-activate.d.ts +29 -0
- package/dist/cli/commands/spec-activate.d.ts.map +1 -0
- package/dist/cli/commands/spec-activate.js +155 -0
- package/dist/cli/commands/spec-activate.js.map +1 -0
- package/dist/cli/commands/spec-activate.types.d.ts +24 -0
- package/dist/cli/commands/spec-activate.types.d.ts.map +1 -0
- package/dist/cli/commands/spec-activate.types.js +8 -0
- package/dist/cli/commands/spec-activate.types.js.map +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +89 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/status.types.d.ts +2 -0
- package/dist/cli/commands/status.types.d.ts.map +1 -1
- package/dist/cli/commands/status.types.js.map +1 -1
- package/dist/cli/config/agent-teams.types.d.ts +194 -0
- package/dist/cli/config/agent-teams.types.d.ts.map +1 -0
- package/dist/cli/config/agent-teams.types.js +36 -0
- package/dist/cli/config/agent-teams.types.js.map +1 -0
- package/dist/cli/config/index.d.ts +2 -0
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/config/index.js +2 -0
- package/dist/cli/config/index.js.map +1 -1
- package/dist/cli/config/loader.d.ts +36 -2
- package/dist/cli/config/loader.d.ts.map +1 -1
- package/dist/cli/config/loader.js +65 -0
- package/dist/cli/config/loader.js.map +1 -1
- package/dist/cli/config/validation.d.ts +69 -0
- package/dist/cli/config/validation.d.ts.map +1 -0
- package/dist/cli/config/validation.js +295 -0
- package/dist/cli/config/validation.js.map +1 -0
- package/dist/cli/config/writer.d.ts +39 -0
- package/dist/cli/config/writer.d.ts.map +1 -1
- package/dist/cli/config/writer.js +58 -0
- package/dist/cli/config/writer.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/lib/index.d.ts +3 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +3 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/monorepo-detector.d.ts +31 -0
- package/dist/lib/monorepo-detector.d.ts.map +1 -0
- package/dist/lib/monorepo-detector.js +271 -0
- package/dist/lib/monorepo-detector.js.map +1 -0
- package/dist/lib/prompt-generator.d.ts +65 -0
- package/dist/lib/prompt-generator.d.ts.map +1 -0
- package/dist/lib/prompt-generator.js +172 -0
- package/dist/lib/prompt-generator.js.map +1 -0
- package/dist/lib/strategy-analyzer.d.ts +59 -0
- package/dist/lib/strategy-analyzer.d.ts.map +1 -0
- package/dist/lib/strategy-analyzer.js +137 -0
- package/dist/lib/strategy-analyzer.js.map +1 -0
- package/dist/tools/core/context-helper.d.ts +22 -0
- package/dist/tools/core/context-helper.d.ts.map +1 -1
- package/dist/tools/core/context-helper.js +37 -1
- package/dist/tools/core/context-helper.js.map +1 -1
- package/dist/tools/core/workspace-files.d.ts +49 -0
- package/dist/tools/core/workspace-files.d.ts.map +1 -0
- package/dist/tools/core/workspace-files.js +259 -0
- package/dist/tools/core/workspace-files.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +147 -0
- package/dist/tools/index.js.map +1 -1
- package/package.json +3 -2
- package/src/cli/templates/agents/content/core/sfag-implementer.ts +113 -0
- package/src/cli/templates/agents/content/core/sfag-orchestrator.ts +107 -0
- package/src/cli/templates/agents/content/core/sfag-spec-creator.ts +126 -0
- package/src/cli/templates/agents/content/core/sfag-ticket-implementer.ts +132 -0
- package/src/cli/templates/agents/content/research/sfag-package-researcher.ts +153 -0
- package/src/cli/templates/agents/content/task-type/sfag-api-implementer.ts +132 -0
- package/src/cli/templates/agents/content/task-type/sfag-docs-writer.ts +183 -0
- package/src/cli/templates/agents/content/task-type/sfag-frontend-builder.ts +141 -0
- package/src/cli/templates/agents/content/task-type/sfag-infra-architect.ts +149 -0
- package/src/cli/templates/agents/content/task-type/sfag-schema-designer.ts +132 -0
- package/src/cli/templates/agents/content/task-type/sfag-test-writer.ts +171 -0
- package/src/cli/templates/agents/index.ts +74 -0
- package/src/cli/templates/commands.ts +179 -0
- package/src/cli/templates/content/sf-autonomous.ts +78 -0
- package/src/cli/templates/content/sf-blockers.ts +68 -0
- package/src/cli/templates/content/sf-commit.ts +78 -0
- package/src/cli/templates/content/sf-context.ts +64 -0
- package/src/cli/templates/content/sf-create-epics.ts +129 -0
- package/src/cli/templates/content/sf-create-spec.ts +136 -0
- package/src/cli/templates/content/sf-create-tickets.ts +148 -0
- package/src/cli/templates/content/sf-epic.ts +69 -0
- package/src/cli/templates/content/sf-help.ts +61 -0
- package/src/cli/templates/content/sf-import.ts +88 -0
- package/src/cli/templates/content/sf-init.ts +61 -0
- package/src/cli/templates/content/sf-next.ts +67 -0
- package/src/cli/templates/content/sf-reset.ts +78 -0
- package/src/cli/templates/content/sf-review.ts +67 -0
- package/src/cli/templates/content/sf-search.ts +64 -0
- package/src/cli/templates/content/sf-status.ts +67 -0
- package/src/cli/templates/content/sf-ticket.ts +76 -0
- package/src/cli/templates/content/sf-validate.ts +78 -0
- package/src/cli/templates/index.ts +16 -0
- package/src/cli/templates/skills/specforge-conventions.md +109 -0
- package/src/cli/templates/skills/specforge-orchestrator.md +401 -0
- package/src/cli/templates/skills/specforge-validator.md +122 -0
- 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"}
|
|
@@ -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"}
|
package/dist/cli/config/index.js
CHANGED
|
@@ -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,
|
|
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():
|
|
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,
|
|
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":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,
|
|
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"}
|