@humanbased/crosscheck 1.2.0-beta.80 → 1.2.0
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 +388 -149
- package/README.zh.md +1 -1
- package/crosscheck.config.example.yml +2 -63
- package/dist/__tests__/codex.test.js +27 -14
- package/dist/__tests__/codex.test.js.map +1 -1
- package/dist/__tests__/comment-bodies.test.js +1 -49
- package/dist/__tests__/comment-bodies.test.js.map +1 -1
- package/dist/__tests__/conflict-resolve.test.js +1 -44
- package/dist/__tests__/conflict-resolve.test.js.map +1 -1
- package/dist/__tests__/fix.test.js +0 -33
- package/dist/__tests__/fix.test.js.map +1 -1
- package/dist/__tests__/onboard-preservation.test.js +0 -5
- package/dist/__tests__/onboard-preservation.test.js.map +1 -1
- package/dist/__tests__/optimize.test.js +0 -2
- package/dist/__tests__/optimize.test.js.map +1 -1
- package/dist/__tests__/repo-picker.test.js +1 -7
- package/dist/__tests__/repo-picker.test.js.map +1 -1
- package/dist/__tests__/review-comment-body.test.js +0 -35
- package/dist/__tests__/review-comment-body.test.js.map +1 -1
- package/dist/__tests__/review-models.test.js +3 -19
- package/dist/__tests__/review-models.test.js.map +1 -1
- package/dist/__tests__/runner.test.js +1 -29
- package/dist/__tests__/runner.test.js.map +1 -1
- package/dist/cli.js +0 -29
- package/dist/cli.js.map +1 -1
- package/dist/commands/onboard.d.ts +0 -11
- package/dist/commands/onboard.d.ts.map +1 -1
- package/dist/commands/onboard.js +2 -88
- package/dist/commands/onboard.js.map +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +6 -65
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +3 -23
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +1 -53
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +6 -52
- package/dist/commands/watch.js.map +1 -1
- package/dist/config/loader.d.ts +1 -3
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +0 -13
- package/dist/config/loader.js.map +1 -1
- package/dist/config/review-model-tiers.json +3 -3
- package/dist/config/schema.d.ts +10 -254
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +2 -62
- package/dist/config/schema.js.map +1 -1
- package/dist/github/client.d.ts +1 -6
- package/dist/github/client.d.ts.map +1 -1
- package/dist/github/client.js +7 -15
- package/dist/github/client.js.map +1 -1
- package/dist/issues/ticket-ref.d.ts.map +1 -1
- package/dist/issues/ticket-ref.js +5 -6
- package/dist/issues/ticket-ref.js.map +1 -1
- package/dist/lib/clone.d.ts +0 -1
- package/dist/lib/clone.d.ts.map +1 -1
- package/dist/lib/clone.js +10 -32
- package/dist/lib/clone.js.map +1 -1
- package/dist/lib/comment-bodies.d.ts +0 -35
- package/dist/lib/comment-bodies.d.ts.map +1 -1
- package/dist/lib/comment-bodies.js +9 -43
- package/dist/lib/comment-bodies.js.map +1 -1
- package/dist/lib/repo-picker.d.ts +0 -3
- package/dist/lib/repo-picker.d.ts.map +1 -1
- package/dist/lib/repo-picker.js +9 -45
- package/dist/lib/repo-picker.js.map +1 -1
- package/dist/lib/review-models.d.ts +2 -15
- package/dist/lib/review-models.d.ts.map +1 -1
- package/dist/lib/review-models.js +6 -26
- package/dist/lib/review-models.js.map +1 -1
- package/dist/lib/runner.d.ts +0 -12
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/runner.js +42 -186
- package/dist/lib/runner.js.map +1 -1
- package/dist/lib/workflow.d.ts +0 -9
- package/dist/lib/workflow.d.ts.map +1 -1
- package/dist/lib/workflow.js +0 -20
- package/dist/lib/workflow.js.map +1 -1
- package/dist/reviewers/claude.d.ts +1 -4
- package/dist/reviewers/claude.d.ts.map +1 -1
- package/dist/reviewers/claude.js +7 -39
- package/dist/reviewers/claude.js.map +1 -1
- package/dist/reviewers/codex.d.ts +1 -3
- package/dist/reviewers/codex.d.ts.map +1 -1
- package/dist/reviewers/codex.js +70 -76
- package/dist/reviewers/codex.js.map +1 -1
- package/dist/reviewers/conflict-resolve.d.ts +1 -3
- package/dist/reviewers/conflict-resolve.d.ts.map +1 -1
- package/dist/reviewers/conflict-resolve.js +6 -21
- package/dist/reviewers/conflict-resolve.js.map +1 -1
- package/dist/reviewers/fix.d.ts +2 -5
- package/dist/reviewers/fix.d.ts.map +1 -1
- package/dist/reviewers/fix.js +10 -26
- package/dist/reviewers/fix.js.map +1 -1
- package/get-started.md +4 -139
- package/package.json +3 -4
- package/assets/icon-256.png +0 -0
- package/assets/linear-comment.svg +0 -18
- package/assets/linear-onboard.svg +0 -30
- package/assets/linear-status.svg +0 -23
- package/assets/linear-test.svg +0 -34
- package/assets/skills/code-review/.crosscheck-skill.json +0 -9
- package/assets/skills/code-review/LICENSE +0 -21
- package/assets/skills/code-review/SKILL.md +0 -89
- package/assets/skills/code-review/agents/openai.yaml +0 -3
- package/assets/skills/code-review-skill/.crosscheck-skill.json +0 -9
- package/assets/skills/code-review-skill/LICENSE +0 -21
- package/assets/skills/code-review-skill/SKILL.md +0 -231
- package/assets/skills/code-review-skill/assets/pr-review-template.md +0 -137
- package/assets/skills/code-review-skill/assets/review-checklist.md +0 -123
- package/assets/skills/code-review-skill/reference/angular.md +0 -768
- package/assets/skills/code-review-skill/reference/architecture-review-guide.md +0 -472
- package/assets/skills/code-review-skill/reference/c.md +0 -890
- package/assets/skills/code-review-skill/reference/code-quality-universal.md +0 -488
- package/assets/skills/code-review-skill/reference/code-review-best-practices.md +0 -136
- package/assets/skills/code-review-skill/reference/common-bugs-checklist.md +0 -286
- package/assets/skills/code-review-skill/reference/cpp.md +0 -893
- package/assets/skills/code-review-skill/reference/cross-cutting/async-concurrency-patterns.md +0 -515
- package/assets/skills/code-review-skill/reference/cross-cutting/error-handling-principles.md +0 -492
- package/assets/skills/code-review-skill/reference/cross-cutting/n-plus-one-queries.md +0 -309
- package/assets/skills/code-review-skill/reference/cross-cutting/sql-injection-prevention.md +0 -308
- package/assets/skills/code-review-skill/reference/cross-cutting/xss-prevention.md +0 -264
- package/assets/skills/code-review-skill/reference/csharp.md +0 -525
- package/assets/skills/code-review-skill/reference/css-less-sass.md +0 -661
- package/assets/skills/code-review-skill/reference/django.md +0 -985
- package/assets/skills/code-review-skill/reference/fastapi.md +0 -580
- package/assets/skills/code-review-skill/reference/go.md +0 -993
- package/assets/skills/code-review-skill/reference/java.md +0 -409
- package/assets/skills/code-review-skill/reference/java8.md +0 -586
- package/assets/skills/code-review-skill/reference/kotlin.md +0 -1018
- package/assets/skills/code-review-skill/reference/nestjs.md +0 -593
- package/assets/skills/code-review-skill/reference/performance-review-guide.md +0 -816
- package/assets/skills/code-review-skill/reference/php.md +0 -684
- package/assets/skills/code-review-skill/reference/python.md +0 -1073
- package/assets/skills/code-review-skill/reference/qt.md +0 -757
- package/assets/skills/code-review-skill/reference/react.md +0 -871
- package/assets/skills/code-review-skill/reference/ruby.md +0 -964
- package/assets/skills/code-review-skill/reference/rust.md +0 -846
- package/assets/skills/code-review-skill/reference/security-review-guide.md +0 -494
- package/assets/skills/code-review-skill/reference/svelte.md +0 -1064
- package/assets/skills/code-review-skill/reference/swift.md +0 -936
- package/assets/skills/code-review-skill/reference/typescript.md +0 -1016
- package/assets/skills/code-review-skill/reference/vue.md +0 -924
- package/assets/skills/code-review-skill/reference/zig.md +0 -440
- package/assets/skills/code-review-skill/scripts/pr-analyzer.py +0 -435
- package/assets/skills/code-review-skill/scripts/test_pr_analyzer.py +0 -380
- package/assets/skills/codebase-design/.crosscheck-skill.json +0 -9
- package/assets/skills/codebase-design/DEEPENING.md +0 -37
- package/assets/skills/codebase-design/DESIGN-IT-TWICE.md +0 -44
- package/assets/skills/codebase-design/LICENSE +0 -21
- package/assets/skills/codebase-design/SKILL.md +0 -114
- package/assets/skills/codebase-design/agents/openai.yaml +0 -3
- package/assets/skills/diagnosing-bugs/.crosscheck-skill.json +0 -9
- package/assets/skills/diagnosing-bugs/LICENSE +0 -21
- package/assets/skills/diagnosing-bugs/SKILL.md +0 -134
- package/assets/skills/diagnosing-bugs/agents/openai.yaml +0 -3
- package/assets/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +0 -41
- package/dist/__tests__/can-write-verdict.test.d.ts +0 -2
- package/dist/__tests__/can-write-verdict.test.d.ts.map +0 -1
- package/dist/__tests__/can-write-verdict.test.js +0 -31
- package/dist/__tests__/can-write-verdict.test.js.map +0 -1
- package/dist/__tests__/linear-branding.test.d.ts +0 -2
- package/dist/__tests__/linear-branding.test.d.ts.map +0 -1
- package/dist/__tests__/linear-branding.test.js +0 -156
- package/dist/__tests__/linear-branding.test.js.map +0 -1
- package/dist/__tests__/linear-client.test.d.ts +0 -2
- package/dist/__tests__/linear-client.test.d.ts.map +0 -1
- package/dist/__tests__/linear-client.test.js +0 -120
- package/dist/__tests__/linear-client.test.js.map +0 -1
- package/dist/__tests__/linear-comment.test.d.ts +0 -2
- package/dist/__tests__/linear-comment.test.d.ts.map +0 -1
- package/dist/__tests__/linear-comment.test.js +0 -151
- package/dist/__tests__/linear-comment.test.js.map +0 -1
- package/dist/__tests__/linear-identity.test.d.ts +0 -2
- package/dist/__tests__/linear-identity.test.d.ts.map +0 -1
- package/dist/__tests__/linear-identity.test.js +0 -253
- package/dist/__tests__/linear-identity.test.js.map +0 -1
- package/dist/__tests__/linear-notify.test.d.ts +0 -2
- package/dist/__tests__/linear-notify.test.d.ts.map +0 -1
- package/dist/__tests__/linear-notify.test.js +0 -144
- package/dist/__tests__/linear-notify.test.js.map +0 -1
- package/dist/__tests__/linear-ref.test.d.ts +0 -2
- package/dist/__tests__/linear-ref.test.d.ts.map +0 -1
- package/dist/__tests__/linear-ref.test.js +0 -261
- package/dist/__tests__/linear-ref.test.js.map +0 -1
- package/dist/__tests__/linear-test-ref.test.d.ts +0 -2
- package/dist/__tests__/linear-test-ref.test.d.ts.map +0 -1
- package/dist/__tests__/linear-test-ref.test.js +0 -81
- package/dist/__tests__/linear-test-ref.test.js.map +0 -1
- package/dist/__tests__/linear-verify.test.d.ts +0 -2
- package/dist/__tests__/linear-verify.test.d.ts.map +0 -1
- package/dist/__tests__/linear-verify.test.js +0 -132
- package/dist/__tests__/linear-verify.test.js.map +0 -1
- package/dist/__tests__/linear-worker.test.d.ts +0 -2
- package/dist/__tests__/linear-worker.test.d.ts.map +0 -1
- package/dist/__tests__/linear-worker.test.js +0 -83
- package/dist/__tests__/linear-worker.test.js.map +0 -1
- package/dist/__tests__/linear-write-possible.test.d.ts +0 -2
- package/dist/__tests__/linear-write-possible.test.d.ts.map +0 -1
- package/dist/__tests__/linear-write-possible.test.js +0 -30
- package/dist/__tests__/linear-write-possible.test.js.map +0 -1
- package/dist/__tests__/repository-guidance.test.d.ts +0 -2
- package/dist/__tests__/repository-guidance.test.d.ts.map +0 -1
- package/dist/__tests__/repository-guidance.test.js +0 -107
- package/dist/__tests__/repository-guidance.test.js.map +0 -1
- package/dist/__tests__/review-strategy.test.d.ts +0 -2
- package/dist/__tests__/review-strategy.test.d.ts.map +0 -1
- package/dist/__tests__/review-strategy.test.js +0 -195
- package/dist/__tests__/review-strategy.test.js.map +0 -1
- package/dist/__tests__/skill-attribution.test.d.ts +0 -2
- package/dist/__tests__/skill-attribution.test.d.ts.map +0 -1
- package/dist/__tests__/skill-attribution.test.js +0 -53
- package/dist/__tests__/skill-attribution.test.js.map +0 -1
- package/dist/__tests__/skill-broker.test.d.ts +0 -2
- package/dist/__tests__/skill-broker.test.d.ts.map +0 -1
- package/dist/__tests__/skill-broker.test.js +0 -144
- package/dist/__tests__/skill-broker.test.js.map +0 -1
- package/dist/__tests__/skill-catalog.test.d.ts +0 -2
- package/dist/__tests__/skill-catalog.test.d.ts.map +0 -1
- package/dist/__tests__/skill-catalog.test.js +0 -40
- package/dist/__tests__/skill-catalog.test.js.map +0 -1
- package/dist/__tests__/skill-installer.test.d.ts +0 -2
- package/dist/__tests__/skill-installer.test.d.ts.map +0 -1
- package/dist/__tests__/skill-installer.test.js +0 -96
- package/dist/__tests__/skill-installer.test.js.map +0 -1
- package/dist/__tests__/skills-config.test.d.ts +0 -2
- package/dist/__tests__/skills-config.test.d.ts.map +0 -1
- package/dist/__tests__/skills-config.test.js +0 -12
- package/dist/__tests__/skills-config.test.js.map +0 -1
- package/dist/commands/linear-test.d.ts +0 -18
- package/dist/commands/linear-test.d.ts.map +0 -1
- package/dist/commands/linear-test.js +0 -130
- package/dist/commands/linear-test.js.map +0 -1
- package/dist/commands/skill.d.ts +0 -2
- package/dist/commands/skill.d.ts.map +0 -1
- package/dist/commands/skill.js +0 -16
- package/dist/commands/skill.js.map +0 -1
- package/dist/config/review-strategy.json +0 -202
- package/dist/lib/repository-guidance.d.ts +0 -2
- package/dist/lib/repository-guidance.d.ts.map +0 -1
- package/dist/lib/repository-guidance.js +0 -55
- package/dist/lib/repository-guidance.js.map +0 -1
- package/dist/lib/review-strategy.d.ts +0 -62
- package/dist/lib/review-strategy.d.ts.map +0 -1
- package/dist/lib/review-strategy.js +0 -235
- package/dist/lib/review-strategy.js.map +0 -1
- package/dist/linear/client.d.ts +0 -18
- package/dist/linear/client.d.ts.map +0 -1
- package/dist/linear/client.js +0 -67
- package/dist/linear/client.js.map +0 -1
- package/dist/linear/comment.d.ts +0 -20
- package/dist/linear/comment.d.ts.map +0 -1
- package/dist/linear/comment.js +0 -57
- package/dist/linear/comment.js.map +0 -1
- package/dist/linear/identity.d.ts +0 -59
- package/dist/linear/identity.d.ts.map +0 -1
- package/dist/linear/identity.js +0 -187
- package/dist/linear/identity.js.map +0 -1
- package/dist/linear/notify.d.ts +0 -35
- package/dist/linear/notify.d.ts.map +0 -1
- package/dist/linear/notify.js +0 -76
- package/dist/linear/notify.js.map +0 -1
- package/dist/linear/ref.d.ts +0 -13
- package/dist/linear/ref.d.ts.map +0 -1
- package/dist/linear/ref.js +0 -90
- package/dist/linear/ref.js.map +0 -1
- package/dist/linear/verify.d.ts +0 -26
- package/dist/linear/verify.d.ts.map +0 -1
- package/dist/linear/verify.js +0 -67
- package/dist/linear/verify.js.map +0 -1
- package/dist/skills/attribution.d.ts +0 -4
- package/dist/skills/attribution.d.ts.map +0 -1
- package/dist/skills/attribution.js +0 -14
- package/dist/skills/attribution.js.map +0 -1
- package/dist/skills/broker-server.d.ts +0 -2
- package/dist/skills/broker-server.d.ts.map +0 -1
- package/dist/skills/broker-server.js +0 -17
- package/dist/skills/broker-server.js.map +0 -1
- package/dist/skills/broker.d.ts +0 -42
- package/dist/skills/broker.d.ts.map +0 -1
- package/dist/skills/broker.js +0 -285
- package/dist/skills/broker.js.map +0 -1
- package/dist/skills/catalog.d.ts +0 -28
- package/dist/skills/catalog.d.ts.map +0 -1
- package/dist/skills/catalog.js +0 -104
- package/dist/skills/catalog.js.map +0 -1
- package/dist/skills/installer.d.ts +0 -10
- package/dist/skills/installer.d.ts.map +0 -1
- package/dist/skills/installer.js +0 -138
- package/dist/skills/installer.js.map +0 -1
- package/dist/skills/integrity.d.ts +0 -4
- package/dist/skills/integrity.d.ts.map +0 -1
- package/dist/skills/integrity.js +0 -36
- package/dist/skills/integrity.js.map +0 -1
- package/docs/dynamic-thoroughness.md +0 -286
- package/docs/linear-identity-contract.md +0 -139
- package/docs/linear-identity.md +0 -293
package/dist/linear/ref.js
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
// Write-side ref resolution: which Linear issue should crosscheck comment on?
|
|
2
|
-
//
|
|
3
|
-
// Extraction primitives live in src/issues/ticket-ref.ts and are reused here —
|
|
4
|
-
// this module only adds the two things the write path needs on top:
|
|
5
|
-
//
|
|
6
|
-
// 1. linear.app issue URLs, which are unambiguous and so need no configuration.
|
|
7
|
-
// 2. A stricter policy for bare identifiers: they are only honoured for team keys
|
|
8
|
-
// the operator has configured. Enrichment can afford to match `UTF-8` and let
|
|
9
|
-
// the lookup return nothing, because a failed read is a no-op. A failed *write*
|
|
10
|
-
// would post a review comment onto an unrelated issue, so the write path
|
|
11
|
-
// requires the operator to name their team keys first.
|
|
12
|
-
import { extractTicketRefs, parseTicketId } from '../issues/ticket-ref.js';
|
|
13
|
-
// The identifier occupies one whole path segment. Lookaheads kept getting this
|
|
14
|
-
// wrong in both directions: requiring `/` or end-of-path missed `IN-42.` at the
|
|
15
|
-
// end of a sentence, and allowing any non-alphanumeric accepted `IN-123-typo` as
|
|
16
|
-
// `IN-123`. Take the segment, strip trailing sentence punctuation, and require
|
|
17
|
-
// parseTicketId to match it whole.
|
|
18
|
-
const ISSUE_SEGMENTS = /^\/([^/]+)\/issue\/([^/]+)/i;
|
|
19
|
-
// Leading punctuation is safe to allow — but only characters that cannot be part
|
|
20
|
-
// of a hostname, so `notlinear.app` still cannot match. Missing `(linear.app/...)`
|
|
21
|
-
// made it fall through to the bare-ID extractor, which returns no workspace and
|
|
22
|
-
// so silently loses the workspace-mismatch protection.
|
|
23
|
-
const BARE_URL = /(?:^|[\s([{<"'`,;])linear\.app\/([^/\s]+)\/issue\/([^/\s]+)/gi;
|
|
24
|
-
// Absolute URLs are parsed and their hostname compared exactly. A boundary check
|
|
25
|
-
// on the text is not enough: `https://evil.example/linear.app/acme/issue/IN-1`
|
|
26
|
-
// satisfies any "character before linear.app" rule while pointing somewhere else.
|
|
27
|
-
const ABSOLUTE_URL = /\bhttps?:\/\/[^\s<>()"'`]+/gi;
|
|
28
|
-
/** Trailing sentence punctuation is never part of an identifier. */
|
|
29
|
-
function stripTrailingPunctuation(segment) {
|
|
30
|
-
return segment.replace(/[.,;:!?)\]}>'"]+$/, '');
|
|
31
|
-
}
|
|
32
|
-
function fromUrl(text) {
|
|
33
|
-
for (const match of text.matchAll(ABSOLUTE_URL)) {
|
|
34
|
-
let parsed;
|
|
35
|
-
try {
|
|
36
|
-
parsed = new URL(match[0]);
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
if (parsed.hostname.toLowerCase() !== 'linear.app')
|
|
42
|
-
continue;
|
|
43
|
-
const segments = parsed.pathname.match(ISSUE_SEGMENTS);
|
|
44
|
-
if (!segments)
|
|
45
|
-
continue;
|
|
46
|
-
const ref = parseTicketId(stripTrailingPunctuation(segments[2]));
|
|
47
|
-
if (ref)
|
|
48
|
-
return withWorkspace(ref, segments[1]);
|
|
49
|
-
}
|
|
50
|
-
// Iterate, like the absolute-URL path above: a malformed candidate earlier in
|
|
51
|
-
// the text must not stop a valid one later from resolving.
|
|
52
|
-
for (const bare of text.matchAll(BARE_URL)) {
|
|
53
|
-
const ref = parseTicketId(stripTrailingPunctuation(bare[2]));
|
|
54
|
-
if (ref)
|
|
55
|
-
return withWorkspace(ref, bare[1]);
|
|
56
|
-
}
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
// An explicit URL names a workspace. Identifiers are only unique within one, so
|
|
60
|
-
// dropping the slug lets a URL for workspace A resolve against credentials for
|
|
61
|
-
// workspace B and comment on B's same-numbered issue.
|
|
62
|
-
function withWorkspace(ref, workspace) {
|
|
63
|
-
return { ...ref, workspace: workspace.toLowerCase(), source: 'body' };
|
|
64
|
-
}
|
|
65
|
-
function matchField(text, teamKeys) {
|
|
66
|
-
const url = fromUrl(text);
|
|
67
|
-
if (url)
|
|
68
|
-
return url;
|
|
69
|
-
// Bare identifiers only for configured keys — see the module header.
|
|
70
|
-
if (teamKeys.length === 0)
|
|
71
|
-
return null;
|
|
72
|
-
const bare = extractTicketRefs({ title: text }, [...teamKeys])[0];
|
|
73
|
-
return bare ? { ...bare, source: 'body' } : null;
|
|
74
|
-
}
|
|
75
|
-
export function extractLinearRef(pr, teamKeys) {
|
|
76
|
-
const fields = [
|
|
77
|
-
[pr.branch, 'branch'],
|
|
78
|
-
[pr.title, 'title'],
|
|
79
|
-
[pr.body, 'body'],
|
|
80
|
-
];
|
|
81
|
-
for (const [text, source] of fields) {
|
|
82
|
-
if (!text)
|
|
83
|
-
continue;
|
|
84
|
-
const ref = matchField(text, teamKeys);
|
|
85
|
-
if (ref)
|
|
86
|
-
return { ...ref, source };
|
|
87
|
-
}
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=ref.js.map
|
package/dist/linear/ref.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ref.js","sourceRoot":"","sources":["../../src/linear/ref.ts"],"names":[],"mappings":"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"}
|
package/dist/linear/verify.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { type LinearAuthMode, type LinearCredentials, type ResolveOptions, type ResolvedLinearAuth } from './identity.js';
|
|
2
|
-
import { type LinearRequestOptions } from './client.js';
|
|
3
|
-
import type { LinearConfig } from '../config/schema.js';
|
|
4
|
-
export interface LinearIdentityReport {
|
|
5
|
-
ok: boolean;
|
|
6
|
-
mode: LinearAuthMode;
|
|
7
|
-
/** Actor name writes will carry, including any per-step suffix the caller applies. */
|
|
8
|
-
actor: string;
|
|
9
|
-
organization?: string;
|
|
10
|
-
/**
|
|
11
|
-
* 'app' — writes render as the OAuth application (botActor). The goal state.
|
|
12
|
-
* 'user' — writes attribute to a human account. What IN-2271 is eliminating.
|
|
13
|
-
*/
|
|
14
|
-
attribution: 'app' | 'user';
|
|
15
|
-
/** In api_key mode, the human account writes currently attribute to. */
|
|
16
|
-
attributesTo?: string;
|
|
17
|
-
/** Populated when ok is false. Never contains credential material. */
|
|
18
|
-
error?: string;
|
|
19
|
-
/**
|
|
20
|
-
* The identity this probe resolved, so callers can reuse it instead of minting
|
|
21
|
-
* a second token. Absent when resolution failed.
|
|
22
|
-
*/
|
|
23
|
-
auth?: ResolvedLinearAuth;
|
|
24
|
-
}
|
|
25
|
-
export declare function verifyLinearIdentity(config: LinearConfig, creds: LinearCredentials, opts?: ResolveOptions & LinearRequestOptions): Promise<LinearIdentityReport>;
|
|
26
|
-
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/linear/verify.ts"],"names":[],"mappings":"AAWA,OAAO,EAAqB,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAC5I,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAA;IACX,IAAI,EAAE,cAAc,CAAA;IACpB,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,WAAW,EAAE,KAAK,GAAG,MAAM,CAAA;IAC3B,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAA;CAC1B;AAQD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,iBAAiB,EACxB,IAAI,GAAE,cAAc,GAAG,oBAAyB,GAC/C,OAAO,CAAC,oBAAoB,CAAC,CAoD/B"}
|
package/dist/linear/verify.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
// Answers the one question a deployment cutover needs answered (IN-2271):
|
|
2
|
-
// when this daemon writes to Linear, whose name is on it?
|
|
3
|
-
//
|
|
4
|
-
// The acceptance criterion for switching Humanbased's deployments to the HB Agent
|
|
5
|
-
// Gateway is "zero writes from symphony/crosscheck attribute to a human account".
|
|
6
|
-
// That is checkable ahead of time — resolve the identity, confirm the token is
|
|
7
|
-
// accepted, and report what the write would render as.
|
|
8
|
-
//
|
|
9
|
-
// Never throws. A verification that fails is a report with ok: false, because the
|
|
10
|
-
// caller is a status command that must still print the rest of its output.
|
|
11
|
-
import { resolveLinearAuth } from './identity.js';
|
|
12
|
-
import { linearGraphQL } from './client.js';
|
|
13
|
-
const ORG_QUERY = `query { organization { name } }`;
|
|
14
|
-
const VIEWER_QUERY = `query { viewer { name email } organization { name } }`;
|
|
15
|
-
export async function verifyLinearIdentity(config, creds, opts = {}) {
|
|
16
|
-
const mode = config.auth.mode;
|
|
17
|
-
const attribution = mode === 'client_credentials' ? 'app' : 'user';
|
|
18
|
-
let auth;
|
|
19
|
-
try {
|
|
20
|
-
auth = await resolveLinearAuth(config, creds, opts);
|
|
21
|
-
}
|
|
22
|
-
catch (err) {
|
|
23
|
-
return {
|
|
24
|
-
ok: false,
|
|
25
|
-
mode,
|
|
26
|
-
actor: config.identity.actor,
|
|
27
|
-
attribution,
|
|
28
|
-
error: err instanceof Error ? err.message : String(err),
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
try {
|
|
32
|
-
if (auth.mode === 'client_credentials') {
|
|
33
|
-
// An app token has no viewer — it acts as itself. Reaching the org at all is
|
|
34
|
-
// proof the minted token is accepted.
|
|
35
|
-
const data = await linearGraphQL(auth, ORG_QUERY, {}, opts);
|
|
36
|
-
return {
|
|
37
|
-
ok: true,
|
|
38
|
-
mode: auth.mode,
|
|
39
|
-
actor: auth.actor,
|
|
40
|
-
attribution: 'app',
|
|
41
|
-
auth,
|
|
42
|
-
...(data.organization && { organization: data.organization.name }),
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
const data = await linearGraphQL(auth, VIEWER_QUERY, {}, opts);
|
|
46
|
-
const who = data.viewer?.email ?? data.viewer?.name ?? undefined;
|
|
47
|
-
return {
|
|
48
|
-
ok: true,
|
|
49
|
-
mode: auth.mode,
|
|
50
|
-
actor: auth.actor,
|
|
51
|
-
attribution: 'user',
|
|
52
|
-
auth,
|
|
53
|
-
...(data.organization && { organization: data.organization.name }),
|
|
54
|
-
...(who && { attributesTo: who }),
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
catch (err) {
|
|
58
|
-
return {
|
|
59
|
-
ok: false,
|
|
60
|
-
mode: auth.mode,
|
|
61
|
-
actor: auth.actor,
|
|
62
|
-
attribution,
|
|
63
|
-
error: err instanceof Error ? err.message : String(err),
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=verify.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/linear/verify.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,0DAA0D;AAC1D,EAAE;AACF,kFAAkF;AAClF,kFAAkF;AAClF,+EAA+E;AAC/E,uDAAuD;AACvD,EAAE;AACF,kFAAkF;AAClF,2EAA2E;AAE3E,OAAO,EAAE,iBAAiB,EAA6F,MAAM,eAAe,CAAA;AAC5I,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAA;AAyBtE,MAAM,SAAS,GAAG,iCAAiC,CAAA;AACnD,MAAM,YAAY,GAAG,uDAAuD,CAAA;AAK5E,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAoB,EACpB,KAAwB,EACxB,OAA8C,EAAE;IAEhD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAA;IAC7B,MAAM,WAAW,GAAG,IAAI,KAAK,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAA;IAElE,IAAI,IAAI,CAAA;IACR,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IACrD,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI;YACJ,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;YAC5B,WAAW;YACX,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAA;IACH,CAAC;IAED,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;YACvC,6EAA6E;YAC7E,sCAAsC;YACtC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAc,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;YACxE,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,KAAK;gBAClB,IAAI;gBACJ,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;aACnE,CAAA;QACH,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,aAAa,CAAiB,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;QAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,SAAS,CAAA;QAChE,OAAO;YACL,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,MAAM;YACnB,IAAI;YACJ,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YAClE,GAAG,CAAC,GAAG,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;SAClC,CAAA;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW;YACX,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAA;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/skills/broker.d.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/skills/broker.js
DELETED
|
@@ -1,285 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/skills/broker.ts"],"names":[],"mappings":"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"}
|
package/dist/skills/catalog.d.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
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
|