claude-code-infinite 1.0.31 → 1.0.33
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 +71 -56
- package/dist/claude-auth-status.d.ts +50 -0
- package/dist/claude-auth-status.d.ts.map +1 -0
- package/dist/claude-auth-status.js +213 -0
- package/dist/claude-auth-status.js.map +1 -0
- package/dist/claude-auth.d.ts +2 -1
- package/dist/claude-auth.d.ts.map +1 -1
- package/dist/claude-auth.js +2 -1
- package/dist/claude-auth.js.map +1 -1
- package/dist/claude-plan-warning.d.ts +13 -40
- package/dist/claude-plan-warning.d.ts.map +1 -1
- package/dist/claude-plan-warning.js +24 -75
- package/dist/claude-plan-warning.js.map +1 -1
- package/dist/cli-args.d.ts +7 -0
- package/dist/cli-args.d.ts.map +1 -1
- package/dist/cli-args.js +19 -0
- package/dist/cli-args.js.map +1 -1
- package/dist/cli-main.js +117 -17
- package/dist/cli-main.js.map +1 -1
- package/dist/count-tokens.d.ts +7 -3
- package/dist/count-tokens.d.ts.map +1 -1
- package/dist/count-tokens.js +6 -2
- package/dist/count-tokens.js.map +1 -1
- package/dist/diagnostics-schema.d.ts +5 -2
- package/dist/diagnostics-schema.d.ts.map +1 -1
- package/dist/diagnostics-schema.js +26 -6
- package/dist/diagnostics-schema.js.map +1 -1
- package/dist/diagnostics.d.ts +5 -1
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js +7 -2
- package/dist/diagnostics.js.map +1 -1
- package/dist/hooks.d.ts +18 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +57 -4
- package/dist/hooks.js.map +1 -1
- package/dist/memtree-mcp.d.ts +7 -0
- package/dist/memtree-mcp.d.ts.map +1 -1
- package/dist/memtree-mcp.js +12 -1
- package/dist/memtree-mcp.js.map +1 -1
- package/dist/memtree.d.ts +86 -3
- package/dist/memtree.d.ts.map +1 -1
- package/dist/memtree.js +305 -18
- package/dist/memtree.js.map +1 -1
- package/dist/notices.d.ts +2 -0
- package/dist/notices.d.ts.map +1 -1
- package/dist/notices.js +2 -0
- package/dist/notices.js.map +1 -1
- package/dist/open-url.d.ts +49 -0
- package/dist/open-url.d.ts.map +1 -0
- package/dist/open-url.js +100 -0
- package/dist/open-url.js.map +1 -0
- package/dist/proxy.d.ts +77 -1
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +618 -77
- package/dist/proxy.js.map +1 -1
- package/dist/reqlog.d.ts +21 -2
- package/dist/reqlog.d.ts.map +1 -1
- package/dist/reqlog.js.map +1 -1
- package/dist/request-sizing.d.ts +2 -0
- package/dist/request-sizing.d.ts.map +1 -1
- package/dist/request-sizing.js +5 -0
- package/dist/request-sizing.js.map +1 -1
- package/dist/resume-guidance.d.ts +102 -0
- package/dist/resume-guidance.d.ts.map +1 -0
- package/dist/resume-guidance.js +182 -0
- package/dist/resume-guidance.js.map +1 -0
- package/dist/route-fallback.d.ts +23 -0
- package/dist/route-fallback.d.ts.map +1 -1
- package/dist/route-fallback.js +44 -0
- package/dist/route-fallback.js.map +1 -1
- package/dist/sign-in-notice.d.ts +137 -0
- package/dist/sign-in-notice.d.ts.map +1 -0
- package/dist/sign-in-notice.js +300 -0
- package/dist/sign-in-notice.js.map +1 -0
- package/dist/subagent-hint.d.ts +31 -0
- package/dist/subagent-hint.d.ts.map +1 -0
- package/dist/subagent-hint.js +47 -0
- package/dist/subagent-hint.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,6 +15,51 @@ Infinite context for Claude Code: memory for long-running agents. Claude Code In
|
|
|
15
15
|
[MemTree](https://memtree.dev) so their history can be easily searched, navigated, and understood,
|
|
16
16
|
by you and by Claude, within a session and across all of them.
|
|
17
17
|
|
|
18
|
+
## Requirements
|
|
19
|
+
|
|
20
|
+
* **[Claude Code in your terminal](https://code.claude.com/docs/en/quickstart), signed in
|
|
21
|
+
with Claude Pro or Max**
|
|
22
|
+
* [node.js 20.3 or newer](https://nodejs.org/en/download/)
|
|
23
|
+
|
|
24
|
+
<sub>Also works with an Anthropic API key that has credit, but that's far costlier than Pro or Max.</sub>
|
|
25
|
+
|
|
26
|
+
## Setup
|
|
27
|
+
|
|
28
|
+
1. Install Claude Code Infinite (Node ≥ 20.3; no git needed)
|
|
29
|
+
```bash
|
|
30
|
+
npm install -g claude-code-infinite
|
|
31
|
+
```
|
|
32
|
+
2. Run it from your project folder
|
|
33
|
+
```bash
|
|
34
|
+
ccc
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
This will guide you through setting up your PolyChat key which you can also get [here](https://polychat.co/auth?memtree=true).
|
|
38
|
+
|
|
39
|
+
Needs [Claude Code in your terminal](https://code.claude.com/docs/en/quickstart), signed in with
|
|
40
|
+
Claude Pro or Max.
|
|
41
|
+
|
|
42
|
+
<details>
|
|
43
|
+
<summary>Don't have Claude Code in your terminal yet?</summary>
|
|
44
|
+
|
|
45
|
+
```powershell
|
|
46
|
+
# Windows PowerShell
|
|
47
|
+
irm https://claude.ai/install.ps1 | iex
|
|
48
|
+
```
|
|
49
|
+
```bash
|
|
50
|
+
# macOS / Linux
|
|
51
|
+
curl -fsSL https://claude.ai/install.sh | bash
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Or just run `ccc`: when Claude Code isn't installed it offers to install it for you (with the
|
|
55
|
+
same official command) and starts it, and Claude Code asks you to sign in. The Claude desktop
|
|
56
|
+
app isn't enough: `ccc` needs the `claude` command in your terminal
|
|
57
|
+
([help](#claude-code-isnt-installed)).
|
|
58
|
+
|
|
59
|
+
</details>
|
|
60
|
+
|
|
61
|
+
## What it does
|
|
62
|
+
|
|
18
63
|
While Claude works, MemTree summarizes each new batch of messages in the background and files it
|
|
19
64
|
under a topic. Each topic gets its own summary, and the whole session gets one at the top. When a
|
|
20
65
|
session outgrows the context window, Claude works from these summaries plus your most recent
|
|
@@ -38,9 +83,6 @@ work: your priorities, the nuances of your projects, your company and your envir
|
|
|
38
83
|
`/compact` would wipe that detail, MemTree keeps it, so the thread becomes an expert in you. Let it
|
|
39
84
|
orchestrate dozens of subagents on your behalf.
|
|
40
85
|
|
|
41
|
-
> [!IMPORTANT]
|
|
42
|
-
> Needs [Claude Code in your terminal](#setup), signed in with Claude Pro or Max.
|
|
43
|
-
|
|
44
86
|
## Search across sessions
|
|
45
87
|
|
|
46
88
|
Every `ccc` session is indexed as it runs, and Claude gets read-only `memtree` tools over all of
|
|
@@ -58,7 +100,7 @@ your indexed sessions, so you can just ask:
|
|
|
58
100
|
| `read_lines` | Reads the exact original transcript lines under a leaf. |
|
|
59
101
|
|
|
60
102
|
Hits name their node, so Claude goes from a search hit to the summary around it and then to the
|
|
61
|
-
exact lines. Type `/memtree-view`
|
|
103
|
+
exact lines. Type `/memtree-view` to open this session's tree in your browser. Details are under
|
|
62
104
|
[Memory tools](#memory-tools).
|
|
63
105
|
|
|
64
106
|
## Long-session benchmark
|
|
@@ -130,49 +172,6 @@ the history doesn't fit. Grading used a fixed rubric (coverage 30, fix quality 3
|
|
|
130
172
|
session's decisions 15, report accuracy 20, process 5); the harness and the answer key stay
|
|
131
173
|
private because they come from a private codebase.
|
|
132
174
|
|
|
133
|
-
## Requirements
|
|
134
|
-
|
|
135
|
-
* **[Claude Code in your terminal](https://code.claude.com/docs/en/quickstart), signed in
|
|
136
|
-
with Claude Pro or Max** ([don't have it yet?](#setup))
|
|
137
|
-
* [node.js 20.3 or newer](https://nodejs.org/en/download/)
|
|
138
|
-
|
|
139
|
-
<sub>Also works with an Anthropic API key that has credit, but that's far costlier than Pro or Max.</sub>
|
|
140
|
-
|
|
141
|
-
## Setup
|
|
142
|
-
|
|
143
|
-
1. Install Claude Code Infinite (Node ≥ 20.3; no git needed)
|
|
144
|
-
```bash
|
|
145
|
-
npm install -g claude-code-infinite
|
|
146
|
-
```
|
|
147
|
-
2. Run it from your project folder
|
|
148
|
-
```bash
|
|
149
|
-
ccc
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
This will guide you through setting up your PolyChat key which you can also get [here](https://polychat.co/auth?memtree=true).
|
|
153
|
-
|
|
154
|
-
Needs [Claude Code in your terminal](https://code.claude.com/docs/en/quickstart), signed in with
|
|
155
|
-
Claude Pro or Max.
|
|
156
|
-
|
|
157
|
-
<details>
|
|
158
|
-
<summary>Don't have Claude Code yet?</summary>
|
|
159
|
-
|
|
160
|
-
```powershell
|
|
161
|
-
# Windows PowerShell
|
|
162
|
-
irm https://claude.ai/install.ps1 | iex
|
|
163
|
-
```
|
|
164
|
-
```bash
|
|
165
|
-
# macOS / Linux
|
|
166
|
-
curl -fsSL https://claude.ai/install.sh | bash
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
Or just run `ccc`: when Claude Code isn't installed it offers to install it for you (with the
|
|
170
|
-
same official command) and starts it, and Claude Code asks you to sign in. The Claude desktop
|
|
171
|
-
app isn't enough: `ccc` needs the `claude` command in your terminal
|
|
172
|
-
([help](#claude-code-isnt-installed)).
|
|
173
|
-
|
|
174
|
-
</details>
|
|
175
|
-
|
|
176
175
|
## Environments
|
|
177
176
|
|
|
178
177
|
The tool supports multiple environments (this selects the MemTree compression API only — Anthropic traffic always goes directly from your machine to api.anthropic.com):
|
|
@@ -190,7 +189,7 @@ locally, so they cost no model turn.
|
|
|
190
189
|
| Command | What it does |
|
|
191
190
|
| --- | --- |
|
|
192
191
|
| `/ccc:memtree` | Lists the MemTree commands and links your usage dashboard. |
|
|
193
|
-
| `/ccc:memtree-view` |
|
|
192
|
+
| `/ccc:memtree-view` | Opens this session's MemTree page (its newest tree) in your browser and prints its one link. It only prints the link in `-p`/non-TTY runs, over SSH, in CI, on Linux without a display, and for any URL that is not a page of the MemTree server `ccc` uses. |
|
|
194
193
|
| `/ccc:memtree-compact [tokens]` | Compacts the session on your next message (to half the budget, or a target such as `400k`) and keeps the compressed history. |
|
|
195
194
|
| `/ccc:memtree-compact off` | Goes back to sending the conversation whole. |
|
|
196
195
|
|
|
@@ -313,7 +312,7 @@ Turn diagnostics off with any of: `CCC_NO_DIAGNOSTICS=1`, `"diagnostics": false`
|
|
|
313
312
|
|
|
314
313
|
### Memory tools
|
|
315
314
|
|
|
316
|
-
Every `ccc` session, interactive or headless (`-p` and non-TTY runs), gets a small MCP server, `memtree`, with four read-only tools (see [Search across sessions](#search-across-sessions)): `mcp__memtree__search` (`query`; optional `tree`, `"current"` for this session or omitted for all of your sessions; `mode` `text` (default, free) or `vector` (meaning, first page charged); `project`, `since`, `until`, `cursor`, `limit` (default 10, at most 50)), `mcp__memtree__read_node` (`node`, an address `<tree>#<id>` from search, or `id` with optional `tree`: summary, path from the root, children, leaf line range), `mcp__memtree__read_lines` (a leaf's `node`, or `block`, `start`, `end` with optional `tree`: exact transcript lines, at most 400 lines / 40k characters per call) (with `tail: true` instead, the newest messages after the tree that are not indexed yet) and `mcp__memtree__list` (your sessions, most recently active first; `since`, `until`, `project`, `q`, `cursor`, `limit`). Other sessions' trees are named explicitly by reference and authorized by your MemTree key. This session's tree (`tree: "current"`, or no `tree` on `read_node`/`read_lines`) is the one the current request was served from: the server asks the `ccc` proxy for `GET $ANTHROPIC_BASE_URL/memtree/current?session=<id>` (only that session's compression source page, or its stored source page on resume; `current.json?session=<id>` returns the page itself). Completed pages are cached. If the proxy temporarily serves an older prefix while a newer tree is indexing, the tools reuse that prefix during a 45-second cooldown, then check the page again. `ccc` registers it with `--mcp-config=<temp file>`, which keeps working under `--strict-mcp-config`, and pre-allows the four read-only tools; `CCC_MEMTREE_MCP=0` turns it off. The MCP process requires `CLAUDE_CODE_SESSION_ID` and checks that both the pointer and page belong to it. If Claude Code retains an MCP process with an old session ID after `/clear` or a session switch, reconnect the MCP server with the current session ID; it cannot infer a new identity from another session using the proxy. Your own choices win: if your `--mcp-config` already names a server `memtree`, `ccc` adds and pre-allows nothing (if it runs `ccc memtree-mcp`, or `ccc staging memtree-mcp`, the tools work as usual); `--allowedTools` lists are added together, so yours is kept and only the four memtree tools are pre-allowed; tools named by `--disallowedTools` (one tool, `mcp__memtree`, or `mcp__memtree__*`) are neither pre-allowed nor advertised. With `--continue`, Claude Code starts MCP servers under a new session id before it switches to the continued session, so this session's tree fails closed (`list` and searches across sessions still work); use `--resume <id>` instead. Whenever the tools are configured, compress calls carry `x-memtree-tools: search,read_node,read_lines,list` so MemTree tells the model how to use them.
|
|
315
|
+
Every `ccc` session, interactive or headless (`-p` and non-TTY runs), gets a small MCP server, `memtree`, with four read-only tools (see [Search across sessions](#search-across-sessions)): `mcp__memtree__search` (`query`; optional `tree`, `"current"` for this session or omitted for all of your sessions; `mode` `text` (default, free) or `vector` (meaning, first page charged); `project`, `since`, `until`, `cursor`, `limit` (default 10, at most 50)), `mcp__memtree__read_node` (`node`, an address `<tree>#<id>` from search, or `id` with optional `tree`: summary, path from the root, children, leaf line range), `mcp__memtree__read_lines` (a leaf's `node`, or `block`, `start`, `end` with optional `tree`: exact transcript lines, at most 400 lines / 40k characters per call) (with `tail: true` instead, the newest messages after the tree that are not indexed yet) and `mcp__memtree__list` (your sessions, most recently active first; `since`, `until`, `project`, `q`, `cursor`, `limit`). Other sessions' trees are named explicitly by reference and authorized by your MemTree key. This session's tree (`tree: "current"`, or no `tree` on `read_node`/`read_lines`) is the one the current request was served from: the server asks the `ccc` proxy for `GET $ANTHROPIC_BASE_URL/memtree/current?session=<id>` (only that session's compression source page, or its stored source page on resume; `current.json?session=<id>` returns the page itself). Completed pages are cached. If the proxy temporarily serves an older prefix while a newer tree is indexing, the tools reuse that prefix during a 45-second cooldown, then check the page again. `ccc` registers it with `--mcp-config=<temp file>`, which keeps working under `--strict-mcp-config`, and pre-allows the four read-only tools; `CCC_MEMTREE_MCP=0` turns it off. The MCP process requires `CLAUDE_CODE_SESSION_ID` and checks that both the pointer and page belong to it. If Claude Code retains an MCP process with an old session ID after `/clear` or a session switch, reconnect the MCP server with the current session ID; it cannot infer a new identity from another session using the proxy. Your own choices win: if your `--mcp-config` already names a server `memtree`, `ccc` adds and pre-allows nothing (if it runs `ccc memtree-mcp`, or `ccc staging memtree-mcp`, the tools work as usual); `--allowedTools` lists are added together, so yours is kept and only the four memtree tools are pre-allowed; tools named by `--disallowedTools` (one tool, `mcp__memtree`, or `mcp__memtree__*`) are neither pre-allowed nor advertised. With `--continue`, Claude Code starts MCP servers under a new session id before it switches to the continued session, so this session's tree fails closed (`list` and searches across sessions still work); use `--resume <id>` instead. Whenever the tools are configured, compress calls carry `x-memtree-tools: search,read_node,read_lines,list` so MemTree tells the model how to use them. The tools are loaded up front (`alwaysLoad`), in resumed sessions and subagents too; `search`'s description says so, because a resumed session keeps the MCP instructions and deferred-tools list it was first given, which may predate that. A subagent (the Agent/Task tool, foreground or background) gets one line at its start, from the SubagentStart hook while MemTree works: the parent's session id and newest tree, and to search it before re-deriving the parent's work.
|
|
317
316
|
|
|
318
317
|
### Headless / agents
|
|
319
318
|
|
|
@@ -379,13 +378,29 @@ If counting an assembled compressed prefix discovers that it is over budget,
|
|
|
379
378
|
whether to forward or refuse it. The request log records that decision under
|
|
380
379
|
`lateCountRecovery.outcome` as `compressed`, `forwarded`, or `refused`.
|
|
381
380
|
|
|
382
|
-
A blocking compression call normally gets 15 seconds
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
381
|
+
A blocking compression call normally gets 15 seconds plus 2.5 ms per KiB it uploads
|
|
382
|
+
(~79 seconds for a 26 MB session; MemTree has taken up to 53 seconds for one that size);
|
|
383
|
+
when it fails, the request goes out on the old prefix or whole. When there is neither
|
|
384
|
+
(no compressed prefix to ride, as on the first turn after `--resume`, and a whole
|
|
385
|
+
request that delivery would refuse as over the window), the call gets 120 seconds (or
|
|
386
|
+
its upload's budget, if longer) instead, since a timeout could only end in a refusal.
|
|
387
|
+
`CCC_COMPRESS_TIMEOUT_MS` overrides the 15 and 120 seconds. A Claude Code retry that
|
|
388
|
+
arrives while the same session's compression of the same history is running waits for
|
|
389
|
+
that call instead of starting another. On a 1M window, a main-thread compression the
|
|
390
|
+
turn stopped waiting for (or whose turn Claude Code abandoned) is not dropped: it runs on
|
|
391
|
+
to the long budget as the session's prepared prefix, and the next turn at the budget
|
|
392
|
+
waits for it and rides it instead of starting another (`compress.carriedOver` in
|
|
393
|
+
`requests.jsonl`). A compression whose connection drops before any answer (a Wi-Fi
|
|
394
|
+
switch: `ECONNRESET`, `EHOSTUNREACH`, ...) is sent once more within the same budget, and a
|
|
395
|
+
token count that loses its connection is retried like one that timed out.
|
|
396
|
+
|
|
397
|
+
Background indexing sends each conversation's history at most one call at a time, keeps
|
|
398
|
+
only the newest waiting call, and skips a call until the history has gained about 30,000
|
|
399
|
+
characters of text (the server's 10k-token index minimum) since the last one it sent.
|
|
400
|
+
A subagent is indexed once, when it ends (SubagentStop, or at exit for one still running),
|
|
401
|
+
and on every tool turn only once it passes half of its budget, so its tree is ready if
|
|
402
|
+
it ever needs compressing. Its tree, searchable with the MemTree tools and on its page,
|
|
403
|
+
therefore covers a running subagent's work only from the moment it ends.
|
|
389
404
|
|
|
390
405
|
Before publishing a release, verify Claude subscription OAuth counting in a live
|
|
391
406
|
session: launch this checkout's `node dist/cli.js --resume` with the normal Claude
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code's own answer to "am I signed in?": `claude auth status --json`
|
|
3
|
+
* (Claude Code 2.x). Unlike the config-file guess in claude-auth.ts, it knows
|
|
4
|
+
* where each OS keeps the credentials (macOS keychain, `.credentials.json` on
|
|
5
|
+
* Linux and Windows), which env key or setting wins, and that nobody is signed
|
|
6
|
+
* in at all, which the files cannot tell apart from "can't tell".
|
|
7
|
+
*
|
|
8
|
+
* Only four fields are read: loggedIn, authMethod, apiProvider and
|
|
9
|
+
* subscriptionType (plus apiKeySource's name). The email, organization and
|
|
10
|
+
* every other field are never parsed out or kept.
|
|
11
|
+
*/
|
|
12
|
+
import type { ApiKeySource, ClaudeAuthType, ClaudePlan } from "./claude-auth.js";
|
|
13
|
+
/**
|
|
14
|
+
* How the probe went: answered, ran but said nothing usable, too slow, no such
|
|
15
|
+
* command, or not asked (the session's options change its sign-in).
|
|
16
|
+
*/
|
|
17
|
+
export declare const AUTH_PROBE_RESULTS: readonly ["ok", "failed", "timeout", "unsupported", "skipped"];
|
|
18
|
+
export type AuthProbeResult = (typeof AUTH_PROBE_RESULTS)[number];
|
|
19
|
+
/** A slow Windows npm shim starts node twice; Claude Code itself answers in ~0.1 s. */
|
|
20
|
+
export declare const AUTH_PROBE_TIMEOUT_MS = 5000;
|
|
21
|
+
export interface ClaudeAuthStatus {
|
|
22
|
+
/** "none": Claude Code says nobody is signed in. */
|
|
23
|
+
auth: ClaudeAuthType;
|
|
24
|
+
plan: ClaudePlan;
|
|
25
|
+
/** The API key's source by name, for an env key or apiKeyHelper. */
|
|
26
|
+
keySource?: ApiKeySource;
|
|
27
|
+
/** Claude Code's "Anthropic Console account" sign-in (API usage billing). */
|
|
28
|
+
console: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface AuthProbe {
|
|
31
|
+
result: AuthProbeResult;
|
|
32
|
+
ms: number;
|
|
33
|
+
status?: ClaudeAuthStatus;
|
|
34
|
+
}
|
|
35
|
+
export interface ProbeOptions {
|
|
36
|
+
/** Arguments before `auth status --json` (tests run a script through node). */
|
|
37
|
+
leadingArgs?: string[];
|
|
38
|
+
env?: NodeJS.ProcessEnv;
|
|
39
|
+
timeoutMs?: number;
|
|
40
|
+
now?: () => number;
|
|
41
|
+
}
|
|
42
|
+
/** False when the session's own options may sign it in differently than the probe sees. */
|
|
43
|
+
export declare function probeAnswersForSession(args: readonly string[]): boolean;
|
|
44
|
+
/** The probe for a session it can't answer for: no sign-in guess (sign-in-notice.ts). */
|
|
45
|
+
export declare function skippedProbe(): AuthProbe;
|
|
46
|
+
/** Run `claude auth status --json`; never throws or rejects, and is bounded by timeoutMs. */
|
|
47
|
+
export declare function probeClaudeAuthStatus(command: string, opts?: ProbeOptions): Promise<AuthProbe>;
|
|
48
|
+
/** The sign-in from `claude auth status --json` output, or undefined when it is not that. */
|
|
49
|
+
export declare function parseAuthStatus(stdout: string, env?: NodeJS.ProcessEnv): ClaudeAuthStatus | undefined;
|
|
50
|
+
//# sourceMappingURL=claude-auth-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-auth-status.d.ts","sourceRoot":"","sources":["../src/claude-auth-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGjF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,gEAAiE,CAAC;AACjG,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,uFAAuF;AACvF,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAS1C,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,oEAAoE;IACpE,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,6EAA6E;IAC7E,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,2FAA2F;AAC3F,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAGvE;AAED,yFAAyF;AACzF,wBAAgB,YAAY,IAAI,SAAS,CAExC;AAED,6FAA6F;AAC7F,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,GACvC,OAAO,CAAC,SAAS,CAAC,CAmCpB;AAED,6FAA6F;AAC7F,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnD,gBAAgB,GAAG,SAAS,CAoB9B"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code's own answer to "am I signed in?": `claude auth status --json`
|
|
3
|
+
* (Claude Code 2.x). Unlike the config-file guess in claude-auth.ts, it knows
|
|
4
|
+
* where each OS keeps the credentials (macOS keychain, `.credentials.json` on
|
|
5
|
+
* Linux and Windows), which env key or setting wins, and that nobody is signed
|
|
6
|
+
* in at all, which the files cannot tell apart from "can't tell".
|
|
7
|
+
*
|
|
8
|
+
* Only four fields are read: loggedIn, authMethod, apiProvider and
|
|
9
|
+
* subscriptionType (plus apiKeySource's name). The email, organization and
|
|
10
|
+
* every other field are never parsed out or kept.
|
|
11
|
+
*/
|
|
12
|
+
import { spawn as spawnPlain } from "node:child_process";
|
|
13
|
+
import * as os from "node:os";
|
|
14
|
+
import * as path from "node:path";
|
|
15
|
+
import spawn from "cross-spawn";
|
|
16
|
+
import { planFrom } from "./claude-auth.js";
|
|
17
|
+
/**
|
|
18
|
+
* How the probe went: answered, ran but said nothing usable, too slow, no such
|
|
19
|
+
* command, or not asked (the session's options change its sign-in).
|
|
20
|
+
*/
|
|
21
|
+
export const AUTH_PROBE_RESULTS = ["ok", "failed", "timeout", "unsupported", "skipped"];
|
|
22
|
+
/** A slow Windows npm shim starts node twice; Claude Code itself answers in ~0.1 s. */
|
|
23
|
+
export const AUTH_PROBE_TIMEOUT_MS = 5000;
|
|
24
|
+
const MAX_OUTPUT = 64 * 1024;
|
|
25
|
+
/**
|
|
26
|
+
* Session options that change which credentials Claude Code uses (an
|
|
27
|
+
* apiKeyHelper in --settings, --bare's key-only sign-in). `claude auth status`
|
|
28
|
+
* takes none of them, so its answer would not be this session's.
|
|
29
|
+
*/
|
|
30
|
+
const SESSION_AUTH_OPTIONS = ["--settings", "--setting-sources", "--bare"];
|
|
31
|
+
/** False when the session's own options may sign it in differently than the probe sees. */
|
|
32
|
+
export function probeAnswersForSession(args) {
|
|
33
|
+
return !args.some((arg) => SESSION_AUTH_OPTIONS.some((option) => arg === option || arg.startsWith(`${option}=`)));
|
|
34
|
+
}
|
|
35
|
+
/** The probe for a session it can't answer for: no sign-in guess (sign-in-notice.ts). */
|
|
36
|
+
export function skippedProbe() {
|
|
37
|
+
return { result: "skipped", ms: 0 };
|
|
38
|
+
}
|
|
39
|
+
/** Run `claude auth status --json`; never throws or rejects, and is bounded by timeoutMs. */
|
|
40
|
+
export function probeClaudeAuthStatus(command, opts = {}) {
|
|
41
|
+
const now = opts.now ?? Date.now;
|
|
42
|
+
const started = now();
|
|
43
|
+
return new Promise((resolve) => {
|
|
44
|
+
let out = "";
|
|
45
|
+
let done = false;
|
|
46
|
+
const finish = (result, status) => {
|
|
47
|
+
if (done)
|
|
48
|
+
return;
|
|
49
|
+
done = true;
|
|
50
|
+
clearTimeout(timer);
|
|
51
|
+
process.removeListener("exit", onExit);
|
|
52
|
+
stopSignals();
|
|
53
|
+
resolve({ result, ms: Math.max(0, now() - started), ...(status ? { status } : {}) });
|
|
54
|
+
};
|
|
55
|
+
const child = startProbe(command, opts);
|
|
56
|
+
// Detached on POSIX, so the terminal's signals no longer reach it: ccc exiting early
|
|
57
|
+
// (process.exit, or SIGINT/SIGTERM/SIGHUP outside a raw-mode prompt) takes it along.
|
|
58
|
+
// Windows: not detached, so the console's events reach it anyway; no signal hooks.
|
|
59
|
+
const onExit = () => { if (child)
|
|
60
|
+
killTree(child); };
|
|
61
|
+
process.once("exit", onExit);
|
|
62
|
+
const stopSignals = process.platform === "win32" ? () => { } : killOnSignals(onExit);
|
|
63
|
+
const timer = setTimeout(() => {
|
|
64
|
+
finish("timeout");
|
|
65
|
+
if (child)
|
|
66
|
+
killTree(child);
|
|
67
|
+
}, opts.timeoutMs ?? AUTH_PROBE_TIMEOUT_MS);
|
|
68
|
+
if (!child)
|
|
69
|
+
return finish("failed");
|
|
70
|
+
child.stdout?.on("data", (chunk) => {
|
|
71
|
+
if (out.length < MAX_OUTPUT)
|
|
72
|
+
out += chunk.toString("utf8");
|
|
73
|
+
});
|
|
74
|
+
child.on("error", () => finish("failed"));
|
|
75
|
+
child.on("close", () => {
|
|
76
|
+
const status = parseAuthStatus(out, opts.env ?? process.env);
|
|
77
|
+
finish(status ? "ok" : probeFailure(out), status);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/** The sign-in from `claude auth status --json` output, or undefined when it is not that. */
|
|
82
|
+
export function parseAuthStatus(stdout, env = process.env) {
|
|
83
|
+
const json = jsonObject(stdout);
|
|
84
|
+
if (!json || typeof json.loggedIn !== "boolean" || typeof json.authMethod !== "string") {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
const keySource = apiKeySource(json.apiKeySource);
|
|
88
|
+
const consoleLogin = json.apiKeySource === "/login managed key";
|
|
89
|
+
const base = { console: consoleLogin, ...(keySource ? { keySource } : {}) };
|
|
90
|
+
// A signed-out cloud gateway is not "no Claude plan": ccc can't tell, so it doesn't say.
|
|
91
|
+
if (!json.loggedIn) {
|
|
92
|
+
return json.apiProvider === "firstParty" || json.apiProvider === undefined
|
|
93
|
+
? { auth: "none", plan: "unknown", ...base } : { auth: "unknown", plan: "unknown", ...base };
|
|
94
|
+
}
|
|
95
|
+
const cloud = cloudProvider(json.apiProvider);
|
|
96
|
+
if (cloud)
|
|
97
|
+
return { auth: cloud, plan: "unknown", ...base };
|
|
98
|
+
if (json.authMethod === "oauth_token" && nonEmpty(env.ANTHROPIC_AUTH_TOKEN)) {
|
|
99
|
+
// ANTHROPIC_AUTH_TOKEN wins over every other token in Claude Code: a bearer key.
|
|
100
|
+
return { auth: "api_key", plan: "unknown", ...base, keySource: "ANTHROPIC_AUTH_TOKEN" };
|
|
101
|
+
}
|
|
102
|
+
return { ...authFromMethod(json.authMethod, json.subscriptionType), ...base };
|
|
103
|
+
}
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
// Helpers
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
function startProbe(command, opts) {
|
|
108
|
+
try {
|
|
109
|
+
return spawn(command, [...(opts.leadingArgs ?? []), "auth", "status", "--json"], {
|
|
110
|
+
env: opts.env ?? process.env,
|
|
111
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
112
|
+
windowsHide: true,
|
|
113
|
+
// Its own process group on POSIX, so a timeout can kill it and its children.
|
|
114
|
+
detached: process.platform !== "win32",
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const FATAL_SIGNALS = ["SIGINT", "SIGTERM", "SIGHUP"];
|
|
122
|
+
/**
|
|
123
|
+
* While the probe runs: on a fatal signal, kill it, then let the signal act as it
|
|
124
|
+
* would have (re-raised when no other handler of ccc's takes it). Returns the undo.
|
|
125
|
+
*/
|
|
126
|
+
function killOnSignals(kill) {
|
|
127
|
+
const handlers = FATAL_SIGNALS.map((signal) => {
|
|
128
|
+
const handler = () => {
|
|
129
|
+
kill();
|
|
130
|
+
stop();
|
|
131
|
+
// Exit as the signal would (128 + its number), but through process.exit, which
|
|
132
|
+
// restores a raw-mode terminal (a readline prompt); re-raising it would not.
|
|
133
|
+
if (process.listenerCount(signal) === 0)
|
|
134
|
+
process.exit(128 + os.constants.signals[signal]);
|
|
135
|
+
};
|
|
136
|
+
process.once(signal, handler);
|
|
137
|
+
return [signal, handler];
|
|
138
|
+
});
|
|
139
|
+
const stop = () => {
|
|
140
|
+
for (const [signal, handler] of handlers)
|
|
141
|
+
process.removeListener(signal, handler);
|
|
142
|
+
};
|
|
143
|
+
return stop;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Kill a timed-out probe and everything it started, never throwing. Windows:
|
|
147
|
+
* taskkill /T /F (a .cmd shim runs cmd.exe, then node). POSIX: SIGKILL to its
|
|
148
|
+
* process group, then to the process itself in case the group is gone.
|
|
149
|
+
*/
|
|
150
|
+
function killTree(child) {
|
|
151
|
+
const pid = child.pid;
|
|
152
|
+
if (pid === undefined)
|
|
153
|
+
return;
|
|
154
|
+
try {
|
|
155
|
+
if (process.platform === "win32") {
|
|
156
|
+
const root = process.env.SystemRoot ?? "C:\\Windows";
|
|
157
|
+
spawnPlain(path.join(root, "System32", "taskkill.exe"), ["/pid", String(pid), "/T", "/F"], { stdio: "ignore", windowsHide: true }).on("error", () => child.kill());
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
process.kill(-pid, "SIGKILL");
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
try {
|
|
164
|
+
child.kill("SIGKILL");
|
|
165
|
+
}
|
|
166
|
+
catch { /* already gone */ }
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/** Older Claude Code has no `auth` command: it prints help or an error, never JSON. */
|
|
170
|
+
function probeFailure(stdout) {
|
|
171
|
+
return stdout.trim().startsWith("{") ? "failed" : "unsupported";
|
|
172
|
+
}
|
|
173
|
+
function authFromMethod(method, subscriptionType) {
|
|
174
|
+
const type = typeof subscriptionType === "string" ? subscriptionType : undefined;
|
|
175
|
+
if (method === "claude.ai")
|
|
176
|
+
return { auth: "subscription", plan: planFrom(type, undefined) };
|
|
177
|
+
// setup-token, a host-provided token, a token file or a profile login: a Claude login.
|
|
178
|
+
if (method === "oauth_token")
|
|
179
|
+
return { auth: "subscription", plan: "unknown" };
|
|
180
|
+
if (method === "api_key" || method === "api_key_helper") {
|
|
181
|
+
return { auth: "api_key", plan: "unknown" };
|
|
182
|
+
}
|
|
183
|
+
return { auth: "unknown", plan: "unknown" };
|
|
184
|
+
}
|
|
185
|
+
function cloudProvider(provider) {
|
|
186
|
+
if (provider === "bedrock" || provider === "vertex" || provider === "foundry")
|
|
187
|
+
return provider;
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
function apiKeySource(source) {
|
|
191
|
+
if (source === "ANTHROPIC_API_KEY" || source === "ANTHROPIC_AUTH_TOKEN")
|
|
192
|
+
return source;
|
|
193
|
+
if (source === "apiKeyHelper")
|
|
194
|
+
return "apiKeyHelper";
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
function nonEmpty(value) {
|
|
198
|
+
return typeof value === "string" && value.trim() !== "";
|
|
199
|
+
}
|
|
200
|
+
function jsonObject(text) {
|
|
201
|
+
const start = text.indexOf("{");
|
|
202
|
+
const end = text.lastIndexOf("}");
|
|
203
|
+
if (start === -1 || end < start)
|
|
204
|
+
return undefined;
|
|
205
|
+
try {
|
|
206
|
+
const value = JSON.parse(text.slice(start, end + 1));
|
|
207
|
+
return value && typeof value === "object" ? value : undefined;
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
return undefined;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=claude-auth-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-auth-status.js","sourceRoot":"","sources":["../src/claude-auth-status.ts"],"names":[],"mappings":"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"}
|
package/dist/claude-auth.d.ts
CHANGED
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
* `x-api-key` or `sk-ant-api…` bearer is an API key. Only that classification
|
|
13
13
|
* leaves this module.
|
|
14
14
|
*/
|
|
15
|
-
|
|
15
|
+
/** "none": Claude Code says nobody is signed in (claude-auth-status.ts); "unknown": can't tell. */
|
|
16
|
+
export declare const CLAUDE_AUTH_TYPES: readonly ["subscription", "api_key", "bedrock", "vertex", "foundry", "none", "unknown"];
|
|
16
17
|
export type ClaudeAuthType = (typeof CLAUDE_AUTH_TYPES)[number];
|
|
17
18
|
/** A Claude.ai plan tier, by name only. */
|
|
18
19
|
export declare const CLAUDE_PLANS: readonly ["free", "pro", "max", "max_5x", "max_20x", "team", "enterprise", "unknown"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-auth.d.ts","sourceRoot":"","sources":["../src/claude-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"claude-auth.d.ts","sourceRoot":"","sources":["../src/claude-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,mGAAmG;AACnG,eAAO,MAAM,iBAAiB,yFAEpB,CAAC;AACX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,2CAA2C;AAC3C,eAAO,MAAM,YAAY,uFAEf,CAAC;AACX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,MAAM,MAAM,iBAAiB,GAAG,OAAO,sBAAsB,CAAC;AAE9D,gFAAgF;AAChF,MAAM,MAAM,YAAY,GAAG,sBAAsB,GAAG,mBAAmB,GAAG,cAAc,CAAC;AAEzF,4FAA4F;AAC5F,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,wEAAwE;IACxE,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAC5C;AAED,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,iBAAsB,GAAG,cAAc,CAkBjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,iBAAiB,GAAG;IAAE,WAAW,EAAE,OAAO,CAAA;CAAE,GACjD,cAAc,GAAG,SAAS,CAgB5B;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAE1E;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAU7E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,iBAAsB,GAAG,UAAU,CAW7E;AAED,wFAAwF;AACxF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GACrD,cAAc,GAAG,SAAS,CAQ5B;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAWtF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAE9E;AAwED,0EAA0E;AAC1E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAQ3F"}
|
package/dist/claude-auth.js
CHANGED
|
@@ -16,8 +16,9 @@ import * as fs from "node:fs";
|
|
|
16
16
|
import * as os from "node:os";
|
|
17
17
|
import * as path from "node:path";
|
|
18
18
|
import { creditAdviceText } from "./claude-plan-warning.js";
|
|
19
|
+
/** "none": Claude Code says nobody is signed in (claude-auth-status.ts); "unknown": can't tell. */
|
|
19
20
|
export const CLAUDE_AUTH_TYPES = [
|
|
20
|
-
"subscription", "api_key", "bedrock", "vertex", "foundry", "unknown",
|
|
21
|
+
"subscription", "api_key", "bedrock", "vertex", "foundry", "none", "unknown",
|
|
21
22
|
];
|
|
22
23
|
/** A Claude.ai plan tier, by name only. */
|
|
23
24
|
export const CLAUDE_PLANS = [
|
package/dist/claude-auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-auth.js","sourceRoot":"","sources":["../src/claude-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"claude-auth.js","sourceRoot":"","sources":["../src/claude-auth.ts"],"names":[],"mappings":"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"}
|