claude-code-infinite 1.0.20 → 1.0.22

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 (103) hide show
  1. package/README.md +165 -30
  2. package/dist/auto-update-runner.d.ts +52 -0
  3. package/dist/auto-update-runner.d.ts.map +1 -0
  4. package/dist/auto-update-runner.js +307 -0
  5. package/dist/auto-update-runner.js.map +1 -0
  6. package/dist/auto-update-setup.d.ts +38 -0
  7. package/dist/auto-update-setup.d.ts.map +1 -0
  8. package/dist/auto-update-setup.js +72 -0
  9. package/dist/auto-update-setup.js.map +1 -0
  10. package/dist/auto-update.d.ts +170 -0
  11. package/dist/auto-update.d.ts.map +1 -0
  12. package/dist/auto-update.js +401 -0
  13. package/dist/auto-update.js.map +1 -0
  14. package/dist/claude-env.d.ts +14 -1
  15. package/dist/claude-env.d.ts.map +1 -1
  16. package/dist/claude-env.js +17 -1
  17. package/dist/claude-env.js.map +1 -1
  18. package/dist/cli-lifecycle.d.ts +4 -0
  19. package/dist/cli-lifecycle.d.ts.map +1 -1
  20. package/dist/cli-lifecycle.js +18 -0
  21. package/dist/cli-lifecycle.js.map +1 -1
  22. package/dist/cli-main.js +139 -19
  23. package/dist/cli-main.js.map +1 -1
  24. package/dist/config.d.ts +4 -0
  25. package/dist/config.d.ts.map +1 -1
  26. package/dist/config.js.map +1 -1
  27. package/dist/count-tokens.d.ts +38 -3
  28. package/dist/count-tokens.d.ts.map +1 -1
  29. package/dist/count-tokens.js +94 -19
  30. package/dist/count-tokens.js.map +1 -1
  31. package/dist/diagnostics-schema.d.ts +44 -0
  32. package/dist/diagnostics-schema.d.ts.map +1 -0
  33. package/dist/diagnostics-schema.js +162 -0
  34. package/dist/diagnostics-schema.js.map +1 -0
  35. package/dist/diagnostics.d.ts +116 -0
  36. package/dist/diagnostics.d.ts.map +1 -0
  37. package/dist/diagnostics.js +316 -0
  38. package/dist/diagnostics.js.map +1 -0
  39. package/dist/first-tree.d.ts +11 -0
  40. package/dist/first-tree.d.ts.map +1 -0
  41. package/dist/first-tree.js +45 -0
  42. package/dist/first-tree.js.map +1 -0
  43. package/dist/hooks.d.ts +37 -0
  44. package/dist/hooks.d.ts.map +1 -1
  45. package/dist/hooks.js +69 -9
  46. package/dist/hooks.js.map +1 -1
  47. package/dist/memtree-finder.d.ts +11 -0
  48. package/dist/memtree-finder.d.ts.map +1 -1
  49. package/dist/memtree-finder.js +18 -0
  50. package/dist/memtree-finder.js.map +1 -1
  51. package/dist/memtree-links.d.ts +2 -0
  52. package/dist/memtree-links.d.ts.map +1 -1
  53. package/dist/memtree-links.js +4 -0
  54. package/dist/memtree-links.js.map +1 -1
  55. package/dist/memtree-mcp-config.d.ts.map +1 -1
  56. package/dist/memtree-mcp-config.js +4 -2
  57. package/dist/memtree-mcp-config.js.map +1 -1
  58. package/dist/memtree-mcp.d.ts +24 -4
  59. package/dist/memtree-mcp.d.ts.map +1 -1
  60. package/dist/memtree-mcp.js +47 -14
  61. package/dist/memtree-mcp.js.map +1 -1
  62. package/dist/memtree-tools.d.ts +17 -1
  63. package/dist/memtree-tools.d.ts.map +1 -1
  64. package/dist/memtree-tools.js +50 -2
  65. package/dist/memtree-tools.js.map +1 -1
  66. package/dist/memtree.d.ts +17 -1
  67. package/dist/memtree.d.ts.map +1 -1
  68. package/dist/memtree.js +62 -19
  69. package/dist/memtree.js.map +1 -1
  70. package/dist/notices.d.ts +6 -1
  71. package/dist/notices.d.ts.map +1 -1
  72. package/dist/notices.js +13 -1
  73. package/dist/notices.js.map +1 -1
  74. package/dist/prefix-store.js +3 -0
  75. package/dist/prefix-store.js.map +1 -1
  76. package/dist/proxy.d.ts +45 -3
  77. package/dist/proxy.d.ts.map +1 -1
  78. package/dist/proxy.js +193 -54
  79. package/dist/proxy.js.map +1 -1
  80. package/dist/reqlog.d.ts +27 -1
  81. package/dist/reqlog.d.ts.map +1 -1
  82. package/dist/reqlog.js.map +1 -1
  83. package/dist/request-sizing.d.ts +21 -2
  84. package/dist/request-sizing.d.ts.map +1 -1
  85. package/dist/request-sizing.js +60 -7
  86. package/dist/request-sizing.js.map +1 -1
  87. package/dist/resume-hint.d.ts +25 -0
  88. package/dist/resume-hint.d.ts.map +1 -0
  89. package/dist/resume-hint.js +36 -0
  90. package/dist/resume-hint.js.map +1 -0
  91. package/dist/token-estimate.d.ts +35 -0
  92. package/dist/token-estimate.d.ts.map +1 -0
  93. package/dist/token-estimate.js +97 -0
  94. package/dist/token-estimate.js.map +1 -0
  95. package/dist/update-check.d.ts +4 -3
  96. package/dist/update-check.d.ts.map +1 -1
  97. package/dist/update-check.js +4 -3
  98. package/dist/update-check.js.map +1 -1
  99. package/dist/update-lock.d.ts +68 -0
  100. package/dist/update-lock.d.ts.map +1 -0
  101. package/dist/update-lock.js +176 -0
  102. package/dist/update-lock.js.map +1 -0
  103. package/package.json +3 -3
package/dist/reqlog.d.ts CHANGED
@@ -87,6 +87,9 @@ export interface UsageRecord {
87
87
  export interface CountTokensRecord {
88
88
  statusClass: string;
89
89
  ms: number;
90
+ /** Count payload bytes, and the allowance the attempt had (count-tokens.ts). */
91
+ bytes: number;
92
+ timeoutMs: number;
90
93
  }
91
94
  export interface MessagesRecord {
92
95
  kind: "messages";
@@ -212,6 +215,22 @@ export interface MessagesRecord {
212
215
  lateCountRecovery?: {
213
216
  outcome: "compressed" | "forwarded" | "refused";
214
217
  };
218
+ /**
219
+ * Why ccc refused to forward this request (route-fallback.ts): the request
220
+ * did not fit the native window after recovery. Logged here, never printed:
221
+ * Claude Code's TUI shows the proxy's stderr inside the conversation.
222
+ */
223
+ refusal?: {
224
+ lane: string;
225
+ attempt: number;
226
+ status: number;
227
+ inputTokens: number;
228
+ outputTokens: number;
229
+ outputReservation: number;
230
+ indexBehind: boolean;
231
+ budgetTokens: number;
232
+ modelContextLimit: number;
233
+ };
215
234
  /** Searchable flag explaining a forward above the advisory compression budget. */
216
235
  overBudgetForward?: {
217
236
  reason: "exact-count-fits-window" | "estimate-fits-window" | "bytes-fallback-fits-window";
@@ -345,7 +364,7 @@ export interface CompactionRecord {
345
364
  /**
346
365
  * Where the budget came from: CCC_BUDGET_TOKENS ("override"), the
347
366
  * server's `model_budget_tokens` ("server"), or the model's context window
348
- * times FALLBACK_BUDGET_WINDOW_RATIO until the server reports one.
367
+ * times fallbackBudgetRatio (proxy.ts) until the server reports one.
349
368
  */
350
369
  budgetSource: "override" | "server" | "window-ratio";
351
370
  /** What a compaction on this turn aims at (budget/2, or the explicit N). */
@@ -362,6 +381,13 @@ export interface CompactionRecord {
362
381
  * "bytes": bytes/4 of the whole body (no earlier usage to start from).
363
382
  */
364
383
  sizeSource?: "reported" | "bytes";
384
+ /**
385
+ * Uncounted and uncalibrated ("bytes"), and over the window by its per-model
386
+ * conservative bound (token-estimate.ts) plus max_tokens: delivery could not
387
+ * send it without an exact count, so planning compresses it now, through
388
+ * the normal gated path.
389
+ */
390
+ uncountedOverWindow?: true;
365
391
  /** Set when the turn compressed (or tried to) for one of these reasons. */
366
392
  reason?: RecompressReason;
367
393
  /** For "prefix-mismatch": which check failed. */
@@ -1 +1 @@
1
- {"version":3,"file":"reqlog.d.ts","sourceRoot":"","sources":["../src/reqlog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAK9E,2EAA2E;AAC3E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,MAAM;AACR,gFAAgF;GAC9E,aAAa;AACf;;;;GAIG;GACD,aAAa;AACf;;;;;GAKG;GACD,mBAAmB,GACnB,qBAAqB;AACvB;;;;;;GAMG;GACD,iBAAiB,GACjB,eAAe;AACjB,8EAA8E;GAC5E,uBAAuB;AACzB;;;GAGG;GACD,qBAAqB,GACrB,mBAAmB;AACrB;;;;GAIG;GACD,aAAa;AACf;;;GAGG;GACD,cAAc;AAChB;;;GAGG;GACD,SAAS,GACT,wBAAwB,GACxB,aAAa,CAAC;AAElB,yEAAyE;AACzE,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED;;;;;GAKG;AACH,8FAA8F;AAC9F,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,EAAE;QACT,oEAAoE;QACpE,EAAE,EAAE,MAAM,CAAC;QACX;;;;;;;WAOG;QACH,EAAE,EAAE,OAAO,CAAC;QACZ;;;WAGG;QACH,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;IACF;;;;OAIG;IACH,OAAO,CAAC,EAAE;QACR,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;IACF;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACtC;;;;;;;;;;;;;;;;;OAiBG;IACH,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC7D;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IACtE;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;IACvC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,4EAA4E;IAC5E,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAClC,yFAAyF;IACzF,iBAAiB,CAAC,EAAE;QAAE,OAAO,EAAE,YAAY,GAAG,WAAW,GAAG,SAAS,CAAA;KAAE,CAAC;IACxE,kFAAkF;IAClF,iBAAiB,CAAC,EAAE;QAClB,MAAM,EAAE,yBAAyB,GAAG,sBAAsB,GAAG,4BAA4B,CAAC;KAC3F,CAAC;IACF;;;;OAIG;IACH,aAAa,CAAC,EAAE;QACd;;;;WAIG;QACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,OAAO,EACH,YAAY,GACZ,QAAQ;QACV,yEAAyE;WACvE,MAAM,GACN,UAAU;QACZ;;;WAGG;WACD,YAAY,GACZ,SAAS,GACT,eAAe;QACjB;;;WAGG;WACD,UAAU;QACZ,qEAAqE;WACnE,UAAU;QACZ,wDAAwD;WACtD,WAAW;QACb;;;;;;WAMG;WACD,SAAS;QACX;;;;;WAKG;WACD,gBAAgB;QAClB;;;WAGG;WACD,cAAc,CAAC;QACnB;;;;WAIG;QACH,MAAM,CAAC,EAAE,WAAW,GAAG,eAAe,CAAC;QACvC,iFAAiF;QACjF,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,iEAAiE;QACjE,OAAO,CAAC,EACJ,WAAW,GACX,OAAO,GACP,gBAAgB,GAChB,YAAY;QACd;;;;;;;;WAQG;WACD,iBAAiB;QACnB;;;;;;;;;;;;;;;;;;WAkBG;WACD,kBAAkB;QACpB;;;;;;WAMG;WACD,gBAAgB,CAAC;KACtB,CAAC;IACF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,aAAa,CAAC,EAAE,IAAI,CAAC;IACrB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,+EAA+E;AAC/E,MAAM,MAAM,gBAAgB;AAC1B,6DAA6D;AAC3D,QAAQ;AACV,0EAA0E;GACxE,iBAAiB;AACnB,yDAAyD;GACvD,QAAQ;AACV,iFAAiF;GAC/E,eAAe,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,qFAAqF;IACrF,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;IAClC,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,YAAY,EAAE,UAAU,GAAG,QAAQ,GAAG,cAAc,CAAC;IACrD,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IAClC,2EAA2E;IAC3E,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,iDAAiD;IACjD,UAAU,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC7C;;;OAGG;IACH,UAAU,CAAC,EAAE,IAAI,CAAC;CACnB;AAED,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,4EAA4E;AAC5E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,CAAC;AAE1E,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CAClC;AAED,qBAAa,aAAc,YAAW,cAAc;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4B;gBAE9C,QAAQ,CAAC,EAAE,MAAM;IAU7B,4EAA4E;IAC5E,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAuBhC;;;;OAIG;IACG,KAAK,CAAC,SAAS,SAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAqBjD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAI3E;AAED,wEAAwE;AACxE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAM9E"}
1
+ {"version":3,"file":"reqlog.d.ts","sourceRoot":"","sources":["../src/reqlog.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reqlog.js","sourceRoot":"","sources":["../src/reqlog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reqlog.js","sourceRoot":"","sources":["../src/reqlog.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,8 @@ export interface CandidateMeasurement {
23
23
  /** Advisory estimate retained for compression and stale-estimate diagnostics. */
24
24
  estimatedTokens: number;
25
25
  count?: CountTokensResult;
26
+ /** Over Anthropic's request size limit: it cannot be sent natively at any size. */
27
+ tooLarge?: true;
26
28
  }
27
29
  export interface RequestCandidate {
28
30
  readonly key: string;
@@ -31,20 +33,37 @@ export interface RequestCandidate {
31
33
  readonly kind: CandidateKind;
32
34
  readonly sample?: Readonly<SizeSample>;
33
35
  readonly estimate: Readonly<PlannedSize>;
36
+ /** Per-model conservative bound (token-estimate.ts): what delivery may rely
37
+ * on without an exact count. */
38
+ readonly conservativeTokens: number;
34
39
  }
35
40
  export declare class RequestSizing {
36
41
  private readonly counts;
37
42
  private readonly enabled;
43
+ private readonly model?;
38
44
  private readonly candidates;
39
45
  private readonly excludedFallbacks;
40
- constructor(counts: CountTokensSession, enabled: boolean);
46
+ /** `model` is the request's model: it picks the tokenizer family's ratio. */
47
+ constructor(counts: CountTokensSession, enabled: boolean, model?: string | undefined);
41
48
  /** The first registration fixes both bytes and learned sample for this request. */
42
49
  register(body: Buffer, kind: CandidateKind, sample?: SizeSample): RequestCandidate;
43
50
  /** Eligibility belongs to route planning, not to a later byte-size guess. */
44
51
  excludeFallback(candidate: RequestCandidate): void;
45
52
  /** Planning and metadata consult the same exact count, else the snapshotted estimate. */
46
53
  plan(candidate: RequestCandidate): PlannedSize;
54
+ /** Whether this body could still get an exact count: counting is on and
55
+ * no attempt for these bytes has completed (a failed one is reused). */
56
+ canCount(candidate: RequestCandidate): boolean;
57
+ /** Whether Anthropic would refuse this body's size (413) before reading it. */
58
+ exceedsRequestLimit(candidate: RequestCandidate): boolean;
59
+ /** Whether the conservative bound alone admits this body under `limits`. */
60
+ boundFits(candidate: RequestCandidate, limits: SizingLimits): boolean;
61
+ /** Count a body at planning when only a count could admit it: no exact
62
+ * count and its conservative bound does not fit. Delivery reuses the result. */
63
+ countIfOverBound(candidate: RequestCandidate, limits: SizingLimits): Promise<void>;
47
64
  /** Whether this body's size is an exact Count Tokens result. */
65
+ /** An exact count already made for these bytes, if any; never counts. */
66
+ exactTokensFor(body: Buffer): number | undefined;
48
67
  isExact(candidate: RequestCandidate): boolean;
49
68
  clientInputTokens(candidate: RequestCandidate): number | undefined;
50
69
  /** Count only when a size decision needs it; all views reuse the same result. */
@@ -64,7 +83,7 @@ export declare class RequestSizing {
64
83
  export declare function outputReservation(model: string | undefined, maxTokens: unknown): number;
65
84
  /** Admission: the relaxed output floor applies only to an exact count of this
66
85
  * body; estimates and fallbacks (failed or disabled counting) keep max_tokens. */
67
- export declare function fitsMeasured(measurement: Pick<CandidateMeasurement, "tokens" | "source">, limits: SizingLimits): boolean;
86
+ export declare function fitsMeasured(measurement: Pick<CandidateMeasurement, "tokens" | "source" | "tooLarge">, limits: SizingLimits): boolean;
68
87
  /** The limits an estimate is judged by: the full max_tokens reservation. */
69
88
  export declare function estimateLimits(limits: SizingLimits): SizingLimits;
70
89
  /** `limits.output` is the reservation from outputReservation, not raw max_tokens. */
@@ -1 +1 @@
1
- {"version":3,"file":"request-sizing.d.ts","sourceRoot":"","sources":["../src/request-sizing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request-sizing.d.ts","sourceRoot":"","sources":["../src/request-sizing.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,9 @@
2
2
  * exact counts remain attached to immutable body bytes, and every candidate
3
3
  * shares the request's Count Tokens deadline and account cooldown. */
4
4
  import { createHash } from "node:crypto";
5
- import { plausibleSample, shouldCountTokens } from "./count-tokens.js";
5
+ import { exceedsRequestLimit, plausibleSample, shouldCountTokens } from "./count-tokens.js";
6
6
  import { approxTokensFromBytes } from "./reqlog.js";
7
+ import { conservativeBodyTokens } from "./token-estimate.js";
7
8
  import { acceptsContextOverflow } from "./turns.js";
8
9
  /** Output room kept free on models that accept input + max_tokens over the
9
10
  * window, so the model can still answer a request that barely fits. */
@@ -11,11 +12,14 @@ export const OUTPUT_FLOOR_TOKENS = 16_000;
11
12
  export class RequestSizing {
12
13
  counts;
13
14
  enabled;
15
+ model;
14
16
  candidates = new Map();
15
17
  excludedFallbacks = new Set();
16
- constructor(counts, enabled) {
18
+ /** `model` is the request's model: it picks the tokenizer family's ratio. */
19
+ constructor(counts, enabled, model) {
17
20
  this.counts = counts;
18
21
  this.enabled = enabled;
22
+ this.model = model;
19
23
  }
20
24
  /** The first registration fixes both bytes and learned sample for this request. */
21
25
  register(body, kind, sample) {
@@ -24,8 +28,10 @@ export class RequestSizing {
24
28
  if (existing)
25
29
  return existing;
26
30
  const snapshot = plausibleSample(sample) ? Object.freeze({ ...sample }) : undefined;
31
+ const conservativeTokens = conservativeBodyTokens(body, this.model);
27
32
  const candidate = Object.freeze({ key, body: Buffer.from(body), kind, sample: snapshot,
28
- estimate: Object.freeze(estimateRequestTokens(snapshot, body.length)) });
33
+ estimate: Object.freeze(capByteEstimate(estimateRequestTokens(snapshot, body.length), conservativeTokens)),
34
+ conservativeTokens });
29
35
  this.candidates.set(key, candidate);
30
36
  return candidate;
31
37
  }
@@ -38,7 +44,33 @@ export class RequestSizing {
38
44
  const exact = this.counts.peek(candidate.body)?.tokens;
39
45
  return exact !== undefined ? { tokens: exact, source: "reported" } : candidate.estimate;
40
46
  }
47
+ /** Whether this body could still get an exact count: counting is on and
48
+ * no attempt for these bytes has completed (a failed one is reused). */
49
+ canCount(candidate) {
50
+ return this.enabled && this.counts.peek(candidate.body) === undefined &&
51
+ !this.exceedsRequestLimit(candidate);
52
+ }
53
+ /** Whether Anthropic would refuse this body's size (413) before reading it. */
54
+ exceedsRequestLimit(candidate) {
55
+ return exceedsRequestLimit(candidate.body.length);
56
+ }
57
+ /** Whether the conservative bound alone admits this body under `limits`. */
58
+ boundFits(candidate, limits) {
59
+ return !this.exceedsRequestLimit(candidate) &&
60
+ fitsNative(candidate.conservativeTokens, estimateLimits(limits));
61
+ }
62
+ /** Count a body at planning when only a count could admit it: no exact
63
+ * count and its conservative bound does not fit. Delivery reuses the result. */
64
+ async countIfOverBound(candidate, limits) {
65
+ if (this.isExact(candidate) || !this.canCount(candidate) || this.boundFits(candidate, limits))
66
+ return;
67
+ await this.counts.count(candidate.body);
68
+ }
41
69
  /** Whether this body's size is an exact Count Tokens result. */
70
+ /** An exact count already made for these bytes, if any; never counts. */
71
+ exactTokensFor(body) {
72
+ return this.counts.peek(body)?.tokens;
73
+ }
42
74
  isExact(candidate) {
43
75
  return this.counts.peek(candidate.body)?.tokens !== undefined;
44
76
  }
@@ -50,8 +82,16 @@ export class RequestSizing {
50
82
  async measure(candidate, limits, phase = "delivery") {
51
83
  let count = this.counts.peek(candidate.body);
52
84
  const estimate = candidate.estimate.tokens;
85
+ if (this.exceedsRequestLimit(candidate))
86
+ return {
87
+ tokens: Math.max(estimate, candidate.conservativeTokens), source: "bytes",
88
+ estimatedTokens: estimate, ...(count ? { count } : {}), tooLarge: true,
89
+ };
90
+ // Delivery counts whenever an estimate is all that says the body fits: the
91
+ // learned estimate, or the conservative bound, does not fit on its own.
53
92
  const needed = shouldCountTokens(candidate.sample, candidate.body.length, estimate, limits.budget) ||
54
- (phase === "delivery" && !fitsNative(estimate, estimateLimits(limits)));
93
+ (phase === "delivery" && !(fitsNative(estimate, estimateLimits(limits)) &&
94
+ fitsNative(candidate.conservativeTokens, estimateLimits(limits))));
55
95
  if (!count && this.enabled && needed)
56
96
  count = await this.counts.count(candidate.body);
57
97
  if (count?.tokens !== undefined)
@@ -59,10 +99,12 @@ export class RequestSizing {
59
99
  tokens: count.tokens, source: "exact", estimatedTokens: estimate, count,
60
100
  };
61
101
  // A learned ratio can request compression, but cannot veto a body whose
62
- // plain estimate fits when counting is unavailable or disabled.
102
+ // conservative per-model bound fits when counting is unavailable or
103
+ // disabled; nor can it admit one whose bound does not (2026-10-15: bytes/4
104
+ // admitted a body Anthropic counted at 1.34M tokens on a 1M window).
63
105
  const bytes = phase === "delivery" &&
64
106
  (!this.enabled || count !== undefined || candidate.estimate.source === "bytes");
65
- return { tokens: bytes ? Math.ceil(candidate.body.length / 4) : estimate,
107
+ return { tokens: bytes ? candidate.conservativeTokens : estimate,
66
108
  source: bytes ? "bytes" : candidate.estimate.source,
67
109
  estimatedTokens: estimate, count };
68
110
  }
@@ -98,7 +140,7 @@ export function outputReservation(model, maxTokens) {
98
140
  /** Admission: the relaxed output floor applies only to an exact count of this
99
141
  * body; estimates and fallbacks (failed or disabled counting) keep max_tokens. */
100
142
  export function fitsMeasured(measurement, limits) {
101
- return fitsNative(measurement.tokens, measurement.source === "exact" ? limits : estimateLimits(limits));
143
+ return !measurement.tooLarge && fitsNative(measurement.tokens, measurement.source === "exact" ? limits : estimateLimits(limits));
102
144
  }
103
145
  /** The limits an estimate is judged by: the full max_tokens reservation. */
104
146
  export function estimateLimits(limits) {
@@ -109,6 +151,17 @@ export function fitsNative(input, limits) {
109
151
  return [input, limits.output, limits.context].every(value => Number.isFinite(value) && value >= 0) &&
110
152
  input + limits.output <= limits.context;
111
153
  }
154
+ /**
155
+ * An uncalibrated bytes/4 estimate reads base64 images as text (a 1 MB image
156
+ * is ~250k "tokens" but costs at most MAX_IMAGE_TOKENS), so it is capped at
157
+ * the conservative bound, which is an upper bound. Text-only bodies are
158
+ * unchanged: their bytes/4 is below the bound. A calibrated estimate is kept.
159
+ */
160
+ function capByteEstimate(estimate, conservativeTokens) {
161
+ if (estimate.source !== "bytes" || estimate.tokens <= conservativeTokens)
162
+ return estimate;
163
+ return { tokens: conservativeTokens, source: "bytes" };
164
+ }
112
165
  /** One shared estimator for planner telemetry and request-local snapshots. */
113
166
  export function estimateRequestTokens(sample, bytes) {
114
167
  if (!plausibleSample(sample))
@@ -1 +1 @@
1
- {"version":3,"file":"request-sizing.js","sourceRoot":"","sources":["../src/request-sizing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request-sizing.js","sourceRoot":"","sources":["../src/request-sizing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * The line ccc prints after Claude Code exits, under Claude Code's own
3
+ * "Resume this session with: claude --resume <id>": resuming with plain
4
+ * `claude` would skip MemTree, so name the ccc form too.
5
+ */
6
+ export interface ResumeHintOptions {
7
+ sessionId: string | undefined;
8
+ /** The environment ccc was started with (`ccc staging`), if not production. */
9
+ envPrefix?: string;
10
+ color: boolean;
11
+ }
12
+ export interface ExitResumeHintOptions {
13
+ /** Interactive UI only: `-p`/non-TTY output must stay byte-for-byte vanilla. */
14
+ interactive: boolean;
15
+ sessionId: string | undefined;
16
+ mode: "production" | "staging" | "local";
17
+ color: boolean;
18
+ }
19
+ /** What ccc prints once Claude Code has exited, if anything. */
20
+ export declare function exitResumeHint(opts: ExitResumeHintOptions): string | undefined;
21
+ /** The hint to print, or undefined when there is no session id to offer. */
22
+ export declare function resumeHintText(opts: ResumeHintOptions): string | undefined;
23
+ /** Whether `id` looks like a Claude Code session id (safe for a terminal and a shell). */
24
+ export declare function isResumableSessionId(id: string | undefined): id is string;
25
+ //# sourceMappingURL=resume-hint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume-hint.d.ts","sourceRoot":"","sources":["../src/resume-hint.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,gFAAgF;IAChF,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;IACzC,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,GAAG,SAAS,CAO9E;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAO1E;AAED,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,EAAE,IAAI,MAAM,CAEzE"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The line ccc prints after Claude Code exits, under Claude Code's own
3
+ * "Resume this session with: claude --resume <id>": resuming with plain
4
+ * `claude` would skip MemTree, so name the ccc form too.
5
+ */
6
+ /** Claude Code session ids are UUIDs; anything else is not safe to print. */
7
+ const RESUMABLE_SESSION_ID = /^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/;
8
+ // The startup banner's colours (cli-main.ts printBanner): MemTree green, ccc orange.
9
+ const LABEL_COLOR = "\x1b[38;5;48m";
10
+ const COMMAND_COLOR = "\x1b[1;38;5;209m";
11
+ const RESET = "\x1b[0m";
12
+ /** What ccc prints once Claude Code has exited, if anything. */
13
+ export function exitResumeHint(opts) {
14
+ if (!opts.interactive)
15
+ return undefined;
16
+ return resumeHintText({
17
+ sessionId: opts.sessionId,
18
+ envPrefix: opts.mode === "production" ? undefined : opts.mode,
19
+ color: opts.color,
20
+ });
21
+ }
22
+ /** The hint to print, or undefined when there is no session id to offer. */
23
+ export function resumeHintText(opts) {
24
+ if (!isResumableSessionId(opts.sessionId))
25
+ return undefined;
26
+ const command = ["ccc", opts.envPrefix, "--resume", opts.sessionId]
27
+ .filter((part) => part !== undefined && part !== "")
28
+ .join(" ");
29
+ const paint = (code, text) => (opts.color ? `${code}${text}${RESET}` : text);
30
+ return `\n${paint(LABEL_COLOR, "Resume with MemTree:")}\n${paint(COMMAND_COLOR, command)}\n`;
31
+ }
32
+ /** Whether `id` looks like a Claude Code session id (safe for a terminal and a shell). */
33
+ export function isResumableSessionId(id) {
34
+ return typeof id === "string" && RESUMABLE_SESSION_ID.test(id);
35
+ }
36
+ //# sourceMappingURL=resume-hint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume-hint.js","sourceRoot":"","sources":["../src/resume-hint.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,6EAA6E;AAC7E,MAAM,oBAAoB,GAAG,mCAAmC,CAAC;AAEjE,qFAAqF;AACrF,MAAM,WAAW,GAAG,eAAe,CAAC;AACpC,MAAM,aAAa,GAAG,kBAAkB,CAAC;AACzC,MAAM,KAAK,GAAG,SAAS,CAAC;AAiBxB,gEAAgE;AAChE,MAAM,UAAU,cAAc,CAAC,IAA2B;IACxD,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IACxC,OAAO,cAAc,CAAC;QACpB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;QAC7D,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;AACL,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAAC,IAAuB;IACpD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5D,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC;SAChE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC;SACnD,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7F,OAAO,KAAK,KAAK,CAAC,WAAW,EAAE,sBAAsB,CAAC,KAAK,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC;AAC/F,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,oBAAoB,CAAC,EAAsB;IACzD,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Conservative token estimates from request bytes, per model tokenizer family,
3
+ * for when no exact Count Tokens result is available.
4
+ *
5
+ * bytes/4 under-counted Claude 4.7+ by ~1.8x: on 2026-10-15 (request 3bc78182)
6
+ * a 3,238,930-byte flattened body was sized at 809,733 tokens and forwarded to
7
+ * a 1M window; Anthropic counted 1,342,572 and refused it. These ratios are the
8
+ * MemTree server's (polychat/chars_per_token.py): low percentiles of real
9
+ * Claude Code and NanoGPT requests counted with Count Tokens, so an estimate
10
+ * rarely says a body fits when it does not. Bytes are at least the characters
11
+ * the server measures (JSON escapes and UTF-8 only add bytes), so dividing
12
+ * bytes by a chars-per-token ratio errs high, never low.
13
+ *
14
+ * Base64 image data is not text: Anthropic resizes every image to at most
15
+ * MAX_IMAGE_TOKENS however many bytes it takes (and a tiny, very compressible
16
+ * PNG can still cost the maximum), so each image payload counts as the maximum.
17
+ */
18
+ /** Claude 4.7 and later (Opus 4.7+, Sonnet/Haiku 5+, Fable 5). */
19
+ export declare const CLAUDE_4_7_PLUS_BYTES_PER_TOKEN = 1.9;
20
+ /** Claude before 4.7 (4.5, 4.6 and older). */
21
+ export declare const CLAUDE_LEGACY_BYTES_PER_TOKEN = 2.4;
22
+ /** Models that are not Claude, or no model named. */
23
+ export declare const OTHER_BYTES_PER_TOKEN = 2.8;
24
+ /** Anthropic's largest per-image cost (Claude 4.7+: 2576 px, 4,784 tokens). */
25
+ export declare const MAX_IMAGE_TOKENS = 4784;
26
+ /** The conservative bytes per token of `model`'s tokenizer family. */
27
+ export declare function bytesPerTokenForModel(model: string | undefined): number;
28
+ /** Tokens `bytes` of text may cost on `model` (rounded up). */
29
+ export declare function conservativeTokensFromBytes(bytes: number, model: string | undefined): number;
30
+ /** Tokens a request body may cost on `model`: its text at the family ratio,
31
+ * each image content block (base64 or URL, in a message or a tool_result) at
32
+ * one image's maximum.
33
+ * A body that does not parse is all text, an over-estimate. */
34
+ export declare function conservativeBodyTokens(body: Buffer, model: string | undefined): number;
35
+ //# sourceMappingURL=token-estimate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-estimate.d.ts","sourceRoot":"","sources":["../src/token-estimate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,kEAAkE;AAClE,eAAO,MAAM,+BAA+B,MAAM,CAAC;AACnD,8CAA8C;AAC9C,eAAO,MAAM,6BAA6B,MAAM,CAAC;AACjD,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,OAAQ,CAAC;AAItC,sEAAsE;AACtE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CASvE;AAED,+DAA+D;AAC/D,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAG5F;AAED;;;+DAG+D;AAC/D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGtF"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Conservative token estimates from request bytes, per model tokenizer family,
3
+ * for when no exact Count Tokens result is available.
4
+ *
5
+ * bytes/4 under-counted Claude 4.7+ by ~1.8x: on 2026-10-15 (request 3bc78182)
6
+ * a 3,238,930-byte flattened body was sized at 809,733 tokens and forwarded to
7
+ * a 1M window; Anthropic counted 1,342,572 and refused it. These ratios are the
8
+ * MemTree server's (polychat/chars_per_token.py): low percentiles of real
9
+ * Claude Code and NanoGPT requests counted with Count Tokens, so an estimate
10
+ * rarely says a body fits when it does not. Bytes are at least the characters
11
+ * the server measures (JSON escapes and UTF-8 only add bytes), so dividing
12
+ * bytes by a chars-per-token ratio errs high, never low.
13
+ *
14
+ * Base64 image data is not text: Anthropic resizes every image to at most
15
+ * MAX_IMAGE_TOKENS however many bytes it takes (and a tiny, very compressible
16
+ * PNG can still cost the maximum), so each image payload counts as the maximum.
17
+ */
18
+ /** Claude 4.7 and later (Opus 4.7+, Sonnet/Haiku 5+, Fable 5). */
19
+ export const CLAUDE_4_7_PLUS_BYTES_PER_TOKEN = 1.9;
20
+ /** Claude before 4.7 (4.5, 4.6 and older). */
21
+ export const CLAUDE_LEGACY_BYTES_PER_TOKEN = 2.4;
22
+ /** Models that are not Claude, or no model named. */
23
+ export const OTHER_BYTES_PER_TOKEN = 2.8;
24
+ /** Anthropic's largest per-image cost (Claude 4.7+: 2576 px, 4,784 tokens). */
25
+ export const MAX_IMAGE_TOKENS = 4_784;
26
+ const CLAUDE_VERSION_RE = /claude-(?:opus|sonnet|haiku|fable|instant)?-?(\d{1,2})(?:[-.](\d{1,2}))?(?![0-9])/;
27
+ /** The conservative bytes per token of `model`'s tokenizer family. */
28
+ export function bytesPerTokenForModel(model) {
29
+ const id = (model ?? "").toLowerCase();
30
+ if (!id)
31
+ return OTHER_BYTES_PER_TOKEN;
32
+ const match = CLAUDE_VERSION_RE.exec(id);
33
+ if (!match)
34
+ return id.includes("claude") ? CLAUDE_4_7_PLUS_BYTES_PER_TOKEN : OTHER_BYTES_PER_TOKEN;
35
+ const major = Number(match[1]);
36
+ const minor = match[2] === undefined ? 0 : Number(match[2]);
37
+ return major > 4 || (major === 4 && minor >= 7)
38
+ ? CLAUDE_4_7_PLUS_BYTES_PER_TOKEN : CLAUDE_LEGACY_BYTES_PER_TOKEN;
39
+ }
40
+ /** Tokens `bytes` of text may cost on `model` (rounded up). */
41
+ export function conservativeTokensFromBytes(bytes, model) {
42
+ if (!(bytes > 0))
43
+ return 0;
44
+ return Math.ceil(bytes / bytesPerTokenForModel(model));
45
+ }
46
+ /** Tokens a request body may cost on `model`: its text at the family ratio,
47
+ * each image content block (base64 or URL, in a message or a tool_result) at
48
+ * one image's maximum.
49
+ * A body that does not parse is all text, an over-estimate. */
50
+ export function conservativeBodyTokens(body, model) {
51
+ const { imageBytes, imageTokens } = imagePayloads(body);
52
+ return conservativeTokensFromBytes(body.length - imageBytes, model) + imageTokens;
53
+ }
54
+ function imagePayloads(body) {
55
+ const totals = { imageBytes: 0, imageTokens: 0 };
56
+ // Most bodies carry no image: skip the parse.
57
+ if (!body.includes('"image"'))
58
+ return totals;
59
+ let parsed;
60
+ try {
61
+ parsed = JSON.parse(body.toString("utf-8"));
62
+ }
63
+ catch {
64
+ return totals;
65
+ }
66
+ const messages = parsed?.messages;
67
+ if (Array.isArray(messages)) {
68
+ for (const message of messages) {
69
+ const content = message?.content;
70
+ if (Array.isArray(content))
71
+ countImageBlocks(content, totals);
72
+ }
73
+ }
74
+ return totals;
75
+ }
76
+ /** Count image blocks among content blocks: a message's content, and
77
+ * recursively a tool_result's content. Image-shaped JSON anywhere else (tool
78
+ * inputs, schemas, system, metadata) is ordinary text and stays counted as such. */
79
+ function countImageBlocks(blocks, totals) {
80
+ for (const item of blocks) {
81
+ if (!item || typeof item !== "object")
82
+ continue;
83
+ const block = item;
84
+ const source = block.source;
85
+ if (block.type === "image" && source && typeof source === "object") {
86
+ totals.imageTokens += MAX_IMAGE_TOKENS;
87
+ // Base64 is ASCII and never escaped by JSON, so its length is its byte count.
88
+ if (source.type === "base64" && typeof source.data === "string") {
89
+ totals.imageBytes += source.data.length;
90
+ }
91
+ }
92
+ else if (block.type === "tool_result" && Array.isArray(block.content)) {
93
+ countImageBlocks(block.content, totals);
94
+ }
95
+ }
96
+ }
97
+ //# sourceMappingURL=token-estimate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-estimate.js","sourceRoot":"","sources":["../src/token-estimate.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Startup check for a newer claude-code-infinite release on npm.
3
3
  *
4
- * Detect-and-tell only: ccc is Claude Code's parent process, so a silent
5
- * `npm -g` write mid-session is never acceptable. The result is surfaced
4
+ * The check only detects; installing is auto-update.ts, which acts on this
5
+ * result in the background where that is safe. The result is surfaced
6
6
  * inside Claude Code through the SessionStart banner (see notices.ts) — the
7
7
  * pre-launch terminal is covered by the TUI within a second, so a line printed
8
8
  * there is never read. Bounded by a short timeout and silent on every failure
@@ -10,7 +10,8 @@
10
10
  * on the registry. The registry's answer is cached for a day, so most starts
11
11
  * make no request at all. `CCC_NO_UPDATE_CHECK=1` (or the older
12
12
  * `CCC_SKIP_UPDATE_CHECK=1`), or `"updateCheck": false` in
13
- * ~/.claude-code-infinite/config.json, disables the check entirely.
13
+ * ~/.claude-code-infinite/config.json, disables the check entirely (and
14
+ * with it auto-update).
14
15
  */
15
16
  export declare const PACKAGE_NAME = "claude-code-infinite";
16
17
  export declare const NPM_LATEST_URL = "https://registry.npmjs.org/claude-code-infinite/latest";
@@ -1 +1 @@
1
- {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,eAAO,MAAM,YAAY,yBAAyB,CAAC;AACnD,eAAO,MAAM,cAAc,2DAAsD,CAAC;AAClF,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,gDAAgD;AAChD,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAC7D,eAAO,MAAM,eAAe,yCAAoC,CAAC;AACjE,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,yBAAyB,QAAsB,CAAC;AAC7D,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAM3D,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAOD,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAQjC;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAGT;AAgED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAI7E;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAC7B,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC3B,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC1B,MAAM,CAKR"}
1
+ {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,eAAO,MAAM,YAAY,yBAAyB,CAAC;AACnD,eAAO,MAAM,cAAc,2DAAsD,CAAC;AAClF,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,gDAAgD;AAChD,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAC7D,eAAO,MAAM,eAAe,yCAAoC,CAAC;AACjE,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,yBAAyB,QAAsB,CAAC;AAC7D,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAM3D,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAOD,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAQjC;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAGT;AAgED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAI7E;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAC7B,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC3B,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC1B,MAAM,CAKR"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Startup check for a newer claude-code-infinite release on npm.
3
3
  *
4
- * Detect-and-tell only: ccc is Claude Code's parent process, so a silent
5
- * `npm -g` write mid-session is never acceptable. The result is surfaced
4
+ * The check only detects; installing is auto-update.ts, which acts on this
5
+ * result in the background where that is safe. The result is surfaced
6
6
  * inside Claude Code through the SessionStart banner (see notices.ts) — the
7
7
  * pre-launch terminal is covered by the TUI within a second, so a line printed
8
8
  * there is never read. Bounded by a short timeout and silent on every failure
@@ -10,7 +10,8 @@
10
10
  * on the registry. The registry's answer is cached for a day, so most starts
11
11
  * make no request at all. `CCC_NO_UPDATE_CHECK=1` (or the older
12
12
  * `CCC_SKIP_UPDATE_CHECK=1`), or `"updateCheck": false` in
13
- * ~/.claude-code-infinite/config.json, disables the check entirely.
13
+ * ~/.claude-code-infinite/config.json, disables the check entirely (and
14
+ * with it auto-update).
14
15
  */
15
16
  import * as fs from "node:fs";
16
17
  import * as path from "node:path";