@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.
- package/LICENSE +21 -0
- package/README.md +224 -0
- package/dist/agent/claude.js +125 -0
- package/dist/agent/claude.js.map +1 -0
- package/dist/agent/copilot.js +147 -0
- package/dist/agent/copilot.js.map +1 -0
- package/dist/agent/index.js +17 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/provider.js +10 -0
- package/dist/agent/provider.js.map +1 -0
- package/dist/cli.js +169 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/compile.js +42 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/dashboard.js +35 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/doctor.js +40 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/eval.js +178 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/init.js +100 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/update.js +176 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/core/activity.js +80 -0
- package/dist/core/activity.js.map +1 -0
- package/dist/core/audit.js +112 -0
- package/dist/core/audit.js.map +1 -0
- package/dist/core/compile.js +250 -0
- package/dist/core/compile.js.map +1 -0
- package/dist/core/fsutil.js +45 -0
- package/dist/core/fsutil.js.map +1 -0
- package/dist/core/install.js +97 -0
- package/dist/core/install.js.map +1 -0
- package/dist/core/knowledge.js +34 -0
- package/dist/core/knowledge.js.map +1 -0
- package/dist/core/logger.js +31 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/paths.js +22 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/setupsteps.js +72 -0
- package/dist/core/setupsteps.js.map +1 -0
- package/dist/core/state.js +19 -0
- package/dist/core/state.js.map +1 -0
- package/dist/core/surfaces.js +62 -0
- package/dist/core/surfaces.js.map +1 -0
- package/dist/prompts/index.js +117 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/version.js +26 -0
- package/dist/version.js.map +1 -0
- package/knowledge/PRINCIPLES.md +106 -0
- package/knowledge/manifest.json +247 -0
- package/knowledge/templates/AGENTS.md +66 -0
- package/knowledge/templates/AGENTS.package.example.md +19 -0
- package/knowledge/templates/agents/README.md +33 -0
- package/knowledge/templates/agents/developer.md +7 -0
- package/knowledge/templates/agents/developer.yml +7 -0
- package/knowledge/templates/agents/judge.md +6 -0
- package/knowledge/templates/agents/judge.yml +6 -0
- package/knowledge/templates/agents/reviewer.md +6 -0
- package/knowledge/templates/agents/reviewer.yml +7 -0
- package/knowledge/templates/agents/triager.md +8 -0
- package/knowledge/templates/agents/triager.yml +8 -0
- package/knowledge/templates/dashboard/dashboard.mjs +261 -0
- package/knowledge/templates/eval/RUBRIC.md +94 -0
- package/knowledge/templates/eval/axes.json +56 -0
- package/knowledge/templates/eval/checks.json +304 -0
- package/knowledge/templates/eval/sandbox/eval-rules.md +23 -0
- package/knowledge/templates/eval/scenarios/README.md +24 -0
- package/knowledge/templates/eval/scenarios/add-small-feature.md +28 -0
- package/knowledge/templates/eval/scenarios/fix-failing-test.md +27 -0
- package/knowledge/templates/eval/scenarios/review-catches-bug.md +30 -0
- package/knowledge/templates/eval/score.mjs +257 -0
- package/knowledge/templates/eval/static-audit.mjs +112 -0
- package/knowledge/templates/harness/ORCHESTRATION.md +53 -0
- package/knowledge/templates/harness/state-machine.yml +105 -0
- package/knowledge/templates/mcp/mcp.json +12 -0
- package/knowledge/templates/rules/README.md +32 -0
- package/knowledge/templates/rules/code-review.md +26 -0
- package/knowledge/templates/rules/coding-standards.md +15 -0
- package/knowledge/templates/rules/no-debug-logging.md +16 -0
- package/knowledge/templates/rules/security.md +23 -0
- package/knowledge/templates/scripts/repair-worktrees.sh +124 -0
- package/knowledge/templates/skills/fix-ci/SKILL.md +17 -0
- package/knowledge/templates/skills/harness-eval/SKILL.md +83 -0
- package/knowledge/templates/skills/self-verify/SKILL.md +25 -0
- package/knowledge/templates/skills/skill-authoring/SKILL.md +35 -0
- package/knowledge/templates/skills/skill-improver/SKILL.md +23 -0
- package/knowledge/templates/skills/verify-loop/SKILL.md +35 -0
- package/knowledge/templates/wiki/README.md +23 -0
- package/knowledge/templates/wiki/_TEMPLATE.md +16 -0
- package/knowledge/templates/wiki/index.md +29 -0
- package/knowledge/templates/wiki/troubleshooting.md +14 -0
- package/package.json +70 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/core/compile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { readFileSync, existsSync, statSync, readdirSync, mkdirSync, copyFileSync, chmodSync } from "node:fs";
|
|
2
|
+
import { dirname, join, resolve } from "node:path";
|
|
3
|
+
export function ensureDir(dir) {
|
|
4
|
+
if (!existsSync(dir))
|
|
5
|
+
mkdirSync(dir, { recursive: true });
|
|
6
|
+
}
|
|
7
|
+
export function listFilesRecursive(dir) {
|
|
8
|
+
if (!existsSync(dir))
|
|
9
|
+
return [];
|
|
10
|
+
const out = [];
|
|
11
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
12
|
+
const full = join(dir, entry.name);
|
|
13
|
+
if (entry.isDirectory())
|
|
14
|
+
out.push(...listFilesRecursive(full));
|
|
15
|
+
else
|
|
16
|
+
out.push(full);
|
|
17
|
+
}
|
|
18
|
+
return out;
|
|
19
|
+
}
|
|
20
|
+
/** Copy a file or directory tree from `src` to `dest`, creating parent dirs. */
|
|
21
|
+
export function copyPath(src, dest, mode) {
|
|
22
|
+
if (!existsSync(src))
|
|
23
|
+
throw new Error(`source path does not exist: ${src}`);
|
|
24
|
+
if (statSync(src).isDirectory()) {
|
|
25
|
+
ensureDir(dest);
|
|
26
|
+
for (const entry of readdirSync(src, { withFileTypes: true })) {
|
|
27
|
+
copyPath(join(src, entry.name), join(dest, entry.name), entry.isFile() ? mode : undefined);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
ensureDir(dirname(dest));
|
|
32
|
+
copyFileSync(src, dest);
|
|
33
|
+
if (mode)
|
|
34
|
+
chmodSync(dest, parseInt(mode, 8));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export function readText(path) {
|
|
38
|
+
return existsSync(path) ? readFileSync(path, "utf8") : null;
|
|
39
|
+
}
|
|
40
|
+
/** Replace `{{KEY}}` placeholders. Unknown placeholders are left untouched for the agent to fill. */
|
|
41
|
+
export function substitute(text, vars) {
|
|
42
|
+
return text.replace(/\{\{([A-Z0-9_]+)\}\}/g, (whole, key) => Object.prototype.hasOwnProperty.call(vars, key) ? vars[key] : whole);
|
|
43
|
+
}
|
|
44
|
+
export { resolve, join };
|
|
45
|
+
//# sourceMappingURL=fsutil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fsutil.js","sourceRoot":"","sources":["../../src/core/fsutil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC9G,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,WAAW,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;;YAC1D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,IAAY,EAAE,IAAa;IAC/D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;IAC5E,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAChC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC9D,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACzB,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACxB,IAAI,IAAI;YAAE,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,IAA4B;IACnE,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE,CAClE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,KAAK,CACrE,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { writeFileSync, existsSync, statSync, readdirSync, readFileSync, chmodSync, copyFileSync } from "node:fs";
|
|
2
|
+
import { basename, dirname, relative } from "node:path";
|
|
3
|
+
import { copyPath, ensureDir, readText, substitute, join } from "./fsutil.js";
|
|
4
|
+
import { resolveSrc } from "./knowledge.js";
|
|
5
|
+
/**
|
|
6
|
+
* Add-only refresh: copy any canonical file that does not exist in the destination, and report
|
|
7
|
+
* (without overwriting) existing files whose content drifted from canonical. Works for a single
|
|
8
|
+
* file or a directory tree. Used by `update` so tailored content is never clobbered.
|
|
9
|
+
*/
|
|
10
|
+
export function addOnlyCopy(repoRoot, src, dest, mode, apply = true) {
|
|
11
|
+
const result = { added: [], drifted: [] };
|
|
12
|
+
const rel = (p) => relative(repoRoot, p) || p;
|
|
13
|
+
const walk = (s, d) => {
|
|
14
|
+
if (statSync(s).isDirectory()) {
|
|
15
|
+
for (const entry of readdirSync(s))
|
|
16
|
+
walk(join(s, entry), join(d, entry));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (!existsSync(d)) {
|
|
20
|
+
if (apply) {
|
|
21
|
+
ensureDir(dirname(d));
|
|
22
|
+
copyFileSync(s, d);
|
|
23
|
+
if (mode)
|
|
24
|
+
chmodSync(d, parseInt(mode, 8));
|
|
25
|
+
}
|
|
26
|
+
result.added.push(rel(d));
|
|
27
|
+
}
|
|
28
|
+
else if (!readFileSync(s).equals(readFileSync(d))) {
|
|
29
|
+
result.drifted.push(rel(d));
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
if (existsSync(src))
|
|
33
|
+
walk(src, dest);
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
/** Default template variables derived without an agent. The agent fills the rest later. */
|
|
37
|
+
export function baseVars(repoRoot) {
|
|
38
|
+
return {
|
|
39
|
+
REPO_NAME: basename(repoRoot),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** Build the skills-inventory markdown block from the manifest (deterministic, no agent). */
|
|
43
|
+
export function skillsInventory(manifest) {
|
|
44
|
+
const lines = [];
|
|
45
|
+
for (const artifact of manifest.artifacts) {
|
|
46
|
+
const m = /^\.agents\/skills\/([^/]+)$/.exec(artifact.dest);
|
|
47
|
+
if (!m)
|
|
48
|
+
continue;
|
|
49
|
+
const skillMd = readText(join(resolveSrc(artifact.src), "SKILL.md"));
|
|
50
|
+
const desc = skillMd ? extractFrontmatterValue(skillMd, "description") : null;
|
|
51
|
+
lines.push(`- \`${m[1]}\`${desc ? ` — ${desc}` : ""}`);
|
|
52
|
+
}
|
|
53
|
+
return lines.length ? lines.join("\n") : "_(no skills installed)_";
|
|
54
|
+
}
|
|
55
|
+
function extractFrontmatterValue(text, key) {
|
|
56
|
+
if (!text.startsWith("---"))
|
|
57
|
+
return null;
|
|
58
|
+
const end = text.indexOf("\n---", 3);
|
|
59
|
+
const fm = end < 0 ? text : text.slice(0, end);
|
|
60
|
+
const match = fm.match(new RegExp("^\\s*" + key + "\\s*:\\s*(.+)\\s*$", "m"));
|
|
61
|
+
return match ? match[1].trim() : null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Deterministically lay down the canonical harness artifacts. This guarantees a baseline harness
|
|
65
|
+
* (and a passing audit) regardless of the agent; the agent then tailors content afterwards.
|
|
66
|
+
*/
|
|
67
|
+
export function install(repoRoot, manifest, options = {}) {
|
|
68
|
+
const vars = { SKILLS_INVENTORY: skillsInventory(manifest), ...(options.vars ?? baseVars(repoRoot)) };
|
|
69
|
+
const installed = [];
|
|
70
|
+
const plan = [];
|
|
71
|
+
const now = new Date().toISOString();
|
|
72
|
+
for (const artifact of manifest.artifacts) {
|
|
73
|
+
plan.push({ id: artifact.id, principle: artifact.principle, dest: artifact.dest, kind: artifact.kind });
|
|
74
|
+
if (options.dryRun)
|
|
75
|
+
continue;
|
|
76
|
+
const src = resolveSrc(artifact.src);
|
|
77
|
+
const dest = join(repoRoot, artifact.dest);
|
|
78
|
+
if (artifact.kind === "template") {
|
|
79
|
+
const text = readText(src);
|
|
80
|
+
if (text == null)
|
|
81
|
+
throw new Error(`template source missing: ${artifact.src}`);
|
|
82
|
+
ensureDir(join(dest, ".."));
|
|
83
|
+
writeFileSync(dest, substitute(text, vars));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
copyPath(src, dest, artifact.mode);
|
|
87
|
+
}
|
|
88
|
+
installed.push({
|
|
89
|
+
id: artifact.id,
|
|
90
|
+
dest: artifact.dest,
|
|
91
|
+
knowledgeVersion: manifest.knowledgeVersion,
|
|
92
|
+
installedAt: now,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return { installed, plan };
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/core/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { readText } from "./fsutil.js";
|
|
3
|
+
import { knowledgeRoot } from "./paths.js";
|
|
4
|
+
/** Effective refresh policy for an artifact (applies the kind-based default). */
|
|
5
|
+
export function refreshPolicy(a) {
|
|
6
|
+
return a.refresh ?? (a.kind === "dir" ? "preserve" : "overwrite");
|
|
7
|
+
}
|
|
8
|
+
export function loadManifest() {
|
|
9
|
+
const root = knowledgeRoot();
|
|
10
|
+
const text = readText(join(root, "manifest.json"));
|
|
11
|
+
if (!text)
|
|
12
|
+
throw new Error("knowledge/manifest.json not found");
|
|
13
|
+
return JSON.parse(text);
|
|
14
|
+
}
|
|
15
|
+
export function loadPrinciples() {
|
|
16
|
+
const root = knowledgeRoot();
|
|
17
|
+
return readText(join(root, "PRINCIPLES.md")) ?? "";
|
|
18
|
+
}
|
|
19
|
+
/** Resolve a manifest `src` (relative to knowledge/ root) to an absolute path. */
|
|
20
|
+
export function resolveSrc(src) {
|
|
21
|
+
return join(knowledgeRoot(), src);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Load the canonical checks shipped with AgentRig. Used by the deterministic audit when the target
|
|
25
|
+
* repo has no installed `.agentrig/eval/checks.json` of its own.
|
|
26
|
+
*/
|
|
27
|
+
export function loadCanonicalChecks() {
|
|
28
|
+
const root = knowledgeRoot();
|
|
29
|
+
const text = readText(join(root, "templates", "eval", "checks.json"));
|
|
30
|
+
if (!text)
|
|
31
|
+
return [];
|
|
32
|
+
return (JSON.parse(text).checks ?? []);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=knowledge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/core/knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAuB3C,iFAAiF;AACjF,MAAM,UAAU,aAAa,CAAC,CAAW;IACvC,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AACpE,CAAC;AAiBD,MAAM,UAAU,YAAY;IAC1B,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,CAAe,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const useColor = process.stdout.isTTY && !process.env.NO_COLOR;
|
|
2
|
+
const c = (code, s) => (useColor ? `\x1b[${code}m${s}\x1b[0m` : s);
|
|
3
|
+
export const color = {
|
|
4
|
+
bold: (s) => c("1", s),
|
|
5
|
+
dim: (s) => c("2", s),
|
|
6
|
+
red: (s) => c("31", s),
|
|
7
|
+
green: (s) => c("32", s),
|
|
8
|
+
yellow: (s) => c("33", s),
|
|
9
|
+
cyan: (s) => c("36", s),
|
|
10
|
+
};
|
|
11
|
+
let verbose = false;
|
|
12
|
+
export function setVerbose(v) {
|
|
13
|
+
verbose = v;
|
|
14
|
+
}
|
|
15
|
+
export function isVerbose() {
|
|
16
|
+
return verbose;
|
|
17
|
+
}
|
|
18
|
+
export const log = {
|
|
19
|
+
info: (msg) => console.log(msg),
|
|
20
|
+
step: (msg) => console.log(`${color.cyan("›")} ${msg}`),
|
|
21
|
+
ok: (msg) => console.log(`${color.green("✔")} ${msg}`),
|
|
22
|
+
warn: (msg) => console.warn(`${color.yellow("!")} ${msg}`),
|
|
23
|
+
error: (msg) => console.error(`${color.red("✗")} ${msg}`),
|
|
24
|
+
debug: (msg) => {
|
|
25
|
+
if (verbose)
|
|
26
|
+
console.error(color.dim(` ${msg}`));
|
|
27
|
+
},
|
|
28
|
+
/** A dim, indented activity line (written to stderr so it doesn't pollute --json stdout). */
|
|
29
|
+
activity: (msg) => console.error(color.dim(` ${msg}`)),
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/D,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnF,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9B,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;CAChC,CAAC;AAEF,IAAI,OAAO,GAAG,KAAK,CAAC;AACpB,MAAM,UAAU,UAAU,CAAC,CAAU;IACnC,OAAO,GAAG,CAAC,CAAC;AACd,CAAC;AACD,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IACvC,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IAC/D,EAAE,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IAC9D,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IAClE,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACjE,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE;QACrB,IAAI,OAAO;YAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,6FAA6F;IAC7F,QAAQ,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;CAChE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { dirname, resolve } from "node:path";
|
|
4
|
+
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
/**
|
|
6
|
+
* Locate the packaged `knowledge/` directory. Works both from the compiled output
|
|
7
|
+
* (`dist/core/paths.js`) and from a few fallback layouts so the CLI keeps working if the build
|
|
8
|
+
* structure changes.
|
|
9
|
+
*/
|
|
10
|
+
export function knowledgeRoot() {
|
|
11
|
+
const candidates = [
|
|
12
|
+
resolve(moduleDir, "..", "..", "knowledge"), // dist/core/paths.js -> packageRoot/knowledge
|
|
13
|
+
resolve(moduleDir, "..", "..", "..", "knowledge"),
|
|
14
|
+
resolve(process.cwd(), "knowledge"),
|
|
15
|
+
];
|
|
16
|
+
for (const candidate of candidates) {
|
|
17
|
+
if (existsSync(resolve(candidate, "manifest.json")))
|
|
18
|
+
return candidate;
|
|
19
|
+
}
|
|
20
|
+
throw new Error("Could not locate AgentRig's knowledge/ directory. Is the package installed correctly?");
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,UAAU,GAAG;QACjB,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,8CAA8C;QAC3F,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC;QACjD,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC;KACpC,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;IACxE,CAAC;IACD,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { spawnSync } from "node:child_process";
|
|
4
|
+
const SETUP_REL = ".github/workflows/copilot-setup-steps.yml";
|
|
5
|
+
// Job-level keys Copilot honors; anything else under the job is silently ignored.
|
|
6
|
+
const ALLOWED_JOB_KEYS = new Set(["runs-on", "permissions", "services", "snapshot", "timeout-minutes", "steps"]);
|
|
7
|
+
/**
|
|
8
|
+
* Validate `.github/workflows/copilot-setup-steps.yml` so a generated/authored file isn't broken.
|
|
9
|
+
* Structural checks always run (no deps); a real YAML parse and `actionlint` are used when available.
|
|
10
|
+
*/
|
|
11
|
+
export function validateSetupSteps(repoRoot) {
|
|
12
|
+
const abs = join(repoRoot, SETUP_REL);
|
|
13
|
+
const res = { present: false, ok: true, errors: [], warnings: [], checkedWith: ["structure"] };
|
|
14
|
+
if (!existsSync(abs))
|
|
15
|
+
return res;
|
|
16
|
+
res.present = true;
|
|
17
|
+
const text = readFileSync(abs, "utf8");
|
|
18
|
+
const lines = text.split("\n");
|
|
19
|
+
if (text.includes("\t"))
|
|
20
|
+
res.errors.push("contains a tab character (YAML forbids tabs for indentation)");
|
|
21
|
+
if (!/^\s*jobs\s*:/m.test(text))
|
|
22
|
+
res.errors.push("missing a `jobs:` block");
|
|
23
|
+
if (!/^\s*copilot-setup-steps\s*:/m.test(text)) {
|
|
24
|
+
res.errors.push("the job MUST be named exactly `copilot-setup-steps` or Copilot ignores it");
|
|
25
|
+
}
|
|
26
|
+
if (!/^\s*runs-on\s*:/m.test(text))
|
|
27
|
+
res.errors.push("the job needs a `runs-on:`");
|
|
28
|
+
if (!/^\s*steps\s*:/m.test(text))
|
|
29
|
+
res.warnings.push("no `steps:` — Copilot will only checkout; nothing gets preinstalled");
|
|
30
|
+
const timeout = text.match(/^\s*timeout-minutes\s*:\s*(\d+)/m);
|
|
31
|
+
if (timeout && Number(timeout[1]) > 59)
|
|
32
|
+
res.errors.push(`timeout-minutes is ${timeout[1]}; the max is 59`);
|
|
33
|
+
// Detect job-level keys that Copilot ignores (best-effort: keys at the job's child indent).
|
|
34
|
+
const jobLine = lines.findIndex((l) => /^\s*copilot-setup-steps\s*:/.test(l));
|
|
35
|
+
if (jobLine >= 0) {
|
|
36
|
+
const jobIndent = lines[jobLine].search(/\S/);
|
|
37
|
+
for (let i = jobLine + 1; i < lines.length; i++) {
|
|
38
|
+
const l = lines[i];
|
|
39
|
+
if (l.trim() === "" || l.trim().startsWith("#"))
|
|
40
|
+
continue;
|
|
41
|
+
const indent = l.search(/\S/);
|
|
42
|
+
if (indent <= jobIndent)
|
|
43
|
+
break; // left the job block
|
|
44
|
+
const m = l.match(/^\s*([a-zA-Z0-9_-]+)\s*:/);
|
|
45
|
+
if (m && indent === jobIndent + 2 && !ALLOWED_JOB_KEYS.has(m[1])) {
|
|
46
|
+
res.warnings.push(`job key \`${m[1]}\` is ignored by Copilot (only ${[...ALLOWED_JOB_KEYS].join(", ")} are honored)`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Real YAML parse if python3 + pyyaml are available.
|
|
51
|
+
const py = spawnSync("python3", ["-c", "import yaml,sys; yaml.safe_load(open(sys.argv[1]))", abs], { encoding: "utf8" });
|
|
52
|
+
if (py.status === 0)
|
|
53
|
+
res.checkedWith.push("yaml");
|
|
54
|
+
else if (py.status != null && /yaml\.|YAMLError|ScannerError|ParserError/.test(py.stderr || "")) {
|
|
55
|
+
res.errors.push(`invalid YAML: ${(py.stderr || "").trim().split("\n").pop()}`);
|
|
56
|
+
res.checkedWith.push("yaml");
|
|
57
|
+
}
|
|
58
|
+
// actionlint if installed.
|
|
59
|
+
const al = spawnSync("actionlint", ["-no-color", abs], { encoding: "utf8" });
|
|
60
|
+
if (al.status === 0)
|
|
61
|
+
res.checkedWith.push("actionlint");
|
|
62
|
+
else if (al.status != null && al.status !== 127 && (al.stdout || al.stderr)) {
|
|
63
|
+
for (const line of (al.stdout || al.stderr).trim().split("\n").slice(0, 8)) {
|
|
64
|
+
if (line.trim())
|
|
65
|
+
res.warnings.push(`actionlint: ${line.trim()}`);
|
|
66
|
+
}
|
|
67
|
+
res.checkedWith.push("actionlint");
|
|
68
|
+
}
|
|
69
|
+
res.ok = res.errors.length === 0;
|
|
70
|
+
return res;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=setupsteps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupsteps.js","sourceRoot":"","sources":["../../src/core/setupsteps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { readText, ensureDir } from "./fsutil.js";
|
|
3
|
+
import { writeFileSync, existsSync } from "node:fs";
|
|
4
|
+
const STATE_REL = join(".agentrig", "state.json");
|
|
5
|
+
export function statePath(repoRoot) {
|
|
6
|
+
return join(repoRoot, STATE_REL);
|
|
7
|
+
}
|
|
8
|
+
export function readState(repoRoot) {
|
|
9
|
+
const text = readText(statePath(repoRoot));
|
|
10
|
+
return text ? JSON.parse(text) : null;
|
|
11
|
+
}
|
|
12
|
+
export function writeState(repoRoot, state) {
|
|
13
|
+
ensureDir(join(repoRoot, ".agentrig"));
|
|
14
|
+
writeFileSync(statePath(repoRoot), JSON.stringify(state, null, 2) + "\n");
|
|
15
|
+
}
|
|
16
|
+
export function isInstalled(repoRoot) {
|
|
17
|
+
return existsSync(statePath(repoRoot));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAmBpD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAElD,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,OAAO,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,KAAoB;IAC/D,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IACvC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { existsSync, lstatSync, readlinkSync, symlinkSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
/** Vendor surface dirs that should all point at the one canonical source (`.agents`). */
|
|
4
|
+
export const SURFACE_DIRS = [".claude", ".copilot", ".opencode", ".codex"];
|
|
5
|
+
export const CANONICAL_SURFACE = ".agents";
|
|
6
|
+
/**
|
|
7
|
+
* Mirror the canonical agent source (`.agents/`) to every vendor surface via symlinks, so an
|
|
8
|
+
* agent's skills/rules/wiki work regardless of which CLI (`.claude`, `.copilot`, `.opencode`,
|
|
9
|
+
* `.codex`) loads them (principle 11). Idempotent and safe: never clobbers a real directory; tolerates
|
|
10
|
+
* platforms that disallow symlinks.
|
|
11
|
+
*/
|
|
12
|
+
export function linkSurfaces(repoRoot) {
|
|
13
|
+
const created = [];
|
|
14
|
+
const skipped = [];
|
|
15
|
+
if (!existsSync(join(repoRoot, CANONICAL_SURFACE))) {
|
|
16
|
+
return { created, skipped: SURFACE_DIRS.map((dir) => ({ dir, reason: "no .agents source" })) };
|
|
17
|
+
}
|
|
18
|
+
for (const dir of SURFACE_DIRS) {
|
|
19
|
+
const target = join(repoRoot, dir);
|
|
20
|
+
if (existsSync(target) || isSymlink(target)) {
|
|
21
|
+
if (isSymlink(target) && safeReadlink(target) === CANONICAL_SURFACE) {
|
|
22
|
+
skipped.push({ dir, reason: "already linked" });
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
skipped.push({ dir, reason: "exists (left untouched)" });
|
|
26
|
+
}
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
// Junctions work for directories on Windows without elevation (and need an absolute target);
|
|
31
|
+
// relative symlinks are portable elsewhere.
|
|
32
|
+
if (process.platform === "win32") {
|
|
33
|
+
symlinkSync(join(repoRoot, CANONICAL_SURFACE), target, "junction");
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
symlinkSync(CANONICAL_SURFACE, target, "dir");
|
|
37
|
+
}
|
|
38
|
+
created.push(dir);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
skipped.push({ dir, reason: `symlink failed: ${err.message}` });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return { created, skipped };
|
|
45
|
+
}
|
|
46
|
+
function isSymlink(p) {
|
|
47
|
+
try {
|
|
48
|
+
return lstatSync(p).isSymbolicLink();
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function safeReadlink(p) {
|
|
55
|
+
try {
|
|
56
|
+
return readlinkSync(p);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=surfaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surfaces.js","sourceRoot":"","sources":["../../src/core/surfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,yFAAyF;AACzF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AAC3E,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAO3C;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAsC,EAAE,CAAC;IAEtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC;QACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC;IACjG,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACnC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,iBAAiB,EAAE,CAAC;gBACpE,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,6FAA6F;YAC7F,4CAA4C;YAC5C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACjC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YACrE,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,mBAAoB,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
export const SYSTEM_MESSAGE = `You are AgentRig's installer agent. You are setting up and tailoring an autonomous-coding-agent
|
|
2
|
+
"harness" inside a real repository. Be precise and surgical. Prefer reading many files to understand
|
|
3
|
+
the repo before writing. Only edit the files you are explicitly asked to. Never invent build/test
|
|
4
|
+
commands — verify them against package manifests, lockfiles, CI config, and scripts you actually
|
|
5
|
+
find. Keep edits idempotent.`;
|
|
6
|
+
export function buildInvestigatePrompt() {
|
|
7
|
+
return `# Task 1 of 2 — Investigate this repository
|
|
8
|
+
|
|
9
|
+
Investigate the repository in your current working directory and write your findings to
|
|
10
|
+
\`.agentrig/context.md\` (create the file; create the .agentrig directory if needed).
|
|
11
|
+
|
|
12
|
+
Cover, with evidence from actual files:
|
|
13
|
+
1. **Purpose** — what this project is and who uses it (2-4 sentences).
|
|
14
|
+
2. **Stack** — languages, frameworks, runtimes, package manager(s).
|
|
15
|
+
3. **Commands** — the real install / build / test / lint commands (cite where you found them:
|
|
16
|
+
package.json scripts, Makefile, CI workflow, pyproject, go.mod, etc.). If a command does not
|
|
17
|
+
exist, say so explicitly rather than guessing.
|
|
18
|
+
4. **Layout** — a concise directory map of the most important folders and what they contain.
|
|
19
|
+
5. **Conventions** — notable coding conventions, testing patterns, and any "instructions are the
|
|
20
|
+
source of truth" docs (AGENTS.md, CONTRIBUTING, etc.).
|
|
21
|
+
6. **Risks for an autonomous agent** — protected areas, generated code, flaky tests, anything an
|
|
22
|
+
agent should be careful about.
|
|
23
|
+
|
|
24
|
+
Be thorough but factual. Do not modify any other files in this step. When done, reply with a short
|
|
25
|
+
confirmation and the exact install/build/test/lint commands you found.`;
|
|
26
|
+
}
|
|
27
|
+
export function buildTailorPrompt(manifest) {
|
|
28
|
+
const artifactList = manifest.artifacts.map((a) => `- \`${a.dest}\` (principle ${a.principle})`).join("\n");
|
|
29
|
+
return `# Task 2 of 2 — Tailor the installed harness to this repository
|
|
30
|
+
|
|
31
|
+
AgentRig has just installed a canonical best-practice harness into this repo:
|
|
32
|
+
|
|
33
|
+
${artifactList}
|
|
34
|
+
|
|
35
|
+
Using everything you learned in Task 1 (and \`.agentrig/context.md\`), make the harness
|
|
36
|
+
repo-specific. Edit **only** the files listed below.
|
|
37
|
+
|
|
38
|
+
1. **\`AGENTS.md\`** — replace every \`{{PLACEHOLDER}}\` and fill the content between the
|
|
39
|
+
\`<!-- AGENTRIG:...:start -->\` / \`:end\` markers:
|
|
40
|
+
- \`{{REPO_NAME}}\`, \`{{REPO_SUMMARY}}\` — name and a 2-3 sentence description.
|
|
41
|
+
- The \`commands\` block — the REAL install/build/test/lint commands you verified. If one
|
|
42
|
+
genuinely does not exist, write \`(none)\`.
|
|
43
|
+
- The \`dirmap\` block — a concise directory map.
|
|
44
|
+
Do NOT change anything between the \`critical-rules\` markers.
|
|
45
|
+
2. **\`.agents/rules/coding-standards.md\`** — replace the generic baseline with standards that
|
|
46
|
+
actually match this repo's language and conventions. Keep it to a short list of imperative
|
|
47
|
+
reflexes and keep the frontmatter \`globs\`/\`description\`.
|
|
48
|
+
3. **\`.agentrig/eval/scenarios/\`** — adjust the existing scenario files so the setup/success
|
|
49
|
+
criteria reference this repo's real test/build commands and structure. Do not remove the axis
|
|
50
|
+
lists.
|
|
51
|
+
4. **\`.github/workflows/copilot-setup-steps.yml\`** — author a REAL, repo-specific setup workflow so
|
|
52
|
+
the GitHub Copilot **cloud/coding agent** has a ready environment (don't leave a generic stub).
|
|
53
|
+
Base it on your investigation:
|
|
54
|
+
- A single job named EXACTLY \`copilot-setup-steps\` on \`runs-on: ubuntu-latest\`, with
|
|
55
|
+
\`permissions: contents: read\`, triggered by \`workflow_dispatch\` + \`push\`/\`pull_request\`
|
|
56
|
+
filtered to this file.
|
|
57
|
+
- Steps that install the ACTUAL toolchain + dependencies you found: correct language runtime(s)
|
|
58
|
+
and version(s) (from \`.nvmrc\`/\`.tool-versions\`/\`engines\`/\`go.mod\`/\`pyproject.toml\`), the
|
|
59
|
+
correct package manager and install command (e.g. \`npm ci\`/\`pnpm i --frozen-lockfile\`/
|
|
60
|
+
\`pip install -e .\`/\`go mod download\`), dependency caching, and any system packages or
|
|
61
|
+
\`services\` (databases, etc.) the build/tests need. Keep it to env setup — not the task itself.
|
|
62
|
+
If you cannot determine the stack confidently, leave the generated scaffold and note what's
|
|
63
|
+
missing.
|
|
64
|
+
|
|
65
|
+
Keep all YAML frontmatter and the AgentRig markers intact. Do not touch the state machine, role
|
|
66
|
+
files, MCP config, or the eval scripts. When finished, summarize exactly which files you changed.`;
|
|
67
|
+
}
|
|
68
|
+
export function buildUpdatePrompt(changed) {
|
|
69
|
+
return `# Task — Re-apply the latest AgentRig best practices
|
|
70
|
+
|
|
71
|
+
AgentRig refreshed these canonical artifacts to their latest version:
|
|
72
|
+
${changed.map((c) => `- \`${c}\``).join("\n")}
|
|
73
|
+
|
|
74
|
+
For each refreshed file, reconcile it with this repo:
|
|
75
|
+
- Preserve repo-specific content the team added (especially inside AgentRig markers in AGENTS.md and
|
|
76
|
+
in \`coding-standards.md\` and the scenarios).
|
|
77
|
+
- Adopt new structure, new sections, and new defaults from the canonical version.
|
|
78
|
+
- If there is a genuine conflict, prefer the new canonical structure but keep repo-specific facts
|
|
79
|
+
(commands, directory map, summary).
|
|
80
|
+
|
|
81
|
+
Re-read \`.agentrig/context.md\` first for repo context. Summarize what you merged and any conflicts
|
|
82
|
+
you resolved.`;
|
|
83
|
+
}
|
|
84
|
+
export function buildDynamicEvalPrompt(scenarioId, run) {
|
|
85
|
+
const scope = scenarioId
|
|
86
|
+
? `the single scenario \`.agentrig/eval/scenarios/${scenarioId}.md\``
|
|
87
|
+
: "each scenario in \`.agentrig/eval/scenarios/*.md\`";
|
|
88
|
+
const variantFlag = run?.variant ? ` --variant ${run.variant}` : "";
|
|
89
|
+
const baselineNote = run?.variant === "baseline"
|
|
90
|
+
? `\n**This is a BASELINE trial (harness OFF).** Perform each task as a bare agent: do NOT read or
|
|
91
|
+
follow \`AGENTS.md\`, \`.agents/rules/\`, \`.agents/skills/\`, or the compiled instruction surfaces.
|
|
92
|
+
Then score the result with the SAME rubric so it can be compared against the harness-on run.\n`
|
|
93
|
+
: "";
|
|
94
|
+
const runLine = run
|
|
95
|
+
? `\nTag every score with \`--run ${run.runId}${variantFlag}\`. For each scenario, also save artifacts into
|
|
96
|
+
\`${run.artifactsDir}\`: \`diff.patch\` (the produced change, e.g. \`git -C <worktree> diff > ${run.artifactsDir}/<scenario>.diff.patch\`)
|
|
97
|
+
and \`<scenario>.output.md\` (a short transcript/summary). These make regressions inspectable.\n`
|
|
98
|
+
: "";
|
|
99
|
+
return `# Task — Run the harness dynamic evaluation
|
|
100
|
+
|
|
101
|
+
Run the behavioral evaluation described in \`.agents/skills/harness-eval/SKILL.md\` (Layer B) for
|
|
102
|
+
${scope}.
|
|
103
|
+
${baselineNote}${runLine}
|
|
104
|
+
For each scenario, in order:
|
|
105
|
+
1. Execute the scenario task through this repo's harness.
|
|
106
|
+
2. Score the result against \`.agentrig/eval/RUBRIC.md\` as an independent judge. For any axis below
|
|
107
|
+
1.0, record an issue code and one line of evidence.
|
|
108
|
+
3. **Immediately** persist that scenario's score with \`node .agentrig/eval/score.mjs save ...\`${run ? ` --run ${run.runId}${variantFlag}` : ""}
|
|
109
|
+
(never hand-edit the JSON) BEFORE starting the next scenario, so progress is never lost if the
|
|
110
|
+
run is interrupted.
|
|
111
|
+
4. Keep each scenario focused and time-boxed. If a scenario is taking too long, save your
|
|
112
|
+
best-evidence score for it and move on rather than looping indefinitely.
|
|
113
|
+
|
|
114
|
+
When every scenario in scope is scored, run \`node .agentrig/eval/score.mjs report\` and summarize
|
|
115
|
+
the aggregate, calling out the weakest axes.`;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG;;;;6BAID,CAAC;AAE9B,MAAM,UAAU,sBAAsB;IACpC,OAAO;;;;;;;;;;;;;;;;;;uEAkB8D,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5G,OAAO;;;;EAIP,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kGAiCoF,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAiB;IACjD,OAAO;;;EAGP,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;cAU/B,CAAC;AACf,CAAC;AAQD,MAAM,UAAU,sBAAsB,CAAC,UAAmB,EAAE,GAAuB;IACjF,MAAM,KAAK,GAAG,UAAU;QACtB,CAAC,CAAC,kDAAkD,UAAU,OAAO;QACrE,CAAC,CAAC,oDAAoD,CAAC;IACzD,MAAM,WAAW,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,MAAM,YAAY,GAChB,GAAG,EAAE,OAAO,KAAK,UAAU;QACzB,CAAC,CAAC;;+FAEuF;QACzF,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,OAAO,GAAG,GAAG;QACjB,CAAC,CAAC,kCAAkC,GAAG,CAAC,KAAK,GAAG,WAAW;IAC3D,GAAG,CAAC,YAAY,4EAA4E,GAAG,CAAC,YAAY;iGACf;QAC7F,CAAC,CAAC,EAAE,CAAC;IACP,OAAO;;;EAGP,KAAK;EACL,YAAY,GAAG,OAAO;;;;;kGAK0E,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;6CAOnG,CAAC;AAC9C,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { readText } from "./core/fsutil.js";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { dirname, resolve } from "node:path";
|
|
4
|
+
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
function loadVersion() {
|
|
6
|
+
for (const candidate of [
|
|
7
|
+
resolve(moduleDir, "..", "package.json"),
|
|
8
|
+
resolve(moduleDir, "..", "..", "package.json"),
|
|
9
|
+
]) {
|
|
10
|
+
const text = readText(candidate);
|
|
11
|
+
if (text) {
|
|
12
|
+
try {
|
|
13
|
+
const json = JSON.parse(text);
|
|
14
|
+
if (json.version && (json.name === "@doidor/agentrig" || json.name === "agentrig")) {
|
|
15
|
+
return json.version;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
/* ignore */
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return "0.0.0";
|
|
24
|
+
}
|
|
25
|
+
export default { version: loadVersion() };
|
|
26
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,SAAS,WAAW;IAClB,KAAK,MAAM,SAAS,IAAI;QACtB,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC;QACxC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC;KAC/C,EAAE,CAAC;QACF,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAwC,CAAC;gBACrE,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;oBACnF,OAAO,IAAI,CAAC,OAAO,CAAC;gBACtB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC"}
|