@motivation-labs/crosscheck 0.7.1-beta.de2de10.0 → 0.7.1-beta.dfc1bd5.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/ISSUE.md +234 -0
- package/README.md +4 -7
- package/crosscheck.config.example.yml +11 -3
- package/dist/__tests__/backtrace.test.js +2 -2
- package/dist/__tests__/backtrace.test.js.map +1 -1
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/issue.d.ts +1 -0
- package/dist/commands/issue.d.ts.map +1 -1
- package/dist/commands/issue.js +146 -5
- package/dist/commands/issue.js.map +1 -1
- package/dist/commands/onboard.d.ts.map +1 -1
- package/dist/commands/onboard.js +291 -89
- package/dist/commands/onboard.js.map +1 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +15 -2
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +59 -17
- package/dist/commands/watch.js.map +1 -1
- package/dist/github/client.d.ts +1 -0
- package/dist/github/client.d.ts.map +1 -1
- package/dist/github/client.js +4 -3
- package/dist/github/client.js.map +1 -1
- package/dist/lib/board.d.ts.map +1 -1
- package/dist/lib/board.js +57 -55
- package/dist/lib/board.js.map +1 -1
- package/dist/lib/port.d.ts +2 -0
- package/dist/lib/port.d.ts.map +1 -0
- package/dist/lib/port.js +21 -0
- package/dist/lib/port.js.map +1 -0
- package/dist/lib/repo-picker.d.ts +11 -0
- package/dist/lib/repo-picker.d.ts.map +1 -1
- package/dist/lib/repo-picker.js +94 -16
- package/dist/lib/repo-picker.js.map +1 -1
- package/get-started.md +86 -22
- package/package.json +2 -1
package/ISSUE.md
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
# ISSUE.md — crosscheck issue analysis harness
|
|
2
|
+
|
|
3
|
+
You are analyzing `~/.crosscheck/logs/*.ndjson` to find bugs and improvement opportunities
|
|
4
|
+
in the crosscheck project and draft GitHub issues for `Motivation-Labs/crosscheck`.
|
|
5
|
+
|
|
6
|
+
Your job is to surface patterns that a simple error-count approach would miss: session
|
|
7
|
+
instability, tunnel failure modes, process crash loops, and reliability regressions.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Log schema
|
|
12
|
+
|
|
13
|
+
Each line in a `.ndjson` file is one JSON event with at minimum:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
{ "ts": "<ISO-8601 UTC>", "level": "info|warn|error", "event": "<name>", ...fields }
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Events that matter most
|
|
20
|
+
|
|
21
|
+
| Event | Key fields | Meaning |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| `session_start` | `command` | A new watch/serve process started |
|
|
24
|
+
| `session_end` | — | Process exited cleanly (graceful shutdown) |
|
|
25
|
+
| `tunnel_opened` | `url` | Tunnel is live; url is `lhr.life` or `smee.io` |
|
|
26
|
+
| `tunnel_closed` | `reconnecting: bool` | Tunnel dropped; reconnecting if true |
|
|
27
|
+
| `tunnel_error` | `message` | SSH failure; message contains "did not start within" (timeout) or "exit (code 255)" (hard exit) |
|
|
28
|
+
| `webhook_registered` | `repo` | Webhook confirmed active |
|
|
29
|
+
| `webhook_register_retry` | — | Webhook registration retrying |
|
|
30
|
+
| `webhook_error` | `message` | Webhook registration failed |
|
|
31
|
+
| `pr_received` | `repo`, `pr` | Incoming PR event |
|
|
32
|
+
| `review_started` | `reviewer`, `pr` | Review agent invoked |
|
|
33
|
+
| `review_complete` | `verdict`, `duration_ms` | Review finished |
|
|
34
|
+
| `verdict_parse_failed` | — | Agent output did not contain a parseable VERDICT line |
|
|
35
|
+
| `error` | `message` | Any runtime error |
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## How to compute sessions
|
|
40
|
+
|
|
41
|
+
Split all log entries on `session_start` events. Each session is the slice of events
|
|
42
|
+
from one `session_start` up to (but not including) the next `session_start`.
|
|
43
|
+
|
|
44
|
+
For each session compute:
|
|
45
|
+
|
|
46
|
+
| Field | How |
|
|
47
|
+
|---|---|
|
|
48
|
+
| `duration_min` | `(last_event.ts - session_start.ts)` in minutes |
|
|
49
|
+
| `clean_exit` | Session contains a `session_end` event |
|
|
50
|
+
| `tunnel_opened` | Any `tunnel_opened` event present |
|
|
51
|
+
| `tunnel_type` | `"lhr.life"` / `"smee.io"` / `"none"` from tunnel url |
|
|
52
|
+
| `tunnel_error_count` | Count of `tunnel_error` events |
|
|
53
|
+
| `ssh_timeout_count` | `tunnel_error` where message contains `"did not start within"` |
|
|
54
|
+
| `ssh_255_count` | `tunnel_error` where message contains `"255"` |
|
|
55
|
+
| `reconnect_count` | `tunnel_closed` events where `reconnecting: true` |
|
|
56
|
+
| `webhook_registered` | Any `webhook_registered` event present |
|
|
57
|
+
| `pr_received` | Any `pr_received` event present |
|
|
58
|
+
| `review_completed` | Any `review_complete` event present |
|
|
59
|
+
| `error_count` | Events where `level == "error"` |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Analysis 1 — Session stability
|
|
64
|
+
|
|
65
|
+
Compute per-session stats and then aggregate.
|
|
66
|
+
|
|
67
|
+
**Aggregate metrics to report:**
|
|
68
|
+
- Total sessions, total days covered
|
|
69
|
+
- Average / median session lifespan (minutes)
|
|
70
|
+
- % sessions with clean exit (`session_end` present)
|
|
71
|
+
- % sessions where tunnel never opened
|
|
72
|
+
- % sessions where webhook was never registered
|
|
73
|
+
- Longest and shortest session
|
|
74
|
+
|
|
75
|
+
**Thresholds that indicate a reportable problem:**
|
|
76
|
+
|
|
77
|
+
| Condition | Severity | Report type |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| avg session lifespan < 15 min across any single day | high | bug |
|
|
80
|
+
| > 40% of sessions never reach `tunnel_opened` | high | bug |
|
|
81
|
+
| > 50% of sessions have no `session_end` (abrupt death) | medium | improvement |
|
|
82
|
+
| ≥ 5 sessions in any 90-minute window all under 5 min | high | bug — rapid restart loop |
|
|
83
|
+
| > 30% of sessions have no `webhook_registered` | medium | improvement |
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Analysis 2 — Tunnel reliability
|
|
88
|
+
|
|
89
|
+
**Aggregate metrics:**
|
|
90
|
+
- Count of `tunnel_opened`, `tunnel_closed`, `tunnel_error` across all sessions
|
|
91
|
+
- SSH timeout count vs SSH code-255 count (from `tunnel_error` messages)
|
|
92
|
+
- Reconnect rate: `reconnect_count / tunnel_closed_count`
|
|
93
|
+
- Terminal close rate: `tunnel_closed` where `reconnecting: false`
|
|
94
|
+
- % of sessions that never reached `tunnel_opened`
|
|
95
|
+
|
|
96
|
+
**Key insight to encode:** Sessions that accumulate many tunnel errors and reconnects
|
|
97
|
+
can still survive long — the reconnect logic is working. The real kill signal is
|
|
98
|
+
`tunnel_opened == false`, not high `tunnel_error_count`.
|
|
99
|
+
|
|
100
|
+
**Thresholds:**
|
|
101
|
+
|
|
102
|
+
| Condition | Severity | Report type |
|
|
103
|
+
|---|---|---|
|
|
104
|
+
| SSH timeout rate > 60% of tunnel errors | high | bug — connectivity or lhr.life instability |
|
|
105
|
+
| SSH code-255 rate > 20% of tunnel errors | high | bug — SSH process crash |
|
|
106
|
+
| Terminal close rate > 30% of tunnel closes | high | bug — tunnel not recovering |
|
|
107
|
+
| > 40% sessions never open a tunnel | high | bug |
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Analysis 3 — Process health (crash loops)
|
|
112
|
+
|
|
113
|
+
This is distinct from tunnel failure. A process crash loop has these signatures:
|
|
114
|
+
- Rapid session restarts (≥ 5 sessions in 90 minutes)
|
|
115
|
+
- Sessions dying before `tunnel_opened` with **zero** tunnel errors
|
|
116
|
+
- `error` events containing `gh repo clone`, `Command failed`, or `ENOENT`
|
|
117
|
+
- Sessions with normal `tunnel_error_count` but very short lifespan
|
|
118
|
+
|
|
119
|
+
**What to look for:**
|
|
120
|
+
- Cluster rapid-restart windows: sessions where `duration_min < 5` AND `tunnel_opened == false`
|
|
121
|
+
AND `tunnel_error_count == 0`. These are process crashes, not connectivity failures.
|
|
122
|
+
- Extract the `error` event messages from those sessions to identify the root cause.
|
|
123
|
+
- Check if `verdict_parse_failed` or `webhook_error` events appear in the final 60 seconds
|
|
124
|
+
of abrupt-death sessions — these indicate the review or webhook path is triggering exits.
|
|
125
|
+
|
|
126
|
+
**Thresholds:**
|
|
127
|
+
|
|
128
|
+
| Condition | Severity | Report type |
|
|
129
|
+
|---|---|---|
|
|
130
|
+
| ≥ 5 sessions: duration < 5 min AND tunnel_opened=false AND tunnel_errors=0 | critical | bug — startup crash loop |
|
|
131
|
+
| `gh repo clone` in any error message | high | bug — clone failure |
|
|
132
|
+
| `verdict_parse_failed` in final 60s of > 20% abrupt-death sessions | medium | improvement — VERDICT format reliability |
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## The two failure modes (always distinguish these in your report)
|
|
137
|
+
|
|
138
|
+
**Mode A — Tunnel failure:** Sessions die because SSH connectivity fails and the tunnel
|
|
139
|
+
never comes up. Signals: `ssh_timeout_count > 0` OR `ssh_255_count > 0` in failed sessions.
|
|
140
|
+
Root cause: network, lhr.life instability, or SSH configuration.
|
|
141
|
+
|
|
142
|
+
**Mode B — Process crash:** Sessions die fast with zero tunnel errors. The process exits
|
|
143
|
+
before even attempting a tunnel. Signals: `duration_min < 3`, `tunnel_opened = false`,
|
|
144
|
+
`tunnel_error_count = 0`, error messages about `gh`, `clone`, `ENOENT`, or similar.
|
|
145
|
+
Root cause: code bug, missing dependency, bad config, or file system issue.
|
|
146
|
+
|
|
147
|
+
Never combine these two modes in a single issue. They have different root causes and
|
|
148
|
+
different fixes.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Improvement opportunities (not bugs)
|
|
153
|
+
|
|
154
|
+
File an improvement issue when the system is working but data shows a reliability gap:
|
|
155
|
+
|
|
156
|
+
| Pattern | Issue title pattern | Label |
|
|
157
|
+
|---|---|---|
|
|
158
|
+
| avg session lifespan 15–30 min (should be hours) | `watch: improve session longevity — avg Xmin` | `improvement` |
|
|
159
|
+
| smee.io has 0 tunnel errors but lhr.life does not | `watch: add smee.io as automatic tunnel fallback` | `improvement` |
|
|
160
|
+
| Reconnect works but adds latency | `tunnel: reduce reconnect gap when lhr.life drops` | `improvement` |
|
|
161
|
+
| `webhook_registered` strongly predicts session survival | `watch: surface webhook status earlier in startup sequence` | `improvement` |
|
|
162
|
+
| `verdict_parse_failed` events in logs | `review: harden VERDICT line parsing — N parse failures found` | `improvement` |
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Output format
|
|
167
|
+
|
|
168
|
+
For each issue you file, output exactly:
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
TITLE: <concise title under 80 characters>
|
|
172
|
+
LABELS: <comma-separated: bug, improvement, priority:high, priority:low>
|
|
173
|
+
---
|
|
174
|
+
<GitHub-flavored markdown body>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Required body sections
|
|
178
|
+
|
|
179
|
+
**For bugs:**
|
|
180
|
+
```markdown
|
|
181
|
+
## Summary
|
|
182
|
+
One paragraph describing the failure pattern and impact on the user.
|
|
183
|
+
|
|
184
|
+
## Evidence from logs
|
|
185
|
+
Exact metrics from your analysis (counts, percentages, session table if relevant).
|
|
186
|
+
Use a code block for representative raw log entries — sanitize any PII or tokens.
|
|
187
|
+
|
|
188
|
+
## Failure mode
|
|
189
|
+
State clearly: Mode A (tunnel failure) or Mode B (process crash), and why.
|
|
190
|
+
|
|
191
|
+
## Reproduction signals
|
|
192
|
+
What log patterns indicate this bug is active. How to check if it's happening.
|
|
193
|
+
|
|
194
|
+
## Suggested fix direction
|
|
195
|
+
One sentence on where in the codebase to look. Do not prescribe the implementation.
|
|
196
|
+
|
|
197
|
+
## Environment
|
|
198
|
+
crosscheck version (from log entries if present), platform, date range analyzed.
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**For improvements:**
|
|
202
|
+
```markdown
|
|
203
|
+
## Summary
|
|
204
|
+
One paragraph describing the opportunity and expected benefit.
|
|
205
|
+
|
|
206
|
+
## Evidence from logs
|
|
207
|
+
The metrics that surfaced this opportunity.
|
|
208
|
+
|
|
209
|
+
## Current behavior vs desired behavior
|
|
210
|
+
Two-line contrast: what happens now, what should happen instead.
|
|
211
|
+
|
|
212
|
+
## Suggested approach
|
|
213
|
+
One paragraph, high level. Do not write code.
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## What NOT to report
|
|
219
|
+
|
|
220
|
+
- Single-occurrence errors with no clear pattern
|
|
221
|
+
- Events that are expected (e.g., one `tunnel_closed` followed immediately by `tunnel_opened`)
|
|
222
|
+
- Issues already covered by an existing `crosscheck diagnose` error pattern
|
|
223
|
+
(`command_not_found`, `base_branch_missing`, `timeout`, `auth_failure`)
|
|
224
|
+
- Anything requiring access to source code you were not given — stay in the log data
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Prioritization
|
|
229
|
+
|
|
230
|
+
If you find multiple issues, report them in this order:
|
|
231
|
+
1. Startup crash loops (Mode B, critical) — they prevent any work from happening
|
|
232
|
+
2. Tunnel-never-opens rate > 40% (Mode A, high) — degrades session reliability
|
|
233
|
+
3. Short average session lifespan (< 15 min/day) — signals chronic instability
|
|
234
|
+
4. Improvement opportunities — after bugs are covered
|
package/README.md
CHANGED
|
@@ -56,17 +56,14 @@ npm install -g @anthropic-ai/claude-code && claude # Claude Pro/Max subsc
|
|
|
56
56
|
npm install -g @openai/codex && codex login --device-auth # ChatGPT Plus/Pro subscription
|
|
57
57
|
brew install gh && gh auth login # GitHub CLI
|
|
58
58
|
|
|
59
|
-
# 2.
|
|
60
|
-
crosscheck
|
|
59
|
+
# 2. Guided setup — auth, repos, review mode, workflow pipeline
|
|
60
|
+
crosscheck onboard
|
|
61
61
|
|
|
62
|
-
# 3.
|
|
63
|
-
crosscheck review https://github.com/your-org/repo/pull/42
|
|
64
|
-
|
|
65
|
-
# 4. Run continuously
|
|
62
|
+
# 3. Run continuously
|
|
66
63
|
crosscheck watch
|
|
67
64
|
```
|
|
68
65
|
|
|
69
|
-
`crosscheck
|
|
66
|
+
`crosscheck onboard` walks you through seven steps: environment check, deployment mode (personal vs team), repo selection, review mode (cross-vendor or single-vendor), workflow pipeline (review-only / review+fix / review+fix+recheck), connection type (localhost.run vs smee.io), and config write. `crosscheck watch` then opens a tunnel (localhost.run by default, or smee.io if you selected it), auto-registers the webhook, and starts listening.
|
|
70
67
|
|
|
71
68
|
---
|
|
72
69
|
|
|
@@ -29,9 +29,17 @@ vendors:
|
|
|
29
29
|
# ─── Quality & Focus ─────────────────────────────────────────────────────────
|
|
30
30
|
quality:
|
|
31
31
|
tier: balanced # fast | balanced | thorough
|
|
32
|
-
#
|
|
33
|
-
#
|
|
34
|
-
#
|
|
32
|
+
#
|
|
33
|
+
# Tier determines the model and effort level used for each vendor:
|
|
34
|
+
#
|
|
35
|
+
# tier claude codex time cost
|
|
36
|
+
# ───────── ─────────────────── ─────────── ─────── ──────
|
|
37
|
+
# fast haiku · low o4-mini · low ~10s lowest
|
|
38
|
+
# balanced sonnet · medium o4-mini · med ~30s standard
|
|
39
|
+
# thorough sonnet · max o3 · high ~60s higher
|
|
40
|
+
#
|
|
41
|
+
# crosscheck onboard writes these automatically when you pick a tier.
|
|
42
|
+
# You can override individual vendor settings in the vendors: block below.
|
|
35
43
|
|
|
36
44
|
focus: # optional — narrows review scope
|
|
37
45
|
- security
|
|
@@ -83,8 +83,8 @@ describe('scanUnreviewedPRs', () => {
|
|
|
83
83
|
it('expands org scopes to individual repos', async () => {
|
|
84
84
|
const scopes = [{ org: 'acme' }];
|
|
85
85
|
mockListOrgRepos.mockResolvedValue([
|
|
86
|
-
{ owner: 'acme', name: 'api' },
|
|
87
|
-
{ owner: 'acme', name: 'frontend' },
|
|
86
|
+
{ owner: 'acme', name: 'api', pushedAt: null },
|
|
87
|
+
{ owner: 'acme', name: 'frontend', pushedAt: null },
|
|
88
88
|
]);
|
|
89
89
|
mockListOpenPRs.mockResolvedValue([]);
|
|
90
90
|
await scanUnreviewedPRs(scopes, defaultConfig, 'token');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backtrace.test.js","sourceRoot":"","sources":["../../src/__tests__/backtrace.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"backtrace.test.js","sourceRoot":"","sources":["../../src/__tests__/backtrace.test.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -104,6 +104,7 @@ program
|
|
|
104
104
|
.option('--dry-run', 'print the draft without submitting')
|
|
105
105
|
.option('-y, --yes', 'skip interactive questions and confirmation')
|
|
106
106
|
.option('-c, --config <path>', 'config file path')
|
|
107
|
+
.option('--opportunities', 'analyze logs for reliability patterns and improvement opportunities instead of error patterns')
|
|
107
108
|
.action((opts) => void runIssue(opts));
|
|
108
109
|
program.parse();
|
|
109
110
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/issue.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"AAwDA,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAkBjF;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACtC,OAAO,EAAE,eAAe,GACvB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAUjC;AA4JD,wBAAsB,QAAQ,CAAC,IAAI,EAAE;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2OhB"}
|
package/dist/commands/issue.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync, mkdtempSync, writeFileSync, rmSync, readFileSync } from 'fs';
|
|
1
|
+
import { existsSync, mkdtempSync, writeFileSync, rmSync, readFileSync, readdirSync } from 'fs';
|
|
2
2
|
import { fileURLToPath } from 'url';
|
|
3
3
|
import { dirname, join, resolve } from 'path';
|
|
4
4
|
import { homedir, platform, tmpdir } from 'os';
|
|
@@ -14,6 +14,44 @@ const __dirname = dirname(__filename);
|
|
|
14
14
|
const PACKAGE_ROOT = resolve(__dirname, '..', '..');
|
|
15
15
|
const LOG_DIR = join(homedir(), '.crosscheck', 'logs');
|
|
16
16
|
const ISSUE_REPO = 'Motivation-Labs/crosscheck';
|
|
17
|
+
function loadIssueHarness(cwd) {
|
|
18
|
+
const candidates = [
|
|
19
|
+
join(cwd, 'ISSUE.md'),
|
|
20
|
+
join(cwd, '.crosscheck', 'ISSUE.md'),
|
|
21
|
+
join(PACKAGE_ROOT, 'ISSUE.md'),
|
|
22
|
+
];
|
|
23
|
+
for (const p of candidates) {
|
|
24
|
+
if (existsSync(p))
|
|
25
|
+
return readFileSync(p, 'utf8');
|
|
26
|
+
}
|
|
27
|
+
return '';
|
|
28
|
+
}
|
|
29
|
+
function loadRawLogEntries(since) {
|
|
30
|
+
if (!existsSync(LOG_DIR))
|
|
31
|
+
return [];
|
|
32
|
+
const sinceMs = new Date(since).getTime();
|
|
33
|
+
const entries = [];
|
|
34
|
+
for (const f of readdirSync(LOG_DIR).sort()) {
|
|
35
|
+
if (!f.endsWith('.ndjson'))
|
|
36
|
+
continue;
|
|
37
|
+
const fileDate = f.replace('.ndjson', '');
|
|
38
|
+
if (fileDate < since.slice(0, 10))
|
|
39
|
+
continue;
|
|
40
|
+
const lines = readFileSync(join(LOG_DIR, f), 'utf8').split('\n');
|
|
41
|
+
for (const line of lines) {
|
|
42
|
+
const trimmed = line.trim();
|
|
43
|
+
if (!trimmed)
|
|
44
|
+
continue;
|
|
45
|
+
try {
|
|
46
|
+
const entry = JSON.parse(trimmed);
|
|
47
|
+
if (new Date(entry.ts).getTime() >= sinceMs)
|
|
48
|
+
entries.push(entry);
|
|
49
|
+
}
|
|
50
|
+
catch { /* skip malformed lines */ }
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return entries;
|
|
54
|
+
}
|
|
17
55
|
const { version: PKG_VERSION } = JSON.parse(readFileSync(join(PACKAGE_ROOT, 'package.json'), 'utf8'));
|
|
18
56
|
export function parseDraft(output) {
|
|
19
57
|
const lines = output.split('\n');
|
|
@@ -97,6 +135,38 @@ function buildAgentPrompt(errorPattern, errorCount, daysSince, reviewer, entries
|
|
|
97
135
|
'Do not invent details not present in the provided context.',
|
|
98
136
|
].filter(Boolean).join('\n');
|
|
99
137
|
}
|
|
138
|
+
function buildOpportunityPrompt(harness, entries, daysSince, mode) {
|
|
139
|
+
const sample = entries
|
|
140
|
+
.filter(e => ['session_start', 'session_end', 'tunnel_opened', 'tunnel_closed',
|
|
141
|
+
'tunnel_error', 'webhook_registered', 'webhook_error', 'pr_received',
|
|
142
|
+
'review_complete', 'verdict_parse_failed', 'error'].includes(e.event))
|
|
143
|
+
.map(e => JSON.stringify(sanitizeEntry(e)))
|
|
144
|
+
.join('\n');
|
|
145
|
+
return [
|
|
146
|
+
harness,
|
|
147
|
+
'',
|
|
148
|
+
'---',
|
|
149
|
+
'',
|
|
150
|
+
`## Log data to analyze (last ${daysSince} day${daysSince !== 1 ? 's' : ''})`,
|
|
151
|
+
'',
|
|
152
|
+
`Environment: crosscheck ${PKG_VERSION} · ${platform()} · mode: ${mode}`,
|
|
153
|
+
`Total events loaded: ${entries.length}`,
|
|
154
|
+
'',
|
|
155
|
+
'Filtered events (session lifecycle, tunnel, webhook, review):',
|
|
156
|
+
'```',
|
|
157
|
+
sample || '(no matching events in range)',
|
|
158
|
+
'```',
|
|
159
|
+
'',
|
|
160
|
+
'Apply the analysis framework above. Identify the highest-priority issue or',
|
|
161
|
+
'improvement opportunity present in this data. Output exactly:',
|
|
162
|
+
'TITLE: <concise title under 80 characters>',
|
|
163
|
+
'LABELS: <comma-separated labels>',
|
|
164
|
+
'---',
|
|
165
|
+
'<issue body per the Output format section above>',
|
|
166
|
+
'',
|
|
167
|
+
'Report one issue only — the highest priority finding.',
|
|
168
|
+
].join('\n');
|
|
169
|
+
}
|
|
100
170
|
async function runWithClaude(prompt) {
|
|
101
171
|
let result;
|
|
102
172
|
try {
|
|
@@ -158,6 +228,78 @@ export async function runIssue(opts) {
|
|
|
158
228
|
console.error(chalk.yellow('No logs found. Run `crosscheck watch` or `crosscheck serve` first.'));
|
|
159
229
|
return;
|
|
160
230
|
}
|
|
231
|
+
const config = loadConfig(opts.config);
|
|
232
|
+
const days = daysBetween(since);
|
|
233
|
+
// --- Opportunity analysis mode (--opportunities) ---
|
|
234
|
+
if (opts.opportunities) {
|
|
235
|
+
const harness = loadIssueHarness(process.cwd());
|
|
236
|
+
if (!harness) {
|
|
237
|
+
console.error(chalk.red('✗ ISSUE.md harness not found — expected at project root or .crosscheck/ISSUE.md'));
|
|
238
|
+
process.exit(1);
|
|
239
|
+
}
|
|
240
|
+
console.log(chalk.dim(' loading logs for opportunity analysis...'));
|
|
241
|
+
const allEntries = loadRawLogEntries(since);
|
|
242
|
+
if (allEntries.length === 0) {
|
|
243
|
+
console.log(' No log entries found in range — nothing to analyze');
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
console.log(chalk.dim(` ${allEntries.length} events across ${days} day${days !== 1 ? 's' : ''}`));
|
|
247
|
+
const prompt = buildOpportunityPrompt(harness, allEntries, days, config.mode);
|
|
248
|
+
const candidates = [];
|
|
249
|
+
try {
|
|
250
|
+
const sel = selectOptimizeAgent(config, buildDiagnoseReport(since, LOG_DIR));
|
|
251
|
+
candidates.push(sel.agent);
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
candidates.push('claude');
|
|
255
|
+
}
|
|
256
|
+
const fallback = ['claude', 'codex'].find(v => !candidates.includes(v) && config.vendors[v].enabled);
|
|
257
|
+
if (fallback)
|
|
258
|
+
candidates.push(fallback);
|
|
259
|
+
let agentOutput;
|
|
260
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
261
|
+
const agent = candidates[i];
|
|
262
|
+
const reason = i === 0 ? 'selected by optimize logic' : `fallback — ${candidates[i - 1]} failed`;
|
|
263
|
+
console.log(chalk.dim(` analyzing with ${agent} (${reason})...`));
|
|
264
|
+
try {
|
|
265
|
+
agentOutput = agent === 'claude'
|
|
266
|
+
? await runWithClaude(prompt)
|
|
267
|
+
: await runWithCodex(prompt);
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
catch (err) {
|
|
271
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
272
|
+
const hasNext = i < candidates.length - 1;
|
|
273
|
+
console.error(chalk.yellow(` ✗ ${agent} failed: ${msg}${hasNext ? ' — trying next agent...' : ''}`));
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
if (agentOutput === undefined) {
|
|
277
|
+
console.error(chalk.red('✗ all configured agents failed'));
|
|
278
|
+
process.exit(1);
|
|
279
|
+
}
|
|
280
|
+
const draftParsed = parseDraft(agentOutput);
|
|
281
|
+
if (!draftParsed) {
|
|
282
|
+
console.error(chalk.red('✗ Agent returned unexpected output format'));
|
|
283
|
+
console.error(chalk.dim(' Expected: TITLE: line, then ---, then body'));
|
|
284
|
+
process.exit(1);
|
|
285
|
+
}
|
|
286
|
+
const cleanDraft = sanitizeDraftContent(draftParsed.title, draftParsed.body);
|
|
287
|
+
printDraft(cleanDraft.title, cleanDraft.body);
|
|
288
|
+
if (opts.dryRun) {
|
|
289
|
+
console.log(chalk.dim(' (dry run — not submitting)'));
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
if (!opts.yes) {
|
|
293
|
+
const confirmed = await ask(` Submit to ${ISSUE_REPO}? [y/N]: `);
|
|
294
|
+
if (!/^y(es)?$/i.test(confirmed)) {
|
|
295
|
+
console.log(' Cancelled.');
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
await submitIssue(cleanDraft.title, cleanDraft.body, ['improvement']);
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
// --- Default mode: error-pattern bug report ---
|
|
161
303
|
// 1. Scan logs for error patterns
|
|
162
304
|
console.log(chalk.dim(' scanning logs...'));
|
|
163
305
|
const report = buildDiagnoseReport(since, LOG_DIR);
|
|
@@ -168,7 +310,6 @@ export async function runIssue(opts) {
|
|
|
168
310
|
// 2. Select which error to report
|
|
169
311
|
let errorIdx = 0;
|
|
170
312
|
if (report.errors.length > 1 && !opts.yes) {
|
|
171
|
-
const days = daysBetween(since);
|
|
172
313
|
console.log(chalk.bold(`\n Found ${report.errors.length} error patterns in the last ${days} day${days !== 1 ? 's' : ''}:\n`));
|
|
173
314
|
report.errors.forEach((e, i) => {
|
|
174
315
|
const label = errorLabel(e).padEnd(44);
|
|
@@ -185,7 +326,6 @@ export async function runIssue(opts) {
|
|
|
185
326
|
// 3. Load representative log entries for this pattern
|
|
186
327
|
const rawEntries = loadErrorEntriesForPattern(selected.pattern, selected.command, since);
|
|
187
328
|
// 4. Select agents — primary first, then other enabled vendor as fallback
|
|
188
|
-
const config = loadConfig(opts.config);
|
|
189
329
|
const candidates = [];
|
|
190
330
|
let primaryReason = 'default';
|
|
191
331
|
try {
|
|
@@ -200,7 +340,6 @@ export async function runIssue(opts) {
|
|
|
200
340
|
if (fallbackVendor)
|
|
201
341
|
candidates.push(fallbackVendor);
|
|
202
342
|
// 5. Draft issue via AI agent — try each candidate in order
|
|
203
|
-
const days = daysBetween(since);
|
|
204
343
|
const prompt = buildAgentPrompt(errorLabel(selected), selected.count, days, selected.reviewer, rawEntries, config.mode);
|
|
205
344
|
let agentOutput;
|
|
206
345
|
for (let i = 0; i < candidates.length; i++) {
|
|
@@ -264,6 +403,9 @@ export async function runIssue(opts) {
|
|
|
264
403
|
const labels = ['bug'];
|
|
265
404
|
if (answers.impact === 'Blocked')
|
|
266
405
|
labels.push('priority:high');
|
|
406
|
+
await submitIssue(title, body, labels);
|
|
407
|
+
}
|
|
408
|
+
async function submitIssue(title, body, labels) {
|
|
267
409
|
const ghArgs = [
|
|
268
410
|
'issue', 'create',
|
|
269
411
|
'--repo', ISSUE_REPO,
|
|
@@ -284,7 +426,6 @@ export async function runIssue(opts) {
|
|
|
284
426
|
else {
|
|
285
427
|
console.error(chalk.yellow(` gh issue create failed: ${msg}`));
|
|
286
428
|
}
|
|
287
|
-
// Fall back to printing the command the user can run manually
|
|
288
429
|
const escapedTitle = title.replace(/'/g, "'\\''");
|
|
289
430
|
const escapedBody = body.replace(/'/g, "'\\''");
|
|
290
431
|
const labelsStr = labels.map(l => `--label '${l}'`).join(' ');
|