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
@@ -16,8 +16,33 @@
16
16
  import { createHash } from "node:crypto";
17
17
  import https from "node:https";
18
18
  import { approxTokensFromBytes } from "./reqlog.js";
19
- /** Bound on a count call: past it the caller keeps its estimate. */
19
+ /**
20
+ * A request's counting allowance: past it the caller keeps its estimate.
21
+ * Measured 2026-10-15 (reports/2026-10-15-count-tokens-latency.md): latency is
22
+ * upload-bound, ~0.2 s plus body bytes at ~12 MB/s on a fast uplink (27 MB in
23
+ * ~2.5 s, text or images alike), so a flat 3 s timed out on the 17-27 MB
24
+ * image-heavy bodies that most needed a count. The allowance is 3 s plus 1 ms
25
+ * per kB (a 1 MB/s, 8 Mbit/s uplink), capped at 30 s. It only binds when the
26
+ * count is slow: a fast count returns as soon as it is done.
27
+ */
20
28
  export const COUNT_TOKENS_TIMEOUT_MS = 3_000;
29
+ /**
30
+ * Less deadline than this left is none: no count completes that fast, and a
31
+ * timer can fire a millisecond before Date.now() says it is due (Node 20), so
32
+ * a timed-out attempt would otherwise leave a sliver for a pointless second one.
33
+ */
34
+ const MIN_COUNT_ATTEMPT_MS = 5;
35
+ /** Upload rate the allowance still covers, in bytes per ms (1 MB/s). */
36
+ export const COUNT_UPLOAD_BYTES_PER_MS = 1_000;
37
+ /** Most a request waits on counting, however large its bodies. */
38
+ export const COUNT_DEADLINE_MAX_MS = 30_000;
39
+ /**
40
+ * Anthropic's request size limit, the same on Messages and Count Tokens:
41
+ * 67,108,864 bytes (64 MiB) is accepted, one byte more is answered 413
42
+ * request_too_large from Content-Length alone (measured 2026-10-15). A body
43
+ * over it cannot be sent natively at all, so it is never counted.
44
+ */
45
+ export const ANTHROPIC_MAX_REQUEST_BYTES = 64 * 1024 * 1024;
21
46
  const MAX_COUNT_RESPONSE_BYTES = 64 * 1024;
22
47
  const MAX_COUNT_COOLDOWNS = 128;
23
48
  const COUNT_COOLDOWN_MS = 60_000;
@@ -43,6 +68,15 @@ const COUNTABLE_FIELDS = [
43
68
  "context_management", "output_config", "output_format", "cache_control",
44
69
  "mcp_servers", "speed", "compaction",
45
70
  ];
71
+ /** The counting allowance for a body of `bytes` (see COUNT_TOKENS_TIMEOUT_MS). */
72
+ export function countDeadlineMs(bytes) {
73
+ const extra = Number.isFinite(bytes) && bytes > 0 ? Math.ceil(bytes / COUNT_UPLOAD_BYTES_PER_MS) : 0;
74
+ return Math.min(COUNT_DEADLINE_MAX_MS, COUNT_TOKENS_TIMEOUT_MS + extra);
75
+ }
76
+ /** Whether Anthropic rejects a body of `bytes` as too large (413), unseen. */
77
+ export function exceedsRequestLimit(bytes) {
78
+ return bytes > ANTHROPIC_MAX_REQUEST_BYTES;
79
+ }
46
80
  /** Whether a sample's tokens-per-byte ratio can describe a request body. */
47
81
  export function plausibleSample(sample) {
48
82
  if (!sample || !(sample.tokens > 0) || !(sample.forwardedBytes > 0))
@@ -100,12 +134,18 @@ export class CountTokensCooldowns {
100
134
  this.entries.set(key, now + cooldownDuration(result.retryAfter, now));
101
135
  }
102
136
  }
103
- /** Exact results belong to this request and body, never a shared sample slot. */
137
+ /**
138
+ * Exact results belong to this request and body, never a shared sample slot.
139
+ * All counts of one request share one allowance: the largest body's
140
+ * (countDeadlineMs), spent only while a count is in flight, so time between
141
+ * counts (a compression before the replacement is counted) is not charged.
142
+ */
104
143
  export function createCountTokensSession(options, cooldowns = new CountTokensCooldowns()) {
105
144
  const pending = new Map();
106
145
  const completed = new Map();
107
146
  const account = countAccountKey(options);
108
- let deadline;
147
+ const clock = new CountingClock();
148
+ let allowance = 0;
109
149
  return {
110
150
  peek: (body) => completed.get(bodyHash(body)),
111
151
  count: (body) => {
@@ -113,22 +153,19 @@ export function createCountTokensSession(options, cooldowns = new CountTokensCoo
113
153
  const existing = pending.get(key);
114
154
  if (existing)
115
155
  return existing;
116
- deadline ??= Date.now() + (options.timeoutMs ?? COUNT_TOKENS_TIMEOUT_MS);
117
- const remaining = deadline - Date.now();
156
+ const tooLarge = exceedsRequestLimit(body.length);
157
+ if (!tooLarge)
158
+ allowance = Math.max(allowance, requestAllowance(options, body.length));
159
+ const remaining = allowance - clock.spent();
118
160
  const skipped = options.signal?.aborted ? "aborted"
119
- : cooldowns.active(account) ? "cooldown" : remaining <= 0 ? "deadline" : undefined;
161
+ : tooLarge ? "too-large" : cooldowns.active(account) ? "cooldown"
162
+ : remaining < MIN_COUNT_ATTEMPT_MS ? "deadline" : undefined;
120
163
  const attempt = skipped
121
- ? Promise.resolve({ ms: 0, outcome: skipped })
122
- : countUpstreamTokens({ ...options, body, timeoutMs: remaining }).then((result) => {
123
- cooldowns.record(account, result);
124
- if (result.outcome !== "invalid-request" && result.outcome !== "deadline") {
125
- try {
126
- options.onAttempt?.(result);
127
- }
128
- catch { /* diagnostics cannot break forwarding */ }
129
- }
130
- return result;
131
- });
164
+ ? Promise.resolve({ ms: 0, outcome: skipped, bytes: body.length })
165
+ : clock.track(() => countUpstreamTokens({ ...options, body, timeoutMs: remaining }))
166
+ .then((result) => recordAttempt(options, cooldowns, account, result));
167
+ if (skipped === "too-large")
168
+ attempt.then((result) => notifyAttempt(options, result));
132
169
  const saved = attempt.then((result) => { completed.set(key, result); return result; });
133
170
  pending.set(key, saved);
134
171
  return saved;
@@ -138,12 +175,16 @@ export function createCountTokensSession(options, cooldowns = new CountTokensCoo
138
175
  /** All failures resolve without tokens, including synchronous request errors. */
139
176
  export function countUpstreamTokens(args) {
140
177
  const started = Date.now();
178
+ const timeoutMs = args.timeoutMs ?? COUNT_TOKENS_TIMEOUT_MS;
141
179
  const payload = countTokensBody(args.body);
142
180
  if (!payload || args.signal?.aborted)
143
181
  return Promise.resolve({
144
182
  ms: 0, outcome: args.signal?.aborted ? "aborted" : "invalid-request",
145
183
  });
146
- const remaining = (args.timeoutMs ?? COUNT_TOKENS_TIMEOUT_MS) - (Date.now() - started);
184
+ const bytes = payload.length;
185
+ if (exceedsRequestLimit(bytes))
186
+ return Promise.resolve({ ms: 0, outcome: "too-large", bytes });
187
+ const remaining = timeoutMs - (Date.now() - started);
147
188
  if (remaining <= 0)
148
189
  return Promise.resolve({ ms: Date.now() - started, outcome: "deadline" });
149
190
  return new Promise((resolve) => {
@@ -156,7 +197,7 @@ export function countUpstreamTokens(args) {
156
197
  done = true;
157
198
  clearTimeout(timer);
158
199
  args.signal?.removeEventListener("abort", abort);
159
- resolve({ ...result, ms: Date.now() - started });
200
+ resolve({ ...result, ms: Date.now() - started, bytes, timeoutMs: remaining });
160
201
  request?.destroy();
161
202
  };
162
203
  const abort = () => finish({ outcome: "aborted" });
@@ -274,4 +315,38 @@ function cooldownDuration(retryAfter, now) {
274
315
  return Number.isFinite(duration)
275
316
  ? Math.max(1000, Math.min(COUNT_COOLDOWN_MS, duration)) : COUNT_COOLDOWN_MS;
276
317
  }
318
+ function requestAllowance(options, bytes) {
319
+ return options.timeoutMs ?? (options.deadlineMs ?? countDeadlineMs)(bytes);
320
+ }
321
+ function recordAttempt(options, cooldowns, account, result) {
322
+ cooldowns.record(account, result);
323
+ if (result.outcome !== "invalid-request" && result.outcome !== "deadline") {
324
+ notifyAttempt(options, result);
325
+ }
326
+ return result;
327
+ }
328
+ function notifyAttempt(options, result) {
329
+ try {
330
+ options.onAttempt?.(result);
331
+ }
332
+ catch { /* diagnostics cannot break forwarding */ }
333
+ }
334
+ /** Wall time with at least one count in flight: what a request's allowance is spent on. */
335
+ class CountingClock {
336
+ inFlight = 0;
337
+ since = 0;
338
+ total = 0;
339
+ spent() {
340
+ return this.total + (this.inFlight > 0 ? Date.now() - this.since : 0);
341
+ }
342
+ /** Starts the clock before `start` runs: preparing the count body is counting time too. */
343
+ track(start) {
344
+ if (this.inFlight++ === 0)
345
+ this.since = Date.now();
346
+ return start().finally(() => {
347
+ if (--this.inFlight === 0)
348
+ this.total += Date.now() - this.since;
349
+ });
350
+ }
351
+ }
277
352
  //# sourceMappingURL=count-tokens.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"count-tokens.js","sourceRoot":"","sources":["../src/count-tokens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"count-tokens.js","sourceRoot":"","sources":["../src/count-tokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Allowlist for client diagnostics (polychat plans/2026-10-16_PLAN_ccc_client_diagnostics.md).
3
+ *
4
+ * Every event is rebuilt here from named fields only, each checked against an enum, a tight
5
+ * pattern or an integer range; anything else is dropped before it is queued. The server
6
+ * (polychat/ccc_diagnostics.py) enforces the same list again. There is no free-text field:
7
+ * errors travel as codes, because a Node error message can quote its input (JSON.parse
8
+ * does) and so carry conversation content.
9
+ */
10
+ export declare const DIAGNOSTICS_SCHEMA = 1;
11
+ type Validator = (value: unknown) => unknown;
12
+ /**
13
+ * Error codes and class names are fixed vocabularies; anything else is sent as "other"
14
+ * (errnoName / errorClassName). A shape check would let a project or customer name through.
15
+ */
16
+ export declare const ERRNOS: readonly ["EACCES", "EPERM", "ENOENT", "ENOTDIR", "EISDIR", "EEXIST", "ENOSPC", "EROFS", "EMFILE", "EBUSY", "ECONNREFUSED", "ECONNRESET", "ECONNABORTED", "ETIMEDOUT", "ENOTFOUND", "EAI_AGAIN", "EHOSTUNREACH", "ENETUNREACH", "EPIPE", "EADDRINUSE", "ERR_INVALID_URL", "UND_ERR_CONNECT_TIMEOUT", "UND_ERR_SOCKET", "UND_ERR_HEADERS_TIMEOUT", "CERT_HAS_EXPIRED", "UNABLE_TO_VERIFY_LEAF_SIGNATURE", "SELF_SIGNED_CERT_IN_CHAIN", "DEPTH_ZERO_SELF_SIGNED_CERT", "ERR_TLS_CERT_ALTNAME_INVALID", "other"];
17
+ export declare const SIGNALS: readonly ["SIGINT", "SIGTERM", "SIGKILL", "SIGHUP", "SIGQUIT", "SIGABRT", "SIGSEGV", "SIGBUS", "SIGPIPE", "SIGUSR1", "SIGUSR2", "SIGTSTP", "SIGILL", "SIGFPE", "SIGTRAP", "SIGSYS", "SIGXCPU", "SIGXFSZ", "SIGALRM", "other"];
18
+ /** A signal name from the fixed list, else "other"; undefined when there is none. */
19
+ export declare function signalName(value: unknown): string | undefined;
20
+ export declare const ERROR_NAMES: readonly ["Error", "TypeError", "RangeError", "SyntaxError", "ReferenceError", "AbortError", "TimeoutError", "SystemError", "other"];
21
+ /** A Node errno code from the fixed list, else "other"; undefined when there is none. */
22
+ export declare function errnoName(value: unknown): string | undefined;
23
+ /** An error class name from the fixed list, else "other"; undefined when there is none. */
24
+ export declare function errorClassName(value: unknown): string | undefined;
25
+ export declare const ERROR_CODES: readonly ["startup_failed", "spawn_failed", "proxy_start_failed", "config_write_failed", "status_probe_failed", "update_check_failed", "plugin_failed", "mcp_config_failed"];
26
+ export type DiagnosticsErrorCode = (typeof ERROR_CODES)[number];
27
+ export declare const INSTALL_METHODS: readonly ["npm-global", "npm-link", "git-checkout", "npx", "local", "pnpm", "yarn", "bun", "volta", "not-writable", "root", "unsupported-platform", "unknown"];
28
+ export declare const TERMINALS: readonly ["Apple_Terminal", "iTerm.app", "vscode", "WezTerm", "ghostty", "WarpTerminal", "tmux", "Hyper", "Tabby", "alacritty", "kitty", "cursor", "zed", "JetBrains-JediTerm", "rio", "Windows_Terminal", "mintty", "konsole", "gnome-terminal", "none", "other"];
29
+ export declare const TURN_TYPES: readonly ["first-user", "tool", "tool-memory", "tool-prefix", "tool-recompressed", "followup-compressed", "followup-prefix", "followup-noop", "followup-empty-memory", "followup-no-flatten", "followup-degraded", "fork-memory", "side-request", "foreign", "followup-client-closed", "unparseable", "other"];
30
+ export type DiagnosticsFields = Record<string, string | number | boolean>;
31
+ export interface DiagnosticsEvent extends DiagnosticsFields {
32
+ name: string;
33
+ t: number;
34
+ }
35
+ /** The event, rebuilt from allowed fields only; null when its name is not allowed. */
36
+ export declare function sanitizeEvent(name: string, fields: Record<string, unknown>, t: number): DiagnosticsEvent | null;
37
+ export declare function sanitizeContext(fields: Record<string, unknown>): DiagnosticsFields;
38
+ export declare function sanitizeFields(fields: Record<string, unknown>, allowed: Record<string, Validator>): DiagnosticsFields;
39
+ /** `2.1.301.241` → `2.1.301`; anything not version-shaped → undefined. */
40
+ export declare function threePartVersion(raw: unknown): string | undefined;
41
+ export declare const CONTEXT_FIELDS: Record<string, Validator>;
42
+ export declare const EVENT_FIELDS: Record<string, Record<string, Validator>>;
43
+ export {};
44
+ //# sourceMappingURL=diagnostics-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics-schema.d.ts","sourceRoot":"","sources":["../src/diagnostics-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;AAM7C;;;GAGG;AACH,eAAO,MAAM,MAAM,+eAOT,CAAC;AACX,eAAO,MAAM,OAAO,+NAIV,CAAC;AAEX,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAG7D;AAED,eAAO,MAAM,WAAW,sIAGd,CAAC;AAEX,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAG5D;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGjE;AAED,eAAO,MAAM,WAAW,8KAGd,CAAC;AACX,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,eAAO,MAAM,eAAe,gKAGlB,CAAC;AAEX,eAAO,MAAM,SAAS,oQAIZ,CAAC;AAEX,eAAO,MAAM,UAAU,gTAKb,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAC1E,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;CACX;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAClF,gBAAgB,GAAG,IAAI,CAM1B;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,CAElF;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAClE,iBAAiB,CAUnB;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAIjE;AAyBD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAepD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAuBlE,CAAC"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Allowlist for client diagnostics (polychat plans/2026-10-16_PLAN_ccc_client_diagnostics.md).
3
+ *
4
+ * Every event is rebuilt here from named fields only, each checked against an enum, a tight
5
+ * pattern or an integer range; anything else is dropped before it is queued. The server
6
+ * (polychat/ccc_diagnostics.py) enforces the same list again. There is no free-text field:
7
+ * errors travel as codes, because a Node error message can quote its input (JSON.parse
8
+ * does) and so carry conversation content.
9
+ */
10
+ export const DIAGNOSTICS_SCHEMA = 1;
11
+ /** A validator's "not allowed" answer. */
12
+ const DROP = Symbol("drop");
13
+ /** Three parts only: a fourth (Claude Code's build suffix) would let an IPv4 address through. */
14
+ const VERSION_RE = /^\d{1,4}\.\d{1,4}\.\d{1,6}(?:-(?:alpha|beta|rc|next|canary)(?:\.\d{1,4})?)?$/;
15
+ /**
16
+ * Error codes and class names are fixed vocabularies; anything else is sent as "other"
17
+ * (errnoName / errorClassName). A shape check would let a project or customer name through.
18
+ */
19
+ export const ERRNOS = [
20
+ "EACCES", "EPERM", "ENOENT", "ENOTDIR", "EISDIR", "EEXIST", "ENOSPC", "EROFS", "EMFILE",
21
+ "EBUSY", "ECONNREFUSED", "ECONNRESET", "ECONNABORTED", "ETIMEDOUT", "ENOTFOUND",
22
+ "EAI_AGAIN", "EHOSTUNREACH", "ENETUNREACH", "EPIPE", "EADDRINUSE", "ERR_INVALID_URL",
23
+ "UND_ERR_CONNECT_TIMEOUT", "UND_ERR_SOCKET", "UND_ERR_HEADERS_TIMEOUT", "CERT_HAS_EXPIRED",
24
+ "UNABLE_TO_VERIFY_LEAF_SIGNATURE", "SELF_SIGNED_CERT_IN_CHAIN",
25
+ "DEPTH_ZERO_SELF_SIGNED_CERT", "ERR_TLS_CERT_ALTNAME_INVALID", "other",
26
+ ];
27
+ export const SIGNALS = [
28
+ "SIGINT", "SIGTERM", "SIGKILL", "SIGHUP", "SIGQUIT", "SIGABRT", "SIGSEGV", "SIGBUS",
29
+ "SIGPIPE", "SIGUSR1", "SIGUSR2", "SIGTSTP", "SIGILL", "SIGFPE", "SIGTRAP", "SIGSYS",
30
+ "SIGXCPU", "SIGXFSZ", "SIGALRM", "other",
31
+ ];
32
+ /** A signal name from the fixed list, else "other"; undefined when there is none. */
33
+ export function signalName(value) {
34
+ if (typeof value !== "string")
35
+ return undefined;
36
+ return SIGNALS.includes(value) ? value : "other";
37
+ }
38
+ export const ERROR_NAMES = [
39
+ "Error", "TypeError", "RangeError", "SyntaxError", "ReferenceError", "AbortError",
40
+ "TimeoutError", "SystemError", "other",
41
+ ];
42
+ /** A Node errno code from the fixed list, else "other"; undefined when there is none. */
43
+ export function errnoName(value) {
44
+ if (typeof value !== "string")
45
+ return undefined;
46
+ return ERRNOS.includes(value) ? value : "other";
47
+ }
48
+ /** An error class name from the fixed list, else "other"; undefined when there is none. */
49
+ export function errorClassName(value) {
50
+ if (typeof value !== "string")
51
+ return undefined;
52
+ return ERROR_NAMES.includes(value) ? value : "other";
53
+ }
54
+ export const ERROR_CODES = [
55
+ "startup_failed", "spawn_failed", "proxy_start_failed", "config_write_failed",
56
+ "status_probe_failed", "update_check_failed", "plugin_failed", "mcp_config_failed",
57
+ ];
58
+ export const INSTALL_METHODS = [
59
+ "npm-global", "npm-link", "git-checkout", "npx", "local", "pnpm", "yarn", "bun", "volta",
60
+ "not-writable", "root", "unsupported-platform", "unknown",
61
+ ];
62
+ export const TERMINALS = [
63
+ "Apple_Terminal", "iTerm.app", "vscode", "WezTerm", "ghostty", "WarpTerminal", "tmux",
64
+ "Hyper", "Tabby", "alacritty", "kitty", "cursor", "zed", "JetBrains-JediTerm", "rio",
65
+ "Windows_Terminal", "mintty", "konsole", "gnome-terminal", "none", "other",
66
+ ];
67
+ export const TURN_TYPES = [
68
+ "first-user", "tool", "tool-memory", "tool-prefix", "tool-recompressed",
69
+ "followup-compressed", "followup-prefix", "followup-noop", "followup-empty-memory",
70
+ "followup-no-flatten", "followup-degraded", "fork-memory", "side-request", "foreign",
71
+ "followup-client-closed", "unparseable", "other",
72
+ ];
73
+ /** The event, rebuilt from allowed fields only; null when its name is not allowed. */
74
+ export function sanitizeEvent(name, fields, t) {
75
+ if (typeof name !== "string" || !Object.prototype.hasOwnProperty.call(EVENT_FIELDS, name)) {
76
+ return null;
77
+ }
78
+ const allowed = EVENT_FIELDS[name];
79
+ return { ...sanitizeFields(fields, allowed), name, t: Math.floor(t) };
80
+ }
81
+ export function sanitizeContext(fields) {
82
+ return sanitizeFields(fields, CONTEXT_FIELDS);
83
+ }
84
+ export function sanitizeFields(fields, allowed) {
85
+ const out = {};
86
+ for (const [key, check] of Object.entries(allowed)) {
87
+ if (!Object.prototype.hasOwnProperty.call(fields, key))
88
+ continue;
89
+ const value = check(fields[key]);
90
+ if (value !== DROP && value !== undefined && value !== null) {
91
+ out[key] = value;
92
+ }
93
+ }
94
+ return out;
95
+ }
96
+ /** `2.1.301.241` → `2.1.301`; anything not version-shaped → undefined. */
97
+ export function threePartVersion(raw) {
98
+ if (typeof raw !== "string")
99
+ return undefined;
100
+ const m = /^(\d{1,4}\.\d{1,4}\.\d{1,6})/.exec(raw.trim());
101
+ return m ? m[1] : undefined;
102
+ }
103
+ function oneOf(values) {
104
+ const set = new Set(values);
105
+ return (v) => (typeof v === "string" && set.has(v) ? v : DROP);
106
+ }
107
+ function matching(re, maxLength = 40) {
108
+ return (v) => (typeof v === "string" && v.length <= maxLength && re.test(v) ? v : DROP);
109
+ }
110
+ function integer(lo, hi) {
111
+ return (v) => {
112
+ if (typeof v !== "number" || !Number.isFinite(v))
113
+ return DROP;
114
+ return Math.max(lo, Math.min(hi, Math.round(v)));
115
+ };
116
+ }
117
+ const bool = (v) => (typeof v === "boolean" ? v : DROP);
118
+ const VERSION = matching(VERSION_RE);
119
+ const STATUS = integer(0, 999);
120
+ const MS = integer(0, 24 * 3600 * 1000);
121
+ const KB = integer(0, 1_000_000);
122
+ export const CONTEXT_FIELDS = {
123
+ ccc_version: VERSION,
124
+ cc_version: VERSION,
125
+ node: VERSION,
126
+ install_method: oneOf(INSTALL_METHODS),
127
+ os: oneOf(["darwin", "linux", "win32", "freebsd", "openbsd", "sunos", "aix", "android",
128
+ "other"]),
129
+ os_release: matching(/^\d{1,4}(?:\.\d{1,6}){0,2}$/),
130
+ arch: oneOf(["arm64", "x64", "ia32", "arm", "ppc64", "s390x", "riscv64", "loong64",
131
+ "other"]),
132
+ terminal: oneOf(TERMINALS),
133
+ locale: matching(/^(?:[a-z]{2,3}(?:-[A-Z][a-z]{3})?(?:-(?:[A-Z]{2}|\d{3}))?|other)$/, 16),
134
+ wsl: bool,
135
+ interactive: bool,
136
+ mode: oneOf(["production", "staging", "local"]),
137
+ };
138
+ export const EVENT_FIELDS = {
139
+ first_run: {},
140
+ sign_in_prompt: {},
141
+ key_saved: {},
142
+ key_status: { result: oneOf(["ok", "invalid", "payment_required", "unknown"]), status: STATUS },
143
+ payment_gate: { choice: oneOf(["subscribe", "continue", "quit", "paid", "still_unpaid"]) },
144
+ session_start: { source: oneOf(["startup", "resume", "clear", "compact", "other"]) },
145
+ first_request: { status: STATUS, turn_type: oneOf(TURN_TYPES), ttfb_ms: MS, total_ms: MS,
146
+ request_kb: KB },
147
+ first_turn: { status: STATUS, turn_type: oneOf(TURN_TYPES), ttfb_ms: MS, total_ms: MS,
148
+ request_kb: KB },
149
+ upstream_error: { status: STATUS, turn_type: oneOf(TURN_TYPES), total_ms: MS,
150
+ request_kb: KB },
151
+ memtree_error: { status: STATUS, index_only: bool, ms: MS, request_kb: KB },
152
+ compress_timeout: { ms: MS, request_kb: KB },
153
+ refusal: { status: STATUS, input_ktokens: KB, budget_ktokens: KB, attempt: integer(0, 1000) },
154
+ paused_notice: { trigger: oneOf(["turn", "resume"]) },
155
+ update_hint: { latest: VERSION },
156
+ auto_update: { result: oneOf(["started", "locked", "not-planned", "spawn-failed", "skipped"]) },
157
+ claude_exit: { code: integer(-1000, 1000), signal: oneOf(SIGNALS) },
158
+ claude_missing: {},
159
+ error: { code: oneOf(ERROR_CODES), errno: oneOf(ERRNOS),
160
+ error_name: oneOf(ERROR_NAMES) },
161
+ };
162
+ //# sourceMappingURL=diagnostics-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics-schema.js","sourceRoot":"","sources":["../src/diagnostics-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Client diagnostics: why a session stalls, without ever sending its content
3
+ * (polychat plans/2026-10-16_PLAN_ccc_client_diagnostics.md).
4
+ *
5
+ * What is sent: ccc / Claude Code / Node versions, install method, OS and arch,
6
+ * terminal type, locale, and lifecycle and error events made of enums, status
7
+ * codes, sizes and timings (diagnostics-schema.ts is the allowlist; polychat
8
+ * enforces it again). Never prompts, paths, hostnames, usernames, env values,
9
+ * keys or error message text.
10
+ *
11
+ * Hard constraints, like reqlog.ts: never throw and never block. Events go into
12
+ * a capped in-memory queue; batches are POSTed fire-and-forget (every
13
+ * FLUSH_INTERVAL_MS, after the sign-in prompt, and at shutdown under a short
14
+ * bound); a failed POST drops its batch.
15
+ *
16
+ * Off with CCC_NO_DIAGNOSTICS=1, `"diagnostics": false` in the config,
17
+ * DO_NOT_TRACK=1, or Claude Code's DISABLE_TELEMETRY /
18
+ * CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC.
19
+ */
20
+ import { type DiagnosticsErrorCode, type DiagnosticsEvent } from "./diagnostics-schema.js";
21
+ import type { RequestLogSink, RequestRecord } from "./reqlog.js";
22
+ export declare const DIAGNOSTICS_PATH = "/v1/ccc/diagnostics";
23
+ export declare const INSTALL_ID_FILE = "install_id";
24
+ export declare const FLUSH_INTERVAL_MS = 30000;
25
+ export declare const MAX_QUEUE = 200;
26
+ export declare const BATCH_SIZE = 50;
27
+ export declare const SEND_TIMEOUT_MS = 3000;
28
+ export declare const SHUTDOWN_FLUSH_MS = 1000;
29
+ /** Repeats of one error kind (event + status) reported per process. */
30
+ export declare const MAX_REPEATS = 5;
31
+ /** What the proxy and the launcher need: record an event, never fail. */
32
+ export interface DiagnosticsRecorder {
33
+ record(name: string, fields?: Record<string, unknown>): void;
34
+ }
35
+ export interface DiagnosticsOptions {
36
+ baseUrl: string;
37
+ configDir: string;
38
+ clientName: string;
39
+ clientVersion: string;
40
+ env?: NodeJS.ProcessEnv;
41
+ config?: {
42
+ diagnostics?: boolean;
43
+ };
44
+ apiKey?: string;
45
+ fetchImpl?: typeof fetch;
46
+ now?: () => number;
47
+ flushIntervalMs?: number;
48
+ maxQueue?: number;
49
+ }
50
+ /** False when any opt-out is set. */
51
+ export declare function diagnosticsEnabled(env: NodeJS.ProcessEnv, config: {
52
+ diagnostics?: boolean;
53
+ }): boolean;
54
+ export declare class Diagnostics implements DiagnosticsRecorder {
55
+ private readonly opts;
56
+ readonly enabled: boolean;
57
+ /** True when this launch created the install id (the machine's first run). */
58
+ readonly firstRun: boolean;
59
+ /** Events dropped because the queue was full. */
60
+ dropped: number;
61
+ private readonly installId;
62
+ private readonly queue;
63
+ private readonly inFlight;
64
+ private readonly repeats;
65
+ private context;
66
+ private apiKey;
67
+ private timer;
68
+ constructor(opts: DiagnosticsOptions);
69
+ setApiKey(apiKey: string | undefined): void;
70
+ /** Add context fields (allowlisted; later values win). */
71
+ setContext(fields: Record<string, unknown>): void;
72
+ record(name: string, fields?: Record<string, unknown>): void;
73
+ /** Like record, but at most MAX_REPEATS times per `key` in this process. */
74
+ recordLimited(key: string, name: string, fields?: Record<string, unknown>): void;
75
+ /** Flush every FLUSH_INTERVAL_MS without keeping the process alive. */
76
+ start(): void;
77
+ /** Send what is queued now; fire-and-forget. */
78
+ flushNow(): void;
79
+ /** Shutdown: send what is queued and wait for in-flight sends, at most `timeoutMs`. */
80
+ flush(timeoutMs?: number): Promise<void>;
81
+ /** The exact JSON body a batch of these events is sent as (tests read it). */
82
+ batchBody(events: DiagnosticsEvent[]): string;
83
+ private send;
84
+ private headers;
85
+ private track;
86
+ private now;
87
+ }
88
+ /**
89
+ * Tee for the request log: every record still goes to `inner` unchanged, and a
90
+ * few named numeric/enum fields of some records become diagnostics events.
91
+ * Records are never copied: they can hold content (client.systemHead, URLs).
92
+ */
93
+ export declare class DiagnosticsRequestSink implements RequestLogSink {
94
+ private readonly inner;
95
+ private readonly diagnostics;
96
+ private firstRequest;
97
+ private firstTurn;
98
+ constructor(inner: RequestLogSink | undefined, diagnostics: Diagnostics);
99
+ log(record: RequestRecord): void;
100
+ private observe;
101
+ private observeMessages;
102
+ private observeMessageErrors;
103
+ private observeMemtree;
104
+ }
105
+ /** Record a launcher error by code only: Node's errno and class name, never its message. */
106
+ export declare function recordError(diagnostics: DiagnosticsRecorder, code: DiagnosticsErrorCode, err: unknown): void;
107
+ /** The install id, created (0600) on first use; null when it cannot be read or written. */
108
+ export declare function readOrCreateInstallId(configDir: string): {
109
+ id: string;
110
+ created: boolean;
111
+ } | null;
112
+ /** Environment context; every value is mapped onto an allowlisted shape. */
113
+ export declare function environmentContext(env: NodeJS.ProcessEnv, cccVersion: string): Record<string, unknown>;
114
+ export declare function terminalName(env: NodeJS.ProcessEnv): string;
115
+ export declare function localeName(): string;
116
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}