@ai-sdlc/orchestrator 0.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/adapters.d.ts +60 -0
- package/dist/adapters.js +160 -0
- package/dist/admission.d.ts +49 -0
- package/dist/admission.js +90 -0
- package/dist/analysis/analyzer.d.ts +10 -0
- package/dist/analysis/analyzer.js +67 -0
- package/dist/analysis/complexity-scorer.d.ts +24 -0
- package/dist/analysis/complexity-scorer.js +39 -0
- package/dist/analysis/context-builder.d.ts +14 -0
- package/dist/analysis/context-builder.js +79 -0
- package/dist/analysis/convention-detector.d.ts +9 -0
- package/dist/analysis/convention-detector.js +177 -0
- package/dist/analysis/dependency-parser.d.ts +17 -0
- package/dist/analysis/dependency-parser.js +167 -0
- package/dist/analysis/file-walker.d.ts +18 -0
- package/dist/analysis/file-walker.js +158 -0
- package/dist/analysis/hotspot-analyzer.d.ts +28 -0
- package/dist/analysis/hotspot-analyzer.js +85 -0
- package/dist/analysis/index.d.ts +13 -0
- package/dist/analysis/index.js +12 -0
- package/dist/analysis/pattern-detector.d.ts +10 -0
- package/dist/analysis/pattern-detector.js +86 -0
- package/dist/analysis/types.d.ts +94 -0
- package/dist/analysis/types.js +5 -0
- package/dist/audit-archival.d.ts +48 -0
- package/dist/audit-archival.js +72 -0
- package/dist/audit-export.d.ts +45 -0
- package/dist/audit-export.js +100 -0
- package/dist/audit-extended.d.ts +28 -0
- package/dist/audit-extended.js +38 -0
- package/dist/audit-scheduler.d.ts +32 -0
- package/dist/audit-scheduler.js +52 -0
- package/dist/audit-sqlite-sink.d.ts +11 -0
- package/dist/audit-sqlite-sink.js +51 -0
- package/dist/autonomy-tracker.d.ts +76 -0
- package/dist/autonomy-tracker.js +277 -0
- package/dist/check-runs.d.ts +37 -0
- package/dist/check-runs.js +72 -0
- package/dist/cli/commands/agents.d.ts +6 -0
- package/dist/cli/commands/agents.js +33 -0
- package/dist/cli/commands/complexity.d.ts +6 -0
- package/dist/cli/commands/complexity.js +35 -0
- package/dist/cli/commands/cost.d.ts +6 -0
- package/dist/cli/commands/cost.js +53 -0
- package/dist/cli/commands/dashboard.d.ts +9 -0
- package/dist/cli/commands/dashboard.js +50 -0
- package/dist/cli/commands/health.d.ts +6 -0
- package/dist/cli/commands/health.js +33 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.js +127 -0
- package/dist/cli/commands/routing.d.ts +6 -0
- package/dist/cli/commands/routing.js +46 -0
- package/dist/cli/commands/run.d.ts +6 -0
- package/dist/cli/commands/run.js +36 -0
- package/dist/cli/commands/start.d.ts +6 -0
- package/dist/cli/commands/start.js +26 -0
- package/dist/cli/commands/status.d.ts +6 -0
- package/dist/cli/commands/status.js +34 -0
- package/dist/cli/dashboard-renderer.d.ts +24 -0
- package/dist/cli/dashboard-renderer.js +129 -0
- package/dist/cli/formatters/index.d.ts +6 -0
- package/dist/cli/formatters/index.js +18 -0
- package/dist/cli/formatters/json.d.ts +5 -0
- package/dist/cli/formatters/json.js +7 -0
- package/dist/cli/formatters/minimal.d.ts +5 -0
- package/dist/cli/formatters/minimal.js +36 -0
- package/dist/cli/formatters/table.d.ts +5 -0
- package/dist/cli/formatters/table.js +184 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.js +35 -0
- package/dist/compliance-extended.d.ts +41 -0
- package/dist/compliance-extended.js +58 -0
- package/dist/config.d.ts +26 -0
- package/dist/config.js +66 -0
- package/dist/context-enrichment.d.ts +33 -0
- package/dist/context-enrichment.js +125 -0
- package/dist/cost-governance.d.ts +22 -0
- package/dist/cost-governance.js +106 -0
- package/dist/cost-tracker.d.ts +75 -0
- package/dist/cost-tracker.js +177 -0
- package/dist/defaults.d.ts +140 -0
- package/dist/defaults.js +218 -0
- package/dist/deploy/flyio-target.d.ts +19 -0
- package/dist/deploy/flyio-target.js +114 -0
- package/dist/deploy/index.d.ts +15 -0
- package/dist/deploy/index.js +11 -0
- package/dist/deploy/kubernetes-target.d.ts +25 -0
- package/dist/deploy/kubernetes-target.js +124 -0
- package/dist/deploy/metrics-collector.d.ts +31 -0
- package/dist/deploy/metrics-collector.js +75 -0
- package/dist/deploy/rollout-controller.d.ts +42 -0
- package/dist/deploy/rollout-controller.js +192 -0
- package/dist/deploy/rollout-types.d.ts +86 -0
- package/dist/deploy/rollout-types.js +5 -0
- package/dist/deploy/types.d.ts +47 -0
- package/dist/deploy/types.js +5 -0
- package/dist/deploy/vercel-target.d.ts +16 -0
- package/dist/deploy/vercel-target.js +115 -0
- package/dist/discovery.d.ts +26 -0
- package/dist/discovery.js +46 -0
- package/dist/episodic-enhanced.d.ts +88 -0
- package/dist/episodic-enhanced.js +212 -0
- package/dist/execute.d.ts +81 -0
- package/dist/execute.js +703 -0
- package/dist/fix-ci.d.ts +61 -0
- package/dist/fix-ci.js +380 -0
- package/dist/handoff-executor.d.ts +61 -0
- package/dist/handoff-executor.js +119 -0
- package/dist/index.d.ts +70 -0
- package/dist/index.js +87 -0
- package/dist/instrumented.d.ts +27 -0
- package/dist/instrumented.js +34 -0
- package/dist/logger.d.ts +17 -0
- package/dist/logger.js +37 -0
- package/dist/multi-repo/impact-analyzer.d.ts +22 -0
- package/dist/multi-repo/impact-analyzer.js +95 -0
- package/dist/multi-repo/index.d.ts +5 -0
- package/dist/multi-repo/index.js +4 -0
- package/dist/multi-repo/monorepo-detector.d.ts +16 -0
- package/dist/multi-repo/monorepo-detector.js +246 -0
- package/dist/multi-repo/service-map-builder.d.ts +24 -0
- package/dist/multi-repo/service-map-builder.js +235 -0
- package/dist/multi-repo/types.d.ts +54 -0
- package/dist/multi-repo/types.js +5 -0
- package/dist/notifications/index.d.ts +4 -0
- package/dist/notifications/index.js +4 -0
- package/dist/notifications/notification-router.d.ts +62 -0
- package/dist/notifications/notification-router.js +206 -0
- package/dist/notifications/slack-messenger.d.ts +26 -0
- package/dist/notifications/slack-messenger.js +69 -0
- package/dist/notifications/teams-messenger.d.ts +21 -0
- package/dist/notifications/teams-messenger.js +85 -0
- package/dist/notifications.d.ts +13 -0
- package/dist/notifications.js +15 -0
- package/dist/orchestration.d.ts +20 -0
- package/dist/orchestration.js +53 -0
- package/dist/orchestrator.d.ts +160 -0
- package/dist/orchestrator.js +372 -0
- package/dist/otel-exporter.d.ts +37 -0
- package/dist/otel-exporter.js +128 -0
- package/dist/plugin.d.ts +45 -0
- package/dist/plugin.js +8 -0
- package/dist/policy-evaluators.d.ts +40 -0
- package/dist/policy-evaluators.js +57 -0
- package/dist/process-escalation.d.ts +38 -0
- package/dist/process-escalation.js +129 -0
- package/dist/progressive-gates.d.ts +54 -0
- package/dist/progressive-gates.js +135 -0
- package/dist/provenance.d.ts +29 -0
- package/dist/provenance.js +61 -0
- package/dist/reconcilers.d.ts +28 -0
- package/dist/reconcilers.js +37 -0
- package/dist/runners/claude-code.d.ts +17 -0
- package/dist/runners/claude-code.js +200 -0
- package/dist/runners/codex.d.ts +19 -0
- package/dist/runners/codex.js +153 -0
- package/dist/runners/copilot-stub.d.ts +9 -0
- package/dist/runners/copilot-stub.js +15 -0
- package/dist/runners/copilot.d.ts +15 -0
- package/dist/runners/copilot.js +119 -0
- package/dist/runners/cursor-stub.d.ts +9 -0
- package/dist/runners/cursor-stub.js +15 -0
- package/dist/runners/cursor.d.ts +20 -0
- package/dist/runners/cursor.js +140 -0
- package/dist/runners/devin-stub.d.ts +9 -0
- package/dist/runners/devin-stub.js +15 -0
- package/dist/runners/generic-llm.d.ts +51 -0
- package/dist/runners/generic-llm.js +125 -0
- package/dist/runners/index.d.ts +8 -0
- package/dist/runners/index.js +7 -0
- package/dist/runners/runner-registry.d.ts +50 -0
- package/dist/runners/runner-registry.js +156 -0
- package/dist/runners/types.d.ts +59 -0
- package/dist/runners/types.js +7 -0
- package/dist/security.d.ts +51 -0
- package/dist/security.js +70 -0
- package/dist/shared.d.ts +134 -0
- package/dist/shared.js +284 -0
- package/dist/state/index.d.ts +4 -0
- package/dist/state/index.js +3 -0
- package/dist/state/schema.d.ts +16 -0
- package/dist/state/schema.js +264 -0
- package/dist/state/store.d.ts +109 -0
- package/dist/state/store.js +644 -0
- package/dist/state/types.d.ts +190 -0
- package/dist/state/types.js +5 -0
- package/dist/structured-logger.d.ts +20 -0
- package/dist/structured-logger.js +64 -0
- package/dist/task-decomposer.d.ts +61 -0
- package/dist/task-decomposer.js +265 -0
- package/dist/telemetry-extended.d.ts +24 -0
- package/dist/telemetry-extended.js +31 -0
- package/dist/types.d.ts +9 -0
- package/dist/types.js +7 -0
- package/dist/validate-agent-output.d.ts +30 -0
- package/dist/validate-agent-output.js +81 -0
- package/dist/validate-issue.d.ts +25 -0
- package/dist/validate-issue.js +102 -0
- package/dist/watch.d.ts +43 -0
- package/dist/watch.js +99 -0
- package/dist/webhook-manager.d.ts +38 -0
- package/dist/webhook-manager.js +66 -0
- package/package.json +59 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced episodic memory — records enriched pipeline history to SQLite,
|
|
3
|
+
* detects regressions, and extracts failure patterns.
|
|
4
|
+
*
|
|
5
|
+
* RFC reference: Phase 2 episodic memory enrichment.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Create an enhanced episodic memory manager backed by the state store.
|
|
9
|
+
*/
|
|
10
|
+
export function createEnhancedEpisodicMemory(store) {
|
|
11
|
+
return {
|
|
12
|
+
/**
|
|
13
|
+
* Record an enhanced episodic memory entry, auto-detecting regressions.
|
|
14
|
+
*/
|
|
15
|
+
record(input) {
|
|
16
|
+
const regression = detectRegressions(store, input);
|
|
17
|
+
const id = store.saveEpisodicRecord({
|
|
18
|
+
issueNumber: input.issueNumber,
|
|
19
|
+
prNumber: input.prNumber,
|
|
20
|
+
pipelineType: input.pipelineType,
|
|
21
|
+
outcome: input.outcome,
|
|
22
|
+
durationMs: input.durationMs,
|
|
23
|
+
filesChanged: input.filesChanged,
|
|
24
|
+
errorMessage: input.errorMessage,
|
|
25
|
+
metadata: input.metadata,
|
|
26
|
+
agentName: input.agentName,
|
|
27
|
+
complexityScore: input.complexityScore,
|
|
28
|
+
routingStrategy: input.routingStrategy,
|
|
29
|
+
gatePassCount: input.gatePassCount,
|
|
30
|
+
gateFailCount: input.gateFailCount,
|
|
31
|
+
costUsd: input.costUsd,
|
|
32
|
+
isRegression: regression.isRegression ? 1 : 0,
|
|
33
|
+
relatedEpisodes: regression.relatedEpisodeIds.length > 0
|
|
34
|
+
? JSON.stringify(regression.relatedEpisodeIds)
|
|
35
|
+
: undefined,
|
|
36
|
+
});
|
|
37
|
+
return { id, regression };
|
|
38
|
+
},
|
|
39
|
+
/**
|
|
40
|
+
* Get recent episodes with optional filtering.
|
|
41
|
+
*/
|
|
42
|
+
getRecent(limit = 50) {
|
|
43
|
+
return store.getEpisodicRecords(undefined, limit);
|
|
44
|
+
},
|
|
45
|
+
/**
|
|
46
|
+
* Search episodes by criteria.
|
|
47
|
+
*/
|
|
48
|
+
search(opts) {
|
|
49
|
+
return store.searchEpisodicRecords(opts);
|
|
50
|
+
},
|
|
51
|
+
/**
|
|
52
|
+
* Extract failure patterns from recent history.
|
|
53
|
+
*/
|
|
54
|
+
extractPatterns(limit = 100) {
|
|
55
|
+
return extractEpisodicPatterns(store, limit);
|
|
56
|
+
},
|
|
57
|
+
/**
|
|
58
|
+
* Get a summary of episodic history.
|
|
59
|
+
*/
|
|
60
|
+
summarize(since) {
|
|
61
|
+
return summarizeEpisodes(store, since);
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Detect if a new record represents a regression:
|
|
67
|
+
* Same files failed before with the same error pattern within 7 days.
|
|
68
|
+
*/
|
|
69
|
+
export function detectRegressions(store, input) {
|
|
70
|
+
if (input.outcome === 'success') {
|
|
71
|
+
return { isRegression: false, relatedEpisodeIds: [] };
|
|
72
|
+
}
|
|
73
|
+
// Look for failures in the last 7 days with overlapping metadata (files)
|
|
74
|
+
const sevenDaysAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString();
|
|
75
|
+
const recentFailures = store.searchEpisodicRecords({
|
|
76
|
+
outcome: 'failure',
|
|
77
|
+
since: sevenDaysAgo,
|
|
78
|
+
limit: 200,
|
|
79
|
+
});
|
|
80
|
+
const relatedIds = [];
|
|
81
|
+
let reason;
|
|
82
|
+
for (const episode of recentFailures) {
|
|
83
|
+
// Check for overlapping error patterns
|
|
84
|
+
if (input.errorMessage && episode.errorMessage) {
|
|
85
|
+
const similarity = computeErrorSimilarity(input.errorMessage, episode.errorMessage);
|
|
86
|
+
if (similarity > 0.5) {
|
|
87
|
+
if (episode.id)
|
|
88
|
+
relatedIds.push(episode.id);
|
|
89
|
+
reason = `Similar error pattern to episode #${episode.id}: ${episode.errorMessage?.slice(0, 80)}`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Check for same files (via metadata)
|
|
93
|
+
if (input.metadata && episode.metadata) {
|
|
94
|
+
try {
|
|
95
|
+
const inputFiles = extractFilesFromMetadata(input.metadata);
|
|
96
|
+
const episodeFiles = extractFilesFromMetadata(episode.metadata);
|
|
97
|
+
const overlap = inputFiles.filter((f) => episodeFiles.includes(f));
|
|
98
|
+
if (overlap.length > 0 && episode.id && !relatedIds.includes(episode.id)) {
|
|
99
|
+
relatedIds.push(episode.id);
|
|
100
|
+
reason = reason ?? `Same files affected: ${overlap.join(', ')}`;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// metadata not JSON or doesn't contain files
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
isRegression: relatedIds.length > 0,
|
|
110
|
+
relatedEpisodeIds: relatedIds,
|
|
111
|
+
reason,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Compute a simple similarity score between two error messages.
|
|
116
|
+
* Uses word-level Jaccard similarity.
|
|
117
|
+
*/
|
|
118
|
+
function computeErrorSimilarity(a, b) {
|
|
119
|
+
const wordsA = new Set(a.toLowerCase().split(/\s+/).filter(Boolean));
|
|
120
|
+
const wordsB = new Set(b.toLowerCase().split(/\s+/).filter(Boolean));
|
|
121
|
+
if (wordsA.size === 0 && wordsB.size === 0)
|
|
122
|
+
return 1;
|
|
123
|
+
if (wordsA.size === 0 || wordsB.size === 0)
|
|
124
|
+
return 0;
|
|
125
|
+
let intersection = 0;
|
|
126
|
+
for (const w of wordsA) {
|
|
127
|
+
if (wordsB.has(w))
|
|
128
|
+
intersection++;
|
|
129
|
+
}
|
|
130
|
+
const union = wordsA.size + wordsB.size - intersection;
|
|
131
|
+
return union > 0 ? intersection / union : 0;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Extract file paths from JSON metadata.
|
|
135
|
+
*/
|
|
136
|
+
function extractFilesFromMetadata(metadata) {
|
|
137
|
+
try {
|
|
138
|
+
const parsed = JSON.parse(metadata);
|
|
139
|
+
if (Array.isArray(parsed.filesChanged))
|
|
140
|
+
return parsed.filesChanged;
|
|
141
|
+
if (Array.isArray(parsed.files))
|
|
142
|
+
return parsed.files;
|
|
143
|
+
return [];
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return [];
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Extract failure patterns from recent episodes.
|
|
151
|
+
*/
|
|
152
|
+
export function extractEpisodicPatterns(store, limit = 100) {
|
|
153
|
+
const failures = store.searchEpisodicRecords({ outcome: 'failure', limit });
|
|
154
|
+
const patternMap = new Map();
|
|
155
|
+
for (const ep of failures) {
|
|
156
|
+
const key = ep.errorMessage?.slice(0, 100) ?? 'unknown';
|
|
157
|
+
const existing = patternMap.get(key);
|
|
158
|
+
const files = ep.metadata ? extractFilesFromMetadata(ep.metadata) : [];
|
|
159
|
+
if (existing) {
|
|
160
|
+
existing.count++;
|
|
161
|
+
if (ep.createdAt && ep.createdAt > existing.lastSeen) {
|
|
162
|
+
existing.lastSeen = ep.createdAt;
|
|
163
|
+
}
|
|
164
|
+
for (const f of files) {
|
|
165
|
+
if (!existing.affectedFiles.includes(f)) {
|
|
166
|
+
existing.affectedFiles.push(f);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
patternMap.set(key, {
|
|
172
|
+
pattern: key,
|
|
173
|
+
count: 1,
|
|
174
|
+
lastSeen: ep.createdAt ?? new Date().toISOString(),
|
|
175
|
+
affectedFiles: files,
|
|
176
|
+
agentName: ep.agentName,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return [...patternMap.values()].sort((a, b) => b.count - a.count);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Summarize episodic history.
|
|
184
|
+
*/
|
|
185
|
+
function summarizeEpisodes(store, since) {
|
|
186
|
+
const episodes = store.searchEpisodicRecords({ since, limit: 500 });
|
|
187
|
+
const total = episodes.length;
|
|
188
|
+
if (total === 0) {
|
|
189
|
+
return {
|
|
190
|
+
totalEpisodes: 0,
|
|
191
|
+
successRate: 0,
|
|
192
|
+
avgDurationMs: 0,
|
|
193
|
+
avgCostUsd: 0,
|
|
194
|
+
regressionCount: 0,
|
|
195
|
+
topFailurePatterns: [],
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
const successes = episodes.filter((e) => e.outcome === 'success').length;
|
|
199
|
+
const durations = episodes.filter((e) => e.durationMs != null).map((e) => e.durationMs);
|
|
200
|
+
const costs = episodes.filter((e) => e.costUsd != null).map((e) => e.costUsd);
|
|
201
|
+
const regressions = episodes.filter((e) => e.isRegression === 1).length;
|
|
202
|
+
const patterns = extractEpisodicPatterns(store);
|
|
203
|
+
return {
|
|
204
|
+
totalEpisodes: total,
|
|
205
|
+
successRate: total > 0 ? successes / total : 0,
|
|
206
|
+
avgDurationMs: durations.length > 0 ? durations.reduce((a, b) => a + b, 0) / durations.length : 0,
|
|
207
|
+
avgCostUsd: costs.length > 0 ? costs.reduce((a, b) => a + b, 0) / costs.length : 0,
|
|
208
|
+
regressionCount: regressions,
|
|
209
|
+
topFailurePatterns: patterns.slice(0, 5),
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=episodic-enhanced.js.map
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main pipeline execution — the heart of the dogfood loop.
|
|
3
|
+
*
|
|
4
|
+
* Flow:
|
|
5
|
+
* load config -> fetch issue -> validate -> check autonomy ->
|
|
6
|
+
* create branch -> invoke agent -> authorize -> validate -> push -> create PR -> comment
|
|
7
|
+
*/
|
|
8
|
+
import { type IssueTracker, type SourceControl, type AuditLog, type MetricStore, type AgentMemory, type ExpressionEvaluator, type LLMEvaluator, type SecretStore } from '@ai-sdlc/reference';
|
|
9
|
+
import { type Logger } from './logger.js';
|
|
10
|
+
import type { AgentRunner } from './runners/types.js';
|
|
11
|
+
import { type SecurityContext } from './security.js';
|
|
12
|
+
import { type AdmissionPipeline } from './admission.js';
|
|
13
|
+
import type { CodebaseContext } from './analysis/types.js';
|
|
14
|
+
import type { AutonomyTracker } from './autonomy-tracker.js';
|
|
15
|
+
import { CostTracker } from './cost-tracker.js';
|
|
16
|
+
import type { StateStore } from './state/store.js';
|
|
17
|
+
export interface PipelineResult {
|
|
18
|
+
prUrl: string;
|
|
19
|
+
filesChanged: string[];
|
|
20
|
+
promotionEligible: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface PromotionResult {
|
|
23
|
+
eligible: boolean;
|
|
24
|
+
fromLevel: number;
|
|
25
|
+
toLevel: number;
|
|
26
|
+
}
|
|
27
|
+
export interface ExecuteOptions {
|
|
28
|
+
/** Override the config directory (defaults to `.ai-sdlc`). */
|
|
29
|
+
configDir?: string;
|
|
30
|
+
/** Override the working directory (defaults to `process.cwd()`). */
|
|
31
|
+
workDir?: string;
|
|
32
|
+
/** Inject a custom runner (for testing). */
|
|
33
|
+
runner?: AgentRunner;
|
|
34
|
+
/** Inject a custom issue tracker (for testing). */
|
|
35
|
+
tracker?: IssueTracker;
|
|
36
|
+
/** Inject a custom source control adapter (for testing). */
|
|
37
|
+
sourceControl?: SourceControl;
|
|
38
|
+
/** Inject a custom logger (for testing). */
|
|
39
|
+
logger?: Logger;
|
|
40
|
+
/** Inject a custom audit log (for testing). */
|
|
41
|
+
auditLog?: AuditLog;
|
|
42
|
+
/** In-process metric store for testable telemetry. */
|
|
43
|
+
metricStore?: MetricStore;
|
|
44
|
+
/** Agent memory for long-term/episodic recall. */
|
|
45
|
+
memory?: AgentMemory;
|
|
46
|
+
/** Optional expression evaluator for expression gate rules. */
|
|
47
|
+
expressionEvaluator?: ExpressionEvaluator;
|
|
48
|
+
/** Optional LLM evaluator for LLM gate rules. */
|
|
49
|
+
llmEvaluator?: LLMEvaluator;
|
|
50
|
+
/** Callback invoked when promotion eligibility is evaluated. */
|
|
51
|
+
promotionCallback?: (result: PromotionResult) => void | Promise<void>;
|
|
52
|
+
/** Security context for kill switch, JIT credentials, and approval workflow. */
|
|
53
|
+
security?: SecurityContext;
|
|
54
|
+
/** Use the reference structured logger instead of the plain console logger. */
|
|
55
|
+
useStructuredLogger?: boolean;
|
|
56
|
+
/** Include provenance metadata in PR descriptions. Defaults to true when security is provided. */
|
|
57
|
+
includeProvenance?: boolean;
|
|
58
|
+
/** Auto-create default expression/LLM evaluators when none are provided. */
|
|
59
|
+
useDefaultEvaluators?: boolean;
|
|
60
|
+
/** Path to an audit log file for integrity verification at pipeline end. */
|
|
61
|
+
auditFilePath?: string;
|
|
62
|
+
/** Admission pipeline for pre-execution resource validation. */
|
|
63
|
+
admission?: AdmissionPipeline;
|
|
64
|
+
/** Secret store adapter for resolving credentials (defaults to process.env). */
|
|
65
|
+
secretStore?: SecretStore;
|
|
66
|
+
/** Custom PR footer text. Defaults to AI-SDLC attribution link. */
|
|
67
|
+
prFooter?: string;
|
|
68
|
+
/** Codebase context from analysis for agent prompt injection. */
|
|
69
|
+
codebaseContext?: CodebaseContext;
|
|
70
|
+
/** AutonomyTracker for real metric-based promotion/demotion. */
|
|
71
|
+
autonomyTracker?: AutonomyTracker;
|
|
72
|
+
/** CostTracker for recording LLM usage costs. */
|
|
73
|
+
costTracker?: CostTracker;
|
|
74
|
+
/** StateStore for episodic context enrichment. */
|
|
75
|
+
stateStore?: StateStore;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Execute the full AI-SDLC pipeline for a given issue number.
|
|
79
|
+
*/
|
|
80
|
+
export declare function executePipeline(issueNumber: number, options?: ExecuteOptions): Promise<PipelineResult>;
|
|
81
|
+
//# sourceMappingURL=execute.d.ts.map
|