@llm-dev-ops/agentics-cli 2.7.25 → 2.7.27
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/index.js +9 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ui/heartbeat.d.ts +101 -0
- package/dist/cli/ui/heartbeat.d.ts.map +1 -0
- package/dist/cli/ui/heartbeat.js +275 -0
- package/dist/cli/ui/heartbeat.js.map +1 -0
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +17 -0
- package/dist/commands/agents.js.map +1 -1
- package/dist/pipeline/auto-chain.d.ts.map +1 -1
- package/dist/pipeline/auto-chain.js +86 -2
- package/dist/pipeline/auto-chain.js.map +1 -1
- package/dist/pipeline/local-fallback/phase5a-local-fallback.d.ts +18 -21
- package/dist/pipeline/local-fallback/phase5a-local-fallback.d.ts.map +1 -1
- package/dist/pipeline/local-fallback/phase5a-local-fallback.js +287 -94
- package/dist/pipeline/local-fallback/phase5a-local-fallback.js.map +1 -1
- package/dist/pipeline/phases/prompt-generator.js +65 -136
- package/dist/pipeline/phases/prompt-generator.js.map +1 -1
- package/dist/pipeline/ruflo-phase-executor.d.ts.map +1 -1
- package/dist/pipeline/ruflo-phase-executor.js +23 -18
- package/dist/pipeline/ruflo-phase-executor.js.map +1 -1
- package/dist/synthesis/agent-fleet-decomposer.d.ts +100 -0
- package/dist/synthesis/agent-fleet-decomposer.d.ts.map +1 -0
- package/dist/synthesis/agent-fleet-decomposer.js +550 -0
- package/dist/synthesis/agent-fleet-decomposer.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,550 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADR-PIPELINE-099 D1.3 — Agent-fleet decomposition strategy for Phase 5a.
|
|
3
|
+
*
|
|
4
|
+
* Walks `<runDir>/agent-responses.json` to extract structured outputs from
|
|
5
|
+
* the copilot fleet (decomposer.sub_objectives, planner.steps,
|
|
6
|
+
* clarifier.assumptions/clarifications) and combines them with scenario
|
|
7
|
+
* domain entities, success criteria, and risk register entries to produce
|
|
8
|
+
* a `BuildableUnit[]` shape — one unit per decomposer sub-objective (or
|
|
9
|
+
* planner step, when the decomposer is silent).
|
|
10
|
+
*
|
|
11
|
+
* Each unit carries:
|
|
12
|
+
* - the source agent + index that produced it (for trace)
|
|
13
|
+
* - acceptance criteria (the Definition of Done for that prompt)
|
|
14
|
+
* - dependencies (named by id of other units)
|
|
15
|
+
* - complexity score (used by the prompt template to set scope)
|
|
16
|
+
* - load-bearing assumptions surfaced from the clarifier
|
|
17
|
+
* - guardrails surfaced from scenario.constraints + risk_register
|
|
18
|
+
*
|
|
19
|
+
* The downstream `phase5aGenerateFromAgentFleet` strategy converts each
|
|
20
|
+
* unit into one `prompts/impl-NNN-<slug>.md` file. The contract is:
|
|
21
|
+
* ≥6 units when the decomposer produced ≥6 sub_objectives; otherwise
|
|
22
|
+
* tier-3 returns whatever it has and the caller back-fills with tier-4.
|
|
23
|
+
*
|
|
24
|
+
* No external deps — pure file IO + JSON parsing.
|
|
25
|
+
*/
|
|
26
|
+
import * as fs from 'node:fs';
|
|
27
|
+
import * as path from 'node:path';
|
|
28
|
+
/**
|
|
29
|
+
* Decompose Phase-1 fleet output into buildable units. Returns an empty
|
|
30
|
+
* units array (with whatever context is available) when no agent
|
|
31
|
+
* decomposition is recoverable — the caller decides whether to fall through
|
|
32
|
+
* to the success-criterion fallback.
|
|
33
|
+
*/
|
|
34
|
+
export function decomposeAgentFleet(runDir, scenarioQuery) {
|
|
35
|
+
const agentRows = readAgentResponses(runDir);
|
|
36
|
+
const decomposer = pickAgent(agentRows, 'copilot', 'decomposer');
|
|
37
|
+
const planner = pickAgent(agentRows, 'copilot', 'planner');
|
|
38
|
+
const clarifier = pickAgent(agentRows, 'copilot', 'clarifier');
|
|
39
|
+
const scenario = readScenario(runDir);
|
|
40
|
+
const riskAssessment = readRiskAssessment(runDir);
|
|
41
|
+
// ── Build context ────────────────────────────────────────────────────────
|
|
42
|
+
const assumptions = extractStringArray(clarifier, ['assumptions']) ?? [];
|
|
43
|
+
const clarifications = extractStringArray(clarifier, ['clarifications']) ?? [];
|
|
44
|
+
const successCriteria = extractStringArray(scenario, ['success_criteria', 'successCriteria']) ?? [];
|
|
45
|
+
const constraints = extractStringArray(scenario, ['constraints']) ?? [];
|
|
46
|
+
const domainEntities = extractStringArray(scenario, ['domain_entities', 'domainEntities']) ?? [];
|
|
47
|
+
const systems = extractStringArray(scenario, ['systems']) ?? [];
|
|
48
|
+
const risks = extractRiskRegister(riskAssessment);
|
|
49
|
+
const context = {
|
|
50
|
+
assumptions: assumptions.slice(0, 8),
|
|
51
|
+
clarifications: clarifications.slice(0, 6),
|
|
52
|
+
successCriteria,
|
|
53
|
+
constraints,
|
|
54
|
+
domainEntities,
|
|
55
|
+
systems,
|
|
56
|
+
risks: risks.slice(0, 6),
|
|
57
|
+
scenarioQuery,
|
|
58
|
+
};
|
|
59
|
+
const subObjectives = extractObjectArray(decomposer, ['sub_objectives', 'subObjectives']) ?? [];
|
|
60
|
+
const plannerSteps = extractObjectArray(planner, ['steps']) ?? [];
|
|
61
|
+
const units = [];
|
|
62
|
+
// Tier-3 happy path: decomposer produced sub-objectives. Use them.
|
|
63
|
+
if (subObjectives.length > 0) {
|
|
64
|
+
subObjectives.forEach((so, idx) => {
|
|
65
|
+
const title = String(so.title ?? `Build unit ${idx + 1}`).trim();
|
|
66
|
+
const slug = slugify(title) || `unit-${idx + 1}`;
|
|
67
|
+
const id = `unit-${pad3(idx + 1)}-${slug}`;
|
|
68
|
+
const complexity = parseComplexity(so.complexity);
|
|
69
|
+
const acceptance = (Array.isArray(so.acceptance_criteria)
|
|
70
|
+
? so.acceptance_criteria.map(String).filter(Boolean)
|
|
71
|
+
: []);
|
|
72
|
+
const deps = resolveDeps(so.dependencies, units);
|
|
73
|
+
units.push({
|
|
74
|
+
id,
|
|
75
|
+
slug,
|
|
76
|
+
title,
|
|
77
|
+
description: String(so.description ?? title),
|
|
78
|
+
complexity,
|
|
79
|
+
acceptanceCriteria: acceptance,
|
|
80
|
+
dependencies: deps,
|
|
81
|
+
tier: classifyTier(title, so.description ?? ''),
|
|
82
|
+
sourceAgent: 'copilot/decomposer',
|
|
83
|
+
sourceIndex: idx,
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
// Supplement with planner steps that have no decomposer counterpart.
|
|
88
|
+
if (plannerSteps.length > 0 && units.length < plannerSteps.length) {
|
|
89
|
+
plannerSteps.forEach((step, idx) => {
|
|
90
|
+
const title = String(step.name ?? step.title ?? `Plan step ${idx + 1}`).trim();
|
|
91
|
+
// De-duplicate against existing units by slug.
|
|
92
|
+
const slug = slugify(title) || `step-${idx + 1}`;
|
|
93
|
+
if (units.some(u => u.slug === slug))
|
|
94
|
+
return;
|
|
95
|
+
const id = `unit-${pad3(units.length + 1)}-${slug}`;
|
|
96
|
+
const acceptance = Array.isArray(step.criteria)
|
|
97
|
+
? step.criteria.map(String).filter(Boolean)
|
|
98
|
+
: (typeof step.criteria === 'string' && step.criteria.trim() ? [step.criteria] : []);
|
|
99
|
+
const deps = resolveDeps(step.dependencies, units);
|
|
100
|
+
units.push({
|
|
101
|
+
id,
|
|
102
|
+
slug,
|
|
103
|
+
title,
|
|
104
|
+
description: String(step.description ?? title),
|
|
105
|
+
complexity: parseComplexity(step.effort),
|
|
106
|
+
acceptanceCriteria: acceptance,
|
|
107
|
+
dependencies: deps,
|
|
108
|
+
tier: classifyTier(title, step.description ?? ''),
|
|
109
|
+
sourceAgent: 'copilot/planner',
|
|
110
|
+
sourceIndex: idx,
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// Final ordering: foundation → integration → domain → presentation → validation
|
|
115
|
+
const tierOrder = {
|
|
116
|
+
foundation: 0,
|
|
117
|
+
integration: 1,
|
|
118
|
+
domain: 2,
|
|
119
|
+
presentation: 3,
|
|
120
|
+
validation: 4,
|
|
121
|
+
};
|
|
122
|
+
units.sort((a, b) => tierOrder[a.tier] - tierOrder[b.tier]);
|
|
123
|
+
// Re-id after sort so order matches numeric prefix.
|
|
124
|
+
const ordered = units.map((u, idx) => ({
|
|
125
|
+
...u,
|
|
126
|
+
id: `unit-${pad3(idx + 1)}-${u.slug}`,
|
|
127
|
+
}));
|
|
128
|
+
return {
|
|
129
|
+
units: ordered,
|
|
130
|
+
context,
|
|
131
|
+
provenance: {
|
|
132
|
+
decomposerCount: subObjectives.length,
|
|
133
|
+
plannerCount: plannerSteps.length,
|
|
134
|
+
clarifierAssumptionsCount: assumptions.length,
|
|
135
|
+
riskRegisterCount: risks.length,
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Render the markdown body for one BuildableUnit. Each prompt:
|
|
141
|
+
* - cites its source agent in frontmatter (`generator: agent-fleet`)
|
|
142
|
+
* - inlines acceptance criteria as Definition of Done
|
|
143
|
+
* - lists dependencies by unit id
|
|
144
|
+
* - inlines top assumptions / constraints / risks as guardrails
|
|
145
|
+
* - inlines the scenario query verbatim so context is self-contained
|
|
146
|
+
*/
|
|
147
|
+
export function renderUnitPromptMarkdown(unit, unitOrder, totalUnits, context,
|
|
148
|
+
/** ADRs that match this unit by keyword overlap. May be empty. */
|
|
149
|
+
governingAdrs,
|
|
150
|
+
/** DDD bounded contexts that match this unit by keyword overlap. May be empty. */
|
|
151
|
+
governingContexts) {
|
|
152
|
+
const lines = [];
|
|
153
|
+
// Frontmatter — declares provenance + dependencies.
|
|
154
|
+
lines.push('---');
|
|
155
|
+
lines.push(`id: ${unit.id}`);
|
|
156
|
+
lines.push(`title: ${escapeYamlString(unit.title)}`);
|
|
157
|
+
lines.push(`order: ${unitOrder}`);
|
|
158
|
+
lines.push(`tier: ${unit.tier}`);
|
|
159
|
+
lines.push(`complexity: ${unit.complexity}`);
|
|
160
|
+
lines.push(`generator: agent-fleet`);
|
|
161
|
+
lines.push(`source_agent: ${unit.sourceAgent}`);
|
|
162
|
+
lines.push(`source_index: ${unit.sourceIndex}`);
|
|
163
|
+
lines.push(`degraded_mode: false`);
|
|
164
|
+
lines.push(`quality: directional`);
|
|
165
|
+
if (unit.dependencies.length === 0) {
|
|
166
|
+
lines.push(`dependency_root: true`);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
lines.push(`dependencies:`);
|
|
170
|
+
for (const d of unit.dependencies)
|
|
171
|
+
lines.push(` - ${d}`);
|
|
172
|
+
}
|
|
173
|
+
if (governingAdrs.length > 0) {
|
|
174
|
+
lines.push(`adrs:`);
|
|
175
|
+
for (const a of governingAdrs)
|
|
176
|
+
lines.push(` - ${a.id}`);
|
|
177
|
+
}
|
|
178
|
+
if (governingContexts.length > 0) {
|
|
179
|
+
lines.push(`bounded_contexts:`);
|
|
180
|
+
for (const c of governingContexts)
|
|
181
|
+
lines.push(` - ${c.name}`);
|
|
182
|
+
}
|
|
183
|
+
lines.push('---');
|
|
184
|
+
lines.push('');
|
|
185
|
+
lines.push(`# Build Step ${unitOrder} of ${totalUnits}: ${unit.title}`);
|
|
186
|
+
lines.push('');
|
|
187
|
+
lines.push(`**Tier:** ${unit.tier} · **Complexity:** ${unit.complexity}/5 · **Source:** \`${unit.sourceAgent}\` (output index ${unit.sourceIndex})`);
|
|
188
|
+
lines.push('');
|
|
189
|
+
// Project context — every prompt must be self-contained.
|
|
190
|
+
if (context.scenarioQuery) {
|
|
191
|
+
lines.push('## Project Brief');
|
|
192
|
+
lines.push('');
|
|
193
|
+
lines.push(context.scenarioQuery);
|
|
194
|
+
lines.push('');
|
|
195
|
+
}
|
|
196
|
+
// Step description.
|
|
197
|
+
lines.push('## What This Step Builds');
|
|
198
|
+
lines.push('');
|
|
199
|
+
lines.push(unit.description);
|
|
200
|
+
lines.push('');
|
|
201
|
+
// Dependencies — name what's already been built.
|
|
202
|
+
if (unit.dependencies.length > 0) {
|
|
203
|
+
lines.push('## Depends On (already built)');
|
|
204
|
+
lines.push('');
|
|
205
|
+
for (const d of unit.dependencies)
|
|
206
|
+
lines.push(`- \`${d}\` — import its public API`);
|
|
207
|
+
lines.push('');
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
lines.push('## Depends On');
|
|
211
|
+
lines.push('');
|
|
212
|
+
lines.push('_Foundation step — no prior dependencies. Build the core types and interfaces that later steps will import._');
|
|
213
|
+
lines.push('');
|
|
214
|
+
}
|
|
215
|
+
// Governing ADRs — required for ADR-099 D1: every prompt cites its ADR.
|
|
216
|
+
if (governingAdrs.length > 0) {
|
|
217
|
+
lines.push(`## Governing Architecture Decisions (${governingAdrs.length})`);
|
|
218
|
+
lines.push('');
|
|
219
|
+
for (const a of governingAdrs) {
|
|
220
|
+
lines.push(`### ${a.id}: ${a.title}`);
|
|
221
|
+
if (a.decision) {
|
|
222
|
+
lines.push('');
|
|
223
|
+
lines.push(`**Decision:** ${a.decision.split('\n')[0]}`);
|
|
224
|
+
}
|
|
225
|
+
lines.push('');
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Governing DDD contexts.
|
|
229
|
+
if (governingContexts.length > 0) {
|
|
230
|
+
lines.push(`## Governing Domain Contexts (${governingContexts.length})`);
|
|
231
|
+
lines.push('');
|
|
232
|
+
for (const c of governingContexts) {
|
|
233
|
+
lines.push(`### ${c.name}`);
|
|
234
|
+
if (c.description) {
|
|
235
|
+
lines.push('');
|
|
236
|
+
lines.push(c.description);
|
|
237
|
+
}
|
|
238
|
+
if (c.aggregates && c.aggregates.length > 0) {
|
|
239
|
+
lines.push('');
|
|
240
|
+
lines.push('**Aggregates:**');
|
|
241
|
+
for (const ag of c.aggregates) {
|
|
242
|
+
lines.push(`- **${ag.name}**${ag.root ? ` (root: ${ag.root})` : ''}`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (c.commands && c.commands.length > 0) {
|
|
246
|
+
lines.push('');
|
|
247
|
+
lines.push(`**Commands:** ${c.commands.join(', ')}`);
|
|
248
|
+
}
|
|
249
|
+
if (c.queries && c.queries.length > 0) {
|
|
250
|
+
lines.push(`**Queries:** ${c.queries.join(', ')}`);
|
|
251
|
+
}
|
|
252
|
+
if (c.domainEvents && c.domainEvents.length > 0) {
|
|
253
|
+
lines.push(`**Events:** ${c.domainEvents.join(', ')}`);
|
|
254
|
+
}
|
|
255
|
+
lines.push('');
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// Definition of Done.
|
|
259
|
+
if (unit.acceptanceCriteria.length > 0) {
|
|
260
|
+
lines.push('## Definition of Done (acceptance criteria)');
|
|
261
|
+
lines.push('');
|
|
262
|
+
for (const ac of unit.acceptanceCriteria)
|
|
263
|
+
lines.push(`- ${ac}`);
|
|
264
|
+
lines.push('');
|
|
265
|
+
}
|
|
266
|
+
// Load-bearing assumptions — surface from clarifier so the implementer
|
|
267
|
+
// doesn't unknowingly violate one.
|
|
268
|
+
if (context.assumptions.length > 0) {
|
|
269
|
+
lines.push('## Load-Bearing Assumptions (from copilot/clarifier)');
|
|
270
|
+
lines.push('');
|
|
271
|
+
lines.push('> Violating any of these requires a callout in the impl plan, not silent breakage.');
|
|
272
|
+
lines.push('');
|
|
273
|
+
for (const a of context.assumptions.slice(0, 6))
|
|
274
|
+
lines.push(`- ${a}`);
|
|
275
|
+
lines.push('');
|
|
276
|
+
}
|
|
277
|
+
// Guardrails — constraints + top risks.
|
|
278
|
+
if (context.constraints.length > 0 || context.risks.length > 0) {
|
|
279
|
+
lines.push('## Guardrails');
|
|
280
|
+
lines.push('');
|
|
281
|
+
if (context.constraints.length > 0) {
|
|
282
|
+
lines.push('**Constraints:**');
|
|
283
|
+
for (const c of context.constraints.slice(0, 6))
|
|
284
|
+
lines.push(`- ${c}`);
|
|
285
|
+
lines.push('');
|
|
286
|
+
}
|
|
287
|
+
if (context.risks.length > 0) {
|
|
288
|
+
lines.push('**Risks to mitigate in this slice:**');
|
|
289
|
+
for (const r of context.risks.slice(0, 4)) {
|
|
290
|
+
lines.push(`- ${r.description}${r.severity ? ` _(${r.severity})_` : ''}`);
|
|
291
|
+
}
|
|
292
|
+
lines.push('');
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// Implementation expectations — pulled from the broader pipeline conventions
|
|
296
|
+
// so this prompt is interchangeable with the SPARC/ADR/DDD-tier prompts.
|
|
297
|
+
lines.push('## Implementation Expectations');
|
|
298
|
+
lines.push('');
|
|
299
|
+
lines.push('1. Implement only this step\'s scope — do not pre-build downstream units.');
|
|
300
|
+
lines.push('2. Write tests first (London-school TDD); mock dependencies from prior steps.');
|
|
301
|
+
lines.push('3. Real domain logic — no stubs, no TODO scaffolds.');
|
|
302
|
+
lines.push('4. Public API surface MUST be exported so the next unit can import it.');
|
|
303
|
+
lines.push('5. Zero compilation errors. Zero `any`-typed domain values.');
|
|
304
|
+
lines.push('6. Production patterns: structured logging, typed errors, input validation, graceful shutdown.');
|
|
305
|
+
lines.push('');
|
|
306
|
+
return lines.join('\n');
|
|
307
|
+
}
|
|
308
|
+
// ── Helpers ────────────────────────────────────────────────────────────────
|
|
309
|
+
function readAgentResponses(runDir) {
|
|
310
|
+
const candidates = [
|
|
311
|
+
path.join(runDir, 'agent-responses.json'),
|
|
312
|
+
path.join(runDir, 'phase1', 'agent-responses.json'),
|
|
313
|
+
];
|
|
314
|
+
for (const p of candidates) {
|
|
315
|
+
try {
|
|
316
|
+
const raw = fs.readFileSync(p, 'utf-8');
|
|
317
|
+
const parsed = JSON.parse(raw);
|
|
318
|
+
if (parsed && Array.isArray(parsed.agents))
|
|
319
|
+
return parsed.agents;
|
|
320
|
+
}
|
|
321
|
+
catch {
|
|
322
|
+
// try next
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return [];
|
|
326
|
+
}
|
|
327
|
+
function readScenario(runDir) {
|
|
328
|
+
for (const rel of ['scenario.json', 'phase1/scenario.json']) {
|
|
329
|
+
try {
|
|
330
|
+
const p = path.join(runDir, rel);
|
|
331
|
+
const raw = fs.readFileSync(p, 'utf-8');
|
|
332
|
+
const parsed = JSON.parse(raw);
|
|
333
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
334
|
+
return parsed;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
catch { /* try next */ }
|
|
338
|
+
}
|
|
339
|
+
return undefined;
|
|
340
|
+
}
|
|
341
|
+
function readRiskAssessment(runDir) {
|
|
342
|
+
for (const rel of ['risk-assessment.json', 'phase1/risk-assessment.json']) {
|
|
343
|
+
try {
|
|
344
|
+
const p = path.join(runDir, rel);
|
|
345
|
+
const raw = fs.readFileSync(p, 'utf-8');
|
|
346
|
+
const parsed = JSON.parse(raw);
|
|
347
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
348
|
+
return parsed;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
catch { /* try next */ }
|
|
352
|
+
}
|
|
353
|
+
return undefined;
|
|
354
|
+
}
|
|
355
|
+
function pickAgent(rows, domain, agent) {
|
|
356
|
+
const row = rows.find(r => r.domain === domain && r.agent === agent && r.status && r.status >= 200 && r.status < 300);
|
|
357
|
+
if (!row || !row.response_truncated)
|
|
358
|
+
return undefined;
|
|
359
|
+
// Strip truncation marker if present.
|
|
360
|
+
let raw = row.response_truncated.trim();
|
|
361
|
+
if (raw.endsWith('... [truncated]')) {
|
|
362
|
+
raw = raw.slice(0, -'... [truncated]'.length);
|
|
363
|
+
}
|
|
364
|
+
// The truncated payload is JSON-encoded; parse defensively.
|
|
365
|
+
try {
|
|
366
|
+
const parsed = JSON.parse(raw);
|
|
367
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
368
|
+
return parsed;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
// Common case — truncation cut mid-string. Walk back to the last } and retry.
|
|
373
|
+
const lastBrace = raw.lastIndexOf('}');
|
|
374
|
+
if (lastBrace > 0) {
|
|
375
|
+
try {
|
|
376
|
+
const parsed = JSON.parse(raw.slice(0, lastBrace + 1));
|
|
377
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
378
|
+
return parsed;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
catch { /* give up */ }
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return undefined;
|
|
385
|
+
}
|
|
386
|
+
function extractStringArray(obj, keys) {
|
|
387
|
+
if (!obj)
|
|
388
|
+
return undefined;
|
|
389
|
+
for (const key of keys) {
|
|
390
|
+
// Direct array of strings.
|
|
391
|
+
const v = obj[key];
|
|
392
|
+
if (Array.isArray(v)) {
|
|
393
|
+
const strings = [];
|
|
394
|
+
for (const item of v) {
|
|
395
|
+
if (typeof item === 'string')
|
|
396
|
+
strings.push(item);
|
|
397
|
+
else if (item && typeof item === 'object') {
|
|
398
|
+
// Could be {description: ...} or {assumption: ...} etc.
|
|
399
|
+
const o = item;
|
|
400
|
+
for (const subKey of ['description', 'assumption', 'text', 'criterion', 'constraint', 'name', 'title']) {
|
|
401
|
+
if (typeof o[subKey] === 'string') {
|
|
402
|
+
strings.push(o[subKey]);
|
|
403
|
+
break;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
if (strings.length > 0)
|
|
409
|
+
return strings;
|
|
410
|
+
}
|
|
411
|
+
// Sometimes nested under outputs.
|
|
412
|
+
const outputs = obj['outputs'];
|
|
413
|
+
if (outputs && typeof outputs === 'object' && !Array.isArray(outputs)) {
|
|
414
|
+
const nested = outputs[key];
|
|
415
|
+
if (Array.isArray(nested)) {
|
|
416
|
+
const strings = [];
|
|
417
|
+
for (const item of nested) {
|
|
418
|
+
if (typeof item === 'string')
|
|
419
|
+
strings.push(item);
|
|
420
|
+
else if (item && typeof item === 'object') {
|
|
421
|
+
const o = item;
|
|
422
|
+
for (const subKey of ['description', 'assumption', 'text', 'criterion', 'constraint', 'name', 'title']) {
|
|
423
|
+
if (typeof o[subKey] === 'string') {
|
|
424
|
+
strings.push(o[subKey]);
|
|
425
|
+
break;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
if (strings.length > 0)
|
|
431
|
+
return strings;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
return undefined;
|
|
436
|
+
}
|
|
437
|
+
function extractObjectArray(obj, keys) {
|
|
438
|
+
if (!obj)
|
|
439
|
+
return undefined;
|
|
440
|
+
for (const key of keys) {
|
|
441
|
+
const v = obj[key];
|
|
442
|
+
if (Array.isArray(v))
|
|
443
|
+
return v;
|
|
444
|
+
const outputs = obj['outputs'];
|
|
445
|
+
if (outputs && typeof outputs === 'object' && !Array.isArray(outputs)) {
|
|
446
|
+
const nested = outputs[key];
|
|
447
|
+
if (Array.isArray(nested))
|
|
448
|
+
return nested;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
return undefined;
|
|
452
|
+
}
|
|
453
|
+
function extractRiskRegister(risk) {
|
|
454
|
+
if (!risk)
|
|
455
|
+
return [];
|
|
456
|
+
const candidates = [];
|
|
457
|
+
for (const key of ['risk_register', 'risks', 'register']) {
|
|
458
|
+
const v = risk[key];
|
|
459
|
+
if (Array.isArray(v))
|
|
460
|
+
candidates.push(...v);
|
|
461
|
+
}
|
|
462
|
+
const out = [];
|
|
463
|
+
for (const item of candidates) {
|
|
464
|
+
if (typeof item === 'string') {
|
|
465
|
+
out.push({ description: item });
|
|
466
|
+
}
|
|
467
|
+
else if (item && typeof item === 'object') {
|
|
468
|
+
const o = item;
|
|
469
|
+
const desc = o['description'] ?? o['risk'] ?? o['name'] ?? o['title'];
|
|
470
|
+
if (typeof desc === 'string' && desc.trim().length > 0) {
|
|
471
|
+
const sev = o['severity'] ?? o['impact'] ?? o['priority'];
|
|
472
|
+
out.push({
|
|
473
|
+
description: desc,
|
|
474
|
+
severity: typeof sev === 'string' ? sev : undefined,
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
return out;
|
|
480
|
+
}
|
|
481
|
+
function parseComplexity(v) {
|
|
482
|
+
if (typeof v === 'number' && Number.isFinite(v)) {
|
|
483
|
+
return Math.max(1, Math.min(5, Math.round(v)));
|
|
484
|
+
}
|
|
485
|
+
if (typeof v === 'string') {
|
|
486
|
+
const lower = v.toLowerCase().trim();
|
|
487
|
+
if (lower === 'low' || lower === 'small' || lower === 'simple')
|
|
488
|
+
return 2;
|
|
489
|
+
if (lower === 'medium' || lower === 'moderate')
|
|
490
|
+
return 3;
|
|
491
|
+
if (lower === 'high' || lower === 'large' || lower === 'complex')
|
|
492
|
+
return 4;
|
|
493
|
+
if (lower === 'critical' || lower === 'extreme')
|
|
494
|
+
return 5;
|
|
495
|
+
const n = Number.parseInt(lower, 10);
|
|
496
|
+
if (!Number.isNaN(n))
|
|
497
|
+
return Math.max(1, Math.min(5, n));
|
|
498
|
+
}
|
|
499
|
+
return 3;
|
|
500
|
+
}
|
|
501
|
+
function classifyTier(title, description) {
|
|
502
|
+
const t = `${title} ${description}`.toLowerCase();
|
|
503
|
+
if (/(foundation|setup|bootstrap|domain model|persistence|database|schema|infrastructure|core types|baseline)/.test(t)) {
|
|
504
|
+
return 'foundation';
|
|
505
|
+
}
|
|
506
|
+
if (/(integration|webhook|erp|sap|oracle|salesforce|servicenow|api client|adapter|connector|external)/.test(t)) {
|
|
507
|
+
return 'integration';
|
|
508
|
+
}
|
|
509
|
+
if (/(ui|dashboard|frontend|react|vue|svelte|page|component|presentation|report|visualization)/.test(t)) {
|
|
510
|
+
return 'presentation';
|
|
511
|
+
}
|
|
512
|
+
if (/(test|validation|smoke|hypercare|pilot|qa|verify|verification)/.test(t)) {
|
|
513
|
+
return 'validation';
|
|
514
|
+
}
|
|
515
|
+
return 'domain';
|
|
516
|
+
}
|
|
517
|
+
function resolveDeps(raw, existing) {
|
|
518
|
+
if (!Array.isArray(raw))
|
|
519
|
+
return [];
|
|
520
|
+
const out = [];
|
|
521
|
+
for (const r of raw) {
|
|
522
|
+
if (typeof r === 'number' && Number.isInteger(r) && r > 0 && r <= existing.length) {
|
|
523
|
+
out.push(existing[r - 1].id);
|
|
524
|
+
}
|
|
525
|
+
else if (typeof r === 'string') {
|
|
526
|
+
// Try to match an existing unit by slug or id substring.
|
|
527
|
+
const slug = slugify(r);
|
|
528
|
+
const match = existing.find(u => u.slug === slug || u.id.endsWith(slug) || u.id === r);
|
|
529
|
+
if (match)
|
|
530
|
+
out.push(match.id);
|
|
531
|
+
else
|
|
532
|
+
out.push(slug);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
return out;
|
|
536
|
+
}
|
|
537
|
+
function pad3(n) {
|
|
538
|
+
return String(n).padStart(3, '0');
|
|
539
|
+
}
|
|
540
|
+
function slugify(text) {
|
|
541
|
+
return text.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, '').slice(0, 60);
|
|
542
|
+
}
|
|
543
|
+
function escapeYamlString(s) {
|
|
544
|
+
// Conservative — wrap in quotes if it contains anything that could confuse a YAML parser.
|
|
545
|
+
if (/[:#&*!|>'"%@`?[\]{},]/.test(s)) {
|
|
546
|
+
return `"${s.replace(/"/g, '\\"').replace(/\\/g, '\\\\')}"`;
|
|
547
|
+
}
|
|
548
|
+
return s;
|
|
549
|
+
}
|
|
550
|
+
//# sourceMappingURL=agent-fleet-decomposer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-fleet-decomposer.js","sourceRoot":"","sources":["../../src/synthesis/agent-fleet-decomposer.ts"],"names":[],"mappings":"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"}
|