claude-code-infinite 1.0.36 → 1.0.37

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.
Files changed (69) hide show
  1. package/README.md +100 -1
  2. package/dist/cc-request.d.ts +15 -0
  3. package/dist/cc-request.d.ts.map +1 -1
  4. package/dist/cc-request.js +30 -0
  5. package/dist/cc-request.js.map +1 -1
  6. package/dist/claude-env.d.ts +24 -1
  7. package/dist/claude-env.d.ts.map +1 -1
  8. package/dist/claude-env.js +48 -7
  9. package/dist/claude-env.js.map +1 -1
  10. package/dist/cli-args.d.ts +1 -1
  11. package/dist/cli-args.d.ts.map +1 -1
  12. package/dist/cli-args.js +1 -1
  13. package/dist/cli-args.js.map +1 -1
  14. package/dist/cli-main.js +99 -8
  15. package/dist/cli-main.js.map +1 -1
  16. package/dist/config.d.ts +5 -0
  17. package/dist/config.d.ts.map +1 -1
  18. package/dist/config.js.map +1 -1
  19. package/dist/desktop-command.d.ts +38 -0
  20. package/dist/desktop-command.d.ts.map +1 -0
  21. package/dist/desktop-command.js +324 -0
  22. package/dist/desktop-command.js.map +1 -0
  23. package/dist/desktop-service.d.ts +41 -0
  24. package/dist/desktop-service.d.ts.map +1 -0
  25. package/dist/desktop-service.js +449 -0
  26. package/dist/desktop-service.js.map +1 -0
  27. package/dist/desktop-setup.d.ts +94 -0
  28. package/dist/desktop-setup.d.ts.map +1 -0
  29. package/dist/desktop-setup.js +288 -0
  30. package/dist/desktop-setup.js.map +1 -0
  31. package/dist/https-proxy-eligibility.d.ts +31 -0
  32. package/dist/https-proxy-eligibility.d.ts.map +1 -0
  33. package/dist/https-proxy-eligibility.js +204 -0
  34. package/dist/https-proxy-eligibility.js.map +1 -0
  35. package/dist/https-proxy-mode.d.ts +59 -0
  36. package/dist/https-proxy-mode.d.ts.map +1 -0
  37. package/dist/https-proxy-mode.js +255 -0
  38. package/dist/https-proxy-mode.js.map +1 -0
  39. package/dist/https-proxy-session.d.ts +64 -0
  40. package/dist/https-proxy-session.d.ts.map +1 -0
  41. package/dist/https-proxy-session.js +165 -0
  42. package/dist/https-proxy-session.js.map +1 -0
  43. package/dist/memtree-mcp.d.ts +32 -1
  44. package/dist/memtree-mcp.d.ts.map +1 -1
  45. package/dist/memtree-mcp.js +73 -7
  46. package/dist/memtree-mcp.js.map +1 -1
  47. package/dist/memtree.d.ts +10 -0
  48. package/dist/memtree.d.ts.map +1 -1
  49. package/dist/memtree.js +59 -12
  50. package/dist/memtree.js.map +1 -1
  51. package/dist/message-refs.d.ts +81 -0
  52. package/dist/message-refs.d.ts.map +1 -0
  53. package/dist/message-refs.js +378 -0
  54. package/dist/message-refs.js.map +1 -0
  55. package/dist/mitm-ca.d.ts +31 -0
  56. package/dist/mitm-ca.d.ts.map +1 -0
  57. package/dist/mitm-ca.js +236 -0
  58. package/dist/mitm-ca.js.map +1 -0
  59. package/dist/paused-session.d.ts.map +1 -1
  60. package/dist/paused-session.js +9 -2
  61. package/dist/paused-session.js.map +1 -1
  62. package/dist/proxy.d.ts +20 -0
  63. package/dist/proxy.d.ts.map +1 -1
  64. package/dist/proxy.js +101 -16
  65. package/dist/proxy.js.map +1 -1
  66. package/dist/reqlog.d.ts +7 -1
  67. package/dist/reqlog.d.ts.map +1 -1
  68. package/dist/reqlog.js.map +1 -1
  69. package/package.json +1 -1
package/README.md CHANGED
@@ -285,6 +285,14 @@ refusal before `ccc` ever saw the request. `ccc` sets
285
285
  `CLAUDE_CODE_BLOCKING_LIMIT_OVERRIDE` (unless you exported your own) so such a
286
286
  request reaches the proxy, which compresses it mid-turn.
287
287
 
288
+ On Anthropic's own API, Claude Code can send tool-loop turns as "message threads":
289
+ only the newest messages, with Anthropic keeping the rest of the conversation. MemTree
290
+ needs the whole conversation to compress and index it, so `ccc` sets
291
+ `CLAUDE_CODE_TETHER_LIVE=0` for the Claude Code it starts, and every request carries
292
+ the full conversation as before. This is an undocumented Claude Code switch (checked on
293
+ 2.1.325). A value under `env` in your Claude Code settings would win over it, so don't
294
+ set it there. For the desktop app, run `ccc desktop setup` again and paste the new lines.
295
+
288
296
  A session whose last response reached the verified local refusal threshold
289
297
  (for example one sent whole while MemTree was unavailable) would otherwise be
290
298
  refused locally with "Context limit reached" on every prompt after a resume.
@@ -309,7 +317,7 @@ Code connects directly to Anthropic. The official
309
317
 
310
318
  ## Privacy & architecture: your Anthropic credentials never leave your machine
311
319
 
312
- `ccc` runs a small proxy on `127.0.0.1` and launches Claude Code with `ANTHROPIC_BASE_URL` pointed at it and automatic compaction disabled. Claude Code keeps its **native login** — token refresh, plan-default model selection, and rate-limit handling behave exactly like vanilla Claude Code, and your OAuth token is sent only to `api.anthropic.com` from your own machine.
320
+ `ccc` runs a small proxy on `127.0.0.1` and launches Claude Code with `ANTHROPIC_BASE_URL` pointed at it (or, in the opt-in HTTPS-proxy mode below, `HTTPS_PROXY`) and automatic compaction disabled. Claude Code keeps its **native login** — token refresh, plan-default model selection, and rate-limit handling behave exactly like vanilla Claude Code, and your OAuth token is sent only to `api.anthropic.com` from your own machine.
313
321
 
314
322
  ```
315
323
  Claude Code ──▶ localhost proxy (ccc)
@@ -322,6 +330,97 @@ Claude Code ──▶ localhost proxy (ccc)
322
330
  - Anthropic requests go directly from the local proxy to api.anthropic.com using the authentication Claude Code supplied. PolyChat never sees that credential or Anthropic traffic.
323
331
  - If MemTree is unreachable, slow, or your MemTree plan needs payment, `ccc` degrades to a transparent passthrough so your session is never interrupted. While MemTree is paused (usage limit reached), a request that still fits the model's context window (by Anthropic's token count, or ccc's conservative estimate when counting is unavailable) goes out unchanged, as plain Claude Code would send it, and once the session reaches the compression budget the paused notice suggests Claude Code's own `/compact` while it still fits. A request that no longer fits is refused at once with "MemTree is paused (usage limit reached), so this long conversation can't be compressed…", your subscribe link, and `/clear` to start fresh (`/memtree-compact` needs MemTree, so it is not offered then). After you subscribe, the next request compresses again with no restart.
324
332
 
333
+ ### Remote Control (`/remote-control`): HTTPS-proxy mode (opt-in, macOS and Linux)
334
+
335
+ Claude Code offers Remote Control only when it talks to `api.anthropic.com` itself, so in the
336
+ default mode above `/remote-control` is "Unknown command". HTTPS-proxy mode keeps Claude Code's
337
+ base URL at `api.anthropic.com` and makes `ccc` its `HTTPS_PROXY` instead. Every model turn still
338
+ goes through MemTree. Turn it on for one session, or for every session:
339
+
340
+ ```bash
341
+ CCC_HTTPS_PROXY_MODE=1 ccc
342
+ # or always: add "httpsProxyMode": true to ~/.claude-code-infinite/config.json
343
+ # (CCC_HTTPS_PROXY_MODE=0 turns it off for one session)
344
+ ```
345
+
346
+ How it works and what it changes:
347
+
348
+ - **A certificate for `api.anthropic.com` only, new each session.** At each start `ccc` makes a
349
+ certificate authority in memory, signs one certificate for `api.anthropic.com` with it, and
350
+ drops its key. The key is never written to disk. The CA is name-constrained: it can't vouch for
351
+ any other host name, a subdomain or an IP address. Only Claude Code trusts it, through
352
+ `NODE_EXTRA_CA_CERTS` in its own environment. Nothing goes into your system or keychain trust
353
+ store. The public certificate sits in `~/.claude-code-infinite/https-proxy/` and is removed when
354
+ `ccc` exits.
355
+ - **What `ccc` decrypts.** Only Claude Code's connections to `api.anthropic.com` that carry the
356
+ session's proxy token. Model calls get MemTree as before. Everything else Claude Code sends
357
+ there (Remote Control's bridge and session events, file uploads, settings, telemetry) is
358
+ relayed to Anthropic unchanged and never logged or sent to MemTree. Connections to any other
359
+ host go through a blind tunnel that `ccc` doesn't decrypt. A connection without the token (for
360
+ example from another user on the machine) is refused.
361
+ - **Programs you run from Claude Code's Bash tool see what they see today.** `ccc` gives Claude
362
+ Code a `CLAUDE_ENV_FILE` that puts back your own proxy, CA and `NO_PROXY` settings and the
363
+ usual `ANTHROPIC_BASE_URL`, so scripts, SDK apps and a `ccc` started from Bash work as in the
364
+ default mode, and none of them sees the proxy token. A `CLAUDE_ENV_FILE` of your own is still
365
+ sourced.
366
+ - **Hooks, status-line commands and MCP servers** that Claude Code starts aren't Bash commands,
367
+ so they inherit the proxy and the session CA. Node-based ones work. A non-Node one that calls
368
+ `api.anthropic.com` itself (for example a status line that curls Anthropic's usage endpoint, or
369
+ a Python MCP server using the Anthropic API) fails TLS. Run such sessions with
370
+ `CCC_HTTPS_PROXY_MODE=0`.
371
+ - **When it stays off.** `ccc` uses the default mode for the session, and says so in one line,
372
+ on Windows; when you already use a proxy (`HTTPS_PROXY`, `HTTP_PROXY` or `ALL_PROXY` in your
373
+ environment); when a Claude Code settings file (user, project, local, managed, or
374
+ `--settings`) sets a proxy, `NO_PROXY`, `NODE_EXTRA_CA_CERTS` or `CLAUDE_ENV_FILE` in its `env`;
375
+ and when Claude Code's Bash sandbox is enabled. These are checked at startup. If you turn one on mid-session
376
+ and your prompts stop reaching `ccc`, it warns you once. Restart `ccc` then.
377
+ - `CCC_PROXY_TRACE=<file>` writes a debug trace: connection targets, and the method, path,
378
+ status and User-Agent of each decrypted request. It holds no other header values and no bodies.
379
+
380
+ Remote Control also needs a full-scope Claude login (`claude auth login`). A long-lived setup
381
+ token isn't enough.
382
+
383
+ ### The Claude desktop app (opt-in, macOS)
384
+
385
+ The desktop app's Code tab runs its own copy of Claude Code, so `ccc` can't wrap it. Instead
386
+ `ccc desktop setup` runs a small always-on `ccc` service (a launchd agent) that is the HTTPS
387
+ proxy of the Desktop sessions you point at it, with the same interception as HTTPS-proxy mode
388
+ above. Desktop keeps its own sign-in, plan and Remote Control.
389
+
390
+ ```bash
391
+ ccc desktop setup # service, certificate, memory tools; prints six lines
392
+ ccc desktop env # print the six lines again
393
+ ccc desktop status # is the service up, how many sessions it serves
394
+ ccc desktop uninstall # stop and remove it all
395
+ ```
396
+
397
+ Paste the six lines into the desktop app once: Code tab > environment menu > add a local
398
+ environment (for example "ccc") > **Environment variables**. New sessions started from that
399
+ environment get MemTree. Sessions in other environments are unchanged.
400
+
401
+ - **What setup installs:** `~/.claude-code-infinite/desktop/` (0700): the service's port and
402
+ token, its certificate, and a Bash env file; the launch agent
403
+ `~/Library/LaunchAgents/co.polychat.ccc-desktop.plist`; and a user-scope `memtree` MCP server
404
+ (through `claude mcp add-json`), which has no tools in sessions that don't go through `ccc`.
405
+ - **The certificate** is for `api.anthropic.com` only, from a name-constrained CA whose key is
406
+ dropped as soon as it signs it. Only the certificate's own key is kept, readable only by
407
+ you. Nothing goes into your system or keychain trust store: only the sessions with the pasted
408
+ `NODE_EXTRA_CA_CERTS` trust it. Setup keeps a corporate CA from your shell's
409
+ `NODE_EXTRA_CA_CERTS` in that bundle. It lasts a year: `ccc desktop status` and a terminal
410
+ `ccc` say when it's due, and `ccc desktop setup` renews it (restart open sessions then).
411
+ `--rotate-ca` makes a new one at once; `--rotate-token` a new proxy token (paste the lines
412
+ again).
413
+ - **If the service stops**, sessions in the ccc environment can't reach Claude ("Unable to
414
+ connect to API") until it's back. launchd restarts it if it crashes. `ccc desktop status`
415
+ says what's wrong and how to restart it, and a terminal `ccc` warns when it's down. To stop
416
+ using it, switch those sessions to another environment.
417
+ - Setup refuses when your shell already uses a proxy or a `NO_PROXY` that covers
418
+ `api.anthropic.com`, or when Claude Code's settings set a proxy, `NO_PROXY`,
419
+ `NODE_EXTRA_CA_CERTS`, `CLAUDE_ENV_FILE` or the Bash sandbox, as HTTPS-proxy mode does. A
420
+ session whose project's settings do so gets an error explaining why instead of running.
421
+ - After upgrading Node or moving ccc, run `ccc desktop setup` again: the agent and the MCP server
422
+ name the Node and ccc paths setup ran with.
423
+
325
424
  ### Diagnostics
326
425
 
327
426
  `ccc` sends a few diagnostics to MemTree so we can see why a session fails to start or stalls:
@@ -42,6 +42,21 @@ export declare function sessionTag(sessionId: string | undefined): string | unde
42
42
  * and never involves MemTree or the main thread's route state.
43
43
  */
44
44
  export declare function isClaudeCodeSideRequest(info: ClaudeCodeRequestInfo): boolean;
45
+ /**
46
+ * Why a request's messages are not its session's conversation; undefined when they are.
47
+ * Such a request must neither become the conversation the session's final index sends
48
+ * nor be uploaded to MemTree as a conversation of its own: either one builds a tree of a
49
+ * fragment, and the session's newest tree (the status line's link) becomes that fragment.
50
+ *
51
+ * - `side-request`: Claude Code's own one-off request on the session (title, Remote
52
+ * Control's "user walked away" status summary, WebFetch summary, security monitor).
53
+ * - `thread-continue`: a message-threads continuation (`thread: {type: "continue"}`,
54
+ * first-party API only, so in HTTPS-proxy mode): its messages are only those after
55
+ * the reply it continues; the API holds the rest.
56
+ */
57
+ export type NotConversationKind = "side-request" | "thread-continue";
58
+ export declare function notSessionConversation(body: Record<string, any>, info: ClaudeCodeRequestInfo | undefined): NotConversationKind | undefined;
59
+ export declare function isThreadContinuation(body: Record<string, any>): boolean;
45
60
  /**
46
61
  * Shape of the monitor's `<transcript>` block, checked on every side request
47
62
  * so a change in Claude Code's internal format shows up in the request log
@@ -1 +1 @@
1
- {"version":3,"file":"cc-request.d.ts","sourceRoot":"","sources":["../src/cc-request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cc-request.d.ts","sourceRoot":"","sources":["../src/cc-request.ts"],"names":[],"mappings":"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"}
@@ -115,6 +115,36 @@ function oneLine(text) {
115
115
  export function isClaudeCodeSideRequest(info) {
116
116
  return info.billingHeader && info.turnOrigin === undefined && info.tools === 0;
117
117
  }
118
+ /** Most messages a Claude Code one-off side request was seen to send (title, status summary). */
119
+ const SIDE_REQUEST_MAX_MESSAGES = 2;
120
+ export function notSessionConversation(body, info) {
121
+ if (isThreadContinuation(body))
122
+ return "thread-continue";
123
+ // One-off requests send one or two messages. A release from before cc_turn_origin sends
124
+ // its main thread without one too: there, only a recognised side request is one.
125
+ const messages = Array.isArray(body?.messages) ? body.messages.length : 0;
126
+ if (info && isClaudeCodeSideRequest(info) && messages <= SIDE_REQUEST_MAX_MESSAGES &&
127
+ (knownSideRequestKind(info) !== undefined || sendsTurnOrigin(info.ccVersion))) {
128
+ return "side-request";
129
+ }
130
+ return undefined;
131
+ }
132
+ /** Claude Code releases from 2.1.281 on mark main-thread requests with cc_turn_origin. */
133
+ const TURN_ORIGIN_SINCE = [2, 1, 281];
134
+ function sendsTurnOrigin(ccVersion) {
135
+ const parts = (ccVersion ?? "").split(".").slice(0, 3).map(Number);
136
+ if (parts.length < 3 || parts.some((n) => !Number.isInteger(n)))
137
+ return false;
138
+ for (let i = 0; i < 3; i++) {
139
+ if (parts[i] !== TURN_ORIGIN_SINCE[i])
140
+ return parts[i] > TURN_ORIGIN_SINCE[i];
141
+ }
142
+ return true;
143
+ }
144
+ export function isThreadContinuation(body) {
145
+ const thread = body?.thread;
146
+ return thread !== null && typeof thread === "object" && thread.type === "continue";
147
+ }
118
148
  export function knownSideRequestKind(info) {
119
149
  if (info.systemHead?.includes("You are naming a coding session"))
120
150
  return "session-title";
@@ -1 +1 @@
1
- {"version":3,"file":"cc-request.js","sourceRoot":"","sources":["../src/cc-request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cc-request.js","sourceRoot":"","sources":["../src/cc-request.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { HttpsProxyChild } from "./https-proxy-session.js";
1
2
  /**
2
3
  * Environment for the Claude Code child process.
3
4
  *
@@ -40,7 +41,29 @@
40
41
  */
41
42
  /** Claude Code's local refusal limit under ccc: effectively never reached. */
42
43
  export declare const UNREACHABLE_BLOCKING_LIMIT = "1000000000";
43
- export declare function claudeChildEnv(parentEnv: NodeJS.ProcessEnv, anthropicBaseUrl: string): NodeJS.ProcessEnv;
44
+ /**
45
+ * Message threads off. On the first-party API, Claude Code 2.1.325 sends
46
+ * `thread: {type: "continue", previous_message_id}` on tool-loop turns: only the messages
47
+ * after the continued reply, Anthropic holding the rest. ccc then can't compress mid-loop
48
+ * and the final index misses the last tool loop. HTTPS-proxy mode gets threads from
49
+ * Anthropic's rollout flag today; base-URL mode would too if the flag reached it (it
50
+ * does with the opt-in set). Claude Code reads this env var (a tri-state in its env
51
+ * schema, once per process) before that flag; "0" turns message threads off. A settings
52
+ * `env` value would win over it. Undocumented: if a later release drops it, threads come
53
+ * back and proxy.ts still forwards continuations untouched (logged as notConversation).
54
+ */
55
+ export declare const MESSAGE_THREADS_OFF: Readonly<Record<string, string>>;
56
+ /**
57
+ * `httpsProxy` (HTTPS-proxy mode, https-proxy-session.ts): Claude Code reaches ccc
58
+ * through HTTPS_PROXY instead, with no custom base URL (so Remote Control stays
59
+ * available and no first-party override is needed); the MemTree MCP server and agents
60
+ * find the loopback in CCC_MEMTREE_PROXY, and Bash commands get today's variables back
61
+ * from CLAUDE_ENV_FILE.
62
+ *
63
+ * Both modes turn message threads off (MESSAGE_THREADS_OFF), whatever the parent exported,
64
+ * so every request carries the whole conversation.
65
+ */
66
+ export declare function claudeChildEnv(parentEnv: NodeJS.ProcessEnv, anthropicBaseUrl: string, httpsProxy?: HttpsProxyChild): NodeJS.ProcessEnv;
44
67
  /**
45
68
  * Keep the proxy's MemTree budget in lockstep with Claude Code's own context
46
69
  * accounting. This is the documented escape hatch for forcing native-1M
@@ -1 +1 @@
1
- {"version":3,"file":"claude-env.d.ts","sourceRoot":"","sources":["../src/claude-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,8EAA8E;AAC9E,eAAO,MAAM,0BAA0B,eAAe,CAAC;AAEvD,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,CAAC,UAAU,EAC5B,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAAC,UAAU,CAuBnB;AAOD;;;;GAIG;AACH,wBAAgB,oCAAoC,CAClD,SAAS,EAAE,MAAM,CAAC,UAAU,GAC3B,OAAO,CAET"}
1
+ {"version":3,"file":"claude-env.d.ts","sourceRoot":"","sources":["../src/claude-env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,8EAA8E;AAC9E,eAAO,MAAM,0BAA0B,eAAe,CAAC;AAEvD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAChB,CAAC;AAElD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,CAAC,UAAU,EAC5B,gBAAgB,EAAE,MAAM,EACxB,UAAU,CAAC,EAAE,eAAe,GAC3B,MAAM,CAAC,UAAU,CA0BnB;AA0BD;;;;GAIG;AACH,wBAAgB,oCAAoC,CAClD,SAAS,EAAE,MAAM,CAAC,UAAU,GAC3B,OAAO,CAET"}
@@ -40,13 +40,38 @@
40
40
  */
41
41
  /** Claude Code's local refusal limit under ccc: effectively never reached. */
42
42
  export const UNREACHABLE_BLOCKING_LIMIT = "1000000000";
43
- export function claudeChildEnv(parentEnv, anthropicBaseUrl) {
44
- const childEnv = {
45
- ...parentEnv,
46
- ANTHROPIC_BASE_URL: anthropicBaseUrl,
47
- _CLAUDE_CODE_ASSUME_FIRST_PARTY_BASE_URL: "1",
48
- CLAUDE_CODE_RESUME_TOKEN_THRESHOLD: "1000000000",
49
- };
43
+ /**
44
+ * Message threads off. On the first-party API, Claude Code 2.1.325 sends
45
+ * `thread: {type: "continue", previous_message_id}` on tool-loop turns: only the messages
46
+ * after the continued reply, Anthropic holding the rest. ccc then can't compress mid-loop
47
+ * and the final index misses the last tool loop. HTTPS-proxy mode gets threads from
48
+ * Anthropic's rollout flag today; base-URL mode would too if the flag reached it (it
49
+ * does with the opt-in set). Claude Code reads this env var (a tri-state in its env
50
+ * schema, once per process) before that flag; "0" turns message threads off. A settings
51
+ * `env` value would win over it. Undocumented: if a later release drops it, threads come
52
+ * back and proxy.ts still forwards continuations untouched (logged as notConversation).
53
+ */
54
+ export const MESSAGE_THREADS_OFF = Object.freeze({ CLAUDE_CODE_TETHER_LIVE: "0" });
55
+ /**
56
+ * `httpsProxy` (HTTPS-proxy mode, https-proxy-session.ts): Claude Code reaches ccc
57
+ * through HTTPS_PROXY instead, with no custom base URL (so Remote Control stays
58
+ * available and no first-party override is needed); the MemTree MCP server and agents
59
+ * find the loopback in CCC_MEMTREE_PROXY, and Bash commands get today's variables back
60
+ * from CLAUDE_ENV_FILE.
61
+ *
62
+ * Both modes turn message threads off (MESSAGE_THREADS_OFF), whatever the parent exported,
63
+ * so every request carries the whole conversation.
64
+ */
65
+ export function claudeChildEnv(parentEnv, anthropicBaseUrl, httpsProxy) {
66
+ const childEnv = httpsProxy
67
+ ? httpsProxyChildEnv(parentEnv, anthropicBaseUrl, httpsProxy)
68
+ : {
69
+ ...parentEnv,
70
+ ANTHROPIC_BASE_URL: anthropicBaseUrl,
71
+ _CLAUDE_CODE_ASSUME_FIRST_PARTY_BASE_URL: "1",
72
+ };
73
+ childEnv.CLAUDE_CODE_RESUME_TOKEN_THRESHOLD = "1000000000";
74
+ Object.assign(childEnv, MESSAGE_THREADS_OFF);
50
75
  // Wrapper-only control; do not leak it into Claude Code itself.
51
76
  delete childEnv.CCC_AUTO_COMPACT;
52
77
  if (parentEnv.CCC_AUTO_COMPACT === "1") {
@@ -62,6 +87,22 @@ export function claudeChildEnv(parentEnv, anthropicBaseUrl) {
62
87
  }
63
88
  return childEnv;
64
89
  }
90
+ function httpsProxyChildEnv(parentEnv, loopbackUrl, httpsProxy) {
91
+ const childEnv = {
92
+ ...parentEnv,
93
+ ...httpsProxy.noProxy,
94
+ HTTPS_PROXY: httpsProxy.proxyUrl,
95
+ NODE_EXTRA_CA_CERTS: httpsProxy.caBundlePath,
96
+ CLAUDE_ENV_FILE: httpsProxy.bashEnvPath,
97
+ CCC_MEMTREE_PROXY: loopbackUrl,
98
+ };
99
+ // An outer base URL (e.g. a nested ccc) must not override the proxy route.
100
+ delete childEnv.ANTHROPIC_BASE_URL;
101
+ delete childEnv._CLAUDE_CODE_ASSUME_FIRST_PARTY_BASE_URL;
102
+ // Claude Code would read the lowercase one too; Bash gets the user's value back.
103
+ delete childEnv.https_proxy;
104
+ return childEnv;
105
+ }
65
106
  function envFlagEnabled(value) {
66
107
  if (value === undefined)
67
108
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"claude-env.js","sourceRoot":"","sources":["../src/claude-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC;AAEvD,MAAM,UAAU,cAAc,CAC5B,SAA4B,EAC5B,gBAAwB;IAExB,MAAM,QAAQ,GAAsB;QAClC,GAAG,SAAS;QACZ,kBAAkB,EAAE,gBAAgB;QACpC,wCAAwC,EAAE,GAAG;QAC7C,kCAAkC,EAAE,YAAY;KACjD,CAAC;IAEF,gEAAgE;IAChE,OAAO,QAAQ,CAAC,gBAAgB,CAAC;IAEjC,IAAI,SAAS,CAAC,gBAAgB,KAAK,GAAG,EAAE,CAAC;QACvC,oEAAoE;QACpE,iCAAiC;QACjC,OAAO,QAAQ,CAAC,oBAAoB,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,oBAAoB,GAAG,GAAG,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,mCAAmC,EAAE,CAAC;YAClD,QAAQ,CAAC,mCAAmC,GAAG,0BAA0B,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB;IAC/C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACzE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oCAAoC,CAClD,SAA4B;IAE5B,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"claude-env.js","sourceRoot":"","sources":["../src/claude-env.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC;AAEvD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,MAAM,CAAC,MAAM,CAAC,EAAE,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;AAElD;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,SAA4B,EAC5B,gBAAwB,EACxB,UAA4B;IAE5B,MAAM,QAAQ,GAAsB,UAAU;QAC5C,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,CAAC;QAC7D,CAAC,CAAC;YACA,GAAG,SAAS;YACZ,kBAAkB,EAAE,gBAAgB;YACpC,wCAAwC,EAAE,GAAG;SAC9C,CAAC;IACJ,QAAQ,CAAC,kCAAkC,GAAG,YAAY,CAAC;IAC3D,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAE7C,gEAAgE;IAChE,OAAO,QAAQ,CAAC,gBAAgB,CAAC;IAEjC,IAAI,SAAS,CAAC,gBAAgB,KAAK,GAAG,EAAE,CAAC;QACvC,oEAAoE;QACpE,iCAAiC;QACjC,OAAO,QAAQ,CAAC,oBAAoB,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,oBAAoB,GAAG,GAAG,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,mCAAmC,EAAE,CAAC;YAClD,QAAQ,CAAC,mCAAmC,GAAG,0BAA0B,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CACzB,SAA4B,EAAE,WAAmB,EAAE,UAA2B;IAE9E,MAAM,QAAQ,GAAsB;QAClC,GAAG,SAAS;QACZ,GAAG,UAAU,CAAC,OAAO;QACrB,WAAW,EAAE,UAAU,CAAC,QAAQ;QAChC,mBAAmB,EAAE,UAAU,CAAC,YAAY;QAC5C,eAAe,EAAE,UAAU,CAAC,WAAW;QACvC,iBAAiB,EAAE,WAAW;KAC/B,CAAC;IACF,2EAA2E;IAC3E,OAAO,QAAQ,CAAC,kBAAkB,CAAC;IACnC,OAAO,QAAQ,CAAC,wCAAwC,CAAC;IACzD,iFAAiF;IACjF,OAAO,QAAQ,CAAC,WAAW,CAAC;IAC5B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB;IAC/C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACzE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oCAAoC,CAClD,SAA4B;IAE5B,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;AACnE,CAAC"}
@@ -18,7 +18,7 @@ export declare function mayBePrintInvocation(args: string[]): boolean;
18
18
  */
19
19
  export declare function isVersionRequest(args: readonly string[]): boolean;
20
20
  /** ccc's own subcommands, which start no Claude session. */
21
- declare const SUBCOMMANDS: readonly ["fetch", "memtree-mcp", "link"];
21
+ declare const SUBCOMMANDS: readonly ["fetch", "memtree-mcp", "link", "desktop"];
22
22
  export type CccEnvironment = "production" | "staging" | "local";
23
23
  /** The environment a leading `local`/`staging` word selects (else production). */
24
24
  export declare function environmentOf(args: readonly string[]): CccEnvironment;
@@ -1 +1 @@
1
- {"version":3,"file":"cli-args.d.ts","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAMzD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAU5D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAIjE;AAED,4DAA4D;AAC5D,QAAA,MAAM,WAAW,2CAA4C,CAAC;AAG9D,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;AAEhE,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAErE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB;IAAE,IAAI,EAAE,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CAIpE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAmB5D;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;AACnF,eAAO,MAAM,uBAAuB,EAAE,SAAS,oBAAoB,EAMlE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,oBAAoB,GAAG,SAAS,CAKlC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EACjD,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAWxD;AAKD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB;IAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAmBjD"}
1
+ {"version":3,"file":"cli-args.d.ts","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAMzD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAU5D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAIjE;AAED,4DAA4D;AAC5D,QAAA,MAAM,WAAW,sDAAuD,CAAC;AAGzE,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;AAEhE,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAErE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB;IAAE,IAAI,EAAE,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CAIpE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAmB5D;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;AACnF,eAAO,MAAM,uBAAuB,EAAE,SAAS,oBAAoB,EAMlE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,oBAAoB,GAAG,SAAS,CAKlC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EACjD,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAWxD;AAKD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB;IAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAmBjD"}
package/dist/cli-args.js CHANGED
@@ -37,7 +37,7 @@ export function isVersionRequest(args) {
37
37
  return rest.length === 1 && (rest[0] === "--version" || rest[0] === "-v");
38
38
  }
39
39
  /** ccc's own subcommands, which start no Claude session. */
40
- const SUBCOMMANDS = ["fetch", "memtree-mcp", "link"];
40
+ const SUBCOMMANDS = ["fetch", "memtree-mcp", "link", "desktop"];
41
41
  const ENVIRONMENT_WORDS = ["local", "staging"];
42
42
  /** The environment a leading `local`/`staging` word selects (else production). */
43
43
  export function environmentOf(args) {
@@ -1 +1 @@
1
- {"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"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"}
package/dist/cli-main.js CHANGED
@@ -61,6 +61,9 @@ import { probeAnswersForSession, probeClaudeAuthStatus, skippedProbe, } from "./
61
61
  import { mayWaitForEnter, presentSignInNotice, sessionProbe, signInNotice, signInNoticeApplies, SignInTracker, } from "./sign-in-notice.js";
62
62
  import { exitResumeHint } from "./resume-hint.js";
63
63
  import { urlOpenerFor } from "./open-url.js";
64
+ import { desktopServiceDownLine, runDesktopCommand } from "./desktop-command.js";
65
+ import { httpsProxyModeDecision, skippedNoticeText } from "./https-proxy-eligibility.js";
66
+ import { startHttpsProxySession, } from "./https-proxy-session.js";
64
67
  // MemTree (polychat) API hosts — /v1/context_memory lives at the app root.
65
68
  const POLYCHAT_BASE_URL = "https://api.polychat.co";
66
69
  const STAGING_BASE_URL = "https://polychat-staging-421312241218.us-west2.run.app";
@@ -132,6 +135,9 @@ async function handleInvalidKey(check, ctx) {
132
135
  function saveApiKey(mode, apiKey, diagnostics) {
133
136
  diagnostics.record("key_saved");
134
137
  diagnostics.setApiKey(apiKey);
138
+ saveKeyFor(mode, apiKey);
139
+ }
140
+ function saveKeyFor(mode, apiKey) {
135
141
  if (mode === "local")
136
142
  setLocalPolychatApiKey(apiKey);
137
143
  else if (mode === "staging")
@@ -363,6 +369,22 @@ async function main() {
363
369
  process.exitCode = await runLinkCommand(subcommand.args, linkDeps(mode));
364
370
  return;
365
371
  }
372
+ // `ccc [staging|local] desktop ...`: the Claude desktop app's service (desktop-command.ts).
373
+ if (subcommand?.name === "desktop") {
374
+ process.exitCode = await runDesktopCommand(subcommand.args, {
375
+ mode,
376
+ memtreeBaseUrl: memtreeBaseUrlFor(mode),
377
+ apiKey: () => storedApiKey(mode),
378
+ promptForKey: async () => {
379
+ const key = await promptForApiKey(mode, process.stdout);
380
+ if (!key)
381
+ return undefined;
382
+ saveKeyFor(mode, key);
383
+ return key;
384
+ },
385
+ });
386
+ return;
387
+ }
366
388
  const claudeArgs = mode !== "production" ? filteredArgs.slice(1) : filteredArgs;
367
389
  // Interactive UI only: print/non-TTY invocations are programmatic
368
390
  // interfaces whose output must stay byte-for-byte vanilla, and they get no
@@ -380,6 +402,10 @@ async function main() {
380
402
  if (isDebugMode) {
381
403
  console.log("\x1b[1;36m🔍 DEBUG MODE\x1b[0m\n");
382
404
  }
405
+ // Set up for the desktop app but its service is down: those sessions are failing.
406
+ const desktopDown = interactiveUi ? await desktopServiceDownLine(mode) : undefined;
407
+ if (desktopDown)
408
+ console.log(`\x1b[1;33m${desktopDown}\x1b[0m\n`);
383
409
  if (mode === "local") {
384
410
  console.log("\x1b[1;33m🏠 LOCAL MODE\x1b[0m\n");
385
411
  }
@@ -387,13 +413,9 @@ async function main() {
387
413
  console.log("\x1b[1;35m🚧 STAGING MODE\x1b[0m\n");
388
414
  }
389
415
  // CCC_LOCAL_BASE_URL: local mode's server elsewhere than :8080 (tests use a free port).
390
- const memtreeBaseUrl = mode === "local" ? (process.env.CCC_LOCAL_BASE_URL || LOCAL_BASE_URL) :
391
- mode === "staging" ? STAGING_BASE_URL :
392
- POLYCHAT_BASE_URL;
416
+ const memtreeBaseUrl = memtreeBaseUrlFor(mode);
393
417
  // Get or prompt for the MemTree API key (separate keys per environment)
394
- let polychatApiKey = mode === "local" ? getLocalPolychatApiKey() :
395
- mode === "staging" ? getStagingPolychatApiKey() :
396
- getPolychatApiKey();
418
+ let polychatApiKey = storedApiKey(mode);
397
419
  // Client diagnostics (diagnostics.ts): versions, OS and errors, never content.
398
420
  // Started before the key prompt so a signup that stalls there is visible too.
399
421
  const diagnostics = startDiagnostics(mode, memtreeBaseUrl, polychatApiKey);
@@ -609,7 +631,13 @@ async function main() {
609
631
  const memtreeLinkPlacement = memtreeLinkPlacementFromEnv(process.env.CCC_MEMTREE_LINK);
610
632
  const memtreeLinkStore = new MemtreeLinkStore();
611
633
  const transcriptUsage = new ClaudeTranscriptUsage();
634
+ // Opt-in HTTPS-proxy mode (Remote Control): skipped, with one line, where it can't work.
635
+ const httpsProxy = httpsProxySessionFor(claudeArgs, config, isDebugMode);
636
+ // Set just before Claude Code starts: undefined if it runs in base-URL mode after all,
637
+ // whose model calls never pass the interception (so no missing-call warning then).
638
+ let proxyModeChild;
612
639
  const proxy = await startProxy({
640
+ ...(httpsProxy ? { httpsProxyMode: httpsProxy.proxyOptions } : {}),
613
641
  memtree,
614
642
  debug: isDebugMode,
615
643
  reqlog: observedLog,
@@ -660,7 +688,9 @@ async function main() {
660
688
  // "✔ ccc X installed · restart ccc to use it" (or the hint after a failed
661
689
  // install) on a later SessionStart of this session, once.
662
690
  sessionStartNotice: sessionStartLines(autoUpdate, signInSessionLine, statuslineSessionLine),
663
- promptSubmitNotice: interactiveUi ? () => rateLimits.promptLine() : undefined,
691
+ promptSubmitNotice: interactiveUi
692
+ ? () => joinPromptLines(rateLimits.promptLine(), proxyModeChild ? httpsProxy?.promptLine() : undefined)
693
+ : undefined,
664
694
  // `/memtree-view` opens its link only where a browser would appear in
665
695
  // front of the user: interactive (also not `-pc`-style print), not SSH
666
696
  // or CI (open-url.ts).
@@ -767,8 +797,9 @@ async function main() {
767
797
  // Never set ANTHROPIC_AUTH_TOKEN / ANTHROPIC_API_KEY — Claude Code keeps its
768
798
  // native login and sends its own OAuth bearer to the local base URL.
769
799
  const claudeStartedAt = Date.now();
800
+ proxyModeChild = httpsProxyChild(httpsProxy, proxy.port, isDebugMode);
770
801
  const child = spawn(claude.command, childArgs, {
771
- env: withClaudeOnPath(claudeChildEnv(process.env, `http://127.0.0.1:${proxy.port}`), claude),
802
+ env: withClaudeOnPath(claudeChildEnv(process.env, `http://127.0.0.1:${proxy.port}`, proxyModeChild), claude),
772
803
  stdio: "inherit",
773
804
  });
774
805
  // Its memtree MCP server asks the proxy which session this process is on.
@@ -1034,4 +1065,64 @@ function pausedUpdateLine(autoUpdate) {
1034
1065
  return updateInstalledNoticeText(autoUpdate.bannerInstalled, color);
1035
1066
  return autoUpdate?.bannerUpdate ? updateNoticeText(autoUpdate.bannerUpdate, color) : null;
1036
1067
  }
1068
+ /**
1069
+ * The session's HTTPS-proxy mode (https-proxy-session.ts), when asked for
1070
+ * (CCC_HTTPS_PROXY_MODE or the `httpsProxyMode` config key) and nothing rules it out
1071
+ * (https-proxy-eligibility.ts); otherwise undefined: today's base-URL mode, with one line
1072
+ * saying why when it was asked for. Its temp files go when ccc exits.
1073
+ */
1074
+ function httpsProxySessionFor(claudeArgs, config, debug) {
1075
+ const decision = httpsProxyModeDecision({
1076
+ env: process.env, configured: config.httpsProxyMode, platform: process.platform,
1077
+ claudeArgs, cwd: process.cwd(),
1078
+ });
1079
+ if (decision.mode === "base-url") {
1080
+ if (decision.requested)
1081
+ console.log(`${skippedNoticeText(decision.reason)}\n`);
1082
+ return undefined;
1083
+ }
1084
+ try {
1085
+ const session = startHttpsProxySession(process.env, process.env.CCC_PROXY_TRACE);
1086
+ process.on("exit", session.cleanup);
1087
+ console.log("\x1b[2mHTTPS-proxy mode: /remote-control is available in this session\x1b[0m\n");
1088
+ return session;
1089
+ }
1090
+ catch (err) {
1091
+ console.log(`${skippedNoticeText(`its setup failed (${String(err)})`)}\n`);
1092
+ if (debug)
1093
+ console.error(`[DEBUG] HTTPS-proxy mode setup failed: ${String(err)}`);
1094
+ return undefined;
1095
+ }
1096
+ }
1097
+ /** Claude Code's env pieces for proxy mode; undefined (base-URL mode) if they can't be written. */
1098
+ function httpsProxyChild(session, port, debug) {
1099
+ if (!session)
1100
+ return undefined;
1101
+ try {
1102
+ return session.childFor(port);
1103
+ }
1104
+ catch (err) {
1105
+ // The loopback still serves base-URL requests: this session just has no /rc.
1106
+ console.log(`${skippedNoticeText(`its Bash env file couldn't be written`)}\n`);
1107
+ if (debug)
1108
+ console.error(`[DEBUG] HTTPS-proxy mode: ${String(err)}`);
1109
+ return undefined;
1110
+ }
1111
+ }
1112
+ function joinPromptLines(...lines) {
1113
+ const present = lines.filter((line) => typeof line === "string" && line !== "");
1114
+ return present.length ? present.join("\n") : undefined;
1115
+ }
1116
+ /** MemTree's API host for a mode; CCC_LOCAL_BASE_URL moves local mode's (tests: a free port). */
1117
+ function memtreeBaseUrlFor(mode) {
1118
+ return mode === "local" ? (process.env.CCC_LOCAL_BASE_URL || LOCAL_BASE_URL) :
1119
+ mode === "staging" ? STAGING_BASE_URL :
1120
+ POLYCHAT_BASE_URL;
1121
+ }
1122
+ /** The saved MemTree key for a mode (separate keys per environment). */
1123
+ function storedApiKey(mode) {
1124
+ return mode === "local" ? getLocalPolychatApiKey() :
1125
+ mode === "staging" ? getStagingPolychatApiKey() :
1126
+ getPolychatApiKey();
1127
+ }
1037
1128
  //# sourceMappingURL=cli-main.js.map