@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 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. Check your environment
60
- crosscheck init
59
+ # 2. Guided setup — auth, repos, review mode, workflow pipeline
60
+ crosscheck onboard
61
61
 
62
- # 3. Test against a single PR
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 watch` opens a `localhost.run` SSH tunnel (no install, no account), auto-registers a GitHub webhook, and starts listening. GitHub delivers PR events; crosscheck routes them to the right reviewer.
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
- # fast → quick scan, top issues only (~10s, lowest cost)
33
- # balanced → full review, all issues with explanations (~30s)
34
- # thorough → deep multi-pass, security + architecture (~60s+)
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":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,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;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACzD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAwB,CAAA;AAE/G,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;AAChF,MAAM,WAAW,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAA;AAE5D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,mDAAmD,CAAC;KAChE,OAAO,CAAC,OAAO,OAAO,EAAE,CAAC,CAAA;AAE5B,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,SAAS,CAAC;KAClB,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;KAC1D,MAAM,CAAC,WAAW,EAAE,4CAA4C,CAAC;KACjE,MAAM,CAAC,YAAY,EAAE,0DAA0D,CAAC;KAChF,MAAM,CAAC,QAAQ,EAAE,sDAAsD,CAAC;KACxE,MAAM,CAAC,eAAe,EAAE,wEAAwE,CAAC;KACjG,MAAM,CAAC,CAAC,IAAmG,EAAE,EAAE,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;AAEzI,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,YAAY,EAAE,2DAA2D,CAAC;KACjF,MAAM,CAAC,QAAQ,EAAE,uDAAuD,CAAC;KACzE,MAAM,CAAC,eAAe,EAAE,uDAAuD,CAAC;KAChF,MAAM,CAAC,gBAAgB,EAAE,4DAA4D,CAAC;KACtF,MAAM,CAAC,CAAC,IAAyG,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;AAE7I,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,YAAY,EAAE,2DAA2D,CAAC;KACjF,MAAM,CAAC,QAAQ,EAAE,uDAAuD,CAAC;KACzE,MAAM,CAAC,eAAe,EAAE,uDAAuD,CAAC;KAChF,MAAM,CAAC,gBAAgB,EAAE,4DAA4D,CAAC;KACtF,MAAM,CAAC,CAAC,IAAyG,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;AAE7I,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,cAAc,CAAC;KACvB,WAAW,CAAC,mFAAmF,CAAC;KAChG,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,yBAAyB,EAAE,4EAA4E,CAAC;KAC/G,MAAM,CAAC,gBAAgB,EAAE,gEAAgE,CAAC;KAC1F,MAAM,CAAC,WAAW,EAAE,yDAAyD,CAAC;KAC9E,MAAM,CAAC,CAAC,KAAa,EAAE,IAA8E,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;AAEtI,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;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,2FAA2F,CAAC;KACxG,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAC9C,MAAM,CAAC,gBAAgB,EAAE,sDAAsD,CAAC;KAChF,MAAM,CAAC,CAAC,IAAwC,EAAE,EAAE,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;AAE/E,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,gEAAgE,CAAC;KAC7E,MAAM,CAAC,SAAS,EAAE,kEAAkE,CAAC;KACrF,MAAM,CAAC,WAAW,EAAE,8CAA8C,CAAC;KACnE,MAAM,CAAC,kBAAkB,EAAE,wCAAwC,CAAC;KACpE,MAAM,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;KAClE,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,CAAC,IAA4F,EAAE,EAAE,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;AAEnI,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,8EAA8E,CAAC;KAC3F,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAC9C,MAAM,CAAC,gBAAgB,EAAE,sDAAsD,CAAC;KAChF,MAAM,CAAC,SAAS,EAAE,mCAAmC,CAAC;KACtD,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,CAAC,IAA0E,EAAE,EAAE,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;AAE/G,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,2FAA2F,CAAC;KACxG,MAAM,CAAC,gBAAgB,EAAE,2EAA2E,CAAC;KACrG,MAAM,CAAC,WAAW,EAAE,oCAAoC,CAAC;KACzD,MAAM,CAAC,WAAW,EAAE,6CAA6C,CAAC;KAClE,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,CAAC,IAA0E,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;AAE9G,OAAO,CAAC,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -19,5 +19,6 @@ export declare function runIssue(opts: {
19
19
  dryRun?: boolean;
20
20
  yes?: boolean;
21
21
  config?: string;
22
+ opportunities?: boolean;
22
23
  }): Promise<void>;
23
24
  //# sourceMappingURL=issue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"AAuBA,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;AAqHD,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;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwLhB"}
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"}
@@ -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(' ');