coolhand-cli 0.12.0 → 0.13.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 +5 -1
- package/dist/api/help-center-client.d.ts.map +1 -1
- package/dist/api/help-center-client.js +5 -4
- package/dist/api/help-center-client.js.map +1 -1
- package/dist/auto-update/index.d.ts +61 -0
- package/dist/auto-update/index.d.ts.map +1 -0
- package/dist/auto-update/index.js +355 -0
- package/dist/auto-update/index.js.map +1 -0
- package/dist/auto-update/select.d.ts +28 -0
- package/dist/auto-update/select.d.ts.map +1 -0
- package/dist/auto-update/select.js +45 -0
- package/dist/auto-update/select.js.map +1 -0
- package/dist/auto-update/state.d.ts +25 -0
- package/dist/auto-update/state.d.ts.map +1 -0
- package/dist/auto-update/state.js +81 -0
- package/dist/auto-update/state.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +97 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/capture-turn.d.ts +18 -0
- package/dist/commands/capture-turn.d.ts.map +1 -0
- package/dist/commands/capture-turn.js +152 -0
- package/dist/commands/capture-turn.js.map +1 -0
- package/dist/commands/flush-pending.d.ts.map +1 -1
- package/dist/commands/flush-pending.js +1 -30
- package/dist/commands/flush-pending.js.map +1 -1
- package/dist/commands/update.d.ts +9 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +63 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +25 -7
- 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/hooks/adapters/claude.d.ts +12 -0
- package/dist/hooks/adapters/claude.d.ts.map +1 -0
- package/dist/hooks/adapters/claude.js +98 -0
- package/dist/hooks/adapters/claude.js.map +1 -0
- package/dist/hooks/adapters/copilot.d.ts +15 -0
- package/dist/hooks/adapters/copilot.d.ts.map +1 -0
- package/dist/hooks/adapters/copilot.js +96 -0
- package/dist/hooks/adapters/copilot.js.map +1 -0
- package/dist/hooks/adapters/index.d.ts +5 -0
- package/dist/hooks/adapters/index.d.ts.map +1 -0
- package/dist/hooks/adapters/index.js +8 -0
- package/dist/hooks/adapters/index.js.map +1 -0
- package/dist/hooks/adapters/shared.d.ts +25 -0
- package/dist/hooks/adapters/shared.d.ts.map +1 -0
- package/dist/hooks/adapters/shared.js +37 -0
- package/dist/hooks/adapters/shared.js.map +1 -0
- package/dist/hooks/disabled.d.ts +3 -0
- package/dist/hooks/disabled.d.ts.map +1 -0
- package/dist/hooks/disabled.js +5 -0
- package/dist/hooks/disabled.js.map +1 -0
- package/dist/hooks/hook-log.d.ts +7 -0
- package/dist/hooks/hook-log.d.ts.map +1 -0
- package/dist/hooks/hook-log.js +34 -0
- package/dist/hooks/hook-log.js.map +1 -0
- package/dist/hooks/identity.d.ts +21 -0
- package/dist/hooks/identity.d.ts.map +1 -0
- package/dist/hooks/identity.js +121 -0
- package/dist/hooks/identity.js.map +1 -0
- package/dist/hooks/log-turn.d.ts +23 -0
- package/dist/hooks/log-turn.d.ts.map +1 -0
- package/dist/hooks/log-turn.js +48 -0
- package/dist/hooks/log-turn.js.map +1 -0
- package/dist/hooks/send-turn.d.ts +32 -0
- package/dist/hooks/send-turn.d.ts.map +1 -0
- package/dist/hooks/send-turn.js +305 -0
- package/dist/hooks/send-turn.js.map +1 -0
- package/dist/hooks/silence.d.ts +7 -0
- package/dist/hooks/silence.d.ts.map +1 -0
- package/dist/hooks/silence.js +22 -0
- package/dist/hooks/silence.js.map +1 -0
- package/dist/hooks/stdin.d.ts +11 -0
- package/dist/hooks/stdin.d.ts.map +1 -0
- package/dist/hooks/stdin.js +51 -0
- package/dist/hooks/stdin.js.map +1 -0
- package/dist/hooks/turn-state.d.ts +40 -0
- package/dist/hooks/turn-state.d.ts.map +1 -0
- package/dist/hooks/turn-state.js +97 -0
- package/dist/hooks/turn-state.js.map +1 -0
- package/dist/hooks/types.d.ts +74 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +3 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/pending-store.d.ts +22 -2
- package/dist/pending-store.d.ts.map +1 -1
- package/dist/pending-store.js +25 -3
- package/dist/pending-store.js.map +1 -1
- package/dist/pending-upload.d.ts +12 -0
- package/dist/pending-upload.d.ts.map +1 -0
- package/dist/pending-upload.js +51 -0
- package/dist/pending-upload.js.map +1 -0
- package/dist/sessions/blocks.d.ts +51 -0
- package/dist/sessions/blocks.d.ts.map +1 -0
- package/dist/sessions/blocks.js +193 -0
- package/dist/sessions/blocks.js.map +1 -0
- package/dist/sessions/claude-scanner.d.ts +60 -1
- package/dist/sessions/claude-scanner.d.ts.map +1 -1
- package/dist/sessions/claude-scanner.js +277 -1
- package/dist/sessions/claude-scanner.js.map +1 -1
- package/dist/sessions/copilot-scanner.d.ts +27 -0
- package/dist/sessions/copilot-scanner.d.ts.map +1 -0
- package/dist/sessions/copilot-scanner.js +171 -0
- package/dist/sessions/copilot-scanner.js.map +1 -0
- package/dist/sessions/redact-secrets.d.ts.map +1 -1
- package/dist/sessions/redact-secrets.js +43 -10
- package/dist/sessions/redact-secrets.js.map +1 -1
- package/dist/sessions/turn-envelope.d.ts +62 -0
- package/dist/sessions/turn-envelope.d.ts.map +1 -0
- package/dist/sessions/turn-envelope.js +182 -0
- package/dist/sessions/turn-envelope.js.map +1 -0
- package/dist/sessions/usage.d.ts +23 -0
- package/dist/sessions/usage.d.ts.map +1 -0
- package/dist/sessions/usage.js +56 -0
- package/dist/sessions/usage.js.map +1 -0
- package/dist/types.d.ts +21 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- package/package.json +3 -2
|
@@ -14,15 +14,18 @@ const TOKEN_PATTERNS = [
|
|
|
14
14
|
/ch_pub_[A-Za-z0-9_-]{8,}/g, // Coolhand public token
|
|
15
15
|
/ch_priv_[A-Za-z0-9_-]{8,}/g, // Coolhand private token
|
|
16
16
|
/sk-[A-Za-z0-9_-]{16,}/g, // OpenAI / Anthropic style secret key
|
|
17
|
-
/
|
|
18
|
-
/gho_[A-Za-z0-9]{20,}/g, // GitHub OAuth token
|
|
17
|
+
/gh[pousr]_[A-Za-z0-9]{20,}/g, // GitHub personal access / OAuth / user-to-server / server-to-server / refresh token
|
|
19
18
|
/github_pat_[A-Za-z0-9_]{20,}/g, // GitHub fine-grained PAT
|
|
20
|
-
|
|
19
|
+
/\b(?:AKIA|ASIA|AROA|AIDA)[0-9A-Z]{16}\b/g, // AWS access key id (long-lived and temporary)
|
|
21
20
|
/xox[baprs]-[A-Za-z0-9-]{10,}/g, // Slack token (bot/user/app/refresh/config)
|
|
21
|
+
/xapp-\d-[A-Za-z0-9-]{10,}/g, // Slack app-level token
|
|
22
|
+
/SG\.[\w-]{16,}\.[\w-]{16,}/g, // SendGrid API key
|
|
23
|
+
/\b(?:rk_live|rk_test)_[0-9A-Za-z]{16,}/g, // Stripe restricted key
|
|
24
|
+
/whsec_[A-Za-z0-9]{24,}/g, // Stripe webhook signing secret
|
|
22
25
|
/AIza[0-9A-Za-z_-]{35}/g, // Google API key
|
|
23
26
|
/sk_live_[0-9A-Za-z]{16,}/g, // Stripe live secret key
|
|
24
27
|
/sk_test_[0-9A-Za-z]{16,}/g, // Stripe test secret key
|
|
25
|
-
/\beyJ[A-Za-z0-9_-]
|
|
28
|
+
/\beyJ[A-Za-z0-9_-]{1,4096}\.[A-Za-z0-9_-]{1,4096}\.[A-Za-z0-9_-]{1,4096}/g, // JWT (three base64url segments)
|
|
26
29
|
/\bBearer\s+[A-Za-z0-9._~+/-]{12,}=*/gi, // Authorization: Bearer <token>
|
|
27
30
|
/\bBasic\s+[A-Za-z0-9+/=]{8,}/gi, // Authorization: Basic <base64 user:pass>
|
|
28
31
|
/https:\/\/hooks\.slack\.com\/services\/\S+/g, // Slack incoming webhook URL
|
|
@@ -32,12 +35,14 @@ const TOKEN_PATTERNS = [
|
|
|
32
35
|
/hf_[A-Za-z0-9]{30,}/g, // Hugging Face token
|
|
33
36
|
/ya29\.[A-Za-z0-9_-]+/g, // Google OAuth access token
|
|
34
37
|
/pypi-[A-Za-z0-9_-]{20,}/g, // PyPI API token
|
|
35
|
-
/\b([a-z][a-z0-9+.-]
|
|
38
|
+
/\b([a-z][a-z0-9+.-]{0,31}:\/\/)[^\s/:@]*:[^\s/]+@/gi, // credentials embedded in a URL (scheme://user:pass@host, empty user allowed, `@` inside the password)
|
|
36
39
|
/\b[A-Fa-f0-9]{40,}\b/g, // long hex blobs (generic tokens / hashes)
|
|
37
40
|
// PEM-formatted private key blocks (SSH/RSA/EC/OpenSSH/PGP/encrypted) — no assignment keyword
|
|
38
41
|
// sits next to the base64 body, so ASSIGNMENT_QUOTED/BARE never catch these; a `cat ~/.ssh/id_rsa`
|
|
39
42
|
// in a tool output or a deploy key embedded in a config file would otherwise sail through whole.
|
|
40
|
-
|
|
43
|
+
// The body is bounded and may end at the next BEGIN header or the end of the text, so a truncated key
|
|
44
|
+
// (`head -5 id_rsa`) is still redacted and a long run of unterminated headers cannot go quadratic.
|
|
45
|
+
/-----BEGIN [A-Z0-9 ]*PRIVATE KEY[A-Z0-9 ]*-----[\s\S]{0,16384}?(?:-----END [A-Z0-9 ]*PRIVATE KEY[A-Z0-9 ]*-----|(?=-----BEGIN )|$)/g,
|
|
41
46
|
];
|
|
42
47
|
// Two variants: a QUOTED value may contain spaces ("my secret value"); a BARE value stops at
|
|
43
48
|
// whitespace. Splitting them closes the gap where a spaced quoted secret was only partly redacted.
|
|
@@ -46,9 +51,32 @@ const TOKEN_PATTERNS = [
|
|
|
46
51
|
// this was originally written for), so plain JSON — the dominant config format under
|
|
47
52
|
// `~/.claude` — is covered too, not just unquoted-key assignment syntax.
|
|
48
53
|
// The opening quote may be backslash-escaped (`\\"value\\"`): session payloads are JSON.stringify'd
|
|
49
|
-
// before redaction, so a quoted shell assignment inside a tool input arrives with escaped quotes.
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
// before redaction, so a quoted shell assignment inside a tool input arrives with escaped quotes. A BARE value
|
|
55
|
+
// never starts with such a backslash-quote, so it cannot re-match what the QUOTED pass just redacted.
|
|
56
|
+
// A keyword may carry a `_value`/`_header` suffix (`CLIENT_SECRET_VALUE=`). `pass` and `pwd` count only inside a compound name (`DB_PASS`, `MYSQL_PWD`), so `bypass:` and `Tests pass:` are not secrets.
|
|
57
|
+
const KEYWORDS = String.raw `(?:api[_-]?key|secret(?:[_-]?key)?|token|password|passwd|(?<=[_-])(?:pass|pwd)|passphrase|credentials?|auth[_-]?header|access[_-]?key|private[_-]?key|auth[_-]?key|signing[_-]?key|encryption[_-]?key)(?:[_-]?(?:value|header))?`;
|
|
58
|
+
// A value can be `Bearer <token>`: take the scheme word with it, or the token pattern below never sees `Bearer`.
|
|
59
|
+
// Values that are settings, not secrets (`credentials: "include"` in a fetch call, `"token": null`).
|
|
60
|
+
const NOT_A_SECRET = String.raw `(?!(?:include|omit|same-origin|true|false|null)\b)`;
|
|
61
|
+
// A bare value is a scalar: `{` or `[` opens a JSON object or array (`"token":{...}`), which it must not swallow.
|
|
62
|
+
const NOT_A_STRUCTURE = String.raw `(?![{\[])`;
|
|
63
|
+
const SCHEME = String.raw `(?:(?:bearer|basic|token|digest|negotiate)[ \t]+)?`;
|
|
64
|
+
const ASSIGNMENT_QUOTED = new RegExp(String.raw `((?:${KEYWORDS})\b["']?\s*[:=]\s*)(\\?['"])${NOT_A_SECRET}[^'"]*\2`, 'gi');
|
|
65
|
+
const ASSIGNMENT_BARE = new RegExp(String.raw `((?:${KEYWORDS})\b["']?\s*[:=]\s*)${NOT_A_SECRET}${NOT_A_STRUCTURE}${SCHEME}(?:\\\\|\\(?!['"])|[^\s'"\\])+`, 'gi');
|
|
66
|
+
// Cookie and authorization headers. Redacting JSON-stringified text (one line, the header inside a string) must
|
|
67
|
+
// leave it parseable, so a value stops at a quote, backslash or line end. A JSON-keyed header (`"Cookie":"sid=1"`)
|
|
68
|
+
// is a value whatever it looks like; in plain text only a `name=value` cookie or a scheme-word authorization
|
|
69
|
+
// (or one long opaque token) counts, so `const cookie: string` and "the Authorization: header" are left alone.
|
|
70
|
+
const HEADER_JSON = /((?<![\w-])(?:(?:set-)?cookie|(?:proxy-)?authorization)\\?["']?\s*[:=]\s*\\?["'])[^"'\\]+/gi;
|
|
71
|
+
const HEADER_COOKIE = /((?<![\w-])(?:set-)?cookie[ \t]*:[ \t]*)[\w.%+-]{1,200}=[^\r\n"'\\`}]*/gi;
|
|
72
|
+
const HEADER_AUTH = /((?<![\w-])(?:proxy-)?authorization[ \t]*[:=][ \t]*)(?:(?:bearer|basic|token|digest|negotiate|apikey|ntlm|hmac|oauth)[ \t]+[^\r\n"'\\`}]+|[^\s"'\\`}]{16,})/gi;
|
|
73
|
+
// A secret given as a command-line flag with its value after a space (`--password hunter2`, `-u admin:s3cr3t`):
|
|
74
|
+
// no `:` or `=` joins them, so the assignment patterns above never see it. The value may be quoted, or
|
|
75
|
+
// backslash-quoted when the text was JSON-stringified; the quoted forms are bounded so an unclosed quote is cheap.
|
|
76
|
+
const CLI_SECRET_FLAG = /((?<![\w-])--?(?:(?:[a-z]{1,20}-){0,3}(?:password|passwd|token|secret|api-?key|auth(?:orization)?|access-?key|private-?key)(?:-(?:key|value))?|pass|pwd)(?:[ \t]{1,10}|=))(?:(?:bearer|basic|token|digest|negotiate)[ \t]+)?(?:\\["'][^\\]{0,500}\\["']|'[^']{0,500}'|"[^"]{0,500}"|[^\s'"\\]+)/gi;
|
|
77
|
+
// `curl -u user:pass`, also `--user`, a flag cluster (`-su`), a quoted credential and a `\`-newline continuation.
|
|
78
|
+
// The separator and the user name share no characters, so a long run of `=` cannot backtrack quadratically.
|
|
79
|
+
const CLI_BASIC_AUTH = /((?<![\w-])curl\b(?:[^\n]|\\\r?\n){0,500}?\s(?:--user|-[a-zA-Z]{0,5}u)(?:[ \t]{1,10}|=)\\?["']?)[^\s:='"\\]+:[^\s'"\\]+/g;
|
|
52
80
|
const REDACTED = '[REDACTED]';
|
|
53
81
|
/** Return `text` with recognised secrets replaced by `[REDACTED]`. Safe on empty input. */
|
|
54
82
|
export function redactSecrets(text) {
|
|
@@ -57,7 +85,12 @@ export function redactSecrets(text) {
|
|
|
57
85
|
}
|
|
58
86
|
let out = text
|
|
59
87
|
.replace(ASSIGNMENT_QUOTED, `$1$2${REDACTED}$2`)
|
|
60
|
-
.replace(ASSIGNMENT_BARE, `$1${REDACTED}`)
|
|
88
|
+
.replace(ASSIGNMENT_BARE, `$1${REDACTED}`)
|
|
89
|
+
.replace(HEADER_JSON, `$1${REDACTED}`)
|
|
90
|
+
.replace(HEADER_COOKIE, `$1${REDACTED}`)
|
|
91
|
+
.replace(HEADER_AUTH, `$1${REDACTED}`)
|
|
92
|
+
.replace(CLI_SECRET_FLAG, `$1${REDACTED}`)
|
|
93
|
+
.replace(CLI_BASIC_AUTH, `$1${REDACTED}`);
|
|
61
94
|
for (const pattern of TOKEN_PATTERNS) {
|
|
62
95
|
out = out.replace(pattern, (_match, scheme) => (typeof scheme === 'string' ? `${scheme}${REDACTED}@` : REDACTED));
|
|
63
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact-secrets.js","sourceRoot":"","sources":["../../src/sessions/redact-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,uEAAuE;AACvE,MAAM,cAAc,GAAsB;IACxC,2BAA2B,EAAE,wBAAwB;IACrD,4BAA4B,EAAE,yBAAyB;IACvD,wBAAwB,EAAE,sCAAsC;IAChE,
|
|
1
|
+
{"version":3,"file":"redact-secrets.js","sourceRoot":"","sources":["../../src/sessions/redact-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,uEAAuE;AACvE,MAAM,cAAc,GAAsB;IACxC,2BAA2B,EAAE,wBAAwB;IACrD,4BAA4B,EAAE,yBAAyB;IACvD,wBAAwB,EAAE,sCAAsC;IAChE,6BAA6B,EAAE,qFAAqF;IACpH,+BAA+B,EAAE,0BAA0B;IAC3D,0CAA0C,EAAE,+CAA+C;IAC3F,+BAA+B,EAAE,4CAA4C;IAC7E,4BAA4B,EAAE,wBAAwB;IACtD,6BAA6B,EAAE,mBAAmB;IAClD,yCAAyC,EAAE,wBAAwB;IACnE,yBAAyB,EAAE,gCAAgC;IAC3D,wBAAwB,EAAE,iBAAiB;IAC3C,2BAA2B,EAAE,yBAAyB;IACtD,2BAA2B,EAAE,yBAAyB;IACtD,2EAA2E,EAAE,iCAAiC;IAC9G,uCAAuC,EAAE,gCAAgC;IACzE,gCAAgC,EAAE,0CAA0C;IAC5E,6CAA6C,EAAE,6BAA6B;IAC5E,qDAAqD,EAAE,sBAAsB;IAC7E,sBAAsB,EAAE,mBAAmB;IAC3C,2BAA2B,EAAE,+BAA+B;IAC5D,sBAAsB,EAAE,qBAAqB;IAC7C,uBAAuB,EAAE,4BAA4B;IACrD,0BAA0B,EAAE,iBAAiB;IAC7C,qDAAqD,EAAE,uGAAuG;IAC9J,uBAAuB,EAAE,2CAA2C;IACpE,8FAA8F;IAC9F,mGAAmG;IACnG,iGAAiG;IACjG,sGAAsG;IACtG,mGAAmG;IACnG,qIAAqI;CACtI,CAAC;AAEF,6FAA6F;AAC7F,mGAAmG;AACnG,+FAA+F;AAC/F,oGAAoG;AACpG,qFAAqF;AACrF,yEAAyE;AACzE,oGAAoG;AACpG,+GAA+G;AAC/G,sGAAsG;AACtG,yMAAyM;AACzM,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA,kOAAkO,CAAC;AAC9P,iHAAiH;AACjH,qGAAqG;AACrG,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA,oDAAoD,CAAC;AACpF,kHAAkH;AAClH,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAA,WAAW,CAAC;AAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA,oDAAoD,CAAC;AAC9E,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,OAAO,QAAQ,+BAA+B,YAAY,UAAU,EAAE,IAAI,CAAC,CAAC;AAC3H,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,OAAO,QAAQ,sBAAsB,YAAY,GAAG,eAAe,GAAG,MAAM,gCAAgC,EAAE,IAAI,CAAC,CAAC;AACjK,gHAAgH;AAChH,mHAAmH;AACnH,6GAA6G;AAC7G,+GAA+G;AAC/G,MAAM,WAAW,GAAG,6FAA6F,CAAC;AAClH,MAAM,aAAa,GAAG,0EAA0E,CAAC;AACjG,MAAM,WAAW,GACf,+JAA+J,CAAC;AAElK,gHAAgH;AAChH,uGAAuG;AACvG,mHAAmH;AACnH,MAAM,eAAe,GACnB,mSAAmS,CAAC;AACtS,kHAAkH;AAClH,4GAA4G;AAC5G,MAAM,cAAc,GAClB,0HAA0H,CAAC;AAE7H,MAAM,QAAQ,GAAG,YAAY,CAAC;AAE9B,2FAA2F;AAC3F,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAG,GAAG,IAAI;SACX,OAAO,CAAC,iBAAiB,EAAE,OAAO,QAAQ,IAAI,CAAC;SAC/C,OAAO,CAAC,eAAe,EAAE,KAAK,QAAQ,EAAE,CAAC;SACzC,OAAO,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;SACrC,OAAO,CAAC,aAAa,EAAE,KAAK,QAAQ,EAAE,CAAC;SACvC,OAAO,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;SACrC,OAAO,CAAC,eAAe,EAAE,KAAK,QAAQ,EAAE,CAAC;SACzC,OAAO,CAAC,cAAc,EAAE,KAAK,QAAQ,EAAE,CAAC,CAAC;IAC5C,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACrC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,MAAc,EAAE,MAAe,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAA,GAAG,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpI,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { MAX_TURN_TEXT_CHARS } from './blocks.js';
|
|
2
|
+
import type { CaptureEnvelope } from './claude-scanner.js';
|
|
3
|
+
import { type SubagentUsage, type Usage } from './usage.js';
|
|
4
|
+
import type { HookAgent, HookTurn, TurnMessage } from '../hooks/types.js';
|
|
5
|
+
export { MAX_TURN_TEXT_CHARS };
|
|
6
|
+
/**
|
|
7
|
+
* Cap on the characters of EARLIER messages sent with a turn (the current turn's own user message is
|
|
8
|
+
* extra, and is itself capped at MAX_TURN_TEXT_CHARS). The payload grows with the conversation, so
|
|
9
|
+
* when the history would exceed this the OLDEST whole exchanges are dropped and the most recent are
|
|
10
|
+
* kept: the server should expect a truncated head, flagged by `metadata.history_truncated`. The newest
|
|
11
|
+
* earlier exchange is always kept, even if it alone is over the cap. Counted in characters (UTF-16
|
|
12
|
+
* code units), not bytes.
|
|
13
|
+
*/
|
|
14
|
+
export declare const HISTORY_BUDGET_CHARS = 200000;
|
|
15
|
+
export interface PreparedMessages {
|
|
16
|
+
/** The conversation so far, ending on the current turn's user message (when there is one). */
|
|
17
|
+
messages: TurnMessage[];
|
|
18
|
+
/** Messages dropped from the start of the history to stay inside HISTORY_BUDGET_CHARS (a count of messages in the transcript window: one that redacts to nothing is still counted, and anything older than the window is not). */
|
|
19
|
+
omitted: number;
|
|
20
|
+
/** True when part of the conversation since the skill was invoked is not in `messages`. */
|
|
21
|
+
truncated: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Tokens the main-thread assistant messages spent across the same exchanges as the history, plus
|
|
24
|
+
* this turn's: a CUMULATIVE total, so a replayed or late older turn can't double count. Absent when
|
|
25
|
+
* the transcript shows none.
|
|
26
|
+
*/
|
|
27
|
+
usage?: Usage;
|
|
28
|
+
/** The same, for subagents (other models, so priced separately). Absent when there were none. */
|
|
29
|
+
subagents?: SubagentUsage;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The messages sent with turn `turnIndex`: every earlier message (prompts, thinking, tool calls and results,
|
|
33
|
+
* replies) since the skill was invoked, in order, then this turn's user message. "Since the skill was invoked" is the session's
|
|
34
|
+
* `anchor` — the timestamp of its first captured turn — and only exchanges a hook actually captured
|
|
35
|
+
* (`captured`) are included, so nothing the user said before the skill ran, or while capture was off,
|
|
36
|
+
* is uploaded, however many exchanges the transcript holds that no hook saw (`/compact`, image
|
|
37
|
+
* prompts, a second Stop for one prompt). Without a usable anchor there is no history at all. What is
|
|
38
|
+
* sent is prompts, thinking, tool calls and results and replies, redacted and capped like the turn
|
|
39
|
+
* itself. If the start of the skill's conversation is no longer in the transcript window, or the history is over budget, the OLDEST part is what is missing and
|
|
40
|
+
* `truncated` is set.
|
|
41
|
+
*/
|
|
42
|
+
export declare function prepareTurnMessages(turn: HookTurn, turnIndex: number, anchor: string | undefined, captured: ReadonlySet<string>): PreparedMessages;
|
|
43
|
+
/**
|
|
44
|
+
* An Anthropic-shaped envelope for ONE turn captured by a hook, carrying the conversation so far.
|
|
45
|
+
*
|
|
46
|
+
* `request_body.messages` is the conversation since the skill was invoked, in order, ending on the last
|
|
47
|
+
* message before this turn's reply (`prepareTurnMessages`, passed in as `prepared`); `response_body` is this turn's
|
|
48
|
+
* reply. The server keeps one chat log per session and the newest turn replaces the stored one, so a
|
|
49
|
+
* late-arriving older turn (a replay) is ignored by it.
|
|
50
|
+
*
|
|
51
|
+
* The url is `coolhand-hook://<agent>/session/<id>/turn/<n>` — deliberately NOT the
|
|
52
|
+
* `claudecode://session/<id>` scheme `analyze-claude-sessions` uses. The server needs the session id
|
|
53
|
+
* and the turn number from it. `response_body.id` is `<session>:<turn>:<digest>`, and the digest ties
|
|
54
|
+
* it to the turn's content. It is no longer the server's dedup key, but stays unique per turn for
|
|
55
|
+
* debugging and correlation. What goes in is the conversation as structured blocks: prompts, thinking,
|
|
56
|
+
* tool calls, tool results and replies (subagent traffic and injected context excluded), all
|
|
57
|
+
* secret-scrubbed and capped (see blocks.ts).
|
|
58
|
+
*/
|
|
59
|
+
export declare function buildTurnEnvelope(agent: HookAgent, turn: HookTurn, turnIndex: number, digest: string, prepared: PreparedMessages,
|
|
60
|
+
/** The skill's text, sent as `request_body.system`. Redacted and capped here again, so state saved by an older version is scrubbed too. */
|
|
61
|
+
system?: string): CaptureEnvelope;
|
|
62
|
+
//# sourceMappingURL=turn-envelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-envelope.d.ts","sourceRoot":"","sources":["../../src/sessions/turn-envelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAA6E,MAAM,aAAa,CAAC;AAC7H,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAyE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AACnI,OAAO,KAAK,EAAmB,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE3F,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAE/B;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,SAAU,CAAC;AAE5C,MAAM,WAAW,gBAAgB;IAC/B,8FAA8F;IAC9F,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,kOAAkO;IAClO,OAAO,EAAE,MAAM,CAAC;IAChB,2FAA2F;IAC3F,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,iGAAiG;IACjG,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AA2CD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,gBAAgB,CA0ElB;AAWD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB;AAC1B,2IAA2I;AAC3I,MAAM,CAAC,EAAE,MAAM,GACd,eAAe,CAqBjB"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { MAX_TURN_TEXT_CHARS, cleanText, messageSize, sanitizeBlock, sanitizeMessage } from './blocks.js';
|
|
2
|
+
import { addUsage, emptySubagentUsage, emptyUsage, mergeSubagents, totalTokens } from './usage.js';
|
|
3
|
+
export { MAX_TURN_TEXT_CHARS };
|
|
4
|
+
/**
|
|
5
|
+
* Cap on the characters of EARLIER messages sent with a turn (the current turn's own user message is
|
|
6
|
+
* extra, and is itself capped at MAX_TURN_TEXT_CHARS). The payload grows with the conversation, so
|
|
7
|
+
* when the history would exceed this the OLDEST whole exchanges are dropped and the most recent are
|
|
8
|
+
* kept: the server should expect a truncated head, flagged by `metadata.history_truncated`. The newest
|
|
9
|
+
* earlier exchange is always kept, even if it alone is over the cap. Counted in characters (UTF-16
|
|
10
|
+
* code units), not bytes.
|
|
11
|
+
*/
|
|
12
|
+
export const HISTORY_BUDGET_CHARS = 200000;
|
|
13
|
+
function promptMessage(userText) {
|
|
14
|
+
return { role: 'user', content: cleanText(userText) };
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* One exchange as redacted, capped messages: the prompt, then everything the transcript shows after it
|
|
18
|
+
* (thinking, tool calls, tool results, replies) in order. A hand-built exchange with only reply text
|
|
19
|
+
* (no transcript behind it) falls back to prompt + reply.
|
|
20
|
+
*/
|
|
21
|
+
function exchangeMessages(exchange) {
|
|
22
|
+
const out = [promptMessage(exchange.userText)];
|
|
23
|
+
if (exchange.messages) {
|
|
24
|
+
for (const raw of exchange.messages) {
|
|
25
|
+
const message = sanitizeMessage(raw);
|
|
26
|
+
if (message) {
|
|
27
|
+
out.push(message);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else if (exchange.assistantText) {
|
|
32
|
+
const reply = cleanText(exchange.assistantText);
|
|
33
|
+
if (reply) {
|
|
34
|
+
out.push({ role: 'assistant', content: reply });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return out;
|
|
38
|
+
}
|
|
39
|
+
/** Characters an exchange will occupy once capped (an estimate: redaction usually shortens it, but `[REDACTED]` can replace a shorter secret). */
|
|
40
|
+
function cappedSize(exchange) {
|
|
41
|
+
const prompt = Math.min(exchange.userText.length, MAX_TURN_TEXT_CHARS);
|
|
42
|
+
if (exchange.messages) {
|
|
43
|
+
return prompt + exchange.messages.reduce((n, m) => n + messageSize(m), 0);
|
|
44
|
+
}
|
|
45
|
+
return prompt + Math.min(exchange.assistantText?.length ?? 0, MAX_TURN_TEXT_CHARS);
|
|
46
|
+
}
|
|
47
|
+
/** How many messages an exchange would have contributed (for `omitted`). */
|
|
48
|
+
function messageCount(exchange) {
|
|
49
|
+
return 1 + (exchange.messages ? exchange.messages.length : exchange.assistantText ? 1 : 0);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The messages sent with turn `turnIndex`: every earlier message (prompts, thinking, tool calls and results,
|
|
53
|
+
* replies) since the skill was invoked, in order, then this turn's user message. "Since the skill was invoked" is the session's
|
|
54
|
+
* `anchor` — the timestamp of its first captured turn — and only exchanges a hook actually captured
|
|
55
|
+
* (`captured`) are included, so nothing the user said before the skill ran, or while capture was off,
|
|
56
|
+
* is uploaded, however many exchanges the transcript holds that no hook saw (`/compact`, image
|
|
57
|
+
* prompts, a second Stop for one prompt). Without a usable anchor there is no history at all. What is
|
|
58
|
+
* sent is prompts, thinking, tool calls and results and replies, redacted and capped like the turn
|
|
59
|
+
* itself. If the start of the skill's conversation is no longer in the transcript window, or the history is over budget, the OLDEST part is what is missing and
|
|
60
|
+
* `truncated` is set.
|
|
61
|
+
*/
|
|
62
|
+
export function prepareTurnMessages(turn, turnIndex, anchor, captured) {
|
|
63
|
+
const anchorMs = anchor ? Date.parse(anchor) : Number.NaN;
|
|
64
|
+
const earlier = turn.earlier ?? [];
|
|
65
|
+
// Exchanges at or after the anchor that a hook actually captured, in order. One with no usable
|
|
66
|
+
// timestamp can't be placed, so it is left out (fail closed); inside the skill's conversation that
|
|
67
|
+
// is a gap worth flagging. So is an answered exchange no hook captured (capture was off, or the hook
|
|
68
|
+
// was killed): it is never swept up into a later upload. An uncaptured exchange with no reply (a
|
|
69
|
+
// command, an interrupted prompt) is dropped quietly, because there was no turn to capture.
|
|
70
|
+
const since = [];
|
|
71
|
+
let gap = false;
|
|
72
|
+
const usage = emptyUsage();
|
|
73
|
+
const subagents = emptySubagentUsage();
|
|
74
|
+
addUsage(usage, turn.usage);
|
|
75
|
+
mergeSubagents(subagents, turn.subagents);
|
|
76
|
+
if (turnIndex > 1 && !Number.isNaN(anchorMs)) {
|
|
77
|
+
for (const e of earlier) {
|
|
78
|
+
const ms = e.timestamp ? Date.parse(e.timestamp) : Number.NaN;
|
|
79
|
+
if (Number.isNaN(ms)) {
|
|
80
|
+
gap || (gap = since.length > 0);
|
|
81
|
+
}
|
|
82
|
+
else if (ms >= anchorMs) {
|
|
83
|
+
if (e.timestamp && captured.has(e.timestamp)) {
|
|
84
|
+
since.push(e);
|
|
85
|
+
addUsage(usage, e.usage);
|
|
86
|
+
mergeSubagents(subagents, e.subagents);
|
|
87
|
+
}
|
|
88
|
+
else if (e.assistantText) {
|
|
89
|
+
gap = true;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Newest first, so the budget keeps the most recent; the newest is kept whatever its size.
|
|
95
|
+
const kept = [];
|
|
96
|
+
let used = 0;
|
|
97
|
+
for (let i = since.length - 1; i >= 0; i--) {
|
|
98
|
+
const size = cappedSize(since[i]);
|
|
99
|
+
if (kept.length > 0 && used + size > HISTORY_BUDGET_CHARS) {
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
kept.unshift(since[i]);
|
|
103
|
+
used += size;
|
|
104
|
+
}
|
|
105
|
+
const dropped = since.slice(0, since.length - kept.length);
|
|
106
|
+
const omitted = dropped.reduce((n, e) => n + messageCount(e), 0);
|
|
107
|
+
const messages = kept.flatMap(exchangeMessages);
|
|
108
|
+
if (turn.userText) {
|
|
109
|
+
messages.push(promptMessage(turn.userText));
|
|
110
|
+
}
|
|
111
|
+
// This turn's own tool loop (everything up to, not including, its final reply).
|
|
112
|
+
for (const raw of turn.currentMessages ?? []) {
|
|
113
|
+
const message = sanitizeMessage(raw);
|
|
114
|
+
if (message) {
|
|
115
|
+
messages.push(message);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Did we see where the skill's conversation began? Turn 1 is that start; later turns need the
|
|
119
|
+
// anchor's own exchange to still be in the window.
|
|
120
|
+
const stamps = turn.earlierStamps ?? earlier.flatMap((e) => (e.timestamp ? [e.timestamp] : []));
|
|
121
|
+
// A captured exchange that can't be rendered (an image-only prompt: no text of its own, so there is
|
|
122
|
+
// no user message to pair its reply with) is missing from the history; say so.
|
|
123
|
+
const rendered = new Set(earlier.flatMap((e) => (e.timestamp ? [e.timestamp] : [])));
|
|
124
|
+
const unrenderable = turnIndex > 1 && !Number.isNaN(anchorMs) && stamps.some((st) => Date.parse(st) >= anchorMs && captured.has(st) && !rendered.has(st));
|
|
125
|
+
const anchorSeen = turnIndex <= 1 || (anchor !== undefined && (turn.exchangeTimestamp === anchor || stamps.includes(anchor)));
|
|
126
|
+
return {
|
|
127
|
+
messages,
|
|
128
|
+
omitted,
|
|
129
|
+
truncated: omitted > 0 || gap || unrenderable || !anchorSeen,
|
|
130
|
+
...(totalTokens(usage) > 0 ? { usage } : {}),
|
|
131
|
+
...(subagents.calls > 0 ? { subagents } : {}),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* The blocks of this turn's reply: the transcript's own (thinking, then text) when it shows the final
|
|
136
|
+
* message, otherwise just the text the hook was given.
|
|
137
|
+
*/
|
|
138
|
+
function replyBlocks(turn) {
|
|
139
|
+
const blocks = (turn.finalReply ?? []).map(sanitizeBlock).filter((b) => b !== undefined);
|
|
140
|
+
return blocks.some((b) => b.type === 'text') ? blocks : [{ type: 'text', text: cleanText(turn.assistantText) }];
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* An Anthropic-shaped envelope for ONE turn captured by a hook, carrying the conversation so far.
|
|
144
|
+
*
|
|
145
|
+
* `request_body.messages` is the conversation since the skill was invoked, in order, ending on the last
|
|
146
|
+
* message before this turn's reply (`prepareTurnMessages`, passed in as `prepared`); `response_body` is this turn's
|
|
147
|
+
* reply. The server keeps one chat log per session and the newest turn replaces the stored one, so a
|
|
148
|
+
* late-arriving older turn (a replay) is ignored by it.
|
|
149
|
+
*
|
|
150
|
+
* The url is `coolhand-hook://<agent>/session/<id>/turn/<n>` — deliberately NOT the
|
|
151
|
+
* `claudecode://session/<id>` scheme `analyze-claude-sessions` uses. The server needs the session id
|
|
152
|
+
* and the turn number from it. `response_body.id` is `<session>:<turn>:<digest>`, and the digest ties
|
|
153
|
+
* it to the turn's content. It is no longer the server's dedup key, but stays unique per turn for
|
|
154
|
+
* debugging and correlation. What goes in is the conversation as structured blocks: prompts, thinking,
|
|
155
|
+
* tool calls, tool results and replies (subagent traffic and injected context excluded), all
|
|
156
|
+
* secret-scrubbed and capped (see blocks.ts).
|
|
157
|
+
*/
|
|
158
|
+
export function buildTurnEnvelope(agent, turn, turnIndex, digest, prepared,
|
|
159
|
+
/** The skill's text, sent as `request_body.system`. Redacted and capped here again, so state saved by an older version is scrubbed too. */
|
|
160
|
+
system) {
|
|
161
|
+
return {
|
|
162
|
+
url: `coolhand-hook://${agent}/session/${encodeURIComponent(turn.sessionId)}/turn/${turnIndex}`,
|
|
163
|
+
method: 'POST',
|
|
164
|
+
status_code: 200,
|
|
165
|
+
request_body: {
|
|
166
|
+
model: turn.model,
|
|
167
|
+
...(system ? { system: cleanText(system) } : {}),
|
|
168
|
+
messages: prepared.messages,
|
|
169
|
+
},
|
|
170
|
+
response_body: {
|
|
171
|
+
id: `${turn.sessionId}:${turnIndex}:${digest.slice(0, 8)}`,
|
|
172
|
+
type: 'message',
|
|
173
|
+
role: 'assistant',
|
|
174
|
+
model: turn.model,
|
|
175
|
+
content: replyBlocks(turn),
|
|
176
|
+
...(prepared.usage ? { usage: prepared.usage } : {}),
|
|
177
|
+
},
|
|
178
|
+
turnCount: turnIndex,
|
|
179
|
+
projectPath: turn.cwd,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=turn-envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-envelope.js","sourceRoot":"","sources":["../../src/sessions/turn-envelope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Token counts in the shape Claude Code writes on every assistant message (and the ingest API reads). */
|
|
2
|
+
export interface Usage {
|
|
3
|
+
input_tokens: number;
|
|
4
|
+
output_tokens: number;
|
|
5
|
+
cache_read_input_tokens: number;
|
|
6
|
+
cache_creation_input_tokens: number;
|
|
7
|
+
}
|
|
8
|
+
/** What subagents (Agent tool calls) spent, which a single log can't price: they run on other models. */
|
|
9
|
+
export interface SubagentUsage {
|
|
10
|
+
calls: number;
|
|
11
|
+
total: Usage;
|
|
12
|
+
by_model: Record<string, Usage>;
|
|
13
|
+
}
|
|
14
|
+
export declare function emptyUsage(): Usage;
|
|
15
|
+
export declare function emptySubagentUsage(): SubagentUsage;
|
|
16
|
+
/** Add the four token fields of a raw `usage` object (anything else in it is ignored) into `into`. */
|
|
17
|
+
export declare function addUsage(into: Usage, raw: unknown): void;
|
|
18
|
+
export declare function totalTokens(u: Usage): number;
|
|
19
|
+
/** Add one subagent run (an Agent tool result) under the model it ran on. */
|
|
20
|
+
export declare function addSubagent(into: SubagentUsage, model: string, raw: unknown): void;
|
|
21
|
+
/** Fold `from` into `into`. */
|
|
22
|
+
export declare function mergeSubagents(into: SubagentUsage, from: SubagentUsage | undefined): void;
|
|
23
|
+
//# sourceMappingURL=usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/sessions/usage.ts"],"names":[],"mappings":"AAAA,0GAA0G;AAC1G,MAAM,WAAW,KAAK;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,EAAE,MAAM,CAAC;IAChC,2BAA2B,EAAE,MAAM,CAAC;CACrC;AAED,yGAAyG;AACzG,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CACjC;AAED,wBAAgB,UAAU,IAAI,KAAK,CAElC;AAED,wBAAgB,kBAAkB,IAAI,aAAa,CAElD;AAMD,sGAAsG;AACtG,wBAAgB,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CASxD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAE5C;AAiBD,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAMlF;AAED,+BAA+B;AAC/B,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CASzF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export function emptyUsage() {
|
|
2
|
+
return { input_tokens: 0, output_tokens: 0, cache_read_input_tokens: 0, cache_creation_input_tokens: 0 };
|
|
3
|
+
}
|
|
4
|
+
export function emptySubagentUsage() {
|
|
5
|
+
return { calls: 0, total: emptyUsage(), by_model: {} };
|
|
6
|
+
}
|
|
7
|
+
function count(value) {
|
|
8
|
+
return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : 0;
|
|
9
|
+
}
|
|
10
|
+
/** Add the four token fields of a raw `usage` object (anything else in it is ignored) into `into`. */
|
|
11
|
+
export function addUsage(into, raw) {
|
|
12
|
+
if (!raw || typeof raw !== 'object') {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const u = raw;
|
|
16
|
+
into.input_tokens += count(u.input_tokens);
|
|
17
|
+
into.output_tokens += count(u.output_tokens);
|
|
18
|
+
into.cache_read_input_tokens += count(u.cache_read_input_tokens);
|
|
19
|
+
into.cache_creation_input_tokens += count(u.cache_creation_input_tokens);
|
|
20
|
+
}
|
|
21
|
+
export function totalTokens(u) {
|
|
22
|
+
return u.input_tokens + u.output_tokens + u.cache_read_input_tokens + u.cache_creation_input_tokens;
|
|
23
|
+
}
|
|
24
|
+
/** A model name from the transcript as a safe `by_model` key: bounded, and never one that names an object prototype. */
|
|
25
|
+
function modelKey(model) {
|
|
26
|
+
const key = model.slice(0, 100);
|
|
27
|
+
return key === '__proto__' || key === 'constructor' || key === 'prototype' ? 'unknown' : key;
|
|
28
|
+
}
|
|
29
|
+
/** The usage kept for `model`, made on first use. Only an own property counts: `toString` is not a usage record. */
|
|
30
|
+
function modelSlot(by_model, model) {
|
|
31
|
+
const key = modelKey(model);
|
|
32
|
+
if (!Object.prototype.hasOwnProperty.call(by_model, key)) {
|
|
33
|
+
by_model[key] = emptyUsage();
|
|
34
|
+
}
|
|
35
|
+
return by_model[key];
|
|
36
|
+
}
|
|
37
|
+
/** Add one subagent run (an Agent tool result) under the model it ran on. */
|
|
38
|
+
export function addSubagent(into, model, raw) {
|
|
39
|
+
const run = emptyUsage();
|
|
40
|
+
addUsage(run, raw);
|
|
41
|
+
into.calls += 1;
|
|
42
|
+
addUsage(into.total, run);
|
|
43
|
+
addUsage(modelSlot(into.by_model, model), run);
|
|
44
|
+
}
|
|
45
|
+
/** Fold `from` into `into`. */
|
|
46
|
+
export function mergeSubagents(into, from) {
|
|
47
|
+
if (!from) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
into.calls += from.calls;
|
|
51
|
+
addUsage(into.total, from.total);
|
|
52
|
+
for (const [model, u] of Object.entries(from.by_model)) {
|
|
53
|
+
addUsage(modelSlot(into.by_model, model), u);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/sessions/usage.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,UAAU;IACxB,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,uBAAuB,EAAE,CAAC,EAAE,2BAA2B,EAAE,CAAC,EAAE,CAAC;AAC3G,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,KAAK,CAAC,KAAc;IAC3B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,QAAQ,CAAC,IAAW,EAAE,GAAY;IAChD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IACD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAC7C,IAAI,CAAC,uBAAuB,IAAI,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC;IACjE,IAAI,CAAC,2BAA2B,IAAI,KAAK,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAQ;IAClC,OAAO,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,uBAAuB,GAAG,CAAC,CAAC,2BAA2B,CAAC;AACtG,CAAC;AAED,wHAAwH;AACxH,SAAS,QAAQ,CAAC,KAAa;IAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChC,OAAO,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AAC/F,CAAC;AAED,oHAAoH;AACpH,SAAS,SAAS,CAAC,QAA+B,EAAE,KAAa;IAC/D,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;QACzD,QAAQ,CAAC,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,IAAmB,EAAE,KAAa,EAAE,GAAY;IAC1E,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IAChB,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,cAAc,CAAC,IAAmB,EAAE,IAA+B;IACjF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;IACT,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { HookAgent } from './hooks/types.js';
|
|
1
2
|
export interface ClientEntry {
|
|
2
3
|
client_id: string;
|
|
3
4
|
client_name: string;
|
|
@@ -10,6 +11,8 @@ export interface ConfigFile {
|
|
|
10
11
|
version: 1;
|
|
11
12
|
default_client_id: string | null;
|
|
12
13
|
clients: Record<string, ClientEntry>;
|
|
14
|
+
/** `false` turns off the background auto-updater. Preserved across saves; absent means enabled. */
|
|
15
|
+
auto_update?: boolean;
|
|
13
16
|
}
|
|
14
17
|
export interface LoginOptions {
|
|
15
18
|
baseUrl?: string;
|
|
@@ -24,6 +27,10 @@ export interface LogoutOptions {
|
|
|
24
27
|
all?: boolean;
|
|
25
28
|
json?: boolean;
|
|
26
29
|
}
|
|
30
|
+
export interface UpdateOptions {
|
|
31
|
+
check?: boolean;
|
|
32
|
+
json?: boolean;
|
|
33
|
+
}
|
|
27
34
|
export interface StatusOptions {
|
|
28
35
|
clientId?: string;
|
|
29
36
|
json?: boolean;
|
|
@@ -344,6 +351,20 @@ export interface ComplaintBoxOptions {
|
|
|
344
351
|
json?: boolean;
|
|
345
352
|
clientId?: string;
|
|
346
353
|
}
|
|
354
|
+
export interface CaptureTurnOptions {
|
|
355
|
+
agent: HookAgent;
|
|
356
|
+
/** Name of the skill that enabled the hook; sent as metadata. */
|
|
357
|
+
skill?: string;
|
|
358
|
+
/** Public ingest key. Falls back to COOLHAND_API_KEY. */
|
|
359
|
+
apiKey?: string;
|
|
360
|
+
baseUrl?: string;
|
|
361
|
+
/** Attribute turns to the anonymous machine id instead of the git email. */
|
|
362
|
+
anonymous?: boolean;
|
|
363
|
+
/** The skill's version; sent as `metadata.skill_version` (never in the declaration). */
|
|
364
|
+
skillVersion?: string;
|
|
365
|
+
/** `false` (from `--no-declare`) stops the skill's workload being declared; default is to declare it when `skill` is set. */
|
|
366
|
+
declare?: boolean;
|
|
367
|
+
}
|
|
347
368
|
export interface ClaudeOptions {
|
|
348
369
|
args: string[];
|
|
349
370
|
clientId?: string;
|
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,CAAC,EAAE,MAAM,CAAC;IACjB,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;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAuaA,MAAM,CAAC,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AAC3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,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.13.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.13.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.13.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.13.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",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"live-smoke": "bash scripts/run-live-smoke.sh"
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"coolhand-node": "^0.17.
|
|
63
|
+
"coolhand-node": "^0.17.1",
|
|
64
64
|
"mockttp": "^4.2.1"
|
|
65
65
|
},
|
|
66
66
|
"overrides": {
|
|
@@ -79,6 +79,7 @@
|
|
|
79
79
|
"eslint-plugin-jest": "^29.16.0",
|
|
80
80
|
"globals": "^17.8.0",
|
|
81
81
|
"jest": "^30.2.0",
|
|
82
|
+
"js-yaml": "^4.2.0",
|
|
82
83
|
"ts-jest": "^29.4.11",
|
|
83
84
|
"ts-node": "^10.9.0",
|
|
84
85
|
"typescript": "^5.0.0"
|