@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
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// `crosscheck linear-test` — exercise the whole Linear path without writing anything.
|
|
2
|
+
//
|
|
3
|
+
// Without this, the only way to find out whether Linear write-back is configured
|
|
4
|
+
// correctly is to open a PR and wait for a review. This resolves identity, looks up
|
|
5
|
+
// a real issue, and builds the exact comment body that would be posted — then prints
|
|
6
|
+
// it instead of posting. Every step reports separately, so a failure names itself.
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { loadConfig, getLinearCredentials } from '../config/loader.js';
|
|
9
|
+
import { verifyLinearIdentity } from '../linear/verify.js';
|
|
10
|
+
import { withWorker, renderIcon, renderSignature } from '../linear/identity.js';
|
|
11
|
+
import { findIssueByIdentifier } from '../linear/client.js';
|
|
12
|
+
import { buildLinearCommentBody, shouldPostToLinear } from '../linear/comment.js';
|
|
13
|
+
import { extractLinearRef } from '../linear/ref.js';
|
|
14
|
+
const DEFAULT_VERDICT = 'NEEDS_WORK';
|
|
15
|
+
// A named issue wins over anything inferred, and bypasses the team_keys gate that
|
|
16
|
+
// guards automatic matching — the user typing `ENG-42` is unambiguous in a way that
|
|
17
|
+
// finding `ENG-42` inside a branch name is not.
|
|
18
|
+
export function resolveTestRef(issueArg, pr, teamKeys) {
|
|
19
|
+
if (issueArg?.trim())
|
|
20
|
+
return { id: issueArg.trim().toUpperCase(), source: 'argument' };
|
|
21
|
+
const ref = extractLinearRef({ branch: pr.branch, title: pr.title }, teamKeys);
|
|
22
|
+
return ref ? { id: ref.id, source: ref.source } : null;
|
|
23
|
+
}
|
|
24
|
+
// Wraps on whitespace, keeping tokens intact. A token longer than the width (a URL,
|
|
25
|
+
// typically) gets its own line rather than being broken mid-token.
|
|
26
|
+
export function softWrap(line, width) {
|
|
27
|
+
if (line.length <= width)
|
|
28
|
+
return [line];
|
|
29
|
+
const out = [];
|
|
30
|
+
let current = '';
|
|
31
|
+
for (const word of line.split(' ')) {
|
|
32
|
+
if (!current) {
|
|
33
|
+
current = word;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (current.length + 1 + word.length <= width)
|
|
37
|
+
current += ` ${word}`;
|
|
38
|
+
else {
|
|
39
|
+
out.push(current);
|
|
40
|
+
current = word;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (current)
|
|
44
|
+
out.push(current);
|
|
45
|
+
return out;
|
|
46
|
+
}
|
|
47
|
+
export async function runLinearTest(issueRef, opts = {}) {
|
|
48
|
+
const config = loadConfig(opts.config);
|
|
49
|
+
console.log(chalk.bold('\ncrosscheck linear-test\n'));
|
|
50
|
+
if (!config.linear.enabled) {
|
|
51
|
+
console.error(chalk.red('✗ Linear write-back is disabled.'));
|
|
52
|
+
console.error(chalk.dim(' Set linear.enabled: true, or run crosscheck onboard.'));
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
// 1 — identity
|
|
56
|
+
const report = await verifyLinearIdentity(config.linear, getLinearCredentials(config.linear.auth));
|
|
57
|
+
if (!report.ok) {
|
|
58
|
+
console.error(chalk.red(`✗ identity ${report.error}`));
|
|
59
|
+
// A misconfiguration is exit 1; a Linear outage is exit 2, same as everywhere
|
|
60
|
+
// else. verifyLinearIdentity never throws, so classify from the message.
|
|
61
|
+
process.exit(report.error && /HTTP 5\d\d|429|mint failed/.test(report.error) ? 2 : 1);
|
|
62
|
+
}
|
|
63
|
+
const writesAs = report.attribution === 'app'
|
|
64
|
+
? `${report.actor} ${chalk.dim('(crosscheck itself)')}`
|
|
65
|
+
: `${report.attributesTo ?? 'your Linear account'} ${chalk.dim('(api key)')}`;
|
|
66
|
+
console.log(`${chalk.green('✓')} identity ${report.mode} — writes as ${writesAs}`);
|
|
67
|
+
console.log(`${chalk.green('✓')} workspace ${report.organization ?? 'unknown'}`);
|
|
68
|
+
// 2 — which issue
|
|
69
|
+
const ref = resolveTestRef(issueRef, { branch: opts.branch, title: opts.title }, config.linear.team_keys);
|
|
70
|
+
if (!ref) {
|
|
71
|
+
console.error(chalk.red('✗ issue no Linear reference found'));
|
|
72
|
+
console.error(chalk.dim(' Name one directly (crosscheck linear-test ENG-42), or pass --branch/--title.'));
|
|
73
|
+
if (config.linear.team_keys.length === 0) {
|
|
74
|
+
console.error(chalk.dim(' linear.team_keys is empty, so only full linear.app URLs resolve.'));
|
|
75
|
+
}
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
console.log(`${chalk.green('✓')} reference ${ref.id} ${chalk.dim(`(via ${ref.source})`)}`);
|
|
79
|
+
// 3 — does it exist. Reuses the identity the probe already resolved: minting a
|
|
80
|
+
// second token here broke the one-token-per-run contract, and a transient
|
|
81
|
+
// failure on that second mint could fail a dry run whose verification passed.
|
|
82
|
+
const auth = report.auth;
|
|
83
|
+
const issue = await findIssueByIdentifier(auth, ref.id);
|
|
84
|
+
if (!issue) {
|
|
85
|
+
console.error(chalk.red(`✗ lookup ${ref.id} not found in ${report.organization ?? 'this workspace'}`));
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
console.log(`${chalk.green('✓')} lookup ${issue.url}`);
|
|
89
|
+
// 4 — would this verdict post at all
|
|
90
|
+
const verdict = opts.verdict ?? DEFAULT_VERDICT;
|
|
91
|
+
const posts = shouldPostToLinear(verdict, config.linear.comment_on);
|
|
92
|
+
const filterNote = posts
|
|
93
|
+
? `${chalk.green('✓')} filter ${verdict} is in comment_on`
|
|
94
|
+
: `${chalk.yellow('!')} filter ${verdict} is NOT in comment_on ${chalk.dim(`(${config.linear.comment_on.join(', ')})`)} — a real run would skip`;
|
|
95
|
+
console.log(filterNote);
|
|
96
|
+
// 5 — the body itself
|
|
97
|
+
const scoped = config.linear.identity.per_step_actor ? withWorker(auth, 'review') : auth;
|
|
98
|
+
const signature = renderSignature(scoped.signatureTemplate, {
|
|
99
|
+
actor: scoped.actor,
|
|
100
|
+
product: scoped.product,
|
|
101
|
+
model: 'gpt-5.6-terra',
|
|
102
|
+
reviewer: 'codex',
|
|
103
|
+
icon: renderIcon(config.linear.identity.icon_url),
|
|
104
|
+
});
|
|
105
|
+
const body = buildLinearCommentBody({
|
|
106
|
+
signature,
|
|
107
|
+
verdict,
|
|
108
|
+
reviewer: 'codex',
|
|
109
|
+
origin: 'claude',
|
|
110
|
+
model: 'gpt-5.6-terra',
|
|
111
|
+
prUrl: 'https://github.com/acme/app/pull/42',
|
|
112
|
+
prTitle: 'example: a sample PR',
|
|
113
|
+
sha: 'abc1234',
|
|
114
|
+
summary: 'Example summary — a real run puts the review text here.',
|
|
115
|
+
service: config.brand.service_name,
|
|
116
|
+
});
|
|
117
|
+
// The annotation line runs past 140 chars, so soft-wrap rather than let the
|
|
118
|
+
// terminal hard-wrap it mid-token at whatever width the window happens to be.
|
|
119
|
+
const WRAP = 80;
|
|
120
|
+
console.log(chalk.dim('\n ── comment that would be posted ' + '─'.repeat(44)));
|
|
121
|
+
console.log();
|
|
122
|
+
for (const line of body.split('\n')) {
|
|
123
|
+
for (const chunk of softWrap(line, WRAP))
|
|
124
|
+
console.log(` ${chunk}`);
|
|
125
|
+
}
|
|
126
|
+
console.log();
|
|
127
|
+
console.log(chalk.dim(' ' + '─'.repeat(76)));
|
|
128
|
+
console.log(chalk.green('\n✓ Nothing was posted — this was a dry run.\n'));
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=linear-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear-test.js","sourceRoot":"","sources":["../../src/commands/linear-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ type VendorModeConfig = {
|
|
|
13
13
|
};
|
|
14
14
|
declare const QUALITY_TIERS: {
|
|
15
15
|
readonly fast: {
|
|
16
|
-
readonly description: "quick scan, top issues only (
|
|
16
|
+
readonly description: "quick scan, top issues only (~$0.24 per review)";
|
|
17
17
|
readonly claude: {
|
|
18
18
|
readonly model: "haiku";
|
|
19
19
|
readonly effort: "low";
|
|
@@ -24,7 +24,7 @@ declare const QUALITY_TIERS: {
|
|
|
24
24
|
};
|
|
25
25
|
};
|
|
26
26
|
readonly balanced: {
|
|
27
|
-
readonly description: "full review, all issues with explanations (
|
|
27
|
+
readonly description: "full review, all issues with explanations (~$0.72 per review)";
|
|
28
28
|
readonly claude: {
|
|
29
29
|
readonly model: "sonnet";
|
|
30
30
|
readonly effort: "medium";
|
|
@@ -35,7 +35,7 @@ declare const QUALITY_TIERS: {
|
|
|
35
35
|
};
|
|
36
36
|
};
|
|
37
37
|
readonly thorough: {
|
|
38
|
-
readonly description: "deep multi-pass, security + architecture (
|
|
38
|
+
readonly description: "deep multi-pass, security + architecture (~$1.20 per review)";
|
|
39
39
|
readonly claude: {
|
|
40
40
|
readonly model: "opus";
|
|
41
41
|
readonly effort: "max";
|
|
@@ -47,8 +47,38 @@ declare const QUALITY_TIERS: {
|
|
|
47
47
|
};
|
|
48
48
|
};
|
|
49
49
|
type QualityTier = keyof typeof QUALITY_TIERS;
|
|
50
|
+
export interface ThoroughnessChoice {
|
|
51
|
+
/** Fixed tier, and the fallback used under smart mode when a PR's files can't be read. */
|
|
52
|
+
tier: QualityTier;
|
|
53
|
+
mode: 'smart' | 'fixed';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* What a re-run of onboard proposes, from the `quality` block as it is WRITTEN.
|
|
57
|
+
*
|
|
58
|
+
* Both fields must come from the raw yaml, never the parsed config: the schema
|
|
59
|
+
* defaults `mode` to smart and `tier` to balanced, so a parsed value can never
|
|
60
|
+
* distinguish "the user chose this" from "this config predates the field".
|
|
61
|
+
* Reading the parsed tier made every existing config look hand-set, so any
|
|
62
|
+
* re-onboard — silently, under `--yes` — opted the user out of the new default.
|
|
63
|
+
*
|
|
64
|
+
* A config that named a tier before smart existed keeps it, on the reasoning
|
|
65
|
+
* that it was a deliberate choice; one that never mentioned quality does not.
|
|
66
|
+
*/
|
|
67
|
+
export declare function thoroughnessDefaults(rawQuality: {
|
|
68
|
+
tier?: string;
|
|
69
|
+
mode?: string;
|
|
70
|
+
}): ThoroughnessChoice;
|
|
50
71
|
export declare function detectCurrentPreset(workflowDir?: string): WorkflowPreset;
|
|
51
72
|
export declare function detectConflictResolveEnabled(workflowDir?: string): boolean;
|
|
73
|
+
export interface LinearDecision {
|
|
74
|
+
mode: 'off' | 'api_key' | 'client_credentials';
|
|
75
|
+
teamKeys: string[];
|
|
76
|
+
}
|
|
77
|
+
export declare function promptLinear(current: {
|
|
78
|
+
enabled?: boolean;
|
|
79
|
+
mode?: string;
|
|
80
|
+
teamKeys?: string[];
|
|
81
|
+
} | undefined, opts: OnboardOpts): Promise<LinearDecision>;
|
|
52
82
|
export interface OnboardDecisions {
|
|
53
83
|
deployment: 'personal' | 'team';
|
|
54
84
|
login: string;
|
|
@@ -57,12 +87,15 @@ export interface OnboardDecisions {
|
|
|
57
87
|
vendorConfig: VendorModeConfig;
|
|
58
88
|
authorVendor: 'claude' | 'codex' | 'both';
|
|
59
89
|
qualityTier: QualityTier;
|
|
90
|
+
qualityMode: 'smart' | 'fixed';
|
|
91
|
+
enabledSkills: string[];
|
|
60
92
|
pipelinePreset: WorkflowPreset;
|
|
61
93
|
maxRounds?: number;
|
|
62
94
|
conflictResolve: boolean;
|
|
63
95
|
tunnelBackend: 'localhost.run' | 'smee';
|
|
64
96
|
smeeChannel: string;
|
|
65
97
|
cloneProtocol: 'ssh' | 'https';
|
|
98
|
+
linear?: LinearDecision;
|
|
66
99
|
}
|
|
67
100
|
export declare function applyOnboardConfig(configPath: string, decisions: OnboardDecisions, workflowDir?: string): void;
|
|
68
101
|
export declare function runOnboard(opts?: OnboardOpts): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAQD,KAAK,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,oBAAoB,CAAA;AAEzE,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,cAAc,GAAG,eAAe,CAAA;IACtC,aAAa,EAAE,OAAO,CAAA;IACtB,YAAY,EAAE,OAAO,CAAA;CACtB,CAAA;AAQD,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgBT,CAAA;AAEV,KAAK,WAAW,GAAG,MAAM,OAAO,aAAa,CAAA;AA4J7C,MAAM,WAAW,kBAAkB;IACjC,0FAA0F;IAC1F,IAAI,EAAE,WAAW,CAAA;IACjB,IAAI,EAAE,OAAO,GAAG,OAAO,CAAA;CACxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,CAOrG;AA0DD,wBAAgB,mBAAmB,CAAC,WAAW,GAAE,MAAuC,GAAG,cAAc,CAgBxG;AAED,wBAAgB,4BAA4B,CAAC,WAAW,GAAE,MAAuC,GAAG,OAAO,CAO1G;AA4ED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,oBAAoB,CAAA;IAC9C,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAQD,wBAAsB,YAAY,CAChC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,EAC9E,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,cAAc,CAAC,CAkBzB;AAkED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,UAAU,GAAG,MAAM,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,YAAY,EAAE,gBAAgB,CAAA;IAC9B,YAAY,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAA;IACzC,WAAW,EAAE,WAAW,CAAA;IACxB,WAAW,EAAE,OAAO,GAAG,OAAO,CAAA;IAC9B,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,cAAc,EAAE,cAAc,CAAA;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,OAAO,CAAA;IACxB,aAAa,EAAE,eAAe,GAAG,MAAM,CAAA;IACvC,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,KAAK,GAAG,OAAO,CAAA;IAC9B,MAAM,CAAC,EAAE,cAAc,CAAA;CACxB;AAwDD,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,gBAAgB,EAC3B,WAAW,SAAiC,GAC3C,IAAI,CA2NN;AAED,wBAAsB,UAAU,CAAC,IAAI,GAAE,WAAgB,iBAictD"}
|