@llm-dev-ops/agentics-cli 2.7.26 → 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/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 +13 -20
- 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 +12 -1
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-chain.d.ts","sourceRoot":"","sources":["../../src/pipeline/auto-chain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAYH,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,wBAAwB,CAAC;AAYhC,OAAO,EAgBL,KAAK,2BAA2B,EAEjC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAGL,KAAK,OAAO,IAAI,WAAW,EAE3B,KAAK,YAAY,EAClB,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-chain.d.ts","sourceRoot":"","sources":["../../src/pipeline/auto-chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,7 @@ import { detectExecutionMode, commitScenarioFiles, } from './execution-context.j
|
|
|
26
26
|
import { initSwarm, dispatchPhaseAgents, storePhaseArtifacts, reviewPhaseOutput, recordPhaseFailure, shutdownSwarm, invokeRufloCodingSwarm, PHASE_AGENTS, } from './swarm-orchestrator.js';
|
|
27
27
|
import { executeRufloPhaseSwarm, buildPhase2Tasks, buildPhase3Tasks, buildPhase4Tasks, buildPhase5Tasks, buildPhase6Tasks, collectPhase2Artifacts, collectPhase3Artifacts, collectPhase4Artifacts, collectPhase5Artifacts, collectPhase6Artifacts, extractPhase1AgentCode, runPrimaryPhaseExecution, } from './ruflo-phase-executor.js';
|
|
28
28
|
import { gatePhaseInputs, determineBlockedPhases, } from './gate/phase-dependency-gate.js';
|
|
29
|
+
import { pipelineHeartbeat } from '../cli/ui/heartbeat.js';
|
|
29
30
|
/** Extract path strings from any manifest artifact array (objects with .path or plain strings). */
|
|
30
31
|
function extractArtifactPaths(artifacts) {
|
|
31
32
|
return artifacts.map(a => typeof a === 'string' ? a : a.path);
|
|
@@ -2496,11 +2497,16 @@ export async function executeAutoChain(traceId, options = {}) {
|
|
|
2496
2497
|
catch {
|
|
2497
2498
|
// Best-effort
|
|
2498
2499
|
}
|
|
2500
|
+
// ADR-PIPELINE-099 D3 — process-wide heartbeat. Lives until executeAutoChain
|
|
2501
|
+
// returns (try/finally below). Replaces the per-call heartbeat in
|
|
2502
|
+
// executeNaturalLanguageRoute that died when auto-chain took over.
|
|
2503
|
+
pipelineHeartbeat.start('agentics ask');
|
|
2504
|
+
pipelineHeartbeat.setPhase('Phase 2 — booting');
|
|
2499
2505
|
console.error('');
|
|
2500
2506
|
console.error('='.repeat(72));
|
|
2501
2507
|
console.error(' ENTERPRISE PROTOTYPE PIPELINE');
|
|
2502
2508
|
console.error(` Mode: ${mode === 'development' ? 'DEVELOPMENT (sandbox — no repo mutation)' : 'PROJECT (current branch)'}`);
|
|
2503
|
-
console.error(' Auto-chaining Phases 2-
|
|
2509
|
+
console.error(' Auto-chaining Phases 2-7 from simulation artifacts');
|
|
2504
2510
|
console.error('='.repeat(72));
|
|
2505
2511
|
console.error('');
|
|
2506
2512
|
// ── Check ruflo availability (optional — pipeline works without it) ──
|
|
@@ -2541,6 +2547,7 @@ export async function executeAutoChain(traceId, options = {}) {
|
|
|
2541
2547
|
console.error('-'.repeat(72));
|
|
2542
2548
|
console.error(' >> Phase 2: Deep Research');
|
|
2543
2549
|
console.error('-'.repeat(72));
|
|
2550
|
+
pipelineHeartbeat.setPhase('Phase 2 — Deep Research');
|
|
2544
2551
|
const phase2HasContent = fs.existsSync(phaseDir)
|
|
2545
2552
|
&& fs.existsSync(path.join(phaseDir, 'research-dossier.json'))
|
|
2546
2553
|
&& fs.existsSync(path.join(phaseDir, 'sparc', 'sparc-combined.json'));
|
|
@@ -2618,6 +2625,7 @@ export async function executeAutoChain(traceId, options = {}) {
|
|
|
2618
2625
|
console.error('');
|
|
2619
2626
|
console.error('-'.repeat(72));
|
|
2620
2627
|
console.error(' >> Phase 3: SPARC + London School TDD');
|
|
2628
|
+
pipelineHeartbeat.setPhase('Phase 3 — SPARC + London TDD');
|
|
2621
2629
|
console.error('-'.repeat(72));
|
|
2622
2630
|
const phase3HasContent = fs.existsSync(phaseDir)
|
|
2623
2631
|
&& fs.existsSync(path.join(phaseDir, 'sparc', 'sparc-combined.json'));
|
|
@@ -2735,6 +2743,7 @@ export async function executeAutoChain(traceId, options = {}) {
|
|
|
2735
2743
|
console.error('');
|
|
2736
2744
|
console.error('-'.repeat(72));
|
|
2737
2745
|
console.error(' >> Phase 4: Architecture Decision Records + Domain-Driven Design');
|
|
2746
|
+
pipelineHeartbeat.setPhase('Phase 4 — ADRs + DDDs');
|
|
2738
2747
|
console.error('-'.repeat(72));
|
|
2739
2748
|
// Only skip if phase4 has actual ADR + DDD content (not just an empty dir from a failed prior run)
|
|
2740
2749
|
const phase4HasContent = fs.existsSync(phaseDir)
|
|
@@ -2916,10 +2925,11 @@ export async function executeAutoChain(traceId, options = {}) {
|
|
|
2916
2925
|
} // close ADR-PIPELINE-093 phase4-adrs-ddd gate-else
|
|
2917
2926
|
}
|
|
2918
2927
|
}
|
|
2919
|
-
// ── Phase 4.5: Generate implementation prompts by reading ADR + DDD files ──
|
|
2928
|
+
// ── Phase 4.5 (Phase 5a): Generate implementation prompts by reading ADR + DDD files ──
|
|
2920
2929
|
// Simple approach: gather all ADR/DDD/SPARC files, hand them to ruflo swarm,
|
|
2921
2930
|
// let the LLM read them and produce coherent implementation prompts.
|
|
2922
2931
|
{
|
|
2932
|
+
pipelineHeartbeat.setPhase('Phase 5a — Implementation Prompts');
|
|
2923
2933
|
const promptsDir = path.join(runDir, 'prompts');
|
|
2924
2934
|
// Check if prompts already exist from a prior run
|
|
2925
2935
|
const promptsExist = fs.existsSync(promptsDir)
|
|
@@ -3866,6 +3876,7 @@ services when the pilot validates the approach.
|
|
|
3866
3876
|
console.error('');
|
|
3867
3877
|
console.error('-'.repeat(72));
|
|
3868
3878
|
console.error(` >> Phase 5: Build (Code Generation + Deployable Service) [${detectedLanguage}]`);
|
|
3879
|
+
pipelineHeartbeat.setPhase(`Phase 5 — Build [${detectedLanguage}]`);
|
|
3869
3880
|
console.error('-'.repeat(72));
|
|
3870
3881
|
const phase5HasContent = fs.existsSync(phaseDir)
|
|
3871
3882
|
&& fs.existsSync(path.join(phaseDir, 'phase5-manifest.json'));
|
|
@@ -3880,6 +3891,38 @@ services when the pilot validates the approach.
|
|
|
3880
3891
|
fs.rmSync(phaseDir, { recursive: true, force: true });
|
|
3881
3892
|
}
|
|
3882
3893
|
const agentResults = await dispatchPhaseAgents(PHASE_AGENTS[5], traceId, runDir, scenarioQuery);
|
|
3894
|
+
// ADR-PIPELINE-099 D3 — surface every implementation prompt so the user
|
|
3895
|
+
// sees the work plan instead of staring at a silent terminal. The build
|
|
3896
|
+
// itself remains a single Ruflo swarm invocation, but each prompt that
|
|
3897
|
+
// feeds it is now visible up front and announced in the heartbeat.
|
|
3898
|
+
try {
|
|
3899
|
+
const promptsDir = path.join(runDir, 'prompts');
|
|
3900
|
+
if (fs.existsSync(promptsDir)) {
|
|
3901
|
+
const implFiles = fs.readdirSync(promptsDir)
|
|
3902
|
+
.filter(f => /^impl-\d+-.+\.md$/.test(f))
|
|
3903
|
+
.sort();
|
|
3904
|
+
if (implFiles.length > 0) {
|
|
3905
|
+
console.error(` [PROMPTS] Build plan: ${implFiles.length} implementation prompts queued`);
|
|
3906
|
+
for (let i = 0; i < implFiles.length; i++) {
|
|
3907
|
+
const f = implFiles[i];
|
|
3908
|
+
// Read just the title line from frontmatter so the visible
|
|
3909
|
+
// line is human-readable, not a slug.
|
|
3910
|
+
let title = f;
|
|
3911
|
+
try {
|
|
3912
|
+
const head = fs.readFileSync(path.join(promptsDir, f), 'utf-8').split('\n').slice(0, 12);
|
|
3913
|
+
const titleLine = head.find(l => l.startsWith('title:'));
|
|
3914
|
+
if (titleLine)
|
|
3915
|
+
title = titleLine.replace(/^title:\s*"?/, '').replace(/"?\s*$/, '');
|
|
3916
|
+
}
|
|
3917
|
+
catch { /* keep filename */ }
|
|
3918
|
+
const titleTrim = title.length > 70 ? title.slice(0, 67) + '…' : title;
|
|
3919
|
+
console.error(` ${String(i + 1).padStart(2, ' ')}/${implFiles.length} ${f} ${titleTrim}`);
|
|
3920
|
+
}
|
|
3921
|
+
pipelineHeartbeat.setActivity(`build: handing ${implFiles.length} prompts to ruflo swarm`);
|
|
3922
|
+
}
|
|
3923
|
+
}
|
|
3924
|
+
}
|
|
3925
|
+
catch { /* visibility is best-effort */ }
|
|
3883
3926
|
// Ruflo swarm: build production-ready application in cooperation with agentics agents
|
|
3884
3927
|
const rufloP5Dir = path.join(runDir, '.ruflo-cache', 'phase5');
|
|
3885
3928
|
const rufloResult = executeRufloPhaseSwarm({
|
|
@@ -3958,6 +4001,7 @@ services when the pilot validates the approach.
|
|
|
3958
4001
|
console.error('');
|
|
3959
4002
|
console.error('-'.repeat(72));
|
|
3960
4003
|
console.error(' >> Phase 6: ERP Surface Push + Project Materialization');
|
|
4004
|
+
pipelineHeartbeat.setPhase('Phase 6 — ERP Push + Materialization');
|
|
3961
4005
|
console.error('-'.repeat(72));
|
|
3962
4006
|
// Only skip if phase6 has actual registration content (not just an empty dir from a failed prior run)
|
|
3963
4007
|
const phase6HasContent = fs.existsSync(phaseDir)
|
|
@@ -4015,6 +4059,7 @@ services when the pilot validates the approach.
|
|
|
4015
4059
|
console.error('');
|
|
4016
4060
|
console.error('-'.repeat(72));
|
|
4017
4061
|
console.error(' >> Phase 7: Consulting Deliverables (85-document enterprise decision pack)');
|
|
4062
|
+
pipelineHeartbeat.setPhase('Phase 7 — Consulting Deliverables');
|
|
4018
4063
|
console.error('-'.repeat(72));
|
|
4019
4064
|
try {
|
|
4020
4065
|
const { executePhase7 } = await import('./phase7/coordinator.js');
|
|
@@ -4058,6 +4103,40 @@ services when the pilot validates the approach.
|
|
|
4058
4103
|
outputDir: phaseDir,
|
|
4059
4104
|
...(errorDetail ? { error: errorDetail } : {}),
|
|
4060
4105
|
});
|
|
4106
|
+
// ADR-PIPELINE-099 D5 (project-co-located deliverables) — the
|
|
4107
|
+
// executive deliverables MUST land in the project directory itself,
|
|
4108
|
+
// not behind the runDir artifact wall (~/.agentics/runs/...). Copy
|
|
4109
|
+
// <runDir>/deliverables/ into:
|
|
4110
|
+
// 1. <runDir>/phase6/project/deliverables/ — so the materialized
|
|
4111
|
+
// project tree always carries them
|
|
4112
|
+
// 2. <options.outputDir>/deliverables/ — when the user asked for
|
|
4113
|
+
// a specific output directory
|
|
4114
|
+
// 3. <repoRoot>/deliverables/ — when running in 'project' mode,
|
|
4115
|
+
// so the deliverables land alongside the just-built code
|
|
4116
|
+
const deliverablesSrc = phaseDir; // == <runDir>/deliverables
|
|
4117
|
+
if (fs.existsSync(deliverablesSrc)) {
|
|
4118
|
+
const targets = [];
|
|
4119
|
+
const phase6ProjectDir = path.join(runDir, 'phase6', 'project');
|
|
4120
|
+
if (fs.existsSync(phase6ProjectDir)) {
|
|
4121
|
+
targets.push(path.join(phase6ProjectDir, 'deliverables'));
|
|
4122
|
+
}
|
|
4123
|
+
if (options.outputDir) {
|
|
4124
|
+
targets.push(path.join(path.resolve(options.outputDir), 'deliverables'));
|
|
4125
|
+
}
|
|
4126
|
+
if (mode === 'project' && execCtx.repoRoot) {
|
|
4127
|
+
targets.push(path.join(execCtx.repoRoot, 'deliverables'));
|
|
4128
|
+
}
|
|
4129
|
+
for (const target of targets) {
|
|
4130
|
+
try {
|
|
4131
|
+
const counts = copyDirRecursive(deliverablesSrc, target);
|
|
4132
|
+
console.error(` [P7] Co-located deliverables → ${target} (${counts.copied} new, ${counts.skipped} unchanged)`);
|
|
4133
|
+
}
|
|
4134
|
+
catch (copyErr) {
|
|
4135
|
+
const m = copyErr instanceof Error ? copyErr.message : String(copyErr);
|
|
4136
|
+
console.error(` [P7] [WARN] failed to copy deliverables to ${target}: ${m}`);
|
|
4137
|
+
}
|
|
4138
|
+
}
|
|
4139
|
+
}
|
|
4061
4140
|
}
|
|
4062
4141
|
}
|
|
4063
4142
|
catch (err) {
|
|
@@ -4190,6 +4269,7 @@ services when the pilot validates the approach.
|
|
|
4190
4269
|
shutdownSwarm(traceId, false, totalTiming);
|
|
4191
4270
|
}
|
|
4192
4271
|
catch { /* best-effort */ }
|
|
4272
|
+
pipelineHeartbeat.stop();
|
|
4193
4273
|
process.exit(1);
|
|
4194
4274
|
}
|
|
4195
4275
|
}
|
|
@@ -4203,6 +4283,10 @@ services when the pilot validates the approach.
|
|
|
4203
4283
|
// ADR-PIPELINE-093 §Rule 3 (c): blocked phases threaded into the
|
|
4204
4284
|
// result so the final `agentics ask` banner can warn the user.
|
|
4205
4285
|
gateAcc.blocked.map(b => ({ phase: b.phase, missing: [...b.missing] })));
|
|
4286
|
+
// ADR-PIPELINE-099 D3 — clear the heartbeat status line before printing
|
|
4287
|
+
// the final summary so the bottom-of-screen frame doesn't overlap the
|
|
4288
|
+
// summary banner.
|
|
4289
|
+
pipelineHeartbeat.stop();
|
|
4206
4290
|
printFinalSummary(result);
|
|
4207
4291
|
return result;
|
|
4208
4292
|
}
|