@portel/photon 1.1.0 → 1.3.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 +279 -65
- package/dist/cli-alias.d.ts +21 -0
- package/dist/cli-alias.d.ts.map +1 -0
- package/dist/cli-alias.js +227 -0
- package/dist/cli-alias.js.map +1 -0
- package/dist/cli.js +262 -135
- package/dist/cli.js.map +1 -1
- package/dist/daemon/client.d.ts +15 -0
- package/dist/daemon/client.d.ts.map +1 -0
- package/dist/daemon/client.js +126 -0
- package/dist/daemon/client.js.map +1 -0
- package/dist/daemon/manager.d.ts +32 -0
- package/dist/daemon/manager.d.ts.map +1 -0
- package/dist/daemon/manager.js +155 -0
- package/dist/daemon/manager.js.map +1 -0
- package/dist/daemon/protocol.d.ts +48 -0
- package/dist/daemon/protocol.d.ts.map +1 -0
- package/dist/daemon/protocol.js +7 -0
- package/dist/daemon/protocol.js.map +1 -0
- package/dist/daemon/server.d.ts +12 -0
- package/dist/daemon/server.d.ts.map +1 -0
- package/dist/daemon/server.js +215 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/daemon/session-manager.d.ts +46 -0
- package/dist/daemon/session-manager.d.ts.map +1 -0
- package/dist/daemon/session-manager.js +120 -0
- package/dist/daemon/session-manager.js.map +1 -0
- package/dist/photon-cli-runner.d.ts +15 -0
- package/dist/photon-cli-runner.d.ts.map +1 -0
- package/dist/photon-cli-runner.js +791 -0
- package/dist/photon-cli-runner.js.map +1 -0
- package/dist/photon-doc-extractor.d.ts +10 -0
- package/dist/photon-doc-extractor.d.ts.map +1 -1
- package/dist/photon-doc-extractor.js +88 -8
- package/dist/photon-doc-extractor.js.map +1 -1
- package/dist/schema-extractor.d.ts +27 -0
- package/dist/schema-extractor.d.ts.map +1 -1
- package/dist/schema-extractor.js +333 -2
- package/dist/schema-extractor.js.map +1 -1
- package/dist/template-manager.js +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon Protocol Types
|
|
3
|
+
*
|
|
4
|
+
* Defines message types for IPC communication between CLI client and daemon server
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Message from CLI client to daemon server
|
|
8
|
+
*/
|
|
9
|
+
export interface DaemonRequest {
|
|
10
|
+
type: 'command' | 'ping' | 'shutdown';
|
|
11
|
+
id: string;
|
|
12
|
+
sessionId?: string;
|
|
13
|
+
clientType?: 'cli' | 'mcp' | 'code-mode';
|
|
14
|
+
method?: string;
|
|
15
|
+
args?: Record<string, any>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Response from daemon server to CLI client
|
|
19
|
+
*/
|
|
20
|
+
export interface DaemonResponse {
|
|
21
|
+
type: 'result' | 'error' | 'pong';
|
|
22
|
+
id: string;
|
|
23
|
+
success?: boolean;
|
|
24
|
+
data?: any;
|
|
25
|
+
error?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Daemon status information
|
|
29
|
+
*/
|
|
30
|
+
export interface DaemonStatus {
|
|
31
|
+
running: boolean;
|
|
32
|
+
pid?: number;
|
|
33
|
+
startTime?: number;
|
|
34
|
+
lastActivity?: number;
|
|
35
|
+
photonName: string;
|
|
36
|
+
activeSessions?: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Session information
|
|
40
|
+
*/
|
|
41
|
+
export interface PhotonSession {
|
|
42
|
+
id: string;
|
|
43
|
+
instance: any;
|
|
44
|
+
createdAt: number;
|
|
45
|
+
lastActivity: number;
|
|
46
|
+
clientType?: string;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/daemon/protocol.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,WAAW,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,GAAG,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/daemon/protocol.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Daemon Server
|
|
4
|
+
*
|
|
5
|
+
* Runs as a background process for stateful photons
|
|
6
|
+
* - Loads and initializes the photon
|
|
7
|
+
* - Listens on Unix socket / named pipe
|
|
8
|
+
* - Handles command requests
|
|
9
|
+
* - Manages idle timeout and shutdown
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/daemon/server.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Daemon Server
|
|
4
|
+
*
|
|
5
|
+
* Runs as a background process for stateful photons
|
|
6
|
+
* - Loads and initializes the photon
|
|
7
|
+
* - Listens on Unix socket / named pipe
|
|
8
|
+
* - Handles command requests
|
|
9
|
+
* - Manages idle timeout and shutdown
|
|
10
|
+
*/
|
|
11
|
+
import * as net from 'net';
|
|
12
|
+
import * as fs from 'fs';
|
|
13
|
+
import { SessionManager } from './session-manager.js';
|
|
14
|
+
// Command line args: photonName photonPath socketPath
|
|
15
|
+
const photonName = process.argv[2];
|
|
16
|
+
const photonPath = process.argv[3];
|
|
17
|
+
const socketPath = process.argv[4];
|
|
18
|
+
if (!photonName || !photonPath || !socketPath) {
|
|
19
|
+
console.error('[daemon-server] Missing required arguments');
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
let sessionManager = null;
|
|
23
|
+
let idleTimeout = 600000; // 10 minutes default
|
|
24
|
+
let idleTimer = null;
|
|
25
|
+
/**
|
|
26
|
+
* Initialize session manager
|
|
27
|
+
*/
|
|
28
|
+
async function initializeSessionManager() {
|
|
29
|
+
try {
|
|
30
|
+
console.error(`[daemon-server] Initializing session manager for: ${photonName}`);
|
|
31
|
+
sessionManager = new SessionManager(photonPath, photonName, idleTimeout);
|
|
32
|
+
console.error(`[daemon-server] Session manager initialized`);
|
|
33
|
+
console.error(`[daemon-server] Session timeout: ${idleTimeout}ms`);
|
|
34
|
+
// Start idle timer if timeout is set
|
|
35
|
+
if (idleTimeout > 0) {
|
|
36
|
+
startIdleTimer();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.error(`[daemon-server] Failed to initialize session manager: ${error.message}`);
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Start idle timer
|
|
46
|
+
*/
|
|
47
|
+
function startIdleTimer() {
|
|
48
|
+
if (idleTimer) {
|
|
49
|
+
clearTimeout(idleTimer);
|
|
50
|
+
}
|
|
51
|
+
if (idleTimeout <= 0) {
|
|
52
|
+
return; // Idle timeout disabled
|
|
53
|
+
}
|
|
54
|
+
idleTimer = setTimeout(() => {
|
|
55
|
+
if (!sessionManager)
|
|
56
|
+
return;
|
|
57
|
+
const lastActivity = sessionManager.getLastActivity();
|
|
58
|
+
const idleTime = Date.now() - lastActivity;
|
|
59
|
+
if (idleTime >= idleTimeout) {
|
|
60
|
+
console.error(`[daemon-server] Idle timeout reached (${idleTime}ms). Shutting down.`);
|
|
61
|
+
shutdown();
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// Restart timer with remaining time
|
|
65
|
+
startIdleTimer();
|
|
66
|
+
}
|
|
67
|
+
}, idleTimeout);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Reset idle timer (called on each activity)
|
|
71
|
+
*/
|
|
72
|
+
function resetIdleTimer() {
|
|
73
|
+
startIdleTimer();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Handle incoming command request
|
|
77
|
+
*/
|
|
78
|
+
async function handleRequest(request) {
|
|
79
|
+
resetIdleTimer();
|
|
80
|
+
if (request.type === 'ping') {
|
|
81
|
+
return {
|
|
82
|
+
type: 'pong',
|
|
83
|
+
id: request.id,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
if (request.type === 'shutdown') {
|
|
87
|
+
shutdown();
|
|
88
|
+
return {
|
|
89
|
+
type: 'result',
|
|
90
|
+
id: request.id,
|
|
91
|
+
success: true,
|
|
92
|
+
data: { message: 'Shutting down' },
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
if (request.type === 'command') {
|
|
96
|
+
if (!request.method) {
|
|
97
|
+
return {
|
|
98
|
+
type: 'error',
|
|
99
|
+
id: request.id,
|
|
100
|
+
error: 'Method name required',
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (!sessionManager) {
|
|
104
|
+
return {
|
|
105
|
+
type: 'error',
|
|
106
|
+
id: request.id,
|
|
107
|
+
error: 'Session manager not initialized',
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
try {
|
|
111
|
+
// Get or create session for this client
|
|
112
|
+
const session = await sessionManager.getOrCreateSession(request.sessionId, request.clientType);
|
|
113
|
+
console.error(`[daemon-server] Executing: ${request.method} (session: ${session.id})`);
|
|
114
|
+
// Execute method on session's photon instance using loader
|
|
115
|
+
const result = await sessionManager.loader.executeTool(session.instance, request.method, request.args || {});
|
|
116
|
+
return {
|
|
117
|
+
type: 'result',
|
|
118
|
+
id: request.id,
|
|
119
|
+
success: true,
|
|
120
|
+
data: result,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.error(`[daemon-server] Error executing ${request.method}: ${error.message}`);
|
|
125
|
+
return {
|
|
126
|
+
type: 'error',
|
|
127
|
+
id: request.id,
|
|
128
|
+
error: error.message,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
type: 'error',
|
|
134
|
+
id: request.id,
|
|
135
|
+
error: `Unknown request type: ${request.type}`,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Start IPC server
|
|
140
|
+
*/
|
|
141
|
+
function startServer() {
|
|
142
|
+
const server = net.createServer((socket) => {
|
|
143
|
+
console.error('[daemon-server] Client connected');
|
|
144
|
+
let buffer = '';
|
|
145
|
+
socket.on('data', async (chunk) => {
|
|
146
|
+
buffer += chunk.toString();
|
|
147
|
+
// Process complete JSON messages (newline-delimited)
|
|
148
|
+
const lines = buffer.split('\n');
|
|
149
|
+
buffer = lines.pop() || ''; // Keep incomplete line in buffer
|
|
150
|
+
for (const line of lines) {
|
|
151
|
+
if (!line.trim())
|
|
152
|
+
continue;
|
|
153
|
+
try {
|
|
154
|
+
const request = JSON.parse(line);
|
|
155
|
+
const response = await handleRequest(request);
|
|
156
|
+
socket.write(JSON.stringify(response) + '\n');
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
console.error(`[daemon-server] Error processing request: ${error.message}`);
|
|
160
|
+
socket.write(JSON.stringify({
|
|
161
|
+
type: 'error',
|
|
162
|
+
id: 'unknown',
|
|
163
|
+
error: error.message,
|
|
164
|
+
}) + '\n');
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
socket.on('end', () => {
|
|
169
|
+
console.error('[daemon-server] Client disconnected');
|
|
170
|
+
});
|
|
171
|
+
socket.on('error', (error) => {
|
|
172
|
+
console.error(`[daemon-server] Socket error: ${error.message}`);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
server.listen(socketPath, () => {
|
|
176
|
+
console.error(`[daemon-server] Listening on ${socketPath}`);
|
|
177
|
+
console.error(`[daemon-server] PID: ${process.pid}`);
|
|
178
|
+
});
|
|
179
|
+
server.on('error', (error) => {
|
|
180
|
+
console.error(`[daemon-server] Server error: ${error.message}`);
|
|
181
|
+
process.exit(1);
|
|
182
|
+
});
|
|
183
|
+
// Graceful shutdown handlers
|
|
184
|
+
process.on('SIGTERM', shutdown);
|
|
185
|
+
process.on('SIGINT', shutdown);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Shutdown daemon
|
|
189
|
+
*/
|
|
190
|
+
function shutdown() {
|
|
191
|
+
console.error('[daemon-server] Shutting down...');
|
|
192
|
+
if (idleTimer) {
|
|
193
|
+
clearTimeout(idleTimer);
|
|
194
|
+
}
|
|
195
|
+
// Destroy session manager
|
|
196
|
+
if (sessionManager) {
|
|
197
|
+
sessionManager.destroy();
|
|
198
|
+
}
|
|
199
|
+
// Clean up socket file (Unix only)
|
|
200
|
+
if (fs.existsSync(socketPath) && process.platform !== 'win32') {
|
|
201
|
+
try {
|
|
202
|
+
fs.unlinkSync(socketPath);
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
// Ignore cleanup errors
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
process.exit(0);
|
|
209
|
+
}
|
|
210
|
+
// Main execution
|
|
211
|
+
(async () => {
|
|
212
|
+
await initializeSessionManager();
|
|
213
|
+
startServer();
|
|
214
|
+
})();
|
|
215
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/daemon/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages isolated photon instances per client session
|
|
5
|
+
* Handles session lifecycle, cleanup, and resource management
|
|
6
|
+
*/
|
|
7
|
+
import { PhotonLoader } from '../loader.js';
|
|
8
|
+
import { PhotonSession } from './protocol.js';
|
|
9
|
+
export declare class SessionManager {
|
|
10
|
+
private sessions;
|
|
11
|
+
private photonPath;
|
|
12
|
+
private photonName;
|
|
13
|
+
loader: PhotonLoader;
|
|
14
|
+
private sessionTimeout;
|
|
15
|
+
private cleanupInterval;
|
|
16
|
+
constructor(photonPath: string, photonName: string, sessionTimeout?: number);
|
|
17
|
+
/**
|
|
18
|
+
* Get or create a session
|
|
19
|
+
*/
|
|
20
|
+
getOrCreateSession(sessionId: string | undefined, clientType?: string): Promise<PhotonSession>;
|
|
21
|
+
/**
|
|
22
|
+
* Get session count
|
|
23
|
+
*/
|
|
24
|
+
getSessionCount(): number;
|
|
25
|
+
/**
|
|
26
|
+
* Get all sessions (for debugging)
|
|
27
|
+
*/
|
|
28
|
+
getSessions(): PhotonSession[];
|
|
29
|
+
/**
|
|
30
|
+
* Clean up idle sessions
|
|
31
|
+
*/
|
|
32
|
+
private cleanup;
|
|
33
|
+
/**
|
|
34
|
+
* Start periodic cleanup
|
|
35
|
+
*/
|
|
36
|
+
private startCleanup;
|
|
37
|
+
/**
|
|
38
|
+
* Stop cleanup and destroy all sessions
|
|
39
|
+
*/
|
|
40
|
+
destroy(): void;
|
|
41
|
+
/**
|
|
42
|
+
* Get last activity time across all sessions
|
|
43
|
+
*/
|
|
44
|
+
getLastActivity(): number;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/daemon/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI9C,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IACpB,MAAM,EAAE,YAAY,CAAC;IAC5B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,eAAe,CAA+B;gBAE1C,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,GAAE,MAAe;IAUnF;;OAEG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAiCpG;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,WAAW,IAAI,aAAa,EAAE;IAI9B;;OAEG;IACH,OAAO,CAAC,OAAO;IAuBf;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,IAAI,IAAI;IAUf;;OAEG;IACH,eAAe,IAAI,MAAM;CAS1B"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages isolated photon instances per client session
|
|
5
|
+
* Handles session lifecycle, cleanup, and resource management
|
|
6
|
+
*/
|
|
7
|
+
import { PhotonLoader } from '../loader.js';
|
|
8
|
+
const DEFAULT_SESSION_ID = 'default';
|
|
9
|
+
export class SessionManager {
|
|
10
|
+
sessions = new Map();
|
|
11
|
+
photonPath;
|
|
12
|
+
photonName;
|
|
13
|
+
loader; // Public to allow executeTool access
|
|
14
|
+
sessionTimeout;
|
|
15
|
+
cleanupInterval = null;
|
|
16
|
+
constructor(photonPath, photonName, sessionTimeout = 600000) {
|
|
17
|
+
this.photonPath = photonPath;
|
|
18
|
+
this.photonName = photonName;
|
|
19
|
+
this.sessionTimeout = sessionTimeout;
|
|
20
|
+
this.loader = new PhotonLoader(false); // verbose = false
|
|
21
|
+
// Start periodic cleanup
|
|
22
|
+
this.startCleanup();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get or create a session
|
|
26
|
+
*/
|
|
27
|
+
async getOrCreateSession(sessionId, clientType) {
|
|
28
|
+
const id = sessionId || DEFAULT_SESSION_ID;
|
|
29
|
+
if (this.sessions.has(id)) {
|
|
30
|
+
const session = this.sessions.get(id);
|
|
31
|
+
session.lastActivity = Date.now();
|
|
32
|
+
return session;
|
|
33
|
+
}
|
|
34
|
+
// Create new session
|
|
35
|
+
console.error(`[session-manager] Creating new session: ${id} (${clientType || 'unknown'})`);
|
|
36
|
+
try {
|
|
37
|
+
const instance = await this.loader.loadFile(this.photonPath);
|
|
38
|
+
const session = {
|
|
39
|
+
id,
|
|
40
|
+
instance,
|
|
41
|
+
createdAt: Date.now(),
|
|
42
|
+
lastActivity: Date.now(),
|
|
43
|
+
clientType
|
|
44
|
+
};
|
|
45
|
+
this.sessions.set(id, session);
|
|
46
|
+
console.error(`[session-manager] Session created. Active sessions: ${this.sessions.size}`);
|
|
47
|
+
return session;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.error(`[session-manager] Failed to create session: ${error.message}`);
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get session count
|
|
56
|
+
*/
|
|
57
|
+
getSessionCount() {
|
|
58
|
+
return this.sessions.size;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get all sessions (for debugging)
|
|
62
|
+
*/
|
|
63
|
+
getSessions() {
|
|
64
|
+
return Array.from(this.sessions.values());
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Clean up idle sessions
|
|
68
|
+
*/
|
|
69
|
+
cleanup() {
|
|
70
|
+
const now = Date.now();
|
|
71
|
+
const expiredSessions = [];
|
|
72
|
+
for (const [id, session] of this.sessions) {
|
|
73
|
+
const idleTime = now - session.lastActivity;
|
|
74
|
+
if (idleTime > this.sessionTimeout) {
|
|
75
|
+
console.error(`[session-manager] Session ${id} expired (idle ${idleTime}ms)`);
|
|
76
|
+
expiredSessions.push(id);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Remove expired sessions
|
|
80
|
+
for (const id of expiredSessions) {
|
|
81
|
+
this.sessions.delete(id);
|
|
82
|
+
}
|
|
83
|
+
if (expiredSessions.length > 0) {
|
|
84
|
+
console.error(`[session-manager] Cleaned up ${expiredSessions.length} sessions. Active: ${this.sessions.size}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Start periodic cleanup
|
|
89
|
+
*/
|
|
90
|
+
startCleanup() {
|
|
91
|
+
// Run cleanup every minute
|
|
92
|
+
this.cleanupInterval = setInterval(() => {
|
|
93
|
+
this.cleanup();
|
|
94
|
+
}, 60000);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Stop cleanup and destroy all sessions
|
|
98
|
+
*/
|
|
99
|
+
destroy() {
|
|
100
|
+
if (this.cleanupInterval) {
|
|
101
|
+
clearInterval(this.cleanupInterval);
|
|
102
|
+
this.cleanupInterval = null;
|
|
103
|
+
}
|
|
104
|
+
console.error(`[session-manager] Destroying ${this.sessions.size} active sessions`);
|
|
105
|
+
this.sessions.clear();
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get last activity time across all sessions
|
|
109
|
+
*/
|
|
110
|
+
getLastActivity() {
|
|
111
|
+
let latest = 0;
|
|
112
|
+
for (const session of this.sessions.values()) {
|
|
113
|
+
if (session.lastActivity > latest) {
|
|
114
|
+
latest = session.lastActivity;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return latest;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/daemon/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Photon CLI Runner
|
|
3
|
+
*
|
|
4
|
+
* Allows direct invocation of Photon methods from the command line
|
|
5
|
+
* Example: photon cli lg-remote discover
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* List all methods in a photon (standard CLI help format)
|
|
9
|
+
*/
|
|
10
|
+
export declare function listMethods(photonName: string): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Run a photon method from CLI
|
|
13
|
+
*/
|
|
14
|
+
export declare function runMethod(photonName: string, methodName: string, args: string[]): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=photon-cli-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"photon-cli-runner.d.ts","sourceRoot":"","sources":["../src/photon-cli-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmtBH;;GAEG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDnE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,IAAI,CAAC,CAmIf"}
|