@humanbased/crosscheck 1.2.0-beta.68 → 1.2.0-beta.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/__tests__/codex.test.js +1 -28
- package/dist/__tests__/codex.test.js.map +1 -1
- package/dist/__tests__/repo-picker.test.js +7 -1
- package/dist/__tests__/repo-picker.test.js.map +1 -1
- package/dist/__tests__/repository-guidance.test.js +28 -9
- package/dist/__tests__/repository-guidance.test.js.map +1 -1
- package/dist/__tests__/skill-broker.test.js +25 -1
- package/dist/__tests__/skill-broker.test.js.map +1 -1
- package/dist/__tests__/skill-catalog.test.js +9 -4
- package/dist/__tests__/skill-catalog.test.js.map +1 -1
- package/dist/commands/onboard.d.ts.map +1 -1
- package/dist/commands/onboard.js +12 -1
- package/dist/commands/onboard.js.map +1 -1
- package/dist/lib/repo-picker.d.ts +3 -0
- package/dist/lib/repo-picker.d.ts.map +1 -1
- package/dist/lib/repo-picker.js +45 -9
- package/dist/lib/repo-picker.js.map +1 -1
- package/dist/lib/repository-guidance.js +1 -1
- package/dist/lib/repository-guidance.js.map +1 -1
- package/dist/reviewers/codex.d.ts.map +1 -1
- package/dist/reviewers/codex.js +51 -70
- package/dist/reviewers/codex.js.map +1 -1
- package/dist/skills/broker.d.ts +1 -1
- package/dist/skills/broker.d.ts.map +1 -1
- package/dist/skills/broker.js +15 -0
- package/dist/skills/broker.js.map +1 -1
- package/dist/skills/catalog.d.ts +3 -1
- package/dist/skills/catalog.d.ts.map +1 -1
- package/dist/skills/catalog.js +14 -1
- package/dist/skills/catalog.js.map +1 -1
- package/get-started.md +12 -7
- package/package.json +1 -1
package/dist/reviewers/codex.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { mkdirSync, realpathSync, rmSync, writeFileSync } from 'fs';
|
|
3
|
+
import { randomUUID } from 'crypto';
|
|
4
|
+
import { homedir } from 'os';
|
|
4
5
|
import { join } from 'path';
|
|
5
6
|
import { DEFAULT_REVIEW_INSTRUCTIONS } from '../lib/workflow.js';
|
|
6
7
|
import { resolveCodexModel } from '../lib/review-models.js';
|
|
@@ -82,12 +83,11 @@ onRetry,
|
|
|
82
83
|
// the review to the stated goal. Omitted when enrichment is off / unresolved.
|
|
83
84
|
issueContext, skillSession) {
|
|
84
85
|
const model = resolveCodexModel(quality, vendor);
|
|
85
|
-
const tmpFile = join(mkdtempSync(join(tmpdir(), 'crosscheck-')), 'review.md');
|
|
86
86
|
const tierTimeout = tierTimeoutMs(quality.tier);
|
|
87
87
|
// timeoutMs: 0 → no cap (crazy/halfcrazy); undefined → tier-based default; positive → user-specified
|
|
88
88
|
const resolvedTimeout = timeoutMs === undefined ? tierTimeout : timeoutMs === 0 ? undefined : timeoutMs;
|
|
89
|
-
// --base and [PROMPT] are mutually exclusive in codex review
|
|
90
|
-
//
|
|
89
|
+
// --base and [PROMPT] are mutually exclusive in codex review, so deliver
|
|
90
|
+
// Crosscheck's trusted guidance through a temporary Codex profile.
|
|
91
91
|
const focusNote = quality.focus.length > 0
|
|
92
92
|
? `Focus areas: ${quality.focus.join(', ')}. `
|
|
93
93
|
: '';
|
|
@@ -95,27 +95,22 @@ issueContext, skillSession) {
|
|
|
95
95
|
const behaviorInstructions = stepInstructions ?? DEFAULT_REVIEW_INSTRUCTIONS;
|
|
96
96
|
const repositoryGuidance = loadRepositoryReviewGuidance(repoDir, baseBranch);
|
|
97
97
|
const instructionsNote = [issueContext ?? '', focusNote, customNote, behaviorInstructions, repositoryGuidance, skillSession ? renderSkillBrokerInstructions(skillSession) : ''].filter(Boolean).join('\n\n');
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
98
|
+
const codexHome = process.env.CODEX_HOME ?? join(homedir(), '.codex');
|
|
99
|
+
const profileName = `crosscheck-${randomUUID()}`;
|
|
100
|
+
const profilePath = join(codexHome, `${profileName}.config.toml`);
|
|
101
|
+
mkdirSync(codexHome, { recursive: true });
|
|
102
|
+
// Retry loop for transient Codex API errors (socket disconnects, rate limits)
|
|
103
|
+
let lastErr = undefined;
|
|
104
|
+
for (let attempt = 1; attempt <= MAX_CODEX_RETRIES; attempt++) {
|
|
105
|
+
try {
|
|
106
|
+
const modelArgs = model !== 'default' ? ['-c', `model="${model}"`] : [];
|
|
107
|
+
const skillArgs = codexSkillBrokerArgs(skillSession);
|
|
108
|
+
const reasoningEffort = codexReasoningEffort(vendor.effort);
|
|
109
|
+
const effortArgs = ['-c', `model_reasoning_effort="${reasoningEffort}"`];
|
|
110
|
+
onLog?.(` running: codex review --base ${baseBranch}${model !== 'default' ? ` -c model="${model}"` : ''} -c model_reasoning_effort="${reasoningEffort}"`);
|
|
111
|
+
writeFileSync(profilePath, `developer_instructions = ${JSON.stringify(instructionsNote)}\n`, { mode: 0o600 });
|
|
112
112
|
try {
|
|
113
|
-
const
|
|
114
|
-
const skillArgs = codexSkillBrokerArgs(skillSession);
|
|
115
|
-
const reasoningEffort = codexReasoningEffort(vendor.effort);
|
|
116
|
-
const effortArgs = ['-c', `model_reasoning_effort="${reasoningEffort}"`];
|
|
117
|
-
onLog?.(` running: codex review --base ${baseBranch}${model !== 'default' ? ` -c model="${model}"` : ''} -c model_reasoning_effort="${reasoningEffort}"`);
|
|
118
|
-
const { result, retried } = await withTimeoutRetry(resolvedTimeout, (t) => execa('codex', ['review', '--base', baseBranch, '--title', prTitle, '-c', 'project_doc_max_bytes=0', ...modelArgs, ...effortArgs, ...skillArgs], {
|
|
113
|
+
const { result, retried } = await withTimeoutRetry(resolvedTimeout, (t) => execa('codex', ['-p', profileName, 'review', '--base', baseBranch, '--title', prTitle, '-c', 'project_doc_max_bytes=0', ...modelArgs, ...effortArgs, ...skillArgs], {
|
|
119
114
|
cwd: repoDir,
|
|
120
115
|
timeout: t,
|
|
121
116
|
env: {
|
|
@@ -136,56 +131,42 @@ issueContext, skillSession) {
|
|
|
136
131
|
: `${rawReview}\n\nVERDICT: ${inferVerdictFromCodexOutput(rawReview)}`;
|
|
137
132
|
return { review, tokensUsed, model, retried };
|
|
138
133
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const rawStderr = execa.stderr ?? '';
|
|
142
|
-
const fullMessage = rawStderr || execa.message || '';
|
|
143
|
-
// Check if this is a retryable error
|
|
144
|
-
if (isRetryableCodexError(fullMessage) && attempt < MAX_CODEX_RETRIES) {
|
|
145
|
-
const delay = CODEX_RETRY_DELAY_MS * attempt; // 5s, 10s
|
|
146
|
-
onLog?.(` codex: transient error (${fullMessage.slice(0, 80)}), retrying in ${delay / 1000}s (attempt ${attempt}/${MAX_CODEX_RETRIES})...`);
|
|
147
|
-
await new Promise(resolve => setTimeout(resolve, delay));
|
|
148
|
-
lastErr = err;
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
// Non-retryable error or final attempt — format and throw
|
|
152
|
-
const effectiveMs = execa.effectiveTimeoutMs ?? resolvedTimeout;
|
|
153
|
-
const retryNote = execa.retryDelayMs !== undefined ? ' (retried once)' : '';
|
|
154
|
-
const summary = execa.timedOut
|
|
155
|
-
? `timed out after ${effectiveMs !== undefined ? effectiveMs / 1000 : '?'}s${retryNote} — PR diff may be too large (tier: ${quality.tier})`
|
|
156
|
-
: (extractErrorSummary(rawStderr) ?? execa.message ?? 'unknown error');
|
|
157
|
-
const thrown = Object.assign(new Error(`codex: ${summary}`), {
|
|
158
|
-
exitCode: execa.exitCode,
|
|
159
|
-
timedOut: execa.timedOut,
|
|
160
|
-
stderr: rawStderr,
|
|
161
|
-
effectiveTimeoutMs: effectiveMs,
|
|
162
|
-
retryDelayMs: execa.retryDelayMs,
|
|
163
|
-
});
|
|
164
|
-
throw thrown;
|
|
134
|
+
finally {
|
|
135
|
+
rmSync(profilePath, { force: true });
|
|
165
136
|
}
|
|
166
137
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
rmSync(instructionsPath, { force: true });
|
|
138
|
+
catch (err) {
|
|
139
|
+
const execa = err;
|
|
140
|
+
const rawStderr = execa.stderr ?? '';
|
|
141
|
+
const fullMessage = rawStderr || execa.message || '';
|
|
142
|
+
// Check if this is a retryable error
|
|
143
|
+
if (isRetryableCodexError(fullMessage) && attempt < MAX_CODEX_RETRIES) {
|
|
144
|
+
const delay = CODEX_RETRY_DELAY_MS * attempt; // 5s, 10s
|
|
145
|
+
onLog?.(` codex: transient error (${fullMessage.slice(0, 80)}), retrying in ${delay / 1000}s (attempt ${attempt}/${MAX_CODEX_RETRIES})...`);
|
|
146
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
147
|
+
lastErr = err;
|
|
148
|
+
continue;
|
|
181
149
|
}
|
|
150
|
+
// Non-retryable error or final attempt — format and throw
|
|
151
|
+
const effectiveMs = execa.effectiveTimeoutMs ?? resolvedTimeout;
|
|
152
|
+
const retryNote = execa.retryDelayMs !== undefined ? ' (retried once)' : '';
|
|
153
|
+
const summary = execa.timedOut
|
|
154
|
+
? `timed out after ${effectiveMs !== undefined ? effectiveMs / 1000 : '?'}s${retryNote} — PR diff may be too large (tier: ${quality.tier})`
|
|
155
|
+
: (extractErrorSummary(rawStderr) ?? execa.message ?? 'unknown error');
|
|
156
|
+
const thrown = Object.assign(new Error(`codex: ${summary}`), {
|
|
157
|
+
exitCode: execa.exitCode,
|
|
158
|
+
timedOut: execa.timedOut,
|
|
159
|
+
stderr: rawStderr,
|
|
160
|
+
effectiveTimeoutMs: effectiveMs,
|
|
161
|
+
retryDelayMs: execa.retryDelayMs,
|
|
162
|
+
});
|
|
163
|
+
throw thrown;
|
|
182
164
|
}
|
|
183
|
-
catch { /* ignore */ }
|
|
184
|
-
try {
|
|
185
|
-
rmSync(tmpFile, { force: true, recursive: true });
|
|
186
|
-
}
|
|
187
|
-
catch { /* ignore */ }
|
|
188
165
|
}
|
|
166
|
+
// Should not reach here, but handle the case where all retries were consumed
|
|
167
|
+
if (lastErr)
|
|
168
|
+
throw lastErr;
|
|
169
|
+
throw new Error('codex: unexpected retry loop exit');
|
|
189
170
|
}
|
|
190
171
|
export async function checkCodexAuth() {
|
|
191
172
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/reviewers/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/reviewers/codex.ts"],"names":[],"mappings":"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"}
|
package/dist/skills/broker.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/skills/broker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/skills/broker.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAErE,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;AASvD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAA;IACd,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,KAAK,CAAA;IACd,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC1C;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,aAAa,EAAE,CAAA;IAC9B,WAAW,IAAI,aAAa,EAAE,CAAA;IAC9B,KAAK,IAAI,IAAI,CAAA;CACd;AA2BD,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,aAAa,EAAE,GACvB,sBAAsB,CAkBxB;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAK3F;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAUrF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,EAAE,CAMhF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,EAAE,CAO/E;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,gBAAgB,CA0ClB;AA0CD,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,CAsBrG"}
|
package/dist/skills/broker.js
CHANGED
|
@@ -2,6 +2,7 @@ import { existsSync, mkdtempSync, readFileSync, rmSync, statSync, writeFileSync
|
|
|
2
2
|
import { join, resolve, sep } from 'path';
|
|
3
3
|
import { tmpdir } from 'os';
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
|
+
import { findCompetingSkill } from './catalog.js';
|
|
5
6
|
const BROKER_SERVER_PATH = fileURLToPath(new URL('./broker-server.js', import.meta.url));
|
|
6
7
|
const BROKER_SERVER_TS_PATH = fileURLToPath(new URL('./broker-server.ts', import.meta.url));
|
|
7
8
|
const MAX_SKILL_FILE_BYTES = 512_000;
|
|
@@ -87,6 +88,9 @@ export function callSkillBrokerTool(sessionPath, toolName, rawArgs) {
|
|
|
87
88
|
if (!skill)
|
|
88
89
|
return error(`Skill ${name} is not enabled for this operation`);
|
|
89
90
|
if (toolName === 'activate_skill') {
|
|
91
|
+
const competitor = findCompetingSkill(name, state.activated);
|
|
92
|
+
if (competitor)
|
|
93
|
+
return error(`Skill ${name} competes with activated ${competitor}; activate only one review baseline`);
|
|
90
94
|
const instructions = readFileSync(join(skill.path, 'SKILL.md'), 'utf8');
|
|
91
95
|
if (!state.activated.includes(name)) {
|
|
92
96
|
state.activated.push(name);
|
|
@@ -117,11 +121,20 @@ export function callSkillBrokerTool(sessionPath, toolName, rawArgs) {
|
|
|
117
121
|
}
|
|
118
122
|
return error(`Unknown skill broker tool: ${toolName}`);
|
|
119
123
|
}
|
|
124
|
+
// Broker tools never mutate the repository or external systems; activation only
|
|
125
|
+
// records an idempotent receipt in the current step's temporary session.
|
|
126
|
+
const READ_ONLY_TOOL_ANNOTATIONS = {
|
|
127
|
+
readOnlyHint: true,
|
|
128
|
+
destructiveHint: false,
|
|
129
|
+
idempotentHint: true,
|
|
130
|
+
openWorldHint: false,
|
|
131
|
+
};
|
|
120
132
|
const TOOLS = [
|
|
121
133
|
{
|
|
122
134
|
name: 'list_enabled_skills',
|
|
123
135
|
description: 'List Agent Skills enabled for the current Crosscheck operation. Metadata only; this does not activate a skill.',
|
|
124
136
|
inputSchema: { type: 'object', properties: {}, additionalProperties: false },
|
|
137
|
+
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
125
138
|
},
|
|
126
139
|
{
|
|
127
140
|
name: 'activate_skill',
|
|
@@ -132,6 +145,7 @@ const TOOLS = [
|
|
|
132
145
|
required: ['name'],
|
|
133
146
|
additionalProperties: false,
|
|
134
147
|
},
|
|
148
|
+
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
135
149
|
},
|
|
136
150
|
{
|
|
137
151
|
name: 'read_skill_file',
|
|
@@ -142,6 +156,7 @@ const TOOLS = [
|
|
|
142
156
|
required: ['name', 'path'],
|
|
143
157
|
additionalProperties: false,
|
|
144
158
|
},
|
|
159
|
+
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
145
160
|
},
|
|
146
161
|
];
|
|
147
162
|
export function handleSkillBrokerRequest(sessionPath, request) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/skills/broker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AAC3F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/skills/broker.ts"],"names":[],"mappings":"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"}
|
package/dist/skills/catalog.d.ts
CHANGED
|
@@ -14,7 +14,9 @@ export interface SkillFrontmatter {
|
|
|
14
14
|
author?: string;
|
|
15
15
|
license?: string;
|
|
16
16
|
}
|
|
17
|
-
export declare const RECOMMENDED_SKILL_NAMES: readonly ["code-review-skill", "diagnosing-bugs"];
|
|
17
|
+
export declare const RECOMMENDED_SKILL_NAMES: readonly ["code-review-skill", "codebase-design", "diagnosing-bugs"];
|
|
18
|
+
export declare const BUNDLED_SKILL_RECOMMENDATIONS: Readonly<Record<string, string>>;
|
|
19
|
+
export declare function findCompetingSkill(skillName: string, selectedNames: readonly string[]): string | undefined;
|
|
18
20
|
export declare const INSTALLED_SKILLS_DIR: string;
|
|
19
21
|
export declare function readSkillFrontmatter(skillPath: string): SkillFrontmatter;
|
|
20
22
|
export declare function isValidSkillAuthor(value: unknown): value is string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/skills/catalog.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;CACb;AAMD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/skills/catalog.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;CACb;AAMD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,uBAAuB,sEAAuE,CAAA;AAE3G,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK1E,CAAA;AAOD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAE1G;AAGD,eAAO,MAAM,oBAAoB,QAA2C,CAAA;AAE5E,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAMxE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAElE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEnE;AAiDD,wBAAgB,iBAAiB,CAAC,OAAO,SAAqB,GAAG,aAAa,EAAE,CAE/E;AAED,wBAAgB,mBAAmB,CAAC,OAAO,SAAuB,GAAG,aAAa,EAAE,CAEnF;AAED,wBAAgB,gBAAgB,CAAC,aAAa,SAAuB,GAAG,aAAa,EAAE,CAMtF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,MAAM,CAErG"}
|
package/dist/skills/catalog.js
CHANGED
|
@@ -4,7 +4,20 @@ import { fileURLToPath } from 'url';
|
|
|
4
4
|
import { homedir } from 'os';
|
|
5
5
|
import yaml from 'js-yaml';
|
|
6
6
|
import { computeSkillIntegrity } from './integrity.js';
|
|
7
|
-
export const RECOMMENDED_SKILL_NAMES = ['code-review-skill', 'diagnosing-bugs'];
|
|
7
|
+
export const RECOMMENDED_SKILL_NAMES = ['code-review-skill', 'codebase-design', 'diagnosing-bugs'];
|
|
8
|
+
export const BUNDLED_SKILL_RECOMMENDATIONS = {
|
|
9
|
+
'code-review': 'Best for evidence-rich repositories with documented standards and a clear issue or PRD; checks Standards and Spec separately.',
|
|
10
|
+
'code-review-skill': 'Best general default for broad language, correctness, security, performance, and architecture coverage.',
|
|
11
|
+
'codebase-design': 'Best for architecture-heavy changes: deep modules, small interfaces, clean seams, and testability.',
|
|
12
|
+
'diagnosing-bugs': 'Best for hard bugs and regressions: requires a reproducible signal, ranked hypotheses, and regression evidence.',
|
|
13
|
+
};
|
|
14
|
+
const COMPETING_SKILLS = {
|
|
15
|
+
'code-review': ['code-review-skill'],
|
|
16
|
+
'code-review-skill': ['code-review'],
|
|
17
|
+
};
|
|
18
|
+
export function findCompetingSkill(skillName, selectedNames) {
|
|
19
|
+
return COMPETING_SKILLS[skillName]?.find(name => selectedNames.includes(name));
|
|
20
|
+
}
|
|
8
21
|
const BUNDLED_SKILLS_DIR = fileURLToPath(new URL('../../assets/skills/', import.meta.url));
|
|
9
22
|
export const INSTALLED_SKILLS_DIR = join(homedir(), '.crosscheck', 'skills');
|
|
10
23
|
export function readSkillFrontmatter(skillPath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/skills/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,IAAI,MAAM,SAAS,CAAA;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAwBtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,mBAAmB,EAAE,iBAAiB,CAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/skills/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,IAAI,MAAM,SAAS,CAAA;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAwBtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,CAAU,CAAA;AAE3G,MAAM,CAAC,MAAM,6BAA6B,GAAqC;IAC7E,aAAa,EAAE,+HAA+H;IAC9I,mBAAmB,EAAE,yGAAyG;IAC9H,iBAAiB,EAAE,oGAAoG;IACvH,iBAAiB,EAAE,iHAAiH;CACrI,CAAA;AAED,MAAM,gBAAgB,GAAgD;IACpE,aAAa,EAAE,CAAC,mBAAmB,CAAC;IACpC,mBAAmB,EAAE,CAAC,aAAa,CAAC;CACrC,CAAA;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,aAAgC;IACpF,OAAO,gBAAgB,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;AAChF,CAAC;AAED,MAAM,kBAAkB,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAC1F,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAA;AAE5E,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAA;IACjE,MAAM,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IACrB,MAAM,MAAM,GAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3C,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAA0B,CAAC,CAAC,CAAC,EAAE,CAAA;AACxF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,iDAAiD,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACnG,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,sCAAsC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACxF,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC7D,MAAM,OAAO,GAAG,KAAgC,CAAA;IAChD,OAAO,OAAO,CAAC,aAAa,KAAK,CAAC;WAC7B,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;WACnF,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC;WAClC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC;WACpC,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;WAC/D,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;WACnE,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AAC/F,CAAC;AAED,SAAS,UAAU,CAAC,OAAe,EAAE,WAAoB;IACvD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAA;IACnC,OAAO,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SACjD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SACnE,OAAO,CAAC,KAAK,CAAC,EAAE;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAA;YACxD,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;YACnG,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;YAC7C,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAA;YACtE,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAA;YAC9C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;mBAC3F,OAAO,WAAW,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE;mBAC9E,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;YACzD,CAAC;YACD,OAAO,CAAC;oBACN,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE;oBAC3C,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,IAAI;iBACL,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,WAAW;gBAAE,OAAO,EAAE,CAAA;YAC1B,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAO,GAAG,kBAAkB;IAC5D,OAAO,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAO,GAAG,oBAAoB;IAChE,OAAO,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,aAAa,GAAG,oBAAoB;IACnE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IAC7E,KAAK,MAAM,KAAK,IAAI,mBAAmB,CAAC,aAAa,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC5D,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAyD;IAC3F,OAAO,GAAG,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,GAAG,CAAA;AAChE,CAAC"}
|
package/get-started.md
CHANGED
|
@@ -448,7 +448,10 @@ crosscheck onboard
|
|
|
448
448
|
Choice [2]: 2
|
|
449
449
|
|
|
450
450
|
Step 6.5 — agent skills
|
|
451
|
+
[ ] code-review (by @mattpocock, MIT)
|
|
451
452
|
[x] code-review-skill (by @awesome-skills, MIT)
|
|
453
|
+
[x] codebase-design (by @mattpocock, MIT)
|
|
454
|
+
[x] diagnosing-bugs (by @mattpocock, MIT)
|
|
452
455
|
|
|
453
456
|
Step 7 — workflow pipeline
|
|
454
457
|
[1] review only [2] review → fix [3] review → fix → re-check
|
|
@@ -806,12 +809,12 @@ Crosscheck itself ships with this preloaded catalog:
|
|
|
806
809
|
|
|
807
810
|
| Skill | Onboarding default | Best fit |
|
|
808
811
|
|---|---:|---|
|
|
809
|
-
| [`code-review-skill`](https://github.com/awesome-skills/code-review-skill) (by `@awesome-skills`, MIT) | On |
|
|
810
|
-
| [`
|
|
811
|
-
| [`
|
|
812
|
-
| [`
|
|
812
|
+
| [`code-review-skill`](https://github.com/awesome-skills/code-review-skill) (by `@awesome-skills`, MIT) | On | General default: broad language, correctness, security, performance, and architecture coverage |
|
|
813
|
+
| [`codebase-design`](https://github.com/mattpocock/skills/tree/main/skills/engineering/codebase-design) (by `@mattpocock`, MIT) | On | Architecture-heavy changes: deep modules, small interfaces, clean seams, and testability |
|
|
814
|
+
| [`diagnosing-bugs`](https://github.com/mattpocock/skills/tree/main/skills/engineering/diagnosing-bugs) (by `@mattpocock`, MIT) | On | Hard bugs and regressions: reproducible signals, ranked hypotheses, and regression evidence |
|
|
815
|
+
| [`code-review`](https://github.com/mattpocock/skills/tree/main/skills/engineering/code-review) (by `@mattpocock`, MIT) | Off | Evidence-rich repositories: separately checks documented standards and issue/PRD fidelity |
|
|
813
816
|
|
|
814
|
-
The
|
|
817
|
+
`code-review` and `code-review-skill` are competing review baselines. The onboarding picker highlights the conflict and will not enable one until the selected counterpart is deselected; the runtime broker also rejects activation of a second baseline. The other bundled skills are complementary.
|
|
815
818
|
|
|
816
819
|
```bash
|
|
817
820
|
crosscheck skill install https://github.com/owner/my-skill.git
|
|
@@ -823,11 +826,13 @@ The Git repository or local directory must have `SKILL.md` at its root. For a sk
|
|
|
823
826
|
|
|
824
827
|
`crosscheck status` distinguishes the full installed catalog from the enabled selection and renders attributed identities as `skill-name (by @author, license)`.
|
|
825
828
|
|
|
826
|
-
At runtime, Crosscheck distinguishes three states: **installed** skills are in the catalog, **enabled** skills are available to agents, and **activated** skills were actually loaded for one workflow step.
|
|
829
|
+
At runtime, Crosscheck distinguishes three states: **installed** skills are in the catalog, **enabled** skills are available to agents, and **activated** skills were actually loaded for one workflow step. A skill becomes activated only when the agent successfully calls the Crosscheck broker's `activate_skill` tool for an enabled skill and receives its `SKILL.md` instructions. Listing enabled skills, seeing a skill description, or merely enabling a skill does not count.
|
|
830
|
+
|
|
831
|
+
Activation is scoped to one step session, such as review, fix, recheck, or conflict resolution. Repeated activation in that session is idempotent, and the receipt survives retries or a reviewer fallback within the same step. Every later step gets a separate empty session, and Crosscheck deletes all step sessions when the workflow run ends. The terminal, logs, and PR comment preserve the completed step's attribution as historical evidence; they do not pre-activate future sessions. For example: `code-review-skill (by @awesome-skills, MIT)`.
|
|
827
832
|
|
|
828
833
|
Upgrading from an earlier Crosscheck release is opt-in: existing configs default to `skills.enabled: []`. Re-run `crosscheck onboard` to choose the recommended bundle or any additional installed skills.
|
|
829
834
|
|
|
830
|
-
Review and recheck also honor repository practices in `AGENTS.md` and `CLAUDE.md`. Crosscheck reads the root files plus any nested files whose directory contains a changed path, orders them from broadest to most specific, and lets nested guidance override root guidance. It reads these files from the PR's base branch and disables vendor-native discovery for the run, so guidance added or modified by the PR cannot influence its own review.
|
|
835
|
+
Review and recheck also honor repository practices in `AGENTS.md` and `CLAUDE.md`. These repository-defined practices take precedence over bundled skill advice. Crosscheck reads the root files plus any nested files whose directory contains a changed path, orders them from broadest to most specific, and lets nested guidance override root guidance. It reads these files from the PR's base branch and disables vendor-native discovery for the run, so guidance added or modified by the PR cannot influence its own review.
|
|
831
836
|
|
|
832
837
|
---
|
|
833
838
|
|