@enderfga/openclaw-claude-code 2.0.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 (38) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +179 -0
  3. package/dist/bin/cli.d.ts +10 -0
  4. package/dist/bin/cli.js +301 -0
  5. package/dist/bin/cli.js.map +1 -0
  6. package/dist/src/embedded-server.d.ts +19 -0
  7. package/dist/src/embedded-server.js +190 -0
  8. package/dist/src/embedded-server.js.map +1 -0
  9. package/dist/src/hooks/prompt-bypass.d.ts +20 -0
  10. package/dist/src/hooks/prompt-bypass.js +37 -0
  11. package/dist/src/hooks/prompt-bypass.js.map +1 -0
  12. package/dist/src/index.d.ts +47 -0
  13. package/dist/src/index.js +230 -0
  14. package/dist/src/index.js.map +1 -0
  15. package/dist/src/persistent-session.d.ts +100 -0
  16. package/dist/src/persistent-session.js +563 -0
  17. package/dist/src/persistent-session.js.map +1 -0
  18. package/dist/src/proxy/anthropic-adapter.d.ts +136 -0
  19. package/dist/src/proxy/anthropic-adapter.js +394 -0
  20. package/dist/src/proxy/anthropic-adapter.js.map +1 -0
  21. package/dist/src/proxy/handler.d.ts +39 -0
  22. package/dist/src/proxy/handler.js +261 -0
  23. package/dist/src/proxy/handler.js.map +1 -0
  24. package/dist/src/proxy/schema-cleaner.d.ts +11 -0
  25. package/dist/src/proxy/schema-cleaner.js +34 -0
  26. package/dist/src/proxy/schema-cleaner.js.map +1 -0
  27. package/dist/src/proxy/thought-cache.d.ts +19 -0
  28. package/dist/src/proxy/thought-cache.js +53 -0
  29. package/dist/src/proxy/thought-cache.js.map +1 -0
  30. package/dist/src/session-manager.d.ts +79 -0
  31. package/dist/src/session-manager.js +329 -0
  32. package/dist/src/session-manager.js.map +1 -0
  33. package/dist/src/types.d.ts +160 -0
  34. package/dist/src/types.js +20 -0
  35. package/dist/src/types.js.map +1 -0
  36. package/openclaw.plugin.json +76 -0
  37. package/package.json +46 -0
  38. package/skills/SKILL.md +594 -0
@@ -0,0 +1,563 @@
1
+ /**
2
+ * Persistent Claude Code Session — wraps `claude` CLI via child_process.spawn
3
+ *
4
+ * Maintains a long-running Claude Code process with streaming JSON I/O.
5
+ * Enables multi-turn agent loops, continuous conversation, and real-time streaming.
6
+ */
7
+ import { spawn } from 'node:child_process';
8
+ import { EventEmitter } from 'node:events';
9
+ import * as readline from 'node:readline';
10
+ import * as fs from 'node:fs';
11
+ import { MODEL_ALIASES, MODEL_PRICING, } from './types.js';
12
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
13
+ function getModelPricing(model) {
14
+ if (!model)
15
+ return MODEL_PRICING['claude-sonnet-4-6'];
16
+ const key = model.replace(/^anthropic\/|^google\/|^openai\/|^openai-codex\//g, '');
17
+ return MODEL_PRICING[key] ?? MODEL_PRICING['claude-sonnet-4-6'];
18
+ }
19
+ // ─── PersistentClaudeSession ─────────────────────────────────────────────────
20
+ export class PersistentClaudeSession extends EventEmitter {
21
+ options;
22
+ proc = null;
23
+ _isReady = false;
24
+ _isPaused = false;
25
+ currentRequestId = 0;
26
+ _streamCallbacks = null;
27
+ _contextHighFired = false;
28
+ _realModel = null;
29
+ sessionId;
30
+ stats;
31
+ constructor(config) {
32
+ super();
33
+ this.options = {
34
+ ...config,
35
+ permissionMode: config.permissionMode || 'acceptEdits',
36
+ hooks: {},
37
+ modelOverrides: config.modelOverrides || {},
38
+ };
39
+ this.stats = {
40
+ turns: 0,
41
+ toolCalls: 0,
42
+ toolErrors: 0,
43
+ tokensIn: 0,
44
+ tokensOut: 0,
45
+ cachedTokens: 0,
46
+ costUsd: 0,
47
+ startTime: null,
48
+ lastActivity: null,
49
+ history: [],
50
+ };
51
+ }
52
+ get isReady() { return this._isReady; }
53
+ // ─── Start ───────────────────────────────────────────────────────────────
54
+ async start(claudeBin = 'claude') {
55
+ const args = [
56
+ '-p',
57
+ '--input-format', 'stream-json',
58
+ '--output-format', 'stream-json',
59
+ '--replay-user-messages',
60
+ '--verbose',
61
+ '--include-partial-messages',
62
+ '--permission-mode', this.options.permissionMode || 'acceptEdits',
63
+ ];
64
+ // Model alias resolution
65
+ if (this.options.model) {
66
+ const resolved = this.resolveModel(this.options.model);
67
+ if (resolved !== this.options.model)
68
+ this.options.model = resolved;
69
+ }
70
+ // Resume / fork
71
+ if (this.options.claudeResumeId) {
72
+ args.push('--resume', this.options.claudeResumeId);
73
+ if (this.options.forkSession)
74
+ args.push('--fork-session');
75
+ }
76
+ if (this.options.customSessionId)
77
+ args.push('--session-id', this.options.customSessionId);
78
+ // Model — proxy mode mapping
79
+ if (this.options.model) {
80
+ const CLAUDE_PATTERNS = ['sonnet', 'opus', 'haiku', 'claude-', 'anthropic/', '/claude'];
81
+ const isClaudeModel = CLAUDE_PATTERNS.some(p => this.options.model.includes(p) || this.options.model.startsWith(p));
82
+ if (!isClaudeModel && this.options.baseUrl) {
83
+ this._realModel = this.options.model;
84
+ args.push('--model', 'opus');
85
+ }
86
+ else {
87
+ const cliModel = this.options.model.includes('/') ? this.options.model.split('/').pop() : this.options.model;
88
+ args.push('--model', cliModel);
89
+ }
90
+ }
91
+ // Tool control
92
+ if (this.options.allowedTools?.length)
93
+ args.push('--allowed-tools', this.options.allowedTools.join(','));
94
+ if (this.options.disallowedTools?.length)
95
+ args.push('--disallowed-tools', this.options.disallowedTools.join(','));
96
+ if (this.options.tools) {
97
+ const t = Array.isArray(this.options.tools) ? this.options.tools.join(',') : this.options.tools;
98
+ args.push('--tools', t);
99
+ }
100
+ // System prompts
101
+ if (this.options.systemPrompt)
102
+ args.push('--system-prompt', this.options.systemPrompt);
103
+ if (this.options.appendSystemPrompt)
104
+ args.push('--append-system-prompt', this.options.appendSystemPrompt);
105
+ // Limits
106
+ if (this.options.maxTurns)
107
+ args.push('--max-turns', String(this.options.maxTurns));
108
+ if (this.options.maxBudgetUsd)
109
+ args.push('--max-budget-usd', String(this.options.maxBudgetUsd));
110
+ // Permissions
111
+ if (this.options.dangerouslySkipPermissions)
112
+ args.push('--dangerously-skip-permissions');
113
+ // Agents
114
+ if (this.options.agents) {
115
+ const json = typeof this.options.agents === 'string' ? this.options.agents : JSON.stringify(this.options.agents);
116
+ args.push('--agents', json);
117
+ }
118
+ if (this.options.agent)
119
+ args.push('--agent', this.options.agent);
120
+ // Directories
121
+ if (this.options.addDir?.length) {
122
+ for (const dir of this.options.addDir)
123
+ args.push('--add-dir', dir);
124
+ }
125
+ // Effort
126
+ if (this.options.effort && this.options.effort !== 'auto')
127
+ args.push('--effort', this.options.effort);
128
+ // Auto mode
129
+ if (this.options.enableAutoMode || this.options.permissionMode === 'auto')
130
+ args.push('--enable-auto-mode');
131
+ // Session name
132
+ if (this.options.sessionName)
133
+ args.push('-n', this.options.sessionName);
134
+ // New CLI flags
135
+ if (this.options.bare)
136
+ args.push('--bare');
137
+ if (this.options.worktree) {
138
+ args.push('--worktree');
139
+ if (typeof this.options.worktree === 'string' && this.options.worktree !== 'true')
140
+ args.push(this.options.worktree);
141
+ }
142
+ if (this.options.fallbackModel)
143
+ args.push('--fallback-model', this.options.fallbackModel);
144
+ if (this.options.jsonSchema)
145
+ args.push('--json-schema', this.options.jsonSchema);
146
+ if (this.options.mcpConfig) {
147
+ const configs = Array.isArray(this.options.mcpConfig) ? this.options.mcpConfig : [this.options.mcpConfig];
148
+ for (const c of configs)
149
+ args.push('--mcp-config', c);
150
+ }
151
+ if (this.options.settings)
152
+ args.push('--settings', this.options.settings);
153
+ if (this.options.noSessionPersistence)
154
+ args.push('--no-session-persistence');
155
+ if (this.options.betas) {
156
+ const bl = Array.isArray(this.options.betas) ? this.options.betas : this.options.betas.split(',');
157
+ for (const b of bl)
158
+ args.push('--betas', b.trim());
159
+ }
160
+ // Ensure CWD exists
161
+ if (this.options.cwd && !fs.existsSync(this.options.cwd)) {
162
+ fs.mkdirSync(this.options.cwd, { recursive: true });
163
+ }
164
+ // Build spawn environment
165
+ const spawnEnv = {
166
+ ...process.env,
167
+ PATH: '/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin',
168
+ };
169
+ if (this.options.baseUrl)
170
+ spawnEnv.ANTHROPIC_BASE_URL = this.options.baseUrl;
171
+ if (this.options.enableAgentTeams)
172
+ spawnEnv.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = 'true';
173
+ if (this._realModel && this.options.baseUrl) {
174
+ const base = this.options.baseUrl.replace(/\/$/, '');
175
+ spawnEnv.ANTHROPIC_BASE_URL = `${base}/real/${this._realModel}`;
176
+ }
177
+ // Spawn
178
+ this.proc = spawn(claudeBin, args, {
179
+ cwd: this.options.cwd,
180
+ env: spawnEnv,
181
+ stdio: ['pipe', 'pipe', 'pipe'],
182
+ detached: true,
183
+ });
184
+ // Parse stdout line-by-line
185
+ const rl = readline.createInterface({ input: this.proc.stdout, crlfDelay: Infinity });
186
+ rl.on('line', (line) => {
187
+ if (!line.trim())
188
+ return;
189
+ try {
190
+ const event = JSON.parse(line);
191
+ this._handleEvent(event);
192
+ }
193
+ catch {
194
+ this.emit('log', `[stdout] ${line}`);
195
+ }
196
+ });
197
+ this.proc.stderr?.on('data', (data) => {
198
+ this.emit('log', `[stderr] ${data.toString()}`);
199
+ });
200
+ this.proc.on('close', (code) => {
201
+ this._isReady = false;
202
+ this.emit('close', code);
203
+ });
204
+ this.proc.on('error', (err) => {
205
+ this.emit('error', err);
206
+ });
207
+ // Wait for ready
208
+ return new Promise((resolve, reject) => {
209
+ const timeout = setTimeout(() => reject(new Error('Timeout waiting for session ready')), 30_000);
210
+ this.once('ready', () => { clearTimeout(timeout); resolve(this); });
211
+ this.once('error', (err) => { clearTimeout(timeout); reject(err); });
212
+ // Claude doesn't send explicit ready signal
213
+ setTimeout(() => {
214
+ if (!this._isReady) {
215
+ this._isReady = true;
216
+ this.emit('ready');
217
+ }
218
+ }, 2000);
219
+ });
220
+ }
221
+ // ─── Event Handling ──────────────────────────────────────────────────────
222
+ _handleEvent(event) {
223
+ const type = event.type;
224
+ this.stats.lastActivity = new Date().toISOString();
225
+ // Track history (keep last 100)
226
+ this.stats.history.push({ time: this.stats.lastActivity, type, event });
227
+ if (this.stats.history.length > 100)
228
+ this.stats.history.shift();
229
+ switch (type) {
230
+ case 'system':
231
+ if (event.subtype === 'init') {
232
+ this.sessionId = event.session_id;
233
+ this.stats.startTime = new Date().toISOString();
234
+ this.emit('init', event);
235
+ }
236
+ this.emit('system', event);
237
+ break;
238
+ case 'stream_event': {
239
+ const inner = event.event;
240
+ if (!inner)
241
+ break;
242
+ const innerType = inner.type;
243
+ if (innerType === 'content_block_start') {
244
+ const block = inner.content_block;
245
+ if (block?.type === 'tool_use') {
246
+ this.stats.toolCalls++;
247
+ const toolEvent = { tool: { name: block.name, input: {} } };
248
+ try {
249
+ this._streamCallbacks?.onToolUse?.(toolEvent);
250
+ }
251
+ catch { }
252
+ this.emit('tool_use', toolEvent);
253
+ }
254
+ }
255
+ else if (innerType === 'content_block_delta') {
256
+ const delta = inner.delta;
257
+ if (delta?.type === 'text_delta' && delta.text) {
258
+ try {
259
+ this._streamCallbacks?.onText?.(delta.text);
260
+ }
261
+ catch { }
262
+ this.emit('text', delta.text);
263
+ }
264
+ }
265
+ else if (innerType === 'message_delta') {
266
+ const usage = inner.usage;
267
+ if (usage) {
268
+ this.stats.tokensIn += usage.input_tokens || 0;
269
+ this.stats.tokensOut += usage.output_tokens || 0;
270
+ this.stats.cachedTokens += usage.cache_read_input_tokens || 0;
271
+ this._updateCost();
272
+ }
273
+ }
274
+ this.emit('stream_event', event);
275
+ break;
276
+ }
277
+ case 'user':
278
+ this.stats.turns++;
279
+ this.emit('user_echo', event);
280
+ break;
281
+ case 'assistant':
282
+ this.emit('assistant', event);
283
+ if (event.message?.content && Array.isArray(event.message.content)) {
284
+ for (const block of event.message.content) {
285
+ if (block.type === 'tool_use') {
286
+ this.stats.toolCalls++;
287
+ const toolEvent = { tool: { name: block.name, input: block.input || {} } };
288
+ try {
289
+ this._streamCallbacks?.onToolUse?.(toolEvent);
290
+ }
291
+ catch { }
292
+ this.emit('tool_use', toolEvent);
293
+ }
294
+ }
295
+ }
296
+ break;
297
+ case 'tool_use':
298
+ this.stats.toolCalls++;
299
+ try {
300
+ this._streamCallbacks?.onToolUse?.(event);
301
+ }
302
+ catch { }
303
+ this.emit('tool_use', event);
304
+ break;
305
+ case 'tool_result':
306
+ try {
307
+ this._streamCallbacks?.onToolResult?.(event);
308
+ }
309
+ catch { }
310
+ if (event.is_error || event.error) {
311
+ this.stats.toolErrors++;
312
+ this._fireHook('onToolError', { tool: event.tool_use_id, error: event.error });
313
+ }
314
+ this.emit('tool_result', event);
315
+ break;
316
+ case 'error':
317
+ this.emit('error', new Error(String(event.error) || JSON.stringify(event)));
318
+ break;
319
+ case 'result': {
320
+ const usage = event.usage;
321
+ if (usage) {
322
+ this.stats.tokensIn += usage.input_tokens || 0;
323
+ this.stats.tokensOut += usage.output_tokens || 0;
324
+ this.stats.cachedTokens += usage.cache_read_input_tokens || 0;
325
+ this._updateCost();
326
+ }
327
+ this.emit('result', event);
328
+ this.emit('turn_complete', event);
329
+ this._fireHook('onTurnComplete', { text: event.result, usage, stopReason: event.stop_reason });
330
+ const totalTokens = this.stats.tokensIn + this.stats.tokensOut;
331
+ if (totalTokens > 140_000 && !this._contextHighFired) {
332
+ this._contextHighFired = true;
333
+ this._fireHook('onContextHigh', { tokensUsed: totalTokens, threshold: 140_000 });
334
+ }
335
+ const stopReason = event.stop_reason;
336
+ if (stopReason === 'error' || stopReason === 'rate_limit') {
337
+ this._fireHook('onStopFailure', { reason: stopReason, error: event.error });
338
+ }
339
+ break;
340
+ }
341
+ default:
342
+ this.emit('event', event);
343
+ }
344
+ }
345
+ // ─── Send ────────────────────────────────────────────────────────────────
346
+ async send(message, options = {}) {
347
+ if (!this._isReady || !this.proc)
348
+ throw new Error('Session not ready. Call start() first.');
349
+ const requestId = ++this.currentRequestId;
350
+ let finalMessage = typeof message === 'string' ? message : message;
351
+ if (typeof finalMessage === 'string') {
352
+ if (options.effort === 'high' || options.effort === 'max') {
353
+ finalMessage = `ultrathink\n\n${finalMessage}`;
354
+ }
355
+ if (options.plan) {
356
+ finalMessage = `/plan ${finalMessage}`;
357
+ }
358
+ }
359
+ const payload = {
360
+ type: 'user',
361
+ message: {
362
+ role: 'user',
363
+ content: typeof finalMessage === 'string'
364
+ ? [{ type: 'text', text: finalMessage }]
365
+ : finalMessage,
366
+ },
367
+ };
368
+ this.proc.stdin.write(JSON.stringify(payload) + '\n');
369
+ if (options.callbacks)
370
+ this._streamCallbacks = options.callbacks;
371
+ if (options.waitForComplete) {
372
+ try {
373
+ return await this._waitForTurnComplete(options.timeout || 300_000);
374
+ }
375
+ finally {
376
+ if (options.callbacks)
377
+ this._streamCallbacks = null;
378
+ }
379
+ }
380
+ return { requestId, sent: true };
381
+ }
382
+ // ─── Wait for Turn Complete ──────────────────────────────────────────────
383
+ _waitForTurnComplete(timeout) {
384
+ return new Promise((resolve, reject) => {
385
+ let settled = false;
386
+ let streamedText = '';
387
+ let allAssistantText = '';
388
+ const toolNames = [];
389
+ const onText = (chunk) => { streamedText += chunk; };
390
+ this.on('text', onText);
391
+ const onAssistant = (event) => {
392
+ if (event.message?.content && Array.isArray(event.message.content)) {
393
+ for (const block of event.message.content) {
394
+ if (block.type === 'text' && block.text)
395
+ allAssistantText += block.text + '\n';
396
+ }
397
+ }
398
+ };
399
+ this.on('assistant', onAssistant);
400
+ const onToolUse = (event) => {
401
+ const tool = event.tool;
402
+ toolNames.push(tool?.name || event.name || 'unknown');
403
+ };
404
+ this.on('tool_use', onToolUse);
405
+ const cleanup = () => {
406
+ clearTimeout(timer);
407
+ this.removeListener('text', onText);
408
+ this.removeListener('assistant', onAssistant);
409
+ this.removeListener('tool_use', onToolUse);
410
+ this.removeListener('turn_complete', onTurnComplete);
411
+ this.removeListener('error', onError);
412
+ this.removeListener('close', onClose);
413
+ };
414
+ const timer = setTimeout(() => {
415
+ if (settled)
416
+ return;
417
+ settled = true;
418
+ cleanup();
419
+ reject(new Error('Timeout waiting for response'));
420
+ }, timeout);
421
+ const onTurnComplete = (event) => {
422
+ if (settled)
423
+ return;
424
+ settled = true;
425
+ cleanup();
426
+ let text = event.result || streamedText || allAssistantText.trim() || '';
427
+ if (!text && toolNames.length > 0) {
428
+ const unique = [...new Set(toolNames)];
429
+ text = `[Agent completed ${toolNames.length} tool calls: ${unique.join(', ')}]`;
430
+ }
431
+ resolve({ text, event });
432
+ };
433
+ const onError = (err) => {
434
+ if (settled)
435
+ return;
436
+ settled = true;
437
+ cleanup();
438
+ reject(err);
439
+ };
440
+ const onClose = (code) => {
441
+ if (settled)
442
+ return;
443
+ settled = true;
444
+ cleanup();
445
+ const text = streamedText || allAssistantText.trim() || '';
446
+ resolve({
447
+ text,
448
+ event: { type: 'result', result: text, stop_reason: 'process_exit', exit_code: code },
449
+ });
450
+ };
451
+ this.once('turn_complete', onTurnComplete);
452
+ this.once('error', onError);
453
+ this.once('close', onClose);
454
+ });
455
+ }
456
+ // ─── Utilities ───────────────────────────────────────────────────────────
457
+ getStats() {
458
+ return {
459
+ turns: this.stats.turns,
460
+ toolCalls: this.stats.toolCalls,
461
+ toolErrors: this.stats.toolErrors,
462
+ tokensIn: this.stats.tokensIn,
463
+ tokensOut: this.stats.tokensOut,
464
+ cachedTokens: this.stats.cachedTokens,
465
+ costUsd: Math.round(this.stats.costUsd * 10000) / 10000,
466
+ isReady: this._isReady,
467
+ startTime: this.stats.startTime,
468
+ lastActivity: this.stats.lastActivity,
469
+ contextPercent: 0,
470
+ sessionId: this.sessionId,
471
+ uptime: this.stats.startTime
472
+ ? Math.round((Date.now() - new Date(this.stats.startTime).getTime()) / 1000)
473
+ : 0,
474
+ };
475
+ }
476
+ getHistory(limit = 50) {
477
+ return this.stats.history.slice(-limit);
478
+ }
479
+ async compact(summary) {
480
+ const msg = summary ? `/compact ${summary}` : '/compact';
481
+ return this.send(msg, { waitForComplete: true, timeout: 60_000 });
482
+ }
483
+ getEffort() { return this.options.effort || 'auto'; }
484
+ setEffort(level) { this.options.effort = level; }
485
+ getCost() {
486
+ const pricing = getModelPricing(this.options.model);
487
+ const nonCachedIn = Math.max(0, this.stats.tokensIn - this.stats.cachedTokens);
488
+ return {
489
+ model: this.options.model || 'default',
490
+ tokensIn: this.stats.tokensIn,
491
+ tokensOut: this.stats.tokensOut,
492
+ cachedTokens: this.stats.cachedTokens,
493
+ pricing: { inputPer1M: pricing.input, outputPer1M: pricing.output, cachedPer1M: pricing.cached },
494
+ breakdown: {
495
+ inputCost: (nonCachedIn / 1_000_000) * pricing.input,
496
+ cachedCost: (this.stats.cachedTokens / 1_000_000) * (pricing.cached ?? 0),
497
+ outputCost: (this.stats.tokensOut / 1_000_000) * pricing.output,
498
+ },
499
+ totalUsd: this.stats.costUsd,
500
+ };
501
+ }
502
+ resolveModel(alias) {
503
+ if (this.options.modelOverrides?.[alias])
504
+ return this.options.modelOverrides[alias];
505
+ if (MODEL_ALIASES[alias])
506
+ return MODEL_ALIASES[alias];
507
+ return alias;
508
+ }
509
+ pause() { this._isPaused = true; this.emit('paused', { sessionId: this.sessionId }); }
510
+ resume() { this._isPaused = false; this.emit('resumed', { sessionId: this.sessionId }); }
511
+ stop() {
512
+ this._fireHook('onStop', { cost: this.getCost(), stats: this.getStats() });
513
+ if (this.proc) {
514
+ const pid = this.proc.pid;
515
+ this.proc.stdin?.end();
516
+ try {
517
+ process.kill(-pid, 'SIGTERM');
518
+ }
519
+ catch {
520
+ try {
521
+ this.proc.kill('SIGTERM');
522
+ }
523
+ catch { }
524
+ }
525
+ const p = this.proc;
526
+ setTimeout(() => {
527
+ try {
528
+ process.kill(-pid, 'SIGKILL');
529
+ }
530
+ catch { }
531
+ try {
532
+ p.kill('SIGKILL');
533
+ }
534
+ catch { }
535
+ }, 3000);
536
+ this.proc = null;
537
+ }
538
+ this._isReady = false;
539
+ this._isPaused = false;
540
+ this.emit('close', 143);
541
+ }
542
+ // ─── Private ─────────────────────────────────────────────────────────────
543
+ _updateCost() {
544
+ const pricing = getModelPricing(this.options.model);
545
+ const nonCachedIn = Math.max(0, this.stats.tokensIn - this.stats.cachedTokens);
546
+ this.stats.costUsd =
547
+ (nonCachedIn / 1_000_000) * pricing.input +
548
+ (this.stats.cachedTokens / 1_000_000) * (pricing.cached ?? 0) +
549
+ (this.stats.tokensOut / 1_000_000) * pricing.output;
550
+ }
551
+ _fireHook(hookName, data) {
552
+ const hooks = this.options.hooks;
553
+ const hook = hooks?.[hookName];
554
+ if (typeof hook === 'function') {
555
+ try {
556
+ hook(data);
557
+ }
558
+ catch { }
559
+ }
560
+ this.emit(`hook:${hookName}`, data);
561
+ }
562
+ }
563
+ //# sourceMappingURL=persistent-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistent-session.js","sourceRoot":"","sources":["../../src/persistent-session.ts"],"names":[],"mappings":"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"}