@doidor/agentrig 0.5.3

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 (94) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +224 -0
  3. package/dist/agent/claude.js +125 -0
  4. package/dist/agent/claude.js.map +1 -0
  5. package/dist/agent/copilot.js +147 -0
  6. package/dist/agent/copilot.js.map +1 -0
  7. package/dist/agent/index.js +17 -0
  8. package/dist/agent/index.js.map +1 -0
  9. package/dist/agent/provider.js +10 -0
  10. package/dist/agent/provider.js.map +1 -0
  11. package/dist/cli.js +169 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/commands/compile.js +42 -0
  14. package/dist/commands/compile.js.map +1 -0
  15. package/dist/commands/dashboard.js +35 -0
  16. package/dist/commands/dashboard.js.map +1 -0
  17. package/dist/commands/doctor.js +40 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/eval.js +178 -0
  20. package/dist/commands/eval.js.map +1 -0
  21. package/dist/commands/init.js +100 -0
  22. package/dist/commands/init.js.map +1 -0
  23. package/dist/commands/update.js +176 -0
  24. package/dist/commands/update.js.map +1 -0
  25. package/dist/core/activity.js +80 -0
  26. package/dist/core/activity.js.map +1 -0
  27. package/dist/core/audit.js +112 -0
  28. package/dist/core/audit.js.map +1 -0
  29. package/dist/core/compile.js +250 -0
  30. package/dist/core/compile.js.map +1 -0
  31. package/dist/core/fsutil.js +45 -0
  32. package/dist/core/fsutil.js.map +1 -0
  33. package/dist/core/install.js +97 -0
  34. package/dist/core/install.js.map +1 -0
  35. package/dist/core/knowledge.js +34 -0
  36. package/dist/core/knowledge.js.map +1 -0
  37. package/dist/core/logger.js +31 -0
  38. package/dist/core/logger.js.map +1 -0
  39. package/dist/core/paths.js +22 -0
  40. package/dist/core/paths.js.map +1 -0
  41. package/dist/core/setupsteps.js +72 -0
  42. package/dist/core/setupsteps.js.map +1 -0
  43. package/dist/core/state.js +19 -0
  44. package/dist/core/state.js.map +1 -0
  45. package/dist/core/surfaces.js +62 -0
  46. package/dist/core/surfaces.js.map +1 -0
  47. package/dist/prompts/index.js +117 -0
  48. package/dist/prompts/index.js.map +1 -0
  49. package/dist/version.js +26 -0
  50. package/dist/version.js.map +1 -0
  51. package/knowledge/PRINCIPLES.md +106 -0
  52. package/knowledge/manifest.json +247 -0
  53. package/knowledge/templates/AGENTS.md +66 -0
  54. package/knowledge/templates/AGENTS.package.example.md +19 -0
  55. package/knowledge/templates/agents/README.md +33 -0
  56. package/knowledge/templates/agents/developer.md +7 -0
  57. package/knowledge/templates/agents/developer.yml +7 -0
  58. package/knowledge/templates/agents/judge.md +6 -0
  59. package/knowledge/templates/agents/judge.yml +6 -0
  60. package/knowledge/templates/agents/reviewer.md +6 -0
  61. package/knowledge/templates/agents/reviewer.yml +7 -0
  62. package/knowledge/templates/agents/triager.md +8 -0
  63. package/knowledge/templates/agents/triager.yml +8 -0
  64. package/knowledge/templates/dashboard/dashboard.mjs +261 -0
  65. package/knowledge/templates/eval/RUBRIC.md +94 -0
  66. package/knowledge/templates/eval/axes.json +56 -0
  67. package/knowledge/templates/eval/checks.json +304 -0
  68. package/knowledge/templates/eval/sandbox/eval-rules.md +23 -0
  69. package/knowledge/templates/eval/scenarios/README.md +24 -0
  70. package/knowledge/templates/eval/scenarios/add-small-feature.md +28 -0
  71. package/knowledge/templates/eval/scenarios/fix-failing-test.md +27 -0
  72. package/knowledge/templates/eval/scenarios/review-catches-bug.md +30 -0
  73. package/knowledge/templates/eval/score.mjs +257 -0
  74. package/knowledge/templates/eval/static-audit.mjs +112 -0
  75. package/knowledge/templates/harness/ORCHESTRATION.md +53 -0
  76. package/knowledge/templates/harness/state-machine.yml +105 -0
  77. package/knowledge/templates/mcp/mcp.json +12 -0
  78. package/knowledge/templates/rules/README.md +32 -0
  79. package/knowledge/templates/rules/code-review.md +26 -0
  80. package/knowledge/templates/rules/coding-standards.md +15 -0
  81. package/knowledge/templates/rules/no-debug-logging.md +16 -0
  82. package/knowledge/templates/rules/security.md +23 -0
  83. package/knowledge/templates/scripts/repair-worktrees.sh +124 -0
  84. package/knowledge/templates/skills/fix-ci/SKILL.md +17 -0
  85. package/knowledge/templates/skills/harness-eval/SKILL.md +83 -0
  86. package/knowledge/templates/skills/self-verify/SKILL.md +25 -0
  87. package/knowledge/templates/skills/skill-authoring/SKILL.md +35 -0
  88. package/knowledge/templates/skills/skill-improver/SKILL.md +23 -0
  89. package/knowledge/templates/skills/verify-loop/SKILL.md +35 -0
  90. package/knowledge/templates/wiki/README.md +23 -0
  91. package/knowledge/templates/wiki/_TEMPLATE.md +16 -0
  92. package/knowledge/templates/wiki/index.md +29 -0
  93. package/knowledge/templates/wiki/troubleshooting.md +14 -0
  94. package/package.json +70 -0
package/dist/cli.js ADDED
@@ -0,0 +1,169 @@
1
+ #!/usr/bin/env node
2
+ import { resolve } from "node:path";
3
+ import { setVerbose, log, color } from "./core/logger.js";
4
+ import { initCommand } from "./commands/init.js";
5
+ import { updateCommand } from "./commands/update.js";
6
+ import { evalCommand } from "./commands/eval.js";
7
+ import { doctorCommand } from "./commands/doctor.js";
8
+ import { dashboardCommand } from "./commands/dashboard.js";
9
+ import { compileCommand } from "./commands/compile.js";
10
+ import pkg from "./version.js";
11
+ const BOOLEAN_FLAGS = new Set([
12
+ "dry-run",
13
+ "diff",
14
+ "skip-agent",
15
+ "static",
16
+ "dynamic",
17
+ "rubric",
18
+ "json",
19
+ "no-tasks",
20
+ "verbose",
21
+ "yes",
22
+ "help",
23
+ "version",
24
+ ]);
25
+ function parseArgs(argv) {
26
+ const positionals = [];
27
+ const flags = {};
28
+ let command;
29
+ for (let i = 0; i < argv.length; i++) {
30
+ const a = argv[i];
31
+ if (a.startsWith("--")) {
32
+ const key = a.slice(2);
33
+ const next = argv[i + 1];
34
+ if (!BOOLEAN_FLAGS.has(key) && next !== undefined && !next.startsWith("-")) {
35
+ flags[key] = next;
36
+ i++;
37
+ }
38
+ else {
39
+ flags[key] = true;
40
+ }
41
+ }
42
+ else if (a.startsWith("-")) {
43
+ for (const ch of a.slice(1))
44
+ flags[ch] = true;
45
+ }
46
+ else if (command === undefined) {
47
+ command = a;
48
+ }
49
+ else {
50
+ positionals.push(a);
51
+ }
52
+ }
53
+ return { command, positionals, flags };
54
+ }
55
+ const HELP = `${color.bold("agentrig")} — an agentic meta-harness (a harness of harnesses)
56
+
57
+ ${color.bold("Usage:")} agentrig <command> [path] [options]
58
+
59
+ ${color.bold("Commands:")}
60
+ init [path] Investigate the repo and install a best-practice agent harness
61
+ update [path] Re-sync the latest best practices into an existing harness
62
+ --diff show how your preserved files differ from canonical
63
+ compile [path] Project AGENTS.md + rules into every agent surface (local + remote):
64
+ copilot-instructions, .github/instructions, CLAUDE.md, .cursor/rules,
65
+ MCP, and copilot-setup-steps.yml
66
+ eval [path] Evaluate the harness itself (defaults to the full agentic, harness-on run)
67
+ --static fast deterministic structural audit, no model (use in CI)
68
+ --rubric print what's evaluated (rubric axes, issue codes, scenarios)
69
+ --scenario <id> run one scenario only (e.g. fix-failing-test)
70
+ --variant <name> label this run (default 'harness'; use 'baseline' for harness-OFF)
71
+ --timeout <min> absolute cap per agent turn (default 45)
72
+ doctor [path] Quick health check (installed? agent reachable? score?)
73
+ dashboard [path] Show agent roster, live GitHub tasks, harness score, and evals
74
+ --html [file] write a self-contained HTML dashboard
75
+ --no-tasks skip live GitHub lookups (offline)
76
+
77
+ ${color.bold("Options:")}
78
+ --model <id> Model to use for agentic steps (e.g. claude-sonnet-4.5, gpt-5)
79
+ --dry-run Show what would happen without writing or calling the model
80
+ --skip-agent Install/update the canonical harness without the agentic steps
81
+ --static (eval) deterministic audit only
82
+ --dynamic (eval) run dynamic behavioral eval
83
+ --json Machine-readable output (eval/doctor/dashboard)
84
+ --min <pct> (eval --static) exit non-zero if Harness Score < pct
85
+ --html [file] (dashboard) write an HTML page instead of terminal output
86
+ --no-tasks (dashboard) skip live GitHub task lookups
87
+ --verbose Verbose logging
88
+ -h, --help Show this help
89
+ -v, --version Show version
90
+
91
+ ${color.bold("Environment:")}
92
+ AGENTRIG_PROVIDER Agent backend (default: copilot)
93
+
94
+ ${color.dim("Best practices live in this package's knowledge/ directory — edit them and run `agentrig update`.")}`;
95
+ async function main() {
96
+ const { command, positionals, flags } = parseArgs(process.argv.slice(2));
97
+ if (flags.version || flags.v || command === "version") {
98
+ console.log(pkg.version);
99
+ return 0;
100
+ }
101
+ if (flags.help || flags.h || command === "help") {
102
+ console.log(HELP);
103
+ return 0;
104
+ }
105
+ if (!command) {
106
+ console.log(HELP);
107
+ return 1;
108
+ }
109
+ setVerbose(Boolean(flags.verbose));
110
+ const repoRoot = resolve(positionals[0] ?? ".");
111
+ const model = typeof flags.model === "string" ? flags.model : undefined;
112
+ try {
113
+ switch (command) {
114
+ case "init":
115
+ return await initCommand(repoRoot, {
116
+ dryRun: Boolean(flags["dry-run"]),
117
+ ...(model ? { model } : {}),
118
+ yes: Boolean(flags.yes),
119
+ verbose: Boolean(flags.verbose),
120
+ skipAgent: Boolean(flags["skip-agent"]),
121
+ });
122
+ case "update":
123
+ return await updateCommand(repoRoot, {
124
+ dryRun: Boolean(flags["dry-run"]),
125
+ diff: Boolean(flags.diff),
126
+ ...(model ? { model } : {}),
127
+ verbose: Boolean(flags.verbose),
128
+ skipAgent: Boolean(flags["skip-agent"]),
129
+ });
130
+ case "eval": {
131
+ // Default to the full agentic, harness-on dynamic eval; `--static` for the fast no-model audit.
132
+ const mode = flags.static ? "static" : "dynamic";
133
+ return await evalCommand(repoRoot, {
134
+ mode,
135
+ json: Boolean(flags.json),
136
+ rubric: Boolean(flags.rubric),
137
+ ...(model ? { model } : {}),
138
+ ...(flags.min != null ? { min: Number(flags.min) } : {}),
139
+ ...(typeof flags.scenario === "string" ? { scenario: flags.scenario } : {}),
140
+ ...(typeof flags.variant === "string" ? { variant: flags.variant } : {}),
141
+ ...(flags.timeout != null ? { timeoutMinutes: Number(flags.timeout) } : {}),
142
+ verbose: Boolean(flags.verbose),
143
+ });
144
+ }
145
+ case "doctor":
146
+ return await doctorCommand(repoRoot, { json: Boolean(flags.json) });
147
+ case "compile":
148
+ return compileCommand(repoRoot, { json: Boolean(flags.json) });
149
+ case "dashboard":
150
+ return dashboardCommand(repoRoot, {
151
+ json: Boolean(flags.json),
152
+ noTasks: Boolean(flags["no-tasks"]),
153
+ ...(flags.html != null ? { html: flags.html } : {}),
154
+ });
155
+ default:
156
+ log.error(`Unknown command: ${command}`);
157
+ console.log(`\n${HELP}`);
158
+ return 1;
159
+ }
160
+ }
161
+ catch (err) {
162
+ log.error(err.message);
163
+ if (flags.verbose)
164
+ console.error(err);
165
+ return 1;
166
+ }
167
+ }
168
+ main().then((code) => process.exit(code));
169
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { isInstalled } from "../core/state.js";
2
+ import { compileSurfaces } from "../core/compile.js";
3
+ import { validateSetupSteps } from "../core/setupsteps.js";
4
+ import { color, log } from "../core/logger.js";
5
+ /** Re-project the canonical source (AGENTS.md + rules) into every agent surface, local and remote. */
6
+ export function compileCommand(repoRoot, options) {
7
+ if (!isInstalled(repoRoot)) {
8
+ log.error("No AgentRig harness here. Run `agentrig init` first.");
9
+ return 1;
10
+ }
11
+ const result = compileSurfaces(repoRoot);
12
+ const setup = validateSetupSteps(repoRoot);
13
+ if (options.json) {
14
+ console.log(JSON.stringify({ ...result, setupSteps: setup }, null, 2));
15
+ return setup.ok ? 0 : 1;
16
+ }
17
+ log.info(color.bold("AgentRig — compiling agent surfaces\n"));
18
+ for (const p of result.generated)
19
+ log.info(` ${color.green("✚")} ${p}`);
20
+ for (const s of result.skipped)
21
+ log.info(color.dim(` · ${s.path} — ${s.reason}`));
22
+ log.ok(`\nprojected ${result.generated.length} file(s) for local + remote agents`);
23
+ renderSetupValidation(setup);
24
+ log.info(color.dim(" Commit these so web/remote agents (GitHub Copilot) and other CLIs benefit too."));
25
+ return setup.ok ? 0 : 1;
26
+ }
27
+ /** Print the copilot-setup-steps.yml validation result. */
28
+ export function renderSetupValidation(setup) {
29
+ if (!setup.present)
30
+ return;
31
+ if (setup.ok && setup.warnings.length === 0) {
32
+ log.ok(`copilot-setup-steps.yml is valid (checked: ${setup.checkedWith.join(", ")})`);
33
+ return;
34
+ }
35
+ for (const e of setup.errors)
36
+ log.error(`copilot-setup-steps.yml: ${e}`);
37
+ for (const w of setup.warnings)
38
+ log.warn(`copilot-setup-steps.yml: ${w}`);
39
+ if (!setup.ok)
40
+ log.info(color.dim(" GitHub also validates this workflow on push (Actions tab)."));
41
+ }
42
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAM/C,sGAAsG;AACtG,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,OAAuB;IACtE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAClE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACvE,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;IAC9D,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnF,GAAG,CAAC,EAAE,CAAC,eAAe,MAAM,CAAC,SAAS,CAAC,MAAM,oCAAoC,CAAC,CAAC;IACnF,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC,CAAC;IACxG,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,qBAAqB,CAAC,KAA4C;IAChF,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO;IAC3B,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,GAAG,CAAC,EAAE,CAAC,8CAA8C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtF,OAAO;IACT,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM;QAAE,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ;QAAE,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAC;AACrG,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { existsSync } from "node:fs";
2
+ import { spawnSync } from "node:child_process";
3
+ import { join } from "../core/fsutil.js";
4
+ import { isInstalled } from "../core/state.js";
5
+ import { log } from "../core/logger.js";
6
+ /**
7
+ * Render the harness dashboard. The real implementation is the dependency-free
8
+ * `.agentrig/dashboard/dashboard.mjs` installed in the repo (so it also runs without the global
9
+ * CLI); this command is a thin convenience wrapper that forwards flags.
10
+ */
11
+ export function dashboardCommand(repoRoot, options) {
12
+ const script = join(repoRoot, ".agentrig", "dashboard", "dashboard.mjs");
13
+ if (!existsSync(script)) {
14
+ if (!isInstalled(repoRoot)) {
15
+ log.error("No AgentRig harness here. Run `agentrig init` first.");
16
+ }
17
+ else {
18
+ log.error("Dashboard not installed. Run `agentrig update` to add it.");
19
+ }
20
+ return 1;
21
+ }
22
+ const passthrough = [];
23
+ if (options.json)
24
+ passthrough.push("--json");
25
+ if (options.noTasks)
26
+ passthrough.push("--no-tasks");
27
+ if (options.html) {
28
+ passthrough.push("--html");
29
+ if (typeof options.html === "string")
30
+ passthrough.push(options.html);
31
+ }
32
+ const result = spawnSync(process.execPath, [script, ...passthrough], { stdio: "inherit" });
33
+ return result.status ?? 0;
34
+ }
35
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAQxC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,OAAyB;IAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IACzE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,OAAO,CAAC,IAAI;QAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,OAAO;QAAE,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;YAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3F,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { auditHarness } from "../core/audit.js";
2
+ import { readState, isInstalled } from "../core/state.js";
3
+ import { validateSetupSteps } from "../core/setupsteps.js";
4
+ import { color, log } from "../core/logger.js";
5
+ import { getProvider } from "../agent/index.js";
6
+ /** Quick health check: is a harness installed, is the agent reachable, and what is the score. */
7
+ export async function doctorCommand(repoRoot, options) {
8
+ const installed = isInstalled(repoRoot);
9
+ const state = readState(repoRoot);
10
+ const report = auditHarness(repoRoot);
11
+ const setup = validateSetupSteps(repoRoot);
12
+ const provider = getProvider();
13
+ const pre = await provider.preflight();
14
+ if (options.json) {
15
+ console.log(JSON.stringify({
16
+ installed,
17
+ knowledgeVersion: state?.knowledgeVersion ?? null,
18
+ harnessScore: report.harnessScore,
19
+ setupSteps: setup,
20
+ agent: { provider: provider.name, ...pre },
21
+ }, null, 2));
22
+ return installed && pre.ok ? 0 : 1;
23
+ }
24
+ log.info(color.bold("AgentRig — doctor\n"));
25
+ log.info(` harness installed : ${installed ? color.green("yes") : color.red("no")}`);
26
+ if (state)
27
+ log.info(` knowledge version : ${state.knowledgeVersion}`);
28
+ log.info(` harness score : ${report.harnessScore}%`);
29
+ const setupStatus = !setup.present
30
+ ? color.dim("not present")
31
+ : setup.ok
32
+ ? color.green(setup.warnings.length ? `valid (${setup.warnings.length} warning)` : "valid")
33
+ : color.red(`${setup.errors.length} error(s)`);
34
+ log.info(` setup-steps.yml : ${setupStatus}`);
35
+ log.info(` agent (${provider.name}) : ${pre.ok ? color.green(pre.detail) : color.red(pre.detail)}`);
36
+ if (!installed)
37
+ log.info(color.dim("\n Run `agentrig init` to install a harness."));
38
+ return installed && pre.ok ? 0 : 1;
39
+ }
40
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ import { existsSync, mkdirSync, writeFileSync, readdirSync, readFileSync } from "node:fs";
2
+ import { spawnSync } from "node:child_process";
3
+ import { auditHarness } from "../core/audit.js";
4
+ import { join } from "../core/fsutil.js";
5
+ import { isInstalled } from "../core/state.js";
6
+ import { color, log } from "../core/logger.js";
7
+ import { ActivityMonitor } from "../core/activity.js";
8
+ import { getProvider } from "../agent/index.js";
9
+ import { AgentTimeoutError } from "../agent/provider.js";
10
+ import { buildDynamicEvalPrompt, SYSTEM_MESSAGE } from "../prompts/index.js";
11
+ /** Print what the dynamic eval measures: rubric types/axes/issue-codes + installed scenarios. */
12
+ export function renderRubric(repoRoot, asJson) {
13
+ const axesPath = join(repoRoot, ".agentrig", "eval", "axes.json");
14
+ const scenariosDir = join(repoRoot, ".agentrig", "eval", "scenarios");
15
+ if (!existsSync(axesPath)) {
16
+ log.error("No rubric found (.agentrig/eval/axes.json). Run `agentrig init` first.");
17
+ return 1;
18
+ }
19
+ const axes = JSON.parse(readFileSync(axesPath, "utf8"));
20
+ const scenarios = [];
21
+ if (existsSync(scenariosDir)) {
22
+ for (const f of readdirSync(scenariosDir)) {
23
+ if (!f.endsWith(".md") || f === "README.md")
24
+ continue;
25
+ const fm = readFileSync(join(scenariosDir, f), "utf8");
26
+ const get = (k) => (fm.match(new RegExp(`^${k}:\\s*(.+)$`, "m")) || [])[1]?.trim() ?? "";
27
+ scenarios.push({ id: get("id") || f.replace(/\.md$/, ""), type: get("type") || "run", scope: get("scope") || "" });
28
+ }
29
+ }
30
+ if (asJson) {
31
+ console.log(JSON.stringify({ passThreshold: axes.passThreshold, tiers: axes.tiers, types: axes.types, scenarios }, null, 2));
32
+ return 0;
33
+ }
34
+ log.info(color.bold("AgentRig — what the dynamic eval measures\n"));
35
+ log.info(color.dim(` Source of truth: .agentrig/eval/axes.json + RUBRIC.md + scenarios/. Tiers ${(axes.tiers || [0, 0.5, 1]).join("/")}, pass ≥ ${axes.passThreshold}.\n`));
36
+ for (const [type, def] of Object.entries(axes.types)) {
37
+ log.info(` ${color.bold(type.toUpperCase())} — ${def.label}`);
38
+ for (const [cat, axesMap] of Object.entries(def.categories)) {
39
+ log.info(` ${color.cyan(cat)}`);
40
+ for (const [axis, codes] of Object.entries(axesMap)) {
41
+ log.info(` ${axis.padEnd(20)} ${color.dim(`codes: ${codes.join(", ")}`)}`);
42
+ }
43
+ }
44
+ }
45
+ log.info(`\n ${color.bold("Scenarios")} (.agentrig/eval/scenarios/):`);
46
+ for (const s of scenarios)
47
+ log.info(` ${s.id.padEnd(22)} ${color.dim(`[${s.type}${s.scope ? ", " + s.scope : ""}]`)}`);
48
+ log.info(color.dim("\n Run them: agentrig eval --dynamic [--scenario <id>]"));
49
+ return 0;
50
+ }
51
+ /** Best-effort current git HEAD sha of the repo (for replayable run metadata). */
52
+ function gitHead(repoRoot) {
53
+ const res = spawnSync("git", ["-C", repoRoot, "rev-parse", "HEAD"], { encoding: "utf8" });
54
+ return res.status === 0 ? res.stdout.trim() : null;
55
+ }
56
+ export function renderAudit(report) {
57
+ log.info(color.bold("AgentRig — harness audit"));
58
+ log.info(color.dim(` checks source: ${report.source}\n`));
59
+ for (const r of [...report.results].sort((a, b) => a.principle - b.principle || a.id.localeCompare(b.id))) {
60
+ const tag = r.score === 1 ? color.green("PASS") : r.score === 0.5 ? color.yellow("PART") : color.red("FAIL");
61
+ log.info(` [${tag}] P${r.principle} ${r.title}`);
62
+ if (r.evidence)
63
+ log.info(color.dim(` ↳ ${r.evidence}`));
64
+ }
65
+ const full = report.results.filter((r) => r.score === 1).length;
66
+ const scoreColor = report.harnessScore >= 80 ? color.green : report.harnessScore >= 50 ? color.yellow : color.red;
67
+ log.info(`\n ${color.bold("Harness Score")}: ${scoreColor(`${report.harnessScore}%`)} (${full}/${report.results.length} full credit)`);
68
+ }
69
+ export async function evalCommand(repoRoot, options) {
70
+ if (options.rubric) {
71
+ return renderRubric(repoRoot, Boolean(options.json));
72
+ }
73
+ if (options.mode === "static") {
74
+ const report = auditHarness(repoRoot);
75
+ if (options.json) {
76
+ console.log(JSON.stringify(report, null, 2));
77
+ }
78
+ else {
79
+ if (!isInstalled(repoRoot)) {
80
+ log.warn("No AgentRig harness detected here (auditing against canonical checks anyway).");
81
+ log.warn("Run `agentrig init` to install one.\n");
82
+ }
83
+ renderAudit(report);
84
+ }
85
+ if (options.min != null && report.harnessScore < options.min) {
86
+ log.error(`Harness Score ${report.harnessScore}% is below required ${options.min}%`);
87
+ return 1;
88
+ }
89
+ return 0;
90
+ }
91
+ // Dynamic: drive the harness behavioral eval through the agent.
92
+ if (!isInstalled(repoRoot)) {
93
+ log.error("No harness installed. Run `agentrig init` before `agentrig eval --dynamic`.");
94
+ return 1;
95
+ }
96
+ const provider = getProvider();
97
+ const pre = await provider.preflight();
98
+ if (!pre.ok) {
99
+ log.error(`Agent unavailable: ${pre.detail}`);
100
+ return 1;
101
+ }
102
+ log.ok(`agent ready (${pre.detail})`);
103
+ const scopeLabel = options.scenario ? `scenario "${options.scenario}"` : "all scenarios";
104
+ const variant = options.variant ?? "harness";
105
+ // Create a per-run artifacts directory + meta.json (CLI-owned; the agent fills diff/output).
106
+ const runId = `run-${new Date().toISOString().replace(/[:.]/g, "-")}`;
107
+ const artifactsDirAbs = join(repoRoot, ".agentrig", "eval", "results", "runs", runId);
108
+ const artifactsDirRel = join(".agentrig", "eval", "results", "runs", runId);
109
+ mkdirSync(artifactsDirAbs, { recursive: true });
110
+ const startedAt = new Date().toISOString();
111
+ const meta = {
112
+ runId,
113
+ startedAt,
114
+ provider: provider.name,
115
+ model: options.model ?? null,
116
+ scenario: options.scenario ?? "all",
117
+ variant,
118
+ gitHead: gitHead(repoRoot),
119
+ };
120
+ writeFileSync(join(artifactsDirAbs, "meta.json"), JSON.stringify(meta, null, 2));
121
+ log.step(`running dynamic harness evaluation — ${scopeLabel}${variant ? ` [variant: ${variant}]` : ""} (this calls the model)…`);
122
+ log.info(color.dim(` Run ${runId}; scores + artifacts under ${artifactsDirRel}/`));
123
+ log.info(color.dim(" Live activity below; this can take many minutes.\n"));
124
+ const monitor = new ActivityMonitor().start();
125
+ const conversationOptions = {
126
+ cwd: repoRoot,
127
+ systemMessage: SYSTEM_MESSAGE,
128
+ onEvent: monitor.handle,
129
+ ...(options.model ? { model: options.model } : {}),
130
+ ...(options.timeoutMinutes ? { maxMs: options.timeoutMinutes * 60 * 1000 } : {}),
131
+ };
132
+ const convo = await provider.startConversation(conversationOptions);
133
+ let timedOut = false;
134
+ try {
135
+ const summary = await convo.send(buildDynamicEvalPrompt(options.scenario, { runId, artifactsDir: artifactsDirRel, ...(variant ? { variant } : {}) }));
136
+ monitor.stop();
137
+ log.info("\n" + summary);
138
+ }
139
+ catch (err) {
140
+ monitor.stop();
141
+ if (err instanceof AgentTimeoutError) {
142
+ timedOut = true;
143
+ log.warn(`agent stopped: ${err.message}.`);
144
+ log.warn("Any scenarios that finished were still saved — showing them below.");
145
+ }
146
+ else {
147
+ throw err;
148
+ }
149
+ }
150
+ finally {
151
+ monitor.stop();
152
+ await convo.end();
153
+ }
154
+ // Finalize the run metadata.
155
+ const finishedAt = new Date().toISOString();
156
+ meta.finishedAt = finishedAt;
157
+ meta.durationMs = Date.parse(finishedAt) - Date.parse(startedAt);
158
+ meta.timedOut = timedOut;
159
+ meta.artifacts = readdirSync(artifactsDirAbs).filter((f) => f !== "meta.json");
160
+ writeFileSync(join(artifactsDirAbs, "meta.json"), JSON.stringify(meta, null, 2));
161
+ // Always surface whatever was saved, even on timeout.
162
+ log.info("");
163
+ renderSavedDynamicResults(repoRoot);
164
+ log.info(color.dim(`\n Run artifacts: ${artifactsDirRel}/ (meta.json + any diff/output the run saved)`));
165
+ log.info(color.dim(" Re-run a single scenario with: agentrig eval --dynamic --scenario <id>"));
166
+ log.info(color.dim(" Raise the cap with: --timeout <minutes>"));
167
+ return timedOut ? 1 : 0;
168
+ }
169
+ /** Run the installed score.mjs aggregator and print its report (best-effort). */
170
+ function renderSavedDynamicResults(repoRoot) {
171
+ const scoreScript = join(repoRoot, ".agentrig", "eval", "score.mjs");
172
+ if (!existsSync(scoreScript))
173
+ return;
174
+ const res = spawnSync(process.execPath, [scoreScript, "report"], { encoding: "utf8" });
175
+ if (res.stdout)
176
+ process.stdout.write(res.stdout);
177
+ }
178
+ //# sourceMappingURL=eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../src/commands/eval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import { writeState, readState } from "../core/state.js";
2
+ import { loadManifest } from "../core/knowledge.js";
3
+ import { install, baseVars } from "../core/install.js";
4
+ import { linkSurfaces } from "../core/surfaces.js";
5
+ import { compileSurfaces } from "../core/compile.js";
6
+ import { validateSetupSteps } from "../core/setupsteps.js";
7
+ import { auditHarness } from "../core/audit.js";
8
+ import { color, log } from "../core/logger.js";
9
+ import { ActivityMonitor } from "../core/activity.js";
10
+ import { getProvider } from "../agent/index.js";
11
+ import { buildInvestigatePrompt, buildTailorPrompt, SYSTEM_MESSAGE } from "../prompts/index.js";
12
+ import { renderAudit } from "./eval.js";
13
+ import { renderSetupValidation } from "./compile.js";
14
+ import pkg from "../version.js";
15
+ export async function initCommand(repoRoot, options) {
16
+ const manifest = loadManifest();
17
+ const provider = getProvider();
18
+ log.info(color.bold(`AgentRig — initializing harness in ${repoRoot}\n`));
19
+ if (options.dryRun) {
20
+ const { plan } = install(repoRoot, manifest, { dryRun: true });
21
+ log.step("dry run — would install:");
22
+ for (const item of plan)
23
+ log.info(` ${color.dim(`P${item.principle}`)} ${item.dest} (${item.kind})`);
24
+ log.info("\n Agent prompts that would run:");
25
+ log.info(color.dim(" 1) investigate → .agentrig/context.md"));
26
+ log.info(color.dim(" 2) tailor AGENTS.md / rules / scenarios to the repo"));
27
+ return 0;
28
+ }
29
+ // Phase 1 (optional): agentic investigation, keeping one conversation for context continuity.
30
+ let convo = null;
31
+ let monitor = null;
32
+ if (!options.skipAgent) {
33
+ const pre = await provider.preflight();
34
+ if (!pre.ok) {
35
+ log.error(`Agent unavailable: ${pre.detail}`);
36
+ log.warn("Re-run with --skip-agent to install the canonical harness without tailoring.");
37
+ return 1;
38
+ }
39
+ log.ok(`agent ready (${pre.detail})`);
40
+ log.step("investigating the repository…");
41
+ monitor = new ActivityMonitor().start();
42
+ convo = await provider.startConversation({
43
+ cwd: repoRoot,
44
+ ...(options.model ? { model: options.model } : {}),
45
+ systemMessage: SYSTEM_MESSAGE,
46
+ onEvent: monitor.handle,
47
+ });
48
+ const investigation = await convo.send(buildInvestigatePrompt());
49
+ monitor.stop();
50
+ log.ok("investigation written to .agentrig/context.md");
51
+ if (options.verbose)
52
+ log.info(color.dim(investigation));
53
+ }
54
+ else {
55
+ log.warn("--skip-agent: installing canonical harness without repo-specific tailoring.");
56
+ }
57
+ // Phase 2: deterministic install of the canonical harness (guarantees a baseline + passing audit).
58
+ log.step("installing canonical harness artifacts…");
59
+ const { installed } = install(repoRoot, manifest, { vars: baseVars(repoRoot) });
60
+ log.ok(`installed ${installed.length} artifacts`);
61
+ // Mirror the canonical source to every vendor surface (.claude/.copilot/.opencode/.codex).
62
+ const surfaces = linkSurfaces(repoRoot);
63
+ if (surfaces.created.length)
64
+ log.ok(`linked surfaces: ${surfaces.created.join(", ")} → .agents`);
65
+ // Phase 3 (optional): agent tailors the installed files to the repo.
66
+ if (convo) {
67
+ log.step("tailoring the harness to this repository…");
68
+ monitor?.start();
69
+ const summary = await convo.send(buildTailorPrompt(manifest));
70
+ monitor?.stop();
71
+ log.ok("tailoring complete");
72
+ if (options.verbose)
73
+ log.info(color.dim(summary));
74
+ await convo.end();
75
+ }
76
+ // Phase 4: project the canonical source into every agent surface (local + remote).
77
+ const compiled = compileSurfaces(repoRoot);
78
+ log.ok(`compiled ${compiled.generated.length} agent-surface file(s) (Copilot, Claude, Cursor, MCP, setup-steps)`);
79
+ renderSetupValidation(validateSetupSteps(repoRoot));
80
+ // Record state.
81
+ const now = new Date().toISOString();
82
+ const prev = readState(repoRoot);
83
+ const state = {
84
+ agentrigVersion: pkg.version,
85
+ knowledgeVersion: manifest.knowledgeVersion,
86
+ provider: provider.name,
87
+ ...(options.model ? { model: options.model } : {}),
88
+ createdAt: prev?.createdAt ?? now,
89
+ updatedAt: now,
90
+ installed,
91
+ };
92
+ writeState(repoRoot, state);
93
+ log.ok("wrote .agentrig/state.json");
94
+ // Verify with the static audit.
95
+ log.info("");
96
+ renderAudit(auditHarness(repoRoot));
97
+ log.info(color.dim("\n Next: review AGENTS.md, then run `agentrig eval --static` anytime."));
98
+ return 0;
99
+ }
100
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}