@lantanios/agentic-server 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/.env.example +16 -0
- package/dist/config.d.ts +18 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +40 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +137 -0
- package/dist/index.js.map +1 -0
- package/dist/namespaces/audio.d.ts +8 -0
- package/dist/namespaces/audio.d.ts.map +1 -0
- package/dist/namespaces/audio.js +126 -0
- package/dist/namespaces/audio.js.map +1 -0
- package/dist/namespaces/events.d.ts +3 -0
- package/dist/namespaces/events.d.ts.map +1 -0
- package/dist/namespaces/events.js +125 -0
- package/dist/namespaces/events.js.map +1 -0
- package/dist/namespaces/index.d.ts +4 -0
- package/dist/namespaces/index.d.ts.map +1 -0
- package/dist/namespaces/index.js +10 -0
- package/dist/namespaces/index.js.map +1 -0
- package/dist/namespaces/memory.d.ts +3 -0
- package/dist/namespaces/memory.d.ts.map +1 -0
- package/dist/namespaces/memory.js +139 -0
- package/dist/namespaces/memory.js.map +1 -0
- package/package.json +35 -0
- package/src/config.ts +40 -0
- package/src/index.ts +143 -0
- package/src/namespaces/audio.ts +142 -0
- package/src/namespaces/events.ts +144 -0
- package/src/namespaces/index.ts +3 -0
- package/src/namespaces/memory.ts +149 -0
- package/tsconfig.json +13 -0
- package/tsconfig.tsbuildinfo +1 -0
package/.env.example
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Server
|
|
2
|
+
PORT=3847
|
|
3
|
+
CORS_ORIGINS=http://localhost:3000,http://localhost:5173
|
|
4
|
+
|
|
5
|
+
# MongoDB
|
|
6
|
+
MONGODB_URI=mongodb+srv://user:pass@cluster.mongodb.net/Agentic?retryWrites=true&w=majority
|
|
7
|
+
|
|
8
|
+
# OpenAI (for embeddings + TTS fallback)
|
|
9
|
+
OPENAI_API_KEY=sk-...
|
|
10
|
+
|
|
11
|
+
# Local audio server (your PC)
|
|
12
|
+
LOCAL_STT_ENDPOINT=http://localhost:8001
|
|
13
|
+
LOCAL_TTS_ENDPOINT=http://localhost:8001
|
|
14
|
+
|
|
15
|
+
# Cloud fallbacks (optional)
|
|
16
|
+
DEEPGRAM_API_KEY=
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const config: {
|
|
2
|
+
port: number;
|
|
3
|
+
mongoUri: string;
|
|
4
|
+
openaiApiKey: string;
|
|
5
|
+
corsOrigins: string[];
|
|
6
|
+
audio: {
|
|
7
|
+
stt: {
|
|
8
|
+
localEndpoint: string;
|
|
9
|
+
deepgramApiKey: string;
|
|
10
|
+
};
|
|
11
|
+
tts: {
|
|
12
|
+
localEndpoint: string;
|
|
13
|
+
openaiApiKey: string;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export declare function validateConfig(): string[];
|
|
18
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;CAuBlB,CAAC;AAEF,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAWzC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.config = void 0;
|
|
7
|
+
exports.validateConfig = validateConfig;
|
|
8
|
+
const dotenv_1 = __importDefault(require("dotenv"));
|
|
9
|
+
dotenv_1.default.config();
|
|
10
|
+
exports.config = {
|
|
11
|
+
port: parseInt(process.env.PORT || '3847', 10),
|
|
12
|
+
// MongoDB
|
|
13
|
+
mongoUri: process.env.MONGODB_URI || '',
|
|
14
|
+
// OpenAI (for embeddings)
|
|
15
|
+
openaiApiKey: process.env.OPENAI_API_KEY || '',
|
|
16
|
+
// CORS
|
|
17
|
+
corsOrigins: process.env.CORS_ORIGINS?.split(',') || ['http://localhost:3000'],
|
|
18
|
+
// Audio providers
|
|
19
|
+
audio: {
|
|
20
|
+
stt: {
|
|
21
|
+
localEndpoint: process.env.LOCAL_STT_ENDPOINT || 'http://localhost:8001',
|
|
22
|
+
deepgramApiKey: process.env.DEEPGRAM_API_KEY || '',
|
|
23
|
+
},
|
|
24
|
+
tts: {
|
|
25
|
+
localEndpoint: process.env.LOCAL_TTS_ENDPOINT || 'http://localhost:8001',
|
|
26
|
+
openaiApiKey: process.env.OPENAI_API_KEY || '',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
function validateConfig() {
|
|
31
|
+
const errors = [];
|
|
32
|
+
if (!exports.config.mongoUri) {
|
|
33
|
+
errors.push('MONGODB_URI is required');
|
|
34
|
+
}
|
|
35
|
+
if (!exports.config.openaiApiKey) {
|
|
36
|
+
errors.push('OPENAI_API_KEY is required for embeddings');
|
|
37
|
+
}
|
|
38
|
+
return errors;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;AA4BA,wCAWC;AAvCD,oDAA4B;AAC5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEH,QAAA,MAAM,GAAG;IACpB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC;IAE9C,UAAU;IACV,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;IAEvC,0BAA0B;IAC1B,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE;IAE9C,OAAO;IACP,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC;IAE9E,kBAAkB;IAClB,KAAK,EAAE;QACL,GAAG,EAAE;YACH,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,uBAAuB;YACxE,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE;SACnD;QACD,GAAG,EAAE;YACH,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,uBAAuB;YACxE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE;SAC/C;KACF;CACF,CAAC;AAEF,SAAgB,cAAc;IAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,cAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,CAAC,cAAM,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Application } from 'express';
|
|
2
|
+
import { Server } from 'socket.io';
|
|
3
|
+
declare const app: Application;
|
|
4
|
+
declare const httpServer: import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
|
|
5
|
+
declare const io: Server<import("socket.io").DefaultEventsMap, import("socket.io").DefaultEventsMap, import("socket.io").DefaultEventsMap, any>;
|
|
6
|
+
export { io, app, httpServer };
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAOnC,QAAA,MAAM,GAAG,EAAE,WAAuB,CAAC;AAInC,QAAA,MAAM,UAAU,oGAAoB,CAAC;AAErC,QAAA,MAAM,EAAE,+HAMN,CAAC;AAwHH,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.httpServer = exports.app = exports.io = void 0;
|
|
7
|
+
const express_1 = __importDefault(require("express"));
|
|
8
|
+
const cors_1 = __importDefault(require("cors"));
|
|
9
|
+
const http_1 = require("http");
|
|
10
|
+
const socket_io_1 = require("socket.io");
|
|
11
|
+
const mongoose_1 = __importDefault(require("mongoose"));
|
|
12
|
+
const config_1 = require("./config");
|
|
13
|
+
const namespaces_1 = require("./namespaces");
|
|
14
|
+
const agentic_audio_1 = require("@lantanios/agentic-audio");
|
|
15
|
+
const app = (0, express_1.default)();
|
|
16
|
+
exports.app = app;
|
|
17
|
+
app.use((0, cors_1.default)({ origin: config_1.config.corsOrigins }));
|
|
18
|
+
app.use(express_1.default.json());
|
|
19
|
+
const httpServer = (0, http_1.createServer)(app);
|
|
20
|
+
exports.httpServer = httpServer;
|
|
21
|
+
const io = new socket_io_1.Server(httpServer, {
|
|
22
|
+
cors: {
|
|
23
|
+
origin: config_1.config.corsOrigins,
|
|
24
|
+
methods: ['GET', 'POST'],
|
|
25
|
+
},
|
|
26
|
+
maxHttpBufferSize: 10 * 1024 * 1024, // 10MB for audio chunks
|
|
27
|
+
});
|
|
28
|
+
exports.io = io;
|
|
29
|
+
// Create audio service with priority-based providers
|
|
30
|
+
function createAudioService() {
|
|
31
|
+
const audioConfig = {
|
|
32
|
+
stt: {
|
|
33
|
+
providers: [
|
|
34
|
+
{
|
|
35
|
+
name: 'local-whisper',
|
|
36
|
+
type: 'local-whisper',
|
|
37
|
+
priority: 1,
|
|
38
|
+
endpoint: config_1.config.audio.stt.localEndpoint,
|
|
39
|
+
model: 'large-v3',
|
|
40
|
+
timeout: 30000,
|
|
41
|
+
},
|
|
42
|
+
...(config_1.config.audio.stt.deepgramApiKey
|
|
43
|
+
? [{
|
|
44
|
+
name: 'deepgram',
|
|
45
|
+
type: 'deepgram',
|
|
46
|
+
priority: 2,
|
|
47
|
+
apiKey: config_1.config.audio.stt.deepgramApiKey,
|
|
48
|
+
timeout: 30000,
|
|
49
|
+
}]
|
|
50
|
+
: []),
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
tts: {
|
|
54
|
+
providers: [
|
|
55
|
+
{
|
|
56
|
+
name: 'local-piper',
|
|
57
|
+
type: 'local-piper',
|
|
58
|
+
priority: 1,
|
|
59
|
+
endpoint: config_1.config.audio.tts.localEndpoint,
|
|
60
|
+
voice: 'en_US-lessac-medium',
|
|
61
|
+
timeout: 30000,
|
|
62
|
+
},
|
|
63
|
+
...(config_1.config.audio.tts.openaiApiKey
|
|
64
|
+
? [{
|
|
65
|
+
name: 'openai-tts',
|
|
66
|
+
type: 'openai-tts',
|
|
67
|
+
priority: 2,
|
|
68
|
+
apiKey: config_1.config.audio.tts.openaiApiKey,
|
|
69
|
+
voice: 'nova',
|
|
70
|
+
}]
|
|
71
|
+
: []),
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
return new agentic_audio_1.AudioService(audioConfig);
|
|
76
|
+
}
|
|
77
|
+
// Health check
|
|
78
|
+
app.get('/health', async (_req, res) => {
|
|
79
|
+
const mongoStatus = mongoose_1.default.connection.readyState === 1 ? 'connected' : 'disconnected';
|
|
80
|
+
res.json({
|
|
81
|
+
status: 'ok',
|
|
82
|
+
timestamp: new Date().toISOString(),
|
|
83
|
+
mongodb: mongoStatus,
|
|
84
|
+
sockets: io.engine.clientsCount,
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
// Provider status
|
|
88
|
+
app.get('/providers', async (_req, res) => {
|
|
89
|
+
try {
|
|
90
|
+
const audioService = createAudioService();
|
|
91
|
+
const status = await audioService.checkAllProviders();
|
|
92
|
+
res.json({ status: 'ok', providers: status });
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
res.status(500).json({ status: 'error', error: error.message });
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
async function start() {
|
|
99
|
+
// Validate config
|
|
100
|
+
const errors = (0, config_1.validateConfig)();
|
|
101
|
+
if (errors.length > 0) {
|
|
102
|
+
console.error('Configuration errors:');
|
|
103
|
+
errors.forEach(e => console.error(` - ${e}`));
|
|
104
|
+
console.log('\nStarting anyway with available features...');
|
|
105
|
+
}
|
|
106
|
+
// Connect to MongoDB
|
|
107
|
+
if (config_1.config.mongoUri) {
|
|
108
|
+
try {
|
|
109
|
+
console.log('Connecting to MongoDB...');
|
|
110
|
+
await mongoose_1.default.connect(config_1.config.mongoUri);
|
|
111
|
+
console.log('✓ Connected to MongoDB');
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
console.error('✗ MongoDB connection failed:', err);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Create audio service
|
|
118
|
+
const audioService = createAudioService();
|
|
119
|
+
// Setup Socket.IO namespaces
|
|
120
|
+
(0, namespaces_1.setupMemoryNamespace)(io.of('/memory'));
|
|
121
|
+
(0, namespaces_1.setupAudioNamespace)(io.of('/audio'), { audioService });
|
|
122
|
+
(0, namespaces_1.setupEventsNamespace)(io.of('/events'));
|
|
123
|
+
console.log('✓ Socket.IO namespaces configured');
|
|
124
|
+
// Start server
|
|
125
|
+
httpServer.listen(config_1.config.port, () => {
|
|
126
|
+
console.log(`\n✓ @lantanios/agentic-server running on http://localhost:${config_1.config.port}`);
|
|
127
|
+
console.log('\nNamespaces:');
|
|
128
|
+
console.log(' /memory - Memory CRUD + vector search');
|
|
129
|
+
console.log(' /audio - STT/TTS streaming');
|
|
130
|
+
console.log(' /events - Pub/sub + direct messaging');
|
|
131
|
+
console.log('\nREST endpoints:');
|
|
132
|
+
console.log(' GET /health - Health check');
|
|
133
|
+
console.log(' GET /providers - Audio provider status');
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
start().catch(console.error);
|
|
137
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Namespace } from 'socket.io';
|
|
2
|
+
import { AudioService } from '@lantanios/agentic-audio';
|
|
3
|
+
interface AudioNamespaceOptions {
|
|
4
|
+
audioService: AudioService;
|
|
5
|
+
}
|
|
6
|
+
export declare function setupAudioNamespace(io: Namespace, options: AudioNamespaceOptions): void;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=audio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/namespaces/audio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,UAAU,qBAAqB;IAC7B,YAAY,EAAE,YAAY,CAAC;CAC5B;AAMD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,qBAAqB,QAkIhF"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupAudioNamespace = setupAudioNamespace;
|
|
4
|
+
function getAgentId(socket) {
|
|
5
|
+
return socket.data.agentId;
|
|
6
|
+
}
|
|
7
|
+
function setupAudioNamespace(io, options) {
|
|
8
|
+
const { audioService } = options;
|
|
9
|
+
io.use((socket, next) => {
|
|
10
|
+
const agentId = socket.handshake.auth.agentId;
|
|
11
|
+
if (!agentId) {
|
|
12
|
+
return next(new Error('agentId is required'));
|
|
13
|
+
}
|
|
14
|
+
socket.data.agentId = agentId;
|
|
15
|
+
socket.data.audioBuffer = [];
|
|
16
|
+
socket.data.isRecording = false;
|
|
17
|
+
next();
|
|
18
|
+
});
|
|
19
|
+
io.on('connection', (socket) => {
|
|
20
|
+
const agentId = getAgentId(socket);
|
|
21
|
+
console.log(`[audio] Agent connected: ${agentId}`);
|
|
22
|
+
// Start audio stream
|
|
23
|
+
socket.on('stream:start', (options, callback) => {
|
|
24
|
+
socket.data.audioBuffer = [];
|
|
25
|
+
socket.data.isRecording = true;
|
|
26
|
+
console.log(`[audio] Stream started for ${agentId}`);
|
|
27
|
+
callback?.({ success: true });
|
|
28
|
+
});
|
|
29
|
+
// Receive audio chunk
|
|
30
|
+
socket.on('stream:chunk', (chunk) => {
|
|
31
|
+
if (!socket.data.isRecording)
|
|
32
|
+
return;
|
|
33
|
+
const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
34
|
+
socket.data.audioBuffer.push(buffer);
|
|
35
|
+
});
|
|
36
|
+
// Stop stream and transcribe
|
|
37
|
+
socket.on('stream:stop', async (options, callback) => {
|
|
38
|
+
if (!socket.data.isRecording) {
|
|
39
|
+
return callback?.({ success: false, error: 'Not recording' });
|
|
40
|
+
}
|
|
41
|
+
socket.data.isRecording = false;
|
|
42
|
+
const audioBuffer = socket.data.audioBuffer;
|
|
43
|
+
const audio = Buffer.concat(audioBuffer);
|
|
44
|
+
socket.data.audioBuffer = [];
|
|
45
|
+
if (audio.length === 0) {
|
|
46
|
+
return callback?.({ success: false, error: 'No audio data' });
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
console.log(`[audio] Transcribing ${audio.length} bytes for ${agentId}`);
|
|
50
|
+
const result = await audioService.stt.transcribe(audio, {
|
|
51
|
+
language: options?.language,
|
|
52
|
+
provider: options?.provider,
|
|
53
|
+
});
|
|
54
|
+
callback?.({ success: true, result });
|
|
55
|
+
socket.emit('transcription', result);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.error(`[audio] Transcription error:`, error);
|
|
59
|
+
callback?.({ success: false, error: error.message });
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
// One-shot transcription
|
|
63
|
+
socket.on('transcribe', async (data, callback) => {
|
|
64
|
+
try {
|
|
65
|
+
const audio = Buffer.isBuffer(data.audio) ? data.audio : Buffer.from(data.audio);
|
|
66
|
+
const result = await audioService.stt.transcribe(audio, {
|
|
67
|
+
language: data.language,
|
|
68
|
+
provider: data.provider,
|
|
69
|
+
});
|
|
70
|
+
callback({ success: true, result });
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
callback({ success: false, error: error.message });
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
// Text to speech
|
|
77
|
+
socket.on('speak', async (data, callback) => {
|
|
78
|
+
try {
|
|
79
|
+
const audio = await audioService.tts.speak(data.text, {
|
|
80
|
+
voice: data.voice,
|
|
81
|
+
speed: data.speed,
|
|
82
|
+
format: data.format || 'mp3',
|
|
83
|
+
provider: data.provider,
|
|
84
|
+
});
|
|
85
|
+
callback({ success: true, audio });
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
callback({ success: false, error: error.message });
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
// Stream TTS
|
|
92
|
+
socket.on('speak:stream', async (data) => {
|
|
93
|
+
try {
|
|
94
|
+
socket.emit('speak:start');
|
|
95
|
+
for await (const chunk of audioService.tts.speakStream(data.text, {
|
|
96
|
+
voice: data.voice,
|
|
97
|
+
speed: data.speed,
|
|
98
|
+
format: data.format || 'mp3',
|
|
99
|
+
provider: data.provider,
|
|
100
|
+
})) {
|
|
101
|
+
socket.emit('speak:chunk', chunk);
|
|
102
|
+
}
|
|
103
|
+
socket.emit('speak:end');
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
socket.emit('speak:error', { error: error.message });
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
// Check provider status
|
|
110
|
+
socket.on('providers:status', async (callback) => {
|
|
111
|
+
try {
|
|
112
|
+
const status = await audioService.checkAllProviders();
|
|
113
|
+
callback({ success: true, status });
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
callback({ success: false, error: error.message });
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
socket.on('disconnect', () => {
|
|
120
|
+
socket.data.isRecording = false;
|
|
121
|
+
socket.data.audioBuffer = [];
|
|
122
|
+
console.log(`[audio] Agent disconnected: ${agentId}`);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=audio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.js","sourceRoot":"","sources":["../../src/namespaces/audio.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/namespaces/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,WAAW,CAAC;AAgB9C,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,SAAS,QA+HjD"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupEventsNamespace = setupEventsNamespace;
|
|
4
|
+
// Simple pub/sub for cross-agent events
|
|
5
|
+
const channels = new Map();
|
|
6
|
+
function getAgentId(socket) {
|
|
7
|
+
return socket.data.agentId;
|
|
8
|
+
}
|
|
9
|
+
function getSubscriptions(socket) {
|
|
10
|
+
if (!socket.data.subscriptions) {
|
|
11
|
+
socket.data.subscriptions = new Set();
|
|
12
|
+
}
|
|
13
|
+
return socket.data.subscriptions;
|
|
14
|
+
}
|
|
15
|
+
function setupEventsNamespace(io) {
|
|
16
|
+
io.use((socket, next) => {
|
|
17
|
+
const agentId = socket.handshake.auth.agentId;
|
|
18
|
+
if (!agentId) {
|
|
19
|
+
return next(new Error('agentId is required'));
|
|
20
|
+
}
|
|
21
|
+
socket.data.agentId = agentId;
|
|
22
|
+
socket.data.subscriptions = new Set();
|
|
23
|
+
next();
|
|
24
|
+
});
|
|
25
|
+
io.on('connection', (socket) => {
|
|
26
|
+
const agentId = getAgentId(socket);
|
|
27
|
+
console.log(`[events] Agent connected: ${agentId}`);
|
|
28
|
+
// Subscribe to a channel
|
|
29
|
+
socket.on('subscribe', (channel, callback) => {
|
|
30
|
+
if (!channels.has(channel)) {
|
|
31
|
+
channels.set(channel, new Set());
|
|
32
|
+
}
|
|
33
|
+
channels.get(channel).add(socket);
|
|
34
|
+
getSubscriptions(socket).add(channel);
|
|
35
|
+
console.log(`[events] ${agentId} subscribed to ${channel}`);
|
|
36
|
+
callback?.({ success: true, channel });
|
|
37
|
+
});
|
|
38
|
+
// Unsubscribe from a channel
|
|
39
|
+
socket.on('unsubscribe', (channel, callback) => {
|
|
40
|
+
channels.get(channel)?.delete(socket);
|
|
41
|
+
getSubscriptions(socket).delete(channel);
|
|
42
|
+
console.log(`[events] ${agentId} unsubscribed from ${channel}`);
|
|
43
|
+
callback?.({ success: true, channel });
|
|
44
|
+
});
|
|
45
|
+
// Publish to a channel
|
|
46
|
+
socket.on('publish', (data, callback) => {
|
|
47
|
+
const { channel, event, payload } = data;
|
|
48
|
+
const subscribers = channels.get(channel);
|
|
49
|
+
if (!subscribers || subscribers.size === 0) {
|
|
50
|
+
return callback?.({ success: true, delivered: 0 });
|
|
51
|
+
}
|
|
52
|
+
let delivered = 0;
|
|
53
|
+
for (const subscriber of subscribers) {
|
|
54
|
+
if (subscriber.id !== socket.id) { // Don't send to self
|
|
55
|
+
subscriber.emit('event', {
|
|
56
|
+
channel,
|
|
57
|
+
event,
|
|
58
|
+
payload,
|
|
59
|
+
from: agentId,
|
|
60
|
+
timestamp: Date.now(),
|
|
61
|
+
});
|
|
62
|
+
delivered++;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
console.log(`[events] ${agentId} published ${event} to ${channel} (${delivered} recipients)`);
|
|
66
|
+
callback?.({ success: true, delivered });
|
|
67
|
+
});
|
|
68
|
+
// Broadcast to all connected agents (except self)
|
|
69
|
+
socket.on('broadcast', (data, callback) => {
|
|
70
|
+
const { event, payload } = data;
|
|
71
|
+
let delivered = 0;
|
|
72
|
+
for (const [, s] of io.sockets) {
|
|
73
|
+
if (s.id !== socket.id) {
|
|
74
|
+
s.emit('broadcast', {
|
|
75
|
+
event,
|
|
76
|
+
payload,
|
|
77
|
+
from: agentId,
|
|
78
|
+
timestamp: Date.now(),
|
|
79
|
+
});
|
|
80
|
+
delivered++;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
console.log(`[events] ${agentId} broadcast ${event} (${delivered} recipients)`);
|
|
84
|
+
callback?.({ success: true, delivered });
|
|
85
|
+
});
|
|
86
|
+
// Direct message to another agent
|
|
87
|
+
socket.on('dm', (data, callback) => {
|
|
88
|
+
const { to, event, payload } = data;
|
|
89
|
+
let delivered = false;
|
|
90
|
+
for (const [, s] of io.sockets) {
|
|
91
|
+
if (getAgentId(s) === to) {
|
|
92
|
+
s.emit('dm', {
|
|
93
|
+
event,
|
|
94
|
+
payload,
|
|
95
|
+
from: agentId,
|
|
96
|
+
timestamp: Date.now(),
|
|
97
|
+
});
|
|
98
|
+
delivered = true;
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
console.log(`[events] ${agentId} DM to ${to}: ${event} (${delivered ? 'delivered' : 'not found'})`);
|
|
103
|
+
callback?.({ success: delivered, delivered: delivered ? 1 : 0 });
|
|
104
|
+
});
|
|
105
|
+
// List active agents
|
|
106
|
+
socket.on('agents:list', (callback) => {
|
|
107
|
+
const agents = [];
|
|
108
|
+
for (const [, s] of io.sockets) {
|
|
109
|
+
const id = getAgentId(s);
|
|
110
|
+
if (id) {
|
|
111
|
+
agents.push(id);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
callback?.({ success: true, agents });
|
|
115
|
+
});
|
|
116
|
+
socket.on('disconnect', () => {
|
|
117
|
+
// Cleanup subscriptions
|
|
118
|
+
for (const channel of getSubscriptions(socket)) {
|
|
119
|
+
channels.get(channel)?.delete(socket);
|
|
120
|
+
}
|
|
121
|
+
console.log(`[events] Agent disconnected: ${agentId}`);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/namespaces/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/namespaces/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupEventsNamespace = exports.setupAudioNamespace = exports.setupMemoryNamespace = void 0;
|
|
4
|
+
var memory_1 = require("./memory");
|
|
5
|
+
Object.defineProperty(exports, "setupMemoryNamespace", { enumerable: true, get: function () { return memory_1.setupMemoryNamespace; } });
|
|
6
|
+
var audio_1 = require("./audio");
|
|
7
|
+
Object.defineProperty(exports, "setupAudioNamespace", { enumerable: true, get: function () { return audio_1.setupAudioNamespace; } });
|
|
8
|
+
var events_1 = require("./events");
|
|
9
|
+
Object.defineProperty(exports, "setupEventsNamespace", { enumerable: true, get: function () { return events_1.setupEventsNamespace; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/namespaces/index.ts"],"names":[],"mappings":";;;AAAA,mCAAgD;AAAvC,8GAAA,oBAAoB,OAAA;AAC7B,iCAA8C;AAArC,4GAAA,mBAAmB,OAAA;AAC5B,mCAAgD;AAAvC,8GAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/namespaces/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,WAAW,CAAC;AAgB9C,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,SAAS,QAoIjD"}
|