coolhand-cli 0.3.0 → 0.4.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/README.md +106 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +71 -58
- package/dist/cli.js.map +1 -1
- package/dist/commands/capture-sessions.d.ts +3 -0
- package/dist/commands/capture-sessions.d.ts.map +1 -0
- package/dist/commands/capture-sessions.js +79 -0
- package/dist/commands/capture-sessions.js.map +1 -0
- package/dist/commands/get-optimization.js +1 -1
- package/dist/commands/get-optimization.js.map +1 -1
- package/dist/commands/wildcard.d.ts +13 -0
- package/dist/commands/wildcard.d.ts.map +1 -0
- package/dist/commands/wildcard.js +72 -0
- package/dist/commands/wildcard.js.map +1 -0
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/log-request.d.ts +15 -0
- package/dist/log-request.d.ts.map +1 -0
- package/dist/log-request.js +51 -0
- package/dist/log-request.js.map +1 -0
- package/dist/sessions/capture-state.d.ts +20 -0
- package/dist/sessions/capture-state.d.ts.map +1 -0
- package/dist/sessions/capture-state.js +80 -0
- package/dist/sessions/capture-state.js.map +1 -0
- package/dist/sessions/claude-scanner.d.ts +50 -0
- package/dist/sessions/claude-scanner.d.ts.map +1 -0
- package/dist/sessions/claude-scanner.js +152 -0
- package/dist/sessions/claude-scanner.js.map +1 -0
- package/dist/types.d.ts +12 -12
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -22,17 +22,34 @@ Requires Node 20 or newer.
|
|
|
22
22
|
## Commands
|
|
23
23
|
|
|
24
24
|
```
|
|
25
|
-
coolhand login [--base-url URL] [--write-env PATH] [--client-id ID] [--json]
|
|
25
|
+
coolhand login [--base-url URL] [--scope private] [--write-env PATH] [--client-id ID] [--json]
|
|
26
26
|
coolhand logout [--client-id ID | --all] [--json]
|
|
27
27
|
coolhand status [--client-id ID] [--json]
|
|
28
28
|
coolhand whoami [--client-id ID]
|
|
29
29
|
coolhand clients [use <id>] [--json]
|
|
30
|
+
|
|
31
|
+
coolhand search-optimizations [--status V] [--type V] [--category V] [--query V]
|
|
32
|
+
[--from DATE] [--to DATE] [--days-back N]
|
|
33
|
+
[--template-id ID] [--workload-id ID]
|
|
34
|
+
[--sort-by impact_desc|complexity_asc|created_at_desc]
|
|
35
|
+
[--page N] [--per-page N] [--client-id ID] [--json]
|
|
36
|
+
coolhand get-optimization <id> [--client-id ID] [--json]
|
|
37
|
+
coolhand update-optimization <id> [--title V] [--analysis V] [--plan V] [--client-id ID] [--json]
|
|
38
|
+
coolhand close-optimization <id> <reason> [--client-id ID] [--json]
|
|
39
|
+
|
|
40
|
+
coolhand capture-sessions [--dry-run] [--client-id ID] [--json]
|
|
41
|
+
|
|
42
|
+
coolhand wildcard --complaint "..." --agent-name "..." [--thinking "..."] [--log-id ID] [--json]
|
|
43
|
+
coolhand report-blocker (alias for wildcard)
|
|
44
|
+
coolhand complaint-box (alias for wildcard)
|
|
30
45
|
```
|
|
31
46
|
|
|
32
47
|
### login
|
|
33
48
|
|
|
34
49
|
Opens your browser to the Coolhand consent page, listens on `127.0.0.1` for the callback, and stores the returned token. The token is the **public** `api_key` for the client you select — the same key you would use with `coolhand-node`, `coolhand-python`, or the `coolhand-js` widget.
|
|
35
50
|
|
|
51
|
+
`--scope private` authenticates against a private workspace instead of the default shared workspace.
|
|
52
|
+
|
|
36
53
|
`--write-env PATH` will additionally set `COOLHAND_API_KEY=<token>` in the target `.env` file (idempotent — replaces an existing value rather than appending a duplicate).
|
|
37
54
|
|
|
38
55
|
### status
|
|
@@ -56,6 +73,57 @@ Exit code is `0` if a token is configured for the default (or requested) client,
|
|
|
56
73
|
|
|
57
74
|
Multiple clients can be stored at once. `coolhand clients` lists them, `coolhand clients use <id>` switches the default. Each `coolhand login` adds (or refreshes) one entry, keyed by the server-assigned `client_id`.
|
|
58
75
|
|
|
76
|
+
## Optimization commands
|
|
77
|
+
|
|
78
|
+
Coolhand stores LLM-generated optimization suggestions as structured records. These commands let you query, update, and comment on them from the terminal or from agent workflows.
|
|
79
|
+
|
|
80
|
+
### search-optimizations
|
|
81
|
+
|
|
82
|
+
Lists optimizations with optional filtering and pagination.
|
|
83
|
+
|
|
84
|
+
| Flag | Description |
|
|
85
|
+
|------|-------------|
|
|
86
|
+
| `--status V` | Filter by status (e.g. `open`, `closed`) |
|
|
87
|
+
| `--type V` | Filter by optimization type |
|
|
88
|
+
| `--category V` | Filter by category |
|
|
89
|
+
| `--query V` | Free-text search |
|
|
90
|
+
| `--from DATE` | Start of date range |
|
|
91
|
+
| `--to DATE` | End of date range |
|
|
92
|
+
| `--days-back N` | Only show optimizations from the last N days |
|
|
93
|
+
| `--template-id ID` | Filter to a specific template |
|
|
94
|
+
| `--workload-id ID` | Filter to a specific workload |
|
|
95
|
+
| `--sort-by V` | Sort order: `impact_desc`, `complexity_asc`, or `created_at_desc` |
|
|
96
|
+
| `--page N` | Page number (default: 1) |
|
|
97
|
+
| `--per-page N` | Results per page (default: 20, max: 50) |
|
|
98
|
+
| `--client-id ID` | Use a specific stored client |
|
|
99
|
+
| `--json` | Emit JSON output |
|
|
100
|
+
|
|
101
|
+
Human-readable output includes a pagination hint: `Page N of M (X total)`.
|
|
102
|
+
|
|
103
|
+
### get-optimization
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
coolhand get-optimization <id>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Fetches a single optimization by ID. When present, the output includes PR information (`PR: #N <url>`) and a `--- Coding Prompt ---` block with the full coding prompt text.
|
|
110
|
+
|
|
111
|
+
### update-optimization
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
coolhand update-optimization <id> --title "..." --analysis "..." --plan "..."
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Updates an existing optimization. Only the flags you provide are changed.
|
|
118
|
+
|
|
119
|
+
### close-optimization
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
coolhand close-optimization <id> <reason>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Closes an optimization. The reason is a free-text positional argument (quote it if it contains spaces).
|
|
126
|
+
|
|
59
127
|
## Security
|
|
60
128
|
|
|
61
129
|
- The callback listener binds to `127.0.0.1` only — never reachable from the LAN.
|
|
@@ -96,6 +164,33 @@ coolhand login --write-env .env
|
|
|
96
164
|
|
|
97
165
|
The CLI works especially well with the [Coolhand feedback collection skill](https://github.com/Coolhand-Labs/feedback-collection-skill) for Claude Code. The skill scans your project for LLM inference calls and implements best-practice human feedback collection — it reads `COOLHAND_API_KEY` from the environment, which `coolhand login --write-env .env` puts in place.
|
|
98
166
|
|
|
167
|
+
### wildcard (agent complaint box)
|
|
168
|
+
|
|
169
|
+
When an agent is blocked because a capability does not exist in its environment, it can record the blocker and get back an unambiguous "stop and move on" response:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
coolhand wildcard \
|
|
173
|
+
--complaint "I need to run database migrations but no database is reachable" \
|
|
174
|
+
--agent-name code-review-agent
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
The command records the complaint as feedback tagged `creator_type: agent`, prints a terminal de-loop message, and exits `0` so the agent stops and moves on. The de-loop always fires — even if the feedback could not be recorded (not logged in or a server error) — because the missing capability is real regardless of whether the server was reachable, and a logged-out agent in a sandbox is exactly who this command is for. When recording fails the message says so plainly and a warning is logged, so the failure still surfaces without trapping the agent in the retry loop the command exists to break.
|
|
178
|
+
|
|
179
|
+
Set `COOLHAND_AGENT_NAME` to avoid passing `--agent-name` on every call. Optional `--thinking` attaches the reasoning that led to the blocker; `--log-id` ties it to a specific LLM request log.
|
|
180
|
+
|
|
181
|
+
### capture-sessions
|
|
182
|
+
|
|
183
|
+
Import locally-saved Claude Code sessions into Coolhand for analysis:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
coolhand capture-sessions # scan ~/.claude/projects/ and submit new sessions
|
|
187
|
+
coolhand capture-sessions --dry-run # report what would be submitted without sending
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Each Claude Code session is submitted as one conversation log. A local state file (`~/.coolhand/capture-state.json`) tracks which sessions have already been sent per client, so re-running is always safe — already-submitted sessions are skipped.
|
|
191
|
+
|
|
192
|
+
See [docs/session-capture.md](./docs/session-capture.md) for the full envelope format and deduplication details.
|
|
193
|
+
|
|
99
194
|
## Configuration file
|
|
100
195
|
|
|
101
196
|
Located at `$HOME/.coolhand/config.json` (override with `COOLHAND_CONFIG_DIR` for testing). Schema:
|
|
@@ -116,6 +211,16 @@ Located at `$HOME/.coolhand/config.json` (override with `COOLHAND_CONFIG_DIR` fo
|
|
|
116
211
|
}
|
|
117
212
|
```
|
|
118
213
|
|
|
214
|
+
## Documentation
|
|
215
|
+
|
|
216
|
+
- [Auth Flow](./docs/auth-flow.md) — browser-callback sequence, state machine, timeout and error paths
|
|
217
|
+
- [Configuration File](./docs/config-file.md) — full config schema, multi-client model, `COOLHAND_CONFIG_DIR` override
|
|
218
|
+
- [Session Capture](./docs/session-capture.md) — session scanning, envelope format, deduplication, scope and limitations
|
|
219
|
+
|
|
220
|
+
## About Coolhand Labs
|
|
221
|
+
|
|
222
|
+
[Coolhand Labs](https://coolhandlabs.com) builds observability and feedback tooling for AI-powered applications.
|
|
223
|
+
|
|
119
224
|
## License
|
|
120
225
|
|
|
121
226
|
Apache-2.0
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AA4BA,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CACzC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AA4BA,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CACzC;AAmLD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAqCpD;AAiOD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA+EzD"}
|
package/dist/cli.js
CHANGED
|
@@ -8,11 +8,11 @@ import { run as runWhoami } from './commands/whoami.js';
|
|
|
8
8
|
import { run as runClients } from './commands/clients.js';
|
|
9
9
|
import { run as runSearchOptimizations } from './commands/search-optimizations.js';
|
|
10
10
|
import { run as runGetOptimization } from './commands/get-optimization.js';
|
|
11
|
-
import { run as runAddOptimizationComment } from './commands/add-optimization-comment.js';
|
|
12
11
|
import { run as runCloseOptimization } from './commands/close-optimization.js';
|
|
13
|
-
import { run as runCreateOptimization } from './commands/create-optimization.js';
|
|
14
12
|
import { run as runUpdateOptimization } from './commands/update-optimization.js';
|
|
15
|
-
|
|
13
|
+
import { run as runWildcard } from './commands/wildcard.js';
|
|
14
|
+
import { run as runCaptureSessions } from './commands/capture-sessions.js';
|
|
15
|
+
const BOOLEAN_FLAGS = new Set(['all', 'help', 'h', 'json', 'version', 'v', 'dry-run']);
|
|
16
16
|
const COMMANDS = [
|
|
17
17
|
{
|
|
18
18
|
name: 'login',
|
|
@@ -91,43 +91,46 @@ const COMMANDS = [
|
|
|
91
91
|
],
|
|
92
92
|
},
|
|
93
93
|
{
|
|
94
|
-
name: '
|
|
95
|
-
oneLiner: '
|
|
96
|
-
usage: 'coolhand
|
|
94
|
+
name: 'close-optimization',
|
|
95
|
+
oneLiner: 'Close an optimization with a reason',
|
|
96
|
+
usage: 'coolhand close-optimization <id> <reason> [options]',
|
|
97
97
|
options: [
|
|
98
98
|
{ flag: '--client-id ID', description: 'Use a specific stored client' },
|
|
99
99
|
{ flag: '--json', description: 'Emit JSON output instead of human-readable text' },
|
|
100
100
|
],
|
|
101
101
|
},
|
|
102
102
|
{
|
|
103
|
-
name: '
|
|
104
|
-
oneLiner: '
|
|
105
|
-
usage: 'coolhand
|
|
103
|
+
name: 'update-optimization',
|
|
104
|
+
oneLiner: 'Update an existing optimization',
|
|
105
|
+
usage: 'coolhand update-optimization <id> [options]',
|
|
106
106
|
options: [
|
|
107
|
+
{ flag: '--title VALUE', description: 'New title' },
|
|
108
|
+
{ flag: '--analysis VALUE', description: 'New analysis text' },
|
|
109
|
+
{ flag: '--plan VALUE', description: 'New optimization plan' },
|
|
107
110
|
{ flag: '--client-id ID', description: 'Use a specific stored client' },
|
|
108
111
|
{ flag: '--json', description: 'Emit JSON output instead of human-readable text' },
|
|
109
112
|
],
|
|
110
113
|
},
|
|
111
114
|
{
|
|
112
|
-
name: '
|
|
113
|
-
|
|
114
|
-
|
|
115
|
+
name: 'wildcard',
|
|
116
|
+
aliases: ['complaint-box', 'report-blocker'],
|
|
117
|
+
oneLiner: 'Agent complaint box: report an unavailable capability and stop',
|
|
118
|
+
usage: 'coolhand wildcard --complaint "<what is blocking you>" --agent-name <name> [options]',
|
|
115
119
|
options: [
|
|
116
|
-
{ flag: '--
|
|
117
|
-
{ flag: '--
|
|
118
|
-
{ flag: '--
|
|
120
|
+
{ flag: '--complaint TEXT', description: 'What capability is missing or blocking you (required)' },
|
|
121
|
+
{ flag: '--agent-name NAME', description: 'Identifier for the calling agent (or set COOLHAND_AGENT_NAME)' },
|
|
122
|
+
{ flag: '--thinking TEXT', description: 'Optional reasoning/context that led to the blocker' },
|
|
123
|
+
{ flag: '--log-id N', description: 'Optional LLM request log id this blocker relates to' },
|
|
119
124
|
{ flag: '--client-id ID', description: 'Use a specific stored client' },
|
|
120
125
|
{ flag: '--json', description: 'Emit JSON output instead of human-readable text' },
|
|
121
126
|
],
|
|
122
127
|
},
|
|
123
128
|
{
|
|
124
|
-
name: '
|
|
125
|
-
oneLiner: '
|
|
126
|
-
usage: 'coolhand
|
|
129
|
+
name: 'capture-sessions',
|
|
130
|
+
oneLiner: 'Scan local Claude Code sessions and submit them to Coolhand',
|
|
131
|
+
usage: 'coolhand capture-sessions [options]',
|
|
127
132
|
options: [
|
|
128
|
-
{ flag: '--
|
|
129
|
-
{ flag: '--analysis VALUE', description: 'New analysis text' },
|
|
130
|
-
{ flag: '--plan VALUE', description: 'New optimization plan' },
|
|
133
|
+
{ flag: '--dry-run', description: 'Scan and report what would be submitted, without sending' },
|
|
131
134
|
{ flag: '--client-id ID', description: 'Use a specific stored client' },
|
|
132
135
|
{ flag: '--json', description: 'Emit JSON output instead of human-readable text' },
|
|
133
136
|
],
|
|
@@ -139,9 +142,13 @@ const COMMANDS = [
|
|
|
139
142
|
options: [],
|
|
140
143
|
},
|
|
141
144
|
];
|
|
145
|
+
function findCommand(name) {
|
|
146
|
+
return COMMANDS.find((c) => c.name === name || c.aliases?.includes(name));
|
|
147
|
+
}
|
|
142
148
|
function buildSummaryHelp() {
|
|
143
|
-
const
|
|
144
|
-
const
|
|
149
|
+
const rows = COMMANDS.flatMap((c) => [c, ...(c.aliases ?? []).map((a) => ({ ...c, name: a }))]);
|
|
150
|
+
const nameWidth = Math.max(...rows.map((r) => r.name.length)) + 2;
|
|
151
|
+
const commandLines = rows.map((r) => ` ${r.name.padEnd(nameWidth)}${r.oneLiner}`).join('\n');
|
|
145
152
|
return `coolhand-cli — authenticate with Coolhand from your terminal
|
|
146
153
|
|
|
147
154
|
Usage:
|
|
@@ -349,21 +356,6 @@ function getOptimizationOptions(parsed) {
|
|
|
349
356
|
}
|
|
350
357
|
return opts;
|
|
351
358
|
}
|
|
352
|
-
function addOptimizationCommentOptions(parsed) {
|
|
353
|
-
const id = parsed.positional[0];
|
|
354
|
-
const comment = parsed.positional.slice(1).join(' ').trim();
|
|
355
|
-
if (!id || !comment) {
|
|
356
|
-
throw new CliError('INVALID_ARGS', 'add-optimization-comment requires <id> and <comment> arguments');
|
|
357
|
-
}
|
|
358
|
-
const opts = { id, comment };
|
|
359
|
-
if (typeof parsed.flags['client-id'] === 'string') {
|
|
360
|
-
opts.clientId = parsed.flags['client-id'];
|
|
361
|
-
}
|
|
362
|
-
if (parsed.flags.json === true) {
|
|
363
|
-
opts.json = true;
|
|
364
|
-
}
|
|
365
|
-
return opts;
|
|
366
|
-
}
|
|
367
359
|
function closeOptimizationOptions(parsed) {
|
|
368
360
|
const id = parsed.positional[0];
|
|
369
361
|
const reason = parsed.positional.slice(1).join(' ').trim();
|
|
@@ -379,8 +371,12 @@ function closeOptimizationOptions(parsed) {
|
|
|
379
371
|
}
|
|
380
372
|
return opts;
|
|
381
373
|
}
|
|
382
|
-
function
|
|
383
|
-
const
|
|
374
|
+
function updateOptimizationOptions(parsed) {
|
|
375
|
+
const id = parsed.positional[0];
|
|
376
|
+
if (!id) {
|
|
377
|
+
throw new CliError('INVALID_ARGS', 'update-optimization requires an <id> argument');
|
|
378
|
+
}
|
|
379
|
+
const opts = { id };
|
|
384
380
|
if (typeof parsed.flags.title === 'string') {
|
|
385
381
|
opts.title = parsed.flags.title;
|
|
386
382
|
}
|
|
@@ -398,20 +394,37 @@ function createOptimizationOptions(parsed) {
|
|
|
398
394
|
}
|
|
399
395
|
return opts;
|
|
400
396
|
}
|
|
401
|
-
function
|
|
402
|
-
const
|
|
403
|
-
if (
|
|
404
|
-
|
|
397
|
+
function captureSessionsOptions(parsed) {
|
|
398
|
+
const opts = {};
|
|
399
|
+
if (parsed.flags['dry-run'] === true) {
|
|
400
|
+
opts.dryRun = true;
|
|
405
401
|
}
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
opts.title = parsed.flags.title;
|
|
402
|
+
if (typeof parsed.flags['client-id'] === 'string') {
|
|
403
|
+
opts.clientId = parsed.flags['client-id'];
|
|
409
404
|
}
|
|
410
|
-
if (
|
|
411
|
-
opts.
|
|
405
|
+
if (parsed.flags.json === true) {
|
|
406
|
+
opts.json = true;
|
|
412
407
|
}
|
|
413
|
-
|
|
414
|
-
|
|
408
|
+
return opts;
|
|
409
|
+
}
|
|
410
|
+
function wildcardOptions(parsed) {
|
|
411
|
+
const complaint = typeof parsed.flags.complaint === 'string' ? parsed.flags.complaint.trim() : '';
|
|
412
|
+
if (!complaint) {
|
|
413
|
+
throw new CliError('INVALID_ARGS', 'wildcard requires --complaint "<what is blocking you>"');
|
|
414
|
+
}
|
|
415
|
+
const agentName = typeof parsed.flags['agent-name'] === 'string' ? parsed.flags['agent-name'] : process.env.COOLHAND_AGENT_NAME;
|
|
416
|
+
if (!agentName) {
|
|
417
|
+
throw new CliError('INVALID_ARGS', 'wildcard requires --agent-name <name> (or set COOLHAND_AGENT_NAME)');
|
|
418
|
+
}
|
|
419
|
+
const opts = { complaint, agentName };
|
|
420
|
+
if (typeof parsed.flags.thinking === 'string') {
|
|
421
|
+
opts.thinking = parsed.flags.thinking;
|
|
422
|
+
}
|
|
423
|
+
if (typeof parsed.flags['log-id'] === 'string') {
|
|
424
|
+
const n = parseInt(parsed.flags['log-id'], 10);
|
|
425
|
+
if (!isNaN(n)) {
|
|
426
|
+
opts.logId = n;
|
|
427
|
+
}
|
|
415
428
|
}
|
|
416
429
|
if (typeof parsed.flags['client-id'] === 'string') {
|
|
417
430
|
opts.clientId = parsed.flags['client-id'];
|
|
@@ -434,7 +447,7 @@ export async function run(argv) {
|
|
|
434
447
|
if (parsed.command === 'help' || parsed.command === '') {
|
|
435
448
|
const target = parsed.positional[0];
|
|
436
449
|
if (target) {
|
|
437
|
-
const meta =
|
|
450
|
+
const meta = findCommand(target);
|
|
438
451
|
if (!meta) {
|
|
439
452
|
logger.info(`Unknown command: ${target}`);
|
|
440
453
|
logger.info(buildSummaryHelp());
|
|
@@ -448,7 +461,7 @@ export async function run(argv) {
|
|
|
448
461
|
return ExitCode.OK;
|
|
449
462
|
}
|
|
450
463
|
if (parsed.flags.help === true || parsed.flags.h === true) {
|
|
451
|
-
const meta =
|
|
464
|
+
const meta = findCommand(parsed.command);
|
|
452
465
|
if (meta) {
|
|
453
466
|
logger.info(buildCommandHelp(meta));
|
|
454
467
|
}
|
|
@@ -458,7 +471,7 @@ export async function run(argv) {
|
|
|
458
471
|
return ExitCode.OK;
|
|
459
472
|
}
|
|
460
473
|
try {
|
|
461
|
-
switch (parsed.command) {
|
|
474
|
+
switch (findCommand(parsed.command)?.name ?? parsed.command) {
|
|
462
475
|
case 'login':
|
|
463
476
|
return await runLogin(loginOptions(parsed));
|
|
464
477
|
case 'logout':
|
|
@@ -473,14 +486,14 @@ export async function run(argv) {
|
|
|
473
486
|
return await runSearchOptimizations(searchOptimizationsOptions(parsed));
|
|
474
487
|
case 'get-optimization':
|
|
475
488
|
return await runGetOptimization(getOptimizationOptions(parsed));
|
|
476
|
-
case 'add-optimization-comment':
|
|
477
|
-
return await runAddOptimizationComment(addOptimizationCommentOptions(parsed));
|
|
478
489
|
case 'close-optimization':
|
|
479
490
|
return await runCloseOptimization(closeOptimizationOptions(parsed));
|
|
480
|
-
case 'create-optimization':
|
|
481
|
-
return await runCreateOptimization(createOptimizationOptions(parsed));
|
|
482
491
|
case 'update-optimization':
|
|
483
492
|
return await runUpdateOptimization(updateOptimizationOptions(parsed));
|
|
493
|
+
case 'wildcard':
|
|
494
|
+
return await runWildcard(wildcardOptions(parsed));
|
|
495
|
+
case 'capture-sessions':
|
|
496
|
+
return await runCaptureSessions(captureSessionsOptions(parsed));
|
|
484
497
|
default:
|
|
485
498
|
logger.info(`Unknown command: ${parsed.command}`);
|
|
486
499
|
logger.info(buildSummaryHelp());
|
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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-sessions.d.ts","sourceRoot":"","sources":["../../src/commands/capture-sessions.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAK1D,wBAAsB,GAAG,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwEvE"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { CliError, ExitCode } from '../errors.js';
|
|
2
|
+
import { logger, redact } from '../logger.js';
|
|
3
|
+
import { scanSessions, sessionIdOf } from '../sessions/claude-scanner.js';
|
|
4
|
+
import { loadCaptureState, isSubmitted, markSubmitted, saveCaptureState, } from '../sessions/capture-state.js';
|
|
5
|
+
import { loadConfig, getClient } from '../config.js';
|
|
6
|
+
import { logRequest } from '../log-request.js';
|
|
7
|
+
/** Errors that apply to every session (auth/config), so the run should abort, not keep retrying. */
|
|
8
|
+
const FATAL_CODES = new Set(['NOT_CONFIGURED', 'CLIENT_NOT_FOUND', 'INVALID_BASE_URL']);
|
|
9
|
+
export async function run(opts) {
|
|
10
|
+
try {
|
|
11
|
+
const { envelopes, sessionCount } = await scanSessions();
|
|
12
|
+
// Scope the "already submitted" list to the client we're submitting to, so the same sessions
|
|
13
|
+
// can be sent to a different client if needed.
|
|
14
|
+
const cfg = await loadConfig();
|
|
15
|
+
const stateClientId = getClient(cfg, opts.clientId)?.client_id ?? opts.clientId ?? '_default';
|
|
16
|
+
const state = await loadCaptureState();
|
|
17
|
+
const pending = envelopes.filter((e) => !isSubmitted(state, stateClientId, sessionIdOf(e)));
|
|
18
|
+
const skipped = envelopes.length - pending.length;
|
|
19
|
+
if (opts.dryRun) {
|
|
20
|
+
if (opts.json) {
|
|
21
|
+
logger.json({ ok: true, dryRun: true, sessions: sessionCount, toSubmit: pending.length, skipped });
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
logger.info(`Dry run: found ${sessionCount} session(s), ${pending.length} new to submit, ` +
|
|
25
|
+
`${skipped} already submitted. Nothing sent.`);
|
|
26
|
+
}
|
|
27
|
+
return ExitCode.OK;
|
|
28
|
+
}
|
|
29
|
+
let submitted = 0;
|
|
30
|
+
let failed = 0;
|
|
31
|
+
try {
|
|
32
|
+
for (const envelope of pending) {
|
|
33
|
+
try {
|
|
34
|
+
await logRequest(envelope, { clientId: opts.clientId });
|
|
35
|
+
markSubmitted(state, stateClientId, sessionIdOf(envelope));
|
|
36
|
+
submitted += 1;
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
if (err instanceof CliError && FATAL_CODES.has(err.code)) {
|
|
40
|
+
throw err;
|
|
41
|
+
}
|
|
42
|
+
failed += 1;
|
|
43
|
+
logger.warn(`Failed to submit session: ${redact(err.message)}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
// Persist whatever we recorded, even if a fatal error aborts the run partway.
|
|
49
|
+
try {
|
|
50
|
+
await saveCaptureState(state);
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
logger.warn(`Failed to save capture state: ${redact(err.message)}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (opts.json) {
|
|
57
|
+
logger.json({ ok: failed === 0, sessions: sessionCount, submitted, skipped, failed });
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const failureNote = failed > 0 ? `, ${failed} failed` : '';
|
|
61
|
+
const skippedNote = skipped > 0 ? `, ${skipped} already submitted` : '';
|
|
62
|
+
logger.info(`Submitted ${submitted} session(s) of ${sessionCount} scanned${skippedNote}${failureNote}.`);
|
|
63
|
+
}
|
|
64
|
+
return failed === 0 ? ExitCode.OK : ExitCode.USER_ERROR;
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
if (err instanceof CliError) {
|
|
68
|
+
if (opts.json) {
|
|
69
|
+
logger.json({ ok: false, error: err.code, message: redact(err.message) });
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
logger.info(`Error: ${redact(err.message)} [${err.code}]`);
|
|
73
|
+
}
|
|
74
|
+
return err.exitCode;
|
|
75
|
+
}
|
|
76
|
+
throw err;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=capture-sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-sessions.js","sourceRoot":"","sources":["../../src/commands/capture-sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { logger, redact } from '../logger.js';
|
|
|
3
3
|
import { mcpCall } from './mcp-call.js';
|
|
4
4
|
export async function run(opts) {
|
|
5
5
|
try {
|
|
6
|
-
const result = await mcpCall('get_optimization', {
|
|
6
|
+
const result = await mcpCall('get_optimization', { id: opts.id }, { clientId: opts.clientId });
|
|
7
7
|
if (opts.json) {
|
|
8
8
|
logger.json({ ok: true, result });
|
|
9
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-optimization.js","sourceRoot":"","sources":["../../src/commands/get-optimization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAA4B;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"get-optimization.js","sourceRoot":"","sources":["../../src/commands/get-optimization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAA4B;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE/F,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,MAAiC,CAAC;YAC5C,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACpE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;gBACtC,MAAM,CAAC,IAAI,CAAC,4BAA4B,aAAa,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5E,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ComplaintBoxOptions } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Records an agent's free-form "I am blocked, this capability does not exist"
|
|
4
|
+
* complaint as feedback (tagged creator_type: "agent"), then prints a terminal
|
|
5
|
+
* de-loop message and exits 0 so the agent stops and moves on. The de-loop ALWAYS
|
|
6
|
+
* fires — even when the feedback could not be recorded — because the missing
|
|
7
|
+
* capability is real regardless of server state (and a logged-out agent in a
|
|
8
|
+
* sandbox is exactly who this command is for). When recording fails it says so
|
|
9
|
+
* plainly and logs a warning, so the failure still surfaces without trapping the
|
|
10
|
+
* agent in the retry loop the command exists to break.
|
|
11
|
+
*/
|
|
12
|
+
export declare function run(opts: ComplaintBoxOptions): Promise<number>;
|
|
13
|
+
//# sourceMappingURL=wildcard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wildcard.d.ts","sourceRoot":"","sources":["../../src/commands/wildcard.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAoBzE;;;;;;;;;GASG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2CpE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Coolhand } from 'coolhand-node';
|
|
2
|
+
import { ExitCode } from '../errors.js';
|
|
3
|
+
import { logger, redact } from '../logger.js';
|
|
4
|
+
import { loadConfig, getClient } from '../config.js';
|
|
5
|
+
import { DEFAULT_BASE_URL } from '../types.js';
|
|
6
|
+
// Terminal guidance that breaks the agent out of its retry loop. The missing
|
|
7
|
+
// capability is real regardless of whether we could reach the Coolhand server, so
|
|
8
|
+
// the de-loop is the agent's decision to make, not the server's.
|
|
9
|
+
const STOP_GUIDANCE = 'Do not retry this action or attempt alternative ways to perform it; continue with the rest of your task.';
|
|
10
|
+
// Printed when the blocker was successfully recorded server-side.
|
|
11
|
+
const DELOOP_RECORDED = 'This capability is not available in this environment. Your feedback has been recorded. ' + STOP_GUIDANCE;
|
|
12
|
+
// Printed when the blocker could NOT be recorded (e.g. not logged in, or the server
|
|
13
|
+
// did not confirm). We still de-loop the agent, but stay honest: we never claim a
|
|
14
|
+
// recording happened, and a warning is logged separately so the failure surfaces.
|
|
15
|
+
const DELOOP_UNRECORDED = 'This capability is not available in this environment. Your feedback could not be recorded ' +
|
|
16
|
+
'(not logged in, or the server did not confirm — run `coolhand login` to enable reporting). ' +
|
|
17
|
+
STOP_GUIDANCE;
|
|
18
|
+
/**
|
|
19
|
+
* Records an agent's free-form "I am blocked, this capability does not exist"
|
|
20
|
+
* complaint as feedback (tagged creator_type: "agent"), then prints a terminal
|
|
21
|
+
* de-loop message and exits 0 so the agent stops and moves on. The de-loop ALWAYS
|
|
22
|
+
* fires — even when the feedback could not be recorded — because the missing
|
|
23
|
+
* capability is real regardless of server state (and a logged-out agent in a
|
|
24
|
+
* sandbox is exactly who this command is for). When recording fails it says so
|
|
25
|
+
* plainly and logs a warning, so the failure still surfaces without trapping the
|
|
26
|
+
* agent in the retry loop the command exists to break.
|
|
27
|
+
*/
|
|
28
|
+
export async function run(opts) {
|
|
29
|
+
let recorded = false;
|
|
30
|
+
try {
|
|
31
|
+
const cfg = await loadConfig();
|
|
32
|
+
const client = getClient(cfg, opts.clientId);
|
|
33
|
+
const apiKey = client?.api_key ?? process.env.COOLHAND_API_KEY;
|
|
34
|
+
const baseUrl = client?.base_url ?? DEFAULT_BASE_URL;
|
|
35
|
+
if (!apiKey) {
|
|
36
|
+
logger.warn('Not logged in; blocker feedback was not recorded. Run `coolhand login` to enable reporting.');
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const coolhand = new Coolhand({ apiKey, baseUrl, silent: true });
|
|
40
|
+
// The SDK resolves to null (it does not throw) when the write fails, so a
|
|
41
|
+
// truthy response is the only proof the blocker was actually recorded.
|
|
42
|
+
const feedback = {
|
|
43
|
+
explanation: opts.complaint,
|
|
44
|
+
creator_unique_id: opts.agentName,
|
|
45
|
+
creator_type: 'agent',
|
|
46
|
+
...(opts.thinking ? { original_output: opts.thinking } : {}),
|
|
47
|
+
...(opts.logId !== undefined ? { llm_request_log_id: opts.logId } : {}),
|
|
48
|
+
};
|
|
49
|
+
const result = await coolhand.createFeedback(feedback);
|
|
50
|
+
recorded = result !== null && result !== undefined;
|
|
51
|
+
if (!recorded) {
|
|
52
|
+
logger.warn('Blocker feedback was not recorded: the server did not confirm the write.');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
logger.warn(`Could not record blocker feedback: ${redact(err.message)}`);
|
|
58
|
+
}
|
|
59
|
+
// Always de-loop: the capability genuinely does not exist, so the agent must stop
|
|
60
|
+
// whether or not we could notify the server. Stay honest about the recording status
|
|
61
|
+
// (warnings above already surfaced any failure) rather than gating the stop-signal
|
|
62
|
+
// on a confirmed write and leaving a logged-out agent stuck.
|
|
63
|
+
const message = recorded ? DELOOP_RECORDED : DELOOP_UNRECORDED;
|
|
64
|
+
if (opts.json === true) {
|
|
65
|
+
logger.json({ ok: true, recorded, message });
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
logger.info(message);
|
|
69
|
+
}
|
|
70
|
+
return ExitCode.OK;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=wildcard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wildcard.js","sourceRoot":"","sources":["../../src/commands/wildcard.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export declare enum ExitCode {
|
|
|
4
4
|
INTERNAL = 2,
|
|
5
5
|
ABORTED = 130
|
|
6
6
|
}
|
|
7
|
-
export type ErrorCode = 'TIMEOUT' | 'STATE_MISMATCH' | 'INVALID_CALLBACK' | 'BROWSER_FAILED' | 'CONFIG_WRITE_FAILED' | 'CONFIG_READ_FAILED' | 'NOT_CONFIGURED' | 'INVALID_REDIRECT_URI' | 'INVALID_BASE_URL' | 'INVALID_ARGS' | 'WRITE_ENV_FAILED' | 'CLIENT_NOT_FOUND' | 'NO_PRIVATE_KEY' | 'MCP_ERROR';
|
|
7
|
+
export type ErrorCode = 'TIMEOUT' | 'STATE_MISMATCH' | 'INVALID_CALLBACK' | 'BROWSER_FAILED' | 'CONFIG_WRITE_FAILED' | 'CONFIG_READ_FAILED' | 'NOT_CONFIGURED' | 'INVALID_REDIRECT_URI' | 'INVALID_BASE_URL' | 'INVALID_ARGS' | 'WRITE_ENV_FAILED' | 'CLIENT_NOT_FOUND' | 'NO_PRIVATE_KEY' | 'MCP_ERROR' | 'INGEST_ERROR';
|
|
8
8
|
export declare class CliError extends Error {
|
|
9
9
|
readonly code: ErrorCode;
|
|
10
10
|
readonly exitCode: number;
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,EAAE,IAAI;IACN,UAAU,IAAI;IACd,QAAQ,IAAI;IACZ,OAAO,MAAM;CACd;AAED,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,gBAAgB,GAChB,kBAAkB,GAClB,gBAAgB,GAChB,qBAAqB,GACrB,oBAAoB,GACpB,gBAAgB,GAChB,sBAAsB,GACtB,kBAAkB,GAClB,cAAc,GACd,kBAAkB,GAClB,kBAAkB,GAClB,gBAAgB,GAChB,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,EAAE,IAAI;IACN,UAAU,IAAI;IACd,QAAQ,IAAI;IACZ,OAAO,MAAM;CACd;AAED,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,gBAAgB,GAChB,kBAAkB,GAClB,gBAAgB,GAChB,qBAAqB,GACrB,oBAAoB,GACpB,gBAAgB,GAChB,sBAAsB,GACtB,kBAAkB,GAClB,cAAc,GACd,kBAAkB,GAClB,kBAAkB,GAClB,gBAAgB,GAChB,WAAW,GACX,cAAc,CAAC;AAEnB,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,IAAI,EAAE,SAAS,CAAC;IAChC,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAErB,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAA4B;CAMrF"}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,mCAAM,CAAA;IACN,mDAAc,CAAA;IACd,+CAAY,CAAA;IACZ,+CAAa,CAAA;AACf,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,mCAAM,CAAA;IACN,mDAAc,CAAA;IACd,+CAAY,CAAA;IACZ,+CAAa,CAAA;AACf,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAmBD,MAAM,OAAO,QAAS,SAAQ,KAAK;IAIjC,YAAY,IAAe,EAAE,OAAe,EAAE,WAAmB,QAAQ,CAAC,UAAU;QAClF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Submit one captured request/response envelope to the Coolhand ingest endpoint.
|
|
3
|
+
*
|
|
4
|
+
* Transport is delegated to coolhand-node's `Coolhand#logRequest`, which posts to the same
|
|
5
|
+
* `/api/v2/llm_request_logs` endpoint with the client's public `api_key`. The server
|
|
6
|
+
* deduplicates by the envelope's `response_body.id`, so re-submitting the same turn is harmless.
|
|
7
|
+
*
|
|
8
|
+
* The SDK swallows submission failures and returns `null`; we translate that (and a base_url
|
|
9
|
+
* rejection from the SDK constructor) back into a `CliError` so `capture-sessions` keeps its
|
|
10
|
+
* per-session success/failure accounting intact.
|
|
11
|
+
*/
|
|
12
|
+
export declare function logRequest(rawRequest: unknown, opts?: {
|
|
13
|
+
clientId?: string;
|
|
14
|
+
}): Promise<unknown>;
|
|
15
|
+
//# sourceMappingURL=log-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-request.d.ts","sourceRoot":"","sources":["../src/log-request.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,OAAO,EACnB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC,OAAO,CAAC,CAwClB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Coolhand } from 'coolhand-node';
|
|
2
|
+
import { CliError } from './errors.js';
|
|
3
|
+
import { loadConfig, getClient } from './config.js';
|
|
4
|
+
import { DEFAULT_BASE_URL } from './types.js';
|
|
5
|
+
/** Identifies submissions from this tool in the server's collector field. */
|
|
6
|
+
const COLLECTOR = 'coolhand-cli/claude-code';
|
|
7
|
+
/**
|
|
8
|
+
* Submit one captured request/response envelope to the Coolhand ingest endpoint.
|
|
9
|
+
*
|
|
10
|
+
* Transport is delegated to coolhand-node's `Coolhand#logRequest`, which posts to the same
|
|
11
|
+
* `/api/v2/llm_request_logs` endpoint with the client's public `api_key`. The server
|
|
12
|
+
* deduplicates by the envelope's `response_body.id`, so re-submitting the same turn is harmless.
|
|
13
|
+
*
|
|
14
|
+
* The SDK swallows submission failures and returns `null`; we translate that (and a base_url
|
|
15
|
+
* rejection from the SDK constructor) back into a `CliError` so `capture-sessions` keeps its
|
|
16
|
+
* per-session success/failure accounting intact.
|
|
17
|
+
*/
|
|
18
|
+
export async function logRequest(rawRequest, opts = {}) {
|
|
19
|
+
const cfg = await loadConfig();
|
|
20
|
+
const client = getClient(cfg, opts.clientId);
|
|
21
|
+
if (opts.clientId && !client) {
|
|
22
|
+
throw new CliError('CLIENT_NOT_FOUND', `No client "${opts.clientId}" is configured.`);
|
|
23
|
+
}
|
|
24
|
+
const apiKey = client?.api_key ?? process.env.COOLHAND_API_KEY;
|
|
25
|
+
if (!apiKey) {
|
|
26
|
+
throw new CliError('NOT_CONFIGURED', 'Not logged in. Run `coolhand login` to authenticate.');
|
|
27
|
+
}
|
|
28
|
+
const baseUrl = client?.base_url ?? DEFAULT_BASE_URL;
|
|
29
|
+
let coolhand;
|
|
30
|
+
try {
|
|
31
|
+
// The SDK validates baseUrl in its constructor (https required; http only for localhost).
|
|
32
|
+
coolhand = new Coolhand({ apiKey, baseUrl, silent: true });
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
throw new CliError('INVALID_BASE_URL', `Invalid base_url for client: ${baseUrl} (${err.message})`);
|
|
36
|
+
}
|
|
37
|
+
let result;
|
|
38
|
+
try {
|
|
39
|
+
result = await coolhand.logRequest(rawRequest, { collector: COLLECTOR });
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
throw new CliError('INGEST_ERROR', `Log submission failed: ${err.message}`);
|
|
43
|
+
}
|
|
44
|
+
// The SDK returns null when the POST fails (it reports the error itself). On Node >= 20 (our
|
|
45
|
+
// engine floor) fetch is always defined, so a null result here unambiguously means failure.
|
|
46
|
+
if (result === null) {
|
|
47
|
+
throw new CliError('INGEST_ERROR', 'Log submission failed.');
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=log-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-request.js","sourceRoot":"","sources":["../src/log-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAyB,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,6EAA6E;AAC7E,MAAM,SAAS,GAAG,0BAA0B,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAAmB,EACnB,OAA8B,EAAE;IAEhC,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE7C,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,cAAc,IAAI,CAAC,QAAQ,kBAAkB,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC/D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,QAAQ,CAChB,gBAAgB,EAChB,sDAAsD,CACvD,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,QAAQ,IAAI,gBAAgB,CAAC;IAErD,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,0FAA0F;QAC1F,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,gCAAgC,OAAO,KAAM,GAAa,CAAC,OAAO,GAAG,CAAC,CAAC;IAChH,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,UAA8B,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,QAAQ,CAAC,cAAc,EAAE,0BAA2B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,6FAA6F;IAC7F,4FAA4F;IAC5F,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local record of which Claude Code sessions have already been submitted, so re-running
|
|
3
|
+
* `capture-sessions` does not resend (and therefore re-create) a session the server already stored.
|
|
4
|
+
*
|
|
5
|
+
* The server cannot deduplicate these logs itself (its dedup runs before a log is classified, and
|
|
6
|
+
* matched logs are never re-checked), so the tool keeps this list and skips sessions already sent.
|
|
7
|
+
* Keyed per client id, since the same session may legitimately be submitted to more than one client.
|
|
8
|
+
*/
|
|
9
|
+
export interface CaptureState {
|
|
10
|
+
version: number;
|
|
11
|
+
submitted: Record<string, string[]>;
|
|
12
|
+
}
|
|
13
|
+
export declare function captureStatePath(): string;
|
|
14
|
+
export declare function loadCaptureState(): Promise<CaptureState>;
|
|
15
|
+
/** True if this session id has already been submitted for this client. */
|
|
16
|
+
export declare function isSubmitted(state: CaptureState, clientId: string, sessionId: string): boolean;
|
|
17
|
+
/** Record a session as submitted for this client (idempotent — no duplicate ids stored). */
|
|
18
|
+
export declare function markSubmitted(state: CaptureState, clientId: string, sessionId: string): void;
|
|
19
|
+
export declare function saveCaptureState(state: CaptureState): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=capture-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-state.d.ts","sourceRoot":"","sources":["../../src/sessions/capture-state.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACrC;AAMD,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAMD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CAuB9D;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAG7F;AAED,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAK5F;AAWD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBzE"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { randomBytes } from 'crypto';
|
|
4
|
+
import { configDir } from '../config.js';
|
|
5
|
+
import { CliError } from '../errors.js';
|
|
6
|
+
const STATE_FILENAME = 'capture-state.json';
|
|
7
|
+
const DIR_MODE = 0o700;
|
|
8
|
+
const FILE_MODE = 0o600;
|
|
9
|
+
export function captureStatePath() {
|
|
10
|
+
return path.join(configDir(), STATE_FILENAME);
|
|
11
|
+
}
|
|
12
|
+
function emptyState() {
|
|
13
|
+
return { version: 1, submitted: {} };
|
|
14
|
+
}
|
|
15
|
+
export async function loadCaptureState() {
|
|
16
|
+
const filePath = captureStatePath();
|
|
17
|
+
let raw;
|
|
18
|
+
try {
|
|
19
|
+
raw = await fs.readFile(filePath, 'utf8');
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
if (err.code === 'ENOENT') {
|
|
23
|
+
return emptyState();
|
|
24
|
+
}
|
|
25
|
+
throw new CliError('CONFIG_READ_FAILED', `Failed to read ${filePath}: ${err.message}`);
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const parsed = JSON.parse(raw);
|
|
29
|
+
return {
|
|
30
|
+
version: 1,
|
|
31
|
+
submitted: parsed.submitted ?? {},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
throw new CliError('CONFIG_READ_FAILED', `Capture state at ${filePath} is not valid JSON: ${err.message}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** True if this session id has already been submitted for this client. */
|
|
39
|
+
export function isSubmitted(state, clientId, sessionId) {
|
|
40
|
+
const list = state.submitted[clientId];
|
|
41
|
+
return Array.isArray(list) && list.includes(sessionId);
|
|
42
|
+
}
|
|
43
|
+
/** Record a session as submitted for this client (idempotent — no duplicate ids stored). */
|
|
44
|
+
export function markSubmitted(state, clientId, sessionId) {
|
|
45
|
+
const list = state.submitted[clientId] ?? (state.submitted[clientId] = []);
|
|
46
|
+
if (!list.includes(sessionId)) {
|
|
47
|
+
list.push(sessionId);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async function ensureDir(dir) {
|
|
51
|
+
await fs.mkdir(dir, { recursive: true, mode: DIR_MODE });
|
|
52
|
+
try {
|
|
53
|
+
await fs.chmod(dir, DIR_MODE);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// POSIX-only — Windows rejects chmod with this mode; ignore.
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export async function saveCaptureState(state) {
|
|
60
|
+
const filePath = captureStatePath();
|
|
61
|
+
const dir = path.dirname(filePath);
|
|
62
|
+
await ensureDir(dir);
|
|
63
|
+
const tmpPath = path.join(dir, `.${path.basename(filePath)}.${randomBytes(6).toString('hex')}.tmp`);
|
|
64
|
+
const data = `${JSON.stringify(state, null, 2)}\n`;
|
|
65
|
+
try {
|
|
66
|
+
await fs.writeFile(tmpPath, data, { mode: FILE_MODE });
|
|
67
|
+
await fs.rename(tmpPath, filePath);
|
|
68
|
+
try {
|
|
69
|
+
await fs.chmod(filePath, FILE_MODE);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// ignore on Windows
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
await fs.rm(tmpPath, { force: true }).catch(() => undefined);
|
|
77
|
+
throw new CliError('CONFIG_WRITE_FAILED', `Failed to write ${filePath}: ${err.message}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=capture-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-state.js","sourceRoot":"","sources":["../../src/sessions/capture-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAexC,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC;AACvB,MAAM,SAAS,GAAG,KAAK,CAAC;AAExB,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,cAAc,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,UAAU,EAAE,CAAC;QACtB,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,kBAAkB,QAAQ,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;QACxD,OAAO;YACL,OAAO,EAAE,CAAC;YACV,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;SAClC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,QAAQ,CAChB,oBAAoB,EACpB,oBAAoB,QAAQ,uBAAwB,GAAa,CAAC,OAAO,EAAE,CAC5E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,WAAW,CAAC,KAAmB,EAAE,QAAgB,EAAE,SAAiB;IAClF,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACzD,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,aAAa,CAAC,KAAmB,EAAE,QAAgB,EAAE,SAAiB;IACpF,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3E,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW;IAClC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,6DAA6D;IAC/D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAmB;IACxD,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IAErB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpG,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACvD,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;QACtB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,mBAAmB,QAAQ,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACtG,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** One message in the reconstructed conversation. */
|
|
2
|
+
export interface ConversationMessage {
|
|
3
|
+
role: string;
|
|
4
|
+
content: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* An Anthropic-shaped envelope for ONE whole Claude Code session (a conversation). The server's
|
|
8
|
+
* `claude_code` ingestor recognises it by the synthetic `claudecode://session/<sessionId>` url,
|
|
9
|
+
* stores the full back-and-forth (the server already treats a multi-message request as one "chat"
|
|
10
|
+
* log), and deduplicates on the session id. `request_body.messages` is the conversation;
|
|
11
|
+
* `response_body` is the final assistant turn; `response_body.usage` is the session's summed tokens.
|
|
12
|
+
*/
|
|
13
|
+
export interface CaptureEnvelope {
|
|
14
|
+
url: string;
|
|
15
|
+
method: string;
|
|
16
|
+
status_code: number;
|
|
17
|
+
request_body: {
|
|
18
|
+
model?: string;
|
|
19
|
+
messages: ConversationMessage[];
|
|
20
|
+
};
|
|
21
|
+
response_body: {
|
|
22
|
+
id: string;
|
|
23
|
+
type: string;
|
|
24
|
+
role: string;
|
|
25
|
+
model?: string;
|
|
26
|
+
content: unknown;
|
|
27
|
+
usage?: unknown;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface ScanResult {
|
|
31
|
+
envelopes: CaptureEnvelope[];
|
|
32
|
+
sessionCount: number;
|
|
33
|
+
}
|
|
34
|
+
export declare function defaultProjectsDir(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Parse one transcript's raw text (newline-delimited JSON) into a SINGLE session envelope holding
|
|
37
|
+
* the whole conversation — one log per session, not one per turn. Returns `null` when the transcript
|
|
38
|
+
* contains no assistant turns. Pure function (no filesystem) so it is easy to unit test.
|
|
39
|
+
*/
|
|
40
|
+
export declare function parseTranscript(content: string, sessionId: string): CaptureEnvelope | null;
|
|
41
|
+
/**
|
|
42
|
+
* Find every Claude Code transcript under `projectsDir` (default `~/.claude/projects`) and build one
|
|
43
|
+
* conversation envelope per session. A missing directory simply yields zero sessions.
|
|
44
|
+
*/
|
|
45
|
+
export declare function scanSessions(options?: {
|
|
46
|
+
projectsDir?: string;
|
|
47
|
+
}): Promise<ScanResult>;
|
|
48
|
+
/** The session id this envelope represents — used as the local dedup key. */
|
|
49
|
+
export declare function sessionIdOf(envelope: CaptureEnvelope): string;
|
|
50
|
+
//# sourceMappingURL=claude-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-scanner.d.ts","sourceRoot":"","sources":["../../src/sessions/claude-scanner.ts"],"names":[],"mappings":"AAIA,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,mBAAmB,EAAE,CAAC;KACjC,CAAC;IACF,aAAa,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAgCD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CA0F1F;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAkC9F;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAE7D"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import * as os from 'os';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
export function defaultProjectsDir() {
|
|
5
|
+
return path.join(os.homedir(), '.claude', 'projects');
|
|
6
|
+
}
|
|
7
|
+
/** Pull plain text out of a Claude message `content`, which is either a string or block array. */
|
|
8
|
+
function extractText(content) {
|
|
9
|
+
if (typeof content === 'string') {
|
|
10
|
+
return content;
|
|
11
|
+
}
|
|
12
|
+
if (Array.isArray(content)) {
|
|
13
|
+
return content
|
|
14
|
+
.filter((block) => Boolean(block) &&
|
|
15
|
+
typeof block === 'object' &&
|
|
16
|
+
block.type === 'text' &&
|
|
17
|
+
typeof block.text === 'string')
|
|
18
|
+
.map((block) => block.text)
|
|
19
|
+
.join('\n');
|
|
20
|
+
}
|
|
21
|
+
return '';
|
|
22
|
+
}
|
|
23
|
+
function toCount(value) {
|
|
24
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : 0;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse one transcript's raw text (newline-delimited JSON) into a SINGLE session envelope holding
|
|
28
|
+
* the whole conversation — one log per session, not one per turn. Returns `null` when the transcript
|
|
29
|
+
* contains no assistant turns. Pure function (no filesystem) so it is easy to unit test.
|
|
30
|
+
*/
|
|
31
|
+
export function parseTranscript(content, sessionId) {
|
|
32
|
+
const messages = [];
|
|
33
|
+
const usage = { input_tokens: 0, output_tokens: 0, cache_read_input_tokens: 0 };
|
|
34
|
+
let sawUsage = false;
|
|
35
|
+
let sessionModel;
|
|
36
|
+
let lastAssistant = null;
|
|
37
|
+
for (const line of content.split('\n')) {
|
|
38
|
+
const trimmed = line.trim();
|
|
39
|
+
if (!trimmed) {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
let event;
|
|
43
|
+
try {
|
|
44
|
+
event = JSON.parse(trimmed);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (!event || typeof event !== 'object') {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const message = event.message;
|
|
53
|
+
if (!message) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (event.type === 'user') {
|
|
57
|
+
// `user` events include tool results (no text) — only keep actual prompt text.
|
|
58
|
+
const text = extractText(message.content);
|
|
59
|
+
if (text) {
|
|
60
|
+
messages.push({ role: 'user', content: text });
|
|
61
|
+
}
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (event.type === 'assistant' && message.role === 'assistant') {
|
|
65
|
+
const requestId = typeof event.requestId === 'string'
|
|
66
|
+
? event.requestId
|
|
67
|
+
: typeof message.id === 'string'
|
|
68
|
+
? message.id
|
|
69
|
+
: undefined;
|
|
70
|
+
messages.push({ role: 'assistant', content: extractText(message.content) });
|
|
71
|
+
const model = typeof message.model === 'string' ? message.model : undefined;
|
|
72
|
+
if (model) {
|
|
73
|
+
sessionModel = model;
|
|
74
|
+
}
|
|
75
|
+
const turnUsage = message.usage;
|
|
76
|
+
if (turnUsage && typeof turnUsage === 'object') {
|
|
77
|
+
sawUsage = true;
|
|
78
|
+
usage.input_tokens += toCount(turnUsage.input_tokens);
|
|
79
|
+
usage.output_tokens += toCount(turnUsage.output_tokens);
|
|
80
|
+
usage.cache_read_input_tokens += toCount(turnUsage.cache_read_input_tokens);
|
|
81
|
+
}
|
|
82
|
+
lastAssistant = {
|
|
83
|
+
id: requestId ?? sessionId,
|
|
84
|
+
content: Array.isArray(message.content) ? message.content : [],
|
|
85
|
+
model,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// A session with no assistant turns has nothing to log.
|
|
90
|
+
if (!lastAssistant) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
url: `claudecode://session/${sessionId}`,
|
|
95
|
+
method: 'POST',
|
|
96
|
+
status_code: 200,
|
|
97
|
+
request_body: {
|
|
98
|
+
model: sessionModel,
|
|
99
|
+
messages,
|
|
100
|
+
},
|
|
101
|
+
response_body: {
|
|
102
|
+
id: lastAssistant.id,
|
|
103
|
+
type: 'message',
|
|
104
|
+
role: 'assistant',
|
|
105
|
+
model: lastAssistant.model ?? sessionModel,
|
|
106
|
+
content: lastAssistant.content,
|
|
107
|
+
usage: sawUsage ? usage : undefined,
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Find every Claude Code transcript under `projectsDir` (default `~/.claude/projects`) and build one
|
|
113
|
+
* conversation envelope per session. A missing directory simply yields zero sessions.
|
|
114
|
+
*/
|
|
115
|
+
export async function scanSessions(options = {}) {
|
|
116
|
+
const dir = options.projectsDir ?? defaultProjectsDir();
|
|
117
|
+
let names;
|
|
118
|
+
try {
|
|
119
|
+
names = await fs.readdir(dir, { recursive: true });
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
if (err.code === 'ENOENT') {
|
|
123
|
+
return { envelopes: [], sessionCount: 0 };
|
|
124
|
+
}
|
|
125
|
+
throw err;
|
|
126
|
+
}
|
|
127
|
+
const files = names.filter((name) => name.endsWith('.jsonl'));
|
|
128
|
+
const envelopes = [];
|
|
129
|
+
let sessionCount = 0;
|
|
130
|
+
for (const relativePath of files) {
|
|
131
|
+
let content;
|
|
132
|
+
try {
|
|
133
|
+
content = await fs.readFile(path.join(dir, relativePath), 'utf8');
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// Unreadable transcript — skip it rather than failing the whole scan.
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
sessionCount += 1;
|
|
140
|
+
const sessionId = path.basename(relativePath, '.jsonl');
|
|
141
|
+
const envelope = parseTranscript(content, sessionId);
|
|
142
|
+
if (envelope) {
|
|
143
|
+
envelopes.push(envelope);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return { envelopes, sessionCount };
|
|
147
|
+
}
|
|
148
|
+
/** The session id this envelope represents — used as the local dedup key. */
|
|
149
|
+
export function sessionIdOf(envelope) {
|
|
150
|
+
return envelope.url.replace(/^claudecode:\/\/session\//, '');
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=claude-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-scanner.js","sourceRoot":"","sources":["../../src/sessions/claude-scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -71,30 +71,30 @@ export interface GetOptimizationOptions {
|
|
|
71
71
|
json?: boolean;
|
|
72
72
|
clientId?: string;
|
|
73
73
|
}
|
|
74
|
-
export interface AddOptimizationCommentOptions {
|
|
75
|
-
id: string;
|
|
76
|
-
comment: string;
|
|
77
|
-
json?: boolean;
|
|
78
|
-
clientId?: string;
|
|
79
|
-
}
|
|
80
74
|
export interface CloseOptimizationOptions {
|
|
81
75
|
id: string;
|
|
82
76
|
reason: string;
|
|
83
77
|
json?: boolean;
|
|
84
78
|
clientId?: string;
|
|
85
79
|
}
|
|
86
|
-
export interface
|
|
80
|
+
export interface UpdateOptimizationOptions {
|
|
81
|
+
id: string;
|
|
87
82
|
title?: string;
|
|
88
83
|
analysis?: string;
|
|
89
84
|
plan?: string;
|
|
90
85
|
json?: boolean;
|
|
91
86
|
clientId?: string;
|
|
92
87
|
}
|
|
93
|
-
export interface
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
88
|
+
export interface CaptureSessionsOptions {
|
|
89
|
+
dryRun?: boolean;
|
|
90
|
+
clientId?: string;
|
|
91
|
+
json?: boolean;
|
|
92
|
+
}
|
|
93
|
+
export interface ComplaintBoxOptions {
|
|
94
|
+
complaint: string;
|
|
95
|
+
agentName: string;
|
|
96
|
+
thinking?: string;
|
|
97
|
+
logId?: number;
|
|
98
98
|
json?: boolean;
|
|
99
99
|
clientId?: string;
|
|
100
100
|
}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,CAAC;IACX,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,KAAK,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,CAAC;IACX,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,KAAK,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,gBAAgB,6BAA6B,CAAC;AAC3D,eAAO,MAAM,kBAAkB,QAAgB,CAAC"}
|
package/dist/version.d.ts
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Auto-generated from package.json — do not edit manually.
|
|
3
3
|
* Run `npm run sync-version` or `npm run build` to regenerate.
|
|
4
4
|
*/
|
|
5
|
-
export declare const PACKAGE_VERSION = "0.
|
|
5
|
+
export declare const PACKAGE_VERSION = "0.4.0";
|
|
6
6
|
export declare const PACKAGE_NAME = "coolhand-cli";
|
|
7
7
|
/**
|
|
8
8
|
* Full package identifier
|
|
9
9
|
*/
|
|
10
|
-
export declare const PACKAGE_IDENTIFIER = "coolhand-cli-0.
|
|
10
|
+
export declare const PACKAGE_IDENTIFIER = "coolhand-cli-0.4.0";
|
|
11
11
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Auto-generated from package.json — do not edit manually.
|
|
3
3
|
* Run `npm run sync-version` or `npm run build` to regenerate.
|
|
4
4
|
*/
|
|
5
|
-
export const PACKAGE_VERSION = '0.
|
|
5
|
+
export const PACKAGE_VERSION = '0.4.0';
|
|
6
6
|
export const PACKAGE_NAME = 'coolhand-cli';
|
|
7
7
|
/**
|
|
8
8
|
* Full package identifier
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "coolhand-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "CLI for authenticating with Coolhand and retrieving API tokens from a local dev environment",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -58,7 +58,11 @@
|
|
|
58
58
|
"clean": "rm -rf dist coverage",
|
|
59
59
|
"smoke": "node dist/bin.js --version"
|
|
60
60
|
},
|
|
61
|
+
"dependencies": {
|
|
62
|
+
"coolhand-node": "^0.7.0"
|
|
63
|
+
},
|
|
61
64
|
"devDependencies": {
|
|
65
|
+
"@eslint/js": "^9.36.0",
|
|
62
66
|
"@types/jest": "^30.0.0",
|
|
63
67
|
"@types/node": "^20.0.0",
|
|
64
68
|
"@typescript-eslint/eslint-plugin": "^8.45.0",
|
|
@@ -69,7 +73,6 @@
|
|
|
69
73
|
"jest": "^30.2.0",
|
|
70
74
|
"ts-jest": "^29.4.4",
|
|
71
75
|
"ts-node": "^10.9.0",
|
|
72
|
-
"typescript": "^5.0.0"
|
|
73
|
-
"@eslint/js": "^9.36.0"
|
|
76
|
+
"typescript": "^5.0.0"
|
|
74
77
|
}
|
|
75
78
|
}
|