coolhand-cli 0.9.0 → 0.11.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 +11 -2
- package/dist/api/last-sync.d.ts.map +1 -1
- package/dist/api/last-sync.js +2 -1
- package/dist/api/last-sync.js.map +1 -1
- package/dist/api/llm-reference-client.d.ts +25 -0
- package/dist/api/llm-reference-client.d.ts.map +1 -0
- package/dist/api/llm-reference-client.js +49 -0
- package/dist/api/llm-reference-client.js.map +1 -0
- package/dist/api/template-client.d.ts +19 -0
- package/dist/api/template-client.d.ts.map +1 -0
- package/dist/api/template-client.js +47 -0
- package/dist/api/template-client.js.map +1 -0
- package/dist/auth/open-browser.d.ts.map +1 -1
- package/dist/auth/open-browser.js +3 -1
- package/dist/auth/open-browser.js.map +1 -1
- package/dist/base-url.d.ts +7 -0
- package/dist/base-url.d.ts.map +1 -0
- package/dist/base-url.js +14 -0
- package/dist/base-url.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +325 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze-claude-sessions.d.ts.map +1 -1
- package/dist/commands/analyze-claude-sessions.js +10 -21
- package/dist/commands/analyze-claude-sessions.js.map +1 -1
- package/dist/commands/get-template.d.ts +3 -0
- package/dist/commands/get-template.d.ts.map +1 -0
- package/dist/commands/get-template.js +66 -0
- package/dist/commands/get-template.js.map +1 -0
- package/dist/commands/list-referenced-file-sessions.d.ts +3 -0
- package/dist/commands/list-referenced-file-sessions.d.ts.map +1 -0
- package/dist/commands/list-referenced-file-sessions.js +44 -0
- package/dist/commands/list-referenced-file-sessions.js.map +1 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +3 -2
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/map-claude-projects.d.ts +22 -0
- package/dist/commands/map-claude-projects.d.ts.map +1 -0
- package/dist/commands/map-claude-projects.js +302 -0
- package/dist/commands/map-claude-projects.js.map +1 -0
- package/dist/commands/search-referenced-files.d.ts +3 -0
- package/dist/commands/search-referenced-files.d.ts.map +1 -0
- package/dist/commands/search-referenced-files.js +53 -0
- package/dist/commands/search-referenced-files.js.map +1 -0
- package/dist/commands/search-templates.d.ts +3 -0
- package/dist/commands/search-templates.d.ts.map +1 -0
- package/dist/commands/search-templates.js +63 -0
- package/dist/commands/search-templates.js.map +1 -0
- package/dist/commands/sync-skills.d.ts +18 -0
- package/dist/commands/sync-skills.d.ts.map +1 -0
- package/dist/commands/sync-skills.js +222 -0
- package/dist/commands/sync-skills.js.map +1 -0
- package/dist/commands/upload-client-file.d.ts +3 -0
- package/dist/commands/upload-client-file.d.ts.map +1 -0
- package/dist/commands/upload-client-file.js +43 -0
- package/dist/commands/upload-client-file.js.map +1 -0
- package/dist/commands/wildcard.d.ts +6 -6
- package/dist/commands/wildcard.d.ts.map +1 -1
- package/dist/commands/wildcard.js +14 -11
- package/dist/commands/wildcard.js.map +1 -1
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +31 -8
- package/dist/config.js.map +1 -1
- 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 +4 -0
- package/dist/log-request.d.ts.map +1 -1
- package/dist/log-request.js +8 -1
- package/dist/log-request.js.map +1 -1
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +30 -1
- package/dist/logger.js.map +1 -1
- package/dist/proxy/certs.d.ts.map +1 -1
- package/dist/proxy/certs.js +145 -5
- package/dist/proxy/certs.js.map +1 -1
- package/dist/proxy/interceptor.d.ts +8 -1
- package/dist/proxy/interceptor.d.ts.map +1 -1
- package/dist/proxy/interceptor.js +36 -3
- package/dist/proxy/interceptor.js.map +1 -1
- package/dist/proxy/proxy.d.ts.map +1 -1
- package/dist/proxy/proxy.js +75 -6
- package/dist/proxy/proxy.js.map +1 -1
- package/dist/proxy/wrap-runner.d.ts +2 -17
- package/dist/proxy/wrap-runner.d.ts.map +1 -1
- package/dist/proxy/wrap-runner.js +13 -29
- package/dist/proxy/wrap-runner.js.map +1 -1
- package/dist/sessions/claude-scanner.d.ts +3 -0
- package/dist/sessions/claude-scanner.d.ts.map +1 -1
- package/dist/sessions/claude-scanner.js +8 -0
- package/dist/sessions/claude-scanner.js.map +1 -1
- package/dist/sessions/cowork-scanner.d.ts.map +1 -1
- package/dist/sessions/cowork-scanner.js +6 -1
- package/dist/sessions/cowork-scanner.js.map +1 -1
- package/dist/sessions/redact-secrets.d.ts.map +1 -1
- package/dist/sessions/redact-secrets.js +13 -2
- package/dist/sessions/redact-secrets.js.map +1 -1
- package/dist/sessions/session-filter.d.ts +3 -1
- package/dist/sessions/session-filter.d.ts.map +1 -1
- package/dist/sessions/session-filter.js +9 -3
- package/dist/sessions/session-filter.js.map +1 -1
- package/dist/skills/skill-scanner.d.ts +55 -0
- package/dist/skills/skill-scanner.d.ts.map +1 -0
- package/dist/skills/skill-scanner.js +132 -0
- package/dist/skills/skill-scanner.js.map +1 -0
- package/dist/skills/skill-state.d.ts +29 -0
- package/dist/skills/skill-state.d.ts.map +1 -0
- package/dist/skills/skill-state.js +111 -0
- package/dist/skills/skill-state.js.map +1 -0
- package/dist/types.d.ts +77 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/upload-client-file.d.ts +31 -0
- package/dist/upload-client-file.d.ts.map +1 -0
- package/dist/upload-client-file.js +81 -0
- package/dist/upload-client-file.js.map +1 -0
- package/dist/version.d.ts +2 -2
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/win-spawn.d.ts +6 -0
- package/dist/win-spawn.d.ts.map +1 -0
- package/dist/win-spawn.js +32 -0
- package/dist/win-spawn.js.map +1 -0
- package/package.json +7 -5
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ See [Session capture](./docs/session-capture.md) for capture logic, duplicate-av
|
|
|
37
37
|
|
|
38
38
|
## Wildcard (agent complaint box)
|
|
39
39
|
|
|
40
|
-
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:
|
|
40
|
+
When an agent is blocked — because a capability does not exist in its environment, or because a task would take too long to complete — it can record the blocker and get back an unambiguous "stop and move on" response:
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
43
|
coolhand wildcard \
|
|
@@ -46,7 +46,7 @@ coolhand wildcard \
|
|
|
46
46
|
--thinking "I attempted to connect to localhost:5432 but got connection refused. I checked for a running postgres process and found none. Without a live database I cannot apply or validate the migration."
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
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. When no API key is available, the feedback is saved locally to `~/.coolhand/pending/` and will be uploaded automatically the next time you run `coolhand login`.
|
|
49
|
+
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 blocker (a missing capability, or a task that would take too long) 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. When no API key is available, the feedback is saved locally to `~/.coolhand/pending/` and will be uploaded automatically the next time you run `coolhand login`.
|
|
50
50
|
|
|
51
51
|
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.
|
|
52
52
|
|
|
@@ -83,6 +83,8 @@ coolhand close-optimization opt-123 "Added the suggested index; verified query l
|
|
|
83
83
|
| `coolhand list-workloads` | List workloads with optional search and pagination |
|
|
84
84
|
| `coolhand get-workload` | Fetch a single workload by ID |
|
|
85
85
|
| `coolhand update-workload` | Update a workload's name and/or description |
|
|
86
|
+
| `coolhand search-templates` | List and search LLM request templates |
|
|
87
|
+
| `coolhand get-template` | Fetch a single template by ID, with its prompt patterns |
|
|
86
88
|
| `coolhand search-optimizations` | List and filter optimization records |
|
|
87
89
|
| `coolhand get-optimization` | Fetch a single optimization by ID |
|
|
88
90
|
| `coolhand update-optimization` | Update an optimization's fields |
|
|
@@ -91,7 +93,12 @@ coolhand close-optimization opt-123 "Added the suggested index; verified query l
|
|
|
91
93
|
| `coolhand get-feedback` | Fetch a single feedback record by ID |
|
|
92
94
|
| `coolhand fetch-log` | Fetch the input/output content of a single LLM request log |
|
|
93
95
|
| `coolhand search-logs` | Search LLM request logs with flexible filters |
|
|
96
|
+
| `coolhand search-referenced-files` | List a client's referenced files, aggregated and ranked by reference count |
|
|
97
|
+
| `coolhand list-referenced-file-sessions` | List the raw sessions that referenced one exact file path |
|
|
94
98
|
| `coolhand analyze-claude-sessions` | Submit Claude sessions for pattern and cost analysis |
|
|
99
|
+
| `coolhand map-claude-projects` | Upload a file-tree map (names + metadata only) of every folder named "claude" |
|
|
100
|
+
| `coolhand upload-client-file` | Upload a local file to Coolhand as a client file |
|
|
101
|
+
| `coolhand sync-skills` | Upload locally-built Claude skills (SKILL.md files) to Coolhand as client files |
|
|
95
102
|
| `coolhand wildcard` | Record an agent blocker and exit cleanly |
|
|
96
103
|
|
|
97
104
|
See [docs/commands.md](./docs/commands.md) for full flag reference and usage notes.
|
|
@@ -99,6 +106,7 @@ See [docs/commands.md](./docs/commands.md) for full flag reference and usage not
|
|
|
99
106
|
## Security
|
|
100
107
|
|
|
101
108
|
- The callback listener binds to `127.0.0.1` only — never reachable from the LAN.
|
|
109
|
+
- The MITM proxy started by `coolhand claude`/`coolhand monitor` also binds to `127.0.0.1` only — never reachable from the LAN.
|
|
102
110
|
- Tokens are delivered through a one-shot localhost redirect; subsequent calls to the listener get `410 Gone`.
|
|
103
111
|
- CSRF protection: every login generates a random `state` value verified with `crypto.timingSafeEqual` before any token is accepted.
|
|
104
112
|
- `~/.coolhand/config.json` is written atomically with mode `0o600`; the parent directory is `0o700`.
|
|
@@ -163,6 +171,7 @@ Located at `$HOME/.coolhand/config.json` (override with `COOLHAND_CONFIG_DIR` fo
|
|
|
163
171
|
- [Auth Flow](./docs/auth-flow.md) — browser-callback sequence, state machine, timeout and error paths
|
|
164
172
|
- [Configuration File](./docs/config-file.md) — full config schema, multi-client model, `COOLHAND_CONFIG_DIR` override
|
|
165
173
|
- [Session Capture](./docs/session-capture.md) — session scanning, envelope format, deduplication, scope and limitations
|
|
174
|
+
- [Skill Capture](./docs/skill-capture.md) — skill discovery, dedup, and incremental upload logic for `sync-skills`
|
|
166
175
|
|
|
167
176
|
## About Coolhand Labs
|
|
168
177
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"last-sync.d.ts","sourceRoot":"","sources":["../../src/api/last-sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"last-sync.d.ts","sourceRoot":"","sources":["../../src/api/last-sync.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,aAAa,CAAC,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAmE1F"}
|
package/dist/api/last-sync.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { loadConfig, getClient } from '../config.js';
|
|
2
|
+
import { isAllowedBaseUrlScheme } from '../base-url.js';
|
|
2
3
|
import { DEFAULT_BASE_URL } from '../types.js';
|
|
3
4
|
/**
|
|
4
5
|
* Ask the server for the timestamp of the most recent Claude Code log it already holds, so
|
|
@@ -37,7 +38,7 @@ export async function fetchLastSync(opts = {}) {
|
|
|
37
38
|
let url;
|
|
38
39
|
try {
|
|
39
40
|
const parsedBaseUrl = new URL(baseUrl);
|
|
40
|
-
if (parsedBaseUrl
|
|
41
|
+
if (!isAllowedBaseUrlScheme(parsedBaseUrl)) {
|
|
41
42
|
return null;
|
|
42
43
|
}
|
|
43
44
|
const endpoint = new URL('/api/v2/llm_request_logs', parsedBaseUrl);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"last-sync.js","sourceRoot":"","sources":["../../src/api/last-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA8B,EAAE;IAClE,IAAI,MAA0B,CAAC;IAC/B,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,GAAG,MAAM,EAAE,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACjE,OAAO,GAAG,MAAM,EAAE,QAAQ,IAAI,gBAAgB,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,
|
|
1
|
+
{"version":3,"file":"last-sync.js","sourceRoot":"","sources":["../../src/api/last-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Coolhand } from 'coolhand-node';
|
|
2
|
+
import { CliError } from '../errors.js';
|
|
3
|
+
/**
|
|
4
|
+
* Resolves the CLI's stored client and returns a `Coolhand` instance authenticated with its
|
|
5
|
+
* *private* key. `searchReferencedFiles`/`listReferencedFileSessions` require the private key —
|
|
6
|
+
* the public key used for LLM capture is write-only on this API and 401s here.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getLlmReferenceClient(opts?: {
|
|
9
|
+
clientId?: string;
|
|
10
|
+
}): Promise<Coolhand>;
|
|
11
|
+
/**
|
|
12
|
+
* Maps an error thrown by `Coolhand#searchReferencedFiles`/`listReferencedFileSessions` to a
|
|
13
|
+
* `CliError` — a 401 means the stored private key was rejected (mirrors `log-client.ts`'s hint), a
|
|
14
|
+
* 504 means the query exceeded the backend's statement timeout and is retryable, not a bug. Any
|
|
15
|
+
* other status (e.g. 422 for an unrecognized filter or non-scalar param) surfaces the server's own
|
|
16
|
+
* message rather than swallowing it.
|
|
17
|
+
*
|
|
18
|
+
* Both endpoints can 504 — `searchReferencedFiles` on its GROUP BY aggregate, and
|
|
19
|
+
* `listReferencedFileSessions` on the pagination `COUNT(*)` for a very hot `file_path` — but they
|
|
20
|
+
* have different flags to retry with, so `timeoutHint` is caller-supplied (same shape as
|
|
21
|
+
* `mapFeedbackHttpError`'s `notFoundMessage`). Suggesting a flag the invoking command doesn't
|
|
22
|
+
* define would be a silent no-op: the arg parser accepts unknown flags without complaint.
|
|
23
|
+
*/
|
|
24
|
+
export declare function mapLlmReferenceHttpError(err: unknown, timeoutHint: string): CliError;
|
|
25
|
+
//# sourceMappingURL=llm-reference-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-reference-client.d.ts","sourceRoot":"","sources":["../../src/api/llm-reference-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAa,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGxC;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoB/F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,QAAQ,CAkBpF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Coolhand, HttpError } from 'coolhand-node';
|
|
2
|
+
import { CliError } from '../errors.js';
|
|
3
|
+
import { loadConfig, resolveClient } from '../config.js';
|
|
4
|
+
/**
|
|
5
|
+
* Resolves the CLI's stored client and returns a `Coolhand` instance authenticated with its
|
|
6
|
+
* *private* key. `searchReferencedFiles`/`listReferencedFileSessions` require the private key —
|
|
7
|
+
* the public key used for LLM capture is write-only on this API and 401s here.
|
|
8
|
+
*/
|
|
9
|
+
export async function getLlmReferenceClient(opts = {}) {
|
|
10
|
+
const cfg = await loadConfig();
|
|
11
|
+
const client = await resolveClient(cfg, opts.clientId);
|
|
12
|
+
if (!client.private_key) {
|
|
13
|
+
throw new CliError('NO_PRIVATE_KEY', "No private key configured. Run 'coolhand login --scope private' first.");
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
// Coolhand validates baseUrl in its constructor (https required; http only for localhost).
|
|
17
|
+
return new Coolhand({ apiKey: client.private_key, baseUrl: client.base_url, silent: true });
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
throw new CliError('INVALID_BASE_URL', `Invalid base_url for client: ${client.base_url} (${err.message})`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Maps an error thrown by `Coolhand#searchReferencedFiles`/`listReferencedFileSessions` to a
|
|
25
|
+
* `CliError` — a 401 means the stored private key was rejected (mirrors `log-client.ts`'s hint), a
|
|
26
|
+
* 504 means the query exceeded the backend's statement timeout and is retryable, not a bug. Any
|
|
27
|
+
* other status (e.g. 422 for an unrecognized filter or non-scalar param) surfaces the server's own
|
|
28
|
+
* message rather than swallowing it.
|
|
29
|
+
*
|
|
30
|
+
* Both endpoints can 504 — `searchReferencedFiles` on its GROUP BY aggregate, and
|
|
31
|
+
* `listReferencedFileSessions` on the pagination `COUNT(*)` for a very hot `file_path` — but they
|
|
32
|
+
* have different flags to retry with, so `timeoutHint` is caller-supplied (same shape as
|
|
33
|
+
* `mapFeedbackHttpError`'s `notFoundMessage`). Suggesting a flag the invoking command doesn't
|
|
34
|
+
* define would be a silent no-op: the arg parser accepts unknown flags without complaint.
|
|
35
|
+
*/
|
|
36
|
+
export function mapLlmReferenceHttpError(err, timeoutHint) {
|
|
37
|
+
if (err instanceof HttpError) {
|
|
38
|
+
if (err.status === 401) {
|
|
39
|
+
return new CliError('LLM_REFERENCE_ERROR', "The stored private key was rejected. Run 'coolhand login --scope private' to re-authenticate.");
|
|
40
|
+
}
|
|
41
|
+
if (err.status === 504) {
|
|
42
|
+
return new CliError('LLM_REFERENCE_ERROR', `Referenced file request timed out (504): the query exceeded the backend's statement ` +
|
|
43
|
+
`timeout. This is retryable — ${timeoutHint}.`);
|
|
44
|
+
}
|
|
45
|
+
return new CliError('LLM_REFERENCE_ERROR', `Referenced file request failed (${err.status}): ${err.message}`);
|
|
46
|
+
}
|
|
47
|
+
return new CliError('LLM_REFERENCE_ERROR', `Referenced file request failed: ${err.message}`);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=llm-reference-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-reference-client.js","sourceRoot":"","sources":["../../src/api/llm-reference-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEzD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAA8B,EAAE;IAC1E,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEvD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,IAAI,QAAQ,CAChB,gBAAgB,EAChB,wEAAwE,CACzE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,2FAA2F;QAC3F,OAAO,IAAI,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,gCAAgC,MAAM,CAAC,QAAQ,KAAM,GAAa,CAAC,OAAO,GAAG,CAC9E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAY,EAAE,WAAmB;IACxE,IAAI,GAAG,YAAY,SAAS,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,IAAI,QAAQ,CACjB,qBAAqB,EACrB,+FAA+F,CAChG,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,IAAI,QAAQ,CACjB,qBAAqB,EACrB,sFAAsF;gBACpF,gCAAgC,WAAW,GAAG,CACjD,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,qBAAqB,EAAE,mCAAmC,GAAG,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/G,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,qBAAqB,EAAE,mCAAoC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1G,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Coolhand } from 'coolhand-node';
|
|
2
|
+
import { CliError } from '../errors.js';
|
|
3
|
+
/**
|
|
4
|
+
* Resolves the CLI's stored client and returns a `Coolhand` instance authenticated with its
|
|
5
|
+
* *private* key. `searchTemplates`/`getTemplate` require the private key — the public key used by
|
|
6
|
+
* `monitor`/`logRequest` is write-only on this API and will 401 here.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getTemplateClient(opts?: {
|
|
9
|
+
clientId?: string;
|
|
10
|
+
}): Promise<Coolhand>;
|
|
11
|
+
/**
|
|
12
|
+
* Maps an error thrown by `Coolhand#searchTemplates`/`getTemplate` to a `CliError`.
|
|
13
|
+
*
|
|
14
|
+
* A `504` is not a crash: both endpoints aggregate `log_count` over `llm_request_logs` under a
|
|
15
|
+
* 10-second statement timeout, so a slow aggregate is expected and retryable. `timeoutHint` is the
|
|
16
|
+
* caller's advice for making the same call cheaper, which differs between list and show.
|
|
17
|
+
*/
|
|
18
|
+
export declare function mapTemplateHttpError(err: unknown, notFoundMessage: string, timeoutHint: string): CliError;
|
|
19
|
+
//# sourceMappingURL=template-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-client.d.ts","sourceRoot":"","sources":["../../src/api/template-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAa,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGxC;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoB3F;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,GAClB,QAAQ,CAsBV"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Coolhand, HttpError } from 'coolhand-node';
|
|
2
|
+
import { CliError } from '../errors.js';
|
|
3
|
+
import { loadConfig, resolveClient } from '../config.js';
|
|
4
|
+
/**
|
|
5
|
+
* Resolves the CLI's stored client and returns a `Coolhand` instance authenticated with its
|
|
6
|
+
* *private* key. `searchTemplates`/`getTemplate` require the private key — the public key used by
|
|
7
|
+
* `monitor`/`logRequest` is write-only on this API and will 401 here.
|
|
8
|
+
*/
|
|
9
|
+
export async function getTemplateClient(opts = {}) {
|
|
10
|
+
const cfg = await loadConfig();
|
|
11
|
+
const client = await resolveClient(cfg, opts.clientId);
|
|
12
|
+
if (!client.private_key) {
|
|
13
|
+
throw new CliError('NO_PRIVATE_KEY', "No private key configured. Run 'coolhand login --scope private' first.");
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
// Coolhand validates baseUrl in its constructor (https required; http only for localhost).
|
|
17
|
+
return new Coolhand({ apiKey: client.private_key, baseUrl: client.base_url, silent: true });
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
throw new CliError('INVALID_BASE_URL', `Invalid base_url for client: ${client.base_url} (${err.message})`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Maps an error thrown by `Coolhand#searchTemplates`/`getTemplate` to a `CliError`.
|
|
25
|
+
*
|
|
26
|
+
* A `504` is not a crash: both endpoints aggregate `log_count` over `llm_request_logs` under a
|
|
27
|
+
* 10-second statement timeout, so a slow aggregate is expected and retryable. `timeoutHint` is the
|
|
28
|
+
* caller's advice for making the same call cheaper, which differs between list and show.
|
|
29
|
+
*/
|
|
30
|
+
export function mapTemplateHttpError(err, notFoundMessage, timeoutHint) {
|
|
31
|
+
if (err instanceof HttpError) {
|
|
32
|
+
if (err.status === 401) {
|
|
33
|
+
return new CliError('TEMPLATE_ERROR', "The stored private key was rejected. Run 'coolhand login --scope private' to re-authenticate.");
|
|
34
|
+
}
|
|
35
|
+
if (err.status === 404) {
|
|
36
|
+
return new CliError('TEMPLATE_ERROR', notFoundMessage);
|
|
37
|
+
}
|
|
38
|
+
if (err.status === 504) {
|
|
39
|
+
return new CliError('TEMPLATE_ERROR', `The server timed out counting logs (log_count) for this request. ${timeoutHint}`);
|
|
40
|
+
}
|
|
41
|
+
// coolhand-node already formats this as `Template request failed (<status>): <body>`;
|
|
42
|
+
// re-prefixing it here would print the status twice.
|
|
43
|
+
return new CliError('TEMPLATE_ERROR', err.message);
|
|
44
|
+
}
|
|
45
|
+
return new CliError('TEMPLATE_ERROR', `Template request failed: ${err.message}`);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=template-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-client.js","sourceRoot":"","sources":["../../src/api/template-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEzD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAA8B,EAAE;IACtE,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEvD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,IAAI,QAAQ,CAChB,gBAAgB,EAChB,wEAAwE,CACzE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,2FAA2F;QAC3F,OAAO,IAAI,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,gCAAgC,MAAM,CAAC,QAAQ,KAAM,GAAa,CAAC,OAAO,GAAG,CAC9E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAY,EACZ,eAAuB,EACvB,WAAmB;IAEnB,IAAI,GAAG,YAAY,SAAS,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,IAAI,QAAQ,CACjB,gBAAgB,EAChB,+FAA+F,CAChG,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,IAAI,QAAQ,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,IAAI,QAAQ,CACjB,gBAAgB,EAChB,oEAAoE,WAAW,EAAE,CAClF,CAAC;QACJ,CAAC;QACD,sFAAsF;QACtF,qDAAqD;QACrD,OAAO,IAAI,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,gBAAgB,EAAE,4BAA6B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-browser.d.ts","sourceRoot":"","sources":["../../src/auth/open-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"open-browser.d.ts","sourceRoot":"","sources":["../../src/auth/open-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAItC,UAAU,eAAe;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BxF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { spawn } from 'child_process';
|
|
2
2
|
import { logger } from '../logger.js';
|
|
3
|
+
import { resolveWrapSpawn } from '../win-spawn.js';
|
|
3
4
|
export async function openBrowser(url, deps = {}) {
|
|
4
5
|
const platform = deps.platform ?? process.platform;
|
|
5
6
|
const spawnFn = deps.spawnFn ?? spawn;
|
|
@@ -17,8 +18,9 @@ export async function openBrowser(url, deps = {}) {
|
|
|
17
18
|
command = 'xdg-open';
|
|
18
19
|
args = [url];
|
|
19
20
|
}
|
|
21
|
+
const { cmd, spawnArgs, windowsVerbatimArguments } = resolveWrapSpawn(command, args, platform);
|
|
20
22
|
try {
|
|
21
|
-
const child = spawnFn(
|
|
23
|
+
const child = spawnFn(cmd, spawnArgs, { detached: true, stdio: 'ignore', windowsVerbatimArguments });
|
|
22
24
|
child.on('error', (err) => {
|
|
23
25
|
logger.warn(`Failed to open browser (${command}): ${err.message}. Open the URL manually.`);
|
|
24
26
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../../src/auth/open-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../../src/auth/open-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAOnD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,OAAwB,EAAE;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IAEtC,IAAI,OAAe,CAAC;IACpB,IAAI,IAAc,CAAC;IACnB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,GAAG,MAAM,CAAC;QACjB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,GAAG,KAAK,CAAC;QAChB,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,UAAU,CAAC;QACrB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,wBAAwB,EAAE,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE/F,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC,CAAC;QACrG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,MAAM,CAAC,IAAI,CAAC,2BAA2B,OAAO,MAAM,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC;QAC7F,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,6BAA6B,OAAO,MAAO,GAAa,CAAC,OAAO,0BAA0B,CAAC,CAAC;IAC1G,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mirrors the scheme rule coolhand-node's `BaseService` enforces on `baseUrl`:
|
|
3
|
+
* https:// is always allowed; http:// only for localhost/127.0.0.1/[::1].
|
|
4
|
+
*/
|
|
5
|
+
export declare function isLoopbackHostname(hostname: string): boolean;
|
|
6
|
+
export declare function isAllowedBaseUrlScheme(url: URL): boolean;
|
|
7
|
+
//# sourceMappingURL=base-url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-url.d.ts","sourceRoot":"","sources":["../src/base-url.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAKxD"}
|
package/dist/base-url.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mirrors the scheme rule coolhand-node's `BaseService` enforces on `baseUrl`:
|
|
3
|
+
* https:// is always allowed; http:// only for localhost/127.0.0.1/[::1].
|
|
4
|
+
*/
|
|
5
|
+
export function isLoopbackHostname(hostname) {
|
|
6
|
+
return hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '[::1]';
|
|
7
|
+
}
|
|
8
|
+
export function isAllowedBaseUrlScheme(url) {
|
|
9
|
+
if (url.protocol === 'https:') {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
return url.protocol === 'http:' && isLoopbackHostname(url.hostname);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=base-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-url.js","sourceRoot":"","sources":["../src/base-url.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,OAAO,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAQ;IAC7C,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACtE,CAAC"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AA6DA,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC;CACpD;AAmZD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAgE7F;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAiDpD;AA6xBD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwJzD"}
|