@humanbased/crosscheck 1.2.0 → 1.3.0-beta.81
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 +1 -1
- package/README.md +182 -375
- package/README.zh.md +1 -1
- package/assets/icon-256.png +0 -0
- package/assets/linear-comment.svg +18 -0
- package/assets/linear-onboard.svg +30 -0
- package/assets/linear-status.svg +23 -0
- package/assets/linear-test.svg +34 -0
- package/assets/skills/code-review/.crosscheck-skill.json +9 -0
- package/assets/skills/code-review/LICENSE +21 -0
- package/assets/skills/code-review/SKILL.md +89 -0
- package/assets/skills/code-review/agents/openai.yaml +3 -0
- package/assets/skills/code-review-skill/.crosscheck-skill.json +9 -0
- package/assets/skills/code-review-skill/LICENSE +21 -0
- package/assets/skills/code-review-skill/SKILL.md +231 -0
- package/assets/skills/code-review-skill/assets/pr-review-template.md +137 -0
- package/assets/skills/code-review-skill/assets/review-checklist.md +123 -0
- package/assets/skills/code-review-skill/reference/angular.md +768 -0
- package/assets/skills/code-review-skill/reference/architecture-review-guide.md +472 -0
- package/assets/skills/code-review-skill/reference/c.md +890 -0
- package/assets/skills/code-review-skill/reference/code-quality-universal.md +488 -0
- package/assets/skills/code-review-skill/reference/code-review-best-practices.md +136 -0
- package/assets/skills/code-review-skill/reference/common-bugs-checklist.md +286 -0
- package/assets/skills/code-review-skill/reference/cpp.md +893 -0
- package/assets/skills/code-review-skill/reference/cross-cutting/async-concurrency-patterns.md +515 -0
- package/assets/skills/code-review-skill/reference/cross-cutting/error-handling-principles.md +492 -0
- package/assets/skills/code-review-skill/reference/cross-cutting/n-plus-one-queries.md +309 -0
- package/assets/skills/code-review-skill/reference/cross-cutting/sql-injection-prevention.md +308 -0
- package/assets/skills/code-review-skill/reference/cross-cutting/xss-prevention.md +264 -0
- package/assets/skills/code-review-skill/reference/csharp.md +525 -0
- package/assets/skills/code-review-skill/reference/css-less-sass.md +661 -0
- package/assets/skills/code-review-skill/reference/django.md +985 -0
- package/assets/skills/code-review-skill/reference/fastapi.md +580 -0
- package/assets/skills/code-review-skill/reference/go.md +993 -0
- package/assets/skills/code-review-skill/reference/java.md +409 -0
- package/assets/skills/code-review-skill/reference/java8.md +586 -0
- package/assets/skills/code-review-skill/reference/kotlin.md +1018 -0
- package/assets/skills/code-review-skill/reference/nestjs.md +593 -0
- package/assets/skills/code-review-skill/reference/performance-review-guide.md +816 -0
- package/assets/skills/code-review-skill/reference/php.md +684 -0
- package/assets/skills/code-review-skill/reference/python.md +1073 -0
- package/assets/skills/code-review-skill/reference/qt.md +757 -0
- package/assets/skills/code-review-skill/reference/react.md +871 -0
- package/assets/skills/code-review-skill/reference/ruby.md +964 -0
- package/assets/skills/code-review-skill/reference/rust.md +846 -0
- package/assets/skills/code-review-skill/reference/security-review-guide.md +494 -0
- package/assets/skills/code-review-skill/reference/svelte.md +1064 -0
- package/assets/skills/code-review-skill/reference/swift.md +936 -0
- package/assets/skills/code-review-skill/reference/typescript.md +1016 -0
- package/assets/skills/code-review-skill/reference/vue.md +924 -0
- package/assets/skills/code-review-skill/reference/zig.md +440 -0
- package/assets/skills/code-review-skill/scripts/pr-analyzer.py +435 -0
- package/assets/skills/code-review-skill/scripts/test_pr_analyzer.py +380 -0
- package/assets/skills/codebase-design/.crosscheck-skill.json +9 -0
- package/assets/skills/codebase-design/DEEPENING.md +37 -0
- package/assets/skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
- package/assets/skills/codebase-design/LICENSE +21 -0
- package/assets/skills/codebase-design/SKILL.md +114 -0
- package/assets/skills/codebase-design/agents/openai.yaml +3 -0
- package/assets/skills/diagnosing-bugs/.crosscheck-skill.json +9 -0
- package/assets/skills/diagnosing-bugs/LICENSE +21 -0
- package/assets/skills/diagnosing-bugs/SKILL.md +134 -0
- package/assets/skills/diagnosing-bugs/agents/openai.yaml +3 -0
- package/assets/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
- package/crosscheck.config.example.yml +101 -9
- package/dist/__tests__/board.test.js +11 -0
- package/dist/__tests__/board.test.js.map +1 -1
- package/dist/__tests__/can-write-verdict.test.d.ts +2 -0
- package/dist/__tests__/can-write-verdict.test.d.ts.map +1 -0
- package/dist/__tests__/can-write-verdict.test.js +31 -0
- package/dist/__tests__/can-write-verdict.test.js.map +1 -0
- package/dist/__tests__/codex.test.js +14 -27
- package/dist/__tests__/codex.test.js.map +1 -1
- package/dist/__tests__/comment-bodies.test.js +49 -1
- package/dist/__tests__/comment-bodies.test.js.map +1 -1
- package/dist/__tests__/conflict-resolve.test.js +44 -1
- package/dist/__tests__/conflict-resolve.test.js.map +1 -1
- package/dist/__tests__/fix.test.js +33 -0
- package/dist/__tests__/fix.test.js.map +1 -1
- package/dist/__tests__/linear-branding.test.d.ts +2 -0
- package/dist/__tests__/linear-branding.test.d.ts.map +1 -0
- package/dist/__tests__/linear-branding.test.js +156 -0
- package/dist/__tests__/linear-branding.test.js.map +1 -0
- package/dist/__tests__/linear-client.test.d.ts +2 -0
- package/dist/__tests__/linear-client.test.d.ts.map +1 -0
- package/dist/__tests__/linear-client.test.js +120 -0
- package/dist/__tests__/linear-client.test.js.map +1 -0
- package/dist/__tests__/linear-comment.test.d.ts +2 -0
- package/dist/__tests__/linear-comment.test.d.ts.map +1 -0
- package/dist/__tests__/linear-comment.test.js +151 -0
- package/dist/__tests__/linear-comment.test.js.map +1 -0
- package/dist/__tests__/linear-identity.test.d.ts +2 -0
- package/dist/__tests__/linear-identity.test.d.ts.map +1 -0
- package/dist/__tests__/linear-identity.test.js +253 -0
- package/dist/__tests__/linear-identity.test.js.map +1 -0
- package/dist/__tests__/linear-notify.test.d.ts +2 -0
- package/dist/__tests__/linear-notify.test.d.ts.map +1 -0
- package/dist/__tests__/linear-notify.test.js +144 -0
- package/dist/__tests__/linear-notify.test.js.map +1 -0
- package/dist/__tests__/linear-ref.test.d.ts +2 -0
- package/dist/__tests__/linear-ref.test.d.ts.map +1 -0
- package/dist/__tests__/linear-ref.test.js +261 -0
- package/dist/__tests__/linear-ref.test.js.map +1 -0
- package/dist/__tests__/linear-test-ref.test.d.ts +2 -0
- package/dist/__tests__/linear-test-ref.test.d.ts.map +1 -0
- package/dist/__tests__/linear-test-ref.test.js +81 -0
- package/dist/__tests__/linear-test-ref.test.js.map +1 -0
- package/dist/__tests__/linear-verify.test.d.ts +2 -0
- package/dist/__tests__/linear-verify.test.d.ts.map +1 -0
- package/dist/__tests__/linear-verify.test.js +132 -0
- package/dist/__tests__/linear-verify.test.js.map +1 -0
- package/dist/__tests__/linear-worker.test.d.ts +2 -0
- package/dist/__tests__/linear-worker.test.d.ts.map +1 -0
- package/dist/__tests__/linear-worker.test.js +83 -0
- package/dist/__tests__/linear-worker.test.js.map +1 -0
- package/dist/__tests__/linear-write-possible.test.d.ts +2 -0
- package/dist/__tests__/linear-write-possible.test.d.ts.map +1 -0
- package/dist/__tests__/linear-write-possible.test.js +30 -0
- package/dist/__tests__/linear-write-possible.test.js.map +1 -0
- package/dist/__tests__/onboard-preservation.test.js +59 -3
- package/dist/__tests__/onboard-preservation.test.js.map +1 -1
- package/dist/__tests__/optimize.test.js +2 -0
- package/dist/__tests__/optimize.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.d.ts +2 -0
- package/dist/__tests__/repository-guidance.test.d.ts.map +1 -0
- package/dist/__tests__/repository-guidance.test.js +107 -0
- package/dist/__tests__/repository-guidance.test.js.map +1 -0
- package/dist/__tests__/review-comment-body.test.js +35 -0
- package/dist/__tests__/review-comment-body.test.js.map +1 -1
- package/dist/__tests__/review-models.test.js +19 -3
- package/dist/__tests__/review-models.test.js.map +1 -1
- package/dist/__tests__/review-strategy.test.d.ts +2 -0
- package/dist/__tests__/review-strategy.test.d.ts.map +1 -0
- package/dist/__tests__/review-strategy.test.js +397 -0
- package/dist/__tests__/review-strategy.test.js.map +1 -0
- package/dist/__tests__/runner.test.js +29 -1
- package/dist/__tests__/runner.test.js.map +1 -1
- package/dist/__tests__/skill-attribution.test.d.ts +2 -0
- package/dist/__tests__/skill-attribution.test.d.ts.map +1 -0
- package/dist/__tests__/skill-attribution.test.js +53 -0
- package/dist/__tests__/skill-attribution.test.js.map +1 -0
- package/dist/__tests__/skill-broker.test.d.ts +2 -0
- package/dist/__tests__/skill-broker.test.d.ts.map +1 -0
- package/dist/__tests__/skill-broker.test.js +144 -0
- package/dist/__tests__/skill-broker.test.js.map +1 -0
- package/dist/__tests__/skill-catalog.test.d.ts +2 -0
- package/dist/__tests__/skill-catalog.test.d.ts.map +1 -0
- package/dist/__tests__/skill-catalog.test.js +40 -0
- package/dist/__tests__/skill-catalog.test.js.map +1 -0
- package/dist/__tests__/skill-installer.test.d.ts +2 -0
- package/dist/__tests__/skill-installer.test.d.ts.map +1 -0
- package/dist/__tests__/skill-installer.test.js +96 -0
- package/dist/__tests__/skill-installer.test.js.map +1 -0
- package/dist/__tests__/skills-config.test.d.ts +2 -0
- package/dist/__tests__/skills-config.test.d.ts.map +1 -0
- package/dist/__tests__/skills-config.test.js +12 -0
- package/dist/__tests__/skills-config.test.js.map +1 -0
- package/dist/cli.js +29 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/linear-test.d.ts +18 -0
- package/dist/commands/linear-test.d.ts.map +1 -0
- package/dist/commands/linear-test.js +130 -0
- package/dist/commands/linear-test.js.map +1 -0
- package/dist/commands/onboard.d.ts +36 -3
- package/dist/commands/onboard.d.ts.map +1 -1
- package/dist/commands/onboard.js +233 -42
- package/dist/commands/onboard.js.map +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +65 -6
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +45 -7
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/skill.d.ts +2 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +16 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +53 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +90 -12
- package/dist/commands/watch.js.map +1 -1
- package/dist/config/loader.d.ts +3 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +13 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/review-model-tiers.json +3 -3
- package/dist/config/review-strategy.json +204 -0
- package/dist/config/schema.d.ts +261 -15
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +90 -8
- package/dist/config/schema.js.map +1 -1
- package/dist/github/client.d.ts +21 -1
- package/dist/github/client.d.ts.map +1 -1
- package/dist/github/client.js +46 -7
- package/dist/github/client.js.map +1 -1
- package/dist/github/webhook.d.ts +4 -0
- package/dist/github/webhook.d.ts.map +1 -1
- package/dist/github/webhook.js.map +1 -1
- package/dist/issues/ticket-ref.d.ts.map +1 -1
- package/dist/issues/ticket-ref.js +6 -5
- package/dist/issues/ticket-ref.js.map +1 -1
- package/dist/lib/annotation.d.ts +7 -0
- package/dist/lib/annotation.d.ts.map +1 -1
- package/dist/lib/annotation.js +11 -1
- package/dist/lib/annotation.js.map +1 -1
- package/dist/lib/board.d.ts +3 -0
- package/dist/lib/board.d.ts.map +1 -1
- package/dist/lib/board.js +4 -2
- package/dist/lib/board.js.map +1 -1
- package/dist/lib/clone.d.ts +1 -0
- package/dist/lib/clone.d.ts.map +1 -1
- package/dist/lib/clone.js +32 -10
- package/dist/lib/clone.js.map +1 -1
- package/dist/lib/comment-bodies.d.ts +37 -0
- package/dist/lib/comment-bodies.d.ts.map +1 -1
- package/dist/lib/comment-bodies.js +47 -9
- package/dist/lib/comment-bodies.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.d.ts +2 -0
- package/dist/lib/repository-guidance.d.ts.map +1 -0
- package/dist/lib/repository-guidance.js +55 -0
- package/dist/lib/repository-guidance.js.map +1 -0
- package/dist/lib/review-models.d.ts +15 -2
- package/dist/lib/review-models.d.ts.map +1 -1
- package/dist/lib/review-models.js +26 -6
- package/dist/lib/review-models.js.map +1 -1
- package/dist/lib/review-strategy.d.ts +92 -0
- package/dist/lib/review-strategy.d.ts.map +1 -0
- package/dist/lib/review-strategy.js +282 -0
- package/dist/lib/review-strategy.js.map +1 -0
- package/dist/lib/runner.d.ts +92 -0
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/runner.js +470 -54
- package/dist/lib/runner.js.map +1 -1
- package/dist/lib/workflow.d.ts +9 -0
- package/dist/lib/workflow.d.ts.map +1 -1
- package/dist/lib/workflow.js +20 -0
- package/dist/lib/workflow.js.map +1 -1
- package/dist/linear/client.d.ts +18 -0
- package/dist/linear/client.d.ts.map +1 -0
- package/dist/linear/client.js +67 -0
- package/dist/linear/client.js.map +1 -0
- package/dist/linear/comment.d.ts +20 -0
- package/dist/linear/comment.d.ts.map +1 -0
- package/dist/linear/comment.js +57 -0
- package/dist/linear/comment.js.map +1 -0
- package/dist/linear/identity.d.ts +59 -0
- package/dist/linear/identity.d.ts.map +1 -0
- package/dist/linear/identity.js +187 -0
- package/dist/linear/identity.js.map +1 -0
- package/dist/linear/notify.d.ts +35 -0
- package/dist/linear/notify.d.ts.map +1 -0
- package/dist/linear/notify.js +76 -0
- package/dist/linear/notify.js.map +1 -0
- package/dist/linear/ref.d.ts +13 -0
- package/dist/linear/ref.d.ts.map +1 -0
- package/dist/linear/ref.js +90 -0
- package/dist/linear/ref.js.map +1 -0
- package/dist/linear/verify.d.ts +26 -0
- package/dist/linear/verify.d.ts.map +1 -0
- package/dist/linear/verify.js +67 -0
- package/dist/linear/verify.js.map +1 -0
- package/dist/reviewers/claude.d.ts +4 -1
- package/dist/reviewers/claude.d.ts.map +1 -1
- package/dist/reviewers/claude.js +39 -7
- package/dist/reviewers/claude.js.map +1 -1
- package/dist/reviewers/codex.d.ts +3 -1
- package/dist/reviewers/codex.d.ts.map +1 -1
- package/dist/reviewers/codex.js +76 -70
- package/dist/reviewers/codex.js.map +1 -1
- package/dist/reviewers/conflict-resolve.d.ts +3 -1
- package/dist/reviewers/conflict-resolve.d.ts.map +1 -1
- package/dist/reviewers/conflict-resolve.js +21 -6
- package/dist/reviewers/conflict-resolve.js.map +1 -1
- package/dist/reviewers/fix.d.ts +5 -2
- package/dist/reviewers/fix.d.ts.map +1 -1
- package/dist/reviewers/fix.js +26 -10
- package/dist/reviewers/fix.js.map +1 -1
- package/dist/skills/attribution.d.ts +4 -0
- package/dist/skills/attribution.d.ts.map +1 -0
- package/dist/skills/attribution.js +14 -0
- package/dist/skills/attribution.js.map +1 -0
- package/dist/skills/broker-server.d.ts +2 -0
- package/dist/skills/broker-server.d.ts.map +1 -0
- package/dist/skills/broker-server.js +17 -0
- package/dist/skills/broker-server.js.map +1 -0
- package/dist/skills/broker.d.ts +42 -0
- package/dist/skills/broker.d.ts.map +1 -0
- package/dist/skills/broker.js +285 -0
- package/dist/skills/broker.js.map +1 -0
- package/dist/skills/catalog.d.ts +28 -0
- package/dist/skills/catalog.d.ts.map +1 -0
- package/dist/skills/catalog.js +104 -0
- package/dist/skills/catalog.js.map +1 -0
- package/dist/skills/installer.d.ts +10 -0
- package/dist/skills/installer.d.ts.map +1 -0
- package/dist/skills/installer.js +138 -0
- package/dist/skills/installer.js.map +1 -0
- package/dist/skills/integrity.d.ts +4 -0
- package/dist/skills/integrity.d.ts.map +1 -0
- package/dist/skills/integrity.js +36 -0
- package/dist/skills/integrity.js.map +1 -0
- package/docs/dynamic-thoroughness.md +738 -0
- package/docs/linear-identity-contract.md +139 -0
- package/docs/linear-identity.md +293 -0
- package/get-started.md +207 -11
- package/package.json +4 -3
package/dist/reviewers/fix.js
CHANGED
|
@@ -3,6 +3,9 @@ import { mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
|
3
3
|
import { dirname, join } from 'path';
|
|
4
4
|
import { execa } from 'execa';
|
|
5
5
|
import { tierTimeoutMs } from './tier-timeouts.js';
|
|
6
|
+
import { claudeEffort } from './claude.js';
|
|
7
|
+
import { codexReasoningEffort } from './codex.js';
|
|
8
|
+
import { claudeSkillBrokerArgs, codexSkillBrokerArgs, renderSkillBrokerInstructions } from '../skills/broker.js';
|
|
6
9
|
// Minimum ratio of new lines to original lines before we reject a full-file write.
|
|
7
10
|
// Guards against Claude silently truncating large files.
|
|
8
11
|
const MIN_SIZE_RATIO = 0.6;
|
|
@@ -63,7 +66,8 @@ export function applyEdit(fileContent, oldText, newText) {
|
|
|
63
66
|
return null;
|
|
64
67
|
return fileContent.slice(0, idx) + newText + fileContent.slice(idx + oldText.length);
|
|
65
68
|
}
|
|
66
|
-
export async function runFixStep(tmpDir, baseRef, prTitle, reviewComment, instructions, config, model = 'default', timeoutMs) {
|
|
69
|
+
export async function runFixStep(tmpDir, baseRef, prTitle, reviewComment, instructions, config, model = 'default', timeoutMs, skillSession) {
|
|
70
|
+
const effort = claudeEffort(config.vendors?.claude?.effort);
|
|
67
71
|
let diff = '';
|
|
68
72
|
try {
|
|
69
73
|
diff = execSync(`git diff origin/${baseRef}...HEAD`, { cwd: tmpDir, encoding: 'utf8' });
|
|
@@ -78,14 +82,21 @@ export async function runFixStep(tmpDir, baseRef, prTitle, reviewComment, instru
|
|
|
78
82
|
.replace('{PR_TITLE}', prTitle)
|
|
79
83
|
.replace('{REVIEW_COMMENT}', reviewComment.slice(0, 8000))
|
|
80
84
|
.replace('{DIFF}', diff.slice(0, 16000))
|
|
81
|
-
.replace('{EXTRA_INSTRUCTIONS}', instructions ? `Additional instructions: ${instructions}` : '');
|
|
85
|
+
.replace('{EXTRA_INSTRUCTIONS}', [instructions ? `Additional instructions: ${instructions}` : '', skillSession ? renderSkillBrokerInstructions(skillSession) : ''].filter(Boolean).join('\n\n'));
|
|
82
86
|
let output = '';
|
|
83
87
|
let tokensUsed;
|
|
84
88
|
try {
|
|
85
89
|
const modelArgs = model !== 'default' ? ['--model', model] : [];
|
|
86
|
-
const effort = config.vendors?.claude?.effort ?? 'medium';
|
|
87
90
|
const resolvedTimeout = timeoutMs === undefined ? tierTimeoutMs(config.quality.tier) : timeoutMs === 0 ? undefined : timeoutMs;
|
|
88
|
-
const { stdout } = await execa('claude', [
|
|
91
|
+
const { stdout } = await execa('claude', [
|
|
92
|
+
'--print', '--output-format', 'json', ...modelArgs, '--effort', effort,
|
|
93
|
+
...claudeSkillBrokerArgs(skillSession),
|
|
94
|
+
...(skillSession ? ['--allowedTools', [
|
|
95
|
+
'mcp__crosscheck__list_enabled_skills',
|
|
96
|
+
'mcp__crosscheck__activate_skill',
|
|
97
|
+
'mcp__crosscheck__read_skill_file',
|
|
98
|
+
].join(',')] : []),
|
|
99
|
+
], {
|
|
89
100
|
input: prompt,
|
|
90
101
|
timeout: resolvedTimeout,
|
|
91
102
|
env: { ...process.env },
|
|
@@ -110,7 +121,7 @@ export async function runFixStep(tmpDir, baseRef, prTitle, reviewComment, instru
|
|
|
110
121
|
throw err;
|
|
111
122
|
}
|
|
112
123
|
if (!output || output === 'NO_CHANGES')
|
|
113
|
-
return { appliedCount: 0, changedFiles: [], tokensUsed };
|
|
124
|
+
return { appliedCount: 0, changedFiles: [], tokensUsed, effort };
|
|
114
125
|
let appliedCount = 0;
|
|
115
126
|
// Primary: apply <edit path="..."><old>...</old><new>...</new></edit> blocks.
|
|
116
127
|
// This format only outputs changed sections — structurally prevents truncation.
|
|
@@ -198,7 +209,7 @@ export async function runFixStep(tmpDir, baseRef, prTitle, reviewComment, instru
|
|
|
198
209
|
catch { /* skip unwritable paths */ }
|
|
199
210
|
}
|
|
200
211
|
}
|
|
201
|
-
return { appliedCount, changedFiles: writtenFiles, tokensUsed };
|
|
212
|
+
return { appliedCount, changedFiles: writtenFiles, tokensUsed, effort };
|
|
202
213
|
}
|
|
203
214
|
// Codex fix: codex is an agentic tool that edits files directly on disk.
|
|
204
215
|
// We pass the fix context as a prompt, run codex in full-auto mode, then
|
|
@@ -224,7 +235,12 @@ Please address the issues raised in the review. Rules:
|
|
|
224
235
|
- Do not refactor unrelated code, rename variables, or add tests unless asked
|
|
225
236
|
- If a comment requires deeper understanding of business logic, skip it
|
|
226
237
|
- If there are no actionable code changes, exit immediately without modifying any files`;
|
|
227
|
-
export async function runCodexFixStep(tmpDir, baseRef, prTitle, reviewComment, instructions, model = 'default', timeoutMs
|
|
238
|
+
export async function runCodexFixStep(tmpDir, baseRef, prTitle, reviewComment, instructions, model = 'default', timeoutMs, skillSession,
|
|
239
|
+
// Reasoning effort from vendors.codex.effort. Was never passed here, so a
|
|
240
|
+
// configured effort applied to the review and then silently dropped for the
|
|
241
|
+
// fix; the posted card now reports this value, so it has to be the real one.
|
|
242
|
+
configuredEffort) {
|
|
243
|
+
const effort = codexReasoningEffort(configuredEffort ?? 'medium');
|
|
228
244
|
let diff = '';
|
|
229
245
|
try {
|
|
230
246
|
diff = execSync(`git diff origin/${baseRef}...HEAD`, { cwd: tmpDir, encoding: 'utf8' });
|
|
@@ -239,11 +255,11 @@ export async function runCodexFixStep(tmpDir, baseRef, prTitle, reviewComment, i
|
|
|
239
255
|
.replace('{PR_TITLE}', prTitle)
|
|
240
256
|
.replace('{REVIEW_COMMENT}', reviewComment.slice(0, 8000))
|
|
241
257
|
.replace('{DIFF}', diff.slice(0, 16000))
|
|
242
|
-
.replace('{EXTRA_INSTRUCTIONS}', instructions ? `Additional instructions: ${instructions}` : '');
|
|
258
|
+
.replace('{EXTRA_INSTRUCTIONS}', [instructions ? `Additional instructions: ${instructions}` : '', skillSession ? renderSkillBrokerInstructions(skillSession) : ''].filter(Boolean).join('\n\n'));
|
|
243
259
|
const resolvedTimeout = timeoutMs === undefined ? 300_000 : timeoutMs === 0 ? undefined : timeoutMs;
|
|
244
260
|
const modelArgs = model !== 'default' ? ['-c', `model="${model}"`] : [];
|
|
245
261
|
try {
|
|
246
|
-
await execa('codex', ['exec', ...modelArgs, prompt], {
|
|
262
|
+
await execa('codex', ['exec', ...modelArgs, '-c', `model_reasoning_effort="${effort}"`, ...codexSkillBrokerArgs(skillSession), prompt], {
|
|
247
263
|
cwd: tmpDir,
|
|
248
264
|
timeout: resolvedTimeout,
|
|
249
265
|
env: { ...process.env, CODEX_QUIET_MODE: '1', HOME: process.env.HOME ?? '' },
|
|
@@ -263,6 +279,6 @@ export async function runCodexFixStep(tmpDir, baseRef, prTitle, reviewComment, i
|
|
|
263
279
|
...(changedOutput ? changedOutput.split('\n').filter(Boolean) : []),
|
|
264
280
|
...(untrackedOutput ? untrackedOutput.split('\n').filter(Boolean) : []),
|
|
265
281
|
];
|
|
266
|
-
return { appliedCount: changedFiles.length, changedFiles };
|
|
282
|
+
return { appliedCount: changedFiles.length, changedFiles, effort };
|
|
267
283
|
}
|
|
268
284
|
//# sourceMappingURL=fix.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/reviewers/fix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/reviewers/fix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../../src/skills/attribution.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAIhD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAEtE;AAID,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAG1E"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { formatSkillIdentity } from './catalog.js';
|
|
2
|
+
// Skills are separated by a middot and kept on one line: the receipt has to be
|
|
3
|
+
// present for licensing, but it is metadata about the run, not part of it.
|
|
4
|
+
export function formatSkillAttribution(skills) {
|
|
5
|
+
return skills.map(formatSkillIdentity).join(' · ');
|
|
6
|
+
}
|
|
7
|
+
// One italic line, same weight as the reviewer attribution it sits beneath.
|
|
8
|
+
// Empty string when nothing activated, so callers can concatenate blind.
|
|
9
|
+
export function renderSkillAttributionLine(skills) {
|
|
10
|
+
if (skills.length === 0)
|
|
11
|
+
return '';
|
|
12
|
+
return `_Skills: ${formatSkillAttribution(skills)}_`;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=attribution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribution.js","sourceRoot":"","sources":["../../src/skills/attribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAGlD,+EAA+E;AAC/E,2EAA2E;AAC3E,MAAM,UAAU,sBAAsB,CAAC,MAAuB;IAC5D,OAAO,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACpD,CAAC;AAED,4EAA4E;AAC5E,yEAAyE;AACzE,MAAM,UAAU,0BAA0B,CAAC,MAAuB;IAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAClC,OAAO,YAAY,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAA;AACtD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broker-server.d.ts","sourceRoot":"","sources":["../../src/skills/broker-server.ts"],"names":[],"mappings":"AASA,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3E"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { once } from 'events';
|
|
2
|
+
import { createConnection } from 'net';
|
|
3
|
+
function parseSocketPath(argv) {
|
|
4
|
+
const index = argv.indexOf('--socket');
|
|
5
|
+
if (index === -1 || !argv[index + 1])
|
|
6
|
+
throw new Error('--socket <path> is required');
|
|
7
|
+
return argv[index + 1];
|
|
8
|
+
}
|
|
9
|
+
export async function runSkillBrokerProxy(socketPath) {
|
|
10
|
+
const socket = createConnection(socketPath);
|
|
11
|
+
await once(socket, 'connect');
|
|
12
|
+
process.stdin.pipe(socket);
|
|
13
|
+
socket.pipe(process.stdout);
|
|
14
|
+
await once(socket, 'close');
|
|
15
|
+
}
|
|
16
|
+
await runSkillBrokerProxy(parseSocketPath(process.argv.slice(2)));
|
|
17
|
+
//# sourceMappingURL=broker-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broker-server.js","sourceRoot":"","sources":["../../src/skills/broker-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAA;AAEtC,SAAS,eAAe,CAAC,IAAc;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACtC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IACpF,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAkB;IAC1D,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;IAC3C,MAAM,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC7B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3B,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAC7B,CAAC;AAED,MAAM,mBAAmB,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type SkillIdentity } from './catalog.js';
|
|
2
|
+
export type SkillMetadata = Omit<SkillIdentity, 'path'>;
|
|
3
|
+
export interface BrokerToolResult {
|
|
4
|
+
content: Array<{
|
|
5
|
+
type: 'text';
|
|
6
|
+
text: string;
|
|
7
|
+
}>;
|
|
8
|
+
isError?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface McpRequest {
|
|
11
|
+
jsonrpc: '2.0';
|
|
12
|
+
id?: string | number | null;
|
|
13
|
+
method: string;
|
|
14
|
+
params?: unknown;
|
|
15
|
+
}
|
|
16
|
+
export interface McpResponse {
|
|
17
|
+
jsonrpc: '2.0';
|
|
18
|
+
id: string | number | null;
|
|
19
|
+
result?: unknown;
|
|
20
|
+
error?: {
|
|
21
|
+
code: number;
|
|
22
|
+
message: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface SkillActivationSession {
|
|
26
|
+
path: string;
|
|
27
|
+
stepType: string;
|
|
28
|
+
enabledSkills: SkillMetadata[];
|
|
29
|
+
activations(): SkillMetadata[];
|
|
30
|
+
close(): void;
|
|
31
|
+
}
|
|
32
|
+
export declare function createSkillActivationSession(stepType: string, enabledNames: string[], catalog: SkillIdentity[]): SkillActivationSession;
|
|
33
|
+
export declare function skillBrokerCommand(session: SkillActivationSession): {
|
|
34
|
+
command: string;
|
|
35
|
+
args: string[];
|
|
36
|
+
};
|
|
37
|
+
export declare function renderSkillBrokerInstructions(session: SkillActivationSession): string;
|
|
38
|
+
export declare function claudeSkillBrokerArgs(session?: SkillActivationSession): string[];
|
|
39
|
+
export declare function codexSkillBrokerArgs(session?: SkillActivationSession): string[];
|
|
40
|
+
export declare function callSkillBrokerTool(sessionPath: string, toolName: string, rawArgs: unknown): BrokerToolResult;
|
|
41
|
+
export declare function handleSkillBrokerRequest(sessionPath: string, request: McpRequest): McpResponse | null;
|
|
42
|
+
//# sourceMappingURL=broker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/skills/broker.ts"],"names":[],"mappings":"AAOA,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;AAiED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,aAAa,EAAE,GACvB,sBAAsB,CAyDxB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAIvG;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CA+BrF;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,CAyClB;AA0CD,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,CAsBrG"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { existsSync, mkdtempSync, readFileSync, rmSync, statSync } from 'fs';
|
|
2
|
+
import { join, resolve, sep } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { randomUUID } from 'crypto';
|
|
5
|
+
import { createServer } from 'net';
|
|
6
|
+
import { createInterface } from 'readline';
|
|
7
|
+
import { tmpdir } from 'os';
|
|
8
|
+
import { findCompetingSkill } from './catalog.js';
|
|
9
|
+
const BROKER_SERVER_PATH = fileURLToPath(new URL('./broker-server.js', import.meta.url));
|
|
10
|
+
const BROKER_SERVER_TS_PATH = fileURLToPath(new URL('./broker-server.ts', import.meta.url));
|
|
11
|
+
const MAX_SKILL_FILE_BYTES = 512_000;
|
|
12
|
+
const sessionStates = new Map();
|
|
13
|
+
const brokerCommands = new WeakMap();
|
|
14
|
+
function readState(sessionPath) {
|
|
15
|
+
const state = sessionStates.get(sessionPath);
|
|
16
|
+
if (!state)
|
|
17
|
+
throw new Error('Skill session not found');
|
|
18
|
+
return state;
|
|
19
|
+
}
|
|
20
|
+
async function serveBrokerConnection(socket, sessionPath) {
|
|
21
|
+
const lines = createInterface({ input: socket, crlfDelay: Infinity });
|
|
22
|
+
for await (const line of lines) {
|
|
23
|
+
if (!line.trim())
|
|
24
|
+
continue;
|
|
25
|
+
let response;
|
|
26
|
+
try {
|
|
27
|
+
response = handleSkillBrokerRequest(sessionPath, JSON.parse(line));
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
response = {
|
|
31
|
+
jsonrpc: '2.0',
|
|
32
|
+
id: null,
|
|
33
|
+
error: { code: -32700, message: err instanceof Error ? err.message : String(err) },
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (response)
|
|
37
|
+
socket.write(`${JSON.stringify(response)}\n`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function createBrokerServer(socketPath, sessionPath, sockets, onError, onConnection) {
|
|
41
|
+
const server = createServer(socket => {
|
|
42
|
+
onConnection();
|
|
43
|
+
// The agent starts MCP before repository code; make its argv-visible endpoint single-use.
|
|
44
|
+
server.close();
|
|
45
|
+
sockets.add(socket);
|
|
46
|
+
socket.once('close', () => sockets.delete(socket));
|
|
47
|
+
void serveBrokerConnection(socket, sessionPath).catch(() => socket.destroy());
|
|
48
|
+
});
|
|
49
|
+
server.on('error', onError);
|
|
50
|
+
server.listen(socketPath);
|
|
51
|
+
return server;
|
|
52
|
+
}
|
|
53
|
+
function metadata(skill) {
|
|
54
|
+
const { path: _path, ...identity } = skill;
|
|
55
|
+
return identity;
|
|
56
|
+
}
|
|
57
|
+
function error(message) {
|
|
58
|
+
return { content: [{ type: 'text', text: message }], isError: true };
|
|
59
|
+
}
|
|
60
|
+
function stringArg(args, key) {
|
|
61
|
+
return typeof args[key] === 'string' && args[key].trim() ? args[key].trim() : null;
|
|
62
|
+
}
|
|
63
|
+
export function createSkillActivationSession(stepType, enabledNames, catalog) {
|
|
64
|
+
const enabledSet = new Set(enabledNames);
|
|
65
|
+
const enabled = catalog.filter(skill => enabledSet.has(skill.name));
|
|
66
|
+
const sessionDir = process.platform === 'win32' ? undefined : mkdtempSync(join(tmpdir(), 'crosscheck-skill-'));
|
|
67
|
+
const path = process.platform === 'win32'
|
|
68
|
+
? `\\\\.\\pipe\\crosscheck-skill-${randomUUID()}`
|
|
69
|
+
: sessionDir;
|
|
70
|
+
sessionStates.set(path, { schemaVersion: 1, stepType, enabled, activated: [] });
|
|
71
|
+
let listenError;
|
|
72
|
+
const sockets = new Set();
|
|
73
|
+
const servers = new Set();
|
|
74
|
+
let pendingServer;
|
|
75
|
+
const session = {
|
|
76
|
+
path,
|
|
77
|
+
stepType,
|
|
78
|
+
enabledSkills: enabled.map(metadata),
|
|
79
|
+
activations: () => {
|
|
80
|
+
if (listenError)
|
|
81
|
+
throw new Error(`Skill broker failed to listen: ${listenError.message}`);
|
|
82
|
+
const state = readState(path);
|
|
83
|
+
const activated = new Set(state.activated);
|
|
84
|
+
return state.enabled.filter(skill => activated.has(skill.name)).map(metadata);
|
|
85
|
+
},
|
|
86
|
+
close: () => {
|
|
87
|
+
sessionStates.delete(path);
|
|
88
|
+
for (const socket of sockets)
|
|
89
|
+
socket.destroy();
|
|
90
|
+
for (const server of servers)
|
|
91
|
+
server.close();
|
|
92
|
+
if (sessionDir)
|
|
93
|
+
rmSync(sessionDir, { recursive: true, force: true });
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
brokerCommands.set(session, () => {
|
|
97
|
+
if (pendingServer) {
|
|
98
|
+
const staleServer = pendingServer;
|
|
99
|
+
if (staleServer.listening)
|
|
100
|
+
staleServer.close();
|
|
101
|
+
else
|
|
102
|
+
staleServer.once('listening', () => staleServer.close());
|
|
103
|
+
}
|
|
104
|
+
const socketPath = process.platform === 'win32'
|
|
105
|
+
? `\\\\.\\pipe\\crosscheck-skill-${randomUUID()}`
|
|
106
|
+
: join(sessionDir, `${randomUUID().slice(0, 8)}.sock`);
|
|
107
|
+
const server = createBrokerServer(socketPath, path, sockets, err => { if (pendingServer === server)
|
|
108
|
+
listenError = err; }, () => { if (pendingServer === server)
|
|
109
|
+
pendingServer = undefined; });
|
|
110
|
+
pendingServer = server;
|
|
111
|
+
servers.add(server);
|
|
112
|
+
server.once('close', () => servers.delete(server));
|
|
113
|
+
return { command: process.execPath, args: [
|
|
114
|
+
...(existsSync(BROKER_SERVER_PATH) ? [BROKER_SERVER_PATH] : ['--import', 'tsx', BROKER_SERVER_TS_PATH]),
|
|
115
|
+
'--socket', socketPath,
|
|
116
|
+
] };
|
|
117
|
+
});
|
|
118
|
+
return session;
|
|
119
|
+
}
|
|
120
|
+
export function skillBrokerCommand(session) {
|
|
121
|
+
const command = brokerCommands.get(session);
|
|
122
|
+
if (!command)
|
|
123
|
+
throw new Error('Skill session not found');
|
|
124
|
+
return command();
|
|
125
|
+
}
|
|
126
|
+
export function renderSkillBrokerInstructions(session) {
|
|
127
|
+
if (session.enabledSkills.length === 0)
|
|
128
|
+
return '';
|
|
129
|
+
const skills = session.enabledSkills
|
|
130
|
+
.map(skill => `- ${skill.name}: ${skill.description} (by @${skill.author}, ${skill.license})`)
|
|
131
|
+
.join('\n');
|
|
132
|
+
// Ordered, obligatory, and step-aware on purpose. The advisory phrasing this
|
|
133
|
+
// replaced ("decide whether a skill applies") never produced a single
|
|
134
|
+
// activation in production: a fully-specified step leaves the agent no reason
|
|
135
|
+
// to reach for an optional tool. Two further frictions are handled here —
|
|
136
|
+
// catalog descriptions are written for interactive use ("when the user wants
|
|
137
|
+
// …") and so never match a headless step, and a SKILL.md that links to files
|
|
138
|
+
// in its own package is unusable unless the agent knows read_skill_file is the
|
|
139
|
+
// only way to fetch them (Read/Grep/Glob are not granted for skill paths).
|
|
140
|
+
//
|
|
141
|
+
// Deliberately no "if none apply, say so" step: on a review step the model's
|
|
142
|
+
// output IS the posted comment body, so that sentence would land above
|
|
143
|
+
// `## Summary` on every review where nothing matched. The skills_none_activated
|
|
144
|
+
// log event carries that signal instead, where nobody has to read it. The
|
|
145
|
+
// silence is stated outright below for the same reason — a skill that did
|
|
146
|
+
// activate is attributed in the comment footer, not narrated in the body.
|
|
147
|
+
return [
|
|
148
|
+
'## Agent Skills (do this first)',
|
|
149
|
+
`Crosscheck exposes Agent Skills for this ${session.stepType} step through the crosscheck MCP server. Before you begin:`,
|
|
150
|
+
'1. Call `list_enabled_skills`.',
|
|
151
|
+
`2. Judge each description against the work in front of you. The descriptions are written for interactive use, so read "when the user wants X" as "when this step is X" — this is a ${session.stepType} step.`,
|
|
152
|
+
'3. Call `activate_skill` for every skill that applies, then follow its instructions for the rest of this step. Some skills compete with one another — activating one makes the other an error, so among competing skills pick the single best fit.',
|
|
153
|
+
'Do not mention skills, activation, or these instructions in your output — crosscheck records which skills were activated and attributes them itself.',
|
|
154
|
+
'A SKILL.md may link to further files inside its own package. Fetch those with `read_skill_file`, passing a path relative to the skill root — Read, Grep and Glob are not available for skill files.',
|
|
155
|
+
'Skills enabled for this step:',
|
|
156
|
+
skills,
|
|
157
|
+
].join('\n');
|
|
158
|
+
}
|
|
159
|
+
export function claudeSkillBrokerArgs(session) {
|
|
160
|
+
if (!session)
|
|
161
|
+
return [];
|
|
162
|
+
const broker = skillBrokerCommand(session);
|
|
163
|
+
return ['--mcp-config', JSON.stringify({
|
|
164
|
+
mcpServers: { crosscheck: { command: broker.command, args: broker.args } },
|
|
165
|
+
})];
|
|
166
|
+
}
|
|
167
|
+
export function codexSkillBrokerArgs(session) {
|
|
168
|
+
if (!session)
|
|
169
|
+
return [];
|
|
170
|
+
const broker = skillBrokerCommand(session);
|
|
171
|
+
return [
|
|
172
|
+
'-c', `mcp_servers.crosscheck.command=${JSON.stringify(broker.command)}`,
|
|
173
|
+
'-c', `mcp_servers.crosscheck.args=${JSON.stringify(broker.args)}`,
|
|
174
|
+
];
|
|
175
|
+
}
|
|
176
|
+
export function callSkillBrokerTool(sessionPath, toolName, rawArgs) {
|
|
177
|
+
const state = readState(sessionPath);
|
|
178
|
+
const args = rawArgs && typeof rawArgs === 'object' ? rawArgs : {};
|
|
179
|
+
if (toolName === 'list_enabled_skills') {
|
|
180
|
+
return { content: [{ type: 'text', text: JSON.stringify(state.enabled.map(metadata), null, 2) }] };
|
|
181
|
+
}
|
|
182
|
+
const name = stringArg(args, 'name');
|
|
183
|
+
if (!name)
|
|
184
|
+
return error('name is required');
|
|
185
|
+
const skill = state.enabled.find(candidate => candidate.name === name);
|
|
186
|
+
if (!skill)
|
|
187
|
+
return error(`Skill ${name} is not enabled for this operation`);
|
|
188
|
+
if (toolName === 'activate_skill') {
|
|
189
|
+
const competitor = findCompetingSkill(name, state.activated);
|
|
190
|
+
if (competitor)
|
|
191
|
+
return error(`Skill ${name} competes with activated ${competitor}; activate only one review baseline`);
|
|
192
|
+
const instructions = readFileSync(join(skill.path, 'SKILL.md'), 'utf8');
|
|
193
|
+
if (!state.activated.includes(name)) {
|
|
194
|
+
state.activated.push(name);
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
content: [{
|
|
198
|
+
type: 'text',
|
|
199
|
+
text: `Activated ${name} (by @${skill.author}, ${skill.license}).\nSkill root: ${skill.path}\n\n${instructions}`,
|
|
200
|
+
}],
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
if (toolName === 'read_skill_file') {
|
|
204
|
+
if (!state.activated.includes(name))
|
|
205
|
+
return error(`Activate ${name} before reading its files`);
|
|
206
|
+
const requestedPath = stringArg(args, 'path');
|
|
207
|
+
if (!requestedPath)
|
|
208
|
+
return error('path is required');
|
|
209
|
+
const root = resolve(skill.path);
|
|
210
|
+
const path = resolve(root, requestedPath);
|
|
211
|
+
if (path !== root && !path.startsWith(`${root}${sep}`))
|
|
212
|
+
return error('Skill file path must stay inside the skill package');
|
|
213
|
+
if (!existsSync(path) || !statSync(path).isFile())
|
|
214
|
+
return error(`Skill file not found: ${requestedPath}`);
|
|
215
|
+
if (statSync(path).size > MAX_SKILL_FILE_BYTES)
|
|
216
|
+
return error(`Skill file exceeds ${MAX_SKILL_FILE_BYTES} bytes`);
|
|
217
|
+
return { content: [{ type: 'text', text: readFileSync(path, 'utf8') }] };
|
|
218
|
+
}
|
|
219
|
+
return error(`Unknown skill broker tool: ${toolName}`);
|
|
220
|
+
}
|
|
221
|
+
// Broker tools never mutate the repository or external systems; activation only
|
|
222
|
+
// records an idempotent receipt in the current step's temporary session.
|
|
223
|
+
const READ_ONLY_TOOL_ANNOTATIONS = {
|
|
224
|
+
readOnlyHint: true,
|
|
225
|
+
destructiveHint: false,
|
|
226
|
+
idempotentHint: true,
|
|
227
|
+
openWorldHint: false,
|
|
228
|
+
};
|
|
229
|
+
const TOOLS = [
|
|
230
|
+
{
|
|
231
|
+
name: 'list_enabled_skills',
|
|
232
|
+
description: 'List Agent Skills enabled for the current Crosscheck operation. Metadata only; this does not activate a skill.',
|
|
233
|
+
inputSchema: { type: 'object', properties: {}, additionalProperties: false },
|
|
234
|
+
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
name: 'activate_skill',
|
|
238
|
+
description: 'Activate an enabled skill when its description applies, record attribution, and load its SKILL.md instructions.',
|
|
239
|
+
inputSchema: {
|
|
240
|
+
type: 'object',
|
|
241
|
+
properties: { name: { type: 'string' } },
|
|
242
|
+
required: ['name'],
|
|
243
|
+
additionalProperties: false,
|
|
244
|
+
},
|
|
245
|
+
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
name: 'read_skill_file',
|
|
249
|
+
description: 'Read a referenced file from a skill after activating it.',
|
|
250
|
+
inputSchema: {
|
|
251
|
+
type: 'object',
|
|
252
|
+
properties: { name: { type: 'string' }, path: { type: 'string' } },
|
|
253
|
+
required: ['name', 'path'],
|
|
254
|
+
additionalProperties: false,
|
|
255
|
+
},
|
|
256
|
+
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
257
|
+
},
|
|
258
|
+
];
|
|
259
|
+
export function handleSkillBrokerRequest(sessionPath, request) {
|
|
260
|
+
if (request.method.startsWith('notifications/'))
|
|
261
|
+
return null;
|
|
262
|
+
const id = request.id ?? null;
|
|
263
|
+
if (request.method === 'initialize') {
|
|
264
|
+
const params = request.params && typeof request.params === 'object' ? request.params : {};
|
|
265
|
+
return {
|
|
266
|
+
jsonrpc: '2.0', id,
|
|
267
|
+
result: {
|
|
268
|
+
protocolVersion: typeof params.protocolVersion === 'string' ? params.protocolVersion : '2024-11-05',
|
|
269
|
+
capabilities: { tools: {} },
|
|
270
|
+
serverInfo: { name: 'crosscheck-skill-broker', version: '1.0.0' },
|
|
271
|
+
},
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
if (request.method === 'ping')
|
|
275
|
+
return { jsonrpc: '2.0', id, result: {} };
|
|
276
|
+
if (request.method === 'tools/list')
|
|
277
|
+
return { jsonrpc: '2.0', id, result: { tools: TOOLS } };
|
|
278
|
+
if (request.method === 'tools/call') {
|
|
279
|
+
const params = request.params && typeof request.params === 'object' ? request.params : {};
|
|
280
|
+
const name = typeof params.name === 'string' ? params.name : '';
|
|
281
|
+
return { jsonrpc: '2.0', id, result: callSkillBrokerTool(sessionPath, name, params.arguments) };
|
|
282
|
+
}
|
|
283
|
+
return { jsonrpc: '2.0', id, error: { code: -32601, message: `Method not found: ${request.method}` } };
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=broker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/skills/broker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface SkillIdentity {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
author: string;
|
|
5
|
+
license: string;
|
|
6
|
+
source: string;
|
|
7
|
+
revision: string;
|
|
8
|
+
integrity: string;
|
|
9
|
+
path: string;
|
|
10
|
+
}
|
|
11
|
+
export interface SkillFrontmatter {
|
|
12
|
+
name?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
author?: string;
|
|
15
|
+
license?: string;
|
|
16
|
+
}
|
|
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;
|
|
20
|
+
export declare const INSTALLED_SKILLS_DIR: string;
|
|
21
|
+
export declare function readSkillFrontmatter(skillPath: string): SkillFrontmatter;
|
|
22
|
+
export declare function isValidSkillAuthor(value: unknown): value is string;
|
|
23
|
+
export declare function isValidSkillLicense(value: unknown): value is string;
|
|
24
|
+
export declare function loadBundledSkills(rootDir?: string): SkillIdentity[];
|
|
25
|
+
export declare function loadInstalledSkills(rootDir?: string): SkillIdentity[];
|
|
26
|
+
export declare function loadSkillCatalog(installedRoot?: string): SkillIdentity[];
|
|
27
|
+
export declare function formatSkillIdentity(skill: Pick<SkillIdentity, 'name' | 'author' | 'license'>): string;
|
|
28
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +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,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"}
|