@motivation-labs/crosscheck 0.1.0 → 0.1.2-beta.500d8f0.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/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +8 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +41 -76
- package/dist/commands/watch.js.map +1 -1
- package/dist/config/loader.d.ts +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +18 -5
- package/dist/config/loader.js.map +1 -1
- package/package.json +2 -3
package/dist/cli.js
CHANGED
|
@@ -22,7 +22,7 @@ program
|
|
|
22
22
|
.action((opts) => runServe(opts.config));
|
|
23
23
|
program
|
|
24
24
|
.command('watch')
|
|
25
|
-
.description('Local dev mode — listen for PRs
|
|
25
|
+
.description('Local dev mode — listen for PRs via gh webhook forward')
|
|
26
26
|
.option('-c, --config <path>', 'config file path')
|
|
27
27
|
.action((opts) => void runWatch(opts.config));
|
|
28
28
|
program
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAEhD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,mDAAmD,CAAC;KAChE,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0DAA0D,CAAC;KACvE,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;KAC1D,MAAM,CAAC,CAAC,IAAyB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAE9D,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,CAAC,IAAyB,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAE/D,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAEhD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,mDAAmD,CAAC;KAChE,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0DAA0D,CAAC;KACvE,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;KAC1D,MAAM,CAAC,CAAC,IAAyB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAE9D,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,CAAC,IAAyB,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAE/D,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,CAAC,IAAyB,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAEpE,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,yBAAyB,EAAE,qEAAqE,CAAC;KACxG,MAAM,CAAC,CAAC,KAAa,EAAE,IAA4C,EAAE,EAAE,CAAC,KAAK,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;AAE7H,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,CAAC,IAAyB,EAAE,EAAE,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAErE,OAAO,CAAC,KAAK,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAkEA,wBAAsB,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,iBAwBhD"}
|
package/dist/commands/init.js
CHANGED
|
@@ -4,6 +4,7 @@ import { join } from 'path';
|
|
|
4
4
|
import chalk from 'chalk';
|
|
5
5
|
import { checkCodexAuth } from '../reviewers/codex.js';
|
|
6
6
|
import { checkClaudeAuth } from '../reviewers/claude.js';
|
|
7
|
+
import { getWebhookSecret, getWebhookSecretPath } from '../config/loader.js';
|
|
7
8
|
async function runChecks() {
|
|
8
9
|
const results = [];
|
|
9
10
|
// Check codex CLI
|
|
@@ -35,9 +36,13 @@ async function runChecks() {
|
|
|
35
36
|
// Check GITHUB_TOKEN
|
|
36
37
|
const token = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN;
|
|
37
38
|
results.push({ label: 'GITHUB_TOKEN', ok: !!token, detail: token ? 'set' : 'missing', fix: 'Set GITHUB_TOKEN in your shell profile' });
|
|
38
|
-
// Check
|
|
39
|
-
const
|
|
40
|
-
|
|
39
|
+
// Check WEBHOOK_SECRET — auto-generated if missing, so always ok
|
|
40
|
+
const fromEnv = process.env.CROSSCHECK_WEBHOOK_SECRET ?? process.env.GITHUB_WEBHOOK_SECRET;
|
|
41
|
+
const secretDetail = fromEnv
|
|
42
|
+
? 'set via env'
|
|
43
|
+
: `auto-managed at ${getWebhookSecretPath()}`;
|
|
44
|
+
getWebhookSecret(); // ensure it's generated/persisted
|
|
45
|
+
results.push({ label: 'WEBHOOK_SECRET', ok: true, detail: secretDetail });
|
|
41
46
|
return results;
|
|
42
47
|
}
|
|
43
48
|
function printCheck({ label, ok, detail, fix }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAkCA,wBAAsB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,iBA+HjD"}
|
package/dist/commands/watch.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { execSync } from 'child_process';
|
|
1
|
+
import { execSync, spawn } from 'child_process';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
-
import SmeeClient from 'smee-client';
|
|
4
3
|
import { createWebhookServer } from '../github/webhook.js';
|
|
5
|
-
import { createGithubClient, postReviewComment
|
|
4
|
+
import { createGithubClient, postReviewComment } from '../github/client.js';
|
|
6
5
|
import { detectPROrigin, assignReviewer } from '../github/detector.js';
|
|
7
6
|
import { runCodexReview } from '../reviewers/codex.js';
|
|
8
7
|
import { runClaudeReview } from '../reviewers/claude.js';
|
|
@@ -20,17 +19,17 @@ function detectCurrentRepo() {
|
|
|
20
19
|
catch { /* ignore */ }
|
|
21
20
|
return null;
|
|
22
21
|
}
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return location;
|
|
22
|
+
function spawnGhForward(target, secret, scope) {
|
|
23
|
+
const scopeArg = 'org' in scope
|
|
24
|
+
? `--org=${scope.org}`
|
|
25
|
+
: `--repo=${scope.owner}/${scope.repo}`;
|
|
26
|
+
return spawn('gh', ['webhook', 'forward', '--events=pull_request', `--url=${target}`, `--secret=${secret}`, scopeArg], { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
29
27
|
}
|
|
30
28
|
export async function runWatch(configPath) {
|
|
31
29
|
const config = loadConfig(configPath);
|
|
32
30
|
const token = getGithubToken();
|
|
33
31
|
const webhookSecret = getWebhookSecret();
|
|
32
|
+
const target = `http://localhost:${config.server.port}${config.server.webhook_path}`;
|
|
34
33
|
const log = (msg) => console.log(`${chalk.dim(new Date().toLocaleTimeString())} ${msg}`);
|
|
35
34
|
// PR deduplication — skip if already reviewing this PR+SHA
|
|
36
35
|
const inFlight = new Set();
|
|
@@ -82,64 +81,42 @@ export async function runWatch(configPath) {
|
|
|
82
81
|
}
|
|
83
82
|
}, log);
|
|
84
83
|
await new Promise(resolve => server.listen(config.server.port, resolve));
|
|
85
|
-
|
|
86
|
-
log('Creating smee.io tunnel...');
|
|
87
|
-
const smeeUrl = await createSmeeChannel();
|
|
88
|
-
const target = `http://localhost:${config.server.port}${config.server.webhook_path}`;
|
|
89
|
-
const smee = new SmeeClient({ source: smeeUrl, target, logger: { info: () => { }, error: console.error } });
|
|
90
|
-
const smeeEvents = smee.start();
|
|
91
|
-
const registeredHooks = [];
|
|
84
|
+
const scopes = [];
|
|
92
85
|
if (config.orgs.length > 0) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
log(`Registering org webhook for ${org}...`);
|
|
96
|
-
try {
|
|
97
|
-
const hookId = await registerOrgWebhook(org, smeeUrl, webhookSecret, token);
|
|
98
|
-
registeredHooks.push({ type: 'org', org, hookId });
|
|
99
|
-
log(chalk.green(` ✓ org webhook registered for ${org} (id ${hookId})`));
|
|
100
|
-
}
|
|
101
|
-
catch (err) {
|
|
102
|
-
const error = err;
|
|
103
|
-
log(chalk.yellow(` Could not register org webhook for ${org}: ${error.message ?? 'unknown'}`));
|
|
104
|
-
log(chalk.dim(` Register manually at: https://github.com/organizations/${org}/settings/hooks`));
|
|
105
|
-
}
|
|
106
|
-
}
|
|
86
|
+
for (const org of config.orgs)
|
|
87
|
+
scopes.push({ org });
|
|
107
88
|
}
|
|
108
89
|
else if (config.repos.length > 0) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
log(`Registering repo webhook for ${owner}/${name}...`);
|
|
112
|
-
try {
|
|
113
|
-
const hookId = await registerRepoWebhook(owner, name, smeeUrl, webhookSecret, token);
|
|
114
|
-
registeredHooks.push({ type: 'repo', owner, repo: name, hookId });
|
|
115
|
-
log(chalk.green(` ✓ repo webhook registered for ${owner}/${name} (id ${hookId})`));
|
|
116
|
-
}
|
|
117
|
-
catch (err) {
|
|
118
|
-
const error = err;
|
|
119
|
-
log(chalk.yellow(` Could not register webhook for ${owner}/${name}: ${error.message ?? 'unknown'}`));
|
|
120
|
-
}
|
|
121
|
-
}
|
|
90
|
+
for (const { owner, name } of config.repos)
|
|
91
|
+
scopes.push({ owner, repo: name });
|
|
122
92
|
}
|
|
123
93
|
else {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (!currentRepo) {
|
|
94
|
+
const detected = detectCurrentRepo();
|
|
95
|
+
if (!detected) {
|
|
127
96
|
console.error(chalk.red('Could not detect a GitHub repo from git remote. Run inside a git repo or set repos/orgs in config.'));
|
|
128
|
-
smeeEvents.close();
|
|
129
97
|
server.close(() => process.exit(1));
|
|
130
98
|
return;
|
|
131
99
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
100
|
+
scopes.push({ owner: detected.owner, repo: detected.repo });
|
|
101
|
+
}
|
|
102
|
+
// Spawn gh webhook forward for each scope
|
|
103
|
+
const forwarders = [];
|
|
104
|
+
for (const scope of scopes) {
|
|
105
|
+
const label = 'org' in scope ? scope.org : `${scope.owner}/${scope.repo}`;
|
|
106
|
+
log(`Starting webhook forwarder for ${label}...`);
|
|
107
|
+
const proc = spawnGhForward(target, webhookSecret, scope);
|
|
108
|
+
forwarders.push(proc);
|
|
109
|
+
proc.stderr?.on('data', (d) => {
|
|
110
|
+
const line = d.toString().trim();
|
|
111
|
+
if (line)
|
|
112
|
+
log(chalk.dim(` [gh forward ${label}] ${line}`));
|
|
113
|
+
});
|
|
114
|
+
proc.on('exit', (code) => {
|
|
115
|
+
if (code !== 0 && code !== null) {
|
|
116
|
+
log(chalk.yellow(` webhook forwarder for ${label} exited (code ${code})`));
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
log(chalk.green(` ✓ forwarding webhooks for ${label}`));
|
|
143
120
|
}
|
|
144
121
|
console.log(chalk.bold('\ncrosscheck watch\n'));
|
|
145
122
|
if (config.orgs.length > 0) {
|
|
@@ -150,28 +127,16 @@ export async function runWatch(configPath) {
|
|
|
150
127
|
}
|
|
151
128
|
console.log(` mode ${chalk.cyan(config.mode)}`);
|
|
152
129
|
console.log(` quality ${chalk.cyan(config.quality.tier)}`);
|
|
153
|
-
console.log(`
|
|
130
|
+
console.log(` port ${chalk.cyan(String(config.server.port))}`);
|
|
154
131
|
console.log();
|
|
155
132
|
console.log(chalk.dim('Waiting for PR events — Ctrl+C to stop and clean up.\n'));
|
|
156
|
-
const cleanup =
|
|
133
|
+
const cleanup = () => {
|
|
157
134
|
console.log('\nCleaning up...');
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
try {
|
|
161
|
-
if (hook.type === 'org') {
|
|
162
|
-
await deleteOrgWebhook(hook.org, hook.hookId, token);
|
|
163
|
-
console.log(` org webhook deregistered for ${hook.org}`);
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
await deleteRepoWebhook(hook.owner, hook.repo, hook.hookId, token);
|
|
167
|
-
console.log(` repo webhook deregistered for ${hook.owner}/${hook.repo}`);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
catch { /* best-effort cleanup */ }
|
|
171
|
-
}
|
|
135
|
+
for (const proc of forwarders)
|
|
136
|
+
proc.kill();
|
|
172
137
|
server.close(() => process.exit(0));
|
|
173
138
|
};
|
|
174
|
-
process.on('SIGINT',
|
|
175
|
-
process.on('SIGTERM',
|
|
139
|
+
process.on('SIGINT', cleanup);
|
|
140
|
+
process.on('SIGTERM', cleanup);
|
|
176
141
|
}
|
|
177
142
|
//# sourceMappingURL=watch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
|
package/dist/config/loader.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ import { type Config } from './schema.js';
|
|
|
2
2
|
export declare function loadConfig(explicitPath?: string): Config;
|
|
3
3
|
export declare function getGithubToken(): string;
|
|
4
4
|
export declare function getWebhookSecret(): string;
|
|
5
|
+
export declare function getWebhookSecretPath(): string;
|
|
5
6
|
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA;AAavD,wBAAgB,UAAU,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED,wBAAgB,cAAc,IAAI,MAAM,CAIvC;AAID,wBAAgB,gBAAgB,IAAI,MAAM,CAczC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
|
package/dist/config/loader.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { readFileSync, existsSync } from 'fs';
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
2
2
|
import { resolve, join } from 'path';
|
|
3
3
|
import { homedir } from 'os';
|
|
4
|
+
import { randomBytes } from 'crypto';
|
|
4
5
|
import yaml from 'js-yaml';
|
|
5
6
|
import { ConfigSchema } from './schema.js';
|
|
6
7
|
const CONFIG_FILENAME = 'crosscheck.config.yml';
|
|
@@ -25,10 +26,22 @@ export function getGithubToken() {
|
|
|
25
26
|
throw new Error('GITHUB_TOKEN or GH_TOKEN environment variable is required');
|
|
26
27
|
return token;
|
|
27
28
|
}
|
|
29
|
+
const SECRET_FILE = join(homedir(), '.crosscheck', 'webhook-secret');
|
|
28
30
|
export function getWebhookSecret() {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
// Env var takes precedence
|
|
32
|
+
const fromEnv = process.env.CROSSCHECK_WEBHOOK_SECRET ?? process.env.GITHUB_WEBHOOK_SECRET;
|
|
33
|
+
if (fromEnv)
|
|
34
|
+
return fromEnv;
|
|
35
|
+
// Persist and reuse an auto-generated secret
|
|
36
|
+
if (existsSync(SECRET_FILE)) {
|
|
37
|
+
return readFileSync(SECRET_FILE, 'utf8').trim();
|
|
38
|
+
}
|
|
39
|
+
const generated = randomBytes(32).toString('hex');
|
|
40
|
+
mkdirSync(join(homedir(), '.crosscheck'), { recursive: true });
|
|
41
|
+
writeFileSync(SECRET_FILE, generated, { mode: 0o600 });
|
|
42
|
+
return generated;
|
|
43
|
+
}
|
|
44
|
+
export function getWebhookSecretPath() {
|
|
45
|
+
return SECRET_FILE;
|
|
33
46
|
}
|
|
34
47
|
//# sourceMappingURL=loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AACvE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,IAAI,MAAM,SAAS,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAe,MAAM,aAAa,CAAA;AAEvD,MAAM,eAAe,GAAG,uBAAuB,CAAA;AAE/C,SAAS,cAAc;IACrB,MAAM,UAAU,GAAG;QACjB,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC;QACvC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,YAAY,CAAC;KAC7C,CAAA;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,YAAqB;IAC9C,MAAM,UAAU,GAAG,YAAY,IAAI,cAAc,EAAE,CAAA;IACnD,IAAI,CAAC,UAAU;QAAE,OAAO,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAE9C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;IACvD,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAA;IAC9D,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IACxF,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAA;AAEpE,MAAM,UAAU,gBAAgB;IAC9B,2BAA2B;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAA;IAC1F,IAAI,OAAO;QAAE,OAAO,OAAO,CAAA;IAE3B,6CAA6C;IAC7C,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;IACjD,CAAC;IAED,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjD,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9D,aAAa,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACtD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,WAAW,CAAA;AACpB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@motivation-labs/crosscheck",
|
|
3
|
-
"version": "0.1.0",
|
|
3
|
+
"version": "0.1.2-beta.500d8f0.0",
|
|
4
4
|
"description": "Cross-vendor AI code review orchestrator — Claude Code ↔ Codex",
|
|
5
5
|
"bin": {
|
|
6
6
|
"crosscheck": "dist/cli.js"
|
|
@@ -28,8 +28,7 @@
|
|
|
28
28
|
"js-yaml": "^4.1.0",
|
|
29
29
|
"octokit": "^4.0.2",
|
|
30
30
|
"ora": "^8.1.0",
|
|
31
|
-
"zod": "^3.23.8"
|
|
32
|
-
"smee-client": "^2.0.2"
|
|
31
|
+
"zod": "^3.23.8"
|
|
33
32
|
},
|
|
34
33
|
"devDependencies": {
|
|
35
34
|
"@types/js-yaml": "^4.0.9",
|