@tormentalabs/claude-code-wire-compat 0.1.0-rc.10

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 (85) hide show
  1. package/CHANGELOG.md +312 -0
  2. package/LICENSE +674 -0
  3. package/NOTICE +16 -0
  4. package/README.md +39 -0
  5. package/dist/anti-verbosity.d.ts +58 -0
  6. package/dist/anti-verbosity.d.ts.map +1 -0
  7. package/dist/anti-verbosity.js +174 -0
  8. package/dist/anti-verbosity.js.map +1 -0
  9. package/dist/beta-registry.d.ts +119 -0
  10. package/dist/beta-registry.d.ts.map +1 -0
  11. package/dist/beta-registry.js +125 -0
  12. package/dist/beta-registry.js.map +1 -0
  13. package/dist/betas.d.ts +11 -0
  14. package/dist/betas.d.ts.map +1 -0
  15. package/dist/betas.js +68 -0
  16. package/dist/betas.js.map +1 -0
  17. package/dist/build-request.d.ts +24 -0
  18. package/dist/build-request.d.ts.map +1 -0
  19. package/dist/build-request.js +1008 -0
  20. package/dist/build-request.js.map +1 -0
  21. package/dist/contracts.d.ts +717 -0
  22. package/dist/contracts.d.ts.map +1 -0
  23. package/dist/contracts.js +36 -0
  24. package/dist/contracts.js.map +1 -0
  25. package/dist/count-tokens.d.ts +42 -0
  26. package/dist/count-tokens.d.ts.map +1 -0
  27. package/dist/count-tokens.js +61 -0
  28. package/dist/count-tokens.js.map +1 -0
  29. package/dist/fingerprint.d.ts +4 -0
  30. package/dist/fingerprint.d.ts.map +1 -0
  31. package/dist/fingerprint.js +59 -0
  32. package/dist/fingerprint.js.map +1 -0
  33. package/dist/headers.d.ts +4 -0
  34. package/dist/headers.d.ts.map +1 -0
  35. package/dist/headers.js +255 -0
  36. package/dist/headers.js.map +1 -0
  37. package/dist/index.d.ts +17 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +6 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/metadata.d.ts +4 -0
  42. package/dist/metadata.d.ts.map +1 -0
  43. package/dist/metadata.js +192 -0
  44. package/dist/metadata.js.map +1 -0
  45. package/dist/model-capabilities.d.ts +103 -0
  46. package/dist/model-capabilities.d.ts.map +1 -0
  47. package/dist/model-capabilities.js +263 -0
  48. package/dist/model-capabilities.js.map +1 -0
  49. package/dist/model-identity.d.ts +11 -0
  50. package/dist/model-identity.d.ts.map +1 -0
  51. package/dist/model-identity.js +64 -0
  52. package/dist/model-identity.js.map +1 -0
  53. package/dist/models.d.ts +9 -0
  54. package/dist/models.d.ts.map +1 -0
  55. package/dist/models.js +25 -0
  56. package/dist/models.js.map +1 -0
  57. package/dist/profiles/claude-code-2.1.195.d.ts +3 -0
  58. package/dist/profiles/claude-code-2.1.195.d.ts.map +1 -0
  59. package/dist/profiles/claude-code-2.1.195.js +150 -0
  60. package/dist/profiles/claude-code-2.1.195.js.map +1 -0
  61. package/dist/redaction.d.ts +16 -0
  62. package/dist/redaction.d.ts.map +1 -0
  63. package/dist/redaction.js +364 -0
  64. package/dist/redaction.js.map +1 -0
  65. package/dist/request-body.d.ts +19 -0
  66. package/dist/request-body.d.ts.map +1 -0
  67. package/dist/request-body.js +1658 -0
  68. package/dist/request-body.js.map +1 -0
  69. package/dist/sha256.d.ts +9 -0
  70. package/dist/sha256.d.ts.map +1 -0
  71. package/dist/sha256.js +104 -0
  72. package/dist/sha256.js.map +1 -0
  73. package/dist/system-prompt.d.ts +4 -0
  74. package/dist/system-prompt.d.ts.map +1 -0
  75. package/dist/system-prompt.js +157 -0
  76. package/dist/system-prompt.js.map +1 -0
  77. package/dist/thinking.d.ts +91 -0
  78. package/dist/thinking.d.ts.map +1 -0
  79. package/dist/thinking.js +132 -0
  80. package/dist/thinking.js.map +1 -0
  81. package/dist/unicode.d.ts +10 -0
  82. package/dist/unicode.d.ts.map +1 -0
  83. package/dist/unicode.js +19 -0
  84. package/dist/unicode.js.map +1 -0
  85. package/package.json +72 -0
@@ -0,0 +1,132 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ /**
3
+ * Per-model thinking budget limits, ported from upstream `Xxe` at byte offset
4
+ * 227378240. Keyed on the NORMALISED model id, and deliberately independent of
5
+ * the catalogue: `claude-3-opus`, `claude-3-sonnet` and `claude-3-haiku` are
6
+ * reachable through the normaliser but have no catalogue entry.
7
+ *
8
+ * Upstream additionally consults `Vkd` and `bvi`, but both adjust only
9
+ * `default`, never `upperLimit`, and `bvi` sits behind `_vi()` which returns
10
+ * false. Only `upperLimit` is consumed here, so neither is modelled.
11
+ */
12
+ export function thinkingBudgetLimits(normalizedId) {
13
+ if (normalizedId === "claude-fable-5" || normalizedId === "claude-mythos-5") {
14
+ return { default: 64000, upperLimit: 128000 };
15
+ }
16
+ if (normalizedId === "claude-opus-4-8") {
17
+ return { default: 64000, upperLimit: 128000 };
18
+ }
19
+ if (normalizedId === "claude-opus-4-7") {
20
+ return { default: 64000, upperLimit: 128000 };
21
+ }
22
+ if (normalizedId === "claude-sonnet-4-6") {
23
+ return { default: 32000, upperLimit: 128000 };
24
+ }
25
+ if (normalizedId === "claude-opus-4-6") {
26
+ return { default: 64000, upperLimit: 128000 };
27
+ }
28
+ if (normalizedId === "claude-opus-4-5" ||
29
+ normalizedId === "claude-sonnet-4-0" ||
30
+ normalizedId === "claude-sonnet-4-5" ||
31
+ normalizedId === "claude-haiku-4-5") {
32
+ return { default: 32000, upperLimit: 64000 };
33
+ }
34
+ if (normalizedId === "claude-opus-4-1" ||
35
+ normalizedId === "claude-opus-4-0") {
36
+ return { default: 32000, upperLimit: 32000 };
37
+ }
38
+ if (normalizedId === "claude-3-opus") {
39
+ return { default: 4096, upperLimit: 4096 };
40
+ }
41
+ if (normalizedId === "claude-3-sonnet") {
42
+ return { default: 8192, upperLimit: 8192 };
43
+ }
44
+ if (normalizedId === "claude-3-haiku") {
45
+ return { default: 4096, upperLimit: 4096 };
46
+ }
47
+ if (normalizedId === "claude-3-5-sonnet" ||
48
+ normalizedId === "claude-3-5-haiku") {
49
+ return { default: 8192, upperLimit: 8192 };
50
+ }
51
+ if (normalizedId === "claude-3-7-sonnet") {
52
+ return { default: 32000, upperLimit: 64000 };
53
+ }
54
+ return { default: 32000, upperLimit: 128000 };
55
+ }
56
+ /**
57
+ * Upstream `Yn = nr && CM() && QOt(u) ? n.display : void 0`, combined with the
58
+ * `if (Xn && Yn)` guard on the beta splice.
59
+ *
60
+ * This answers the splice question on its own, without consulting whether a
61
+ * `thinking` object was actually emitted, because the two are equivalent: a true
62
+ * result requires `type !== "disabled"` and `capabilities.thinking`, and those
63
+ * two conditions are exactly what drives `resolveThinking` into one of its two
64
+ * emitting branches. Upstream's `Xn` is therefore always set whenever `Yn` is.
65
+ *
66
+ * Deliberately tolerant of unvalidated input so that request assembly can ask
67
+ * this question before the body validator has run. Anything malformed answers
68
+ * false here and is rejected later by `buildCanonicalBody`.
69
+ */
70
+ export function isThinkingDisplayActive(request, capabilities, betaPolicy) {
71
+ if (request === null || typeof request !== "object")
72
+ return false;
73
+ const record = request;
74
+ if (record["type"] === "disabled")
75
+ return false;
76
+ const display = record["display"];
77
+ if (display !== "summarized" && display !== "omitted")
78
+ return false;
79
+ return (capabilities.thinking &&
80
+ capabilities.interleavedThinking &&
81
+ betaPolicy.experimentalBetasEnabled);
82
+ }
83
+ /**
84
+ * Resolves the caller's thinking request into the object the genuine client
85
+ * would put on the wire.
86
+ *
87
+ * Key order is load-bearing. Upstream emits `{budget_tokens, type, display}`
88
+ * for the enabled branch — `budget_tokens` FIRST — and `{type, display}` for
89
+ * adaptive. Serialised bodies are compared byte for byte, so the insertion
90
+ * order below must not be rearranged.
91
+ */
92
+ export function resolveThinking(request, normalizedId, capabilities, betaPolicy, maxTokens) {
93
+ // Upstream `nr = n.type !== "disabled" && !CLAUDE_CODE_DISABLE_THINKING`.
94
+ const requestActive = request !== undefined && request.type !== "disabled";
95
+ const displayActive = isThinkingDisplayActive(request, capabilities, betaPolicy);
96
+ const display = displayActive ? request?.display : undefined;
97
+ let emitted;
98
+ if (requestActive && capabilities.thinking) {
99
+ if (capabilities.adaptiveThinking) {
100
+ emitted = { type: "adaptive" };
101
+ if (display !== undefined)
102
+ emitted["display"] = display;
103
+ }
104
+ else {
105
+ // Upstream: `let Tr = wvi(u)` — the model's upper limit minus one —
106
+ // overridden by the caller's budget when supplied, then clamped by
107
+ // `Tr = Math.min(Fi - 1, Tr)` where `Fi` is the emitted `max_tokens`.
108
+ const requested = request.budgetTokens ??
109
+ thinkingBudgetLimits(normalizedId).upperLimit - 1;
110
+ emitted = { budget_tokens: Math.min(maxTokens - 1, requested) };
111
+ emitted["type"] = "enabled";
112
+ if (display !== undefined)
113
+ emitted["display"] = display;
114
+ }
115
+ }
116
+ else if (request?.type === "disabled" &&
117
+ capabilities.thinking &&
118
+ !capabilities.rejectsDisabledThinking) {
119
+ emitted = { type: "disabled" };
120
+ }
121
+ // Upstream `Jr = Xn?.type === "enabled" || Xn?.type === "adaptive"
122
+ // || Xn === void 0 && U4e(u)`.
123
+ const extendedThinkingActive = emitted?.["type"] === "enabled" ||
124
+ emitted?.["type"] === "adaptive" ||
125
+ (emitted === undefined && capabilities.rejectsDisabledThinking);
126
+ return Object.freeze({
127
+ emitted: emitted === undefined ? undefined : Object.freeze(emitted),
128
+ requestActive,
129
+ extendedThinkingActive,
130
+ });
131
+ }
132
+ //# sourceMappingURL=thinking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinking.js","sourceRoot":"","sources":["../src/thinking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type SurrogateClassification = "notSurrogate" | "surrogatePair" | "loneSurrogate";
2
+ /**
3
+ * Classifies the UTF-16 code unit at `index`.
4
+ *
5
+ * A trailing high surrogate makes charCodeAt(index + 1) return NaN, and every
6
+ * relational comparison against NaN is false, so the low-surrogate test must be
7
+ * a negated in-range test rather than an out-of-range test.
8
+ */
9
+ export declare function classifySurrogateAt(value: string, index: number): SurrogateClassification;
10
+ //# sourceMappingURL=unicode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unicode.d.ts","sourceRoot":"","sources":["../src/unicode.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,uBAAuB,GACjC,cAAc,GAAG,eAAe,GAAG,eAAe,CAAC;AAErD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,uBAAuB,CAQzB"}
@@ -0,0 +1,19 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ /**
3
+ * Classifies the UTF-16 code unit at `index`.
4
+ *
5
+ * A trailing high surrogate makes charCodeAt(index + 1) return NaN, and every
6
+ * relational comparison against NaN is false, so the low-surrogate test must be
7
+ * a negated in-range test rather than an out-of-range test.
8
+ */
9
+ export function classifySurrogateAt(value, index) {
10
+ const unit = value.charCodeAt(index);
11
+ if (unit >= 0xd800 && unit <= 0xdbff) {
12
+ const next = value.charCodeAt(index + 1);
13
+ return next >= 0xdc00 && next <= 0xdfff ? "surrogatePair" : "loneSurrogate";
14
+ }
15
+ if (unit >= 0xdc00 && unit <= 0xdfff)
16
+ return "loneSurrogate";
17
+ return "notSurrogate";
18
+ }
19
+ //# sourceMappingURL=unicode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unicode.js","sourceRoot":"","sources":["../src/unicode.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAK5C;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,KAAa;IAEb,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACzC,OAAO,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC;IAC9E,CAAC;IACD,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM;QAAE,OAAO,eAAe,CAAC;IAC7D,OAAO,cAAc,CAAC;AACxB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@tormentalabs/claude-code-wire-compat",
3
+ "version": "0.1.0-rc.10",
4
+ "description": "Runtime-neutral Claude Code Messages wire compatibility primitives",
5
+ "type": "module",
6
+ "private": false,
7
+ "license": "GPL-3.0-or-later",
8
+ "author": "claude-code-wire-compat contributors",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/marco-jardim/claude-code-wire-compat.git"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/marco-jardim/claude-code-wire-compat/issues"
15
+ },
16
+ "homepage": "https://github.com/marco-jardim/claude-code-wire-compat#readme",
17
+ "engines": {
18
+ "node": ">=20"
19
+ },
20
+ "files": [
21
+ "dist",
22
+ "README.md",
23
+ "LICENSE",
24
+ "NOTICE",
25
+ "CHANGELOG.md"
26
+ ],
27
+ "exports": {
28
+ ".": {
29
+ "types": "./dist/index.d.ts",
30
+ "import": "./dist/index.js"
31
+ },
32
+ "./profiles/claude-code-2.1.195": {
33
+ "types": "./dist/profiles/claude-code-2.1.195.d.ts",
34
+ "import": "./dist/profiles/claude-code-2.1.195.js"
35
+ }
36
+ },
37
+ "types": "./dist/index.d.ts",
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "sideEffects": false,
42
+ "scripts": {
43
+ "build": "tsc -p tsconfig.json",
44
+ "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.types.json --noEmit",
45
+ "lint": "eslint .",
46
+ "format:check": "prettier --check .",
47
+ "test": "vitest run",
48
+ "test:coverage": "vitest run --coverage",
49
+ "test:mutation": "stryker run",
50
+ "test:pack": "node scripts/verify-packed-consumers.mjs",
51
+ "pack:check": "npm pack --dry-run && publint && attw --pack . --profile esm-only",
52
+ "drift:check": "node scripts/verify-drift.mjs"
53
+ },
54
+ "devDependencies": {
55
+ "@arethetypeswrong/cli": "0.18.5",
56
+ "@eslint/js": "10.0.1",
57
+ "@stryker-mutator/core": "9.6.1",
58
+ "@stryker-mutator/vitest-runner": "9.6.1",
59
+ "@types/node": "26.1.1",
60
+ "@vitest/coverage-v8": "4.1.10",
61
+ "eslint": "10.8.0",
62
+ "fast-check": "4.9.0",
63
+ "globals": "17.7.0",
64
+ "license-checker-rseidelsohn": "5.0.1",
65
+ "miniflare": "4.20260722.0",
66
+ "prettier": "3.9.6",
67
+ "publint": "0.3.22",
68
+ "typescript": "6.0.3",
69
+ "typescript-eslint": "8.65.0",
70
+ "vitest": "4.1.10"
71
+ }
72
+ }