sona-code 0.1.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 +119 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +2979 -0
- package/dist/cli.js.map +1 -0
- package/dist/compressor.d.ts +84 -0
- package/dist/compressor.d.ts.map +1 -0
- package/dist/compressor.js +237 -0
- package/dist/compressor.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware.d.ts +81 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +165 -0
- package/dist/middleware.js.map +1 -0
- package/dist/proxy.d.ts +105 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +548 -0
- package/dist/proxy.js.map +1 -0
- package/dist/rules.d.ts +30 -0
- package/dist/rules.d.ts.map +1 -0
- package/dist/rules.js +201 -0
- package/dist/rules.js.map +1 -0
- package/dist/session.d.ts +156 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +351 -0
- package/dist/session.js.map +1 -0
- package/package.json +51 -0
package/dist/session.js
ADDED
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SONA Session Manager
|
|
4
|
+
*
|
|
5
|
+
* Handles continuous streaming compression across document processing sessions.
|
|
6
|
+
* Primary use case: Document processing and summary generation where multiple
|
|
7
|
+
* interactions happen with the LLM, each benefiting from compression.
|
|
8
|
+
*
|
|
9
|
+
* Key features:
|
|
10
|
+
* - Session-based tracking of cumulative savings
|
|
11
|
+
* - Streaming compression for real-time processing
|
|
12
|
+
* - Context preservation across conversation turns
|
|
13
|
+
* - RAG-optimized chunk compression
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.SonaSession = void 0;
|
|
17
|
+
exports.createSession = createSession;
|
|
18
|
+
const compressor_js_1 = require("./compressor.js");
|
|
19
|
+
const events_1 = require("events");
|
|
20
|
+
/**
|
|
21
|
+
* Document Processing Session
|
|
22
|
+
*
|
|
23
|
+
* Use this for continuous document processing workflows where
|
|
24
|
+
* you're feeding documents to an LLM for summarization, analysis,
|
|
25
|
+
* or other tasks.
|
|
26
|
+
*/
|
|
27
|
+
class SonaSession extends events_1.EventEmitter {
|
|
28
|
+
compressor;
|
|
29
|
+
config;
|
|
30
|
+
stats;
|
|
31
|
+
activeDocument = null;
|
|
32
|
+
constructor(config = {}) {
|
|
33
|
+
super();
|
|
34
|
+
this.config = {
|
|
35
|
+
sessionId: config.sessionId || this.generateSessionId(),
|
|
36
|
+
pricePerMillionInput: config.pricePerMillionInput || 15.0,
|
|
37
|
+
pricePerMillionOutput: config.pricePerMillionOutput || 60.0,
|
|
38
|
+
protectedTerms: config.protectedTerms || [],
|
|
39
|
+
verbose: config.verbose || false,
|
|
40
|
+
};
|
|
41
|
+
this.compressor = new compressor_js_1.SonaCompressor({
|
|
42
|
+
protectedTerms: this.config.protectedTerms,
|
|
43
|
+
pricePerMillionTokens: this.config.pricePerMillionInput,
|
|
44
|
+
});
|
|
45
|
+
this.stats = this.initStats();
|
|
46
|
+
}
|
|
47
|
+
generateSessionId() {
|
|
48
|
+
return `sona_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
49
|
+
}
|
|
50
|
+
initStats() {
|
|
51
|
+
return {
|
|
52
|
+
sessionId: this.config.sessionId,
|
|
53
|
+
startedAt: new Date(),
|
|
54
|
+
lastActivityAt: new Date(),
|
|
55
|
+
totalRequests: 0,
|
|
56
|
+
documentChunksProcessed: 0,
|
|
57
|
+
conversationTurns: 0,
|
|
58
|
+
totalOriginalInputTokens: 0,
|
|
59
|
+
totalCompressedInputTokens: 0,
|
|
60
|
+
totalInputTokensSaved: 0,
|
|
61
|
+
inputSavingsPercent: 0,
|
|
62
|
+
estimatedInputCostSaved: 0,
|
|
63
|
+
pricePerMillionInput: this.config.pricePerMillionInput,
|
|
64
|
+
documents: [],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Start processing a new document
|
|
69
|
+
*/
|
|
70
|
+
startDocument(documentId, name) {
|
|
71
|
+
// Close previous document if exists
|
|
72
|
+
if (this.activeDocument) {
|
|
73
|
+
this.endDocument();
|
|
74
|
+
}
|
|
75
|
+
this.activeDocument = {
|
|
76
|
+
documentId,
|
|
77
|
+
name,
|
|
78
|
+
startedAt: new Date(),
|
|
79
|
+
chunksProcessed: 0,
|
|
80
|
+
originalTokens: 0,
|
|
81
|
+
compressedTokens: 0,
|
|
82
|
+
tokensSaved: 0,
|
|
83
|
+
savingsPercent: 0,
|
|
84
|
+
};
|
|
85
|
+
if (this.config.verbose) {
|
|
86
|
+
console.log(`[SONA] Starting document: ${name || documentId}`);
|
|
87
|
+
}
|
|
88
|
+
this.emit('document:start', { documentId, name });
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* End current document processing
|
|
92
|
+
*/
|
|
93
|
+
endDocument() {
|
|
94
|
+
if (!this.activeDocument)
|
|
95
|
+
return null;
|
|
96
|
+
// Calculate final savings percent
|
|
97
|
+
if (this.activeDocument.originalTokens > 0) {
|
|
98
|
+
this.activeDocument.savingsPercent =
|
|
99
|
+
(this.activeDocument.tokensSaved / this.activeDocument.originalTokens) * 100;
|
|
100
|
+
}
|
|
101
|
+
const doc = { ...this.activeDocument };
|
|
102
|
+
this.stats.documents.push(doc);
|
|
103
|
+
if (this.config.verbose) {
|
|
104
|
+
console.log(`[SONA] Document complete: ${doc.name || doc.documentId}`);
|
|
105
|
+
console.log(` Chunks: ${doc.chunksProcessed}, Tokens saved: ${doc.tokensSaved} (${doc.savingsPercent.toFixed(1)}%)`);
|
|
106
|
+
}
|
|
107
|
+
this.emit('document:end', doc);
|
|
108
|
+
this.activeDocument = null;
|
|
109
|
+
return doc;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Compress a document chunk for RAG or batch processing
|
|
113
|
+
*
|
|
114
|
+
* Use this when processing documents in chunks before sending to LLM
|
|
115
|
+
*/
|
|
116
|
+
compressChunk(chunk) {
|
|
117
|
+
const result = this.compressor.compress(chunk);
|
|
118
|
+
this.recordCompression(result, 'chunk');
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Compress multiple chunks (for RAG context)
|
|
123
|
+
*/
|
|
124
|
+
compressChunks(chunks) {
|
|
125
|
+
const compressed = [];
|
|
126
|
+
let totalOriginal = 0;
|
|
127
|
+
let totalCompressed = 0;
|
|
128
|
+
for (const chunk of chunks) {
|
|
129
|
+
const result = this.compressChunk(chunk);
|
|
130
|
+
compressed.push(result.compressedText);
|
|
131
|
+
totalOriginal += result.originalTokens;
|
|
132
|
+
totalCompressed += result.compressedTokens;
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
compressed,
|
|
136
|
+
stats: {
|
|
137
|
+
totalOriginal,
|
|
138
|
+
totalCompressed,
|
|
139
|
+
totalSaved: totalOriginal - totalCompressed,
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Compress a conversation turn (user message to LLM)
|
|
145
|
+
*/
|
|
146
|
+
compressTurn(content) {
|
|
147
|
+
const result = this.compressor.compress(content);
|
|
148
|
+
this.recordCompression(result, 'turn');
|
|
149
|
+
this.stats.conversationTurns++;
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Compress messages array (OpenAI/Anthropic format)
|
|
154
|
+
* Typically compress user and system, preserve assistant responses
|
|
155
|
+
*/
|
|
156
|
+
compressMessages(messages, options = {}) {
|
|
157
|
+
const { compressSystem = true, compressUser = true, compressAssistant = false } = options;
|
|
158
|
+
return messages.map(msg => {
|
|
159
|
+
const shouldCompress = (msg.role === 'system' && compressSystem) ||
|
|
160
|
+
(msg.role === 'user' && compressUser) ||
|
|
161
|
+
(msg.role === 'assistant' && compressAssistant);
|
|
162
|
+
if (!shouldCompress || typeof msg.content !== 'string') {
|
|
163
|
+
return msg;
|
|
164
|
+
}
|
|
165
|
+
const result = this.compressor.compress(msg.content);
|
|
166
|
+
this.recordCompression(result, 'message');
|
|
167
|
+
return { ...msg, content: result.compressedText };
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Stream compress for real-time processing
|
|
172
|
+
* Yields compressed chunks as they're processed
|
|
173
|
+
*/
|
|
174
|
+
async *streamCompress(textStream) {
|
|
175
|
+
let buffer = '';
|
|
176
|
+
let totalOriginal = 0;
|
|
177
|
+
let totalCompressed = 0;
|
|
178
|
+
for await (const chunk of textStream) {
|
|
179
|
+
buffer += chunk;
|
|
180
|
+
// Process complete sentences/paragraphs
|
|
181
|
+
const sentences = buffer.split(/(?<=[.!?])\s+/);
|
|
182
|
+
if (sentences.length > 1) {
|
|
183
|
+
// Keep last potentially incomplete sentence in buffer
|
|
184
|
+
buffer = sentences.pop() || '';
|
|
185
|
+
for (const sentence of sentences) {
|
|
186
|
+
const result = this.compressor.compress(sentence);
|
|
187
|
+
this.recordCompression(result, 'stream');
|
|
188
|
+
totalOriginal += result.originalTokens;
|
|
189
|
+
totalCompressed += result.compressedTokens;
|
|
190
|
+
yield {
|
|
191
|
+
type: 'compressed',
|
|
192
|
+
content: result.compressedText + ' ',
|
|
193
|
+
stats: {
|
|
194
|
+
originalTokens: result.originalTokens,
|
|
195
|
+
compressedTokens: result.compressedTokens,
|
|
196
|
+
tokensSaved: result.tokenSavings,
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// Process remaining buffer
|
|
203
|
+
if (buffer.trim()) {
|
|
204
|
+
const result = this.compressor.compress(buffer);
|
|
205
|
+
this.recordCompression(result, 'stream');
|
|
206
|
+
totalOriginal += result.originalTokens;
|
|
207
|
+
totalCompressed += result.compressedTokens;
|
|
208
|
+
yield {
|
|
209
|
+
type: 'compressed',
|
|
210
|
+
content: result.compressedText,
|
|
211
|
+
stats: {
|
|
212
|
+
originalTokens: result.originalTokens,
|
|
213
|
+
compressedTokens: result.compressedTokens,
|
|
214
|
+
tokensSaved: result.tokenSavings,
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
// Final stats
|
|
219
|
+
yield {
|
|
220
|
+
type: 'stats',
|
|
221
|
+
content: '',
|
|
222
|
+
stats: {
|
|
223
|
+
originalTokens: totalOriginal,
|
|
224
|
+
compressedTokens: totalCompressed,
|
|
225
|
+
tokensSaved: totalOriginal - totalCompressed,
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Record compression result in session stats
|
|
231
|
+
*/
|
|
232
|
+
recordCompression(result, type) {
|
|
233
|
+
this.stats.lastActivityAt = new Date();
|
|
234
|
+
this.stats.totalRequests++;
|
|
235
|
+
this.stats.totalOriginalInputTokens += result.originalTokens;
|
|
236
|
+
this.stats.totalCompressedInputTokens += result.compressedTokens;
|
|
237
|
+
this.stats.totalInputTokensSaved += result.tokenSavings;
|
|
238
|
+
// Update savings percent
|
|
239
|
+
if (this.stats.totalOriginalInputTokens > 0) {
|
|
240
|
+
this.stats.inputSavingsPercent =
|
|
241
|
+
(this.stats.totalInputTokensSaved / this.stats.totalOriginalInputTokens) * 100;
|
|
242
|
+
}
|
|
243
|
+
// Update cost savings
|
|
244
|
+
this.stats.estimatedInputCostSaved =
|
|
245
|
+
(this.stats.totalInputTokensSaved * this.config.pricePerMillionInput) / 1_000_000;
|
|
246
|
+
// Update active document stats
|
|
247
|
+
if (this.activeDocument && type === 'chunk') {
|
|
248
|
+
this.stats.documentChunksProcessed++;
|
|
249
|
+
this.activeDocument.chunksProcessed++;
|
|
250
|
+
this.activeDocument.originalTokens += result.originalTokens;
|
|
251
|
+
this.activeDocument.compressedTokens += result.compressedTokens;
|
|
252
|
+
this.activeDocument.tokensSaved += result.tokenSavings;
|
|
253
|
+
}
|
|
254
|
+
// Emit event
|
|
255
|
+
this.emit('compression', {
|
|
256
|
+
type,
|
|
257
|
+
originalTokens: result.originalTokens,
|
|
258
|
+
compressedTokens: result.compressedTokens,
|
|
259
|
+
tokensSaved: result.tokenSavings,
|
|
260
|
+
savingsPercent: result.tokenSavingsPercent,
|
|
261
|
+
});
|
|
262
|
+
if (this.config.verbose) {
|
|
263
|
+
console.log(`[SONA] ${type}: -${result.tokenSavings} tokens (${result.tokenSavingsPercent.toFixed(1)}%)`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get current session statistics
|
|
268
|
+
*/
|
|
269
|
+
getStats() {
|
|
270
|
+
return { ...this.stats };
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Get formatted summary report
|
|
274
|
+
*/
|
|
275
|
+
getSummaryReport() {
|
|
276
|
+
const s = this.stats;
|
|
277
|
+
const duration = Date.now() - s.startedAt.getTime();
|
|
278
|
+
const durationStr = this.formatDuration(duration);
|
|
279
|
+
let report = `
|
|
280
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
281
|
+
║ SONA SESSION REPORT ║
|
|
282
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
283
|
+
║ Session ID: ${s.sessionId.padEnd(44)}║
|
|
284
|
+
║ Duration: ${durationStr.padEnd(44)}║
|
|
285
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
286
|
+
║ COMPRESSION METRICS ║
|
|
287
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
288
|
+
║ Total Requests: ${s.totalRequests.toString().padStart(10)} ║
|
|
289
|
+
║ Document Chunks: ${s.documentChunksProcessed.toString().padStart(10)} ║
|
|
290
|
+
║ Conversation Turns: ${s.conversationTurns.toString().padStart(10)} ║
|
|
291
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
292
|
+
║ Original Input Tokens: ${s.totalOriginalInputTokens.toLocaleString().padStart(10)} ║
|
|
293
|
+
║ Compressed Tokens: ${s.totalCompressedInputTokens.toLocaleString().padStart(10)} ║
|
|
294
|
+
║ Tokens Saved: ${s.totalInputTokensSaved.toLocaleString().padStart(10)} (${s.inputSavingsPercent.toFixed(1)}%) ║
|
|
295
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
296
|
+
║ COST SAVINGS ║
|
|
297
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
298
|
+
║ This Session: $${s.estimatedInputCostSaved.toFixed(4).padStart(9)} ║
|
|
299
|
+
║ Projected Monthly*: $${(s.estimatedInputCostSaved * 30 * 24 * 3600000 / Math.max(duration, 1)).toFixed(2).padStart(9)} ║
|
|
300
|
+
║ * at current usage rate ║
|
|
301
|
+
╚══════════════════════════════════════════════════════════════╝`;
|
|
302
|
+
if (s.documents.length > 0) {
|
|
303
|
+
report += `\n\nDOCUMENTS PROCESSED (${s.documents.length}):\n`;
|
|
304
|
+
for (const doc of s.documents) {
|
|
305
|
+
report += ` • ${doc.name || doc.documentId}: ${doc.chunksProcessed} chunks, ${doc.tokensSaved} tokens saved (${doc.savingsPercent.toFixed(1)}%)\n`;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return report;
|
|
309
|
+
}
|
|
310
|
+
formatDuration(ms) {
|
|
311
|
+
const seconds = Math.floor(ms / 1000);
|
|
312
|
+
const minutes = Math.floor(seconds / 60);
|
|
313
|
+
const hours = Math.floor(minutes / 60);
|
|
314
|
+
if (hours > 0)
|
|
315
|
+
return `${hours}h ${minutes % 60}m ${seconds % 60}s`;
|
|
316
|
+
if (minutes > 0)
|
|
317
|
+
return `${minutes}m ${seconds % 60}s`;
|
|
318
|
+
return `${seconds}s`;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Add a protected term that won't be compressed
|
|
322
|
+
*/
|
|
323
|
+
addProtectedTerm(term) {
|
|
324
|
+
this.compressor.addProtectedTerm(term);
|
|
325
|
+
if (!this.config.protectedTerms.includes(term)) {
|
|
326
|
+
this.config.protectedTerms.push(term);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Get session ID
|
|
331
|
+
*/
|
|
332
|
+
getSessionId() {
|
|
333
|
+
return this.config.sessionId;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Reset session statistics (keeps configuration)
|
|
337
|
+
*/
|
|
338
|
+
reset() {
|
|
339
|
+
this.stats = this.initStats();
|
|
340
|
+
this.activeDocument = null;
|
|
341
|
+
this.emit('reset');
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
exports.SonaSession = SonaSession;
|
|
345
|
+
/**
|
|
346
|
+
* Create a new document processing session
|
|
347
|
+
*/
|
|
348
|
+
function createSession(config) {
|
|
349
|
+
return new SonaSession(config);
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sona-code",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "AI coding agent for your terminal. Fast, capable, cost-effective.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"sona": "dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc && chmod +x dist/cli.js",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"test": "node --test",
|
|
14
|
+
"prepublishOnly": "npm run build"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"ai",
|
|
18
|
+
"coding",
|
|
19
|
+
"assistant",
|
|
20
|
+
"agent",
|
|
21
|
+
"cli",
|
|
22
|
+
"terminal",
|
|
23
|
+
"deepseek",
|
|
24
|
+
"llm",
|
|
25
|
+
"developer-tools"
|
|
26
|
+
],
|
|
27
|
+
"author": "SONA Contributors",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/ZeradamK/sona-code.git"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://github.com/ZeradamK/sona-code#readme",
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://github.com/ZeradamK/sona-code/issues"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=18.0.0"
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"dist",
|
|
42
|
+
"README.md"
|
|
43
|
+
],
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"commander": "^12.0.0"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/node": "^20.11.0",
|
|
49
|
+
"typescript": "^5.3.3"
|
|
50
|
+
}
|
|
51
|
+
}
|