@llm-dev-ops/agentics-cli 1.5.9 → 1.5.11
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/README.md +478 -148
- package/dist/bundled-agents/manifest.json +1 -0
- package/dist/commands/phase4.d.ts.map +1 -1
- package/dist/commands/phase4.js +4 -2
- package/dist/commands/phase4.js.map +1 -1
- package/dist/commands/phase6.d.ts.map +1 -1
- package/dist/commands/phase6.js +4 -2
- package/dist/commands/phase6.js.map +1 -1
- package/dist/mcp/mcp-server.js +11 -10
- package/dist/mcp/mcp-server.js.map +1 -1
- package/dist/pipeline/auto-chain.d.ts +5 -0
- package/dist/pipeline/auto-chain.d.ts.map +1 -1
- package/dist/pipeline/auto-chain.js +131 -47
- package/dist/pipeline/auto-chain.js.map +1 -1
- package/dist/pipeline/enterprise/artifact-assembler.d.ts +64 -0
- package/dist/pipeline/enterprise/artifact-assembler.d.ts.map +1 -0
- package/dist/pipeline/enterprise/artifact-assembler.js +542 -0
- package/dist/pipeline/enterprise/artifact-assembler.js.map +1 -0
- package/dist/pipeline/enterprise/artifact-renderers.d.ts +42 -0
- package/dist/pipeline/enterprise/artifact-renderers.d.ts.map +1 -0
- package/dist/pipeline/enterprise/artifact-renderers.js +513 -0
- package/dist/pipeline/enterprise/artifact-renderers.js.map +1 -0
- package/dist/pipeline/enterprise/code-resolver.d.ts +43 -0
- package/dist/pipeline/enterprise/code-resolver.d.ts.map +1 -0
- package/dist/pipeline/enterprise/code-resolver.js +219 -0
- package/dist/pipeline/enterprise/code-resolver.js.map +1 -0
- package/dist/pipeline/enterprise/decision-graph-client.d.ts +171 -0
- package/dist/pipeline/enterprise/decision-graph-client.d.ts.map +1 -0
- package/dist/pipeline/enterprise/decision-graph-client.js +222 -0
- package/dist/pipeline/enterprise/decision-graph-client.js.map +1 -0
- package/dist/pipeline/enterprise/decision-graph-memory.d.ts +104 -0
- package/dist/pipeline/enterprise/decision-graph-memory.d.ts.map +1 -0
- package/dist/pipeline/enterprise/decision-graph-memory.js +292 -0
- package/dist/pipeline/enterprise/decision-graph-memory.js.map +1 -0
- package/dist/pipeline/enterprise/decision-graph.d.ts +237 -0
- package/dist/pipeline/enterprise/decision-graph.d.ts.map +1 -0
- package/dist/pipeline/enterprise/decision-graph.js +654 -0
- package/dist/pipeline/enterprise/decision-graph.js.map +1 -0
- package/dist/pipeline/enterprise/index.d.ts +40 -0
- package/dist/pipeline/enterprise/index.d.ts.map +1 -0
- package/dist/pipeline/enterprise/index.js +43 -0
- package/dist/pipeline/enterprise/index.js.map +1 -0
- package/dist/pipeline/enterprise/pass-executor.d.ts +33 -0
- package/dist/pipeline/enterprise/pass-executor.d.ts.map +1 -0
- package/dist/pipeline/enterprise/pass-executor.js +459 -0
- package/dist/pipeline/enterprise/pass-executor.js.map +1 -0
- package/dist/pipeline/enterprise/pass-registry.d.ts +19 -0
- package/dist/pipeline/enterprise/pass-registry.d.ts.map +1 -0
- package/dist/pipeline/enterprise/pass-registry.js +243 -0
- package/dist/pipeline/enterprise/pass-registry.js.map +1 -0
- package/dist/pipeline/enterprise/pass2-simulation.d.ts +130 -0
- package/dist/pipeline/enterprise/pass2-simulation.d.ts.map +1 -0
- package/dist/pipeline/enterprise/pass2-simulation.js +691 -0
- package/dist/pipeline/enterprise/pass2-simulation.js.map +1 -0
- package/dist/pipeline/enterprise/pass4-governance.d.ts +195 -0
- package/dist/pipeline/enterprise/pass4-governance.d.ts.map +1 -0
- package/dist/pipeline/enterprise/pass4-governance.js +748 -0
- package/dist/pipeline/enterprise/pass4-governance.js.map +1 -0
- package/dist/pipeline/enterprise/pass5-decision.d.ts +90 -0
- package/dist/pipeline/enterprise/pass5-decision.d.ts.map +1 -0
- package/dist/pipeline/enterprise/pass5-decision.js +487 -0
- package/dist/pipeline/enterprise/pass5-decision.js.map +1 -0
- package/dist/pipeline/enterprise/pass7-observability.d.ts +198 -0
- package/dist/pipeline/enterprise/pass7-observability.d.ts.map +1 -0
- package/dist/pipeline/enterprise/pass7-observability.js +636 -0
- package/dist/pipeline/enterprise/pass7-observability.js.map +1 -0
- package/dist/pipeline/enterprise/pipeline-orchestrator.d.ts +29 -0
- package/dist/pipeline/enterprise/pipeline-orchestrator.d.ts.map +1 -0
- package/dist/pipeline/enterprise/pipeline-orchestrator.js +283 -0
- package/dist/pipeline/enterprise/pipeline-orchestrator.js.map +1 -0
- package/dist/pipeline/enterprise/provenance-tracker.d.ts +135 -0
- package/dist/pipeline/enterprise/provenance-tracker.d.ts.map +1 -0
- package/dist/pipeline/enterprise/provenance-tracker.js +437 -0
- package/dist/pipeline/enterprise/provenance-tracker.js.map +1 -0
- package/dist/pipeline/enterprise/trace-middleware.d.ts +37 -0
- package/dist/pipeline/enterprise/trace-middleware.d.ts.map +1 -0
- package/dist/pipeline/enterprise/trace-middleware.js +188 -0
- package/dist/pipeline/enterprise/trace-middleware.js.map +1 -0
- package/dist/pipeline/enterprise/types.d.ts +199 -0
- package/dist/pipeline/enterprise/types.d.ts.map +1 -0
- package/dist/pipeline/enterprise/types.js +30 -0
- package/dist/pipeline/enterprise/types.js.map +1 -0
- package/dist/pipeline/phase2/phases/adr-generator.d.ts.map +1 -1
- package/dist/pipeline/phase2/phases/adr-generator.js +56 -8
- package/dist/pipeline/phase2/phases/adr-generator.js.map +1 -1
- package/dist/pipeline/phase3/phases/test-generator.d.ts.map +1 -1
- package/dist/pipeline/phase3/phases/test-generator.js +53 -0
- package/dist/pipeline/phase3/phases/test-generator.js.map +1 -1
- package/dist/pipeline/phase4/phases/deployment-generator.d.ts.map +1 -1
- package/dist/pipeline/phase4/phases/deployment-generator.js +147 -0
- package/dist/pipeline/phase4/phases/deployment-generator.js.map +1 -1
- package/dist/pipeline/phase4-adrs/phase4-adrs-coordinator.d.ts.map +1 -1
- package/dist/pipeline/phase4-adrs/phase4-adrs-coordinator.js +52 -1
- package/dist/pipeline/phase4-adrs/phase4-adrs-coordinator.js.map +1 -1
- package/dist/pipeline/phase6/phases/deployment-finalizer.d.ts.map +1 -1
- package/dist/pipeline/phase6/phases/deployment-finalizer.js +226 -0
- package/dist/pipeline/phase6/phases/deployment-finalizer.js.map +1 -1
- package/dist/pipeline/phase6/phases/service-registrar.d.ts +1 -1
- package/dist/pipeline/phase6/phases/service-registrar.d.ts.map +1 -1
- package/dist/pipeline/phase6/phases/service-registrar.js +47 -7
- package/dist/pipeline/phase6/phases/service-registrar.js.map +1 -1
- package/dist/pipeline/swarm-orchestrator.d.ts.map +1 -1
- package/dist/pipeline/swarm-orchestrator.js +47 -19
- package/dist/pipeline/swarm-orchestrator.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provenance Tracker — Runtime Tracing System (ADR-039)
|
|
3
|
+
*
|
|
4
|
+
* Records every agent invocation during a pipeline execution as a
|
|
5
|
+
* structured TraceRecord. Produces the Provenance Manifest (Artifact #15).
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Structured trace recording with code provenance
|
|
9
|
+
* - DecisionGraph namespace storage (provenance:{executionId}:{traceId})
|
|
10
|
+
* - Audit query helpers (who/what/when/how/reproducibility)
|
|
11
|
+
* - Rich manifest generation with all ADR-039 sections
|
|
12
|
+
* - Load/rehydrate from persisted records
|
|
13
|
+
* - Filtering by agent, pass, workstream, status
|
|
14
|
+
* - Privacy-safe: metadata only, no payload duplication
|
|
15
|
+
* - Version discrepancy detection
|
|
16
|
+
*/
|
|
17
|
+
import * as fs from 'node:fs';
|
|
18
|
+
import * as path from 'node:path';
|
|
19
|
+
import { resolveCodeProvenance, resolveGitCommit } from './code-resolver.js';
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Provenance Key Format (ADR-039)
|
|
22
|
+
// ============================================================================
|
|
23
|
+
/** Generate the provenance namespace key for a trace record. */
|
|
24
|
+
export function provenanceKey(executionId, traceId) {
|
|
25
|
+
return `provenance:${executionId}:${traceId}`;
|
|
26
|
+
}
|
|
27
|
+
/** Generate tags for a trace record's memory entry. */
|
|
28
|
+
export function provenanceTags(record) {
|
|
29
|
+
return [
|
|
30
|
+
`agent:${record.agent.domain}/${record.agent.agent}`,
|
|
31
|
+
`pass:${record.pass}`,
|
|
32
|
+
`execution:${record.executionId}`,
|
|
33
|
+
`status:${record.outputs.status}`,
|
|
34
|
+
`workstream:${record.workstream}`,
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
// ============================================================================
|
|
38
|
+
// Provenance Tracker
|
|
39
|
+
// ============================================================================
|
|
40
|
+
export class ProvenanceTracker {
|
|
41
|
+
records = [];
|
|
42
|
+
executionId;
|
|
43
|
+
sequenceCounter = 0;
|
|
44
|
+
constructor(executionId) {
|
|
45
|
+
this.executionId = executionId;
|
|
46
|
+
}
|
|
47
|
+
/** Get the execution ID. */
|
|
48
|
+
getExecutionId() {
|
|
49
|
+
return this.executionId;
|
|
50
|
+
}
|
|
51
|
+
// --------------------------------------------------------------------------
|
|
52
|
+
// Recording
|
|
53
|
+
// --------------------------------------------------------------------------
|
|
54
|
+
/** Record an agent invocation as a trace record with full code provenance. */
|
|
55
|
+
recordInvocation(params) {
|
|
56
|
+
this.sequenceCounter++;
|
|
57
|
+
const codeProv = resolveCodeProvenance(params.agent);
|
|
58
|
+
const record = {
|
|
59
|
+
traceId: `trace-${this.sequenceCounter}-${Date.now()}`,
|
|
60
|
+
executionId: this.executionId,
|
|
61
|
+
agent: {
|
|
62
|
+
...params.agent,
|
|
63
|
+
agentId: `${params.agent.domain}/${params.agent.agent}`,
|
|
64
|
+
version: codeProv.version,
|
|
65
|
+
},
|
|
66
|
+
pass: params.pass,
|
|
67
|
+
passName: params.passName,
|
|
68
|
+
workstream: params.workstream,
|
|
69
|
+
startedAt: params.startedAt,
|
|
70
|
+
completedAt: params.completedAt,
|
|
71
|
+
durationMs: params.durationMs,
|
|
72
|
+
codeProvenance: codeProv,
|
|
73
|
+
inputs: {
|
|
74
|
+
decisionGraphNodes: [...params.inputNodeIds],
|
|
75
|
+
parameters: {},
|
|
76
|
+
},
|
|
77
|
+
outputs: {
|
|
78
|
+
decisionGraphNodes: [...params.outputNodeIds],
|
|
79
|
+
artifactNumbers: [...params.artifactNumbers],
|
|
80
|
+
status: params.status,
|
|
81
|
+
confidence: params.confidence,
|
|
82
|
+
},
|
|
83
|
+
resources: {
|
|
84
|
+
tokensUsed: params.tokensUsed ?? 0,
|
|
85
|
+
modelUsed: params.modelUsed ?? 'unknown',
|
|
86
|
+
estimatedCost: params.estimatedCost ?? 0,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
this.records.push(record);
|
|
90
|
+
return record;
|
|
91
|
+
}
|
|
92
|
+
/** Convenience: record from an AgentInvocationResult. */
|
|
93
|
+
recordFromResult(result, passName, workstream, outputNodeIds = []) {
|
|
94
|
+
return this.recordInvocation({
|
|
95
|
+
agent: result.agent,
|
|
96
|
+
pass: result.pass,
|
|
97
|
+
passName,
|
|
98
|
+
workstream,
|
|
99
|
+
startedAt: result.timestamp,
|
|
100
|
+
completedAt: new Date(new Date(result.timestamp).getTime() + result.durationMs).toISOString(),
|
|
101
|
+
durationMs: result.durationMs,
|
|
102
|
+
inputNodeIds: [],
|
|
103
|
+
outputNodeIds,
|
|
104
|
+
artifactNumbers: [],
|
|
105
|
+
status: result.status >= 200 && result.status < 300 ? 'success' : 'failed',
|
|
106
|
+
confidence: result.status >= 200 && result.status < 300 ? 0.85 : 0,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
// --------------------------------------------------------------------------
|
|
110
|
+
// Querying
|
|
111
|
+
// --------------------------------------------------------------------------
|
|
112
|
+
/** Get all trace records. */
|
|
113
|
+
getAllRecords() {
|
|
114
|
+
return this.records;
|
|
115
|
+
}
|
|
116
|
+
/** Get records for a specific pass. */
|
|
117
|
+
getRecordsByPass(pass) {
|
|
118
|
+
return this.records.filter(r => r.pass === pass);
|
|
119
|
+
}
|
|
120
|
+
/** Get records for a specific agent (domain/agent). */
|
|
121
|
+
getRecordsByAgent(domain, agent) {
|
|
122
|
+
return this.records.filter(r => r.agent.domain === domain && r.agent.agent === agent);
|
|
123
|
+
}
|
|
124
|
+
/** Get records for a specific workstream. */
|
|
125
|
+
getRecordsByWorkstream(workstream) {
|
|
126
|
+
return this.records.filter(r => r.workstream === workstream);
|
|
127
|
+
}
|
|
128
|
+
/** Get records by status. */
|
|
129
|
+
getRecordsByStatus(status) {
|
|
130
|
+
return this.records.filter(r => r.outputs.status === status);
|
|
131
|
+
}
|
|
132
|
+
/** Get a specific record by trace ID. */
|
|
133
|
+
getRecordByTraceId(traceId) {
|
|
134
|
+
return this.records.find(r => r.traceId === traceId);
|
|
135
|
+
}
|
|
136
|
+
/** Get total number of unique agents invoked. */
|
|
137
|
+
getUniqueAgentCount() {
|
|
138
|
+
const seen = new Set();
|
|
139
|
+
for (const r of this.records) {
|
|
140
|
+
seen.add(r.agent.agentId);
|
|
141
|
+
}
|
|
142
|
+
return seen.size;
|
|
143
|
+
}
|
|
144
|
+
/** Get total tokens used. */
|
|
145
|
+
getTotalTokens() {
|
|
146
|
+
let total = 0;
|
|
147
|
+
for (const r of this.records) {
|
|
148
|
+
total += r.resources.tokensUsed;
|
|
149
|
+
}
|
|
150
|
+
return total;
|
|
151
|
+
}
|
|
152
|
+
/** Get total estimated cost. */
|
|
153
|
+
getTotalCost() {
|
|
154
|
+
let total = 0;
|
|
155
|
+
for (const r of this.records) {
|
|
156
|
+
total += r.resources.estimatedCost;
|
|
157
|
+
}
|
|
158
|
+
return total;
|
|
159
|
+
}
|
|
160
|
+
/** Get total pipeline duration (sum of all agent durations). */
|
|
161
|
+
getTotalDuration() {
|
|
162
|
+
let total = 0;
|
|
163
|
+
for (const r of this.records) {
|
|
164
|
+
total += r.durationMs;
|
|
165
|
+
}
|
|
166
|
+
return total;
|
|
167
|
+
}
|
|
168
|
+
/** Get the longest-running agent. */
|
|
169
|
+
getLongestAgent() {
|
|
170
|
+
if (this.records.length === 0)
|
|
171
|
+
return undefined;
|
|
172
|
+
let longest = this.records[0];
|
|
173
|
+
for (const r of this.records) {
|
|
174
|
+
if (r.durationMs > longest.durationMs) {
|
|
175
|
+
longest = r;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return { agentId: longest.agent.agentId, durationMs: longest.durationMs };
|
|
179
|
+
}
|
|
180
|
+
// --------------------------------------------------------------------------
|
|
181
|
+
// Audit Queries (ADR-039 Auditability)
|
|
182
|
+
// --------------------------------------------------------------------------
|
|
183
|
+
/** Who made a decision (for a specific trace). */
|
|
184
|
+
auditWho(traceId) {
|
|
185
|
+
const r = this.getRecordByTraceId(traceId);
|
|
186
|
+
if (!r)
|
|
187
|
+
return undefined;
|
|
188
|
+
return {
|
|
189
|
+
agentDomain: r.agent.domain,
|
|
190
|
+
agentName: r.agent.agent,
|
|
191
|
+
agentId: r.agent.agentId,
|
|
192
|
+
role: r.agent.role,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
/** What code was used (for a specific trace). */
|
|
196
|
+
auditWhat(traceId) {
|
|
197
|
+
const r = this.getRecordByTraceId(traceId);
|
|
198
|
+
if (!r)
|
|
199
|
+
return undefined;
|
|
200
|
+
return {
|
|
201
|
+
package: r.codeProvenance.package,
|
|
202
|
+
version: r.codeProvenance.version,
|
|
203
|
+
entryPoint: r.codeProvenance.entryPoint,
|
|
204
|
+
commitHash: r.codeProvenance.commitHash,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/** Reproducibility info (for a specific trace). */
|
|
208
|
+
auditReproducibility(traceId) {
|
|
209
|
+
const r = this.getRecordByTraceId(traceId);
|
|
210
|
+
if (!r)
|
|
211
|
+
return undefined;
|
|
212
|
+
return {
|
|
213
|
+
commitHash: r.codeProvenance.commitHash,
|
|
214
|
+
parameters: r.inputs.parameters,
|
|
215
|
+
inputNodeIds: r.inputs.decisionGraphNodes,
|
|
216
|
+
codePackage: r.codeProvenance.package,
|
|
217
|
+
codeVersion: r.codeProvenance.version,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
// --------------------------------------------------------------------------
|
|
221
|
+
// Statistics
|
|
222
|
+
// --------------------------------------------------------------------------
|
|
223
|
+
/** Compute aggregate provenance statistics. */
|
|
224
|
+
getStatistics() {
|
|
225
|
+
const byPass = {};
|
|
226
|
+
const byStatus = {};
|
|
227
|
+
const byWorkstream = {};
|
|
228
|
+
const packages = new Set();
|
|
229
|
+
for (const r of this.records) {
|
|
230
|
+
byPass[r.pass] = (byPass[r.pass] ?? 0) + 1;
|
|
231
|
+
byStatus[r.outputs.status] = (byStatus[r.outputs.status] ?? 0) + 1;
|
|
232
|
+
byWorkstream[r.workstream] = (byWorkstream[r.workstream] ?? 0) + 1;
|
|
233
|
+
packages.add(r.codeProvenance.package);
|
|
234
|
+
}
|
|
235
|
+
return {
|
|
236
|
+
totalRecords: this.records.length,
|
|
237
|
+
uniqueAgents: this.getUniqueAgentCount(),
|
|
238
|
+
uniquePackages: packages.size,
|
|
239
|
+
totalTokens: this.getTotalTokens(),
|
|
240
|
+
totalCost: this.getTotalCost(),
|
|
241
|
+
totalDurationMs: this.getTotalDuration(),
|
|
242
|
+
byPass,
|
|
243
|
+
byStatus,
|
|
244
|
+
byWorkstream,
|
|
245
|
+
longestAgent: this.getLongestAgent(),
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
// --------------------------------------------------------------------------
|
|
249
|
+
// Manifest Generation (Artifact #15 — ADR-039)
|
|
250
|
+
// --------------------------------------------------------------------------
|
|
251
|
+
/** Generate the Provenance Manifest as a markdown string. */
|
|
252
|
+
generateManifest(params) {
|
|
253
|
+
const now = new Date().toISOString();
|
|
254
|
+
const stats = this.getStatistics();
|
|
255
|
+
const longest = stats.longestAgent;
|
|
256
|
+
// Collect unique packages
|
|
257
|
+
const packages = new Map();
|
|
258
|
+
for (const r of this.records) {
|
|
259
|
+
const pkg = r.codeProvenance.package;
|
|
260
|
+
const existing = packages.get(pkg);
|
|
261
|
+
if (existing) {
|
|
262
|
+
existing.agents.add(r.agent.agent);
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
packages.set(pkg, {
|
|
266
|
+
version: r.codeProvenance.version,
|
|
267
|
+
repository: r.codeProvenance.repository,
|
|
268
|
+
agents: new Set([r.agent.agent]),
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
const lines = [];
|
|
273
|
+
// Header
|
|
274
|
+
lines.push('# Agent & Code Provenance Manifest');
|
|
275
|
+
lines.push(`**Execution ID:** ${this.executionId}`);
|
|
276
|
+
lines.push(`**Date:** ${now}`);
|
|
277
|
+
lines.push(`**Pipeline Duration:** ${formatDuration(stats.totalDurationMs)}`);
|
|
278
|
+
lines.push(`**Total Agents Invoked:** ${this.records.length}`);
|
|
279
|
+
lines.push(`**Unique Agent Types:** ${stats.uniqueAgents}`);
|
|
280
|
+
lines.push(`**Total LLM Tokens Used:** ${stats.totalTokens.toLocaleString()}`);
|
|
281
|
+
lines.push(`**Estimated Pipeline Cost:** $${stats.totalCost.toFixed(4)}`);
|
|
282
|
+
lines.push('');
|
|
283
|
+
// Agent Inventory
|
|
284
|
+
lines.push('## Agent Inventory');
|
|
285
|
+
lines.push('');
|
|
286
|
+
lines.push('| # | Agent | Domain | Pass | Duration | Tokens | Model | Status |');
|
|
287
|
+
lines.push('|---|-------|--------|------|----------|--------|-------|--------|');
|
|
288
|
+
for (let i = 0; i < this.records.length; i++) {
|
|
289
|
+
const r = this.records[i];
|
|
290
|
+
const statusIcon = r.outputs.status === 'success' ? '\u2705' : r.outputs.status === 'partial' ? '\u26a0\ufe0f' : '\u274c';
|
|
291
|
+
lines.push(`| ${i + 1} | ${r.agent.agent} | ${r.agent.domain} | Pass ${r.pass} | ${formatDuration(r.durationMs)} | ${r.resources.tokensUsed.toLocaleString()} | ${r.resources.modelUsed} | ${statusIcon} |`);
|
|
292
|
+
}
|
|
293
|
+
lines.push('');
|
|
294
|
+
// Code Inventory
|
|
295
|
+
lines.push('## Code Inventory');
|
|
296
|
+
lines.push('');
|
|
297
|
+
lines.push('| Package | Version | Repository | Agents Using |');
|
|
298
|
+
lines.push('|---------|---------|------------|-------------|');
|
|
299
|
+
for (const [pkg, info] of packages.entries()) {
|
|
300
|
+
lines.push(`| ${pkg} | ${info.version} | ${info.repository} | ${Array.from(info.agents).join(', ')} |`);
|
|
301
|
+
}
|
|
302
|
+
lines.push('');
|
|
303
|
+
lines.push(`**Git Commit:** ${this.records[0]?.codeProvenance.commitHash ?? resolveGitCommit()}`);
|
|
304
|
+
lines.push('');
|
|
305
|
+
// Execution Flow by Pass
|
|
306
|
+
lines.push('## Execution Flow');
|
|
307
|
+
lines.push('');
|
|
308
|
+
const passNames = {
|
|
309
|
+
1: 'Problem Intelligence',
|
|
310
|
+
2: 'Simulation & Scenario Modeling',
|
|
311
|
+
3: 'Architecture & Prototype Generation',
|
|
312
|
+
4: 'Governance, Compliance & CostOps',
|
|
313
|
+
5: 'Decision Artifacts',
|
|
314
|
+
6: 'ERP Prototype Deployment',
|
|
315
|
+
7: 'Observability & Continuous Learning',
|
|
316
|
+
};
|
|
317
|
+
for (let pass = 1; pass <= 7; pass++) {
|
|
318
|
+
const passRecords = this.records.filter(r => r.pass === pass);
|
|
319
|
+
if (passRecords.length === 0)
|
|
320
|
+
continue;
|
|
321
|
+
lines.push(`### Pass ${pass} \u2014 ${passNames[pass] ?? `Pass ${pass}`}`);
|
|
322
|
+
lines.push('```');
|
|
323
|
+
for (const r of passRecords) {
|
|
324
|
+
const statusIcon = r.outputs.status === 'success' ? '\u2705' : '\u274c';
|
|
325
|
+
lines.push(`[${r.startedAt}] ${r.agent.agent} (${r.agent.domain}) - ${formatDuration(r.durationMs)} ${statusIcon}`);
|
|
326
|
+
}
|
|
327
|
+
lines.push('```');
|
|
328
|
+
lines.push('');
|
|
329
|
+
}
|
|
330
|
+
// Artifact Ownership
|
|
331
|
+
lines.push('## Artifact Ownership');
|
|
332
|
+
lines.push('');
|
|
333
|
+
lines.push('| # | Artifact | Producing Agent(s) | Pass |');
|
|
334
|
+
lines.push('|---|----------|-------------------|------|');
|
|
335
|
+
for (const a of params.artifactOwnership) {
|
|
336
|
+
lines.push(`| ${a.number} | ${a.name} | ${a.agent} | ${a.pass} |`);
|
|
337
|
+
}
|
|
338
|
+
lines.push('');
|
|
339
|
+
// Quality Scores
|
|
340
|
+
lines.push('## Quality Scores');
|
|
341
|
+
lines.push('');
|
|
342
|
+
lines.push('| Agent | Domain | Confidence | Status | Notes |');
|
|
343
|
+
lines.push('|-------|--------|-----------|--------|-------|');
|
|
344
|
+
for (const r of this.records) {
|
|
345
|
+
const notes = r.outputs.status !== 'success' ? r.outputs.status : '\u2014';
|
|
346
|
+
lines.push(`| ${r.agent.agent} | ${r.agent.domain} | ${r.outputs.confidence.toFixed(2)} | ${r.outputs.status} | ${notes} |`);
|
|
347
|
+
}
|
|
348
|
+
lines.push('');
|
|
349
|
+
// Resource Summary
|
|
350
|
+
lines.push('## Resource Summary');
|
|
351
|
+
lines.push('');
|
|
352
|
+
lines.push('| Resource | Value |');
|
|
353
|
+
lines.push('|----------|-------|');
|
|
354
|
+
lines.push(`| Total agents invoked | ${this.records.length} |`);
|
|
355
|
+
lines.push(`| Unique agent types | ${stats.uniqueAgents} |`);
|
|
356
|
+
lines.push(`| Unique code packages | ${packages.size} |`);
|
|
357
|
+
lines.push(`| Total LLM tokens | ${stats.totalTokens.toLocaleString()} |`);
|
|
358
|
+
lines.push(`| Total estimated cost | $${stats.totalCost.toFixed(4)} |`);
|
|
359
|
+
lines.push(`| Pipeline wall-clock time | ${formatDuration(stats.totalDurationMs)} |`);
|
|
360
|
+
if (longest) {
|
|
361
|
+
lines.push(`| Longest agent execution | ${longest.agentId} (${formatDuration(longest.durationMs)}) |`);
|
|
362
|
+
}
|
|
363
|
+
lines.push(`| Passes completed | ${params.passesCompleted}/7 |`);
|
|
364
|
+
lines.push(`| Passes degraded | ${params.passesDegraded.length > 0 ? params.passesDegraded.join(', ') : 'None'} |`);
|
|
365
|
+
lines.push('');
|
|
366
|
+
// Auditability (ADR-039)
|
|
367
|
+
lines.push('## Auditability');
|
|
368
|
+
lines.push('');
|
|
369
|
+
lines.push('| Requirement | How It\'s Met |');
|
|
370
|
+
lines.push('|-------------|-------------|');
|
|
371
|
+
lines.push('| **Who** made each decision | `agent.domain` + `agent.agent` in every TraceRecord |');
|
|
372
|
+
lines.push('| **What** code was used | `codeProvenance.package` + `commitHash` |');
|
|
373
|
+
lines.push('| **When** it happened | `startedAt` / `completedAt` timestamps |');
|
|
374
|
+
lines.push('| **What** data was used | `inputs.decisionGraphNodes` — exact node IDs read |');
|
|
375
|
+
lines.push('| **What** was produced | `outputs.decisionGraphNodes` + `outputs.artifactNumbers` |');
|
|
376
|
+
lines.push('| **How** confident | `outputs.confidence` per agent |');
|
|
377
|
+
lines.push('| **How much** it cost | `resources.tokensUsed` + `resources.estimatedCost` |');
|
|
378
|
+
lines.push('| **Reproducibility** | `commitHash` + `inputs.parameters` enable re-execution |');
|
|
379
|
+
lines.push('');
|
|
380
|
+
// Privacy note
|
|
381
|
+
lines.push('## Privacy & Redaction');
|
|
382
|
+
lines.push('');
|
|
383
|
+
lines.push('TraceRecords contain **metadata only** — no agent input/output payloads are stored.');
|
|
384
|
+
lines.push('DecisionGraph node IDs (pointers) are recorded, not content.');
|
|
385
|
+
lines.push('Access control on DecisionGraph nodes governs who can see actual data.');
|
|
386
|
+
lines.push('');
|
|
387
|
+
// Schema version
|
|
388
|
+
lines.push('---');
|
|
389
|
+
lines.push('*Provenance Schema v1.0 (ADR-039)*');
|
|
390
|
+
return lines.join('\n');
|
|
391
|
+
}
|
|
392
|
+
// --------------------------------------------------------------------------
|
|
393
|
+
// Persistence
|
|
394
|
+
// --------------------------------------------------------------------------
|
|
395
|
+
/** Persist trace records to the output directory. */
|
|
396
|
+
persist(outputDir) {
|
|
397
|
+
const traceDir = path.join(outputDir, 'provenance');
|
|
398
|
+
fs.mkdirSync(traceDir, { recursive: true });
|
|
399
|
+
const filePath = path.join(traceDir, 'trace-records.json');
|
|
400
|
+
fs.writeFileSync(filePath, JSON.stringify(this.records, null, 2), 'utf-8');
|
|
401
|
+
return filePath;
|
|
402
|
+
}
|
|
403
|
+
/** Load trace records from a previously persisted file. */
|
|
404
|
+
static load(executionId, outputDir) {
|
|
405
|
+
const tracker = new ProvenanceTracker(executionId);
|
|
406
|
+
const filePath = path.join(outputDir, 'provenance', 'trace-records.json');
|
|
407
|
+
if (!fs.existsSync(filePath))
|
|
408
|
+
return tracker;
|
|
409
|
+
try {
|
|
410
|
+
const raw = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
411
|
+
if (Array.isArray(raw)) {
|
|
412
|
+
for (const record of raw) {
|
|
413
|
+
tracker.records.push(record);
|
|
414
|
+
}
|
|
415
|
+
tracker.sequenceCounter = tracker.records.length;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
catch {
|
|
419
|
+
// Corrupted file — return empty tracker
|
|
420
|
+
}
|
|
421
|
+
return tracker;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
// ============================================================================
|
|
425
|
+
// Helpers
|
|
426
|
+
// ============================================================================
|
|
427
|
+
/** Format milliseconds as human-readable duration. */
|
|
428
|
+
function formatDuration(ms) {
|
|
429
|
+
if (ms < 1000)
|
|
430
|
+
return `${ms}ms`;
|
|
431
|
+
if (ms < 60_000)
|
|
432
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
433
|
+
const minutes = Math.floor(ms / 60_000);
|
|
434
|
+
const seconds = Math.round((ms % 60_000) / 1000);
|
|
435
|
+
return `${minutes}m ${seconds}s`;
|
|
436
|
+
}
|
|
437
|
+
//# sourceMappingURL=provenance-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance-tracker.js","sourceRoot":"","sources":["../../../src/pipeline/enterprise/provenance-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace Middleware — Transparent Agent Invocation Tracing (ADR-039)
|
|
3
|
+
*
|
|
4
|
+
* Wraps agent invocations without modifying agent code. Infers inputs
|
|
5
|
+
* (which DecisionGraph nodes were read) and outputs (which nodes were
|
|
6
|
+
* written) by diffing the graph state before and after execution.
|
|
7
|
+
*
|
|
8
|
+
* Key principle: Agents are unaware of tracing. They do not need to
|
|
9
|
+
* emit trace data. The middleware handles everything.
|
|
10
|
+
*/
|
|
11
|
+
import type { PassNumber, AgentRef, AgentInvocationResult } from './types.js';
|
|
12
|
+
import { DecisionGraph } from './decision-graph.js';
|
|
13
|
+
import { ProvenanceTracker } from './provenance-tracker.js';
|
|
14
|
+
/** The agent invoker function signature. */
|
|
15
|
+
export type AgentInvoker = (agents: readonly AgentRef[], payload: Record<string, unknown>, pass: PassNumber, timeoutMs: number) => Promise<AgentInvocationResult[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Create a tracing wrapper around an agent invoker.
|
|
18
|
+
*
|
|
19
|
+
* The wrapped invoker:
|
|
20
|
+
* 1. Snapshots the graph node count before invocation
|
|
21
|
+
* 2. Invokes the original invoker
|
|
22
|
+
* 3. Diffs the graph to find new nodes (inferred outputs)
|
|
23
|
+
* 4. Records a TraceRecord per agent with code provenance
|
|
24
|
+
*
|
|
25
|
+
* Usage:
|
|
26
|
+
* const tracedInvoker = createTracingInvoker(originalInvoker, graph, tracker, 'Pass Name', 'workstream');
|
|
27
|
+
* const results = await tracedInvoker(agents, payload, pass, timeoutMs);
|
|
28
|
+
*/
|
|
29
|
+
export declare function createTracingInvoker(inner: AgentInvoker, graph: DecisionGraph, tracker: ProvenanceTracker, passName: string, workstream: string): AgentInvoker;
|
|
30
|
+
/**
|
|
31
|
+
* Create a tracing wrapper that also writes TraceRecords to the DecisionGraph.
|
|
32
|
+
*
|
|
33
|
+
* This is the full ADR-039 implementation: trace records are stored both
|
|
34
|
+
* in the ProvenanceTracker (in-memory) and as DecisionGraph nodes (persisted).
|
|
35
|
+
*/
|
|
36
|
+
export declare function createFullTracingInvoker(inner: AgentInvoker, graph: DecisionGraph, tracker: ProvenanceTracker, passName: string, workstream: string): AgentInvoker;
|
|
37
|
+
//# sourceMappingURL=trace-middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-middleware.d.ts","sourceRoot":"","sources":["../../../src/pipeline/enterprise/trace-middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,qBAAqB,EACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAO5D,4CAA4C;AAC5C,MAAM,MAAM,YAAY,GAAG,CACzB,MAAM,EAAE,SAAS,QAAQ,EAAE,EAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,KACd,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAMtC;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,YAAY,CAyDd;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,YAAY,CAmDd"}
|