@portel/photon 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +319 -60
  2. package/dist/cli-alias.d.ts +21 -0
  3. package/dist/cli-alias.d.ts.map +1 -0
  4. package/dist/cli-alias.js +232 -0
  5. package/dist/cli-alias.js.map +1 -0
  6. package/dist/cli-formatter.d.ts +25 -0
  7. package/dist/cli-formatter.d.ts.map +1 -0
  8. package/dist/cli-formatter.js +326 -0
  9. package/dist/cli-formatter.js.map +1 -0
  10. package/dist/cli.js +961 -484
  11. package/dist/cli.js.map +1 -1
  12. package/dist/daemon/client.d.ts +15 -0
  13. package/dist/daemon/client.d.ts.map +1 -0
  14. package/dist/daemon/client.js +126 -0
  15. package/dist/daemon/client.js.map +1 -0
  16. package/dist/daemon/manager.d.ts +32 -0
  17. package/dist/daemon/manager.d.ts.map +1 -0
  18. package/dist/daemon/manager.js +155 -0
  19. package/dist/daemon/manager.js.map +1 -0
  20. package/dist/daemon/protocol.d.ts +48 -0
  21. package/dist/daemon/protocol.d.ts.map +1 -0
  22. package/dist/daemon/protocol.js +7 -0
  23. package/dist/daemon/protocol.js.map +1 -0
  24. package/dist/daemon/server.d.ts +12 -0
  25. package/dist/daemon/server.d.ts.map +1 -0
  26. package/dist/daemon/server.js +215 -0
  27. package/dist/daemon/server.js.map +1 -0
  28. package/dist/daemon/session-manager.d.ts +46 -0
  29. package/dist/daemon/session-manager.d.ts.map +1 -0
  30. package/dist/daemon/session-manager.js +120 -0
  31. package/dist/daemon/session-manager.js.map +1 -0
  32. package/dist/index.d.ts +13 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +15 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/loader.d.ts +16 -1
  37. package/dist/loader.d.ts.map +1 -1
  38. package/dist/loader.js +125 -19
  39. package/dist/loader.js.map +1 -1
  40. package/dist/path-resolver.d.ts +12 -19
  41. package/dist/path-resolver.d.ts.map +1 -1
  42. package/dist/path-resolver.js +35 -61
  43. package/dist/path-resolver.js.map +1 -1
  44. package/dist/photon-cli-runner.d.ts +15 -0
  45. package/dist/photon-cli-runner.d.ts.map +1 -0
  46. package/dist/photon-cli-runner.js +1124 -0
  47. package/dist/photon-cli-runner.js.map +1 -0
  48. package/dist/photon-doc-extractor.d.ts +10 -0
  49. package/dist/photon-doc-extractor.d.ts.map +1 -1
  50. package/dist/photon-doc-extractor.js +89 -9
  51. package/dist/photon-doc-extractor.js.map +1 -1
  52. package/dist/schema-extractor.d.ts +27 -0
  53. package/dist/schema-extractor.d.ts.map +1 -1
  54. package/dist/schema-extractor.js +333 -2
  55. package/dist/schema-extractor.js.map +1 -1
  56. package/dist/server.d.ts.map +1 -1
  57. package/dist/server.js +16 -8
  58. package/dist/server.js.map +1 -1
  59. package/dist/template-manager.js +1 -1
  60. package/dist/types.d.ts +1 -0
  61. package/dist/types.d.ts.map +1 -1
  62. package/dist/types.js.map +1 -1
  63. package/package.json +7 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/daemon/manager.ts"],"names":[],"mappings":"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"}
@@ -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,7 @@
1
+ /**
2
+ * Daemon Protocol Types
3
+ *
4
+ * Defines message types for IPC communication between CLI client and daemon server
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=protocol.js.map
@@ -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":";AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,sDAAsD;AACtD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEnC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE,CAAC;IAC9C,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,cAAc,GAA0B,IAAI,CAAC;AACjD,IAAI,WAAW,GAAG,MAAM,CAAC,CAAC,qBAAqB;AAC/C,IAAI,SAAS,GAA0B,IAAI,CAAC;AAE5C;;GAEG;AACH,KAAK,UAAU,wBAAwB;IACrC,IAAI,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,qDAAqD,UAAU,EAAE,CAAC,CAAC;QAEjF,cAAc,GAAG,IAAI,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAEzE,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,oCAAoC,WAAW,IAAI,CAAC,CAAC;QAEnE,qCAAqC;QACrC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,yDAAyD,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc;IACrB,IAAI,SAAS,EAAE,CAAC;QACd,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,wBAAwB;IAClC,CAAC;IAED,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;QAC1B,IAAI,CAAC,cAAc;YAAE,OAAO;QAE5B,MAAM,YAAY,GAAG,cAAc,CAAC,eAAe,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC;QAE3C,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,yCAAyC,QAAQ,qBAAqB,CAAC,CAAC;YACtF,QAAQ,EAAE,CAAC;QACb,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,WAAW,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc;IACrB,cAAc,EAAE,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,OAAsB;IACjD,cAAc,EAAE,CAAC;IAEjB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,OAAO,CAAC,EAAE;SACf,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAChC,QAAQ,EAAE,CAAC;QACX,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE;SACnC,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,KAAK,EAAE,sBAAsB;aAC9B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,KAAK,EAAE,iCAAiC;aACzC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,wCAAwC;YACxC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,kBAAkB,CACrD,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,UAAU,CACnB,CAAC;YAEF,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,CAAC,MAAM,cAAc,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;YAEvF,2DAA2D;YAC3D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,WAAW,CACpD,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,IAAI,IAAI,EAAE,CACnB,CAAC;YAEF,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,MAAM;aACb,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,mCAAmC,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAErF,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,KAAK,EAAE,KAAK,CAAC,OAAO;aACrB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,OAAO;QACb,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,KAAK,EAAE,yBAAyB,OAAO,CAAC,IAAI,EAAE;KAC/C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,WAAW;IAClB,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;QACzC,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAElD,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAE3B,qDAAqD;YACrD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,iCAAiC;YAE7D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE,SAAS;gBAE3B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAChD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;oBAE9C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;gBAChD,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,OAAO,CAAC,KAAK,CAAC,6CAA6C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC5E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;wBAC1B,IAAI,EAAE,OAAO;wBACb,EAAE,EAAE,SAAS;wBACb,KAAK,EAAE,KAAK,CAAC,OAAO;qBACrB,CAAC,GAAG,IAAI,CAAC,CAAC;gBACb,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACpB,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,OAAO,CAAC,KAAK,CAAC,iCAAiC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE;QAC7B,OAAO,CAAC,KAAK,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,KAAK,CAAC,wBAAwB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU,EAAE,EAAE;QAChC,OAAO,CAAC,KAAK,CAAC,iCAAiC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,6BAA6B;IAC7B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ;IACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAElD,IAAI,SAAS,EAAE,CAAC;QACd,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;IAED,0BAA0B;IAC1B,IAAI,cAAc,EAAE,CAAC;QACnB,cAAc,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,mCAAmC;IACnC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC9D,IAAI,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,iBAAiB;AACjB,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,wBAAwB,EAAE,CAAC;IACjC,WAAW,EAAE,CAAC;AAChB,CAAC,CAAC,EAAE,CAAC"}
@@ -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,13 @@
1
+ /**
2
+ * @portel/photon
3
+ *
4
+ * Build MCP servers and CLI tools from single .photon.ts files
5
+ *
6
+ * Re-exports @portel/photon-core for backward compatibility
7
+ * and adds Photon-specific runtime functionality
8
+ */
9
+ export * from '@portel/photon-core';
10
+ export { PhotonLoader } from './loader.js';
11
+ export { PhotonServer } from './server.js';
12
+ export { PhotonDocExtractor } from './photon-doc-extractor.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,cAAc,qBAAqB,CAAC;AAGpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @portel/photon
3
+ *
4
+ * Build MCP servers and CLI tools from single .photon.ts files
5
+ *
6
+ * Re-exports @portel/photon-core for backward compatibility
7
+ * and adds Photon-specific runtime functionality
8
+ */
9
+ // Re-export everything from @portel/photon-core
10
+ export * from '@portel/photon-core';
11
+ // Export Photon-specific runtime components
12
+ export { PhotonLoader } from './loader.js';
13
+ export { PhotonServer } from './server.js';
14
+ export { PhotonDocExtractor } from './photon-doc-extractor.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,gDAAgD;AAChD,cAAc,qBAAqB,CAAC;AAEpC,4CAA4C;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/loader.d.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Loads a single .photon.ts file and extracts tools
5
5
  */
6
- import { PhotonMCPClass, PhotonMCPClassExtended } from './types.js';
6
+ import { PhotonMCPClass, PhotonMCPClassExtended } from '@portel/photon-core';
7
7
  export declare class PhotonLoader {
8
8
  private dependencyManager;
9
9
  private verbose;
@@ -12,6 +12,21 @@ export declare class PhotonLoader {
12
12
  * Log message only if verbose mode is enabled
13
13
  */
14
14
  private log;
15
+ /**
16
+ * Directory where MCP-specific dependencies are cached
17
+ */
18
+ private getDependencyCacheDir;
19
+ /**
20
+ * Path to metadata file describing installed dependencies
21
+ */
22
+ private getDependencyMetadataPath;
23
+ private readDependencyMetadata;
24
+ private dependenciesEqual;
25
+ private writeDependencyMetadata;
26
+ private ensureDependenciesWithHash;
27
+ private shouldRetryInstall;
28
+ private static parseDependenciesFromSource;
29
+ private static mergeDependencySpecs;
15
30
  /**
16
31
  * Load a single Photon MCP file
17
32
  */
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAwC,MAAM,YAAY,CAAC;AAI1G,qBAAa,YAAY;IACvB,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,GAAE,OAAe;IAKpC;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA6GjE;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAuBnE;;OAEG;YACW,iBAAiB;IAwC/B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;IACH,OAAO,CAAC,OAAO;IAIf;;OAEG;IACH,OAAO,CAAC,eAAe;IAmBvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAelB;;OAEG;IACH,OAAO,CAAC,cAAc;IA0BtB;;OAEG;YACW,YAAY;IAgG1B;;OAEG;YACW,wBAAwB;IAWtC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoC9B;;;OAGG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAkF/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2D5B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAuClC;;OAEG;IACG,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAyBxF"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAmE,cAAc,EAAE,sBAAsB,EAAwC,MAAM,qBAAqB,CAAC;AAQpL,qBAAa,YAAY;IACvB,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,GAAE,OAAe;IAKpC;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAI7B;;OAEG;IACH,OAAO,CAAC,yBAAyB;YAInB,sBAAsB;IASpC,OAAO,CAAC,iBAAiB;YAYX,uBAAuB;YAMvB,0BAA0B;IAwBxC,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,MAAM,CAAC,2BAA2B;IAqB1C,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAWnC;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAiIjE;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAuBnE;;OAEG;YACW,iBAAiB;IAuC/B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;IACH,OAAO,CAAC,OAAO;IAIf;;OAEG;IACH,OAAO,CAAC,eAAe;IAmBvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAelB;;OAEG;IACH,OAAO,CAAC,cAAc;IA0BtB;;OAEG;YACW,YAAY;IAgG1B;;OAEG;YACW,wBAAwB;IAWtC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoC9B;;;OAGG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAkF/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2D5B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAuClC;;OAEG;IACG,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAyBxF"}