@kaitranntt/ccs 4.4.0 → 5.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.
- package/README.md +14 -7
- package/VERSION +1 -1
- package/config/base-agy.settings.json +10 -0
- package/config/base-codex.settings.json +10 -0
- package/config/base-gemini.settings.json +10 -0
- package/dist/auth/auth-commands.d.ts +52 -0
- package/dist/auth/auth-commands.d.ts.map +1 -0
- package/dist/auth/auth-commands.js +479 -0
- package/dist/auth/auth-commands.js.map +1 -0
- package/dist/auth/profile-detector.d.ts +68 -0
- package/dist/auth/profile-detector.d.ts.map +1 -0
- package/dist/auth/profile-detector.js +209 -0
- package/dist/auth/profile-detector.js.map +1 -0
- package/dist/auth/profile-registry.d.ts +60 -0
- package/dist/auth/profile-registry.d.ts.map +1 -0
- package/dist/auth/profile-registry.js +188 -0
- package/dist/auth/profile-registry.js.map +1 -0
- package/dist/ccs.d.ts +10 -0
- package/dist/ccs.d.ts.map +1 -0
- package/dist/ccs.js +320 -0
- package/dist/ccs.js.map +1 -0
- package/dist/cliproxy/auth-handler.d.ts +93 -0
- package/dist/cliproxy/auth-handler.d.ts.map +1 -0
- package/dist/cliproxy/auth-handler.js +402 -0
- package/dist/cliproxy/auth-handler.js.map +1 -0
- package/dist/cliproxy/base-config-loader.d.ts +42 -0
- package/dist/cliproxy/base-config-loader.d.ts.map +1 -0
- package/dist/cliproxy/base-config-loader.js +123 -0
- package/dist/cliproxy/base-config-loader.js.map +1 -0
- package/dist/cliproxy/binary-manager.d.ts +104 -0
- package/dist/cliproxy/binary-manager.d.ts.map +1 -0
- package/dist/cliproxy/binary-manager.js +567 -0
- package/dist/cliproxy/binary-manager.js.map +1 -0
- package/dist/cliproxy/cliproxy-executor.d.ts +33 -0
- package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -0
- package/dist/cliproxy/cliproxy-executor.js +297 -0
- package/dist/cliproxy/cliproxy-executor.js.map +1 -0
- package/dist/cliproxy/config-generator.d.ts +89 -0
- package/dist/cliproxy/config-generator.d.ts.map +1 -0
- package/dist/cliproxy/config-generator.js +263 -0
- package/dist/cliproxy/config-generator.js.map +1 -0
- package/dist/cliproxy/index.d.ts +13 -0
- package/dist/cliproxy/index.d.ts.map +1 -0
- package/dist/cliproxy/index.js +62 -0
- package/dist/cliproxy/index.js.map +1 -0
- package/dist/cliproxy/platform-detector.d.ts +48 -0
- package/dist/cliproxy/platform-detector.d.ts.map +1 -0
- package/dist/cliproxy/platform-detector.js +118 -0
- package/dist/cliproxy/platform-detector.js.map +1 -0
- package/dist/cliproxy/types.d.ts +169 -0
- package/dist/cliproxy/types.d.ts.map +1 -0
- package/dist/cliproxy/types.js +7 -0
- package/dist/cliproxy/types.js.map +1 -0
- package/dist/commands/doctor-command.d.ts +10 -0
- package/dist/commands/doctor-command.d.ts.map +1 -0
- package/dist/commands/doctor-command.js +44 -0
- package/dist/commands/doctor-command.js.map +1 -0
- package/dist/commands/help-command.d.ts +5 -0
- package/dist/commands/help-command.d.ts.map +1 -0
- package/dist/commands/help-command.js +104 -0
- package/dist/commands/help-command.js.map +1 -0
- package/dist/commands/install-command.d.ts +14 -0
- package/dist/commands/install-command.d.ts.map +1 -0
- package/dist/commands/install-command.js +39 -0
- package/dist/commands/install-command.js.map +1 -0
- package/dist/commands/shell-completion-command.d.ts +10 -0
- package/dist/commands/shell-completion-command.d.ts.map +1 -0
- package/dist/commands/shell-completion-command.js +85 -0
- package/dist/commands/shell-completion-command.js.map +1 -0
- package/dist/commands/sync-command.d.ts +10 -0
- package/dist/commands/sync-command.d.ts.map +1 -0
- package/dist/commands/sync-command.js +59 -0
- package/dist/commands/sync-command.js.map +1 -0
- package/dist/commands/update-command.d.ts +12 -0
- package/dist/commands/update-command.d.ts.map +1 -0
- package/dist/commands/update-command.js +295 -0
- package/dist/commands/update-command.js.map +1 -0
- package/dist/commands/version-command.d.ts +10 -0
- package/dist/commands/version-command.d.ts.map +1 -0
- package/dist/commands/version-command.js +100 -0
- package/dist/commands/version-command.js.map +1 -0
- package/dist/delegation/delegation-handler.d.ts +60 -0
- package/dist/delegation/delegation-handler.d.ts.map +1 -0
- package/dist/delegation/delegation-handler.js +174 -0
- package/dist/delegation/delegation-handler.js.map +1 -0
- package/dist/delegation/headless-executor.d.ts +114 -0
- package/dist/delegation/headless-executor.d.ts.map +1 -0
- package/dist/delegation/headless-executor.js +562 -0
- package/dist/delegation/headless-executor.js.map +1 -0
- package/dist/delegation/result-formatter.d.ts +108 -0
- package/dist/delegation/result-formatter.d.ts.map +1 -0
- package/dist/delegation/result-formatter.js +391 -0
- package/dist/delegation/result-formatter.js.map +1 -0
- package/dist/delegation/session-manager.d.ts +58 -0
- package/dist/delegation/session-manager.d.ts.map +1 -0
- package/dist/delegation/session-manager.js +153 -0
- package/dist/delegation/session-manager.js.map +1 -0
- package/dist/delegation/settings-parser.d.ts +31 -0
- package/dist/delegation/settings-parser.d.ts.map +1 -0
- package/dist/delegation/settings-parser.js +107 -0
- package/dist/delegation/settings-parser.js.map +1 -0
- package/dist/glmt/delta-accumulator.d.ts +210 -0
- package/dist/glmt/delta-accumulator.d.ts.map +1 -0
- package/dist/glmt/delta-accumulator.js +351 -0
- package/dist/glmt/delta-accumulator.js.map +1 -0
- package/dist/glmt/glmt-proxy.d.ts +72 -0
- package/dist/glmt/glmt-proxy.d.ts.map +1 -0
- package/dist/glmt/glmt-proxy.js +427 -0
- package/dist/glmt/glmt-proxy.js.map +1 -0
- package/dist/glmt/glmt-transformer.d.ts +265 -0
- package/dist/glmt/glmt-transformer.d.ts.map +1 -0
- package/dist/glmt/glmt-transformer.js +832 -0
- package/dist/glmt/glmt-transformer.js.map +1 -0
- package/dist/glmt/locale-enforcer.d.ts +38 -0
- package/dist/glmt/locale-enforcer.d.ts.map +1 -0
- package/dist/glmt/locale-enforcer.js +69 -0
- package/dist/glmt/locale-enforcer.js.map +1 -0
- package/dist/glmt/reasoning-enforcer.d.ts +52 -0
- package/dist/glmt/reasoning-enforcer.d.ts.map +1 -0
- package/dist/glmt/reasoning-enforcer.js +151 -0
- package/dist/glmt/reasoning-enforcer.js.map +1 -0
- package/dist/glmt/sse-parser.d.ts +47 -0
- package/dist/glmt/sse-parser.d.ts.map +1 -0
- package/dist/glmt/sse-parser.js +93 -0
- package/dist/glmt/sse-parser.js.map +1 -0
- package/dist/management/doctor.d.ts +104 -0
- package/dist/management/doctor.d.ts.map +1 -0
- package/dist/management/doctor.js +673 -0
- package/dist/management/doctor.js.map +1 -0
- package/dist/management/instance-manager.d.ts +57 -0
- package/dist/management/instance-manager.d.ts.map +1 -0
- package/dist/management/instance-manager.js +195 -0
- package/dist/management/instance-manager.js.map +1 -0
- package/dist/management/recovery-manager.d.ts +39 -0
- package/dist/management/recovery-manager.d.ts.map +1 -0
- package/dist/management/recovery-manager.js +141 -0
- package/dist/management/recovery-manager.js.map +1 -0
- package/dist/management/shared-manager.d.ts +47 -0
- package/dist/management/shared-manager.d.ts.map +1 -0
- package/dist/management/shared-manager.js +388 -0
- package/dist/management/shared-manager.js.map +1 -0
- package/dist/types/cli.d.ts +50 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +16 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/config.d.ts +51 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +26 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/delegation.d.ts +61 -0
- package/dist/types/delegation.d.ts.map +1 -0
- package/dist/types/delegation.js +6 -0
- package/dist/types/delegation.js.map +1 -0
- package/dist/types/glmt.d.ts +95 -0
- package/dist/types/glmt.d.ts.map +1 -0
- package/dist/types/glmt.js +7 -0
- package/dist/types/glmt.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +16 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/utils.d.ts +36 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/utils.js +22 -0
- package/dist/types/utils.js.map +1 -0
- package/dist/utils/claude-detector.d.ts +14 -0
- package/dist/utils/claude-detector.d.ts.map +1 -0
- package/dist/utils/claude-detector.js +112 -0
- package/dist/utils/claude-detector.js.map +1 -0
- package/dist/utils/claude-dir-installer.d.ts +46 -0
- package/dist/utils/claude-dir-installer.d.ts.map +1 -0
- package/dist/utils/claude-dir-installer.js +289 -0
- package/dist/utils/claude-dir-installer.js.map +1 -0
- package/dist/utils/claude-symlink-manager.d.ts +61 -0
- package/dist/utils/claude-symlink-manager.d.ts.map +1 -0
- package/dist/utils/claude-symlink-manager.js +291 -0
- package/dist/utils/claude-symlink-manager.js.map +1 -0
- package/dist/utils/config-manager.d.ts +32 -0
- package/dist/utils/config-manager.d.ts.map +1 -0
- package/dist/utils/config-manager.js +143 -0
- package/dist/utils/config-manager.js.map +1 -0
- package/dist/utils/delegation-validator.d.ts +39 -0
- package/dist/utils/delegation-validator.d.ts.map +1 -0
- package/dist/utils/delegation-validator.js +161 -0
- package/dist/utils/delegation-validator.js.map +1 -0
- package/dist/utils/error-codes.d.ts +36 -0
- package/dist/utils/error-codes.d.ts.map +1 -0
- package/dist/utils/error-codes.js +63 -0
- package/dist/utils/error-codes.js.map +1 -0
- package/dist/utils/error-manager.d.ts +59 -0
- package/dist/utils/error-manager.d.ts.map +1 -0
- package/dist/utils/error-manager.js +228 -0
- package/dist/utils/error-manager.js.map +1 -0
- package/dist/utils/helpers.d.ts +27 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +150 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/package-manager-detector.d.ts +14 -0
- package/dist/utils/package-manager-detector.d.ts.map +1 -0
- package/dist/utils/package-manager-detector.js +162 -0
- package/dist/utils/package-manager-detector.js.map +1 -0
- package/dist/utils/progress-indicator.d.ts +52 -0
- package/dist/utils/progress-indicator.d.ts.map +1 -0
- package/dist/utils/progress-indicator.js +102 -0
- package/dist/utils/progress-indicator.js.map +1 -0
- package/dist/utils/prompt.d.ts +29 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +116 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/shell-completion.d.ts +52 -0
- package/dist/utils/shell-completion.d.ts.map +1 -0
- package/dist/utils/shell-completion.js +231 -0
- package/dist/utils/shell-completion.js.map +1 -0
- package/dist/utils/shell-executor.d.ts +15 -0
- package/dist/utils/shell-executor.d.ts.map +1 -0
- package/dist/utils/shell-executor.js +57 -0
- package/dist/utils/shell-executor.js.map +1 -0
- package/dist/utils/update-checker.d.ts +48 -0
- package/dist/utils/update-checker.d.ts.map +1 -0
- package/dist/utils/update-checker.js +241 -0
- package/dist/utils/update-checker.js.map +1 -0
- package/lib/ccs +21 -1907
- package/lib/ccs.ps1 +26 -1800
- package/lib/error-codes.ps1 +2 -1
- package/lib/prompt.ps1 +2 -2
- package/package.json +31 -11
- package/scripts/add-shebang.js +39 -0
- package/scripts/bump-version.sh +25 -37
- package/scripts/dev-install.sh +32 -11
- package/scripts/postinstall.js +29 -29
- package/bin/auth/auth-commands.js +0 -499
- package/bin/auth/profile-detector.js +0 -204
- package/bin/auth/profile-registry.js +0 -225
- package/bin/ccs.js +0 -1034
- package/bin/delegation/README.md +0 -191
- package/bin/delegation/delegation-handler.js +0 -212
- package/bin/delegation/headless-executor.js +0 -618
- package/bin/delegation/result-formatter.js +0 -485
- package/bin/delegation/session-manager.js +0 -157
- package/bin/delegation/settings-parser.js +0 -109
- package/bin/glmt/delta-accumulator.js +0 -276
- package/bin/glmt/glmt-proxy.js +0 -495
- package/bin/glmt/glmt-transformer.js +0 -999
- package/bin/glmt/locale-enforcer.js +0 -72
- package/bin/glmt/reasoning-enforcer.js +0 -173
- package/bin/glmt/sse-parser.js +0 -96
- package/bin/management/doctor.js +0 -721
- package/bin/management/instance-manager.js +0 -202
- package/bin/management/recovery-manager.js +0 -135
- package/bin/management/shared-manager.js +0 -402
- package/bin/utils/claude-detector.js +0 -73
- package/bin/utils/claude-dir-installer.js +0 -283
- package/bin/utils/claude-symlink-manager.js +0 -289
- package/bin/utils/config-manager.js +0 -103
- package/bin/utils/delegation-validator.js +0 -154
- package/bin/utils/error-codes.js +0 -59
- package/bin/utils/error-manager.js +0 -165
- package/bin/utils/helpers.js +0 -136
- package/bin/utils/progress-indicator.js +0 -111
- package/bin/utils/prompt.js +0 -134
- package/bin/utils/shell-completion.js +0 -256
- package/bin/utils/update-checker.js +0 -243
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* DeltaAccumulator - Maintain state across streaming deltas
|
|
5
|
+
*
|
|
6
|
+
* Tracks:
|
|
7
|
+
* - Message metadata (id, model, role)
|
|
8
|
+
* - Content blocks (thinking, text)
|
|
9
|
+
* - Current block index
|
|
10
|
+
* - Accumulated content
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* const acc = new DeltaAccumulator(thinkingConfig);
|
|
14
|
+
* const events = transformer.transformDelta(openaiEvent, acc);
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.DeltaAccumulator = void 0;
|
|
18
|
+
class DeltaAccumulator {
|
|
19
|
+
constructor(_thinkingConfig = {}, options = {}) {
|
|
20
|
+
// ========== Finish Reason ==========
|
|
21
|
+
this.finishReason = null;
|
|
22
|
+
this.usageReceived = false;
|
|
23
|
+
this.messageId = 'msg_' + Date.now() + '_' + Math.random().toString(36).substring(7);
|
|
24
|
+
this.model = null;
|
|
25
|
+
this.role = 'assistant';
|
|
26
|
+
// Content blocks
|
|
27
|
+
this.contentBlocks = [];
|
|
28
|
+
this.currentBlockIndex = -1;
|
|
29
|
+
// Tool calls tracking
|
|
30
|
+
this.toolCalls = [];
|
|
31
|
+
this.toolCallsIndex = {};
|
|
32
|
+
// Buffers
|
|
33
|
+
this.thinkingBuffer = '';
|
|
34
|
+
this.textBuffer = '';
|
|
35
|
+
// C-02 Fix: Limits to prevent unbounded accumulation
|
|
36
|
+
this.maxBlocks = options.maxBlocks || 100;
|
|
37
|
+
this.maxBufferSize = options.maxBufferSize || 10 * 1024 * 1024; // 10MB
|
|
38
|
+
// Loop detection configuration
|
|
39
|
+
this.loopDetectionThreshold = options.loopDetectionThreshold || 3;
|
|
40
|
+
this.loopDetected = false;
|
|
41
|
+
// State flags
|
|
42
|
+
this.messageStarted = false;
|
|
43
|
+
this.finalized = false;
|
|
44
|
+
// Statistics
|
|
45
|
+
this.inputTokens = 0;
|
|
46
|
+
this.outputTokens = 0;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get current content block
|
|
50
|
+
* @returns Current block or null
|
|
51
|
+
*/
|
|
52
|
+
getCurrentBlock() {
|
|
53
|
+
if (this.currentBlockIndex >= 0 && this.currentBlockIndex < this.contentBlocks.length) {
|
|
54
|
+
return this.contentBlocks[this.currentBlockIndex];
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Start new content block
|
|
60
|
+
* @param type - Block type ('thinking', 'text', or 'tool_use')
|
|
61
|
+
* @returns New block
|
|
62
|
+
*/
|
|
63
|
+
startBlock(type) {
|
|
64
|
+
// C-02 Fix: Enforce max blocks limit
|
|
65
|
+
if (this.contentBlocks.length >= this.maxBlocks) {
|
|
66
|
+
throw new Error(`Maximum ${this.maxBlocks} content blocks exceeded (DoS protection)`);
|
|
67
|
+
}
|
|
68
|
+
this.currentBlockIndex++;
|
|
69
|
+
const block = {
|
|
70
|
+
index: this.currentBlockIndex,
|
|
71
|
+
type: type,
|
|
72
|
+
content: '',
|
|
73
|
+
started: true,
|
|
74
|
+
stopped: false,
|
|
75
|
+
};
|
|
76
|
+
this.contentBlocks.push(block);
|
|
77
|
+
// Reset buffer for new block (tool_use doesn't use buffers)
|
|
78
|
+
if (type === 'thinking') {
|
|
79
|
+
this.thinkingBuffer = '';
|
|
80
|
+
}
|
|
81
|
+
else if (type === 'text') {
|
|
82
|
+
this.textBuffer = '';
|
|
83
|
+
}
|
|
84
|
+
return block;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Add delta to current block
|
|
88
|
+
* @param delta - Content delta
|
|
89
|
+
*/
|
|
90
|
+
addDelta(delta) {
|
|
91
|
+
const block = this.getCurrentBlock();
|
|
92
|
+
if (!block) {
|
|
93
|
+
// FIX: Guard against null block (should never happen, but defensive)
|
|
94
|
+
console.error('[DeltaAccumulator] ERROR: addDelta called with no current block');
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (block.type === 'thinking') {
|
|
98
|
+
// C-02 Fix: Enforce buffer size limit
|
|
99
|
+
if (this.thinkingBuffer.length + delta.length > this.maxBufferSize) {
|
|
100
|
+
throw new Error(`Thinking buffer exceeded ${this.maxBufferSize} bytes (DoS protection)`);
|
|
101
|
+
}
|
|
102
|
+
this.thinkingBuffer += delta;
|
|
103
|
+
block.content = this.thinkingBuffer;
|
|
104
|
+
// FIX: Verify assignment succeeded (paranoid check for race conditions)
|
|
105
|
+
if (block.content.length !== this.thinkingBuffer.length) {
|
|
106
|
+
console.error('[DeltaAccumulator] ERROR: Block content assignment failed');
|
|
107
|
+
console.error(`Expected: ${this.thinkingBuffer.length}, Got: ${block.content.length}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else if (block.type === 'text') {
|
|
111
|
+
// C-02 Fix: Enforce buffer size limit
|
|
112
|
+
if (this.textBuffer.length + delta.length > this.maxBufferSize) {
|
|
113
|
+
throw new Error(`Text buffer exceeded ${this.maxBufferSize} bytes (DoS protection)`);
|
|
114
|
+
}
|
|
115
|
+
this.textBuffer += delta;
|
|
116
|
+
block.content = this.textBuffer;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Mark current block as stopped
|
|
121
|
+
*/
|
|
122
|
+
stopCurrentBlock() {
|
|
123
|
+
const block = this.getCurrentBlock();
|
|
124
|
+
if (block) {
|
|
125
|
+
block.stopped = true;
|
|
126
|
+
// FIX: Log block closure for debugging (helps diagnose timing issues)
|
|
127
|
+
if (block.type === 'thinking' && process.env.CCS_DEBUG === '1') {
|
|
128
|
+
console.error(`[DeltaAccumulator] Stopped thinking block ${block.index}: ${block.content?.length || 0} chars`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Update usage statistics
|
|
134
|
+
* @param usage - Usage object from OpenAI
|
|
135
|
+
*/
|
|
136
|
+
updateUsage(usage) {
|
|
137
|
+
if (usage) {
|
|
138
|
+
this.inputTokens = usage.prompt_tokens || usage.input_tokens || 0;
|
|
139
|
+
this.outputTokens = usage.completion_tokens || usage.output_tokens || 0;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Add or update tool call delta
|
|
144
|
+
* @param toolCallDelta - Tool call delta from OpenAI
|
|
145
|
+
*/
|
|
146
|
+
addToolCallDelta(toolCallDelta) {
|
|
147
|
+
const index = toolCallDelta.index;
|
|
148
|
+
// Initialize tool call if not exists
|
|
149
|
+
if (!this.toolCallsIndex[index]) {
|
|
150
|
+
const toolCall = {
|
|
151
|
+
index: index,
|
|
152
|
+
id: '',
|
|
153
|
+
type: 'function',
|
|
154
|
+
function: {
|
|
155
|
+
name: '',
|
|
156
|
+
arguments: '',
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
this.toolCalls.push(toolCall);
|
|
160
|
+
this.toolCallsIndex[index] = toolCall;
|
|
161
|
+
}
|
|
162
|
+
const toolCall = this.toolCallsIndex[index];
|
|
163
|
+
// Update id if present
|
|
164
|
+
if (toolCallDelta.id) {
|
|
165
|
+
toolCall.id = toolCallDelta.id;
|
|
166
|
+
}
|
|
167
|
+
// Update type if present
|
|
168
|
+
if (toolCallDelta.type) {
|
|
169
|
+
toolCall.type = toolCallDelta.type;
|
|
170
|
+
}
|
|
171
|
+
// Update function name if present
|
|
172
|
+
if (toolCallDelta.function?.name) {
|
|
173
|
+
toolCall.function.name += toolCallDelta.function.name;
|
|
174
|
+
}
|
|
175
|
+
// Update function arguments if present
|
|
176
|
+
if (toolCallDelta.function?.arguments) {
|
|
177
|
+
toolCall.function.arguments += toolCallDelta.function.arguments;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get all tool calls
|
|
182
|
+
* @returns Tool calls array
|
|
183
|
+
*/
|
|
184
|
+
getToolCalls() {
|
|
185
|
+
return this.toolCalls;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Check for planning loop pattern
|
|
189
|
+
* Loop = N consecutive thinking blocks with no tool calls
|
|
190
|
+
* @returns True if loop detected
|
|
191
|
+
*/
|
|
192
|
+
checkForLoop() {
|
|
193
|
+
// Already detected loop
|
|
194
|
+
if (this.loopDetected) {
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
// Need minimum blocks to detect pattern
|
|
198
|
+
if (this.contentBlocks.length < this.loopDetectionThreshold) {
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
// Get last N blocks
|
|
202
|
+
const recentBlocks = this.contentBlocks.slice(-this.loopDetectionThreshold);
|
|
203
|
+
// Check if all recent blocks are thinking blocks
|
|
204
|
+
const allThinking = recentBlocks.every((b) => b.type === 'thinking');
|
|
205
|
+
// Check if no tool calls have been made at all
|
|
206
|
+
const noToolCalls = this.toolCalls.length === 0;
|
|
207
|
+
// Loop detected if: all recent blocks are thinking AND no tool calls yet
|
|
208
|
+
if (allThinking && noToolCalls) {
|
|
209
|
+
this.loopDetected = true;
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Reset loop detection state (for testing)
|
|
216
|
+
*/
|
|
217
|
+
resetLoopDetection() {
|
|
218
|
+
this.loopDetected = false;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get summary of accumulated state
|
|
222
|
+
* @returns Summary
|
|
223
|
+
*/
|
|
224
|
+
getSummary() {
|
|
225
|
+
return {
|
|
226
|
+
messageId: this.messageId,
|
|
227
|
+
model: this.model,
|
|
228
|
+
role: this.role,
|
|
229
|
+
blockCount: this.contentBlocks.length,
|
|
230
|
+
currentIndex: this.currentBlockIndex,
|
|
231
|
+
toolCallCount: this.toolCalls.length,
|
|
232
|
+
messageStarted: this.messageStarted,
|
|
233
|
+
finalized: this.finalized,
|
|
234
|
+
loopDetected: this.loopDetected,
|
|
235
|
+
usage: {
|
|
236
|
+
input_tokens: this.inputTokens,
|
|
237
|
+
output_tokens: this.outputTokens,
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
// ========== State Getters ==========
|
|
242
|
+
/**
|
|
243
|
+
* Check if message has been finalized
|
|
244
|
+
*/
|
|
245
|
+
isFinalized() {
|
|
246
|
+
return this.finalized;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Check if message has started
|
|
250
|
+
*/
|
|
251
|
+
isMessageStarted() {
|
|
252
|
+
return this.messageStarted;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Get message ID
|
|
256
|
+
*/
|
|
257
|
+
getMessageId() {
|
|
258
|
+
return this.messageId;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Get model name
|
|
262
|
+
*/
|
|
263
|
+
getModel() {
|
|
264
|
+
return this.model;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get role
|
|
268
|
+
*/
|
|
269
|
+
getRole() {
|
|
270
|
+
return this.role;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Get input tokens
|
|
274
|
+
*/
|
|
275
|
+
getInputTokens() {
|
|
276
|
+
return this.inputTokens;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Get output tokens
|
|
280
|
+
*/
|
|
281
|
+
getOutputTokens() {
|
|
282
|
+
return this.outputTokens;
|
|
283
|
+
}
|
|
284
|
+
// ========== State Setters ==========
|
|
285
|
+
/**
|
|
286
|
+
* Set model name
|
|
287
|
+
*/
|
|
288
|
+
setModel(model) {
|
|
289
|
+
this.model = model;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Set message started flag
|
|
293
|
+
*/
|
|
294
|
+
setMessageStarted(started) {
|
|
295
|
+
this.messageStarted = started;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Set role
|
|
299
|
+
*/
|
|
300
|
+
setRole(role) {
|
|
301
|
+
this.role = role;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Set finalized flag
|
|
305
|
+
*/
|
|
306
|
+
setFinalized(finalized) {
|
|
307
|
+
this.finalized = finalized;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Set finish reason
|
|
311
|
+
*/
|
|
312
|
+
setFinishReason(reason) {
|
|
313
|
+
this.finishReason = reason;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Get finish reason
|
|
317
|
+
*/
|
|
318
|
+
getFinishReason() {
|
|
319
|
+
return this.finishReason;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Check if usage stats have been received
|
|
323
|
+
*/
|
|
324
|
+
hasUsageReceived() {
|
|
325
|
+
return this.usageReceived;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Mark usage as received
|
|
329
|
+
*/
|
|
330
|
+
setUsageReceived(received) {
|
|
331
|
+
this.usageReceived = received;
|
|
332
|
+
}
|
|
333
|
+
// ========== Tool Call Helpers ==========
|
|
334
|
+
/**
|
|
335
|
+
* Check if there are any tool calls, or check if a specific index exists
|
|
336
|
+
*/
|
|
337
|
+
hasToolCall(index) {
|
|
338
|
+
if (index === undefined) {
|
|
339
|
+
return this.toolCalls.length > 0;
|
|
340
|
+
}
|
|
341
|
+
return this.toolCallsIndex[index] !== undefined;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Get tool call by index
|
|
345
|
+
*/
|
|
346
|
+
getToolCall(index) {
|
|
347
|
+
return this.toolCallsIndex[index];
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
exports.DeltaAccumulator = DeltaAccumulator;
|
|
351
|
+
//# sourceMappingURL=delta-accumulator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delta-accumulator.js","sourceRoot":"","sources":["../../src/glmt/delta-accumulator.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;;;GAYG;;;AA+DH,MAAa,gBAAgB;IAmB3B,YAAY,kBAAkC,EAAE,EAAE,UAAmC,EAAE;QAgVvF,sCAAsC;QAE9B,iBAAY,GAAkB,IAAI,CAAC;QACnC,kBAAa,GAAY,KAAK,CAAC;QAlVrC,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QAExB,iBAAiB;QACjB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAE5B,sBAAsB;QACtB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QAEzB,UAAU;QACV,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QAErB,qDAAqD;QACrD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;QAEvE,+BAA+B;QAC/B,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,IAAI,CAAC,CAAC;QAClE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAE1B,cAAc;QACd,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,aAAa;QACb,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YACtF,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,IAAY;QACrB,qCAAqC;QACrC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,SAAS,2CAA2C,CAAC,CAAC;QACxF,CAAC;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,KAAK,GAAiB;YAC1B,KAAK,EAAE,IAAI,CAAC,iBAAiB;YAC7B,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,KAAK;SACf,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE/B,4DAA4D;QAC5D,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QAC3B,CAAC;aAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACvB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,KAAa;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,qEAAqE;YACrE,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9B,sCAAsC;YACtC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,aAAa,yBAAyB,CAAC,CAAC;YAC3F,CAAC;YACD,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC;YAC7B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;YAEpC,wEAAwE;YACxE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;gBACxD,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;gBAC3E,OAAO,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,cAAc,CAAC,MAAM,UAAU,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACjC,sCAAsC;YACtC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC/D,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,aAAa,yBAAyB,CAAC,CAAC;YACvF,CAAC;YACD,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC;YACzB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;YAErB,sEAAsE;YACtE,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,GAAG,EAAE,CAAC;gBAC/D,OAAO,CAAC,KAAK,CACX,6CAA6C,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,QAAQ,CAChG,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,KAAiB;QAC3B,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;YAClE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,aAA4B;QAC3C,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;QAElC,qCAAqC;QACrC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAa;gBACzB,KAAK,EAAE,KAAK;gBACZ,EAAE,EAAE,EAAE;gBACN,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE;oBACR,IAAI,EAAE,EAAE;oBACR,SAAS,EAAE,EAAE;iBACd;aACF,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;QACxC,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE5C,uBAAuB;QACvB,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC;YACrB,QAAQ,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC;QACjC,CAAC;QAED,yBAAyB;QACzB,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;QACrC,CAAC;QAED,kCAAkC;QAClC,IAAI,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;YACjC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;QACxD,CAAC;QAED,uCAAuC;QACvC,IAAI,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,QAAQ,CAAC,SAAS,IAAI,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;QAClE,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,YAAY;QACV,wBAAwB;QACxB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,wCAAwC;QACxC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,oBAAoB;QACpB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAE5E,iDAAiD;QACjD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAErE,+CAA+C;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;QAEhD,yEAAyE;QACzE,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;YACrC,YAAY,EAAE,IAAI,CAAC,iBAAiB;YACpC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;YACpC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE;gBACL,YAAY,EAAE,IAAI,CAAC,WAAW;gBAC9B,aAAa,EAAE,IAAI,CAAC,YAAY;aACjC;SACF,CAAC;IACJ,CAAC;IAED,sCAAsC;IAEtC;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,sCAAsC;IAEtC;;OAEG;IACH,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,OAAgB;QAChC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,SAAkB;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAOD;;OAEG;IACH,eAAe,CAAC,MAAc;QAC5B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAiB;QAChC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;IAChC,CAAC;IAED,0CAA0C;IAE1C;;OAEG;IACH,WAAW,CAAC,KAAc;QACxB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;CACF;AAtZD,4CAsZC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GlmtProxy - Embedded HTTP proxy for GLM thinking support
|
|
3
|
+
*
|
|
4
|
+
* Architecture:
|
|
5
|
+
* - Intercepts Claude CLI → Z.AI calls
|
|
6
|
+
* - Transforms Anthropic format → OpenAI format
|
|
7
|
+
* - Converts reasoning_content → thinking blocks
|
|
8
|
+
* - Supports both streaming and buffered modes
|
|
9
|
+
*
|
|
10
|
+
* Lifecycle:
|
|
11
|
+
* - Spawned by bin/ccs.js when 'glmt' profile detected
|
|
12
|
+
* - Binds to 127.0.0.1:random_port (security + avoid conflicts)
|
|
13
|
+
* - Terminates when parent process exits
|
|
14
|
+
*
|
|
15
|
+
* Debugging:
|
|
16
|
+
* - Verbose: Pass --verbose to see request/response logs
|
|
17
|
+
* - Debug: Set CCS_DEBUG=1 to write logs to ~/.ccs/logs/
|
|
18
|
+
*/
|
|
19
|
+
/// <reference types="node" />
|
|
20
|
+
import * as http from 'http';
|
|
21
|
+
interface GlmtProxyConfig {
|
|
22
|
+
verbose?: boolean;
|
|
23
|
+
debugLog?: boolean;
|
|
24
|
+
timeout?: number;
|
|
25
|
+
}
|
|
26
|
+
export declare class GlmtProxy {
|
|
27
|
+
private transformer;
|
|
28
|
+
private upstreamUrl;
|
|
29
|
+
private server;
|
|
30
|
+
private port;
|
|
31
|
+
private verbose;
|
|
32
|
+
private timeout;
|
|
33
|
+
constructor(config?: GlmtProxyConfig);
|
|
34
|
+
/**
|
|
35
|
+
* Start HTTP server on random port
|
|
36
|
+
*/
|
|
37
|
+
start(): Promise<number>;
|
|
38
|
+
/**
|
|
39
|
+
* Handle incoming HTTP request
|
|
40
|
+
*/
|
|
41
|
+
handleRequest(req: http.IncomingMessage, res: http.ServerResponse): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Handle buffered (non-streaming) request
|
|
44
|
+
*/
|
|
45
|
+
private handleBufferedRequest;
|
|
46
|
+
/**
|
|
47
|
+
* Handle streaming request
|
|
48
|
+
*/
|
|
49
|
+
private handleStreamingRequest;
|
|
50
|
+
/**
|
|
51
|
+
* Read request body
|
|
52
|
+
*/
|
|
53
|
+
private readBody;
|
|
54
|
+
/**
|
|
55
|
+
* Forward request to Z.AI upstream
|
|
56
|
+
*/
|
|
57
|
+
private forwardToUpstream;
|
|
58
|
+
/**
|
|
59
|
+
* Forward request to Z.AI and stream response
|
|
60
|
+
*/
|
|
61
|
+
private forwardAndStreamUpstream;
|
|
62
|
+
/**
|
|
63
|
+
* Stop proxy server
|
|
64
|
+
*/
|
|
65
|
+
stop(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Log message if verbose
|
|
68
|
+
*/
|
|
69
|
+
private log;
|
|
70
|
+
}
|
|
71
|
+
export default GlmtProxy;
|
|
72
|
+
//# sourceMappingURL=glmt-proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glmt-proxy.d.ts","sourceRoot":"","sources":["../../src/glmt/glmt-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAM7B,UAAU,eAAe;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA6CD,qBAAa,SAAS;IACpB,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,GAAE,eAAoB;IAexC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAuC9B;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAgFvF;;OAEG;YACW,qBAAqB;IAsCnC;;OAEG;YACW,sBAAsB;IA0CpC;;OAEG;IACH,OAAO,CAAC,QAAQ;IAoBhB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkEzB;;OAEG;YACW,wBAAwB;IA2GtC;;OAEG;IACH,IAAI,IAAI,IAAI;IAOZ;;OAEG;IACH,OAAO,CAAC,GAAG;CAKZ;AAiCD,eAAe,SAAS,CAAC"}
|