copilot-guardian 0.2.5

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.
Files changed (72) hide show
  1. package/.github/workflows/ci.yml +53 -0
  2. package/.test-output-run-abstain/guardian.report.json +8 -0
  3. package/CHANGELOG.md +602 -0
  4. package/CONTRIBUTING.md +28 -0
  5. package/LICENSE +21 -0
  6. package/README.md +205 -0
  7. package/SECURITY.md +150 -0
  8. package/dist/cli.js +384 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/engine/analyze.js +294 -0
  11. package/dist/engine/analyze.js.map +1 -0
  12. package/dist/engine/async-exec.js +314 -0
  13. package/dist/engine/async-exec.js.map +1 -0
  14. package/dist/engine/auto-apply.js +424 -0
  15. package/dist/engine/auto-apply.js.map +1 -0
  16. package/dist/engine/context-enhancer.js +141 -0
  17. package/dist/engine/context-enhancer.js.map +1 -0
  18. package/dist/engine/debug.js +77 -0
  19. package/dist/engine/debug.js.map +1 -0
  20. package/dist/engine/eval.js +437 -0
  21. package/dist/engine/eval.js.map +1 -0
  22. package/dist/engine/github.js +191 -0
  23. package/dist/engine/github.js.map +1 -0
  24. package/dist/engine/mcp.js +217 -0
  25. package/dist/engine/mcp.js.map +1 -0
  26. package/dist/engine/patch_options.js +474 -0
  27. package/dist/engine/patch_options.js.map +1 -0
  28. package/dist/engine/run.js +124 -0
  29. package/dist/engine/run.js.map +1 -0
  30. package/dist/engine/util.js +167 -0
  31. package/dist/engine/util.js.map +1 -0
  32. package/dist/ui/dashboard.js +81 -0
  33. package/dist/ui/dashboard.js.map +1 -0
  34. package/docs/ARCHITECTURE.md +292 -0
  35. package/docs/Logo.png +0 -0
  36. package/docs/screenshots/05-hypothesis-dashboard.png +0 -0
  37. package/docs/screenshots/07-patch-spectrum.png +0 -0
  38. package/docs/screenshots/final-demo.gif +0 -0
  39. package/examples/demo-failure/.github/workflows/ci.yml +23 -0
  40. package/examples/demo-failure/README.md +93 -0
  41. package/examples/demo-failure/package.json +9 -0
  42. package/examples/demo-failure/test/require-api-url.js +10 -0
  43. package/jest.config.cjs +35 -0
  44. package/package.json +39 -0
  45. package/prompts/analysis.v2.txt +62 -0
  46. package/prompts/debug.followup.v1.txt +18 -0
  47. package/prompts/patch.options.v1.txt +47 -0
  48. package/prompts/patch.simple.v1.txt +12 -0
  49. package/prompts/quality.v1.txt +25 -0
  50. package/schemas/analysis.schema.json +65 -0
  51. package/schemas/patch_options.schema.json +23 -0
  52. package/schemas/quality.schema.json +12 -0
  53. package/src/cli.ts +417 -0
  54. package/src/engine/analyze.ts +412 -0
  55. package/src/engine/async-exec.ts +384 -0
  56. package/src/engine/auto-apply.ts +516 -0
  57. package/src/engine/context-enhancer.ts +176 -0
  58. package/src/engine/debug.ts +91 -0
  59. package/src/engine/eval.ts +546 -0
  60. package/src/engine/github.ts +223 -0
  61. package/src/engine/mcp.ts +267 -0
  62. package/src/engine/patch_options.ts +604 -0
  63. package/src/engine/run.ts +154 -0
  64. package/src/engine/util.ts +195 -0
  65. package/src/ui/dashboard.ts +90 -0
  66. package/test-sdk.mjs +51 -0
  67. package/tests/auto_heal_branch_safety.test.ts +76 -0
  68. package/tests/github_redaction_failclosed.test.ts +24 -0
  69. package/tests/mocks/copilot-sdk.mock.ts +15 -0
  70. package/tests/quality_guard_regression_matrix.test.ts +432 -0
  71. package/tests/run_abstain_policy.test.ts +83 -0
  72. package/tsconfig.json +17 -0
package/dist/cli.js ADDED
@@ -0,0 +1,384 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import chalk from "chalk";
4
+ import { getLastFailedRunId } from "./engine/github.js";
5
+ import { runGuardian } from "./engine/run.js";
6
+ import { analyzeRun } from "./engine/analyze.js";
7
+ import { debugInteractive } from "./engine/debug.js";
8
+ import { runEvaluationHarness, getRecentFailedRunIds, parseRunIds, parseRunIdsFile } from "./engine/eval.js";
9
+ import { renderHypotheses, renderPatchSpectrum, renderHeader, renderSummary } from "./ui/dashboard.js";
10
+ import { checkGHCLI, checkCopilotCLI, closeSdkClient } from "./engine/async-exec.js";
11
+ // SDK-2: Graceful shutdown - cleanup SDK client on exit
12
+ async function cleanup() {
13
+ await closeSdkClient();
14
+ }
15
+ process.on('SIGINT', async () => {
16
+ await cleanup();
17
+ process.exit(0);
18
+ });
19
+ process.on('SIGTERM', async () => {
20
+ await cleanup();
21
+ process.exit(0);
22
+ });
23
+ process.on('exit', () => {
24
+ // Note: async operations may not complete in 'exit' handler
25
+ // The SIGINT/SIGTERM handlers above handle graceful shutdown
26
+ });
27
+ function riskRank(level) {
28
+ if (level === "low")
29
+ return 0;
30
+ if (level === "medium")
31
+ return 1;
32
+ return 2;
33
+ }
34
+ function chooseBestGoPatch(results) {
35
+ const go = (results || []).filter((r) => r?.verdict === "GO");
36
+ if (go.length === 0)
37
+ return undefined;
38
+ go.sort((a, b) => {
39
+ const riskDelta = riskRank(String(a?.risk_level)) - riskRank(String(b?.risk_level));
40
+ if (riskDelta !== 0)
41
+ return riskDelta;
42
+ const slopA = Number.isFinite(Number(a?.slop_score)) ? Number(a.slop_score) : 1;
43
+ const slopB = Number.isFinite(Number(b?.slop_score)) ? Number(b.slop_score) : 1;
44
+ if (slopA !== slopB)
45
+ return slopA - slopB;
46
+ return String(a?.label || "").localeCompare(String(b?.label || ""));
47
+ });
48
+ return go[0];
49
+ }
50
+ const program = new Command();
51
+ program
52
+ .name("copilot-guardian")
53
+ .description(chalk.cyan("[#] Sovereign AI Guardian for GitHub Actions"))
54
+ .version("0.2.5");
55
+ program
56
+ .command("auth")
57
+ .description("[#] Check GitHub CLI and Copilot permissions")
58
+ .action(async () => {
59
+ console.log(chalk.bold("\n--- Guardian Auth Diagnostics ---\n"));
60
+ const hasGH = await checkGHCLI();
61
+ if (hasGH) {
62
+ console.log(chalk.green("[+] GitHub CLI: Authenticated"));
63
+ }
64
+ else {
65
+ console.log(chalk.red("[-] GitHub CLI: Not found or not authenticated"));
66
+ console.log(chalk.dim(" Install: https://cli.github.com"));
67
+ console.log(chalk.dim(" Authenticate: gh auth login"));
68
+ process.exit(1);
69
+ }
70
+ const hasCopilot = await checkCopilotCLI();
71
+ if (hasCopilot) {
72
+ console.log(chalk.green("[+] GitHub Copilot SDK: Available"));
73
+ }
74
+ else {
75
+ console.log(chalk.red("[-] GitHub Copilot SDK: Not available"));
76
+ console.log(chalk.dim(" Install: npm install @github/copilot-sdk"));
77
+ process.exit(1);
78
+ }
79
+ console.log(chalk.green("\n[+] All systems ready\n"));
80
+ });
81
+ program
82
+ .command("run")
83
+ .description("[>] One-shot: Analyze failure + (optional) patch spectrum")
84
+ .requiredOption("-r, --repo <owner/repo>", "Target repository")
85
+ .option("-i, --run-id <id>", "Specific run ID")
86
+ .option("--last-failed", "Auto-select the most recent failed run")
87
+ .option("--show-reasoning", "Render multi-hypothesis dashboard")
88
+ .option("--show-options", "Generate 3 patch strategies + quality verdicts")
89
+ .option("--strategy <conservative|balanced|aggressive>", "Preferred patch strategy", "conservative")
90
+ .option("--auto-heal", "[W] Self-healing mode: auto-apply + commit + push + CI retry loop")
91
+ .option("--allow-direct-push", "[!] Allow direct push in auto-heal (unsafe; default is PR-only safe mode)")
92
+ .option("--base-branch <name>", "Base branch for auto-heal PR (default: current branch)")
93
+ .option("--max-retries <n>", "Maximum CI retry attempts in auto-heal mode", "3")
94
+ .option("--max-log-chars <n>", "Maximum failed-log characters to analyze", "12000")
95
+ .option("--fast", "Fast mode: shorter timeouts, fewer source fetches, parallel quality checks")
96
+ .option("--out-dir <path>", "Output directory for artifacts", ".copilot-guardian")
97
+ .action(async (opts) => {
98
+ try {
99
+ const repo = opts.repo;
100
+ let runId;
101
+ if (opts.lastFailed) {
102
+ runId = await getLastFailedRunId(repo);
103
+ }
104
+ else if (opts.runId) {
105
+ runId = Number(opts.runId);
106
+ }
107
+ else {
108
+ throw new Error("Provide --run-id or --last-failed");
109
+ }
110
+ const maxLogChars = Number(opts.maxLogChars);
111
+ if (!Number.isFinite(maxLogChars) || maxLogChars < 2000) {
112
+ throw new Error("--max-log-chars must be a number >= 2000");
113
+ }
114
+ const maxRetries = Number(opts.maxRetries);
115
+ if (!Number.isFinite(maxRetries) || maxRetries < 1 || maxRetries > 10) {
116
+ throw new Error("--max-retries must be a number between 1 and 10");
117
+ }
118
+ renderHeader(repo, runId);
119
+ const res = await runGuardian(repo, runId, {
120
+ showReasoning: Boolean(opts.showReasoning),
121
+ showOptions: Boolean(opts.showOptions),
122
+ strategy: opts.strategy,
123
+ outDir: opts.outDir,
124
+ maxLogChars,
125
+ fast: Boolean(opts.fast)
126
+ });
127
+ renderSummary(res.analysis);
128
+ if (opts.showReasoning) {
129
+ renderHypotheses(res.analysis.diagnosis.hypotheses);
130
+ }
131
+ if (opts.showOptions && res.patchIndex) {
132
+ renderPatchSpectrum(res.patchIndex);
133
+ // Auto-heal mode: apply best patch and retry CI
134
+ if (opts.autoHeal) {
135
+ console.log(chalk.yellow.bold('\n[!] AUTO-HEAL MODE ACTIVATED\n'));
136
+ console.log(chalk.gray(' "Sleep while Guardian fixes it" - The Sovereign Promise\n'));
137
+ // Select best patch (GO verdict + lowest risk + lowest slop)
138
+ const bestPatch = chooseBestGoPatch(res.patchIndex.results);
139
+ if (!bestPatch) {
140
+ console.log(chalk.red('[-] No safe patch found (all NO-GO). Manual intervention required.\n'));
141
+ process.exit(1);
142
+ }
143
+ console.log(chalk.cyan(`[>] Selected: ${bestPatch.label} (risk: ${bestPatch.risk_level})`));
144
+ // Apply patch using git apply (safe method)
145
+ try {
146
+ const { applyPatchViaDiff, ensureAutoHealBranch, rerunLatestRunForCommit, waitForCIFinalStatus } = await import('./engine/auto-apply.js');
147
+ const { execAsync } = await import('./engine/async-exec.js');
148
+ // Read patch content
149
+ const fs = await import('fs/promises');
150
+ const diffContent = await fs.readFile(bestPatch.patchPath, 'utf-8');
151
+ const allowedFilesRaw = res.analysis?.patch_plan?.allowed_files ?? [];
152
+ const allowedFiles = allowedFilesRaw.filter((f) => typeof f === "string" && f.trim().length > 0);
153
+ if (allowedFiles.length === 0) {
154
+ throw new Error("Allowlist is empty; refusing to apply patch.");
155
+ }
156
+ const branchCtx = await ensureAutoHealBranch(runId, {
157
+ directPush: Boolean(opts.allowDirectPush),
158
+ baseBranch: opts.baseBranch ? String(opts.baseBranch) : undefined
159
+ });
160
+ if (branchCtx.createdSafeBranch) {
161
+ console.log(chalk.green(`[+] Safe branch created: ${branchCtx.pushBranch}`));
162
+ console.log(chalk.dim(` Base branch: ${branchCtx.baseBranch}`));
163
+ }
164
+ else {
165
+ console.log(chalk.yellow('[!] Direct push mode enabled (unsafe).'));
166
+ }
167
+ let commitCreated = false;
168
+ let commitSha = '';
169
+ try {
170
+ // Apply with safety checks
171
+ const modifiedFiles = await applyPatchViaDiff(diffContent, false, {
172
+ allowedFiles,
173
+ repoRoot: process.cwd()
174
+ });
175
+ // Commit changes
176
+ await execAsync('git', ['add', ...modifiedFiles]);
177
+ const commitMsg = `fix: Guardian auto-heal (${bestPatch.label})`;
178
+ await execAsync('git', ['commit', '-m', commitMsg]);
179
+ commitCreated = true;
180
+ commitSha = (await execAsync('git', ['rev-parse', 'HEAD'])).trim();
181
+ console.log(chalk.green(`[+] Patch applied & committed: ${commitSha.substring(0, 7)}`));
182
+ }
183
+ catch (patchError) {
184
+ if (branchCtx.createdSafeBranch && !commitCreated) {
185
+ try {
186
+ await execAsync('git', ['checkout', branchCtx.currentBranch]);
187
+ await execAsync('git', ['branch', '-D', branchCtx.pushBranch]);
188
+ console.log(chalk.dim(`[~] Cleaned up safe branch after failed apply: ${branchCtx.pushBranch}`));
189
+ }
190
+ catch { }
191
+ }
192
+ throw patchError;
193
+ }
194
+ if (branchCtx.directPush) {
195
+ await execAsync('git', ['push', 'origin', 'HEAD']);
196
+ console.log(chalk.green('[+] Pushed to remote (direct push mode)'));
197
+ }
198
+ else {
199
+ await execAsync('git', ['push', '-u', 'origin', branchCtx.pushBranch]);
200
+ console.log(chalk.green(`[+] Pushed safe branch: ${branchCtx.pushBranch}`));
201
+ try {
202
+ const prTitle = `fix: Guardian auto-heal run ${runId} (${bestPatch.label})`;
203
+ const prBody = [
204
+ 'Automated safe-mode patch from Copilot Guardian.',
205
+ '',
206
+ `- Run ID: ${runId}`,
207
+ `- Strategy: ${bestPatch.label}`,
208
+ `- Risk: ${bestPatch.risk_level}`,
209
+ `- Slop: ${bestPatch.slop_score}`,
210
+ '',
211
+ 'Safety: PR-only mode (default). No direct push to default branch.'
212
+ ].join('\n');
213
+ await execAsync('gh', [
214
+ 'pr', 'create',
215
+ '--repo', repo,
216
+ '--head', branchCtx.pushBranch,
217
+ '--base', branchCtx.baseBranch,
218
+ '--title', prTitle,
219
+ '--body', prBody
220
+ ]);
221
+ console.log(chalk.green(`[+] Pull request created: ${branchCtx.pushBranch} -> ${branchCtx.baseBranch}`));
222
+ }
223
+ catch (prError) {
224
+ console.log(chalk.yellow(`[!] Could not create PR automatically: ${prError.message}`));
225
+ console.log(chalk.dim(` Create manually: gh pr create --repo ${repo} --head ${branchCtx.pushBranch} --base ${branchCtx.baseBranch}`));
226
+ }
227
+ }
228
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
229
+ console.log(chalk.yellow(`[~] CI verification attempt ${attempt}/${maxRetries}...`));
230
+ const ciStatus = await waitForCIFinalStatus(commitSha, {
231
+ pollIntervalMs: 15000,
232
+ maxPolls: 8
233
+ });
234
+ if (ciStatus === 'passed') {
235
+ console.log(chalk.green.bold('\n[W] VICTORY! Guardian healed the CI!\n'));
236
+ console.log(chalk.cyan(' Sleep well. CI is green.\n'));
237
+ process.exit(0);
238
+ }
239
+ if (ciStatus === 'failed' && attempt < maxRetries) {
240
+ const rerunId = await rerunLatestRunForCommit(repo, commitSha);
241
+ if (rerunId) {
242
+ console.log(chalk.yellow(`[~] CI failed; triggered rerun for workflow run ${rerunId}.`));
243
+ continue;
244
+ }
245
+ console.log(chalk.yellow('[~] CI failed and auto-rerun could not be triggered. Stopping retries.'));
246
+ break;
247
+ }
248
+ if (ciStatus === 'pending') {
249
+ console.log(chalk.yellow('[~] CI status still pending after polling window.'));
250
+ }
251
+ else {
252
+ console.log(chalk.yellow('[~] CI failed after retry budget.'));
253
+ }
254
+ break;
255
+ }
256
+ process.exit(1);
257
+ }
258
+ catch (error) {
259
+ console.log(chalk.red(`\n[-] Auto-heal failed: ${error.message}\n`));
260
+ process.exit(1);
261
+ }
262
+ }
263
+ else {
264
+ console.log(chalk.dim(`\nNext: review & apply patch manually (e.g., git apply ${opts.outDir}/fix.conservative.patch)`));
265
+ console.log(chalk.dim(`Or use --auto-heal to let Guardian fix it automatically\n`));
266
+ }
267
+ }
268
+ else {
269
+ console.log(chalk.dim(`\nNext: run with --show-options to generate patches\n`));
270
+ }
271
+ }
272
+ catch (error) {
273
+ console.error(chalk.red('\n[-] Error:'), error.message);
274
+ process.exit(1);
275
+ }
276
+ });
277
+ program
278
+ .command("eval")
279
+ .description("[>] Real-world evaluation harness across multiple failed runs")
280
+ .requiredOption("-r, --repo <owner/repo>", "Target repository")
281
+ .option("--run-ids <ids>", "Comma-separated run IDs (e.g. 123,456,789)")
282
+ .option("--run-file <path>", "Path to file with run IDs (JSON array or newline/comma text)")
283
+ .option("--failed-limit <n>", "Use N most recent failed runs when IDs are not provided", "5")
284
+ .option("--max-log-chars <n>", "Maximum failed-log characters to analyze", "12000")
285
+ .option("--fast", "Fast mode for each evaluated run")
286
+ .option("--fail-fast", "Stop harness on first failed case")
287
+ .option("--out-dir <path>", "Output directory for evaluation reports", ".copilot-guardian/eval")
288
+ .action(async (opts) => {
289
+ try {
290
+ const repo = opts.repo;
291
+ const maxLogChars = Number(opts.maxLogChars);
292
+ if (!Number.isFinite(maxLogChars) || maxLogChars < 2000) {
293
+ throw new Error("--max-log-chars must be a number >= 2000");
294
+ }
295
+ const failedLimit = Number(opts.failedLimit);
296
+ if (!Number.isFinite(failedLimit) || failedLimit < 1) {
297
+ throw new Error("--failed-limit must be a number >= 1");
298
+ }
299
+ const fromOption = opts.runIds ? parseRunIds(String(opts.runIds)) : [];
300
+ const fromFile = opts.runFile ? parseRunIdsFile(String(opts.runFile)) : [];
301
+ let runIds = Array.from(new Set([...fromOption, ...fromFile]));
302
+ if (runIds.length === 0) {
303
+ runIds = await getRecentFailedRunIds(repo, failedLimit);
304
+ }
305
+ if (runIds.length === 0) {
306
+ throw new Error("No run IDs resolved. Provide --run-ids or --run-file.");
307
+ }
308
+ console.log(chalk.bold("\n=== Guardian Evaluation Plan ===\n"));
309
+ console.log(chalk.dim(`Repo: ${repo}`));
310
+ console.log(chalk.dim(`Run IDs: ${runIds.join(", ")}`));
311
+ console.log(chalk.dim(`Out: ${opts.outDir}\n`));
312
+ const report = await runEvaluationHarness(repo, runIds, {
313
+ outDir: String(opts.outDir),
314
+ maxLogChars,
315
+ failFast: Boolean(opts.failFast),
316
+ fast: Boolean(opts.fast)
317
+ });
318
+ console.log(chalk.green.bold("[+] Evaluation summary"));
319
+ console.log(chalk.dim(` Analyze success: ${report.summary.analyze_success_rate}%`));
320
+ console.log(chalk.dim(` Patch generation: ${report.summary.patch_generation_rate}%`));
321
+ console.log(chalk.dim(` Patchable (>=1 GO): ${report.summary.patchable_rate}%`));
322
+ console.log(chalk.dim(` All NO_GO: ${report.summary.all_no_go_rate}%`));
323
+ console.log(chalk.dim(` Report: ${report.options.out_dir}/eval.report.md\n`));
324
+ }
325
+ catch (error) {
326
+ console.error(chalk.red("\n[-] Error:"), error.message);
327
+ process.exit(1);
328
+ }
329
+ });
330
+ program
331
+ .command("analyze")
332
+ .description("[>] Fetch logs and produce a structured multi-hypothesis diagnosis")
333
+ .requiredOption("-r, --repo <owner/repo>", "Target repository")
334
+ .requiredOption("-i, --run-id <id>", "Run ID")
335
+ .option("--max-log-chars <n>", "Maximum failed-log characters to analyze", "12000")
336
+ .option("--fast", "Fast mode: shorter model timeout + reduced source fetch")
337
+ .option("--out-dir <path>", "Output directory", ".copilot-guardian")
338
+ .action(async (opts) => {
339
+ try {
340
+ const maxLogChars = Number(opts.maxLogChars);
341
+ if (!Number.isFinite(maxLogChars) || maxLogChars < 2000) {
342
+ throw new Error("--max-log-chars must be a number >= 2000");
343
+ }
344
+ await analyzeRun(opts.repo, Number(opts.runId), opts.outDir, maxLogChars, {
345
+ fast: Boolean(opts.fast)
346
+ });
347
+ console.log(chalk.green(`\n[+] Analysis saved to ${opts.outDir}/analysis.json\n`));
348
+ }
349
+ catch (error) {
350
+ console.error(chalk.red('\n[-] Error:'), error.message);
351
+ process.exit(1);
352
+ }
353
+ });
354
+ program
355
+ .command("debug")
356
+ .description("[>] Interactive Copilot-in-the-loop debugging")
357
+ .requiredOption("-r, --repo <owner/repo>", "Target repository")
358
+ .option("-i, --run-id <id>", "Run ID")
359
+ .option("--last-failed", "Auto-select most recent failed run")
360
+ .option("--out-dir <path>", "Output directory", ".copilot-guardian")
361
+ .action(async (opts) => {
362
+ try {
363
+ const repo = opts.repo;
364
+ let runId;
365
+ if (opts.lastFailed) {
366
+ runId = await getLastFailedRunId(repo);
367
+ }
368
+ else if (opts.runId) {
369
+ runId = Number(opts.runId);
370
+ }
371
+ else {
372
+ throw new Error("Provide --run-id or --last-failed");
373
+ }
374
+ renderHeader(repo, runId);
375
+ await debugInteractive(repo, runId, opts.outDir);
376
+ console.log(chalk.green(`\n[+] Debug transcript saved to ${opts.outDir}/debug.transcript.md\n`));
377
+ }
378
+ catch (error) {
379
+ console.error(chalk.red('\n[-] Error:'), error.message);
380
+ process.exit(1);
381
+ }
382
+ });
383
+ program.parse(process.argv);
384
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}