@itphx/synth-core 0.3.0 → 0.4.4

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 (187) hide show
  1. package/dist/auth/local.d.ts +14 -0
  2. package/dist/auth/local.d.ts.map +1 -1
  3. package/dist/auth/local.js +63 -11
  4. package/dist/auth/local.js.map +1 -1
  5. package/dist/auth/local.test.js +59 -0
  6. package/dist/auth/local.test.js.map +1 -1
  7. package/dist/events/bus.d.ts +7 -0
  8. package/dist/events/bus.d.ts.map +1 -1
  9. package/dist/events/bus.js +26 -3
  10. package/dist/events/bus.js.map +1 -1
  11. package/dist/events/bus.test.js +46 -0
  12. package/dist/events/bus.test.js.map +1 -1
  13. package/dist/index.d.ts +3 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +2 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/main.js +247 -8
  18. package/dist/main.js.map +1 -1
  19. package/dist/providers/index.d.ts +1 -0
  20. package/dist/providers/index.d.ts.map +1 -1
  21. package/dist/providers/index.js +4 -0
  22. package/dist/providers/index.js.map +1 -1
  23. package/dist/providers/remote.d.ts +60 -0
  24. package/dist/providers/remote.d.ts.map +1 -0
  25. package/dist/providers/remote.js +394 -0
  26. package/dist/providers/remote.js.map +1 -0
  27. package/dist/providers/remote.test.d.ts +2 -0
  28. package/dist/providers/remote.test.d.ts.map +1 -0
  29. package/dist/providers/remote.test.js +258 -0
  30. package/dist/providers/remote.test.js.map +1 -0
  31. package/dist/remote/aggregate.d.ts +43 -0
  32. package/dist/remote/aggregate.d.ts.map +1 -0
  33. package/dist/remote/aggregate.js +84 -0
  34. package/dist/remote/aggregate.js.map +1 -0
  35. package/dist/remote/aggregate.test.d.ts +2 -0
  36. package/dist/remote/aggregate.test.d.ts.map +1 -0
  37. package/dist/remote/aggregate.test.js +120 -0
  38. package/dist/remote/aggregate.test.js.map +1 -0
  39. package/dist/remote/client.d.ts +142 -0
  40. package/dist/remote/client.d.ts.map +1 -0
  41. package/dist/remote/client.js +290 -0
  42. package/dist/remote/client.js.map +1 -0
  43. package/dist/remote/client.test.d.ts +2 -0
  44. package/dist/remote/client.test.d.ts.map +1 -0
  45. package/dist/remote/client.test.js +176 -0
  46. package/dist/remote/client.test.js.map +1 -0
  47. package/dist/remote/connection.d.ts +66 -0
  48. package/dist/remote/connection.d.ts.map +1 -0
  49. package/dist/remote/connection.js +298 -0
  50. package/dist/remote/connection.js.map +1 -0
  51. package/dist/remote/connection.test.d.ts +2 -0
  52. package/dist/remote/connection.test.d.ts.map +1 -0
  53. package/dist/remote/connection.test.js +323 -0
  54. package/dist/remote/connection.test.js.map +1 -0
  55. package/dist/remote/credentials.d.ts +13 -0
  56. package/dist/remote/credentials.d.ts.map +1 -0
  57. package/dist/remote/credentials.js +81 -0
  58. package/dist/remote/credentials.js.map +1 -0
  59. package/dist/remote/credentials.test.d.ts +2 -0
  60. package/dist/remote/credentials.test.d.ts.map +1 -0
  61. package/dist/remote/credentials.test.js +69 -0
  62. package/dist/remote/credentials.test.js.map +1 -0
  63. package/dist/remote/device-flow.d.ts +72 -0
  64. package/dist/remote/device-flow.d.ts.map +1 -0
  65. package/dist/remote/device-flow.js +229 -0
  66. package/dist/remote/device-flow.js.map +1 -0
  67. package/dist/remote/device-flow.test.d.ts +2 -0
  68. package/dist/remote/device-flow.test.d.ts.map +1 -0
  69. package/dist/remote/device-flow.test.js +103 -0
  70. package/dist/remote/device-flow.test.js.map +1 -0
  71. package/dist/remote/event-bridge.d.ts +46 -0
  72. package/dist/remote/event-bridge.d.ts.map +1 -0
  73. package/dist/remote/event-bridge.js +218 -0
  74. package/dist/remote/event-bridge.js.map +1 -0
  75. package/dist/remote/event-bridge.test.d.ts +2 -0
  76. package/dist/remote/event-bridge.test.d.ts.map +1 -0
  77. package/dist/remote/event-bridge.test.js +240 -0
  78. package/dist/remote/event-bridge.test.js.map +1 -0
  79. package/dist/remote/index.d.ts +19 -0
  80. package/dist/remote/index.d.ts.map +1 -0
  81. package/dist/remote/index.js +11 -0
  82. package/dist/remote/index.js.map +1 -0
  83. package/dist/remote/session.d.ts +72 -0
  84. package/dist/remote/session.d.ts.map +1 -0
  85. package/dist/remote/session.js +248 -0
  86. package/dist/remote/session.js.map +1 -0
  87. package/dist/remote/session.test.d.ts +2 -0
  88. package/dist/remote/session.test.d.ts.map +1 -0
  89. package/dist/remote/session.test.js +482 -0
  90. package/dist/remote/session.test.js.map +1 -0
  91. package/dist/remote/transfer.d.ts +75 -0
  92. package/dist/remote/transfer.d.ts.map +1 -0
  93. package/dist/remote/transfer.js +491 -0
  94. package/dist/remote/transfer.js.map +1 -0
  95. package/dist/remote/transfer.test.d.ts +2 -0
  96. package/dist/remote/transfer.test.d.ts.map +1 -0
  97. package/dist/remote/transfer.test.js +416 -0
  98. package/dist/remote/transfer.test.js.map +1 -0
  99. package/dist/remote/types.d.ts +28 -0
  100. package/dist/remote/types.d.ts.map +1 -0
  101. package/dist/remote/types.js +10 -0
  102. package/dist/remote/types.js.map +1 -0
  103. package/dist/server/app.d.ts +62 -1
  104. package/dist/server/app.d.ts.map +1 -1
  105. package/dist/server/app.js +364 -20
  106. package/dist/server/app.js.map +1 -1
  107. package/dist/server/app.proxy.test.d.ts +2 -0
  108. package/dist/server/app.proxy.test.d.ts.map +1 -0
  109. package/dist/server/app.proxy.test.js +193 -0
  110. package/dist/server/app.proxy.test.js.map +1 -0
  111. package/dist/server/app.remote.test.d.ts +2 -0
  112. package/dist/server/app.remote.test.d.ts.map +1 -0
  113. package/dist/server/app.remote.test.js +674 -0
  114. package/dist/server/app.remote.test.js.map +1 -0
  115. package/dist/server/proxy.d.ts +14 -0
  116. package/dist/server/proxy.d.ts.map +1 -0
  117. package/dist/server/proxy.js +93 -0
  118. package/dist/server/proxy.js.map +1 -0
  119. package/dist/server/routes/auth.d.ts +26 -2
  120. package/dist/server/routes/auth.d.ts.map +1 -1
  121. package/dist/server/routes/auth.js +269 -36
  122. package/dist/server/routes/auth.js.map +1 -1
  123. package/dist/server/routes/auth.test.d.ts +2 -0
  124. package/dist/server/routes/auth.test.d.ts.map +1 -0
  125. package/dist/server/routes/auth.test.js +466 -0
  126. package/dist/server/routes/auth.test.js.map +1 -0
  127. package/dist/server/routes/fs.d.ts +2 -1
  128. package/dist/server/routes/fs.d.ts.map +1 -1
  129. package/dist/server/routes/fs.js +159 -5
  130. package/dist/server/routes/fs.js.map +1 -1
  131. package/dist/server/routes/hybrid.d.ts +32 -0
  132. package/dist/server/routes/hybrid.d.ts.map +1 -0
  133. package/dist/server/routes/hybrid.js +21 -0
  134. package/dist/server/routes/hybrid.js.map +1 -0
  135. package/dist/server/routes/hybrid.test.d.ts +2 -0
  136. package/dist/server/routes/hybrid.test.d.ts.map +1 -0
  137. package/dist/server/routes/hybrid.test.js +454 -0
  138. package/dist/server/routes/hybrid.test.js.map +1 -0
  139. package/dist/server/routes/messages.d.ts +2 -1
  140. package/dist/server/routes/messages.d.ts.map +1 -1
  141. package/dist/server/routes/messages.js +104 -1
  142. package/dist/server/routes/messages.js.map +1 -1
  143. package/dist/server/routes/models.cache.test.d.ts +2 -0
  144. package/dist/server/routes/models.cache.test.d.ts.map +1 -0
  145. package/dist/server/routes/models.cache.test.js +59 -0
  146. package/dist/server/routes/models.cache.test.js.map +1 -0
  147. package/dist/server/routes/models.d.ts +9 -1
  148. package/dist/server/routes/models.d.ts.map +1 -1
  149. package/dist/server/routes/models.js +35 -2
  150. package/dist/server/routes/models.js.map +1 -1
  151. package/dist/server/routes/models.remote.test.d.ts +2 -0
  152. package/dist/server/routes/models.remote.test.d.ts.map +1 -0
  153. package/dist/server/routes/models.remote.test.js +101 -0
  154. package/dist/server/routes/models.remote.test.js.map +1 -0
  155. package/dist/server/routes/project-transfer.d.ts +16 -0
  156. package/dist/server/routes/project-transfer.d.ts.map +1 -0
  157. package/dist/server/routes/project-transfer.js +141 -0
  158. package/dist/server/routes/project-transfer.js.map +1 -0
  159. package/dist/server/routes/project-transfer.test.d.ts +2 -0
  160. package/dist/server/routes/project-transfer.test.d.ts.map +1 -0
  161. package/dist/server/routes/project-transfer.test.js +199 -0
  162. package/dist/server/routes/project-transfer.test.js.map +1 -0
  163. package/dist/server/routes/projects.d.ts +2 -1
  164. package/dist/server/routes/projects.d.ts.map +1 -1
  165. package/dist/server/routes/projects.js +101 -5
  166. package/dist/server/routes/projects.js.map +1 -1
  167. package/dist/server/routes/providers.d.ts +1 -1
  168. package/dist/server/routes/providers.d.ts.map +1 -1
  169. package/dist/server/routes/providers.js +3 -1
  170. package/dist/server/routes/providers.js.map +1 -1
  171. package/dist/server/routes/providers.test.d.ts +2 -0
  172. package/dist/server/routes/providers.test.d.ts.map +1 -0
  173. package/dist/server/routes/providers.test.js +58 -0
  174. package/dist/server/routes/providers.test.js.map +1 -0
  175. package/dist/server/routes/queue.d.ts +2 -1
  176. package/dist/server/routes/queue.d.ts.map +1 -1
  177. package/dist/server/routes/queue.js +89 -1
  178. package/dist/server/routes/queue.js.map +1 -1
  179. package/dist/server/routes/sessions.d.ts +8 -1
  180. package/dist/server/routes/sessions.d.ts.map +1 -1
  181. package/dist/server/routes/sessions.js +202 -9
  182. package/dist/server/routes/sessions.js.map +1 -1
  183. package/dist/server/serialize.d.ts +2 -0
  184. package/dist/server/serialize.d.ts.map +1 -1
  185. package/dist/server/serialize.js +2 -0
  186. package/dist/server/serialize.js.map +1 -1
  187. package/package.json +6 -2
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/server/routes/providers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/server/routes/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=providers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.test.d.ts","sourceRoot":"","sources":["../../../src/server/routes/providers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { mkdtemp, rm } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { createProviderRoutes } from './providers.js';
6
+ import { JsonStore } from '../../storage/json-store.js';
7
+ function createMockAuth() {
8
+ return {
9
+ getCurrentUser: () => null,
10
+ requireAuth: async (_c, next) => { await next(); },
11
+ };
12
+ }
13
+ async function makeApp(tmpDir) {
14
+ const providerStore = new JsonStore({ dataDir: tmpDir, subdir: 'providers' });
15
+ const providerCache = new Map();
16
+ const app = createProviderRoutes(createMockAuth(), providerStore, providerCache, true);
17
+ return { app, providerStore, providerCache };
18
+ }
19
+ function postJSON(body) {
20
+ return {
21
+ method: 'POST',
22
+ headers: { 'Content-Type': 'application/json' },
23
+ body: JSON.stringify(body),
24
+ };
25
+ }
26
+ describe('routes/providers (core): синхронизация in-memory кеша', () => {
27
+ let tmpDir;
28
+ let stores;
29
+ beforeEach(async () => {
30
+ tmpDir = await mkdtemp(join(tmpdir(), 'synth-core-providers-test-'));
31
+ stores = await makeApp(tmpDir);
32
+ });
33
+ afterEach(async () => {
34
+ await rm(tmpDir, { recursive: true, force: true });
35
+ });
36
+ it('POST /providers добавляет провайдера в кеш', async () => {
37
+ const res = await stores.app.request('/', postJSON({
38
+ name: 'new-provider',
39
+ type: 'openai',
40
+ base_url: 'https://api.example.com/v1',
41
+ api_key: 'sk-test',
42
+ }));
43
+ expect(res.status).toBe(201);
44
+ expect(stores.providerCache.get('new-provider')?.baseUrl).toBe('https://api.example.com/v1');
45
+ });
46
+ it('DELETE /providers/:name удаляет провайдера из кеша', async () => {
47
+ await stores.providerStore.save('p1', {
48
+ name: 'p1', type: 'openai', baseUrl: 'http://p.local', enabled: true,
49
+ });
50
+ stores.providerCache.set('p1', {
51
+ name: 'p1', type: 'openai', baseUrl: 'http://p.local', enabled: true,
52
+ });
53
+ const res = await stores.app.request('/p1', { method: 'DELETE' });
54
+ expect(res.status).toBe(204);
55
+ expect(stores.providerCache.has('p1')).toBe(false);
56
+ });
57
+ });
58
+ //# sourceMappingURL=providers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.test.js","sourceRoot":"","sources":["../../../src/server/routes/providers.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { Hono } from 'hono';
2
2
  import type { AuthKit } from '../../auth/local.js';
3
3
  import type { SessionManager, QueueProcessorManager, ChatOrchestrator, EventBus } from '../../index.js';
4
- export declare function createQueueRoutes(auth: AuthKit, sessionManager: SessionManager, queueManager: QueueProcessorManager, eventBus: EventBus, processMessage: ReturnType<ChatOrchestrator['createProcessMessage']>): Hono;
4
+ import type { RemoteBackendClient } from '../../remote/client.js';
5
+ export declare function createQueueRoutes(auth: AuthKit, sessionManager: SessionManager, queueManager: QueueProcessorManager, eventBus: EventBus, processMessage: ReturnType<ChatOrchestrator['createProcessMessage']>, getRemoteClient?: () => RemoteBackendClient | null): Hono;
5
6
  //# sourceMappingURL=queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/server/routes/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGxG,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,qBAAqB,EACnC,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,UAAU,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,GACnE,IAAI,CAsJN"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/server/routes/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGxG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAiBlE,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,qBAAqB,EACnC,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,UAAU,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,EACpE,eAAe,CAAC,EAAE,MAAM,mBAAmB,GAAG,IAAI,GACjD,IAAI,CAqNN"}
@@ -1,9 +1,37 @@
1
1
  import { Hono } from 'hono';
2
2
  import { generateStreamId, MessageRole } from '@itphx/synth-shared';
3
- export function createQueueRoutes(auth, sessionManager, queueManager, eventBus, processMessage) {
3
+ import { isRemoteRef, toLocalId, remoteErrorToHttp } from '../../remote/aggregate.js';
4
+ /** Преобразовать RemoteError в HTTP-ответ API v2; не-RemoteError → undefined (пробросить дальше). */
5
+ function mapRemoteError(c, err) {
6
+ const http = remoteErrorToHttp(err);
7
+ if (!http)
8
+ return undefined;
9
+ return c.json({ error: { code: http.code, message: err instanceof Error ? err.message : String(err) } }, http.status);
10
+ }
11
+ /** 502, если гибрид не настроен, иначе undefined — обрабатываем удалённую сессию. */
12
+ function remoteUnavailable(c) {
13
+ return c.json({ error: { code: 'REMOTE_UNAVAILABLE', message: 'Гибридный режим не настроен' } }, 502);
14
+ }
15
+ export function createQueueRoutes(auth, sessionManager, queueManager, eventBus, processMessage, getRemoteClient) {
4
16
  const app = new Hono();
17
+ const resolveClient = () => getRemoteClient?.() ?? undefined;
5
18
  app.post('/:sessionId/clear', auth.requireAuth, async (c) => {
19
+ const remoteClient = resolveClient();
6
20
  const sessionId = c.req.param('sessionId');
21
+ if (isRemoteRef(sessionId)) {
22
+ if (!remoteClient)
23
+ return remoteUnavailable(c);
24
+ try {
25
+ const result = await remoteClient.queueClear(toLocalId(sessionId));
26
+ return c.json(result);
27
+ }
28
+ catch (err) {
29
+ const mapped = mapRemoteError(c, err);
30
+ if (mapped)
31
+ return mapped;
32
+ throw err;
33
+ }
34
+ }
7
35
  await sessionManager.safeUpdate(sessionId, async (session) => {
8
36
  session.pendingMessages = [];
9
37
  });
@@ -11,9 +39,24 @@ export function createQueueRoutes(auth, sessionManager, queueManager, eventBus,
11
39
  return c.json({ cleared: true });
12
40
  });
13
41
  app.post('/:sessionId/return', auth.requireAuth, async (c) => {
42
+ const remoteClient = resolveClient();
14
43
  const sessionId = c.req.param('sessionId');
15
44
  const indexStr = c.req.query('index');
16
45
  const index = indexStr !== undefined ? parseInt(indexStr, 10) : undefined;
46
+ if (isRemoteRef(sessionId)) {
47
+ if (!remoteClient)
48
+ return remoteUnavailable(c);
49
+ try {
50
+ const result = await remoteClient.queueReturn(toLocalId(sessionId), index);
51
+ return c.json(result);
52
+ }
53
+ catch (err) {
54
+ const mapped = mapRemoteError(c, err);
55
+ if (mapped)
56
+ return mapped;
57
+ throw err;
58
+ }
59
+ }
17
60
  const session = await sessionManager.getSession(sessionId);
18
61
  if (!session) {
19
62
  return c.json({ error: { code: 'NOT_FOUND', message: 'Сессия не найдена' } }, 404);
@@ -75,7 +118,22 @@ export function createQueueRoutes(auth, sessionManager, queueManager, eventBus,
75
118
  return c.json({ texts });
76
119
  });
77
120
  app.post('/:sessionId/resume', auth.requireAuth, async (c) => {
121
+ const remoteClient = resolveClient();
78
122
  const sessionId = c.req.param('sessionId');
123
+ if (isRemoteRef(sessionId)) {
124
+ if (!remoteClient)
125
+ return remoteUnavailable(c);
126
+ try {
127
+ const result = await remoteClient.queueResume(toLocalId(sessionId));
128
+ return c.json(result);
129
+ }
130
+ catch (err) {
131
+ const mapped = mapRemoteError(c, err);
132
+ if (mapped)
133
+ return mapped;
134
+ throw err;
135
+ }
136
+ }
79
137
  const session = await sessionManager.getSession(sessionId);
80
138
  if (!session) {
81
139
  return c.json({ error: { code: 'NOT_FOUND', message: 'Сессия не найдена' } }, 404);
@@ -117,7 +175,22 @@ export function createQueueRoutes(auth, sessionManager, queueManager, eventBus,
117
175
  });
118
176
  // POST /:sessionId/retry-now — немедленный повтор при backoff (без ожидания паузы)
119
177
  app.post('/:sessionId/retry-now', auth.requireAuth, async (c) => {
178
+ const remoteClient = resolveClient();
120
179
  const sessionId = c.req.param('sessionId');
180
+ if (isRemoteRef(sessionId)) {
181
+ if (!remoteClient)
182
+ return remoteUnavailable(c);
183
+ try {
184
+ const result = await remoteClient.queueRetryNow(toLocalId(sessionId));
185
+ return c.json(result);
186
+ }
187
+ catch (err) {
188
+ const mapped = mapRemoteError(c, err);
189
+ if (mapped)
190
+ return mapped;
191
+ throw err;
192
+ }
193
+ }
121
194
  const retried = queueManager.retryNow(sessionId);
122
195
  if (!retried) {
123
196
  return c.json({ error: { code: 'CONFLICT', message: 'Процессор не находится в состоянии повтора' } }, 409);
@@ -126,7 +199,22 @@ export function createQueueRoutes(auth, sessionManager, queueManager, eventBus,
126
199
  });
127
200
  // POST /:sessionId/cancel-retry — отменить повторные попытки (снять pending, разблокировать)
128
201
  app.post('/:sessionId/cancel-retry', auth.requireAuth, async (c) => {
202
+ const remoteClient = resolveClient();
129
203
  const sessionId = c.req.param('sessionId');
204
+ if (isRemoteRef(sessionId)) {
205
+ if (!remoteClient)
206
+ return remoteUnavailable(c);
207
+ try {
208
+ const result = await remoteClient.queueCancelRetry(toLocalId(sessionId));
209
+ return c.json(result);
210
+ }
211
+ catch (err) {
212
+ const mapped = mapRemoteError(c, err);
213
+ if (mapped)
214
+ return mapped;
215
+ throw err;
216
+ }
217
+ }
130
218
  const cancelled = await queueManager.cancelRetry(sessionId);
131
219
  if (!cancelled) {
132
220
  return c.json({ error: { code: 'CONFLICT', message: 'Процессор не найден' } }, 409);
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/server/routes/queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/server/routes/queue.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,12 @@ import { Hono } from 'hono';
2
2
  import type { AuthKit } from '../../auth/local.js';
3
3
  import type { SessionManager, EventBus, QueueProcessorManager, ChatOrchestrator, ContextOptimizer } from '../../index.js';
4
4
  import type { ProjectStore } from '../../storage/project-store.js';
5
- export declare function createSessionRoutes(auth: AuthKit, sessionManager: SessionManager, eventBus: EventBus, queueManager: QueueProcessorManager, processMessage: ReturnType<ChatOrchestrator['createProcessMessage']>, orchestrator: ChatOrchestrator, contextOptimizer?: ContextOptimizer, projectStore?: ProjectStore): Hono;
5
+ import type { RemoteBackendClient } from '../../remote/client.js';
6
+ export declare function createSessionRoutes(auth: AuthKit, sessionManager: SessionManager, eventBus: EventBus, queueManager: QueueProcessorManager, processMessage: ReturnType<ChatOrchestrator['createProcessMessage']>, orchestrator: ChatOrchestrator, contextOptimizer?: ContextOptimizer, projectStore?: ProjectStore,
7
+ /**
8
+ * Геттер текущего клиента к удалённому backend (runtime-подключение):
9
+ * возвращает null, когда гибрид не подключён. Роуты резолвят клиента
10
+ * в начале каждого хэндлера, а не при создании фабрики.
11
+ */
12
+ getRemoteClient?: () => RemoteBackendClient | null): Hono;
6
13
  //# sourceMappingURL=sessions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/server/routes/sessions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAK1H,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAInE,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,qBAAqB,EACnC,cAAc,EAAE,UAAU,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,EACpE,YAAY,EAAE,gBAAgB,EAC9B,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,YAAY,CAAC,EAAE,YAAY,GAC1B,IAAI,CAibN"}
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/server/routes/sessions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAK1H,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAGnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAclE,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,qBAAqB,EACnC,cAAc,EAAE,UAAU,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,EACpE,YAAY,EAAE,gBAAgB,EAC9B,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,YAAY,CAAC,EAAE,YAAY;AAC3B;;;;GAIG;AACH,eAAe,CAAC,EAAE,MAAM,mBAAmB,GAAG,IAAI,GACjD,IAAI,CAqlBN"}
@@ -3,18 +3,86 @@ import { Hono } from 'hono';
3
3
  import { MessageRole, SESSION_MODES, generateStreamId, nowISO, sessionUpdateSchema } from '@itphx/synth-shared';
4
4
  import { enqueueUserMessage, sseEventStream, DEFAULT_AGENT_ID, SubagentResumeError } from '../../index.js';
5
5
  import { serializeSession, serializeMessage } from '../serialize.js';
6
+ import { isRemoteRef, toLocalId, toRemoteRef, toRemote, mergeItems, remoteErrorToHttp } from '../../remote/aggregate.js';
7
+ import { RemoteError } from '../../remote/types.js';
6
8
  const LOCAL_USER_ID = 'local';
7
- export function createSessionRoutes(auth, sessionManager, eventBus, queueManager, processMessage, orchestrator, contextOptimizer, projectStore) {
9
+ /** Преобразовать RemoteError в HTTP-ответ API v2; не-RemoteError undefined (пробросить дальше). */
10
+ function mapRemoteError(c, err) {
11
+ const http = remoteErrorToHttp(err);
12
+ if (!http)
13
+ return undefined;
14
+ return c.json({ error: { code: http.code, message: err instanceof Error ? err.message : String(err) } }, http.status);
15
+ }
16
+ export function createSessionRoutes(auth, sessionManager, eventBus, queueManager, processMessage, orchestrator, contextOptimizer, projectStore,
17
+ /**
18
+ * Геттер текущего клиента к удалённому backend (runtime-подключение):
19
+ * возвращает null, когда гибрид не подключён. Роуты резолвят клиента
20
+ * в начале каждого хэндлера, а не при создании фабрики.
21
+ */
22
+ getRemoteClient) {
8
23
  const app = new Hono();
9
24
  const agentRegistry = orchestrator.agentRegistry;
25
+ const resolveClient = () => getRemoteClient?.() ?? undefined;
10
26
  app.get('/', auth.requireAuth, async (c) => {
27
+ const remoteClient = resolveClient();
28
+ const projectId = c.req.query('project_id') || undefined;
11
29
  const sessions = await sessionManager.listSessions({
12
30
  userId: LOCAL_USER_ID,
13
31
  });
14
- return c.json(sessions.map((s) => serializeSession(s, { agentRegistry })));
32
+ // Запрос удалённого мира без настроенного гибрида — ошибка, а не локальный список.
33
+ if (projectId && isRemoteRef(projectId) && !remoteClient) {
34
+ return c.json({ error: { code: 'REMOTE_UNAVAILABLE', message: 'Гибридный режим не настроен' } }, 502);
35
+ }
36
+ if (!remoteClient) {
37
+ return c.json(sessions.map((s) => serializeSession(s, { agentRegistry })));
38
+ }
39
+ try {
40
+ if (projectId && isRemoteRef(projectId)) {
41
+ const remote = (await remoteClient.listSessions(toLocalId(projectId)));
42
+ return c.json(mergeItems([], remote, { remoteProjectId: projectId }));
43
+ }
44
+ // Локальные сериализуем в DTO ДО объединения — иначе в merged-список
45
+ // попадут сырые Session (camelCase) рядом с remote-DTO (snake_case).
46
+ const localDto = sessions.map((s) => serializeSession(s, { agentRegistry }));
47
+ const remote = (await remoteClient.listSessions(projectId));
48
+ return c.json(mergeItems(localDto, remote));
49
+ }
50
+ catch (err) {
51
+ // Offline-деградация: сервер недоступен — отдаём локальный мир.
52
+ if (err instanceof RemoteError) {
53
+ console.warn(`[hybrid] удалённый backend недоступен (${err.code}): ${err.message}`);
54
+ if (projectId && isRemoteRef(projectId))
55
+ return c.json([]);
56
+ return c.json(sessions.map((s) => serializeSession(s, { agentRegistry })));
57
+ }
58
+ throw err;
59
+ }
15
60
  });
16
61
  app.post('/', auth.requireAuth, async (c) => {
62
+ const remoteClient = resolveClient();
17
63
  const body = await c.req.json().catch(() => ({}));
64
+ // Гибрид: создание удалённой сессии на backend.
65
+ if (body.origin === 'remote') {
66
+ if (!remoteClient) {
67
+ return c.json({ error: { code: 'REMOTE_UNAVAILABLE', message: 'Гибридный режим не настроен' } }, 502);
68
+ }
69
+ const forwarded = { ...body };
70
+ delete forwarded.origin;
71
+ if (typeof forwarded.project_id === 'string')
72
+ forwarded.project_id = toLocalId(forwarded.project_id);
73
+ if (typeof forwarded.projectId === 'string')
74
+ forwarded.projectId = toLocalId(forwarded.projectId);
75
+ try {
76
+ const created = (await remoteClient.createSession(forwarded));
77
+ return c.json(toRemote(created), 201);
78
+ }
79
+ catch (err) {
80
+ const mapped = mapRemoteError(c, err);
81
+ if (mapped)
82
+ return mapped;
83
+ throw err;
84
+ }
85
+ }
18
86
  const session = await sessionManager.createSession({
19
87
  title: body.name || body.title || undefined,
20
88
  projectId: body.project_id || body.projectId || undefined,
@@ -30,14 +98,49 @@ export function createSessionRoutes(auth, sessionManager, eventBus, queueManager
30
98
  return c.json(serializeSession(session, { agentRegistry }), 201);
31
99
  });
32
100
  app.get('/:id', auth.requireAuth, async (c) => {
33
- const session = await sessionManager.getSession(c.req.param('id'));
101
+ const remoteClient = resolveClient();
102
+ const id = c.req.param('id');
103
+ if (isRemoteRef(id)) {
104
+ if (!remoteClient) {
105
+ return c.json({ error: { code: 'REMOTE_UNAVAILABLE', message: 'Гибридный режим не настроен' } }, 502);
106
+ }
107
+ try {
108
+ const remote = (await remoteClient.getSession(toLocalId(id)));
109
+ return c.json(toRemote(remote));
110
+ }
111
+ catch (err) {
112
+ const mapped = mapRemoteError(c, err);
113
+ if (mapped)
114
+ return mapped;
115
+ throw err;
116
+ }
117
+ }
118
+ const session = await sessionManager.getSession(id);
34
119
  if (!session) {
35
120
  return c.json({ error: { code: 'NOT_FOUND', message: 'Сессия не найдена' } }, 404);
36
121
  }
37
122
  return c.json(serializeSession(session, { agentRegistry }));
38
123
  });
39
124
  app.patch('/:id', auth.requireAuth, async (c) => {
40
- const session = await sessionManager.getSession(c.req.param('id'));
125
+ const remoteClient = resolveClient();
126
+ const id = c.req.param('id');
127
+ if (isRemoteRef(id)) {
128
+ if (!remoteClient) {
129
+ return c.json({ error: { code: 'REMOTE_UNAVAILABLE', message: 'Гибридный режим не настроен' } }, 502);
130
+ }
131
+ const body = await c.req.json().catch(() => ({}));
132
+ try {
133
+ const updated = (await remoteClient.updateSession(toLocalId(id), body));
134
+ return c.json(toRemote(updated));
135
+ }
136
+ catch (err) {
137
+ const mapped = mapRemoteError(c, err);
138
+ if (mapped)
139
+ return mapped;
140
+ throw err;
141
+ }
142
+ }
143
+ const session = await sessionManager.getSession(id);
41
144
  if (!session) {
42
145
  return c.json({ error: { code: 'NOT_FOUND', message: 'Сессия не найдена' } }, 404);
43
146
  }
@@ -113,7 +216,24 @@ export function createSessionRoutes(auth, sessionManager, eventBus, queueManager
113
216
  return c.json(serializeSession(session, { agentRegistry }));
114
217
  });
115
218
  app.delete('/:id', auth.requireAuth, async (c) => {
116
- const session = await sessionManager.getSession(c.req.param('id'));
219
+ const remoteClient = resolveClient();
220
+ const id = c.req.param('id');
221
+ if (isRemoteRef(id)) {
222
+ if (!remoteClient) {
223
+ return c.json({ error: { code: 'REMOTE_UNAVAILABLE', message: 'Гибридный режим не настроен' } }, 502);
224
+ }
225
+ try {
226
+ await remoteClient.deleteSession(toLocalId(id));
227
+ }
228
+ catch (err) {
229
+ const mapped = mapRemoteError(c, err);
230
+ if (mapped)
231
+ return mapped;
232
+ throw err;
233
+ }
234
+ return c.body(null, 204);
235
+ }
236
+ const session = await sessionManager.getSession(id);
117
237
  if (!session) {
118
238
  return c.json({ error: { code: 'NOT_FOUND', message: 'Сессия не найдена' } }, 404);
119
239
  }
@@ -134,12 +254,30 @@ export function createSessionRoutes(auth, sessionManager, eventBus, queueManager
134
254
  });
135
255
  });
136
256
  app.post('/:id/prompt', auth.requireAuth, async (c) => {
257
+ const remoteClient = resolveClient();
258
+ const sessionId = c.req.param('id');
259
+ // Гибрид: удалённая сессия исполняется backend — пробрасываем upstream Response
260
+ // как есть (SSE-стрим), без локального оркестратора.
261
+ if (isRemoteRef(sessionId)) {
262
+ if (!remoteClient) {
263
+ return c.json({ error: { code: 'REMOTE_UNAVAILABLE', message: 'Гибридный режим не настроен' } }, 502);
264
+ }
265
+ const body = await c.req.json().catch(() => ({}));
266
+ try {
267
+ return await remoteClient.promptSession(toLocalId(sessionId), body, { signal: c.req.raw.signal });
268
+ }
269
+ catch (err) {
270
+ const mapped = mapRemoteError(c, err);
271
+ if (mapped)
272
+ return mapped;
273
+ throw err;
274
+ }
275
+ }
137
276
  const body = await c.req.json().catch(() => ({}));
138
277
  const content = body.content?.trim();
139
278
  if (!content) {
140
279
  return c.json({ error: { code: 'VALIDATION_ERROR', message: 'Контент обязателен' } }, 400);
141
280
  }
142
- const sessionId = c.req.param('id');
143
281
  const session = await sessionManager.getSession(sessionId);
144
282
  if (!session) {
145
283
  return c.json({ error: { code: 'NOT_FOUND', message: 'Сессия не найдена' } }, 404);
@@ -203,7 +341,28 @@ export function createSessionRoutes(auth, sessionManager, eventBus, queueManager
203
341
  });
204
342
  });
205
343
  app.get('/:id/messages', auth.requireAuth, async (c) => {
206
- const session = await sessionManager.getSession(c.req.param('id'));
344
+ const remoteClient = resolveClient();
345
+ const id = c.req.param('id');
346
+ if (isRemoteRef(id)) {
347
+ if (!remoteClient) {
348
+ return c.json({ error: { code: 'REMOTE_UNAVAILABLE', message: 'Гибридный режим не настроен' } }, 502);
349
+ }
350
+ try {
351
+ const result = (await remoteClient.getSessionMessages(toLocalId(id)));
352
+ // session_id в ответе — ссылка на сущность: приводим к remote-ref.
353
+ const out = { ...result };
354
+ if (typeof out.session_id === 'string')
355
+ out.session_id = toRemoteRef(out.session_id);
356
+ return c.json(out);
357
+ }
358
+ catch (err) {
359
+ const mapped = mapRemoteError(c, err);
360
+ if (mapped)
361
+ return mapped;
362
+ throw err;
363
+ }
364
+ }
365
+ const session = await sessionManager.getSession(id);
207
366
  if (!session) {
208
367
  return c.json({ error: { code: 'NOT_FOUND', message: 'Сессия не найдена' } }, 404);
209
368
  }
@@ -231,7 +390,24 @@ export function createSessionRoutes(auth, sessionManager, eventBus, queueManager
231
390
  return c.json(serializeSession(session, { agentRegistry }));
232
391
  });
233
392
  app.post('/:id/abort', auth.requireAuth, async (c) => {
234
- const session = await sessionManager.getSession(c.req.param('id'));
393
+ const remoteClient = resolveClient();
394
+ const id = c.req.param('id');
395
+ if (isRemoteRef(id)) {
396
+ if (!remoteClient) {
397
+ return c.json({ error: { code: 'REMOTE_UNAVAILABLE', message: 'Гибридный режим не настроен' } }, 502);
398
+ }
399
+ try {
400
+ const result = await remoteClient.abortSession(toLocalId(id));
401
+ return c.json(result);
402
+ }
403
+ catch (err) {
404
+ const mapped = mapRemoteError(c, err);
405
+ if (mapped)
406
+ return mapped;
407
+ throw err;
408
+ }
409
+ }
410
+ const session = await sessionManager.getSession(id);
235
411
  if (!session) {
236
412
  return c.json({ error: { code: 'NOT_FOUND', message: 'Сессия не найдена' } }, 404);
237
413
  }
@@ -261,7 +437,24 @@ export function createSessionRoutes(auth, sessionManager, eventBus, queueManager
261
437
  }
262
438
  });
263
439
  app.post('/:id/summarize', auth.requireAuth, async (c) => {
264
- const session = await sessionManager.getSession(c.req.param('id'));
440
+ const remoteClient = resolveClient();
441
+ const id = c.req.param('id');
442
+ if (isRemoteRef(id)) {
443
+ if (!remoteClient) {
444
+ return c.json({ error: { code: 'REMOTE_UNAVAILABLE', message: 'Гибридный режим не настроен' } }, 502);
445
+ }
446
+ try {
447
+ const result = await remoteClient.summarizeSession(toLocalId(id));
448
+ return c.json(result);
449
+ }
450
+ catch (err) {
451
+ const mapped = mapRemoteError(c, err);
452
+ if (mapped)
453
+ return mapped;
454
+ throw err;
455
+ }
456
+ }
457
+ const session = await sessionManager.getSession(id);
265
458
  if (!session) {
266
459
  return c.json({ error: { code: 'NOT_FOUND', message: 'Сессия не найдена' } }, 404);
267
460
  }