condukt 0.25.0 → 0.27.0

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 (96) hide show
  1. package/dist/runtimes/claude/bridge-cache.d.ts +58 -0
  2. package/dist/runtimes/claude/bridge-cache.d.ts.map +1 -0
  3. package/dist/runtimes/claude/bridge-cache.js +257 -0
  4. package/dist/runtimes/claude/bridge-cache.js.map +1 -0
  5. package/dist/runtimes/claude/claude-runtime.d.ts +30 -0
  6. package/dist/runtimes/claude/claude-runtime.d.ts.map +1 -0
  7. package/dist/runtimes/claude/claude-runtime.js +88 -0
  8. package/dist/runtimes/claude/claude-runtime.js.map +1 -0
  9. package/dist/runtimes/claude/claude-session.d.ts +154 -0
  10. package/dist/runtimes/claude/claude-session.d.ts.map +1 -0
  11. package/dist/runtimes/claude/claude-session.js +851 -0
  12. package/dist/runtimes/claude/claude-session.js.map +1 -0
  13. package/dist/runtimes/claude/config-mapper.d.ts +69 -0
  14. package/dist/runtimes/claude/config-mapper.d.ts.map +1 -0
  15. package/dist/runtimes/claude/config-mapper.js +458 -0
  16. package/dist/runtimes/claude/config-mapper.js.map +1 -0
  17. package/dist/runtimes/claude/epoch-store.d.ts +28 -0
  18. package/dist/runtimes/claude/epoch-store.d.ts.map +1 -0
  19. package/dist/runtimes/claude/epoch-store.js +199 -0
  20. package/dist/runtimes/claude/epoch-store.js.map +1 -0
  21. package/dist/runtimes/claude/fallback-runtime.d.ts +14 -0
  22. package/dist/runtimes/claude/fallback-runtime.d.ts.map +1 -0
  23. package/dist/runtimes/claude/fallback-runtime.js +64 -0
  24. package/dist/runtimes/claude/fallback-runtime.js.map +1 -0
  25. package/dist/runtimes/claude/index.d.ts +24 -0
  26. package/dist/runtimes/claude/index.d.ts.map +1 -0
  27. package/dist/runtimes/claude/index.js +61 -0
  28. package/dist/runtimes/claude/index.js.map +1 -0
  29. package/dist/runtimes/claude/message-mapper.d.ts +135 -0
  30. package/dist/runtimes/claude/message-mapper.d.ts.map +1 -0
  31. package/dist/runtimes/claude/message-mapper.js +504 -0
  32. package/dist/runtimes/claude/message-mapper.js.map +1 -0
  33. package/dist/runtimes/claude/one-shot.d.ts +48 -0
  34. package/dist/runtimes/claude/one-shot.d.ts.map +1 -0
  35. package/dist/runtimes/claude/one-shot.js +186 -0
  36. package/dist/runtimes/claude/one-shot.js.map +1 -0
  37. package/dist/runtimes/claude/protocol-bridge.d.ts +138 -0
  38. package/dist/runtimes/claude/protocol-bridge.d.ts.map +1 -0
  39. package/dist/runtimes/claude/protocol-bridge.js +1170 -0
  40. package/dist/runtimes/claude/protocol-bridge.js.map +1 -0
  41. package/dist/runtimes/claude/protocol-router.d.ts +113 -0
  42. package/dist/runtimes/claude/protocol-router.d.ts.map +1 -0
  43. package/dist/runtimes/claude/protocol-router.js +514 -0
  44. package/dist/runtimes/claude/protocol-router.js.map +1 -0
  45. package/dist/runtimes/claude/session-epoch.d.ts +156 -0
  46. package/dist/runtimes/claude/session-epoch.d.ts.map +1 -0
  47. package/dist/runtimes/claude/session-epoch.js +365 -0
  48. package/dist/runtimes/claude/session-epoch.js.map +1 -0
  49. package/dist/runtimes/claude/session-recovery.d.ts +78 -0
  50. package/dist/runtimes/claude/session-recovery.d.ts.map +1 -0
  51. package/dist/runtimes/claude/session-recovery.js +259 -0
  52. package/dist/runtimes/claude/session-recovery.js.map +1 -0
  53. package/dist/runtimes/claude/sse.d.ts +16 -0
  54. package/dist/runtimes/claude/sse.d.ts.map +1 -0
  55. package/dist/runtimes/claude/sse.js +46 -0
  56. package/dist/runtimes/claude/sse.js.map +1 -0
  57. package/dist/runtimes/claude/translate-chat.d.ts +106 -0
  58. package/dist/runtimes/claude/translate-chat.d.ts.map +1 -0
  59. package/dist/runtimes/claude/translate-chat.js +857 -0
  60. package/dist/runtimes/claude/translate-chat.js.map +1 -0
  61. package/dist/runtimes/claude/translate-responses.d.ts +76 -0
  62. package/dist/runtimes/claude/translate-responses.d.ts.map +1 -0
  63. package/dist/runtimes/claude/translate-responses.js +625 -0
  64. package/dist/runtimes/claude/translate-responses.js.map +1 -0
  65. package/dist/runtimes/claude/usage-ledger.d.ts +108 -0
  66. package/dist/runtimes/claude/usage-ledger.d.ts.map +1 -0
  67. package/dist/runtimes/claude/usage-ledger.js +189 -0
  68. package/dist/runtimes/claude/usage-ledger.js.map +1 -0
  69. package/dist/runtimes/copilot/copilot-backend.d.ts +8 -0
  70. package/dist/runtimes/copilot/copilot-backend.d.ts.map +1 -1
  71. package/dist/runtimes/copilot/sdk-backend.d.ts.map +1 -1
  72. package/dist/runtimes/copilot/sdk-backend.js +314 -135
  73. package/dist/runtimes/copilot/sdk-backend.js.map +1 -1
  74. package/dist/runtimes/mcp-env.d.ts +24 -0
  75. package/dist/runtimes/mcp-env.d.ts.map +1 -0
  76. package/dist/runtimes/mcp-env.js +81 -0
  77. package/dist/runtimes/mcp-env.js.map +1 -0
  78. package/dist/runtimes/mock/mock-runtime.d.ts +2 -2
  79. package/dist/runtimes/mock/mock-runtime.d.ts.map +1 -1
  80. package/dist/runtimes/mock/mock-runtime.js +38 -1
  81. package/dist/runtimes/mock/mock-runtime.js.map +1 -1
  82. package/dist/src/agent.d.ts.map +1 -1
  83. package/dist/src/agent.js +171 -3
  84. package/dist/src/agent.js.map +1 -1
  85. package/dist/src/index.d.ts +1 -1
  86. package/dist/src/index.d.ts.map +1 -1
  87. package/dist/src/index.js.map +1 -1
  88. package/dist/src/session-recovery-policy.d.ts +19 -0
  89. package/dist/src/session-recovery-policy.d.ts.map +1 -0
  90. package/dist/src/session-recovery-policy.js +43 -0
  91. package/dist/src/session-recovery-policy.js.map +1 -0
  92. package/dist/src/types.d.ts +118 -1
  93. package/dist/src/types.d.ts.map +1 -1
  94. package/dist/src/types.js +11 -1
  95. package/dist/src/types.js.map +1 -1
  96. package/package.json +20 -4
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Pure caching / id-stability predicates ported from the reference proxy.
3
+ * No I/O, no global state. Downgrade/exclusion sets are managed by the caller.
4
+ * (Session compaction epochs live in session-epoch.ts; usage notes feed them.)
5
+ */
6
+ export declare const GLM_EXCLUDE_PATTERN: RegExp;
7
+ export declare function shouldStampRetention(model: string): boolean;
8
+ export declare function cacheKeyFor(session: string): string | null;
9
+ /** Whole-segment exclusion (never substring false positives like "gilmour"). */
10
+ export declare function cacheKeyExcluded(model: string): boolean;
11
+ export declare function synthesizeToolId(name: string, index: number | string, args: unknown): string;
12
+ /** Deterministic JSON with sorted keys (reference `sort_keys` parity). */
13
+ export declare function stableJson(value: unknown): string;
14
+ export declare function normalizeToolCallId(existing: unknown, name: string, index: number | string, args: unknown): string;
15
+ export declare class DowngradeSet {
16
+ private readonly set;
17
+ has(model: string): boolean;
18
+ add(model: string): void;
19
+ clear(): void;
20
+ size(): number;
21
+ list(): string[];
22
+ }
23
+ export declare function isCacheFieldRejection(status: number, body: string): boolean;
24
+ /** Backwards-compatible alias used by older call sites/tests. */
25
+ export declare function isCacheFieldError(status: number, body: string): boolean;
26
+ /** Total output tokens as upstream reports them (inclusive of reasoning). */
27
+ export declare function getOutputTokens(usage: unknown): number;
28
+ /** Cache read tokens from the several upstream field names. */
29
+ export declare function extractCacheReadTokens(usage: unknown): number;
30
+ /** Cache creation (write) tokens from the several upstream field names. */
31
+ export declare function extractCacheCreationTokens(usage: unknown): number;
32
+ /** Token facts one completed upstream request contributes to epoch notes. */
33
+ export interface UpstreamTurnUsage {
34
+ readonly inputTokens: number;
35
+ readonly outputTokens: number;
36
+ readonly cacheReadTokens: number;
37
+ readonly cacheCreationTokens: number;
38
+ readonly measured: boolean;
39
+ }
40
+ /**
41
+ * Normalize an OpenAI chat/completions usage object. Returns null when
42
+ * no upstream usage is present (an observation gap, never a 0-turn).
43
+ */
44
+ export declare function upstreamUsageFromOpenAI(usage: unknown): UpstreamTurnUsage | null;
45
+ /** Normalize an OpenAI Responses usage object (input_tokens_details shape). */
46
+ export declare function upstreamUsageFromResponses(usage: unknown): UpstreamTurnUsage | null;
47
+ /** Normalize an Anthropic usage object (message_start / message_delta / non-stream). */
48
+ export declare function upstreamUsageFromAnthropic(usage: unknown): UpstreamTurnUsage | null;
49
+ /**
50
+ * Reasoning-token split from either upstream usage shape
51
+ * (output_tokens_details / completion_tokens_details). The split is a
52
+ * SUBSET of the reported total — display it, never add it.
53
+ */
54
+ export declare function upstreamReasoningTokens(usage: unknown): number;
55
+ export declare function withReasoningSplit(base: Record<string, unknown>, usage: unknown): Record<string, unknown>;
56
+ /** Rough token estimate (chars/3), used for message_start and count_tokens. */
57
+ export declare function estimateTokens(text: string): number;
58
+ //# sourceMappingURL=bridge-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-cache.d.ts","sourceRoot":"","sources":["../../../runtimes/claude/bridge-cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,eAAO,MAAM,mBAAmB,QAAe,CAAC;AAEhD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AAWD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ1D;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMvD;AAWD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAO5F;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMjD;AAcD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAGlH;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAC3B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IACxB,KAAK,IAAI,IAAI;IACb,IAAI,IAAI,MAAM;IACd,IAAI,IAAI,MAAM,EAAE;CACjB;AA0BD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAO3E;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvE;AAID,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAItD;AAED,+DAA+D;AAC/D,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK7D;AAED,2EAA2E;AAC3E,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKjE;AAED,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAQD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAahF;AAED,+EAA+E;AAC/E,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAkBnF;AAED,wFAAwF;AACxF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAanF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAW9D;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,OAAO,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIzB;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD"}
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ /**
3
+ * Pure caching / id-stability predicates ported from the reference proxy.
4
+ * No I/O, no global state. Downgrade/exclusion sets are managed by the caller.
5
+ * (Session compaction epochs live in session-epoch.ts; usage notes feed them.)
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.DowngradeSet = exports.GLM_EXCLUDE_PATTERN = void 0;
9
+ exports.shouldStampRetention = shouldStampRetention;
10
+ exports.cacheKeyFor = cacheKeyFor;
11
+ exports.cacheKeyExcluded = cacheKeyExcluded;
12
+ exports.synthesizeToolId = synthesizeToolId;
13
+ exports.stableJson = stableJson;
14
+ exports.normalizeToolCallId = normalizeToolCallId;
15
+ exports.isCacheFieldRejection = isCacheFieldRejection;
16
+ exports.isCacheFieldError = isCacheFieldError;
17
+ exports.getOutputTokens = getOutputTokens;
18
+ exports.extractCacheReadTokens = extractCacheReadTokens;
19
+ exports.extractCacheCreationTokens = extractCacheCreationTokens;
20
+ exports.upstreamUsageFromOpenAI = upstreamUsageFromOpenAI;
21
+ exports.upstreamUsageFromResponses = upstreamUsageFromResponses;
22
+ exports.upstreamUsageFromAnthropic = upstreamUsageFromAnthropic;
23
+ exports.upstreamReasoningTokens = upstreamReasoningTokens;
24
+ exports.withReasoningSplit = withReasoningSplit;
25
+ exports.estimateTokens = estimateTokens;
26
+ const node_crypto_1 = require("node:crypto");
27
+ exports.GLM_EXCLUDE_PATTERN = /glm|zhipu/i;
28
+ function shouldStampRetention(model) {
29
+ return !exports.GLM_EXCLUDE_PATTERN.test(model);
30
+ }
31
+ // ── Upstream prompt-cache key derivation (reference parity) ──────────
32
+ // Clean values (UUIDs and the like) pass verbatim; overlong-but-clean
33
+ // values keep a readable head plus a hash; anything outside the safe
34
+ // charset is hashed wholesale. Deterministic per session.
35
+ const CACHE_KEY_MAXLEN = 64;
36
+ const CACHE_KEY_SAFE = new Set('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'.split(''));
37
+ function cacheKeyFor(session) {
38
+ const s = (session || '').trim();
39
+ if (!s)
40
+ return null;
41
+ if ([...s].every((c) => CACHE_KEY_SAFE.has(c))) {
42
+ if (s.length <= CACHE_KEY_MAXLEN)
43
+ return s;
44
+ return s.slice(0, 32) + (0, node_crypto_1.createHash)('sha256').update(s, 'utf8').digest('hex').slice(0, 32);
45
+ }
46
+ return 'ck-' + (0, node_crypto_1.createHash)('sha256').update(s, 'utf8').digest('hex').slice(0, 32);
47
+ }
48
+ /** Whole-segment exclusion (never substring false positives like "gilmour"). */
49
+ function cacheKeyExcluded(model) {
50
+ const segs = (model || '')
51
+ .toLowerCase()
52
+ .replace(/[_/.:]/g, '-')
53
+ .split('-');
54
+ return segs.some((seg) => seg === 'glm' || seg === 'zhipu');
55
+ }
56
+ // ── Stable tool-call ids (reference parity) ──────────────────────────
57
+ // Content-derived ids keep identical turns byte-identical across
58
+ // retries/replays, so prefix caches stay warm and tool_use/tool_result
59
+ // pairing survives id-dropping clients.
60
+ function sha1Short(input) {
61
+ return (0, node_crypto_1.createHash)('sha1').update(input, 'utf8').digest('hex').slice(0, 8);
62
+ }
63
+ function synthesizeToolId(name, index, args) {
64
+ const argStr = args && typeof args === 'object'
65
+ ? stableJson(args)
66
+ : String(args ?? '');
67
+ const basis = `${name || ''}\u0000${argStr}`;
68
+ return `toolu_${name}_${index}_${sha1Short(basis)}`;
69
+ }
70
+ /** Deterministic JSON with sorted keys (reference `sort_keys` parity). */
71
+ function stableJson(value) {
72
+ try {
73
+ return JSON.stringify(sortValue(value));
74
+ }
75
+ catch {
76
+ return String(value);
77
+ }
78
+ }
79
+ function sortValue(value) {
80
+ if (Array.isArray(value))
81
+ return value.map(sortValue);
82
+ if (value && typeof value === 'object') {
83
+ const out = {};
84
+ for (const key of Object.keys(value).sort()) {
85
+ out[key] = sortValue(value[key]);
86
+ }
87
+ return out;
88
+ }
89
+ return value;
90
+ }
91
+ function normalizeToolCallId(existing, name, index, args) {
92
+ if (typeof existing === 'string' && existing.length > 0)
93
+ return existing;
94
+ return synthesizeToolId(name, index, args);
95
+ }
96
+ class DowngradeSet {
97
+ set = new Set();
98
+ has(model) { return this.set.has(model); }
99
+ add(model) { this.set.add(model); }
100
+ clear() { this.set.clear(); }
101
+ size() { return this.set.size; }
102
+ list() { return [...this.set]; }
103
+ }
104
+ exports.DowngradeSet = DowngradeSet;
105
+ // ── Cache-field 400 signature (reference parity) ─────────────────────
106
+ // The downgrade must trigger on "extra/unknown/not-permitted" style
107
+ // rejections ANCHORED on a cache field name — a bare "not permitted"
108
+ // phrase ("Tool use not permitted") must not poison the exclusion set.
109
+ const CACHE_KEY_REJECT_SIGNS = [
110
+ 'extra input',
111
+ 'not permitted',
112
+ 'unknown field',
113
+ 'unknown parameter',
114
+ 'unexpected field',
115
+ 'unexpected parameter',
116
+ 'unrecognized field',
117
+ 'unrecognized parameter',
118
+ 'unsupported field',
119
+ 'unsupported parameter',
120
+ ];
121
+ const CACHE_KEY_FIELD_HINTS = ['prompt_cache_key', 'prompt_cache_retention', 'promptcache'];
122
+ function normalizeForHint(text) {
123
+ // Underscores/hyphens/spaces equivalent so "prompt-cache-key" matches.
124
+ return text.toLowerCase().replace(/[-_\s]/g, '');
125
+ }
126
+ function isCacheFieldRejection(status, body) {
127
+ if (status !== 400)
128
+ return false;
129
+ const b = (body || '').toLowerCase();
130
+ const hasSign = CACHE_KEY_REJECT_SIGNS.some((s) => b.includes(s));
131
+ if (!hasSign)
132
+ return false;
133
+ const normalized = normalizeForHint(b);
134
+ return CACHE_KEY_FIELD_HINTS.some((h) => normalized.includes(normalizeForHint(h)));
135
+ }
136
+ /** Backwards-compatible alias used by older call sites/tests. */
137
+ function isCacheFieldError(status, body) {
138
+ return isCacheFieldRejection(status, body);
139
+ }
140
+ // ── Usage normalization (reference parity) ───────────────────────────
141
+ /** Total output tokens as upstream reports them (inclusive of reasoning). */
142
+ function getOutputTokens(usage) {
143
+ const u = (usage && typeof usage === 'object' ? usage : {});
144
+ const n = u['completion_tokens'] ?? u['output_tokens'];
145
+ return typeof n === 'number' && Number.isFinite(n) ? n : 0;
146
+ }
147
+ /** Cache read tokens from the several upstream field names. */
148
+ function extractCacheReadTokens(usage) {
149
+ const u = (usage && typeof usage === 'object' ? usage : {});
150
+ const details = (u['prompt_tokens_details'] ?? {});
151
+ const read = details['cached_tokens'] ?? u['cached_tokens'] ?? u['cache_read_input_tokens'];
152
+ return numeric(read) ?? 0;
153
+ }
154
+ /** Cache creation (write) tokens from the several upstream field names. */
155
+ function extractCacheCreationTokens(usage) {
156
+ const u = (usage && typeof usage === 'object' ? usage : {});
157
+ const details = (u['prompt_tokens_details'] ?? {});
158
+ const creation = details['cache_creation'] ?? u['cache_creation_input_tokens'];
159
+ return numeric(creation) ?? 0;
160
+ }
161
+ function numeric(value) {
162
+ if (typeof value === 'number' && Number.isFinite(value))
163
+ return value;
164
+ if (typeof value === 'string' && /^\d+$/.test(value.trim()))
165
+ return parseInt(value.trim(), 10);
166
+ return null;
167
+ }
168
+ /**
169
+ * Normalize an OpenAI chat/completions usage object. Returns null when
170
+ * no upstream usage is present (an observation gap, never a 0-turn).
171
+ */
172
+ function upstreamUsageFromOpenAI(usage) {
173
+ if (!usage || typeof usage !== 'object')
174
+ return null;
175
+ const u = usage;
176
+ const inTok = numeric(u['prompt_tokens'] ?? u['input_tokens']);
177
+ const outTok = numeric(u['completion_tokens'] ?? u['output_tokens']);
178
+ if (inTok === null && outTok === null)
179
+ return null;
180
+ return {
181
+ inputTokens: inTok ?? 0,
182
+ outputTokens: outTok ?? 0,
183
+ cacheReadTokens: extractCacheReadTokens(u),
184
+ cacheCreationTokens: extractCacheCreationTokens(u),
185
+ measured: true,
186
+ };
187
+ }
188
+ /** Normalize an OpenAI Responses usage object (input_tokens_details shape). */
189
+ function upstreamUsageFromResponses(usage) {
190
+ if (!usage || typeof usage !== 'object')
191
+ return null;
192
+ const u = usage;
193
+ const inTok = numeric(u['input_tokens']);
194
+ const outTok = numeric(u['output_tokens']);
195
+ if (inTok === null && outTok === null)
196
+ return null;
197
+ const details = u['input_tokens_details'];
198
+ const detailCache = details && typeof details === 'object' ? numeric(details['cached_tokens']) : null;
199
+ const cacheRead = detailCache ?? extractCacheReadTokens(u);
200
+ const cacheCreate = numeric(u['cache_write_tokens']) ?? extractCacheCreationTokens(u);
201
+ return {
202
+ inputTokens: inTok ?? 0,
203
+ outputTokens: outTok ?? 0,
204
+ cacheReadTokens: cacheRead,
205
+ cacheCreationTokens: cacheCreate,
206
+ measured: true,
207
+ };
208
+ }
209
+ /** Normalize an Anthropic usage object (message_start / message_delta / non-stream). */
210
+ function upstreamUsageFromAnthropic(usage) {
211
+ if (!usage || typeof usage !== 'object')
212
+ return null;
213
+ const u = usage;
214
+ const inTok = numeric(u['input_tokens']);
215
+ const outTok = numeric(u['output_tokens']);
216
+ if (inTok === null && outTok === null)
217
+ return null;
218
+ return {
219
+ inputTokens: inTok ?? 0,
220
+ outputTokens: outTok ?? 0,
221
+ cacheReadTokens: numeric(u['cache_read_input_tokens']) ?? 0,
222
+ cacheCreationTokens: numeric(u['cache_creation_input_tokens']) ?? 0,
223
+ measured: true,
224
+ };
225
+ }
226
+ /**
227
+ * Reasoning-token split from either upstream usage shape
228
+ * (output_tokens_details / completion_tokens_details). The split is a
229
+ * SUBSET of the reported total — display it, never add it.
230
+ */
231
+ function upstreamReasoningTokens(usage) {
232
+ if (!usage || typeof usage !== 'object')
233
+ return 0;
234
+ const u = usage;
235
+ for (const container of ['output_tokens_details', 'completion_tokens_details']) {
236
+ const det = u[container];
237
+ if (!det || typeof det !== 'object')
238
+ continue;
239
+ const raw = det['reasoning_tokens'];
240
+ if (typeof raw === 'number' && Number.isFinite(raw) && raw > 0)
241
+ return Math.trunc(raw);
242
+ if (typeof raw === 'string' && /^\d+$/.test(raw.trim()))
243
+ return parseInt(raw.trim(), 10);
244
+ }
245
+ return 0;
246
+ }
247
+ function withReasoningSplit(base, usage) {
248
+ const n = upstreamReasoningTokens(usage);
249
+ if (!n)
250
+ return base;
251
+ return { ...base, reasoning_tokens: n };
252
+ }
253
+ /** Rough token estimate (chars/3), used for message_start and count_tokens. */
254
+ function estimateTokens(text) {
255
+ return Math.max(1, Math.floor((text || '').length / 3));
256
+ }
257
+ //# sourceMappingURL=bridge-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-cache.js","sourceRoot":"","sources":["../../../runtimes/claude/bridge-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { AgentRuntime, AgentSession, SessionConfig, SessionCreationOptions, RuntimeCapabilities } from '../../src/types';
2
+ import type { BridgeRuntimeConfig } from './protocol-bridge';
3
+ export interface ClaudeRuntimeOptions {
4
+ /**
5
+ * Point the Claude CLI at the in-process protocol bridge, translating
6
+ * its Anthropic traffic to OpenCode Go / Zen upstreams (Anthropic
7
+ * pass-through, OpenAI chat/completions, or OpenAI Responses — chosen
8
+ * per model). One bridge is started lazily per session and closed on
9
+ * abort.
10
+ */
11
+ readonly bridge?: BridgeRuntimeConfig;
12
+ }
13
+ export declare class ClaudeAgentRuntime implements AgentRuntime {
14
+ readonly name = "claude";
15
+ /**
16
+ * - `readOnlyPermissions`: read-only is enforced with a positive built-in
17
+ * allow-list plus `dontAsk`, not a deny-list.
18
+ * - `requiredModeVerification`: `init` reads the applied permission mode
19
+ * and tool set back, so `requireMode` is a verified contract.
20
+ * - `sessionRecovery`: bounded same-session resume with the fixed
21
+ * continuation prompt (ADR-009; string-prompt mode has no empty turn).
22
+ */
23
+ readonly capabilities: RuntimeCapabilities;
24
+ private readonly options;
25
+ constructor(options?: ClaudeRuntimeOptions);
26
+ isAvailable(): Promise<boolean>;
27
+ createSession(config: SessionConfig, options?: SessionCreationOptions): Promise<AgentSession>;
28
+ }
29
+ export declare function createClaudeRuntime(options?: ClaudeRuntimeOptions): AgentRuntime;
30
+ //# sourceMappingURL=claude-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-runtime.d.ts","sourceRoot":"","sources":["../../../runtimes/claude/claude-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE9H,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC;CACvC;AAED,qBAAa,kBAAmB,YAAW,YAAY;IACrD,QAAQ,CAAC,IAAI,YAAY;IACzB;;;;;;;OAOG;IACH,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAIxC;IACF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;gBAEnC,OAAO,GAAE,oBAAyB;IAIxC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAqB/B,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC;CAGpG;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,YAAY,CAEpF"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ClaudeAgentRuntime = void 0;
37
+ exports.createClaudeRuntime = createClaudeRuntime;
38
+ const claude_session_1 = require("./claude-session");
39
+ class ClaudeAgentRuntime {
40
+ name = 'claude';
41
+ /**
42
+ * - `readOnlyPermissions`: read-only is enforced with a positive built-in
43
+ * allow-list plus `dontAsk`, not a deny-list.
44
+ * - `requiredModeVerification`: `init` reads the applied permission mode
45
+ * and tool set back, so `requireMode` is a verified contract.
46
+ * - `sessionRecovery`: bounded same-session resume with the fixed
47
+ * continuation prompt (ADR-009; string-prompt mode has no empty turn).
48
+ */
49
+ capabilities = {
50
+ readOnlyPermissions: true,
51
+ requiredModeVerification: true,
52
+ sessionRecovery: true,
53
+ };
54
+ options;
55
+ constructor(options = {}) {
56
+ this.options = options;
57
+ }
58
+ async isAvailable() {
59
+ try {
60
+ await Promise.resolve().then(() => __importStar(require('@anthropic-ai/claude-agent-sdk')));
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ // Verify the Claude Code CLI is reachable.
66
+ try {
67
+ const { execFileSync } = await Promise.resolve().then(() => __importStar(require('node:child_process')));
68
+ execFileSync(process.env.CLAUDE_CODE_EXECUTABLE ?? 'claude', ['--version'], { timeout: 5000, stdio: 'ignore' });
69
+ return true;
70
+ }
71
+ catch {
72
+ // Without an explicit path the CLI may be bundled with the SDK, so a
73
+ // failed probe is not proof of absence. With one, the operator named
74
+ // the binary: a path that does not run is a misconfiguration, and
75
+ // answering "available" here defers the failure to the first turn.
76
+ const explicit = (process.env.CLAUDE_CODE_EXECUTABLE ?? '').trim();
77
+ return explicit.length === 0;
78
+ }
79
+ }
80
+ async createSession(config, options) {
81
+ return new claude_session_1.ClaudeAgentSession(config, options, this.options.bridge);
82
+ }
83
+ }
84
+ exports.ClaudeAgentRuntime = ClaudeAgentRuntime;
85
+ function createClaudeRuntime(options = {}) {
86
+ return new ClaudeAgentRuntime(options);
87
+ }
88
+ //# sourceMappingURL=claude-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-runtime.js","sourceRoot":"","sources":["../../../runtimes/claude/claude-runtime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DA,kDAEC;AA/DD,qDAAsD;AActD,MAAa,kBAAkB;IACpB,IAAI,GAAG,QAAQ,CAAC;IACzB;;;;;;;OAOG;IACM,YAAY,GAAwB;QAC3C,mBAAmB,EAAE,IAAI;QACzB,wBAAwB,EAAE,IAAI;QAC9B,eAAe,EAAE,IAAI;KACtB,CAAC;IACe,OAAO,CAAuB;IAE/C,YAAY,UAAgC,EAAE;QAC5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,wDAAa,gCAAgC,GAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;QACD,2CAA2C;QAC3C,IAAI,CAAC;YACH,MAAM,EAAE,YAAY,EAAE,GAAG,wDAAa,oBAAoB,GAAC,CAAC;YAC5D,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChH,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;YACrE,qEAAqE;YACrE,kEAAkE;YAClE,mEAAmE;YACnE,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACnE,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAqB,EAAE,OAAgC;QACzE,OAAO,IAAI,mCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;CACF;AA7CD,gDA6CC;AAED,SAAgB,mBAAmB,CAAC,UAAgC,EAAE;IACpE,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,154 @@
1
+ import type { ForkSessionOptions, ForkSessionResult, GetSessionMessagesOptions, Options, SDKMessage, SessionMessage } from '@anthropic-ai/claude-agent-sdk';
2
+ import type { AgentSession, AgentSessionHistory, AgentSessionMetadata, AgentSessionUsage, SessionConfig, SessionCreationOptions, ToolUsageData } from '../../src/types';
3
+ import type { SessionRecoveryEvent } from '../../src/types';
4
+ import type { BridgeHandle, BridgeRuntimeConfig } from './protocol-bridge';
5
+ /**
6
+ * Stored handlers. Each event has its own payload type (see the `on`
7
+ * overloads below); `emit` is the only place that supplies runtime arguments,
8
+ * so the erased shape is what the handler list can hold without an `any`.
9
+ */
10
+ type Handler = (...args: never[]) => void;
11
+ /**
12
+ * The slice of the SDK `Query` the session uses. Narrower than `Query` so
13
+ * tests can supply a fake async iterable without reimplementing the control
14
+ * protocol; the real handle satisfies it structurally.
15
+ */
16
+ export interface ClaudeQueryHandle extends AsyncIterable<SDKMessage> {
17
+ close?: () => void;
18
+ getContextUsage?: (opts?: {
19
+ readonly detail?: 'summary' | 'full';
20
+ }) => Promise<{
21
+ readonly totalTokens?: number;
22
+ readonly categories?: ReadonlyArray<{
23
+ readonly kind?: string;
24
+ readonly id?: string;
25
+ readonly name?: string;
26
+ readonly tokens?: number;
27
+ }>;
28
+ }>;
29
+ }
30
+ /**
31
+ * SDK boundaries the session calls. Overridable for tests (`@internal`); the
32
+ * defaults are the SDK's own functions.
33
+ */
34
+ export interface ClaudeSessionDeps {
35
+ readonly queryFn?: (params: {
36
+ readonly prompt: string;
37
+ readonly options: Options;
38
+ }) => ClaudeQueryHandle;
39
+ readonly getSessionMessagesFn?: (sessionId: string, options?: GetSessionMessagesOptions) => Promise<ReadonlyArray<Pick<SessionMessage, 'uuid' | 'type' | 'message'>>>;
40
+ readonly forkSessionFn?: (sessionId: string, options?: ForkSessionOptions) => Promise<ForkSessionResult>;
41
+ readonly sleepFn?: (ms: number) => Promise<void>;
42
+ }
43
+ export declare class ClaudeAgentSession implements AgentSession {
44
+ readonly pid: number | null;
45
+ private readonly config;
46
+ private readonly abortController;
47
+ private readonly bridgeOptions;
48
+ private bridgeHandle;
49
+ private bridgeCreating;
50
+ private handlers;
51
+ private sessionId;
52
+ private lastQuery;
53
+ private aborted;
54
+ private turnCount;
55
+ private sessionStartTime;
56
+ private lastCallContextTokens;
57
+ private lastCallInputTokens;
58
+ private lastCallOutputTokens;
59
+ private compactionCount;
60
+ private lastAssistantError;
61
+ private lastApiRetry;
62
+ private activeRecovery;
63
+ private readonly diagnostics;
64
+ private readonly includePartialMessages;
65
+ private readonly queryFn;
66
+ private readonly getSessionMessagesFn;
67
+ private readonly forkSessionFn;
68
+ private readonly sleepFn;
69
+ /**
70
+ * Usage is cumulative per session. A truncate forks the transcript, so the
71
+ * running totals restart from the fork point and the old baseline would
72
+ * suppress real usage until it caught up; the ledger is replaced instead.
73
+ */
74
+ private usageLedger;
75
+ private turnChain;
76
+ constructor(config: SessionConfig, options?: SessionCreationOptions, bridgeOptions?: BridgeRuntimeConfig, deps?: ClaudeSessionDeps);
77
+ private emit;
78
+ private diagnostic;
79
+ private sleep;
80
+ private buildEmitter;
81
+ send(prompt: string): void;
82
+ continueSession(prompt: string): Promise<void>;
83
+ /**
84
+ * Start (once) the in-process protocol bridge for this session.
85
+ *
86
+ * The bridge exposes an Anthropic-compatible surface and translates to
87
+ * the configured upstream protocol (Anthropic pass-through / OpenAI
88
+ * chat / OpenAI Responses). Returns null when no bridge is configured
89
+ * (the CLI then talks to its default Anthropic endpoint).
90
+ */
91
+ ensureBridge(): Promise<BridgeHandle | null>;
92
+ /**
93
+ * Environment that points the Claude CLI at the bridge. Every query the
94
+ * session issues — turns, recovery resumes, handoff summaries, and the
95
+ * advisor/stand-in one-shots — must carry it, or the CLI falls back to
96
+ * `api.anthropic.com` where no credential exists under the bridge.
97
+ */
98
+ private bridgeEnv;
99
+ private runTurn;
100
+ /**
101
+ * One query attempt. Returns the terminal outcome, or the error that ended
102
+ * the stream, instead of throwing so the recovery loop can classify it.
103
+ */
104
+ private attemptTurn;
105
+ private classifyFailure;
106
+ /**
107
+ * `requireMode` is a contract, not a hint: read the mode and the built-in
108
+ * tool set back from `init` before the first prompt and fail the turn when
109
+ * the CLI applied something else.
110
+ */
111
+ private verifyRequiredMode;
112
+ /**
113
+ * A resumed session must still have a transcript to resume from. Pending
114
+ * `tool_use` blocks without results are fine: the CLI re-runs interrupted
115
+ * turns on resume (`resume_reason` frames).
116
+ */
117
+ private auditRecoveryHistory;
118
+ private waitWithinDeadline;
119
+ private emitRecovery;
120
+ /**
121
+ * Ends recovery. `stage` names the reconnect step whose failure ended it;
122
+ * the reason alone does not say which step produced it.
123
+ */
124
+ private exhaustRecovery;
125
+ get metadata(): AgentSessionMetadata;
126
+ get usage(): AgentSessionUsage;
127
+ get history(): AgentSessionHistory;
128
+ private truncateNow;
129
+ on(event: 'text', handler: (text: string, parentToolCallId?: string) => void): void;
130
+ on(event: 'reasoning', handler: (text: string) => void): void;
131
+ on(event: 'tool_start', handler: (tool: string, input: string, args: Record<string, unknown>, callId?: string, parentToolCallId?: string) => void): void;
132
+ on(event: 'tool_complete', handler: (tool: string, output: string, callId?: string, parentToolCallId?: string) => void): void;
133
+ on(event: 'tool_complete_rich', handler: (tool: string, contents: ReadonlyArray<Record<string, unknown>>, callId?: string) => void): void;
134
+ on(event: 'tool_output', handler: (tool: string, output: string, parentToolCallId?: string) => void): void;
135
+ on(event: 'idle', handler: () => void): void;
136
+ on(event: 'error', handler: (err: Error) => void): void;
137
+ on(event: 'usage', handler: (data: Record<string, unknown>) => void): void;
138
+ on(event: 'tool_usage', handler: (data: ToolUsageData) => void): void;
139
+ on(event: 'compaction', handler: (phase: 'start' | 'complete', summary?: string) => void): void;
140
+ on(event: 'subagent_start', handler: (name: string, data: Record<string, unknown>) => void): void;
141
+ on(event: 'subagent_end', handler: (name: string, data: Record<string, unknown>) => void): void;
142
+ on(event: 'permission', handler: (data: Record<string, unknown>) => void): void;
143
+ on(event: 'recovery', handler: (event: SessionRecoveryEvent) => void): void;
144
+ on(event: 'intent', handler: (intent: string) => void): void;
145
+ /**
146
+ * Dynamic wiring for callers that forward an event name from configuration
147
+ * or a test table. Payloads are not checked on this arm; prefer the literal
148
+ * overloads.
149
+ */
150
+ on(event: string, handler: Handler): void;
151
+ abort(): Promise<void>;
152
+ }
153
+ export {};
154
+ //# sourceMappingURL=claude-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-session.d.ts","sourceRoot":"","sources":["../../../runtimes/claude/claude-session.ts"],"names":[],"mappings":"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"}