@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/claude.js
CHANGED
|
@@ -3,12 +3,21 @@ import { DEFAULT_REVIEW_INSTRUCTIONS } from '../lib/workflow.js';
|
|
|
3
3
|
import { primaryModelFromUsage, resolveClaudeModel } from '../lib/review-models.js';
|
|
4
4
|
import { withTimeoutRetry } from '../lib/with-timeout-retry.js';
|
|
5
5
|
import { tierTimeoutMs } from './tier-timeouts.js';
|
|
6
|
+
import { claudeSkillBrokerArgs, renderSkillBrokerInstructions } from '../skills/broker.js';
|
|
7
|
+
import { loadRepositoryReviewGuidance } from '../lib/repository-guidance.js';
|
|
6
8
|
const EFFORT_MAP = {
|
|
7
9
|
low: 'low',
|
|
8
10
|
medium: 'medium',
|
|
9
11
|
high: 'high',
|
|
10
12
|
max: 'max',
|
|
11
13
|
};
|
|
14
|
+
// Whitelist rather than translation — anything outside the schema's vocabulary
|
|
15
|
+
// falls back to medium instead of reaching the CLI as an arbitrary string.
|
|
16
|
+
// Shared with the fix and conflict-resolve steps so every Claude call in a run
|
|
17
|
+
// uses the same effort, and the comment can report it.
|
|
18
|
+
export function claudeEffort(effort) {
|
|
19
|
+
return (effort && EFFORT_MAP[effort]) ?? 'medium';
|
|
20
|
+
}
|
|
12
21
|
// Detect transient Claude API errors that should be retried:
|
|
13
22
|
// - 429 session limit: "You've hit your session limit"
|
|
14
23
|
// - Socket disconnect: "socket connection was closed unexpectedly"
|
|
@@ -26,22 +35,33 @@ export async function runClaudeReview(repoDir, baseBranch, prTitle, quality, ven
|
|
|
26
35
|
onRetry,
|
|
27
36
|
// Linked tracker issue rendered as a prompt block (issues/enrich.ts) — anchors
|
|
28
37
|
// the review to the stated goal. Omitted when enrichment is off / unresolved.
|
|
29
|
-
issueContext) {
|
|
38
|
+
issueContext, skillSession) {
|
|
30
39
|
const model = resolveClaudeModel(quality, vendor);
|
|
31
|
-
const effort =
|
|
40
|
+
const effort = claudeEffort(vendor.effort);
|
|
32
41
|
const focusLine = quality.focus.length > 0
|
|
33
42
|
? `Focus areas: ${quality.focus.join(', ')}.`
|
|
34
43
|
: '';
|
|
35
44
|
const customLine = quality.custom_prompt ?? '';
|
|
36
45
|
const behaviorInstructions = stepInstructions ?? DEFAULT_REVIEW_INSTRUCTIONS;
|
|
46
|
+
const repositoryGuidance = loadRepositoryReviewGuidance(repoDir, baseBranch);
|
|
37
47
|
const prompt = [
|
|
38
48
|
`You are reviewing a pull request titled: "${prTitle}".`,
|
|
39
49
|
`The branch \`${baseBranch}\` is the base. Review only the changes introduced in this PR.`,
|
|
40
50
|
issueContext ?? '',
|
|
41
51
|
focusLine,
|
|
42
52
|
customLine,
|
|
53
|
+
// Ahead of behaviorInstructions: that block ends with "the very last line of
|
|
54
|
+
// your response MUST be VERDICT: …", and activation has to happen before the
|
|
55
|
+
// review starts, so arriving after that terminal instruction buries it.
|
|
56
|
+
// repositoryGuidance stays where it is — reference material to consult while
|
|
57
|
+
// reviewing, not an action to take first.
|
|
58
|
+
skillSession ? renderSkillBrokerInstructions(skillSession) : '',
|
|
43
59
|
behaviorInstructions,
|
|
44
|
-
|
|
60
|
+
repositoryGuidance,
|
|
61
|
+
// Blank line between blocks (codex.ts already does this): the skill block
|
|
62
|
+
// ends in a bullet list, which would otherwise run straight into
|
|
63
|
+
// behaviorInstructions' first heading with no separator.
|
|
64
|
+
].filter(Boolean).join('\n\n');
|
|
45
65
|
// Omit --max-budget-usd when:
|
|
46
66
|
// 1. No ANTHROPIC_API_KEY → subscription mode (claude.ai plan, budget limits don't apply)
|
|
47
67
|
// 2. noBudgetCap → crazy/halfcrazy mode (explicitly uncapped run; NOT set by --no-timeout alone)
|
|
@@ -52,7 +72,14 @@ issueContext) {
|
|
|
52
72
|
'--model', model,
|
|
53
73
|
'--effort', effort,
|
|
54
74
|
...(applyBudgetCap ? ['--max-budget-usd', String(perReviewBudget)] : []),
|
|
55
|
-
'--allowedTools',
|
|
75
|
+
'--allowedTools', [
|
|
76
|
+
'Bash(git diff)', 'Bash(git log)',
|
|
77
|
+
...(skillSession ? [
|
|
78
|
+
'mcp__crosscheck__list_enabled_skills',
|
|
79
|
+
'mcp__crosscheck__activate_skill',
|
|
80
|
+
'mcp__crosscheck__read_skill_file',
|
|
81
|
+
] : []),
|
|
82
|
+
].join(','),
|
|
56
83
|
];
|
|
57
84
|
onLog?.(` running: claude --print --model ${model} --effort ${effort}`);
|
|
58
85
|
// timeoutMs: 0 → no cap (crazy/halfcrazy); undefined → tier-based default (300/600/1200s); positive → user-specified
|
|
@@ -61,7 +88,12 @@ issueContext) {
|
|
|
61
88
|
let lastErr = undefined;
|
|
62
89
|
for (let attempt = 1; attempt <= MAX_CLAUDE_RETRIES; attempt++) {
|
|
63
90
|
try {
|
|
64
|
-
const { result: { stdout }, retried } = await withTimeoutRetry(resolvedTimeout, (t) => execa('claude', args,
|
|
91
|
+
const { result: { stdout }, retried } = await withTimeoutRetry(resolvedTimeout, (t) => execa('claude', [...args, ...claudeSkillBrokerArgs(skillSession)], {
|
|
92
|
+
cwd: repoDir,
|
|
93
|
+
timeout: t,
|
|
94
|
+
input: prompt,
|
|
95
|
+
env: { ...process.env, CLAUDE_CODE_DISABLE_CLAUDE_MDS: '1' },
|
|
96
|
+
}), {
|
|
65
97
|
onRetry: (effectiveMs, delayMs) => (onRetry ?? onLog)?.(` ⏱ claude timed out at ${effectiveMs / 1000}s — waiting ${delayMs / 1000}s and retrying once`),
|
|
66
98
|
});
|
|
67
99
|
const raw = stdout.trim();
|
|
@@ -75,10 +107,10 @@ issueContext) {
|
|
|
75
107
|
// string: `model` may be an alias ("opus") and the CLI resolves or
|
|
76
108
|
// substitutes it. Fall back to the requested value when absent.
|
|
77
109
|
const actualModel = primaryModelFromUsage(parsed.modelUsage);
|
|
78
|
-
return { review, tokensUsed, inputTokens, outputTokens, model: actualModel ?? model, retried };
|
|
110
|
+
return { review, tokensUsed, inputTokens, outputTokens, model: actualModel ?? model, effort, retried };
|
|
79
111
|
}
|
|
80
112
|
catch {
|
|
81
|
-
return { review: raw, model, retried };
|
|
113
|
+
return { review: raw, model, effort, retried };
|
|
82
114
|
}
|
|
83
115
|
}
|
|
84
116
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/reviewers/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAE7B,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/reviewers/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { QualityConfig, CodexVendorConfig } from '../config/schema.js';
|
|
2
2
|
import type { ReviewResult } from './claude.js';
|
|
3
|
+
import { type SkillActivationSession } from '../skills/broker.js';
|
|
3
4
|
export declare function inferVerdictFromCodexOutput(text: string): string;
|
|
4
5
|
export declare function stripRepoDirPaths(text: string, repoDir: string): string;
|
|
5
|
-
export declare function
|
|
6
|
+
export declare function codexReasoningEffort(effort: string): string;
|
|
7
|
+
export declare function runCodexReview(repoDir: string, baseBranch: string, prTitle: string, quality: QualityConfig, vendor: CodexVendorConfig, stepInstructions?: string, onLog?: (msg: string) => void, timeoutMs?: number, onRetry?: (msg: string) => void, issueContext?: string, skillSession?: SkillActivationSession): Promise<ReviewResult>;
|
|
6
8
|
export declare function checkCodexAuth(): Promise<{
|
|
7
9
|
ok: boolean;
|
|
8
10
|
detail: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/reviewers/codex.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/reviewers/codex.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAG3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG/C,OAAO,EAAuD,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAMtH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIhE;AAMD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAWvE;AAeD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE3D;AA2BD,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,iBAAiB,EACzB,gBAAgB,CAAC,EAAE,MAAM,EACzB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC7B,SAAS,CAAC,EAAE,MAAM,EAIlB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAG/B,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,sBAAsB,GACpC,OAAO,CAAC,YAAY,CAAC,CAuGvB;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ/E"}
|
package/dist/reviewers/codex.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
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';
|
|
7
8
|
import { withTimeoutRetry } from '../lib/with-timeout-retry.js';
|
|
8
9
|
import { tierTimeoutMs } from './tier-timeouts.js';
|
|
10
|
+
import { codexSkillBrokerArgs, renderSkillBrokerInstructions } from '../skills/broker.js';
|
|
11
|
+
import { loadRepositoryReviewGuidance } from '../lib/repository-guidance.js';
|
|
9
12
|
// Codex review command outputs [P0]/[P1]/[P2]/[P3] priority markers but never a VERDICT line.
|
|
10
13
|
// Infer the verdict from the highest severity present and append it so parseVerdict() can
|
|
11
14
|
// extract it. Only called when the output doesn't already contain a VERDICT: token.
|
|
@@ -35,6 +38,21 @@ export function stripRepoDirPaths(text, repoDir) {
|
|
|
35
38
|
}
|
|
36
39
|
return out;
|
|
37
40
|
}
|
|
41
|
+
// vendors.codex.effort matches the codex CLI's model_reasoning_effort values
|
|
42
|
+
// 1:1 (low/medium/high/xhigh/max/ultra), so this is a whitelist rather than a
|
|
43
|
+
// translation — anything outside it falls back to medium instead of reaching
|
|
44
|
+
// the CLI as an arbitrary string.
|
|
45
|
+
const REASONING_EFFORT_MAP = {
|
|
46
|
+
low: 'low',
|
|
47
|
+
medium: 'medium',
|
|
48
|
+
high: 'high',
|
|
49
|
+
xhigh: 'xhigh',
|
|
50
|
+
max: 'max',
|
|
51
|
+
ultra: 'ultra',
|
|
52
|
+
};
|
|
53
|
+
export function codexReasoningEffort(effort) {
|
|
54
|
+
return REASONING_EFFORT_MAP[effort] ?? 'medium';
|
|
55
|
+
}
|
|
38
56
|
// Detect transient Codex API errors that should be retried (socket disconnects, rate limits)
|
|
39
57
|
function isRetryableCodexError(message) {
|
|
40
58
|
return /socket.*closed|429|rate limit|connection.*reset|econnreset/i.test(message);
|
|
@@ -63,38 +81,40 @@ export async function runCodexReview(repoDir, baseBranch, prTitle, quality, vend
|
|
|
63
81
|
onRetry,
|
|
64
82
|
// Linked tracker issue rendered as a prompt block (issues/enrich.ts) — anchors
|
|
65
83
|
// the review to the stated goal. Omitted when enrichment is off / unresolved.
|
|
66
|
-
issueContext) {
|
|
84
|
+
issueContext, skillSession) {
|
|
67
85
|
const model = resolveCodexModel(quality, vendor);
|
|
68
|
-
const tmpFile = join(mkdtempSync(join(tmpdir(), 'crosscheck-')), 'review.md');
|
|
69
86
|
const tierTimeout = tierTimeoutMs(quality.tier);
|
|
70
87
|
// timeoutMs: 0 → no cap (crazy/halfcrazy); undefined → tier-based default; positive → user-specified
|
|
71
88
|
const resolvedTimeout = timeoutMs === undefined ? tierTimeout : timeoutMs === 0 ? undefined : timeoutMs;
|
|
72
|
-
// --base and [PROMPT] are mutually exclusive in codex review
|
|
73
|
-
//
|
|
89
|
+
// --base and [PROMPT] are mutually exclusive in codex review, so deliver
|
|
90
|
+
// Crosscheck's trusted guidance through a temporary Codex profile.
|
|
74
91
|
const focusNote = quality.focus.length > 0
|
|
75
92
|
? `Focus areas: ${quality.focus.join(', ')}. `
|
|
76
93
|
: '';
|
|
77
94
|
const customNote = quality.custom_prompt ?? '';
|
|
78
95
|
const behaviorInstructions = stepInstructions ?? DEFAULT_REVIEW_INSTRUCTIONS;
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
mkdirSync(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
96
|
+
const repositoryGuidance = loadRepositoryReviewGuidance(repoDir, baseBranch);
|
|
97
|
+
// Skill block ahead of behaviorInstructions — see the note in claude.ts: the
|
|
98
|
+
// behaviour block ends on the verdict rule, so a trailing skill section reads
|
|
99
|
+
// as boilerplate past the end of the prompt. repositoryGuidance stays after
|
|
100
|
+
// it: reference material read during the review, not a first step.
|
|
101
|
+
const instructionsNote = [issueContext ?? '', focusNote, customNote, skillSession ? renderSkillBrokerInstructions(skillSession) : '', behaviorInstructions, repositoryGuidance].filter(Boolean).join('\n\n');
|
|
102
|
+
const codexHome = process.env.CODEX_HOME ?? join(homedir(), '.codex');
|
|
103
|
+
const profileName = `crosscheck-${randomUUID()}`;
|
|
104
|
+
const profilePath = join(codexHome, `${profileName}.config.toml`);
|
|
105
|
+
mkdirSync(codexHome, { recursive: true });
|
|
106
|
+
// Retry loop for transient Codex API errors (socket disconnects, rate limits)
|
|
107
|
+
let lastErr = undefined;
|
|
108
|
+
for (let attempt = 1; attempt <= MAX_CODEX_RETRIES; attempt++) {
|
|
109
|
+
try {
|
|
110
|
+
const modelArgs = model !== 'default' ? ['-c', `model="${model}"`] : [];
|
|
111
|
+
const skillArgs = codexSkillBrokerArgs(skillSession);
|
|
112
|
+
const reasoningEffort = codexReasoningEffort(vendor.effort);
|
|
113
|
+
const effortArgs = ['-c', `model_reasoning_effort="${reasoningEffort}"`];
|
|
114
|
+
onLog?.(` running: codex review --base ${baseBranch}${model !== 'default' ? ` -c model="${model}"` : ''} -c model_reasoning_effort="${reasoningEffort}"`);
|
|
115
|
+
writeFileSync(profilePath, `developer_instructions = ${JSON.stringify(instructionsNote)}\n`, { mode: 0o600 });
|
|
94
116
|
try {
|
|
95
|
-
const
|
|
96
|
-
onLog?.(` running: codex review --base ${baseBranch}${model !== 'default' ? ` -c model="${model}"` : ''}`);
|
|
97
|
-
const { result, retried } = await withTimeoutRetry(resolvedTimeout, (t) => execa('codex', ['review', '--base', baseBranch, '--title', prTitle, ...modelArgs], {
|
|
117
|
+
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], {
|
|
98
118
|
cwd: repoDir,
|
|
99
119
|
timeout: t,
|
|
100
120
|
env: {
|
|
@@ -113,58 +133,44 @@ issueContext) {
|
|
|
113
133
|
const review = rawReview.includes('VERDICT:')
|
|
114
134
|
? rawReview
|
|
115
135
|
: `${rawReview}\n\nVERDICT: ${inferVerdictFromCodexOutput(rawReview)}`;
|
|
116
|
-
return { review, tokensUsed, model, retried };
|
|
136
|
+
return { review, tokensUsed, model, effort: reasoningEffort, retried };
|
|
117
137
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
const rawStderr = execa.stderr ?? '';
|
|
121
|
-
const fullMessage = rawStderr || execa.message || '';
|
|
122
|
-
// Check if this is a retryable error
|
|
123
|
-
if (isRetryableCodexError(fullMessage) && attempt < MAX_CODEX_RETRIES) {
|
|
124
|
-
const delay = CODEX_RETRY_DELAY_MS * attempt; // 5s, 10s
|
|
125
|
-
onLog?.(` codex: transient error (${fullMessage.slice(0, 80)}), retrying in ${delay / 1000}s (attempt ${attempt}/${MAX_CODEX_RETRIES})...`);
|
|
126
|
-
await new Promise(resolve => setTimeout(resolve, delay));
|
|
127
|
-
lastErr = err;
|
|
128
|
-
continue;
|
|
129
|
-
}
|
|
130
|
-
// Non-retryable error or final attempt — format and throw
|
|
131
|
-
const effectiveMs = execa.effectiveTimeoutMs ?? resolvedTimeout;
|
|
132
|
-
const retryNote = execa.retryDelayMs !== undefined ? ' (retried once)' : '';
|
|
133
|
-
const summary = execa.timedOut
|
|
134
|
-
? `timed out after ${effectiveMs !== undefined ? effectiveMs / 1000 : '?'}s${retryNote} — PR diff may be too large (tier: ${quality.tier})`
|
|
135
|
-
: (extractErrorSummary(rawStderr) ?? execa.message ?? 'unknown error');
|
|
136
|
-
const thrown = Object.assign(new Error(`codex: ${summary}`), {
|
|
137
|
-
exitCode: execa.exitCode,
|
|
138
|
-
timedOut: execa.timedOut,
|
|
139
|
-
stderr: rawStderr,
|
|
140
|
-
effectiveTimeoutMs: effectiveMs,
|
|
141
|
-
retryDelayMs: execa.retryDelayMs,
|
|
142
|
-
});
|
|
143
|
-
throw thrown;
|
|
138
|
+
finally {
|
|
139
|
+
rmSync(profilePath, { force: true });
|
|
144
140
|
}
|
|
145
141
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
rmSync(instructionsPath, { force: true });
|
|
142
|
+
catch (err) {
|
|
143
|
+
const execa = err;
|
|
144
|
+
const rawStderr = execa.stderr ?? '';
|
|
145
|
+
const fullMessage = rawStderr || execa.message || '';
|
|
146
|
+
// Check if this is a retryable error
|
|
147
|
+
if (isRetryableCodexError(fullMessage) && attempt < MAX_CODEX_RETRIES) {
|
|
148
|
+
const delay = CODEX_RETRY_DELAY_MS * attempt; // 5s, 10s
|
|
149
|
+
onLog?.(` codex: transient error (${fullMessage.slice(0, 80)}), retrying in ${delay / 1000}s (attempt ${attempt}/${MAX_CODEX_RETRIES})...`);
|
|
150
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
151
|
+
lastErr = err;
|
|
152
|
+
continue;
|
|
160
153
|
}
|
|
154
|
+
// Non-retryable error or final attempt — format and throw
|
|
155
|
+
const effectiveMs = execa.effectiveTimeoutMs ?? resolvedTimeout;
|
|
156
|
+
const retryNote = execa.retryDelayMs !== undefined ? ' (retried once)' : '';
|
|
157
|
+
const summary = execa.timedOut
|
|
158
|
+
? `timed out after ${effectiveMs !== undefined ? effectiveMs / 1000 : '?'}s${retryNote} — PR diff may be too large (tier: ${quality.tier})`
|
|
159
|
+
: (extractErrorSummary(rawStderr) ?? execa.message ?? 'unknown error');
|
|
160
|
+
const thrown = Object.assign(new Error(`codex: ${summary}`), {
|
|
161
|
+
exitCode: execa.exitCode,
|
|
162
|
+
timedOut: execa.timedOut,
|
|
163
|
+
stderr: rawStderr,
|
|
164
|
+
effectiveTimeoutMs: effectiveMs,
|
|
165
|
+
retryDelayMs: execa.retryDelayMs,
|
|
166
|
+
});
|
|
167
|
+
throw thrown;
|
|
161
168
|
}
|
|
162
|
-
catch { /* ignore */ }
|
|
163
|
-
try {
|
|
164
|
-
rmSync(tmpFile, { force: true, recursive: true });
|
|
165
|
-
}
|
|
166
|
-
catch { /* ignore */ }
|
|
167
169
|
}
|
|
170
|
+
// Should not reach here, but handle the case where all retries were consumed
|
|
171
|
+
if (lastErr)
|
|
172
|
+
throw lastErr;
|
|
173
|
+
throw new Error('codex: unexpected retry loop exit');
|
|
168
174
|
}
|
|
169
175
|
export async function checkCodexAuth() {
|
|
170
176
|
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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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { type SkillActivationSession } from '../skills/broker.js';
|
|
1
2
|
export declare const PROMPT_TEMPLATE = "This pull request has merge conflicts. Resolve all conflict markers in the files listed below.\n\nPR title: {PR_TITLE}\n\nConflicted files:\n{CONFLICTED_FILES}\n\n{EXTRA_INSTRUCTIONS}\n\nContext: the PR's branch is checked out as HEAD, and the base branch was merged into it. That means the `<<<<<<< HEAD` side is the PR author's intended changes and the `>>>>>>>` side is the base branch. Default to preserving the PR author's intent.\n\nRules for resolving each conflict:\n- Keep ALL meaningful changes from both sides if they are not directly contradictory\n- When both sides modify the same line, prefer the PR author's changes (the `<<<<<<< HEAD` side) over the base branch (the `>>>>>>>` side), unless the PR side clearly breaks existing logic on the base\n- Remove ALL conflict markers: <<<<<<<, =======, >>>>>>>\n\nFor each file, output ONLY the resolved conflict regions using this format:\n\n<edit path=\"relative/path/to/file.ext\">\n<old>\nexact conflict region including all markers (copy verbatim from the file)\n</old>\n<new>\nresolved content with no conflict markers\n</new>\n</edit>\n\nRules for <edit> blocks:\n- <old> must match the file content EXACTLY, including conflict markers and surrounding lines\n- <new> must not contain ANY conflict markers\n- Include 2\u20133 context lines around the conflict region to make the match unambiguous\n- One block per conflict region; multiple blocks per file are fine\n- Output ONLY <edit> blocks. No other text.";
|
|
2
3
|
export declare function findConflictedFiles(tmpDir: string): string[];
|
|
3
4
|
export declare function extractConflictWindows(content: string): string;
|
|
4
|
-
export declare function runConflictResolveStep(tmpDir: string, prTitle: string, instructions: string, model?: string, timeoutMs?: number): Promise<{
|
|
5
|
+
export declare function runConflictResolveStep(tmpDir: string, prTitle: string, instructions: string, model?: string, timeoutMs?: number, skillSession?: SkillActivationSession, configuredEffort?: string): Promise<{
|
|
5
6
|
appliedCount: number;
|
|
6
7
|
resolvedPaths: string[];
|
|
7
8
|
tokensUsed?: number;
|
|
9
|
+
effort: string;
|
|
8
10
|
}>;
|
|
9
11
|
export interface ResolverEdit {
|
|
10
12
|
filePath: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflict-resolve.d.ts","sourceRoot":"","sources":["../../src/reviewers/conflict-resolve.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"conflict-resolve.d.ts","sourceRoot":"","sources":["../../src/reviewers/conflict-resolve.ts"],"names":[],"mappings":"AAMA,OAAO,EAAwD,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAUvH,eAAO,MAAM,eAAe,u8CAgCgB,CAAA;AAG5C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAO5D;AAQD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAuC9D;AAkBD,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,KAAK,SAAY,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,sBAAsB,EAIrC,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAmFjG;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAOD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAqB5F"}
|
|
@@ -3,6 +3,8 @@ import { readFileSync } from 'fs';
|
|
|
3
3
|
import { join } from 'path';
|
|
4
4
|
import { execa } from 'execa';
|
|
5
5
|
import { applyEdit } from './fix.js';
|
|
6
|
+
import { claudeEffort } from './claude.js';
|
|
7
|
+
import { claudeSkillBrokerArgs, renderSkillBrokerInstructions } from '../skills/broker.js';
|
|
6
8
|
// Exported so tests can verify the prompt's side-preference guidance stays in
|
|
7
9
|
// sync with the merge direction in runner.ts (origin/<base> is merged into HEAD,
|
|
8
10
|
// so HEAD is the PR side and the `>>>>>>>` side is the base branch).
|
|
@@ -114,21 +116,34 @@ function buildConflictedFilesBlock(tmpDir, filePaths) {
|
|
|
114
116
|
}
|
|
115
117
|
}).join('\n\n');
|
|
116
118
|
}
|
|
117
|
-
export async function runConflictResolveStep(tmpDir, prTitle, instructions, model = 'default', timeoutMs
|
|
119
|
+
export async function runConflictResolveStep(tmpDir, prTitle, instructions, model = 'default', timeoutMs, skillSession,
|
|
120
|
+
// Reasoning effort from vendors.claude.effort. Was never passed here, so the
|
|
121
|
+
// resolver ran at the CLI default while review and fix honored the config;
|
|
122
|
+
// the posted card now reports this value, so it has to be the real one.
|
|
123
|
+
configuredEffort) {
|
|
124
|
+
const effort = claudeEffort(configuredEffort);
|
|
118
125
|
const conflictedFiles = findConflictedFiles(tmpDir);
|
|
119
126
|
if (conflictedFiles.length === 0)
|
|
120
|
-
return { appliedCount: 0, resolvedPaths: [] };
|
|
127
|
+
return { appliedCount: 0, resolvedPaths: [], effort };
|
|
121
128
|
const filesBlock = buildConflictedFilesBlock(tmpDir, conflictedFiles);
|
|
122
129
|
const prompt = PROMPT_TEMPLATE
|
|
123
130
|
.replace('{PR_TITLE}', prTitle)
|
|
124
131
|
.replace('{CONFLICTED_FILES}', filesBlock)
|
|
125
|
-
.replace('{EXTRA_INSTRUCTIONS}', instructions ? `Additional instructions: ${instructions}` : '');
|
|
132
|
+
.replace('{EXTRA_INSTRUCTIONS}', [instructions ? `Additional instructions: ${instructions}` : '', skillSession ? renderSkillBrokerInstructions(skillSession) : ''].filter(Boolean).join('\n\n'));
|
|
126
133
|
let output = '';
|
|
127
134
|
let tokensUsed;
|
|
128
135
|
try {
|
|
129
136
|
const modelArgs = model !== 'default' ? ['--model', model] : [];
|
|
130
137
|
const resolvedTimeout = timeoutMs === undefined ? 180_000 : timeoutMs === 0 ? undefined : timeoutMs;
|
|
131
|
-
const { stdout } = await execa('claude', [
|
|
138
|
+
const { stdout } = await execa('claude', [
|
|
139
|
+
'--print', '--output-format', 'json', ...modelArgs, '--effort', effort,
|
|
140
|
+
...claudeSkillBrokerArgs(skillSession),
|
|
141
|
+
...(skillSession ? ['--allowedTools', [
|
|
142
|
+
'mcp__crosscheck__list_enabled_skills',
|
|
143
|
+
'mcp__crosscheck__activate_skill',
|
|
144
|
+
'mcp__crosscheck__read_skill_file',
|
|
145
|
+
].join(',')] : []),
|
|
146
|
+
], {
|
|
132
147
|
input: prompt,
|
|
133
148
|
timeout: resolvedTimeout,
|
|
134
149
|
env: { ...process.env },
|
|
@@ -153,7 +168,7 @@ export async function runConflictResolveStep(tmpDir, prTitle, instructions, mode
|
|
|
153
168
|
throw err;
|
|
154
169
|
}
|
|
155
170
|
if (!output || output === 'NO_CHANGES')
|
|
156
|
-
return { appliedCount: 0, resolvedPaths: [], tokensUsed };
|
|
171
|
+
return { appliedCount: 0, resolvedPaths: [], tokensUsed, effort };
|
|
157
172
|
const fileEdits = new Map();
|
|
158
173
|
const fileCache = new Map();
|
|
159
174
|
for (const { filePath, oldText, newText } of parseResolverEdits(output, conflictedFiles)) {
|
|
@@ -187,7 +202,7 @@ export async function runConflictResolveStep(tmpDir, prTitle, instructions, mode
|
|
|
187
202
|
}
|
|
188
203
|
catch { /* skip unwritable paths */ }
|
|
189
204
|
}
|
|
190
|
-
return { appliedCount, resolvedPaths, tokensUsed };
|
|
205
|
+
return { appliedCount, resolvedPaths, tokensUsed, effort };
|
|
191
206
|
}
|
|
192
207
|
// Parses <edit path="…"><old>…</old><new>…</new></edit> blocks from resolver output.
|
|
193
208
|
// Filters out anything that escapes tmpDir (`..`, absolute paths) or targets a file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflict-resolve.js","sourceRoot":"","sources":["../../src/reviewers/conflict-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"conflict-resolve.js","sourceRoot":"","sources":["../../src/reviewers/conflict-resolve.ts"],"names":[],"mappings":"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"}
|
package/dist/reviewers/fix.d.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import type { Config } from '../config/schema.js';
|
|
2
|
+
import { type SkillActivationSession } from '../skills/broker.js';
|
|
2
3
|
export declare function applyEdit(fileContent: string, oldText: string, newText: string): string | null;
|
|
3
|
-
export declare function runFixStep(tmpDir: string, baseRef: string, prTitle: string, reviewComment: string, instructions: string, config: Config, model?: string, timeoutMs?: number): Promise<{
|
|
4
|
+
export declare function runFixStep(tmpDir: string, baseRef: string, prTitle: string, reviewComment: string, instructions: string, config: Config, model?: string, timeoutMs?: number, skillSession?: SkillActivationSession): Promise<{
|
|
4
5
|
appliedCount: number;
|
|
5
6
|
changedFiles: string[];
|
|
6
7
|
tokensUsed?: number;
|
|
8
|
+
effort: string;
|
|
7
9
|
}>;
|
|
8
|
-
export declare function runCodexFixStep(tmpDir: string, baseRef: string, prTitle: string, reviewComment: string, instructions: string, model?: string, timeoutMs?: number): Promise<{
|
|
10
|
+
export declare function runCodexFixStep(tmpDir: string, baseRef: string, prTitle: string, reviewComment: string, instructions: string, model?: string, timeoutMs?: number, skillSession?: SkillActivationSession, configuredEffort?: string): Promise<{
|
|
9
11
|
appliedCount: number;
|
|
10
12
|
changedFiles: string[];
|
|
11
13
|
tokensUsed?: number;
|
|
14
|
+
effort: string;
|
|
12
15
|
}>;
|
|
13
16
|
//# sourceMappingURL=fix.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/reviewers/fix.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/reviewers/fix.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAIjD,OAAO,EAA8E,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AA4D7I,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO9F;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,KAAK,SAAY,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,sBAAsB,GACpC,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA+IhG;AA2BD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,KAAK,SAAY,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,sBAAsB,EAIrC,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA8ChG"}
|